use-scroll-animate 2.7.0 → 2.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.
- package/CHANGELOG.md +34 -0
- package/README.md +4 -4
- package/README_ja.md +2 -2
- package/README_zh.md +3 -3
- package/dist/chunks/{base-BR6fYLBA.cjs → base-BkQcvoSG.cjs} +29 -1
- package/dist/chunks/{base-BR6fYLBA.cjs.map → base-BkQcvoSG.cjs.map} +1 -1
- package/dist/chunks/{base-D6zLiNGH.js → base-CB8gChoe.js} +29 -2
- package/dist/chunks/{base-D6zLiNGH.js.map → base-CB8gChoe.js.map} +1 -1
- package/dist/chunks/{core-B_J4rXbC.cjs → core-C1cEwjJj.cjs} +11 -2
- package/dist/chunks/core-C1cEwjJj.cjs.map +1 -0
- package/dist/chunks/{core-BP-a1iNc.js → core-J_KM443q.js} +12 -3
- package/dist/chunks/core-J_KM443q.js.map +1 -0
- package/dist/chunks/index-tags-BEM98giN.cjs +20 -0
- package/dist/chunks/index-tags-BEM98giN.cjs.map +1 -0
- package/dist/chunks/index-tags-f37txHmb.js +18 -0
- package/dist/chunks/index-tags-f37txHmb.js.map +1 -0
- package/dist/chunks/{spring-DyHe1Hfa.cjs → spring-7U9MC6yQ.cjs} +2 -2
- package/dist/chunks/{spring-DyHe1Hfa.cjs.map → spring-7U9MC6yQ.cjs.map} +1 -1
- package/dist/chunks/{spring-C2Megtcf.js → spring-ka0YJ_ZR.js} +2 -2
- package/dist/chunks/{spring-C2Megtcf.js.map → spring-ka0YJ_ZR.js.map} +1 -1
- package/dist/chunks/{stagger-DTv_WiUQ.js → stagger-CGF18oNs.js} +2 -2
- package/dist/chunks/{stagger-DTv_WiUQ.js.map → stagger-CGF18oNs.js.map} +1 -1
- package/dist/chunks/{stagger-DHw0ExuR.cjs → stagger-DtKKS6GP.cjs} +2 -2
- package/dist/chunks/{stagger-DHw0ExuR.cjs.map → stagger-DtKKS6GP.cjs.map} +1 -1
- package/dist/chunks/variants-Ce9CboVc.js +35 -0
- package/dist/chunks/variants-Ce9CboVc.js.map +1 -0
- package/dist/chunks/variants-PsCXbQ5h.cjs +39 -0
- package/dist/chunks/variants-PsCXbQ5h.cjs.map +1 -0
- package/dist/components/background.cjs +277 -11
- package/dist/components/background.cjs.map +1 -1
- package/dist/components/background.css +3 -1
- package/dist/components/background.d.cts +64 -3
- package/dist/components/background.d.ts +64 -3
- package/dist/components/background.js +274 -13
- package/dist/components/background.js.map +1 -1
- package/dist/components/cards.cjs +2 -2
- package/dist/components/cards.js +3 -3
- package/dist/components/click.cjs +2 -2
- package/dist/components/click.js +3 -3
- package/dist/components/feedback.cjs +15 -8
- package/dist/components/feedback.cjs.map +1 -1
- package/dist/components/feedback.d.cts +4 -1
- package/dist/components/feedback.d.ts +4 -1
- package/dist/components/feedback.js +16 -9
- package/dist/components/feedback.js.map +1 -1
- package/dist/components/interaction.cjs +1 -1
- package/dist/components/interaction.js +2 -2
- package/dist/components/jsx.cjs +3 -0
- package/dist/components/jsx.cjs.map +1 -0
- package/dist/components/jsx.d.cts +45 -0
- package/dist/components/jsx.d.ts +45 -0
- package/dist/components/jsx.js +2 -0
- package/dist/components/jsx.js.map +1 -0
- package/dist/components/lazy.cjs +84 -0
- package/dist/components/lazy.cjs.map +1 -0
- package/dist/components/lazy.d.cts +40 -0
- package/dist/components/lazy.d.ts +40 -0
- package/dist/components/lazy.js +79 -0
- package/dist/components/lazy.js.map +1 -0
- package/dist/components/page.cjs +2 -2
- package/dist/components/page.js +3 -3
- package/dist/components/physics.cjs +2 -2
- package/dist/components/physics.js +4 -4
- package/dist/components/react.cjs +96 -0
- package/dist/components/react.cjs.map +1 -0
- package/dist/components/react.d.cts +18 -0
- package/dist/components/react.d.ts +18 -0
- package/dist/components/react.js +91 -0
- package/dist/components/react.js.map +1 -0
- package/dist/components/reveal.cjs +1 -1
- package/dist/components/reveal.js +2 -2
- package/dist/components/text.cjs +180 -11
- package/dist/components/text.cjs.map +1 -1
- package/dist/components/text.css +1 -0
- package/dist/components/text.d.cts +54 -2
- package/dist/components/text.d.ts +54 -2
- package/dist/components/text.js +177 -13
- package/dist/components/text.js.map +1 -1
- package/dist/components/transitions.cjs +3 -4
- package/dist/components/transitions.cjs.map +1 -1
- package/dist/components/transitions.js +4 -5
- package/dist/components/transitions.js.map +1 -1
- package/dist/components/ui.cjs +18 -48
- package/dist/components/ui.cjs.map +1 -1
- package/dist/components/ui.js +6 -35
- package/dist/components/ui.js.map +1 -1
- package/dist/components/vue.cjs +51 -0
- package/dist/components/vue.cjs.map +1 -0
- package/dist/components/vue.d.cts +1344 -0
- package/dist/components/vue.d.ts +1344 -0
- package/dist/components/vue.js +48 -0
- package/dist/components/vue.js.map +1 -0
- package/dist/components.cjs +19 -21
- package/dist/components.cjs.map +1 -1
- package/dist/components.css +4 -1
- package/dist/components.d.cts +123 -6
- package/dist/components.d.ts +123 -6
- package/dist/components.js +11 -22
- package/dist/components.js.map +1 -1
- package/dist/components.umd.js +2 -2
- package/dist/components.umd.js.map +1 -1
- package/dist/element.cjs +1 -1
- package/dist/element.js +1 -1
- package/dist/element.umd.js +1 -1
- package/dist/element.umd.js.map +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.js +3 -3
- package/dist/index.umd.js +2 -2
- package/dist/index.umd.js.map +1 -1
- package/dist/react.cjs +2 -2
- package/dist/react.js +2 -2
- package/dist/solid.cjs +2 -2
- package/dist/solid.js +2 -2
- package/dist/svelte.cjs +2 -2
- package/dist/svelte.js +2 -2
- package/dist/vue.cjs +2 -2
- package/dist/vue.js +2 -2
- package/docs/accessibility.md +32 -0
- package/docs/components.md +45 -6
- package/docs/frameworks-ssr.md +64 -0
- package/docs/upgrading-3.md +20 -0
- package/docs/windows-apps.md +13 -2
- package/package.json +42 -1
- package/dist/chunks/core-BP-a1iNc.js.map +0 -1
- package/dist/chunks/core-B_J4rXbC.cjs.map +0 -1
package/dist/solid.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var solidJs = require('solid-js');
|
|
4
|
-
var core = require('./chunks/core-
|
|
5
|
-
var stagger = require('./chunks/stagger-
|
|
4
|
+
var core = require('./chunks/core-C1cEwjJj.cjs');
|
|
5
|
+
var stagger = require('./chunks/stagger-DtKKS6GP.cjs');
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* use-scroll-animate - Solid integration
|
package/dist/solid.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { onMount, onCleanup } from 'solid-js';
|
|
2
|
-
import { c as createScrollAnimate } from './chunks/core-
|
|
3
|
-
import { s as staggerChildren } from './chunks/stagger-
|
|
2
|
+
import { c as createScrollAnimate } from './chunks/core-J_KM443q.js';
|
|
3
|
+
import { s as staggerChildren } from './chunks/stagger-CGF18oNs.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* use-scroll-animate - Solid integration
|
package/dist/svelte.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var core = require('./chunks/core-
|
|
4
|
-
var stagger = require('./chunks/stagger-
|
|
3
|
+
var core = require('./chunks/core-C1cEwjJj.cjs');
|
|
4
|
+
var stagger = require('./chunks/stagger-DtKKS6GP.cjs');
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* use-scroll-animate - Svelte integration
|
package/dist/svelte.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { c as createScrollAnimate } from './chunks/core-
|
|
2
|
-
import { s as staggerChildren } from './chunks/stagger-
|
|
1
|
+
import { c as createScrollAnimate } from './chunks/core-J_KM443q.js';
|
|
2
|
+
import { s as staggerChildren } from './chunks/stagger-CGF18oNs.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* use-scroll-animate - Svelte integration
|
package/dist/vue.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var core = require('./chunks/core-
|
|
4
|
-
var stagger = require('./chunks/stagger-
|
|
3
|
+
var core = require('./chunks/core-C1cEwjJj.cjs');
|
|
4
|
+
var stagger = require('./chunks/stagger-DtKKS6GP.cjs');
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* use-scroll-animate - Vue 3 Integration
|
package/dist/vue.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { c as createScrollAnimate } from './chunks/core-
|
|
2
|
-
import { s as staggerChildren } from './chunks/stagger-
|
|
1
|
+
import { c as createScrollAnimate } from './chunks/core-J_KM443q.js';
|
|
2
|
+
import { s as staggerChildren } from './chunks/stagger-CGF18oNs.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* use-scroll-animate - Vue 3 Integration
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Accessibility (`use-scroll-animate/components`)
|
|
2
|
+
|
|
3
|
+
Audited in v2.9 (automated sweep in `test/components-a11y-frameworks.test.ts` + per-component tests).
|
|
4
|
+
|
|
5
|
+
## Motion
|
|
6
|
+
- Every `<usa-*>` element honours **`prefers-reduced-motion: reduce`**: entrances fade or appear, loops/particles/cursors stop, springs jump to their target, page transitions update instantly. Override per app with `configureComponents({ reducedMotion: 'reduce' | 'no-preference' | 'user' })`.
|
|
7
|
+
- **Global motion intensity** (v2.7): `setMotionIntensity('off' | 'low' | 'normal' | 'high', persist)` or let users choose with `<usa-motion-switch>`. `off` behaves exactly like reduced motion; `low` shortens every animation to 60 %.
|
|
8
|
+
- No component flashes more than 3×/s; glitch and grain effects are disabled under reduced motion.
|
|
9
|
+
|
|
10
|
+
## Keyboard
|
|
11
|
+
| Component | Keys |
|
|
12
|
+
|---|---|
|
|
13
|
+
| `<usa-toggle>`, `<usa-checkbox>`, `<usa-like>` | Space / Enter |
|
|
14
|
+
| `<usa-hold>` | hold Space / Enter |
|
|
15
|
+
| `<usa-slider>` | ←/→/↑/↓, PageUp/PageDown, Home/End |
|
|
16
|
+
| `<usa-rating>` | ←/→, number keys, Home/End |
|
|
17
|
+
| `<usa-tabs>` | ←/→/↑/↓, Home/End (roving tabindex) |
|
|
18
|
+
| `<usa-draggable>` | arrows (by `step` / `snap`), Home / Esc resets |
|
|
19
|
+
| `<usa-card-stack>` | ← / → swipe |
|
|
20
|
+
| `<usa-carousel-3d>` | ← / → |
|
|
21
|
+
| `<usa-fullpage>` | PageUp/PageDown, ↑/↓, Space, Home/End |
|
|
22
|
+
| `<usa-card effect="flip" trigger="click">`, `effect="expand"` | Enter / Space; Esc collapses |
|
|
23
|
+
| `<usa-drawer>`, `<usa-bottom-sheet>`, `<usa-popover>`, `<usa-fab>`, `<usa-tooltip>`, `<usa-dialog>` | Esc closes, focus returns to the trigger |
|
|
24
|
+
| `<usa-double-tap>` | `L` |
|
|
25
|
+
|
|
26
|
+
## Roles & states
|
|
27
|
+
`switch` (toggle), `checkbox` (+ `aria-checked="mixed"`), `slider` (slider, rating; `aria-valuenow/-text`), `tablist`/`tab`/`tabpanel`, `dialog` + `aria-modal` (drawer, sheet, dialog, popover), `button` + `aria-pressed` (like, click-flip card, icon-morph toggle) / `aria-expanded` (fab, popover, expand card), `progressbar` (progress, loading bar, scroll progress), `status` live regions (toasts, submit button, pull-to-refresh, badge), `radiogroup` (motion switch), `aria-busy` while loading (submit, pull-refresh, auto-skeleton, splash).
|
|
28
|
+
|
|
29
|
+
Animated text (`<usa-split-text>`, `<usa-typewriter>`, `<usa-wave-text>`, `<usa-handwriting>`, `<usa-scroll-highlight>` …) renders an `aria-hidden` animated copy plus a visually hidden plain copy. Decorative layers (`<usa-cursor>`, `<usa-ambient>`, particles, sheens, goo) are `aria-hidden` and never take pointer events.
|
|
30
|
+
|
|
31
|
+
## Transparency & contrast
|
|
32
|
+
Glass, acrylic and Fluent materials fall back to solid surfaces under `prefers-reduced-transparency: reduce` and `forced-colors: active`.
|
package/docs/components.md
CHANGED
|
@@ -91,11 +91,11 @@ All attributes are optional unless noted. Events are `CustomEvent`s that bubble,
|
|
|
91
91
|
|
|
92
92
|
| Element | What it does | Key attributes | JS API / events |
|
|
93
93
|
|---|---|---|---|
|
|
94
|
-
| `<usa-spinner>` | Indeterminate indicators | `
|
|
94
|
+
| `<usa-spinner>` | Indeterminate indicators | `kind` (`fluent`* = WinUI ProgressRing, `windows` = Windows 10 orbiting dots, `ring`, `dots`, `pulse`, `bars`), `size` (32), `label`, `paused` | `kind` |
|
|
95
95
|
| `<usa-skeleton>` | Shimmer placeholders; content fades in when loading ends | `loading`, `lines` (3), `avatar`, `circle`, `width`, `height`, `radius` | `loading`; `usa:loaded` |
|
|
96
96
|
| `<usa-progress>` | Linear progress; Fluent indeterminate animation without a value | `value`, `max` (100), `indeterminate`, `state` (`paused`, `error`), `label` | `value`, `max`, `ratio`; `usa:complete` |
|
|
97
97
|
| `<usa-toaster>` + `toast()` | Notifications that slide in, pause on hover, stack with FLIP | `position` (`bottom-right`*, `bottom-left`, `bottom-center`, `top-*`), `max` (4), `label` | `toast(msg, { type, duration, action, dismissible })` → `{ element, close() }`; `show()`, `clear()` |
|
|
98
|
-
| `<usa-check>` | Animated success / error / warning icon | `
|
|
98
|
+
| `<usa-check>` | Animated success / error / warning icon | `kind` (`success`*, `error`, `warning`), `size` (56), `start`, `label` | `play()`, `reset()`; `usa:complete` |
|
|
99
99
|
|
|
100
100
|
### 5. Background & decoration — `components/background`
|
|
101
101
|
|
|
@@ -105,13 +105,13 @@ All attributes are optional unless noted. Events are `CustomEvent`s that bubble,
|
|
|
105
105
|
| `<usa-particles>` | Canvas constellation that avoids the pointer | `count` (60), `color`, `size`, `speed`, `links` (110, `0` = off), `interactive`, `paused` | `reset()` |
|
|
106
106
|
| `<usa-grain>` | SVG-noise film-grain overlay | `opacity` (0.12), `animated`, `blend`, `scale` | — |
|
|
107
107
|
| `<usa-marquee>` | Seamless infinite ticker | `speed` (50 px/s), `direction` (`left`*, `right`, `up`, `down`), `gap`, `pause-on-hover`, `fade`, `paused` | `pause()`, `resume()` |
|
|
108
|
-
| `<usa-acrylic>` | Fluent **Acrylic** / **Mica** materials | `
|
|
108
|
+
| `<usa-acrylic>` | Fluent **Acrylic** / **Mica** materials | `kind` (`acrylic`*, `mica`), `tint`, `tint-opacity`, `blur`, `shimmer` (`hover`, `load`) | — (solid under `prefers-reduced-transparency` / forced colours) |
|
|
109
109
|
|
|
110
110
|
### 6. Transitions — `components/transitions`
|
|
111
111
|
|
|
112
112
|
| Element / helper | What it does | Key attributes / options | JS API / events |
|
|
113
113
|
|---|---|---|---|
|
|
114
|
-
| `<usa-dialog>` | Animated modal / drawer / sheet on the native `<dialog>` (focus trap, Esc, top layer); content is slotted, so frameworks keep owning it | `open`, `
|
|
114
|
+
| `<usa-dialog>` | Animated modal / drawer / sheet on the native `<dialog>` (focus trap, Esc, top layer); content is slotted, so frameworks keep owning it | `open`, `kind` (`modal`*, `drawer-start`, `drawer-end`, `drawer-bottom`, `sheet`), `label`, `no-backdrop-close`, `no-esc`; `[data-close]` children close it; `::part(panel/backdrop)`, `--usa-dialog-*` | `show()`, `close(value?)`, `open`, `returnValue`; `usa:open`, `usa:beforeclose` (cancelable), `usa:close` |
|
|
115
115
|
| `<usa-accordion>` | Smooth height animation for native `<details>` | `multiple`, `duration` (300) | `toggleItem(details, open?)`, `items`; `usa:toggle` |
|
|
116
116
|
| `<usa-flip-list>` | Children glide to new places on add / remove / reorder (FLIP) | `duration` (420), `easing`, `disabled` | `flip(mutate)` |
|
|
117
117
|
| `<usa-view-switch>` | One view at a time with direction-aware transitions | `active` (name or index), `effect` (`slide`*, `fade`, `scale`, `drill`), `duration` | `show(view)`, `active`, `views`; `usa:change` |
|
|
@@ -157,7 +157,7 @@ Presets (`SPRING_PRESETS`): `default` (170/26), `gentle` (120/14), `wobbly` (180
|
|
|
157
157
|
|
|
158
158
|
### 10. UI components & variants — `components/ui`
|
|
159
159
|
|
|
160
|
-
**Style variants.** `variant="minimal | neon | glass | brutalist | fluent | material"` works on every `<usa-*>` element (or `data-usa-variant` on an ancestor, or `setVariant('fluent')` page-wide). Variants only set design tokens — `--usa-accent`, `--usa-accent-text`, `--usa-surface`, `--usa-text`, `--usa-radius`, `--usa-border`, `--usa-shadow`, `--usa-blur`, `--usa-font` — which you can also set yourself. (`<usa-spinner
|
|
160
|
+
**Style variants.** `variant="minimal | neon | glass | brutalist | fluent | material"` works on every `<usa-*>` element (or `data-usa-variant` on an ancestor, or `setVariant('fluent')` page-wide). Variants only set design tokens — `--usa-accent`, `--usa-accent-text`, `--usa-surface`, `--usa-text`, `--usa-radius`, `--usa-border`, `--usa-shadow`, `--usa-blur`, `--usa-font` — which you can also set yourself. (Since 2.9 `<usa-spinner>`, `<usa-check>`, `<usa-dialog>` and `<usa-acrylic>` pick their kind with `kind`; using `variant` for that is deprecated and stops working in 3.0.)
|
|
161
161
|
|
|
162
162
|
| Element | What it does | Key attributes | JS API / events |
|
|
163
163
|
|---|---|---|---|
|
|
@@ -192,6 +192,45 @@ Presets (`SPRING_PRESETS`): `default` (170/26), `gentle` (120/14), `wobbly` (180
|
|
|
192
192
|
| `<usa-auto-skeleton>` | Automatic skeletons | `loading`; `data-no-skeleton` on children | `loading` |
|
|
193
193
|
| `<usa-motion-switch>` · `setMotionIntensity()` | Global motion intensity | `labels`, `label` · `'off' \| 'low' \| 'normal' \| 'high'`, `persist` | `usa:change`; `--usa-motion`, `data-usa-motion` |
|
|
194
194
|
|
|
195
|
+
### v2.8 additions to Text, Background & Windows
|
|
196
|
+
|
|
197
|
+
| Element / API | Category | What it does | Key attributes |
|
|
198
|
+
|---|---|---|---|
|
|
199
|
+
| `<usa-wave-text>` | text | Letters bob in a wave | `amplitude` (0.25em), `speed` (1.6s), `stagger` (0.06s) |
|
|
200
|
+
| `<usa-glitch>` | text | RGB-split glitch | `trigger` (`always` · `hover`), `intensity` (3px) |
|
|
201
|
+
| `<usa-gradient-text>` | text | Flowing gradient fill | `colors`, `speed` (6s), `angle` (90) |
|
|
202
|
+
| `<usa-handwriting>` | text | Stroke-by-stroke draw, then fill | `text`, `duration` (2400), `size` (64), `font`, `stroke`; `play()`, `usa:complete` |
|
|
203
|
+
| `<usa-scroll-highlight>` | text | Words light up while reading / marker sweep | `mode` (`words` · `marker`), `dim` (0.2), `color`; `progress` |
|
|
204
|
+
| `<usa-grid-glow>` | background | Grid lit around the pointer | `size` (32), `radius` (220), `color` |
|
|
205
|
+
| `<usa-blobs>` | background | Fluid morphing blobs | `colors`, `speed` (1), `blur` (60) |
|
|
206
|
+
| `<usa-water-ripple>` | background | Interactive water ripples (canvas) | `damping` (0.96), `strength` (1), `color` (`r,g,b`); `drop(x, y, s?)` |
|
|
207
|
+
| `<usa-dot-network>` | background | Dot grid linking to the pointer (canvas) | `gap` (28), `radius` (140), `color` (`r,g,b`) |
|
|
208
|
+
| `fluentPreset(opts)` | background | Windows 11 Fluent: variant + Mica tint + Acrylic + Reveal highlight | `reveal`, `mica`, `selector`, `root`; returns undo |
|
|
209
|
+
|
|
210
|
+
WinUI 3 / WebView2 sample app: [`examples/webview2-winui/`](../examples/webview2-winui/).
|
|
211
|
+
|
|
212
|
+
## Theme tokens
|
|
213
|
+
|
|
214
|
+
Every component reads these CSS custom properties (set them on `:root`, any ancestor, or via `variant` / `setVariant()`):
|
|
215
|
+
|
|
216
|
+
| Token | Used for |
|
|
217
|
+
|---|---|
|
|
218
|
+
| `--usa-accent` / `--usa-accent-text` | primary colour (toggles, sliders, tabs indicator, checkbox, progress, focus rings) / text on it |
|
|
219
|
+
| `--usa-surface` / `--usa-text` | panels (drawer, sheet, popover, tooltip, back-to-top) |
|
|
220
|
+
| `--usa-radius`, `--usa-border`, `--usa-shadow`, `--usa-blur`, `--usa-font` | shape, outline, elevation, glass blur, typography |
|
|
221
|
+
| `--usa-motion` | global motion intensity (0 · 0.6 · 1 · 1.25), set by `setMotionIntensity()` |
|
|
222
|
+
|
|
223
|
+
## Framework entry points (v2.9)
|
|
224
|
+
|
|
225
|
+
| Import | What |
|
|
226
|
+
|---|---|
|
|
227
|
+
| `use-scroll-animate/components/react` | `createUsaComponents(React)` typed wrappers (props, ref, `onUsa*` events) |
|
|
228
|
+
| `use-scroll-animate/components/vue` | `isUsaElement`, `UsaPlugin` |
|
|
229
|
+
| `use-scroll-animate/components/jsx` | `UsaIntrinsicElements` JSX types |
|
|
230
|
+
| `use-scroll-animate/components/lazy` | `lazyDefine()`, `defineUsed()`, `loadCategory()` |
|
|
231
|
+
|
|
232
|
+
See [frameworks-ssr.md](./frameworks-ssr.md) and [accessibility.md](./accessibility.md).
|
|
233
|
+
|
|
195
234
|
## Frameworks
|
|
196
235
|
|
|
197
236
|
Custom elements work in every framework. Register once (e.g. in your entry file), then use the tags.
|
|
@@ -202,7 +241,7 @@ import { defineFeedbackComponents, toast } from 'use-scroll-animate/components/f
|
|
|
202
241
|
defineFeedbackComponents();
|
|
203
242
|
|
|
204
243
|
export function Save() {
|
|
205
|
-
return <button onClick={() => toast('Saved', { type: 'success' })}>Save <usa-spinner
|
|
244
|
+
return <button onClick={() => toast('Saved', { type: 'success' })}>Save <usa-spinner kind="dots" size="16" /></button>;
|
|
206
245
|
}
|
|
207
246
|
```
|
|
208
247
|
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Next.js, Astro, React, Vue — using `<usa-*>` components (v2.9)
|
|
2
|
+
|
|
3
|
+
All entry points are **SSR-safe**: importing never touches `window`/`document`; `define*()` is a no-op on the server. Register on the client only.
|
|
4
|
+
|
|
5
|
+
## Next.js (App Router)
|
|
6
|
+
```tsx
|
|
7
|
+
// app/usa-provider.tsx
|
|
8
|
+
'use client';
|
|
9
|
+
import { useEffect } from 'react';
|
|
10
|
+
export function UsaProvider() {
|
|
11
|
+
useEffect(() => { import('use-scroll-animate/components/lazy').then((m) => m.lazyDefine()); }, []);
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
// app/layout.tsx → <body><UsaProvider />{children}</body>
|
|
15
|
+
```
|
|
16
|
+
The raw tags render on the server as plain HTML and upgrade on hydration. Type them with `use-scroll-animate/components/jsx`:
|
|
17
|
+
```ts
|
|
18
|
+
// usa-jsx.d.ts
|
|
19
|
+
import type { UsaIntrinsicElements } from 'use-scroll-animate/components/jsx';
|
|
20
|
+
declare module 'react' { namespace JSX { interface IntrinsicElements extends UsaIntrinsicElements {} } }
|
|
21
|
+
```
|
|
22
|
+
Prefer typed wrappers (React 18 sets properties & `usa:*` events for you):
|
|
23
|
+
```tsx
|
|
24
|
+
'use client';
|
|
25
|
+
import * as React from 'react';
|
|
26
|
+
import { createUsaComponents } from 'use-scroll-animate/components/react';
|
|
27
|
+
export const { UsaButton, UsaToggle, UsaCard } = createUsaComponents(React);
|
|
28
|
+
// <UsaToggle checked={on} onUsaChange={(e) => setOn(e.detail.checked)} />
|
|
29
|
+
```
|
|
30
|
+
Page transitions in the App Router: wrap `router.push` in `pageTransition(() => router.push(href), { effect: 'slide' })`.
|
|
31
|
+
|
|
32
|
+
## Astro
|
|
33
|
+
```astro
|
|
34
|
+
---
|
|
35
|
+
// src/layouts/Base.astro
|
|
36
|
+
---
|
|
37
|
+
<html><body>
|
|
38
|
+
<slot />
|
|
39
|
+
<script>
|
|
40
|
+
import { lazyDefine } from 'use-scroll-animate/components/lazy';
|
|
41
|
+
import { enableMpaTransitions } from 'use-scroll-animate/components/page';
|
|
42
|
+
lazyDefine();
|
|
43
|
+
enableMpaTransitions('fade'); // cross-page View Transitions (or use Astro's <ClientRouter />)
|
|
44
|
+
</script>
|
|
45
|
+
</body></html>
|
|
46
|
+
```
|
|
47
|
+
Use the tags directly in `.astro`, `.md` and island components. With `<ClientRouter />` call `lazyDefine()` again on `astro:page-load`.
|
|
48
|
+
|
|
49
|
+
## Vue / Nuxt
|
|
50
|
+
```js
|
|
51
|
+
// vite.config.js
|
|
52
|
+
import { isUsaElement } from 'use-scroll-animate/components/vue';
|
|
53
|
+
vue({ template: { compilerOptions: { isCustomElement: isUsaElement } } });
|
|
54
|
+
// main.js (or a Nuxt client plugin: plugins/usa.client.ts)
|
|
55
|
+
import { UsaPlugin } from 'use-scroll-animate/components/vue';
|
|
56
|
+
app.use(UsaPlugin); // or app.use(UsaPlugin, { categories: ['click', 'ui'] })
|
|
57
|
+
```
|
|
58
|
+
`<usa-toggle :checked.prop="on" @usa:change="on = $event.detail.checked" />`
|
|
59
|
+
|
|
60
|
+
## Svelte / Solid / Angular
|
|
61
|
+
Custom elements work as-is: Svelte (`on:usa:change`), Solid (`on:usa:change`, `prop:checked`), Angular (`schemas: [CUSTOM_ELEMENTS_SCHEMA]`). Call `defineComponents()` or `lazyDefine()` in the client entry.
|
|
62
|
+
|
|
63
|
+
## Lazy registration
|
|
64
|
+
`lazyDefine()` (from `use-scroll-animate/components/lazy`) watches the DOM and dynamically imports only the categories whose tags appear — a page with just `<usa-button>` loads the click chunk only.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Upgrading to 3.0
|
|
2
|
+
|
|
3
|
+
3.0 removes the APIs deprecated in 2.9. Every change has a drop-in replacement; 2.9 logs a one-time console warning wherever old usage is found, so run your app on 2.9 first and fix the warnings.
|
|
4
|
+
|
|
5
|
+
| Removed in 3.0 | Use instead |
|
|
6
|
+
|---|---|
|
|
7
|
+
| `<usa-spinner variant="windows">`, `<usa-check variant="error">`, `<usa-dialog variant="drawer-end">`, `<usa-acrylic variant="mica">` (variant = kind) | `kind="windows"`, `kind="error"`, `kind="drawer-end"`, `kind="mica"`. `variant` now only selects a style variant (`minimal`, `neon`, `glass`, `brutalist`, `fluent`, `material`). |
|
|
8
|
+
| `spinner.variant` property | `spinner.kind` |
|
|
9
|
+
| `observe(el, { parallax: { y: 80 } })`, `data-sa-parallax-x/-y/-rotate/-scale/-speed` | `parallax(el, { speed: 0.3 })` (writes `--sa-parallax`, use it in CSS: `transform: translateY(calc(var(--sa-parallax) * -80px))`) or `progressVar: '--p'` |
|
|
10
|
+
| `ParallaxOptions` type | `ParallaxHelperOptions` |
|
|
11
|
+
| Node 18 for SSR imports | Node ≥ 20 (`engines`) |
|
|
12
|
+
|
|
13
|
+
Search & replace:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# kinds
|
|
17
|
+
grep -rlE '<usa-(spinner|check|dialog|acrylic)[^>]*variant=' src | xargs sed -i -E 's/(<usa-(spinner|check|dialog|acrylic)[^>]*)variant=/\1kind=/g'
|
|
18
|
+
# legacy parallax
|
|
19
|
+
grep -rn 'data-sa-parallax\|parallax:' src
|
|
20
|
+
```
|
package/docs/windows-apps.md
CHANGED
|
@@ -30,7 +30,7 @@ window.api?.onSaved?.(() => toast('Saved', { type: 'success' }));
|
|
|
30
30
|
|
|
31
31
|
```html
|
|
32
32
|
<!-- renderer/index.html -->
|
|
33
|
-
<usa-acrylic
|
|
33
|
+
<usa-acrylic kind="mica" style="min-height:100vh">
|
|
34
34
|
<usa-view-switch active="home">
|
|
35
35
|
<section data-view="home"><usa-typewriter words="Welcome back"></usa-typewriter></section>
|
|
36
36
|
<section data-view="settings"><usa-toggle checked>Start with Windows</usa-toggle></section>
|
|
@@ -85,7 +85,7 @@ MyWebView.Source = new Uri("https://app.local/index.html");
|
|
|
85
85
|
<meta name="color-scheme" content="light dark">
|
|
86
86
|
<script src="components.umd.js"></script>
|
|
87
87
|
<usa-progress id="p" value="0" label="Installing"></usa-progress>
|
|
88
|
-
<usa-spinner
|
|
88
|
+
<usa-spinner kind="fluent"></usa-spinner>
|
|
89
89
|
<script>
|
|
90
90
|
// messages from C#: CoreWebView2.PostWebMessageAsJson("{\"progress\":42}")
|
|
91
91
|
chrome.webview.addEventListener('message', (e) => (p.value = e.data.progress));
|
|
@@ -106,3 +106,14 @@ Link the bundle (or import it in your module graph) and install the site from Ed
|
|
|
106
106
|
- Register only what you use (`define<Category>Components()` or single `define*()` calls) to keep start-up light.
|
|
107
107
|
- Background effects (`<usa-aurora>`, `<usa-particles>`, `<usa-marquee>`) stop animating when off-screen and when the window is hidden/minimised (`document.hidden`).
|
|
108
108
|
- All motion runs on the compositor (`transform` / `opacity`), so it stays smooth on integrated GPUs and in battery-saver mode; call `configureComponents({ reducedMotion: 'reduce' })` to force the calm variants (e.g. for a "Reduce animations" toggle in your app settings).
|
|
109
|
+
|
|
110
|
+
## WinUI 3 sample app + Fluent preset (v2.8)
|
|
111
|
+
|
|
112
|
+
[`examples/webview2-winui/`](../examples/webview2-winui/) is a complete WinUI 3 app (Windows App SDK, native **Mica** backdrop, full-window WebView2 with `SetVirtualHostNameToFolderMapping`) whose UI is a plain `index.html` using `components.umd.js`.
|
|
113
|
+
|
|
114
|
+
```js
|
|
115
|
+
import { fluentPreset } from 'use-scroll-animate/components/background';
|
|
116
|
+
const off = fluentPreset({ reveal: true, mica: true }); // Fluent variant + Mica-style bg + Acrylic + Reveal highlight
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
`fluentPreset()` sets `variant="fluent"` page-wide (Segoe UI Variable, Windows 11 accent `#0067c0` / `#4cc2ff` dark, 8 px radii), tints the body like Mica (skip with `mica: false` when the host window already uses `MicaBackdrop`), turns `.usa-acrylic` / `[data-acrylic]` into Acrylic surfaces and adds Reveal highlight to buttons and `[data-fluent-reveal]` items. Reduced motion / reduced transparency / high contrast fall back to solid materials without Reveal tracking.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "use-scroll-animate",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.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",
|
|
@@ -188,6 +188,46 @@
|
|
|
188
188
|
"default": "./dist/components/page.cjs"
|
|
189
189
|
}
|
|
190
190
|
},
|
|
191
|
+
"./components/react": {
|
|
192
|
+
"import": {
|
|
193
|
+
"types": "./dist/components/react.d.ts",
|
|
194
|
+
"default": "./dist/components/react.js"
|
|
195
|
+
},
|
|
196
|
+
"require": {
|
|
197
|
+
"types": "./dist/components/react.d.cts",
|
|
198
|
+
"default": "./dist/components/react.cjs"
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
"./components/vue": {
|
|
202
|
+
"import": {
|
|
203
|
+
"types": "./dist/components/vue.d.ts",
|
|
204
|
+
"default": "./dist/components/vue.js"
|
|
205
|
+
},
|
|
206
|
+
"require": {
|
|
207
|
+
"types": "./dist/components/vue.d.cts",
|
|
208
|
+
"default": "./dist/components/vue.cjs"
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
"./components/jsx": {
|
|
212
|
+
"import": {
|
|
213
|
+
"types": "./dist/components/jsx.d.ts",
|
|
214
|
+
"default": "./dist/components/jsx.js"
|
|
215
|
+
},
|
|
216
|
+
"require": {
|
|
217
|
+
"types": "./dist/components/jsx.d.cts",
|
|
218
|
+
"default": "./dist/components/jsx.cjs"
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
"./components/lazy": {
|
|
222
|
+
"import": {
|
|
223
|
+
"types": "./dist/components/lazy.d.ts",
|
|
224
|
+
"default": "./dist/components/lazy.js"
|
|
225
|
+
},
|
|
226
|
+
"require": {
|
|
227
|
+
"types": "./dist/components/lazy.d.cts",
|
|
228
|
+
"default": "./dist/components/lazy.cjs"
|
|
229
|
+
}
|
|
230
|
+
},
|
|
191
231
|
"./components.css": "./dist/components.css",
|
|
192
232
|
"./components/reveal.css": "./dist/components/reveal.css",
|
|
193
233
|
"./components/text.css": "./dist/components/text.css",
|
|
@@ -225,6 +265,7 @@
|
|
|
225
265
|
"prepublishOnly": "npm run typecheck && npm test && npm run build && npm run check:exports",
|
|
226
266
|
"size:check": "node scripts/size.mjs --check",
|
|
227
267
|
"sync:exports": "node scripts/sync-exports.mjs",
|
|
268
|
+
"bench": "node scripts/bench.mjs",
|
|
228
269
|
"clean": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\""
|
|
229
270
|
},
|
|
230
271
|
"keywords": [
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"core-BP-a1iNc.js","sources":["../../src/presets.ts","../../src/core.ts"],"sourcesContent":["/**\n * use-scroll-animate - Animation Presets\n * Defines keyframes for all built-in animation presets\n */\n\nimport type { AnimationPreset, CustomAnimation, EasingType } from './types';\n\ntype KeyframeMap = {\n from: Record<string, string | number>;\n to: Record<string, string | number>;\n};\n\nexport const PRESETS: Record<AnimationPreset, KeyframeMap> = {\n 'fade-in': {\n from: { opacity: 0 },\n to: { opacity: 1 },\n },\n 'fade-in-up': {\n from: { opacity: 0, transform: 'translateY(40px)' },\n to: { opacity: 1, transform: 'translateY(0px)' },\n },\n 'fade-in-down': {\n from: { opacity: 0, transform: 'translateY(-40px)' },\n to: { opacity: 1, transform: 'translateY(0px)' },\n },\n 'fade-in-left': {\n from: { opacity: 0, transform: 'translateX(-40px)' },\n to: { opacity: 1, transform: 'translateX(0px)' },\n },\n 'fade-in-right': {\n from: { opacity: 0, transform: 'translateX(40px)' },\n to: { opacity: 1, transform: 'translateX(0px)' },\n },\n 'zoom-in': {\n from: { opacity: 0, transform: 'scale(0.8)' },\n to: { opacity: 1, transform: 'scale(1)' },\n },\n 'zoom-out': {\n from: { opacity: 0, transform: 'scale(1.2)' },\n to: { opacity: 1, transform: 'scale(1)' },\n },\n 'flip-x': {\n from: { opacity: 0, transform: 'rotateX(-90deg)' },\n to: { opacity: 1, transform: 'rotateX(0deg)' },\n },\n 'flip-y': {\n from: { opacity: 0, transform: 'rotateY(-90deg)' },\n to: { opacity: 1, transform: 'rotateY(0deg)' },\n },\n 'slide-up': {\n from: { transform: 'translateY(100%)' },\n to: { transform: 'translateY(0px)' },\n },\n 'slide-down': {\n from: { transform: 'translateY(-100%)' },\n to: { transform: 'translateY(0px)' },\n },\n 'slide-left': {\n from: { transform: 'translateX(-100%)' },\n to: { transform: 'translateX(0px)' },\n },\n 'slide-right': {\n from: { transform: 'translateX(100%)' },\n to: { transform: 'translateX(0px)' },\n },\n 'bounce': {\n from: { opacity: 0, transform: 'translateY(-60px)' },\n to: { opacity: 1, transform: 'translateY(0px)' },\n },\n 'rotate-in': {\n from: { opacity: 0, transform: 'rotate(-180deg) scale(0.5)' },\n to: { opacity: 1, transform: 'rotate(0deg) scale(1)' },\n },\n 'blur-in': {\n from: { opacity: 0, filter: 'blur(12px)' },\n to: { opacity: 1, filter: 'blur(0px)' },\n },\n 'skew-in': {\n from: { opacity: 0, transform: 'skewX(20deg) translateX(30px)' },\n to: { opacity: 1, transform: 'skewX(0deg) translateX(0px)' },\n },\n 'scale-x': {\n from: { transform: 'scaleX(0)' },\n to: { transform: 'scaleX(1)' },\n },\n 'scale-y': {\n from: { transform: 'scaleY(0)' },\n to: { transform: 'scaleY(1)' },\n },\n 'shimmer': {\n from: { opacity: 0.5, filter: 'brightness(1)' },\n to: { opacity: 1, filter: 'brightness(1.5)' },\n },\n 'pulse': {\n from: { transform: 'scale(1)' },\n to: { transform: 'scale(1.05)' },\n },\n 'swing': {\n from: { transform: 'rotate(-10deg)' },\n to: { transform: 'rotate(10deg)' },\n },\n 'scale-up': {\n from: { opacity: 0, transform: 'scale(0.5)' },\n to: { opacity: 1, transform: 'scale(1)' },\n },\n 'blur-in-up': {\n from: { opacity: 0, filter: 'blur(12px)', transform: 'translateY(40px)' },\n to: { opacity: 1, filter: 'blur(0px)', transform: 'translateY(0px)' },\n },\n 'flip-up': {\n from: { opacity: 0, transform: 'perspective(800px) rotateX(60deg)' },\n to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)' },\n },\n 'flip-down': {\n from: { opacity: 0, transform: 'perspective(800px) rotateX(-60deg)' },\n to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)' },\n },\n 'rotate-left': {\n from: { opacity: 0, transform: 'rotate(-15deg) translateX(-40px)' },\n to: { opacity: 1, transform: 'rotate(0deg) translateX(0px)' },\n },\n 'rotate-right': {\n from: { opacity: 0, transform: 'rotate(15deg) translateX(40px)' },\n to: { opacity: 1, transform: 'rotate(0deg) translateX(0px)' },\n },\n // clip-path reveals: content is uncovered without moving or fading\n 'clip-up': {\n from: { clipPath: 'inset(100% 0% 0% 0%)' },\n to: { clipPath: 'inset(0% 0% 0% 0%)' },\n },\n 'clip-down': {\n from: { clipPath: 'inset(0% 0% 100% 0%)' },\n to: { clipPath: 'inset(0% 0% 0% 0%)' },\n },\n 'clip-left': {\n from: { clipPath: 'inset(0% 0% 0% 100%)' },\n to: { clipPath: 'inset(0% 0% 0% 0%)' },\n },\n 'clip-right': {\n from: { clipPath: 'inset(0% 100% 0% 0%)' },\n to: { clipPath: 'inset(0% 0% 0% 0%)' },\n },\n 'clip-circle': {\n from: { clipPath: 'circle(0% at 50% 50%)' },\n to: { clipPath: 'circle(75% at 50% 50%)' },\n },\n};\n\nexport function resolvePreset(animation: AnimationPreset | AnimationPreset[] | CustomAnimation): KeyframeMap {\n if (typeof animation === 'string') {\n return PRESETS[animation.trim() as AnimationPreset] ?? PRESETS['fade-in-up'];\n }\n \n if (Array.isArray(animation)) {\n const combined: KeyframeMap = { from: {}, to: {} };\n animation.forEach(name => {\n const preset = PRESETS[name.trim() as AnimationPreset];\n if (preset) {\n Object.entries(preset.from).forEach(([key, val]) => {\n if (key === 'transform' && combined.from[key]) {\n combined.from[key] = `${combined.from[key]} ${val}`;\n } else {\n combined.from[key] = val;\n }\n });\n Object.entries(preset.to).forEach(([key, val]) => {\n if (key === 'transform' && combined.to[key]) {\n combined.to[key] = `${combined.to[key]} ${val}`;\n } else {\n combined.to[key] = val;\n }\n });\n }\n });\n return combined;\n }\n \n return animation;\n}\n\n/** Easing to CSS cubic-bezier mapping */\nexport const EASING_MAP: Record<string, string> = {\n linear: 'linear',\n ease: 'ease',\n 'ease-in': 'ease-in',\n 'ease-out': 'ease-out',\n 'ease-in-out': 'ease-in-out',\n spring: 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n 'soft-spring': 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',\n 'heavy-bounce': 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',\n};\n\nexport function resolveEasing(easing: EasingType): string {\n if (typeof easing === 'string') {\n return EASING_MAP[easing] ?? easing;\n }\n if (Array.isArray(easing)) {\n return `cubic-bezier(${easing.join(', ')})`;\n }\n if (typeof easing === 'function') {\n // Functions cannot be expressed as a CSS easing string; the core samples\n // them into a `linear()` easing (or keyframes on older browsers).\n return 'linear';\n }\n return 'ease';\n}\n","/**\n * use-scroll-animate - Core Implementation\n * Uses IntersectionObserver + Web Animations API for zero-dependency,\n * high-performance scroll-triggered animations.\n */\n\nimport type {\n AnimateOptions,\n AnimatedElement,\n ScrollAnimateConfig,\n ScrollAnimateInstance,\n ParallaxOptions,\n} from './types';\nimport { resolvePreset, resolveEasing } from './presets';\n\ntype KeyframeMap = ReturnType<typeof resolvePreset>;\ntype Target = string | Element | NodeList | Element[];\ntype Root = Element | Document | null;\n\nconst DEFAULT_CONFIG: Required<ScrollAnimateConfig> = {\n defaultAnimation: 'fade-in-up',\n defaultDuration: 600,\n defaultDelay: 0,\n defaultEasing: 'ease',\n defaultThreshold: 0.1,\n defaultRootMargin: '0px',\n defaultRepeat: false,\n defaultOnce: true,\n defaultOffset: 0,\n hiddenClass: 'sa-hidden',\n visibleClass: 'sa-visible',\n useClassNames: false,\n disabled: false,\n root: null,\n autoUnregister: true,\n defaultEngine: 'auto',\n};\n\nconst noop = () => undefined;\n\n/* ------------------------------------------------------------------ */\n/* Environment helpers (all SSR-safe: never touch globals at import) */\n/* ------------------------------------------------------------------ */\n\nconst hasDOM = (): boolean => typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/** @internal */\nexport const supportsObserver = (): boolean => hasDOM() && typeof IntersectionObserver !== 'undefined';\n\nlet reducedMotionQuery: MediaQueryList | null | undefined;\n\n/** @internal Whether the user asked the OS/browser to reduce motion. */\nexport function prefersReducedMotion(): boolean {\n if (!hasDOM()) return false;\n if (reducedMotionQuery === undefined) {\n reducedMotionQuery =\n typeof window.matchMedia === 'function' ? window.matchMedia('(prefers-reduced-motion: reduce)') : null;\n }\n return !!reducedMotionQuery && reducedMotionQuery.matches;\n}\n\nlet scrollTimelineSupported: boolean | undefined;\n\n/**\n * Whether the browser can run presets on a native scroll-driven timeline:\n * `CSS.supports('animation-timeline: view()')` plus the `ViewTimeline`\n * constructor used to attach it from JavaScript. Cached. SSR-safe.\n */\nexport function supportsScrollTimeline(): boolean {\n if (scrollTimelineSupported === undefined) {\n scrollTimelineSupported =\n hasDOM() &&\n typeof CSS !== 'undefined' &&\n typeof CSS.supports === 'function' &&\n CSS.supports('animation-timeline: view()') &&\n typeof (globalThis as any).ViewTimeline === 'function';\n }\n return scrollTimelineSupported;\n}\n\n/** @internal Reset the cached feature checks (tests). */\nexport function resetFeatureCache(): void {\n scrollTimelineSupported = undefined;\n linearSupported = undefined;\n}\n\n/* ------------------------------------------------------------------ */\n/* Option parsing */\n/* ------------------------------------------------------------------ */\n\nfunction num(value: string | undefined): number | undefined {\n if (value === undefined || value.trim() === '') return undefined;\n const n = parseFloat(value);\n return Number.isFinite(n) ? n : undefined;\n}\n\n/** Numeric strings (\"100\") become numbers (px); strings with units stay as-is. */\nfunction lengthValue(value: string | undefined): string | number | undefined {\n if (value === undefined || value.trim() === '') return undefined;\n const v = value.trim();\n return /^-?(\\d+\\.?\\d*|\\.\\d+)$/.test(v) ? parseFloat(v) : v;\n}\n\nconst DEFAULT_PROGRESS_VAR = '--sa-progress';\nconst DEFAULT_VIEW_RANGE: [string, string] = ['entry 0%', 'entry 100%'];\n\n/** `''` (bare attribute) -> default name; `sa-progress` -> `--sa-progress`. */\nfunction normalizeVar(name: string): string {\n const v = name.trim();\n if (!v) return DEFAULT_PROGRESS_VAR;\n return v.startsWith('--') ? v : `--${v}`;\n}\n\n/**\n * @internal Read options from string attributes. `get(name)` returns the raw\n * value of the attribute `name` (kebab-case, e.g. `root-margin`), `''` for a\n * bare attribute and `undefined` when absent. Shared by `data-sa-*` and the\n * `<scroll-animate>` element.\n */\nexport function readOptions(get: (name: string) => string | undefined): AnimateOptions {\n const opts: AnimateOptions = {};\n\n const anim = get('animation');\n if (anim) {\n opts.animation = (anim.includes(',') ? anim.split(',').map((s) => s.trim()) : anim.trim()) as any;\n }\n opts.duration = num(get('duration'));\n opts.delay = num(get('delay'));\n const easing = get('easing');\n if (easing) {\n const e = easing.trim();\n if (e.startsWith('[')) {\n try {\n opts.easing = JSON.parse(e);\n } catch {\n // Malformed JSON: fall back to the default easing instead of throwing\n }\n } else {\n opts.easing = e;\n }\n }\n const t = get('threshold');\n if (t) {\n opts.threshold = t.includes(',') ? t.split(',').map(parseFloat).filter(Number.isFinite) : num(t);\n }\n const rootMargin = get('root-margin');\n if (rootMargin) opts.rootMargin = rootMargin;\n const repeat = get('repeat');\n if (repeat !== undefined) opts.repeat = repeat !== 'false';\n const once = get('once');\n if (once !== undefined) opts.once = once !== 'false';\n opts.offset = num(get('offset'));\n opts.stagger = num(get('stagger'));\n const progressVar = get('progress-var');\n if (progressVar !== undefined) opts.progressVar = normalizeVar(progressVar);\n const engine = get('engine')?.trim();\n if (engine === 'auto' || engine === 'js' || engine === 'css') opts.engine = engine;\n const range = get('view-range');\n if (range) {\n const [start, end] = range.split(',').map((s) => s.trim());\n if (start && end) opts.viewRange = [start, end];\n }\n const exit = get('exit');\n if (exit !== undefined) {\n const e = exit.trim();\n opts.exit = e === '' || e === 'true' ? true : e === 'false' ? false : ((e.includes(',') ? e.split(',').map((s) => s.trim()) : e) as any);\n }\n const progress = get('progress');\n if (progress) opts.progressMode = progress.trim() === 'scroll' ? 'scroll' : 'ratio';\n\n const px = get('parallax-x');\n const py = get('parallax-y');\n const pr = get('parallax-rotate');\n const ps = get('parallax-scale');\n if (px || py || pr || ps) {\n opts.parallax = {\n x: lengthValue(px),\n y: lengthValue(py),\n rotate: num(pr),\n scale: num(ps),\n speed: num(get('parallax-speed')) ?? 1,\n };\n }\n\n // Drop keys that were not set, so they don't override defaults when spread.\n (Object.keys(opts) as Array<keyof AnimateOptions>).forEach((k) => opts[k] === undefined && delete opts[k]);\n return opts;\n}\n\nfunction parseDataAttributes(el: Element, config: Required<ScrollAnimateConfig>): Required<AnimateOptions> {\n return mergeOptions(\n readOptions((name) => {\n const v = el.getAttribute(`data-sa-${name}`);\n return v === null ? undefined : v;\n }),\n config\n );\n}\n\nfunction mergeOptions(opts: AnimateOptions, config: Required<ScrollAnimateConfig>): Required<AnimateOptions> {\n let engine = opts.engine ?? config.defaultEngine;\n // 'auto' keeps time-based semantics when the element asks for them explicitly.\n if (engine === 'auto' && (opts.duration !== undefined || opts.delay !== undefined || opts.offset !== undefined || (opts.stagger ?? 0) > 0)) {\n engine = 'js';\n }\n const exit = opts.exit ?? false;\n const repeat = opts.repeat ?? (exit ? true : config.defaultRepeat);\n const threshold = opts.threshold ?? config.defaultThreshold;\n return {\n animation: opts.animation ?? config.defaultAnimation,\n duration: opts.duration ?? config.defaultDuration,\n delay: opts.delay ?? config.defaultDelay,\n easing: opts.easing ?? config.defaultEasing,\n threshold: Array.isArray(threshold) && threshold.length === 0 ? config.defaultThreshold : threshold,\n rootMargin: opts.rootMargin ?? config.defaultRootMargin,\n repeat,\n once: opts.once ?? (repeat ? false : config.defaultOnce),\n offset: opts.offset ?? config.defaultOffset,\n stagger: opts.stagger ?? 0,\n parallax: opts.parallax ?? {},\n onStart: opts.onStart ?? noop,\n onComplete: opts.onComplete ?? noop,\n onEnter: opts.onEnter ?? noop,\n onLeave: opts.onLeave ?? noop,\n onProgress: opts.onProgress ?? noop,\n progressMode: opts.progressMode ?? 'ratio',\n progressVar: opts.progressVar ? normalizeVar(opts.progressVar) : '',\n engine,\n viewRange: opts.viewRange ?? DEFAULT_VIEW_RANGE,\n exit,\n };\n}\n\nfunction resolveTargets(target: Target | null | undefined): Element[] {\n if (!target || !hasDOM()) return [];\n if (typeof target === 'string') return Array.from(document.querySelectorAll(target));\n if (target instanceof Element) return [target];\n if (Array.isArray(target) || target instanceof NodeList) {\n return (Array.from(target as ArrayLike<Node>) as Element[]).filter((el) => el instanceof Element);\n }\n return [];\n}\n\n/**\n * Apply `offset` to the bottom edge of a rootMargin, preserving the other\n * three sides. `offset: 100` means \"trigger 100px later\" (bottom -100px).\n * @internal\n */\nexport function applyOffset(rootMargin: string, offset: number): string {\n if (!offset) return rootMargin;\n const parts = (rootMargin || '0px').trim().split(/\\s+/);\n const top = parts[0];\n const right = parts[1] ?? top;\n const bottom = parts[2] ?? top;\n const left = parts[3] ?? right;\n const m = /^(-?\\d*\\.?\\d+)(px)?$/.exec(bottom);\n const base = m ? parseFloat(m[1]) : 0; // non-px bottoms (e.g. %) cannot be combined; offset wins\n return `${top} ${right} ${base - offset}px ${left}`;\n}\n\nfunction hasParallax(p: ParallaxOptions | undefined): boolean {\n return !!p && Object.keys(p).some((k) => (p as Record<string, unknown>)[k] !== undefined);\n}\n\nfunction needsProgress(opts: Required<AnimateOptions>): boolean {\n return hasParallax(opts.parallax) || opts.onProgress !== noop || !!opts.progressVar;\n}\n\n/**\n * True scroll progress of `el` through the viewport (or `root`): 0 when its top\n * edge reaches the bottom of the viewport, 1 when its bottom edge passes the top.\n * Works for elements taller than the viewport. Returns 0 without a DOM.\n */\nexport function getScrollProgress(el: Element, root?: Element | null): number {\n if (!hasDOM()) return 0;\n const rect = el.getBoundingClientRect();\n let top = 0;\n let height = window.innerHeight || document.documentElement.clientHeight || 0;\n if (root) {\n const r = root.getBoundingClientRect();\n top = r.top;\n height = r.height;\n }\n const total = height + rect.height;\n if (total <= 0) return 0;\n const p = (top + height - rect.top) / total;\n return p < 0 ? 0 : p > 1 ? 1 : p;\n}\n\n/* ------------------------------------------------------------------ */\n/* Animation */\n/* ------------------------------------------------------------------ */\n\n/** The animation currently running on an element, so it can be cancelled/replaced. */\nconst running = new WeakMap<Element, Animation>();\n/** Native engine: the scroll-linked exit animation, next to the entrance in `running`. */\nconst exits = new WeakMap<Element, Animation>();\nconst timers = new WeakMap<Element, ReturnType<typeof setTimeout>>();\n\nfunction cancelRunning(el: Element): void {\n const exitAnim = exits.get(el);\n if (exitAnim) {\n exits.delete(el);\n exitAnim.cancel();\n }\n const anim = running.get(el);\n if (anim) {\n running.delete(el);\n anim.onfinish = null;\n anim.cancel();\n }\n const timer = timers.get(el);\n if (timer !== undefined) {\n clearTimeout(timer);\n timers.delete(el);\n }\n}\n\nfunction setStyles(el: Element, styles: Record<string, string | number>): void {\n const style = (el as HTMLElement).style;\n if (!style) return;\n Object.keys(styles).forEach((prop) => {\n (style as any)[prop] = String(styles[prop]);\n });\n}\n\nconst NUM_UNIT = /(-?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?)([a-z%]*)/gi;\n\n/**\n * Interpolate two CSS values at `t`. Numbers interpolate directly; strings\n * interpolate when they share the same structure (e.g. `translateY(40px)` ->\n * `translateY(0px)`, or `scale(0.8)` -> `scale(1)`). Otherwise snaps at 0.5.\n * @internal\n */\nexport function interpolateValue(from: string | number, to: string | number, t: number): string | number {\n if (typeof from === 'number' && typeof to === 'number') return from + (to - from) * t;\n const a = String(from);\n const b = String(to);\n const ta: Array<[number, string]> = [];\n const tb: Array<[number, string]> = [];\n const skA = a.replace(NUM_UNIT, (_, n, u) => (ta.push([parseFloat(n), u]), '#'));\n const skB = b.replace(NUM_UNIT, (_, n, u) => (tb.push([parseFloat(n), u]), '#'));\n if (skA !== skB || ta.length !== tb.length) return t < 0.5 ? from : to;\n let i = 0;\n let ok = true;\n const out = skA.replace(/#/g, () => {\n const [na, ua] = ta[i];\n const [nb, ub] = tb[i++];\n if (ua !== ub && na !== 0 && nb !== 0 && ua && ub) ok = false;\n const unit = ua || ub;\n return `${+(na + (nb - na) * t).toFixed(4)}${unit}`;\n });\n return ok ? out : t < 0.5 ? from : to;\n}\n\nconst EASING_SAMPLES = 30;\nlet linearSupported: boolean | undefined;\n\nfunction supportsLinearEasing(): boolean {\n if (linearSupported === undefined) {\n linearSupported =\n typeof CSS !== 'undefined' &&\n typeof CSS.supports === 'function' &&\n CSS.supports('animation-timing-function', 'linear(0, 1)');\n }\n return linearSupported;\n}\n\nfunction sampleEasing(fn: (t: number) => number): number[] {\n const values: number[] = [];\n for (let i = 0; i <= EASING_SAMPLES; i++) {\n const v = fn(i / EASING_SAMPLES);\n values.push(Number.isFinite(v) ? +v.toFixed(4) : i / EASING_SAMPLES);\n }\n return values;\n}\n\nfunction buildAnimation(\n preset: KeyframeMap,\n easing: Required<AnimateOptions>['easing']\n): { keyframes: Keyframe[]; easing: string } {\n if (typeof easing !== 'function') {\n return { keyframes: [preset.from as Keyframe, preset.to as Keyframe], easing: resolveEasing(easing) };\n }\n const samples = sampleEasing(easing);\n // Modern browsers: an exact, property-agnostic `linear()` easing curve.\n if (supportsLinearEasing()) {\n return { keyframes: [preset.from as Keyframe, preset.to as Keyframe], easing: `linear(${samples.join(', ')})` };\n }\n // Fallback: approximate the curve with interpolated keyframes.\n const props = Object.keys(preset.from).filter((p) => p in preset.to);\n const keyframes = samples.map((eased, i) => {\n const frame: Keyframe = { offset: i / EASING_SAMPLES };\n props.forEach((prop) => {\n frame[prop] = interpolateValue(preset.from[prop], preset.to[prop], eased);\n });\n return frame;\n });\n return { keyframes, easing: 'linear' };\n}\n\n/** Make an element visible without animating (reduced motion / disabled / no WAAPI). */\nfunction reveal(el: Element, config: Required<ScrollAnimateConfig>): void {\n cancelRunning(el);\n if (config.useClassNames) {\n el.classList.remove(config.hiddenClass);\n el.classList.add(config.visibleClass);\n } else {\n const style = (el as HTMLElement).style;\n if (style) style.opacity = '';\n }\n}\n\n/** @internal Cancel a running/pending animation and make the element visible. */\nexport function stopAnimation(el: Element, config: ScrollAnimateConfig = {}): void {\n reveal(el, { ...DEFAULT_CONFIG, ...config });\n}\n\n/** @internal Resolve a selector / Element / NodeList / Element[] to elements (SSR-safe). */\nexport { resolveTargets, hasDOM };\n\n/** @internal Whether animations should be skipped entirely. */\nexport function motionDisabled(config: Pick<ScrollAnimateConfig, 'disabled'>): boolean {\n return !!config.disabled || prefersReducedMotion();\n}\n\nfunction runAnimation(\n el: Element,\n opts: Required<AnimateOptions>,\n config: Required<ScrollAnimateConfig>,\n staggerIndex = 0,\n pending?: Set<Element>\n): void {\n const { duration, delay, stagger, onStart, onComplete } = opts;\n const totalDelay = Math.max(0, delay + staggerIndex * stagger);\n cancelRunning(el);\n\n if (motionDisabled(config)) {\n reveal(el, config);\n onStart(el);\n onComplete(el);\n return;\n }\n\n if (config.useClassNames) {\n if (totalDelay > 0) (el as HTMLElement).style.animationDelay = `${totalDelay}ms`;\n el.classList.remove(config.hiddenClass);\n el.classList.add(config.visibleClass);\n onStart(el);\n pending?.add(el);\n timers.set(\n el,\n setTimeout(() => {\n timers.delete(el);\n pending?.delete(el);\n onComplete(el);\n }, duration + totalDelay)\n );\n return;\n }\n\n const preset = resolvePreset(opts.animation);\n // Presets that don't animate opacity (slide-*, clip-*, scale-x, ...) would\n // otherwise stay at the `opacity: 0` applied while waiting to enter.\n if (!('opacity' in preset.to)) {\n const style = (el as HTMLElement).style;\n if (style && style.opacity === '0') style.opacity = '';\n }\n\n if (typeof el.animate !== 'function') {\n setStyles(el, preset.to);\n onStart(el);\n onComplete(el);\n return;\n }\n\n const built = buildAnimation(preset, opts.easing);\n const timing: KeyframeAnimationOptions = { duration, delay: totalDelay, easing: built.easing, fill: 'both' };\n let anim: Animation;\n try {\n anim = el.animate(built.keyframes, timing);\n } catch {\n // Invalid user easing string (WAAPI throws a TypeError): fall back to 'ease'\n anim = el.animate(built.keyframes, { ...timing, easing: 'ease' });\n }\n running.set(el, anim);\n onStart(el);\n anim.onfinish = () => {\n if (running.get(el) === anim) {\n running.delete(el);\n // Persist the end state inline and drop the filling animation. This frees\n // the Animation object and lets later inline styles (parallax, user code)\n // take effect instead of being masked by `fill: forwards`.\n try {\n anim.commitStyles();\n } catch {\n setStyles(el, preset.to);\n }\n anim.cancel();\n }\n onComplete(el);\n };\n}\n\n/**\n * Native engine: attach the preset to a `ViewTimeline` of the element, so the\n * browser drives it from scroll position. Returns `null` when that fails\n * (caller falls back to the JS engine).\n */\nfunction startNative(el: Element, opts: Required<AnimateOptions>, onFrozen?: () => void): Animation | null {\n if (typeof el.animate !== 'function') return null;\n const preset = resolvePreset(opts.animation);\n const built = buildAnimation(preset, opts.easing);\n let anim: Animation;\n try {\n const timeline = new (globalThis as any).ViewTimeline({ subject: el, axis: 'block' });\n const timing = {\n fill: 'both',\n easing: built.easing,\n timeline,\n rangeStart: opts.viewRange[0],\n rangeEnd: opts.viewRange[1],\n } as KeyframeAnimationOptions;\n try {\n anim = el.animate(built.keyframes, timing);\n } catch {\n anim = el.animate(built.keyframes, { ...timing, easing: 'linear' });\n }\n } catch {\n return null;\n }\n running.set(el, anim);\n if (opts.exit) {\n // Reverse keyframes over the `exit` range; `fill: 'forwards'` so it has\n // no effect before the element starts leaving.\n const leave = resolvePreset(opts.exit === true ? opts.animation : opts.exit);\n const out = buildAnimation({ from: leave.to, to: leave.from }, opts.easing);\n try {\n const timeline = new (globalThis as any).ViewTimeline({ subject: el, axis: 'block' });\n const timing = { fill: 'forwards', easing: out.easing, timeline, rangeStart: 'exit 0%', rangeEnd: 'exit 100%' };\n exits.set(el, el.animate(out.keyframes, timing as KeyframeAnimationOptions));\n } catch {\n // Exit is cosmetic: ignore if unsupported.\n }\n }\n const keep = opts.repeat || !opts.once;\n anim.onfinish = () => {\n // `once`: freeze the end state, so scrolling back up does not reverse it.\n if (!keep && running.get(el) === anim) {\n running.delete(el);\n try {\n anim.commitStyles();\n } catch {\n setStyles(el, preset.to);\n }\n anim.cancel();\n onFrozen?.();\n }\n opts.onComplete(el);\n };\n return anim;\n}\n\nfunction applyParallax(el: Element, progress: number, parallax: ParallaxOptions): void {\n const { x = 0, y = 0, rotate = 0, scale = 1, speed = 1 } = parallax;\n const p = (progress - 0.5) * 2 * speed;\n const axis = (v: string | number) => (typeof v === 'number' ? `${v * p}px` : `calc(${v} * ${p})`);\n\n let transform = '';\n if (x) transform += ` translateX(${axis(x)})`;\n if (y) transform += ` translateY(${axis(y)})`;\n if (rotate) transform += ` rotate(${rotate * p}deg)`;\n if (scale !== 1) transform += ` scale(${1 + (scale - 1) * p})`;\n\n (el as HTMLElement).style.transform = transform.trim();\n}\n\n/** Play the exit animation (entrance or `exit` preset, reversed), ending hidden. */\nfunction runExit(el: Element, opts: Required<AnimateOptions>, config: Required<ScrollAnimateConfig>): void {\n if (config.useClassNames || typeof el.animate !== 'function') {\n hideElement(el, config);\n return;\n }\n cancelRunning(el);\n const preset = resolvePreset(opts.exit === true ? opts.animation : (opts.exit as Exclude<typeof opts.exit, boolean>));\n const built = buildAnimation({ from: preset.to, to: preset.from }, opts.easing);\n const timing: KeyframeAnimationOptions = { duration: opts.duration, easing: built.easing, fill: 'forwards' };\n let anim: Animation;\n try {\n anim = el.animate(built.keyframes, timing);\n } catch {\n anim = el.animate(built.keyframes, { ...timing, easing: 'ease' });\n }\n // Kept (filling) until the next entrance cancels it.\n running.set(el, anim);\n}\n\nfunction hideElement(el: Element, config: Required<ScrollAnimateConfig>): void {\n cancelRunning(el);\n if (config.useClassNames) {\n el.classList.add(config.hiddenClass);\n el.classList.remove(config.visibleClass);\n } else {\n const style = (el as HTMLElement).style;\n if (style) style.opacity = '0';\n }\n}\n\n/** @internal Hide an element before its entrance animation, unless motion is off. */\nexport function prepareElement(el: Element, config: ScrollAnimateConfig = {}): void {\n const full = { ...DEFAULT_CONFIG, ...config };\n if (!motionDisabled(full)) hideElement(el, full);\n}\n\nlet progressThresholds: number[] | undefined;\nfunction getProgressThresholds(): number[] {\n if (!progressThresholds) {\n progressThresholds = [];\n for (let i = 0; i <= 100; i++) progressThresholds.push(i / 100);\n }\n return progressThresholds;\n}\n\nconst PASSIVE: AddEventListenerOptions = { passive: true };\n\n/* ------------------------------------------------------------------ */\n/* Instance */\n/* ------------------------------------------------------------------ */\n\nexport function createScrollAnimate(userConfig: ScrollAnimateConfig = {}): ScrollAnimateInstance {\n let config: Required<ScrollAnimateConfig> = { ...DEFAULT_CONFIG, ...userConfig };\n const registry = new Map<Element, AnimatedElement>();\n // `once` elements that finished and were dropped from the registry (autoUnregister).\n let finished = new WeakSet<Element>();\n // Elements in `progressMode: 'scroll'` that are currently inside the viewport.\n const scrolling = new Set<Element>();\n let frame = 0;\n let listening: EventTarget | null = null;\n // Active watch() MutationObservers, disconnected by destroy().\n const watchers = new Set<MutationObserver>();\n // Elements with a pending class-name completion timer started by this instance.\n const pending = new Set<Element>();\n // Elements whose entrance runs on a native scroll-driven timeline.\n const natives = new Set<Element>();\n\n // Observers are shared between elements with the same root/threshold/rootMargin,\n // instead of one (or two) IntersectionObservers per element.\n const pools = new Map<Root, Map<string, IntersectionObserver>>();\n\n function pooled(root: Root, key: string, create: () => IntersectionObserver): IntersectionObserver {\n let pool = pools.get(root);\n if (!pool) pools.set(root, (pool = new Map()));\n let io = pool.get(key);\n if (!io) pool.set(key, (io = create()));\n return io;\n }\n\n function teardown(el: Element, restore: boolean): void {\n const record = registry.get(el);\n if (!record) return;\n record.observer.unobserve(el);\n record.progressObserver?.unobserve(el);\n registry.delete(el);\n untrack(el);\n if (record.engine === 'css') {\n // A scroll-linked animation would keep following the scroll: stop it and\n // show the element (unless it finished and is just being released).\n if (restore) {\n natives.delete(el);\n reveal(el, config);\n } else if (el.isConnected === false) {\n // Left the DOM: drop it too, or the instance keeps it alive (and\n // destroy() touches it) for its whole lifetime.\n natives.delete(el);\n }\n return;\n }\n // An element that never animated would otherwise stay invisible forever.\n if (restore && !record.animated) reveal(el, config);\n }\n\n function pruneDetached(): void {\n registry.forEach((record, el) => {\n if (el.isConnected === false) teardown(el, false);\n });\n }\n\n function emitProgress(el: Element, record: AnimatedElement, progress: number): void {\n const opts = record.options;\n opts.onProgress(el, progress);\n if (opts.progressVar) {\n const style = (el as HTMLElement).style;\n if (style) style.setProperty(opts.progressVar, String(+progress.toFixed(4)));\n }\n if (hasParallax(opts.parallax) && !motionDisabled(config)) applyParallax(el, progress, opts.parallax);\n }\n\n function update(): void {\n frame = 0;\n scrolling.forEach((el) => {\n const record = registry.get(el);\n if (record) emitProgress(el, record, getScrollProgress(el, config.root));\n });\n }\n\n // rAF-throttled; IntersectionObserver-capable browsers all have rAF.\n const schedule = () => frame || (frame = requestAnimationFrame(update));\n\n function listen(on: boolean): void {\n if (on === !!listening) return;\n const method = on ? 'addEventListener' : 'removeEventListener';\n const target: EventTarget = listening || (config.root as EventTarget | null) || window;\n target[method]('scroll', schedule, PASSIVE);\n window[method]('resize', schedule, PASSIVE);\n listening = on ? target : null;\n if (!on && frame) {\n cancelAnimationFrame(frame);\n frame = 0;\n }\n }\n\n function untrack(el: Element): void {\n if (scrolling.delete(el) && !scrolling.size) listen(false);\n }\n\n function onScrollIntersect(entries: IntersectionObserverEntry[]): void {\n entries.forEach((entry) => {\n const el = entry.target;\n const record = registry.get(el);\n if (!record) return;\n if (entry.isIntersecting) {\n scrolling.add(el);\n listen(true);\n } else {\n untrack(el);\n }\n // Emit right away so the edges (0 / 1) are reported even on fast scrolls.\n emitProgress(el, record, getScrollProgress(el, config.root));\n });\n }\n\n function onIntersect(entries: IntersectionObserverEntry[]): void {\n const staggerCounts = new Map<Element | null, number>();\n entries.forEach((entry) => {\n const el = entry.target;\n const record = registry.get(el);\n if (!record) return;\n const opts = record.options;\n\n if (el.isConnected === false) {\n teardown(el, false);\n return;\n }\n\n if (record.engine === 'css') {\n // The browser drives the animation; only lifecycle bookkeeping here.\n if (entry.isIntersecting) {\n opts.onEnter(el);\n if (!record.animated) {\n record.animated = true;\n opts.onStart(el);\n }\n if (opts.once && !opts.repeat) {\n record.observer.unobserve(el);\n if (config.autoUnregister && !record.progressObserver) {\n finished.add(el);\n teardown(el, false);\n }\n }\n } else {\n opts.onLeave(el);\n if (opts.repeat) record.animated = false;\n }\n return;\n }\n\n if (entry.isIntersecting) {\n opts.onEnter(el);\n if (record.animated && !opts.repeat) return;\n\n // Stagger relative to siblings revealed in the same batch, so elements\n // scrolled into view later don't inherit an ever-growing delay.\n let staggerIndex = 0;\n if (opts.stagger > 0) {\n const parent = el.parentElement;\n staggerIndex = staggerCounts.get(parent) ?? 0;\n staggerCounts.set(parent, staggerIndex + 1);\n }\n\n runAnimation(el, opts, config, staggerIndex, pending);\n record.animated = true;\n\n if (opts.once && !opts.repeat) {\n // Keep the progress observer: parallax/onProgress must keep working.\n record.observer.unobserve(el);\n if (config.autoUnregister && !record.progressObserver) {\n // Nothing left to watch: free the record (the running animation\n // keeps its own reference until it finishes).\n finished.add(el);\n teardown(el, false);\n }\n }\n } else {\n opts.onLeave(el);\n if (opts.repeat && record.animated) {\n if (!motionDisabled(config)) {\n if (opts.exit) runExit(el, opts, config);\n else hideElement(el, config);\n }\n record.animated = false;\n }\n }\n });\n }\n\n function onProgress(entries: IntersectionObserverEntry[]): void {\n entries.forEach((entry) => {\n const record = registry.get(entry.target);\n if (!record) return;\n emitProgress(entry.target, record, entry.intersectionRatio);\n });\n }\n\n function getObserver(opts: Required<AnimateOptions>): IntersectionObserver {\n const rootMargin = applyOffset(opts.rootMargin, opts.offset);\n const threshold = opts.threshold;\n const root = config.root;\n return pooled(root, `m|${rootMargin}|${String(threshold)}`, () =>\n new IntersectionObserver(onIntersect, { threshold, rootMargin, root: root as Element | null })\n );\n }\n\n function getProgressObserver(opts: Required<AnimateOptions>): IntersectionObserver {\n const root = config.root;\n if (opts.progressMode === 'scroll') {\n // Only used to know when to start/stop measuring; progress itself comes\n // from a single shared, rAF-throttled passive scroll listener.\n return pooled(root, `s|${opts.rootMargin}`, () =>\n new IntersectionObserver(onScrollIntersect, { threshold: 0, rootMargin: opts.rootMargin, root: root as Element | null })\n );\n }\n return pooled(root, `p|${opts.rootMargin}`, () =>\n new IntersectionObserver(onProgress, {\n threshold: getProgressThresholds(),\n rootMargin: opts.rootMargin,\n root: root as Element | null,\n })\n );\n }\n\n function attach(el: Element, record: AnimatedElement, observeMain: boolean): void {\n record.observer = getObserver(record.options);\n if (observeMain) record.observer.observe(el);\n record.progressObserver = needsProgress(record.options) ? getProgressObserver(record.options) : undefined;\n record.progressObserver?.observe(el);\n }\n\n function wantsNative(opts: Required<AnimateOptions>): boolean {\n return opts.engine !== 'js' && !config.useClassNames && !motionDisabled(config) && supportsScrollTimeline();\n }\n\n function observeElement(el: Element, opts: Required<AnimateOptions>): void {\n if (registry.has(el) || finished.has(el)) return;\n\n if (!supportsObserver()) {\n // No IntersectionObserver (very old browser): never leave content hidden.\n reveal(el, config);\n return;\n }\n\n const record = { element: el, options: opts, animated: false, engine: 'js' } as AnimatedElement;\n if (wantsNative(opts)) {\n cancelRunning(el);\n if (startNative(el, opts, () => natives.delete(el))) {\n record.engine = 'css';\n natives.add(el);\n }\n }\n if (record.engine === 'js' && !motionDisabled(config)) hideElement(el, config);\n\n registry.set(el, record);\n attach(el, record, true);\n }\n\n function observeDataElement(el: Element): void {\n if (!registry.has(el)) observeElement(el, parseDataAttributes(el, config));\n }\n\n const instance: ScrollAnimateInstance = {\n observe(target, options = {}) {\n pruneDetached();\n const opts = mergeOptions(options, config);\n resolveTargets(target).forEach((el) => observeElement(el, opts));\n },\n\n unobserve(target) {\n resolveTargets(target).forEach((el) => {\n finished.delete(el);\n teardown(el, true);\n });\n },\n\n init(rootElement) {\n const scope = rootElement ?? (hasDOM() ? document : null);\n if (!scope) return;\n pruneDetached();\n scope.querySelectorAll('[data-sa]').forEach(observeDataElement);\n },\n\n watch(rootElement) {\n const scope = rootElement ?? (hasDOM() ? document : null);\n if (!scope || typeof MutationObserver === 'undefined') return noop;\n instance.init(scope);\n const observeTree = (node: Element) => {\n if (node.hasAttribute('data-sa')) observeDataElement(node);\n node.querySelectorAll('[data-sa]').forEach(observeDataElement);\n };\n const mo = new MutationObserver((records) => {\n let removed = false;\n records.forEach((record) => {\n if (record.type === 'attributes') {\n const target = record.target as Element;\n if (target.isConnected !== false) observeTree(target);\n return;\n }\n record.addedNodes.forEach((node) => {\n if (node instanceof Element && node.isConnected !== false) observeTree(node);\n });\n if (record.removedNodes.length) removed = true;\n });\n // Free elements that left the DOM (they can't animate any more).\n if (removed) pruneDetached();\n });\n mo.observe(scope, { childList: true, subtree: true, attributes: true, attributeFilter: ['data-sa'] });\n watchers.add(mo);\n return () => {\n mo.disconnect();\n watchers.delete(mo);\n };\n },\n\n destroy() {\n watchers.forEach((mo) => mo.disconnect());\n watchers.clear();\n // Class-name mode: drop completion timers so onComplete never fires after destroy().\n pending.forEach((el) => {\n const timer = timers.get(el);\n if (timer !== undefined) {\n clearTimeout(timer);\n timers.delete(el);\n }\n });\n pending.clear();\n registry.forEach((record, el) => {\n if (!record.animated && record.engine !== 'css') reveal(el, config);\n });\n // Native scroll-linked animations still running: stop them, show content.\n natives.forEach((el) => {\n if (running.has(el)) reveal(el, config);\n });\n natives.clear();\n pools.forEach((pool) => pool.forEach((io) => io.disconnect()));\n pools.clear();\n registry.clear();\n scrolling.clear();\n listen(false);\n finished = new WeakSet();\n },\n\n refresh() {\n // Rebuild observers (e.g. after configure({ root })) without re-hiding or\n // replaying elements that have already animated.\n pools.forEach((pool) => pool.forEach((io) => io.disconnect()));\n pools.clear();\n scrolling.clear();\n listen(false);\n pruneDetached();\n if (!supportsObserver()) return;\n registry.forEach((record, el) => {\n const done = record.animated && record.options.once && !record.options.repeat;\n attach(el, record, !done);\n });\n },\n\n animate(target, options = {}) {\n const opts = mergeOptions(options, config);\n resolveTargets(target).forEach((el) => runAnimation(el, opts, config, 0, pending));\n },\n\n getObservedElements() {\n return Array.from(registry.values());\n },\n\n configure(newConfig) {\n config = { ...config, ...newConfig };\n },\n };\n\n return instance;\n}\n"],"names":[],"mappings":"AAAA;;;AAGG;AASI,MAAM,OAAO,GAAyC;AAC3D,IAAA,SAAS,EAAE;AACT,QAAA,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;AACpB,QAAA,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;AACnB,KAAA;AACD,IAAA,YAAY,EAAE;QACZ,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE;QACnD,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE;AACjD,KAAA;AACD,IAAA,cAAc,EAAE;QACd,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE;QACpD,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE;AACjD,KAAA;AACD,IAAA,cAAc,EAAE;QACd,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE;QACpD,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE;AACjD,KAAA;AACD,IAAA,eAAe,EAAE;QACf,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE;QACnD,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE;AACjD,KAAA;AACD,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE;QAC7C,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE;AAC1C,KAAA;AACD,IAAA,UAAU,EAAE;QACV,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE;QAC7C,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE;AAC1C,KAAA;AACD,IAAA,QAAQ,EAAE;QACR,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE;QAClD,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE;AAC/C,KAAA;AACD,IAAA,QAAQ,EAAE;QACR,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE;QAClD,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE;AAC/C,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,IAAI,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE;AACvC,QAAA,EAAE,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE;AACrC,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,IAAI,EAAE,EAAE,SAAS,EAAE,mBAAmB,EAAE;AACxC,QAAA,EAAE,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE;AACrC,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,IAAI,EAAE,EAAE,SAAS,EAAE,mBAAmB,EAAE;AACxC,QAAA,EAAE,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE;AACrC,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,IAAI,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE;AACvC,QAAA,EAAE,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE;AACrC,KAAA;AACD,IAAA,QAAQ,EAAE;QACR,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE;QACpD,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE;AACjD,KAAA;AACD,IAAA,WAAW,EAAE;QACX,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,4BAA4B,EAAE;QAC7D,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,uBAAuB,EAAE;AACvD,KAAA;AACD,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE;QAC1C,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE;AACxC,KAAA;AACD,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,+BAA+B,EAAE;QAChE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,6BAA6B,EAAE;AAC7D,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE;AAChC,QAAA,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE;AAC/B,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE;AAChC,QAAA,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE;AAC/B,KAAA;AACD,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE;QAC/C,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE;AAC9C,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,IAAI,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE;AAC/B,QAAA,EAAE,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE;AACjC,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,IAAI,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE;AACrC,QAAA,EAAE,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE;AACnC,KAAA;AACD,IAAA,UAAU,EAAE;QACV,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE;QAC7C,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE;AAC1C,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,kBAAkB,EAAE;AACzE,QAAA,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,iBAAiB,EAAE;AACtE,KAAA;AACD,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,mCAAmC,EAAE;QACpE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,kCAAkC,EAAE;AAClE,KAAA;AACD,IAAA,WAAW,EAAE;QACX,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,oCAAoC,EAAE;QACrE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,kCAAkC,EAAE;AAClE,KAAA;AACD,IAAA,aAAa,EAAE;QACb,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,kCAAkC,EAAE;QACnE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,8BAA8B,EAAE;AAC9D,KAAA;AACD,IAAA,cAAc,EAAE;QACd,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,gCAAgC,EAAE;QACjE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,8BAA8B,EAAE;AAC9D,KAAA;;AAED,IAAA,SAAS,EAAE;AACT,QAAA,IAAI,EAAE,EAAE,QAAQ,EAAE,sBAAsB,EAAE;AAC1C,QAAA,EAAE,EAAE,EAAE,QAAQ,EAAE,oBAAoB,EAAE;AACvC,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,IAAI,EAAE,EAAE,QAAQ,EAAE,sBAAsB,EAAE;AAC1C,QAAA,EAAE,EAAE,EAAE,QAAQ,EAAE,oBAAoB,EAAE;AACvC,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,IAAI,EAAE,EAAE,QAAQ,EAAE,sBAAsB,EAAE;AAC1C,QAAA,EAAE,EAAE,EAAE,QAAQ,EAAE,oBAAoB,EAAE;AACvC,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,IAAI,EAAE,EAAE,QAAQ,EAAE,sBAAsB,EAAE;AAC1C,QAAA,EAAE,EAAE,EAAE,QAAQ,EAAE,oBAAoB,EAAE;AACvC,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,IAAI,EAAE,EAAE,QAAQ,EAAE,uBAAuB,EAAE;AAC3C,QAAA,EAAE,EAAE,EAAE,QAAQ,EAAE,wBAAwB,EAAE;AAC3C,KAAA;;AAGG,SAAU,aAAa,CAAC,SAAgE,EAAA;AAC5F,IAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AACjC,QAAA,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,EAAqB,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC;IAC9E;AAEA,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QAC5B,MAAM,QAAQ,GAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAClD,QAAA,SAAS,CAAC,OAAO,CAAC,IAAI,IAAG;YACvB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAqB,CAAC;YACtD,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,KAAI;oBACjD,IAAI,GAAG,KAAK,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAC7C,wBAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA,EAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,GAAG,EAAE;oBACrD;yBAAO;AACL,wBAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG;oBAC1B;AACF,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,KAAI;oBAC/C,IAAI,GAAG,KAAK,WAAW,IAAI,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AAC3C,wBAAA,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAA,EAAG,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,GAAG,EAAE;oBACjD;yBAAO;AACL,wBAAA,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG;oBACxB;AACF,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,QAAQ;IACjB;AAEA,IAAA,OAAO,SAAS;AAClB;AAEA;AACO,MAAM,UAAU,GAA2B;AAChD,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,SAAS,EAAE,SAAS;AACpB,IAAA,UAAU,EAAE,UAAU;AACtB,IAAA,aAAa,EAAE,aAAa;AAC5B,IAAA,MAAM,EAAE,mCAAmC;AAC3C,IAAA,aAAa,EAAE,yCAAyC;AACxD,IAAA,cAAc,EAAE,wCAAwC;;AAGpD,SAAU,aAAa,CAAC,MAAkB,EAAA;AAC9C,IAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,QAAA,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM;IACrC;AACA,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACzB,OAAO,CAAA,aAAA,EAAgB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;IAC7C;AACA,IAAA,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;;;AAGhC,QAAA,OAAO,QAAQ;IACjB;AACA,IAAA,OAAO,MAAM;AACf;;AC7MA;;;;AAIG;AAeH,MAAM,cAAc,GAAkC;AACpD,IAAA,gBAAgB,EAAE,YAAY;AAC9B,IAAA,eAAe,EAAE,GAAG;AACpB,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,gBAAgB,EAAE,GAAG;AACrB,IAAA,iBAAiB,EAAE,KAAK;AACxB,IAAA,aAAa,EAAE,KAAK;AACpB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,aAAa,EAAE,CAAC;AAChB,IAAA,WAAW,EAAE,WAAW;AACxB,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,aAAa,EAAE,KAAK;AACpB,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,cAAc,EAAE,IAAI;AACpB,IAAA,aAAa,EAAE,MAAM;CACtB;AAED,MAAM,IAAI,GAAG,MAAM,SAAS;AAE5B;AACA;AACA;AAEA,MAAM,MAAM,GAAG,MAAe,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK;AAEnF;AACO,MAAM,gBAAgB,GAAG,MAAe,MAAM,EAAE,IAAI,OAAO,oBAAoB,KAAK;AAE3F,IAAI,kBAAqD;AAEzD;SACgB,oBAAoB,GAAA;IAClC,IAAI,CAAC,MAAM,EAAE;AAAE,QAAA,OAAO,KAAK;AAC3B,IAAA,IAAI,kBAAkB,KAAK,SAAS,EAAE;QACpC,kBAAkB;AAChB,YAAA,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,kCAAkC,CAAC,GAAG,IAAI;IAC1G;AACA,IAAA,OAAO,CAAC,CAAC,kBAAkB,IAAI,kBAAkB,CAAC,OAAO;AAC3D;AAEA,IAAI,uBAA4C;AAEhD;;;;AAIG;SACa,sBAAsB,GAAA;AACpC,IAAA,IAAI,uBAAuB,KAAK,SAAS,EAAE;QACzC,uBAAuB;AACrB,YAAA,MAAM,EAAE;gBACR,OAAO,GAAG,KAAK,WAAW;AAC1B,gBAAA,OAAO,GAAG,CAAC,QAAQ,KAAK,UAAU;AAClC,gBAAA,GAAG,CAAC,QAAQ,CAAC,4BAA4B,CAAC;AAC1C,gBAAA,OAAQ,UAAkB,CAAC,YAAY,KAAK,UAAU;IAC1D;AACA,IAAA,OAAO,uBAAuB;AAChC;AAQA;AACA;AACA;AAEA,SAAS,GAAG,CAAC,KAAyB,EAAA;IACpC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;AAAE,QAAA,OAAO,SAAS;AAChE,IAAA,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;AAC3B,IAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS;AAC3C;AAEA;AACA,SAAS,WAAW,CAAC,KAAyB,EAAA;IAC5C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;AAAE,QAAA,OAAO,SAAS;AAChE,IAAA,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE;AACtB,IAAA,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;AAC5D;AAEA,MAAM,oBAAoB,GAAG,eAAe;AAC5C,MAAM,kBAAkB,GAAqB,CAAC,UAAU,EAAE,YAAY,CAAC;AAEvE;AACA,SAAS,YAAY,CAAC,IAAY,EAAA;AAChC,IAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;AACrB,IAAA,IAAI,CAAC,CAAC;AAAE,QAAA,OAAO,oBAAoB;AACnC,IAAA,OAAO,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA,EAAA,EAAK,CAAC,EAAE;AAC1C;AAEA;;;;;AAKG;AACG,SAAU,WAAW,CAAC,GAAyC,EAAA;IACnE,MAAM,IAAI,GAAmB,EAAE;AAE/B,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC;IAC7B,IAAI,IAAI,EAAE;AACR,QAAA,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAQ;IACnG;IACA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC5B,IAAI,MAAM,EAAE;AACV,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE;AACvB,QAAA,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACrB,YAAA,IAAI;gBACF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7B;AAAE,YAAA,MAAM;;YAER;QACF;aAAO;AACL,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC;QACjB;IACF;AACA,IAAA,MAAM,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE;AACL,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAClG;AACA,IAAA,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC;AACrC,IAAA,IAAI,UAAU;AAAE,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5C,IAAA,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC5B,IAAI,MAAM,KAAK,SAAS;AAAE,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,KAAK,OAAO;AAC1D,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC;IACxB,IAAI,IAAI,KAAK,SAAS;AAAE,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,KAAK,OAAO;IACpD,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAClC,IAAA,MAAM,WAAW,GAAG,GAAG,CAAC,cAAc,CAAC;IACvC,IAAI,WAAW,KAAK,SAAS;AAAE,QAAA,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC;IAC3E,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE;IACpC,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK;AAAE,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AAClF,IAAA,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC;IAC/B,IAAI,KAAK,EAAE;QACT,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1D,IAAI,KAAK,IAAI,GAAG;YAAE,IAAI,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;IACjD;AACA,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC;AACxB,IAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,OAAO,GAAG,KAAK,IAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAS;IAC1I;AACA,IAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC;AAChC,IAAA,IAAI,QAAQ;AAAE,QAAA,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,QAAQ,GAAG,QAAQ,GAAG,OAAO;AAEnF,IAAA,MAAM,EAAE,GAAG,GAAG,CAAC,YAAY,CAAC;AAC5B,IAAA,MAAM,EAAE,GAAG,GAAG,CAAC,YAAY,CAAC;AAC5B,IAAA,MAAM,EAAE,GAAG,GAAG,CAAC,iBAAiB,CAAC;AACjC,IAAA,MAAM,EAAE,GAAG,GAAG,CAAC,gBAAgB,CAAC;IAChC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QACxB,IAAI,CAAC,QAAQ,GAAG;AACd,YAAA,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC;AAClB,YAAA,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC;AAClB,YAAA,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;AACf,YAAA,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;YACd,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC;SACvC;IACH;;IAGC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAiC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1G,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,mBAAmB,CAAC,EAAW,EAAE,MAAqC,EAAA;AAC7E,IAAA,OAAO,YAAY,CACjB,WAAW,CAAC,CAAC,IAAI,KAAI;QACnB,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,CAAA,QAAA,EAAW,IAAI,CAAA,CAAE,CAAC;QAC5C,OAAO,CAAC,KAAK,IAAI,GAAG,SAAS,GAAG,CAAC;AACnC,IAAA,CAAC,CAAC,EACF,MAAM,CACP;AACH;AAEA,SAAS,YAAY,CAAC,IAAoB,EAAE,MAAqC,EAAA;IAC/E,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,aAAa;;AAEhD,IAAA,IAAI,MAAM,KAAK,MAAM,KAAK,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;QAC1I,MAAM,GAAG,IAAI;IACf;AACA,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK;AAC/B,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC;IAClE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,gBAAgB;IAC3D,OAAO;AACL,QAAA,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,gBAAgB;AACpD,QAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,eAAe;AACjD,QAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,YAAY;AACxC,QAAA,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,aAAa;QAC3C,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,gBAAgB,GAAG,SAAS;AACnG,QAAA,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,iBAAiB;QACvD,MAAM;AACN,QAAA,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;AACxD,QAAA,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,aAAa;AAC3C,QAAA,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,CAAC;AAC1B,QAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;AAC7B,QAAA,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;AAC7B,QAAA,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI;AACnC,QAAA,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;AAC7B,QAAA,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;AAC7B,QAAA,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI;AACnC,QAAA,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,OAAO;AAC1C,QAAA,WAAW,EAAE,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;QACnE,MAAM;AACN,QAAA,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,kBAAkB;QAC/C,IAAI;KACL;AACH;AAEA,SAAS,cAAc,CAAC,MAAiC,EAAA;AACvD,IAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE;AAAE,QAAA,OAAO,EAAE;IACnC,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACpF,IAAI,MAAM,YAAY,OAAO;QAAE,OAAO,CAAC,MAAM,CAAC;IAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,YAAY,QAAQ,EAAE;AACvD,QAAA,OAAQ,KAAK,CAAC,IAAI,CAAC,MAAyB,CAAe,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,OAAO,CAAC;IACnG;AACA,IAAA,OAAO,EAAE;AACX;AAEA;;;;AAIG;AACG,SAAU,WAAW,CAAC,UAAkB,EAAE,MAAc,EAAA;AAC5D,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,UAAU;AAC9B,IAAA,MAAM,KAAK,GAAG,CAAC,UAAU,IAAI,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;AACvD,IAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;IACpB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG;IAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG;IAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK;IAC9B,MAAM,CAAC,GAAG,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC;AAC7C,IAAA,MAAM,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,IAAI,GAAG,MAAM,CAAA,GAAA,EAAM,IAAI,CAAA,CAAE;AACrD;AAEA,SAAS,WAAW,CAAC,CAA8B,EAAA;IACjD,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAM,CAA6B,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;AAC3F;AAEA,SAAS,aAAa,CAAC,IAA8B,EAAA;AACnD,IAAA,OAAO,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW;AACrF;AAEA;;;;AAIG;AACG,SAAU,iBAAiB,CAAC,EAAW,EAAE,IAAqB,EAAA;IAClE,IAAI,CAAC,MAAM,EAAE;AAAE,QAAA,OAAO,CAAC;AACvB,IAAA,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE;IACvC,IAAI,GAAG,GAAG,CAAC;AACX,IAAA,IAAI,MAAM,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,YAAY,IAAI,CAAC;IAC7E,IAAI,IAAI,EAAE;AACR,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,qBAAqB,EAAE;AACtC,QAAA,GAAG,GAAG,CAAC,CAAC,GAAG;AACX,QAAA,MAAM,GAAG,CAAC,CAAC,MAAM;IACnB;AACA,IAAA,MAAM,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM;IAClC,IAAI,KAAK,IAAI,CAAC;AAAE,QAAA,OAAO,CAAC;AACxB,IAAA,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,KAAK;IAC3C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AAClC;AAEA;AACA;AACA;AAEA;AACA,MAAM,OAAO,GAAG,IAAI,OAAO,EAAsB;AACjD;AACA,MAAM,KAAK,GAAG,IAAI,OAAO,EAAsB;AAC/C,MAAM,MAAM,GAAG,IAAI,OAAO,EAA0C;AAEpE,SAAS,aAAa,CAAC,EAAW,EAAA;IAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9B,IAAI,QAAQ,EAAE;AACZ,QAAA,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAChB,QAAQ,CAAC,MAAM,EAAE;IACnB;IACA,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IAC5B,IAAI,IAAI,EAAE;AACR,QAAA,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,IAAI,CAAC,MAAM,EAAE;IACf;IACA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AAC5B,IAAA,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,YAAY,CAAC,KAAK,CAAC;AACnB,QAAA,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IACnB;AACF;AAEA,SAAS,SAAS,CAAC,EAAW,EAAE,MAAuC,EAAA;AACrE,IAAA,MAAM,KAAK,GAAI,EAAkB,CAAC,KAAK;AACvC,IAAA,IAAI,CAAC,KAAK;QAAE;IACZ,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;QAClC,KAAa,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7C,IAAA,CAAC,CAAC;AACJ;AAEA,MAAM,QAAQ,GAAG,kDAAkD;AAEnE;;;;;AAKG;SACa,gBAAgB,CAAC,IAAqB,EAAE,EAAmB,EAAE,CAAS,EAAA;IACpF,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,QAAQ;QAAE,OAAO,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC;AACrF,IAAA,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;AACtB,IAAA,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;IACpB,MAAM,EAAE,GAA4B,EAAE;IACtC,MAAM,EAAE,GAA4B,EAAE;AACtC,IAAA,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAChF,IAAA,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAChF,IAAI,GAAG,KAAK,GAAG,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM;QAAE,OAAO,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,EAAE;IACtE,IAAI,CAAC,GAAG,CAAC;IACT,IAAI,EAAE,GAAG,IAAI;IACb,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,MAAK;QACjC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACtB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;AACxB,QAAA,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE;YAAE,EAAE,GAAG,KAAK;AAC7D,QAAA,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE;QACrB,OAAO,CAAA,EAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA,EAAG,IAAI,CAAA,CAAE;AACrD,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,EAAE;AACvC;AAEA,MAAM,cAAc,GAAG,EAAE;AACzB,IAAI,eAAoC;AAExC,SAAS,oBAAoB,GAAA;AAC3B,IAAA,IAAI,eAAe,KAAK,SAAS,EAAE;QACjC,eAAe;YACb,OAAO,GAAG,KAAK,WAAW;AAC1B,gBAAA,OAAO,GAAG,CAAC,QAAQ,KAAK,UAAU;AAClC,gBAAA,GAAG,CAAC,QAAQ,CAAC,2BAA2B,EAAE,cAAc,CAAC;IAC7D;AACA,IAAA,OAAO,eAAe;AACxB;AAEA,SAAS,YAAY,CAAC,EAAyB,EAAA;IAC7C,MAAM,MAAM,GAAa,EAAE;AAC3B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,cAAc,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC;IACtE;AACA,IAAA,OAAO,MAAM;AACf;AAEA,SAAS,cAAc,CACrB,MAAmB,EACnB,MAA0C,EAAA;AAE1C,IAAA,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;QAChC,OAAO,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,IAAgB,EAAE,MAAM,CAAC,EAAc,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE;IACvG;AACA,IAAA,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC;;IAEpC,IAAI,oBAAoB,EAAE,EAAE;QAC1B,OAAO,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,IAAgB,EAAE,MAAM,CAAC,EAAc,CAAC,EAAE,MAAM,EAAE,CAAA,OAAA,EAAU,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,EAAE;IACjH;;IAEA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC;IACpE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAI;QACzC,MAAM,KAAK,GAAa,EAAE,MAAM,EAAE,CAAC,GAAG,cAAc,EAAE;AACtD,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YACrB,KAAK,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;AAC3E,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE;AACxC;AAEA;AACA,SAAS,MAAM,CAAC,EAAW,EAAE,MAAqC,EAAA;IAChE,aAAa,CAAC,EAAE,CAAC;AACjB,IAAA,IAAI,MAAM,CAAC,aAAa,EAAE;QACxB,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;QACvC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC;IACvC;SAAO;AACL,QAAA,MAAM,KAAK,GAAI,EAAkB,CAAC,KAAK;AACvC,QAAA,IAAI,KAAK;AAAE,YAAA,KAAK,CAAC,OAAO,GAAG,EAAE;IAC/B;AACF;AAEA;SACgB,aAAa,CAAC,EAAW,EAAE,SAA8B,EAAE,EAAA;IACzE,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;AAC9C;AAKA;AACM,SAAU,cAAc,CAAC,MAA6C,EAAA;IAC1E,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,oBAAoB,EAAE;AACpD;AAEA,SAAS,YAAY,CACnB,EAAW,EACX,IAA8B,EAC9B,MAAqC,EACrC,YAAY,GAAG,CAAC,EAChB,OAAsB,EAAA;AAEtB,IAAA,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;AAC9D,IAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,YAAY,GAAG,OAAO,CAAC;IAC9D,aAAa,CAAC,EAAE,CAAC;AAEjB,IAAA,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE;AAC1B,QAAA,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,CAAC;QACX,UAAU,CAAC,EAAE,CAAC;QACd;IACF;AAEA,IAAA,IAAI,MAAM,CAAC,aAAa,EAAE;QACxB,IAAI,UAAU,GAAG,CAAC;YAAG,EAAkB,CAAC,KAAK,CAAC,cAAc,GAAG,CAAA,EAAG,UAAU,IAAI;QAChF,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;QACvC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC;QACrC,OAAO,CAAC,EAAE,CAAC;AACX,QAAA,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;QAChB,MAAM,CAAC,GAAG,CACR,EAAE,EACF,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AACjB,YAAA,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;YACnB,UAAU,CAAC,EAAE,CAAC;AAChB,QAAA,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC,CAC1B;QACD;IACF;IAEA,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;;;IAG5C,IAAI,EAAE,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC,EAAE;AAC7B,QAAA,MAAM,KAAK,GAAI,EAAkB,CAAC,KAAK;AACvC,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,GAAG;AAAE,YAAA,KAAK,CAAC,OAAO,GAAG,EAAE;IACxD;AAEA,IAAA,IAAI,OAAO,EAAE,CAAC,OAAO,KAAK,UAAU,EAAE;AACpC,QAAA,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,EAAE,CAAC;QACX,UAAU,CAAC,EAAE,CAAC;QACd;IACF;IAEA,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;AACjD,IAAA,MAAM,MAAM,GAA6B,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;AAC5G,IAAA,IAAI,IAAe;AACnB,IAAA,IAAI;QACF,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5C;AAAE,IAAA,MAAM;;AAEN,QAAA,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACnE;AACA,IAAA,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC;AACX,IAAA,IAAI,CAAC,QAAQ,GAAG,MAAK;QACnB,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE;AAC5B,YAAA,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;;;;AAIlB,YAAA,IAAI;gBACF,IAAI,CAAC,YAAY,EAAE;YACrB;AAAE,YAAA,MAAM;AACN,gBAAA,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;YAC1B;YACA,IAAI,CAAC,MAAM,EAAE;QACf;QACA,UAAU,CAAC,EAAE,CAAC;AAChB,IAAA,CAAC;AACH;AAEA;;;;AAIG;AACH,SAAS,WAAW,CAAC,EAAW,EAAE,IAA8B,EAAE,QAAqB,EAAA;AACrF,IAAA,IAAI,OAAO,EAAE,CAAC,OAAO,KAAK,UAAU;AAAE,QAAA,OAAO,IAAI;IACjD,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;IAC5C,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;AACjD,IAAA,IAAI,IAAe;AACnB,IAAA,IAAI;AACF,QAAA,MAAM,QAAQ,GAAG,IAAK,UAAkB,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACrF,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,QAAQ;AACR,YAAA,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7B,YAAA,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;SACA;AAC7B,QAAA,IAAI;YACF,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;QAC5C;AAAE,QAAA,MAAM;AACN,YAAA,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACrE;IACF;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,IAAI;IACb;AACA,IAAA,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC;AACrB,IAAA,IAAI,IAAI,CAAC,IAAI,EAAE;;;QAGb,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;QAC5E,MAAM,GAAG,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC;AAC3E,QAAA,IAAI;AACF,YAAA,MAAM,QAAQ,GAAG,IAAK,UAAkB,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YACrF,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE;AAC/G,YAAA,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAkC,CAAC,CAAC;QAC9E;AAAE,QAAA,MAAM;;QAER;IACF;IACA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI;AACtC,IAAA,IAAI,CAAC,QAAQ,GAAG,MAAK;;AAEnB,QAAA,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE;AACrC,YAAA,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AAClB,YAAA,IAAI;gBACF,IAAI,CAAC,YAAY,EAAE;YACrB;AAAE,YAAA,MAAM;AACN,gBAAA,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;YAC1B;YACA,IAAI,CAAC,MAAM,EAAE;YACb,QAAQ,IAAI;QACd;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;AACrB,IAAA,CAAC;AACD,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,aAAa,CAAC,EAAW,EAAE,QAAgB,EAAE,QAAyB,EAAA;IAC7E,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,QAAQ;IACnE,MAAM,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,IAAI,CAAC,GAAG,KAAK;AACtC,IAAA,MAAM,IAAI,GAAG,CAAC,CAAkB,MAAM,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA,EAAA,CAAI,GAAG,CAAA,KAAA,EAAQ,CAAC,CAAA,GAAA,EAAM,CAAC,CAAA,CAAA,CAAG,CAAC;IAEjG,IAAI,SAAS,GAAG,EAAE;AAClB,IAAA,IAAI,CAAC;AAAE,QAAA,SAAS,IAAI,CAAA,YAAA,EAAe,IAAI,CAAC,CAAC,CAAC,GAAG;AAC7C,IAAA,IAAI,CAAC;AAAE,QAAA,SAAS,IAAI,CAAA,YAAA,EAAe,IAAI,CAAC,CAAC,CAAC,GAAG;AAC7C,IAAA,IAAI,MAAM;AAAE,QAAA,SAAS,IAAI,CAAA,QAAA,EAAW,MAAM,GAAG,CAAC,MAAM;IACpD,IAAI,KAAK,KAAK,CAAC;AAAE,QAAA,SAAS,IAAI,CAAA,OAAA,EAAU,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG;IAE7D,EAAkB,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE;AACxD;AAEA;AACA,SAAS,OAAO,CAAC,EAAW,EAAE,IAA8B,EAAE,MAAqC,EAAA;IACjG,IAAI,MAAM,CAAC,aAAa,IAAI,OAAO,EAAE,CAAC,OAAO,KAAK,UAAU,EAAE;AAC5D,QAAA,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC;QACvB;IACF;IACA,aAAa,CAAC,EAAE,CAAC;IACjB,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,SAAS,GAAI,IAAI,CAAC,IAA2C,CAAC;IACrH,MAAM,KAAK,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC;AAC/E,IAAA,MAAM,MAAM,GAA6B,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE;AAC5G,IAAA,IAAI,IAAe;AACnB,IAAA,IAAI;QACF,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5C;AAAE,IAAA,MAAM;AACN,QAAA,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACnE;;AAEA,IAAA,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC;AACvB;AAEA,SAAS,WAAW,CAAC,EAAW,EAAE,MAAqC,EAAA;IACrE,aAAa,CAAC,EAAE,CAAC;AACjB,IAAA,IAAI,MAAM,CAAC,aAAa,EAAE;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;QACpC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;IAC1C;SAAO;AACL,QAAA,MAAM,KAAK,GAAI,EAAkB,CAAC,KAAK;AACvC,QAAA,IAAI,KAAK;AAAE,YAAA,KAAK,CAAC,OAAO,GAAG,GAAG;IAChC;AACF;AAEA;SACgB,cAAc,CAAC,EAAW,EAAE,SAA8B,EAAE,EAAA;IAC1E,MAAM,IAAI,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE;AAC7C,IAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AAAE,QAAA,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC;AAClD;AAEA,IAAI,kBAAwC;AAC5C,SAAS,qBAAqB,GAAA;IAC5B,IAAI,CAAC,kBAAkB,EAAE;QACvB,kBAAkB,GAAG,EAAE;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE;AAAE,YAAA,kBAAkB,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;IACjE;AACA,IAAA,OAAO,kBAAkB;AAC3B;AAEA,MAAM,OAAO,GAA4B,EAAE,OAAO,EAAE,IAAI,EAAE;AAE1D;AACA;AACA;AAEM,SAAU,mBAAmB,CAAC,UAAA,GAAkC,EAAE,EAAA;IACtE,IAAI,MAAM,GAAkC,EAAE,GAAG,cAAc,EAAE,GAAG,UAAU,EAAE;AAChF,IAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA4B;;AAEpD,IAAA,IAAI,QAAQ,GAAG,IAAI,OAAO,EAAW;;AAErC,IAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAW;IACpC,IAAI,KAAK,GAAG,CAAC;IACb,IAAI,SAAS,GAAuB,IAAI;;AAExC,IAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB;;AAE5C,IAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAW;;AAElC,IAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAW;;;AAIlC,IAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAA2C;AAEhE,IAAA,SAAS,MAAM,CAAC,IAAU,EAAE,GAAW,EAAE,MAAkC,EAAA;QACzE,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE;QAC9C,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACtB,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,MAAM,EAAE,EAAE;AACvC,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,SAAS,QAAQ,CAAC,EAAW,EAAE,OAAgB,EAAA;QAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,MAAM;YAAE;AACb,QAAA,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;AAC7B,QAAA,MAAM,CAAC,gBAAgB,EAAE,SAAS,CAAC,EAAE,CAAC;AACtC,QAAA,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACnB,OAAO,CAAC,EAAE,CAAC;AACX,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE;;;YAG3B,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AAClB,gBAAA,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;YACpB;AAAO,iBAAA,IAAI,EAAE,CAAC,WAAW,KAAK,KAAK,EAAE;;;AAGnC,gBAAA,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACpB;YACA;QACF;;AAEA,QAAA,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ;AAAE,YAAA,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;IACrD;AAEA,IAAA,SAAS,aAAa,GAAA;QACpB,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,KAAI;AAC9B,YAAA,IAAI,EAAE,CAAC,WAAW,KAAK,KAAK;AAAE,gBAAA,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;AACnD,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,SAAS,YAAY,CAAC,EAAW,EAAE,MAAuB,EAAE,QAAgB,EAAA;AAC1E,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO;AAC3B,QAAA,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC;AAC7B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,MAAM,KAAK,GAAI,EAAkB,CAAC,KAAK;AACvC,YAAA,IAAI,KAAK;AAAE,gBAAA,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E;QACA,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;YAAE,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;IACvG;AAEA,IAAA,SAAS,MAAM,GAAA;QACb,KAAK,GAAG,CAAC;AACT,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;YACvB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/B,YAAA,IAAI,MAAM;AAAE,gBAAA,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AAC1E,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,KAAK,KAAK,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAEvE,SAAS,MAAM,CAAC,EAAW,EAAA;AACzB,QAAA,IAAI,EAAE,KAAK,CAAC,CAAC,SAAS;YAAE;QACxB,MAAM,MAAM,GAAG,EAAE,GAAG,kBAAkB,GAAG,qBAAqB;QAC9D,MAAM,MAAM,GAAgB,SAAS,IAAK,MAAM,CAAC,IAA2B,IAAI,MAAM;QACtF,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC;QAC3C,SAAS,GAAG,EAAE,GAAG,MAAM,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE;YAChB,oBAAoB,CAAC,KAAK,CAAC;YAC3B,KAAK,GAAG,CAAC;QACX;IACF;IAEA,SAAS,OAAO,CAAC,EAAW,EAAA;QAC1B,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;YAAE,MAAM,CAAC,KAAK,CAAC;IAC5D;IAEA,SAAS,iBAAiB,CAAC,OAAoC,EAAA;AAC7D,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACxB,YAAA,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM;YACvB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/B,YAAA,IAAI,CAAC,MAAM;gBAAE;AACb,YAAA,IAAI,KAAK,CAAC,cAAc,EAAE;AACxB,gBAAA,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC;YACd;iBAAO;gBACL,OAAO,CAAC,EAAE,CAAC;YACb;;AAEA,YAAA,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AAC9D,QAAA,CAAC,CAAC;IACJ;IAEA,SAAS,WAAW,CAAC,OAAoC,EAAA;AACvD,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAA0B;AACvD,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACxB,YAAA,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM;YACvB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/B,YAAA,IAAI,CAAC,MAAM;gBAAE;AACb,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO;AAE3B,YAAA,IAAI,EAAE,CAAC,WAAW,KAAK,KAAK,EAAE;AAC5B,gBAAA,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;gBACnB;YACF;AAEA,YAAA,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE;;AAE3B,gBAAA,IAAI,KAAK,CAAC,cAAc,EAAE;AACxB,oBAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AAChB,oBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACpB,wBAAA,MAAM,CAAC,QAAQ,GAAG,IAAI;AACtB,wBAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBAClB;oBACA,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC7B,wBAAA,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC7B,IAAI,MAAM,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;AACrD,4BAAA,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AAChB,4BAAA,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;wBACrB;oBACF;gBACF;qBAAO;AACL,oBAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBAChB,IAAI,IAAI,CAAC,MAAM;AAAE,wBAAA,MAAM,CAAC,QAAQ,GAAG,KAAK;gBAC1C;gBACA;YACF;AAEA,YAAA,IAAI,KAAK,CAAC,cAAc,EAAE;AACxB,gBAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AAChB,gBAAA,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM;oBAAE;;;gBAIrC,IAAI,YAAY,GAAG,CAAC;AACpB,gBAAA,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE;AACpB,oBAAA,MAAM,MAAM,GAAG,EAAE,CAAC,aAAa;oBAC/B,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;oBAC7C,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,CAAC,CAAC;gBAC7C;gBAEA,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC;AACrD,gBAAA,MAAM,CAAC,QAAQ,GAAG,IAAI;gBAEtB,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;;AAE7B,oBAAA,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC7B,IAAI,MAAM,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;;;AAGrD,wBAAA,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AAChB,wBAAA,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;oBACrB;gBACF;YACF;iBAAO;AACL,gBAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChB,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE;AAClC,oBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;wBAC3B,IAAI,IAAI,CAAC,IAAI;AAAE,4BAAA,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC;;AACnC,4BAAA,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC;oBAC9B;AACA,oBAAA,MAAM,CAAC,QAAQ,GAAG,KAAK;gBACzB;YACF;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,SAAS,UAAU,CAAC,OAAoC,EAAA;AACtD,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;YACxB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;AACzC,YAAA,IAAI,CAAC,MAAM;gBAAE;YACb,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,iBAAiB,CAAC;AAC7D,QAAA,CAAC,CAAC;IACJ;IAEA,SAAS,WAAW,CAAC,IAA8B,EAAA;AACjD,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;AAC5D,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;AAChC,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI;AACxB,QAAA,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,UAAU,CAAA,CAAA,EAAI,MAAM,CAAC,SAAS,CAAC,CAAA,CAAE,EAAE,MAC1D,IAAI,oBAAoB,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,IAAsB,EAAE,CAAC,CAC/F;IACH;IAEA,SAAS,mBAAmB,CAAC,IAA8B,EAAA;AACzD,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI;AACxB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE;;;AAGlC,YAAA,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,UAAU,CAAA,CAAE,EAAE,MAC1C,IAAI,oBAAoB,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAsB,EAAE,CAAC,CACzH;QACH;AACA,QAAA,OAAO,MAAM,CAAC,IAAI,EAAE,CAAA,EAAA,EAAK,IAAI,CAAC,UAAU,CAAA,CAAE,EAAE,MAC1C,IAAI,oBAAoB,CAAC,UAAU,EAAE;YACnC,SAAS,EAAE,qBAAqB,EAAE;YAClC,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,YAAA,IAAI,EAAE,IAAsB;AAC7B,SAAA,CAAC,CACH;IACH;AAEA,IAAA,SAAS,MAAM,CAAC,EAAW,EAAE,MAAuB,EAAE,WAAoB,EAAA;QACxE,MAAM,CAAC,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;AAC7C,QAAA,IAAI,WAAW;AAAE,YAAA,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,MAAM,CAAC,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS;AACzG,QAAA,MAAM,CAAC,gBAAgB,EAAE,OAAO,CAAC,EAAE,CAAC;IACtC;IAEA,SAAS,WAAW,CAAC,IAA8B,EAAA;AACjD,QAAA,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,sBAAsB,EAAE;IAC7G;AAEA,IAAA,SAAS,cAAc,CAAC,EAAW,EAAE,IAA8B,EAAA;AACjE,QAAA,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE;AAE1C,QAAA,IAAI,CAAC,gBAAgB,EAAE,EAAE;;AAEvB,YAAA,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;YAClB;QACF;AAEA,QAAA,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAqB;AAC/F,QAAA,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE;YACrB,aAAa,CAAC,EAAE,CAAC;AACjB,YAAA,IAAI,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE;AACnD,gBAAA,MAAM,CAAC,MAAM,GAAG,KAAK;AACrB,gBAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACjB;QACF;QACA,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AAAE,YAAA,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC;AAE9E,QAAA,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC;AACxB,QAAA,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;IAC1B;IAEA,SAAS,kBAAkB,CAAC,EAAW,EAAA;AACrC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,cAAc,CAAC,EAAE,EAAE,mBAAmB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAC5E;AAEA,IAAA,MAAM,QAAQ,GAA0B;AACtC,QAAA,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,EAAE,EAAA;AAC1B,YAAA,aAAa,EAAE;YACf,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC;AAC1C,YAAA,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAClE,CAAC;AAED,QAAA,SAAS,CAAC,MAAM,EAAA;YACd,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AACpC,gBAAA,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;AACnB,gBAAA,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;AACpB,YAAA,CAAC,CAAC;QACJ,CAAC;AAED,QAAA,IAAI,CAAC,WAAW,EAAA;AACd,YAAA,MAAM,KAAK,GAAG,WAAW,KAAK,MAAM,EAAE,GAAG,QAAQ,GAAG,IAAI,CAAC;AACzD,YAAA,IAAI,CAAC,KAAK;gBAAE;AACZ,YAAA,aAAa,EAAE;YACf,KAAK,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACjE,CAAC;AAED,QAAA,KAAK,CAAC,WAAW,EAAA;AACf,YAAA,MAAM,KAAK,GAAG,WAAW,KAAK,MAAM,EAAE,GAAG,QAAQ,GAAG,IAAI,CAAC;AACzD,YAAA,IAAI,CAAC,KAAK,IAAI,OAAO,gBAAgB,KAAK,WAAW;AAAE,gBAAA,OAAO,IAAI;AAClE,YAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACpB,YAAA,MAAM,WAAW,GAAG,CAAC,IAAa,KAAI;AACpC,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;oBAAE,kBAAkB,CAAC,IAAI,CAAC;gBAC1D,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC;AAChE,YAAA,CAAC;YACD,MAAM,EAAE,GAAG,IAAI,gBAAgB,CAAC,CAAC,OAAO,KAAI;gBAC1C,IAAI,OAAO,GAAG,KAAK;AACnB,gBAAA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACzB,oBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE;AAChC,wBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAiB;AACvC,wBAAA,IAAI,MAAM,CAAC,WAAW,KAAK,KAAK;4BAAE,WAAW,CAAC,MAAM,CAAC;wBACrD;oBACF;oBACA,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;wBACjC,IAAI,IAAI,YAAY,OAAO,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK;4BAAE,WAAW,CAAC,IAAI,CAAC;AAC9E,oBAAA,CAAC,CAAC;AACF,oBAAA,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM;wBAAE,OAAO,GAAG,IAAI;AAChD,gBAAA,CAAC,CAAC;;AAEF,gBAAA,IAAI,OAAO;AAAE,oBAAA,aAAa,EAAE;AAC9B,YAAA,CAAC,CAAC;YACF,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;AACrG,YAAA,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AAChB,YAAA,OAAO,MAAK;gBACV,EAAE,CAAC,UAAU,EAAE;AACf,gBAAA,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;AACrB,YAAA,CAAC;QACH,CAAC;QAED,OAAO,GAAA;AACL,YAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,UAAU,EAAE,CAAC;YACzC,QAAQ,CAAC,KAAK,EAAE;;AAEhB,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;gBACrB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AAC5B,gBAAA,IAAI,KAAK,KAAK,SAAS,EAAE;oBACvB,YAAY,CAAC,KAAK,CAAC;AACnB,oBAAA,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnB;AACF,YAAA,CAAC,CAAC;YACF,OAAO,CAAC,KAAK,EAAE;YACf,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,KAAI;gBAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK;AAAE,oBAAA,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;AACrE,YAAA,CAAC,CAAC;;AAEF,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AACrB,gBAAA,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AAAE,oBAAA,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;AACzC,YAAA,CAAC,CAAC;YACF,OAAO,CAAC,KAAK,EAAE;YACf,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;YAC9D,KAAK,CAAC,KAAK,EAAE;YACb,QAAQ,CAAC,KAAK,EAAE;YAChB,SAAS,CAAC,KAAK,EAAE;YACjB,MAAM,CAAC,KAAK,CAAC;AACb,YAAA,QAAQ,GAAG,IAAI,OAAO,EAAE;QAC1B,CAAC;QAED,OAAO,GAAA;;;YAGL,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;YAC9D,KAAK,CAAC,KAAK,EAAE;YACb,SAAS,CAAC,KAAK,EAAE;YACjB,MAAM,CAAC,KAAK,CAAC;AACb,YAAA,aAAa,EAAE;YACf,IAAI,CAAC,gBAAgB,EAAE;gBAAE;YACzB,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,KAAI;AAC9B,gBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM;gBAC7E,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC;AAC3B,YAAA,CAAC,CAAC;QACJ,CAAC;AAED,QAAA,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,EAAE,EAAA;YAC1B,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC;YAC1C,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QACpF,CAAC;QAED,mBAAmB,GAAA;YACjB,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACtC,CAAC;AAED,QAAA,SAAS,CAAC,SAAS,EAAA;YACjB,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,SAAS,EAAE;QACtC,CAAC;KACF;AAED,IAAA,OAAO,QAAQ;AACjB;;;;"}
|