Compare commits

...

1035 Commits

Author SHA1 Message Date
Benjamin S. Leveritt
18a3650ab0 Add pnpm to lint workflow 2024-10-21 18:04:09 +01:00
Benjamin S. Leveritt
936db45abf Fix run cmd 2024-10-21 17:57:36 +01:00
Benjamin S. Leveritt
6a764b5248 Add prettier format to workspace linting rules 2024-10-21 17:55:59 +01:00
Benjamin S. Leveritt
84a1b5f893 Roll formatter over codebase 2024-10-21 17:45:51 +01:00
Benjamin S. Leveritt
4c3b0d3a27 Add root prettier config 2024-10-21 17:33:09 +01:00
Anselm
4ac35b5b6d Hide test post 2024-10-21 17:03:16 +01:00
Anselm Eickhoff
1f409493de Merge pull request #608 from hamirmahal/fix/usage-of-a-deprecated-nodejs-version-in-unit-test
fix: usage of `a deprecated Node.js version` in CI
2024-10-21 11:53:09 +01:00
Hamir Mahal
5ac310ff9f fix: usage of a deprecated Node.js version in CI 2024-10-20 09:44:05 -07:00
Anselm Eickhoff
9a96203f8d Merge pull request #602 from gardencmp/trishalim-jazz-419
Add blog to gcmp
2024-10-20 15:58:02 +01:00
Trisha Lim
aede27f986 Move meta into mdx file 2024-10-18 19:22:59 +01:00
Trisha Lim
8aeb89e878 Add jsonld to blog post 2024-10-18 19:09:31 +01:00
Trisha Lim
31cec1986b Add blog posts feed 2024-10-18 19:09:31 +01:00
Trisha Lim
d7ae755ce4 Blog post page styling 2024-10-18 19:09:31 +01:00
Trisha Lim
d425c18b9a Add blog to gcmp 2024-10-18 19:09:31 +01:00
Anselm Eickhoff
91d94abaf2 Merge pull request #599 from gardencmp/styling/input
Add Input component and prettier to design system
2024-10-18 13:15:01 +01:00
Trisha Lim
5730c933ee Add prettier to design-system project 2024-10-18 11:09:50 +01:00
Trisha Lim
68be1274bf Add input component to design system 2024-10-18 11:06:39 +01:00
Anselm Eickhoff
14fec451ec Merge pull request #596 from gardencmp/feature/covalue-state
chore: refactor CoValueState to manage the availability logic
2024-10-18 10:15:37 +01:00
Guido D'Orsi
916073ee2a chore: refactor CoValueState to manage the availability logic 2024-10-18 00:28:44 +02:00
Anselm Eickhoff
d789ee031f Merge pull request #594 from gardencmp/trishalim-jazz-416 2024-10-17 19:09:09 +01:00
Trisha Lim
a58a73b9f2 Fix env var possibly undefined 2024-10-17 18:16:54 +01:00
Trisha Lim
4172e9f160 Add social image 2024-10-17 18:14:53 +01:00
Trisha Lim
04baa537b9 Add newsletter subscription form using Resend 2024-10-17 18:08:14 +01:00
Anselm
4a2649c2d1 Fix homepages workspace 2024-10-17 16:10:46 +01:00
Anselm Eickhoff
0845853e42 Merge pull request #593 from gardencmp/trishalim-jazz-414
Add gcmp project
2024-10-17 15:42:58 +01:00
Trisha Lim
933be40123 Dark mode styling 2024-10-17 14:37:13 +01:00
Trisha Lim
c385b9a501 Delete files 2024-10-17 14:33:17 +01:00
Trisha Lim
2c1774dc46 Add content for blog and team pages 2024-10-17 14:27:49 +01:00
Trisha Lim
77d7b4b99d Add navigation 2024-10-17 14:20:02 +01:00
Trisha Lim
3c6dca4779 Add home page content 2024-10-17 14:01:02 +01:00
Trisha Lim
1eba3a3e92 Initialize gcmp project 2024-10-17 13:34:33 +01:00
Trisha Lim
ef30e47b4b Move logos to design system 2024-10-17 12:59:20 +01:00
Trisha Lim
384e6dd3be Move Button component to design system 2024-10-17 12:52:09 +01:00
Anselm Eickhoff
5b61efc2cc Merge pull request #587 from gardencmp/trishalim-jazz-412
Add links to live demo in readme
2024-10-17 12:14:34 +01:00
Anselm Eickhoff
2623fa465c Merge pull request #584 from gardencmp/refactor/illustration
Convert hero illustration to code instead of image
2024-10-17 11:25:54 +01:00
Anselm Eickhoff
b5c8ea8e1c Merge pull request #575 from gardencmp/Rename-Jazz-Mesh-to-Jazz-Cloud
Rename Jazz Mesh to Jazz Cloud
2024-10-17 11:24:08 +01:00
Trisha Lim
352026e8ab Move highlight to another line 2024-10-17 10:17:57 +01:00
Trisha Lim
4a56365495 Add links to live demo in readme 2024-10-17 10:13:09 +01:00
Benjamin S. Leveritt
dfed6883f8 Fix leftovers 2024-10-17 07:50:44 +01:00
Trisha Lim
4473463f4a Change "Jazz Mesh" to "Jazz Cloud" in diagram 2024-10-17 07:47:00 +01:00
Benjamin S. Leveritt
b79619dcb3 Rename Global Cloud -> Jazz Cloud 2024-10-17 07:46:21 +01:00
Benjamin S. Leveritt
fe54274ac1 Update cojson docs 2024-10-17 07:46:21 +01:00
Benjamin S. Leveritt
61c1a38ba4 Update homepage cloud section 2024-10-17 07:46:18 +01:00
Benjamin S. Leveritt
76c1341549 Update homepage urls 2024-10-17 07:45:32 +01:00
Benjamin S. Leveritt
9d1bd08b77 Rename mesh page -> cloud page 2024-10-17 07:45:29 +01:00
Benjamin S. Leveritt
6cf7b974c1 Update job templates 2024-10-17 07:44:56 +01:00
Benjamin S. Leveritt
edb030e348 Update cloud blocks in mesh docs 2024-10-17 07:44:52 +01:00
Benjamin S. Leveritt
f644fc6610 Update example readmes 2024-10-17 07:28:40 +01:00
Benjamin S. Leveritt
8c7b721903 Update wss:// urls to cloud.jazz.tools 2024-10-17 07:28:40 +01:00
Trisha Lim
6b16f7a0c3 Highlight important lines 2024-10-16 21:47:20 +01:00
Trisha Lim
f3a6c752b4 Add description 2024-10-16 21:18:48 +01:00
Trisha Lim
0e053b2d47 Install handwritten font Sriracha 2024-10-16 21:04:59 +01:00
Trisha Lim
f462139327 Convert illustration to code 2024-10-16 21:01:07 +01:00
Anselm
8e32fd8688 Release 2024-10-16 19:30:35 +01:00
Anselm Eickhoff
2066543754 Merge pull request #583 from gardencmp/aeplay-jazz-410
Fix internal imports in jazz-nodejs
2024-10-16 19:29:18 +01:00
Anselm
a251aaabea Add changeset 2024-10-16 19:23:09 +01:00
Anselm
da95d6de08 Fix internal imports in jazz-nodejs 2024-10-16 19:21:17 +01:00
Anselm Eickhoff
cb367c38c8 Merge pull request #579 from gardencmp/styling/secondary-button
Styling for secondary button
2024-10-16 16:14:37 +01:00
Anselm Eickhoff
4acefe350c Merge pull request #580 from gardencmp/trishalim-jazz-349
Set meta title, description, and image
2024-10-16 16:13:34 +01:00
Trisha Lim
db8fa169d9 Set meta title, description, and image 2024-10-16 14:09:21 +01:00
Trisha Lim
1703bc6c74 Styling for secondary button 2024-10-16 13:29:58 +01:00
Anselm Eickhoff
7dd3d57800 Merge pull request #532 from gardencmp/anselm-jazz-378
Simplify pricing
2024-10-16 10:44:15 +01:00
Anselm
e0670a8742 Move CTA texts back under the button 2024-10-16 10:39:23 +01:00
Anselm
61f62660ca Address Trisha's feedback 2024-10-16 10:25:09 +01:00
Anselm Eickhoff
acca37fc4b Merge pull request #538 from gardencmp/trishalim-jazz-379
Redesign landing page hero
2024-10-16 10:11:15 +01:00
Anselm
88b01a14a6 Format 2024-10-16 10:09:03 +01:00
Anselm
30917c9b2e Wider gaps for tier logos 2024-10-16 10:08:50 +01:00
Anselm
4c22c75b45 Fix lockfile 2024-10-16 09:55:40 +01:00
Anselm
e9baca6781 Apply feedback 2024-10-16 09:46:39 +01:00
Anselm
46983ca49b Add missing icon 2024-10-15 17:40:49 +01:00
Anselm
c3e9790436 New iteration 2024-10-15 17:35:54 +01:00
Anselm Eickhoff
2444344929 Merge pull request #561 from gardencmp/fix-docs-typo 2024-10-15 09:21:11 +01:00
Anselm Eickhoff
d247183892 Merge pull request #472 from gardencmp/feature/react-adapter 2024-10-15 09:19:37 +01:00
pax-k
a81fe66e8f chore: docs 2024-10-14 23:28:13 +03:00
pax-k
6d43977b12 chore: docs 2024-10-14 23:24:38 +03:00
pax-k
14c00e5dd4 chore: react-native docs 2024-10-14 23:21:21 +03:00
Guido D'Orsi
be492a8184 chore(music-player): add the react-compiler linting rule 2024-10-14 22:12:50 +02:00
Guido D'Orsi
90149ac411 test: add subscribe tests 2024-10-14 20:40:08 +02:00
Guido D'Orsi
7bae6e43b7 fix(password-manager): fix infinite loop on the shared folder loading 2024-10-14 20:40:08 +02:00
Guido D'Orsi
32c2435cb1 fix(subscription): renew root value identity at each update 2024-10-14 20:40:08 +02:00
Guido D'Orsi
64feacd2c1 feat(react): migrate to useSyncExternalStore 2024-10-14 20:40:08 +02:00
Benjamin S. Leveritt
79dd3eecb6 Fix typo, improve copy 2024-10-14 17:47:21 +01:00
Anselm
62bbe9a09b Release 2024-10-14 17:32:12 +01:00
Anselm Eickhoff
4dd80a65da Merge pull request #559 from gardencmp/expo-secure-store-for-jazz-react-native
Expo secure store for jazz react native
2024-10-14 17:30:15 +01:00
pax-k
52dd1d37ab fix(react-native): set ExpoSecureStoreAdapter values accessible AFTER_FIRST_UNLOCK 2024-10-14 19:26:05 +03:00
pax-k
b75df6fa5c chore: revert jazz-react-native-media-images bump 2024-10-14 19:03:37 +03:00
pax-k
b7639cffd3 chore: changeset 2024-10-14 19:02:52 +03:00
pax-k
21575f2e79 feat(react-native): replaced react-native-mmkv with expo-secure-store and initialize it by default as kvStore in createJazzRNApp() (BREAKING) 2024-10-14 19:00:36 +03:00
pax-k
35587aaacc chore: bump jazz-react-native-media-images 2024-10-14 17:34:26 +03:00
Anselm
2398dedbae FIx lockfile 2024-10-14 15:30:42 +01:00
Anselm
d545a3b8d6 Release 2024-10-14 15:27:53 +01:00
Anselm Eickhoff
dce673ff7a Merge pull request #546 from gardencmp/feat/client-batching
feat: enable batching on client peers
2024-10-14 15:27:20 +01:00
pax
d18f6bf371 Merge pull request #557 from gardencmp/fix-native-peer-dependencies
Weaker native peer dependencies
2024-10-14 17:25:42 +03:00
pax-k
32b05b69a3 chore: changeset 2024-10-14 17:25:01 +03:00
pax-k
c1a5c3cad7 fix(react-native): weaker peer dependencies 2024-10-14 17:23:43 +03:00
Anselm
e9abaee255 Release 2024-10-14 14:57:36 +01:00
Anselm
ba998255c8 Fix lockfile 2024-10-14 14:56:21 +01:00
Anselm Eickhoff
d7c1ce70e2 Merge pull request #549 from gardencmp/changeset/batching
chore: add changeset for batching
2024-10-14 14:55:30 +01:00
Guido D'Orsi
e82cf3dd71 chore: add changeset 2024-10-14 14:56:34 +02:00
Guido D'Orsi
5542fdbbcb chore: add changeset for batching 2024-10-14 14:51:57 +02:00
Guido D'Orsi
c715587a54 feat: enable batching on client peers 2024-10-14 14:31:54 +02:00
Anselm Eickhoff
d9ac4d8dc6 Merge pull request #540 from gardencmp/feature/improve-pets-invitation
fix(pets): improve invitation flow
2024-10-14 09:30:06 +01:00
Anselm Eickhoff
f35a2cca8a Merge pull request #543 from gardencmp/fix-typo-in-browser-session
Fix typo in browserLockSession
2024-10-14 09:28:35 +01:00
Benjamin S. Leveritt
6dd6e225c9 Fix typo in browserLockSession 2024-10-14 09:08:50 +01:00
Guido D'Orsi
b84b682a4e test(pets): add a sleep after the share link creation and use a low res image 2024-10-12 12:50:09 +02:00
Guido D'Orsi
3f3c0da7e3 fix(pets): improve invitation flow 2024-10-11 22:05:18 +02:00
Trisha Lim
1ad823b52e Fix duplicate code 2024-10-11 16:49:09 +01:00
Trisha Lim
7dd958e920 Icon styling for dark mode 2024-10-11 16:38:44 +01:00
Trisha Lim
41d977d3b0 Illustration for dark mode 2024-10-11 16:36:58 +01:00
Trisha Lim
a9a3ad6e67 Mobile view 2024-10-11 16:17:12 +01:00
Trisha Lim
ca2bde4748 Illustration changes 2024-10-11 15:59:57 +01:00
Trisha Lim
9c3945b82a Add code samples to hero 2024-10-11 14:58:25 +01:00
Trisha Lim
55d95f9469 Add chat clerk example to docs 2024-10-11 13:34:43 +01:00
Trisha Lim
dbdb5820d6 Add book shelf example to docs 2024-10-11 13:34:43 +01:00
Anselm Eickhoff
bd9dc51744 Merge pull request #537 from gardencmp/JAZZ-380/implement-jazz-react-native-media-images
feat: implemented jazz-react-native-media-images
2024-10-11 11:58:11 +01:00
pax-k
984cd34822 chore: cleanup 2024-10-11 13:46:16 +03:00
pax-k
e7b8c95e21 Merge branch 'main' into JAZZ-380/implement-jazz-react-native-media-images 2024-10-11 13:34:51 +03:00
pax-k
2fbebfb60f feat: implemented jazz-react-native-media-images 2024-10-11 13:32:22 +03:00
Trisha Lim
86b2d98ba8 Add code snippet to the right of hero 2024-10-11 11:07:31 +01:00
Trisha Lim
bd8efcdb4d Redesign landing page hero 2024-10-11 10:27:57 +01:00
Anselm Eickhoff
77b25e55c6 Merge pull request #530 from gardencmp/trishalim-jazz-374
Redesign supported environments section, add logos
2024-10-11 09:30:29 +01:00
pax
9df131fd8d Merge pull request #534 from gardencmp/fix-books-demo-profile-url
fix(books-demo): added window.location.origin to profile url
2024-10-10 23:58:07 +03:00
pax-k
2aca9bee03 fix(books-demo): added window.location.origin to profile url 2024-10-10 23:57:28 +03:00
Trisha Lim
fe279ea94c Update copy 2024-10-10 19:42:51 +01:00
Trisha Lim
8481b3bf16 Styling for pricing section (#533) 2024-10-10 18:35:52 +01:00
Trisha Lim
301334c1ff Redesign supported environments section, add logos 2024-10-10 17:54:43 +01:00
Anselm
3311828432 Address some wording feedback 2024-10-10 17:37:28 +01:00
Anselm Eickhoff
480d9edb6a Merge pull request #511 from gardencmp/gudorsi-jazz-274
feat(transport-ws): add messages batching
2024-10-10 17:08:33 +01:00
Guido D'Orsi
07b62cc292 feat(websocket): buffering based on the bytes size 2024-10-10 17:54:41 +02:00
Anselm
f03f8dfeaa Better CTA subtext 2024-10-10 16:35:43 +01:00
Anselm
05e0b3d795 Less cringe CTA 2024-10-10 16:33:24 +01:00
Anselm
7ce08753f1 Simplify pricing 2024-10-10 16:27:33 +01:00
Trisha Lim
01e9255d3b Copy changes
Co-authored-by: Anselm Eickhoff <anselm.eickhoff@gmail.com>
2024-10-10 15:06:05 +01:00
Trisha Lim
0e918f60e3 Add showcase page 2024-10-10 15:06:05 +01:00
Trisha Lim
b08c5ec1d2 Add CTA to become an early adopter (#522) 2024-10-10 15:04:38 +01:00
Anselm Eickhoff
87f24fa985 Merge pull request #521 from gardencmp/feature/local-test-runner
chore(dx): configure vitest to run in watch mode on the local machine
2024-10-10 14:46:55 +01:00
Anselm Eickhoff
86df2f0132 Merge pull request #514 from gardencmp/JAZZ-314/react-native-proof-of-concept-continued
react-native chat demo with Clerk auth
2024-10-10 11:56:24 +01:00
pax-k
0e1654a474 chore: pnpm lock 2024-10-10 12:39:07 +03:00
pax-k
05f447baae Merge branch 'main' into JAZZ-314/react-native-proof-of-concept-continued 2024-10-10 12:35:54 +03:00
Guido D'Orsi
85e2bb230e chore(dx): configure vitest to run in watch mode on the local machine 2024-10-10 01:45:53 +02:00
Guido D'Orsi
e21f87f920 chore: revert change on ping type 2024-10-10 01:39:10 +02:00
Guido D'Orsi
052041d134 Merge remote-tracking branch 'origin/main' into gudorsi-jazz-274 2024-10-10 01:32:07 +02:00
Guido D'Orsi
d0e6ff8d72 fix(BinaryCoSteam): switch to Demo auth 2024-10-10 01:30:32 +02:00
Guido D'Orsi
bf8ab931ad fix: add a try/catch on the JSON.parse 2024-10-10 01:30:14 +02:00
Guido D'Orsi
5532271f14 fix: correct the batching activation 2024-10-10 00:11:56 +02:00
Guido D'Orsi
123a57169a Merge pull request #520 from gardencmp/fix/radix-react-version
fix: add react to the pnpm overrides because some examples are experiencing version mismatch
2024-10-09 23:56:20 +02:00
Guido D'Orsi
7d84191693 fix: add react to the pnpm overrides because some examples are experiencing version mismatch 2024-10-09 23:54:27 +02:00
Guido D'Orsi
b0101f8157 fix: add react to the pnpm overrides because some examples are experiencing version mismatch 2024-10-09 23:52:13 +02:00
Guido D'Orsi
8865450d28 chore: disable batching until the changes are released to the mesh 2024-10-09 22:49:08 +02:00
Guido D'Orsi
0fb12fc437 test(createWebSocketPeer): add more tests for the batching 2024-10-09 22:46:56 +02:00
Guido D'Orsi
b462a380af Merge remote-tracking branch 'origin/main' into gudorsi-jazz-274 2024-10-09 22:07:49 +02:00
pax-k
1e94004364 chore(react-native): chat demo bundle id 2024-10-09 22:19:36 +03:00
pax-k
76e7a81eef chore(react-native): DRY platform exports 2024-10-09 22:01:54 +03:00
pax-k
1445e4ab80 chore: cleanup 2024-10-09 19:55:36 +03:00
pax-k
6c8534a709 chore: cleanup 2024-10-09 19:51:29 +03:00
Anselm
99565ed03a Release 2024-10-09 17:34:10 +01:00
Anselm Eickhoff
1d3b9f9152 Merge pull request #469 from gardencmp/trishalim-jazz-342
Add book shelf example
2024-10-09 17:30:41 +01:00
Anselm
c3f4e6baec Add changeset for package export order changes 2024-10-09 17:30:10 +01:00
Anselm Eickhoff
7f0d24b113 Merge pull request #516 from gardencmp/anselm-jazz-371
Make feature copy more succinct
2024-10-09 17:26:36 +01:00
Anselm
52a649a352 Revert 2nd paragraph in local-first storage 2024-10-09 17:25:51 +01:00
Anselm
d4a89c4328 Shorten and clean up feature section 2024-10-09 17:06:04 +01:00
pax-k
508720745f chore: cleanup 2024-10-09 17:58:13 +03:00
pax-k
2fde6a47aa chore: cleanup 2024-10-09 17:49:19 +03:00
pax-k
22709e6fe0 chore: pnpm lock 2024-10-09 17:46:30 +03:00
pax-k
4ee3f7229c Merge branch 'main' into JAZZ-314/react-native-proof-of-concept-continued 2024-10-09 17:46:00 +03:00
pax-k
09e0e17559 feat(react-native): demo chat with clerk auth 2024-10-09 17:44:09 +03:00
pax-k
7b6656e99e feat(react-native): clerk auth (wip) 2024-10-09 14:36:10 +03:00
Trisha Lim
b15a295a73 Update lock file, fix error "Default condition should be last one" 2024-10-09 12:12:13 +01:00
Trisha Lim
fe384dfff6 Add book shelf example 2024-10-09 11:48:59 +01:00
Guido D'Orsi
943baffcf8 test: update the ws peer test with batching 2024-10-09 12:27:06 +02:00
Guido D'Orsi
2fb83514cc feat(transport-ws): add messages batching 2024-10-09 12:27:06 +02:00
Anselm Eickhoff
863eb73ad1 Merge pull request #484 from gardencmp/feature/chat-e2e
test: add basic e2e tests for the chat app
2024-10-09 10:55:09 +01:00
Anselm Eickhoff
5a41a9e7b9 Merge pull request #464 from gardencmp/feature/music-remake
feat: ui refresh for the music player
2024-10-09 10:50:52 +01:00
Anselm Eickhoff
f89e2772bc Fix expected Sign up button label 2024-10-09 10:49:09 +01:00
Anselm Eickhoff
7ca45c4a24 Merge pull request #494 from gardencmp/turbo-config-changes
Add build task as dependency for dev and test
2024-10-09 10:45:12 +01:00
Anselm Eickhoff
b4449b92bb Merge branch 'main' into feature/chat-e2e 2024-10-09 10:41:42 +01:00
Guido D'Orsi
10738a7c3d chore: update pkg 2024-10-09 11:41:17 +02:00
Anselm Eickhoff
08fdb0316a Merge pull request #492 from gardencmp/feature/co-json-types
fix(co.json): allow interface types as generic argument
2024-10-09 10:41:06 +01:00
Guido D'Orsi
6ebc5967f4 Merge remote-tracking branch 'origin/main' into feature/music-remake 2024-10-09 11:40:26 +02:00
Anselm
11a3da61e1 Fix jazz-run dev dep in chat example 2024-10-09 10:39:18 +01:00
Anselm Eickhoff
ef1592dbee Merge pull request #513 from gardencmp/test/pets-with-local-sync
test(pets): run tests using local sync
2024-10-09 10:35:44 +01:00
Anselm
d9152ed556 Add changeset 2024-10-09 10:31:38 +01:00
Anselm
509c8fad3f Merge branch 'main' into feature/co-json-types 2024-10-09 10:30:28 +01:00
Anselm Eickhoff
19b4f6d21d Merge pull request #510 from gardencmp/trishalim-jazz-370
Rename mesh to "Jazz Mesh", move section higher in the home page
2024-10-09 10:26:47 +01:00
Anselm
d705ef7e14 Release jazz-run 2024-10-09 10:19:36 +01:00
Guido D'Orsi
b99cc2a665 test(pets): run tests using local sync 2024-10-09 11:01:13 +02:00
Anselm Eickhoff
4e6e87aadd Merge pull request #512 from gardencmp/fix/jazz-run 2024-10-09 08:44:35 +01:00
Guido D'Orsi
561924f18f fix(jazz-run): fix broken import 2024-10-09 09:40:53 +02:00
Trisha Lim
80d5c32405 Update Jazz Mesh subheading 2024-10-08 18:04:12 +01:00
Trisha Lim
4b33a13758 Move Jazz Mesh section up the home page 2024-10-08 18:01:18 +01:00
Trisha Lim
8878c1eebd Fix home page spacing 2024-10-08 17:55:55 +01:00
Trisha Lim
c10ad968f9 Change "ours" to "Jazz Mesh" in diagram 2024-10-08 17:53:42 +01:00
Trisha Lim
a19b817818 Rename "Sync & Storage Mesh" to "Jazz Mesh" 2024-10-08 17:53:26 +01:00
Anselm Eickhoff
7192b142a3 Merge pull request #509 from gardencmp/fix/feature-section-layout 2024-10-08 17:19:09 +01:00
Trisha Lim
fc34a18934 Fix layout in homepage feature section 2024-10-08 17:08:40 +01:00
Anselm Eickhoff
d7ce6fa254 Merge branch 'main' into feature/co-json-types 2024-10-08 17:01:00 +01:00
Anselm Eickhoff
ed94e2ca2c Merge pull request #453 from gardencmp/trishalim-jazz-336
Fix scroll issue on chat example app if there are many users
2024-10-08 16:46:08 +01:00
Anselm Eickhoff
0c6e05e7ab Merge pull request #483 from gardencmp/trishalim-jazz-354
Make example code in package API reference readable
2024-10-08 16:44:21 +01:00
Anselm Eickhoff
a6e966438b Merge branch 'main' into trishalim-jazz-354 2024-10-08 16:39:07 +01:00
Anselm Eickhoff
f668bc05f2 Merge pull request #476 from davidvasandani/patch-1
fix: path issues
2024-10-08 16:37:31 +01:00
Anselm Eickhoff
4d95f8ea8e Merge pull request #477 from gardencmp/trishalim-jazz-348
Add copy button for code snippets
2024-10-08 16:37:05 +01:00
Anselm Eickhoff
9172558481 Merge pull request #508 from gardencmp/remove-top-cta
Remove top-level CTA buttons
2024-10-08 16:36:25 +01:00
Trisha Lim
fbdf091dd8 Remove top-level CTA buttons 2024-10-08 16:32:02 +01:00
Anselm Eickhoff
16c4fad514 Merge pull request #449 from gardencmp/trishalim-jazz-287
Homepage: redesign hero, add diagrams
2024-10-08 16:27:25 +01:00
Anselm
6e7591ab38 Last copy changes 2024-10-08 16:21:05 +01:00
Anselm
a85875bc53 Fix lint issues 2024-10-08 15:15:58 +01:00
Anselm
e1b25750b9 New feature copy 2024-10-08 15:06:17 +01:00
Anselm Eickhoff
eae6c27566 Merge pull request #497 from gardencmp/467-create-codate-shortcut
Add co.Date and update test
2024-10-08 14:31:22 +01:00
Anselm
f66079ea22 Fix lockfile 2024-10-08 12:18:49 +01:00
Anselm Eickhoff
2a35761401 Merge pull request #503 from gardencmp/fix/chat-height
Wrap text in chat message
2024-10-08 13:17:41 +02:00
Anselm
103a82075d Parent-frame friendlier navigation 2024-10-08 12:16:08 +01:00
Anselm
e85ab79026 Manually trigger hashchange event for now 2024-10-08 12:06:57 +01:00
Anselm
5f3680e749 Manually trigger hashchange for now 2024-10-08 12:06:27 +01:00
Trisha Lim
5956217b41 Revert "Fix: can't find input box in mobile til scrolling down"
This reverts commit 7295abeac5.
2024-10-08 12:02:41 +01:00
Anselm
03c0d81ca1 Stop chat example from creating history entries 2024-10-08 12:00:44 +01:00
Trisha Lim
0d53f378a0 Wrap text in chat app 2024-10-08 11:46:54 +01:00
Anselm
428ec8c170 Limit number of messages and scroll to bottom 2024-10-08 11:31:50 +01:00
Anselm Eickhoff
4cc442babc Merge pull request #500 from gardencmp/trishalim-jazz-365
Set 2048 character limit per message to chat app
2024-10-08 12:13:29 +02:00
Anselm Eickhoff
1f9b94c0c7 Apply suggestions from code review
Let's clamp to 10 lines
2024-10-08 11:11:27 +01:00
Trisha Lim
4c9d2b5a41 Limit chat messages to display 20 lines max 2024-10-08 11:08:11 +01:00
Trisha Lim
183e384819 Center align loading text in chat app 2024-10-08 11:08:11 +01:00
Trisha Lim
7295abeac5 Fix: can't find input box in mobile til scrolling down 2024-10-08 11:08:11 +01:00
Trisha Lim
77f1351000 Set 2048 character limit per message to chat app 2024-10-08 11:00:15 +01:00
Anselm Eickhoff
ba3e09a2a0 Merge pull request #501 from gardencmp/fix/chat-crash
fix(localNode): do not crash the app when we fail to resolve the account agent
2024-10-08 11:59:38 +02:00
Guido D'Orsi
21890eb99d fix(localNode): do not crash the app when we fail to resolve the account agent 2024-10-08 11:55:15 +02:00
Guido D'Orsi
489de02696 chore: update lockfile 2024-10-08 11:54:38 +02:00
Guido D'Orsi
4c3be94376 chore: update lockfile 2024-10-07 19:30:47 +02:00
Benjamin S. Leveritt
37180974a8 chore: update pnpm lock 2024-10-07 17:43:35 +01:00
Benjamin S. Leveritt
8cf1aa5ac4 Add co.Date and update test 2024-10-07 17:30:26 +01:00
Guido D'Orsi
7aee91eb83 fix(co.json): accept optional types 2024-10-07 16:38:55 +02:00
Guido D'Orsi
8890c84d39 fix(co.json): accept types with optional parameters 2024-10-07 16:38:55 +02:00
Guido D'Orsi
2b301c723b chore(jsonValue): fix typo in a comment 2024-10-07 16:38:55 +02:00
Guido D'Orsi
6e7f4facbd fix(co.json): allow nested interface types 2024-10-07 16:38:55 +02:00
Guido D'Orsi
a2ec72eab2 fix(co.json): disallow functions and Regexp 2024-10-07 16:38:55 +02:00
Guido D'Orsi
7ac660820f fix(co.json): allow interface types as generic argument 2024-10-07 16:38:55 +02:00
Anselm
a8d33d14c8 Release 2024-10-07 15:20:11 +01:00
Benjamin S. Leveritt
72c33640f6 Add build task as dependency for dev and test 2024-10-07 15:16:06 +01:00
Anselm Eickhoff
fd21db18fc Merge pull request #471 from gardencmp/JAZZ-314/react-native-proof-of-concept
React Native Support
2024-10-07 16:08:33 +02:00
Trisha Lim
92e9ea50d4 Fix scroll issue on chat example app if there are many users 2024-10-07 14:55:18 +01:00
Trisha Lim
d1c4f16df0 Change "Sign up as new account" to "Sign up" 2024-10-07 14:44:41 +01:00
pax-k
738940a634 fix: sherif lint - pin dependencies versions 2024-10-07 16:35:11 +03:00
pax-k
a0d3dcafdc chore: lint issues 2024-10-07 16:22:05 +03:00
pax-k
9bae5569de chore: pnpm lock 2024-10-07 16:18:44 +03:00
pax-k
6f6fcf25e7 Merge branch 'main' into JAZZ-314/react-native-proof-of-concept 2024-10-07 16:17:27 +03:00
pax-k
430cf732a6 fix: temporary skipErrorChecking for jazz-react in genDocs 2024-10-07 16:15:43 +03:00
pax-k
9851227258 chore: use the same typescript version across packages 2024-10-07 16:00:16 +03:00
pax-k
3c302cb675 fix(react-native): handle duplicate usernames by appending incremental suffix 2024-10-07 15:47:25 +03:00
pax-k
0fb11b4f98 fix(react-native): native chat UI 2024-10-07 15:46:28 +03:00
pax-k
cee3750f2e fix(react-native): polyfils 2024-10-07 15:46:00 +03:00
pax-k
140c5fc928 fix(react-native): polyfils 2024-10-07 15:45:42 +03:00
pax
fd331a5692 Merge pull request #488 from tobiaslins/improve-chat-ui-rn
First iteration of improved chat ui
2024-10-07 12:21:51 +03:00
Tobias Lins
7c12a16ad4 First iteration of chat ui 2024-10-06 21:18:16 +02:00
Guido D'Orsi
079963fb47 chore(chat): add a sr-only label to the message box 2024-10-06 11:35:39 +02:00
Guido D'Orsi
82f0ebaf6f test: add basic e2e tests for the chat app 2024-10-04 19:28:22 +02:00
Trisha Lim
3772ef9645 Don't wrap code in the middle of paragraph 2024-10-04 17:18:24 +01:00
Trisha Lim
0e67bdccfc Fix spacing in mobile menu hamburger icon 2024-10-04 17:13:42 +01:00
Trisha Lim
39e33f4fac Make example code in package API reference readable 2024-10-04 17:13:42 +01:00
pax-k
358dec2e09 feat(react-native): chat demo to handle invite links (wip) 2024-10-03 22:46:23 +03:00
pax-k
b76b9aa267 feat(react-native): added support for handling invite deep links 2024-10-03 22:45:49 +03:00
Trisha Lim
f2f10c58d7 Add copy button for code snippets 2024-10-02 20:43:05 +01:00
David Vasandani
3d77fff140 fix: path issues 2024-10-02 09:50:11 -07:00
pax-k
9cb111373b fix(react-native): added native kv storage support 2024-10-02 17:46:13 +03:00
pax-k
e07fb36c26 fix(react-native): implement network connectivity logic 2024-10-02 14:58:29 +03:00
Anselm Eickhoff
79bb915b43 Merge pull request #473 from gardencmp/trishalim-jazz-321
Remove empty space in code example tab
2024-10-02 09:38:40 +01:00
Trisha Lim
9926c485e7 Remove empty space in code example tab 2024-10-01 21:03:08 +01:00
Guido D'Orsi
abbda85c16 feat: clean up unused files and optimize subscriptions 2024-10-01 19:42:38 +02:00
pax-k
d77fb9db0c chore(react-native): cleanup 2024-10-01 20:10:09 +03:00
pax-k
595b1c71b4 feat(rn-poc): implementing react-native support 2024-10-01 19:30:13 +03:00
Guido D'Orsi
625ddd5db9 feat: ui refresh for the music player 2024-10-01 16:30:05 +02:00
Trisha Lim
9e1fa1adc6 Update illustration copy to be lowercase 2024-10-01 11:33:10 +01:00
Anselm
d87c081055 Fix lockfile 2024-10-01 10:40:25 +01:00
Anselm
f224b2b4ea Release 2024-10-01 10:11:26 +01:00
Anselm Eickhoff
f70d34fb0b Merge pull request #462 from gardencmp/gudorsi-jazz-173
changeset for the cursor fix
2024-10-01 10:09:49 +01:00
Guido D'Orsi
a075f90890 changeset 2024-10-01 11:08:36 +02:00
Anselm Eickhoff
66686e4f71 Merge pull request #461 from gardencmp/gudorsi-jazz-173
fix(jazz-react): fix cursor reset on text input updates
2024-10-01 10:07:34 +01:00
Anselm Eickhoff
e8a6f9d123 Merge pull request #460 from gardencmp/feature/text-cursor-position-test
test(CoMap): add a failing test to check the cursor position while editing text inputs
2024-10-01 10:06:44 +01:00
Trisha Lim
9246c009b8 Add example apps to docs (#456)
* Add example apps to docs
2024-10-01 09:58:25 +01:00
Guido D'Orsi
afa43dc248 fix(jazz-react): fix cursor reset on text input updates 2024-09-30 19:27:54 +02:00
Guido D'Orsi
effa15082e test(CoMap): add a failing test to check the cursor position while editing text inputs 2024-09-30 19:27:27 +02:00
pax-k
958f534a16 Merge branch 'main' into JAZZ-314/react-native-proof-of-concept 2024-09-30 16:56:02 +03:00
Anselm Eickhoff
2a648a620c Merge pull request #459 from gardencmp/fix-tests
Fix tests
2024-09-30 14:52:52 +01:00
pax-k
f10d13be3b fix: tests 2024-09-30 16:49:31 +03:00
Anselm Eickhoff
e8f7e90220 Merge pull request #454 from gardencmp/trishalim-jazz-334
Add api-reference page listing packages and descriptions
2024-09-30 11:23:03 +01:00
Trisha Lim
6bf16fd52c Add api-reference page listing packages and descriptions 2024-09-27 14:41:54 +01:00
Trisha Lim
f290f7716e Fix logo not center aligned 2024-09-27 12:48:11 +01:00
Trisha Lim
3a83fdf005 Button hover styles 2024-09-26 19:06:42 +01:00
Trisha Lim
88ca9fe406 Make arrow more subtle 2024-09-26 19:06:42 +01:00
Trisha Lim
00e5847fbe Add CTA buttons to bottom of home page 2024-09-26 19:06:42 +01:00
Trisha Lim
7d54bc8cdd Add button component 2024-09-26 19:06:42 +01:00
Trisha Lim
b684ca1fd6 Add diagram for light mode 2024-09-26 19:06:42 +01:00
Trisha Lim
3c934e97ac Add diagram to homepage, rewrite copy 2024-09-26 19:06:42 +01:00
Anselm Eickhoff
f143a4aa4d Merge pull request #451 from gardencmp/trishalim-jazz-337
Set blue (primary) color palette
2024-09-26 10:50:09 -07:00
Trisha Lim
0c07fcee1c Set blue (primary) color palette 2024-09-26 18:01:06 +01:00
Anselm Eickhoff
eca9698bbc Merge pull request #448 from gardencmp/trishalim-jazz-320
Improve styling for code snippets
2024-09-25 08:46:40 -07:00
Trisha Lim
de66d90b85 Styling for removed line in code snippet 2024-09-25 16:16:55 +01:00
Trisha Lim
4bc815a576 Improve styling for code snippets 2024-09-25 14:30:19 +01:00
Anselm Eickhoff
0bd4fea0dd Merge pull request #444 from gardencmp/trishalim-jazz-307
Emphasize invite link to join chat in chat example
2024-09-24 13:01:57 -07:00
Trisha Lim
35c310dc47 Add "copy url to invite" button 2024-09-24 19:53:04 +01:00
Trisha Lim
f80442793a Switch to url field 2024-09-24 19:17:44 +01:00
Anselm Eickhoff
98be05f697 Merge pull request #441 from gardencmp/anselm-jazz-332
Finish Guide
2024-09-24 11:13:39 -07:00
Trisha Lim
0b6e9e6c4d Dark mode styling for homepage chat example 2024-09-24 18:59:49 +01:00
Trisha Lim
45046f571f Mobile view for homepage chat example 2024-09-24 18:36:11 +01:00
Trisha Lim
4ccad8ac0b Add invite link 2024-09-24 18:17:46 +01:00
Anselm
e4d68bb56b Heading structure for Groups & Permissions 2024-09-24 10:02:27 -07:00
Anselm
ab7c560fbb Merge branch 'main' into anselm-jazz-332 2024-09-24 09:48:55 -07:00
Anselm Eickhoff
32c820be56 Merge pull request #440 from gardencmp/trishalim-jazz-322
Redesign UI of docs side nav
2024-09-24 09:43:30 -07:00
Anselm
f5d7c9fd6b Fix details marker on Safari 2024-09-24 09:36:59 -07:00
Anselm
6b90c6048b New intro 2024-09-24 09:29:52 -07:00
Trisha Lim
80bb793e3a Scroll chat body only, not whole screen 2024-09-24 15:56:09 +01:00
Trisha Lim
b275ffbe01 Redesign code example section 2024-09-24 15:43:37 +01:00
Trisha Lim
49f60bda67 Minimal UI improvements to chat example 2024-09-24 15:19:03 +01:00
Trisha Lim
8b52f180af Get design system app running 2024-09-24 13:47:33 +01:00
Trisha Lim
46365a35fe Redesign UI of docs side nav 2024-09-24 13:46:53 +01:00
Anselm
f3232b5361 Fix lockfile 2024-09-23 14:20:14 -07:00
Anselm
2b8f5ed3ca Release 2024-09-23 14:17:35 -07:00
Anselm
fcf0baee2e Fix jazz-run 2024-09-23 14:16:54 -07:00
Anselm Eickhoff
07183ffe5b Merge pull request #443 from gardencmp/trishalim-jazz-333
Spacing improvements on landing pages (home and mesh)
2024-09-23 13:46:05 -07:00
Anselm
ac9dab0b3b Group explanation and half of invitation flow 2024-09-23 12:30:56 -07:00
Trisha Lim
11c36460ac Allow horizontal scroll on tabs 2024-09-23 20:28:51 +01:00
Trisha Lim
e0d7b266e7 Spacing improvements on mesh landing page 2024-09-23 20:27:02 +01:00
Trisha Lim
3706360ffc Make borders on dark mode more subtle 2024-09-23 20:22:03 +01:00
Trisha Lim
3d7a20ca64 Spacing improvements on homepage 2024-09-23 20:20:09 +01:00
Anselm
9b1227915e Comment out TODOs 2024-09-23 11:34:38 -07:00
Anselm
dbb024e4da Reshuffle headings 2024-09-23 11:34:18 -07:00
Anselm Eickhoff
381ecaaf96 Merge pull request #438 from gardencmp/trishalim-jazz-331
Fix scroll issue on chat example
2024-09-23 09:30:14 -07:00
Anselm Eickhoff
25435ba597 Merge pull request #434 from gardencmp/trishalim-jazz-323
Make package name on side bar clickable
2024-09-23 09:29:03 -07:00
Trisha Lim
c56fd81bff Switch auth button copy to sentence case 2024-09-23 16:54:22 +01:00
Trisha Lim
707bf332d0 Fix scroll issue on chat example 2024-09-23 16:51:57 +01:00
Anselm Eickhoff
40225635f1 Merge pull request #436 from gardencmp/trishalim-jazz-326
Fix text colors in dark mode
2024-09-23 07:36:03 -07:00
Trisha Lim
e4ff701488 Fix text colors in dark mode 2024-09-23 15:25:06 +01:00
Anselm Eickhoff
314cdee815 Merge pull request #435 from gardencmp/trishalim-jazz-326 2024-09-23 07:07:30 -07:00
Trisha Lim
fa549f49b7 Fix heading colors in dark mode 2024-09-23 14:14:54 +01:00
Trisha Lim
c38460afd2 Fix inconsistent container width 2024-09-23 13:48:06 +01:00
Trisha Lim
7657c8469e Fix heading structure in docs 2024-09-23 13:11:28 +01:00
Trisha Lim
97abe86d7e Run pnpm format 2024-09-23 13:05:44 +01:00
Trisha Lim
a339dfaeb0 Make package name on side bar clickable 2024-09-23 13:05:25 +01:00
pax-k
15356960e9 chore: react-native scaffolding (wip) 2024-09-23 12:52:48 +03:00
Anselm Eickhoff
3710776d09 Merge pull request #433 from gardencmp/anselm-jazz-330
Clean up chat example
2024-09-22 18:06:42 -07:00
Anselm
dffc2ee2fe Mention lines of code again 2024-09-22 18:01:15 -07:00
Anselm
cd47928252 Fix issues 2024-09-22 17:53:11 -07:00
Anselm
4b84ede0b5 Use two spaces for the chat examples 2024-09-22 17:46:27 -07:00
Anselm
0de4d684d8 Fix chat-clerk app.tsx 2024-09-22 17:36:33 -07:00
Anselm
d78a5364f6 Rename dumb components file 2024-09-22 17:32:52 -07:00
Anselm
228dfa1799 Clean up chat example 2024-09-22 17:25:50 -07:00
Anselm
74a66eaa94 Fix lockfile 2024-09-22 14:31:10 -07:00
Anselm
96670db342 Only build examples, don't deploy them on nomad anymore 2024-09-22 14:29:55 -07:00
Anselm
e4655c3705 Fix example auth components 2024-09-22 14:23:44 -07:00
Anselm
5a5f767b3d Fix versions & lockfile 2024-09-22 14:15:15 -07:00
Anselm
9c8038ffb6 Release 2024-09-22 14:06:04 -07:00
Anselm
a524cd38a1 Don't use peerDeps for internal packages at all 2024-09-22 14:05:16 -07:00
Anselm
70960e917d Manually fix precise workspace dep versions 2024-09-22 13:53:45 -07:00
Anselm
a28d899e5c retroactively create minor changes 2024-09-22 13:43:07 -07:00
Anselm
20ef6474d4 Try forcing correct peerDep bumping 2024-09-22 13:42:11 -07:00
Anselm Eickhoff
6947593414 Merge pull request #326 from gardencmp/anselm-jazz-182
Auth refactor & Clerk integration
2024-09-22 13:11:47 -07:00
Anselm
23369dce80 Pre-release 2024-09-22 13:03:21 -07:00
Anselm
a7cd61ce75 Fix guide 2024-09-22 13:02:09 -07:00
Anselm
c702d632a2 Fix some auth state handling with logout and jazz-react 2024-09-22 12:14:06 -07:00
Anselm
9b90ae195c Add logout functionality to jazz-react (and example apps) 2024-09-22 11:50:05 -07:00
Anselm
7820232282 Add logOut to auth methods again 2024-09-22 11:37:35 -07:00
Anselm
32d588451a Mostly fix pet example 2024-09-22 11:04:13 -07:00
Anselm
ae56765efa Make password manager buildable 2024-09-22 10:18:44 -07:00
Anselm
467decfcce Fix e2e test issues with new context API 2024-09-22 10:12:19 -07:00
Anselm
2ab17d0569 Fix sherif lints 2024-09-22 09:54:07 -07:00
Anselm
543517f80a Some more merge work 2024-09-22 09:52:20 -07:00
Anselm
9ef0be665e Merge branch 'main' into anselm-jazz-182 2024-09-22 09:37:10 -07:00
Anselm
87ef6d5064 Pre-release 2024-09-22 09:06:01 -07:00
Anselm
e2ec51d3db Merge branch 'trishalim-jazz-311' 2024-09-22 08:50:17 -07:00
Anselm Eickhoff
566be392da Merge pull request #412 from gardencmp/trishalim-jazz-312
Fix footer overlaps side nav in docs
2024-09-22 08:47:08 -07:00
Anselm
7497ed2a7c Clean up nav related components and fix footer after botched merge 2024-09-22 07:16:36 -07:00
Anselm
13b0dfc38f Merge branch 'main' into trishalim-jazz-312 2024-09-22 07:09:52 -07:00
Anselm Eickhoff
1debe44cf1 Merge pull request #424 from gardencmp/feature/binarycostream-reconnection-test
test(BinaryCoStream): add a reconnection e2e test
2024-09-22 06:53:07 -07:00
Anselm Eickhoff
b737e14069 Merge pull request #411 from gardencmp/trishalim-jazz-311
Create separate pages for each section in the docs
2024-09-20 11:45:55 -07:00
Anselm
82fd148370 Add static params for packages 2024-09-20 10:58:12 -07:00
Guido D'Orsi
d0fc6dbc13 test(BinaryCoStrea): add a reconnection e2e test 2024-09-20 18:35:01 +02:00
Trisha Lim
f588c3f265 Move packages documentation to separate routes 2024-09-20 17:26:43 +01:00
Anselm Eickhoff
659e80bbf4 Merge pull request #356 from gardencmp/anselm-jazz-284
Design system setup
2024-09-20 16:15:50 +01:00
Anselm
3585e2acde Fix lint and dep errors 2024-09-20 07:44:13 -07:00
Anselm
98554523c8 Kind of start using components on the docs/guide page 2024-09-20 14:45:04 +01:00
Anselm
dbeaa35110 Use/extract components for mesh page 2024-09-20 14:30:11 +01:00
Anselm
61c719c728 Merge branch 'main' into anselm-jazz-284 2024-09-20 14:05:07 +01:00
Anselm Eickhoff
48fddecd30 Merge pull request #420 from gardencmp/trishalim-jazz-313 2024-09-20 10:57:49 +01:00
Trisha Lim
f5779077df Fix horizontal overflow on tablet in docs 2024-09-19 18:43:26 +01:00
Trisha Lim
5149fb6fbf Fix horizontal overflow on tablet in docs 2024-09-19 17:51:16 +01:00
Trisha Lim
dcc6134180 Clip text that is too long 2024-09-19 16:28:17 +01:00
Trisha Lim
ecb336829d Fix footer overlaps side nav in docs 2024-09-19 16:28:17 +01:00
Trisha Lim
2778f919a6 Use dynamic route for packages 2024-09-19 16:05:25 +01:00
Trisha Lim
ab6fcc7a7a Add metadata to each package page 2024-09-19 12:29:37 +01:00
Trisha Lim
aa284802ab Use Link instead of anchor tag 2024-09-19 11:40:15 +01:00
Trisha Lim
a6af56bc2e Add section for "Simple Public Sharing" 2024-09-19 11:36:29 +01:00
Anselm Eickhoff
751f0b4d10 Merge pull request #410 from gardencmp/feature/fix-playlist-invitation-add 2024-09-19 08:30:03 +01:00
Trisha Lim
a233eb6396 Remove sections that don't exist 2024-09-18 21:01:52 +01:00
Trisha Lim
c91d9b99be Move packages documentation to separate routes 2024-09-18 20:52:58 +01:00
Guido D'Orsi
a5b798a257 fix(musicPlayer): fix the playlist check on invitation 2024-09-18 21:48:44 +02:00
Anselm Eickhoff
18b71442ca Merge pull request #394 from gardencmp/gudorsi-jazz-300
fix(BinaryCoStream): set the stream content message as low priority in the WS outgoing channel
2024-09-18 17:36:52 +01:00
Guido D'Orsi
f350e902a8 changeset 2024-09-18 18:35:39 +02:00
Guido D'Orsi
38a6447887 fix(priority): group detection and only set binary costream as low 2024-09-18 18:29:27 +02:00
Anselm Eickhoff
39da70558b Merge pull request #408 from gardencmp/trishalim-jazz-310
Separate chat code example to 2 tabs
2024-09-18 16:50:34 +01:00
Anselm Eickhoff
73f62966ed Merge pull request #405 from gardencmp/trishalim-jazz-309
Change mono font to Commit Mono
2024-09-18 16:47:35 +01:00
Trisha Lim
c41e035b67 Change mono font to Commit Mono 2024-09-18 16:43:05 +01:00
Trisha Lim
f4c466ea30 Change mono font to IBM Plex Mono 2024-09-18 16:43:05 +01:00
Trisha Lim
91e9a267f0 Match accent color with Jazz logo 2024-09-18 16:33:53 +01:00
Trisha Lim
d1ec24a05b Dark mode styling 2024-09-18 16:28:38 +01:00
Guido D'Orsi
657159e034 chore(PeerState): sort attributes declaration 2024-09-18 17:20:41 +02:00
Guido D'Orsi
0327913e53 chore: comments 2024-09-18 17:19:06 +02:00
Trisha Lim
5ad9d652be Fix build, rewrite ChatCodeExample to CodeExampleTabs 2024-09-18 16:16:02 +01:00
Guido D'Orsi
3cde94a94b chore: fix sync.test.ts type errors 2024-09-18 16:59:20 +02:00
Guido D'Orsi
a7f036c71f Merge remote-tracking branch 'origin/main' into gudorsi-jazz-300 2024-09-18 16:58:21 +02:00
Guido D'Orsi
20b47ad8af feat: simpler priority system and extract content priority from headers 2024-09-18 16:55:05 +02:00
Trisha Lim
6f2eac383d Styling code area 2024-09-18 15:43:27 +01:00
Trisha Lim
5d40e83297 Design tabs for chat code example 2024-09-18 14:19:57 +01:00
Anselm Eickhoff
7721ccffaf Merge pull request #403 from gardencmp/JAZZ-308/check-example-app-urls
fix(examples): updated URLs for example apps
2024-09-17 14:24:56 +01:00
pax-k
aa7edc8e3f fix(examples): updated URLs for example apps 2024-09-17 16:23:33 +03:00
Anselm Eickhoff
bba1728988 Merge pull request #399 from gardencmp/JAZZ-305/integrate-test-coverage
feat: added test coverage
2024-09-17 09:16:24 +01:00
Guido D'Orsi
f1dff3e3fd test: fix sync.test.ts tests 2024-09-16 23:47:48 +02:00
Guido D'Orsi
d5604b9eb5 chore: generalize PriorityBasedMessageQueue 2024-09-16 23:40:16 +02:00
Guido D'Orsi
3acf61e2c3 feat: move the priority management from the websocket peer to the peer state 2024-09-16 23:37:57 +02:00
Guido D'Orsi
3a0d25d048 feat: extract PeerState and refactor it into a class 2024-09-16 23:37:57 +02:00
Guido D'Orsi
28720043a4 chore(cojson-transport-ws): add tests and split code 2024-09-16 23:37:57 +02:00
Guido D'Orsi
79491353da fix: fixes errors in sync due the extra push param 2024-09-16 23:37:57 +02:00
Guido D'Orsi
35eb8829ea feat(cojson-transport-ws): interleaved weighed round robin 2024-09-16 23:37:57 +02:00
Guido D'Orsi
5cd38d5974 fix(BinaryCoStream): set the stream content message as low priority in the WS outgoing stream 2024-09-16 23:37:57 +02:00
pax-k
30f1fa1557 feat: added test coverage 2024-09-16 20:48:18 +03:00
Anselm Eickhoff
fe035c3b3f Merge pull request #392 from gardencmp/feature/BinaryCoStream-e2e-ci+
chore: run e2e/BinaryCoStream tests on CI
2024-09-16 16:31:02 +01:00
Guido D'Orsi
1efe8ee6c7 chore: run e2e/BinaryCoStream tests on CI 2024-09-12 18:36:15 +02:00
Guido D'Orsi
f410a8540b fix: in the BinaryCoStream e2e test retry failed subscribes 2024-09-12 18:35:37 +02:00
Anselm Eickhoff
acb6249292 Merge pull request #385 from gardencmp/feature/sync-duration-test 2024-09-11 09:46:01 +01:00
Guido D'Orsi
77c38a1c4b chore(ci): remove BinaryCoStream from the CI tests 2024-09-10 18:14:11 +02:00
Guido D'Orsi
6e1d56a9b0 feat: add more size choices and reduce the default to 1KB 2024-09-10 18:14:11 +02:00
Guido D'Orsi
d10a7b9c76 test: e2e tests for the BinaryCoStream sync 2024-09-10 18:14:11 +02:00
Anselm Eickhoff
209f295399 Merge pull request #388 from gardencmp/feature/auth-laoding 2024-09-09 18:39:10 +01:00
Guido D'Orsi
cac2ec9aa1 changeset 2024-09-09 19:06:43 +02:00
Guido D'Orsi
30a9e7a94f fix(jazz-react): mark the auth as loading when authState is not ready 2024-09-09 19:05:52 +02:00
Anselm Eickhoff
af5adc37ca Merge pull request #386 from gardencmp/fix/music-player-example 2024-09-09 11:51:04 +01:00
Guido D'Orsi
af12226998 fix(musicPlayer): move the upload of example data outside of the initial migration 2024-09-09 12:24:27 +02:00
Anselm
6a147c2d28 Pre-release 2024-09-06 20:39:14 +01:00
Anselm Eickhoff
b8bf440f84 Merge pull request #384 from gardencmp/fix-lockfile 2024-09-06 17:31:58 +01:00
Anselm
c2b62a0fee Pre-release 2024-09-06 16:49:42 +01:00
Anselm
301458e713 Make anonymous auth work better 2024-09-06 16:48:22 +01:00
Guido D'Orsi
5198a249d1 fix: align deps 2024-09-06 16:51:46 +02:00
Guido D'Orsi
918322bc4a fix lockfile 2024-09-06 16:50:30 +02:00
Anselm Eickhoff
b66791d81a Merge pull request #383 from gardencmp/feature/monorepo-improvements
test(deepLoading): fix skipped test
2024-09-06 15:47:04 +01:00
Anselm Eickhoff
a2fbd9ed22 Merge pull request #334 from gardencmp/feature/music-player-example
feat(example): add a music player example
2024-09-06 15:34:17 +01:00
Guido D'Orsi
89111c5bf3 test(deepLoading): fix skipped test 2024-09-06 16:05:41 +02:00
Anselm
1a979b64b3 Implement guest auth 2024-09-05 18:37:24 +01:00
Anselm Eickhoff
d4a358d0f9 Merge pull request #382 from gardencmp/feature/monorepo-improvements 2024-09-05 16:53:43 +01:00
Guido D'Orsi
daf24d65f6 chore: fix or skip failing tests 2024-09-05 17:44:50 +02:00
Guido D'Orsi
9517cef183 chore: fix monorepo linting action 2024-09-05 17:38:17 +02:00
Guido D'Orsi
f70950cc82 feat(ci): run unit tests on PR 2024-09-05 17:17:53 +02:00
Guido D'Orsi
ec3dffa3e4 feat: add sherif to check monorepo dependencies 2024-09-05 17:17:35 +02:00
Guido D'Orsi
207bea3c1c tiny typo 2024-09-04 23:55:33 +02:00
Guido D'Orsi
fcae20d77c feat(musicPlayer): walkthrough until 3_actions 2024-09-04 23:54:22 +02:00
Guido D'Orsi
0a542941ad feat: add docs on the schema file 2024-09-04 23:54:06 +02:00
Guido D'Orsi
5dceef8c03 fix: avoid adding duplicate playlists when accepting 2024-09-04 23:54:06 +02:00
Guido D'Orsi
fb01eb42f1 fix: remove the example audio auto-delete 2024-09-04 23:54:06 +02:00
Guido D'Orsi
e1e3a8352e docs: update the README.md and cleanup the changelog 2024-09-04 23:54:06 +02:00
Guido D'Orsi
09678c4277 chore: merge jazz and main 2024-09-04 23:54:06 +02:00
Guido D'Orsi
5b83669368 feat: other UI improvements 2024-09-04 23:54:06 +02:00
Guido D'Orsi
30c8c922a3 feat: improve the click areas and add the Space keybinding 2024-09-04 23:54:06 +02:00
Guido D'Orsi
e05b327eb5 feat: player controls, example audio and ui fixes 2024-09-04 23:54:06 +02:00
Guido D'Orsi
06665cbbf7 feat: improve the add to playlist section nand invitation flow 2024-09-04 23:54:06 +02:00
Guido D'Orsi
c0425df2ee fix: make the playlist invite work 2024-09-04 23:54:06 +02:00
Guido D'Orsi
42cbef8063 feat(music-player): implement playlist page and sharing 2024-09-04 23:54:06 +02:00
Guido D'Orsi
d1abf06621 feat: improve the playing stability and clean up the code 2024-09-04 23:54:06 +02:00
Guido D'Orsi
1c00020859 feat: implement the basic interactions with the player (upload and play) 2024-09-04 23:54:06 +02:00
Guido D'Orsi
00dd9cea99 feat: setup the boilerplate for the musicPlayer example 2024-09-04 23:54:04 +02:00
Anselm Eickhoff
607cd0ab97 Merge pull request #367 from gardencmp/gudorsi-jazz-141 2024-09-04 21:06:05 +01:00
Anselm Eickhoff
9f65e56b21 Update forty-plants-kiss.md 2024-09-04 21:05:13 +01:00
Anselm Eickhoff
82c5d1bf5c Merge pull request #376 from gardencmp/JAZZ-295/implement-password-manager-demo 2024-09-04 16:49:49 +01:00
pax-k
deda3e571f fix(password-manager): tsconfig 2024-09-04 18:03:43 +03:00
Anselm Eickhoff
2d4039c5d2 Merge pull request #378 from gardencmp/JAZZ-296/data-in-inspector-flashes-into-view-then-disappears
fix(inspector): subscribe to latent covalues instead of loading them immediately
2024-09-04 14:24:52 +01:00
pax-k
63dd9190a2 chore: format 2024-09-04 16:16:33 +03:00
pax-k
3dfa630923 chore: cleanup 2024-09-04 16:08:08 +03:00
pax-k
63daf6af09 chore: changeset 2024-09-04 16:00:42 +03:00
pax-k
c85ccd96aa fix(inspector): subscribe to latent covalues instead of loading them immediately 2024-09-04 15:58:48 +03:00
Anselm
8b7b57fe2c Move newRandomSessionID to CryptoProvider 2024-09-04 11:41:02 +01:00
Guido D'Orsi
403b430ee4 chore: changeset 2024-09-03 18:34:04 +02:00
pax-k
f58845ef74 fix(password-manager): correct main script reference 2024-09-03 17:19:23 +03:00
pax-k
38fad35945 chore: password manager demo cleanup 2024-09-03 15:58:40 +03:00
pax-k
2533740a7c feat: password manager demo (wip) 2024-09-03 13:21:20 +03:00
Guido D'Orsi
109a7d6128 chore: use Effect.never to keep the server up, remove LocalNode comment 2024-09-03 11:45:10 +02:00
Anselm Eickhoff
ec1906e262 Merge pull request #368 from gardencmp/JAZZ-278/investigate-bug-when-assigning-null-values-to-corefs-in-applydiff 2024-09-03 09:24:46 +01:00
Anselm
ad40b883eb Pre-release 2024-09-02 17:29:47 +01:00
Anselm
1c64ae1bba First sketch of creating and finding unique CoMaps 2024-09-02 17:28:03 +01:00
pax-k
6f8028253d chore: changeset 2024-09-02 17:50:54 +03:00
pax-k
0704a76006 fix: handle null values for co.refs 2024-09-02 16:49:53 +03:00
Anselm Eickhoff
ab93a0b679 Fix #353 2024-09-02 12:11:24 +01:00
Guido D'Orsi
ed85560547 feat: rename command and add persistence 2024-09-02 11:36:52 +02:00
Guido D'Orsi
a242adf3b3 docs: update cojson-simple-sync command 2024-09-01 17:12:53 +02:00
Guido D'Orsi
1a9c7ecefd feat(jazz-run): add a command to spin a local sync server 2024-09-01 17:10:29 +02:00
Anselm Eickhoff
aded528a27 Merge pull request #357 from gardencmp/gudorsi-jazz-281 2024-08-31 17:50:00 +01:00
Guido D'Orsi
152ae9865e chore(ci): debug error with artifacts 2024-08-31 18:21:24 +02:00
Guido D'Orsi
8bd92b44f5 chore(ci): increase expect timeout to 15000 on CI 2024-08-31 17:06:11 +02:00
Guido D'Orsi
8d15e04fd0 chore(ci): fix Install Playwright Browsers 2024-08-30 19:41:07 +02:00
Guido D'Orsi
b7f3ece0f1 chore: fix action indentation 2024-08-30 19:38:32 +02:00
Guido D'Orsi
4c94ae3da2 test(pets): test incoming reaction 2024-08-30 19:34:14 +02:00
Guido D'Orsi
cd23ce0a51 feat: github action for playwright tests 2024-08-30 19:19:07 +02:00
Guido D'Orsi
8538036af7 test(pets): use pom 2024-08-30 19:13:35 +02:00
Anselm
6ee7133924 Homepage mostly extracted 2024-08-30 16:23:28 +01:00
Anselm
4fa19ece52 Pull nav into design system 2024-08-29 19:22:21 +01:00
Anselm
875ac4b84f An attempt to pull out copy and make the landign page tsx again 2024-08-29 19:09:53 +01:00
Anselm
346e797447 Pull out more stuff 2024-08-29 18:51:17 +01:00
Anselm
6ce20517bc Pre-release 2024-08-29 14:38:27 +01:00
Anselm
9509ceb975 Make me context optional 2024-08-29 14:37:52 +01:00
Anselm
bcec3be423 Pre-release 2024-08-29 14:23:07 +01:00
Anselm
e3958d1609 Rest of clerk & auth implementation + some fixes and patches 2024-08-29 14:21:22 +01:00
Anselm
7f6d778301 First extraction 🏗️ 2024-08-29 11:20:17 +01:00
Guido D'Orsi
40287a5682 feat(pets): add an e2e test suite 2024-08-29 02:26:28 +02:00
Anselm
bcfe4b794e Basic connection to design system 2024-08-28 19:03:51 +01:00
Anselm
7a27193ceb Include design system in homepage pnpm workspace 2024-08-28 18:36:36 +01:00
Anselm
6db14cefa0 Merge remote-tracking branch 'sammii-design-system/main' into anselm-jazz-284 2024-08-28 18:33:32 +01:00
Anselm
b57e1a64ac Move into subfolders in preparation of move into monorepo 2024-08-28 18:29:38 +01:00
Sammii
a1b83cceea whipping up a design system 2024-08-28 17:59:39 +01:00
Anselm
0fc7291178 Make it mostly work 2024-08-28 17:39:48 +01:00
Sammii
cd29438304 create next app 2024-08-28 15:01:15 +01:00
Samantha Haylock
7695a817ca first commit 2024-08-27 10:41:32 +01:00
Anselm
51d1cc677b Refactor all browser auth methods to new API 2024-08-23 15:56:09 +01:00
Anselm
0cf7a7aa85 Merge branch 'main' into anselm-jazz-182 2024-08-23 11:20:49 +01:00
Anselm Eickhoff
2ddce1a2de Merge pull request #327 from gardencmp/gudorsi-jazz-254 2024-08-22 19:36:30 +01:00
Guido D'Orsi
49a8b54a8a Add changesets 2024-08-22 20:33:51 +02:00
Anselm Eickhoff
04b15c7d4a Merge pull request #345 from gardencmp/gudorsi-jazz-261 2024-08-22 18:37:37 +01:00
Guido D'Orsi
5909e7e894 fix(pets): set the ownership of reactions to the write group 2024-08-22 19:25:30 +02:00
Anselm Eickhoff
7a3d519970 Merge pull request #337 from gardencmp/feat/jazz-255-loadasblob
fix(BinaryCoStream): resolve the loadAsBlob call only when the stream id ended
2024-08-22 15:00:13 +01:00
Anselm
35bbcd94e6 Add changesets 2024-08-22 14:59:40 +01:00
Anselm Eickhoff
f6629b2b58 Merge pull request #336 from gardencmp/anselm-jazz-264
Adopt neverthrow throughout cojson
2024-08-22 14:34:45 +01:00
Anselm
b4891db9fa Release 2024-08-22 14:31:02 +01:00
Anselm
4e16575f97 Hotifx release 2024-08-22 14:29:31 +01:00
Anselm
12ab20ecd9 Use queueable fork 2024-08-22 14:29:03 +01:00
Anselm
2c3a40c94b Hotfix release 2024-08-22 14:06:35 +01:00
Anselm
0d8175ba1c Use fork of queueable 2024-08-22 14:06:08 +01:00
Anselm Eickhoff
311ed74709 Delete oldExamples directory 2024-08-22 13:45:57 +01:00
Anselm Eickhoff
c86301fcfd Delete oldPackages/jazz-browser-auth0 directory 2024-08-22 13:45:47 +01:00
Anselm
032f69f692 Fix jazz-run deps even more 2024-08-22 12:49:34 +01:00
Anselm
6dc52b2a6d Fix jazz-run dependencies 2024-08-22 12:47:35 +01:00
Anselm
1232c0240a Hotifx release 2024-08-22 12:03:33 +01:00
Anselm
55fa74f44a Hack to make jazz-run create account work 2024-08-22 12:02:50 +01:00
Guido D'Orsi
627e04151d fix(CoMapInit): type validation on falsy values for required refs 2024-08-22 02:35:58 +02:00
Anselm
5d91f9f8dc Hotifx release 2024-08-21 16:20:55 +01:00
Anselm
08f1f77834 Stop using tryAddTransactionsAsync 2024-08-21 16:20:35 +01:00
Anselm
ea882aba63 Hotfix release 2024-08-21 15:59:16 +01:00
Anselm
513a78ab9b Better logging for failed transactions 2024-08-21 15:58:38 +01:00
Anselm
406ab9b0da Hotfix release 2024-08-21 15:24:27 +01:00
Anselm
140f6616cb Remove WS buffer filling log message 2024-08-21 15:23:41 +01:00
Anselm
b09589b15e Hotfix release 2024-08-21 11:39:18 +01:00
Anselm
00638897f4 only one async transaction per covalue again 2024-08-21 11:36:47 +01:00
Anselm Eickhoff
4cd68c1930 minimal inspector readme 2024-08-21 11:20:39 +01:00
Guido D'Orsi
f1f3607e28 test(BinaryCoStream): add tests for loadAsBlob 2024-08-20 19:46:13 +02:00
Guido D'Orsi
7b9f503b9e test(coStream): add tests for isBinaryStreamEnded 2024-08-20 19:35:11 +02:00
Guido D'Orsi
a18f44399c fix(BinaryCoStream): resolve the loadAsBlob call only when the stream is ended 2024-08-20 19:20:36 +02:00
Anselm
5094e6d536 Hotfix release 2024-08-20 18:03:01 +01:00
Anselm
39242e7f68 Start introducing neverthrow, make tryAddNewTransactionsAsync and handleNewContent less throwy 2024-08-20 18:02:26 +01:00
Anselm Eickhoff
be7e208b1c Merge pull request #333 from gardencmp/anselm-jazz-265
Make sure errors in storage peer completely crash jazz context instead of failing silently
2024-08-20 14:09:19 +01:00
Anselm
c3bffbf4de Release 2024-08-20 14:02:53 +01:00
Anselm
d46467f318 Hotfix release 2024-08-20 12:58:09 +01:00
Anselm
6d21400803 Get rid of simulated errors 2024-08-20 12:57:50 +01:00
Anselm
db53161296 Hotfix release 2024-08-20 12:46:15 +01:00
Anselm
cb4a116cec Make simulated errors even more likely 2024-08-20 12:45:34 +01:00
Anselm
013199b9b2 Increase chance of simulated storage bug 2024-08-20 11:43:28 +01:00
Anselm
a8b74ff703 Hotfix release 2024-08-20 11:43:20 +01:00
Anselm
b1985a9161 Throw properly on peer that should crash on close 2024-08-20 11:42:53 +01:00
Anselm
3bf512719f Hotfix release 2024-08-20 11:22:44 +01:00
Anselm
d83ed69d41 Allow crashing whole local node on peer errors 2024-08-20 11:20:20 +01:00
Anselm
fdde8db664 Hotfix release 2024-08-19 17:19:40 +01:00
Anselm
dd5581ba2d Handle ws closing while buffering 2024-08-19 17:19:01 +01:00
Anselm
07fe2b9dcf Release 2024-08-19 16:45:35 +01:00
Anselm
b297c93b80 Release fixes 2024-08-19 15:08:08 +01:00
Anselm
d2e62e5b44 Reduce log level on loading message 2024-08-19 14:50:26 +01:00
Anselm
fe73ce7514 Make failed transaction log message leaner 2024-08-19 14:48:57 +01:00
Anselm Eickhoff
0fed16cea4 Merge pull request #323 from gardencmp/callumflack-jazz-240
fix: chat example URL
2024-08-19 11:15:39 +01:00
Anselm
0503479fcf Auth refactor and clerk WIP 2024-08-19 10:48:01 +01:00
Callum Flack
08804ad435 fix: chat example URL 2024-08-19 11:03:33 +10:00
Anselm
79fa7724ad Release 2024-08-15 19:35:11 +01:00
Anselm
4604c2184a Adapt type of applyDiff to make CoMaps fully subclassable again 2024-08-15 19:34:47 +01:00
Anselm
11bac697fb Release 2024-08-15 19:23:19 +01:00
Anselm
96cec27f89 Close both ends of the peer on gracefulShutdown 2024-08-15 19:22:59 +01:00
Anselm
bcd412b8f9 Properly close connecting websockets 2024-08-15 19:22:19 +01:00
Anselm
6b456e2841 Properly close and delete peer on incoming disconnect/timeout 2024-08-15 19:10:22 +01:00
Anselm
1df72b3dc8 Reintroduce nomad example deploy, but only on main 2024-08-15 19:08:42 +01:00
Anselm
402d692739 Don't deploy examples to Nomad anymore 2024-08-15 17:02:40 +01:00
Anselm
fad46b2fb5 Release 2024-08-15 16:37:47 +01:00
Anselm
0153c80cf2 Immediately resolve an already-open websocket 2024-08-15 16:37:23 +01:00
Anselm
4f75dc8d97 Release 2024-08-15 16:17:31 +01:00
Anselm
e2c79cccb5 Remove noisy log 2024-08-15 16:17:03 +01:00
Anselm
c14a0e05be Release 2024-08-15 15:30:22 +01:00
Anselm
016dd3a5dd Fix ignoring server peers 2024-08-15 15:30:00 +01:00
Anselm
5c4ca9103c Release 2024-08-15 13:36:33 +01:00
Anselm
b4aad92907 Option to not expect pings 2024-08-15 13:36:08 +01:00
Anselm
56d1e095a1 Release 2024-08-15 13:02:39 +01:00
Anselm Eickhoff
6dee9aae49 Merge pull request #281 from gardencmp/anselm-jazz-190
Remove effect from jazz
2024-08-15 11:51:53 +01:00
Anselm Eickhoff
a10bff981e Merge pull request #284 from gardencmp/anselm-jazz-227
Remove effect from peer communication
2024-08-15 11:51:10 +01:00
Anselm Eickhoff
e333f7884a Merge pull request #313 from gardencmp/anselm-jazz-246
Remove effect from jazz-tools and dependent packages
2024-08-15 11:50:44 +01:00
Anselm
8ea7bf237b Remove effect from storage implementation 2024-08-15 11:13:10 +01:00
Anselm
5e8409fa08 Remove rest of effect use 2024-08-14 17:51:10 +01:00
Anselm
23354c1767 Progress on removing effect 2024-08-14 15:24:20 +01:00
Anselm Eickhoff
0efb69d0db Merge pull request #312 from pax-k/JAZZ-252/make-sure-castas-preserves-subscriptionscope
fix: preserve subscriptionScope for castAs in CoList and CoMap
2024-08-14 14:51:54 +01:00
pax-k
0462c4e41b fix: preserve subscriptionScope for castAs in CoList and CoMap 2024-08-14 16:50:12 +03:00
Anselm
70a5673197 More progress 2024-08-13 12:25:15 +01:00
Anselm Eickhoff
9ec3203485 Merge pull request #285 from gdorsi/main
docs: fix the get started links position
2024-08-12 17:46:41 +01:00
Guido D'Orsi
1a46f9b2e1 docs: fix the get started links position 2024-08-10 16:17:18 +02:00
Anselm
77bb26a8d7 Only use queable in cojson, rework tests 2024-08-09 16:44:50 +01:00
Anselm
2a36dcf592 WIP switch to queueable 2024-08-09 13:59:26 +01:00
Anselm
fc2bcadbe2 Remove effect schema from jazz schema 2024-08-08 18:18:17 +01:00
Anselm
46b0cc1adb Release 2024-08-08 14:44:00 +01:00
Anselm Eickhoff
d75d1c6a3f Merge pull request #279 from pax-k/JAZZ-219/implement-applydiff-on-comap-to-only-update-changed-fields
feat: Implement applyDiff on CoMap to only update changed fields
2024-08-08 13:50:17 +01:00
pax-k
13b236aeed feat: Implement applyDiff on CoMap to only update changed fields 2024-08-08 11:03:08 +03:00
Anselm Eickhoff
1c0a61b0b2 Merge pull request #271 from pax-k/document-max-recommended-tx-size
chore: document MAX_RECOMMENDED_TX_SIZE
2024-08-07 16:32:07 +01:00
Anselm
ceb92438f4 Release 2024-08-07 14:23:03 +01:00
Anselm Eickhoff
9bdd62ed4c Merge pull request #244 from gardencmp/anselm-jazz-187
Remove effectful API for loading/subscribing
2024-08-07 14:20:42 +01:00
pax-k
3f5ef7e799 chore: formatting 2024-08-06 19:35:14 +03:00
pax-k
e7a573fa94 chore: document MAX_RECOMMENDED_TX_SIZE 2024-08-06 19:22:41 +03:00
Anselm Eickhoff
364060eaa7 Merge pull request #249 from Schniz/schniz/allow-optional-encoder-to-be-empty-upon-creation 2024-08-03 19:59:09 +01:00
Gal Schlezinger
a3ddc3d5e0 allow co.optional.encoded to be empty on creation 2024-08-03 21:53:13 +03:00
Anselm Eickhoff
185f747adb Merge pull request #248 from timolins/new-explorer-ux 2024-08-03 13:51:47 +01:00
Timo Lins
895d281088 Remove legacy inspector to resolve TS errors 2024-08-03 13:09:27 +02:00
Timo Lins
b44e4354f7 Merge branch 'new-explorer-ux' of https://github.com/timolins/jazz into new-explorer-ux 2024-08-03 12:59:18 +02:00
Timo Lins
3fcb0665ec Fix TS errors 2024-08-03 12:59:14 +02:00
Tobias Lins
be49d33ce5 Update co-stream-view.tsx 2024-08-03 12:24:30 +02:00
Timo Lins
c7dae1608b Add new entry point 2024-08-03 10:49:29 +02:00
Timo Lins
b020c5868b Move app to legacy app 2024-08-03 10:48:06 +02:00
Timo Lins
eae42d3afe Revert app.tsx changes 2024-08-03 10:47:51 +02:00
Anselm
a816e2436e Remove effectful API for loading/subscribing 2024-07-31 16:21:26 +01:00
Anselm
b09e35e372 release 2024-07-29 10:40:10 +01:00
Anselm
d2c8121c9c Fix storage option in jazz-react 2024-07-29 10:34:39 +01:00
Anselm
380bb88ffa Mostly complete OPFS implementation (single-tab only) 2024-07-29 10:33:18 +01:00
Timo Lins
e0e3726b3c Update title 2024-07-28 18:02:06 +02:00
Timo Lins
c2253a7979 Improve styling of blob page 2024-07-28 17:40:23 +02:00
Timo Lins
9d244226ec Redesign root page, add group support & costream pages
Co-authored-by: Tobias Lins <me@tobi.sh>
2024-07-28 17:26:34 +02:00
Timo Lins
71df5e3a59 Fix native browser controls 2024-07-28 14:53:26 +02:00
Timo Lins
3a738dad88 Persists path in url 2024-07-28 13:53:39 +02:00
Timo Lins
56d301cfde Refactor the new viewer 2024-07-27 23:16:37 +02:00
Timo Lins
5efec6d5ea Move to a table view 2024-07-27 20:58:55 +02:00
Timo Lins
32769b24f1 Add new inspector 2024-07-27 20:10:24 +02:00
Anselm
6ab53c263d Release 2024-07-26 17:23:02 +01:00
Anselm
e7f3e4e242 Increase disconnect timeout for now 2024-07-26 17:21:06 +01:00
Anselm Eickhoff
8bb5201647 Merge pull request #236 from timolins/patch-1
[Homepage] Make current year dynamic in footer
2024-07-22 15:55:16 +01:00
Timo Lins
a9fc94f53d Make current year dynamic in footer 2024-07-22 10:06:48 +02:00
Anselm Eickhoff
ca7c0510d1 Merge pull request #234 from Schniz/schniz/co-optional 2024-07-21 10:14:41 +01:00
Gal Schlezinger
1bf16f0859 add co.optional syntax 2024-07-21 09:10:44 +03:00
Anselm Eickhoff
21b503c188 Merge pull request #224 from datner/datner/give-it-a-try
cojson-transport-ws: reuse runtime and use fibers instead of setTimeout
2024-07-15 14:35:18 +01:00
Anselm
0053e9796c Release 2024-07-15 11:01:31 +01:00
Anselm
e84941b1b1 Fix another bug in CoMap 'has' proxy trap 2024-07-15 10:59:14 +01:00
Anselm
57f6f8d67e Release 2024-07-14 17:55:47 +01:00
Anselm
5b8e69d973 Fix bug in CoMap 'has' trap 2024-07-14 17:55:05 +01:00
Anselm
7213b1bfa3 Release 2024-07-13 13:32:50 +01:00
Anselm Eickhoff
11f0770f08 Merge pull request #230 from tobiaslins/add-support-for-in
Add support for property existence
2024-07-13 13:30:15 +01:00
Tobias Lins
44e6dc3ae8 Remove useless check 2024-07-13 13:57:37 +02:00
Tobias Lins
b5d20d2488 Better implementation 2024-07-13 13:26:28 +02:00
Tobias Lins
0185545838 Add support for property existence 2024-07-13 12:26:10 +02:00
Yuval Datner
8c8f85859c style: prettier 2024-07-12 15:42:52 +03:00
Yuval Datner
104384409e refactor: change to yieldable error 2024-07-12 15:42:27 +03:00
Yuval Datner
179827ae56 small refactor for readability 2024-07-12 15:13:25 +03:00
Yuval Datner
6645829876 do stream stuff 2024-07-12 15:13:23 +03:00
Gal Schlezinger
68cb302722 store jazzPings on global 2024-07-12 15:13:22 +03:00
Gal Schlezinger
8dc33f2790 fix bugs because I misindented things 2024-07-12 15:13:21 +03:00
Gal Schlezinger
5f64ba326c jazzPings 2024-07-12 15:13:20 +03:00
Gal Schlezinger
7ccb15107c cojson-transport-ws: reuse runtime and use fibers instead of setTimeout
when calling Effect.runFork we don't propagate layers
and using fibers can allow us to interrupt ongoing requests
when the pings fail
2024-07-12 15:13:16 +03:00
Anselm
b102964743 Get rid of husky for now 2024-07-12 11:56:54 +01:00
Anselm
216d50a09c Remove old homepage build 2024-07-12 11:55:44 +01:00
Anselm
07ea59fdcb Release 2024-07-12 11:14:15 +01:00
Anselm
932a84a47f Update to Effect 3.5.2 2024-07-12 11:13:41 +01:00
Anselm
34dda7bdbd Release 2024-07-05 11:18:53 +01:00
Anselm
49fa153581 Merge branch 'fix-fs' 2024-07-05 11:17:54 +01:00
Anselm
c80b827775 Release 2024-06-30 16:28:53 +01:00
Anselm Eickhoff
a2bf9f988a Merge pull request #218 from Schniz/fix-mutating-nullable-field 2024-06-30 08:31:57 +01:00
Gal Schlezinger
ac27b2d5c2 jazz-tools: allow to mutate nullable fields into null
when having a co.encoded(Schema.NullOr(Schema.String)), construction
with null works well, but mutating a value into null throws.
This commit fixes it and adds a test that verifies it actually works.
2024-06-30 09:49:15 +03:00
Anselm
c813518fdc Release 2024-06-28 16:27:15 +01:00
Anselm
d5034ed5c3 Provide current res in ProgressiveImg 2024-06-28 16:26:03 +01:00
Anselm
cf2c29a365 Use verce lanalytics & speed insights 2024-06-28 14:54:58 +01:00
Anselm
d948823db6 Add package manager to package.json 2024-06-28 12:08:23 +01:00
Anselm
060ad4630d Resurrect inspector 2024-06-27 16:54:23 +01:00
Anselm
0ddceac4c0 Fix FS bugs 2024-06-26 13:45:09 +01:00
Anselm
a862cb8819 Release 2024-06-25 15:13:55 +01:00
Anselm Eickhoff
4246aed7db Merge pull request #214 from gardencmp/effect-streams-for-peers
Effect streams for peers
2024-06-25 15:12:56 +01:00
Anselm
41554e0e0b Release 2024-06-25 13:57:24 +01:00
Anselm
93c4d8155e Fix CoList.toJSON() 2024-06-25 13:56:20 +01:00
Anselm
24eefd49f1 Release 2024-06-25 13:46:54 +01:00
Anselm
e712f1e8ef Fix circular toJSON bug #215 2024-06-25 13:46:14 +01:00
Anselm
33db0fd654 Keep old hompage lockfile (unrelated) 2024-06-13 22:17:00 +01:00
Anselm
478ded93de Merge branch 'main' into effect-streams-for-peers 2024-06-13 22:12:33 +01:00
Anselm
89ad1fb79d Fix remaining tests by introducing even more special cases 2024-06-13 22:11:25 +01:00
Anselm Eickhoff
1ba40806ec Merge pull request #213 from tobiaslins/fix-demo-auth-nextjs
Fix DemoAuth for Next.js
2024-06-13 17:43:11 +01:00
Tobias Lins
73ae281e4a Fix demoAuth for next.js 2024-06-13 18:41:29 +02:00
Anselm
a35353c987 Use Effect streams 2024-06-13 15:58:21 +01:00
Anselm
1cb91003cc Release 2024-06-12 15:12:00 +01:00
Anselm
d850022491 Fix #210 2024-06-12 15:10:22 +01:00
Anselm
93792ab6f6 Remove lofi conf badge 2024-06-06 12:02:31 +01:00
Anselm
95dfe7af6a Guide fix 2024-06-04 17:56:34 +01:00
Anselm
734258eb17 Release 2024-06-04 12:14:59 +01:00
Anselm
f3bcf96fad Also cache agent ID in RawControlledAccount 2024-06-04 12:13:54 +01:00
Anselm
5cf0bc1911 Release 2024-06-04 12:09:35 +01:00
Anselm
d32a6b275f Formatting 2024-06-04 12:09:16 +01:00
Anselm
6caba9f8e7 Cache currentAgentID in RawAccount 2024-06-04 12:06:13 +01:00
Anselm
641f1dbfbe Release 2024-06-03 17:33:59 +01:00
Anselm
58d9a104d6 Fix CoMaps not initialising properly when passing too many init options 2024-06-03 17:33:24 +01:00
Anselm
7b9d24c8ef Release 2024-06-01 17:25:06 +02:00
Anselm Eickhoff
4225fdd537 Merge pull request #200 from gdorsi/main
fix: improve compatibility with React compiler and concurrent features
2024-06-01 17:24:17 +02:00
Anselm
9fdc91c6de Add changeset 2024-06-01 17:23:18 +02:00
Anselm
93d8c85e5c Formatting 2024-06-01 17:22:38 +02:00
Anselm
929cddc3c3 Release 2024-06-01 17:13:02 +02:00
Anselm
e0bc63f016 Provide way to create accounts as another account 2024-06-01 17:12:42 +02:00
Anselm
b29ac306ea Release 2024-06-01 14:00:50 +02:00
Anselm
e8e883f4d6 Ability to add seed accounts to DemoAuth 2024-06-01 14:00:26 +02:00
Guido D'Orsi
3325ff1cd6 fix: make Jazz react compiler ready 2024-05-31 10:19:33 +02:00
Anselm
4fe14f03b4 Formatting fixes 2024-05-31 09:13:25 +02:00
Anselm
90e2a661e4 Very last fix 2024-05-31 09:00:56 +02:00
Anselm
6ed53ecb79 Last fixes 2024-05-31 08:59:41 +02:00
Anselm
c18775766c More fixes 2024-05-31 08:56:11 +02:00
Anselm
4bb3a6209a Doc fixes 2024-05-31 08:44:45 +02:00
Anselm
0f44a547a4 Lots more guide progress 2024-05-28 17:10:59 +01:00
Anselm
1e2f6d8f14 Release 2024-05-26 20:44:05 +01:00
Anselm Eickhoff
7e5b176930 Merge pull request #199 from tobiaslins/implement-loading-ui
Implement basic `loading` component that is rendered when migrations …
2024-05-26 20:40:00 +01:00
Anselm
b420eab503 Fix type for Provider 2024-05-26 20:37:55 +01:00
Tobias Lins
b370e2e14e Merge branch 'main' into implement-loading-ui 2024-05-26 20:48:38 +02:00
Tobias Lins
1fabee297d Implement basic loading component that is rendered when migrations are running or jazz not ready yet 2024-05-26 20:46:52 +02:00
Anselm
484dc460c5 Lots of doc progress 2024-05-26 17:39:16 +01:00
Anselm
0cb8756124 Fix lint error 2024-05-26 16:16:25 +01:00
Anselm
95d0f0221b Release 2024-05-26 16:15:18 +01:00
Anselm
0c9c0fcd60 Clean up loading & subscription API 2024-05-26 16:14:01 +01:00
Anselm
8be0dd133c Doc improvements 2024-05-26 16:13:25 +01:00
Anselm
e68e0ada0d Chage hero grid 2024-05-25 21:27:20 +01:00
Anselm
49a7349e4d Update copyright year 2024-05-25 21:27:11 +01:00
Anselm
979c7241a4 Guide progress, licenses 2024-05-25 20:54:53 +01:00
Anselm
e011e4a049 Add local-first conf badge 2024-05-25 19:46:36 +01:00
Anselm
92bccf5974 Release 2024-05-25 17:08:37 +01:00
Anselm
2c1d6dcb8f Fix type signature / depth of useCoState 2024-05-25 17:07:41 +01:00
Anselm Eickhoff
75f45ec0b2 Merge pull request #163 from gardencmp/jazz-schema
New unified API
2024-05-25 16:35:54 +01:00
Anselm
c0ebcadda9 Push tags on publish 2024-05-25 16:28:52 +01:00
Anselm
109e9b6a5b Use changeset for publishing, format 2024-05-25 16:28:10 +01:00
Anselm
d0c3d08e42 Add static homepage build output to standalone server 2024-05-25 16:15:05 +01:00
Anselm
7514830edb Increase homepage memory 2024-05-25 16:06:02 +01:00
Anselm
6f27128b87 Fix homepage port 2024-05-25 15:47:10 +01:00
Anselm
376518d4ef Provide correct nomad template 2024-05-25 15:27:58 +01:00
Anselm
272fc85c13 Fix homepage build 2024-05-25 15:21:57 +01:00
Anselm
579e4f93ee Fix homepage build some more 2024-05-25 15:20:29 +01:00
Anselm
a9accdc3a8 Fix homepage build 2024-05-25 15:19:32 +01:00
Anselm
b403db51d4 Remove typedoc output again 2024-05-25 15:03:45 +01:00
Anselm
108cae037f Homepage build 2024-05-25 14:46:00 +01:00
Anselm
c51897ab9e Release 2024-05-25 14:43:57 +01:00
Anselm
67171cb07a Add runtime option for optional refs 2024-05-25 14:42:33 +01:00
Anselm
6ae3bf6ac9 Release 0.7.0 2024-05-25 11:58:43 +01:00
Anselm
b64b15877a Homepage fixes 2024-05-25 11:53:01 +01:00
Anselm
19f52b7361 Alpha release 2024-05-25 10:32:57 +01:00
Anselm
9dcd15dbc8 Fixed bug with newRandomSessionID being called before crypto was ready 2024-05-25 10:32:33 +01:00
Anselm
a423eeea3b Alpha release 2024-05-24 22:52:34 +01:00
Anselm Eickhoff
99be6a3566 Merge pull request #193 from markmelville/ws_close
ignore error on ws close, fixing "Invalid state: Controller is already closed"
2024-05-24 22:51:33 +01:00
Anselm
e97f730c0f Alpha release 2024-05-24 22:37:22 +01:00
Anselm
f5642335ff Fix useAccount 2024-05-24 22:36:53 +01:00
Anselm
bf0f8ec824 Alpha release 2024-05-24 22:28:50 +01:00
Anselm
fb9ef4ea20 Fix noble curves dep 2024-05-24 22:28:13 +01:00
Anselm
86363197cd Alpha release 2024-05-24 22:11:47 +01:00
Anselm
e93187c971 Homepage improvements 2024-05-24 22:11:32 +01:00
Anselm
1a86e13cf1 Implement deep loading, simplify API 2024-05-24 22:10:46 +01:00
Anselm
b863c1d20a Deep loading based on removing nulls 2024-05-23 17:32:04 +01:00
Anselm
4c8d658c25 Only load each image resolution once 2024-05-21 16:48:14 +01:00
Anselm
69d37437ef Fix infinite recursion in subscriptionScope 2024-05-21 16:47:27 +01:00
Anselm
220bdbae62 Fix type of init param for CoMap.create 2024-05-21 16:46:44 +01:00
Anselm
b23b556b79 Fix readme typo 2024-05-21 14:14:47 +01:00
Anselm
ce721cf3d1 Update main readme 2024-05-21 13:47:48 +01:00
Anselm
41363415fe Add lint-staged 2024-05-21 13:44:26 +01:00
Anselm
b91d0769d5 Add husky pre-commit hook 2024-05-21 13:27:45 +01:00
Anselm
ad16690826 Add minimal package READMEs 2024-05-21 13:24:54 +01:00
Anselm
ca7b81c36a Add eslint to the homepage 2024-05-21 13:09:37 +01:00
Anselm
a632ce1477 Apply prettier and make everything testable from root 2024-05-21 12:10:06 +01:00
Anselm
ca7011e9af Apply eslint to all repos 2024-05-21 10:31:48 +01:00
Anselm
34df432ee8 Apply eslint & prettier to cojson-storage-indexeddb 2024-05-21 09:59:29 +01:00
Anselm
dfa7178041 Set up prettier for cojson 2024-05-21 08:27:09 +01:00
Anselm
a3e9a3b686 Extend eslint rules for cojson 2024-05-21 08:22:17 +01:00
Anselm
599db049f2 Remove dotenv 2024-05-21 07:55:48 +01:00
Anselm
7cba6dd690 Factor out crypto impl and provide pure js one 2024-05-20 20:37:43 +01:00
Anselm
2d406c9d58 Fix minor errors 2024-05-18 16:55:14 +01:00
Anselm
d8fe2b10f1 Alpha release 2024-05-18 16:51:28 +01:00
Anselm
c8343626ba Expose experimental OPFS storage 2024-05-18 14:38:59 +01:00
Anselm
5b188ec093 Alpha release 2024-05-16 18:29:44 +01:00
Anselm
7ebbd80049 Ensure accounts are synced after creation 2024-05-16 18:29:13 +01:00
Anselm
74c9e5d36d More LSM/OPFS progress 2024-05-16 18:16:44 +01:00
Anselm
1a3530747f Add changesets 2024-05-16 10:29:13 +01:00
Anselm
79899b9b18 Update lockfile 2024-05-16 10:29:04 +01:00
Anselm
6ef6a2f507 Implement first devtools formatters 2024-05-16 10:28:50 +01:00
Anselm
ab6d15c9f7 Use fresh subscribe context for useProgressiveImg 2024-05-16 10:28:09 +01:00
Anselm
a0dc9139a2 Add ability to declare minimum required data in subscribe & Improve property access tracing 2024-05-16 10:27:27 +01:00
Anselm
220fa319d5 Use lsm storage from cojson & update effect 2024-05-16 10:25:22 +01:00
Anselm
183d505a5e Remove old cojson-storage-lsm module 2024-05-16 10:24:43 +01:00
Anselm
f960e7e736 Optimizations for incoming sync messages 2024-05-16 10:24:20 +01:00
Anselm
d68ac84e03 WIP working-ish version of LSM storage 2024-05-16 10:22:52 +01:00
Mark Melville
30fbe2b6d7 ignore error on ws close 2024-05-14 15:27:34 -06:00
Anselm
e3a00570e1 Refactor 2024-05-13 15:46:23 +01:00
Anselm
499e02685a Merge branch 'lsm-storage' into jazz-schema 2024-05-13 14:32:37 +01:00
Anselm
6b0418f772 Fix image resolution loading 2024-05-13 14:06:15 +01:00
Anselm
1200aae47d Alpha release 2024-05-12 17:27:56 +01:00
Anselm
20fdb09b33 New cache for covalue proxies 2024-05-12 17:27:08 +01:00
Anselm
522b12dc42 CoJSON performance improvement 2024-05-12 17:24:53 +01:00
Anselm
a7cd0dcce5 Pricing update 2024-05-12 17:24:24 +01:00
Anselm
fd86c11336 Alpha release 2024-05-10 21:02:39 +01:00
Anselm
4fc414d744 Extract jazz cli into jazz-run package 2024-05-10 21:00:20 +01:00
Anselm
6d49e9b06c Alpha release 2024-05-10 17:37:40 +01:00
Anselm
8b866e288b Lots more doc improvements 2024-05-10 17:37:00 +01:00
Anselm
bf22588b0e Small homepage fixes 2024-05-10 14:41:24 +01:00
Anselm
60d5ca2811 Alpha release 2024-05-10 14:21:03 +01:00
Anselm
9e5dcdfa69 Update examples 2024-05-10 14:20:50 +01:00
Anselm
3cc39dd5ed Introduce jazz-tools CLI 2024-05-10 14:20:24 +01:00
Anselm
6878060346 Simplify jazz-nodejs 2024-05-10 14:19:57 +01:00
Anselm
9840061137 Clean up exports 2024-05-10 14:19:35 +01:00
Anselm
6f84e00463 homepage/docs improvements 2024-05-10 14:18:48 +01:00
Anselm
1e82d0d34e Allow fall-through of routes 2024-05-10 14:17:46 +01:00
Anselm
f35bc468b3 Separate pnpm workspace for homepage 2024-05-09 11:44:27 +01:00
Anselm
719071c286 Docs & guide progress 2024-05-09 10:46:33 +01:00
Anselm
c4b439e2e6 Lots of doc improvements 2024-05-07 13:16:27 +01:00
Anselm
77c2b56ceb Alpha release 2024-05-03 15:55:58 +01:00
Anselm
0b17b7ad5a Get rid of self generics, new create syntax 2024-05-03 15:55:32 +01:00
Anselm
db3011a1c9 Homepage improvements 2024-05-03 14:27:07 +01:00
Anselm
b47c695b97 Refactor cojson tests 2024-05-03 13:39:04 +01:00
Anselm
55c1c893ba Homepage improvements 2024-05-02 17:37:02 +01:00
Anselm
bde684fe30 Alpha release 2024-05-02 09:24:42 +01:00
Anselm
89b6c9004b CoValue casting & auto-subbing _owner 2024-05-02 09:23:49 +01:00
Anselm Eickhoff
97cdfbddaf Merge pull request #184 from tobiaslins/addmember-chaining 2024-05-02 07:20:44 +01:00
Tobias Lins
584ee2d136 Return this 2024-05-02 07:54:01 +02:00
Anselm
21771c4725 Alpha release 2024-05-01 21:36:51 +01:00
Anselm
7e8f1bed15 Merge branch 'main' into jazz-schema 2024-05-01 21:35:31 +01:00
Anselm
226ae03603 Better variable naming in test 2024-05-01 15:49:14 +01:00
Anselm
96c494f5ee Alpha release 2024-05-01 15:43:04 +01:00
Anselm
23ba00422f Implement group-based profiles & migrations 2024-05-01 15:42:14 +01:00
Anselm
52675c9c68 Alpha release 2024-05-01 10:36:39 +01:00
Anselm
1b113e0114 Fix CoList.splice / RawCoList.append 2024-05-01 10:36:04 +01:00
Anselm
0a930f5eeb Fix Costream[...].all 2024-05-01 10:35:38 +01:00
Anselm
84f5a83648 Homepage improvements 2024-05-01 10:35:11 +01:00
Anselm
5fa277c254 Alpha release 2024-04-29 13:56:11 +01:00
Anselm
d49c7f2dd4 Fix CoMap.Record.toJSON() 2024-04-29 13:55:23 +01:00
Anselm
a78f1688d9 Alpha release 2024-04-29 13:29:45 +01:00
Anselm
cd37a846d8 Make Account -> Profile a lazy ref schema 2024-04-29 13:28:38 +01:00
Anselm
63374ccb6d Alpha release 2024-04-28 17:27:47 +01:00
Anselm
efe2d91fb3 Make sure delete on CoMaps deletes keys 2024-04-28 17:26:47 +01:00
Anselm
234b2a019b Force cojson tests to pass... 2024-04-28 17:12:12 +01:00
Anselm
4bbcd366bc Relax types of CoMap._schema 2024-04-28 16:59:29 +01:00
Anselm
5724f8747a Fix schema of Account & Group 2024-04-28 16:23:17 +01:00
Anselm
38d44103d1 Alpha release 2024-04-27 18:22:11 +01:00
Anselm
96a7ff68e7 Homepage improvements 2024-04-27 18:20:12 +01:00
Anselm
fb78a55f76 Fix getOwnPropertyDescriptor in _refs proxy 2024-04-27 18:19:57 +01:00
Anselm
fdc7fc7bcf Introduce CoMap.Record 2024-04-27 18:13:48 +01:00
Anselm
ed5643aaf1 Alpha release 2024-04-25 09:35:02 +01:00
Anselm
ac431ef9ef Fix CoMap _refs for co.items 2024-04-25 09:34:08 +01:00
Anselm
0940508637 Homepage improvements 2024-04-25 09:33:21 +01:00
Anselm
704af7d04c Alpha release 2024-04-24 14:07:42 +01:00
Anselm
e4e476a834 Add maxWidth option for loading images 2024-04-24 14:07:18 +01:00
Anselm
ece35b3c6f Alpha release 2024-04-24 13:50:50 +01:00
Anselm
b26eab50b3 Include fast-check as dependency to help dev time resolution 2024-04-24 13:50:00 +01:00
Anselm
b42313a285 Fix subscription to account in useAccount 2024-04-24 13:49:15 +01:00
Anselm
129e2c1668 Alpha release 2024-04-23 21:45:30 +01:00
Anselm
87ddb81562 More precise imports from @effect/schema 2024-04-23 21:45:08 +01:00
Anselm
daee49cd9d Alpha release 2024-04-23 21:25:26 +01:00
Anselm
3aaf773b0a Add missing @scure/bip39 dep 2024-04-23 21:24:31 +01:00
Anselm
460478fc65 Alpha release 2024-04-23 21:17:36 +01:00
Anselm
fe8b5f45b9 Use effect 3.0 2024-04-23 21:17:02 +01:00
Anselm
01ac646c8e Alpha release 2024-04-23 21:10:53 +01:00
Anselm
d4b9fbcc60 Make CoMaps even more subclassable 2024-04-23 21:10:35 +01:00
Anselm
1cfa279543 Alpha release 2024-04-23 20:52:08 +01:00
Anselm
e35be73bcc More superclass-compatible CoMaps 2024-04-23 20:51:36 +01:00
Anselm
f8a5c46e18 Alpha release 2024-04-23 20:27:41 +01:00
Anselm
1c7d85ce76 Fix CoStream types 2024-04-23 20:27:18 +01:00
Anselm
19004b4c36 Alpha release 2024-04-23 20:23:50 +01:00
Anselm
930fa689a7 Add .all to CoStreamEntry 2024-04-23 20:22:50 +01:00
Anselm
18a7b2d6b4 Making progress with docs 2024-04-23 15:16:32 +01:00
Anselm
d2e03ff9d3 Alpha release 2024-04-22 19:30:02 +01:00
Anselm
77a9c8395e Fix variance of ID.__type 2024-04-22 19:29:21 +01:00
Anselm
c4151fcb95 Alpha release 2024-04-22 16:16:37 +01:00
Anselm
4c5c21bba2 Work with stricter TS lints 2024-04-22 16:16:02 +01:00
Anselm
f0f6f1b71c Alpha release 2024-04-22 16:02:21 +01:00
Anselm
a9d6d5a1db Reintroduce jazz-nodejs 2024-04-22 15:58:50 +01:00
Anselm
7849ce6de7 Clean up API even more 2024-04-22 15:47:50 +01:00
Anselm
354bdcdbfb Alpha release 2024-04-19 16:40:18 +01:00
Anselm
8ecd3e88c8 Even friendlier for subclassing CoMap 2024-04-19 16:39:51 +01:00
Anselm
85d2b627f1 Alpha release 2024-04-19 16:28:47 +01:00
Anselm
88fd92e4dc More subclass-friendly types in CoMap 2024-04-19 16:27:48 +01:00
Anselm
952982e7ea Alpha release 2024-04-19 15:28:03 +01:00
Anselm
22e7c27af7 Consistent proxy based API 2024-04-19 15:25:05 +01:00
Anselm
59c18c34de Alpha release 2024-04-17 13:26:56 +01:00
Anselm
6acbaede44 Fix keys 2024-04-17 13:26:23 +01:00
Anselm
1a44f875b3 Alpha release 2024-04-17 13:24:09 +01:00
Anselm
9d935fe1d0 Refactors & homepage improvements 2024-04-17 13:23:31 +01:00
Anselm
e5eed5b9b7 Alpha release 2024-04-16 14:01:57 +01:00
Anselm
05a549f04f Makre refs on list more precise 2024-04-16 14:01:32 +01:00
Anselm
a5e68a4fae Alpha release 2024-04-16 13:58:35 +01:00
Anselm
016a9e342a Move unported packages & make refs type more precise 2024-04-16 13:57:41 +01:00
Anselm
627d8950ae Alpha release 2024-04-16 13:21:46 +01:00
Anselm
770ce08c10 Get rid of Co namespace 2024-04-16 13:17:09 +01:00
Anselm
69ac514b3b New alpha 2024-04-15 16:54:39 +01:00
Anselm
b1481748f9 Boom! 2024-04-15 16:50:14 +01:00
Anselm
49944e323f Just before circular references... 2024-04-08 15:42:47 +01:00
Anselm
15310db389 Fix image loading and CoMap proxy issues 2024-04-05 17:22:46 +01:00
Anselm
ea5c5a2604 Rename jazz-js to jazz-tools 2024-04-05 15:43:23 +01:00
Anselm
e461dd1355 Fix test 2024-04-05 15:32:44 +01:00
Anselm
e299c3e9d8 Alpha 0 prerelease 2024-04-05 15:30:49 +01:00
Anselm
406c47271f Finesse types and fix auth impls 2024-04-05 14:54:03 +01:00
Anselm
05c7efea85 More feature parity for demo apps 2024-04-05 11:45:33 +01:00
Anselm
ce7ddf7055 More stuff to make chat app work 2024-04-04 15:19:50 +01:00
Anselm
beb40b5db6 Mostly make chat example work 2024-03-27 18:21:41 +00:00
Anselm
2def752cc4 Flatten CoValue metadata and add edits for CoList 2024-03-26 15:21:28 +00:00
Anselm
bacf3ae86a Change order of Self generic argument again 2024-03-26 10:52:33 +00:00
Anselm
0fef382f2e Docs & homepage improvements 2024-03-25 14:38:39 +00:00
Anselm
95523d8538 Doc organization & type improvements 2024-03-25 12:20:55 +00:00
Anselm
71f7220bfd Start adding doc comments 2024-03-22 15:25:55 +00:00
Anselm
2212c6deac Fix lots of type issues, implement Account & Group 2024-03-22 14:50:41 +00:00
Anselm
fb3efe4cfd Implement tests for BinaryCoStream 2024-03-21 17:33:15 +00:00
Anselm
e66ac6a7d0 Apply strict mode to tests, finish tests for CoStream 2024-03-21 12:06:05 +00:00
Anselm
7ab3908848 Type cleanup, more CoStream implementation 2024-03-19 17:41:36 +00:00
Anselm
921f1fbfe8 Starting test for CoStream 2024-03-18 11:51:01 +00:00
Anselm
2ac455f8b5 Sketch out more in bindings etc 2024-03-18 11:25:18 +00:00
Anselm
1ce881aed2 jazz-js-efs becomes jazz-js 2024-03-15 14:35:51 +00:00
Anselm
b1b5140951 Sketch out coStream interfaces 2024-03-15 14:34:38 +00:00
Anselm
b109c23233 Change "meta" to "co" 2024-03-15 13:58:49 +00:00
Anselm
a7a34a0b6e Tests for CoList subscription and auto-resolution 2024-03-15 10:44:03 +00:00
Anselm
4bf63934e1 Simple CoList resolution 2024-03-14 16:42:41 +00:00
Anselm
16f572282f Kind of implement splice 2024-03-14 16:15:07 +00:00
Anselm
44380c3700 Implement CoList with primitive items 2024-03-14 15:57:31 +00:00
Anselm
dc46cb1386 Move tests to vitest, fix some 2024-03-14 15:38:27 +00:00
Anselm
3ccb1e8ad7 Sketch imageDef 2024-03-13 14:56:17 +00:00
Anselm
d973c5f48b Pull out common constructor methods 2024-03-13 14:30:46 +00:00
Anselm
f4af78c834 Mostly make index signatures work 2024-03-13 14:16:38 +00:00
Anselm
e6d323fd30 Use correct subclasses at runtime, tests passing 2024-03-12 11:39:25 +00:00
Anselm
e6ab56aeb5 Solve lots of type issues 2024-03-12 11:13:43 +00:00
Anselm
779765b649 Fix a bunch of type issues 2024-03-08 14:45:51 +00:00
Anselm
6da730779a Better CoMapInit 2024-03-08 10:16:00 +00:00
Anselm
a3e77edc57 Support optional references 2024-03-07 16:24:22 +00:00
Anselm
ed00308986 Make CoMap subscription work 2024-03-07 12:29:52 +01:00
Anselm
89e9092e0f Make loading work 2024-03-01 14:27:11 +00:00
Anselm
f8b11754c8 Sketch ValueRefs and loading 2024-02-29 17:39:06 +00:00
Anselm
4b38d0793c Test encoding on assignment 2024-02-29 11:29:16 +00:00
Anselm
b2156f8154 Test with more complicated schema in key 2024-02-29 11:25:17 +00:00
Anselm
3a5422e635 Make CoMaps work with effect schema 2024-02-29 11:23:31 +00:00
Anselm
54d3d76868 move pre-effect-schema implementation of jazz-js away 2024-02-29 11:20:34 +00:00
Anselm Eickhoff
f4dc0ec1b7 Merge pull request #177 from tobiaslins/main 2024-02-27 22:51:51 +00:00
Tobias Lins
f500db2dd3 Implement tree view with nested resolving 2024-02-27 21:56:25 +01:00
Anselm
95f64f9934 Actually deploy inspector 2024-02-27 14:45:54 +00:00
Anselm
cccb0e1a21 First draft of inspector 2024-02-27 14:43:08 +00:00
Anselm
b434a4227f Off by 10x 2024-02-27 11:55:40 +00:00
Anselm
6ba4dc1f04 New pricing 2024-02-27 11:49:49 +00:00
Anselm
2fe4c81d1e Start of EffectTS schema based jazz-js 2024-02-27 11:42:41 +00:00
Anselm
5c00264184 test for enumarting props in CoMap 2024-02-24 11:47:35 +01:00
Anselm
c744849c9b Pull out constructor types from schemas 2024-02-23 14:37:25 +01:00
Anselm
f59b278f00 Make simple coValue resolution in extra keys work 2024-02-22 17:45:36 +01:00
Anselm
b26c155d5f Fix effect types and others 2024-02-22 16:35:43 +01:00
Anselm
6da79b8745 Move owner of coValue to first param of constructor 2024-02-22 16:14:51 +01:00
Anselm
0b92591b17 Sketch first test for comap resolution in extra keys 2024-02-22 15:55:58 +01:00
Anselm
974456db54 Support for primitive extra keys in CoMaps 2024-02-22 14:58:27 +01:00
Anselm
a1326a80fe Completely get rid of immutable map for now 2024-02-21 14:45:19 +01:00
Anselm
00d6946b24 Release 2024-02-14 15:41:37 +00:00
Anselm
c4ffde93c0 Simple reconnect logic for jazz-nodejs 2024-02-13 20:19:51 +00:00
Anselm
37bfe967ea Refactor coValue files into parts 2024-02-09 18:16:44 +00:00
Anselm
9abbbfd6fb Release 2024-02-09 11:16:25 +00:00
Anselm
155cd08e39 Mute most annoying log messages 2024-02-09 11:13:18 +00:00
Anselm
e2e6bdf3bd Sketch for new ImageDefinition 2024-02-09 11:09:26 +00:00
Anselm
810c42c743 Implement BinaryCoStream subscription 2024-02-08 17:04:12 +00:00
Anselm
99e4c1301e Lots of fixes to subscription logic and CoValues 2024-02-08 15:54:03 +00:00
Anselm
8c86a831fc Move coValues into their own folder 2024-02-07 10:02:41 +00:00
Anselm
5e976416a4 Implement and test basic CoStream functionality #171 2024-02-06 16:52:11 +00:00
Anselm
0339e14260 Implementation of CoStreams (WIP) 2024-02-04 17:05:10 +00:00
Anselm
4b94fcebf1 Split up tests 2024-01-18 10:56:25 +00:00
Anselm
ddd2a79f37 Subscription & auto-resolution for CoLists 2024-01-18 10:46:00 +00:00
Anselm
01a8f2dab3 Make nested subscriptions work incl edge cases 2024-01-12 22:14:17 +00:00
Anselm
801629d2c1 Fix type errors 2024-01-09 14:43:33 +00:00
Anselm
87d62c941f Nested coValue loading & introduce EffectTS 2024-01-09 14:37:18 +00:00
Anselm
7e6e0fdcc5 Lots of doc improvements 2024-01-05 16:25:27 +00:00
Anselm
a73b07424c Lots of docs improvements 2024-01-04 17:40:57 +00:00
Anselm
0f9b983132 Very first basic tests 2024-01-04 16:48:51 +00:00
Anselm
43e25902d3 Merge branch 'main' into jazz-schema 2024-01-04 14:37:09 +00:00
Anselm
2c27c8517f Add own lockfile to homepage 2024-01-04 13:45:28 +00:00
Anselm Eickhoff
b496058a0e Merge pull request #154 from gardencmp/pnpm-and-turbo
Move to pnpm and turborepo (deploy)
2024-01-04 13:27:05 +00:00
Anselm Eickhoff
4313663bd1 Merge branch 'main' into pnpm-and-turbo 2024-01-04 13:26:52 +00:00
Anselm Eickhoff
dbdbfbd07a Merge pull request #156 from mirshko/patch-1
Fix loading prop always being false
2024-01-04 13:24:14 +00:00
Anselm
184b23d61f Publish 2024-01-03 11:03:57 +00:00
Anselm
5c03b4f668 Parametrize BrowserImage for maxWidth 2024-01-03 11:01:07 +00:00
Anselm
bdbe777d68 Fix ordering bugs with IndexedDB 2024-01-03 10:59:36 +00:00
Anselm
a838a18647 Publish 2024-01-02 18:37:41 +00:00
Anselm
dd8dba63ea Fix migration changes being lost on loaded account 2024-01-02 18:36:18 +00:00
Jeff Reiner
3f5a664ee7 Fix loading prop always being false 2023-12-22 17:37:38 +01:00
Anselm Eickhoff
707292e1ff Merge pull request #152 from tobiaslins/pnpm-and-turbo
Move to pnpm & turborepo
2023-12-21 16:08:49 +00:00
Anselm
9a81b63943 Use pnpm install 2023-12-21 15:51:25 +00:00
Anselm
30216b7b80 Try GITHUB_TOKEN again 2023-12-21 15:49:47 +00:00
Anselm
b2fc91c2ce Use personal access token for ghcr push 2023-12-21 15:42:10 +00:00
Anselm
ef0328833c Try edited event for PRs 2023-12-21 15:30:35 +00:00
Anselm
6a93f17a4a Try to allow ghcr pushes from contributor PRs 2023-12-21 15:24:56 +00:00
Anselm
01bd07ac66 Use pnpm ci 2023-12-21 14:56:58 +00:00
Anselm
88859cfeca Actually add pnpm to CI 2023-12-21 10:23:58 +00:00
Anselm
dfe563e2bc Use pnpm & turbo for CI build 2023-12-21 10:21:53 +00:00
Anselm
7fc0ff981d Update instructions on "ejecting" examples 2023-12-21 10:15:37 +00:00
Anselm
1a9132102d Get rid of lerna 2023-12-21 09:32:08 +00:00
Anselm Eickhoff
d39638282f Merge branch 'main' into pnpm-and-turbo 2023-12-21 09:21:55 +00:00
Anselm Eickhoff
219071654d Merge pull request #153 from tobiaslins/move-to-localStorage 2023-12-21 07:43:36 +00:00
Tobias Lins
7c415db7bd Move to auth to use localStorage instead of sessionStorage 2023-12-21 08:28:03 +01:00
Tobias Lins
4354c340fc Add more dev exmaples 2023-12-21 08:20:43 +01:00
Anselm
a4b484fa36 Publish 2023-12-20 21:49:54 +00:00
Anselm
3757d12dc4 Fix loading of accounts 2023-12-20 21:48:01 +00:00
Anselm
c3a97b29a9 First test skeleton 2023-12-20 21:15:21 +00:00
Tobias Lins
b65e30ec70 Add changeset & publish commands 2023-12-20 22:04:21 +01:00
Tobias Lins
23a1e0266a Everything is building again 2023-12-20 21:49:31 +01:00
Tobias Lins
76acecfe50 further fixes 2023-12-20 21:18:27 +01:00
Tobias Lins
5031c77afb Update index.tsx 2023-12-20 21:05:33 +01:00
Tobias Lins
af90b8c989 Update vite.config.ts 2023-12-20 21:04:20 +01:00
Tobias Lins
d06b4adad0 Missing dependencies 2023-12-20 21:02:43 +01:00
Tobias Lins
b961cde946 Revert changed files 2023-12-20 20:54:06 +01:00
Tobias Lins
8cbbe2f312 Move to pnpm & turborepo 2023-12-20 20:44:01 +01:00
Anselm
c15a49d82d Merge branch 'main' into jazz-schema 2023-12-20 11:36:09 +00:00
Anselm
fc5b670c73 Publish 2023-12-20 11:33:39 +00:00
Anselm
c8adcc4c47 Fix unused var 2023-12-20 11:32:40 +00:00
Anselm
41a755fe41 publish 2023-12-20 11:17:25 +00:00
Anselm
8def1bb29e IndexedDB & timer perf improvements 2023-12-20 11:04:45 +00:00
Anselm
d379b04e33 Publish 2023-12-18 15:15:27 +00:00
Anselm
17a30e054e Add passphrase based auth + example 2023-12-18 15:13:37 +00:00
Anselm
93809911de more WIP 2023-12-16 16:45:46 +00:00
Anselm
edeb2ca9f4 More WIP 2023-12-13 16:47:56 +00:00
Anselm
01662fc3b8 Merge branch 'main' into jazz-schema 2023-12-06 11:51:28 +00:00
Anselm
7d8f4b4c00 Publish jazz-browser-auth0 2023-12-05 19:12:16 +00:00
Anselm
e2a3896bf0 v0.0.0 2023-12-05 19:11:00 +00:00
Anselm
446de8e0ff Fix for not receiving user_metadata 2023-12-05 19:10:15 +00:00
Anselm
5ae6c95878 Use authorization params everywhere 2023-12-05 17:07:18 +00:00
Anselm
7cde349a50 Actually deploy auth0 example 2023-12-05 16:45:41 +00:00
Anselm
61e640f574 Fix auth0 example dependencies 2023-12-05 16:43:18 +00:00
Anselm
ed122d9d8e Publish 2023-12-05 16:41:12 +00:00
Anselm
34817f4536 Auth0 integration and example 2023-12-05 16:38:37 +00:00
Anselm
134d2f0fda work in progress 2023-12-05 12:06:39 +00:00
Anselm
142973827c Merge branch 'main' into jazz-schema 2023-11-28 08:32:52 +00:00
Anselm
0998a0eabf Correct homepage path 2023-11-24 17:09:34 +00:00
Anselm
a96108478b Homepage updates 2023-11-24 17:04:03 +00:00
Anselm
47444888c3 more progress 2023-11-24 16:54:12 +00:00
Anselm
a4769058f4 Merge branch 'main' into jazz-schema 2023-11-08 11:42:49 +00:00
Anselm
a4cf4c40d4 publish 2023-11-08 11:42:36 +00:00
Anselm Eickhoff
934fe4d29b Merge pull request #127 from KyleAMathews/main
fix(jazz-nodejs): also set peersToLoadFrom on newly created accounts
2023-11-07 17:18:02 +00:00
Anselm Eickhoff
408012f2e5 remove redundant peer add 2023-11-07 17:17:41 +00:00
Kyle Mathews
d0078b830e fix(jazz-nodejs): also set peersToLoadFrom on newly created accounts 2023-11-03 14:58:43 -07:00
Anselm
f7f091e18c Simplify CoValue cards 2023-11-02 14:14:58 +00:00
Anselm
a969430247 move homepage to new folder 2023-11-02 12:13:15 +00:00
Anselm Eickhoff
e52948b2b7 Merge pull request #125 from gardencmp/jazz-nodejs
jazz-nodejs MVP
2023-11-02 12:11:56 +00:00
Anselm
53bb1b230b Fix interpolation 2023-11-02 11:53:19 +00:00
Anselm
54e83aeaaa use NOMAD_ADDR secret 2023-11-02 11:43:32 +00:00
Anselm
aa3129cab5 Provide localNode to AccountMigrations 2023-10-27 14:48:36 +01:00
Anselm
90520dddd7 Make addMember and removeMember take loaded Accounts instead of just IDs 2023-10-27 14:30:55 +01:00
Anselm
03eb77070a Allow account migrations to be async 2023-10-27 11:18:41 +01:00
869 changed files with 86732 additions and 66071 deletions

View File

@@ -1,11 +1,30 @@
{
"$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json",
"changelog": "@changesets/cli/changelog",
"commit": false,
"fixed": [],
"linked": [],
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": []
"$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json",
"changelog": "@changesets/cli/changelog",
"commit": false,
"fixed": [],
"linked": [
[
"cojson",
"jazz-tools",
"jazz-browser",
"jazz-browser-media-images",
"jazz-browser-auth-clerk",
"jazz-react-auth-clerk",
"jazz-react",
"jazz-react-native",
"jazz-nodejs",
"jazz-run",
"cojson-transport-ws",
"cojson-storage-indexeddb",
"cojson-storage-sqlite"
]
],
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": [],
"___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": {
"onlyUpdatePeerDependentsWhenOutOfRange": true
}
}

11
.editorconfig Normal file
View File

@@ -0,0 +1,11 @@
# EditorConfig is awesome: https://editorconfig.org
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 2

View File

@@ -1,152 +0,0 @@
name: Build and Deploy
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build-examples:
runs-on: ubuntu-latest
strategy:
matrix:
# example: ["chat", "todo", "pets", "twit", "file-drop"]
example: ["twit", "chat"]
steps:
- uses: actions/checkout@v3
with:
submodules: true
- uses: actions/setup-node@v3
with:
node-version: 16
cache: 'yarn'
cache-dependency-path: yarn.lock
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: gardencmp
password: ${{ secrets.GITHUB_TOKEN }}
- name: Nuke Workspace
run: |
rm package.json yarn.lock;
- name: Yarn Build
run: |
yarn install --frozen-lockfile;
yarn build;
working-directory: ./examples/${{ matrix.example }}
- name: Docker Build & Push
uses: docker/build-push-action@v4
with:
context: ./examples/${{ matrix.example }}
push: true
tags: ghcr.io/gardencmp/${{github.event.repository.name}}-example-${{ matrix.example }}:${{github.head_ref || github.ref_name}}-${{github.sha}}-${{github.run_number}}-${{github.run_attempt}}
cache-from: type=gha
cache-to: type=gha,mode=max
# build-homepage:
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v3
# with:
# submodules: true
# - name: Set up Docker Buildx
# uses: docker/setup-buildx-action@v2
# - name: Login to GitHub Container Registry
# uses: docker/login-action@v2
# with:
# registry: ghcr.io
# username: gardencmp
# password: ${{ secrets.GITHUB_TOKEN }}
# - name: Docker Build & Push
# uses: docker/build-push-action@v4
# with:
# context: ./homepage/homepage-jazz
# push: true
# tags: ghcr.io/gardencmp/${{github.event.repository.name}}-homepage-jazz:${{github.head_ref || github.ref_name}}-${{github.sha}}-${{github.run_number}}-${{github.run_attempt}}
# cache-from: type=gha
# cache-to: type=gha,mode=max
deploy-examples:
runs-on: ubuntu-latest
needs: build-examples
strategy:
matrix:
# example: ["chat", "todo", "pets", "twit", "file-drop"]
example: ["twit", "chat"]
steps:
- uses: actions/checkout@v3
with:
submodules: true
- uses: gacts/install-nomad@v1
- name: Tailscale
uses: tailscale/github-action@v1
with:
authkey: ${{ secrets.TAILSCALE_AUTHKEY }}
- name: Deploy on Nomad
run: |
if [ "${{github.ref_name}}" == "main" ]; then
export BRANCH_SUFFIX="";
export BRANCH_SUBDOMAIN="";
else
export BRANCH_SUFFIX=-${{github.head_ref || github.ref_name}};
export BRANCH_SUBDOMAIN=${{github.head_ref || github.ref_name}}.;
fi
export DOCKER_USER=gardencmp;
export DOCKER_PASSWORD=${{ secrets.DOCKER_PULL_PAT }};
export DOCKER_TAG=ghcr.io/gardencmp/${{github.event.repository.name}}-example-${{ matrix.example }}:${{github.head_ref || github.ref_name}}-${{github.sha}}-${{github.run_number}}-${{github.run_attempt}};
envsubst '${DOCKER_USER} ${DOCKER_PASSWORD} ${DOCKER_TAG} ${BRANCH_SUFFIX} ${BRANCH_SUBDOMAIN}' < job-template.nomad > job-instance.nomad;
cat job-instance.nomad;
NOMAD_ADDR='http://control1v2-london:4646' nomad job run job-instance.nomad;
working-directory: ./examples/${{ matrix.example }}
# deploy-homepage:
# runs-on: ubuntu-latest
# needs: build-homepage
# steps:
# - uses: actions/checkout@v3
# with:
# submodules: true
# - uses: gacts/install-nomad@v1
# - name: Tailscale
# uses: tailscale/github-action@v1
# with:
# authkey: ${{ secrets.TAILSCALE_AUTHKEY }}
# - name: Deploy on Nomad
# run: |
# if [ "${{github.ref_name}}" == "main" ]; then
# export BRANCH_SUFFIX="";
# export BRANCH_SUBDOMAIN="";
# else
# export BRANCH_SUFFIX=-${{github.head_ref || github.ref_name}};
# export BRANCH_SUBDOMAIN=${{github.head_ref || github.ref_name}}.;
# fi
# export DOCKER_USER=gardencmp;
# export DOCKER_PASSWORD=${{ secrets.DOCKER_PULL_PAT }};
# export DOCKER_TAG=ghcr.io/gardencmp/${{github.event.repository.name}}-homepage-jazz:${{github.head_ref || github.ref_name}}-${{github.sha}}-${{github.run_number}}-${{github.run_attempt}};
# envsubst '${DOCKER_USER} ${DOCKER_PASSWORD} ${DOCKER_TAG} ${BRANCH_SUFFIX} ${BRANCH_SUBDOMAIN}' < job-template.nomad > job-instance.nomad;
# cat job-instance.nomad;
# NOMAD_ADDR='http://control1v2-london:4646' nomad job run job-instance.nomad;
# working-directory: ./homepage/homepage-jazz

58
.github/workflows/build-examples.yaml vendored Normal file
View File

@@ -0,0 +1,58 @@
name: Build Examples
on:
push:
branches: [ "main" ]
jobs:
build-examples:
runs-on: ubuntu-latest
strategy:
matrix:
example: [
"chat",
"chat-clerk",
"inspector",
"music-player",
"password-manager",
"pets",
"todo",
]
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Enable corepack
run: corepack enable
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version-file: '.node-version'
cache: 'pnpm'
- name: Get pnpm store directory
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Pnpm Build
run: |
pnpm install
pnpm turbo build;
working-directory: ./examples/${{ matrix.example }}

41
.github/workflows/monorepo-linting.yml vendored Normal file
View File

@@ -0,0 +1,41 @@
name: Monorepo linting
on:
pull_request:
types: [opened, synchronize, reopened]
jobs:
monorepo-linting:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version-file: '.node-version'
cache: 'pnpm'
- name: Get pnpm store directory
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- uses: actions/cache@v4
name: Setup pnpm cache
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Run sherif
run: npx sherif@1.0.0
- name: Run formatter
run: pnpm format

69
.github/workflows/playwright.yml vendored Normal file
View File

@@ -0,0 +1,69 @@
name: Playwright Tests
on:
push:
branches: ["main"]
pull_request:
types: [opened, synchronize, reopened]
jobs:
test:
timeout-minutes: 60
runs-on: ubuntu-latest
continue-on-error: true
strategy:
matrix:
project: ["e2e/BinaryCoStream", "e2e/CoValues", "examples/chat", "examples/pets"]
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Enable corepack
run: corepack enable
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version-file: '.node-version'
cache: 'pnpm'
- name: Get pnpm store directory
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Pnpm Build
run: pnpm turbo build
working-directory: ./${{ matrix.project }}
- name: Build jazz-run
run: pnpm exec turbo build && chmod +x dist/index.js;
working-directory: ./packages/jazz-run
- name: Install Playwright Browsers
run: pnpm exec playwright install --with-deps
working-directory: ./${{ matrix.project }}
- name: Run Playwright tests
run: pnpm exec playwright test
working-directory: ./${{ matrix.project }}
- uses: actions/upload-artifact@v4
if: failure()
with:
name: ${{ hashFiles(format('{0}/package.json', matrix.project)) }}-playwright-report
path: ./${{ matrix.project }}/playwright-report/
retention-days: 30

47
.github/workflows/unit-test.yml vendored Normal file
View File

@@ -0,0 +1,47 @@
name: Unit Tests
on:
pull_request:
types: [opened, synchronize, reopened]
push:
branches:
- 'main'
jobs:
unit-tests:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Enable corepack
run: corepack enable
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version-file: '.node-version'
cache: 'pnpm'
- name: Get pnpm store directory
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- uses: actions/cache@v4
name: Setup pnpm cache
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Pnpm Build
run: pnpm turbo build
- name: Unit Tests
run: pnpm test:ci

5
.gitignore vendored
View File

@@ -1,4 +1,7 @@
node_modules
yarn-error.log
lerna-debug.log
docsTmp
docsTmp
.DS_Store
.turbo
coverage

1
.node-version Normal file
View File

@@ -0,0 +1 @@
20

1
.npmrc Normal file
View File

@@ -0,0 +1 @@
node-linker=hoisted

1
.prettierrc Normal file
View File

@@ -0,0 +1 @@
{}

View File

@@ -1,3 +0,0 @@
{
"typescript.tsdk": "node_modules/typescript/lib"
}

16062
DOCS.md

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
Copyright 2023, Garden Computing, Inc.
Copyright 2024, Garden Computing, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

118
README.md
View File

@@ -1,116 +1,12 @@
# Jazz - instant sync
<sub>Homepage: [jazz.tools](https://jazz.tools) &mdash; Docs: [DOCS.md](./DOCS.md) &mdash; Community & support: [Discord](https://discord.gg/utDMjHYg42) &mdash; Updates: [Twitter](https://twitter.com/jazz_tools) & [Email](https://gcmp.io/news)</sub>
**Jazz is an open-source toolkit for building apps with *secure sync.***
Quickly build and ship apps with:
- **Cross-device sync**
- **Collaborative features** (incl. real-time multiplayer)
- **Instantly reacting UIs**
- Local-first storage & offline support
- File upload and real-time media streaming
# What is *secure sync*?
**Sync** means that, *instead of making API requests*, you:
- **Read and write data as if it was local** &mdash; from anywhere in your app.
- **Always have data synced to wherever it's needed, instantly:** to other devices of the same user, to other users, to your backend, to your local machine for debugging, etc.
**Secure** means that, *instead of relying on your API or DB for access control*, you:
- **Set fine-grained, role-based permissions in `Group`s** that are **synced along with your data**.
- **Permissions *verifiably enforced* everywhere,** using encryption & signatures under the hood.
- **Change roles dynamically** for evolving teams, expiring invite links and more.
# What's special about Jazz?
Compared to other libraries and frameworks for local-first, sync-based or real-time apps, these are some of the things that make Jazz unique:
- **Jazz is a *batteries-included,* vertically integrated toolkit,** offering everything you need to build an app, including auth, permissions, data model, sync, conflict resolution, blob storage, file uploads, real-time media streaming and more.
- **Jazz has a *small API surface* of only a few abstractions to learn,** which combine in powerful ways to implement a broad set of features.
- **Jazz *granularly* loads and caches *only the data that is needed*,** combining *local-first* instant UI reactivity and offline support with the on-demand data efficiency of conventional APIs
- **Jazz supports end-to-end encryption, but doesn't require it,** allowing you to either manage your user's secret keys for them (based on existing auth flows) or letting your users
- **Jazz is based on CoJSON, a soon-to-be *open standard,*** which means that there will be a whole ecosystem of compatible libraries and frameworks in a variety of environments &mdash; and it will be easy to achieve (secure) interop between Jazz/CoJSON-based apps and services.
# Jazz Global Mesh
Jazz is open source and you can run your own sync & storage server, but to really provide you with everything you need, we're also running
**[Jazz Global Mesh](https://jazz.tools/mesh)**, a globally distributed mesh of servers optimized for:
- **Ultra-low-latency sync** (with geo-aware edge caching and optimal routing)
- **Low-cost, reliable storage**
# Jazz - Instant sync
**Jazz Global Mesh is free for small volumes of data** and it's the **default syncing peer,** so you can **start building multi-user Jazz apps with persistent data in minutes,** using only frontend code!
# Getting started
**Jazz is an open-source toolkit for building apps with *distributed state.***
## Example App Walkthrough
- Homepage: [jazz.tools](https://jazz.tools)
- Docs: [jazz.tools/docs](https://jazz.tools/docs)
- Community & support: [Discord](https://discord.gg/utDMjHYg42)
- Updates: [Twitter](https://twitter.com/jazz_tools) & [Email](https://gcmp.io/news)
**For now the best tutorial is the walkthrough of the [Todo List Example App](#todo-list).**
## General Scenarios
### Building a new, entirely sync-based React app
1. Define your data model with [cojson Collaborative Values (CoValues)](./DOCS.md#covalue).
2. Implement permission logic using [cojson Groups](./DOCS.md#group).
3. Build a user interface with [jazz-react](./DOCS.md#jazz-react) and [auto-sub](./DOCS.md#useautosubid).
### Gradually adding sync to an existing React app
Gradually migrate app features to use sync:
1. Define data model for small aspect of your app with [cojson Collaborative Values (CoValues)](./DOCS.md#covalue).
- Schema adapters/importers for Prisma/Drizzle/PostgreSQL introspection coming soon.
2. Map existing permission logic with [cojson Groups](./DOCS.md#group) & integrate existing auth.
- Auth integrations coming soon.
3. Replace some of the React state and API requests in your UI with [jazz-react](./DOCS.md#jazz-react) and [auto-sub](./DOCS.md#useautosubid).
# Example Apps
## Todo List
**A simple collaborative todo list app.**
Live version: https://example-todo.jazz.tools
Source code & walkthrough: [`./examples/todo`](./examples/todo)
Demonstrates:
- Defining a data model with `CoMap`s and `CoList`s
- Creating data and setting permissions with `Group`s
- Fetching, rendering & editing data from nested `CoValue`s with reactive synced queries
## Rate-My-Pet
**A simple social polling app.**
Live version: https://example-pets.jazz.tools
Source code (walkthrough coming soon): [`./examples/pets`](./examples/pets)
Demonstrates:
- Implementing per-account data streams (reactions) with `CoStream`s
- Implementing image upload and progressive image streaming using helpers from `jazz-react-media-images` (on top of CoJSON's `BinaryCoStreams` & `ImageDefinition` convention)
# Documentation & API Reference
For now, docs are hosted in a single well-structured markdown file: [`./DOCS.md`](./DOCS.md).
- [Package Overview](./DOCS.md#overview)
- [`jazz-react` API](./DOCS.md#jazz-react)
- [`cojson` API](./DOCS.md#cojson)
- [`jazz-browser-media-images` API](./DOCS.md#jazz-browser-media-images)
In the future we'll build a dedicated docs page on the Jazz homepage.
----
Copyright 2023 &mdash; Garden Computing, Inc.
Copyright 2024 &mdash; Garden Computing, Inc.

30
e2e/BinaryCoStream/.gitignore vendored Normal file
View File

@@ -0,0 +1,30 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
sync-db/
/test-results/
/playwright-report/
/blob-report/
/playwright/.cache/

View File

@@ -0,0 +1,55 @@
# @jazz-e2e/binarycostream
## 0.0.88
### Patch Changes
- jazz-react@0.8.7
## 0.0.87
### Patch Changes
- jazz-react@0.8.6
## 0.0.86
### Patch Changes
- Updated dependencies [c3f4e6b]
- Updated dependencies [d9152ed]
- jazz-tools@0.8.5
- cojson@0.8.5
- jazz-react@0.8.5
## 0.0.85
### Patch Changes
- Updated dependencies
- hash-slash@0.2.1
## 0.0.84
### Patch Changes
- Updated dependencies
- cojson@0.8.3
- jazz-react@0.8.3
- jazz-tools@0.8.3
## 0.0.83
### Patch Changes
- Updated dependencies [a075f90]
- jazz-tools@0.8.2
- jazz-react@0.8.2
## 0.0.82
### Patch Changes
- Updated dependencies
- jazz-tools@0.8.1
- jazz-react@0.8.1

View File

@@ -0,0 +1,14 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/png" href="/jazz-logo.png" />
<link rel="stylesheet" href="/src/index.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Jazz BinaryCoStream Tests</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/app.tsx"></script>
</body>
</html>

View File

@@ -0,0 +1,34 @@
{
"name": "@jazz-e2e/binarycostream",
"private": true,
"version": "0.0.88",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview",
"test": "playwright test",
"test:ui": "playwright test --ui"
},
"lint-staged": {
"*.{js,jsx,mdx,json}": "prettier --write"
},
"dependencies": {
"cojson": "workspace:0.8.5",
"hash-slash": "workspace:0.2.1",
"is-ci": "^3.0.1",
"jazz-react": "workspace:0.8.7",
"jazz-tools": "workspace:0.8.5",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"devDependencies": {
"@playwright/test": "^1.46.1",
"@types/node": "^22.5.1",
"@types/react": "^18.2.19",
"@types/react-dom": "^18.2.7",
"@vitejs/plugin-react-swc": "^3.3.2",
"typescript": "^5.3.3",
"vite": "^5.0.10"
}
}

View File

@@ -0,0 +1,49 @@
import { defineConfig, devices } from "@playwright/test";
import isCI from "is-ci";
/**
* Read environment variables from file.
* https://github.com/motdotla/dotenv
*/
// import dotenv from 'dotenv';
// dotenv.config({ path: path.resolve(__dirname, '.env') });
/**
* See https://playwright.dev/docs/test-configuration.
*/
export default defineConfig({
testDir: "./tests",
/* Run tests in files in parallel */
fullyParallel: true,
/* Fail the build on CI if you accidentally left test.only in the source code. */
forbidOnly: isCI,
/* Retry on CI only */
retries: isCI ? 2 : 0,
/* Opt out of parallel tests on CI. */
workers: isCI ? 1 : undefined,
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
reporter: "html",
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
use: {
/* Base URL to use in actions like `await page.goto('/')`. */
baseURL: isCI ? "http://localhost:4173/" : "http://localhost:5173",
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
trace: "on-first-retry",
},
/* Configure projects for major browsers */
projects: [
{
name: "chromium",
use: { ...devices["Desktop Chrome"] },
},
],
/* Run your local dev server before starting the tests */
webServer: isCI ? {
command: "pnpm preview",
url: "http://localhost:4173/",
} : undefined,
});

View File

@@ -0,0 +1,42 @@
import { Account, BinaryCoStream, ID } from "jazz-tools";
import { useEffect } from "react";
import { useAccount, useCoState } from "./jazz";
import { UploadedFile } from "./schema";
import { waitForCoValue } from "./lib/waitForCoValue";
async function getUploadedFile(
me: Account,
uploadedFileId: ID<UploadedFile>) {
const uploadedFile = await waitForCoValue(UploadedFile, uploadedFileId, me, Boolean, {})
uploadedFile.coMapDownloaded = true;
await BinaryCoStream.loadAsBlob(uploadedFile._refs.file.id, me);
return uploadedFile;
}
export function DownloaderPeer(props: { testCoMapId: ID<UploadedFile> }) {
const account = useAccount();
const testCoMap = useCoState(UploadedFile, props.testCoMapId, {});
useEffect(() => {
getUploadedFile(account.me, props.testCoMapId).then(value => {
value.syncCompleted = true;
});
}, []);
return (
<>
<h1>Downloader Peer</h1>
<div>Fetching: {props.testCoMapId}</div>
<div data-testid="result">
Covalue: {Boolean(testCoMap?.id) ? "Downloaded" : "Not Downloaded"}
</div>
<div data-testid="result">
File:{" "}
{Boolean(testCoMap?.syncCompleted) ? "Downloaded" : "Not Downloaded"}
</div>
</>
);
}

View File

@@ -0,0 +1,86 @@
import { ID } from "jazz-tools";
import { useEffect, useState } from "react";
import { useAccount, useCoState } from "./jazz";
import { createCredentiallessIframe } from "./lib/createCredentiallessIframe";
import { generateTestFile } from "./lib/generateTestFile";
import { getDownloaderPeerUrl } from "./lib/getDownloaderPeerUrl";
import { UploadedFile } from "./schema";
import { waitForCoValue } from "./lib/waitForCoValue";
import { getDefaultFileSize, getIsAutoUpload } from "./lib/searchParams";
import { BytesRadioGroup } from "./lib/BytesRadioGroup";
export function UploaderPeer() {
const account = useAccount();
const [uploadedFileId, setUploadedFileId] = useState<
ID<UploadedFile> | undefined
>(undefined);
const [syncDuration, setSyncDuration] = useState<number | null>(null);
const [bytes, setBytes] = useState(getDefaultFileSize);
const testFile = useCoState(UploadedFile, uploadedFileId, {});
async function uploadTestFile() {
if (!account) return;
// Mark the sync start
performance.mark("sync-start");
const file = await generateTestFile(account.me, bytes);
// Create a credential-less iframe to spawn the downloader peer
const iframe = createCredentiallessIframe(getDownloaderPeerUrl(file));
document.body.appendChild(iframe);
setSyncDuration(null);
setUploadedFileId(file.id);
// The downloader peer will set the syncCompleted to true when the download is complete.
// We use this to measure the sync duration.
await waitForCoValue(
UploadedFile,
file.id,
account.me,
(value) => value.syncCompleted,
{}
);
iframe.remove();
// Calculate the sync duration
performance.mark("sync-end");
const measure = performance.measure("sync", "sync-start", "sync-end");
setSyncDuration(measure.duration);
}
useEffect(() => {
if (getIsAutoUpload()) {
uploadTestFile();
}
}, []);
return (
<>
<BytesRadioGroup selectedValue={bytes} onChange={setBytes} />
<button onClick={uploadTestFile}>Upload Test File</button>
{uploadedFileId && <div>{uploadedFileId}</div>}
{syncDuration && (
<div data-testid="sync-duration">
Sync Duration: {syncDuration.toFixed(2)}ms
</div>
)}
{uploadedFileId && (
<div data-testid="result">
Sync Completed: {String(Boolean(syncDuration))}
</div>
)}
{testFile?.coMapDownloaded && (
<div data-testid="co-map-downloaded">
CoMap synced!
</div>
)}
</>
);
}

View File

@@ -0,0 +1,24 @@
import React from "react";
import ReactDOM from "react-dom/client";
import { DownloaderPeer } from "./DownloaderPeer";
import { UploaderPeer } from "./UploaderPeer";
import { getValueId } from "./lib/searchParams";
import { AuthAndJazz } from "./jazz";
function Main() {
const valueId = getValueId();
if (valueId) {
return <DownloaderPeer testCoMapId={valueId} />;
}
return <UploaderPeer />;
}
ReactDOM.createRoot(document.getElementById("root")!).render(
<React.StrictMode>
<AuthAndJazz>
<Main />
</AuthAndJazz>
</React.StrictMode>,
);

View File

@@ -0,0 +1,36 @@
import { createJazzReactApp, useDemoAuth } from "jazz-react";
import { getValueId } from "./lib/searchParams";
import { useEffect, useRef } from "react";
const key = getValueId()
? `downloader-e2e@jazz.tools`
: `uploader-e2e@jazz.tools`;
const localSync = new URLSearchParams(location.search).has("localSync");
const Jazz = createJazzReactApp();
export const { useAccount, useCoState } = Jazz;
export function AuthAndJazz({ children }: { children: React.ReactNode }) {
const [auth, state] = useDemoAuth();
const signedUp = useRef(false);
useEffect(() => {
if (state.state === "ready" && !signedUp.current) {
state.signUp('Mister X');
signedUp.current = true;
}
}, [state.state])
return (
<Jazz.Provider auth={auth} peer={
localSync
? `ws://localhost:4200?key=${key}`
: `wss://cloud.jazz.tools/?key=${key}`
}>
{children}
</Jazz.Provider>
);
}

View File

@@ -0,0 +1,67 @@
export function BytesRadioGroup(props: {
selectedValue: number;
onChange: (value: number) => void;
}) {
return (
<p>
<BytesRadioInput
label="1KB"
value={1e3}
selectedValue={props.selectedValue}
onChange={props.onChange} />
<BytesRadioInput
label="10KB"
value={1e4}
selectedValue={props.selectedValue}
onChange={props.onChange} />
<BytesRadioInput
label="100KB"
value={1e5}
selectedValue={props.selectedValue}
onChange={props.onChange} />
<BytesRadioInput
label="150KB"
value={1e5 + 5e4}
selectedValue={props.selectedValue}
onChange={props.onChange} />
<BytesRadioInput
label="200KB"
value={2e6}
selectedValue={props.selectedValue}
onChange={props.onChange} />
<BytesRadioInput
label="500KB"
value={5e6}
selectedValue={props.selectedValue}
onChange={props.onChange} />
<BytesRadioInput
label="1MB"
value={1e6}
selectedValue={props.selectedValue}
onChange={props.onChange} />
<BytesRadioInput
label="10MB"
value={1e7}
selectedValue={props.selectedValue}
onChange={props.onChange} />
</p>
);
}
function BytesRadioInput(props: {
label: string;
value: number;
selectedValue: number;
onChange: (value: number) => void;
}) {
return (
<label>
<input
type="radio"
name="bytes"
value={props.value}
checked={props.value === props.selectedValue}
onChange={() => props.onChange(props.value)} />
{props.label}
</label>
);
}

View File

@@ -0,0 +1,21 @@
/**
* Creates a credentialess iframe that can be used to test the sync
* in an isolated environment. (no storage sharing)
*
* see: https://developer.mozilla.org/en-US/docs/Web/Security/IFrame_credentialless
*/
export function createCredentiallessIframe(url: string) {
const iframe = document.createElement("iframe");
// @ts-ignore
iframe.credentialless = true;
iframe.src = url;
iframe.style.width = "300px";
iframe.style.height = "300px";
iframe.style.border = "1px solid black";
iframe.style.position = "absolute";
iframe.style.top = "0";
iframe.style.right = "0";
iframe.setAttribute("data-testid", "downloader-peer");
return iframe;
}

View File

@@ -0,0 +1,27 @@
import { Account, Group, BinaryCoStream } from "jazz-tools";
import { UploadedFile } from "../schema";
export async function generateTestFile(me: Account, bytes: number) {
const group = Group.create({ owner: me });
group.addMember("everyone", "writer");
const ownership = { owner: group };
const testFile = UploadedFile.create(
{
file: await BinaryCoStream.createFromBlob(
new Blob(['1'.repeat(bytes)], { type: 'image/png' }),
ownership
),
syncCompleted: false,
coMapDownloaded: false,
},
ownership
);
const url = new URL(window.location.href);
url.searchParams.set("valueId", testFile.id);
return testFile;
}

View File

@@ -0,0 +1,8 @@
import { UploadedFile } from "src/schema";
export function getDownloaderPeerUrl(value: UploadedFile) {
const url = new URL(window.location.href);
url.searchParams.set("valueId", value.id);
return url.toString();
}

View File

@@ -0,0 +1,14 @@
import { ID } from "jazz-tools";
import { UploadedFile } from "../schema";
export function getValueId() {
return new URLSearchParams(location.search).get("valueId") as ID<UploadedFile> | undefined ?? undefined;
}
export function getIsAutoUpload() {
return new URLSearchParams(location.search).has("auto");
}
export function getDefaultFileSize() {
return parseInt(new URLSearchParams(location.search).get("fileSize") ?? 1e3.toString());
}

View File

@@ -0,0 +1,39 @@
import {
Account,
CoValue,
CoValueClass,
DepthsIn,
ID,
subscribeToCoValue,
} from "jazz-tools";
export function waitForCoValue<T extends CoValue>(
coMap: CoValueClass<T>,
valueId: ID<T>,
account: Account,
predicate: (value: T) => boolean,
depth: DepthsIn<T>
) {
return new Promise<T>((resolve) => {
function subscribe() {
const unsubscribe = subscribeToCoValue(
coMap,
valueId,
account,
depth,
(value) => {
if (predicate(value)) {
resolve(value);
unsubscribe();
}
},
() => {
unsubscribe();
setTimeout(subscribe, 100);
}
);
}
subscribe();
});
}

View File

@@ -0,0 +1,7 @@
import { BinaryCoStream, co, CoMap } from "jazz-tools";
export class UploadedFile extends CoMap {
file = co.ref(BinaryCoStream);
syncCompleted = co.boolean;
coMapDownloaded = co.boolean;
}

View File

@@ -0,0 +1,36 @@
import { test, expect } from "@playwright/test";
import { setTimeout } from "node:timers/promises";
test.describe("BinaryCoStream - Sync", () => {
test("should sync a file between the two peers", async ({ page }) => {
await page.goto("/");
await page.getByRole("button", { name: "Upload Test File" }).click();
await page.getByTestId("sync-duration").waitFor();
await expect(page.getByTestId("result")).toHaveText("Sync Completed: true");
});
test("should handle reconnections", async ({ page, browser }) => {
const context = browser.contexts()[0];
await page.goto("/?fileSize=" + 1e6); // 1MB file
await page.getByRole("button", { name: "Upload Test File" }).click();
// Wait for the coMapDonwloaded signal to ensure that the iframe is loaded
await page.getByTestId("co-map-downloaded").waitFor();
await context.setOffline(true);
// Wait for the ping system to detect the offline state
await setTimeout(10000);
await context.setOffline(false);
// Wait for the sync to complete
await page.getByTestId("sync-duration").waitFor();
await expect(page.getByTestId("result")).toHaveText("Sync Completed: true");
});
});

View File

@@ -0,0 +1,25 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2023", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"baseUrl": "."
},
"include": ["src"],
}

View File

@@ -0,0 +1,10 @@
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react-swc'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [react()],
build: {
minify: false
}
})

30
e2e/CoValues/.gitignore vendored Normal file
View File

@@ -0,0 +1,30 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
sync-db/
/test-results/
/playwright-report/
/blob-report/
/playwright/.cache/

47
e2e/CoValues/CHANGELOG.md Normal file
View File

@@ -0,0 +1,47 @@
# @jazz-e2e/covalues
## 0.0.87
### Patch Changes
- jazz-react@0.8.7
## 0.0.86
### Patch Changes
- jazz-react@0.8.6
## 0.0.85
### Patch Changes
- Updated dependencies [c3f4e6b]
- Updated dependencies [d9152ed]
- jazz-tools@0.8.5
- cojson@0.8.5
- jazz-react@0.8.5
## 0.0.84
### Patch Changes
- Updated dependencies
- hash-slash@0.2.1
## 0.0.83
### Patch Changes
- Updated dependencies
- cojson@0.8.3
- jazz-react@0.8.3
- jazz-tools@0.8.3
## 0.0.82
### Patch Changes
- Updated dependencies [a075f90]
- jazz-tools@0.8.2
- jazz-react@0.8.2

14
e2e/CoValues/index.html Normal file
View File

@@ -0,0 +1,14 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/png" href="/jazz-logo.png" />
<link rel="stylesheet" href="/src/index.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Jazz CoValues tests</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/app.tsx"></script>
</body>
</html>

37
e2e/CoValues/package.json Normal file
View File

@@ -0,0 +1,37 @@
{
"name": "@jazz-e2e/covalues",
"private": true,
"version": "0.0.87",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview",
"test": "playwright test",
"test:ui": "playwright test --ui"
},
"lint-staged": {
"*.{js,jsx,mdx,json}": "prettier --write"
},
"dependencies": {
"cojson": "workspace:*",
"hash-slash": "workspace:*",
"is-ci": "^3.0.1",
"jazz-react": "workspace:*",
"jazz-tools": "workspace:*",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router": "^6.16.0",
"react-router-dom": "^6.16.0"
},
"devDependencies": {
"@playwright/test": "^1.46.1",
"@types/node": "^22.5.1",
"@types/react": "^18.2.19",
"@types/react-dom": "^18.2.7",
"@vitejs/plugin-react-swc": "^3.3.2",
"jstat": "^1.9.6",
"typescript": "^5.3.3",
"vite": "^5.0.10"
}
}

View File

@@ -0,0 +1,49 @@
import { defineConfig, devices } from "@playwright/test";
import isCI from "is-ci";
/**
* Read environment variables from file.
* https://github.com/motdotla/dotenv
*/
// import dotenv from 'dotenv';
// dotenv.config({ path: path.resolve(__dirname, '.env') });
/**
* See https://playwright.dev/docs/test-configuration.
*/
export default defineConfig({
testDir: "./tests",
/* Run tests in files in parallel */
fullyParallel: true,
/* Fail the build on CI if you accidentally left test.only in the source code. */
forbidOnly: isCI,
/* Retry on CI only */
retries: isCI ? 2 : 0,
/* Opt out of parallel tests on CI. */
workers: isCI ? 1 : undefined,
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
reporter: "html",
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
use: {
/* Base URL to use in actions like `await page.goto('/')`. */
baseURL: isCI ? "http://localhost:4173/" : "http://localhost:5173",
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
trace: "on-first-retry",
},
/* Configure projects for major browsers */
projects: [
{
name: "chromium",
use: { ...devices["Desktop Chrome"] },
},
],
/* Run your local dev server before starting the tests */
webServer: isCI ? {
command: "pnpm preview",
url: "http://localhost:4173/",
} : undefined,
});

25
e2e/CoValues/src/app.tsx Normal file
View File

@@ -0,0 +1,25 @@
import React from "react";
import ReactDOM from "react-dom/client";
import { AuthAndJazz } from "./jazz";
import { TestInput } from "./pages/TestInput";
import { RouterProvider, createHashRouter } from "react-router-dom";
const router = createHashRouter([
{
path: "/",
element: <TestInput />,
},
{
path: "/test-input",
element: <TestInput />,
},
]);
ReactDOM.createRoot(document.getElementById("root")!).render(
<React.StrictMode>
<AuthAndJazz>
<RouterProvider router={router} />
</AuthAndJazz>
</React.StrictMode>,
);

25
e2e/CoValues/src/jazz.tsx Normal file
View File

@@ -0,0 +1,25 @@
import { createJazzReactApp } from "jazz-react";
import { ephemeralCredentialsAuth } from "jazz-tools";
import { useState } from "react";
const key = `test-comap@jazz.tools`;
const localSync = new URLSearchParams(location.search).has("localSync");
const Jazz = createJazzReactApp();
export const { useAccount, useCoState } = Jazz;
export function AuthAndJazz({ children }: { children: React.ReactNode }) {
const [ephemeralAuth] = useState(ephemeralCredentialsAuth())
return (
<Jazz.Provider auth={ephemeralAuth} peer={
localSync
? `ws://localhost:4200?key=${key}`
: `wss://cloud.jazz.tools/?key=${key}`
}>
{children}
</Jazz.Provider>
);
}

View File

@@ -0,0 +1,35 @@
import { co, CoMap, Group, ID } from "jazz-tools";
import { useAccount, useCoState } from "../jazz";
import { useEffect, useState } from "react";
export class InputTestCoMap extends CoMap {
title = co.string;
}
export function TestInput() {
const [id, setId] = useState<ID<InputTestCoMap> | undefined>(undefined);
const coMap = useCoState(InputTestCoMap, id);
const { me } = useAccount();
useEffect(() => {
if (!me || id) return;
const group = Group.create({ owner: me });
group.addMember("everyone", "writer");
setId(InputTestCoMap.create({ title: "" }, { owner: group }).id);
}, [me]);
if (!coMap) return null;
return (
<input
value={coMap?.title ?? ""}
onChange={(e) => {
if (!coMap) return;
coMap.title = e.target.value;
}}
/>
);
}

View File

@@ -0,0 +1,14 @@
import { test, expect } from "@playwright/test";
test.describe("CoMap - TestInput", () => {
test("should keep the cursor position when typing", async ({ page }) => {
await page.goto("/test-input");
await page.getByRole("textbox").fill("xx");
await page.getByRole('textbox').press('ArrowLeft');
await page.getByRole("textbox").press("y");
await page.getByRole("textbox").press("y");
await expect(page.getByRole('textbox')).toHaveValue("xyyx");
});
});

View File

@@ -0,0 +1,25 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2023", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"baseUrl": "."
},
"include": ["src"],
}

View File

@@ -0,0 +1,10 @@
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react-swc'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [react()],
build: {
minify: false
}
})

View File

@@ -0,0 +1,11 @@
{
"extends": [
"next/core-web-vitals",
"prettier",
"plugin:prettier/recommended"
],
"plugins": ["prettier"],
"rules": {
"prettier/prettier": ["error"]
}
}

36
examples/book-shelf/.gitignore vendored Normal file
View File

@@ -0,0 +1,36 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
.yarn/install-state.gz
# testing
/coverage
# next.js
/.next/
/out/
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# local env files
.env*.local
# vercel
.vercel
# typescript
*.tsbuildinfo
next-env.d.ts

View File

@@ -0,0 +1,11 @@
{
"tabWidth": 2,
"useTabs": false,
"semi": true,
"singleQuote": false,
"trailingComma": "es5",
"bracketSpacing": true,
"arrowParens": "avoid",
"printWidth": 80,
"plugins": ["prettier-plugin-tailwindcss"]
}

View File

@@ -0,0 +1,25 @@
# jazz-example-book-shelf
## 0.1.3
### Patch Changes
- jazz-browser-media-images@0.8.7
- jazz-react@0.8.7
## 0.1.2
### Patch Changes
- jazz-browser-media-images@0.8.6
- jazz-react@0.8.6
## 0.1.1
### Patch Changes
- Updated dependencies [c3f4e6b]
- Updated dependencies [d9152ed]
- jazz-tools@0.8.5
- jazz-browser-media-images@0.8.5
- jazz-react@0.8.5

View File

@@ -0,0 +1,43 @@
# Jazz Book Shelf Example
Live version: [https://books-demo.jazz.tools](https://books-demo.jazz.tools)
## Installing & running the example locally
(this requires `pnpm` to be installed, see [https://pnpm.io/installation](https://pnpm.io/installation))
Start by checking out `jazz`
Install dependencies:
```bash
pnpm install
```
Go to the `examples/book-shelf` directory.
```bash
cd examples/book-shelf
```
Install dependencies:
```bash
pnpm install
```
Start the dev server:
```bash
pnpm dev
```
## Questions / problems / feedback
If you have feedback, let us know on [Discord](https://discord.gg/utDMjHYg42) or open an issue or PR to fix something that seems wrong.
## Configuration: sync server
By default, the example app uses [Jazz Cloud](https://jazz.tools/cloud) (`wss://cloud.jazz.tools`) - so cross-device use, invites and collaboration should just work.
You can also run a local sync server by running `npx jazz-run sync` and adding the query param `?sync=ws://localhost:4200` to the URL of the example app (for example: `http://localhost:5173/?peer=ws://localhost:4200`), or by setting the `sync` parameter of the `<Jazz.Provider>` provider component in [./src/components/JazzAndAuth.tsx](./src/2_main.tsx).

View File

@@ -0,0 +1,56 @@
job "example-bookShelf$BRANCH_SUFFIX" {
region = "global"
datacenters = ["*"]
group "static" {
count = 4
network {
port "http" {
to = 80
}
}
constraint {
attribute = "${node.class}"
operator = "="
value = "cloud"
}
spread {
attribute = "${node.datacenter}"
weight = 100
}
constraint {
distinct_hosts = true
}
task "server" {
driver = "docker"
config {
image = "$DOCKER_TAG"
ports = ["http"]
auth = {
username = "$DOCKER_USER"
password = "$DOCKER_PASSWORD"
}
}
service {
tags = ["public"]
name = "example-bookShelf$BRANCH_SUFFIX"
port = "http"
provider = "consul"
}
resources {
cpu = 50 # MHz
memory = 50 # MB
}
}
}
}
# deploy bump 4

5
examples/book-shelf/next-env.d.ts vendored Normal file
View File

@@ -0,0 +1,5 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
// NOTE: This file should not be edited
// see https://nextjs.org/docs/basic-features/typescript for more information.

View File

@@ -0,0 +1,4 @@
/** @type {import('next').NextConfig} */
const nextConfig = {};
export default nextConfig;

View File

@@ -0,0 +1,35 @@
{
"name": "jazz-example-book-shelf",
"version": "0.1.3",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
"format": "prettier --write ."
},
"dependencies": {
"clsx": "^2.0.0",
"jazz-browser-media-images": "workspace:0.8.7",
"jazz-react": "workspace:0.8.7",
"jazz-tools": "workspace:0.8.5",
"next": "14.2.5",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"devDependencies": {
"@types/node": "^22.5.1",
"@types/react": "^18.2.19",
"@types/react-dom": "^18.2.7",
"eslint": "^8.46.0",
"eslint-config-next": "14.2.5",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-prettier": "^5.2.1",
"postcss": "^8.4.27",
"prettier": "^3.1.1",
"prettier-plugin-tailwindcss": "^0.6.5",
"tailwindcss": "3.3.2",
"typescript": "^5.3.3"
}
}

View File

@@ -0,0 +1,8 @@
/** @type {import('postcss-load-config').Config} */
const config = {
plugins: {
tailwindcss: {},
},
};
export default config;

View File

@@ -0,0 +1,136 @@
"use client";
import { ChangeEvent, useState } from "react";
import { BookReview, ListOfBookReviews } from "@/schema";
import { useAccount } from "@/components/JazzAndAuth";
import { useRouter } from "next/navigation";
import RatingInput from "@/components/RatingInput";
import { createImage } from "jazz-browser-media-images";
import { Group, ImageDefinition } from "jazz-tools";
import { Container } from "@/components/Container";
import { Button } from "@/components/Button";
export default function AddBookReview() {
const { me } = useAccount();
const [title, setTitle] = useState("");
const [author, setAuthor] = useState("");
const [review, setReview] = useState("");
const [rating, setRating] = useState(0);
const [dateRead, setDateRead] = useState(
new Date().toISOString().split("T")[0]
);
const [coverImage, setCoverImage] = useState<ImageDefinition | undefined>();
const router = useRouter();
const onDateChange = (event: ChangeEvent<HTMLInputElement>) => {
const date = new Date(event.currentTarget.value)
.toISOString()
.split("T")[0];
setDateRead(date);
};
const onImageChange = (event: ChangeEvent<HTMLInputElement>) => {
const file = event.currentTarget.files?.[0];
const group = Group.create({ owner: me });
group.addMember("everyone", "reader");
if (file) {
createImage(file, { owner: group }).then(image => {
setCoverImage(image);
});
}
};
const onSubmit = (event: React.FormEvent<HTMLFormElement>) => {
event.preventDefault();
if (!me?.profile) return;
const bookReview = BookReview.create(
{
title,
author,
review,
rating,
dateRead: new Date(dateRead),
cover: coverImage,
},
{
owner: me.profile._owner,
}
);
if (!me.profile.bookReviews) {
me.profile.bookReviews = ListOfBookReviews.create([], {
owner: me.profile._owner,
});
}
me.profile.bookReviews.push(bookReview);
router.push("/");
};
return (
<Container className="grid max-w-lg gap-8 py-8">
<h1 className="text-lg font-semibold text-black">Add book review</h1>
<form action="" className="grid gap-4" onSubmit={onSubmit}>
<label className="grid gap-1 text-sm text-gray-600">
Cover
<input type="file" onChange={onImageChange} />
</label>
<label className="grid gap-1 text-sm text-gray-600">
Title
<input
className="rounded border border-gray-300 px-2 py-1 shadow-sm"
type="text"
value={title}
required
onChange={e => setTitle(e.target.value)}
></input>
</label>
<label className="grid gap-1 text-sm text-gray-600">
Author
<input
className="rounded border border-gray-300 px-2 py-1 shadow-sm"
type="text"
value={author}
required
onChange={e => setAuthor(e.target.value)}
></input>
</label>
<label className="grid gap-1 text-sm text-gray-600">
Date read
<input
className="rounded border border-gray-300 px-2 py-1 shadow-sm"
type="date"
value={dateRead}
required
onChange={onDateChange}
/>
</label>
<div className="grid gap-1 text-sm text-gray-600">
Rating
<RatingInput value={rating} onChange={rating => setRating(rating)} />
</div>
<label className="grid gap-1 text-sm text-gray-600">
Review
<textarea
className="rounded border border-gray-300 px-2 py-1 shadow-sm"
value={review}
onChange={e => setReview(e.target.value)}
></textarea>
</label>
<Button variant="primary" type="submit">
Add
</Button>
</form>
</Container>
);
}

View File

@@ -0,0 +1,172 @@
"use client";
import { useCoState } from "@/components/JazzAndAuth";
import { BookReview } from "@/schema";
import { Group, ID } from "jazz-tools";
import { BookCover } from "@/components/BookCover";
import clsx from "clsx";
import RatingInput from "@/components/RatingInput";
import Rating from "@/components/Rating";
import { Container } from "@/components/Container";
const BookReviewTitle = ({
bookReview,
readOnly,
}: {
bookReview: BookReview;
readOnly: boolean;
}) => {
const className = "font-serif text-2xl font-bold lg:text-4xl";
if (readOnly) {
return <h1 className={className}>{bookReview.title}</h1>;
}
return (
<input
value={bookReview.title}
placeholder="Book title"
className={clsx(
className,
"w-full rounded border border-transparent px-2 py-1 hover:border-gray-300 hover:shadow-sm"
)}
onChange={e => (bookReview.title = e.target.value)}
></input>
);
};
const BookReviewAuthor = ({
bookReview,
readOnly,
}: {
bookReview: BookReview;
readOnly: boolean;
}) => {
const className = "text-gray-700";
if (readOnly) {
return <p className={className}>by {bookReview.author}</p>;
}
return (
<input
value={bookReview.author}
placeholder="Author"
className={clsx(
className,
"w-full rounded border border-transparent px-2 py-1 hover:border-gray-300 hover:shadow-sm"
)}
onChange={e => (bookReview.author = e.target.value)}
></input>
);
};
const BookReviewDateRead = ({
bookReview,
readOnly,
}: {
bookReview: BookReview;
readOnly: boolean;
}) => {
const className = "text-gray-700 max-w-[10rem]";
if (readOnly) {
return (
bookReview.dateRead && (
<p className={className}>{bookReview.dateRead.toLocaleDateString()}</p>
)
);
}
return (
<input
type="date"
value={bookReview.dateRead?.toISOString().split("T")[0]}
placeholder="Date read"
className={clsx(
className,
"w-full rounded border border-transparent px-2 py-1 hover:border-gray-300 hover:shadow-sm"
)}
onChange={e => {
const date = new Date(e.target.value);
bookReview.dateRead = date;
}}
></input>
);
};
const BookReviewReview = ({
bookReview,
readOnly,
}: {
bookReview: BookReview;
readOnly: boolean;
}) => {
const className = "text-sm leading-relaxed text-gray-600";
if (readOnly) {
if (bookReview.review) {
return <p className={className}>{bookReview.review}</p>;
}
}
return (
<textarea
value={bookReview.review}
placeholder="Write your review here..."
className={clsx(
className,
"w-full rounded border border-transparent px-2 py-1 hover:border-gray-300 hover:shadow-sm"
)}
onChange={e => (bookReview.review = e.target.value)}
></textarea>
);
};
const BookReviewRating = ({
bookReview,
readOnly,
}: {
bookReview: BookReview;
readOnly: boolean;
}) => {
const className = "text-2xl sm:mx-0";
if (readOnly) {
return <Rating className={className} rating={bookReview.rating} />;
}
return (
<RatingInput
className={clsx(className, "p-2")}
onChange={rating => (bookReview.rating = rating)}
value={bookReview.rating}
/>
);
};
export default function Page({ params }: { params: { slug: string } }) {
const bookReview = useCoState(BookReview, params.slug as ID<BookReview>);
if (!bookReview) return <></>;
const readOnly = !(bookReview._owner.castAs(Group).myRole() === "admin");
return (
<Container className="grid gap-12 py-8">
<div className="flex flex-col gap-6 sm:flex-row md:gap-10">
<div className="w-[180px]">
<BookCover bookReview={bookReview} readOnly={readOnly} />
</div>
<div className="-mx-2 grid max-w-lg flex-1 gap-3 sm:mx-0">
<BookReviewTitle bookReview={bookReview} readOnly={readOnly} />
<BookReviewAuthor bookReview={bookReview} readOnly={readOnly} />
<BookReviewDateRead bookReview={bookReview} readOnly={readOnly} />
<BookReviewRating bookReview={bookReview} readOnly={readOnly} />
<BookReviewReview bookReview={bookReview} readOnly={readOnly} />
</div>
</div>
</Container>
);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -0,0 +1,13 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
:focus {
@apply outline-none;
}
:focus-visible {
@apply ring-2 ring-purple-600/75 dark:ring-2 dark:ring-white/75;
}
}

View File

@@ -0,0 +1,39 @@
import type { Metadata } from "next";
import { Inter } from "next/font/google";
import "./globals.css";
import { JazzAndAuth } from "@/components/JazzAndAuth";
import { Nav } from "@/components/Nav";
import { Fraunces } from "next/font/google";
import clsx from "clsx";
const fraunces = Fraunces({
subsets: ["latin"],
display: "swap",
variable: "--font-fraunces",
});
const inter = Inter({ subsets: ["latin"] });
export const metadata: Metadata = {
title: "Jazz Book Shelf",
description: "Jazz Book Shelf",
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en">
<body className={clsx(inter.className, fraunces.variable)}>
<JazzAndAuth>
<header>
<Nav />
</header>
<main>{children}</main>
</JazzAndAuth>
</body>
</html>
);
}

View File

@@ -0,0 +1,27 @@
"use client";
import { useAccount } from "@/components/JazzAndAuth";
import UserProfile from "@/components/UserProfile";
import { JazzAccount } from "@/schema";
import { ID } from "jazz-tools";
import { Container } from "@/components/Container";
export default function Home() {
const { me } = useAccount();
return (
<Container className="grid gap-12 py-8">
<UserProfile id={me?.id as ID<JazzAccount>} />
<label className="flex flex-wrap items-center gap-3">
Share your profile:
<input
type="text"
className="w-full rounded border p-1"
value={`${window.location.origin}/user/${me?.id}`}
readOnly
/>
</label>
</Container>
);
}

View File

@@ -0,0 +1,14 @@
import UserProfile from "@/components/UserProfile";
import { JazzAccount } from "@/schema";
import { ID } from "jazz-tools";
import { Container } from "@/components/Container";
export default function Page({ params }: { params: { slug: string } }) {
const { slug } = params;
return (
<Container className="py-8">
<UserProfile id={slug as ID<JazzAccount>} />
</Container>
);
}

View File

@@ -0,0 +1,134 @@
import { ProgressiveImg } from "jazz-react";
import { BookReview } from "@/schema";
import { ChangeEvent, useRef, useState } from "react";
import { Group, ImageDefinition } from "jazz-tools";
import { createImage } from "jazz-browser-media-images";
import { useAccount } from "@/components/JazzAndAuth";
import clsx from "clsx";
import PlusIcon from "@/components/icons/PlusIcon";
import { Button } from "@/components/Button";
const BookCoverContainer = ({
children,
className = "",
}: {
children: React.ReactNode;
className?: string;
}) => {
return (
<div className={clsx("h-[240px] lg:h-[260px]", className)}>{children}</div>
);
};
const MockCover = ({ bookReview }: { bookReview: BookReview }) => {
return (
<div className="flex h-full flex-col items-center justify-center gap-3 rounded-l-sm rounded-r-md bg-gray-100 px-3 text-center shadow-lg">
<p className="font-medium">{bookReview.title}</p>
<p className="text-xs">{bookReview.author}</p>
</div>
);
};
export function BookCoverReadOnly({
bookReview,
className,
}: {
bookReview: BookReview;
className?: string;
}) {
if (bookReview.cover) {
return (
<BookCoverContainer className={className}>
<ProgressiveImg image={bookReview.cover}>
{({ src }) => (
<img
className="max-h-full max-w-full rounded-l-sm rounded-r-md shadow-lg"
src={src}
/>
)}
</ProgressiveImg>
</BookCoverContainer>
);
}
return (
<BookCoverContainer className={className}>
<MockCover bookReview={bookReview} />
</BookCoverContainer>
);
}
export function BookCoverInput({ bookReview }: { bookReview: BookReview }) {
const { me } = useAccount();
const inputRef = useRef<HTMLInputElement>(null);
const onImageChange = (event: ChangeEvent<HTMLInputElement>) => {
if (!me?.profile) return;
const file = event.currentTarget.files?.[0];
if (file) {
createImage(file, { owner: me.profile._owner }).then(image => {
bookReview.cover = image;
});
}
};
const onUploadClick = () => {
inputRef.current?.click();
};
const remove = () => {
bookReview.cover = null;
};
if (bookReview.cover) {
return (
<div className="group relative inline-block">
<BookCoverReadOnly
className="transition-opacity group-hover:opacity-40"
bookReview={bookReview}
/>
<div className="absolute left-0 top-0 hidden h-full w-full items-center justify-center rounded-l-sm rounded-r-md group-hover:flex">
<Button
variant="tertiary"
type="button"
className="shadow"
onClick={remove}
>
Remove
</Button>
</div>
</div>
);
}
return (
<BookCoverContainer className="flex w-[180px] flex-col justify-center rounded-l-sm rounded-r-md bg-gray-100 p-3 shadow-lg">
<button
className="flex h-full w-full flex-col items-center justify-center gap-3 text-gray-500 transition-colors hover:text-gray-600"
type="button"
onClick={onUploadClick}
>
<PlusIcon className="h-10 w-10" />
Upload book cover
</button>
<label className="sr-only">
Cover
<input ref={inputRef} type="file" onChange={onImageChange} />
</label>
</BookCoverContainer>
);
}
export function BookCover({
bookReview,
readOnly,
}: {
bookReview: BookReview;
readOnly?: boolean;
}) {
if (readOnly) return <BookCoverReadOnly bookReview={bookReview} />;
return <BookCoverInput bookReview={bookReview} />;
}

View File

@@ -0,0 +1,30 @@
import { BookReview } from "@/schema";
import Rating from "@/components/Rating";
import { Group } from "jazz-tools";
import RatingInput from "@/components/RatingInput";
import { BookCover } from "@/components/BookCover";
export function BookReviewHeader({ bookReview }: { bookReview: BookReview }) {
const { title, author, rating, review, dateRead } = bookReview;
return (
<div className="grid gap-5">
<div>
<h1 className="mb-1 font-serif text-2xl font-bold md:mb-3 lg:text-4xl">
{title}
</h1>
<p className="text-gray-500">by {author}</p>
</div>
{bookReview._owner.castAs(Group).myRole() === "admin" ? (
<RatingInput
onChange={rating => (bookReview.rating = rating)}
value={rating}
/>
) : (
<Rating className="mx-auto text-2xl sm:mx-0" rating={rating} />
)}
</div>
);
}

View File

@@ -0,0 +1,35 @@
"use client";
import { BookReview } from "../schema";
import { ID } from "jazz-tools";
import { useCoState } from "@/components/JazzAndAuth";
import Link from "next/link";
import { BookCover, BookCoverReadOnly } from "@/components/BookCover";
import StarIcon from "@/components/icons/StarIcon";
export function BookReviewThumbnail({ id }: { id: ID<BookReview> }) {
const bookReview = useCoState(BookReview, id);
if (!bookReview) return <></>;
return (
<div className="inline-flex shrink-0 gap-4 rounded border p-4 sm:block sm:space-y-6 sm:border-0 sm:p-0 md:w-[200px]">
<Link href={`/book/${bookReview.id}`} className="sm:block sm:flex-1">
<BookCoverReadOnly bookReview={bookReview} />
</Link>
<div className="flex-1">
<Link href={`/book/${bookReview.id}`}>
<h2 className="mb-1 text-sm font-medium">{bookReview.title}</h2>
</Link>
<div className="mb-2 flex flex-col gap-2 text-sm text-gray-500 sm:flex-row sm:items-center">
<p>{bookReview.author}</p>
<div className="flex items-center gap-0.5 text-xs font-semibold leading-none">
<StarIcon className="-mt-px text-base text-yellow-400" />
{bookReview.rating}
</div>
</div>
</div>
</div>
);
}

View File

@@ -0,0 +1,65 @@
import Link from "next/link";
import type { ComponentProps } from "react";
import clsx from "clsx";
interface Props {
variant?: "primary" | "secondary" | "tertiary";
className?: string;
size?: "sm" | "md" | "lg";
}
interface AnchorProps
extends Props,
React.AnchorHTMLAttributes<HTMLAnchorElement> {
href: string;
}
type ButtonProps = ComponentProps<"button"> & Props;
export function Button(props: AnchorProps | ButtonProps) {
const {
className: customClassName = "",
variant = "primary",
children,
size = "md",
} = props;
const variantClassNames = {
base: "inline-flex gap-2 items-center justify-center rounded-full overflow-hidden transition-colors",
primary:
"bg-purple-300 font-medium text-purple-950 px-4 py-2 rounded-full hover:bg-purple-200",
secondary:
"rounded-full bg-slate-100 font-medium text-slate-600 hover:bg-slate-200",
tertiary: "rounded-full bg-white text-purple-950 font-medium",
};
const sizeClassNames = {
sm: "py-1.5 px-3 text-sm",
md: "py-2 px-5",
lg: "py-2 md:py-2.5 px-6 md:text-lg",
};
const className = clsx(
customClassName,
variantClassNames.base,
variantClassNames[variant],
sizeClassNames[size]
);
if (!!(props as AnchorProps).href) {
const anchorProps = props as AnchorProps;
return (
<Link href={anchorProps.href} className={className}>
{children}
</Link>
);
}
const buttonProps = props as ButtonProps;
return (
<button {...buttonProps} className={className}>
{children}
</button>
);
}

View File

@@ -0,0 +1,13 @@
import clsx from "clsx";
export function Container({
children,
className,
}: {
children: React.ReactNode;
className?: string;
}) {
return (
<div className={clsx("mx-auto max-w-4xl px-4", className)}>{children}</div>
);
}

View File

@@ -0,0 +1,29 @@
"use client";
import { createJazzReactApp, useDemoAuth, DemoAuthBasicUI } from "jazz-react";
import { JazzAccount } from "@/schema";
const Jazz = createJazzReactApp({
AccountSchema: JazzAccount,
});
export const { useAccount, useCoState } = Jazz;
export function JazzAndAuth({ children }: { children: React.ReactNode }) {
const [auth, authState] = useDemoAuth();
return (
<>
<Jazz.Provider
auth={auth}
// replace `you@example.com` with your email as a temporary API key
peer="wss://cloud.jazz.tools/?key=you@example.com"
>
{children}
</Jazz.Provider>
{authState.state !== "signedIn" && (
<DemoAuthBasicUI appName="Jazz Book Shelf" state={authState} />
)}
</>
);
}

View File

@@ -0,0 +1,26 @@
"use client";
import { useAccount } from "@/components/JazzAndAuth";
import Link from "next/link";
import { Container } from "@/components/Container";
import { Button } from "@/components/Button";
export function Nav() {
const { me, logOut } = useAccount();
return (
<nav className="border-b py-3">
<Container className="flex items-center justify-between gap-12 text-sm">
<Link href="/" className="font-serif text-lg font-semibold">
Jazz Book Shelf
</Link>
<div className="flex items-center gap-4 text-sm">
<p>{me?.profile?.name}</p>
<Button variant="secondary" onClick={logOut}>
Log out
</Button>
</div>
</Container>
</nav>
);
}

View File

@@ -0,0 +1,21 @@
import StarIcon from "@/components/icons/StarIcon";
import StarOutlineIcon from "@/components/icons/StarOutlineIcon";
export default function Rating({
rating,
className = "",
}: {
rating?: number;
className?: string;
}) {
const max = 5;
const outline = max - (rating || 0);
return (
<div className={`inline-flex gap-0.5 text-yellow-400 ${className}`}>
{rating ? [...Array(rating)].map((x, i) => <StarIcon key={i} />) : <></>}
{[...Array(outline)].map((x, i) => (
<StarOutlineIcon key={i} />
))}
</div>
);
}

View File

@@ -0,0 +1,47 @@
"use client";
import StarOutlineIcon from "@/components/icons/StarOutlineIcon";
import StarIcon from "@/components/icons/StarIcon";
import clsx from "clsx";
interface RatingInputProps {
value?: number;
onChange: (value: number) => void;
className?: string;
}
export default function RatingInput({
value = 0,
onChange,
className,
}: RatingInputProps) {
const handleChange = (newRating: number) => {
onChange(newRating > 5 ? 5 : newRating);
};
return (
<div className={clsx(className, "flex gap-0.5 text-2xl text-yellow-400")}>
{[...Array(5)].map((_, i) => {
return i < value ? (
<button
type="button"
className="focus:outline-none"
onClick={() => handleChange(i + 1)}
key={i}
>
<StarIcon />
</button>
) : (
<button
type="button"
className="focus:outline-none"
onClick={() => handleChange(i + 1)}
key={i}
>
<StarOutlineIcon />
</button>
);
})}
</div>
);
}

View File

@@ -0,0 +1,39 @@
"use client";
import { useCoState } from "@/components/JazzAndAuth";
import { Group, ID } from "jazz-tools";
import { JazzAccount, JazzProfile, ListOfBookReviews } from "@/schema";
import { BookReviewThumbnail } from "@/components/BookReviewThumbnail";
import { Button } from "@/components/Button";
export default function UserProfile({ id }: { id: ID<JazzAccount> }) {
const user = useCoState(JazzAccount, id);
const profile = useCoState(JazzProfile, user?.profile?.id);
const bookReviews = useCoState(
ListOfBookReviews,
user?.profile?._refs.bookReviews?.id,
[{}]
);
return (
<div className="grid gap-4">
<div className="flex items-center justify-between">
<h1 className="font-serif text-lg font-medium sm:text-2xl">
{profile?.name}&apos;s book shelf
</h1>
{profile?._owner.castAs(Group).myRole() === "admin" && (
<Button href="/add" variant="primary">
Add book
</Button>
)}
</div>
<div className="grid gap-4 md:grid-cols-4">
{bookReviews?.map(bookReview => (
<BookReviewThumbnail key={bookReview.id} id={bookReview.id} />
))}
</div>
</div>
);
}

View File

@@ -0,0 +1,20 @@
export default function PlusIcon({ className }: { className?: string }) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
strokeWidth={1.5}
stroke="currentColor"
className={className}
width="1em"
height="1em"
>
<path
strokeLinecap="round"
strokeLinejoin="round"
d="M12 4.5v15m7.5-7.5h-15"
/>
</svg>
);
}

View File

@@ -0,0 +1,18 @@
export default function StarIcon({ className }: { className?: string }) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
fill="currentColor"
className={className}
width="1em"
height="1em"
>
<path
fillRule="evenodd"
d="M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.006 5.404.434c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.434 2.082-5.005Z"
clipRule="evenodd"
/>
</svg>
);
}

View File

@@ -0,0 +1,20 @@
export default function StarOutlineIcon({ className }: { className?: string }) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
strokeWidth={1.5}
stroke="currentColor"
className={className}
width="1em"
height="1em"
>
<path
strokeLinecap="round"
strokeLinejoin="round"
d="M11.48 3.499a.562.562 0 0 1 1.04 0l2.125 5.111a.563.563 0 0 0 .475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 0 0-.182.557l1.285 5.385a.562.562 0 0 1-.84.61l-4.725-2.885a.562.562 0 0 0-.586 0L6.982 20.54a.562.562 0 0 1-.84-.61l1.285-5.386a.562.562 0 0 0-.182-.557l-4.204-3.602a.562.562 0 0 1 .321-.988l5.518-.442a.563.563 0 0 0 .475-.345L11.48 3.5Z"
/>
</svg>
);
}

View File

@@ -0,0 +1,37 @@
import {
CoMap,
co,
CoList,
Account,
Profile,
ImageDefinition,
Encoders,
} from "jazz-tools";
export class BookReview extends CoMap {
title = co.string;
author = co.string;
rating = co.number;
dateRead? = co.encoded(Encoders.Date);
review? = co.string;
cover? = co.ref(ImageDefinition, { optional: true });
}
export class ListOfBookReviews extends CoList.Of(co.ref(BookReview)) {}
/** The profile is an app-specific per-user public `CoMap`
* where you can store top-level objects for that user */
export class JazzProfile extends Profile {
bookReviews = co.ref(ListOfBookReviews);
}
export class JazzAccount extends Account {
profile = co.ref(JazzProfile);
/** The account migration is run on account creation and on every log-in.
* You can use it to set up the account root and any other initial CoValues you need.
*/
migrate(this: JazzAccount, creationProps?: { name: string }) {
super.migrate(creationProps);
}
}

View File

@@ -0,0 +1,25 @@
import type { Config } from "tailwindcss";
const colors = require("tailwindcss/colors");
const config: Config = {
content: [
"./src/pages/**/*.{js,ts,jsx,tsx,mdx}",
"./src/components/**/*.{js,ts,jsx,tsx,mdx}",
"./src/app/**/*.{js,ts,jsx,tsx,mdx}",
],
theme: {
extend: {
fontFamily: {
serif: ["var(--font-fraunces)"],
},
colors: {
purple: {
...colors.purple,
950: "#211f5a",
},
},
},
},
plugins: [],
};
export default config;

View File

@@ -1,7 +1,8 @@
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2023", "DOM", "DOM.Iterable"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
@@ -19,7 +20,7 @@
}
],
"paths": {
"@/*": ["./*"]
"@/*": ["./src/*"]
}
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],

1
examples/chat-clerk/.env Normal file
View File

@@ -0,0 +1 @@
VITE_CLERK_PUBLISHABLE_KEY=pk_test_ZXZpZGVudC1kYW5lLTg5LmNsZXJrLmFjY291bnRzLmRldiQ

View File

@@ -0,0 +1,13 @@
module.exports = {
root: true,
env: { browser: true, es2020: true },
extends: [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:react-hooks/recommended",
],
ignorePatterns: ["dist", ".eslintrc.cjs"],
parser: "@typescript-eslint/parser",
plugins: ["react-refresh"],
rules: {},
};

View File

@@ -23,5 +23,4 @@ dist-ssr
*.sln
*.sw?
.env
TwitAllTwitsCreatorCredentials.json
sync-db/

View File

@@ -0,0 +1,10 @@
{
"tabWidth": 2,
"useTabs": false,
"semi": true,
"singleQuote": false,
"trailingComma": "es5",
"bracketSpacing": true,
"arrowParens": "avoid",
"printWidth": 80
}

View File

@@ -0,0 +1,937 @@
# jazz-example-chat
## 0.0.87
### Patch Changes
- jazz-react@0.8.7
- jazz-react-auth-clerk@0.8.7
## 0.0.86
### Patch Changes
- jazz-react@0.8.6
- jazz-react-auth-clerk@0.8.6
## 0.0.85
### Patch Changes
- Updated dependencies [c3f4e6b]
- Updated dependencies [d9152ed]
- jazz-tools@0.8.5
- cojson@0.8.5
- jazz-react@0.8.5
- jazz-react-auth-clerk@0.8.5
## 0.0.84
### Patch Changes
- Updated dependencies
- hash-slash@0.2.1
## 0.0.83
### Patch Changes
- Updated dependencies
- cojson@0.8.3
- jazz-react@0.8.3
- jazz-react-auth-clerk@0.8.3
- jazz-tools@0.8.3
## 0.0.82
### Patch Changes
- Updated dependencies [a075f90]
- jazz-tools@0.8.2
- jazz-react@0.8.2
- jazz-react-auth-clerk@0.8.2
## 0.0.81
### Patch Changes
- Updated dependencies
- jazz-tools@0.8.1
- jazz-react@0.8.1
- jazz-react-auth-clerk@0.8.1
## 0.0.82
### Patch Changes
- Updated dependencies [6a147c2]
- Updated dependencies [ad40b88]
- Updated dependencies [23369dc]
- Updated dependencies [c2b62a0]
- Updated dependencies [1a979b6]
- Updated dependencies [bcec3be]
- Updated dependencies [6ce2051]
- cojson@0.8.0
- jazz-tools@0.8.0
- jazz-react@0.8.0
## 0.0.82-guest-auth.6
### Patch Changes
- Updated dependencies
- jazz-react@0.7.35-guest-auth.6
- jazz-tools@0.7.35-guest-auth.6
## 0.0.82
### Patch Changes
- Updated dependencies [49a8b54]
- Updated dependencies [35bbcd9]
- Updated dependencies [6f80282]
- Updated dependencies [35bbcd9]
- Updated dependencies [cac2ec9]
- Updated dependencies [f350e90]
- jazz-tools@0.7.35
- cojson@0.7.35
- jazz-react@0.7.35
## 0.0.81
### Patch Changes
- Updated dependencies [5d91f9f]
- Updated dependencies [5094e6d]
- Updated dependencies [b09589b]
- Updated dependencies [2c3a40c]
- Updated dependencies [4e16575]
- Updated dependencies [ea882ab]
- cojson@0.7.34
- jazz-react@0.7.34
- jazz-tools@0.7.34
## 0.0.81-neverthrow.6
### Patch Changes
- Updated dependencies
- cojson@0.7.34-neverthrow.8
- jazz-react@0.7.34-neverthrow.8
- jazz-tools@0.7.34-neverthrow.8
## 0.0.81-neverthrow.5
### Patch Changes
- Updated dependencies
- cojson@0.7.34-neverthrow.7
- jazz-react@0.7.34-neverthrow.7
- jazz-tools@0.7.34-neverthrow.7
## 0.0.81-neverthrow.4
### Patch Changes
- Updated dependencies
- cojson@0.7.34-neverthrow.4
- jazz-react@0.7.34-neverthrow.4
- jazz-tools@0.7.34-neverthrow.4
## 0.0.81-neverthrow.3
### Patch Changes
- Updated dependencies
- cojson@0.7.34-neverthrow.3
- jazz-react@0.7.34-neverthrow.3
- jazz-tools@0.7.34-neverthrow.3
## 0.0.81-neverthrow.2
### Patch Changes
- jazz-react@0.7.34-neverthrow.2
## 0.0.81-neverthrow.1
### Patch Changes
- Updated dependencies
- cojson@0.7.34-neverthrow.1
- jazz-react@0.7.34-neverthrow.1
- jazz-tools@0.7.34-neverthrow.1
## 0.0.81-neverthrow.0
### Patch Changes
- Updated dependencies
- cojson@0.7.34-neverthrow.0
- jazz-react@0.7.34-neverthrow.0
- jazz-tools@0.7.34-neverthrow.0
## 0.0.80
### Patch Changes
- Updated dependencies [b297c93]
- Updated dependencies [3bf5127]
- Updated dependencies [a8b74ff]
- Updated dependencies [db53161]
- cojson@0.7.33
- jazz-react@0.7.33
- jazz-tools@0.7.33
## 0.0.80-hotfixes.5
### Patch Changes
- Updated dependencies
- cojson@0.7.33-hotfixes.5
- jazz-react@0.7.33-hotfixes.5
- jazz-tools@0.7.33-hotfixes.5
## 0.0.80-hotfixes.4
### Patch Changes
- Updated dependencies
- cojson@0.7.33-hotfixes.4
- jazz-react@0.7.33-hotfixes.4
- jazz-tools@0.7.33-hotfixes.4
## 0.0.80-hotfixes.3
### Patch Changes
- Updated dependencies
- cojson@0.7.33-hotfixes.3
- jazz-react@0.7.33-hotfixes.3
- jazz-tools@0.7.33-hotfixes.3
## 0.0.80-hotfixes.2
### Patch Changes
- jazz-react@0.7.33-hotfixes.2
## 0.0.80-hotfixes.1
### Patch Changes
- jazz-react@0.7.33-hotfixes.1
## 0.0.80-hotfixes.0
### Patch Changes
- Updated dependencies
- cojson@0.7.33-hotfixes.0
- jazz-react@0.7.33-hotfixes.0
- jazz-tools@0.7.33-hotfixes.0
## 0.0.79
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.32
- jazz-react@0.7.32
## 0.0.78
### Patch Changes
- Updated dependencies
- cojson@0.7.31
- jazz-react@0.7.31
- jazz-tools@0.7.31
## 0.0.77
### Patch Changes
- jazz-react@0.7.30
## 0.0.76
### Patch Changes
- Updated dependencies
- cojson@0.7.29
- jazz-react@0.7.29
- jazz-tools@0.7.29
## 0.0.75
### Patch Changes
- Updated dependencies
- cojson@0.7.28
- jazz-react@0.7.28
- jazz-tools@0.7.28
## 0.0.74
### Patch Changes
- jazz-react@0.7.27
## 0.0.73
### Patch Changes
- Updated dependencies
- cojson@0.7.26
- jazz-react@0.7.26
- jazz-tools@0.7.26
## 0.0.72
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.25
- jazz-react@0.7.25
## 0.0.71
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.24
- jazz-react@0.7.24
## 0.0.70
### Patch Changes
- Updated dependencies
- cojson@0.7.23
- jazz-react@0.7.23
- jazz-tools@0.7.23
## 0.0.69
### Patch Changes
- jazz-react@0.7.22
## 0.0.68
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.21
- jazz-react@0.7.21
## 0.0.67
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.20
- jazz-react@0.7.20
## 0.0.66
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.19
- jazz-react@0.7.19
## 0.0.65
### Patch Changes
- Updated dependencies
- cojson@0.7.18
- jazz-react@0.7.18
- jazz-tools@0.7.18
## 0.0.64
### Patch Changes
- Updated dependencies
- cojson@0.7.17
- jazz-react@0.7.17
- jazz-tools@0.7.17
## 0.0.63
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.16
- jazz-react@0.7.16
## 0.0.62
### Patch Changes
- Updated dependencies
- jazz-react@0.7.15
## 0.0.61
### Patch Changes
- Updated dependencies
- cojson@0.7.14
- jazz-tools@0.7.14
- jazz-react@0.7.14
## 0.0.60
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.13
- jazz-react@0.7.13
## 0.0.59
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.12
- jazz-react@0.7.12
## 0.0.58
### Patch Changes
- Updated dependencies
- cojson@0.7.11
- jazz-react@0.7.11
- jazz-tools@0.7.11
## 0.0.57
### Patch Changes
- Updated dependencies
- cojson@0.7.10
- jazz-react@0.7.10
- jazz-tools@0.7.10
## 0.0.56
### Patch Changes
- Updated dependencies
- cojson@0.7.9
- jazz-react@0.7.9
- jazz-tools@0.7.9
## 0.0.55
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.8
- jazz-react@0.7.8
## 0.0.54
### Patch Changes
- Updated dependencies [9fdc91c]
- jazz-react@0.7.7
## 0.0.53
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.6
- jazz-react@0.7.6
## 0.0.52
### Patch Changes
- Updated dependencies
- jazz-react@0.7.5
## 0.0.51
### Patch Changes
- Updated dependencies
- jazz-react@0.7.4
## 0.0.50
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.3
- jazz-react@0.7.3
## 0.0.49
### Patch Changes
- Updated dependencies
- jazz-react@0.7.2
## 0.0.48
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.1
- jazz-react@0.7.1
## 0.0.47
### Patch Changes
- Updated dependencies [8636319]
- Updated dependencies [1a35307]
- Updated dependencies [8636319]
- Updated dependencies [1a35307]
- Updated dependencies [96c494f]
- Updated dependencies [59c18c3]
- Updated dependencies [19f52b7]
- Updated dependencies [8636319]
- Updated dependencies [1a35307]
- Updated dependencies [d8fe2b1]
- Updated dependencies [19004b4]
- Updated dependencies [a78f168]
- Updated dependencies [1200aae]
- Updated dependencies [60d5ca2]
- Updated dependencies [52675c9]
- Updated dependencies [129e2c1]
- Updated dependencies [6d49e9b]
- Updated dependencies [1cfa279]
- Updated dependencies [704af7d]
- Updated dependencies [e97f730]
- Updated dependencies [1a35307]
- Updated dependencies [460478f]
- Updated dependencies [6b0418f]
- Updated dependencies [e299c3e]
- Updated dependencies [ed5643a]
- Updated dependencies [bde684f]
- Updated dependencies [bf0f8ec]
- Updated dependencies [c4151fc]
- Updated dependencies [63374cc]
- Updated dependencies [8636319]
- Updated dependencies [01ac646]
- Updated dependencies [a5e68a4]
- Updated dependencies [8636319]
- Updated dependencies [952982e]
- Updated dependencies [1a35307]
- Updated dependencies [5fa277c]
- Updated dependencies [60d5ca2]
- Updated dependencies [21771c4]
- Updated dependencies [77c2b56]
- Updated dependencies [63374cc]
- Updated dependencies [d2e03ff]
- Updated dependencies [354bdcd]
- Updated dependencies [ece35b3]
- Updated dependencies [60d5ca2]
- Updated dependencies [69ac514]
- Updated dependencies [f8a5c46]
- Updated dependencies [f0f6f1b]
- Updated dependencies [e5eed5b]
- Updated dependencies [1a44f87]
- Updated dependencies [627d895]
- Updated dependencies [1200aae]
- Updated dependencies [63374cc]
- Updated dependencies [ece35b3]
- Updated dependencies [38d4410]
- Updated dependencies [85d2b62]
- Updated dependencies [fd86c11]
- Updated dependencies [52675c9]
- jazz-tools@0.7.0
- cojson@0.7.0
- jazz-react@0.7.0
- hash-slash@0.2.0
## 0.0.47-alpha.42
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.0-alpha.42
- cojson@0.7.0-alpha.42
- jazz-react@0.7.0-alpha.42
## 0.0.47-alpha.41
### Patch Changes
- jazz-tools@0.7.0-alpha.41
- jazz-react@0.7.0-alpha.41
## 0.0.47-alpha.40
### Patch Changes
- Updated dependencies
- jazz-react@0.7.0-alpha.40
## 0.0.47-alpha.39
### Patch Changes
- Updated dependencies
- cojson@0.7.0-alpha.39
- jazz-react@0.7.0-alpha.39
- jazz-tools@0.7.0-alpha.39
## 0.0.47-alpha.38
### Patch Changes
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Updated dependencies
- jazz-tools@0.7.0-alpha.38
- jazz-react@0.7.0-alpha.38
- cojson@0.7.0-alpha.38
## 0.0.47-alpha.37
### Patch Changes
- Updated dependencies
- jazz-react@0.7.0-alpha.37
- cojson@0.7.0-alpha.37
- jazz-tools@0.7.0-alpha.37
## 0.0.47-alpha.36
### Patch Changes
- Updated dependencies [1a35307]
- Updated dependencies [1a35307]
- Updated dependencies [1a35307]
- Updated dependencies [1a35307]
- Updated dependencies [6b0418f]
- Updated dependencies [1a35307]
- cojson@0.7.0-alpha.36
- jazz-tools@0.7.0-alpha.36
- jazz-react@0.7.0-alpha.36
## 0.0.47-alpha.35
### Patch Changes
- Updated dependencies
- Updated dependencies
- cojson@0.7.0-alpha.35
- jazz-tools@0.7.0-alpha.35
- jazz-react@0.7.0-alpha.35
## 0.0.47-alpha.34
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.0-alpha.34
- jazz-react@0.7.0-alpha.34
## 0.0.47-alpha.33
### Patch Changes
- Updated dependencies
- jazz-react@0.7.0-alpha.33
## 0.0.47-alpha.32
### Patch Changes
- Updated dependencies
- Updated dependencies
- Updated dependencies
- hash-slash@0.2.0-alpha.3
- jazz-tools@0.7.0-alpha.32
- jazz-react@0.7.0-alpha.32
## 0.0.47-alpha.31
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.0-alpha.31
- jazz-react@0.7.0-alpha.31
## 0.0.47-alpha.30
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.0-alpha.30
- jazz-react@0.7.0-alpha.30
## 0.0.47-alpha.29
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.0-alpha.29
- cojson@0.7.0-alpha.29
- jazz-react@0.7.0-alpha.29
## 0.0.47-alpha.28
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.0-alpha.28
- cojson@0.7.0-alpha.28
- jazz-react@0.7.0-alpha.28
## 0.0.47-alpha.27
### Patch Changes
- Updated dependencies
- Updated dependencies
- jazz-tools@0.7.0-alpha.27
- cojson@0.7.0-alpha.27
- jazz-react@0.7.0-alpha.27
## 0.0.47-alpha.26
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.0-alpha.26
- jazz-react@0.7.0-alpha.26
## 0.0.47-alpha.25
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.0-alpha.25
- jazz-react@0.7.0-alpha.25
## 0.0.47-alpha.24
### Patch Changes
- Updated dependencies
- Updated dependencies
- Updated dependencies
- jazz-tools@0.7.0-alpha.24
- cojson@0.7.0-alpha.24
- jazz-react@0.7.0-alpha.24
## 0.0.47-alpha.23
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.0-alpha.23
- jazz-react@0.7.0-alpha.23
## 0.0.47-alpha.22
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.0-alpha.22
- jazz-react@0.7.0-alpha.22
## 0.0.47-alpha.21
### Patch Changes
- Updated dependencies
- jazz-react@0.7.0-alpha.21
- jazz-tools@0.7.0-alpha.21
## 0.0.47-alpha.20
### Patch Changes
- Updated dependencies
- Updated dependencies
- jazz-react@0.7.0-alpha.20
- jazz-tools@0.7.0-alpha.20
## 0.0.47-alpha.19
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.0-alpha.19
- jazz-react@0.7.0-alpha.19
## 0.0.47-alpha.18
### Patch Changes
- jazz-react@0.7.0-alpha.18
## 0.0.47-alpha.17
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.0-alpha.17
- jazz-react@0.7.0-alpha.17
## 0.0.47-alpha.16
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.0-alpha.16
- jazz-react@0.7.0-alpha.16
## 0.0.47-alpha.15
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.0-alpha.15
- jazz-react@0.7.0-alpha.15
## 0.0.47-alpha.14
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.0-alpha.14
- jazz-react@0.7.0-alpha.14
## 0.0.47-alpha.13
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.0-alpha.13
- jazz-react@0.7.0-alpha.13
## 0.0.47-alpha.12
### Patch Changes
- Updated dependencies
- jazz-react@0.7.0-alpha.12
- jazz-tools@0.7.0-alpha.12
## 0.0.47-alpha.11
### Patch Changes
- Updated dependencies
- jazz-react@0.7.0-alpha.11
- jazz-tools@0.7.0-alpha.11
- cojson@0.7.0-alpha.11
## 0.0.47-alpha.10
### Patch Changes
- Updated dependencies
- jazz-react@0.7.0-alpha.10
- jazz-tools@0.7.0-alpha.10
- cojson@0.7.0-alpha.10
## 0.0.47-alpha.9
### Patch Changes
- Updated dependencies
- jazz-react@0.7.0-alpha.9
- jazz-tools@0.7.0-alpha.9
## 0.0.47-alpha.8
### Patch Changes
- Updated dependencies
- jazz-react@0.7.0-alpha.8
- jazz-tools@0.7.0-alpha.8
## 0.0.47-alpha.7
### Patch Changes
- Updated dependencies
- jazz-react@0.7.0-alpha.7
- jazz-tools@0.7.0-alpha.7
- cojson@0.7.0-alpha.7
## 0.0.47-alpha.6
### Patch Changes
- Updated dependencies
- jazz-react@0.7.0-alpha.6
- jazz-tools@0.7.0-alpha.6
## 0.0.47-alpha.5
### Patch Changes
- Updated dependencies
- jazz-react@0.7.0-alpha.5
- jazz-tools@0.7.0-alpha.5
- cojson@0.7.0-alpha.5
## 0.0.47-alpha.4
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.0-alpha.4
- jazz-react@0.7.0-alpha.4
## 0.0.47-alpha.3
### Patch Changes
- Updated dependencies
- jazz-tools@0.7.0-alpha.3
- jazz-react@0.7.0-alpha.3
## 0.0.47-alpha.2
### Patch Changes
- Updated dependencies
- hash-slash@0.2.0-alpha.2
- jazz-react@0.7.0-alpha.2
- jazz-tools@0.7.0-alpha.2
## 0.0.47-alpha.1
### Patch Changes
- Updated dependencies
- hash-slash@0.2.0-alpha.1
- jazz-react@0.7.0-alpha.1
- jazz-tools@0.7.0-alpha.1
- cojson@0.7.0-alpha.1
## 0.0.47-alpha.0
### Patch Changes
- Updated dependencies
- hash-slash@0.2.0-alpha.0
- jazz-react@0.7.0-alpha.0
- jazz-tools@0.7.0-alpha.0
- cojson@0.7.0-alpha.0
## 0.0.46
### Patch Changes
- Updated dependencies
- jazz-react@0.5.0
- jazz-react-auth-local@0.4.16

View File

@@ -0,0 +1,42 @@
# Jazz Chat Example (with Clerk auth)
Live version: [https://chat-clerk-demo.jazz.tools](https://chat-clerk-demo.jazz.tools)
## Installing & running the example locally
(this requires `pnpm` to be installed, see [https://pnpm.io/installation](https://pnpm.io/installation))
Start by checking out `jazz`
```bash
git clone https://github.com/gardencmp/jazz.git
cd jazz/examples/chat-clerk
pnpm pack --pack-destination /tmp
mkdir -p ~/jazz-examples/chat-clerk # or any other directory
tar -xf /tmp/jazz-example-chat-* --strip-components 1 -C ~/jazz-examples/chat-clerk
cd ~/jazz-examples/chat-clerk
```
This ensures that you have the example app without git history and independent of the Jazz multi-package monorepo.
Install dependencies:
```bash
pnpm install
```
Start the dev server:
```bash
pnpm dev
```
## Questions / problems / feedback
If you have feedback, let us know on [Discord](https://discord.gg/utDMjHYg42) or open an issue or PR to fix something that seems wrong.
## Configuration: sync server
By default, the example app uses [Jazz Cloud](https://jazz.tools/cloud) (`wss://cloud.jazz.tools`) - so cross-device use, invites and collaboration should just work.
You can also run a local sync server by running `npx jazz-run sync` and adding the query param `?sync=ws://localhost:4200` to the URL of the example app (for example: `http://localhost:5173/?peer=ws://localhost:4200`), or by setting the `sync` parameter of the `<Jazz.Provider>` provider component in [./src/2_main.tsx](./src/2_main.tsx).

View File

@@ -3,11 +3,12 @@
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/png" href="/jazz-logo.png" />
<link rel="stylesheet" href="/src/index.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Jazz File Drop Example</title>
<title>Jazz Chat Example</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/2_main.tsx"></script>
<script type="module" src="/src/app.tsx"></script>
</body>
</html>

View File

@@ -1,4 +1,4 @@
job "twit$BRANCH_SUFFIX" {
job "chat$BRANCH_SUFFIX" {
region = "global"
datacenters = ["*"]
@@ -14,7 +14,7 @@ job "twit$BRANCH_SUFFIX" {
constraint {
attribute = "${node.class}"
operator = "="
value = "mesh"
value = "cloud"
}
spread {
@@ -41,7 +41,7 @@ job "twit$BRANCH_SUFFIX" {
service {
tags = ["public"]
name = "twit$BRANCH_SUFFIX"
name = "chat$BRANCH_SUFFIX"
port = "http"
provider = "consul"
}

View File

@@ -1,51 +1,56 @@
{
"name": "jazz-example-twit",
"name": "jazz-example-chat-clerk",
"private": true,
"version": "0.1.0",
"version": "0.0.87",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
"format": "echo 'chat example is codegolfed'",
"preview": "vite preview"
},
"lint-staged": {
"*.{ts,tsx}": "eslint --fix",
"*.{js,jsx,mdx,json}": "prettier --write"
},
"dependencies": {
"@clerk/clerk-react": "^5.4.1",
"@radix-ui/react-checkbox": "^1.0.4",
"@radix-ui/react-popover": "^1.0.7",
"@radix-ui/react-slot": "^1.0.2",
"@radix-ui/react-toast": "^1.1.4",
"@types/qrcode": "^1.5.1",
"class-variance-authority": "^0.7.0",
"clsx": "^2.0.0",
"javascript-time-ago": "^2.5.9",
"jazz-browser-media-images": "^0.5.0",
"jazz-react": "^0.5.0",
"jazz-react-auth-local": "^0.4.16",
"cojson": "workspace:0.8.5",
"hash-slash": "workspace:0.2.1",
"jazz-react": "workspace:0.8.7",
"jazz-react-auth-clerk": "workspace:0.8.7",
"jazz-tools": "workspace:0.8.5",
"lucide-react": "^0.274.0",
"qrcode": "^1.5.3",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-intersection-observer": "^9.5.2",
"react-router": "^6.16.0",
"react-router-dom": "^6.16.0",
"react-time-ago": "^7.2.1",
"react-use": "^17.4.0",
"tailwind-merge": "^1.14.0",
"tailwindcss-animate": "^1.0.7",
"uniqolor": "^1.1.0"
},
"devDependencies": {
"@types/react": "^18.2.15",
"@types/qrcode": "^1.5.1",
"@types/react": "^18.2.19",
"@types/react-dom": "^18.2.7",
"@typescript-eslint/eslint-plugin": "^6.0.0",
"@typescript-eslint/parser": "^6.0.0",
"@typescript-eslint/eslint-plugin": "^6.2.1",
"@typescript-eslint/parser": "^6.2.1",
"@vitejs/plugin-react-swc": "^3.3.2",
"autoprefixer": "^10.4.14",
"eslint": "^8.45.0",
"eslint": "^8.46.0",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-refresh": "^0.4.3",
"postcss": "^8.4.27",
"tailwindcss": "^3.3.3",
"typescript": "^5.0.2",
"vite": "^4.4.5"
"tailwindcss": "3.3.2",
"typescript": "^5.3.3",
"vite": "^5.0.10"
}
}

View File

@@ -0,0 +1,6 @@
export default {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};

View File

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

View File

@@ -0,0 +1,31 @@
import { Group, ID } from "jazz-tools";
import { useIframeHashRouter } from "hash-slash";
import { useAccount } from "./main.tsx";
import { Chat } from "./schema.ts";
import { ChatScreen } from "./chatScreen.tsx";
import { AppContainer, TopBar } from "./ui.tsx";
export function App() {
const { me, logOut } = useAccount();
const router = useIframeHashRouter();
const createChat = () => {
if (!me) return;
const group = Group.create({ owner: me });
group.addMember("everyone", "writer");
const chat = Chat.create([], { owner: group });
router.navigate("/#/chat/" + chat.id);
};
return (
<AppContainer>
<TopBar>
{me?.profile?.name} · <button onClick={logOut}>Log out</button>
</TopBar>
{router.route({
"/": () => createChat() as never,
"/chat/:id": id => <ChatScreen chatID={id as ID<Chat>} />,
})}
</AppContainer>
);
}

View File

@@ -0,0 +1,43 @@
import { ID } from "jazz-tools";
import { Chat, Message } from "./schema.ts";
import { useCoState } from "./main.tsx";
import {
BubbleBody,
BubbleContainer,
BubbleInfo,
ChatContainer,
ChatInput,
EmptyChatMessage,
} from "./ui.tsx";
export function ChatScreen(props: { chatID: ID<Chat> }) {
const chat = useCoState(Chat, props.chatID, [{}]);
return chat ? (
<ChatContainer>
{chat.length > 0 ? (
chat.map(msg => <ChatBubble msg={msg} key={msg.id} />)
) : (
<EmptyChatMessage />
)}
<ChatInput
onSubmit={text => {
chat.push(Message.create({ text }, { owner: chat._owner }));
}}
/>
</ChatContainer>
) : (
<div>Loading...</div>
);
}
function ChatBubble(props: { msg: Message }) {
const lastEdit = props.msg._edits.text;
return (
<BubbleContainer fromMe={lastEdit.by?.isMe}>
<BubbleBody>{props.msg.text}</BubbleBody>
<BubbleInfo by={lastEdit.by?.profile?.name} madeAt={lastEdit.madeAt} />
</BubbleContainer>
);
}

View File

@@ -1,7 +1,7 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
:root {
--background: 0 0% 100%;
@@ -9,68 +9,70 @@
--card: 0 0% 100%;
--card-foreground: 20 14.3% 4.1%;
--popover: 0 0% 100%;
--popover-foreground: 20 14.3% 4.1%;
--primary: 24 9.8% 10%;
--primary-foreground: 60 9.1% 97.8%;
--secondary: 60 4.8% 95.9%;
--secondary-foreground: 24 9.8% 10%;
--muted: 60 4.8% 95.9%;
--muted-foreground: 25 5.3% 44.7%;
--accent: 60 4.8% 95.9%;
--accent-foreground: 24 9.8% 10%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 60 9.1% 97.8%;
--border: 20 5.9% 90%;
--input: 20 5.9% 90%;
--ring: 20 14.3% 4.1%;
--radius: 0.5rem;
}
.dark {
--background: 20 14.3% 4.1%;
--foreground: 60 9.1% 97.8%;
--card: 20 14.3% 4.1%;
--card-foreground: 60 9.1% 97.8%;
--popover: 20 14.3% 4.1%;
--popover-foreground: 60 9.1% 97.8%;
--primary: 60 9.1% 97.8%;
--primary-foreground: 24 9.8% 10%;
--secondary: 12 6.5% 15.1%;
--secondary-foreground: 60 9.1% 97.8%;
--muted: 12 6.5% 15.1%;
--muted-foreground: 24 5.4% 63.9%;
--accent: 12 6.5% 15.1%;
--accent-foreground: 60 9.1% 97.8%;
--destructive: 0 62.8% 30.6%;
--destructive-foreground: 60 9.1% 97.8%;
--border: 12 6.5% 15.1%;
--input: 12 6.5% 15.1%;
--ring: 24 5.7% 82.9%;
}
}
@layer base {
* {
@apply border-border;
}
body {
@apply bg-background text-foreground;
margin: 0;
padding: 0;
}
}
}

View File

@@ -0,0 +1,46 @@
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import { createJazzReactApp } from "jazz-react";
import { App } from "./app.tsx";
import { ClerkProvider, SignInButton, useClerk } from "@clerk/clerk-react";
import { useJazzClerkAuth } from "jazz-react-auth-clerk";
const Jazz = createJazzReactApp();
export const { useAccount, useCoState } = Jazz;
function JazzAndAuth({ children }: { children: React.ReactNode }) {
const clerk = useClerk();
const [auth, state] = useJazzClerkAuth(clerk);
return (
<>
{state.errors.map(error => (
<div key={error}>{error}</div>
))}
{auth ? (
<Jazz.Provider
auth={auth}
peer="wss://cloud.jazz.tools/?key=chat-example-jazz-clerk@gcmp.io"
>
{children}
</Jazz.Provider>
) : (
<SignInButton />
)}
</>
);
}
createRoot(document.getElementById("root")!).render(
<StrictMode>
<ClerkProvider
publishableKey={import.meta.env.VITE_CLERK_PUBLISHABLE_KEY}
afterSignOutUrl="/"
>
<JazzAndAuth>
<App />
</JazzAndAuth>
</ClerkProvider>
</StrictMode>
);

View File

@@ -0,0 +1,7 @@
import { CoMap, CoList, co } from "jazz-tools";
export class Message extends CoMap {
text = co.string;
}
export class Chat extends CoList.Of(co.ref(Message)) {}

View File

@@ -0,0 +1,63 @@
export function AppContainer(props: { children: React.ReactNode }) {
return (
<div className="flex flex-col items-center justify-between w-screen h-screen p-2 dark:bg-black dark:text-white">
{props.children}
</div>
);
}
export function TopBar(props: { children: React.ReactNode }) {
return (
<div className="mb-5 px-2 py-1 text-sm self-end">{props.children}</div>
);
}
export function ChatContainer(props: { children: React.ReactNode }) {
return (
<div className="w-full max-w-xl h-full flex flex-col items-stretch">
{props.children}
</div>
);
}
export function EmptyChatMessage() {
return <div className="m-auto text-sm">(Empty chat)</div>;
}
export function BubbleContainer(props: {
children: React.ReactNode;
fromMe: boolean | undefined;
}) {
const align = props.fromMe ? "items-end" : "items-start";
return <div className={`${align} flex flex-col`}>{props.children}</div>;
}
export function BubbleBody(props: { children: React.ReactNode }) {
return (
<div className="rounded-xl bg-stone-100 dark:bg-stone-700 dark:text-white py-2 px-4 mt-2 min-w-[5rem]">
{props.children}
</div>
);
}
export function BubbleInfo(props: { by: string | undefined; madeAt: Date }) {
return (
<div className="text-xs text-neutral-500 ml-2">
{props.by} {props.madeAt.toLocaleTimeString()}
</div>
);
}
export function ChatInput(props: { onSubmit: (text: string) => void }) {
return (
<input
className="rounded p-2 border mt-auto dark:bg-black dark:text-white border-stone-300 dark:border-stone-700"
placeholder="Type a message and press Enter"
onKeyDown={({ key, currentTarget: input }) => {
if (key !== "Enter" || !input.value) return;
props.onSubmit(input.value);
input.value = "";
}}
/>
);
}

1
examples/chat-clerk/src/vite-env.d.ts vendored Normal file
View File

@@ -0,0 +1 @@
/// <reference types="vite/client" />

Some files were not shown because too many files have changed in this diff Show More