@siteping/widget 0.10.0 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/{chunk-BC2J5J47.js → chunk-GP6ZPMBW.js} +3 -3
- package/dist/chunk-GP6ZPMBW.js.map +1 -0
- package/dist/de-MXWDD2BZ.js +2 -0
- package/dist/de-MXWDD2BZ.js.map +1 -0
- package/dist/{es-CYTPFERY.js → es-74ACSG45.js} +2 -2
- package/dist/es-74ACSG45.js.map +1 -0
- package/dist/fr-XAQKRFFY.js +2 -0
- package/dist/fr-XAQKRFFY.js.map +1 -0
- package/dist/index.global.js +107 -96
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +73 -62
- package/dist/index.js.map +1 -1
- package/dist/it-4RBJ7CH6.js +2 -0
- package/dist/it-4RBJ7CH6.js.map +1 -0
- package/dist/{panel-YIFL7JMG.js → panel-5ZGIFFJ4.js} +2 -2
- package/dist/{panel-YIFL7JMG.js.map → panel-5ZGIFFJ4.js.map} +1 -1
- package/dist/pt-VNIESRZN.js +2 -0
- package/dist/pt-VNIESRZN.js.map +1 -0
- package/dist/react.js +77 -66
- package/dist/react.js.map +1 -1
- package/dist/ru-O4MZAQXF.js +2 -0
- package/dist/ru-O4MZAQXF.js.map +1 -0
- package/dist/types.d.ts +20 -0
- package/package.json +1 -1
- package/dist/chunk-BC2J5J47.js.map +0 -1
- package/dist/de-QELS3SWK.js +0 -2
- package/dist/de-QELS3SWK.js.map +0 -1
- package/dist/es-CYTPFERY.js.map +0 -1
- package/dist/fr-4XLS426K.js +0 -2
- package/dist/fr-4XLS426K.js.map +0 -1
- package/dist/it-ZYXUTNWT.js +0 -2
- package/dist/it-ZYXUTNWT.js.map +0 -1
- package/dist/pt-W7J2A2O3.js +0 -2
- package/dist/pt-W7J2A2O3.js.map +0 -1
- package/dist/ru-AE6EJFY7.js +0 -2
- package/dist/ru-AE6EJFY7.js.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e={"panel.title":"Feedback","panel.ariaLabel":"Pannello feedback di Siteping","panel.feedbackList":"Elenco feedback","panel.loading":"Caricamento feedback","panel.close":"Chiudi pannello","panel.deleteAll":"Elimina tutto","panel.deleteAllConfirmTitle":"Elimina tutto","panel.deleteAllConfirmMessage":"Eliminare tutti i feedback per questo progetto? Questa azione non pu\xF2 essere annullata.","panel.search":"Cerca...","panel.searchAria":"Cerca feedback","panel.filterAll":"Tutti","panel.loadError":"Caricamento non riuscito","panel.retry":"Riprova","panel.empty":"Nessun feedback ancora","panel.showMore":"Mostra di pi\xF9","panel.showLess":"Mostra meno","panel.resolve":"Risolvi","panel.reopen":"Riapri","panel.delete":"Elimina","panel.cancel":"Annulla","panel.confirmDelete":"Elimina","panel.loadMore":"Carica altro ({remaining} rimanenti)","panel.statusAll":"Tutti","panel.statusOpen":"Aperto","panel.statusResolved":"Risolto","panel.statusInProgress":"In corso","panel.statusWontFix":"Non verr\xE0 corretto","type.label":"Tipo","type.question":"Domanda","type.change":"Modifica","type.bug":"Bug","type.other":"Altro","status.label":"Stato","scope.label":"Ambito","scope.thisPage":"Questa pagina","scope.thisType":"Questo tipo","scope.all":"Tutte le pagine","fab.aria":"Siteping \u2014 Menu feedback","fab.messages":"Mostra barra laterale","fab.annotate":"Crea nuova annotazione","fab.annotations":"Mostra o nascondi i marcatori","annotator.instruction":"Disegna un rettangolo sull'area da commentare","annotator.instantInstruction":"Commenta il punto selezionato","annotator.cancel":"Annulla","popup.ariaLabel":"Modulo feedback","popup.placeholder":"Descrivi il tuo feedback...","popup.textareaAria":"Messaggio di feedback","popup.submitHintMac":"\u2318+Invio per inviare","popup.submitHintOther":"Ctrl+Invio per inviare","popup.cancel":"Annulla","popup.submit":"Invia","identity.title":"Identificati","identity.nameLabel":"Nome","identity.namePlaceholder":"Il tuo nome","identity.emailLabel":"Email","identity.emailPlaceholder":"tua@email.com","identity.cancel":"Annulla","identity.submit":"Continua","marker.approximate":"Posizione approssimativa (confidenza: {confidence}%)","marker.aria":"Feedback #{number}: {type} \u2014 {message}","marker.count":"{count} marcatori di feedback visualizzati","fab.badge":"{count} feedback non risolti","feedback.sent.confirmation":"Feedback inviato con successo","feedback.error.message":"Invio del feedback non riuscito","feedback.deleted.confirmation":"Feedback eliminato","badge.count":"{count} feedback non risolti","bulk.selectAll":"Seleziona tutto","bulk.selected":"{count} selezionati","bulk.resolve":"Risolvi","bulk.delete":"Elimina","bulk.deselect":"Deseleziona","sort.newest":"Pi\xF9 recenti","sort.oldest":"Pi\xF9 vecchi","sort.byType":"Per tipo","sort.openFirst":"Aperti prima","sort.label":"Ordina","group.byPage":"Per pagina","group.feedbacks":"{count} feedback","stats.open":"Aperti","stats.resolved":"Risolti","stats.bugs":"Bug","stats.progress":"{percent}% risolti","detail.back":"Indietro","detail.title":"Feedback #{number}","detail.status":"Stato","detail.message":"Messaggio","detail.screenshot":"Schermata","detail.screenshotAlt":"Schermata dell'area annotata","detail.metadata":"Dettagli","detail.annotation":"Annotazione","detail.page":"Pagina","detail.author":"Autore","detail.date":"Creato","detail.viewport":"Viewport","detail.browser":"Browser","detail.resolvedAt":"Risolto il","detail.closedAt":"Chiuso il","detail.goToAnnotation":"Vai all'annotazione","detail.element":"Elemento","detail.selector":"Selettore","detail.position":"Posizione","detail.resolve":"Risolvi","detail.reopen":"Riapri","detail.delete":"Elimina","detail.diagnostics":"Diagnostica","detail.diagnostics.console":"Console","detail.diagnostics.network":"Rete fallita","detail.diagnostics.expand":"Mostra diagnostica","detail.diagnostics.collapse":"Nascondi diagnostica","detail.diagnostics.noEntries":"Nessuna voce","shortcuts.title":"Scorciatoie da tastiera","shortcuts.navigate":"Naviga i feedback","shortcuts.resolve":"Risolvi / Riapri","shortcuts.delete":"Elimina","shortcuts.search":"Cerca","shortcuts.select":"Attiva selezione","shortcuts.help":"Mostra scorciatoie","shortcuts.close":"Chiudi","shortcuts.hint":"Scorciatoie da tastiera","export.label":"Esporta","export.csv":"Esporta CSV","export.json":"Esporta JSON"};export{e as it};//# sourceMappingURL=it-4RBJ7CH6.js.map
|
|
2
|
+
//# sourceMappingURL=it-4RBJ7CH6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/i18n/it.ts"],"names":["it"],"mappings":"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","file":"it-4RBJ7CH6.js","sourcesContent":["import type { Translations } from \"./types.js\";\n\n/** Italian translations (it-IT). */\nexport const it: Translations = {\n // Panel\n \"panel.title\": \"Feedback\",\n \"panel.ariaLabel\": \"Pannello feedback di Siteping\",\n \"panel.feedbackList\": \"Elenco feedback\",\n \"panel.loading\": \"Caricamento feedback\",\n \"panel.close\": \"Chiudi pannello\",\n \"panel.deleteAll\": \"Elimina tutto\",\n \"panel.deleteAllConfirmTitle\": \"Elimina tutto\",\n \"panel.deleteAllConfirmMessage\":\n \"Eliminare tutti i feedback per questo progetto? Questa azione non può essere annullata.\",\n \"panel.search\": \"Cerca...\",\n \"panel.searchAria\": \"Cerca feedback\",\n \"panel.filterAll\": \"Tutti\",\n \"panel.loadError\": \"Caricamento non riuscito\",\n \"panel.retry\": \"Riprova\",\n \"panel.empty\": \"Nessun feedback ancora\",\n \"panel.showMore\": \"Mostra di più\",\n \"panel.showLess\": \"Mostra meno\",\n \"panel.resolve\": \"Risolvi\",\n \"panel.reopen\": \"Riapri\",\n \"panel.delete\": \"Elimina\",\n \"panel.cancel\": \"Annulla\",\n \"panel.confirmDelete\": \"Elimina\",\n \"panel.loadMore\": \"Carica altro ({remaining} rimanenti)\",\n\n // Status filter labels\n \"panel.statusAll\": \"Tutti\",\n \"panel.statusOpen\": \"Aperto\",\n \"panel.statusResolved\": \"Risolto\",\n \"panel.statusInProgress\": \"In corso\",\n \"panel.statusWontFix\": \"Non verrà corretto\",\n\n // Feedback type labels\n \"type.label\": \"Tipo\",\n \"type.question\": \"Domanda\",\n \"type.change\": \"Modifica\",\n \"type.bug\": \"Bug\",\n \"type.other\": \"Altro\",\n\n // Status segmented control label\n \"status.label\": \"Stato\",\n\n // Page scope segmented control\n \"scope.label\": \"Ambito\",\n \"scope.thisPage\": \"Questa pagina\",\n \"scope.thisType\": \"Questo tipo\",\n \"scope.all\": \"Tutte le pagine\",\n\n // FAB menu\n \"fab.aria\": \"Siteping — Menu feedback\",\n \"fab.messages\": \"Mostra barra laterale\",\n \"fab.annotate\": \"Crea nuova annotazione\",\n \"fab.annotations\": \"Mostra o nascondi i marcatori\",\n\n // Annotator\n \"annotator.instruction\": \"Disegna un rettangolo sull'area da commentare\",\n \"annotator.instantInstruction\": \"Commenta il punto selezionato\",\n \"annotator.cancel\": \"Annulla\",\n\n // Popup\n \"popup.ariaLabel\": \"Modulo feedback\",\n \"popup.placeholder\": \"Descrivi il tuo feedback...\",\n \"popup.textareaAria\": \"Messaggio di feedback\",\n \"popup.submitHintMac\": \"⌘+Invio per inviare\",\n \"popup.submitHintOther\": \"Ctrl+Invio per inviare\",\n \"popup.cancel\": \"Annulla\",\n \"popup.submit\": \"Invia\",\n\n // Identity modal\n \"identity.title\": \"Identificati\",\n \"identity.nameLabel\": \"Nome\",\n \"identity.namePlaceholder\": \"Il tuo nome\",\n \"identity.emailLabel\": \"Email\",\n \"identity.emailPlaceholder\": \"tua@email.com\",\n \"identity.cancel\": \"Annulla\",\n \"identity.submit\": \"Continua\",\n\n // Markers\n \"marker.approximate\": \"Posizione approssimativa (confidenza: {confidence}%)\",\n \"marker.aria\": \"Feedback #{number}: {type} — {message}\",\n \"marker.count\": \"{count} marcatori di feedback visualizzati\",\n\n // FAB badge\n \"fab.badge\": \"{count} feedback non risolti\",\n\n // Accessibility — screen reader announcements\n \"feedback.sent.confirmation\": \"Feedback inviato con successo\",\n \"feedback.error.message\": \"Invio del feedback non riuscito\",\n \"feedback.deleted.confirmation\": \"Feedback eliminato\",\n\n // Badge\n \"badge.count\": \"{count} feedback non risolti\",\n\n // Bulk actions toolbar\n \"bulk.selectAll\": \"Seleziona tutto\",\n \"bulk.selected\": \"{count} selezionati\",\n \"bulk.resolve\": \"Risolvi\",\n \"bulk.delete\": \"Elimina\",\n \"bulk.deselect\": \"Deseleziona\",\n\n // Sort and group controls\n \"sort.newest\": \"Più recenti\",\n \"sort.oldest\": \"Più vecchi\",\n \"sort.byType\": \"Per tipo\",\n \"sort.openFirst\": \"Aperti prima\",\n \"sort.label\": \"Ordina\",\n \"group.byPage\": \"Per pagina\",\n \"group.feedbacks\": \"{count} feedback\",\n\n // Stats bar\n \"stats.open\": \"Aperti\",\n \"stats.resolved\": \"Risolti\",\n \"stats.bugs\": \"Bug\",\n \"stats.progress\": \"{percent}% risolti\",\n\n // Detail view\n \"detail.back\": \"Indietro\",\n \"detail.title\": \"Feedback #{number}\",\n \"detail.status\": \"Stato\",\n \"detail.message\": \"Messaggio\",\n \"detail.screenshot\": \"Schermata\",\n \"detail.screenshotAlt\": \"Schermata dell'area annotata\",\n \"detail.metadata\": \"Dettagli\",\n \"detail.annotation\": \"Annotazione\",\n \"detail.page\": \"Pagina\",\n \"detail.author\": \"Autore\",\n \"detail.date\": \"Creato\",\n \"detail.viewport\": \"Viewport\",\n \"detail.browser\": \"Browser\",\n \"detail.resolvedAt\": \"Risolto il\",\n \"detail.closedAt\": \"Chiuso il\",\n \"detail.goToAnnotation\": \"Vai all'annotazione\",\n \"detail.element\": \"Elemento\",\n \"detail.selector\": \"Selettore\",\n \"detail.position\": \"Posizione\",\n \"detail.resolve\": \"Risolvi\",\n \"detail.reopen\": \"Riapri\",\n \"detail.delete\": \"Elimina\",\n \"detail.diagnostics\": \"Diagnostica\",\n \"detail.diagnostics.console\": \"Console\",\n \"detail.diagnostics.network\": \"Rete fallita\",\n \"detail.diagnostics.expand\": \"Mostra diagnostica\",\n \"detail.diagnostics.collapse\": \"Nascondi diagnostica\",\n \"detail.diagnostics.noEntries\": \"Nessuna voce\",\n\n // Keyboard shortcuts overlay\n \"shortcuts.title\": \"Scorciatoie da tastiera\",\n \"shortcuts.navigate\": \"Naviga i feedback\",\n \"shortcuts.resolve\": \"Risolvi / Riapri\",\n \"shortcuts.delete\": \"Elimina\",\n \"shortcuts.search\": \"Cerca\",\n \"shortcuts.select\": \"Attiva selezione\",\n \"shortcuts.help\": \"Mostra scorciatoie\",\n \"shortcuts.close\": \"Chiudi\",\n \"shortcuts.hint\": \"Scorciatoie da tastiera\",\n\n // Export controls\n \"export.label\": \"Esporta\",\n \"export.csv\": \"Esporta CSV\",\n \"export.json\": \"Esporta JSON\",\n};\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {H,J,b,c,a,i,t,Q,$,j,Y,S,U,da,aa,ba,I,d,V,W,X,x,N,A,z,y,O,e,s,k,p,l,m,n,o,r,q}from'./chunk-BC2J5J47.js';var M=class{element;current;opts;onChange;datasetKey;constructor(e){this.opts=e.options,this.current=e.value,this.onChange=e.onChange,this.datasetKey=e.datasetKey,this.element=b("div",{class:`sp-segmented${e.extraClass?` ${e.extraClass}`:""}`,role:"radiogroup"}),this.element.setAttribute("aria-label",e.ariaLabel);for(let t of this.opts){let s=document.createElement("button");s.type="button",s.className=e.modifierPrefix!==void 0?`sp-segmented__btn ${e.modifierPrefix}${t.value}`:"sp-segmented__btn",s.dataset[this.datasetKey]=t.value,s.setAttribute("role","radio");let n=this.current===t.value;if(s.setAttribute("aria-checked",String(n)),s.tabIndex=n?0:-1,n&&s.classList.add("sp-segmented__btn--active"),t.color&&s.style.setProperty("--sp-chip-color",t.color),t.bg&&s.style.setProperty("--sp-chip-bg",t.bg),t.icon){let a$1=b("span",{class:"sp-segmented__icon"});a$1.appendChild(a(t.icon)),s.appendChild(a$1);}let o=b("span",{class:"sp-segmented__label"});c(o,t.label),s.appendChild(o),s.addEventListener("click",()=>this.select(t.value)),s.addEventListener("keydown",a=>this.handleKey(a,t.value)),this.element.appendChild(s);}}select(e){this.current=e,this.syncSelection(),this.onChange(e);}syncSelection(){let e=this.element.querySelectorAll(".sp-segmented__btn");for(let t of e){let s=t.dataset[this.datasetKey]===this.current;t.classList.toggle("sp-segmented__btn--active",s),t.setAttribute("aria-checked",String(s)),t.tabIndex=s?0:-1;}}setOptionVisible(e,t){let s=this.element.querySelector(`[data-${this.kebabKey()}="${e}"]`);return s?(s.style.display=t?"":"none",true):false}get value(){return this.current}focusOption(e){this.element.querySelector(`[data-${this.kebabKey()}="${e}"]`)?.focus();}handleKey(e,t){let s=this.opts.map(d=>d.value).filter(d=>{let c=this.element.querySelector(`[data-${this.kebabKey()}="${d}"]`);return c!==null&&c.style.display!=="none"}),n=s.indexOf(t);if(n<0)return;let o;switch(e.key){case "ArrowLeft":o=(n-1+s.length)%s.length;break;case "ArrowRight":o=(n+1)%s.length;break;case "Home":o=0;break;case "End":o=s.length-1;break;default:return}e.preventDefault();let a=s[o];a!==void 0&&(this.select(a),this.focusOption(a));}kebabKey(){return this.datasetKey.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}};var be=H.filter(O=>!J(O)),he=class{constructor(e,t$1,s,n,o,a$1,d,c$1,b$1){this.colors=t$1;this.bus=s;this.client=n;this.projectName=o;this.markers=a$1;this.t=d;this.locale=c$1;this.shadowRoot=e,this.getScope=b$1?.getScope??(()=>({url:window.location.pathname,urlPattern:null})),this.scopeAnnotationsByUrl=b$1?.scopeAnnotationsByUrl??true,this.root=b("div",{class:"sp-panel"}),this.root.setAttribute("role","complementary"),this.root.setAttribute("aria-label",this.t("panel.ariaLabel")),this.root.setAttribute("aria-hidden","true");let m=b("div",{class:"sp-panel-header"}),p=b("span",{class:"sp-panel-title"});c(p,this.t("panel.title")),this.closeBtn=document.createElement("button"),this.closeBtn.className="sp-panel-close",this.closeBtn.setAttribute("aria-label",this.t("panel.close")),this.closeBtn.appendChild(a(i)),this.closeBtn.addEventListener("click",()=>this.close()),this.deleteAllBtn=document.createElement("button"),this.deleteAllBtn.className="sp-btn-delete-all",this.deleteAllBtn.setAttribute("aria-label",this.t("panel.deleteAll")),this.deleteAllBtn.appendChild(a(t));let y=document.createElement("span");c(y,` ${this.t("panel.deleteAll")}`),this.deleteAllBtn.appendChild(y),this.deleteAllBtn.addEventListener("click",()=>this.confirmDeleteAll()),this.exportBtn=new Q(t$1,()=>this.feedbacks,this.t);let C=b("div",{class:"sp-panel-header-right"});C.appendChild(this.exportBtn.element),C.appendChild(this.deleteAllBtn),C.appendChild(this.closeBtn),m.appendChild(p),m.appendChild(C),this.stats=new $(t$1,this.t);let k=b("div",{class:"sp-filters"}),T=b("div",{class:"sp-search-wrap"}),f=a(j);f.setAttribute("class","sp-search-icon"),this.searchInput=document.createElement("input"),this.searchInput.type="text",this.searchInput.className="sp-search",this.searchInput.placeholder=this.t("panel.search"),this.searchInput.setAttribute("aria-label",this.t("panel.searchAria")),this.searchInput.addEventListener("input",()=>{this.searchTimeout&&clearTimeout(this.searchTimeout),this.searchTimeout=setTimeout(()=>this.loadFeedbacks().catch(()=>{}),200);}),T.appendChild(f),T.appendChild(this.searchInput);let L=b("div",{class:"sp-filter-bar"});L.appendChild(this.buildTypeDropdown()),L.appendChild(this.buildStatusSegmented()),L.appendChild(this.buildScopeSegmented()),this.sortControls=new Y(t$1,()=>this.renderList(),this.t),k.appendChild(T),k.appendChild(L),k.appendChild(this.sortControls.element),this.listContainer=b("div",{class:"sp-list"}),this.listContainer.setAttribute("role","list"),this.listContainer.setAttribute("aria-label",this.t("panel.feedbackList")),this.bulk=new S(t$1,{onResolve:i=>this.bulkResolve(i),onDelete:i=>this.bulkDelete(i)},this.t),this.bulk.setListContainer(this.listContainer),this.detail=new U(t$1,{onBack:()=>this.detail.hide(),onResolve:async i=>{try{let r=!J(i.status);await this.client.resolveFeedback(i.id,r),await this.loadFeedbacks(),this.detail.hide();}catch(r){throw this.bus.emit("feedback:error",r instanceof Error?r:new Error(String(r))),r}},onDelete:async i=>{try{await this.client.deleteFeedback(i.id),this.bus.emit("feedback:deleted",i.id),await this.loadFeedbacks(),this.detail.hide();}catch(r){throw this.bus.emit("feedback:error",r instanceof Error?r:new Error(String(r))),r}},onGoToAnnotation:i=>{if(i.annotations.length>0){let r=i.annotations[0];if(!r)return;window.scrollTo({left:r.scrollX,top:r.scrollY,behavior:"smooth"}),this.markers.pinHighlight(i);}}},this.t,c$1),this.shortcuts=new da(t$1,{onNavigate:i=>{let r=aa(this.listContainer);ba(this.listContainer,i==="down"?r+1:r-1);},onResolve:()=>{let i=this.getFocusedFeedback();if(i&&!this.pendingMutations.has(i.id)){let u=this.listContainer.querySelector(`[data-feedback-id="${CSS.escape(i.id)}"]`)?.querySelector('[data-action="resolve"]');u&&this.toggleResolve(i,u).catch(()=>{});}},onDelete:()=>{let i=this.getFocusedFeedback();if(i&&!this.pendingMutations.has(i.id)){let u=this.listContainer.querySelector(`[data-feedback-id="${CSS.escape(i.id)}"]`)?.querySelector('[data-action="delete"]');u&&this.deleteFeedback(i,u).catch(()=>{});}},onFocusSearch:()=>this.searchInput.focus(),onToggleSelect:()=>{let i=this.getFocusedFeedback();i&&this.bulk.toggle(i.id);}},this.t),this.root.appendChild(m),this.root.appendChild(this.stats.element),this.root.appendChild(k),this.root.appendChild(this.listContainer),this.root.appendChild(this.bulk.barElement),this.root.appendChild(this.detail.element),this.root.appendChild(this.shortcuts.helpOverlay),this.root.appendChild(this.shortcuts.hintButton),e.appendChild(this.root),this.onListClick=i=>{let r=i.target;if(r.closest(".sp-bulk-checkbox"))return;let u=r.closest("[data-action]");if(u){i.stopPropagation();let A=u.closest(".sp-card");if(!A)return;let w=A.dataset.feedbackId,g=this.feedbacks.find(E=>E.id===w);if(!g)return;let B=u.dataset.action;if(B==="expand"){let E=A.querySelector(".sp-card-message");if(!E)return;let R=E.classList.toggle("sp-card-message--expanded");c(u,R?this.t("panel.showLess"):this.t("panel.showMore")),u.setAttribute("aria-expanded",String(R));}else if(B==="resolve"){if(this.pendingMutations.has(g.id))return;let E=u;this.toggleResolve(g,E).catch(()=>{});}else if(B==="delete"){if(this.pendingMutations.has(g.id))return;let E=u;this.deleteFeedback(g,E).catch(()=>{});}return}let v=r.closest(".sp-card");if(v){let A=v.dataset.feedbackId,w=this.feedbacks.find(g=>g.id===A);if(w){let g=this.feedbacks.indexOf(w)+1;this.detail.show(w,g);}}},this.listContainer.addEventListener("click",this.onListClick),this.onListKeydown=i=>{let r=i;if(r.key!=="Enter"&&r.key!==" ")return;let u=r.target,v=u.closest(".sp-card");if(!v||u!==v)return;r.preventDefault();let A=v.dataset.feedbackId,w=this.feedbacks.find(g=>g.id===A);if(w){let g=this.feedbacks.indexOf(w)+1;this.detail.show(w,g);}},this.listContainer.addEventListener("keydown",this.onListKeydown),this.onListMouseover=i=>{let u=i.target.closest(".sp-card");if(!u)return;let v=u.dataset.feedbackId;v&&this.markers.highlight(v);},this.listContainer.addEventListener("mouseover",this.onListMouseover),this.onListMouseout=i=>{let r=i.relatedTarget;r&&this.listContainer.contains(r)||this.markers.highlight("");},this.listContainer.addEventListener("mouseout",this.onListMouseout),this.bus.on("panel:toggle",i=>{i?this.open():this.close();}),e.addEventListener("keydown",i=>{let r=i;if(r.key==="Escape"&&this.isOpen){if(this.detail.isVisible){this.detail.hide();return}this.close();return}if(r.key==="Tab"&&this.isOpen){let u=B=>{let E=B;for(;E&&E!==this.root;){if(E.style.display==="none")return false;E=E.parentElement;}return true},v=Array.from(this.root.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')).filter(B=>u(B)&&!B.hasAttribute("disabled"));if(v.length===0)return;let A=v[0],w=v[v.length-1];if(!A||!w)return;let g=e.activeElement;r.shiftKey&&g===A?(r.preventDefault(),w.focus()):!r.shiftKey&&g===w&&(r.preventDefault(),A.focus());}}),this.onMarkerClick=(i=>{this.scrollToFeedback(i.detail.feedbackId);}),document.addEventListener("sp-marker-click",this.onMarkerClick);}colors;bus;client;projectName;markers;t;locale;root;listContainer;searchInput;closeBtn;deleteAllBtn;activeFilters=new Set(["all"]);typeDropdownBtn;typeDropdownContainer;typeDropdownMenu=null;typeDropdownOutsideHandler=null;statusSegmented;typeOptions;feedbacks=[];currentPage=1;totalFeedbacks=0;isLoadingMore=false;isOpen=false;searchTimeout=null;loadController=null;pendingMutations=new Set;stats;sortControls;bulk;exportBtn;shortcuts;detail;shadowRoot;getScope;scopeAnnotationsByUrl;scopeSegmented;initialScopeFilter="this";onMarkerClick;onListClick;onListKeydown;onListMouseover;onListMouseout;async open(){this.isOpen||(this.isOpen=true,this.root.classList.add("sp-panel--open"),this.root.setAttribute("aria-hidden","false"),this.bus.emit("open"),this.shortcuts.enable(this.shadowRoot),await this.loadFeedbacks(),requestAnimationFrame(()=>{this.searchInput?this.searchInput.focus():this.closeBtn.focus();}));}close(){if(!this.isOpen)return;this.isOpen=false,this.root.classList.remove("sp-panel--open"),this.root.setAttribute("aria-hidden","true"),this.bus.emit("close"),this.shortcuts.disable(),this.detail.hide(),this.root.getRootNode().querySelector(".sp-fab")?.focus();}showLoading(){this.listContainer.replaceChildren();let e=b("div",{class:"sp-loading"});e.setAttribute("role","status"),e.setAttribute("aria-live","polite"),e.setAttribute("aria-label",this.t("panel.loading"));let t=b("div",{class:"sp-spinner"});e.appendChild(t),this.listContainer.appendChild(e);}showError(){this.listContainer.replaceChildren();let e=b("div",{class:"sp-empty"});e.setAttribute("role","status"),e.setAttribute("aria-live","polite");let t=b("div",{class:"sp-empty-text"});c(t,this.t("panel.loadError"));let s=document.createElement("button");s.className="sp-btn-ghost",s.style.marginTop="8px",c(s,this.t("panel.retry")),s.addEventListener("click",()=>this.loadFeedbacks().catch(()=>{})),e.appendChild(t),e.appendChild(s),this.listContainer.appendChild(e);}statusBucket(e){if(e!=="all")return J(e)?I:be}async loadFeedbacks(){this.loadController?.abort(),this.loadController=new AbortController;let{signal:e}=this.loadController;this.currentPage=1;let t=this.searchInput.value.trim()||void 0,s=this.activeFilters.has("all")?void 0:Array.from(this.activeFilters)[0],n=this.statusBucket(this.statusSegmented.value),o=this.getScope();this.syncScopeAvailability();let a=this.scopeSegmented.value,d={page:1,limit:20};s&&(d.type=s),n&&(d.statuses=n),t&&(d.search=t),a==="this"?d.url=o.url:a==="template"&&o.urlPattern&&(d.urlPattern=o.urlPattern);let c=this.feedbacks.length>0;c||this.showLoading();try{let{feedbacks:b,total:m}=await this.client.getFeedbacks(this.projectName,d);if(e.aborted)return;this.feedbacks=b,this.totalFeedbacks=m,this.stats.update(b,m),this.bulk.reset(),this.renderList();let p=this.scopeAnnotationsByUrl?b.filter(y=>y.url===o.url):b;this.markers.render(p);}catch(b){if(e.aborted)return;c||this.showError(),this.bus.emit("feedback:error",b instanceof Error?b:new Error(String(b)));}}async loadMoreFeedbacks(){if(this.isLoadingMore)return;this.isLoadingMore=true;let e=this.loadController,t=this.currentPage+1,s=this.searchInput.value.trim()||void 0,n=this.activeFilters.has("all")?void 0:Array.from(this.activeFilters)[0],o=this.statusBucket(this.statusSegmented.value),a=this.getScope(),d$1=this.scopeSegmented.value,c={page:t,limit:20};n&&(c.type=n),o&&(c.statuses=o),s&&(c.search=s),d$1==="this"?c.url=a.url:d$1==="template"&&a.urlPattern&&(c.urlPattern=a.urlPattern);let b=this.listContainer.querySelector(".sp-btn-load-more"),m;b&&(m=d(b));try{let{feedbacks:p,total:y}=await this.client.getFeedbacks(this.projectName,c);if(e!==this.loadController)return;this.currentPage=t,this.totalFeedbacks=y,this.feedbacks=[...this.feedbacks,...p],this.stats.update(this.feedbacks,y),this.renderList();let C=this.scopeAnnotationsByUrl?this.feedbacks.filter(k=>k.url===a.url):this.feedbacks;this.markers.render(C);}catch(p){m&&m(),this.bus.emit("feedback:error",p instanceof Error?p:new Error(String(p)));}finally{this.isLoadingMore=false;}}renderList(){if(this.listContainer.replaceChildren(),this.feedbacks.length===0){let o=b("div",{class:"sp-empty"});o.setAttribute("role","status"),o.setAttribute("aria-live","polite");let a=b("div",{class:"sp-empty-text"});c(a,this.t("panel.empty")),o.appendChild(a),this.listContainer.appendChild(o);return}let e=V(this.feedbacks,this.sortControls.sortMode),t=e.map(o=>o.id),s=this.bulk.createSelectAllBar(t,this.t("bulk.selectAll"));if(this.listContainer.appendChild(s),this.sortControls.groupByPage){let o=W(e),a=0;for(let[d,c]of o){let b$1=X(d,c.length,this.colors);this.listContainer.appendChild(b$1);let m=b("div",{class:"sp-group-content"});for(let p of c){let y=this.createCard(p,a+1);y.style.setProperty("--sp-card-i",String(a)),m.appendChild(y),a++;}this.listContainer.appendChild(m);}}else e.forEach((o,a)=>{let d=this.createCard(o,a+1);d.style.setProperty("--sp-card-i",String(a)),this.listContainer.appendChild(d);});let n=this.totalFeedbacks-this.feedbacks.length;if(n>0){let o=b("div",{class:"sp-load-more-wrap"}),a=document.createElement("button");a.className="sp-btn-ghost sp-btn-load-more",c(a,this.t("panel.loadMore").replace("{remaining}",String(n))),a.addEventListener("click",()=>this.loadMoreFeedbacks().catch(()=>{})),o.appendChild(a),this.listContainer.appendChild(o);}}createCard(e$1,t$1){let s$1=J(e$1.status),n=x(e$1.type,this.colors),o=b("div",{class:`sp-card ${s$1?"sp-card--resolved":""}`});o.setAttribute("role","listitem"),o.setAttribute("tabindex","0"),o.setAttribute("aria-label",`Feedback #${t$1}: ${N(e$1.type,this.t)} \u2014 ${e$1.message.slice(0,80)}`),o.dataset.feedbackId=e$1.id;let a$1=b("div",{class:"sp-card-bar"});a$1.style.background=s$1?"#9ca3af":n;let d=b("div",{class:"sp-card-body"}),c$1=b("div",{class:"sp-card-header"}),b$1=this.bulk.createCheckbox(e$1.id);c$1.appendChild(b$1);let m=b("span",{class:"sp-card-number"});c(m,`#${t$1}`);let p=b("span",{class:"sp-badge"}),y$1=A(e$1.type,this.colors);p.style.background=y$1,p.style.color=n,c(p,N(e$1.type,this.t));let C=b("span",{class:"sp-badge sp-badge--status"});C.dataset.status=e$1.status,C.style.background=z(e$1.status,this.colors),C.style.color=y(e$1.status,this.colors),c(C,O(e$1.status,this.t));let k$1=b("span",{class:"sp-card-date"});c(k$1,e(e$1.createdAt,this.locale)),c$1.appendChild(m),c$1.appendChild(p),c$1.appendChild(C),c$1.appendChild(k$1);let T=b("div",{class:"sp-card-message"});c(T,e$1.message);let f=document.createElement("button");f.className="sp-card-expand",f.dataset.action="expand",c(f,this.t("panel.showMore")),f.style.display="none",f.setAttribute("aria-expanded","false"),requestAnimationFrame(()=>{T.scrollHeight>T.clientHeight&&(f.style.display="block");});let L=b("div",{class:"sp-card-footer"}),i=document.createElement("button");if(i.className="sp-btn-resolve",i.dataset.action="resolve",s$1){i.appendChild(a(s));let v=document.createElement("span");c(v,` ${this.t("panel.reopen")}`),i.appendChild(v);}else {i.appendChild(a(k));let v=document.createElement("span");c(v,` ${this.t("panel.resolve")}`),i.appendChild(v);}let r=document.createElement("button");r.className="sp-btn-delete",r.dataset.action="delete",r.appendChild(a(t));let u=document.createElement("span");return c(u,` ${this.t("panel.delete")}`),r.appendChild(u),L.appendChild(i),L.appendChild(r),d.appendChild(c$1),d.appendChild(T),d.appendChild(f),d.appendChild(L),o.appendChild(a$1),o.appendChild(d),o}async bulkResolve(e){try{await Promise.all(e.map(t=>this.client.resolveFeedback(t,!0))),await this.loadFeedbacks();}catch(t){throw this.bus.emit("feedback:error",t instanceof Error?t:new Error(String(t))),t}}async bulkDelete(e){try{await Promise.all(e.map(t=>this.client.deleteFeedback(t)));for(let t of e)this.bus.emit("feedback:deleted",t);await this.loadFeedbacks();}catch(t){throw this.bus.emit("feedback:error",t instanceof Error?t:new Error(String(t))),t}}async confirmDeleteAll(){if(await this.showConfirmDialog(this.t("panel.deleteAllConfirmTitle"),this.t("panel.deleteAllConfirmMessage"))){this.deleteAllBtn.disabled=true;try{await this.client.deleteAllFeedbacks(this.projectName),this.bus.emit("feedback:all-deleted"),await this.loadFeedbacks();}catch(t){this.bus.emit("feedback:error",t instanceof Error?t:new Error(String(t)));}finally{this.deleteAllBtn.disabled=false;}}}showConfirmDialog(e,t){return new Promise(s=>{let n=b("div",{class:"sp-confirm-backdrop"}),o=`sp-confirm-title-${Date.now()}`,a=`sp-confirm-msg-${Date.now()}`,d=b("div",{class:"sp-confirm-dialog"});d.setAttribute("role","alertdialog"),d.setAttribute("aria-modal","true"),d.setAttribute("aria-labelledby",o),d.setAttribute("aria-describedby",a);let c$1=b("div",{class:"sp-confirm-title"});c$1.id=o,c(c$1,e);let b$1=b("div",{class:"sp-confirm-message"});b$1.id=a,c(b$1,t);let m=b("div",{class:"sp-confirm-actions"}),p=document.createElement("button");p.type="button",p.className="sp-btn-ghost",c(p,this.t("panel.cancel"));let y=document.createElement("button");y.type="button",y.className="sp-btn-danger",c(y,this.t("panel.confirmDelete"));let C=false,k=f=>{C||(C=true,n.removeEventListener("keydown",T),n.style.opacity="0",d.style.transform="translateY(8px) scale(0.97)",setTimeout(()=>{n.remove(),s(f);},200));},T=f=>{let L=f;if(L.key==="Escape"){k(false);return}L.key==="Tab"&&(L.preventDefault(),n.getRootNode().activeElement===p?y.focus():p.focus());};n.addEventListener("keydown",T),p.addEventListener("click",()=>k(false)),y.addEventListener("click",()=>k(true)),n.addEventListener("click",f=>{f.target===n&&k(false);}),m.appendChild(p),m.appendChild(y),d.appendChild(c$1),d.appendChild(b$1),d.appendChild(m),n.appendChild(d),this.root.getRootNode()instanceof ShadowRoot?this.root.getRootNode().appendChild(n):this.root.appendChild(n),requestAnimationFrame(()=>{n.style.opacity="1",d.style.transform="translateY(0) scale(1)",p.focus();});})}async deleteFeedback(e,t){this.pendingMutations.add(e.id);let s=d(t);try{await this.client.deleteFeedback(e.id),this.bus.emit("feedback:deleted",e.id),await this.loadFeedbacks();}catch(n){s(),this.bus.emit("feedback:error",n instanceof Error?n:new Error(String(n)));}finally{this.pendingMutations.delete(e.id);}}async toggleResolve(e,t){this.pendingMutations.add(e.id);let s=d(t);try{let n=!J(e.status);await this.client.resolveFeedback(e.id,n),await this.loadFeedbacks();}catch(n){s(),this.bus.emit("feedback:error",n instanceof Error?n:new Error(String(n)));}finally{this.pendingMutations.delete(e.id);}}buildTypeDropdown(){return this.typeOptions=[{value:"all",label:this.t("panel.filterAll"),icon:p,color:this.colors.accent,bg:this.colors.accentLight},{value:"question",label:this.t("type.question"),icon:l,color:this.colors.typeQuestion,bg:this.colors.typeQuestionBg},{value:"change",label:this.t("type.change"),icon:m,color:this.colors.typeChange,bg:this.colors.typeChangeBg},{value:"bug",label:this.t("type.bug"),icon:n,color:this.colors.typeBug,bg:this.colors.typeBugBg},{value:"other",label:this.t("type.other"),icon:o,color:this.colors.typeOther,bg:this.colors.typeOtherBg}],this.typeDropdownContainer=b("div",{class:"sp-filter-dropdown"}),this.typeDropdownBtn=document.createElement("button"),this.typeDropdownBtn.type="button",this.typeDropdownBtn.className="sp-filter-dropdown-btn",this.typeDropdownBtn.setAttribute("aria-haspopup","listbox"),this.typeDropdownBtn.setAttribute("aria-expanded","false"),this.renderTypeDropdownTrigger(),this.typeDropdownBtn.addEventListener("click",e=>{e.stopPropagation(),this.typeDropdownMenu?this.closeTypeDropdown():this.openTypeDropdown();}),this.typeDropdownContainer.appendChild(this.typeDropdownBtn),this.typeDropdownContainer}renderTypeDropdownTrigger(){let e=this.typeOptions.find(d=>this.activeFilters.has(d.value))??this.typeOptions[0];if(!e)return;this.typeDropdownBtn.replaceChildren(),this.typeDropdownBtn.style.setProperty("--sp-chip-color",e.color),this.typeDropdownBtn.style.setProperty("--sp-chip-bg",e.bg),this.typeDropdownBtn.dataset.filter=e.value,this.typeDropdownBtn.classList.toggle("sp-filter-dropdown-btn--filtered",e.value!=="all"),this.typeDropdownBtn.setAttribute("aria-label",`${this.t("type.label")}: ${e.label}`);let t=b("span",{class:"sp-filter-dropdown-btn__icon"});t.appendChild(a(e.icon)),this.typeDropdownBtn.appendChild(t);let s=b("span",{class:"sp-filter-dropdown-btn__label"}),n=b("span",{class:"sp-filter-dropdown-btn__prefix"});c(n,this.t("type.label"));let o=b("span",{class:"sp-filter-dropdown-btn__value"});c(o,e.label),s.appendChild(n),s.appendChild(o),this.typeDropdownBtn.appendChild(s);let a$1=b("span",{class:"sp-filter-dropdown-btn__chevron"});a$1.appendChild(a(r)),this.typeDropdownBtn.appendChild(a$1);}openTypeDropdown(){this.typeDropdownMenu=b("div",{class:"sp-filter-dropdown-menu"}),this.typeDropdownMenu.setAttribute("role","listbox"),this.typeDropdownMenu.setAttribute("aria-label",this.t("type.label")),this.typeDropdownBtn.setAttribute("aria-expanded","true");for(let e of this.typeOptions){let t=document.createElement("button");t.type="button";let s=this.activeFilters.has(e.value);t.className=`sp-filter-dropdown-option${s?" sp-filter-dropdown-option--active":""}`,t.style.setProperty("--sp-chip-color",e.color),t.style.setProperty("--sp-chip-bg",e.bg),t.dataset.filter=e.value,t.setAttribute("role","option"),t.setAttribute("aria-selected",String(s));let n=b("span",{class:"sp-filter-dropdown-option__icon"});n.appendChild(a(e.icon)),t.appendChild(n);let o=b("span",{class:"sp-filter-dropdown-option__label"});if(c(o,e.label),t.appendChild(o),s){let a$1=b("span",{class:"sp-filter-dropdown-option__check"});a$1.appendChild(a(k)),t.appendChild(a$1);}t.addEventListener("click",a=>{a.stopPropagation(),this.selectTypeFilter(e.value);}),this.typeDropdownMenu.appendChild(t);}this.typeDropdownContainer.appendChild(this.typeDropdownMenu),requestAnimationFrame(()=>{this.typeDropdownOutsideHandler=e=>{this.typeDropdownMenu&&!this.typeDropdownContainer.contains(e.target)&&this.closeTypeDropdown();},document.addEventListener("click",this.typeDropdownOutsideHandler,true);}),this.typeDropdownMenu.addEventListener("keydown",e=>{e.key==="Escape"&&(this.closeTypeDropdown(),this.typeDropdownBtn.focus());});}closeTypeDropdown(){this.typeDropdownMenu&&(this.typeDropdownMenu.remove(),this.typeDropdownMenu=null),this.typeDropdownBtn.setAttribute("aria-expanded","false"),this.typeDropdownOutsideHandler&&(document.removeEventListener("click",this.typeDropdownOutsideHandler,true),this.typeDropdownOutsideHandler=null);}selectTypeFilter(e){this.activeFilters.clear(),this.activeFilters.add(e),this.renderTypeDropdownTrigger(),this.closeTypeDropdown(),this.loadFeedbacks().catch(()=>{});}buildStatusSegmented(){return this.statusSegmented=new M({options:[{value:"all",label:this.t("panel.statusAll"),icon:p,color:this.colors.accent,bg:this.colors.accentLight},{value:"open",label:this.t("panel.statusOpen"),icon:q,color:this.colors.statusOpen,bg:this.colors.statusOpenBg},{value:"resolved",label:this.t("panel.statusResolved"),icon:k,color:this.colors.statusResolved,bg:this.colors.statusResolvedBg}],value:"all",onChange:()=>{this.loadFeedbacks().catch(()=>{});},ariaLabel:this.t("status.label"),datasetKey:"statusFilter",modifierPrefix:"sp-segmented__btn--"}),this.statusSegmented.element}buildScopeSegmented(){return this.scopeSegmented=new M({options:[{value:"this",label:this.t("scope.thisPage")},{value:"template",label:this.t("scope.thisType")},{value:"all",label:this.t("scope.all")}],value:this.initialScopeFilter,onChange:()=>{this.loadFeedbacks().catch(()=>{});},ariaLabel:this.t("scope.label"),datasetKey:"scopeFilter",modifierPrefix:"sp-segmented__btn--scope-",extraClass:"sp-segmented--scope"}),this.syncScopeAvailability(),this.scopeSegmented.element}syncScopeAvailability(){if(!this.scopeSegmented)return;let t=!!this.getScope().urlPattern;this.scopeSegmented.setOptionVisible("template",t),!t&&this.scopeSegmented.value==="template"&&this.scopeSegmented.select("this");}getFocusedFeedback(){let e=aa(this.listContainer);if(e<0)return;let t=this.listContainer.querySelectorAll(".sp-card")[e];if(t)return this.feedbacks.find(s=>s.id===t.dataset.feedbackId)}scrollToFeedback(e){let t=CSS.escape(e),s=this.listContainer.querySelector(`[data-feedback-id="${t}"]`);s&&(s.scrollIntoView({behavior:"smooth",block:"center"}),s.classList.add("sp-anim-flash"),s.addEventListener("animationend",()=>{s.classList.remove("sp-anim-flash");},{once:true}));}async refresh(){this.isOpen&&await this.loadFeedbacks();}get isCurrentlyOpen(){return this.isOpen}destroy(){this.loadController?.abort(),this.searchTimeout&&clearTimeout(this.searchTimeout),this.listContainer.removeEventListener("click",this.onListClick),this.listContainer.removeEventListener("keydown",this.onListKeydown),this.listContainer.removeEventListener("mouseover",this.onListMouseover),this.listContainer.removeEventListener("mouseout",this.onListMouseout),document.removeEventListener("sp-marker-click",this.onMarkerClick),this.closeTypeDropdown(),this.sortControls.destroy(),this.bulk.destroy(),this.exportBtn.destroy(),this.shortcuts.destroy(),this.detail.destroy(),this.root.remove();}};export{he as Panel};//# sourceMappingURL=panel-YIFL7JMG.js.map
|
|
2
|
-
//# sourceMappingURL=panel-
|
|
1
|
+
import {H,J,b,c,a,i,t,Q,$,j,Y,S,U,da,aa,ba,I,d,V,W,X,x,N,A,z,y,O,e,s,k,p,l,m,n,o,r,q}from'./chunk-GP6ZPMBW.js';var M=class{element;current;opts;onChange;datasetKey;constructor(e){this.opts=e.options,this.current=e.value,this.onChange=e.onChange,this.datasetKey=e.datasetKey,this.element=b("div",{class:`sp-segmented${e.extraClass?` ${e.extraClass}`:""}`,role:"radiogroup"}),this.element.setAttribute("aria-label",e.ariaLabel);for(let t of this.opts){let s=document.createElement("button");s.type="button",s.className=e.modifierPrefix!==void 0?`sp-segmented__btn ${e.modifierPrefix}${t.value}`:"sp-segmented__btn",s.dataset[this.datasetKey]=t.value,s.setAttribute("role","radio");let n=this.current===t.value;if(s.setAttribute("aria-checked",String(n)),s.tabIndex=n?0:-1,n&&s.classList.add("sp-segmented__btn--active"),t.color&&s.style.setProperty("--sp-chip-color",t.color),t.bg&&s.style.setProperty("--sp-chip-bg",t.bg),t.icon){let a$1=b("span",{class:"sp-segmented__icon"});a$1.appendChild(a(t.icon)),s.appendChild(a$1);}let o=b("span",{class:"sp-segmented__label"});c(o,t.label),s.appendChild(o),s.addEventListener("click",()=>this.select(t.value)),s.addEventListener("keydown",a=>this.handleKey(a,t.value)),this.element.appendChild(s);}}select(e){this.current=e,this.syncSelection(),this.onChange(e);}syncSelection(){let e=this.element.querySelectorAll(".sp-segmented__btn");for(let t of e){let s=t.dataset[this.datasetKey]===this.current;t.classList.toggle("sp-segmented__btn--active",s),t.setAttribute("aria-checked",String(s)),t.tabIndex=s?0:-1;}}setOptionVisible(e,t){let s=this.element.querySelector(`[data-${this.kebabKey()}="${e}"]`);return s?(s.style.display=t?"":"none",true):false}get value(){return this.current}focusOption(e){this.element.querySelector(`[data-${this.kebabKey()}="${e}"]`)?.focus();}handleKey(e,t){let s=this.opts.map(d=>d.value).filter(d=>{let c=this.element.querySelector(`[data-${this.kebabKey()}="${d}"]`);return c!==null&&c.style.display!=="none"}),n=s.indexOf(t);if(n<0)return;let o;switch(e.key){case "ArrowLeft":o=(n-1+s.length)%s.length;break;case "ArrowRight":o=(n+1)%s.length;break;case "Home":o=0;break;case "End":o=s.length-1;break;default:return}e.preventDefault();let a=s[o];a!==void 0&&(this.select(a),this.focusOption(a));}kebabKey(){return this.datasetKey.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}};var be=H.filter(O=>!J(O)),he=class{constructor(e,t$1,s,n,o,a$1,d,c$1,b$1){this.colors=t$1;this.bus=s;this.client=n;this.projectName=o;this.markers=a$1;this.t=d;this.locale=c$1;this.shadowRoot=e,this.getScope=b$1?.getScope??(()=>({url:window.location.pathname,urlPattern:null})),this.scopeAnnotationsByUrl=b$1?.scopeAnnotationsByUrl??true,this.root=b("div",{class:"sp-panel"}),this.root.setAttribute("role","complementary"),this.root.setAttribute("aria-label",this.t("panel.ariaLabel")),this.root.setAttribute("aria-hidden","true");let m=b("div",{class:"sp-panel-header"}),p=b("span",{class:"sp-panel-title"});c(p,this.t("panel.title")),this.closeBtn=document.createElement("button"),this.closeBtn.className="sp-panel-close",this.closeBtn.setAttribute("aria-label",this.t("panel.close")),this.closeBtn.appendChild(a(i)),this.closeBtn.addEventListener("click",()=>this.close()),this.deleteAllBtn=document.createElement("button"),this.deleteAllBtn.className="sp-btn-delete-all",this.deleteAllBtn.setAttribute("aria-label",this.t("panel.deleteAll")),this.deleteAllBtn.appendChild(a(t));let y=document.createElement("span");c(y,` ${this.t("panel.deleteAll")}`),this.deleteAllBtn.appendChild(y),this.deleteAllBtn.addEventListener("click",()=>this.confirmDeleteAll()),this.exportBtn=new Q(t$1,()=>this.feedbacks,this.t);let C=b("div",{class:"sp-panel-header-right"});C.appendChild(this.exportBtn.element),C.appendChild(this.deleteAllBtn),C.appendChild(this.closeBtn),m.appendChild(p),m.appendChild(C),this.stats=new $(t$1,this.t);let k=b("div",{class:"sp-filters"}),T=b("div",{class:"sp-search-wrap"}),f=a(j);f.setAttribute("class","sp-search-icon"),this.searchInput=document.createElement("input"),this.searchInput.type="text",this.searchInput.className="sp-search",this.searchInput.placeholder=this.t("panel.search"),this.searchInput.setAttribute("aria-label",this.t("panel.searchAria")),this.searchInput.addEventListener("input",()=>{this.searchTimeout&&clearTimeout(this.searchTimeout),this.searchTimeout=setTimeout(()=>this.loadFeedbacks().catch(()=>{}),200);}),T.appendChild(f),T.appendChild(this.searchInput);let L=b("div",{class:"sp-filter-bar"});L.appendChild(this.buildTypeDropdown()),L.appendChild(this.buildStatusSegmented()),L.appendChild(this.buildScopeSegmented()),this.sortControls=new Y(t$1,()=>this.renderList(),this.t),k.appendChild(T),k.appendChild(L),k.appendChild(this.sortControls.element),this.listContainer=b("div",{class:"sp-list"}),this.listContainer.setAttribute("role","list"),this.listContainer.setAttribute("aria-label",this.t("panel.feedbackList")),this.bulk=new S(t$1,{onResolve:i=>this.bulkResolve(i),onDelete:i=>this.bulkDelete(i)},this.t),this.bulk.setListContainer(this.listContainer),this.detail=new U(t$1,{onBack:()=>this.detail.hide(),onResolve:async i=>{try{let r=!J(i.status);await this.client.resolveFeedback(i.id,r),await this.loadFeedbacks(),this.detail.hide();}catch(r){throw this.bus.emit("feedback:error",r instanceof Error?r:new Error(String(r))),r}},onDelete:async i=>{try{await this.client.deleteFeedback(i.id),this.bus.emit("feedback:deleted",i.id),await this.loadFeedbacks(),this.detail.hide();}catch(r){throw this.bus.emit("feedback:error",r instanceof Error?r:new Error(String(r))),r}},onGoToAnnotation:i=>{if(i.annotations.length>0){let r=i.annotations[0];if(!r)return;window.scrollTo({left:r.scrollX,top:r.scrollY,behavior:"smooth"}),this.markers.pinHighlight(i);}}},this.t,c$1),this.shortcuts=new da(t$1,{onNavigate:i=>{let r=aa(this.listContainer);ba(this.listContainer,i==="down"?r+1:r-1);},onResolve:()=>{let i=this.getFocusedFeedback();if(i&&!this.pendingMutations.has(i.id)){let u=this.listContainer.querySelector(`[data-feedback-id="${CSS.escape(i.id)}"]`)?.querySelector('[data-action="resolve"]');u&&this.toggleResolve(i,u).catch(()=>{});}},onDelete:()=>{let i=this.getFocusedFeedback();if(i&&!this.pendingMutations.has(i.id)){let u=this.listContainer.querySelector(`[data-feedback-id="${CSS.escape(i.id)}"]`)?.querySelector('[data-action="delete"]');u&&this.deleteFeedback(i,u).catch(()=>{});}},onFocusSearch:()=>this.searchInput.focus(),onToggleSelect:()=>{let i=this.getFocusedFeedback();i&&this.bulk.toggle(i.id);}},this.t),this.root.appendChild(m),this.root.appendChild(this.stats.element),this.root.appendChild(k),this.root.appendChild(this.listContainer),this.root.appendChild(this.bulk.barElement),this.root.appendChild(this.detail.element),this.root.appendChild(this.shortcuts.helpOverlay),this.root.appendChild(this.shortcuts.hintButton),e.appendChild(this.root),this.onListClick=i=>{let r=i.target;if(r.closest(".sp-bulk-checkbox"))return;let u=r.closest("[data-action]");if(u){i.stopPropagation();let A=u.closest(".sp-card");if(!A)return;let w=A.dataset.feedbackId,g=this.feedbacks.find(E=>E.id===w);if(!g)return;let B=u.dataset.action;if(B==="expand"){let E=A.querySelector(".sp-card-message");if(!E)return;let R=E.classList.toggle("sp-card-message--expanded");c(u,R?this.t("panel.showLess"):this.t("panel.showMore")),u.setAttribute("aria-expanded",String(R));}else if(B==="resolve"){if(this.pendingMutations.has(g.id))return;let E=u;this.toggleResolve(g,E).catch(()=>{});}else if(B==="delete"){if(this.pendingMutations.has(g.id))return;let E=u;this.deleteFeedback(g,E).catch(()=>{});}return}let v=r.closest(".sp-card");if(v){let A=v.dataset.feedbackId,w=this.feedbacks.find(g=>g.id===A);if(w){let g=this.feedbacks.indexOf(w)+1;this.detail.show(w,g);}}},this.listContainer.addEventListener("click",this.onListClick),this.onListKeydown=i=>{let r=i;if(r.key!=="Enter"&&r.key!==" ")return;let u=r.target,v=u.closest(".sp-card");if(!v||u!==v)return;r.preventDefault();let A=v.dataset.feedbackId,w=this.feedbacks.find(g=>g.id===A);if(w){let g=this.feedbacks.indexOf(w)+1;this.detail.show(w,g);}},this.listContainer.addEventListener("keydown",this.onListKeydown),this.onListMouseover=i=>{let u=i.target.closest(".sp-card");if(!u)return;let v=u.dataset.feedbackId;v&&this.markers.highlight(v);},this.listContainer.addEventListener("mouseover",this.onListMouseover),this.onListMouseout=i=>{let r=i.relatedTarget;r&&this.listContainer.contains(r)||this.markers.highlight("");},this.listContainer.addEventListener("mouseout",this.onListMouseout),this.bus.on("panel:toggle",i=>{i?this.open():this.close();}),e.addEventListener("keydown",i=>{let r=i;if(r.key==="Escape"&&this.isOpen){if(this.detail.isVisible){this.detail.hide();return}this.close();return}if(r.key==="Tab"&&this.isOpen){let u=B=>{let E=B;for(;E&&E!==this.root;){if(E.style.display==="none")return false;E=E.parentElement;}return true},v=Array.from(this.root.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')).filter(B=>u(B)&&!B.hasAttribute("disabled"));if(v.length===0)return;let A=v[0],w=v[v.length-1];if(!A||!w)return;let g=e.activeElement;r.shiftKey&&g===A?(r.preventDefault(),w.focus()):!r.shiftKey&&g===w&&(r.preventDefault(),A.focus());}}),this.onMarkerClick=(i=>{this.scrollToFeedback(i.detail.feedbackId);}),document.addEventListener("sp-marker-click",this.onMarkerClick);}colors;bus;client;projectName;markers;t;locale;root;listContainer;searchInput;closeBtn;deleteAllBtn;activeFilters=new Set(["all"]);typeDropdownBtn;typeDropdownContainer;typeDropdownMenu=null;typeDropdownOutsideHandler=null;statusSegmented;typeOptions;feedbacks=[];currentPage=1;totalFeedbacks=0;isLoadingMore=false;isOpen=false;searchTimeout=null;loadController=null;pendingMutations=new Set;stats;sortControls;bulk;exportBtn;shortcuts;detail;shadowRoot;getScope;scopeAnnotationsByUrl;scopeSegmented;initialScopeFilter="this";onMarkerClick;onListClick;onListKeydown;onListMouseover;onListMouseout;async open(){this.isOpen||(this.isOpen=true,this.root.classList.add("sp-panel--open"),this.root.setAttribute("aria-hidden","false"),this.bus.emit("open"),this.shortcuts.enable(this.shadowRoot),await this.loadFeedbacks(),requestAnimationFrame(()=>{this.searchInput?this.searchInput.focus():this.closeBtn.focus();}));}close(){if(!this.isOpen)return;this.isOpen=false,this.root.classList.remove("sp-panel--open"),this.root.setAttribute("aria-hidden","true"),this.bus.emit("close"),this.shortcuts.disable(),this.detail.hide(),this.root.getRootNode().querySelector(".sp-fab")?.focus();}showLoading(){this.listContainer.replaceChildren();let e=b("div",{class:"sp-loading"});e.setAttribute("role","status"),e.setAttribute("aria-live","polite"),e.setAttribute("aria-label",this.t("panel.loading"));let t=b("div",{class:"sp-spinner"});e.appendChild(t),this.listContainer.appendChild(e);}showError(){this.listContainer.replaceChildren();let e=b("div",{class:"sp-empty"});e.setAttribute("role","status"),e.setAttribute("aria-live","polite");let t=b("div",{class:"sp-empty-text"});c(t,this.t("panel.loadError"));let s=document.createElement("button");s.className="sp-btn-ghost",s.style.marginTop="8px",c(s,this.t("panel.retry")),s.addEventListener("click",()=>this.loadFeedbacks().catch(()=>{})),e.appendChild(t),e.appendChild(s),this.listContainer.appendChild(e);}statusBucket(e){if(e!=="all")return J(e)?I:be}async loadFeedbacks(){this.loadController?.abort(),this.loadController=new AbortController;let{signal:e}=this.loadController;this.currentPage=1;let t=this.searchInput.value.trim()||void 0,s=this.activeFilters.has("all")?void 0:Array.from(this.activeFilters)[0],n=this.statusBucket(this.statusSegmented.value),o=this.getScope();this.syncScopeAvailability();let a=this.scopeSegmented.value,d={page:1,limit:20};s&&(d.type=s),n&&(d.statuses=n),t&&(d.search=t),a==="this"?d.url=o.url:a==="template"&&o.urlPattern&&(d.urlPattern=o.urlPattern);let c=this.feedbacks.length>0;c||this.showLoading();try{let{feedbacks:b,total:m}=await this.client.getFeedbacks(this.projectName,d);if(e.aborted)return;this.feedbacks=b,this.totalFeedbacks=m,this.stats.update(b,m),this.bulk.reset(),this.renderList();let p=this.scopeAnnotationsByUrl?b.filter(y=>y.url===o.url):b;this.markers.render(p);}catch(b){if(e.aborted)return;c||this.showError(),this.bus.emit("feedback:error",b instanceof Error?b:new Error(String(b)));}}async loadMoreFeedbacks(){if(this.isLoadingMore)return;this.isLoadingMore=true;let e=this.loadController,t=this.currentPage+1,s=this.searchInput.value.trim()||void 0,n=this.activeFilters.has("all")?void 0:Array.from(this.activeFilters)[0],o=this.statusBucket(this.statusSegmented.value),a=this.getScope(),d$1=this.scopeSegmented.value,c={page:t,limit:20};n&&(c.type=n),o&&(c.statuses=o),s&&(c.search=s),d$1==="this"?c.url=a.url:d$1==="template"&&a.urlPattern&&(c.urlPattern=a.urlPattern);let b=this.listContainer.querySelector(".sp-btn-load-more"),m;b&&(m=d(b));try{let{feedbacks:p,total:y}=await this.client.getFeedbacks(this.projectName,c);if(e!==this.loadController)return;this.currentPage=t,this.totalFeedbacks=y,this.feedbacks=[...this.feedbacks,...p],this.stats.update(this.feedbacks,y),this.renderList();let C=this.scopeAnnotationsByUrl?this.feedbacks.filter(k=>k.url===a.url):this.feedbacks;this.markers.render(C);}catch(p){m&&m(),this.bus.emit("feedback:error",p instanceof Error?p:new Error(String(p)));}finally{this.isLoadingMore=false;}}renderList(){if(this.listContainer.replaceChildren(),this.feedbacks.length===0){let o=b("div",{class:"sp-empty"});o.setAttribute("role","status"),o.setAttribute("aria-live","polite");let a=b("div",{class:"sp-empty-text"});c(a,this.t("panel.empty")),o.appendChild(a),this.listContainer.appendChild(o);return}let e=V(this.feedbacks,this.sortControls.sortMode),t=e.map(o=>o.id),s=this.bulk.createSelectAllBar(t,this.t("bulk.selectAll"));if(this.listContainer.appendChild(s),this.sortControls.groupByPage){let o=W(e),a=0;for(let[d,c]of o){let b$1=X(d,c.length,this.colors);this.listContainer.appendChild(b$1);let m=b("div",{class:"sp-group-content"});for(let p of c){let y=this.createCard(p,a+1);y.style.setProperty("--sp-card-i",String(a)),m.appendChild(y),a++;}this.listContainer.appendChild(m);}}else e.forEach((o,a)=>{let d=this.createCard(o,a+1);d.style.setProperty("--sp-card-i",String(a)),this.listContainer.appendChild(d);});let n=this.totalFeedbacks-this.feedbacks.length;if(n>0){let o=b("div",{class:"sp-load-more-wrap"}),a=document.createElement("button");a.className="sp-btn-ghost sp-btn-load-more",c(a,this.t("panel.loadMore").replace("{remaining}",String(n))),a.addEventListener("click",()=>this.loadMoreFeedbacks().catch(()=>{})),o.appendChild(a),this.listContainer.appendChild(o);}}createCard(e$1,t$1){let s$1=J(e$1.status),n=x(e$1.type,this.colors),o=b("div",{class:`sp-card ${s$1?"sp-card--resolved":""}`});o.setAttribute("role","listitem"),o.setAttribute("tabindex","0"),o.setAttribute("aria-label",`Feedback #${t$1}: ${N(e$1.type,this.t)} \u2014 ${e$1.message.slice(0,80)}`),o.dataset.feedbackId=e$1.id;let a$1=b("div",{class:"sp-card-bar"});a$1.style.background=s$1?"#9ca3af":n;let d=b("div",{class:"sp-card-body"}),c$1=b("div",{class:"sp-card-header"}),b$1=this.bulk.createCheckbox(e$1.id);c$1.appendChild(b$1);let m=b("span",{class:"sp-card-number"});c(m,`#${t$1}`);let p=b("span",{class:"sp-badge"}),y$1=A(e$1.type,this.colors);p.style.background=y$1,p.style.color=n,c(p,N(e$1.type,this.t));let C=b("span",{class:"sp-badge sp-badge--status"});C.dataset.status=e$1.status,C.style.background=z(e$1.status,this.colors),C.style.color=y(e$1.status,this.colors),c(C,O(e$1.status,this.t));let k$1=b("span",{class:"sp-card-date"});c(k$1,e(e$1.createdAt,this.locale)),c$1.appendChild(m),c$1.appendChild(p),c$1.appendChild(C),c$1.appendChild(k$1);let T=b("div",{class:"sp-card-message"});c(T,e$1.message);let f=document.createElement("button");f.className="sp-card-expand",f.dataset.action="expand",c(f,this.t("panel.showMore")),f.style.display="none",f.setAttribute("aria-expanded","false"),requestAnimationFrame(()=>{T.scrollHeight>T.clientHeight&&(f.style.display="block");});let L=b("div",{class:"sp-card-footer"}),i=document.createElement("button");if(i.className="sp-btn-resolve",i.dataset.action="resolve",s$1){i.appendChild(a(s));let v=document.createElement("span");c(v,` ${this.t("panel.reopen")}`),i.appendChild(v);}else {i.appendChild(a(k));let v=document.createElement("span");c(v,` ${this.t("panel.resolve")}`),i.appendChild(v);}let r=document.createElement("button");r.className="sp-btn-delete",r.dataset.action="delete",r.appendChild(a(t));let u=document.createElement("span");return c(u,` ${this.t("panel.delete")}`),r.appendChild(u),L.appendChild(i),L.appendChild(r),d.appendChild(c$1),d.appendChild(T),d.appendChild(f),d.appendChild(L),o.appendChild(a$1),o.appendChild(d),o}async bulkResolve(e){try{await Promise.all(e.map(t=>this.client.resolveFeedback(t,!0))),await this.loadFeedbacks();}catch(t){throw this.bus.emit("feedback:error",t instanceof Error?t:new Error(String(t))),t}}async bulkDelete(e){try{await Promise.all(e.map(t=>this.client.deleteFeedback(t)));for(let t of e)this.bus.emit("feedback:deleted",t);await this.loadFeedbacks();}catch(t){throw this.bus.emit("feedback:error",t instanceof Error?t:new Error(String(t))),t}}async confirmDeleteAll(){if(await this.showConfirmDialog(this.t("panel.deleteAllConfirmTitle"),this.t("panel.deleteAllConfirmMessage"))){this.deleteAllBtn.disabled=true;try{await this.client.deleteAllFeedbacks(this.projectName),this.bus.emit("feedback:all-deleted"),await this.loadFeedbacks();}catch(t){this.bus.emit("feedback:error",t instanceof Error?t:new Error(String(t)));}finally{this.deleteAllBtn.disabled=false;}}}showConfirmDialog(e,t){return new Promise(s=>{let n=b("div",{class:"sp-confirm-backdrop"}),o=`sp-confirm-title-${Date.now()}`,a=`sp-confirm-msg-${Date.now()}`,d=b("div",{class:"sp-confirm-dialog"});d.setAttribute("role","alertdialog"),d.setAttribute("aria-modal","true"),d.setAttribute("aria-labelledby",o),d.setAttribute("aria-describedby",a);let c$1=b("div",{class:"sp-confirm-title"});c$1.id=o,c(c$1,e);let b$1=b("div",{class:"sp-confirm-message"});b$1.id=a,c(b$1,t);let m=b("div",{class:"sp-confirm-actions"}),p=document.createElement("button");p.type="button",p.className="sp-btn-ghost",c(p,this.t("panel.cancel"));let y=document.createElement("button");y.type="button",y.className="sp-btn-danger",c(y,this.t("panel.confirmDelete"));let C=false,k=f=>{C||(C=true,n.removeEventListener("keydown",T),n.style.opacity="0",d.style.transform="translateY(8px) scale(0.97)",setTimeout(()=>{n.remove(),s(f);},200));},T=f=>{let L=f;if(L.key==="Escape"){k(false);return}L.key==="Tab"&&(L.preventDefault(),n.getRootNode().activeElement===p?y.focus():p.focus());};n.addEventListener("keydown",T),p.addEventListener("click",()=>k(false)),y.addEventListener("click",()=>k(true)),n.addEventListener("click",f=>{f.target===n&&k(false);}),m.appendChild(p),m.appendChild(y),d.appendChild(c$1),d.appendChild(b$1),d.appendChild(m),n.appendChild(d),this.root.getRootNode()instanceof ShadowRoot?this.root.getRootNode().appendChild(n):this.root.appendChild(n),requestAnimationFrame(()=>{n.style.opacity="1",d.style.transform="translateY(0) scale(1)",p.focus();});})}async deleteFeedback(e,t){this.pendingMutations.add(e.id);let s=d(t);try{await this.client.deleteFeedback(e.id),this.bus.emit("feedback:deleted",e.id),await this.loadFeedbacks();}catch(n){s(),this.bus.emit("feedback:error",n instanceof Error?n:new Error(String(n)));}finally{this.pendingMutations.delete(e.id);}}async toggleResolve(e,t){this.pendingMutations.add(e.id);let s=d(t);try{let n=!J(e.status);await this.client.resolveFeedback(e.id,n),await this.loadFeedbacks();}catch(n){s(),this.bus.emit("feedback:error",n instanceof Error?n:new Error(String(n)));}finally{this.pendingMutations.delete(e.id);}}buildTypeDropdown(){return this.typeOptions=[{value:"all",label:this.t("panel.filterAll"),icon:p,color:this.colors.accent,bg:this.colors.accentLight},{value:"question",label:this.t("type.question"),icon:l,color:this.colors.typeQuestion,bg:this.colors.typeQuestionBg},{value:"change",label:this.t("type.change"),icon:m,color:this.colors.typeChange,bg:this.colors.typeChangeBg},{value:"bug",label:this.t("type.bug"),icon:n,color:this.colors.typeBug,bg:this.colors.typeBugBg},{value:"other",label:this.t("type.other"),icon:o,color:this.colors.typeOther,bg:this.colors.typeOtherBg}],this.typeDropdownContainer=b("div",{class:"sp-filter-dropdown"}),this.typeDropdownBtn=document.createElement("button"),this.typeDropdownBtn.type="button",this.typeDropdownBtn.className="sp-filter-dropdown-btn",this.typeDropdownBtn.setAttribute("aria-haspopup","listbox"),this.typeDropdownBtn.setAttribute("aria-expanded","false"),this.renderTypeDropdownTrigger(),this.typeDropdownBtn.addEventListener("click",e=>{e.stopPropagation(),this.typeDropdownMenu?this.closeTypeDropdown():this.openTypeDropdown();}),this.typeDropdownContainer.appendChild(this.typeDropdownBtn),this.typeDropdownContainer}renderTypeDropdownTrigger(){let e=this.typeOptions.find(d=>this.activeFilters.has(d.value))??this.typeOptions[0];if(!e)return;this.typeDropdownBtn.replaceChildren(),this.typeDropdownBtn.style.setProperty("--sp-chip-color",e.color),this.typeDropdownBtn.style.setProperty("--sp-chip-bg",e.bg),this.typeDropdownBtn.dataset.filter=e.value,this.typeDropdownBtn.classList.toggle("sp-filter-dropdown-btn--filtered",e.value!=="all"),this.typeDropdownBtn.setAttribute("aria-label",`${this.t("type.label")}: ${e.label}`);let t=b("span",{class:"sp-filter-dropdown-btn__icon"});t.appendChild(a(e.icon)),this.typeDropdownBtn.appendChild(t);let s=b("span",{class:"sp-filter-dropdown-btn__label"}),n=b("span",{class:"sp-filter-dropdown-btn__prefix"});c(n,this.t("type.label"));let o=b("span",{class:"sp-filter-dropdown-btn__value"});c(o,e.label),s.appendChild(n),s.appendChild(o),this.typeDropdownBtn.appendChild(s);let a$1=b("span",{class:"sp-filter-dropdown-btn__chevron"});a$1.appendChild(a(r)),this.typeDropdownBtn.appendChild(a$1);}openTypeDropdown(){this.typeDropdownMenu=b("div",{class:"sp-filter-dropdown-menu"}),this.typeDropdownMenu.setAttribute("role","listbox"),this.typeDropdownMenu.setAttribute("aria-label",this.t("type.label")),this.typeDropdownBtn.setAttribute("aria-expanded","true");for(let e of this.typeOptions){let t=document.createElement("button");t.type="button";let s=this.activeFilters.has(e.value);t.className=`sp-filter-dropdown-option${s?" sp-filter-dropdown-option--active":""}`,t.style.setProperty("--sp-chip-color",e.color),t.style.setProperty("--sp-chip-bg",e.bg),t.dataset.filter=e.value,t.setAttribute("role","option"),t.setAttribute("aria-selected",String(s));let n=b("span",{class:"sp-filter-dropdown-option__icon"});n.appendChild(a(e.icon)),t.appendChild(n);let o=b("span",{class:"sp-filter-dropdown-option__label"});if(c(o,e.label),t.appendChild(o),s){let a$1=b("span",{class:"sp-filter-dropdown-option__check"});a$1.appendChild(a(k)),t.appendChild(a$1);}t.addEventListener("click",a=>{a.stopPropagation(),this.selectTypeFilter(e.value);}),this.typeDropdownMenu.appendChild(t);}this.typeDropdownContainer.appendChild(this.typeDropdownMenu),requestAnimationFrame(()=>{this.typeDropdownOutsideHandler=e=>{this.typeDropdownMenu&&!this.typeDropdownContainer.contains(e.target)&&this.closeTypeDropdown();},document.addEventListener("click",this.typeDropdownOutsideHandler,true);}),this.typeDropdownMenu.addEventListener("keydown",e=>{e.key==="Escape"&&(this.closeTypeDropdown(),this.typeDropdownBtn.focus());});}closeTypeDropdown(){this.typeDropdownMenu&&(this.typeDropdownMenu.remove(),this.typeDropdownMenu=null),this.typeDropdownBtn.setAttribute("aria-expanded","false"),this.typeDropdownOutsideHandler&&(document.removeEventListener("click",this.typeDropdownOutsideHandler,true),this.typeDropdownOutsideHandler=null);}selectTypeFilter(e){this.activeFilters.clear(),this.activeFilters.add(e),this.renderTypeDropdownTrigger(),this.closeTypeDropdown(),this.loadFeedbacks().catch(()=>{});}buildStatusSegmented(){return this.statusSegmented=new M({options:[{value:"all",label:this.t("panel.statusAll"),icon:p,color:this.colors.accent,bg:this.colors.accentLight},{value:"open",label:this.t("panel.statusOpen"),icon:q,color:this.colors.statusOpen,bg:this.colors.statusOpenBg},{value:"resolved",label:this.t("panel.statusResolved"),icon:k,color:this.colors.statusResolved,bg:this.colors.statusResolvedBg}],value:"all",onChange:()=>{this.loadFeedbacks().catch(()=>{});},ariaLabel:this.t("status.label"),datasetKey:"statusFilter",modifierPrefix:"sp-segmented__btn--"}),this.statusSegmented.element}buildScopeSegmented(){return this.scopeSegmented=new M({options:[{value:"this",label:this.t("scope.thisPage")},{value:"template",label:this.t("scope.thisType")},{value:"all",label:this.t("scope.all")}],value:this.initialScopeFilter,onChange:()=>{this.loadFeedbacks().catch(()=>{});},ariaLabel:this.t("scope.label"),datasetKey:"scopeFilter",modifierPrefix:"sp-segmented__btn--scope-",extraClass:"sp-segmented--scope"}),this.syncScopeAvailability(),this.scopeSegmented.element}syncScopeAvailability(){if(!this.scopeSegmented)return;let t=!!this.getScope().urlPattern;this.scopeSegmented.setOptionVisible("template",t),!t&&this.scopeSegmented.value==="template"&&this.scopeSegmented.select("this");}getFocusedFeedback(){let e=aa(this.listContainer);if(e<0)return;let t=this.listContainer.querySelectorAll(".sp-card")[e];if(t)return this.feedbacks.find(s=>s.id===t.dataset.feedbackId)}scrollToFeedback(e){let t=CSS.escape(e),s=this.listContainer.querySelector(`[data-feedback-id="${t}"]`);s&&(s.scrollIntoView({behavior:"smooth",block:"center"}),s.classList.add("sp-anim-flash"),s.addEventListener("animationend",()=>{s.classList.remove("sp-anim-flash");},{once:true}));}async refresh(){this.isOpen&&await this.loadFeedbacks();}get isCurrentlyOpen(){return this.isOpen}destroy(){this.loadController?.abort(),this.searchTimeout&&clearTimeout(this.searchTimeout),this.listContainer.removeEventListener("click",this.onListClick),this.listContainer.removeEventListener("keydown",this.onListKeydown),this.listContainer.removeEventListener("mouseover",this.onListMouseover),this.listContainer.removeEventListener("mouseout",this.onListMouseout),document.removeEventListener("sp-marker-click",this.onMarkerClick),this.closeTypeDropdown(),this.sortControls.destroy(),this.bulk.destroy(),this.exportBtn.destroy(),this.shortcuts.destroy(),this.detail.destroy(),this.root.remove();}};export{he as Panel};//# sourceMappingURL=panel-5ZGIFFJ4.js.map
|
|
2
|
+
//# sourceMappingURL=panel-5ZGIFFJ4.js.map
|