@ssgoi/vue 2.0.0
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.
- package/README.md +351 -0
- package/dist/context.cjs +1 -0
- package/dist/context.d.ts +3 -0
- package/dist/context.js +13 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +9 -0
- package/dist/presets/index.cjs +1 -0
- package/dist/presets/index.d.ts +1 -0
- package/dist/presets/index.js +1 -0
- package/dist/ssgoi-transition.vue.cjs +1 -0
- package/dist/ssgoi-transition.vue.d.ts +20 -0
- package/dist/ssgoi-transition.vue.js +23 -0
- package/dist/ssgoi-transition.vue2.cjs +1 -0
- package/dist/ssgoi-transition.vue2.js +4 -0
- package/dist/ssgoi.vue.cjs +1 -0
- package/dist/ssgoi.vue.d.ts +21 -0
- package/dist/ssgoi.vue.js +20 -0
- package/dist/ssgoi.vue2.cjs +1 -0
- package/dist/ssgoi.vue2.js +4 -0
- package/dist/transition.cjs +1 -0
- package/dist/transition.d.ts +6 -0
- package/dist/transition.js +24 -0
- package/dist/transitions/index.cjs +1 -0
- package/dist/transitions/index.d.ts +1 -0
- package/dist/transitions/index.js +1 -0
- package/dist/types.cjs +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.js +1 -0
- package/dist/view-transitions/index.cjs +1 -0
- package/dist/view-transitions/index.d.ts +1 -0
- package/dist/view-transitions/index.js +1 -0
- package/dist/vite.svg +1 -0
- package/package.json +100 -0
package/README.md
ADDED
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
# @ssgoi/vue
|
|
2
|
+
|
|
3
|
+
Vue bindings for SSGOI - Native app-like page transitions for Vue applications.
|
|
4
|
+
|
|
5
|
+
try this: [ssgoi.dev](https://ssgoi.dev)
|
|
6
|
+
|
|
7
|
+

|
|
8
|
+
|
|
9
|
+
## What is SSGOI?
|
|
10
|
+
|
|
11
|
+
SSGOI brings native app-like page transitions to the web. Transform your static page navigations into smooth, delightful experiences that users love.
|
|
12
|
+
|
|
13
|
+
### ✨ Key Features
|
|
14
|
+
|
|
15
|
+
- **🌍 Works Everywhere** - Unlike the browser's View Transition API, SSGOI works in all modern browsers (Chrome, Firefox, Safari)
|
|
16
|
+
- **🚀 SSR Ready** - Perfect compatibility with Nuxt. No hydration issues, SEO-friendly
|
|
17
|
+
- **🎯 Use Your Router** - Keep your existing routing. Vue Router, Nuxt - all work seamlessly
|
|
18
|
+
- **💾 State Persistence** - Remembers animation state during navigation, even with browser back/forward
|
|
19
|
+
- **🖖 Vue Optimized** - Built specifically for Vue 3 with Composition API and custom directives
|
|
20
|
+
|
|
21
|
+
## Installation
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install @ssgoi/vue
|
|
25
|
+
# or
|
|
26
|
+
yarn add @ssgoi/vue
|
|
27
|
+
# or
|
|
28
|
+
pnpm add @ssgoi/vue
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Quick Start
|
|
32
|
+
|
|
33
|
+
### 1. Wrap your app
|
|
34
|
+
|
|
35
|
+
```vue
|
|
36
|
+
<template>
|
|
37
|
+
<Ssgoi :config="config">
|
|
38
|
+
<div style="position: relative">
|
|
39
|
+
<!-- Your app -->
|
|
40
|
+
<RouterView />
|
|
41
|
+
</div>
|
|
42
|
+
</Ssgoi>
|
|
43
|
+
</template>
|
|
44
|
+
|
|
45
|
+
<script setup>
|
|
46
|
+
import { Ssgoi } from '@ssgoi/vue';
|
|
47
|
+
import { fade } from '@ssgoi/vue/view-transitions';
|
|
48
|
+
|
|
49
|
+
const config = {
|
|
50
|
+
defaultTransition: fade()
|
|
51
|
+
};
|
|
52
|
+
</script>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 2. Wrap your pages
|
|
56
|
+
|
|
57
|
+
```vue
|
|
58
|
+
<template>
|
|
59
|
+
<SsgoiTransition id="/">
|
|
60
|
+
<h1>Welcome</h1>
|
|
61
|
+
<!-- Page content -->
|
|
62
|
+
</SsgoiTransition>
|
|
63
|
+
</template>
|
|
64
|
+
|
|
65
|
+
<script setup>
|
|
66
|
+
import { SsgoiTransition } from '@ssgoi/vue';
|
|
67
|
+
</script>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**That's it!** Your pages now transition smoothly with a fade effect.
|
|
71
|
+
|
|
72
|
+
## Advanced Transitions
|
|
73
|
+
|
|
74
|
+
### Route-based Transitions
|
|
75
|
+
|
|
76
|
+
Define different transitions for different routes:
|
|
77
|
+
|
|
78
|
+
```javascript
|
|
79
|
+
const config = {
|
|
80
|
+
transitions: [
|
|
81
|
+
// Slide between tabs
|
|
82
|
+
{ from: '/home', to: '/about', transition: slide({ direction: 'left' }) },
|
|
83
|
+
{ from: '/about', to: '/home', transition: slide({ direction: 'right' }) },
|
|
84
|
+
|
|
85
|
+
// Scale up when entering details
|
|
86
|
+
{ from: '/products', to: '/products/*', transition: scale() },
|
|
87
|
+
|
|
88
|
+
// Pinterest-style image transitions
|
|
89
|
+
{ from: '/gallery', to: '/photo/*', transition: pinterest() }
|
|
90
|
+
],
|
|
91
|
+
defaultTransition: fade()
|
|
92
|
+
};
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Symmetric Transitions
|
|
96
|
+
|
|
97
|
+
Automatically create bidirectional transitions:
|
|
98
|
+
|
|
99
|
+
```javascript
|
|
100
|
+
{
|
|
101
|
+
from: '/home',
|
|
102
|
+
to: '/about',
|
|
103
|
+
transition: slide({ direction: 'left' }),
|
|
104
|
+
symmetric: true // Automatically creates reverse transition
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Individual Element Animations
|
|
109
|
+
|
|
110
|
+
Animate specific elements during mount/unmount:
|
|
111
|
+
|
|
112
|
+
#### Method 1: Using Vue Directive (Recommended)
|
|
113
|
+
|
|
114
|
+
```vue
|
|
115
|
+
<template>
|
|
116
|
+
<div v-transition="{
|
|
117
|
+
key: 'card',
|
|
118
|
+
in: fadeIn(),
|
|
119
|
+
out: slideUp()
|
|
120
|
+
}">
|
|
121
|
+
<h2>Animated Card</h2>
|
|
122
|
+
</div>
|
|
123
|
+
</template>
|
|
124
|
+
|
|
125
|
+
<script setup>
|
|
126
|
+
import { vTransition as vTransitionDirective } from '@ssgoi/vue';
|
|
127
|
+
import { fadeIn, slideUp } from '@ssgoi/vue/transitions';
|
|
128
|
+
|
|
129
|
+
// Local directive registration
|
|
130
|
+
const vTransition = vTransitionDirective;
|
|
131
|
+
</script>
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Global Registration (in your main.ts/app.ts):**
|
|
135
|
+
```javascript
|
|
136
|
+
import { createApp } from 'vue';
|
|
137
|
+
import { vTransition } from '@ssgoi/vue';
|
|
138
|
+
import App from './App.vue';
|
|
139
|
+
|
|
140
|
+
const app = createApp(App);
|
|
141
|
+
|
|
142
|
+
// Register the directive globally
|
|
143
|
+
app.directive('transition', vTransition);
|
|
144
|
+
|
|
145
|
+
app.mount('#app');
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
#### Method 2: Using Composition API
|
|
149
|
+
|
|
150
|
+
```vue
|
|
151
|
+
<template>
|
|
152
|
+
<div ref="cardRef">
|
|
153
|
+
<h2>Animated Card</h2>
|
|
154
|
+
</div>
|
|
155
|
+
</template>
|
|
156
|
+
|
|
157
|
+
<script setup>
|
|
158
|
+
import { ref, onMounted, onUnmounted } from 'vue';
|
|
159
|
+
import { transition } from '@ssgoi/vue';
|
|
160
|
+
import { fadeIn, slideUp } from '@ssgoi/vue/transitions';
|
|
161
|
+
|
|
162
|
+
const cardRef = ref();
|
|
163
|
+
let cleanup;
|
|
164
|
+
|
|
165
|
+
onMounted(() => {
|
|
166
|
+
cleanup = transition({
|
|
167
|
+
key: 'card',
|
|
168
|
+
in: fadeIn(),
|
|
169
|
+
out: slideUp()
|
|
170
|
+
})(cardRef.value);
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
onUnmounted(() => {
|
|
174
|
+
cleanup?.();
|
|
175
|
+
});
|
|
176
|
+
</script>
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## Nuxt 3 Example
|
|
180
|
+
|
|
181
|
+
```vue
|
|
182
|
+
<!-- app.vue -->
|
|
183
|
+
<template>
|
|
184
|
+
<Ssgoi :config="config">
|
|
185
|
+
<div style="position: relative; min-height: 100vh">
|
|
186
|
+
<NuxtPage />
|
|
187
|
+
</div>
|
|
188
|
+
</Ssgoi>
|
|
189
|
+
</template>
|
|
190
|
+
|
|
191
|
+
<script setup>
|
|
192
|
+
import { Ssgoi } from '@ssgoi/vue';
|
|
193
|
+
import { slide } from '@ssgoi/vue/view-transitions';
|
|
194
|
+
|
|
195
|
+
const config = {
|
|
196
|
+
defaultTransition: slide({ direction: 'left' })
|
|
197
|
+
};
|
|
198
|
+
</script>
|
|
199
|
+
|
|
200
|
+
<!-- pages/index.vue -->
|
|
201
|
+
<template>
|
|
202
|
+
<SsgoiTransition id="/">
|
|
203
|
+
<!-- Your page content -->
|
|
204
|
+
</SsgoiTransition>
|
|
205
|
+
</template>
|
|
206
|
+
|
|
207
|
+
<script setup>
|
|
208
|
+
import { SsgoiTransition } from '@ssgoi/vue';
|
|
209
|
+
</script>
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## API Reference
|
|
213
|
+
|
|
214
|
+
### Components
|
|
215
|
+
|
|
216
|
+
#### `<Ssgoi>`
|
|
217
|
+
The provider component that manages transition context.
|
|
218
|
+
|
|
219
|
+
```vue
|
|
220
|
+
<Ssgoi :config="ssgoiConfig">
|
|
221
|
+
<!-- children -->
|
|
222
|
+
</Ssgoi>
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Props:
|
|
226
|
+
- `config` - Transition configuration object
|
|
227
|
+
|
|
228
|
+
#### `<SsgoiTransition>`
|
|
229
|
+
Wrapper component for pages that should transition.
|
|
230
|
+
|
|
231
|
+
```vue
|
|
232
|
+
<SsgoiTransition id="/page-id">
|
|
233
|
+
<!-- children -->
|
|
234
|
+
</SsgoiTransition>
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
Props:
|
|
238
|
+
- `id` - Unique identifier for the page (required)
|
|
239
|
+
|
|
240
|
+
### Composables
|
|
241
|
+
|
|
242
|
+
#### `useSsgoi()`
|
|
243
|
+
Access transition context and state.
|
|
244
|
+
|
|
245
|
+
```javascript
|
|
246
|
+
import { useSsgoi } from '@ssgoi/vue';
|
|
247
|
+
|
|
248
|
+
const ssgoi = useSsgoi();
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Directives
|
|
252
|
+
|
|
253
|
+
#### `v-transition`
|
|
254
|
+
Apply transitions to individual elements.
|
|
255
|
+
|
|
256
|
+
```vue
|
|
257
|
+
<div v-transition="{
|
|
258
|
+
key: 'unique-key',
|
|
259
|
+
in: fadeIn(),
|
|
260
|
+
out: fadeOut()
|
|
261
|
+
}">
|
|
262
|
+
Content
|
|
263
|
+
</div>
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Functions
|
|
267
|
+
|
|
268
|
+
#### `transition()`
|
|
269
|
+
Apply transitions programmatically.
|
|
270
|
+
|
|
271
|
+
```javascript
|
|
272
|
+
const cleanup = transition({
|
|
273
|
+
key: 'unique-key',
|
|
274
|
+
in: fadeIn(),
|
|
275
|
+
out: fadeOut()
|
|
276
|
+
})(element);
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
## Built-in Transitions
|
|
280
|
+
|
|
281
|
+
### Page Transitions (`@ssgoi/vue/view-transitions`)
|
|
282
|
+
- `fade()` - Smooth opacity transition
|
|
283
|
+
- `slide()` - Directional sliding (left/right/up/down)
|
|
284
|
+
- `scale()` - Zoom in/out effect
|
|
285
|
+
- `hero()` - Shared element transitions
|
|
286
|
+
- `pinterest()` - Pinterest-style expand effect
|
|
287
|
+
- `ripple()` - Material Design ripple effect
|
|
288
|
+
|
|
289
|
+
### Element Transitions (`@ssgoi/vue/transitions`)
|
|
290
|
+
- `fadeIn()` / `fadeOut()`
|
|
291
|
+
- `slideUp()` / `slideDown()` / `slideLeft()` / `slideRight()`
|
|
292
|
+
- `scaleIn()` / `scaleOut()`
|
|
293
|
+
- `bounce()`
|
|
294
|
+
- `blur()`
|
|
295
|
+
- `rotate()`
|
|
296
|
+
|
|
297
|
+
## Spring Physics Configuration
|
|
298
|
+
|
|
299
|
+
All transitions use spring physics for natural motion:
|
|
300
|
+
|
|
301
|
+
```javascript
|
|
302
|
+
slide({
|
|
303
|
+
direction: 'left',
|
|
304
|
+
spring: {
|
|
305
|
+
stiffness: 300, // 1-1000, higher = faster
|
|
306
|
+
damping: 30 // 0-100, higher = less oscillation
|
|
307
|
+
}
|
|
308
|
+
})
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
## TypeScript Support
|
|
312
|
+
|
|
313
|
+
SSGOI is written in TypeScript and provides full type definitions:
|
|
314
|
+
|
|
315
|
+
```typescript
|
|
316
|
+
import type { SsgoiConfig, TransitionConfig } from '@ssgoi/vue';
|
|
317
|
+
|
|
318
|
+
const config: SsgoiConfig = {
|
|
319
|
+
// Full type safety
|
|
320
|
+
};
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
## Browser Support
|
|
324
|
+
|
|
325
|
+
- Chrome/Edge 88+
|
|
326
|
+
- Firefox 78+
|
|
327
|
+
- Safari 14+
|
|
328
|
+
- All modern mobile browsers
|
|
329
|
+
|
|
330
|
+
## Performance
|
|
331
|
+
|
|
332
|
+
- Minimal bundle size (~8kb gzipped)
|
|
333
|
+
- Hardware-accelerated animations
|
|
334
|
+
- Automatic cleanup and memory management
|
|
335
|
+
- Smart preloading for instant transitions
|
|
336
|
+
|
|
337
|
+
## Documentation
|
|
338
|
+
|
|
339
|
+
Visit [https://ssgoi.dev](https://ssgoi.dev) for:
|
|
340
|
+
- Complete API reference
|
|
341
|
+
- Interactive examples
|
|
342
|
+
- Advanced patterns
|
|
343
|
+
- Migration guides
|
|
344
|
+
|
|
345
|
+
## Contributing
|
|
346
|
+
|
|
347
|
+
We welcome contributions! Please see our [contributing guide](https://github.com/meursyphus/ssgoi/blob/main/CONTRIBUTING.md) for details.
|
|
348
|
+
|
|
349
|
+
## License
|
|
350
|
+
|
|
351
|
+
MIT © [MeurSyphus](https://github.com/meursyphus)
|
package/dist/context.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),t=Symbol("ssgoi-context"),s=o=>{e.provide(t,o)},i=()=>{const o=e.inject(t);if(!o)throw new Error("useSsgoi must be used within Ssgoi component");return o};exports.provideSsgoi=s;exports.useSsgoi=i;
|
package/dist/context.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { provide as e, inject as s } from "vue";
|
|
2
|
+
const t = Symbol("ssgoi-context"), n = (o) => {
|
|
3
|
+
e(t, o);
|
|
4
|
+
}, r = () => {
|
|
5
|
+
const o = s(t);
|
|
6
|
+
if (!o)
|
|
7
|
+
throw new Error("useSsgoi must be used within Ssgoi component");
|
|
8
|
+
return o;
|
|
9
|
+
};
|
|
10
|
+
export {
|
|
11
|
+
n as provideSsgoi,
|
|
12
|
+
r as useSsgoi
|
|
13
|
+
};
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./transition.cjs"),i=require("./ssgoi.vue.cjs"),e=require("./ssgoi-transition.vue.cjs");exports.transition=t.transition;exports.vTransition=t.vTransition;exports.Ssgoi=i.default;exports.SsgoiTransition=e.default;
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { transition as t, vTransition as i } from "./transition.js";
|
|
2
|
+
import { default as s } from "./ssgoi.vue.js";
|
|
3
|
+
import { default as e } from "./ssgoi-transition.vue.js";
|
|
4
|
+
export {
|
|
5
|
+
s as Ssgoi,
|
|
6
|
+
e as SsgoiTransition,
|
|
7
|
+
t as transition,
|
|
8
|
+
i as vTransition
|
|
9
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("@ssgoi/core/presets");Object.keys(t).forEach(e=>{e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:()=>t[e]})});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '@ssgoi/core/presets';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "@ssgoi/core/presets";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("vue"),r=require("./transition.cjs"),a=require("./context.cjs"),u=["data-ssgoi-transition"],c=t.defineComponent({__name:"ssgoi-transition",props:{id:{}},setup(i){const n=i,o=a.useSsgoi(),s=t.computed(()=>({...o(n.id),key:n.id}));return(e,d)=>t.withDirectives((t.openBlock(),t.createElementBlock("div",{"data-ssgoi-transition":e.id},[t.renderSlot(e.$slots,"default")],8,u)),[[t.unref(r.vTransition),s.value]])}});exports.default=c;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
id: string;
|
|
3
|
+
}
|
|
4
|
+
declare function __VLS_template(): {
|
|
5
|
+
attrs: Partial<{}>;
|
|
6
|
+
slots: {
|
|
7
|
+
default?(_: {}): any;
|
|
8
|
+
};
|
|
9
|
+
refs: {};
|
|
10
|
+
rootEl: HTMLDivElement;
|
|
11
|
+
};
|
|
12
|
+
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
13
|
+
declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
14
|
+
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
15
|
+
export default _default;
|
|
16
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
17
|
+
new (): {
|
|
18
|
+
$slots: S;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { defineComponent as e, computed as r, withDirectives as a, createElementBlock as c, openBlock as d, renderSlot as p, unref as m } from "vue";
|
|
2
|
+
import { vTransition as u } from "./transition.js";
|
|
3
|
+
import { useSsgoi as f } from "./context.js";
|
|
4
|
+
const l = ["data-ssgoi-transition"], k = /* @__PURE__ */ e({
|
|
5
|
+
__name: "ssgoi-transition",
|
|
6
|
+
props: {
|
|
7
|
+
id: {}
|
|
8
|
+
},
|
|
9
|
+
setup(i) {
|
|
10
|
+
const o = i, n = f(), s = r(() => ({
|
|
11
|
+
...n(o.id),
|
|
12
|
+
key: o.id
|
|
13
|
+
}));
|
|
14
|
+
return (t, g) => a((d(), c("div", { "data-ssgoi-transition": t.id }, [
|
|
15
|
+
p(t.$slots, "default")
|
|
16
|
+
], 8, l)), [
|
|
17
|
+
[m(u), s.value]
|
|
18
|
+
]);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
export {
|
|
22
|
+
k as default
|
|
23
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./ssgoi-transition.vue.cjs");exports.default=e.default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),c=require("./context.cjs"),s=require("@ssgoi/core"),u=e.defineComponent({__name:"ssgoi",props:{config:{}},setup(t){const o=t,n=e.computed(()=>s.createSggoiTransitionContext(o.config));return e.watchEffect(()=>{c.provideSsgoi(n.value)}),(r,i)=>(e.openBlock(),e.createElementBlock("div",null,[e.renderSlot(r.$slots,"default")]))}});exports.default=u;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { SsgoiConfig } from './types';
|
|
2
|
+
interface Props {
|
|
3
|
+
config: SsgoiConfig;
|
|
4
|
+
}
|
|
5
|
+
declare function __VLS_template(): {
|
|
6
|
+
attrs: Partial<{}>;
|
|
7
|
+
slots: {
|
|
8
|
+
default?(_: {}): any;
|
|
9
|
+
};
|
|
10
|
+
refs: {};
|
|
11
|
+
rootEl: HTMLDivElement;
|
|
12
|
+
};
|
|
13
|
+
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
14
|
+
declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
15
|
+
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
16
|
+
export default _default;
|
|
17
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
18
|
+
new (): {
|
|
19
|
+
$slots: S;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineComponent as r, computed as c, watchEffect as i, createElementBlock as s, openBlock as p, renderSlot as a } from "vue";
|
|
2
|
+
import { provideSsgoi as f } from "./context.js";
|
|
3
|
+
import { createSggoiTransitionContext as l } from "@ssgoi/core";
|
|
4
|
+
const _ = /* @__PURE__ */ r({
|
|
5
|
+
__name: "ssgoi",
|
|
6
|
+
props: {
|
|
7
|
+
config: {}
|
|
8
|
+
},
|
|
9
|
+
setup(o) {
|
|
10
|
+
const e = o, t = c(() => l(e.config));
|
|
11
|
+
return i(() => {
|
|
12
|
+
f(t.value);
|
|
13
|
+
}), (n, m) => (p(), s("div", null, [
|
|
14
|
+
a(n.$slots, "default")
|
|
15
|
+
]));
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
export {
|
|
19
|
+
_ as default
|
|
20
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./ssgoi.vue.cjs");exports.default=e.default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("@ssgoi/core"),o=s.transition,r={mounted(n,t){if(!t.value){console.warn("[SSGOI] v-transition directive requires a configuration object");return}const e=t.value;setTimeout(()=>{const i=o(e)(n);n._ssgoiCleanup=i},0)},unmounted(n){const t=n._ssgoiCleanup;t&&(t(),delete n._ssgoiCleanup)}};exports.transition=o;exports.vTransition=r;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { transition as _transition, Transition, TransitionKey } from '@ssgoi/core';
|
|
2
|
+
import { Directive } from 'vue';
|
|
3
|
+
export declare const transition: typeof _transition;
|
|
4
|
+
export declare const vTransition: Directive<HTMLElement, Transition & {
|
|
5
|
+
key: TransitionKey;
|
|
6
|
+
}>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { transition as s } from "@ssgoi/core";
|
|
2
|
+
const e = s, r = {
|
|
3
|
+
mounted(n, t) {
|
|
4
|
+
if (!t.value) {
|
|
5
|
+
console.warn(
|
|
6
|
+
"[SSGOI] v-transition directive requires a configuration object"
|
|
7
|
+
);
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
const o = t.value;
|
|
11
|
+
setTimeout(() => {
|
|
12
|
+
const i = e(o)(n);
|
|
13
|
+
n._ssgoiCleanup = i;
|
|
14
|
+
}, 0);
|
|
15
|
+
},
|
|
16
|
+
unmounted(n) {
|
|
17
|
+
const t = n._ssgoiCleanup;
|
|
18
|
+
t && (t(), delete n._ssgoiCleanup);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
export {
|
|
22
|
+
e as transition,
|
|
23
|
+
r as vTransition
|
|
24
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("@ssgoi/core/transitions");Object.keys(t).forEach(e=>{e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:()=>t[e]})});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '@ssgoi/core/transitions';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "@ssgoi/core/transitions";
|
package/dist/types.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '@ssgoi/core/types';
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("@ssgoi/core/view-transitions");Object.keys(t).forEach(e=>{e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:()=>t[e]})});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '@ssgoi/core/view-transitions';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "@ssgoi/core/view-transitions";
|
package/dist/vite.svg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|
package/package.json
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ssgoi/vue",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "Vue bindings for SSGOI - Native app-like page transitions for Vue applications",
|
|
5
|
+
"private": false,
|
|
6
|
+
"type": "module",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist",
|
|
9
|
+
"!dist/**/*.test.*",
|
|
10
|
+
"!dist/**/*.spec.*"
|
|
11
|
+
],
|
|
12
|
+
"main": "./dist/index.cjs",
|
|
13
|
+
"module": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"import": "./dist/index.js",
|
|
19
|
+
"require": "./dist/index.cjs",
|
|
20
|
+
"default": "./dist/index.js"
|
|
21
|
+
},
|
|
22
|
+
"./transitions": {
|
|
23
|
+
"types": "./dist/transitions/index.d.ts",
|
|
24
|
+
"import": "./dist/transitions/index.js",
|
|
25
|
+
"require": "./dist/transitions/index.cjs",
|
|
26
|
+
"default": "./dist/transitions/index.js"
|
|
27
|
+
},
|
|
28
|
+
"./view-transitions": {
|
|
29
|
+
"types": "./dist/view-transitions/index.d.ts",
|
|
30
|
+
"import": "./dist/view-transitions/index.js",
|
|
31
|
+
"require": "./dist/view-transitions/index.cjs",
|
|
32
|
+
"default": "./dist/view-transitions/index.js"
|
|
33
|
+
},
|
|
34
|
+
"./types": {
|
|
35
|
+
"types": "./dist/types.d.ts",
|
|
36
|
+
"import": "./dist/types.js",
|
|
37
|
+
"require": "./dist/types.cjs",
|
|
38
|
+
"default": "./dist/types.js"
|
|
39
|
+
},
|
|
40
|
+
"./presets": {
|
|
41
|
+
"types": "./dist/presets/index.d.ts",
|
|
42
|
+
"import": "./dist/presets/index.js",
|
|
43
|
+
"require": "./dist/presets/index.cjs",
|
|
44
|
+
"default": "./dist/presets/index.js"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"scripts": {
|
|
48
|
+
"dev": "vite build --watch",
|
|
49
|
+
"build": "vue-tsc -b && vite build",
|
|
50
|
+
"watch": "vite build --watch",
|
|
51
|
+
"lint": "eslint .",
|
|
52
|
+
"preview": "vite preview",
|
|
53
|
+
"package": "vite build",
|
|
54
|
+
"prepare": "pnpm run build"
|
|
55
|
+
},
|
|
56
|
+
"dependencies": {
|
|
57
|
+
"@ssgoi/core": "workspace:*"
|
|
58
|
+
},
|
|
59
|
+
"peerDependencies": {
|
|
60
|
+
"vue": "^3.5.0"
|
|
61
|
+
},
|
|
62
|
+
"devDependencies": {
|
|
63
|
+
"@eslint/js": "^9.30.1",
|
|
64
|
+
"@vitejs/plugin-vue": "^6.0.0",
|
|
65
|
+
"@vue/tsconfig": "^0.7.0",
|
|
66
|
+
"eslint": "^9.30.1",
|
|
67
|
+
"eslint-plugin-vue": "^9.33.0",
|
|
68
|
+
"globals": "^16.3.0",
|
|
69
|
+
"rollup-plugin-preserve-directives": "^0.4.0",
|
|
70
|
+
"typescript": "~5.8.3",
|
|
71
|
+
"typescript-eslint": "^8.35.1",
|
|
72
|
+
"vite": "^7.0.4",
|
|
73
|
+
"vite-plugin-dts": "^4.5.4",
|
|
74
|
+
"vue-tsc": "^2.2.12"
|
|
75
|
+
},
|
|
76
|
+
"keywords": [
|
|
77
|
+
"vue",
|
|
78
|
+
"page-transition",
|
|
79
|
+
"animation",
|
|
80
|
+
"ssgoi",
|
|
81
|
+
"spring-physics"
|
|
82
|
+
],
|
|
83
|
+
"author": "MeurSyphus <tmdeoans@snu.ac.kr>",
|
|
84
|
+
"license": "MIT",
|
|
85
|
+
"repository": {
|
|
86
|
+
"type": "git",
|
|
87
|
+
"url": "git+https://github.com/meursyphus/ssgoi.git",
|
|
88
|
+
"directory": "packages/vue"
|
|
89
|
+
},
|
|
90
|
+
"homepage": "https://ssgoi.dev",
|
|
91
|
+
"bugs": {
|
|
92
|
+
"url": "https://github.com/meursyphus/ssgoi/issues"
|
|
93
|
+
},
|
|
94
|
+
"publishConfig": {
|
|
95
|
+
"access": "public"
|
|
96
|
+
},
|
|
97
|
+
"engines": {
|
|
98
|
+
"node": ">=18.0.0"
|
|
99
|
+
}
|
|
100
|
+
}
|