@kteneyck/cesium-timeline-react 0.9.0 → 0.11.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(at,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):(at=typeof globalThis<"u"?globalThis:at||self,n(at.CesiumTimelineReact={},at.React,at.Cesium,at.CesiumTimelineCore))})(this,(function(at,n,Kt,b){"use strict";function Vt(v){const L=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(v){for(const J in v)if(J!=="default"){const i=Object.getOwnPropertyDescriptor(v,J);Object.defineProperty(L,J,i.get?i:{enumerable:!0,get:()=>v[J]})}}return L.default=v,Object.freeze(L)}const T=Vt(Kt);var Ct={exports:{}},Dt={};/**
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,$t,R){"use strict";function te(x){const S=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(x){for(const I in x)if(I!=="default"){const g=Object.getOwnPropertyDescriptor(x,I);Object.defineProperty(S,I,g.get?g:{enumerable:!0,get:()=>x[I]})}}return S.default=x,Object.freeze(S)}const T=te($t);var It={exports:{}},At={};/**
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 Jt;function Zt(){if(Jt)return Dt;Jt=1;var v=Symbol.for("react.transitional.element"),L=Symbol.for("react.fragment");function J(i,C,I){var B=null;if(I!==void 0&&(B=""+I),C.key!==void 0&&(B=""+C.key),"key"in C){I={};for(var G in C)G!=="key"&&(I[G]=C[G])}else I=C;return C=I.ref,{$$typeof:v,type:i,key:B,ref:C!==void 0?C:null,props:I}}return Dt.Fragment=L,Dt.jsx=J,Dt.jsxs=J,Dt}var At={};/**
9
+ */var Yt;function ee(){if(Yt)return At;Yt=1;var x=Symbol.for("react.transitional.element"),S=Symbol.for("react.fragment");function I(g,j,L){var z=null;if(L!==void 0&&(z=""+L),j.key!==void 0&&(z=""+j.key),"key"in j){L={};for(var X in j)X!=="key"&&(L[X]=j[X])}else L=j;return j=L.ref,{$$typeof:x,type:g,key:z,ref:j!==void 0?j:null,props:L}}return At.Fragment=S,At.jsx=I,At.jsxs=I,At}var _t={};/**
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 Xt;function Qt(){return Xt||(Xt=1,process.env.NODE_ENV!=="production"&&(function(){function v(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===h?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case et:return"Fragment";case y:return"Profiler";case lt:return"StrictMode";case H:return"Suspense";case ot:return"SuspenseList";case j: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 ut:return"Portal";case $:return e.displayName||"Context";case R:return(e._context.displayName||"Context")+".Consumer";case M:var p=e.render;return e=e.displayName,e||(e=p.displayName||p.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case mt:return p=e.displayName||null,p!==null?p:v(e.type)||"Memo";case st:p=e._payload,e=e._init;try{return v(e(p))}catch{}}return null}function L(e){return""+e}function J(e){try{L(e);var p=!1}catch{p=!0}if(p){p=console;var E=p.error,D=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return E.call(p,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",D),L(e)}}function i(e){if(e===et)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===st)return"<...>";try{var p=v(e);return p?"<"+p+">":"<...>"}catch{return"<...>"}}function C(){var e=x.A;return e===null?null:e.getOwner()}function I(){return Error("react-stack-top-frame")}function B(e){if(O.call(e,"key")){var p=Object.getOwnPropertyDescriptor(e,"key").get;if(p&&p.isReactWarning)return!1}return e.key!==void 0}function G(e,p){function E(){N||(N=!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)",p))}E.isReactWarning=!0,Object.defineProperty(e,"key",{get:E,configurable:!0})}function ft(){var e=v(this.type);return k[e]||(k[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 U(e,p,E,D,rt,gt){var Y=E.ref;return e={$$typeof:q,type:e,key:p,props:E,_owner:D},(Y!==void 0?Y:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:ft}):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:rt}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:gt}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function Z(e,p,E,D,rt,gt){var Y=p.children;if(Y!==void 0)if(D)if(S(Y)){for(D=0;D<Y.length;D++)K(Y[D]);Object.freeze&&Object.freeze(Y)}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 K(Y);if(O.call(p,"key")){Y=v(e);var A=Object.keys(p).filter(function(Rt){return Rt!=="key"});D=0<A.length?"{key: someKey, "+A.join(": ..., ")+": ...}":"{key: someKey}",P[Y+D]||(A=0<A.length?"{"+A.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
17
+ */var Ht;function ne(){return Ht||(Ht=1,process.env.NODE_ENV!=="production"&&(function(){function x(t){if(t==null)return null;if(typeof t=="function")return t.$$typeof===wt?null:t.displayName||t.name||null;if(typeof t=="string")return t;switch(t){case G:return"Fragment";case M:return"Profiler";case ct:return"StrictMode";case U:return"Suspense";case A:return"SuspenseList";case ht:return"Activity"}if(typeof t=="object")switch(typeof t.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),t.$$typeof){case st:return"Portal";case B:return t.displayName||"Context";case E:return(t._context.displayName||"Context")+".Consumer";case q:var l=t.render;return t=t.displayName,t||(t=l.displayName||l.name||"",t=t!==""?"ForwardRef("+t+")":"ForwardRef"),t;case _:return l=t.displayName||null,l!==null?l:x(t.type)||"Memo";case $:l=t._payload,t=t._init;try{return x(t(l))}catch{}}return null}function S(t){return""+t}function I(t){try{S(t);var l=!1}catch{l=!0}if(l){l=console;var a=l.error,b=typeof Symbol=="function"&&Symbol.toStringTag&&t[Symbol.toStringTag]||t.constructor.name||"Object";return a.call(l,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",b),S(t)}}function g(t){if(t===G)return"<>";if(typeof t=="object"&&t!==null&&t.$$typeof===$)return"<...>";try{var l=x(t);return l?"<"+l+">":"<...>"}catch{return"<...>"}}function j(){var t=tt.A;return t===null?null:t.getOwner()}function L(){return Error("react-stack-top-frame")}function z(t){if(c.call(t,"key")){var l=Object.getOwnPropertyDescriptor(t,"key").get;if(l&&l.isReactWarning)return!1}return t.key!==void 0}function X(t,l){function a(){rt||(rt=!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)",l))}a.isReactWarning=!0,Object.defineProperty(t,"key",{get:a,configurable:!0})}function dt(){var t=x(this.type);return V[t]||(V[t]=!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.")),t=this.props.ref,t!==void 0?t:null}function J(t,l,a,b,it,gt){var D=a.ref;return t={$$typeof:W,type:t,key:l,props:a,_owner:b},(D!==void 0?D:null)!==null?Object.defineProperty(t,"ref",{enumerable:!1,get:dt}):Object.defineProperty(t,"ref",{enumerable:!1,value:null}),t._store={},Object.defineProperty(t._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(t,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(t,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:it}),Object.defineProperty(t,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:gt}),Object.freeze&&(Object.freeze(t.props),Object.freeze(t)),t}function N(t,l,a,b,it,gt){var D=l.children;if(D!==void 0)if(b)if(v(D)){for(b=0;b<D.length;b++)ut(D[b]);Object.freeze&&Object.freeze(D)}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 ut(D);if(c.call(l,"key")){D=x(t);var Q=Object.keys(l).filter(function(Et){return Et!=="key"});b=0<Q.length?"{key: someKey, "+Q.join(": ..., ")+": ...}":"{key: someKey}",Y[D+b]||(Q=0<Q.length?"{"+Q.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} />`,D,Y,A,Y),P[Y+D]=!0)}if(Y=null,E!==void 0&&(J(E),Y=""+E),B(p)&&(J(p.key),Y=""+p.key),"key"in p){E={};for(var dt in p)dt!=="key"&&(E[dt]=p[dt])}else E=p;return Y&&G(E,typeof e=="function"?e.displayName||e.name||"Unknown":e),U(e,Y,E,C(),rt,gt)}function K(e){F(e)?e._store&&(e._store.validated=1):typeof e=="object"&&e!==null&&e.$$typeof===st&&(e._payload.status==="fulfilled"?F(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function F(e){return typeof e=="object"&&e!==null&&e.$$typeof===q}var ct=n,q=Symbol.for("react.transitional.element"),ut=Symbol.for("react.portal"),et=Symbol.for("react.fragment"),lt=Symbol.for("react.strict_mode"),y=Symbol.for("react.profiler"),R=Symbol.for("react.consumer"),$=Symbol.for("react.context"),M=Symbol.for("react.forward_ref"),H=Symbol.for("react.suspense"),ot=Symbol.for("react.suspense_list"),mt=Symbol.for("react.memo"),st=Symbol.for("react.lazy"),j=Symbol.for("react.activity"),h=Symbol.for("react.client.reference"),x=ct.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,O=Object.prototype.hasOwnProperty,S=Array.isArray,tt=console.createTask?console.createTask:function(){return null};ct={react_stack_bottom_frame:function(e){return e()}};var N,k={},a=ct.react_stack_bottom_frame.bind(ct,I)(),Q=tt(i(I)),P={};At.Fragment=et,At.jsx=function(e,p,E){var D=1e4>x.recentlyCreatedOwnerStacks++;return Z(e,p,E,!1,D?Error("react-stack-top-frame"):a,D?tt(i(e)):Q)},At.jsxs=function(e,p,E){var D=1e4>x.recentlyCreatedOwnerStacks++;return Z(e,p,E,!0,D?Error("react-stack-top-frame"):a,D?tt(i(e)):Q)}})()),At}var Nt;function qt(){return Nt||(Nt=1,process.env.NODE_ENV==="production"?Ct.exports=Zt():Ct.exports=Qt()),Ct.exports}var l=qt();const $t=520,te=()=>l.jsxs("svg",{width:"14",height:"16",viewBox:"0 0 14 16",fill:"currentColor","aria-hidden":"true",children:[l.jsx("rect",{x:"1",y:"0",width:"4",height:"16",rx:"1"}),l.jsx("rect",{x:"9",y:"0",width:"4",height:"16",rx:"1"})]}),Yt=()=>l.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:l.jsx("polyline",{points:"3,5 7,9 11,5"})}),zt=()=>l.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:l.jsx("polyline",{points:"3,9 7,5 11,9"})}),Wt=({currentTime:v,isPlaying:L,multiplier:J,dateTimeFormat:i,timezone:C,isLive:I,hasStartTime:B,hasEndTime:G,showJumpToStart:ft=!0,showJumpToEnd:U=!0,onPlayPause:Z,onJumpToStart:K,onRewind:F,onFastForward:ct,onJumpToEnd:q,onJumpToLive:ut,onResetSpeed:et,onDateTimeClick:lt,theme:y,swimLanesVisible:R,onToggleSwimLanes:$,labels:M})=>{const H=J<0,ot=J>1,mt=J===1,st=Math.abs(J),j=n.useMemo(()=>({...b.DEFAULT_LABELS,...M}),[M]),h=n.useRef(null),[x,O]=n.useState(!1);n.useEffect(()=>{const a=h.current;if(!a)return;const Q=new ResizeObserver(([P])=>{O(P.contentRect.width<$t)});return Q.observe(a),()=>Q.disconnect()},[]);const S={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},tt=a=>({...S,color:a?y.buttonActiveColor:y.buttonColor,borderColor:a?`${y.buttonActiveColor}33`:"transparent"}),N=(a,Q)=>{a.currentTarget.style.backgroundColor=Q?`${y.buttonActiveColor}22`:y.buttonHoverColor+"44"},k=a=>{a.currentTarget.style.backgroundColor="transparent"};return l.jsxs("div",{ref:h,style:{display:x?"flex":"grid",gridTemplateColumns:x?void 0:"1fr auto 1fr",alignItems:"center",padding:"6px 16px",backgroundColor:y.controlBarBackground,borderBottom:`1px solid ${y.controlBarBorder}`,fontFamily:"system-ui, -apple-system, sans-serif"},children:[l.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",flexShrink:0},children:[l.jsx("div",{onClick:lt,title:lt?j.dateTimeClickTooltip:void 0,style:{color:y.labelColor,fontFamily:"monospace",lineHeight:1.15,cursor:lt?"pointer":"default",borderRadius:"4px",padding:"2px 4px",transition:"background 0.15s"},onMouseEnter:a=>{lt&&(a.currentTarget.style.background=y.buttonHoverColor+"44")},onMouseLeave:a=>a.currentTarget.style.background="transparent",children:(()=>{const{timeFormat:a,dateFormat:Q}=b.splitForDisplay(i),P=b.getTimezoneAbbr(v,C);return l.jsxs(l.Fragment,{children:[a&&l.jsx("div",{style:{fontSize:"2em",fontWeight:"bold",letterSpacing:"0.02em"},children:b.formatDateTime(v,a,C)}),Q&&l.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[l.jsx("span",{style:{fontSize:"1.15em",letterSpacing:"0.03em",color:y.buttonActiveColor},children:b.formatDateTime(v,Q,C)}),P&&l.jsx("span",{style:{fontSize:"0.9em",color:y.labelColor,opacity:.7,fontWeight:"bold",letterSpacing:"0.04em"},children:P})]})]})})()}),l.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"2px",justifyContent:"center"},children:[l.jsx("button",{onClick:ut,style:{...S,fontSize:"11px",fontWeight:"bold",letterSpacing:"0.05em",width:"52px",minWidth:"52px",height:"20px",borderRadius:"3px",color:I?y.controlBarBackground:y.buttonActiveColor,backgroundColor:I?y.buttonActiveColor:"transparent",borderColor:y.buttonActiveColor,opacity:I?1:.55},onMouseEnter:a=>{a.currentTarget.style.opacity="1"},onMouseLeave:a=>{a.currentTarget.style.opacity=I?"1":"0.55"},title:I?j.liveActiveTooltip:j.liveTooltip,children:I?j.liveActiveLabel:j.liveLabel}),l.jsx("div",{style:{height:"20px",display:"flex",alignItems:"center"},children:!mt&&l.jsx("button",{onClick:()=>et(),style:{...S,fontSize:"11px",color:y.buttonActiveColor,borderColor:`${y.buttonActiveColor}44`,width:"52px",minWidth:"52px",height:"20px"},onMouseEnter:a=>N(a,!0),onMouseLeave:k,title:j.resetSpeedTooltip,children:H?`◀ ${st}×`:`${st}× ▶`})})]})]}),l.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"2px",...x?{flex:1,justifyContent:"center"}:{}},children:[ft&&l.jsx("button",{onClick:B?K:void 0,disabled:!B,style:{...tt(!1),opacity:B?1:.3,cursor:B?"pointer":"default"},onMouseEnter:B?a=>N(a,!1):void 0,onMouseLeave:B?k:void 0,title:B?j.jumpToStartTooltip:j.noStartTimeTooltip,children:"⏮"}),l.jsx("button",{onClick:F,style:{...tt(H),width:"64px",minWidth:"64px",gap:"3px"},onMouseEnter:a=>N(a,H),onMouseLeave:k,title:H?b.resolveLabel(j.rewindActiveTooltip,st):j.rewindTooltip,children:H?l.jsxs(l.Fragment,{children:[l.jsxs("span",{style:{fontSize:"11px",fontWeight:"bold"},children:[st,"×"]}),"◀◀"]}):"◀◀"}),l.jsx("button",{onClick:()=>Z(!L),style:{...S,color:y.buttonActiveColor,fontSize:"18px",width:"40px",minWidth:"40px",height:"40px",borderColor:`${y.buttonActiveColor}55`,borderRadius:"50%",paddingLeft:L?"0":"2px"},onMouseEnter:a=>N(a,!0),onMouseLeave:k,title:L?j.pauseTooltip:H?j.playFromRewindTooltip:j.playTooltip,children:L?l.jsx(te,{}):"▶"}),l.jsx("button",{onClick:ct,style:{...tt(ot),width:"64px",minWidth:"64px",gap:"3px"},onMouseEnter:a=>N(a,ot),onMouseLeave:k,title:ot?b.resolveLabel(j.fastForwardActiveTooltip,st):j.fastForwardTooltip,children:ot?l.jsxs(l.Fragment,{children:["▶▶",l.jsxs("span",{style:{fontSize:"11px",fontWeight:"bold"},children:[st,"×"]})]}):"▶▶"}),U&&l.jsx("button",{onClick:G?q:void 0,disabled:!G,style:{...tt(!1),opacity:G?1:.3,cursor:G?"pointer":"default"},onMouseEnter:G?a=>N(a,!1):void 0,onMouseLeave:G?k:void 0,title:G?j.jumpToEndTooltip:j.noEndTimeTooltip,children:"⏭"})]}),!x&&l.jsx("div",{style:{display:"flex",justifyContent:"flex-end",alignItems:"center"},children:$!=null&&R!=null&&l.jsx("button",{onClick:$,style:{...S,color:y.buttonActiveColor,borderColor:`${y.buttonActiveColor}33`},onMouseEnter:a=>N(a,R),onMouseLeave:k,title:R?j.collapseSwimLanesTooltip:j.expandSwimLanesTooltip,children:R?l.jsx(Yt,{}):l.jsx(zt,{})})}),x&&$!=null&&R!=null&&l.jsx("button",{onClick:$,style:{...S,color:y.buttonActiveColor,borderColor:`${y.buttonActiveColor}33`,marginLeft:"4px"},onMouseEnter:a=>N(a,R),onMouseLeave:k,title:R?j.collapseSwimLanesTooltip:j.expandSwimLanesTooltip,children:R?l.jsx(Yt,{}):l.jsx(zt,{})})]})},Pt=n.forwardRef((v,L)=>{const{currentTime:J,defaultStartMs:i,defaultEndMs:C,theme:I,maxTicks:B,timezone:G,dateTimeFormat:ft,months:U,onTimeChange:Z,onDragStart:K,onDragEnd:F,onRangeSelect:ct,swimLanes:q,showSwimLanes:ut,onSwimLaneItemClick:et,onSwimLaneItemHover:lt,onSwimLaneItemDoubleClick:y,onSwimLaneItemContextMenu:R,onSwimLaneReorder:$}=v,M=n.useRef(null),H=n.useRef(I),ot=n.useRef(B),mt=n.useRef(G),st=n.useRef(ft),j=n.useRef(U),h=n.useRef(i),x=n.useRef(C),O=n.useRef(T.JulianDate.toDate(J).getTime());n.useEffect(()=>{H.current=I},[I]),n.useEffect(()=>{ot.current=B},[B]),n.useEffect(()=>{mt.current=G,g()},[G]),n.useEffect(()=>{st.current=ft,g()},[ft]),n.useEffect(()=>{j.current=U,g()},[U]);const S=n.useRef(q??[]),tt=n.useRef(ut??(q!=null&&q.length>0)),N=n.useRef(0),k=n.useRef(null),a=n.useRef(null),Q=n.useRef(et),P=n.useRef(lt),e=n.useRef(y),p=n.useRef(R),E=n.useRef($);n.useEffect(()=>{Q.current=et},[et]),n.useEffect(()=>{P.current=lt},[lt]),n.useEffect(()=>{e.current=y},[y]),n.useEffect(()=>{p.current=R},[R]),n.useEffect(()=>{E.current=$},[$]),n.useEffect(()=>{S.current=q??[],g()},[q]),n.useEffect(()=>{tt.current=ut??(q!=null&&q.length>0),g()},[ut,q]);const D=n.useRef(null),rt=n.useRef(null),gt=n.useRef(!1),Y=n.useRef(0),A=n.useRef("none"),dt=n.useRef(0),Rt=n.useRef(0),kt=n.useRef(0),_t=n.useRef(0),Lt=n.useRef(0),xt=n.useRef(null),V=n.useRef(ct);n.useEffect(()=>{V.current=ct},[ct]);const pt=n.useRef("none"),vt=n.useRef(0),yt=n.useRef(0),jt=n.useRef(0),St=n.useRef(0),It=(t,r)=>Math.hypot(r.clientX-t.clientX,r.clientY-t.clientY),bt=n.useCallback(()=>({startMs:h.current,endMs:x.current,currentMs:O.current,theme:H.current,maxTicks:ot.current,timezone:mt.current,use12h:/h/.test(st.current??""),months:j.current,swimLanes:S.current,showSwimLanes:tt.current,scrollTop:N.current,reorderState:a.current,rangeSelection:xt.current}),[]);n.useImperativeHandle(L,()=>({zoomTo(t,r,o){const d=Math.max(b.MIN_SPAN_MS,Math.min(b.MAX_SPAN_MS,r-t)),s=(t+r)/2;h.current=s-d/2,x.current=s+d/2,o!==void 0&&(O.current=o),g()},getVisibleRange(){return{startMs:h.current,endMs:x.current}},startFollow(t){if(Y.current=t,rt.current!==null)return;gt.current=!0;let r=performance.now();const o=()=>{const d=performance.now(),s=d-r;r=d;const c=s*Y.current;h.current+=c,x.current+=c,O.current+=c,g(),rt.current=requestAnimationFrame(o)};rt.current=requestAnimationFrame(o)},stopFollow(){gt.current=!1,rt.current!==null&&(cancelAnimationFrame(rt.current),rt.current=null)},correctFollow(t){if(!gt.current)return;const r=t-O.current;O.current=t,h.current+=r,x.current+=r},appendSwimLane(t){S.current=[...S.current,t],g()},updateSwimLane(t,r){S.current=S.current.map(o=>o.id===t?{...o,...r,id:o.id}:o),g()},removeSwimLane(t){S.current=S.current.filter(r=>r.id!==t),g()},reorderSwimLanes(t){const r=new Map(S.current.map(d=>[d.id,d])),o=[];for(const d of t){const s=r.get(d);s&&o.push(s)}S.current=o,g()}}));const g=n.useCallback(()=>{const t=M.current;if(!t)return;const r=t.getContext("2d");if(!r)return;const o=t.getBoundingClientRect(),d=o.width,s=o.height;if(d===0||s===0)return;const c=window.devicePixelRatio||1,m=Math.round(d*c),f=Math.round(s*c);(t.width!==m||t.height!==f)&&(t.width=m,t.height=f),r.save(),r.scale(c,c);const w=b.drawTimeline(r,d,s,bt());w!==N.current&&(N.current=w),r.restore()},[bt]);n.useLayoutEffect(()=>{g();const t=M.current;if(!t)return;const r=new ResizeObserver(()=>g());return r.observe(t),()=>r.disconnect()},[g]),n.useEffect(()=>{if(gt.current)return;const t=T.JulianDate.toDate(J).getTime();O.current!==t&&(O.current=t,g())},[J,g]);const Et=n.useCallback(t=>{if(D.current!==null)return;const r=()=>{const o=M.current,d=x.current-h.current,s=t*d*.01;if(h.current+=s,x.current+=s,o){const c=o.getBoundingClientRect(),m=Math.max(0,Math.min(c.width,Rt.current-c.left)),f=h.current+m/c.width*(x.current-h.current);O.current=f,Z(T.JulianDate.fromDate(new Date(f)))}g(),D.current=requestAnimationFrame(r)};D.current=requestAnimationFrame(r)},[g,Z]),wt=n.useCallback(()=>{D.current!==null&&(cancelAnimationFrame(D.current),D.current=null)},[]),u=n.useCallback((t,r,o,d)=>b.hitTestSwimLane(t,r,o,d,bt()),[bt]),_=n.useCallback((t,r,o)=>b.hitTestLaneLabel(t,r,o,bt()),[bt]),X=n.useCallback((t,r)=>b.isInSwimLaneRegion(t,r,bt()),[bt]),it=n.useCallback(t=>{t.preventDefault();const r=t.currentTarget.getBoundingClientRect(),o=t.clientX-r.left,d=t.clientY-r.top;if(t.button===0&&E.current){const s=_(o,d,r.height);if(s){const m=S.current.findIndex(f=>f.id===s.id);a.current={dragging:!0,dragLaneId:s.id,dragStartY:t.clientY,currentY:t.clientY,insertIndex:m},t.currentTarget.style.cursor="grabbing";return}}if(t.button===0&&X(d,r.height)){const s=(O.current-h.current)/(x.current-h.current)*r.width;if(!(Math.abs(o-s)<=10)&&u(o,d,r.width,r.height)){kt.current=performance.now();return}}if(t.button===0){const s=(O.current-h.current)/(x.current-h.current)*r.width,c=Math.abs(o-s)<=10,m=d>=r.height-b.TICK_AREA_HEIGHT;if(!c&&m)A.current="rangeSelectPending",Lt.current=o,_t.current=h.current+o/r.width*(x.current-h.current),t.currentTarget.style.cursor="crosshair",K==null||K();else{A.current="scrub",Rt.current=t.clientX,t.currentTarget.style.cursor="grabbing",K==null||K();const f=h.current+o/r.width*(x.current-h.current);O.current=f,g(),Z(T.JulianDate.fromDate(new Date(f)))}}else if(t.button===1)A.current="slide",dt.current=t.clientX;else if(t.button===2){if(p.current&&X(d,r.height))return;A.current="zoom",dt.current=t.clientX}},[g,Z,K,_,X,u]);n.useEffect(()=>{const t=o=>{const d=a.current;if(d&&d.dragging){d.currentY=o.clientY;const f=M.current;if(f){const w=f.getBoundingClientRect(),W=o.clientY-w.top;let Tt=-N.current;const Ft=S.current;let Gt=Ft.length;for(let Ot=0;Ot<Ft.length;Ot++){const Ut=Ft[Ot].height??b.DEFAULT_LANE_HEIGHT,ce=Tt+Ut/2;if(W<ce){Gt=Ot;break}Tt+=Ut+b.LANE_GAP}d.insertIndex=Gt}g();return}if(A.current==="none")return;const s=M.current;if(!s)return;const c=s.getBoundingClientRect(),m=c.width;if(A.current==="scrub"){Rt.current=o.clientX;const f=o.clientX-c.left,w=m*.08;f<w?Et(-1):f>m-w?Et(1):wt();const W=Math.max(0,Math.min(m,f)),ht=h.current+W/m*(x.current-h.current);O.current=ht,g(),Z(T.JulianDate.fromDate(new Date(ht)))}else if(A.current==="rangeSelectPending"||A.current==="rangeSelect"){const f=o.clientX-c.left,w=Math.abs(f-Lt.current);if(A.current==="rangeSelectPending"&&w>=3&&(A.current="rangeSelect"),A.current==="rangeSelect"){const W=Math.max(0,Math.min(m,f)),ht=h.current+W/m*(x.current-h.current);xt.current={startMs:_t.current,endMs:ht},g()}}else if(A.current==="slide"){const f=dt.current-o.clientX;if(dt.current=o.clientX,f!==0){const w=f/m*(x.current-h.current);h.current+=w,x.current+=w,g()}}else if(A.current==="zoom"){const f=dt.current-o.clientX;dt.current=o.clientX,f!==0&&z(Math.pow(1.01,f))}},r=()=>{var d,s;const o=a.current;if(o&&o.dragging){const c=Math.abs(o.currentY-o.dragStartY),m=S.current,f=m.findIndex(w=>w.id===o.dragLaneId);if(c>5&&f>=0&&o.insertIndex!==f&&o.insertIndex!==f+1){const w=[...m],[W]=w.splice(f,1),ht=o.insertIndex>f?o.insertIndex-1:o.insertIndex;w.splice(ht,0,W),S.current=w,(d=E.current)==null||d.call(E,w.map(Tt=>Tt.id))}a.current=null,M.current&&(M.current.style.cursor="default"),g();return}if(wt(),A.current==="rangeSelectPending"){O.current=_t.current,xt.current=null,A.current="none",M.current&&(M.current.style.cursor="default"),g(),Z(T.JulianDate.fromDate(new Date(_t.current))),F==null||F();return}if(A.current==="rangeSelect"){const c=xt.current;if(xt.current=null,c){const m=Math.min(c.startMs,c.endMs),f=Math.max(c.startMs,c.endMs);h.current=m,x.current=f;const w=T.JulianDate.fromDate(new Date(m)),W=T.JulianDate.fromDate(new Date(f));(s=V.current)==null||s.call(V,w,W)}A.current="none",M.current&&(M.current.style.cursor="default"),g(),F==null||F();return}A.current="none",M.current&&(M.current.style.cursor="default"),F==null||F()};return document.addEventListener("mousemove",t),document.addEventListener("mouseup",r),()=>{document.removeEventListener("mousemove",t),document.removeEventListener("mouseup",r)}},[g,Z,F,Et,wt]);const z=n.useCallback(t=>{const r=b.zoomRange(h.current,x.current,t);h.current=r.startMs,x.current=r.endMs,g()},[g]),nt=n.useCallback(t=>{t.preventDefault();const r=M.current;if(!r)return;const o=r.getBoundingClientRect(),d=t.clientY-o.top,s=tt.current,c=S.current;if(s&&c.length>0){const m=Math.max(0,o.height-b.TICK_AREA_HEIGHT);if(d>=0&&d<m){let f=0;for(const W of c)f+=(W.height??b.DEFAULT_LANE_HEIGHT)+b.LANE_GAP;const w=Math.max(0,f-m);if(w>0){N.current=Math.max(0,Math.min(w,N.current+t.deltaY*b.SWIM_LANE_SCROLL_SPEED)),g();return}}}z(Math.pow(1.05,t.deltaY>0?-1:1))},[z,g]);n.useEffect(()=>{const t=M.current;if(t)return t.addEventListener("wheel",nt,{passive:!1}),()=>t.removeEventListener("wheel",nt)},[nt]),n.useEffect(()=>{const t=M.current;if(!t)return;const r=s=>{s.preventDefault();const c=t.getBoundingClientRect();if(s.touches.length===1){const m=s.touches[0].clientX-c.left,f=Math.max(0,Math.min(c.width,m)),w=h.current+f/c.width*(x.current-h.current);St.current=O.current,pt.current="scrub",vt.current=s.touches[0].clientX,Rt.current=s.touches[0].clientX,O.current=w,g(),K==null||K(),Z(T.JulianDate.fromDate(new Date(w)))}else s.touches.length>=2&&(pt.current==="scrub"&&(O.current=St.current,g(),Z(T.JulianDate.fromDate(new Date(St.current)))),pt.current="pinch",yt.current=It(s.touches[0],s.touches[1]),jt.current=(s.touches[0].clientX+s.touches[1].clientX)/2-c.left)},o=s=>{s.preventDefault();const c=t.getBoundingClientRect();if(pt.current==="scrub"&&s.touches.length>=1){const m=s.touches[0].clientX-c.left,f=c.width*.08;if(Rt.current=s.touches[0].clientX,m<f)Et(-1);else if(m>c.width-f)Et(1);else{wt();const w=Math.max(0,Math.min(c.width,m)),W=h.current+w/c.width*(x.current-h.current);O.current=W,g(),Z(T.JulianDate.fromDate(new Date(W)))}}else if(pt.current==="slide"&&s.touches.length>=1){const m=vt.current-s.touches[0].clientX;if(vt.current=s.touches[0].clientX,m!==0){const f=m/c.width*(x.current-h.current);h.current+=f,x.current+=f,g()}}else if(pt.current==="pinch"&&s.touches.length>=2){const m=It(s.touches[0],s.touches[1]),f=(s.touches[0].clientX+s.touches[1].clientX)/2-c.left;if(m>0&&yt.current>0){const w=h.current+jt.current/c.width*(x.current-h.current),W=b.zoomAroundMs(h.current,x.current,yt.current/m,w);h.current=W.startMs,x.current=W.endMs,g()}yt.current=m,jt.current=f}},d=s=>{wt(),pt.current==="scrub"&&(F==null||F()),s.touches.length===0?pt.current="none":s.touches.length===1&&(pt.current="slide",vt.current=s.touches[0].clientX)};return t.addEventListener("touchstart",r,{passive:!1}),t.addEventListener("touchmove",o,{passive:!1}),t.addEventListener("touchend",d,{passive:!1}),()=>{t.removeEventListener("touchstart",r),t.removeEventListener("touchmove",o),t.removeEventListener("touchend",d)}},[g,K,F,Z,z,Et,wt]);const Mt=n.useCallback(t=>{var m,f,w;if(A.current!=="none")return;const r=t.currentTarget.getBoundingClientRect(),o=t.clientX-r.left,d=t.clientY-r.top,s=(O.current-h.current)/(x.current-h.current)*r.width,c=Math.abs(o-s)<=10;if(X(d,r.height)){const W=u(o,d,r.width,r.height),ht=k.current;if(W)t.currentTarget.style.cursor=c?"grab":"pointer",(!ht||ht.item.id!==W.item.id||ht.lane.id!==W.lane.id)&&(k.current=W,(m=P.current)==null||m.call(P,{laneId:W.lane.id,item:W.item,originalEvent:t.nativeEvent}),g());else if(ht&&(k.current=null,(f=P.current)==null||f.call(P,null),g()),c)t.currentTarget.style.cursor="grab";else{const Tt=_(o,d,r.height);t.currentTarget.style.cursor=Tt&&E.current?"grab":"default"}return}k.current&&(k.current=null,(w=P.current)==null||w.call(P,null),g()),c?t.currentTarget.style.cursor="grab":d>=r.height-b.TICK_AREA_HEIGHT?t.currentTarget.style.cursor="crosshair":t.currentTarget.style.cursor="default"},[g,u,X,_]),re=n.useCallback(t=>{var m;if(performance.now()-kt.current>300)return;const o=t.currentTarget.getBoundingClientRect(),d=t.clientX-o.left,s=t.clientY-o.top,c=u(d,s,o.width,o.height);c&&((m=Q.current)==null||m.call(Q,{laneId:c.lane.id,item:c.item,originalEvent:t.nativeEvent}))},[u]),oe=n.useCallback(t=>{var c;const r=t.currentTarget.getBoundingClientRect(),o=t.clientX-r.left,d=t.clientY-r.top,s=u(o,d,r.width,r.height);s&&((c=e.current)==null||c.call(e,{laneId:s.lane.id,item:s.item,originalEvent:t.nativeEvent}))},[u]),se=n.useCallback(t=>{const r=t.currentTarget.getBoundingClientRect(),o=t.clientX-r.left,d=t.clientY-r.top,s=u(o,d,r.width,r.height);s&&p.current?(t.preventDefault(),p.current({laneId:s.lane.id,item:s.item,originalEvent:t.nativeEvent})):t.preventDefault()},[u]);return n.useEffect(()=>()=>{D.current!==null&&cancelAnimationFrame(D.current),rt.current!==null&&cancelAnimationFrame(rt.current)},[]),l.jsx("canvas",{ref:M,style:{width:"100%",flex:1,minHeight:0,display:"block",cursor:"default"},onMouseDown:it,onMouseMove:Mt,onClick:re,onDoubleClick:oe,onMouseLeave:()=>{var t;k.current&&(k.current=null,(t=P.current)==null||t.call(P,null),g()),A.current==="none"&&M.current&&(M.current.style.cursor="default")},onContextMenu:se})});Pt.displayName="TimelineCanvas";const Bt=[2,4,8,16,32,100,1],Ht=[1,2,4,8,16,32,100],ee=({startTime:v,endTime:L,currentTime:J,clock:i,onTimeChange:C,onPlayPause:I,onMultiplierChange:B,height:G,showControls:ft=!0,showJumpToStart:U,showJumpToEnd:Z,enableDrag:K=!0,dateTimeFormat:F,onDateTimeClick:ct,jumpToTime:q,maxTicks:ut,ffSpeeds:et=Bt,rwSpeeds:lt=Ht,theme:y,className:R,timezone:$,swimLanes:M,showSwimLanes:H,onShowSwimLanesChange:ot,swimLaneTransition:mt="animated",onSwimLaneItemClick:st,onSwimLaneItemHover:j,onSwimLaneItemDoubleClick:h,onSwimLaneItemContextMenu:x,onSwimLaneReorder:O,onRangeSelect:S,labels:tt})=>{const N=()=>Date.now(),k=v?T.JulianDate.toDate(b.toJulianDate(v)).getTime():N()-432e5,a=L?T.JulianDate.toDate(b.toJulianDate(L)).getTime():N()+12*3600*1e3,[Q,P]=n.useState(()=>b.toJulianDate(J??v??T.JulianDate.fromDate(new Date))),[e,p]=n.useState((i==null?void 0:i.shouldAnimate)??!1),[E,D]=n.useState((i==null?void 0:i.multiplier)??1),[rt,gt]=n.useState(H??!0);n.useEffect(()=>{H!=null&&gt(H)},[H]);const Y=()=>{const u=!rt;gt(u),ot==null||ot(u)},A=M!=null&&M.length>0,dt=n.useRef(null),[Rt,kt]=n.useState(0);n.useEffect(()=>{const u=dt.current;if(!u)return;const _=new ResizeObserver(([X])=>kt(X.borderBoxSize[0].blockSize));return _.observe(u),()=>_.disconnect()},[ft]);const Lt=A&&!rt?`${Rt+b.TICK_AREA_HEIGHT}px`:G!=null?`${G}px`:"100%",xt=n.useRef(!1),V=n.useRef(null),pt={...b.defaultTheme,...y};n.useEffect(()=>{if(!i)return;const u=()=>{if(!xt.current){const _=T.JulianDate.clone(i.currentTime);if(P(_),p(i.shouldAnimate),D(i.multiplier),V.current){const{startMs:X,endMs:it}=V.current.getVisibleRange(),z=it-X,nt=T.JulianDate.toDate(_).getTime(),Mt=nt-X;Mt<=z*.1?V.current.zoomTo(nt-z*.1,nt+z*.9,nt):Mt>=z*.9&&V.current.zoomTo(nt-z*.9,nt+z*.1,nt)}}};return i.onTick.addEventListener(u),()=>{i.onTick.removeEventListener(u)}},[i]),n.useEffect(()=>{if(i)return;const u=setInterval(()=>{if(xt.current)return;const _=T.JulianDate.fromDate(new Date);if(P(_),V.current){const{startMs:X,endMs:it}=V.current.getVisibleRange(),z=it-X,nt=T.JulianDate.toDate(_).getTime(),Mt=nt-X;Mt<=z*.1?V.current.zoomTo(nt-z*.1,nt+z*.9,nt):Mt>=z*.9&&V.current.zoomTo(nt-z*.9,nt+z*.1,nt)}},1e3);return()=>clearInterval(u)},[i]),n.useEffect(()=>{if(!q)return;const u=b.toJulianDate(q);if(yt(u),V.current){const{startMs:_,endMs:X}=V.current.getVisibleRange(),it=X-_,z=T.JulianDate.toDate(u).getTime();V.current.zoomTo(z-it/2,z+it/2)}},[q]);const vt=(u,_=!0)=>{i&&(i.multiplier=u,_&&(i.shouldAnimate=!0)),D(u),_&&p(!0),B==null||B(u)},yt=u=>{P(u),i&&(i.currentTime=T.JulianDate.clone(u)),C==null||C(u)},jt=u=>{u&&E<0&&vt(1,!1),i&&(i.shouldAnimate=u),p(u),I==null||I(u)},St=()=>{const u=et.length>0?et:Bt,_=E>1?E:1,X=u.indexOf(_),it=u[X<0||X===u.length-1?0:X+1];vt(it)},It=()=>{const u=lt.length>0?lt:Ht,_=E<0?Math.abs(E):0,X=u.indexOf(_),it=-u[X<0||X===u.length-1?0:X+1];vt(it)},bt=()=>{var _;const u=b.toJulianDate(v??T.JulianDate.fromDate(new Date(k)));i&&(i.currentTime=T.JulianDate.clone(u)),P(u),(_=V.current)==null||_.zoomTo(k,a)},g=()=>{var _;const u=b.toJulianDate(L??T.JulianDate.fromDate(new Date(a)));i&&(i.currentTime=T.JulianDate.clone(u)),P(u),(_=V.current)==null||_.zoomTo(k,a)},Et=()=>{const u=T.JulianDate.fromDate(new Date);i&&(i.currentTime=T.JulianDate.clone(u)),P(u),vt(1);const _=Date.now();if(V.current){const{startMs:X,endMs:it}=V.current.getVisibleRange(),z=it-X;V.current.zoomTo(_-z/2,_+z/2)}},wt=Math.abs(T.JulianDate.toDate(Q).getTime()-Date.now())<1e4;return l.jsxs("div",{className:R,style:{width:"100%",height:Lt,overflow:"hidden",display:"flex",flexDirection:"column",fontFamily:"system-ui, -apple-system, sans-serif",transition:mt==="animated"?"height 0.2s ease":void 0},children:[ft&&l.jsx("div",{ref:dt,children:l.jsx(Wt,{currentTime:Q,isPlaying:e,multiplier:E,isLive:wt,hasStartTime:v!=null,hasEndTime:L!=null,showJumpToStart:U,showJumpToEnd:Z,onPlayPause:jt,onJumpToStart:bt,onRewind:It,onFastForward:St,onJumpToEnd:g,onJumpToLive:Et,onResetSpeed:()=>vt(1),onDateTimeClick:ct,dateTimeFormat:F,timezone:$,theme:pt,swimLanesVisible:A?rt:void 0,onToggleSwimLanes:A?Y:void 0,labels:tt})}),K!==!1&&l.jsx(Pt,{ref:V,currentTime:Q,defaultStartMs:k,defaultEndMs:a,theme:pt,maxTicks:ut,timezone:$,dateTimeFormat:F,months:tt==null?void 0:tt.months,onTimeChange:yt,onDragStart:()=>{xt.current=!0},onDragEnd:()=>{xt.current=!1},swimLanes:M,showSwimLanes:rt,onSwimLaneItemClick:st,onSwimLaneItemHover:j,onSwimLaneItemDoubleClick:h,onSwimLaneItemContextMenu:x,onSwimLaneReorder:O,onRangeSelect:S})]})},ne=({startTime:v,endTime:L,currentTime:J,width:i,height:C,tickInterval:I,showLabels:B,snapToTicks:G,enableDrag:ft,theme:U,onTimeChange:Z,onVisibleRangeChange:K,onDragStart:F,onDragEnd:ct})=>{const q=n.useMemo(()=>b.generateTicks(v,L,I,i),[v,L,I,i]),ut=n.useMemo(()=>b.timeToPosition(J,v,L,i),[J,v,L,i]),et=n.useRef(null),lt=R=>{if(!ft)return;const $=R.currentTarget.getBoundingClientRect(),M=R.clientX-$.left,H=Math.max(0,Math.min(i,M));if(!(Math.abs(H-ut)<=10)){let k=H;G&&(k=b.snapToTick(H,q,10));const a=new Date(v).getTime(),Q=new Date(L).getTime();Z(T.JulianDate.fromDate(new Date(a+k/i*(Q-a))));return}F==null||F();const mt=R.clientX,st=new Date(J).getTime(),j=new Date(v).getTime(),x=(new Date(L).getTime()-j)/i;let O=0,S=!1;const tt=k=>{O=k.clientX-mt,S=!0,et.current||(et.current=requestAnimationFrame(()=>{if(S){const a=st+O*x;Z(T.JulianDate.fromDate(new Date(a))),S=!1}et.current=null}))},N=()=>{document.removeEventListener("mousemove",tt),document.removeEventListener("mouseup",N),et.current!==null&&(cancelAnimationFrame(et.current),et.current=null),ct==null||ct()};document.addEventListener("mousemove",tt),document.addEventListener("mouseup",N)},y=R=>{R.preventDefault();const $=R.shiftKey?R.deltaY:R.deltaX!==0?R.deltaX:R.deltaY;if(Math.abs($)<1)return;const M=new Date(v).getTime(),H=new Date(L).getTime(),ot=$/i*(H-M)*.5;K==null||K(T.JulianDate.fromDate(new Date(M+ot)),T.JulianDate.fromDate(new Date(H+ot)))};return l.jsxs("svg",{width:"100%",height:C,style:{backgroundColor:U.backgroundColor,display:"block",cursor:"default"},onMouseDown:lt,onWheel:y,children:[l.jsx("rect",{width:i,height:C,fill:U.backgroundColor}),q.map((R,$)=>l.jsxs("g",{children:[l.jsx("line",{x1:R.position,y1:C-(R.isMajor?U.majorTickHeight:U.minorTickHeight),x2:R.position,y2:C,stroke:R.isMajor?U.majorTickColor:U.tickColor,strokeWidth:"1"}),B&&R.isMajor&&R.label&&l.jsx("text",{x:R.position,y:C-U.majorTickHeight-5,textAnchor:"middle",fill:U.labelColor,fontSize:U.fontSize,fontFamily:"monospace",children:R.label})]},$)),l.jsx("line",{x1:ut,y1:0,x2:ut,y2:C,stroke:U.indicatorColor,strokeWidth:U.indicatorLineWidth,pointerEvents:"none"}),ft&&l.jsx("rect",{x:Math.max(0,ut-10),y:0,width:20,height:C,fill:"transparent",style:{cursor:"ew-resize"},pointerEvents:"visiblePainted"}),l.jsx("circle",{cx:ut,cy:5,r:4,fill:U.indicatorColor,pointerEvents:"none"})]})};Object.defineProperty(at,"TICK_AREA_HEIGHT",{enumerable:!0,get:()=>b.TICK_AREA_HEIGHT}),at.Timeline=ee,at.TimelineCanvas=Pt,at.TimelineControls=Wt,at.TimelineSVG=ne,Object.keys(b).forEach(v=>{v!=="default"&&!Object.prototype.hasOwnProperty.call(at,v)&&Object.defineProperty(at,v,{enumerable:!0,get:()=>b[v]})}),Object.defineProperty(at,Symbol.toStringTag,{value:"Module"})}));
22
+ <%s key={someKey} {...props} />`,b,D,Q,D),Y[D+b]=!0)}if(D=null,a!==void 0&&(I(a),D=""+a),z(l)&&(I(l.key),D=""+l.key),"key"in l){a={};for(var et in l)et!=="key"&&(a[et]=l[et])}else a=l;return D&&X(a,typeof t=="function"?t.displayName||t.name||"Unknown":t),J(t,D,a,j(),it,gt)}function ut(t){nt(t)?t._store&&(t._store.validated=1):typeof t=="object"&&t!==null&&t.$$typeof===$&&(t._payload.status==="fulfilled"?nt(t._payload.value)&&t._payload.value._store&&(t._payload.value._store.validated=1):t._store&&(t._store.validated=1))}function nt(t){return typeof t=="object"&&t!==null&&t.$$typeof===W}var lt=n,W=Symbol.for("react.transitional.element"),st=Symbol.for("react.portal"),G=Symbol.for("react.fragment"),ct=Symbol.for("react.strict_mode"),M=Symbol.for("react.profiler"),E=Symbol.for("react.consumer"),B=Symbol.for("react.context"),q=Symbol.for("react.forward_ref"),U=Symbol.for("react.suspense"),A=Symbol.for("react.suspense_list"),_=Symbol.for("react.memo"),$=Symbol.for("react.lazy"),ht=Symbol.for("react.activity"),wt=Symbol.for("react.client.reference"),tt=lt.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,c=Object.prototype.hasOwnProperty,v=Array.isArray,w=console.createTask?console.createTask:function(){return null};lt={react_stack_bottom_frame:function(t){return t()}};var rt,V={},y=lt.react_stack_bottom_frame.bind(lt,L)(),K=w(g(L)),Y={};_t.Fragment=G,_t.jsx=function(t,l,a){var b=1e4>tt.recentlyCreatedOwnerStacks++;return N(t,l,a,!1,b?Error("react-stack-top-frame"):y,b?w(g(t)):K)},_t.jsxs=function(t,l,a){var b=1e4>tt.recentlyCreatedOwnerStacks++;return N(t,l,a,!0,b?Error("react-stack-top-frame"):y,b?w(g(t)):K)}})()),_t}var Wt;function re(){return Wt||(Wt=1,process.env.NODE_ENV==="production"?It.exports=ee():It.exports=ne()),It.exports}var h=re();const oe=520,se=()=>h.jsxs("svg",{width:"14",height:"16",viewBox:"0 0 14 16",fill:"currentColor","aria-hidden":"true",children:[h.jsx("rect",{x:"1",y:"0",width:"4",height:"16",rx:"1"}),h.jsx("rect",{x:"9",y:"0",width:"4",height:"16",rx:"1"})]}),Bt=()=>h.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:h.jsx("polyline",{points:"3,5 7,9 11,5"})}),Gt=()=>h.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:h.jsx("polyline",{points:"3,9 7,5 11,9"})}),ce={sm:{width:44,height:18,fontSize:"10px",dot:5,borderRadius:"3px"},md:{width:56,height:22,fontSize:"11px",dot:6,borderRadius:"3px"},lg:{width:72,height:30,fontSize:"13px",dot:8,borderRadius:"4px"}},Ut=({currentTime:x,isPlaying:S,multiplier:I,dateTimeFormat:g,timezone:j,isLive:L,hasStartTime:z,hasEndTime:X,showJumpToStart:dt=!0,showJumpToEnd:J=!0,onPlayPause:N,onJumpToStart:ut,onRewind:nt,onFastForward:lt,onJumpToEnd:W,onJumpToLive:st,onResetSpeed:G,onDateTimeClick:ct,theme:M,swimLanesVisible:E,onToggleSwimLanes:B,labels:q,liveButtonSize:U="md",liveButtonPosition:A="left",live:_=!1})=>{const $=I<0,ht=I>1,wt=I===1,tt=Math.abs(I),c=n.useMemo(()=>({...R.DEFAULT_LABELS,...q}),[q]),v=n.useRef(null),[w,rt]=n.useState(!1);n.useEffect(()=>{const a=v.current;if(!a)return;const b=new ResizeObserver(([it])=>{rt(it.contentRect.width<oe)});return b.observe(a),()=>b.disconnect()},[]);const V={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},y=a=>({...V,color:a?M.buttonActiveColor:M.buttonColor,borderColor:a?`${M.buttonActiveColor}33`:"transparent"}),K=(a,b)=>{a.currentTarget.style.backgroundColor=b?`${M.buttonActiveColor}22`:M.buttonHoverColor+"44"},Y=a=>{a.currentTarget.style.backgroundColor="transparent"},t=ce[U],l=h.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[h.jsxs("button",{onClick:_?void 0:st,style:{...V,fontSize:t.fontSize,fontWeight:"bold",letterSpacing:"0.05em",width:`${t.width}px`,minWidth:`${t.width}px`,height:`${t.height}px`,borderRadius:t.borderRadius,color:_||L?M.controlBarBackground:M.buttonActiveColor,backgroundColor:_||L?M.buttonActiveColor:"transparent",borderColor:M.buttonActiveColor,opacity:1,gap:"4px",cursor:_?"default":"pointer"},onMouseEnter:_?void 0:(a=>{a.currentTarget.style.opacity="1"}),onMouseLeave:_?void 0:(a=>{a.currentTarget.style.opacity=L?"1":"0.55"}),title:_||L?c.liveActiveTooltip:c.liveTooltip,children:[(_||L)&&h.jsx("span",{style:{width:`${t.dot}px`,height:`${t.dot}px`,borderRadius:"50%",backgroundColor:M.liveDotColor,display:"inline-block",flexShrink:0}}),_||L?c.liveActiveLabel:c.liveLabel]}),!wt&&!_&&h.jsx("button",{onClick:()=>G(),style:{...V,fontSize:"11px",color:M.buttonActiveColor,borderColor:`${M.buttonActiveColor}44`,width:`${t.width}px`,minWidth:`${t.width}px`,height:`${t.height}px`},onMouseEnter:a=>K(a,!0),onMouseLeave:Y,title:c.resetSpeedTooltip,children:$?`◀ ${tt}×`:`${tt}× ▶`})]});return h.jsxs("div",{ref:v,style:{display:w?"flex":"grid",gridTemplateColumns:w?void 0:"1fr auto 1fr",alignItems:"center",padding:"6px 16px",backgroundColor:M.controlBarBackground,borderBottom:`1px solid ${M.controlBarBorder}`,fontFamily:"system-ui, -apple-system, sans-serif"},children:[h.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",flexShrink:0},children:[h.jsx("div",{onClick:_?void 0:ct,title:!_&&ct?c.dateTimeClickTooltip:void 0,style:{color:M.labelColor,fontFamily:"monospace",lineHeight:1.15,cursor:!_&&ct?"pointer":"default",borderRadius:"4px",padding:"2px 4px",transition:"background 0.15s"},onMouseEnter:a=>{!_&&ct&&(a.currentTarget.style.background=M.buttonHoverColor+"44")},onMouseLeave:a=>a.currentTarget.style.background="transparent",children:(()=>{const{timeFormat:a,dateFormat:b}=R.splitForDisplay(g),it=R.getTimezoneAbbr(x,j);return h.jsxs(h.Fragment,{children:[a&&h.jsx("div",{style:{fontSize:"2em",fontWeight:"bold",letterSpacing:"0.02em"},children:R.formatDateTime(x,a,j)}),b&&h.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[h.jsx("span",{style:{fontSize:"1.15em",letterSpacing:"0.03em",color:M.buttonActiveColor},children:R.formatDateTime(x,b,j)}),it&&h.jsx("span",{style:{fontSize:"0.9em",color:M.labelColor,opacity:.7,fontWeight:"bold",letterSpacing:"0.04em"},children:it})]})]})})()}),A==="left"&&l]}),h.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"2px",...w?{flex:1,justifyContent:"center"}:{}},children:[!_&&dt&&h.jsx("button",{onClick:z?ut:void 0,disabled:!z,style:{...y(!1),opacity:z?1:.3,cursor:z?"pointer":"default"},onMouseEnter:z?a=>K(a,!1):void 0,onMouseLeave:z?Y:void 0,title:z?c.jumpToStartTooltip:c.noStartTimeTooltip,children:"⏮"}),!_&&h.jsx("button",{onClick:nt,style:{...y($),width:"64px",minWidth:"64px",gap:"3px"},onMouseEnter:a=>K(a,$),onMouseLeave:Y,title:$?R.resolveLabel(c.rewindActiveTooltip,tt):c.rewindTooltip,children:$?h.jsxs(h.Fragment,{children:[h.jsxs("span",{style:{fontSize:"11px",fontWeight:"bold"},children:[tt,"×"]}),"◀◀"]}):"◀◀"}),!_&&h.jsx("button",{onClick:()=>N(!S),style:{...V,color:M.buttonActiveColor,fontSize:"18px",width:"40px",minWidth:"40px",height:"40px",borderColor:`${M.buttonActiveColor}55`,borderRadius:"50%",paddingLeft:S?"0":"2px"},onMouseEnter:a=>K(a,!0),onMouseLeave:Y,title:S?c.pauseTooltip:$?c.playFromRewindTooltip:c.playTooltip,children:S?h.jsx(se,{}):"▶"}),!_&&h.jsx("button",{onClick:lt,style:{...y(ht),width:"64px",minWidth:"64px",gap:"3px"},onMouseEnter:a=>K(a,ht),onMouseLeave:Y,title:ht?R.resolveLabel(c.fastForwardActiveTooltip,tt):c.fastForwardTooltip,children:ht?h.jsxs(h.Fragment,{children:["▶▶",h.jsxs("span",{style:{fontSize:"11px",fontWeight:"bold"},children:[tt,"×"]})]}):"▶▶"}),!_&&J&&h.jsx("button",{onClick:X?W:void 0,disabled:!X,style:{...y(!1),opacity:X?1:.3,cursor:X?"pointer":"default"},onMouseEnter:X?a=>K(a,!1):void 0,onMouseLeave:X?Y:void 0,title:X?c.jumpToEndTooltip:c.noEndTimeTooltip,children:"⏭"})]}),!w&&h.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",alignItems:"center",gap:"8px"},children:[A==="right"&&l,B!=null&&E!=null&&h.jsx("button",{onClick:B,style:{...V,color:M.buttonActiveColor,borderColor:`${M.buttonActiveColor}33`},onMouseEnter:a=>K(a,E),onMouseLeave:Y,title:E?c.collapseSwimLanesTooltip:c.expandSwimLanesTooltip,children:E?h.jsx(Bt,{}):h.jsx(Gt,{})})]}),w&&B!=null&&E!=null&&h.jsx("button",{onClick:B,style:{...V,color:M.buttonActiveColor,borderColor:`${M.buttonActiveColor}33`,marginLeft:"4px"},onMouseEnter:a=>K(a,E),onMouseLeave:Y,title:E?c.collapseSwimLanesTooltip:c.expandSwimLanesTooltip,children:E?h.jsx(Bt,{}):h.jsx(Gt,{})})]})},Nt=n.forwardRef((x,S)=>{const{currentTime:I,defaultStartMs:g,defaultEndMs:j,theme:L,maxTicks:z,timezone:X,dateTimeFormat:dt,months:J,onTimeChange:N,onDragStart:ut,onDragEnd:nt,onRangeSelect:lt,swimLanes:W,showSwimLanes:st,onSwimLaneItemClick:G,onSwimLaneItemHover:ct,onSwimLaneItemDoubleClick:M,onSwimLaneItemContextMenu:E,onSwimLaneReorder:B,disableNeedleDrag:q,invertScrollZoom:U}=x,A=n.useRef(null),_=n.useRef(L),$=n.useRef(z),ht=n.useRef(X),wt=n.useRef(dt),tt=n.useRef(J),c=n.useRef(g),v=n.useRef(j),w=n.useRef(T.JulianDate.toDate(I).getTime());n.useEffect(()=>{_.current=L},[L]),n.useEffect(()=>{$.current=z},[z]),n.useEffect(()=>{ht.current=X,m()},[X]),n.useEffect(()=>{wt.current=dt,m()},[dt]),n.useEffect(()=>{tt.current=J,m()},[J]);const rt=n.useRef(q??!1);n.useEffect(()=>{rt.current=q??!1},[q]);const V=n.useRef(U??!1);n.useEffect(()=>{V.current=U??!1},[U]);const y=n.useRef(W??[]),K=n.useRef(st??(W!=null&&W.length>0)),Y=n.useRef(0),t=n.useRef(null),l=n.useRef(null),a=n.useRef(G),b=n.useRef(ct),it=n.useRef(M),gt=n.useRef(E),D=n.useRef(B);n.useEffect(()=>{a.current=G},[G]),n.useEffect(()=>{b.current=ct},[ct]),n.useEffect(()=>{it.current=M},[M]),n.useEffect(()=>{gt.current=E},[E]),n.useEffect(()=>{D.current=B},[B]),n.useEffect(()=>{y.current=W??[],m()},[W]),n.useEffect(()=>{K.current=st??(W!=null&&W.length>0),m()},[st,W]);const Q=n.useRef(null),et=n.useRef(null),Et=n.useRef(!1),Pt=n.useRef(0),k=n.useRef("none"),xt=n.useRef(0),Tt=n.useRef(0),Ot=n.useRef(0),Ct=n.useRef(0),Ft=n.useRef(0),bt=n.useRef(null),H=n.useRef(lt);n.useEffect(()=>{H.current=lt},[lt]);const vt=n.useRef(null),pt=n.useRef("none"),mt=n.useRef(0),Dt=n.useRef(0),jt=n.useRef(0),Lt=n.useRef(0),Xt=(e,r)=>Math.hypot(r.clientX-e.clientX,r.clientY-e.clientY),Rt=n.useCallback(()=>({startMs:c.current,endMs:v.current,currentMs:w.current,theme:_.current,maxTicks:$.current,timezone:ht.current,use12h:/h/.test(wt.current??""),months:tt.current,swimLanes:y.current,showSwimLanes:K.current,scrollTop:Y.current,reorderState:l.current,rangeSelection:bt.current,hoverMs:vt.current}),[]);n.useImperativeHandle(S,()=>({zoomTo(e,r,s){const f=Math.max(R.MIN_SPAN_MS,Math.min(R.MAX_SPAN_MS,r-e)),o=(e+r)/2;c.current=o-f/2,v.current=o+f/2,s!==void 0&&(w.current=s),m()},getVisibleRange(){return{startMs:c.current,endMs:v.current}},startFollow(e){if(Pt.current=e,et.current!==null)return;Et.current=!0;let r=performance.now();const s=()=>{const f=performance.now(),o=f-r;r=f;const u=o*Pt.current;c.current+=u,v.current+=u,w.current+=u,m(),et.current=requestAnimationFrame(s)};et.current=requestAnimationFrame(s)},stopFollow(){Et.current=!1,et.current!==null&&(cancelAnimationFrame(et.current),et.current=null)},correctFollow(e){if(!Et.current)return;const r=e-w.current;w.current=e,c.current+=r,v.current+=r},appendSwimLane(e){y.current=[...y.current,e],m()},updateSwimLane(e,r){y.current=y.current.map(s=>s.id===e?{...s,...r,id:s.id}:s),m()},removeSwimLane(e){y.current=y.current.filter(r=>r.id!==e),m()},reorderSwimLanes(e){const r=new Map(y.current.map(f=>[f.id,f])),s=[];for(const f of e){const o=r.get(f);o&&s.push(o)}y.current=s,m()}}));const m=n.useCallback(()=>{const e=A.current;if(!e)return;const r=e.getContext("2d");if(!r)return;const s=e.getBoundingClientRect(),f=s.width,o=s.height;if(f===0||o===0)return;const u=window.devicePixelRatio||1,d=Math.round(f*u),p=Math.round(o*u);(e.width!==d||e.height!==p)&&(e.width=d,e.height=p),r.save(),r.scale(u,u);const C=R.drawTimeline(r,f,o,Rt());C!==Y.current&&(Y.current=C),r.restore()},[Rt]);n.useLayoutEffect(()=>{m();const e=A.current;if(!e)return;const r=new ResizeObserver(()=>m());return r.observe(e),()=>r.disconnect()},[m]),n.useEffect(()=>{if(Et.current)return;const e=T.JulianDate.toDate(I).getTime();w.current!==e&&(w.current=e,m())},[I,m]);const Mt=n.useCallback(e=>{if(Q.current!==null)return;const r=()=>{const s=A.current,f=v.current-c.current,o=e*f*.01;if(c.current+=o,v.current+=o,s){const u=s.getBoundingClientRect(),d=Math.max(0,Math.min(u.width,Tt.current-u.left)),p=c.current+d/u.width*(v.current-c.current);w.current=p,N(T.JulianDate.fromDate(new Date(p)))}m(),Q.current=requestAnimationFrame(r)};Q.current=requestAnimationFrame(r)},[m,N]),yt=n.useCallback(()=>{Q.current!==null&&(cancelAnimationFrame(Q.current),Q.current=null)},[]),i=n.useCallback((e,r,s,f)=>R.hitTestSwimLane(e,r,s,f,Rt()),[Rt]),P=n.useCallback((e,r,s)=>R.hitTestLaneLabel(e,r,s,Rt()),[Rt]),O=n.useCallback((e,r)=>R.isInSwimLaneRegion(e,r,Rt()),[Rt]),ft=n.useCallback(e=>{e.preventDefault();const r=e.currentTarget.getBoundingClientRect(),s=e.clientX-r.left,f=e.clientY-r.top;if(e.button===0&&D.current){const o=P(s,f,r.height);if(o){const d=y.current.findIndex(p=>p.id===o.id);l.current={dragging:!0,dragLaneId:o.id,dragStartY:e.clientY,currentY:e.clientY,insertIndex:d},e.currentTarget.style.cursor="grabbing";return}}if(e.button===0&&O(f,r.height)){const o=(w.current-c.current)/(v.current-c.current)*r.width;if(!(Math.abs(s-o)<=10)&&i(s,f,r.width,r.height)){Ot.current=performance.now();return}}if(e.button===0){if(rt.current){k.current="slide",xt.current=e.clientX;return}const o=(w.current-c.current)/(v.current-c.current)*r.width,u=Math.abs(s-o)<=10,d=f>=r.height-R.TICK_AREA_HEIGHT;if(!u&&d)k.current="rangeSelectPending",Ft.current=s,Ct.current=c.current+s/r.width*(v.current-c.current),e.currentTarget.style.cursor="crosshair",ut?.();else{k.current="scrub",Tt.current=e.clientX,e.currentTarget.style.cursor="grabbing",ut?.();const p=c.current+s/r.width*(v.current-c.current);w.current=p,m(),N(T.JulianDate.fromDate(new Date(p)))}}else if(e.button===1)k.current="slide",xt.current=e.clientX;else if(e.button===2){if(gt.current&&O(f,r.height))return;k.current="zoom",xt.current=e.clientX}},[m,N,ut,P,O,i]);n.useEffect(()=>{const e=s=>{const f=l.current;if(f&&f.dragging){f.currentY=s.clientY;const p=A.current;if(p){const C=p.getBoundingClientRect(),at=s.clientY-C.top;let Zt=-Y.current;const zt=y.current;let Qt=zt.length;for(let Jt=0;Jt<zt.length;Jt++){const qt=zt[Jt].height??R.DEFAULT_LANE_HEIGHT,de=Zt+qt/2;if(at<de){Qt=Jt;break}Zt+=qt+R.LANE_GAP}f.insertIndex=Qt}m();return}if(k.current==="none")return;const o=A.current;if(!o)return;const u=o.getBoundingClientRect(),d=u.width;if(k.current==="scrub"){Tt.current=s.clientX;const p=s.clientX-u.left,C=d*.08;p<C?Mt(-1):p>d-C?Mt(1):yt();const at=Math.max(0,Math.min(d,p)),kt=c.current+at/d*(v.current-c.current);w.current=kt,m(),N(T.JulianDate.fromDate(new Date(kt)))}else if(k.current==="rangeSelectPending"||k.current==="rangeSelect"){const p=s.clientX-u.left,C=Math.abs(p-Ft.current);if(k.current==="rangeSelectPending"&&C>=3&&(k.current="rangeSelect"),k.current==="rangeSelect"){const at=Math.max(0,Math.min(d,p)),kt=c.current+at/d*(v.current-c.current);bt.current={startMs:Ct.current,endMs:kt},m()}}else if(k.current==="slide"){const p=xt.current-s.clientX;if(xt.current=s.clientX,p!==0){const C=p/d*(v.current-c.current);c.current+=C,v.current+=C,m()}}else if(k.current==="zoom"){const p=xt.current-s.clientX;xt.current=s.clientX,p!==0&&F(Math.pow(1.01,p))}},r=()=>{const s=l.current;if(s&&s.dragging){const f=Math.abs(s.currentY-s.dragStartY),o=y.current,u=o.findIndex(d=>d.id===s.dragLaneId);if(f>5&&u>=0&&s.insertIndex!==u&&s.insertIndex!==u+1){const d=[...o],[p]=d.splice(u,1),C=s.insertIndex>u?s.insertIndex-1:s.insertIndex;d.splice(C,0,p),y.current=d,D.current?.(d.map(at=>at.id))}l.current=null,A.current&&(A.current.style.cursor="default"),m();return}if(yt(),k.current==="rangeSelectPending"){w.current=Ct.current,bt.current=null,k.current="none",A.current&&(A.current.style.cursor="default"),m(),N(T.JulianDate.fromDate(new Date(Ct.current))),nt?.();return}if(k.current==="rangeSelect"){const f=bt.current;if(bt.current=null,f){const o=Math.min(f.startMs,f.endMs),u=Math.max(f.startMs,f.endMs);c.current=o,v.current=u;const d=Math.max(o,Math.min(u,w.current));d!==w.current&&(w.current=d,N(T.JulianDate.fromDate(new Date(d))));const p=T.JulianDate.fromDate(new Date(o)),C=T.JulianDate.fromDate(new Date(u));H.current?.(p,C)}k.current="none",A.current&&(A.current.style.cursor="default"),m(),nt?.();return}k.current="none",A.current&&(A.current.style.cursor="default"),nt?.()};return document.addEventListener("mousemove",e),document.addEventListener("mouseup",r),()=>{document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",r)}},[m,N,nt,Mt,yt]);const F=n.useCallback(e=>{const r=R.zoomRange(c.current,v.current,e);c.current=r.startMs,v.current=r.endMs,m()},[m]),Z=n.useCallback(e=>{e.preventDefault();const r=A.current;if(!r)return;const s=r.getBoundingClientRect(),f=e.clientY-s.top,o=K.current,u=y.current;if(o&&u.length>0){const d=Math.max(0,s.height-R.TICK_AREA_HEIGHT);if(f>=0&&f<d){let p=0;for(const at of u)p+=(at.height??R.DEFAULT_LANE_HEIGHT)+R.LANE_GAP;const C=Math.max(0,p-d);if(C>0){Y.current=Math.max(0,Math.min(C,Y.current+e.deltaY*R.SWIM_LANE_SCROLL_SPEED)),m();return}}}F(Math.pow(1.05,e.deltaY>0===V.current?-1:1))},[F,m]);n.useEffect(()=>{const e=A.current;if(e)return e.addEventListener("wheel",Z,{passive:!1}),()=>e.removeEventListener("wheel",Z)},[Z]),n.useEffect(()=>{const e=A.current;if(!e)return;const r=o=>{o.preventDefault();const u=e.getBoundingClientRect();if(o.touches.length===1){const d=o.touches[0].clientX-u.left,p=Math.max(0,Math.min(u.width,d)),C=c.current+p/u.width*(v.current-c.current);Lt.current=w.current,rt.current?(pt.current="slide",mt.current=o.touches[0].clientX):(pt.current="scrub",mt.current=o.touches[0].clientX,Tt.current=o.touches[0].clientX,w.current=C,m(),ut?.(),N(T.JulianDate.fromDate(new Date(C))))}else o.touches.length>=2&&(pt.current==="scrub"&&(w.current=Lt.current,m(),N(T.JulianDate.fromDate(new Date(Lt.current)))),pt.current="pinch",Dt.current=Xt(o.touches[0],o.touches[1]),jt.current=(o.touches[0].clientX+o.touches[1].clientX)/2-u.left)},s=o=>{o.preventDefault();const u=e.getBoundingClientRect();if(pt.current==="scrub"&&o.touches.length>=1){const d=o.touches[0].clientX-u.left,p=u.width*.08;if(Tt.current=o.touches[0].clientX,d<p)Mt(-1);else if(d>u.width-p)Mt(1);else{yt();const C=Math.max(0,Math.min(u.width,d)),at=c.current+C/u.width*(v.current-c.current);w.current=at,m(),N(T.JulianDate.fromDate(new Date(at)))}}else if(pt.current==="slide"&&o.touches.length>=1){const d=mt.current-o.touches[0].clientX;if(mt.current=o.touches[0].clientX,d!==0){const p=d/u.width*(v.current-c.current);c.current+=p,v.current+=p,m()}}else if(pt.current==="pinch"&&o.touches.length>=2){const d=Xt(o.touches[0],o.touches[1]),p=(o.touches[0].clientX+o.touches[1].clientX)/2-u.left;if(d>0&&Dt.current>0){const C=c.current+jt.current/u.width*(v.current-c.current),at=R.zoomAroundMs(c.current,v.current,Dt.current/d,C);c.current=at.startMs,v.current=at.endMs,m()}Dt.current=d,jt.current=p}},f=o=>{yt(),pt.current==="scrub"&&nt?.(),o.touches.length===0?pt.current="none":o.touches.length===1&&(pt.current="slide",mt.current=o.touches[0].clientX)};return e.addEventListener("touchstart",r,{passive:!1}),e.addEventListener("touchmove",s,{passive:!1}),e.addEventListener("touchend",f,{passive:!1}),()=>{e.removeEventListener("touchstart",r),e.removeEventListener("touchmove",s),e.removeEventListener("touchend",f)}},[m,ut,nt,N,F,Mt,yt]);const St=n.useCallback(e=>{const r=e.currentTarget.getBoundingClientRect(),s=e.clientX-r.left,f=e.clientY-r.top;if(k.current==="none")if(rt.current)vt.current!==null&&(vt.current=null);else{const d=c.current+Math.max(0,Math.min(r.width,s))/r.width*(v.current-c.current);vt.current!==d&&(vt.current=d)}if(k.current!=="none"){vt.current=null;return}const o=(w.current-c.current)/(v.current-c.current)*r.width,u=!rt.current&&Math.abs(s-o)<=10;if(O(f,r.height)){const d=i(s,f,r.width,r.height),p=t.current;if(d)e.currentTarget.style.cursor=u?"grab":"pointer",(!p||p.item.id!==d.item.id||p.lane.id!==d.lane.id)&&(t.current=d,b.current?.({laneId:d.lane.id,item:d.item,originalEvent:e.nativeEvent}));else if(p&&(t.current=null,b.current?.(null)),u)e.currentTarget.style.cursor="grab";else{const C=P(s,f,r.height);e.currentTarget.style.cursor=C&&D.current?"grab":"default"}m();return}t.current&&(t.current=null,b.current?.(null)),u?e.currentTarget.style.cursor="grab":!rt.current&&f>=r.height-R.TICK_AREA_HEIGHT?e.currentTarget.style.cursor="crosshair":e.currentTarget.style.cursor="default",m()},[m,i,O,P]),le=n.useCallback(e=>{if(performance.now()-Ot.current>300)return;const s=e.currentTarget.getBoundingClientRect(),f=e.clientX-s.left,o=e.clientY-s.top,u=i(f,o,s.width,s.height);u&&a.current?.({laneId:u.lane.id,item:u.item,originalEvent:e.nativeEvent})},[i]),ie=n.useCallback(e=>{const r=e.currentTarget.getBoundingClientRect(),s=e.clientX-r.left,f=e.clientY-r.top,o=i(s,f,r.width,r.height);o&&it.current?.({laneId:o.lane.id,item:o.item,originalEvent:e.nativeEvent})},[i]),fe=n.useCallback(e=>{const r=e.currentTarget.getBoundingClientRect(),s=e.clientX-r.left,f=e.clientY-r.top,o=i(s,f,r.width,r.height);o&&gt.current?(e.preventDefault(),gt.current({laneId:o.lane.id,item:o.item,originalEvent:e.nativeEvent})):e.preventDefault()},[i]);return n.useEffect(()=>()=>{Q.current!==null&&cancelAnimationFrame(Q.current),et.current!==null&&cancelAnimationFrame(et.current)},[]),h.jsx("canvas",{ref:A,style:{width:"100%",flex:1,minHeight:0,display:"block",cursor:"default"},onMouseDown:ft,onMouseMove:St,onClick:le,onDoubleClick:ie,onMouseLeave:()=>{t.current&&(t.current=null,b.current?.(null)),vt.current=null,k.current==="none"&&A.current&&(A.current.style.cursor="default"),m()},onContextMenu:fe})});Nt.displayName="TimelineCanvas";const Vt=[2,4,8,16,32,100,1],Kt=[1,2,4,8,16,32,100],ae=({startTime:x,endTime:S,currentTime:I,clock:g,onTimeChange:j,onPlayPause:L,onMultiplierChange:z,height:X,showControls:dt=!0,showJumpToStart:J,showJumpToEnd:N,enableDrag:ut=!0,dateTimeFormat:nt,onDateTimeClick:lt,jumpToTime:W,maxTicks:st,ffSpeeds:G=Vt,rwSpeeds:ct=Kt,theme:M,className:E,timezone:B,swimLanes:q,showSwimLanes:U,onShowSwimLanesChange:A,swimLaneTransition:_="animated",onSwimLaneItemClick:$,onSwimLaneItemHover:ht,onSwimLaneItemDoubleClick:wt,onSwimLaneItemContextMenu:tt,onSwimLaneReorder:c,onRangeSelect:v,labels:w,liveButtonSize:rt,liveButtonPosition:V,live:y,invertScrollZoom:K})=>{const Y=()=>Date.now(),t=n.useMemo(()=>x?T.JulianDate.toDate(R.toJulianDate(x)).getTime():Y()-432e5,[x]),l=n.useMemo(()=>S?T.JulianDate.toDate(R.toJulianDate(S)).getTime():Y()+12*3600*1e3,[S]),[a,b]=n.useState(()=>R.toJulianDate(I??x??T.JulianDate.fromDate(new Date))),[it,gt]=n.useState(g?.shouldAnimate??!1),[D,Q]=n.useState(g?.multiplier??1),[et,Et]=n.useState(U??!0);n.useEffect(()=>{U!=null&&Et(U)},[U]);const Pt=()=>{const i=!et;Et(i),A?.(i)},k=q!=null&&q.length>0,xt=n.useRef(null),[Tt,Ot]=n.useState(0);n.useEffect(()=>{const i=xt.current;if(!i)return;const P=new ResizeObserver(([O])=>Ot(O.borderBoxSize[0].blockSize));return P.observe(i),()=>P.disconnect()},[dt]);const Ft=k&&!et?`${Tt+R.TICK_AREA_HEIGHT}px`:X!=null?`${X}px`:"100%",bt=n.useRef(!1),H=n.useRef(null),vt={...R.defaultTheme,...M};n.useEffect(()=>{if(!g)return;const i=()=>{if(!bt.current){const P=T.JulianDate.clone(g.currentTime);if(b(P),gt(g.shouldAnimate),Q(g.multiplier),H.current){const{startMs:O,endMs:ft}=H.current.getVisibleRange(),F=ft-O,Z=T.JulianDate.toDate(P).getTime(),St=Z-O;St<=F*.1?H.current.zoomTo(Z-F*.1,Z+F*.9,Z):St>=F*.9&&H.current.zoomTo(Z-F*.9,Z+F*.1,Z)}}};return g.onTick.addEventListener(i),()=>{g.onTick.removeEventListener(i)}},[g]),n.useEffect(()=>{if(g)return;const i=setInterval(()=>{if(bt.current)return;const P=T.JulianDate.fromDate(new Date);if(b(P),H.current){const{startMs:O,endMs:ft}=H.current.getVisibleRange(),F=ft-O,Z=T.JulianDate.toDate(P).getTime(),St=Z-O;St<=F*.1?H.current.zoomTo(Z-F*.1,Z+F*.9,Z):St>=F*.9&&H.current.zoomTo(Z-F*.9,Z+F*.1,Z)}},1e3);return()=>clearInterval(i)},[g]),n.useEffect(()=>{if(!W||y)return;const i=R.toJulianDate(W);if(Dt(i),H.current){const{startMs:P,endMs:O}=H.current.getVisibleRange(),ft=O-P,F=T.JulianDate.toDate(i).getTime();H.current.zoomTo(F-ft/2,F+ft/2)}},[W]);const pt=n.useRef(!0);n.useEffect(()=>{if(pt.current){pt.current=!1;return}x!=null&&S!=null&&H.current?.zoomTo(t,l)},[t,l]);const mt=(i,P=!0)=>{g&&(g.multiplier=i,P&&(g.shouldAnimate=!0)),Q(i),P&&gt(!0),z?.(i)},Dt=i=>{b(i),g&&(g.currentTime=T.JulianDate.clone(i)),j?.(i)},jt=i=>{i&&D<0&&mt(1,!1),g&&(g.shouldAnimate=i),gt(i),L?.(i)},Lt=()=>{const i=G.length>0?G:Vt,P=D>1?D:1,O=i.indexOf(P),ft=i[O<0||O===i.length-1?0:O+1];mt(ft)},Xt=()=>{const i=ct.length>0?ct:Kt,P=D<0?Math.abs(D):0,O=i.indexOf(P),ft=-i[O<0||O===i.length-1?0:O+1];mt(ft)},Rt=()=>{const i=R.toJulianDate(x??T.JulianDate.fromDate(new Date(t)));g&&(g.currentTime=T.JulianDate.clone(i)),b(i),H.current?.zoomTo(t,l)},m=()=>{const i=R.toJulianDate(S??T.JulianDate.fromDate(new Date(l)));g&&(g.currentTime=T.JulianDate.clone(i)),b(i),H.current?.zoomTo(t,l)},Mt=()=>{const i=T.JulianDate.fromDate(new Date);g&&(g.currentTime=T.JulianDate.clone(i)),b(i),mt(1);const P=Date.now();if(H.current){const{startMs:O,endMs:ft}=H.current.getVisibleRange(),F=ft-O;H.current.zoomTo(P-F/2,P+F/2)}},yt=Math.abs(T.JulianDate.toDate(a).getTime()-Date.now())<2e3;return h.jsxs("div",{className:E,style:{width:"100%",height:Ft,overflow:"hidden",display:"flex",flexDirection:"column",fontFamily:"system-ui, -apple-system, sans-serif",transition:_==="animated"?"height 0.2s ease":void 0},children:[dt&&h.jsx("div",{ref:xt,children:h.jsx(Ut,{currentTime:a,isPlaying:it,multiplier:D,isLive:yt,hasStartTime:x!=null,hasEndTime:S!=null,showJumpToStart:J,showJumpToEnd:N,onPlayPause:jt,onJumpToStart:Rt,onRewind:Xt,onFastForward:Lt,onJumpToEnd:m,onJumpToLive:Mt,onResetSpeed:()=>mt(1),onDateTimeClick:lt,dateTimeFormat:nt,timezone:B,theme:vt,swimLanesVisible:k?et:void 0,onToggleSwimLanes:k?Pt:void 0,labels:w,liveButtonSize:rt,liveButtonPosition:V,live:y})}),(ut!==!1||y)&&h.jsx(Nt,{ref:H,currentTime:a,defaultStartMs:t,defaultEndMs:l,theme:vt,maxTicks:st,timezone:B,dateTimeFormat:nt,months:w?.months,onTimeChange:Dt,onDragStart:()=>{bt.current=!0},onDragEnd:()=>{bt.current=!1},disableNeedleDrag:!!y,invertScrollZoom:K,swimLanes:q,showSwimLanes:et,onSwimLaneItemClick:$,onSwimLaneItemHover:ht,onSwimLaneItemDoubleClick:wt,onSwimLaneItemContextMenu:tt,onSwimLaneReorder:c,onRangeSelect:v})]})},ue=({startTime:x,endTime:S,currentTime:I,width:g,height:j,tickInterval:L,showLabels:z,snapToTicks:X,enableDrag:dt,theme:J,onTimeChange:N,onVisibleRangeChange:ut,onDragStart:nt,onDragEnd:lt})=>{const W=n.useMemo(()=>R.generateTicks(x,S,L,g),[x,S,L,g]),st=n.useMemo(()=>R.timeToPosition(I,x,S,g),[I,x,S,g]),G=n.useRef(null),ct=E=>{if(!dt)return;const B=E.currentTarget.getBoundingClientRect(),q=E.clientX-B.left,U=Math.max(0,Math.min(g,q));if(!(Math.abs(U-st)<=10)){let V=U;X&&(V=R.snapToTick(U,W,10));const y=new Date(x).getTime(),K=new Date(S).getTime();N(T.JulianDate.fromDate(new Date(y+V/g*(K-y))));return}nt?.();const _=E.clientX,$=new Date(I).getTime(),ht=new Date(x).getTime(),tt=(new Date(S).getTime()-ht)/g;let c=0,v=!1;const w=V=>{c=V.clientX-_,v=!0,G.current||(G.current=requestAnimationFrame(()=>{if(v){const y=$+c*tt;N(T.JulianDate.fromDate(new Date(y))),v=!1}G.current=null}))},rt=()=>{document.removeEventListener("mousemove",w),document.removeEventListener("mouseup",rt),G.current!==null&&(cancelAnimationFrame(G.current),G.current=null),lt?.()};document.addEventListener("mousemove",w),document.addEventListener("mouseup",rt)},M=E=>{E.preventDefault();const B=E.shiftKey?E.deltaY:E.deltaX!==0?E.deltaX:E.deltaY;if(Math.abs(B)<1)return;const q=new Date(x).getTime(),U=new Date(S).getTime(),A=B/g*(U-q)*.5;ut?.(T.JulianDate.fromDate(new Date(q+A)),T.JulianDate.fromDate(new Date(U+A)))};return h.jsxs("svg",{width:"100%",height:j,style:{backgroundColor:J.backgroundColor,display:"block",cursor:"default"},onMouseDown:ct,onWheel:M,children:[h.jsx("rect",{width:g,height:j,fill:J.backgroundColor}),W.map((E,B)=>h.jsxs("g",{children:[h.jsx("line",{x1:E.position,y1:j-(E.isMajor?J.majorTickHeight:J.minorTickHeight),x2:E.position,y2:j,stroke:E.isMajor?J.majorTickColor:J.tickColor,strokeWidth:"1"}),z&&E.isMajor&&E.label&&h.jsx("text",{x:E.position,y:j-J.majorTickHeight-5,textAnchor:"middle",fill:J.labelColor,fontSize:J.fontSize,fontFamily:"monospace",children:E.label})]},B)),h.jsx("line",{x1:st,y1:0,x2:st,y2:j,stroke:J.indicatorColor,strokeWidth:J.indicatorLineWidth,pointerEvents:"none"}),dt&&h.jsx("rect",{x:Math.max(0,st-10),y:0,width:20,height:j,fill:"transparent",style:{cursor:"ew-resize"},pointerEvents:"visiblePainted"}),h.jsx("circle",{cx:st,cy:5,r:4,fill:J.indicatorColor,pointerEvents:"none"})]})};Object.defineProperty(ot,"TICK_AREA_HEIGHT",{enumerable:!0,get:()=>R.TICK_AREA_HEIGHT}),ot.Timeline=ae,ot.TimelineCanvas=Nt,ot.TimelineControls=Ut,ot.TimelineSVG=ue,Object.keys(R).forEach(x=>{x!=="default"&&!Object.prototype.hasOwnProperty.call(ot,x)&&Object.defineProperty(ot,x,{enumerable:!0,get:()=>R[x]})}),Object.defineProperty(ot,Symbol.toStringTag,{value:"Module"})}));
package/dist/index.d.ts CHANGED
@@ -33,6 +33,12 @@ export declare interface ControlsProps {
33
33
  onToggleSwimLanes?: () => void;
34
34
  /** Overrides for control-bar labels and tooltips (i18n / custom verbiage). */
35
35
  labels?: Partial<TimelineLabels>;
36
+ /** @see TimelineBaseProps.liveButtonSize */
37
+ liveButtonSize?: 'sm' | 'md' | 'lg';
38
+ /** @see TimelineBaseProps.liveButtonPosition */
39
+ liveButtonPosition?: 'left' | 'right';
40
+ /** @see TimelineBaseProps.live */
41
+ live?: boolean;
36
42
  }
37
43
 
38
44
  export { TICK_AREA_HEIGHT }
@@ -79,6 +85,10 @@ declare interface TimelineCanvasProps {
79
85
  onTimeChange: (time: Cesium.JulianDate) => void;
80
86
  onDragStart?: () => void;
81
87
  onDragEnd?: () => void;
88
+ /** When true, needle scrub is disabled (left-click becomes pan). Zoom and pan remain active. */
89
+ disableNeedleDrag?: boolean;
90
+ /** @see TimelineBaseProps.invertScrollZoom */
91
+ invertScrollZoom?: boolean;
82
92
  onRangeSelect?: (start: Cesium.JulianDate, end: Cesium.JulianDate) => void;
83
93
  swimLanes?: SwimLane[];
84
94
  showSwimLanes?: boolean;
@@ -130,6 +140,14 @@ export declare interface TimelineProps {
130
140
  * want to change; everything else falls back to the English defaults.
131
141
  */
132
142
  labels?: Partial<TimelineLabels>;
143
+ /** @see TimelineBaseProps.liveButtonSize */
144
+ liveButtonSize?: 'sm' | 'md' | 'lg';
145
+ /** @see TimelineBaseProps.liveButtonPosition */
146
+ liveButtonPosition?: 'left' | 'right';
147
+ /** @see TimelineBaseProps.live */
148
+ live?: boolean;
149
+ /** @see TimelineBaseProps.invertScrollZoom */
150
+ invertScrollZoom?: boolean;
133
151
  }
134
152
 
135
153
  export declare const TimelineSVG: default_2.FC<TimelineSVGProps>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kteneyck/cesium-timeline-react",
3
- "version": "0.9.0",
3
+ "version": "0.11.0",
4
4
  "description": "React timeline component for Cesium with clock integration",
5
5
  "license": "MIT",
6
6
  "author": "kteneyck",
@@ -32,9 +32,9 @@
32
32
  "types": "./dist/index.d.ts",
33
33
  "exports": {
34
34
  ".": {
35
+ "types": "./dist/index.d.ts",
35
36
  "import": "./dist/cesium-timeline-react.js",
36
- "require": "./dist/cesium-timeline-react.umd.cjs",
37
- "types": "./dist/index.d.ts"
37
+ "require": "./dist/cesium-timeline-react.umd.cjs"
38
38
  }
39
39
  },
40
40
  "files": [
@@ -52,7 +52,7 @@
52
52
  "@types/react-dom": ">=18"
53
53
  },
54
54
  "dependencies": {
55
- "@kteneyck/cesium-timeline-core": "0.9.0"
55
+ "@kteneyck/cesium-timeline-core": "0.11.0"
56
56
  },
57
57
  "devDependencies": {
58
58
  "@testing-library/jest-dom": "^6.0.0",