@kteneyck/cesium-timeline-react 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -0
- package/dist/cesium-timeline-react.js +833 -796
- package/dist/cesium-timeline-react.umd.cjs +4 -4
- package/dist/index.d.ts +2 -0
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(
|
|
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={};/**
|
|
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
|
|
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={};/**
|
|
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
|
|
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:
|
|
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,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"})}));
|
|
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&>(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"})}));
|
package/dist/index.d.ts
CHANGED
|
@@ -79,6 +79,7 @@ declare interface TimelineCanvasProps {
|
|
|
79
79
|
onTimeChange: (time: Cesium.JulianDate) => void;
|
|
80
80
|
onDragStart?: () => void;
|
|
81
81
|
onDragEnd?: () => void;
|
|
82
|
+
onRangeSelect?: (start: Cesium.JulianDate, end: Cesium.JulianDate) => void;
|
|
82
83
|
swimLanes?: SwimLane[];
|
|
83
84
|
showSwimLanes?: boolean;
|
|
84
85
|
onSwimLaneItemClick?: (info: SwimLaneEventInfo) => void;
|
|
@@ -122,6 +123,7 @@ export declare interface TimelineProps {
|
|
|
122
123
|
onSwimLaneItemDoubleClick?: (info: SwimLaneEventInfo) => void;
|
|
123
124
|
onSwimLaneItemContextMenu?: (info: SwimLaneEventInfo) => void;
|
|
124
125
|
onSwimLaneReorder?: (orderedLaneIds: string[]) => void;
|
|
126
|
+
onRangeSelect?: (start: Cesium.JulianDate, end: Cesium.JulianDate) => void;
|
|
125
127
|
/**
|
|
126
128
|
* Overrides for control-bar labels and tooltips.
|
|
127
129
|
* Useful for localisation or custom verbiage — provide only the strings you
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kteneyck/cesium-timeline-react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "React timeline component for Cesium with clock integration",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "kteneyck",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"@types/react-dom": ">=18"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@kteneyck/cesium-timeline-core": "0.
|
|
55
|
+
"@kteneyck/cesium-timeline-core": "0.9.0"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@testing-library/jest-dom": "^6.0.0",
|