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);