@kteneyck/cesium-timeline-react 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- (function(q,o){typeof exports=="object"&&typeof module<"u"?o(exports,require("react"),require("cesium"),require("@kteneyck/cesium-timeline-core")):typeof define=="function"&&define.amd?define(["exports","react","cesium","@kteneyck/cesium-timeline-core"],o):(q=typeof globalThis<"u"?globalThis:q||self,o(q.CesiumTimelineReact={},q.React,q.Cesium,q.CesiumTimelineCore))})(this,(function(q,o,Xt,R){"use strict";function Yt(g){const _=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(g){for(const O in g)if(O!=="default"){const i=Object.getOwnPropertyDescriptor(g,O);Object.defineProperty(_,O,i.get?i:{enumerable:!0,get:()=>g[O]})}}return _.default=g,Object.freeze(_)}const C=Yt(Xt);var Et={exports:{}},xt={};/**
1
+ (function(ot,n){typeof exports=="object"&&typeof module<"u"?n(exports,require("react"),require("cesium"),require("@kteneyck/cesium-timeline-core")):typeof define=="function"&&define.amd?define(["exports","react","cesium","@kteneyck/cesium-timeline-core"],n):(ot=typeof globalThis<"u"?globalThis:ot||self,n(ot.CesiumTimelineReact={},ot.React,ot.Cesium,ot.CesiumTimelineCore))})(this,(function(ot,n,Ut,b){"use strict";function Gt(v){const C=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(v){for(const I in v)if(I!=="default"){const i=Object.getOwnPropertyDescriptor(v,I);Object.defineProperty(C,I,i.get?i:{enumerable:!0,get:()=>v[I]})}}return C.default=v,Object.freeze(C)}const S=Gt(Ut);var St={exports:{}},_t={};/**
2
2
  * @license React
3
3
  * react-jsx-runtime.production.js
4
4
  *
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * This source code is licensed under the MIT license found in the
8
8
  * LICENSE file in the root directory of this source tree.
9
- */var St;function zt(){if(St)return xt;St=1;var g=Symbol.for("react.transitional.element"),_=Symbol.for("react.fragment");function O(i,D,A){var F=null;if(A!==void 0&&(F=""+A),D.key!==void 0&&(F=""+D.key),"key"in D){A={};for(var J in D)J!=="key"&&(A[J]=D[J])}else A=D;return D=A.ref,{$$typeof:g,type:i,key:F,ref:D!==void 0?D:null,props:A}}return xt.Fragment=_,xt.jsx=O,xt.jsxs=O,xt}var vt={};/**
9
+ */var Ft;function Vt(){if(Ft)return _t;Ft=1;var v=Symbol.for("react.transitional.element"),C=Symbol.for("react.fragment");function I(i,j,k){var X=null;if(k!==void 0&&(X=""+k),j.key!==void 0&&(X=""+j.key),"key"in j){k={};for(var N in j)N!=="key"&&(k[N]=j[N])}else k=j;return j=k.ref,{$$typeof:v,type:i,key:X,ref:j!==void 0?j:null,props:k}}return _t.Fragment=C,_t.jsx=I,_t.jsxs=I,_t}var jt={};/**
10
10
  * @license React
11
11
  * react-jsx-runtime.development.js
12
12
  *
@@ -14,9 +14,9 @@
14
14
  *
15
15
  * This source code is licensed under the MIT license found in the
16
16
  * LICENSE file in the root directory of this source tree.
17
- */var Ct;function Wt(){return Ct||(Ct=1,process.env.NODE_ENV!=="production"&&(function(){function g(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===ot?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case B:return"Fragment";case h:return"Profiler";case et:return"StrictMode";case f:return"Suspense";case E:return"SuspenseList";case y:return"Activity"}if(typeof e=="object")switch(typeof e.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),e.$$typeof){case tt:return"Portal";case H:return e.displayName||"Context";case b:return(e._context.displayName||"Context")+".Consumer";case Q:var d=e.render;return e=e.displayName,e||(e=d.displayName||d.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case N:return d=e.displayName||null,d!==null?d:g(e.type)||"Memo";case M:d=e._payload,e=e._init;try{return g(e(d))}catch{}}return null}function _(e){return""+e}function O(e){try{_(e);var d=!1}catch{d=!0}if(d){d=console;var v=d.error,T=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return v.call(d,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",T),_(e)}}function i(e){if(e===B)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===M)return"<...>";try{var d=g(e);return d?"<"+d+">":"<...>"}catch{return"<...>"}}function D(){var e=Y.A;return e===null?null:e.getOwner()}function A(){return Error("react-stack-top-frame")}function F(e){if(nt.call(e,"key")){var d=Object.getOwnPropertyDescriptor(e,"key").get;if(d&&d.isReactWarning)return!1}return e.key!==void 0}function J(e,d){function v(){I||(I=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",d))}v.isReactWarning=!0,Object.defineProperty(e,"key",{get:v,configurable:!0})}function z(){var e=g(this.type);return L[e]||(L[e]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),e=this.props.ref,e!==void 0?e:null}function k(e,d,v,T,ct,pt){var w=v.ref;return e={$$typeof:$,type:e,key:d,props:v,_owner:T},(w!==void 0?w:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:z}):Object.defineProperty(e,"ref",{enumerable:!1,value:null}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:ct}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:pt}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function G(e,d,v,T,ct,pt){var w=d.children;if(w!==void 0)if(T)if(U(w)){for(T=0;T<w.length;T++)W(w[T]);Object.freeze&&Object.freeze(w)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else W(w);if(nt.call(d,"key")){w=g(e);var st=Object.keys(d).filter(function(gt){return gt!=="key"});T=0<st.length?"{key: someKey, "+st.join(": ..., ")+": ...}":"{key: someKey}",K[w+T]||(st=0<st.length?"{"+st.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
17
+ */var Pt;function Kt(){return Pt||(Pt=1,process.env.NODE_ENV!=="production"&&(function(){function v(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===D?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case q:return"Fragment";case w:return"Profiler";case at:return"StrictMode";case J:return"Suspense";case $:return"SuspenseList";case c:return"Activity"}if(typeof e=="object")switch(typeof e.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),e.$$typeof){case ct:return"Portal";case M:return e.displayName||"Context";case x:return(e._context.displayName||"Context")+".Consumer";case nt:var u=e.render;return e=e.displayName,e||(e=u.displayName||u.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case mt:return u=e.displayName||null,u!==null?u:v(e.type)||"Memo";case tt:u=e._payload,e=e._init;try{return v(e(u))}catch{}}return null}function C(e){return""+e}function I(e){try{C(e);var u=!1}catch{u=!0}if(u){u=console;var E=u.error,T=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return E.call(u,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",T),C(e)}}function i(e){if(e===q)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===tt)return"<...>";try{var u=v(e);return u?"<"+u+">":"<...>"}catch{return"<...>"}}function j(){var e=A.A;return e===null?null:e.getOwner()}function k(){return Error("react-stack-top-frame")}function X(e){if(F.call(e,"key")){var u=Object.getOwnPropertyDescriptor(e,"key").get;if(u&&u.isReactWarning)return!1}return e.key!==void 0}function N(e,u){function E(){L||(L=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",u))}E.isReactWarning=!0,Object.defineProperty(e,"key",{get:E,configurable:!0})}function it(){var e=v(this.type);return O[e]||(O[e]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),e=this.props.ref,e!==void 0?e:null}function Y(e,u,E,T,ft,bt){var R=E.ref;return e={$$typeof:st,type:e,key:u,props:E,_owner:T},(R!==void 0?R:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:it}):Object.defineProperty(e,"ref",{enumerable:!1,value:null}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:ft}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:bt}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function V(e,u,E,T,ft,bt){var R=u.children;if(R!==void 0)if(T)if(W(R)){for(T=0;T<R.length;T++)Q(R[T]);Object.freeze&&Object.freeze(R)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else Q(R);if(F.call(u,"key")){R=v(e);var rt=Object.keys(u).filter(function(Tt){return Tt!=="key"});T=0<rt.length?"{key: someKey, "+rt.join(": ..., ")+": ...}":"{key: someKey}",lt[R+T]||(rt=0<rt.length?"{"+rt.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
18
18
  let props = %s;
19
19
  <%s {...props} />
20
20
  React keys must be passed directly to JSX without using spread:
21
21
  let props = %s;
22
- <%s key={someKey} {...props} />`,T,w,st,w),K[w+T]=!0)}if(w=null,v!==void 0&&(O(v),w=""+v),F(d)&&(O(d.key),w=""+d.key),"key"in d){v={};for(var ut in d)ut!=="key"&&(v[ut]=d[ut])}else v=d;return w&&J(v,typeof e=="function"?e.displayName||e.name||"Unknown":e),k(e,w,v,D(),ct,pt)}function W(e){rt(e)?e._store&&(e._store.validated=1):typeof e=="object"&&e!==null&&e.$$typeof===M&&(e._payload.status==="fulfilled"?rt(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function rt(e){return typeof e=="object"&&e!==null&&e.$$typeof===$}var Z=o,$=Symbol.for("react.transitional.element"),tt=Symbol.for("react.portal"),B=Symbol.for("react.fragment"),et=Symbol.for("react.strict_mode"),h=Symbol.for("react.profiler"),b=Symbol.for("react.consumer"),H=Symbol.for("react.context"),Q=Symbol.for("react.forward_ref"),f=Symbol.for("react.suspense"),E=Symbol.for("react.suspense_list"),N=Symbol.for("react.memo"),M=Symbol.for("react.lazy"),y=Symbol.for("react.activity"),ot=Symbol.for("react.client.reference"),Y=Z.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,nt=Object.prototype.hasOwnProperty,U=Array.isArray,j=console.createTask?console.createTask:function(){return null};Z={react_stack_bottom_frame:function(e){return e()}};var I,L={},l=Z.react_stack_bottom_frame.bind(Z,A)(),S=j(i(A)),K={};vt.Fragment=B,vt.jsx=function(e,d,v){var T=1e4>Y.recentlyCreatedOwnerStacks++;return G(e,d,v,!1,T?Error("react-stack-top-frame"):l,T?j(i(e)):S)},vt.jsxs=function(e,d,v){var T=1e4>Y.recentlyCreatedOwnerStacks++;return G(e,d,v,!0,T?Error("react-stack-top-frame"):l,T?j(i(e)):S)}})()),vt}var kt;function Bt(){return kt||(kt=1,process.env.NODE_ENV==="production"?Et.exports=zt():Et.exports=Wt()),Et.exports}var u=Bt();const Ht=520,Ut=()=>u.jsxs("svg",{width:"14",height:"16",viewBox:"0 0 14 16",fill:"currentColor","aria-hidden":"true",children:[u.jsx("rect",{x:"1",y:"0",width:"4",height:"16",rx:"1"}),u.jsx("rect",{x:"9",y:"0",width:"4",height:"16",rx:"1"})]}),Lt=()=>u.jsx("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:u.jsx("polyline",{points:"3,5 7,9 11,5"})}),Ot=()=>u.jsx("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:u.jsx("polyline",{points:"3,9 7,5 11,9"})}),It=({currentTime:g,isPlaying:_,multiplier:O,dateTimeFormat:i,timezone:D,isLive:A,hasStartTime:F,hasEndTime:J,showJumpToStart:z=!0,showJumpToEnd:k=!0,onPlayPause:G,onJumpToStart:W,onRewind:rt,onFastForward:Z,onJumpToEnd:$,onJumpToLive:tt,onResetSpeed:B,onDateTimeClick:et,theme:h,swimLanesVisible:b,onToggleSwimLanes:H,labels:Q})=>{const f=O<0,E=O>1,N=O===1,M=Math.abs(O),y=o.useMemo(()=>({...R.DEFAULT_LABELS,...Q}),[Q]),ot=o.useRef(null),[Y,nt]=o.useState(!1);o.useEffect(()=>{const l=ot.current;if(!l)return;const S=new ResizeObserver(([K])=>{nt(K.contentRect.width<Ht)});return S.observe(l),()=>S.disconnect()},[]);const U={background:"none",border:"1px solid transparent",cursor:"pointer",fontSize:"16px",padding:"0",display:"flex",alignItems:"center",justifyContent:"center",minWidth:"32px",width:"32px",height:"32px",borderRadius:"4px",transition:"background-color 0.15s, color 0.15s",fontFamily:"system-ui, -apple-system, sans-serif",flexShrink:0,lineHeight:1},j=l=>({...U,color:l?h.buttonActiveColor:h.buttonColor,borderColor:l?`${h.buttonActiveColor}33`:"transparent"}),I=(l,S)=>{l.currentTarget.style.backgroundColor=S?`${h.buttonActiveColor}22`:h.buttonHoverColor+"44"},L=l=>{l.currentTarget.style.backgroundColor="transparent"};return u.jsxs("div",{ref:ot,style:{display:Y?"flex":"grid",gridTemplateColumns:Y?void 0:"1fr auto 1fr",alignItems:"center",padding:"6px 16px",backgroundColor:h.controlBarBackground,borderBottom:`1px solid ${h.controlBarBorder}`,fontFamily:"system-ui, -apple-system, sans-serif"},children:[u.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",flexShrink:0},children:[u.jsx("div",{onClick:et,title:et?y.dateTimeClickTooltip:void 0,style:{color:h.labelColor,fontFamily:"monospace",lineHeight:1.15,cursor:et?"pointer":"default",borderRadius:"4px",padding:"2px 4px",transition:"background 0.15s"},onMouseEnter:l=>{et&&(l.currentTarget.style.background=h.buttonHoverColor+"44")},onMouseLeave:l=>l.currentTarget.style.background="transparent",children:(()=>{const{timeFormat:l,dateFormat:S}=R.splitForDisplay(i),K=R.getTimezoneAbbr(g,D);return u.jsxs(u.Fragment,{children:[l&&u.jsx("div",{style:{fontSize:"2em",fontWeight:"bold",letterSpacing:"0.02em"},children:R.formatDateTime(g,l,D)}),S&&u.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[u.jsx("span",{style:{fontSize:"1.15em",letterSpacing:"0.03em",color:h.buttonActiveColor},children:R.formatDateTime(g,S,D)}),K&&u.jsx("span",{style:{fontSize:"0.9em",color:h.labelColor,opacity:.7,fontWeight:"bold",letterSpacing:"0.04em"},children:K})]})]})})()}),u.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"2px",justifyContent:"center"},children:[u.jsx("button",{onClick:tt,style:{...U,fontSize:"11px",fontWeight:"bold",letterSpacing:"0.05em",width:"52px",minWidth:"52px",height:"20px",borderRadius:"3px",color:A?h.controlBarBackground:h.buttonActiveColor,backgroundColor:A?h.buttonActiveColor:"transparent",borderColor:h.buttonActiveColor,opacity:A?1:.55},onMouseEnter:l=>{l.currentTarget.style.opacity="1"},onMouseLeave:l=>{l.currentTarget.style.opacity=A?"1":"0.55"},title:A?y.liveActiveTooltip:y.liveTooltip,children:A?y.liveActiveLabel:y.liveLabel}),u.jsx("div",{style:{height:"20px",display:"flex",alignItems:"center"},children:!N&&u.jsx("button",{onClick:()=>B(),style:{...U,fontSize:"11px",color:h.buttonActiveColor,borderColor:`${h.buttonActiveColor}44`,width:"52px",minWidth:"52px",height:"20px"},onMouseEnter:l=>I(l,!0),onMouseLeave:L,title:y.resetSpeedTooltip,children:f?`◀ ${M}×`:`${M}× ▶`})})]})]}),u.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"2px",...Y?{flex:1,justifyContent:"center"}:{}},children:[z&&u.jsx("button",{onClick:F?W:void 0,disabled:!F,style:{...j(!1),opacity:F?1:.3,cursor:F?"pointer":"default"},onMouseEnter:F?l=>I(l,!1):void 0,onMouseLeave:F?L:void 0,title:F?y.jumpToStartTooltip:y.noStartTimeTooltip,children:"⏮"}),u.jsx("button",{onClick:rt,style:{...j(f),width:"64px",minWidth:"64px",gap:"3px"},onMouseEnter:l=>I(l,f),onMouseLeave:L,title:f?R.resolveLabel(y.rewindActiveTooltip,M):y.rewindTooltip,children:f?u.jsxs(u.Fragment,{children:[u.jsxs("span",{style:{fontSize:"11px",fontWeight:"bold"},children:[M,"×"]}),"◀◀"]}):"◀◀"}),u.jsx("button",{onClick:()=>G(!_),style:{...U,color:h.buttonActiveColor,fontSize:"18px",width:"40px",minWidth:"40px",height:"40px",borderColor:`${h.buttonActiveColor}55`,borderRadius:"50%",paddingLeft:_?"0":"2px"},onMouseEnter:l=>I(l,!0),onMouseLeave:L,title:_?y.pauseTooltip:f?y.playFromRewindTooltip:y.playTooltip,children:_?u.jsx(Ut,{}):"▶"}),u.jsx("button",{onClick:Z,style:{...j(E),width:"64px",minWidth:"64px",gap:"3px"},onMouseEnter:l=>I(l,E),onMouseLeave:L,title:E?R.resolveLabel(y.fastForwardActiveTooltip,M):y.fastForwardTooltip,children:E?u.jsxs(u.Fragment,{children:["▶▶",u.jsxs("span",{style:{fontSize:"11px",fontWeight:"bold"},children:[M,"×"]})]}):"▶▶"}),k&&u.jsx("button",{onClick:J?$:void 0,disabled:!J,style:{...j(!1),opacity:J?1:.3,cursor:J?"pointer":"default"},onMouseEnter:J?l=>I(l,!1):void 0,onMouseLeave:J?L:void 0,title:J?y.jumpToEndTooltip:y.noEndTimeTooltip,children:"⏭"})]}),!Y&&u.jsx("div",{style:{display:"flex",justifyContent:"flex-end",alignItems:"center"},children:H!=null&&b!=null&&u.jsx("button",{onClick:H,style:{...U,color:h.buttonActiveColor,borderColor:`${h.buttonActiveColor}33`},onMouseEnter:l=>I(l,b),onMouseLeave:L,title:b?y.collapseSwimLanesTooltip:y.expandSwimLanesTooltip,children:b?u.jsx(Lt,{}):u.jsx(Ot,{})})}),Y&&H!=null&&b!=null&&u.jsx("button",{onClick:H,style:{...U,color:h.buttonActiveColor,borderColor:`${h.buttonActiveColor}33`,marginLeft:"4px"},onMouseEnter:l=>I(l,b),onMouseLeave:L,title:b?y.collapseSwimLanesTooltip:y.expandSwimLanesTooltip,children:b?u.jsx(Lt,{}):u.jsx(Ot,{})})]})},yt=o.forwardRef((g,_)=>{const{currentTime:O,defaultStartMs:i,defaultEndMs:D,theme:A,maxTicks:F,timezone:J,onTimeChange:z,onDragStart:k,onDragEnd:G,swimLanes:W,showSwimLanes:rt,onSwimLaneItemClick:Z,onSwimLaneItemHover:$,onSwimLaneItemDoubleClick:tt,onSwimLaneItemContextMenu:B,onSwimLaneReorder:et}=g,h=o.useRef(null),b=o.useRef(A),H=o.useRef(F),Q=o.useRef(J),f=o.useRef(i),E=o.useRef(D),N=o.useRef(C.JulianDate.toDate(O).getTime());o.useEffect(()=>{b.current=A},[A]),o.useEffect(()=>{H.current=F},[F]),o.useEffect(()=>{Q.current=J,x()},[J]);const M=o.useRef(W??[]),y=o.useRef(rt??(W!=null&&W.length>0)),ot=o.useRef(0),Y=o.useRef(null),nt=o.useRef(null),U=o.useRef(Z),j=o.useRef($),I=o.useRef(tt),L=o.useRef(B),l=o.useRef(et);o.useEffect(()=>{U.current=Z},[Z]),o.useEffect(()=>{j.current=$},[$]),o.useEffect(()=>{I.current=tt},[tt]),o.useEffect(()=>{L.current=B},[B]),o.useEffect(()=>{l.current=et},[et]),o.useEffect(()=>{M.current=W??[],x()},[W]),o.useEffect(()=>{y.current=rt??(W!=null&&W.length>0),x()},[rt,W]);const S=o.useRef(null),K=o.useRef(null),e=o.useRef(!1),d=o.useRef(0),v=o.useRef("none"),T=o.useRef(0),ct=o.useRef(0),pt=o.useRef(0),w=o.useRef("none"),st=o.useRef(0),ut=o.useRef(0),gt=(t,n)=>Math.hypot(n.clientX-t.clientX,n.clientY-t.clientY),dt=o.useCallback(()=>({startMs:f.current,endMs:E.current,currentMs:N.current,theme:b.current,maxTicks:H.current,timezone:Q.current,swimLanes:M.current,showSwimLanes:y.current,scrollTop:ot.current,reorderState:nt.current}),[]);o.useImperativeHandle(_,()=>({zoomTo(t,n,r){const a=Math.max(R.MIN_SPAN_MS,Math.min(R.MAX_SPAN_MS,n-t)),s=(t+n)/2;f.current=s-a/2,E.current=s+a/2,r!==void 0&&(N.current=r),x()},getVisibleRange(){return{startMs:f.current,endMs:E.current}},startFollow(t){if(d.current=t,K.current!==null)return;e.current=!0;let n=performance.now();const r=()=>{const a=performance.now(),s=a-n;n=a;const c=s*d.current;f.current+=c,E.current+=c,N.current+=c,x(),K.current=requestAnimationFrame(r)};K.current=requestAnimationFrame(r)},stopFollow(){e.current=!1,K.current!==null&&(cancelAnimationFrame(K.current),K.current=null)},correctFollow(t){if(!e.current)return;const n=t-N.current;N.current=t,f.current+=n,E.current+=n},appendSwimLane(t){M.current=[...M.current,t],x()},updateSwimLane(t,n){M.current=M.current.map(r=>r.id===t?{...r,...n,id:r.id}:r),x()},removeSwimLane(t){M.current=M.current.filter(n=>n.id!==t),x()},reorderSwimLanes(t){const n=new Map(M.current.map(a=>[a.id,a])),r=[];for(const a of t){const s=n.get(a);s&&r.push(s)}M.current=r,x()}}));const x=o.useCallback(()=>{const t=h.current;if(!t)return;const n=t.getContext("2d");if(!n)return;const r=t.getBoundingClientRect(),a=r.width,s=r.height;if(a===0||s===0)return;const c=window.devicePixelRatio||1,p=Math.round(a*c),m=Math.round(s*c);(t.width!==p||t.height!==m)&&(t.width=p,t.height=m),n.save(),n.scale(c,c);const P=R.drawTimeline(n,a,s,dt());P!==ot.current&&(ot.current=P),n.restore()},[dt]);o.useLayoutEffect(()=>{x();const t=h.current;if(!t)return;const n=new ResizeObserver(()=>x());return n.observe(t),()=>n.disconnect()},[x]),o.useEffect(()=>{if(e.current)return;const t=C.JulianDate.toDate(O).getTime();N.current!==t&&(N.current=t,x())},[O,x]);const lt=o.useCallback(t=>{if(S.current!==null)return;const n=()=>{const r=h.current,a=E.current-f.current,s=t*a*.01;if(f.current+=s,E.current+=s,r){const c=r.getBoundingClientRect(),p=Math.max(0,Math.min(c.width,ct.current-c.left)),m=f.current+p/c.width*(E.current-f.current);N.current=m,z(C.JulianDate.fromDate(new Date(m)))}x(),S.current=requestAnimationFrame(n)};S.current=requestAnimationFrame(n)},[x,z]),X=o.useCallback(()=>{S.current!==null&&(cancelAnimationFrame(S.current),S.current=null)},[]),at=o.useCallback((t,n,r,a)=>R.hitTestSwimLane(t,n,r,a,dt()),[dt]),it=o.useCallback((t,n,r)=>R.hitTestLaneLabel(t,n,r,dt()),[dt]),ht=o.useCallback((t,n)=>R.isInSwimLaneRegion(t,n,dt()),[dt]),Tt=o.useCallback(t=>{t.preventDefault();const n=t.currentTarget.getBoundingClientRect(),r=t.clientX-n.left,a=t.clientY-n.top;if(t.button===0&&l.current){const s=it(r,a,n.height);if(s){const p=M.current.findIndex(m=>m.id===s.id);nt.current={dragging:!0,dragLaneId:s.id,dragStartY:t.clientY,currentY:t.clientY,insertIndex:p},t.currentTarget.style.cursor="grabbing";return}}if(t.button===0&&ht(a,n.height)){const s=(N.current-f.current)/(E.current-f.current)*n.width;if(!(Math.abs(r-s)<=10)&&at(r,a,n.width,n.height)){pt.current=performance.now();return}}if(t.button===0){v.current="scrub",ct.current=t.clientX,t.currentTarget.style.cursor="grabbing",k==null||k();const s=f.current+r/n.width*(E.current-f.current);N.current=s,x(),z(C.JulianDate.fromDate(new Date(s)))}else if(t.button===1)v.current="slide",T.current=t.clientX;else if(t.button===2){if(L.current&&ht(a,n.height))return;v.current="zoom",T.current=t.clientX}},[x,z,k,it,ht,at]);o.useEffect(()=>{const t=r=>{const a=nt.current;if(a&&a.dragging){a.currentY=r.clientY;const m=h.current;if(m){const P=m.getBoundingClientRect(),V=r.clientY-P.top;let Rt=-ot.current;const jt=M.current;let Jt=jt.length;for(let wt=0;wt<jt.length;wt++){const Nt=jt[wt].height??R.DEFAULT_LANE_HEIGHT,Vt=Rt+Nt/2;if(V<Vt){Jt=wt;break}Rt+=Nt+R.LANE_GAP}a.insertIndex=Jt}x();return}if(v.current==="none")return;const s=h.current;if(!s)return;const c=s.getBoundingClientRect(),p=c.width;if(v.current==="scrub"){ct.current=r.clientX;const m=r.clientX-c.left,P=p*.08;m<P?lt(-1):m>p-P?lt(1):X();const V=Math.max(0,Math.min(p,m)),ft=f.current+V/p*(E.current-f.current);N.current=ft,x(),z(C.JulianDate.fromDate(new Date(ft)))}else if(v.current==="slide"){const m=T.current-r.clientX;if(T.current=r.clientX,m!==0){const P=m/p*(E.current-f.current);f.current+=P,E.current+=P,x()}}else if(v.current==="zoom"){const m=T.current-r.clientX;T.current=r.clientX,m!==0&&mt(Math.pow(1.01,m))}},n=()=>{var a;const r=nt.current;if(r&&r.dragging){const s=Math.abs(r.currentY-r.dragStartY),c=M.current,p=c.findIndex(m=>m.id===r.dragLaneId);if(s>5&&p>=0&&r.insertIndex!==p&&r.insertIndex!==p+1){const m=[...c],[P]=m.splice(p,1),V=r.insertIndex>p?r.insertIndex-1:r.insertIndex;m.splice(V,0,P),M.current=m,(a=l.current)==null||a.call(l,m.map(ft=>ft.id))}nt.current=null,h.current&&(h.current.style.cursor="default"),x();return}X(),v.current="none",h.current&&(h.current.style.cursor="default"),G==null||G()};return document.addEventListener("mousemove",t),document.addEventListener("mouseup",n),()=>{document.removeEventListener("mousemove",t),document.removeEventListener("mouseup",n)}},[x,z,G,lt,X]);const mt=o.useCallback(t=>{const n=R.zoomRange(f.current,E.current,t);f.current=n.startMs,E.current=n.endMs,x()},[x]),bt=o.useCallback(t=>{t.preventDefault();const n=h.current;if(!n)return;const r=n.getBoundingClientRect(),a=t.clientY-r.top,s=y.current,c=M.current;if(s&&c.length>0){const p=Math.max(0,r.height-R.TICK_AREA_HEIGHT);if(a>=0&&a<p){let m=0;for(const V of c)m+=(V.height??R.DEFAULT_LANE_HEIGHT)+R.LANE_GAP;const P=Math.max(0,m-p);if(P>0){ot.current=Math.max(0,Math.min(P,ot.current+t.deltaY*R.SWIM_LANE_SCROLL_SPEED)),x();return}}}mt(Math.pow(1.05,t.deltaY>0?-1:1))},[mt,x]);o.useEffect(()=>{const t=h.current;if(t)return t.addEventListener("wheel",bt,{passive:!1}),()=>t.removeEventListener("wheel",bt)},[bt]),o.useEffect(()=>{const t=h.current;if(!t)return;const n=s=>{s.preventDefault();const c=t.getBoundingClientRect();if(s.touches.length===1){const p=s.touches[0].clientX-c.left,m=Math.max(0,Math.min(c.width,p)),P=f.current+m/c.width*(E.current-f.current);w.current="scrub",st.current=s.touches[0].clientX,ct.current=s.touches[0].clientX,N.current=P,x(),k==null||k(),z(C.JulianDate.fromDate(new Date(P)))}else s.touches.length>=2&&(w.current="pinch",ut.current=gt(s.touches[0],s.touches[1]))},r=s=>{s.preventDefault();const c=t.getBoundingClientRect();if(w.current==="scrub"&&s.touches.length>=1){const p=s.touches[0].clientX-c.left,m=c.width*.08;if(ct.current=s.touches[0].clientX,p<m)lt(-1);else if(p>c.width-m)lt(1);else{X();const P=Math.max(0,Math.min(c.width,p)),V=f.current+P/c.width*(E.current-f.current);N.current=V,x(),z(C.JulianDate.fromDate(new Date(V)))}}else if(w.current==="slide"&&s.touches.length>=1){const p=st.current-s.touches[0].clientX;if(st.current=s.touches[0].clientX,p!==0){const m=p/c.width*(E.current-f.current);f.current+=m,E.current+=m,x()}}else if(w.current==="pinch"&&s.touches.length>=2){const p=gt(s.touches[0],s.touches[1]);p>0&&ut.current>0&&mt(ut.current/p),ut.current=p}},a=s=>{X(),w.current==="scrub"&&(G==null||G()),s.touches.length===0?w.current="none":s.touches.length===1&&(w.current="slide",st.current=s.touches[0].clientX)};return t.addEventListener("touchstart",n,{passive:!1}),t.addEventListener("touchmove",r,{passive:!1}),t.addEventListener("touchend",a,{passive:!1}),()=>{t.removeEventListener("touchstart",n),t.removeEventListener("touchmove",r),t.removeEventListener("touchend",a)}},[x,k,G,z,mt,lt,X]);const Mt=o.useCallback(t=>{var p,m,P;if(v.current!=="none")return;const n=t.currentTarget.getBoundingClientRect(),r=t.clientX-n.left,a=t.clientY-n.top,s=(N.current-f.current)/(E.current-f.current)*n.width,c=Math.abs(r-s)<=10;if(ht(a,n.height)){const V=at(r,a,n.width,n.height),ft=Y.current;if(V)t.currentTarget.style.cursor=c?"grab":"pointer",(!ft||ft.item.id!==V.item.id||ft.lane.id!==V.lane.id)&&(Y.current=V,(p=j.current)==null||p.call(j,{laneId:V.lane.id,item:V.item,originalEvent:t.nativeEvent}),x());else if(ft&&(Y.current=null,(m=j.current)==null||m.call(j,null),x()),c)t.currentTarget.style.cursor="grab";else{const Rt=it(r,a,n.height);t.currentTarget.style.cursor=Rt&&l.current?"grab":"default"}return}Y.current&&(Y.current=null,(P=j.current)==null||P.call(j,null),x()),t.currentTarget.style.cursor=c?"grab":"default"},[x,at,ht,it]),Dt=o.useCallback(t=>{var p;if(performance.now()-pt.current>300)return;const r=t.currentTarget.getBoundingClientRect(),a=t.clientX-r.left,s=t.clientY-r.top,c=at(a,s,r.width,r.height);c&&((p=U.current)==null||p.call(U,{laneId:c.lane.id,item:c.item,originalEvent:t.nativeEvent}))},[at]),_t=o.useCallback(t=>{var c;const n=t.currentTarget.getBoundingClientRect(),r=t.clientX-n.left,a=t.clientY-n.top,s=at(r,a,n.width,n.height);s&&((c=I.current)==null||c.call(I,{laneId:s.lane.id,item:s.item,originalEvent:t.nativeEvent}))},[at]),At=o.useCallback(t=>{const n=t.currentTarget.getBoundingClientRect(),r=t.clientX-n.left,a=t.clientY-n.top,s=at(r,a,n.width,n.height);s&&L.current?(t.preventDefault(),L.current({laneId:s.lane.id,item:s.item,originalEvent:t.nativeEvent})):t.preventDefault()},[at]);return o.useEffect(()=>()=>{S.current!==null&&cancelAnimationFrame(S.current),K.current!==null&&cancelAnimationFrame(K.current)},[]),u.jsx("canvas",{ref:h,style:{width:"100%",flex:1,minHeight:0,display:"block",cursor:"default"},onMouseDown:Tt,onMouseMove:Mt,onClick:Dt,onDoubleClick:_t,onMouseLeave:()=>{var t;Y.current&&(Y.current=null,(t=j.current)==null||t.call(j,null),x()),v.current==="none"&&h.current&&(h.current.style.cursor="default")},onContextMenu:At})});yt.displayName="TimelineCanvas";const Ft=[2,4,8,16,32,100,1],Pt=[1,2,4,8,16,32,100],Gt=({startTime:g,endTime:_,currentTime:O,clock:i,onTimeChange:D,onPlayPause:A,onMultiplierChange:F,height:J,showControls:z=!0,showJumpToStart:k,showJumpToEnd:G,enableDrag:W=!0,dateTimeFormat:rt,onDateTimeClick:Z,jumpToTime:$,maxTicks:tt,ffSpeeds:B=Ft,rwSpeeds:et=Pt,theme:h,className:b,timezone:H,swimLanes:Q,showSwimLanes:f,onShowSwimLanesChange:E,swimLaneTransition:N="animated",onSwimLaneItemClick:M,onSwimLaneItemHover:y,onSwimLaneItemDoubleClick:ot,onSwimLaneItemContextMenu:Y,onSwimLaneReorder:nt,labels:U})=>{const j=()=>Date.now(),I=g?C.JulianDate.toDate(R.toJulianDate(g)).getTime():j()-432e5,L=_?C.JulianDate.toDate(R.toJulianDate(_)).getTime():j()+12*3600*1e3,[l,S]=o.useState(()=>R.toJulianDate(O??g??C.JulianDate.fromDate(new Date))),[K,e]=o.useState((i==null?void 0:i.shouldAnimate)??!1),[d,v]=o.useState((i==null?void 0:i.multiplier)??1),[T,ct]=o.useState(f??!0);o.useEffect(()=>{f!=null&&ct(f)},[f]);const pt=()=>{const t=!T;ct(t),E==null||E(t)},w=Q!=null&&Q.length>0,st=o.useRef(null),[ut,gt]=o.useState(0);o.useEffect(()=>{const t=st.current;if(!t)return;const n=new ResizeObserver(([r])=>gt(r.borderBoxSize[0].blockSize));return n.observe(t),()=>n.disconnect()},[z]);const x=w&&!T?`${ut+R.TICK_AREA_HEIGHT}px`:J!=null?`${J}px`:"100%",lt=o.useRef(!1),X=o.useRef(null),at={...R.defaultTheme,...h};o.useEffect(()=>{if(!i)return;const t=()=>{if(!lt.current){const n=C.JulianDate.clone(i.currentTime);if(S(n),e(i.shouldAnimate),v(i.multiplier),X.current){const{startMs:r,endMs:a}=X.current.getVisibleRange(),s=a-r,c=C.JulianDate.toDate(n).getTime(),p=c-r;p<=s*.1?X.current.zoomTo(c-s*.1,c+s*.9,c):p>=s*.9&&X.current.zoomTo(c-s*.9,c+s*.1,c)}}};return i.onTick.addEventListener(t),()=>{i.onTick.removeEventListener(t)}},[i]),o.useEffect(()=>{if(i)return;const t=setInterval(()=>{if(lt.current)return;const n=C.JulianDate.fromDate(new Date);if(S(n),X.current){const{startMs:r,endMs:a}=X.current.getVisibleRange(),s=a-r,c=C.JulianDate.toDate(n).getTime(),p=c-r;p<=s*.1?X.current.zoomTo(c-s*.1,c+s*.9,c):p>=s*.9&&X.current.zoomTo(c-s*.9,c+s*.1,c)}},1e3);return()=>clearInterval(t)},[i]),o.useEffect(()=>{if(!$)return;const t=R.toJulianDate($);if(ht(t),X.current){const{startMs:n,endMs:r}=X.current.getVisibleRange(),a=r-n,s=C.JulianDate.toDate(t).getTime();X.current.zoomTo(s-a/2,s+a/2)}},[$]);const it=(t,n=!0)=>{i&&(i.multiplier=t,n&&(i.shouldAnimate=!0)),v(t),n&&e(!0),F==null||F(t)},ht=t=>{S(t),i&&(i.currentTime=C.JulianDate.clone(t)),D==null||D(t)},Tt=t=>{t&&d<0&&it(1,!1),i&&(i.shouldAnimate=t),e(t),A==null||A(t)},mt=()=>{const t=B.length>0?B:Ft,n=d>1?d:1,r=t.indexOf(n),a=t[r<0||r===t.length-1?0:r+1];it(a)},bt=()=>{const t=et.length>0?et:Pt,n=d<0?Math.abs(d):0,r=t.indexOf(n),a=-t[r<0||r===t.length-1?0:r+1];it(a)},Mt=()=>{var n;const t=R.toJulianDate(g??C.JulianDate.fromDate(new Date(I)));i&&(i.currentTime=C.JulianDate.clone(t)),S(t),(n=X.current)==null||n.zoomTo(I,L)},Dt=()=>{var n;const t=R.toJulianDate(_??C.JulianDate.fromDate(new Date(L)));i&&(i.currentTime=C.JulianDate.clone(t)),S(t),(n=X.current)==null||n.zoomTo(I,L)},_t=()=>{var r;const t=C.JulianDate.fromDate(new Date);i&&(i.currentTime=C.JulianDate.clone(t)),S(t),it(1);const n=Date.now();(r=X.current)==null||r.zoomTo(n-12*3600*1e3,n+12*3600*1e3)},At=Math.abs(C.JulianDate.toDate(l).getTime()-Date.now())<1e4;return u.jsxs("div",{className:b,style:{width:"100%",height:x,overflow:"hidden",display:"flex",flexDirection:"column",fontFamily:"system-ui, -apple-system, sans-serif",transition:N==="animated"?"height 0.2s ease":void 0},children:[z&&u.jsx("div",{ref:st,children:u.jsx(It,{currentTime:l,isPlaying:K,multiplier:d,isLive:At,hasStartTime:g!=null,hasEndTime:_!=null,showJumpToStart:k,showJumpToEnd:G,onPlayPause:Tt,onJumpToStart:Mt,onRewind:bt,onFastForward:mt,onJumpToEnd:Dt,onJumpToLive:_t,onResetSpeed:()=>it(1),onDateTimeClick:Z,dateTimeFormat:rt,timezone:H,theme:at,swimLanesVisible:w?T:void 0,onToggleSwimLanes:w?pt:void 0,labels:U})}),W!==!1&&u.jsx(yt,{ref:X,currentTime:l,defaultStartMs:I,defaultEndMs:L,theme:at,maxTicks:tt,timezone:H,onTimeChange:ht,onDragStart:()=>{lt.current=!0},onDragEnd:()=>{lt.current=!1},swimLanes:Q,showSwimLanes:T,onSwimLaneItemClick:M,onSwimLaneItemHover:y,onSwimLaneItemDoubleClick:ot,onSwimLaneItemContextMenu:Y,onSwimLaneReorder:nt})]})},Kt=({startTime:g,endTime:_,currentTime:O,width:i,height:D,tickInterval:A,showLabels:F,snapToTicks:J,enableDrag:z,theme:k,onTimeChange:G,onVisibleRangeChange:W,onDragStart:rt,onDragEnd:Z})=>{const $=o.useMemo(()=>R.generateTicks(g,_,A,i),[g,_,A,i]),tt=o.useMemo(()=>R.timeToPosition(O,g,_,i),[O,g,_,i]),B=o.useRef(null),et=b=>{if(!z)return;const H=b.currentTarget.getBoundingClientRect(),Q=b.clientX-H.left,f=Math.max(0,Math.min(i,Q));if(!(Math.abs(f-tt)<=10)){let L=f;J&&(L=R.snapToTick(f,$,10));const l=new Date(g).getTime(),S=new Date(_).getTime();G(C.JulianDate.fromDate(new Date(l+L/i*(S-l))));return}rt==null||rt();const N=b.clientX,M=new Date(O).getTime(),y=new Date(g).getTime(),Y=(new Date(_).getTime()-y)/i;let nt=0,U=!1;const j=L=>{nt=L.clientX-N,U=!0,B.current||(B.current=requestAnimationFrame(()=>{if(U){const l=M+nt*Y;G(C.JulianDate.fromDate(new Date(l))),U=!1}B.current=null}))},I=()=>{document.removeEventListener("mousemove",j),document.removeEventListener("mouseup",I),B.current!==null&&(cancelAnimationFrame(B.current),B.current=null),Z==null||Z()};document.addEventListener("mousemove",j),document.addEventListener("mouseup",I)},h=b=>{b.preventDefault();const H=b.shiftKey?b.deltaY:b.deltaX!==0?b.deltaX:b.deltaY;if(Math.abs(H)<1)return;const Q=new Date(g).getTime(),f=new Date(_).getTime(),E=H/i*(f-Q)*.5;W==null||W(C.JulianDate.fromDate(new Date(Q+E)),C.JulianDate.fromDate(new Date(f+E)))};return u.jsxs("svg",{width:"100%",height:D,style:{backgroundColor:k.backgroundColor,display:"block",cursor:"default"},onMouseDown:et,onWheel:h,children:[u.jsx("rect",{width:i,height:D,fill:k.backgroundColor}),$.map((b,H)=>u.jsxs("g",{children:[u.jsx("line",{x1:b.position,y1:D-(b.isMajor?k.majorTickHeight:k.minorTickHeight),x2:b.position,y2:D,stroke:b.isMajor?k.majorTickColor:k.tickColor,strokeWidth:"1"}),F&&b.isMajor&&b.label&&u.jsx("text",{x:b.position,y:D-k.majorTickHeight-5,textAnchor:"middle",fill:k.labelColor,fontSize:k.fontSize,fontFamily:"monospace",children:b.label})]},H)),u.jsx("line",{x1:tt,y1:0,x2:tt,y2:D,stroke:k.indicatorColor,strokeWidth:k.indicatorLineWidth,pointerEvents:"none"}),z&&u.jsx("rect",{x:Math.max(0,tt-10),y:0,width:20,height:D,fill:"transparent",style:{cursor:"ew-resize"},pointerEvents:"visiblePainted"}),u.jsx("circle",{cx:tt,cy:5,r:4,fill:k.indicatorColor,pointerEvents:"none"})]})};Object.defineProperty(q,"TICK_AREA_HEIGHT",{enumerable:!0,get:()=>R.TICK_AREA_HEIGHT}),q.Timeline=Gt,q.TimelineCanvas=yt,q.TimelineControls=It,q.TimelineSVG=Kt,Object.keys(R).forEach(g=>{g!=="default"&&!Object.prototype.hasOwnProperty.call(q,g)&&Object.defineProperty(q,g,{enumerable:!0,get:()=>R[g]})}),Object.defineProperty(q,Symbol.toStringTag,{value:"Module"})}));
22
+ <%s key={someKey} {...props} />`,T,R,rt,R),lt[R+T]=!0)}if(R=null,E!==void 0&&(I(E),R=""+E),X(u)&&(I(u.key),R=""+u.key),"key"in u){E={};for(var pt in u)pt!=="key"&&(E[pt]=u[pt])}else E=u;return R&&N(E,typeof e=="function"?e.displayName||e.name||"Unknown":e),Y(e,R,E,j(),ft,bt)}function Q(e){K(e)?e._store&&(e._store.validated=1):typeof e=="object"&&e!==null&&e.$$typeof===tt&&(e._payload.status==="fulfilled"?K(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function K(e){return typeof e=="object"&&e!==null&&e.$$typeof===st}var z=n,st=Symbol.for("react.transitional.element"),ct=Symbol.for("react.portal"),q=Symbol.for("react.fragment"),at=Symbol.for("react.strict_mode"),w=Symbol.for("react.profiler"),x=Symbol.for("react.consumer"),M=Symbol.for("react.context"),nt=Symbol.for("react.forward_ref"),J=Symbol.for("react.suspense"),$=Symbol.for("react.suspense_list"),mt=Symbol.for("react.memo"),tt=Symbol.for("react.lazy"),c=Symbol.for("react.activity"),D=Symbol.for("react.client.reference"),A=z.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,F=Object.prototype.hasOwnProperty,W=Array.isArray,B=console.createTask?console.createTask:function(){return null};z={react_stack_bottom_frame:function(e){return e()}};var L,O={},l=z.react_stack_bottom_frame.bind(z,k)(),y=B(i(k)),lt={};jt.Fragment=q,jt.jsx=function(e,u,E){var T=1e4>A.recentlyCreatedOwnerStacks++;return V(e,u,E,!1,T?Error("react-stack-top-frame"):l,T?B(i(e)):y)},jt.jsxs=function(e,u,E){var T=1e4>A.recentlyCreatedOwnerStacks++;return V(e,u,E,!0,T?Error("react-stack-top-frame"):l,T?B(i(e)):y)}})()),jt}var Xt;function Zt(){return Xt||(Xt=1,process.env.NODE_ENV==="production"?St.exports=Vt():St.exports=Kt()),St.exports}var a=Zt();const Qt=520,qt=()=>a.jsxs("svg",{width:"14",height:"16",viewBox:"0 0 14 16",fill:"currentColor","aria-hidden":"true",children:[a.jsx("rect",{x:"1",y:"0",width:"4",height:"16",rx:"1"}),a.jsx("rect",{x:"9",y:"0",width:"4",height:"16",rx:"1"})]}),Jt=()=>a.jsx("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:a.jsx("polyline",{points:"3,5 7,9 11,5"})}),Nt=()=>a.jsx("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:a.jsx("polyline",{points:"3,9 7,5 11,9"})}),Yt=({currentTime:v,isPlaying:C,multiplier:I,dateTimeFormat:i,timezone:j,isLive:k,hasStartTime:X,hasEndTime:N,showJumpToStart:it=!0,showJumpToEnd:Y=!0,onPlayPause:V,onJumpToStart:Q,onRewind:K,onFastForward:z,onJumpToEnd:st,onJumpToLive:ct,onResetSpeed:q,onDateTimeClick:at,theme:w,swimLanesVisible:x,onToggleSwimLanes:M,labels:nt})=>{const J=I<0,$=I>1,mt=I===1,tt=Math.abs(I),c=n.useMemo(()=>({...b.DEFAULT_LABELS,...nt}),[nt]),D=n.useRef(null),[A,F]=n.useState(!1);n.useEffect(()=>{const l=D.current;if(!l)return;const y=new ResizeObserver(([lt])=>{F(lt.contentRect.width<Qt)});return y.observe(l),()=>y.disconnect()},[]);const W={background:"none",border:"1px solid transparent",cursor:"pointer",fontSize:"16px",padding:"0",display:"flex",alignItems:"center",justifyContent:"center",minWidth:"32px",width:"32px",height:"32px",borderRadius:"4px",transition:"background-color 0.15s, color 0.15s",fontFamily:"system-ui, -apple-system, sans-serif",flexShrink:0,lineHeight:1},B=l=>({...W,color:l?w.buttonActiveColor:w.buttonColor,borderColor:l?`${w.buttonActiveColor}33`:"transparent"}),L=(l,y)=>{l.currentTarget.style.backgroundColor=y?`${w.buttonActiveColor}22`:w.buttonHoverColor+"44"},O=l=>{l.currentTarget.style.backgroundColor="transparent"};return a.jsxs("div",{ref:D,style:{display:A?"flex":"grid",gridTemplateColumns:A?void 0:"1fr auto 1fr",alignItems:"center",padding:"6px 16px",backgroundColor:w.controlBarBackground,borderBottom:`1px solid ${w.controlBarBorder}`,fontFamily:"system-ui, -apple-system, sans-serif"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",flexShrink:0},children:[a.jsx("div",{onClick:at,title:at?c.dateTimeClickTooltip:void 0,style:{color:w.labelColor,fontFamily:"monospace",lineHeight:1.15,cursor:at?"pointer":"default",borderRadius:"4px",padding:"2px 4px",transition:"background 0.15s"},onMouseEnter:l=>{at&&(l.currentTarget.style.background=w.buttonHoverColor+"44")},onMouseLeave:l=>l.currentTarget.style.background="transparent",children:(()=>{const{timeFormat:l,dateFormat:y}=b.splitForDisplay(i),lt=b.getTimezoneAbbr(v,j);return a.jsxs(a.Fragment,{children:[l&&a.jsx("div",{style:{fontSize:"2em",fontWeight:"bold",letterSpacing:"0.02em"},children:b.formatDateTime(v,l,j)}),y&&a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[a.jsx("span",{style:{fontSize:"1.15em",letterSpacing:"0.03em",color:w.buttonActiveColor},children:b.formatDateTime(v,y,j)}),lt&&a.jsx("span",{style:{fontSize:"0.9em",color:w.labelColor,opacity:.7,fontWeight:"bold",letterSpacing:"0.04em"},children:lt})]})]})})()}),a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"2px",justifyContent:"center"},children:[a.jsx("button",{onClick:ct,style:{...W,fontSize:"11px",fontWeight:"bold",letterSpacing:"0.05em",width:"52px",minWidth:"52px",height:"20px",borderRadius:"3px",color:k?w.controlBarBackground:w.buttonActiveColor,backgroundColor:k?w.buttonActiveColor:"transparent",borderColor:w.buttonActiveColor,opacity:k?1:.55},onMouseEnter:l=>{l.currentTarget.style.opacity="1"},onMouseLeave:l=>{l.currentTarget.style.opacity=k?"1":"0.55"},title:k?c.liveActiveTooltip:c.liveTooltip,children:k?c.liveActiveLabel:c.liveLabel}),a.jsx("div",{style:{height:"20px",display:"flex",alignItems:"center"},children:!mt&&a.jsx("button",{onClick:()=>q(),style:{...W,fontSize:"11px",color:w.buttonActiveColor,borderColor:`${w.buttonActiveColor}44`,width:"52px",minWidth:"52px",height:"20px"},onMouseEnter:l=>L(l,!0),onMouseLeave:O,title:c.resetSpeedTooltip,children:J?`◀ ${tt}×`:`${tt}× ▶`})})]})]}),a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"2px",...A?{flex:1,justifyContent:"center"}:{}},children:[it&&a.jsx("button",{onClick:X?Q:void 0,disabled:!X,style:{...B(!1),opacity:X?1:.3,cursor:X?"pointer":"default"},onMouseEnter:X?l=>L(l,!1):void 0,onMouseLeave:X?O:void 0,title:X?c.jumpToStartTooltip:c.noStartTimeTooltip,children:"⏮"}),a.jsx("button",{onClick:K,style:{...B(J),width:"64px",minWidth:"64px",gap:"3px"},onMouseEnter:l=>L(l,J),onMouseLeave:O,title:J?b.resolveLabel(c.rewindActiveTooltip,tt):c.rewindTooltip,children:J?a.jsxs(a.Fragment,{children:[a.jsxs("span",{style:{fontSize:"11px",fontWeight:"bold"},children:[tt,"×"]}),"◀◀"]}):"◀◀"}),a.jsx("button",{onClick:()=>V(!C),style:{...W,color:w.buttonActiveColor,fontSize:"18px",width:"40px",minWidth:"40px",height:"40px",borderColor:`${w.buttonActiveColor}55`,borderRadius:"50%",paddingLeft:C?"0":"2px"},onMouseEnter:l=>L(l,!0),onMouseLeave:O,title:C?c.pauseTooltip:J?c.playFromRewindTooltip:c.playTooltip,children:C?a.jsx(qt,{}):"▶"}),a.jsx("button",{onClick:z,style:{...B($),width:"64px",minWidth:"64px",gap:"3px"},onMouseEnter:l=>L(l,$),onMouseLeave:O,title:$?b.resolveLabel(c.fastForwardActiveTooltip,tt):c.fastForwardTooltip,children:$?a.jsxs(a.Fragment,{children:["▶▶",a.jsxs("span",{style:{fontSize:"11px",fontWeight:"bold"},children:[tt,"×"]})]}):"▶▶"}),Y&&a.jsx("button",{onClick:N?st:void 0,disabled:!N,style:{...B(!1),opacity:N?1:.3,cursor:N?"pointer":"default"},onMouseEnter:N?l=>L(l,!1):void 0,onMouseLeave:N?O:void 0,title:N?c.jumpToEndTooltip:c.noEndTimeTooltip,children:"⏭"})]}),!A&&a.jsx("div",{style:{display:"flex",justifyContent:"flex-end",alignItems:"center"},children:M!=null&&x!=null&&a.jsx("button",{onClick:M,style:{...W,color:w.buttonActiveColor,borderColor:`${w.buttonActiveColor}33`},onMouseEnter:l=>L(l,x),onMouseLeave:O,title:x?c.collapseSwimLanesTooltip:c.expandSwimLanesTooltip,children:x?a.jsx(Jt,{}):a.jsx(Nt,{})})}),A&&M!=null&&x!=null&&a.jsx("button",{onClick:M,style:{...W,color:w.buttonActiveColor,borderColor:`${w.buttonActiveColor}33`,marginLeft:"4px"},onMouseEnter:l=>L(l,x),onMouseLeave:O,title:x?c.collapseSwimLanesTooltip:c.expandSwimLanesTooltip,children:x?a.jsx(Jt,{}):a.jsx(Nt,{})})]})},Lt=n.forwardRef((v,C)=>{const{currentTime:I,defaultStartMs:i,defaultEndMs:j,theme:k,maxTicks:X,timezone:N,dateTimeFormat:it,months:Y,onTimeChange:V,onDragStart:Q,onDragEnd:K,swimLanes:z,showSwimLanes:st,onSwimLaneItemClick:ct,onSwimLaneItemHover:q,onSwimLaneItemDoubleClick:at,onSwimLaneItemContextMenu:w,onSwimLaneReorder:x}=v,M=n.useRef(null),nt=n.useRef(k),J=n.useRef(X),$=n.useRef(N),mt=n.useRef(it),tt=n.useRef(Y),c=n.useRef(i),D=n.useRef(j),A=n.useRef(S.JulianDate.toDate(I).getTime());n.useEffect(()=>{nt.current=k},[k]),n.useEffect(()=>{J.current=X},[X]),n.useEffect(()=>{$.current=N,m()},[N]),n.useEffect(()=>{mt.current=it,m()},[it]),n.useEffect(()=>{tt.current=Y,m()},[Y]);const F=n.useRef(z??[]),W=n.useRef(st??(z!=null&&z.length>0)),B=n.useRef(0),L=n.useRef(null),O=n.useRef(null),l=n.useRef(ct),y=n.useRef(q),lt=n.useRef(at),e=n.useRef(w),u=n.useRef(x);n.useEffect(()=>{l.current=ct},[ct]),n.useEffect(()=>{y.current=q},[q]),n.useEffect(()=>{lt.current=at},[at]),n.useEffect(()=>{e.current=w},[w]),n.useEffect(()=>{u.current=x},[x]),n.useEffect(()=>{F.current=z??[],m()},[z]),n.useEffect(()=>{W.current=st??(z!=null&&z.length>0),m()},[st,z]);const E=n.useRef(null),T=n.useRef(null),ft=n.useRef(!1),bt=n.useRef(0),R=n.useRef("none"),rt=n.useRef(0),pt=n.useRef(0),Tt=n.useRef(0),gt=n.useRef("none"),Mt=n.useRef(0),xt=n.useRef(0),H=n.useRef(0),Dt=n.useRef(0),Et=(t,r)=>Math.hypot(r.clientX-t.clientX,r.clientY-t.clientY),ht=n.useCallback(()=>({startMs:c.current,endMs:D.current,currentMs:A.current,theme:nt.current,maxTicks:J.current,timezone:$.current,use12h:/h/.test(mt.current??""),months:tt.current,swimLanes:F.current,showSwimLanes:W.current,scrollTop:B.current,reorderState:O.current}),[]);n.useImperativeHandle(C,()=>({zoomTo(t,r,s){const p=Math.max(b.MIN_SPAN_MS,Math.min(b.MAX_SPAN_MS,r-t)),o=(t+r)/2;c.current=o-p/2,D.current=o+p/2,s!==void 0&&(A.current=s),m()},getVisibleRange(){return{startMs:c.current,endMs:D.current}},startFollow(t){if(bt.current=t,T.current!==null)return;ft.current=!0;let r=performance.now();const s=()=>{const p=performance.now(),o=p-r;r=p;const d=o*bt.current;c.current+=d,D.current+=d,A.current+=d,m(),T.current=requestAnimationFrame(s)};T.current=requestAnimationFrame(s)},stopFollow(){ft.current=!1,T.current!==null&&(cancelAnimationFrame(T.current),T.current=null)},correctFollow(t){if(!ft.current)return;const r=t-A.current;A.current=t,c.current+=r,D.current+=r},appendSwimLane(t){F.current=[...F.current,t],m()},updateSwimLane(t,r){F.current=F.current.map(s=>s.id===t?{...s,...r,id:s.id}:s),m()},removeSwimLane(t){F.current=F.current.filter(r=>r.id!==t),m()},reorderSwimLanes(t){const r=new Map(F.current.map(p=>[p.id,p])),s=[];for(const p of t){const o=r.get(p);o&&s.push(o)}F.current=s,m()}}));const m=n.useCallback(()=>{const t=M.current;if(!t)return;const r=t.getContext("2d");if(!r)return;const s=t.getBoundingClientRect(),p=s.width,o=s.height;if(p===0||o===0)return;const d=window.devicePixelRatio||1,g=Math.round(p*d),h=Math.round(o*d);(t.width!==g||t.height!==h)&&(t.width=g,t.height=h),r.save(),r.scale(d,d);const P=b.drawTimeline(r,p,o,ht());P!==B.current&&(B.current=P),r.restore()},[ht]);n.useLayoutEffect(()=>{m();const t=M.current;if(!t)return;const r=new ResizeObserver(()=>m());return r.observe(t),()=>r.disconnect()},[m]),n.useEffect(()=>{if(ft.current)return;const t=S.JulianDate.toDate(I).getTime();A.current!==t&&(A.current=t,m())},[I,m]);const Rt=n.useCallback(t=>{if(E.current!==null)return;const r=()=>{const s=M.current,p=D.current-c.current,o=t*p*.01;if(c.current+=o,D.current+=o,s){const d=s.getBoundingClientRect(),g=Math.max(0,Math.min(d.width,pt.current-d.left)),h=c.current+g/d.width*(D.current-c.current);A.current=h,V(S.JulianDate.fromDate(new Date(h)))}m(),E.current=requestAnimationFrame(r)};E.current=requestAnimationFrame(r)},[m,V]),wt=n.useCallback(()=>{E.current!==null&&(cancelAnimationFrame(E.current),E.current=null)},[]),dt=n.useCallback((t,r,s,p)=>b.hitTestSwimLane(t,r,s,p,ht()),[ht]),At=n.useCallback((t,r,s)=>b.hitTestLaneLabel(t,r,s,ht()),[ht]),yt=n.useCallback((t,r)=>b.isInSwimLaneRegion(t,r,ht()),[ht]),Ot=n.useCallback(t=>{t.preventDefault();const r=t.currentTarget.getBoundingClientRect(),s=t.clientX-r.left,p=t.clientY-r.top;if(t.button===0&&u.current){const o=At(s,p,r.height);if(o){const g=F.current.findIndex(h=>h.id===o.id);O.current={dragging:!0,dragLaneId:o.id,dragStartY:t.clientY,currentY:t.clientY,insertIndex:g},t.currentTarget.style.cursor="grabbing";return}}if(t.button===0&&yt(p,r.height)){const o=(A.current-c.current)/(D.current-c.current)*r.width;if(!(Math.abs(s-o)<=10)&&dt(s,p,r.width,r.height)){Tt.current=performance.now();return}}if(t.button===0){R.current="scrub",pt.current=t.clientX,t.currentTarget.style.cursor="grabbing",Q==null||Q();const o=c.current+s/r.width*(D.current-c.current);A.current=o,m(),V(S.JulianDate.fromDate(new Date(o)))}else if(t.button===1)R.current="slide",rt.current=t.clientX;else if(t.button===2){if(e.current&&yt(p,r.height))return;R.current="zoom",rt.current=t.clientX}},[m,V,Q,At,yt,dt]);n.useEffect(()=>{const t=s=>{const p=O.current;if(p&&p.dragging){p.currentY=s.clientY;const h=M.current;if(h){const P=h.getBoundingClientRect(),Z=s.clientY-P.top;let Ct=-B.current;const It=F.current;let Bt=It.length;for(let kt=0;kt<It.length;kt++){const Ht=It[kt].height??b.DEFAULT_LANE_HEIGHT,ee=Ct+Ht/2;if(Z<ee){Bt=kt;break}Ct+=Ht+b.LANE_GAP}p.insertIndex=Bt}m();return}if(R.current==="none")return;const o=M.current;if(!o)return;const d=o.getBoundingClientRect(),g=d.width;if(R.current==="scrub"){pt.current=s.clientX;const h=s.clientX-d.left,P=g*.08;h<P?Rt(-1):h>g-P?Rt(1):wt();const Z=Math.max(0,Math.min(g,h)),vt=c.current+Z/g*(D.current-c.current);A.current=vt,m(),V(S.JulianDate.fromDate(new Date(vt)))}else if(R.current==="slide"){const h=rt.current-s.clientX;if(rt.current=s.clientX,h!==0){const P=h/g*(D.current-c.current);c.current+=P,D.current+=P,m()}}else if(R.current==="zoom"){const h=rt.current-s.clientX;rt.current=s.clientX,h!==0&&f(Math.pow(1.01,h))}},r=()=>{var p;const s=O.current;if(s&&s.dragging){const o=Math.abs(s.currentY-s.dragStartY),d=F.current,g=d.findIndex(h=>h.id===s.dragLaneId);if(o>5&&g>=0&&s.insertIndex!==g&&s.insertIndex!==g+1){const h=[...d],[P]=h.splice(g,1),Z=s.insertIndex>g?s.insertIndex-1:s.insertIndex;h.splice(Z,0,P),F.current=h,(p=u.current)==null||p.call(u,h.map(vt=>vt.id))}O.current=null,M.current&&(M.current.style.cursor="default"),m();return}wt(),R.current="none",M.current&&(M.current.style.cursor="default"),K==null||K()};return document.addEventListener("mousemove",t),document.addEventListener("mouseup",r),()=>{document.removeEventListener("mousemove",t),document.removeEventListener("mouseup",r)}},[m,V,K,Rt,wt]);const f=n.useCallback(t=>{const r=b.zoomRange(c.current,D.current,t);c.current=r.startMs,D.current=r.endMs,m()},[m]),_=n.useCallback(t=>{t.preventDefault();const r=M.current;if(!r)return;const s=r.getBoundingClientRect(),p=t.clientY-s.top,o=W.current,d=F.current;if(o&&d.length>0){const g=Math.max(0,s.height-b.TICK_AREA_HEIGHT);if(p>=0&&p<g){let h=0;for(const Z of d)h+=(Z.height??b.DEFAULT_LANE_HEIGHT)+b.LANE_GAP;const P=Math.max(0,h-g);if(P>0){B.current=Math.max(0,Math.min(P,B.current+t.deltaY*b.SWIM_LANE_SCROLL_SPEED)),m();return}}}f(Math.pow(1.05,t.deltaY>0?-1:1))},[f,m]);n.useEffect(()=>{const t=M.current;if(t)return t.addEventListener("wheel",_,{passive:!1}),()=>t.removeEventListener("wheel",_)},[_]),n.useEffect(()=>{const t=M.current;if(!t)return;const r=o=>{o.preventDefault();const d=t.getBoundingClientRect();if(o.touches.length===1){const g=o.touches[0].clientX-d.left,h=Math.max(0,Math.min(d.width,g)),P=c.current+h/d.width*(D.current-c.current);Dt.current=A.current,gt.current="scrub",Mt.current=o.touches[0].clientX,pt.current=o.touches[0].clientX,A.current=P,m(),Q==null||Q(),V(S.JulianDate.fromDate(new Date(P)))}else o.touches.length>=2&&(gt.current==="scrub"&&(A.current=Dt.current,m(),V(S.JulianDate.fromDate(new Date(Dt.current)))),gt.current="pinch",xt.current=Et(o.touches[0],o.touches[1]),H.current=(o.touches[0].clientX+o.touches[1].clientX)/2-d.left)},s=o=>{o.preventDefault();const d=t.getBoundingClientRect();if(gt.current==="scrub"&&o.touches.length>=1){const g=o.touches[0].clientX-d.left,h=d.width*.08;if(pt.current=o.touches[0].clientX,g<h)Rt(-1);else if(g>d.width-h)Rt(1);else{wt();const P=Math.max(0,Math.min(d.width,g)),Z=c.current+P/d.width*(D.current-c.current);A.current=Z,m(),V(S.JulianDate.fromDate(new Date(Z)))}}else if(gt.current==="slide"&&o.touches.length>=1){const g=Mt.current-o.touches[0].clientX;if(Mt.current=o.touches[0].clientX,g!==0){const h=g/d.width*(D.current-c.current);c.current+=h,D.current+=h,m()}}else if(gt.current==="pinch"&&o.touches.length>=2){const g=Et(o.touches[0],o.touches[1]),h=(o.touches[0].clientX+o.touches[1].clientX)/2-d.left;if(g>0&&xt.current>0){const P=c.current+H.current/d.width*(D.current-c.current),Z=b.zoomAroundMs(c.current,D.current,xt.current/g,P);c.current=Z.startMs,D.current=Z.endMs,m()}xt.current=g,H.current=h}},p=o=>{wt(),gt.current==="scrub"&&(K==null||K()),o.touches.length===0?gt.current="none":o.touches.length===1&&(gt.current="slide",Mt.current=o.touches[0].clientX)};return t.addEventListener("touchstart",r,{passive:!1}),t.addEventListener("touchmove",s,{passive:!1}),t.addEventListener("touchend",p,{passive:!1}),()=>{t.removeEventListener("touchstart",r),t.removeEventListener("touchmove",s),t.removeEventListener("touchend",p)}},[m,Q,K,V,f,Rt,wt]);const U=n.useCallback(t=>{var g,h,P;if(R.current!=="none")return;const r=t.currentTarget.getBoundingClientRect(),s=t.clientX-r.left,p=t.clientY-r.top,o=(A.current-c.current)/(D.current-c.current)*r.width,d=Math.abs(s-o)<=10;if(yt(p,r.height)){const Z=dt(s,p,r.width,r.height),vt=L.current;if(Z)t.currentTarget.style.cursor=d?"grab":"pointer",(!vt||vt.item.id!==Z.item.id||vt.lane.id!==Z.lane.id)&&(L.current=Z,(g=y.current)==null||g.call(y,{laneId:Z.lane.id,item:Z.item,originalEvent:t.nativeEvent}),m());else if(vt&&(L.current=null,(h=y.current)==null||h.call(y,null),m()),d)t.currentTarget.style.cursor="grab";else{const Ct=At(s,p,r.height);t.currentTarget.style.cursor=Ct&&u.current?"grab":"default"}return}L.current&&(L.current=null,(P=y.current)==null||P.call(y,null),m()),t.currentTarget.style.cursor=d?"grab":"default"},[m,dt,yt,At]),ut=n.useCallback(t=>{var g;if(performance.now()-Tt.current>300)return;const s=t.currentTarget.getBoundingClientRect(),p=t.clientX-s.left,o=t.clientY-s.top,d=dt(p,o,s.width,s.height);d&&((g=l.current)==null||g.call(l,{laneId:d.lane.id,item:d.item,originalEvent:t.nativeEvent}))},[dt]),G=n.useCallback(t=>{var d;const r=t.currentTarget.getBoundingClientRect(),s=t.clientX-r.left,p=t.clientY-r.top,o=dt(s,p,r.width,r.height);o&&((d=lt.current)==null||d.call(lt,{laneId:o.lane.id,item:o.item,originalEvent:t.nativeEvent}))},[dt]),et=n.useCallback(t=>{const r=t.currentTarget.getBoundingClientRect(),s=t.clientX-r.left,p=t.clientY-r.top,o=dt(s,p,r.width,r.height);o&&e.current?(t.preventDefault(),e.current({laneId:o.lane.id,item:o.item,originalEvent:t.nativeEvent})):t.preventDefault()},[dt]);return n.useEffect(()=>()=>{E.current!==null&&cancelAnimationFrame(E.current),T.current!==null&&cancelAnimationFrame(T.current)},[]),a.jsx("canvas",{ref:M,style:{width:"100%",flex:1,minHeight:0,display:"block",cursor:"default"},onMouseDown:Ot,onMouseMove:U,onClick:ut,onDoubleClick:G,onMouseLeave:()=>{var t;L.current&&(L.current=null,(t=y.current)==null||t.call(y,null),m()),R.current==="none"&&M.current&&(M.current.style.cursor="default")},onContextMenu:et})});Lt.displayName="TimelineCanvas";const zt=[2,4,8,16,32,100,1],Wt=[1,2,4,8,16,32,100],$t=({startTime:v,endTime:C,currentTime:I,clock:i,onTimeChange:j,onPlayPause:k,onMultiplierChange:X,height:N,showControls:it=!0,showJumpToStart:Y,showJumpToEnd:V,enableDrag:Q=!0,dateTimeFormat:K,onDateTimeClick:z,jumpToTime:st,maxTicks:ct,ffSpeeds:q=zt,rwSpeeds:at=Wt,theme:w,className:x,timezone:M,swimLanes:nt,showSwimLanes:J,onShowSwimLanesChange:$,swimLaneTransition:mt="animated",onSwimLaneItemClick:tt,onSwimLaneItemHover:c,onSwimLaneItemDoubleClick:D,onSwimLaneItemContextMenu:A,onSwimLaneReorder:F,labels:W})=>{const B=()=>Date.now(),L=v?S.JulianDate.toDate(b.toJulianDate(v)).getTime():B()-432e5,O=C?S.JulianDate.toDate(b.toJulianDate(C)).getTime():B()+12*3600*1e3,[l,y]=n.useState(()=>b.toJulianDate(I??v??S.JulianDate.fromDate(new Date))),[lt,e]=n.useState((i==null?void 0:i.shouldAnimate)??!1),[u,E]=n.useState((i==null?void 0:i.multiplier)??1),[T,ft]=n.useState(J??!0);n.useEffect(()=>{J!=null&&ft(J)},[J]);const bt=()=>{const f=!T;ft(f),$==null||$(f)},R=nt!=null&&nt.length>0,rt=n.useRef(null),[pt,Tt]=n.useState(0);n.useEffect(()=>{const f=rt.current;if(!f)return;const _=new ResizeObserver(([U])=>Tt(U.borderBoxSize[0].blockSize));return _.observe(f),()=>_.disconnect()},[it]);const Mt=R&&!T?`${pt+b.TICK_AREA_HEIGHT}px`:N!=null?`${N}px`:"100%",xt=n.useRef(!1),H=n.useRef(null),Dt={...b.defaultTheme,...w};n.useEffect(()=>{if(!i)return;const f=()=>{if(!xt.current){const _=S.JulianDate.clone(i.currentTime);if(y(_),e(i.shouldAnimate),E(i.multiplier),H.current){const{startMs:U,endMs:ut}=H.current.getVisibleRange(),G=ut-U,et=S.JulianDate.toDate(_).getTime(),t=et-U;t<=G*.1?H.current.zoomTo(et-G*.1,et+G*.9,et):t>=G*.9&&H.current.zoomTo(et-G*.9,et+G*.1,et)}}};return i.onTick.addEventListener(f),()=>{i.onTick.removeEventListener(f)}},[i]),n.useEffect(()=>{if(i)return;const f=setInterval(()=>{if(xt.current)return;const _=S.JulianDate.fromDate(new Date);if(y(_),H.current){const{startMs:U,endMs:ut}=H.current.getVisibleRange(),G=ut-U,et=S.JulianDate.toDate(_).getTime(),t=et-U;t<=G*.1?H.current.zoomTo(et-G*.1,et+G*.9,et):t>=G*.9&&H.current.zoomTo(et-G*.9,et+G*.1,et)}},1e3);return()=>clearInterval(f)},[i]),n.useEffect(()=>{if(!st)return;const f=b.toJulianDate(st);if(ht(f),H.current){const{startMs:_,endMs:U}=H.current.getVisibleRange(),ut=U-_,G=S.JulianDate.toDate(f).getTime();H.current.zoomTo(G-ut/2,G+ut/2)}},[st]);const Et=(f,_=!0)=>{i&&(i.multiplier=f,_&&(i.shouldAnimate=!0)),E(f),_&&e(!0),X==null||X(f)},ht=f=>{y(f),i&&(i.currentTime=S.JulianDate.clone(f)),j==null||j(f)},m=f=>{f&&u<0&&Et(1,!1),i&&(i.shouldAnimate=f),e(f),k==null||k(f)},Rt=()=>{const f=q.length>0?q:zt,_=u>1?u:1,U=f.indexOf(_),ut=f[U<0||U===f.length-1?0:U+1];Et(ut)},wt=()=>{const f=at.length>0?at:Wt,_=u<0?Math.abs(u):0,U=f.indexOf(_),ut=-f[U<0||U===f.length-1?0:U+1];Et(ut)},dt=()=>{var _;const f=b.toJulianDate(v??S.JulianDate.fromDate(new Date(L)));i&&(i.currentTime=S.JulianDate.clone(f)),y(f),(_=H.current)==null||_.zoomTo(L,O)},At=()=>{var _;const f=b.toJulianDate(C??S.JulianDate.fromDate(new Date(O)));i&&(i.currentTime=S.JulianDate.clone(f)),y(f),(_=H.current)==null||_.zoomTo(L,O)},yt=()=>{const f=S.JulianDate.fromDate(new Date);i&&(i.currentTime=S.JulianDate.clone(f)),y(f),Et(1);const _=Date.now();if(H.current){const{startMs:U,endMs:ut}=H.current.getVisibleRange(),G=ut-U;H.current.zoomTo(_-G/2,_+G/2)}},Ot=Math.abs(S.JulianDate.toDate(l).getTime()-Date.now())<1e4;return a.jsxs("div",{className:x,style:{width:"100%",height:Mt,overflow:"hidden",display:"flex",flexDirection:"column",fontFamily:"system-ui, -apple-system, sans-serif",transition:mt==="animated"?"height 0.2s ease":void 0},children:[it&&a.jsx("div",{ref:rt,children:a.jsx(Yt,{currentTime:l,isPlaying:lt,multiplier:u,isLive:Ot,hasStartTime:v!=null,hasEndTime:C!=null,showJumpToStart:Y,showJumpToEnd:V,onPlayPause:m,onJumpToStart:dt,onRewind:wt,onFastForward:Rt,onJumpToEnd:At,onJumpToLive:yt,onResetSpeed:()=>Et(1),onDateTimeClick:z,dateTimeFormat:K,timezone:M,theme:Dt,swimLanesVisible:R?T:void 0,onToggleSwimLanes:R?bt:void 0,labels:W})}),Q!==!1&&a.jsx(Lt,{ref:H,currentTime:l,defaultStartMs:L,defaultEndMs:O,theme:Dt,maxTicks:ct,timezone:M,dateTimeFormat:K,months:W==null?void 0:W.months,onTimeChange:ht,onDragStart:()=>{xt.current=!0},onDragEnd:()=>{xt.current=!1},swimLanes:nt,showSwimLanes:T,onSwimLaneItemClick:tt,onSwimLaneItemHover:c,onSwimLaneItemDoubleClick:D,onSwimLaneItemContextMenu:A,onSwimLaneReorder:F})]})},te=({startTime:v,endTime:C,currentTime:I,width:i,height:j,tickInterval:k,showLabels:X,snapToTicks:N,enableDrag:it,theme:Y,onTimeChange:V,onVisibleRangeChange:Q,onDragStart:K,onDragEnd:z})=>{const st=n.useMemo(()=>b.generateTicks(v,C,k,i),[v,C,k,i]),ct=n.useMemo(()=>b.timeToPosition(I,v,C,i),[I,v,C,i]),q=n.useRef(null),at=x=>{if(!it)return;const M=x.currentTarget.getBoundingClientRect(),nt=x.clientX-M.left,J=Math.max(0,Math.min(i,nt));if(!(Math.abs(J-ct)<=10)){let O=J;N&&(O=b.snapToTick(J,st,10));const l=new Date(v).getTime(),y=new Date(C).getTime();V(S.JulianDate.fromDate(new Date(l+O/i*(y-l))));return}K==null||K();const mt=x.clientX,tt=new Date(I).getTime(),c=new Date(v).getTime(),A=(new Date(C).getTime()-c)/i;let F=0,W=!1;const B=O=>{F=O.clientX-mt,W=!0,q.current||(q.current=requestAnimationFrame(()=>{if(W){const l=tt+F*A;V(S.JulianDate.fromDate(new Date(l))),W=!1}q.current=null}))},L=()=>{document.removeEventListener("mousemove",B),document.removeEventListener("mouseup",L),q.current!==null&&(cancelAnimationFrame(q.current),q.current=null),z==null||z()};document.addEventListener("mousemove",B),document.addEventListener("mouseup",L)},w=x=>{x.preventDefault();const M=x.shiftKey?x.deltaY:x.deltaX!==0?x.deltaX:x.deltaY;if(Math.abs(M)<1)return;const nt=new Date(v).getTime(),J=new Date(C).getTime(),$=M/i*(J-nt)*.5;Q==null||Q(S.JulianDate.fromDate(new Date(nt+$)),S.JulianDate.fromDate(new Date(J+$)))};return a.jsxs("svg",{width:"100%",height:j,style:{backgroundColor:Y.backgroundColor,display:"block",cursor:"default"},onMouseDown:at,onWheel:w,children:[a.jsx("rect",{width:i,height:j,fill:Y.backgroundColor}),st.map((x,M)=>a.jsxs("g",{children:[a.jsx("line",{x1:x.position,y1:j-(x.isMajor?Y.majorTickHeight:Y.minorTickHeight),x2:x.position,y2:j,stroke:x.isMajor?Y.majorTickColor:Y.tickColor,strokeWidth:"1"}),X&&x.isMajor&&x.label&&a.jsx("text",{x:x.position,y:j-Y.majorTickHeight-5,textAnchor:"middle",fill:Y.labelColor,fontSize:Y.fontSize,fontFamily:"monospace",children:x.label})]},M)),a.jsx("line",{x1:ct,y1:0,x2:ct,y2:j,stroke:Y.indicatorColor,strokeWidth:Y.indicatorLineWidth,pointerEvents:"none"}),it&&a.jsx("rect",{x:Math.max(0,ct-10),y:0,width:20,height:j,fill:"transparent",style:{cursor:"ew-resize"},pointerEvents:"visiblePainted"}),a.jsx("circle",{cx:ct,cy:5,r:4,fill:Y.indicatorColor,pointerEvents:"none"})]})};Object.defineProperty(ot,"TICK_AREA_HEIGHT",{enumerable:!0,get:()=>b.TICK_AREA_HEIGHT}),ot.Timeline=$t,ot.TimelineCanvas=Lt,ot.TimelineControls=Yt,ot.TimelineSVG=te,Object.keys(b).forEach(v=>{v!=="default"&&!Object.prototype.hasOwnProperty.call(ot,v)&&Object.defineProperty(ot,v,{enumerable:!0,get:()=>b[v]})}),Object.defineProperty(ot,Symbol.toStringTag,{value:"Module"})}));
package/dist/index.d.ts CHANGED
@@ -72,6 +72,10 @@ declare interface TimelineCanvasProps {
72
72
  maxTicks?: number;
73
73
  /** @see TimelineBaseProps.timezone */
74
74
  timezone?: string;
75
+ /** @see TimelineBaseProps.dateTimeFormat */
76
+ dateTimeFormat?: string;
77
+ /** Abbreviated month names for tick labels. Falls back to English when omitted. */
78
+ months?: string[];
75
79
  onTimeChange: (time: Cesium.JulianDate) => void;
76
80
  onDragStart?: () => void;
77
81
  onDragEnd?: () => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kteneyck/cesium-timeline-react",
3
- "version": "0.6.0",
3
+ "version": "0.8.0",
4
4
  "description": "React timeline component for Cesium with clock integration",
5
5
  "license": "MIT",
6
6
  "author": "kteneyck",
@@ -42,7 +42,7 @@
42
42
  ],
43
43
  "scripts": {
44
44
  "build": "vite build",
45
- "test": "vitest"
45
+ "test": "vitest run"
46
46
  },
47
47
  "peerDependencies": {
48
48
  "cesium": "^1.100.0",
@@ -52,9 +52,12 @@
52
52
  "@types/react-dom": ">=18"
53
53
  },
54
54
  "dependencies": {
55
- "@kteneyck/cesium-timeline-core": "0.6.0"
55
+ "@kteneyck/cesium-timeline-core": "0.8.0"
56
56
  },
57
57
  "devDependencies": {
58
+ "@testing-library/jest-dom": "^6.0.0",
59
+ "@testing-library/react": "^16.0.0",
60
+ "@testing-library/user-event": "^14.0.0",
58
61
  "@types/react": "19.0.1",
59
62
  "@types/react-dom": "19.0.1",
60
63
  "@vitejs/plugin-react": "^4.2.0",