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
Clone using:
git clone base.operand.online:essay
cd ./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.tsx
is the normal app entry pointsrc/index.ts
is 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.tee
is a reasonable example - Fill in
src/<your_datatype>/datatype.ts
with a TS type, an init function, and other functions - Add your new datatype to the
datatypes
map 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 | ba24a2f
Litt: readme edit to bump deploy2024-05-09
17:23:40 | b83cf6b
Litt: fix unique key in folderviewer17:23:10 | 7779f9a
Litt: bump automerge-repo2024-05-07
14:04:44 | 96a5817
Litt: Merge pull request #42 from inkandswitch/folders2024-05-06
14:24:14 | c88c77e
Sonnentag: fix initialization of previewMarkdownImages for old docs2024-04-29
16:40:19 | 728fb27
Sonnentag: #43 add support for images in tee2024-04-26
18:14:53 | 7c6474a
Sonnentag: Merge pull request #45 from inkandswitch/undo09:15:22 | 7f1bf46
Sonnentag: fix typescript errors09:13:06 | 55deba6
Sonnentag: update @automerge/automerge-codemirror2024-04-18
10:00:09 | a2d67ef
Sonnentag: use new automerge-codemirror api2024-04-16
09:54:46 | 76b7e55
Litt: add Folders to the sidebar08:11:27 | be682ef
Sonnentag: Merge pull request #40 from inkandswitch/remove-vendored-automerge-repo2024-04-15
18:19:34 | 3524122
Litt: remove unnecessary keymap bindings15:22:00 | 8194e95
Litt: tweak comment10:50:58 | 2e079a4
Sonnentag: delete vendored automerge-repo10:35:26 | 94abde7
Sonnentag: remove vendored useDocument hook10:31:43 | 63022af
Sonnentag: remove setup instructions for git submodule10:29:53 | 39c1294
Sonnentag: monkey patch doc handle to set author and timestamp metadata by default10:29:01 | 1511d05
Sonnentag: remove automerge-repo submodule2024-02-26
19:19:56 | af4f2f5
Litt: Merge pull request #29 from joshuahhh/main10:31:43 | 7def181
Horowitz: allow pasting in urls with embedded automerge urls2024-02-16
15:58:51 | e6c143d
Litt: slightly improve handling of unknown doc types15:58:10 | 8bf4ec7
Litt: adjust readme2024-01-30
18:23:53 | 076f570
Litt: fix z-index16:28:15 | a0d80da
van Hardenberg: fix type errors15:14:38 | 462d6fe
van Hardenberg: fix presence14:28:26 | c166328
van Hardenberg: put semis back on account14:24:24 | 9cb93a6
van Hardenberg: fix mark copy12:40:07 | 4b89fdf
van Hardenberg: init and icon12:37:27 | 1309755
van Hardenberg: repair asMarkdownFile -- bit of a botch job10:27:03 | 6b168d0
van Hardenberg: resemi08:59:51 | a622a15
van Hardenberg: fix navigation2024-01-29
16:20:02 | ac76231
van Hardenberg: works16:10:34 | 29e5014
van Hardenberg: WIP13:25:30 | 3e8c30a
van Hardenberg: a first draft of TLDraw in TEE2024-01-12
16:30:27 | 0cc5273
Litt: Merge pull request #19 from inkandswitch/tee-change-attribution16:21:50 | 1fb80c3
Litt: build command to handle vendored automerge-repo14:51:35 | 91814d1
Litt: try an https url14:38:14 | 9aadc1c
Litt: bump again09:57:16 | d47ed62
Litt: bump the repo to trigger deploy13:47:00 | 0e74106
Sonnentag: Use new metadata api2024-01-11
12:54:59 | 566573c
Sonnentag: Fix README12:40:07 | f85c748
Sonnentag: Update instructions in README for setting up the repo12:19:08 | a430bd1
Sonnentag: Rename automerge-repo -> vendored-automerge-repo09:43:13 | 740b109
Sonnentag: Add automerge-repo as a submodule2024-01-10
16:16:51 | fd15a95
Litt: whoops, re-enable line wrapping plugin15:41:35 | d3ec9de
Litt: fix rectangular selection bug by disabling drawSelection2024-01-04
11:24:20 | 3c14659
Litt: remove unused LLM file for now2024-01-03
11:18:23 | 3289c05
Litt: add a teeny bit of margin to comments10:17:09 | 4bfda72
Litt: fix type error2024-01-02
16:07:00 | f5fe437
Litt: improve positioning of comments16:06:47 | ae82582
Litt: keyboard shortcut for adding comment15:55:44 | 5d472a8
Litt: fix bug: jitter on selectio15:32:26 | 90678b9
Litt: center editor horizontally and improve responsiveness a bit15:11:34 | dd5b21f
Litt: indent wrapped lines in outlines better14:25:45 | 16c1df0
Litt: fix bug where scrolling in editor view wouldn't update visible comments2023-12-22
11:07:44 | b35cea2
Litt: Merge pull request #12 from inkandswitch/knapsack11:01:40 | dcf8fdf
Litt: dont show name after signing out10:48:47 | 39dbb9b
Litt: tweak avatar design10:48:36 | 1923c24
Litt: improve handling of account doc loading10:30:55 | 26704a4
Litt: migrate accounts on login2023-12-21
11:04:41 | 9cbbaee
Litt: add logic to migrate existing accounts + fix open logic10:38:34 | e342b73
Litt: remove clickable links feature for now2023-12-20
16:41:37 | 454684c
Litt: enter to make new document14:29:34 | f1838ff
Litt: address first round of Paul comments14:13:58 | a9fa6a8
Litt: short circuit when root folder doc hasn't been loaded yet2023-12-19
18:13:04 | dae08ff
Sonnentag: Merge pull request #15 from inkandswitch/sync-indicator-state-machine18:10:33 | 462832b
Sonnentag: fix env access in main.tsx17:58:34 | debd0aa
Sonnentag: bump automerge-repo to 1.1.0-alpha.717:57:08 | abc85c6
Sonnentag: fix handle undefined env10:36:03 | f38f5dd
Litt: Merge pull request #14 from inkandswitch/refactor-codemirror-plugins10:33:58 | 9a0c269
Litt: split out codemirror plugins into separate files2023-12-18
10:23:51 | 7aa7e05
Litt: Merge pull request #13 from inkandswitch/fix-profile-dialog-closing14:29:31 | e86f753
Sonnentag: fix copy / show account token button to not close modal10:55:46 | 8137c28
Sonnentag: Bump automerge version2023-12-15
17:25:01 | e528b89
Sonnentag: fix import in tests17:20:57 | 8b62602
Sonnentag: handle undefined 'env' variable in trail runner2023-12-13
10:45:06 | 05ed60f
Sonnentag: bump automerge-repo to alpha.610:42:47 | 81aba58
Sonnentag: Merge branch 'main' into sync-indicator-state-machine09:09:52 | 4cc01e3
Sonnentag: Merge pull request #11 from inkandswitch/profiles2023-12-12
18:38:56 | 44fe3f0
Litt: remove deprecated users field from new TEE docs15:21:03 | 960d140
Litt: removing claiming existing anon accounts on login16:06:40 | 90f45f4
Sonnentag: Make SYNC_SERVER_URL and SYNC_SERVER_STORAGE_ID configurable14:57:44 | e83769d
Sonnentag: Clean up code2023-12-11
21:23:08 | 72293e4
Litt: tweak UI16:48:25 | 61db39d
Litt: add size check on profile pics16:09:23 | ec1cf2a
Litt: tweak var name16:06:22 | 7f21be7
Litt: improve name of storage key16:04:37 | 06f3eb2
Litt: fix bug in login15:51:31 | 77c7e5a
Litt: change format of account token15:15:56 | 48f39d5
Litt: rename profile to accounts15:07:04 | 7f0ae53
Litt: move non-TEE-specific UI components into their own dir11:42:05 | 0439dcb
Litt: fix comment11:39:31 | 0df63db
Litt: reduce font weight of usernames in comments11:36:21 | 83eed2a
Litt: refactor components into separate files11:23:57 | 1c9f30d
Litt: fix DOM warnings + improve password manager handling11:13:18 | c8622b7
Litt: update UI copy12:58:50 | 00e7515
Sonnentag: Remove old user session code12:46:55 | 09fb1cf
Sonnentag: Improve profile2023-12-08
14:29:04 | cd2cee8
Sonnentag: Remove logging14:20:38 | 87db2ec
Sonnentag: Rename profile Url -> secrete code13:41:01 | fba2730
Sonnentag: Fix hook bugs2023-12-07
15:21:41 | ef72ff0
Sonnentag: Clean up15:09:34 | cbc5ca1
Sonnentag: Add details to sync indicator2023-12-06
14:46:52 | 1c2a556
Sonnentag: Use new contacts in comments13:51:57 | 4ab57a3
Sonnentag: Implement login11:50:22 | a48b897
Sonnentag: Show profile url when logged in11:19:04 | b8a9df3
Sonnentag: allow to upload profile images10:24:24 | b5986ad
Sonnentag: basic profile2023-12-05
13:22:39 | bf22d7d
Sonnentag: Fix sync state2023-12-04
11:25:03 | 84b391f
Litt: initial draft of knapsack sidebar11:25:03 | 0b51451
van Hardenberg: add entry point for trail-runner15:02:50 | df08e5f
Sonnentag: Fixes to make it run in trail runner2023-11-27
16:51:58 | 6c282b9
Litt: Merge pull request #9 from inkandswitch/optimize-cursors15:35:00 | fcc8ac3
Litt: remove unused imports14:20:24 | 5e6d7b2
Litt: disable paren matching2023-11-24
17:33:06 | 0f4c5f9
Sonnentag: Small fixes16:12:22 | 303102e
Sonnentag: Connect sync indicator with state machine2023-11-23
14:56:04 | c2bfda4
Sonnentag: Add state machine for sync state indicator2023-11-22
16:50:29 | f655125
Litt: Merge pull request #5 from inkandswitch/tsc-to-trailrunner16:45:54 | d871493
Litt: fix image path in index.ts16:37:14 | df9c016
Litt: put index.css in dist, not dist/assets16:34:14 | 0b03d6c
Litt: remove image from src/assets16:33:44 | ffcdccd
Litt: set logo image url differently in vite and trailrunner2023-11-21
17:39:54 | ad74057
Litt: put logo in src and fix asset path17:09:35 | b32e559
Litt: try fixing the image17:05:38 | fe3789e
Litt: readme note16:47:42 | 3115f0e
Litt: add a comment16:42:54 | 0f087e0
Litt: revert test change16:42:47 | d6308b3
Litt: copy package json to built dir12:49:29 | 20cec7a
van Hardenberg: split up the build12:07:23 | 2966d7a
van Hardenberg: package.json version/name fixes for TR import00:57:53 | 8c00eed
van Hardenberg: fix assets00:55:06 | 95526dc
van Hardenberg: es module style imports00:35:25 | e37f39a
van Hardenberg: fix paths00:34:13 | 42f7699
van Hardenberg: not sure if this will work but it's more likely to, at least00:18:07 | 0718da8
van Hardenberg: remove some hacks2023-11-20
15:35:44 | c299e13
van Hardenberg: cross platform CLI2023-11-14
14:52:33 | 0f7c281
van Hardenberg: bit of a WIP14:06:43 | 95d6481
van Hardenberg: Merge branch 'main' into tsc-to-trailrunner15:22:29 | 3b36e74
Litt: fix nesting dom warning14:33:41 | 028516d
Litt: make little ux improvements to sync state19:14:38 | d76ef8b
Sonnentag: Merge pull request #6 from inkandswitch/sync-state18:52:48 | 56aa1ab
Sonnentag: Fix sync timeout & ui tweaks10:48:56 | 3f6f9e3
Litt: tweak popover design16:41:16 | 517271f
Sonnentag: quick fixes10:32:20 | 89f146e
Litt: remove unused import10:30:49 | 4038542
Litt: add popover with more details11:09:50 | 82801ab
Sonnentag: fix sync timeout10:46:23 | db3e0b4
Sonnentag: Wait a while for initial connection before showing an error10:27:04 | 1bbf280
Sonnentag: Show sync error if we have pending changes and the server is not responding09:27:36 | 2c520ca
Sonnentag: keep icon in place2023-11-13
10:29:34 | f763790
Litt: make resolving cursor positions more efficient18:03:27 | ddc76b9
Litt: cleanup18:01:57 | febb567
Litt: initial draft of icons14:52:15 | e80e460
van Hardenberg: patch cleanup14:51:27 | fbd2e14
van Hardenberg: support local server14:45:06 | 95c1255
van Hardenberg: yarn lock14:43:49 | 128393c
van Hardenberg: update deps14:43:12 | 6852957
van Hardenberg: Merge branch 'main' into sync-state2023-11-10
16:11:03 | 469030b
Sonnentag: Indicate online and error state in syncIndicator2023-11-08
14:27:43 | dfcf6e4
Litt: Update README.md14:21:33 | e531645
Litt: Update README.md14:21:14 | 077a4c1
Litt: update readme2023-11-06
17:42:12 | 11e578b
Litt: fix listener removal bug17:41:54 | c0949b4
Litt: fix formatting15:59:14 | f4cf67f
Sonnentag: use handle.getRemoteHeads2023-11-03
15:51:12 | 129357d
Sonnentag: use sync state instead of remote heads in SyncIndicator12:54:05 | 930bc23
Sonnentag: allow to indent with tab2023-10-31
12:00:56 | 7212934
Sonnentag: add basic sync indicator2023-10-27
16:07:38 | 051ce6d
van Hardenberg: this works, pretty much2023-10-25
08:23:16 | 5ebd6ec
van Hardenberg: getting super close i think00:03:03 | 5c1a155
Litt: gracefully handle comments where cursor doesnt match2023-10-18
17:25:26 | 8871964
Litt: responsive navbar17:18:34 | beb1057
Litt: navbar twewaks17:14:20 | 95e95f8
Litt: title to tab title and app title17:03:14 | ed3ca76
Litt: more style tweaks16:07:56 | 1323f1f
Litt: remove unncessary selection highlighting16:56:05 | a01eb8a
Litt: tweak colors for code to make essay nicer to read16:43:16 | 9d16afc
Litt: code highlighting15:27:01 | ff3667d
Litt: Merge pull request #3 from geoffreylitt/toc15:23:50 | a654927
Litt: cleanup15:15:06 | 10c5703
Litt: working TOC13:44:19 | 396796d
Litt: update captions live13:25:30 | 3002817
Litt: show captions on figures10:41:53 | 5905714
Litt: more left margin on wider screens10:27:33 | e58d8bb
Litt: Merge pull request #2 from geoffreylitt/upgrade-codemirror14:09:49 | 53bfb1a
Sonnentag: load assets from Github pages2023-10-17
21:35:35 | a9db51e
Litt: add inline markdown formatting preview11:40:11 | c7765b2
van Hardenberg: bump to 1.0.102023-10-16
15:24:44 | d6fa4db
van Hardenberg: bump automerge-repo15:23:31 | 5de16ee
van Hardenberg: put some more stuff on window18:20:30 | c320579
Litt: crash the editor if there's an exception in dispatch2023-10-15
21:29:08 | f3a33de
van Hardenberg: bump to 1.0.8 for the sweet sweet frames2023-10-13
17:56:06 | e762eba
Litt: whoops, fix terrible perf regression14:48:31 | ec9543a
van Hardenberg: bump automerge as well14:46:29 | 8d891cd
van Hardenberg: bump to 1.0.715:39:37 | 15999fa
Litt: upgrade deps14:48:29 | 140e7be
Litt: properly handle user canceling save14:23:31 | 96ef2f1
Litt: add a saveAutomergeFile to window2023-10-11
16:50:59 | f677239
Litt: store userid per doc16:20:55 | b38bffe
Litt: highlight keywords16:07:40 | 42bf1a7
Litt: tweak img + video code styling16:05:17 | 98a5f90
Litt: don't use incrementing IDs, causes problems with id clashes across docs16:02:18 | 57779c4
Litt: kinda fix downloads in safari15:55:55 | 9653063
Litt: try fixing videos10:16:54 | ab57487
Litt: try fixing images14:59:31 | 62a1ea7
Sonnentag: show preview of embedded figures11:51:23 | 4bd32d4
Sonnentag: Display whitespaces in comments correctly2023-10-09
12:43:34 | 1cbc68f
Litt: some basic responsive tweaks12:40:55 | ed9afe8
Litt: very very basic mobile view, no comments there yet11:56:30 | 266fd43
Litt: unknown user as Anonymous11:30:10 | d7f719d
Litt: fix bug in user menu11:22:29 | f218eb6
Litt: allow users not in pre-existing list10:52:51 | 3b87cd0
Litt: improve UX of adding a comment10:26:01 | 8e22475
Litt: fix comment sorting and display threads better10:12:35 | ce31cc8
Litt: position comments properly2023-10-06
17:52:52 | f2c1206
Litt: initial glitchy comment stacking12:36:16 | 9d94ddb
Litt: fix undefined user comments2023-10-05
10:41:23 | 2d92a39
Litt: make cmd-s work properly10:22:15 | 777dec1
Litt: cmd-s10:17:29 | 4da7372
Litt: fixed topbar10:08:42 | 7b76040
Litt: fix comment max width09:58:52 | 7cff794
Litt: tweak comments styling09:53:50 | 64f8b55
Litt: adjust line width09:48:55 | a23bdf8
Litt: fix the build09:16:08 | bb35a3d
Litt: slightly better comment2023-10-04
21:31:34 | 0d7dc0b
Litt: clean up comment range handling18:21:19 | c1a3d2a
Litt: fix comment pos18:03:02 | 77c21f3
Litt: tweak18:00:31 | f04b846
Litt: get replies working17:45:44 | 00ebc1c
Litt: factor out comments sidebar16:56:38 | a6d649d
Litt: most of the way on positioning comments16:51:30 | cf9c367
Litt: starting to display comments16:28:02 | 125a0d1
Litt: UI for adding comments16:21:26 | bfe6da2
Litt: position add comment button16:00:56 | 6e465db
Litt: make file saving nicer15:57:47 | 91344f3
Litt: force editor min height15:53:18 | 96d8e79
Litt: get build passing15:50:34 | e0723f0
Litt: add download button15:34:41 | e65c816
Litt: vite force on yarn dev15:23:28 | d27f0e1
Litt: basic user sessions14:11:49 | 3ef6a9a
Litt: install shadcn/ui14:00:21 | 0c97356
Litt: wip installing shadcn13:54:33 | 7663d0f
Litt: Update README.md11:30:22 | 799307f
Litt: Merge pull request #1 from pvh/codemirror2023-10-03
19:40:37 | 3232707
van Hardenberg: okay, there you go -- a working app19:30:58 | e88e295
van Hardenberg: fix geoffrey's editor now too14:57:35 | c0dd318
Litt: bit more stlying12:25:00 | bb7d882
Litt: editing working2023-09-29
12:12:14 | 86c252f
Litt: basic llm bot2023-09-28
18:25:28 | 1a80cef
Litt: add base path to support trail-runner deployment (not sure if breaks netlify)10:57:40 | 3ed1093
Litt: fix build10:54:31 | 5a2f71b
Litt: improve comment display10:39:31 | eefaffb
Litt: tiny silly UI10:36:54 | 3aff956
Litt: basic comment attaching is working10:26:46 | 5d580b6
Litt: tweaks to comment representation10:21:06 | 05ebc34
Litt: wip on comment threads10:00:30 | 19f088d
Litt: change app title09:52:16 | 1418733
Litt: try fixing fonts09:48:00 | bdee72a
Litt: upgrade automerge-repo09:46:49 | 0c80b75
Litt: fix build09:38:28 | b3fff31
Litt: fix pasting, make styling look closer2023-09-27
11:19:28 | 3dd10f6
Litt: styling tweak11:10:29 | d4b3882
Litt: downgrade slate, it works11:07:46 | 2372696
Litt: slate is not gonna work11:00:17 | 7529fdf
Litt: justify10:53:47 | bd0fdff
Litt: tweaks10:50:19 | 3f3246e
Litt: tweak styles10:44:24 | 08688c8
Litt: markdown kinda working2023-09-26
17:46:15 | 5ed6d8f
Litt: broken wip17:19:19 | 3eed6f2
Litt: add a splicer button17:11:48 | 47a605c
Litt: readme update17:11:27 | f93c1fd
Litt: update readme17:08:05 | 6a5e937
Litt: repro notes17:06:23 | 12e2e7f
Litt: weird marks behavior16:35:52 | 3f6d66a
Litt: displaying marks breaks16:21:16 | 3e2e23d
Litt: use automerge next16:20:45 | 8288855
Litt: 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