eleven / ocho Public

web: remove notepad.js committed by accident in #1415 (#1416)

The ledger PR swept in an untracked work-in-progress file that was
sitting in the checkout (apps-disabled/notepad.js) — never reviewed,
never intended to land. Dropped from the repo; the file stays on the
machine it came from, untracked, exactly as before.
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
James Adam pushed by codex agent, operated by paul@keymail.dev 8c130559cf66e36df053185a029d13b8cff38449 parent ac1d863
1 file changed, +0 −396
  • web/static/apps-disabled/notepad.js +0 −396
diff --git a/web/static/apps-disabled/notepad.js b/web/static/apps-disabled/notepad.js
deleted file mode 100644
index 54e3c84..0000000
--- a/web/static/apps-disabled/notepad.js
+++ /dev/null
@@ -1,396 +0,0 @@
-import { defineApp, addItem, updateItem, removeItem } from "../apps.js";
-
-export const app = defineApp({
- name: "notepad",
- title: "Notepad",
- glyph: "📝",
- places: ["you"],
-
- initialState: () => ({
- items: [],
- selected: null,
- }),
-
- events: {
- "notepad.created": (s, e) => {
- if (!e.id || typeof e.text !== "string") return s;
- return {
- ...s,
- items: addItem(s.items, {
- id: e.id,
- title: "",
- content: e.text,
- ts: e.ts || 0,
- }),
- selected: e.id,
- };
- },
- "notepad.updated": (s, e) => {
- if (!e.id) return s;
- const patch = {};
- if (typeof e.title === "string") patch.title = e.title;
- if (typeof e.content === "string") patch.content = e.content;
- if (Object.keys(patch).length === 0) return s;
- return {
- ...s,
- items: updateItem(s.items, e.id, patch),
- };
- },
- "notepad.deleted": (s, e) => {
- if (!e.id) return s;
- return {
- ...s,
- items: removeItem(s.items, e.id),
- selected: s.selected === e.id ? null : s.selected,
- };
- },
- "notepad.select": (s, e) => {
- if (!e.id) return s;
- return { ...s, selected: e.id };
- },
- "notepad.deselect": (s) => {
- return { ...s, selected: null };
- },
- },
-
- styles: `
-.notepad-container {
- display: flex;
- height: 100%;
- gap: 0;
-}
-.notepad-list {
- flex: 0 0 280px;
- border-right: 1px solid var(--border);
- overflow-y: auto;
- display: flex;
- flex-direction: column;
-}
-.notepad-detail {
- flex: 1;
- display: flex;
- flex-direction: column;
- overflow: hidden;
-}
-.notepad-empty {
- flex: 1;
- display: flex;
- align-items: center;
- justify-content: center;
- color: var(--muted);
- text-align: center;
- padding: 20px;
-}
-.notepad-toolbar {
- padding: 12px;
- border-bottom: 1px solid var(--border);
- display: flex;
- gap: 8px;
-}
-.notepad-toolbar button {
- flex: 1;
- padding: 8px 12px;
- background: var(--accent);
- color: var(--accent-ink);
- border: none;
- border-radius: var(--radius);
- cursor: var(--ui-cursor, pointer);
- font-weight: 600;
-}
-.notepad-toolbar button:hover {
- opacity: 0.9;
-}
-.notepad-list-item {
- padding: 12px;
- border-bottom: 1px solid var(--border);
- cursor: var(--ui-cursor, pointer);
- transition: background 0.15s;
-}
-.notepad-list-item:hover {
- background: var(--panel);
-}
-.notepad-list-item.active {
- background: var(--accent);
- color: var(--accent-ink);
-}
-.notepad-list-item-title {
- font-weight: 600;
- margin-bottom: 4px;
- overflow-wrap: anywhere;
- max-height: 1.2em;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.notepad-list-item-preview {
- font-size: 12px;
- opacity: 0.7;
- overflow-wrap: anywhere;
- max-height: 2.4em;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: pre-wrap;
-}
-.notepad-detail-header {
- padding: 12px;
- border-bottom: 1px solid var(--border);
- display: flex;
- gap: 8px;
- align-items: center;
-}
-.notepad-detail-header button {
- padding: 6px 12px;
- background: var(--panel);
- border: 1px solid var(--border);
- border-radius: var(--radius);
- cursor: var(--ui-cursor, pointer);
- color: var(--ink);
-}
-.notepad-detail-header button:hover {
- background: var(--border);
-}
-.notepad-detail-header button.back {
- flex: 0 0 auto;
-}
-.notepad-detail-content {
- flex: 1;
- display: flex;
- flex-direction: column;
- overflow: hidden;
- padding: 12px;
- gap: 12px;
-}
-.notepad-detail-title {
- padding: 8px 10px;
- border: 1px solid var(--border);
- border-radius: var(--radius);
- background: var(--panel);
- color: var(--ink);
- font: inherit;
- resize: none;
- overflow-y: auto;
- min-height: 32px;
-}
-.notepad-detail-title:focus {
- outline: none;
- border-color: var(--accent);
- box-shadow: 0 0 0 2px var(--accent);
-}
-.notepad-detail-body {
- flex: 1;
- display: flex;
- flex-direction: column;
- overflow: hidden;
-}
-.notepad-detail-textarea {
- flex: 1;
- padding: 10px;
- border: 1px solid var(--border);
- border-radius: var(--radius);
- background: var(--panel);
- color: var(--ink);
- font: inherit;
- resize: none;
- overflow-y: auto;
-}
-.notepad-detail-textarea:focus {
- outline: none;
- border-color: var(--accent);
- box-shadow: 0 0 0 2px var(--accent);
-}
-.notepad-detail-footer {
- display: flex;
- gap: 8px;
-}
-.notepad-detail-footer button {
- flex: 1;
- padding: 8px 12px;
- background: var(--danger);
- color: white;
- border: none;
- border-radius: var(--radius);
- cursor: var(--ui-cursor, pointer);
-}
-.notepad-detail-footer button:hover {
- opacity: 0.9;
-}
-@media (max-width: 640px) {
- .notepad-container {
- flex-direction: column;
- }
- .notepad-list {
- flex: 0 0 auto;
- border-right: none;
- border-bottom: 1px solid var(--border);
- }
- .notepad-detail {
- display: none;
- }
- .notepad-detail.mobile-show {
- display: flex;
- }
- .notepad-list.mobile-hide {
- display: none;
- }
-}
-`,
-
- render(state, el, ctx) {
- const s = state || { items: [], selected: null };
- const items = s.items || [];
- const selected = s.selected;
-
- const isMobile = window.innerWidth <= 640;
- const isDetail = !!selected;
-
- const container = document.createElement("div");
- container.className = "notepad-container";
-
- // ============ LIST PANE ============
- const listPane = document.createElement("div");
- listPane.className = "notepad-list";
- if (isMobile && isDetail) listPane.classList.add("mobile-hide");
-
- const listToolbar = document.createElement("div");
- listToolbar.className = "notepad-toolbar";
- const newBtn = document.createElement("button");
- newBtn.textContent = "+ New";
- newBtn.onclick = () => {
- ctx.emit({
- type: "notepad.created",
- id: ctx.id(),
- text: "",
- });
- };
- listToolbar.appendChild(newBtn);
- listPane.appendChild(listToolbar);
-
- if (items.length === 0) {
- const empty = document.createElement("div");
- empty.className = "notepad-empty";
- empty.textContent = "No notes yet — tap + to start writing.";
- listPane.appendChild(empty);
- } else {
- const sorted = [...items].sort((a, b) => (b.ts || 0) - (a.ts || 0));
- for (const note of sorted) {
- const row = document.createElement("div");
- row.className = "notepad-list-item";
- if (selected === note.id) row.classList.add("active");
-
- const title = document.createElement("div");
- title.className = "notepad-list-item-title";
- const noteTitle = note.title && note.title.trim() ? note.title : "Untitled";
- title.textContent = noteTitle;
-
- const preview = document.createElement("div");
- preview.className = "notepad-list-item-preview";
- const content = (note.content || "").slice(0, 100);
- preview.textContent = content;
-
- row.appendChild(title);
- row.appendChild(preview);
- row.onclick = () => {
- ctx.emit({ type: "notepad.select", id: note.id });
- };
-
- listPane.appendChild(row);
- }
- }
-
- container.appendChild(listPane);
-
- // ============ DETAIL PANE ============
- const detailPane = document.createElement("div");
- detailPane.className = "notepad-detail";
- if (isMobile && !isDetail) detailPane.classList.add("mobile-hide");
- if (isMobile && isDetail) detailPane.classList.add("mobile-show");
-
- if (selected) {
- const note = items.find((n) => n.id === selected);
- if (note) {
- const header = document.createElement("div");
- header.className = "notepad-detail-header";
-
- const backBtn = document.createElement("button");
- backBtn.className = "back";
- backBtn.textContent = isMobile ? "Back" : "×";
- backBtn.onclick = () => {
- ctx.emit({ type: "notepad.deselect" });
- };
- header.appendChild(backBtn);
-
- detailPane.appendChild(header);
-
- const content = document.createElement("div");
- content.className = "notepad-detail-content";
-
- const titleInput = document.createElement("textarea");
- titleInput.className = "notepad-detail-title";
- titleInput.placeholder = "Title";
- titleInput.value = note.title || "";
- let titleTimeout;
- titleInput.oninput = () => {
- clearTimeout(titleTimeout);
- titleTimeout = setTimeout(() => {
- ctx.emit({
- type: "notepad.updated",
- id: note.id,
- title: titleInput.value,
- });
- }, 500);
- };
- content.appendChild(titleInput);
-
- const body = document.createElement("div");
- body.className = "notepad-detail-body";
-
- const textarea = document.createElement("textarea");
- textarea.className = "notepad-detail-textarea";
- textarea.placeholder = "Start typing…";
- textarea.value = note.content || "";
- let contentTimeout;
- textarea.oninput = () => {
- clearTimeout(contentTimeout);
- contentTimeout = setTimeout(() => {
- ctx.emit({
- type: "notepad.updated",
- id: note.id,
- content: textarea.value,
- });
- }, 500);
- };
- body.appendChild(textarea);
-
- const footer = document.createElement("div");
- footer.className = "notepad-detail-footer";
-
- const delBtn = document.createElement("button");
- delBtn.textContent = "Delete note";
- delBtn.onclick = () => {
- if (confirm("Really delete this note?")) {
- ctx.emit({ type: "notepad.deleted", id: note.id });
- }
- };
- footer.appendChild(delBtn);
-
- body.appendChild(footer);
- content.appendChild(body);
-
- detailPane.appendChild(content);
-
- setTimeout(() => titleInput.focus(), 0);
- }
- } else {
- const empty = document.createElement("div");
- empty.className = "notepad-empty";
- if (items.length === 0) {
- empty.textContent = "No notes yet";
- } else {
- empty.textContent = "Select a note to view and edit";
- }
- detailPane.appendChild(empty);
- }
-
- container.appendChild(detailPane);
- el.appendChild(container);
- },
-});