react-os-shell 0.7.5 → 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 +9 -32
- package/dist/{Minesweeper-N73MSPJV.js → Minesweeper-M6HIJYPL.js} +3 -3
- package/dist/{Minesweeper-N73MSPJV.js.map → Minesweeper-M6HIJYPL.js.map} +1 -1
- package/dist/{PomodoroTimer-EGT7356A.js → PomodoroTimer-5K55K26A.js} +3 -3
- package/dist/{PomodoroTimer-EGT7356A.js.map → PomodoroTimer-5K55K26A.js.map} +1 -1
- package/dist/{TodoList-ADXZGG6Q.js → TodoList-26N6ZTLN.js} +3 -3
- package/dist/{TodoList-ADXZGG6Q.js.map → TodoList-26N6ZTLN.js.map} +1 -1
- package/dist/apps/index.d.ts +1 -8
- package/dist/apps/index.js +4 -11
- package/dist/apps/index.js.map +1 -1
- package/dist/{chunk-FTL7F4TM.js → chunk-QTJ2CHJX.js} +2 -2
- package/dist/chunk-QTJ2CHJX.js.map +1 -0
- package/dist/{chunk-NSU7OHPC.js → chunk-Y4QYGQKS.js} +3 -11
- package/dist/chunk-Y4QYGQKS.js.map +1 -0
- package/dist/index.d.ts +47 -59
- package/dist/index.js +132 -272
- package/dist/index.js.map +1 -1
- package/package.json +3 -10
- package/dist/Calendar-QQYHT57Z.js +0 -598
- package/dist/Calendar-QQYHT57Z.js.map +0 -1
- package/dist/Email-ZUDCRZKB.js +0 -475
- package/dist/Email-ZUDCRZKB.js.map +0 -1
- package/dist/chunk-FTL7F4TM.js.map +0 -1
- package/dist/chunk-NSU7OHPC.js.map +0 -1
- package/dist/chunk-PDFQNHW7.js +0 -24
- package/dist/chunk-PDFQNHW7.js.map +0 -1
- package/dist/chunk-VBFB3ZIN.js +0 -129
- package/dist/chunk-VBFB3ZIN.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useTodoTasks } from './chunk-
|
|
1
|
+
import { useTodoTasks } from './chunk-QTJ2CHJX.js';
|
|
2
2
|
import './chunk-36VM54SC.js';
|
|
3
3
|
import { confirm } from './chunk-UBN4IUDE.js';
|
|
4
4
|
import { useState, useMemo } from 'react';
|
|
@@ -305,5 +305,5 @@ function AddTaskRow({ onSubmit, onCancel }) {
|
|
|
305
305
|
}
|
|
306
306
|
|
|
307
307
|
export { TodoList as default };
|
|
308
|
-
//# sourceMappingURL=TodoList-
|
|
309
|
-
//# sourceMappingURL=TodoList-
|
|
308
|
+
//# sourceMappingURL=TodoList-26N6ZTLN.js.map
|
|
309
|
+
//# sourceMappingURL=TodoList-26N6ZTLN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/apps/TodoList.tsx"],"names":[],"mappings":"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","file":"TodoList-ADXZGG6Q.js","sourcesContent":["import { useMemo, useState } from 'react';\nimport { useTodoTasks } from './_todoStore';\nimport type { TodoTask } from './_todoTypes';\nimport { confirm } from '../shell/ConfirmDialog';\n\ntype Filter = 'today' | 'upcoming' | 'all' | 'done';\n\nconst FILTERS: { id: Filter; label: string }[] = [\n { id: 'today', label: 'Today' },\n { id: 'upcoming', label: 'Upcoming' },\n { id: 'all', label: 'All' },\n { id: 'done', label: 'Done' },\n];\n\nfunction todayStr(): string {\n return new Date().toISOString().slice(0, 10);\n}\n\nfunction fmtDueLabel(due: string): string {\n const d = new Date(due + 'T00:00:00');\n const today = new Date(); today.setHours(0, 0, 0, 0);\n const diffDays = Math.round((d.getTime() - today.getTime()) / (24 * 3600 * 1000));\n if (diffDays === 0) return 'Today';\n if (diffDays === 1) return 'Tomorrow';\n if (diffDays === -1) return 'Yesterday';\n if (diffDays > 0 && diffDays < 7) return d.toLocaleDateString(undefined, { weekday: 'short' });\n return d.toLocaleDateString(undefined, { month: 'short', day: 'numeric' });\n}\n\nfunction isOverdue(t: TodoTask): boolean {\n return !t.done && !!t.dueDate && t.dueDate < todayStr();\n}\n\nexport default function TodoList() {\n const { tasks, addTask, updateTask, removeTask, toggleDone } = useTodoTasks();\n const [filter, setFilter] = useState<Filter>('today');\n const [editingId, setEditingId] = useState<string | null>(null);\n const [adding, setAdding] = useState(false);\n\n // ── Filtered view ──\n const today = todayStr();\n const visible = useMemo(() => {\n const sorted = [...tasks].sort((a, b) => {\n // Done tasks always sink to the bottom.\n if (a.done !== b.done) return a.done ? 1 : -1;\n // Overdue first, then today, then by due date, then by createdAt.\n const aOver = isOverdue(a), bOver = isOverdue(b);\n if (aOver !== bOver) return aOver ? -1 : 1;\n if (a.dueDate && b.dueDate && a.dueDate !== b.dueDate) return a.dueDate < b.dueDate ? -1 : 1;\n if (!!a.dueDate !== !!b.dueDate) return a.dueDate ? -1 : 1;\n return a.createdAt.localeCompare(b.createdAt);\n });\n if (filter === 'today') return sorted.filter(t => !t.done && (t.dueDate === today || isOverdue(t)));\n if (filter === 'upcoming') return sorted.filter(t => !t.done && t.dueDate && t.dueDate > today);\n if (filter === 'done') return sorted.filter(t => t.done);\n return sorted;\n }, [tasks, filter, today]);\n\n const counts = useMemo(() => ({\n today: tasks.filter(t => !t.done && (t.dueDate === today || isOverdue(t))).length,\n upcoming: tasks.filter(t => !t.done && t.dueDate && t.dueDate > today).length,\n all: tasks.filter(t => !t.done).length,\n done: tasks.filter(t => t.done).length,\n }), [tasks, today]);\n\n // ── Action handlers ──\n const handleAdd = (input: { name: string; dueDate?: string; estimated?: number }) => {\n addTask(input);\n setAdding(false);\n };\n\n const handleToggle = (id: string) => {\n toggleDone(id);\n };\n\n const handleEdit = (id: string, patch: Partial<TodoTask>) => {\n updateTask(id, patch);\n };\n\n const handleDelete = async (id: string) => {\n const t = tasks.find(x => x.id === id);\n if (!t) return;\n const ok = await confirm({\n title: 'Delete this task?',\n message: `“${t.name}” will be removed from the Todo List and the Pomodoro widget. This can't be undone.`,\n confirmLabel: 'Delete',\n variant: 'danger',\n });\n if (!ok) return;\n removeTask(id);\n setEditingId(null);\n };\n\n return (\n <div className=\"flex flex-col h-full\">\n {/* Header — filter pills + sync chip + add button */}\n <div className=\"flex items-center justify-between gap-3 px-4 py-2 border-b border-gray-200 shrink-0\">\n <div className=\"flex items-center gap-1\">\n {FILTERS.map(f => {\n const count = counts[f.id];\n const active = filter === f.id;\n return (\n <button key={f.id} onClick={() => setFilter(f.id)}\n className={`px-2.5 py-1 text-xs font-medium rounded-md transition-colors flex items-center gap-1.5 ${active ? 'bg-blue-600 text-white' : 'text-gray-600 hover:bg-gray-100'}`}>\n <span>{f.label}</span>\n <span className={`text-[10px] tabular-nums ${active ? 'text-white/80' : 'text-gray-400'}`}>{count}</span>\n </button>\n );\n })}\n </div>\n <div className=\"flex items-center gap-2\">\n <button onClick={() => setAdding(a => !a)}\n className=\"flex items-center gap-1 px-2.5 py-1 text-xs font-medium rounded-md bg-blue-600 text-white hover:bg-blue-700\">\n <svg className=\"h-3.5 w-3.5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2.5}>\n <path strokeLinecap=\"round\" d=\"M12 5v14M5 12h14\" />\n </svg>\n <span>Add</span>\n </button>\n </div>\n </div>\n\n {/* List */}\n <div className=\"flex-1 overflow-y-auto\">\n {adding && (\n <AddTaskRow onSubmit={handleAdd} onCancel={() => setAdding(false)} />\n )}\n {visible.length === 0 && !adding && (\n <div className=\"flex flex-col items-center justify-center h-full text-center px-6 text-gray-400\">\n <svg className=\"h-10 w-10 mb-2 text-gray-300\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 12l2 2 4-4\" />\n </svg>\n <p className=\"text-sm\">{filter === 'done' ? 'No completed tasks yet.' : 'Nothing here. Add a task to get started.'}</p>\n </div>\n )}\n {visible.map(task => (\n <TaskRow\n key={task.id}\n task={task}\n editing={editingId === task.id}\n onToggle={() => handleToggle(task.id)}\n onClick={() => setEditingId(editingId === task.id ? null : task.id)}\n onSave={(patch) => { handleEdit(task.id, patch); setEditingId(null); }}\n onDelete={() => handleDelete(task.id)}\n onCancelEdit={() => setEditingId(null)}\n />\n ))}\n </div>\n </div>\n );\n}\n\n// ─────────────────────────────────────────────────────────────────────\n// Row + add form\n// ─────────────────────────────────────────────────────────────────────\n\nfunction TaskRow({ task, editing, onToggle, onClick, onSave, onDelete, onCancelEdit }: {\n task: TodoTask;\n editing: boolean;\n onToggle: () => void;\n onClick: () => void;\n onSave: (patch: Partial<TodoTask>) => void;\n onDelete: () => void;\n onCancelEdit: () => void;\n}) {\n if (editing) {\n return <EditDrawer task={task} onSave={onSave} onCancel={onCancelEdit} onDelete={onDelete} />;\n }\n const dueLabel = task.dueDate ? fmtDueLabel(task.dueDate) : null;\n const overdue = isOverdue(task);\n const pomos = (task.estimated || task.completed)\n ? `${task.completed ?? 0}/${task.estimated ?? '?'}`\n : null;\n return (\n <div\n onClick={onClick}\n className=\"flex items-center gap-3 px-4 py-2.5 border-b border-gray-200 cursor-pointer hover:bg-gray-50 transition-colors\">\n <button onClick={(e) => { e.stopPropagation(); onToggle(); }}\n className=\"shrink-0\">\n {task.done ? (\n <svg className=\"h-5 w-5 text-blue-600\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M10 0a10 10 0 100 20 10 10 0 000-20zm-1 14.5l-4.5-4.5 1.4-1.4 3.1 3.1 6.1-6.1 1.4 1.4z\" />\n </svg>\n ) : (\n <svg className=\"h-5 w-5 text-gray-300 hover:text-gray-500\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n </svg>\n )}\n </button>\n <span className={`flex-1 text-sm truncate ${task.done ? 'line-through text-gray-400' : 'text-gray-800'}`}>\n {task.name || <span className=\"italic text-gray-400\">(untitled)</span>}\n </span>\n {pomos && (\n <span className=\"shrink-0 text-[11px] tabular-nums text-gray-500\" title=\"Pomodoros completed / estimated\">\n 🍅 {pomos}\n </span>\n )}\n {task.contextLabel && (\n <span className=\"shrink-0 text-[11px] font-medium px-1.5 py-0.5 rounded bg-purple-100 text-purple-700\" title={task.contextLabel}>\n {task.contextLabel}\n </span>\n )}\n {dueLabel && (\n <span className={`shrink-0 text-[11px] font-medium px-1.5 py-0.5 rounded ${overdue ? 'bg-red-100 text-red-700' : task.dueDate === todayStr() ? 'bg-blue-100 text-blue-700' : 'bg-gray-100 text-gray-600'}`}>\n {dueLabel}\n </span>\n )}\n </div>\n );\n}\n\nfunction EditDrawer({ task, onSave, onCancel, onDelete }: {\n task: TodoTask;\n onSave: (patch: Partial<TodoTask>) => void;\n onCancel: () => void;\n onDelete: () => void;\n}) {\n const [name, setName] = useState(task.name);\n const [dueDate, setDueDate] = useState(task.dueDate || '');\n const [estimated, setEstimated] = useState(task.estimated ?? 0);\n const [notes, setNotes] = useState(task.notes || '');\n\n const submit = () => onSave({\n name: name.trim(),\n dueDate: dueDate || undefined,\n estimated: estimated > 0 ? estimated : undefined,\n notes: notes.trim() || undefined,\n });\n\n return (\n <div className=\"px-4 py-3 border-b border-gray-200 bg-gray-50\">\n <input autoFocus value={name} onChange={e => setName(e.target.value)}\n onKeyDown={e => { if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) submit(); if (e.key === 'Escape') onCancel(); }}\n placeholder=\"Task name\"\n className=\"w-full text-sm font-medium bg-white border border-gray-200 rounded px-2 py-1.5 focus:outline-none focus:ring-1 focus:ring-blue-500\" />\n <div className=\"grid grid-cols-2 gap-2 mt-2\">\n <label className=\"flex flex-col text-[10px] font-semibold text-gray-500 uppercase tracking-wide\">\n Due\n <input type=\"date\" value={dueDate} onChange={e => setDueDate(e.target.value)}\n className=\"mt-0.5 text-sm bg-white border border-gray-200 rounded px-2 py-1 text-gray-800 focus:outline-none focus:ring-1 focus:ring-blue-500\" />\n </label>\n <label className=\"flex flex-col text-[10px] font-semibold text-gray-500 uppercase tracking-wide\">\n Est. pomos\n <input type=\"number\" min={0} max={20} value={estimated}\n onChange={e => setEstimated(Math.max(0, Math.min(20, parseInt(e.target.value, 10) || 0)))}\n className=\"mt-0.5 text-sm bg-white border border-gray-200 rounded px-2 py-1 text-gray-800 focus:outline-none focus:ring-1 focus:ring-blue-500\" />\n </label>\n </div>\n <textarea value={notes} onChange={e => setNotes(e.target.value)}\n placeholder=\"Notes (optional)\"\n rows={2}\n className=\"mt-2 w-full text-xs bg-white border border-gray-200 rounded px-2 py-1.5 text-gray-700 focus:outline-none focus:ring-1 focus:ring-blue-500 resize-none\" />\n <div className=\"flex items-center justify-between mt-2\">\n <button onClick={onDelete} className=\"text-xs text-red-600 hover:text-red-700\">\n Delete\n </button>\n <div className=\"flex gap-2\">\n <button onClick={onCancel} className=\"px-3 py-1 text-xs text-gray-600 hover:bg-gray-100 rounded\">Cancel</button>\n <button onClick={submit} className=\"px-3 py-1 text-xs font-semibold bg-blue-600 text-white rounded hover:bg-blue-700\">Save</button>\n </div>\n </div>\n </div>\n );\n}\n\nfunction AddTaskRow({ onSubmit, onCancel }: {\n onSubmit: (input: { name: string; dueDate?: string; estimated?: number }) => void;\n onCancel: () => void;\n}) {\n const [name, setName] = useState('');\n const [dueDate, setDueDate] = useState('');\n const [estimated, setEstimated] = useState(0);\n\n const submit = () => {\n const trimmed = name.trim();\n if (!trimmed) return;\n onSubmit({\n name: trimmed,\n dueDate: dueDate || undefined,\n estimated: estimated > 0 ? estimated : undefined,\n });\n };\n\n return (\n <div className=\"px-4 py-3 border-b border-gray-200 bg-blue-50/40\">\n <input autoFocus value={name} onChange={e => setName(e.target.value)}\n onKeyDown={e => { if (e.key === 'Enter') submit(); if (e.key === 'Escape') onCancel(); }}\n placeholder=\"What do you need to do?\"\n className=\"w-full text-sm font-medium bg-white border border-gray-200 rounded px-2 py-1.5 focus:outline-none focus:ring-1 focus:ring-blue-500\" />\n <div className=\"flex items-center gap-2 mt-2\">\n <label className=\"flex items-center gap-1.5 text-[10px] font-semibold text-gray-500 uppercase tracking-wide\">\n Due\n <input type=\"date\" value={dueDate} onChange={e => setDueDate(e.target.value)}\n className=\"text-xs bg-white border border-gray-200 rounded px-1.5 py-0.5 text-gray-800 focus:outline-none focus:ring-1 focus:ring-blue-500\" />\n </label>\n <label className=\"flex items-center gap-1.5 text-[10px] font-semibold text-gray-500 uppercase tracking-wide\">\n Est. pomos\n <input type=\"number\" min={0} max={20} value={estimated}\n onChange={e => setEstimated(Math.max(0, Math.min(20, parseInt(e.target.value, 10) || 0)))}\n className=\"w-12 text-xs bg-white border border-gray-200 rounded px-1.5 py-0.5 text-right text-gray-800 focus:outline-none focus:ring-1 focus:ring-blue-500\" />\n </label>\n <div className=\"flex-1\" />\n <button onClick={onCancel} className=\"px-3 py-1 text-xs text-gray-600 hover:bg-gray-100 rounded\">Cancel</button>\n <button onClick={submit} className=\"px-3 py-1 text-xs font-semibold bg-blue-600 text-white rounded hover:bg-blue-700\">Add</button>\n </div>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/apps/TodoList.tsx"],"names":[],"mappings":"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","file":"TodoList-26N6ZTLN.js","sourcesContent":["import { useMemo, useState } from 'react';\nimport { useTodoTasks } from './_todoStore';\nimport type { TodoTask } from './_todoTypes';\nimport { confirm } from '../shell/ConfirmDialog';\n\ntype Filter = 'today' | 'upcoming' | 'all' | 'done';\n\nconst FILTERS: { id: Filter; label: string }[] = [\n { id: 'today', label: 'Today' },\n { id: 'upcoming', label: 'Upcoming' },\n { id: 'all', label: 'All' },\n { id: 'done', label: 'Done' },\n];\n\nfunction todayStr(): string {\n return new Date().toISOString().slice(0, 10);\n}\n\nfunction fmtDueLabel(due: string): string {\n const d = new Date(due + 'T00:00:00');\n const today = new Date(); today.setHours(0, 0, 0, 0);\n const diffDays = Math.round((d.getTime() - today.getTime()) / (24 * 3600 * 1000));\n if (diffDays === 0) return 'Today';\n if (diffDays === 1) return 'Tomorrow';\n if (diffDays === -1) return 'Yesterday';\n if (diffDays > 0 && diffDays < 7) return d.toLocaleDateString(undefined, { weekday: 'short' });\n return d.toLocaleDateString(undefined, { month: 'short', day: 'numeric' });\n}\n\nfunction isOverdue(t: TodoTask): boolean {\n return !t.done && !!t.dueDate && t.dueDate < todayStr();\n}\n\nexport default function TodoList() {\n const { tasks, addTask, updateTask, removeTask, toggleDone } = useTodoTasks();\n const [filter, setFilter] = useState<Filter>('today');\n const [editingId, setEditingId] = useState<string | null>(null);\n const [adding, setAdding] = useState(false);\n\n // ── Filtered view ──\n const today = todayStr();\n const visible = useMemo(() => {\n const sorted = [...tasks].sort((a, b) => {\n // Done tasks always sink to the bottom.\n if (a.done !== b.done) return a.done ? 1 : -1;\n // Overdue first, then today, then by due date, then by createdAt.\n const aOver = isOverdue(a), bOver = isOverdue(b);\n if (aOver !== bOver) return aOver ? -1 : 1;\n if (a.dueDate && b.dueDate && a.dueDate !== b.dueDate) return a.dueDate < b.dueDate ? -1 : 1;\n if (!!a.dueDate !== !!b.dueDate) return a.dueDate ? -1 : 1;\n return a.createdAt.localeCompare(b.createdAt);\n });\n if (filter === 'today') return sorted.filter(t => !t.done && (t.dueDate === today || isOverdue(t)));\n if (filter === 'upcoming') return sorted.filter(t => !t.done && t.dueDate && t.dueDate > today);\n if (filter === 'done') return sorted.filter(t => t.done);\n return sorted;\n }, [tasks, filter, today]);\n\n const counts = useMemo(() => ({\n today: tasks.filter(t => !t.done && (t.dueDate === today || isOverdue(t))).length,\n upcoming: tasks.filter(t => !t.done && t.dueDate && t.dueDate > today).length,\n all: tasks.filter(t => !t.done).length,\n done: tasks.filter(t => t.done).length,\n }), [tasks, today]);\n\n // ── Action handlers ──\n const handleAdd = (input: { name: string; dueDate?: string; estimated?: number }) => {\n addTask(input);\n setAdding(false);\n };\n\n const handleToggle = (id: string) => {\n toggleDone(id);\n };\n\n const handleEdit = (id: string, patch: Partial<TodoTask>) => {\n updateTask(id, patch);\n };\n\n const handleDelete = async (id: string) => {\n const t = tasks.find(x => x.id === id);\n if (!t) return;\n const ok = await confirm({\n title: 'Delete this task?',\n message: `“${t.name}” will be removed from the Todo List and the Pomodoro widget. This can't be undone.`,\n confirmLabel: 'Delete',\n variant: 'danger',\n });\n if (!ok) return;\n removeTask(id);\n setEditingId(null);\n };\n\n return (\n <div className=\"flex flex-col h-full\">\n {/* Header — filter pills + sync chip + add button */}\n <div className=\"flex items-center justify-between gap-3 px-4 py-2 border-b border-gray-200 shrink-0\">\n <div className=\"flex items-center gap-1\">\n {FILTERS.map(f => {\n const count = counts[f.id];\n const active = filter === f.id;\n return (\n <button key={f.id} onClick={() => setFilter(f.id)}\n className={`px-2.5 py-1 text-xs font-medium rounded-md transition-colors flex items-center gap-1.5 ${active ? 'bg-blue-600 text-white' : 'text-gray-600 hover:bg-gray-100'}`}>\n <span>{f.label}</span>\n <span className={`text-[10px] tabular-nums ${active ? 'text-white/80' : 'text-gray-400'}`}>{count}</span>\n </button>\n );\n })}\n </div>\n <div className=\"flex items-center gap-2\">\n <button onClick={() => setAdding(a => !a)}\n className=\"flex items-center gap-1 px-2.5 py-1 text-xs font-medium rounded-md bg-blue-600 text-white hover:bg-blue-700\">\n <svg className=\"h-3.5 w-3.5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2.5}>\n <path strokeLinecap=\"round\" d=\"M12 5v14M5 12h14\" />\n </svg>\n <span>Add</span>\n </button>\n </div>\n </div>\n\n {/* List */}\n <div className=\"flex-1 overflow-y-auto\">\n {adding && (\n <AddTaskRow onSubmit={handleAdd} onCancel={() => setAdding(false)} />\n )}\n {visible.length === 0 && !adding && (\n <div className=\"flex flex-col items-center justify-center h-full text-center px-6 text-gray-400\">\n <svg className=\"h-10 w-10 mb-2 text-gray-300\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 12l2 2 4-4\" />\n </svg>\n <p className=\"text-sm\">{filter === 'done' ? 'No completed tasks yet.' : 'Nothing here. Add a task to get started.'}</p>\n </div>\n )}\n {visible.map(task => (\n <TaskRow\n key={task.id}\n task={task}\n editing={editingId === task.id}\n onToggle={() => handleToggle(task.id)}\n onClick={() => setEditingId(editingId === task.id ? null : task.id)}\n onSave={(patch) => { handleEdit(task.id, patch); setEditingId(null); }}\n onDelete={() => handleDelete(task.id)}\n onCancelEdit={() => setEditingId(null)}\n />\n ))}\n </div>\n </div>\n );\n}\n\n// ─────────────────────────────────────────────────────────────────────\n// Row + add form\n// ─────────────────────────────────────────────────────────────────────\n\nfunction TaskRow({ task, editing, onToggle, onClick, onSave, onDelete, onCancelEdit }: {\n task: TodoTask;\n editing: boolean;\n onToggle: () => void;\n onClick: () => void;\n onSave: (patch: Partial<TodoTask>) => void;\n onDelete: () => void;\n onCancelEdit: () => void;\n}) {\n if (editing) {\n return <EditDrawer task={task} onSave={onSave} onCancel={onCancelEdit} onDelete={onDelete} />;\n }\n const dueLabel = task.dueDate ? fmtDueLabel(task.dueDate) : null;\n const overdue = isOverdue(task);\n const pomos = (task.estimated || task.completed)\n ? `${task.completed ?? 0}/${task.estimated ?? '?'}`\n : null;\n return (\n <div\n onClick={onClick}\n className=\"flex items-center gap-3 px-4 py-2.5 border-b border-gray-200 cursor-pointer hover:bg-gray-50 transition-colors\">\n <button onClick={(e) => { e.stopPropagation(); onToggle(); }}\n className=\"shrink-0\">\n {task.done ? (\n <svg className=\"h-5 w-5 text-blue-600\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M10 0a10 10 0 100 20 10 10 0 000-20zm-1 14.5l-4.5-4.5 1.4-1.4 3.1 3.1 6.1-6.1 1.4 1.4z\" />\n </svg>\n ) : (\n <svg className=\"h-5 w-5 text-gray-300 hover:text-gray-500\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n </svg>\n )}\n </button>\n <span className={`flex-1 text-sm truncate ${task.done ? 'line-through text-gray-400' : 'text-gray-800'}`}>\n {task.name || <span className=\"italic text-gray-400\">(untitled)</span>}\n </span>\n {pomos && (\n <span className=\"shrink-0 text-[11px] tabular-nums text-gray-500\" title=\"Pomodoros completed / estimated\">\n 🍅 {pomos}\n </span>\n )}\n {task.contextLabel && (\n <span className=\"shrink-0 text-[11px] font-medium px-1.5 py-0.5 rounded bg-purple-100 text-purple-700\" title={task.contextLabel}>\n {task.contextLabel}\n </span>\n )}\n {dueLabel && (\n <span className={`shrink-0 text-[11px] font-medium px-1.5 py-0.5 rounded ${overdue ? 'bg-red-100 text-red-700' : task.dueDate === todayStr() ? 'bg-blue-100 text-blue-700' : 'bg-gray-100 text-gray-600'}`}>\n {dueLabel}\n </span>\n )}\n </div>\n );\n}\n\nfunction EditDrawer({ task, onSave, onCancel, onDelete }: {\n task: TodoTask;\n onSave: (patch: Partial<TodoTask>) => void;\n onCancel: () => void;\n onDelete: () => void;\n}) {\n const [name, setName] = useState(task.name);\n const [dueDate, setDueDate] = useState(task.dueDate || '');\n const [estimated, setEstimated] = useState(task.estimated ?? 0);\n const [notes, setNotes] = useState(task.notes || '');\n\n const submit = () => onSave({\n name: name.trim(),\n dueDate: dueDate || undefined,\n estimated: estimated > 0 ? estimated : undefined,\n notes: notes.trim() || undefined,\n });\n\n return (\n <div className=\"px-4 py-3 border-b border-gray-200 bg-gray-50\">\n <input autoFocus value={name} onChange={e => setName(e.target.value)}\n onKeyDown={e => { if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) submit(); if (e.key === 'Escape') onCancel(); }}\n placeholder=\"Task name\"\n className=\"w-full text-sm font-medium bg-white border border-gray-200 rounded px-2 py-1.5 focus:outline-none focus:ring-1 focus:ring-blue-500\" />\n <div className=\"grid grid-cols-2 gap-2 mt-2\">\n <label className=\"flex flex-col text-[10px] font-semibold text-gray-500 uppercase tracking-wide\">\n Due\n <input type=\"date\" value={dueDate} onChange={e => setDueDate(e.target.value)}\n className=\"mt-0.5 text-sm bg-white border border-gray-200 rounded px-2 py-1 text-gray-800 focus:outline-none focus:ring-1 focus:ring-blue-500\" />\n </label>\n <label className=\"flex flex-col text-[10px] font-semibold text-gray-500 uppercase tracking-wide\">\n Est. pomos\n <input type=\"number\" min={0} max={20} value={estimated}\n onChange={e => setEstimated(Math.max(0, Math.min(20, parseInt(e.target.value, 10) || 0)))}\n className=\"mt-0.5 text-sm bg-white border border-gray-200 rounded px-2 py-1 text-gray-800 focus:outline-none focus:ring-1 focus:ring-blue-500\" />\n </label>\n </div>\n <textarea value={notes} onChange={e => setNotes(e.target.value)}\n placeholder=\"Notes (optional)\"\n rows={2}\n className=\"mt-2 w-full text-xs bg-white border border-gray-200 rounded px-2 py-1.5 text-gray-700 focus:outline-none focus:ring-1 focus:ring-blue-500 resize-none\" />\n <div className=\"flex items-center justify-between mt-2\">\n <button onClick={onDelete} className=\"text-xs text-red-600 hover:text-red-700\">\n Delete\n </button>\n <div className=\"flex gap-2\">\n <button onClick={onCancel} className=\"px-3 py-1 text-xs text-gray-600 hover:bg-gray-100 rounded\">Cancel</button>\n <button onClick={submit} className=\"px-3 py-1 text-xs font-semibold bg-blue-600 text-white rounded hover:bg-blue-700\">Save</button>\n </div>\n </div>\n </div>\n );\n}\n\nfunction AddTaskRow({ onSubmit, onCancel }: {\n onSubmit: (input: { name: string; dueDate?: string; estimated?: number }) => void;\n onCancel: () => void;\n}) {\n const [name, setName] = useState('');\n const [dueDate, setDueDate] = useState('');\n const [estimated, setEstimated] = useState(0);\n\n const submit = () => {\n const trimmed = name.trim();\n if (!trimmed) return;\n onSubmit({\n name: trimmed,\n dueDate: dueDate || undefined,\n estimated: estimated > 0 ? estimated : undefined,\n });\n };\n\n return (\n <div className=\"px-4 py-3 border-b border-gray-200 bg-blue-50/40\">\n <input autoFocus value={name} onChange={e => setName(e.target.value)}\n onKeyDown={e => { if (e.key === 'Enter') submit(); if (e.key === 'Escape') onCancel(); }}\n placeholder=\"What do you need to do?\"\n className=\"w-full text-sm font-medium bg-white border border-gray-200 rounded px-2 py-1.5 focus:outline-none focus:ring-1 focus:ring-blue-500\" />\n <div className=\"flex items-center gap-2 mt-2\">\n <label className=\"flex items-center gap-1.5 text-[10px] font-semibold text-gray-500 uppercase tracking-wide\">\n Due\n <input type=\"date\" value={dueDate} onChange={e => setDueDate(e.target.value)}\n className=\"text-xs bg-white border border-gray-200 rounded px-1.5 py-0.5 text-gray-800 focus:outline-none focus:ring-1 focus:ring-blue-500\" />\n </label>\n <label className=\"flex items-center gap-1.5 text-[10px] font-semibold text-gray-500 uppercase tracking-wide\">\n Est. pomos\n <input type=\"number\" min={0} max={20} value={estimated}\n onChange={e => setEstimated(Math.max(0, Math.min(20, parseInt(e.target.value, 10) || 0)))}\n className=\"w-12 text-xs bg-white border border-gray-200 rounded px-1.5 py-0.5 text-right text-gray-800 focus:outline-none focus:ring-1 focus:ring-blue-500\" />\n </label>\n <div className=\"flex-1\" />\n <button onClick={onCancel} className=\"px-3 py-1 text-xs text-gray-600 hover:bg-gray-100 rounded\">Cancel</button>\n <button onClick={submit} className=\"px-3 py-1 text-xs font-semibold bg-blue-600 text-white rounded hover:bg-blue-700\">Add</button>\n </div>\n </div>\n );\n}\n"]}
|
package/dist/apps/index.d.ts
CHANGED
|
@@ -45,10 +45,6 @@ interface PdfPreviewHandle {
|
|
|
45
45
|
declare function setPdfPreview(data: PdfPreviewData): PdfPreviewHandle;
|
|
46
46
|
declare function Preview$1(): react_jsx_runtime.JSX.Element;
|
|
47
47
|
|
|
48
|
-
declare function Calendar$1(): react_jsx_runtime.JSX.Element;
|
|
49
|
-
|
|
50
|
-
declare function Email$1(): react_jsx_runtime.JSX.Element;
|
|
51
|
-
|
|
52
48
|
declare function Minesweeper$1(): react_jsx_runtime.JSX.Element;
|
|
53
49
|
|
|
54
50
|
declare function Game2048$1(): react_jsx_runtime.JSX.Element;
|
|
@@ -119,17 +115,14 @@ declare const Sudoku: react.LazyExoticComponent<typeof Sudoku$1>;
|
|
|
119
115
|
declare const Tetris: react.LazyExoticComponent<typeof Tetris$1>;
|
|
120
116
|
declare const Game2048: react.LazyExoticComponent<typeof Game2048$1>;
|
|
121
117
|
declare const Minesweeper: react.LazyExoticComponent<typeof Minesweeper$1>;
|
|
122
|
-
declare const Email: react.LazyExoticComponent<typeof Email$1>;
|
|
123
|
-
declare const Calendar: react.LazyExoticComponent<typeof Calendar$1>;
|
|
124
118
|
declare const Preview: react.LazyExoticComponent<typeof Preview$1>;
|
|
125
119
|
declare const Documents: react.LazyExoticComponent<typeof Documents$1>;
|
|
126
120
|
declare const Files: react.LazyExoticComponent<typeof Files$1>;
|
|
127
121
|
declare const Browser: react.LazyExoticComponent<typeof Browser$1>;
|
|
128
122
|
declare const utilityApps: WindowRegistry;
|
|
129
123
|
declare const gameApps: WindowRegistry;
|
|
130
|
-
declare const mailApps: WindowRegistry;
|
|
131
124
|
declare const documentApps: WindowRegistry;
|
|
132
125
|
declare const webApps: WindowRegistry;
|
|
133
126
|
declare const bundledApps: WindowRegistry;
|
|
134
127
|
|
|
135
|
-
export { Browser, Calculator,
|
|
128
|
+
export { Browser, Calculator, Checkers, Chess, CurrencyConverter, Documents, Files, Game2048, Minesweeper, Notepad, type PdfPreviewData, type PdfPreviewHandle, PomodoroTimer, Preview, Spreadsheet, type SpreadsheetPreviewData, type SpreadsheetPreviewHandle, Stock, Sudoku, Tetris, TodoList, Weather, WorldClock, bundledApps, documentApps, gameApps, openFilesInTrashMode, setPdfPreview, setSpreadsheetPreview, utilityApps, webApps };
|
package/dist/apps/index.js
CHANGED
|
@@ -13,19 +13,17 @@ var Calculator = lazy(() => import('../Calculator-37EIFRDU.js'));
|
|
|
13
13
|
var Spreadsheet = lazy(() => import('../Spreadsheet-UZMNMLZH.js'));
|
|
14
14
|
var Weather = lazy(() => import('../Weather-R6ULA547.js'));
|
|
15
15
|
var CurrencyConverter = lazy(() => import('../CurrencyConverter-PWX3FKRK.js'));
|
|
16
|
-
var PomodoroTimer = lazy(() => import('../PomodoroTimer-
|
|
16
|
+
var PomodoroTimer = lazy(() => import('../PomodoroTimer-5K55K26A.js'));
|
|
17
17
|
var Notepad = lazy(() => import('../Notepad-MXEQCIC7.js'));
|
|
18
18
|
var WorldClock = lazy(() => import('../WorldClock-HHIBQXUR.js'));
|
|
19
19
|
var Stock = lazy(() => import('../Stock-ZXZOCSJD.js'));
|
|
20
|
-
var TodoList = lazy(() => import('../TodoList-
|
|
20
|
+
var TodoList = lazy(() => import('../TodoList-26N6ZTLN.js'));
|
|
21
21
|
var Chess = lazy(() => import('../Chess-C5BY45NA.js'));
|
|
22
22
|
var Checkers = lazy(() => import('../Checkers-MIAHIKJH.js'));
|
|
23
23
|
var Sudoku = lazy(() => import('../Sudoku-XHLYCEVT.js'));
|
|
24
24
|
var Tetris = lazy(() => import('../Tetris-ZHCZYL24.js'));
|
|
25
25
|
var Game2048 = lazy(() => import('../Game2048-3RH3ELRD.js'));
|
|
26
|
-
var Minesweeper = lazy(() => import('../Minesweeper-
|
|
27
|
-
var Email = lazy(() => import('../Email-ZUDCRZKB.js'));
|
|
28
|
-
var Calendar = lazy(() => import('../Calendar-QQYHT57Z.js'));
|
|
26
|
+
var Minesweeper = lazy(() => import('../Minesweeper-M6HIJYPL.js'));
|
|
29
27
|
var Preview = lazy(() => import('../Preview-VMKMY6SY.js'));
|
|
30
28
|
var Documents = lazy(() => import('../Documents-W2DABIOW.js'));
|
|
31
29
|
var Files = lazy(() => import('../Files-XNAPEBFF.js'));
|
|
@@ -49,10 +47,6 @@ var gameApps = {
|
|
|
49
47
|
"/2048": { component: Game2048, label: "2048", size: "sm", compact: true },
|
|
50
48
|
"/minesweeper": { component: Minesweeper, label: "Minesweeper", size: "sm", compact: true }
|
|
51
49
|
};
|
|
52
|
-
var mailApps = {
|
|
53
|
-
"/email": { component: Email, label: "Email", size: "2xl", appStyle: true },
|
|
54
|
-
"/calendar": { component: Calendar, label: "Calendar", size: "xl" }
|
|
55
|
-
};
|
|
56
50
|
var documentApps = {
|
|
57
51
|
"/preview": { component: Preview, label: "Preview", size: "2xl", appStyle: true, multiInstance: true },
|
|
58
52
|
"/documents": { component: Documents, label: "Documents", size: "xl", appStyle: true, multiInstance: true },
|
|
@@ -64,11 +58,10 @@ var webApps = {
|
|
|
64
58
|
var bundledApps = {
|
|
65
59
|
...utilityApps,
|
|
66
60
|
...gameApps,
|
|
67
|
-
...mailApps,
|
|
68
61
|
...documentApps,
|
|
69
62
|
...webApps
|
|
70
63
|
};
|
|
71
64
|
|
|
72
|
-
export { Browser, Calculator,
|
|
65
|
+
export { Browser, Calculator, Checkers, Chess, CurrencyConverter, Documents, Files, Game2048, Minesweeper, Notepad, PomodoroTimer, Preview, Spreadsheet, Stock, Sudoku, Tetris, TodoList, Weather, WorldClock, bundledApps, documentApps, gameApps, utilityApps, webApps };
|
|
73
66
|
//# sourceMappingURL=index.js.map
|
|
74
67
|
//# sourceMappingURL=index.js.map
|
package/dist/apps/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/apps/index.ts"],"names":[],"mappings":";;;;;;;;;;;AAwBA,IAAM,UAAA,GAAa,IAAA,CAAK,MAAM,OAAO,2BAAc,CAAC;AACpD,IAAM,WAAA,GAAc,IAAA,CAAK,MAAM,OAAO,4BAAe,CAAC;AACtD,IAAM,OAAA,GAAU,IAAA,CAAK,MAAM,OAAO,wBAAW,CAAC;AAC9C,IAAM,iBAAA,GAAoB,IAAA,CAAK,MAAM,OAAO,kCAAqB,CAAC;AAClE,IAAM,aAAA,GAAgB,IAAA,CAAK,MAAM,OAAO,8BAAiB,CAAC;AAC1D,IAAM,OAAA,GAAU,IAAA,CAAK,MAAM,OAAO,wBAAW,CAAC;AAC9C,IAAM,UAAA,GAAa,IAAA,CAAK,MAAM,OAAO,2BAAc,CAAC;AACpD,IAAM,KAAA,GAAQ,IAAA,CAAK,MAAM,OAAO,sBAAS,CAAC;AAC1C,IAAM,QAAA,GAAW,IAAA,CAAK,MAAM,OAAO,yBAAY,CAAC;AAGhD,IAAM,KAAA,GAAQ,IAAA,CAAK,MAAM,OAAO,sBAAS,CAAC;AAC1C,IAAM,QAAA,GAAW,IAAA,CAAK,MAAM,OAAO,yBAAY,CAAC;AAChD,IAAM,MAAA,GAAS,IAAA,CAAK,MAAM,OAAO,uBAAU,CAAC;AAC5C,IAAM,MAAA,GAAS,IAAA,CAAK,MAAM,OAAO,uBAAU,CAAC;AAC5C,IAAM,QAAA,GAAW,IAAA,CAAK,MAAM,OAAO,yBAAY,CAAC;AAChD,IAAM,WAAA,GAAc,IAAA,CAAK,MAAM,OAAO,4BAAe,CAAC;AAGtD,IAAM,
|
|
1
|
+
{"version":3,"sources":["../../src/apps/index.ts"],"names":[],"mappings":";;;;;;;;;;;AAwBA,IAAM,UAAA,GAAa,IAAA,CAAK,MAAM,OAAO,2BAAc,CAAC;AACpD,IAAM,WAAA,GAAc,IAAA,CAAK,MAAM,OAAO,4BAAe,CAAC;AACtD,IAAM,OAAA,GAAU,IAAA,CAAK,MAAM,OAAO,wBAAW,CAAC;AAC9C,IAAM,iBAAA,GAAoB,IAAA,CAAK,MAAM,OAAO,kCAAqB,CAAC;AAClE,IAAM,aAAA,GAAgB,IAAA,CAAK,MAAM,OAAO,8BAAiB,CAAC;AAC1D,IAAM,OAAA,GAAU,IAAA,CAAK,MAAM,OAAO,wBAAW,CAAC;AAC9C,IAAM,UAAA,GAAa,IAAA,CAAK,MAAM,OAAO,2BAAc,CAAC;AACpD,IAAM,KAAA,GAAQ,IAAA,CAAK,MAAM,OAAO,sBAAS,CAAC;AAC1C,IAAM,QAAA,GAAW,IAAA,CAAK,MAAM,OAAO,yBAAY,CAAC;AAGhD,IAAM,KAAA,GAAQ,IAAA,CAAK,MAAM,OAAO,sBAAS,CAAC;AAC1C,IAAM,QAAA,GAAW,IAAA,CAAK,MAAM,OAAO,yBAAY,CAAC;AAChD,IAAM,MAAA,GAAS,IAAA,CAAK,MAAM,OAAO,uBAAU,CAAC;AAC5C,IAAM,MAAA,GAAS,IAAA,CAAK,MAAM,OAAO,uBAAU,CAAC;AAC5C,IAAM,QAAA,GAAW,IAAA,CAAK,MAAM,OAAO,yBAAY,CAAC;AAChD,IAAM,WAAA,GAAc,IAAA,CAAK,MAAM,OAAO,4BAAe,CAAC;AAGtD,IAAM,OAAA,GAAU,IAAA,CAAK,MAAM,OAAO,wBAAW,CAAC;AAC9C,IAAM,SAAA,GAAY,IAAA,CAAK,MAAM,OAAO,0BAAa,CAAC;AAClD,IAAM,KAAA,GAAQ,IAAA,CAAK,MAAM,OAAO,sBAAS,CAAC;AAG1C,IAAM,OAAA,GAAU,IAAA,CAAK,MAAM,OAAO,wBAAW,CAAC;AAEvC,IAAM,WAAA,GAA8B;AAAA,EACzC,eAAe,EAAE,SAAA,EAAW,YAAY,KAAA,EAAO,YAAA,EAAc,MAAM,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,OAAA,EAAS,MAAM,MAAA,EAAQ,IAAA,EAAM,YAAY,CAAC,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAClJ,cAAA,EAAgB,EAAE,SAAA,EAAW,WAAA,EAAa,KAAA,EAAO,cAAA,EAAgB,IAAA,EAAM,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,aAAA,EAAe,IAAA,EAAK;AAAA,EAClH,UAAA,EAAY,EAAE,SAAA,EAAW,OAAA,EAAS,OAAO,SAAA,EAAW,IAAA,EAAM,IAAA,EAAM,aAAA,EAAe,IAAA,EAAK;AAAA,EACpF,YAAY,EAAE,SAAA,EAAW,SAAS,KAAA,EAAO,SAAA,EAAW,MAAM,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA,EAAQ,MAAM,UAAA,EAAY,IAAA,EAAM,YAAY,CAAC,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EACtI,aAAa,EAAE,SAAA,EAAW,mBAAmB,KAAA,EAAO,oBAAA,EAAsB,MAAM,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA,EAAQ,MAAM,UAAA,EAAY,IAAA,EAAM,YAAY,CAAC,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAC5J,aAAa,EAAE,SAAA,EAAW,aAAA,EAAe,KAAA,EAAO,kBAAkB,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,QAAQ,IAAA,EAAM,UAAA,EAAY,CAAC,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAClI,gBAAgB,EAAE,SAAA,EAAW,YAAY,KAAA,EAAO,aAAA,EAAe,MAAM,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA,EAAQ,MAAM,UAAA,EAAY,IAAA,EAAM,YAAY,CAAC,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EACjJ,UAAU,EAAE,SAAA,EAAW,OAAO,KAAA,EAAO,QAAA,EAAU,MAAM,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA,EAAQ,MAAM,UAAA,EAAY,IAAA,EAAM,YAAY,CAAC,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EACjI,OAAA,EAAS,EAAE,SAAA,EAAW,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,IAAA,EAAM,IAAA,EAAM,UAAA,EAAY,CAAC,GAAA,EAAK,GAAG,CAAA;AACvF;AAEO,IAAM,QAAA,GAA2B;AAAA,EACtC,QAAA,EAAU,EAAE,SAAA,EAAW,KAAA,EAAO,OAAO,OAAA,EAAS,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,IAAA,EAAK;AAAA,EACxE,WAAA,EAAa,EAAE,SAAA,EAAW,QAAA,EAAU,OAAO,UAAA,EAAY,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,IAAA,EAAK;AAAA,EACjF,SAAA,EAAW,EAAE,SAAA,EAAW,MAAA,EAAQ,OAAO,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,UAAA,EAAY,CAAC,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EACnG,SAAA,EAAW,EAAE,SAAA,EAAW,MAAA,EAAQ,OAAO,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,UAAA,EAAY,CAAC,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EACnG,OAAA,EAAS,EAAE,SAAA,EAAW,QAAA,EAAU,OAAO,MAAA,EAAQ,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,IAAA,EAAK;AAAA,EACzE,cAAA,EAAgB,EAAE,SAAA,EAAW,WAAA,EAAa,OAAO,aAAA,EAAe,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,IAAA;AACvF;AAEO,IAAM,YAAA,GAA+B;AAAA,EAC1C,UAAA,EAAY,EAAE,SAAA,EAAW,OAAA,EAAS,KAAA,EAAO,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,aAAA,EAAe,IAAA,EAAK;AAAA,EACrG,YAAA,EAAc,EAAE,SAAA,EAAW,SAAA,EAAW,KAAA,EAAO,WAAA,EAAa,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,aAAA,EAAe,IAAA,EAAK;AAAA,EAC1G,QAAA,EAAU,EAAE,SAAA,EAAW,KAAA,EAAO,OAAO,OAAA,EAAS,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,IAAA;AACtE;AAEO,IAAM,OAAA,GAA0B;AAAA,EACrC,UAAA,EAAY,EAAE,SAAA,EAAW,OAAA,EAAS,KAAA,EAAO,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,aAAA,EAAe,IAAA;AAClG;AAEO,IAAM,WAAA,GAA8B;AAAA,EACzC,GAAG,WAAA;AAAA,EACH,GAAG,QAAA;AAAA,EACH,GAAG,YAAA;AAAA,EACH,GAAG;AACL","file":"index.js","sourcesContent":["/**\n * Bundled apps — pre-built window registry entries for the 14 apps that ship\n * with `react-os-shell`. Consumers compose them into their own registry via\n * `createWindowRegistry`:\n *\n * import { createWindowRegistry } from 'react-os-shell';\n * import { bundledApps } from 'react-os-shell/apps';\n * import { erpEntities } from './shell-config';\n *\n * const windows = createWindowRegistry(bundledApps, erpEntities);\n *\n * Subsets are also exported (`utilityApps`, `gameApps`) so a\n * consumer can pick-and-choose without importing every component.\n *\n * NOTE: 2 apps require consumer-supplied persistence (Notepad for stored\n * content, Minesweeper for leaderboard). They're exported individually\n * but absent from `bundledApps` — wire the prefs provider to opt them in.\n * WorldClock uses `useShellPrefs()` so it lives in `bundledApps`; without a\n * consumer-supplied prefs adapter the city list won't survive a reload.\n */\nimport { lazy } from 'react';\nimport type { WindowRegistry } from '../windowRegistry/types';\n\n// ── Utility apps ──\nconst Calculator = lazy(() => import('./Calculator'));\nconst Spreadsheet = lazy(() => import('./Spreadsheet'));\nconst Weather = lazy(() => import('./Weather'));\nconst CurrencyConverter = lazy(() => import('./CurrencyConverter'));\nconst PomodoroTimer = lazy(() => import('./PomodoroTimer'));\nconst Notepad = lazy(() => import('./Notepad'));\nconst WorldClock = lazy(() => import('./WorldClock'));\nconst Stock = lazy(() => import('./Stock'));\nconst TodoList = lazy(() => import('./TodoList'));\n\n// ── Games ──\nconst Chess = lazy(() => import('./Chess'));\nconst Checkers = lazy(() => import('./Checkers'));\nconst Sudoku = lazy(() => import('./Sudoku'));\nconst Tetris = lazy(() => import('./Tetris'));\nconst Game2048 = lazy(() => import('./Game2048'));\nconst Minesweeper = lazy(() => import('./Minesweeper'));\n\n// ── Document apps ──\nconst Preview = lazy(() => import('./Preview'));\nconst Documents = lazy(() => import('./Documents'));\nconst Files = lazy(() => import('./Files'));\n\n// ── Web ──\nconst Browser = lazy(() => import('./Browser'));\n\nexport const utilityApps: WindowRegistry = {\n '/calculator': { component: Calculator, label: 'Calculator', size: 'sm', allowPinOnTop: true, utility: true, widget: true, dimensions: [280, 420] },\n '/spreadsheet': { component: Spreadsheet, label: 'Spreadsheets', size: '2xl', appStyle: true, multiInstance: true },\n '/notepad': { component: Notepad, label: 'Notepad', size: 'lg', allowPinOnTop: true },\n '/weather': { component: Weather, label: 'Weather', size: 'sm', utility: true, widget: true, autoHeight: true, dimensions: [320, 400] },\n '/currency': { component: CurrencyConverter, label: 'Currency Converter', size: 'sm', utility: true, widget: true, autoHeight: true, dimensions: [320, 480] },\n '/pomodoro': { component: PomodoroTimer, label: 'Pomodoro Timer', size: 'sm', utility: true, widget: true, dimensions: [320, 600] },\n '/world-clock': { component: WorldClock, label: 'World Clock', size: 'sm', utility: true, widget: true, autoHeight: true, dimensions: [320, 480] },\n '/stock': { component: Stock, label: 'Stocks', size: 'sm', utility: true, widget: true, autoHeight: true, dimensions: [320, 360] },\n '/todo': { component: TodoList, label: 'Todo List', size: 'md', dimensions: [560, 640] },\n};\n\nexport const gameApps: WindowRegistry = {\n '/chess': { component: Chess, label: 'Chess', size: 'lg', compact: true },\n '/checkers': { component: Checkers, label: 'Checkers', size: 'lg', compact: true },\n '/sudoku': { component: Sudoku, label: 'Sudoku', size: 'sm', compact: true, dimensions: [360, 535] },\n '/tetris': { component: Tetris, label: 'Tetris', size: 'md', compact: true, dimensions: [452, 618] },\n '/2048': { component: Game2048, label: '2048', size: 'sm', compact: true },\n '/minesweeper': { component: Minesweeper, label: 'Minesweeper', size: 'sm', compact: true },\n};\n\nexport const documentApps: WindowRegistry = {\n '/preview': { component: Preview, label: 'Preview', size: '2xl', appStyle: true, multiInstance: true },\n '/documents': { component: Documents, label: 'Documents', size: 'xl', appStyle: true, multiInstance: true },\n '/files': { component: Files, label: 'Files', size: 'xl', appStyle: true },\n};\n\nexport const webApps: WindowRegistry = {\n '/browser': { component: Browser, label: 'Browser', size: '2xl', appStyle: true, multiInstance: true },\n};\n\nexport const bundledApps: WindowRegistry = {\n ...utilityApps,\n ...gameApps,\n ...documentApps,\n ...webApps,\n};\n\nexport {\n Calculator,\n Spreadsheet,\n Notepad,\n Weather,\n CurrencyConverter,\n PomodoroTimer,\n WorldClock,\n Stock,\n TodoList,\n Chess,\n Checkers,\n Sudoku,\n Tetris,\n Game2048,\n Minesweeper,\n Preview,\n Documents,\n Files,\n Browser,\n};\n\nexport { setPdfPreview } from './Preview';\nexport { setSpreadsheetPreview } from './Spreadsheet';\nexport { openFilesInTrashMode } from './Files';\nexport type { PdfPreviewData, PdfPreviewHandle } from './Preview';\nexport type { SpreadsheetPreviewData, SpreadsheetPreviewHandle } from './Spreadsheet';\n"]}
|
|
@@ -170,5 +170,5 @@ function migratePomodoroTasksOnce(currentTasks, setAllTasks) {
|
|
|
170
170
|
}
|
|
171
171
|
|
|
172
172
|
export { migratePomodoroTasksOnce, setShellTodoProvider, useTodoTasks };
|
|
173
|
-
//# sourceMappingURL=chunk-
|
|
174
|
-
//# sourceMappingURL=chunk-
|
|
173
|
+
//# sourceMappingURL=chunk-QTJ2CHJX.js.map
|
|
174
|
+
//# sourceMappingURL=chunk-QTJ2CHJX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/apps/_todoStore.ts"],"names":[],"mappings":"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","file":"chunk-QTJ2CHJX.js","sourcesContent":["/**\n * Shared task store for the Todo List app and the Pomodoro widget — both\n * read/write the same list via `useTodoTasks()`.\n *\n * Two backends:\n * • Default: `useShellPrefs()` → `prefs.todo_tasks` (per-user prefs blob).\n * • Opt-in: a consumer-supplied `TodoProvider` registered with\n * `setShellTodoProvider(...)`. When set, the three apps read/write through\n * it instead — letting an ERP make the shell's tasks the SAME records as\n * its own task table, and tag each with a `contextLabel` badge (e.g.\n * \"Deal: Acme\"). Mirrors `setShellApiClient`.\n *\n * `migratePomodoroTasksOnce()` folds legacy `localStorage.pomodoro_tasks`\n * into the prefs store on first Pomodoro mount (no-op in provider mode).\n */\nimport { useCallback, useMemo, useSyncExternalStore } from 'react';\nimport { useShellPrefs } from '../shell/ShellPrefs';\nimport type { TodoTask } from './_todoTypes';\n\nconst POMODORO_LEGACY_KEY = 'pomodoro_tasks';\nconst POMODORO_LEGACY_MIGRATED_FLAG = 'pomodoro_tasks_migrated';\n\nfunction uid(): string {\n return Math.random().toString(36).slice(2, 11);\n}\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nexport interface UseTodoTasks {\n tasks: TodoTask[];\n /** Add a new task. Returns the id of the freshly-added task. */\n addTask: (input: Partial<Omit<TodoTask, 'id' | 'createdAt' | 'updatedAt'>> & { name: string }) => string;\n /** Patch any subset of fields on a task by id. `updatedAt` is auto-bumped. */\n updateTask: (id: string, patch: Partial<TodoTask>) => void;\n /** Remove a task by id. Used by both Pomodoro's kebab menu and TodoList's delete action. */\n removeTask: (id: string) => void;\n /** Flip `done`. Same as `updateTask(id, { done: !done })` but faster to type at call sites. */\n toggleDone: (id: string) => void;\n /** Replace the entire list. Used by Google Tasks sync after a pull. */\n setAllTasks: (tasks: TodoTask[]) => void;\n}\n\n/**\n * A consumer-supplied task backend. Registering one (opt-in) routes every\n * shell task surface through it instead of the prefs blob. Methods map to/from\n * the shell's `TodoTask` shape, including the optional `source`/`contextLabel`.\n */\nexport interface TodoProvider {\n list(): Promise<TodoTask[]>;\n create(input: Partial<Omit<TodoTask, 'id' | 'createdAt' | 'updatedAt'>> & { name: string }): Promise<TodoTask>;\n update(id: string, patch: Partial<TodoTask>): Promise<TodoTask>;\n remove(id: string): Promise<void>;\n}\n\n// ── Module-level provider store (shared across all consumers) ──\nlet provider: TodoProvider | null = null;\nlet cache: TodoTask[] = [];\nlet loaded = false;\nlet inflight: Promise<void> | null = null;\nconst listeners = new Set<() => void>();\n\nfunction emit(): void {\n for (const l of listeners) l();\n}\n\nfunction setCache(next: TodoTask[]): void {\n cache = next;\n emit();\n}\n\nfunction refresh(): Promise<void> {\n const p = provider;\n if (!p) {\n cache = [];\n loaded = true;\n emit();\n return Promise.resolve();\n }\n inflight = p\n .list()\n .then(rows => {\n if (provider === p) {\n cache = rows;\n loaded = true;\n emit();\n }\n })\n .catch(() => {\n if (provider === p) {\n loaded = true;\n emit();\n }\n })\n .finally(() => {\n inflight = null;\n });\n return inflight;\n}\n\n/** Register (or clear with `null`) the backend task provider. Opt-in. */\nexport function setShellTodoProvider(next: TodoProvider | null): void {\n provider = next;\n cache = [];\n loaded = false;\n if (next) refresh();\n else emit();\n}\n\nexport function hasShellTodoProvider(): boolean {\n return provider !== null;\n}\n\nfunction subscribe(cb: () => void): () => void {\n listeners.add(cb);\n if (provider && !loaded && !inflight) refresh();\n return () => {\n listeners.delete(cb);\n };\n}\n\nfunction getSnapshot(): TodoTask[] {\n return cache;\n}\n\n// ── Prefs-backed implementation (default / fallback) ──\nfunction usePrefsTodoTasks(): UseTodoTasks {\n const { prefs, save } = useShellPrefs();\n const tasks: TodoTask[] = useMemo(() => {\n const raw = prefs.todo_tasks;\n return Array.isArray(raw) ? (raw as TodoTask[]) : [];\n }, [prefs.todo_tasks]);\n\n const writeTasks = useCallback((next: TodoTask[]) => {\n save({ todo_tasks: next });\n }, [save]);\n\n const addTask = useCallback<UseTodoTasks['addTask']>((input) => {\n const id = uid();\n const ts = nowIso();\n const task: TodoTask = { done: false, ...input, name: input.name.trim(), id, createdAt: ts, updatedAt: ts };\n writeTasks([...tasks, task]);\n return id;\n }, [tasks, writeTasks]);\n\n const updateTask = useCallback<UseTodoTasks['updateTask']>((id, patch) => {\n writeTasks(tasks.map(t => (t.id === id ? { ...t, ...patch, id: t.id, updatedAt: nowIso() } : t)));\n }, [tasks, writeTasks]);\n\n const removeTask = useCallback<UseTodoTasks['removeTask']>((id) => {\n writeTasks(tasks.filter(t => t.id !== id));\n }, [tasks, writeTasks]);\n\n const toggleDone = useCallback<UseTodoTasks['toggleDone']>((id) => {\n const target = tasks.find(t => t.id === id);\n if (target) updateTask(id, { done: !target.done });\n }, [tasks, updateTask]);\n\n return { tasks, addTask, updateTask, removeTask, toggleDone, setAllTasks: writeTasks };\n}\n\n// ── Public hook (provider-aware) ──\nexport function useTodoTasks(): UseTodoTasks {\n // Both hooks always run (rules of hooks); the active impl is chosen below.\n const prefsImpl = usePrefsTodoTasks();\n const providerTasks = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n const addTask = useCallback<UseTodoTasks['addTask']>((input) => {\n const p = provider;\n if (!p) return prefsImpl.addTask(input);\n const tempId = 'tmp-' + uid();\n const ts = nowIso();\n const optimistic: TodoTask = { done: false, ...input, name: input.name.trim(), id: tempId, createdAt: ts, updatedAt: ts };\n setCache([...cache, optimistic]);\n p.create({ ...input, name: input.name.trim() })\n // Merge so server-owned fields win but client-only fields (estimated/\n // completed/notes the backend may not persist) survive the round-trip.\n .then(saved => setCache(cache.map(t => (t.id === tempId ? { ...optimistic, ...saved } : t))))\n .catch(() => setCache(cache.filter(t => t.id !== tempId)));\n return tempId;\n }, [prefsImpl]);\n\n const updateTask = useCallback<UseTodoTasks['updateTask']>((id, patch) => {\n const p = provider;\n if (!p) return prefsImpl.updateTask(id, patch);\n setCache(cache.map(t => (t.id === id ? { ...t, ...patch, id, updatedAt: nowIso() } : t)));\n p.update(id, patch).catch(() => { refresh(); });\n }, [prefsImpl]);\n\n const removeTask = useCallback<UseTodoTasks['removeTask']>((id) => {\n const p = provider;\n if (!p) return prefsImpl.removeTask(id);\n const prev = cache;\n setCache(cache.filter(t => t.id !== id));\n p.remove(id).catch(() => setCache(prev));\n }, [prefsImpl]);\n\n const toggleDone = useCallback<UseTodoTasks['toggleDone']>((id) => {\n if (!provider) return prefsImpl.toggleDone(id);\n const target = cache.find(t => t.id === id);\n if (target) updateTask(id, { done: !target.done });\n }, [prefsImpl, updateTask]);\n\n const setAllTasks = useCallback<UseTodoTasks['setAllTasks']>((next) => {\n // Provider owns persistence — bulk replace (Google Tasks sync) is a no-op there.\n if (!provider) prefsImpl.setAllTasks(next);\n }, [prefsImpl]);\n\n if (!hasShellTodoProvider()) return prefsImpl;\n return { tasks: providerTasks, addTask, updateTask, removeTask, toggleDone, setAllTasks };\n}\n\n/**\n * One-time migration: pull any tasks the Pomodoro widget previously\n * persisted to `localStorage.pomodoro_tasks` into the shared store.\n * No-op when a provider is registered (the provider owns persistence).\n */\nexport function migratePomodoroTasksOnce(\n currentTasks: TodoTask[],\n setAllTasks: (next: TodoTask[]) => void,\n): void {\n try {\n if (localStorage.getItem(POMODORO_LEGACY_MIGRATED_FLAG)) return;\n const raw = localStorage.getItem(POMODORO_LEGACY_KEY);\n if (!raw) {\n localStorage.setItem(POMODORO_LEGACY_MIGRATED_FLAG, '1');\n return;\n }\n const legacy: Array<{ id?: string; name?: string; estimated?: number; completed?: number; done?: boolean }>\n = JSON.parse(raw);\n if (!Array.isArray(legacy) || legacy.length === 0) {\n localStorage.removeItem(POMODORO_LEGACY_KEY);\n localStorage.setItem(POMODORO_LEGACY_MIGRATED_FLAG, '1');\n return;\n }\n const ts = nowIso();\n const migrated: TodoTask[] = legacy\n .filter(t => typeof t?.name === 'string')\n .map(t => ({\n id: t.id || uid(),\n name: String(t.name),\n done: !!t.done,\n estimated: typeof t.estimated === 'number' ? t.estimated : undefined,\n completed: typeof t.completed === 'number' ? t.completed : undefined,\n createdAt: ts,\n updatedAt: ts,\n }));\n const existingIds = new Set(currentTasks.map(t => t.id));\n const additions = migrated.filter(t => !existingIds.has(t.id));\n setAllTasks([...additions, ...currentTasks]);\n localStorage.removeItem(POMODORO_LEGACY_KEY);\n localStorage.setItem(POMODORO_LEGACY_MIGRATED_FLAG, '1');\n } catch {\n try { localStorage.setItem(POMODORO_LEGACY_MIGRATED_FLAG, '1'); } catch {}\n }\n}\n"]}
|
|
@@ -25,15 +25,7 @@ function formatDate(value) {
|
|
|
25
25
|
return `${dd}/${mm}/${yyyy}`;
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
-
function formatDateTime(value) {
|
|
29
|
-
if (!value) return "\u2014";
|
|
30
|
-
const dt = new Date(value);
|
|
31
|
-
if (isNaN(dt.getTime())) return value;
|
|
32
|
-
const dateStr = `${dt.getFullYear()}-${String(dt.getMonth() + 1).padStart(2, "0")}-${String(dt.getDate()).padStart(2, "0")}`;
|
|
33
|
-
const time = dt.toLocaleTimeString(void 0, { hour: "2-digit", minute: "2-digit" });
|
|
34
|
-
return `${formatDate(dateStr)}, ${time}`;
|
|
35
|
-
}
|
|
36
28
|
|
|
37
|
-
export { formatDate
|
|
38
|
-
//# sourceMappingURL=chunk-
|
|
39
|
-
//# sourceMappingURL=chunk-
|
|
29
|
+
export { formatDate };
|
|
30
|
+
//# sourceMappingURL=chunk-Y4QYGQKS.js.map
|
|
31
|
+
//# sourceMappingURL=chunk-Y4QYGQKS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/date.ts"],"names":[],"mappings":";AAwBO,SAAS,iBAAA,GAAmC;AACjD,EAAA,OAAQ,YAAA,CAAa,OAAA,CAAQ,kBAAkB,CAAA,IAAuB,YAAA;AACxE;AAUO,SAAS,WAAW,KAAA,EAA0C;AACnE,EAAA,IAAI,CAAC,OAAO,OAAO,QAAA;AAEnB,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,GAAI,MAAM,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,GAAI,KAAA;AAC5D,EAAA,MAAM,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,QAAQ,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,MAAM,CAAA;AAC/C,EAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,IAAK,CAAC,GAAG,OAAO,KAAA;AAE3B,EAAA,MAAM,KAAK,MAAA,CAAO,CAAC,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACpC,EAAA,MAAM,KAAK,MAAA,CAAO,CAAC,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACpC,EAAA,MAAM,IAAA,GAAO,OAAO,CAAC,CAAA;AAErB,EAAA,MAAM,MAAM,iBAAA,EAAkB;AAC9B,EAAA,QAAQ,GAAA;AAAK,IACX,KAAK,YAAA;AAAc,MAAA,OAAO,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,EAAE,IAAI,IAAI,CAAA,CAAA;AAAA,IAC7C,KAAK,YAAA;AAAc,MAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,EAAE,IAAI,EAAE,CAAA,CAAA;AAAA,IAC7C,KAAK,YAAA;AAAc,MAAA,OAAO,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,EAAE,IAAI,IAAI,CAAA,CAAA;AAAA,IAC7C,KAAK,YAAA;AAAc,MAAA,OAAO,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,EAAE,IAAI,IAAI,CAAA,CAAA;AAAA,IAC7C,KAAK,YAAA;AAAA,IACL;AAAmB,MAAA,OAAO,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,EAAE,IAAI,IAAI,CAAA,CAAA;AAAA;AAEjD","file":"chunk-Y4QYGQKS.js","sourcesContent":["/**\n * Shared date formatting utility.\n *\n * Reads the user's preferred date format from localStorage (`user_date_format`)\n * and formats all dates consistently across the app.\n *\n * Supported formats:\n * 'DD/MM/YYYY' — 24/04/2026\n * 'MM/DD/YYYY' — 04/24/2026\n * 'YYYY-MM-DD' — 2026-04-24\n * 'DD-MM-YYYY' — 24-04-2026\n * 'DD.MM.YYYY' — 24.04.2026\n */\n\nexport type DateFormatKey = 'DD/MM/YYYY' | 'MM/DD/YYYY' | 'YYYY-MM-DD' | 'DD-MM-YYYY' | 'DD.MM.YYYY';\n\nexport const DATE_FORMAT_OPTIONS: { key: DateFormatKey; example: string }[] = [\n { key: 'DD/MM/YYYY', example: '24/04/2026' },\n { key: 'MM/DD/YYYY', example: '04/24/2026' },\n { key: 'YYYY-MM-DD', example: '2026-04-24' },\n { key: 'DD-MM-YYYY', example: '24-04-2026' },\n { key: 'DD.MM.YYYY', example: '24.04.2026' },\n];\n\nexport function getUserDateFormat(): DateFormatKey {\n return (localStorage.getItem('user_date_format') as DateFormatKey) || 'DD/MM/YYYY';\n}\n\nexport function setUserDateFormat(fmt: DateFormatKey) {\n localStorage.setItem('user_date_format', fmt);\n}\n\n/**\n * Format a date string (YYYY-MM-DD or ISO timestamp) for display.\n * Returns '—' for null/empty values.\n */\nexport function formatDate(value: string | null | undefined): string {\n if (!value) return '—';\n // Parse — handle both \"YYYY-MM-DD\" and ISO timestamps\n const dateStr = value.includes('T') ? value.split('T')[0] : value;\n const [y, m, d] = dateStr.split('-').map(Number);\n if (!y || !m || !d) return value; // fallback if unparseable\n\n const dd = String(d).padStart(2, '0');\n const mm = String(m).padStart(2, '0');\n const yyyy = String(y);\n\n const fmt = getUserDateFormat();\n switch (fmt) {\n case 'MM/DD/YYYY': return `${mm}/${dd}/${yyyy}`;\n case 'YYYY-MM-DD': return `${yyyy}-${mm}-${dd}`;\n case 'DD-MM-YYYY': return `${dd}-${mm}-${yyyy}`;\n case 'DD.MM.YYYY': return `${dd}.${mm}.${yyyy}`;\n case 'DD/MM/YYYY':\n default: return `${dd}/${mm}/${yyyy}`;\n }\n}\n\n/**\n * Format a datetime string (ISO timestamp) for display, including time.\n * Returns '—' for null/empty values.\n */\nexport function formatDateTime(value: string | null | undefined): string {\n if (!value) return '—';\n const dt = new Date(value);\n if (isNaN(dt.getTime())) return value;\n const dateStr = `${dt.getFullYear()}-${String(dt.getMonth() + 1).padStart(2, '0')}-${String(dt.getDate()).padStart(2, '0')}`;\n const time = dt.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' });\n return `${formatDate(dateStr)}, ${time}`;\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -829,11 +829,8 @@ interface LayoutProps {
|
|
|
829
829
|
* the shell. The shell renders the node as-is — keep it small (a
|
|
830
830
|
* single icon-sized button) so it fits the existing tray rhythm. */
|
|
831
831
|
taskbarTrayLeft?: ReactNode;
|
|
832
|
-
/** Show the Mail & Calendar connect button in the system tray.
|
|
833
|
-
* Defaults to true. Set false for portals with no mail integration. */
|
|
834
|
-
showMail?: boolean;
|
|
835
832
|
}
|
|
836
|
-
declare function Layout({ productName, productIcon, wallpapers, navSections, navIcons, sectionIcons, categories, notifications, search, taskbarTrayLeft,
|
|
833
|
+
declare function Layout({ productName, productIcon, wallpapers, navSections, navIcons, sectionIcons, categories, notifications, search, taskbarTrayLeft, }?: LayoutProps): react_jsx_runtime.JSX.Element;
|
|
837
834
|
|
|
838
835
|
interface StartMenuProps {
|
|
839
836
|
open: boolean;
|
|
@@ -1023,6 +1020,51 @@ interface EntityListProps<T> {
|
|
|
1023
1020
|
*/
|
|
1024
1021
|
declare function EntityList<T>(props: EntityListProps<T>): react_jsx_runtime.JSX.Element;
|
|
1025
1022
|
|
|
1023
|
+
/**
|
|
1024
|
+
* Generic, drag-and-drop Kanban board. Self-contained (native HTML5 DnD, no
|
|
1025
|
+
* library) and styled with the same Tailwind utilities + `grid-scroll` class the
|
|
1026
|
+
* shell already ships, so consumers get it for free.
|
|
1027
|
+
*
|
|
1028
|
+
* Group items into columns with `columnOf`, render each card with `renderCard`,
|
|
1029
|
+
* and handle moves with `onMove(id, toColumn)`. Drops only change a card's
|
|
1030
|
+
* column; within-column order is presentational (optionally via `sortInColumn`).
|
|
1031
|
+
*
|
|
1032
|
+
* Drag affordance: as a card is dragged over a *different* column, the cards at
|
|
1033
|
+
* and below the hovered position slide down (CSS transform transition) to open a
|
|
1034
|
+
* gap the size of the dragged card, and the column highlights. The dragged card
|
|
1035
|
+
* is dimmed. Insertion index tracks `dragenter` (once per card crossed) rather
|
|
1036
|
+
* than `dragover` (every few ms) so the gap stays stable instead of oscillating.
|
|
1037
|
+
*/
|
|
1038
|
+
interface KanbanColumn {
|
|
1039
|
+
/** Stable column key — what `columnOf` returns and `onMove` receives. */
|
|
1040
|
+
value: string;
|
|
1041
|
+
label: string;
|
|
1042
|
+
/** Tailwind text + bg classes for the column header. */
|
|
1043
|
+
accent?: string;
|
|
1044
|
+
/** Tailwind bg class for the header dot. */
|
|
1045
|
+
dot?: string;
|
|
1046
|
+
}
|
|
1047
|
+
interface KanbanProps<T> {
|
|
1048
|
+
items: T[];
|
|
1049
|
+
columns: KanbanColumn[];
|
|
1050
|
+
columnOf: (item: T) => string;
|
|
1051
|
+
getId: (item: T) => string;
|
|
1052
|
+
/** Called when a card is dropped on a column (its own `value`). */
|
|
1053
|
+
onMove: (id: string, toColumn: string) => void;
|
|
1054
|
+
/** Inner card content — the card chrome (border, padding, hover) is provided. */
|
|
1055
|
+
renderCard: (item: T) => ReactNode;
|
|
1056
|
+
onCardClick?: (item: T) => void;
|
|
1057
|
+
/** Optional comparator for ordering within a column. */
|
|
1058
|
+
sortInColumn?: (a: T, b: T) => number;
|
|
1059
|
+
isLoading?: boolean;
|
|
1060
|
+
loadingText?: string;
|
|
1061
|
+
/** Shown when there are no items at all. */
|
|
1062
|
+
emptyState?: ReactNode;
|
|
1063
|
+
/** Placeholder text inside an empty column. */
|
|
1064
|
+
columnEmptyText?: string;
|
|
1065
|
+
}
|
|
1066
|
+
declare function Kanban<T>({ items, columns, columnOf, getId, onMove, renderCard, onCardClick, sortInColumn, isLoading, loadingText, emptyState, columnEmptyText, }: KanbanProps<T>): react_jsx_runtime.JSX.Element;
|
|
1067
|
+
|
|
1026
1068
|
interface PaginatedResponse<T> {
|
|
1027
1069
|
count: number;
|
|
1028
1070
|
next: string | null;
|
|
@@ -1249,8 +1291,6 @@ declare function useShellEntityFetcher(): EntityFetcher;
|
|
|
1249
1291
|
* they use elsewhere. The package only delegates HTTP to this. */
|
|
1250
1292
|
declare function setShellApiClient(instance: AxiosInstance): void;
|
|
1251
1293
|
|
|
1252
|
-
declare function setShellMailServer(input: string | AxiosInstance): Promise<void>;
|
|
1253
|
-
|
|
1254
1294
|
/**
|
|
1255
1295
|
* Shared task data model — used by the TodoList app, the Pomodoro widget,
|
|
1256
1296
|
* and the Calendar app. Stored in `shellPrefs.todo_tasks` (a single array)
|
|
@@ -1307,58 +1347,6 @@ declare function setShellAuthBridge(bridge: {
|
|
|
1307
1347
|
logout?: () => void;
|
|
1308
1348
|
}): void;
|
|
1309
1349
|
|
|
1310
|
-
interface MailUser {
|
|
1311
|
-
email: string;
|
|
1312
|
-
displayName: string;
|
|
1313
|
-
}
|
|
1314
|
-
interface MailCapabilities {
|
|
1315
|
-
imap: {
|
|
1316
|
-
thread: boolean;
|
|
1317
|
-
condstore: boolean;
|
|
1318
|
-
idle: boolean;
|
|
1319
|
-
};
|
|
1320
|
-
smtp: boolean;
|
|
1321
|
-
caldav: boolean;
|
|
1322
|
-
}
|
|
1323
|
-
interface LoginPayload {
|
|
1324
|
-
imap: {
|
|
1325
|
-
host: string;
|
|
1326
|
-
port: number;
|
|
1327
|
-
secure: boolean;
|
|
1328
|
-
user: string;
|
|
1329
|
-
pass: string;
|
|
1330
|
-
};
|
|
1331
|
-
smtp: {
|
|
1332
|
-
host: string;
|
|
1333
|
-
port: number;
|
|
1334
|
-
secure: boolean;
|
|
1335
|
-
user: string;
|
|
1336
|
-
pass: string;
|
|
1337
|
-
};
|
|
1338
|
-
caldav?: {
|
|
1339
|
-
serverUrl: string;
|
|
1340
|
-
user: string;
|
|
1341
|
-
pass: string;
|
|
1342
|
-
};
|
|
1343
|
-
}
|
|
1344
|
-
interface MailAuthState {
|
|
1345
|
-
loading: boolean;
|
|
1346
|
-
serverReachable: boolean | null;
|
|
1347
|
-
isConnected: boolean;
|
|
1348
|
-
user: MailUser | null;
|
|
1349
|
-
capabilities: MailCapabilities | null;
|
|
1350
|
-
error: string | null;
|
|
1351
|
-
login: (payload: LoginPayload) => Promise<void>;
|
|
1352
|
-
logout: () => Promise<void>;
|
|
1353
|
-
refresh: () => Promise<void>;
|
|
1354
|
-
}
|
|
1355
|
-
declare function useMailAuth(): MailAuthState;
|
|
1356
|
-
|
|
1357
|
-
declare function MailConnectModal({ open, onClose }: {
|
|
1358
|
-
open: boolean;
|
|
1359
|
-
onClose: () => void;
|
|
1360
|
-
}): react_jsx_runtime.JSX.Element;
|
|
1361
|
-
|
|
1362
1350
|
/** Frosted glass style — shared across all menus, popups, and glass UI elements.
|
|
1363
1351
|
* Reads --menu-opacity CSS variable set by the theme system, and adapts the
|
|
1364
1352
|
* base tint to dark mode so menus don't stay light-cream when text is light. */
|
|
@@ -1393,4 +1381,4 @@ declare function useNewHotkey(callback: () => void): void;
|
|
|
1393
1381
|
*/
|
|
1394
1382
|
declare function useEditHotkey(callback: (() => void) | null): void;
|
|
1395
1383
|
|
|
1396
|
-
export { ALT, ALT_SHIFT_D, ALT_SHIFT_E, ALT_SHIFT_N, BehaviorPanel, type BugReport, type BugReportConfig, BugReportConfigProvider, BugReportDetail, type BugReportExtraField, type BugReportExtraSelectField, BugReportProvider, type BugReportSubmission, type BugReportSubmitPayload, CMD_A, CMD_DOT, CMD_ENTER, CMD_K, CMD_S, CancelButton, type CellStyle, type ChangelogEntry, type ColumnDef, ConfirmProvider, CopyButton, Customization, type CustomizationOmitSection, type CustomizationProps, DEV_BANNER_TEXT, Desktop, type DesktopHostConfig, DesktopHostProvider, DevIndicator, DocFavStar, ENTER, EditableGrid, type EditableGridProps, type EntityFetcher, EntityList, type EntityListColumn, type EntityListProps, GLASS_DIVIDER, GLASS_INPUT_BG, GlobalSearch, type GridColumn, HelpCenter, type HelpCenterDoc, type HelpCenterProps,
|
|
1384
|
+
export { ALT, ALT_SHIFT_D, ALT_SHIFT_E, ALT_SHIFT_N, BehaviorPanel, type BugReport, type BugReportConfig, BugReportConfigProvider, BugReportDetail, type BugReportExtraField, type BugReportExtraSelectField, BugReportProvider, type BugReportSubmission, type BugReportSubmitPayload, CMD_A, CMD_DOT, CMD_ENTER, CMD_K, CMD_S, CancelButton, type CellStyle, type ChangelogEntry, type ColumnDef, ConfirmProvider, CopyButton, Customization, type CustomizationOmitSection, type CustomizationProps, DEV_BANNER_TEXT, Desktop, type DesktopHostConfig, DesktopHostProvider, DevIndicator, DocFavStar, ENTER, EditableGrid, type EditableGridProps, type EntityFetcher, EntityList, type EntityListColumn, type EntityListProps, GLASS_DIVIDER, GLASS_INPUT_BG, GlobalSearch, type GridColumn, HelpCenter, type HelpCenterDoc, type HelpCenterProps, Kanban, type KanbanColumn, type KanbanProps, Layout, type LayoutProps, ListFooter, MOD, Markdown, type MarkdownProps, Modal, ModalActions, NotificationBell, type NotificationsConfig, type PaginatedResponse, PopupMenu, PopupMenuDivider, PopupMenuItem, PopupMenuLabel, type ReportType, ResizableTable, SHIFT, type SearchConfig, type SearchProvider, type SearchResult, type SemanticGroup, type ShellAuth, ShellAuthProvider, ShellEntityFetcherProvider, type ShellNotification, type ShellPrefsAdapter, ShellPrefsProvider, ShortcutHelp, type SortState, SoundsPanel, StartMenu, StatusBadge, StatusBadgeProvider, type StickyEntityRef, type StickyResolver, SystemPreferences, type SystemPreferencesProps, type SystemPreferencesSection, type TodoProvider, type TodoTask, VERSION, WidgetManager, WindowManagerProvider, WindowRegistry, WindowTitle, applyDevTitle, commitExposeHighlight, confirm, confirmDestructive, createWindowRegistry, exitExposeMode, formatDate, getActiveWindowRoute, getExposeHighlight, getWindowPosition, glassStyle, isDevEnv, isMac, openBugReportDialog, prompt, reportBug, setExposeHighlight, setShellApiClient, setShellAuthBridge, setShellNavIcons, setShellTodoProvider, setWindowDefaultPosition, setWindowPosition, subscribeExposeHighlight, toast, toggleExposeMode, useBugReport, useClickOutside, useColumnConfig, useDesktopHost, useEditHotkey, useInfiniteScroll, useLocalStoragePrefs, useModalActive, useNewHotkey, useShellAuth, useShellEntityFetcher, useShellPrefs, useSort, useTableNav, useWidgetSettings, useWindowManager, useWindowMenuItem, useWindowTitle };
|