@camera.ui/nvr 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -0
- package/dist/assets/nvrPlayback.worker-CjAx0s9z.js +90 -0
- package/dist/index.css +2 -0
- package/dist/index.d.ts +1434 -0
- package/dist/index.js +1 -0
- package/package.json +101 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Fragment as e,Transition as t,computed as n,createBlock as r,createCommentVNode as i,createElementBlock as a,createElementVNode as o,createTextVNode as s,createVNode as c,defineComponent as l,effectScope as u,inject as d,isRef as f,markRaw as p,nextTick as m,normalizeClass as h,normalizeStyle as g,onBeforeUnmount as _,onMounted as v,openBlock as y,provide as b,reactive as x,readonly as S,ref as C,renderList as w,renderSlot as T,resolveDynamicComponent as E,shallowRef as D,toDisplayString as O,toRefs as k,toValue as A,unref as j,useTemplateRef as M,vShow as N,watch as P,watchEffect as ee,withCtx as F,withDirectives as I,withModifiers as L}from"vue";import R from"primevue/skeleton";import te from"primevue/progressspinner";import{useCameraUi as ne,useCoreManager as z,usePlugin as B,useTabVisibility as V}from"@camera.ui/browser";import H from"primevue/button";import U from"primevue/card";import re from"primevue/datepicker";import ie from"primevue/popover";import ae from"primevue/selectbutton";import oe from"primevue/slider";import{useI18n as se}from"vue-i18n";import{DETECTION_ATTRIBUTES as ce,DETECTION_LABELS as le,PluginInterface as ue}from"@camera.ui/sdk";import{tryOnScopeDispose as de,useDateFormat as fe,useElementSize as pe,useEventListener as W,useIntervalFn as me,useTimeoutFn as he,watchThrottled as ge}from"@vueuse/core";var _e=Symbol(`camera-ui-nvr`);function ve(){let e=d(_e);if(!e)throw Error(`useNvrCtx(): NVR plugin not installed — call app.use(createNvrPlugin({ ... })) first`);return e}function ye(e){let{natsTransport:t,target:n,wsTransport:r,workerBridge:i,workerRegistry:a}=e;function o(e){a.has(e)||(a.add(e),i.syncHost(e))}function s(e){a.delete(e);try{e.postMessage({type:`nvr-destroy`})}catch{}}function c(){for(let e of a)try{e.postMessage({type:`nvr-force-reconnect`})}catch{}}function l(e){for(let t of a)try{t.postMessage({type:`nvr-suspend`,keepNats:e.keepNats})}catch{}}function u(){for(let e of a)try{e.postMessage({type:`nvr-resume`})}catch{}}return{natsTransport:t,target:n,wsTransport:r,registerWorker:o,unregisterWorker:s,forceReconnectAll:c,suspendAll:l,resumeAll:u}}function be(e){return{install(t){t.provide(_e,ye(e))}}}var xe=`__other__`,Se={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ce(e,t){return y(),a(`svg`,Se,[...t[0]||=[o(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M16 18a2 2 0 0 1 2 2a2 2 0 0 1 2-2a2 2 0 0 1-2-2a2 2 0 0 1-2 2m0-12a2 2 0 0 1 2 2a2 2 0 0 1 2-2a2 2 0 0 1-2-2a2 2 0 0 1-2 2M9 18a6 6 0 0 1 6-6a6 6 0 0 1-6-6a6 6 0 0 1-6 6a6 6 0 0 1 6 6`},null,-1)]])}var we=p({name:`tabler-sparkles`,render:Ce}),Te={viewBox:`0 0 20 20`,width:`1.2em`,height:`1.2em`};function Ee(e,t){return y(),a(`svg`,Te,[...t[0]||=[o(`path`,{fill:`currentColor`,"fill-rule":`evenodd`,d:`M14.707 12.707a1 1 0 0 1-1.414 0L10 9.414l-3.293 3.293a1 1 0 0 1-1.414-1.414l4-4a1 1 0 0 1 1.414 0l4 4a1 1 0 0 1 0 1.414`,"clip-rule":`evenodd`},null,-1)]])}var De=p({name:`heroicons-solid-chevron-up`,render:Ee}),Oe={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ke(e,t){return y(),a(`svg`,Oe,[...t[0]||=[o(`path`,{fill:`currentColor`,d:`M7.46 13.655q-.23-.23-.23-.54t.23-.539t.54-.23t.54.23t.23.54t-.23.539t-.54.23t-.54-.23m4 0q-.23-.23-.23-.54t.23-.539t.54-.23t.54.23t.23.54t-.23.539t-.54.23t-.54-.23m4 0q-.23-.23-.23-.54t.23-.539t.54-.23t.54.23t.23.54t-.23.539t-.54.23t-.54-.23M5.617 21q-.691 0-1.153-.462T4 19.385V6.615q0-.69.463-1.152T5.616 5h1.769V3.308q0-.233.153-.386t.385-.153t.386.153t.153.386V5h7.154V3.27q0-.214.143-.358t.357-.143t.356.143t.144.357V5h1.769q.69 0 1.153.463T20 6.616v12.769q0 .69-.462 1.153T18.384 21zm0-1h12.769q.23 0 .423-.192t.192-.424v-8.768H5v8.769q0 .23.192.423t.423.192M5 9.615h14v-3q0-.23-.192-.423T18.384 6H5.616q-.231 0-.424.192T5 6.616zm0 0V6z`},null,-1)]])}var Ae=p({name:`material-symbols-light-date-range-outline-rounded`,render:ke}),je={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Me(e,t){return y(),a(`svg`,je,[...t[0]||=[o(`path`,{fill:`currentColor`,d:`M9 11.75A1.25 1.25 0 0 0 7.75 13A1.25 1.25 0 0 0 9 14.25A1.25 1.25 0 0 0 10.25 13A1.25 1.25 0 0 0 9 11.75m6 0A1.25 1.25 0 0 0 13.75 13A1.25 1.25 0 0 0 15 14.25A1.25 1.25 0 0 0 16.25 13A1.25 1.25 0 0 0 15 11.75M12 2A10 10 0 0 0 2 12a10 10 0 0 0 10 10a10 10 0 0 0 10-10A10 10 0 0 0 12 2m0 18a8 8 0 0 1-8-8a4 4 0 0 1 0-.86a10.05 10.05 0 0 0 5.26-5.37A9.99 9.99 0 0 0 17.42 10c.76 0 1.51-.09 2.25-.26c1.25 4.26-1.17 8.69-5.41 9.93c-.76.22-1.5.33-2.26.33M0 2a2 2 0 0 1 2-2h4v2H2v4H0zm24 20a2 2 0 0 1-2 2h-4v-2h4v-4h2zM2 24a2 2 0 0 1-2-2v-4h2v4h4v2zM22 0a2 2 0 0 1 2 2v4h-2V2h-4V0z`},null,-1)]])}var Ne=p({name:`mdi-face-recognition`,render:Me}),Pe={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Fe(e,t){return y(),a(`svg`,Pe,[...t[0]||=[o(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M3 12h4l3 8l4-16l3 8h4`},null,-1)]])}var Ie=p({name:`tabler-activity`,render:Fe}),Le={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Re(e,t){return y(),a(`svg`,Le,[...t[0]||=[o(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M10 5a2 2 0 0 1 4 0a7 7 0 0 1 4 6v3a4 4 0 0 0 2 3H4a4 4 0 0 0 2-3v-3a7 7 0 0 1 4-6M9 17v1a3 3 0 0 0 6 0v-1m6-10.273A11.05 11.05 0 0 0 18.206 3M3 6.727A11.05 11.05 0 0 1 5.792 3`},null,-1)]])}var ze=p({name:`tabler-bell-ringing`,render:Re}),Be={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ve(e,t){return y(),a(`svg`,Be,[...t[0]||=[o(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M3 12h1m8-9v1m8 8h1M5.6 5.6l.7.7m12.1-.7l-.7.7M9 16a5 5 0 1 1 6 0a3.5 3.5 0 0 0-1 3a2 2 0 0 1-4 0a3.5 3.5 0 0 0-1-3m.7 1h4.6`},null,-1)]])}var He=p({name:`tabler-bulb`,render:Ve}),Ue={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function We(e,t){return y(),a(`svg`,Ue,[...t[0]||=[o(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[o(`path`,{d:`M5 17a2 2 0 1 0 4 0a2 2 0 1 0-4 0m10 0a2 2 0 1 0 4 0a2 2 0 1 0-4 0`}),o(`path`,{d:`M5 17H3v-6l2-5h9l4 5h1a2 2 0 0 1 2 2v4h-2m-4 0H9m-6-6h15m-6 0V6`})],-1)]])}var Ge=p({name:`tabler-car`,render:We}),G={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ke(e,t){return y(),a(`svg`,G,[...t[0]||=[o(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[o(`path`,{d:`M11 5h2m6 7q-1 8-5 8h-4q-4 0-5-8`}),o(`path`,{d:`M11 16q0 1 1 1c1 0 1-.333 1-1zm1 2v2m-2-9v.01m4-.01v.01M5 4l6 .97l-6.238 6.688a1.02 1.02 0 0 1-1.41.111a.95.95 0 0 1-.327-.954zm14 0l-6 .97l6.238 6.688c.358.408.989.458 1.41.111a.95.95 0 0 0 .327-.954z`})],-1)]])}var qe=p({name:`tabler-dog`,render:Ke}),Je={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function K(e,t){return y(),a(`svg`,Je,[...t[0]||=[o(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M14 12v.01M3 21h18M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16`},null,-1)]])}var Ye=p({name:`tabler-door`,render:K}),Xe={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ze(e,t){return y(),a(`svg`,Xe,[...t[0]||=[o(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M15 21H6a3 3 0 0 1-3-3v-1h10v2a2 2 0 0 0 4 0V5a2 2 0 1 1 2 2h-2m2-4H8a3 3 0 0 0-3 3v11M9 7h4m-4 4h4`},null,-1)]])}var Qe=p({name:`tabler-license`,render:Ze}),$e={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function et(e,t){return y(),a(`svg`,$e,[...t[0]||=[o(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m12 3l8 4.5v9L12 21l-8-4.5v-9zm0 9l8-4.5M12 12v9m0-9L4 7.5m12-2.25l-8 4.5`},null,-1)]])}var tt=p({name:`tabler-package`,render:et}),nt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function rt(e,t){return y(),a(`svg`,nt,[...t[0]||=[o(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[o(`path`,{d:`M12 3a12 12 0 0 0 8.5 3A12 12 0 0 1 12 21A12 12 0 0 1 3.5 6A12 12 0 0 0 12 3`}),o(`path`,{d:`M11 11a1 1 0 1 0 2 0a1 1 0 1 0-2 0m1 1v2.5`})],-1)]])}var it=p({name:`tabler-shield-lock`,render:rt}),at={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ot(e,t){return y(),a(`svg`,at,[...t[0]||=[o(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[o(`path`,{d:`M18 8a3 3 0 0 1 0 6m-8-6v11a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1v-5`}),o(`path`,{d:`m12 8l4.524-3.77A.9.9 0 0 1 18 4.922v12.156a.9.9 0 0 1-1.476.692L12 14H4a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1z`})],-1)]])}var st=p({name:`tabler-speakerphone`,render:ot}),ct={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function lt(e,t){return y(),a(`svg`,ct,[...t[0]||=[o(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[o(`path`,{d:`M6.5 7.5a1 1 0 1 0 2 0a1 1 0 1 0-2 0`}),o(`path`,{d:`M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592-5.592a2.41 2.41 0 0 0 0-3.408l-7.71-7.71A2 2 0 0 0 11.172 3H6a3 3 0 0 0-3 3`})],-1)]])}var ut=p({name:`tabler-tag`,render:lt}),dt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ft(e,t){return y(),a(`svg`,dt,[...t[0]||=[o(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[o(`path`,{d:`M6 12a2 2 0 1 0 4 0a2 2 0 1 0-4 0`}),o(`path`,{d:`M2 12a6 6 0 0 1 6-6h8a6 6 0 0 1 6 6a6 6 0 0 1-6 6H8a6 6 0 0 1-6-6`})],-1)]])}var pt=p({name:`tabler-toggle-left`,render:ft}),mt={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ht(e,t){return y(),a(`svg`,mt,[...t[0]||=[o(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M8 7a4 4 0 1 0 8 0a4 4 0 0 0-8 0M6 21v-2a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v2`},null,-1)]])}var gt=p({name:`tabler-user`,render:ht}),_t={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function vt(e,t){return y(),a(`svg`,_t,[...t[0]||=[o(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M15 8a5 5 0 0 1 0 8m2.7-11a9 9 0 0 1 0 14M6 15H4a1 1 0 0 1-1-1v-4a1 1 0 0 1 1-1h2l3.5-4.5A.8.8 0 0 1 11 5v14a.8.8 0 0 1-1.5.5z`},null,-1)]])}var yt=p({name:`tabler-volume`,render:vt}),bt;function xt(){return bt||=[...ce,`person`,`vehicle`,`animal`,`package`,`contact`,`doorbell`,`switch`,`light`,`siren`,`security_system`,`audio`,`motion`],bt}function St(e){let t=[];for(let n=0;n<e.segments.length;n++){let r=e.segments[n];if(!r)continue;let i=!1;for(let a=0;a<r.detections.length;a++){let o=r.detections[a],s=q(o.thumbnail);s&&(i=!0,t.push({key:`${e.id}:detection:${n}:${a}:${o.label}`,event:e,type:o.label,thumbnailUrl:s,score:o.score,box:o.box}))}for(let a=0;a<r.attributes.length;a++){let o=r.attributes[a],s=q(o.thumbnail);s&&(i=!0,t.push({key:`${e.id}:attr:${n}:${a}:${o.type}:${o.label}`,event:e,type:o.type,label:o.label,thumbnailUrl:s}))}if(!i){let i=q(r.thumbnail);if(i){let a=Ct(r,e);t.push({key:`${e.id}:scene:${n}`,event:e,type:a,thumbnailUrl:i,score:r.detections[0]?.score})}}}return t}function Ct(e,t){return e.detections.length>0?e.detections[0].label:wt(t)}function wt(e){for(let t of xt())if(e.types.includes(t))return t;return e.types[0]??`motion`}function Tt(e){let t=0;for(let n of e.segments)for(let e of n.detections)e.score>t&&(t=e.score);for(let n of e.triggers)n.score!=null&&n.score>t&&(t=n.score);return t}function Et(e){for(let t of e.segments){for(let e of ce){let n=t.attributes.find(t=>t.type===e);if(n)return n.label}if(t.attributes.length>0)return t.attributes[0].label}}var Dt=new WeakMap;function q(e){if(!e||e.length===0)return;let t=Dt.get(e);return t||(t=URL.createObjectURL(new Blob([e],{type:`image/jpeg`})),Dt.set(e,t)),t}function Ot(e){if(!e)return;let t=e=>{if(!e)return;let t=Dt.get(e);t&&(URL.revokeObjectURL(t),Dt.delete(e))};if(t(e.event),e.scenes)for(let n of Object.values(e.scenes))t(n);if(e.detections)for(let n of Object.values(e.detections))t(n);if(e.attributes)for(let n of Object.values(e.attributes))t(n)}var kt=new Set([`motion`,`audio`]),At;function jt(){return At||=le.filter(e=>!kt.has(e)),At}function Mt(e,t){let n=wt(t),r=Et(t);if(e.attributes){let t=Object.entries(e.attributes);for(let e of ce){let n=t.find(([t])=>{let n=t.indexOf(`:`);if(n<0)return!1;let r=t.substring(0,n);return r===e||e===`license_plate`&&r===`plate`});if(n){let t=n[0].indexOf(`:`);return{url:q(n[1]),type:e,label:n[0].substring(t+1)}}}if(t.length>0){let[e,n]=t[0],r=e.indexOf(`:`),i=r>=0?e.substring(0,r):e,a=r>=0?e.substring(r+1):``;return{url:q(n),type:i,label:a}}}if(e.scenes){let t=Object.keys(e.scenes).sort((e,t)=>Number(e)-Number(t));if(t.length>0){let i=q(e.scenes[t[0]]);if(i)return{url:i,type:n,label:r}}}if(e.detections){for(let t of jt())for(let[n,r]of Object.entries(e.detections))if(n.endsWith(`:${t}`))return{url:q(r),type:t};let t=Object.entries(e.detections);if(t.length>0){let[e,n]=t[0],r=e.includes(`:`)?e.split(`:`).slice(1).join(`:`):e;return{url:q(n),type:r}}}if(e.event){let t=q(e.event);if(t)return{url:t,type:n,label:r}}return{type:n,label:r}}function Nt(e){for(let t of e.segments){let e=q(t.thumbnail);if(e)return e;for(let e of t.detections){let t=q(e.thumbnail);if(t)return t}}}var J=new Map,Pt=2e3,Y=new Map,Ft=500,It=C(0),Lt=C(new Set),Rt=new Map,zt,Bt=0,X,Vt=5e3,Ht,Z=!1,Ut=new Set,Wt=null,Gt=0,Kt=new Map,qt=new Map;function Jt(e,t){let n=qt.get(e);for(let r of t){if(n?.has(r))continue;let t=Kt.get(r);t||(t=new Set,Kt.set(r,t)),t.add(e)}if(n)for(let r of n){if(t.has(r))continue;let n=Kt.get(r);n&&(n.delete(e),n.size===0&&Kt.delete(r))}qt.set(e,new Set(t))}function Yt(e){let t=qt.get(e);if(t){for(let n of t){let t=Kt.get(n);t&&(t.delete(e),t.size===0&&Kt.delete(n))}qt.delete(e)}}function Xt(e,t){let n={},r=!1,i=String(t);e.thumbnail&&(n.scenes={[i]:e.thumbnail},r=!0);for(let i of e.detections??[])i.thumbnail&&i.label&&(n.detections||={},n.detections[`${t}:${i.label}`]=i.thumbnail,r=!0);for(let t of e.attributes??[])t.thumbnail&&t.label&&(n.attributes||={},n.attributes[`${t.type}:${t.label}`]=t.thumbnail,r=!0);return r?n:null}function Zt(e,t){let n=Y.get(e);if(n){let r={...n};if(t.scenes){if(n.scenes)for(let e of Object.keys(t.scenes)){let t=n.scenes[e];t&&Ot({scenes:{[e]:t}})}r.scenes={...n.scenes,...t.scenes}}if(t.detections){if(n.detections)for(let e of Object.keys(t.detections)){let t=n.detections[e];t&&Ot({detections:{[e]:t}})}r.detections={...n.detections,...t.detections}}if(t.attributes){if(n.attributes)for(let e of Object.keys(t.attributes)){let t=n.attributes[e];t&&Ot({attributes:{[e]:t}})}r.attributes={...n.attributes,...t.attributes}}Y.set(e,r);return}if(Y.size>=Ft){let e=Y.keys().next().value;if(e!==void 0){let t=Y.get(e);t&&Ot(t),Y.delete(e)}}Y.set(e,t)}function Qt(e){if(Lt.value.size>0&&!Lt.value.has(e.data.cameraId))return;let{type:t,data:n}=e,r=J.get(n.id);if(t===`start`){J.set(n.id,{...n,segments:[]}),It.value++;return}if(t===`update`){r&&(r.lastUpdate=n.lastUpdate,r.triggers=n.triggers,r.expectedEndTime=n.expectedEndTime),It.value++;return}if(t===`end`){r?(r.state=n.state,r.endTime=n.endTime,r.lastUpdate=n.lastUpdate,r.segments=[]):J.set(n.id,{...n}),It.value++;return}if(r?.state===`ended`)return;let i=n.segments?.[0];if(!i)return;let a=n.segmentIndex??0,o=Xt(i,a);o&&Zt(n.id,o);let s=r??{...n,segments:[]};r||J.set(n.id,s),s.types=n.types,s.triggers=n.triggers,s.lastUpdate=n.lastUpdate;let c={...i,thumbnail:void 0,detections:i.detections?.map(e=>({...e,thumbnail:void 0})),attributes:i.attributes?.map(e=>({...e,thumbnail:void 0}))};(t===`segment-start`||t===`segment-update`||t===`segment-end`)&&(s.segments[a]=c),It.value++}function $t(){X&&=(clearTimeout(X),void 0),zt?.(),zt=void 0,Bt=0,Ut.clear(),Wt=null,J.clear();for(let e of Y.values())Ot(e);Y.clear(),Rt.clear(),Kt.clear(),qt.clear(),Lt.value=new Set,It.value=0,Gt++}async function Q(){if(X&&=(clearTimeout(X),void 0),zt)return;let e=Ht?.value;if(e)try{zt=await e.subscribe(`camera.*.events.subject`,e=>{Qt(e);for(let t of Ut)t(e)})}catch(e){console.warn(`[useEventStore] NATS subscription failed:`,e)}}function en(){zt?.(),zt=void 0}function tn(e=`@camera.ui/camera-ui-nvr`){let{rpc:t,isConnected:n,on:r}=ne(),{plugin:i}=B(e);Ht=t,Z||(Z=!0,r(`reconnected`,()=>{Bt>0&&(en(),Q())}));let a=Gt,o=Symbol(`eventStoreInstance`);Bt++;let s=P(n,e=>{a===Gt&&e&&Bt>0&&!zt&&Q()},{immediate:!0});function c(e){return J.get(e)}function l(e){let t=!1;for(let n of e){let e=J.get(n.id);(!e||n.lastUpdate>=e.lastUpdate)&&(J.set(n.id,n),t=!0)}if(J.size>Pt){let e=J.size-Pt,t=[];for(let e of J.values())Kt.has(e.id)||t.push({id:e.id,startTime:e.startTime});if(t.length>0){t.sort((e,t)=>e.startTime-t.startTime);let n=Math.min(e,t.length);for(let e=0;e<n;e++)J.delete(t[e].id)}}t&&It.value++}async function u(e,t,n){let r=Y.get(e);if(r)return r;let a=Rt.get(e);if(a)return a;let o=(async()=>{let r=i.value;if(!r)return null;try{let i=await r.getEventThumbnails(t,n,e);if(i)return Zt(e,i),i}catch(t){console.warn(`[useEventStore] Failed to load thumbnails for event`,e,t)}return null})();Rt.set(e,o);try{return await o}finally{Rt.delete(e)}}function d(e){return Y.get(e)}function f(e){return Ut.add(e),()=>{Ut.delete(e)}}async function p(){if(Wt)return Wt;Wt=(async()=>{let e=i.value;if(e)try{let t=await e.getManagedCameraIds();Lt.value=new Set(t)}catch{}})();try{await Wt}finally{Wt=null}}function m(e){a===Gt&&Jt(o,e)}function h(){s(),a===Gt&&(Yt(o),Bt--,Bt<=0&&(Bt=0,X&&clearTimeout(X),X=setTimeout(()=>{Bt<=0&&en(),X=void 0},Vt)))}return{storeVersion:It,managedCameraIds:Lt,getEvent:c,upsertEvents:l,loadThumbnails:u,getCachedThumbnails:d,onNatsMessage:f,refreshManagedCameraIds:p,pinEvents:m,dispose:h}}var nn=3,rn=6,an=600*1e3,on=7200*1e3,sn=150,cn=3600*1e3;function ln(e,t,n){let r=String(t);if(e.scenes?.[r]){let t=q(e.scenes[r]);if(t)return t}if(e.detections)for(let r of n){let n=`${t}:${r}`;if(e.detections[n]){let t=q(e.detections[n]);if(t)return t}}}function un(e){let t=[],n=e.state===`active`,r=n?Date.now():e.endTime??e.lastUpdate,i=Math.max((r-e.startTime)/1e3,+!!n);if(i>0){let r=e.triggers.map(e=>e.type),a=[...new Set(r)];t.push({id:`${e.id}:trigger`,timestamp:e.startTime,duration:i,types:a.length>0?a:[`motion`],isActive:n||void 0,expectedEndMs:e.expectedEndTime})}for(let i=0;i<e.segments.length;i++){let a=e.segments[i];if(!a)continue;let o=i===e.segments.length-1,s=((n&&o&&r-a.lastSeen<=1e4?r:a.lastSeen)-a.firstSeen)/1e3,c=[];for(let e of a.detections)c.includes(e.label)||c.push(e.label);for(let e of a.attributes)c.includes(e.type)||c.push(e.type);if(c.length===0)continue;let l;if(l=q(a.thumbnail),!l){for(let e of a.detections)if(l=q(e.thumbnail),l)break}t.push({id:`${e.id}:seg:${i}`,timestamp:a.firstSeen,duration:Math.max(s,1),types:c,thumbnail:l,description:a.description})}return t}function dn(e,t){let n=new Map,r=e=>`${e.cameraId??``}|${e.startTime}-${e.endTime}`;for(let t of e)n.set(r(t),t);for(let e of t)n.set(r(e),e);return[...n.values()].sort((e,t)=>t.startTime-e.startTime)}function fn(e,t){let n=new Map;for(let t of e)n.set(t.id,t);let r=!1;for(let e of t){let t=n.get(e.id);t?t.thumbnail&&!e.thumbnail?(t.duration!==e.duration||t.types.length!==e.types.length)&&(n.set(e.id,{...e,thumbnail:t.thumbnail}),r=!0):(e.thumbnail!==t.thumbnail||e.duration!==t.duration||e.types.length!==t.types.length)&&(n.set(e.id,e),r=!0):(n.set(e.id,e),r=!0)}return r?[...n.values()].sort((e,t)=>t.timestamp-e.timestamp):e}function pn(e){let{cameraIds:t,currentTimeMs:r,timeMsPerPx:i,viewportPx:a,initialTimestamp:o}=e,{plugin:s,isLoading:c}=B(`@camera.ui/camera-ui-nvr`),l=tn(`@camera.ui/camera-ui-nvr`),u=D([]),d=D([]),f=D([]),p=C(!1),m=C(!1),h=C(0),g=C(0),_=null,v,y=new Set,b=new Map,x=1e3;function S(e){if(b.has(e))return;let t=setInterval(()=>{let t=d.value,n=t.findIndex(t=>t.id===e);if(n<0){T(e);return}let r=t[n],i=(Date.now()-r.timestamp)/1e3;if(i>r.duration+10){T(e);return}let a=[...t];a[n]={...r,duration:i},d.value=a},x);b.set(e,t)}function w(e){if(b.has(e))return;let t=setInterval(()=>{let t=d.value,n=t.findIndex(t=>t.id===e);if(n<0){T(e);return}let r=t[n],i=Date.now(),a=r.expectedEndMs;if(a&&i>=a){let i=(a-r.timestamp)/1e3,o=[...t];o[n]={...r,duration:i},d.value=o,T(e);return}let o=(i-r.timestamp)/1e3,s=[...t];s[n]={...r,duration:o},d.value=s},x);b.set(e,t)}function T(e){let t=b.get(e);t&&(clearInterval(t),b.delete(e))}function E(e){let t=`${e}:`;for(let[e,n]of b)e.startsWith(t)&&(clearInterval(n),b.delete(e))}function O(){for(let[,e]of b)clearInterval(e);b.clear()}async function k(e){let t=e.filter(e=>e.segments.length>0);if(t.length===0)return;let n=!1,r=new Map(d.value.map(e=>[e.id,e])),i=[];for(let e of t){let t=l.getCachedThumbnails(e.id);if(t)for(let i=0;i<e.segments.length;i++){let a=`${e.id}:seg:${i}`,o=r.get(a);if(o&&!o.thumbnail){let e=ln(t,i,o.types);e&&(r.set(a,{...o,thumbnail:e}),n=!0)}}else y.has(e.id)||i.push(e)}if(n&&(d.value=[...r.values()].sort((e,t)=>t.timestamp-e.timestamp)),i.length===0)return;let a=await Promise.allSettled(i.map(async e=>(y.add(e.id),{event:e,thumbs:await l.loadThumbnails(e.id,e.cameraId,e.startTime)})));n=!1;let o=new Map(d.value.map(e=>[e.id,e]));for(let e of a){if(e.status!==`fulfilled`||!e.value.thumbs)continue;let{event:t,thumbs:r}=e.value;for(let e=0;e<t.segments.length;e++){let i=`${t.id}:seg:${e}`,a=o.get(i);if(a&&!a.thumbnail){let t=ln(r,e,a.types);t&&(o.set(i,{...a,thumbnail:t}),n=!0)}}}n&&(d.value=[...o.values()].sort((e,t)=>t.timestamp-e.timestamp))}async function A(e,n){let r=s.value;if(!r)return;let i=t.value.filter(e=>l.managedCameraIds.value.has(e));if(i.length===0||(n=Math.min(n,Date.now()),e>=n))return;p.value=!0;let a=[];try{let t=(async()=>{try{let t=(await r.getCameraEvents(i,{startMs:Math.floor(e),endMs:Math.ceil(n),limit:200})).events??[];a.push(...t),l.upsertEvents(t);let o=t.flatMap(e=>un(e));return d.value=fn(d.value,o),!0}catch(e){return console.warn(`[timeline] Failed to load events:`,e),!1}})(),o=(async()=>{let t=await Promise.all(i.map(async t=>{try{return{ok:!0,segs:(await r.getRecordingSegments(t,e,n)??[]).map(e=>({...e,cameraId:t}))}}catch(e){return console.warn(`[timeline] Failed to load recordings for ${t}:`,e),{ok:!1,segs:[]}}})),a=t.flatMap(e=>e.segs);return u.value=dn(u.value,a),t.some(e=>e.ok)})(),[s,c]=await Promise.all([t,o]);if(!s&&!c)return;h.value===0&&g.value===0?(h.value=e,g.value=n):(h.value=Math.min(h.value,e),g.value=Math.max(g.value,n))}catch(e){console.warn(`[timeline] Failed to load events:`,e)}finally{p.value=!1,m.value=!0}a.length>0&&k(a);for(let e of a)if(e.state===`active`&&(w(`${e.id}:trigger`),e.segments.length>0)){let t=e.segments[e.segments.length-1];e.lastUpdate-t.lastSeen<=1e4&&S(`${e.id}:seg:${e.segments.length-1}`)}}function j(e,t){let n=()=>A(e,t).finally(()=>{_=null});_=_?_.then(n):n()}function M(){return a.value*i.value}function N(){let e=M();return e<=0?on:Math.min(on,Math.max(an,e*nn))}function ee(){let e=M();return e<=0?on*2:Math.min(on*2,Math.max(an*2,e*rn))}function F(e){let t=ee(),n=e-t,r=e+t,i=u.value.filter(e=>e.endTime>=n&&e.startTime<=r);i.length!==u.value.length&&(u.value=i);let a=d.value.filter(e=>e.timestamp+e.duration*1e3>=n&&e.timestamp<=r);a.length!==d.value.length&&(d.value=a);let o=f.value.filter(e=>(e.duration?e.timestamp+e.duration:e.timestamp)>=n&&e.timestamp<=r);o.length!==f.value.length&&(f.value=o),h.value<n&&(h.value=n),g.value>r&&(g.value=r)}function I(){if(h.value===0&&g.value===0)return;let e=r.value,t=N(),n=M()/2,i=e-n-t,a=Math.min(e+n+t,Date.now()),o=6e4;h.value-i>o&&j(i,h.value),a-g.value>o&&j(g.value,a),F(e)}function L(e){let n=t.value;if(n.length===0||!n.includes(e.data.cameraId))return;let r=un(l.getEvent(e.data.id)??e.data),i=l.getCachedThumbnails(e.data.id);if(i)for(let e of r){if(!e.id.includes(`:seg:`)||e.thumbnail)continue;let t=e.id.split(`:seg:`)[1],n=ln(i,t==null?0:parseInt(t,10),e.types);n&&(e.thumbnail=n)}d.value=fn(d.value,r);let a=e.type,o=e.data.id;if(a===`start`)w(`${o}:trigger`);else if(a===`update`)w(`${o}:trigger`);else if(a===`segment-start`)S(`${o}:seg:${e.data.segmentIndex??0}`);else if(a===`segment-update`){let t=`${o}:seg:${e.data.segmentIndex??0}`;T(t),S(t)}else a===`segment-end`?T(`${o}:seg:${e.data.segmentIndex??0}`):a===`end`&&E(o)}function R(){v||=l.onNatsMessage(L)}function te(){v?.(),v=void 0,O()}R();let z=C(new Set),H=new Map,U=C(Date.now());me(()=>{z.value.size>0&&(U.value=Date.now())},1e3);function re(){return Date.now()-r.value<6e4}async function ie(e){let t=s.value;if(t)try{let n=await t.onRecordingState(e,e=>{if(e.state===`recording`)z.value=new Set([...z.value,e.cameraId]);else{let t=new Set(z.value);t.delete(e.cameraId),z.value=t,g.value>0&&j(g.value,Date.now())}});H.set(e,n)}catch(t){console.warn(`[timeline] Failed to subscribe to recording state for ${e}:`,t)}}function ae(){for(let[,e]of H)e();H.clear(),z.value=new Set}let oe=n(()=>{let e=u.value;if(e.length===0)return e;let t=U.value,n=z.value,r=new Map;for(let t of e){let e=t.cameraId??`__unknown__`,n=r.get(e);(!n||t.endTime>n.endTime)&&r.set(e,t)}let i=new Map;for(let[e,a]of r){let r=e!==`__unknown__`&&n.has(e),o=t-a.endTime<12e4;(r||o)&&a.endTime<t&&i.set(a,{...a,endTime:t})}return i.size===0?e:e.map(e=>i.get(e)??e)});me(()=>{if(g.value===0||!re())return;let e=Date.now();e-g.value<3e5&&j(g.value,e)},6e4);let se;P([()=>t.value.join(`,`),()=>s.value],async([e,n])=>{let r=se!==e;if(se=e,ae(),r&&(u.value=[],d.value=[],f.value=[],h.value=0,g.value=0),!(t.value.length===0||!n)){if(await l.refreshManagedCameraIds(),r||h.value===0&&g.value===0){let e=Date.now(),t=o?.value??e,n=Math.max(N(),cn);j(t-n,Math.min(t+n,e))}for(let e of t.value)l.managedCameraIds.value.has(e)&&ie(e)}},{immediate:!0}),P(c,e=>{!e&&!s.value&&(m.value=!0)}),ge(r,I,{throttle:sn});let{on:ce,off:le}=ne(),{onTabVisible:ue}=V();ue(({hiddenMs:e})=>{z.value.size>0&&(U.value=Date.now()),e>=3e4&&g.value>0&&re()&&j(g.value,Date.now())});async function fe(){ae();for(let e of t.value)l.managedCameraIds.value.has(e)&&await ie(e)}let pe=()=>{O(),g.value>0&&j(h.value,Date.now()),fe()};return ce(`reconnected`,pe),de(()=>{le(`reconnected`,pe),te(),ae(),l.dispose()}),{recordings:oe,events:d,systemEvents:f,isLoading:n(()=>p.value||!m.value)}}var mn=new Map,hn=6e4;function gn(e,t){let n=t?JSON.stringify(t):``;return e.slice().sort().join(`,`)+`|`+n}function _n(e){let t=mn.get(e);if(t){if(Date.now()-t.savedAt>hn){mn.delete(e);return}return t}}function vn(e,t,n){mn.set(e,{eventIds:t,hasMore:n,savedAt:Date.now()})}function yn(){mn.clear()}function bn(e={}){let{availableCameraIds:t,cameraIds:r,realtime:i=!0,pageSize:a=40,pluginName:o=`@camera.ui/camera-ui-nvr`,filter:s}=e,{plugin:c,error:l,isLoading:u}=B(o),d=tn(o),f=C(new Set),p=C(!1),m=C(!0),h=C(!0),g=C(!1),_,v=n(()=>r?A(r):[]),y=n(()=>t?A(t):[]),b=n(()=>s?A(s)??{}:{}),x=n(()=>{let e=v.value;return(e.length>0?e:y.value).filter(e=>d.managedCameraIds.value.has(e))});function S(e){return!(b.value.hasDetections&&!e.types?.some(e=>e!==`motion`&&e!==`audio`))}let w=n(()=>{d.storeVersion.value;let e=f.value,t=v.value,n=[];for(let r of e){let e=d.getEvent(r);!e||!S(e)||t.length>0&&!t.includes(e.cameraId)||n.push({...e})}return n.sort((e,t)=>t.startTime-e.startTime),n});function T(e){if(e.type===`segment-update`&&f.value.has(e.data.id)||!d.managedCameraIds.value.has(e.data.cameraId))return;let t=v.value;if(t.length>0&&!t.includes(e.data.cameraId)||!S(e.data))return;let n=new Set(f.value);n.has(e.data.id)||(n.add(e.data.id),f.value=n)}function E(){_||=d.onNatsMessage(T)}function D(){_?.(),_=void 0}async function O(){if(p.value||!h.value)return;let e=c.value;if(!e)return;let t=x.value;p.value=!0;try{let n;for(let e of f.value){let t=d.getEvent(e);t&&(n===void 0||t.startTime<n)&&(n=t.startTime)}let r={...b.value,limit:a,before:n},i;i=t.length>0?await e.getCameraEvents(t,r):await e.getEvents(r);let o=i.events??[];h.value=i.hasMore,d.upsertEvents(o);let s=f.value,c=o.filter(e=>!s.has(e.id)&&S(e));if(c.length>0){let e=new Set(f.value);for(let t of c)e.add(t.id);f.value=e}else o.length>0&&(h.value=!1)}catch(e){console.warn(`[useDetectionEvents] Failed to load historical events:`,e)}finally{p.value=!1,m.value=!1}}async function k(){f.value=new Set,h.value=!0,m.value=!0,await O()}async function j(e,t){let n=d.getCachedThumbnails(e);if(n)return n;let r=d.getEvent(e);return r?d.loadThumbnails(e,r.cameraId,t):null}function M(){E()}function N(){D()}i&&E(),P([u,l],([e,t])=>{!e&&(t||!c.value)&&f.value.size===0&&(m.value=!1,h.value=!1)}),P(f,e=>{d.pinEvents(e)},{immediate:!0}),P([()=>c.value,y],async([e])=>{e&&(await d.refreshManagedCameraIds(),g.value=!0)},{immediate:!0});let ee=(()=>{let e=!1,t=globalThis.requestIdleCallback;return()=>{if(e)return;e=!0;function n(){e=!1,O()}typeof t==`function`?t(n,{timeout:250}):setTimeout(n,0)}})(),F=null;P([()=>c.value,x,g],([e,t,n])=>{if(!e)return;let r=t.slice().sort().join(`,`),i=F!==null&&F!==r;if(F=r,t.length===0){let e=v.value.length===0&&d.managedCameraIds.value.size>0&&y.value.length===0;n&&!e&&(h.value=!1,m.value=!1);return}if(i&&f.value.size>0&&(f.value=new Set,h.value=!0,m.value=!0),f.value.size===0){h.value=!0;let e=_n(gn(t,b.value));if(e){let t=e.eventIds.filter(e=>d.getEvent(e));if(t.length>0){f.value=new Set(t),h.value=e.hasMore,m.value=!1;return}}ee()}},{immediate:!0}),P(b,()=>{(f.value.size>0||!m.value)&&k()},{deep:!0});let{on:I,off:L}=ne(),R=!1;async function te(){let e=c.value;if(!e){R=!0;return}if(R=!1,p.value)return;let t=x.value,n={...b.value,limit:a};p.value=!0;try{let r=t.length>0?await e.getCameraEvents(t,n):await e.getEvents(n),i=r.events??[];d.upsertEvents(i);let a=new Set(f.value),o=!1;for(let e of i)!a.has(e.id)&&S(e)&&(a.add(e.id),o=!0);o&&(f.value=a),r.hasMore&&(h.value=!0)}catch(e){console.warn(`[useDetectionEvents] reconnect refresh failed:`,e)}finally{p.value=!1}}function z(){te()}return I(`reconnected`,z),P(()=>c.value,e=>{e&&R&&te()}),de(()=>{L(`reconnected`,z),D(),d.dispose();let e=gn(x.value,b.value);e&&f.value.size>0&&vn(e,[...f.value],h.value)}),{events:w,isLoading:n(()=>p.value||m.value),hasMore:h,loadMore:O,reset:k,start:M,stop:N,loadThumbnails:j,getCachedThumbnails:d.getCachedThumbnails,thumbnailCache:new Map}}function xn(e){return new Worker(`/assets/nvrPlayback.worker-CjAx0s9z.js`,{name:e?.name})}var Sn=2e3,Cn=new Map,wn=new Map,Tn=1;function En(e){let t=wn.get(e);t&&(clearTimeout(t),wn.delete(e))}function Dn(e){En(e);let t=setTimeout(()=>{wn.delete(e);let t=Cn.get(e);t&&t.refCount<=0&&Pn(e)},Sn);wn.set(e,t)}function On(){let e=document.createElement(`canvas`);return e.style.position=`absolute`,e.style.width=`100%`,e.style.height=`100%`,e.style.inset=`0`,e.style.zIndex=`2`,e.style.objectFit=`fill`,e}function kn(e,t,n=`webgpu`){let r=Cn.get(e);if(r)return t&&(r.worker.onmessage=e=>t(e.data)),r;let i=On();e.appendChild(i);let a=i.transferControlToOffscreen(),o=new xn;o.postMessage({type:`canvas`,canvas:a,preferredRenderer:n},[a]),t&&(o.onmessage=e=>t(e.data));let s={id:Tn++,canvas:i,worker:o,hidden:!1,refCount:0};return Cn.set(e,s),s}function An(e){let t=Cn.get(e);if(!t)return()=>{};t.refCount++,En(e);let n=!1;return()=>{n||(n=!0,t.refCount=Math.max(0,t.refCount-1),t.refCount===0&&Dn(e))}}function jn(e){return Cn.get(e)?.worker}function Mn(e){let t=Cn.get(e);t&&(t.hidden=!0,t.canvas.style.display=`none`,t.worker.postMessage({type:`hide`}))}function Nn(e){let t=Cn.get(e);t&&(t.hidden=!1,t.canvas.style.display=``,t.worker.postMessage({type:`show`}))}function Pn(e){En(e);let t=Cn.get(e);t&&(t.worker.postMessage({type:`close`}),t.worker.terminate(),t.canvas.remove(),Cn.delete(e))}var Fn=[[30,8100],[31,18e3],[32,20480],[40,32768],[41,32768],[42,34816],[50,110400],[51,184320],[52,184320]];function In(e,t){let n=Math.ceil(e/16)*Math.ceil(t/16);if(n===0)return null;for(let[e,t]of Fn)if(Math.floor(t/n)>=1)return e;return null}function Ln(e,t){return e.length>=11&&e.startsWith(`avc1.`)?e.slice(0,-2)+t.toString(16).padStart(2,`0`):e}function Rn(e,t){for(let n=0;n<e.length-8;n++)e[n]===0&&e[n+1]===0&&e[n+2]===0&&e[n+3]===1&&(e[n+4]&31)==7&&(e[n+7]=t)}var zn=class{wallSource;basePts=0;baseWall=0;rate=1;paused=!0;pausedPts=0;anchored=!1;abort=new AbortController;constructor(e){this.wallSource=e}now(){return this.paused?this.pausedPts:this.basePts+(this.wallSource()-this.baseWall)*1e6*this.rate}ptsToWall(e){return this.baseWall+(e-this.basePts)/1e6/this.rate}get isPaused(){return this.paused}get currentRate(){return this.rate}get isAnchored(){return this.anchored}start(e){this.basePts=e,this.baseWall=this.wallSource(),this.paused=!1,this.pausedPts=0,this.anchored=!0,this.invalidate()}reset(){this.basePts=0,this.baseWall=0,this.rate=1,this.paused=!0,this.pausedPts=0,this.anchored=!1,this.invalidate()}pause(){this.paused||(this.pausedPts=this.now(),this.paused=!0,this.invalidate())}resume(){this.paused&&(this.basePts=this.pausedPts,this.baseWall=this.wallSource(),this.paused=!1,this.invalidate())}setRate(e){if(!(e>0&&Number.isFinite(e)))throw Error(`MediaClock.setRate: rate must be positive finite, got ${e}`);this.rate!==e&&(this.paused||(this.basePts=this.now(),this.baseWall=this.wallSource()),this.rate=e,this.invalidate())}seek(e){this.paused?this.pausedPts=e:(this.basePts=e,this.baseWall=this.wallSource()),this.invalidate()}async waitUntil(e){for(;this.now()<e;){if(this.paused){await this.waitForChange();continue}let t=(this.ptsToWall(e)-this.wallSource())*1e3;if(t<=0)return;await this.sleepOrChange(t)}}invalidate(){let e=this.abort;this.abort=new AbortController,e.abort()}sleepOrChange(e){let t=this.abort.signal;return new Promise(n=>{if(t.aborted){n();return}let r=setTimeout(()=>{t.removeEventListener(`abort`,i),n()},e),i=()=>{clearTimeout(r),n()};t.addEventListener(`abort`,i,{once:!0})})}waitForChange(){let e=this.abort.signal;return e.aborted?Promise.resolve():new Promise(t=>{e.addEventListener(`abort`,()=>t(),{once:!0})})}};function Bn(e){return new zn(()=>e.currentTime)}var Vn=.005,Hn=class{ac=null;gainNode=null;clock=null;muted=!1;pendingSources=new Set;start(e){this.close();try{this.ac=new AudioContext({sampleRate:e}),this.gainNode=this.ac.createGain(),this.gainNode.gain.value=+!this.muted,this.gainNode.connect(this.ac.destination),this.clock=Bn(this.ac),this.ac.resume().catch(()=>{})}catch{this.ac=null,this.gainNode=null,this.clock=null}}feed(e){if(!this.ac||!this.gainNode||!this.clock||(this.clock.isAnchored||this.clock.start(e.pts),this.clock.isPaused))return;let t=this.clock.ptsToWall(e.pts)-this.ac.currentTime;if(t<-.2)return;let n=this.ac.createBuffer(e.channels.length,e.numberOfFrames,e.sampleRate);for(let t=0;t<e.channels.length;t++)n.getChannelData(t).set(e.channels[t]);let r=this.ac.createBufferSource();r.buffer=n,r.connect(this.gainNode);let i=this.ac.currentTime+Math.max(Vn,t);r.start(i),this.pendingSources.add(r),r.onended=()=>this.pendingSources.delete(r)}setMuted(e){this.muted=e,this.gainNode&&(this.gainNode.gain.value=+!e)}suspend(){this.clock?.pause(),this.ac&&this.ac.state===`running`&&this.ac.suspend()}resume(){this.ac&&this.ac.state===`suspended`&&this.ac.resume().catch(()=>{}),this.clock?.resume()}setRate(e){e>0&&Number.isFinite(e)&&this.clock&&(this.cancelPendingSources(),this.clock.reset(),e!==1&&this.clock.setRate(e))}seek(){this.cancelPendingSources(),this.clock?.reset()}close(){if(this.cancelPendingSources(),this.gainNode){try{this.gainNode.disconnect()}catch{}this.gainNode=null}if(this.ac){try{this.ac.close()}catch{}this.ac=null}this.clock=null}cancelPendingSources(){for(let e of this.pendingSources)try{e.stop(0)}catch{}this.pendingSources.clear()}},Un=Symbol(`NvrPlayback`),Wn=Symbol(`NvrPlaybackMap`);function Gn(...e){let t=new Date,n=String(t.getHours()).padStart(2,`0`),r=String(t.getMinutes()).padStart(2,`0`),i=String(t.getSeconds()).padStart(2,`0`),a=String(t.getMilliseconds()).padStart(3,`0`);console.log(`[NvrPlayback ${n}:${r}:${i}.${a}]`,...e)}function Kn(e){switch(e){case`high-resolution`:return`high`;case`mid-resolution`:return`mid`;case`low-resolution`:return`low`;case void 0:case null:return``;default:return e}}function qn(e,t){let r=t?.managed??!1,i=t?.sourceRole,a=f(i)?i:C(A(i)??``),o=n(()=>Kn(a.value));t?.cameraUi??ne();let s=t?.nvrCtx??ve(),c=C(`idle`),l=C(0),u=C(null),d=C(!1),p=C(!1),m=C(!1),h=C(!1),g=C(!1),_=C(1),v=0,y=C(null);P(y,(e,t)=>{if(t){let e=jn(t);e&&e.postMessage({type:`nvr-stop`}),Mn(t)}if(!e)return;let n=E??(c.value===`idle`?void 0:D);n&&(E=void 0,n.kind===`play`?U(n.tsUs,n.videoOnly):n.fine?H(n.tsUs,!0):B(n.tsUs,!0))}),P(c,(e,t)=>{if(e===`idle`&&t!==`idle`){let e=y.value;e&&Mn(e)}},{flush:`sync`});let b=n(()=>c.value!==`idle`),x=n(()=>c.value===`play`),S=null,w=!1,T=!1,E,D,O=new AbortController,k=new WeakSet;function j(){return typeof e==`string`?e:A(e)}function M(){let e=u.value;return e?e.startMs+(performance.now()-e.wallStart)*e.speed:0}let N=new Set,ee=new WeakSet,F=null,I=null;function L(){let e=y.value;if(!e)return;let t=performance.now(),n=jn(e),r=!1;n||(n=kn(e).worker,r=!0),F!==e&&(I?.(),I=An(e),F=e);let i=performance.now()-t;return te(n),N.has(n)||(s.registerWorker(n),N.add(n)),ee.has(n)||(n.postMessage({type:`nvr-attach`,cameraId:j()}),ee.add(n)),r&&Gn(`[Timeline ${j().slice(0,8)}] main.ensureWorker spawn+transfer=${i.toFixed(0)}ms`),n}function R(e){let t=y.value;t&&jn(t)?.postMessage(e)}function te(e){k.has(e)||(k.add(e),e.addEventListener(`message`,e=>{z(e.data)},{signal:O.signal}))}P(u,e=>{R({type:`nvr-set-anchor`,anchor:e?{startMs:e.startMs,wallStart:e.wallStart,speed:e.speed}:null})});function z(e){switch(e.type){case`nvr-ready`:e.audio&&(h.value=!0,ce(e.audio.sampleRate)),r&&_.value!==1&&R({type:`nvr-cmd`,cmd:`speed`,speed:_.value});break;case`nvr-scrub-result`:m.value=!1,p.value=!1,v=0,e.noData?d.value=!0:(d.value=!1,l.value=e.ts);break;case`nvr-frame-drained`:{let t=Math.floor(e.ts/1e3);!T||u.value?.speed===0?(T=!0,u.value={startMs:t,wallStart:performance.now(),speed:_.value}):u.value&&u.value.speed>0&&t>u.value.startMs+(performance.now()-u.value.wallStart)*u.value.speed+200&&(u.value={startMs:t,wallStart:performance.now(),speed:_.value}),m.value=!1,p.value=!1,d.value&&(v===0||e.ts>=v)&&(d.value=!1,v=0),l.value=e.ts;break}case`nvr-audio-data`:d.value&&(v===0||e.pts>=v)&&(d.value=!1,v=0),S?.feed({channels:e.channels,sampleRate:e.sampleRate,numberOfFrames:e.numberOfFrames,pts:e.pts});break;case`nvr-no-data`:m.value=!1,p.value=!1,d.value=!0,v=e.ts,l.value=e.ts;break;case`nvr-eof`:{m.value=!1,d.value||=!0;let e=u.value?.targetMs??u.value?.startMs??0;u.value={startMs:l.value>0?Math.floor(l.value/1e3):e,wallStart:performance.now(),speed:_.value};break}case`nvr-buffering`:e.buffering?(T&&(u.value={startMs:l.value>0?Math.floor(l.value/1e3):M(),wallStart:performance.now(),speed:0}),m.value=!0,S?.suspend()):(T&&(u.value={startMs:l.value>0?Math.floor(l.value/1e3):M(),wallStart:performance.now(),speed:_.value}),m.value=!1,S?.resume());break;case`nvr-session-error`:e.message.includes(`license verification required`)?(p.value=!0,d.value=!0,m.value=!1):e.fatal&&(m.value=!1,d.value=!0);break}}function B(e,t){if(!t){R({type:`nvr-stop`}),d.value=!0,c.value=`scrub`,u.value=null,E=void 0,D=void 0;return}c.value=`scrub`,u.value=null;let n={kind:`scrub`,tsUs:e,fine:!1},r=L();if(!r){E=n;return}E=void 0,D=n;let i=y.value;i&&Nn(i),r.postMessage({type:`nvr-scrub`,tsUs:e,fine:!1,sourceRole:o.value})}function H(e,t){if(!t){B(e,t);return}c.value=`scrub`,u.value=null;let n={kind:`scrub`,tsUs:e,fine:!0},r=L();if(!r){E=n;return}E=void 0,D=n;let i=y.value;i&&Nn(i),r.postMessage({type:`nvr-scrub`,tsUs:e,fine:!0,sourceRole:o.value})}function U(e,t){Gn(`[Timeline ${j().slice(0,8)}] play() called tsUs=${e} containerBound=${!!y.value}`),T=!1,c.value=`play`,v=0,d.value||(m.value=!0),u.value={startMs:Math.floor(e/1e3),wallStart:performance.now(),speed:0,targetMs:Math.floor(e/1e3)};let n={kind:`play`,tsUs:e,videoOnly:t??!1},r=L();if(!r){Gn(`[Timeline ${j().slice(0,8)}] play() — no worker (container not bound), queued as pending`),E=n;return}E=void 0,D=n;let i=y.value;i&&Nn(i),Gn(`[Timeline ${j().slice(0,8)}] play() — posting nvr-play to worker`),r.postMessage({type:`nvr-play`,tsUs:e,videoOnly:t??!1,sourceRole:o.value,speed:_.value})}P(a,(e,t)=>{if(e===t||c.value!==`play`)return;let n=l.value>0?l.value:(u.value?.startMs??0)*1e3;se(),n>0&&U(n)});function re(){R({type:`nvr-cmd`,cmd:`pause`}),u.value={startMs:l.value>0?Math.floor(l.value/1e3):M(),wallStart:performance.now(),speed:0},c.value=`pause`,S?.suspend()}function ie(){if(c.value!==`pause`){U(l.value);return}let e=u.value;e&&(u.value={startMs:e.startMs,wallStart:performance.now(),speed:_.value}),c.value=`play`,S?.resume(),R({type:`nvr-cmd`,cmd:`resume`})}function ae(e){m.value=!0,T=!1,u.value={startMs:e/1e3,wallStart:performance.now(),speed:c.value===`play`?_.value:0},S?.seek(),R({type:`nvr-cmd`,cmd:`seek`,tsUs:e})}function oe(e){let t=l.value>0?Math.floor(l.value/1e3):M();_.value=e,u.value={startMs:t,wallStart:performance.now(),speed:c.value===`play`?e:0},S?.setRate(e),R({type:`nvr-cmd`,cmd:`speed`,speed:e}),e===1?g.value=w:g.value=!0}function se(){R({type:`nvr-stop`});let e=y.value;e&&c.value!==`idle`&&Mn(e),c.value=`idle`,m.value=!1,h.value=!1,u.value=null,T=!1,E=void 0,D=void 0,v=0,r||(_.value=1),I?.(),I=null,F=null}function ce(e){S?.close(),S=null,S=new Hn,S.start(e),S.setMuted(g.value)}P(g,e=>{S?.setMuted(e),_.value===1&&(w=e)});let le=!1,ue=!1,{onTabHidden:fe,onTabPaused:pe,onTabVisible:W}=V();return fe(()=>{Gn(`onTabHidden fired — mode=${c.value}`),c.value===`play`&&(le=!0,re(),Gn(`onTabHidden — auto-paused, autoPausedForVisibility=true`))}),pe(()=>{le&&(Gn(`onTabPaused — escalating to suspend (cancel playIter, free bandwidth)`),ue=!0,R({type:`nvr-suspend`,keepNats:!0}))}),W(()=>{if(Gn(`onTabVisible fired — autoPausedForVisibility=${le}, suspended=${ue}, mode=${c.value}`),!le)return;if(le=!1,c.value!==`pause`){Gn(`onTabVisible — mode is ${c.value}, skipping resume`);return}let e=ue;if(ue=!1,e){R({type:`nvr-resume`});let e=u.value;e&&(u.value={startMs:e.startMs,wallStart:performance.now(),speed:_.value}),c.value=`play`,S?.resume(),Gn(`onTabVisible — nvr-resume sent`)}else{ie();let e=l.value;e>0?(Gn(`onTabVisible — resume() done, forcing seek(${e}) for fresh keyframe`),ae(e)):Gn(`onTabVisible — resume() done, no seek (ts=0)`)}}),de(()=>{S?.setMuted(!0),R({type:`nvr-stop`}),I?.(),I=null,F=null,O.abort();for(let e of N)s.unregisterWorker(e);N.clear(),S?.close(),S=null}),{mode:c,currentTimestamp:l,playbackAnchor:u,noData:d,licenseRequired:p,loading:m,hasAudio:h,muted:g,containerRef:y,isActive:b,isPlaybackDriving:x,speed:_,sourceRole:a,scrub:B,fineScrub:H,play:U,pause:re,resume:ie,stop:se,seek:ae,setSpeed:oe}}function Jn(e,t){let n=qn(e,t);return b(Un,n),n}var Yn=1e4,Xn=100,$=175;function Zn(e){let{nvr:t,type:r,segment:i,timeMsPerPx:a,recordings:o,detectionCards:s,trimState:c,zoomLevel:l,writeMotion:u,getMotionOffset:d,motionBoundaryPx:f,motionMaxOffsetPx:p,dragActive:h,flingActive:g,wheelActive:v}=e;function y(){return f.value}function b(){return d()}function x(e){u(Math.max(0,e))}let S=C((()=>{let e=t?.mode.value,n=t?.currentTimestamp.value??0;if(n>0){let t=Math.floor(n/1e3);if(e===`play`)return{type:`play`,targetMs:t};if(e===`pause`)return{type:`pause`,timeMs:t}}return{type:`live`}})());P(S,(e,t)=>{t&&(`${t.type}`,t.type===`scroll`?`${t.resumePlay}`:t.type===`play`?`${t.targetMs}`:t.type===`pause`&&`${t.timeMs}`),`${e.type}`,e.type===`scroll`?`${e.resumePlay}`:e.type===`play`?`${e.targetMs}`:e.type===`pause`&&`${e.timeMs}`},{deep:!0});let w=C(Math.floor(Date.now()/1e3)*1e3),T=C(0),E=null,D=0,O=!1,k=1/0,A=C(0),j=null,M=C(!1),N=!1,F=0,{start:I,stop:L}=he(e=>{F=performance.now(),we(e)},Xn,{immediate:!1}),R=0,{start:te,stop:ne}=he((e,n)=>{R=performance.now(),t.scrub(e*1e3,n)},100,{immediate:!1}),z=C(!1),B=!1,V=!0,H=0,U=C(null),re=C(null),ie=n(()=>w.value),ae=n(()=>E!==null),oe=n(()=>S.value.type===`play`||S.value.type===`trim`||ae.value?!1:f.value===0),se=n(()=>h.value||g.value||v.value),ce=n(()=>{let e=S.value;if((e.type===`play`||e.type===`trim`&&e.sub===`play`)&&t?.playbackAnchor.value){let e=t.playbackAnchor.value;return e.speed>0?T.value>0?T.value:(t.currentTimestamp.value,e.startMs+(performance.now()-e.wallStart)*e.speed):e.startMs}if(e.type===`pause`)return e.timeMs;if(i.value===`detections`){let e=y(),t=s.value;if(e<=0||t.length===0)return ie.value;let n=Math.min(Math.ceil(e/$)-1,t.length-1),r=e-n*$,i=Math.min(r/$,1),o=t[n],c=o.endTimeMs-i*o.duration*1e3,l=t.length*$;if(e>l){let t=e-l;return o.timestamp-t*a.value}return c}if(U.value!=null)return U.value;if(re.value!=null)return re.value;if(oe.value)return ie.value;let n=y();return ie.value-n*a.value});function le(){let e=S.value;if(e.type===`play`||e.type===`trim`&&e.sub===`play`||e.type===`pause`)return ce.value;if(U.value!=null)return U.value;if(re.value!=null)return re.value;if(i.value===`detections`){let e=b(),t=s.value;if(e<=0||t.length===0)return ie.value;let n=Math.min(Math.ceil(e/$)-1,t.length-1),r=e-n*$,i=Math.min(r/$,1),o=t[n],c=o.endTimeMs-i*o.duration*1e3,l=t.length*$;if(e>l){let t=e-l;return o.timestamp-t*a.value}return c}return oe.value?ie.value:ie.value-b()*a.value}function ue(e){return(ie.value-e)/a.value}function fe(e){let t=s.value;if(t.length===0)return 0;for(let n=0;n<t.length;n++){let r=t[n];if(e>=r.timestamp&&e<=r.endTimeMs){let t=(r.endTimeMs-e)/(r.duration*1e3);return n*$+t*$}}for(let n=0;n<t.length;n++)if(e>t[n].endTimeMs)return n*$;return t.length*$}function pe(e,t=!1){if(i.value===`detections`){let t=s.value,n=t.findIndex(t=>e<=t.endTimeMs&&e>=t.timestamp);if(n<0&&(n=t.findIndex(t=>t.endTimeMs<=e),n<0&&(n=Math.max(0,t.length-1))),t.length===0)return;let r=t[n],i=Math.max(0,Math.min(1,(r.endTimeMs-e)/(r.duration*1e3))),a=Math.max(0,n*$+i*$);A.value=a,x(a),setTimeout(()=>{A.value=0},100);return}let n=Math.max(0,ue(e));A.value=n,H=performance.now()+200,x(n),setTimeout(()=>{A.value=0},100)}function W(){E!==null&&(cancelAnimationFrame(E),E=null),j=null,D=0,k=1/0,T.value=0}P(a,()=>{j=null});function ge(){if(c.trimActive.value&&S.value.type!==`trim`)return;W(),i.value===`detections`&&(k=b());let e=-1;function n(){if(h.value||g.value||v.value){h.value,g.value,v.value,j=null,be();return}if(!t){W();return}let r=t.playbackAnchor.value;if(!r){E=null,T.value=0;return}if(r.speed===0){E=requestAnimationFrame(n);return}r.wallStart!==e&&(e=r.wallStart,D=0);let o=Date.now(),l=r.startMs+(performance.now()-r.wallStart)*r.speed,u=Math.floor(l/1e3)*1e3;if(u!==D&&(T.value=l,D=u),S.value.type===`trim`&&S.value.sub===`play`&&l>=c.trimEndMs.value){t.pause(),E=null,M.value=!1,T.value=0,S.value={type:`trim`,sub:`idle`};return}if(O&&l>o-Yn){t.stop(),W(),_e();return}if(i.value===`detections`&&S.value.type===`play`){let e=s.value;if(!(l<S.value.targetMs)&&!e.some(e=>l>=e.timestamp&&l<=e.endTimeMs)){let n=null;for(let t of e)t.timestamp>l&&(!n||t.timestamp<n.timestamp)&&(n=t);if(n){H=performance.now()+400,k=1/0;let e=n.topPx+$;x(e),k=e,S.value={type:`play`,targetMs:n.timestamp},E=null,t.play(n.timestamp*1e3);return}}}if(i.value!==`detections`){let e=Math.max(0,(w.value-u)/a.value);e!==j&&(H=performance.now()+100,e>A.value&&(A.value=e),x(e),j=e)}if(i.value===`detections`){let e=Math.max(0,fe(l));e<k?k=e:e=k,H=performance.now()+100,e>A.value&&(A.value=e),x(e),j=e}E=requestAnimationFrame(n)}let r=t?.playbackAnchor.value,o=r?Math.min(Date.now(),r.startMs+1740*1e3):Date.now();if(w.value=Math.floor(o/1e3)*1e3,E=requestAnimationFrame(n),D=0,i.value!==`detections`&&r){let e=r.startMs+(performance.now()-r.wallStart)*r.speed,t=Math.floor(e/1e3)*1e3,n=Math.max(0,(w.value-t)/a.value);H=performance.now()+200,n>A.value&&(A.value=n),x(n),j=n}}function _e(){W(),t?.isActive.value&&t.stop(),L(),S.value={type:`live`},w.value=Math.floor(Date.now()/1e3)*1e3,V=!0,b()!==0&&(H=performance.now()+200,x(0))}function ve(e){t&&(L(),S.value={type:`play`,targetMs:e},t.play(e*1e3))}function ye(){t&&(W(),S.value={type:`pause`,timeMs:le()},t.pause())}function be(){let e=S.value;if(e.type===`trim`)return;if(e.type===`scroll`){e.resumePlay;return}let n=e.type===`play`||e.type===`live`;n&&t?.mode.value===`pause`&&(n=!1),e.type,W(),t&&(t.playbackAnchor.value=null),S.value={type:`scroll`,resumePlay:n}}function xe(){if(S.value.type,S.value.type===`scroll`&&S.value.resumePlay,S.value.type!==`scroll`){S.value.type;return}if(Ce(),Se()){_e();return}let e=le();if(S.value.type===`scroll`&&S.value.resumePlay,L(),S.value.type===`scroll`&&S.value.resumePlay){if(t?.mode.value===`play`&&t.playbackAnchor.value&&t.playbackAnchor.value.speed>0){S.value={type:`play`,targetMs:e};return}ve(e)}else we(e),S.value={type:`pause`,timeMs:e}}function Se(){return y()===0}function Ce(){let e=b(),t=Yn/a.value;if(e<=0){V=!0;return}if(e>=t){V=!1;return}B=!0,x(V?t:0),m(()=>{B=!1})}P(f,e=>{if(B||performance.now()<H||ae.value||c.trimActive.value)return;let t=Yn/a.value;if(e<=0){V=!0;return}if(e>=t){V=!1;return}se.value||(B=!0,x(V?t:0),m(()=>{B=!1}))});function we(e){if(!t||e>Date.now()-Yn)return;let n=o.value??[],r=n.length===0||n.some(t=>e>=t.startTime&&e<=t.endTime);l.value>=8?t.fineScrub(e*1e3,r):t.scrub(e*1e3,r)}function Te(e){let t=performance.now();if(t-F>=Xn){F=t,L(),we(e);return}I(e)}function Ee(e){c.trimActive.value||(e.timestamp,H=performance.now()+400,W(),t&&(L(),S.value={type:`play`,targetMs:e.timestamp},t.play(e.timestamp*1e3)),r.value===`vertical`&&x(e.topPx+$))}function De(e){c.trimActive.value||(H=performance.now()+400,W(),t&&(L(),S.value={type:`play`,targetMs:e},t.play(e*1e3)))}function Oe(e,n){if(W(),t?.isActive.value&&t.stop(),c.activate(e,n),S.value={type:`trim`,sub:`idle`},t){let n=(o.value??[]).some(t=>e>=t.startTime&&e<=t.endTime);t.scrub(e*1e3,n)}}function ke(){W(),M.value=!1,c.deactivate(),t?.isActive.value&&t.stop(),_e(),x(0)}function Ae(e){if(!t)return;let n=performance.now(),r=(o.value??[]).some(t=>e>=t.startTime&&e<=t.endTime);if(n-R>=100){R=n,ne(),t.scrub(e*1e3,r);return}te(e,r)}function je(){z.value=!0,t&&t.mode.value===`play`&&t.pause()}function Me(){z.value=!1}function Ne(e,t,n){if(oe.value){m(()=>x(0));return}let r;if(re.value!=null)r=re.value;else{let e=b();r=w.value-e*n(t)}re.value=r;let i=Math.max(0,(w.value-r)/n(e));A.value=i,m(()=>{x(i),setTimeout(()=>{let e=b(),t=r+e*a.value;w.value=Math.floor(t/1e3)*1e3,re.value=null,A.value=0},100)})}function Pe(e,n){if(S.value.type,oe.value,H=performance.now()+500,oe.value){e===`timeline`&&(U.value=null,w.value=Math.floor(Date.now()/1e3)*1e3);return}let r=S.value,i;if(r.type===`play`&&t?.playbackAnchor.value){let e=t.playbackAnchor.value;i=e.speed>0?e.startMs+(performance.now()-e.wallStart)*e.speed:e.startMs}else i=r.type===`pause`?r.timeMs:n===`detections`&&U.value!=null?U.value:w.value-b()*a.value;if(r.type===`play`)if(e===`detections`){let e=s.value;if(e.some(e=>i>=e.timestamp&&i<=e.endTimeMs))S.value={type:`play`,targetMs:i};else{let t=i;for(let n of e)n.timestamp>i&&(t===i||n.timestamp<t)&&(t=n.timestamp);((t-i)/1e3).toFixed(1),S.value={type:`play`,targetMs:t}}}else S.value={type:`play`,targetMs:i};if(e===`detections`){if(s.value.length===0)return;let e=Math.max(0,fe(i));k=e,j=null,A.value=e,m(()=>{x(e),setTimeout(()=>{A.value=0},200)})}else e===`timeline`&&(j=null,m(()=>{pe(i),setTimeout(()=>{let e=b(),t=i+e*a.value;w.value=Math.floor(t/1e3)*1e3,U.value=null},150)}))}if(t){P(t.isPlaybackDriving,(e,t)=>{t&&!e&&(T.value=0)});let e=60*1e3;function n(e,t=!1){let n=e+9e5;t&&(n=Math.min(n,Date.now()));let r=Math.floor(n/1e3)*1e3,i=(r-e)/a.value;w.value=r,x(i),H=performance.now()+150}P(f,t=>{if(z.value)return;let r=p.value;if(r<=0)return;let i=ce.value;i<=0||(t>=r-100?n(i):c.trimActive.value&&t<=100&&w.value<Date.now()-e&&n(i,!0))}),P(ce,t=>{t<=0||c.trimActive.value||t>w.value+e&&n(t)}),P(()=>t.playbackAnchor.value,e=>{if(e&&(e.speed,e.startMs),S.value.type,e&&e.speed>0){let t=S.value;t.type!==`play`&&t.type!==`trim`&&(S.value={type:`play`,targetMs:e.targetMs??e.startMs},H=performance.now()+500),E===null&&ge()}else if(e&&e.speed===0){if(e.targetMs!=null&&(O=(e.targetMs??e.startMs)<=Date.now()-Yn),E===null){if(e.targetMs!=null){let t=S.value;t.type!==`play`&&t.type!==`trim`&&(e.targetMs,S.value={type:`play`,targetMs:e.targetMs},H=performance.now()+500)}c.trimActive.value||pe(e.startMs)}}else W()});let r=0;P(ce,e=>{if(c.trimActive.value||!t.noData.value||t.mode.value!==`play`)return;let n=performance.now();n-r<2e3||o.value.some(t=>e>=t.startTime&&e<=t.endTime)&&(r=n,t.play(e*1e3))}),P(()=>t.mode.value,(e,n)=>{if(!(!c.trimActive.value||N))if(e===`play`&&n!==`play`){if(z.value){t.pause();return}N=!0,t.play(c.trimStartMs.value*1e3),M.value=!0,S.value={type:`trim`,sub:`play`},ge(),N=!1}else e!==`play`&&n===`play`&&(M.value=!1,W(),S.value.type===`trim`&&(S.value={type:`trim`,sub:`idle`}))}),P(c.trimActive,e=>{if(e)W();else{let e=t.playbackAnchor.value;e&&e.speed>0&&ge()}}),P(oe,e=>{if(e&&(w.value=Math.floor(Date.now()/1e3)*1e3,t.isActive.value)){if(c.trimActive.value||ae.value)return;t.stop()}}),P(ce,e=>{t&&(c.trimActive.value||performance.now()<H||ae.value&&!h.value||!se.value||oe.value||Te(e))});let{start:i,stop:s}=he(()=>{se.value||S.value.type===`scroll`&&(b()===0?(L(),t.isActive.value&&t.stop(),S.value={type:`live`}):xe())},150,{immediate:!1});P(se,e=>{if(t&&!c.trimActive.value&&!(performance.now()<H)){if(e){s(),S.value.type!==`scroll`&&be();return}S.value.type===`scroll`&&i()}}),_(()=>{W()})}return me(()=>{if(!c.trimActive.value&&!t?.isPlaybackDriving.value&&t?.mode.value!==`pause`&&!se.value&&(oe.value&&b()===0&&(w.value=Math.floor(Date.now()/1e3)*1e3),i.value===`detections`&&!oe.value&&!se.value&&!ae.value)){let e=s.value,t=b();if(t>0&&e.length>0){let n=e[Math.min(Math.ceil(t/$)-1,e.length-1)];x(Math.max(0,t-n.pxPerSecond))}}},1e3,{immediate:!0}),ee(()=>{i.value===`detections`&&(U.value=ce.value)}),de(()=>{W()}),{mode:S,currentTimeMs:ce,getCurrentTimeMs:le,nowMs:ie,isLive:oe,isScrolling:se,nvrDrivingScroll:ae,trimPlaying:M,enterLive:_e,enterPlay:ve,enterPause:ye,onScrollStart:be,onScrollStop:xe,onDetectionCardClick:Ee,onEventClick:De,onTrimActivate:Oe,onTrimDeactivate:ke,onTrimScrub:Ae,onTrimDragStart:je,onTrimDragEnd:Me,doScrub:we,scrollToTime:pe,handleZoomChange:Ne,handleSegmentChange:Pe,pendingScrollPx:A,timeToScrollPx:ue,timeToDetectionScrollPx:fe}}var Qn=5e3,$n=3e4;function er(e,t,r){let i=C(!1),a=C(0),o=C(0),s=n(()=>o.value-a.value),c=n(()=>{if(!r?.value?.length)return s.value;let e=a.value,t=o.value,n=0;for(let i of r.value){let r=Math.max(i.startTime,e),a=Math.min(i.endTime,t);r<a&&(n+=a-r)}return n||s.value});function l(n,r){let s=t.value;if(n!=null&&r!=null){let e=Math.min(n,r),t=Math.max(n,r);a.value=e,o.value=Math.min(Math.max(t,e+Qn),s)}else{let t=e.value;a.value=t-$n/2,o.value=Math.min(t+$n/2,s)}i.value=!0}function u(){i.value=!1}return{trimActive:i,trimStartMs:a,trimEndMs:o,trimDurationMs:s,trimRecordingDurationMs:c,activate:l,deactivate:u}}var tr={damping:.95,velocityThreshold:.3,velocityStop:.05,overscrollDamping:.5},nr=1e3/60,rr=100,ir=200;function ar(e){let{minOffset:t,maxOffset:n,constants:r}=e,{offsetPx:i,velocity:a}=e;return i+=a,i<t?(i=t-(t-i)*r.overscrollDamping,a*=.5):i>n&&(i=n+(i-n)*r.overscrollDamping,a*=.5),a*=r.damping,Math.abs(a)<r.velocityStop?{offsetPx:sr(i,t,n),velocity:0,done:!0}:{offsetPx:i,velocity:a,done:!1}}function or(e,t){if(e.length<2)return 0;let n=e[0],r=e[e.length-1],i=r.t-n.t;if(i<=0)return 0;let a=(n.pos-r.pos)/i;return Math.abs(a)<t?0:a*nr}function sr(e,t,n){return Math.max(t,Math.min(n,e))}function cr(e){let{element:t,writeFn:n,readFn:r,maxOffsetPx:i}=e,a={...tr,...e.constants},o=C(!1),s=C(!1),c=C(!1),l=0,u=[],d=null,f=0,p=null,{start:m,stop:h}=he(()=>{c.value=!1,!o.value&&!s.value&&e.onInteractionEnd&&e.onInteractionEnd()},ir,{immediate:!1});function g(){return(e.orientation?.value??`vertical`)===`vertical`?`y`:`x`}function _(){return e.minOffsetPx?.value??0}function v(e){return g()===`y`?e.clientY:-e.clientX}function y(){d!==null&&(cancelAnimationFrame(d),d=null);let t=s.value;s.value=!1,f=0,t&&e.onInteractionEnd&&!o.value&&e.onInteractionEnd()}function b(n){if(n.pointerType===`mouse`&&n.button!==0)return;let r=t.value;if(!r)return;let i=e.bottomIgnorePx?.value??0;if(i>0&&n.pointerType!==`mouse`&&window.innerHeight-n.clientY<=i)return;let a=o.value||s.value;d!==null&&(cancelAnimationFrame(d),d=null),s.value=!1,f=0,o.value=!0,p=n.pointerId,l=v(n),u=[{pos:l,t:n.timeStamp}],r.setPointerCapture(n.pointerId),!a&&e.onInteractionStart&&e.onInteractionStart()}function x(e){if(!o.value||e.pointerId!==p)return;let t=v(e),a=l-t;for(n(sr(r()+a,_(),i.value)),l=t,u.push({pos:t,t:e.timeStamp});u.length>1&&e.timeStamp-u[0].t>rr;)u.shift()}function w(n){if(!o.value||n.pointerId!==p)return;let r=t.value;r&&r.hasPointerCapture(n.pointerId)&&r.releasePointerCapture(n.pointerId),o.value=!1,p=null;let i=or(u,a.velocityThreshold);u=[],i===0?e.onInteractionEnd&&e.onInteractionEnd():E(i)}function T(e){w(e)}function E(t){f=t,s.value=!0;function o(){let t=ar({offsetPx:r(),velocity:f,minOffset:_(),maxOffset:i.value,constants:a});if(n(t.offsetPx),f=t.velocity,t.done){d=null,s.value=!1,e.onInteractionEnd&&e.onInteractionEnd();return}d=requestAnimationFrame(o)}d=requestAnimationFrame(o)}function D(t){t.preventDefault();let a=o.value||s.value||c.value;d!==null&&(cancelAnimationFrame(d),d=null),s.value=!1,f=0;let l=g()===`y`?t.deltaY:-t.deltaX;n(sr(r()+l,_(),i.value)),c.value=!0,m(),!a&&e.onInteractionStart&&e.onInteractionStart()}return ee(e=>{let n=t.value;n&&(n.addEventListener(`pointerdown`,b),n.addEventListener(`pointermove`,x),n.addEventListener(`pointerup`,w),n.addEventListener(`pointercancel`,T),n.addEventListener(`wheel`,D,{passive:!1}),e(()=>{n.removeEventListener(`pointerdown`,b),n.removeEventListener(`pointermove`,x),n.removeEventListener(`pointerup`,w),n.removeEventListener(`pointercancel`,T),n.removeEventListener(`wheel`,D),y(),h(),c.value=!1}))}),{dragActive:S(o),flingActive:S(s),wheelActive:S(c),cancelFling:y}}function lr(e,t=`ddd., D. MMM. YY`){return typeof e==`number`&&(e=new Date(e)),fe(e,t).value}function ur(e){e||=new Date;let t=new Date(e);return t.setMilliseconds(0),t}function dr(e){e||=new Date;let t=new Date(e);return t.setSeconds(0,0),t.setMilliseconds(0),t}function fr(e=``){return e.startsWith(`data:`)||e.startsWith(`blob:`)||e.startsWith(`http:`)||e.startsWith(`https:`)?e:e||`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFIGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjMtMDktMDlUMTc6NTE6NDIrMDI6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIzLTExLTA1VDE5OjQ1OjU0KzAxOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIzLTExLTA1VDE5OjQ1OjU0KzAxOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjQ4MjQxZmI0LTRhZDktNDA5OC1hMTU0LTc4OWFmMjQzNjkxYiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo0ODI0MWZiNC00YWQ5LTQwOTgtYTE1NC03ODlhZjI0MzY5MWIiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0ODI0MWZiNC00YWQ5LTQwOTgtYTE1NC03ODlhZjI0MzY5MWIiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQ4MjQxZmI0LTRhZDktNDA5OC1hMTU0LTc4OWFmMjQzNjkxYiIgc3RFdnQ6d2hlbj0iMjAyMy0wOS0wOVQxNzo1MTo0MiswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKE1hY2ludG9zaCkiLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+a0dRsAAAHudJREFUeJzt3Xt8VOWdP/DP95zJJJPrJJAEwjVck3ARE1AIoGDrBUGr7oJurfXS1m3tb912t/vb9vfrrnnVuvZi91e7trqt68+q2Cq9uKJopYoKSUREEAnhTqoQLiGQG7nMzDnf/SMEA84kmeTMPCfzfN958XpBzpnzfOeQ55PnnDnnPMTMEELoyVBdgBBCHQkAITQmASCExiQAhNCYBIAQGpMAEEJjEgBCaEwCQAiNSQAIoTEJACE0JgEghMYkAITQmASAEBqTABBCYxIAQmhMAkAIjUkACKExCQAhNCYBIITGJACE0JgEgBAakwAQQmMSAEJoTAJACI1JAAihMQkAITQmASCExiQAhNCYBIAQGpMAEEJjEgBCaEwCQAiNSQAIoTEJACE0JgEghMYkAITQmASAEBqTABBCYxIAQmhMAkAIjUkACKExCQAhNCYBIITGJACE0JgEgBAakwAQQmMe1QW4ARGpLkFEaePGjdmGkTyBmTOIkGSb3Gza9rHy8vIjTmyfmZ3YjOuRLm+0LxIA7ldVVZVjk7nKYL6SgYUA8iOs2grwu0zGG2SHnlu4cOGBwbSnS7+QAIAEgJu9/c47JaaNbwO0CuDkKF/OILwJGz9YuHD+a1G9UJN+IQEACQA32rBhm9+b0vUAGF+FA+eqGPgzm/T1xZdeundA62vSLyQAIAHgNpWV784D2b8FMMnhTXcS8O3y8vkP97eiLv1CAgASAG5SVbX5RgY/CyAlZo0QflY+/9JvEpEdaRVd+oV8DChcY1N19a0M/h2i7PyWZUXXEOPeyurNv4juRYlJRgCQEYAbVFdXf9ZmWgcgqa/1gsEgdtXUYNu293H8+DGcPn0azIyMjAyMHDkSJTNmYs6ci5GZmdlvmwT8a3n5/PvDLdOlX0gAQAJAtU2bNhWQ4dkGIC/SOsyM97a8i5deegnt7Wf63J5hGFi4aDGuvvoaJCf3+cGBzQauWTR//vpw7elAAgASAKpVVr3zAoDPRVre0dGBJ598AgcPdH+k3xUIoK29Ax2dXbAsG8wM0zSRnJSEtDQf0nzdRxBZfj/uvPNLGDNmTOTGGR8HAh0lS5cubTvv25r0CzkHIJSqqqq6Bn10/paWFjz26M9x8MABWJaFE42nMeuii/GThx7CzJkzz3VUy7LQ3tmJhsbTOHK8AV2BAJqbmvDYoz/HgQN9XAtEGJec7Ps/Tr+v4UICQChlw/hupGWWZeHpp55EfX09gqEQGptb8YMH/w3///FfYvmya/Ctb34j7OuCwRCONTSirb0DnZ2deOK/foWGhhN91IB7N7z33sghv5lhSAJAKFNZ+e486r6sN6yX1r6Iuro6hEIWTp5uwX8++nP81Y03nFs+qbAw4raZgZOnmnCmvQOBQACrn3k64qcFBKQlBaw7B/9Ohi8JAKEMk317pGXHjh1FZeUmMDNONbfg5//xU1yxZMl562zZurXfNhpPNyMYDOHIkSOorq46933DMDB+/DgUFU1Dbu5IEPi2wb+T4UsCQChDwPJIy9a/9hqYGa1n2vHlL38Jy66++rzlJxoa8P0HHuy3DftsgADAG6+/jkAgAADIzR2JsWMKkJOdjalTJiM5OXlWZWXlhKG8n+FIAkAosWnTe+MBTAy37MyZM/jwwx1gZhimB/d+/Z4Llrfjq/f8LzScPDmgtjo6uxAIBNHa2oJdu2oAdJ9c7AmD5uZmBAIBEHkuH/w7Gp4kAIQioZmRluyu3QVmRmdXAEVFRfD5fOeWnWxsxM23fgGb390SVWtt7R0AgNpduwAAHR2d2FlTi7379mPP3v1gZjDbMwbzToYzeSCIUIJMngwOf/3F/gP7AQDtHZ3Y/O4W/PDHD2HMmDHYu3cf1vz+D2hpaYm6vfbOTuQgE/v37wMAZGVloqS4CESEQCCIbds/gG1ZUwb/joYnCQChBDH5I11q09zUDAAIhkIIBoP42SNDv2w/FOr+BKCtrQ2WZcHj8Zy7AMz0mDAMA5Zl+Yfc0DAjASCUYKZkUPgIaG1tBQDYdsSb9Qal52PAtrY2mKaJ2to98KX60NTUhGAwCAC+PjeQgOQcgFCCDbRHWpaU1H0/kNOXaPdsz+v1wuv1YsyY0RhTMBqjRo06WxTa+nh5QpIRwBBswBLPkfzWYmK6GITpIM4Bsx9EAQIabOBDtrjytob396uu1W0M5pORDgEyMjMAAKZpAgg60h4RwTAMeDwe+Hw+5ORkn7tjcFR+Hurr69HZ2TWwjxUSiARAlBig3+SWXs1EN9dT6/UE5JwbyjIAEMDdfyUAZBBW55ftBtFzlsFPfLF+60fqqncP28Y+ijD+HJU/CrtqapCS7EV7R6cj7aUke7u3ffa3/cmTjcjKzIQv1YfGxlPo7OwCmAf0uLBEIocAUXgmv/TmZ/PLPmCDXgHhDgA5A3xpEZjvMy0ceCa/7LlnC8qKYljmsGAY9gcAwh7kl8zo/jQuNSX6hwLl5ebit6ufxssvvoCS4uJz3089e4dgSUn3tkOhEPbs3Yft23fg448PAwCIjO1RNzjMSQAMwOr8eZNW55euJ9BvAcwawqY8BKxiCx+uzpv7yLMFZVregAIA5eXlpwDsCLds3LjxyMnJgcdjIj01uvNyX7ztVixetBBzLpqNf/jmvQAAj9m9HSLC7IvmRHqpZVmBt6JqLAFIAPRjdV7p1YC9FaDPOrhZD4i/zhb2PTuqVMubUAAARC+E+7ZhGLjyqu5Lf/1ZGTCMgf+Y7t33yemWfXu7/57tzwQRobS0DPn5kaYT4DcXL158esANJQg5B9CH1flzbwH4GQBmjJrwM9MTq/PLygO+jL+7s+5NZw54h4mQgac8Fv4FYfZvaWkZqqoq8fFHHyFvRDaONTQOaJsvrn0Jp06dQlZmJl59bT2yMtOR5ktBSkoKrlm2LOLrCMZTg34jw5g8EQjhP256Nm/ulUz8Mvp5Rp2DXms7jhV/i63OnPYeJqqqNj/H4FXhlrW2tuDhh3+K5qYmdHYF0NB4GlYU1wb4M9Phz8wAEeHOu76E4uKS8CsyPvb7M6bMmDEjcO5bmvQLOQQI49mCspE28VOIX+cHgKsy8vmxOLbnCrZN30OEz/oyMjJx111fQlZWFlKSvSjIzz13LN+XlGQvRueNgD8zA6ZpYtWqWyJ3fgBs8Pd6d36dyAgAnx4BrB5V+hSY1Nwfzrjn1hNbH1XStiJVVe/8iIF/irS8tbUFTz31a9QdOgTg7OO/OjrRFQgiZNlgtrufCehNgi8lGd6zFxJlZWXh1i/chsLCPuYXIbxTPv/ShRfOEaBLv5AAwPkB8JvcuRfbBr8HdaOjMybjoltObB3UpJbD0bp165Kz/DlVAEojrcPM+HDHDrz66it9Pt4LAHw+Hy6/fCkWX3YZvF5vX6u2sW3OXbRo3p5w7elAAgDnB8Dq/NL1Dp/xjxoDz3/h+NabVdYQb5WVlZNBZhX6eDR4j6NH67Fz506cbGhAc3MzbNtCRkYmsrOzMW16ESZPnnz2KsI+WUx806IFC14Mt1CXfiEBgE8CYHXunKkwzD3ovohPJctkTNdpFAAA1dXVpTbTegz8AqvBsgn4Snn5/CciraBLv5CTgL2Z5k1Q3/kBwLSBW1UXEW8LFix4n23jMjA+jmEznQS6pa/OrxMJgF4YtERxCb0pPQxRZdGiS2oCyZ5SENbFYPN7bIvml5dfuiYG2x6WJAB6IeZLVdfQgwnzKjT9/1k6d+7JhQvmLyfQrQCOOLDJdhBVBLo65ixefOkHDmwvYcg5AHSfA/j1iIvGeDyew6pr6c0gq/Bvjm2vU12HSuvWrUvOzB5xJ4G/CsZFUb78CJietKyuhy+77LKGaF6oS7+QS4HPMk2P6x4IadvGdAB1qutQ6dprr+0C8BiAxyort8yEEbqKmBYyUAJgAj55ik8QQD2APQS8w2y8Xl4+b9OFn++L80kA9DB4aqSHVCpDNB3An1SX4RYLF87bCWAngH/v+d7zzz9v5ubmJi1dulSr+yicIgFwFjGNU13DpzBNU12C261atcoCEH7OL9EvLU8yhcOgPuaQVsRg7R5TLeJLAuAsYoxXXcOnMApUlyASmxwCnMORnhShkvtGJS5wbPZVaZ0B72wmnsPAGCIjl5ibGXSUyW6wGdun1L68U3Wdw4F8DIjujwFX55edAJCrupYLJSV5U1cdru5QXYdqH02/vsDqnk34RhDK0O/olY4CvJ4ZvyvcPfdlQkVUnwbo0i8kAACAiJ7NLwvAlSMiY/Ktx7ccVF2FKvtnfm6caYe+BzZuBXiwz2eoBeHH7eRbPaNmzYDu+9elX8g5AACrcy7NgCs7P0AccuOhSVwcKrnub03L2g2mO4bQ+QGgGIwnUu2ODw8VrVjiUHkJQQIAgJ3EI1TXEBFTluoS4q1mxkrvwaIVz4D5MQCpDm56Gghv1BWvuJ+xMlbPeRxWJAAAmEYo1refDhobhl91DfH0XllZUqrd8QJRzO6GJAa+W1fS8ZSEgAQAAIAsw7UBQAytRgAj2gt+BSDy43udwvh8XUn74zFvx+UkAADAsLNVlxCJbegTAHUly+8C+Pa4Nch0x6Hi5V+LW3suJAEAgG1y7TkAsm0tpqw+XHTjCGb6Ufxbpofqpl9XGP923UECAAAI7g0AomTVNcRDwAh9B1Dy/5DKBv97/6slJgkAACC49hCAwdHPkDnM1Jddl0rMKqdIu+EvRcvLFLavjAQAANgxfwjloDEn/gig64y9ErF/EGifmIx/Vtm+KhIAAIjce6LNoLjOTqQEgVaorgHgGw/OvF67i64kAAAwOXqxiaMYlNDXpG5YssTDpP4BqAx4YFth5yhMZBIAAMh2bwAkuglHM0sA+FXXAQDE9HnVNcSbBADcPQJIdIZpzVVdQy+XHJpzg191EfEkAQCAnb3eXETDNuaoLqEXg7qCC1UXEU8SAABIAkAZNthVzz1kGItV1xBPEgDdJABUYbjrKjzmeapLiCcJgG59ziEtYoNRYQCYqLqO8xAmqy4hniQAurlsQgA97J+yeQTcF75ja2asdFtNMSMB0M21+4FcN1uJc7xeT57qGsIwU+yOCaqLiBfX/uDHmWv3A7u4tqGybYxUXUM4puHCSWJiJGF/uKLk4v1ALq5taNiw3TgCADMyVNcQLwn7wxUl1+4HYnZtbUNlMLkzAGBLAAh3sIkS9rl1TO6bhwEASEYA2gmpLiASQuKOAEjNA0AGIlN1AfGSsD9cURrQZBFqJG4AgMmvuoRwCJSuuoZ4Sdwfrui4NgA4gU8CAuxXXUE4TEjYw64LJfAPVxTYvQFgcEL/H/lVFxAWJ3Lons+V02HFGxO7NgBscu/5CQf4VRcQTiKfd7mQBAAAGxxw73N3yFJdQaywS0+22RodAkgAACDmTtf2f9hRTWs9zLjyaczEFFRdQ7xIAACwmFvdesE9Awk5AtiwZIkHx+HKs+0ElgDQCze7dwSQmAFQeDw5l116F6YN954TcpoEAABmblFdQ0ScmMejtpGURy49uCEXfyzsNAkAAAC3uHUEQAk6LwDbnEvuHAAAQJfqAuJFAgAAs4sPAYgS8uEUJlE+u3WnEzWrLiFeJAAAsItHAMyckAHATHmAO/c6MZpU1xAvEgAAijPyGmtajjPceVLKlR+VDRlxnkv7P2Bzk+oS4kWbK576Mio1I2O0L30Lw41f7rxldsgYrnwWAADAMOQQQCs2d07PyE090t7iwlEAu/KxWUPFwASX7ehzyLKbVNcQLzICAGAY3O4hY2aBL3Oz6t/3Yb5GPI/E+yiQgEmqa4ikLSn1hOoa4kUCAAAznQGA4qy8EWBYzAwX/TFOjyx273B5EDYsWeIhwKUP3qTmGTVr2lRXES8SAADsswFggqZOTPNXM2y46Y8dDBSr3kdOGn8sdRK79fCT+KjqEuJJAgCACW7s+fvUzLwJRAgoH/j3+rINu0Tl/nEaGXSR6hoiYcYR1TXEkwQAALL5eM/fDWDclPTcahcM/c/9sW0k1AjAYGOW6hoiMYB61TXEkwQAgKQM41jvf09KH1FkEJ1R/Zu/5wvgGYp2TUwws3tHAIAcAuimYOvadgDnbggyQPmz/QXvqv7N3+vP7IoE+b86ewfgfNV1RER0UHUJ8ZQQP1QOOW8UMNbnn5dieupV//Y/+5Wd5Z84W9WOcdLBomtngtx7ERBZ9l7VNcSTBMA5dF4AMJB+Sc7EAy747Q9mBtnWUlV7xklk0BLVNfTFgLlHdQ3xJAFwzqc//sny+hbmeNN2Kf/9DwYzX69irziNmJaprqEPreP2vCjnAHTETAfCfNtYMKIQcMfFQYt/nJ7v2qHzQByac4MfwGdU19GHveTWWxRjRALgLMOwwwUAPKZZUpQ1apP6y4HYBMxV8d4vTqJA8CYA7r29maDV8B+QADjHBvZFWlaUOWq2lzzHVY8CwHxPPPeJ05jpi6pr6AszalXXEG8SAD0Ms6+zv9mX503dq/w8ALj4R+mjLo/bPnHQX4qWlwFwde0G0VbVNcSbBMBZk3a+eByMiHeBZXp9iyel576jehTAbN8fz/3iFJvoW6pr6E8wEHpPdQ3xJgHQCxF29LW8NGdCodcwG5WOARiLH0zPvyJe+8QJB4qunUXAX6uuo29cN3X/Kw2qq4g3CYBe7H4CgID8z4wu3qV6FADL/kUFJqbEa78MBQNkkPEz197994l3VRegggRAL2RznwEAABke3+Ji/+iNSkcB4One1LbvxGOfDFVdyYo7ACxRXEa/GKTd8B+QADifbWweyGoX+cfPy0tOVzsSsPn/Ppicc02sd8lQHCi6dhoYP1Vdx0AQY4vqGlSQAOhl4t61ewCcHsCqKUtHl2R4TY/K8wGmRXjm/pSswljvl8E4NvuqNJOM38OlMwBfoMvnDUgA6I4ABtOARgEGjHErxsz5yAA6FI4ERoCNVyrS0111hSCjwugIep9mYKbqWgaEqGrUjtfOqC5DBQmAT+F3Brpmipl08Q0T5u4yCF0KrxGcbgTNVyvg98dwp0Slrui9/wfgRtV1DBjbf1JdgioSABcg5rejWd9neMtuGDd3G4G6FI4ELiavvanClz0+VvtloA4VrbgPhHtV1xENgrFedQ2qSABc4IwntRJAVMPBVE/y/BvGz91GhKDCcwIzYIWqK5IyL4nRrunXoZIVFSBUqGp/MAg4OaG2bLvqOlSRALjAjJo1AQBRjQIAIN2TMn/lxPk7UjzmKYUhUACyN1V407+7Mo5zCfwwdWTB3unLHgXjvni16RQmvEaocOlE5bEnARAGMf48mNelGN6ylePLW3O8GftUHQ7YzEk28/3FSWmb/8WTHtNr778FpD3oy/6n68aU/ibJML8ay7ZixubXVJegEjFrdftzWETnT1K1v3j5TBP04WC3x0Bb1YndO/e01Kt/9h3jRRv84wdCHZuc2mSFzzfetujunKTMq1aMK80yyZjm1LbjLJDESQVjd/+x8cIFuvQLCQB8OgAA4FDxdfsBnjyEzdpHOk6//ef6Dy4J2VbqELbjlPdBeJKDeOEBdHwc7YsrgJSAmfoZk/grDCyfk124sXTkpHkEpMeg1vggrC3c9VLYJy3p0i8kABAxAH4A8D8Pdds27I/fPFrTcLDteOlQt+UQBngbs1FN4C0wjJqkIOpr0H58DWAB3Z29Mzl5rMfCJBs0j0DzAb4CQGpqUvKRz4295FCaJ3mR2rfhBP6bwtqXfxt2iSb9QgIA4QPgwIzr5hk2O3aDSFNX+5a1h7dM6bQC2U5tM56IKDBvxOSNc3IK5zAwQnU9DjjjSwrkR7oASJd+IQGA8AHAANUVrzgEYIJT7TDQdKitYcvG4zXzuqyA36ntxhIBXJw1rnpB3rQ8k8wpqutxCjNWT9r90hciL9ejX7j9Fk1lCOCDRL8j5n90cJv+Sem5VxamXd5c13b8zY3Hay/qcOmIwCAKFvvHbZmfO83vIbNcdT1OM4h/o7oGN5ARAMKPAACgbubyYrZoV6zaZaD1WPup96tP7h59oqPFFWfSM7ypjeUjptVOyBg1zXDxBB5D1NCYenTM3K1bg5FW0KVfSAAgcgAAQF3xio0MxPyEV9AK7dp35ljD9pOHJjUH2sbFur3efGZy04zssR+W+Mclp3l8ZYjjRURq0A8La9d+u681dOkXcgjQD2Z+HEQxD4Ak01NSkjkWJZljYdnWnvrO00f3NB9O/0vriWlddsjRW2oNMgKjfNm1M7LHNY1PHZmXbHqnA1jsZBsuZjGsR1UX4RYyAkDfI4D6sutSu9r5CAB/3Ao6n23Z9qGmYNuxkx2twWNdTSmNHS3+tmB7dluoK5fBEa/m9JnelrQk36lsb9qp0anZLfkp2d6s5NTcZMM7EeCkOL4HF+H/Lqx9+YZ+19KkX0gAoO8AAIBDxSt+CuDv41JMdCwArczcbhNbPd80mDxENAJunoRDFaYlhbvXvtXvapr0CwkA9B8A+2YvG+sJmgcgHWqYo82FtWsHdHm2Lv1CbgYagKk7XjkM4mdV1yGGxmZ8X3UNbiMBMFAh44cAtL1tNAFsn7R77cuqi3AbCYABKty7djdAL6iuQwySYX9Ht5l/B0ICIAoW7PsICKmuQ0TtrcKada+qLsKNJACiMKX25Z0M+pXqOkRUGKA+L/rRmVwIFCWPEfiuxd6bAeSorkUMAOGZiTVrB/ykZ93Ix4Do/2PAC9XNuP4fAPwkNtUIB7UaIRSN3/NifbQv1KVfyAhgEM4g+ZF0CtwNYLrqWkQfmP51/J4Xou78OpERAKIfAQDA4Vk3LrDBG5HwN84MW1tPePMWzN36y4h3/PVFl34hAYDBBQAAfDT7pn8DeFjM0quZLiajbMIHv68Z7AZ06RdyCDAEJ5JG3pcfPHklCHNV1yI+QeDvjB1C59eJjAAw+BEAAHw8a+UsMu0tAJKdq0gMFgOvjd0+a9lQJ/vQpV9IAGBoAQAAhy9e+TWAf+FQOWLwDpug0tHb1jQMdUO69AsJAAw9AADgSNmqn4H57xwoRwxOiAhLC7aucWQCFF36hZwDcEjBJP7mkQOYQkTLVNeiJ/r7gq3POTb7kS5kBABnRgAA0LDw+oxgl68SwCxHNigGhvCTgi3PfcvJTerSLyQA4FwAAMDR+bdMhGVvBGisYxsVffnDqC3FK52e4VeXfiEBAGcDAACOl9082TZpA4C4Pt1XQ6+HTOu6cdVrOpzesC79QgIAzgcAANSXf36CYdkbACp0fOMCAFcaPuuavDfXtMVk65r0CwkAxCYAAODYJbcVkmFtgIPTiwkAQCWlBGPW+QEJAK3EKgCA7nMCBpnrASTMvHoqMdM6tNOqUTueDjupp3Pt6NEvJAAQ2wAAgOYFK3MClPw8A5+JaUOJjvHr3EDqV2iQN/hE1ZQm/UICALEPAADgJUs8DYGxDxPRPTFvLPEwgIqRlU/fH6/n+unSLyQAEJ8A6NGw6Pa7AX4EgKYz80SthYA7Rm566o/xbFSXfiEBgPgGAAA0LLpjCRE/DUCuFejbNovNv87f9MTBeDesS7+QAED8AwAATn327iwOBH8E8N1xb9z9bIAeyUlL/9/0yn90qShAl34hAQA1AdDj1GV3XMuExwEarawIF2HggMnGXdlv/9fbSuvQpF9IAEBtAABA61W35QW6PI8S0U1KC1GrgwkPtXe2PhiLK/uipUu/kACA+gDo0XTFl6+wwQ+BcbHqWuKK+CUjZNzrf/vxQ6pL6aFLv5AAgHsCAAC4osJoevvw7QC+D6BAdT0x9gYbxn05f/6l627j1aVfSADAXQHQ49hVt6X5rJR/ZMI3wMhWXY+DmIF1JowHMl//z2rVxUSiS7+QAIA7A6DH2SC4nYm+AWCq6nqGIAjQH5nsB7PX/2q76mL6o0u/kACAuwOgB1dUGK1VR5eD8Q0GlgJwf9Hd6pjp8STTfiLtT788qrqYgdKlX0gAYHgEQG+nPnv3eI9BqwC6GXDlI8lPAPijwbwmbeHoDVTh7MM64kGXfiEBgOEXAL01X33PFAKvArAMwCUAvIpKqWXgDYP5D+lZjW/RmjWWojocoUu/kADA8A6A3vi6u1PbQsZ82OblAC8BYR4An/MtUQDgPQA2guktCnneSn/94ePOt6OOLv1CAgCJEwAX4ooKo7Pq5ATLY08HuITZmE7g6QDy0D29+QiEfzK0DaARwEkADQDqwKg1QHtCBmoy2nMP0psVobi9EQV06RcSAEjcABgIBqh5+df8Pf/OmpffPByP2Z2mS7+QABBCY4bqAoQQ6kgACKExCQAhNCYBIITGJACE0JgEgBAakwAQQmMSAEJoTAJACI1JAAihMQkAITQmASCExiQAhNCYBIAQGpMAEEJjEgBCaEwCQAiNSQAIoTEJACE0JgEghMYkAITQmASAEBqTABBCYxIAQmhMAkAIjUkACKExCQAhNCYBIITGJACE0JgEgBAakwAQQmMSAEJoTAJACI1JAAihMQkAITQmASCExiQAhNCYBIAQGpMAEEJjEgBCaEwCQAiNSQAIoTEJACE0JgEghMYkAITQmASAEBqTABBCYxIAQmjsfwBz/E2JBPfGuwAAAABJRU5ErkJggg==`}var pr=[`src`,`alt`,`width`,`height`],mr=[`src`,`alt`,`width`,`height`],hr=l({__name:`CuiImage`,props:{src:{},alt:{default:`Image`},width:{default:`100%`},height:{default:`100%`},imageStyle:{type:[Boolean,null,String,Object,Array]},imageClass:{type:[Boolean,null,String,Object,Array]},imageContainerClass:{type:[Boolean,null,String,Object,Array]},imageContainerStyle:{type:[Boolean,null,String,Object,Array]}},setup(e){let{src:t,width:r,height:s,imageStyle:l,imageClass:u,imageContainerClass:d,imageContainerStyle:f}=k(e),p=C(!1),m=C(!1),_=n(()=>!!t.value&&!p.value&&!m.value),v=n(()=>t.value?fr(t.value):void 0),b=n(()=>fr());function x(){p.value=!0,m.value=!1}function S(){p.value=!1,m.value=!0}function w(e){return e?typeof e==`number`?`${e}px`:e:`auto`}return P(t,()=>{p.value=!1,m.value=!1}),(n,p)=>(y(),a(`div`,{class:h([`w-full h-full flex items-center justify-center relative`,j(d)]),style:g(j(f))},[I(c(j(te),{"stroke-width":`6`,class:`absolute w-[50%] h-[50%] max-w-[30px] max-h-[30px]`},null,512),[[N,j(_)]]),I(o(`img`,{src:j(v),alt:e.alt,width:w(j(r)),height:w(j(s)),style:g([j(l),{width:w(j(r)),height:w(j(s))}]),class:h(j(u)),decoding:`async`,onLoad:x,onError:S},null,46,pr),[[N,!j(_)&&!j(m)&&j(t)]]),j(m)||!j(t)?(y(),a(`img`,{key:0,src:j(b),alt:e.alt,width:j(r),height:j(s),class:`object-contain h-full`,decoding:`async`},null,8,mr)):i(``,!0)],6))}}),gr={class:`text-[10px] font-medium text-white/80 leading-none truncate`},_r={class:`text-[10px] font-medium text-white/80 leading-none shrink-0`},vr={class:`text-[10px] font-medium text-white/80 leading-none truncate`},yr=24,br=5e3,xr=50,Sr=3,Cr=l({__name:`CuiTimelineTrimHandles`,props:{nowMs:{},timeMsPerPx:{},futureOffset:{},viewportHeight:{},contentHeight:{},viewportElement:{},startMs:{},endMs:{},readMotion:{type:Function},writeMotion:{type:Function},recordingDurationMs:{}},emits:[`update:startMs`,`update:endMs`,`scrub`,`drag-start`,`drag-end`],setup(e,{emit:t}){let r=e,i=t,s=C(null),c=C(0),l=C(0),u=C(0),d=0,f=null,p=0;function m(e){return Math.round((r.nowMs-e)/r.timeMsPerPx+r.futureOffset)}let h=n(()=>m(r.endMs)-yr),v=n(()=>m(r.startMs)),b=n(()=>Math.max(0,v.value-h.value-yr));function x(e){let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}:${String(t.getSeconds()).padStart(2,`0`)}`}function S(e){let t=Math.max(0,Math.round(e/1e3)),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60;return n>0?`${n}h ${String(r).padStart(2,`0`)}m ${String(i).padStart(2,`0`)}s`:r>0?`${r}m ${String(i).padStart(2,`0`)}s`:`${i}s`}function w(){let e=p-c.value,t=r.readMotion(),n=(e+(t-d))*r.timeMsPerPx,a=r.nowMs;if(s.value===`start`){let e=l.value-n,o=r.endMs-br,s=a-(r.viewportHeight-yr-r.futureOffset+t)*r.timeMsPerPx,c=Math.max(Math.min(e,o),s);i(`update:startMs`,c),i(`scrub`,c)}else if(s.value===`end`){let e=u.value-n,t=r.startMs+br,o=Math.min(Math.max(e,t),a);i(`update:endMs`,o),i(`scrub`,o)}}function T(e,t){s.value=t,c.value=e.clientY,p=e.clientY,l.value=r.startMs,u.value=r.endMs,d=r.readMotion(),e.target.setPointerCapture?.(e.pointerId),i(`scrub`,t===`start`?r.startMs:r.endMs),i(`drag-start`),window.addEventListener(`pointermove`,E),window.addEventListener(`pointerup`,D),k()}function E(e){p=e.clientY,w()}function D(){s.value=null,A(),i(`drag-end`),window.removeEventListener(`pointermove`,E),window.removeEventListener(`pointerup`,D)}function k(){A();function e(){let t=r.viewportElement;if(!t||!s.value)return;let n=t.getBoundingClientRect(),i=p-n.top,a=r.readMotion();i<xr&&a>0?(r.writeMotion(Math.max(0,a-Sr)),w()):i>r.viewportHeight-xr&&(r.writeMotion(a+Sr),w()),f=requestAnimationFrame(e)}f=requestAnimationFrame(e)}function A(){f!==null&&(cancelAnimationFrame(f),f=null)}return _(()=>{A(),window.removeEventListener(`pointermove`,E),window.removeEventListener(`pointerup`,D)}),(t,n)=>(y(),a(`div`,{class:`absolute left-0 right-0 top-0 z-15 pointer-events-none`,style:g({height:`${e.contentHeight}px`})},[o(`div`,{class:`absolute left-0 right-0 top-0 bg-black/50`,style:g({height:`${Math.max(0,j(h))}px`})},null,4),o(`div`,{class:`absolute left-0 right-0 flex items-center justify-between bg-sky-500 rounded-t cursor-ns-resize pointer-events-auto select-none touch-none px-2`,style:g({top:`${j(h)}px`,height:`${yr}px`}),onPointerdown:n[0]||=L(e=>T(e,`end`),[`stop`,`prevent`])},[o(`span`,gr,`End: `+O(x(r.endMs)),1),n[2]||=o(`div`,{class:`absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 w-8 h-[3px] rounded-full bg-white/50`},null,-1),o(`span`,_r,O(S(r.recordingDurationMs??r.endMs-r.startMs)),1)],36),o(`div`,{class:`absolute left-0 right-0 pointer-events-none`,style:g({top:`${j(h)+yr}px`,height:`${j(b)}px`})},[...n[3]||=[o(`div`,{class:`absolute left-0 top-0 bottom-0 w-[3.5px] bg-sky-500`},null,-1),o(`div`,{class:`absolute right-0 top-0 bottom-0 w-[3.5px] bg-sky-500`},null,-1)]],4),o(`div`,{class:`absolute left-0 right-0 flex items-center bg-sky-500 rounded-b cursor-ns-resize pointer-events-auto select-none touch-none px-2`,style:g({top:`${j(v)}px`,height:`${yr}px`}),onPointerdown:n[1]||=L(e=>T(e,`start`),[`stop`,`prevent`])},[o(`span`,vr,`Start: `+O(x(r.startMs)),1),n[4]||=o(`div`,{class:`absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 w-8 h-[3px] rounded-full bg-white/50`},null,-1)],36),o(`div`,{class:`absolute left-0 right-0 bg-black/50`,style:g({top:`${j(v)+yr}px`,bottom:0})},null,4)],4))}}),wr=new Set([`motion`,`audio`,`contact`,`doorbell`,`switch`,`light`,`siren`,`security_system`,`line-crossing`]),Tr=function(e){return e[e.HEIGHT=8]=`HEIGHT`,e[e.WIDTH=150]=`WIDTH`,e}({}),Er={key:0,class:`w-full h-full flex items-center justify-center`},Dr={key:1,class:`w-full h-full flex flex-col`},Or={key:0,class:`p-2 flex flex-col gap-2 border-b-[1px] border-color`},kr={key:0,class:`flex flex-row gap-6 items-center w-full`},Ar={key:1,class:`w-full pr-3`},jr={class:`flex gap-2 items-center justify-between absolute z-21 left-0 w-full px-[calc(16px+0.5rem)] pointer-events-none top-2 h-[50px]`},Mr={class:`h-full flex flex-1 items-center justify-start gap-2`},Nr={key:0,class:`text-[0.65rem] font-medium px-2 py-1 rounded-full shadow-md`,style:{background:`color-mix(in srgb, var(--p-sky-500), transparent 20%)`,color:`white`}},Pr={class:`h-full flex flex-1 items-center justify-center`},Fr={class:`flex flex-1 items-center justify-end`},Ir={key:1,class:`flex gap-2 items-end justify-between absolute z-21 bottom-safe-offset-2 left-0 w-full px-[calc(16px+0.5rem)] pointer-events-none`},Lr={class:`flex flex-1 items-end justify-start h-[50px]`},Rr={class:`flex flex-1 items-end justify-end`},zr={key:0,class:`text-xs font-semibold`},Br=[`dir`],Vr=[`data-future-tick`],Hr=[`width`],Ur=[`width`,`height`,`rx`,`ry`],Wr={class:`absolute pl-6 h-full w-full items-center flex`},Gr={key:0,class:`text-xs leading-none w-[60px]`},Kr={key:1,class:`flex flex-col items-center justify-end h-full`},qr={class:`absolute bottom-0 pb-6 h-full w-full items-center justify-end flex flex-col`},Jr={key:0,class:`text-xs leading-none h-[12px]`},Yr=[`height`],Xr=[`width`,`height`,`rx`,`ry`],Zr={key:0,class:`text-xs truncate opacity-80 px-1`},Qr={key:0,class:`text-xs truncate opacity-80 writing-mode-vertical px-1 !text-white`},$r={class:`flex items-center gap-1.5 shrink-0 px-2`},ei=[`title`],ti=[`onClick`],ni={class:`rounded-md bg-black overflow-hidden`,style:{border:`1px solid var(--timeline-event-thumb-border)`,"box-shadow":`var(--timeline-event-thumb-shadow)`,"aspect-ratio":`16/9`}},ri=[`data-tooltip-title`,`data-tooltip-text`],ii=[`onClick`],ai={class:`rounded-md bg-black overflow-hidden`,style:{border:`1px solid var(--timeline-event-thumb-border)`,"box-shadow":`var(--timeline-event-thumb-shadow)`,width:`64px`,height:`36px`}},oi=[`data-tooltip-title`,`data-tooltip-text`],si={class:`flex flex-col items-center gap-1.5 shrink-0 py-2`},ci=[`title`],li=[`onClick`],ui={class:`flex flex-row gap-3 p-3 h-full`},di={class:`flex flex-col gap-0.5 shrink-0 w-[100px] justify-center`},fi={class:`text-sm font-medium text-color truncate`},pi={class:`text-sm text-muted-color`},mi={class:`text-xs text-muted-color`},hi={class:`flex gap-1.5 mt-1`},gi=[`title`],_i={class:`flex-1 min-w-0 relative`},vi={class:`w-full h-full rounded-md overflow-hidden bg-black`},yi=[`data-tooltip-title`,`data-tooltip-text`],bi={class:`relative flex flex-col items-center`},xi={key:0,class:`absolute -bottom-0.5 w-1 h-1 rounded-full bg-red-500`},Si=200,Ci=175,wi=2,Ti=70,Ei=1800*1e3,Di=((e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n})(l({__name:`CuiTimeline`,props:{type:{default:`vertical`},flatCard:{type:Boolean},showDate:{type:Boolean,default:!0},showZoom:{type:Boolean,default:!0},showSegments:{type:Boolean,default:!0},transparent:{type:Boolean,default:!1},overlayClass:{type:[Boolean,null,String,Object,Array]},overlayStyle:{type:[Boolean,null,String,Object,Array]},cardClass:{type:[Boolean,null,String,Object,Array],default:`h-full`},cardStyle:{type:[Boolean,null,String,Object,Array]},darkMode:{type:Boolean},hideOverlay:{type:Boolean},tickColor:{},cameraIds:{},initialTimestamp:{},localeSettings:{},trimMode:{type:Boolean},defaultState:{type:Boolean},loading:{type:Boolean,default:!1},ignoreBottomSafeArea:{type:Boolean},mdBreakpoint:{type:Boolean,default:!1}},emits:[`date-change`,`scroll`,`scrolling`,`trim-change`],setup(l,{expose:u,emit:p}){let _=l,b=p,{t:S,locale:A}=se(),ne=d(Un,void 0),z=tn(),{type:V,flatCard:ce,showDate:le,showZoom:ue,showSegments:fe,transparent:me,overlayClass:he,overlayStyle:ge,darkMode:_e,hideOverlay:ve,cardClass:ye,cardStyle:be,tickColor:xe,cameraIds:Se,initialTimestamp:Ce,localeSettings:Te,trimMode:Ee,loading:Oe,ignoreBottomSafeArea:ke}=k(_),je=[`Sunday`,`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`],Me=[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`],Pe=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],Fe=M(`timelineRef`),Le=M(`viewportRef`),Re=M(`datePickerRef`),Be=M(`dateLabelEl`),Ve=M(`timeLabelEl`),Ue=C(`timeline`),We=C(!1),G=C(4),Ke=C(ur()),Je=C([{key:`timeline`,label:S(`views.camera.timeline`)},{key:`detections`,label:S(`views.camera.detections`)}]),K=pe(Fe),Xe=n(()=>G.value===8);function Ze(){G.value<8&&(G.value=Math.min(8,G.value+wi))}function $e(){G.value>0&&(G.value=Math.max(0,G.value-wi))}let et=M(`motionLayerRef`),nt=0,rt=D(0),at=0;function ot(){return nt}let ct=new Map,lt=new Set;function dt(e,t){t?ct.set(e,t):ct.delete(e)}function ft(e){let t=Q.value.events,n=new Set;for(let r of t)r.showThumbnail&&Math.abs(r.topPx-e-Si)<40&&n.add(r.id);for(let e of n)if(!lt.has(e)){let t=ct.get(e);t&&(t.classList.add(`scale-110`),t.classList.add(`timeline-thumb-active`))}for(let e of lt)if(!n.has(e)){let t=ct.get(e);t&&(t.classList.remove(`scale-110`),t.classList.remove(`timeline-thumb-active`))}lt=n}function mt(e){let t=et.value;if(!t)return;let n=Math.round(e);t.style.transform=V.value===`vertical`?`translate3d(0, ${-n}px, 0)`:`translate3d(${n}px, 0, 0)`}function ht(e){let t=_t.value,n=Math.max(0,Math.min(e,t));if(n===nt)return;nt=n,mt(n),ft(n);let r=wt.value,i=Math.floor(n/r);i!==at&&(at=i,rt.value=i*r)}let _t=n(()=>{let e=V.value===`vertical`?K.height.value:K.width.value,t=Ue.value===`detections`?Xt.value:Yt.value;return Math.max(0,t-e)}),vt=C(0);function bt(){if(typeof document>`u`)return 0;let e=document.createElement(`div`);e.style.cssText=`position:fixed;visibility:hidden;pointer-events:none;padding-bottom:env(safe-area-inset-bottom)`,document.body.appendChild(e);let t=parseFloat(getComputedStyle(e).paddingBottom)||0;return e.remove(),t}function xt(){vt.value=ke.value?bt()+Ti:0}P(ke,xt,{immediate:!0}),W(window,`resize`,xt),W(window,`orientationchange`,xt);let St=cr({element:Le,writeFn:ht,readFn:ot,maxOffsetPx:_t,orientation:V,bottomIgnorePx:vt}),{dragActive:Ct}=St,wt=n(()=>Tr.HEIGHT+G.value),Tt=[{zoom:0,labelTick:5,bigTick:5,duration:600*1e3},{zoom:2,labelTick:15,bigTick:5,duration:900*1e3},{zoom:4,labelTick:16,bigTick:4,duration:120*1e3},{zoom:6,labelTick:15,bigTick:5,duration:60*1e3},{zoom:8,labelTick:30,bigTick:10,duration:30*1e3}];function Et(e){let t=Tt.find(t=>t.zoom===e)??Tt[0],n=Tr.HEIGHT+e;return t.duration/t.labelTick/n}let Dt=n(()=>{let e=Tt.find(e=>e.zoom===G.value)??Tt[0],t=e.labelTick,n=e.bigTick,r=e.duration,i=r/t;return{bigTickInterval:n,labelInterval:t,duration:r,timeMsPerTick:i,timeMsPerPx:i/wt.value,pxPerSecond:wt.value/(r/1e3/t)}}),q=C(Date.now()),Ot=pn({cameraIds:n(()=>Se.value??[]),currentTimeMs:q,timeMsPerPx:n(()=>Dt.value.timeMsPerPx),viewportPx:n(()=>V.value===`vertical`?K.height.value:K.width.value),initialTimestamp:Ce}),kt=bn({availableCameraIds:n(()=>Se.value??[]),cameraIds:n(()=>Se.value??[]),realtime:!0,pageSize:40,filter:{state:`ended`,hasDetections:!0}}),At=n(()=>Ot.recordings.value),jt=n(()=>Ot.events.value),Nt=n(()=>Ot.systemEvents.value),J=x(new Map),Pt=new Set,Y=n(()=>{let e=[],t=0;for(let n of kt.events.value){if(n.state!==`ended`)continue;let r=n.endTime??n.lastUpdate,i=Math.max((r-n.startTime)/1e3,1),a=n.types??[],o=[...new Set(a)];e.push({id:n.id,timestamp:n.startTime,endTimeMs:r,duration:i,types:a,thumbnail:J.get(n.id),topPx:t*Ci,pxPerSecond:Ci/i,displayTypes:o.slice(0,2),extraCount:Math.max(0,o.length-2),description:n.segments?.find(e=>e?.description)?.description}),t++}return e}),Ft=er(n(()=>q.value),n(()=>Date.now()),At),{trimActive:It,trimStartMs:Lt,trimEndMs:Rt,trimDurationMs:zt,trimRecordingDurationMs:Bt}=Ft,X=Zn({nvr:ne,type:V,segment:Ue,timeMsPerPx:n(()=>Dt.value.timeMsPerPx),recordings:At,detectionCards:Y,trimState:Ft,zoomLevel:G,writeMotion:ht,getMotionOffset:ot,motionBoundaryPx:rt,motionMaxOffsetPx:_t,dragActive:St.dragActive,flingActive:St.flingActive,wheelActive:St.wheelActive}),{currentTimeMs:Vt,nowMs:Ht,isLive:Z,isScrolling:Ut,trimPlaying:Wt}=X;ee(()=>{q.value=Vt.value}),ee(()=>{let e=Vt.value,t=Be.value,n=Ve.value;t&&(t.textContent=lr(e,`ddd., D. MMM. YY`)),n&&(n.textContent=lr(e,`HH:mm:ss`))});let Gt=n(()=>{let e=Vt.value;if(e)for(let t of jt.value){let n=t.timestamp,r=n+t.duration*1e3;if(e<n||e>r)continue;let i=t.id.replace(/:(trigger|seg:\d+)$/,``),a=z.getEvent(i);if(a)return{id:a.id,cameraId:a.cameraId,startMs:a.startTime,endMs:a.endTime??a.lastUpdate??Date.now()}}}),Kt=n(()=>{let e=Vt.value;if(e)for(let t of jt.value){let n=t.timestamp,r=n+t.duration*1e3;if(!(e<n||e>r)&&t.description)return t.description}}),qt=n(()=>Si*Dt.value.timeMsPerPx),Jt=n(()=>{let e=Math.ceil((Ei+qt.value)/Dt.value.timeMsPerTick),t=V.value===`vertical`?K.height.value:K.width.value,n=Math.ceil(t*2/wt.value);return Math.max(e,n)}),Yt=n(()=>Jt.value*wt.value),Xt=n(()=>{let e=V.value===`vertical`?K.height.value:K.width.value;return Y.value.length*Ci+e}),Zt=C(!1);v(()=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{Zt.value=!0})})});let Qt=n(()=>{let e=Ht.value,t=Dt.value;return nn(e,t,n=>Math.round((e-n)/t.timeMsPerPx+Si),Jt.value,qt.value)}),$t={ticks:[],recordings:[],events:[],motionEvents:[],detectionEvents:[],systemEvents:[]},Q=n(()=>{let e=Qt.value;if(!Zt.value)return{...$t,ticks:e};let t=Ht.value,n=Dt.value,r=At.value??[],i=jt.value??[],a=Nt.value??[],o=e=>Math.round((t-e)/n.timeMsPerPx+Si),s=r.map(e=>{let t=o(e.endTime);return{topPx:t,heightPx:o(e.startTime)-t}}),c=80*n.timeMsPerPx,l=i.map(e=>{let n=e.types.every(e=>wr.has(e)),r=n&&e.isActive?Math.max(e.timestamp+e.duration*1e3,t):e.timestamp+e.duration*1e3,i=o(e.timestamp),a=o(r),s=Math.max(i-a,8),c=a+s/2,l=e.types.slice(0,2),u=Math.max(0,e.types.length-2),d=e.timestamp+e.duration*500;return{...e,topPx:c,barTopPx:a,durationPx:s,displayTypes:l,extraCount:u,showThumbnail:!1,isTriggerOnly:n,midMs:d}}),u=[...l].filter(e=>!e.isTriggerOnly).sort((e,t)=>t.midMs-e.midMs),d=1/0;for(let e of u)d-e.midMs>=c&&(e.showThumbnail=!0,d=e.midMs);let f=l;return{ticks:e,recordings:s,events:f,motionEvents:f.filter(e=>e.isTriggerOnly),detectionEvents:f.filter(e=>!e.isTriggerOnly),systemEvents:a.map(e=>{let t=e.duration?e.timestamp+e.duration:e.timestamp,n=o(e.timestamp),r=o(t);return{...e,topPx:n,endPx:r,heightPx:Math.max(n-r,2)}})}}),en=n(()=>{let e=Q.value.ticks;if(e.length===0)return e;let t=rt.value,n=V.value===`vertical`?K.height.value:K.width.value,r=n>0?n:1e3,i=2*wt.value,a=t-i,o=t+r+i;return e.filter(e=>e.position>=a&&e.position<=o)});P(()=>Q.value.events,()=>{lt=new Set,ft(nt)},{flush:`post`});function nn(e,t,n,r,i){let a=t.timeMsPerTick,o=e+i,s=o-r*a,c=Math.ceil(s/a),l=Math.floor(o/a),u=[];for(let r=l;r>=c;r--){let i=r*a,o=n(i),s=i>e,c=r%t.labelInterval===0,l=r%t.bigTickInterval===0,d=new Date(i),f=`${String(d.getHours()).padStart(2,`0`)}:${String(d.getMinutes()).padStart(2,`0`)}`;G.value>=4&&(f+=`:${String(d.getSeconds()).padStart(2,`0`)}`),u.push({index:r,time:f,timestamp:i,position:o,isLabelTick:c,isMediumTick:l,isFutureTick:s})}return u}let rn={motion:Ie,person:gt,face:Ne,vehicle:Ge,animal:qe,package:tt,audio:yt,license_plate:Qe,contact:Ye,doorbell:ze,switch:pt,light:He,siren:st,security_system:it},an=ut,on=n(()=>{let e=rt.value,t=K.height.value,n=Ci*2;return Y.value.filter(r=>{let i=r.topPx+Si;return i+Ci>=e-n&&i<=e+t+n})});P(on,e=>{for(let t of e){if(J.has(t.id)||Pt.has(t.id))continue;let e=kt.events.value.find(e=>e.id===t.id);if(!e)continue;let n=z.getCachedThumbnails(t.id);if(n){let r=Mt(n,e);if(r.url){J.set(t.id,r.url);continue}}Pt.add(t.id),kt.loadThumbnails(t.id,e.startTime).then(n=>{if(Pt.delete(t.id),n){let r=Mt(n,e);r.url&&J.set(t.id,r.url)}})}}),P([rt,_t],([e,t])=>{Ue.value!==`detections`||!kt.hasMore.value||t-e<300&&kt.loadMore()}),P([n(()=>Ue.value===`detections`&&Y.value.length<Math.ceil((V.value===`vertical`?K.height.value:K.width.value)/Ci)+2&&kt.hasMore.value),()=>kt.isLoading.value],([e,t])=>{e&&!t&&kt.loadMore()});let sn;P(()=>Y.value,e=>{if(Ue.value!==`detections`||e.length===0){sn=e[0]?.id;return}let t=sn,n=e[0]?.id;if(sn=n,t&&n&&t!==n&&!Z.value){let n=e.findIndex(e=>e.id===t);n>0&&ht(ot()+n*Ci)}});let{plugin:cn}=B(`@camera.ui/camera-ui-nvr`),ln=C(new Map),un=new Set;async function dn(e,t){let n=`${e}-${t}`;if(ln.value.has(n)||un.has(n))return;un.add(n);let r=cn.value;if(!r){un.delete(n);return}try{let i=Se.value??[],a=await Promise.all(i.map(n=>r.getRecordingDays(n,e,t+1).catch(()=>[]))),o=new Set(a.flat());ln.value.set(n,o),ln.value=new Map(ln.value)}finally{un.delete(n)}}function fn(e,t,n){let r=`${e}-${t}`,i=ln.value.get(r);if(!i)return dn(e,t),!1;let a=`${e}-${String(t+1).padStart(2,`0`)}-${String(n).padStart(2,`0`)}`;return i.has(a)}let mn=n(()=>{let e={body:{class:`w-full h-full p-0 overflow-hidden`},content:{class:`h-full`},root:{class:{},style:{}}};if(typeof ye.value==`string`?e.root.class={...e.root.class,[ye.value]:!0}:typeof ye.value==`object`&&(e.root.class={...e.root.class,...ye.value}),typeof be.value==`string`){let t=be.value.split(`;`).map(e=>e.trim()).filter(e=>e.length>0).map(e=>{let[t,n]=e.split(`:`).map(e=>e.trim());return[t,n]}),n=Object.fromEntries(t);e.root.style={...e.root.style,...n}}else typeof be.value==`object`&&(e.root.style={...e.root.style,...be.value});return ce.value&&(e.root.class={...e.root.class,"!rounded-none !border-0":!0}),e}),hn=n(()=>{let e=Ke.value.getDay(),t=Ke.value.getMonth();return`${Te.value?.dayNames?.[e]??je[e]}, ${Te.value?.monthNames?.[t]??Me[t]} ${lr(Ke.value,`YY`)}`}),gn=n(()=>{let e=Ke.value.getMonth(),t=Te.value?.monthNamesShort?.[e]??Pe[e];return`${lr(Ke.value,`D`)}. ${t}`}),_n=n(()=>{if(We.value)return dr()});function vn(e){let t=new Date(e),n=new Date,r=new Date(n.getFullYear(),n.getMonth(),n.getDate()),i=new Date(t.getFullYear(),t.getMonth(),t.getDate()),a=Math.floor((r.getTime()-i.getTime())/(1e3*60*60*24));if(a===0)return S(`components.timeline.today`);if(a===1)return S(`components.timeline.yesterday`);if(a<7){let e=t.getDay();return Te.value?.dayNames?.[e]??je[e]}let o=t.getMonth(),s=Te.value?.monthNamesShort?.[o]??Pe[o];return`${t.getDate()}. ${s}`}function yn(e){let t=Math.round(e);if(t<60)return`${t}s`;let n=Math.floor(t/60),r=t%60;return r>0?`${n}m ${r}s`:`${n}m`}function xn(e){switch(e){case`info`:return`bg-[var(--timeline-sys-info-bg)] border-[var(--timeline-sys-info-border)]`;case`success`:return`bg-[var(--timeline-sys-success-bg)] border-[var(--timeline-sys-success-border)]`;case`warning`:return`bg-[var(--timeline-sys-warning-bg)] border-[var(--timeline-sys-warning-border)]`;case`error`:return`bg-[var(--timeline-sys-error-bg)] border-[var(--timeline-sys-error-border)]`;default:return`bg-[var(--timeline-sys-info-bg)] border-[var(--timeline-sys-info-border)]`}}function Sn(e){switch(e){case`info`:return`border-[var(--timeline-sys-info-border)]`;case`success`:return`border-[var(--timeline-sys-success-border)]`;case`warning`:return`border-[var(--timeline-sys-warning-border)]`;case`error`:return`border-[var(--timeline-sys-error-border)]`;default:return`border-[var(--timeline-sys-info-border)]`}}function Cn(e){switch(e){case`info`:return`--timeline-sys-info-bg`;case`success`:return`--timeline-sys-success-bg`;case`warning`:return`--timeline-sys-warning-bg`;case`error`:return`--timeline-sys-error-bg`;default:return`--timeline-sys-info-bg`}}function wn(e){X.onEventClick(e)}function Tn(){It.value||(X.enterLive(),Ke.value=dr(new Date(Ht.value))),m(()=>{X.scrollToTime(Ht.value)})}let En=!1;function Dn(e){if(e.getTime()>Date.now()){Re.value?.hide();return}En=!0,Ke.value=e,m(()=>{Re.value?.hide(),setTimeout(()=>{En=!1},400)})}P(G,(e,t)=>{X.handleZoomChange(e,t,Et)}),P(Ue,(e,t)=>{X.handleSegmentChange(e,t)}),P(Ee,(e,t)=>{if(e){let e=K.height.value*Dt.value.timeMsPerPx,t=Math.max(5e3/2,e*.15),n=X.getCurrentTimeMs();X.onTrimActivate(n-t,n+t)}else t&&X.onTrimDeactivate()}),P([Lt,Rt],([e,t])=>{It.value&&b(`trim-change`,{startMs:e,endMs:t})}),P(Ke,e=>{let t=dr(e),n=dr(new Date(Ht.value));if(t.getTime()>=n.getTime()){ht(0);return}X.scrollToTime(e.getTime()),m(()=>{X.enterPlay(e.getTime())})}),ee(()=>{Z.value&&!We.value&&!En&&(Ke.value=dr(new Date(Ht.value)))}),P(V,()=>{X.scrollToTime(X.getCurrentTimeMs())}),P(Ut,(e,t)=>{if(t&&!e&&G.value>=6&&!Z.value){let e=wt.value,t=ot(),n=Math.round(t/e)*e;Math.abs(n-t)>.5&&ht(n)}}),P(rt,e=>{b(`scroll`,e)},{immediate:!0}),ee(()=>{b(`scrolling`,Ut.value)}),ee(()=>{b(`date-change`,Z.value?`live`:new Date(Vt.value))}),P(Te,()=>{Te.value?.locale&&(A.value=Te.value.locale)},{immediate:!0,deep:!0});let On=!1;return P([()=>Ce.value,()=>V.value===`vertical`?K.height.value:K.width.value],([e,t])=>{On||!e||t<=0||(On=!0,m(()=>X.scrollToTime(e)))},{immediate:!0}),P(et,e=>{e&&mt(nt)}),de(()=>{z.dispose()}),u({scrollToTime:X.scrollToTime,scrollToEvent:wn,trimActive:It,trimStartMs:Lt,trimEndMs:Rt,trimDurationMs:zt,trimRecordingDurationMs:Bt,zoomLevel:G,zoomIn:Ze,zoomOut:$e,currentEvent:Gt,currentEventDescription:Kt,isLive:Z}),(n,u)=>{let d=te,p=Ae,m=De,_=R,v=we;return y(),a(`div`,{class:h({"dark-mode":j(_e)})},[c(j(U),{class:h([`cui-card`,{"!bg-transparent !border-0":j(me)}]),pt:j(mn)},{content:F(()=>[j(Oe)?(y(),a(`div`,Er,[c(d,{class:`w-[32px] h-[32px]`,"stroke-width":`4`})])):(y(),a(`div`,Dr,[j(V)===`vertical`&&(j(le)&&!l.mdBreakpoint||j(ue)&&!l.mdBreakpoint||j(fe))?(y(),a(`div`,Or,[j(le)&&!l.mdBreakpoint||j(ue)&&!l.mdBreakpoint?(y(),a(`div`,kr,[j(le)&&!l.mdBreakpoint?(y(),r(j(H),{key:0,text:``,disabled:j(Ut),severity:`secondary`,label:j(hn),class:`cui-button-small shrink-0 pointer-events-auto`,onClick:u[0]||=e=>j(Re)?.toggle(e)},{icon:F(()=>[c(p)]),_:1},8,[`disabled`,`label`])):i(``,!0),j(ue)&&!l.mdBreakpoint?(y(),a(`div`,Ar,[c(j(oe),{modelValue:j(G),"onUpdate:modelValue":u[1]||=e=>f(G)?G.value=e:null,disabled:j(Ue)!==`timeline`,step:2,max:8,min:0,class:`flex-1 pointer-events-auto`},null,8,[`modelValue`,`disabled`])])):i(``,!0)])):i(``,!0),j(fe)?(y(),r(j(ae),{key:1,modelValue:j(Ue),"onUpdate:modelValue":u[2]||=e=>f(Ue)?Ue.value=e:null,options:j(Je),"option-label":`label`,"option-value":`key`,pt:{pcToggleButton:{root:{class:`w-full`}}},"allow-empty":!1,disabled:j(It),class:`flex justify-stretch pointer-events-auto`},null,8,[`modelValue`,`options`,`disabled`])):i(``,!0)])):i(``,!0),o(`div`,{ref_key:`timelineRef`,ref:Fe,class:`w-full h-full relative pointer-events-auto`,style:g({background:j(me)?void 0:`var(--card-background)`})},[!j(ve)&&!j(It)?(y(),a(`div`,{key:0,class:h([`absolute w-full h-full pointer-events-none z-10 timeline-overlay-vertical`,[j(he)]]),style:g([j(ge)])},null,6)):i(``,!0),o(`div`,jr,[o(`div`,Mr,[j(le)&&j(V)===`horizontal`?(y(),r(j(H),{key:0,rounded:``,severity:`secondary`,disabled:j(Ut),class:`cui-button-small shadow-md pointer-events-auto shrink-0`,onClick:u[3]||=e=>j(Re)?.toggle(e)},{icon:F(()=>[c(p,{width:`100%`,height:`100%`})]),_:1},8,[`disabled`])):i(``,!0),c(t,{name:`fade`},{default:F(()=>[j(Xe)?(y(),a(`span`,Nr,O(j(S)(`components.timeline.fine_scrubbing`)),1)):i(``,!0)]),_:1})]),o(`div`,Pr,[c(t,{name:`fade`},{default:F(()=>[!j(Z)&&j(V)===`vertical`?(y(),r(j(H),{key:0,rounded:``,disabled:j(Ut),class:`cui-icon-md shadow-md pointer-events-auto`,onClick:Tn},{icon:F(()=>[c(m,{width:`100%`,height:`100%`})]),_:1},8,[`disabled`])):i(``,!0)]),_:1})]),o(`div`,Fr,[c(t,{name:`fade`},{default:F(()=>[j(Z)?i(``,!0):(y(),a(e,{key:0},[j(V)===`vertical`?(y(),r(j(H),{key:0,fluid:``,severity:`secondary`,class:`flex items-center justify-center cui-button-small shadow-md align-middle p-2 !text-xs`},{default:F(()=>[o(`span`,{ref_key:`dateLabelEl`,ref:Be},null,512)]),_:1})):(y(),r(j(H),{key:1,rounded:``,disabled:j(Ut),class:`cui-icon-md shadow-md pointer-events-auto rotate-90`,onClick:Tn},{icon:F(()=>[c(m,{width:`100%`,height:`100%`})]),_:1},8,[`disabled`]))],64))]),_:1})])]),j(V)===`vertical`?(y(),a(`div`,Ir,[o(`div`,Lr,[j(le)&&l.mdBreakpoint?(y(),r(j(H),{key:0,severity:`secondary`,disabled:j(Ut),label:j(gn),class:`cui-button-small shadow-md pointer-events-auto`,onClick:u[4]||=e=>j(Re)?.toggle(e)},{icon:F(()=>[c(p)]),_:1},8,[`disabled`,`label`])):i(``,!0)]),u[15]||=o(`div`,{class:`flex flex-1 items-end justify-center h-[50px]`},null,-1),o(`div`,Rr,[T(n.$slots,`bottom-right`,{},void 0,!0)])])):i(``,!0),I(o(`div`,{class:h([`absolute z-20 pointer-events-none`,{"bg-primary-500":j(Z)&&j(V)===`vertical`,"bg-sky-500":!j(Z)&&j(V)===`vertical`,"bg-gradient-to-t from-primary-500 to-transparent":j(Z)&&j(V)===`horizontal`,"bg-gradient-to-t from-sky-500 to-transparent":!j(Z)&&j(V)===`horizontal`,"h-[2px] w-full":j(V)===`vertical`,"w-[2px] h-full":j(V)===`horizontal`}]),style:g(j(V)===`vertical`?{top:`${Si}px`}:{right:`${Si}px`})},[o(`span`,{class:h([`absolute rounded-xl text-white text-xs inline-flex items-center justify-center p-2`,{"bg-primary-500":j(Z),"bg-sky-500":!j(Z),"left-[calc(16px+0.25rem)] h-[32px] w-[60px] -top-[16px]":j(V)===`vertical`,"bottom-[calc(12px+0.25rem)] w-[60px] h-[32px] -left-[30px]":j(V)===`horizontal`}])},[j(Z)?(y(),a(`span`,zr,O(j(S)(`components.timeline.live`)),1)):(y(),a(`span`,{key:1,ref_key:`timeLabelEl`,ref:Ve,class:`text-xs font-semibold`},null,512))],2)],6),[[N,!j(It)||j(Wt)]]),o(`div`,{ref_key:`viewportRef`,ref:Le,class:h([`w-full h-full relative overflow-hidden overscroll-none`,{"select-none":j(Ct)}]),style:g({touchAction:`none`,cursor:j(Ue)===`detections`?void 0:j(Ct)?`grabbing`:`grab`}),dir:j(V)===`horizontal`?`rtl`:`ltr`},[j(Ue)===`timeline`?(y(),a(`div`,{ref_key:`motionLayerRef`,ref:et,key:j(G),class:h([`absolute inset-0`,{"h-full":j(V)===`horizontal`}]),style:{"will-change":`transform`},dir:`ltr`},[(y(!0),a(e,null,w(j(en),t=>(y(),a(`div`,{key:`tick-${t.timestamp}-${j(G)}`,class:h([`absolute text-muted-color select-none`,{"w-full flex h-[2px]":j(V)===`vertical`,"h-full flex flex-col w-[2px]":j(V)===`horizontal`}]),style:g({[j(V)===`vertical`?`top`:`right`]:`${t.position}px`,color:j(xe)}),"data-future-tick":t.isFutureTick},[j(V)===`vertical`?(y(),a(e,{key:0},[(y(),a(`svg`,{width:t.isLabelTick?16:t.isMediumTick?8:4,height:`2`,class:h([`ml-1`,{"opacity-50":!t.isLabelTick}]),preserveAspectRatio:`xMidYMid meet`},[o(`rect`,{x:`0`,y:`0`,width:t.isLabelTick?16:t.isMediumTick?8:4,height:t.isLabelTick?2:1,fill:`currentColor`,rx:t.isLabelTick?1.5:.5,ry:t.isLabelTick?1.5:.5},null,8,Ur)],10,Hr)),o(`div`,Wr,[t.isLabelTick?(y(),a(`span`,Gr,O(t.time),1)):i(``,!0)])],64)):(y(),a(`div`,Kr,[o(`div`,qr,[t.isLabelTick?(y(),a(`span`,Jr,O(t.time),1)):i(``,!0)]),(y(),a(`svg`,{width:`2`,height:t.isLabelTick?16:t.isMediumTick?8:4,class:h([`mb-1`,{"opacity-50":!t.isLabelTick}]),preserveAspectRatio:`xMidYMid meet`},[o(`rect`,{x:`0`,y:`0`,width:t.isLabelTick?2:1,height:t.isLabelTick?16:t.isMediumTick?8:4,fill:`currentColor`,rx:t.isLabelTick?1.5:.5,ry:t.isLabelTick?1.5:.5},null,8,Xr)],10,Yr))]))],14,Vr))),128)),j(V)===`vertical`?(y(),a(`div`,{key:0,class:`absolute top-0 w-[8px] rounded-sm pointer-events-none`,style:g({left:`calc(16px + 0.25rem + 60px + 2rem)`,height:`${j(Yt)}px`,background:`var(--timeline-track-background)`})},null,4)):i(``,!0),j(V)===`horizontal`?(y(),a(`div`,{key:1,class:`absolute right-0 h-[8px] rounded-sm pointer-events-none`,style:g({bottom:`calc(16px + 0.25rem + 12px + 2rem)`,width:`${j(Yt)}px`,background:`var(--timeline-track-background)`})},null,4)):i(``,!0),j(V)===`vertical`&&j(Q).systemEvents.length?(y(),a(`div`,{key:2,class:`absolute top-0 left-0 right-0 pointer-events-none z-1`,style:g({height:`${j(Yt)}px`})},[(y(!0),a(e,null,w(j(Q).systemEvents,e=>(y(),a(`div`,{key:`sys-v-${e.id}`,class:h([`absolute left-0 right-0 flex items-center justify-center border-l-2 overflow-hidden`,xn(e.severity)]),style:g({top:`${e.endPx}px`,height:`${e.heightPx}px`})},[e.heightPx>16?(y(),a(`span`,Zr,O(e.message),1)):i(``,!0)],6))),128))],4)):i(``,!0),j(V)===`horizontal`&&j(Q).systemEvents.length?(y(),a(`div`,{key:3,class:`absolute right-0 top-0 bottom-0 pointer-events-none z-1`,style:g({width:`${j(Yt)}px`})},[(y(!0),a(e,null,w(j(Q).systemEvents,e=>(y(),a(`div`,{key:`sys-h-${e.id}`,class:h([`absolute top-0 bottom-0 flex items-center justify-center border-b-2 overflow-hidden`,Sn(e.severity)]),style:g({right:`${e.endPx}px`,width:`${e.heightPx}px`,background:`linear-gradient(to top, var(${Cn(e.severity)}), transparent)`})},[e.heightPx>16?(y(),a(`span`,Qr,O(e.message),1)):i(``,!0)],6))),128))],4)):i(``,!0),j(V)===`vertical`&&j(jt)?.length?(y(),a(`div`,{key:4,class:`absolute top-0 right-0 pointer-events-none z-2`,style:g({left:`calc(16px + 0.25rem + 60px + 2rem)`,height:`${j(Yt)}px`})},[(y(!0),a(e,null,w(j(Q).events,t=>I((y(),a(`div`,{key:`line-v-${t.id}`,class:`absolute left-0 right-0 flex items-center -translate-y-1/2`,style:g({top:`${t.topPx}px`})},[u[16]||=o(`div`,{class:`flex-1 h-[1px]`,style:{background:`var(--timeline-event-line)`}},null,-1),o(`div`,$r,[(y(!0),a(e,null,w(t.displayTypes,(e,t)=>(y(),r(E(rn[e]??j(an)),{key:`icon-${t}`,class:`w-4.5 h-4.5 shrink-0`,style:{color:`var(--timeline-event-icon)`}}))),128)),t.extraCount>0?(y(),a(`span`,{key:0,class:`text-xs shrink-0 opacity-60`,style:{color:`var(--timeline-event-icon)`},title:t.types.join(`, `)},`+`+O(t.extraCount),9,ei)):i(``,!0)]),u[17]||=o(`div`,{class:`flex-1 h-[1px]`,style:{background:`var(--timeline-event-line)`}},null,-1),o(`div`,{ref_for:!0,ref:e=>dt(t.id,e),class:`shrink-0 mr-5 relative pointer-events-auto cursor-pointer transition-transform duration-300 hover:scale-110`,onPointerdown:u[6]||=L(()=>{},[`stop`]),onClick:e=>wn(t.timestamp)},[o(`div`,ni,[t.thumbnail?(y(),r(hr,{key:0,src:t.thumbnail,width:`128px`,height:`72px`,"image-style":{objectFit:`cover`},"image-container-class":`w-full h-full`},null,8,[`src`])):(y(),r(_,{key:1,width:`128px`,height:`72px`}))]),t.description?(y(),a(`button`,{key:0,type:`button`,class:`desc-sparkle-btn absolute top-1 right-1 z-[2]`,"data-tooltip-title":t.description.title||void 0,"data-tooltip-text":t.description.description||void 0,onPointerdown:u[5]||=L(()=>{},[`stop`])},[c(v,{class:`w-2.5 h-2.5 text-white`})],40,ri)):i(``,!0)],40,ti)],4)),[[N,t.showThumbnail]])),128))],4)):i(``,!0),j(V)===`horizontal`&&j(jt)?.length?(y(),a(`div`,{key:5,class:`absolute right-0 top-0 pointer-events-none z-2`,style:g({bottom:`calc(16px + 0.25rem + 12px + 2rem)`,width:`${j(Yt)}px`})},[(y(!0),a(e,null,w(j(Q).events,t=>I((y(),a(`div`,{key:`line-h-${t.id}`,class:`absolute top-0 bottom-0 flex flex-col items-center translate-x-1/2`,style:g({right:`${t.topPx}px`})},[o(`div`,{ref_for:!0,ref:e=>dt(t.id,e),class:`shrink-0 mt-5 pointer-events-auto cursor-pointer relative transition-all duration-300 timeline-thumb-h`,onPointerdown:u[8]||=L(()=>{},[`stop`]),onClick:e=>wn(t.timestamp)},[o(`div`,ai,[t.thumbnail?(y(),r(hr,{key:0,src:t.thumbnail,width:`64px`,height:`36px`,"image-style":{objectFit:`cover`},"image-container-class":`w-full h-full`},null,8,[`src`])):(y(),r(_,{key:1,width:`64px`,height:`36px`}))]),t.description?(y(),a(`button`,{key:0,type:`button`,class:`desc-sparkle-btn absolute top-0.5 right-0.5 z-[2]`,"data-tooltip-title":t.description.title||void 0,"data-tooltip-text":t.description.description||void 0,onPointerdown:u[7]||=L(()=>{},[`stop`])},[c(v,{class:`w-2 h-2 text-white`})],40,oi)):i(``,!0)],40,ii),u[18]||=o(`div`,{class:`flex-1 w-[1px]`,style:{background:`var(--timeline-event-line)`}},null,-1),o(`div`,si,[(y(!0),a(e,null,w(t.displayTypes,(e,t)=>(y(),r(E(rn[e]??j(an)),{key:`icon-h-${t}`,class:`w-4.5 h-4.5 shrink-0`,style:{color:`var(--timeline-event-icon)`}}))),128)),t.extraCount>0?(y(),a(`span`,{key:0,class:`text-xs shrink-0 opacity-60`,style:{color:`var(--timeline-event-icon)`},title:t.types.join(`, `)},`+`+O(t.extraCount),9,ci)):i(``,!0)]),u[19]||=o(`div`,{class:`flex-1 w-[1px]`,style:{background:`var(--timeline-event-line)`}},null,-1)],4)),[[N,t.showThumbnail]])),128))],4)):i(``,!0),j(V)===`vertical`&&j(At)?.length?(y(),a(`div`,{key:6,class:`absolute top-0 pointer-events-none z-3`,style:g({left:`calc(16px + 0.25rem + 60px + 2rem)`,height:`${j(Yt)}px`})},[(y(!0),a(e,null,w(j(Q).recordings,(e,t)=>(y(),a(`div`,{key:t,class:`absolute w-[8px] rounded-sm`,style:g({top:`${e.topPx}px`,height:`${e.heightPx}px`,background:`var(--timeline-recording-bar)`})},null,4))),128))],4)):i(``,!0),j(V)===`horizontal`&&j(At)?.length?(y(),a(`div`,{key:7,class:`absolute right-0 h-[8px] pointer-events-none z-3`,style:g({bottom:`calc(16px + 0.25rem + 12px + 2rem)`,width:`${j(Yt)}px`})},[(y(!0),a(e,null,w(j(Q).recordings,(e,t)=>(y(),a(`div`,{key:t,class:`absolute h-full rounded-sm`,style:g({right:`${e.topPx}px`,width:`${e.heightPx}px`,background:`var(--timeline-recording-bar)`})},null,4))),128))],4)):i(``,!0),j(V)===`vertical`&&j(jt)?.length?(y(),a(`div`,{key:8,class:`absolute top-0 pointer-events-none z-4`,style:g({left:`calc(16px + 0.25rem + 60px + 2rem)`,height:`${j(Yt)}px`})},[(y(!0),a(e,null,w(j(Q).motionEvents,e=>(y(),a(`div`,{key:`bar-motion-v-${e.id}`,class:`absolute w-[4px] ml-[2px] rounded-full`,style:g({top:`${e.barTopPx}px`,height:`${e.durationPx}px`,background:`var(--timeline-event-bar)`})},null,4))),128)),(y(!0),a(e,null,w(j(Q).detectionEvents,e=>(y(),a(`div`,{key:`bar-det-v-${e.id}`,class:`absolute w-[8px] rounded-full`,style:g({top:`${e.barTopPx}px`,height:`${e.durationPx}px`,background:`var(--timeline-event-bar)`})},null,4))),128))],4)):i(``,!0),j(V)===`horizontal`&&j(jt)?.length?(y(),a(`div`,{key:9,class:`absolute right-0 h-[8px] pointer-events-none z-4`,style:g({bottom:`calc(16px + 0.25rem + 12px + 2rem)`,width:`${j(Yt)}px`})},[(y(!0),a(e,null,w(j(Q).motionEvents,e=>(y(),a(`div`,{key:`bar-motion-h-${e.id}`,class:`absolute h-[4px] mt-[2px] rounded-full`,style:g({right:`${e.barTopPx}px`,width:`${e.durationPx}px`,background:`var(--timeline-event-bar)`})},null,4))),128)),(y(!0),a(e,null,w(j(Q).detectionEvents,e=>(y(),a(`div`,{key:`bar-det-h-${e.id}`,class:`absolute h-full rounded-full`,style:g({right:`${e.barTopPx}px`,width:`${e.durationPx}px`,background:`var(--timeline-event-bar)`})},null,4))),128))],4)):i(``,!0),j(It)&&j(V)===`vertical`?(y(),r(Cr,{key:10,"now-ms":j(Ht),"time-ms-per-px":j(Dt).timeMsPerPx,"future-offset":Si,"viewport-height":j(K).height.value,"content-height":j(Yt),"viewport-element":j(Le),"read-motion":ot,"write-motion":ht,"recording-duration-ms":j(Bt),"start-ms":j(Lt),"onUpdate:startMs":u[9]||=e=>f(Lt)?Lt.value=e:null,"end-ms":j(Rt),"onUpdate:endMs":u[10]||=e=>f(Rt)?Rt.value=e:null,onScrub:j(X).onTrimScrub,onDragStart:j(X).onTrimDragStart,onDragEnd:j(X).onTrimDragEnd},null,8,[`now-ms`,`time-ms-per-px`,`viewport-height`,`content-height`,`viewport-element`,`recording-duration-ms`,`start-ms`,`end-ms`,`onScrub`,`onDragStart`,`onDragEnd`])):i(``,!0)],2)):j(Ue)===`detections`?(y(),a(`div`,{key:1,ref_key:`motionLayerRef`,ref:et,class:`absolute inset-0`,style:{"will-change":`transform`},dir:`ltr`},[(y(!0),a(e,null,w(j(on),t=>(y(),a(`div`,{key:`det-${t.id}`,class:`absolute w-full border-b-[1px] border-color cursor-pointer`,style:g({top:`${t.topPx+Si}px`,height:`${Ci}px`}),onClick:e=>j(X).onDetectionCardClick(t)},[o(`div`,ui,[o(`div`,di,[o(`span`,fi,O(vn(t.timestamp)),1),o(`span`,pi,O(j(lr)(t.timestamp,`HH:mm`)),1),o(`span`,mi,O(yn(t.duration)),1),o(`div`,hi,[(y(!0),a(e,null,w(t.displayTypes,e=>(y(),r(E(rn[e]??j(an)),{key:e,class:`w-4 h-4 shrink-0`,style:{color:`var(--timeline-event-icon)`}}))),128)),t.extraCount>0?(y(),a(`span`,{key:0,class:`text-xs shrink-0 opacity-60`,style:{color:`var(--timeline-event-icon)`},title:[...new Set(t.types)].join(`, `)},`+`+O(t.extraCount),9,gi)):i(``,!0)])]),o(`div`,_i,[o(`div`,vi,[t.thumbnail?(y(),r(hr,{key:0,src:t.thumbnail,width:`100%`,"image-style":{objectFit:`cover`,width:`100%`,height:`100%`},"image-container-class":`w-full h-full`},null,8,[`src`])):(y(),r(_,{key:1,width:`100%`,height:`100%`}))]),t.description?(y(),a(`button`,{key:0,type:`button`,class:`desc-sparkle-btn absolute top-1.5 right-1.5 z-[2]`,"data-tooltip-title":t.description.title||void 0,"data-tooltip-text":t.description.description||void 0,onPointerdown:u[11]||=L(()=>{},[`stop`])},[c(v,{class:`w-3 h-3 text-white`})],40,yi)):i(``,!0)])])],12,li))),128))],512)):i(``,!0)],14,Br)],4)]))]),_:3},8,[`class`,`pt`]),c(j(ie),{ref_key:`datePickerRef`,ref:Re,class:`border-none`,pt:{content:{class:`p-0`}},onShow:u[13]||=e=>We.value=!0,onHide:u[14]||=e=>We.value=!1},{default:F(()=>[c(j(re),{inline:``,"model-value":j(Ke),"hour-format":`12`,"show-time":``,"max-date":j(_n),"clear-button-props":{class:`hidden`},class:`hover:text-primary active:text-primary focus:text-primary text-muted-color`,updateModelType:`date`,"input-class":{"p-0":l.mdBreakpoint},pt:{pcInputText:{root:{class:`text-sm !text-color`}},inputIconContainer:{class:`transition-all text-current`}},onDateSelect:u[12]||=e=>Dn(e)},{date:F(({date:e})=>[o(`span`,bi,[s(O(e.day)+` `,1),fn(e.year,e.month,e.day)?(y(),a(`span`,xi)):i(``,!0)])]),_:1},8,[`model-value`,`max-date`,`input-class`])]),_:1},512)],2)}}}),[[`__scopeId`,`data-v-19286ac4`]]),Oi=Symbol(`EventHoverPreview`);function ki(e){let t=e?.cacheSize??20,n=e?.hoverDelay??400,r=e?.frameInterval??300,{plugin:i}=B(`@camera.ui/camera-ui-nvr`),a=new Map,o=[],s=0,c=null,l=null,u=C(!1),{start:d,stop:f}=he((e,t,n,r,i,a)=>{a===s&&y(e,t,n,r,i,a)},n,{immediate:!1});function p(){for(;o.length>t;){let e=o.shift(),t=a.get(e);if(t){for(let e of t)e.close();a.delete(e)}}}function m(e){let t=o.indexOf(e);t!==-1&&o.splice(t,1),o.push(e)}function h(){c!==null&&(cancelAnimationFrame(c),c=null)}function g(){f()}function _(e,t,n){let i=e.getContext(`2d`);if(!i||t.length===0)return;let a=0,o=0;function l(u){if(!(n!==s||!i)){if(u-o>=r){let n=t[a];e.width=n.width,e.height=n.height,i.drawImage(n,0,0),a=(a+1)%t.length,o=u}c=requestAnimationFrame(l)}}c=requestAnimationFrame(l)}async function v(e){if(!e.frames?.length||!e.codecString)return[];let t=e.codecString,n=null;if(t.startsWith(`avc1.`)&&e.width&&e.height){let r=parseInt(t.slice(-2),16),i=Math.ceil(e.width/16)*Math.ceil(e.height/16),a=Fn.find(([e])=>e>=r);if(a&&i>0&&Math.floor(a[1]/i)>2){let i=In(e.width,e.height);i&&i<r&&(n=i,t=Ln(t,i))}}let r={codec:t,optimizeForLatency:!0};e.width&&e.height&&(r.codedWidth=e.width,r.codedHeight=e.height);let i=[];return new Promise(t=>{let a=0,o=!1,s=new VideoDecoder({output:async e=>{try{let t=await createImageBitmap(e);i.push(t)}finally{if(e.close(),a--,o&&a===0){try{s.close()}catch{}t(i)}}},error:()=>{try{s.close()}catch{}t(i)}});s.configure(r);for(let t of e.frames){let e=t.frame instanceof Uint8Array?t.frame:new Uint8Array(t.frame);(e.byteOffset!==0||e.buffer.byteLength!==e.byteLength)&&(e=new Uint8Array(e)),n!==null&&Rn(e,n),a++,s.decode(new EncodedVideoChunk({type:`key`,timestamp:t.ts,data:e}))}o=!0,s.flush().catch(()=>{}).finally(()=>{if(a===0){try{s.close()}catch{}t(i)}})})}function y(e,t,n,r,o,c){let d=i.value;d&&(u.value=!0,d.nvrPreviewFrames(t,r*1e3,o*1e3,12).then(async t=>{if(c!==s)return;if(t.noData||!t.frames?.length){u.value=!1;return}let r=await v(t);if(c!==s){for(let e of r)e.close();u.value=!1;return}if(r.length===0){u.value=!1;return}a.set(n,r),m(n),p(),u.value=!1,c===s&&l===e&&_(e,r,c)}).catch(()=>{c===s&&(u.value=!1)}))}function b(e,t,n,r,i){if(!i||i-r<3e3||typeof VideoDecoder>`u`)return;h(),g(),l=e;let o=++s,c=a.get(n);if(c&&c.length>0){m(n),_(e,c,o);return}d(e,t,n,r,i,o)}function x(){++s,h(),g(),u.value=!1,l=null}function S(){x();for(let[,e]of a)for(let t of e)t.close();a.clear(),o.length=0}return{onHoverStart:b,onHoverEnd:x,isLoading:u,dispose:S}}function Ai(e=`@camera.ui/camera-ui-nvr`){let{isConnected:t}=ne(),{plugin:r,isLoading:i}=B(e),a=C([]),o=C([]),s=C(!1),c=C(!1);function l(){return r.value}async function u(e=!1){let t=l();if(t){e||(s.value=!0);try{let[e,n]=await Promise.all([t.listKnownFaces(),t.getUnknownFaces(100)]);a.value=e??[],o.value=n??[]}catch{}finally{s.value=!1,c.value=!0}}}let d=n(()=>{let e=new Map,t=[];for(let n of o.value)if(n.clusterId&&n.clusterId!==`excluded`){let t=e.get(n.clusterId);t||(t=[],e.set(n.clusterId,t)),t.push(n)}else t.push(n);let n=[];for(let[t,r]of e){let e=r.reduce((e,t)=>(e.confidence??0)>=(t.confidence??0)?e:t);n.push({clusterId:t,faces:r,bestThumbnail:e.thumbnail?q(e.thumbnail):void 0})}return n.sort((e,t)=>t.faces.length-e.faces.length),{clusters:n,ungrouped:t}});return P([t,i],([e,t])=>{e&&!t&&r.value?u():!t&&!r.value&&(c.value=!0)},{immediate:!0}),{knownFaces:a,unknownFaces:o,clusteredUnknowns:d,isLoading:n(()=>s.value||!c.value),refresh:u,getFaceImages:async e=>await l()?.getFaceImages?.(e)??[],removeFaceImage:async(e,t)=>{await l()?.removeFaceImage?.(e,t)},enrollFace:async(e,t,n)=>{await l()?.enrollFace?.(e,t,n)},enrollFromEvent:async(e,t)=>{o.value=o.value.filter(e=>e.id!==t),await l()?.enrollFromEvent?.(e,t),await u(!0)},enrollCluster:async(e,t)=>{let n=new Set(t);o.value=o.value.filter(e=>!n.has(e.id)),await l()?.enrollCluster?.(e,t),await u(!0)},rescanFaces:async()=>{let e=await l()?.rescanFaces?.()??0;return e>0&&(yn(),$t()),e},deleteFace:async e=>{a.value=a.value.filter(t=>t.name!==e),await l()?.deleteFace?.(e),await u(!0)},deleteUnknownFace:async e=>{o.value=o.value.filter(t=>t.id!==e),await l()?.deleteUnknownFace?.(e),await u(!0)},deleteAllUnknownFaces:async()=>{o.value=[],await l()?.deleteAllUnknownFaces?.(),await u(!0)},deleteUnknownFacesByCluster:async e=>{o.value=o.value.filter(t=>t.clusterId!==e),await l()?.deleteUnknownFacesByCluster?.(e),await u(!0)},deleteUngroupedUnknownFaces:async()=>{o.value=o.value.filter(e=>e.clusterId&&e.clusterId!==`excluded`),await l()?.deleteUngroupedUnknownFaces?.(),await u(!0)},removeFromCluster:async e=>{let t=o.value.find(t=>t.id===e);t&&(t.clusterId=`excluded`),await l()?.removeFromCluster?.(e),await u(!0)}}}function ji(e,t){let r=t?.sourceRole,i=ne(),a=ve(),o=D(new Map),s=new Map,c=[],l=C(`idle`),d=C(0),f=C(null),p=C(1),m=C(!0),h=!0,g=C(null),_=n(()=>{let e=o.value;return e.size===0?!1:[...e.values()].every(e=>e.noData.value)}),v=n(()=>{let e=o.value;return e.size===0?!1:[...e.values()].some(e=>e.licenseRequired.value)}),y=n(()=>{let e=o.value;return e.size===0?!1:[...e.values()].some(e=>e.hasAudio.value)}),x=n(()=>{let e=o.value;return e.size===0?!1:[...e.values()].some(e=>e.loading.value)}),S=n(()=>l.value!==`idle`),w=n(()=>l.value===`play`);function T(){let e=f.value;return e?e.startMs+(performance.now()-e.wallStart)*e.speed:0}function E(e,t){l.value=`scrub`,f.value=null,d.value=e;for(let n of o.value.values())n.scrub(e,t)}function O(e,t){l.value=`scrub`,f.value=null,d.value=e;for(let n of o.value.values())n.fineScrub(e,t)}function k(e,t){l.value=`play`,d.value=e,f.value={startMs:Math.floor(e/1e3),wallStart:performance.now(),speed:p.value,targetMs:Math.floor(e/1e3)};for(let n of o.value.values())n.speed.value=p.value,n.play(e,t)}function A(){f.value={startMs:T(),wallStart:performance.now(),speed:0},l.value=`pause`;for(let e of o.value.values())e.pause()}function j(){let e=f.value;e&&(f.value={startMs:e.startMs,wallStart:performance.now(),speed:p.value}),l.value=`play`;for(let e of o.value.values())e.resume()}function M(){for(let e of o.value.values())e.stop();l.value=`idle`,f.value=null,p.value=1,d.value=0}function N(e){f.value={startMs:e/1e3,wallStart:performance.now(),speed:l.value===`play`?p.value:0},d.value=e;for(let t of o.value.values())t.seek(e)}function ee(e){let t=T();if(p.value=e,f.value={startMs:t,wallStart:performance.now(),speed:l.value===`play`?e:0},e!==1){m.value=!0;for(let t of o.value.values())t.speed.value=e,t.muted.value=!0,t.setSpeed(e)}else{m.value=h;for(let t of o.value.values())t.speed.value=e,t.setSpeed(e)}}let{resume:F,pause:I}=me(()=>{if(l.value!==`play`)return;let e=d.value||Math.floor(T()*1e3);for(let t of o.value.values())t.noData.value&&(t.speed.value=p.value,t.play(e));for(let e of o.value.values())if(!e.noData.value&&e.currentTimestamp.value>0){d.value=e.currentTimestamp.value;break}},2e3,{immediate:!1});function L(){for(let e of c)e();c.length=0;for(let[,e]of o.value){let t=P(e.noData,(t,n)=>{if(l.value===`play`&&(n&&!t&&e.currentTimestamp.value>0&&(d.value=e.currentTimestamp.value),!n&&t)){let t=d.value||Math.floor(T()*1e3);e.speed.value=p.value,e.play(t)}});c.push(t)}}P(e,(e,t)=>{let n=new Set(e),c=new Set(t??[]),l=new Map(o.value);for(let e of c)if(!n.has(e)){let t=l.get(e);t&&t.stop(),l.delete(e);let n=s.get(e);n&&(n(),s.delete(e))}for(let e of n)if(!l.has(e)){let t=u(),n=t.run(()=>qn(e,{managed:!0,sourceRole:r,cameraUi:i,nvrCtx:a}));l.set(e,n),s.set(e,()=>t.stop())}o.value=l},{immediate:!0}),P(o,()=>{L()},{immediate:!0}),P(l,e=>{e===`play`?F():I()}),P(m,e=>{p.value===1&&(h=e)}),de(()=>{for(let e of c)e();c.length=0;for(let e of o.value.values())e.stop();for(let e of s.values())e();s.clear()});let R={mode:l,currentTimestamp:d,playbackAnchor:f,noData:_,licenseRequired:v,loading:x,hasAudio:y,muted:m,containerRef:g,isActive:S,isPlaybackDriving:w,speed:p,sourceRole:C(``),scrub:E,fineScrub:O,play:k,pause:A,resume:j,stop:M,seek:N,setSpeed:ee};return b(Un,R),b(Wn,o),{master:R,controllers:o}}function Mi(e=`@camera.ui/camera-ui-nvr`){let{plugin:t,isLoading:r}=B(e),i=z(),a=C([]),o=C(!1),s=C(!1),c=C(!1);function l(){return t.value}let u=n(()=>c.value&&!r.value);async function d(){try{c.value=(await i.getPluginsByInterface(ue.ClipDetection)).length>0}catch{c.value=!1}}async function f(e,t=50,n=.2){let r=e.trim();if(!r){a.value=[],s.value=!1;return}let i=l();if(i){o.value=!0;try{a.value=await i.searchEventsByText(r,t,n)??[],s.value=!0}catch(e){console.error(`Semantic search failed:`,e)}finally{o.value=!1}}}function p(){a.value=[],s.value=!1}return P(t,e=>{e&&d()},{immediate:!0}),{results:a,isSearching:o,hasSearched:s,isAvailable:u,search:f,clear:p}}var Ni=6e4;function Pi(){let{isConnected:e}=ne(),{plugin:t,isLoading:r}=B(`@camera.ui/camera-ui-nvr`),i=C(),a=C(!1),o=C(!1);async function s(){let e=t.value;if(e){a.value=!0;try{i.value=await e.getStorageStats()}catch{}finally{a.value=!1,o.value=!0}}}let{pause:c,resume:l}=me(s,Ni,{immediate:!1});return P([e,r],([e,n])=>{e&&!n&&t.value?(s(),l()):(c(),!n&&!t.value&&(o.value=!0))},{immediate:!0}),de(()=>c()),{stats:i,isLoading:n(()=>a.value||!o.value),refresh:s}}export{Di as CuiTimeline,xe as EVENT_TYPE_OTHER,Oi as EventHoverPreviewKey,_e as NVR_INJECTION_KEY,Un as NvrPlaybackKey,Wn as NvrPlaybackMapKey,Tr as TICK,wr as TRIGGER_EVENT_TYPES,yn as clearEventDataCache,qn as createNvrPlayback,be as createNvrPlugin,St as flattenEventThumbnails,Tt as getBestScore,Nt as getEventThumbnailUrl,Et as getPrimaryLabel,Mt as getPrimaryThumbnailFromCache,wt as getPrimaryType,$t as resetEventStore,q as thumbnailToUrl,pn as useCameraTimeline,bn as useDetectionEvents,ki as useEventHoverPreview,tn as useEventStore,Ai as useFaceStore,ji as useMultiNvrPlayback,ve as useNvrCtx,Jn as useNvrPlayback,Mi as useSemanticSearch,Pi as useStorageStats,er as useTimelineTrim};
|
package/package.json
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@camera.ui/nvr",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "camera.ui NVR client — Vue component library and views for browsing, playback and management of camera recordings in the camera.ui ecosystem",
|
|
5
|
+
"author": "seydx",
|
|
6
|
+
"license": "UNLICENSED",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"publishConfig": {
|
|
12
|
+
"access": "public"
|
|
13
|
+
},
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"import": "./dist/index.js",
|
|
18
|
+
"default": "./dist/index.js"
|
|
19
|
+
},
|
|
20
|
+
"./style.css": "./dist/index.css"
|
|
21
|
+
},
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "rimraf dist && vite build",
|
|
24
|
+
"dev": "vite --config vite.config.dev.ts",
|
|
25
|
+
"format": "prettier --write 'src/' --ignore-unknown --no-error-on-unmatched-pattern",
|
|
26
|
+
"install-updates": "npm i --save",
|
|
27
|
+
"lint": "eslint .",
|
|
28
|
+
"lint:fix": "eslint --fix .",
|
|
29
|
+
"prepublishOnly": "npm i --package-lock-only --force && npm run lint:fix && npm run format && npm run build",
|
|
30
|
+
"test": "vitest run",
|
|
31
|
+
"test:watch": "vitest",
|
|
32
|
+
"update": "updates --update ./"
|
|
33
|
+
},
|
|
34
|
+
"peerDependencies": {
|
|
35
|
+
"@camera.ui/browser": ">=0.0.115",
|
|
36
|
+
"@camera.ui/sdk": ">=0.0.5",
|
|
37
|
+
"@camera.ui/transport": ">=0.0.3",
|
|
38
|
+
"@vueuse/core": ">=14.3.0",
|
|
39
|
+
"primevue": ">=4.5.5",
|
|
40
|
+
"vue": ">=3.5.38",
|
|
41
|
+
"vue-i18n": ">=11.4.5"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@camera.ui/browser": "^0.0.115",
|
|
45
|
+
"@camera.ui/rpc": "^1.0.2",
|
|
46
|
+
"@camera.ui/sdk": "^0.0.5",
|
|
47
|
+
"@camera.ui/transport": "^0.0.3",
|
|
48
|
+
"@iconify/json": "^2.2.487",
|
|
49
|
+
"@microsoft/api-extractor": "^7.58.9",
|
|
50
|
+
"@primeuix/themes": "^2.0.3",
|
|
51
|
+
"@primevue/auto-import-resolver": "^4.5.5",
|
|
52
|
+
"@primevue/core": "^4.5.5",
|
|
53
|
+
"@stylistic/eslint-plugin": "^5.10.0",
|
|
54
|
+
"@tailwindcss/vite": "^4.3.1",
|
|
55
|
+
"@types/node": "^25.9.3",
|
|
56
|
+
"@types/webrtc": "^0.0.47",
|
|
57
|
+
"@vitejs/plugin-vue": "^6.0.7",
|
|
58
|
+
"@vue/eslint-config-prettier": "^10.2.0",
|
|
59
|
+
"@vue/eslint-config-typescript": "^14.8.0",
|
|
60
|
+
"@vue/language-core": "^3.3.5",
|
|
61
|
+
"@vue/tsconfig": "^0.9.1",
|
|
62
|
+
"@vueuse/core": "^14.3.0",
|
|
63
|
+
"@webgpu/types": "^0.1.70",
|
|
64
|
+
"eslint": "9.39.2",
|
|
65
|
+
"eslint-plugin-better-tailwindcss": "^4.6.0",
|
|
66
|
+
"eslint-plugin-vue": "^10.9.2",
|
|
67
|
+
"jiti": "^2.7.0",
|
|
68
|
+
"prettier": "^3.8.4",
|
|
69
|
+
"primevue": "^4.5.5",
|
|
70
|
+
"rimraf": "^6.1.3",
|
|
71
|
+
"tailwindcss": "^4.3.1",
|
|
72
|
+
"tailwindcss-primeui": "^0.6.1",
|
|
73
|
+
"tailwindcss-safe-area": "^1.3.0",
|
|
74
|
+
"typescript": "5.9.3",
|
|
75
|
+
"unplugin-auto-import": "^21.0.0",
|
|
76
|
+
"unplugin-dts": "^1.0.2",
|
|
77
|
+
"unplugin-icons": "^23.0.1",
|
|
78
|
+
"unplugin-vue-components": "^32.1.0",
|
|
79
|
+
"updates": "^17.18.0",
|
|
80
|
+
"vite": "^8.0.16",
|
|
81
|
+
"vitest": "^4.1.9",
|
|
82
|
+
"vue": "^3.5.38",
|
|
83
|
+
"vue-i18n": "^11.4.5",
|
|
84
|
+
"vue-tsc": "^3.3.5"
|
|
85
|
+
},
|
|
86
|
+
"keywords": [
|
|
87
|
+
"camera.ui",
|
|
88
|
+
"nvr",
|
|
89
|
+
"vue",
|
|
90
|
+
"surveillance",
|
|
91
|
+
"client"
|
|
92
|
+
],
|
|
93
|
+
"bugs": {
|
|
94
|
+
"url": "https://github.com/cameraui/nvr/issues"
|
|
95
|
+
},
|
|
96
|
+
"homepage": "https://github.com/cameraui/nvr#readme",
|
|
97
|
+
"repository": {
|
|
98
|
+
"type": "git",
|
|
99
|
+
"url": "git+https://github.com/cameraui/nvr.git"
|
|
100
|
+
}
|
|
101
|
+
}
|