@ssgoi/react 6.6.10 → 7.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +196 -378
  2. package/package.json +2 -2
package/README.md CHANGED
@@ -1,472 +1,290 @@
1
1
  # @ssgoi/react
2
2
 
3
- React bindings for SSGOI - Native app-like page transitions for React applications.
3
+ React bindings for SSGOI.
4
4
 
5
- try this: [ssgoi.dev](https://ssgoi.dev)
5
+ [![SSGOI live showcase](https://ssgoi.dev/readme.png)](https://ssgoi.dev)
6
6
 
7
- ![https://ssgoi.dev](https://ssgoi.dev/ssgoi.gif)
8
-
9
- ## AI-Assisted Setup
10
-
11
- Using Claude, Cursor, ChatGPT, or another AI assistant? Point it at:
12
-
13
- ```
14
- https://ssgoi.dev/llms.txt
15
- ```
16
-
17
- It has the full setup guide, every transition, the API, and troubleshooting — everything an agent needs to wire SSGOI into your app.
18
-
19
- ## What is SSGOI?
20
-
21
- SSGOI brings native app-like page transitions to the web. Transform your static page navigations into smooth, delightful experiences that users love.
22
-
23
- ### ✨ Key Features
24
-
25
- - **🌍 Works Everywhere** - Unlike the browser's View Transition API, SSGOI works in all modern browsers (Chrome, Firefox, Safari)
26
- - **🚀 SSR Ready** - Perfect compatibility with Next.js. No hydration issues, SEO-friendly
27
- - **🎯 Use Your Router** - Keep your existing routing. React Router, Next.js App Router - all work seamlessly
28
- - **💾 State Persistence** - Remembers animation state during navigation, even with browser back/forward
29
- - **⚛️ React Optimized** - Built specifically for React with hooks and modern patterns
30
-
31
- ## Installation
7
+ [Live demos](https://ssgoi.dev) · [Hero, Zoom, Film, and Sheet in motion](https://ssgoi.dev/blog/view-transition-api-limitations)
32
8
 
33
9
  ```bash
34
10
  npm install @ssgoi/react
35
- # or
36
- yarn add @ssgoi/react
37
- # or
38
- pnpm add @ssgoi/react
39
11
  ```
40
12
 
41
- ## Quick Start
42
-
43
- ### 1. Wrap your app
44
-
45
- ```tsx
46
- import { Ssgoi } from "@ssgoi/react";
47
- import { fade } from "@ssgoi/react/view-transitions";
48
- import { SsgoiTransitionBoundary } from "./ssgoi-transition-boundary";
49
-
50
- const config = {
51
- transitions: [fade({ paths: ["/", "/about"] })],
52
- };
53
-
54
- export default function App() {
55
- return (
56
- <div className="relative z-0 min-h-dvh bg-white">
57
- {/* Layout shell above: positioned ancestor + stacking context for the OUT clone. */}
58
- <Ssgoi config={config}>
59
- {/* Routed content marker. Layout positioning belongs to the outer wrapper. */}
60
- <SsgoiTransitionBoundary className="min-h-full bg-white">
61
- {/* Your app */}
62
- </SsgoiTransitionBoundary>
63
- </Ssgoi>
64
- </div>
65
- );
66
- }
67
- ```
13
+ Agent setup guide: https://ssgoi.dev/llms.txt
68
14
 
69
- ### 2. Keep pages unmarked
15
+ ## Contents
70
16
 
71
- ```tsx
72
- export default function HomePage() {
73
- return (
74
- <main>
75
- <h1>Welcome</h1>
76
- {/* Page content */}
77
- </main>
78
- );
79
- }
80
- ```
17
+ - Next.js
18
+ - Persistent layouts and sliding tabs
19
+ - React Router
20
+ - TanStack Router
21
+ - Config
22
+ - Effect index
81
23
 
82
- Create one router-specific `SsgoiTransitionBoundary` utility in your layout.
83
- It reads the current pathname internally, sets the transition boundary key, and
84
- uses that pathname as a logical page id matched by config such as
85
- `/products/*`. Use `/products/**` when the parent path itself should match too.
24
+ ## Next.js
86
25
 
87
- Next.js implementation:
26
+ Keep one config and one `<Ssgoi>` above route boundaries.
88
27
 
89
28
  ```tsx
29
+ // app/ssgoi-provider.tsx
90
30
  "use client";
91
31
 
92
- import { type ElementType, type ReactNode } from "react";
93
- import { usePathname } from "next/navigation";
94
-
95
- export function SsgoiTransitionBoundary({
96
- children,
97
- as,
98
- className,
99
- }: {
100
- children: ReactNode;
101
- as?: ElementType;
102
- className?: string;
103
- }) {
104
- const pathname = usePathname();
105
- const Component = as ?? "div";
106
-
107
- return (
108
- <Component
109
- key={pathname}
110
- data-ssgoi-transition={pathname}
111
- className={className}
112
- >
113
- {children}
114
- </Component>
115
- );
116
- }
117
- ```
118
-
119
- React Router and TanStack Router use the same component body with their own
120
- pathname hook.
121
-
122
- **That's it!** Your configured pages now transition smoothly with a fade effect.
123
-
124
- ## Layout Requirements
125
-
126
- The outer element wrapping the SSGOI provider / `<Ssgoi>` needs
127
- `position: relative` and `z-index: 0` (`relative z-0` in Tailwind).
128
-
129
- When a page leaves, SSGOI clones it back into the DOM with `position: absolute`
130
- so it can animate out while the new page animates in. Without a positioned,
131
- stacking-context ancestor the clone jumps to the wrong place or falls behind the
132
- background. Add `overflow-x-clip` too if you use horizontal transitions
133
- (`slide`, `drill`). Keep these layout classes on the outer wrapper, not on the
134
- route boundary marker.
135
-
136
- ## Advanced Transitions
137
-
138
- ### Route-based Transitions
139
-
140
- Each transition factory returns a path-transition group. Drop the results straight into `config.transitions` — nested arrays are flattened automatically:
141
-
142
- ```tsx
143
- import { fade, drill, zoom } from "@ssgoi/react/view-transitions";
32
+ import { Ssgoi } from "@ssgoi/react";
33
+ import { drill, slide } from "@ssgoi/react/view-transitions";
144
34
 
145
35
  const config = {
146
36
  transitions: [
147
- // Calm cross-fade between tabs
148
- fade({ paths: ["/home", "/about"] }),
149
-
150
- // iOS-style drill-in when entering details
151
- drill({ enter: "/products/*", exit: "/products" }),
152
-
153
- // Card-to-detail zoom (needs matching data-zoom-*-key)
154
- zoom({ paths: ["/gallery", "/photo/*"], type: "expand" }),
37
+ { on: "/posts/**", except: "/posts", transition: drill() },
38
+ {
39
+ ordered: ["/products/all", "/products/electronics", "/products/fashion"],
40
+ transition: slide(),
41
+ },
155
42
  ],
156
43
  };
157
- ```
158
-
159
- Transitions come in three shapes:
160
-
161
- - **`{ paths }`** — symmetric: every pair animates with the same physics (`fade`, `hero`, `zoom`, `blind`, `film`, `rotate`, `strip`, `jaemin`)
162
- - **`{ enter, exit, type? }`** — directional: enter and exit get different physics (`drill`, `sheet`)
163
- - **`{ paths }`** — ordered: path order decides forward / back direction (`slide`, `scroll`, `axis`)
164
44
 
165
- ### Individual Element Animations
45
+ export function SsgoiProvider({ children }) {
46
+ return <Ssgoi config={config}>{children}</Ssgoi>;
47
+ }
48
+ ```
166
49
 
167
- Animate specific elements during mount/unmount with `transition()`:
50
+ Build the layout shell next:
168
51
 
169
52
  ```tsx
170
- import { transition } from "@ssgoi/react";
171
- import { fade, slide } from "@ssgoi/react/transitions";
53
+ // app/layout.tsx
54
+ import { SsgoiProvider } from "./ssgoi-provider";
172
55
 
173
- function Card() {
56
+ export default function RootLayout({ children }) {
174
57
  return (
175
- <div
176
- ref={transition({
177
- key: "card",
178
- in: fade(),
179
- out: slide({ direction: "up" }),
180
- })}
181
- >
182
- <h2>Animated Card</h2>
183
- </div>
58
+ <html>
59
+ <body>
60
+ <main className="relative z-0 min-h-dvh overflow-x-clip">
61
+ <SsgoiProvider>{children}</SsgoiProvider>
62
+ </main>
63
+ </body>
64
+ </html>
184
65
  );
185
66
  }
186
67
  ```
187
68
 
188
- ### Auto Key Plugin
69
+ When React removes an outgoing route, SSGOI temporarily reinserts that
70
+ detached DOM node with `position: absolute`. `relative` gives it a containing
71
+ block, `z-0` creates the local stacking context, and `overflow-x-clip` prevents
72
+ horizontal transition flashes. These classes belong on the shell around
73
+ `<Ssgoi>`, not on route boundaries.
74
+
75
+ ### Route boundary
189
76
 
190
- The Auto Key Plugin automatically generates unique keys for your transitions based on the file location (`file:line:column`), eliminating the need to manually provide keys.
77
+ A React route boundary is a keyed element marked with a route id:
191
78
 
192
- **Benefits:**
79
+ ```tsx
80
+ <div key={boundary.key} data-ssgoi-transition={boundary.id}>
81
+ {children}
82
+ </div>
83
+ ```
193
84
 
194
- - **Automatic Key Generation**: No need to manually specify `key` in `transition()` calls
195
- - **Collision-Free**: Keys are based on exact code location
196
- - **Cleaner Code**: Less boilerplate in your components
85
+ - Changing `key` makes React unmount the old region and mount the new one.
86
+ - The attribute identifies those regions for SSGOI config matching.
87
+ - `<Ssgoi>` observes that lifecycle and runs OUT/IN; it does not navigate or
88
+ change the key.
197
89
 
198
- **⚠️ Important**: For list items rendered with `.map()`, just use JSX key prop - the plugin automatically appends it to generate unique keys.
90
+ The legacy `<SsgoiTransition>` wrapper only added this attribute and is
91
+ deprecated. Set `data-ssgoi-transition` directly on the keyed application
92
+ boundary.
199
93
 
200
- #### Setup with Next.js
94
+ Create a router-aware utility in the application. Keep its route logic behind
95
+ semantic names so layouts cannot invent inconsistent keys:
201
96
 
202
97
  ```tsx
203
- // next.config.ts
204
- import type { NextConfig } from "next";
205
- import SsgoiAutoKey from "@ssgoi/react/unplugin/webpack";
206
-
207
- const nextConfig: NextConfig = {
208
- webpack: (config) => {
209
- config.plugins.push(SsgoiAutoKey());
210
- return config;
211
- },
212
- };
213
-
214
- export default nextConfig;
215
- ```
98
+ // app/ssgoi-route-boundary.tsx
99
+ "use client";
216
100
 
217
- #### Setup with Vite
101
+ import { type ReactNode } from "react";
102
+ import { usePathname, useSelectedLayoutSegments } from "next/navigation";
218
103
 
219
- ```ts
220
- // vite.config.ts
221
- import { defineConfig } from "vite";
222
- import react from "@vitejs/plugin-react";
223
- import SsgoiAutoKey from "@ssgoi/react/unplugin/vite";
104
+ type BoundaryName = "app-shell" | "main-content" | "project-content";
105
+ type BoundaryIdentity = { id: string; key: string };
224
106
 
225
- export default defineConfig({
226
- plugins: [react(), SsgoiAutoKey()],
227
- });
228
- ```
107
+ const INTERCEPTION_PREFIX = /^(?:\(\.\.\.\)|\(\.\.\)|\(\.\))+/;
229
108
 
230
- #### Usage Examples
109
+ function isRouteGroup(segment: string) {
110
+ return segment.startsWith("(") && segment.endsWith(")");
111
+ }
231
112
 
232
- **WITH Auto Key Plugin (Recommended):**
113
+ function pathFromSegments(segments: string[]) {
114
+ const path = segments
115
+ .filter((segment) => !isRouteGroup(segment))
116
+ .map((segment) => segment.replace(INTERCEPTION_PREFIX, ""))
117
+ .filter(Boolean)
118
+ .join("/");
233
119
 
234
- ```tsx
235
- import { transition } from "@ssgoi/react";
236
- import { fade, slide } from "@ssgoi/react/transitions";
120
+ return path ? `/${path}` : null;
121
+ }
237
122
 
238
- function SimpleCard() {
239
- return (
240
- <div ref={transition(fade())}>
241
- <h2>Fades in on mount</h2>
242
- </div>
243
- );
123
+ function resolveBoundary(
124
+ name: BoundaryName,
125
+ pathname: string,
126
+ segments: string[],
127
+ ): BoundaryIdentity {
128
+ const ownedRoute = pathFromSegments(segments) ?? pathname;
129
+
130
+ switch (name) {
131
+ case "app-shell": {
132
+ const routeGroup = segments.find(isRouteGroup);
133
+ if (routeGroup === "(main)") {
134
+ return { id: ownedRoute, key: "main-shell" };
135
+ }
136
+
137
+ const project = ownedRoute.match(/^\/projects\/[^/]+/)?.[0];
138
+ return { id: ownedRoute, key: project ?? ownedRoute };
139
+ }
140
+ case "project-content": {
141
+ const project = pathname.match(/^\/projects\/[^/]+/)?.[0];
142
+ const child = pathFromSegments(segments);
143
+ const id = project
144
+ ? child
145
+ ? `${project}${child}`
146
+ : project
147
+ : ownedRoute;
148
+ return { id, key: id };
149
+ }
150
+ case "main-content":
151
+ return { id: ownedRoute, key: ownedRoute };
152
+ }
244
153
  }
245
- ```
246
154
 
247
- **WITHOUT Auto Key Plugin:**
155
+ export function SsgoiRouteBoundary({
156
+ children,
157
+ name,
158
+ }: {
159
+ children: ReactNode;
160
+ name: BoundaryName;
161
+ }) {
162
+ const pathname = usePathname();
163
+ const segments = useSelectedLayoutSegments("children");
164
+ const boundary = resolveBoundary(name, pathname, segments);
248
165
 
249
- ```tsx
250
- // Explicit key required for transition state tracking
251
- function Card() {
252
166
  return (
253
- <div
254
- ref={transition({
255
- key: "my-card",
256
- ...fade(),
257
- })}
258
- >
259
- <h2>Animated Card</h2>
167
+ <div key={boundary.key} data-ssgoi-transition={boundary.id}>
168
+ {children}
260
169
  </div>
261
170
  );
262
171
  }
263
172
  ```
264
173
 
265
- **List Items:**
174
+ ## Persistent layouts
175
+
176
+ Place one named boundary in the common app layout, then add child boundaries
177
+ only around routed content that changes while its parent remains mounted.
266
178
 
267
179
  ```tsx
268
- // In .map() lists, just use JSX key - the plugin appends it automatically
269
- function List() {
270
- return (
271
- <ul>
272
- {items.map((item) => (
273
- <li
274
- key={item.id} // JSX key is enough - plugin generates file:line:col:${key}
275
- ref={transition(fade())}
276
- >
277
- {item.name}
278
- </li>
279
- ))}
280
- </ul>
281
- );
282
- }
180
+ // app/layout.tsx — replace the provider line from the shell example.
181
+ <SsgoiProvider>
182
+ <SsgoiRouteBoundary name="app-shell">{children}</SsgoiRouteBoundary>
183
+ </SsgoiProvider>
283
184
  ```
284
185
 
285
- ## Next.js App Router Example
286
-
287
186
  ```tsx
288
- // app/ssgoi-provider.tsx
289
- "use client";
290
-
291
- import { type ReactNode } from "react";
292
- import { Ssgoi } from "@ssgoi/react";
293
- import { drill, fade } from "@ssgoi/react/view-transitions";
294
- import { SsgoiTransitionBoundary } from "./ssgoi-transition-boundary";
295
-
296
- const config = {
297
- transitions: [
298
- drill({ enter: "/post/*", exit: "*" }),
299
- fade({ paths: ["/", "/about"] }),
300
- ],
301
- };
302
-
303
- export function SsgoiProvider({ children }: { children: ReactNode }) {
304
- return (
305
- <Ssgoi config={config}>
306
- <SsgoiTransitionBoundary className="min-h-full bg-white">
307
- {children}
308
- </SsgoiTransitionBoundary>
309
- </Ssgoi>
310
- );
311
- }
312
-
313
- // app/layout.tsx
314
- import { type ReactNode } from "react";
315
- import { SsgoiProvider } from "./ssgoi-provider";
316
-
317
- export default function RootLayout({ children }: { children: ReactNode }) {
187
+ // app/(main)/layout.tsx
188
+ export default function MainLayout({ children }) {
318
189
  return (
319
- <html>
320
- <body>
321
- <main className="relative z-0 min-h-screen bg-white">
322
- <SsgoiProvider>{children}</SsgoiProvider>
323
- </main>
324
- </body>
325
- </html>
190
+ <>
191
+ <SsgoiRouteBoundary name="main-content">{children}</SsgoiRouteBoundary>
192
+ <BottomNav />
193
+ </>
326
194
  );
327
195
  }
328
196
  ```
329
197
 
330
- ```tsx
331
- // app/page.tsx
332
- export default function Page() {
333
- return <main>{/* Your page content */}</main>;
334
- }
335
- ```
336
-
337
- ## API Reference
338
-
339
- ### Components
340
-
341
- #### `<Ssgoi>`
342
-
343
- The provider component that manages transition context.
344
-
345
- ```tsx
346
- <Ssgoi config={ssgoiConfig}>{children}</Ssgoi>
198
+ - Main → main: only the inner content boundary changes; the nav stays.
199
+ - Main → detail: the common app-shell key changes; the nav leaves with it.
200
+ - Project tab → project tab: the current project base-path key stays; a project
201
+ content boundary can change below its header and tabs.
202
+
203
+ Use Next.js route groups to describe layout ownership, not to duplicate the
204
+ outer boundary:
205
+
206
+ ```text
207
+ app/
208
+ layout.tsx # one <Ssgoi> + one named app-shell boundary
209
+ (main)/layout.tsx
210
+ (main)/page.tsx
211
+ (main)/search/page.tsx
212
+ (detail)/post/[id]/page.tsx
347
213
  ```
348
214
 
349
- #### Route boundary
350
-
351
- Use one route boundary utility inside `<Ssgoi>`. It sets
352
- `data-ssgoi-transition` from the current pathname internally, so individual page
353
- components do not need transition markers.
354
-
355
- ```tsx
356
- <SsgoiTransitionBoundary className="min-h-full bg-white">
357
- {children}
358
- </SsgoiTransitionBoundary>
359
- ```
215
+ For Next.js parallel and intercepting routes, the browser pathname may point at
216
+ a modal while the background `children` slot has not changed. Resolve that
217
+ boundary’s id/key from `useSelectedLayoutSegments("children")`. In the layout
218
+ that owns `@modal`, `useSelectedLayoutSegment("modal") !== null` is an explicit
219
+ active-modal check. A soft intercept keeps the background key; direct entry to
220
+ the same URL resolves to the detail slot and receives a detail key.
360
221
 
361
- ### Hooks
222
+ Full pattern: https://ssgoi.dev/llms/bottom-nav.txt
362
223
 
363
- #### `useTransition()`
224
+ ## React Router
364
225
 
365
- Access transition state and controls.
226
+ Replace `usePathname()` with `useLocation()` and render the boundary in a
227
+ nested layout route:
366
228
 
367
229
  ```tsx
368
- const { isTransitioning, direction } = useTransition();
369
- ```
370
-
371
- ### Functions
372
-
373
- #### `transition()`
230
+ const { pathname } = useLocation();
374
231
 
375
- Apply transitions to individual elements.
376
-
377
- ```tsx
378
- <div
379
- ref={transition({
380
- key: "unique-key",
381
- in: fade(),
382
- out: fade(),
383
- })}
384
- >
385
- Content
386
- </div>
232
+ return (
233
+ <div key={pathname} data-ssgoi-transition={pathname}>
234
+ <Outlet />
235
+ </div>
236
+ );
387
237
  ```
388
238
 
389
- ## Built-in Transitions
390
-
391
- ### Page Transitions (`@ssgoi/react/view-transitions`)
392
-
393
- - `fade()` - Calm cross-fade. Safe default for unrelated pages
394
- - `drill()` - iOS-style hierarchical navigation (list → detail)
395
- - `slide()` - Horizontal push for tabs / sequential flows
396
- - `scroll()` - Vertical page scroll for onboarding / paginated views
397
- - `axis()` - Material/Flutter shared-axis swap for sibling/tab routes
398
- - `sheet()` - Bottom sheet that slides up (modal-like flows)
399
- - `hero()` - Shared element transition (matching `data-hero-enter-key` / `data-hero-exit-key`)
400
- - `zoom()` - Card-to-detail expansion (matching `data-zoom-enter-key` / `data-zoom-exit-key`)
401
- - `strip()` - 3D Y-axis perspective flip
402
- - `blind()` - Window-blinds wipe reveal
403
- - `film()` - Cinematic shrink + tile (gallery / lightbox)
404
- - `rotate()` - Card flip between siblings
405
- - `jaemin()` - Playful rotated zoom for special moments
406
-
407
- ### Element Transitions (`@ssgoi/react/transitions`)
408
-
409
- - `fade()` - Fade in/out
410
- - `scale()` - Scale in/out
411
- - `slide()` - Slide (direction: up/down/left/right)
412
- - `rotate()` - Rotate
413
- - `bounce()` - Bounce
414
- - `blur()` - Blur
415
- - `fly()` - Fly (custom x, y position)
239
+ ## TanStack Router
416
240
 
417
- ## Spring Physics Configuration
418
-
419
- All transitions use spring physics for natural motion:
241
+ Read the pathname from router state and place the boundary in a parent route:
420
242
 
421
243
  ```tsx
422
- slide({
423
- direction: "left",
424
- spring: {
425
- stiffness: 300, // 1-1000, higher = faster
426
- damping: 30, // 0-100, higher = less oscillation
427
- },
244
+ const pathname = useRouterState({
245
+ select: (state) => state.location.pathname,
428
246
  });
429
247
  ```
430
248
 
431
- ## TypeScript Support
432
-
433
- SSGOI is written in TypeScript and provides full type definitions:
249
+ ## Config
434
250
 
435
- ```tsx
436
- import type { SsgoiConfig, TransitionConfig } from "@ssgoi/react";
251
+ ```ts
252
+ import { drill, slide, zoom } from "@ssgoi/react/view-transitions";
437
253
 
438
- const config: SsgoiConfig = {
439
- // Full type safety
254
+ const config = {
255
+ transitions: [
256
+ { on: "/posts/**", except: "/posts", transition: drill() },
257
+ { from: "/gallery", to: "/gallery/*", transition: zoom() },
258
+ { ordered: ["/tabs/a", "/tabs/b"], transition: slide() },
259
+ ],
440
260
  };
441
261
  ```
442
262
 
443
- ## Browser Support
444
-
445
- - Chrome/Edge 88+
446
- - Firefox 78+
447
- - Safari 14+
448
- - All modern mobile browsers
449
-
450
- ## Performance
451
-
452
- - Minimal bundle size (~8kb gzipped)
453
- - Hardware-accelerated animations
454
- - Automatic cleanup and memory management
455
- - Smart preloading for instant transitions
263
+ - `on`: route family.
264
+ - `from`/`to`: precise pair.
265
+ - `ordered`: directional sequence.
266
+ - Patterns support exact paths, a `*` path segment, and suffix `**`.
267
+ - `priority` overrides path specificity.
456
268
 
457
- ## Documentation
269
+ ## Effect index
458
270
 
459
- Visit [https://ssgoi.dev](https://ssgoi.dev) for:
271
+ - `fade`: unrelated pages.
272
+ - `drill`: list → detail.
273
+ - `slide`: ordered tabs.
274
+ - `axis`: sibling destinations.
275
+ - `sheet`: modal-like routes.
276
+ - `zoom`: card/image → detail.
277
+ - `hero`: shared elements and page chrome.
278
+ - `scroll`: vertical sequences.
279
+ - `strip`, `film`, `rotate`, `blind`, `jaemin`: expressive transitions.
460
280
 
461
- - Complete API reference
462
- - Interactive examples
463
- - Advanced patterns
464
- - Migration guides
281
+ References: https://ssgoi.dev/llms.txt#7-transition-index
465
282
 
466
- ## Contributing
283
+ ## Low-level APIs
467
284
 
468
- We welcome contributions! Please see our [contributing guide](https://github.com/meursyphus/ssgoi/blob/main/CONTRIBUTING.md) for details.
285
+ `transition()` and the auto-key plugins remain available for element-level
286
+ mount/unmount animations; they are separate from route boundaries.
469
287
 
470
288
  ## License
471
289
 
472
- MIT © [MeurSyphus](https://github.com/meursyphus)
290
+ MIT
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ssgoi/react",
3
- "version": "6.6.10",
3
+ "version": "7.0.0-beta.1",
4
4
  "description": "React bindings for SSGOI - Native app-like page transitions for React applications",
5
5
  "private": false,
6
6
  "type": "module",
@@ -66,7 +66,7 @@
66
66
  "dependencies": {
67
67
  "unplugin": "^2.3.2",
68
68
  "@babel/core": "^7.26.10",
69
- "@ssgoi/core": "^6.6.10"
69
+ "@ssgoi/core": "^7.0.0-beta.1"
70
70
  },
71
71
  "devDependencies": {
72
72
  "@types/babel__core": "^7.20.5",