@shivamjadhav28/timeline-track 0.1.1 → 0.1.2

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,14 +1,20 @@
1
- (function(g,T){typeof exports=="object"&&typeof module<"u"?T(exports,require("react"),require("styled-components"),require("lucide-react")):typeof define=="function"&&define.amd?define(["exports","react","styled-components","lucide-react"],T):(g=typeof globalThis<"u"?globalThis:g||self,T(g.TimelineTrack={},g.React,g.styled,g.LucideReact))})(this,(function(g,T,a,E){"use strict";var M={exports:{}},C={};var re;function ae(){if(re)return C;re=1;var r=Symbol.for("react.transitional.element"),$=Symbol.for("react.fragment");function b(x,d,u){var _=null;if(u!==void 0&&(_=""+u),d.key!==void 0&&(_=""+d.key),"key"in d){u={};for(var v in d)v!=="key"&&(u[v]=d[v])}else u=d;return d=u.ref,{$$typeof:r,type:x,key:_,ref:d!==void 0?d:null,props:u}}return C.Fragment=$,C.jsx=b,C.jsxs=b,C}var N={};var te;function se(){return te||(te=1,process.env.NODE_ENV!=="production"&&(function(){function r(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===l?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case D:return"Fragment";case k:return"Profiler";case G:return"StrictMode";case q:return"Suspense";case R:return"SuspenseList";case Q: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 f:return"Portal";case L:return e.displayName||"Context";case j:return(e._context.displayName||"Context")+".Consumer";case z:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Z:return t=e.displayName||null,t!==null?t:r(e.type)||"Memo";case y:t=e._payload,e=e._init;try{return r(e(t))}catch{}}return null}function $(e){return""+e}function b(e){try{$(e);var t=!1}catch{t=!0}if(t){t=console;var n=t.error,i=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return n.call(t,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",i),$(e)}}function x(e){if(e===D)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===y)return"<...>";try{var t=r(e);return t?"<"+t+">":"<...>"}catch{return"<...>"}}function d(){var e=s.A;return e===null?null:e.getOwner()}function u(){return Error("react-stack-top-frame")}function _(e){if(m.call(e,"key")){var t=Object.getOwnPropertyDescriptor(e,"key").get;if(t&&t.isReactWarning)return!1}return e.key!==void 0}function v(e,t){function n(){J||(J=!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)",t))}n.isReactWarning=!0,Object.defineProperty(e,"key",{get:n,configurable:!0})}function V(){var e=r(this.type);return p[e]||(p[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 H(e,t,n,i,X,K){var c=n.ref;return e={$$typeof:U,type:e,key:t,props:n,_owner:i},(c!==void 0?c:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:V}):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:X}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:K}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function F(e,t,n,i,X,K){var c=t.children;if(c!==void 0)if(i)if(S(c)){for(i=0;i<c.length;i++)I(c[i]);Object.freeze&&Object.freeze(c)}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 I(c);if(m.call(t,"key")){c=r(e);var A=Object.keys(t).filter(function(ke){return ke!=="key"});i=0<A.length?"{key: someKey, "+A.join(": ..., ")+": ...}":"{key: someKey}",Y[c+i]||(A=0<A.length?"{"+A.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
1
+ (function(b,v){typeof exports=="object"&&typeof module<"u"?v(exports,require("react"),require("styled-components"),require("lucide-react")):typeof define=="function"&&define.amd?define(["exports","react","styled-components","lucide-react"],v):(b=typeof globalThis<"u"?globalThis:b||self,v(b.TimelineTrack={},b.React,b.styled,b.LucideReact))})(this,(function(b,v,a,T){"use strict";var M={exports:{}},C={};var re;function ae(){if(re)return C;re=1;var r=Symbol.for("react.transitional.element"),j=Symbol.for("react.fragment");function x(h,u,d){var E=null;if(d!==void 0&&(E=""+d),u.key!==void 0&&(E=""+u.key),"key"in u){d={};for(var w in u)w!=="key"&&(d[w]=u[w])}else d=u;return u=d.ref,{$$typeof:r,type:h,key:E,ref:u!==void 0?u:null,props:d}}return C.Fragment=j,C.jsx=x,C.jsxs=x,C}var N={};var te;function ie(){return te||(te=1,process.env.NODE_ENV!=="production"&&(function(){function r(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===l?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case D:return"Fragment";case k:return"Profiler";case G:return"StrictMode";case q:return"Suspense";case R:return"SuspenseList";case Q: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 f:return"Portal";case L:return e.displayName||"Context";case _:return(e._context.displayName||"Context")+".Consumer";case z:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Z:return t=e.displayName||null,t!==null?t:r(e.type)||"Memo";case y:t=e._payload,e=e._init;try{return r(e(t))}catch{}}return null}function j(e){return""+e}function x(e){try{j(e);var t=!1}catch{t=!0}if(t){t=console;var o=t.error,s=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return o.call(t,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",s),j(e)}}function h(e){if(e===D)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===y)return"<...>";try{var t=r(e);return t?"<"+t+">":"<...>"}catch{return"<...>"}}function u(){var e=i.A;return e===null?null:e.getOwner()}function d(){return Error("react-stack-top-frame")}function E(e){if(m.call(e,"key")){var t=Object.getOwnPropertyDescriptor(e,"key").get;if(t&&t.isReactWarning)return!1}return e.key!==void 0}function w(e,t){function o(){J||(J=!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)",t))}o.isReactWarning=!0,Object.defineProperty(e,"key",{get:o,configurable:!0})}function V(){var e=r(this.type);return p[e]||(p[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 H(e,t,o,s,X,K){var c=o.ref;return e={$$typeof:U,type:e,key:t,props:o,_owner:s},(c!==void 0?c:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:V}):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:X}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:K}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function F(e,t,o,s,X,K){var c=t.children;if(c!==void 0)if(s)if(S(c)){for(s=0;s<c.length;s++)I(c[s]);Object.freeze&&Object.freeze(c)}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 I(c);if(m.call(t,"key")){c=r(e);var A=Object.keys(t).filter(function(ke){return ke!=="key"});s=0<A.length?"{key: someKey, "+A.join(": ..., ")+": ...}":"{key: someKey}",Y[c+s]||(A=0<A.length?"{"+A.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
2
2
  let props = %s;
3
3
  <%s {...props} />
4
4
  React keys must be passed directly to JSX without using spread:
5
5
  let props = %s;
6
- <%s key={someKey} {...props} />`,i,c,A,c),Y[c+i]=!0)}if(c=null,n!==void 0&&(b(n),c=""+n),_(t)&&(b(t.key),c=""+t.key),"key"in t){n={};for(var ee in t)ee!=="key"&&(n[ee]=t[ee])}else n=t;return c&&v(n,typeof e=="function"?e.displayName||e.name||"Unknown":e),H(e,c,n,d(),X,K)}function I(e){W(e)?e._store&&(e._store.validated=1):typeof e=="object"&&e!==null&&e.$$typeof===y&&(e._payload.status==="fulfilled"?W(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function W(e){return typeof e=="object"&&e!==null&&e.$$typeof===U}var w=T,U=Symbol.for("react.transitional.element"),f=Symbol.for("react.portal"),D=Symbol.for("react.fragment"),G=Symbol.for("react.strict_mode"),k=Symbol.for("react.profiler"),j=Symbol.for("react.consumer"),L=Symbol.for("react.context"),z=Symbol.for("react.forward_ref"),q=Symbol.for("react.suspense"),R=Symbol.for("react.suspense_list"),Z=Symbol.for("react.memo"),y=Symbol.for("react.lazy"),Q=Symbol.for("react.activity"),l=Symbol.for("react.client.reference"),s=w.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,m=Object.prototype.hasOwnProperty,S=Array.isArray,h=console.createTask?console.createTask:function(){return null};w={react_stack_bottom_frame:function(e){return e()}};var J,p={},O=w.react_stack_bottom_frame.bind(w,u)(),P=h(x(u)),Y={};N.Fragment=D,N.jsx=function(e,t,n){var i=1e4>s.recentlyCreatedOwnerStacks++;return F(e,t,n,!1,i?Error("react-stack-top-frame"):O,i?h(x(e)):P)},N.jsxs=function(e,t,n){var i=1e4>s.recentlyCreatedOwnerStacks++;return F(e,t,n,!0,i?Error("react-stack-top-frame"):O,i?h(x(e)):P)}})()),N}var oe;function ie(){return oe||(oe=1,process.env.NODE_ENV==="production"?M.exports=ae():M.exports=se()),M.exports}var o=ie();const ce={primary:"#3b82f6",success:"#10b981",danger:"#ef4444",muted:"#0f172a",card:"#ffffff",grid:"#f1f5f9",border:"#e2e8f0"},le=a.div`
6
+ <%s key={someKey} {...props} />`,s,c,A,c),Y[c+s]=!0)}if(c=null,o!==void 0&&(x(o),c=""+o),E(t)&&(x(t.key),c=""+t.key),"key"in t){o={};for(var ee in t)ee!=="key"&&(o[ee]=t[ee])}else o=t;return c&&w(o,typeof e=="function"?e.displayName||e.name||"Unknown":e),H(e,c,o,u(),X,K)}function I(e){W(e)?e._store&&(e._store.validated=1):typeof e=="object"&&e!==null&&e.$$typeof===y&&(e._payload.status==="fulfilled"?W(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function W(e){return typeof e=="object"&&e!==null&&e.$$typeof===U}var $=v,U=Symbol.for("react.transitional.element"),f=Symbol.for("react.portal"),D=Symbol.for("react.fragment"),G=Symbol.for("react.strict_mode"),k=Symbol.for("react.profiler"),_=Symbol.for("react.consumer"),L=Symbol.for("react.context"),z=Symbol.for("react.forward_ref"),q=Symbol.for("react.suspense"),R=Symbol.for("react.suspense_list"),Z=Symbol.for("react.memo"),y=Symbol.for("react.lazy"),Q=Symbol.for("react.activity"),l=Symbol.for("react.client.reference"),i=$.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,m=Object.prototype.hasOwnProperty,S=Array.isArray,g=console.createTask?console.createTask:function(){return null};$={react_stack_bottom_frame:function(e){return e()}};var J,p={},O=$.react_stack_bottom_frame.bind($,d)(),P=g(h(d)),Y={};N.Fragment=D,N.jsx=function(e,t,o){var s=1e4>i.recentlyCreatedOwnerStacks++;return F(e,t,o,!1,s?Error("react-stack-top-frame"):O,s?g(h(e)):P)},N.jsxs=function(e,t,o){var s=1e4>i.recentlyCreatedOwnerStacks++;return F(e,t,o,!0,s?Error("react-stack-top-frame"):O,s?g(h(e)):P)}})()),N}var ne;function se(){return ne||(ne=1,process.env.NODE_ENV==="production"?M.exports=ae():M.exports=ie()),M.exports}var n=se();const ce={primary:"#3b82f6",success:"#10b981",danger:"#ef4444",muted:"#0f172a",card:"#ffffff",grid:"#f1f5f9",border:"#e2e8f0"},le=a.div`
7
7
  padding: 30px;
8
8
  background: #f8fafc;
9
9
  min-height: 100vh;
10
10
  font-family: 'Segoe UI', Tahoma, sans-serif;
11
- `,ue=a.div`
11
+ @media (max-width: 900px) {
12
+ padding: 20px;
13
+ }
14
+ @media (max-width: 640px) {
15
+ padding: 16px;
16
+ }
17
+ `,de=a.div`
12
18
  display: flex;
13
19
  justify-content: space-between;
14
20
  align-items: center;
@@ -18,6 +24,12 @@ React keys must be passed directly to JSX without using spread:
18
24
  color: #1e293b;
19
25
  border-radius: 12px;
20
26
  box-shadow: 0 2px 4px rgba(0,0,0,0.05);
27
+ gap: 12px;
28
+ flex-wrap: wrap;
29
+ @media (max-width: 640px) {
30
+ flex-direction: column;
31
+ align-items: flex-start;
32
+ }
21
33
  `,B=a.button`
22
34
  background: #1e293b;
23
35
  color: white;
@@ -29,12 +41,15 @@ React keys must be passed directly to JSX without using spread:
29
41
  align-items: center;
30
42
  gap: 8px;
31
43
  &:hover { background: #334155; }
32
- `,de=a.div`
44
+ `,ue=a.div`
33
45
  position: relative;
34
46
  background: ${r=>r.$card};
35
47
  border: 1px solid ${r=>r.$border};
36
48
  border-radius: 12px;
37
49
  overflow: hidden;
50
+ @media (max-width: 900px) {
51
+ overflow-x: auto;
52
+ }
38
53
  `,fe=a.div`
39
54
  position: absolute;
40
55
  top: 0;
@@ -44,6 +59,13 @@ React keys must be passed directly to JSX without using spread:
44
59
  display: grid;
45
60
  grid-template-columns: repeat(${r=>r.$windowDays}, 1fr);
46
61
  pointer-events: none;
62
+ min-width: 700px;
63
+ @media (max-width: 900px) {
64
+ min-width: 600px;
65
+ }
66
+ @media (max-width: 640px) {
67
+ min-width: 520px;
68
+ }
47
69
  `,pe=a.div`
48
70
  border-right: 1px solid ${r=>r.$grid};
49
71
  display: flex;
@@ -58,7 +80,12 @@ React keys must be passed directly to JSX without using spread:
58
80
  border-bottom: 1px solid #f1f5f9;
59
81
  position: relative;
60
82
  &:last-child { border-bottom: none; }
61
- `,be=a.div`
83
+ @media (max-width: 640px) {
84
+ height: auto;
85
+ min-height: 96px;
86
+ flex-direction: column;
87
+ }
88
+ `,xe=a.div`
62
89
  width: ${r=>r.$sidebarWidth}px;
63
90
  min-width: ${r=>r.$sidebarWidth}px;
64
91
  background: #fcfcfd;
@@ -69,12 +96,31 @@ React keys must be passed directly to JSX without using spread:
69
96
  color: #1e293b;
70
97
  border-right: 2px solid #f1f5f9;
71
98
  z-index: 10;
72
- `,xe=a.div`
99
+ @media (max-width: 900px) {
100
+ width: 180px;
101
+ min-width: 180px;
102
+ }
103
+ @media (max-width: 640px) {
104
+ width: 100%;
105
+ min-width: 0;
106
+ border-right: none;
107
+ border-bottom: 1px solid #f1f5f9;
108
+ padding: 12px 16px;
109
+ }
110
+ `,he=a.div`
73
111
  flex-grow: 1;
74
112
  position: relative;
75
113
  display: flex;
76
114
  align-items: center;
77
- `,ge=a.div`
115
+ min-width: 700px;
116
+ @media (max-width: 900px) {
117
+ min-width: 600px;
118
+ }
119
+ @media (max-width: 640px) {
120
+ min-width: 520px;
121
+ padding: 8px 0 12px;
122
+ }
123
+ `,be=a.div`
78
124
  position: absolute;
79
125
  left: ${r=>r.$left}%;
80
126
  width: ${r=>r.$width}%;
@@ -88,16 +134,16 @@ React keys must be passed directly to JSX without using spread:
88
134
  justify-content: space-between;
89
135
  align-items: center;
90
136
  padding: 0 5px;
91
- `,he=a.keyframes`
137
+ `,ge=a.keyframes`
92
138
  from { transform: scaleX(0); opacity: 0.4; }
93
139
  to { transform: scaleX(1); opacity: 1; }
94
- `,ne=a.keyframes`
140
+ `,oe=a.keyframes`
95
141
  0% { transform: scale(0.85); opacity: 0.6; }
96
142
  100% { transform: scale(1); opacity: 1; }
97
- `,ve=a.keyframes`
143
+ `,we=a.keyframes`
98
144
  0%, 100% { transform: scale(1); box-shadow: 0 0 0 rgba(16, 185, 129, 0.0); }
99
145
  50% { transform: scale(1.08); box-shadow: 0 0 12px rgba(16, 185, 129, 0.5); }
100
- `,Te=a.div`
146
+ `,ve=a.div`
101
147
  position: absolute;
102
148
  top: 50%;
103
149
  left: 0;
@@ -106,8 +152,8 @@ React keys must be passed directly to JSX without using spread:
106
152
  background: ${r=>r.$color};
107
153
  z-index: 0;
108
154
  transform-origin: left center;
109
- animation: ${he} 500ms ease;
110
- `,Ee=a.div`
155
+ animation: ${ge} 500ms ease;
156
+ `,Te=a.div`
111
157
  position: absolute;
112
158
  left: ${r=>r.$percent}%;
113
159
  transform: translateX(-50%);
@@ -115,7 +161,7 @@ React keys must be passed directly to JSX without using spread:
115
161
  display: flex;
116
162
  flex-direction: column;
117
163
  align-items: center;
118
- `,_e=a.div`
164
+ `,Ee=a.div`
119
165
  width: 30px;
120
166
  height: 30px;
121
167
  background: white;
@@ -126,9 +172,9 @@ React keys must be passed directly to JSX without using spread:
126
172
  justify-content: center;
127
173
  box-shadow: 0 2px 4px rgba(0,0,0,0.1);
128
174
  transition: transform 200ms ease, box-shadow 200ms ease;
129
- animation: ${ne} 320ms ease;
175
+ animation: ${oe} 320ms ease;
130
176
  ${r=>r.$pulse&&a.css`
131
- animation: ${ne} 320ms ease, ${ve} 1.6s ease-in-out infinite;
177
+ animation: ${oe} 320ms ease, ${we} 1.6s ease-in-out infinite;
132
178
  `}
133
179
  ${r=>r.$late&&a.css`
134
180
  box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.25);
@@ -136,14 +182,14 @@ React keys must be passed directly to JSX without using spread:
136
182
  &:hover {
137
183
  transform: scale(1.06);
138
184
  }
139
- `,je=a.div`
185
+ `,_e=a.div`
140
186
  position: absolute;
141
187
  top: 35px;
142
188
  font-size: 10px;
143
189
  font-weight: 700;
144
190
  white-space: nowrap;
145
191
  color: #334155;
146
- `,$e=a.div`
192
+ `,je=a.div`
147
193
  position: absolute;
148
194
  left: calc(${r=>r.$sidebarWidth}px + ${r=>r.$percent}%);
149
195
  top: 0; bottom: 0;
@@ -154,4 +200,4 @@ React keys must be passed directly to JSX without using spread:
154
200
  `;a.keyframes`
155
201
  0%, 100% { opacity: 0.4; }
156
202
  50% { opacity: 1; }
157
- `;function we({projects:r,viewDate:$,windowDays:b=7,onViewDateChange:x,showTodayLine:d=!0,sidebarWidth:u=220,rowHeight:_=120,rangeIconSize:v=16,showHeader:V=!0,title:H="Team Roadmap",prevLabel:F="Day",nextLabel:I="Day",todayLabel:W="Today",className:w,colors:U}){const f={...ce,...U},[D,G]=T.useState(new Date),k=$??D,j=new Date,L=T.useMemo(()=>Array.from({length:b},(l,s)=>{const m=new Date(k);return m.setDate(k.getDate()-Math.floor(b/2)+s),m}),[k,b]),z=L[0].getTime(),q=L[b-1].getTime()+864e5,R=l=>{const s=(l.getTime()-z)/(q-z)*100;return Math.max(-10,Math.min(110,s))},Z=(l,s)=>{const m=R(l),S=R(s);return{left:m,width:Math.max(0,S-m)}},y=l=>{const s=new Date(k);s.setDate(s.getDate()+l),x?x(s):G(s)},Q=()=>{x?x(new Date):G(new Date)};return o.jsxs(le,{className:w,children:[V&&o.jsxs(ue,{children:[o.jsx("h2",{style:{margin:0},children:H}),o.jsxs("div",{style:{display:"flex",gap:"10px"},children:[o.jsxs(B,{onClick:()=>y(-1),children:[o.jsx(E.ChevronLeft,{size:18})," ",F]}),o.jsxs(B,{onClick:Q,children:[o.jsx(E.Calendar,{size:18})," ",W]}),o.jsxs(B,{onClick:()=>y(1),children:[I," ",o.jsx(E.ChevronRight,{size:18})]})]})]}),o.jsxs(de,{$border:f.border,$card:f.card,children:[o.jsx(fe,{$sidebarWidth:u,$windowDays:b,children:L.map((l,s)=>o.jsx(pe,{$grid:f.grid,children:l.toLocaleDateString("en-US",{weekday:"short",day:"numeric"})},s))}),d&&j.getTime()>=z&&j.getTime()<=q&&o.jsx($e,{$percent:R(j),$sidebarWidth:u,$color:f.danger}),r.map(l=>{const s=Z(l.projectStart,l.projectEnd),m=l.milestones.every(p=>p.status==="completed"||p.status==="success"),S=!m&&j>l.projectEnd,h=m?f.success:S?f.danger:f.primary,J=m?"rgba(16, 185, 129, 0.12)":S?"rgba(239, 68, 68, 0.12)":"rgba(59, 130, 246, 0.08)";return o.jsxs(me,{$rowHeight:_,children:[o.jsx(be,{$sidebarWidth:u,children:l.projectName}),o.jsxs(xe,{children:[o.jsx(Te,{$color:f.muted}),s.width>0&&o.jsxs(ge,{$left:s.left,$width:s.width,$color:h,$bg:J,children:[o.jsx(E.Play,{size:v,color:h,fill:h}),o.jsx(E.Flag,{size:v,color:h,fill:h})]}),l.milestones.map(p=>{const O=R(p.endDate);if(O<0||O>100)return null;const P=p.status==="completed"||p.status==="success",Y=p.status==="in-progress"&&j>p.endDate,e=P?f.success:Y?f.danger:f.primary;return o.jsxs(Ee,{$percent:O,children:[o.jsx(_e,{$color:e,$pulse:P,$late:Y,children:P?o.jsx(E.Trophy,{size:14,color:e}):o.jsx(E.Clock,{size:14,color:e})}),o.jsx(je,{children:p.name})]},p.id)})]})]},l.id)})]})]})}g.TimelineTrack=we,Object.defineProperty(g,Symbol.toStringTag,{value:"Module"})}));
203
+ `;function $e({projects:r,viewDate:j,windowDays:x=7,onViewDateChange:h,showTodayLine:u=!0,sidebarWidth:d=220,rowHeight:E=120,rangeIconSize:w=16,showHeader:V=!0,title:H="Team Roadmap",prevLabel:F="Day",nextLabel:I="Day",todayLabel:W="Today",className:$,colors:U}){const f={...ce,...U},[D,G]=v.useState(new Date),k=j??D,_=new Date,L=v.useMemo(()=>Array.from({length:x},(l,i)=>{const m=new Date(k);return m.setDate(k.getDate()-Math.floor(x/2)+i),m}),[k,x]),z=L[0].getTime(),q=L[x-1].getTime()+864e5,R=l=>{const i=(l.getTime()-z)/(q-z)*100;return Math.max(-10,Math.min(110,i))},Z=(l,i)=>{const m=R(l),S=R(i);return{left:m,width:Math.max(0,S-m)}},y=l=>{const i=new Date(k);i.setDate(i.getDate()+l),h?h(i):G(i)},Q=()=>{h?h(new Date):G(new Date)};return n.jsxs(le,{className:$,children:[V&&n.jsxs(de,{children:[n.jsx("h2",{style:{margin:0},children:H}),n.jsxs("div",{style:{display:"flex",gap:"10px"},children:[n.jsxs(B,{onClick:()=>y(-1),children:[n.jsx(T.ChevronLeft,{size:18})," ",F]}),n.jsxs(B,{onClick:Q,children:[n.jsx(T.Calendar,{size:18})," ",W]}),n.jsxs(B,{onClick:()=>y(1),children:[I," ",n.jsx(T.ChevronRight,{size:18})]})]})]}),n.jsxs(ue,{$border:f.border,$card:f.card,children:[n.jsx(fe,{$sidebarWidth:d,$windowDays:x,children:L.map((l,i)=>n.jsx(pe,{$grid:f.grid,children:l.toLocaleDateString("en-US",{weekday:"short",day:"numeric"})},i))}),u&&_.getTime()>=z&&_.getTime()<=q&&n.jsx(je,{$percent:R(_),$sidebarWidth:d,$color:f.danger}),r.map(l=>{const i=Z(l.projectStart,l.projectEnd),m=l.milestones.every(p=>p.status==="completed"||p.status==="success"),S=!m&&_>l.projectEnd,g=m?f.success:S?f.danger:f.primary,J=m?"rgba(16, 185, 129, 0.12)":S?"rgba(239, 68, 68, 0.12)":"rgba(59, 130, 246, 0.08)";return n.jsxs(me,{$rowHeight:E,children:[n.jsx(xe,{$sidebarWidth:d,children:l.projectName}),n.jsxs(he,{children:[n.jsx(ve,{$color:f.muted}),i.width>0&&n.jsxs(be,{$left:i.left,$width:i.width,$color:g,$bg:J,children:[n.jsx(T.Play,{size:w,color:g,fill:g}),n.jsx(T.Flag,{size:w,color:g,fill:g})]}),l.milestones.map(p=>{const O=R(p.endDate);if(O<0||O>100)return null;const P=p.status==="completed"||p.status==="success",Y=p.status==="in-progress"&&_>p.endDate,e=P?f.success:Y?f.danger:f.primary;return n.jsxs(Te,{$percent:O,children:[n.jsx(Ee,{$color:e,$pulse:P,$late:Y,children:P?n.jsx(T.Trophy,{size:14,color:e}):n.jsx(T.Clock,{size:14,color:e})}),n.jsx(_e,{children:p.name})]},p.id)})]})]},l.id)})]})]})}b.TimelineTrack=$e,Object.defineProperty(b,Symbol.toStringTag,{value:"Module"})}));
@@ -1,48 +1,48 @@
1
- import ae, { useState as se, useMemo as ie } from "react";
2
- import l, { css as K, keyframes as q } from "styled-components";
3
- import { ChevronLeft as ce, Calendar as le, ChevronRight as de, Play as ue, Flag as fe, Trophy as pe, Clock as me } from "lucide-react";
1
+ import ae, { useState as ie, useMemo as se } from "react";
2
+ import c, { css as K, keyframes as q } from "styled-components";
3
+ import { ChevronLeft as le, Calendar as ce, ChevronRight as de, Play as ue, Flag as fe, Trophy as pe, Clock as me } from "lucide-react";
4
4
  var G = { exports: {} }, N = {};
5
5
  var ee;
6
- function be() {
6
+ function xe() {
7
7
  if (ee) return N;
8
8
  ee = 1;
9
- var r = /* @__PURE__ */ Symbol.for("react.transitional.element"), E = /* @__PURE__ */ Symbol.for("react.fragment");
10
- function b(x, u, d) {
11
- var v = null;
12
- if (d !== void 0 && (v = "" + d), u.key !== void 0 && (v = "" + u.key), "key" in u) {
9
+ var r = /* @__PURE__ */ Symbol.for("react.transitional.element"), $ = /* @__PURE__ */ Symbol.for("react.fragment");
10
+ function x(b, u, d) {
11
+ var w = null;
12
+ if (d !== void 0 && (w = "" + d), u.key !== void 0 && (w = "" + u.key), "key" in u) {
13
13
  d = {};
14
- for (var h in u)
15
- h !== "key" && (d[h] = u[h]);
14
+ for (var g in u)
15
+ g !== "key" && (d[g] = u[g]);
16
16
  } else d = u;
17
17
  return u = d.ref, {
18
18
  $$typeof: r,
19
- type: x,
20
- key: v,
19
+ type: b,
20
+ key: w,
21
21
  ref: u !== void 0 ? u : null,
22
22
  props: d
23
23
  };
24
24
  }
25
- return N.Fragment = E, N.jsx = b, N.jsxs = b, N;
25
+ return N.Fragment = $, N.jsx = x, N.jsxs = x, N;
26
26
  }
27
27
  var D = {};
28
28
  var re;
29
- function xe() {
29
+ function be() {
30
30
  return re || (re = 1, process.env.NODE_ENV !== "production" && (function() {
31
31
  function r(e) {
32
32
  if (e == null) return null;
33
33
  if (typeof e == "function")
34
- return e.$$typeof === c ? null : e.displayName || e.name || null;
34
+ return e.$$typeof === l ? null : e.displayName || e.name || null;
35
35
  if (typeof e == "string") return e;
36
36
  switch (e) {
37
37
  case O:
38
38
  return "Fragment";
39
- case y:
39
+ case _:
40
40
  return "Profiler";
41
41
  case F:
42
42
  return "StrictMode";
43
43
  case I:
44
44
  return "Suspense";
45
- case T:
45
+ case y:
46
46
  return "SuspenseList";
47
47
  case V:
48
48
  return "Activity";
@@ -55,14 +55,14 @@ function xe() {
55
55
  return "Portal";
56
56
  case P:
57
57
  return e.displayName || "Context";
58
- case $:
58
+ case v:
59
59
  return (e._context.displayName || "Context") + ".Consumer";
60
60
  case A:
61
61
  var t = e.render;
62
62
  return e = e.displayName, e || (e = t.displayName || t.name || "", e = e !== "" ? "ForwardRef(" + e + ")" : "ForwardRef"), e;
63
63
  case B:
64
64
  return t = e.displayName || null, t !== null ? t : r(e.type) || "Memo";
65
- case w:
65
+ case T:
66
66
  t = e._payload, e = e._init;
67
67
  try {
68
68
  return r(e(t));
@@ -71,29 +71,29 @@ function xe() {
71
71
  }
72
72
  return null;
73
73
  }
74
- function E(e) {
74
+ function $(e) {
75
75
  return "" + e;
76
76
  }
77
- function b(e) {
77
+ function x(e) {
78
78
  try {
79
- E(e);
79
+ $(e);
80
80
  var t = !1;
81
81
  } catch {
82
82
  t = !0;
83
83
  }
84
84
  if (t) {
85
85
  t = console;
86
- var n = t.error, s = typeof Symbol == "function" && Symbol.toStringTag && e[Symbol.toStringTag] || e.constructor.name || "Object";
86
+ var n = t.error, i = typeof Symbol == "function" && Symbol.toStringTag && e[Symbol.toStringTag] || e.constructor.name || "Object";
87
87
  return n.call(
88
88
  t,
89
89
  "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
90
- s
91
- ), E(e);
90
+ i
91
+ ), $(e);
92
92
  }
93
93
  }
94
- function x(e) {
94
+ function b(e) {
95
95
  if (e === O) return "<>";
96
- if (typeof e == "object" && e !== null && e.$$typeof === w)
96
+ if (typeof e == "object" && e !== null && e.$$typeof === T)
97
97
  return "<...>";
98
98
  try {
99
99
  var t = r(e);
@@ -109,14 +109,14 @@ function xe() {
109
109
  function d() {
110
110
  return Error("react-stack-top-frame");
111
111
  }
112
- function v(e) {
112
+ function w(e) {
113
113
  if (m.call(e, "key")) {
114
114
  var t = Object.getOwnPropertyDescriptor(e, "key").get;
115
115
  if (t && t.isReactWarning) return !1;
116
116
  }
117
117
  return e.key !== void 0;
118
118
  }
119
- function h(e, t) {
119
+ function g(e, t) {
120
120
  function n() {
121
121
  W || (W = !0, console.error(
122
122
  "%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)",
@@ -134,15 +134,15 @@ function xe() {
134
134
  "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."
135
135
  )), e = this.props.ref, e !== void 0 ? e : null;
136
136
  }
137
- function X(e, t, n, s, U, H) {
138
- var i = n.ref;
137
+ function X(e, t, n, i, U, H) {
138
+ var s = n.ref;
139
139
  return e = {
140
140
  $$typeof: M,
141
141
  type: e,
142
142
  key: t,
143
143
  props: n,
144
- _owner: s
145
- }, (i !== void 0 ? i : null) !== null ? Object.defineProperty(e, "ref", {
144
+ _owner: i
145
+ }, (s !== void 0 ? s : null) !== null ? Object.defineProperty(e, "ref", {
146
146
  enumerable: !1,
147
147
  get: J
148
148
  }) : Object.defineProperty(e, "ref", { enumerable: !1, value: null }), e._store = {}, Object.defineProperty(e._store, "validated", {
@@ -167,48 +167,48 @@ function xe() {
167
167
  value: H
168
168
  }), Object.freeze && (Object.freeze(e.props), Object.freeze(e)), e;
169
169
  }
170
- function L(e, t, n, s, U, H) {
171
- var i = t.children;
172
- if (i !== void 0)
173
- if (s)
174
- if (R(i)) {
175
- for (s = 0; s < i.length; s++)
176
- z(i[s]);
177
- Object.freeze && Object.freeze(i);
170
+ function L(e, t, n, i, U, H) {
171
+ var s = t.children;
172
+ if (s !== void 0)
173
+ if (i)
174
+ if (R(s)) {
175
+ for (i = 0; i < s.length; i++)
176
+ z(s[i]);
177
+ Object.freeze && Object.freeze(s);
178
178
  } else
179
179
  console.error(
180
180
  "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."
181
181
  );
182
- else z(i);
182
+ else z(s);
183
183
  if (m.call(t, "key")) {
184
- i = r(e);
184
+ s = r(e);
185
185
  var S = Object.keys(t).filter(function(ne) {
186
186
  return ne !== "key";
187
187
  });
188
- s = 0 < S.length ? "{key: someKey, " + S.join(": ..., ") + ": ...}" : "{key: someKey}", C[i + s] || (S = 0 < S.length ? "{" + S.join(": ..., ") + ": ...}" : "{}", console.error(
188
+ i = 0 < S.length ? "{key: someKey, " + S.join(": ..., ") + ": ...}" : "{key: someKey}", C[s + i] || (S = 0 < S.length ? "{" + S.join(": ..., ") + ": ...}" : "{}", console.error(
189
189
  `A props object containing a "key" prop is being spread into JSX:
190
190
  let props = %s;
191
191
  <%s {...props} />
192
192
  React keys must be passed directly to JSX without using spread:
193
193
  let props = %s;
194
194
  <%s key={someKey} {...props} />`,
195
- s,
196
195
  i,
196
+ s,
197
197
  S,
198
- i
199
- ), C[i + s] = !0);
198
+ s
199
+ ), C[s + i] = !0);
200
200
  }
201
- if (i = null, n !== void 0 && (b(n), i = "" + n), v(t) && (b(t.key), i = "" + t.key), "key" in t) {
201
+ if (s = null, n !== void 0 && (x(n), s = "" + n), w(t) && (x(t.key), s = "" + t.key), "key" in t) {
202
202
  n = {};
203
203
  for (var Z in t)
204
204
  Z !== "key" && (n[Z] = t[Z]);
205
205
  } else n = t;
206
- return i && h(
206
+ return s && g(
207
207
  n,
208
208
  typeof e == "function" ? e.displayName || e.name || "Unknown" : e
209
209
  ), X(
210
210
  e,
211
- i,
211
+ s,
212
212
  n,
213
213
  u(),
214
214
  U,
@@ -216,52 +216,52 @@ React keys must be passed directly to JSX without using spread:
216
216
  );
217
217
  }
218
218
  function z(e) {
219
- Y(e) ? e._store && (e._store.validated = 1) : typeof e == "object" && e !== null && e.$$typeof === w && (e._payload.status === "fulfilled" ? Y(e._payload.value) && e._payload.value._store && (e._payload.value._store.validated = 1) : e._store && (e._store.validated = 1));
219
+ Y(e) ? e._store && (e._store.validated = 1) : typeof e == "object" && e !== null && e.$$typeof === T && (e._payload.status === "fulfilled" ? Y(e._payload.value) && e._payload.value._store && (e._payload.value._store.validated = 1) : e._store && (e._store.validated = 1));
220
220
  }
221
221
  function Y(e) {
222
222
  return typeof e == "object" && e !== null && e.$$typeof === M;
223
223
  }
224
- var _ = ae, M = /* @__PURE__ */ Symbol.for("react.transitional.element"), f = /* @__PURE__ */ Symbol.for("react.portal"), O = /* @__PURE__ */ Symbol.for("react.fragment"), F = /* @__PURE__ */ Symbol.for("react.strict_mode"), y = /* @__PURE__ */ Symbol.for("react.profiler"), $ = /* @__PURE__ */ Symbol.for("react.consumer"), P = /* @__PURE__ */ Symbol.for("react.context"), A = /* @__PURE__ */ Symbol.for("react.forward_ref"), I = /* @__PURE__ */ Symbol.for("react.suspense"), T = /* @__PURE__ */ Symbol.for("react.suspense_list"), B = /* @__PURE__ */ Symbol.for("react.memo"), w = /* @__PURE__ */ Symbol.for("react.lazy"), V = /* @__PURE__ */ Symbol.for("react.activity"), c = /* @__PURE__ */ Symbol.for("react.client.reference"), a = _.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, m = Object.prototype.hasOwnProperty, R = Array.isArray, g = console.createTask ? console.createTask : function() {
224
+ var E = ae, M = /* @__PURE__ */ Symbol.for("react.transitional.element"), f = /* @__PURE__ */ Symbol.for("react.portal"), O = /* @__PURE__ */ Symbol.for("react.fragment"), F = /* @__PURE__ */ Symbol.for("react.strict_mode"), _ = /* @__PURE__ */ Symbol.for("react.profiler"), v = /* @__PURE__ */ Symbol.for("react.consumer"), P = /* @__PURE__ */ Symbol.for("react.context"), A = /* @__PURE__ */ Symbol.for("react.forward_ref"), I = /* @__PURE__ */ Symbol.for("react.suspense"), y = /* @__PURE__ */ Symbol.for("react.suspense_list"), B = /* @__PURE__ */ Symbol.for("react.memo"), T = /* @__PURE__ */ Symbol.for("react.lazy"), V = /* @__PURE__ */ Symbol.for("react.activity"), l = /* @__PURE__ */ Symbol.for("react.client.reference"), a = E.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, m = Object.prototype.hasOwnProperty, R = Array.isArray, h = console.createTask ? console.createTask : function() {
225
225
  return null;
226
226
  };
227
- _ = {
227
+ E = {
228
228
  react_stack_bottom_frame: function(e) {
229
229
  return e();
230
230
  }
231
231
  };
232
- var W, p = {}, j = _.react_stack_bottom_frame.bind(
233
- _,
232
+ var W, p = {}, j = E.react_stack_bottom_frame.bind(
233
+ E,
234
234
  d
235
- )(), k = g(x(d)), C = {};
235
+ )(), k = h(b(d)), C = {};
236
236
  D.Fragment = O, D.jsx = function(e, t, n) {
237
- var s = 1e4 > a.recentlyCreatedOwnerStacks++;
237
+ var i = 1e4 > a.recentlyCreatedOwnerStacks++;
238
238
  return L(
239
239
  e,
240
240
  t,
241
241
  n,
242
242
  !1,
243
- s ? Error("react-stack-top-frame") : j,
244
- s ? g(x(e)) : k
243
+ i ? Error("react-stack-top-frame") : j,
244
+ i ? h(b(e)) : k
245
245
  );
246
246
  }, D.jsxs = function(e, t, n) {
247
- var s = 1e4 > a.recentlyCreatedOwnerStacks++;
247
+ var i = 1e4 > a.recentlyCreatedOwnerStacks++;
248
248
  return L(
249
249
  e,
250
250
  t,
251
251
  n,
252
252
  !0,
253
- s ? Error("react-stack-top-frame") : j,
254
- s ? g(x(e)) : k
253
+ i ? Error("react-stack-top-frame") : j,
254
+ i ? h(b(e)) : k
255
255
  );
256
256
  };
257
257
  })()), D;
258
258
  }
259
259
  var te;
260
- function ge() {
261
- return te || (te = 1, process.env.NODE_ENV === "production" ? G.exports = be() : G.exports = xe()), G.exports;
260
+ function he() {
261
+ return te || (te = 1, process.env.NODE_ENV === "production" ? G.exports = xe() : G.exports = be()), G.exports;
262
262
  }
263
- var o = ge();
264
- const he = {
263
+ var o = he();
264
+ const ge = {
265
265
  primary: "#3b82f6",
266
266
  success: "#10b981",
267
267
  danger: "#ef4444",
@@ -269,12 +269,18 @@ const he = {
269
269
  card: "#ffffff",
270
270
  grid: "#f1f5f9",
271
271
  border: "#e2e8f0"
272
- }, ve = l.div`
272
+ }, we = c.div`
273
273
  padding: 30px;
274
274
  background: #f8fafc;
275
275
  min-height: 100vh;
276
276
  font-family: 'Segoe UI', Tahoma, sans-serif;
277
- `, $e = l.div`
277
+ @media (max-width: 900px) {
278
+ padding: 20px;
279
+ }
280
+ @media (max-width: 640px) {
281
+ padding: 16px;
282
+ }
283
+ `, ve = c.div`
278
284
  display: flex;
279
285
  justify-content: space-between;
280
286
  align-items: center;
@@ -284,7 +290,13 @@ const he = {
284
290
  color: #1e293b;
285
291
  border-radius: 12px;
286
292
  box-shadow: 0 2px 4px rgba(0,0,0,0.05);
287
- `, Q = l.button`
293
+ gap: 12px;
294
+ flex-wrap: wrap;
295
+ @media (max-width: 640px) {
296
+ flex-direction: column;
297
+ align-items: flex-start;
298
+ }
299
+ `, Q = c.button`
288
300
  background: #1e293b;
289
301
  color: white;
290
302
  border: none;
@@ -295,13 +307,16 @@ const he = {
295
307
  align-items: center;
296
308
  gap: 8px;
297
309
  &:hover { background: #334155; }
298
- `, Ee = l.div`
310
+ `, $e = c.div`
299
311
  position: relative;
300
312
  background: ${(r) => r.$card};
301
313
  border: 1px solid ${(r) => r.$border};
302
314
  border-radius: 12px;
303
315
  overflow: hidden;
304
- `, _e = l.div`
316
+ @media (max-width: 900px) {
317
+ overflow-x: auto;
318
+ }
319
+ `, Ee = c.div`
305
320
  position: absolute;
306
321
  top: 0;
307
322
  left: ${(r) => r.$sidebarWidth}px;
@@ -310,7 +325,14 @@ const he = {
310
325
  display: grid;
311
326
  grid-template-columns: repeat(${(r) => r.$windowDays}, 1fr);
312
327
  pointer-events: none;
313
- `, ye = l.div`
328
+ min-width: 700px;
329
+ @media (max-width: 900px) {
330
+ min-width: 600px;
331
+ }
332
+ @media (max-width: 640px) {
333
+ min-width: 520px;
334
+ }
335
+ `, _e = c.div`
314
336
  border-right: 1px solid ${(r) => r.$grid};
315
337
  display: flex;
316
338
  justify-content: center;
@@ -318,13 +340,18 @@ const he = {
318
340
  font-size: 11px;
319
341
  color: #94a3b8;
320
342
  font-weight: 600;
321
- `, Te = l.div`
343
+ `, ye = c.div`
322
344
  display: flex;
323
345
  height: ${(r) => r.$rowHeight}px;
324
346
  border-bottom: 1px solid #f1f5f9;
325
347
  position: relative;
326
348
  &:last-child { border-bottom: none; }
327
- `, we = l.div`
349
+ @media (max-width: 640px) {
350
+ height: auto;
351
+ min-height: 96px;
352
+ flex-direction: column;
353
+ }
354
+ `, Te = c.div`
328
355
  width: ${(r) => r.$sidebarWidth}px;
329
356
  min-width: ${(r) => r.$sidebarWidth}px;
330
357
  background: #fcfcfd;
@@ -335,12 +362,31 @@ const he = {
335
362
  color: #1e293b;
336
363
  border-right: 2px solid #f1f5f9;
337
364
  z-index: 10;
338
- `, Re = l.div`
365
+ @media (max-width: 900px) {
366
+ width: 180px;
367
+ min-width: 180px;
368
+ }
369
+ @media (max-width: 640px) {
370
+ width: 100%;
371
+ min-width: 0;
372
+ border-right: none;
373
+ border-bottom: 1px solid #f1f5f9;
374
+ padding: 12px 16px;
375
+ }
376
+ `, Re = c.div`
339
377
  flex-grow: 1;
340
378
  position: relative;
341
379
  display: flex;
342
380
  align-items: center;
343
- `, je = l.div`
381
+ min-width: 700px;
382
+ @media (max-width: 900px) {
383
+ min-width: 600px;
384
+ }
385
+ @media (max-width: 640px) {
386
+ min-width: 520px;
387
+ padding: 8px 0 12px;
388
+ }
389
+ `, je = c.div`
344
390
  position: absolute;
345
391
  left: ${(r) => r.$left}%;
346
392
  width: ${(r) => r.$width}%;
@@ -363,7 +409,7 @@ const he = {
363
409
  `, Se = q`
364
410
  0%, 100% { transform: scale(1); box-shadow: 0 0 0 rgba(16, 185, 129, 0.0); }
365
411
  50% { transform: scale(1.08); box-shadow: 0 0 12px rgba(16, 185, 129, 0.5); }
366
- `, Oe = l.div`
412
+ `, Oe = c.div`
367
413
  position: absolute;
368
414
  top: 50%;
369
415
  left: 0;
@@ -373,7 +419,7 @@ const he = {
373
419
  z-index: 0;
374
420
  transform-origin: left center;
375
421
  animation: ${ke} 500ms ease;
376
- `, Pe = l.div`
422
+ `, Pe = c.div`
377
423
  position: absolute;
378
424
  left: ${(r) => r.$percent}%;
379
425
  transform: translateX(-50%);
@@ -381,7 +427,7 @@ const he = {
381
427
  display: flex;
382
428
  flex-direction: column;
383
429
  align-items: center;
384
- `, Ae = l.div`
430
+ `, Ae = c.div`
385
431
  width: 30px;
386
432
  height: 30px;
387
433
  background: white;
@@ -402,14 +448,14 @@ const he = {
402
448
  &:hover {
403
449
  transform: scale(1.06);
404
450
  }
405
- `, Ce = l.div`
451
+ `, Ce = c.div`
406
452
  position: absolute;
407
453
  top: 35px;
408
454
  font-size: 10px;
409
455
  font-weight: 700;
410
456
  white-space: nowrap;
411
457
  color: #334155;
412
- `, Ne = l.div`
458
+ `, Ne = c.div`
413
459
  position: absolute;
414
460
  left: calc(${(r) => r.$sidebarWidth}px + ${(r) => r.$percent}%);
415
461
  top: 0; bottom: 0;
@@ -424,73 +470,73 @@ q`
424
470
  `;
425
471
  function Ye({
426
472
  projects: r,
427
- viewDate: E,
428
- windowDays: b = 7,
429
- onViewDateChange: x,
473
+ viewDate: $,
474
+ windowDays: x = 7,
475
+ onViewDateChange: b,
430
476
  showTodayLine: u = !0,
431
477
  sidebarWidth: d = 220,
432
- rowHeight: v = 120,
433
- rangeIconSize: h = 16,
478
+ rowHeight: w = 120,
479
+ rangeIconSize: g = 16,
434
480
  showHeader: J = !0,
435
481
  title: X = "Team Roadmap",
436
482
  prevLabel: L = "Day",
437
483
  nextLabel: z = "Day",
438
484
  todayLabel: Y = "Today",
439
- className: _,
485
+ className: E,
440
486
  colors: M
441
487
  }) {
442
- const f = { ...he, ...M }, [O, F] = se(/* @__PURE__ */ new Date()), y = E ?? O, $ = /* @__PURE__ */ new Date(), P = ie(() => Array.from({ length: b }, (c, a) => {
443
- const m = new Date(y);
444
- return m.setDate(y.getDate() - Math.floor(b / 2) + a), m;
445
- }), [y, b]), A = P[0].getTime(), I = P[b - 1].getTime() + 864e5, T = (c) => {
446
- const a = (c.getTime() - A) / (I - A) * 100;
488
+ const f = { ...ge, ...M }, [O, F] = ie(/* @__PURE__ */ new Date()), _ = $ ?? O, v = /* @__PURE__ */ new Date(), P = se(() => Array.from({ length: x }, (l, a) => {
489
+ const m = new Date(_);
490
+ return m.setDate(_.getDate() - Math.floor(x / 2) + a), m;
491
+ }), [_, x]), A = P[0].getTime(), I = P[x - 1].getTime() + 864e5, y = (l) => {
492
+ const a = (l.getTime() - A) / (I - A) * 100;
447
493
  return Math.max(-10, Math.min(110, a));
448
- }, B = (c, a) => {
449
- const m = T(c), R = T(a);
494
+ }, B = (l, a) => {
495
+ const m = y(l), R = y(a);
450
496
  return { left: m, width: Math.max(0, R - m) };
451
- }, w = (c) => {
452
- const a = new Date(y);
453
- a.setDate(a.getDate() + c), x ? x(a) : F(a);
497
+ }, T = (l) => {
498
+ const a = new Date(_);
499
+ a.setDate(a.getDate() + l), b ? b(a) : F(a);
454
500
  }, V = () => {
455
- x ? x(/* @__PURE__ */ new Date()) : F(/* @__PURE__ */ new Date());
501
+ b ? b(/* @__PURE__ */ new Date()) : F(/* @__PURE__ */ new Date());
456
502
  };
457
- return /* @__PURE__ */ o.jsxs(ve, { className: _, children: [
458
- J && /* @__PURE__ */ o.jsxs($e, { children: [
503
+ return /* @__PURE__ */ o.jsxs(we, { className: E, children: [
504
+ J && /* @__PURE__ */ o.jsxs(ve, { children: [
459
505
  /* @__PURE__ */ o.jsx("h2", { style: { margin: 0 }, children: X }),
460
506
  /* @__PURE__ */ o.jsxs("div", { style: { display: "flex", gap: "10px" }, children: [
461
- /* @__PURE__ */ o.jsxs(Q, { onClick: () => w(-1), children: [
462
- /* @__PURE__ */ o.jsx(ce, { size: 18 }),
507
+ /* @__PURE__ */ o.jsxs(Q, { onClick: () => T(-1), children: [
508
+ /* @__PURE__ */ o.jsx(le, { size: 18 }),
463
509
  " ",
464
510
  L
465
511
  ] }),
466
512
  /* @__PURE__ */ o.jsxs(Q, { onClick: V, children: [
467
- /* @__PURE__ */ o.jsx(le, { size: 18 }),
513
+ /* @__PURE__ */ o.jsx(ce, { size: 18 }),
468
514
  " ",
469
515
  Y
470
516
  ] }),
471
- /* @__PURE__ */ o.jsxs(Q, { onClick: () => w(1), children: [
517
+ /* @__PURE__ */ o.jsxs(Q, { onClick: () => T(1), children: [
472
518
  z,
473
519
  " ",
474
520
  /* @__PURE__ */ o.jsx(de, { size: 18 })
475
521
  ] })
476
522
  ] })
477
523
  ] }),
478
- /* @__PURE__ */ o.jsxs(Ee, { $border: f.border, $card: f.card, children: [
479
- /* @__PURE__ */ o.jsx(_e, { $sidebarWidth: d, $windowDays: b, children: P.map((c, a) => /* @__PURE__ */ o.jsx(ye, { $grid: f.grid, children: c.toLocaleDateString("en-US", { weekday: "short", day: "numeric" }) }, a)) }),
480
- u && $.getTime() >= A && $.getTime() <= I && /* @__PURE__ */ o.jsx(
524
+ /* @__PURE__ */ o.jsxs($e, { $border: f.border, $card: f.card, children: [
525
+ /* @__PURE__ */ o.jsx(Ee, { $sidebarWidth: d, $windowDays: x, children: P.map((l, a) => /* @__PURE__ */ o.jsx(_e, { $grid: f.grid, children: l.toLocaleDateString("en-US", { weekday: "short", day: "numeric" }) }, a)) }),
526
+ u && v.getTime() >= A && v.getTime() <= I && /* @__PURE__ */ o.jsx(
481
527
  Ne,
482
528
  {
483
- $percent: T($),
529
+ $percent: y(v),
484
530
  $sidebarWidth: d,
485
531
  $color: f.danger
486
532
  }
487
533
  ),
488
- r.map((c) => {
489
- const a = B(c.projectStart, c.projectEnd), m = c.milestones.every(
534
+ r.map((l) => {
535
+ const a = B(l.projectStart, l.projectEnd), m = l.milestones.every(
490
536
  (p) => p.status === "completed" || p.status === "success"
491
- ), R = !m && $ > c.projectEnd, g = m ? f.success : R ? f.danger : f.primary, W = m ? "rgba(16, 185, 129, 0.12)" : R ? "rgba(239, 68, 68, 0.12)" : "rgba(59, 130, 246, 0.08)";
492
- return /* @__PURE__ */ o.jsxs(Te, { $rowHeight: v, children: [
493
- /* @__PURE__ */ o.jsx(we, { $sidebarWidth: d, children: c.projectName }),
537
+ ), R = !m && v > l.projectEnd, h = m ? f.success : R ? f.danger : f.primary, W = m ? "rgba(16, 185, 129, 0.12)" : R ? "rgba(239, 68, 68, 0.12)" : "rgba(59, 130, 246, 0.08)";
538
+ return /* @__PURE__ */ o.jsxs(ye, { $rowHeight: w, children: [
539
+ /* @__PURE__ */ o.jsx(Te, { $sidebarWidth: d, children: l.projectName }),
494
540
  /* @__PURE__ */ o.jsxs(Re, { children: [
495
541
  /* @__PURE__ */ o.jsx(Oe, { $color: f.muted }),
496
542
  a.width > 0 && /* @__PURE__ */ o.jsxs(
@@ -498,25 +544,25 @@ function Ye({
498
544
  {
499
545
  $left: a.left,
500
546
  $width: a.width,
501
- $color: g,
547
+ $color: h,
502
548
  $bg: W,
503
549
  children: [
504
- /* @__PURE__ */ o.jsx(ue, { size: h, color: g, fill: g }),
505
- /* @__PURE__ */ o.jsx(fe, { size: h, color: g, fill: g })
550
+ /* @__PURE__ */ o.jsx(ue, { size: g, color: h, fill: h }),
551
+ /* @__PURE__ */ o.jsx(fe, { size: g, color: h, fill: h })
506
552
  ]
507
553
  }
508
554
  ),
509
- c.milestones.map((p) => {
510
- const j = T(p.endDate);
555
+ l.milestones.map((p) => {
556
+ const j = y(p.endDate);
511
557
  if (j < 0 || j > 100) return null;
512
- const k = p.status === "completed" || p.status === "success", C = p.status === "in-progress" && $ > p.endDate, e = k ? f.success : C ? f.danger : f.primary;
558
+ const k = p.status === "completed" || p.status === "success", C = p.status === "in-progress" && v > p.endDate, e = k ? f.success : C ? f.danger : f.primary;
513
559
  return /* @__PURE__ */ o.jsxs(Pe, { $percent: j, children: [
514
560
  /* @__PURE__ */ o.jsx(Ae, { $color: e, $pulse: k, $late: C, children: k ? /* @__PURE__ */ o.jsx(pe, { size: 14, color: e }) : /* @__PURE__ */ o.jsx(me, { size: 14, color: e }) }),
515
561
  /* @__PURE__ */ o.jsx(Ce, { children: p.name })
516
562
  ] }, p.id);
517
563
  })
518
564
  ] })
519
- ] }, c.id);
565
+ ] }, l.id);
520
566
  })
521
567
  ] })
522
568
  ] });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shivamjadhav28/timeline-track",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Enterprise-ready React timeline component with project ranges and milestones.",
5
5
  "type": "module",
6
6
  "license": "MIT",