use-scroll-animate 3.7.0 → 3.9.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.
Files changed (129) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +1 -0
  3. package/README_ja.md +1 -0
  4. package/README_zh.md +1 -0
  5. package/dist/chunks/{base-BpROOcey.js → base-BRIPyPtX.js} +11 -2
  6. package/dist/chunks/{base-BpROOcey.js.map → base-BRIPyPtX.js.map} +1 -1
  7. package/dist/chunks/{base-CXx7jZ-o.cjs → base-Dm6ee5ug.cjs} +11 -1
  8. package/dist/chunks/{base-CXx7jZ-o.cjs.map → base-Dm6ee5ug.cjs.map} +1 -1
  9. package/dist/chunks/bind-B_CTL6Qn.js +22 -0
  10. package/dist/chunks/bind-B_CTL6Qn.js.map +1 -0
  11. package/dist/chunks/bind-Ui43-n2d.cjs +25 -0
  12. package/dist/chunks/bind-Ui43-n2d.cjs.map +1 -0
  13. package/dist/chunks/{core-IaorbTdu.cjs → core-CHAtivHV.cjs} +2 -2
  14. package/dist/chunks/{core-IaorbTdu.cjs.map → core-CHAtivHV.cjs.map} +1 -1
  15. package/dist/chunks/{core-uxs3ETou.js → core-CYozf_E-.js} +2 -2
  16. package/dist/chunks/{core-uxs3ETou.js.map → core-CYozf_E-.js.map} +1 -1
  17. package/dist/chunks/{index-tags-BANJ-e4H.js → index-tags-BmQR17Sb.js} +2 -1
  18. package/dist/chunks/{index-tags-BANJ-e4H.js.map → index-tags-BmQR17Sb.js.map} +1 -1
  19. package/dist/chunks/{index-tags-wbuPiMR6.cjs → index-tags-DYYsgbba.cjs} +2 -1
  20. package/dist/chunks/{index-tags-wbuPiMR6.cjs.map → index-tags-DYYsgbba.cjs.map} +1 -1
  21. package/dist/chunks/{spring-2OTnYCzm.cjs → spring-Dp5BllPB.cjs} +2 -2
  22. package/dist/chunks/{spring-2OTnYCzm.cjs.map → spring-Dp5BllPB.cjs.map} +1 -1
  23. package/dist/chunks/{spring-C-fw7_9f.js → spring-UBPhrh1X.js} +2 -2
  24. package/dist/chunks/{spring-C-fw7_9f.js.map → spring-UBPhrh1X.js.map} +1 -1
  25. package/dist/chunks/{variants-CHe1VbSn.js → variants-DTypaOH3.js} +2 -2
  26. package/dist/chunks/{variants-CHe1VbSn.js.map → variants-DTypaOH3.js.map} +1 -1
  27. package/dist/chunks/{variants-BNIrn4ch.cjs → variants-_dC-ey6R.cjs} +2 -2
  28. package/dist/chunks/{variants-BNIrn4ch.cjs.map → variants-_dC-ey6R.cjs.map} +1 -1
  29. package/dist/components/angular.cjs +68 -0
  30. package/dist/components/angular.cjs.map +1 -0
  31. package/dist/components/angular.d.cts +1687 -0
  32. package/dist/components/angular.d.ts +1687 -0
  33. package/dist/components/angular.js +62 -0
  34. package/dist/components/angular.js.map +1 -0
  35. package/dist/components/background.cjs +2 -2
  36. package/dist/components/background.js +3 -3
  37. package/dist/components/cards.cjs +2 -2
  38. package/dist/components/cards.js +3 -3
  39. package/dist/components/click.cjs +2 -2
  40. package/dist/components/click.js +3 -3
  41. package/dist/components/depth.cjs +3 -3
  42. package/dist/components/depth.js +4 -4
  43. package/dist/components/feedback.cjs +1 -1
  44. package/dist/components/feedback.js +2 -2
  45. package/dist/components/gesture.cjs +3 -3
  46. package/dist/components/gesture.js +5 -5
  47. package/dist/components/interaction.cjs +1 -1
  48. package/dist/components/interaction.js +2 -2
  49. package/dist/components/jsx.d.cts +1 -0
  50. package/dist/components/jsx.d.ts +1 -0
  51. package/dist/components/layout.cjs +1 -1
  52. package/dist/components/layout.js +2 -2
  53. package/dist/components/lazy.cjs +2 -1
  54. package/dist/components/lazy.cjs.map +1 -1
  55. package/dist/components/lazy.d.cts +1 -0
  56. package/dist/components/lazy.d.ts +1 -0
  57. package/dist/components/lazy.js +2 -1
  58. package/dist/components/lazy.js.map +1 -1
  59. package/dist/components/packs.cjs +194 -0
  60. package/dist/components/packs.cjs.map +1 -0
  61. package/dist/components/packs.css +3 -0
  62. package/dist/components/packs.d.cts +107 -0
  63. package/dist/components/packs.d.ts +107 -0
  64. package/dist/components/packs.js +185 -0
  65. package/dist/components/packs.js.map +1 -0
  66. package/dist/components/page.cjs +2 -2
  67. package/dist/components/page.js +3 -3
  68. package/dist/components/physics.cjs +2 -2
  69. package/dist/components/physics.js +4 -4
  70. package/dist/components/react.cjs +1 -1
  71. package/dist/components/react.js +1 -1
  72. package/dist/components/reveal.cjs +1 -1
  73. package/dist/components/reveal.js +2 -2
  74. package/dist/components/solid.cjs +63 -0
  75. package/dist/components/solid.cjs.map +1 -0
  76. package/dist/components/solid.d.cts +1718 -0
  77. package/dist/components/solid.d.ts +1718 -0
  78. package/dist/components/solid.js +59 -0
  79. package/dist/components/solid.js.map +1 -0
  80. package/dist/components/svelte.cjs +60 -0
  81. package/dist/components/svelte.cjs.map +1 -0
  82. package/dist/components/svelte.d.cts +1686 -0
  83. package/dist/components/svelte.d.ts +1686 -0
  84. package/dist/components/svelte.js +56 -0
  85. package/dist/components/svelte.js.map +1 -0
  86. package/dist/components/svg.cjs +1 -1
  87. package/dist/components/svg.js +2 -2
  88. package/dist/components/text.cjs +1 -1
  89. package/dist/components/text.js +2 -2
  90. package/dist/components/timeline.cjs +1 -1
  91. package/dist/components/timeline.js +2 -2
  92. package/dist/components/transitions.cjs +5 -1
  93. package/dist/components/transitions.cjs.map +1 -1
  94. package/dist/components/transitions.d.cts +2 -0
  95. package/dist/components/transitions.d.ts +2 -0
  96. package/dist/components/transitions.js +6 -2
  97. package/dist/components/transitions.js.map +1 -1
  98. package/dist/components/ui.cjs +3 -3
  99. package/dist/components/ui.js +5 -5
  100. package/dist/components/vue.cjs +6 -5
  101. package/dist/components/vue.cjs.map +1 -1
  102. package/dist/components/vue.d.cts +25 -0
  103. package/dist/components/vue.d.ts +25 -0
  104. package/dist/components/vue.js +6 -5
  105. package/dist/components/vue.js.map +1 -1
  106. package/dist/components/webgl.cjs +1 -1
  107. package/dist/components/webgl.js +2 -2
  108. package/dist/components.cjs +14 -5
  109. package/dist/components.cjs.map +1 -1
  110. package/dist/components.css +1 -0
  111. package/dist/components.d.cts +65 -2
  112. package/dist/components.d.ts +65 -2
  113. package/dist/components.js +11 -8
  114. package/dist/components.js.map +1 -1
  115. package/dist/components.umd.js +2 -2
  116. package/dist/components.umd.js.map +1 -1
  117. package/dist/index.cjs +7 -0
  118. package/dist/index.cjs.map +1 -1
  119. package/dist/index.d.cts +2 -0
  120. package/dist/index.d.ts +2 -0
  121. package/dist/index.js +7 -0
  122. package/dist/index.js.map +1 -1
  123. package/dist/index.umd.js +2 -2
  124. package/dist/index.umd.js.map +1 -1
  125. package/docs/components.md +24 -0
  126. package/docs/frameworks-ssr.md +36 -0
  127. package/docs/hybrid-apps.md +130 -0
  128. package/docs/upgrading-4.md +65 -0
  129. package/package.json +43 -2
@@ -0,0 +1,130 @@
1
+ # Hybrid & desktop apps: MAUI, Flutter WebView, Electron, Tauri
2
+
3
+ `<usa-*>` components are plain Web Components (Custom Elements + CSS + Web Animations): anything that hosts a modern web view can run them, with **no bundler** if you want — copy `dist/components.umd.js` (and optionally `dist/components.css`) next to your HTML. For WinUI 3 / WPF / WinForms with WebView2 see [windows-apps.md](./windows-apps.md).
4
+
5
+ General rules for every host:
6
+
7
+ - **Load locally, not from a CDN**, so the app works offline and passes store review: ship `components.umd.js` as an asset and reference it with a relative URL.
8
+ - **Strict CSP is fine**: styles are adopted as constructable stylesheets. If you load `components.css` yourself, call `configureComponents({ injectStyles: false })`.
9
+ - **Reduced motion follows the OS** (`prefers-reduced-motion`) inside every web view listed here. To mirror an in-app setting, call `setMotionIntensity('off' | 'low' | 'normal' | 'high')` (or `configureComponents({ reducedMotion: 'reduce' })`) from the native side.
10
+ - **Performance**: canvas / WebGL effects (`<usa-shader>`, `<usa-liquid>`, backgrounds) render only while visible and cap DPR at 2; they fall back to CSS where WebGL is unavailable (some Android web views).
11
+ - **Native ↔ web**: listen to `usa:*` events in JS and forward them over the host bridge (examples below).
12
+
13
+ ## .NET MAUI
14
+
15
+ MAUI 9+ has `HybridWebView` (raw HTML + JS bridge); `BlazorWebView` also works (Razor renders the tags; enable the elements in `wwwroot/index.html`).
16
+
17
+ ```text
18
+ Resources/Raw/wwwroot/
19
+ index.html
20
+ components.umd.js ← copied from node_modules/use-scroll-animate/dist/
21
+ ```
22
+
23
+ ```xml
24
+ <!-- MainPage.xaml -->
25
+ <HybridWebView x:Name="Web" DefaultFile="index.html" RawMessageReceived="OnMessage" />
26
+ ```
27
+
28
+ ```html
29
+ <!-- Resources/Raw/wwwroot/index.html -->
30
+ <script src="components.umd.js"></script>
31
+ <script src="_framework/hybridwebview.js"></script>
32
+ <usa-toggle id="t"></usa-toggle>
33
+ <script>
34
+ document.getElementById('t').addEventListener('usa:change', (e) =>
35
+ window.HybridWebView.SendRawMessage(JSON.stringify({ checked: e.detail.checked })));
36
+ </script>
37
+ ```
38
+
39
+ ```csharp
40
+ void OnMessage(object s, HybridWebViewRawMessageReceivedEventArgs e) => Debug.WriteLine(e.Message);
41
+ // native → web
42
+ await Web.EvaluateJavaScriptAsync("UsaComponents.setMotionIntensity('low')");
43
+ ```
44
+
45
+ Notes: Android uses the system WebView (Chromium) — keep it updated; iOS / Mac Catalyst use WKWebView (Safari engine), where `linear()` spring easings fall back to cubic-bezier automatically.
46
+
47
+ ## Flutter (webview_flutter / flutter_inappwebview)
48
+
49
+ ```yaml
50
+ # pubspec.yaml
51
+ dependencies:
52
+ webview_flutter: ^4.10.0
53
+ flutter:
54
+ assets:
55
+ - assets/web/index.html
56
+ - assets/web/components.umd.js
57
+ ```
58
+
59
+ ```dart
60
+ final controller = WebViewController()
61
+ ..setJavaScriptMode(JavaScriptMode.unrestricted)
62
+ ..addJavaScriptChannel('Usa', onMessageReceived: (m) => debugPrint(m.message))
63
+ ..loadFlutterAsset('assets/web/index.html');
64
+
65
+ // native → web (e.g. follow the platform's "reduce motion" setting)
66
+ final reduce = MediaQuery.of(context).disableAnimations;
67
+ controller.runJavaScript("UsaComponents.setMotionIntensity('${reduce ? 'off' : 'normal'}')");
68
+ ```
69
+
70
+ ```html
71
+ <!-- assets/web/index.html -->
72
+ <script src="components.umd.js"></script>
73
+ <usa-like id="like"></usa-like>
74
+ <script>
75
+ document.getElementById('like').addEventListener('usa:change', (e) => Usa.postMessage(JSON.stringify(e.detail)));
76
+ </script>
77
+ ```
78
+
79
+ `loadFlutterAsset` serves from a `file://`-like origin; ES-module builds (`components.js`) need an HTTP origin, so prefer the UMD file here. On Flutter Web you can use the components directly in `web/index.html` via `HtmlElementView`.
80
+
81
+ ## Electron
82
+
83
+ The renderer is Chromium — use the npm package with your bundler, or the UMD file without one.
84
+
85
+ ```js
86
+ // renderer.js (bundled)
87
+ import { defineComponents, configureComponents } from 'use-scroll-animate/components';
88
+ configureComponents({ injectStyles: true });
89
+ defineComponents();
90
+ ```
91
+
92
+ ```js
93
+ // main.js — keep contextIsolation on; expose only what you need
94
+ new BrowserWindow({ webPreferences: { preload: path.join(__dirname, 'preload.js'), contextIsolation: true, sandbox: true } });
95
+ ```
96
+
97
+ ```js
98
+ // preload.js — forward component events to the main process
99
+ const { contextBridge, ipcRenderer } = require('electron');
100
+ contextBridge.exposeInMainWorld('usaBridge', { send: (type, detail) => ipcRenderer.send('usa', type, detail) });
101
+ ```
102
+
103
+ Imports are SSR-safe (no `window` access at import time), so the same modules can be imported in preload scripts.
104
+
105
+ ## Tauri (v2)
106
+
107
+ ```js
108
+ // src/main.js (Vite)
109
+ import { defineComponents } from 'use-scroll-animate/components';
110
+ import { invoke } from '@tauri-apps/api/core';
111
+ defineComponents();
112
+ document.querySelector('usa-toggle').addEventListener('usa:change', (e) => invoke('set_setting', { on: e.detail.checked }));
113
+ ```
114
+
115
+ ```json
116
+ // tauri.conf.json — a strict CSP works (constructable stylesheets)
117
+ { "app": { "security": { "csp": "default-src 'self'; style-src 'self'; script-src 'self'" } } }
118
+ ```
119
+
120
+ Tauri uses WebView2 on Windows, WKWebView on macOS / iOS and WebKitGTK on Linux. WebKitGTK may disable WebGL on some drivers: WebGL components then set `data-fallback="webgl"` and show their CSS fallback.
121
+
122
+ ## Framework wrappers
123
+
124
+ | Framework | Entry | What it gives you |
125
+ |---|---|---|
126
+ | React | `use-scroll-animate/components/react` | `createUsaComponents(React)` typed wrappers |
127
+ | Vue | `use-scroll-animate/components/vue` | `UsaPlugin`, `isUsaElement` |
128
+ | Svelte | `use-scroll-animate/components/svelte` | `use:usa={{ props, on }}` action, `defineUsa()` |
129
+ | Solid | `use-scroll-animate/components/solid` | `use:usa` directive, `defineUsa()`, JSX types |
130
+ | Angular | `use-scroll-animate/components/angular` | `usaInitializer()` for `APP_INITIALIZER`, `usaDetail()`; use `CUSTOM_ELEMENTS_SCHEMA` |
@@ -0,0 +1,65 @@
1
+ # Upgrading to 4.0
2
+
3
+ 4.0 removes the three APIs that 3.9 deprecated, each replaced by a more capable one added during 3.x. **Run your app on 3.9 first**: it logs one console warning (`[use-scroll-animate] … deprecated …`) for every removed API you still use.
4
+
5
+ | Removed in 4.0 | Use instead | Since |
6
+ |---|---|---|
7
+ | `sequence(steps, opts)` (`use-scroll-animate`) | `timeline()` — `use-scroll-animate` (re-exported in 4.0) or `use-scroll-animate/components/timeline` | 3.1 |
8
+ | `connectedAnimation(from, to)` (`components/transitions`) | `sharedTransition(update)` with `data-shared="id"` (`components/layout`) | 3.6 |
9
+ | `<usa-flip-list>` / `defineFlipList()` (`components/transitions`) | `<usa-auto-animate>` / `autoAnimate(el)` (`components/layout`) | 3.6 |
10
+
11
+ ## `sequence()` → `timeline()`
12
+
13
+ ```js
14
+ // 3.x
15
+ sequence([
16
+ { target: '.title', animation: 'fade-in-up' },
17
+ { target: '.subtitle', animation: 'blur-in', gap: -300 },
18
+ { target: '.card', animation: 'scale-up', stagger: 80 },
19
+ ], { trigger: '.hero' });
20
+
21
+ // 4.0
22
+ import { timeline } from 'use-scroll-animate';
23
+ const tl = timeline({ defaults: { duration: 600 } })
24
+ .to('.title', 'fade-up')
25
+ .to('.subtitle', 'blur', { at: '-=300' }) // gap: -300 → at: '-=300'
26
+ .to('.card', 'scale', { stagger: 80 });
27
+ // trigger: '.hero' → play when it enters the view (or scrub it with scroll)
28
+ new IntersectionObserver(([e], io) => e.isIntersecting && (io.disconnect(), tl.play())).observe(document.querySelector('.hero'));
29
+ ```
30
+
31
+ Declaratively: wrap the section in `<usa-timeline>` and mark steps with `data-tl="fade-up"`, `data-at="-=300"`.
32
+
33
+ `gap: n` → `at: '+=n'` (negative → `'-=n'`), `at: ms` stays `at: ms`. Engine presets map to timeline presets: `fade-in-up` → `fade-up`, `blur-in` → `blur`, `scale-up` → `scale`, or pass keyframes.
34
+
35
+ ## `connectedAnimation()` → `sharedTransition()`
36
+
37
+ ```js
38
+ // 3.x
39
+ detail.hidden = false;
40
+ connectedAnimation(thumbnail, detail);
41
+
42
+ // 4.0 — give both ends the same data-shared id
43
+ // <img data-shared="photo-7"> in the grid and in the detail view
44
+ import { sharedTransition } from 'use-scroll-animate/components/layout';
45
+ await sharedTransition(() => { grid.hidden = true; detail.hidden = false; });
46
+ ```
47
+
48
+ Uses the View Transitions API where available (FLIP fallback elsewhere) and morphs any number of shared elements at once.
49
+
50
+ ## `<usa-flip-list>` → `<usa-auto-animate>`
51
+
52
+ ```html
53
+ <!-- 3.x -->
54
+ <usa-flip-list><li>…</li></usa-flip-list>
55
+ <!-- 4.0 -->
56
+ <usa-auto-animate><li>…</li></usa-auto-animate>
57
+ ```
58
+
59
+ `<usa-auto-animate>` also animates additions and removals, and size changes. Imperatively: `autoAnimate(ul)`.
60
+
61
+ ## Other changes in 4.0
62
+
63
+ - `timeline` is exported from the root entry (`import { timeline } from 'use-scroll-animate'`) in addition to `components/timeline`.
64
+ - CDN snippets in docs and the showcase use `use-scroll-animate@4`.
65
+ - npm `latest` moves to 4.0.0. 3.x stays available as `use-scroll-animate@3`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "use-scroll-animate",
3
- "version": "3.7.0",
3
+ "version": "3.9.0",
4
4
  "description": "A lightweight, high-performance, dependency-free scroll animation library and animated UI components (Web Components) for the web and Windows web-view apps.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -248,6 +248,16 @@
248
248
  "default": "./dist/components/layout.cjs"
249
249
  }
250
250
  },
251
+ "./components/packs": {
252
+ "import": {
253
+ "types": "./dist/components/packs.d.ts",
254
+ "default": "./dist/components/packs.js"
255
+ },
256
+ "require": {
257
+ "types": "./dist/components/packs.d.cts",
258
+ "default": "./dist/components/packs.cjs"
259
+ }
260
+ },
251
261
  "./components/react": {
252
262
  "import": {
253
263
  "types": "./dist/components/react.d.ts",
@@ -268,6 +278,36 @@
268
278
  "default": "./dist/components/vue.cjs"
269
279
  }
270
280
  },
281
+ "./components/svelte": {
282
+ "import": {
283
+ "types": "./dist/components/svelte.d.ts",
284
+ "default": "./dist/components/svelte.js"
285
+ },
286
+ "require": {
287
+ "types": "./dist/components/svelte.d.cts",
288
+ "default": "./dist/components/svelte.cjs"
289
+ }
290
+ },
291
+ "./components/solid": {
292
+ "import": {
293
+ "types": "./dist/components/solid.d.ts",
294
+ "default": "./dist/components/solid.js"
295
+ },
296
+ "require": {
297
+ "types": "./dist/components/solid.d.cts",
298
+ "default": "./dist/components/solid.cjs"
299
+ }
300
+ },
301
+ "./components/angular": {
302
+ "import": {
303
+ "types": "./dist/components/angular.d.ts",
304
+ "default": "./dist/components/angular.js"
305
+ },
306
+ "require": {
307
+ "types": "./dist/components/angular.d.cts",
308
+ "default": "./dist/components/angular.cjs"
309
+ }
310
+ },
271
311
  "./components/jsx": {
272
312
  "import": {
273
313
  "types": "./dist/components/jsx.d.ts",
@@ -306,6 +346,7 @@
306
346
  "./components/webgl.css": "./dist/components/webgl.css",
307
347
  "./components/depth.css": "./dist/components/depth.css",
308
348
  "./components/layout.css": "./dist/components/layout.css",
349
+ "./components/packs.css": "./dist/components/packs.css",
309
350
  "./package.json": "./package.json"
310
351
  },
311
352
  "files": [
@@ -326,7 +367,7 @@
326
367
  "typecheck": "tsc --noEmit -p .",
327
368
  "test": "vitest run",
328
369
  "check:exports": "node scripts/check-exports.mjs",
329
- "lint:package": "publint && attw --pack . --profile node16 --exclude-entrypoints ./components.css ./components/reveal.css ./components/text.css ./components/interaction.css ./components/feedback.css ./components/background.css ./components/transitions.css ./components/physics.css ./components/cards.css ./components/click.css ./components/ui.css ./components/page.css ./components/timeline.css ./components/gesture.css ./components/svg.css ./components/webgl.css ./components/depth.css ./components/layout.css",
370
+ "lint:package": "publint && attw --pack . --profile node16 --exclude-entrypoints ./components.css ./components/reveal.css ./components/text.css ./components/interaction.css ./components/feedback.css ./components/background.css ./components/transitions.css ./components/physics.css ./components/cards.css ./components/click.css ./components/ui.css ./components/page.css ./components/timeline.css ./components/gesture.css ./components/svg.css ./components/webgl.css ./components/depth.css ./components/layout.css ./components/packs.css",
330
371
  "size": "node scripts/size.mjs",
331
372
  "prepublishOnly": "npm run typecheck && npm test && npm run build && npm run check:exports",
332
373
  "size:check": "node scripts/size.mjs --check",