@bloomscorp/blooms-ai-embed 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3 @@
1
+ import{a as Ce}from"./chunk-EA7SZINY.js";import{a as fe}from"./chunk-OSBW6YXS.js";import{a as ve}from"./chunk-OBI6OSSF.js";import{a as ge}from"./chunk-VQEBAAHK.js";import{a as he}from"./chunk-HLIQJSA7.js";import"./chunk-SPLW6L45.js";import{Ca as C,Cb as de,D as q,Fa as ae,Ga as w,Ha as X,Ia as f,J as u,Ja as F,K as x,L as ne,La as _,Ma as me,Na as P,Oa as k,Pa as E,Qa as t,Ra as i,S as K,Sa as T,Ta as b,Ua as g,V as ce,Va as d,W as v,Wa as o,Xa as p,Ya as D,Za as _e,a as Y,b as ie,cb as ue,db as oe,eb as re,gb as le,lb as se,na as B,nb as y,pa as l,tb as xe,xa as J,xb as Z,y as pe}from"./chunk-WQW7QCHM.js";function ye(a,n){if(a&1&&(t(0,"span",6),o(1),i()),a&2){let e=d();l(),p(e.icon)}}function Te(a,n){if(a&1&&(C(0,ye,2,1,"span",6),t(1,"span",3),o(2),i()),a&2){let e=n;_(e.icon?0:-1),l(2),p(e.label)}}function De(a,n){if(a&1&&(t(0,"span",3),o(1),i()),a&2){let e=d();l(),p(e.placeholder)}}function Ie(a,n){if(a&1&&(t(0,"span",11),o(1),i()),a&2){let e=d().$implicit;l(),p(e.icon)}}function Be(a,n){if(a&1&&(t(0,"span",13),o(1),i()),a&2){let e=d().$implicit;l(),p(e.hint)}}function Pe(a,n){a&1&&(ne(),t(0,"svg",14),T(1,"polyline",15),i())}function Fe(a,n){if(a&1){let e=b();t(0,"button",10),g("mouseenter",function(){let s=u(e).$index,c=d(2);return x(c.activeIndex.set(s))})("click",function(){let s=u(e).$implicit,c=d(2);return x(c.pick(s))}),C(1,Ie,2,1,"span",11),t(2,"span",12),o(3),i(),C(4,Be,2,1,"span",13)(5,Pe,2,0,":svg:svg",14),i()}if(a&2){let e=n.$implicit,r=n.$index,s=d(2);f("aps-option--selected",s.isSelected(e))("aps-option--active",s.activeIndex()===r)("aps-option--disabled",e.disabled),w("disabled",e.disabled),ae("aria-selected",s.isSelected(e)),l(),_(e.icon?1:-1),l(2),p(e.label),l(),_(e.hint?4:-1),l(),_(s.isSelected(e)?5:-1)}}function Ve(a,n){if(a&1){let e=b();t(0,"div",7),g("click",function(){u(e);let s=d();return x(s.close())}),i(),t(1,"div",8),k(2,Fe,6,12,"button",9,me),i()}if(a&2){let e=d();l(),X("top",e.panelTop(),"px")("left",e.panelLeft(),"px")("min-width",e.panelWidth(),"px"),f("aps-panel--up",e.dropUp()),l(),E(e.options)}}var ee=class a{constructor(){this.options=[];this.placeholder="Select\u2026";this.disabled=!1;this.fullWidth=!1;this.size="md";this.ariaLabel="";this.valueChange=new K;this.host=q(ce);this._value=v(null);this.open=v(!1);this.activeIndex=v(-1);this.panelTop=v(0);this.panelLeft=v(0);this.panelWidth=v(0);this.dropUp=v(!1);this.onChange=()=>{};this.onTouched=()=>{};this.onViewportChange=n=>{let e=n?.target;if(e&&this.open()){let r=document.querySelector(".aps-panel");if(r&&r.contains(e))return}this.open()&&this.close()}}set value(n){this._value.set(n)}selectedOption(){return this.options.find(n=>n.value===this._value())}isSelected(n){return n.value===this._value()}writeValue(n){this._value.set(n)}registerOnChange(n){this.onChange=n}registerOnTouched(n){this.onTouched=n}setDisabledState(n){this.disabled=n}toggle(n){n.stopPropagation(),!this.disabled&&(this.open()?this.close():this.openPanel())}openPanel(){this.position(),this.open.set(!0);let n=this.options.findIndex(e=>this.isSelected(e));this.activeIndex.set(n>=0?n:this.firstEnabled()),window.addEventListener("scroll",this.onViewportChange,{capture:!0,passive:!0}),window.addEventListener("resize",this.onViewportChange,{passive:!0})}close(){this.open()&&(window.removeEventListener("scroll",this.onViewportChange,{capture:!0}),window.removeEventListener("resize",this.onViewportChange),this.open.set(!1),this.onTouched())}ngOnDestroy(){window.removeEventListener("scroll",this.onViewportChange,{capture:!0}),window.removeEventListener("resize",this.onViewportChange)}pick(n){n.disabled||(this._value.set(n.value),this.onChange(n.value),this.valueChange.emit(n.value),this.close())}position(){let e=this.host.nativeElement.querySelector(".aps-trigger").getBoundingClientRect(),s=document.documentElement.clientHeight-e.bottom,c=s<280&&e.top>s;this.dropUp.set(c),this.panelLeft.set(Math.round(e.left)),this.panelWidth.set(Math.round(e.width)),this.panelTop.set(Math.round(c?e.top-6-this.estimatedHeight():e.bottom+6))}estimatedHeight(){return Math.min(264,this.options.length*38+12)}firstEnabled(){return this.options.findIndex(n=>!n.disabled)}onTriggerKeydown(n){if(!this.disabled){if(!this.open()){(n.key==="Enter"||n.key===" "||n.key==="ArrowDown"||n.key==="ArrowUp")&&(n.preventDefault(),this.openPanel());return}if(n.key==="Escape"){n.preventDefault(),this.close();return}if(n.key==="Enter"||n.key===" "){n.preventDefault();let e=this.options[this.activeIndex()];e&&this.pick(e);return}(n.key==="ArrowDown"||n.key==="ArrowUp")&&(n.preventDefault(),this.step(n.key==="ArrowDown"?1:-1))}}step(n){let e=this.options.length;if(e===0)return;let r=this.activeIndex();for(let s=0;s<e;s++)if(r=(r+n+e)%e,!this.options[r].disabled){this.activeIndex.set(r);return}}static{this.\u0275fac=function(e){return new(e||a)}}static{this.\u0275cmp=J({type:a,selectors:[["app-select"]],hostVars:2,hostBindings:function(e,r){e&2&&f("full",r.fullWidth)},inputs:{options:"options",placeholder:"placeholder",disabled:[2,"disabled","disabled",se],fullWidth:[2,"fullWidth","fullWidth",se],size:"size",ariaLabel:"ariaLabel",value:"value"},outputs:{valueChange:"valueChange"},features:[ue([{provide:ge,useExisting:pe(()=>a),multi:!0}])],decls:8,vars:14,consts:[["trigger",""],["type","button",1,"aps-trigger",3,"click","keydown","disabled"],[1,"aps-value"],[1,"aps-value-label"],["viewBox","0 0 24 24","width","13","height","13","fill","none","stroke","currentColor","stroke-width","2.6","stroke-linecap","round","stroke-linejoin","round",1,"aps-caret"],["points","6 9 12 15 18 9"],[1,"aps-value-icon"],[1,"aps-scrim",3,"click"],["role","listbox",1,"aps-panel"],["type","button","role","option",1,"aps-option",3,"aps-option--selected","aps-option--active","aps-option--disabled","disabled"],["type","button","role","option",1,"aps-option",3,"mouseenter","click","disabled"],[1,"aps-option-icon"],[1,"aps-option-label"],[1,"aps-option-hint"],["viewBox","0 0 24 24","width","14","height","14","fill","none","stroke","currentColor","stroke-width","3","stroke-linecap","round","stroke-linejoin","round",1,"aps-check"],["points","20 6 9 17 4 12"]],template:function(e,r){if(e&1){let s=b();t(0,"button",1,0),g("click",function(h){return u(s),x(r.toggle(h))})("keydown",function(h){return u(s),x(r.onTriggerKeydown(h))}),t(2,"span",2),C(3,Te,3,2)(4,De,2,1,"span",3),i(),ne(),t(5,"svg",4),T(6,"polyline",5),i()(),C(7,Ve,4,8)}if(e&2){let s;f("aps-trigger--open",r.open())("aps-trigger--placeholder",!r.selectedOption())("aps-trigger--sm",r.size==="sm")("aps-trigger--full",r.fullWidth),w("disabled",r.disabled),ae("aria-label",r.ariaLabel||null)("aria-expanded",r.open())("aria-haspopup","listbox"),l(3),_((s=r.selectedOption())?3:4,s),l(4),_(r.open()?7:-1)}},dependencies:[Z],styles:["[_nghost-%COMP%]{display:inline-block;position:relative;font-family:var(--font-sans)}.full[_nghost-%COMP%]{display:block}.aps-trigger[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:space-between;gap:8px;width:100%;min-width:0;padding:10px 12px;border-radius:9px;border:1px solid var(--color-border);background:var(--color-card-bg, #fff);color:var(--color-text);font-size:13px;font-weight:500;font-family:var(--font-sans);cursor:pointer;text-align:left;line-height:1.2;transition:border-color .14s,box-shadow .14s,background .14s}.aps-trigger[_ngcontent-%COMP%]:hover:not(:disabled){border-color:var(--color-text-muted)}.aps-trigger--open[_ngcontent-%COMP%]{border-color:var(--color-accent);box-shadow:0 0 0 3px #e848551f}.aps-trigger[_ngcontent-%COMP%]:disabled{opacity:.55;cursor:not-allowed}.aps-trigger--placeholder[_ngcontent-%COMP%] .aps-value-label[_ngcontent-%COMP%]{color:var(--color-text-muted)}.aps-trigger--sm[_ngcontent-%COMP%]{padding:6px 9px;border-radius:8px;font-size:12px;gap:6px}.aps-trigger--full[_ngcontent-%COMP%]{display:flex}.aps-value[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:7px;min-width:0;overflow:hidden}.aps-value-icon[_ngcontent-%COMP%]{flex-shrink:0;font-size:13px}.aps-value-label[_ngcontent-%COMP%]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aps-caret[_ngcontent-%COMP%]{flex-shrink:0;color:var(--color-text-muted);transition:transform .18s ease}.aps-trigger--open[_ngcontent-%COMP%] .aps-caret[_ngcontent-%COMP%]{transform:rotate(180deg);color:var(--color-accent)}.aps-scrim[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:2999;background:transparent}.aps-panel[_ngcontent-%COMP%]{position:fixed;z-index:3000;max-height:264px;overflow-y:auto;padding:6px;border-radius:11px;background:var(--color-card-bg);border:1px solid var(--color-border);box-shadow:0 12px 34px #1e143c33;animation:_ngcontent-%COMP%_aps-pop .13s cubic-bezier(.4,0,.2,1);transform-origin:top;scrollbar-width:thin;scrollbar-color:var(--color-border) transparent}.aps-panel--up[_ngcontent-%COMP%]{transform-origin:bottom}@keyframes _ngcontent-%COMP%_aps-pop{0%{opacity:0;transform:translateY(-4px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.aps-option[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;width:100%;padding:8px 10px;border:none;background:transparent;border-radius:7px;color:var(--color-text);font-size:13px;font-weight:500;font-family:var(--font-sans);cursor:pointer;text-align:left;transition:background .1s,color .1s}.aps-option-icon[_ngcontent-%COMP%]{flex-shrink:0;font-size:13px}.aps-option-label[_ngcontent-%COMP%]{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aps-option-hint[_ngcontent-%COMP%]{flex-shrink:0;font-size:10.5px;color:var(--color-text-muted);font-style:italic}.aps-check[_ngcontent-%COMP%]{flex-shrink:0;color:var(--color-accent)}.aps-option--active[_ngcontent-%COMP%]:not(.aps-option--disabled){background:var(--color-hover)}.aps-option--selected[_ngcontent-%COMP%]{color:var(--color-accent);font-weight:700}.aps-option--selected.aps-option--active[_ngcontent-%COMP%]{background:var(--color-primary-soft)}.aps-option--disabled[_ngcontent-%COMP%]{opacity:.4;cursor:not-allowed}@media (prefers-reduced-motion: reduce){.aps-panel[_ngcontent-%COMP%]{animation:none}}"],changeDetection:0})}};var be=()=>[],V=(a,n)=>n.url,Se=(a,n)=>n.value,Ue=(a,n)=>n.label,Me=(a,n)=>n.title;function ze(a,n){a&1&&(t(0,"div",1),T(1,"app-loading-spinner"),i())}function Le(a,n){if(a&1){let e=b();t(0,"div",2)(1,"span"),o(2,"\u26A0\uFE0F"),i(),t(3,"p"),o(4,"Crawl result not found."),i(),t(5,"button",3),g("click",function(){u(e);let s=d();return x(s.goBack())}),o(6,"\u2190 Back"),i()()}}function Oe(a,n){if(a&1&&(t(0,"span",10),o(1,"\xB7"),i(),t(2,"span"),o(3),re(4,"date"),i()),a&2){let e=d(2);l(3),p(le(4,1,e.crawl().completedAt,"mediumDate"))}}function $e(a,n){if(a&1&&(t(0,"span",10),o(1,"\xB7"),i(),t(2,"span"),o(3),i()),a&2){let e=d(2);l(3),D("",(e.crawl().crawlDurationMs/1e3).toFixed(1),"s")}}function Re(a,n){if(a&1&&(t(0,"span",50),o(1),i()),a&2){let e=d(2);f("report-msg--ok",e.reportMsgOk()),l(),p(e.reportMsg())}}function Ae(a,n){if(a&1){let e=b();t(0,"button",52),g("click",function(){let s=u(e).$implicit,c=d(3);return x(c.generateReport(s.value))}),o(1),i()}if(a&2){let e=n.$implicit;l(),p(e.label)}}function Ne(a,n){if(a&1&&(t(0,"div",15),k(1,Ae,2,1,"button",51,Se),i()),a&2){let e=d(2);l(),E(e.reportOptions)}}function We(a,n){if(a&1&&(t(0,"span",54),o(1),i()),a&2){let e=d(3);l(),D("Sitemap Index \xB7 ",e.crawl().sitemapData.childSitemaps.length," sitemaps")}}function Ge(a,n){a&1&&(t(0,"span",55),o(1,"Single Sitemap"),i())}function je(a,n){if(a&1){let e=b();t(0,"div",60),g("click",function(){let s=u(e).$implicit,c=d(5);return x(c.selectSitemap(s.url))}),t(1,"div",61)(2,"div",62),o(3),i(),t(4,"div",63),o(5),i()(),t(6,"div",64)(7,"strong"),o(8),i(),o(9," pages"),i()()}if(a&2){let e=n.$implicit,r=d(5);f("active",r.selectedSitemap()===e.url),l(3),p(e.label),l(2),p(e.url),l(3),p(e.pageCount)}}function He(a,n){if(a&1&&(t(0,"div",58),k(1,je,10,5,"div",59,V),i()),a&2){let e=d(4);l(),E(e.crawl().sitemapData.childSitemaps)}}function Qe(a,n){if(a&1&&(t(0,"div",57),o(1),i(),C(2,He,3,0,"div",58)),a&2){let e=d(3);l(),p(e.crawl().sitemapUrl),l(),_(e.crawl().sitemapData.isSitemapIndex?2:-1)}}function qe(a,n){if(a&1){let e=b();t(0,"div",29)(1,"button",53),g("click",function(){u(e);let s=d(2);return x(s.showSitemapStructure.set(!s.showSitemapStructure()))}),t(2,"span"),o(3,"\u{1F5C2}\uFE0F Sitemap Structure"),i(),C(4,We,2,1,"span",54)(5,Ge,2,0,"span",55),t(6,"span",56),o(7),i()(),C(8,Qe,3,2),i()}if(a&2){let e=d(2);l(4),_(e.crawl().sitemapData.isSitemapIndex?4:5),l(3),p(e.showSitemapStructure()?"\u25B2":"\u25BC"),l(),_(e.showSitemapStructure()?8:-1)}}function Ke(a,n){if(a&1){let e=b();t(0,"span",33),o(1),t(2,"button",65),g("click",function(){u(e);let s=d(2);return x(s.selectSitemap(""))}),o(3,"\u2715"),i()()}if(a&2){let e=d(2);l(),D("\u2014 ",e.selectedSitemapLabel()," ")}}function Ye(a,n){if(a&1){let e=b();t(0,"button",66),g("click",function(){u(e);let s=d(2);return s.mainSearchQuery.set(""),x(s.mainIssueFilter.set(""))}),o(1,"\u2715 Clear"),i()}}function Je(a,n){if(a&1&&(t(0,"span",76),o(1),i()),a&2){let e=n.$implicit;l(),p(e)}}function Xe(a,n){if(a&1&&(t(0,"span",77),o(1),i()),a&2){let e=d(2).$implicit;l(),D("+",e.issues.length-2,"")}}function Ze(a,n){if(a&1&&(t(0,"div",73),k(1,Je,2,1,"span",76,P),C(3,Xe,2,1,"span",77),i()),a&2){let e=d().$implicit;l(),E(e.issues.slice(0,2)),l(2),_(e.issues.length>2?3:-1)}}function et(a,n){a&1&&(t(0,"span",74),o(1,"\u2713 OK"),i())}function tt(a,n){if(a&1&&(t(0,"span",88),o(1),i()),a&2){let e=n.$implicit;l(),p(e)}}function it(a,n){if(a&1&&(t(0,"div",84)(1,"span",82),o(2,"H1 Tags"),i(),t(3,"div",87),k(4,tt,2,1,"span",88,P),i()()),a&2){let e=d(2).$implicit;l(4),E(e.h1Tags)}}function nt(a,n){if(a&1&&(t(0,"a",85),o(1),i()),a&2){let e=d(2).$implicit;w("href",e.canonicalUrl,B),l(),p(e.canonicalUrl)}}function at(a,n){a&1&&(t(0,"span",86),o(1,"Not set"),i())}function ot(a,n){if(a&1&&(t(0,"tr",75)(1,"td",78)(2,"div",79)(3,"div",80)(4,"div",81)(5,"span",82),o(6,"Full Title"),i(),t(7,"span",83),o(8),i()(),t(9,"div",84)(10,"span",82),o(11,"Meta Description"),i(),t(12,"span",83),o(13),i()(),C(14,it,6,0,"div",84),t(15,"div",81)(16,"span",82),o(17,"Internal Links"),i(),t(18,"span",83),o(19),i()(),t(20,"div",81)(21,"span",82),o(22,"External Links"),i(),t(23,"span",83),o(24),i()(),t(25,"div",81)(26,"span",82),o(27,"Canonical URL"),i(),t(28,"span",83),C(29,nt,2,2,"a",85)(30,at,2,0,"span",86),i()()()()()()),a&2){let e,r,s=d().$implicit;l(8),p(s.title||"No title tag"),l(4),f("page-detail__value--muted",!s.metaDescription),l(),p(s.metaDescription||"No meta description set"),l(),_(s.h1Tags!=null&&s.h1Tags.length?14:-1),l(5),p((e=s.internalLinks)!==null&&e!==void 0?e:"\u2014"),l(5),p((r=s.externalLinks)!==null&&r!==void 0?r:"\u2014"),l(5),_(s.hasCanonical&&s.canonicalUrl?29:30)}}function rt(a,n){if(a&1){let e=b();t(0,"tr",67),g("click",function(){let s=u(e).$implicit,c=d(2);return x(c.togglePageExpand(s.url))}),t(1,"td",68)(2,"span",69),o(3,"\u25B6"),i()(),t(4,"td",70)(5,"a",71),g("click",function(s){return u(e),x(s.stopPropagation())}),o(6),i()(),t(7,"td",72),o(8),i(),t(9,"td")(10,"span",9),o(11),i()(),t(12,"td"),o(13),i(),t(14,"td"),o(15),i(),t(16,"td"),C(17,Ze,4,1,"div",73)(18,et,2,0,"span",74),i()(),C(19,ot,31,8,"tr",75)}if(a&2){let e,r,s=n.$implicit,c=d(2);f("row--error",s.statusCode===0||((e=s.statusCode)!==null&&e!==void 0?e:200)>=400)("row--expanded",c.expandedPageUrl()===s.url),l(2),f("expanded",c.expandedPageUrl()===s.url),l(3),w("href",s.url,B),l(),p(s.url),l(2),p(s.title||"\u2014"),l(2),F(c.statusClass(s.statusCode)),l(),p(s.statusCode||"\u2014"),l(2),p(s.loadTime?s.loadTime+"ms":"\u2014"),l(2),p((r=s.wordCount)!==null&&r!==void 0?r:"\u2014"),l(2),_(s.issues!=null&&s.issues.length?17:18),l(2),_(c.expandedPageUrl()===s.url?19:-1)}}function lt(a,n){if(a&1&&(t(0,"span"),o(1),re(2,"date"),i()),a&2){let e=d(2);l(),D("Completed: ",le(2,1,e.crawl().completedAt,"medium"),"")}}function st(a,n){if(a&1&&(t(0,"span"),o(1),i()),a&2){let e=d(2);l(),D("Duration: ",(e.crawl().crawlDurationMs/1e3).toFixed(1),"s")}}function dt(a,n){if(a&1){let e=b();t(0,"div",4)(1,"div",5)(2,"button",6),g("click",function(){u(e);let s=d();return x(s.goBack())}),o(3,"\u2190 Sitemap Crawls"),i(),t(4,"h2",7),o(5),i(),t(6,"div",8)(7,"span",9),o(8),i(),C(9,Oe,5,4)(10,$e,4,1),t(11,"span",10),o(12,"\xB7"),i(),t(13,"span"),o(14),i()()(),t(15,"div",11),C(16,Re,2,3,"span",12),t(17,"div",13)(18,"button",14),g("click",function(){u(e);let s=d();return x(s.showReportMenu.set(!s.showReportMenu()))}),o(19),i(),C(20,Ne,3,0,"div",15),i()()(),t(21,"div",16)(22,"div",17)(23,"div",18),o(24),t(25,"span"),o(26,"/100"),i()(),t(27,"div",19),o(28,"Health Score"),i(),t(29,"div",20),T(30,"div",21),i()(),t(31,"div",22)(32,"div",18),o(33),i(),t(34,"div",19),o(35,"URLs in Sitemap"),i()(),t(36,"div",22)(37,"div",18),o(38),i(),t(39,"div",19),o(40,"Pages Crawled"),i()(),t(41,"div",22)(42,"div",18),o(43),i(),t(44,"div",19),o(45,"Successful"),i()(),t(46,"div",22)(47,"div",18),o(48),i(),t(49,"div",19),o(50,"Failed"),i()(),t(51,"div",22)(52,"div",18),o(53),i(),t(54,"div",19),o(55,"With Issues"),i()()(),t(56,"div",23)(57,"div",24),g("click",function(){u(e);let s=d();return x(s.openPanel("pages"))}),t(58,"div",25),o(59,"\u{1F517}"),i(),t(60,"div",26),o(61),i(),t(62,"div",27),o(63,"Pages Crawled"),i(),t(64,"div",28),o(65,"View all pages \u2192"),i()(),t(66,"div",24),g("click",function(){u(e);let s=d();return x(s.openPanel("broken"))}),t(67,"div",25),o(68,"\u26A0"),i(),t(69,"div",26),o(70),i(),t(71,"div",27),o(72,"Broken Links"),i(),t(73,"div",28),o(74,"View broken links \u2192"),i()(),t(75,"div",24),g("click",function(){u(e);let s=d();return x(s.openPanel("issues"))}),t(76,"div",25),o(77,"\u25B3"),i(),t(78,"div",26),o(79),i(),t(80,"div",27),o(81,"Pages with Issues"),i(),t(82,"div",28),o(83,"View issue details \u2192"),i()(),t(84,"div",24),g("click",function(){u(e);let s=d();return x(s.openPanel("meta"))}),t(85,"div",25),o(86,"\u{1F3F7}"),i(),t(87,"div",26),o(88),i(),t(89,"div",27),o(90,"Missing Meta"),i(),t(91,"div",28),o(92,"View affected pages \u2192"),i()(),t(93,"div",24),g("click",function(){u(e);let s=d();return x(s.openPanel("titles"))}),t(94,"div",25),o(95,"\u{1F4CB}"),i(),t(96,"div",26),o(97),i(),t(98,"div",27),o(99,"Duplicate Titles"),i(),t(100,"div",28),o(101,"View duplicate groups \u2192"),i()()(),C(102,qe,9,3,"div",29),t(103,"div",30)(104,"div",31)(105,"div",32),o(106," \u{1F4C4} Crawled Pages "),C(107,Ke,4,1,"span",33),i(),t(108,"div",34)(109,"div",35)(110,"button",36),g("click",function(){u(e);let s=d();return x(s.pageFilter.set("all"))}),o(111),i(),t(112,"button",37),g("click",function(){u(e);let s=d();return x(s.pageFilter.set("success"))}),o(113),i(),t(114,"button",38),g("click",function(){u(e);let s=d();return x(s.pageFilter.set("failed"))}),o(115),i()(),t(116,"span",39),o(117),i()()(),t(118,"div",40)(119,"div",41)(120,"app-select",42),g("valueChange",function(s){u(e);let c=d();return x(c.mainSearchType.set(s))}),i(),T(121,"div",43),t(122,"input",44),g("input",function(s){u(e);let c=d();return x(c.mainSearchQuery.set(s.target.value))}),i()(),t(123,"app-select",45),g("valueChange",function(s){u(e);let c=d();return x(c.mainIssueFilter.set(s))}),i(),C(124,Ye,2,0,"button",46),i(),t(125,"div",47)(126,"table",48)(127,"thead")(128,"tr"),T(129,"th"),t(130,"th"),o(131,"URL"),i(),t(132,"th"),o(133,"Title"),i(),t(134,"th"),o(135,"Status"),i(),t(136,"th"),o(137,"Load Time"),i(),t(138,"th"),o(139,"Words"),i(),t(140,"th"),o(141,"Issues"),i()()(),t(142,"tbody"),k(143,rt,20,16,null,null,V),i()()()(),t(145,"div",49),C(146,lt,3,4,"span")(147,st,2,1,"span"),t(148,"span"),o(149),i()()}if(a&2){let e,r,s,c,h,I,S,U,M,z,L,O,$,R,A,N,W,G,j,H,Q,te,m=d();l(5),p(m.crawl().sitemapUrl),l(2),F("status-badge--"+m.crawl().status),l(),p(m.crawl().status),l(),_(m.crawl().completedAt?9:-1),l(),_(m.crawl().crawlDurationMs?10:-1),l(4),D("",m.crawl().totalUrlsCrawled," pages crawled"),l(2),_(m.reportMsg()?16:-1),l(),f("open",m.showReportMenu()),l(),w("disabled",m.generatingReport()),l(),D(" ",m.generatingReport()?"\u23F3 Generating\u2026":"\u2B07 Export Report"," "),l(),_(m.showReportMenu()?20:-1),l(2),f("stat-chip--good",((e=(e=m.crawl().summary)==null?null:e.healthScore)!==null&&e!==void 0?e:0)>=80)("stat-chip--ok",((r=(r=m.crawl().summary)==null?null:r.healthScore)!==null&&r!==void 0?r:0)>=50&&((r=(r=m.crawl().summary)==null?null:r.healthScore)!==null&&r!==void 0?r:0)<80)("stat-chip--bad",((s=(s=m.crawl().summary)==null?null:s.healthScore)!==null&&s!==void 0?s:0)<50),l(2),p((c=(c=m.crawl().summary)==null?null:c.healthScore)!==null&&c!==void 0?c:"\u2014"),l(6),X("width",(h=(h=m.crawl().summary)==null?null:h.healthScore)!==null&&h!==void 0?h:0,"%"),l(3),p((I=(I=m.crawl().sitemapData)==null?null:I.totalUrls)!==null&&I!==void 0?I:m.crawl().totalUrlsDiscovered),l(5),p(m.crawl().totalUrlsCrawled),l(3),f("stat-chip--green",m.successCount()===((S=(S=m.crawl().discoveredUrls)==null?null:S.length)!==null&&S!==void 0?S:0)&&m.successCount()>0),l(2),p(m.successCount()),l(3),f("stat-chip--red",m.failedCount()>0),l(2),p(m.failedCount()),l(3),f("stat-chip--amber",((U=(U=m.crawl().summary)==null?null:U.pagesWithIssues)!==null&&U!==void 0?U:0)>0),l(2),p((M=(M=m.crawl().summary)==null?null:M.pagesWithIssues)!==null&&M!==void 0?M:0),l(4),f("active",m.activePanel()==="pages"),l(4),p(m.crawl().totalUrlsCrawled),l(5),f("active",m.activePanel()==="broken")("insight-card--warn",((z=(z=m.crawl().summary)==null?null:z.brokenLinks)!==null&&z!==void 0?z:0)>0),l(3),f("value--warn",((L=(L=m.crawl().summary)==null?null:L.brokenLinks)!==null&&L!==void 0?L:0)>0),l(),p((O=(O=m.crawl().summary)==null?null:O.brokenLinks)!==null&&O!==void 0?O:0),l(5),f("active",m.activePanel()==="issues")("insight-card--warn",(($=($=m.crawl().summary)==null?null:$.pagesWithIssues)!==null&&$!==void 0?$:0)>0),l(3),f("value--warn",((R=(R=m.crawl().summary)==null?null:R.pagesWithIssues)!==null&&R!==void 0?R:0)>0),l(),p((A=(A=m.crawl().summary)==null?null:A.pagesWithIssues)!==null&&A!==void 0?A:0),l(5),f("active",m.activePanel()==="meta")("insight-card--warn",((N=(N=m.crawl().summary)==null?null:N.missingMeta)!==null&&N!==void 0?N:0)>0),l(3),f("value--warn",((W=(W=m.crawl().summary)==null?null:W.missingMeta)!==null&&W!==void 0?W:0)>0),l(),p((G=(G=m.crawl().summary)==null?null:G.missingMeta)!==null&&G!==void 0?G:0),l(5),f("active",m.activePanel()==="titles")("insight-card--warn",((j=(j=m.crawl().summary)==null?null:j.duplicateTitles)!==null&&j!==void 0?j:0)>0),l(3),f("value--warn",((H=(H=m.crawl().summary)==null?null:H.duplicateTitles)!==null&&H!==void 0?H:0)>0),l(),p((Q=(Q=m.crawl().summary)==null?null:Q.duplicateTitles)!==null&&Q!==void 0?Q:0),l(5),_(m.crawl().sitemapData?102:-1),l(5),_(m.selectedSitemap()?107:-1),l(3),f("active",m.pageFilter()==="all"),l(),D("All (",((te=m.crawl().discoveredUrls)!==null&&te!==void 0?te:oe(86,be)).length,")"),l(),f("active",m.pageFilter()==="success"),l(),D("\u2713 Success (",m.successCount(),")"),l(),f("active",m.pageFilter()==="failed"),l(),D("\u2717 Failed (",m.failedCount(),")"),l(2),D("",m.filteredPages().length," shown"),l(3),w("options",m.searchTypeOptions)("value",m.mainSearchType()),l(2),w("value",m.mainSearchQuery())("placeholder",m.mainSearchType()==="url"?"Search by URL\u2026":"Search by title\u2026"),l(),w("options",m.mainIssueFilterOptions())("value",m.mainIssueFilter()),l(),_(m.mainSearchQuery()||m.mainIssueFilter()?124:-1),l(19),E(m.filteredPages()),l(3),_(m.crawl().completedAt?146:-1),l(),_(m.crawl().crawlDurationMs?147:-1),l(2),D("",m.crawl().totalUrlsCrawled," pages crawled")}}function pt(a,n){if(a&1&&(t(0,"span",50),o(1),i()),a&2){let e=d(2);f("report-msg--ok",e.reportMsgOk()),l(),p(e.reportMsg())}}function ct(a,n){if(a&1){let e=b();t(0,"button",52),g("click",function(){let s=u(e).$implicit,c=d(3);return x(c.generateReport(s.value))}),o(1),i()}if(a&2){let e=n.$implicit;l(),p(e.label)}}function mt(a,n){if(a&1&&(t(0,"div",96),k(1,ct,2,1,"button",51,Se),i()),a&2){let e=d(2);l(),E(e.panelReportOptions())}}function _t(a,n){if(a&1){let e=b();t(0,"app-select",45),g("valueChange",function(s){u(e);let c=d(2);return x(c.drawerIssueFilter.set(s))}),i()}if(a&2){let e=d(2);w("options",e.drawerIssueFilterOptions())("value",e.drawerIssueFilter())}}function ut(a,n){if(a&1){let e=b();t(0,"button",66),g("click",function(){u(e);let s=d(2);return s.drawerSearchQuery.set(""),x(s.drawerIssueFilter.set(""))}),o(1,"\u2715 Clear"),i()}}function xt(a,n){a&1&&(t(0,"div",101),o(1,"No pages recorded for this crawl."),i())}function gt(a,n){a&1&&(t(0,"div",101),o(1,"No pages match your search."),i())}function Ct(a,n){if(a&1&&(t(0,"span",76),o(1),i()),a&2){let e=n.$implicit;l(),p(e)}}function ft(a,n){if(a&1&&(t(0,"span",77),o(1),i()),a&2){let e=d(2).$implicit;l(),D("+",e.issues.length-2,"")}}function vt(a,n){if(a&1&&(t(0,"div",73),k(1,Ct,2,1,"span",76,P),C(3,ft,2,1,"span",77),i()),a&2){let e=d().$implicit;l(),E(e.issues.slice(0,2)),l(2),_(e.issues.length>2?3:-1)}}function ht(a,n){a&1&&(t(0,"span",74),o(1,"\u2713 OK"),i())}function wt(a,n){if(a&1&&(t(0,"span",88),o(1),i()),a&2){let e=n.$implicit;l(),p(e)}}function bt(a,n){if(a&1&&(t(0,"div",84)(1,"span",82),o(2,"H1 Tags"),i(),t(3,"div",87),k(4,wt,2,1,"span",88,P),i()()),a&2){let e=d(2).$implicit;l(4),E(e.h1Tags)}}function St(a,n){if(a&1&&(t(0,"a",85),o(1),i()),a&2){let e=d(2).$implicit;w("href",e.canonicalUrl,B),l(),p(e.canonicalUrl)}}function kt(a,n){a&1&&(t(0,"span",86),o(1,"Not set"),i())}function Et(a,n){if(a&1&&(t(0,"tr",75)(1,"td",78)(2,"div",79)(3,"div",80)(4,"div",81)(5,"span",82),o(6,"Full Title"),i(),t(7,"span",83),o(8),i()(),t(9,"div",84)(10,"span",82),o(11,"Meta Description"),i(),t(12,"span",83),o(13),i()(),C(14,bt,6,0,"div",84),t(15,"div",81)(16,"span",82),o(17,"Internal Links"),i(),t(18,"span",83),o(19),i()(),t(20,"div",81)(21,"span",82),o(22,"External Links"),i(),t(23,"span",83),o(24),i()(),t(25,"div",81)(26,"span",82),o(27,"Canonical"),i(),t(28,"span",83),C(29,St,2,2,"a",85)(30,kt,2,0,"span",86),i()()()()()()),a&2){let e,r,s=d().$implicit;l(8),p(s.title||"No title tag"),l(4),f("page-detail__value--muted",!s.metaDescription),l(),p(s.metaDescription||"No meta description set"),l(),_(s.h1Tags!=null&&s.h1Tags.length?14:-1),l(5),p((e=s.internalLinks)!==null&&e!==void 0?e:"\u2014"),l(5),p((r=s.externalLinks)!==null&&r!==void 0?r:"\u2014"),l(5),_(s.hasCanonical&&s.canonicalUrl?29:30)}}function yt(a,n){if(a&1){let e=b();t(0,"tr",67),g("click",function(){let s=u(e).$implicit,c=d(4);return x(c.toggleDrawerExpand(s.url))}),t(1,"td",68)(2,"span",69),o(3,"\u25B6"),i()(),t(4,"td",70)(5,"a",71),g("click",function(s){return u(e),x(s.stopPropagation())}),o(6),i()(),t(7,"td",72),o(8),i(),t(9,"td")(10,"span",9),o(11),i()(),t(12,"td"),o(13),i(),t(14,"td"),o(15),i(),t(16,"td"),C(17,vt,4,1,"div",73)(18,ht,2,0,"span",74),i()(),C(19,Et,31,8,"tr",75)}if(a&2){let e,r=n.$implicit,s=d(4);f("row--error",s.isBroken(r))("row--expanded",s.expandedDrawerUrl()===r.url),l(2),f("expanded",s.expandedDrawerUrl()===r.url),l(3),w("href",r.url,B),l(),p(r.url),l(2),p(r.title||"\u2014"),l(2),F(s.statusClass(r.statusCode)),l(),p(r.statusCode||"\u2014"),l(2),p(r.loadTime?r.loadTime+"ms":"\u2014"),l(2),p((e=r.wordCount)!==null&&e!==void 0?e:"\u2014"),l(2),_(r.issues!=null&&r.issues.length?17:18),l(2),_(s.expandedDrawerUrl()===r.url?19:-1)}}function Tt(a,n){if(a&1&&(t(0,"div",102)(1,"table",103)(2,"thead")(3,"tr"),T(4,"th"),t(5,"th"),o(6,"URL"),i(),t(7,"th"),o(8,"Title"),i(),t(9,"th"),o(10,"Status"),i(),t(11,"th"),o(12,"Load"),i(),t(13,"th"),o(14,"Words"),i(),t(15,"th"),o(16,"Issues"),i()()(),t(17,"tbody"),k(18,yt,20,16,null,null,V),i()()()),a&2){let e=d(3);l(18),E(e.filteredDrawerPages())}}function Dt(a,n){if(a&1&&C(0,xt,2,0,"div",101)(1,gt,2,0,"div",101)(2,Tt,20,0,"div",102),a&2){let e,r=d(2);_(((e=r.crawl().discoveredUrls)!==null&&e!==void 0?e:oe(1,be)).length===0?0:r.filteredDrawerPages().length===0?1:2)}}function It(a,n){a&1&&(t(0,"div",101),o(1,"No broken links found \u2014 your site is clean. \u2713"),i())}function Bt(a,n){a&1&&(t(0,"div",101),o(1,"No broken pages match your search."),i())}function Pt(a,n){if(a&1&&(t(0,"span",88),o(1),i()),a&2){let e=n.$implicit;l(),p(e)}}function Ft(a,n){if(a&1&&(t(0,"div",84)(1,"span",82),o(2,"H1 Tags"),i(),t(3,"div",87),k(4,Pt,2,1,"span",88,P),i()()),a&2){let e=d(2).$implicit;l(4),E(e.h1Tags)}}function Vt(a,n){if(a&1&&(t(0,"a",85),o(1),i()),a&2){let e=d(2).$implicit;w("href",e.canonicalUrl,B),l(),p(e.canonicalUrl)}}function Ut(a,n){a&1&&(t(0,"span",86),o(1,"Not set"),i())}function Mt(a,n){if(a&1&&(t(0,"tr",75)(1,"td",109)(2,"div",79)(3,"div",80)(4,"div",81)(5,"span",82),o(6,"Full Title"),i(),t(7,"span",83),o(8),i()(),t(9,"div",84)(10,"span",82),o(11,"Meta Description"),i(),t(12,"span",83),o(13),i()(),C(14,Ft,6,0,"div",84),t(15,"div",81)(16,"span",82),o(17,"Internal Links"),i(),t(18,"span",83),o(19),i()(),t(20,"div",81)(21,"span",82),o(22,"External Links"),i(),t(23,"span",83),o(24),i()(),t(25,"div",81)(26,"span",82),o(27,"Canonical"),i(),t(28,"span",83),C(29,Vt,2,2,"a",85)(30,Ut,2,0,"span",86),i()()()()()()),a&2){let e,r,s=d().$implicit;l(8),p(s.title||"No title tag"),l(4),f("page-detail__value--muted",!s.metaDescription),l(),p(s.metaDescription||"No meta description set"),l(),_(s.h1Tags!=null&&s.h1Tags.length?14:-1),l(5),p((e=s.internalLinks)!==null&&e!==void 0?e:"\u2014"),l(5),p((r=s.externalLinks)!==null&&r!==void 0?r:"\u2014"),l(5),_(s.hasCanonical&&s.canonicalUrl?29:30)}}function zt(a,n){if(a&1){let e=b();t(0,"tr",105),g("click",function(){let s=u(e).$implicit,c=d(4);return x(c.toggleDrawerExpand(s.url))}),t(1,"td",68)(2,"span",69),o(3,"\u25B6"),i()(),t(4,"td",70)(5,"a",71),g("click",function(s){return u(e),x(s.stopPropagation())}),o(6),i()(),t(7,"td")(8,"span",106),o(9),i()(),t(10,"td",72),o(11),i(),t(12,"td"),o(13),i(),t(14,"td",107)(15,"button",108),g("click",function(s){let c=u(e).$implicit;return d(4).rescanPage(c.url),x(s.stopPropagation())}),o(16),i()()(),C(17,Mt,31,8,"tr",75)}if(a&2){let e=n.$implicit,r=d(4);f("row--rescanning",r.rescaningUrl()===e.url)("row--expanded",r.expandedDrawerUrl()===e.url),l(2),f("expanded",r.expandedDrawerUrl()===e.url),l(3),w("href",e.url,B),l(),p(e.url),l(3),p(e.statusCode||"Failed"),l(2),p(e.title||"\u2014"),l(2),p(e.loadTime!=null?e.loadTime+"ms":"\u2014"),l(2),w("disabled",r.rescaningUrl()!==null),l(),p(r.rescaningUrl()===e.url?"\u23F3":"\u{1F504}"),l(),_(r.expandedDrawerUrl()===e.url?17:-1)}}function Lt(a,n){if(a&1&&(t(0,"p",104),o(1,"Pages returning HTTP 4xx/5xx errors. Fix or remove them to improve crawlability."),i(),t(2,"div",102)(3,"table",103)(4,"thead")(5,"tr"),T(6,"th"),t(7,"th"),o(8,"URL"),i(),t(9,"th"),o(10,"Status"),i(),t(11,"th"),o(12,"Title"),i(),t(13,"th"),o(14,"Load Time"),i(),T(15,"th"),i()(),t(16,"tbody"),k(17,zt,18,14,null,null,V),i()()()),a&2){let e=d(3);l(17),E(e.filteredBrokenPages())}}function Ot(a,n){if(a&1&&C(0,It,2,0,"div",101)(1,Bt,2,0,"div",101)(2,Lt,19,0),a&2){let e=d(2);_(e.brokenPages().length===0?0:e.filteredBrokenPages().length===0?1:2)}}function $t(a,n){a&1&&(t(0,"div",101),o(1,"No pages with issues \u2014 everything looks good. \u2713"),i())}function Rt(a,n){if(a&1){let e=b();t(0,"button",112),g("click",function(){let s=u(e).$implicit,c=d(4);return x(c.issueFilter.set(s.label))}),o(1),i()}if(a&2){let e=n.$implicit,r=d(4);f("active",r.issueFilter()===e.label),l(),_e("",e.label," (",e.count,")")}}function At(a,n){a&1&&(t(0,"div",115)(1,"div",118)(2,"span",76),o(3,"Missing title tag"),i(),t(4,"span",119),o(5,"No <title> element \u2014 required for SEO."),i()(),t(6,"div",118)(7,"span",76),o(8,"Missing meta description"),i(),t(9,"span",119),o(10,"No meta description \u2014 affects click-through rates."),i()(),t(11,"div",118)(12,"span",76),o(13,"Missing H1 tag"),i(),t(14,"span",119),o(15,"No <h1> heading \u2014 every page should have exactly one."),i()(),t(16,"div",118)(17,"span",76),o(18,"Multiple H1 tags"),i(),t(19,"span",119),o(20,"More than one <h1> found \u2014 dilutes page focus."),i()(),t(21,"div",118)(22,"span",76),o(23,"Low word count"),i(),t(24,"span",119),o(25,"Fewer than 100 words \u2014 thin content ranks lower."),i()(),t(26,"div",118)(27,"span",76),o(28,"Slow page load"),i(),t(29,"span",119),o(30,"Over 3,000ms \u2014 penalised in Core Web Vitals."),i()()())}function Nt(a,n){if(a&1&&(t(0,"span",76),o(1),i()),a&2){let e=n.$implicit;l(),p(e)}}function Wt(a,n){if(a&1&&(t(0,"span",88),o(1),i()),a&2){let e=n.$implicit;l(),p(e)}}function Gt(a,n){if(a&1&&(t(0,"div",84)(1,"span",82),o(2,"H1 Tags"),i(),t(3,"div",87),k(4,Wt,2,1,"span",88,P),i()()),a&2){let e=d(2).$implicit;l(4),E(e.h1Tags)}}function jt(a,n){if(a&1&&(t(0,"a",85),o(1),i()),a&2){let e=d(2).$implicit;w("href",e.canonicalUrl,B),l(),p(e.canonicalUrl)}}function Ht(a,n){a&1&&(t(0,"span",86),o(1,"Not set"),i())}function Qt(a,n){if(a&1&&(t(0,"tr",75)(1,"td",109)(2,"div",79)(3,"div",80)(4,"div",81)(5,"span",82),o(6,"Full Title"),i(),t(7,"span",83),o(8),i()(),t(9,"div",84)(10,"span",82),o(11,"Meta Description"),i(),t(12,"span",83),o(13),i()(),C(14,Gt,6,0,"div",84),t(15,"div",81)(16,"span",82),o(17,"Internal Links"),i(),t(18,"span",83),o(19),i()(),t(20,"div",81)(21,"span",82),o(22,"External Links"),i(),t(23,"span",83),o(24),i()(),t(25,"div",81)(26,"span",82),o(27,"Canonical"),i(),t(28,"span",83),C(29,jt,2,2,"a",85)(30,Ht,2,0,"span",86),i()()()()()()),a&2){let e,r,s=d().$implicit;l(8),p(s.title||"No title tag"),l(4),f("page-detail__value--muted",!s.metaDescription),l(),p(s.metaDescription||"No meta description set"),l(),_(s.h1Tags!=null&&s.h1Tags.length?14:-1),l(5),p((e=s.internalLinks)!==null&&e!==void 0?e:"\u2014"),l(5),p((r=s.externalLinks)!==null&&r!==void 0?r:"\u2014"),l(5),_(s.hasCanonical&&s.canonicalUrl?29:30)}}function qt(a,n){if(a&1){let e=b();t(0,"tr",67),g("click",function(){let s=u(e).$implicit,c=d(4);return x(c.toggleDrawerExpand(s.url))}),t(1,"td",68)(2,"span",69),o(3,"\u25B6"),i()(),t(4,"td",70)(5,"a",71),g("click",function(s){return u(e),x(s.stopPropagation())}),o(6),i()(),t(7,"td")(8,"div",73),k(9,Nt,2,1,"span",76,P),i()(),t(11,"td")(12,"span",9),o(13),i()(),t(14,"td"),o(15),i(),t(16,"td",107)(17,"button",108),g("click",function(s){let c=u(e).$implicit;return d(4).rescanPage(c.url),x(s.stopPropagation())}),o(18),i()()(),C(19,Qt,31,8,"tr",75)}if(a&2){let e=n.$implicit,r=d(4);f("row--rescanning",r.rescaningUrl()===e.url)("row--expanded",r.expandedDrawerUrl()===e.url),l(2),f("expanded",r.expandedDrawerUrl()===e.url),l(3),w("href",e.url,B),l(),p(e.url),l(3),E(e.issues),l(3),F(r.statusClass(e.statusCode)),l(),p(e.statusCode||"\u2014"),l(2),p(e.loadTime!=null?e.loadTime+"ms":"\u2014"),l(2),w("disabled",r.rescaningUrl()!==null),l(),p(r.rescaningUrl()===e.url?"\u23F3":"\u{1F504}"),l(),_(r.expandedDrawerUrl()===e.url?19:-1)}}function Kt(a,n){a&1&&(t(0,"tr")(1,"td",120),o(2,"No pages match this filter."),i()())}function Yt(a,n){if(a&1){let e=b();t(0,"p",104),o(1,"Pages with one or more technical problems. Addressing these improves your health score."),i(),t(2,"div",110)(3,"span",111),o(4,"Filter:"),i(),t(5,"button",112),g("click",function(){u(e);let s=d(3);return x(s.issueFilter.set(""))}),o(6),i(),k(7,Rt,2,4,"button",113,Ue),i(),t(9,"button",114),g("click",function(){u(e);let s=d(3);return x(s.showLegend.set(!s.showLegend()))}),o(10),i(),C(11,At,31,0,"div",115),t(12,"div",102)(13,"table",103)(14,"thead")(15,"tr"),T(16,"th"),t(17,"th"),o(18,"URL"),i(),t(19,"th"),o(20,"Issues"),i(),t(21,"th"),o(22,"Status"),i(),t(23,"th",116),g("click",function(){u(e);let s=d(3);return x(s.cycleIssueLoadSort())}),o(24,"Load "),t(25,"span",117),o(26),i()(),T(27,"th"),i()(),t(28,"tbody"),k(29,qt,20,15,null,null,V),C(31,Kt,3,0,"tr"),i()()()}if(a&2){let e=d(3);l(5),f("active",e.issueFilter()===""),l(),D("All (",e.issuePages().length,")"),l(),E(e.issueTypes()),l(3),D("What do these issues mean? ",e.showLegend()?"\u25B4":"\u25BE",""),l(),_(e.showLegend()?11:-1),l(15),p(e.issueLoadSort()==="asc"?"\u2191":e.issueLoadSort()==="desc"?"\u2193":"\u2195"),l(3),E(e.filteredIssuePagesSearched()),l(2),_(e.filteredIssuePagesSearched().length===0?31:-1)}}function Jt(a,n){if(a&1&&C(0,$t,2,0,"div",101)(1,Yt,32,7),a&2){let e=d(2);_(e.issuePages().length===0?0:1)}}function Xt(a,n){a&1&&(t(0,"div",101),o(1,"All crawled pages have meta descriptions. \u2713"),i())}function Zt(a,n){a&1&&(t(0,"div",101),o(1,"No pages match your search."),i())}function ei(a,n){if(a&1&&(t(0,"span",88),o(1),i()),a&2){let e=n.$implicit;l(),p(e)}}function ti(a,n){if(a&1&&(t(0,"div",84)(1,"span",82),o(2,"H1 Tags"),i(),t(3,"div",87),k(4,ei,2,1,"span",88,P),i()()),a&2){let e=d(2).$implicit;l(4),E(e.h1Tags)}}function ii(a,n){if(a&1&&(t(0,"a",85),o(1),i()),a&2){let e=d(2).$implicit;w("href",e.canonicalUrl,B),l(),p(e.canonicalUrl)}}function ni(a,n){a&1&&(t(0,"span",86),o(1,"Not set"),i())}function ai(a,n){if(a&1&&(t(0,"tr",75)(1,"td",109)(2,"div",79)(3,"div",80)(4,"div",81)(5,"span",82),o(6,"Full Title"),i(),t(7,"span",83),o(8),i()(),t(9,"div",84)(10,"span",82),o(11,"Meta Description"),i(),t(12,"span",122),o(13,"No meta description set"),i()(),C(14,ti,6,0,"div",84),t(15,"div",81)(16,"span",82),o(17,"Word Count"),i(),t(18,"span",83),o(19),i()(),t(20,"div",81)(21,"span",82),o(22,"Load Time"),i(),t(23,"span",83),o(24),i()(),t(25,"div",81)(26,"span",82),o(27,"Canonical"),i(),t(28,"span",83),C(29,ii,2,2,"a",85)(30,ni,2,0,"span",86),i()()()()()()),a&2){let e,r=d().$implicit;l(8),p(r.title||"No title tag"),l(6),_(r.h1Tags!=null&&r.h1Tags.length?14:-1),l(5),p((e=r.wordCount)!==null&&e!==void 0?e:"\u2014"),l(5),p(r.loadTime!=null?r.loadTime+"ms":"\u2014"),l(5),_(r.hasCanonical&&r.canonicalUrl?29:30)}}function oi(a,n){if(a&1){let e=b();t(0,"tr",67),g("click",function(){let s=u(e).$implicit,c=d(4);return x(c.toggleDrawerExpand(s.url))}),t(1,"td",68)(2,"span",69),o(3,"\u25B6"),i()(),t(4,"td",70)(5,"a",71),g("click",function(s){return u(e),x(s.stopPropagation())}),o(6),i()(),t(7,"td",72),o(8),i(),t(9,"td")(10,"span",9),o(11),i()(),t(12,"td"),o(13),i(),t(14,"td",107)(15,"button",121),g("click",function(s){let c=u(e).$implicit;return d(4).rescanPage(c.url),x(s.stopPropagation())}),o(16),i()()(),C(17,ai,31,5,"tr",75)}if(a&2){let e,r=n.$implicit,s=d(4);f("row--expanded",s.expandedDrawerUrl()===r.url)("row--rescanning",s.rescaningUrl()===r.url),l(2),f("expanded",s.expandedDrawerUrl()===r.url),l(3),w("href",r.url,B),l(),p(r.url),l(2),p(r.title||"\u2014"),l(2),F(s.statusClass(r.statusCode)),l(),p(r.statusCode||"\u2014"),l(2),p((e=r.wordCount)!==null&&e!==void 0?e:"\u2014"),l(2),w("disabled",s.rescaningUrl()!==null),l(),p(s.rescaningUrl()===r.url?"\u23F3":"\u{1F504}"),l(),_(s.expandedDrawerUrl()===r.url?17:-1)}}function ri(a,n){if(a&1){let e=b();t(0,"p",104),o(1,"Add a unique meta description (120\u2013160 chars) to each affected page."),i(),t(2,"div",102)(3,"table",103)(4,"thead")(5,"tr"),T(6,"th"),t(7,"th"),o(8,"URL"),i(),t(9,"th"),o(10,"Title"),i(),t(11,"th"),o(12,"Status"),i(),t(13,"th",116),g("click",function(){u(e);let s=d(3);return x(s.cycleMetaWordSort())}),o(14,"Words "),t(15,"span",117),o(16),i()(),T(17,"th"),i()(),t(18,"tbody"),k(19,oi,18,16,null,null,V),i()()()}if(a&2){let e=d(3);l(16),p(e.metaWordSort()==="asc"?"\u2191":e.metaWordSort()==="desc"?"\u2193":"\u2195"),l(3),E(e.filteredMetaPages())}}function li(a,n){if(a&1&&C(0,Xt,2,0,"div",101)(1,Zt,2,0,"div",101)(2,ri,21,1),a&2){let e=d(2);_(e.missingMetaPages().length===0?0:e.filteredMetaPages().length===0?1:2)}}function si(a,n){a&1&&(t(0,"div",101),o(1,"No duplicate titles \u2014 each page has a unique title. \u2713"),i())}function di(a,n){a&1&&(t(0,"div",101),o(1,"No duplicate title groups match your search."),i())}function pi(a,n){if(a&1&&(t(0,"span",88),o(1),i()),a&2){let e=n.$implicit;l(),p(e)}}function ci(a,n){if(a&1&&(t(0,"div",84)(1,"span",82),o(2,"H1 Tags"),i(),t(3,"div",87),k(4,pi,2,1,"span",88,P),i()()),a&2){let e=d(2).$implicit;l(4),E(e.h1Tags)}}function mi(a,n){if(a&1&&(t(0,"a",85),o(1),i()),a&2){let e=d(2).$implicit;w("href",e.canonicalUrl,B),l(),p(e.canonicalUrl)}}function _i(a,n){a&1&&(t(0,"span",86),o(1,"Not set"),i())}function ui(a,n){if(a&1&&(t(0,"tr",75)(1,"td",109)(2,"div",79)(3,"div",80)(4,"div",84)(5,"span",82),o(6,"Shared Title"),i(),t(7,"span",83),o(8),i()(),t(9,"div",84)(10,"span",82),o(11,"Meta Description"),i(),t(12,"span",83),o(13),i()(),C(14,ci,6,0,"div",84),t(15,"div",81)(16,"span",82),o(17,"Word Count"),i(),t(18,"span",83),o(19),i()(),t(20,"div",81)(21,"span",82),o(22,"Load Time"),i(),t(23,"span",83),o(24),i()(),t(25,"div",81)(26,"span",82),o(27,"Canonical"),i(),t(28,"span",83),C(29,mi,2,2,"a",85)(30,_i,2,0,"span",86),i()()()()()()),a&2){let e,r=d().$implicit;l(8),p(r.title||"(no title)"),l(4),f("page-detail__value--muted",!r.metaDescription),l(),p(r.metaDescription||"No meta description set"),l(),_(r.h1Tags!=null&&r.h1Tags.length?14:-1),l(5),p((e=r.wordCount)!==null&&e!==void 0?e:"\u2014"),l(5),p(r.loadTime!=null?r.loadTime+"ms":"\u2014"),l(5),_(r.hasCanonical&&r.canonicalUrl?29:30)}}function xi(a,n){if(a&1){let e=b();t(0,"tr",67),g("click",function(){let s=u(e).$implicit,c=d(6);return x(c.toggleDrawerExpand(s.url))}),t(1,"td",68)(2,"span",69),o(3,"\u25B6"),i()(),t(4,"td",70)(5,"a",71),g("click",function(s){return u(e),x(s.stopPropagation())}),o(6),i()(),t(7,"td")(8,"span",9),o(9),i()(),t(10,"td"),o(11),i(),t(12,"td"),o(13),i(),t(14,"td",107)(15,"button",121),g("click",function(s){let c=u(e).$implicit;return d(6).rescanPage(c.url),x(s.stopPropagation())}),o(16),i()()(),C(17,ui,31,8,"tr",75)}if(a&2){let e,r=n.$implicit,s=d(6);f("row--expanded",s.expandedDrawerUrl()===r.url)("row--rescanning",s.rescaningUrl()===r.url),l(2),f("expanded",s.expandedDrawerUrl()===r.url),l(3),w("href",r.url,B),l(),p(r.url),l(2),F(s.statusClass(r.statusCode)),l(),p(r.statusCode||"\u2014"),l(2),p(r.loadTime!=null?r.loadTime+"ms":"\u2014"),l(2),p((e=r.wordCount)!==null&&e!==void 0?e:"\u2014"),l(2),w("disabled",s.rescaningUrl()!==null),l(),p(s.rescaningUrl()===r.url?"\u23F3":"\u{1F504}"),l(),_(s.expandedDrawerUrl()===r.url?17:-1)}}function gi(a,n){if(a&1&&(t(0,"tr",127)(1,"td",128)(2,"table",129)(3,"thead")(4,"tr"),T(5,"th"),t(6,"th"),o(7,"URL"),i(),t(8,"th"),o(9,"Status"),i(),t(10,"th"),o(11,"Load"),i(),t(12,"th"),o(13,"Words"),i(),T(14,"th"),i()(),t(15,"tbody"),k(16,xi,18,16,null,null,V),i()()()()),a&2){let e=d().$implicit;l(16),E(e.pages)}}function Ci(a,n){if(a&1){let e=b();t(0,"tr",124),g("click",function(){let s=u(e).$implicit,c=d(4);return x(c.toggleGroupExpand(s.title))}),t(1,"td",68)(2,"span",69),o(3,"\u25B6"),i()(),t(4,"td",125),o(5),i(),t(6,"td")(7,"span",126),o(8),i()()(),C(9,gi,18,0,"tr",127)}if(a&2){let e=n.$implicit,r=d(4);f("dup-group-row--expanded",r.expandedGroupTitle()===e.title),l(2),f("expanded",r.expandedGroupTitle()===e.title),l(3),p(e.title||"(no title)"),l(3),p(e.pages.length),l(),_(r.expandedGroupTitle()===e.title?9:-1)}}function fi(a,n){if(a&1&&(t(0,"p",104),o(1,"Give each page a distinct <title> that reflects its unique content."),i(),t(2,"table",123)(3,"thead")(4,"tr"),T(5,"th"),t(6,"th"),o(7,"Shared Title"),i(),t(8,"th"),o(9,"Pages"),i()()(),t(10,"tbody"),k(11,Ci,10,7,null,null,Me),i()()),a&2){let e=d(3);l(11),E(e.filteredDuplicateTitleGroups())}}function vi(a,n){if(a&1&&C(0,si,2,0,"div",101)(1,di,2,0,"div",101)(2,fi,13,0),a&2){let e=d(2);_(e.duplicateTitleGroups().length===0?0:e.filteredDuplicateTitleGroups().length===0?1:2)}}function hi(a,n){if(a&1){let e=b();t(0,"div",89),g("click",function(){u(e);let s=d();return x(s.closePanel())}),i(),t(1,"div",90)(2,"div",91)(3,"h3",92),o(4),i(),t(5,"div",93),C(6,pt,2,3,"span",12),t(7,"div",94)(8,"button",95),g("click",function(){u(e);let s=d();return x(s.showPanelReportMenu.set(!s.showPanelReportMenu()))}),o(9),i(),C(10,mt,3,0,"div",96),i(),t(11,"button",97),g("click",function(){u(e);let s=d();return x(s.closePanel())}),o(12,"\u2715"),i()()(),t(13,"div",98)(14,"div",99)(15,"div",41)(16,"app-select",42),g("valueChange",function(s){u(e);let c=d();return x(c.drawerSearchType.set(s))}),i(),T(17,"div",43),t(18,"input",44),g("input",function(s){u(e);let c=d();return x(c.drawerSearchQuery.set(s.target.value))}),i()(),C(19,_t,1,2,"app-select",100)(20,ut,2,0,"button",46),i(),C(21,Dt,3,2)(22,Ot,3,1)(23,Jt,2,1)(24,li,3,1)(25,vi,3,1),i()()}if(a&2){let e,r=d();l(4),p(r.panelTitle()),l(2),_(r.reportMsg()?6:-1),l(),f("open",r.showPanelReportMenu()),l(),w("disabled",r.generatingReport()),l(),D(" ",r.generatingReport()?"\u23F3":"\u2B07 Export"," "),l(),_(r.showPanelReportMenu()?10:-1),l(6),w("options",r.searchTypeOptions)("value",r.drawerSearchType()),l(2),w("value",r.drawerSearchQuery())("placeholder",r.drawerSearchType()==="url"?"Search by URL\u2026":"Search by title\u2026"),l(),_(r.activePanel()==="pages"?19:-1),l(),_(r.drawerSearchQuery()||r.drawerIssueFilter()?20:-1),l(),_((e=r.activePanel())==="pages"?21:e==="broken"?22:e==="issues"?23:e==="meta"?24:e==="titles"?25:-1)}}var we=class a{constructor(){this.canGenerateReports=!1;this.bloomsnavigate=new K;this.bloomserror=new K;this.crawlService=q(Ce);this.reportService=q(fe);this.loading=v(!0);this.crawl=v(null);this.activePanel=v(null);this.expandedPageUrl=v(null);this.expandedDrawerUrl=v(null);this.selectedSitemap=v("");this.pageFilter=v("all");this.showSitemapStructure=v(!1);this.issueFilter=v("");this.showLegend=v(!1);this.rescaningUrl=v(null);this.showReportMenu=v(!1);this.showPanelReportMenu=v(!1);this.generatingReport=v(!1);this.reportMsg=v("");this.reportMsgOk=v(!1);this.mainSearchQuery=v("");this.mainSearchType=v("url");this.mainIssueFilter=v("");this.drawerSearchQuery=v("");this.drawerSearchType=v("url");this.drawerIssueFilter=v("");this.metaWordSort=v(null);this.issueLoadSort=v(null);this.expandedGroupTitle=v(null);this.reportOptions=[{value:"pages-crawled",label:"\u{1F4C4} Pages Crawled"},{value:"broken-links",label:"\u26A0 Broken Links"},{value:"pages-with-issues",label:"\u25B3 Pages with Issues"},{value:"missing-meta",label:"\u{1F3F7} Missing Meta Description"},{value:"duplicate-title",label:"\u{1F4CB} Duplicate Titles"}];this.panelReportOptions=y(()=>{let n=this.activePanel();return n?{pages:[{value:"pages-crawled",label:"\u{1F4C4} Pages Crawled"}],broken:[{value:"broken-links",label:"\u26A0 Broken Links"}],issues:[{value:"pages-with-issues",label:"\u25B3 Pages with Issues"}],meta:[{value:"missing-meta",label:"\u{1F3F7} Missing Meta Description"}],titles:[{value:"duplicate-title",label:"\u{1F4CB} Duplicate Titles"}]}[n]:this.reportOptions});this.successCount=y(()=>(this.crawl()?.discoveredUrls??[]).filter(n=>n.statusCode&&n.statusCode>=200&&n.statusCode<400).length);this.failedCount=y(()=>(this.crawl()?.discoveredUrls??[]).filter(n=>!n.statusCode||n.statusCode===0||n.statusCode>=400).length);this.brokenPages=y(()=>(this.crawl()?.discoveredUrls??[]).filter(n=>!n.statusCode||n.statusCode===0||n.statusCode>=400));this.issuePages=y(()=>(this.crawl()?.discoveredUrls??[]).filter(n=>n.issues&&n.issues.length>0));this.missingMetaPages=y(()=>(this.crawl()?.discoveredUrls??[]).filter(n=>!n.metaDescription));this.duplicateTitleGroups=y(()=>{let n=new Map;for(let e of this.crawl()?.discoveredUrls??[]){let r=e.title??"";n.has(r)||n.set(r,[]),n.get(r).push(e)}return Array.from(n.entries()).filter(([,e])=>e.length>1).map(([e,r])=>({title:e,pages:r})).sort((e,r)=>r.pages.length-e.pages.length)});this.issueTypes=y(()=>{let n=new Map;for(let e of this.issuePages())for(let r of e.issues??[])n.set(r,(n.get(r)??0)+1);return Array.from(n.entries()).map(([e,r])=>({label:e,count:r})).sort((e,r)=>r.count-e.count)});this.searchTypeOptions=[{value:"url",label:"URL"},{value:"title",label:"Title"}];this.drawerIssueFilterOptions=y(()=>[{value:"",label:"All pages"},{value:"any",label:"Has any issue"},...this.issueTypes().map(n=>({value:n.label,label:`${n.label} (${n.count})`}))]);this.filteredIssuePages=y(()=>{let n=this.issueFilter();return n?this.issuePages().filter(e=>e.issues?.includes(n)):this.issuePages()});this.mainIssueTypes=y(()=>{let n=new Map;for(let e of this.crawl()?.discoveredUrls??[])for(let r of e.issues??[])n.set(r,(n.get(r)??0)+1);return Array.from(n.entries()).map(([e,r])=>({label:e,count:r})).sort((e,r)=>r.count-e.count)});this.mainIssueFilterOptions=y(()=>[{value:"",label:"All pages"},{value:"any",label:"Has any issue"},...this.mainIssueTypes().map(n=>({value:n.label,label:`${n.label} (${n.count})`}))]);this.filteredPages=y(()=>{let n=this.crawl()?.discoveredUrls??[],e=this.selectedSitemap(),r=this.pageFilter(),s=this.mainSearchQuery().trim().toLowerCase(),c=this.mainSearchType(),h=this.mainIssueFilter(),I=e?n.filter(S=>S.sitemapSource===e):n;return r==="success"?I=I.filter(S=>S.statusCode&&S.statusCode>=200&&S.statusCode<400):r==="failed"&&(I=I.filter(S=>!S.statusCode||S.statusCode===0||S.statusCode>=400)),s&&(I=I.filter(S=>c==="url"?S.url.toLowerCase().includes(s):(S.title??"").toLowerCase().includes(s))),h==="any"?I=I.filter(S=>S.issues&&S.issues.length>0):h&&(I=I.filter(S=>S.issues?.includes(h))),I});this.filteredDrawerPages=y(()=>{let n=this.crawl()?.discoveredUrls??[],e=this.drawerSearchQuery().trim().toLowerCase(),r=this.drawerSearchType(),s=this.drawerIssueFilter(),c=[...n];return e&&(c=c.filter(h=>r==="url"?h.url.toLowerCase().includes(e):(h.title??"").toLowerCase().includes(e))),s==="any"?c=c.filter(h=>h.issues&&h.issues.length>0):s&&(c=c.filter(h=>h.issues?.includes(s))),c});this.filteredBrokenPages=y(()=>{let n=this.drawerSearchQuery().trim().toLowerCase(),e=this.drawerSearchType(),r=this.brokenPages();return n&&(r=r.filter(s=>e==="url"?s.url.toLowerCase().includes(n):(s.title??"").toLowerCase().includes(n))),r});this.filteredIssuePagesSearched=y(()=>{let n=this.drawerSearchQuery().trim().toLowerCase(),e=this.drawerSearchType(),r=this.issueLoadSort(),s=[...this.filteredIssuePages()];return n&&(s=s.filter(c=>e==="url"?c.url.toLowerCase().includes(n):(c.title??"").toLowerCase().includes(n))),r&&s.sort((c,h)=>r==="asc"?(c.loadTime??0)-(h.loadTime??0):(h.loadTime??0)-(c.loadTime??0)),s});this.filteredMetaPages=y(()=>{let n=this.drawerSearchQuery().trim().toLowerCase(),e=this.drawerSearchType(),r=this.metaWordSort(),s=[...this.missingMetaPages()];return n&&(s=s.filter(c=>e==="url"?c.url.toLowerCase().includes(n):(c.title??"").toLowerCase().includes(n))),r&&s.sort((c,h)=>r==="asc"?(c.wordCount??0)-(h.wordCount??0):(h.wordCount??0)-(c.wordCount??0)),s});this.filteredDuplicateTitleGroups=y(()=>{let n=this.drawerSearchQuery().trim().toLowerCase(),e=this.drawerSearchType();return n?e==="title"?this.duplicateTitleGroups().filter(r=>r.title.toLowerCase().includes(n)):this.duplicateTitleGroups().map(r=>ie(Y({},r),{pages:r.pages.filter(s=>s.url.toLowerCase().includes(n))})).filter(r=>r.pages.length>0):this.duplicateTitleGroups()});this.selectedSitemapLabel=y(()=>{let n=this.selectedSitemap();return this.crawl()?.sitemapData?.childSitemaps.find(r=>r.url===n)?.label??n});this.panelTitle=y(()=>{let n=this.activePanel();return n?{pages:`Pages Crawled (${this.crawl()?.totalUrlsCrawled??0})`,broken:`Broken Links (${this.brokenPages().length})`,issues:`Pages with Issues (${this.issuePages().length})`,meta:`Missing Meta Description (${this.missingMetaPages().length} pages)`,titles:`Duplicate Titles (${this.duplicateTitleGroups().length} groups)`}[n]:""})}ngOnInit(){let n=this.crawlId??"";if(!n){this.loading.set(!1),this.bloomserror.emit({code:"NO_CRAWL",message:"No crawl to show. Pass crawl-id."});return}this.crawlService.get(n).subscribe({next:e=>{this.crawl.set(e.data),this.loading.set(!1)},error:()=>this.loading.set(!1)})}goBack(){let n={feature:"sitemap-crawl",view:"list",params:{}};this.bloomsnavigate.emit(n),de.emit(Y({type:"navigate"},n))}openPanel(n){this.activePanel.set(n),this.expandedDrawerUrl.set(null),this.issueFilter.set(""),this.showLegend.set(!1),this.showPanelReportMenu.set(!1),this.drawerSearchQuery.set(""),this.drawerSearchType.set("url"),this.drawerIssueFilter.set(""),this.metaWordSort.set(null),this.issueLoadSort.set(null),this.expandedGroupTitle.set(null)}closePanel(){this.activePanel.set(null),this.expandedDrawerUrl.set(null),this.showPanelReportMenu.set(!1)}togglePageExpand(n){this.expandedPageUrl.set(this.expandedPageUrl()===n?null:n)}toggleDrawerExpand(n){this.expandedDrawerUrl.set(this.expandedDrawerUrl()===n?null:n)}toggleGroupExpand(n){this.expandedGroupTitle.set(this.expandedGroupTitle()===n?null:n),this.expandedDrawerUrl.set(null)}cycleMetaWordSort(){let n=this.metaWordSort();this.metaWordSort.set(n===null?"asc":n==="asc"?"desc":null)}cycleIssueLoadSort(){let n=this.issueLoadSort();this.issueLoadSort.set(n===null?"asc":n==="asc"?"desc":null)}selectSitemap(n){this.selectedSitemap.set(this.selectedSitemap()===n?"":n)}isBroken(n){return!n.statusCode||n.statusCode===0||n.statusCode>=400}statusClass(n){return!n||n===0||n>=400?"error":n>=300?"redirect":""}rescanPage(n){let e=this.crawl()?._id;!e||this.rescaningUrl()||(this.rescaningUrl.set(n),this.crawlService.rescanUrl(e,n).subscribe({next:r=>{this.crawl.update(s=>s&&ie(Y({},s),{discoveredUrls:(s.discoveredUrls??[]).map(c=>c.url===n?r.data.page:c),summary:r.data.summary})),this.rescaningUrl.set(null)},error:()=>this.rescaningUrl.set(null)}))}generateReport(n){this.showReportMenu.set(!1),this.showPanelReportMenu.set(!1);let e=this.crawl()?._id;if(!e)return;this.generatingReport.set(!0),this.reportMsg.set("");let r=this.projectId||de.project()?.id||"";this.reportService.generateCrawlReport(r,n,e).subscribe({next:()=>{this.generatingReport.set(!1),this.reportMsg.set("Report queued \u2014 check Reports."),this.reportMsgOk.set(!0),setTimeout(()=>this.reportMsg.set(""),4e3)},error:s=>{this.generatingReport.set(!1),this.reportMsg.set(s.error?.message||"Failed to generate report."),this.reportMsgOk.set(!1),setTimeout(()=>this.reportMsg.set(""),4e3)}})}static{this.\u0275fac=function(e){return new(e||a)}}static{this.\u0275cmp=J({type:a,selectors:[["blooms-sitemap-crawl-detail"]],inputs:{crawlId:"crawlId",projectId:"projectId",canGenerateReports:"canGenerateReports"},outputs:{bloomsnavigate:"bloomsnavigate",bloomserror:"bloomserror"},decls:5,vars:2,consts:[[1,"detail-page"],[1,"page-loading"],[1,"page-error"],[1,"btn","btn-primary",3,"click"],[1,"page-header"],[1,"page-header__left"],[1,"back-btn",3,"click"],[1,"crawl-url"],[1,"crawl-header-meta"],[1,"status-badge"],[1,"meta-sep"],[1,"page-header__right"],[1,"report-msg",3,"report-msg--ok"],[1,"report-dropdown"],[1,"btn","btn-secondary",3,"click","disabled"],[1,"report-menu"],[1,"stats-row"],[1,"stat-chip","stat-chip--health"],[1,"stat-chip__value"],[1,"stat-chip__label"],[1,"stat-chip__bar"],[1,"stat-chip__bar-fill"],[1,"stat-chip"],[1,"insight-grid"],[1,"insight-card",3,"click"],[1,"insight-card__icon"],[1,"insight-card__value"],[1,"insight-card__label"],[1,"insight-card__cta"],[1,"sitemap-structure"],[1,"pages-section"],[1,"pages-section__header"],[1,"pages-section__title"],[1,"pages-filter-label"],[1,"pages-section__actions"],[1,"filter-tabs"],[1,"filter-tab",3,"click"],[1,"filter-tab","filter-tab--success",3,"click"],[1,"filter-tab","filter-tab--failed",3,"click"],[1,"pages-count"],[1,"pages-search-row"],[1,"search-bar"],["size","sm","ariaLabel","Search by",3,"valueChange","options","value"],[1,"search-bar__divider"],["type","text",1,"search-input",3,"input","value","placeholder"],["size","sm","ariaLabel","Issue filter",3,"valueChange","options","value"],[1,"clear-search-btn"],[1,"pages-table-wrap"],[1,"pages-table"],[1,"crawl-footer"],[1,"report-msg"],[1,"report-menu__item"],[1,"report-menu__item",3,"click"],[1,"structure-toggle",3,"click"],[1,"badge","badge--index"],[1,"badge","badge--single"],[1,"structure-toggle__chevron"],[1,"structure-source"],[1,"child-sitemaps"],[1,"child-sitemap",3,"active"],[1,"child-sitemap",3,"click"],[1,"child-sitemap__info"],[1,"child-sitemap__label"],[1,"child-sitemap__url"],[1,"child-sitemap__count"],[1,"clear-filter",3,"click"],[1,"clear-search-btn",3,"click"],[1,"page-row",3,"click"],[1,"td-expand"],[1,"expand-icon"],[1,"td-url"],["target","_blank",1,"page-link",3,"click","href"],[1,"td-title"],[1,"issue-pills"],[1,"ok-badge"],[1,"page-detail-row"],[1,"issue-pill"],[1,"issue-pill","issue-pill--more"],["colspan","7"],[1,"page-detail"],[1,"page-detail__grid"],[1,"page-detail__item"],[1,"page-detail__label"],[1,"page-detail__value"],[1,"page-detail__item","page-detail__item--full"],["target","_blank",1,"page-link",3,"href"],[1,"page-detail__value--muted"],[1,"h1-list"],[1,"h1-tag"],[1,"drawer-backdrop",3,"click"],[1,"drawer"],[1,"drawer__header"],[1,"drawer__title"],[1,"drawer__header-actions"],[1,"report-dropdown","report-dropdown--drawer"],[1,"btn","btn-secondary","btn-sm",3,"click","disabled"],[1,"report-menu","report-menu--left"],["appTooltip","Close",1,"drawer__close",3,"click"],[1,"drawer__body"],[1,"drawer-search-row"],["size","sm","ariaLabel","Issue filter",3,"options","value"],[1,"drawer-empty"],[1,"drawer-table-wrap"],[1,"drawer-table"],[1,"drawer-note"],[1,"page-row","row--error",3,"click"],[1,"status-badge","error"],[1,"td-rescan"],["appTooltip","Re-fetch",1,"rescan-btn",3,"click","disabled"],["colspan","6"],[1,"issue-filter-bar"],[1,"issue-filter-bar__label"],[1,"issue-filter-chip",3,"click"],[1,"issue-filter-chip",3,"active"],[1,"issue-legend__toggle",3,"click"],[1,"issue-legend__grid"],[1,"th-sortable",3,"click"],[1,"sort-icon"],[1,"legend-item"],[1,"legend-desc"],["colspan","6",1,"drawer-empty"],["appTooltip","Re-crawl",1,"rescan-btn",3,"click","disabled"],[1,"page-detail__value","page-detail__value--muted"],[1,"drawer-table","dup-outer-table"],[1,"dup-group-row","page-row",3,"click"],[1,"td-dup-title"],[1,"dup-badge"],[1,"dup-urls-header-row"],["colspan","3"],[1,"drawer-table","dup-group__table"]],template:function(e,r){e&1&&(t(0,"div",0),C(1,ze,2,0,"div",1)(2,Le,7,0,"div",2)(3,dt,150,87),i(),C(4,hi,26,14)),e&2&&(l(),_(r.loading()?1:r.crawl()?3:2),l(3),_(r.activePanel()?4:-1))},dependencies:[Z,xe,ve,ee,he],styles:[`@charset "UTF-8";:host{--color-text: var(--color-text, #5d5f71);--color-text-muted: var(--color-text-muted, #9395a5);--color-bg: var(--color-bg, #f7f5fb);--color-card-bg: var(--color-card-bg, #ffffff);--color-border: var(--color-border, #ede9f6);--color-hover: var(--color-hover, #f5f2fb);--color-accent: var(--color-accent, #e84855);--radius-sm: var(--radius-sm, 6px);--radius-md: var(--radius-md, 10px);--radius-lg: var(--radius-lg, 16px);display:block;font-family:var(--font-sans, "Poppins", system-ui, -apple-system, sans-serif);color:var(--color-text)}:host>*{letter-spacing:normal;word-spacing:normal;line-height:1.5;text-transform:none;text-indent:0;font-style:normal;font-weight:400;font-variant:normal;text-align:left;white-space:normal}*,*:before,*:after{box-sizing:border-box}.btn{display:inline-flex;align-items:center;gap:6px;padding:9px 18px;border-radius:var(--radius-md);font-family:inherit;font-size:13px;font-weight:600;cursor:pointer;border:1px solid transparent;transition:background .15s,border-color .15s,box-shadow .15s,opacity .15s;text-decoration:none;white-space:nowrap}.btn:disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.btn-sm{padding:6px 12px;font-size:12px}.btn-primary{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.btn-primary:hover:not(:disabled){background:#d13d4a;border-color:#d13d4a;box-shadow:0 2px 8px color-mix(in srgb,var(--color-accent) 30%,transparent)}.btn-outline{background:transparent;color:var(--color-text);border-color:var(--color-border)}.btn-outline:hover:not(:disabled){background:var(--color-hover);border-color:#d5d0e4}.btn-ghost{background:transparent;color:var(--color-text-muted);border-color:transparent}.btn-ghost:hover:not(:disabled){background:var(--color-hover);color:var(--color-text)}
2
+ `,`@charset "UTF-8";:host{display:block}.detail-page{display:flex;flex-direction:column;gap:24px;padding:24px 28px;min-height:100%}.page-loading{display:flex;align-items:center;justify-content:center;padding:80px}.page-error{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:80px 24px;color:var(--color-text-muted);font-size:14px}.page-error span{font-size:40px;opacity:.5}.page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap}.page-header__left{display:flex;flex-direction:column;gap:6px;flex:1;min-width:0}.page-header__right{display:flex;align-items:center;gap:10px;flex-shrink:0}.back-btn{background:none;border:none;cursor:pointer;font-size:13px;font-weight:500;color:var(--color-accent, #2563eb);padding:4px 10px;border-radius:6px;display:inline-flex;align-items:center;gap:6px;width:fit-content;transition:background .15s}.back-btn:hover{background:var(--color-primary-soft, #eff6ff)}.crawl-url{font-size:16px;font-weight:700;color:var(--color-text);margin:0;word-break:break-all}.crawl-header-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:12px;color:var(--color-text-muted)}.meta-sep{opacity:.4}.stats-row{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:12px}.stat-chip{background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:10px;padding:14px 16px;display:flex;flex-direction:column;gap:4px}.stat-chip--good .stat-chip__bar-fill{background:#16a34a}.stat-chip--ok .stat-chip__bar-fill{background:#d97706}.stat-chip--bad .stat-chip__bar-fill{background:#dc2626}.stat-chip--green{border-color:#86efac;background:#f0fdf4}.stat-chip--red{border-color:#fca5a5;background:#fff1f2}.stat-chip--amber{border-color:#fde68a;background:#fffbeb}.stat-chip__value{font-size:24px;font-weight:700;color:var(--color-text);line-height:1}.stat-chip__value span{font-size:13px;font-weight:500;color:var(--color-text-muted)}.stat-chip__label{font-size:11px;font-weight:500;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.4px}.stat-chip__bar{height:3px;background:var(--color-border);border-radius:99px;overflow:hidden;margin-top:8px}.stat-chip__bar-fill{height:100%;border-radius:99px;transition:width .6s ease}.insight-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:14px}.insight-card{background:var(--color-card-bg);border:1.5px solid var(--color-border);border-radius:12px;padding:20px 18px;display:flex;flex-direction:column;gap:6px;cursor:pointer;transition:border-color .15s,box-shadow .15s,transform .1s}.insight-card:hover{border-color:var(--color-accent);box-shadow:0 4px 14px #00000014;transform:translateY(-1px)}.insight-card.active{border-color:var(--color-accent);background:var(--color-primary-soft, #eff6ff)}.insight-card.insight-card--warn{border-color:#fca5a5}.insight-card.insight-card--warn:hover,.insight-card.insight-card--warn.active{border-color:#dc2626}.insight-card__icon{font-size:18px}.insight-card__value{font-size:36px;font-weight:800;color:var(--color-text);line-height:1}.insight-card__value.value--warn{color:#dc2626}.insight-card__label{font-size:11px;font-weight:600;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.5px}.insight-card__cta{font-size:12px;font-weight:600;color:var(--color-accent);margin-top:4px}.sitemap-structure{background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:12px;overflow:hidden}.structure-toggle{width:100%;display:flex;align-items:center;gap:10px;padding:14px 20px;background:none;border:none;cursor:pointer;text-align:left;font-size:14px;font-weight:600;color:var(--color-text)}.structure-toggle:hover{background:var(--color-hover)}.structure-toggle__chevron{margin-left:auto;font-size:10px;color:var(--color-text-muted)}.structure-source{font-size:12px;color:var(--color-text-muted);padding:10px 20px 12px;word-break:break-all;border-top:1px solid var(--color-border)}.child-sitemaps{display:flex;flex-direction:column}.child-sitemap{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 20px;border-top:1px solid var(--color-border);cursor:pointer;transition:background .15s}.child-sitemap:hover{background:var(--color-hover)}.child-sitemap.active{background:var(--color-primary-soft)}.child-sitemap__info{flex:1;min-width:0}.child-sitemap__label{font-size:13px;font-weight:600;color:var(--color-text)}.child-sitemap__url{font-size:11px;color:var(--color-text-muted);word-break:break-all}.child-sitemap__count{font-size:12px;color:var(--color-text-muted);white-space:nowrap;text-align:right}.child-sitemap__count strong{font-size:15px;font-weight:700;color:var(--color-text);display:block}.badge{font-size:11px;font-weight:600;padding:2px 8px;border-radius:20px}.badge--index{background:#ede9fe;color:#5b21b6}.badge--single{background:var(--color-primary-soft, #eff6ff);color:var(--color-text)}.pages-section{background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:12px;overflow:hidden}.pages-section__header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid var(--color-border);flex-wrap:wrap;gap:10px}.pages-section__title{font-size:14px;font-weight:600;color:var(--color-text);display:flex;align-items:center;gap:8px}.pages-filter-label{font-size:12px;font-weight:400;color:var(--color-text-muted)}.pages-section__actions{display:flex;align-items:center;gap:12px}.pages-count{font-size:12px;color:var(--color-text-muted)}.clear-filter{background:none;border:none;cursor:pointer;font-size:12px;color:var(--color-text-muted);padding:0 2px}.clear-filter:hover{color:var(--color-accent)}.filter-tabs{display:flex;gap:4px}.filter-tab{font-size:11px;font-weight:600;padding:4px 10px;border-radius:6px;border:1px solid var(--color-border);background:var(--color-bg);color:var(--color-text-muted);cursor:pointer}.filter-tab:hover{background:var(--color-hover)}.filter-tab.active{background:var(--color-text);color:#fff;border-color:var(--color-text)}.filter-tab--success.active{background:#16a34a;border-color:#16a34a}.filter-tab--failed.active{background:#dc2626;border-color:#dc2626}.pages-table-wrap{overflow-x:auto}.pages-table{width:100%;border-collapse:collapse;font-size:13px}.pages-table th{padding:10px 14px;text-align:left;font-size:11px;font-weight:600;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.4px;background:var(--color-bg);position:sticky;top:0;z-index:1;border-bottom:1px solid var(--color-border);white-space:nowrap}.pages-table td{padding:10px 14px;border-bottom:1px solid var(--color-border);vertical-align:top}.pages-table tr:last-child td{border-bottom:none}.pages-table tr.row--error td{background:#fff8f8}.td-url{max-width:300px}.td-title{max-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.page-link{color:var(--color-accent);text-decoration:none;word-break:break-all;font-size:12px}.page-link:hover{text-decoration:underline}.page-row{cursor:pointer}.page-row:hover td{background:var(--color-hover)}.row--expanded td{background:var(--color-primary-soft, #eff6ff)!important}.td-expand{width:24px;padding-right:0!important}.expand-icon{font-size:10px;color:var(--color-text-muted);transition:transform .15s;display:inline-block}.expand-icon.expanded{transform:rotate(90deg)}.page-detail-row td{padding:0!important;border-bottom:1px solid var(--color-border)}.page-detail{background:#f8f8ff;padding:16px 20px 16px 40px;border-top:1px solid var(--color-border)}.page-detail__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px 24px}.page-detail__item{display:flex;flex-direction:column;gap:4px}.page-detail__item.page-detail__item--full{grid-column:1/-1}.page-detail__label{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--color-text-muted)}.page-detail__value{font-size:13px;color:var(--color-text);line-height:1.5;word-break:break-word}.page-detail__value.page-detail__value--muted{color:var(--color-text-muted);font-style:italic}.h1-list{display:flex;flex-direction:column;gap:4px}.h1-tag{font-size:13px;font-weight:600;color:var(--color-text)}.status-badge{display:inline-block;padding:2px 6px;border-radius:4px;font-size:11px;font-weight:600;background:#f0fdf4;color:#166534}.status-badge.error{background:#fff1f2;color:#9f1239}.status-badge.redirect{background:#fffbeb;color:#92400e}.status-badge--completed{background:#f0fdf4;color:#166534}.status-badge--failed{background:#fff1f2;color:#9f1239}.status-badge--running,.status-badge--pending{background:#eff6ff;color:#1e40af}.status-badge--paused{background:#fffbeb;color:#92400e}.issue-pills{display:flex;flex-wrap:wrap;gap:4px}.issue-pill{font-size:11px;padding:2px 6px;border-radius:4px;background:#fff1f2;color:#9f1239;white-space:nowrap}.issue-pill--more{background:var(--color-primary-soft);color:var(--color-text-muted)}.ok-badge{font-size:12px;color:#16a34a}.td-rescan{width:36px;padding-left:4px!important;padding-right:8px!important}.rescan-btn{background:none;border:1px solid var(--color-border);border-radius:6px;padding:2px 6px;font-size:13px;cursor:pointer}.rescan-btn:hover:not(:disabled){background:var(--color-hover);border-color:var(--color-accent)}.rescan-btn:disabled{opacity:.4}.row--rescanning td{background:#fffbeb!important}.report-dropdown{position:relative}.report-menu{position:absolute;top:calc(100% + 6px);right:0;background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:8px;box-shadow:0 4px 16px #0000001f;min-width:220px;z-index:10;overflow:hidden}.report-menu--left{right:auto;left:0}.report-menu__item{display:block;width:100%;text-align:left;padding:10px 14px;font-size:13px;color:var(--color-text);background:none;border:none;cursor:pointer;border-bottom:1px solid var(--color-border)}.report-menu__item:last-child{border-bottom:none}.report-menu__item:hover{background:var(--color-hover);color:var(--color-accent)}.report-msg{font-size:12px;color:var(--color-text-muted);white-space:nowrap}.report-msg--ok{color:#16a34a;font-weight:600}.btn{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:8px;font-size:13px;font-weight:500;cursor:pointer;border:1px solid transparent;text-decoration:none;transition:background .15s}.btn-sm{padding:4px 10px;font-size:12px}.btn-secondary{background:var(--color-card-bg);border-color:var(--color-border);color:var(--color-text)}.btn-secondary:hover{background:var(--color-hover)}.btn-secondary:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.btn-primary:hover{opacity:.9}.crawl-footer{display:flex;gap:24px;flex-wrap:wrap;font-size:12px;color:var(--color-text-muted);padding-bottom:8px}.drawer-backdrop{position:fixed;inset:0;background:#0006;z-index:400;animation:fadeIn .2s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.drawer{position:fixed;top:0;right:0;bottom:0;width:80vw;background:var(--color-card-bg);z-index:401;display:flex;flex-direction:column;box-shadow:-8px 0 40px #0000002e;animation:slideIn .25s cubic-bezier(.16,1,.3,1)}@keyframes slideIn{0%{transform:translate(100%)}to{transform:translate(0)}}.drawer__header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 24px;border-bottom:1px solid var(--color-border);background:var(--color-card-bg);flex-shrink:0}.drawer__title{font-size:15px;font-weight:700;color:var(--color-text);margin:0}.drawer__header-actions{display:flex;align-items:center;gap:10px}.drawer__close{background:none;border:1px solid var(--color-border);border-radius:6px;padding:5px 11px;font-size:13px;color:var(--color-text-muted);cursor:pointer}.drawer__close:hover{background:var(--color-hover);color:var(--color-text)}.drawer__body{flex:1;overflow-y:auto;display:flex;flex-direction:column;min-height:0}.drawer-empty{padding:48px 24px;font-size:14px;color:var(--color-text-muted);text-align:center}.drawer-note{padding:12px 24px;font-size:13px;color:var(--color-text-muted);line-height:1.6;border-bottom:1px solid var(--color-border);background:var(--color-primary-soft);flex-shrink:0}.drawer-table-wrap{flex:1;overflow:auto}.drawer-table{width:100%;border-collapse:collapse;font-size:13px}.drawer-table th{padding:10px 16px;text-align:left;font-size:11px;font-weight:600;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.4px;background:var(--color-bg);position:sticky;top:0;z-index:1;border-bottom:1px solid var(--color-border);white-space:nowrap}.drawer-table td{padding:10px 16px;border-bottom:1px solid var(--color-border);vertical-align:top}.drawer-table tr:last-child td{border-bottom:none}.drawer-table tr.row--error td{background:#fff8f8}.drawer-table .td-url{max-width:360px}.drawer-table .td-title{max-width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer-table .page-row{cursor:pointer}.drawer-table .page-row:hover td{background:var(--color-hover)!important}.drawer-table .row--expanded td{background:#f8f8ff!important}.drawer-table .td-expand{width:24px;padding-right:0!important}.drawer-table .page-detail-row td{padding:0!important}.drawer-table .page-detail{background:#f8f8ff;padding:16px 20px 16px 44px;border-top:1px solid var(--color-border)}.issue-filter-bar{display:flex;align-items:center;flex-wrap:wrap;gap:6px;padding:10px 24px;border-bottom:1px solid var(--color-border);background:var(--color-bg);flex-shrink:0}.issue-filter-bar__label{font-size:11px;font-weight:600;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.4px;margin-right:4px}.issue-filter-chip{font-size:11px;font-weight:600;padding:3px 10px;border-radius:20px;border:1px solid var(--color-border);background:var(--color-bg);color:var(--color-text-muted);cursor:pointer}.issue-filter-chip:hover{background:var(--color-hover)}.issue-filter-chip.active{background:var(--color-text);color:#fff;border-color:var(--color-text)}.issue-legend__toggle{width:100%;text-align:left;padding:10px 24px;font-size:12px;font-weight:600;color:var(--color-accent);background:none;border:none;border-bottom:1px solid var(--color-border);cursor:pointer;flex-shrink:0;display:block}.issue-legend__toggle:hover{background:var(--color-hover)}.issue-legend__grid{display:flex;flex-direction:column;border-bottom:1px solid var(--color-border);flex-shrink:0}.legend-item{display:flex;align-items:baseline;gap:10px;padding:8px 24px;flex-wrap:wrap;border-top:1px solid var(--color-border)}.legend-desc{font-size:12px;color:var(--color-text-muted);flex:1;line-height:1.6}.report-dropdown--drawer .report-menu{z-index:402}.dup-badge{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:20px;padding:0 7px;font-size:11px;font-weight:700;border-radius:20px;background:#fff1f2;color:#9f1239;white-space:nowrap}.dup-outer-table{width:100%;border-collapse:collapse;font-size:13px}.dup-outer-table>thead>tr>th{padding:10px 16px;text-align:left;font-size:11px;font-weight:600;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.4px;background:var(--color-bg);position:sticky;top:0;z-index:1;border-bottom:1px solid var(--color-border);white-space:nowrap}.dup-outer-table>tbody>tr.dup-group-row>td{padding:12px 16px;border-bottom:1px solid var(--color-border);vertical-align:middle}.dup-outer-table>tbody>tr.dup-urls-header-row>td{padding:0;border-bottom:1px solid var(--color-border);background:var(--color-bg)}.dup-group-row{cursor:pointer;transition:background .12s}.dup-group-row:hover td{background:var(--color-hover)!important}.dup-group-row--expanded>td{background:var(--color-primary-soft)!important}.td-dup-title{font-size:13px;font-weight:600;color:var(--color-text)}.dup-group__table{width:100%;border-collapse:collapse;font-size:13px}.dup-group__table>thead>tr>th{padding:8px 16px;text-align:left;font-size:11px;font-weight:600;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.4px;background:var(--color-hover);border-bottom:1px solid var(--color-border);white-space:nowrap}.dup-group__table>tbody>tr>td{padding:10px 16px;border-bottom:1px solid var(--color-border);vertical-align:top}.dup-group__table>tbody>tr:last-child>td{border-bottom:none}.dup-group__table .page-detail-row>td{padding:0!important;border-bottom:1px solid var(--color-border)!important}.dup-group__table .page-detail{background:#f8f8ff;padding:14px 16px 14px 44px;border-top:1px solid var(--color-border)}.th-sortable{cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;transition:color .12s}.th-sortable:hover{color:var(--color-accent)}.sort-icon{display:inline-block;font-size:11px;margin-left:3px;color:var(--color-text-muted)}.pages-search-row,.drawer-search-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:10px 20px;border-bottom:1px solid var(--color-border);background:var(--color-bg);flex-shrink:0}.search-bar{display:flex;align-items:stretch;flex:1;min-width:220px;max-width:500px;border:1px solid var(--color-border);border-radius:8px;overflow:hidden;background:var(--color-card-bg);transition:border-color .15s,box-shadow .15s}.search-bar:focus-within{border-color:var(--color-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--color-accent) 15%,transparent)}.search-type-select{flex-shrink:0;padding:8px 26px 8px 11px;font-size:12px;font-weight:600;font-family:var(--font-sans);letter-spacing:.1px;border:none;outline:none;background:var(--color-bg);color:var(--color-text-muted);cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='9' height='5' fill='none'%3E%3Cpath d='M1 1l3.5 3L8 1' stroke='%239395a5' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center}.search-type-select:focus{color:var(--color-text)}.search-bar__divider{width:1px;background:var(--color-border);flex-shrink:0;align-self:stretch}.search-input{flex:1;padding:8px 12px;font-size:13px;font-family:var(--font-sans);border:none;outline:none;background:transparent;color:var(--color-text)}.search-input::placeholder{color:var(--color-text-muted)}.issue-filter-select{flex-shrink:0;padding:8px 30px 8px 11px;font-size:12px;font-weight:500;font-family:var(--font-sans);letter-spacing:.1px;border:1px solid var(--color-border);border-radius:8px;background:var(--color-card-bg);color:var(--color-text);cursor:pointer;outline:none;appearance:none;-webkit-appearance:none;max-width:230px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='9' height='5' fill='none'%3E%3Cpath d='M1 1l3.5 3L8 1' stroke='%239395a5' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;transition:border-color .15s,box-shadow .15s}.issue-filter-select:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--color-accent) 15%,transparent)}.clear-search-btn{flex-shrink:0;font-size:12px;font-weight:600;font-family:var(--font-sans);padding:8px 12px;border-radius:8px;border:1px solid var(--color-border);background:var(--color-card-bg);color:var(--color-text-muted);cursor:pointer;white-space:nowrap;transition:border-color .15s,color .15s,background .15s}.clear-search-btn:hover{border-color:var(--color-accent);color:var(--color-accent);background:var(--color-primary-soft)}
3
+ `],encapsulation:3,changeDetection:0})}};export{we as BloomsSitemapCrawlDetailComponent};
@@ -0,0 +1 @@
1
+ import{a as s,c as l}from"./chunk-SPLW6L45.js";import{D as o,z as a}from"./chunk-WQW7QCHM.js";var c=class n{constructor(){this.http=o(l)}listInfluencers(t,e={}){let r=new s;return e.tier&&(r=r.set("tier",e.tier)),e.platform&&(r=r.set("platform",e.platform)),e.search&&(r=r.set("search",e.search)),e.cursor&&(r=r.set("cursor",e.cursor)),e.limit&&(r=r.set("limit",String(e.limit))),this.http.get(`/api/influencers/projects/${t}/influencers`,{params:r})}createInfluencer(t,e){return this.http.post(`/api/influencers/projects/${t}/influencers`,e)}getInfluencer(t){return this.http.get(`/api/influencers/influencers/${t}`)}updateInfluencer(t,e){return this.http.patch(`/api/influencers/influencers/${t}`,e)}deleteInfluencer(t){return this.http.delete(`/api/influencers/influencers/${t}`)}addPlatform(t,e){return this.http.post(`/api/influencers/influencers/${t}/platforms`,e)}removePlatform(t,e){return this.http.delete(`/api/influencers/influencers/${t}/platforms/${e}`)}createManualSnapshot(t,e){return this.http.post(`/api/influencers/influencers/${t}/snapshots/manual`,e)}listSnapshots(t,e={}){let r=new s;return e.platform&&(r=r.set("platform",e.platform)),e.sourceType&&(r=r.set("sourceType",e.sourceType)),e.dateFrom&&(r=r.set("dateFrom",e.dateFrom)),e.dateTo&&(r=r.set("dateTo",e.dateTo)),this.http.get(`/api/influencers/influencers/${t}/snapshots`,{params:r})}deleteSnapshot(t,e){return this.http.delete(`/api/influencers/influencers/${t}/snapshots/${e}`)}fetchData(t,e){return this.http.post(`/api/influencers/influencers/${t}/fetch`,e)}static{this.\u0275fac=function(e){return new(e||n)}}static{this.\u0275prov=a({token:n,factory:n.\u0275fac,providedIn:"root"})}};export{c as a};
@@ -0,0 +1,3 @@
1
+ import{a as W}from"./chunk-EA7SZINY.js";import{a as H}from"./chunk-X2Q5WSIJ.js";import{a as q}from"./chunk-OSBW6YXS.js";import{a as X}from"./chunk-OBI6OSSF.js";import{a as J}from"./chunk-HLIQJSA7.js";import"./chunk-SPLW6L45.js";import{Ca as g,Cb as T,D as B,Ga as b,Ha as U,Ia as _,J as x,Ja as M,K as h,La as p,Na as F,Oa as S,Pa as E,Qa as t,Ra as i,S as I,Sa as k,Ta as f,Ua as C,V as O,Va as d,W as v,Wa as n,Xa as c,Ya as u,Za as R,a as $,b as A,eb as N,gb as j,na as y,nb as w,pa as r,tb as G,xa as D,xb as z}from"./chunk-WQW7QCHM.js";function ee(a,o){if(a&1&&(t(0,"div",1),n(1),i()),a&2){let e=d();r(),c(e.icon)}}function te(a,o){if(a&1){let e=f();t(0,"button",5),C("click",function(){x(e);let s=d();return h(s.action.emit())}),n(1),i()}if(a&2){let e=d();r(),c(e.actionLabel)}}var V=class a{constructor(){this.title="Nothing here yet";this.description="";this.action=new I}static{this.\u0275fac=function(e){return new(e||a)}}static{this.\u0275cmp=D({type:a,selectors:[["app-empty-state"]],inputs:{icon:"icon",title:"title",description:"description",actionLabel:"actionLabel"},outputs:{action:"action"},decls:7,vars:4,consts:[[1,"empty-state"],[1,"empty-state__icon"],[1,"empty-state__title"],[1,"empty-state__desc"],[1,"btn","btn-primary"],[1,"btn","btn-primary",3,"click"]],template:function(e,l){e&1&&(t(0,"div",0),g(1,ee,2,1,"div",1),t(2,"h3",2),n(3),i(),t(4,"p",3),n(5),i(),g(6,te,2,1,"button",4),i()),e&2&&(r(),p(l.icon?1:-1),r(2),c(l.title),r(2),c(l.description),r(),p(l.actionLabel?6:-1))},dependencies:[z],styles:[".empty-state[_ngcontent-%COMP%]{text-align:center;padding:60px 24px;display:flex;flex-direction:column;align-items:center}.empty-state__icon[_ngcontent-%COMP%]{font-size:48px;margin-bottom:16px;opacity:.4}.empty-state__title[_ngcontent-%COMP%]{font-size:18px;font-weight:600;color:var(--color-text);margin-bottom:8px}.empty-state__desc[_ngcontent-%COMP%]{font-size:14px;color:var(--color-text-muted);max-width:360px;margin-bottom:24px;line-height:1.6}"]})}};var ie=(a,o)=>o.type,P=(a,o)=>o.url,ne=(a,o)=>o.label,ae=(a,o)=>o.title;function oe(a,o){a&1&&(t(0,"div",0),n(1,"Sign in to blooms.ai to view crawl insights."),i())}function re(a,o){if(a&1){let e=f();t(0,"button",13),C("click",function(){let s=x(e).$implicit,m=d(4);return h(m.generateCrawlReport(s.type))}),n(1),i()}if(a&2){let e=o.$implicit,l=d(4);b("disabled",l.generatingReport()),r(),u(" ",e.label," ")}}function le(a,o){if(a&1&&(t(0,"div",11),S(1,re,2,2,"button",12,ie),i()),a&2){let e=d(3);r(),E(e.reportOptions)}}function se(a,o){if(a&1){let e=f();t(0,"div",5)(1,"button",10),C("click",function(){x(e);let s=d(2);return h(s.showReportMenu.set(!s.showReportMenu()))}),n(2," \u{1F4CB} Generate Report \u25BE "),i(),g(3,le,3,0,"div",11),i()}if(a&2){let e=d(2);r(3),p(e.showReportMenu()?3:-1)}}function de(a,o){if(a&1){let e=f();t(0,"div",14),n(1),t(2,"button",15),C("click",function(){x(e);let s=d(2);return h(s.reportMsg.set(""))}),n(3,"\u2715"),i()()}if(a&2){let e=d(2);_("report-msg--success",e.reportMsgOk())("report-msg--error",!e.reportMsgOk()),r(),u(" ",e.reportMsg()," ")}}function ce(a,o){if(a&1&&(t(0,"div",8)(1,"div",16)(2,"span",17),n(3),i(),t(4,"span",18),n(5),i()(),t(6,"div",19),k(7,"div",20),i(),t(8,"p",21),n(9,"This runs in the background \u2014 results will appear here when done."),i()()),a&2){let e,l,s,m=d(2);r(3),u(" ",((e=m.activeCrawl())==null?null:e.status)==="pending"?"Starting crawl\u2026":"Crawling "+((e=m.activeCrawl())==null?null:e.crawlTarget)," "),r(2),R(" ",(l=(l=m.activeCrawl())==null?null:l.totalUrlsCrawled)!==null&&l!==void 0?l:0," / ",m.MAX_PAGES," pages "),r(2),U("width",m.progressPct(),"%"),_("indeterminate",((s=m.activeCrawl())==null?null:s.status)==="pending")}}function pe(a,o){a&1&&k(0,"app-loading-spinner",9),a&2&&b("fullPage",!0)}function me(a,o){if(a&1){let e=f();t(0,"app-empty-state",23),C("action",function(){x(e);let s=d(3);return h(s.startCrawl())}),i()}}function _e(a,o){if(a&1&&g(0,me,1,0,"app-empty-state",22),a&2){let e=d(2);p(e.isActive()?-1:0)}}function ge(a,o){a&1&&(t(0,"p",42),n(1,"No pages recorded for this crawl."),i())}function ue(a,o){if(a&1&&(t(0,"span",64),n(1),i()),a&2){let e=o.$implicit;r(),c(e)}}function xe(a,o){if(a&1&&(t(0,"div",60)(1,"span",58),n(2,"H1 Tags"),i(),t(3,"div",63),S(4,ue,2,1,"span",64,F),i()()),a&2){let e=d(2).$implicit;r(4),E(e.h1Tags)}}function he(a,o){if(a&1&&(t(0,"a",61),n(1),i()),a&2){let e=d(2).$implicit;b("href",e.canonicalUrl,y),r(),c(e.canonicalUrl)}}function Ce(a,o){a&1&&(t(0,"span",62),n(1,"Not set"),i())}function fe(a,o){if(a&1&&(t(0,"tr",53)(1,"td",54)(2,"div",55)(3,"div",56)(4,"div",57)(5,"span",58),n(6,"Full Title"),i(),t(7,"span",59),n(8),i()(),t(9,"div",60)(10,"span",58),n(11,"Meta Description"),i(),t(12,"span",59),n(13),i()(),g(14,xe,6,0,"div",60),t(15,"div",57)(16,"span",58),n(17,"Internal Links"),i(),t(18,"span",59),n(19),i()(),t(20,"div",57)(21,"span",58),n(22,"External Links"),i(),t(23,"span",59),n(24),i()(),t(25,"div",57)(26,"span",58),n(27,"Canonical URL"),i(),t(28,"span",59),g(29,he,2,2,"a",61)(30,Ce,2,0,"span",62),i()()()()()()),a&2){let e,l,s=d().$implicit;r(8),c(s.title||"No title tag"),r(4),_("page-detail__value--muted",!s.metaDescription),r(),u(" ",s.metaDescription||"No meta description set"," "),r(),p(s.h1Tags!=null&&s.h1Tags.length?14:-1),r(5),c((e=s.internalLinks)!==null&&e!==void 0?e:"\u2014"),r(5),c((l=s.externalLinks)!==null&&l!==void 0?l:"\u2014"),r(5),p(s.hasCanonical&&s.canonicalUrl?29:30)}}function ve(a,o){if(a&1){let e=f();t(0,"tr",46),C("click",function(){let s=x(e).$implicit,m=d(6);return h(m.togglePageExpand(s.url))}),t(1,"td",47)(2,"span",48),n(3,"\u25B6"),i()(),t(4,"td",49)(5,"a",50),C("click",function(s){return x(e),h(s.stopPropagation())}),n(6),i()(),t(7,"td",51),n(8),i(),t(9,"td")(10,"span",52),n(11),i()(),t(12,"td"),n(13),i(),t(14,"td"),n(15),i(),t(16,"td"),n(17),i()(),g(18,fe,31,8,"tr",53)}if(a&2){let e,l,s=o.$implicit,m=d(6);_("row--error",m.isBroken(s))("row--expanded",m.expandedPageUrl()===s.url),r(2),_("expanded",m.expandedPageUrl()===s.url),r(3),b("href",s.url,y),r(),c(s.url),r(2),c(s.title||"\u2014"),r(2),M(m.statusClass(s.statusCode)),r(),u(" ",s.statusCode||"\u2014"," "),r(2),c(s.loadTime!=null?s.loadTime+"ms":"\u2014"),r(2),c((e=s.wordCount)!==null&&e!==void 0?e:"\u2014"),r(2),c((l=s.depth)!==null&&l!==void 0?l:"\u2014"),r(),p(m.expandedPageUrl()===s.url?18:-1)}}function we(a,o){if(a&1&&(t(0,"div",43)(1,"table",44)(2,"thead")(3,"tr"),k(4,"th"),t(5,"th"),n(6,"URL"),i(),t(7,"th"),n(8,"Title"),i(),t(9,"th"),n(10,"Status"),i(),t(11,"th"),n(12,"Load Time"),i(),t(13,"th"),n(14,"Words"),i(),t(15,"th"),n(16," Depth "),t(17,"span",45),n(18,"(?)"),i()()()(),t(19,"tbody"),S(20,ve,19,16,null,null,P),i()()()),a&2){let e=d(5);r(20),E(e.crawledPages())}}function be(a,o){if(a&1&&g(0,ge,2,0,"p",42)(1,we,22,0,"div",43),a&2){let e=d(4);p(e.crawledPages().length===0?0:1)}}function Se(a,o){a&1&&(t(0,"p",42),n(1,"No broken links found \u2014 your site is clean."),i())}function Ee(a,o){if(a&1){let e=f();t(0,"tr",67)(1,"td",49)(2,"a",61),n(3),i()(),t(4,"td")(5,"span",68),n(6),i()(),t(7,"td",51),n(8),i(),t(9,"td"),n(10),i(),t(11,"td",69)(12,"button",70),C("click",function(){let s=x(e).$implicit,m=d(6);return h(m.rescanPage(s.url))}),n(13),i()()()}if(a&2){let e=o.$implicit,l=d(6);_("row--rescanning",l.rescaningUrl()===e.url),r(2),b("href",e.url,y),r(),c(e.url),r(3),c(e.statusCode||"Failed"),r(2),c(e.title||"\u2014"),r(2),c(e.loadTime!=null?e.loadTime+"ms":"\u2014"),r(2),b("disabled",l.rescaningUrl()!==null),r(),c(l.rescaningUrl()===e.url?"\u23F3":"\u{1F504}")}}function ye(a,o){if(a&1&&(t(0,"p",65),n(1," These pages returned HTTP 4xx/5xx errors or failed to respond. Fix or remove them to improve user experience and crawlability. "),i(),t(2,"div",43)(3,"table",44)(4,"thead")(5,"tr")(6,"th"),n(7,"URL"),i(),t(8,"th"),n(9,"Status"),i(),t(10,"th"),n(11,"Title"),i(),t(12,"th"),n(13,"Load Time"),i(),k(14,"th"),i()(),t(15,"tbody"),S(16,Ee,14,9,"tr",66,P),i()()()),a&2){let e=d(5);r(16),E(e.brokenPages())}}function ke(a,o){if(a&1&&g(0,Se,2,0,"p",42)(1,ye,18,0),a&2){let e=d(4);p(e.brokenPages().length===0?0:1)}}function Ie(a,o){a&1&&(t(0,"p",42),n(1,"No pages with issues \u2014 everything looks good."),i())}function Te(a,o){if(a&1){let e=f();t(0,"button",73),C("click",function(){let s=x(e).$implicit,m=d(6);return h(m.issueFilter.set(s.label))}),n(1),i()}if(a&2){let e=o.$implicit,l=d(6);_("active",l.issueFilter()===e.label),r(),R("",e.label," (",e.count,")")}}function Pe(a,o){a&1&&(t(0,"div",77)(1,"div",79)(2,"span",80),n(3,"Missing title tag"),i(),t(4,"span",81),n(5,"The page has no "),t(6,"code"),n(7,"<title>"),i(),n(8," element. Titles are required for SEO \u2014 they appear as the clickable headline in search results."),i()(),t(9,"div",79)(10,"span",80),n(11,"Missing meta description"),i(),t(12,"span",81),n(13,"No "),t(14,"code"),n(15,'<meta name="description">'),i(),n(16," tag found. Meta descriptions appear in search snippets and influence click-through rates. Aim for 120\u2013160 characters."),i()(),t(17,"div",79)(18,"span",80),n(19,"Missing H1 tag"),i(),t(20,"span",81),n(21,"The page has no "),t(22,"code"),n(23,"<h1>"),i(),n(24," heading. Every page should have exactly one H1 that describes the page's primary topic."),i()(),t(25,"div",79)(26,"span",80),n(27,"Multiple H1 tags"),i(),t(28,"span",81),n(29,"More than one "),t(30,"code"),n(31,"<h1>"),i(),n(32," was found. This dilutes the page's focus and can confuse search engines about the primary topic."),i()(),t(33,"div",79)(34,"span",80),n(35,"Low word count"),i(),t(36,"span",81),n(37,"The page contains fewer than "),t(38,"strong"),n(39,"100 words"),i(),n(40," of visible body text. Thin content is often ranked lower by search engines as it provides little value to users."),i()(),t(41,"div",79)(42,"span",80),n(43,"Slow page load"),i(),t(44,"span",81),n(45,"The page took more than "),t(46,"strong"),n(47,"3,000 ms"),i(),n(48," to respond. Slow pages negatively affect user experience and are penalised in Google's ranking algorithm (Core Web Vitals)."),i()(),t(49,"div",79)(50,"span",80),n(51,"Failed to fetch"),i(),t(52,"span",81),n(53,"The crawler could not retrieve the page at all \u2014 it returned a status code of 0 or a network error. This is equivalent to a broken link."),i()()())}function Be(a,o){if(a&1&&(t(0,"span",80),n(1),i()),a&2){let e=o.$implicit;r(),c(e)}}function De(a,o){if(a&1){let e=f();t(0,"tr")(1,"td",49)(2,"a",61),n(3),i()(),t(4,"td")(5,"div",82),S(6,Be,2,1,"span",80,F),i()(),t(8,"td")(9,"span",52),n(10),i()(),t(11,"td"),n(12),i(),t(13,"td",69)(14,"button",83),C("click",function(){let s=x(e).$implicit,m=d(6);return h(m.rescanPage(s.url))}),n(15),i()()()}if(a&2){let e=o.$implicit,l=d(6);_("row--rescanning",l.rescaningUrl()===e.url),r(2),b("href",e.url,y),r(),c(e.url),r(3),E(e.issues),r(3),M(l.statusClass(e.statusCode)),r(),u(" ",e.statusCode||"\u2014"," "),r(2),c(e.loadTime!=null?e.loadTime+"ms":"\u2014"),r(2),b("disabled",l.rescaningUrl()!==null),r(),u(" ",l.rescaningUrl()===e.url?"\u23F3":"\u{1F504}"," ")}}function Me(a,o){a&1&&(t(0,"tr")(1,"td",84),n(2,"No pages match this filter."),i()())}function ze(a,o){if(a&1){let e=f();t(0,"p",65),n(1," Each row below shows a page and all the issues detected on it. Addressing these improves your health score and search engine visibility. "),i(),t(2,"div",71)(3,"span",72),n(4,"Filter by issue:"),i(),t(5,"button",73),C("click",function(){x(e);let s=d(5);return h(s.issueFilter.set(""))}),n(6),i(),S(7,Te,2,4,"button",74,ne),i(),t(9,"div",75)(10,"button",76),C("click",function(){x(e);let s=d(5);return h(s.showLegend.set(!s.showLegend()))}),n(11),i(),g(12,Pe,54,0,"div",77),i(),t(13,"div",43)(14,"table",44)(15,"thead")(16,"tr")(17,"th"),n(18,"URL"),i(),t(19,"th"),n(20,"Issues"),i(),t(21,"th"),n(22,"Status"),i(),t(23,"th"),n(24,"Load Time"),i(),k(25,"th"),i()(),t(26,"tbody"),S(27,De,16,10,"tr",78,P),g(29,Me,3,0,"tr"),i()()()}if(a&2){let e=d(5);r(5),_("active",e.issueFilter()===""),r(),u("All (",e.issuePages().length,")"),r(),E(e.issueTypes()),r(4),u(" What do these issues mean? ",e.showLegend()?"\u25B4":"\u25BE"," "),r(),p(e.showLegend()?12:-1),r(15),E(e.filteredIssuePages()),r(2),p(e.filteredIssuePages().length===0?29:-1)}}function Ve(a,o){if(a&1&&g(0,Ie,2,0,"p",42)(1,ze,30,6),a&2){let e=d(4);p(e.issuePages().length===0?0:1)}}function Ue(a,o){a&1&&(t(0,"p",42),n(1,"All crawled pages have meta descriptions."),i())}function Fe(a,o){if(a&1&&(t(0,"tr")(1,"td",49)(2,"a",61),n(3),i()(),t(4,"td",51),n(5),i(),t(6,"td")(7,"span",52),n(8),i()(),t(9,"td"),n(10),i()()),a&2){let e,l=o.$implicit,s=d(6);r(2),b("href",l.url,y),r(),c(l.url),r(2),c(l.title||"\u2014"),r(2),M(s.statusClass(l.statusCode)),r(),u(" ",l.statusCode||"\u2014"," "),r(2),c((e=l.wordCount)!==null&&e!==void 0?e:"\u2014")}}function Re(a,o){if(a&1&&(t(0,"p",65),n(1," Add a unique "),t(2,"code"),n(3,'<meta name="description">'),i(),n(4," tag to each of these pages. Aim for 120\u2013160 characters that accurately summarise the page content. "),i(),t(5,"div",43)(6,"table",44)(7,"thead")(8,"tr")(9,"th"),n(10,"URL"),i(),t(11,"th"),n(12,"Title"),i(),t(13,"th"),n(14,"Status"),i(),t(15,"th"),n(16,"Words"),i()()(),t(17,"tbody"),S(18,Fe,11,7,"tr",null,P),i()()()),a&2){let e=d(5);r(18),E(e.missingMetaPages())}}function Le(a,o){if(a&1&&g(0,Ue,2,0,"p",42)(1,Re,20,0),a&2){let e=d(4);p(e.missingMetaPages().length===0?0:1)}}function $e(a,o){a&1&&(t(0,"p",42),n(1,"No duplicate titles found \u2014 each page has a unique title."),i())}function Ae(a,o){if(a&1&&(t(0,"a",91),n(1),i()),a&2){let e=o.$implicit;b("href",e.url,y),r(),c(e.url)}}function Oe(a,o){if(a&1&&(t(0,"div",86)(1,"div",87)(2,"span",88),n(3),i(),t(4,"span",89),n(5),i()(),t(6,"div",90),S(7,Ae,2,2,"a",91,P),i()()),a&2){let e=o.$implicit;r(3),u("",e.pages.length," pages share this title"),r(2),u('"',e.title||"(no title)",'"'),r(2),E(e.pages)}}function Ne(a,o){if(a&1&&(t(0,"p",65),n(1," Each group below shows pages that share an identical title. Give each page a distinct "),t(2,"code"),n(3,"<title>"),i(),n(4," that reflects its unique content to help search engines rank them correctly. "),i(),t(5,"div",85),S(6,Oe,9,2,"div",86,ae),i()),a&2){let e=d(5);r(6),E(e.duplicateTitleGroups())}}function je(a,o){if(a&1&&g(0,$e,2,0,"p",42)(1,Ne,8,0),a&2){let e=d(4);p(e.duplicateTitleGroups().length===0?0:1)}}function Ge(a,o){if(a&1){let e=f();t(0,"div",36)(1,"div",39)(2,"h3",40),n(3),i(),t(4,"button",41),C("click",function(){x(e);let s=d(3);return h(s.closePanel())}),n(5,"\u2715 Close"),i()(),g(6,be,2,1)(7,ke,2,1)(8,Ve,2,1)(9,Le,2,1)(10,je,2,1),i()}if(a&2){let e,l=d(3);r(3),c(l.panelTitle()),r(3),p((e=l.activePanel())==="pages"?6:e==="broken"?7:e==="issues"?8:e==="meta"?9:e==="titles"?10:-1)}}function He(a,o){if(a&1&&(t(0,"div",37)(1,"h3",92),n(2,"Technical Signals"),i(),t(3,"div",93)(4,"div",94)(5,"span",95),n(6),i(),t(7,"div")(8,"strong"),n(9,"HTTPS / SSL"),i(),t(10,"span"),n(11),i()()(),t(12,"div",94)(13,"span",95),n(14),i(),t(15,"div")(16,"strong"),n(17,"Sitemap"),i(),t(18,"span"),n(19),i()()(),t(20,"div",94)(21,"span",95),n(22),i(),t(23,"div")(24,"strong"),n(25,"robots.txt"),i(),t(26,"span"),n(27),i()()(),t(28,"div",96)(29,"span",95),n(30,"\u23F1"),i(),t(31,"div")(32,"strong"),n(33,"Server Response"),i(),t(34,"span"),n(35),i()()()()()),a&2){let e=d(3);r(4),_("pass",e.crawl().technicalSignals.hasSSL),r(2),c(e.crawl().technicalSignals.hasSSL?"\u2713":"\u2717"),r(5),c(e.crawl().technicalSignals.hasSSL?"Secure connection":"Not secured"),r(),_("pass",e.crawl().technicalSignals.hasSitemap),r(2),c(e.crawl().technicalSignals.hasSitemap?"\u2713":"\u2717"),r(5),c(e.crawl().technicalSignals.sitemapUrl||"Not found"),r(),_("pass",e.crawl().technicalSignals.hasRobotsTxt),r(2),c(e.crawl().technicalSignals.hasRobotsTxt?"\u2713":"\u2717"),r(5),c(e.crawl().technicalSignals.hasRobotsTxt?"Present":"Not found"),r(8),u("",e.crawl().technicalSignals.serverResponseTime,"ms")}}function We(a,o){if(a&1&&(t(0,"span"),n(1),N(2,"date"),i()),a&2){let e=d(3);r(),u("Completed: ",j(2,1,e.crawl().completedAt,"medium"),"")}}function qe(a,o){if(a&1&&(t(0,"span"),n(1),i()),a&2){let e=d(3);r(),u("Duration: ",(e.crawl().crawlDurationMs/1e3).toFixed(1),"s")}}function Xe(a,o){if(a&1){let e=f();t(0,"div",24)(1,"div",25)(2,"div",26)(3,"span",27),n(4,"\u2665"),i(),t(5,"span",28),n(6,"Health Score"),i()(),t(7,"div",29),n(8),t(9,"span",30),n(10,"/100"),i()(),t(11,"p",31),n(12," A composite score (0\u2013100) measuring your site's overall technical quality. It accounts for broken links, missing metadata, duplicate content, and page-level issues. A score above 80 is considered healthy. "),i(),t(13,"div",32),k(14,"div",33),i()(),t(15,"div",34),C("click",function(){x(e);let s=d(2);return h(s.togglePanel("pages"))}),t(16,"div",26)(17,"span",27),n(18,"\u{1F517}"),i(),t(19,"span",28),n(20,"Pages Crawled"),i()(),t(21,"div",29),n(22),i(),t(23,"p",31),n(24," Total pages discovered and successfully fetched during this crawl. Each page's URL, title, HTTP status, load time, and word count is recorded. "),i(),t(25,"span",35),n(26,"View all pages \u2192"),i()(),t(27,"div",34),C("click",function(){x(e);let s=d(2);return h(s.togglePanel("broken"))}),t(28,"div",26)(29,"span",27),n(30,"\u26A0"),i(),t(31,"span",28),n(32,"Broken Links"),i()(),t(33,"div",29),n(34),i(),t(35,"p",31),n(36," Pages returning HTTP 4xx or 5xx errors, or that failed to load entirely. Broken links degrade user experience and signal poor site maintenance to search engines. "),i(),t(37,"span",35),n(38,"View broken links \u2192"),i()(),t(39,"div",34),C("click",function(){x(e);let s=d(2);return h(s.togglePanel("issues"))}),t(40,"div",26)(41,"span",27),n(42,"\u25B3"),i(),t(43,"span",28),n(44,"Pages with Issues"),i()(),t(45,"div",29),n(46),i(),t(47,"p",31),n(48," Pages flagged with one or more technical problems \u2014 such as missing tags, slow load times, redirect chains, or non-200 status codes. Each issue is listed per page. "),i(),t(49,"span",35),n(50,"View issue details \u2192"),i()(),t(51,"div",34),C("click",function(){x(e);let s=d(2);return h(s.togglePanel("meta"))}),t(52,"div",26)(53,"span",27),n(54,"\u{1F3F7}"),i(),t(55,"span",28),n(56,"Missing Meta"),i()(),t(57,"div",29),n(58),i(),t(59,"p",31),n(60," Pages without a "),t(61,"code"),n(62,'<meta name="description">'),i(),n(63," tag. Meta descriptions are displayed in search engine results and directly influence click-through rates from organic search. "),i(),t(64,"span",35),n(65,"View affected pages \u2192"),i()(),t(66,"div",34),C("click",function(){x(e);let s=d(2);return h(s.togglePanel("titles"))}),t(67,"div",26)(68,"span",27),n(69,"\u{1F4CB}"),i(),t(70,"span",28),n(71,"Duplicate Titles"),i()(),t(72,"div",29),n(73),i(),t(74,"p",31),n(75," Pages that share an identical "),t(76,"code"),n(77,"<title>"),i(),n(78," tag. Duplicate titles confuse search engines about which page to rank, splitting ranking signals and reducing overall SEO effectiveness. "),i(),t(79,"span",35),n(80,"View duplicate groups \u2192"),i()()(),g(81,Ge,11,2,"div",36)(82,He,36,13,"div",37),t(83,"div",38)(84,"span"),n(85),i(),g(86,We,3,4,"span")(87,qe,2,1,"span"),i()}if(a&2){let e=d(2);r(8),u(" ",e.crawl().summary.healthScore,""),r(6),U("width",e.crawl().summary.healthScore,"%"),_("score--good",e.crawl().summary.healthScore>=80)("score--ok",e.crawl().summary.healthScore>=50&&e.crawl().summary.healthScore<80)("score--bad",e.crawl().summary.healthScore<50),r(),_("active",e.activePanel()==="pages"),r(7),c(e.crawl().totalUrlsCrawled),r(5),_("active",e.activePanel()==="broken")("insight-card--warn",e.crawl().summary.brokenLinks>0),r(6),_("value--warn",e.crawl().summary.brokenLinks>0),r(),u(" ",e.crawl().summary.brokenLinks," "),r(5),_("active",e.activePanel()==="issues")("insight-card--warn",e.crawl().summary.pagesWithIssues>0),r(6),_("value--warn",e.crawl().summary.pagesWithIssues>0),r(),u(" ",e.crawl().summary.pagesWithIssues," "),r(5),_("active",e.activePanel()==="meta")("insight-card--warn",e.crawl().summary.missingMeta>0),r(6),_("value--warn",e.crawl().summary.missingMeta>0),r(),u(" ",e.crawl().summary.missingMeta," "),r(8),_("active",e.activePanel()==="titles")("insight-card--warn",e.crawl().summary.duplicateTitles>0),r(6),_("value--warn",e.crawl().summary.duplicateTitles>0),r(),u(" ",e.crawl().summary.duplicateTitles," "),r(8),p(e.activePanel()?81:-1),r(),p(e.crawl().technicalSignals?82:-1),r(3),u("Crawled: ",e.crawl().crawlTarget,""),r(),p(e.crawl().completedAt?86:-1),r(),p(e.crawl().crawlDurationMs?87:-1)}}function Je(a,o){if(a&1){let e=f();t(0,"div",1)(1,"div",2)(2,"h2",3),n(3,"Last crawl results"),i(),t(4,"div",4),g(5,se,4,1,"div",5),t(6,"button",6),C("click",function(){x(e);let s=d();return h(s.startCrawl())}),n(7," \u2295 New Crawl "),i()()(),g(8,de,4,5,"div",7)(9,ce,10,7,"div",8)(10,pe,1,1,"app-loading-spinner",9)(11,_e,1,1)(12,Xe,88,45),i()}if(a&2){let e=d();r(5),p(e.crawl()&&e.reportsAvailable()?5:-1),r(),b("disabled",e.isActive()),r(2),p(e.reportMsg()?8:-1),r(),p(e.isActive()?9:-1),r(),p(e.loading()?10:e.crawl()?12:11)}}var K=100,Q=class a{constructor(){this.crawlService=B(W);this.reportService=B(q);this.host=B(O);this.canGenerateReports=!1;this.bloomscrawl=new I;this.bloomserror=new I;this.MAX_PAGES=K;this.crawl=v(null);this.activeCrawl=v(null);this.loading=v(!0);this.activePanel=v(null);this.showLegend=v(!1);this.expandedPageUrl=v(null);this.issueFilter=v("");this.rescaningUrl=v(null);this.showReportMenu=v(!1);this.generatingReport=v(!1);this.reportMsg=v("");this.reportMsgOk=v(!1);this.reportOptions=[{type:"pages-crawled",label:"\u{1F4C4} Pages Crawled"},{type:"broken-links",label:"\u{1F517} Broken Links"},{type:"pages-with-issues",label:"\u26A0\uFE0F Pages with Issues"},{type:"missing-meta",label:"\u{1F3F7}\uFE0F Missing Meta"},{type:"duplicate-title",label:"\u{1F4D1} Duplicate Titles"}];this.isActive=w(()=>{let o=this.activeCrawl()?.status;return o==="pending"||o==="running"});this.progressPct=w(()=>{let o=this.activeCrawl();return!o||o.status==="pending"?0:Math.min(Math.round(o.totalUrlsCrawled/K*100),99)});this.crawledPages=w(()=>this.crawl()?.discoveredUrls??[]);this.brokenPages=w(()=>this.crawledPages().filter(o=>!o.statusCode||o.statusCode===0||o.statusCode>=400));this.issuePages=w(()=>this.crawledPages().filter(o=>o.issues&&o.issues.length>0));this.missingMetaPages=w(()=>this.crawledPages().filter(o=>!o.metaDescription));this.issueTypes=w(()=>{let o=new Map;for(let e of this.issuePages())for(let l of e.issues??[])o.set(l,(o.get(l)??0)+1);return Array.from(o.entries()).map(([e,l])=>({label:e,count:l})).sort((e,l)=>l.count-e.count)});this.filteredIssuePages=w(()=>{let o=this.issueFilter();return o?this.issuePages().filter(e=>e.issues?.includes(o)):this.issuePages()});this.duplicateTitleGroups=w(()=>{let o=new Map;for(let e of this.crawledPages()){let l=e.title??"";o.has(l)||o.set(l,[]),o.get(l).push(e)}return Array.from(o.entries()).filter(([,e])=>e.length>1).map(([e,l])=>({title:e,pages:l})).sort((e,l)=>l.pages.length-e.pages.length)});this.panelTitle=w(()=>{let o=this.activePanel();return o?{pages:`Crawled Pages (${this.crawledPages().length})`,broken:`Broken Links (${this.brokenPages().length})`,issues:`Pages with Issues (${this.issuePages().length})`,meta:`Missing Meta Description (${this.missingMetaPages().length} pages)`,titles:`Duplicate Titles (${this.duplicateTitleGroups().length} groups)`}[o]:""});this.needsSignIn=w(()=>T.config()!==null&&T.session()===null);this.reportsAvailable=w(()=>T.config()===null&&this.canGenerateReports)}get activeProjectId(){return this.projectId||T.project()?.id||""}ngOnInit(){let o=this.host.nativeElement.shadowRoot;if(o&&H(o),this.needsSignIn()){this.loading.set(!1);return}if(!this.activeProjectId){this.loading.set(!1),this.bloomserror.emit({code:"NO_PROJECT",message:"No project to show. Pass project-id, or sign in first."});return}this.loadCrawl()}ngOnDestroy(){this.pollSub?.unsubscribe()}loadCrawl(){this.crawlService.getLatest(this.activeProjectId).subscribe({next:o=>{this.crawl.set(o.data),this.loading.set(!1)},error:o=>{this.loading.set(!1),o?.status!==404&&this.bloomserror.emit({code:o?.error?.code,message:o?.error?.message||"Could not load crawl results."})}})}startCrawl(){this.crawlService.start(this.activeProjectId).subscribe({next:o=>{this.activeCrawl.set({status:"pending",totalUrlsCrawled:0}),this.bloomscrawl.emit({status:"started",crawlId:o.data.crawlId}),this.beginPolling(o.data.crawlId)},error:o=>this.bloomserror.emit({code:o?.error?.code,message:o?.error?.message||"Could not start a crawl."})})}generateCrawlReport(o){this.showReportMenu.set(!1),this.generatingReport.set(!0),this.reportMsg.set("");let e=this.crawl()?._id;this.reportService.generateCrawlReport(this.activeProjectId,o,e).subscribe({next:()=>{this.generatingReport.set(!1),this.reportMsgOk.set(!0),this.reportMsg.set("\u2705 Report generation started. Check the Reports section in a few moments."),setTimeout(()=>this.reportMsg.set(""),8e3)},error:l=>{this.generatingReport.set(!1),this.reportMsgOk.set(!1),this.reportMsg.set(l.error?.message||"\u26A0\uFE0F Failed to start report generation."),setTimeout(()=>this.reportMsg.set(""),6e3)}})}togglePanel(o){this.activePanel.set(this.activePanel()===o?null:o),this.expandedPageUrl.set(null),this.showLegend.set(!1),this.issueFilter.set("")}closePanel(){this.activePanel.set(null),this.expandedPageUrl.set(null),this.showLegend.set(!1),this.issueFilter.set("")}togglePageExpand(o){this.expandedPageUrl.set(this.expandedPageUrl()===o?null:o)}rescanPage(o){let e=this.crawl()?._id;!e||this.rescaningUrl()||(this.rescaningUrl.set(o),this.crawlService.rescanUrl(e,o).subscribe({next:l=>{this.crawl.update(s=>{if(!s)return s;let m=(s.discoveredUrls??[]).map(L=>L.url===o?l.data.page:L);return A($({},s),{discoveredUrls:m,summary:l.data.summary})}),this.rescaningUrl.set(null)},error:()=>this.rescaningUrl.set(null)}))}isBroken(o){return!o.statusCode||o.statusCode===0||o.statusCode>=400}statusClass(o){return!o||o===0||o>=400?"error":o>=300?"redirect":""}beginPolling(o){this.pollSub?.unsubscribe(),this.pollSub=this.crawlService.pollCrawl(o).subscribe({next:e=>{this.activeCrawl.set(e.data),(e.data.status==="completed"||e.data.status==="failed")&&(this.activeCrawl.set(null),e.data.status==="completed"&&this.crawl.set(e.data),this.bloomscrawl.emit({status:e.data.status,crawlId:e.data._id}))},error:()=>this.activeCrawl.set(null)})}static{this.\u0275fac=function(e){return new(e||a)}}static{this.\u0275cmp=D({type:a,selectors:[["blooms-crawl-insights"]],inputs:{projectId:"projectId",canGenerateReports:"canGenerateReports"},outputs:{bloomscrawl:"bloomscrawl",bloomserror:"bloomserror"},decls:2,vars:1,consts:[[1,"gate"],[1,"crawl"],[1,"crawl__toolbar"],[1,"crawl__subtitle"],[1,"crawl__toolbar-actions"],[1,"report-dropdown-wrap"],[1,"btn","btn-primary","btn-sm",3,"click","disabled"],[1,"report-msg",3,"report-msg--success","report-msg--error"],[1,"crawl-progress"],[3,"fullPage"],[1,"btn","btn-outline","btn-sm",3,"click"],[1,"report-dropdown"],[1,"report-dropdown__item",3,"disabled"],[1,"report-dropdown__item",3,"click","disabled"],[1,"report-msg"],[1,"report-msg__close",3,"click"],[1,"crawl-progress__header"],[1,"crawl-progress__label"],[1,"crawl-progress__count"],[1,"crawl-progress__track"],[1,"crawl-progress__fill"],[1,"crawl-progress__hint"],["icon","\u{1F50E}","title","No crawl data yet","description","Run a crawl to discover pages, check technical health, and identify issues on your website.","actionLabel","Start Crawl"],["icon","\u{1F50E}","title","No crawl data yet","description","Run a crawl to discover pages, check technical health, and identify issues on your website.","actionLabel","Start Crawl",3,"action"],[1,"insight-grid"],[1,"insight-card","insight-card--health"],[1,"insight-card__header"],[1,"insight-card__icon"],[1,"insight-card__label"],[1,"insight-card__value"],[1,"insight-card__unit"],[1,"insight-card__desc"],[1,"insight-card__score-bar"],[1,"insight-card__score-fill"],[1,"insight-card",3,"click"],[1,"insight-card__cta"],[1,"detail-panel"],[1,"technical-panel"],[1,"crawl-meta"],[1,"detail-panel__header"],[1,"detail-panel__title"],[1,"detail-panel__close",3,"click"],[1,"detail-empty"],[1,"detail-table-wrap"],[1,"detail-table"],["appTooltip","How many links the crawler followed from the starting page to reach this URL. Depth 0 = the starting page, depth 1 = one click away. Deeper pages are harder for search engines to discover.",1,"col-info"],[1,"page-row",3,"click"],[1,"td-expand"],[1,"expand-icon"],[1,"td-url"],["target","_blank",1,"page-link",3,"click","href"],[1,"td-title"],[1,"status-badge"],[1,"page-detail-row"],["colspan","7"],[1,"page-detail"],[1,"page-detail__grid"],[1,"page-detail__item"],[1,"page-detail__label"],[1,"page-detail__value"],[1,"page-detail__item","page-detail__item--full"],["target","_blank",1,"page-link",3,"href"],[1,"page-detail__value--muted"],[1,"h1-list"],[1,"h1-tag"],[1,"detail-panel__note"],[1,"row--error",3,"row--rescanning"],[1,"row--error"],[1,"status-badge","error"],[1,"td-rescan"],["appTooltip","Re-fetch this URL to check if it's back online",1,"rescan-btn",3,"click","disabled"],[1,"issue-filter-bar"],[1,"issue-filter-bar__label"],[1,"issue-filter-chip",3,"click"],[1,"issue-filter-chip",3,"active"],[1,"issue-legend"],[1,"issue-legend__toggle",3,"click"],[1,"issue-legend__grid"],[3,"row--rescanning"],[1,"legend-item"],[1,"issue-pill"],[1,"legend-desc"],[1,"issue-pills"],["appTooltip","Re-fetch this page and update its issues",1,"rescan-btn",3,"click","disabled"],["colspan","5",1,"detail-empty"],[1,"dup-groups"],[1,"dup-group"],[1,"dup-group__header"],[1,"dup-badge"],[1,"dup-title"],[1,"dup-group__pages"],["target","_blank",1,"dup-page-link",3,"href"],[1,"section-title"],[1,"signals-grid"],[1,"signal-item"],[1,"signal-icon"],[1,"signal-item","pass"]],template:function(e,l){e&1&&g(0,oe,2,0,"div",0)(1,Je,13,5,"div",1),e&2&&p(l.needsSignIn()?0:1)},dependencies:[z,G,V,X,J],styles:[`@charset "UTF-8";:host{--color-text: var(--color-text, #5d5f71);--color-text-muted: var(--color-text-muted, #9395a5);--color-bg: var(--color-bg, #f7f5fb);--color-card-bg: var(--color-card-bg, #ffffff);--color-border: var(--color-border, #ede9f6);--color-hover: var(--color-hover, #f5f2fb);--color-accent: var(--color-accent, #e84855);--radius-sm: var(--radius-sm, 6px);--radius-md: var(--radius-md, 10px);--radius-lg: var(--radius-lg, 16px);display:block;font-family:var(--font-sans, "Poppins", system-ui, -apple-system, sans-serif);color:var(--color-text)}:host>*{letter-spacing:normal;word-spacing:normal;line-height:1.5;text-transform:none;text-indent:0;font-style:normal;font-weight:400;font-variant:normal;text-align:left;white-space:normal}*,*:before,*:after{box-sizing:border-box}.btn{display:inline-flex;align-items:center;gap:6px;padding:9px 18px;border-radius:var(--radius-md);font-family:inherit;font-size:13px;font-weight:600;cursor:pointer;border:1px solid transparent;transition:background .15s,border-color .15s,box-shadow .15s,opacity .15s;text-decoration:none;white-space:nowrap}.btn:disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.btn-sm{padding:6px 12px;font-size:12px}.btn-primary{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.btn-primary:hover:not(:disabled){background:#d13d4a;border-color:#d13d4a;box-shadow:0 2px 8px color-mix(in srgb,var(--color-accent) 30%,transparent)}.btn-outline{background:transparent;color:var(--color-text);border-color:var(--color-border)}.btn-outline:hover:not(:disabled){background:var(--color-hover);border-color:#d5d0e4}.btn-ghost{background:transparent;color:var(--color-text-muted);border-color:transparent}.btn-ghost:hover:not(:disabled){background:var(--color-hover);color:var(--color-text)}
2
+ `,`@charset "UTF-8";.gate{padding:32px 24px;text-align:center;background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:var(--radius-lg);color:var(--color-text-muted);font-size:14px}.crawl__toolbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;flex-wrap:wrap;gap:10px}.crawl__subtitle{font-size:15px;font-weight:600;color:var(--color-text)}.crawl__toolbar-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.report-dropdown-wrap{position:relative}.report-dropdown{position:absolute;top:calc(100% + 6px);right:0;z-index:50;background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:10px;overflow:hidden;min-width:200px;box-shadow:0 8px 24px #0000001f}.report-dropdown__item{display:block;width:100%;text-align:left;padding:9px 14px;font-size:13px;color:var(--color-text);background:none;border:none;border-bottom:1px solid var(--color-border);cursor:pointer}.report-dropdown__item:last-child{border-bottom:none}.report-dropdown__item:hover:not(:disabled){background:var(--color-hover)}.report-dropdown__item:disabled{opacity:.5;cursor:default}.report-msg{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 14px;border-radius:8px;font-size:13px;margin-bottom:16px}.report-msg.report-msg--success{background:#d1fae5;color:#065f46;border:1px solid #6ee7b7}.report-msg.report-msg--error{background:#fee2e2;color:#991b1b;border:1px solid #fca5a5}.report-msg__close{background:none;border:none;cursor:pointer;font-size:14px;color:inherit;opacity:.6}.report-msg__close:hover{opacity:1}.crawl-progress{background:var(--color-primary-soft);border:1px solid var(--color-border);border-radius:12px;padding:20px;margin-bottom:28px}.crawl-progress__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;font-size:13px;font-weight:600;color:var(--color-text)}.crawl-progress__count{color:var(--color-text-muted);font-weight:500}.crawl-progress__track{height:8px;background:var(--color-border);border-radius:99px;overflow:hidden}.crawl-progress__fill{height:100%;background:var(--color-accent);border-radius:99px;transition:width .4s ease;min-width:4px}.crawl-progress__fill.indeterminate{width:40%!important;animation:indeterminate 1.4s ease-in-out infinite}@keyframes indeterminate{0%{transform:translate(-100%)}to{transform:translate(350%)}}.crawl-progress__hint{margin-top:10px;font-size:12px;color:var(--color-text-muted)}.insight-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px;margin-bottom:24px}.insight-card{background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:12px;padding:20px;display:flex;flex-direction:column;gap:8px;cursor:pointer;transition:border-color .15s,box-shadow .15s}.insight-card:hover{border-color:var(--color-accent);box-shadow:0 2px 8px #0000000f}.insight-card.active{border-color:var(--color-accent);background:#fff8f8}.insight-card.insight-card--warn{border-color:#fca5a5}.insight-card.insight-card--health{cursor:default}.insight-card.insight-card--health:hover{border-color:var(--color-border);box-shadow:none}.insight-card__header{display:flex;align-items:center;gap:8px}.insight-card__icon{font-size:16px}.insight-card__label{font-size:12px;font-weight:600;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.5px}.insight-card__value{font-size:32px;font-weight:700;color:var(--color-text);line-height:1}.insight-card__value.value--warn{color:#dc2626}.insight-card__unit{font-size:16px;font-weight:500;color:var(--color-text-muted);margin-left:2px}.insight-card__desc{font-size:12px;color:var(--color-text-muted);line-height:1.6;flex:1}.insight-card__desc code{font-size:11px;background:var(--color-primary-soft);padding:1px 4px;border-radius:3px}.insight-card__cta{font-size:12px;font-weight:600;color:var(--color-accent);margin-top:4px}.insight-card__score-bar{height:6px;background:var(--color-border);border-radius:99px;overflow:hidden;margin-top:4px}.insight-card__score-fill{height:100%;border-radius:99px;transition:width .6s ease}.score--good{background:#16a34a}.score--ok{background:#d97706}.score--bad{background:#dc2626}.detail-panel{background:var(--color-card-bg);border:1px solid var(--color-accent);border-radius:12px;overflow:hidden;margin-bottom:24px}.detail-panel__header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--color-border);background:#fff8f8}.detail-panel__title{font-size:14px;font-weight:600;color:var(--color-text)}.detail-panel__close{background:none;border:1px solid var(--color-border);border-radius:6px;padding:4px 10px;font-size:12px;color:var(--color-text-muted);cursor:pointer}.detail-panel__close:hover{background:var(--color-hover)}.detail-panel__note{padding:12px 20px;font-size:13px;color:var(--color-text-muted);line-height:1.6;border-bottom:1px solid var(--color-border);background:var(--color-primary-soft)}.detail-panel__note code{font-size:12px;background:#e0e7ef;padding:1px 4px;border-radius:3px}.detail-empty{padding:32px 20px;font-size:14px;color:var(--color-text-muted);text-align:center}.detail-table-wrap{overflow-x:auto;max-height:480px;overflow-y:auto}.detail-table{width:100%;border-collapse:collapse;font-size:13px}.detail-table th{padding:10px 16px;text-align:left;font-size:11px;font-weight:600;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.4px;background:var(--color-bg);position:sticky;top:0;z-index:1;border-bottom:1px solid var(--color-border);white-space:nowrap}.detail-table td{padding:10px 16px;border-bottom:1px solid var(--color-border);vertical-align:top}.detail-table tr:last-child td{border-bottom:none}.detail-table tr.row--error td{background:#fff8f8}.td-url{max-width:300px}.td-title{max-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.page-link{color:var(--color-accent);text-decoration:none;word-break:break-all;font-size:12px}.page-link:hover{text-decoration:underline}.status-badge{display:inline-block;padding:2px 7px;border-radius:4px;font-size:11px;font-weight:600;background:#f0fdf4;color:#166534}.status-badge.error{background:#fff1f2;color:#9f1239}.status-badge.redirect{background:#fffbeb;color:#92400e}.issue-pills{display:flex;flex-wrap:wrap;gap:4px}.issue-pill{font-size:11px;padding:2px 7px;border-radius:4px;background:#fff1f2;color:#9f1239;white-space:nowrap}.dup-groups{display:flex;flex-direction:column;gap:0}.dup-group{padding:16px 20px;border-bottom:1px solid var(--color-border)}.dup-group:last-child{border-bottom:none}.dup-group__header{display:flex;align-items:baseline;gap:10px;margin-bottom:10px;flex-wrap:wrap}.dup-badge{font-size:11px;font-weight:600;padding:2px 8px;border-radius:20px;background:#fff1f2;color:#9f1239;white-space:nowrap}.dup-title{font-size:13px;font-weight:600;color:var(--color-text)}.dup-group__pages{display:flex;flex-direction:column;gap:4px;padding-left:4px}.dup-page-link{font-size:12px;color:var(--color-accent);text-decoration:none;word-break:break-all}.dup-page-link:hover{text-decoration:underline}.col-info{display:inline-block;font-size:10px;font-weight:700;color:var(--color-text-muted);background:var(--color-primary-soft);border-radius:50%;width:14px;height:14px;text-align:center;line-height:14px;margin-left:4px;cursor:help;vertical-align:middle}.page-row{cursor:pointer}.page-row:hover td{background:var(--color-hover)!important}.row--expanded td{background:#f8f8ff!important}.td-expand{width:24px;padding-right:0!important}.expand-icon{font-size:10px;color:var(--color-text-muted);transition:transform .15s;display:inline-block}.expand-icon.expanded{transform:rotate(90deg)}.page-detail-row td{padding:0!important;border-bottom:1px solid var(--color-border)}.page-detail{background:#f8f8ff;padding:16px 20px 16px 40px;border-top:1px solid var(--color-border)}.page-detail__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px 24px}.page-detail__item{display:flex;flex-direction:column;gap:4px}.page-detail__item.page-detail__item--full{grid-column:1/-1}.page-detail__label{font-size:10px;font-weight:700;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.5px}.page-detail__value{font-size:13px;color:var(--color-text);line-height:1.5;word-break:break-word}.page-detail__value.page-detail__value--muted{color:var(--color-text-muted);font-style:italic}.h1-list{display:flex;flex-direction:column;gap:4px}.h1-tag{font-size:13px;color:var(--color-text);font-weight:600}.issue-filter-bar{display:flex;align-items:center;flex-wrap:wrap;gap:6px;padding:10px 20px;border-bottom:1px solid var(--color-border);background:var(--color-bg)}.issue-filter-bar__label{font-size:11px;font-weight:600;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.4px;margin-right:4px;flex-shrink:0}.issue-filter-chip{font-size:11px;font-weight:600;padding:3px 10px;border-radius:20px;border:1px solid var(--color-border);background:var(--color-bg);color:var(--color-text-muted);cursor:pointer;white-space:nowrap}.issue-filter-chip:hover{background:var(--color-hover);color:var(--color-text)}.issue-filter-chip.active{background:var(--color-text);color:#fff;border-color:var(--color-text)}.td-rescan{width:36px;padding-left:4px!important;padding-right:8px!important}.rescan-btn{background:none;border:1px solid var(--color-border);border-radius:6px;padding:2px 6px;font-size:13px;cursor:pointer;line-height:1.4}.rescan-btn:hover:not(:disabled){background:var(--color-hover);border-color:var(--color-accent)}.rescan-btn:disabled{opacity:.4;cursor:default}.row--rescanning td{background:#fffbeb!important}.issue-legend{border-bottom:1px solid var(--color-border)}.issue-legend__toggle{width:100%;text-align:left;padding:10px 20px;font-size:12px;font-weight:600;color:var(--color-accent);background:none;border:none;cursor:pointer}.issue-legend__toggle:hover{background:var(--color-hover)}.issue-legend__grid{display:flex;flex-direction:column;gap:0;padding:4px 0 8px}.legend-item{display:flex;align-items:baseline;gap:10px;padding:8px 20px;flex-wrap:wrap;border-top:1px solid var(--color-border)}.legend-desc{font-size:12px;color:var(--color-text-muted);line-height:1.6;flex:1;min-width:200px}.legend-desc code{font-size:11px;background:var(--color-primary-soft);padding:1px 4px;border-radius:3px}.legend-desc strong{color:var(--color-text)}.technical-panel{margin-bottom:28px}.section-title{font-size:15px;font-weight:600;color:var(--color-text);margin-bottom:16px}.signals-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px}.signal-item{display:flex;align-items:center;gap:12px;padding:14px 16px;border-radius:10px;background:var(--color-primary-soft);font-size:13px;color:var(--color-text-muted)}.signal-item div{display:flex;flex-direction:column;gap:2px}.signal-item strong{color:var(--color-text);font-weight:600;font-size:13px}.signal-item span:not(:first-child){font-size:12px}.signal-item.pass{background:#f0fdf4;color:#065f46}.signal-icon{font-size:18px;flex-shrink:0}.crawl-meta{display:flex;gap:24px;flex-wrap:wrap;font-size:12px;color:var(--color-text-muted);padding:12px 0;border-top:1px solid var(--color-border)}
3
+ `],encapsulation:3,changeDetection:0})}};export{Q as BloomsCrawlInsightsComponent};
@@ -0,0 +1 @@
1
+ import{c as u}from"./chunk-SPLW6L45.js";import{D as o,m as a,t as i,u as n,w as l,z as p}from"./chunk-WQW7QCHM.js";var g=class r{constructor(){this.http=o(u)}start(e){return this.http.post(`/api/crawl/project/${e}/start`,{})}getLatest(e){return this.http.get(`/api/crawl/project/${e}/latest`)}get(e){return this.http.get(`/api/crawl/${e}`)}listHistory(e,t=1,s=10){return this.http.get(`/api/crawl/project/${e}/history`,{params:{page:String(t),limit:String(s)}})}startSitemapCrawl(e,t){return this.http.post(`/api/crawl/project/${e}/sitemap`,{sitemapUrl:t})}getActiveSitemapCrawl(e){return this.http.get(`/api/crawl/project/${e}/sitemap/active`)}getLatestSitemapCrawl(e){return this.http.get(`/api/crawl/project/${e}/sitemap/latest`)}listSitemapHistory(e,t=1,s=10){return this.http.get(`/api/crawl/project/${e}/sitemap/history`,{params:{page:String(t),limit:String(s)}})}cancel(e){return this.http.patch(`/api/crawl/${e}/cancel`,{})}pause(e){return this.http.patch(`/api/crawl/${e}/pause`,{})}resumeCrawl(e){return this.http.patch(`/api/crawl/${e}/resume`,{})}delete(e){return this.http.delete(`/api/crawl/${e}`)}rescanUrl(e,t){return this.http.post(`/api/crawl/${e}/rescan-url`,{url:t})}pollCrawl(e){return a(2e3).pipe(n(()=>this.get(e)),l(t=>t.data.status==="pending"||t.data.status==="running",!0),i())}static{this.\u0275fac=function(t){return new(t||r)}}static{this.\u0275prov=p({token:r,factory:r.\u0275fac,providedIn:"root"})}};export{g as a};
@@ -0,0 +1,3 @@
1
+ import{a as J,b as K,c as Q,d as X,f as Z,g as ee}from"./chunk-53INJES5.js";import{c as W,e as H,h as Y,s as q}from"./chunk-VQEBAAHK.js";import{a as G}from"./chunk-HLIQJSA7.js";import"./chunk-SPLW6L45.js";import{$a as T,Ca as u,Cb as L,D as S,Ga as g,Ha as y,Ia as P,J as m,K as p,La as f,Na as N,Oa as D,Pa as E,Qa as a,Ra as o,S as O,Sa as j,Ta as b,Ua as _,V as F,Va as s,W as x,Wa as d,Xa as w,Ya as h,Za as k,ab as M,bb as I,e as A,eb as B,gb as V,na as C,nb as z,pa as l,tb as $,v,xa as U,xb as R}from"./chunk-WQW7QCHM.js";var ie=(r,t)=>t._id;function ne(r,t){r&1&&(a(0,"div",6)(1,"div",9),j(2,"span")(3,"span")(4,"span"),o()())}function oe(r,t){if(r&1&&(a(0,"div",7)(1,"div",10),d(2,"\u{1F4ED}"),o(),a(3,"p",11),d(4,"No events scheduled for this day."),o(),a(5,"a",12),d(6," \u2190 Back to Calendar "),o()()),r&2){let e=s();l(5),g("href","/projects/"+e.projectId+"/lego/social-media-calendar",C)}}function ae(r,t){r&1&&(a(0,"span",20),d(1,"\u26A0"),o())}function re(r,t){if(r&1&&(a(0,"p",24),d(1),o()),r&2){let e=s().$implicit;l(),w(e.description)}}function le(r,t){if(r&1){let e=b();a(0,"div",14),_("click",function(){let n=m(e).$implicit,c=s(2);return p(c.openDrawer(n))}),a(1,"div",15)(2,"span",16),d(3),B(4,"date"),o(),j(5,"span",17),o(),a(6,"div",18)(7,"div",19),u(8,ae,2,0,"span",20),d(9),o(),a(10,"div",21)(11,"span",22),d(12),o(),a(13,"span",23),d(14),o()(),u(15,re,2,1,"p",24),o(),a(16,"span",25),d(17,"\u203A"),o()()}if(r&2){let e,i=t.$implicit,n=s(2);P("day-event-card--overdue",n.isOverdue(i))("day-event-card--selected",((e=n.activeEvent())==null?null:e._id)===i._id),l(3),w(V(4,17,i.scheduledAt,"h:mm a")),l(2),y("background",n.platformColor(i.platform)),l(3),f(n.isOverdue(i)?8:-1),l(),h(" ",i.title," "),l(2),y("background",n.platformColor(i.platform)),l(),k(" ",n.platformIcon(i.platform)," ",n.platformLabel(i.platform)," "),l(),y("background",n.statusColor(i.status)),l(),w(i.status),l(),f(i.description?15:-1)}}function de(r,t){if(r&1&&(a(0,"div",8),D(1,le,18,20,"div",13,ie),o()),r&2){let e=s();l(),E(e.sortedEvents())}}function se(r,t){r&1&&(a(0,"div",28),d(1,"Loading event..."),o())}function ce(r,t){if(r&1&&(a(0,"div",34),d(1),B(2,"date"),o()),r&2){let e=s(3);l(),h(" \u26A0 This event is overdue \u2014 scheduled for ",V(2,1,e.activeEvent().scheduledAt,"MMM d, y, h:mm a")," ")}}function me(r,t){if(r&1){let e=b();a(0,"input",55),I("ngModelChange",function(n){m(e);let c=s(3);return M(c.editTitle,n)||(c.editTitle=n),p(n)}),_("blur",function(){m(e);let n=s(3);return p(n.saveTitle())})("keydown.enter",function(){m(e);let n=s(3);return p(n.saveTitle())}),o()}if(r&2){let e=s(3);T("ngModel",e.editTitle)}}function pe(r,t){if(r&1){let e=b();a(0,"h2",56),_("click",function(){m(e);let n=s(3);return p(n.startEditTitle())}),d(1),a(2,"span",57),d(3,"\u270F"),o()()}if(r&2){let e=s(3);l(),h(" ",e.activeEvent().title," ")}}function _e(r,t){if(r&1&&(a(0,"span",59),d(1),o()),r&2){let e=t.$implicit,i=s(4);l(),w(i.memberName(e))}}function ve(r,t){if(r&1&&(a(0,"div",35)(1,"label",36),d(2,"Assigned To"),o(),a(3,"div",58),D(4,_e,2,1,"span",59,N),o()()),r&2){let e=s(3);l(4),E(e.activeEvent().assignees)}}function xe(r,t){if(r&1){let e=b();a(0,"div",43)(1,"a",60),d(2),o(),a(3,"button",61),_("click",function(){let n=m(e).$implicit,c=s(3);return p(c.deleteAttachment(n._id))}),d(4,"\u{1F5D1}"),o()()}if(r&2){let e=t.$implicit;l(),g("href",e.url,C),l(),h(" ",e.name," ")}}function fe(r,t){if(r&1){let e=b();a(0,"button",62),_("click",function(){m(e);let n=s(3);return p(n.markCompleted())}),d(1),o()}if(r&2){let e=s(3);g("disabled",e.saving()),l(),h(" ",e.saving()?"Saving...":"\u2713 Mark Completed"," ")}}function ue(r,t){if(r&1){let e=b();a(0,"div",29)(1,"div",30)(2,"span",31),d(3),o(),a(4,"span",32),d(5),o()(),a(6,"button",33),_("click",function(){m(e);let n=s(2);return p(n.closeDrawer())}),d(7,"\u2715"),o()(),u(8,ce,3,4,"div",34),a(9,"div",35)(10,"label",36),d(11,"Title"),o(),u(12,me,1,1,"input",37)(13,pe,4,1,"h2",38),o(),a(14,"div",35)(15,"label",36),d(16,"Scheduled"),o(),a(17,"input",39),B(18,"date"),_("change",function(n){m(e);let c=s(2);return p(c.onReschedule(n))}),o()(),a(19,"div",35)(20,"label",36),d(21,"Description / Caption"),o(),a(22,"textarea",40),_("change",function(n){m(e);let c=s(2);return p(c.onDescChange(n))}),o()(),a(23,"div",35)(24,"label",36),d(25,"Internal Notes"),o(),a(26,"textarea",41),_("change",function(n){m(e);let c=s(2);return p(c.onNotesChange(n))}),o()(),u(27,ve,6,0,"div",35),a(28,"div",35)(29,"label",36),d(30,"Attachments"),o(),a(31,"div",42),D(32,xe,5,2,"div",43,ie),o(),a(34,"div",44)(35,"label",45)(36,"input",46),_("change",function(n){m(e);let c=s(2);return p(c.onFileUpload(n))}),o(),d(37," \u{1F4CE} Upload files "),o(),a(38,"div",47)(39,"input",48),I("ngModelChange",function(n){m(e);let c=s(2);return M(c.linkUrl,n)||(c.linkUrl=n),p(n)}),o(),a(40,"input",49),I("ngModelChange",function(n){m(e);let c=s(2);return M(c.linkName,n)||(c.linkName=n),p(n)}),o(),a(41,"button",50),_("click",function(){m(e);let n=s(2);return p(n.addLink())}),d(42,"Add"),o()()()(),a(43,"div",51),u(44,fe,2,2,"button",52),a(45,"button",53),_("click",function(){m(e);let n=s(2);return p(n.confirmDelete())}),d(46,"\u{1F5D1} Delete"),o(),a(47,"a",54),d(48,"Open in Calendar \u2197"),o()()}if(r&2){let e=s(2);l(2),y("background",e.platformColor(e.activeEvent().platform)),l(),k(" ",e.platformIcon(e.activeEvent().platform)," ",e.platformLabel(e.activeEvent().platform)," "),l(),y("background",e.statusColor(e.activeEvent().status)),l(),h(" ",e.activeEvent().status," "),l(3),f(e.isOverdue(e.activeEvent())?8:-1),l(4),f(e.editingTitle()?12:13),l(5),g("ngModel",V(18,17,e.activeEvent().scheduledAt,"yyyy-MM-ddTHH:mm")),l(5),g("ngModel",e.activeEvent().description||""),l(4),g("ngModel",e.activeEvent().notes||""),l(),f(e.activeEvent().assignees.length?27:-1),l(5),E(e.activeEvent().attachments),l(7),T("ngModel",e.linkUrl),l(),T("ngModel",e.linkName),l(4),f(e.activeEvent().status!=="completed"?44:-1),l(3),g("href","/projects/"+e.projectId+"/lego/social-media-calendar/events/"+e.activeEvent()._id,C)}}function ge(r,t){if(r&1){let e=b();a(0,"div",26),_("click",function(){m(e);let n=s();return p(n.closeDrawer())}),o(),a(1,"div",27),u(2,se,2,0,"div",28)(3,ue,49,20),o()}if(r&2){let e=s();l(),P("smc-drawer--open",e.drawerOpen()),l(),f(e.drawerLoading()?2:e.activeEvent()?3:-1)}}var te=class r{constructor(){this.host=S(F);this.projectId="";this.dateIso="";this.bloomsnavigate=new O;this.bloomserror=new O;this.needsSignIn=z(()=>L.config()!==null&&L.session()===null);this.smc=S(Z);this.ums=S(ee);this.destroy$=new A;this.date=x(new Date);this.events=x([]);this.loading=x(!0);this.drawerOpen=x(!1);this.drawerLoading=x(!1);this.activeEvent=x(null);this.saving=x(!1);this.editingTitle=x(!1);this.editTitle="";this.projectMembers=x([]);this.linkUrl="";this.linkName="";this.sortedEvents=z(()=>[...this.events()].sort((t,e)=>new Date(t.scheduledAt).getTime()-new Date(e.scheduledAt).getTime()));this.dateLabel=z(()=>{let t=this.date(),e=new Date,i=t.getDate()===e.getDate()&&t.getMonth()===e.getMonth()&&t.getFullYear()===e.getFullYear(),n=t.toLocaleDateString("en-US",{weekday:"long",year:"numeric",month:"long",day:"numeric"});return i?`Today \u2014 ${n}`:n})}ngOnInit(){this.projectId||(this.projectId=L.project()?.id??"");let t=this.dateIso||"";if(t){let[e,i,n]=t.split("-").map(Number);this.date.set(new Date(e,i-1,n))}this.loadEvents(),this.ums.getProjectMembers(this.projectId).subscribe({next:e=>this.projectMembers.set(e.data||[]),error:()=>{}})}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}loadEvents(){let t=this.date(),e=new Date(t.getFullYear(),t.getMonth(),t.getDate(),0,0,0).toISOString(),i=new Date(t.getFullYear(),t.getMonth(),t.getDate(),23,59,59).toISOString();this.smc.listEvents(this.projectId,{from:e,to:i,limit:200}).pipe(v(this.destroy$)).subscribe({next:n=>{this.events.set(n.data||[]),this.loading.set(!1)},error:()=>this.loading.set(!1)})}openDrawer(t){this.drawerOpen.set(!0),this.drawerLoading.set(!0),this.smc.getEvent(t._id).pipe(v(this.destroy$)).subscribe({next:e=>{this.activeEvent.set(e.data),this.drawerLoading.set(!1)},error:()=>this.drawerLoading.set(!1)})}closeDrawer(){this.drawerOpen.set(!1),this.activeEvent.set(null),this.editingTitle.set(!1)}startEditTitle(){this.editTitle=this.activeEvent().title,this.editingTitle.set(!0)}saveTitle(){this.editTitle.trim()&&(this.editingTitle.set(!1),this.saving.set(!0),this.smc.updateEvent(this.activeEvent()._id,{title:this.editTitle}).pipe(v(this.destroy$)).subscribe({next:t=>{this.activeEvent.set(t.data),this.saving.set(!1),this.refreshInList(t.data)}}))}onReschedule(t){let e=t.target.value;e&&this.smc.rescheduleEvent(this.activeEvent()._id,new Date(e).toISOString()).pipe(v(this.destroy$)).subscribe({next:i=>{this.activeEvent.set(i.data),this.refreshInList(i.data)}})}onDescChange(t){let e=t.target.value;this.smc.updateEvent(this.activeEvent()._id,{description:e}).pipe(v(this.destroy$)).subscribe({next:i=>this.activeEvent.set(i.data)})}onNotesChange(t){let e=t.target.value;this.smc.updateEvent(this.activeEvent()._id,{notes:e}).pipe(v(this.destroy$)).subscribe({next:i=>this.activeEvent.set(i.data)})}markCompleted(){this.saving.set(!0),this.smc.updateStatus(this.activeEvent()._id,"completed").pipe(v(this.destroy$)).subscribe({next:t=>{this.activeEvent.set(t.data),this.saving.set(!1),this.refreshInList(t.data)}})}confirmDelete(){if(!confirm(`Delete event "${this.activeEvent().title}"?`))return;let t=this.activeEvent()._id;this.smc.deleteEvent(t).pipe(v(this.destroy$)).subscribe({next:()=>{this.closeDrawer(),this.events.update(e=>e.filter(i=>i._id!==t))}})}onFileUpload(t){let e=t.target.files;e&&Array.from(e).forEach(i=>{this.smc.uploadFile(this.activeEvent()._id,i).pipe(v(this.destroy$)).subscribe({next:n=>this.activeEvent.set(n.data)})})}addLink(){this.linkUrl.trim()&&this.smc.addLink(this.activeEvent()._id,"link",this.linkName||this.linkUrl,this.linkUrl).pipe(v(this.destroy$)).subscribe({next:t=>{this.activeEvent.set(t.data),this.linkUrl="",this.linkName=""}})}deleteAttachment(t){this.smc.removeAttachment(this.activeEvent()._id,t).pipe(v(this.destroy$)).subscribe({next:e=>this.activeEvent.set(e.data)})}memberName(t){let e=this.projectMembers().find(i=>i._id===t);return e?e.name:t}isOverdue(t){return this.smc.isOverdue(t)}platformLabel(t){return J[t]||t}platformColor(t){return K[t]||"#6366f1"}platformIcon(t){return Q[t]||"\u{1F4CC}"}statusColor(t){return X[t]||"#6b7280"}refreshInList(t){this.events.update(e=>e.map(i=>i._id===t._id?t:i))}static{this.\u0275fac=function(e){return new(e||r)}}static{this.\u0275cmp=U({type:r,selectors:[["blooms-smc-day-detail"]],inputs:{projectId:"projectId",dateIso:"dateIso"},outputs:{bloomsnavigate:"bloomsnavigate",bloomserror:"bloomserror"},decls:14,vars:6,consts:[[1,"day-page"],[1,"day-page__header"],[1,"back-link",3,"href"],[1,"day-page__title-row"],[1,"day-page__title"],[1,"day-page__subtitle"],[1,"day-page__loading"],[1,"day-page__empty"],[1,"day-event-list"],[1,"loading-dots"],[1,"day-page__empty-icon"],[1,"day-page__empty-text"],[1,"btn","btn-ghost",3,"href"],[1,"day-event-card",3,"day-event-card--overdue","day-event-card--selected"],[1,"day-event-card",3,"click"],[1,"day-event-card__time-col"],[1,"day-event-card__time"],[1,"day-event-card__dot"],[1,"day-event-card__body"],[1,"day-event-card__title"],[1,"day-event-card__warn"],[1,"day-event-card__badges"],[1,"badge-platform"],[1,"badge-status"],[1,"day-event-card__desc"],[1,"day-event-card__chevron"],[1,"smc-overlay",3,"click"],[1,"smc-drawer"],[1,"smc-drawer__loading"],[1,"smc-drawer__header"],[1,"smc-drawer__header-left"],[1,"smc-drawer__platform-badge"],[1,"smc-drawer__status-badge"],["appTooltip","Close",1,"smc-drawer__close",3,"click"],[1,"smc-drawer__overdue-banner"],[1,"smc-drawer__section"],[1,"smc-drawer__label"],["autofocus","",1,"form-input",3,"ngModel"],[1,"smc-drawer__event-title"],["type","datetime-local",1,"form-input",3,"change","ngModel"],["rows","4","placeholder","Post caption, copy, or description...",1,"form-textarea",3,"change","ngModel"],["rows","3","placeholder","Internal team notes (not published)...",1,"form-textarea",3,"change","ngModel"],[1,"smc-drawer__attachments"],[1,"smc-drawer__attachment"],[1,"smc-drawer__upload-zone"],[1,"smc-drawer__upload-label"],["type","file","multiple","",2,"display","none",3,"change"],[1,"smc-drawer__link-row"],["placeholder","Paste a link URL...",1,"form-input","form-input--sm",3,"ngModelChange","ngModel"],["placeholder","Link name",1,"form-input","form-input--sm",3,"ngModelChange","ngModel"],[1,"btn","btn-sm","btn-ghost",3,"click"],[1,"smc-drawer__footer"],[1,"btn","btn-success","btn-sm",3,"disabled"],[1,"btn","btn-danger","btn-sm",3,"click"],["target","_blank","rel","noopener","appTooltip","Open full detail in calendar view",1,"btn","btn-ghost","btn-sm",3,"href"],["autofocus","",1,"form-input",3,"ngModelChange","blur","keydown.enter","ngModel"],[1,"smc-drawer__event-title",3,"click"],[1,"smc-drawer__edit-hint"],[1,"smc-drawer__assignees"],[1,"smc-drawer__assignee-chip"],["target","_blank",1,"smc-drawer__attachment-name",3,"href"],["appTooltip","Remove",1,"btn-icon",3,"click"],[1,"btn","btn-success","btn-sm",3,"click","disabled"]],template:function(e,i){e&1&&(a(0,"div",0)(1,"div",1)(2,"a",2),d(3,"\u2190 Calendar"),o(),a(4,"div",3)(5,"div")(6,"h1",4),d(7),o(),a(8,"p",5),d(9),o()()()(),u(10,ne,5,0,"div",6)(11,oe,7,1,"div",7)(12,de,3,0,"div",8)(13,ge,4,3),o()),e&2&&(l(2),g("href","/projects/"+i.projectId+"/lego/social-media-calendar",C),l(5),w(i.dateLabel()),l(2),k(" ",i.events().length," event",i.events().length!==1?"s":""," scheduled "),l(),f(i.loading()?10:i.events().length===0?11:12),l(3),f(i.drawerOpen()?13:-1))},dependencies:[R,$,q,W,H,Y,G],styles:[`@charset "UTF-8";:host{--color-text: var(--color-text, #5d5f71);--color-text-muted: var(--color-text-muted, #9395a5);--color-bg: var(--color-bg, #f7f5fb);--color-card-bg: var(--color-card-bg, #ffffff);--color-border: var(--color-border, #ede9f6);--color-hover: var(--color-hover, #f5f2fb);--color-accent: var(--color-accent, #e84855);--radius-sm: var(--radius-sm, 6px);--radius-md: var(--radius-md, 10px);--radius-lg: var(--radius-lg, 16px);display:block;font-family:var(--font-sans, "Poppins", system-ui, -apple-system, sans-serif);color:var(--color-text)}:host>*{letter-spacing:normal;word-spacing:normal;line-height:1.5;text-transform:none;text-indent:0;font-style:normal;font-weight:400;font-variant:normal;text-align:left;white-space:normal}*,*:before,*:after{box-sizing:border-box}.btn{display:inline-flex;align-items:center;gap:6px;padding:9px 18px;border-radius:var(--radius-md);font-family:inherit;font-size:13px;font-weight:600;cursor:pointer;border:1px solid transparent;transition:background .15s,border-color .15s,box-shadow .15s,opacity .15s;text-decoration:none;white-space:nowrap}.btn:disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.btn-sm{padding:6px 12px;font-size:12px}.btn-primary{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.btn-primary:hover:not(:disabled){background:#d13d4a;border-color:#d13d4a;box-shadow:0 2px 8px color-mix(in srgb,var(--color-accent) 30%,transparent)}.btn-outline{background:transparent;color:var(--color-text);border-color:var(--color-border)}.btn-outline:hover:not(:disabled){background:var(--color-hover);border-color:#d5d0e4}.btn-ghost{background:transparent;color:var(--color-text-muted);border-color:transparent}.btn-ghost:hover:not(:disabled){background:var(--color-hover);color:var(--color-text)}
2
+ `,`.day-page{padding:24px;max-width:900px;margin:0 auto;font-family:var(--font-sans, system-ui, sans-serif)}.back-link{color:var(--color-accent, #6366f1);text-decoration:none;font-size:.85rem}.back-link:hover{text-decoration:underline}.day-page__header{margin-bottom:24px}.day-page__title-row{margin-top:12px}.day-page__title{font-size:1.5rem;font-weight:700;margin:0;color:var(--color-text, #111827)}.day-page__subtitle{font-size:.85rem;color:var(--color-text-muted, #6b7280);margin:4px 0 0}.day-page__loading{padding:60px;text-align:center}.loading-dots{display:flex;gap:6px;justify-content:center}.loading-dots span{width:8px;height:8px;border-radius:50%;background:var(--color-border, #e5e7eb);animation:pulse 1.2s ease-in-out infinite}.loading-dots span:nth-child(2){animation-delay:.2s}.loading-dots span:nth-child(3){animation-delay:.4s}@keyframes pulse{0%,to{opacity:.3}50%{opacity:1}}.day-page__empty{text-align:center;padding:60px 24px}.day-page__empty-icon{font-size:3rem;margin-bottom:12px}.day-page__empty-text{font-size:1rem;color:var(--color-text-muted, #6b7280);margin:0 0 20px}.day-event-list{display:flex;flex-direction:column;gap:8px}.day-event-card{display:flex;align-items:flex-start;gap:16px;padding:16px;border-radius:12px;cursor:pointer;border:1px solid var(--color-border, #e5e7eb);background:var(--color-card-bg, #fff);transition:border-color .15s,box-shadow .15s}.day-event-card:hover{border-color:var(--color-accent, #6366f1);box-shadow:0 2px 12px #6366f114}.day-event-card--selected{border-color:var(--color-accent, #6366f1);background:var(--color-primary-soft, #eff6ff)}.day-event-card--overdue{border-left:4px solid #f59e0b}.day-event-card__time-col{display:flex;flex-direction:column;align-items:center;gap:8px;min-width:64px;flex-shrink:0}.day-event-card__time{font-size:.8rem;font-weight:600;color:var(--color-text-muted, #6b7280)}.day-event-card__dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.day-event-card__body{flex:1;min-width:0}.day-event-card__title{font-size:1rem;font-weight:600;color:var(--color-text, #111827);margin-bottom:6px;display:flex;align-items:center;gap:6px}.day-event-card__warn{color:#f59e0b}.day-event-card__badges{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:6px}.badge-platform,.badge-status{display:inline-flex;align-items:center;gap:3px;padding:2px 8px;border-radius:10px;font-size:.72rem;font-weight:600;color:#fff}.day-event-card__desc{font-size:.82rem;color:var(--color-text-muted, #6b7280);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.day-event-card__chevron{font-size:1.2rem;color:var(--color-text-muted, #9ca3af);flex-shrink:0;align-self:center}.smc-overlay{position:fixed;inset:0;background:#00000059;z-index:200;backdrop-filter:blur(2px)}.smc-drawer{position:fixed;top:0;right:0;bottom:0;width:80%;background:var(--color-bg, #fff);z-index:201;box-shadow:-4px 0 24px #00000026;transform:translate(100%);transition:transform .25s ease;display:flex;flex-direction:column;overflow-y:auto}.smc-drawer--open{transform:translate(0)}.smc-drawer__loading{padding:40px;text-align:center;color:#6b7280}.smc-drawer__header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #e5e7eb;flex-shrink:0}.smc-drawer__header-left{display:flex;align-items:center;gap:8px}.smc-drawer__close{background:none;border:none;font-size:1.1rem;cursor:pointer;padding:4px 8px;border-radius:4px;color:#6b7280}.smc-drawer__close:hover{background:#f3f4f6}.smc-drawer__platform-badge,.smc-drawer__status-badge{padding:3px 10px;border-radius:12px;font-size:.78rem;font-weight:600;color:#fff}.smc-drawer__overdue-banner{background:#fef3c7;color:#92400e;padding:10px 20px;font-size:.85rem;font-weight:500;border-bottom:1px solid #fde68a}.smc-drawer__section{padding:16px 20px;border-bottom:1px solid #f3f4f6}.smc-drawer__label{display:block;font-size:.78rem;font-weight:600;color:#6b7280;margin-bottom:6px;text-transform:uppercase;letter-spacing:.05em}.smc-drawer__event-title{font-size:1.3rem;font-weight:700;margin:0;cursor:pointer;display:flex;align-items:center;gap:6px}.smc-drawer__edit-hint{font-size:.8rem;color:#9ca3af;opacity:0;transition:opacity .15s}.smc-drawer__event-title:hover .smc-drawer__edit-hint{opacity:1}.smc-drawer__assignees{display:flex;flex-wrap:wrap;gap:6px}.smc-drawer__assignee-chip{display:inline-flex;align-items:center;padding:2px 10px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:12px;font-size:.78rem;color:#1e40af}.smc-drawer__attachments{display:flex;flex-direction:column;gap:6px;margin-bottom:10px}.smc-drawer__attachment{display:flex;align-items:center;justify-content:space-between;padding:6px 8px;background:#f9fafb;border-radius:6px;border:1px solid #e5e7eb}.smc-drawer__attachment-name{font-size:.82rem;color:#111827;text-decoration:none}.smc-drawer__attachment-name:hover{text-decoration:underline}.smc-drawer__upload-zone{padding:10px;border:2px dashed #d1d5db;border-radius:8px}.smc-drawer__upload-label{cursor:pointer;font-size:.82rem;color:var(--color-accent, #6366f1);display:block;margin-bottom:8px}.smc-drawer__link-row{display:flex;gap:6px}.form-input--sm{padding:5px 8px;font-size:.78rem}.btn-icon{background:none;border:none;cursor:pointer;padding:2px 4px;color:#9ca3af}.btn-icon:hover{color:#ef4444}.smc-drawer__footer{display:flex;gap:8px;padding:16px 20px;margin-top:auto;border-top:1px solid #e5e7eb;flex-shrink:0;position:sticky;bottom:0;background:var(--color-bg, #fff);flex-wrap:wrap}.form-input,.form-textarea{width:100%;padding:8px 12px;border:1px solid #e5e7eb;border-radius:8px;font-size:.85rem;box-sizing:border-box;background:var(--color-bg, #fff);color:var(--color-text, #111827)}.form-textarea{resize:vertical}.btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border-radius:8px;font-size:.85rem;font-weight:500;cursor:pointer;border:none;transition:all .15s;text-decoration:none}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-sm{padding:5px 12px;font-size:.8rem}.btn-ghost{background:none;border:1px solid #e5e7eb;color:#374151}.btn-ghost:hover{background:#f3f4f6}.btn-success{background:#10b981;color:#fff}.btn-success:hover:not(:disabled){background:#059669}.btn-danger{background:#ef4444;color:#fff}.btn-danger:hover{background:#dc2626}@media (max-width: 640px){.smc-drawer{width:100%}.day-event-card{flex-wrap:wrap}}
3
+ `],encapsulation:3,changeDetection:0})}};export{te as BloomsSmcDayDetailComponent};
@@ -0,0 +1,24 @@
1
+ import{D as h,Ua as x,V as u,va as b,za as v}from"./chunk-WQW7QCHM.js";var E=class d{constructor(){this.text="";this.position="top";this.delay=200;this.disabled=!1;this.host=h(u);this.r=h(b);this.GAP=8;this.EDGE=8;this.dismiss=()=>{this.cancel(),this.hide()}}onEnter(){this.schedule()}onLeave(){this.cancel(),this.hide()}ngOnDestroy(){this.cancel(),this.hide()}root(){let t=this.host.nativeElement.getRootNode();return t instanceof ShadowRoot?t:null}ensureStyles(t){if(t.querySelector("style[data-blooms-tooltip]"))return;let i=this.r.createElement("style");this.r.setAttribute(i,"data-blooms-tooltip",""),this.r.setProperty(i,"textContent",`
2
+ .bui-tooltip {
3
+ position: fixed; z-index: 2147483000;
4
+ max-width: 260px; padding: 8px 11px;
5
+ background: #ffffff; color: #14121f;
6
+ border-radius: 10px;
7
+ box-shadow: 0 6px 24px rgba(0,0,0,.14), 0 1px 3px rgba(0,0,0,.08);
8
+ font: 400 12.5px/1.45 var(--font-sans, 'Poppins', system-ui, sans-serif);
9
+ letter-spacing: normal; text-align: left; white-space: normal;
10
+ pointer-events: none;
11
+ opacity: 0; transform: translateY(3px);
12
+ transition: opacity .13s ease, transform .13s ease;
13
+ }
14
+ .bui-tooltip--in { opacity: 1; transform: translateY(0); }
15
+ .bui-tooltip__tail {
16
+ position: absolute; width: 9px; height: 9px;
17
+ background: #ffffff; transform: rotate(45deg);
18
+ }
19
+ .bui-tooltip__tail.is-top { top: -4px; box-shadow: -2px -2px 3px rgba(0,0,0,.05); }
20
+ .bui-tooltip__tail.is-bottom { bottom: -4px; box-shadow: 2px 2px 3px rgba(0,0,0,.05); }
21
+ .bui-tooltip__tail.is-left { left: -4px; box-shadow: -2px 2px 3px rgba(0,0,0,.05); }
22
+ .bui-tooltip__tail.is-right { right: -4px; box-shadow: 2px -2px 3px rgba(0,0,0,.05); }
23
+ @media (prefers-reduced-motion: reduce) { .bui-tooltip { transition: none; } }
24
+ `),this.r.appendChild(t,i)}schedule(){this.disabled||!this.text?.trim()||(this.cancel(),this.timer=setTimeout(()=>this.show(),Math.max(0,this.delay)))}cancel(){this.timer&&(clearTimeout(this.timer),this.timer=void 0)}show(){if(this.tip||!this.text?.trim())return;let t=this.root();if(!t)return;this.ensureStyles(t);let i=this.r.createElement("div");this.r.addClass(i,"bui-tooltip"),this.r.setAttribute(i,"role","tooltip"),this.r.setProperty(i,"textContent",this.text);let e=this.r.createElement("div");this.r.addClass(e,"bui-tooltip__tail"),this.r.appendChild(i,e),this.r.appendChild(t,i),this.tip=i,this.tail=e,window.addEventListener("scroll",this.dismiss,{capture:!0,passive:!0}),window.addEventListener("resize",this.dismiss,{passive:!0}),this.place(),requestAnimationFrame(()=>this.tip&&this.r.addClass(this.tip,"bui-tooltip--in"))}place(){if(!this.tip||!this.tail)return;let t=this.host.nativeElement.getBoundingClientRect(),i=this.tip.offsetWidth,e=this.tip.offsetHeight,n=document.documentElement.clientWidth,m=document.documentElement.clientHeight,o=this.position,s={top:t.top-this.GAP-this.EDGE,bottom:m-t.bottom-this.GAP-this.EDGE,left:t.left-this.GAP-this.EDGE,right:n-t.right-this.GAP-this.EDGE};o==="top"&&s.top<e&&s.bottom>s.top?o="bottom":o==="bottom"&&s.bottom<e&&s.top>s.bottom?o="top":o==="left"&&s.left<i&&s.right>s.left?o="right":o==="right"&&s.right<i&&s.left>s.right&&(o="left");let r=0,a=0,f=t.left+t.width/2,c=t.top+t.height/2;o==="top"||o==="bottom"?(r=f-i/2,a=o==="top"?t.top-e-this.GAP:t.bottom+this.GAP):(a=c-e/2,r=o==="left"?t.left-i-this.GAP:t.right+this.GAP),r=Math.min(Math.max(this.EDGE,r),n-i-this.EDGE),a=Math.min(Math.max(this.EDGE,a),m-e-this.EDGE),this.r.setStyle(this.tip,"left",`${Math.round(r)}px`),this.r.setStyle(this.tip,"top",`${Math.round(a)}px`);let p=9;for(let l of["is-top","is-bottom","is-left","is-right"])this.r.removeClass(this.tail,l);if(o==="top"||o==="bottom"){let l=Math.min(Math.max(8,f-r-p/2),i-p-8);this.r.setStyle(this.tail,"left",`${Math.round(l)}px`),this.r.setStyle(this.tail,"top",""),this.r.addClass(this.tail,o==="top"?"is-bottom":"is-top")}else{let l=Math.min(Math.max(8,c-a-p/2),e-p-8);this.r.setStyle(this.tail,"top",`${Math.round(l)}px`),this.r.setStyle(this.tail,"left",""),this.r.addClass(this.tail,o==="left"?"is-right":"is-left")}}hide(){this.tip&&(window.removeEventListener("scroll",this.dismiss,{capture:!0}),window.removeEventListener("resize",this.dismiss),this.tip.remove(),this.tip=void 0,this.tail=void 0)}static{this.\u0275fac=function(i){return new(i||d)}}static{this.\u0275dir=v({type:d,selectors:[["","appTooltip",""]],hostBindings:function(i,e){i&1&&x("mouseenter",function(){return e.onEnter()})("focus",function(){return e.onEnter()})("mouseleave",function(){return e.onLeave()})("blur",function(){return e.onLeave()})("click",function(){return e.onLeave()})},inputs:{text:[0,"appTooltip","text"],position:[0,"tooltipPosition","position"],delay:[0,"tooltipDelay","delay"],disabled:[0,"tooltipDisabled","disabled"]}})}};export{E as a};
@@ -0,0 +1 @@
1
+ import{c as p}from"./chunk-SPLW6L45.js";import{D as o,z as s}from"./chunk-WQW7QCHM.js";var i=class r{constructor(){this.http=o(p)}list(e){return this.http.get(`/api/keywords/project/${e}`)}add(e,t){return this.http.post(`/api/keywords/project/${e}`,{keyword:t})}get(e){return this.http.get(`/api/keywords/${e}`)}delete(e){return this.http.delete(`/api/keywords/${e}`)}sync(e){return this.http.post(`/api/keywords/${e}/sync`,{})}getGscData(e,t){return this.http.get("/api/gsc/keyword-data",{params:{projectId:e,keyword:t}})}static{this.\u0275fac=function(t){return new(t||r)}}static{this.\u0275prov=s({token:r,factory:r.\u0275fac,providedIn:"root"})}};export{i as a};
@@ -0,0 +1 @@
1
+ import{Ha as r,Ia as p,Qa as s,Ra as a,Sa as l,pa as t,xa as o}from"./chunk-WQW7QCHM.js";var c=class i{constructor(){this.size=32;this.fullPage=!1}static{this.\u0275fac=function(e){return new(e||i)}}static{this.\u0275cmp=o({type:i,selectors:[["app-loading-spinner"]],inputs:{size:"size",fullPage:"fullPage"},decls:2,vars:6,consts:[[1,"spinner-wrapper"],[1,"spinner"]],template:function(e,n){e&1&&(s(0,"div",0),l(1,"div",1),a()),e&2&&(p("full-page",n.fullPage),t(),r("width",n.size,"px")("height",n.size,"px"))},styles:[".spinner-wrapper[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;padding:40px}.spinner-wrapper.full-page[_ngcontent-%COMP%]{min-height:60vh}.spinner[_ngcontent-%COMP%]{border:3px solid var(--color-border);border-top-color:var(--color-accent);border-radius:50%;animation:_ngcontent-%COMP%_spin .7s linear infinite}@keyframes _ngcontent-%COMP%_spin{to{transform:rotate(360deg)}}"]})}};export{c as a};
@@ -0,0 +1 @@
1
+ import{a as R,c as b}from"./chunk-SPLW6L45.js";import{D as d,j as o,l as n,t as i,u as a,w as l,z as g}from"./chunk-WQW7QCHM.js";var c=class p{constructor(){this.http=d(b)}generate(e,t){return this.http.post(`/api/reports/project/${e}/generate`,t)}generateCrawlReport(e,t,r){return this.http.post(`/api/reports/project/${e}/generate-crawl`,{crawlReportType:t,crawlResultId:r})}generatePagespeedReport(e,t){return this.http.post(`/api/reports/project/${e}/generate-pagespeed`,t)}listForProject(e,t=1,r=20){let s=new R().set("page",t).set("limit",r);return this.http.get(`/api/reports/project/${e}`,{params:s})}get(e){return this.http.get(`/api/reports/${e}`)}poll(e,t=2500){return n(0,t).pipe(a(()=>this.get(e).pipe(o(r=>r.data))),l(r=>r.status==="generating",!0),i())}download(e){return this.http.get(`/api/reports/${e}/download`,{responseType:"blob"})}rename(e,t){return this.http.patch(`/api/reports/${e}/rename`,{name:t})}delete(e){return this.http.delete(`/api/reports/${e}`)}bulkDelete(e,t){return this.http.post(`/api/reports/project/${e}/bulk-delete`,{ids:t})}triggerDownload(e,t){let r=URL.createObjectURL(e),s=document.createElement("a");s.href=r,s.download=t,s.click(),URL.revokeObjectURL(r)}static{this.\u0275fac=function(t){return new(t||p)}}static{this.\u0275prov=g({token:p,factory:p.\u0275fac,providedIn:"root"})}};export{c as a};
@@ -0,0 +1,3 @@
1
+ import{a as K}from"./chunk-OSBW6YXS.js";import{a as U}from"./chunk-OBI6OSSF.js";import{c as L,e as G,h as O,q as W,s as H}from"./chunk-VQEBAAHK.js";import{a as q}from"./chunk-HLIQJSA7.js";import"./chunk-SPLW6L45.js";import{$a as z,Ca as v,Cb as h,D,Ga as b,Ia as E,J as c,Ja as B,K as p,La as g,Oa as T,Pa as V,Qa as o,Ra as r,S as y,Sa as F,Ta as x,Ua as m,V as R,Va as s,W as u,Wa as a,Xa as C,Ya as f,Za as w,a as S,ab as M,bb as j,eb as P,gb as A,nb as k,pa as d,tb as N,xa as I,xb as $}from"./chunk-WQW7QCHM.js";var Q=(l,t)=>t._id;function X(l,t){if(l&1){let e=x();o(0,"div",5)(1,"span",8),a(2),r(),o(3,"button",9),m("click",function(){c(e);let n=s();return p(n.clearSelection())}),a(4,"\u2715 Deselect all"),r(),o(5,"button",10),m("click",function(){c(e);let n=s();return p(n.confirmBulkDelete())}),a(6),r()()}if(l&2){let e=s();d(2),f("\u2705 ",e.selectedIds().size," selected"),d(3),b("disabled",e.bulkDeleting()),d(),f(" ",e.bulkDeleting()?"\u23F3 Deleting\u2026":"\u{1F5D1}\uFE0F Delete selected"," ")}}function Y(l,t){l&1&&F(0,"app-loading-spinner")}function Z(l,t){if(l&1){let e=x();o(0,"div",6)(1,"div",11),a(2,"\u{1F4ED}"),r(),o(3,"div",12),a(4,"No reports yet \u{1F440}"),r(),o(5,"p",13),a(6,"Head over to Analytics and hit "),o(7,"strong"),a(8,"\u{1F4E5} Export PDF"),r(),a(9," to generate your first report!"),r(),o(10,"button",4),m("click",function(){c(e);let n=s();return p(n.goToAnalytics())}),a(11,"\u{1F4CA} Go to Analytics"),r()()}}function ee(l,t){if(l&1){let e=x();o(0,"div",26)(1,"input",36),j("ngModelChange",function(n){c(e);let _=s(3);return M(_.editingName,n)||(_.editingName=n),p(n)}),m("keydown.enter",function(){c(e);let n=s().$implicit,_=s(2);return p(_.saveRename(n))})("keydown.escape",function(){c(e);let n=s(3);return p(n.cancelRename())}),r(),o(2,"button",37),m("click",function(){c(e);let n=s().$implicit,_=s(2);return p(_.saveRename(n))}),a(3,"Save"),r(),o(4,"button",38),m("click",function(){c(e);let n=s(3);return p(n.cancelRename())}),a(5,"Cancel"),r()()}if(l&2){let e=s(3);d(),z("ngModel",e.editingName)}}function te(l,t){if(l&1){let e=x();o(0,"div",39),m("click",function(){c(e);let n=s().$implicit,_=s(2);return p(_.startRename(n))}),a(1),o(2,"span",40),a(3,"\u270F"),r()()}if(l&2){let e=s().$implicit;d(),f(" ",e.name||e.title," ")}}function ne(l,t){if(l&1&&(o(0,"span"),a(1),r()),l&2){let e=s().$implicit,i=s(2);d(),C(i.formatSize(e.fileSize))}}function ie(l,t){if(l&1&&(o(0,"div",31),a(1),r()),l&2){let e=s().$implicit;d(),f("\u26A0\uFE0F ",e.errorMessage,"")}}function oe(l,t){l&1&&(o(0,"span",33),a(1,"\u23F3 Generating\u2026"),r())}function re(l,t){if(l&1){let e=x();o(0,"button",41),m("click",function(){c(e);let n=s().$implicit,_=s(2);return p(_.download(n))}),a(1),r()}if(l&2){let e=s().$implicit,i=s(2);b("disabled",i.downloadingId()===e._id),d(),f(" ",i.downloadingId()===e._id?"\u23F3 Downloading\u2026":"\u{1F4E5} Download"," ")}}function le(l,t){if(l&1){let e=x();o(0,"div",21)(1,"label",22)(2,"input",23),m("change",function(){let n=c(e).$implicit,_=s(2);return p(_.toggleSelect(n._id))}),r()(),o(3,"div",24),a(4,"\u{1F4C4}"),r(),o(5,"div",25),v(6,ee,6,1,"div",26)(7,te,4,1,"div",27),o(8,"div",28)(9,"span",29),a(10),r(),o(11,"span"),a(12),r(),v(13,ne,2,1,"span"),o(14,"span",30),a(15),P(16,"date"),r()(),v(17,ie,2,1,"div",31),r(),o(18,"div",32),v(19,oe,2,0,"span",33)(20,re,2,2,"button",34),o(21,"button",35),m("click",function(){let n=c(e).$implicit,_=s(2);return p(_.confirmDelete(n))}),a(22," \u{1F5D1}\uFE0F "),r()()()}if(l&2){let e=t.$implicit,i=s(2);E("report-card--selected",i.selectedIds().has(e._id)),d(2),b("checked",i.selectedIds().has(e._id)),d(4),g(i.editingId()===e._id?6:7),d(3),B("status-badge--"+e.status),d(),C(i.statusLabel(e.status)),d(2),w("\u{1F4C5} ",e.dateRange.startDate," \u2192 ",e.dateRange.endDate,""),d(),g(e.fileSize?13:-1),d(2),C(A(16,14,e.createdAt,"MMM d, y, h:mm a")),d(2),g(e.status==="failed"&&e.errorMessage?17:-1),d(2),g(e.status==="generating"?19:e.status==="ready"?20:-1),d(2),b("disabled",i.deletingId()===e._id)}}function ae(l,t){if(l&1){let e=x();o(0,"div",14)(1,"label",15)(2,"input",16),m("change",function(){c(e);let n=s();return p(n.toggleSelectAll())}),r(),o(3,"span",17),a(4,"Select all"),r()(),o(5,"span",18),a(6),r()(),o(7,"div",19),T(8,le,23,17,"div",20,Q),r()}if(l&2){let e=s();d(2),b("checked",e.allSelected())("indeterminate",e.someSelected()),d(4),w("",e.reports().length," report",e.reports().length!==1?"s":"",""),d(2),V(e.reports())}}function se(l,t){if(l&1){let e=x();o(0,"div",42),m("click",function(){c(e);let n=s();return p(n.cancelDelete())}),o(1,"div",43),m("click",function(n){return c(e),p(n.stopPropagation())}),o(2,"div",44),a(3,"\u{1F5D1}\uFE0F Delete Report?"),r(),o(4,"p",45)(5,"strong"),a(6),r(),a(7," will be permanently deleted and cannot be recovered. "),r(),o(8,"div",46)(9,"button",9),m("click",function(){c(e);let n=s();return p(n.cancelDelete())}),a(10,"Cancel"),r(),o(11,"button",10),m("click",function(){c(e);let n=s();return p(n.executeDelete())}),a(12),r()()()()}if(l&2){let e=s();d(6),f('"',e.deleteTarget().name||e.deleteTarget().title,'"'),d(5),b("disabled",e.deletingId()!==null),d(),f(" ",e.deletingId()?"\u23F3 Deleting\u2026":"\u{1F5D1}\uFE0F Delete"," ")}}function de(l,t){if(l&1){let e=x();o(0,"div",42),m("click",function(){c(e);let n=s();return p(n.showBulkConfirm.set(!1))}),o(1,"div",43),m("click",function(n){return c(e),p(n.stopPropagation())}),o(2,"div",44),a(3),r(),o(4,"p",45),a(5,"These reports will be permanently deleted and cannot be recovered. \u{1F480}"),r(),o(6,"div",46)(7,"button",9),m("click",function(){c(e);let n=s();return p(n.showBulkConfirm.set(!1))}),a(8,"Cancel"),r(),o(9,"button",10),m("click",function(){c(e);let n=s();return p(n.executeBulkDelete())}),a(10),r()()()()}if(l&2){let e=s();d(3),w("\u{1F5D1}\uFE0F Delete ",e.selectedIds().size," Report",e.selectedIds().size!==1?"s":"","?"),d(6),b("disabled",e.bulkDeleting()),d(),f(" ",e.bulkDeleting()?"\u23F3 Deleting\u2026":"\u{1F5D1}\uFE0F Delete all selected"," ")}}var J=class l{constructor(){this.host=D(R);this.canBulkDelete=!1;this.bloomsnavigate=new y;this.bloomserror=new y;this.needsSignIn=k(()=>h.config()!==null&&h.session()===null);this.reportService=D(K);this.reports=u([]);this.loading=u(!0);this.selectedIds=u(new Set);this.editingId=u(null);this.editingName="";this.deletingId=u(null);this.deleteTarget=u(null);this.bulkDeleting=u(!1);this.showBulkConfirm=u(!1);this.downloadingId=u(null);this.allSelected=k(()=>this.reports().length>0&&this.reports().every(t=>this.selectedIds().has(t._id)));this.someSelected=k(()=>!this.allSelected()&&this.reports().some(t=>this.selectedIds().has(t._id)))}goToAnalytics(){let t={feature:"analytics",view:"dashboard",params:{}};this.bloomsnavigate.emit(t),h.emit(S({type:"navigate"},t))}get activeProjectId(){return this.projectId||h.project()?.id||""}ngOnInit(){this.load()}load(){this.loading.set(!0),this.reportService.listForProject(this.activeProjectId).subscribe({next:t=>{this.reports.set(t.data),this.loading.set(!1)},error:()=>this.loading.set(!1)})}toggleSelect(t){let e=new Set(this.selectedIds());e.has(t)?e.delete(t):e.add(t),this.selectedIds.set(e)}toggleSelectAll(){this.allSelected()?this.selectedIds.set(new Set):this.selectedIds.set(new Set(this.reports().map(t=>t._id)))}clearSelection(){this.selectedIds.set(new Set)}download(t){this.downloadingId.set(t._id),this.reportService.download(t._id).subscribe({next:e=>{let i=(t.name||t.title||"report")+".pdf";this.reportService.triggerDownload(e,i),this.downloadingId.set(null)},error:()=>this.downloadingId.set(null)})}startRename(t){this.editingId.set(t._id),this.editingName=t.name||t.title}cancelRename(){this.editingId.set(null),this.editingName=""}saveRename(t){let e=this.editingName.trim();this.reportService.rename(t._id,e).subscribe({next:i=>{this.reports.update(n=>n.map(_=>_._id===t._id?i.data:_)),this.cancelRename()},error:()=>this.cancelRename()})}confirmDelete(t){this.deleteTarget.set(t)}cancelDelete(){this.deleteTarget.set(null)}executeDelete(){let t=this.deleteTarget();t&&(this.deletingId.set(t._id),this.reportService.delete(t._id).subscribe({next:()=>{this.reports.update(i=>i.filter(n=>n._id!==t._id));let e=new Set(this.selectedIds());e.delete(t._id),this.selectedIds.set(e),this.deletingId.set(null),this.deleteTarget.set(null)},error:()=>{this.deletingId.set(null),this.deleteTarget.set(null)}}))}confirmBulkDelete(){this.showBulkConfirm.set(!0)}executeBulkDelete(){let t=Array.from(this.selectedIds());this.bulkDeleting.set(!0),this.reportService.bulkDelete(this.activeProjectId,t).subscribe({next:()=>{this.reports.update(e=>e.filter(i=>!this.selectedIds().has(i._id))),this.selectedIds.set(new Set),this.bulkDeleting.set(!1),this.showBulkConfirm.set(!1)},error:()=>{this.bulkDeleting.set(!1),this.showBulkConfirm.set(!1)}})}statusLabel(t){return t==="ready"?"\u2705 Ready":t==="generating"?"\u23F3 Generating":"\u274C Failed"}formatSize(t){return t<1024?t+" B":t<1024*1024?(t/1024).toFixed(1)+" KB":(t/(1024*1024)).toFixed(1)+" MB"}static{this.\u0275fac=function(e){return new(e||l)}}static{this.\u0275cmp=I({type:l,selectors:[["blooms-reports"]],inputs:{projectId:"projectId",canBulkDelete:"canBulkDelete"},outputs:{bloomsnavigate:"bloomsnavigate",bloomserror:"bloomserror"},decls:15,vars:4,consts:[[1,"reports-page"],[1,"reports-header"],[1,"reports-header__title"],[1,"reports-header__desc"],["type","button",1,"btn","btn-primary","btn-sm",3,"click"],[1,"bulk-bar"],[1,"empty-state"],[1,"modal-backdrop"],[1,"bulk-bar__count"],[1,"btn","btn-outline","btn-sm",3,"click"],[1,"btn","btn-danger","btn-sm",3,"click","disabled"],[1,"empty-state__icon"],[1,"empty-state__title"],[1,"empty-state__desc"],[1,"reports-list-header"],[1,"checkbox-wrap"],["type","checkbox",3,"change","checked","indeterminate"],[1,"checkbox-label"],[1,"reports-count"],[1,"reports-list"],[1,"report-card",3,"report-card--selected"],[1,"report-card"],[1,"report-card__checkbox"],["type","checkbox",3,"change","checked"],[1,"report-card__icon"],[1,"report-card__info"],[1,"rename-wrap"],["appTooltip","Click to rename",1,"report-card__name"],[1,"report-card__meta"],[1,"status-badge"],[1,"report-card__date"],[1,"report-card__error"],[1,"report-card__actions"],[1,"generating-badge"],[1,"btn","btn-outline","btn-sm",3,"disabled"],["appTooltip","Delete report",1,"btn","btn-ghost","btn-sm","btn-danger-ghost",3,"click","disabled"],["type","text","placeholder","Report name\u2026","maxlength","80",1,"form-input","rename-input",3,"ngModelChange","keydown.enter","keydown.escape","ngModel"],[1,"btn","btn-primary","btn-xs",3,"click"],[1,"btn","btn-outline","btn-xs",3,"click"],["appTooltip","Click to rename",1,"report-card__name",3,"click"],[1,"rename-hint"],[1,"btn","btn-outline","btn-sm",3,"click","disabled"],[1,"modal-backdrop",3,"click"],[1,"confirm-modal",3,"click"],[1,"confirm-modal__title"],[1,"confirm-modal__body"],[1,"confirm-modal__footer"]],template:function(e,i){e&1&&(o(0,"div",0)(1,"div",1)(2,"div")(3,"h2",2),a(4,"\u{1F4CB} Generated Reports"),r(),o(5,"p",3),a(6,"All PDF reports generated for this project. Stored for 30 days. \u23F1\uFE0F"),r()(),o(7,"button",4),m("click",function(){return i.goToAnalytics()}),a(8,"\u{1F4E5} Export New PDF"),r()(),v(9,X,7,3,"div",5)(10,Y,1,0,"app-loading-spinner")(11,Z,12,0,"div",6)(12,ae,10,4)(13,se,13,3,"div",7)(14,de,11,4,"div",7),r()),e&2&&(d(9),g(i.selectedIds().size>0&&i.canBulkDelete?9:-1),d(),g(i.loading()?10:i.reports().length===0?11:12),d(3),g(i.deleteTarget()?13:-1),d(),g(i.showBulkConfirm()?14:-1))},dependencies:[$,N,H,L,G,W,O,U,q],styles:[`@charset "UTF-8";:host{--color-text: var(--color-text, #5d5f71);--color-text-muted: var(--color-text-muted, #9395a5);--color-bg: var(--color-bg, #f7f5fb);--color-card-bg: var(--color-card-bg, #ffffff);--color-border: var(--color-border, #ede9f6);--color-hover: var(--color-hover, #f5f2fb);--color-accent: var(--color-accent, #e84855);--radius-sm: var(--radius-sm, 6px);--radius-md: var(--radius-md, 10px);--radius-lg: var(--radius-lg, 16px);display:block;font-family:var(--font-sans, "Poppins", system-ui, -apple-system, sans-serif);color:var(--color-text)}:host>*{letter-spacing:normal;word-spacing:normal;line-height:1.5;text-transform:none;text-indent:0;font-style:normal;font-weight:400;font-variant:normal;text-align:left;white-space:normal}*,*:before,*:after{box-sizing:border-box}.btn{display:inline-flex;align-items:center;gap:6px;padding:9px 18px;border-radius:var(--radius-md);font-family:inherit;font-size:13px;font-weight:600;cursor:pointer;border:1px solid transparent;transition:background .15s,border-color .15s,box-shadow .15s,opacity .15s;text-decoration:none;white-space:nowrap}.btn:disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.btn-sm{padding:6px 12px;font-size:12px}.btn-primary{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.btn-primary:hover:not(:disabled){background:#d13d4a;border-color:#d13d4a;box-shadow:0 2px 8px color-mix(in srgb,var(--color-accent) 30%,transparent)}.btn-outline{background:transparent;color:var(--color-text);border-color:var(--color-border)}.btn-outline:hover:not(:disabled){background:var(--color-hover);border-color:#d5d0e4}.btn-ghost{background:transparent;color:var(--color-text-muted);border-color:transparent}.btn-ghost:hover:not(:disabled){background:var(--color-hover);color:var(--color-text)}
2
+ `,`.reports-page{display:flex;flex-direction:column;gap:20px}.reports-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap}.reports-header__title{font-size:16px;font-weight:700;color:var(--color-text);margin-bottom:4px}.reports-header__desc{font-size:13px;color:var(--color-text-muted)}.bulk-bar{display:flex;align-items:center;gap:10px;background:#eff6ff;border:1px solid #93c5fd;border-radius:8px;padding:10px 16px;flex-wrap:wrap}.bulk-bar__count{font-size:13px;font-weight:600;color:#1e40af;flex:1}.reports-list-header{display:flex;align-items:center;justify-content:space-between;padding:0 4px;font-size:13px;color:var(--color-text-muted)}.checkbox-wrap{display:flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none}.checkbox-label{font-size:13px;color:var(--color-text-muted)}.reports-count{font-size:12px}.reports-list{display:flex;flex-direction:column;gap:10px}.report-card{display:flex;align-items:flex-start;gap:14px;background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:12px;padding:16px 20px;transition:border-color .15s}.report-card.report-card--selected{border-color:var(--color-accent);background:#fff5f5}.report-card__checkbox{padding-top:2px;flex-shrink:0;cursor:pointer}.report-card__icon{width:40px;height:40px;border-radius:8px;background:var(--color-primary-soft);display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0}.report-card__info{flex:1;min-width:0}.report-card__name{font-size:14px;font-weight:600;color:var(--color-text);margin-bottom:6px;cursor:pointer;display:flex;align-items:center;gap:6px;word-break:break-word}.report-card__name .rename-hint{font-size:11px;color:var(--color-text-muted);opacity:0;transition:opacity .15s}.report-card__name:hover .rename-hint{opacity:1}.rename-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-wrap:wrap}.rename-input{flex:1;min-width:180px;font-size:13px}.report-card__meta{display:flex;align-items:center;gap:12px;font-size:12px;color:var(--color-text-muted);flex-wrap:wrap}.report-card__date{margin-left:auto}.report-card__error{font-size:12px;color:#991b1b;margin-top:6px}.report-card__actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.status-badge{display:inline-block;padding:2px 8px;border-radius:12px;font-size:11px;font-weight:600}.status-badge--ready{background:#d1fae5;color:#065f46}.status-badge--generating{background:#eff6ff;color:#1e40af}.status-badge--failed{background:#fee2e2;color:#991b1b}.generating-badge{font-size:12px;color:#1e40af}.empty-state{display:flex;flex-direction:column;align-items:center;gap:10px;padding:60px 20px;text-align:center}.empty-state__icon{font-size:40px}.empty-state__title{font-size:16px;font-weight:600;color:var(--color-text)}.empty-state__desc{font-size:13px;color:var(--color-text-muted)}.modal-backdrop{position:fixed;inset:0;background:#0006;z-index:1000;display:flex;align-items:center;justify-content:center;padding:20px}.confirm-modal{background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:12px;padding:24px;max-width:400px;width:100%;box-shadow:0 16px 48px #00000026}.confirm-modal__title{font-size:15px;font-weight:700;color:var(--color-text);margin-bottom:10px}.confirm-modal__body{font-size:13px;color:var(--color-text-muted);line-height:1.6;margin-bottom:20px}.confirm-modal__footer{display:flex;justify-content:flex-end;gap:10px}.btn-xs{font-size:11px;padding:3px 10px}.btn-danger{background:var(--color-accent)!important;color:#fff!important;border-color:var(--color-accent)!important}.btn-danger-ghost{color:var(--color-accent)!important}.btn-ghost{background:none;border-color:transparent}
3
+ `],encapsulation:3,changeDetection:0})}};export{J as BloomsReportsComponent};
@@ -0,0 +1 @@
1
+ import{Cb as c,Ea as q,O as V,Q as $,T as Z,a as p,b as R,d as L,f as A,n as F,ra as H,sa as K,ta as _,u as N}from"./chunk-WQW7QCHM.js";var j={apiBase:"https://z.bloomscorp.com"};var z=typeof document<"u"?document.currentScript:null;function f(e){return e.replace(/\/+$/,"")}function U(){if(typeof window>"u")return!0;try{if(window.location.protocol==="file:"||!window.origin||window.origin==="null")return!0}catch{return!0}return!1}function G(){let e=z?.src;if(e)return e;try{let t=import.meta?.url;if(t)return t}catch{}return null}function le(e){if(e)return f(e);let t=z?.dataset?.bloomsApiBase;if(t)return f(t);if(j.apiBase)return f(j.apiBase);let n=G();if(n)try{return f(new URL(n).origin)}catch{}if(typeof window<"u"&&!U())return f(window.location.origin);throw new Error('[BloomsEmbed] Could not determine the API base. Pass it explicitly: BloomsEmbed.configure({ token, apiBase: "https://z.bloomscorp.com" }).')}function me(e,t){if(e)return f(e);let n=G();if(n)try{let o=new URL(".",n).href;return f(o)}catch{}return`${f(t??"")}/elements`}function ue(e="auto"){return e==="element"||e==="iframe"?e:typeof window>"u"||typeof document>"u"||U()||!("customElements"in window)?"iframe":"element"}function W(e){if(!e?.token)throw new Error('[BloomsEmbed] configure() requires a token: { token: "blm_embed_\u2026" }');if(!e.token.startsWith("blm_embed_"))throw new Error('[BloomsEmbed] That does not look like an embed token. Embed tokens start with "blm_embed_". Secret API keys (blm_live_\u2026) must never be used in a browser.');let t=le(e.apiBase);return{token:e.token,apiBase:t,assetBase:me(e.assetBase,t),storage:e.storage??"local",mode:ue(e.mode??"auto"),theme:e.theme??{},parentOrigin:e.parentOrigin??null}}var X="X-Blooms-Embed-Token",J="X-Blooms-Embed-Parent";var h=class extends Error{constructor(n,o,r){super(o);this.code=n;this.status=r;this.name="EmbedApiError"}};async function b(e,t={}){let n=c.requireConfig(),o=p(p(p({[X]:n.token},n.parentOrigin?{[J]:n.parentOrigin}:{}),t.body?{"Content-Type":"application/json"}:{}),t.headers),r;try{r=await fetch(`${n.apiBase}${e}`,R(p({},t),{headers:o}))}catch{throw new h("EMBED_NETWORK",`Could not reach ${n.apiBase}. If this origin is not registered on the embed token, the browser reports the CORS refusal as a network error.`,0)}let i=null;try{i=await r.json()}catch{}if(!r.ok||i?.success===!1)throw new h(i?.code??"EMBED_ERROR",i?.message??`Request failed with status ${r.status}`,r.status);return i?.data}function Y(){return b("/api/embed/v1/manifest")}function Q(e){return{token:e.token,refreshToken:e.refreshToken,expiresAt:Date.now()+e.expiresIn*1e3,user:e.user,project:e.project,grantedKeys:e.grantedKeys??[],isProjectOwner:!!e.isProjectOwner,projects:e.projects}}async function ee(e,t){let n=await b("/api/embed/v1/auth/login",{method:"POST",body:JSON.stringify({email:e,password:t})}),o=Q(n);return c.set(o),o}async function de(){let e=c.session();if(!e?.refreshToken)throw new h("EMBED_SESSION_EXPIRED","No session to refresh.",401);let t=await b("/api/embed/v1/auth/refresh",{method:"POST",body:JSON.stringify({refreshToken:e.refreshToken})}),n=Q(t);return c.set(n),n}var S=null;function te(){return S||(S=de().catch(e=>{throw c.clear(),c.emit({type:"error",code:e instanceof h?e.code:"EMBED_SESSION_EXPIRED",message:e instanceof Error?e.message:"Session expired",status:e instanceof h?e.status:401}),e}).finally(()=>{S=null})),S}async function ne(){let e=c.session();if(!e)throw new h("EMBED_SESSION_REVOKED","No session.",401);let t=await b("/api/embed/v1/session",{headers:{Authorization:`Bearer ${e.token}`}}),n=R(p({},e),{user:t.user,project:t.project,grantedKeys:t.grantedKeys??[],isProjectOwner:!!t.isProjectOwner,projects:t.projects});return c.set(n),n}async function oe(){let e=c.session();if(e)try{await b("/api/embed/v1/auth/logout",{method:"POST",headers:{Authorization:`Bearer ${e.token}`}})}catch{}c.clear()}var fe={schedule(e,t){let n=setTimeout(e,t);return()=>clearTimeout(n)}};function he(e){return e.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}function ge(e){return!!e&&e.nodeType===Node.ELEMENT_NODE}var k;function Ee(e,t){if(!k){let n=Element.prototype;k=n.matches||n.matchesSelector||n.mozMatchesSelector||n.msMatchesSelector||n.oMatchesSelector||n.webkitMatchesSelector}return e.nodeType===Node.ELEMENT_NODE?k.call(e,t):!1}function be(e){let t={};return e.forEach(({propName:n,templateName:o,transform:r})=>{t[he(o)]=[n,r]}),t}function ye(e,t){return t.get(_).resolveComponentFactory(e).inputs}function we(e,t){let n=e.childNodes,o=t.map(()=>[]),r=-1;t.some((i,s)=>i==="*"?(r=s,!0):!1);for(let i=0,s=n.length;i<s;++i){let a=n[i],l=Se(a,t,r);l!==-1&&o[l].push(a)}return o}function Se(e,t,n){let o=n;return ge(e)&&t.some((r,i)=>r!=="*"&&Ee(e,r)?(o=i,!0):!1),o}var Me=10,I=class{componentFactory;inputMap=new Map;constructor(t,n){this.componentFactory=n.get(_).resolveComponentFactory(t);for(let o of this.componentFactory.inputs)this.inputMap.set(o.propName,o.templateName)}create(t){return new P(this.componentFactory,t,this.inputMap)}},P=class{componentFactory;injector;inputMap;eventEmitters=new A(1);events=this.eventEmitters.pipe(N(t=>F(...t)));componentRef=null;scheduledDestroyFn=null;initialInputValues=new Map;ngZone;elementZone;appRef;cdScheduler;constructor(t,n,o){this.componentFactory=t,this.injector=n,this.inputMap=o,this.ngZone=this.injector.get(Z),this.appRef=this.injector.get(q),this.cdScheduler=n.get($),this.elementZone=typeof Zone>"u"?null:this.ngZone.run(()=>Zone.current)}connect(t){this.runInZone(()=>{if(this.scheduledDestroyFn!==null){this.scheduledDestroyFn(),this.scheduledDestroyFn=null;return}this.componentRef===null&&this.initializeComponent(t)})}disconnect(){this.runInZone(()=>{this.componentRef===null||this.scheduledDestroyFn!==null||(this.scheduledDestroyFn=fe.schedule(()=>{this.componentRef!==null&&(this.componentRef.destroy(),this.componentRef=null)},Me))})}getInputValue(t){return this.runInZone(()=>this.componentRef===null?this.initialInputValues.get(t):this.componentRef.instance[t])}setInputValue(t,n){if(this.componentRef===null){this.initialInputValues.set(t,n);return}this.runInZone(()=>{this.componentRef.setInput(this.inputMap.get(t)??t,n),H(this.componentRef.hostView)&&(K(this.componentRef.changeDetectorRef),this.cdScheduler.notify(6))})}initializeComponent(t){let n=V.create({providers:[],parent:this.injector}),o=we(t,this.componentFactory.ngContentSelectors);this.componentRef=this.componentFactory.create(n,o,t),this.initializeInputs(),this.initializeOutputs(this.componentRef),this.appRef.attachView(this.componentRef.hostView),this.componentRef.hostView.detectChanges()}initializeInputs(){for(let[t,n]of this.initialInputValues)this.setInputValue(t,n);this.initialInputValues.clear()}initializeOutputs(t){let n=this.componentFactory.outputs.map(({propName:o,templateName:r})=>{let i=t.instance[o];return new L(s=>{let a=i.subscribe(l=>s.next({name:r,value:l}));return()=>a.unsubscribe()})});this.eventEmitters.next(n)}runInZone(t){return this.elementZone&&Zone.current!==this.elementZone?this.ngZone.run(t):t()}},T=class extends HTMLElement{ngElementEventsSubscription=null};function re(e,t){let n=ye(e,t.injector),o=t.strategyFactory||new I(e,t.injector),r=be(n);class i extends T{injector;static observedAttributes=Object.keys(r);get ngElementStrategy(){if(!this._ngElementStrategy){let a=this._ngElementStrategy=o.create(this.injector||t.injector);n.forEach(({propName:l,transform:d})=>{if(!this.hasOwnProperty(l))return;let E=this[l];delete this[l],a.setInputValue(l,E,d)})}return this._ngElementStrategy}_ngElementStrategy;constructor(a){super(),this.injector=a}attributeChangedCallback(a,l,d,E){let[O,u]=r[a];this.ngElementStrategy.setInputValue(O,d,u)}connectedCallback(){let a=!1;this.ngElementStrategy.events&&(this.subscribeToEvents(),a=!0),this.ngElementStrategy.connect(this),a||this.subscribeToEvents()}disconnectedCallback(){this._ngElementStrategy&&this._ngElementStrategy.disconnect(),this.ngElementEventsSubscription&&(this.ngElementEventsSubscription.unsubscribe(),this.ngElementEventsSubscription=null)}subscribeToEvents(){this.ngElementEventsSubscription=this.ngElementStrategy.events.subscribe(a=>{let l=new CustomEvent(a.name,{detail:a.value});this.dispatchEvent(l)})}}return n.forEach(({propName:s,transform:a})=>{Object.defineProperty(i.prototype,s,{get(){return this.ngElementStrategy.getInputValue(s)},set(l){this.ngElementStrategy.setInputValue(s,l,a)},configurable:!0,enumerable:!0})}),i}var M={"blooms-login":()=>import("./chunk-XZWMQ7QK.js").then(e=>e.BloomsLoginComponent),"blooms-crawl-insights":()=>import("./chunk-ACC77NVF.js").then(e=>e.BloomsCrawlInsightsComponent),"blooms-sitemap-crawl":()=>import("./chunk-UQVX3SID.js").then(e=>e.BloomsSitemapCrawlComponent),"blooms-sitemap-crawl-detail":()=>import("./chunk-7ENRHCKA.js").then(e=>e.BloomsSitemapCrawlDetailComponent),"blooms-keywords":()=>import("./chunk-5NLZKRFI.js").then(e=>e.BloomsKeywordsComponent),"blooms-keyword-detail":()=>import("./chunk-WFG2A6RA.js").then(e=>e.BloomsKeywordDetailComponent),"blooms-reports":()=>import("./chunk-OSUK4H76.js").then(e=>e.BloomsReportsComponent),"blooms-gmc-analytics":()=>import("./chunk-X5SAQDWB.js").then(e=>e.BloomsGmcAnalyticsComponent),"blooms-smc-day-detail":()=>import("./chunk-GWYYXSOG.js").then(e=>e.BloomsSmcDayDetailComponent),"blooms-influencer-dashboard":()=>import("./chunk-ZZTWS6NP.js").then(e=>e.BloomsInfluencerDashboardComponent),"blooms-influencer-detail":()=>import("./chunk-RL3EC5EG.js").then(e=>e.BloomsInfluencerDetailComponent),"blooms-social-media-calendar":()=>import("./chunk-YDIWMCSH.js").then(e=>e.BloomsSocialMediaCalendarComponent),"blooms-blog-strategy":()=>import("./chunk-4PL37FNN.js").then(e=>e.BloomsBlogStrategyComponent)},g=Object.freeze(Object.keys(M));function y(e){return Object.prototype.hasOwnProperty.call(M,e.toLowerCase())}var C=null;function Ne(e){C=e}var v=new Map,B=new Map;function ie(e,t){let n=B.get(e)??new Set;n.add(t),B.set(e,n)}function ve(e,t){let n=Object.getPrototypeOf(e);for(let[o,r]of Object.entries(t)){let i;for(let s=n;s&&!i;s=Object.getPrototypeOf(s))i=Object.getOwnPropertyDescriptor(s,o);!i||typeof i.set!="function"||(delete e[o],e[o]=r)}}function w(e){let t=e.toLowerCase(),n=v.get(t);if(n)return n;if(!y(t))return Promise.reject(new Error(`[BloomsEmbed] <${t}> is not part of this bundle. Available: ${g.join(", ")}.`));if(customElements.get(t)){let r=Promise.resolve();return v.set(t,r),r}let o=M[t]().then(r=>{if(!C)throw new Error("[BloomsEmbed] loadElement() was called before the bundle finished bootstrapping.");if(customElements.get(t))return;let i=B.get(t)??new Set;Array.from(document.querySelectorAll(t)).forEach(a=>i.add(a));let s=new Map;for(let a of i){let l={};for(let d of Object.keys(a))l[d]=a[d];Object.keys(l).length>0&&s.set(a,l)}customElements.define(t,re(r,{injector:C})),B.delete(t);for(let[a,l]of s)ve(a,l)}).catch(r=>{throw v.delete(t),console.error(`[BloomsEmbed] Failed to load <${t}>. Its chunk may be missing from the published bundle \u2014 every lazy chunk must be uploaded alongside blooms-embed.js.`,r),r});return v.set(t,o),o}function ae(...e){return Promise.all(e.map(t=>w(t).catch(()=>{}))).then(()=>{})}function se(e){let t=e.localName;y(t)&&(customElements.get(t)||ie(t,e),w(t).catch(()=>{}))}function Ve(){let e=new Set;for(let t of g)Array.from(document.querySelectorAll(t)).forEach(n=>{e.add(t),customElements.get(t)||ie(t,n)});return new MutationObserver(t=>{for(let n of t)for(let o of Array.from(n.addedNodes))if(o instanceof Element){se(o);for(let r of g)Array.from(o.querySelectorAll(r)).forEach(se)}}).observe(document.documentElement,{childList:!0,subtree:!0}),Promise.all([...e].map(t=>w(t).catch(()=>{}))).then(()=>{})}var x=1;function ce(e,t){let n=c.requireConfig(),o=typeof e=="string"?document.querySelector(e):e;if(!o)throw new Error(`[BloomsEmbed] mount target not found: ${String(e)}`);let r=new URL(`${n.apiBase}/embed/${encodeURIComponent(t.feature)}`);r.searchParams.set("token",n.token),window.origin&&window.origin!=="null"&&r.searchParams.set("origin",window.origin);let i=new URL(n.apiBase).origin,s=document.createElement("iframe");s.src=r.toString(),s.style.width="100%",s.style.border="0",s.style.display="block",s.style.height=`${t.minHeight??320}px`,s.setAttribute("title",t.attributes?.title??"blooms.ai"),s.setAttribute("allow","clipboard-write"),s.setAttribute("referrerpolicy","no-referrer");for(let[u,m]of Object.entries(t.attributes??{}))u!=="title"&&s.setAttribute(u,m);let a=!1,l=(u,m={})=>{s.contentWindow?.postMessage(p({source:"blooms-embed-host",protocol:x,type:u},m),i)},d=()=>{a&&l("blooms:session",{session:c.session()})},E=u=>{if(u.origin!==i||u.source!==s.contentWindow)return;let m=u.data;if(!(!m||m.source!=="blooms-embed")){if(m.protocol!==x){console.warn(`[BloomsEmbed] Frame speaks protocol ${m.protocol}, host speaks ${x}.`);return}switch(m.type){case"blooms:ready":a=!0,d();break;case"blooms:resize":typeof m.height=="number"&&m.height>0&&(s.style.height=`${Math.max(m.height,t.minHeight??0)}px`);break;case"blooms:session":m.credentials&&m.session?.refreshToken&&c.set(m.session);break;case"blooms:event":m.event?.type&&c.emit(m.event);break;default:break}}};window.addEventListener("message",E);let O=c.on(u=>{u.type==="session"&&(u.session?d():l("blooms:logout"))});return o.appendChild(s),{iframe:s,sync:d,destroy(){window.removeEventListener("message",E),O(),s.remove()}}}var D="0.2.0",Be={version:D,configure(e){c.setConfig(W(e))},mode(){return c.config()?.mode??null},manifest(){return Y()},login({email:e,password:t}){return ee(e,t)},session(){return c.session()},async resume(){if(!c.session())return null;try{return c.isStale(0)&&await te(),await ne()}catch{return null}},can(e,t){return c.can(e,t)},projects(){return c.projects()},project(){return c.project()},setProject(e){return c.setProject(e)},logout(){return oe()},on(e,t){return c.on(n=>{(e==="all"||n.type===e)&&t(n)})},preload(...e){return ae(...e.map(t=>`blooms-${t}`))},mount(e,t){if(c.requireConfig().mode==="iframe")return ce(e,t);let o=typeof e=="string"?document.querySelector(e):e;if(!o)throw new Error(`[BloomsEmbed] mount target not found: ${String(e)}`);let r=`blooms-${t.feature}`;if(!y(r))throw new Error(`[BloomsEmbed] <${r}> is not part of this bundle. Available: ${g.join(", ")}.`);w(r).catch(()=>{});let i=document.createElement(r);for(let[s,a]of Object.entries(t.attributes??{}))i.setAttribute(s,a);return o.appendChild(i),i}};function Xe(){if(typeof window>"u")return;let e=window;if(e.__BLOOMS_EMBED_VERSION__){console.warn(`[BloomsEmbed] Already loaded (version ${e.__BLOOMS_EMBED_VERSION__}); ignoring this copy (${D}). Include the bundle once per page.`);return}e.__BLOOMS_EMBED_VERSION__=D,e.BloomsEmbed=Be}export{W as a,X as b,J as c,h as d,te as e,oe as f,Ne as g,Ve as h,Be as i,Xe as j};