File size: 1,930 Bytes
a12aab2
7124801
 
 
 
4549c0d
7124801
 
 
 
 
 
 
a12aab2
 
 
 
 
7124801
 
 
a12aab2
 
 
 
 
7124801
 
a12aab2
 
 
 
 
7124801
a12aab2
 
7124801
a12aab2
 
 
7124801
 
a12aab2
 
7124801
a12aab2
7124801
a12aab2
 
 
 
7124801
a12aab2
 
 
 
7124801
 
a12aab2
 
 
7124801
 
 
a12aab2
 
 
 
 
 
 
 
7124801
 
 
a12aab2
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
class TimelineTasks extends HTMLElement {
  connectedCallback() {
    this.attachShadow({ mode: 'open' });
    this.render();
  }

  render() {
    this.shadowRoot.innerHTML = `
      <style>
        :host {
          display: block;
          background: #1f2937;
          border-left: 1px solid #374151;
          height: 100%;
          width: 300px;
          position: fixed;
          right: 0;
          top: 80px;
          overflow-y: auto;
          padding: 1rem;
        }
        
        h3 {
          margin-top: 0;
          color: #f97316;
          padding-bottom: 1rem;
          border-bottom: 1px solid #374151;
        }
        
        .task-list {
          display: flex;
          flex-direction: column;
          gap: 8px;
        }
        
        .task-item {
          background: #374151;
          border-radius: 6px;
          padding: 8px;
          cursor: grab;
          transition: all 0.2s ease;
        }
        
        .task-item:hover {
          background: #4b5563;
          transform: translateX(-4px);
        }
        
        .task-title {
          font-size: 14px;
          margin-bottom: 4px;
        }
        
        .task-time {
          font-size: 12px;
          color: #9ca3af;
        }
      </style>
      
      <h3>Timeline</h3>
      <div class="task-list" id="timeline-task-list"></div>
    `;
  }

  updateTasks(tasks) {
    const container = this.shadowRoot.getElementById('timeline-task-list');
    container.innerHTML = tasks.map(task => `
      <div class="task-item" draggable="true" data-task-id="${task.id}">
        <div class="task-title">${task.title}</div>
        <div class="task-time">${formatTime(task.estimatedTime)}</div>
      </div>
    `).join('');
  }
}

customElements.define('timeline-tasks', TimelineTasks);

function formatTime(minutes) {
  const h = Math.floor(minutes / 60);
  const m = minutes % 60;
  return `${h}h ${m}m`;
}