Compare commits

..

32 Commits

Author SHA1 Message Date
Guido D'Orsi
4327ecbfdf Merge pull request #2619 from garden-co/changeset-release/main
Version Packages
2025-07-08 17:34:26 +02:00
github-actions[bot]
32565f0e53 Version Packages 2025-07-08 12:20:12 +00:00
Sammii
61a5889bea Merge pull request #2615 from garden-co/fix/team-update 2025-07-08 13:18:08 +01:00
Sammii
82bd3e1ea6 adding nico 2025-07-08 12:00:09 +01:00
Sammii
b800a6fba2 Merge pull request #2401 from garden-co/feat/snippet-improvements
Feat/snippet improvements
2025-07-08 11:54:03 +01:00
Sammii
1b6dbfdfff adjusting side nav item design 2025-07-08 11:45:29 +01:00
Sammii
061a70f1b3 responsive design for dropdown select 2025-07-08 11:45:18 +01:00
Sammii
f1c1e0dafd adding div's profile link 2025-07-08 10:43:54 +01:00
Guido D'Orsi
c3912fdb37 Merge pull request #2618 from garden-co/fix/inspector-element
fix: simplify definition of the AccountSchema type
2025-07-07 22:19:49 +02:00
Guido D'Orsi
356bfa4860 docs: add jsDoc for coAccountDefiner 2025-07-07 19:50:41 +02:00
Guido D'Orsi
38446668c4 fix: simplify definition of the AccountSchema type 2025-07-07 19:44:21 +02:00
Sammii
bed7db0a33 team page updates 2025-07-07 16:51:22 +01:00
Sammii
296da5a5c4 design amends 2025-07-07 16:40:30 +01:00
Sammii
16c4d27e00 code tidy 2025-07-07 14:21:24 +01:00
Sammii
69170fe0e0 style amendments 2025-07-07 14:14:28 +01:00
Sammii
a646ba54b3 component refactor 2025-07-07 14:14:16 +01:00
Sammii
45d60fc3c8 get started snippet select improvements 2025-07-07 14:02:22 +01:00
Sammii
6f0c399ccd Merge branch 'main' into feat/snippet-improvements 2025-07-07 13:50:59 +01:00
Sammii
588ea02f63 refactoring Framework Select 2025-06-24 16:09:01 +01:00
Sammii
ddc69f2268 apply track on copy click to new snippet select component 2025-06-24 11:56:39 +01:00
Sammii
7c62689319 Merge branch 'main' into feat/snippet-improvements 2025-06-24 11:52:03 +01:00
Sammii
df7011167c making active dropdown item text primary 2025-06-02 17:14:45 +01:00
Sammii
28a785acb0 letting dropdown items be editable 2025-06-02 17:10:57 +01:00
Sammii
3ee557bfbe adding routerPush prop to framework select 2025-06-02 17:10:30 +01:00
Sammii
af94255166 updating HeroSection 2025-06-02 16:50:12 +01:00
Sammii
4a0dea3f75 create NpxCreateJazzApp.mdx 2025-06-02 16:49:46 +01:00
Sammii
6a42bc9655 creating GetStartedSnippetSelect component 2025-06-02 16:49:17 +01:00
Sammii
c6c8a7f6b7 amending Framework select 2025-06-02 16:48:41 +01:00
Sammii
133dd0e26d make dropdown classes last so you can edit them 2025-06-02 16:43:07 +01:00
Sammii
815339272f alter Feature Card styling 2025-06-02 14:47:30 +01:00
Sammii
9c1f340029 add new size to code group and amend copy button to be icon only on small 2025-06-02 13:54:29 +01:00
Sammii
b72ea9608d add new icon for clipboard success 2025-06-02 13:54:09 +01:00
46 changed files with 309 additions and 131 deletions

View File

@@ -1,5 +1,12 @@
# passkey-svelte
## 0.0.97
### Patch Changes
- Updated dependencies [3844666]
- jazz-tools@0.15.8
## 0.0.96
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "chat-svelte",
"version": "0.0.96",
"version": "0.0.97",
"type": "module",
"private": true,
"scripts": {

View File

@@ -12,6 +12,7 @@ import {
ChevronLeftIcon,
ChevronRight,
ChevronRightIcon,
ClipboardCheckIcon,
ClipboardIcon,
CodeIcon,
Eye,
@@ -66,6 +67,7 @@ export const icons = {
close: XIcon,
code: CodeIcon,
copy: ClipboardIcon,
copySuccess: ClipboardCheckIcon,
cursor: MousePointer2Icon,
darkTheme: MoonIcon,
delete: TrashIcon,

View File

@@ -11,7 +11,7 @@ export function CopyButton({
onCopy,
}: {
code: string;
size: "md" | "lg";
size: "sm" | "md" | "lg";
className?: string;
onCopy?: () => void;
}) {
@@ -32,13 +32,13 @@ export function CopyButton({
type="button"
className={clsx(
className,
"group/button absolute overflow-hidden rounded text-2xs font-medium md:opacity-0 backdrop-blur transition md:focus:opacity-100 group-hover:opacity-100",
"group/button absolute overflow-hidden rounded text-2xs font-medium md:opacity-0 backdrop-blur transition md:focus:opacity-100 group-hover:opacity-100 items-center align-middle p-0",
copied
? "bg-emerald-400/10 ring-1 ring-inset ring-emerald-400/20"
? "bg-blue-400/10 ring-1 ring-inset ring-blue-400/20"
: "bg-white/5 hover:bg-white/7.5 dark:bg-white/2.5 dark:hover:bg-white/5",
size == "md"
size === "md"
? "right-[8.5px] top-[8.5px] py-[2px] pl-1 pr-2"
: "right-2 top-2 py-1 pl-2 pr-3",
: "right-2 top-2 py-1 pl-2 pr-2",
)}
onClick={() => {
window.navigator.clipboard.writeText(code).then(() => {
@@ -60,18 +60,22 @@ export function CopyButton({
className={clsx(
size === "md" ? "size-3" : "size-4",
"stroke-stone-500 transition-colors group-hover/button:stroke-stone-600 dark:group-hover/button:stroke-stone-400",
copied && "stroke-primary",
)}
/>
Copy
{size !== "sm" && "Copy"}
</span>
<span
aria-hidden={!copied}
className={clsx(
"pointer-events-none absolute inset-0 flex items-center justify-center text-emerald-600 transition duration-300 dark:text-emerald-400",
"pointer-events-none absolute inset-0 flex items-center justify-center text-primary transition duration-300",
!copied && "translate-y-1.5 opacity-0",
)}
>
Copied!
{size === "sm" && (
<Icon name="copySuccess" size="xs" className="stroke-primary" />
)}
{size !== "sm" && "Copied!"}
</span>
</button>
);

View File

@@ -60,7 +60,7 @@ export function DropdownItem({
let classes = clsx(
className,
// Base styles
"group rounded-md space-x-2 focus:outline-none px-2.5 py-1.5",
"group rounded-md space-x-2 focus:outline-none px-2.5 py-1.5",
// Text styles
"text-left text-sm/6 dark:text-white forced-colors:text-[CanvasText]",
// Focus

View File

@@ -22,7 +22,7 @@ export type Style =
export const sizeClasses = {
sm: "text-sm py-1 px-2",
md: "py-1.5 px-3",
lg: "md:text-lg py-2 px-3 md:px-8 md:py-3",
lg: "py-2 px-5 md:px-6 md:py-2.5",
};
export const styleToBorderMap = {

View File

@@ -42,15 +42,6 @@ export const team: Array<TeamMember> = [
linkedin: "giordanoricci",
image: "gio.jpg",
},
{
name: "Trisha Lim",
slug: "trisha",
titles: ["Frontend Dev", "Marketing"],
image: "trisha.png",
location: "Lisbon, Portugal ",
github: "trishalim",
website: "https://trishalim.com",
},
{
name: "Meg Culotta",
slug: "meg",
@@ -73,7 +64,7 @@ export const team: Array<TeamMember> = [
name: "Sammii Kellow",
slug: "sammii",
location: "London, UK",
titles: ["Design Engineer", "Marketing"],
titles: ["Frontend & Design Engineer", "Marketing"],
x: "SammiiHaylock",
github: "sammii-hk",
website: "https://sammii.dev",
@@ -91,4 +82,25 @@ export const team: Array<TeamMember> = [
linkedin: "boorad",
image: "brad.png",
},
{
name: "Divya S",
slug: "div",
location: "New York, US",
titles: ["Platform Engineer"],
x: "shortdiv",
github: "shortdiv",
website: "https://shortdiv.com",
bluesky: "shortdiv.bsky.social",
linkedin: "shortdiv",
image: "div.jpg",
},
{
name: "Nico Rainhart",
slug: "nico",
location: "Buenos Aires, Argentina",
titles: ["Full-Stack Dev", "Framework Engineer"],
image: "nico.jpeg",
github: "nrainhart",
linkedin: "nicolás-rainhart",
},
];

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 186 KiB

View File

@@ -4,6 +4,7 @@ import { ComingSoonSection } from "@/components/home/ComingSoonSection";
import { EarlyAdopterSection } from "@/components/home/EarlyAdopterSection";
import { EncryptionSection } from "@/components/home/EncryptionSection";
import { FeaturesSection } from "@/components/home/FeaturesSection";
import { GetStartedSnippetSelect } from "@/components/home/GetStartedSnippetSelect";
import { HeroSection } from "@/components/home/HeroSection";
import { HowJazzWorksSection } from "@/components/home/HowJazzWorksSection";
import { LocalFirstFeaturesSection } from "@/components/home/LocalFirstFeaturesSection";
@@ -16,7 +17,8 @@ export default function Home() {
<>
<HeroSection />
<div className="container flex flex-col gap-12 mt-12 lg:gap-20 lg:mt-20">
<div className="container flex flex-col gap-12 lg:gap-20">
<GetStartedSnippetSelect />
<SupportedEnvironmentsSection />
<HowJazzWorksSection />

View File

@@ -17,7 +17,7 @@ export function SideNavItem({
}) {
const classes = clsx(
className,
"py-1 px-2 -mx-2 group rounded-md flex items-center transition-colors",
"py-1 px-2 group rounded-md flex items-center transition-colors",
);
const path = usePathname();
@@ -28,7 +28,7 @@ export function SideNavItem({
className={clsx(
classes,
path === href
? "text-stone-900 font-medium bg-stone-100 dark:text-white dark:bg-stone-900"
? "text-stone-900 font-medium bg-stone-200/50 dark:text-white dark:bg-stone-800/50"
: "hover:text-stone-900 dark:hover:text-stone-200",
)}
>

View File

@@ -10,10 +10,21 @@ import {
DropdownItem,
DropdownMenu,
} from "@garden-co/design-system/src/components/organisms/Dropdown";
import clsx from "clsx";
import { usePathname, useRouter } from "next/navigation";
import { useState } from "react";
export function FrameworkSelect() {
export function FrameworkSelect({
onSelect,
size = "md",
routerPush = true,
className,
}: {
onSelect?: (framework: Framework) => void;
size?: "sm" | "md";
routerPush?: boolean;
className?: string;
}) {
const router = useRouter();
const defaultFramework = useFramework();
const [selectedFramework, setSelectedFramework] =
@@ -23,26 +34,26 @@ export function FrameworkSelect() {
const selectFramework = (newFramework: Framework) => {
setSelectedFramework(newFramework);
router.push(path.replace(defaultFramework, newFramework));
onSelect && onSelect(newFramework);
routerPush && router.push(path.replace(defaultFramework, newFramework));
};
return (
<Dropdown>
<DropdownButton
className="w-full justify-between"
className={clsx("w-full justify-between overflow-hidden text-nowrap", size === "sm" && "text-sm", className)}
as={Button}
variant="outline"
intent="default"
>
{frameworkNames[selectedFramework].label}
<span className="text-nowrap max-w-full overflow-hidden text-ellipsis">{frameworkNames[selectedFramework].label}</span>
<Icon name="chevronDown" size="sm" />
</DropdownButton>
<DropdownMenu className="w-[--button-width] z-50" anchor="bottom start">
{Object.entries(frameworkNames)
.filter(([_, framework]) => !framework.hidden)
.map(([key, framework]) => (
<DropdownItem
className="items-baseline"
className={clsx("items-baseline", size === "sm" && "text-xs text-nowrap", selectedFramework === key && "text-primary dark:text-primary")}
key={key}
onClick={() => selectFramework(key as Framework)}
>

View File

@@ -0,0 +1,43 @@
'use client'
import { Framework } from "@/content/framework";
import { useFramework } from "@/lib/use-framework";
import NpxCreateJazzApp from "@/components/home/NpxCreateJazzApp.mdx";
import { CopyButton } from "@garden-co/design-system/src/components/molecules/CodeGroup";
import { useState } from "react";
import { Button } from "@garden-co/design-system/src/components/atoms/Button";
import Link from "next/link";
import { FrameworkSelect } from "../docs/FrameworkSelect";
import clsx from "clsx";
import { track } from "@vercel/analytics";
import { GappedGrid } from "@garden-co/design-system/src/components/molecules/GappedGrid";
export function GetStartedSnippetSelect() {
const defaultFramework = useFramework();
const [selectedFramework, setSelectedFramework] =
useState<Framework>(defaultFramework);
return (
<GappedGrid>
<div className="relative w-full col-span-2 lg:col-span-3 border-2 border-primary rounded-lg overflow-hidden">
<CopyButton
code="npx create-jazz-app@latest"
size="sm"
className={clsx("mt-0.5 mr-0.5 z-100 md:opacity-100 hidden md:block")}
onCopy={() => track("create-jazz-app command copied from hero")}
/>
<NpxCreateJazzApp />
</div>
<div className="col-span-2 lg:col-span-3 flex flex-row gap-2">
<div className="h-full items-center w-[175px]">
<FrameworkSelect onSelect={setSelectedFramework} size="md" routerPush={false} className="h-full md:px-4" />
</div>
<div className="flex h-full items-center">
<Button intent="primary" size="lg" className="w-full">
<Link className="my-[0.11rem]" href={`/docs/${selectedFramework}`}>Get started</Link>
</Button>
</div>
</div>
</GappedGrid>
);
}

View File

@@ -1,6 +1,5 @@
"use client";
import CreateJazzApp from "@/components/home/CreateJazzApp.mdx";
import { marketingCopy } from "@/content/marketingCopy";
import { H1 } from "@garden-co/design-system/src/components/atoms/Headings";
import {
@@ -8,11 +7,10 @@ import {
type IconName,
} from "@garden-co/design-system/src/components/atoms/Icon";
import { Kicker } from "@garden-co/design-system/src/components/atoms/Kicker";
import { CopyButton } from "@garden-co/design-system/src/components/molecules/CodeGroup";
import { Prose } from "@garden-co/design-system/src/components/molecules/Prose";
import { SectionHeader } from "@garden-co/design-system/src/components/molecules/SectionHeader";
import { track } from "@vercel/analytics";
import Link from "next/link";
import { GetStartedSnippetSelect } from "./GetStartedSnippetSelect";
const features: Array<{
title: string;
@@ -54,8 +52,8 @@ const features: Array<{
export function HeroSection() {
return (
<div className="container grid items-center gap-x-8 gap-y-12 my-12 md:my-16 lg:my-24 lg:gap-x-10 lg:grid-cols-3">
<div className="flex flex-col justify-center gap-5 lg:col-span-2 lg:gap-8">
<div className="container grid items-center gap-x-8 gap-y-12 my-12 md:my-16 lg:my-24 lg:gap-x-10 lg:grid-cols-12">
<div className="flex flex-col justify-center gap-5 lg:col-span-11 lg:gap-8">
<Kicker>Toolkit for backendless apps</Kicker>
<H1>
<span className="inline-block text-highlight">
@@ -94,31 +92,6 @@ export function HeroSection() {
))}
</div>
</div>
<div className="h-full group grid md:grid-cols-2 items-center lg:grid-cols-1 lg:pt-36">
<SectionHeader
className="md:col-span-2 lg:sr-only"
title="Get a Jazz app running in minutes."
/>
<div className="overflow-hidden sm:rounded-xl sm:border h-full sm:px-8 sm:pt-6 bg-stone-50 dark:bg-stone-950">
<div className="rounded-lg bg-white dark:bg-stone-925 sm:ring-4 ring-stone-400/20 sm:shadow-xl sm:shadow-blue/20 border relative sm:top-2 h-full w-full">
<div className="py-4 flex items-center gap-2.5 px-6 border-b">
<span className="rounded-full size-3 bg-stone-200 dark:bg-stone-900" />
<span className="rounded-full size-3 bg-stone-200 dark:bg-stone-900" />
<span className="rounded-full size-3 bg-stone-200 dark:bg-stone-900" />
<CopyButton
code="npx create-jazz-app@latest"
size="md"
className="mt-0.5 mr-0.5"
onCopy={() => track("create-jazz-app command copied from hero")}
/>
</div>
<div className="p-3">
<CreateJazzApp />
</div>
</div>
</div>
</div>
</div>
);
}

View File

@@ -0,0 +1,3 @@
```sh
npx create-jazz-app@latest
```

View File

@@ -1,5 +1,12 @@
# cojson-storage-indexeddb
## 0.15.8
### Patch Changes
- cojson@0.15.8
- cojson-storage@0.15.8
## 0.15.7
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "cojson-storage-indexeddb",
"version": "0.15.7",
"version": "0.15.8",
"main": "dist/index.js",
"type": "module",
"types": "dist/index.d.ts",

View File

@@ -1,5 +1,12 @@
# cojson-storage-sqlite
## 0.15.8
### Patch Changes
- cojson@0.15.8
- cojson-storage@0.15.8
## 0.15.7
### Patch Changes

View File

@@ -1,13 +1,13 @@
{
"name": "cojson-storage-sqlite",
"type": "module",
"version": "0.15.7",
"version": "0.15.8",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"license": "MIT",
"dependencies": {
"better-sqlite3": "^11.7.0",
"cojson": "workspace:0.15.7",
"cojson": "workspace:0.15.8",
"cojson-storage": "workspace:*"
},
"devDependencies": {

View File

@@ -1,5 +1,11 @@
# cojson-storage
## 0.15.8
### Patch Changes
- cojson@0.15.8
## 0.15.7
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "cojson-storage",
"version": "0.15.7",
"version": "0.15.8",
"main": "dist/index.js",
"type": "module",
"types": "dist/index.d.ts",

View File

@@ -1,5 +1,11 @@
# cojson-transport-nodejs-ws
## 0.15.8
### Patch Changes
- cojson@0.15.8
## 0.15.7
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "cojson-transport-ws",
"type": "module",
"version": "0.15.7",
"version": "0.15.8",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"license": "MIT",

View File

@@ -1,5 +1,7 @@
# cojson
## 0.15.8
## 0.15.7
## 0.15.6

View File

@@ -25,7 +25,7 @@
},
"type": "module",
"license": "MIT",
"version": "0.15.7",
"version": "0.15.8",
"devDependencies": {
"@opentelemetry/sdk-metrics": "^2.0.0",
"typescript": "catalog:"

View File

@@ -1,5 +1,14 @@
# jazz-auth-betterauth
## 0.15.8
### Patch Changes
- Updated dependencies [3844666]
- jazz-tools@0.15.8
- jazz-betterauth-client-plugin@0.15.8
- cojson@0.15.8
## 0.15.7
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-auth-betterauth",
"version": "0.15.7",
"version": "0.15.8",
"type": "module",
"main": "dist/index.js",
"types": "src/index.ts",

View File

@@ -1,5 +1,11 @@
# jazz-betterauth-client-plugin
## 0.15.8
### Patch Changes
- jazz-betterauth-server-plugin@0.15.8
## 0.15.7
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-betterauth-client-plugin",
"version": "0.15.7",
"version": "0.15.8",
"type": "module",
"main": "dist/index.js",
"types": "src/index.ts",

View File

@@ -1,5 +1,13 @@
# jazz-betterauth-server-plugin
## 0.15.8
### Patch Changes
- Updated dependencies [3844666]
- jazz-tools@0.15.8
- cojson@0.15.8
## 0.15.7
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-betterauth-server-plugin",
"version": "0.15.7",
"version": "0.15.8",
"type": "module",
"main": "dist/index.js",
"types": "src/index.ts",

View File

@@ -1,5 +1,15 @@
# jazz-react-auth-betterauth
## 0.15.8
### Patch Changes
- Updated dependencies [3844666]
- jazz-tools@0.15.8
- jazz-auth-betterauth@0.15.8
- jazz-betterauth-client-plugin@0.15.8
- cojson@0.15.8
## 0.15.7
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-react-auth-betterauth",
"version": "0.15.7",
"version": "0.15.8",
"type": "module",
"main": "dist/index.js",
"types": "src/index.tsx",

View File

@@ -1,5 +1,15 @@
# jazz-run
## 0.15.8
### Patch Changes
- Updated dependencies [3844666]
- jazz-tools@0.15.8
- cojson@0.15.8
- cojson-storage-sqlite@0.15.8
- cojson-transport-ws@0.15.8
## 0.15.7
### Patch Changes

View File

@@ -3,7 +3,7 @@
"bin": "./dist/index.js",
"type": "module",
"license": "MIT",
"version": "0.15.7",
"version": "0.15.8",
"exports": {
"./startSyncServer": {
"import": "./dist/startSyncServer.js",
@@ -28,11 +28,11 @@
"@effect/printer-ansi": "^0.34.5",
"@effect/schema": "^0.71.1",
"@effect/typeclass": "^0.25.5",
"cojson": "workspace:0.15.7",
"cojson-storage-sqlite": "workspace:0.15.7",
"cojson-transport-ws": "workspace:0.15.7",
"cojson": "workspace:0.15.8",
"cojson-storage-sqlite": "workspace:0.15.8",
"cojson-transport-ws": "workspace:0.15.8",
"effect": "^3.6.5",
"jazz-tools": "workspace:0.15.7",
"jazz-tools": "workspace:0.15.8",
"ws": "^8.14.2"
},
"devDependencies": {

View File

@@ -1,5 +1,15 @@
# jazz-tools
## 0.15.8
### Patch Changes
- 3844666: Refactor AccountSchema types to solve "This is likely not portable. A type annotation is necessary" issue when using co.account()
- cojson@0.15.8
- cojson-storage@0.15.8
- cojson-storage-indexeddb@0.15.8
- cojson-transport-ws@0.15.8
## 0.15.7
### Patch Changes

View File

@@ -139,7 +139,7 @@
},
"type": "module",
"license": "MIT",
"version": "0.15.7",
"version": "0.15.8",
"dependencies": {
"@manuscripts/prosemirror-recreate-steps": "^0.1.4",
"@scure/base": "1.2.1",

View File

@@ -102,6 +102,8 @@ export {
type InstanceOfSchemaCoValuesNullable,
type CoValueOrZodSchema,
type Loaded,
type BaseAccountShape,
type DefaultAccountShape,
type AccountSchema,
type AnyAccountSchema,
type CoListSchema,

View File

@@ -7,22 +7,24 @@ import { z } from "../zodReExport.js";
import { Loaded, ResolveQuery } from "../zodSchema.js";
import { AnyCoMapSchema, CoMapSchema } from "./CoMapSchema.js";
export type BaseProfileShape = {
name: z.core.$ZodString<string>;
inbox?: z.core.$ZodOptional<z.core.$ZodString>;
inboxInvite?: z.core.$ZodOptional<z.core.$ZodString>;
};
export type BaseAccountShape = {
profile: AnyCoMapSchema<BaseProfileShape>;
root: AnyCoMapSchema;
};
export type DefaultAccountShape = {
profile: CoMapSchema<BaseProfileShape>;
root: CoMapSchema<{}>;
};
export type AccountSchema<
Shape extends {
profile: AnyCoMapSchema<{
name: z.core.$ZodString<string>;
inbox?: z.core.$ZodOptional<z.core.$ZodString>;
inboxInvite?: z.core.$ZodOptional<z.core.$ZodString>;
}>;
root: AnyCoMapSchema;
} = {
profile: CoMapSchema<{
name: z.core.$ZodString<string>;
inbox?: z.core.$ZodOptional<z.core.$ZodString>;
inboxInvite?: z.core.$ZodOptional<z.core.$ZodString>;
}>;
root: CoMapSchema<{}>;
},
Shape extends BaseAccountShape = DefaultAccountShape,
> = Omit<CoMapSchema<Shape>, "create" | "load" | "withMigration"> & {
builtin: "Account";

View File

@@ -1,22 +1,23 @@
import {
type Account,
AccountCreationProps,
AccountSchema,
AnyCoMapSchema,
type AccountCreationProps,
type AccountSchema,
type AnyCoMapSchema,
BaseAccountShape,
CoFeed,
CoFeedSchema,
CoListSchema,
CoMapSchema,
type CoFeedSchema,
type CoListSchema,
type CoMapSchema,
CoPlainText,
CoProfileSchema,
CoRecordSchema,
type CoProfileSchema,
type CoRecordSchema,
CoRichText,
DefaultProfileShape,
type DefaultProfileShape,
FileStream,
FileStreamSchema,
type FileStreamSchema,
ImageDefinition,
PlainTextSchema,
Simplify,
type PlainTextSchema,
type Simplify,
zodSchemaToCoSchema,
} from "../../internal.js";
import { RichTextSchema } from "./schemaTypes/RichTextSchema.js";
@@ -82,16 +83,9 @@ export const coMapDefiner = <Shape extends z.core.$ZodLooseShape>(
return enrichCoMapSchema(objectSchema);
};
function enrichAccountSchema<
Shape extends {
profile: AnyCoMapSchema<{
name: z.core.$ZodString<string>;
inbox?: z.core.$ZodOptional<z.core.$ZodString>;
inboxInvite?: z.core.$ZodOptional<z.core.$ZodString>;
}>;
root: AnyCoMapSchema;
},
>(schema: z.ZodObject<Shape, z.core.$strip>) {
function enrichAccountSchema<Shape extends BaseAccountShape>(
schema: z.ZodObject<Shape, z.core.$strip>,
) {
const enrichedSchema = Object.assign(schema, {
collaborative: true,
builtin: "Account",
@@ -142,16 +136,44 @@ function enrichAccountSchema<
return enrichedSchema;
}
export const coAccountDefiner = <
Shape extends {
profile: AnyCoMapSchema<{
name: z.core.$ZodString<string>;
inbox?: z.core.$ZodOptional<z.core.$ZodString>;
inboxInvite?: z.core.$ZodOptional<z.core.$ZodString>;
}>;
root: AnyCoMapSchema;
},
>(
/**
* Defines a collaborative account schema for Jazz applications.
*
* Creates an account schema that represents a user account with profile and root data.
* Accounts are the primary way to identify and manage users in Jazz applications.
*
* @template Shape - The shape of the account schema extending BaseAccountShape
* @param shape - The account schema shape. Defaults to a basic profile with name, inbox, and inboxInvite fields, plus an empty root object.
*
* @example
* ```typescript
* // Basic account with default profile
* const BasicAccount = co.account();
*
* // Custom account with specific profile and root structure
* const JazzAccount = co.account({
* profile: co.profile({
* name: z.string(),
* avatar: z.optional(z.string()),
* }),
* root: co.map({
* organizations: co.list(Organization),
* draftOrganization: DraftOrganization,
* }),
* }).withMigration(async (account) => {
* // Migration logic for existing accounts
* if (account.profile === undefined) {
* const group = Group.create();
* account.profile = co.profile().create(
* { name: getRandomUsername() },
* group
* );
* group.addMember("everyone", "reader");
* }
* });
* ```
*/
export const coAccountDefiner = <Shape extends BaseAccountShape>(
shape: Shape = {
profile: coMapDefiner({
name: z.string(),

10
pnpm-lock.yaml generated
View File

@@ -1620,7 +1620,7 @@ importers:
specifier: ^11.7.0
version: 11.10.0
cojson:
specifier: workspace:0.15.7
specifier: workspace:0.15.8
version: link:../cojson
cojson-storage:
specifier: workspace:*
@@ -1797,19 +1797,19 @@ importers:
specifier: ^0.25.5
version: 0.25.8(effect@3.11.9)
cojson:
specifier: workspace:0.15.7
specifier: workspace:0.15.8
version: link:../cojson
cojson-storage-sqlite:
specifier: workspace:0.15.7
specifier: workspace:0.15.8
version: link:../cojson-storage-sqlite
cojson-transport-ws:
specifier: workspace:0.15.7
specifier: workspace:0.15.8
version: link:../cojson-transport-ws
effect:
specifier: ^3.6.5
version: 3.11.9
jazz-tools:
specifier: workspace:0.15.7
specifier: workspace:0.15.8
version: link:../jazz-tools
ws:
specifier: ^8.14.2

View File

@@ -1,5 +1,12 @@
# jazz-react-tailwind-starter
## 0.0.128
### Patch Changes
- Updated dependencies [3844666]
- jazz-tools@0.15.8
## 0.0.127
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-react-passkey-auth-starter",
"private": true,
"version": "0.0.127",
"version": "0.0.128",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,12 @@
# svelte-passkey-auth
## 0.0.102
### Patch Changes
- Updated dependencies [3844666]
- jazz-tools@0.15.8
## 0.0.101
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "svelte-passkey-auth",
"version": "0.0.101",
"version": "0.0.102",
"type": "module",
"private": true,
"scripts": {