@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.
- package/CHANGELOG.md +146 -1
- package/README.md +85 -10
- package/dist/blooms-embed.css +1 -1
- package/dist/blooms-embed.js +1 -10
- package/dist/chunk-3U3MLDTP.js +1 -0
- package/dist/chunk-4PL37FNN.js +74 -0
- package/dist/chunk-53INJES5.js +1 -0
- package/dist/chunk-5NLZKRFI.js +3 -0
- package/dist/chunk-7ENRHCKA.js +3 -0
- package/dist/chunk-7NQRVCWL.js +1 -0
- package/dist/chunk-ACC77NVF.js +3 -0
- package/dist/chunk-EA7SZINY.js +1 -0
- package/dist/chunk-GWYYXSOG.js +3 -0
- package/dist/chunk-HLIQJSA7.js +24 -0
- package/dist/chunk-IRBW4XXQ.js +1 -0
- package/dist/chunk-OBI6OSSF.js +1 -0
- package/dist/chunk-OSBW6YXS.js +1 -0
- package/dist/chunk-OSUK4H76.js +3 -0
- package/dist/chunk-QVZ2D36I.js +1 -0
- package/dist/chunk-RL3EC5EG.js +3 -0
- package/dist/chunk-SPLW6L45.js +2 -0
- package/dist/chunk-T4IZD3WN.js +1 -0
- package/dist/chunk-UQVX3SID.js +3 -0
- package/dist/chunk-VQEBAAHK.js +1 -0
- package/dist/chunk-WFG2A6RA.js +3 -0
- package/dist/chunk-WQW7QCHM.js +7 -0
- package/dist/chunk-X2Q5WSIJ.js +2 -0
- package/dist/chunk-X5SAQDWB.js +3 -0
- package/dist/chunk-XZWMQ7QK.js +3 -0
- package/dist/chunk-YDIWMCSH.js +3 -0
- package/dist/chunk-ZZTWS6NP.js +3 -0
- package/dist/index.d.ts +221 -3
- package/dist/index.js +16 -6
- package/dist/media/poppins-latin-400.woff2 +0 -0
- package/dist/media/poppins-latin-500.woff2 +0 -0
- package/dist/media/poppins-latin-600.woff2 +0 -0
- package/dist/media/poppins-latin-700.woff2 +0 -0
- package/package.json +8 -3
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{a as ve,b as xe,c as ge,d as be,e as he,f as Ce,g as we}from"./chunk-53INJES5.js";import{a as ue}from"./chunk-X2Q5WSIJ.js";import{c as oe,d as N,e as ae,f as re,h as le,i as se,l as ce,m as de,r as me,s as pe,t as _e}from"./chunk-VQEBAAHK.js";import{a as fe}from"./chunk-HLIQJSA7.js";import"./chunk-SPLW6L45.js";import{$a as R,Ca as g,Cb as L,D as O,Ga as M,Ha as D,Ia as y,J as p,K as _,La as u,Na as P,Oa as b,Pa as h,Qa as a,Ra as o,S as G,Sa as T,Ta as f,Ua as m,V as ee,Va as c,W as x,Wa as s,Xa as v,Ya as C,Za as q,a as Q,ab as W,b as K,bb as H,e as X,eb as B,gb as V,k as Z,na as j,nb as I,pa as l,tb as ie,v as w,xa as te,xb as ne}from"./chunk-WQW7QCHM.js";var F=(r,t)=>t._id,J=(r,t)=>t.date.toISOString();function Ee(r,t){r&1&&(a(0,"p",25),s(1,"No upcoming events"),o())}function Me(r,t){if(r&1){let e=f();a(0,"div",31),m("click",function(){let n=p(e).$implicit,d=c(2);return _(d.openEventDrawer(n._id))}),a(1,"span",32),s(2),o(),a(3,"div",33)(4,"span",34),s(5),o(),a(6,"span",35),s(7),B(8,"date"),o()()()}if(r&2){let e=t.$implicit,i=c(2);l(),D("color",i.platformColor(e.platform)),l(),C(" ",i.platformIcon(e.platform)," "),l(3),v(e.title),l(2),v(V(8,5,e.scheduledAt,"MMM d, h:mm a"))}}function De(r,t){if(r&1&&(a(0,"p",27),s(1),o()),r&2){let e=c(2);l(),C("+",e.upcomingEvents().length-5," more upcoming")}}function Te(r,t){r&1&&(a(0,"p",25),s(1,"No overdue events"),o())}function Be(r,t){if(r&1){let e=f();a(0,"div",36),m("click",function(){let n=p(e).$implicit,d=c(2);return _(d.openEventDrawer(n._id))}),a(1,"span",32),s(2),o(),a(3,"div",33)(4,"span",34),s(5),o(),a(6,"span",35),s(7),B(8,"date"),o()(),a(9,"button",37),m("click",function(n){let d=p(e).$implicit,S=c(2);return _(S.markOverdueCompleted(d._id,n))}),s(10,"\u2713"),o()()}if(r&2){let e=t.$implicit,i=c(2);l(),D("color",i.platformColor(e.platform)),l(),C(" ",i.platformIcon(e.platform)," "),l(3),v(e.title),l(2),v(V(8,5,e.scheduledAt,"MMM d, h:mm a"))}}function Ve(r,t){if(r&1&&(a(0,"p",30),s(1),o()),r&2){let e=c(2);l(),C(" +",e.overdueEvents().length-5," more overdue ")}}function Fe(r,t){if(r&1&&(a(0,"div",13)(1,"div",23)(2,"h3",24),s(3,"Upcoming (next 7 days)"),o(),g(4,Ee,2,0,"p",25),b(5,Me,9,8,"div",26,F),g(7,De,2,1,"p",27),o(),a(8,"div",23)(9,"h3",28),s(10),o(),g(11,Te,2,0,"p",25),b(12,Be,11,8,"div",29,F),g(14,Ve,2,1,"p",30),o()()),r&2){let e=c();l(4),u(e.upcomingEvents().length===0?4:-1),l(),h(e.upcomingEvents().slice(0,5)),l(2),u(e.upcomingEvents().length>5?7:-1),l(3),C(" \u26A0 Overdue (",e.overdueCount(),") "),l(),u(e.overdueEvents().length===0?11:-1),l(),h(e.overdueEvents().slice(0,5)),l(2),u(e.overdueEvents().length>5?14:-1)}}function Ie(r,t){if(r&1&&(a(0,"div",40),s(1),o()),r&2){let e=t.$implicit;l(),v(e)}}function $e(r,t){r&1&&(a(0,"span"),s(1,"\u26A0"),o())}function Pe(r,t){if(r&1){let e=f();a(0,"div",60),m("click",function(n){let d=p(e).$implicit,S=c(3);return n.stopPropagation(),_(S.openEventDrawer(d._id))}),g(1,$e,2,0,"span"),s(2),o()}if(r&2){let e=t.$implicit,i=c(3);D("background",i.platformColor(e.platform)),y("smc-chip--overdue",i.isOverdue(e)),M("appTooltip",e.title),l(),u(i.isOverdue(e)?1:-1),l(),q(" ",i.platformIcon(e.platform)," ",e.title," ")}}function qe(r,t){if(r&1){let e=f();a(0,"div",61),m("click",function(n){p(e);let d=c().$implicit,S=c(2);return n.stopPropagation(),_(S.showDayPopover(d))}),s(1),o()}if(r&2){let e=c().$implicit;l(),C(" +",e.events.length-3," more ")}}function Ae(r,t){if(r&1&&T(0,"span",62),r&2){let e=t.$implicit,i=c(3);D("background",i.platformColor(e.platform))}}function ze(r,t){if(r&1){let e=f();a(0,"div",49),m("click",function(){let n=p(e).$implicit,d=c(2);return _(d.onDayClick(n.date))}),a(1,"div",50)(2,"div",51),s(3),o(),a(4,"div",52)(5,"button",53),m("click",function(n){let d=p(e).$implicit,S=c(2);return n.stopPropagation(),_(S.openCreateDrawerForDate(d.date))}),s(6,"+"),o(),a(7,"a",54),m("click",function(n){return p(e),_(n.stopPropagation())}),s(8,"\u2261"),o()()(),a(9,"div",55),b(10,Pe,3,8,"div",56,F),g(12,qe,2,1,"div",57),o(),a(13,"div",58),b(14,Ae,1,2,"span",59,F),o()()}if(r&2){let e=t.$implicit,i=c(2);y("smc-day--other-month",!e.isCurrentMonth)("smc-day--today",e.isToday)("smc-day--has-events",e.events.length>0)("smc-day--mobile-selected",i.isSameDay(e.date,i.mobileSelectedDate())),l(3),v(e.date.getDate()),l(4),M("href",i.dayDetailUrl(e.date),j),l(3),h(e.events.slice(0,3)),l(2),u(e.events.length>3?12:-1),l(2),h(e.events.slice(0,3))}}function Oe(r,t){r&1&&(a(0,"p",47),s(1,"No events scheduled for this day."),o())}function je(r,t){r&1&&(a(0,"span",68),s(1," \xB7 \u26A0 Overdue"),o())}function Le(r,t){if(r&1){let e=f();a(0,"div",63),m("click",function(){let n=p(e).$implicit,d=c(2);return _(d.openEventDrawer(n._id))}),T(1,"div",64),a(2,"div",65)(3,"span",66),s(4),o(),a(5,"span",67),s(6),B(7,"date"),g(8,je,2,0,"span",68),o()(),a(9,"span",69),s(10),o()()}if(r&2){let e=t.$implicit,i=c(2);l(),D("background",i.platformColor(e.platform)),l(3),v(e.title),l(2),q(" ",i.platformLabel(e.platform)," \xB7 ",V(7,9,e.scheduledAt,"h:mm a")," "),l(2),u(i.isOverdue(e)?8:-1),l(),D("background",i.statusColor(e.status)),l(),C(" ",e.status," ")}}function Ne(r,t){if(r&1){let e=f();a(0,"div",38)(1,"div",39),b(2,Ie,2,1,"div",40,P),o(),a(4,"div",41),b(5,ze,16,11,"div",42,J),o()(),a(7,"div",43)(8,"div",44)(9,"span",45),s(10),B(11,"date"),o(),a(12,"button",46),m("click",function(){p(e);let n=c();return _(n.openCreateDrawerForDate(n.mobileSelectedDate()))}),s(13," + New Event "),o()(),g(14,Oe,2,0,"p",47),b(15,Le,11,12,"div",48,F),o()}if(r&2){let e=c();l(2),h(e.weekdays),l(3),h(e.calendarDays()),l(5),C(" ",V(11,2,e.mobileSelectedDate(),"EEEE, MMMM d")," "),l(4),u(e.mobileSelectedDayEvents().length===0?14:-1),l(),h(e.mobileSelectedDayEvents())}}function Ue(r,t){if(r&1){let e=f();a(0,"div",77)(1,"span",78),s(2),o(),a(3,"span",79),s(4),o(),a(5,"div",80)(6,"button",53),m("click",function(){let n=p(e).$implicit,d=c(2);return _(d.openCreateDrawerForDate(n.date))}),s(7,"+"),o(),a(8,"a",81),s(9,"\u2261"),o()()()}if(r&2){let e=t.$implicit,i=c(2);y("smc-week-header__day--today",e.isToday),l(2),v(i.weekdayName(e.date)),l(),y("smc-week-header__day-num--today",e.isToday),l(),C(" ",e.date.getDate()," "),l(4),M("href",i.dayDetailUrl(e.date),j)}}function Re(r,t){if(r&1&&(a(0,"div",75),s(1),o()),r&2){let e=t.$implicit,i=c(2);l(),v(i.formatHour(e))}}function We(r,t){if(r&1){let e=f();a(0,"div",83),m("click",function(){let n=p(e).$implicit,d=c(3);return _(d.openEventDrawer(n._id))}),s(1),o()}if(r&2){let e=t.$implicit,i=c(3);D("background",i.platformColor(e.platform))("top",i.eventTopPx(e),"px"),y("smc-week-event--overdue",i.isOverdue(e)),l(),q(" ",i.platformIcon(e.platform)," ",e.title," ")}}function He(r,t){if(r&1&&(a(0,"div",76),b(1,We,2,8,"div",82,F),o()),r&2){let e=t.$implicit;l(),h(e.events)}}function Ye(r,t){if(r&1&&(a(0,"div",21)(1,"div",70),T(2,"div",71),b(3,Ue,10,7,"div",72,J),o(),a(5,"div",73)(6,"div",74),b(7,Re,2,1,"div",75,P),o(),b(9,He,3,0,"div",76,J),o()()),r&2){let e=c();l(3),h(e.weekDays()),l(4),h(e.hours),l(2),h(e.weekDays())}}function Qe(r,t){if(r&1&&(a(0,"div",75),s(1),o()),r&2){let e=t.$implicit,i=c(2);l(),v(i.formatHour(e))}}function Ge(r,t){if(r&1){let e=f();a(0,"div",83),m("click",function(){let n=p(e).$implicit,d=c(2);return _(d.openEventDrawer(n._id))}),s(1),a(2,"span",89),s(3),B(4,"date"),o()()}if(r&2){let e=t.$implicit,i=c(2);D("background",i.platformColor(e.platform))("top",i.eventTopPx(e),"px"),y("smc-week-event--overdue",i.isOverdue(e)),l(),q(" ",i.platformIcon(e.platform)," ",e.title," "),l(2),v(V(4,9,e.scheduledAt,"h:mm a"))}}function Je(r,t){if(r&1){let e=f();a(0,"div",22)(1,"div",84)(2,"strong"),s(3),B(4,"date"),o(),a(5,"div",85)(6,"button",16),m("click",function(){p(e);let n=c();return _(n.openCreateDrawerForDate(n.cursor()))}),s(7,"+ New Event"),o(),a(8,"a",86),s(9,"View Day \u2197"),o()()(),a(10,"div",87)(11,"div",74),b(12,Qe,2,1,"div",75,P),o(),a(14,"div",88),b(15,Ge,5,12,"div",82,F),o()()()}if(r&2){let e=c();l(3),v(V(4,2,e.cursor(),"EEEE, MMMM d, y")),l(5),M("href",e.dayDetailUrl(e.cursor()),j),l(4),h(e.hours),l(3),h(e.dayEvents())}}function Ke(r,t){r&1&&(a(0,"div",92),s(1,"Loading event..."),o())}function Xe(r,t){if(r&1&&(a(0,"div",98),s(1),B(2,"date"),o()),r&2){let e=c(3);l(),C(" \u26A0 This event is overdue \u2014 scheduled for ",V(2,1,e.activeEvent().scheduledAt,"MMM d, y, h:mm a")," ")}}function Ze(r,t){if(r&1){let e=f();a(0,"input",121),H("ngModelChange",function(n){p(e);let d=c(3);return W(d.editTitle,n)||(d.editTitle=n),_(n)}),m("blur",function(){p(e);let n=c(3);return _(n.saveTitle())})("keydown.enter",function(){p(e);let n=c(3);return _(n.saveTitle())}),o()}if(r&2){let e=c(3);R("ngModel",e.editTitle)}}function et(r,t){if(r&1){let e=f();a(0,"h2",122),m("click",function(){p(e);let n=c(3);return _(n.startEditTitle())}),s(1),a(2,"span",123),s(3,"\u270F"),o()()}if(r&2){let e=c(3);l(),C(" ",e.activeEvent().title," ")}}function tt(r,t){if(r&1){let e=f();a(0,"span",106),s(1),a(2,"button",124),m("click",function(){let n=p(e).$implicit,d=c(3);return _(d.removeAssignee(n))}),s(3,"\u2715"),o()()}if(r&2){let e=t.$implicit,i=c(3);l(),C(" ",i.memberName(e)," ")}}function it(r,t){if(r&1){let e=f();a(0,"div",108)(1,"a",125),s(2),o(),a(3,"button",126),m("click",function(){let n=p(e).$implicit,d=c(3);return _(d.deleteAttachment(n._id))}),s(4,"\u{1F5D1}"),o()()}if(r&2){let e=t.$implicit,i=c(3);l(),M("href",e.url,j),l(),q(" ",i.attachmentIcon(e.type)," ",e.name," ")}}function nt(r,t){if(r&1&&(a(0,"span",117),s(1),o()),r&2){let e=t.$implicit;l(),v(e)}}function ot(r,t){if(r&1){let e=f();a(0,"button",127),m("click",function(){p(e);let n=c(3);return _(n.markCompleted())}),s(1),o()}if(r&2){let e=c(3);M("disabled",e.saving()),l(),C(" ",e.saving()?"Saving...":"\u2713 Mark Completed"," ")}}function at(r,t){if(r&1){let e=f();a(0,"div",93)(1,"div",94)(2,"span",95),s(3),o(),a(4,"span",96),s(5),o()(),a(6,"button",97),m("click",function(){p(e);let n=c(2);return _(n.closeDrawer())}),s(7,"\u2715"),o()(),g(8,Xe,3,4,"div",98),a(9,"div",99)(10,"label",100),s(11,"Title"),o(),g(12,Ze,1,1,"input",101)(13,et,4,1,"h2",102),o(),a(14,"div",99)(15,"label",100),s(16,"Scheduled"),o(),a(17,"input",103),B(18,"date"),m("change",function(n){p(e);let d=c(2);return _(d.onReschedule(n))}),o()(),a(19,"div",99)(20,"label",100),s(21,"Description / Caption"),o(),a(22,"textarea",104),m("change",function(n){p(e);let d=c(2);return _(d.onDescChange(n))}),o()(),a(23,"div",99)(24,"label",100),s(25,"Assigned To"),o(),a(26,"div",105),b(27,tt,4,1,"span",106,P),o()(),a(29,"div",99)(30,"label",100),s(31,"Attachments"),o(),a(32,"div",107),b(33,it,5,3,"div",108,F),o(),a(35,"div",109)(36,"label",110)(37,"input",111),m("change",function(n){p(e);let d=c(2);return _(d.onFileUpload(n))}),o(),s(38," \u{1F4CE} Upload files "),o(),a(39,"div",112)(40,"input",113),H("ngModelChange",function(n){p(e);let d=c(2);return W(d.linkUrl,n)||(d.linkUrl=n),_(n)}),o(),a(41,"input",114),H("ngModelChange",function(n){p(e);let d=c(2);return W(d.linkName,n)||(d.linkName=n),_(n)}),o(),a(42,"button",16),m("click",function(){p(e);let n=c(2);return _(n.addLink())}),s(43,"Add"),o()()()(),a(44,"div",99)(45,"label",100),s(46,"Internal Notes"),o(),a(47,"textarea",115),m("change",function(n){p(e);let d=c(2);return _(d.onNotesChange(n))}),o()(),a(48,"div",99)(49,"label",100),s(50,"Tags"),o(),a(51,"div",116),b(52,nt,2,1,"span",117,P),o()(),a(54,"div",118),g(55,ot,2,2,"button",119),a(56,"button",120),m("click",function(){p(e);let n=c(2);return _(n.confirmDelete())}),s(57," \u{1F5D1} Delete "),o()()}if(r&2){let e=c(2);l(2),D("background",e.platformColor(e.activeEvent().platform)),l(),q(" ",e.platformIcon(e.activeEvent().platform)," ",e.platformLabel(e.activeEvent().platform)," "),l(),D("background",e.statusColor(e.activeEvent().status)),l(),C(" ",e.activeEvent().status," "),l(3),u(e.isOverdue(e.activeEvent())?8:-1),l(4),u(e.editingTitle()?12:13),l(5),M("ngModel",V(18,15,e.activeEvent().scheduledAt,"yyyy-MM-ddTHH:mm")),l(5),M("ngModel",e.activeEvent().description||""),l(5),h(e.activeEvent().assignees),l(6),h(e.activeEvent().attachments),l(7),R("ngModel",e.linkUrl),l(),R("ngModel",e.linkName),l(6),M("ngModel",e.activeEvent().notes||""),l(5),h(e.activeEvent().tags),l(3),u(e.activeEvent().status!=="completed"?55:-1)}}function rt(r,t){if(r&1){let e=f();a(0,"div",90),m("click",function(){p(e);let n=c();return _(n.closeDrawer())}),o(),a(1,"div",91),g(2,Ke,2,0,"div",92)(3,at,58,18),o()}if(r&2){let e=c();l(),y("smc-drawer--open",e.drawerOpen()),l(),u(e.drawerLoading()?2:e.activeEvent()?3:-1)}}function lt(r,t){r&1&&(a(0,"span",132),s(1,"Title is required"),o())}function st(r,t){if(r&1){let e=f();a(0,"button",143),m("click",function(){let n=p(e).$implicit,d=c(2);return _(d.selectPlatform(n))}),a(1,"span",144),s(2),o(),a(3,"span",145),s(4),o()()}if(r&2){let e,i=t.$implicit,n=c(2);D("--pcolor",n.platformColor(i)),y("platform-option--selected",((e=n.createForm.get("platform"))==null?null:e.value)===i),l(2),v(n.platformIcon(i)),l(2),v(n.platformLabel(i))}}function ct(r,t){r&1&&(a(0,"span",132),s(1,"Platform is required"),o())}function dt(r,t){r&1&&(a(0,"p",138),s(1,"No other project members found."),o())}function mt(r,t){if(r&1){let e=f();a(0,"button",147),m("click",function(){let n=p(e).$implicit,d=c(3);return _(d.toggleAssignee(n._id))}),a(1,"span",148),s(2),o(),a(3,"span",149),s(4),o()()}if(r&2){let e=t.$implicit,i=c(3);y("assignee-chip--selected",i.isAssigneeSelected(e._id)),l(2),v(e.name.charAt(0).toUpperCase()),l(2),v(e.name)}}function pt(r,t){if(r&1&&(a(0,"div",139),b(1,mt,5,4,"button",146,F),o()),r&2){let e=c(2);l(),h(e.projectMembers())}}function _t(r,t){if(r&1&&(a(0,"div",140),s(1),o()),r&2){let e=c(2);l(),v(e.createError())}}function ut(r,t){if(r&1){let e=f();a(0,"div",90),m("click",function(){p(e);let n=c();return _(n.closeCreateDrawer())}),o(),a(1,"div",128)(2,"div",93)(3,"h3",129),s(4,"New Social Media Event"),o(),a(5,"button",97),m("click",function(){p(e);let n=c();return _(n.closeCreateDrawer())}),s(6,"\u2715"),o()(),a(7,"form",130),m("ngSubmit",function(){p(e);let n=c();return _(n.submitCreate())}),a(8,"div",99)(9,"label",100),s(10,"Title *"),o(),T(11,"input",131),g(12,lt,2,0,"span",132),o(),a(13,"div",99)(14,"label",100),s(15,"Platform *"),o(),a(16,"div",133),b(17,st,5,6,"button",134,P),o(),g(19,ct,2,0,"span",132),o(),a(20,"div",99)(21,"label",100),s(22,"Scheduled Date & Time *"),o(),T(23,"input",135),o(),a(24,"div",99)(25,"label",100),s(26,"Description"),o(),T(27,"textarea",136),o(),a(28,"div",99)(29,"label",100),s(30,"Notes"),o(),T(31,"textarea",137),o(),a(32,"div",99)(33,"label",100),s(34,"Assign To"),o(),g(35,dt,2,0,"p",138)(36,pt,3,0,"div",139),o(),g(37,_t,2,1,"div",140),a(38,"div",118)(39,"button",141),s(40),o(),a(41,"button",142),m("click",function(){p(e);let n=c();return _(n.closeCreateDrawer())}),s(42,"Cancel"),o()()()()}if(r&2){let e,i,n=c();l(),y("smc-drawer--open",n.createDrawerOpen()),l(6),M("formGroup",n.createForm),l(5),u((e=n.createForm.get("title"))!=null&&e.invalid&&((e=n.createForm.get("title"))!=null&&e.touched)?12:-1),l(5),h(n.platforms),l(2),u((i=n.createForm.get("platform"))!=null&&i.invalid&&((i=n.createForm.get("platform"))!=null&&i.touched)?19:-1),l(16),u(n.projectMembers().length===0?35:36),l(2),u(n.createError()?37:-1),l(2),M("disabled",n.createForm.invalid||n.creating()),l(),C(" ",n.creating()?"Creating...":"Create Event"," ")}}var ye=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],U=["January","February","March","April","May","June","July","August","September","October","November","December"],ke=class r{constructor(){this.smc=O(Ce);this.ums=O(we);this.fb=O(me);this.destroy$=new X;this.view=x("month");this.cursor=x(new Date);this.allEvents=x([]);this.filteredEvents=x([]);this.upcomingEvents=x([]);this.overdueEvents=x([]);this.overdueCount=I(()=>this.overdueEvents().length);this.drawerOpen=x(!1);this.drawerLoading=x(!1);this.activeEvent=x(null);this.saving=x(!1);this.editingTitle=x(!1);this.editTitle="";this.createDrawerOpen=x(!1);this.creating=x(!1);this.createError=x("");this.projectMembers=x([]);this.selectedAssignees=x([]);this.quickPanelOpen=x(!1);this.mobileSelectedDate=x(new Date);this.platformFilter="";this.linkUrl="";this.linkName="";this.platforms=he;this.weekdays=ye;this.hours=Array.from({length:24},(t,e)=>e);this.calendarDays=I(()=>this.view()!=="month"?[]:this.buildMonthGrid(this.cursor(),this.filteredEvents()));this.weekDays=I(()=>this.view()!=="week"?[]:this.buildWeekDays(this.cursor(),this.filteredEvents()));this.dayEvents=I(()=>{if(this.view()!=="day")return[];let t=this.cursor();return this.filteredEvents().filter(e=>this.isSameDay(new Date(e.scheduledAt),t))});this.mobileSelectedDayEvents=I(()=>{let t=this.mobileSelectedDate();return this.filteredEvents().filter(e=>this.isSameDay(new Date(e.scheduledAt),t))});this.headingLabel=I(()=>{let t=this.cursor();if(this.view()==="month")return`${U[t.getMonth()]} ${t.getFullYear()}`;if(this.view()==="week"){let e=this.buildWeekDays(t,[]);if(e.length===0)return"";let i=e[0].date,n=e[6].date;return i.getMonth()===n.getMonth()?`${U[i.getMonth()]} ${i.getDate()}\u2013${n.getDate()}, ${i.getFullYear()}`:`${U[i.getMonth()]} ${i.getDate()} \u2013 ${U[n.getMonth()]} ${n.getDate()}, ${i.getFullYear()}`}return`${U[t.getMonth()]} ${t.getDate()}, ${t.getFullYear()}`});this.createForm=this.fb.group({title:["",[N.required,N.maxLength(200)]],platform:["",N.required],scheduledAt:["",N.required],description:[""],notes:[""]});this.host=O(ee);this.projectId="";this._eventId=null;this.initialised=!1;this.bloomsnavigate=new G;this.bloomserror=new G;this.needsSignIn=I(()=>L.config()!==null&&L.session()===null)}toggleQuickPanel(){this.quickPanelOpen.set(!this.quickPanelOpen())}markOverdueCompleted(t,e){e.stopPropagation(),this.smc.updateStatus(t,"completed").subscribe({next:()=>{this.overdueEvents.update(i=>i.filter(n=>n._id!==t)),this.allEvents.update(i=>i.map(n=>n._id===t?K(Q({},n),{status:"completed"}):n))},error:()=>{}})}set eventId(t){this._eventId=t??null,this.initialised&&this.syncDrawerToInput()}get eventId(){return this._eventId}announce(t,e={}){let i={feature:"social-media-calendar",view:t,params:e};this.bloomsnavigate.emit(i),L.emit(Q({type:"navigate"},i))}goToLego(){this.announce("lego")}syncDrawerToInput(){let t=this._eventId;t&&(!this.activeEvent()||this.activeEvent()._id!==t)?this.openEventDrawer(t):!t&&this.drawerOpen()&&this.closeDrawer()}ngOnInit(){let t=this.host.nativeElement.shadowRoot;t&&ue(t),this.projectId||(this.projectId=L.project()?.id??""),this.loadEvents(),this.loadQuickAccess(),this.loadProjectMembers(),this.initialised=!0,this.syncDrawerToInput()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}loadEvents(){let t=this.cursor(),e=new Date(t.getFullYear(),t.getMonth()-1,1).toISOString(),i=new Date(t.getFullYear(),t.getMonth()+2,0).toISOString();this.smc.listEvents(this.projectId,{from:e,to:i,limit:500}).pipe(w(this.destroy$)).subscribe({next:n=>{this.allEvents.set(n.data||[]),this.applyFilter()}})}loadQuickAccess(){Z({upcoming:this.smc.getUpcomingEvents(this.projectId),overdue:this.smc.getOverdueEvents(this.projectId)}).pipe(w(this.destroy$)).subscribe({next:({upcoming:t,overdue:e})=>{this.upcomingEvents.set(t.data||[]),this.overdueEvents.set(e.data||[])}})}applyFilter(){let t=this.allEvents();this.platformFilter?this.filteredEvents.set(t.filter(e=>e.platform===this.platformFilter)):this.filteredEvents.set(t)}prev(){let t=new Date(this.cursor());this.view()==="month"?t.setMonth(t.getMonth()-1):this.view()==="week"?t.setDate(t.getDate()-7):t.setDate(t.getDate()-1),this.cursor.set(t),this.loadEvents()}next(){let t=new Date(this.cursor());this.view()==="month"?t.setMonth(t.getMonth()+1):this.view()==="week"?t.setDate(t.getDate()+7):t.setDate(t.getDate()+1),this.cursor.set(t),this.loadEvents()}goToday(){this.cursor.set(new Date),this.loadEvents()}setView(t){this.view.set(t)}onDayClick(t){if(window.innerWidth<=768){this.mobileSelectedDate.set(t);return}this.cursor.set(t),this.view()==="month"&&this.setView("day")}showDayPopover(t){this.cursor.set(t.date),this.setView("day")}openEventDrawer(t){this.drawerOpen.set(!0),this.drawerLoading.set(!0),this.announce("event",{eventId:t}),this.smc.getEvent(t).pipe(w(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),this.announce("calendar")}loadProjectMembers(){this.ums.getProjectMembers(this.projectId).subscribe({next:t=>this.projectMembers.set(t.data||[]),error:()=>{}})}openCreateDrawer(){this.createForm.reset(),this.createError.set(""),this.selectedAssignees.set([]),this.createDrawerOpen.set(!0)}openCreateDrawerForDate(t){this.createForm.reset(),this.createError.set(""),this.selectedAssignees.set([]);let e=E=>String(E).padStart(2,"0"),i=new Date,n=this.isSameDay(t,i),d=n?i.getHours():9,S=n?Math.ceil(i.getMinutes()/15)*15%60:0,A=`${t.getFullYear()}-${e(t.getMonth()+1)}-${e(t.getDate())}T${e(d)}:${e(S)}`;this.createForm.patchValue({scheduledAt:A}),this.createDrawerOpen.set(!0)}closeCreateDrawer(){this.createDrawerOpen.set(!1)}selectPlatform(t){this.createForm.patchValue({platform:t})}toggleAssignee(t){this.selectedAssignees.update(e=>e.includes(t)?e.filter(i=>i!==t):[...e,t])}isAssigneeSelected(t){return this.selectedAssignees().includes(t)}dayDetailUrl(t){let e=n=>String(n).padStart(2,"0"),i=`${t.getFullYear()}-${e(t.getMonth()+1)}-${e(t.getDate())}`;return`/projects/${this.projectId}/lego/social-media-calendar/day/${i}`}submitCreate(){if(this.createForm.invalid)return;this.creating.set(!0),this.createError.set("");let t=this.createForm.value;this.smc.createEvent(this.projectId,{title:t.title,platform:t.platform,scheduledAt:t.scheduledAt,description:t.description||void 0,notes:t.notes||void 0,assignees:this.selectedAssignees().length?this.selectedAssignees():void 0}).pipe(w(this.destroy$)).subscribe({next:e=>{this.creating.set(!1),this.closeCreateDrawer(),this.allEvents.update(i=>[...i,e.data]),this.applyFilter(),this.loadQuickAccess(),this.openEventDrawer(e.data._id)},error:e=>{this.creating.set(!1),this.createError.set(e?.error?.message||"Failed to create event")}})}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(w(this.destroy$)).subscribe({next:t=>{this.activeEvent.set(t.data),this.saving.set(!1),this.refreshEventInList(t.data)}}))}onReschedule(t){let e=t.target.value;e&&this.smc.rescheduleEvent(this.activeEvent()._id,new Date(e).toISOString()).pipe(w(this.destroy$)).subscribe({next:i=>{this.activeEvent.set(i.data),this.refreshEventInList(i.data),this.loadQuickAccess()}})}onDescChange(t){let e=t.target.value;this.smc.updateEvent(this.activeEvent()._id,{description:e}).pipe(w(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(w(this.destroy$)).subscribe({next:i=>this.activeEvent.set(i.data)})}markCompleted(){this.saving.set(!0),this.smc.updateStatus(this.activeEvent()._id,"completed").pipe(w(this.destroy$)).subscribe({next:t=>{this.activeEvent.set(t.data),this.saving.set(!1),this.refreshEventInList(t.data),this.loadQuickAccess()}})}confirmDelete(){confirm(`Delete event "${this.activeEvent().title}"?`)&&this.smc.deleteEvent(this.activeEvent()._id).pipe(w(this.destroy$)).subscribe({next:()=>{let t=this.activeEvent()._id;this.closeDrawer(),this.allEvents.update(e=>e.filter(i=>i._id!==t)),this.applyFilter(),this.loadQuickAccess()}})}removeAssignee(t){this.smc.removeAssignee(this.activeEvent()._id,t).pipe(w(this.destroy$)).subscribe({next:e=>this.activeEvent.set(e.data)})}onFileUpload(t){let e=t.target.files;e&&Array.from(e).forEach(i=>{this.smc.uploadFile(this.activeEvent()._id,i).pipe(w(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(w(this.destroy$)).subscribe({next:t=>{this.activeEvent.set(t.data),this.linkUrl="",this.linkName=""}})}deleteAttachment(t){this.smc.removeAttachment(this.activeEvent()._id,t).pipe(w(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}platformLabel(t){return ve[t]||t}platformColor(t){return xe[t]||"#6366f1"}platformIcon(t){return ge[t]||"\u{1F4CC}"}statusColor(t){return be[t]||"#6b7280"}isOverdue(t){return this.smc.isOverdue(t)}attachmentIcon(t){return{image:"\u{1F5BC}",video:"\u{1F3A5}",audio:"\u{1F3B5}",pdf:"\u{1F4C4}",word:"\u{1F4DD}",excel:"\u{1F4CA}",link:"\u{1F517}","google-doc":"\u{1F4C3}","notion-doc":"\u{1F4D3}",youtube:"\u25B6\uFE0F"}[t]||"\u{1F4CE}"}weekdayName(t){return ye[t.getDay()]}formatHour(t){let e=t<12?"AM":"PM";return`${t===0?12:t>12?t-12:t} ${e}`}eventTopPx(t){let e=new Date(t.scheduledAt);return(e.getHours()*60+e.getMinutes())*1}isSameDay(t,e){return t.getFullYear()===e.getFullYear()&&t.getMonth()===e.getMonth()&&t.getDate()===e.getDate()}refreshEventInList(t){this.allEvents.update(e=>e.map(i=>i._id===t._id?t:i)),this.applyFilter()}buildMonthGrid(t,e){let i=t.getFullYear(),n=t.getMonth(),d=new Date(i,n,1),S=new Date(i,n+1,0),A=new Date,E=[];for(let k=0;k<d.getDay();k++){let $=new Date(i,n,-d.getDay()+k+1);E.push({date:$,isCurrentMonth:!1,isToday:!1,events:[]})}for(let k=1;k<=S.getDate();k++){let $=new Date(i,n,k);E.push({date:$,isCurrentMonth:!0,isToday:this.isSameDay($,A),events:e.filter(Y=>this.isSameDay(new Date(Y.scheduledAt),$)).sort((Y,Se)=>new Date(Y.scheduledAt).getTime()-new Date(Se.scheduledAt).getTime())})}let z=42-E.length;for(let k=1;k<=z;k++){let $=new Date(i,n+1,k);E.push({date:$,isCurrentMonth:!1,isToday:!1,events:[]})}return E}buildWeekDays(t,e){let i=new Date,n=t.getDay(),d=new Date(t);return d.setDate(t.getDate()-n),Array.from({length:7},(S,A)=>{let E=new Date(d);return E.setDate(d.getDate()+A),{date:E,isCurrentMonth:!0,isToday:this.isSameDay(E,i),events:e.filter(z=>this.isSameDay(new Date(z.scheduledAt),E)).sort((z,k)=>new Date(z.scheduledAt).getTime()-new Date(k.scheduledAt).getTime())}})}static{this.\u0275fac=function(e){return new(e||r)}}static{this.\u0275cmp=te({type:r,selectors:[["blooms-social-media-calendar"]],inputs:{projectId:"projectId",eventId:"eventId"},outputs:{bloomsnavigate:"bloomsnavigate",bloomserror:"bloomserror"},decls:49,vars:18,consts:[[1,"smc-page"],[1,"smc-header"],[1,"smc-header__left"],["type","button",1,"back-link",3,"click"],[1,"smc-header__title"],[1,"smc-header__actions"],[1,"smc-quick-access"],[1,"smc-quick-access__bar",3,"click"],[1,"smc-quick-access__counts"],[1,"smc-qa-badge"],[1,"smc-qa-badge__label"],[1,"smc-qa-badge__num"],["type","button",1,"smc-quick-access__toggle"],[1,"smc-quick-access__body"],[1,"smc-toolbar"],[1,"smc-toolbar__nav"],[1,"btn","btn-sm","btn-ghost",3,"click"],[1,"smc-toolbar__heading"],[1,"smc-toolbar__right"],[1,"smc-view-switcher"],[3,"click"],[1,"smc-calendar","smc-calendar--week"],[1,"smc-calendar","smc-calendar--day"],[1,"smc-quick-access__col"],[1,"smc-quick-access__heading"],[1,"smc-quick-access__empty"],[1,"smc-quick-event"],[1,"smc-quick-access__more"],[1,"smc-quick-access__heading","smc-quick-access__heading--danger"],[1,"smc-quick-event","smc-quick-event--overdue"],[1,"smc-quick-access__more","smc-quick-access__more--danger"],[1,"smc-quick-event",3,"click"],[1,"smc-quick-event__platform"],[1,"smc-quick-event__info"],[1,"smc-quick-event__title"],[1,"smc-quick-event__time"],[1,"smc-quick-event","smc-quick-event--overdue",3,"click"],["appTooltip","Mark as completed",1,"smc-quick-event__complete-btn",3,"click"],[1,"smc-calendar","smc-calendar--month"],[1,"smc-calendar__weekdays"],[1,"smc-calendar__weekday"],[1,"smc-calendar__grid"],[1,"smc-day",3,"smc-day--other-month","smc-day--today","smc-day--has-events","smc-day--mobile-selected"],[1,"smc-mobile-events-panel"],[1,"smc-mobile-events-panel__header"],[1,"smc-mobile-events-panel__date"],[1,"smc-mobile-events-panel__add-btn",3,"click"],[1,"smc-mobile-events-panel__empty"],[1,"smc-mobile-event-item"],[1,"smc-day",3,"click"],[1,"smc-day__top-row"],[1,"smc-day__number"],[1,"smc-day__hover-actions"],["appTooltip","New event",1,"smc-day__action-btn",3,"click"],["target","_blank","rel","noopener","appTooltip","View all events for this day",1,"smc-day__action-btn",3,"click","href"],[1,"smc-day__events"],[1,"smc-chip",3,"smc-chip--overdue","background","appTooltip"],[1,"smc-chip","smc-chip--more"],[1,"smc-day__mobile-dot-row"],[1,"smc-day__dot",3,"background"],[1,"smc-chip",3,"click","appTooltip"],[1,"smc-chip","smc-chip--more",3,"click"],[1,"smc-day__dot"],[1,"smc-mobile-event-item",3,"click"],[1,"smc-mobile-event-item__bar"],[1,"smc-mobile-event-item__info"],[1,"smc-mobile-event-item__title"],[1,"smc-mobile-event-item__meta"],[1,"smc-mobile-event-item__overdue"],[1,"smc-mobile-event-item__status"],[1,"smc-week-header"],[1,"smc-week-header__time-col"],[1,"smc-week-header__day",3,"smc-week-header__day--today"],[1,"smc-week-body"],[1,"smc-week-times"],[1,"smc-week-time"],[1,"smc-week-col"],[1,"smc-week-header__day"],[1,"smc-week-header__day-name"],[1,"smc-week-header__day-num"],[1,"smc-week-header__actions"],["target","_blank","rel","noopener","appTooltip","View all events",1,"smc-day__action-btn",3,"href"],[1,"smc-week-event",3,"smc-week-event--overdue","background","top"],[1,"smc-week-event",3,"click"],[1,"smc-day-header"],[1,"smc-day-header__actions"],["target","_blank","rel","noopener",1,"btn","btn-sm","btn-ghost",3,"href"],[1,"smc-day-body"],[1,"smc-day-col"],[1,"smc-week-event__time"],[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"],[1,"smc-drawer__assignees"],[1,"smc-drawer__assignee-chip"],[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"],["rows","3","placeholder","Internal team notes (not published)...",1,"form-textarea",3,"change","ngModel"],[1,"smc-drawer__tags"],[1,"smc-drawer__tag"],[1,"smc-drawer__footer"],[1,"btn","btn-success","btn-sm",3,"disabled"],[1,"btn","btn-danger","btn-sm",3,"click"],["autofocus","",1,"form-input",3,"ngModelChange","blur","keydown.enter","ngModel"],[1,"smc-drawer__event-title",3,"click"],[1,"smc-drawer__edit-hint"],["appTooltip","Remove assignee",3,"click"],["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"],[1,"smc-drawer","smc-drawer--create"],[1,"smc-drawer__create-title"],[1,"smc-drawer__form",3,"ngSubmit","formGroup"],["formControlName","title","placeholder","Event title",1,"form-input"],[1,"form-error"],[1,"platform-grid"],["type","button",1,"platform-option",3,"platform-option--selected","--pcolor"],["type","datetime-local","formControlName","scheduledAt",1,"form-input"],["rows","3","formControlName","description","placeholder","Post copy or description...",1,"form-textarea"],["rows","2","formControlName","notes","placeholder","Internal notes...",1,"form-textarea"],[1,"assignee-list__empty"],[1,"assignee-list"],[1,"error-msg"],["type","submit",1,"btn","btn-primary",3,"disabled"],["type","button",1,"btn","btn-ghost",3,"click"],["type","button",1,"platform-option",3,"click"],[1,"platform-option__icon"],[1,"platform-option__label"],["type","button",1,"assignee-chip",3,"assignee-chip--selected"],["type","button",1,"assignee-chip",3,"click"],[1,"assignee-chip__avatar"],[1,"assignee-chip__name"]],template:function(e,i){e&1&&(a(0,"div",0)(1,"div",1)(2,"div",2)(3,"button",3),m("click",function(){return i.goToLego()}),s(4,"\u2190 Lego"),o(),a(5,"h1",4),s(6,"\u{1F4C5} Social Media Calendar"),o()(),T(7,"div",5),o(),a(8,"div",6)(9,"div",7),m("click",function(){return i.toggleQuickPanel()}),a(10,"div",8)(11,"span",9),s(12," \u{1F4C5} "),a(13,"span",10),s(14,"Upcoming"),o(),a(15,"span",11),s(16),o()(),a(17,"span",9),s(18," \u26A0 "),a(19,"span",10),s(20,"Overdue"),o(),a(21,"span",11),s(22),o()()(),a(23,"button",12),s(24),o()(),g(25,Fe,15,5,"div",13),o(),a(26,"div",14)(27,"div",15)(28,"button",16),m("click",function(){return i.prev()}),s(29,"\u2039"),o(),a(30,"button",16),m("click",function(){return i.goToday()}),s(31,"Today"),o(),a(32,"button",16),m("click",function(){return i.next()}),s(33,"\u203A"),o(),a(34,"span",17),s(35),o()(),a(36,"div",18)(37,"div",19)(38,"button",20),m("click",function(){return i.setView("month")}),s(39,"Month"),o(),a(40,"button",20),m("click",function(){return i.setView("week")}),s(41,"Week"),o(),a(42,"button",20),m("click",function(){return i.setView("day")}),s(43,"Day"),o()()()(),g(44,Ne,17,5)(45,Ye,11,0,"div",21)(46,Je,17,5,"div",22)(47,rt,4,3)(48,ut,43,9),o()),e&2&&(l(16),v(i.upcomingEvents().length),l(),y("smc-qa-badge--danger",i.overdueCount()>0),l(5),v(i.overdueCount()),l(2),C(" ",i.quickPanelOpen()?"\u25B2 Collapse":"\u25BC Expand"," "),l(),u(i.quickPanelOpen()?25:-1),l(10),v(i.headingLabel()),l(3),y("active",i.view()==="month"),l(2),y("active",i.view()==="week"),l(2),y("active",i.view()==="day"),l(2),u(i.view()==="month"?44:-1),l(),u(i.view()==="week"?45:-1),l(),u(i.view()==="day"?46:-1),l(),u(i.drawerOpen()?47:-1),l(),u(i.createDrawerOpen()?48:-1))},dependencies:[ne,ie,pe,se,oe,ae,re,le,_e,ce,de,fe],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";.smc-page{padding:24px;max-width:1400px;margin:0 auto;font-family:var(--font-sans, system-ui, sans-serif)}.smc-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}.smc-header__left{display:flex;align-items:center;gap:16px}.smc-header__title{font-size:1.5rem;font-weight:700;margin:0}.smc-header__actions{display:flex;align-items:center;gap:8px}.back-link{background:none;border:0;padding:0;cursor:pointer;font-family:inherit;color:var(--color-primary, #6366f1);text-decoration:none;font-size:.85rem}.back-link:hover{text-decoration:underline}.smc-quick-access{background:var(--color-surface, #f8f9fa);border:1px solid var(--color-border, #e5e7eb);border-radius:12px;margin-bottom:20px;overflow:hidden}.smc-quick-access__bar{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .15s}.smc-quick-access__bar:hover{background:var(--color-hover, #f3f4f6)}.smc-quick-access__counts{display:flex;align-items:center;gap:16px}.smc-qa-badge{display:inline-flex;align-items:center;gap:6px;font-size:.82rem;color:#374151}.smc-qa-badge__label{font-weight:500}.smc-qa-badge__num{min-width:20px;height:20px;padding:0 6px;background:#e5e7eb;border-radius:10px;font-size:.75rem;font-weight:700;color:#374151;display:inline-flex;align-items:center;justify-content:center}.smc-qa-badge--danger .smc-qa-badge__num{background:#fee2e2;color:#dc2626}.smc-qa-badge--danger .smc-qa-badge__label{color:#dc2626}.smc-quick-access__toggle{font-size:.78rem;color:#6b7280;background:none;border:none;cursor:pointer;white-space:nowrap}.smc-quick-access__body{display:grid;grid-template-columns:1fr 1fr;gap:0;border-top:1px solid var(--color-border, #e5e7eb)}.smc-quick-access__col{padding:12px 16px;max-height:220px;overflow-y:auto}.smc-quick-access__col:first-child{border-right:1px solid var(--color-border, #e5e7eb)}.smc-quick-access__heading{font-size:.8rem;font-weight:600;margin:0 0 8px;color:#374151;text-transform:uppercase;letter-spacing:.04em}.smc-quick-access__heading--danger{color:#dc2626}.smc-quick-access__empty{font-size:.8rem;color:#9ca3af;margin:0}.smc-quick-access__more{font-size:.75rem;color:#6b7280;margin:4px 0 0;font-style:italic}.smc-quick-access__more--danger{color:#dc2626}.smc-quick-event{display:flex;align-items:center;gap:8px;padding:5px 6px;border-radius:6px;cursor:pointer;transition:background .15s}.smc-quick-event:hover{background:var(--color-hover, #f3f4f6)}.smc-quick-event--overdue{border-left:3px solid #f59e0b;padding-left:8px}.smc-quick-event__platform{font-size:1rem;flex-shrink:0}.smc-quick-event__info{display:flex;flex-direction:column;min-width:0}.smc-quick-event__title{font-size:.8rem;font-weight:500;color:#111827;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.smc-quick-event__time{font-size:.72rem;color:#6b7280}.smc-quick-event__complete-btn{flex-shrink:0;width:22px;height:22px;display:flex;align-items:center;justify-content:center;background:#10b9811a;border:1px solid rgba(16,185,129,.3);border-radius:50%;color:#10b981;font-size:11px;font-weight:700;cursor:pointer;opacity:0;transition:opacity .15s,background .12s,transform .1s}.smc-quick-event:hover .smc-quick-event__complete-btn{opacity:1}.smc-quick-event__complete-btn:hover{background:#10b98133;transform:scale(1.1)}.smc-toolbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;gap:12px;flex-wrap:wrap}.smc-toolbar__nav{display:flex;align-items:center;gap:4px}.smc-toolbar__heading{font-size:1.1rem;font-weight:600;margin-left:12px}.smc-toolbar__right{display:flex;align-items:center;gap:8px}.smc-view-switcher{display:flex;border:1px solid var(--color-border, #e5e7eb);border-radius:6px;overflow:hidden}.smc-view-switcher button{padding:5px 14px;font-size:.8rem;background:none;border:none;cursor:pointer;color:#6b7280;transition:background .15s}.smc-view-switcher button.active{background:var(--color-primary, #6366f1);color:#fff}.smc-view-switcher button:hover:not(.active){background:#f3f4f6}.smc-calendar--month{border:1px solid var(--color-border, #e5e7eb);border-radius:12px;overflow:hidden}.smc-calendar__weekdays{display:grid;grid-template-columns:repeat(7,1fr);background:var(--color-surface, #f8f9fa)}.smc-calendar__weekday{padding:8px;text-align:center;font-size:.78rem;font-weight:600;color:#6b7280;border-bottom:1px solid #e5e7eb}.smc-calendar__grid{display:grid;grid-template-columns:repeat(7,1fr)}.smc-day{height:130px;padding:6px;border-right:1px solid #e5e7eb;border-bottom:1px solid #e5e7eb;cursor:pointer;transition:background .1s;overflow:hidden;display:flex;flex-direction:column;box-sizing:border-box}.smc-day:hover{background:#f9fafb}.smc-day--other-month{opacity:.4}.smc-day--today .smc-day__number{background:var(--color-primary, #6366f1);color:#fff;border-radius:50%;width:24px;height:24px;display:flex;align-items:center;justify-content:center}.smc-day__top-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px;flex-shrink:0}.smc-day__number{font-size:.82rem;font-weight:500;color:#374151;width:24px;flex-shrink:0;text-align:center}.smc-day__hover-actions{display:flex;gap:3px;opacity:0;transition:opacity .15s}.smc-day:hover .smc-day__hover-actions{opacity:1}.smc-day__action-btn{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:6px;font-size:.9rem;background:none;border:1px solid var(--color-border, #e5e7eb);cursor:pointer;color:var(--color-text-muted, #6b7280);text-decoration:none;line-height:1;font-weight:700;transition:background .12s,color .12s,border-color .12s}.smc-day__action-btn:hover{background:var(--color-accent, #6366f1);color:#fff;border-color:var(--color-accent, #6366f1)}.smc-day__events{display:flex;flex-direction:column;gap:2px;flex:1;overflow:hidden}.smc-chip{font-size:.72rem;padding:2px 6px;border-radius:4px;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;transition:opacity .15s;flex-shrink:0}.smc-chip:hover{opacity:.85}.smc-chip--overdue{outline:2px solid #f59e0b}.smc-chip--more{background:#e5e7eb!important;color:#374151!important;font-style:italic}.smc-day__mobile-dot-row{display:none;gap:3px;justify-content:center;margin-top:3px;flex-shrink:0}.smc-day__dot{width:5px;height:5px;border-radius:50;flex-shrink:0}.smc-day--mobile-selected .smc-day__number{background:var(--color-accent, #6366f1);color:#fff;border-radius:50%;width:24px;height:24px;display:flex;align-items:center;justify-content:center}.smc-day--today.smc-day--mobile-selected .smc-day__number{background:var(--color-accent, #6366f1)}.smc-mobile-events-panel{display:none}.smc-calendar--week{border:1px solid #e5e7eb;border-radius:12px;overflow:hidden}.smc-week-header{display:grid;grid-template-columns:60px repeat(7,1fr);border-bottom:1px solid #e5e7eb;background:#f8f9fa}.smc-week-header__time-col{padding:8px}.smc-week-header__day{padding:8px;text-align:center;border-left:1px solid #e5e7eb;position:relative}.smc-week-header__day-name{display:block;font-size:.75rem;color:#6b7280}.smc-week-header__day-num{display:inline-block;font-size:1rem;font-weight:600;width:30px;height:30px;line-height:30px;border-radius:50%;text-align:center}.smc-week-header__day-num--today{background:var(--color-primary, #6366f1);color:#fff}.smc-week-header__actions{display:flex;justify-content:center;gap:4px;margin-top:4px;opacity:0;transition:opacity .15s}.smc-week-header__day:hover .smc-week-header__actions{opacity:1}.smc-week-body{display:grid;grid-template-columns:60px repeat(7,1fr);height:600px;overflow-y:auto;position:relative}.smc-week-times{display:flex;flex-direction:column}.smc-week-time{height:60px;padding:2px 4px;font-size:.7rem;color:#9ca3af;border-bottom:1px solid #f3f4f6}.smc-week-col{position:relative;border-left:1px solid #e5e7eb;background:repeating-linear-gradient(to bottom,transparent 0px,transparent 59px,#f3f4f6 59px,#f3f4f6 60px)}.smc-week-event{position:absolute;left:2px;right:2px;min-height:20px;padding:2px 4px;border-radius:4px;font-size:.72rem;color:#fff;cursor:pointer;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.smc-week-event--overdue{outline:2px solid #f59e0b}.smc-week-event__time{font-size:.65rem;opacity:.85}.smc-calendar--day{border:1px solid #e5e7eb;border-radius:12px;overflow:hidden}.smc-day-header{padding:12px 16px;background:#f8f9fa;border-bottom:1px solid #e5e7eb;font-weight:600;display:flex;align-items:center;justify-content:space-between}.smc-day-header__actions{display:flex;gap:8px}.smc-day-body{display:grid;grid-template-columns:60px 1fr;height:600px;overflow-y:auto}.smc-day-col{position:relative;background:repeating-linear-gradient(to bottom,transparent 0px,transparent 59px,#f3f4f6 59px,#f3f4f6 60px)}.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__create-title{font-size:1.2rem;font-weight:700;margin:0}.smc-drawer__assignees{display:flex;flex-wrap:wrap;gap:6px}.smc-drawer__assignee-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:12px;font-size:.78rem;color:#1e40af}.smc-drawer__assignee-chip button{background:none;border:none;cursor:pointer;font-size:.7rem;color:#6b7280}.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:#6366f1;display:block;margin-bottom:8px}.smc-drawer__link-row{display:flex;gap:6px;flex-wrap:wrap}.smc-drawer__tags{display:flex;flex-wrap:wrap;gap:4px}.smc-drawer__tag{padding:2px 8px;background:#f3f4f6;border-radius:10px;font-size:.75rem;color:#374151}.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}.smc-drawer__form{display:flex;flex-direction:column;flex:1}.platform-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.platform-option{display:flex;flex-direction:column;align-items:center;gap:4px;padding:10px 6px;border-radius:8px;cursor:pointer;border:2px solid var(--color-border, #e5e7eb);background:var(--color-bg, #fff);color:var(--color-text-muted, #6b7280);font-size:.72rem;transition:border-color .15s,background .15s,color .15s}.platform-option:hover:not(.platform-option--selected){border-color:#d1d5db;background:var(--color-hover, #f9fafb)}.platform-option--selected{border-color:var(--pcolor, var(--color-accent, #6366f1));background:var(--color-primary-soft, #eff6ff);color:var(--color-text, #111827);font-weight:600}.platform-option__icon{font-size:1.3rem}.platform-option__label{text-align:center;line-height:1.3}.assignee-list{display:flex;flex-wrap:wrap;gap:6px}.assignee-list__empty{font-size:.78rem;color:#9ca3af;margin:0}.assignee-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px 4px 4px;border-radius:20px;border:1px solid var(--color-border, #e5e7eb);background:var(--color-bg, #fff);color:var(--color-text-muted, #6b7280);font-size:.78rem;cursor:pointer;transition:border-color .15s,background .15s,color .15s}.assignee-chip:hover:not(.assignee-chip--selected){border-color:#d1d5db;background:var(--color-hover, #f9fafb)}.assignee-chip--selected{border-color:var(--color-accent, #6366f1);background:var(--color-primary-soft, #eff6ff);color:var(--color-accent, #6366f1);font-weight:600}.assignee-chip__avatar{width:22px;height:22px;border-radius:50%;background:var(--color-accent, #6366f1);color:#fff;display:flex;align-items:center;justify-content:center;font-size:.65rem;font-weight:700;flex-shrink:0}.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}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-sm{padding:5px 12px;font-size:.8rem}.btn-primary{background:var(--color-primary, #6366f1);color:#fff}.btn-primary:hover:not(:disabled){filter:brightness(1.1)}.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}.btn-icon{background:none;border:none;cursor:pointer;padding:2px 4px;color:#9ca3af}.btn-icon:hover{color:#ef4444}.form-input,.form-select,.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-input--sm{padding:5px 8px;font-size:.78rem}.form-textarea{resize:vertical}.form-error{font-size:.75rem;color:#ef4444;margin-top:4px;display:block}.error-msg{padding:10px;background:#fef2f2;border:1px solid #fecaca;border-radius:6px;color:#b91c1c;font-size:.82rem;margin:0 20px}@media (max-width: 768px){.smc-page{padding:12px}.smc-header__title{font-size:1.1rem}.smc-quick-access__body{grid-template-columns:1fr}.smc-quick-access__col:first-child{border-right:none;border-bottom:1px solid var(--color-border, #e5e7eb)}.smc-day{height:52px!important;padding:4px 2px}.smc-day__events{display:none}.smc-day__mobile-dot-row{display:flex}.smc-day__dot{border-radius:50%}.smc-day__hover-actions{opacity:1!important}.smc-day__action-btn{width:22px;height:22px;font-size:.8rem}.smc-calendar--week{overflow-x:auto}.smc-week-header,.smc-week-body{min-width:560px}.smc-toolbar{flex-direction:column;align-items:flex-start;gap:8px}.smc-toolbar__heading{font-size:.95rem;margin-left:0}.smc-drawer{width:100%}.smc-mobile-events-panel{display:block;margin-top:12px;border:1px solid var(--color-border, #e5e7eb);border-radius:12px;overflow:hidden;background:var(--color-bg, #fff)}.smc-mobile-events-panel__header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:var(--color-surface, #f8f9fa);border-bottom:1px solid var(--color-border, #e5e7eb)}.smc-mobile-events-panel__date{font-size:.9rem;font-weight:600;color:#111827}.smc-mobile-events-panel__add-btn{font-size:.8rem;font-weight:600;color:var(--color-primary, #6366f1);background:none;border:1px solid var(--color-primary, #6366f1);border-radius:6px;padding:4px 10px;cursor:pointer;transition:background .15s,color .15s}.smc-mobile-events-panel__add-btn:hover{background:var(--color-primary, #6366f1);color:#fff}.smc-mobile-events-panel__empty{padding:16px;text-align:center;font-size:.82rem;color:#9ca3af;margin:0}.smc-mobile-event-item{display:flex;align-items:center;gap:12px;padding:12px 16px;cursor:pointer;border-bottom:1px solid #f3f4f6;transition:background .15s}.smc-mobile-event-item:last-child{border-bottom:none}.smc-mobile-event-item:hover{background:var(--color-hover, #f9fafb)}.smc-mobile-event-item__bar{width:4px;height:36px;border-radius:2px;flex-shrink:0}.smc-mobile-event-item__info{flex:1;min-width:0}.smc-mobile-event-item__title{display:block;font-size:.88rem;font-weight:600;color:#111827;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.smc-mobile-event-item__meta{font-size:.75rem;color:#6b7280;display:block}.smc-mobile-event-item__overdue{color:#f59e0b;font-weight:600}.smc-mobile-event-item__status{padding:2px 8px;border-radius:10px;font-size:.7rem;font-weight:600;color:#fff;white-space:nowrap;flex-shrink:0}.smc-drawer__link-row{flex-direction:column}.platform-option{padding:8px 4px}}
|
|
3
|
+
`],encapsulation:3,changeDetection:0})}};export{ke as BloomsSocialMediaCalendarComponent};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{a as X}from"./chunk-7NQRVCWL.js";import{c as U,e as J,h as Y,s as G}from"./chunk-VQEBAAHK.js";import{a as K}from"./chunk-HLIQJSA7.js";import"./chunk-SPLW6L45.js";import{$a as S,Ca as q,Cb as B,D as z,Ga as V,Ha as b,Ia as _,J as m,K as h,La as g,Na as T,Oa as w,Pa as C,Qa as i,Ra as o,S as M,Sa as I,Ta as f,Ua as s,V as A,Va as p,W as v,Wa as a,Xa as u,Ya as x,Za as P,a as j,ab as D,bb as E,eb as y,fb as k,hb as W,nb as N,oa as $,pa as n,sb as Q,wb as R,xa as O,xb as H}from"./chunk-WQW7QCHM.js";var ee=(c,r)=>r._id,te=(c,r)=>r.platform;function ie(c,r){if(c&1){let e=f();i(0,"button",51),s("click",function(){let l=m(e).$implicit,d=p();return h(d.setTierFilter(d.tierFilter===l?"":l))}),i(1,"span",11),a(2),o(),i(3,"span",12),a(4),y(5,"titlecase"),o()()}if(c&2){let e=r.$implicit,t=p();b("--sc-accent",t.getTierColor(e).accent)("--sc-bg",t.getTierColor(e).bg)("--sc-text",t.getTierColor(e).text),_("ihq-stat-card--active",t.tierFilter===e),n(2),u(t.tierCount(e)),n(2),u(k(5,10,e))}}function oe(c,r){if(c&1){let e=f();i(0,"button",52),s("click",function(){m(e);let l=p();return l.searchQuery="",h(l.onSearch())}),a(1,"\u2715"),o()}}function re(c,r){if(c&1&&I(0,"span",53),c&2){let e=p();b("background",e.getTierAccent(e.tierFilter))}}function ne(c,r){if(c&1){let e=f();i(0,"button",25),s("click",function(){let l=m(e).$implicit,d=p();return h(d.setTierFilter(l))}),I(1,"span",54),a(2),y(3,"titlecase"),o()}if(c&2){let e=r.$implicit,t=p();_("ihq-dd__opt--on",t.tierFilter===e),n(),b("background",t.getTierColor(e).accent),n(),x(" ",k(3,5,e)," ")}}function ae(c,r){if(c&1){let e=f();i(0,"button",25),s("click",function(){let l=m(e).$implicit,d=p();return h(d.setPlatformFilter(l))}),a(1),y(2,"titlecase"),o()}if(c&2){let e=r.$implicit,t=p();_("ihq-dd__opt--on",t.platformFilter===e),n(),P(" ",t.getPlatformEmoji(e)," ",k(2,4,e)," ")}}function le(c,r){c&1&&(i(0,"div",31)(1,"div",55),I(2,"span")(3,"span")(4,"span"),o(),i(5,"span"),a(6,"Loading creators\u2026"),o()())}function ce(c,r){if(c&1){let e=f();i(0,"button",8),s("click",function(){m(e);let l=p(2);return h(l.openAddDrawer())}),a(1,"+ Add First Creator"),o()}}function de(c,r){if(c&1&&(i(0,"div",32)(1,"div",56),a(2,"\u{1F31F}"),o(),i(3,"h2",57),a(4),o(),i(5,"p",58),a(6),o(),q(7,ce,2,0,"button",59),o()),c&2){let e=p();n(4),x(" ",e.searchQuery||e.tierFilter||e.platformFilter?"No results":"No creators yet"," "),n(2),x(" ",e.searchQuery||e.tierFilter||e.platformFilter?"Try adjusting your filters or search term.":"Start building your influencer roster by adding the first creator."," "),n(),g(!e.searchQuery&&!e.tierFilter&&!e.platformFilter?7:-1)}}function se(c,r){if(c&1&&(i(0,"div",74)(1,"span"),a(2),o(),i(3,"span",80),a(4),o()()),c&2){let e=r.$implicit,t=p(4);n(2),u(t.getPlatformEmoji(e.platform)),n(2),x("@",e.handle||"\u2014","")}}function pe(c,r){c&1&&(i(0,"span",75),a(1,"No platforms added"),o())}function me(c,r){if(c&1){let e=f();i(0,"article",64),s("click",function(){let l=m(e).$implicit,d=p(3);return h(d.goToDetail(l._id))}),I(1,"div",65),i(2,"div",66)(3,"div",67)(4,"div",68),a(5),o(),i(6,"div",69)(7,"div",70),a(8),o(),i(9,"span",71),a(10),y(11,"titlecase"),o()(),i(12,"button",72),s("click",function(l){let d=m(e).$implicit;return p(3).openEditDrawer(d),h(l.stopPropagation())}),a(13,"\u270F\uFE0F"),o()(),i(14,"div",73),w(15,se,5,2,"div",74,te),q(17,pe,2,0,"span",75),o(),i(18,"div",76),I(19,"span",77),i(20,"span",78),a(21),o(),i(22,"button",79),s("click",function(l){let d=m(e).$implicit;return p(3).goToDetail(d._id),h(l.stopPropagation())}),a(23," Open \u2192 "),o()()()()}if(c&2){let e=r.$implicit,t=p(3);n(),b("background",t.getTierColor(e.tier).accent),n(3),b("background",t.getTierColor(e.tier).bg)("color",t.getTierColor(e.tier).text),n(),x(" ",t.getInitials(e.name)," "),n(2),V("appTooltip",e.name),n(),u(e.name),n(),b("background",t.getTierColor(e.tier).bg)("color",t.getTierColor(e.tier).text)("border-color",t.getTierColor(e.tier).accent),n(),x(" ",k(11,20,e.tier)," "),n(5),C(e.platforms),n(2),g(e.platforms.length===0?17:-1),n(2),b("background",t.getTierColor(e.tier).accent),n(2),u(t.getLastSyncLabel(e))}}function he(c,r){if(c&1){let e=f();i(0,"article",81),s("click",function(){m(e);let l=p(3);return h(l.loadMore())}),i(1,"span"),a(2,"Load more \u2193"),o()()}}function _e(c,r){if(c&1&&(i(0,"div",60),w(1,me,24,22,"article",62,ee),q(3,he,3,0,"article",63),o()),c&2){let e=p(2);n(),C(e.influencers()),n(2),g(e.hasMore()?3:-1)}}function ue(c,r){if(c&1&&(i(0,"span",99),a(1),o()),c&2){let e=r.$implicit,t=p(4);n(),P("",t.getPlatformEmoji(e.platform)," @",e.handle||"\u2014","")}}function fe(c,r){c&1&&(i(0,"span",100),a(1,"\u2014"),o())}function xe(c,r){if(c&1){let e=f();i(0,"tr",90),s("click",function(){let l=m(e).$implicit,d=p(3);return h(d.goToDetail(l._id))}),i(1,"td",91)(2,"div",92)(3,"div",93),a(4),o(),i(5,"div")(6,"div",94),a(7),o(),i(8,"div",95),a(9),y(10,"slice"),o()()()(),i(11,"td",96)(12,"span",71),a(13),y(14,"titlecase"),o()(),i(15,"td",97)(16,"div",98),w(17,ue,2,2,"span",99,te),q(19,fe,2,0,"span",100),o()(),i(20,"td",101),a(21),o(),i(22,"td",102),s("click",function(l){return m(e),h(l.stopPropagation())}),i(23,"div",103)(24,"button",104),s("click",function(){let l=m(e).$implicit,d=p(3);return h(d.goToDetail(l._id))}),a(25,"View \u2192"),o(),i(26,"button",105),s("click",function(){let l=m(e).$implicit,d=p(3);return h(d.openEditDrawer(l))}),a(27,"Edit"),o()()()()}if(c&2){let e=r.$implicit,t=p(3);n(3),b("background",t.getTierColor(e.tier).bg)("color",t.getTierColor(e.tier).text),n(),x(" ",t.getInitials(e.name)," "),n(3),u(e.name),n(2),x("",W(10,16,e._id,0,8),"\u2026"),n(3),b("background",t.getTierColor(e.tier).bg)("color",t.getTierColor(e.tier).text)("border-color",t.getTierColor(e.tier).accent),n(),x(" ",k(14,20,e.tier)," "),n(4),C(e.platforms),n(2),g(e.platforms.length===0?19:-1),n(2),u(t.getLastSyncLabel(e))}}function be(c,r){if(c&1){let e=f();i(0,"div",89)(1,"button",106),s("click",function(){m(e);let l=p(3);return h(l.loadMore())}),a(2,"Load more \u2193"),o()()}}function ge(c,r){if(c&1&&(i(0,"div",61)(1,"table",82)(2,"thead")(3,"tr")(4,"th",83),a(5,"Creator"),o(),i(6,"th",84),a(7,"Tier"),o(),i(8,"th",85),a(9,"Platforms"),o(),i(10,"th",86),a(11,"Last Activity"),o(),I(12,"th",87),o()(),i(13,"tbody"),w(14,xe,28,22,"tr",88,ee),o()(),q(16,be,3,0,"div",89),o()),c&2){let e=p(2);n(14),C(e.influencers()),n(2),g(e.hasMore()?16:-1)}}function ve(c,r){if(c&1&&q(0,_e,4,1,"div",60)(1,ge,17,1,"div",61),c&2){let e=p();g(e.viewMode()==="grid"?0:-1),n(),g(e.viewMode()==="table"?1:-1)}}function qe(c,r){if(c&1){let e=f();i(0,"button",107),s("click",function(){let l=m(e).$implicit,d=p();return h(d.form.tier=l)}),I(1,"span",108),a(2),y(3,"titlecase"),o()}if(c&2){let e=r.$implicit,t=p();b("--to-bg",t.getTierColor(e).bg)("--to-text",t.getTierColor(e).text)("--to-accent",t.getTierColor(e).accent),_("ihq-tier-opt--on",t.form.tier===e),n(2),x(" ",k(3,9,e)," ")}}function we(c,r){if(c&1){let e=f();i(0,"div",47)(1,"span",109),a(2),o(),i(3,"span",110),a(4),y(5,"titlecase"),o(),i(6,"input",111),E("ngModelChange",function(l){let d=m(e).$implicit,F=p();return D(F.form.platformInputs[d],l)||(F.form.platformInputs[d]=l),h(l)}),o()()}if(c&2){let e=r.$implicit,t=p();n(2),u(t.getPlatformEmoji(e)),n(2),u(k(5,3,e)),n(2),S("ngModel",t.form.platformInputs[e])}}var L={nano:{bg:"#ede9fe",text:"#5b21b6",accent:"#7c3aed"},micro:{bg:"#d1fae5",text:"#065f46",accent:"#059669"},macro:{bg:"#fef3c7",text:"#92400e",accent:"#d97706"},mega:{bg:"#fee2e2",text:"#991b1b",accent:"#E84855"}},Ce={instagram:"\u{1F4F8}",facebook:"\u{1F44D}",youtube:"\u{1F3AC}"},Z=class c{constructor(){this.svc=z(X);this.host=z(A);this.projectId="";this.bloomsnavigate=new M;this.bloomserror=new M;this.needsSignIn=N(()=>B.config()!==null&&B.session()===null);this.influencers=v([]);this.loading=v(!1);this.saving=v(!1);this.drawerOpen=v(!1);this.editMode=v(!1);this.hasMore=v(!1);this.totalCount=v(0);this.viewMode=v("grid");this.openDd=v("");this.searchQuery="";this.tierFilter="";this.platformFilter="";this.searchFocus=!1;this.cursor=null;this.tiers=["nano","micro","macro","mega"];this.platformList=["instagram","facebook","youtube"];this.form=this.emptyForm()}go(r,e={}){let t={feature:"influencers",view:r,params:e};this.bloomsnavigate.emit(t),B.emit(j({type:"navigate"},t))}onDocClick(){this.openDd.set("")}ngOnInit(){this.projectId||(this.projectId=B.project()?.id??""),this.loadInfluencers(!0)}emptyForm(){return{name:"",tier:"micro",notes:"",platformInputs:{instagram:"",facebook:"",youtube:""},editingId:null}}loadInfluencers(r=!1){r&&(this.cursor=null,this.influencers.set([])),this.loading.set(!0),this.svc.listInfluencers(this.projectId,{tier:this.tierFilter||void 0,platform:this.platformFilter||void 0,search:this.searchQuery||void 0,cursor:this.cursor??void 0,limit:20}).subscribe({next:e=>{let t=e.data;this.influencers.update(l=>r?t.influencers:[...l,...t.influencers]),this.hasMore.set(t.hasMore),this.cursor=t.nextCursor,this.totalCount.set(this.influencers().length),this.loading.set(!1)},error:()=>this.loading.set(!1)})}onSearch(){this.loadInfluencers(!0)}loadMore(){this.loadInfluencers(!1)}toggleDd(r,e){e.stopPropagation(),this.openDd.update(t=>t===r?"":r)}setTierFilter(r){this.tierFilter=r,this.openDd.set(""),this.loadInfluencers(!0)}setPlatformFilter(r){this.platformFilter=r,this.openDd.set(""),this.loadInfluencers(!0)}tierCount(r){return this.influencers().filter(e=>e.tier===r).length}openAddDrawer(){this.form=this.emptyForm(),this.editMode.set(!1),this.drawerOpen.set(!0)}openEditDrawer(r){this.form={name:r.name,tier:r.tier,notes:r.notes??"",platformInputs:{instagram:r.platforms.find(e=>e.platform==="instagram")?.handle??"",facebook:r.platforms.find(e=>e.platform==="facebook")?.handle??"",youtube:r.platforms.find(e=>e.platform==="youtube")?.handle??""},editingId:r._id},this.editMode.set(!0),this.drawerOpen.set(!0)}closeDrawer(){this.drawerOpen.set(!1)}saveInfluencer(){if(!this.form.name.trim()||!this.form.tier)return;this.saving.set(!0);let r=this.platformList.filter(t=>this.form.platformInputs[t]?.trim()).map(t=>({platform:t,handle:this.form.platformInputs[t].replace(/^@/,"").trim()})),e={name:this.form.name.trim(),tier:this.form.tier,notes:this.form.notes.trim()||void 0,platforms:r};this.form.editingId?this.svc.updateInfluencer(this.form.editingId,{name:e.name,tier:e.tier,notes:e.notes}).subscribe({next:()=>{this.saving.set(!1),this.closeDrawer(),this.loadInfluencers(!0)},error:()=>this.saving.set(!1)}):this.svc.createInfluencer(this.projectId,e).subscribe({next:()=>{this.saving.set(!1),this.closeDrawer(),this.loadInfluencers(!0)},error:()=>this.saving.set(!1)})}goToDetail(r){this.go("detail",{influencerId:r})}goToSources(){this.go("data-sources")}getTierColor(r){return L[r]??L.micro}getTierAccent(r){return L[r]?.accent??"#ccc"}getPlatformEmoji(r){return Ce[r]??"\u{1F310}"}getPlatformLabel(r){return{instagram:"\u{1F4F8} Instagram",facebook:"\u{1F44D} Facebook",youtube:"\u{1F3AC} YouTube"}[r]??r}getInitials(r){return r.split(" ").slice(0,2).map(e=>e[0]).join("").toUpperCase()}getLastSyncLabel(r){let e=r.updatedAt??r.createdAt;if(!e)return"No data";let t=Date.now()-new Date(e).getTime(),l=Math.floor(t/36e5);return l<1?"Just now":l<24?`${l}h ago`:`${Math.floor(l/24)}d ago`}static{this.\u0275fac=function(e){return new(e||c)}}static{this.\u0275cmp=O({type:c,selectors:[["blooms-influencer-dashboard"]],hostBindings:function(e,t){e&1&&s("click",function(){return t.onDocClick()},!1,$)},inputs:{projectId:"projectId"},outputs:{bloomsnavigate:"bloomsnavigate",bloomserror:"bloomserror"},decls:108,vars:37,consts:[[1,"ihq-shell"],[1,"ihq-header"],[1,"ihq-header__left"],[1,"ihq-header__icon"],[1,"ihq-header__title"],[1,"ihq-header__sub"],[1,"ihq-header__actions"],[1,"ihq-btn","ihq-btn--ghost",3,"click"],[1,"ihq-btn","ihq-btn--primary",3,"click"],[1,"ihq-stats"],[1,"ihq-stat-card","ihq-stat-card--total",3,"click"],[1,"ihq-stat-card__num"],[1,"ihq-stat-card__label"],[1,"ihq-stat-card",3,"ihq-stat-card--active","--sc-accent","--sc-bg","--sc-text"],[1,"ihq-toolbar"],[1,"ihq-search"],[1,"ihq-search__icon"],["type","text","placeholder","Search creators\u2026",1,"ihq-search__input",3,"ngModelChange","focus","blur","ngModel"],["appTooltip","Clear search",1,"ihq-search__clear"],[1,"ihq-toolbar__filters"],[1,"ihq-dd"],[1,"ihq-dd__btn",3,"click"],[1,"ihq-dd__dot",3,"background"],[1,"ihq-dd__arrow"],[1,"ihq-dd__menu",3,"click"],[1,"ihq-dd__opt",3,"click"],[1,"ihq-dd__opt",3,"ihq-dd__opt--on"],[1,"ihq-count"],[1,"ihq-view-seg"],["appTooltip","Grid view",1,"ihq-view-seg__btn",3,"click"],["appTooltip","List view",1,"ihq-view-seg__btn",3,"click"],[1,"ihq-state"],[1,"ihq-empty"],[1,"ihq-backdrop",3,"click"],[1,"ihq-drawer"],[1,"ihq-drawer__head"],[1,"ihq-drawer__eyebrow"],[1,"ihq-drawer__title"],["appTooltip","Close",1,"ihq-drawer__x",3,"click"],[1,"ihq-drawer__body"],[1,"ihq-field"],[1,"ihq-label"],[1,"ihq-req"],["type","text","placeholder","Full creator name",1,"ihq-input",3,"ngModelChange","ngModel"],[1,"ihq-tier-grid"],["type","button",1,"ihq-tier-opt",3,"ihq-tier-opt--on","--to-bg","--to-text","--to-accent"],[1,"ihq-pstack"],[1,"ihq-prow"],["rows","4","placeholder","Brand fit, contact info, campaign notes\u2026",1,"ihq-textarea",3,"ngModelChange","ngModel"],[1,"ihq-drawer__foot"],[1,"ihq-btn","ihq-btn--primary",3,"click","disabled"],[1,"ihq-stat-card",3,"click"],["appTooltip","Clear search",1,"ihq-search__clear",3,"click"],[1,"ihq-dd__dot"],[1,"ihq-dd__opt-dot"],[1,"ihq-dots"],[1,"ihq-empty__icon"],[1,"ihq-empty__title"],[1,"ihq-empty__sub"],[1,"ihq-btn","ihq-btn--primary"],[1,"ihq-grid"],[1,"ihq-tbl-wrap"],[1,"ihq-card"],[1,"ihq-card","ihq-card--load"],[1,"ihq-card",3,"click"],[1,"ihq-card__accent-bar"],[1,"ihq-card__inner"],[1,"ihq-card__head"],[1,"ihq-card__avatar"],[1,"ihq-card__meta"],[1,"ihq-card__name",3,"appTooltip"],[1,"ihq-tier-badge"],["appTooltip","Edit creator",1,"ihq-card__edit-btn",3,"click"],[1,"ihq-card__platforms"],[1,"ihq-card__prow"],[1,"ihq-card__nop"],[1,"ihq-card__foot"],[1,"ihq-card__dot"],[1,"ihq-card__sync"],[1,"ihq-card__open-btn",3,"click"],[1,"ihq-card__handle"],[1,"ihq-card","ihq-card--load",3,"click"],[1,"ihq-tbl"],[1,"ihq-th"],[1,"ihq-th","ihq-th--tier"],[1,"ihq-th","ihq-th--platforms"],[1,"ihq-th","ihq-th--activity"],[1,"ihq-th","ihq-th--actions"],[1,"ihq-tr"],[1,"ihq-tbl-more"],[1,"ihq-tr",3,"click"],[1,"ihq-td"],[1,"ihq-tcreator"],[1,"ihq-tavatar"],[1,"ihq-tname"],[1,"ihq-tid"],[1,"ihq-td","ihq-td--tier"],[1,"ihq-td","ihq-td--platforms"],[1,"ihq-tplatforms"],[1,"ihq-tpchip"],[1,"ihq-tno-p"],[1,"ihq-td","ihq-td--muted","ihq-td--activity"],[1,"ihq-td","ihq-td--actions",3,"click"],[1,"ihq-tactions"],[1,"ihq-tact","ihq-tact--view",3,"click"],[1,"ihq-tact","ihq-tact--edit",3,"click"],[1,"ihq-btn","ihq-btn--outline",3,"click"],["type","button",1,"ihq-tier-opt",3,"click"],[1,"ihq-tier-opt__dot"],[1,"ihq-prow__icon"],[1,"ihq-prow__label"],["type","text","placeholder","URL or @handle",1,"ihq-pinput",3,"ngModelChange","ngModel"]],template:function(e,t){e&1&&(i(0,"div",0)(1,"div",1)(2,"div",2)(3,"div",3),a(4,"\u{1F31F}"),o(),i(5,"div")(6,"h1",4),a(7,"Influencer HQ"),o(),i(8,"p",5),a(9,"Creator roster & campaign management"),o()()(),i(10,"div",6)(11,"button",7),s("click",function(){return t.goToSources()}),i(12,"span"),a(13,"\u26A1"),o(),a(14," Sources "),o(),i(15,"button",8),s("click",function(){return t.openAddDrawer()}),i(16,"span"),a(17,"+"),o(),a(18," Add Creator "),o()()(),i(19,"div",9)(20,"button",10),s("click",function(){return t.setTierFilter("")}),i(21,"span",11),a(22),o(),i(23,"span",12),a(24,"All Creators"),o()(),w(25,ie,6,12,"button",13,T),o(),i(27,"div",14)(28,"div",15)(29,"span",16),a(30,"\u{1F50D}"),o(),i(31,"input",17),E("ngModelChange",function(d){return D(t.searchQuery,d)||(t.searchQuery=d),d}),s("ngModelChange",function(){return t.onSearch()})("focus",function(){return t.searchFocus=!0})("blur",function(){return t.searchFocus=!1}),o(),q(32,oe,2,0,"button",18),o(),i(33,"div",19)(34,"div",20)(35,"button",21),s("click",function(d){return t.toggleDd("tier",d)}),q(36,re,1,2,"span",22),i(37,"span"),a(38),y(39,"titlecase"),o(),i(40,"span",23),a(41,"\u25BE"),o()(),i(42,"div",24),s("click",function(d){return d.stopPropagation()}),i(43,"button",25),s("click",function(){return t.setTierFilter("")}),a(44," All Tiers "),o(),w(45,ne,4,7,"button",26,T),o()(),i(47,"div",20)(48,"button",21),s("click",function(d){return t.toggleDd("platform",d)}),i(49,"span"),a(50),o(),i(51,"span",23),a(52,"\u25BE"),o()(),i(53,"div",24),s("click",function(d){return d.stopPropagation()}),i(54,"button",25),s("click",function(){return t.setPlatformFilter("")}),a(55," All Platforms "),o(),w(56,ae,3,6,"button",26,T),o()(),i(58,"span",27),a(59),o(),i(60,"div",28)(61,"button",29),s("click",function(){return t.viewMode.set("grid")}),a(62,"\u229E"),o(),i(63,"button",30),s("click",function(){return t.viewMode.set("table")}),a(64,"\u2630"),o()()()(),q(65,le,7,0,"div",31)(66,de,8,3,"div",32)(67,ve,2,2),i(68,"div",33),s("click",function(){return t.closeDrawer()}),o(),i(69,"aside",34)(70,"div",35)(71,"div")(72,"div",36),a(73),o(),i(74,"h2",37),a(75),o()(),i(76,"button",38),s("click",function(){return t.closeDrawer()}),a(77,"\u2715"),o()(),i(78,"div",39)(79,"div",40)(80,"label",41),a(81,"Name "),i(82,"span",42),a(83,"*"),o()(),i(84,"input",43),E("ngModelChange",function(d){return D(t.form.name,d)||(t.form.name=d),d}),o()(),i(85,"div",40)(86,"label",41),a(87,"Tier "),i(88,"span",42),a(89,"*"),o()(),i(90,"div",44),w(91,qe,4,11,"button",45,T),o()(),i(93,"div",40)(94,"label",41),a(95,"Platform Handles"),o(),i(96,"div",46),w(97,we,7,5,"div",47,T),o()(),i(99,"div",40)(100,"label",41),a(101,"Notes"),o(),i(102,"textarea",48),E("ngModelChange",function(d){return D(t.form.notes,d)||(t.form.notes=d),d}),o()()(),i(103,"div",49)(104,"button",7),s("click",function(){return t.closeDrawer()}),a(105,"Cancel"),o(),i(106,"button",50),s("click",function(){return t.saveInfluencer()}),a(107),o()()()()),e&2&&(n(20),_("ihq-stat-card--active",!t.tierFilter&&!t.platformFilter),n(2),u(t.totalCount()),n(3),C(t.tiers),n(3),_("ihq-search--focus",t.searchFocus),n(3),S("ngModel",t.searchQuery),n(),g(t.searchQuery?32:-1),n(2),_("ihq-dd--open",t.openDd()==="tier"),n(2),g(t.tierFilter?36:-1),n(2),u(t.tierFilter?k(39,35,t.tierFilter):"All Tiers"),n(5),_("ihq-dd__opt--on",!t.tierFilter),n(2),C(t.tiers),n(2),_("ihq-dd--open",t.openDd()==="platform"),n(3),u(t.platformFilter?t.getPlatformLabel(t.platformFilter):"All Platforms"),n(4),_("ihq-dd__opt--on",!t.platformFilter),n(2),C(t.platformList),n(3),P("",t.totalCount()," result",t.totalCount()!==1?"s":"",""),n(2),_("ihq-view-seg__btn--on",t.viewMode()==="grid"),n(2),_("ihq-view-seg__btn--on",t.viewMode()==="table"),n(2),g(t.loading()?65:t.influencers().length===0?66:67),n(3),_("ihq-backdrop--on",t.drawerOpen()),n(),_("ihq-drawer--open",t.drawerOpen()),n(4),u(t.editMode()?"EDIT":"NEW"),n(2),u(t.editMode()?t.form.name||"Edit Creator":"Add Creator"),n(9),S("ngModel",t.form.name),n(7),C(t.tiers),n(6),C(t.platformList),n(5),S("ngModel",t.form.notes),n(4),V("disabled",t.saving()),n(),x(" ",t.saving()?"Saving\u2026":t.editMode()?"Update Creator":"Create Creator"," "))},dependencies:[H,R,Q,G,U,J,Y,K],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";.ihq-shell{padding:24px;font-family:var(--font-sans);position:relative;min-height:100%;max-width:1280px}.ihq-header{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:20px}.ihq-header__left{display:flex;align-items:center;gap:12px}.ihq-header__icon{font-size:28px;line-height:1;flex-shrink:0}.ihq-header__title{font-size:20px;font-weight:700;color:var(--color-text);margin:0 0 2px}.ihq-header__sub{font-size:12px;color:var(--color-text-muted);margin:0}.ihq-header__actions{display:flex;gap:8px;flex-shrink:0}.ihq-stats{display:flex;gap:8px;margin-bottom:16px;overflow-x:auto;padding-bottom:2px;scrollbar-width:none}.ihq-stats::-webkit-scrollbar{display:none}.ihq-stat-card{flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:2px;padding:10px 20px;border-radius:10px;border:1.5px solid var(--color-border);background:var(--color-card-bg);cursor:pointer;transition:border-color .15s,box-shadow .15s,background .15s;min-width:72px}.ihq-stat-card:hover{border-color:var(--sc-accent, var(--color-accent))}.ihq-stat-card--total:hover{border-color:var(--color-accent)}.ihq-stat-card--active.ihq-stat-card--total{background:color-mix(in srgb,var(--color-accent) 10%,var(--color-card-bg));border-color:var(--color-accent)}.ihq-stat-card--active:not(.ihq-stat-card--total){background:var(--sc-bg);border-color:var(--sc-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--sc-accent) 18%,transparent)}.ihq-stat-card__num{font-size:20px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--sc-accent, var(--color-text));line-height:1}.ihq-stat-card--total .ihq-stat-card__num{color:var(--color-text)}.ihq-stat-card--active.ihq-stat-card--total .ihq-stat-card__num{color:var(--color-accent)}.ihq-stat-card__label{font-size:10px;font-weight:600;color:var(--color-text-muted);letter-spacing:.04em;text-transform:uppercase;white-space:nowrap}.ihq-stat-card--active:not(.ihq-stat-card--total) .ihq-stat-card__label{color:var(--sc-text)}.ihq-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:16px}.ihq-toolbar__filters{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex:1}.ihq-search{flex:1;min-width:180px;display:flex;align-items:center;gap:8px;background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:8px;padding:0 10px;transition:border-color .15s}.ihq-search--focus,.ihq-search:focus-within{border-color:var(--color-accent)}.ihq-search__icon{font-size:13px;color:var(--color-text-muted);flex-shrink:0}.ihq-search__input{flex:1;border:none;background:none;padding:8px 0;font-family:var(--font-sans);font-size:13px;color:var(--color-text);outline:none;min-width:0}.ihq-search__input::placeholder{color:var(--color-text-muted)}.ihq-search__clear{background:none;border:none;color:var(--color-text-muted);cursor:pointer;font-size:11px;padding:2px 4px;border-radius:4px}.ihq-search__clear:hover{background:var(--color-hover)}.ihq-count{font-size:12px;color:var(--color-text-muted);white-space:nowrap;font-variant-numeric:tabular-nums}.ihq-dd{position:relative}.ihq-dd__btn{display:inline-flex;align-items:center;gap:6px;padding:7px 12px;border:1px solid var(--color-border);border-radius:8px;background:var(--color-card-bg);font-family:var(--font-sans);font-size:13px;cursor:pointer;color:var(--color-text);white-space:nowrap;transition:border-color .15s}.ihq-dd__btn:hover,.ihq-dd--open .ihq-dd__btn{border-color:var(--color-accent)}.ihq-dd__dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.ihq-dd__arrow{font-size:10px;color:var(--color-text-muted);transition:transform .15s}.ihq-dd--open .ihq-dd__arrow{transform:rotate(180deg)}.ihq-dd__menu{display:none;position:absolute;top:calc(100% + 4px);left:0;min-width:160px;background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:10px;box-shadow:0 8px 24px #0000001f;z-index:100;overflow:hidden}.ihq-dd--open .ihq-dd__menu{display:block}.ihq-dd__opt{display:flex;align-items:center;gap:8px;width:100%;padding:9px 14px;background:none;border:none;text-align:left;font-family:var(--font-sans);font-size:13px;cursor:pointer;color:var(--color-text);transition:background .1s}.ihq-dd__opt:hover{background:var(--color-hover)}.ihq-dd__opt--on{font-weight:600;background:var(--color-hover)}.ihq-dd__opt-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.ihq-view-seg{display:flex;border:1px solid var(--color-border);border-radius:8px;overflow:hidden}.ihq-view-seg__btn{padding:7px 10px;background:none;border:none;font-size:14px;cursor:pointer;color:var(--color-text-muted);transition:background .15s,color .15s}.ihq-view-seg__btn--on{background:var(--color-accent);color:#fff}.ihq-btn{display:inline-flex;align-items:center;gap:5px;padding:8px 14px;border-radius:8px;font-family:var(--font-sans);font-size:13px;font-weight:500;cursor:pointer;border:1px solid transparent;transition:all .15s;white-space:nowrap}.ihq-btn:disabled{opacity:.5;cursor:not-allowed}.ihq-btn--primary{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.ihq-btn--primary:hover:not(:disabled){box-shadow:0 3px 10px #e848554d}.ihq-btn--outline{background:transparent;border-color:var(--color-border);color:var(--color-text)}.ihq-btn--outline:hover{border-color:var(--color-accent)}.ihq-btn--ghost{background:transparent;color:var(--color-text-muted);border-color:var(--color-border)}.ihq-btn--ghost:hover{background:var(--color-hover);color:var(--color-text)}.ihq-state{display:flex;align-items:center;gap:12px;padding:60px 24px;color:var(--color-text-muted);font-size:14px}.ihq-dots{display:flex;gap:4px}.ihq-dots span{width:7px;height:7px;border-radius:50%;background:var(--color-accent);animation:ihq-blink 1.2s infinite both}.ihq-dots span:nth-child(2){animation-delay:.2s}.ihq-dots span:nth-child(3){animation-delay:.4s}@keyframes ihq-blink{0%,80%,to{opacity:.15}40%{opacity:1}}.ihq-empty{text-align:center;padding:64px 24px}.ihq-empty__icon{font-size:40px;margin-bottom:16px}.ihq-empty__title{font-size:18px;font-weight:700;color:var(--color-text);margin:0 0 8px}.ihq-empty__sub{font-size:13px;color:var(--color-text-muted);max-width:360px;margin:0 auto 24px}.ihq-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}.ihq-card{position:relative;background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:10px;overflow:hidden;cursor:pointer;transition:box-shadow .2s,border-color .2s,transform .15s}.ihq-card:hover{box-shadow:0 4px 20px #0000001a;border-color:color-mix(in srgb,var(--color-border) 50%,var(--color-accent));transform:translateY(-1px)}.ihq-card__accent-bar{height:3px;width:100%}.ihq-card__inner{padding:14px}.ihq-card__head{display:flex;align-items:center;gap:10px;margin-bottom:12px}.ihq-card__avatar{width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700;flex-shrink:0}.ihq-card__meta{flex:1;min-width:0}.ihq-card__name{font-size:14px;font-weight:600;color:var(--color-text);margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ihq-tier-badge{display:inline-block;font-size:10px;font-weight:600;letter-spacing:.04em;padding:2px 8px;border-radius:20px;border:1px solid transparent}.ihq-card__edit-btn{background:none;border:1px solid var(--color-border);border-radius:6px;width:28px;height:28px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:12px;flex-shrink:0;opacity:0;transition:opacity .15s,background .1s}.ihq-card:hover .ihq-card__edit-btn{opacity:1}.ihq-card__edit-btn:hover{background:var(--color-hover)}.ihq-card__platforms{display:flex;flex-direction:column;gap:4px;margin-bottom:12px;min-height:32px}.ihq-card__prow{display:flex;align-items:center;gap:6px;font-size:12px}.ihq-card__handle{color:var(--color-text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ihq-card__nop{font-size:11px;color:var(--color-text-muted);font-style:italic}.ihq-card__foot{display:flex;align-items:center;gap:6px;padding-top:10px;border-top:1px solid var(--color-border)}.ihq-card__dot{width:6px;height:6px;border-radius:50%;flex-shrink:0;opacity:.7}.ihq-card__sync{flex:1;font-size:11px;color:var(--color-text-muted)}.ihq-card__open-btn{font-size:11px;font-weight:600;color:var(--color-accent);background:none;border:none;cursor:pointer;padding:2px 6px;border-radius:4px;opacity:0;transition:opacity .15s,background .1s}.ihq-card:hover .ihq-card__open-btn{opacity:1}.ihq-card__open-btn:hover{background:color-mix(in srgb,var(--color-accent) 10%,transparent)}.ihq-card--load{display:flex;align-items:center;justify-content:center;min-height:160px;border-style:dashed;color:var(--color-text-muted);font-size:13px}.ihq-tbl-wrap{border:1px solid var(--color-border);border-radius:10px;overflow-x:auto}.ihq-tbl{width:100%;border-collapse:collapse;font-size:13px}.ihq-th{padding:10px 12px;text-align:left;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-muted);background:var(--color-card-bg);border-bottom:1px solid var(--color-border);white-space:nowrap}.ihq-tr{cursor:pointer;transition:background .1s}.ihq-tr:last-child .ihq-td{border-bottom:none}.ihq-tr:hover{background:var(--color-hover)}.ihq-td{padding:10px 12px;border-bottom:1px solid var(--color-border);color:var(--color-text);vertical-align:middle}.ihq-td--muted{color:var(--color-text-muted);font-size:12px}.ihq-tcreator{display:flex;align-items:center;gap:10px}.ihq-tavatar{width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex-shrink:0}.ihq-tname{font-weight:600;font-size:13px}.ihq-tid{font-size:11px;color:var(--color-text-muted);font-family:monospace}.ihq-tplatforms{display:flex;gap:4px;flex-wrap:wrap;align-items:center}.ihq-tpchip{font-size:11px;padding:2px 7px;border-radius:5px;background:var(--color-bg);border:1px solid var(--color-border);white-space:nowrap}.ihq-tno-p{font-size:12px;color:var(--color-text-muted)}.ihq-tactions{display:flex;gap:6px;justify-content:flex-end}.ihq-tact{padding:5px 10px;border-radius:6px;font-family:var(--font-sans);font-size:11px;font-weight:600;cursor:pointer;white-space:nowrap;transition:all .15s}.ihq-tact--view{background:var(--color-accent);border:none;color:#fff}.ihq-tact--view:hover{box-shadow:0 2px 8px #e848554d}.ihq-tact--edit{background:transparent;border:1px solid var(--color-border);color:var(--color-text)}.ihq-tact--edit:hover{border-color:var(--color-accent)}.ihq-tbl-more{padding:12px;text-align:center}.ihq-backdrop{position:fixed;inset:0;background:#0006;z-index:90;opacity:0;pointer-events:none;transition:opacity .25s}.ihq-backdrop--on{opacity:1;pointer-events:all}.ihq-drawer{position:fixed;top:0;right:0;bottom:0;width:min(460px,100vw);background:var(--color-card-bg);z-index:95;display:flex;flex-direction:column;box-shadow:-4px 0 32px #0000001f;transform:translate(100%);transition:transform .3s cubic-bezier(.25,.46,.45,.94)}.ihq-drawer--open{transform:translate(0)}.ihq-drawer__head{display:flex;align-items:flex-start;justify-content:space-between;padding:20px;border-bottom:1px solid var(--color-border);flex-shrink:0}.ihq-drawer__eyebrow{font-size:10px;font-weight:700;letter-spacing:.1em;color:var(--color-accent);margin-bottom:4px}.ihq-drawer__title{font-size:16px;font-weight:700;margin:0}.ihq-drawer__x{background:var(--color-bg);border:1px solid var(--color-border);border-radius:7px;width:30px;height:30px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:12px;color:var(--color-text-muted);flex-shrink:0;transition:background .1s}.ihq-drawer__x:hover{background:var(--color-hover)}.ihq-drawer__body{flex:1;overflow-y:auto;padding:20px;display:flex;flex-direction:column;gap:18px}.ihq-drawer__foot{padding:16px 20px;border-top:1px solid var(--color-border);display:flex;gap:8px;justify-content:flex-end;flex-shrink:0}.ihq-field{display:flex;flex-direction:column;gap:6px}.ihq-label{font-size:12px;font-weight:600;color:var(--color-text)}.ihq-req{color:var(--color-accent)}.ihq-input{padding:8px 12px;border:1px solid var(--color-border);border-radius:8px;font-family:var(--font-sans);font-size:13px;background:var(--color-bg);color:var(--color-text);width:100%;box-sizing:border-box;transition:border-color .15s}.ihq-input:focus{outline:none;border-color:var(--color-accent)}.ihq-textarea{padding:8px 12px;border:1px solid var(--color-border);border-radius:8px;font-family:var(--font-sans);font-size:13px;background:var(--color-bg);color:var(--color-text);width:100%;box-sizing:border-box;resize:vertical;transition:border-color .15s}.ihq-textarea:focus{outline:none;border-color:var(--color-accent)}.ihq-tier-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}.ihq-tier-opt{display:flex;flex-direction:column;align-items:center;gap:4px;padding:8px 4px;border-radius:8px;border:1.5px solid var(--color-border);background:transparent;cursor:pointer;font-family:var(--font-sans);font-size:11px;font-weight:600;color:var(--color-text-muted);transition:border-color .15s,background .15s,color .15s}.ihq-tier-opt__dot{width:8px;height:8px;border-radius:50%;background:var(--to-accent)}.ihq-tier-opt--on{border-color:var(--to-accent);background:var(--to-bg);color:var(--to-text)}.ihq-pstack{border:1px solid var(--color-border);border-radius:8px;overflow:hidden}.ihq-prow{display:flex;align-items:center;gap:10px;padding:0 12px;border-bottom:1px solid var(--color-border)}.ihq-prow:last-child{border-bottom:none}.ihq-prow__icon{font-size:15px;flex-shrink:0}.ihq-prow__label{font-size:11px;font-weight:600;color:var(--color-text-muted);width:72px;flex-shrink:0}.ihq-pinput{flex:1;border:none;background:transparent;padding:9px 0;font-family:var(--font-sans);font-size:13px;color:var(--color-text);outline:none;min-width:0}@media (max-width: 768px){.ihq-shell{padding:16px}.ihq-header__title{font-size:17px}.ihq-header__sub{display:none}.ihq-toolbar{flex-direction:column;align-items:stretch}.ihq-toolbar__filters{flex-wrap:nowrap;overflow-x:auto;padding-bottom:2px}.ihq-toolbar__filters::-webkit-scrollbar{display:none}.ihq-grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px}.ihq-th--activity,.ihq-td--activity{display:none}}@media (max-width: 480px){.ihq-header__actions .ihq-btn--ghost{display:none}.ihq-grid{grid-template-columns:1fr 1fr}.ihq-th--platforms,.ihq-td--platforms{display:none}}
|
|
3
|
+
`],encapsulation:3,changeDetection:0})}};export{Z as BloomsInfluencerDashboardComponent};
|
package/dist/index.d.ts
CHANGED
|
@@ -160,7 +160,15 @@ export interface EmbedManifest {
|
|
|
160
160
|
// ── SDK ─────────────────────────────────────────────────────────────────────
|
|
161
161
|
|
|
162
162
|
export interface MountOptions {
|
|
163
|
-
/**
|
|
163
|
+
/**
|
|
164
|
+
* Which component to mount, as the tag name without the `blooms-` prefix:
|
|
165
|
+
* `'login'`, `'crawl-insights'`, `'sitemap-crawl'`, `'sitemap-crawl-detail'`,
|
|
166
|
+
* `'keywords'`, `'keyword-detail'`, `'reports'`, `'gmc-analytics'`,
|
|
167
|
+
* `'social-media-calendar'`, `'smc-day-detail'`, `'influencer-dashboard'`,
|
|
168
|
+
* `'influencer-detail'`, `'blog-strategy'`.
|
|
169
|
+
*
|
|
170
|
+
* An unknown name throws, listing what the bundle has.
|
|
171
|
+
*/
|
|
164
172
|
feature: string;
|
|
165
173
|
/** Initial height in px before the frame reports its own. Iframe mode only. */
|
|
166
174
|
minHeight?: number;
|
|
@@ -223,11 +231,32 @@ export interface BloomsEmbedSdk {
|
|
|
223
231
|
* call is the same either way — the mode is resolved by `configure()`.
|
|
224
232
|
*/
|
|
225
233
|
mount(target: HTMLElement | string, options: MountOptions): MountedFrame | HTMLElement;
|
|
234
|
+
/**
|
|
235
|
+
* Fetch one or more components' code before they are needed.
|
|
236
|
+
*
|
|
237
|
+
* The bundle is code-split: a small core, then one lazy chunk per component,
|
|
238
|
+
* fetched the first time that component is used. A host that knows what is
|
|
239
|
+
* coming — a nav item under the cursor, the next step of a wizard — can warm
|
|
240
|
+
* the chunk and remove the round trip from the user's path.
|
|
241
|
+
*
|
|
242
|
+
* ```js
|
|
243
|
+
* BloomsEmbed.preload('crawl-insights', 'keywords');
|
|
244
|
+
* ```
|
|
245
|
+
*
|
|
246
|
+
* Purely an optimisation. Never required, never throws: a failed preload just
|
|
247
|
+
* means the chunk is fetched later, when it is actually mounted.
|
|
248
|
+
*/
|
|
249
|
+
preload(...features: string[]): Promise<void>;
|
|
226
250
|
}
|
|
227
251
|
|
|
228
252
|
/**
|
|
229
|
-
* The SDK. Importing this package
|
|
230
|
-
*
|
|
253
|
+
* The SDK. Importing this package installs the same object on
|
|
254
|
+
* `window.BloomsEmbed` and starts watching the page for blooms.ai tags.
|
|
255
|
+
*
|
|
256
|
+
* Elements are defined lazily — the bundle is code-split, one chunk per
|
|
257
|
+
* component, fetched when a tag is first used. Your markup is unaffected and
|
|
258
|
+
* there is nothing to await; `customElements.get(tag)` simply returns undefined
|
|
259
|
+
* until that component has been used once. Use `preload()` to warm a chunk.
|
|
231
260
|
*/
|
|
232
261
|
export const BloomsEmbed: BloomsEmbedSdk;
|
|
233
262
|
|
|
@@ -270,6 +299,183 @@ export interface BloomsLoginElement extends HTMLElement {
|
|
|
270
299
|
): void;
|
|
271
300
|
}
|
|
272
301
|
|
|
302
|
+
/**
|
|
303
|
+
* `<blooms-crawl-insights>` — technical crawl results for a project: pages
|
|
304
|
+
* crawled, broken links, page-level issues, missing metadata and duplicate
|
|
305
|
+
* titles, with a health score.
|
|
306
|
+
*
|
|
307
|
+
* Renders a sign-in prompt until a session exists, so it can be placed
|
|
308
|
+
* unconditionally.
|
|
309
|
+
*/
|
|
310
|
+
export interface BloomsCrawlInsightsElement extends HTMLElement {
|
|
311
|
+
/**
|
|
312
|
+
* Which project to show. Omit it and the element follows the session's active
|
|
313
|
+
* project, so `BloomsEmbed.setProject()` moves it.
|
|
314
|
+
*
|
|
315
|
+
* As an attribute this is `project-id`.
|
|
316
|
+
*/
|
|
317
|
+
projectId?: string;
|
|
318
|
+
|
|
319
|
+
addEventListener(
|
|
320
|
+
type: 'bloomscrawl',
|
|
321
|
+
listener: (event: CustomEvent<{ status: string; crawlId?: string }>) => void,
|
|
322
|
+
options?: boolean | AddEventListenerOptions,
|
|
323
|
+
): void;
|
|
324
|
+
addEventListener(
|
|
325
|
+
type: 'bloomserror',
|
|
326
|
+
listener: (event: CustomEvent<{ code?: string; message: string }>) => void,
|
|
327
|
+
options?: boolean | AddEventListenerOptions,
|
|
328
|
+
): void;
|
|
329
|
+
addEventListener<K extends keyof HTMLElementEventMap>(
|
|
330
|
+
type: K,
|
|
331
|
+
listener: (this: HTMLElement, event: HTMLElementEventMap[K]) => unknown,
|
|
332
|
+
options?: boolean | AddEventListenerOptions,
|
|
333
|
+
): void;
|
|
334
|
+
addEventListener(
|
|
335
|
+
type: string,
|
|
336
|
+
listener: EventListenerOrEventListenerObject,
|
|
337
|
+
options?: boolean | AddEventListenerOptions,
|
|
338
|
+
): void;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// ── The other eleven elements ────────────────────────────────────────────────
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* What a component emits instead of navigating.
|
|
345
|
+
*
|
|
346
|
+
* A custom element cannot own the host page's URL, so a component that used to
|
|
347
|
+
* call the router now describes where it would have gone and leaves the decision
|
|
348
|
+
* to you: show another element, open a window, or ignore it.
|
|
349
|
+
*/
|
|
350
|
+
export interface BloomsNavigateDetail {
|
|
351
|
+
/** The target component, without the `blooms-` prefix, e.g. `'keyword-detail'`. */
|
|
352
|
+
feature: string;
|
|
353
|
+
/** Which view within it, e.g. `'detail'`, `'list'`. */
|
|
354
|
+
view: string;
|
|
355
|
+
/** Identifiers the target needs, e.g. `{ keywordId: '…' }`. */
|
|
356
|
+
params: Record<string, unknown>;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
export interface BloomsErrorDetail {
|
|
360
|
+
code?: string;
|
|
361
|
+
message: string;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* Shared surface of every element except `<blooms-login>`: a project to show,
|
|
366
|
+
* and the two events.
|
|
367
|
+
*
|
|
368
|
+
* Note what is deliberately NOT here. Some components accept inputs that gate a
|
|
369
|
+
* control whose output is delivered to the blooms.ai portal — report generation,
|
|
370
|
+
* bulk delete. Those are wired by the portal, not by a host app, and they are
|
|
371
|
+
* left undeclared on purpose: enabling one from an embed would start a job whose
|
|
372
|
+
* result the user cannot collect.
|
|
373
|
+
*/
|
|
374
|
+
export interface BloomsProjectElement extends HTMLElement {
|
|
375
|
+
/**
|
|
376
|
+
* Which project to show. Omit it and the element follows the session's active
|
|
377
|
+
* project, so `BloomsEmbed.setProject()` moves it.
|
|
378
|
+
*
|
|
379
|
+
* As an attribute this is `project-id`.
|
|
380
|
+
*/
|
|
381
|
+
projectId?: string;
|
|
382
|
+
|
|
383
|
+
addEventListener(
|
|
384
|
+
type: 'bloomsnavigate',
|
|
385
|
+
listener: (event: CustomEvent<BloomsNavigateDetail>) => void,
|
|
386
|
+
options?: boolean | AddEventListenerOptions,
|
|
387
|
+
): void;
|
|
388
|
+
addEventListener(
|
|
389
|
+
type: 'bloomserror',
|
|
390
|
+
listener: (event: CustomEvent<BloomsErrorDetail>) => void,
|
|
391
|
+
options?: boolean | AddEventListenerOptions,
|
|
392
|
+
): void;
|
|
393
|
+
addEventListener<K extends keyof HTMLElementEventMap>(
|
|
394
|
+
type: K,
|
|
395
|
+
listener: (this: HTMLElement, event: HTMLElementEventMap[K]) => unknown,
|
|
396
|
+
options?: boolean | AddEventListenerOptions,
|
|
397
|
+
): void;
|
|
398
|
+
addEventListener(
|
|
399
|
+
type: string,
|
|
400
|
+
listener: EventListenerOrEventListenerObject,
|
|
401
|
+
options?: boolean | AddEventListenerOptions,
|
|
402
|
+
): void;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
/** Sitemap crawl runs for a project. Emits `bloomsnavigate` to open one. */
|
|
406
|
+
export interface BloomsSitemapCrawlElement extends BloomsProjectElement {}
|
|
407
|
+
|
|
408
|
+
/** One sitemap crawl run. */
|
|
409
|
+
export interface BloomsSitemapCrawlDetailElement extends BloomsProjectElement {
|
|
410
|
+
/** Which run to show. Attribute: `crawl-id`. Required — there is no sensible default. */
|
|
411
|
+
crawlId?: string;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
/** Tracked keywords for a project. Emits `bloomsnavigate` to open one. */
|
|
415
|
+
export interface BloomsKeywordsElement extends BloomsProjectElement {}
|
|
416
|
+
|
|
417
|
+
/**
|
|
418
|
+
* One keyword's detail.
|
|
419
|
+
*
|
|
420
|
+
* Its Search Console section is empty when embedded: the underlying route takes
|
|
421
|
+
* its project id as a query parameter and carries no authorization of its own,
|
|
422
|
+
* so exposing it would leak cross-project data. Being fixed server-side.
|
|
423
|
+
*/
|
|
424
|
+
export interface BloomsKeywordDetailElement extends BloomsProjectElement {
|
|
425
|
+
/** Which keyword to show. Attribute: `keyword-id`. */
|
|
426
|
+
keywordId?: string;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
/** Generated reports for a project. */
|
|
430
|
+
export interface BloomsReportsElement extends BloomsProjectElement {}
|
|
431
|
+
|
|
432
|
+
/** Google Merchant Centre overview for a project. */
|
|
433
|
+
export interface BloomsGmcAnalyticsElement extends BloomsProjectElement {}
|
|
434
|
+
|
|
435
|
+
/** A project's social media calendar. */
|
|
436
|
+
export interface BloomsSocialMediaCalendarElement extends BloomsProjectElement {
|
|
437
|
+
/**
|
|
438
|
+
* Opens that event's drawer. Attribute: `event-id`.
|
|
439
|
+
*
|
|
440
|
+
* The component reports drawer changes through `bloomsnavigate`, so you can
|
|
441
|
+
* keep this in your own URL if you want the view to be linkable.
|
|
442
|
+
*/
|
|
443
|
+
eventId?: string;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
/** One day of the social media calendar. */
|
|
447
|
+
export interface BloomsSmcDayDetailElement extends BloomsProjectElement {
|
|
448
|
+
/**
|
|
449
|
+
* Which day, as `YYYY-MM-DD`. Attribute: `date-iso`.
|
|
450
|
+
*
|
|
451
|
+
* Required: a day has no sensible default, so the element reports an error
|
|
452
|
+
* rather than guessing one.
|
|
453
|
+
*/
|
|
454
|
+
dateIso?: string;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
/** Influencers tracked for a project. */
|
|
458
|
+
export interface BloomsInfluencerDashboardElement extends BloomsProjectElement {}
|
|
459
|
+
|
|
460
|
+
/** One influencer's profile and snapshots. */
|
|
461
|
+
export interface BloomsInfluencerDetailElement extends BloomsProjectElement {
|
|
462
|
+
/** Which influencer. Attribute: `influencer-id`. */
|
|
463
|
+
influencerId?: string;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
/** A blog strategy's authoring workflow. */
|
|
467
|
+
export interface BloomsBlogStrategyElement extends BloomsProjectElement {
|
|
468
|
+
/** Which strategy. Attribute: `strategy-id`. */
|
|
469
|
+
strategyId?: string;
|
|
470
|
+
/**
|
|
471
|
+
* Which workflow step is open, e.g. `'topic-selection'`. Attribute: `step`.
|
|
472
|
+
*
|
|
473
|
+
* Omit it and the component opens the first step and announces that through
|
|
474
|
+
* `bloomsnavigate` — it never changes the address bar itself.
|
|
475
|
+
*/
|
|
476
|
+
step?: string;
|
|
477
|
+
}
|
|
478
|
+
|
|
273
479
|
declare global {
|
|
274
480
|
interface Window {
|
|
275
481
|
/** Installed by the bundle as it evaluates, i.e. by importing this package. */
|
|
@@ -280,5 +486,17 @@ declare global {
|
|
|
280
486
|
|
|
281
487
|
interface HTMLElementTagNameMap {
|
|
282
488
|
'blooms-login': BloomsLoginElement;
|
|
489
|
+
'blooms-crawl-insights': BloomsCrawlInsightsElement;
|
|
490
|
+
'blooms-sitemap-crawl': BloomsSitemapCrawlElement;
|
|
491
|
+
'blooms-sitemap-crawl-detail': BloomsSitemapCrawlDetailElement;
|
|
492
|
+
'blooms-keywords': BloomsKeywordsElement;
|
|
493
|
+
'blooms-keyword-detail': BloomsKeywordDetailElement;
|
|
494
|
+
'blooms-reports': BloomsReportsElement;
|
|
495
|
+
'blooms-gmc-analytics': BloomsGmcAnalyticsElement;
|
|
496
|
+
'blooms-social-media-calendar': BloomsSocialMediaCalendarElement;
|
|
497
|
+
'blooms-smc-day-detail': BloomsSmcDayDetailElement;
|
|
498
|
+
'blooms-influencer-dashboard': BloomsInfluencerDashboardElement;
|
|
499
|
+
'blooms-influencer-detail': BloomsInfluencerDetailElement;
|
|
500
|
+
'blooms-blog-strategy': BloomsBlogStrategyElement;
|
|
283
501
|
}
|
|
284
502
|
}
|
package/dist/index.js
CHANGED
|
@@ -2,18 +2,28 @@
|
|
|
2
2
|
* `@bloomscorp/blooms-ai-embed` — the blooms.ai embeddable web components.
|
|
3
3
|
*
|
|
4
4
|
* Importing this module has two effects:
|
|
5
|
-
* 1. it
|
|
6
|
-
* 2. it
|
|
5
|
+
* 1. it installs and re-exports the `BloomsEmbed` SDK object, and
|
|
6
|
+
* 2. it starts watching the page for blooms.ai tags.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* It does NOT define every custom element up front. The bundle is code-split —
|
|
9
|
+
* one lazy chunk per component — so a tag is defined the first time an instance
|
|
10
|
+
* of it appears, and the browser upgrades that element when the definition
|
|
11
|
+
* lands. Nothing in your markup changes, and you never await anything; the only
|
|
12
|
+
* observable difference is that `customElements.get('blooms-login')` is
|
|
13
|
+
* undefined until a `<blooms-login>` has been used. `BloomsEmbed.preload()`
|
|
14
|
+
* warms a chunk ahead of time if you want to.
|
|
15
|
+
*
|
|
16
|
+
* Both effects come from the prebuilt bundle, which self-registers when it
|
|
17
|
+
* evaluates. This entry deliberately adds no behaviour of its own — the bundle
|
|
18
|
+
* is the single implementation, shared with the CDN-hosted bundle at
|
|
11
19
|
* https://embed-ai.bloomscorp.com/v1/blooms-embed.js.
|
|
12
20
|
*/
|
|
13
21
|
|
|
14
22
|
// Must stay first: it fails loudly outside a browser before the bundle runs.
|
|
15
23
|
import './browser-guard.js';
|
|
16
|
-
// Side-effect import:
|
|
24
|
+
// Side-effect import: sets window.BloomsEmbed and starts the element loader,
|
|
25
|
+
// which defines each tag on first use. Your bundler follows the dynamic imports
|
|
26
|
+
// inside it and emits one chunk per component.
|
|
17
27
|
import './blooms-embed.js';
|
|
18
28
|
|
|
19
29
|
const sdk = /** @type {any} */ (window).BloomsEmbed;
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bloomscorp/blooms-ai-embed",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "blooms.ai embeddable web components
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "blooms.ai embeddable web components — prebuilt bundle and typed JS SDK for host dashboards, including Electron.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"private": false,
|
|
7
7
|
"type": "module",
|
|
@@ -16,19 +16,24 @@
|
|
|
16
16
|
},
|
|
17
17
|
"./blooms-embed.css": "./dist/blooms-embed.css",
|
|
18
18
|
"./blooms-embed.js": "./dist/blooms-embed.js",
|
|
19
|
-
"./
|
|
19
|
+
"./chunk-*.js": "./dist/chunk-*.js",
|
|
20
|
+
"./package.json": "./package.json",
|
|
21
|
+
"./media/*": "./dist/media/*"
|
|
20
22
|
},
|
|
21
23
|
"files": [
|
|
22
24
|
"dist/index.js",
|
|
23
25
|
"dist/index.d.ts",
|
|
24
26
|
"dist/browser-guard.js",
|
|
25
27
|
"dist/blooms-embed.js",
|
|
28
|
+
"dist/chunk-*.js",
|
|
26
29
|
"dist/blooms-embed.css",
|
|
30
|
+
"dist/media/",
|
|
27
31
|
"README.md",
|
|
28
32
|
"CHANGELOG.md"
|
|
29
33
|
],
|
|
30
34
|
"scripts": {
|
|
31
35
|
"build": "node scripts/build.mjs",
|
|
36
|
+
"typecheck": "../client/node_modules/.bin/tsc --noEmit --strict --skipLibCheck --moduleResolution bundler --module esnext --target es2022 --lib es2022,dom typecheck/usage.ts",
|
|
32
37
|
"prepack": "node scripts/build.mjs --skip-client-build"
|
|
33
38
|
},
|
|
34
39
|
"keywords": [
|