Cargo.lock | 146 ++++- LICENSE | 15 + apps/ios/Info.plist | 12 + apps/ios/Snowbound.entitlements | 18 + apps/ios/Snowbound.xcodeproj/project.pbxproj | 6 +- apps/ios/Snowbound/App.swift | 26 +- apps/ios/Snowbound/CanvasView.swift | 47 +- apps/ios/Snowbound/ICloud.swift | 80 +++ apps/ios/Snowbound/Ink.swift | 19 +- apps/ios/Snowbound/Lists.swift | 705 +++++++++++++++++----- apps/ios/Snowbound/Notebooks.swift | 206 ++++++- apps/ios/Snowbound/Script.swift | 10 +- apps/ios/Snowbound/Sync.swift | 8 +- arc/canvas.md | 76 ++- arc/file-format.md | 7 +- arc/platforms.md | 30 +- arc/sync.md | 54 ++ arc/ui.md | 55 +- corpus/cross-container/README.md | 20 + corpus/cross-container/candidate/Cross.one | Bin 0 -> 36880 bytes corpus/cross-container/candidate/Open Notebook.onetoc2 | Bin 0 -> 1604 bytes corpus/cross-container/cold/commands.jsonl | 3 + corpus/cross-container/cold/machine.json | 1 + corpus/cross-container/cold/notebook/Cross.one | Bin 0 -> 39976 bytes corpus/cross-container/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 3764 bytes corpus/cross-container/cold/read/environment.json | 7 + corpus/cross-container/cold/read/hierarchy.xml | 2 + corpus/cross-container/cold/read/page-000.navigation.json | 13 + corpus/cross-container/cold/read/page-000.png | Bin 0 -> 42962 bytes corpus/cross-container/cold/read/page-000.xml | 2 + corpus/cross-container/cold/read/page-001.navigation.json | 13 + corpus/cross-container/cold/read/page-001.png | Bin 0 -> 43948 bytes corpus/cross-container/cold/read/page-001.xml | 2 + corpus/cross-container/cold/read/page-002.navigation.json | 13 + corpus/cross-container/cold/read/page-002.png | Bin 0 -> 44211 bytes corpus/cross-container/cold/read/page-002.xml | 2 + corpus/cross-container/cold/read/page-003.navigation.json | 13 + corpus/cross-container/cold/read/page-003.png | Bin 0 -> 43670 bytes corpus/cross-container/cold/read/page-003.xml | 2 + corpus/cross-container/cold/read/payloads.json | 3 + corpus/cross-container/cold/run.json | 18 + corpus/cross-container/cold/scripts/cold.ps1 | 27 + corpus/cross-container/cold/scripts/read.ps1 | 144 +++++ corpus/cross-container/cold/source.json | 14 + corpus/cross-container/cold/teardown.json | 1 + corpus/cross-container/keys/before-read/environment.json | 7 + corpus/cross-container/keys/before-read/hierarchy.xml | 2 + corpus/cross-container/keys/before-read/page-000.xml | 2 + corpus/cross-container/keys/before-read/page-001.xml | 2 + corpus/cross-container/keys/before-read/page-002.xml | 2 + corpus/cross-container/keys/before-read/page-003.xml | 2 + corpus/cross-container/keys/before-read/page-004.xml | 2 + corpus/cross-container/keys/before-read/payloads.json | 3 + corpus/cross-container/keys/commands.jsonl | 6 + corpus/cross-container/keys/delete-a-whole-table.ahk | 15 + corpus/cross-container/keys/delete-a-whole-table.json | 13 + corpus/cross-container/keys/delete-a-whole-table.png | Bin 0 -> 40792 bytes corpus/cross-container/keys/delete-into-a-table.ahk | 15 + corpus/cross-container/keys/delete-into-a-table.json | 13 + corpus/cross-container/keys/delete-into-a-table.png | Bin 0 -> 42126 bytes corpus/cross-container/keys/delete-out-of-a-table.ahk | 17 + corpus/cross-container/keys/delete-out-of-a-table.json | 13 + corpus/cross-container/keys/delete-out-of-a-table.png | Bin 0 -> 43345 bytes corpus/cross-container/keys/machine.json | 1 + corpus/cross-container/keys/notebook/Cross.one | Bin 0 -> 42536 bytes corpus/cross-container/keys/notebook/Open Notebook.onetoc2 | Bin 0 -> 3900 bytes corpus/cross-container/keys/notebook/fixture.json | 23 + corpus/cross-container/keys/notebook/synthetic.one | Bin 0 -> 7428 bytes corpus/cross-container/keys/read/environment.json | 7 + corpus/cross-container/keys/read/hierarchy.xml | 2 + corpus/cross-container/keys/read/page-000.xml | 2 + corpus/cross-container/keys/read/page-001.xml | 2 + corpus/cross-container/keys/read/page-002.xml | 2 + corpus/cross-container/keys/read/page-003.xml | 2 + corpus/cross-container/keys/read/page-004.xml | 2 + corpus/cross-container/keys/read/payloads.json | 3 + corpus/cross-container/keys/run.json | 18 + corpus/cross-container/keys/scripts/cold.ps1 | 27 + corpus/cross-container/keys/scripts/read.ps1 | 144 +++++ corpus/cross-container/keys/source.json | 26 + corpus/cross-container/keys/teardown.json | 1 + corpus/cross-container/keys/type-over-a-row.ahk | 15 + corpus/cross-container/keys/type-over-a-row.json | 13 + corpus/cross-container/keys/type-over-a-row.png | Bin 0 -> 41730 bytes corpus/cross-container/native/commands.jsonl | 4 + corpus/cross-container/native/machine.json | 1 + corpus/cross-container/native/notebook/Cross.one | Bin 0 -> 29944 bytes corpus/cross-container/native/notebook/Open Notebook.onetoc2 | Bin 0 -> 3900 bytes corpus/cross-container/native/notebook/fixture.json | 23 + corpus/cross-container/native/notebook/synthetic.one | Bin 0 -> 3348 bytes corpus/cross-container/native/read/environment.json | 7 + corpus/cross-container/native/read/hierarchy.xml | 2 + corpus/cross-container/native/read/page-000.xml | 2 + corpus/cross-container/native/read/page-001.xml | 2 + corpus/cross-container/native/read/page-002.xml | 2 + corpus/cross-container/native/read/page-003.xml | 2 + corpus/cross-container/native/read/page-004.xml | 2 + corpus/cross-container/native/read/payloads.json | 3 + corpus/cross-container/native/run.json | 19 + corpus/cross-container/native/scripts/author.ps1 | 42 ++ corpus/cross-container/native/scripts/cold.ps1 | 27 + corpus/cross-container/native/scripts/read.ps1 | 144 +++++ corpus/cross-container/native/source.json | 20 + corpus/cross-container/native/teardown.json | 1 + corpus/custom-art/README.md | 19 + corpus/custom-art/candidate/.snowbound/tags.json | 20 + corpus/custom-art/candidate/.snowbound/tags/6dd10fabf6733354f911effb092fda9bfbbc9c1f3739576a18937093288767a9.svg | 13 + corpus/custom-art/candidate/.snowbound/tags/d5cf52aa0db673980ffdd0481ecaa2cae00216c8ee9c288510cf68dc3d803e92.png | Bin 0 -> 377 bytes corpus/custom-art/candidate/Custom art.one | Bin 0 -> 8024 bytes corpus/custom-art/candidate/Open Notebook.onetoc2 | Bin 0 -> 1612 bytes corpus/custom-art/cold/before-read/environment.json | 7 + corpus/custom-art/cold/before-read/hierarchy.xml | 2 + corpus/custom-art/cold/before-read/page-000.navigation.json | 13 + corpus/custom-art/cold/before-read/page-000.png | Bin 0 -> 42799 bytes corpus/custom-art/cold/before-read/page-000.xml | 2 + corpus/custom-art/cold/before-read/payloads.json | 3 + corpus/custom-art/cold/commands.jsonl | 8 + corpus/custom-art/cold/edited.png | Bin 0 -> 43388 bytes corpus/custom-art/cold/machine.json | 1 + corpus/custom-art/cold/notebook/Custom art.one | Bin 0 -> 18056 bytes corpus/custom-art/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 3780 bytes corpus/custom-art/cold/read/environment.json | 7 + corpus/custom-art/cold/read/hierarchy.xml | 2 + corpus/custom-art/cold/read/page-000.xml | 2 + corpus/custom-art/cold/read/payloads.json | 3 + corpus/custom-art/cold/run.json | 19 + corpus/custom-art/cold/scripts/author.ps1 | 7 + corpus/custom-art/cold/scripts/cold.ps1 | 27 + corpus/custom-art/cold/scripts/custom-art-edit.ps1 | 45 ++ corpus/custom-art/cold/scripts/read.ps1 | 144 +++++ corpus/custom-art/cold/sidecar.json | 30 + corpus/custom-art/cold/source.json | 32 + corpus/custom-art/cold/teardown.json | 1 + corpus/equation-join/README.md | 17 + corpus/equation-join/candidate/Open Notebook.onetoc2 | Bin 0 -> 1604 bytes corpus/equation-join/candidate/links.one | Bin 0 -> 8176 bytes corpus/equation-join/cold/commands.jsonl | 3 + corpus/equation-join/cold/machine.json | 1 + corpus/equation-join/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 3764 bytes corpus/equation-join/cold/notebook/links.one | Bin 0 -> 9696 bytes corpus/equation-join/cold/read/environment.json | 7 + corpus/equation-join/cold/read/hierarchy.xml | 2 + corpus/equation-join/cold/read/page-000.navigation.json | 13 + corpus/equation-join/cold/read/page-000.png | Bin 0 -> 40733 bytes corpus/equation-join/cold/read/page-000.xml | 3 + corpus/equation-join/cold/read/payloads.json | 3 + corpus/equation-join/cold/run.json | 18 + corpus/equation-join/cold/scripts/cold.ps1 | 27 + corpus/equation-join/cold/scripts/read.ps1 | 144 +++++ corpus/equation-join/cold/source.json | 14 + corpus/equation-join/cold/teardown.json | 1 + corpus/equation-join/lab/equation-per-paragraph.xml | 5 + corpus/equation-join/lab/equation-seam.xml | 3 + corpus/icloud-merge/README.md | 13 + corpus/icloud-merge/candidate/Open Notebook.onetoc2 | Bin 0 -> 4944 bytes corpus/icloud-merge/candidate/synthetic.one | Bin 0 -> 48544 bytes corpus/icloud-merge/cold/commands.jsonl | 3 + corpus/icloud-merge/cold/machine.json | 1 + corpus/icloud-merge/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4944 bytes corpus/icloud-merge/cold/notebook/synthetic.one | Bin 0 -> 51488 bytes corpus/icloud-merge/cold/read/af1af4b8987109ce1e335e538910fb3860b7c57eb3b6110a06aa2114e06d69a7.attachment | 1 + corpus/icloud-merge/cold/read/environment.json | 7 + corpus/icloud-merge/cold/read/hierarchy.xml | 2 + corpus/icloud-merge/cold/read/page-000.navigation.json | 13 + corpus/icloud-merge/cold/read/page-000.png | Bin 0 -> 41501 bytes corpus/icloud-merge/cold/read/page-000.xml | 2 + corpus/icloud-merge/cold/read/page-001.navigation.json | 13 + corpus/icloud-merge/cold/read/page-001.png | Bin 0 -> 47150 bytes corpus/icloud-merge/cold/read/page-001.xml | 26 + corpus/icloud-merge/cold/read/payloads.json | 10 + corpus/icloud-merge/cold/run.json | 18 + corpus/icloud-merge/cold/scripts/cold.ps1 | 27 + corpus/icloud-merge/cold/scripts/read.ps1 | 144 +++++ corpus/icloud-merge/cold/source.json | 14 + corpus/icloud-merge/cold/teardown.json | 1 + corpus/ink-pressure/README.md | 45 ++ corpus/ink-pressure/candidate/Open Notebook.onetoc2 | Bin 0 -> 1604 bytes corpus/ink-pressure/candidate/Pressure.one | Bin 0 -> 27360 bytes corpus/ink-pressure/cold/commands.jsonl | 3 + corpus/ink-pressure/cold/machine.json | 1 + corpus/ink-pressure/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 3764 bytes corpus/ink-pressure/cold/notebook/Pressure.one | Bin 0 -> 27360 bytes corpus/ink-pressure/cold/read/environment.json | 7 + corpus/ink-pressure/cold/read/hierarchy.xml | 2 + corpus/ink-pressure/cold/read/page-000.navigation.json | 13 + corpus/ink-pressure/cold/read/page-000.pdf | Bin 0 -> 97305 bytes corpus/ink-pressure/cold/read/page-000.png | Bin 0 -> 45903 bytes corpus/ink-pressure/cold/read/page-000.xml | 30 + corpus/ink-pressure/cold/read/page-001.navigation.json | 13 + corpus/ink-pressure/cold/read/page-001.pdf | Bin 0 -> 94778 bytes corpus/ink-pressure/cold/read/page-001.png | Bin 0 -> 42092 bytes corpus/ink-pressure/cold/read/page-001.xml | 8 + corpus/ink-pressure/cold/read/payloads.json | 3 + corpus/ink-pressure/cold/run.json | 18 + corpus/ink-pressure/cold/scripts/cold.ps1 | 27 + corpus/ink-pressure/cold/scripts/read.ps1 | 144 +++++ corpus/ink-pressure/cold/source.json | 14 + corpus/ink-pressure/cold/teardown.json | 1 + corpus/ink-pressure/native/commands.jsonl | 4 + corpus/ink-pressure/native/machine.json | 1 + corpus/ink-pressure/native/notebook/Open Notebook.onetoc2 | Bin 0 -> 4808 bytes corpus/ink-pressure/native/notebook/Pressure.one | Bin 0 -> 19384 bytes corpus/ink-pressure/native/read/environment.json | 7 + corpus/ink-pressure/native/read/hierarchy.xml | 2 + corpus/ink-pressure/native/read/page-000.navigation.json | 13 + corpus/ink-pressure/native/read/page-000.pdf | Bin 0 -> 98320 bytes corpus/ink-pressure/native/read/page-000.png | Bin 0 -> 44002 bytes corpus/ink-pressure/native/read/page-000.xml | 11 + corpus/ink-pressure/native/read/page-001.navigation.json | 13 + corpus/ink-pressure/native/read/page-001.pdf | Bin 0 -> 93585 bytes corpus/ink-pressure/native/read/page-001.png | Bin 0 -> 45980 bytes corpus/ink-pressure/native/read/page-001.xml | 13 + corpus/ink-pressure/native/read/payloads.json | 3 + corpus/ink-pressure/native/run.json | 19 + corpus/ink-pressure/native/scripts/author.ps1 | 108 ++++ corpus/ink-pressure/native/scripts/cold.ps1 | 27 + corpus/ink-pressure/native/scripts/read.ps1 | 144 +++++ corpus/ink-pressure/native/source.json | 1 + corpus/ink-pressure/native/teardown.json | 1 + corpus/object-outline/README.md | 17 + corpus/object-outline/candidate/Alone.one | Bin 0 -> 23784 bytes corpus/object-outline/candidate/Open Notebook.onetoc2 | Bin 0 -> 1604 bytes corpus/object-outline/cold/commands.jsonl | 3 + corpus/object-outline/cold/machine.json | 1 + corpus/object-outline/cold/notebook/Alone.one | Bin 0 -> 23784 bytes corpus/object-outline/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 3764 bytes corpus/object-outline/cold/read/93d5f94f89aaa8a154fd3f4b8ee770706ee075bda149fb5b68d4038ab5488259.attachment | 1 + corpus/object-outline/cold/read/environment.json | 7 + corpus/object-outline/cold/read/hierarchy.xml | 2 + corpus/object-outline/cold/read/page-000.navigation.json | 13 + corpus/object-outline/cold/read/page-000.png | Bin 0 -> 41671 bytes corpus/object-outline/cold/read/page-000.xml | 2 + corpus/object-outline/cold/read/page-001.navigation.json | 13 + corpus/object-outline/cold/read/page-001.png | Bin 0 -> 41798 bytes corpus/object-outline/cold/read/page-001.xml | 5 + corpus/object-outline/cold/read/payloads.json | 10 + corpus/object-outline/cold/run.json | 18 + corpus/object-outline/cold/scripts/cold.ps1 | 27 + corpus/object-outline/cold/scripts/read.ps1 | 144 +++++ corpus/object-outline/cold/source.json | 14 + corpus/object-outline/cold/teardown.json | 1 + corpus/object-outline/keys/before-read/93d5f94f89aaa8a154fd3f4b8ee770706ee075bda149fb5b68d4038ab5488259.attachment | 1 + corpus/object-outline/keys/before-read/environment.json | 7 + corpus/object-outline/keys/before-read/hierarchy.xml | 2 + corpus/object-outline/keys/before-read/page-000.xml | 2 + corpus/object-outline/keys/before-read/page-001.xml | 2 + corpus/object-outline/keys/before-read/page-002.xml | 5 + corpus/object-outline/keys/before-read/payloads.json | 10 + corpus/object-outline/keys/commands.jsonl | 6 + corpus/object-outline/keys/file-alone.ahk | 13 + corpus/object-outline/keys/file-alone.json | 13 + corpus/object-outline/keys/file-alone.png | Bin 0 -> 40266 bytes corpus/object-outline/keys/machine.json | 1 + corpus/object-outline/keys/notebook/Alone.one | Bin 0 -> 24592 bytes corpus/object-outline/keys/notebook/Open Notebook.onetoc2 | Bin 0 -> 3980 bytes corpus/object-outline/keys/notebook/fixture-data/Open Notebook.onetoc2 | Bin 0 -> 3656 bytes corpus/object-outline/keys/notebook/fixture-data/notes.txt | 1 + corpus/object-outline/keys/notebook/fixture.json | 15 + corpus/object-outline/keys/notebook/synthetic.one | Bin 0 -> 7428 bytes corpus/object-outline/keys/picture-alone.ahk | 13 + corpus/object-outline/keys/picture-alone.json | 13 + corpus/object-outline/keys/picture-alone.png | Bin 0 -> 40164 bytes corpus/object-outline/keys/read/93d5f94f89aaa8a154fd3f4b8ee770706ee075bda149fb5b68d4038ab5488259.attachment | 1 + corpus/object-outline/keys/read/environment.json | 7 + corpus/object-outline/keys/read/hierarchy.xml | 2 + corpus/object-outline/keys/read/page-000.xml | 2 + corpus/object-outline/keys/read/page-001.xml | 2 + corpus/object-outline/keys/read/page-002.xml | 5 + corpus/object-outline/keys/read/payloads.json | 10 + corpus/object-outline/keys/run.json | 18 + corpus/object-outline/keys/scripts/cold.ps1 | 27 + corpus/object-outline/keys/scripts/read.ps1 | 144 +++++ corpus/object-outline/keys/source.json | 38 ++ corpus/object-outline/keys/teardown.json | 1 + corpus/object-outline/native/commands.jsonl | 4 + corpus/object-outline/native/machine.json | 1 + corpus/object-outline/native/notebook/Alone.one | Bin 0 -> 20784 bytes corpus/object-outline/native/notebook/Open Notebook.onetoc2 | Bin 0 -> 3980 bytes corpus/object-outline/native/notebook/fixture-data/Open Notebook.onetoc2 | Bin 0 -> 3656 bytes corpus/object-outline/native/notebook/fixture-data/notes.txt | 1 + corpus/object-outline/native/notebook/fixture.json | 15 + corpus/object-outline/native/notebook/synthetic.one | Bin 0 -> 5892 bytes corpus/object-outline/native/read/93d5f94f89aaa8a154fd3f4b8ee770706ee075bda149fb5b68d4038ab5488259.attachment | 1 + corpus/object-outline/native/read/environment.json | 7 + corpus/object-outline/native/read/hierarchy.xml | 2 + corpus/object-outline/native/read/page-000.xml | 2 + corpus/object-outline/native/read/page-001.xml | 5 + corpus/object-outline/native/read/page-002.xml | 2 + corpus/object-outline/native/read/payloads.json | 10 + corpus/object-outline/native/run.json | 19 + corpus/object-outline/native/scripts/author.ps1 | 42 ++ corpus/object-outline/native/scripts/cold.ps1 | 27 + corpus/object-outline/native/scripts/read.ps1 | 144 +++++ corpus/object-outline/native/source.json | 26 + corpus/object-outline/native/teardown.json | 1 + corpus/printout/README.md | 19 + corpus/printout/candidate/Open Notebook.onetoc2 | Bin 0 -> 1612 bytes corpus/printout/candidate/Printouts.one | Bin 0 -> 268208 bytes corpus/printout/cold/commands.jsonl | 3 + corpus/printout/cold/machine.json | 1 + corpus/printout/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 3780 bytes corpus/printout/cold/notebook/Printouts.one | Bin 0 -> 268208 bytes corpus/printout/cold/read/e15f2722a8d11f9e68ac5eff54320f7c4ef5540fb6eb858223e31b983fa1bed7.attachment | Bin 0 -> 12589 bytes corpus/printout/cold/read/environment.json | 7 + corpus/printout/cold/read/hierarchy.xml | 2 + corpus/printout/cold/read/page-000.navigation.json | 13 + corpus/printout/cold/read/page-000.png | Bin 0 -> 44757 bytes corpus/printout/cold/read/page-000.xml | 74 +++ corpus/printout/cold/read/page-001.navigation.json | 13 + corpus/printout/cold/read/page-001.png | Bin 0 -> 47985 bytes corpus/printout/cold/read/page-001.xml | 526 ++++++++++++++++ corpus/printout/cold/read/payloads.json | 10 + corpus/printout/cold/run.json | 18 + corpus/printout/cold/scripts/cold.ps1 | 27 + corpus/printout/cold/scripts/read.ps1 | 144 +++++ corpus/printout/cold/source.json | 14 + corpus/printout/cold/teardown.json | 1 + corpus/printout/native/commands.jsonl | 3 + corpus/printout/native/machine.json | 1 + corpus/printout/native/notebook/Open Notebook.onetoc2 | Bin 0 -> 4816 bytes corpus/printout/native/notebook/Printouts.one | Bin 0 -> 249304 bytes corpus/printout/native/read/e15f2722a8d11f9e68ac5eff54320f7c4ef5540fb6eb858223e31b983fa1bed7.attachment | Bin 0 -> 12589 bytes corpus/printout/native/read/environment.json | 7 + corpus/printout/native/read/hierarchy.xml | 2 + corpus/printout/native/read/page-000.navigation.json | 13 + corpus/printout/native/read/page-000.png | Bin 0 -> 44721 bytes corpus/printout/native/read/page-000.xml | 74 +++ corpus/printout/native/read/page-001.navigation.json | 13 + corpus/printout/native/read/page-001.png | Bin 0 -> 45925 bytes corpus/printout/native/read/page-001.xml | 527 ++++++++++++++++ corpus/printout/native/read/payloads.json | 10 + corpus/printout/native/run.json | 18 + corpus/printout/native/scripts/cold.ps1 | 27 + corpus/printout/native/scripts/read.ps1 | 144 +++++ corpus/printout/native/source.json | 14 + corpus/printout/native/teardown.json | 1 + corpus/recording/README.md | 38 ++ corpus/recording/native/read/attached-video.xml | 3 + corpus/recording/native/read/onenote-audio-video-options.png | Bin 0 -> 42151 bytes corpus/recording/native/read/onenote-h264-avi-no-picture.png | Bin 0 -> 69629 bytes corpus/recording/native/read/onenote-no-camera.png | Bin 0 -> 78651 bytes corpus/recording/native/read/onenote-plays-attached-mjpeg-avi.png | Bin 0 -> 92660 bytes corpus/recording/native/read/onenote-plays-attached-wmv.png | Bin 0 -> 91198 bytes corpus/recording/native/read/onenote-see-playback-scrolls.png | Bin 0 -> 56026 bytes corpus/recording/native/read/onenote-see-playback.png | Bin 0 -> 68191 bytes corpus/recording/native/read/paused-while-recording.xml | 3 + corpus/recording/video/candidate/Open Notebook.onetoc2 | Bin 0 -> 1604 bytes corpus/recording/video/candidate/Recorded.one | Bin 0 -> 276984 bytes corpus/recording/video/cold/commands.jsonl | 3 + corpus/recording/video/cold/machine.json | 1 + corpus/recording/video/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 3764 bytes corpus/recording/video/cold/notebook/Recorded.one | Bin 0 -> 278480 bytes corpus/recording/video/cold/read/35256fff9b37a188c746f569cb7b12611d9718c9c4db3737f89a7e1fa11f2b94.attachment | Bin 0 -> 266580 bytes corpus/recording/video/cold/read/environment.json | 7 + corpus/recording/video/cold/read/hierarchy.xml | 2 + corpus/recording/video/cold/read/page-000.navigation.json | 13 + corpus/recording/video/cold/read/page-000.png | Bin 0 -> 45579 bytes corpus/recording/video/cold/read/page-000.xml | 2 + corpus/recording/video/cold/read/payloads.json | 10 + corpus/recording/video/cold/run.json | 18 + corpus/recording/video/cold/scripts/cold.ps1 | 27 + corpus/recording/video/cold/scripts/read.ps1 | 144 +++++ corpus/recording/video/cold/source.json | 14 + corpus/recording/video/cold/teardown.json | 1 + corpus/recording/video/onenote-plays-gstreamer.png | Bin 0 -> 84995 bytes corpus/recording/video/onenote-plays-macos-conversion.png | Bin 0 -> 97052 bytes corpus/recording/video/played-from-note.png | Bin 0 -> 66519 bytes corpus/table-tags/README.md | 19 + corpus/table-tags/candidate/Open Notebook.onetoc2 | Bin 0 -> 1604 bytes corpus/table-tags/candidate/Tables.one | Bin 0 -> 31808 bytes corpus/table-tags/cold/commands.jsonl | 3 + corpus/table-tags/cold/machine.json | 1 + corpus/table-tags/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 3764 bytes corpus/table-tags/cold/notebook/Tables.one | Bin 0 -> 34696 bytes corpus/table-tags/cold/read/environment.json | 7 + corpus/table-tags/cold/read/hierarchy.xml | 2 + corpus/table-tags/cold/read/page-000.navigation.json | 13 + corpus/table-tags/cold/read/page-000.png | Bin 0 -> 43441 bytes corpus/table-tags/cold/read/page-000.xml | 2 + corpus/table-tags/cold/read/page-001.navigation.json | 13 + corpus/table-tags/cold/read/page-001.png | Bin 0 -> 43819 bytes corpus/table-tags/cold/read/page-001.xml | 2 + corpus/table-tags/cold/read/page-002.navigation.json | 13 + corpus/table-tags/cold/read/page-002.png | Bin 0 -> 44139 bytes corpus/table-tags/cold/read/page-002.xml | 2 + corpus/table-tags/cold/read/payloads.json | 3 + corpus/table-tags/cold/run.json | 18 + corpus/table-tags/cold/scripts/cold.ps1 | 27 + corpus/table-tags/cold/scripts/read.ps1 | 144 +++++ corpus/table-tags/cold/source.json | 14 + corpus/table-tags/cold/teardown.json | 1 + corpus/table-tags/native/commands.jsonl | 4 + corpus/table-tags/native/machine.json | 1 + corpus/table-tags/native/notebook/Open Notebook.onetoc2 | Bin 0 -> 3900 bytes corpus/table-tags/native/notebook/Tables.one | Bin 0 -> 23856 bytes corpus/table-tags/native/notebook/fixture.json | 19 + corpus/table-tags/native/notebook/synthetic.one | Bin 0 -> 3348 bytes corpus/table-tags/native/read/environment.json | 7 + corpus/table-tags/native/read/hierarchy.xml | 2 + corpus/table-tags/native/read/page-000.navigation.json | 13 + corpus/table-tags/native/read/page-000.png | Bin 0 -> 44650 bytes corpus/table-tags/native/read/page-000.xml | 2 + corpus/table-tags/native/read/page-001.navigation.json | 13 + corpus/table-tags/native/read/page-001.png | Bin 0 -> 44632 bytes corpus/table-tags/native/read/page-001.xml | 2 + corpus/table-tags/native/read/page-002.navigation.json | 13 + corpus/table-tags/native/read/page-002.png | Bin 0 -> 43973 bytes corpus/table-tags/native/read/page-002.xml | 2 + corpus/table-tags/native/read/page-003.navigation.json | 13 + corpus/table-tags/native/read/page-003.png | Bin 0 -> 41348 bytes corpus/table-tags/native/read/page-003.xml | 2 + corpus/table-tags/native/read/payloads.json | 3 + corpus/table-tags/native/run.json | 19 + corpus/table-tags/native/scripts/author.ps1 | 42 ++ corpus/table-tags/native/scripts/cold.ps1 | 27 + corpus/table-tags/native/scripts/read.ps1 | 144 +++++ corpus/table-tags/native/source.json | 20 + corpus/table-tags/native/teardown.json | 1 + crates/canvas/Cargo.toml | 2 +- crates/canvas/examples/unsupported_inventory.rs | 659 ++++++++++++++++++++ crates/canvas/src/document.rs | 242 +++++++- crates/canvas/src/editor.rs | 195 +++++- crates/canvas/src/editor/equation.rs | 66 +- crates/canvas/src/editor/format.rs | 71 ++- crates/canvas/src/editor/ink.rs | 12 +- crates/canvas/src/editor/link.rs | 53 +- crates/canvas/src/editor/ops.rs | 64 +- crates/canvas/src/editor/page.rs | 41 +- crates/canvas/src/editor/recording.rs | 7 +- crates/canvas/src/editor/table.rs | 36 +- crates/canvas/src/gpu/mod.rs | 2 + crates/canvas/src/gpu/page.rs | 209 +++++-- crates/canvas/src/gpu/page/background.rs | 2 + crates/canvas/src/gpu/profile.rs | 2 + crates/canvas/src/gpu/tag_art.rs | 230 +++++++ crates/canvas/src/interaction/accessibility.rs | 6 +- crates/canvas/src/interaction/ink.rs | 33 +- crates/canvas/src/interaction/mod.rs | 397 ++++++++++-- crates/canvas/src/interaction/tests.rs | 250 ++++++++ crates/canvas/src/language.rs | 14 +- crates/canvas/src/layout.rs | 10 + crates/canvas/src/lib.rs | 1 + crates/canvas/src/outline.rs | 185 +++++- crates/canvas/src/search.rs | 2 +- crates/canvas/src/spelling.rs | 578 ++++++++++++++++++ crates/canvas/src/template.rs | 2 + crates/canvas/tests/cross_container.rs | 169 ++++++ crates/canvas/tests/custom_tags.rs | 2 + crates/canvas/tests/ink_tools.rs | 36 ++ crates/canvas/tests/links_equations.rs | 264 +++++++- crates/canvas/tests/object_outlines.rs | 100 ++++ crates/canvas/tests/ops_differential.rs | 12 +- crates/canvas/tests/printouts.rs | 121 ++++ crates/canvas/tests/recording.rs | 65 ++ crates/canvas/tests/table_tags.rs | 170 ++++++ crates/draw/Cargo.toml | 3 +- crates/draw/src/draw.glsl | 23 + crates/draw/src/draw.wgsl | 23 + crates/draw/src/edit.rs | 1 + crates/draw/src/render.rs | 49 +- crates/draw/src/render/icon.rs | 92 ++- crates/mobile/Cargo.toml | 4 + crates/mobile/include/snowbound.h | 10 + crates/mobile/src/lib.rs | 81 ++- crates/mobile/src/library.rs | 258 +++++++- crates/mobile/src/spell.rs | 105 ++++ crates/mobile/src/tests.rs | 137 ++++- crates/notebook/Cargo.toml | 3 + crates/notebook/README.md | 52 +- crates/notebook/src/background.rs | 21 +- crates/notebook/src/discover.rs | 318 ++++++++-- crates/notebook/src/discover/source.rs | 24 + crates/notebook/src/lib.rs | 13 + crates/notebook/src/location.rs | 184 ++++++ crates/notebook/src/merge.rs | 45 +- crates/notebook/src/queue.rs | 2 + crates/notebook/src/resolve.rs | 293 +++++++++ crates/notebook/src/session.rs | 198 +++++- crates/notebook/src/sidecar.rs | 166 +++++ crates/notebook/src/sidecar/tests.rs | 294 +++++++++ crates/notebook/src/smb/mod.rs | 269 ++++++++- crates/notebook/src/smb/tests.rs | 209 +++++++ crates/notebook/src/sync.rs | 45 +- crates/notebook/src/worker.rs | 57 +- crates/notebook/src/working.rs | 3 +- crates/notebook/tests/cloud.rs | 874 +++++++++++++++++++++++++++ crates/notebook/tests/discovery.rs | 214 ++++++- crates/notebook/tests/location.rs | 253 ++++++++ crates/notebook/tests/session.rs | 47 +- crates/onestore/README.md | 5 +- crates/onestore/examples/scratch_pressure.rs | 48 ++ crates/onestore/src/op/content.rs | 34 +- crates/onestore/src/op/lower.rs | 18 +- crates/onestore/src/op/model.rs | 9 +- crates/onestore/src/op/tests.rs | 11 +- crates/onestore/src/page/ink.rs | 86 ++- crates/onestore/src/page/mod.rs | 39 +- crates/onestore/src/pages.rs | 10 + crates/onestore/src/paragraph.rs | 11 +- crates/onestore/src/section.rs | 186 ++++-- crates/onestore/src/section/versions.rs | 13 +- crates/onestore/src/snapshot.rs | 42 +- crates/onestore/tests/history.rs | 181 ++++++ crates/onestore/tests/page_images.rs | 6 + crates/onestore/tests/page_ink.rs | 163 +++++ crates/onestore/tests/shared_snapshot.rs | 7 +- crates/snowbound/Cargo.toml | 11 +- crates/snowbound/assets/icons/folder.svg | 8 + crates/snowbound/assets/icons/icloud.svg | 8 + crates/snowbound/assets/icons/server.svg | 14 + crates/snowbound/assets/snow-leopard/buttons-key.png | Bin 0 -> 1948 bytes crates/snowbound/assets/snow-leopard/buttons-other.png | Bin 0 -> 1264 bytes crates/snowbound/assets/snow-leopard/scroller-horizontal-key.png | Bin 0 -> 2695 bytes crates/snowbound/assets/snow-leopard/scroller-horizontal-other.png | Bin 0 -> 1819 bytes crates/snowbound/assets/snow-leopard/scroller-horizontal-track-key.png | Bin 0 -> 1289 bytes crates/snowbound/assets/snow-leopard/scroller-horizontal-track-other.png | Bin 0 -> 1243 bytes crates/snowbound/assets/snow-leopard/scroller-vertical-key.png | Bin 0 -> 2560 bytes crates/snowbound/assets/snow-leopard/scroller-vertical-other.png | Bin 0 -> 1802 bytes crates/snowbound/assets/snow-leopard/scroller-vertical-track-key.png | Bin 0 -> 1195 bytes crates/snowbound/assets/snow-leopard/scroller-vertical-track-other.png | Bin 0 -> 1180 bytes crates/snowbound/assets/tags/bug.svg | 14 + crates/snowbound/assets/tags/camera.svg | 12 + crates/snowbound/assets/tags/coffee.svg | 12 + crates/snowbound/assets/tags/fire.svg | 8 + crates/snowbound/assets/tags/gift.svg | 10 + crates/snowbound/assets/tags/laughing.svg | 12 + crates/snowbound/assets/tags/map-pin.svg | 9 + crates/snowbound/assets/tags/rocket.svg | 13 + crates/snowbound/assets/tags/snowflake.svg | 14 + crates/snowbound/assets/tags/sparkles.svg | 8 + crates/snowbound/assets/tags/surprised.svg | 13 + crates/snowbound/assets/tags/thumbs-down.svg | 11 + crates/snowbound/assets/tags/thumbs-up.svg | 10 + crates/snowbound/assets/tags/trophy.svg | 10 + crates/snowbound/assets/tags/warning.svg | 9 + crates/snowbound/examples/release_sign.rs | 44 ++ crates/snowbound/linux/README.md | 9 +- crates/snowbound/linux/install.sh | 22 - crates/snowbound/linux/package.sh | 15 +- crates/snowbound/linux/snowbound.desktop | 4 +- crates/snowbound/linux/snowbound.png | Bin 0 -> 235761 bytes crates/snowbound/release-key.pub | 1 + crates/snowbound/src/aqua.rs | 190 +++++- crates/snowbound/src/art.rs | 3 + crates/snowbound/src/attachment.rs | 2 +- crates/snowbound/src/background.rs | 13 + crates/snowbound/src/commands.rs | 156 +++-- crates/snowbound/src/desktop_linux.rs | 452 ++++++++++++++ crates/snowbound/src/icloud_linux.rs | 49 ++ crates/snowbound/src/icloud_macos.rs | 550 +++++++++++++++++ crates/snowbound/src/library.rs | 314 +++++++++- crates/snowbound/src/link.rs | 94 ++- crates/snowbound/src/linux.rs | 158 ++--- crates/snowbound/src/macos.rs | 243 +++++++- crates/snowbound/src/main.rs | 879 ++++++++++++++++++++++----- crates/snowbound/src/manage.rs | 78 ++- crates/snowbound/src/media_linux.rs | 10 +- crates/snowbound/src/media_macos.rs | 36 +- crates/snowbound/src/menubar.rs | 6 + crates/snowbound/src/menus.rs | 2 +- crates/snowbound/src/options.rs | 74 ++- crates/snowbound/src/palette.rs | 103 +++- crates/snowbound/src/pane.rs | 220 ++++++- crates/snowbound/src/recording.rs | 165 +++-- crates/snowbound/src/rename.rs | 1 + crates/snowbound/src/screenshot.rs | 75 ++- crates/snowbound/src/screenshot/snow_leopard.rs | 303 ++++++++++ crates/snowbound/src/search.rs | 48 +- crates/snowbound/src/server.rs | 1033 ++++++++++++++++++++++++++++++++ crates/snowbound/src/settings.rs | 9 + crates/snowbound/src/sidebar.rs | 177 ++++-- crates/snowbound/src/spell_linux.rs | 176 ++++++ crates/snowbound/src/spell_macos.rs | 117 ++++ crates/snowbound/src/sync.rs | 104 +++- crates/snowbound/src/tags.rs | 636 ++++++++++++++++++-- crates/snowbound/src/templates.rs | 9 +- crates/snowbound/src/update.rs | 916 ++++++++++++++++++++++++++++ crates/snowbound/src/watch.rs | 15 +- crates/snowbound/tests/replay.rs | 124 ++++ crates/ui/Cargo.toml | 2 + crates/ui/examples/popups.rs | 27 +- crates/ui/src/access.rs | 499 +++++++++++++++ crates/ui/src/access/tests.rs | 750 +++++++++++++++++++++++ crates/ui/src/lib.rs | 156 ++++- crates/ui/src/popup.rs | 353 ++++++++--- crates/ui/src/shell.rs | 168 ++++-- crates/ui/src/tests.rs | 262 +++++++- crates/ui/src/text.rs | 20 +- crates/ui/src/widgets.rs | 82 ++- platform/snow-leopard/Cargo.lock | 23 + platform/snow-leopard/cargo.sh | 6 +- platform/snow-leopard/console/art.m | 87 +++ platform/snow-leopard/console/screen.c | 40 +- platform/snow-leopard/hello/src/main.rs | 4 +- platform/snow-leopard/link.sh | 2 + platform/snow-leopard/remote.sh | 25 +- platform/snow-leopard/rt/appkit.c | 7 + platform/snow-leopard/rt/avfoundation.c | 34 ++ platform/snow-leopard/rt/shims.c | 26 + tools/RELEASE.md | 111 ++++ tools/canvas/README.md | 8 +- tools/canvas/build_macos.py | 99 ++- tools/native/custom-art-edit.ps1 | 45 ++ tools/native/custom-art.ps1 | 7 + tools/native/ink-pressure.ps1 | 108 ++++ tools/native_cross_container.py | 66 ++ tools/native_custom_art.py | 38 ++ tools/native_object_outline.py | 57 ++ tools/release.py | 226 +++++++ tools/test_cross_container.py | 49 ++ tools/test_custom_art.py | 61 ++ tools/test_equation_join.py | 33 + tools/test_ink_pressure.py | 112 ++++ tools/test_object_outline.py | 47 ++ tools/test_printout.py | 41 ++ tools/test_recording.py | 38 ++ tools/test_release.py | 34 ++ tools/test_table_tags.py | 47 ++ tools/verify-document.py | 10 + 619 files changed, 27459 insertions(+), 1520 deletions(-)