Signal drop!
Relay (operand.online) is unreachable.
Usually, a dropped signal means an upgrade is happening. Hold on!
Sorry, no connección.
Hang in there while we get back on track
    
    gram: essay
  
tiny essay editor
This is a simple collaborative Markdown editor built in React, with inline format preview and inline commenting.
It's built on automerge and automerge-repo for CRDT-based storage and sync. It uses Codemirror for markdown editing UI, and automerge-codemirror to connect to Codemirror.
Usage
If you visit the root domain the app will make a new doc. Or you can hit the New button.
Once you have a doc, the URL will update with a doc ID. If you share that URL to another browser/device, it should sync live. Hold on to the URL if you want to come back to that doc!
Features
- Edit Markdown with inline format preview
- Write inline comments + replies
- Live sync through Automerge
- Stores data to local device
- Save out .md file with a Download button
- Typeset similarly to Ink & Switch essays
Status
This app is primarily intended for internal use at Ink & Switch for editing essays, so there are some features that are specialized towards that use case. We don't plan to develop it into a general-purpose editor that anyone can use for anything. But of course, it can edit any Markdown document too. If you want to actually use this editor in earnest, you might want to fork it to build your own ideas.
Hopefully the code serves as a useful sample for building apps based on automerge-repo, automerge-codemirror, and React.
Development
Run it
yarn
yarn dev
Dual deployment
This app is designed for normal webapp deployment as well as experimental deployment to an internal I&S platform. The code is almost entirely shared but there are two entry points:
- src/main.tsxis the normal app entry point
- src/index.tsis an experimental entry point which just exports some functions to a host environment
Adding a new datatype
This app is actually a general framework for editing automerge docs in viewers, which currently has specific support for markdown documents and tldraw whiteboards.
Basic instructions to add a new datatype:
- copy an existing src/{datatype}directory as a template.teeis a reasonable example
- Fill in src/<your_datatype>/datatype.tswith a TS type, an init function, and other functions
- Add your new datatype to the datatypesmap insrc/datatypes.ts
Logged Changes:
- 2025-10-04- 17:49:36 | 2ca06cb[domain] read `.call` and use included domain.- 17:19:31 | 736d2ee[nix] add `flake.nix`, go from `yarn` -> `deno`
- 2024-06-17- 17:16:54 | ba24a2fLitt: readme edit to bump deploy
- 2024-05-09- 17:23:40 | b83cf6bLitt: fix unique key in folderviewer- 17:23:10 | 7779f9aLitt: bump automerge-repo
- 2024-05-07- 14:04:44 | 96a5817Litt: Merge pull request #42 from inkandswitch/folders
- 2024-05-06- 14:24:14 | c88c77eSonnentag: fix initialization of previewMarkdownImages for old docs
- 2024-04-29- 16:40:19 | 728fb27Sonnentag: #43 add support for images in tee
- 2024-04-26- 18:14:53 | 7c6474aSonnentag: Merge pull request #45 from inkandswitch/undo- 09:15:22 | 7f1bf46Sonnentag: fix typescript errors- 09:13:06 | 55deba6Sonnentag: update @automerge/automerge-codemirror
- 2024-04-18- 10:00:09 | a2d67efSonnentag: use new automerge-codemirror api
- 2024-04-16- 09:54:46 | 76b7e55Litt: add Folders to the sidebar- 08:11:27 | be682efSonnentag: Merge pull request #40 from inkandswitch/remove-vendored-automerge-repo
- 2024-04-15- 18:19:34 | 3524122Litt: remove unnecessary keymap bindings- 15:22:00 | 8194e95Litt: tweak comment- 10:50:58 | 2e079a4Sonnentag: delete vendored automerge-repo- 10:35:26 | 94abde7Sonnentag: remove vendored useDocument hook- 10:31:43 | 63022afSonnentag: remove setup instructions for git submodule- 10:29:53 | 39c1294Sonnentag: monkey patch doc handle to set author and timestamp metadata by default- 10:29:01 | 1511d05Sonnentag: remove automerge-repo submodule
- 2024-02-26- 19:19:56 | af4f2f5Litt: Merge pull request #29 from joshuahhh/main- 10:31:43 | 7def181Horowitz: allow pasting in urls with embedded automerge urls
- 2024-02-16- 15:58:51 | e6c143dLitt: slightly improve handling of unknown doc types- 15:58:10 | 8bf4ec7Litt: adjust readme
- 2024-01-30- 18:23:53 | 076f570Litt: fix z-index- 16:28:15 | a0d80davan Hardenberg: fix type errors- 15:14:38 | 462d6fevan Hardenberg: fix presence- 14:28:26 | c166328van Hardenberg: put semis back on account- 14:24:24 | 9cb93a6van Hardenberg: fix mark copy- 12:40:07 | 4b89fdfvan Hardenberg: init and icon- 12:37:27 | 1309755van Hardenberg: repair asMarkdownFile -- bit of a botch job- 10:27:03 | 6b168d0van Hardenberg: resemi- 08:59:51 | a622a15van Hardenberg: fix navigation
- 2024-01-29- 16:20:02 | ac76231van Hardenberg: works- 16:10:34 | 29e5014van Hardenberg: WIP- 13:25:30 | 3e8c30avan Hardenberg: a first draft of TLDraw in TEE
- 2024-01-12- 16:30:27 | 0cc5273Litt: Merge pull request #19 from inkandswitch/tee-change-attribution- 16:21:50 | 1fb80c3Litt: build command to handle vendored automerge-repo- 14:51:35 | 91814d1Litt: try an https url- 14:38:14 | 9aadc1cLitt: bump again- 09:57:16 | d47ed62Litt: bump the repo to trigger deploy- 13:47:00 | 0e74106Sonnentag: Use new metadata api
- 2024-01-11- 12:54:59 | 566573cSonnentag: Fix README- 12:40:07 | f85c748Sonnentag: Update instructions in README for setting up the repo- 12:19:08 | a430bd1Sonnentag: Rename automerge-repo -> vendored-automerge-repo- 09:43:13 | 740b109Sonnentag: Add automerge-repo as a submodule
- 2024-01-10- 16:16:51 | fd15a95Litt: whoops, re-enable line wrapping plugin- 15:41:35 | d3ec9deLitt: fix rectangular selection bug by disabling drawSelection
- 2024-01-04- 11:24:20 | 3c14659Litt: remove unused LLM file for now
- 2024-01-03- 11:18:23 | 3289c05Litt: add a teeny bit of margin to comments- 10:17:09 | 4bfda72Litt: fix type error
- 2024-01-02- 16:07:00 | f5fe437Litt: improve positioning of comments- 16:06:47 | ae82582Litt: keyboard shortcut for adding comment- 15:55:44 | 5d472a8Litt: fix bug: jitter on selectio- 15:32:26 | 90678b9Litt: center editor horizontally and improve responsiveness a bit- 15:11:34 | dd5b21fLitt: indent wrapped lines in outlines better- 14:25:45 | 16c1df0Litt: fix bug where scrolling in editor view wouldn't update visible comments
- 2023-12-22- 11:07:44 | b35cea2Litt: Merge pull request #12 from inkandswitch/knapsack- 11:01:40 | dcf8fdfLitt: dont show name after signing out- 10:48:47 | 39dbb9bLitt: tweak avatar design- 10:48:36 | 1923c24Litt: improve handling of account doc loading- 10:30:55 | 26704a4Litt: migrate accounts on login
- 2023-12-21- 11:04:41 | 9cbbaeeLitt: add logic to migrate existing accounts + fix open logic- 10:38:34 | e342b73Litt: remove clickable links feature for now
- 2023-12-20- 16:41:37 | 454684cLitt: enter to make new document- 14:29:34 | f1838ffLitt: address first round of Paul comments- 14:13:58 | a9fa6a8Litt: short circuit when root folder doc hasn't been loaded yet
- 2023-12-19- 18:13:04 | dae08ffSonnentag: Merge pull request #15 from inkandswitch/sync-indicator-state-machine- 18:10:33 | 462832bSonnentag: fix env access in main.tsx- 17:58:34 | debd0aaSonnentag: bump automerge-repo to 1.1.0-alpha.7- 17:57:08 | abc85c6Sonnentag: fix handle undefined env- 10:36:03 | f38f5ddLitt: Merge pull request #14 from inkandswitch/refactor-codemirror-plugins- 10:33:58 | 9a0c269Litt: split out codemirror plugins into separate files
- 2023-12-18- 10:23:51 | 7aa7e05Litt: Merge pull request #13 from inkandswitch/fix-profile-dialog-closing- 14:29:31 | e86f753Sonnentag: fix copy / show account token button to not close modal- 10:55:46 | 8137c28Sonnentag: Bump automerge version
- 2023-12-15- 17:25:01 | e528b89Sonnentag: fix import in tests- 17:20:57 | 8b62602Sonnentag: handle undefined 'env' variable in trail runner
- 2023-12-13- 10:45:06 | 05ed60fSonnentag: bump automerge-repo to alpha.6- 10:42:47 | 81aba58Sonnentag: Merge branch 'main' into sync-indicator-state-machine- 09:09:52 | 4cc01e3Sonnentag: Merge pull request #11 from inkandswitch/profiles
- 2023-12-12- 18:38:56 | 44fe3f0Litt: remove deprecated users field from new TEE docs- 15:21:03 | 960d140Litt: removing claiming existing anon accounts on login- 16:06:40 | 90f45f4Sonnentag: Make SYNC_SERVER_URL and SYNC_SERVER_STORAGE_ID configurable- 14:57:44 | e83769dSonnentag: Clean up code
- 2023-12-11- 21:23:08 | 72293e4Litt: tweak UI- 16:48:25 | 61db39dLitt: add size check on profile pics- 16:09:23 | ec1cf2aLitt: tweak var name- 16:06:22 | 7f21be7Litt: improve name of storage key- 16:04:37 | 06f3eb2Litt: fix bug in login- 15:51:31 | 77c7e5aLitt: change format of account token- 15:15:56 | 48f39d5Litt: rename profile to accounts- 15:07:04 | 7f0ae53Litt: move non-TEE-specific UI components into their own dir- 11:42:05 | 0439dcbLitt: fix comment- 11:39:31 | 0df63dbLitt: reduce font weight of usernames in comments- 11:36:21 | 83eed2aLitt: refactor components into separate files- 11:23:57 | 1c9f30dLitt: fix DOM warnings + improve password manager handling- 11:13:18 | c8622b7Litt: update UI copy- 12:58:50 | 00e7515Sonnentag: Remove old user session code- 12:46:55 | 09fb1cfSonnentag: Improve profile
- 2023-12-08- 14:29:04 | cd2cee8Sonnentag: Remove logging- 14:20:38 | 87db2ecSonnentag: Rename profile Url -> secrete code- 13:41:01 | fba2730Sonnentag: Fix hook bugs
- 2023-12-07- 15:21:41 | ef72ff0Sonnentag: Clean up- 15:09:34 | cbc5ca1Sonnentag: Add details to sync indicator
- 2023-12-06- 14:46:52 | 1c2a556Sonnentag: Use new contacts in comments- 13:51:57 | 4ab57a3Sonnentag: Implement login- 11:50:22 | a48b897Sonnentag: Show profile url when logged in- 11:19:04 | b8a9df3Sonnentag: allow to upload profile images- 10:24:24 | b5986adSonnentag: basic profile
- 2023-12-05- 13:22:39 | bf22d7dSonnentag: Fix sync state
- 2023-12-04- 11:25:03 | 84b391fLitt: initial draft of knapsack sidebar- 11:25:03 | 0b51451van Hardenberg: add entry point for trail-runner- 15:02:50 | df08e5fSonnentag: Fixes to make it run in trail runner
- 2023-11-27- 16:51:58 | 6c282b9Litt: Merge pull request #9 from inkandswitch/optimize-cursors- 15:35:00 | fcc8ac3Litt: remove unused imports- 14:20:24 | 5e6d7b2Litt: disable paren matching
- 2023-11-24- 17:33:06 | 0f4c5f9Sonnentag: Small fixes- 16:12:22 | 303102eSonnentag: Connect sync indicator with state machine
- 2023-11-23- 14:56:04 | c2bfda4Sonnentag: Add state machine for sync state indicator
- 2023-11-22- 16:50:29 | f655125Litt: Merge pull request #5 from inkandswitch/tsc-to-trailrunner- 16:45:54 | d871493Litt: fix image path in index.ts- 16:37:14 | df9c016Litt: put index.css in dist, not dist/assets- 16:34:14 | 0b03d6cLitt: remove image from src/assets- 16:33:44 | ffcdccdLitt: set logo image url differently in vite and trailrunner
- 2023-11-21- 17:39:54 | ad74057Litt: put logo in src and fix asset path- 17:09:35 | b32e559Litt: try fixing the image- 17:05:38 | fe3789eLitt: readme note- 16:47:42 | 3115f0eLitt: add a comment- 16:42:54 | 0f087e0Litt: revert test change- 16:42:47 | d6308b3Litt: copy package json to built dir- 12:49:29 | 20cec7avan Hardenberg: split up the build- 12:07:23 | 2966d7avan Hardenberg: package.json version/name fixes for TR import- 00:57:53 | 8c00eedvan Hardenberg: fix assets- 00:55:06 | 95526dcvan Hardenberg: es module style imports- 00:35:25 | e37f39avan Hardenberg: fix paths- 00:34:13 | 42f7699van Hardenberg: not sure if this will work but it's more likely to, at least- 00:18:07 | 0718da8van Hardenberg: remove some hacks
- 2023-11-20- 15:35:44 | c299e13van Hardenberg: cross platform CLI
- 2023-11-14- 14:52:33 | 0f7c281van Hardenberg: bit of a WIP- 14:06:43 | 95d6481van Hardenberg: Merge branch 'main' into tsc-to-trailrunner- 15:22:29 | 3b36e74Litt: fix nesting dom warning- 14:33:41 | 028516dLitt: make little ux improvements to sync state- 19:14:38 | d76ef8bSonnentag: Merge pull request #6 from inkandswitch/sync-state- 18:52:48 | 56aa1abSonnentag: Fix sync timeout & ui tweaks- 10:48:56 | 3f6f9e3Litt: tweak popover design- 16:41:16 | 517271fSonnentag: quick fixes- 10:32:20 | 89f146eLitt: remove unused import- 10:30:49 | 4038542Litt: add popover with more details- 11:09:50 | 82801abSonnentag: fix sync timeout- 10:46:23 | db3e0b4Sonnentag: Wait a while for initial connection before showing an error- 10:27:04 | 1bbf280Sonnentag: Show sync error if we have pending changes and the server is not responding- 09:27:36 | 2c520caSonnentag: keep icon in place
- 2023-11-13- 10:29:34 | f763790Litt: make resolving cursor positions more efficient- 18:03:27 | ddc76b9Litt: cleanup- 18:01:57 | febb567Litt: initial draft of icons- 14:52:15 | e80e460van Hardenberg: patch cleanup- 14:51:27 | fbd2e14van Hardenberg: support local server- 14:45:06 | 95c1255van Hardenberg: yarn lock- 14:43:49 | 128393cvan Hardenberg: update deps- 14:43:12 | 6852957van Hardenberg: Merge branch 'main' into sync-state
- 2023-11-10- 16:11:03 | 469030bSonnentag: Indicate online and error state in syncIndicator
- 2023-11-08- 14:27:43 | dfcf6e4Litt: Update README.md- 14:21:33 | e531645Litt: Update README.md- 14:21:14 | 077a4c1Litt: update readme
- 2023-11-06- 17:42:12 | 11e578bLitt: fix listener removal bug- 17:41:54 | c0949b4Litt: fix formatting- 15:59:14 | f4cf67fSonnentag: use handle.getRemoteHeads
- 2023-11-03- 15:51:12 | 129357dSonnentag: use sync state instead of remote heads in SyncIndicator- 12:54:05 | 930bc23Sonnentag: allow to indent with tab
- 2023-10-31- 12:00:56 | 7212934Sonnentag: add basic sync indicator
- 2023-10-27- 16:07:38 | 051ce6dvan Hardenberg: this works, pretty much
- 2023-10-25- 08:23:16 | 5ebd6ecvan Hardenberg: getting super close i think- 00:03:03 | 5c1a155Litt: gracefully handle comments where cursor doesnt match
- 2023-10-18- 17:25:26 | 8871964Litt: responsive navbar- 17:18:34 | beb1057Litt: navbar twewaks- 17:14:20 | 95e95f8Litt: title to tab title and app title- 17:03:14 | ed3ca76Litt: more style tweaks- 16:07:56 | 1323f1fLitt: remove unncessary selection highlighting- 16:56:05 | a01eb8aLitt: tweak colors for code to make essay nicer to read- 16:43:16 | 9d16afcLitt: code highlighting- 15:27:01 | ff3667dLitt: Merge pull request #3 from geoffreylitt/toc- 15:23:50 | a654927Litt: cleanup- 15:15:06 | 10c5703Litt: working TOC- 13:44:19 | 396796dLitt: update captions live- 13:25:30 | 3002817Litt: show captions on figures- 10:41:53 | 5905714Litt: more left margin on wider screens- 10:27:33 | e58d8bbLitt: Merge pull request #2 from geoffreylitt/upgrade-codemirror- 14:09:49 | 53bfb1aSonnentag: load assets from Github pages
- 2023-10-17- 21:35:35 | a9db51eLitt: add inline markdown formatting preview- 11:40:11 | c7765b2van Hardenberg: bump to 1.0.10
- 2023-10-16- 15:24:44 | d6fa4dbvan Hardenberg: bump automerge-repo- 15:23:31 | 5de16eevan Hardenberg: put some more stuff on window- 18:20:30 | c320579Litt: crash the editor if there's an exception in dispatch
- 2023-10-15- 21:29:08 | f3a33devan Hardenberg: bump to 1.0.8 for the sweet sweet frames
- 2023-10-13- 17:56:06 | e762ebaLitt: whoops, fix terrible perf regression- 14:48:31 | ec9543avan Hardenberg: bump automerge as well- 14:46:29 | 8d891cdvan Hardenberg: bump to 1.0.7- 15:39:37 | 15999faLitt: upgrade deps- 14:48:29 | 140e7beLitt: properly handle user canceling save- 14:23:31 | 96ef2f1Litt: add a saveAutomergeFile to window
- 2023-10-11- 16:50:59 | f677239Litt: store userid per doc- 16:20:55 | b38bffeLitt: highlight keywords- 16:07:40 | 42bf1a7Litt: tweak img + video code styling- 16:05:17 | 98a5f90Litt: don't use incrementing IDs, causes problems with id clashes across docs- 16:02:18 | 57779c4Litt: kinda fix downloads in safari- 15:55:55 | 9653063Litt: try fixing videos- 10:16:54 | ab57487Litt: try fixing images- 14:59:31 | 62a1ea7Sonnentag: show preview of embedded figures- 11:51:23 | 4bd32d4Sonnentag: Display whitespaces in comments correctly
- 2023-10-09- 12:43:34 | 1cbc68fLitt: some basic responsive tweaks- 12:40:55 | ed9afe8Litt: very very basic mobile view, no comments there yet- 11:56:30 | 266fd43Litt: unknown user as Anonymous- 11:30:10 | d7f719dLitt: fix bug in user menu- 11:22:29 | f218eb6Litt: allow users not in pre-existing list- 10:52:51 | 3b87cd0Litt: improve UX of adding a comment- 10:26:01 | 8e22475Litt: fix comment sorting and display threads better- 10:12:35 | ce31cc8Litt: position comments properly
- 2023-10-06- 17:52:52 | f2c1206Litt: initial glitchy comment stacking- 12:36:16 | 9d94ddbLitt: fix undefined user comments
- 2023-10-05- 10:41:23 | 2d92a39Litt: make cmd-s work properly- 10:22:15 | 777dec1Litt: cmd-s- 10:17:29 | 4da7372Litt: fixed topbar- 10:08:42 | 7b76040Litt: fix comment max width- 09:58:52 | 7cff794Litt: tweak comments styling- 09:53:50 | 64f8b55Litt: adjust line width- 09:48:55 | a23bdf8Litt: fix the build- 09:16:08 | bb35a3dLitt: slightly better comment
- 2023-10-04- 21:31:34 | 0d7dc0bLitt: clean up comment range handling- 18:21:19 | c1a3d2aLitt: fix comment pos- 18:03:02 | 77c21f3Litt: tweak- 18:00:31 | f04b846Litt: get replies working- 17:45:44 | 00ebc1cLitt: factor out comments sidebar- 16:56:38 | a6d649dLitt: most of the way on positioning comments- 16:51:30 | cf9c367Litt: starting to display comments- 16:28:02 | 125a0d1Litt: UI for adding comments- 16:21:26 | bfe6da2Litt: position add comment button- 16:00:56 | 6e465dbLitt: make file saving nicer- 15:57:47 | 91344f3Litt: force editor min height- 15:53:18 | 96d8e79Litt: get build passing- 15:50:34 | e0723f0Litt: add download button- 15:34:41 | e65c816Litt: vite force on yarn dev- 15:23:28 | d27f0e1Litt: basic user sessions- 14:11:49 | 3ef6a9aLitt: install shadcn/ui- 14:00:21 | 0c97356Litt: wip installing shadcn- 13:54:33 | 7663d0fLitt: Update README.md- 11:30:22 | 799307fLitt: Merge pull request #1 from pvh/codemirror
- 2023-10-03- 19:40:37 | 3232707van Hardenberg: okay, there you go -- a working app- 19:30:58 | e88e295van Hardenberg: fix geoffrey's editor now too- 14:57:35 | c0dd318Litt: bit more stlying- 12:25:00 | bb7d882Litt: editing working
- 2023-09-29- 12:12:14 | 86c252fLitt: basic llm bot
- 2023-09-28- 18:25:28 | 1a80cefLitt: add base path to support trail-runner deployment (not sure if breaks netlify)- 10:57:40 | 3ed1093Litt: fix build- 10:54:31 | 5a2f71bLitt: improve comment display- 10:39:31 | eefaffbLitt: tiny silly UI- 10:36:54 | 3aff956Litt: basic comment attaching is working- 10:26:46 | 5d580b6Litt: tweaks to comment representation- 10:21:06 | 05ebc34Litt: wip on comment threads- 10:00:30 | 19f088dLitt: change app title- 09:52:16 | 1418733Litt: try fixing fonts- 09:48:00 | bdee72aLitt: upgrade automerge-repo- 09:46:49 | 0c80b75Litt: fix build- 09:38:28 | b3fff31Litt: fix pasting, make styling look closer
- 2023-09-27- 11:19:28 | 3dd10f6Litt: styling tweak- 11:10:29 | d4b3882Litt: downgrade slate, it works- 11:07:46 | 2372696Litt: slate is not gonna work- 11:00:17 | 7529fdfLitt: justify- 10:53:47 | bd0fdffLitt: tweaks- 10:50:19 | 3f3246eLitt: tweak styles- 10:44:24 | 08688c8Litt: markdown kinda working
- 2023-09-26- 17:46:15 | 5ed6d8fLitt: broken wip- 17:19:19 | 3eed6f2Litt: add a splicer button- 17:11:48 | 47a605cLitt: readme update- 17:11:27 | f93c1fdLitt: update readme- 17:08:05 | 6a5e937Litt: repro notes- 17:06:23 | 12e2e7fLitt: weird marks behavior- 16:35:52 | 3f6d66aLitt: displaying marks breaks- 16:21:16 | 3e2e23dLitt: use automerge next- 16:20:45 | 8288855Litt: initial automerge app
Code Pages:
- .eslintrc.cjs
- .gitignore
- README.md
- components.json
- deno.lock
- flake.lock
- flake.nix
- index.html
- package.json
- postcss.config.js
- public/apple-touch-icon.png
- public/assets/black-square.png
- public/assets/fira/fira-mono-v7-latin-500.woff
- public/assets/fira/fira-mono-v7-latin-500.woff2
- public/assets/fira/fira-mono-v7-latin-regular.woff
- public/assets/fira/fira-mono-v7-latin-regular.woff2
- public/assets/fira/fira-sans-v9-latin-300.woff
- public/assets/fira/fira-sans-v9-latin-300.woff2
- public/assets/fira/fira-sans-v9-latin-500.woff
- public/assets/fira/fira-sans-v9-latin-500.woff2
- public/assets/fira/fira-sans-v9-latin-600.woff
- public/assets/fira/fira-sans-v9-latin-600.woff2
- public/assets/fira/fira-sans-v9-latin-regular.woff
- public/assets/fira/fira-sans-v9-latin-regular.woff2
- public/assets/highlight.css
- public/assets/logo-favicon-128x128.png
- public/assets/logo-favicon-16x16.png
- public/assets/logo-favicon-192x192.png
- public/assets/logo-favicon-196x196.png
- public/assets/logo-favicon-310x310-transparent.png
- public/assets/logo-favicon-32x32.png
- public/assets/logo-favicon-64x64.png
- public/assets/logo-favicon-96x96.png
- public/assets/logo-favicon-apple-touch.png
- public/assets/logo-lockup.svg
- public/assets/merriweather/Merriweather-Black.ttf
- public/assets/merriweather/Merriweather-BlackItalic.ttf
- public/assets/merriweather/Merriweather-Bold.ttf
- public/assets/merriweather/Merriweather-BoldItalic.ttf
- public/assets/merriweather/Merriweather-Italic.ttf
- public/assets/merriweather/Merriweather-Light.ttf
- public/assets/merriweather/Merriweather-LightItalic.ttf
- public/assets/merriweather/Merriweather-Regular.ttf
- public/assets/merriweather/merriweather-sans-v10-latin-300.woff
- public/assets/merriweather/merriweather-sans-v10-latin-300.woff2
- public/assets/merriweather/merriweather-sans-v10-latin-700.woff
- public/assets/merriweather/merriweather-sans-v10-latin-700.woff2
- public/assets/merriweather/merriweather-sans-v10-latin-800.woff
- public/assets/merriweather/merriweather-sans-v10-latin-800.woff2
- public/assets/merriweather/merriweather-sans-v10-latin-regular.woff
- public/assets/merriweather/merriweather-sans-v10-latin-regular.woff2
- public/assets/merriweather/merriweather-v20-latin-700.woff
- public/assets/merriweather/merriweather-v20-latin-700.woff2
- public/assets/merriweather/merriweather-v20-latin-regular.woff
- public/assets/merriweather/merriweather-v20-latin-regular.woff2
- public/assets/prism.js
- public/assets/splat-article-last.svg
- public/assets/splat-separator-1.svg
- public/assets/splat-span.svg
- public/assets/splat-underline-1-default.svg
- public/assets/splat-underline-1-hover.svg
- public/assets/splat-underline-2-default.svg
- public/assets/splat-underline-2-hover.svg
- public/assets/splat.svg
- public/favicon-16x16.png
- public/favicon-32x32.png
- public/favicon.ico
- public/vite.svg
- service-worker.js
- src/DocExplorer/account.ts
- src/DocExplorer/components/AccountPicker.tsx
- src/DocExplorer/components/ContactAvatar.tsx
- src/DocExplorer/components/DocExplorer.tsx
- src/DocExplorer/components/FillFlexParent.tsx
- src/DocExplorer/components/LoadingScreen.tsx
- src/DocExplorer/components/Sidebar.tsx
- src/DocExplorer/components/SyncIndicator.tsx
- src/DocExplorer/components/Topbar.tsx
- src/DocExplorer/hooks/useSelectedDocLink.tsx
- src/DocExplorer/hooks/useSyncDocTitles.ts
- src/DocExplorer/index.css
- src/DocExplorer/main.tsx
- src/DocExplorer/mount.ts
- src/DocExplorer/navigation.ts
- src/DocExplorer/tools.ts
- src/DocExplorer/utils.ts
- src/components/ui/avatar.tsx
- src/components/ui/button.tsx
- src/components/ui/command.tsx
- src/components/ui/context-menu.tsx
- src/components/ui/dialog.tsx
- src/components/ui/dropdown-menu.tsx
- src/components/ui/input.tsx
- src/components/ui/label.tsx
- src/components/ui/popover.tsx
- src/components/ui/progress.tsx
- src/components/ui/tabs.tsx
- src/components/ui/textarea.tsx
- src/components/ui/tooltip.tsx
- src/datatypes.ts
- src/folders/components/FolderViewer.tsx
- src/folders/datatype.ts
- src/folders/useDocumentWithLinks.ts
- src/folders/useFolderDocWithChildren.ts
- src/index.ts
- src/lib/utils.ts
- src/tee/assets.ts
- src/tee/codemirrorPlugins/codeMonospace.ts
- src/tee/codemirrorPlugins/commentThreads.ts
- src/tee/codemirrorPlugins/dragAndDropFiles.ts
- src/tee/codemirrorPlugins/dropCursor.ts
- src/tee/codemirrorPlugins/frontmatter.ts
- src/tee/codemirrorPlugins/highlightKeywords.ts
- src/tee/codemirrorPlugins/lineWrapping.ts
- src/tee/codemirrorPlugins/previewFigures.ts
- src/tee/codemirrorPlugins/previewMarkdownImages.ts
- src/tee/codemirrorPlugins/tableOfContentsPreview.tsx
- src/tee/codemirrorPlugins/theme.ts
- src/tee/components/CommentsSidebar.tsx
- src/tee/components/MarkdownEditor.tsx
- src/tee/components/TinyEssayEditor.tsx
- src/tee/datatype.ts
- src/tee/index.css
- src/tee/main.tsx
- src/tee/mount.ts
- src/tee/schema.ts
- src/tee/utils.ts
- src/tldraw/components/TLDraw.tsx
- src/tldraw/datatype.ts
- src/tldraw/main.tsx
- src/tldraw/mount.ts
- src/tldraw/schema.ts
- src/vendor/automerge-wasm/LICENSE
- src/vendor/automerge-wasm/README.md
- src/vendor/automerge-wasm/index.d.ts
- src/vendor/automerge-wasm/package.json
- src/vendor/automerge-wasm/web/automerge_wasm.js
- src/vendor/automerge-wasm/web/automerge_wasm_bg.wasm
- src/vendor/automerge-wasm/web/index.js
- src/vite-env.d.ts
- standalone.html
- tailwind.config.cjs
- test/SyncIndicator.test.ts
- test/useFolderDocWithChildren.test.tsx
- tsconfig.json
- tsconfig.node.json
- tsconfig.trailrunner.json
- vite.config.ts
- vitest.config.ts