jira-pat 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/backend/index.js +23 -23
- package/backend/service/jiraService.js +9 -9
- package/frontend/dist/assets/CreateIssueModal-DPSWn0nN.js +1 -0
- package/frontend/dist/assets/IssueDetailPanel-DE5h8kPI.js +1 -0
- package/frontend/dist/assets/IssueDrawer-BIQ3mixE.js +1 -0
- package/frontend/dist/assets/StandaloneIssuePage-acjdCcy6.js +1 -0
- package/frontend/dist/assets/index-CadqjZnU.js +8 -0
- package/frontend/dist/assets/index-Cbr0Tj50.css +1 -0
- package/frontend/dist/assets/useFocusTrap-DDp1tqrR.js +1 -0
- package/frontend/dist/assets/vendor-tiptap-D82WYWec.js +189 -0
- package/frontend/dist/assets/vendor-ui-Cdo3Wdx4.js +240 -0
- package/frontend/dist/index.html +4 -2
- package/package.json +1 -1
- package/frontend/dist/assets/index-BHcwfjLq.js +0 -434
- package/frontend/dist/assets/index-CvGcEGZd.css +0 -1
package/backend/index.js
CHANGED
|
@@ -47,29 +47,29 @@ app.get('/api/health', (req, res) => {
|
|
|
47
47
|
|
|
48
48
|
// Serve frontend static files
|
|
49
49
|
const frontendDist = path.resolve(__dirname, '..', 'frontend', 'dist');
|
|
50
|
-
console.
|
|
51
|
-
console.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
50
|
+
console.debug('--- Static Assets Setup ---');
|
|
51
|
+
console.debug('Searching for frontend at:', frontendDist);
|
|
52
|
+
if (require('fs').existsSync(frontendDist)) {
|
|
53
|
+
console.debug('✅ Frontend dist found. Serving static files.');
|
|
54
|
+
|
|
55
55
|
app.use(express.static(frontendDist));
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
} else {
|
|
70
|
-
|
|
71
|
-
}
|
|
57
|
+
app.use((req, res, next) => {
|
|
58
|
+
if (!req.path.startsWith('/api') && req.method === 'GET') {
|
|
59
|
+
const indexPath = path.resolve(frontendDist, 'index.html');
|
|
60
|
+
if (require('fs').existsSync(indexPath)) {
|
|
61
|
+
return res.sendFile(indexPath);
|
|
62
|
+
} else {
|
|
63
|
+
console.error('❌ Error: index.html not found even though dist exists!');
|
|
64
|
+
return res.status(404).send('Dashboard files missing (index.html)');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
next();
|
|
68
|
+
});
|
|
69
|
+
} else {
|
|
70
|
+
console.warn('⚠️ Warning: frontend/dist directory NOT found at ' + frontendDist);
|
|
71
|
+
}
|
|
72
72
|
|
|
73
|
-
app.listen(PORT, () => {
|
|
74
|
-
|
|
75
|
-
});
|
|
73
|
+
app.listen(PORT, () => {
|
|
74
|
+
console.debug(`Server is running on port ${PORT}`);
|
|
75
|
+
});
|
|
@@ -100,12 +100,12 @@ const searchIssues = async (params) => {
|
|
|
100
100
|
const cacheKey = `search_${jql}_${startAt}_${maxResults}`;
|
|
101
101
|
const cachedResult = cache.get(cacheKey);
|
|
102
102
|
if (cachedResult) {
|
|
103
|
-
console.
|
|
103
|
+
console.debug('Returning from cache for JQL:', jql);
|
|
104
104
|
return cachedResult;
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
const client = getJiraClient();
|
|
108
|
-
console.
|
|
108
|
+
console.debug(`Querying Jira API: ${jql}`);
|
|
109
109
|
|
|
110
110
|
const response = await client.get('/rest/api/3/search/jql', {
|
|
111
111
|
params: {
|
|
@@ -305,7 +305,7 @@ const addComment = async (issueKey, text) => {
|
|
|
305
305
|
const editComment = async (issueKey, commentId, text) => {
|
|
306
306
|
try {
|
|
307
307
|
const client = getJiraClient();
|
|
308
|
-
console.
|
|
308
|
+
console.debug(`Editing comment ${commentId} on ${issueKey}...`);
|
|
309
309
|
const adfBody = {
|
|
310
310
|
version: 1,
|
|
311
311
|
type: "doc",
|
|
@@ -341,14 +341,14 @@ const editComment = async (issueKey, commentId, text) => {
|
|
|
341
341
|
const getCurrentUser = async () => {
|
|
342
342
|
try {
|
|
343
343
|
const client = getJiraClient();
|
|
344
|
-
console.
|
|
344
|
+
console.debug('Fetching current user info from Jira...');
|
|
345
345
|
const response = await client.get('/rest/api/3/myself');
|
|
346
346
|
const user = {
|
|
347
347
|
accountId: response.data.accountId,
|
|
348
348
|
displayName: response.data.displayName,
|
|
349
349
|
email: response.data.emailAddress
|
|
350
350
|
};
|
|
351
|
-
console.
|
|
351
|
+
console.debug('Current user loaded:', user.displayName, '(', user.accountId, ')');
|
|
352
352
|
return user;
|
|
353
353
|
} catch (error) {
|
|
354
354
|
console.error('Error fetching current user:', error.message);
|
|
@@ -386,13 +386,13 @@ const getAssignableUsers = async (issueKey, query) => {
|
|
|
386
386
|
const cachedUsers = cache.get(cacheKey);
|
|
387
387
|
|
|
388
388
|
if (cachedUsers) {
|
|
389
|
-
console.
|
|
389
|
+
console.debug(`Returning cached assignable users for ${issueKey}${query ? ` (query: ${query})` : ''}`);
|
|
390
390
|
return cachedUsers;
|
|
391
391
|
}
|
|
392
392
|
|
|
393
393
|
try {
|
|
394
394
|
const client = getJiraClient();
|
|
395
|
-
console.
|
|
395
|
+
console.debug(`Querying Jira API for assignable users: ${issueKey}${query ? ` (query: ${query})` : ''}`);
|
|
396
396
|
|
|
397
397
|
const params = { issueKey };
|
|
398
398
|
if (query) params.query = query;
|
|
@@ -776,13 +776,13 @@ const getProjectMembers = async (projectKey, query) => {
|
|
|
776
776
|
const cachedMembers = cache.get(cacheKey);
|
|
777
777
|
|
|
778
778
|
if (cachedMembers) {
|
|
779
|
-
console.
|
|
779
|
+
console.debug(`Returning cached project members for ${projectKey}`);
|
|
780
780
|
return cachedMembers;
|
|
781
781
|
}
|
|
782
782
|
|
|
783
783
|
try {
|
|
784
784
|
const client = getJiraClient();
|
|
785
|
-
console.
|
|
785
|
+
console.debug(`Fetching project members for ${projectKey}${query ? ` (query: ${query})` : ''}`);
|
|
786
786
|
|
|
787
787
|
const seen = new Map();
|
|
788
788
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as e}from"./vendor-tiptap-D82WYWec.js";import{R as v,a as r,X as b,b as N,h as f}from"./vendor-ui-Cdo3Wdx4.js";import{f as C,c as S}from"./index-CadqjZnU.js";import{u as T}from"./useFocusTrap-DDp1tqrR.js";const B=v.memo(function({isOpen:i,onClose:l,onCreated:h,projects:j,projectsLoading:o,addToast:c}){const[x,n]=r.useState([]),[a,t]=r.useState({projectKey:"ADW",summary:"",description:"",issueType:"",priority:""}),[u,m]=r.useState(!1),[d,p]=r.useState("");r.useEffect(()=>{a.projectKey?C(a.projectKey).then(n).catch(s=>console.error("Error fetching issue types:",s)):n([])},[a.projectKey]);const y=r.useRef(null);T(y,i);const g=async()=>{if(!(!a.projectKey||!a.summary||!a.issueType)){m(!0),p("");try{await S(a),t({projectKey:"",summary:"",description:"",issueType:"",priority:""}),h(),c("Issue created successfully","success")}catch(s){p(s.message||"Failed to create issue"),c(`Error creating issue: ${s.message}`,"error")}finally{m(!1)}}};return i?e.jsx("div",{className:"modal-overlay",ref:y,onClick:l,children:e.jsxs("div",{className:"modal",onClick:s=>s.stopPropagation(),role:"dialog","aria-modal":"true","aria-labelledby":"modal-title",children:[e.jsxs("div",{className:"modal-header",children:[e.jsx("h2",{id:"modal-title",children:"Create Issue"}),e.jsx("button",{className:"close-btn",onClick:l,"aria-label":"Close modal",children:e.jsx(b,{size:24})})]}),e.jsxs("div",{className:"modal-body",children:[d&&e.jsxs("div",{className:"error",role:"alert",style:{marginBottom:"1rem"},children:[e.jsx(N,{size:16,style:{marginRight:"0.5rem"}}),d]}),e.jsxs("div",{className:"input-group",style:{marginBottom:"1rem"},children:[e.jsx("label",{className:"input-label",children:"Project *"}),e.jsxs("select",{className:"select-input",style:{width:"100%"},value:a.projectKey,onChange:s=>t({...a,projectKey:s.target.value,issueType:""}),"aria-label":"Select project",children:[e.jsx("option",{value:"",children:o?"Loading...":"Select Project"}),!o&&j.map(s=>e.jsxs("option",{value:s.key,children:[s.name," (",s.key,")"]},s.id))]})]}),a.projectKey&&e.jsxs("div",{className:"input-group",style:{marginBottom:"1rem"},children:[e.jsx("label",{className:"input-label",children:"Issue Type *"}),e.jsxs("select",{className:"select-input",style:{width:"100%"},value:a.issueType,onChange:s=>t({...a,issueType:s.target.value}),"aria-label":"Select issue type",children:[e.jsx("option",{value:"",children:"Select Type"}),x.filter(s=>!s.subtask).map(s=>e.jsx("option",{value:s.id,children:s.name},s.id))]})]}),e.jsxs("div",{className:"input-group",style:{marginBottom:"1rem"},children:[e.jsx("label",{className:"input-label",children:"Summary *"}),e.jsx("input",{type:"text",className:"text-input",style:{width:"100%"},placeholder:"Short description",value:a.summary,onChange:s=>t({...a,summary:s.target.value}),"aria-label":"Issue summary"})]}),e.jsxs("div",{className:"input-group",style:{marginBottom:"1rem"},children:[e.jsx("label",{className:"input-label",children:"Description"}),e.jsx("textarea",{className:"comment-box",style:{width:"100%",minHeight:"100px"},placeholder:"Detailed description...",value:a.description,onChange:s=>t({...a,description:s.target.value}),"aria-label":"Issue description"})]}),e.jsxs("div",{className:"input-group",style:{marginBottom:"1rem"},children:[e.jsx("label",{className:"input-label",children:"Priority (Optional)"}),e.jsxs("select",{className:"select-input",style:{width:"100%"},value:a.priority,onChange:s=>t({...a,priority:s.target.value}),"aria-label":"Select priority",children:[e.jsx("option",{value:"",children:"Default Priority"}),e.jsx("option",{value:"1",children:"Highest"}),e.jsx("option",{value:"2",children:"High"}),e.jsx("option",{value:"3",children:"Medium"}),e.jsx("option",{value:"4",children:"Low"}),e.jsx("option",{value:"5",children:"Lowest"})]})]})]}),e.jsxs("div",{className:"modal-footer",children:[e.jsx("button",{className:"btn-secondary",onClick:l,children:"Cancel"}),e.jsx("button",{className:"btn-primary",onClick:g,disabled:!a.projectKey||!a.summary||!a.issueType||u,"aria-label":"Create issue",children:u?e.jsxs(e.Fragment,{children:[e.jsx(f,{size:16,className:"spinner"}),"Creating..."]}):"Create"})]})]})}):null});export{B as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as e,u as $e,i as He,a as Be,b as Fe,c as Ue,E as Oe,d as Ke}from"./vendor-tiptap-D82WYWec.js";import{t as qe,a as l,U as We,u as Qe,v as Ge,w as Ve,x as Xe,H as Je,y as Ye,z as Ze,G as De,h as M,o as X,l as ve,b as es,p as xe,q as ss,J as ts,X as pe,N as ns,O as as,Q as je}from"./vendor-ui-Cdo3Wdx4.js";import{b as is,g as ls,d as V,e as W,S as _,h as rs,i as os}from"./index-CadqjZnU.js";const cs=["p","br","strong","em","u","s","del","ins","a","img","span","div","ul","ol","li","h1","h2","h3","h4","h5","h6","code","pre","blockquote","table","thead","tbody","tr","th","td","hr","sup","sub"],ds=["href","src","alt","class","className","target","rel","id","style","colspan","rowspan","bgcolor"],be=n=>n?qe.sanitize(n,{ALLOWED_TAGS:cs,ALLOWED_ATTR:ds,ALLOW_DATA_ATTR:!1,ADD_ATTR:["target"]}):"";function ms({width:n="60%"}){return e.jsx("div",{className:"skeleton skeleton-title",style:{width:n}})}function us({lines:n=3,lastLineWidth:t="60%"}){return e.jsx(e.Fragment,{children:Array.from({length:n}).map((u,x)=>e.jsx("div",{className:"skeleton skeleton-line",style:{width:x===n-1?t:"100%"}},x))})}function fe({width:n=80}){return e.jsx("div",{className:"skeleton skeleton-chip",style:{width:n}})}function K(){return e.jsxs("div",{className:"skeleton-sidebar-item",children:[e.jsx("div",{className:"skeleton",style:{height:14,width:"30%",marginBottom:4}}),e.jsx("div",{className:"skeleton",style:{height:20,width:"50%"}})]})}function hs({users:n,position:t,onSelect:u,onClose:x,selectedIndex:a,isLoading:i}){const o=l.useRef(null);return l.useEffect(()=>{const c=d=>{o.current&&!o.current.contains(d.target)&&x()};return document.addEventListener("mousedown",c),()=>document.removeEventListener("mousedown",c)},[x]),i?e.jsx("div",{ref:o,className:"mention-dropdown",style:{top:t.top,left:t.left},children:e.jsxs("div",{className:"mention-dropdown__loading",children:[e.jsx("span",{className:"spinner"}),"Searching..."]})}):n.length===0?e.jsx("div",{ref:o,className:"mention-dropdown",style:{top:t.top,left:t.left},children:e.jsx("div",{className:"mention-dropdown__empty",children:"No users found"})}):e.jsx("div",{ref:o,className:"mention-dropdown",style:{top:t.top,left:t.left},role:"listbox","aria-label":"Select a user to mention",children:n.map((c,d)=>{var p;return e.jsxs("div",{className:`mention-dropdown__item ${d===a?"mention-dropdown__item--selected":""}`,onClick:()=>u(c.displayName),role:"option","aria-selected":d===a,tabIndex:-1,children:[e.jsx("div",{className:"mention-dropdown__avatar",children:(p=c.avatarUrls)!=null&&p["48x48"]?e.jsx("img",{src:c.avatarUrls["48x48"],alt:"",width:32,height:32}):e.jsx("div",{className:"mention-dropdown__avatar-placeholder",children:e.jsx(We,{size:16})})}),e.jsxs("div",{className:"mention-dropdown__info",children:[e.jsx("span",{className:"mention-dropdown__name",children:c.displayName}),c.emailAddress&&e.jsx("span",{className:"mention-dropdown__email",children:c.emailAddress})]})]},c.accountId)})})}function xs({content:n,onSave:t,onCancel:u,isSaving:x}){const a=$e({extensions:[He.configure({heading:{levels:[1,2,3]}}),Be.configure({openOnClick:!1,HTMLAttributes:{rel:"noopener noreferrer nofollow"}}),Fe.configure({inline:!0,allowBase64:!0}),Ue.configure({placeholder:"Add a description..."})],content:n||"",editorProps:{attributes:{class:"tiptap-editor-content"}}});if(!a)return null;const i=()=>{const d=a.getHTML();t(d)},o=()=>{const d=window.prompt("Enter URL:");d&&a.chain().focus().setLink({href:d}).run()},c=()=>{const d=window.prompt("Enter image URL:");d&&a.chain().focus().setImage({src:d}).run()};return e.jsxs("div",{className:"description-editor",children:[e.jsxs("div",{className:"editor-toolbar",children:[e.jsx("button",{type:"button",onClick:()=>a.chain().focus().toggleBold().run(),className:a.isActive("bold")?"toolbar-btn active":"toolbar-btn",title:"Bold",children:e.jsx(Qe,{size:16})}),e.jsx("button",{type:"button",onClick:()=>a.chain().focus().toggleItalic().run(),className:a.isActive("italic")?"toolbar-btn active":"toolbar-btn",title:"Italic",children:e.jsx(Ge,{size:16})}),e.jsx("button",{type:"button",onClick:o,className:a.isActive("link")?"toolbar-btn active":"toolbar-btn",title:"Add Link",children:e.jsx(Ve,{size:16})}),e.jsx("button",{type:"button",onClick:c,className:"toolbar-btn",title:"Add Image",children:e.jsx(Xe,{size:16})}),e.jsx("span",{className:"toolbar-divider"}),e.jsx("button",{type:"button",onClick:()=>a.chain().focus().toggleHeading({level:1}).run(),className:a.isActive("heading",{level:1})?"toolbar-btn active":"toolbar-btn",title:"Heading 1",children:e.jsx(Je,{size:16})}),e.jsx("button",{type:"button",onClick:()=>a.chain().focus().toggleHeading({level:2}).run(),className:a.isActive("heading",{level:2})?"toolbar-btn active":"toolbar-btn",title:"Heading 2",children:e.jsx(Ye,{size:16})}),e.jsx("span",{className:"toolbar-divider"}),e.jsx("button",{type:"button",onClick:()=>a.chain().focus().toggleBulletList().run(),className:a.isActive("bulletList")?"toolbar-btn active":"toolbar-btn",title:"Bullet List",children:e.jsx(Ze,{size:16})}),e.jsx("button",{type:"button",onClick:()=>a.chain().focus().toggleOrderedList().run(),className:a.isActive("orderedList")?"toolbar-btn active":"toolbar-btn",title:"Numbered List",children:e.jsx(De,{size:16})})]}),e.jsx(Oe,{editor:a}),e.jsxs("div",{className:"editor-actions",children:[e.jsx("button",{type:"button",className:"btn-primary btn-sm",onClick:i,disabled:x,children:x?e.jsxs(e.Fragment,{children:[e.jsx(M,{size:14,className:"spinner"}),"Saving..."]}):e.jsxs(e.Fragment,{children:[e.jsx(X,{size:14}),"Save"]})}),e.jsxs("button",{type:"button",className:"btn-secondary btn-sm",onClick:u,disabled:x,children:[e.jsx(ve,{size:14}),"Cancel"]})]})]})}function ps(n){const[t,u]=l.useState(!1),[x,a]=l.useState(""),[i,o]=l.useState([]),[c,d]=l.useState({top:0,left:0}),[p,r]=l.useState(0),[m,L]=l.useState(0),[A,z]=l.useState(!1),y=l.useRef(null),w=l.useRef(null),E=l.useCallback((h,v)=>{const b=h.slice(0,v),k=b.lastIndexOf("@");if(k===-1)return{query:"",startPos:-1};const C=b.slice(k+1);return C.includes(" ")?{query:"",startPos:-1}:{query:C,startPos:k}},[]),S=l.useCallback(async h=>{if(n){z(!0);try{const v=await is(n,h);o(v),r(0)}catch(v){console.error("Error fetching project members:",v),o([])}finally{z(!1)}}},[n]),N=l.useCallback((h,v,b)=>{w.current=b;const{query:k,startPos:C}=E(h,v);if(C===-1){u(!1),a("");return}a(k),L(C);const R=b.getBoundingClientRect();d({top:R.height+5,left:0}),u(!0),y.current&&clearTimeout(y.current),y.current=setTimeout(()=>{S(k)},300)},[E,S]),j=l.useCallback(h=>{const v=w.current;if(!v)return"";const b=v.value,k=v.selectionStart,C=b.slice(0,m),R=b.slice(k),B=`${C}${h} ${R}`,I=m+h.length+1;return u(!1),a(""),o([]),{text:B,cursorPos:I}},[m]),g=l.useCallback((h,v)=>{if(!t||i.length===0)return!1;switch(h.key){case"ArrowDown":return h.preventDefault(),r(b=>b<i.length-1?b+1:0),!0;case"ArrowUp":return h.preventDefault(),r(b=>b>0?b-1:i.length-1),!0;case"Enter":return i[p]?(h.preventDefault(),i[p]):!1;case"Escape":return h.preventDefault(),u(!1),a(""),!0;case"Tab":return i[p]?(h.preventDefault(),i[p]):!1;default:return!1}},[t,i,p]),Q=l.useCallback(()=>{u(!1),a(""),o([])},[]),H=l.useCallback(h=>h?{top:h.getBoundingClientRect().height+5,left:0}:{top:0,left:0},[]);return l.useEffect(()=>()=>{y.current&&clearTimeout(y.current)},[]),{showMentionDropdown:t,mentionQuery:x,mentionResults:i,mentionPosition:c,selectedIndex:p,isLoadingMentions:A,handleTextChange:N,insertMention:j,handleKeyDown:g,closeMentionDropdown:Q,getCaretCoordinates:H,setSelectedIndex:r}}const js="http://localhost:5000",bs=(n,t)=>`${t==="standalone"?js:"http://localhost:5000"}/api/issues/image/proxy?url=${encodeURIComponent(n)}`,q=(n,t,u)=>{t==="standalone"?window.location.hash=`#/view/${n}`:u&&u(n)};function fs({assigneeSearch:n,setAssigneeSearch:t,assignableUsers:u,setTargetAccountId:x,targetAccountId:a}){const i=l.useRef(null),[o,c]=l.useState(null),[d,p]=l.useState(!1);return l.useEffect(()=>{if(d&&n.trim()&&i.current){const r=i.current.getBoundingClientRect();c({top:r.bottom+4,left:r.left,width:r.width})}else c(null)},[n,u,d]),l.useEffect(()=>{if(!o)return;const r=()=>{if(i.current){const m=i.current.getBoundingClientRect();c({top:m.bottom+4,left:m.left,width:m.width})}};return window.addEventListener("scroll",r,!0),window.addEventListener("resize",r),()=>{window.removeEventListener("scroll",r,!0),window.removeEventListener("resize",r)}},[o]),l.useEffect(()=>{if(!d)return;const r=m=>{i.current&&!i.current.contains(m.target)&&p(!1)};return document.addEventListener("mousedown",r),()=>document.removeEventListener("mousedown",r)},[d]),e.jsxs("div",{className:"assignee-input-container",children:[e.jsx("input",{ref:i,type:"text",className:"text-input",placeholder:"Change assignee...",value:n,onChange:r=>{t(r.target.value),p(!0),a&&x("")},onFocus:()=>p(!0),"aria-label":"Search for assignee"}),o&&d&&n.trim()&&Ke.createPortal(e.jsx("div",{className:"assignee-suggestions-dropdown",style:{position:"fixed",top:o.top,left:o.left,width:o.width},children:(()=>{const r=u.filter(m=>(m.displayName||"").toLowerCase().includes(n.toLowerCase())).slice(0,10);return r.length>0?r.map(m=>e.jsxs("div",{className:"assignee-suggestion-item",onMouseDown:L=>{L.preventDefault(),x(m.accountId),t(m.displayName),p(!1)},children:[e.jsx("span",{className:"avatar small",children:W(m.displayName)}),e.jsx("span",{className:"user-name",children:m.displayName})]},m.accountId)):e.jsx("div",{className:"assignee-suggestion-item empty",children:"No users found"})})()}),document.body)]})}function vs({value:n,onChange:t,onSubmit:u,projectKey:x,isSubmitting:a}){const i=l.useRef(null),{showMentionDropdown:o,mentionResults:c,mentionPosition:d,selectedIndex:p,isLoadingMentions:r,handleTextChange:m,insertMention:L,handleKeyDown:A,closeMentionDropdown:z}=ps(x),y=N=>{const j=N.target.value,g=N.target.selectionStart;m(j,g,N.target),t(j)},w=N=>{const j=A(N,n);if(j&&typeof j=="object"&&j.displayName){const g=L(j.displayName);g&&(t(g.text),setTimeout(()=>{i.current&&(i.current.focus(),i.current.setSelectionRange(g.cursorPos,g.cursorPos))},0))}},E=N=>{const j=L(N);j&&(t(j.text),setTimeout(()=>{i.current&&(i.current.focus(),i.current.setSelectionRange(j.cursorPos,j.cursorPos))},0))},S=()=>{z(),u()};return e.jsxs("div",{className:"comment-composer",children:[e.jsxs("div",{style:{position:"relative"},children:[e.jsx("textarea",{ref:i,className:"comment-box",placeholder:"Add a comment... (use @ to mention)",value:n,onChange:y,onKeyDown:w,disabled:a,"aria-label":"Add comment"}),o&&e.jsx(hs,{users:c,position:d,onSelect:E,onClose:z,selectedIndex:p,isLoading:r})]}),e.jsx("button",{className:"btn-primary",onClick:S,disabled:!n.trim()||a,"aria-label":"Post comment",children:a?e.jsxs(e.Fragment,{children:[e.jsx(M,{size:16,className:"spinner"}),"Posting..."]}):"Post Comment"})]})}function _s({mode:n,issueDetail:t,comments:u,transitions:x,assignableUsers:a,projectVersions:i,drawerLoading:o,drawerError:c,newCommentText:d,setNewCommentText:p,isPostingComment:r,targetTransitionId:m,setTargetTransitionId:L,isTransitioning:A,isTransitioningOptimistic:z,optimisticStatus:y,assigneeSearch:w,setAssigneeSearch:E,targetAccountId:S,setTargetAccountId:N,isAssigning:j,isAssigningOptimistic:g,optimisticAssignee:Q,isUpdatingVersions:H,newLabelText:h,setNewLabelText:v,labelSuggestions:b,showLabelSuggestions:k,setShowLabelSuggestions:C,isUpdatingLabels:R,isUploading:B,uploadMessage:I,handlePostComment:Ne,handleAssignUser:ge,handleFileUpload:ye,handleUpdateVersion:we,handleAddLabel:J,handleRemoveLabel:ke,handleUpdateStatus:Ce,onSubtaskClick:F,currentUser:U,editingCommentId:Se,editingCommentText:Y,setEditingCommentText:Le,isEditingComment:G,startEditComment:ze,cancelEditComment:Ee,saveEditComment:Re,isEditingSummary:Ns,editingSummaryText:gs,setEditingSummaryText:ys,isUpdatingSummary:ws,startEditSummary:ks,cancelEditSummary:Cs,saveEditSummary:Ss,isEditingDescription:_e,editingDescriptionText:Ae,setEditingDescriptionText:Ls,isUpdatingDescription:Pe,startEditDescription:Z,cancelEditDescription:Me,saveEditDescription:Ie}){var D,ee,se,te,ne,ae,ie,le,re,oe,ce,de;return e.jsxs(e.Fragment,{children:[o&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"drawer-main",children:e.jsxs("div",{className:"drawer-skeleton",children:[e.jsxs("div",{className:"drawer-skeleton-header",children:[e.jsx(ms,{width:"40%"}),e.jsxs("div",{style:{display:"flex",gap:"0.5rem",marginTop:"0.5rem"},children:[e.jsx(fe,{}),e.jsx(fe,{width:60})]})]}),e.jsx("div",{className:"drawer-skeleton-description",children:e.jsx(us,{lines:4})})]})}),e.jsx("div",{className:"drawer-sidebar",children:e.jsxs("div",{className:"drawer-skeleton-sidebar",children:[e.jsx(K,{}),e.jsx(K,{}),e.jsx(K,{}),e.jsx(K,{})]})})]}),c&&e.jsxs("div",{className:"error",role:"alert",style:{gridColumn:"1 / -1"},children:[e.jsx(es,{size:16,style:{marginRight:"0.5rem"}}),c]}),!o&&!c&&t&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"drawer-main",children:[e.jsxs("div",{className:"main-content-section",children:[e.jsxs("div",{className:"section-header",children:[e.jsx("h3",{children:"Description"}),Z&&e.jsx("button",{className:"edit-btn",onClick:Z,"aria-label":"Edit description",children:e.jsx(xe,{size:14})})]}),_e?e.jsx(xs,{content:Ae,onSave:Ie,onCancel:Me,isSaving:Pe}):e.jsx("div",{className:"description-content",children:t.fields.descriptionHtml?e.jsx("div",{dangerouslySetInnerHTML:{__html:be(t.fields.descriptionHtml)}}):t.fields.descriptionText||e.jsx("i",{style:{color:"var(--text-muted)"},children:"No description provided."})})]}),((D=t.fields.subtasksMapped)==null?void 0:D.length)>0&&e.jsxs("div",{className:"main-content-section",children:[e.jsxs("h3",{children:["Subtasks (",t.fields.subtasksMapped.length,")"]}),e.jsx("div",{className:"subtask-list",children:t.fields.subtasksMapped.map(s=>e.jsxs("div",{className:"subtask-item",onClick:()=>q(s.key,n,F),role:"button",tabIndex:0,onKeyDown:f=>f.key==="Enter"&&q(s.key,n,F),children:[e.jsxs("span",{className:"issue-key",children:[ls("subtask"),s.key]}),e.jsx("span",{className:`status-badge ${V(s.status)}`,children:s.status}),e.jsx("span",{className:"summary",children:s.summary})]},s.key))})]}),((ee=t.fields.issuelinksMapped)==null?void 0:ee.length)>0&&e.jsxs("div",{className:"main-content-section",children:[e.jsxs("h3",{children:["Linked Issues (",t.fields.issuelinksMapped.length,")"]}),e.jsx("div",{className:"linked-list",children:t.fields.issuelinksMapped.map(s=>e.jsxs("div",{className:"linked-item",onClick:()=>q(s.key,n,F),role:"button",tabIndex:0,onKeyDown:f=>f.key==="Enter"&&q(s.key,n,F),children:[e.jsx(ss,{size:14,className:"link-type-icon",style:{color:"var(--text-muted)"}}),e.jsx("span",{className:"link-type",children:s.label}),e.jsx("span",{className:"issue-key",children:s.key}),e.jsx("span",{className:`status-badge ${V(s.status)}`,children:s.status}),e.jsx("span",{className:"summary",children:s.summary})]},s.key))})]}),e.jsxs("div",{className:"main-content-section",children:[e.jsxs("h3",{children:["Attachments (",((se=t.fields.attachment)==null?void 0:se.length)||0,")"]}),e.jsx("div",{className:"attachments-list",children:t.fields.attachment&&t.fields.attachment.length>0?t.fields.attachment.map(s=>e.jsxs("div",{className:"attachment-item",children:[e.jsx(ts,{size:14,style:{color:"var(--text-muted)"}}),e.jsx("a",{href:bs(s.content,n),target:"_blank",rel:"noreferrer",children:s.filename}),e.jsxs("span",{className:"size",children:["(",Math.round(s.size/1024)," KB)"]})]},s.id)):e.jsx("div",{style:{color:"var(--text-muted)",fontSize:"13px"},children:"No attachments yet."})}),e.jsxs("div",{className:"upload-zone",children:[e.jsx("input",{type:"file",onChange:ye,disabled:B,"aria-label":"Upload attachment"}),B&&e.jsxs("div",{className:"upload-message",children:[e.jsx(M,{size:14,style:{animation:"spin 1s linear infinite",marginRight:"4px"}}),"Uploading..."]}),I&&e.jsx("div",{className:`upload-message ${I.startsWith("Error")?"error":"success"}`,children:I})]})]}),e.jsxs("div",{className:"main-content-section",children:[e.jsxs("h3",{children:["Comments (",u.length,")"]}),e.jsx(vs,{value:d,onChange:p,onSubmit:Ne,projectKey:((ne=(te=t==null?void 0:t.fields)==null?void 0:te.project)==null?void 0:ne.key)||((ae=t==null?void 0:t.key)==null?void 0:ae.split("-")[0]),isSubmitting:r}),u.length===0?e.jsx("div",{style:{color:"var(--text-muted)",fontSize:"13px",padding:"16px",textAlign:"center",background:"var(--sidebar-bg)",borderRadius:"var(--radius-md)",marginTop:"16px"},children:"No comments yet. Be the first to comment!"}):e.jsx("div",{className:"comments-list",children:[...u].reverse().map(s=>{var O,T,$,me,ue,he;const f=U&&(((O=s.author)==null?void 0:O.accountId)&&((T=s.author)==null?void 0:T.accountId)===U.accountId||(($=s.author)==null?void 0:$.displayName)&&U.displayName&&((me=s.author)==null?void 0:me.displayName)===U.displayName),P=Se===s.id;return e.jsxs("div",{className:`comment-item ${f?"own":""}`,children:[e.jsxs("div",{className:"comment-header",children:[e.jsx("span",{className:"avatar",children:W(((ue=s.author)==null?void 0:ue.displayName)||"Unknown")}),e.jsx("span",{className:"comment-author",children:((he=s.author)==null?void 0:he.displayName)||"Unknown"}),e.jsx("span",{className:"comment-date",children:new Date(s.created).toLocaleString()}),f&&!P&&e.jsx("button",{className:"comment-action-btn",onClick:()=>ze(s.id,s.bodyText||""),"aria-label":"Edit comment",title:"Edit comment",children:e.jsx(xe,{size:16})})]}),P?e.jsxs("div",{className:"comment-edit-form",children:[e.jsx("textarea",{className:"comment-box",value:Y,onChange:Te=>Le(Te.target.value),autoFocus:!0,"aria-label":"Edit comment"}),e.jsxs("div",{className:"comment-edit-actions",children:[e.jsx("button",{className:"btn-primary btn-sm",onClick:Re,disabled:!Y.trim()||G,children:G?e.jsxs(e.Fragment,{children:[e.jsx(M,{size:14,className:"spinner"}),"Saving..."]}):e.jsxs(e.Fragment,{children:[e.jsx(X,{size:14}),"Save"]})}),e.jsxs("button",{className:"btn-secondary btn-sm",onClick:Ee,disabled:G,children:[e.jsx(ve,{size:14}),"Cancel"]})]})]}):e.jsx("div",{className:"comment-body",children:s.renderedHtml?e.jsx("div",{dangerouslySetInnerHTML:{__html:be(s.renderedHtml)}}):s.bodyText||e.jsx("i",{children:"Empty comment"})})]},s.id)})})]})]}),e.jsxs("div",{className:"drawer-sidebar",children:[e.jsxs("div",{className:"sidebar-section",children:[e.jsx("div",{className:"sidebar-label",children:"Status"}),e.jsxs("div",{className:"status-sidebar",children:[e.jsxs("span",{className:`status-badge ${V(y??((ie=t.fields.status)==null?void 0:ie.name))}`,children:[y??((le=t.fields.status)==null?void 0:le.name)??"Unknown",z&&e.jsx("span",{className:"inline-spinner","aria-label":"Saving..."})]}),e.jsxs("div",{className:"transition-control",children:[e.jsxs("select",{className:"select-input",value:m,onChange:s=>L(s.target.value),"aria-label":"Select transition",children:[e.jsx("option",{value:"",children:"Transition..."}),[...x].sort((s,f)=>{var T,$;const P=(((T=s.to)==null?void 0:T.name)||s.name).toLowerCase(),O=((($=f.to)==null?void 0:$.name)||f.name).toLowerCase();return P==="backlog"?1:O==="backlog"?-1:0}).map(s=>{var f;return e.jsx("option",{value:s.id,children:((f=s.to)==null?void 0:f.name)||s.name},s.id)})]}),e.jsx("button",{className:"btn-primary btn-sm",disabled:!m||A,onClick:()=>{var f;const s=x.find(P=>P.id===m);Ce(m,((f=s==null?void 0:s.to)==null?void 0:f.name)||(s==null?void 0:s.name))},"aria-label":"Update status",children:A?"...":"Go"})]})]})]}),e.jsxs("div",{className:"sidebar-section",children:[e.jsx("div",{className:"sidebar-label",children:"Assignee"}),e.jsxs("div",{className:"assignee-sidebar",children:[(()=>{const s=g?Q:t.fields.assignee;return s?e.jsxs("div",{className:"user-info",children:[e.jsx("span",{className:"avatar small",children:W(s.displayName)}),e.jsx("span",{style:{fontSize:"13px"},children:s.displayName}),g&&e.jsx("span",{className:"inline-spinner","aria-label":"Saving..."})]}):e.jsx("span",{className:"unassigned-text",children:"Unassigned"})})(),e.jsx(fs,{assigneeSearch:w,setAssigneeSearch:E,assignableUsers:a,setTargetAccountId:N,targetAccountId:S}),S&&e.jsxs("div",{className:"assignee-actions",children:[e.jsx("button",{className:"btn-primary btn-sm",disabled:j,onClick:()=>{const s=a.find(f=>f.accountId===S);ge(S,(s==null?void 0:s.displayName)||w)},"aria-label":`Assign to ${w}`,title:`Assign to ${w}`,children:j?"...":e.jsxs(e.Fragment,{children:[e.jsx(X,{size:14}),"Assign to ",w.split(" ")[0]]})}),e.jsx("button",{className:"btn-icon",onClick:()=>{N(""),E("")},"aria-label":"Clear",children:e.jsx(pe,{size:14})})]})]})]}),e.jsxs("div",{className:"sidebar-section",children:[e.jsx("div",{className:"sidebar-label",children:"Severity"}),e.jsx("div",{className:"sidebar-value",children:t.fields[_]?e.jsxs("span",{className:`severity-badge ${(t.fields[_].value||t.fields[_].name||"").toLowerCase().replace(/\s+/g,"-")}`,children:[rs(t.fields[_].value||t.fields[_].name),os(t.fields[_].value||t.fields[_].name)]}):e.jsx("span",{style:{color:"var(--text-muted)",fontSize:"13px"},children:"—"})})]}),e.jsxs("div",{className:"sidebar-section",children:[e.jsx("div",{className:"sidebar-label",children:"Labels"}),e.jsxs("div",{className:"sidebar-labels",children:[(t.fields.labels||[]).map(s=>e.jsxs("span",{className:"label-tag",children:[s,e.jsx("button",{className:"label-remove",onClick:()=>ke(s),disabled:R,title:"Remove Label",children:e.jsx(pe,{size:10})})]},s)),e.jsxs("div",{className:"add-label-wrapper",style:{position:"relative"},children:[R?e.jsx(M,{size:12,className:"spinner"}):e.jsx(ns,{size:12,style:{color:"var(--primary)"}}),e.jsx("input",{type:"text",className:"add-label-input",placeholder:"Add...",value:h,onChange:s=>v(s.target.value),onKeyDown:s=>{s.key==="Enter"&&J()},onFocus:()=>C(b.length>0),onBlur:()=>setTimeout(()=>C(!1),200),disabled:R}),k&&e.jsx("div",{className:"label-suggestions-dropdown",children:b.map(s=>e.jsx("div",{className:"label-suggestion-item",onClick:()=>J(s),children:s},s))})]})]})]}),e.jsxs("div",{className:"sidebar-section",children:[e.jsx("div",{className:"sidebar-label",children:"Fix Version"}),e.jsxs("div",{className:"sidebar-value",children:[e.jsx(as,{size:14}),e.jsxs("select",{className:"version-select",value:((oe=(re=t.fields.fixVersions)==null?void 0:re[0])==null?void 0:oe.id)||"",onChange:s=>we(s.target.value),disabled:H,children:[e.jsx("option",{value:"",children:"None"}),i.map(s=>e.jsxs("option",{value:s.id,children:[s.name," ",s.released?"(Released)":""]},s.id))]}),H&&e.jsx(M,{size:12,className:"spinner"})]})]}),e.jsxs("div",{className:"sidebar-section",children:[e.jsx("div",{className:"sidebar-label",children:"Reporter"}),e.jsxs("div",{className:"sidebar-value",children:[e.jsx("span",{className:"avatar small",children:W(((ce=t.fields.reporter)==null?void 0:ce.displayName)||"Unknown")}),e.jsx("span",{children:((de=t.fields.reporter)==null?void 0:de.displayName)||"Unknown"})]})]}),e.jsxs("div",{className:"sidebar-section",children:[e.jsx("div",{className:"sidebar-label",children:"Created"}),e.jsxs("div",{className:"sidebar-date",children:[e.jsx(je,{size:14}),e.jsx("span",{children:new Date(t.fields.created).toLocaleDateString()})]})]}),e.jsxs("div",{className:"sidebar-section",children:[e.jsx("div",{className:"sidebar-label",children:"Updated"}),e.jsxs("div",{className:"sidebar-date",children:[e.jsx(je,{size:14}),e.jsx("span",{children:new Date(t.fields.updated).toLocaleDateString()})]})]})]})]})]})}export{_s as I};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as e}from"./vendor-tiptap-D82WYWec.js";import{R as je,a as be,h as me,o as pe,l as we,p as ve,E as ke,q as ue,X as Ne}from"./vendor-ui-Cdo3Wdx4.js";import{I as fe}from"./IssueDetailPanel-DE5h8kPI.js";import{g as Ce}from"./index-CadqjZnU.js";import{u as ze}from"./useFocusTrap-DDp1tqrR.js";const Be=je.memo(function({issueKey:s,isExpanded:r,onClose:t,onExpand:m,addToast:p,issueDetail:n,comments:w,transitions:v,assignableUsers:k,drawerLoading:u,drawerError:N,newCommentText:f,setNewCommentText:C,isPostingComment:z,targetTransitionId:I,setTargetTransitionId:L,isTransitioning:R,assigneeSearch:g,setAssigneeSearch:M,targetAccountId:P,setTargetAccountId:B,isAssigning:F,projectVersions:H,isUpdatingVersions:V,newLabelText:W,setNewLabelText:X,labelSuggestions:$,showLabelSuggestions:q,setShowLabelSuggestions:D,isUpdatingLabels:O,isUploading:_,uploadMessage:A,handlePostComment:G,handleAssignUser:J,handleFileUpload:Q,handleUpdateVersion:T,handleAddLabel:Y,handleRemoveLabel:Z,handleUpdateStatus:y,onSubtaskClick:E,currentUser:U,editingCommentId:K,editingCommentText:S,setEditingCommentText:ee,isEditingComment:ae,startEditComment:se,cancelEditComment:re,saveEditComment:le,isEditingSummary:d,editingSummaryText:i,setEditingSummaryText:h,isUpdatingSummary:l,startEditSummary:x,cancelEditSummary:o,saveEditSummary:c,isEditingDescription:ne,editingDescriptionText:ie,setEditingDescriptionText:oe,isUpdatingDescription:ce,startEditDescription:te,cancelEditDescription:de,saveEditDescription:he}){var b;const j=be.useRef(null);ze(j,r);const xe=()=>{navigator.clipboard.writeText(window.location.href),p("Link copied to clipboard","success")};return e.jsx("div",{className:"drawer-overlay",ref:j,onClick:t,children:e.jsxs("div",{className:`drawer ${r?"expanded":""}`,onClick:a=>a.stopPropagation(),role:"dialog","aria-modal":"true","aria-labelledby":"drawer-title",children:[e.jsxs("div",{className:"drawer-header",children:[e.jsxs("div",{className:"drawer-header-content",children:[e.jsxs("div",{className:"drawer-breadcrumb",children:[e.jsx("span",{children:s==null?void 0:s.split("-")[0]}),e.jsx("span",{children:"/"}),e.jsx("span",{children:s})]}),n&&e.jsxs("h2",{id:"drawer-title",children:[Ce((b=n.fields.issuetype)==null?void 0:b.name),d?e.jsxs("div",{className:"summary-edit-container",children:[e.jsx("input",{type:"text",className:"summary-edit-input",value:i,onChange:a=>h(a.target.value),disabled:l,autoFocus:!0,onKeyDown:a=>{a.key==="Enter"&&c(),a.key==="Escape"&&o()}}),e.jsxs("div",{className:"summary-edit-actions",children:[e.jsx("button",{className:"btn-icon-success",onClick:c,disabled:l||!i.trim(),"aria-label":"Save summary",children:l?e.jsx(me,{size:14,className:"spinner"}):e.jsx(pe,{size:14})}),e.jsx("button",{className:"btn-icon-danger",onClick:o,disabled:l,"aria-label":"Cancel",children:e.jsx(we,{size:14})})]})]}):e.jsxs("span",{className:"summary-editable",children:[n.fields.summary,e.jsx("button",{className:"edit-btn",onClick:x,"aria-label":"Edit summary",children:e.jsx(ve,{size:14})})]})]})]}),e.jsxs("div",{className:"drawer-header-actions",children:[e.jsx("button",{className:"action-btn",onClick:()=>m(!r),"aria-label":r?"Collapse":"Expand to full view",children:r?e.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:e.jsx("path",{d:"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3"})}):e.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:e.jsx("path",{d:"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3"})})}),e.jsx("button",{className:"action-btn",onClick:()=>window.open(`/#/view/${s}`,"_blank"),"aria-label":"Open in new tab",children:e.jsx(ke,{size:18})}),e.jsx("button",{className:"action-btn",onClick:xe,"aria-label":"Copy link",children:e.jsx(ue,{size:18})}),e.jsx("button",{className:"close-btn",onClick:t,"aria-label":"Close drawer",children:e.jsx(Ne,{size:20})})]})]}),e.jsx("div",{className:"drawer-body",children:e.jsx(fe,{mode:"drawer",issueDetail:n,comments:w,transitions:v,assignableUsers:k,projectVersions:H,drawerLoading:u,drawerError:N,newCommentText:f,setNewCommentText:C,isPostingComment:z,targetTransitionId:I,setTargetTransitionId:L,isTransitioning:R,assigneeSearch:g,setAssigneeSearch:M,targetAccountId:P,setTargetAccountId:B,isAssigning:F,isUpdatingVersions:V,newLabelText:W,setNewLabelText:X,labelSuggestions:$,showLabelSuggestions:q,setShowLabelSuggestions:D,isUpdatingLabels:O,isUploading:_,uploadMessage:A,handlePostComment:G,handleAssignUser:J,handleFileUpload:Q,handleUpdateVersion:T,handleAddLabel:Y,handleRemoveLabel:Z,handleUpdateStatus:y,onSubtaskClick:E,currentUser:U,editingCommentId:K,editingCommentText:S,setEditingCommentText:ee,isEditingComment:ae,startEditComment:se,cancelEditComment:re,saveEditComment:le,isEditingSummary:d,editingSummaryText:i,setEditingSummaryText:h,isUpdatingSummary:l,startEditSummary:x,cancelEditSummary:o,saveEditSummary:c,isEditingDescription:ne,editingDescriptionText:ie,setEditingDescriptionText:oe,isUpdatingDescription:ce,startEditDescription:te,cancelEditDescription:de,saveEditDescription:he})})]})})});export{Be as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as e}from"./vendor-tiptap-D82WYWec.js";import{a as c,s as i,h as Z,b as _,q as $}from"./vendor-ui-Cdo3Wdx4.js";import{u as ee,a as se}from"./index-CadqjZnU.js";import{I as ae}from"./IssueDetailPanel-DE5h8kPI.js";function re(){const[a,m]=c.useState(null),{addToast:o}=ee(),{issueDetail:r,comments:h,transitions:x,assignableUsers:g,drawerLoading:d,drawerError:n,newCommentText:p,setNewCommentText:u,isPostingComment:j,targetTransitionId:f,setTargetTransitionId:b,isTransitioning:w,assigneeSearch:v,setAssigneeSearch:L,targetAccountId:N,setTargetAccountId:y,isAssigning:C,projectVersions:T,isUpdatingVersions:E,newLabelText:I,setNewLabelText:k,labelSuggestions:S,showLabelSuggestions:D,setShowLabelSuggestions:U,isUpdatingLabels:A,isUploading:z,uploadMessage:B,handlePostComment:P,handleAssignUser:V,handleFileUpload:F,handleUpdateVersion:K,handleAddLabel:R,handleRemoveLabel:q,handleUpdateStatus:H,currentUser:M,editingCommentId:W,editingCommentText:G,setEditingCommentText:J,isEditingComment:O,startEditComment:Q,cancelEditComment:X,saveEditComment:Y}=se(a,o);return c.useEffect(()=>{const s=()=>{const l=window.location.hash;if(l.startsWith("#/view/")){const t=l.replace("#/view/","");t&&t!==a&&m(t)}};return s(),window.addEventListener("hashchange",s),window.addEventListener("popstate",s),()=>{window.removeEventListener("hashchange",s),window.removeEventListener("popstate",s)}},[a]),d?e.jsx("div",{className:"standalone-page",children:e.jsxs("div",{className:"standalone-issue-container",children:[e.jsx("header",{className:"standalone-header",children:e.jsxs("a",{href:"/",className:"standalone-back-btn",children:[e.jsx(i,{size:18}),"Back to Dashboard"]})}),e.jsxs("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center"},children:[e.jsx(Z,{size:32,style:{animation:"spin 1s linear infinite"}}),e.jsx("span",{style:{marginLeft:"12px",fontSize:"16px",color:"#666"},children:"Loading issue..."})]})]})}):n||!r?e.jsx("div",{className:"standalone-page",children:e.jsxs("div",{className:"standalone-issue-container",children:[e.jsx("header",{className:"standalone-header",children:e.jsxs("a",{href:"/",className:"standalone-back-btn",children:[e.jsx(i,{size:18}),"Back to Dashboard"]})}),e.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:"16px"},children:[e.jsx(_,{size:48,style:{color:"#de350b"}}),e.jsx("h2",{style:{margin:0,color:"var(--text-main)"},children:n||"Issue not found"}),e.jsx("a",{href:"/",className:"btn-primary",style:{textDecoration:"none",padding:"12px 24px"},children:"Back to Dashboard"})]})]})}):e.jsx("div",{className:"standalone-page",children:e.jsxs("div",{className:"standalone-issue-container",children:[e.jsxs("header",{className:"standalone-header",children:[e.jsxs("a",{href:"/",className:"standalone-back-btn",children:[e.jsx(i,{size:18}),"Back to Dashboard"]}),e.jsx("div",{className:"drawer-header-actions",children:e.jsx("button",{className:"action-btn",onClick:()=>{navigator.clipboard.writeText(window.location.href),o("Link copied to clipboard","success")},"aria-label":"Copy link",children:e.jsx($,{size:18})})})]}),e.jsx("div",{className:"drawer-body",children:e.jsx(ae,{mode:"standalone",issueDetail:r,comments:h,transitions:x,assignableUsers:g,projectVersions:T,drawerLoading:d,drawerError:n,newCommentText:p,setNewCommentText:u,isPostingComment:j,targetTransitionId:f,setTargetTransitionId:b,isTransitioning:w,assigneeSearch:v,setAssigneeSearch:L,targetAccountId:N,setTargetAccountId:y,isAssigning:C,isUpdatingVersions:E,newLabelText:I,setNewLabelText:k,labelSuggestions:S,showLabelSuggestions:D,setShowLabelSuggestions:U,isUpdatingLabels:A,isUploading:z,uploadMessage:B,handlePostComment:P,handleAssignUser:V,handleFileUpload:F,handleUpdateVersion:K,handleAddLabel:R,handleRemoveLabel:q,handleUpdateStatus:H,currentUser:M,editingCommentId:W,editingCommentText:G,setEditingCommentText:J,isEditingComment:O,startEditComment:Q,cancelEditComment:X,saveEditComment:Y})})]})})}export{re as default};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/IssueDrawer-BIQ3mixE.js","assets/vendor-tiptap-D82WYWec.js","assets/vendor-ui-Cdo3Wdx4.js","assets/IssueDetailPanel-DE5h8kPI.js","assets/useFocusTrap-DDp1tqrR.js","assets/CreateIssueModal-DPSWn0nN.js","assets/StandaloneIssuePage-acjdCcy6.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as mn,j as a}from"./vendor-tiptap-D82WYWec.js";import{F as ts,B as pn,L as ss,C as ns,b as tt,c as gn,M as yn,d as bn,I as Ts,R as As,D as wn,e as Sn,f as En,X as Bt,a as f,h as xn,i as jn,S as Cn,K as Rn,P as Nn,j as Tn,A as An,k as On,l as kn,m as vn,n as Ln}from"./vendor-ui-Cdo3Wdx4.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))n(r);new MutationObserver(r=>{for(const o of r)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&n(i)}).observe(document,{childList:!0,subtree:!0});function s(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerPolicy&&(o.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?o.credentials="include":r.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(r){if(r.ep)return;r.ep=!0;const o=s(r);fetch(r.href,o)}})();var Ge={},rs;function Pn(){if(rs)return Ge;rs=1;var e=mn();return Ge.createRoot=e.createRoot,Ge.hydrateRoot=e.hydrateRoot,Ge}var Dn=Pn();const Un="modulepreload",_n=function(e){return"/"+e},os={},Vt=function(t,s,n){let r=Promise.resolve();if(s&&s.length>0){let i=function(d){return Promise.all(d.map(u=>Promise.resolve(u).then(m=>({status:"fulfilled",value:m}),m=>({status:"rejected",reason:m}))))};document.getElementsByTagName("link");const c=document.querySelector("meta[property=csp-nonce]"),p=(c==null?void 0:c.nonce)||(c==null?void 0:c.getAttribute("nonce"));r=i(s.map(d=>{if(d=_n(d),d in os)return;os[d]=!0;const u=d.endsWith(".css"),m=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${d}"]${m}`))return;const x=document.createElement("link");if(x.rel=u?"stylesheet":Un,u||(x.as="script"),x.crossOrigin="",x.href=d,p&&x.setAttribute("nonce",p),document.head.appendChild(x),u)return new Promise((C,h)=>{x.addEventListener("load",C),x.addEventListener("error",()=>h(new Error(`Unable to preload CSS for ${d}`)))})}))}function o(i){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=i,window.dispatchEvent(c),!c.defaultPrevented)throw i}return r.then(i=>{for(const c of i||[])c.status==="rejected"&&o(c.reason);return t().catch(o)})};function Os(e,t){return function(){return e.apply(t,arguments)}}const{toString:In}=Object.prototype,{getPrototypeOf:Wt}=Object,{iterator:st,toStringTag:ks}=Symbol,nt=(e=>t=>{const s=In.call(t);return e[s]||(e[s]=s.slice(8,-1).toLowerCase())})(Object.create(null)),ne=e=>(e=e.toLowerCase(),t=>nt(t)===e),rt=e=>t=>typeof t===e,{isArray:Ae}=Array,Te=rt("undefined");function _e(e){return e!==null&&!Te(e)&&e.constructor!==null&&!Te(e.constructor)&&J(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const vs=ne("ArrayBuffer");function Fn(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&vs(e.buffer),t}const $n=rt("string"),J=rt("function"),Ls=rt("number"),Ie=e=>e!==null&&typeof e=="object",Bn=e=>e===!0||e===!1,Ze=e=>{if(nt(e)!=="object")return!1;const t=Wt(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(ks in e)&&!(st in e)},qn=e=>{if(!Ie(e)||_e(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},zn=ne("Date"),Mn=ne("File"),Hn=e=>!!(e&&typeof e.uri<"u"),Vn=e=>e&&typeof e.getParts<"u",Wn=ne("Blob"),Jn=ne("FileList"),Xn=e=>Ie(e)&&J(e.pipe);function Gn(){return typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}}const is=Gn(),as=typeof is.FormData<"u"?is.FormData:void 0,Qn=e=>{let t;return e&&(as&&e instanceof as||J(e.append)&&((t=nt(e))==="formdata"||t==="object"&&J(e.toString)&&e.toString()==="[object FormData]"))},Zn=ne("URLSearchParams"),[Yn,Kn,er,tr]=["ReadableStream","Request","Response","Headers"].map(ne),sr=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Fe(e,t,{allOwnKeys:s=!1}={}){if(e===null||typeof e>"u")return;let n,r;if(typeof e!="object"&&(e=[e]),Ae(e))for(n=0,r=e.length;n<r;n++)t.call(null,e[n],n,e);else{if(_e(e))return;const o=s?Object.getOwnPropertyNames(e):Object.keys(e),i=o.length;let c;for(n=0;n<i;n++)c=o[n],t.call(null,e[c],c,e)}}function Ps(e,t){if(_e(e))return null;t=t.toLowerCase();const s=Object.keys(e);let n=s.length,r;for(;n-- >0;)if(r=s[n],t===r.toLowerCase())return r;return null}const ye=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Ds=e=>!Te(e)&&e!==ye;function qt(){const{caseless:e,skipUndefined:t}=Ds(this)&&this||{},s={},n=(r,o)=>{if(o==="__proto__"||o==="constructor"||o==="prototype")return;const i=e&&Ps(s,o)||o;Ze(s[i])&&Ze(r)?s[i]=qt(s[i],r):Ze(r)?s[i]=qt({},r):Ae(r)?s[i]=r.slice():(!t||!Te(r))&&(s[i]=r)};for(let r=0,o=arguments.length;r<o;r++)arguments[r]&&Fe(arguments[r],n);return s}const nr=(e,t,s,{allOwnKeys:n}={})=>(Fe(t,(r,o)=>{s&&J(r)?Object.defineProperty(e,o,{value:Os(r,s),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,o,{value:r,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:n}),e),rr=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),or=(e,t,s,n)=>{e.prototype=Object.create(t.prototype,n),Object.defineProperty(e.prototype,"constructor",{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{value:t.prototype}),s&&Object.assign(e.prototype,s)},ir=(e,t,s,n)=>{let r,o,i;const c={};if(t=t||{},e==null)return t;do{for(r=Object.getOwnPropertyNames(e),o=r.length;o-- >0;)i=r[o],(!n||n(i,e,t))&&!c[i]&&(t[i]=e[i],c[i]=!0);e=s!==!1&&Wt(e)}while(e&&(!s||s(e,t))&&e!==Object.prototype);return t},ar=(e,t,s)=>{e=String(e),(s===void 0||s>e.length)&&(s=e.length),s-=t.length;const n=e.indexOf(t,s);return n!==-1&&n===s},cr=e=>{if(!e)return null;if(Ae(e))return e;let t=e.length;if(!Ls(t))return null;const s=new Array(t);for(;t-- >0;)s[t]=e[t];return s},lr=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&Wt(Uint8Array)),ur=(e,t)=>{const n=(e&&e[st]).call(e);let r;for(;(r=n.next())&&!r.done;){const o=r.value;t.call(e,o[0],o[1])}},dr=(e,t)=>{let s;const n=[];for(;(s=e.exec(t))!==null;)n.push(s);return n},fr=ne("HTMLFormElement"),hr=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(s,n,r){return n.toUpperCase()+r}),cs=(({hasOwnProperty:e})=>(t,s)=>e.call(t,s))(Object.prototype),mr=ne("RegExp"),Us=(e,t)=>{const s=Object.getOwnPropertyDescriptors(e),n={};Fe(s,(r,o)=>{let i;(i=t(r,o,e))!==!1&&(n[o]=i||r)}),Object.defineProperties(e,n)},pr=e=>{Us(e,(t,s)=>{if(J(e)&&["arguments","caller","callee"].indexOf(s)!==-1)return!1;const n=e[s];if(J(n)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+s+"'")})}})},gr=(e,t)=>{const s={},n=r=>{r.forEach(o=>{s[o]=!0})};return Ae(e)?n(e):n(String(e).split(t)),s},yr=()=>{},br=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function wr(e){return!!(e&&J(e.append)&&e[ks]==="FormData"&&e[st])}const Sr=e=>{const t=new Array(10),s=(n,r)=>{if(Ie(n)){if(t.indexOf(n)>=0)return;if(_e(n))return n;if(!("toJSON"in n)){t[r]=n;const o=Ae(n)?[]:{};return Fe(n,(i,c)=>{const p=s(i,r+1);!Te(p)&&(o[c]=p)}),t[r]=void 0,o}}return n};return s(e,0)},Er=ne("AsyncFunction"),xr=e=>e&&(Ie(e)||J(e))&&J(e.then)&&J(e.catch),_s=((e,t)=>e?setImmediate:t?((s,n)=>(ye.addEventListener("message",({source:r,data:o})=>{r===ye&&o===s&&n.length&&n.shift()()},!1),r=>{n.push(r),ye.postMessage(s,"*")}))(`axios@${Math.random()}`,[]):s=>setTimeout(s))(typeof setImmediate=="function",J(ye.postMessage)),jr=typeof queueMicrotask<"u"?queueMicrotask.bind(ye):typeof process<"u"&&process.nextTick||_s,Cr=e=>e!=null&&J(e[st]),l={isArray:Ae,isArrayBuffer:vs,isBuffer:_e,isFormData:Qn,isArrayBufferView:Fn,isString:$n,isNumber:Ls,isBoolean:Bn,isObject:Ie,isPlainObject:Ze,isEmptyObject:qn,isReadableStream:Yn,isRequest:Kn,isResponse:er,isHeaders:tr,isUndefined:Te,isDate:zn,isFile:Mn,isReactNativeBlob:Hn,isReactNative:Vn,isBlob:Wn,isRegExp:mr,isFunction:J,isStream:Xn,isURLSearchParams:Zn,isTypedArray:lr,isFileList:Jn,forEach:Fe,merge:qt,extend:nr,trim:sr,stripBOM:rr,inherits:or,toFlatObject:ir,kindOf:nt,kindOfTest:ne,endsWith:ar,toArray:cr,forEachEntry:ur,matchAll:dr,isHTMLForm:fr,hasOwnProperty:cs,hasOwnProp:cs,reduceDescriptors:Us,freezeMethods:pr,toObjectSet:gr,toCamelCase:hr,noop:yr,toFiniteNumber:br,findKey:Ps,global:ye,isContextDefined:Ds,isSpecCompliantForm:wr,toJSONObject:Sr,isAsyncFn:Er,isThenable:xr,setImmediate:_s,asap:jr,isIterable:Cr};let E=class Is extends Error{static from(t,s,n,r,o,i){const c=new Is(t.message,s||t.code,n,r,o);return c.cause=t,c.name=t.name,t.status!=null&&c.status==null&&(c.status=t.status),i&&Object.assign(c,i),c}constructor(t,s,n,r,o){super(t),Object.defineProperty(this,"message",{value:t,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,s&&(this.code=s),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o,this.status=o.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:l.toJSONObject(this.config),code:this.code,status:this.status}}};E.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE";E.ERR_BAD_OPTION="ERR_BAD_OPTION";E.ECONNABORTED="ECONNABORTED";E.ETIMEDOUT="ETIMEDOUT";E.ERR_NETWORK="ERR_NETWORK";E.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS";E.ERR_DEPRECATED="ERR_DEPRECATED";E.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE";E.ERR_BAD_REQUEST="ERR_BAD_REQUEST";E.ERR_CANCELED="ERR_CANCELED";E.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT";E.ERR_INVALID_URL="ERR_INVALID_URL";const Rr=null;function zt(e){return l.isPlainObject(e)||l.isArray(e)}function Fs(e){return l.endsWith(e,"[]")?e.slice(0,-2):e}function Ut(e,t,s){return e?e.concat(t).map(function(r,o){return r=Fs(r),!s&&o?"["+r+"]":r}).join(s?".":""):t}function Nr(e){return l.isArray(e)&&!e.some(zt)}const Tr=l.toFlatObject(l,{},null,function(t){return/^is[A-Z]/.test(t)});function ot(e,t,s){if(!l.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,s=l.toFlatObject(s,{metaTokens:!0,dots:!1,indexes:!1},!1,function(b,y){return!l.isUndefined(y[b])});const n=s.metaTokens,r=s.visitor||u,o=s.dots,i=s.indexes,p=(s.Blob||typeof Blob<"u"&&Blob)&&l.isSpecCompliantForm(t);if(!l.isFunction(r))throw new TypeError("visitor must be a function");function d(h){if(h===null)return"";if(l.isDate(h))return h.toISOString();if(l.isBoolean(h))return h.toString();if(!p&&l.isBlob(h))throw new E("Blob is not supported. Use a Buffer instead.");return l.isArrayBuffer(h)||l.isTypedArray(h)?p&&typeof Blob=="function"?new Blob([h]):Buffer.from(h):h}function u(h,b,y){let R=h;if(l.isReactNative(t)&&l.isReactNativeBlob(h))return t.append(Ut(y,b,o),d(h)),!1;if(h&&!y&&typeof h=="object"){if(l.endsWith(b,"{}"))b=n?b:b.slice(0,-2),h=JSON.stringify(h);else if(l.isArray(h)&&Nr(h)||(l.isFileList(h)||l.endsWith(b,"[]"))&&(R=l.toArray(h)))return b=Fs(b),R.forEach(function(O,k){!(l.isUndefined(O)||O===null)&&t.append(i===!0?Ut([b],k,o):i===null?b:b+"[]",d(O))}),!1}return zt(h)?!0:(t.append(Ut(y,b,o),d(h)),!1)}const m=[],x=Object.assign(Tr,{defaultVisitor:u,convertValue:d,isVisitable:zt});function C(h,b){if(!l.isUndefined(h)){if(m.indexOf(h)!==-1)throw Error("Circular reference detected in "+b.join("."));m.push(h),l.forEach(h,function(R,_){(!(l.isUndefined(R)||R===null)&&r.call(t,R,l.isString(_)?_.trim():_,b,x))===!0&&C(R,b?b.concat(_):[_])}),m.pop()}}if(!l.isObject(e))throw new TypeError("data must be an object");return C(e),t}function ls(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(n){return t[n]})}function Jt(e,t){this._pairs=[],e&&ot(e,this,t)}const $s=Jt.prototype;$s.append=function(t,s){this._pairs.push([t,s])};$s.toString=function(t){const s=t?function(n){return t.call(this,n,ls)}:ls;return this._pairs.map(function(r){return s(r[0])+"="+s(r[1])},"").join("&")};function Ar(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Bs(e,t,s){if(!t)return e;const n=s&&s.encode||Ar,r=l.isFunction(s)?{serialize:s}:s,o=r&&r.serialize;let i;if(o?i=o(t,r):i=l.isURLSearchParams(t)?t.toString():new Jt(t,r).toString(n),i){const c=e.indexOf("#");c!==-1&&(e=e.slice(0,c)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}class us{constructor(){this.handlers=[]}use(t,s,n){return this.handlers.push({fulfilled:t,rejected:s,synchronous:n?n.synchronous:!1,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){l.forEach(this.handlers,function(n){n!==null&&t(n)})}}const Xt={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},Or=typeof URLSearchParams<"u"?URLSearchParams:Jt,kr=typeof FormData<"u"?FormData:null,vr=typeof Blob<"u"?Blob:null,Lr={isBrowser:!0,classes:{URLSearchParams:Or,FormData:kr,Blob:vr},protocols:["http","https","file","blob","url","data"]},Gt=typeof window<"u"&&typeof document<"u",Mt=typeof navigator=="object"&&navigator||void 0,Pr=Gt&&(!Mt||["ReactNative","NativeScript","NS"].indexOf(Mt.product)<0),Dr=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",Ur=Gt&&window.location.href||"http://localhost",_r=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Gt,hasStandardBrowserEnv:Pr,hasStandardBrowserWebWorkerEnv:Dr,navigator:Mt,origin:Ur},Symbol.toStringTag,{value:"Module"})),V={..._r,...Lr};function Ir(e,t){return ot(e,new V.classes.URLSearchParams,{visitor:function(s,n,r,o){return V.isNode&&l.isBuffer(s)?(this.append(n,s.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)},...t})}function Fr(e){return l.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function $r(e){const t={},s=Object.keys(e);let n;const r=s.length;let o;for(n=0;n<r;n++)o=s[n],t[o]=e[o];return t}function qs(e){function t(s,n,r,o){let i=s[o++];if(i==="__proto__")return!0;const c=Number.isFinite(+i),p=o>=s.length;return i=!i&&l.isArray(r)?r.length:i,p?(l.hasOwnProp(r,i)?r[i]=[r[i],n]:r[i]=n,!c):((!r[i]||!l.isObject(r[i]))&&(r[i]=[]),t(s,n,r[i],o)&&l.isArray(r[i])&&(r[i]=$r(r[i])),!c)}if(l.isFormData(e)&&l.isFunction(e.entries)){const s={};return l.forEachEntry(e,(n,r)=>{t(Fr(n),r,s,0)}),s}return null}function Br(e,t,s){if(l.isString(e))try{return(t||JSON.parse)(e),l.trim(e)}catch(n){if(n.name!=="SyntaxError")throw n}return(s||JSON.stringify)(e)}const $e={transitional:Xt,adapter:["xhr","http","fetch"],transformRequest:[function(t,s){const n=s.getContentType()||"",r=n.indexOf("application/json")>-1,o=l.isObject(t);if(o&&l.isHTMLForm(t)&&(t=new FormData(t)),l.isFormData(t))return r?JSON.stringify(qs(t)):t;if(l.isArrayBuffer(t)||l.isBuffer(t)||l.isStream(t)||l.isFile(t)||l.isBlob(t)||l.isReadableStream(t))return t;if(l.isArrayBufferView(t))return t.buffer;if(l.isURLSearchParams(t))return s.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let c;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return Ir(t,this.formSerializer).toString();if((c=l.isFileList(t))||n.indexOf("multipart/form-data")>-1){const p=this.env&&this.env.FormData;return ot(c?{"files[]":t}:t,p&&new p,this.formSerializer)}}return o||r?(s.setContentType("application/json",!1),Br(t)):t}],transformResponse:[function(t){const s=this.transitional||$e.transitional,n=s&&s.forcedJSONParsing,r=this.responseType==="json";if(l.isResponse(t)||l.isReadableStream(t))return t;if(t&&l.isString(t)&&(n&&!this.responseType||r)){const i=!(s&&s.silentJSONParsing)&&r;try{return JSON.parse(t,this.parseReviver)}catch(c){if(i)throw c.name==="SyntaxError"?E.from(c,E.ERR_BAD_RESPONSE,this,null,this.response):c}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:V.classes.FormData,Blob:V.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};l.forEach(["delete","get","head","post","put","patch"],e=>{$e.headers[e]={}});const qr=l.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),zr=e=>{const t={};let s,n,r;return e&&e.split(`
|
|
3
|
+
`).forEach(function(i){r=i.indexOf(":"),s=i.substring(0,r).trim().toLowerCase(),n=i.substring(r+1).trim(),!(!s||t[s]&&qr[s])&&(s==="set-cookie"?t[s]?t[s].push(n):t[s]=[n]:t[s]=t[s]?t[s]+", "+n:n)}),t},ds=Symbol("internals");function Ue(e){return e&&String(e).trim().toLowerCase()}function Ye(e){return e===!1||e==null?e:l.isArray(e)?e.map(Ye):String(e)}function Mr(e){const t=Object.create(null),s=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=s.exec(e);)t[n[1]]=n[2];return t}const Hr=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function _t(e,t,s,n,r){if(l.isFunction(n))return n.call(this,t,s);if(r&&(t=s),!!l.isString(t)){if(l.isString(n))return t.indexOf(n)!==-1;if(l.isRegExp(n))return n.test(t)}}function Vr(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,s,n)=>s.toUpperCase()+n)}function Wr(e,t){const s=l.toCamelCase(" "+t);["get","set","has"].forEach(n=>{Object.defineProperty(e,n+s,{value:function(r,o,i){return this[n].call(this,t,r,o,i)},configurable:!0})})}let X=class{constructor(t){t&&this.set(t)}set(t,s,n){const r=this;function o(c,p,d){const u=Ue(p);if(!u)throw new Error("header name must be a non-empty string");const m=l.findKey(r,u);(!m||r[m]===void 0||d===!0||d===void 0&&r[m]!==!1)&&(r[m||p]=Ye(c))}const i=(c,p)=>l.forEach(c,(d,u)=>o(d,u,p));if(l.isPlainObject(t)||t instanceof this.constructor)i(t,s);else if(l.isString(t)&&(t=t.trim())&&!Hr(t))i(zr(t),s);else if(l.isObject(t)&&l.isIterable(t)){let c={},p,d;for(const u of t){if(!l.isArray(u))throw TypeError("Object iterator must return a key-value pair");c[d=u[0]]=(p=c[d])?l.isArray(p)?[...p,u[1]]:[p,u[1]]:u[1]}i(c,s)}else t!=null&&o(s,t,n);return this}get(t,s){if(t=Ue(t),t){const n=l.findKey(this,t);if(n){const r=this[n];if(!s)return r;if(s===!0)return Mr(r);if(l.isFunction(s))return s.call(this,r,n);if(l.isRegExp(s))return s.exec(r);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,s){if(t=Ue(t),t){const n=l.findKey(this,t);return!!(n&&this[n]!==void 0&&(!s||_t(this,this[n],n,s)))}return!1}delete(t,s){const n=this;let r=!1;function o(i){if(i=Ue(i),i){const c=l.findKey(n,i);c&&(!s||_t(n,n[c],c,s))&&(delete n[c],r=!0)}}return l.isArray(t)?t.forEach(o):o(t),r}clear(t){const s=Object.keys(this);let n=s.length,r=!1;for(;n--;){const o=s[n];(!t||_t(this,this[o],o,t,!0))&&(delete this[o],r=!0)}return r}normalize(t){const s=this,n={};return l.forEach(this,(r,o)=>{const i=l.findKey(n,o);if(i){s[i]=Ye(r),delete s[o];return}const c=t?Vr(o):String(o).trim();c!==o&&delete s[o],s[c]=Ye(r),n[c]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const s=Object.create(null);return l.forEach(this,(n,r)=>{n!=null&&n!==!1&&(s[r]=t&&l.isArray(n)?n.join(", "):n)}),s}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,s])=>t+": "+s).join(`
|
|
4
|
+
`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...s){const n=new this(t);return s.forEach(r=>n.set(r)),n}static accessor(t){const n=(this[ds]=this[ds]={accessors:{}}).accessors,r=this.prototype;function o(i){const c=Ue(i);n[c]||(Wr(r,i),n[c]=!0)}return l.isArray(t)?t.forEach(o):o(t),this}};X.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);l.reduceDescriptors(X.prototype,({value:e},t)=>{let s=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(n){this[s]=n}}});l.freezeMethods(X);function It(e,t){const s=this||$e,n=t||s,r=X.from(n.headers);let o=n.data;return l.forEach(e,function(c){o=c.call(s,o,r.normalize(),t?t.status:void 0)}),r.normalize(),o}function zs(e){return!!(e&&e.__CANCEL__)}let Be=class extends E{constructor(t,s,n){super(t??"canceled",E.ERR_CANCELED,s,n),this.name="CanceledError",this.__CANCEL__=!0}};function Ms(e,t,s){const n=s.config.validateStatus;!s.status||!n||n(s.status)?e(s):t(new E("Request failed with status code "+s.status,[E.ERR_BAD_REQUEST,E.ERR_BAD_RESPONSE][Math.floor(s.status/100)-4],s.config,s.request,s))}function Jr(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function Xr(e,t){e=e||10;const s=new Array(e),n=new Array(e);let r=0,o=0,i;return t=t!==void 0?t:1e3,function(p){const d=Date.now(),u=n[o];i||(i=d),s[r]=p,n[r]=d;let m=o,x=0;for(;m!==r;)x+=s[m++],m=m%e;if(r=(r+1)%e,r===o&&(o=(o+1)%e),d-i<t)return;const C=u&&d-u;return C?Math.round(x*1e3/C):void 0}}function Gr(e,t){let s=0,n=1e3/t,r,o;const i=(d,u=Date.now())=>{s=u,r=null,o&&(clearTimeout(o),o=null),e(...d)};return[(...d)=>{const u=Date.now(),m=u-s;m>=n?i(d,u):(r=d,o||(o=setTimeout(()=>{o=null,i(r)},n-m)))},()=>r&&i(r)]}const et=(e,t,s=3)=>{let n=0;const r=Xr(50,250);return Gr(o=>{const i=o.loaded,c=o.lengthComputable?o.total:void 0,p=i-n,d=r(p),u=i<=c;n=i;const m={loaded:i,total:c,progress:c?i/c:void 0,bytes:p,rate:d||void 0,estimated:d&&c&&u?(c-i)/d:void 0,event:o,lengthComputable:c!=null,[t?"download":"upload"]:!0};e(m)},s)},fs=(e,t)=>{const s=e!=null;return[n=>t[0]({lengthComputable:s,total:e,loaded:n}),t[1]]},hs=e=>(...t)=>l.asap(()=>e(...t)),Qr=V.hasStandardBrowserEnv?((e,t)=>s=>(s=new URL(s,V.origin),e.protocol===s.protocol&&e.host===s.host&&(t||e.port===s.port)))(new URL(V.origin),V.navigator&&/(msie|trident)/i.test(V.navigator.userAgent)):()=>!0,Zr=V.hasStandardBrowserEnv?{write(e,t,s,n,r,o,i){if(typeof document>"u")return;const c=[`${e}=${encodeURIComponent(t)}`];l.isNumber(s)&&c.push(`expires=${new Date(s).toUTCString()}`),l.isString(n)&&c.push(`path=${n}`),l.isString(r)&&c.push(`domain=${r}`),o===!0&&c.push("secure"),l.isString(i)&&c.push(`SameSite=${i}`),document.cookie=c.join("; ")},read(e){if(typeof document>"u")return null;const t=document.cookie.match(new RegExp("(?:^|; )"+e+"=([^;]*)"));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read(){return null},remove(){}};function Yr(e){return typeof e!="string"?!1:/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function Kr(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function Hs(e,t,s){let n=!Yr(t);return e&&(n||s==!1)?Kr(e,t):t}const ms=e=>e instanceof X?{...e}:e;function we(e,t){t=t||{};const s={};function n(d,u,m,x){return l.isPlainObject(d)&&l.isPlainObject(u)?l.merge.call({caseless:x},d,u):l.isPlainObject(u)?l.merge({},u):l.isArray(u)?u.slice():u}function r(d,u,m,x){if(l.isUndefined(u)){if(!l.isUndefined(d))return n(void 0,d,m,x)}else return n(d,u,m,x)}function o(d,u){if(!l.isUndefined(u))return n(void 0,u)}function i(d,u){if(l.isUndefined(u)){if(!l.isUndefined(d))return n(void 0,d)}else return n(void 0,u)}function c(d,u,m){if(m in t)return n(d,u);if(m in e)return n(void 0,d)}const p={url:o,method:o,data:o,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:c,headers:(d,u,m)=>r(ms(d),ms(u),m,!0)};return l.forEach(Object.keys({...e,...t}),function(u){if(u==="__proto__"||u==="constructor"||u==="prototype")return;const m=l.hasOwnProp(p,u)?p[u]:r,x=m(e[u],t[u],u);l.isUndefined(x)&&m!==c||(s[u]=x)}),s}const Vs=e=>{const t=we({},e);let{data:s,withXSRFToken:n,xsrfHeaderName:r,xsrfCookieName:o,headers:i,auth:c}=t;if(t.headers=i=X.from(i),t.url=Bs(Hs(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),c&&i.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):""))),l.isFormData(s)){if(V.hasStandardBrowserEnv||V.hasStandardBrowserWebWorkerEnv)i.setContentType(void 0);else if(l.isFunction(s.getHeaders)){const p=s.getHeaders(),d=["content-type","content-length"];Object.entries(p).forEach(([u,m])=>{d.includes(u.toLowerCase())&&i.set(u,m)})}}if(V.hasStandardBrowserEnv&&(n&&l.isFunction(n)&&(n=n(t)),n||n!==!1&&Qr(t.url))){const p=r&&o&&Zr.read(o);p&&i.set(r,p)}return t},eo=typeof XMLHttpRequest<"u",to=eo&&function(e){return new Promise(function(s,n){const r=Vs(e);let o=r.data;const i=X.from(r.headers).normalize();let{responseType:c,onUploadProgress:p,onDownloadProgress:d}=r,u,m,x,C,h;function b(){C&&C(),h&&h(),r.cancelToken&&r.cancelToken.unsubscribe(u),r.signal&&r.signal.removeEventListener("abort",u)}let y=new XMLHttpRequest;y.open(r.method.toUpperCase(),r.url,!0),y.timeout=r.timeout;function R(){if(!y)return;const O=X.from("getAllResponseHeaders"in y&&y.getAllResponseHeaders()),I={data:!c||c==="text"||c==="json"?y.responseText:y.response,status:y.status,statusText:y.statusText,headers:O,config:e,request:y};Ms(function(T){s(T),b()},function(T){n(T),b()},I),y=null}"onloadend"in y?y.onloadend=R:y.onreadystatechange=function(){!y||y.readyState!==4||y.status===0&&!(y.responseURL&&y.responseURL.indexOf("file:")===0)||setTimeout(R)},y.onabort=function(){y&&(n(new E("Request aborted",E.ECONNABORTED,e,y)),y=null)},y.onerror=function(k){const I=k&&k.message?k.message:"Network Error",P=new E(I,E.ERR_NETWORK,e,y);P.event=k||null,n(P),y=null},y.ontimeout=function(){let k=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const I=r.transitional||Xt;r.timeoutErrorMessage&&(k=r.timeoutErrorMessage),n(new E(k,I.clarifyTimeoutError?E.ETIMEDOUT:E.ECONNABORTED,e,y)),y=null},o===void 0&&i.setContentType(null),"setRequestHeader"in y&&l.forEach(i.toJSON(),function(k,I){y.setRequestHeader(I,k)}),l.isUndefined(r.withCredentials)||(y.withCredentials=!!r.withCredentials),c&&c!=="json"&&(y.responseType=r.responseType),d&&([x,h]=et(d,!0),y.addEventListener("progress",x)),p&&y.upload&&([m,C]=et(p),y.upload.addEventListener("progress",m),y.upload.addEventListener("loadend",C)),(r.cancelToken||r.signal)&&(u=O=>{y&&(n(!O||O.type?new Be(null,e,y):O),y.abort(),y=null)},r.cancelToken&&r.cancelToken.subscribe(u),r.signal&&(r.signal.aborted?u():r.signal.addEventListener("abort",u)));const _=Jr(r.url);if(_&&V.protocols.indexOf(_)===-1){n(new E("Unsupported protocol "+_+":",E.ERR_BAD_REQUEST,e));return}y.send(o||null)})},so=(e,t)=>{const{length:s}=e=e?e.filter(Boolean):[];if(t||s){let n=new AbortController,r;const o=function(d){if(!r){r=!0,c();const u=d instanceof Error?d:this.reason;n.abort(u instanceof E?u:new Be(u instanceof Error?u.message:u))}};let i=t&&setTimeout(()=>{i=null,o(new E(`timeout of ${t}ms exceeded`,E.ETIMEDOUT))},t);const c=()=>{e&&(i&&clearTimeout(i),i=null,e.forEach(d=>{d.unsubscribe?d.unsubscribe(o):d.removeEventListener("abort",o)}),e=null)};e.forEach(d=>d.addEventListener("abort",o));const{signal:p}=n;return p.unsubscribe=()=>l.asap(c),p}},no=function*(e,t){let s=e.byteLength;if(s<t){yield e;return}let n=0,r;for(;n<s;)r=n+t,yield e.slice(n,r),n=r},ro=async function*(e,t){for await(const s of oo(e))yield*no(s,t)},oo=async function*(e){if(e[Symbol.asyncIterator]){yield*e;return}const t=e.getReader();try{for(;;){const{done:s,value:n}=await t.read();if(s)break;yield n}}finally{await t.cancel()}},ps=(e,t,s,n)=>{const r=ro(e,t);let o=0,i,c=p=>{i||(i=!0,n&&n(p))};return new ReadableStream({async pull(p){try{const{done:d,value:u}=await r.next();if(d){c(),p.close();return}let m=u.byteLength;if(s){let x=o+=m;s(x)}p.enqueue(new Uint8Array(u))}catch(d){throw c(d),d}},cancel(p){return c(p),r.return()}},{highWaterMark:2})},gs=64*1024,{isFunction:Qe}=l,io=(({Request:e,Response:t})=>({Request:e,Response:t}))(l.global),{ReadableStream:ys,TextEncoder:bs}=l.global,ws=(e,...t)=>{try{return!!e(...t)}catch{return!1}},ao=e=>{e=l.merge.call({skipUndefined:!0},io,e);const{fetch:t,Request:s,Response:n}=e,r=t?Qe(t):typeof fetch=="function",o=Qe(s),i=Qe(n);if(!r)return!1;const c=r&&Qe(ys),p=r&&(typeof bs=="function"?(h=>b=>h.encode(b))(new bs):async h=>new Uint8Array(await new s(h).arrayBuffer())),d=o&&c&&ws(()=>{let h=!1;const b=new s(V.origin,{body:new ys,method:"POST",get duplex(){return h=!0,"half"}}).headers.has("Content-Type");return h&&!b}),u=i&&c&&ws(()=>l.isReadableStream(new n("").body)),m={stream:u&&(h=>h.body)};r&&["text","arrayBuffer","blob","formData","stream"].forEach(h=>{!m[h]&&(m[h]=(b,y)=>{let R=b&&b[h];if(R)return R.call(b);throw new E(`Response type '${h}' is not supported`,E.ERR_NOT_SUPPORT,y)})});const x=async h=>{if(h==null)return 0;if(l.isBlob(h))return h.size;if(l.isSpecCompliantForm(h))return(await new s(V.origin,{method:"POST",body:h}).arrayBuffer()).byteLength;if(l.isArrayBufferView(h)||l.isArrayBuffer(h))return h.byteLength;if(l.isURLSearchParams(h)&&(h=h+""),l.isString(h))return(await p(h)).byteLength},C=async(h,b)=>{const y=l.toFiniteNumber(h.getContentLength());return y??x(b)};return async h=>{let{url:b,method:y,data:R,signal:_,cancelToken:O,timeout:k,onDownloadProgress:I,onUploadProgress:P,responseType:T,headers:Q,withCredentials:Z="same-origin",fetchOptions:se}=Vs(h),ie=t||fetch;T=T?(T+"").toLowerCase():"text";let W=so([_,O&&O.toAbortSignal()],k),z=null;const B=W&&W.unsubscribe&&(()=>{W.unsubscribe()});let M;try{if(P&&d&&y!=="get"&&y!=="head"&&(M=await C(Q,R))!==0){let L=new s(b,{method:"POST",body:R,duplex:"half"}),H;if(l.isFormData(R)&&(H=L.headers.get("content-type"))&&Q.setContentType(H),L.body){const[G,ae]=fs(M,et(hs(P)));R=ps(L.body,gs,G,ae)}}l.isString(Z)||(Z=Z?"include":"omit");const A=o&&"credentials"in s.prototype,Se={...se,signal:W,method:y.toUpperCase(),headers:Q.normalize().toJSON(),body:R,duplex:"half",credentials:A?Z:void 0};z=o&&new s(b,Se);let q=await(o?ie(z,se):ie(b,Se));const de=u&&(T==="stream"||T==="response");if(u&&(I||de&&B)){const L={};["status","statusText","headers"].forEach(fe=>{L[fe]=q[fe]});const H=l.toFiniteNumber(q.headers.get("content-length")),[G,ae]=I&&fs(H,et(hs(I),!0))||[];q=new n(ps(q.body,gs,G,()=>{ae&&ae(),B&&B()}),L)}T=T||"text";let Y=await m[l.findKey(m,T)||"text"](q,h);return!de&&B&&B(),await new Promise((L,H)=>{Ms(L,H,{data:Y,headers:X.from(q.headers),status:q.status,statusText:q.statusText,config:h,request:z})})}catch(A){throw B&&B(),A&&A.name==="TypeError"&&/Load failed|fetch/i.test(A.message)?Object.assign(new E("Network Error",E.ERR_NETWORK,h,z,A&&A.response),{cause:A.cause||A}):E.from(A,A&&A.code,h,z,A&&A.response)}}},co=new Map,Ws=e=>{let t=e&&e.env||{};const{fetch:s,Request:n,Response:r}=t,o=[n,r,s];let i=o.length,c=i,p,d,u=co;for(;c--;)p=o[c],d=u.get(p),d===void 0&&u.set(p,d=c?new Map:ao(t)),u=d;return d};Ws();const Qt={http:Rr,xhr:to,fetch:{get:Ws}};l.forEach(Qt,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const Ss=e=>`- ${e}`,lo=e=>l.isFunction(e)||e===null||e===!1;function uo(e,t){e=l.isArray(e)?e:[e];const{length:s}=e;let n,r;const o={};for(let i=0;i<s;i++){n=e[i];let c;if(r=n,!lo(n)&&(r=Qt[(c=String(n)).toLowerCase()],r===void 0))throw new E(`Unknown adapter '${c}'`);if(r&&(l.isFunction(r)||(r=r.get(t))))break;o[c||"#"+i]=r}if(!r){const i=Object.entries(o).map(([p,d])=>`adapter ${p} `+(d===!1?"is not supported by the environment":"is not available in the build"));let c=s?i.length>1?`since :
|
|
5
|
+
`+i.map(Ss).join(`
|
|
6
|
+
`):" "+Ss(i[0]):"as no adapter specified";throw new E("There is no suitable adapter to dispatch the request "+c,"ERR_NOT_SUPPORT")}return r}const Js={getAdapter:uo,adapters:Qt};function Ft(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Be(null,e)}function Es(e){return Ft(e),e.headers=X.from(e.headers),e.data=It.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),Js.getAdapter(e.adapter||$e.adapter,e)(e).then(function(n){return Ft(e),n.data=It.call(e,e.transformResponse,n),n.headers=X.from(n.headers),n},function(n){return zs(n)||(Ft(e),n&&n.response&&(n.response.data=It.call(e,e.transformResponse,n.response),n.response.headers=X.from(n.response.headers))),Promise.reject(n)})}const Xs="1.13.6",it={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{it[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});const xs={};it.transitional=function(t,s,n){function r(o,i){return"[Axios v"+Xs+"] Transitional option '"+o+"'"+i+(n?". "+n:"")}return(o,i,c)=>{if(t===!1)throw new E(r(i," has been removed"+(s?" in "+s:"")),E.ERR_DEPRECATED);return s&&!xs[i]&&(xs[i]=!0,console.warn(r(i," has been deprecated since v"+s+" and will be removed in the near future"))),t?t(o,i,c):!0}};it.spelling=function(t){return(s,n)=>(console.warn(`${n} is likely a misspelling of ${t}`),!0)};function fo(e,t,s){if(typeof e!="object")throw new E("options must be an object",E.ERR_BAD_OPTION_VALUE);const n=Object.keys(e);let r=n.length;for(;r-- >0;){const o=n[r],i=t[o];if(i){const c=e[o],p=c===void 0||i(c,o,e);if(p!==!0)throw new E("option "+o+" must be "+p,E.ERR_BAD_OPTION_VALUE);continue}if(s!==!0)throw new E("Unknown option "+o,E.ERR_BAD_OPTION)}}const Ke={assertOptions:fo,validators:it},te=Ke.validators;let be=class{constructor(t){this.defaults=t||{},this.interceptors={request:new us,response:new us}}async request(t,s){try{return await this._request(t,s)}catch(n){if(n instanceof Error){let r={};Error.captureStackTrace?Error.captureStackTrace(r):r=new Error;const o=r.stack?r.stack.replace(/^.+\n/,""):"";try{n.stack?o&&!String(n.stack).endsWith(o.replace(/^.+\n.+\n/,""))&&(n.stack+=`
|
|
7
|
+
`+o):n.stack=o}catch{}}throw n}}_request(t,s){typeof t=="string"?(s=s||{},s.url=t):s=t||{},s=we(this.defaults,s);const{transitional:n,paramsSerializer:r,headers:o}=s;n!==void 0&&Ke.assertOptions(n,{silentJSONParsing:te.transitional(te.boolean),forcedJSONParsing:te.transitional(te.boolean),clarifyTimeoutError:te.transitional(te.boolean),legacyInterceptorReqResOrdering:te.transitional(te.boolean)},!1),r!=null&&(l.isFunction(r)?s.paramsSerializer={serialize:r}:Ke.assertOptions(r,{encode:te.function,serialize:te.function},!0)),s.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?s.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:s.allowAbsoluteUrls=!0),Ke.assertOptions(s,{baseUrl:te.spelling("baseURL"),withXsrfToken:te.spelling("withXSRFToken")},!0),s.method=(s.method||this.defaults.method||"get").toLowerCase();let i=o&&l.merge(o.common,o[s.method]);o&&l.forEach(["delete","get","head","post","put","patch","common"],h=>{delete o[h]}),s.headers=X.concat(i,o);const c=[];let p=!0;this.interceptors.request.forEach(function(b){if(typeof b.runWhen=="function"&&b.runWhen(s)===!1)return;p=p&&b.synchronous;const y=s.transitional||Xt;y&&y.legacyInterceptorReqResOrdering?c.unshift(b.fulfilled,b.rejected):c.push(b.fulfilled,b.rejected)});const d=[];this.interceptors.response.forEach(function(b){d.push(b.fulfilled,b.rejected)});let u,m=0,x;if(!p){const h=[Es.bind(this),void 0];for(h.unshift(...c),h.push(...d),x=h.length,u=Promise.resolve(s);m<x;)u=u.then(h[m++],h[m++]);return u}x=c.length;let C=s;for(;m<x;){const h=c[m++],b=c[m++];try{C=h(C)}catch(y){b.call(this,y);break}}try{u=Es.call(this,C)}catch(h){return Promise.reject(h)}for(m=0,x=d.length;m<x;)u=u.then(d[m++],d[m++]);return u}getUri(t){t=we(this.defaults,t);const s=Hs(t.baseURL,t.url,t.allowAbsoluteUrls);return Bs(s,t.params,t.paramsSerializer)}};l.forEach(["delete","get","head","options"],function(t){be.prototype[t]=function(s,n){return this.request(we(n||{},{method:t,url:s,data:(n||{}).data}))}});l.forEach(["post","put","patch"],function(t){function s(n){return function(o,i,c){return this.request(we(c||{},{method:t,headers:n?{"Content-Type":"multipart/form-data"}:{},url:o,data:i}))}}be.prototype[t]=s(),be.prototype[t+"Form"]=s(!0)});let ho=class Gs{constructor(t){if(typeof t!="function")throw new TypeError("executor must be a function.");let s;this.promise=new Promise(function(o){s=o});const n=this;this.promise.then(r=>{if(!n._listeners)return;let o=n._listeners.length;for(;o-- >0;)n._listeners[o](r);n._listeners=null}),this.promise.then=r=>{let o;const i=new Promise(c=>{n.subscribe(c),o=c}).then(r);return i.cancel=function(){n.unsubscribe(o)},i},t(function(o,i,c){n.reason||(n.reason=new Be(o,i,c),s(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const s=this._listeners.indexOf(t);s!==-1&&this._listeners.splice(s,1)}toAbortSignal(){const t=new AbortController,s=n=>{t.abort(n)};return this.subscribe(s),t.signal.unsubscribe=()=>this.unsubscribe(s),t.signal}static source(){let t;return{token:new Gs(function(r){t=r}),cancel:t}}};function mo(e){return function(s){return e.apply(null,s)}}function po(e){return l.isObject(e)&&e.isAxiosError===!0}const Ht={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(Ht).forEach(([e,t])=>{Ht[t]=e});function Qs(e){const t=new be(e),s=Os(be.prototype.request,t);return l.extend(s,be.prototype,t,{allOwnKeys:!0}),l.extend(s,t,null,{allOwnKeys:!0}),s.create=function(r){return Qs(we(e,r))},s}const v=Qs($e);v.Axios=be;v.CanceledError=Be;v.CancelToken=ho;v.isCancel=zs;v.VERSION=Xs;v.toFormData=ot;v.AxiosError=E;v.Cancel=v.CanceledError;v.all=function(t){return Promise.all(t)};v.spread=mo;v.isAxiosError=po;v.mergeConfig=we;v.AxiosHeaders=X;v.formToJSON=e=>qs(l.isHTMLForm(e)?new FormData(e):e);v.getAdapter=Js.getAdapter;v.HttpStatusCode=Ht;v.default=v;const{Axios:Go,AxiosError:Qo,CanceledError:Zo,isCancel:Yo,CancelToken:Ko,VERSION:ei,all:ti,Cancel:si,isAxiosError:ni,spread:ri,toFormData:oi,AxiosHeaders:ii,HttpStatusCode:ai,formToJSON:ci,getAdapter:li,mergeConfig:ui}=v,U="/api",Zs=15e3,Ys=e=>{const t=new AbortController,s=setTimeout(()=>t.abort(),e);return{controller:t,timer:s}},oe=async(e,t=3,s=500)=>{var r,o;let n;for(let i=0;i<t;i++)try{return await e()}catch(c){if(n=c,((r=c==null?void 0:c.response)==null?void 0:r.status)>=400&&((o=c==null?void 0:c.response)==null?void 0:o.status)<500||i===t-1)throw c;const d=s*Math.pow(2,i);await new Promise(u=>setTimeout(u,d))}throw n},$=async(e,t,s={})=>{const{controller:n,timer:r}=Ys(Zs);try{return await v({method:e,url:t,...s,signal:n.signal})}catch(o){throw o.name==="AbortError"||o.code==="ERR_CANCELED"?new Error("Request timed out. Please check your connection."):o}finally{clearTimeout(r)}},js=async(e={})=>{const t=Object.fromEntries(Object.entries(e).filter(([s,n])=>n!=null&&n!==""));return oe(async()=>(await $("get",`${U}/issues`,{params:t})).data)},ue=async e=>oe(async()=>(await $("get",`${U}/issues/${e}`)).data),go=async e=>oe(async()=>(await $("get",`${U}/issues/${e}/comments`)).data),yo=async(e,t)=>(await $("post",`${U}/issues/${e}/comments`,{data:{body:t}})).data,bo=async(e,t,s)=>(await $("put",`${U}/issues/${e}/comments/${t}`,{data:{body:s}})).data,wo=async()=>(await $("get",`${U}/issues/users/me`)).data,Cs=async e=>oe(async()=>(await $("get",`${U}/issues/${e}/transitions`)).data),So=async(e,t)=>(await $("post",`${U}/issues/${e}/transitions`,{data:{transitionId:t}})).data,Rs=async(e,t)=>oe(async()=>(await $("get",`${U}/issues/${e}/assignable`,{params:{query:t}})).data),Eo=async(e,t)=>(await $("put",`${U}/issues/${e}/assignee`,{data:{accountId:t}})).data,xo=async(e,t)=>{const s=new FormData;s.append("file",t);const{controller:n,timer:r}=Ys(Zs);try{return(await v.post(`${U}/issues/${e}/attachments`,s,{headers:{"Content-Type":"multipart/form-data"},signal:n.signal})).data}catch(o){throw o.name==="AbortError"||o.code==="ERR_CANCELED"?new Error("Request timed out. Please check your connection."):o}finally{clearTimeout(r)}},jo=async()=>oe(async()=>(await $("get",`${U}/projects`)).data),di=async e=>oe(async()=>(await $("get",`${U}/projects/${e}/issuetypes`)).data),fi=async e=>(await $("post",`${U}/issues`,{data:e})).data,$t=async(e,t)=>(await $("put",`${U}/issues/${e}`,{data:{fields:t}})).data,Co=async(e,t)=>(await $("put",`${U}/issues/${e}/summary`,{data:{summary:t}})).data,Ro=async(e,t)=>(await $("put",`${U}/issues/${e}/description`,{data:{description:t}})).data,No=async e=>oe(async()=>(await $("get",`${U}/projects/${e}/versions`)).data),To=async e=>oe(async()=>(await $("get",`${U}/issues/labels/search`,{params:{query:e}})).data),hi=async(e,t)=>oe(async()=>(await $("get",`${U}/projects/${e}/members`,{params:{query:t}})).data),ge="customfield_10260",Ao=e=>{if(!e)return a.jsx(ts,{size:16,color:"var(--text-muted)"});const t=e.toLowerCase();return t.includes("bug")?a.jsx(pn,{size:16,color:"#e63946"}):t.includes("story")?a.jsx(ss,{size:16,color:"#2a9d8f"}):t.includes("epic")?a.jsx(ss,{size:16,color:"#9d4edd"}):t.includes("task")&&!t.includes("sub")?a.jsx(ns,{size:16,color:"#457b9d"}):t.includes("sub")?a.jsx(ns,{size:14,color:"#a8dadc"}):a.jsx(ts,{size:16,color:"#457b9d"})},Oo=e=>{if(!e)return"";const t=e.toLowerCase().replace(/\s+/g,"-");return t==="in-progress"?"in-progress":t==="done"?"done":t==="closed"?"closed":"todo"},ko=e=>{if(!e)return null;const t=e.toLowerCase();return t.includes("blocker")||t.includes("critical")||t.includes("sev-1")?a.jsx(tt,{size:14}):t.includes("major")||t.includes("sev-2")?a.jsx(gn,{size:14}):t.includes("minor")||t.includes("sev-3")?a.jsx(yn,{size:14}):t.includes("trivial")||t.includes("sev-4")||t.includes("sev-5")?a.jsx(bn,{size:14}):a.jsx(Ts,{size:14})},vo=e=>e||"",Ns=e=>{if(!e||typeof e!="string")return"?";const t=e.trim();if(t.length===0)return"?";const s=t.indexOf("@"),r=(s>0?t.substring(0,s):t).split(/\s+/).filter(Boolean);if(r.length===0)return"?";if(r.length===1){const c=r[0],p=c[0]||"",d=c[1]||"";return(p+d).toUpperCase()}const o=r[0][0]||"",i=r[r.length-1][0]||"";return(o+i).toUpperCase()};function Lo(){return a.jsx("div",{className:"table-container",children:a.jsxs("table",{className:"issue-table",children:[a.jsx("thead",{children:a.jsxs("tr",{children:[a.jsx("th",{scope:"col",children:"Type"}),a.jsx("th",{scope:"col",children:"Key"}),a.jsx("th",{scope:"col",children:"Summary"}),a.jsx("th",{scope:"col",children:"Status"}),a.jsx("th",{scope:"col",children:"Assignee"}),a.jsx("th",{scope:"col",children:"Severity"})]})}),a.jsx("tbody",{children:[...Array(5)].map((e,t)=>a.jsxs("tr",{className:"skeleton-row",children:[a.jsx("td",{children:a.jsx("div",{className:"skeleton skeleton-cell",style:{maxWidth:"30px"}})}),a.jsx("td",{children:a.jsx("div",{className:"skeleton skeleton-cell",style:{maxWidth:"100px"}})}),a.jsx("td",{children:a.jsx("div",{className:"skeleton skeleton-cell"})}),a.jsx("td",{children:a.jsx("div",{className:"skeleton skeleton-cell",style:{maxWidth:"100px"}})}),a.jsx("td",{children:a.jsx("div",{className:"skeleton skeleton-avatar"})}),a.jsx("td",{children:a.jsx("div",{className:"skeleton skeleton-cell",style:{maxWidth:"80px"}})})]},t))})]})})}function Po(){return a.jsxs("div",{className:"empty-state",role:"status",children:[a.jsx(Sn,{size:48,className:"empty-state-icon"}),a.jsx("h3",{children:"No issues found"}),a.jsx("p",{children:"Try adjusting your filters or create a new issue"})]})}const Do=As.memo(function({issues:t,loading:s,onRowClick:n,currentPage:r=0,pageSize:o=25,total:i,onPageChange:c,onExportCSV:p}){const d=i>0?r*o+1:0,u=Math.min((r+1)*o,i);return s?a.jsx(Lo,{}):!s&&t.length===0?a.jsx(Po,{}):a.jsxs("div",{className:"table-container",children:[a.jsxs("table",{className:"issue-table",role:"grid",children:[a.jsx("thead",{children:a.jsxs("tr",{children:[a.jsx("th",{children:"Type"}),a.jsx("th",{children:"Key"}),a.jsx("th",{children:"Summary"}),a.jsx("th",{children:"Status"}),a.jsx("th",{children:"Assignee"}),a.jsx("th",{children:"Severity"})]})}),a.jsx("tbody",{children:[...t].sort((m,x)=>{var P,T,Q,Z,se,ie,W,z;const C=((T=(P=m.fields.status)==null?void 0:P.name)==null?void 0:T.toLowerCase())||"",h=((Z=(Q=x.fields.status)==null?void 0:Q.name)==null?void 0:Z.toLowerCase())||"",b=C==="backlog";if(b!==(h==="backlog"))return b?1:-1;const R={bug:0,story:1,task:2},_=((ie=(se=m.fields.issuetype)==null?void 0:se.name)==null?void 0:ie.toLowerCase())||"",O=((z=(W=x.fields.issuetype)==null?void 0:W.name)==null?void 0:z.toLowerCase())||"",k=R[Object.keys(R).find(B=>_.includes(B))]??99,I=R[Object.keys(R).find(B=>O.includes(B))]??99;return k!==I?k-I:0}).map(m=>{var x,C,h,b;return a.jsxs("tr",{className:"clickable-row",onClick:()=>n(m.key),role:"button",tabIndex:0,onKeyDown:y=>y.key==="Enter"&&n(m.key),children:[a.jsx("td",{children:a.jsx("span",{className:"issue-type-badge",title:(x=m.fields.issuetype)==null?void 0:x.name,children:Ao((C=m.fields.issuetype)==null?void 0:C.name)})}),a.jsx("td",{children:a.jsx("span",{className:"issue-key",children:m.key})}),a.jsx("td",{children:a.jsx("span",{className:"issue-summary",title:m.fields.summary,children:m.fields.summary})}),a.jsx("td",{children:a.jsx("span",{className:`status-badge ${Oo((h=m.fields.status)==null?void 0:h.name)}`,children:((b=m.fields.status)==null?void 0:b.name)||"Unknown"})}),a.jsx("td",{children:a.jsx("div",{className:"assignee-cell",children:m.fields.assignee?a.jsxs(a.Fragment,{children:[a.jsx("span",{className:"avatar",children:Ns(m.fields.assignee.displayName)}),a.jsx("span",{children:m.fields.assignee.displayName})]}):a.jsxs(a.Fragment,{children:[a.jsx("span",{className:"avatar placeholder",children:Ns("Unassigned")}),a.jsx("span",{children:"Unassigned"})]})})}),a.jsx("td",{children:m.fields[ge]?a.jsxs("span",{className:`severity-badge ${(m.fields[ge].value||m.fields[ge].name||"").toLowerCase().replace(/\s+/g,"-")}`,children:[ko(m.fields[ge].value||m.fields[ge].name),vo(m.fields[ge].value||m.fields[ge].name)]}):a.jsx("span",{style:{color:"var(--text-muted)",fontSize:"13px"},children:"—"})})]},m.id)})})]}),i!==void 0&&i>0&&a.jsxs("div",{className:"pagination-bar",children:[a.jsxs("span",{className:"pagination-info",children:["Showing ",d,"–",u," of ",i]}),a.jsx("nav",{"aria-label":"Pagination",children:a.jsxs("div",{className:"pagination-controls",children:[a.jsxs("button",{className:"export-btn",onClick:p,"aria-label":"Export to CSV",children:[a.jsx(wn,{size:14}),"Export"]}),a.jsx("button",{className:"pagination-btn",onClick:()=>c(r-1),disabled:r===0,"aria-label":"Previous page",children:"Previous"}),a.jsxs("span",{className:"pagination-page",children:["Page ",r+1]}),a.jsx("button",{className:"pagination-btn",onClick:()=>c(r+1),disabled:u>=i,"aria-label":"Next page",children:"Next"})]})})]})]})});function Uo({toasts:e,onRemove:t}){return a.jsx("div",{className:"toast-container","aria-live":"polite",children:e.map(s=>a.jsxs("div",{className:`toast ${s.type}`,role:"alert",children:[s.type==="success"&&a.jsx(En,{size:18}),s.type==="error"&&a.jsx(tt,{size:18}),s.type==="info"&&a.jsx(Ts,{size:18}),a.jsx("span",{children:s.message}),a.jsx("button",{className:"toast-close",onClick:()=>t(s.id),"aria-label":"Dismiss",children:a.jsx(Bt,{size:16})})]},s.id))})}function _o(){const[e,t]=f.useState([]),s=f.useCallback((r,o="info")=>{const i=Date.now();t(c=>[...c,{id:i,message:r,type:o}]),setTimeout(()=>{t(c=>c.filter(p=>p.id!==i))},4e3)},[]),n=f.useCallback(r=>{t(o=>o.filter(i=>i.id!==r))},[]);return{toasts:e,addToast:s,removeToast:n}}function Io(e,t,s){const[n,r]=f.useState(null),[o,i]=f.useState([]),[c,p]=f.useState([]),[d,u]=f.useState([]),[m,x]=f.useState(!1),[C,h]=f.useState(null),[b,y]=f.useState(""),[R,_]=f.useState(!1),[O,k]=f.useState(""),[I,P]=f.useState(!1),[T,Q]=f.useState(""),[Z,se]=f.useState(""),[ie,W]=f.useState(!1),[z,B]=f.useState([]),[M,A]=f.useState(""),[Se,q]=f.useState([]),[de,Y]=f.useState(!1),[L,H]=f.useState(!1),[G,ae]=f.useState(!1),[fe,Oe]=f.useState(!1),[at,ce]=f.useState(""),[ct,he]=f.useState(!1),[lt,qe]=f.useState(null),[ut,ze]=f.useState(!1),[dt,Me]=f.useState(null),[ft,He]=f.useState(null),[me,ke]=f.useState(null),[Ee,xe]=f.useState(""),[ht,ve]=f.useState(!1),[mt,Le]=f.useState(!1),[je,Ce]=f.useState(""),[pt,Pe]=f.useState(!1),[De,Re]=f.useState(""),[gt,Ve]=f.useState(!1),[yt,We]=f.useState(!1);f.useEffect(()=>{if(!e)return;x(!0),h(null),r(null),i([]),p([]),u([]),y(""),k(""),se(""),Q(""),ce(""),A(""),(async()=>{var j;try{const[N,F,K,le]=await Promise.all([ue(e),go(e),Cs(e).catch(()=>[]),Rs(e).catch(()=>[])]);if(r(N),i(F),p(K),u(le),(j=N.fields.project)!=null&&j.key){const Dt=await No(N.fields.project.key).catch(()=>[]);B(Dt)}}catch(N){h(N.message||"Failed to load issue details")}finally{x(!1)}})()},[e]),f.useEffect(()=>{if(!M||M.length<1){q([]),Y(!1);return}const w=setTimeout(async()=>{var j;try{const N=await To(M),F=((j=n==null?void 0:n.fields)==null?void 0:j.labels)||[],K=N.filter(le=>!F.includes(le));q(K),Y(K.length>0)}catch(N){console.error("Label search error:",N)}},300);return()=>clearTimeout(w)},[M,n]),f.useEffect(()=>{if(!e||!T||T.length<1)return;const w=setTimeout(async()=>{try{const j=await Rs(e,T);u(j)}catch(j){console.error("Assignee search error:",j)}},500);return()=>clearTimeout(w)},[T,e]);const bt=f.useCallback(async()=>{if(!(!b.trim()||!e)){_(!0);try{const w=await yo(e,b);i(j=>[...j,w]),y(""),t("Comment posted","success")}catch(w){t(`Error posting comment: ${w.message}`,"error")}finally{_(!1)}}},[b,e,t]),wt=f.useCallback((w,j)=>{ke(w),xe(j)},[]),St=f.useCallback(()=>{ke(null),xe(""),ve(!1)},[]),Et=f.useCallback(async()=>{if(!(!me||!Ee.trim()||!e)){ve(!0);try{console.debug("Saving edited comment:",me);const w=await bo(e,me,Ee);i(j=>j.map(N=>N.id===me?w:N)),ke(null),xe(""),t("Comment updated","success")}catch(w){console.error("Save comment failed:",w),t(`Error updating comment: ${w.message}`,"error")}finally{ve(!1)}}},[me,Ee,e,t]);f.useEffect(()=>{console.debug("Fetching frontend current user..."),wo().then(w=>{console.debug("Frontend current user set:",w==null?void 0:w.displayName,w==null?void 0:w.accountId),He(w)}).catch(w=>{console.error("Frontend current user fetch failed:",w),He(null)})},[]);const xt=f.useCallback(async(w,j)=>{if(!w||!e)return;Me({displayName:j,accountId:w,avatarUrls:{"48x48":""}}),ze(!0),se(""),Q(""),W(!0);try{await Eo(e,w),ue(e).then(r).catch(()=>{}),s==null||s(),t("Issue assigned successfully","success")}catch(F){Me(null),t(`Failed to assign: ${F.message}`,"error")}finally{ze(!1),W(!1)}},[e,t,s]),jt=f.useCallback(async w=>{var N;const j=(N=w.target.files)==null?void 0:N[0];if(!(!j||!e)){Oe(!0),ce("");try{await xo(e,j),ce("File uploaded successfully"),t("File attached successfully","success");const F=await ue(e);r(F)}catch(F){ce(`Error uploading file: ${F.message}`),t(`Error attaching file: ${F.message}`,"error")}finally{Oe(!1),w.target.value=""}}},[e,t]),Ct=f.useCallback(async w=>{if(e){ae(!0);try{await $t(e,{fixVersions:w?[{id:w}]:[]});const N=await ue(e);r(N),t("Fix version updated","success")}catch(j){t(`Error updating version: ${j.message}`,"error")}finally{ae(!1)}}},[e,t]),Rt=f.useCallback(async w=>{var F;const j=(typeof w=="string"?w:M).trim();if(!j||!e)return;const N=((F=n==null?void 0:n.fields)==null?void 0:F.labels)||[];if(!N.includes(j)){H(!0);try{const K=[...N,j];await $t(e,{labels:K});const le=await ue(e);r(le),A(""),Y(!1),t("Label added","success")}catch(K){t(`Error adding label: ${K.message}`,"error")}finally{H(!1)}}},[M,e,n,t]),Nt=f.useCallback(async w=>{var j,N;if(e){H(!0);try{const F=((N=(j=n==null?void 0:n.fields)==null?void 0:j.labels)==null?void 0:N.filter(le=>le!==w))||[];await $t(e,{labels:F});const K=await ue(e);r(K),t("Label removed","success")}catch(F){t(`Error removing label: ${F.message}`,"error")}finally{H(!1)}}},[e,n,t]),Tt=f.useCallback(async(w,j)=>{if(!(!w||!e)){qe(j),he(!0),k(""),P(!0);try{await So(e,w),ue(e).then(r).catch(()=>{}),Cs(e).then(p).catch(()=>{}),s==null||s(),t("Status updated successfully","success")}catch(N){qe(null),t(`Failed to update status: ${N.message}`,"error")}finally{he(!1),P(!1)}}},[e,t,s]),At=f.useCallback(()=>{var w;(w=n==null?void 0:n.fields)!=null&&w.summary&&(Ce(n.fields.summary),Le(!0))},[n]),Ot=f.useCallback(()=>{Le(!1),Ce("")},[]),kt=f.useCallback(async()=>{if(!(!je.trim()||!e)){Ve(!0);try{await Co(e,je);const w=await ue(e);r(w),Le(!1),Ce(""),t("Summary updated","success")}catch(w){t(`Error updating summary: ${w.message}`,"error")}finally{Ve(!1)}}},[je,e,t]),vt=f.useCallback(()=>{n!=null&&n.fields&&(Re(n.fields.descriptionHtml||""),Pe(!0))},[n]),Lt=f.useCallback(()=>{Pe(!1),Re("")},[]),Pt=f.useCallback(async()=>{if(e){We(!0);try{await Ro(e,De);const w=await ue(e);r(w),Pe(!1),Re(""),t("Description updated","success")}catch(w){t(`Error updating description: ${w.message}`,"error")}finally{We(!1)}}},[De,e,t]);return{issueDetail:n,comments:o,transitions:c,assignableUsers:d,drawerLoading:m,drawerError:C,newCommentText:b,setNewCommentText:y,isPostingComment:R,targetTransitionId:O,setTargetTransitionId:k,isTransitioning:I,isTransitioningOptimistic:ct,optimisticStatus:lt,assigneeSearch:T,setAssigneeSearch:Q,targetAccountId:Z,setTargetAccountId:se,isAssigning:ie,isAssigningOptimistic:ut,optimisticAssignee:dt,projectVersions:z,isUpdatingVersions:G,newLabelText:M,setNewLabelText:A,labelSuggestions:Se,showLabelSuggestions:de,setShowLabelSuggestions:Y,isUpdatingLabels:L,isUploading:fe,uploadMessage:at,handlePostComment:bt,handleAssignUser:xt,handleFileUpload:jt,handleUpdateVersion:Ct,handleAddLabel:Rt,handleRemoveLabel:Nt,handleUpdateStatus:Tt,currentUser:ft,editingCommentId:me,editingCommentText:Ee,setEditingCommentText:xe,isEditingComment:ht,startEditComment:wt,cancelEditComment:St,saveEditComment:Et,isEditingSummary:mt,editingSummaryText:je,setEditingSummaryText:Ce,isUpdatingSummary:gt,startEditSummary:At,cancelEditSummary:Ot,saveEditSummary:kt,isEditingDescription:pt,editingDescriptionText:De,setEditingDescriptionText:Re,isUpdatingDescription:yt,startEditDescription:vt,cancelEditDescription:Lt,saveEditDescription:Pt}}const Fo=f.lazy(()=>Vt(()=>import("./IssueDrawer-BIQ3mixE.js"),__vite__mapDeps([0,1,2,3,4]))),$o=f.lazy(()=>Vt(()=>import("./CreateIssueModal-DPSWn0nN.js"),__vite__mapDeps([5,1,2,4]))),Bo=f.lazy(()=>Vt(()=>import("./StandaloneIssuePage-acjdCcy6.js"),__vite__mapDeps([6,1,2,3]))),qo=[{value:"",label:"Active",icon:An},{value:"Done",label:"Done",icon:On},{value:"Cancelled",label:"Cancelled",icon:kn},{value:"Closed",label:"Closed",icon:vn}];function zo(){const[e,t]=f.useState([]),[s,n]=f.useState(!0),[r,o]=f.useState(null),[i]=f.useState("ADW"),[c,p]=f.useState(""),[d,u]=f.useState(""),[m,x]=f.useState(""),[C,h]=f.useState(0),[b]=f.useState(25),[y,R]=f.useState(0),[_,O]=f.useState([]),[k,I]=f.useState(!1),[P,T]=f.useState(null),[Q,Z]=f.useState(!1),[se,ie]=f.useState(!1),[W,z]=f.useState(!1),[B,M]=f.useState(!1),[A,Se]=f.useState(()=>localStorage.getItem("theme")||"light"),[q,de]=f.useState([]),[Y,L]=f.useState(!1),[H,G]=f.useState(-1),[ae,fe]=f.useState(!1),Oe=f.useRef(!0),{toasts:at,addToast:ce,removeToast:ct}=_o(),he=f.useCallback(()=>{n(!0),js({project:i,status:d||"exclude:Done,Cancelled,Closed",startAt:C*b,maxResults:b}).then(g=>{t(g.issues||[]),R(g.total||0)}).catch(g=>o(g.message||"Failed to fetch issues")).finally(()=>n(!1))},[i,d,C,b]),{issueDetail:lt,comments:qe,transitions:ut,assignableUsers:ze,drawerLoading:dt,drawerError:Me,newCommentText:ft,setNewCommentText:He,isPostingComment:me,targetTransitionId:ke,setTargetTransitionId:Ee,isTransitioning:xe,assigneeSearch:ht,setAssigneeSearch:ve,targetAccountId:mt,setTargetAccountId:Le,isAssigning:je,projectVersions:Ce,isUpdatingVersions:pt,newLabelText:Pe,setNewLabelText:De,labelSuggestions:Re,showLabelSuggestions:gt,setShowLabelSuggestions:Ve,isUpdatingLabels:yt,isUploading:We,uploadMessage:bt,handlePostComment:wt,handleAssignUser:St,handleFileUpload:Et,handleUpdateVersion:xt,handleAddLabel:jt,handleRemoveLabel:Ct,handleUpdateStatus:Rt,currentUser:Nt,editingCommentId:Tt,editingCommentText:At,setEditingCommentText:Ot,isEditingComment:kt,startEditComment:vt,cancelEditComment:Lt,saveEditComment:Pt,isEditingSummary:w,editingSummaryText:j,setEditingSummaryText:N,isUpdatingSummary:F,startEditSummary:K,cancelEditSummary:le,saveEditSummary:Dt,isEditingDescription:Ks,editingDescriptionText:en,setEditingDescriptionText:tn,isUpdatingDescription:sn,startEditDescription:nn,cancelEditDescription:rn,saveEditDescription:on}=Io(P,ce,he);f.useEffect(()=>{I(!0),jo().then(O).catch(()=>ce("Failed to load projects","error")).finally(()=>I(!1))},[]),f.useEffect(()=>{const g=()=>{const S=window.location.hash;Oe.current&&(ie(S.startsWith("#/view/")),Oe.current=!1)};return g(),window.addEventListener("hashchange",g),window.addEventListener("popstate",g),window.addEventListener("load",g),()=>{window.removeEventListener("hashchange",g),window.removeEventListener("popstate",g),window.removeEventListener("load",g)}},[]),f.useEffect(()=>{const g=()=>{const S=window.location.hash;if(S.startsWith("#/issue/")){const D=S.replace("#/issue/","");D&&D!==P&&T(D)}};return g(),window.addEventListener("hashchange",g),()=>window.removeEventListener("hashchange",g)},[]),f.useEffect(()=>{h(0)},[d,c]),f.useEffect(()=>{he()},[he]),f.useEffect(()=>{if(!c){de([]),L(!1),fe(!1);return}fe(!0);const g=setTimeout(async()=>{try{const D=((await js({project:i,search:c})).issues||[]).slice(0,6);de(D),L(D.length>0),G(-1)}catch{de([]),L(!1)}finally{fe(!1)}},500);return()=>clearTimeout(g)},[c,i]),f.useEffect(()=>{const g=S=>{var D;if(S.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement.tagName)&&(S.preventDefault(),(D=document.querySelector(".text-input"))==null||D.focus()),S.key==="Escape"&&(B?M(!1):Y?(L(!1),G(-1)):P?T(null):W&&z(!1)),(S.metaKey||S.ctrlKey)&&S.key==="k"){S.preventDefault();const ee=document.querySelector(".text-input");ee&&(ee.focus(),ee.select())}S.key==="n"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement.tagName)&&!S.metaKey&&!S.ctrlKey&&(S.preventDefault(),z(!0)),S.key==="?"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement.tagName)&&(S.preventDefault(),M(ee=>!ee))};return window.addEventListener("keydown",g),()=>window.removeEventListener("keydown",g)},[P,W,Y,B]),f.useEffect(()=>{const g=S=>{Y&&!S.target.closest(".search-input-wrapper")&&(L(!1),G(-1))};return document.addEventListener("click",g),()=>document.removeEventListener("click",g)},[Y]),f.useEffect(()=>{document.documentElement.setAttribute("data-theme",A),localStorage.setItem("theme",A)},[A]);const an=()=>{Se(g=>g==="light"?"dark":"light")},Je=f.useCallback(g=>{T(g),Z(!1)},[]),cn=f.useCallback(()=>{T(null)},[]),ln=f.useCallback(g=>{T(g)},[]),un=f.useCallback(()=>{z(!1),he()},[he]),dn=f.useCallback(g=>{u(S=>S===g?"":g)},[]),fn=f.useCallback(()=>{const g=["Key","Summary","Status","Assignee","Severity"],S=e.map(re=>{var pe,Kt,es;return[re.key,re.fields.summary,((pe=re.fields.status)==null?void 0:pe.name)||"",((Kt=re.fields.assignee)==null?void 0:Kt.displayName)||"Unassigned",((es=re.fields.priority)==null?void 0:es.name)||""]}),D=[g.join(","),...S.map(re=>re.map(pe=>`"${pe}"`).join(","))].join(`
|
|
8
|
+
`),ee=new Blob([D],{type:"text/csv"}),Xe=URL.createObjectURL(ee),Ne=document.createElement("a");Ne.href=Xe,Ne.download=`issues-${new Date().toISOString().split("T")[0]}.csv`,Ne.click(),URL.revokeObjectURL(Xe)},[e]),Zt=e.reduce((g,S)=>{var ee;const D=((ee=S.fields.issuetype)==null?void 0:ee.name)||"Other";return g[D]=(g[D]||0)+1,g},{}),hn=Object.entries(Zt).filter(([g,S])=>S>0).sort(([g],[S])=>{const D={bug:0,story:1,enhancement:1,task:2},ee=g.toLowerCase(),Xe=S.toLowerCase(),Ne=D[Object.keys(D).find(pe=>ee.includes(pe))]??99,re=D[Object.keys(D).find(pe=>Xe.includes(pe))]??99;return Ne!==re?Ne-re:g.localeCompare(S)}).map(([g])=>g),Yt=e.filter(g=>{var S;return m?((S=g.fields.issuetype)==null?void 0:S.name)===m:!0});return se?a.jsx(f.Suspense,{fallback:a.jsx("div",{className:"loading-container",children:a.jsx(xn,{className:"spinner",size:32})}),children:a.jsx(Bo,{})}):a.jsxs("div",{className:"dashboard-container",children:[a.jsxs("header",{className:"header",children:[a.jsx("h1",{children:"Jira Dashboard"}),a.jsxs("div",{className:"header-actions",children:[a.jsx("button",{className:"theme-toggle",onClick:an,"aria-label":`Switch to ${A==="light"?"dark":"light"} mode`,title:`Switch to ${A==="light"?"dark":"light"} mode`,children:A==="light"?a.jsx(jn,{size:18}):a.jsx(Cn,{size:18})}),a.jsx("button",{className:"theme-toggle",onClick:()=>M(g=>!g),"aria-label":"Show keyboard shortcuts",title:"Keyboard shortcuts (?)",children:a.jsx(Rn,{size:18})}),a.jsxs("button",{className:"btn-primary",onClick:()=>z(!0),"aria-label":"Create new issue",children:[a.jsx(Nn,{size:18}),"Create Issue"]})]})]}),a.jsx("div",{className:"controls",children:a.jsxs("div",{className:"controls-main",children:[a.jsxs("div",{className:"input-group search-group",children:[a.jsx("label",{className:"input-label",children:"Search"}),a.jsxs("div",{className:"search-input-wrapper",children:[a.jsx(Tn,{size:16,className:"search-icon"}),a.jsx("input",{type:"text",className:"text-input",placeholder:"Search issues or jump to (e.g. ADW-123)...",value:c,onChange:g=>p(g.target.value),onKeyDown:g=>{if(g.key==="Enter"){if(H>=0&&q[H])Je(q[H].key),p(""),L(!1);else if(c.trim()){const S=c.trim().toUpperCase();/^[A-Z]+-\d+$/.test(S)&&Je(S)}}else g.key==="ArrowDown"?(g.preventDefault(),G(S=>S<q.length-1?S+1:S)):g.key==="ArrowUp"?(g.preventDefault(),G(S=>S>0?S-1:-1)):g.key==="Escape"&&(L(!1),G(-1))},onFocus:()=>{q.length>0&&L(!0)},"aria-label":"Search issues","aria-autocomplete":"list"}),c&&a.jsx("button",{className:"search-clear-btn",onClick:()=>{p(""),L(!1)},"aria-label":"Clear search",children:a.jsx(Bt,{size:14})}),Y&&a.jsx("div",{className:"search-suggestions-dropdown",children:ae?a.jsxs("div",{className:"suggestions-skeleton",children:[a.jsx("div",{className:"skeleton",style:{height:14,width:"80%"}}),a.jsx("div",{className:"skeleton",style:{height:14,width:"60%"}}),a.jsx("div",{className:"skeleton",style:{height:14,width:"70%"}})]}):q.map((g,S)=>a.jsxs("div",{className:`search-suggestion-item ${S===H?"selected":""}`,onClick:()=>{Je(g.key),p(""),L(!1)},onMouseEnter:()=>G(S),children:[a.jsx("span",{className:"suggestion-key",children:g.key}),a.jsx("span",{className:"suggestion-summary",children:g.fields.summary})]},g.id))})]})]}),a.jsxs("div",{className:"input-group filter-chips-group",children:[a.jsx("label",{className:"input-label",children:"Type"}),a.jsx("div",{className:"filter-chips",children:hn.map(g=>a.jsxs("button",{className:`filter-chip ${m===g?"active":""}`,onClick:()=>x(m===g?"":g),children:[g," (",Zt[g],")"]},g))})]}),a.jsxs("div",{className:"input-group filter-chips-group",children:[a.jsx("label",{className:"input-label",children:"Status"}),a.jsx("div",{className:"filter-chips",children:qo.map(g=>a.jsxs("button",{className:`filter-chip${d===g.value?" active":""}`,onClick:()=>dn(g.value),children:[g.icon&&a.jsx(g.icon,{size:14}),g.label]},g.value))})]})]})}),r&&a.jsxs("div",{className:"error",role:"alert",children:[a.jsx(tt,{size:16,style:{marginRight:"0.5rem",verticalAlign:"middle"}}),r]}),a.jsx(Do,{issues:Yt,loading:s,onRowClick:Je,currentPage:C,pageSize:b,total:Yt.length||0,onPageChange:h,onExportCSV:fn}),P&&a.jsx(f.Suspense,{fallback:a.jsx("div",{className:"drawer-overlay",children:a.jsx("div",{className:"drawer",children:a.jsx("div",{className:"drawer-body",children:a.jsxs("div",{className:"drawer-skeleton",children:[a.jsx("div",{className:"skeleton skeleton-title",style:{width:"60%"}}),a.jsx("div",{className:"skeleton skeleton-line"}),a.jsx("div",{className:"skeleton skeleton-line",style:{width:"80%"}})]})})})}),children:a.jsx(Fo,{issueKey:P,isExpanded:Q,onClose:cn,onExpand:Z,addToast:ce,issueDetail:lt,comments:qe,transitions:ut,assignableUsers:ze,drawerLoading:dt,drawerError:Me,newCommentText:ft,setNewCommentText:He,isPostingComment:me,targetTransitionId:ke,setTargetTransitionId:Ee,isTransitioning:xe,assigneeSearch:ht,setAssigneeSearch:ve,targetAccountId:mt,setTargetAccountId:Le,isAssigning:je,projectVersions:Ce,isUpdatingVersions:pt,newLabelText:Pe,setNewLabelText:De,labelSuggestions:Re,showLabelSuggestions:gt,setShowLabelSuggestions:Ve,isUpdatingLabels:yt,isUploading:We,uploadMessage:bt,handlePostComment:wt,handleAssignUser:St,handleFileUpload:Et,handleUpdateVersion:xt,handleAddLabel:jt,handleRemoveLabel:Ct,handleUpdateStatus:Rt,onSubtaskClick:ln,currentUser:Nt,editingCommentId:Tt,editingCommentText:At,setEditingCommentText:Ot,isEditingComment:kt,startEditComment:vt,cancelEditComment:Lt,saveEditComment:Pt,isEditingSummary:w,editingSummaryText:j,setEditingSummaryText:N,isUpdatingSummary:F,startEditSummary:K,cancelEditSummary:le,saveEditSummary:Dt,isEditingDescription:Ks,editingDescriptionText:en,setEditingDescriptionText:tn,isUpdatingDescription:sn,startEditDescription:nn,cancelEditDescription:rn,saveEditDescription:on})}),a.jsx(f.Suspense,{fallback:null,children:a.jsx($o,{isOpen:W,onClose:()=>z(!1),onCreated:un,projects:_,projectsLoading:k,addToast:ce})}),a.jsx(Uo,{toasts:at,onRemove:ct}),B&&a.jsx("div",{className:"shortcuts-overlay",onClick:()=>M(!1),children:a.jsxs("div",{className:"shortcuts-panel",onClick:g=>g.stopPropagation(),children:[a.jsxs("div",{className:"shortcuts-header",children:[a.jsx("h3",{children:"Keyboard Shortcuts"}),a.jsx("button",{className:"shortcuts-close",onClick:()=>M(!1),"aria-label":"Close shortcuts",children:a.jsx(Bt,{size:18})})]}),a.jsxs("div",{className:"shortcuts-list",children:[a.jsxs("div",{className:"shortcut-item",children:[a.jsx("kbd",{children:"Ctrl"})," + ",a.jsx("kbd",{children:"K"}),a.jsx("span",{children:"Jump to issue"})]}),a.jsxs("div",{className:"shortcut-item",children:[a.jsx("kbd",{children:"/"}),a.jsx("span",{children:"Focus search"})]}),a.jsxs("div",{className:"shortcut-item",children:[a.jsx("kbd",{children:"N"}),a.jsx("span",{children:"New issue"})]}),a.jsxs("div",{className:"shortcut-item",children:[a.jsx("kbd",{children:"Esc"}),a.jsx("span",{children:"Close drawer"})]}),a.jsxs("div",{className:"shortcut-item",children:[a.jsx("kbd",{children:"Ctrl"})," + ",a.jsx("kbd",{children:"↵"}),a.jsx("span",{children:"Submit comment"})]}),a.jsxs("div",{className:"shortcut-item",children:[a.jsx("kbd",{children:"?"}),a.jsx("span",{children:"Show shortcuts"})]})]})]})})]})}class Mo extends As.Component{constructor(t){super(t),this.state={hasError:!1,error:null}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,s){console.error("ErrorBoundary caught an error:",t,s)}render(){return this.state.hasError?a.jsxs("div",{className:"error-boundary-container",children:[a.jsx("div",{className:"error-boundary-icon",children:a.jsx(tt,{size:48})}),a.jsx("h2",{className:"error-boundary-title",children:"Something went wrong"}),!1,a.jsx("p",{className:"error-boundary-fallback",children:"Please refresh the page."}),a.jsxs("button",{className:"error-boundary-reload",onClick:()=>window.location.reload(),children:[a.jsx(Ln,{size:16}),"Reload"]})]}):this.props.children}}Dn.createRoot(document.getElementById("root")).render(a.jsx(f.StrictMode,{children:a.jsx(Mo,{children:a.jsx(zo,{})})}));export{ge as S,Io as a,hi as b,fi as c,Oo as d,Ns as e,di as f,Ao as g,ko as h,vo as i,_o as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--primary: #0052cc;--primary-hover: #0047b3;--primary-light: rgba(0, 82, 204, .1);--bg-color: #f4f5f7;--surface: #ffffff;--text-main: #172b4d;--text-muted: #6b778c;--border: #dfe1e6;--hover-bg: #ebecf0;--sidebar-bg: #fafbfc;--section-divider: #ebecf0;--status-todo-bg: #f4f5f7;--status-todo-color: #42526e;--status-inprogress-bg: #deebff;--status-inprogress-color: #0052cc;--status-done-bg: #e3fcef;--status-done-color: #00875a;--status-closed-bg: #091e42;--status-closed-color: #ffffff;--success-color: #00875a;--error-color: #de350b;--priority-highest: #ff5630;--priority-high: #ff5630;--priority-medium: #ffab00;--priority-low: #36b37e;--priority-lowest: #36b37e;--severity-critical: #ff5630;--severity-major: #ff8b00;--severity-minor: #ffab00;--severity-blocker: #de350b;--severity-trivial: #36b37e;--shadow-sm: 0 1px 2px rgba(9, 30, 66, .08);--shadow-md: 0 1px 3px rgba(9, 30, 66, .1), 0 0 0 1px rgba(9, 30, 66, .02);--shadow-lg: 0 4px 8px rgba(9, 30, 66, .12), 0 0 0 1px rgba(9, 30, 66, .04);--shadow-inset: inset 0 1px 2px rgba(9, 30, 66, .05);--shadow-comment: 0 1px 2px rgba(0, 0, 0, .05);--shadow-drawer: -4px 0 16px rgba(9, 30, 66, .12);--radius-sm: 3px;--radius-md: 4px;--radius-lg: 8px;--radius-pill: 12px;--space-1: 8px;--space-2: 16px;--space-3: 24px;--space-4: 32px;--transition-fast: .15s ease;--transition-normal: .2s ease}[data-theme=dark]{--primary: #58a6ff;--primary-hover: #79b8ff;--primary-light: rgba(56, 139, 253, .15);--bg-color: #0d1117;--surface: #161b22;--text-main: #c9d1d9;--text-muted: #8b949e;--border: #30363d;--hover-bg: #21262d;--sidebar-bg: #161b22;--section-divider: #21262d;--status-todo-bg: #21262d;--status-todo-color: #8b949e;--status-inprogress-bg: rgba(56, 139, 253, .15);--status-inprogress-color: #388bfd;--status-done-bg: rgba(35, 134, 54, .15);--status-done-color: #3fb950;--status-closed-bg: #21262d;--status-closed-color: #8b949e;--success-color: #238636;--error-color: #f85149;--priority-highest: #f85149;--priority-high: #f85149;--priority-medium: #d29922;--priority-low: #3fb950;--priority-lowest: #3fb950;--severity-critical: #f85149;--severity-major: #ff8b00;--severity-minor: #d29922;--severity-blocker: #f85149;--severity-trivial: #3fb950;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .3);--shadow-md: 0 1px 3px rgba(0, 0, 0, .3), 0 0 0 1px rgba(0, 0, 0, .1);--shadow-lg: 0 4px 8px rgba(0, 0, 0, .4), 0 0 0 1px rgba(0, 0, 0, .1);--shadow-inset: inset 0 1px 2px rgba(0, 0, 0, .2);--shadow-comment: 0 1px 2px rgba(0, 0, 0, .2);--shadow-drawer: -4px 0 16px rgba(0, 0, 0, .4);--radius-sm: 3px;--radius-md: 4px;--radius-lg: 8px;--radius-pill: 12px;--space-1: 8px;--space-2: 16px;--space-3: 24px;--space-4: 32px;--transition-fast: .15s ease;--transition-normal: .2s ease}[data-theme=dark] a{color:var(--primary);text-decoration:underline}[data-theme=dark] a:hover{text-decoration:none}[data-theme=dark] body{background-color:var(--bg-color)}[data-theme=dark] .issue-table th{background-color:var(--surface)}[data-theme=dark] .issue-table tbody tr:hover{background-color:var(--hover-bg)}[data-theme=dark] .empty-state{background:var(--surface);box-shadow:var(--shadow-md)}[data-theme=dark] .empty-state-icon{color:var(--border)}[data-theme=dark] .label-tag{background:var(--hover-bg);color:var(--text-main);border:1px solid var(--border)}[data-theme=dark] .label-remove{color:var(--text-muted)}[data-theme=dark] .label-remove:hover{color:#f85149}[data-theme=dark] .drawer-overlay,[data-theme=dark] .modal-overlay{background:#000000b3}[data-theme=dark] .version-select{background:var(--hover-bg);color:var(--text-main);border-color:var(--border)}[data-theme=dark] .modal-footer{background:var(--hover-bg);border-color:var(--border)}[data-theme=dark] .modal-header{border-color:var(--border)}[data-theme=dark] .add-label-input{color:var(--text-main);border-color:var(--border)}[data-theme=dark] .add-label-input:focus{background:var(--hover-bg);color:var(--text-main);border-color:var(--primary)}[data-theme=dark] .label-suggestions-dropdown{background:var(--surface);border-color:var(--border)}[data-theme=dark] .label-suggestion-item{color:var(--text-main);border-color:var(--border)}[data-theme=dark] .severity-badge.critical,[data-theme=dark] .severity-badge.blocker,[data-theme=dark] .severity-badge.sev-1{background:#f8514926;color:#f85149}[data-theme=dark] .severity-badge.major,[data-theme=dark] .severity-badge.sev-2{background:#ff8b0026;color:#ff8b00}[data-theme=dark] .severity-badge.minor,[data-theme=dark] .severity-badge.sev-3{background:#d2992226;color:#d29922}[data-theme=dark] .severity-badge.trivial,[data-theme=dark] .severity-badge.sev-4,[data-theme=dark] .severity-badge.sev-5{background:#3fb95026;color:#3fb950}[data-theme=dark] .error{background:#f8514926;border-color:#f851494d;color:#f85149}[data-theme=dark] .toast.success{background:#238636}[data-theme=dark] .toast.error{background:#f85149}[data-theme=dark] .comment-item{background:var(--surface);border-color:var(--border)}[data-theme=dark] .comment-composer{background:var(--hover-bg);border-color:var(--border)}[data-theme=dark] .comment-box{background:var(--surface);border-color:var(--border);color:var(--text-main)}[data-theme=dark] .comment-box:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-light)}[data-theme=dark] .upload-zone{background:var(--hover-bg);border-color:var(--border)}[data-theme=dark] .upload-message.success{color:#3fb950}[data-theme=dark] .upload-message.error{color:#f85149}[data-theme=dark] .drawer{background:var(--surface);box-shadow:var(--shadow-lg),0 0 0 1px #0000001a}[data-theme=dark] .drawer-header{background:var(--surface);border-color:var(--border)}[data-theme=dark] .drawer-main{background:var(--surface)}[data-theme=dark] .drawer-sidebar{background:var(--sidebar-bg);border-color:var(--border)}[data-theme=dark] .sidebar-section{border-color:var(--section-divider)}[data-theme=dark] .sidebar-label{color:var(--text-muted)}[data-theme=dark] .sidebar-value{color:var(--text-main)}[data-theme=dark] .sidebar-value svg{color:var(--text-muted)}[data-theme=dark] .drawer-footer{background:var(--sidebar-bg);border-color:var(--border)}[data-theme=dark] .detail-section,[data-theme=dark] .main-content-section{border-color:var(--section-divider)}[data-theme=dark] .detail-section h3,[data-theme=dark] .main-content-section h3{color:var(--text-main)}[data-theme=dark] .description-content{background:var(--sidebar-bg)}[data-theme=dark] .subtask-item,[data-theme=dark] .linked-item{background:var(--sidebar-bg);border-color:var(--border)}[data-theme=dark] .subtask-item .link-type,[data-theme=dark] .linked-item .link-type{color:var(--text-muted)}[data-theme=dark] .attachment-item{background:var(--sidebar-bg);border-color:var(--border)}[data-theme=dark] .error-boundary-icon,[data-theme=dark] .error-boundary-message{color:#f85149}[data-theme=dark] .error-boundary-stack{background:var(--surface);border-color:var(--border);color:var(--text-muted)}[data-theme=dark] .standalone-toast.success{background:#238636}[data-theme=dark] .standalone-toast.error{background:#f85149}[data-theme=dark] .unassigned-text{color:var(--text-muted)}[data-theme=dark] .assignee-suggestions-dropdown{background:var(--surface);border-color:var(--border)}[data-theme=dark] .assignee-suggestion-item{border-color:var(--border)}[data-theme=dark] .assignee-suggestion-item .user-name{color:var(--text-main)}.theme-toggle{display:flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text-muted);cursor:pointer;transition:all var(--transition-fast)}.theme-toggle:hover{background:var(--hover-bg);color:var(--text-main);border-color:var(--primary)}*{box-sizing:border-box}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;background-color:var(--bg-color);color:var(--text-main);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:1.5;overflow-x:hidden;width:100vw}.dashboard-container{max-width:1280px;margin:0 auto;padding:2rem;overflow-x:hidden}.header{margin-bottom:2rem;display:flex;justify-content:space-between;align-items:center}.header h1{margin:0;font-size:1.75rem;font-weight:600;color:var(--text-main);letter-spacing:-.01em}.header-actions{display:flex;align-items:center;gap:1rem}.jump-to-issue{position:relative;display:flex;align-items:center}.jump-to-issue .text-input{width:220px;padding-right:2rem;font-size:.875rem}.jump-to-issue .search-clear-btn{position:absolute;right:8px;background:none;border:none;cursor:pointer;color:var(--text-muted);padding:2px;display:flex;align-items:center}.jump-to-issue .search-clear-btn:hover{color:var(--text-main)}.keyboard-hint{font-size:.75rem;color:var(--text-muted);background:var(--surface);padding:.25rem .5rem;border-radius:var(--radius-sm);border:1px solid var(--border)}.controls{display:flex;gap:1rem;margin-bottom:1rem;flex-wrap:wrap;align-items:flex-end;overflow:visible}.controls-main{display:flex;gap:1rem;flex-wrap:wrap;flex:1;overflow:visible}.controls-secondary{display:flex;gap:.5rem;flex-wrap:wrap}.input-group{display:flex;flex-direction:column;gap:.375rem;min-width:180px}.input-group.search-group{flex:1;min-width:250px;overflow:visible}.input-label{font-size:.75rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.text-input,.select-input{padding:.625rem .75rem;border:2px solid var(--border);border-radius:var(--radius-md);font-size:.95rem;color:var(--text-main);background:var(--surface);min-width:180px;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.text-input:focus,.select-input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-light)}.text-input::placeholder{color:var(--text-muted)}.search-input-wrapper{position:relative;display:flex;align-items:center;flex:1;overflow:visible}.search-input-wrapper .text-input{padding-left:2.5rem;padding-right:2.5rem;width:100%}.search-input-wrapper .search-icon{position:absolute;left:.75rem;color:var(--text-muted);pointer-events:none}.search-clear-btn{position:absolute;right:.5rem;background:none;border:none;padding:.25rem;cursor:pointer;color:var(--text-muted);display:flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);transition:color var(--transition-fast),background-color var(--transition-fast)}.search-clear-btn:hover{color:var(--text-main);background-color:var(--hover-bg)}.search-suggestions-dropdown{position:absolute;top:100%;left:0;right:0;margin-top:.5rem;background:var(--surface);border:2px solid var(--primary);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);max-height:300px;overflow-y:auto;z-index:1000}.search-suggestion-item{display:flex;align-items:center;gap:.75rem;padding:.625rem .75rem;cursor:pointer;border-bottom:1px solid var(--border);transition:background-color var(--transition-fast)}.search-suggestion-item:last-child{border-bottom:none}.search-suggestion-item:hover,.search-suggestion-item.selected{background-color:var(--primary-light)}.suggestion-key{font-weight:600;color:var(--primary);white-space:nowrap;flex-shrink:0}.suggestion-summary{color:var(--text-main);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:.9rem}.filter-chips-group{min-width:auto}.filter-chips-group .filter-chips{margin-bottom:0}.filter-chips{display:flex;gap:.5rem;margin-bottom:1.5rem;flex-wrap:wrap}.filter-chip{padding:.375rem .875rem;border:2px solid var(--border);border-radius:20px;background:var(--surface);font-size:.85rem;font-weight:500;color:var(--text-muted);cursor:pointer;transition:all var(--transition-fast);display:flex;align-items:center;gap:.375rem}.filter-chip:hover{border-color:var(--primary);color:var(--primary)}.filter-chip.active{background:var(--primary);border-color:var(--primary);color:#fff}.filter-chip .count{font-size:.75rem;opacity:.8}.loading,.error,.empty-state{text-align:center;padding:3rem;color:var(--text-muted);font-size:1rem}.error{color:var(--error-color);background:var(--surface);border-radius:var(--radius-md);border:1px solid var(--border);padding:1rem 1.5rem;margin-bottom:1rem}.empty-state{padding:4rem 2rem;background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-md)}.empty-state-icon{margin-bottom:1rem;color:var(--border)}.empty-state h3{margin:0 0 .5rem;color:var(--text-main);font-size:1.1rem}.empty-state p{margin:0;color:var(--text-muted);font-size:.9rem}.skeleton{background:linear-gradient(90deg,var(--border) 0%,var(--hover-bg) 50%,var(--border) 100%);background-size:200% 100%;animation:shimmer 1.5s ease-in-out infinite;border-radius:var(--radius-sm)}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes slideInRight{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}@keyframes slideOutRight{0%{transform:translate(0);opacity:1}to{transform:translate(100%);opacity:0}}@keyframes fadeSlideIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.skeleton-row{display:flex;align-items:center;padding:1rem;border-bottom:1px solid var(--border);gap:1rem}.skeleton-cell{height:1rem;flex:1}.skeleton-cell:first-child{max-width:100px;flex:none}.skeleton-cell:last-child{max-width:80px;flex:none}.skeleton-avatar{width:32px;height:32px;border-radius:50%;flex-shrink:0}.skeleton-title{height:24px;width:60%;margin-bottom:1rem}.skeleton-line{height:14px;margin-bottom:.75rem}.skeleton-line:last-child{width:60%}.skeleton-chip{height:24px;width:80px;border-radius:12px;flex-shrink:0}.skeleton-sidebar-item{padding:.5rem 0}.drawer-skeleton{padding:1.5rem;display:flex;flex-direction:column}.drawer-skeleton-header{margin-bottom:1.5rem}.drawer-skeleton-description{margin-bottom:2rem}.drawer-skeleton-sidebar{display:grid;grid-template-columns:1fr 1fr;gap:1rem;padding:1rem;background:var(--sidebar-bg);border-radius:var(--radius-md)}.suggestions-skeleton{padding:.75rem;display:flex;flex-direction:column;gap:.5rem}.table-container{background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);overflow-x:auto}.issue-table{width:100%;border-collapse:collapse;text-align:left;table-layout:auto;min-width:800px}.issue-table thead{position:sticky;top:0;z-index:10;background:var(--surface)}.issue-table th{background:var(--surface);padding:1rem;font-weight:600;font-size:.8rem;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);border-bottom:2px solid var(--border);white-space:nowrap}.issue-table th:nth-child(1){width:60px}.issue-table th:nth-child(2){width:120px}.issue-table th:nth-child(3){width:auto}.issue-table th:nth-child(4){width:130px}.issue-table th:nth-child(5){width:180px}.issue-table th:nth-child(6){width:130px}.issue-table td{padding:1rem;border-bottom:1px solid var(--border);color:var(--text-main);vertical-align:middle;position:relative}.issue-table tbody tr{cursor:pointer;transition:background-color var(--transition-fast),transform var(--transition-fast)}.issue-table tbody td:first-child:before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--primary);transform:scaleY(0);transition:transform var(--transition-fast);z-index:2}.issue-table tbody tr:hover td:first-child:before{transform:scaleY(1)}.issue-table tbody tr:hover{background-color:var(--hover-bg);transform:translate(2px)}.issue-table tbody tr:last-child td{border-bottom:none}.pagination-bar{display:flex;justify-content:space-between;align-items:center;padding:1rem;border-top:1px solid var(--border)}.pagination-info{font-size:.875rem;color:var(--text-muted)}.pagination-controls{display:flex;gap:.5rem;align-items:center}.export-btn{padding:.375rem .75rem;font-size:.85rem;display:flex;align-items:center;gap:.375rem;margin-right:auto;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--text-main);cursor:pointer;transition:all var(--transition-fast)}.export-btn:hover{border-color:var(--primary);color:var(--primary)}.pagination-btn{padding:.375rem .75rem;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);cursor:pointer;font-size:.875rem;color:var(--text-main);transition:all var(--transition-fast)}.pagination-btn:hover:not(:disabled){border-color:var(--primary);color:var(--primary)}.pagination-btn:disabled{opacity:.5;cursor:not-allowed}.pagination-page{font-size:.875rem;color:var(--text-muted);padding:0 .5rem}.issue-type-badge{display:flex;align-items:center;justify-content:center;width:24px}.issue-key{color:var(--primary);font-weight:600;text-decoration:none;font-size:.9rem;display:inline-flex;align-items:center;gap:.375rem}.issue-key:hover{text-decoration:underline}.issue-summary{display:block;max-width:400px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.status-badge{display:inline-flex;align-items:center;gap:.375rem;padding:.25rem .625rem;border-radius:20px;font-size:.75rem;font-weight:600;white-space:nowrap}.status-badge.todo{background:var(--status-todo-bg);color:var(--status-todo-color)}.status-badge.in-progress{background:var(--status-inprogress-bg);color:var(--status-inprogress-color)}.status-badge.done{background:var(--status-done-bg);color:var(--status-done-color)}.status-badge.closed{background:var(--status-closed-bg);color:var(--status-closed-color)}.priority-badge{display:inline-flex;align-items:center;gap:.25rem;font-size:.85rem}.priority-badge svg{flex-shrink:0}.priority-badge.highest,.priority-badge.high{color:var(--priority-high)}.priority-badge.medium{color:var(--priority-medium)}.priority-badge.low,.priority-badge.lowest{color:var(--priority-low)}.severity-badge{display:inline-flex;align-items:center;gap:.35rem;font-size:13px;padding:4px 10px;border-radius:4px;font-weight:500;white-space:nowrap;width:fit-content}.severity-badge.critical,.severity-badge.blocker,.severity-badge.sev-1{background:#ff56301f;color:var(--severity-critical)}.severity-badge.major,.severity-badge.sev-2{background:#ff8b001f;color:var(--severity-major)}.severity-badge.minor,.severity-badge.sev-3{background:#ffab001f;color:var(--severity-minor)}.severity-badge.trivial,.severity-badge.sev-4,.severity-badge.sev-5{background:#36b37e1f;color:var(--severity-trivial)}.assignee-cell{display:flex;align-items:center;gap:.5rem}.avatar{width:28px;height:28px;border-radius:50%;background:var(--primary);color:#fff;display:flex;align-items:center;justify-content:center;font-size:.7rem;font-weight:600;text-transform:uppercase;flex-shrink:0}.avatar.large{width:40px;height:40px;font-size:.9rem}.avatar.placeholder{background:var(--border);color:var(--text-muted)}.avatar.small{width:24px;height:24px;font-size:.65rem}.issue-type-icon{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px}.drawer-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#091e428a;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:100;display:flex;align-items:flex-start;justify-content:center;padding-top:5vh;animation:fadeIn .2s ease-out}.drawer{width:750px;max-width:calc(100vw - 4rem);max-height:90vh;background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg),0 0 0 1px #091e4214;display:flex;flex-direction:column;animation:modalPop .25s ease-out;overflow:hidden;transition:width .2s ease,max-height .2s ease,height .2s ease,border-radius .2s ease}.drawer.expanded{width:calc(100vw - 64px);max-width:none;height:calc(100vh - 32px);max-height:none;border-radius:var(--radius-lg)}.drawer.expanded .drawer-sidebar{width:300px}@keyframes modalPop{0%{opacity:0;transform:scale(.97) translateY(-10px)}to{opacity:1;transform:scale(1) translateY(0)}}.drawer-content{animation:slideInRight .3s ease-out forwards}.drawer-content.closing{animation:slideOutRight .2s ease-in forwards}.drawer-header{padding:var(--space-2);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:var(--space-2);background:var(--surface);flex-shrink:0}.drawer-header-content{flex:1;min-width:0}.drawer-breadcrumb{display:flex;align-items:center;gap:6px;font-size:.8rem;color:var(--text-muted);margin-bottom:4px}.drawer-breadcrumb-project{color:var(--primary);font-weight:500}.drawer-header h2{margin:0;font-size:1.1rem;font-weight:600;color:var(--text-main);line-height:1.3}.drawer-header-actions{display:flex;align-items:center;gap:4px}.action-btn{background:none;border:none;cursor:pointer;color:var(--text-muted);padding:6px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;transition:all var(--transition-fast)}.action-btn:hover{color:var(--text-main);background-color:var(--hover-bg)}.close-btn{background:none;border:none;cursor:pointer;color:var(--text-muted);padding:6px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;transition:all var(--transition-fast);margin-left:4px}.close-btn:hover{color:var(--text-main);background-color:var(--hover-bg)}.drawer-body{flex:1;display:flex;overflow:hidden}.drawer-main{flex:1;min-width:0;overflow-y:auto;padding:var(--space-2);background:var(--surface)}.drawer-main>*{animation:fadeSlideIn .3s ease-out backwards}.drawer-main>*:nth-child(1){animation-delay:.05s}.drawer-main>*:nth-child(2){animation-delay:.1s}.drawer-main>*:nth-child(3){animation-delay:.15s}.drawer-main>*:nth-child(4){animation-delay:.2s}.drawer-main>*:nth-child(5){animation-delay:.25s}.drawer-main>*:nth-child(6){animation-delay:.3s}.drawer-sidebar{width:300px;flex-shrink:0;background:var(--sidebar-bg);border-left:1px solid var(--border);overflow-y:auto;padding:var(--space-2)}.sidebar-section{padding-bottom:var(--space-2);margin-bottom:var(--space-2);border-bottom:1px solid var(--section-divider)}.sidebar-section:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}.sidebar-label{font-size:11px;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:6px}.sidebar-value{font-size:14px;color:var(--text-main);display:flex;align-items:center;gap:8px}.sidebar-value svg{color:var(--text-muted);flex-shrink:0}.drawer-footer{padding:var(--space-2);border-top:1px solid var(--border);background:var(--sidebar-bg);flex-shrink:0}.detail-section{margin-bottom:var(--space-3);padding-bottom:var(--space-3);border-bottom:1px solid var(--section-divider)}.detail-section:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}.detail-section h3{margin:0 0 var(--space-2) 0;font-size:.85rem;font-weight:600;color:var(--text-main);text-transform:uppercase;letter-spacing:.04em}.main-content-section{padding-bottom:var(--space-2);margin-bottom:var(--space-2);border-bottom:1px solid var(--section-divider)}.main-content-section:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}.main-content-section h3{margin:0 0 var(--space-2) 0;font-size:14px;font-weight:600;color:var(--text-main)}.meta-grid,.meta-item,.meta-label,.meta-value,.management-grid,.management-item{display:none}.status-sidebar{display:flex;flex-direction:column;gap:var(--space-1)}.status-sidebar .status-badge{align-self:flex-start;margin-bottom:6px}.transition-control{display:flex;gap:6px}.transition-control .select-input{flex:1;min-width:0;padding:6px 8px;font-size:12px}.btn-sm{padding:6px 12px;font-size:12px}.assignee-sidebar{display:flex;flex-direction:column;gap:6px;position:relative}.assignee-sidebar .user-info{display:flex;align-items:center;gap:8px;margin-bottom:0}.assignee-sidebar .text-input{padding:6px 10px;font-size:12px;min-width:0;width:100%}.assignee-input-container{width:100%;position:relative}.assignee-control-wrapper{position:relative;display:flex;flex-direction:column;gap:6px;width:100%}.assignee-suggestions-dropdown{position:fixed;background:var(--surface);border:1px solid var(--primary);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);max-height:200px;overflow-y:auto;z-index:10000;animation:slideInDown .15s ease-out}@keyframes slideInDown{0%{transform:translateY(-5px);opacity:0}to{transform:translateY(0);opacity:1}}.assignee-suggestion-item{display:flex;align-items:center;gap:8px;padding:8px 10px;cursor:pointer;border-bottom:1px solid var(--border);transition:background-color var(--transition-fast)}.assignee-suggestion-item:last-child{border-bottom:none}.assignee-suggestion-item:hover{background-color:var(--primary-light)}.assignee-suggestion-item.empty{cursor:default;color:var(--text-muted);font-style:italic;justify-content:center;padding:12px;background:transparent!important}.assignee-suggestion-item .avatar.small{width:24px;height:24px;font-size:.65rem}.assignee-suggestion-item .user-name{font-size:13px;color:var(--text-main)}.assignee-actions{display:flex;gap:6px;align-items:center;background:var(--primary-light);padding:4px;border-radius:var(--radius-md);margin-top:4px;animation:fadeIn .2s ease-out}.assignee-actions .btn-primary{padding:6px 12px;font-size:12px;flex:1}.assignee-actions .btn-icon{background:var(--surface);border:1px solid var(--border);padding:6px}.unassigned-text{color:var(--text-muted);font-style:italic;font-size:13px}.user-info{display:flex;align-items:center;gap:8px}.description-content{padding:var(--space-2);background:var(--sidebar-bg);border-radius:var(--radius-md);font-size:14px;line-height:1.6}.description-content img{max-width:100%;height:auto;border-radius:var(--radius-sm)}.subtask-list,.linked-list{display:flex;flex-direction:column;gap:6px}.subtask-item,.linked-item{display:flex;align-items:center;gap:var(--space-1);padding:10px;background:var(--sidebar-bg);border:1px solid var(--border);border-radius:var(--radius-md);font-size:13px;cursor:pointer;transition:all var(--transition-fast)}.subtask-item:hover,.linked-item:hover{border-color:var(--primary);box-shadow:var(--shadow-sm)}.subtask-item .link-type,.linked-item .link-type{font-style:italic;color:var(--text-muted);font-size:11px;min-width:60px}.subtask-item .issue-key,.linked-item .issue-key{font-weight:600;font-size:12px;color:var(--primary)}.subtask-item .summary,.linked-item .summary{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.attachments-list{display:flex;flex-direction:column;gap:6px;margin-bottom:var(--space-2)}.attachment-item{display:flex;align-items:center;gap:8px;padding:8px 10px;background:var(--sidebar-bg);border-radius:var(--radius-sm);font-size:13px}.attachment-item a{flex:1;color:var(--primary);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.attachment-item a:hover{text-decoration:underline}.attachment-item .size{color:var(--text-muted);font-size:11px}.upload-zone{padding:var(--space-2);border:2px dashed var(--border);border-radius:var(--radius-md);background:var(--sidebar-bg);text-align:center;transition:all var(--transition-fast)}.upload-zone:hover{border-color:var(--primary);background:var(--primary-light)}.upload-zone input[type=file]{margin-bottom:6px}.upload-message{margin-top:8px;font-size:12px}.upload-message.success{color:var(--success-color)}.upload-message.error{color:var(--error-color)}.comments-list{display:flex;flex-direction:column;gap:var(--space-2)}.comment-item{padding:var(--space-2);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-comment)}.comment-header{display:flex;align-items:center;gap:8px;margin-bottom:8px;width:100%}.comment-author{font-weight:600;font-size:13px}.comment-date{font-size:11px;color:var(--text-muted)}.comment-body{font-size:14px;line-height:1.5;white-space:pre-wrap}.comment-body img{max-width:100%;height:auto;border-radius:var(--radius-sm)}.comment-composer{display:flex;flex-direction:column;gap:8px;padding:16px;background:var(--sidebar-bg);border-radius:var(--radius-md);border:1px solid var(--border)}.comment-composer .btn-primary{align-self:flex-end}.comment-box{width:100%;min-height:80px;padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius-md);resize:vertical;font-family:inherit;font-size:14px;transition:border-color var(--transition-fast),box-shadow var(--transition-fast);background:var(--surface)}.comment-box:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-light)}.comment-item.own{background:var(--primary-light);border-left:3px solid var(--primary)}.comment-action-btn{margin-left:auto;padding:4px 8px;background:var(--hover-bg);border:1px solid var(--border);color:var(--text-main);cursor:pointer;border-radius:var(--radius-sm);display:flex;align-items:center;transition:all var(--transition-fast);opacity:.8}.comment-action-btn:hover{background:var(--primary);border-color:var(--primary);color:#fff;opacity:1}.comment-edit-form{display:flex;flex-direction:column;gap:8px}.comment-edit-actions{display:flex;gap:8px;justify-content:flex-end}.mention-dropdown{position:absolute;z-index:1000;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);max-height:240px;overflow-y:auto;min-width:280px}.mention-dropdown__item{display:flex;align-items:center;gap:10px;padding:8px 12px;cursor:pointer;transition:background var(--transition-fast)}.mention-dropdown__item:hover,.mention-dropdown__item--selected{background:var(--hover-bg)}.mention-dropdown__avatar{flex-shrink:0;width:32px;height:32px;border-radius:50%;overflow:hidden;background:var(--sidebar-bg)}.mention-dropdown__avatar img{width:100%;height:100%;object-fit:cover}.mention-dropdown__avatar-placeholder{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:var(--text-muted)}.mention-dropdown__info{display:flex;flex-direction:column;min-width:0}.mention-dropdown__name{font-size:14px;font-weight:500;color:var(--text-main);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mention-dropdown__email{font-size:12px;color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mention-dropdown__loading,.mention-dropdown__empty{padding:12px 16px;color:var(--text-muted);font-size:13px;text-align:center;display:flex;align-items:center;justify-content:center;gap:8px}.comment-composer{position:relative}.btn-sm{padding:6px 12px;font-size:13px;display:flex;align-items:center;gap:4px}.btn-secondary{padding:6px 12px;font-size:13px;background:var(--hover-bg);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text-main);cursor:pointer;transition:all var(--transition-fast);display:flex;align-items:center;gap:4px}.btn-secondary:hover{background:var(--border)}.sidebar-labels{display:flex;flex-wrap:wrap;gap:6px}.label-tag{background:#e9ebf0;color:#42526e;padding:4px 10px;border-radius:var(--radius-pill);font-size:12px;display:inline-flex;align-items:center;gap:6px;font-weight:500}.label-remove{cursor:pointer;display:flex;align-items:center;color:#6b778c;transition:color var(--transition-fast);background:none;border:none;padding:0}.label-remove:hover{color:var(--error-color)}.add-label-wrapper{display:flex;align-items:center;gap:6px}.add-label-input{border:1px dashed var(--border);background:transparent;padding:4px 8px;font-size:12px;border-radius:var(--radius-pill);width:100px;outline:none;transition:all var(--transition-fast)}.add-label-input:focus{border-style:solid;border-color:var(--primary);width:140px;background:#fff}.label-suggestions-dropdown{position:absolute;top:100%;left:0;width:180px;max-height:200px;overflow-y:auto;background:#fff;border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);z-index:1000;margin-top:4px}.label-suggestion-item{padding:8px 10px;cursor:pointer;font-size:12px;color:#42526e;border-bottom:1px solid var(--border);text-align:left;transition:all .2s}.label-suggestion-item:last-child{border-bottom:none}.label-suggestion-item:hover{background:var(--hover-bg);color:var(--primary)}.version-select{width:100%;padding:6px 8px;border-radius:var(--radius-sm);border:1px solid var(--border);background:#fff;font-size:12px}.version-select:hover{border-color:var(--primary)}.sidebar-date{font-size:13px;color:var(--text-main);display:flex;align-items:center;gap:8px}.sidebar-date svg{color:var(--text-muted)}.btn-primary{background:var(--primary);color:#fff;border:none;padding:.625rem 1.25rem;border-radius:var(--radius-md);cursor:pointer;font-weight:500;font-size:.95rem;display:inline-flex;align-items:center;justify-content:center;gap:.5rem;transition:all var(--transition-fast)}.btn-primary:hover{background:var(--primary-hover)}.btn-primary:focus{outline:none;box-shadow:0 0 0 3px var(--primary-light)}.btn-primary:active{transform:scale(.97)}.btn-primary:disabled{opacity:.6;cursor:not-allowed}.btn-primary .spinner{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.inline-spinner{display:inline-block;width:12px;height:12px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:spin .6s linear infinite;margin-left:.375rem;opacity:.7;vertical-align:middle}.btn-secondary{background:var(--surface);color:var(--text-main);border:2px solid var(--border);padding:.625rem 1.25rem;border-radius:var(--radius-md);cursor:pointer;font-weight:500;font-size:.95rem;transition:all var(--transition-fast)}.btn-secondary:hover{background:var(--hover-bg);border-color:var(--text-muted)}.btn-icon{background:none;border:none;padding:.5rem;border-radius:var(--radius-md);cursor:pointer;color:var(--text-muted);display:inline-flex;align-items:center;justify-content:center;transition:all var(--transition-fast)}.btn-icon:hover{color:var(--text-main);background-color:var(--hover-bg)}.btn-icon{transition:transform var(--transition-fast),background-color var(--transition-fast)}.btn-icon:active{transform:scale(.9)}.clickable-row{cursor:pointer}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#091e4280;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:100;display:flex;align-items:center;justify-content:center;padding:1rem;animation:fadeIn .2s ease-out}.modal{width:540px;background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);display:flex;flex-direction:column;max-width:90vw;max-height:90vh;animation:modalSlideIn .3s ease-out}@keyframes modalSlideIn{0%{opacity:0;transform:scale(.95) translateY(-10px)}to{opacity:1;transform:scale(1) translateY(0)}}.modal-header{padding:1.5rem;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center}.modal-header h2{margin:0;font-size:1.25rem;font-weight:600}.modal-body{padding:1.5rem;overflow-y:auto;flex:1}.modal-footer{padding:1.5rem;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:.75rem;background:var(--sidebar-bg);border-radius:0 0 var(--radius-lg) var(--radius-lg)}.modal-footer .btn-secondary{padding:.625rem 1.25rem}.toast-container{position:fixed;bottom:1.5rem;right:1.5rem;z-index:200;display:flex;flex-direction:column;gap:.75rem}.toast{padding:1rem 1.25rem;border-radius:var(--radius-md);background:var(--text-main);color:#fff;font-size:.9rem;font-weight:500;box-shadow:var(--shadow-lg);display:flex;align-items:center;gap:.75rem;animation:slideInToast .3s ease-out forwards;max-width:360px;border-left:4px solid var(--primary)}@keyframes slideInToast{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}.toast.success{background:var(--success-color);border-left-color:var(--success-color)}.toast.error{background:var(--error-color);border-left-color:var(--error-color)}.toast.info{background:var(--primary)}.toast-close{margin-left:auto;background:none;border:none;color:#fff;cursor:pointer;padding:.25rem;opacity:.8;transition:opacity var(--transition-fast)}.toast-close:hover{opacity:1}@media(max-width:768px){.dashboard-container{padding:1rem}.header{flex-direction:column;align-items:flex-start;gap:1rem}.controls{flex-direction:column}.controls-main{flex-direction:column;width:100%}.input-group,.text-input,.select-input{width:100%;min-width:0}.search-input-wrapper{width:100%}.meta-grid{display:none}.drawer{width:calc(100vw - 2rem);max-height:100vh;border-radius:var(--radius-lg)}.drawer.expanded{width:calc(100vw - 1rem);height:calc(100vh - 1rem);border-radius:var(--radius-lg)}.drawer-body{flex-direction:column}.drawer.expanded .drawer-body{flex-direction:row}.drawer.expanded .drawer-sidebar{width:280px}.drawer-sidebar{width:100%;border-left:none;border-top:1px solid var(--border)}.modal{width:100%;max-height:100vh;border-radius:0}.keyboard-hint{display:none}}.standalone-page{min-height:100vh;background:var(--bg-color);padding:0}.standalone-issue-container{height:100vh;background:var(--surface);border-radius:0;box-shadow:none;overflow:hidden;display:flex;flex-direction:column}.standalone-header{padding:8px 16px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;background:var(--surface);flex-shrink:0}.standalone-back-btn{display:flex;align-items:center;gap:4px;color:var(--text-muted);text-decoration:none;font-size:12px;padding:4px 8px;border-radius:var(--radius-sm);transition:all var(--transition-fast)}.standalone-back-btn:hover{color:var(--primary);background:var(--hover-bg)}.standalone-issue-container .drawer{width:100%;max-width:none;height:100%;max-height:none;border-radius:0;box-shadow:none;flex:1}.standalone-issue-container .drawer-body{flex:1}.standalone-issue-container .drawer-main,.standalone-issue-container .drawer-sidebar{padding:var(--space-2)}.standalone-issue-container .drawer-header{padding:8px 16px}.standalone-issue-container .drawer-footer{display:none}.standalone-toast-container{position:fixed;bottom:var(--space-3);right:var(--space-3);z-index:200;display:flex;flex-direction:column;gap:var(--space-1)}.standalone-toast{padding:12px 16px;border-radius:var(--radius-md);background:var(--text-main);color:#fff;font-size:14px;font-weight:500;box-shadow:var(--shadow-lg);display:flex;align-items:center;gap:10px;animation:toastSlideIn .3s ease-out;max-width:360px}.standalone-toast.success{background:var(--success-color)}.standalone-toast.error{background:var(--error-color)}.standalone-toast.info{background:var(--primary)}.error-boundary-container{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;padding:2rem;text-align:center;background:var(--bg-color)}.error-boundary-icon{color:var(--error-color);margin-bottom:1.5rem}.error-boundary-title{font-size:1.5rem;font-weight:600;color:var(--text-main);margin:0 0 1rem}.error-boundary-message{color:var(--error-color);margin:0 0 .5rem;font-size:.95rem}.error-boundary-stack{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:1rem;font-size:.75rem;color:var(--text-muted);text-align:left;max-width:100%;overflow-x:auto;margin:.5rem 0 1.5rem;max-height:300px;overflow-y:auto}.error-boundary-fallback{color:var(--text-muted);margin:0 0 1.5rem}.error-boundary-reload{display:flex;align-items:center;gap:.5rem;padding:.625rem 1.25rem;background:var(--primary);color:#fff;border:none;border-radius:var(--radius-md);font-size:.95rem;font-weight:500;cursor:pointer;transition:background var(--transition-fast)}.error-boundary-reload:hover{background:var(--primary-hover)}.shortcuts-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000;animation:fadeIn .15s ease-out}.shortcuts-panel{background:var(--surface);border-radius:var(--radius-lg);box-shadow:0 8px 32px #00000026;min-width:320px;max-width:90vw;animation:slideUp .2s ease-out}.shortcuts-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--border)}.shortcuts-header h3{margin:0;font-size:1rem;font-weight:600;color:var(--text-main)}.shortcuts-close{background:none;border:none;padding:.25rem;cursor:pointer;color:var(--text-muted);border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;transition:all var(--transition-fast)}.shortcuts-close:hover{background:var(--hover-bg);color:var(--text-main)}.shortcuts-list{padding:1rem 1.25rem 1.5rem}.shortcut-item{display:flex;align-items:center;justify-content:space-between;padding:.5rem 0;color:var(--text-main);font-size:.9rem}.shortcut-item:not(:last-child){border-bottom:1px solid var(--border)}.shortcut-item kbd{background:var(--hover-bg);border:1px solid var(--border);border-radius:var(--radius-sm);padding:.125rem .5rem;font-size:.8rem;font-family:inherit;color:var(--text-main);min-width:28px;text-align:center}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.summary-editable{display:inline-flex;align-items:center;gap:8px}.summary-editable .edit-btn{opacity:0;transition:opacity var(--transition-fast)}.summary-editable:hover .edit-btn{opacity:1}.summary-edit-container{display:flex;align-items:center;gap:8px;flex:1}.summary-edit-input{flex:1;padding:6px 10px;border:1px solid var(--primary);border-radius:var(--radius-md);font-size:16px;font-weight:600;background:var(--surface);color:var(--text-main)}.summary-edit-input:focus{outline:none;box-shadow:0 0 0 3px var(--primary-light)}.summary-edit-actions{display:flex;gap:4px}.section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.section-header .edit-btn{padding:4px;background:transparent;border:none;color:var(--text-muted);cursor:pointer;border-radius:var(--radius-sm);transition:all var(--transition-fast)}.section-header .edit-btn:hover{background:var(--hover-bg);color:var(--text-main)}.description-edit-container{display:flex;flex-direction:column;gap:8px}.description-edit-textarea{width:100%;min-height:120px;padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius-md);font-family:inherit;font-size:14px;resize:vertical;background:var(--surface);color:var(--text-main)}.description-edit-textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-light)}.description-edit-actions{display:flex;gap:8px;justify-content:flex-end}.btn-icon-success{padding:6px;background:var(--primary);border:none;color:#fff;border-radius:var(--radius-sm);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background var(--transition-fast)}.btn-icon-success:hover:not(:disabled){background:var(--primary-dark)}.btn-icon-success:disabled{opacity:.5;cursor:not-allowed}.btn-icon-danger{padding:6px;background:var(--hover-bg);border:1px solid var(--border);color:var(--text-muted);border-radius:var(--radius-sm);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--transition-fast)}.btn-icon-danger:hover:not(:disabled){background:var(--border);color:var(--text-main)}.btn-icon-danger:disabled{opacity:.5;cursor:not-allowed}.description-editor{display:flex;flex-direction:column;gap:12px}.editor-toolbar{display:flex;align-items:center;gap:4px;padding:8px;background:var(--sidebar-bg);border-radius:var(--radius-md);flex-wrap:wrap}.toolbar-btn{padding:6px;background:transparent;border:none;color:var(--text-muted);border-radius:var(--radius-sm);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--transition-fast)}.toolbar-btn:hover{background:var(--hover-bg);color:var(--text-main)}.toolbar-btn.active{background:var(--primary-light);color:var(--primary)}.toolbar-divider{width:1px;height:20px;background:var(--border);margin:0 4px}.tiptap-editor-content{min-height:150px;padding:12px;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--text-main);font-size:14px;line-height:1.6}.tiptap-editor-content:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-light)}.tiptap-editor-content p{margin:0 0 8px}.tiptap-editor-content p:last-child{margin-bottom:0}.tiptap-editor-content img{max-width:100%;height:auto;border-radius:var(--radius-md);margin:8px 0}.tiptap-editor-content ul,.tiptap-editor-content ol{padding-left:24px;margin:8px 0}.tiptap-editor-content li{margin:4px 0}.tiptap-editor-content h1,.tiptap-editor-content h2,.tiptap-editor-content h3{margin:16px 0 8px;color:var(--text-main);font-weight:600}.tiptap-editor-content h1{font-size:24px}.tiptap-editor-content h2{font-size:20px}.tiptap-editor-content h3{font-size:16px}.tiptap-editor-content .is-empty:before{content:attr(data-placeholder);color:var(--text-muted);float:left;height:0;pointer-events:none}.editor-actions{display:flex;gap:8px;justify-content:flex-end}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as f}from"./vendor-ui-Cdo3Wdx4.js";const i=["a[href]","button:not([disabled])","textarea:not([disabled])","input:not([disabled])","select:not([disabled])",'[tabindex]:not([tabindex="-1"])'].join(", ");function m(o,s){const e=f.useRef(null);f.useEffect(()=>{if(!s||!o.current)return;const t=o.current;e.current=document.activeElement;const c=t.querySelectorAll(i)[0];c&&c.focus();const u=n=>{if(n.key!=="Tab")return;const r=t.querySelectorAll(i);if(r.length===0)return;const l=r[0],a=r[r.length-1];n.shiftKey?document.activeElement===l&&(n.preventDefault(),a.focus()):document.activeElement===a&&(n.preventDefault(),l.focus())};return t.addEventListener("keydown",u),()=>{t.removeEventListener("keydown",u),e.current&&e.current.focus&&e.current.focus()}},[s,o])}export{m as u};
|