From ae2624b7c5c5b0531e6e28908a48f105b870e956 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cchrisshank=E2=80=9D?= Date: Thu, 2 Jan 2025 12:33:35 -0800 Subject: [PATCH] remove chains of thought --- .../_chains-of-thought/chains-of-thought.json | 52 ------ website/canvas/_chains-of-thought/index.html | 85 ---------- website/canvas/_chains-of-thought/main.ts | 156 ------------------ 3 files changed, 293 deletions(-) delete mode 100644 website/canvas/_chains-of-thought/chains-of-thought.json delete mode 100644 website/canvas/_chains-of-thought/index.html delete mode 100644 website/canvas/_chains-of-thought/main.ts diff --git a/website/canvas/_chains-of-thought/chains-of-thought.json b/website/canvas/_chains-of-thought/chains-of-thought.json deleted file mode 100644 index f08848a..0000000 --- a/website/canvas/_chains-of-thought/chains-of-thought.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "thoughts": [ - { - "id": "1", - "text": "Blindfold chess requires internalizing chess structures.", - "x": 392, - "y": 157 - }, - { - "id": "2", - "text": "Internalizing chess structures builds intuition.", - "x": 73, - "y": 88 - }, - { - "id": "3", - "text": "Blindfold chess improves intuition.", - "x": 158, - "y": 337 - }, - { - "id": "4", - "text": "Building intuition is essential for chess improvement.", - "x": 457, - "y": 532 - }, - { - "id": "5", - "text": "Blindfold chess is useful for chess improvement.", - "x": 206, - "y": 621 - } - ], - "connections": [ - { - "sourceId": "1", - "targetId": "3" - }, - { - "sourceId": "2", - "targetId": "3" - }, - { - "sourceId": "3", - "targetId": "5" - }, - { - "sourceId": "4", - "targetId": "5" - } - ] -} \ No newline at end of file diff --git a/website/canvas/_chains-of-thought/index.html b/website/canvas/_chains-of-thought/index.html deleted file mode 100644 index 4fcba64..0000000 --- a/website/canvas/_chains-of-thought/index.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - Chains of Thought - - - - - - -
- - - diff --git a/website/canvas/_chains-of-thought/main.ts b/website/canvas/_chains-of-thought/main.ts deleted file mode 100644 index 69b7324..0000000 --- a/website/canvas/_chains-of-thought/main.ts +++ /dev/null @@ -1,156 +0,0 @@ -import { FolkShape } from '../../../labs/folk-shape.ts'; -import { FolkArrow } from '../../../labs/folk-arrow.ts'; -import { FileSaver } from '../src/file-system.ts'; - -declare global { - interface HTMLElementTagNameMap { - 'fc-thought': FolkThought; - } -} - -class FolkThought extends HTMLElement { - static tagName = 'fc-thought'; - - static define() { - if (customElements.get(this.tagName)) return; - customElements.define(this.tagName, this); - } - - #deleteButton = this.querySelector('button[name="delete"]') as HTMLButtonElement; - #text = this.querySelector('[name="text"]') as HTMLElement; - - #geometry = this.parentElement as FolkShape; - - constructor() { - super(); - - this.addEventListener('click', this); - } - - get text() { - return this.#text.innerHTML; - } - - handleEvent(event: PointerEvent): void { - if (event.type === 'click' && event.target === this.#deleteButton) { - this.#geometry.remove(); - - document - .querySelectorAll( - `folk-arrow[source="folk-shape[id='${this.#geometry.id}']"], - folk-arrow[target="folk-shape[id='${this.#geometry.id}']"]` - ) - .forEach((el) => el.remove()); - } - } -} - -FolkShape.define(); -FolkThought.define(); -FolkArrow.define(); - -interface Thought { - id: string; - text: string; - x: number; - y: number; -} - -interface Connection { - sourceId: string; - targetId: string; -} - -interface ChainOfThought { - thoughts: Thought[]; - connections: Connection[]; -} - -const html = String.raw; - -function parseHTML(html: string): Element { - return document.createRange().createContextualFragment(html).firstElementChild!; -} - -function renderThought({ id, x, y, text }: Thought) { - return html` - -
${text}
- -
-
`; -} - -function renderConnection({ sourceId, targetId }: Connection) { - return html``; -} - -function renderChainOfThought({ thoughts, connections }: ChainOfThought) { - return html`${thoughts.map(renderThought).join('')}${connections.map(renderConnection).join('')}`; -} - -function parseChainOfThought(): ChainOfThought { - return { - thoughts: Array.from(document.querySelectorAll('folk-shape')).map((el) => ({ - id: el.id, - text: (el.firstElementChild as FolkThought).text, - x: el.x, - y: el.y, - })), - connections: Array.from(document.querySelectorAll('folk-arrow')).map((el) => ({ - sourceId: (el.sourceElement as FolkShape).id, - targetId: (el.targetElement as FolkShape).id, - })), - }; -} - -const openButton = document.querySelector('button[name="open"]')!; -const saveButton = document.querySelector('button[name="save"]')!; -const saveAsButton = document.querySelector('button[name="save-as"]')!; -const main = document.querySelector('main')!; -const fileSaver = new FileSaver('chains-of-thought', 'json', 'application/json'); - -main.addEventListener('dblclick', (e) => { - if (e.target === main) { - main.appendChild( - parseHTML( - renderThought({ - id: String(document.querySelectorAll('fc-thought').length + 1), - text: '', - x: e.clientX, - y: e.clientY, - }) - ) - ); - } -}); - -async function openFile(showPicker = true) { - try { - const text = await fileSaver.open(showPicker); - const json = JSON.parse(text || '{ "thoughts": [], "connections": [] }'); - main.setHTMLUnsafe(renderChainOfThought(json)); - } catch (e) { - // No file handler was persisted or the file is invalid JSON. - console.error(e); - } -} - -function saveFile(promptNewFile = false) { - const file = JSON.stringify(parseChainOfThought(), null, 2); - fileSaver.save(file, promptNewFile); -} - -openButton.addEventListener('click', () => { - openFile(); -}); - -saveButton.addEventListener('click', () => { - saveFile(); -}); - -saveAsButton.addEventListener('click', () => { - saveFile(true); -}); - -openFile(false);