Initial commit
Some checks failed
Node.js build / build (20.x) (push) Failing after 5m57s
Node.js build / build (22.x) (push) Failing after 5m52s

This commit is contained in:
2026-02-19 16:35:20 -08:00
parent dc2fa22c4d
commit 2936f7d359
18 changed files with 2727 additions and 93 deletions

View File

@@ -0,0 +1,55 @@
import { Menu, setIcon } from 'obsidian';
import type { TodoItem } from '../core/types';
export interface TodoItemCallbacks {
onToggle: () => void;
onMoveClick: () => void;
}
/**
* Creates a DOM element for a todo item with checkbox and menu.
*/
export function createTodoItemEl(
container: HTMLElement,
todo: TodoItem,
callbacks: TodoItemCallbacks
): HTMLElement {
const itemEl = container.createEl('li', { cls: 'todo-tracker-item' });
// Checkbox
const checkboxEl = itemEl.createEl('input', { type: 'checkbox' });
checkboxEl.checked = todo.completed;
checkboxEl.addEventListener('change', () => {
callbacks.onToggle();
});
// Text content
const textEl = itemEl.createEl('span', { cls: 'todo-tracker-item-text' });
textEl.setText(todo.text);
if (todo.completed) {
textEl.addClass('todo-tracker-item-completed');
}
// Menu button (ellipsis)
const menuBtn = itemEl.createEl('button', { cls: 'todo-tracker-menu-btn' });
setIcon(menuBtn, 'more-vertical');
menuBtn.setAttribute('aria-label', 'Todo options');
menuBtn.addEventListener('click', (evt) => {
evt.stopPropagation();
const menu = new Menu();
menu.addItem((item) => {
item
.setTitle('Move to...')
.setIcon('arrow-right')
.onClick(() => {
callbacks.onMoveClick();
});
});
menu.showAtMouseEvent(evt);
});
return itemEl;
}