Now combine all code and include anything we've missed to make sure real world successful execution and output of installed on device local autonomous ai assistant
f5b9a76 verified | class TaskScheduler extends HTMLElement { | |
| connectedCallback() { | |
| this.attachShadow({ mode: 'open' }); | |
| this.shadowRoot.innerHTML = ` | |
| <style> | |
| .task-card { | |
| background: white; | |
| border-radius: 0.5rem; | |
| padding: 1.5rem; | |
| box-shadow: 0 1px 3px rgba(0,0,0,0.1); | |
| } | |
| .task-header { | |
| display: flex; | |
| justify-content: space-between; | |
| margin-bottom: 1rem; | |
| } | |
| .task-list { | |
| margin-top: 1rem; | |
| } | |
| .task-item { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| padding: 0.75rem 0; | |
| border-bottom: 1px solid #E5E7EB; | |
| } | |
| .task-name { | |
| font-weight: 500; | |
| } | |
| .task-time { | |
| font-size: 0.875rem; | |
| color: #6B7280; | |
| } | |
| .task-controls { | |
| display: flex; | |
| gap: 0.5rem; | |
| } | |
| button { | |
| padding: 0.25rem 0.5rem; | |
| border-radius: 0.25rem; | |
| font-size: 0.875rem; | |
| cursor: pointer; | |
| } | |
| .btn-primary { | |
| background: #3B82F6; | |
| color: white; | |
| border: none; | |
| } | |
| .btn-secondary { | |
| background: white; | |
| color: #3B82F6; | |
| border: 1px solid #3B82F6; | |
| } | |
| .btn-danger { | |
| background: #EF4444; | |
| color: white; | |
| border: none; | |
| } | |
| .add-task { | |
| margin-top: 1rem; | |
| display: flex; | |
| gap: 0.5rem; | |
| } | |
| input { | |
| flex: 1; | |
| padding: 0.5rem; | |
| border: 1px solid #E5E7EB; | |
| border-radius: 0.25rem; | |
| } | |
| </style> | |
| <div class="task-card"> | |
| <div class="task-header"> | |
| <h3>Task Scheduler</h3> | |
| <span>Active Tasks: 3</span> | |
| </div> | |
| <div class="task-list"> | |
| <div class="task-item"> | |
| <div> | |
| <div class="task-name">Daily Backup</div> | |
| <div class="task-time">Runs at 2:00 AM</div> | |
| </div> | |
| <div class="task-controls"> | |
| <button class="btn-secondary">Edit</button> | |
| <button class="btn-danger">Delete</button> | |
| </div> | |
| </div> | |
| <div class="task-item"> | |
| <div> | |
| <div class="task-name">Sync Files</div> | |
| <div class="task-time">Every 6 hours</div> | |
| </div> | |
| <div class="task-controls"> | |
| <button class="btn-secondary">Edit</button> | |
| <button class="btn-danger">Delete</button> | |
| </div> | |
| </div> | |
| <div class="task-item"> | |
| <div> | |
| <div class="task-name">Clean Temp</div> | |
| <div class="task-time">Daily at midnight</div> | |
| </div> | |
| <div class="task-controls"> | |
| <button class="btn-secondary">Edit</button> | |
| <button class="btn-danger">Delete</button> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="add-task"> | |
| <input type="text" placeholder="New task name" id="new-task"> | |
| <button class="btn-primary">Add</button> | |
| </div> | |
| </div> | |
| `; | |
| this.shadowRoot.querySelector('.btn-primary').addEventListener('click', () => { | |
| const taskName = this.shadowRoot.getElementById('new-task').value; | |
| if (taskName) { | |
| this.dispatchEvent(new CustomEvent('add-task', { detail: taskName })); | |
| this.shadowRoot.getElementById('new-task').value = ''; | |
| } | |
| }); | |
| } | |
| } | |
| customElements.define('task-scheduler', TaskScheduler); |