@veltdev/sdk-dev 6.0.0-beta.19 → 6.0.0-beta.20

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.
Files changed (55) hide show
  1. package/{chunk-ILT6JKEI.js → chunk-2JYR3ESH.js} +1 -1
  2. package/{chunk-7QBW4QOG.js → chunk-45CK3G4S.js} +1 -1
  3. package/{chunk-IRE36BLZ.js → chunk-63NMA3AQ.js} +1 -1
  4. package/{chunk-QXWBXIGN.js → chunk-6ILQARGU.js} +1 -1
  5. package/{chunk-Z7QNIQG7.js → chunk-6LUTL3DR.js} +1 -1
  6. package/{chunk-3ZCFXKBX.js → chunk-6RA26UDR.js} +1 -1
  7. package/{chunk-R2QBF7NO.js → chunk-6WCUWRDH.js} +1 -1
  8. package/{chunk-TCNK3O2G.js → chunk-A6QXRF3G.js} +1 -1
  9. package/chunk-ATB2ZI7G.js +1 -0
  10. package/{chunk-PHCH7FJZ.js → chunk-BCSVTVMJ.js} +25 -25
  11. package/{chunk-LFM66M53.js → chunk-BSYABMZE.js} +1 -1
  12. package/{chunk-4RIQI4XY.js → chunk-CECXGS4N.js} +1 -1
  13. package/{chunk-AAEBMTOH.js → chunk-DAHES7KJ.js} +1 -1
  14. package/{chunk-6FAKWJVD.js → chunk-DEGPUOWQ.js} +1 -1
  15. package/{chunk-SCMG6VBT.js → chunk-FLGROJQW.js} +1 -1
  16. package/{chunk-WR5AGHUW.js → chunk-G4N6XTDS.js} +1 -1
  17. package/{chunk-2EHATMUO.js → chunk-GW63A52V.js} +1 -1
  18. package/{chunk-UYFAMOUS.js → chunk-HEIW3Q3Z.js} +1 -1
  19. package/{chunk-EKFMFNHA.js → chunk-HRHOJT33.js} +1 -1
  20. package/{chunk-I3YJSJAT.js → chunk-HZBOX5Z7.js} +1 -1
  21. package/{chunk-P43PXYZ4.js → chunk-IE6GR57U.js} +1 -1
  22. package/{chunk-LVNP3DJI.js → chunk-KAYQA4GH.js} +1 -1
  23. package/{chunk-G4FKPDOL.js → chunk-KBKI4VKD.js} +1 -1
  24. package/{chunk-OT7KOIU6.js → chunk-NBO7Z72Y.js} +1 -1
  25. package/{chunk-4N7DHGDT.js → chunk-NVZIS23N.js} +1 -1
  26. package/{chunk-LVZE52DT.js → chunk-S4SWAWDX.js} +1 -1
  27. package/{chunk-P7J62VG5.js → chunk-SLIE6W2D.js} +1 -1
  28. package/{chunk-2IWEZ2NT.js → chunk-TJFCTUCM.js} +1 -1
  29. package/{chunk-QPKRAWPH.js → chunk-TNSFEAOB.js} +1 -1
  30. package/{chunk-SFBZ672W.js → chunk-UQ2QOHQZ.js} +1 -1
  31. package/{chunk-2PBVEFIH.js → chunk-WXTTF7HW.js} +1 -1
  32. package/{chunk-MDOJKYD7.js → chunk-Z54SH2OU.js} +1 -1
  33. package/{chunk-HVQVHG6X.js → chunk-ZZK5UGYN.js} +1 -1
  34. package/package.json +1 -1
  35. package/velt-activity-log.js +1 -1
  36. package/velt-area.js +1 -1
  37. package/velt-arrow.js +1 -1
  38. package/velt-comment.js +1 -1
  39. package/velt-crdt.js +1 -1
  40. package/velt-cursor.js +1 -1
  41. package/velt-huddle.js +1 -1
  42. package/velt-live-state-sync.js +1 -1
  43. package/velt-notification.js +1 -1
  44. package/velt-presence.js +1 -1
  45. package/velt-reaction.js +1 -1
  46. package/velt-recorder.js +1 -1
  47. package/velt-rewriter.js +1 -1
  48. package/velt-selection.js +1 -1
  49. package/velt-tag.js +1 -1
  50. package/velt-user-invite.js +1 -1
  51. package/velt-user-request.js +1 -1
  52. package/velt-video-player.js +1 -1
  53. package/velt-views.js +1 -1
  54. package/velt.js +128 -20
  55. package/chunk-PKPDVLZQ.js +0 -1
package/velt-views.js CHANGED
@@ -1,3 +1,3 @@
1
- import{a as Re,c as qe,d as We}from"./chunk-SCMG6VBT.js";import{a as mt}from"./chunk-3ZCFXKBX.js";import{t as at}from"./chunk-P7J62VG5.js";import"./chunk-2EHATMUO.js";import"./chunk-MDOJKYD7.js";import{a as dt}from"./chunk-QXWBXIGN.js";import"./chunk-Z7QNIQG7.js";import{a as rt}from"./chunk-SFBZ672W.js";import"./chunk-WR5AGHUW.js";import"./chunk-UYFAMOUS.js";import{b as ot,d as st}from"./chunk-LVNP3DJI.js";import{a as lt}from"./chunk-G4FKPDOL.js";import{a as ct}from"./chunk-7QBW4QOG.js";import{a as Pe}from"./chunk-OT7KOIU6.js";import{A as ze,G as $e,H as Ne,I as Le,ca as it,ea as nt}from"./chunk-4N7DHGDT.js";import{$ as xe,$h as de,Dd as Fe,De as O,E as A,Fa as h,Fc as ke,Ga as re,Gc as le,Gi as tt,Ib as se,J as ie,Kb as ae,L as J,Lh as Ye,M as Ie,Nb as E,Ob as H,Pa as I,Pb as R,Pc as Te,Pf as Ke,Rb as Ae,S as Ce,Sd as Me,T as S,Ta as Oe,Td as je,Ua as Z,Va as Be,W as De,Y as pe,Yh as Qe,_a as z,a as m,aa as _e,ac as Ue,b as y,bi as D,ca as T,ci as Ze,g as q,ha as P,hh as He,ia as F,ja as Y,jh as we,ji as me,ka as Q,kc as U,ki as Xe,l as $,lb as x,lc as k,li as fe,mb as v,me as Ge,nb as w,ob as M,pc as ce,qa as ne,qi as N,r as V,ri as et,sb as W,tb as G,th as ye,ua as Ee,v as f,vb as K,w as X,wa as oe,wh as Je,wi as ue,xb as j,zb as _,zf as he}from"./chunk-PHCH7FJZ.js";var L=(()=>{let c=class c{constructor(e,t,n,i,o,a,d,s,u,g){this.afAuth=e,this.authService=t,this.configService=n,this.databaseService=i,this.docService=o,this.commonDbService=a,this.iamService=d,this.loggingService=s,this.userPermissionService=u,this.serviceBook=g,this.documentPaths=null,this.views$=new $({}),this.commentViews$=new $({}),this.documentViews$=new $({}),this.locationViews$=new $({}),this.commentViewsByOrganizationIdAndDocumentId$=new $({}),this.documentViewsByOrganizationIdAndDocumentId$=new $({}),this.locationViewsByOrganizationIdAndLocationId$=new $({}),this.documentViewsEnabled$=new $(!1),this.documentViewsSetByDocumentId={},this.notificationService=null,this.loggingService.log("%c[WB] Creating CLASS: ViewsService","color: blue;");try{this.serviceBook.observe(Ye).subscribe(p=>{this.commentService=p??void 0}),this.serviceBook.observe(Je).subscribe(p=>{this.notificationService=p??null}),this.databaseService.getDb().pipe(A(p=>!!p),ie(1)).subscribe(p=>{p&&(this.subscribeViewsData().subscribe(),this.getNotificationFeatureViews$().subscribe(C=>{this.notificationService?.setNotificationViews(C)}),this.authService.getUser$().pipe(A(C=>!!C),S(C=>this.documentViewsEnabled$.pipe(A(b=>b),f(()=>C))),S(C=>this.docService.getDocumentPaths$().pipe(Ce(null),Ie(),f(([b,B])=>(b?.documentId!==B?.documentId&&this.views$.next({}),B)),f(b=>(this.documentPaths=b,this.setDocumentAsRead({documentId:this.documentPaths?.documentId??"",clientDocumentId:this.documentPaths?.clientDocumentId??""}),{_user:C,_documentPaths:b})),S(b=>this.docService.getDocumentIds$().pipe(S(B=>(B?.length&&(B.find(te=>te.documentId===this.documentPaths?.documentId)||B.push({documentId:this.documentPaths?.documentId??"",clientDocumentId:this.documentPaths?.clientDocumentId??""}),B.forEach(te=>{this.setDocumentAsRead({documentId:te.documentId,clientDocumentId:te.clientDocumentId})})),V(b))))))),S(C=>this.docService.getDocumentMetadata$().pipe(A(b=>!!b),f(b=>y(m({},C),{_documentMetadata:b}))))).subscribe(),this.authService.getUser$().pipe(A(C=>!!C),S(C=>this.documentViewsEnabled$.pipe(A(b=>b),f(()=>C))),S(C=>this.docService.getLocation$().pipe(A(b=>!!b))),S(C=>this.docService.getDocumentIds$().pipe(S(b=>(b.find(B=>B.documentId===this.documentPaths?.documentId)||b.push({documentId:this.documentPaths?.documentId??"",clientDocumentId:this.documentPaths?.clientDocumentId??""}),b.forEach(B=>{this.setLocationAsRead({documentId:B.documentId,clientDocumentId:B.clientDocumentId})}),V(C)))))).subscribe())},p=>{this.loggingService.catch("Error in ViewsService getDb subscription: ",p)})}catch(p){this.loggingService.catch("Error in ViewsService constructor: ",p)}}clearCache(){this.loggingService.log("%c[WB] Calling FUNCTION: clearCache in ViewsService","color: green;");try{this.documentPaths=null,this.documentViews$.next({}),this.views$.next({}),this.commentViews$.next({}),this.locationViews$.next({}),this.commentViewsByOrganizationIdAndDocumentId$.next({}),this.documentViewsByOrganizationIdAndDocumentId$.next({}),this.locationViewsByOrganizationIdAndLocationId$.next({})}catch(e){this.loggingService.catch("Error in ViewsService clearCache: ",e)}}subscribeViewsData(e,t){this.loggingService.log("%c[WB] Calling FUNCTION: subscribeViewsData","color: green;");let n,i;try{if(e&&(i=he(e)),t&&typeof t=="object"){let o=Ke(t);n=he(JSON.stringify(o))}}catch(o){this.loggingService.catch("Error in ViewsService subscribeViewsData: ",o)}return this.authService.getAuthState$().pipe(A(o=>!!o),S(o=>this.isFeatureAllowed({firebaseUser:o})),S(o=>o.featureAllowed?this.iamService.isUserAllowed$().pipe(f(a=>(o.featureAllowed=a,o))):V(o)),S(o=>o.featureAllowed?V(o).pipe(S(a=>this.docService.getDocumentPaths$().pipe(f(d=>(this.documentPaths=d,a.documentPaths=d,a)))),S(a=>i?this.getDataFromDocumentIds([i]):this.docService.getDocumentIds$().pipe(S(d=>{let s=d?.length>0?d.map(u=>u.documentId):[this.documentPaths?.documentId??""];return this.getDataFromDocumentIds(s)})))):V([])))}isFeatureAllowed(e){return this.configService.getConfig$().pipe(A(t=>!!t),f(t=>y(m({},e),{config:t})),S(t=>this.authService.getUser$().pipe(f(n=>y(m({},t),{user:n})))),S(t=>t.user?V(y(m({},t),{featureAllowed:!0})):V(y(m({},t),{featureAllowed:!1}))),J((t,n)=>t?.featureAllowed===n?.featureAllowed))}getDataFromDocumentIds(e,t){return this.getDataFromDocuments({documentIds:e,filters:t})}getCommentViewsById(e){try{return this.commentViews$.value?.[e]?this.commentViews$.value?.[e]:void 0}catch(t){this.loggingService.catch("Error in ViewsService getCommentViewsById: ",t);return}}getDocumentViewsById(e){try{return this.documentViews$.value?.[e]}catch(t){this.loggingService.catch("Error in ViewsService getDocumentViewsById: ",t);return}}getLocationViewsById(e){try{return this.locationViews$.value?.[e]}catch(t){this.loggingService.catch("Error in ViewsService getLocationViewsById: ",t);return}}getDataFromDocuments(e){if(this.configService?.getApiKey()){let{documentIds:t,filters:n}=e;return t?.some(i=>!i)||!this.documentPaths?V([]):this.documentViewsEnabled$.pipe(S(i=>i?X([this.getCommentViewsDataFromDocuments(),this.getDocumentViewsDataFromDocuments(t),this.getLocationViewsDataFromDocuments(t)]):X([this.getCommentViewsDataFromDocuments()])))}else return V(null)}getCommentViews(e){try{let t={};Object.entries(e??{}).forEach(([n,i])=>{let o=i.metadata?.documentId,a=i.views;!o||!a||(t[o]||(t[o]={}),t[o][i.annotationId]=a)}),Object.entries(t??{}).forEach(([n,i])=>{this.setCommentViewsByOrganizationIdAndDocumentId({organizationId:this.documentPaths?.organizationId,documentId:n,commentViews:i})})}catch(t){this.loggingService.catch("Error in ViewsService getCommentViews: ",t)}}getCommentViewsDataFromDocuments(){try{return this.commentService?this.commentService?.getAllCommentAnnotations({detectGhostComments:!0,addFilterCommentsOnDomCheck:!0,fromCommentSidebar:!0,skipPositionCalculation:!0,analytics:{enabled:!0,properties:{source:"internal",sourceId:"commentsContainer"}}}).pipe(A(e=>!!e),De(e=>{this.getCommentViews(e)})):V([])}catch(e){return this.loggingService.catch("Error in ViewsService getCommentViewsDataFromDocuments: ",e),V([])}}getDocumentViewsDataFromDocuments(e){let t=this.docService.getDocumentPaths()?.veltFolderId,n=V([]),i={useCollectionGroup:!0,isCollection:!0,useQuery:!0};this.commonDbService.shouldUseFirestore()||(i.documentId=e?.length?e[0]:void 0,i.organizationId=this.documentPaths?.organizationId);let o=[];for(let a=0;a<(e?.length??0);a+=O.LISTENER_BATCH_SIZE)o.push(e?.slice(a,a+O.LISTENER_BATCH_SIZE)??[]);return n=X(o.map(a=>this.commonDbService.dbListener({feature:"allDocumentViews",properties:y(m({},i),{firestoreQuery:[fe(N("metadata.apiKey","==",this.configService?.getApiKey()),N("metadata.documentId","in",a),N("metadata.organizationId","==",this.documentPaths?.organizationId),...t?[N("metadata.veltFolderId","==",t)]:[])]})}).pipe(pe()))).pipe(f(a=>we(a))),n.pipe(f(a=>({data:a?.data,operation:a?.operation})),f(({data:a,operation:d})=>{let s={};return e?(Object.entries(a??{}).forEach(([u,g])=>{let p=g.metadata?.documentId;p&&(s[p]||(s[p]={}),s[p][u]=g)}),{data:a,documentMap:s,operation:d}):{data:a,documentMap:s,operation:d}}),f(({data:a,documentMap:d,operation:s})=>{if(s?.type==="removed"){if(s?.ids?.length){let u=this.documentViews$.value;s?.ids?.forEach(g=>{delete u?.[g]}),this.documentViews$.next(u)}}else Object.entries(d??{}).forEach(([u,g])=>{this.setDocumentViewsByOrganizationIdAndDocumentId({organizationId:this.documentPaths?.organizationId,documentId:u,documentViews:g})})}))}getLocationViewsDataFromDocuments(e){let t=this.docService.getDocumentPaths()?.veltFolderId,n=V([]),i={useCollectionGroup:!0,isCollection:!0,useQuery:!0};this.commonDbService.shouldUseFirestore()||(i.documentId=e?.length?e[0]:void 0,i.organizationId=this.documentPaths?.organizationId);let o=[];for(let a=0;a<(e?.length??0);a+=O.LISTENER_BATCH_SIZE)o.push(e?.slice(a,a+O.LISTENER_BATCH_SIZE)??[]);return n=X(o.map(a=>this.commonDbService.dbListener({feature:"allLocationViews",properties:y(m({},i),{firestoreQuery:[fe(N("metadata.apiKey","==",this.configService?.getApiKey()),N("metadata.documentId","in",a),N("metadata.organizationId","==",this.documentPaths?.organizationId),...t?[N("metadata.veltFolderId","==",t)]:[])]})}).pipe(pe()))).pipe(f(a=>we(a))),n.pipe(f(a=>({data:a?.data,operation:a?.operation})),f(({data:a,operation:d})=>{let s={};return e?(Object.entries(a??{}).forEach(([u,g])=>{let p=g.metadata?.documentId;p&&(s[p]||(s[p]={}),s[p][u]=g)}),{data:a,documentMap:s,operation:d}):{data:a,documentMap:s,operation:d}}),f(({data:a,documentMap:d,operation:s})=>{if(s?.type==="removed"){if(s?.ids?.length){let u=this.locationViews$.value;s?.ids?.forEach(g=>{delete u?.[g]}),this.locationViews$.next(u)}}else Object.entries(d??{}).forEach(([u,g])=>{this.setLocationViewsByOrganizationIdAndDocumentId({organizationId:this.documentPaths?.organizationId,documentId:u,locationViews:g})})}))}setViewsData(e){try{this.views$.next(m(m({},this.views$.getValue()),e||{}))}catch(t){this.loggingService.catch("Error in ViewsService setViewsData:",t)}}setCommentViewsByOrganizationIdAndDocumentId({organizationId:e,documentId:t,commentViews:n,queryHash:i}){try{if(n||(n={}),t){e||(e=O.NO_ORGANIZATION_ID),i||(i=O.DEFAULT_QUERY_HASH);let o=m(m({},this.commentViews$.value),n);this.commentViews$.next(o),this.commentViewsByOrganizationIdAndDocumentId$.next(y(m({},this.commentViewsByOrganizationIdAndDocumentId$.value),{[e]:y(m({},this.commentViewsByOrganizationIdAndDocumentId$.value[e]),{[t]:y(m({},this.commentViewsByOrganizationIdAndDocumentId$.value[e]?.[t]),{[i]:n})})}))}}catch(o){this.loggingService.catch("Error in CommentService setCommentAnnotationsByOrganizationIdAndDocumentId:",o)}}setDocumentViewsByOrganizationIdAndDocumentId({organizationId:e,documentId:t,documentViews:n,queryHash:i}){try{if(n||(n={}),t){e||(e=O.NO_ORGANIZATION_ID),i||(i=O.DEFAULT_QUERY_HASH);let o=m(m({},this.documentViews$.value),n);this.documentViews$.next(o),this.documentViewsByOrganizationIdAndDocumentId$.next(y(m({},this.documentViewsByOrganizationIdAndDocumentId$.value),{[e]:y(m({},this.documentViewsByOrganizationIdAndDocumentId$.value[e]),{[t]:y(m({},this.documentViewsByOrganizationIdAndDocumentId$.value[e]?.[t]),{[i]:n})})}))}}catch(o){this.loggingService.catch("Error in CommentService setCommentAnnotationsByOrganizationIdAndDocumentId:",o)}}setLocationViewsByOrganizationIdAndDocumentId({organizationId:e,documentId:t,locationViews:n,queryHash:i}){try{if(n||(n={}),t){e||(e=O.NO_ORGANIZATION_ID),i||(i=O.DEFAULT_QUERY_HASH);let o=m(m({},this.locationViews$.value),n);this.locationViews$.next(o),this.locationViewsByOrganizationIdAndLocationId$.next(y(m({},this.locationViewsByOrganizationIdAndLocationId$.value),{[e]:y(m({},this.locationViewsByOrganizationIdAndLocationId$.value[e]),{[t]:y(m({},this.locationViewsByOrganizationIdAndLocationId$.value[e]?.[t]),{[i]:n})})}))}}catch(o){this.loggingService.catch("Error in CommentService setCommentAnnotationsByOrganizationIdAndDocumentId:",o)}}getCommentFeatureViews$(){return this.commentViews$.pipe(J((e,t)=>JSON.stringify(e||{})===JSON.stringify(t||{})))}setCommentAnnotationAsRead(e){return q(this,null,function*(){try{if(this.authService.getUser()&&e?.annotationId){if(e.annotationId.startsWith("TEMP_COMPOSER_"))return;this.updateCommentAnnotationViews(e);let n=e?.metadata?.organizationId??this.documentPaths?.organizationId??"",i=e?.metadata?.documentId??this.documentPaths?.documentId??"";if(e?.isDraft)return;yield this.commonDbService.setData({feature:"comment",properties:{id:e.annotationId,documentId:i,organizationId:n,metadata:{apiKey:this.configService.getApiKey(),organizationId:n,veltFolderId:e?.metadata?.veltFolderId,documentId:i}},data:JSON.parse(JSON.stringify(e))})}}catch(t){this.loggingService.catch("Error in ViewsService setCommentAnnotationAsRead:",t)}})}setCommentAnnotationAsUnread(e){return q(this,null,function*(){try{if(this.authService.getUser()&&e?.annotationId){if(e.annotationId.startsWith("TEMP_COMPOSER_"))return;this.removeCommentAnnotationViews(e);let n=e?.metadata?.organizationId??this.documentPaths?.organizationId??"",i=e?.metadata?.documentId??this.documentPaths?.documentId??"";if(e?.isDraft)return;yield this.commonDbService.setData({feature:"comment",properties:{id:e.annotationId,documentId:i,organizationId:n,metadata:{apiKey:this.configService.getApiKey(),organizationId:n,veltFolderId:e?.metadata?.veltFolderId,documentId:i}},data:JSON.parse(JSON.stringify(e))})}}catch(t){this.loggingService.catch("Error in ViewsService setCommentAnnotationAsRead:",t)}})}updateCommentAnnotationViews(e){try{let t=this.authService.getUser(),n={views:{},comments:{}};if(t){let i={},o=e?.views?.comments||{},a=new Date().getTime()+this.commonDbService.getOffset();e.comments?.forEach(s=>{o[s.commentId]||(o[s.commentId]={views:{}}),o[s.commentId].views||(o[s.commentId].views={}),o[s.commentId].views[t.userSnippylyId]||(o[s.commentId].views[t.userSnippylyId]={timestamp:a})});let d=new Set(e.comments?.map(s=>s.commentId+""));if(Object.keys(o??{}).forEach(s=>{d.has(s)||delete o[s]}),e.comments?.length){let s=o[e.comments[0].commentId]?.views||{},u=Object.keys(s??{}).filter(g=>e.comments?.every(p=>o[p.commentId]?.views?.[g]));u.forEach(g=>{i[g]={timestamp:s[g].timestamp}}),e.viewedByUserIds=u}n.views=i,n.comments=o,e.views=n}return n}catch(t){return this.loggingService.catch("Error in ViewsService updateCommentAnnotationViews:",t),{views:{},comments:{}}}}removeCommentAnnotationViews(e){try{let t=this.authService.getUser(),n={views:{},comments:{}};if(t){let i={},o=e?.views?.comments||{};e.comments?.forEach(d=>{o[d.commentId]?.views?.[t.userSnippylyId]&&delete o[d.commentId].views[t.userSnippylyId]});let a=new Set(e.comments?.map(d=>d.commentId+""));if(Object.keys(o??{}).forEach(d=>{a.has(d)||delete o[d]}),e.comments?.length){let d=o[e.comments[0].commentId]?.views||{},s=Object.keys(d??{}).filter(u=>e.comments?.every(g=>o[g.commentId]?.views?.[u]));s.forEach(u=>{i[u]={timestamp:d[u].timestamp}}),e.viewedByUserIds=s}else e.viewedByUserIds=[];n.views=i,n.comments=o,e.views=n}return n}catch(t){return this.loggingService.catch("Error in ViewsService removeCommentAnnotationViews:",t),{views:{},comments:{}}}}getNotificationFeatureViews$(){return this.views$.pipe(J((e,t)=>JSON.stringify(e?.notification||{})===JSON.stringify(t?.notification||{})))}setNotificationsAsRead(e){try{let t=this.authService.getUser();if(t){let n=new Date().getTime()+this.commonDbService.getOffset();e.forEach(i=>{this.commonDbService.updateData({feature:"notificationViewsTimestamp",properties:{id:i,user:t.userSnippylyId,documentId:this.documentPaths?.documentId??"",organizationId:this.documentPaths?.organizationId??""},data:{timestamp:n}})})}}catch(t){this.loggingService.catch("Error in ViewsService setNotificationAsRead:",t)}}getDocumentViews$(){return this.views$.pipe(J((e,t)=>JSON.stringify(e?.documentViews||{})===JSON.stringify(t?.documentViews||{})))}getUniqueViewsByUser(e){try{return this.enableDocumentViews(),this.docService.getDocumentPaths$().pipe(S(t=>(this.documentPaths=t,e?this.locationViews$.pipe(f(n=>{let i=Object.keys(n||{}).find(o=>n?.[o]?.location?.id===e);return i?n?.[i]?.users||{}:{}})):this.documentViews$.pipe(f(n=>{let i=this.documentPaths?.documentId;return i?n?.[i]?.users||{}:{}})))),J(He))}catch(t){return this.loggingService.catch("Error in ViewsService getUniqueViewsByUser:",t),V({})}}getUniqueViewsByDate(e){try{return this.enableDocumentViews(),this.docService.getDocumentPaths$().pipe(S(t=>(this.documentPaths=t,e?this.locationViews$.pipe(f(n=>{let i=Object.keys(n||{}).find(o=>n?.[o]?.location?.id===e);return i?n?.[i]?.day||{}:{}})):this.documentViews$.pipe(f(n=>{let i=this.documentPaths?.documentId;return i?n?.[i]?.day||{}:{}})))))}catch(t){return this.loggingService.catch("Error in ViewsService getUniqueViewsByDate:",t),V({})}}enableDocumentViews(){try{if(this.documentViewsEnabled$.value===!0)return;this.documentViewsEnabled$.next(!0)}catch(e){this.loggingService.catch("Error in ViewsService enableDocumentViews:",e)}}disableDocumentViews(){try{if(this.documentViewsEnabled$.value===!1)return;this.documentViewsEnabled$.next(!1)}catch(e){this.loggingService.catch("Error in ViewsService disableDocumentViews:",e)}}setDocumentAsRead(n){return q(this,arguments,function*({documentId:e,clientDocumentId:t}){try{let i=this.authService.getUser();if(i&&e&&this.userPermissionService?.hasEditAccess({documentId:e??"",folderId:this.documentPaths?.allDocuments&&this.documentPaths?.veltFolderId?this.documentPaths?.veltFolderId:void 0})){if(this.documentViewsSetByDocumentId[e])return;this.documentViewsSetByDocumentId[e]=!0;let o=new Date().getTime()+this.commonDbService.getOffset(),a=new Date().toISOString().split("T")[0],d=this.getDocumentViewsById(e);if(d){let s=new Date().toISOString().split("T")[0];d?.users[i.userSnippylyId]||(d.users[i.userSnippylyId]={}),d.users[i.userSnippylyId][s]={timestamp:this.timestamp},d?.day[s]||(d.day[s]={}),d.day[s][i.userSnippylyId]={timestamp:this.timestamp},d.metadata=this.docService.getBaseMetadata("documentViews",{clientDocumentId:t}),this.commonDbService.updateData({feature:"documentViews",properties:{id:e,date:s,user:i.userSnippylyId,documentId:e,organizationId:this.documentPaths?.organizationId??""},data:d})}else this.commonDbService.updateData({feature:"documentDayViews",properties:{id:e,date:a,user:i.userSnippylyId,documentId:e,organizationId:this.documentPaths?.organizationId??"",skipFirestore:!0},data:{timestamp:o}}),this.commonDbService.updateData({feature:"documentUsersViews",properties:{id:e,user:i.userSnippylyId,date:a,documentId:e,organizationId:this.documentPaths?.organizationId??"",skipFirestore:!0},data:{timestamp:o}}),this.commonDbService.updateData({feature:"documentMetadataViews",properties:{id:e,documentId:e,organizationId:this.documentPaths?.organizationId??"",skipFirestore:!0},data:this.docService.getBaseMetadata("documentViews",{clientDocumentId:t})}),this.docService.getDocumentMetadata$(e).pipe(A(s=>s!==null),ie(1)).subscribe(()=>{let s={day:{[a]:{[i.userSnippylyId]:{timestamp:o}}},users:{[i.userSnippylyId]:{[a]:{timestamp:o}}},metadata:this.docService.getBaseMetadata("documentViews",{clientDocumentId:t})};this.commonDbService.updateData({feature:"documentViews",properties:{id:e,date:a,user:i.userSnippylyId,documentId:e,organizationId:this.documentPaths?.organizationId??"",skipRtdb:!0},data:s})});this.checkAndTriggerNotification(i)}}catch(i){this.loggingService.catch("Error in ViewsService setDocumentAsRead:",i)}})}checkAndTriggerNotification(e){try{this.getUniqueViewsByUser().pipe(ie(1)).subscribe(t=>{if(Object.keys(t??{}).length===2){let n=this.docService.getDocumentMetadata();if(n?.creator?.email&&n?.creator?.email!==e.email){let i=[n.creator.email];this.updateNotificationsDatabase(Ge.FIRST_VIEWED,{documentViews:{emails:i}})}}})}catch(t){this.loggingService.catch("Error in checkAndTriggerNotification:",t)}}setLocationAsRead(n){return q(this,arguments,function*({documentId:e,clientDocumentId:t}){try{let i=this.authService.getUser(),o=this.docService.getLocation(),a=o?.locationId,d=o?.location;if(i&&a&&d){let s=new Date().getTime()+this.commonDbService.getOffset(),u=new Date().toISOString().split("T")[0],g=this.getLocationViewsById(a);if(g){let p=new Date().toISOString().split("T")[0];g?.users[i.userSnippylyId]||(g.users[i.userSnippylyId]={}),g.users[i.userSnippylyId][p]={timestamp:this.timestamp},g?.day[p]||(g.day[p]={}),g.day[p][i.userSnippylyId]={timestamp:this.timestamp},g.metadata=this.docService.getBaseMetadata("locationViews",{clientDocumentId:t}),this.commonDbService.updateData({feature:"location",data:g,properties:{id:a,documentId:e,organizationId:this.documentPaths?.organizationId??""}})}else{this.commonDbService.updateData({feature:"locationViews",data:d,properties:{id:a,documentId:e,organizationId:this.documentPaths?.organizationId??"",skipFirestore:!0}}),this.commonDbService.updateData({feature:"locationUsersViews",properties:{id:a,user:i.userSnippylyId,date:u,documentId:e,organizationId:this.documentPaths?.organizationId??"",skipFirestore:!0},data:{timestamp:s}}),this.commonDbService.updateData({feature:"locationDayViews",properties:{id:a,date:u,user:i.userSnippylyId,documentId:e,organizationId:this.documentPaths?.organizationId??"",skipFirestore:!0},data:{timestamp:s}}),this.commonDbService.updateData({feature:"locationMetadataViews",properties:{id:a,documentId:e,organizationId:this.documentPaths?.organizationId??"",skipFirestore:!0},data:this.docService.getBaseMetadata("locationViews",{clientDocumentId:t})});let p={day:{[u]:{[i.userSnippylyId]:{timestamp:s}}},users:{[i.userSnippylyId]:{[u]:{timestamp:s}}},metadata:this.docService.getBaseMetadata("locationViews",{clientDocumentId:t}),location:d};this.commonDbService.updateData({feature:"location",data:p,properties:{id:a,documentId:e,organizationId:this.documentPaths?.organizationId??"",skipRtdb:!0}})}}}catch(i){this.loggingService.catch("Error in ViewsService setLocationAsRead:",i)}})}updateNotificationsDatabase(e,t={}){try{let n=m({actionType:e,notificationSource:"documentViews"},t);this.notificationService?.updateNotificationDatabase(n)}catch(n){this.loggingService.catch("Error in CommentService updateNotificationsDatabase: ",n)}}get timestamp(){return this.commonDbService.getServerTimestamp()}};c.\u0275fac=function(t){return new(t||c)(T(Fe),T(Xe),T(Ze),T(et),T(ue),T(tt),T(ct),T(D),T(dt),T(de))},c.\u0275prov=xe({token:c,factory:c.\u0275fac,providedIn:"root"});let l=c;return l})();function wt(l,c){if(l&1&&(W(0),v(1,"div",21)(2,"div",22),M(3,"snippyly-user-avatar",23),w(),v(4,"div",24)(5,"div",25),E(6),U(7,"translate"),w()(),v(8,"div",26),E(9),U(10,"timeAgo"),w()(),G()),l&2){let r=c.$implicit;h(3),x("user",r==null?null:r.user)("size",32),h(3),R(" ",k(7,4,(r==null||r.user==null?null:r.user.name)||(r==null||r.user==null?null:r.user.email))," "),h(3),R(" ",k(10,6,r==null?null:r.timestamp)," ")}}function yt(l,c){if(l&1&&(v(0,"div",19),z(1,wt,11,8,"ng-container",20),w()),l&2){let r=_(2).ngIf;h(),x("ngForOf",r.userViews)}}function ft(l,c){if(l&1){let r=K();W(0),v(1,"div",4)(2,"button",5),j("click",function(){P(r);let t=_(2);return F(t.closeTrendDialog())}),Y(),v(3,"svg",6),M(4,"path",7),w(),Q(),v(5,"span"),E(6),U(7,"translate"),w()()(),v(8,"div",8)(9,"div",9)(10,"div",10),E(11),w(),v(12,"div",11),Y(),v(13,"svg",12),M(14,"path",13)(15,"path",14),w(),Q(),v(16,"span"),E(17),U(18,"translate"),w()()(),v(19,"div",15)(20,"div",16),E(21),w(),v(22,"div",17)(23,"span"),E(24),U(25,"translate"),w()()()(),z(26,yt,2,1,"div",18),G()}if(l&2){let r=_().ngIf;h(6),H(k(7,6,"Go Back")),h(5),R(" ",r.totalUniqueViewsCount," "),h(6),H(k(18,8,"Total Views")),h(4),R(" ",r.todayViewsCount," "),h(3),H(k(25,10,"Views Today")),h(2),x("ngIf",r.userViews==null?null:r.userViews.length)}}function St(l,c){if(l&1&&(W(0),v(1,"div",21)(2,"div",22),M(3,"snippyly-user-avatar",23),w(),v(4,"div",24)(5,"div",25),E(6),U(7,"translate"),w(),v(8,"div",26),E(9),U(10,"timeAgo"),w()()(),G()),l&2){let r=c.$implicit;h(3),x("user",r==null?null:r.user)("size",32),h(3),R(" ",k(7,4,(r==null||r.user==null?null:r.user.name)||(r==null||r.user==null?null:r.user.email))," "),h(3),R(" ",k(10,6,r==null?null:r.timestamp)," ")}}function bt(l,c){if(l&1&&(v(0,"div",29)(1,"div",19),z(2,St,11,8,"ng-container",20),w()()),l&2){let r=_(2).ngIf;h(2),x("ngForOf",r.userViews)}}function Vt(l,c){if(l&1&&(v(0,"div",27)(1,"div",9)(2,"div",10),E(3),w(),v(4,"div",11),Y(),v(5,"svg",12),M(6,"path",13)(7,"path",14),w(),Q(),v(8,"span"),E(9),U(10,"translate"),w()()(),v(11,"div",15),E(12),U(13,"translate"),U(14,"translate"),U(15,"translate"),w()(),z(16,bt,3,1,"div",28)),l&2){let r=_().ngIf;h(3),R(" ",r.totalUniqueViewsCount," "),h(6),H(k(10,6,"Total Views")),h(3),Ae(" ",r.todayViewsCount," ",r.todayViewsCount===1?k(13,8,"View"):k(14,10,"Views")," ",k(15,12,"Today")," "),h(4),x("ngIf",r.userViews==null?null:r.userViews.length)}}function It(l,c){if(l&1){let r=K();W(0),v(1,"div",2),j("clickOutside",function(){P(r);let t=_();return F(t.closeTrendDialog())}),z(2,ft,27,12,"ng-container",3)(3,Vt,17,14,"ng-template",null,0,ce),w(),G()}if(l&2){let r=c.ngIf,e=se(4);h(),ae("bottom-sheet",r.bottomSheetMode),h(),x("ngIf",r.bottomSheetMode)("ngIfElse",e)}}var ee=(()=>{let c=class c{constructor(e,t,n,i,o,a,d){this.contactService=e,this.loggingService=t,this.viewsService=n,this.themeService=i,this.elementRef=o,this.domService=a,this.bottomSheetData=d,this.close=new re,this.componentConfigSignal=ne({today:new Date().toISOString().split("T")[0],todayViews:{},todayViewsCount:0,totalUniqueViews:{},totalUniqueViewsCount:0,views:{},usersMap:{},userViews:[],bottomSheetMode:!1}),this.subscriptions=[];try{d&&(this.componentConfigSignal.update(s=>(s=y(m({},s),{bottomSheetMode:!0}),s)),this.clientLocationId=d.clientLocationId,this.closeBottomSheetFn=d.closeBottomSheetFn),this.subscriptions.push(this.contactService.getUsersMap$().subscribe(s=>{this.componentConfigSignal.update(u=>(u=y(m({},u),{usersMap:s||{}}),u)),this.setLatestViewsByUsers()},s=>{this.loggingService.catch("Error in ViewAnalyticsDialogComponent getUsersMap$ subscription: ",s)})),this.subscriptions.push(this.themeService.getDarkMode$().subscribe(s=>{s?this.elementRef.nativeElement.setAttribute("dark",""):this.elementRef.nativeElement.removeAttribute("dark")}))}catch(s){this.loggingService.catch("Error in ViewAnalyticsDialogComponent constructor: ",s)}}ngOnInit(){this.getDocumentViews()}ngAfterViewInit(){try{this.subscriptions.push(this.domService.subscribeInjectCustomCss(this.elementRef))}catch(e){this.loggingService.catch("Error in ViewAnalyticsDialogComponent ngAfterViewInit: ",e)}}trackByUserIdAndTimestamp(e,t){return`${t?.user?.userSnippylyId}-${t.timestamp}`}getDocumentViews(){try{this.loggingService.log("%c[WB] Calling FUNCTION: getDocumentViews","color: green;"),this.uniqueViewsByUserSubscription&&(this.componentConfigSignal.update(e=>(e=y(m({},e),{totalUniqueViews:{},totalUniqueViewsCount:0}),e)),this.uniqueViewsByUserSubscription.unsubscribe()),this.uniqueViewsByDateSubscription&&(this.componentConfigSignal.update(e=>(e=y(m({},e),{todayViews:{},todayViewsCount:0}),e)),this.uniqueViewsByDateSubscription.unsubscribe()),this.uniqueViewsByUserSubscription=this.viewsService.getUniqueViewsByUser(this.clientLocationId).subscribe(e=>{this.componentConfigSignal.update(t=>(t=y(m({},t),{totalUniqueViews:e||{},totalUniqueViewsCount:Object.keys(e||{})?.length||0}),t)),this.setLatestViewsByUsers()},e=>{this.loggingService.catch("Error in ViewAnalyticsDialogComponent getUniqueViewsByUser subscription: ",e)}),this.uniqueViewsByDateSubscription=this.viewsService.getUniqueViewsByDate(this.clientLocationId).subscribe(e=>{this.componentConfigSignal.update(t=>(t=m({},t),t.todayViews=e&&e[t.today]?e[t.today]:{},t.todayViewsCount=Object.keys(t.todayViews||{})?.length||0,t)),this.setLatestViewsByUsers()},e=>{this.loggingService.catch("Error in ViewAnalyticsDialogComponent getUniqueViewsByDate subscription: ",e)})}catch(e){this.loggingService.catch("Error in ViewAnalyticsDialogComponent getDocumentViews: ",e)}}setLatestViewsByUsers(){try{this.loggingService.log("%c[WB] Calling FUNCTION: setLatestViewsByUsers","color: green;"),Object.keys(this.componentConfigSignal().todayViews||{}).forEach(e=>{let t=this.componentConfigSignal().usersMap[e],n=this.componentConfigSignal().todayViews[e]?.timestamp;t&&n&&(this.componentConfigSignal().userViews.find(o=>o.user.userSnippylyId===e)||this.componentConfigSignal.update(o=>(o=y(m({},o),{userViews:[...o.userViews,{user:t,timestamp:n}]}),o)))}),this.componentConfigSignal.update(e=>(e=m({},e),e.userViews.sort((t,n)=>n.timestamp-t.timestamp),e.userViews=e.userViews.slice(0,3),e))}catch(e){this.loggingService.catch("Error in ViewAnalyticsDialogComponent setLatestViewsByUsers: ",e)}}closeTrendDialog(){try{this.close.emit(),this.closeBottomSheetFn&&this.closeBottomSheetFn?.()}catch(e){this.loggingService.catch("Error in ViewAnalyticsDialogComponent onClose: ",e)}}ngOnDestroy(){try{this.subscriptions.forEach(e=>{e.unsubscribe()}),this.uniqueViewsByDateSubscription?.unsubscribe(),this.uniqueViewsByUserSubscription?.unsubscribe()}catch(e){this.loggingService.catch("Error in ViewAnalyticsDialogComponent ngOnDestroy: ",e)}}};c.\u0275fac=function(t){return new(t||c)(I(it),I(D),I(L),I(nt),I(oe),I(me),I(Re,8))},c.\u0275cmp=Z({type:c,selectors:[["velt-view-analytics-dialog"]],inputs:{clientLocationId:"clientLocationId"},outputs:{close:"close"},standalone:!1,decls:1,vars:1,consts:[["defaultDialogRef",""],[4,"ngIf"],["snippylyClickOutside","",1,"v-view-analytics-dialog-container",3,"clickOutside"],[4,"ngIf","ngIfElse"],[1,"v-back-btn-container"],[1,"v-back-btn",3,"click"],["width","16","height","16","viewBox","0 0 16 16","fill","none","xmlns","http://www.w3.org/2000/svg"],["d","M9.99988 4L5.99988 8L9.99988 12","stroke","currentColor","stroke-width","1.33333","stroke-linecap","round","stroke-linejoin","round"],[1,"v-view-analytics-count-container"],[1,"v-total-views-container"],[1,"v-total-views-count"],[1,"v-total-views-text"],["width","18","height","18","viewBox","0 0 18 18","fill","none","xmlns","http://www.w3.org/2000/svg"],["d","M7.5 9C7.5 9.39782 7.65804 9.77936 7.93934 10.0607C8.22064 10.342 8.60218 10.5 9 10.5C9.39782 10.5 9.77936 10.342 10.0607 10.0607C10.342 9.77936 10.5 9.39782 10.5 9C10.5 8.60218 10.342 8.22064 10.0607 7.93934C9.77936 7.65804 9.39782 7.5 9 7.5C8.60218 7.5 8.22064 7.65804 7.93934 7.93934C7.65804 8.22064 7.5 8.60218 7.5 9Z","stroke","#625DF5","stroke-width","1.25","stroke-linecap","round","stroke-linejoin","round"],["d","M15.75 9C13.95 12 11.7 13.5 9 13.5C6.3 13.5 4.05 12 2.25 9C4.05 6 6.3 4.5 9 4.5C11.7 4.5 13.95 6 15.75 9Z","stroke","#625DF5","stroke-width","1.25","stroke-linecap","round","stroke-linejoin","round"],[1,"v-today-views-container"],[1,"v-today-views-count"],[1,"v-today-views-text"],["class","v-users-container",4,"ngIf"],[1,"v-users-container"],[4,"ngFor","ngForOf"],[1,"v-user"],[1,"v-user-image"],[3,"user","size"],[1,"v-user-view-details"],[1,"v-user-name"],[1,"v-user-view-time"],[1,"v-document-viewer-tread-left"],["class","v-document-viewer-tread-right",4,"ngIf"],[1,"v-document-viewer-tread-right"]],template:function(t,n){t&1&&z(0,It,5,4,"ng-container",1),t&2&&x("ngIf",n.componentConfigSignal())},dependencies:[ke,le,rt,st,ot,mt],styles:[`.v-view-analytics-dialog-container{border-radius:var(--legacy-velt-view-analytics-dialog-border-radius);border:var(--legacy-velt-view-analytics-dialog-border);background:var(--legacy-velt-view-analytics-dialog-bg-color);box-shadow:var(--legacy-velt-view-analytics-dialog-box-shadow);padding:var(--legacy-velt-view-analytics-dialog-padding);display:flex;gap:16px}.v-view-analytics-dialog-container .v-document-viewer-tread-left{display:flex;flex-direction:column;gap:4px}.v-view-analytics-dialog-container .v-document-viewer-tread-left .v-total-views-container{width:140px;height:110px;flex-shrink:0;border-radius:8px;background:var(--legacy-velt-view-analytics-dialog-views-container-bg-color);box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:10px}.v-view-analytics-dialog-container .v-document-viewer-tread-left .v-total-views-container .v-total-views-count{color:var(--legacy-velt-view-analytics-dialog-total-views-count-color);font-size:32px;font-style:normal;font-weight:600;line-height:100%}.v-view-analytics-dialog-container .v-document-viewer-tread-left .v-total-views-container .v-total-views-text{color:var(--legacy-velt-view-analytics-dialog-total-views-text-color);font-size:12px;font-style:normal;font-weight:500;line-height:100%;text-transform:uppercase;display:flex;gap:4px;align-items:center}.v-view-analytics-dialog-container .v-document-viewer-tread-left .v-today-views-container{display:flex;width:140px;padding:8px 4px;justify-content:center;align-items:center;gap:4px;border-radius:8px;background:var(--legacy-velt-view-analytics-dialog-views-container-bg-color);box-sizing:border-box;color:var(--legacy-velt-view-analytics-dialog-today-views-text-color);font-size:12px;font-style:normal;font-weight:500;line-height:100%;text-transform:uppercase}.v-view-analytics-dialog-container .v-document-viewer-tread-right{padding:8px 0}.v-view-analytics-dialog-container .v-document-viewer-tread-right .v-users-container{display:inline-flex;flex-direction:column;align-items:flex-start;gap:16px;margin-right:16px}.v-view-analytics-dialog-container .v-document-viewer-tread-right .v-users-container .v-user{display:flex;align-items:center;gap:12px}.v-view-analytics-dialog-container .v-document-viewer-tread-right .v-users-container .v-user snippyly-user-avatar{display:flex}.v-view-analytics-dialog-container .v-document-viewer-tread-right .v-users-container .v-user .v-user-view-details{display:flex;flex-direction:column;gap:8px}.v-view-analytics-dialog-container .v-document-viewer-tread-right .v-users-container .v-user .v-user-view-details .v-user-name{color:var(--legacy-velt-view-analytics-dialog-user-name-color);font-size:12px;font-style:normal;font-weight:500;line-height:100%}.v-view-analytics-dialog-container .v-document-viewer-tread-right .v-users-container .v-user .v-user-view-details .v-user-view-time{color:var(--legacy-velt-view-analytics-dialog-user-timestamp-color);font-size:10px;font-style:normal;font-weight:500;line-height:100%;text-transform:uppercase}.v-view-analytics-dialog-container.bottom-sheet{display:flex;flex-direction:column;border-bottom-left-radius:0;border-bottom-right-radius:0}.v-view-analytics-dialog-container.bottom-sheet .v-back-btn-container{display:flex;padding:8px 8px 0}.v-view-analytics-dialog-container.bottom-sheet .v-back-btn-container .v-back-btn{background:transparent;border:0;outline:0;display:flex;align-items:center;gap:8px;color:var(--legacy-velt-view-analytics-dialog-back-btn-color);cursor:pointer;font-size:16px;font-style:normal;font-weight:400;line-height:normal}.v-view-analytics-dialog-container.bottom-sheet .v-view-analytics-count-container{display:flex;flex:1;gap:10px}.v-view-analytics-dialog-container.bottom-sheet .v-view-analytics-count-container .v-total-views-container{display:flex;padding:25px 20px;flex-direction:column;justify-content:center;align-items:center;gap:10px;flex:1 0 0;border-radius:8px;background:var(--legacy-velt-view-analytics-dialog-views-container-bg-color)}.v-view-analytics-dialog-container.bottom-sheet .v-view-analytics-count-container .v-total-views-container .v-total-views-count{color:var(--legacy-velt-view-analytics-dialog-total-views-count-color);font-size:32px;font-style:normal;font-weight:600;line-height:100%}.v-view-analytics-dialog-container.bottom-sheet .v-view-analytics-count-container .v-total-views-container .v-total-views-text{color:var(--legacy-velt-view-analytics-dialog-total-views-text-color);font-size:12px;font-style:normal;font-weight:500;line-height:100%;text-transform:uppercase;display:flex;gap:4px;align-items:center}.v-view-analytics-dialog-container.bottom-sheet .v-view-analytics-count-container .v-today-views-container{display:flex;padding:25px 20px;flex-direction:column;justify-content:center;align-items:center;gap:10px;flex:1 0 0;border-radius:8px;background:var(--legacy-velt-view-analytics-dialog-views-container-bg-color)}.v-view-analytics-dialog-container.bottom-sheet .v-view-analytics-count-container .v-today-views-container .v-today-views-count{color:var(--legacy-velt-view-analytics-dialog-today-views-text-color);font-size:32px;font-style:normal;font-weight:600;line-height:100%}.v-view-analytics-dialog-container.bottom-sheet .v-view-analytics-count-container .v-today-views-container .v-today-views-text{color:var(--legacy-velt-view-analytics-dialog-today-views-text-color);font-size:12px;font-style:normal;font-weight:500;line-height:100%;text-transform:uppercase;display:flex;gap:4px;align-items:center}.v-view-analytics-dialog-container.bottom-sheet .v-users-container{display:inline-flex;flex-direction:column;align-items:flex-start;gap:16px;margin-right:16px}.v-view-analytics-dialog-container.bottom-sheet .v-users-container .v-user{display:flex;align-items:center;gap:12px;width:100%}.v-view-analytics-dialog-container.bottom-sheet .v-users-container .v-user snippyly-user-avatar{display:flex}.v-view-analytics-dialog-container.bottom-sheet .v-users-container .v-user .v-user-view-details{display:flex;flex-direction:column;gap:8px;flex:1}.v-view-analytics-dialog-container.bottom-sheet .v-users-container .v-user .v-user-view-details .v-user-name{color:var(--legacy-velt-view-analytics-dialog-user-name-color);font-size:12px;font-style:normal;font-weight:500;line-height:100%}.v-view-analytics-dialog-container.bottom-sheet .v-users-container .v-user .v-user-view-time{color:var(--legacy-velt-view-analytics-dialog-user-timestamp-color);font-size:10px;font-style:normal;font-weight:500;line-height:100%;text-transform:uppercase}
1
+ import{a as Re,c as qe,d as We}from"./chunk-FLGROJQW.js";import{a as mt}from"./chunk-6RA26UDR.js";import{t as at}from"./chunk-SLIE6W2D.js";import"./chunk-GW63A52V.js";import"./chunk-Z54SH2OU.js";import{a as dt}from"./chunk-6ILQARGU.js";import"./chunk-6LUTL3DR.js";import{a as rt}from"./chunk-UQ2QOHQZ.js";import"./chunk-G4N6XTDS.js";import"./chunk-HEIW3Q3Z.js";import{b as ot,d as st}from"./chunk-KAYQA4GH.js";import{a as lt}from"./chunk-KBKI4VKD.js";import{a as ct}from"./chunk-45CK3G4S.js";import{a as Pe}from"./chunk-NBO7Z72Y.js";import{A as ze,G as $e,H as Ne,I as Le,ca as it,ea as nt}from"./chunk-NVZIS23N.js";import{$ as xe,Af as he,Dd as Fe,De as O,E as A,Fa as h,Fc as ke,Ga as re,Gc as le,Hi as tt,Ib as se,J as ie,Kb as ae,L as J,M as Ie,Mh as Ye,Nb as E,Ob as H,Pa as I,Pb as R,Pc as Te,Qf as Ke,Rb as Ae,S as Ce,Sd as Me,T as S,Ta as Oe,Td as je,Ua as Z,Va as Be,W as De,Y as pe,Zh as Qe,_a as z,a as m,aa as _e,ac as Ue,ai as de,b as y,ca as T,ci as D,di as Ze,g as q,ha as P,ia as F,ih as He,ja as Y,ka as Q,kc as U,kh as we,ki as me,l as $,lb as x,lc as k,li as Xe,mb as v,me as Ge,mi as fe,nb as w,ob as M,pc as ce,qa as ne,r as V,ri as N,sb as W,si as et,tb as G,ua as Ee,uh as ye,v as f,vb as K,w as X,wa as oe,xb as j,xh as Je,xi as ue,zb as _}from"./chunk-BCSVTVMJ.js";var L=(()=>{let c=class c{constructor(e,t,n,i,o,a,d,s,u,g){this.afAuth=e,this.authService=t,this.configService=n,this.databaseService=i,this.docService=o,this.commonDbService=a,this.iamService=d,this.loggingService=s,this.userPermissionService=u,this.serviceBook=g,this.documentPaths=null,this.views$=new $({}),this.commentViews$=new $({}),this.documentViews$=new $({}),this.locationViews$=new $({}),this.commentViewsByOrganizationIdAndDocumentId$=new $({}),this.documentViewsByOrganizationIdAndDocumentId$=new $({}),this.locationViewsByOrganizationIdAndLocationId$=new $({}),this.documentViewsEnabled$=new $(!1),this.documentViewsSetByDocumentId={},this.notificationService=null,this.loggingService.log("%c[WB] Creating CLASS: ViewsService","color: blue;");try{this.serviceBook.observe(Ye).subscribe(p=>{this.commentService=p??void 0}),this.serviceBook.observe(Je).subscribe(p=>{this.notificationService=p??null}),this.databaseService.getDb().pipe(A(p=>!!p),ie(1)).subscribe(p=>{p&&(this.subscribeViewsData().subscribe(),this.getNotificationFeatureViews$().subscribe(C=>{this.notificationService?.setNotificationViews(C)}),this.authService.getUser$().pipe(A(C=>!!C),S(C=>this.documentViewsEnabled$.pipe(A(b=>b),f(()=>C))),S(C=>this.docService.getDocumentPaths$().pipe(Ce(null),Ie(),f(([b,B])=>(b?.documentId!==B?.documentId&&this.views$.next({}),B)),f(b=>(this.documentPaths=b,this.setDocumentAsRead({documentId:this.documentPaths?.documentId??"",clientDocumentId:this.documentPaths?.clientDocumentId??""}),{_user:C,_documentPaths:b})),S(b=>this.docService.getDocumentIds$().pipe(S(B=>(B?.length&&(B.find(te=>te.documentId===this.documentPaths?.documentId)||B.push({documentId:this.documentPaths?.documentId??"",clientDocumentId:this.documentPaths?.clientDocumentId??""}),B.forEach(te=>{this.setDocumentAsRead({documentId:te.documentId,clientDocumentId:te.clientDocumentId})})),V(b))))))),S(C=>this.docService.getDocumentMetadata$().pipe(A(b=>!!b),f(b=>y(m({},C),{_documentMetadata:b}))))).subscribe(),this.authService.getUser$().pipe(A(C=>!!C),S(C=>this.documentViewsEnabled$.pipe(A(b=>b),f(()=>C))),S(C=>this.docService.getLocation$().pipe(A(b=>!!b))),S(C=>this.docService.getDocumentIds$().pipe(S(b=>(b.find(B=>B.documentId===this.documentPaths?.documentId)||b.push({documentId:this.documentPaths?.documentId??"",clientDocumentId:this.documentPaths?.clientDocumentId??""}),b.forEach(B=>{this.setLocationAsRead({documentId:B.documentId,clientDocumentId:B.clientDocumentId})}),V(C)))))).subscribe())},p=>{this.loggingService.catch("Error in ViewsService getDb subscription: ",p)})}catch(p){this.loggingService.catch("Error in ViewsService constructor: ",p)}}clearCache(){this.loggingService.log("%c[WB] Calling FUNCTION: clearCache in ViewsService","color: green;");try{this.documentPaths=null,this.documentViews$.next({}),this.views$.next({}),this.commentViews$.next({}),this.locationViews$.next({}),this.commentViewsByOrganizationIdAndDocumentId$.next({}),this.documentViewsByOrganizationIdAndDocumentId$.next({}),this.locationViewsByOrganizationIdAndLocationId$.next({})}catch(e){this.loggingService.catch("Error in ViewsService clearCache: ",e)}}subscribeViewsData(e,t){this.loggingService.log("%c[WB] Calling FUNCTION: subscribeViewsData","color: green;");let n,i;try{if(e&&(i=he(e)),t&&typeof t=="object"){let o=Ke(t);n=he(JSON.stringify(o))}}catch(o){this.loggingService.catch("Error in ViewsService subscribeViewsData: ",o)}return this.authService.getAuthState$().pipe(A(o=>!!o),S(o=>this.isFeatureAllowed({firebaseUser:o})),S(o=>o.featureAllowed?this.iamService.isUserAllowed$().pipe(f(a=>(o.featureAllowed=a,o))):V(o)),S(o=>o.featureAllowed?V(o).pipe(S(a=>this.docService.getDocumentPaths$().pipe(f(d=>(this.documentPaths=d,a.documentPaths=d,a)))),S(a=>i?this.getDataFromDocumentIds([i]):this.docService.getDocumentIds$().pipe(S(d=>{let s=d?.length>0?d.map(u=>u.documentId):[this.documentPaths?.documentId??""];return this.getDataFromDocumentIds(s)})))):V([])))}isFeatureAllowed(e){return this.configService.getConfig$().pipe(A(t=>!!t),f(t=>y(m({},e),{config:t})),S(t=>this.authService.getUser$().pipe(f(n=>y(m({},t),{user:n})))),S(t=>t.user?V(y(m({},t),{featureAllowed:!0})):V(y(m({},t),{featureAllowed:!1}))),J((t,n)=>t?.featureAllowed===n?.featureAllowed))}getDataFromDocumentIds(e,t){return this.getDataFromDocuments({documentIds:e,filters:t})}getCommentViewsById(e){try{return this.commentViews$.value?.[e]?this.commentViews$.value?.[e]:void 0}catch(t){this.loggingService.catch("Error in ViewsService getCommentViewsById: ",t);return}}getDocumentViewsById(e){try{return this.documentViews$.value?.[e]}catch(t){this.loggingService.catch("Error in ViewsService getDocumentViewsById: ",t);return}}getLocationViewsById(e){try{return this.locationViews$.value?.[e]}catch(t){this.loggingService.catch("Error in ViewsService getLocationViewsById: ",t);return}}getDataFromDocuments(e){if(this.configService?.getApiKey()){let{documentIds:t,filters:n}=e;return t?.some(i=>!i)||!this.documentPaths?V([]):this.documentViewsEnabled$.pipe(S(i=>i?X([this.getCommentViewsDataFromDocuments(),this.getDocumentViewsDataFromDocuments(t),this.getLocationViewsDataFromDocuments(t)]):X([this.getCommentViewsDataFromDocuments()])))}else return V(null)}getCommentViews(e){try{let t={};Object.entries(e??{}).forEach(([n,i])=>{let o=i.metadata?.documentId,a=i.views;!o||!a||(t[o]||(t[o]={}),t[o][i.annotationId]=a)}),Object.entries(t??{}).forEach(([n,i])=>{this.setCommentViewsByOrganizationIdAndDocumentId({organizationId:this.documentPaths?.organizationId,documentId:n,commentViews:i})})}catch(t){this.loggingService.catch("Error in ViewsService getCommentViews: ",t)}}getCommentViewsDataFromDocuments(){try{return this.commentService?this.commentService?.getAllCommentAnnotations({detectGhostComments:!0,addFilterCommentsOnDomCheck:!0,fromCommentSidebar:!0,skipPositionCalculation:!0,analytics:{enabled:!0,properties:{source:"internal",sourceId:"commentsContainer"}}}).pipe(A(e=>!!e),De(e=>{this.getCommentViews(e)})):V([])}catch(e){return this.loggingService.catch("Error in ViewsService getCommentViewsDataFromDocuments: ",e),V([])}}getDocumentViewsDataFromDocuments(e){let t=this.docService.getDocumentPaths()?.veltFolderId,n=V([]),i={useCollectionGroup:!0,isCollection:!0,useQuery:!0};this.commonDbService.shouldUseFirestore()||(i.documentId=e?.length?e[0]:void 0,i.organizationId=this.documentPaths?.organizationId);let o=[];for(let a=0;a<(e?.length??0);a+=O.LISTENER_BATCH_SIZE)o.push(e?.slice(a,a+O.LISTENER_BATCH_SIZE)??[]);return n=X(o.map(a=>this.commonDbService.dbListener({feature:"allDocumentViews",properties:y(m({},i),{firestoreQuery:[fe(N("metadata.apiKey","==",this.configService?.getApiKey()),N("metadata.documentId","in",a),N("metadata.organizationId","==",this.documentPaths?.organizationId),...t?[N("metadata.veltFolderId","==",t)]:[])]})}).pipe(pe()))).pipe(f(a=>we(a))),n.pipe(f(a=>({data:a?.data,operation:a?.operation})),f(({data:a,operation:d})=>{let s={};return e?(Object.entries(a??{}).forEach(([u,g])=>{let p=g.metadata?.documentId;p&&(s[p]||(s[p]={}),s[p][u]=g)}),{data:a,documentMap:s,operation:d}):{data:a,documentMap:s,operation:d}}),f(({data:a,documentMap:d,operation:s})=>{if(s?.type==="removed"){if(s?.ids?.length){let u=this.documentViews$.value;s?.ids?.forEach(g=>{delete u?.[g]}),this.documentViews$.next(u)}}else Object.entries(d??{}).forEach(([u,g])=>{this.setDocumentViewsByOrganizationIdAndDocumentId({organizationId:this.documentPaths?.organizationId,documentId:u,documentViews:g})})}))}getLocationViewsDataFromDocuments(e){let t=this.docService.getDocumentPaths()?.veltFolderId,n=V([]),i={useCollectionGroup:!0,isCollection:!0,useQuery:!0};this.commonDbService.shouldUseFirestore()||(i.documentId=e?.length?e[0]:void 0,i.organizationId=this.documentPaths?.organizationId);let o=[];for(let a=0;a<(e?.length??0);a+=O.LISTENER_BATCH_SIZE)o.push(e?.slice(a,a+O.LISTENER_BATCH_SIZE)??[]);return n=X(o.map(a=>this.commonDbService.dbListener({feature:"allLocationViews",properties:y(m({},i),{firestoreQuery:[fe(N("metadata.apiKey","==",this.configService?.getApiKey()),N("metadata.documentId","in",a),N("metadata.organizationId","==",this.documentPaths?.organizationId),...t?[N("metadata.veltFolderId","==",t)]:[])]})}).pipe(pe()))).pipe(f(a=>we(a))),n.pipe(f(a=>({data:a?.data,operation:a?.operation})),f(({data:a,operation:d})=>{let s={};return e?(Object.entries(a??{}).forEach(([u,g])=>{let p=g.metadata?.documentId;p&&(s[p]||(s[p]={}),s[p][u]=g)}),{data:a,documentMap:s,operation:d}):{data:a,documentMap:s,operation:d}}),f(({data:a,documentMap:d,operation:s})=>{if(s?.type==="removed"){if(s?.ids?.length){let u=this.locationViews$.value;s?.ids?.forEach(g=>{delete u?.[g]}),this.locationViews$.next(u)}}else Object.entries(d??{}).forEach(([u,g])=>{this.setLocationViewsByOrganizationIdAndDocumentId({organizationId:this.documentPaths?.organizationId,documentId:u,locationViews:g})})}))}setViewsData(e){try{this.views$.next(m(m({},this.views$.getValue()),e||{}))}catch(t){this.loggingService.catch("Error in ViewsService setViewsData:",t)}}setCommentViewsByOrganizationIdAndDocumentId({organizationId:e,documentId:t,commentViews:n,queryHash:i}){try{if(n||(n={}),t){e||(e=O.NO_ORGANIZATION_ID),i||(i=O.DEFAULT_QUERY_HASH);let o=m(m({},this.commentViews$.value),n);this.commentViews$.next(o),this.commentViewsByOrganizationIdAndDocumentId$.next(y(m({},this.commentViewsByOrganizationIdAndDocumentId$.value),{[e]:y(m({},this.commentViewsByOrganizationIdAndDocumentId$.value[e]),{[t]:y(m({},this.commentViewsByOrganizationIdAndDocumentId$.value[e]?.[t]),{[i]:n})})}))}}catch(o){this.loggingService.catch("Error in CommentService setCommentAnnotationsByOrganizationIdAndDocumentId:",o)}}setDocumentViewsByOrganizationIdAndDocumentId({organizationId:e,documentId:t,documentViews:n,queryHash:i}){try{if(n||(n={}),t){e||(e=O.NO_ORGANIZATION_ID),i||(i=O.DEFAULT_QUERY_HASH);let o=m(m({},this.documentViews$.value),n);this.documentViews$.next(o),this.documentViewsByOrganizationIdAndDocumentId$.next(y(m({},this.documentViewsByOrganizationIdAndDocumentId$.value),{[e]:y(m({},this.documentViewsByOrganizationIdAndDocumentId$.value[e]),{[t]:y(m({},this.documentViewsByOrganizationIdAndDocumentId$.value[e]?.[t]),{[i]:n})})}))}}catch(o){this.loggingService.catch("Error in CommentService setCommentAnnotationsByOrganizationIdAndDocumentId:",o)}}setLocationViewsByOrganizationIdAndDocumentId({organizationId:e,documentId:t,locationViews:n,queryHash:i}){try{if(n||(n={}),t){e||(e=O.NO_ORGANIZATION_ID),i||(i=O.DEFAULT_QUERY_HASH);let o=m(m({},this.locationViews$.value),n);this.locationViews$.next(o),this.locationViewsByOrganizationIdAndLocationId$.next(y(m({},this.locationViewsByOrganizationIdAndLocationId$.value),{[e]:y(m({},this.locationViewsByOrganizationIdAndLocationId$.value[e]),{[t]:y(m({},this.locationViewsByOrganizationIdAndLocationId$.value[e]?.[t]),{[i]:n})})}))}}catch(o){this.loggingService.catch("Error in CommentService setCommentAnnotationsByOrganizationIdAndDocumentId:",o)}}getCommentFeatureViews$(){return this.commentViews$.pipe(J((e,t)=>JSON.stringify(e||{})===JSON.stringify(t||{})))}setCommentAnnotationAsRead(e){return q(this,null,function*(){try{if(this.authService.getUser()&&e?.annotationId){if(e.annotationId.startsWith("TEMP_COMPOSER_"))return;this.updateCommentAnnotationViews(e);let n=e?.metadata?.organizationId??this.documentPaths?.organizationId??"",i=e?.metadata?.documentId??this.documentPaths?.documentId??"";if(e?.isDraft)return;yield this.commonDbService.setData({feature:"comment",properties:{id:e.annotationId,documentId:i,organizationId:n,metadata:{apiKey:this.configService.getApiKey(),organizationId:n,veltFolderId:e?.metadata?.veltFolderId,documentId:i}},data:JSON.parse(JSON.stringify(e))})}}catch(t){this.loggingService.catch("Error in ViewsService setCommentAnnotationAsRead:",t)}})}setCommentAnnotationAsUnread(e){return q(this,null,function*(){try{if(this.authService.getUser()&&e?.annotationId){if(e.annotationId.startsWith("TEMP_COMPOSER_"))return;this.removeCommentAnnotationViews(e);let n=e?.metadata?.organizationId??this.documentPaths?.organizationId??"",i=e?.metadata?.documentId??this.documentPaths?.documentId??"";if(e?.isDraft)return;yield this.commonDbService.setData({feature:"comment",properties:{id:e.annotationId,documentId:i,organizationId:n,metadata:{apiKey:this.configService.getApiKey(),organizationId:n,veltFolderId:e?.metadata?.veltFolderId,documentId:i}},data:JSON.parse(JSON.stringify(e))})}}catch(t){this.loggingService.catch("Error in ViewsService setCommentAnnotationAsRead:",t)}})}updateCommentAnnotationViews(e){try{let t=this.authService.getUser(),n={views:{},comments:{}};if(t){let i={},o=e?.views?.comments||{},a=new Date().getTime()+this.commonDbService.getOffset();e.comments?.forEach(s=>{o[s.commentId]||(o[s.commentId]={views:{}}),o[s.commentId].views||(o[s.commentId].views={}),o[s.commentId].views[t.userSnippylyId]||(o[s.commentId].views[t.userSnippylyId]={timestamp:a})});let d=new Set(e.comments?.map(s=>s.commentId+""));if(Object.keys(o??{}).forEach(s=>{d.has(s)||delete o[s]}),e.comments?.length){let s=o[e.comments[0].commentId]?.views||{},u=Object.keys(s??{}).filter(g=>e.comments?.every(p=>o[p.commentId]?.views?.[g]));u.forEach(g=>{i[g]={timestamp:s[g].timestamp}}),e.viewedByUserIds=u}n.views=i,n.comments=o,e.views=n}return n}catch(t){return this.loggingService.catch("Error in ViewsService updateCommentAnnotationViews:",t),{views:{},comments:{}}}}removeCommentAnnotationViews(e){try{let t=this.authService.getUser(),n={views:{},comments:{}};if(t){let i={},o=e?.views?.comments||{};e.comments?.forEach(d=>{o[d.commentId]?.views?.[t.userSnippylyId]&&delete o[d.commentId].views[t.userSnippylyId]});let a=new Set(e.comments?.map(d=>d.commentId+""));if(Object.keys(o??{}).forEach(d=>{a.has(d)||delete o[d]}),e.comments?.length){let d=o[e.comments[0].commentId]?.views||{},s=Object.keys(d??{}).filter(u=>e.comments?.every(g=>o[g.commentId]?.views?.[u]));s.forEach(u=>{i[u]={timestamp:d[u].timestamp}}),e.viewedByUserIds=s}else e.viewedByUserIds=[];n.views=i,n.comments=o,e.views=n}return n}catch(t){return this.loggingService.catch("Error in ViewsService removeCommentAnnotationViews:",t),{views:{},comments:{}}}}getNotificationFeatureViews$(){return this.views$.pipe(J((e,t)=>JSON.stringify(e?.notification||{})===JSON.stringify(t?.notification||{})))}setNotificationsAsRead(e){try{let t=this.authService.getUser();if(t){let n=new Date().getTime()+this.commonDbService.getOffset();e.forEach(i=>{this.commonDbService.updateData({feature:"notificationViewsTimestamp",properties:{id:i,user:t.userSnippylyId,documentId:this.documentPaths?.documentId??"",organizationId:this.documentPaths?.organizationId??""},data:{timestamp:n}})})}}catch(t){this.loggingService.catch("Error in ViewsService setNotificationAsRead:",t)}}getDocumentViews$(){return this.views$.pipe(J((e,t)=>JSON.stringify(e?.documentViews||{})===JSON.stringify(t?.documentViews||{})))}getUniqueViewsByUser(e){try{return this.enableDocumentViews(),this.docService.getDocumentPaths$().pipe(S(t=>(this.documentPaths=t,e?this.locationViews$.pipe(f(n=>{let i=Object.keys(n||{}).find(o=>n?.[o]?.location?.id===e);return i?n?.[i]?.users||{}:{}})):this.documentViews$.pipe(f(n=>{let i=this.documentPaths?.documentId;return i?n?.[i]?.users||{}:{}})))),J(He))}catch(t){return this.loggingService.catch("Error in ViewsService getUniqueViewsByUser:",t),V({})}}getUniqueViewsByDate(e){try{return this.enableDocumentViews(),this.docService.getDocumentPaths$().pipe(S(t=>(this.documentPaths=t,e?this.locationViews$.pipe(f(n=>{let i=Object.keys(n||{}).find(o=>n?.[o]?.location?.id===e);return i?n?.[i]?.day||{}:{}})):this.documentViews$.pipe(f(n=>{let i=this.documentPaths?.documentId;return i?n?.[i]?.day||{}:{}})))))}catch(t){return this.loggingService.catch("Error in ViewsService getUniqueViewsByDate:",t),V({})}}enableDocumentViews(){try{if(this.documentViewsEnabled$.value===!0)return;this.documentViewsEnabled$.next(!0)}catch(e){this.loggingService.catch("Error in ViewsService enableDocumentViews:",e)}}disableDocumentViews(){try{if(this.documentViewsEnabled$.value===!1)return;this.documentViewsEnabled$.next(!1)}catch(e){this.loggingService.catch("Error in ViewsService disableDocumentViews:",e)}}setDocumentAsRead(n){return q(this,arguments,function*({documentId:e,clientDocumentId:t}){try{let i=this.authService.getUser();if(i&&e&&this.userPermissionService?.hasEditAccess({documentId:e??"",folderId:this.documentPaths?.allDocuments&&this.documentPaths?.veltFolderId?this.documentPaths?.veltFolderId:void 0})){if(this.documentViewsSetByDocumentId[e])return;this.documentViewsSetByDocumentId[e]=!0;let o=new Date().getTime()+this.commonDbService.getOffset(),a=new Date().toISOString().split("T")[0],d=this.getDocumentViewsById(e);if(d){let s=new Date().toISOString().split("T")[0];d?.users[i.userSnippylyId]||(d.users[i.userSnippylyId]={}),d.users[i.userSnippylyId][s]={timestamp:this.timestamp},d?.day[s]||(d.day[s]={}),d.day[s][i.userSnippylyId]={timestamp:this.timestamp},d.metadata=this.docService.getBaseMetadata("documentViews",{clientDocumentId:t}),this.commonDbService.updateData({feature:"documentViews",properties:{id:e,date:s,user:i.userSnippylyId,documentId:e,organizationId:this.documentPaths?.organizationId??""},data:d})}else this.commonDbService.updateData({feature:"documentDayViews",properties:{id:e,date:a,user:i.userSnippylyId,documentId:e,organizationId:this.documentPaths?.organizationId??"",skipFirestore:!0},data:{timestamp:o}}),this.commonDbService.updateData({feature:"documentUsersViews",properties:{id:e,user:i.userSnippylyId,date:a,documentId:e,organizationId:this.documentPaths?.organizationId??"",skipFirestore:!0},data:{timestamp:o}}),this.commonDbService.updateData({feature:"documentMetadataViews",properties:{id:e,documentId:e,organizationId:this.documentPaths?.organizationId??"",skipFirestore:!0},data:this.docService.getBaseMetadata("documentViews",{clientDocumentId:t})}),this.docService.getDocumentMetadata$(e).pipe(A(s=>s!==null),ie(1)).subscribe(()=>{let s={day:{[a]:{[i.userSnippylyId]:{timestamp:o}}},users:{[i.userSnippylyId]:{[a]:{timestamp:o}}},metadata:this.docService.getBaseMetadata("documentViews",{clientDocumentId:t})};this.commonDbService.updateData({feature:"documentViews",properties:{id:e,date:a,user:i.userSnippylyId,documentId:e,organizationId:this.documentPaths?.organizationId??"",skipRtdb:!0},data:s})});this.checkAndTriggerNotification(i)}}catch(i){this.loggingService.catch("Error in ViewsService setDocumentAsRead:",i)}})}checkAndTriggerNotification(e){try{this.getUniqueViewsByUser().pipe(ie(1)).subscribe(t=>{if(Object.keys(t??{}).length===2){let n=this.docService.getDocumentMetadata();if(n?.creator?.email&&n?.creator?.email!==e.email){let i=[n.creator.email];this.updateNotificationsDatabase(Ge.FIRST_VIEWED,{documentViews:{emails:i}})}}})}catch(t){this.loggingService.catch("Error in checkAndTriggerNotification:",t)}}setLocationAsRead(n){return q(this,arguments,function*({documentId:e,clientDocumentId:t}){try{let i=this.authService.getUser(),o=this.docService.getLocation(),a=o?.locationId,d=o?.location;if(i&&a&&d){let s=new Date().getTime()+this.commonDbService.getOffset(),u=new Date().toISOString().split("T")[0],g=this.getLocationViewsById(a);if(g){let p=new Date().toISOString().split("T")[0];g?.users[i.userSnippylyId]||(g.users[i.userSnippylyId]={}),g.users[i.userSnippylyId][p]={timestamp:this.timestamp},g?.day[p]||(g.day[p]={}),g.day[p][i.userSnippylyId]={timestamp:this.timestamp},g.metadata=this.docService.getBaseMetadata("locationViews",{clientDocumentId:t}),this.commonDbService.updateData({feature:"location",data:g,properties:{id:a,documentId:e,organizationId:this.documentPaths?.organizationId??""}})}else{this.commonDbService.updateData({feature:"locationViews",data:d,properties:{id:a,documentId:e,organizationId:this.documentPaths?.organizationId??"",skipFirestore:!0}}),this.commonDbService.updateData({feature:"locationUsersViews",properties:{id:a,user:i.userSnippylyId,date:u,documentId:e,organizationId:this.documentPaths?.organizationId??"",skipFirestore:!0},data:{timestamp:s}}),this.commonDbService.updateData({feature:"locationDayViews",properties:{id:a,date:u,user:i.userSnippylyId,documentId:e,organizationId:this.documentPaths?.organizationId??"",skipFirestore:!0},data:{timestamp:s}}),this.commonDbService.updateData({feature:"locationMetadataViews",properties:{id:a,documentId:e,organizationId:this.documentPaths?.organizationId??"",skipFirestore:!0},data:this.docService.getBaseMetadata("locationViews",{clientDocumentId:t})});let p={day:{[u]:{[i.userSnippylyId]:{timestamp:s}}},users:{[i.userSnippylyId]:{[u]:{timestamp:s}}},metadata:this.docService.getBaseMetadata("locationViews",{clientDocumentId:t}),location:d};this.commonDbService.updateData({feature:"location",data:p,properties:{id:a,documentId:e,organizationId:this.documentPaths?.organizationId??"",skipRtdb:!0}})}}}catch(i){this.loggingService.catch("Error in ViewsService setLocationAsRead:",i)}})}updateNotificationsDatabase(e,t={}){try{let n=m({actionType:e,notificationSource:"documentViews"},t);this.notificationService?.updateNotificationDatabase(n)}catch(n){this.loggingService.catch("Error in CommentService updateNotificationsDatabase: ",n)}}get timestamp(){return this.commonDbService.getServerTimestamp()}};c.\u0275fac=function(t){return new(t||c)(T(Fe),T(Xe),T(Ze),T(et),T(ue),T(tt),T(ct),T(D),T(dt),T(de))},c.\u0275prov=xe({token:c,factory:c.\u0275fac,providedIn:"root"});let l=c;return l})();function wt(l,c){if(l&1&&(W(0),v(1,"div",21)(2,"div",22),M(3,"snippyly-user-avatar",23),w(),v(4,"div",24)(5,"div",25),E(6),U(7,"translate"),w()(),v(8,"div",26),E(9),U(10,"timeAgo"),w()(),G()),l&2){let r=c.$implicit;h(3),x("user",r==null?null:r.user)("size",32),h(3),R(" ",k(7,4,(r==null||r.user==null?null:r.user.name)||(r==null||r.user==null?null:r.user.email))," "),h(3),R(" ",k(10,6,r==null?null:r.timestamp)," ")}}function yt(l,c){if(l&1&&(v(0,"div",19),z(1,wt,11,8,"ng-container",20),w()),l&2){let r=_(2).ngIf;h(),x("ngForOf",r.userViews)}}function ft(l,c){if(l&1){let r=K();W(0),v(1,"div",4)(2,"button",5),j("click",function(){P(r);let t=_(2);return F(t.closeTrendDialog())}),Y(),v(3,"svg",6),M(4,"path",7),w(),Q(),v(5,"span"),E(6),U(7,"translate"),w()()(),v(8,"div",8)(9,"div",9)(10,"div",10),E(11),w(),v(12,"div",11),Y(),v(13,"svg",12),M(14,"path",13)(15,"path",14),w(),Q(),v(16,"span"),E(17),U(18,"translate"),w()()(),v(19,"div",15)(20,"div",16),E(21),w(),v(22,"div",17)(23,"span"),E(24),U(25,"translate"),w()()()(),z(26,yt,2,1,"div",18),G()}if(l&2){let r=_().ngIf;h(6),H(k(7,6,"Go Back")),h(5),R(" ",r.totalUniqueViewsCount," "),h(6),H(k(18,8,"Total Views")),h(4),R(" ",r.todayViewsCount," "),h(3),H(k(25,10,"Views Today")),h(2),x("ngIf",r.userViews==null?null:r.userViews.length)}}function St(l,c){if(l&1&&(W(0),v(1,"div",21)(2,"div",22),M(3,"snippyly-user-avatar",23),w(),v(4,"div",24)(5,"div",25),E(6),U(7,"translate"),w(),v(8,"div",26),E(9),U(10,"timeAgo"),w()()(),G()),l&2){let r=c.$implicit;h(3),x("user",r==null?null:r.user)("size",32),h(3),R(" ",k(7,4,(r==null||r.user==null?null:r.user.name)||(r==null||r.user==null?null:r.user.email))," "),h(3),R(" ",k(10,6,r==null?null:r.timestamp)," ")}}function bt(l,c){if(l&1&&(v(0,"div",29)(1,"div",19),z(2,St,11,8,"ng-container",20),w()()),l&2){let r=_(2).ngIf;h(2),x("ngForOf",r.userViews)}}function Vt(l,c){if(l&1&&(v(0,"div",27)(1,"div",9)(2,"div",10),E(3),w(),v(4,"div",11),Y(),v(5,"svg",12),M(6,"path",13)(7,"path",14),w(),Q(),v(8,"span"),E(9),U(10,"translate"),w()()(),v(11,"div",15),E(12),U(13,"translate"),U(14,"translate"),U(15,"translate"),w()(),z(16,bt,3,1,"div",28)),l&2){let r=_().ngIf;h(3),R(" ",r.totalUniqueViewsCount," "),h(6),H(k(10,6,"Total Views")),h(3),Ae(" ",r.todayViewsCount," ",r.todayViewsCount===1?k(13,8,"View"):k(14,10,"Views")," ",k(15,12,"Today")," "),h(4),x("ngIf",r.userViews==null?null:r.userViews.length)}}function It(l,c){if(l&1){let r=K();W(0),v(1,"div",2),j("clickOutside",function(){P(r);let t=_();return F(t.closeTrendDialog())}),z(2,ft,27,12,"ng-container",3)(3,Vt,17,14,"ng-template",null,0,ce),w(),G()}if(l&2){let r=c.ngIf,e=se(4);h(),ae("bottom-sheet",r.bottomSheetMode),h(),x("ngIf",r.bottomSheetMode)("ngIfElse",e)}}var ee=(()=>{let c=class c{constructor(e,t,n,i,o,a,d){this.contactService=e,this.loggingService=t,this.viewsService=n,this.themeService=i,this.elementRef=o,this.domService=a,this.bottomSheetData=d,this.close=new re,this.componentConfigSignal=ne({today:new Date().toISOString().split("T")[0],todayViews:{},todayViewsCount:0,totalUniqueViews:{},totalUniqueViewsCount:0,views:{},usersMap:{},userViews:[],bottomSheetMode:!1}),this.subscriptions=[];try{d&&(this.componentConfigSignal.update(s=>(s=y(m({},s),{bottomSheetMode:!0}),s)),this.clientLocationId=d.clientLocationId,this.closeBottomSheetFn=d.closeBottomSheetFn),this.subscriptions.push(this.contactService.getUsersMap$().subscribe(s=>{this.componentConfigSignal.update(u=>(u=y(m({},u),{usersMap:s||{}}),u)),this.setLatestViewsByUsers()},s=>{this.loggingService.catch("Error in ViewAnalyticsDialogComponent getUsersMap$ subscription: ",s)})),this.subscriptions.push(this.themeService.getDarkMode$().subscribe(s=>{s?this.elementRef.nativeElement.setAttribute("dark",""):this.elementRef.nativeElement.removeAttribute("dark")}))}catch(s){this.loggingService.catch("Error in ViewAnalyticsDialogComponent constructor: ",s)}}ngOnInit(){this.getDocumentViews()}ngAfterViewInit(){try{this.subscriptions.push(this.domService.subscribeInjectCustomCss(this.elementRef))}catch(e){this.loggingService.catch("Error in ViewAnalyticsDialogComponent ngAfterViewInit: ",e)}}trackByUserIdAndTimestamp(e,t){return`${t?.user?.userSnippylyId}-${t.timestamp}`}getDocumentViews(){try{this.loggingService.log("%c[WB] Calling FUNCTION: getDocumentViews","color: green;"),this.uniqueViewsByUserSubscription&&(this.componentConfigSignal.update(e=>(e=y(m({},e),{totalUniqueViews:{},totalUniqueViewsCount:0}),e)),this.uniqueViewsByUserSubscription.unsubscribe()),this.uniqueViewsByDateSubscription&&(this.componentConfigSignal.update(e=>(e=y(m({},e),{todayViews:{},todayViewsCount:0}),e)),this.uniqueViewsByDateSubscription.unsubscribe()),this.uniqueViewsByUserSubscription=this.viewsService.getUniqueViewsByUser(this.clientLocationId).subscribe(e=>{this.componentConfigSignal.update(t=>(t=y(m({},t),{totalUniqueViews:e||{},totalUniqueViewsCount:Object.keys(e||{})?.length||0}),t)),this.setLatestViewsByUsers()},e=>{this.loggingService.catch("Error in ViewAnalyticsDialogComponent getUniqueViewsByUser subscription: ",e)}),this.uniqueViewsByDateSubscription=this.viewsService.getUniqueViewsByDate(this.clientLocationId).subscribe(e=>{this.componentConfigSignal.update(t=>(t=m({},t),t.todayViews=e&&e[t.today]?e[t.today]:{},t.todayViewsCount=Object.keys(t.todayViews||{})?.length||0,t)),this.setLatestViewsByUsers()},e=>{this.loggingService.catch("Error in ViewAnalyticsDialogComponent getUniqueViewsByDate subscription: ",e)})}catch(e){this.loggingService.catch("Error in ViewAnalyticsDialogComponent getDocumentViews: ",e)}}setLatestViewsByUsers(){try{this.loggingService.log("%c[WB] Calling FUNCTION: setLatestViewsByUsers","color: green;"),Object.keys(this.componentConfigSignal().todayViews||{}).forEach(e=>{let t=this.componentConfigSignal().usersMap[e],n=this.componentConfigSignal().todayViews[e]?.timestamp;t&&n&&(this.componentConfigSignal().userViews.find(o=>o.user.userSnippylyId===e)||this.componentConfigSignal.update(o=>(o=y(m({},o),{userViews:[...o.userViews,{user:t,timestamp:n}]}),o)))}),this.componentConfigSignal.update(e=>(e=m({},e),e.userViews.sort((t,n)=>n.timestamp-t.timestamp),e.userViews=e.userViews.slice(0,3),e))}catch(e){this.loggingService.catch("Error in ViewAnalyticsDialogComponent setLatestViewsByUsers: ",e)}}closeTrendDialog(){try{this.close.emit(),this.closeBottomSheetFn&&this.closeBottomSheetFn?.()}catch(e){this.loggingService.catch("Error in ViewAnalyticsDialogComponent onClose: ",e)}}ngOnDestroy(){try{this.subscriptions.forEach(e=>{e.unsubscribe()}),this.uniqueViewsByDateSubscription?.unsubscribe(),this.uniqueViewsByUserSubscription?.unsubscribe()}catch(e){this.loggingService.catch("Error in ViewAnalyticsDialogComponent ngOnDestroy: ",e)}}};c.\u0275fac=function(t){return new(t||c)(I(it),I(D),I(L),I(nt),I(oe),I(me),I(Re,8))},c.\u0275cmp=Z({type:c,selectors:[["velt-view-analytics-dialog"]],inputs:{clientLocationId:"clientLocationId"},outputs:{close:"close"},standalone:!1,decls:1,vars:1,consts:[["defaultDialogRef",""],[4,"ngIf"],["snippylyClickOutside","",1,"v-view-analytics-dialog-container",3,"clickOutside"],[4,"ngIf","ngIfElse"],[1,"v-back-btn-container"],[1,"v-back-btn",3,"click"],["width","16","height","16","viewBox","0 0 16 16","fill","none","xmlns","http://www.w3.org/2000/svg"],["d","M9.99988 4L5.99988 8L9.99988 12","stroke","currentColor","stroke-width","1.33333","stroke-linecap","round","stroke-linejoin","round"],[1,"v-view-analytics-count-container"],[1,"v-total-views-container"],[1,"v-total-views-count"],[1,"v-total-views-text"],["width","18","height","18","viewBox","0 0 18 18","fill","none","xmlns","http://www.w3.org/2000/svg"],["d","M7.5 9C7.5 9.39782 7.65804 9.77936 7.93934 10.0607C8.22064 10.342 8.60218 10.5 9 10.5C9.39782 10.5 9.77936 10.342 10.0607 10.0607C10.342 9.77936 10.5 9.39782 10.5 9C10.5 8.60218 10.342 8.22064 10.0607 7.93934C9.77936 7.65804 9.39782 7.5 9 7.5C8.60218 7.5 8.22064 7.65804 7.93934 7.93934C7.65804 8.22064 7.5 8.60218 7.5 9Z","stroke","#625DF5","stroke-width","1.25","stroke-linecap","round","stroke-linejoin","round"],["d","M15.75 9C13.95 12 11.7 13.5 9 13.5C6.3 13.5 4.05 12 2.25 9C4.05 6 6.3 4.5 9 4.5C11.7 4.5 13.95 6 15.75 9Z","stroke","#625DF5","stroke-width","1.25","stroke-linecap","round","stroke-linejoin","round"],[1,"v-today-views-container"],[1,"v-today-views-count"],[1,"v-today-views-text"],["class","v-users-container",4,"ngIf"],[1,"v-users-container"],[4,"ngFor","ngForOf"],[1,"v-user"],[1,"v-user-image"],[3,"user","size"],[1,"v-user-view-details"],[1,"v-user-name"],[1,"v-user-view-time"],[1,"v-document-viewer-tread-left"],["class","v-document-viewer-tread-right",4,"ngIf"],[1,"v-document-viewer-tread-right"]],template:function(t,n){t&1&&z(0,It,5,4,"ng-container",1),t&2&&x("ngIf",n.componentConfigSignal())},dependencies:[ke,le,rt,st,ot,mt],styles:[`.v-view-analytics-dialog-container{border-radius:var(--legacy-velt-view-analytics-dialog-border-radius);border:var(--legacy-velt-view-analytics-dialog-border);background:var(--legacy-velt-view-analytics-dialog-bg-color);box-shadow:var(--legacy-velt-view-analytics-dialog-box-shadow);padding:var(--legacy-velt-view-analytics-dialog-padding);display:flex;gap:16px}.v-view-analytics-dialog-container .v-document-viewer-tread-left{display:flex;flex-direction:column;gap:4px}.v-view-analytics-dialog-container .v-document-viewer-tread-left .v-total-views-container{width:140px;height:110px;flex-shrink:0;border-radius:8px;background:var(--legacy-velt-view-analytics-dialog-views-container-bg-color);box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:10px}.v-view-analytics-dialog-container .v-document-viewer-tread-left .v-total-views-container .v-total-views-count{color:var(--legacy-velt-view-analytics-dialog-total-views-count-color);font-size:32px;font-style:normal;font-weight:600;line-height:100%}.v-view-analytics-dialog-container .v-document-viewer-tread-left .v-total-views-container .v-total-views-text{color:var(--legacy-velt-view-analytics-dialog-total-views-text-color);font-size:12px;font-style:normal;font-weight:500;line-height:100%;text-transform:uppercase;display:flex;gap:4px;align-items:center}.v-view-analytics-dialog-container .v-document-viewer-tread-left .v-today-views-container{display:flex;width:140px;padding:8px 4px;justify-content:center;align-items:center;gap:4px;border-radius:8px;background:var(--legacy-velt-view-analytics-dialog-views-container-bg-color);box-sizing:border-box;color:var(--legacy-velt-view-analytics-dialog-today-views-text-color);font-size:12px;font-style:normal;font-weight:500;line-height:100%;text-transform:uppercase}.v-view-analytics-dialog-container .v-document-viewer-tread-right{padding:8px 0}.v-view-analytics-dialog-container .v-document-viewer-tread-right .v-users-container{display:inline-flex;flex-direction:column;align-items:flex-start;gap:16px;margin-right:16px}.v-view-analytics-dialog-container .v-document-viewer-tread-right .v-users-container .v-user{display:flex;align-items:center;gap:12px}.v-view-analytics-dialog-container .v-document-viewer-tread-right .v-users-container .v-user snippyly-user-avatar{display:flex}.v-view-analytics-dialog-container .v-document-viewer-tread-right .v-users-container .v-user .v-user-view-details{display:flex;flex-direction:column;gap:8px}.v-view-analytics-dialog-container .v-document-viewer-tread-right .v-users-container .v-user .v-user-view-details .v-user-name{color:var(--legacy-velt-view-analytics-dialog-user-name-color);font-size:12px;font-style:normal;font-weight:500;line-height:100%}.v-view-analytics-dialog-container .v-document-viewer-tread-right .v-users-container .v-user .v-user-view-details .v-user-view-time{color:var(--legacy-velt-view-analytics-dialog-user-timestamp-color);font-size:10px;font-style:normal;font-weight:500;line-height:100%;text-transform:uppercase}.v-view-analytics-dialog-container.bottom-sheet{display:flex;flex-direction:column;border-bottom-left-radius:0;border-bottom-right-radius:0}.v-view-analytics-dialog-container.bottom-sheet .v-back-btn-container{display:flex;padding:8px 8px 0}.v-view-analytics-dialog-container.bottom-sheet .v-back-btn-container .v-back-btn{background:transparent;border:0;outline:0;display:flex;align-items:center;gap:8px;color:var(--legacy-velt-view-analytics-dialog-back-btn-color);cursor:pointer;font-size:16px;font-style:normal;font-weight:400;line-height:normal}.v-view-analytics-dialog-container.bottom-sheet .v-view-analytics-count-container{display:flex;flex:1;gap:10px}.v-view-analytics-dialog-container.bottom-sheet .v-view-analytics-count-container .v-total-views-container{display:flex;padding:25px 20px;flex-direction:column;justify-content:center;align-items:center;gap:10px;flex:1 0 0;border-radius:8px;background:var(--legacy-velt-view-analytics-dialog-views-container-bg-color)}.v-view-analytics-dialog-container.bottom-sheet .v-view-analytics-count-container .v-total-views-container .v-total-views-count{color:var(--legacy-velt-view-analytics-dialog-total-views-count-color);font-size:32px;font-style:normal;font-weight:600;line-height:100%}.v-view-analytics-dialog-container.bottom-sheet .v-view-analytics-count-container .v-total-views-container .v-total-views-text{color:var(--legacy-velt-view-analytics-dialog-total-views-text-color);font-size:12px;font-style:normal;font-weight:500;line-height:100%;text-transform:uppercase;display:flex;gap:4px;align-items:center}.v-view-analytics-dialog-container.bottom-sheet .v-view-analytics-count-container .v-today-views-container{display:flex;padding:25px 20px;flex-direction:column;justify-content:center;align-items:center;gap:10px;flex:1 0 0;border-radius:8px;background:var(--legacy-velt-view-analytics-dialog-views-container-bg-color)}.v-view-analytics-dialog-container.bottom-sheet .v-view-analytics-count-container .v-today-views-container .v-today-views-count{color:var(--legacy-velt-view-analytics-dialog-today-views-text-color);font-size:32px;font-style:normal;font-weight:600;line-height:100%}.v-view-analytics-dialog-container.bottom-sheet .v-view-analytics-count-container .v-today-views-container .v-today-views-text{color:var(--legacy-velt-view-analytics-dialog-today-views-text-color);font-size:12px;font-style:normal;font-weight:500;line-height:100%;text-transform:uppercase;display:flex;gap:4px;align-items:center}.v-view-analytics-dialog-container.bottom-sheet .v-users-container{display:inline-flex;flex-direction:column;align-items:flex-start;gap:16px;margin-right:16px}.v-view-analytics-dialog-container.bottom-sheet .v-users-container .v-user{display:flex;align-items:center;gap:12px;width:100%}.v-view-analytics-dialog-container.bottom-sheet .v-users-container .v-user snippyly-user-avatar{display:flex}.v-view-analytics-dialog-container.bottom-sheet .v-users-container .v-user .v-user-view-details{display:flex;flex-direction:column;gap:8px;flex:1}.v-view-analytics-dialog-container.bottom-sheet .v-users-container .v-user .v-user-view-details .v-user-name{color:var(--legacy-velt-view-analytics-dialog-user-name-color);font-size:12px;font-style:normal;font-weight:500;line-height:100%}.v-view-analytics-dialog-container.bottom-sheet .v-users-container .v-user .v-user-view-time{color:var(--legacy-velt-view-analytics-dialog-user-timestamp-color);font-size:10px;font-style:normal;font-weight:500;line-height:100%;text-transform:uppercase}
2
2
  `],encapsulation:3,changeDetection:0});let l=c;return l})();var be=(()=>{let c=class c{constructor(e,t){this.bottomSheet=e,this.loggingService=t,this.close=new re,this.subscriptions=[]}ngOnInit(){}ngAfterViewInit(){this.openBottomSheet()}openBottomSheet(){return q(this,null,function*(){try{this.bottomSheetRef=this.bottomSheet.open(ee,{data:{clientLocationId:this.clientLocationId,closeBottomSheetFn:()=>{this.onClose(),this.bottomSheetRef?.dismiss()}},panelClass:["v-view-analytics-bottom-sheet-container","velt-mat-bottom-sheet-container"]}),this.subscriptions.push(this.bottomSheetRef.backdropClick().subscribe(()=>{this.onClose()},e=>{this.loggingService.catch("Error in ViewAnalyticsBottomSheetComponent backdropClick subscription: ",e)}))}catch(e){this.loggingService.catch("Error in ViewAnalyticsBottomSheetComponent openBottomSheet: ",e)}})}onClose(){try{this.close.emit()}catch(e){this.loggingService.catch("Error in ViewAnalyticsBottomSheetComponent onClose: ",e)}}ngOnDestroy(){try{this.subscriptions.forEach(e=>{e.unsubscribe()})}catch(e){this.loggingService.catch("Error in ViewAnalyticsBottomSheetComponent ngOnDestroy: ",e)}}};c.\u0275fac=function(t){return new(t||c)(I(qe),I(D))},c.\u0275cmp=Z({type:c,selectors:[["velt-view-analytics-bottom-sheet-internal"]],inputs:{clientLocationId:"clientLocationId"},outputs:{close:"close"},standalone:!1,decls:0,vars:0,template:function(t,n){},styles:[".velt-mat-bottom-sheet-container.v-view-analytics-bottom-sheet-container{padding:0!important} .velt-mat-bottom-sheet-container.v-view-analytics-bottom-sheet-container .mat-bottom-sheet-container{padding:0!important}"],changeDetection:0});let l=c;return l})();var xt=()=>["snippyly-overlay-panel","v-view-analytics-overlay-panel","velt-overlay-panel"];function _t(l,c){if(l&1){let r=K();v(0,"velt-view-analytics-dialog",11),j("close",function(){P(r);let t=_(2);return F(t.toggleTrends())}),w()}if(l&2){let r=_(2);x("clientLocationId",r.clientLocationId)}}function Et(l,c){if(l&1){let r=K();v(0,"velt-view-analytics-bottom-sheet-internal",11),j("close",function(){P(r);let t=_(2);return F(t.closeTrends())}),w()}if(l&2){let r=_(2);x("clientLocationId",r.clientLocationId)}}function Ot(l,c){if(l&1){let r=K();W(0),v(1,"div",3,0),j("click",function(t){return P(r),_().toggleTrends(),F(t.stopPropagation())}),v(3,"slot",4),j("slotchange",function(){P(r);let t=_();return F(t.onButtonSlotChange())}),v(4,"div",5),Y(),v(5,"svg",6),M(6,"path",7),w(),Q(),v(7,"span",8),E(8),w()()()(),z(9,_t,1,1,"ng-template",9,1,ce)(11,Et,1,1,"velt-view-analytics-bottom-sheet-internal",10),G()}if(l&2){let r=c.ngIf,e=se(2),t=_();h(4),ae("active",r.treadsVisible),h(4),H(r.totalUniqueViewsCount),h(),x("cdkConnectedOverlayOrigin",e)("cdkConnectedOverlayOpen",!r.isPhone&&r.treadsVisible)("cdkConnectedOverlayPanelClass",Ue(11,xt))("cdkConnectedOverlayBackdropClass","snippyly-overlay-backdrop")("cdkConnectedOverlayGrowAfterOpen",!0)("cdkConnectedOverlayPositions",t.positions)("cdkConnectedOverlayDisableClose",!0),h(2),x("ngIf",r.isPhone&&r.treadsVisible)}}var Ve=(()=>{let c=class c{constructor(e,t,n,i,o,a){this.breakpointObserver=e,this.docService=t,this.loggingService=n,this.viewsService=i,this.elementRef=o,this.domService=a,this.type="document",this.componentConfigSignal=ne({today:new Date().toISOString().split("T")[0],todayViews:{},todayViewsCount:0,totalUniqueViews:{},totalUniqueViewsCount:0,treadsVisible:!1,customButtonAdded:!1,isPhone:!1,componentId:Math.random().toString(36).substring(2)}),this.positions=O.OVERLAY_POSITIONS.map(d=>new ze({originX:d.originX,originY:d.originY},{overlayX:d.overlayX,overlayY:d.overlayY})),this.subscriptions=[]}ngOnInit(){try{this.getUniqueViewsByUser(),this.subscriptions.push(this.breakpointObserver.observe(je.XSmall).subscribe(e=>{this.componentConfigSignal.update(t=>(t=m({},t),t.isPhone=!!e.matches,t))},e=>{this.loggingService.catch("Error in ViewAnalyticsComponent breakpointObserver subscription: ",e)})),this.subscriptions.push(this.docService.getLocation$().subscribe(e=>{e?.location?.id&&(this.clientLocationId=e?.location?.id,this.getUniqueViewsByUser())}))}catch(e){this.loggingService.catch("Error in ViewAnalyticsComponent ngOnInit: ",e)}}ngOnChanges(e){try{(e.type||e.clientLocationId)&&this.getUniqueViewsByUser()}catch(t){this.loggingService.catch("Error in ViewAnalyticsComponent ngOnChanges: ",t)}}ngAfterViewInit(){try{this.subscriptions.push(this.domService.subscribeInjectCustomCss(this.elementRef))}catch(e){this.loggingService.catch("Error in ViewAnalyticsComponent ngAfterViewInit: ",e)}}getUniqueViewsByUser(){try{this.loggingService.log("%c[WB] Calling FUNCTION: getDocumentViews","color: green;"),this.uniqueViewsByUserSubscription&&(this.componentConfigSignal.update(t=>(t=m({},t),t.totalUniqueViews={},t.totalUniqueViewsCount=0,t)),this.uniqueViewsByUserSubscription.unsubscribe());let e=this.type==="location"&&this.clientLocationId?this.clientLocationId:void 0;this.uniqueViewsByUserSubscription=this.viewsService.getUniqueViewsByUser(e).subscribe(t=>{this.componentConfigSignal.update(n=>(n=m({},n),n.totalUniqueViews=t||{},n.totalUniqueViewsCount=Object.keys(n.totalUniqueViews||{})?.length||0,n))},t=>{this.loggingService.catch("Error in ViewAnalyticsComponent getUniqueViewsByUser subscription: ",t)})}catch(e){this.loggingService.catch("Error in ViewAnalyticsComponent getDocumentViews: ",e)}}toggleTrends(){try{this.loggingService.log("%c[WB] Calling FUNCTION: toggleTrends","color: green;"),this.componentConfigSignal.update(e=>(e=m({},e),e.treadsVisible=!e.treadsVisible,e))}catch(e){this.loggingService.catch("Error in ViewAnalyticsComponent toggleTrends: ",e)}}openTrends(){try{this.loggingService.log("%c[WB] Calling FUNCTION: openTrends","color: green;"),this.componentConfigSignal.update(e=>(e=m({},e),e.treadsVisible=!0,e))}catch(e){this.loggingService.catch("Error in ViewAnalyticsComponent openTrends: ",e)}}closeTrends(){try{this.loggingService.log("%c[WB] Calling FUNCTION: closeTrends","color: green;"),this.componentConfigSignal.update(e=>(e=m({},e),e.treadsVisible=!1,e))}catch(e){this.loggingService.catch("Error in ViewAnalyticsComponent closeTrends: ",e)}}onButtonSlotChange(){this.componentConfigSignal.update(e=>(e=m({},e),e.customButtonAdded=!0,e))}unsubscribe(){this.loggingService.log("%c[WB] Calling FUNCTION: unsubscribe","color: green;");try{this.subscriptions.map(e=>{e.unsubscribe()}),this.subscriptions=[],this.uniqueViewsByUserSubscription&&this.uniqueViewsByUserSubscription.unsubscribe()}catch(e){this.loggingService.catch("Error in ViewAnalyticsComponent unsubscribe: ",e)}}ngOnDestroy(){try{this.unsubscribe()}catch(e){this.loggingService.catch("Error in ViewAnalyticsComponent ngOnDestroy: ",e)}}};c.\u0275fac=function(t){return new(t||c)(I(Me),I(ue),I(D),I(L),I(oe),I(me))},c.\u0275cmp=Z({type:c,selectors:[["velt-view-analytics-internal"]],inputs:{type:"type",clientLocationId:[0,"locationId","clientLocationId"]},standalone:!1,features:[Ee],decls:1,vars:1,consts:[["trigger","cdkOverlayOrigin"],["overlay","cdkConnectedOverlay"],[4,"ngIf"],["part","container","cdkOverlayOrigin","",1,"v-document-viewer-tread-container",3,"click"],["name","button",3,"slotchange"],["part","button-container",1,"action-btn"],["part","button-icon","width","24","height","24","viewBox","0 0 24 24","fill","none","xmlns","http://www.w3.org/2000/svg",1,"action-btn-icon"],["d","M4.5 16.1667L9.5 11.1667L12.8333 14.5L19.5 7.83334M19.5 7.83334H13.6667M19.5 7.83334V13.6667","stroke","currentColor","stroke-width","1.5","stroke-linecap","round","stroke-linejoin","round"],["part","button-label",1,"action-btn-label"],["cdkConnectedOverlay","",3,"cdkConnectedOverlayOrigin","cdkConnectedOverlayOpen","cdkConnectedOverlayPanelClass","cdkConnectedOverlayBackdropClass","cdkConnectedOverlayGrowAfterOpen","cdkConnectedOverlayPositions","cdkConnectedOverlayDisableClose"],[3,"clientLocationId","close",4,"ngIf"],[3,"close","clientLocationId"]],template:function(t,n){t&1&&z(0,Ot,12,12,"ng-container",2),t&2&&x("ngIf",n.componentConfigSignal())},dependencies:[le,Ne,$e,ee,be],styles:[`html{--velt-base-rem-unit: 1}*[data-snippyly-element=true],*[data-velt-element=true]{font-family:var(--velt-default-font-family)}velt-wireframe{display:none!important}body.velt-pin-dragging iframe{pointer-events:none!important}*{box-sizing:border-box;-webkit-tap-highlight-color:rgba(255,255,255,0);outline:none;margin:0;padding:0;height:unset;width:unset;text-align:left;line-height:1.5;font-size:calc((1rem + 0px) * var(--velt-base-rem-unit))}*:empty{display:revert}.v-document-viewer-tread-container{display:inline-block}.action-btn{display:inline-flex;justify-content:center;align-items:center;padding:6px;border-radius:var(--legacy-velt-tool-border-radius);border:var(--legacy-velt-tool-border);background-color:var(--legacy-velt-tool-bg-color);color:var(--legacy-velt-tool-icon-color);cursor:pointer}.action-btn .action-btn-label{font-size:calc((.9rem + 0px) * var(--velt-base-rem-unit));padding:0 12px 0 4px;font-weight:700;color:currentColor}.action-btn .action-btn-icon{width:calc((var(--legacy-velt-tool-icon-size) + 0px) * var(--velt-base-rem-unit));height:calc((var(--legacy-velt-tool-icon-size) + 0px) * var(--velt-base-rem-unit));color:currentColor;padding-left:8px;box-sizing:content-box}.action-btn .toolbar-icon-dropdown-arrow{width:16px;height:16px;color:currentColor}.action-btn:focus{border-radius:var(--legacy-velt-tool-focus-border-radius);border:var(--legacy-velt-tool-focus-border);background-color:var(--legacy-velt-tool-focus-bg-color);color:var(--legacy-velt-tool-focus-icon-color)}.action-btn:focus .action-btn-icon{width:calc((var(--legacy-velt-tool-focus-icon-size) + 0px) * var(--velt-base-rem-unit));height:calc((var(--legacy-velt-tool-focus-icon-size) + 0px) * var(--velt-base-rem-unit))}.action-btn:focus .toolbar-icon-dropdown-arrow{color:var(--legacy-velt-tool-focus-icon-color)}.action-btn:hover{border-radius:var(--legacy-velt-tool-hover-border-radius);border:var(--legacy-velt-tool-hover-border);background-color:var(--legacy-velt-tool-hover-bg-color);color:var(--legacy-velt-tool-hover-icon-color)}.action-btn:hover .action-btn-icon{width:calc((var(--legacy-velt-tool-hover-icon-size) + 0px) * var(--velt-base-rem-unit));height:calc((var(--legacy-velt-tool-hover-icon-size) + 0px) * var(--velt-base-rem-unit))}.action-btn:hover .toolbar-icon-dropdown-arrow{color:var(--legacy-velt-tool-hover-icon-color)}.action-btn:active,.action-btn.active{border-radius:var(--legacy-velt-tool-active-border-radius);border:var(--legacy-velt-tool-active-border);background-color:var(--legacy-velt-tool-active-bg-color);color:var(--legacy-velt-tool-active-icon-color)}.action-btn:active .action-btn-icon,.action-btn.active .action-btn-icon{width:calc((var(--legacy-velt-tool-active-icon-size) + 0px) * var(--velt-base-rem-unit));height:calc((var(--legacy-velt-tool-active-icon-size) + 0px) * var(--velt-base-rem-unit))}.action-btn:active .toolbar-icon-dropdown-arrow,.action-btn.active .toolbar-icon-dropdown-arrow{color:var(--legacy-velt-tool-active-icon-color)}
3
3
  `],encapsulation:3,changeDetection:0});let l=c;return l})();var ve=class extends lt{constructor(c){super(c),this.getService(D).log("%c[WB] Creating CLASS: ViewsElement","color: blue;"),this.getUniqueViewsByUser=this._getUniqueViewsByUser,this.getUniqueViewsByDate=this._getUniqueViewsByDate}_getUniqueViewsByUser(c){this.getService(D).log("%c[WB] Calling FUNCTION: _getUniqueViewsByUser","color: green;");try{return this.trackEvent(ye.Events.Views.GET_UNIQUE_VIEWS_BY_USER_TRIGGERED,{payload:{clientLocationId:c}}),this.getService(L).getUniqueViewsByUser(c)}catch(r){return this.getService(D).catch("Error in getUniqueViewsByUser: ",r),V({})}}_getUniqueViewsByDate(c){this.getService(D).log("%c[WB] Calling FUNCTION: _getUniqueViewsByDate","color: green;");try{return this.trackEvent(ye.Events.Views.GET_UNIQUE_VIEWS_BY_DATE_TRIGGERED,{payload:{clientLocationId:c}}),this.getService(L).getUniqueViewsByDate(c)}catch(r){return this.getService(D).catch("Error in getUniqueViewsByDate: ",r),V({})}}};var gt=(()=>{let c=class c{};c.\u0275fac=function(t){return new(t||c)},c.\u0275mod=Be({type:c}),c.\u0275inj=_e({imports:[Te,Le,We,at]});let l=c;return l})();function Bt(l){l.get(D).log("%c[WB] Loading view feature chunk","color: blue;"),l.get(de).set(Qe,l.get(L));let t=Oe(gt,l).injector;return At(t,O.TAGS.VELT_VIEW_ANALYTICS,Ve),new ve(l)}function At(l,c,r){if(customElements.get(c))return;let e=Pe(r,{injector:l});customElements.define(c,e)}export{Bt as default};
package/velt.js CHANGED
@@ -1,7 +1,7 @@
1
- var SNIPPYLY_VERSION = '6.0.0-beta.19';
1
+ var SNIPPYLY_VERSION = '6.0.0-beta.20';
2
2
  Promise.allSettled||(Promise.allSettled=function(t){return Promise.all(t.map(function(r){return Promise.resolve(r).then(function(e){return{status:"fulfilled",value:e}}).catch(function(e){return{status:"rejected",reason:e}})}))});
3
3
 
4
- import{a as Ts}from"./chunk-LVZE52DT.js";import{d as T}from"./chunk-4RIQI4XY.js";import{a as Ss}from"./chunk-R2QBF7NO.js";import{b as fo,d as re}from"./chunk-P43PXYZ4.js";import"./chunk-HVQVHG6X.js";import{a as xo,d as Po}from"./chunk-EKFMFNHA.js";import"./chunk-QPKRAWPH.js";import"./chunk-2PBVEFIH.js";import{d as po}from"./chunk-LFM66M53.js";import{d as qo}from"./chunk-SCMG6VBT.js";import"./chunk-6FAKWJVD.js";import"./chunk-3ZCFXKBX.js";import"./chunk-IRE36BLZ.js";import{b as ys,c as _s,j as Cs,q as ai,t as Es}from"./chunk-P7J62VG5.js";import"./chunk-2EHATMUO.js";import{l as Mo,m as No,o as zo,r as Uo,s as Vo,u as Go,v as jo,w as Wo}from"./chunk-MDOJKYD7.js";import{a as ci}from"./chunk-QXWBXIGN.js";import{a as bs}from"./chunk-Z7QNIQG7.js";import"./chunk-SFBZ672W.js";import{A as xe,B as Se,a as Qe,b as ri,c as as,d as at,e as ls,f as ni,g as oi,h as si,i as It,j as cs,k as ds,l as hs,m as us,n as ms,t as ps,u as gs,v as fs,w as vs,x as Ir}from"./chunk-WR5AGHUW.js";import{a as ss}from"./chunk-UYFAMOUS.js";import{a as Ye,b as De,c as At,d as li}from"./chunk-LVNP3DJI.js";import{a as Pe}from"./chunk-G4FKPDOL.js";import{a as lt}from"./chunk-7QBW4QOG.js";import{a as Or}from"./chunk-OT7KOIU6.js";import{I as Zt,M as Lo,S as Ct,ba as Bo,ca as J,ea as Ot,l as ho,o as uo,p as mo,v as go,y as Tr}from"./chunk-4N7DHGDT.js";import{$ as pe,$b as ke,Aa as Zn,Ab as Ve,Ad as bo,Af as ti,Bb as Ge,Bd as Eo,Ca as eo,Cd as So,Da as to,Db as Qt,De as A,Di as os,E as $n,Eb as Yt,Fa as K,Fb as Kt,Fc as Xt,Fd as To,Ga as io,Gc as $e,Gd as Oo,Ha as fr,Hd as Io,He as ei,Ib as yr,Ie as Qo,J as Qn,Jd as Ao,Je as Et,Kb as vt,L as Yn,Lc as _t,Na as ro,Nb as je,Ob as _r,Od as Ro,Pa as R,Pb as yt,Pd as ko,Qc as so,Qd as Do,Rc as ao,Sc as Jt,Sd as wo,Td as Fo,Ua as j,Uc as lo,Ud as bt,Va as Re,Vc as co,Ya as vr,Z as I,_a as ge,_b as Cr,a as k,aa as Ae,ac as no,ae as Ho,ai as St,b as G,ba as Kn,bi as l,c as Vn,ca as U,cc as br,ci as B,d as Xa,da as Fe,db as Ue,di as Jo,e as Vt,ei as Zo,f as Gn,fb as qe,g as L,gb as Be,gg as Ko,ha as nt,hi as ii,i as Gt,ia as ot,ja as jt,ji as fe,kc as We,ki as ie,l as jn,la as be,lb as W,lc as He,ld as vo,m as M,ma as pr,mb as $,nb as te,ne as C,oa as Xn,ob as X,pc as Er,ph as Xo,qa as Jn,qc as oo,qe as $o,r as x,sb as Ht,si as es,tb as $t,th as g,ti as ts,ua as Wt,ui as is,v as Wn,vb as st,vi as rs,w as Hn,wa as ze,wd as yo,wi as D,xb as Ee,xc as Sr,xd as _o,xi as Tt,yd as Co,yf as Yo,za as gr,zb as q,zi as ns}from"./chunk-PHCH7FJZ.js";var Ln=Xa((Pf,wn)=>{"use strict";var p={};p.generateIdentifier=function(){return Math.random().toString(36).substring(2,12)};p.localCName=p.generateIdentifier();p.splitLines=function(r){return r.trim().split(`
4
+ import{a as Ts}from"./chunk-S4SWAWDX.js";import{d as T}from"./chunk-CECXGS4N.js";import{a as Ss}from"./chunk-6WCUWRDH.js";import{b as fo,d as re}from"./chunk-IE6GR57U.js";import"./chunk-ZZK5UGYN.js";import{a as xo,d as Po}from"./chunk-HRHOJT33.js";import"./chunk-TNSFEAOB.js";import"./chunk-WXTTF7HW.js";import{d as po}from"./chunk-BSYABMZE.js";import{d as qo}from"./chunk-FLGROJQW.js";import"./chunk-DEGPUOWQ.js";import"./chunk-6RA26UDR.js";import"./chunk-63NMA3AQ.js";import{b as ys,c as _s,j as Cs,q as ai,t as Es}from"./chunk-SLIE6W2D.js";import"./chunk-GW63A52V.js";import{l as Mo,m as No,o as zo,r as Uo,s as Vo,u as Go,v as jo,w as Wo}from"./chunk-Z54SH2OU.js";import{a as ci}from"./chunk-6ILQARGU.js";import{a as bs}from"./chunk-6LUTL3DR.js";import"./chunk-UQ2QOHQZ.js";import{A as xe,B as Se,a as Qe,b as ri,c as as,d as at,e as ls,f as ni,g as oi,h as si,i as It,j as cs,k as ds,l as hs,m as us,n as ms,t as ps,u as gs,v as fs,w as vs,x as Ir}from"./chunk-G4N6XTDS.js";import{a as ss}from"./chunk-HEIW3Q3Z.js";import{a as Ye,b as De,c as At,d as li}from"./chunk-KAYQA4GH.js";import{a as Pe}from"./chunk-KBKI4VKD.js";import{a as lt}from"./chunk-45CK3G4S.js";import{a as Or}from"./chunk-NBO7Z72Y.js";import{I as Zt,M as Lo,S as Ct,ba as Bo,ca as J,ea as Ot,l as ho,o as uo,p as mo,v as go,y as Tr}from"./chunk-NVZIS23N.js";import{$ as pe,$b as ke,Aa as Zn,Ab as Ve,Ad as bo,Ai as ns,Bb as Ge,Bd as Eo,Bf as ti,Ca as eo,Cd as So,Da as to,Db as Qt,De as A,E as $n,Eb as Yt,Ei as os,Fa as K,Fb as Kt,Fc as Xt,Fd as To,Ga as io,Gc as $e,Gd as Oo,Ha as fr,Hd as Io,He as ei,Ib as yr,Ie as Qo,J as Qn,Jd as Ao,Je as Et,Kb as vt,L as Yn,Lc as _t,Na as ro,Nb as je,Ob as _r,Od as Ro,Pa as R,Pb as yt,Pd as ko,Qc as so,Qd as Do,Rc as ao,Sc as Jt,Sd as wo,Td as Fo,Ua as j,Uc as lo,Ud as bt,Va as Re,Vc as co,Ya as vr,Z as I,_a as ge,_b as Cr,a as k,aa as Ae,ac as no,ae as Ho,b as G,ba as Kn,bi as St,c as Vn,ca as U,cc as br,ci as l,d as Xa,da as Fe,db as Ue,di as B,e as Vt,ei as Jo,f as Gn,fb as qe,fi as Zo,g as L,gb as Be,ha as nt,hg as Ko,i as Gt,ia as ot,ii,ja as jt,kc as We,ki as fe,l as jn,la as be,lb as W,lc as He,ld as vo,li as ie,m as M,ma as pr,mb as $,nb as te,ne as C,oa as Xn,ob as X,pc as Er,qa as Jn,qc as oo,qe as $o,qh as Xo,r as x,sb as Ht,tb as $t,ti as es,ua as Wt,uh as g,ui as ts,v as Wn,vb as st,vi as is,w as Hn,wa as ze,wd as yo,wi as rs,xb as Ee,xc as Sr,xd as _o,xi as D,yd as Co,yi as Tt,za as gr,zb as q,zf as Yo}from"./chunk-BCSVTVMJ.js";var Ln=Xa((Pf,wn)=>{"use strict";var p={};p.generateIdentifier=function(){return Math.random().toString(36).substring(2,12)};p.localCName=p.generateIdentifier();p.splitLines=function(r){return r.trim().split(`
5
5
  `).map(e=>e.trim())};p.splitSections=function(r){return r.split(`
6
6
  m=`).map((t,i)=>(i>0?"m="+t:t).trim()+`\r
7
7
  `)};p.getDescription=function(r){let e=p.splitSections(r);return e&&e[0]};p.getMediaSections=function(r){let e=p.splitSections(r);return e.shift(),e};p.matchPrefix=function(r,e){return p.splitLines(r).filter(t=>t.indexOf(e)===0)};p.parseCandidate=function(r){let e;r.indexOf("a=candidate:")===0?e=r.substring(12).split(" "):e=r.substring(10).split(" ");let t={foundation:e[0],component:{1:"rtp",2:"rtcp"}[e[1]]||e[1],protocol:e[2].toLowerCase(),priority:parseInt(e[3],10),ip:e[4],address:e[4],port:parseInt(e[5],10),type:e[7]};for(let i=8;i<e.length;i+=2)switch(e[i]){case"raddr":t.relatedAddress=e[i+1];break;case"rport":t.relatedPort=parseInt(e[i+1],10);break;case"tcptype":t.tcpType=e[i+1];break;case"ufrag":t.ufrag=e[i+1],t.usernameFragment=e[i+1];break;default:t[e[i]]===void 0&&(t[e[i]]=e[i+1]);break}return t};p.writeCandidate=function(r){let e=[];e.push(r.foundation);let t=r.component;t==="rtp"?e.push(1):t==="rtcp"?e.push(2):e.push(t),e.push(r.protocol.toUpperCase()),e.push(r.priority),e.push(r.address||r.ip),e.push(r.port);let i=r.type;return e.push("typ"),e.push(i),i!=="host"&&r.relatedAddress&&r.relatedPort&&(e.push("raddr"),e.push(r.relatedAddress),e.push("rport"),e.push(r.relatedPort)),r.tcpType&&r.protocol.toLowerCase()==="tcp"&&(e.push("tcptype"),e.push(r.tcpType)),(r.usernameFragment||r.ufrag)&&(e.push("ufrag"),e.push(r.usernameFragment||r.ufrag)),"candidate:"+e.join(" ")};p.parseIceOptions=function(r){return r.substring(14).split(" ")};p.parseRtpMap=function(r){let e=r.substring(9).split(" "),t={payloadType:parseInt(e.shift(),10)};return e=e[0].split("/"),t.name=e[0],t.clockRate=parseInt(e[1],10),t.channels=e.length===3?parseInt(e[2],10):1,t.numChannels=t.channels,t};p.writeRtpMap=function(r){let e=r.payloadType;r.preferredPayloadType!==void 0&&(e=r.preferredPayloadType);let t=r.channels||r.numChannels||1;return"a=rtpmap:"+e+" "+r.name+"/"+r.clockRate+(t!==1?"/"+t:"")+`\r
@@ -39,8 +39,6 @@ a=extmap-allow-mixed`)!==-1){let o=n.sdp.split(`
39
39
  `);r.RTCSessionDescription&&n instanceof r.RTCSessionDescription?arguments[0]=new r.RTCSessionDescription({type:n.type,sdp:o}):n.sdp=o}return t.apply(this,arguments)}}function Ut(r,e){if(!(r.RTCPeerConnection&&r.RTCPeerConnection.prototype))return;let t=r.RTCPeerConnection.prototype.addIceCandidate;!t||t.length===0||(r.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?(e.browser==="chrome"&&e.version<78||e.browser==="firefox"&&e.version<68||e.browser==="safari")&&arguments[0]&&arguments[0].candidate===""?Promise.resolve():t.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}function qt(r,e){if(!(r.RTCPeerConnection&&r.RTCPeerConnection.prototype))return;let t=r.RTCPeerConnection.prototype.setLocalDescription;!t||t.length===0||(r.RTCPeerConnection.prototype.setLocalDescription=function(){let n=arguments[0]||{};if(typeof n!="object"||n.type&&n.sdp)return t.apply(this,arguments);if(n={type:n.type,sdp:n.sdp},!n.type)switch(this.signalingState){case"stable":case"have-local-offer":case"have-remote-pranswer":n.type="offer";break;default:n.type="answer";break}return n.sdp||n.type!=="offer"&&n.type!=="answer"?t.apply(this,[n]):(n.type==="offer"?this.createOffer:this.createAnswer).apply(this).then(s=>t.apply(this,[s]))})}var wc=Gn(Ln());function Ya({window:r}={},e={shimChrome:!0,shimFirefox:!0,shimSafari:!0}){let t=tr,i=Ga(r),n={browserDetails:i,commonShim:Fn,extractVersion:pt,disableLog:Ba,disableWarnings:Va,sdp:wc};switch(i.browser){case"chrome":if(!nr||!rr||!e.shimChrome)return t("Chrome shim is not included in this adapter release."),n;if(i.version===null)return t("Chrome shim can not determine version, not shimming."),n;t("adapter.js shimming chrome."),n.browserShim=nr,Ut(r,i),qt(r,i),ir(r,i),hn(r,i),rr(r,i),un(r,i),fn(r,i),mn(r,i),pn(r,i),gn(r,i),vn(r,i),Lt(r,i),cr(r,i),dr(r,i),Ft(r,i),zt(r,i),hr(r,i);break;case"firefox":if(!ar||!sr||!e.shimFirefox)return t("Firefox shim is not included in this adapter release."),n;t("adapter.js shimming firefox."),n.browserShim=ar,Ut(r,i),qt(r,i),or(r,i),sr(r,i),yn(r,i),bn(r,i),_n(r,i),Cn(r,i),En(r,i),Sn(r,i),Tn(r,i),On(r,i),In(r,i),Lt(r,i),dr(r,i),Ft(r,i),zt(r,i);break;case"safari":if(!lr||!e.shimSafari)return t("Safari shim is not included in this adapter release."),n;t("adapter.js shimming safari."),n.browserShim=lr,Ut(r,i),qt(r,i),xn(r,i),Mn(r,i),kn(r,i),An(r,i),Rn(r,i),Pn(r,i),Dn(r,i),Nn(r,i),Lt(r,i),cr(r,i),Ft(r,i),zt(r,i),hr(r,i);break;default:t("Unsupported browser!");break}return n}var wf=Ya({window:typeof window>"u"?void 0:window});bt.production&&void 0;ao().bootstrapModule(Fa,{ngZone:"noop"}).catch(r=>console.error(r));
40
40
 
41
41
  let snippyly;
42
- let snippylyInitInterval;
43
- let snippylyInitTryCount = 0;
44
42
 
45
43
  const log = (...args) => {
46
44
  try {
@@ -94,6 +92,53 @@ const stashPreBootstrapSelfHostedConfig = (config) => {
94
92
  let hasPendingInit = false;
95
93
  let pendingInitSelfHosted;
96
94
 
95
+ // Monotonic id for init() attempts. Every attempt owns a PRIVATE polling timer and try
96
+ // counter (created inside init() below — never shared module state, so concurrent
97
+ // attempts cannot clear each other's timers or inflate each other's retry counts), and
98
+ // stash authority belongs to the LATEST attempt only: a stale attempt's terminal paths
99
+ // (timeout/failure/success) pass their generation to releasePendingInitStashAuthority,
100
+ // which ignores anyone but the current owner. Without this, an older init()'s timeout
101
+ // would delete the stash a NEWER init() just wrote — bootstrap would then use the
102
+ // default Firebase config while the newer init's initConfig applies its selfHosted
103
+ // config (split-brain).
104
+ let initGeneration = 0;
105
+
106
+ // A failed init() must release stash authority: while the SDK is still unloaded, a stale
107
+ // hasPendingInit would make stashFromLoader return early forever, blocking a later
108
+ // loadVelt(config)/loadSnippyly(config) from stashing selfHosted until a full page reload.
109
+ // Only the CURRENT generation may release — see initGeneration above.
110
+ const releasePendingInitStashAuthority = (generation) => {
111
+ if (generation !== initGeneration) {
112
+ // A newer init() has taken over stash authority (and re-stashed its own config);
113
+ // this stale attempt must not clear the newer attempt's state.
114
+ return;
115
+ }
116
+ hasPendingInit = false;
117
+ pendingInitSelfHosted = undefined;
118
+ try {
119
+ // A dead init()'s WINDOW stash must not feed a later bare loadVelt()/loadSnippyly()
120
+ // bootstrap either — otherwise Firebase would silently initialize from the failed
121
+ // init's selfHosted config. Only clear while the app is still unloaded: once
122
+ // bootstrapped, the stash has been consumed (and may legitimately be re-read), and
123
+ // clearing it can no longer prevent anything.
124
+ //
125
+ // `Snippyly.loaded` alone is NOT a safe guard: it flips true only after the app
126
+ // publishes `.snippyly` onto <velt-root>, but the Firebase bootstrap factory
127
+ // (app.module.ts) reads the stash EARLIER, during Angular bootstrap. If any tick
128
+ // already inserted <velt-root>, bootstrap may be in flight right now — deleting
129
+ // the stash in that window would make Firebase fall back to the default
130
+ // environment config and ignore this init()'s pending selfHosted.firebaseConfig.
131
+ // So deletion additionally requires that no <velt-root> exists yet.
132
+ const bootstrapMayBeInFlight = typeof document !== 'undefined'
133
+ && !!(document.querySelector && document.querySelector('velt-root'));
134
+ if (!Snippyly.loaded && !bootstrapMayBeInFlight && typeof window !== 'undefined') {
135
+ delete window['__VELT_PRE_BOOTSTRAP_SELF_HOSTED__'];
136
+ }
137
+ } catch (err) {
138
+ console.warn('Snippyly: ', 'Error in releasePendingInitStashAuthority: ', err);
139
+ }
140
+ }
141
+
97
142
  /**
98
143
  * init()'s pre-bootstrap stash write: authoritative. Overwrites (or CLEARS, when this
99
144
  * init carries no `selfHosted`) whatever an earlier loader call may have stashed, so the
@@ -135,7 +180,12 @@ const stashFromLoader = (config) => {
135
180
  try {
136
181
  const incoming = (config && config.selfHosted) || undefined;
137
182
  if (!Snippyly.loaded && hasPendingInit) {
138
- if (JSON.stringify(incoming) !== JSON.stringify(pendingInitSelfHosted)) {
183
+ // Warn ONLY when the loader actually supplied a selfHosted block that differs
184
+ // from the pending init()'s. A BARE loader call (no config / no selfHosted) is
185
+ // the documented intended flow — init(config) first, then loadVelt() to
186
+ // bootstrap immediately — and must stay silent: the init stash is already in
187
+ // place and the loader has nothing to contribute.
188
+ if (incoming !== undefined && JSON.stringify(incoming) !== JSON.stringify(pendingInitSelfHosted)) {
139
189
  console.warn('Snippyly: ', 'loadVelt()/loadSnippyly() was called with a selfHosted config while an '
140
190
  + 'earlier Velt.init() is still initializing with a different config. The init() config wins; '
141
191
  + 'the loader config is ignored. Pass the same config (or none) to the loader.');
@@ -156,12 +206,15 @@ const stashFromLoader = (config) => {
156
206
  * - the stash the bootstrap consumed (`previousStash`, captured BEFORE this init()
157
207
  * overwrote it) did not already contain this same `firebaseConfig` — i.e. this is not
158
208
  * a benign re-init with an identical config (common with framework re-mounts).
209
+ *
210
+ * Returns true when the warning fired, so the caller can skip the (partially
211
+ * overlapping) split-brain warning below and not double-warn for one mistake.
159
212
  */
160
213
  const warnIfFirebaseConfigCannotApply = (config, previousStash) => {
161
214
  try {
162
215
  const injected = config && config.selfHosted && config.selfHosted.firebaseConfig;
163
216
  if (!injected || !Snippyly.loaded) {
164
- return;
217
+ return false;
165
218
  }
166
219
  const alreadyApplied = previousStash
167
220
  && JSON.stringify(previousStash.firebaseConfig) === JSON.stringify(injected);
@@ -169,9 +222,40 @@ const warnIfFirebaseConfigCannotApply = (config, previousStash) => {
169
222
  console.warn('Snippyly: ', 'selfHosted.firebaseConfig was provided after the SDK already bootstrapped '
170
223
  + '(e.g. loadVelt()/loadSnippyly() ran before init()). The injected Firebase config cannot apply '
171
224
  + 'to this page load — call Velt.init() BEFORE loadVelt()/loadSnippyly(), or remove the manual load call.');
225
+ return true;
172
226
  }
227
+ return false;
173
228
  } catch (err) {
174
229
  console.warn('Snippyly: ', 'Error in warnIfFirebaseConfigCannotApply: ', err);
230
+ return false;
231
+ }
232
+ }
233
+
234
+ /**
235
+ * Loud diagnostic for the REVERSE split-brain: the bootstrap consumed a `selfHosted`
236
+ * stash (e.g. from `loadVelt(config)`), but this init() carries a DIFFERENT (or no)
237
+ * `selfHosted` block. Firebase is already initialized from the bootstrap stash and
238
+ * cannot be re-initialized, while `initConfig` will apply init()'s config to
239
+ * ConfigService/EndpointsService — so Firebase and endpoint routing would point at
240
+ * DIFFERENT backends (e.g. Firebase at customer infra, callables falling back to Velt).
241
+ * The bootstrap is irreversible, so this cannot be prevented here — only made loud;
242
+ * init() remains authoritative for initConfig, exactly as documented above.
243
+ */
244
+ const warnIfBootstrapStashDiverges = (config, previousStash) => {
245
+ try {
246
+ if (!Snippyly.loaded || !previousStash) {
247
+ return;
248
+ }
249
+ const incoming = (config && config.selfHosted) || undefined;
250
+ if (JSON.stringify(previousStash) !== JSON.stringify(incoming)) {
251
+ console.warn('Snippyly: ', 'The SDK bootstrapped with a selfHosted config (e.g. passed to '
252
+ + 'loadVelt()/loadSnippyly()) that differs from the config now passed to init(). Firebase is '
253
+ + 'already initialized from the bootstrap config and cannot be re-initialized, but init()\'s '
254
+ + 'config is what endpoint routing will use — Firebase and cloud-function endpoints may now '
255
+ + 'point at DIFFERENT backends. Pass the SAME config (including selfHosted) to both calls.');
256
+ }
257
+ } catch (err) {
258
+ console.warn('Snippyly: ', 'Error in warnIfBootstrapStashDiverges: ', err);
175
259
  }
176
260
  }
177
261
 
@@ -183,9 +267,17 @@ export const Snippyly = {
183
267
  loaded: false,
184
268
  init: (apiKey, config) => {
185
269
  return new Promise((resolve, reject) => {
270
+ // This attempt becomes the LATEST init(): it takes stash authority (its
271
+ // stashFromInit below overwrites any earlier stash) and any OLDER pending
272
+ // attempt is demoted — the generation guard in
273
+ // releasePendingInitStashAuthority makes the older attempt's terminal paths
274
+ // inert against this attempt's state.
275
+ const generation = ++initGeneration;
186
276
  try {
187
277
  const previousStash = (typeof window !== 'undefined') ? window['__VELT_PRE_BOOTSTRAP_SELF_HOSTED__'] : undefined;
188
- warnIfFirebaseConfigCannotApply(config, previousStash);
278
+ if (!warnIfFirebaseConfigCannotApply(config, previousStash)) {
279
+ warnIfBootstrapStashDiverges(config, previousStash);
280
+ }
189
281
  stashFromInit(config);
190
282
  if (Snippyly.loaded) {
191
283
  log('Snippyly: init - loaded!');
@@ -194,24 +286,34 @@ export const Snippyly = {
194
286
  resolve(Snippyly);
195
287
  } else {
196
288
 
197
- // Try to init snippyly in intervals
198
- // Once Snippyly is initialized, clear the intervals
199
- snippylyInitInterval = setInterval(() => {
200
- snippylyInitTryCount++;
201
- if (snippylyInitTryCount > 10) {
289
+ // Try to init snippyly in intervals; once it initializes, the tick
290
+ // clears its own timer. Timer handle and try count are PRIVATE to
291
+ // this attempt (see initGeneration above).
292
+ let tryCount = 0;
293
+ const intervalHandle = setInterval(() => {
294
+ tryCount++;
295
+ if (tryCount > 10) {
202
296
  log('Snippyly: init - iniSnippyly did not work in 10 times!');
203
- clearInterval(snippylyInitInterval);
297
+ clearInterval(intervalHandle);
204
298
  // This init() will never reach initConfig — release stash
205
299
  // authority so a later manual loader config can apply.
206
- hasPendingInit = false;
207
- pendingInitSelfHosted = undefined;
300
+ releasePendingInitStashAuthority(generation);
208
301
  reject('Snippyly: init - iniSnippyly did not work in 10 times!');
302
+ // MUST stop here: falling through to initSnippyly on this final
303
+ // tick could bootstrap the app AFTER the reject — with the stash
304
+ // just cleared — so Firebase would initialize from the default
305
+ // environment while initConfig applies this init()'s selfHosted
306
+ // config (split-brain), and initConfig would run post-rejection.
307
+ return;
209
308
  }
210
- initSnippyly(apiKey, config, resolve, reject);
309
+ initSnippyly(apiKey, config, generation, intervalHandle, tryCount, resolve, reject);
211
310
  }, 500);
212
311
  }
213
312
  } catch (err) {
214
313
  console.warn('Snippyly: ', 'Snippyly: init - error!', err);
314
+ // This init() failed before reaching initConfig — release stash authority
315
+ // so a later loadVelt(config)/loadSnippyly(config) can stash selfHosted.
316
+ releasePendingInitStashAuthority(generation);
215
317
  reject(err);
216
318
  }
217
319
  });
@@ -230,16 +332,18 @@ export const Snippyly = {
230
332
  },
231
333
  };
232
334
 
233
- const initSnippyly = (apiKey, config, resolve, reject) => {
234
- log('Snippyly: init - iniSnippyly Interval count:', snippylyInitTryCount);
335
+ const initSnippyly = (apiKey, config, generation, intervalHandle, tryCount, resolve, reject) => {
336
+ log('Snippyly: init - iniSnippyly Interval count:', tryCount);
235
337
  if (window && document && document.body) {
236
338
  log('Snippyly: init - iniSnippyly Interval found document and window!');
237
339
  onWindowLoad();
238
340
  if (Snippyly.loaded) {
239
- clearInterval(snippylyInitInterval);
341
+ clearInterval(intervalHandle);
240
342
  try {
241
343
  Snippyly.initConfig(apiKey, config);
242
- log('Snippyly: init - initSnippyly - Snippyly loaded in try:', snippylyInitTryCount);
344
+ // The pending init() has been consumed release stash authority.
345
+ releasePendingInitStashAuthority(generation);
346
+ log('Snippyly: init - initSnippyly - Snippyly loaded in try:', tryCount);
243
347
  // Dispatch onVeltLoad event
244
348
  window.dispatchEvent(new CustomEvent('onVeltLoad', {
245
349
  detail: {
@@ -251,6 +355,10 @@ const initSnippyly = (apiKey, config, resolve, reject) => {
251
355
  }
252
356
  } catch (err) {
253
357
  console.warn('Snippyly: ', 'Snippyly: init - initSnippyly - error in initConfig:', err);
358
+ // initConfig failed — this init() no longer owns the pending stash.
359
+ // (The app is loaded at this point so the loader guard is already inert,
360
+ // but the state must not leak into a future teardown/re-init cycle.)
361
+ releasePendingInitStashAuthority(generation);
254
362
  if (reject) {
255
363
  reject(err);
256
364
  }