Compare commits
67 Commits
jazz-nodej
...
cojson-sto
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fe908b5300 | ||
|
|
1f99807971 | ||
|
|
47f54c4d81 | ||
|
|
814f65acaf | ||
|
|
78fd4c86a1 | ||
|
|
678f326bc1 | ||
|
|
ea33ad4864 | ||
|
|
57b6d5efb4 | ||
|
|
15929b121d | ||
|
|
eb4cef196c | ||
|
|
85703f9241 | ||
|
|
5bb12523ee | ||
|
|
190cb1efb2 | ||
|
|
46ab1f6db2 | ||
|
|
a44fc6fc6d | ||
|
|
2376a8d3b2 | ||
|
|
2c3ec2fea6 | ||
|
|
da6f6ec4d5 | ||
|
|
8c78b37bfb | ||
|
|
5f382309de | ||
|
|
aa7eb3cf2c | ||
|
|
9b41762e96 | ||
|
|
28be460286 | ||
|
|
df8af06814 | ||
|
|
2ef460fccf | ||
|
|
9660e2c03c | ||
|
|
908645e4b7 | ||
|
|
f3ca37ed5e | ||
|
|
a9d0fd14c4 | ||
|
|
c496f49bb0 | ||
|
|
b26666ab4c | ||
|
|
9088a349a0 | ||
|
|
54b12dcb7a | ||
|
|
71b9a5ce25 | ||
|
|
afb94ef043 | ||
|
|
7554dd9f88 | ||
|
|
7a3cfabb4c | ||
|
|
df7101a8ee | ||
|
|
f74b46ee2f | ||
|
|
9177579f53 | ||
|
|
f1c00903f9 | ||
|
|
1ca9299590 | ||
|
|
4f0fb6c27f | ||
|
|
34082ccaf5 | ||
|
|
a09c417d81 | ||
|
|
00a188c22f | ||
|
|
dc630b0807 | ||
|
|
484baabe22 | ||
|
|
f529bede7b | ||
|
|
6f637d21ab | ||
|
|
aeb96510da | ||
|
|
d53cc3676d | ||
|
|
81dedb6395 | ||
|
|
17cb04bfb1 | ||
|
|
a98b4e5d81 | ||
|
|
7eb7e2f656 | ||
|
|
80703ea1cc | ||
|
|
d46e0b9d0c | ||
|
|
430a9e252a | ||
|
|
6f519462df | ||
|
|
a0ae2811ce | ||
|
|
73e5a3548a | ||
|
|
c5da3a42a1 | ||
|
|
8ef14d4850 | ||
|
|
1a7b7942ad | ||
|
|
5f42c97184 | ||
|
|
2a2b474aa4 |
21
.github/workflows/playwright.yml
vendored
@@ -13,7 +13,20 @@ jobs:
|
|||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
project: ["tests/e2e", "examples/chat", "examples/clerk", "examples/betterauth", "examples/file-share-svelte", "examples/form", "examples/music-player", "examples/organization", "examples/pets", "starters/react-passkey-auth"]
|
project: [
|
||||||
|
"tests/e2e",
|
||||||
|
"examples/chat",
|
||||||
|
"examples/clerk",
|
||||||
|
"examples/betterauth",
|
||||||
|
"examples/file-share-svelte",
|
||||||
|
"examples/form",
|
||||||
|
"examples/inspector",
|
||||||
|
"examples/music-player",
|
||||||
|
"examples/organization",
|
||||||
|
"examples/pets",
|
||||||
|
"starters/react-passkey-auth",
|
||||||
|
"packages/jazz-svelte"
|
||||||
|
]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
@@ -24,7 +37,11 @@ jobs:
|
|||||||
uses: ./.github/actions/source-code/
|
uses: ./.github/actions/source-code/
|
||||||
|
|
||||||
- name: Pnpm Build
|
- name: Pnpm Build
|
||||||
run: pnpm turbo build
|
run: |
|
||||||
|
if [ -f .env.test ]; then
|
||||||
|
cp .env.test .env
|
||||||
|
fi
|
||||||
|
pnpm turbo build
|
||||||
working-directory: ./${{ matrix.project }}
|
working-directory: ./${{ matrix.project }}
|
||||||
|
|
||||||
- name: Install Playwright Browsers
|
- name: Install Playwright Browsers
|
||||||
|
|||||||
6
examples/betterauth/.gitignore
vendored
@@ -36,8 +36,10 @@ yarn-error.log*
|
|||||||
.pnpm-debug.log*
|
.pnpm-debug.log*
|
||||||
|
|
||||||
# env files (can opt-in for committing if needed)
|
# env files (can opt-in for committing if needed)
|
||||||
.env*
|
.env
|
||||||
!.env
|
.env.*
|
||||||
|
!.env.example
|
||||||
|
!.env.test
|
||||||
|
|
||||||
# vercel
|
# vercel
|
||||||
.vercel
|
.vercel
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "betterauth",
|
"name": "betterauth",
|
||||||
"version": "0.1.25",
|
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_ZXZpZGVudC1kYW5lLTg5LmNsZXJrLmFjY291bnRzLmRldiQ
|
|
||||||
1
examples/chat-rn-expo-clerk/.env.example
Normal file
@@ -0,0 +1 @@
|
|||||||
|
EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY=
|
||||||
6
examples/chat-rn-expo-clerk/.gitignore
vendored
@@ -15,3 +15,9 @@ web-build/
|
|||||||
|
|
||||||
ios
|
ios
|
||||||
android
|
android
|
||||||
|
|
||||||
|
# Env
|
||||||
|
.env
|
||||||
|
.env.*
|
||||||
|
!.env.example
|
||||||
|
!.env.test
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "chat-rn-expo-clerk",
|
"name": "chat-rn-expo-clerk",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"version": "1.0.145",
|
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "expo export -p ios",
|
"build": "expo export -p ios",
|
||||||
"start": "expo start",
|
"start": "expo start",
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "chat-rn-expo",
|
"name": "chat-rn-expo",
|
||||||
"version": "1.0.13",
|
|
||||||
"main": "index.ts",
|
"main": "index.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "expo prebuild",
|
"build": "expo prebuild",
|
||||||
|
|||||||
@@ -128,7 +128,11 @@ export default function ChatScreen() {
|
|||||||
}}
|
}}
|
||||||
testID="chat-id-input"
|
testID="chat-id-input"
|
||||||
/>
|
/>
|
||||||
<TouchableOpacity onPress={joinChat} style={styles.joinChatButton}>
|
<TouchableOpacity
|
||||||
|
testID="join-chat-button"
|
||||||
|
onPress={joinChat}
|
||||||
|
style={styles.joinChatButton}
|
||||||
|
>
|
||||||
<Text style={styles.newChatButtonText}>Join chat</Text>
|
<Text style={styles.newChatButtonText}>Join chat</Text>
|
||||||
</TouchableOpacity>
|
</TouchableOpacity>
|
||||||
</View>
|
</View>
|
||||||
|
|||||||
@@ -41,12 +41,17 @@ appId: tools.jazz.chatrnexpo
|
|||||||
# logout
|
# logout
|
||||||
- tapOn: "Logout"
|
- tapOn: "Logout"
|
||||||
- assertVisible: "Username"
|
- assertVisible: "Username"
|
||||||
- assertVisible: "Anonymous user"
|
|
||||||
|
|
||||||
|
- extendedWaitUntil:
|
||||||
|
visible: "Anonymous user"
|
||||||
|
timeout: 10000
|
||||||
# join chat
|
# join chat
|
||||||
|
|
||||||
|
## Commented because it fails on CI
|
||||||
# - tapOn:
|
# - tapOn:
|
||||||
# id: "chat-id-input"
|
# id: "chat-id-input"
|
||||||
# - inputText: "co_zFs6KFyhxPw4xtw83tcEMzeHUNv" # Use a static id because maestro doesn't have access to the system clipboard
|
# - inputText: "co_zFs6KFyhxPw4xtw83tcEMzeHUNv" # Use a static id because maestro doesn't have access to the system clipboard
|
||||||
# - tapOn: "Join chat"
|
# - tapOn:
|
||||||
|
# id: "join-chat-button"
|
||||||
# - assertVisible: "boorad"
|
# - assertVisible: "boorad"
|
||||||
# - assertVisible: "bro, low key, it do be like that tho"
|
# - assertVisible: "bro, low key, it do be like that tho"
|
||||||
|
|||||||
13
examples/chat-rn-expo/test/e2e/runLocal.sh
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# This script is necessary, because unlike ios, the android emulator action
|
||||||
|
# accepts a script, runs it as your tests, then terminates.
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# run the e2e tests
|
||||||
|
export PATH="$PATH":"$HOME/.maestro/bin"
|
||||||
|
export MAESTRO_DRIVER_STARTUP_TIMEOUT=300000 # setting to 5 mins 👀
|
||||||
|
export MAESTRO_CLI_NO_ANALYTICS=1
|
||||||
|
export MAESTRO_CLI_ANALYSIS_NOTIFICATION_DISABLED=true
|
||||||
|
maestro test test/e2e/flow.yml
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "chat-rn",
|
"name": "chat-rn",
|
||||||
"version": "1.0.140",
|
"private": true,
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"android": "react-native run-android",
|
"android": "react-native run-android",
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" href="./public/favicon.ico" type="image/png">
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Jazz Chat Vue Example</title>
|
<title>Jazz Chat Vue Example</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "chat-vue",
|
"name": "chat-vue",
|
||||||
"version": "0.0.120",
|
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<html lang="en" class="h-full">
|
<html lang="en" class="h-full">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" type="image/png" href="/jazz-logo.png" />
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
||||||
<link rel="stylesheet" href="/src/index.css" />
|
<link rel="stylesheet" href="/src/index.css" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Jazz Chat Example</title>
|
<title>Jazz Chat Example</title>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "jazz-example-chat",
|
"name": "jazz-example-chat",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.220",
|
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
1
examples/clerk/.env.example
Normal file
@@ -0,0 +1 @@
|
|||||||
|
VITE_CLERK_PUBLISHABLE_KEY=
|
||||||
6
examples/clerk/.gitignore
vendored
@@ -24,3 +24,9 @@ dist-ssr
|
|||||||
*.sw?
|
*.sw?
|
||||||
|
|
||||||
playwright-report
|
playwright-report
|
||||||
|
|
||||||
|
# Env
|
||||||
|
.env
|
||||||
|
.env.*
|
||||||
|
!.env.example
|
||||||
|
!.env.test
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Minimal Auth Clerk Example | Jazz</title>
|
<title>Minimal Auth Clerk Example | Jazz</title>
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "clerk",
|
"name": "clerk",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.119",
|
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
@@ -14,6 +13,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@clerk/clerk-react": "^5.4.1",
|
"@clerk/clerk-react": "^5.4.1",
|
||||||
|
"jazz-inspector": "workspace:*",
|
||||||
"jazz-react": "workspace:*",
|
"jazz-react": "workspace:*",
|
||||||
"jazz-react-auth-clerk": "workspace:*",
|
"jazz-react-auth-clerk": "workspace:*",
|
||||||
"jazz-tools": "workspace:*",
|
"jazz-tools": "workspace:*",
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
@@ -3,6 +3,7 @@ import { StrictMode } from "react";
|
|||||||
import { createRoot } from "react-dom/client";
|
import { createRoot } from "react-dom/client";
|
||||||
import App from "./App.tsx";
|
import App from "./App.tsx";
|
||||||
import "./index.css";
|
import "./index.css";
|
||||||
|
import { JazzInspector } from "jazz-inspector";
|
||||||
import { JazzProviderWithClerk } from "jazz-react-auth-clerk";
|
import { JazzProviderWithClerk } from "jazz-react-auth-clerk";
|
||||||
import { ReactNode } from "react";
|
import { ReactNode } from "react";
|
||||||
import { apiKey } from "./apiKey";
|
import { apiKey } from "./apiKey";
|
||||||
@@ -44,6 +45,7 @@ if (location.search.includes("expirationTest")) {
|
|||||||
<ClerkProvider publishableKey={PUBLISHABLE_KEY} afterSignOutUrl="/">
|
<ClerkProvider publishableKey={PUBLISHABLE_KEY} afterSignOutUrl="/">
|
||||||
<JazzProvider>
|
<JazzProvider>
|
||||||
<App />
|
<App />
|
||||||
|
<JazzInspector />
|
||||||
</JazzProvider>
|
</JazzProvider>
|
||||||
</ClerkProvider>
|
</ClerkProvider>
|
||||||
</StrictMode>,
|
</StrictMode>,
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "file-share-svelte",
|
"name": "file-share-svelte",
|
||||||
"version": "0.0.104",
|
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
|
<link rel="icon" type="image/png" href="%sveltekit.assets%/favicon.png" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
%sveltekit.head%
|
%sveltekit.head%
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -1,11 +1,3 @@
|
|||||||
<script lang="ts" module>
|
|
||||||
declare module 'jazz-svelte' {
|
|
||||||
interface Register {
|
|
||||||
Account: typeof FileShareAccount;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { JazzProvider } from 'jazz-svelte';
|
import { JazzProvider } from 'jazz-svelte';
|
||||||
import "jazz-inspector-element"
|
import "jazz-inspector-element"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<html lang="en" class="h-full">
|
<html lang="en" class="h-full">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" type="image/png" href="./public/favicon.ico" />
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Jazz | React + Demo Auth + Tailwind</title>
|
<title>Jazz | React + Demo Auth + Tailwind</title>
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "filestream",
|
"name": "filestream",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.59",
|
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html lang="en" class="h-full">
|
<html lang="en" class="h-full">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Jazz | Form example</title>
|
<title>Jazz | Form example</title>
|
||||||
<link rel="icon" type="image/png" href="./public/favicon.ico">
|
|
||||||
</head>
|
</head>
|
||||||
<body class="h-full flex flex-col bg-white text-stone-700 dark:text-stone-400 dark:bg-stone-925">
|
<body class="h-full flex flex-col bg-white text-stone-700 dark:text-stone-400 dark:bg-stone-925">
|
||||||
<div id="root" class="align-self-center flex-1"></div>
|
<div id="root" class="align-self-center flex-1"></div>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "form",
|
"name": "form",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.1.60",
|
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
@@ -12,6 +11,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"hash-slash": "workspace:*",
|
"hash-slash": "workspace:*",
|
||||||
|
"jazz-inspector": "workspace:*",
|
||||||
"jazz-react": "workspace:*",
|
"jazz-react": "workspace:*",
|
||||||
"jazz-tools": "workspace:*",
|
"jazz-tools": "workspace:*",
|
||||||
"react": "19.0.0",
|
"react": "19.0.0",
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { JazzInspector } from "jazz-inspector";
|
||||||
import { JazzProvider } from "jazz-react";
|
import { JazzProvider } from "jazz-react";
|
||||||
import { StrictMode } from "react";
|
import { StrictMode } from "react";
|
||||||
import { createRoot } from "react-dom/client";
|
import { createRoot } from "react-dom/client";
|
||||||
@@ -15,6 +16,7 @@ createRoot(document.getElementById("root")!).render(
|
|||||||
AccountSchema={JazzAccount}
|
AccountSchema={JazzAccount}
|
||||||
>
|
>
|
||||||
<App />
|
<App />
|
||||||
|
<JazzInspector />
|
||||||
</JazzProvider>
|
</JazzProvider>
|
||||||
</StrictMode>,
|
</StrictMode>,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Jazz | Image upload example</title>
|
<title>Jazz | Image upload example</title>
|
||||||
<link rel="icon" href="./public/favicon.ico" type="image/png">
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="root"></div>
|
<div id="root"></div>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "image-upload",
|
"name": "image-upload",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.116",
|
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
@@ -11,6 +10,7 @@
|
|||||||
"format-and-lint:fix": "biome check . --write"
|
"format-and-lint:fix": "biome check . --write"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"jazz-inspector": "workspace:*",
|
||||||
"jazz-react": "workspace:*",
|
"jazz-react": "workspace:*",
|
||||||
"jazz-tools": "workspace:*",
|
"jazz-tools": "workspace:*",
|
||||||
"react": "19.0.0",
|
"react": "19.0.0",
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { JazzInspector } from "jazz-inspector";
|
||||||
import { JazzProvider } from "jazz-react";
|
import { JazzProvider } from "jazz-react";
|
||||||
import { StrictMode } from "react";
|
import { StrictMode } from "react";
|
||||||
import { createRoot } from "react-dom/client";
|
import { createRoot } from "react-dom/client";
|
||||||
@@ -15,6 +16,7 @@ createRoot(document.getElementById("root")!).render(
|
|||||||
AccountSchema={JazzAccount}
|
AccountSchema={JazzAccount}
|
||||||
>
|
>
|
||||||
<App />
|
<App />
|
||||||
|
<JazzInspector />
|
||||||
</JazzProvider>
|
</JazzProvider>
|
||||||
</StrictMode>,
|
</StrictMode>,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" type="image/png" href="/jazz-logo.png" />
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
||||||
<link rel="stylesheet" href="/src/index.css" />
|
<link rel="stylesheet" href="/src/index.css" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Jazz Inspector</title>
|
<title>Jazz Inspector</title>
|
||||||
|
|||||||
@@ -1,29 +1,29 @@
|
|||||||
{
|
{
|
||||||
"name": "jazz-inspector-app",
|
"name": "jazz-inspector-app",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.169",
|
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
"build": "tsc && vite build",
|
"build": "tsc && vite build",
|
||||||
|
"test": "playwright test",
|
||||||
|
"test:headed": "playwright test --headed",
|
||||||
"format-and-lint": "biome check .",
|
"format-and-lint": "biome check .",
|
||||||
"format-and-lint:fix": "biome check . --write",
|
"format-and-lint:fix": "biome check . --write",
|
||||||
"preview": "vite preview"
|
"preview": "vite preview"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"jazz-inspector": "workspace:*",
|
"jazz-inspector": "workspace:*",
|
||||||
|
"jazz-tools": "workspace:*",
|
||||||
"clsx": "^2.0.0",
|
"clsx": "^2.0.0",
|
||||||
"cojson": "workspace:*",
|
"cojson": "workspace:*",
|
||||||
"cojson-transport-ws": "workspace:*",
|
"cojson-transport-ws": "workspace:*",
|
||||||
"hash-slash": "workspace:*",
|
"hash-slash": "workspace:*",
|
||||||
"lucide-react": "^0.274.0",
|
|
||||||
"react": "19.0.0",
|
"react": "19.0.0",
|
||||||
"react-dom": "19.0.0",
|
"react-dom": "19.0.0",
|
||||||
"react-router": "^6.16.0",
|
|
||||||
"react-router-dom": "^6.16.0",
|
|
||||||
"react-use": "^17.4.0"
|
"react-use": "^17.4.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@playwright/test": "^1.50.1",
|
||||||
"@types/react": "19.0.0",
|
"@types/react": "19.0.0",
|
||||||
"@types/react-dom": "19.0.0",
|
"@types/react-dom": "19.0.0",
|
||||||
"@vitejs/plugin-react-swc": "^3.10.1",
|
"@vitejs/plugin-react-swc": "^3.10.1",
|
||||||
|
|||||||
46
examples/inspector/playwright.config.ts
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
import { defineConfig, devices } from "@playwright/test";
|
||||||
|
import isCI from "is-ci";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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: "http://localhost:5173/",
|
||||||
|
|
||||||
|
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
|
||||||
|
trace: "on-first-retry",
|
||||||
|
permissions: ["clipboard-read", "clipboard-write"],
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Configure projects for major browsers */
|
||||||
|
projects: [
|
||||||
|
{
|
||||||
|
name: "chromium",
|
||||||
|
use: { ...devices["Desktop Chrome"] },
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
/* Run your local dev server before starting the tests */
|
||||||
|
webServer: [
|
||||||
|
{
|
||||||
|
command: "pnpm preview --port 5173",
|
||||||
|
url: "http://localhost:5173/",
|
||||||
|
reuseExistingServer: !isCI,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
@@ -35,6 +35,7 @@ interface JazzLoggedInSecret {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default function CoJsonViewerApp() {
|
export default function CoJsonViewerApp() {
|
||||||
|
const [errors, setErrors] = useState<string | null>(null);
|
||||||
const [accounts, setAccounts] = useState<Account[]>(() => {
|
const [accounts, setAccounts] = useState<Account[]>(() => {
|
||||||
const storedAccounts = localStorage.getItem("inspectorAccounts");
|
const storedAccounts = localStorage.getItem("inspectorAccounts");
|
||||||
return storedAccounts ? JSON.parse(storedAccounts) : [];
|
return storedAccounts ? JSON.parse(storedAccounts) : [];
|
||||||
@@ -80,7 +81,9 @@ export default function CoJsonViewerApp() {
|
|||||||
websocket: new WebSocket("wss://cloud.jazz.tools"),
|
websocket: new WebSocket("wss://cloud.jazz.tools"),
|
||||||
role: "server",
|
role: "server",
|
||||||
});
|
});
|
||||||
const node = await LocalNode.withLoadedAccount({
|
let node;
|
||||||
|
try {
|
||||||
|
node = await LocalNode.withLoadedAccount({
|
||||||
accountID: currentAccount.id,
|
accountID: currentAccount.id,
|
||||||
accountSecret: currentAccount.secret,
|
accountSecret: currentAccount.secret,
|
||||||
sessionID: crypto.newRandomSessionID(currentAccount.id),
|
sessionID: crypto.newRandomSessionID(currentAccount.id),
|
||||||
@@ -90,13 +93,34 @@ export default function CoJsonViewerApp() {
|
|||||||
console.log("Not running any migration in inspector");
|
console.log("Not running any migration in inspector");
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
} catch (err: any) {
|
||||||
|
if (err.toString().includes("invalid id")) {
|
||||||
|
setAccounts(accounts.filter((acc) => acc.id !== currentAccount.id));
|
||||||
|
//remove from localStorage
|
||||||
|
localStorage.removeItem("lastSelectedAccountId");
|
||||||
|
localStorage.setItem(
|
||||||
|
"inspectorAccounts",
|
||||||
|
JSON.parse(localStorage.inspectorAccounts).filter(
|
||||||
|
(acc: Account) => acc.id != currentAccount.id,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
setCurrentAccount(null);
|
||||||
|
setErrors("Trying to load covalue with invalid id");
|
||||||
|
} else {
|
||||||
|
setErrors("The account could not be loaded");
|
||||||
|
}
|
||||||
|
setLocalNode(null);
|
||||||
|
goToIndex(-1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
setLocalNode(node);
|
setLocalNode(node);
|
||||||
});
|
});
|
||||||
}, [currentAccount, goToIndex, path]);
|
}, [currentAccount, accounts, goToIndex, path]);
|
||||||
|
|
||||||
const addAccount = (id: RawAccountID, secret: AgentSecret) => {
|
const addAccount = (id: RawAccountID, secret: AgentSecret) => {
|
||||||
const newAccount = { id, secret };
|
const newAccount = { id, secret };
|
||||||
const accountExists = accounts.some((account) => account.id === id);
|
const accountExists = accounts.some((account) => account.id === id);
|
||||||
|
//todo: ideally there would be some validation here so we don't have to manually remove a non existent account from localStorage
|
||||||
if (!accountExists) {
|
if (!accountExists) {
|
||||||
setAccounts([...accounts, newAccount]);
|
setAccounts([...accounts, newAccount]);
|
||||||
}
|
}
|
||||||
@@ -174,7 +198,9 @@ export default function CoJsonViewerApp() {
|
|||||||
goBack={goBack}
|
goBack={goBack}
|
||||||
addPages={addPages}
|
addPages={addPages}
|
||||||
>
|
>
|
||||||
{!currentAccount && <AddAccountForm addAccount={addAccount} />}
|
{!currentAccount && (
|
||||||
|
<AddAccountForm addAccount={addAccount} errors={errors} />
|
||||||
|
)}
|
||||||
|
|
||||||
{currentAccount && path.length <= 0 && (
|
{currentAccount && path.length <= 0 && (
|
||||||
<form
|
<form
|
||||||
@@ -270,8 +296,10 @@ function AccountSwitcher({
|
|||||||
|
|
||||||
function AddAccountForm({
|
function AddAccountForm({
|
||||||
addAccount,
|
addAccount,
|
||||||
|
errors,
|
||||||
}: {
|
}: {
|
||||||
addAccount: (id: RawAccountID, secret: AgentSecret) => void;
|
addAccount: (id: RawAccountID, secret: AgentSecret) => void;
|
||||||
|
errors: string | null;
|
||||||
}) {
|
}) {
|
||||||
const [id, setId] = useState("");
|
const [id, setId] = useState("");
|
||||||
const [secret, setSecret] = useState("");
|
const [secret, setSecret] = useState("");
|
||||||
@@ -305,8 +333,17 @@ function AddAccountForm({
|
|||||||
return (
|
return (
|
||||||
<form
|
<form
|
||||||
onSubmit={handleSubmit}
|
onSubmit={handleSubmit}
|
||||||
className="flex flex-col gap-3 max-w-md mx-auto h-full justify-center"
|
className={`flex flex-col max-w-[30rem] mx-auto justify-center ${errors == null ? "h-full" : ""}`}
|
||||||
>
|
>
|
||||||
|
{errors != null && (
|
||||||
|
<div className="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded mt-4 font-mono whitespace-pre-wrap break-words mb-8">
|
||||||
|
<h3>Error</h3>
|
||||||
|
<pre className="whitespace-pre-wrap break-words overflow-hidden">
|
||||||
|
{errors}
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
<h2 className="text-2xl font-medium text-gray-900 dark:text-white">
|
<h2 className="text-2xl font-medium text-gray-900 dark:text-white">
|
||||||
Add an account to inspect
|
Add an account to inspect
|
||||||
</h2>
|
</h2>
|
||||||
|
|||||||
91
examples/inspector/tests/data.ts
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
import { co, z } from "jazz-tools";
|
||||||
|
|
||||||
|
const projectsData: {
|
||||||
|
name: string;
|
||||||
|
description: string;
|
||||||
|
issues: {
|
||||||
|
title: string;
|
||||||
|
status: "open" | "closed";
|
||||||
|
labels: string[];
|
||||||
|
}[];
|
||||||
|
}[] = [
|
||||||
|
{
|
||||||
|
name: "Jazz",
|
||||||
|
description: "Jazz is a framework for building collaborative apps.",
|
||||||
|
issues: [
|
||||||
|
{
|
||||||
|
title: "Issue 1",
|
||||||
|
status: "open",
|
||||||
|
labels: [
|
||||||
|
"bug",
|
||||||
|
"feature",
|
||||||
|
"enhancement",
|
||||||
|
"documentation",
|
||||||
|
"homepage",
|
||||||
|
"help needed",
|
||||||
|
"requested",
|
||||||
|
"blocked",
|
||||||
|
"high priority",
|
||||||
|
"urgent",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{ title: "Issue 2", status: "closed", labels: ["bug"] },
|
||||||
|
{ title: "Issue 3", status: "open", labels: ["feature", "enhancement"] },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Waffle",
|
||||||
|
description: "Start waffling",
|
||||||
|
issues: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Garden",
|
||||||
|
description: "Grow your garden",
|
||||||
|
issues: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Tilescape",
|
||||||
|
description: "",
|
||||||
|
issues: [],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const Issue = co.map({
|
||||||
|
title: z.string(),
|
||||||
|
status: z.enum(["open", "closed"]),
|
||||||
|
labels: co.list(z.string()),
|
||||||
|
});
|
||||||
|
|
||||||
|
const Project = co.map({
|
||||||
|
name: z.string(),
|
||||||
|
description: z.string(),
|
||||||
|
issues: co.list(Issue),
|
||||||
|
});
|
||||||
|
|
||||||
|
const Organization = co.map({
|
||||||
|
name: z.string(),
|
||||||
|
projects: co.list(Project),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const createOrganization = () => {
|
||||||
|
return Organization.create({
|
||||||
|
name: "Garden Computing",
|
||||||
|
projects: co.list(Project).create(
|
||||||
|
projectsData.map((project) =>
|
||||||
|
Project.create({
|
||||||
|
name: project.name,
|
||||||
|
description: project.description,
|
||||||
|
issues: co.list(Issue).create(
|
||||||
|
project.issues.map((issue) =>
|
||||||
|
Issue.create({
|
||||||
|
title: issue.title,
|
||||||
|
status: issue.status,
|
||||||
|
labels: co.list(z.string()).create(issue.labels),
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
});
|
||||||
|
};
|
||||||
82
examples/inspector/tests/inspector.spec.ts
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
import { expect, test } from "@playwright/test";
|
||||||
|
import { createOrganization } from "./data";
|
||||||
|
import { createAccount, initializeKvStore } from "./lib";
|
||||||
|
|
||||||
|
initializeKvStore();
|
||||||
|
const { account, accountID, accountSecret } = await createAccount();
|
||||||
|
|
||||||
|
test("should add and delete account in dropdown", async ({ page }) => {
|
||||||
|
await page.goto("/");
|
||||||
|
await page.getByLabel("Account ID").fill(accountID);
|
||||||
|
await page.getByLabel("Account secret").fill(accountSecret);
|
||||||
|
await page.getByRole("button", { name: "Add account" }).click();
|
||||||
|
|
||||||
|
await expect(page.getByText("Jazz CoValue Inspector")).toBeVisible();
|
||||||
|
await page
|
||||||
|
.getByLabel("Account to inspect")
|
||||||
|
.selectOption(`Inspector test account <${accountID}>`);
|
||||||
|
|
||||||
|
await page.getByRole("button", { name: "Remove account" }).click();
|
||||||
|
await expect(page.getByText("Jazz CoValue Inspector")).not.toBeVisible();
|
||||||
|
await expect(page.getByText("Add an account to inspect")).toBeVisible();
|
||||||
|
await expect(
|
||||||
|
page.getByText(`Inspector test account <${accountID}>`),
|
||||||
|
).not.toBeVisible();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("should inspect account", async ({ page }) => {
|
||||||
|
await page.goto("/");
|
||||||
|
await page.getByLabel("Account ID").fill(accountID);
|
||||||
|
await page.getByLabel("Account secret").fill(accountSecret);
|
||||||
|
await page.getByRole("button", { name: "Add account" }).click();
|
||||||
|
await page.getByRole("button", { name: "Inspect my account" }).click();
|
||||||
|
|
||||||
|
await expect(page.getByRole("heading", { name: accountID })).toBeVisible();
|
||||||
|
await expect(page.getByText("👤 Account")).toBeVisible();
|
||||||
|
|
||||||
|
await page.getByRole("button", { name: "profile {} CoMap name:" }).click();
|
||||||
|
await expect(page.getByText("Role: admin")).toBeVisible();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("should inspect CoValue", async ({ page }) => {
|
||||||
|
await page.goto("/");
|
||||||
|
await page.getByLabel("Account ID").fill(accountID);
|
||||||
|
await page.getByLabel("Account secret").fill(accountSecret);
|
||||||
|
await page.getByRole("button", { name: "Add account" }).click();
|
||||||
|
|
||||||
|
const organization = createOrganization();
|
||||||
|
|
||||||
|
await account.waitForAllCoValuesSync(); // Ensures that the organization is uploaded
|
||||||
|
|
||||||
|
await page.getByLabel("CoValue ID").fill(organization.id);
|
||||||
|
await page.getByRole("button", { name: "Inspect CoValue" }).click();
|
||||||
|
|
||||||
|
await expect(page.getByText(/Garden Computing/)).toHaveCount(2);
|
||||||
|
await expect(
|
||||||
|
page.getByRole("heading", { name: organization.id }),
|
||||||
|
).toBeVisible();
|
||||||
|
await expect(page.getByText("Role: admin")).toBeVisible();
|
||||||
|
|
||||||
|
await page.getByRole("button", { name: /projects/ }).click();
|
||||||
|
await expect(page.getByText("Showing 4 of 4")).toBeVisible();
|
||||||
|
|
||||||
|
await page.getByRole("button", { name: "View" }).first().click();
|
||||||
|
await expect(
|
||||||
|
page.getByText("Jazz is a framework for building collaborative apps."),
|
||||||
|
).toBeVisible();
|
||||||
|
|
||||||
|
await page.getByRole("button", { name: /issues/ }).click();
|
||||||
|
await expect(page.getByText("Showing 3 of 3")).toBeVisible();
|
||||||
|
await page.getByRole("button", { name: "View" }).first().click();
|
||||||
|
|
||||||
|
await page.getByRole("button", { name: /labels/ }).click();
|
||||||
|
// currently broken:
|
||||||
|
// await expect(page.getByText("Showing 10 of 10")).toBeVisible();
|
||||||
|
await expect(page.getByRole("table").getByRole("row")).toHaveCount(11);
|
||||||
|
|
||||||
|
await page.getByRole("button", { name: "issues" }).click();
|
||||||
|
await expect(page.getByRole("table").getByRole("row")).toHaveCount(4);
|
||||||
|
|
||||||
|
await page.getByRole("button", { name: "projects" }).click();
|
||||||
|
await expect(page.getByRole("table").getByRole("row")).toHaveCount(5);
|
||||||
|
});
|
||||||
43
examples/inspector/tests/lib.ts
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
import { createWebSocketPeer } from "cojson-transport-ws";
|
||||||
|
import { WasmCrypto } from "cojson/crypto/WasmCrypto";
|
||||||
|
import {
|
||||||
|
AuthSecretStorage,
|
||||||
|
InMemoryKVStore,
|
||||||
|
KvStoreContext,
|
||||||
|
co,
|
||||||
|
createJazzContext,
|
||||||
|
randomSessionProvider,
|
||||||
|
z,
|
||||||
|
} from "jazz-tools";
|
||||||
|
|
||||||
|
export const initializeKvStore = () => {
|
||||||
|
const kvStore = new InMemoryKVStore();
|
||||||
|
KvStoreContext.getInstance().initialize(kvStore);
|
||||||
|
};
|
||||||
|
|
||||||
|
export async function createAccount() {
|
||||||
|
const { account, authSecretStorage } = await createJazzContext({
|
||||||
|
defaultProfileName: "Inspector test account",
|
||||||
|
crypto: await WasmCrypto.create(),
|
||||||
|
sessionProvider: randomSessionProvider,
|
||||||
|
authSecretStorage: new AuthSecretStorage(),
|
||||||
|
peersToLoadFrom: [
|
||||||
|
createWebSocketPeer({
|
||||||
|
id: "upstream",
|
||||||
|
role: "server",
|
||||||
|
websocket: new WebSocket(
|
||||||
|
"wss://cloud.jazz.tools/?key=inspector-test@jazz.tools",
|
||||||
|
),
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
await account.waitForAllCoValuesSync();
|
||||||
|
|
||||||
|
const credentials = await authSecretStorage.get();
|
||||||
|
if (!credentials) {
|
||||||
|
throw new Error("No credentials found");
|
||||||
|
}
|
||||||
|
|
||||||
|
return { account, ...credentials };
|
||||||
|
}
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "jazz-nextjs",
|
"name": "jazz-nextjs",
|
||||||
"version": "0.1.9",
|
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "next dev --turbopack",
|
"dev": "next dev --turbopack",
|
||||||
@@ -12,6 +11,7 @@
|
|||||||
"react": "^19.0.0",
|
"react": "^19.0.0",
|
||||||
"react-dom": "^19.0.0",
|
"react-dom": "^19.0.0",
|
||||||
"next": "15.3.2",
|
"next": "15.3.2",
|
||||||
|
"jazz-inspector": "workspace:*",
|
||||||
"jazz-react": "workspace:*",
|
"jazz-react": "workspace:*",
|
||||||
"jazz-tools": "workspace:*"
|
"jazz-tools": "workspace:*"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
|
import { JazzInspector } from "jazz-inspector";
|
||||||
import { JazzProvider } from "jazz-react";
|
import { JazzProvider } from "jazz-react";
|
||||||
|
|
||||||
export function Jazz({ children }: { children: React.ReactNode }) {
|
export function Jazz({ children }: { children: React.ReactNode }) {
|
||||||
@@ -11,6 +12,7 @@ export function Jazz({ children }: { children: React.ReactNode }) {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
|
<JazzInspector />
|
||||||
</JazzProvider>
|
</JazzProvider>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<link rel="icon" href="/favicon.ico" />
|
|
||||||
<meta name="theme-color" content="#000000" />
|
<meta name="theme-color" content="#000000" />
|
||||||
<meta
|
<meta
|
||||||
name="description"
|
name="description"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" type="image/png" href="/favicon.ico" />
|
<link rel="icon" type="image/x-icon" href="./favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Jazz | Multi-cursors</title>
|
<title>Jazz | Multi-cursors</title>
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "multi-cursors",
|
"name": "multi-cursors",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.112",
|
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
@@ -13,6 +12,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@react-spring/web": "^9.7.5",
|
"@react-spring/web": "^9.7.5",
|
||||||
|
"jazz-inspector": "workspace:*",
|
||||||
"jazz-react": "workspace:*",
|
"jazz-react": "workspace:*",
|
||||||
"jazz-tools": "workspace:*",
|
"jazz-tools": "workspace:*",
|
||||||
"react": "19.0.0",
|
"react": "19.0.0",
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
@@ -1,3 +1,4 @@
|
|||||||
|
import { JazzInspector } from "jazz-inspector";
|
||||||
import { JazzProvider } from "jazz-react";
|
import { JazzProvider } from "jazz-react";
|
||||||
import { StrictMode } from "react";
|
import { StrictMode } from "react";
|
||||||
import { createRoot } from "react-dom/client";
|
import { createRoot } from "react-dom/client";
|
||||||
@@ -16,6 +17,7 @@ createRoot(document.getElementById("root")!).render(
|
|||||||
AccountSchema={CursorAccount}
|
AccountSchema={CursorAccount}
|
||||||
>
|
>
|
||||||
<App />
|
<App />
|
||||||
|
<JazzInspector />
|
||||||
</JazzProvider>
|
</JazzProvider>
|
||||||
</StrictMode>,
|
</StrictMode>,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
VITE_CLERK_PUBLISHABLE_KEY=pk_test_ZXZpZGVudC1kYW5lLTg5LmNsZXJrLmFjY291bnRzLmRldiQ
|
|
||||||
1
examples/multiauth/.env.example
Normal file
@@ -0,0 +1 @@
|
|||||||
|
VITE_CLERK_PUBLISHABLE_KEY=
|
||||||
6
examples/multiauth/.gitignore
vendored
@@ -22,3 +22,9 @@ dist-ssr
|
|||||||
*.njsproj
|
*.njsproj
|
||||||
*.sln
|
*.sln
|
||||||
*.sw?
|
*.sw?
|
||||||
|
|
||||||
|
# Env
|
||||||
|
.env
|
||||||
|
.env.*
|
||||||
|
!.env.example
|
||||||
|
!.env.test
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" type="image/x-icon" href="./favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Jazz Multi-auth (React)</title>
|
<title>Jazz Multi-auth (React)</title>
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "multiauth",
|
"name": "multiauth",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.60",
|
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
@@ -13,6 +12,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@clerk/clerk-react": "^5.4.1",
|
"@clerk/clerk-react": "^5.4.1",
|
||||||
"jazz-react": "workspace:*",
|
"jazz-react": "workspace:*",
|
||||||
|
"jazz-inspector": "workspace:*",
|
||||||
"jazz-react-auth-clerk": "workspace:*",
|
"jazz-react-auth-clerk": "workspace:*",
|
||||||
"jazz-tools": "workspace:*",
|
"jazz-tools": "workspace:*",
|
||||||
"react": "19.0.0",
|
"react": "19.0.0",
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
@@ -1,4 +1,5 @@
|
|||||||
import { ClerkProvider } from "@clerk/clerk-react";
|
import { ClerkProvider } from "@clerk/clerk-react";
|
||||||
|
import { JazzInspector } from "jazz-inspector";
|
||||||
import { StrictMode } from "react";
|
import { StrictMode } from "react";
|
||||||
import { createRoot } from "react-dom/client";
|
import { createRoot } from "react-dom/client";
|
||||||
import App from "./App";
|
import App from "./App";
|
||||||
@@ -22,6 +23,7 @@ createRoot(document.getElementById("root")!).render(
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<App />
|
<App />
|
||||||
|
<JazzInspector />
|
||||||
</OmniAuth>
|
</OmniAuth>
|
||||||
</ClerkProvider>
|
</ClerkProvider>
|
||||||
</StrictMode>,
|
</StrictMode>,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" type="image/png" href="/jazz-logo.png" />
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Jazz - Music Player example</title>
|
<title>Jazz - Music Player example</title>
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "jazz-example-music-player",
|
"name": "jazz-example-music-player",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.141",
|
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
@@ -2,8 +2,9 @@
|
|||||||
<html lang="en" class="h-full">
|
<html lang="en" class="h-full">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Jazz | Organization example</title>
|
<title>Jazz - Organization example</title>
|
||||||
</head>
|
</head>
|
||||||
<body class="h-full flex flex-col bg-gray-50 text-stone-700 dark:text-stone-400 dark:bg-stone-925">
|
<body class="h-full flex flex-col bg-gray-50 text-stone-700 dark:text-stone-400 dark:bg-stone-925">
|
||||||
<div id="root" class="align-self-center flex-1"></div>
|
<div id="root" class="align-self-center flex-1"></div>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "organization",
|
"name": "organization",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.112",
|
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
@@ -13,6 +12,7 @@
|
|||||||
"test:e2e:ui": "playwright test --ui"
|
"test:e2e:ui": "playwright test --ui"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"jazz-inspector": "workspace:*",
|
||||||
"jazz-react": "workspace:*",
|
"jazz-react": "workspace:*",
|
||||||
"jazz-tools": "workspace:*",
|
"jazz-tools": "workspace:*",
|
||||||
"lucide-react": "^0.274.0",
|
"lucide-react": "^0.274.0",
|
||||||
@@ -22,8 +22,8 @@
|
|||||||
"react-router-dom": "^6.16.0"
|
"react-router-dom": "^6.16.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@playwright/test": "^1.50.1",
|
|
||||||
"@biomejs/biome": "1.9.4",
|
"@biomejs/biome": "1.9.4",
|
||||||
|
"@playwright/test": "^1.50.1",
|
||||||
"@tailwindcss/forms": "^0.5.9",
|
"@tailwindcss/forms": "^0.5.9",
|
||||||
"@types/react": "19.0.0",
|
"@types/react": "19.0.0",
|
||||||
"@types/react-dom": "19.0.0",
|
"@types/react-dom": "19.0.0",
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
@@ -1,3 +1,4 @@
|
|||||||
|
import { JazzInspector } from "jazz-inspector";
|
||||||
import { JazzProvider } from "jazz-react";
|
import { JazzProvider } from "jazz-react";
|
||||||
import { StrictMode } from "react";
|
import { StrictMode } from "react";
|
||||||
import { createRoot } from "react-dom/client";
|
import { createRoot } from "react-dom/client";
|
||||||
@@ -37,6 +38,7 @@ createRoot(document.getElementById("root")!).render(
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Router />
|
<Router />
|
||||||
|
<JazzInspector />
|
||||||
</JazzProvider>
|
</JazzProvider>
|
||||||
</StrictMode>,
|
</StrictMode>,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "passkey-svelte",
|
"name": "passkey-svelte",
|
||||||
"version": "0.0.106",
|
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -2,10 +2,9 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Jazz | Minimal Auth Passkey Example</title>
|
<title>Jazz | Minimal Auth Passkey Example</title>
|
||||||
<link rel="icon" href="./public/favicon.ico" type="image/png">
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="root"></div>
|
<div id="root"></div>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "passkey",
|
"name": "passkey",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.117",
|
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
@@ -11,6 +10,7 @@
|
|||||||
"format-and-lint:fix": "biome check . --write"
|
"format-and-lint:fix": "biome check . --write"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"jazz-inspector": "workspace:*",
|
||||||
"jazz-react": "workspace:*",
|
"jazz-react": "workspace:*",
|
||||||
"jazz-tools": "workspace:*",
|
"jazz-tools": "workspace:*",
|
||||||
"react": "19.0.0",
|
"react": "19.0.0",
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { JazzInspector } from "jazz-inspector";
|
||||||
import { JazzProvider, PasskeyAuthBasicUI } from "jazz-react";
|
import { JazzProvider, PasskeyAuthBasicUI } from "jazz-react";
|
||||||
import { StrictMode } from "react";
|
import { StrictMode } from "react";
|
||||||
import { createRoot } from "react-dom/client";
|
import { createRoot } from "react-dom/client";
|
||||||
@@ -15,6 +16,7 @@ function JazzAndAuth({ children }: { children: React.ReactNode }) {
|
|||||||
<PasskeyAuthBasicUI appName="Jazz Minimal Auth Passkey Example">
|
<PasskeyAuthBasicUI appName="Jazz Minimal Auth Passkey Example">
|
||||||
{children}
|
{children}
|
||||||
</PasskeyAuthBasicUI>
|
</PasskeyAuthBasicUI>
|
||||||
|
<JazzInspector />
|
||||||
</JazzProvider>
|
</JazzProvider>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Jazz | Minimal Auth Passphrase Example</title>
|
<title>Jazz | Minimal Auth Passphrase Example</title>
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "passphrase",
|
"name": "passphrase",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.114",
|
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
@@ -11,6 +10,7 @@
|
|||||||
"format-and-lint:fix": "biome check . --write"
|
"format-and-lint:fix": "biome check . --write"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"jazz-inspector": "workspace:*",
|
||||||
"jazz-react": "workspace:*",
|
"jazz-react": "workspace:*",
|
||||||
"jazz-tools": "workspace:*",
|
"jazz-tools": "workspace:*",
|
||||||
"react": "19.0.0",
|
"react": "19.0.0",
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
@@ -1,3 +1,4 @@
|
|||||||
|
import { JazzInspector } from "jazz-inspector";
|
||||||
import { JazzProvider, usePassphraseAuth } from "jazz-react";
|
import { JazzProvider, usePassphraseAuth } from "jazz-react";
|
||||||
import { StrictMode, useState } from "react";
|
import { StrictMode, useState } from "react";
|
||||||
import { createRoot } from "react-dom/client";
|
import { createRoot } from "react-dom/client";
|
||||||
@@ -150,6 +151,7 @@ function JazzAndAuth({ children }: { children: React.ReactNode }) {
|
|||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
</PassphraseAuthBasicUI>
|
</PassphraseAuthBasicUI>
|
||||||
|
<JazzInspector />
|
||||||
</JazzProvider>
|
</JazzProvider>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" type="image/x-icon" href="./favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Jazz Password Manager Example</title>
|
<title>Jazz Password Manager Example</title>
|
||||||
<link rel="icon" type="image/png" href="./public/favicon.ico">
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="root"></div>
|
<div id="root"></div>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "jazz-password-manager",
|
"name": "jazz-password-manager",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.138",
|
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
@@ -12,6 +11,7 @@
|
|||||||
"clean-install": "rm -rf node_modules pnpm-lock.yaml && pnpm install"
|
"clean-install": "rm -rf node_modules pnpm-lock.yaml && pnpm install"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"jazz-inspector": "workspace:*",
|
||||||
"jazz-react": "workspace:*",
|
"jazz-react": "workspace:*",
|
||||||
"jazz-tools": "workspace:*",
|
"jazz-tools": "workspace:*",
|
||||||
"react": "19.0.0",
|
"react": "19.0.0",
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { JazzInspector } from "jazz-inspector";
|
||||||
import { JazzProvider, PasskeyAuthBasicUI } from "jazz-react";
|
import { JazzProvider, PasskeyAuthBasicUI } from "jazz-react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import ReactDOM from "react-dom/client";
|
import ReactDOM from "react-dom/client";
|
||||||
@@ -25,6 +26,7 @@ ReactDOM.createRoot(document.getElementById("root")!).render(
|
|||||||
<React.StrictMode>
|
<React.StrictMode>
|
||||||
<JazzAndAuth>
|
<JazzAndAuth>
|
||||||
<App />
|
<App />
|
||||||
|
<JazzInspector />
|
||||||
</JazzAndAuth>
|
</JazzAndAuth>
|
||||||
</React.StrictMode>,
|
</React.StrictMode>,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" type="image/png" href="/jazz-logo.png" />
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Jazz Rate My Pet Example</title>
|
<title>Jazz Rate My Pet Example</title>
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "jazz-example-pets",
|
"name": "jazz-example-pets",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.236",
|
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
@@ -19,6 +18,7 @@
|
|||||||
"@radix-ui/react-toast": "^1.1.4",
|
"@radix-ui/react-toast": "^1.1.4",
|
||||||
"class-variance-authority": "^0.7.0",
|
"class-variance-authority": "^0.7.0",
|
||||||
"clsx": "^2.0.0",
|
"clsx": "^2.0.0",
|
||||||
|
"jazz-inspector": "workspace:*",
|
||||||
"jazz-react": "workspace:*",
|
"jazz-react": "workspace:*",
|
||||||
"jazz-tools": "workspace:*",
|
"jazz-tools": "workspace:*",
|
||||||
"lucide-react": "^0.274.0",
|
"lucide-react": "^0.274.0",
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
@@ -1,3 +1,4 @@
|
|||||||
|
import { JazzInspector } from "jazz-inspector";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import ReactDOM from "react-dom/client";
|
import ReactDOM from "react-dom/client";
|
||||||
import {
|
import {
|
||||||
@@ -47,6 +48,7 @@ ReactDOM.createRoot(document.getElementById("root")!).render(
|
|||||||
<PasskeyAuthBasicUI appName={appName}>
|
<PasskeyAuthBasicUI appName={appName}>
|
||||||
<App />
|
<App />
|
||||||
</PasskeyAuthBasicUI>
|
</PasskeyAuthBasicUI>
|
||||||
|
<JazzInspector />
|
||||||
</JazzProvider>
|
</JazzProvider>
|
||||||
</div>
|
</div>
|
||||||
</ThemeProvider>
|
</ThemeProvider>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Jazz | Reactions example</title>
|
<title>Jazz | Reactions example</title>
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "reactions",
|
"name": "reactions",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.116",
|
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
@@ -12,6 +11,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"hash-slash": "workspace:*",
|
"hash-slash": "workspace:*",
|
||||||
|
"jazz-inspector": "workspace:*",
|
||||||
"jazz-react": "workspace:*",
|
"jazz-react": "workspace:*",
|
||||||
"jazz-tools": "workspace:*",
|
"jazz-tools": "workspace:*",
|
||||||
"react": "19.0.0",
|
"react": "19.0.0",
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
@@ -1,3 +1,4 @@
|
|||||||
|
import { JazzInspector } from "jazz-inspector";
|
||||||
import { JazzProvider, PasskeyAuthBasicUI } from "jazz-react";
|
import { JazzProvider, PasskeyAuthBasicUI } from "jazz-react";
|
||||||
import { StrictMode } from "react";
|
import { StrictMode } from "react";
|
||||||
import { createRoot } from "react-dom/client";
|
import { createRoot } from "react-dom/client";
|
||||||
@@ -15,6 +16,7 @@ createRoot(document.getElementById("root")!).render(
|
|||||||
<PasskeyAuthBasicUI appName="Jazz Reactions Example">
|
<PasskeyAuthBasicUI appName="Jazz Reactions Example">
|
||||||
<App />
|
<App />
|
||||||
</PasskeyAuthBasicUI>
|
</PasskeyAuthBasicUI>
|
||||||
|
<JazzInspector />
|
||||||
</JazzProvider>
|
</JazzProvider>
|
||||||
</StrictMode>,
|
</StrictMode>,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" type="image/png" href="/favicon.ico" />
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Rich text ProseKit example app | Jazz</title>
|
<title>Rich text ProseKit example app | Jazz</title>
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "example-prosekit-jazz",
|
"name": "example-prosekit-jazz",
|
||||||
"version": "0.0.1",
|
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@@ -9,6 +8,7 @@
|
|||||||
"preview": "vite preview"
|
"preview": "vite preview"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"jazz-inspector": "workspace:*",
|
||||||
"jazz-react": "workspace:*",
|
"jazz-react": "workspace:*",
|
||||||
"jazz-richtext-prosemirror": "workspace:*",
|
"jazz-richtext-prosemirror": "workspace:*",
|
||||||
"jazz-tools": "workspace:*",
|
"jazz-tools": "workspace:*",
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
@@ -1,4 +1,5 @@
|
|||||||
import "./app.css";
|
import "./app.css";
|
||||||
|
import { JazzInspector } from "jazz-inspector";
|
||||||
import { JazzProvider } from "jazz-react";
|
import { JazzProvider } from "jazz-react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import ReactDOM from "react-dom/client";
|
import ReactDOM from "react-dom/client";
|
||||||
@@ -15,6 +16,7 @@ ReactDOM.createRoot(document.getElementById("root")!).render(
|
|||||||
AccountSchema={JazzAccount}
|
AccountSchema={JazzAccount}
|
||||||
>
|
>
|
||||||
<App />
|
<App />
|
||||||
|
<JazzInspector />
|
||||||
</JazzProvider>
|
</JazzProvider>
|
||||||
</React.StrictMode>,
|
</React.StrictMode>,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<html lang="en" class="h-full">
|
<html lang="en" class="h-full">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" type="image/png" href="/favicon.ico" />
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Rich text example app | Jazz</title>
|
<title>Rich text example app | Jazz</title>
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "richtext",
|
"name": "richtext",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.106",
|
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
@@ -13,6 +12,7 @@
|
|||||||
"format-and-lint:fix": "biome check . --write"
|
"format-and-lint:fix": "biome check . --write"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"jazz-inspector": "workspace:*",
|
||||||
"jazz-react": "workspace:*",
|
"jazz-react": "workspace:*",
|
||||||
"jazz-richtext-prosemirror": "workspace:*",
|
"jazz-richtext-prosemirror": "workspace:*",
|
||||||
"jazz-tools": "workspace:*",
|
"jazz-tools": "workspace:*",
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
@@ -1,3 +1,4 @@
|
|||||||
|
import { JazzInspector } from "jazz-inspector";
|
||||||
import { JazzProvider } from "jazz-react";
|
import { JazzProvider } from "jazz-react";
|
||||||
import { StrictMode } from "react";
|
import { StrictMode } from "react";
|
||||||
import { createRoot } from "react-dom/client";
|
import { createRoot } from "react-dom/client";
|
||||||
@@ -21,6 +22,7 @@ createRoot(document.getElementById("root")!).render(
|
|||||||
AccountSchema={JazzAccount}
|
AccountSchema={JazzAccount}
|
||||||
>
|
>
|
||||||
<App />
|
<App />
|
||||||
|
<JazzInspector />
|
||||||
</JazzProvider>
|
</JazzProvider>
|
||||||
</StrictMode>,
|
</StrictMode>,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<html lang="en" class="h-full">
|
<html lang="en" class="h-full">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" type="image/png" href="/favicon.ico" />
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Rich text Tiptap example app | Jazz</title>
|
<title>Rich text Tiptap example app | Jazz</title>
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "richtext-tiptap",
|
"name": "richtext-tiptap",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.1.29",
|
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
@@ -21,6 +20,7 @@
|
|||||||
"@tiptap/react": "^2.12.0",
|
"@tiptap/react": "^2.12.0",
|
||||||
"@tiptap/starter-kit": "^2.12.0",
|
"@tiptap/starter-kit": "^2.12.0",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
|
"jazz-inspector": "workspace:*",
|
||||||
"jazz-react": "workspace:*",
|
"jazz-react": "workspace:*",
|
||||||
"jazz-richtext-tiptap": "workspace:*",
|
"jazz-richtext-tiptap": "workspace:*",
|
||||||
"jazz-tools": "workspace:*",
|
"jazz-tools": "workspace:*",
|
||||||
|
|||||||
BIN
examples/richtext-tiptap/public/favicon.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
@@ -1,3 +1,4 @@
|
|||||||
|
import { JazzInspector } from "jazz-inspector";
|
||||||
import { JazzProvider } from "jazz-react";
|
import { JazzProvider } from "jazz-react";
|
||||||
import { StrictMode } from "react";
|
import { StrictMode } from "react";
|
||||||
import { createRoot } from "react-dom/client";
|
import { createRoot } from "react-dom/client";
|
||||||
@@ -21,6 +22,7 @@ createRoot(document.getElementById("root")!).render(
|
|||||||
AccountSchema={JazzAccount}
|
AccountSchema={JazzAccount}
|
||||||
>
|
>
|
||||||
<App />
|
<App />
|
||||||
|
<JazzInspector />
|
||||||
</JazzProvider>
|
</JazzProvider>
|
||||||
</StrictMode>,
|
</StrictMode>,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" href="./public/favicon.ico" type="image/png">
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Vite App</title>
|
<title>Jazz Todo List Example</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "todo-vue",
|
"name": "todo-vue",
|
||||||
"version": "0.0.118",
|
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@@ -13,6 +12,7 @@
|
|||||||
"format-and-lint:fix": "biome check . --write"
|
"format-and-lint:fix": "biome check . --write"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"jazz-inspector-element": "workspace:*",
|
||||||
"jazz-browser": "workspace:*",
|
"jazz-browser": "workspace:*",
|
||||||
"jazz-tools": "workspace:*",
|
"jazz-tools": "workspace:*",
|
||||||
"jazz-vue": "workspace:*",
|
"jazz-vue": "workspace:*",
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" type="image/png" href="/jazz-logo.png" />
|
<link rel="icon" type="image/x-icon" href="./favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Jazz Todo List Example</title>
|
<title>Jazz Todo List Example</title>
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "jazz-example-todo",
|
"name": "jazz-example-todo",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.235",
|
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
@@ -17,6 +16,7 @@
|
|||||||
"@radix-ui/react-toast": "^1.1.4",
|
"@radix-ui/react-toast": "^1.1.4",
|
||||||
"class-variance-authority": "^0.7.0",
|
"class-variance-authority": "^0.7.0",
|
||||||
"clsx": "^2.0.0",
|
"clsx": "^2.0.0",
|
||||||
|
"jazz-inspector": "workspace:*",
|
||||||
"jazz-react": "workspace:*",
|
"jazz-react": "workspace:*",
|
||||||
"jazz-tools": "workspace:*",
|
"jazz-tools": "workspace:*",
|
||||||
"lucide-react": "^0.274.0",
|
"lucide-react": "^0.274.0",
|
||||||
|
|||||||