diff --git a/.gitignore b/.gitignore index 981d64c..36b6469 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ dist node_modules +storybook-static diff --git a/.storybook/main.ts b/.storybook/main.ts new file mode 100644 index 0000000..6920050 --- /dev/null +++ b/.storybook/main.ts @@ -0,0 +1,6 @@ +import type {StorybookConfig} from "storybook-solidjs-vite" + +export default { + stories: ["../stories/**/*.stories.@(ts|tsx)"], + framework: "storybook-solidjs-vite", +} satisfies StorybookConfig diff --git a/.storybook/preview.tsx b/.storybook/preview.tsx new file mode 100644 index 0000000..4b1c9d5 --- /dev/null +++ b/.storybook/preview.tsx @@ -0,0 +1,7 @@ +import type {Preview} from "storybook-solidjs-vite" + +export default { + parameters: { + controls: {expanded: true}, + }, +} satisfies Preview diff --git a/README.md b/README.md index 2399ffc..3156187 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- solid-motionone + solid-motionone

# Solid MotionOne @@ -7,16 +7,36 @@ [![pnpm](https://img.shields.io/badge/maintained%20with-pnpm-cc00ff.svg?style=for-the-badge&logo=pnpm)](https://pnpm.io/) [![npm](https://img.shields.io/npm/v/solid-motionone?style=for-the-badge)](https://www.npmjs.com/package/solid-motionone) [![downloads](https://img.shields.io/npm/dw/solid-motionone?color=blue&style=for-the-badge)](https://www.npmjs.com/package/solid-motionone) +[![size](https://img.shields.io/bundlephobia/minzip/solid-motionone?style=for-the-badge)](https://bundlephobia.com/package/solid-motionone) -**A tiny, performant animation library for SolidJS. Powered by [Motion One](https://motion.dev/).** +**A tiny, performant animation library for Solid 2.0. Powered by [Motion](https://motion.dev/).** ## Introduction -Motion One for Solid is a 5.8kb animation library for SolidJS. It takes advantage of Solid's excellent performance and simple declarative syntax. This package supplies springs, independent transforms, and hardware accelerated animations. +Motion for Solid is a small animation library for Solid 2.0. It takes advantage of Solid's excellent performance and simple declarative syntax. This package supplies springs, gestures, scroll-triggered animations, variants, and hardware accelerated animations. + +## Contents + +- [Installation](#installation) +- [Create an animation](#create-an-animation) +- [Props reference](#props-reference) +- [Enter animations](#enter-animations) +- [Exit animations](#exit-animations) +- [`Presence` props](#presence-props) +- [Transition options](#transition-options) +- [Keyframes](#keyframes) +- [Variants](#variants) +- [Gestures: hover and press](#gestures-hover-and-press) +- [Scroll-triggered animations](#scroll-triggered-animations) +- [Event handlers](#event-handlers) +- [Low-level primitives](#low-level-primitives) +- [Scroll-linked animations](#scroll-linked-animations) +- [TypeScript](#typescript) +- [Examples](#examples) ## Installation -Motion One for Solid can be installed via npm: +Solid Motion can be installed via npm. It requires `solid-js@^2.0.0-rc.0` (Solid 2.0 is currently in beta/RC). ```bash npm install solid-motionone @@ -53,10 +73,100 @@ function App() { } ``` -But any HTML or SVG element can be rendered, by defining it like this: `` +But any HTML or SVG element can be rendered, by defining it like this: ``, ``, ``, etc. Or like this: `` +All non-animation props (`id`, `class`, `onClick`, SVG attributes like `viewBox`, event listeners, etc.) pass straight through to the rendered element, same as any other Solid component. + +## Props reference + +Every animation-related prop below accepts either a direct target object (`{opacity: 1}`) or a string key that's looked up in the [`variants`](#variants) prop. + +| Prop | Type | Description | +| --- | --- | --- | +| `initial` | target \| string \| `false` | The style to render *before* any animation runs. Defaults to the element's current computed style. Set to `false` to skip the enter animation entirely — see [Enter animations](#enter-animations). | +| `animate` | target \| string | The style to animate to. Reactive — changing it (e.g. via a signal) re-triggers an animation to the new target. | +| `exit` | target \| string | The style to animate to when the element is removed. Only takes effect inside a [`Presence`](#exit-animations) ancestor; without one, the element unmounts immediately regardless of this prop. | +| `hover` | target \| string | The style to animate to while the pointer is hovering the element. See [Gestures](#gestures-hover-and-press). | +| `press` | target \| string | The style to animate to while the element is being pressed. Layers on top of `hover` if both are active. | +| `inView` | target \| string | The style to animate to when the element scrolls into view. See [Scroll-triggered animations](#scroll-triggered-animations). | +| `inViewOptions` | `{root?, margin?, amount?}` | Options controlling when `inView` triggers — see [Scroll-triggered animations](#scroll-triggered-animations). | +| `variants` | `Record` | A map of named targets that `initial`/`animate`/`exit`/`hover`/`press`/`inView` can reference by string key. See [Variants](#variants). | +| `transition` | object | Controls duration, easing, delay, and per-value overrides for the animation. See [Transition options](#transition-options). | +| `tag` | string | Explicitly sets the rendered element tag, as an alternative to `Motion.tag` proxy access. | + +A target object accepts any CSS property (camelCase or kebab-case), the shorthand transform values (`x`, `y`, `scale`, `rotate`, etc.), CSS custom properties (`"--my-var"`), and can optionally carry its own `transition` override (see [Transition options](#transition-options)). + +## Enter animations + +Elements will automatically `animate` to the values defined in `animate` when they're created — animating from whatever `initial` describes (or the element's current/default style, if `initial` isn't set) to the `animate` target. + +This can be disabled by setting the `initial` prop to `false`. The styles defined in `animate` will be applied immediately when the element is first created, with no animation. + +```tsx + +``` + +If `initial` and `animate` already describe the same values, no animation runs at all. + +## Exit animations + +When an element is removed with `` it can be animated out with the `Presence` component and the `exit` prop. `Presence` keeps the element mounted until its exit animation finishes, then removes it: + +```tsx +import {createSignal, Show} from "solid-js" +import {Motion, Presence} from "solid-motionone" + +function App() { + const [isShown, setShow] = createSignal(true) + + return ( +
+ + + + + + +
+ ) +} +``` + +`exit` can be provided a `transition` of its own, that overrides the component's `transition`: + +```tsx + + + + + +``` + +If more than one `Motion` element (nested or as siblings) has its own `exit` prop, `Presence` waits for every one of them to finish its own exit animation before removing the subtree. + +## `Presence` props + +| Prop | Type | Default | Description | +| --- | --- | --- | --- | +| `initial` | boolean | `true` | If `false`, disables the enter animation for every child `Motion` element the *first* time `Presence` itself is rendered. Subsequent elements entering later still animate normally. | +| `exitBeforeEnter` | boolean | `false` | If `true`, waits for the outgoing element's exit animation to finish before starting the incoming element's enter animation, instead of running both at once. | + +```tsx + + + +``` + ## Transition options We can change the type of animation used by passing a `transition` prop. @@ -68,7 +178,7 @@ We can change the type of animation used by passing a `transition` prop. /> ``` -By default transition options are applied to all values, but we can also override on a per-value basis: +By default transition options are applied to all values, but we can also override on a per-value basis — any option not specified in the override is inherited from the base transition: ```tsx ``` +`transition` also accepts spring physics options (`{type: "spring", stiffness, damping, mass}`), `delay`, and `repeat`/`repeatType` — anything supported by Motion's own `animate()` options at [motion.dev](https://motion.dev/). + Taking advantage of Solid's reactivity is just as easy. Simply provide any of the Motion properties as accessors to have them change reactively: ```tsx @@ -96,7 +208,7 @@ return ( ) ``` -The result is a button that begins red and upon being pressed transitions to blue. `animate` doesn't accept an accessor function. For reactive properties simply place signals in the object similar to using style prop. +The result is a button that begins red and upon being pressed transitions to blue. `animate` doesn't accept an accessor function. For reactive properties simply place signals in the object similar to using the `style` prop. ## Keyframes @@ -106,60 +218,165 @@ Values can also be set as arrays, to define a series of keyframes. ``` -By default, keyframes are spaced evenly throughout `duration`, but this can be adjusted by providing progress values to `offset`: +By default, keyframes are spaced evenly throughout `duration`, but this can be adjusted by providing progress values (`0` to `1`) to `offset`: ```tsx - + ``` -## Enter animations +## Variants -Elements will automatically `animate` to the values defined in animate when they're created. +Instead of passing target objects directly, you can define a `variants` map and reference entries by name. This is useful for reusing the same named states across `initial`, `animate`, `exit`, `hover`, `press`, and `inView`: + +```tsx + +``` -This can be disabled by setting the `initial` prop to `false`. The styles defined in `animate` will be applied immediately when the element is first created. +**Variant key inheritance:** a nested `Motion` element with no `initial` of its own inherits the *key* (e.g. `"hidden"`) from its closest ancestor that has one, and resolves that key against its **own** `variants` map. This lets a parent set `initial="hidden"` once and have descendants each define what "hidden" means for themselves, without repeating `initial` at every level: ```tsx - + + + + + ``` -## Exit animations +Note that only `initial` is inherited this way — `animate`/`exit`/`hover`/`press`/`inView` must be set on each element that should react to them. + +## Gestures: hover and press -When an element is removed with `` it can be animated out with the `Presence` component and the `exit` prop: +`hover` and `press` animate an element in response to pointer interaction, without needing to write your own event handlers: ```tsx -import {createSignal, Show} from "solid-js" -import {Motion, Presence} from "solid-motionone" + +``` + +If both are active at once (pressing while already hovering), `press` takes priority over `hover` for any overlapping properties. + +## Scroll-triggered animations + +`inView` animates an element when it scrolls into (and back out of) the viewport, using an `IntersectionObserver` under the hood: + +```tsx + +``` + +`inViewOptions` accepts: + +| Option | Type | Description | +| --- | --- | --- | +| `root` | `Element \| Document` | The scrolling container to observe within. Defaults to the browser viewport. | +| `margin` | string | A CSS margin-like string (e.g. `"-100px"`) that grows or shrinks the root's bounding box before intersection is calculated. | +| `amount` | `"some"` \| `"all"` \| number | How much of the element must be visible to trigger — a fraction (`0`–`1`), or `"some"`/`"all"`. | + +## Event handlers + +Every `Motion` component also accepts these optional event handler props: + +| Handler | Fires when | `event.detail` | +| --- | --- | --- | +| `onMotionStart` | An animation (from any of `animate`/`exit`/`hover`/`press`/`inView`) begins | `{target}` — the resolved target being animated to | +| `onMotionComplete` | That animation finishes | `{target}` | +| `onHoverStart` / `onHoverEnd` | Pointer enters / leaves the element | `{originalEvent}` — the underlying `PointerEvent` | +| `onPressStart` / `onPressEnd` | Pointer is pressed / released on the element | `{originalEvent}` | +| `onViewEnter` / `onViewLeave` | Element enters / leaves the viewport (per `inView`/`inViewOptions`) | `{originalEntry}` — the underlying `IntersectionObserverEntry` | + +```tsx + console.log("animated to", detail.target)} +/> +``` + +## Low-level primitives + +For cases where you don't want to render a `` component — e.g. animating an element you don't otherwise control — two lower-level primitives are also exported: + +**`motion`** — a ref factory. Pass its return value to any element's `ref`: + +```tsx +import {motion} from "solid-motionone" + +
({ + initial: {opacity: 0}, + animate: {opacity: 1}, + transition: {duration: 0.6}, + }))} +/> +``` + +The options accessor is reactive, the same as a `` component's props. It can be composed with other refs using Solid's array-ref syntax: `ref={[otherRef, motion(() => ({...}))]}`. + +**`createMotion`** — the imperative form, for when you already have an `Element` reference: + +```tsx +import {createMotion} from "solid-motionone" + +createMotion(myElement, () => ({animate: {opacity: 1}})) +``` + +## Scroll-linked animations + +While `inView` (see [Scroll-triggered animations](#scroll-triggered-animations)) animates *to* a target once an element crosses into view, `useScroll` instead gives you a continuously-updating scroll progress value to drive your own animations directly from — e.g. a progress bar, or a value passed into `animate`: + +```tsx +import {useScroll} from "solid-motionone" function App() { - const [isShown, setShow] = createSignal(true) + const {scrollY} = useScroll() return ( -
- - - - - - -
+
) } ``` -`exit` can be provided a `transition` of its own, that override the component's `transition`: +`useScroll(options?)` returns: -```tsx - - - - - +| Value | Type | Description | +| --- | --- | --- | +| `time` | `Accessor` | The current scroll-tracking timestamp. | +| `scrollX` / `scrollY` | `Accessor<{current, offset, progress, scrollLength, velocity, targetOffset, targetLength, containerLength}>` | Per-axis scroll info — `progress` (`0`–`1`) is the most commonly used field. | + +`options` accepts `container`/`target` (to track a scrollable element instead of the page), `axis`, and `offset` — see Motion's [`scroll` docs](https://motion.dev/docs/scroll) for the full set, which this passes straight through to. + +## TypeScript + +The following types are exported for typing your own components and helpers: + +- `Options` — the full prop shape accepted by `Motion`/`motion`/`createMotion` (everything in the [props reference](#props-reference) except `tag`). +- `Target` — a single style target object (what `animate`, `initial`, etc. accept directly). +- `VariantDefinition` — `Target | string`, what each animation prop actually accepts. +- `MotionEvent`, `CustomPointerEvent`, `ViewEvent` — the `CustomEvent` subtypes passed to the [event handlers](#event-handlers). +- `ViewportOptions` — the shape of `inViewOptions`. +- `MotionComponentProps` — the full props type for the `` component, including children and event handlers. + +## Examples + +Every feature documented above has a live, interactive example in this repo's Storybook. Run it locally with: + +```bash +pnpm install +pnpm run storybook ``` diff --git a/jest/jest.config.cjs b/jest/jest.config.cjs index 79955ec..fd9419a 100644 --- a/jest/jest.config.cjs +++ b/jest/jest.config.cjs @@ -7,6 +7,8 @@ const common_config = { rootDir: "../", globals: {"ts-jest": {useESM: true}}, transformIgnorePatterns: ["node_modules/(?!solid-js.*|.*(?<=.[tj]sx))$"], + /* handles @solid-primitives/* ESM-only next-tag resolution, see resolver.cjs */ + resolver: resolver_path, /* to support NodeNext module imports https://stackoverflow.com/questions/73735202/typescript-jest-imports-with-js-extension-cause-error-cannot-find-module @@ -24,13 +26,16 @@ const client_config = { testEnvironment: "jsdom", testMatch: ["/test/**/*.test.(js|ts)?(x)"], testPathIgnorePatterns: ["/node_modules/", "ssr"], - setupFilesAfterEnv: ["/test/waapi-polyfill.js"], - /* uses a webpack style resolver, the default one has many issues. */ - resolver: resolver_path, - /* transform ts and tsx files */ + setupFilesAfterEnv: ["/test/setup.js"], + /* picks the "browser" exports condition so @solidjs/web resolves its DOM build */ + testEnvironmentOptions: { + customExportConditions: ["browser"], + }, + /* transform ts, tsx, and esm .mjs files */ transform: { "\\.[jt]sx$": transform_client_path, "\\.[jt]s$": transform_client_path, + "\\.mjs$": transform_client_path, }, } @@ -40,10 +45,11 @@ const server_config = { // avoid loading jsdom. testEnvironment: "node", testMatch: ["/test/ssr.test.(js|ts)?(x)"], - /* transform ts and tsx files */ + /* transform ts, tsx, and esm .mjs files */ transform: { "\\.[jt]sx$": transform_ssr_path, "\\.[jt]s$": transform_ssr_path, + "\\.mjs$": transform_ssr_path, }, } diff --git a/jest/resolver.cjs b/jest/resolver.cjs index ba18112..a35a520 100644 --- a/jest/resolver.cjs +++ b/jest/resolver.cjs @@ -1,8 +1,33 @@ -const {create, getDefaultConfig} = require("enhanced-resolve-jest") +const fs = require("fs") +const path = require("path") -module.exports = create(jestConfig => { - const baseConfig = getDefaultConfig(jestConfig) - baseConfig.aliasFields = ["browser"] - baseConfig.mainFields = ["browser", "main"] - return baseConfig -}) +/* +@solid-primitives/* next-tag prereleases only publish an ESM "import" export +condition (no "require"/"main" fallback), which our CJS-based babel-jest +pipeline can't require() through package.json exports resolution. Walk up +node_modules by hand (mirroring Node's own lookup algorithm) to find the +package directory without going through the exports gate, then point +straight at its "module" (or "main") entry. +*/ +function findPackageDir(specifier, fromDir) { + let dir = fromDir + for (;;) { + const candidate = path.join(dir, "node_modules", specifier) + if (fs.existsSync(candidate)) return candidate + const parent = path.dirname(dir) + if (parent === dir) return null + dir = parent + } +} + +module.exports = function resolver(request, options) { + if (request.startsWith("@solid-primitives/")) { + const pkg_dir = findPackageDir(request, options.basedir) + if (pkg_dir) { + const pkg_json = JSON.parse(fs.readFileSync(path.join(pkg_dir, "package.json"), "utf8")) + const entry = pkg_json.module || pkg_json.main + if (entry) return path.join(pkg_dir, entry) + } + } + return options.defaultResolver(request, options) +} diff --git a/motion.svg b/motion.svg new file mode 100644 index 0000000..3607c63 --- /dev/null +++ b/motion.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/package.json b/package.json index 14a9ee7..07a10ff 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "solid-motionone", - "version": "1.0.4", + "version": "2.0.0-next.0", "description": "A tiny, performant animation library for SolidJS", "license": "MIT", "author": "Damian Tarnawski ; David Di Biase ", @@ -19,7 +19,9 @@ "format": "prettier --cache -w .", "lint": "pnpm run lint:code & pnpm run lint:types", "lint:code": "eslint --ignore-path .gitignore --max-warnings 0 src/**/*.{js,ts,tsx,jsx}", - "lint:types": "tsc --noEmit" + "lint:types": "tsc --noEmit", + "storybook": "storybook dev -p 6006", + "build-storybook": "storybook build" }, "type": "module", "files": [ @@ -42,38 +44,49 @@ }, "typesVersions": {}, "dependencies": { - "@motionone/dom": "^10.17.0", - "@motionone/utils": "^10.17.0", - "@solid-primitives/props": "^3.1.11", - "@solid-primitives/refs": "^1.0.8", - "@solid-primitives/transition-group": "^1.0.5", - "csstype": "^3.1.3" + "@solid-primitives/props": "4.0.0-next.3", + "@solid-primitives/refs": "3.0.0-next.2", + "@solid-primitives/transition-group": "2.0.0-next.2", + "@solid-primitives/utils": "7.0.0-next.4", + "csstype": "^3.1.3", + "framer-motion": "^13.1.1", + "motion-dom": "^13.1.1", + "motion-utils": "^13.0.0" }, "devDependencies": { "@babel/preset-env": "^7.23.7", "@babel/preset-typescript": "^7.23.3", "@jest/types": "^29.6.3", - "@solidjs/testing-library": "^0.8.5", + "@solidjs/testing-library": "1.0.0-beta.2", + "@solidjs/web": "2.0.0-rc.3", "@types/jest": "^29.5.11", "@types/node": "^20.10.6", "@typescript-eslint/eslint-plugin": "^6.17.0", "@typescript-eslint/parser": "^6.17.0", "babel-jest": "^29.7.0", - "babel-preset-solid": "^1.8.6", - "enhanced-resolve-jest": "^1.1.0", + "babel-preset-solid": "2.0.0-rc.2", "eslint": "^8.56.0", "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-no-only-tests": "^3.1.0", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "prettier": "^3.1.1", - "solid-js": "^1.8.17", + "solid-js": "2.0.0-rc.3", + "storybook": "10.5.10", + "storybook-solidjs-vite": "10.7.1", "tsup": "^8.0.1", "tsup-preset-solid": "^2.2.0", - "typescript": "^5.3.3" + "typescript": "^5.3.3", + "vite": "^8.2.2", + "vite-plugin-solid": "3.0.0-next.27" }, "peerDependencies": { - "solid-js": "^1.8.0" + "solid-js": "^2.0.0-rc.0" }, - "packageManager": "pnpm@10.9.0" + "packageManager": "pnpm@10.9.0", + "pnpm": { + "overrides": { + "babel-preset-solid": "2.0.0-rc.2" + } + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 04bbca7..ac7bf14 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,28 +4,37 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + babel-preset-solid: 2.0.0-rc.2 + importers: .: dependencies: - '@motionone/dom': - specifier: ^10.17.0 - version: 10.18.0 - '@motionone/utils': - specifier: ^10.17.0 - version: 10.18.0 '@solid-primitives/props': - specifier: ^3.1.11 - version: 3.2.1(solid-js@1.9.5) + specifier: 4.0.0-next.3 + version: 4.0.0-next.3(@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3))(solid-js@2.0.0-rc.3) '@solid-primitives/refs': - specifier: ^1.0.8 - version: 1.1.1(solid-js@1.9.5) + specifier: 3.0.0-next.2 + version: 3.0.0-next.2(@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3))(solid-js@2.0.0-rc.3) '@solid-primitives/transition-group': - specifier: ^1.0.5 - version: 1.1.1(solid-js@1.9.5) + specifier: 2.0.0-next.2 + version: 2.0.0-next.2(@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3))(solid-js@2.0.0-rc.3) + '@solid-primitives/utils': + specifier: 7.0.0-next.4 + version: 7.0.0-next.4(@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3))(solid-js@2.0.0-rc.3) csstype: specifier: ^3.1.3 version: 3.1.3 + framer-motion: + specifier: ^13.1.1 + version: 13.1.1(react@19.2.8) + motion-dom: + specifier: ^13.1.1 + version: 13.1.1 + motion-utils: + specifier: ^13.0.0 + version: 13.0.0 devDependencies: '@babel/preset-env': specifier: ^7.23.7 @@ -37,8 +46,11 @@ importers: specifier: ^29.6.3 version: 29.6.3 '@solidjs/testing-library': - specifier: ^0.8.5 - version: 0.8.10(solid-js@1.9.5) + specifier: 1.0.0-beta.2 + version: 1.0.0-beta.2(@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3))(solid-js@2.0.0-rc.3) + '@solidjs/web': + specifier: 2.0.0-rc.3 + version: 2.0.0-rc.3(solid-js@2.0.0-rc.3) '@types/jest': specifier: ^29.5.11 version: 29.5.14 @@ -55,11 +67,8 @@ importers: specifier: ^29.7.0 version: 29.7.0(@babel/core@7.26.10) babel-preset-solid: - specifier: ^1.8.6 - version: 1.9.5(@babel/core@7.26.10) - enhanced-resolve-jest: - specifier: ^1.1.0 - version: 1.1.0 + specifier: 2.0.0-rc.2 + version: 2.0.0-rc.2(@babel/core@7.26.10)(solid-js@2.0.0-rc.3) eslint: specifier: ^8.56.0 version: 8.57.1 @@ -79,20 +88,35 @@ importers: specifier: ^3.1.1 version: 3.5.3 solid-js: - specifier: ^1.8.17 - version: 1.9.5 + specifier: 2.0.0-rc.3 + version: 2.0.0-rc.3 + storybook: + specifier: 10.5.10 + version: 10.5.10(prettier@3.5.3)(react@19.2.8) + storybook-solidjs-vite: + specifier: 10.7.1 + version: 10.7.1(@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3))(esbuild@0.25.3)(rollup@4.40.0)(solid-js@2.0.0-rc.3)(storybook@10.5.10(prettier@3.5.3)(react@19.2.8))(typescript@5.8.3)(vite-plugin-solid@3.0.0-next.27(@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-rc.3)(vite@8.2.2(@types/node@20.17.31)(esbuild@0.25.3)))(vite@8.2.2(@types/node@20.17.31)(esbuild@0.25.3)) tsup: specifier: ^8.0.1 - version: 8.4.0(typescript@5.8.3) + version: 8.4.0(postcss@8.5.26)(typescript@5.8.3) tsup-preset-solid: specifier: ^2.2.0 - version: 2.2.0(esbuild@0.25.3)(solid-js@1.9.5)(tsup@8.4.0(typescript@5.8.3)) + version: 2.2.0(esbuild@0.25.3)(solid-js@2.0.0-rc.3)(tsup@8.4.0(postcss@8.5.26)(typescript@5.8.3)) typescript: specifier: ^5.3.3 version: 5.8.3 + vite: + specifier: ^8.2.2 + version: 8.2.2(@types/node@20.17.31)(esbuild@0.25.3) + vite-plugin-solid: + specifier: 3.0.0-next.27 + version: 3.0.0-next.27(@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-rc.3)(vite@8.2.2(@types/node@20.17.31)(esbuild@0.25.3)) packages: + '@adobe/css-tools@4.5.0': + resolution: {integrity: sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==} + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -686,6 +710,38 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@dom-expressions/babel-plugin-jsx@0.50.0-next.44': + resolution: {integrity: sha512-f1kx6TeMQgaLVkGfuxMn0BkH0+HvsycFf1qPHbYoBqmBQd6Ag/EXOxkSpfcaC+UOBMSaF4BKXegGDchRNTWKrg==} + peerDependencies: + '@babel/core': ^7.20.12 + + '@emnapi/core@1.11.0': + resolution: {integrity: sha512-l9Oo58x0HOP5znGzVhYW9U3e5wVuA4LAZU2AGezTmkhO1CgQRFDhDg4nneHsu/t3WniXg9QrG2nIXL/ZS8ln8Q==} + + '@emnapi/core@1.11.3': + resolution: {integrity: sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==} + + '@emnapi/core@1.9.2': + resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} + + '@emnapi/runtime@1.11.0': + resolution: {integrity: sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg==} + + '@emnapi/runtime@1.11.3': + resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==} + + '@emnapi/runtime@1.9.2': + resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} + + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + + '@emnapi/wasi-threads@1.2.3': + resolution: {integrity: sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==} + '@esbuild/aix-ppc64@0.25.3': resolution: {integrity: sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==} engines: {node: '>=18'} @@ -949,6 +1005,9 @@ packages: resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -963,23 +1022,12 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@motionone/animation@10.18.0': - resolution: {integrity: sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw==} - - '@motionone/dom@10.18.0': - resolution: {integrity: sha512-bKLP7E0eyO4B2UaHBBN55tnppwRnaE3KFfh3Ps9HhnAkar3Cb69kUCJY9as8LrccVYKgHA+JY5dOQqJLOPhF5A==} - - '@motionone/easing@10.18.0': - resolution: {integrity: sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg==} - - '@motionone/generators@10.18.0': - resolution: {integrity: sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg==} - - '@motionone/types@10.17.1': - resolution: {integrity: sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A==} - - '@motionone/utils@10.18.0': - resolution: {integrity: sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw==} + '@napi-rs/wasm-runtime@1.2.3': + resolution: {integrity: sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==} + engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} + peerDependencies: + '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.4 + '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.4 '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -993,10 +1041,323 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@oxc-parser/binding-android-arm-eabi@0.127.0': + resolution: {integrity: sha512-0LC7ye4hvqbIKxAzThzvswgHLFu2AURKzYLeSVvLdu2TBOYWQDmHnTqPLeA597BcUCxiLqLsS4CJ5uoI5WYWCQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxc-parser/binding-android-arm64@0.127.0': + resolution: {integrity: sha512-b5jtVTH6AU5CJXHNdj7Jj9IEiR9yVjjnwHzPJhGyHGPdcsZSzBCkS9GBbV33niRMvKthDwQRFRJfI4a+k4PvYg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxc-parser/binding-darwin-arm64@0.127.0': + resolution: {integrity: sha512-obCE8B7ISKkJidjlhv9xRGJPOSDG2Yu6PRga9Ruaz35uintHxbp1Ki/Yc71wx4rj3Edrm0a1kzG1TAwit0wFpg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxc-parser/binding-darwin-x64@0.127.0': + resolution: {integrity: sha512-JL6Xb5IwPQT8rUzlpsX7E+AgfcdNklXNPFp8pjCQQ5MQOQo5rtEB2ui+3Hgg9Sn7Y9Egj6YOLLiHhLpdAe12Aw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxc-parser/binding-freebsd-x64@0.127.0': + resolution: {integrity: sha512-SDQ/3MQFw58fqQz3Z1PhSKFF3JoCF4gmlNjziDm8X02tTahCw0qJbd7FGPDKw1i4VTBZene9JPyC3mHtSvi+wA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxc-parser/binding-linux-arm-gnueabihf@0.127.0': + resolution: {integrity: sha512-Av+D1MIqzV0YMGPT9we2SIZaMKD7Cxs4CvXSx/yxaWHewZjYEjScpOf5igc8IILASViw4WTnjlwUdI1KzVtDHQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm-musleabihf@0.127.0': + resolution: {integrity: sha512-Cs2fdJ8cPpFdeebj6p4dag8A4+56hPvZ0AhQQzlaLswGz1tz7bXt1nETLeorrM9+AMcWFFkqxcXwDGfTVidY8g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm64-gnu@0.127.0': + resolution: {integrity: sha512-qdOfTcT6SY8gsJrrV92uyEUyjqMGPpIB5JZUG6QN5dukYd+7/j0kX6MwK1DgQj39jtUYixxPiaRUiEN1+0CXgQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxc-parser/binding-linux-arm64-musl@0.127.0': + resolution: {integrity: sha512-EoTCZneNFU/P2qrpEM+RHmQwt+CvDkyGESG6qhr7KaegXLZwePfbrkCDfAk8/rhxbDUVGsZILX+2tqPzFtoFWA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxc-parser/binding-linux-ppc64-gnu@0.127.0': + resolution: {integrity: sha512-zALjmZYgxFLHjXeudcDF0xFGNydTAtkAeXAr2EuC17ywCyFxcmQra4w0BMde0Yi/re4Bi4iwEoEXtYN7l6eBLQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@oxc-parser/binding-linux-riscv64-gnu@0.127.0': + resolution: {integrity: sha512-fPP8M6zQLS7Jz7o9d5ArUSuAuSK3e+WCYVrCpdzeCOejidtZExJ9tjhDrAd3HEPqARBCPmdpqxESPFqy44vkBQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxc-parser/binding-linux-riscv64-musl@0.127.0': + resolution: {integrity: sha512-7IcC4Ao02oGpfnjt+X/oF4U2mllo2qoSkw5xxiXNKL9MCTsTiAC6616beOuehdxGcnz1bRoPC1RQ2f1GQDdN+g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxc-parser/binding-linux-s390x-gnu@0.127.0': + resolution: {integrity: sha512-pbXIhiNFHoqWeqDNLiJ9JkpHz1IM9k4DXa66x+1GTWMG7iLxtkXgE53iiuKSXwmk3zIYmaPVfBvgcAhS583K4Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + + '@oxc-parser/binding-linux-x64-gnu@0.127.0': + resolution: {integrity: sha512-MYCguB9RvBvlSd6gbuNI7QwiLoCCAlGnlRJFPrzLI6U1/9wkC/WK6LtBAUln55H1Ctqw45PWmqrobKoMhsYQzQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxc-parser/binding-linux-x64-musl@0.127.0': + resolution: {integrity: sha512-5eY0B/bxf1xIUxb4NOTvOI3KWtBQfPWYyKAzgcrCt0mDibSZygVpO1Pz8bkeiSZ5Jj9+M09dkggG3H8I5d0Uyg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxc-parser/binding-openharmony-arm64@0.127.0': + resolution: {integrity: sha512-Gld0ajrFTUXNtdw20fVBuTQx66FA75nIVg+//pPfR3sXkuABB4mTBhl3r9JNzrJpgW//qiwxf0nWXUWGJSL3UQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxc-parser/binding-wasm32-wasi@0.127.0': + resolution: {integrity: sha512-T6KVD7rhLzFlwGRXMnxUFfkCZD8FHnb968wVXW1mXzgRFc5RNXOBY2mPPDZ77x5Ln76ltLMgtPg0cOkU1NSrEQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@oxc-parser/binding-win32-arm64-msvc@0.127.0': + resolution: {integrity: sha512-Ujvw4X+LD1CCGULcsQcvb4YNVoBGqt+JHgNNzGGaCImELiZLk477ifUH53gIbE7EKd933NdTi25JWEr9K2HwXw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxc-parser/binding-win32-ia32-msvc@0.127.0': + resolution: {integrity: sha512-0cwxKO7KHQQQfo4Uf4B2SQrhgm+cJaP9OvFFhx52Tkg4bezsacu83GB2/In5bC415Ueeym+kXdnge/57rbSfTw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxc-parser/binding-win32-x64-msvc@0.127.0': + resolution: {integrity: sha512-rOrnSQSCbhI2kowr9XxE7m9a8oQXnBHjnS6j95LxxAnEZ0+Fz20WlRXG4ondQb+ejjt2KOsa65sE6++L6kUd+w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxc-project/types@0.127.0': + resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==} + + '@oxc-project/types@0.147.0': + resolution: {integrity: sha512-IJ3s6ltHLp45S0bh7phkX+gJO7A1Wuz2EaqpAhb8WjqDwbzMiWKHhyyT42tskaWjEYXtHtVCPpnBJVT9+dcRLg==} + + '@oxc-resolver/binding-android-arm-eabi@11.21.2': + resolution: {integrity: sha512-xQoCRv+gKax9KTdwdaQNnAFOai8neay7g3jExDIORzhbrejwGSJaZNTdOJHR5ziLg2joMxOCMOFMo4zuxza2uQ==} + cpu: [arm] + os: [android] + + '@oxc-resolver/binding-android-arm64@11.21.2': + resolution: {integrity: sha512-HF5oiE2L05yInPYCFD/4uxSrEZW4SuIfn99Y6L1xnJnzl066JR+MJs2rIdstw8A2MPlAKH+13dpFPNycjqzvGg==} + cpu: [arm64] + os: [android] + + '@oxc-resolver/binding-darwin-arm64@11.21.2': + resolution: {integrity: sha512-UX4u49CVCAD8QZNELaW8eMGgMAGwFWYEPbvNsh+3r/gs4NX3KfpiACMVwRQT0EuH3uat9hM5Zl+Ppm9pJD8tgg==} + cpu: [arm64] + os: [darwin] + + '@oxc-resolver/binding-darwin-x64@11.21.2': + resolution: {integrity: sha512-J9xPx7YBkrRmJ+xl561ztnMWEc1aOyjEIxBiGX1dVb3u7bGSnfObfcZk+Pd+uM0HZAPNsQ1xvD8j52A/uOSqNQ==} + cpu: [x64] + os: [darwin] + + '@oxc-resolver/binding-freebsd-x64@11.21.2': + resolution: {integrity: sha512-fRlt7OvSaQkWj6+EDTVxawVxOlqJB2QSnBfkeCyK4RTvsGctbw3BiH2Tb7DzMs7bikc4BRBpvWP5zF9K8b54Zg==} + cpu: [x64] + os: [freebsd] + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.21.2': + resolution: {integrity: sha512-gK+vPUcPQITkGwBKpZGrcDHSlU6eDGl7AQacxS2CEKAZIBHWkOVFeJwLZ4tYnA1acJqRM5lt7yYwPCVqGHIJ7A==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm-musleabihf@11.21.2': + resolution: {integrity: sha512-L/Rgas7SrOKy/z7IH+HxSFRqVO4PuLDKLEGKvnhoCBBq3UJ0YzGBou3qMzaAGgkJwsIvX2pBF+7ojzfUhLiZxQ==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm64-gnu@11.21.2': + resolution: {integrity: sha512-CUEYvlX1Fk7E9kUMzuswru1J9HLxMwnpDeQGjQuI4ZH+iNCoa2X9T+pvyzrbsgl7WnIeTFTlNlHsRfVdf5g9/g==} + cpu: [arm64] + os: [linux] + + '@oxc-resolver/binding-linux-arm64-musl@11.21.2': + resolution: {integrity: sha512-ViN1ZibQyxwC67GpoP33oo+S9UyUnkog13vzQb9+v9bCNvrVzJuk0MRdacjtv/9xfRMVF/eqHFyl8YOeykI10Q==} + cpu: [arm64] + os: [linux] + + '@oxc-resolver/binding-linux-ppc64-gnu@11.21.2': + resolution: {integrity: sha512-CU1sCqWnhGqYD5I1HedHk5pujrn7ssDkNB/AEQd/pd3D/EojVSgJUlpbafwIbyhia3PgIfkvdFpRPWSALzVumA==} + cpu: [ppc64] + os: [linux] + + '@oxc-resolver/binding-linux-riscv64-gnu@11.21.2': + resolution: {integrity: sha512-jWVyZtIHca4Gb96x7dag+y69vlei7ffjrsveLkmf2ZhqEAz6ZSBnY1GWvgZUaZlwZP62A3xD092BW97Q5VGc+g==} + cpu: [riscv64] + os: [linux] + + '@oxc-resolver/binding-linux-riscv64-musl@11.21.2': + resolution: {integrity: sha512-LF29obFqNgBUgDX7rmUK7M4D0JQG5LxhYzn3xXmECcHU9aQAdWG7NiY052qybtesEdwHQXKNTWYQ7mTsybNvWg==} + cpu: [riscv64] + os: [linux] + + '@oxc-resolver/binding-linux-s390x-gnu@11.21.2': + resolution: {integrity: sha512-+NYcm+cCHBbtdQQ3A4phQTSuVRYnNHz7wrl9XRAPEovcdoqi0mb1K5ZOl+jN54ZD+q1zz3V0vltbFJmzecJKmw==} + cpu: [s390x] + os: [linux] + + '@oxc-resolver/binding-linux-x64-gnu@11.21.2': + resolution: {integrity: sha512-UQqZDdG2r2HhAOsZEgufkIWHPQ886IUyuJQkoZByvzhW8j51R4UNzGBJFkTiTnLhQnggwJRdJgFWK4uY6ZVIMw==} + cpu: [x64] + os: [linux] + + '@oxc-resolver/binding-linux-x64-musl@11.21.2': + resolution: {integrity: sha512-3Q9PMRjalWkT6NZ4jfujuqTCFwoWErg3y3BnOgb544B8IMw4PktiwWOigMfOHNRLMghZeJ7hpfpZf4CP7rV7Og==} + cpu: [x64] + os: [linux] + + '@oxc-resolver/binding-openharmony-arm64@11.21.2': + resolution: {integrity: sha512-Eljeq3ndtyKhM+Es8LITi4Zl2htzuRZcrPMF3kMCsrILztvU6AjZ3FuEhHHKobPUB9rMpzLpJP5bDqXI7r+iog==} + cpu: [arm64] + os: [openharmony] + + '@oxc-resolver/binding-wasm32-wasi@11.21.2': + resolution: {integrity: sha512-HGDbNsIywqc4LxU38+CTJNnB/6BF7rheWOJ259b4eE0aEnelYblC8x+1tEd63bp31fYne63RQz9Jb4yVnC7Yig==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-resolver/binding-win32-arm64-msvc@11.21.2': + resolution: {integrity: sha512-iWx25CBEgH49iE9q5coEGI/jb1jl5kkCY9z6U5Og67xCkQ/WFMDc2J5U78+AE91SUxM2NqSLhJC8/PLfWnImww==} + cpu: [arm64] + os: [win32] + + '@oxc-resolver/binding-win32-x64-msvc@11.21.2': + resolution: {integrity: sha512-VPoCAhKvCQTlG7vxqaBXcmuvbh77BfnGXj8g0pbvVXpm1F/R8rDVwqIWcEbMzrI1JvJlm8v7T9uMVQb6UctMRg==} + cpu: [x64] + os: [win32] + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@rolldown/binding-android-arm-eabi@1.2.6': + resolution: {integrity: sha512-b+jTcARdTiFLI6jB4a5XjTm0RWd6KcRfQj/I2356fxUZemiho9zQLxo0RtCuMDAyKcLo6cEltkgbQp6d1+sjjQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@rolldown/binding-android-arm64@1.2.6': + resolution: {integrity: sha512-lkWU8ZJaRk9q3CIEY1Tc7vIFALp3Xw5NfGJo2hQg5oIqNgxWi1zI+IiDEK3r70BF5Dzol1tcXsnzsRc8NLhG+Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.2.6': + resolution: {integrity: sha512-dgR56NYnvAszm7Ob1B2/Vn0e8bUQYZH2UjVaMMtMVOCKFSfjhfLmuA/9+O+F+ajUdG6B/bSssrKW6JJYASa8jA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.2.6': + resolution: {integrity: sha512-vpVxFvUCFioJqug7OTvqptkc4yb8UX0AwfDmJpaR/0sWz+BUmqSVAf7c8JkUgnN8YLspb4a/N6NhTyMAmdyQ7Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.2.6': + resolution: {integrity: sha512-h1wG6Y6K3JlRswxsI64qQJqBAy4vrLuHgRbc8CZMGSWTOFRY6ghMApM1NKzB2I0n5xV1fjkE18SuVl2QpLeNpA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.2.6': + resolution: {integrity: sha512-tbCiqub0q2MVWJKgF5PoAlNWCtQydiOYSLIkd8sByqK/6MMYLJRcSXSYodqYtd0O+Fw7QaVmKKlS4oL94YRZ0w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.2.6': + resolution: {integrity: sha512-oxK9+baEBPhZG5HB4URY+uU04zJWeZlH6Tb9rB5DK4DF9XR1uXNLXt5Q5ZsugTKayNCNLhkcwz/ye74hRI98dg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-musl@1.2.6': + resolution: {integrity: sha512-muWCk27FVBEZtv0MsK8gnfSmgczA8KQ0uRVJbTABKhkRfQc38aUrcb7fhi3BNiyseFmgcRsoMfQsSNJ+DbZdSw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-ppc64-gnu@1.2.6': + resolution: {integrity: sha512-eWDoSfU7Co2qj3vgB3Dt4lj1mG6CoWbcJQkRMP3XJplyCMtuaq3LHvPFjS9QIPvMGWVadJC04Xiy0IdcVPtnwQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@rolldown/binding-linux-s390x-gnu@1.2.6': + resolution: {integrity: sha512-2bWNjRSIayvupRKxXUY2tWG9fYdoUlTqWywHRvE8Eq3GvuQ+f2HeIkve697fIt+IQs/PV8yFsdWuhp1aJ1PdnA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + + '@rolldown/binding-linux-x64-gnu@1.2.6': + resolution: {integrity: sha512-KekI0gS0wLxe1UBSQSjenBVwou/JkcQPDzBPICGZjxUv9k3RteHDPBQaiOicZUFKRIH2wKEimGwVpnJsbPzu7w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-musl@1.2.6': + resolution: {integrity: sha512-TvtPnfVr+HtyGiDmPK4VWmlNm7QhNNAcK5Q9A7aOXsI8545yCyaoMaicXrFZ72JzeYjaUVk7yT243zT0jzjFKQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-openharmony-arm64@1.2.6': + resolution: {integrity: sha512-iOo0VEay2XFhaCcH0sps5XIimkSuOnNaZrf6+ZkoSOQBJPKNU48RkmJv0/lSpipexu5P+ouFgafe5IGr/DiQfg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-win32-arm64-msvc@1.2.6': + resolution: {integrity: sha512-y5NTmmasMS455JlOCO4ZM9krIchv3Mvm1crL1iUPGOPgEzSkves9n0SdC5Sjz6+qWDFhd8/JpfWMH8NSWNHe+A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.2.6': + resolution: {integrity: sha512-np8iZSLfXlAD4kWhiyq/u0Yt8oZDtRQ8lGhQaCXo2rl37KNjeU0GjJuwr4P3oeZ++ROfofsKNBqR5LTO8aXyWQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + '@rollup/rollup-android-arm-eabi@4.40.0': resolution: {integrity: sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==} cpu: [arm] @@ -1106,44 +1467,149 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - '@solid-primitives/props@3.2.1': - resolution: {integrity: sha512-SuTuCctLLZbUL1QyWamQGWSWPIgoc/gXt5kL8P2yLhb51f9Dj+WHxU0shXBjzx7z+hDc5KtheQgM4NnJqQJi2A==} + '@solid-primitives/props@4.0.0-next.3': + resolution: {integrity: sha512-V2Gn96sQLLhwyiAcGogExqP8+5++Itv0/KBQMNiNp/ldNwbQkr8Q11Ku5VXswYFiFmuiHJ/pGANfwzgsla7zpA==} peerDependencies: - solid-js: ^1.6.12 + '@solidjs/web': ^2.0.0-rc.0 + solid-js: ^2.0.0-rc.0 - '@solid-primitives/refs@1.1.1': - resolution: {integrity: sha512-MIQ7Bh59IiT9NDQPf6iWRnPe0RgKggEjF0H+iMoIi1KBCcp4Mfss2IkUWYPr9wqQg963ZQFbcg5D6oN9Up6Mww==} + '@solid-primitives/refs@3.0.0-next.2': + resolution: {integrity: sha512-lrDQ6cR/FY2cV4OfoyAcrc1TnmcHrQkaWvF1lxcI1S/BkLKTcnOfZG0KAQJ138eo/N4Bq9Eqx9yva/W5Rih9/A==} peerDependencies: - solid-js: ^1.6.12 + '@solidjs/web': ^2.0.0-rc.0 + solid-js: ^2.0.0-rc.0 - '@solid-primitives/transition-group@1.1.1': - resolution: {integrity: sha512-yf8mheMunnAkPSH2WNlemdSR2mrBar0Hw2FenZCqr10iKrI4sUiERIOR4nnFNnUK73BVwAA/xeYbiOk6s36fvw==} + '@solid-primitives/transition-group@2.0.0-next.2': + resolution: {integrity: sha512-ez+4Ma+ivgw/yboEe+pLWpBKAK03+jRjkPwXUbGV0fftr8xiCR/m+0ToFiQ4aZh368M9vLZJ6bGmyMAnwRXbHQ==} peerDependencies: - solid-js: ^1.6.12 + solid-js: ^2.0.0-rc.0 - '@solid-primitives/utils@6.3.1': - resolution: {integrity: sha512-4/Z59nnwu4MPR//zWZmZm2yftx24jMqQ8CSd/JobL26TPfbn4Ph8GKNVJfGJWShg1QB98qObJSskqizbTvcLLA==} + '@solid-primitives/utils@7.0.0-next.4': + resolution: {integrity: sha512-9KyRe6eu4hdhxxGOyS9vAa2s/T8FZ1sMJtk3UuV3W1Gi0f4if+o1n7S1M6l/MMjn8+m3+I3VB1KzFa9gNDkDsg==} peerDependencies: - solid-js: ^1.6.12 + '@solidjs/web': ^2.0.0-rc.0 + solid-js: ^2.0.0-rc.0 + + '@solidjs/babel-plugin@2.0.0-rc.4': + resolution: {integrity: sha512-4RYR4PWAlQIz1dmIyPheaUvVb9EnSIw5KIGsEISmHod5qfT1IPVKgtb9bctyQ5FeDAuc7JcpbkFYN2heLrk6rQ==} + peerDependencies: + '@babel/core': ^7.20.12 + + '@solidjs/compiler-darwin-arm64@2.0.0-rc.4': + resolution: {integrity: sha512-YR4T15ucsV1Vb4J6yaHxss2hakdcbZ353ye53AhX+FWNayuEhO/Cyjdtb9uS38Dfzysok/rIEQdaeZcaXt+rPA==} + cpu: [arm64] + os: [darwin] + + '@solidjs/compiler-darwin-x64@2.0.0-rc.4': + resolution: {integrity: sha512-95SkVSyXP2eh7PvPWi+fTeH5aTcTwOUvRV7ubeUrutE4akW3ndq1N8cvg2WZ+LhKrf2pvDO0eSDEZ72I769CLg==} + cpu: [x64] + os: [darwin] + + '@solidjs/compiler-linux-arm64-gnu@2.0.0-rc.4': + resolution: {integrity: sha512-36Ht+EUAVUt8fAxq8zlfPS0+vZ61hfJRJDiX1HDNXvlAwZE1B7FH/ym1wfXrhG1TvrNA63Sjjj5CeccYO2H4Tg==} + cpu: [arm64] + os: [linux] + + '@solidjs/compiler-linux-x64-gnu@2.0.0-rc.4': + resolution: {integrity: sha512-DSFOQEjfYmmRQ70pNLamRXPNQ+aP+5vyh1rMjSKwAzONt0xB2rcy9Alt02GU38gztW9YN6ZyxM4rwkYe+7MfaQ==} + cpu: [x64] + os: [linux] + + '@solidjs/compiler-wasm32-wasi@2.0.0-rc.4': + resolution: {integrity: sha512-zVxXS+01rbv+0yOp2vaGjIu0om5I1UhhPpzNYeE+AmfpVc2eCWxqDsPai3dIxFDGPTjaJ+npwjKJRmOTaoknRw==} + engines: {node: '>=14.0.0'} - '@solidjs/testing-library@0.8.10': - resolution: {integrity: sha512-qdeuIerwyq7oQTIrrKvV0aL9aFeuwTd86VYD3afdq5HYEwoox1OBTJy4y8A3TFZr8oAR0nujYgCzY/8wgHGfeQ==} + '@solidjs/compiler-win32-x64-msvc@2.0.0-rc.4': + resolution: {integrity: sha512-DkzTHMZXzaiL/KhL76UJWN24pKkkXeLpPYtDxUqX6VaKuOCPDmp/m7GLWSDrqCdF7leuYsig2MuMJTXZRLOkbQ==} + cpu: [x64] + os: [win32] + + '@solidjs/compiler@2.0.0-rc.4': + resolution: {integrity: sha512-lKx6Jp1KbHxqO+v+g7cRbm8I1DHx/10Lj8bKG4vmdGnCfSlFbyhCd8cPTLdLV0YVG7GGSzzF5m8NkC9NlfGN5w==} + + '@solidjs/signals@2.0.0-rc.3': + resolution: {integrity: sha512-/yPhTf3xS1FRR4MX8kTYCd4MjsFxzwkO+KyOTfbu35lTEiaJ4Fxy+JL91XonDzt31GV1mYaZ9CGD2TQIzvXuNA==} + + '@solidjs/testing-library@1.0.0-beta.2': + resolution: {integrity: sha512-TLhQ5IUT/fdDfqa4X2rkQWB28Y+zEwi6mK/TVTeiQlEHG63eK2jfgwNYf2NtQoPh2c3ihLilsCzxABiSTP3JoQ==} engines: {node: '>= 14'} peerDependencies: - '@solidjs/router': '>=0.9.0' - solid-js: '>=1.0.0' + '@solidjs/web': '>=2.0.0' + solid-js: '>=2.0.0' + + '@solidjs/vite-plugin@3.0.0-next.36': + resolution: {integrity: sha512-PMreKx9IeQwSRt6xt8LQHe58Gk79CVaB57PQMlvXUdbyL5JliaehOSg5a4W6bKoJfeWku7nryEWUvTDKyZ2PBg==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + '@solidjs/start-devtools': ^1.0.0-next.2 + '@solidjs/web': ^2.0.0-rc.0 + '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* + solid-js: ^2.0.0-rc.0 + vite: ^8.0.0 || ^9.0.0 peerDependenciesMeta: - '@solidjs/router': + '@solidjs/start-devtools': + optional: true + '@testing-library/jest-dom': optional: true - '@testing-library/dom@10.4.0': - resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} + '@solidjs/web@2.0.0-rc.3': + resolution: {integrity: sha512-5ckKgOjem1pN5ADycOk6TjHmTtjbbN2fukqxo6RW3Oe3H7z0gaXWAdt8dLISto5/O4Nn8VxprFXFWpfy31+DUg==} + peerDependencies: + solid-js: ^2.0.0-rc.3 + + '@storybook/builder-vite@10.5.10': + resolution: {integrity: sha512-O4GgIP0tKLRueom3EmU3OaBUHKjNYj+jkOvmTIkn3PYTiWVkCuHqSKEs4ADvRyaQuLH+peHhFe4JtkNC9KbtrQ==} + peerDependencies: + storybook: ^10.5.10 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@storybook/csf-plugin@10.5.10': + resolution: {integrity: sha512-TaCLBrqVEr767+w58QDotDUiCTuE5cyRJuRcDlsKQyUIyGBv+lYD3lu8wBiVCYxgIjB/gu9HmqiC+0yx1rHzaw==} + peerDependencies: + esbuild: '*' + rollup: '*' + storybook: ^10.5.10 + vite: '*' + webpack: '*' + peerDependenciesMeta: + esbuild: + optional: true + rollup: + optional: true + vite: + optional: true + webpack: + optional: true + + '@storybook/global@5.0.0': + resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} + + '@storybook/icons@2.1.0': + resolution: {integrity: sha512-Fxh9vYpX9bQqFeHRiY8h2ApeRGDzRSMLwJwNZ/AIRqnyOKHxRKL+yFe+ctEkVJmuptRE9u1Hrn8ZZNHyfDKKNg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@testing-library/dom@10.4.1': + resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} engines: {node: '>=18'} + '@testing-library/jest-dom@6.9.1': + resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + + '@testing-library/user-event@14.6.6': + resolution: {integrity: sha512-Jbs9FpkkIDw8FgSc6kOVsOv8JuuqGAL7J4X1oot77JxAoDlkNn2GRkd0aYRVuQ+pVQAiHWVkE4rX/dkF5fBiCw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + '@tootallnate/once@2.0.0': resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -1159,6 +1625,12 @@ packages: '@types/babel__traverse@7.20.7': resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/estree@1.0.7': resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} @@ -1259,9 +1731,37 @@ packages: resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} + '@typescript/typescript6@6.0.2': + resolution: {integrity: sha512-mbCddXd+jm7hfx7w2YU64/Av4/NqqeG3GoRZgxPcgoTxYjhrcfJRw9ULch71SS4G+Q3bOXFhRvPqjguN0Hyp5w==} + hasBin: true + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + + '@volar/language-core@2.4.28': + resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==} + + '@volar/source-map@2.4.28': + resolution: {integrity: sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==} + + '@volar/typescript@2.4.28': + resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==} + + '@webcontainer/env@1.1.1': + resolution: {integrity: sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng==} + abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} deprecated: Use your platform's native atob() and btoa() methods instead @@ -1283,6 +1783,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.18.0: + resolution: {integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -1334,6 +1839,14 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + ast-types@0.16.1: + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -1351,11 +1864,6 @@ packages: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - babel-plugin-jsx-dom-expressions@0.39.7: - resolution: {integrity: sha512-8GzVmFla7jaTNWW8W+lTMl9YGva4/06CtwJjySnkYtt8G1v9weCzc2SuF1DfrudcCNb2Doetc1FRg33swBYZCA==} - peerDependencies: - '@babel/core': ^7.20.12 - babel-plugin-polyfill-corejs2@0.4.13: resolution: {integrity: sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==} peerDependencies: @@ -1382,10 +1890,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - babel-preset-solid@1.9.5: - resolution: {integrity: sha512-85I3osODJ1LvZbv8wFozROV1vXq32BubqHXAGu73A//TRs3NLI1OFP83AQBUTSQHwgZQmARjHlJciym3we+V+w==} + babel-preset-solid@2.0.0-rc.2: + resolution: {integrity: sha512-Venq++Aa6+RzGIAyS5vSo3kX1fE8zRreEPCh1eTh5DTjlTft9qZGIG14RSZDv/sjVxT8x5Gs9+21PzxuLe8U+g==} peerDependencies: '@babel/core': ^7.0.0 + solid-js: ^2.0.0-rc.2 + peerDependenciesMeta: + solid-js: + optional: true balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -1411,6 +1923,10 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + bundle-require@5.1.0: resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -1440,6 +1956,10 @@ packages: caniuse-lite@1.0.30001715: resolution: {integrity: sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==} + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -1448,6 +1968,10 @@ packages: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} + check-error@2.1.3: + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} + engines: {node: '>= 16'} + chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -1498,9 +2022,6 @@ packages: core-js-compat@3.41.0: resolution: {integrity: sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==} - core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - create-jest@29.7.0: resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -1510,6 +2031,9 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + cssom@0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} @@ -1547,6 +2071,10 @@ packages: babel-plugin-macros: optional: true + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -1554,6 +2082,18 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} + engines: {node: '>=18'} + + default-browser@5.5.1: + resolution: {integrity: sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw==} + engines: {node: '>=18'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -1562,6 +2102,10 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} @@ -1581,6 +2125,9 @@ packages: dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + domexception@4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} @@ -1606,21 +2153,10 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - enhanced-resolve-jest@1.1.0: - resolution: {integrity: sha512-GM7yVsiLIaunYkCqnGRPO4kQbT6hPSgkyOFKTseWboPMjZ2tlpQYh2ttLuE8ORkR72Wb1f9SJBbnPu0AjcTzgg==} - - enhanced-resolve@4.5.0: - resolution: {integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==} - engines: {node: '>=6.9.0'} - entities@6.0.0: resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==} engines: {node: '>=0.12'} - errno@0.1.8: - resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} - hasBin: true - error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -1760,6 +2296,15 @@ packages: picomatch: optional: true + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -1791,6 +2336,17 @@ packages: resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} engines: {node: '>= 6'} + framer-motion@13.1.1: + resolution: {integrity: sha512-B/xn2TPS4f61cEBLFjiYlQFnBZUW1YVj/LM+C+N4OP8Rs95VLEI2ot/RlfBg111la/EiyECFaJJi/A3FWA8MUA==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -1880,9 +2436,6 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hey-listen@1.0.8: - resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} - html-encoding-sniffer@3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} @@ -1926,6 +2479,10 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -1940,6 +2497,11 @@ packages: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -1956,6 +2518,11 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -1971,8 +2538,13 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} + engines: {node: '>=16'} isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -2193,6 +2765,9 @@ packages: engines: {node: '>=6'} hasBin: true + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -2208,6 +2783,76 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lightningcss-android-arm64@1.33.0: + resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.33.0: + resolution: {integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.33.0: + resolution: {integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.33.0: + resolution: {integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.33.0: + resolution: {integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.33.0: + resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.33.0: + resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.33.0: + resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.33.0: + resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.33.0: + resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.33.0: + resolution: {integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.33.0: + resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==} + engines: {node: '>= 12.0.0'} + lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} @@ -2236,6 +2881,9 @@ packages: lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -2257,9 +2905,9 @@ packages: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} - memory-fs@0.5.0: - resolution: {integrity: sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==} - engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} + merge-anything@5.1.7: + resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} + engines: {node: '>=12.13'} merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -2284,6 +2932,10 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -2299,12 +2951,23 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + motion-dom@13.1.1: + resolution: {integrity: sha512-XSf8VYWSB6G/0IY3rWVbyLcxWXtAVHkN1PQE2agTaCv3u8RGvbwu56TyyR/MNzBqqNavEBTZzErcxI1TxBrjcA==} + + motion-utils@13.0.0: + resolution: {integrity: sha512-7DnN7TmbLcYXcG4RVadXIihWlyuM9afoUww8Y5Agg431kGKiuL2/OMyP4mJ5wLz+pvN3t5ySClLOaVXJ+wekRQ==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nanoid@3.3.18: + resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -2336,10 +2999,21 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + oxc-parser@0.127.0: + resolution: {integrity: sha512-bkgD4qHlN7WxLdX8bLXdaU54TtQtAIg/ZBAfm0aje/mo3MRDo3P0hZSgr4U7O3xfX+fQmR5AP04JS/TGcZLcFA==} + engines: {node: ^20.19.0 || >=22.12.0} + + oxc-resolver@11.21.2: + resolution: {integrity: sha512-w5tLwYN3Zo24w5EeWJjJWZOwhYqTtC8PS2B1tIt7BZUuqTIcU07sQValbDw+rq7+AuAGzOHklgK+ifsy4lpXfw==} + p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -2374,6 +3048,9 @@ packages: parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -2397,6 +3074,10 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -2408,6 +3089,10 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} + picomatch@4.0.7: + resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} + engines: {node: '>=12'} + pirates@4.0.7: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} @@ -2434,6 +3119,10 @@ packages: yaml: optional: true + postcss@8.5.26: + resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==} + engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -2451,16 +3140,10 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} - prr@1.0.1: - resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} - psl@1.15.0: resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} @@ -2483,13 +3166,22 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + react@19.2.8: + resolution: {integrity: sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==} + engines: {node: '>=0.10.0'} readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} + recast@0.23.21: + resolution: {integrity: sha512-mFAyJq9vUbSTARLZUvAEf1z3YxlvAwswbmxMx2mPA/MSm4KmpwvwvhsH/NIrZhyOuwD60Lzyw2qh83uCbgTPYw==} + engines: {node: '>= 4'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + regenerate-unicode-properties@10.2.0: resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} engines: {node: '>=4'} @@ -2551,17 +3243,23 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true + rolldown@1.2.6: + resolution: {integrity: sha512-vMM4q3aixf46GiF1Kok8jDPFsEpXgFWGjUHXNkNHNm+Y2adXAG2dbX91jkti3i0ZRsOlcmbuzAz1poObSHCmUA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + rollup@4.40.0: resolution: {integrity: sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -2578,14 +3276,19 @@ packages: engines: {node: '>=10'} hasBin: true - seroval-plugins@1.2.1: - resolution: {integrity: sha512-H5vs53+39+x4Udwp4J5rNZfgFuA+Lt+uU+09w1gYBVWomtAl98B+E9w7yC05Xc81/HgLvJdlyqJbU0fJCKCmdw==} + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + + seroval-plugins@1.5.6: + resolution: {integrity: sha512-HXuLAX2pu/UByPpaeo/TaMfvMIi+1QqIoPJYCcAtU8QkVNwgR6MPlGuCQTErV1JwraaMbYaWVIBX7mppzGLATQ==} engines: {node: '>=10'} peerDependencies: seroval: ^1.0 - seroval@1.2.1: - resolution: {integrity: sha512-yBxFFs3zmkvKNmR0pFSU//rIsYjuX418TnlDmc2weaq5XFDqDIV/NOMPBoLrbxjLH42p4UzRuXHryXh9dYcKcw==} + seroval@1.5.6: + resolution: {integrity: sha512-rVQVWjjSvlINzaQPZH5JFqsqEsIWdTxY3iJZCnTL/5gQbXIRooVZKI60tVCkOVfzcRPejboxO2t0P89dg5mQaA==} engines: {node: '>=10'} shebang-command@2.0.0: @@ -2610,8 +3313,12 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - solid-js@1.9.5: - resolution: {integrity: sha512-ogI3DaFcyn6UhYhrgcyRAMbu/buBJitYQASZz5WzfQVPP10RD2AbCoRZ517psnezrasyCbWzIxZ6kVqet768xw==} + solid-js@2.0.0-rc.3: + resolution: {integrity: sha512-pmW6bRoTvfp/rN4jN7JmLvSaoIpFt7wm0Hi3j508S/smuJqUbRg3dQEjOPTkAwHW+McYnXrMG7cJ4AMNpLevtQ==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} @@ -2631,6 +3338,36 @@ packages: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} + storybook-solidjs-vite@10.7.1: + resolution: {integrity: sha512-bxNEcK745kVlL4D8vh4ERMd/G2IGLPzdkr5/I6QdonUj7exp3WReca9eGxQlqYVSWeSB+pkIJgu/KdihgAj2rA==} + peerDependencies: + '@solidjs/web': ^2.0.0-0 + solid-js: ^1.8.0-0 || ^2.0.0-0 + storybook: ^0.0.0-0 || ^10.0.0 + typescript: '*' + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + vite-plugin-solid: ^2.0.0-0 || ^3.0.0-0 + peerDependenciesMeta: + '@solidjs/web': + optional: true + typescript: + optional: true + + storybook@10.5.10: + resolution: {integrity: sha512-Rz8k9ejFHsi7lbtJTaxZlhCUz4GkbJIKEoKDjXeLfr/ZhXip73E6keKxW0KH8iGeKiCqHAbJCV4YIQrxTOLiig==} + hasBin: true + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + prettier: ^2 || ^3 + vite-plus: ^0.1.15 || ^0.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + prettier: + optional: true + vite-plus: + optional: true + string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -2643,9 +3380,6 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} - string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -2662,6 +3396,10 @@ packages: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -2686,10 +3424,6 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - tapable@1.1.3: - resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} - engines: {node: '>=6'} - test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -2704,6 +3438,9 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} @@ -2711,6 +3448,18 @@ packages: resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} + engines: {node: '>=14.0.0'} + tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} @@ -2739,12 +3488,13 @@ packages: peerDependencies: typescript: '>=4.2.0' + ts-dedent@2.3.0: + resolution: {integrity: sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==} + engines: {node: '>=6.10'} + ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -2793,6 +3543,11 @@ packages: engines: {node: '>=14.17'} hasBin: true + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} + hasBin: true + undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} @@ -2816,6 +3571,10 @@ packages: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} + unplugin@2.3.11: + resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} + engines: {node: '>=18.12.0'} + update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true @@ -2828,8 +3587,10 @@ packages: url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 v8-to-istanbul@9.3.0: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} @@ -2838,6 +3599,63 @@ packages: validate-html-nesting@1.2.2: resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} + vite-plugin-solid@3.0.0-next.27: + resolution: {integrity: sha512-bDzjIIplkSDH73BiGP9pbPR3ZnjeUA18SAYugLhqDCy4u0bl3qdrETstxrXuo2vHXLB0VD9rvOr0iesZBBul4Q==} + + vite@8.2.2: + resolution: {integrity: sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.4.0 || ^0.5.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitefu@1.1.3: + resolution: {integrity: sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + vite: + optional: true + + vscode-uri@3.2.0: + resolution: {integrity: sha512-m2gXo3bn0G1kT9InzMf07fTbqMbGtyckj3bH5ktLO+1Ssv+yiATZ4dhwaQv9UZWxJh6E9IFGnQyjgWVDWVBDrg==} + w3c-xmlserializer@4.0.0: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} @@ -2852,6 +3670,9 @@ packages: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} @@ -2903,6 +3724,22 @@ packages: utf-8-validate: optional: true + ws@8.21.3: + resolution: {integrity: sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -2931,6 +3768,8 @@ packages: snapshots: + '@adobe/css-tools@4.5.0': {} + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.8 @@ -3683,6 +4522,64 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} + '@dom-expressions/babel-plugin-jsx@0.50.0-next.44(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-module-imports': 7.18.6 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) + '@babel/types': 7.27.0 + html-entities: 2.3.3 + parse5: 7.3.0 + validate-html-nesting: 1.2.2 + + '@emnapi/core@1.11.0': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + + '@emnapi/core@1.11.3': + dependencies: + '@emnapi/wasi-threads': 1.2.3 + tslib: 2.8.1 + optional: true + + '@emnapi/core@1.9.2': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.11.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.11.3': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.9.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.3': + dependencies: + tslib: 2.8.1 + optional: true + '@esbuild/aix-ppc64@0.25.3': optional: true @@ -3980,6 +4877,11 @@ snapshots: '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/set-array@1.2.1': {} @@ -3991,56 +4893,218 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@motionone/animation@10.18.0': + '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.11.0)(@emnapi/runtime@1.11.0)': dependencies: - '@motionone/easing': 10.18.0 - '@motionone/types': 10.17.1 - '@motionone/utils': 10.18.0 - tslib: 2.8.1 + '@emnapi/core': 1.11.0 + '@emnapi/runtime': 1.11.0 + '@tybys/wasm-util': 0.10.3 + optional: true - '@motionone/dom@10.18.0': + '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)': dependencies: - '@motionone/animation': 10.18.0 - '@motionone/generators': 10.18.0 - '@motionone/types': 10.17.1 - '@motionone/utils': 10.18.0 - hey-listen: 1.0.8 - tslib: 2.8.1 + '@emnapi/core': 1.11.3 + '@emnapi/runtime': 1.11.3 + '@tybys/wasm-util': 0.10.3 + optional: true - '@motionone/easing@10.18.0': + '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': dependencies: - '@motionone/utils': 10.18.0 - tslib: 2.8.1 + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@tybys/wasm-util': 0.10.3 + optional: true - '@motionone/generators@10.18.0': + '@nodelib/fs.scandir@2.1.5': dependencies: - '@motionone/types': 10.17.1 - '@motionone/utils': 10.18.0 - tslib: 2.8.1 + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@oxc-parser/binding-android-arm-eabi@0.127.0': + optional: true + + '@oxc-parser/binding-android-arm64@0.127.0': + optional: true + + '@oxc-parser/binding-darwin-arm64@0.127.0': + optional: true + + '@oxc-parser/binding-darwin-x64@0.127.0': + optional: true + + '@oxc-parser/binding-freebsd-x64@0.127.0': + optional: true + + '@oxc-parser/binding-linux-arm-gnueabihf@0.127.0': + optional: true + + '@oxc-parser/binding-linux-arm-musleabihf@0.127.0': + optional: true + + '@oxc-parser/binding-linux-arm64-gnu@0.127.0': + optional: true + + '@oxc-parser/binding-linux-arm64-musl@0.127.0': + optional: true + + '@oxc-parser/binding-linux-ppc64-gnu@0.127.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-gnu@0.127.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-musl@0.127.0': + optional: true + + '@oxc-parser/binding-linux-s390x-gnu@0.127.0': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.127.0': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.127.0': + optional: true + + '@oxc-parser/binding-openharmony-arm64@0.127.0': + optional: true + + '@oxc-parser/binding-wasm32-wasi@0.127.0': + dependencies: + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + optional: true + + '@oxc-parser/binding-win32-arm64-msvc@0.127.0': + optional: true + + '@oxc-parser/binding-win32-ia32-msvc@0.127.0': + optional: true + + '@oxc-parser/binding-win32-x64-msvc@0.127.0': + optional: true + + '@oxc-project/types@0.127.0': {} + + '@oxc-project/types@0.147.0': {} + + '@oxc-resolver/binding-android-arm-eabi@11.21.2': + optional: true + + '@oxc-resolver/binding-android-arm64@11.21.2': + optional: true + + '@oxc-resolver/binding-darwin-arm64@11.21.2': + optional: true + + '@oxc-resolver/binding-darwin-x64@11.21.2': + optional: true + + '@oxc-resolver/binding-freebsd-x64@11.21.2': + optional: true + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.21.2': + optional: true + + '@oxc-resolver/binding-linux-arm-musleabihf@11.21.2': + optional: true + + '@oxc-resolver/binding-linux-arm64-gnu@11.21.2': + optional: true + + '@oxc-resolver/binding-linux-arm64-musl@11.21.2': + optional: true + + '@oxc-resolver/binding-linux-ppc64-gnu@11.21.2': + optional: true + + '@oxc-resolver/binding-linux-riscv64-gnu@11.21.2': + optional: true + + '@oxc-resolver/binding-linux-riscv64-musl@11.21.2': + optional: true + + '@oxc-resolver/binding-linux-s390x-gnu@11.21.2': + optional: true + + '@oxc-resolver/binding-linux-x64-gnu@11.21.2': + optional: true + + '@oxc-resolver/binding-linux-x64-musl@11.21.2': + optional: true + + '@oxc-resolver/binding-openharmony-arm64@11.21.2': + optional: true + + '@oxc-resolver/binding-wasm32-wasi@11.21.2': + dependencies: + '@emnapi/core': 1.11.0 + '@emnapi/runtime': 1.11.0 + '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.11.0)(@emnapi/runtime@1.11.0) + optional: true + + '@oxc-resolver/binding-win32-arm64-msvc@11.21.2': + optional: true + + '@oxc-resolver/binding-win32-x64-msvc@11.21.2': + optional: true + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@rolldown/binding-android-arm-eabi@1.2.6': + optional: true + + '@rolldown/binding-android-arm64@1.2.6': + optional: true + + '@rolldown/binding-darwin-arm64@1.2.6': + optional: true + + '@rolldown/binding-darwin-x64@1.2.6': + optional: true + + '@rolldown/binding-freebsd-x64@1.2.6': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.2.6': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.2.6': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.2.6': + optional: true - '@motionone/types@10.17.1': {} + '@rolldown/binding-linux-ppc64-gnu@1.2.6': + optional: true - '@motionone/utils@10.18.0': - dependencies: - '@motionone/types': 10.17.1 - hey-listen: 1.0.8 - tslib: 2.8.1 + '@rolldown/binding-linux-s390x-gnu@1.2.6': + optional: true - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + '@rolldown/binding-linux-x64-gnu@1.2.6': + optional: true - '@nodelib/fs.stat@2.0.5': {} + '@rolldown/binding-linux-x64-musl@1.2.6': + optional: true - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 + '@rolldown/binding-openharmony-arm64@1.2.6': + optional: true - '@pkgjs/parseargs@0.11.0': + '@rolldown/binding-win32-arm64-msvc@1.2.6': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.2.6': optional: true + '@rolldown/pluginutils@1.0.1': {} + '@rollup/rollup-android-arm-eabi@4.40.0': optional: true @@ -4111,42 +5175,159 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 - '@solid-primitives/props@3.2.1(solid-js@1.9.5)': + '@solid-primitives/props@4.0.0-next.3(@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3))(solid-js@2.0.0-rc.3)': + dependencies: + '@solid-primitives/utils': 7.0.0-next.4(@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3))(solid-js@2.0.0-rc.3) + '@solidjs/web': 2.0.0-rc.3(solid-js@2.0.0-rc.3) + solid-js: 2.0.0-rc.3 + + '@solid-primitives/refs@3.0.0-next.2(@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3))(solid-js@2.0.0-rc.3)': + dependencies: + '@solid-primitives/utils': 7.0.0-next.4(@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3))(solid-js@2.0.0-rc.3) + '@solidjs/web': 2.0.0-rc.3(solid-js@2.0.0-rc.3) + solid-js: 2.0.0-rc.3 + + '@solid-primitives/transition-group@2.0.0-next.2(@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3))(solid-js@2.0.0-rc.3)': + dependencies: + '@solid-primitives/utils': 7.0.0-next.4(@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3))(solid-js@2.0.0-rc.3) + solid-js: 2.0.0-rc.3 + transitivePeerDependencies: + - '@solidjs/web' + + '@solid-primitives/utils@7.0.0-next.4(@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3))(solid-js@2.0.0-rc.3)': + dependencies: + '@solidjs/web': 2.0.0-rc.3(solid-js@2.0.0-rc.3) + solid-js: 2.0.0-rc.3 + + '@solidjs/babel-plugin@2.0.0-rc.4(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-module-imports': 7.18.6 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) + '@babel/types': 7.27.0 + html-entities: 2.3.3 + parse5: 7.3.0 + validate-html-nesting: 1.2.2 + + '@solidjs/compiler-darwin-arm64@2.0.0-rc.4': + optional: true + + '@solidjs/compiler-darwin-x64@2.0.0-rc.4': + optional: true + + '@solidjs/compiler-linux-arm64-gnu@2.0.0-rc.4': + optional: true + + '@solidjs/compiler-linux-x64-gnu@2.0.0-rc.4': + optional: true + + '@solidjs/compiler-wasm32-wasi@2.0.0-rc.4': + dependencies: + '@emnapi/core': 1.11.3 + '@emnapi/runtime': 1.11.3 + '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3) + optional: true + + '@solidjs/compiler-win32-x64-msvc@2.0.0-rc.4': + optional: true + + '@solidjs/compiler@2.0.0-rc.4': + optionalDependencies: + '@solidjs/compiler-darwin-arm64': 2.0.0-rc.4 + '@solidjs/compiler-darwin-x64': 2.0.0-rc.4 + '@solidjs/compiler-linux-arm64-gnu': 2.0.0-rc.4 + '@solidjs/compiler-linux-x64-gnu': 2.0.0-rc.4 + '@solidjs/compiler-wasm32-wasi': 2.0.0-rc.4 + '@solidjs/compiler-win32-x64-msvc': 2.0.0-rc.4 + + '@solidjs/signals@2.0.0-rc.3': {} + + '@solidjs/testing-library@1.0.0-beta.2(@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3))(solid-js@2.0.0-rc.3)': + dependencies: + '@solidjs/web': 2.0.0-rc.3(solid-js@2.0.0-rc.3) + '@testing-library/dom': 10.4.1 + solid-js: 2.0.0-rc.3 + + '@solidjs/vite-plugin@3.0.0-next.36(@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-rc.3)(vite@8.2.2(@types/node@20.17.31)(esbuild@0.25.3))': dependencies: - '@solid-primitives/utils': 6.3.1(solid-js@1.9.5) - solid-js: 1.9.5 + '@ampproject/remapping': 2.3.0 + '@babel/core': 7.26.10 + '@solidjs/babel-plugin': 2.0.0-rc.4(@babel/core@7.26.10) + '@solidjs/compiler': 2.0.0-rc.4 + '@solidjs/web': 2.0.0-rc.3(solid-js@2.0.0-rc.3) + '@types/babel__core': 7.20.5 + merge-anything: 5.1.7 + solid-js: 2.0.0-rc.3 + vite: 8.2.2(@types/node@20.17.31)(esbuild@0.25.3) + vitefu: 1.1.3(vite@8.2.2(@types/node@20.17.31)(esbuild@0.25.3)) + optionalDependencies: + '@testing-library/jest-dom': 6.9.1 + transitivePeerDependencies: + - supports-color - '@solid-primitives/refs@1.1.1(solid-js@1.9.5)': + '@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3)': dependencies: - '@solid-primitives/utils': 6.3.1(solid-js@1.9.5) - solid-js: 1.9.5 + seroval: 1.5.6 + seroval-plugins: 1.5.6(seroval@1.5.6) + solid-js: 2.0.0-rc.3 - '@solid-primitives/transition-group@1.1.1(solid-js@1.9.5)': + '@storybook/builder-vite@10.5.10(esbuild@0.25.3)(rollup@4.40.0)(storybook@10.5.10(prettier@3.5.3)(react@19.2.8))(vite@8.2.2(@types/node@20.17.31)(esbuild@0.25.3))': dependencies: - solid-js: 1.9.5 + '@storybook/csf-plugin': 10.5.10(esbuild@0.25.3)(rollup@4.40.0)(storybook@10.5.10(prettier@3.5.3)(react@19.2.8))(vite@8.2.2(@types/node@20.17.31)(esbuild@0.25.3)) + storybook: 10.5.10(prettier@3.5.3)(react@19.2.8) + ts-dedent: 2.3.0 + vite: 8.2.2(@types/node@20.17.31)(esbuild@0.25.3) + transitivePeerDependencies: + - esbuild + - rollup + - webpack - '@solid-primitives/utils@6.3.1(solid-js@1.9.5)': + '@storybook/csf-plugin@10.5.10(esbuild@0.25.3)(rollup@4.40.0)(storybook@10.5.10(prettier@3.5.3)(react@19.2.8))(vite@8.2.2(@types/node@20.17.31)(esbuild@0.25.3))': dependencies: - solid-js: 1.9.5 + storybook: 10.5.10(prettier@3.5.3)(react@19.2.8) + unplugin: 2.3.11 + optionalDependencies: + esbuild: 0.25.3 + rollup: 4.40.0 + vite: 8.2.2(@types/node@20.17.31)(esbuild@0.25.3) + + '@storybook/global@5.0.0': {} - '@solidjs/testing-library@0.8.10(solid-js@1.9.5)': + '@storybook/icons@2.1.0(react@19.2.8)': dependencies: - '@testing-library/dom': 10.4.0 - solid-js: 1.9.5 + react: 19.2.8 - '@testing-library/dom@10.4.0': + '@testing-library/dom@10.4.1': dependencies: '@babel/code-frame': 7.26.2 '@babel/runtime': 7.27.0 '@types/aria-query': 5.0.4 aria-query: 5.3.0 - chalk: 4.1.2 dom-accessibility-api: 0.5.16 lz-string: 1.5.0 + picocolors: 1.1.1 pretty-format: 27.5.1 + '@testing-library/jest-dom@6.9.1': + dependencies: + '@adobe/css-tools': 4.5.0 + aria-query: 5.3.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + picocolors: 1.1.1 + redent: 3.0.0 + + '@testing-library/user-event@14.6.6(@testing-library/dom@10.4.1)': + dependencies: + '@testing-library/dom': 10.4.1 + '@tootallnate/once@2.0.0': {} + '@tybys/wasm-util@0.10.3': + dependencies: + tslib: 2.8.1 + optional: true + '@types/aria-query@5.0.4': {} '@types/babel__core@7.20.5': @@ -4170,6 +5351,13 @@ snapshots: dependencies: '@babel/types': 7.27.0 + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/deep-eql@4.0.2': {} + '@types/estree@1.0.7': {} '@types/graceful-fs@4.1.9': @@ -4301,8 +5489,48 @@ snapshots: '@typescript-eslint/types': 6.21.0 eslint-visitor-keys: 3.4.3 + '@typescript/typescript6@6.0.2': + dependencies: + '@typescript/old': typescript@6.0.3 + '@ungap/structured-clone@1.3.0': {} + '@vitest/expect@3.2.4': + dependencies: + '@types/chai': 5.2.3 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + tinyrainbow: 2.0.0 + + '@vitest/pretty-format@3.2.4': + dependencies: + tinyrainbow: 2.0.0 + + '@vitest/spy@3.2.4': + dependencies: + tinyspy: 4.0.4 + + '@vitest/utils@3.2.4': + dependencies: + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.1 + tinyrainbow: 2.0.0 + + '@volar/language-core@2.4.28': + dependencies: + '@volar/source-map': 2.4.28 + + '@volar/source-map@2.4.28': {} + + '@volar/typescript@2.4.28': + dependencies: + '@volar/language-core': 2.4.28 + path-browserify: 1.0.1 + vscode-uri: 3.2.0 + + '@webcontainer/env@1.1.1': {} + abab@2.0.6: {} acorn-globals@7.0.1: @@ -4320,6 +5548,8 @@ snapshots: acorn@8.14.1: {} + acorn@8.18.0: {} + agent-base@6.0.2: dependencies: debug: 4.4.0 @@ -4368,6 +5598,12 @@ snapshots: array-union@2.1.0: {} + assertion-error@2.0.1: {} + + ast-types@0.16.1: + dependencies: + tslib: 2.8.1 + asynckit@0.4.0: {} babel-jest@29.7.0(@babel/core@7.26.10): @@ -4400,16 +5636,6 @@ snapshots: '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.7 - babel-plugin-jsx-dom-expressions@0.39.7(@babel/core@7.26.10): - dependencies: - '@babel/core': 7.26.10 - '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) - '@babel/types': 7.27.0 - html-entities: 2.3.3 - parse5: 7.3.0 - validate-html-nesting: 1.2.2 - babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.26.10): dependencies: '@babel/compat-data': 7.26.8 @@ -4459,10 +5685,12 @@ snapshots: babel-plugin-jest-hoist: 29.6.3 babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.10) - babel-preset-solid@1.9.5(@babel/core@7.26.10): + babel-preset-solid@2.0.0-rc.2(@babel/core@7.26.10)(solid-js@2.0.0-rc.3): dependencies: '@babel/core': 7.26.10 - babel-plugin-jsx-dom-expressions: 0.39.7(@babel/core@7.26.10) + '@dom-expressions/babel-plugin-jsx': 0.50.0-next.44(@babel/core@7.26.10) + optionalDependencies: + solid-js: 2.0.0-rc.3 balanced-match@1.0.2: {} @@ -4492,6 +5720,10 @@ snapshots: buffer-from@1.1.2: {} + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + bundle-require@5.1.0(esbuild@0.25.3): dependencies: esbuild: 0.25.3 @@ -4512,6 +5744,14 @@ snapshots: caniuse-lite@1.0.30001715: {} + chai@5.3.3: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.3 + deep-eql: 5.0.2 + loupe: 3.2.1 + pathval: 2.0.1 + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -4519,6 +5759,8 @@ snapshots: char-regex@1.0.2: {} + check-error@2.1.3: {} + chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -4559,8 +5801,6 @@ snapshots: dependencies: browserslist: 4.24.4 - core-util-is@1.0.3: {} - create-jest@29.7.0(@types/node@20.17.31): dependencies: '@jest/types': 29.6.3 @@ -4582,6 +5822,8 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + css.escape@1.5.1: {} + cssom@0.3.8: {} cssom@0.5.0: {} @@ -4606,14 +5848,27 @@ snapshots: dedent@1.5.3: {} + deep-eql@5.0.2: {} + deep-is@0.1.4: {} deepmerge@4.3.1: {} + default-browser-id@5.0.1: {} + + default-browser@5.5.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + + define-lazy-prop@3.0.0: {} + delayed-stream@1.0.0: {} dequal@2.0.3: {} + detect-libc@2.1.2: {} + detect-newline@3.1.0: {} diff-sequences@29.6.3: {} @@ -4628,6 +5883,8 @@ snapshots: dom-accessibility-api@0.5.16: {} + dom-accessibility-api@0.6.3: {} + domexception@4.0.0: dependencies: webidl-conversions: 7.0.0 @@ -4648,23 +5905,8 @@ snapshots: emoji-regex@9.2.2: {} - enhanced-resolve-jest@1.1.0: - dependencies: - enhanced-resolve: 4.5.0 - tslib: 1.14.1 - - enhanced-resolve@4.5.0: - dependencies: - graceful-fs: 4.2.11 - memory-fs: 0.5.0 - tapable: 1.1.3 - entities@6.0.0: {} - errno@0.1.8: - dependencies: - prr: 1.0.1 - error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -4684,13 +5926,13 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 - esbuild-plugin-solid@0.5.0(esbuild@0.25.3)(solid-js@1.9.5): + esbuild-plugin-solid@0.5.0(esbuild@0.25.3)(solid-js@2.0.0-rc.3): dependencies: '@babel/core': 7.26.10 '@babel/preset-typescript': 7.27.0(@babel/core@7.26.10) - babel-preset-solid: 1.9.5(@babel/core@7.26.10) + babel-preset-solid: 2.0.0-rc.2(@babel/core@7.26.10)(solid-js@2.0.0-rc.3) esbuild: 0.25.3 - solid-js: 1.9.5 + solid-js: 2.0.0-rc.3 transitivePeerDependencies: - supports-color @@ -4864,6 +6106,10 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + fdir@6.5.0(picomatch@4.0.7): + optionalDependencies: + picomatch: 4.0.7 + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 @@ -4902,6 +6148,14 @@ snapshots: es-set-tostringtag: 2.1.0 mime-types: 2.1.35 + framer-motion@13.1.1(react@19.2.8): + dependencies: + motion-dom: 13.1.1 + motion-utils: 13.0.0 + tslib: 2.8.1 + optionalDependencies: + react: 19.2.8 + fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -4994,8 +6248,6 @@ snapshots: dependencies: function-bind: 1.1.2 - hey-listen@1.0.8: {} - html-encoding-sniffer@3.0.0: dependencies: whatwg-encoding: 2.0.0 @@ -5039,6 +6291,8 @@ snapshots: imurmurhash@0.1.4: {} + indent-string@4.0.0: {} + inflight@1.0.6: dependencies: once: 1.4.0 @@ -5052,6 +6306,8 @@ snapshots: dependencies: hasown: 2.0.2 + is-docker@3.0.0: {} + is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -5062,6 +6318,10 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + is-number@7.0.0: {} is-path-inside@3.0.3: {} @@ -5070,7 +6330,11 @@ snapshots: is-stream@2.0.1: {} - isarray@1.0.0: {} + is-what@4.1.16: {} + + is-wsl@3.1.1: + dependencies: + is-inside-container: 1.0.0 isexe@2.0.0: {} @@ -5504,6 +6768,8 @@ snapshots: json5@2.2.3: {} + jsonc-parser@3.3.1: {} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -5517,6 +6783,55 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + lightningcss-android-arm64@1.33.0: + optional: true + + lightningcss-darwin-arm64@1.33.0: + optional: true + + lightningcss-darwin-x64@1.33.0: + optional: true + + lightningcss-freebsd-x64@1.33.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.33.0: + optional: true + + lightningcss-linux-arm64-gnu@1.33.0: + optional: true + + lightningcss-linux-arm64-musl@1.33.0: + optional: true + + lightningcss-linux-x64-gnu@1.33.0: + optional: true + + lightningcss-linux-x64-musl@1.33.0: + optional: true + + lightningcss-win32-arm64-msvc@1.33.0: + optional: true + + lightningcss-win32-x64-msvc@1.33.0: + optional: true + + lightningcss@1.33.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.33.0 + lightningcss-darwin-arm64: 1.33.0 + lightningcss-darwin-x64: 1.33.0 + lightningcss-freebsd-x64: 1.33.0 + lightningcss-linux-arm-gnueabihf: 1.33.0 + lightningcss-linux-arm64-gnu: 1.33.0 + lightningcss-linux-arm64-musl: 1.33.0 + lightningcss-linux-x64-gnu: 1.33.0 + lightningcss-linux-x64-musl: 1.33.0 + lightningcss-win32-arm64-msvc: 1.33.0 + lightningcss-win32-x64-msvc: 1.33.0 + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} @@ -5537,6 +6852,8 @@ snapshots: lodash.sortby@4.7.0: {} + loupe@3.2.1: {} + lru-cache@10.4.3: {} lru-cache@5.1.1: @@ -5555,10 +6872,9 @@ snapshots: math-intrinsics@1.1.0: {} - memory-fs@0.5.0: + merge-anything@5.1.7: dependencies: - errno: 0.1.8 - readable-stream: 2.3.8 + is-what: 4.1.16 merge-stream@2.0.0: {} @@ -5577,6 +6893,8 @@ snapshots: mimic-fn@2.1.0: {} + min-indent@1.0.1: {} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -5591,6 +6909,12 @@ snapshots: minipass@7.1.2: {} + motion-dom@13.1.1: + dependencies: + motion-utils: 13.0.0 + + motion-utils@13.0.0: {} + ms@2.1.3: {} mz@2.7.0: @@ -5599,6 +6923,8 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 + nanoid@3.3.18: {} + natural-compare@1.4.0: {} node-int64@0.4.0: {} @@ -5623,6 +6949,13 @@ snapshots: dependencies: mimic-fn: 2.1.0 + open@10.2.0: + dependencies: + default-browser: 5.5.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -5632,6 +6965,53 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + oxc-parser@0.127.0: + dependencies: + '@oxc-project/types': 0.127.0 + optionalDependencies: + '@oxc-parser/binding-android-arm-eabi': 0.127.0 + '@oxc-parser/binding-android-arm64': 0.127.0 + '@oxc-parser/binding-darwin-arm64': 0.127.0 + '@oxc-parser/binding-darwin-x64': 0.127.0 + '@oxc-parser/binding-freebsd-x64': 0.127.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.127.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.127.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.127.0 + '@oxc-parser/binding-linux-arm64-musl': 0.127.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.127.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.127.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.127.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.127.0 + '@oxc-parser/binding-linux-x64-gnu': 0.127.0 + '@oxc-parser/binding-linux-x64-musl': 0.127.0 + '@oxc-parser/binding-openharmony-arm64': 0.127.0 + '@oxc-parser/binding-wasm32-wasi': 0.127.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.127.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.127.0 + '@oxc-parser/binding-win32-x64-msvc': 0.127.0 + + oxc-resolver@11.21.2: + optionalDependencies: + '@oxc-resolver/binding-android-arm-eabi': 11.21.2 + '@oxc-resolver/binding-android-arm64': 11.21.2 + '@oxc-resolver/binding-darwin-arm64': 11.21.2 + '@oxc-resolver/binding-darwin-x64': 11.21.2 + '@oxc-resolver/binding-freebsd-x64': 11.21.2 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.21.2 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.21.2 + '@oxc-resolver/binding-linux-arm64-gnu': 11.21.2 + '@oxc-resolver/binding-linux-arm64-musl': 11.21.2 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.21.2 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.21.2 + '@oxc-resolver/binding-linux-riscv64-musl': 11.21.2 + '@oxc-resolver/binding-linux-s390x-gnu': 11.21.2 + '@oxc-resolver/binding-linux-x64-gnu': 11.21.2 + '@oxc-resolver/binding-linux-x64-musl': 11.21.2 + '@oxc-resolver/binding-openharmony-arm64': 11.21.2 + '@oxc-resolver/binding-wasm32-wasi': 11.21.2 + '@oxc-resolver/binding-win32-arm64-msvc': 11.21.2 + '@oxc-resolver/binding-win32-x64-msvc': 11.21.2 + p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -5667,6 +7047,8 @@ snapshots: dependencies: entities: 6.0.0 + path-browserify@1.0.1: {} + path-exists@4.0.0: {} path-is-absolute@1.0.1: {} @@ -5682,21 +7064,33 @@ snapshots: path-type@4.0.0: {} + pathval@2.0.1: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} picomatch@4.0.2: {} + picomatch@4.0.7: {} + pirates@4.0.7: {} pkg-dir@4.2.0: dependencies: find-up: 4.1.0 - postcss-load-config@6.0.1: + postcss-load-config@6.0.1(postcss@8.5.26): dependencies: lilconfig: 3.1.3 + optionalDependencies: + postcss: 8.5.26 + + postcss@8.5.26: + dependencies: + nanoid: 3.3.18 + picocolors: 1.1.1 + source-map-js: 1.2.1 prelude-ls@1.2.1: {} @@ -5714,15 +7108,11 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 - process-nextick-args@2.0.1: {} - prompts@2.4.2: dependencies: kleur: 3.0.3 sisteransi: 1.0.5 - prr@1.0.1: {} - psl@1.15.0: dependencies: punycode: 2.3.1 @@ -5739,18 +7129,23 @@ snapshots: react-is@18.3.1: {} - readable-stream@2.3.8: - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 + react@19.2.8: {} readdirp@4.1.2: {} + recast@0.23.21: + dependencies: + ast-types: 0.16.1 + esprima: 4.0.1 + source-map: 0.6.1 + tiny-invariant: 1.3.3 + tslib: 2.8.1 + + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + regenerate-unicode-properties@10.2.0: dependencies: regenerate: 1.4.2 @@ -5804,6 +7199,27 @@ snapshots: dependencies: glob: 7.2.3 + rolldown@1.2.6: + dependencies: + '@oxc-project/types': 0.147.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm-eabi': 1.2.6 + '@rolldown/binding-android-arm64': 1.2.6 + '@rolldown/binding-darwin-arm64': 1.2.6 + '@rolldown/binding-darwin-x64': 1.2.6 + '@rolldown/binding-freebsd-x64': 1.2.6 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.6 + '@rolldown/binding-linux-arm64-gnu': 1.2.6 + '@rolldown/binding-linux-arm64-musl': 1.2.6 + '@rolldown/binding-linux-ppc64-gnu': 1.2.6 + '@rolldown/binding-linux-s390x-gnu': 1.2.6 + '@rolldown/binding-linux-x64-gnu': 1.2.6 + '@rolldown/binding-linux-x64-musl': 1.2.6 + '@rolldown/binding-openharmony-arm64': 1.2.6 + '@rolldown/binding-win32-arm64-msvc': 1.2.6 + '@rolldown/binding-win32-x64-msvc': 1.2.6 + rollup@4.40.0: dependencies: '@types/estree': 1.0.7 @@ -5830,12 +7246,12 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.40.0 fsevents: 2.3.3 + run-applescript@7.1.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - safe-buffer@5.1.2: {} - safer-buffer@2.1.2: {} saxes@6.0.0: @@ -5846,11 +7262,13 @@ snapshots: semver@7.7.1: {} - seroval-plugins@1.2.1(seroval@1.2.1): + semver@7.8.5: {} + + seroval-plugins@1.5.6(seroval@1.5.6): dependencies: - seroval: 1.2.1 + seroval: 1.5.6 - seroval@1.2.1: {} + seroval@1.5.6: {} shebang-command@2.0.0: dependencies: @@ -5866,11 +7284,14 @@ snapshots: slash@3.0.0: {} - solid-js@1.9.5: + solid-js@2.0.0-rc.3: dependencies: + '@solidjs/signals': 2.0.0-rc.3 csstype: 3.1.3 - seroval: 1.2.1 - seroval-plugins: 1.2.1(seroval@1.2.1) + seroval: 1.5.6 + seroval-plugins: 1.5.6(seroval@1.5.6) + + source-map-js@1.2.1: {} source-map-support@0.5.13: dependencies: @@ -5889,6 +7310,52 @@ snapshots: dependencies: escape-string-regexp: 2.0.0 + storybook-solidjs-vite@10.7.1(@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3))(esbuild@0.25.3)(rollup@4.40.0)(solid-js@2.0.0-rc.3)(storybook@10.5.10(prettier@3.5.3)(react@19.2.8))(typescript@5.8.3)(vite-plugin-solid@3.0.0-next.27(@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-rc.3)(vite@8.2.2(@types/node@20.17.31)(esbuild@0.25.3)))(vite@8.2.2(@types/node@20.17.31)(esbuild@0.25.3)): + dependencies: + '@storybook/builder-vite': 10.5.10(esbuild@0.25.3)(rollup@4.40.0)(storybook@10.5.10(prettier@3.5.3)(react@19.2.8))(vite@8.2.2(@types/node@20.17.31)(esbuild@0.25.3)) + '@storybook/global': 5.0.0 + '@typescript/typescript6': 6.0.2 + '@volar/language-core': 2.4.28 + '@volar/typescript': 2.4.28 + semver: 7.8.5 + solid-js: 2.0.0-rc.3 + storybook: 10.5.10(prettier@3.5.3)(react@19.2.8) + vite: 8.2.2(@types/node@20.17.31)(esbuild@0.25.3) + vite-plugin-solid: 3.0.0-next.27(@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-rc.3)(vite@8.2.2(@types/node@20.17.31)(esbuild@0.25.3)) + optionalDependencies: + '@solidjs/web': 2.0.0-rc.3(solid-js@2.0.0-rc.3) + typescript: 5.8.3 + transitivePeerDependencies: + - esbuild + - rollup + - webpack + + storybook@10.5.10(prettier@3.5.3)(react@19.2.8): + dependencies: + '@storybook/global': 5.0.0 + '@storybook/icons': 2.1.0(react@19.2.8) + '@testing-library/dom': 10.4.1 + '@testing-library/jest-dom': 6.9.1 + '@testing-library/user-event': 14.6.6(@testing-library/dom@10.4.1) + '@vitest/expect': 3.2.4 + '@vitest/spy': 3.2.4 + '@webcontainer/env': 1.1.1 + esbuild: 0.25.3 + jsonc-parser: 3.3.1 + open: 10.2.0 + oxc-parser: 0.127.0 + oxc-resolver: 11.21.2 + recast: 0.23.21 + semver: 7.8.5 + use-sync-external-store: 1.6.0(react@19.2.8) + ws: 8.21.3 + optionalDependencies: + prettier: 3.5.3 + transitivePeerDependencies: + - bufferutil + - react + - utf-8-validate + string-length@4.0.2: dependencies: char-regex: 1.0.2 @@ -5906,10 +7373,6 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - string_decoder@1.1.1: - dependencies: - safe-buffer: 5.1.2 - strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -5922,6 +7385,10 @@ snapshots: strip-final-newline@2.0.0: {} + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + strip-json-comments@3.1.1: {} sucrase@3.35.0: @@ -5946,8 +7413,6 @@ snapshots: symbol-tree@3.2.4: {} - tapable@1.1.3: {} - test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 @@ -5964,6 +7429,8 @@ snapshots: dependencies: any-promise: 1.3.0 + tiny-invariant@1.3.3: {} + tinyexec@0.3.2: {} tinyglobby@0.2.13: @@ -5971,6 +7438,15 @@ snapshots: fdir: 6.4.4(picomatch@4.0.2) picomatch: 4.0.2 + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 + + tinyrainbow@2.0.0: {} + + tinyspy@4.0.4: {} + tmpl@1.0.5: {} to-regex-range@5.0.1: @@ -5998,22 +7474,22 @@ snapshots: dependencies: typescript: 5.8.3 - ts-interface-checker@0.1.13: {} + ts-dedent@2.3.0: {} - tslib@1.14.1: {} + ts-interface-checker@0.1.13: {} tslib@2.8.1: {} - tsup-preset-solid@2.2.0(esbuild@0.25.3)(solid-js@1.9.5)(tsup@8.4.0(typescript@5.8.3)): + tsup-preset-solid@2.2.0(esbuild@0.25.3)(solid-js@2.0.0-rc.3)(tsup@8.4.0(postcss@8.5.26)(typescript@5.8.3)): dependencies: - esbuild-plugin-solid: 0.5.0(esbuild@0.25.3)(solid-js@1.9.5) - tsup: 8.4.0(typescript@5.8.3) + esbuild-plugin-solid: 0.5.0(esbuild@0.25.3)(solid-js@2.0.0-rc.3) + tsup: 8.4.0(postcss@8.5.26)(typescript@5.8.3) transitivePeerDependencies: - esbuild - solid-js - supports-color - tsup@8.4.0(typescript@5.8.3): + tsup@8.4.0(postcss@8.5.26)(typescript@5.8.3): dependencies: bundle-require: 5.1.0(esbuild@0.25.3) cac: 6.7.14 @@ -6023,7 +7499,7 @@ snapshots: esbuild: 0.25.3 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1 + postcss-load-config: 6.0.1(postcss@8.5.26) resolve-from: 5.0.0 rollup: 4.40.0 source-map: 0.8.0-beta.0 @@ -6032,6 +7508,7 @@ snapshots: tinyglobby: 0.2.13 tree-kill: 1.2.2 optionalDependencies: + postcss: 8.5.26 typescript: 5.8.3 transitivePeerDependencies: - jiti @@ -6051,6 +7528,8 @@ snapshots: typescript@5.8.3: {} + typescript@6.0.3: {} + undici-types@6.19.8: {} unicode-canonical-property-names-ecmascript@2.0.1: {} @@ -6066,6 +7545,13 @@ snapshots: universalify@0.2.0: {} + unplugin@2.3.11: + dependencies: + '@jridgewell/remapping': 2.3.5 + acorn: 8.18.0 + picomatch: 4.0.7 + webpack-virtual-modules: 0.6.2 + update-browserslist-db@1.1.3(browserslist@4.24.4): dependencies: browserslist: 4.24.4 @@ -6081,7 +7567,9 @@ snapshots: querystringify: 2.2.0 requires-port: 1.0.0 - util-deprecate@1.0.2: {} + use-sync-external-store@1.6.0(react@19.2.8): + dependencies: + react: 19.2.8 v8-to-istanbul@9.3.0: dependencies: @@ -6091,6 +7579,35 @@ snapshots: validate-html-nesting@1.2.2: {} + vite-plugin-solid@3.0.0-next.27(@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-rc.3)(vite@8.2.2(@types/node@20.17.31)(esbuild@0.25.3)): + dependencies: + '@solidjs/vite-plugin': 3.0.0-next.36(@solidjs/web@2.0.0-rc.3(solid-js@2.0.0-rc.3))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-rc.3)(vite@8.2.2(@types/node@20.17.31)(esbuild@0.25.3)) + transitivePeerDependencies: + - '@solidjs/start-devtools' + - '@solidjs/web' + - '@testing-library/jest-dom' + - solid-js + - supports-color + - vite + + vite@8.2.2(@types/node@20.17.31)(esbuild@0.25.3): + dependencies: + lightningcss: 1.33.0 + picomatch: 4.0.7 + postcss: 8.5.26 + rolldown: 1.2.6 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 20.17.31 + esbuild: 0.25.3 + fsevents: 2.3.3 + + vitefu@1.1.3(vite@8.2.2(@types/node@20.17.31)(esbuild@0.25.3)): + optionalDependencies: + vite: 8.2.2(@types/node@20.17.31)(esbuild@0.25.3) + + vscode-uri@3.2.0: {} + w3c-xmlserializer@4.0.0: dependencies: xml-name-validator: 4.0.0 @@ -6103,6 +7620,8 @@ snapshots: webidl-conversions@7.0.0: {} + webpack-virtual-modules@0.6.2: {} + whatwg-encoding@2.0.0: dependencies: iconv-lite: 0.6.3 @@ -6147,6 +7666,12 @@ snapshots: ws@8.18.1: {} + ws@8.21.3: {} + + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.1 + xml-name-validator@4.0.0: {} xmlchars@2.2.0: {} diff --git a/src/engine.ts b/src/engine.ts new file mode 100644 index 0000000..7338523 --- /dev/null +++ b/src/engine.ts @@ -0,0 +1,290 @@ +import {animate} from "framer-motion/dom" +import {inView as motionInView} from "framer-motion/dom" +import {hover, press, buildHTMLStyles} from "motion-dom" +import type {AnimationOptions} from "motion-dom" + +import type {Options, Target, VariantDefinition} from "./types.js" + +/** @internal */ +export const mountedStates = new WeakMap() + +/** @internal */ +export interface MotionState { + mount(el: Element): () => void + update(options: Options): void + setActive(type: "exit", isActive: boolean): Promise + getTarget(): Target + getOptions(): Options + /** @internal the resolved `initial` variant key, inherited from a parent Motion if unset here */ + getInitialVariantKey(): string | undefined +} + +function resolveTarget( + def: VariantDefinition | undefined, + variants: Record | undefined, +): Target | undefined { + if (def === undefined) return undefined + return typeof def === "string" ? variants?.[def] : def +} + +/* +Two compatibility shims for the documented `transition={{duration, key: {...}}}` +per-value override syntax: + +1. Motion One used `easing`; modern Motion renamed it to `ease`. +2. Motion One's per-value override only needed to specify what differs from + the base transition (the rest was inherited). Modern Motion's own + `resolveTransition` only merges a per-value override with its parent when + the override explicitly sets `inherit: true` — otherwise the override is + used standalone and silently falls back to Motion's own defaults for + anything it didn't specify (e.g. `x: {offset: [...]}` with no `duration` + of its own completes almost instantly instead of over the base duration). + Merging here keeps the documented, more ergonomic behavior working. +*/ +function normalizeTransition(transition: unknown): AnimationOptions | undefined { + if (!transition || typeof transition !== "object") return transition as AnimationOptions | undefined + + const base: Record = {} + const perValue: Record> = {} + for (const [key, value] of Object.entries(transition)) { + if (value && typeof value === "object" && !Array.isArray(value)) perValue[key] = value + else base[key === "easing" ? "ease" : key] = value + } + + const result: Record = {...base} + for (const [key, override] of Object.entries(perValue)) { + const normalizedOverride = {...base} + for (const [k, v] of Object.entries(override)) normalizedOverride[k === "easing" ? "ease" : k] = v + result[key] = normalizedOverride + } + return result as AnimationOptions +} + +function targetValues(target: Target | undefined): Record { + if (!target) return {} + const {transition: _transition, ...values} = target + return values +} + +/** @internal */ +export function createStyles(target: Target): Record { + const renderState = {transform: {}, transformOrigin: {}, vars: {}, style: {}} + // a static (non-animated) style can't represent a keyframe list — use its first value + const staticValues: Record = {} + for (const [key, value] of Object.entries(targetValues(target))) { + staticValues[key] = Array.isArray(value) ? value[0] : value + } + buildHTMLStyles(renderState as any, staticValues as any) + return {...(renderState.vars as any), ...(renderState.style as any)} +} + +/** @internal */ +export const style = { + set(el: Element, key: string, value: unknown): void { + if (key.startsWith("--")) (el as HTMLElement).style.setProperty(key, String(value)) + else (el as HTMLElement).style[key as any] = value as string + }, +} + +function applyStylesDirect(el: Element, target: Target): void { + const styles = createStyles(target) + for (const key in styles) style.set(el, key, styles[key]) +} + +function dispatch(el: Element, type: string, detail: Record): void { + el.dispatchEvent(new CustomEvent(type, {detail})) +} + +interface MountContext { + element: Element + cancelAnimation?: () => void + unbindGestures?: () => void +} + +/** @internal */ +export function createMotionState( + initialOptions: Options, + parent?: MotionState, +): MotionState { + let options = initialOptions + const active = {hover: false, press: false, exit: false} + + /* + Scoped to whichever mount() call is currently active. A sibling Motion + component can get constructed — and briefly mounted/unmounted again — + before its real mount, as a structural side effect of how / + createSwitchTransition read reactive sources (see primitives.ts's + mount-gating effect). That stale cycle's own cleanup must never reach + into a *newer* mount's in-flight animation or gesture bindings and + cancel them; keeping this per-mount-context, and only ever pointing + `current` at the latest one, keeps the two cycles from interfering. + */ + let current: MountContext | undefined + + function getInitialVariantKey(): string | undefined { + if (typeof options.initial === "string") return options.initial + if (options.initial === undefined) return parent?.getInitialVariantKey() + return undefined + } + + function getStartTarget(): Target { + if (options.initial === false) { + return resolveTarget(options.animate, options.variants) ?? {} + } + if (options.initial === undefined) { + /* + No explicit `initial` and nothing inherited from a parent's variant + key: leave the starting style empty (browser defaults) rather than + falling back to the `animate` target. Falling back to `animate` here + made mount()'s "does the start differ from the target" check always + see them as equal, silently skipping the enter animation entirely — + breaking the documented default behavior ("elements automatically + animate to the values defined in animate when they're created"). + */ + const inheritedKey = getInitialVariantKey() + return (inheritedKey && options.variants?.[inheritedKey]) || {} + } + return resolveTarget(options.initial, options.variants) ?? {} + } + + function computeEffectiveTarget(): Target { + if (active.exit) return resolveTarget(options.exit, options.variants) ?? {} + const target: Target = {...(resolveTarget(options.animate, options.variants) ?? {})} + if (active.hover) Object.assign(target, resolveTarget(options.hover, options.variants)) + if (active.press) Object.assign(target, resolveTarget(options.press, options.variants)) + return target + } + + function animateToTarget(target: Target): Promise { + const ctx = current + ctx?.cancelAnimation?.() + if (!ctx) return Promise.resolve() + const values = targetValues(target) + if (Object.keys(values).length === 0) return Promise.resolve() + + // merge, then normalize once — normalizing an already-normalized base + // transition again would re-merge its own per-value overrides against a + // *new* base and let stale, already-baked-in override values win + const transition = normalizeTransition({...options.transition, ...target.transition}) + dispatch(ctx.element, "motionstart", {target}) + const controls = animate(ctx.element, values as any, transition as any) + ctx.cancelAnimation = () => controls.stop() + return controls.finished.then( + () => { + // don't dispatch on behalf of a mount cycle a newer one has superseded + if (current === ctx) dispatch(ctx.element, "motioncomplete", {target}) + }, + // swallow: `finished` rejects when an in-flight animation is cancelled/replaced + () => undefined, + ) + } + + function bindGestures(el: Element): () => void { + const unbinds: Array<() => void> = [] + if (options.hover) { + unbinds.push( + hover(el, (_el, startEvent) => { + active.hover = true + dispatch(el, "hoverstart", {originalEvent: startEvent}) + void animateToTarget(computeEffectiveTarget()) + return endEvent => { + active.hover = false + dispatch(el, "hoverend", {originalEvent: endEvent}) + void animateToTarget(computeEffectiveTarget()) + } + }), + ) + } + if (options.press) { + unbinds.push( + press(el, (_el, startEvent) => { + active.press = true + dispatch(el, "pressstart", {originalEvent: startEvent}) + void animateToTarget(computeEffectiveTarget()) + return endEvent => { + active.press = false + dispatch(el, "pressend", {originalEvent: endEvent}) + void animateToTarget(computeEffectiveTarget()) + } + }), + ) + } + if (options.inView) { + unbinds.push( + motionInView( + el, + (entry: any) => { + dispatch(el, "viewenter", {originalEntry: entry}) + void animateToTarget({ + ...(resolveTarget(options.animate, options.variants) ?? {}), + ...resolveTarget(options.inView, options.variants), + }) + return leaveEntry => { + dispatch(el, "viewleave", {originalEntry: leaveEntry}) + void animateToTarget(computeEffectiveTarget()) + } + }, + options.inViewOptions as any, + ), + ) + } + return () => unbinds.forEach(unbind => unbind()) + } + + const state: MotionState = { + mount(el: Element) { + const ctx: MountContext = {element: el} + current = ctx + + const startTarget = getStartTarget() + applyStylesDirect(el, startTarget) + + const animateTarget = resolveTarget(options.animate, options.variants) ?? {} + if (JSON.stringify(targetValues(startTarget)) !== JSON.stringify(targetValues(animateTarget))) { + void animateToTarget(animateTarget) + } + + ctx.unbindGestures = bindGestures(el) + mountedStates.set(el, state) + + return () => { + ctx.cancelAnimation?.() + ctx.unbindGestures?.() + mountedStates.delete(el) + if (current === ctx) current = undefined + } + }, + update(newOptions: Options) { + const prevOptions = options + const prevAnimate = JSON.stringify(resolveTarget(prevOptions.animate, prevOptions.variants) ?? {}) + options = newOptions + + // only tear down and recreate gesture listeners when a gesture-related + // prop actually changed — not on every unrelated reactive update (e.g. + // a reactive `animate` value), which would cut off an in-progress + // hover/press/inView interaction for no reason + const gesturesChanged = + prevOptions.hover !== options.hover || + prevOptions.press !== options.press || + prevOptions.inView !== options.inView || + prevOptions.inViewOptions !== options.inViewOptions + if (gesturesChanged && current) { + current.unbindGestures?.() + current.unbindGestures = bindGestures(current.element) + } + + const nextAnimate = resolveTarget(options.animate, options.variants) ?? {} + if (!active.exit && prevAnimate !== JSON.stringify(nextAnimate)) { + void animateToTarget(computeEffectiveTarget()) + } + }, + setActive(type: "exit", isActive: boolean) { + active[type] = isActive + return animateToTarget(computeEffectiveTarget()) + }, + getTarget: getStartTarget, + getOptions: () => options, + getInitialVariantKey, + } + return state +} diff --git a/src/index.tsx b/src/index.tsx index 8485c64..4c3206a 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,4 +1,4 @@ export * from "./types.js" export {Motion} from "./motion.jsx" export {Presence, PresenceContext} from "./presence.jsx" -export {createMotion, motion} from "./primitives.js" +export {createMotion, motion, useScroll} from "./primitives.js" diff --git a/src/motion.tsx b/src/motion.tsx index 1800ea0..ff5787b 100644 --- a/src/motion.tsx +++ b/src/motion.tsx @@ -1,10 +1,11 @@ -import {Dynamic} from "solid-js/web" -import {useContext, splitProps, JSX, createContext} from "solid-js" +import {Dynamic} from "@solidjs/web" +import type {JSX} from "@solidjs/web" +import {omit, createContext} from "solid-js" import {combineStyle} from "@solid-primitives/props" -import {MotionState} from "@motionone/dom" +import {MotionState} from "./engine.js" import type {MotionComponentProps, MotionProxy, MotionProxyComponent} from "./types.js" -import {createAndBindMotionState} from "./primitives.js" +import {createAndBindMotionState, tryUseContext} from "./primitives.js" import {PresenceContext} from "./presence.jsx" const OPTION_KEYS = [ @@ -21,7 +22,7 @@ const OPTION_KEYS = [ const ATTR_KEYS = ["tag"] as const -export const ParentContext = createContext() +export const ParentContext = createContext(undefined) /** @internal */ export const MotionComponent = ( @@ -31,18 +32,28 @@ export const MotionComponent = ( style?: JSX.CSSProperties | string }, ): JSX.Element => { - const [options, , attrs] = splitProps(props, OPTION_KEYS, ATTR_KEYS) + const attrs = omit(props, ...OPTION_KEYS, ...ATTR_KEYS) const [state, style] = createAndBindMotionState( () => root, - () => ({...options}), - useContext(PresenceContext), - useContext(ParentContext), + () => ({ + initial: props.initial, + animate: props.animate, + inView: props.inView, + inViewOptions: props.inViewOptions, + hover: props.hover, + press: props.press, + variants: props.variants, + transition: props.transition, + exit: props.exit, + }), + tryUseContext(PresenceContext), + tryUseContext(ParentContext), ) let root!: Element return ( - + { @@ -52,7 +63,7 @@ export const MotionComponent = ( component={props.tag || "div"} style={combineStyle(props.style, style)} /> - + ) } diff --git a/src/presence.tsx b/src/presence.tsx index 81e0ff0..7ab6f51 100644 --- a/src/presence.tsx +++ b/src/presence.tsx @@ -1,20 +1,14 @@ -import {mountedStates} from "@motionone/dom" +import {mountedStates} from "./engine.js" import {resolveFirst} from "@solid-primitives/refs" import {createSwitchTransition} from "@solid-primitives/transition-group" -import { - createContext, - createSignal, - batch, - type FlowComponent, - type JSX, - type Accessor, -} from "solid-js" +import {createContext, createSignal, flush, type FlowComponent, type Accessor} from "solid-js" +import type {JSX} from "@solidjs/web" export type PresenceContextState = { initial: boolean mount: Accessor } -export const PresenceContext = createContext() +export const PresenceContext = createContext(undefined) /** * Perform exit/enter trantisions of children `` components. @@ -40,10 +34,16 @@ export const Presence: FlowComponent<{ initial?: boolean exitBeforeEnter?: boolean }> = props => { - const [mount, setMount] = createSignal(true), + /* + onEnter/onExit below are invoked synchronously from inside + createSwitchTransition's own createRenderEffect — an owned reactive + scope — so this internal signal needs ownedWrite to allow writing to it + from there without Solid 2.0 throwing REACTIVE_WRITE_IN_OWNED_SCOPE. + */ + const [mount, setMount] = createSignal(true, {ownedWrite: true}), state = {initial: props.initial ?? true, mount}, render = ( - + { createSwitchTransition( resolveFirst(() => props.children), @@ -51,25 +51,38 @@ export const Presence: FlowComponent<{ appear: state.initial, mode: props.exitBeforeEnter ? "out-in" : "parallel", onExit(el, done) { - batch(() => { - setMount(false) - mountedStates.get(el)?.getOptions()?.exit - ? el.addEventListener("motioncomplete", done) - : done() - }) + /* + onExit/onEnter run from a `motioncomplete` DOM CustomEvent + listener — outside Solid's own scheduler — so signal writes + here need an explicit flush to reach dependent effects (e.g. + a sibling Motion's mount-gating effect) before this returns. + */ + setMount(false) + flush() + mountedStates.get(el)?.getOptions().exit + ? el.addEventListener("motioncomplete", () => { + /* + `done` (transition-group's own callback) writes the + signal that actually removes this element from the + rendered list — also outside Solid's scheduler, so it + needs its own flush to take effect before callers see it. + */ + done() + flush() + }) + : done() }, onEnter(_, done) { - batch(() => { - setMount(true) - done() - }) + setMount(true) + flush() + done() }, }, ) as any as JSX.Element } - + ) - state.initial = true + queueMicrotask(() => (state.initial = true)) return render } diff --git a/src/primitives.ts b/src/primitives.ts index 84e7a33..5777160 100644 --- a/src/primitives.ts +++ b/src/primitives.ts @@ -1,9 +1,28 @@ -import {createMotionState, createStyles, MotionState, style} from "@motionone/dom" -import {Accessor, createEffect, onCleanup, useContext} from "solid-js" +import {scrollInfo} from "framer-motion/dom" +import {isServer} from "@solidjs/web" + +import {createMotionState, createStyles, MotionState, style} from "./engine.js" +import {Accessor, Context, createEffect, createSignal, flush, onCleanup, useContext} from "solid-js" import {PresenceContext, PresenceContextState} from "./presence.jsx" import {Options} from "./types.js" +/* +Solid 2.0's useContext throws ContextNotFoundError whenever the resolved value +is undefined, even with an explicit `undefined` default — there's no built-in +way to ask "is there a provider" without throwing. ParentContext/PresenceContext +are legitimately optional (most Motion components have neither an ancestor +Presence nor a parent Motion), so reads of them go through this instead. +*/ +/** @internal */ +export function tryUseContext(context: Context): T | undefined { + try { + return useContext(context) + } catch { + return undefined + } +} + /** @internal */ export function createAndBindMotionState( el: () => Element, @@ -16,25 +35,50 @@ export function createAndBindMotionState( parent_state, ) - createEffect(() => { - /* - Motion components under should wait before animating in - this is done with additional signal, because effects will still run immediately - */ - if (presence_state && !presence_state.mount()) return + /* + Motion components under should wait before animating in + this is done with additional signal, because effects will still run immediately + */ + createEffect( + () => (presence_state ? presence_state.mount() : true), + shouldMount => { + if (!shouldMount) return - const el_ref = el(), - unmount = state.mount(el_ref) + const el_ref = el() + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- `el_ref` is typed non-nullable, but see the comment below for why this still needs a runtime check + if (!el_ref) { + /* + Only reachable if the ref hasn't been assigned by the time this effect + runs — normally impossible, since Solid assigns refs synchronously + during render, before any effect fires. Historically this has only + been seen when an app ends up with two copies of solid-js active at + once (e.g. a linked/duplicated dependency), so this component's + effects run on a different reactive graph than the one that set the + ref. See https://github.com/solidjs-community/solid-motionone/issues/10 + */ + throw new Error( + "solid-motionone: element ref was not set before mount. This usually means " + + "your app has more than one copy of solid-js installed — check for " + + "duplicate/mismatched solid-js versions (e.g. with `npm ls solid-js`).", + ) + } + const unmount = state.mount(el_ref) - createEffect(() => state.update(options())) + return () => { + if (presence_state && options().exit) { + state.setActive("exit", true) + el_ref.addEventListener("motioncomplete", unmount) + } else unmount() + } + }, + ) - onCleanup(() => { - if (presence_state && options().exit) { - state.setActive("exit", true) - el_ref.addEventListener("motioncomplete", unmount) - } else unmount() - }) - }) + createEffect( + () => (presence_state && !presence_state.mount() ? undefined : options()), + opts => { + if (opts) state.update(opts) + }, + ) return [state, createStyles(state.getTarget())] as const } @@ -66,11 +110,92 @@ export function createMotion( } /** - * motion is a Solid directive that makes binding to elements easier. + * motion is a ref factory that makes binding to elements easier. + * + * @param options Options to effect the animation. + * @returns A ref callback to pass to an element's `ref` prop. + * + * @example + * ```tsx + *
({ animate: { opacity: 1 } }))} /> + * ``` + */ +export function motion(options: Accessor): (el: Element) => void { + const presence_state = tryUseContext(PresenceContext) + return el => { + createMotion(el, options, presence_state) + } +} + +/* +`AxisScrollInfo`/`ScrollInfoOptions` aren't part of framer-motion/dom's public +export list (only the `scroll`/`scrollInfo` functions themselves are), so +derive them structurally from `scrollInfo`'s own signature instead. +*/ +type ScrollInfoOptions = Parameters[1] +type AxisScrollInfo = Parameters[0]>[0]["x"] + +const emptyAxisScrollInfo = (): AxisScrollInfo => ({ + current: 0, + offset: [], + progress: 0, + scrollLength: 0, + velocity: 0, + targetOffset: 0, + targetLength: 0, + containerLength: 0, +}) + +/** + * useScroll provides reactive scroll progress values, based on Motion's + * [`scrollInfo`](https://motion.dev/docs/scroll) function. * - * @param el Target Element to bind to. - * @param props Options to effect the animation. + * @param options Options controlling which element/axis/offsets are tracked. + * @returns Reactive accessors for the current scroll time and per-axis info. + * + * @example + * ```tsx + * const {scrollY} = useScroll() + * createEffect(() => console.log(scrollY().progress)) + * ``` */ -export function motion(el: Element, props: Accessor): void { - createMotion(el, props, useContext(PresenceContext)) +export function useScroll(options?: ScrollInfoOptions): { + time: Accessor + scrollX: Accessor + scrollY: Accessor +} { + const [time, setTime] = createSignal(0) + const [scrollX, setScrollX] = createSignal(emptyAxisScrollInfo()) + const [scrollY, setScrollY] = createSignal(emptyAxisScrollInfo()) + + /* + No reactive dependency to track here, so this is a one-shot side effect — + Solid 2.0's createEffect now requires both a compute and effect function, + and its own error for this case says to just call directly instead. Since + that skips the "effects don't run during SSR" guarantee that normally keeps + DOM-only code out of the server build, guard explicitly with isServer. + */ + if (!isServer) { + onCleanup( + scrollInfo(info => { + /* + scrollInfo's callback fires from Motion's own rAF-driven scheduler, + entirely outside Solid's — same situation as presence.tsx's + onExit/onEnter, and needs the same explicit flush() so dependent + effects/DOM actually update instead of the write sitting pending. + + info.x/info.y are also reused/mutated in place across frames by + Motion internally, so they're shallow-copied here — writing the + same object reference into a signal would never trip Solid's + Object.is equality check and the signal would look unchanged. + */ + setTime(info.time) + setScrollX({...info.x}) + setScrollY({...info.y}) + flush() + }, options), + ) + } + + return {time, scrollX, scrollY} } diff --git a/src/types.ts b/src/types.ts index e2f1bb1..b62c1b1 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,39 +1,69 @@ -import type * as motionone from "@motionone/dom" +import type {AnimationOptions, DOMKeyframesDefinition} from "motion-dom" import type {PropertiesHyphen} from "csstype" -import type {JSX, ParentProps} from "solid-js" +import type {ParentProps} from "solid-js" +import type {JSX} from "@solidjs/web" -export type {VariantDefinition, Options} from "@motionone/dom" - -export interface MotionEventHandlers { - onMotionStart?: (event: motionone.MotionEvent) => void - onMotionComplete?: (event: motionone.MotionEvent) => void - onHoverStart?: (event: motionone.CustomPointerEvent) => void - onHoverEnd?: (event: motionone.CustomPointerEvent) => void - onPressStart?: (event: motionone.CustomPointerEvent) => void - onPressEnd?: (event: motionone.CustomPointerEvent) => void - onViewEnter?: (event: motionone.ViewEvent) => void - onViewLeave?: (event: motionone.ViewEvent) => void +/** Matches framer-motion/dom's (unexported) `InViewOptions` shape used by `inView()`. */ +export interface ViewportOptions { + root?: Element | Document + margin?: string + amount?: "some" | "all" | number } -declare module "@motionone/dom" { +declare module "motion-dom" { /* Solid style attribute supports only kebab-case properties. - While @motionone/dom supports both camelCase and kebab-case, + While motion-dom supports both camelCase and kebab-case, but provides only camelCase properties in the types. */ interface CSSStyleDeclarationWithTransform extends Omit {} +} - /* - exit is missing in types in motionone core - because it is only used in the Presence implementations - */ - interface Options { - exit?: motionone.VariantDefinition - } +/** A target of style values to animate to/from, with an optional per-target transition override. */ +export type Target = DOMKeyframesDefinition & {transition?: AnimationOptions} + +/** Either a direct target object, or a string key into the `variants` prop. */ +export type VariantDefinition = Target | string + +export type {AnimationOptions} + +export interface Options { + initial?: VariantDefinition | false + animate?: VariantDefinition + exit?: VariantDefinition + hover?: VariantDefinition + press?: VariantDefinition + inView?: VariantDefinition + inViewOptions?: ViewportOptions + variants?: Record + transition?: AnimationOptions } -export type MotionComponentProps = ParentProps +export interface MotionEvent extends CustomEvent { + detail: {target: Target} +} + +export interface CustomPointerEvent extends CustomEvent { + detail: {originalEvent: PointerEvent} +} + +export interface ViewEvent extends CustomEvent { + detail: {originalEntry: IntersectionObserverEntry} +} + +export interface MotionEventHandlers { + onMotionStart?: (event: MotionEvent) => void + onMotionComplete?: (event: MotionEvent) => void + onHoverStart?: (event: CustomPointerEvent) => void + onHoverEnd?: (event: CustomPointerEvent) => void + onPressStart?: (event: CustomPointerEvent) => void + onPressEnd?: (event: CustomPointerEvent) => void + onViewEnter?: (event: ViewEvent) => void + onViewLeave?: (event: ViewEvent) => void +} + +export type MotionComponentProps = ParentProps export type MotionComponent = { // @@ -51,13 +81,5 @@ export type MotionProxy = MotionComponent & { [K in keyof JSX.IntrinsicElements]: MotionProxyComponent } -declare module "solid-js" { - namespace JSX { - interface Directives { - motion: motionone.Options - } - } -} - // export only here so the `JSX` import won't be shaken off the tree: export type E = JSX.Element diff --git a/stories/Animate.stories.tsx b/stories/Animate.stories.tsx new file mode 100644 index 0000000..fa2b35d --- /dev/null +++ b/stories/Animate.stories.tsx @@ -0,0 +1,73 @@ +import type {Meta, StoryObj} from "storybook-solidjs-vite" +import {createSignal} from "solid-js" +import {Motion} from "../src/index.jsx" + +const meta = { + title: "Motion/Animate", +} satisfies Meta + +export default meta +type Story = StoryObj + +const box = { + width: "80px", + height: "80px", + "border-radius": "8px", + background: "royalblue", +} as const + +/** `initial` -> `animate`: the element animates from its initial style to the animate target on mount. */ +export const BasicEnter: Story = { + render: () => ( + + ), +} + +/** `initial={false}`: the enter animation is skipped — `animate` values apply immediately, no transition. */ +export const InitialFalse: Story = { + render: () => , +} + +/** When `initial` and `animate` resolve to the same target, no animation runs and `onMotionComplete` never fires. */ +export const NoOpWhenEqual: Story = { + render: () => { + const target = {opacity: 0.6} + let fired = false + return ( +
+ (fired = true)} + /> +

+ If this library is working correctly, no animation ever starts here (no + onMotionComplete), since initial already equals animate. +

+
+ ) + }, +} + +/** Changing a signal fed into `animate` reactively re-triggers the animation to the new target. */ +export const ReactiveAnimateChange: Story = { + render: () => { + const [color, setColor] = createSignal("crimson") + return ( +
+ setColor(c => (c === "crimson" ? "royalblue" : "crimson"))} + > + Toggle color + + +
+ ) + }, +} diff --git a/stories/Gestures.stories.tsx b/stories/Gestures.stories.tsx new file mode 100644 index 0000000..234846e --- /dev/null +++ b/stories/Gestures.stories.tsx @@ -0,0 +1,84 @@ +import type {Meta, StoryObj} from "storybook-solidjs-vite" +import {createSignal} from "solid-js" +import {Motion} from "../src/index.jsx" + +const meta = { + title: "Motion/Gestures", +} satisfies Meta + +export default meta +type Story = StoryObj + +const box = { + width: "80px", + height: "80px", + "border-radius": "8px", + background: "royalblue", +} as const + +/** `hover` — hovering the box animates it to the hover target; leaving animates back. */ +export const Hover: Story = { + render: () => { + const [status, setStatus] = createSignal("idle") + return ( +
+

hover: {status()}

+ setStatus("active")} + onHoverEnd={() => setStatus("idle")} + /> +
+ ) + }, +} + +/** `press` — pressing and releasing animates to/from the press target. */ +export const Press: Story = { + render: () => { + const [status, setStatus] = createSignal("idle") + return ( +
+

press: {status()}

+ setStatus("active")} + onPressEnd={() => setStatus("idle")} + /> +
+ ) + }, +} + +/** + * `hover` + `press` together: computeEffectiveTarget layers press on top of hover + * (`Object.assign` order), so pressing while already hovering should show the + * press target win over the hover one for any overlapping keys. + */ +export const HoverAndPressComposition: Story = { + render: () => { + const [hoverStatus, setHoverStatus] = createSignal("idle") + const [pressStatus, setPressStatus] = createSignal("idle") + return ( +
+

hover: {hoverStatus()}

+

press: {pressStatus()}

+

Hover first (scales to 1.15, turns orange), then press while hovering (should scale to 0.85, turn crimson).

+ setHoverStatus("active")} + onHoverEnd={() => setHoverStatus("idle")} + onPressStart={() => setPressStatus("active")} + onPressEnd={() => setPressStatus("idle")} + /> +
+ ) + }, +} diff --git a/stories/InView.stories.tsx b/stories/InView.stories.tsx new file mode 100644 index 0000000..569fb22 --- /dev/null +++ b/stories/InView.stories.tsx @@ -0,0 +1,67 @@ +import type {Meta, StoryObj} from "storybook-solidjs-vite" +import {createSignal} from "solid-js" +import {Motion} from "../src/index.jsx" + +const meta = { + title: "Motion/InView", +} satisfies Meta + +export default meta +type Story = StoryObj + +const box = { + width: "80px", + height: "80px", + "border-radius": "8px", + background: "seagreen", +} as const + +/** + * `inView` — scroll the box into the viewport to trigger its inView target; + * scroll it back out to reverse. This prop has no automated test coverage + * (relies on IntersectionObserver, which jsdom doesn't implement), so this + * story is the first real, browser-driven verification of it. + */ +export const ScrollTrigger: Story = { + render: () => { + const [status, setStatus] = createSignal("not yet") + return ( +
+

inView: {status()}

+

Scroll down to bring the box into view.

+
+ setStatus("entered")} + onViewLeave={() => setStatus("left")} + /> +
+
+ ) + }, +} + +/** `inViewOptions.amount` — requires more of the element to be visible before triggering. */ +export const AmountOption: Story = { + render: () => { + const [status, setStatus] = createSignal("not yet") + return ( +
+

inView (amount: 0.8): {status()}

+

Requires 80% of the box visible before triggering — scroll slowly.

+
+ setStatus("entered")} + onViewLeave={() => setStatus("left")} + /> +
+
+ ) + }, +} diff --git a/stories/Motion.stories.tsx b/stories/Motion.stories.tsx new file mode 100644 index 0000000..456ba43 --- /dev/null +++ b/stories/Motion.stories.tsx @@ -0,0 +1,86 @@ +import type {Meta, StoryObj} from "storybook-solidjs-vite" +import {Motion} from "../src/index.jsx" + +const meta = { + title: "Motion/Rendering", +} satisfies Meta + +export default meta +type Story = StoryObj + +/** `` renders a `div` by default. */ +export const DefaultTag: Story = { + render: () => ( + + ), +} + +/** `Motion.span`, `Motion.button`, `Motion.svg` etc. — the Proxy picks the tag from the property accessed. */ +export const ProxyTags: Story = { + render: () => ( +
+ + span + + button + + + +
+ ), +} + +/** `` — the same tag selection via an explicit prop instead of the proxy. */ +export const ExplicitTagProp: Story = { + render: () => ( +
    + + rendered as <li> + +
+ ), +} + +/** SVG attributes (`viewBox`, `width`, `x`, `y`) pass through alongside animated values. */ +export const SvgAttrs: Story = { + render: () => ( + + + + ), +} + +/** A user-supplied `style` (object or CSS string) is merged with Motion's computed style, not replaced by it. */ +export const StyleMerging: Story = { + render: () => ( +
+ + +
+ ), +} diff --git a/stories/Presence.stories.tsx b/stories/Presence.stories.tsx new file mode 100644 index 0000000..99b4cae --- /dev/null +++ b/stories/Presence.stories.tsx @@ -0,0 +1,212 @@ +import type {Meta, StoryObj} from "storybook-solidjs-vite" +import {expect, userEvent, waitFor, within} from "storybook/test" +import {createSignal, Show} from "solid-js" +import {Motion, Presence} from "../src/index.jsx" + +const meta = { + title: "Motion/Presence", +} satisfies Meta + +export default meta +type Story = StoryObj + +const box = { + width: "80px", + height: "80px", + "border-radius": "8px", +} as const + +/** + * Basic enter/exit: removing the element from a `` inside `` + * animates it out via `exit` before it actually leaves the DOM (rather than + * disappearing instantly). The play function drives the toggle and proves + * the element is still present mid-exit, then gone once the animation ends — + * then toggles back on so the story doesn't land on an empty canvas. + */ +export const BasicEnterExit: Story = { + render: () => { + const [show, setShow] = createSignal(true) + return ( +
+ + + + + + +
+ ) + }, + play: async ({canvasElement}) => { + const canvas = within(canvasElement) + await waitFor(() => expect(canvas.getByTestId("box")).toBeInTheDocument()) + + await userEvent.click(canvas.getByTestId("toggle")) + // still present immediately after toggling off — exit animation hasn't finished + expect(canvas.getByTestId("box")).toBeInTheDocument() + // gone once the exit animation completes and Presence removes it + await waitFor(() => expect(canvas.queryByTestId("box")).not.toBeInTheDocument(), { + timeout: 3000, + }) + + await userEvent.click(canvas.getByTestId("toggle")) + await waitFor(() => expect(canvas.getByTestId("box")).toBeInTheDocument()) + }, +} + +/** + * `` suppresses the *first* enter animation for + * every child — the `animate` target applies immediately instead. + */ +export const PresenceInitialFalse: Story = { + render: () => ( + + + + ), + play: async ({canvasElement}) => { + const canvas = within(canvasElement) + const el = canvas.getByTestId("box") as HTMLElement + // applied immediately (no 2s transition ever ran) — opacity is already 1 + await waitFor(() => expect(getComputedStyle(el).opacity).toBe("1")) + }, +} + +/** + * `exitBeforeEnter` (mode "out-in"): the incoming element's enter animation + * waits for the outgoing element's exit to finish, instead of running in + * parallel. This exercises the exact multi-cycle swap that used to hang in + * jsdom (fixed by scoping mount-cycle cleanup in engine.ts) — this story is + * its permanent, real-browser regression check. + */ +export const ExitBeforeEnter: Story = { + render: () => { + const [condition, setCondition] = createSignal(true) + const El = (props: {label: string; color: string}) => ( + + ) + return ( +
+ + + } + fallback={} + /> + +
+ ) + }, + play: async ({canvasElement}) => { + const canvas = within(canvasElement) + await waitFor(() => expect(canvas.getByTestId("box-a")).toBeInTheDocument()) + + await userEvent.click(canvas.getByTestId("toggle")) + // box-a exits first; box-b must not appear until box-a is fully gone + await waitFor(() => expect(canvas.queryByTestId("box-a")).not.toBeInTheDocument(), { + timeout: 2000, + }) + await waitFor(() => expect(canvas.getByTestId("box-b")).toBeInTheDocument()) + + await userEvent.click(canvas.getByTestId("toggle")) + await waitFor(() => expect(canvas.queryByTestId("box-b")).not.toBeInTheDocument(), { + timeout: 2000, + }) + await waitFor(() => expect(canvas.getByTestId("box-a")).toBeInTheDocument()) + }, +} + +/** + * Multiple nested descendants each have their own `exit` — every one must + * finish its own exit animation before the whole subtree is removed. + */ +export const NestedExit: Story = { + render: () => { + const [show, setShow] = createSignal(true) + const exit = {opacity: 0, transition: {duration: 0.5}} + return ( +
+ + + + + + + + +
+ ) + }, + // round-trips back to the visible state so the story doesn't land on an + // empty canvas after the automated demonstration finishes — a 0.001s + // duration (fast enough for jsdom-based unit tests) also finishes far too + // quickly to actually see, so this uses a human-visible 0.5s instead. + play: async ({canvasElement}) => { + const canvas = within(canvasElement) + await waitFor(() => expect(canvas.getByTestId("parent")).toBeInTheDocument()) + + await userEvent.click(canvas.getByTestId("toggle")) + await waitFor(() => expect(canvas.queryByTestId("parent")).not.toBeInTheDocument(), { + timeout: 2000, + }) + + await userEvent.click(canvas.getByTestId("toggle")) + await waitFor(() => expect(canvas.getByTestId("parent")).toBeInTheDocument()) + }, +} + +/** `exit` can carry its own `transition`, overriding the component's base transition just for the exit phase. */ +export const ExitTransitionOverride: Story = { + render: () => { + const [show, setShow] = createSignal(true) + return ( +
+ + + + + + +
+ ) + }, +} diff --git a/stories/Primitives.stories.tsx b/stories/Primitives.stories.tsx new file mode 100644 index 0000000..ba5f647 --- /dev/null +++ b/stories/Primitives.stories.tsx @@ -0,0 +1,89 @@ +import type {Meta, StoryObj} from "storybook-solidjs-vite" +import {createSignal} from "solid-js" +import {motion, useScroll} from "../src/index.jsx" + +const meta = { + title: "Motion/Primitives", +} satisfies Meta + +export default meta +type Story = StoryObj + +/** + * The `motion` ref factory is the non-component API: bind animation + * behavior directly to a plain element's `ref`, without going through + * ``. Useful for animating an element you don't otherwise control + * (e.g. one rendered by another library). + */ +export const RefFactory: Story = { + render: () => ( +
({ + initial: {opacity: 0, y: -20}, + animate: {opacity: 1, y: 0}, + transition: {duration: 0.6}, + }))} + style={{ + width: "80px", + height: "80px", + "border-radius": "8px", + background: "royalblue", + }} + /> + ), +} + +/** The ref factory's options accessor is reactive, same as a `` component's props. */ +export const ReactiveRefFactory: Story = { + render: () => { + const [opacity, setOpacity] = createSignal(0.3) + return ( +
+ +
({ + initial: {opacity: 0}, + animate: {opacity: opacity()}, + transition: {duration: 0.4}, + }))} + style={{ + width: "80px", + height: "80px", + "border-radius": "8px", + background: "seagreen", + }} + /> +
+ ) + }, +} + +/** + * `useScroll` exposes reactive page-scroll progress (0–1) for driving + * scroll-linked animations — scroll the story's canvas to see the bar fill. + */ +export const ScrollProgress: Story = { + render: () => { + const {scrollY} = useScroll() + return ( +
+
+
Scroll down to progress the bar above.
+
+ ) + }, +} diff --git a/stories/Transition.stories.tsx b/stories/Transition.stories.tsx new file mode 100644 index 0000000..73800fc --- /dev/null +++ b/stories/Transition.stories.tsx @@ -0,0 +1,74 @@ +import type {Meta, StoryObj} from "storybook-solidjs-vite" +import {Motion} from "../src/index.jsx" + +const meta = { + title: "Motion/Transition", +} satisfies Meta + +export default meta +type Story = StoryObj + +const box = { + width: "80px", + height: "80px", + "border-radius": "8px", + background: "royalblue", +} as const + +/** Global `transition`: `duration` plus `easing` (Motion One's naming — translated internally to modern Motion's `ease`). */ +export const GlobalTransition: Story = { + render: () => ( + + ), +} + +/** Per-property transition override: `rotate` runs on its own, slower schedule than the other properties. */ +export const PerPropertyOverride: Story = { + render: () => ( + + ), +} + +/** Per-target transition override: the target object's own `transition` wins over the component-level one. */ +export const PerTargetOverride: Story = { + render: () => ( + + ), +} + +/** Keyframe arrays: `x` steps through every value in the array, evenly spaced across `duration`. */ +export const KeyframeArray: Story = { + render: () => ( + + ), +} + +/** Keyframes with a custom `offset`: skews where in the timeline each step lands. */ +export const KeyframeOffset: Story = { + render: () => ( + + ), +} diff --git a/stories/Variants.stories.tsx b/stories/Variants.stories.tsx new file mode 100644 index 0000000..b3269c0 --- /dev/null +++ b/stories/Variants.stories.tsx @@ -0,0 +1,79 @@ +import type {Meta, StoryObj} from "storybook-solidjs-vite" +import {Motion} from "../src/index.jsx" + +const meta = { + title: "Motion/Variants", +} satisfies Meta + +export default meta +type Story = StoryObj + +/** String `variants`: `initial`/`animate` reference a key that's looked up in the `variants` map. */ +export const StringVariants: Story = { + render: () => ( + + ), +} + +/** + * Nested variant-key *inheritance*: only the root sets `initial="hidden"`. + * Each descendant has no `initial` of its own, so it inherits the *key* + * "hidden" from its closest ancestor and resolves it against its *own* + * `variants` map — matching ssr.test.tsx's "Children render inherited + * initial" case, extended here with an explicit `animate="visible"` per + * level (inheritance only applies to `initial`, not `animate`) so the + * whole tree visibly animates in. + */ +export const NestedInheritance: Story = { + render: () => ( + + + + Each level inherits the "hidden" key, resolved against its own variants. + + + + ), +} + +/** An empty `variants={{}}` map combined with `hover`/`press` — no crash, base (unstyled) render. */ +export const EmptyVariants: Story = { + render: () => ( + + ), +} diff --git a/stories/tsconfig.json b/stories/tsconfig.json new file mode 100644 index 0000000..943cb4d --- /dev/null +++ b/stories/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../tsconfig.base.json", + "compilerOptions": { + "lib": ["ESNext", "DOM"], + "jsx": "preserve", + "jsxImportSource": "@solidjs/web" + } +} diff --git a/test/motion.test.tsx b/test/motion.test.tsx index 3376705..8bfc553 100644 --- a/test/motion.test.tsx +++ b/test/motion.test.tsx @@ -1,4 +1,5 @@ -import {JSX, createRoot, createSignal} from "solid-js" +import {createRoot, createSignal} from "solid-js" +import type {JSX} from "@solidjs/web" import {screen, render, fireEvent} from "@solidjs/testing-library" import {Motion} from "../src/index.jsx" @@ -35,8 +36,7 @@ describe("Motion", () => { await render(() => ) const component = await screen.findByTestId("box") expect(component.style.opacity).toBe("0.5") - expect(component.style.getPropertyValue("--motion-translateX")).toBe("100px") - expect(component.style.transform).toBe("translateX(var(--motion-translateX))") + expect(component.style.transform).toBe("translateX(100px)") }) test("Animation runs on mount if initial and animate differ", async () => { diff --git a/test/presence.test.tsx b/test/presence.test.tsx index f03dfba..b93b079 100644 --- a/test/presence.test.tsx +++ b/test/presence.test.tsx @@ -1,5 +1,6 @@ -import {mountedStates} from "@motionone/dom" -import {children, createRoot, createSignal, JSX, Show} from "solid-js" +import {mountedStates} from "../src/engine.js" +import {createRoot, createSignal, flush, Show} from "solid-js" +import type {JSX} from "@solidjs/web" import {screen, render} from "@solidjs/testing-library" import {Presence, Motion, VariantDefinition} from "../src/index.jsx" import type {RefProps} from "@solid-primitives/refs" @@ -32,6 +33,7 @@ describe("Presence", () => { const wrapper = render(() => ( )) + flush() expect(wrapper.container.outerHTML).toEqual( `
`, ) @@ -72,27 +74,21 @@ describe("Presence", () => { transition: {duration: 0.001}, } - const rendered = createRoot(() => - children(() => ( - - + const {container} = render(() => ( + + + resolve_1()}> resolve_1()} - > - resolve_2()} - /> - - - - )), - ) + onMotionComplete={() => resolve_2()} + /> + + + + )) - expect(rendered()).toContain(ref_1) + expect(container.contains(ref_1)).toBeTruthy() expect(ref_1.firstChild).toBe(ref_2) expect(ref_1.style.opacity).toBe("") expect(ref_2.style.opacity).toBe("") @@ -100,8 +96,9 @@ describe("Presence", () => { expect(mountedStates.has(ref_2)).toBeTruthy() setShow(false) + flush() - expect(rendered()).toContain(ref_1) + expect(container.contains(ref_1)).toBeTruthy() expect(ref_1.style.opacity).toBe("") expect(ref_2.style.opacity).toBe("") @@ -112,7 +109,7 @@ describe("Presence", () => { } }) - expect(rendered()).toHaveLength(0) + expect(container.contains(ref_1)).toBeFalsy() expect(ref_1.style.opacity).toBe("0") expect(ref_2.style.opacity).toBe("0") expect(mountedStates.has(ref_1)).toBeFalsy() @@ -136,47 +133,42 @@ describe("Presence", () => { /> ) - const rendered = createRoot(() => - children(() => ( - - } - fallback={} - /> - - )), - ) + const {container} = render(() => ( + + } fallback={} /> + + )) - expect(rendered()).toContain(ref_1) + expect(container.contains(ref_1)).toBeTruthy() expect(ref_1.style.opacity).toBe("0") // enter 1 await new Promise(resolve => (resolve_last = resolve)) - expect(rendered()).toContain(ref_1) + expect(container.contains(ref_1)).toBeTruthy() expect(ref_1.style.opacity).toBe("1") setCondition(false) + flush() - expect(rendered()).toContain(ref_1) - expect(rendered()).not.toContain(ref_2) + expect(container.contains(ref_1)).toBeTruthy() + expect(container.contains(ref_2)).toBeFalsy() expect(ref_1.style.opacity).toBe("1") expect(ref_2.style.opacity).toBe("0") // exit 1 await new Promise(resolve => (resolve_last = resolve)) - expect(rendered()).toContain(ref_2) - expect(rendered()).not.toContain(ref_1) + expect(container.contains(ref_2)).toBeTruthy() + expect(container.contains(ref_1)).toBeFalsy() expect(ref_1.style.opacity).toBe("0") expect(ref_2.style.opacity).toBe("0") // enter 2 await new Promise(resolve => (resolve_last = resolve)) - expect(rendered()).toContain(ref_2) - expect(rendered()).not.toContain(ref_1) + expect(container.contains(ref_2)).toBeTruthy() + expect(container.contains(ref_1)).toBeFalsy() expect(ref_1.style.opacity).toBe("0") expect(ref_2.style.opacity).toBe("1") }) diff --git a/test/primitives.test.tsx b/test/primitives.test.tsx index 7960094..c4065f3 100644 --- a/test/primitives.test.tsx +++ b/test/primitives.test.tsx @@ -1,40 +1,39 @@ -import {createRoot, createSignal, JSX, Show} from "solid-js" +import {createRoot, createSignal, Show} from "solid-js" +import type {JSX} from "@solidjs/web" import {screen, render} from "@solidjs/testing-library" import {Presence, VariantDefinition, motion} from "../src/index.jsx" -// eslint-disable-next-line @typescript-eslint/no-unused-expressions -motion - const duration = 0.001 const sleep = (ms: number): Promise => new Promise(resolve => setTimeout(resolve, ms)) -describe("motion directive", () => { +describe("motion ref factory", () => { test("Applies initial as style to DOM node", async () => { await render(() => (
({ initial: {opacity: 0.5, x: 100}, - }} + }))} /> )) const component = await screen.findByTestId("box") expect(component.style.opacity).toBe("0.5") - expect(component.style.getPropertyValue("--motion-translateX")).toBe("100px") - expect(component.style.transform).toBe("translateX(var(--motion-translateX))") + expect(component.style.transform).toBe("translateX(100px)") }) test("Animation runs on mount if initial and animate differ", async () => { let ref!: HTMLDivElement render(() => (
(ref = el as HTMLDivElement), + motion(() => ({ + initial: {opacity: 0.4}, + animate: {opacity: [0, 0.8]}, + transition: {duration}, + })), + ]} /> )) await new Promise(resolve => setTimeout(() => resolve(), 60)) @@ -46,11 +45,11 @@ describe("motion directive", () => { const element = createRoot(() => (
({ initial: {opacity: 0}, animate: {opacity: opacity()}, transition: {duration}, - }} + }))} /> )) as HTMLDivElement @@ -74,12 +73,14 @@ describe("motion directive", () => { let ref!: HTMLDivElement render(() => (
(ref = el as HTMLDivElement), + motion(() => ({ + initial: {opacity: 0.5}, + animate: {opacity: 0.9}, + transition: {duration: 10}, + })), + ]} /> )) setTimeout(() => resolve(ref), 500) @@ -101,10 +102,10 @@ describe("motion directive", () => {
({ animate: props.animate, exit: props.exit, - }} + }))} /> diff --git a/test/setup.js b/test/setup.js new file mode 100644 index 0000000..697f4c5 --- /dev/null +++ b/test/setup.js @@ -0,0 +1,16 @@ +/* +jsdom doesn't implement IntersectionObserver. This is a minimal stub so +`inView()` (used for the `inView` prop) can construct and register without +crashing; it never actually fires, so entry-triggering behavior isn't +covered by these tests. +*/ +if (typeof globalThis.IntersectionObserver === "undefined") { + globalThis.IntersectionObserver = class IntersectionObserver { + observe() {} + unobserve() {} + disconnect() {} + takeRecords() { + return [] + } + } +} diff --git a/test/ssr.test.tsx b/test/ssr.test.tsx index 5d51173..60aeae2 100644 --- a/test/ssr.test.tsx +++ b/test/ssr.test.tsx @@ -1,27 +1,25 @@ -import {renderToString} from "solid-js/web" +import {renderToString} from "@solidjs/web" import {Motion, Presence} from "../src/index.jsx" -jest.mock("solid-js/web", () => ({ - ...jest.requireActual("solid-js/web"), +jest.mock("@solidjs/web", () => ({ + ...jest.requireActual("@solidjs/web"), template: jest.fn(), })) describe("ssr", () => { test("Renders", () => { const html = renderToString(() => ) - expect(html).toBe('
') + expect(html).toBe('
') }) test("Renders style", () => { const html = renderToString(() => ) - expect(html).toBe(`
`) + expect(html).toBe(`
`) }) test("Renders initial as style", () => { const html = renderToString(() => ) - expect(html).toBe( - `
`, - ) + expect(html).toBe(`
`) }) test("Renders initial and style", () => { @@ -29,14 +27,14 @@ describe("ssr", () => { )) expect(html1).toBe( - `
`, + `
`, ) const html2 = renderToString(() => ( )) expect(html2).toBe( - `
`, + `
`, ) }) @@ -45,7 +43,7 @@ describe("ssr", () => { )) expect(html).toBe( - ``, + ``, ) }) @@ -61,13 +59,13 @@ describe("ssr", () => {
)) expect(html).toBe( - `
`, + `
`, ) }) test("Renders expected markup from style as keyframes", () => { const div = renderToString(() => ) - expect(div).toBe(`
`) + expect(div).toBe(`
`) }) test("Renders expected CSS variables", () => { @@ -77,21 +75,19 @@ describe("ssr", () => { style={{"--bar": 1, "--car": 3} as any} /> )) - expect(div).toBe(`
`) + expect(div).toBe(`
`) }) test("Renders expected transform", () => { const div = renderToString(() => ) - expect(div).toBe( - `
`, - ) + expect(div).toBe(`
`) }) test("Filters out all props", () => { const div = renderToString(() => ( )) - expect(div).toBe('
') + expect(div).toBe('
') }) test("Renders Presence", () => { @@ -100,7 +96,7 @@ describe("ssr", () => { )) - expect(html).toBe('
') + expect(html).toBe('
') }) test("Renders Presence with initial styles", () => { @@ -109,7 +105,7 @@ describe("ssr", () => { )) - expect(html).toBe('
') + expect(html).toBe('
') }) test("Renders Presence without initial styles", () => { @@ -118,6 +114,6 @@ describe("ssr", () => { )) - expect(html).toBe('
') + expect(html).toBe('
') }) }) diff --git a/test/tsconfig.json b/test/tsconfig.json index f2b6952..2ebe989 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -3,7 +3,7 @@ "compilerOptions": { "lib": ["ESNext", "DOM"], "jsx": "preserve", - "jsxImportSource": "solid-js", + "jsxImportSource": "@solidjs/web", "types": ["jest"] } } diff --git a/test/waapi-polyfill.js b/test/waapi-polyfill.js deleted file mode 100644 index ed83202..0000000 --- a/test/waapi-polyfill.js +++ /dev/null @@ -1,2877 +0,0 @@ -// Copyright 2014 Google Inc. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/** - * This is an edited version of the WAAPI polyfill - * that adds support for value and offset arrays. - */ - -/* eslint-disable */ - -!(function () { - var a = {}, - b = {} - !(function (a, b) { - function c(a) { - if ("number" == typeof a) return a - var b = {} - for (var c in a) b[c] = a[c] - return b - } - function d() { - ;(this._delay = 0), - (this._endDelay = 0), - (this._fill = "none"), - (this._iterationStart = 0), - (this._iterations = 1), - (this._duration = 0), - (this._playbackRate = 1), - (this._direction = "normal"), - (this._easing = "linear"), - (this._easingFunction = x) - } - function e() { - return a.isDeprecated( - "Invalid timing inputs", - "2016-03-02", - "TypeError exceptions will be thrown instead.", - !0, - ) - } - function f(b, c, e) { - var f = new d() - return ( - c && ((f.fill = "both"), (f.duration = "auto")), - "number" != typeof b || isNaN(b) - ? void 0 !== b && - Object.getOwnPropertyNames(b).forEach(function (c) { - if ("auto" != b[c]) { - if ( - ("number" == typeof f[c] || "duration" == c) && - ("number" != typeof b[c] || isNaN(b[c])) - ) - return - if ("fill" == c && -1 == v.indexOf(b[c])) return - if ("direction" == c && -1 == w.indexOf(b[c])) return - if ( - "playbackRate" == c && - 1 !== b[c] && - a.isDeprecated( - "AnimationEffectTiming.playbackRate", - "2014-11-28", - "Use Animation.playbackRate instead.", - ) - ) - return - f[c] = b[c] - } - }) - : (f.duration = b), - f - ) - } - function g(a) { - return "number" == typeof a && (a = isNaN(a) ? {duration: 0} : {duration: a}), a - } - function h(b, c) { - return (b = a.numericTimingToObject(b)), f(b, c) - } - function i(a, b, c, d) { - return a < 0 || a > 1 || c < 0 || c > 1 - ? x - : function (e) { - function f(a, b, c) { - return ( - 3 * a * (1 - c) * (1 - c) * c + 3 * b * (1 - c) * c * c + c * c * c - ) - } - if (e <= 0) { - var g = 0 - return a > 0 ? (g = b / a) : !b && c > 0 && (g = d / c), g * e - } - if (e >= 1) { - var h = 0 - return ( - c < 1 - ? (h = (d - 1) / (c - 1)) - : 1 == c && a < 1 && (h = (b - 1) / (a - 1)), - 1 + h * (e - 1) - ) - } - for (var i = 0, j = 1; i < j; ) { - var k = (i + j) / 2, - l = f(a, c, k) - if (Math.abs(e - l) < 1e-5) return f(b, d, k) - l < e ? (i = k) : (j = k) - } - return f(b, d, k) - } - } - function j(a, b) { - return function (c) { - if (c >= 1) return 1 - var d = 1 / a - return (c += b * d) - (c % d) - } - } - function k(a) { - C || (C = document.createElement("div").style), - (C.animationTimingFunction = ""), - (C.animationTimingFunction = a) - var b = C.animationTimingFunction - if ("" == b && e()) throw new TypeError(a + " is not a valid value for easing") - return b - } - function l(a) { - if ("linear" == a) return x - var b = E.exec(a) - if (b) return i.apply(this, b.slice(1).map(Number)) - var c = F.exec(a) - if (c) return j(Number(c[1]), A) - var d = G.exec(a) - return d ? j(Number(d[1]), {start: y, middle: z, end: A}[d[2]]) : B[a] || x - } - function m(a) { - return Math.abs(n(a) / a.playbackRate) - } - function n(a) { - return 0 === a.duration || 0 === a.iterations ? 0 : a.duration * a.iterations - } - function o(a, b, c) { - if (null == b) return H - var d = c.delay + a + c.endDelay - return b < Math.min(c.delay, d) ? I : b >= Math.min(c.delay + a, d) ? J : K - } - function p(a, b, c, d, e) { - switch (d) { - case I: - return "backwards" == b || "both" == b ? 0 : null - case K: - return c - e - case J: - return "forwards" == b || "both" == b ? a : null - case H: - return null - } - } - function q(a, b, c, d, e) { - var f = e - return 0 === a ? b !== I && (f += c) : (f += d / a), f - } - function r(a, b, c, d, e, f) { - var g = a === 1 / 0 ? b % 1 : a % 1 - return 0 !== g || c !== J || 0 === d || (0 === e && 0 !== f) || (g = 1), g - } - function s(a, b, c, d) { - return a === J && b === 1 / 0 ? 1 / 0 : 1 === c ? Math.floor(d) - 1 : Math.floor(d) - } - function t(a, b, c) { - var d = a - if ("normal" !== a && "reverse" !== a) { - var e = b - "alternate-reverse" === a && (e += 1), - (d = "normal"), - e !== 1 / 0 && e % 2 != 0 && (d = "reverse") - } - return "normal" === d ? c : 1 - c - } - function u(a, b, c) { - var d = o(a, b, c), - e = p(a, c.fill, b, d, c.delay) - if (null === e) return null - var f = q(c.duration, d, c.iterations, e, c.iterationStart), - g = r(f, c.iterationStart, d, c.iterations, e, c.duration), - h = s(d, c.iterations, g, f), - i = t(c.direction, h, g) - return c._easingFunction(i) - } - var v = "backwards|forwards|both|none".split("|"), - w = "reverse|alternate|alternate-reverse".split("|"), - x = function (a) { - return a - } - d.prototype = { - _setMember: function (b, c) { - ;(this["_" + b] = c), - this._effect && - ((this._effect._timingInput[b] = c), - (this._effect._timing = a.normalizeTimingInput(this._effect._timingInput)), - (this._effect.activeDuration = a.calculateActiveDuration( - this._effect._timing, - )), - this._effect._animation && - this._effect._animation._rebuildUnderlyingAnimation()) - }, - get playbackRate() { - return this._playbackRate - }, - set delay(a) { - this._setMember("delay", a) - }, - get delay() { - return this._delay - }, - set endDelay(a) { - this._setMember("endDelay", a) - }, - get endDelay() { - return this._endDelay - }, - set fill(a) { - this._setMember("fill", a) - }, - get fill() { - return this._fill - }, - set iterationStart(a) { - if ((isNaN(a) || a < 0) && e()) - throw new TypeError( - "iterationStart must be a non-negative number, received: " + a, - ) - this._setMember("iterationStart", a) - }, - get iterationStart() { - return this._iterationStart - }, - set duration(a) { - if ("auto" != a && (isNaN(a) || a < 0) && e()) - throw new TypeError("duration must be non-negative or auto, received: " + a) - this._setMember("duration", a) - }, - get duration() { - return this._duration - }, - set direction(a) { - this._setMember("direction", a) - }, - get direction() { - return this._direction - }, - set easing(a) { - ;(this._easingFunction = l(k(a))), this._setMember("easing", a) - }, - get easing() { - return this._easing - }, - set iterations(a) { - if ((isNaN(a) || a < 0) && e()) - throw new TypeError("iterations must be non-negative, received: " + a) - this._setMember("iterations", a) - }, - get iterations() { - return this._iterations - }, - } - var y = 1, - z = 0.5, - A = 0, - B = { - ease: i(0.25, 0.1, 0.25, 1), - "ease-in": i(0.42, 0, 1, 1), - "ease-out": i(0, 0, 0.58, 1), - "ease-in-out": i(0.42, 0, 0.58, 1), - "step-start": j(1, y), - "step-middle": j(1, z), - "step-end": j(1, A), - }, - C = null, - D = "\\s*(-?\\d+\\.?\\d*|-?\\.\\d+)\\s*", - E = new RegExp("cubic-bezier\\(" + D + "," + D + "," + D + "," + D + "\\)"), - F = /steps\(\s*(\d+)\s*\)/, - G = /steps\(\s*(\d+)\s*,\s*(start|middle|end)\s*\)/, - H = 0, - I = 1, - J = 2, - K = 3 - ;(a.cloneTimingInput = c), - (a.makeTiming = f), - (a.numericTimingToObject = g), - (a.normalizeTimingInput = h), - (a.calculateActiveDuration = m), - (a.calculateIterationProgress = u), - (a.calculatePhase = o), - (a.normalizeEasing = k), - (a.parseEasingFunction = l) - })(a), - (function (a, b) { - function c(a, b) { - return a in k ? k[a][b] || b : b - } - function d(a) { - return ( - "display" === a || - 0 === a.lastIndexOf("animation", 0) || - 0 === a.lastIndexOf("transition", 0) - ) - } - function e(a, b, e) { - if (!d(a)) { - var f = h[a] - if (f) { - i.style[a] = b - for (var g in f) { - var j = f[g], - k = i.style[j] - e[j] = c(j, k) - } - } else e[a] = c(a, b) - } - } - function f(a) { - var b = [] - for (var c in a) - if (!(c in ["easing", "offset", "composite"])) { - var d = a[c] - Array.isArray(d) || (d = [d]) - for (var e, f = d.length, g = 0; g < f; g++) - (e = {}), - (e.offset = "offset" in a ? a.offset : 1 == f ? 1 : g / (f - 1)), - "easing" in a && (e.easing = a.easing), - "composite" in a && (e.composite = a.composite), - (e[c] = d[g]), - b.push(e) - } - return ( - b.sort(function (a, b) { - return a.offset - b.offset - }), - b - ) - } - function g(b) { - function c() { - var a = d.length - null == d[a - 1].offset && (d[a - 1].offset = 1), - a > 1 && null == d[0].offset && (d[0].offset = 0) - for (var b = 0, c = d[0].offset, e = 1; e < a; e++) { - var f = d[e].offset - if (null != f) { - for (var g = 1; g < e - b; g++) - d[b + g].offset = c + ((f - c) * g) / (e - b) - ;(b = e), (c = f) - } - } - } - if (null == b) return [] - window.Symbol && - Symbol.iterator && - Array.prototype.from && - b[Symbol.iterator] && - (b = Array.from(b)), - Array.isArray(b) || (b = f(b)) - for ( - var d = b.map(function (b) { - var c = {} - for (var d in b) { - var f = b[d] - if ("offset" == d) { - if (null != f) { - if (((f = Number(f)), !isFinite(f))) - throw new TypeError("Keyframe offsets must be numbers.") - if (f < 0 || f > 1) - throw new TypeError( - "Keyframe offsets must be between 0 and 1.", - ) - } - } else if ("composite" == d) { - if ("add" == f || "accumulate" == f) - throw { - type: DOMException.NOT_SUPPORTED_ERR, - name: "NotSupportedError", - message: "add compositing is not supported", - } - if ("replace" != f) - throw new TypeError("Invalid composite mode " + f + ".") - } else f = "easing" == d ? a.normalizeEasing(f) : "" + f - e(d, f, c) - } - return ( - void 0 == c.offset && (c.offset = null), - void 0 == c.easing && (c.easing = "linear"), - c - ) - }), - g = !0, - h = -1 / 0, - i = 0; - i < d.length; - i++ - ) { - var j = d[i].offset - if (null != j) { - if (j < h) - throw new TypeError( - "Keyframes are not loosely sorted by offset. Sort or specify offsets.", - ) - h = j - } else g = !1 - } - return ( - (d = d.filter(function (a) { - return a.offset >= 0 && a.offset <= 1 - })), - g || c(), - d - ) - } - var h = { - background: [ - "backgroundImage", - "backgroundPosition", - "backgroundSize", - "backgroundRepeat", - "backgroundAttachment", - "backgroundOrigin", - "backgroundClip", - "backgroundColor", - ], - border: [ - "borderTopColor", - "borderTopStyle", - "borderTopWidth", - "borderRightColor", - "borderRightStyle", - "borderRightWidth", - "borderBottomColor", - "borderBottomStyle", - "borderBottomWidth", - "borderLeftColor", - "borderLeftStyle", - "borderLeftWidth", - ], - borderBottom: ["borderBottomWidth", "borderBottomStyle", "borderBottomColor"], - borderColor: [ - "borderTopColor", - "borderRightColor", - "borderBottomColor", - "borderLeftColor", - ], - borderLeft: ["borderLeftWidth", "borderLeftStyle", "borderLeftColor"], - borderRadius: [ - "borderTopLeftRadius", - "borderTopRightRadius", - "borderBottomRightRadius", - "borderBottomLeftRadius", - ], - borderRight: ["borderRightWidth", "borderRightStyle", "borderRightColor"], - borderTop: ["borderTopWidth", "borderTopStyle", "borderTopColor"], - borderWidth: [ - "borderTopWidth", - "borderRightWidth", - "borderBottomWidth", - "borderLeftWidth", - ], - flex: ["flexGrow", "flexShrink", "flexBasis"], - font: [ - "fontFamily", - "fontSize", - "fontStyle", - "fontVariant", - "fontWeight", - "lineHeight", - ], - margin: ["marginTop", "marginRight", "marginBottom", "marginLeft"], - outline: ["outlineColor", "outlineStyle", "outlineWidth"], - padding: ["paddingTop", "paddingRight", "paddingBottom", "paddingLeft"], - }, - i = document.createElementNS("http://www.w3.org/1999/xhtml", "div"), - j = {thin: "1px", medium: "3px", thick: "5px"}, - k = { - borderBottomWidth: j, - borderLeftWidth: j, - borderRightWidth: j, - borderTopWidth: j, - fontSize: { - "xx-small": "60%", - "x-small": "75%", - small: "89%", - medium: "100%", - large: "120%", - "x-large": "150%", - "xx-large": "200%", - }, - fontWeight: {normal: "400", bold: "700"}, - outlineWidth: j, - textShadow: {none: "0px 0px 0px transparent"}, - boxShadow: {none: "0px 0px 0px 0px transparent"}, - } - ;(a.convertToArrayForm = f), (a.normalizeKeyframes = g) - })(a), - (function (a) { - var b = {} - ;(a.isDeprecated = function (a, c, d, e) { - var f = e ? "are" : "is", - g = new Date(), - h = new Date(c) - return ( - h.setMonth(h.getMonth() + 3), - !( - g < h && - (a in b || - console.warn( - "Web Animations: " + - a + - " " + - f + - " deprecated and will stop working on " + - h.toDateString() + - ". " + - d, - ), - (b[a] = !0), - 1) - ) - ) - }), - (a.deprecated = function (b, c, d, e) { - var f = e ? "are" : "is" - if (a.isDeprecated(b, c, d, e)) - throw new Error(b + " " + f + " no longer supported. " + d) - }) - })(a), - (function () { - if (document.documentElement.animate) { - var c = document.documentElement.animate([], 0), - d = !0 - if ( - (c && - ((d = !1), - "play|currentTime|pause|reverse|playbackRate|cancel|finish|startTime|playState" - .split("|") - .forEach(function (a) { - void 0 === c[a] && (d = !0) - })), - !d) - ) - return - } - !(function (a, b, c) { - function d(a) { - for (var b = {}, c = 0; c < a.length; c++) - for (var d in a[c]) - if ("offset" != d && "easing" != d && "composite" != d) { - var e = { - offset: a[c].offset, - easing: a[c].easing, - value: a[c][d], - } - ;(b[d] = b[d] || []), b[d].push(e) - } - for (var f in b) { - var g = b[f] - - /** - * EDIT: - * First offset should be 0, last should be 1 - */ - - if (0 != g[0].offset || 1 != g[g.length - 1].offset) - throw { - type: DOMException.NOT_SUPPORTED_ERR, - name: "NotSupportedError", - message: "Partial keyframes are not supported", - } - } - return b - } - function e(c) { - var d = [] - for (var e in c) - for (var f = c[e], g = 0; g < f.length - 1; g++) { - var h = g, - i = g + 1, - j = f[h].offset, - k = f[i].offset, - l = j, - m = k - 0 == g && ((l = -1 / 0), 0 == k && (i = h)), - g == f.length - 2 && ((m = 1 / 0), 1 == j && (h = i)), - d.push({ - applyFrom: l, - applyTo: m, - startOffset: f[h].offset, - endOffset: f[i].offset, - easingFunction: a.parseEasingFunction(f[h].easing), - property: e, - interpolation: b.propertyInterpolation( - e, - f[h].value, - f[i].value, - ), - }) - } - return ( - d.sort(function (a, b) { - return a.startOffset - b.startOffset - }), - d - ) - } - b.convertEffectInput = function (c) { - var f = a.normalizeKeyframes(c), - g = d(f), - h = e(g) - return function (a, c) { - if (null != c) - h.filter(function (a) { - return c >= a.applyFrom && c < a.applyTo - }).forEach(function (d) { - var e = c - d.startOffset, - f = d.endOffset - d.startOffset, - g = 0 == f ? 0 : d.easingFunction(e / f) - b.apply(a, d.property, d.interpolation(g)) - }) - else - for (var d in g) - "offset" != d && "easing" != d && "composite" != d && b.clear(a, d) - } - } - })(a, b), - (function (a, b, c) { - function d(a) { - return a.replace(/-(.)/g, function (a, b) { - return b.toUpperCase() - }) - } - function e(a, b, c) { - ;(h[c] = h[c] || []), h[c].push([a, b]) - } - function f(a, b, c) { - for (var f = 0; f < c.length; f++) { - e(a, b, d(c[f])) - } - } - function g(c, e, f) { - var g = c - ;/-/.test(c) && - !a.isDeprecated( - "Hyphenated property names", - "2016-03-22", - "Use camelCase instead.", - !0, - ) && - (g = d(c)), - ("initial" != e && "initial" != f) || - ("initial" == e && (e = i[g]), "initial" == f && (f = i[g])) - for (var j = e == f ? [] : h[g], k = 0; j && k < j.length; k++) { - var l = j[k][0](e), - m = j[k][0](f) - if (void 0 !== l && void 0 !== m) { - var n = j[k][1](l, m) - if (n) { - var o = b.Interpolation.apply(null, n) - return function (a) { - return 0 == a ? e : 1 == a ? f : o(a) - } - } - } - } - return b.Interpolation(!1, !0, function (a) { - return a ? f : e - }) - } - var h = {} - b.addPropertiesHandler = f - var i = { - backgroundColor: "transparent", - backgroundPosition: "0% 0%", - borderBottomColor: "currentColor", - borderBottomLeftRadius: "0px", - borderBottomRightRadius: "0px", - borderBottomWidth: "3px", - borderLeftColor: "currentColor", - borderLeftWidth: "3px", - borderRightColor: "currentColor", - borderRightWidth: "3px", - borderSpacing: "2px", - borderTopColor: "currentColor", - borderTopLeftRadius: "0px", - borderTopRightRadius: "0px", - borderTopWidth: "3px", - bottom: "auto", - clip: "rect(0px, 0px, 0px, 0px)", - color: "black", - fontSize: "100%", - fontWeight: "400", - height: "auto", - left: "auto", - letterSpacing: "normal", - lineHeight: "120%", - marginBottom: "0px", - marginLeft: "0px", - marginRight: "0px", - marginTop: "0px", - maxHeight: "none", - maxWidth: "none", - minHeight: "0px", - minWidth: "0px", - opacity: "1.0", - outlineColor: "invert", - outlineOffset: "0px", - outlineWidth: "3px", - paddingBottom: "0px", - paddingLeft: "0px", - paddingRight: "0px", - paddingTop: "0px", - right: "auto", - strokeDasharray: "none", - strokeDashoffset: "0px", - textIndent: "0px", - textShadow: "0px 0px 0px transparent", - top: "auto", - transform: "", - verticalAlign: "0px", - visibility: "visible", - width: "auto", - wordSpacing: "normal", - zIndex: "auto", - } - b.propertyInterpolation = g - })(a, b), - (function (a, b, c) { - function d(b) { - var c = a.calculateActiveDuration(b), - d = function (d) { - return a.calculateIterationProgress(c, d, b) - } - return (d._totalDuration = b.delay + c + b.endDelay), d - } - b.KeyframeEffect = function (c, e, f, g) { - var h, - i = d(a.normalizeTimingInput(f)), - j = b.convertEffectInput(e), - k = function () { - j(c, h) - } - return ( - (k._update = function (a) { - return null !== (h = i(a)) - }), - (k._clear = function () { - j(c, null) - }), - (k._hasSameTarget = function (a) { - return c === a - }), - (k._target = c), - (k._totalDuration = i._totalDuration), - (k._id = g), - k - ) - } - })(a, b), - (function (a, b) { - function c(a, b) { - return ( - !(!b.namespaceURI || -1 == b.namespaceURI.indexOf("/svg")) && - (g in a || - (a[g] = /Trident|MSIE|IEMobile|Edge|Android 4/i.test( - a.navigator.userAgent, - )), - a[g]) - ) - } - function d(a, b, c) { - ;(c.enumerable = !0), (c.configurable = !0), Object.defineProperty(a, b, c) - } - function e(a) { - ;(this._element = a), - (this._surrogateStyle = document.createElementNS( - "http://www.w3.org/1999/xhtml", - "div", - ).style), - (this._style = a.style), - (this._length = 0), - (this._isAnimatedProperty = {}), - (this._updateSvgTransformAttr = c(window, a)), - (this._savedTransformAttr = null) - for (var b = 0; b < this._style.length; b++) { - var d = this._style[b] - this._surrogateStyle[d] = this._style[d] - } - this._updateIndices() - } - function f(a) { - if (!a._webAnimationsPatchedStyle) { - var b = new e(a) - try { - d(a, "style", { - get: function () { - return b - }, - }) - } catch (b) { - ;(a.style._set = function (b, c) { - a.style[b] = c - }), - (a.style._clear = function (b) { - a.style[b] = "" - }) - } - a._webAnimationsPatchedStyle = a.style - } - } - var g = "_webAnimationsUpdateSvgTransformAttr", - h = {cssText: 1, length: 1, parentRule: 1}, - i = { - getPropertyCSSValue: 1, - getPropertyPriority: 1, - getPropertyValue: 1, - item: 1, - removeProperty: 1, - setProperty: 1, - }, - j = {removeProperty: 1, setProperty: 1} - e.prototype = { - get cssText() { - return this._surrogateStyle.cssText - }, - set cssText(a) { - for (var b = {}, c = 0; c < this._surrogateStyle.length; c++) - b[this._surrogateStyle[c]] = !0 - ;(this._surrogateStyle.cssText = a), this._updateIndices() - for (var c = 0; c < this._surrogateStyle.length; c++) - b[this._surrogateStyle[c]] = !0 - for (var d in b) - this._isAnimatedProperty[d] || - this._style.setProperty( - d, - this._surrogateStyle.getPropertyValue(d), - ) - }, - get length() { - return this._surrogateStyle.length - }, - get parentRule() { - return this._style.parentRule - }, - _updateIndices: function () { - for (; this._length < this._surrogateStyle.length; ) - Object.defineProperty(this, this._length, { - configurable: !0, - enumerable: !1, - get: (function (a) { - return function () { - return this._surrogateStyle[a] - } - })(this._length), - }), - this._length++ - for (; this._length > this._surrogateStyle.length; ) - this._length--, - Object.defineProperty(this, this._length, { - configurable: !0, - enumerable: !1, - value: void 0, - }) - }, - _set: function (b, c) { - ;(this._style[b] = c), - (this._isAnimatedProperty[b] = !0), - this._updateSvgTransformAttr && - "transform" == a.unprefixedPropertyName(b) && - (null == this._savedTransformAttr && - (this._savedTransformAttr = - this._element.getAttribute("transform")), - this._element.setAttribute( - "transform", - a.transformToSvgMatrix(c), - )) - }, - _clear: function (b) { - ;(this._style[b] = this._surrogateStyle[b]), - this._updateSvgTransformAttr && - "transform" == a.unprefixedPropertyName(b) && - (this._savedTransformAttr - ? this._element.setAttribute( - "transform", - this._savedTransformAttr, - ) - : this._element.removeAttribute("transform"), - (this._savedTransformAttr = null)), - delete this._isAnimatedProperty[b] - }, - } - for (var k in i) - e.prototype[k] = (function (a, b) { - return function () { - var c = this._surrogateStyle[a].apply( - this._surrogateStyle, - arguments, - ) - return ( - b && - (this._isAnimatedProperty[arguments[0]] || - this._style[a].apply(this._style, arguments), - this._updateIndices()), - c - ) - } - })(k, k in j) - for (var l in document.documentElement.style) - l in h || - l in i || - (function (a) { - d(e.prototype, a, { - get: function () { - return this._surrogateStyle[a] - }, - set: function (b) { - if (a === "_length") return - this._surrogateStyle[a] = b - this._updateIndices() - - this._isAnimatedProperty[a] || (this._style[a] = b) - }, - }) - })(l) - ;(a.apply = function (b, c, d) { - f(b), b.style._set(a.propertyName(c), d) - }), - (a.clear = function (b, c) { - b._webAnimationsPatchedStyle && b.style._clear(a.propertyName(c)) - }) - })(b), - (function (a) { - window.Element.prototype.animate = function (b, c) { - /** - * EDIT: Polyfill doesn't support values as arrays - * or offset as arrays, so converting these here - */ - const keyframes = [] - for (const key in b) { - if (key === "easing" || key === "offset") continue - - const valueKeyframes = b[key] - for (let i = 0; i < valueKeyframes.length; i++) { - keyframes[i] = {...keyframes[i], [key]: valueKeyframes[i]} - if (b.easing && b.easing[i]) { - keyframes.easing = b.easing[i] - } - if (b.offset && b.offset[i]) { - keyframes.offset = b.offset[i] - } - } - } - - var d = "" - return ( - c && c.id && (d = c.id), - a.timeline._play(a.KeyframeEffect(this, keyframes, c, d)) - ) - } - })(b), - (function (a, b) { - function c(a, b, d) { - if ("number" == typeof a && "number" == typeof b) return a * (1 - d) + b * d - if ("boolean" == typeof a && "boolean" == typeof b) return d < 0.5 ? a : b - if (a.length == b.length) { - for (var e = [], f = 0; f < a.length; f++) e.push(c(a[f], b[f], d)) - return e - } - throw "Mismatched interpolation arguments " + a + ":" + b - } - a.Interpolation = function (a, b, d) { - return function (e) { - return d(c(a, b, e)) - } - } - })(b), - (function (a, b) { - function c(a, b, c) { - return Math.max(Math.min(a, c), b) - } - function d(b, d, e) { - var f = a.dot(b, d) - f = c(f, -1, 1) - var g = [] - if (1 === f) g = b - else - for ( - var h = Math.acos(f), - i = (1 * Math.sin(e * h)) / Math.sqrt(1 - f * f), - j = 0; - j < 4; - j++ - ) - g.push(b[j] * (Math.cos(e * h) - f * i) + d[j] * i) - return g - } - var e = (function () { - function a(a, b) { - for ( - var c = [ - [0, 0, 0, 0], - [0, 0, 0, 0], - [0, 0, 0, 0], - [0, 0, 0, 0], - ], - d = 0; - d < 4; - d++ - ) - for (var e = 0; e < 4; e++) - for (var f = 0; f < 4; f++) c[d][e] += b[d][f] * a[f][e] - return c - } - function b(a) { - return ( - 0 == a[0][2] && - 0 == a[0][3] && - 0 == a[1][2] && - 0 == a[1][3] && - 0 == a[2][0] && - 0 == a[2][1] && - 1 == a[2][2] && - 0 == a[2][3] && - 0 == a[3][2] && - 1 == a[3][3] - ) - } - function c(c, d, e, f, g) { - for ( - var h = [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1], - ], - i = 0; - i < 4; - i++ - ) - h[i][3] = g[i] - for (var i = 0; i < 3; i++) - for (var j = 0; j < 3; j++) h[3][i] += c[j] * h[j][i] - var k = f[0], - l = f[1], - m = f[2], - n = f[3], - o = [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1], - ] - ;(o[0][0] = 1 - 2 * (l * l + m * m)), - (o[0][1] = 2 * (k * l - m * n)), - (o[0][2] = 2 * (k * m + l * n)), - (o[1][0] = 2 * (k * l + m * n)), - (o[1][1] = 1 - 2 * (k * k + m * m)), - (o[1][2] = 2 * (l * m - k * n)), - (o[2][0] = 2 * (k * m - l * n)), - (o[2][1] = 2 * (l * m + k * n)), - (o[2][2] = 1 - 2 * (k * k + l * l)), - (h = a(h, o)) - var p = [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1], - ] - e[2] && ((p[2][1] = e[2]), (h = a(h, p))), - e[1] && ((p[2][1] = 0), (p[2][0] = e[0]), (h = a(h, p))), - e[0] && ((p[2][0] = 0), (p[1][0] = e[0]), (h = a(h, p))) - for (var i = 0; i < 3; i++) for (var j = 0; j < 3; j++) h[i][j] *= d[i] - return b(h) - ? [h[0][0], h[0][1], h[1][0], h[1][1], h[3][0], h[3][1]] - : h[0].concat(h[1], h[2], h[3]) - } - return c - })() - ;(a.composeMatrix = e), (a.quat = d) - })(b), - (function (a, b, c) { - a.sequenceNumber = 0 - var d = function (a, b, c) { - ;(this.target = a), - (this.currentTime = b), - (this.timelineTime = c), - (this.type = "finish"), - (this.bubbles = !1), - (this.cancelable = !1), - (this.currentTarget = a), - (this.defaultPrevented = !1), - (this.eventPhase = Event.AT_TARGET), - (this.timeStamp = Date.now()) - } - ;(b.Animation = function (b) { - ;(this.id = ""), - b && b._id && (this.id = b._id), - (this._sequenceNumber = a.sequenceNumber++), - (this._currentTime = 0), - (this._startTime = null), - (this._paused = !1), - (this._playbackRate = 1), - (this._inTimeline = !0), - (this._finishedFlag = !0), - (this.onfinish = null), - (this._finishHandlers = []), - (this._effect = b), - (this._inEffect = this._effect._update(0)), - (this._idle = !0), - (this._currentTimePending = !1) - }), - (b.Animation.prototype = { - _ensureAlive: function () { - this.playbackRate < 0 && 0 === this.currentTime - ? (this._inEffect = this._effect._update(-1)) - : (this._inEffect = this._effect._update(this.currentTime)), - this._inTimeline || - (!this._inEffect && this._finishedFlag) || - ((this._inTimeline = !0), b.timeline._animations.push(this)) - }, - _tickCurrentTime: function (a, b) { - a != this._currentTime && - ((this._currentTime = a), - this._isFinished && - !b && - (this._currentTime = - this._playbackRate > 0 ? this._totalDuration : 0), - this._ensureAlive()) - }, - get currentTime() { - return this._idle || this._currentTimePending - ? null - : this._currentTime - }, - set currentTime(a) { - ;(a = +a), - isNaN(a) || - (b.restart(), - this._paused || - null == this._startTime || - (this._startTime = - this._timeline.currentTime - - a / this._playbackRate), - (this._currentTimePending = !1), - this._currentTime != a && - (this._idle && ((this._idle = !1), (this._paused = !0)), - this._tickCurrentTime(a, !0), - b.applyDirtiedAnimation(this))) - }, - get startTime() { - return this._startTime - }, - set startTime(a) { - ;(a = +a), - isNaN(a) || - this._paused || - this._idle || - ((this._startTime = a), - this._tickCurrentTime( - (this._timeline.currentTime - this._startTime) * - this.playbackRate, - ), - b.applyDirtiedAnimation(this)) - }, - get playbackRate() { - return this._playbackRate - }, - set playbackRate(a) { - if (a != this._playbackRate) { - var c = this.currentTime - ;(this._playbackRate = a), - (this._startTime = null), - "paused" != this.playState && - "idle" != this.playState && - ((this._finishedFlag = !1), - (this._idle = !1), - this._ensureAlive(), - b.applyDirtiedAnimation(this)), - null != c && (this.currentTime = c) - } - }, - get _isFinished() { - return ( - !this._idle && - ((this._playbackRate > 0 && - this._currentTime >= this._totalDuration) || - (this._playbackRate < 0 && this._currentTime <= 0)) - ) - }, - get _totalDuration() { - return this._effect._totalDuration - }, - get playState() { - return this._idle - ? "idle" - : (null == this._startTime && - !this._paused && - 0 != this.playbackRate) || - this._currentTimePending - ? "pending" - : this._paused - ? "paused" - : this._isFinished - ? "finished" - : "running" - }, - _rewind: function () { - if (this._playbackRate >= 0) this._currentTime = 0 - else { - if (!(this._totalDuration < 1 / 0)) - throw new DOMException( - "Unable to rewind negative playback rate animation with infinite duration", - "InvalidStateError", - ) - this._currentTime = this._totalDuration - } - }, - play: function () { - ;(this._paused = !1), - (this._isFinished || this._idle) && - (this._rewind(), (this._startTime = null)), - (this._finishedFlag = !1), - (this._idle = !1), - this._ensureAlive(), - b.applyDirtiedAnimation(this) - }, - pause: function () { - this._isFinished || this._paused || this._idle - ? this._idle && (this._rewind(), (this._idle = !1)) - : (this._currentTimePending = !0), - (this._startTime = null), - (this._paused = !0) - }, - /** - * EDIT: Adding commitStyles - */ - commitStyles: function () {}, - finish: function () { - this._idle || - ((this.currentTime = - this._playbackRate > 0 ? this._totalDuration : 0), - (this._startTime = this._totalDuration - this.currentTime), - (this._currentTimePending = !1), - b.applyDirtiedAnimation(this)) - }, - cancel: function () { - this._inEffect && - ((this._inEffect = !1), - (this._idle = !0), - (this._paused = !1), - (this._finishedFlag = !0), - (this._currentTime = 0), - (this._startTime = null), - this._effect._update(null), - b.applyDirtiedAnimation(this)) - }, - reverse: function () { - ;(this.playbackRate *= -1), this.play() - }, - addEventListener: function (a, b) { - "function" == typeof b && - "finish" == a && - this._finishHandlers.push(b) - }, - removeEventListener: function (a, b) { - if ("finish" == a) { - var c = this._finishHandlers.indexOf(b) - c >= 0 && this._finishHandlers.splice(c, 1) - } - }, - _fireEvents: function (a) { - if (this._isFinished) { - if (!this._finishedFlag) { - var b = new d(this, this._currentTime, a), - c = this._finishHandlers.concat( - this.onfinish ? [this.onfinish] : [], - ) - setTimeout(function () { - c.forEach(function (a) { - a.call(b.target, b) - }) - }, 0), - (this._finishedFlag = !0) - } - } else this._finishedFlag = !1 - }, - _tick: function (a, b) { - this._idle || - this._paused || - (null == this._startTime - ? b && - (this.startTime = - a - this._currentTime / this.playbackRate) - : this._isFinished || - this._tickCurrentTime( - (a - this._startTime) * this.playbackRate, - )), - b && ((this._currentTimePending = !1), this._fireEvents(a)) - }, - get _needsTick() { - return ( - this.playState in {pending: 1, running: 1} || - !this._finishedFlag - ) - }, - _targetAnimations: function () { - var a = this._effect._target - return a._animations || (a._animations = []), a._animations - }, - _markTarget: function () { - var a = this._targetAnimations() - ;-1 === a.indexOf(this) && a.push(this) - }, - _unmarkTarget: function () { - var a = this._targetAnimations(), - b = a.indexOf(this) - ;-1 !== b && a.splice(b, 1) - }, - }) - })(a, b), - (function (a, b, c) { - function d(a) { - var b = j - ;(j = []), - a < q.currentTime && (a = q.currentTime), - q._animations.sort(e), - (q._animations = h(a, !0, q._animations)[0]), - b.forEach(function (b) { - b[1](a) - }), - g(), - (l = void 0) - } - function e(a, b) { - return a._sequenceNumber - b._sequenceNumber - } - function f() { - ;(this._animations = []), - (this.currentTime = - window.performance && performance.now ? performance.now() : 0) - } - function g() { - o.forEach(function (a) { - a() - }), - (o.length = 0) - } - function h(a, c, d) { - ;(p = !0), (n = !1), (b.timeline.currentTime = a), (m = !1) - var e = [], - f = [], - g = [], - h = [] - return ( - d.forEach(function (b) { - b._tick(a, c), - b._inEffect - ? (f.push(b._effect), b._markTarget()) - : (e.push(b._effect), b._unmarkTarget()), - b._needsTick && (m = !0) - var d = b._inEffect || b._needsTick - ;(b._inTimeline = d), d ? g.push(b) : h.push(b) - }), - o.push.apply(o, e), - o.push.apply(o, f), - m && requestAnimationFrame(function () {}), - (p = !1), - [g, h] - ) - } - var i = window.requestAnimationFrame, - j = [], - k = 0 - ;(window.requestAnimationFrame = function (a) { - var b = k++ - return 0 == j.length && i(d), j.push([b, a]), b - }), - (window.cancelAnimationFrame = function (a) { - j.forEach(function (b) { - b[0] == a && (b[1] = function () {}) - }) - }), - (f.prototype = { - _play: function (c) { - c._timing = a.normalizeTimingInput(c.timing) - var d = new b.Animation(c) - return ( - (d._idle = !1), - (d._timeline = this), - this._animations.push(d), - b.restart(), - b.applyDirtiedAnimation(d), - d - ) - }, - }) - var l = void 0, - m = !1, - n = !1 - ;(b.restart = function () { - return m || ((m = !0), requestAnimationFrame(function () {}), (n = !0)), n - }), - (b.applyDirtiedAnimation = function (a) { - if (!p) { - a._markTarget() - var c = a._targetAnimations() - c.sort(e), - h(b.timeline.currentTime, !1, c.slice())[1].forEach( - function (a) { - var b = q._animations.indexOf(a) - ;-1 !== b && q._animations.splice(b, 1) - }, - ), - g() - } - }) - var o = [], - p = !1, - q = new f() - b.timeline = q - })(a, b), - (function (a, b) { - function c(a, b) { - for (var c = 0, d = 0; d < a.length; d++) c += a[d] * b[d] - return c - } - function d(a, b) { - return [ - a[0] * b[0] + a[4] * b[1] + a[8] * b[2] + a[12] * b[3], - a[1] * b[0] + a[5] * b[1] + a[9] * b[2] + a[13] * b[3], - a[2] * b[0] + a[6] * b[1] + a[10] * b[2] + a[14] * b[3], - a[3] * b[0] + a[7] * b[1] + a[11] * b[2] + a[15] * b[3], - a[0] * b[4] + a[4] * b[5] + a[8] * b[6] + a[12] * b[7], - a[1] * b[4] + a[5] * b[5] + a[9] * b[6] + a[13] * b[7], - a[2] * b[4] + a[6] * b[5] + a[10] * b[6] + a[14] * b[7], - a[3] * b[4] + a[7] * b[5] + a[11] * b[6] + a[15] * b[7], - a[0] * b[8] + a[4] * b[9] + a[8] * b[10] + a[12] * b[11], - a[1] * b[8] + a[5] * b[9] + a[9] * b[10] + a[13] * b[11], - a[2] * b[8] + a[6] * b[9] + a[10] * b[10] + a[14] * b[11], - a[3] * b[8] + a[7] * b[9] + a[11] * b[10] + a[15] * b[11], - a[0] * b[12] + a[4] * b[13] + a[8] * b[14] + a[12] * b[15], - a[1] * b[12] + a[5] * b[13] + a[9] * b[14] + a[13] * b[15], - a[2] * b[12] + a[6] * b[13] + a[10] * b[14] + a[14] * b[15], - a[3] * b[12] + a[7] * b[13] + a[11] * b[14] + a[15] * b[15], - ] - } - function e(a) { - var b = a.rad || 0 - return ( - ((a.deg || 0) / 360 + (a.grad || 0) / 400 + (a.turn || 0)) * - (2 * Math.PI) + - b - ) - } - function f(a) { - switch (a.t) { - case "rotatex": - var b = e(a.d[0]) - return [ - 1, - 0, - 0, - 0, - 0, - Math.cos(b), - Math.sin(b), - 0, - 0, - -Math.sin(b), - Math.cos(b), - 0, - 0, - 0, - 0, - 1, - ] - case "rotatey": - var b = e(a.d[0]) - return [ - Math.cos(b), - 0, - -Math.sin(b), - 0, - 0, - 1, - 0, - 0, - Math.sin(b), - 0, - Math.cos(b), - 0, - 0, - 0, - 0, - 1, - ] - case "rotate": - case "rotatez": - var b = e(a.d[0]) - return [ - Math.cos(b), - Math.sin(b), - 0, - 0, - -Math.sin(b), - Math.cos(b), - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - ] - case "rotate3d": - var c = a.d[0], - d = a.d[1], - f = a.d[2], - b = e(a.d[3]), - g = c * c + d * d + f * f - if (0 === g) (c = 1), (d = 0), (f = 0) - else if (1 !== g) { - var h = Math.sqrt(g) - ;(c /= h), (d /= h), (f /= h) - } - var i = Math.sin(b / 2), - j = i * Math.cos(b / 2), - k = i * i - return [ - 1 - 2 * (d * d + f * f) * k, - 2 * (c * d * k + f * j), - 2 * (c * f * k - d * j), - 0, - 2 * (c * d * k - f * j), - 1 - 2 * (c * c + f * f) * k, - 2 * (d * f * k + c * j), - 0, - 2 * (c * f * k + d * j), - 2 * (d * f * k - c * j), - 1 - 2 * (c * c + d * d) * k, - 0, - 0, - 0, - 0, - 1, - ] - case "scale": - return [a.d[0], 0, 0, 0, 0, a.d[1], 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] - case "scalex": - return [a.d[0], 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] - case "scaley": - return [1, 0, 0, 0, 0, a.d[0], 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] - case "scalez": - return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, a.d[0], 0, 0, 0, 0, 1] - case "scale3d": - return [ - a.d[0], - 0, - 0, - 0, - 0, - a.d[1], - 0, - 0, - 0, - 0, - a.d[2], - 0, - 0, - 0, - 0, - 1, - ] - case "skew": - var l = e(a.d[0]), - m = e(a.d[1]) - return [ - 1, - Math.tan(m), - 0, - 0, - Math.tan(l), - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - ] - case "skewx": - var b = e(a.d[0]) - return [1, 0, 0, 0, Math.tan(b), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] - case "skewy": - var b = e(a.d[0]) - return [1, Math.tan(b), 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] - case "translate": - var c = a.d[0].px || 0, - d = a.d[1].px || 0 - return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, c, d, 0, 1] - case "translatex": - var c = a.d[0].px || 0 - return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, c, 0, 0, 1] - case "translatey": - var d = a.d[0].px || 0 - return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, d, 0, 1] - case "translatez": - var f = a.d[0].px || 0 - return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, f, 1] - case "translate3d": - var c = a.d[0].px || 0, - d = a.d[1].px || 0, - f = a.d[2].px || 0 - return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, c, d, f, 1] - case "perspective": - return [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - a.d[0].px ? -1 / a.d[0].px : 0, - 0, - 0, - 0, - 1, - ] - case "matrix": - return [ - a.d[0], - a.d[1], - 0, - 0, - a.d[2], - a.d[3], - 0, - 0, - 0, - 0, - 1, - 0, - a.d[4], - a.d[5], - 0, - 1, - ] - case "matrix3d": - return a.d - } - } - function g(a) { - return 0 === a.length - ? [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] - : a.map(f).reduce(d) - } - function h(a) { - return [i(g(a))] - } - var i = (function () { - function a(a) { - return ( - a[0][0] * a[1][1] * a[2][2] + - a[1][0] * a[2][1] * a[0][2] + - a[2][0] * a[0][1] * a[1][2] - - a[0][2] * a[1][1] * a[2][0] - - a[1][2] * a[2][1] * a[0][0] - - a[2][2] * a[0][1] * a[1][0] - ) - } - function b(b) { - for ( - var c = 1 / a(b), - d = b[0][0], - e = b[0][1], - f = b[0][2], - g = b[1][0], - h = b[1][1], - i = b[1][2], - j = b[2][0], - k = b[2][1], - l = b[2][2], - m = [ - [ - (h * l - i * k) * c, - (f * k - e * l) * c, - (e * i - f * h) * c, - 0, - ], - [ - (i * j - g * l) * c, - (d * l - f * j) * c, - (f * g - d * i) * c, - 0, - ], - [ - (g * k - h * j) * c, - (j * e - d * k) * c, - (d * h - e * g) * c, - 0, - ], - ], - n = [], - o = 0; - o < 3; - o++ - ) { - for (var p = 0, q = 0; q < 3; q++) p += b[3][q] * m[q][o] - n.push(p) - } - return n.push(1), m.push(n), m - } - function d(a) { - return [ - [a[0][0], a[1][0], a[2][0], a[3][0]], - [a[0][1], a[1][1], a[2][1], a[3][1]], - [a[0][2], a[1][2], a[2][2], a[3][2]], - [a[0][3], a[1][3], a[2][3], a[3][3]], - ] - } - function e(a, b) { - for (var c = [], d = 0; d < 4; d++) { - for (var e = 0, f = 0; f < 4; f++) e += a[f] * b[f][d] - c.push(e) - } - return c - } - function f(a) { - var b = g(a) - return [a[0] / b, a[1] / b, a[2] / b] - } - function g(a) { - return Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2]) - } - function h(a, b, c, d) { - return [c * a[0] + d * b[0], c * a[1] + d * b[1], c * a[2] + d * b[2]] - } - function i(a, b) { - return [ - a[1] * b[2] - a[2] * b[1], - a[2] * b[0] - a[0] * b[2], - a[0] * b[1] - a[1] * b[0], - ] - } - function j(j) { - var k = [j.slice(0, 4), j.slice(4, 8), j.slice(8, 12), j.slice(12, 16)] - if (1 !== k[3][3]) return null - for (var l = [], m = 0; m < 4; m++) l.push(k[m].slice()) - for (var m = 0; m < 3; m++) l[m][3] = 0 - if (0 === a(l)) return null - var n, - o = [] - k[0][3] || k[1][3] || k[2][3] - ? (o.push(k[0][3]), - o.push(k[1][3]), - o.push(k[2][3]), - o.push(k[3][3]), - (n = e(o, d(b(l))))) - : (n = [0, 0, 0, 1]) - var p = k[3].slice(0, 3), - q = [] - q.push(k[0].slice(0, 3)) - var r = [] - r.push(g(q[0])), (q[0] = f(q[0])) - var s = [] - q.push(k[1].slice(0, 3)), - s.push(c(q[0], q[1])), - (q[1] = h(q[1], q[0], 1, -s[0])), - r.push(g(q[1])), - (q[1] = f(q[1])), - (s[0] /= r[1]), - q.push(k[2].slice(0, 3)), - s.push(c(q[0], q[2])), - (q[2] = h(q[2], q[0], 1, -s[1])), - s.push(c(q[1], q[2])), - (q[2] = h(q[2], q[1], 1, -s[2])), - r.push(g(q[2])), - (q[2] = f(q[2])), - (s[1] /= r[2]), - (s[2] /= r[2]) - var t = i(q[1], q[2]) - if (c(q[0], t) < 0) - for (var m = 0; m < 3; m++) - (r[m] *= -1), (q[m][0] *= -1), (q[m][1] *= -1), (q[m][2] *= -1) - var u, - v, - w = q[0][0] + q[1][1] + q[2][2] + 1 - return ( - w > 1e-4 - ? ((u = 0.5 / Math.sqrt(w)), - (v = [ - (q[2][1] - q[1][2]) * u, - (q[0][2] - q[2][0]) * u, - (q[1][0] - q[0][1]) * u, - 0.25 / u, - ])) - : q[0][0] > q[1][1] && q[0][0] > q[2][2] - ? ((u = 2 * Math.sqrt(1 + q[0][0] - q[1][1] - q[2][2])), - (v = [ - 0.25 * u, - (q[0][1] + q[1][0]) / u, - (q[0][2] + q[2][0]) / u, - (q[2][1] - q[1][2]) / u, - ])) - : q[1][1] > q[2][2] - ? ((u = 2 * Math.sqrt(1 + q[1][1] - q[0][0] - q[2][2])), - (v = [ - (q[0][1] + q[1][0]) / u, - 0.25 * u, - (q[1][2] + q[2][1]) / u, - (q[0][2] - q[2][0]) / u, - ])) - : ((u = 2 * Math.sqrt(1 + q[2][2] - q[0][0] - q[1][1])), - (v = [ - (q[0][2] + q[2][0]) / u, - (q[1][2] + q[2][1]) / u, - 0.25 * u, - (q[1][0] - q[0][1]) / u, - ])), - [p, r, s, v, n] - ) - } - return j - })() - ;(a.dot = c), (a.makeMatrixDecomposition = h), (a.transformListToMatrix = g) - })(b), - (function (a) { - function b(a, b) { - var c = a.exec(b) - if (c) - return ( - (c = a.ignoreCase ? c[0].toLowerCase() : c[0]), - [c, b.substr(c.length)] - ) - } - function c(a, b) { - b = b.replace(/^\s*/, "") - var c = a(b) - if (c) return [c[0], c[1].replace(/^\s*/, "")] - } - function d(a, d, e) { - a = c.bind(null, a) - for (var f = []; ; ) { - var g = a(e) - if (!g) return [f, e] - if ((f.push(g[0]), (e = g[1]), !(g = b(d, e)) || "" == g[1])) - return [f, e] - e = g[1] - } - } - function e(a, b) { - for (var c = 0, d = 0; d < b.length && (!/\s|,/.test(b[d]) || 0 != c); d++) - if ("(" == b[d]) c++ - else if (")" == b[d] && (c--, 0 == c && d++, c <= 0)) break - var e = a(b.substr(0, d)) - return void 0 == e ? void 0 : [e, b.substr(d)] - } - function f(a, b) { - for (var c = a, d = b; c && d; ) c > d ? (c %= d) : (d %= c) - return (c = (a * b) / (c + d)) - } - function g(a) { - return function (b) { - var c = a(b) - return c && (c[0] = void 0), c - } - } - function h(a, b) { - return function (c) { - return a(c) || [b, c] - } - } - function i(b, c) { - for (var d = [], e = 0; e < b.length; e++) { - var f = a.consumeTrimmed(b[e], c) - if (!f || "" == f[0]) return - void 0 !== f[0] && d.push(f[0]), (c = f[1]) - } - if ("" == c) return d - } - function j(a, b, c, d, e) { - for ( - var g = [], h = [], i = [], j = f(d.length, e.length), k = 0; - k < j; - k++ - ) { - var l = b(d[k % d.length], e[k % e.length]) - if (!l) return - g.push(l[0]), h.push(l[1]), i.push(l[2]) - } - return [ - g, - h, - function (b) { - var d = b - .map(function (a, b) { - return i[b](a) - }) - .join(c) - return a ? a(d) : d - }, - ] - } - function k(a, b, c) { - for (var d = [], e = [], f = [], g = 0, h = 0; h < c.length; h++) - if ("function" == typeof c[h]) { - var i = c[h](a[g], b[g++]) - d.push(i[0]), e.push(i[1]), f.push(i[2]) - } else - !(function (a) { - d.push(!1), - e.push(!1), - f.push(function () { - return c[a] - }) - })(h) - return [ - d, - e, - function (a) { - for (var b = "", c = 0; c < a.length; c++) b += f[c](a[c]) - return b - }, - ] - } - ;(a.consumeToken = b), - (a.consumeTrimmed = c), - (a.consumeRepeated = d), - (a.consumeParenthesised = e), - (a.ignore = g), - (a.optional = h), - (a.consumeList = i), - (a.mergeNestedRepeated = j.bind(null, null)), - (a.mergeWrappedNestedRepeated = j), - (a.mergeList = k) - })(b), - (function (a) { - function b(b) { - function c(b) { - var c = a.consumeToken(/^inset/i, b) - return c - ? ((d.inset = !0), c) - : (c = a.consumeLengthOrPercent(b)) - ? (d.lengths.push(c[0]), c) - : ((c = a.consumeColor(b)), c ? ((d.color = c[0]), c) : void 0) - } - var d = {inset: !1, lengths: [], color: null}, - e = a.consumeRepeated(c, /^/, b) - if (e && e[0].length) return [d, e[1]] - } - function c(c) { - var d = a.consumeRepeated(b, /^,/, c) - if (d && "" == d[1]) return d[0] - } - function d(b, c) { - for (; b.lengths.length < Math.max(b.lengths.length, c.lengths.length); ) - b.lengths.push({px: 0}) - for (; c.lengths.length < Math.max(b.lengths.length, c.lengths.length); ) - c.lengths.push({px: 0}) - if (b.inset == c.inset && !!b.color == !!c.color) { - for ( - var d, e = [], f = [[], 0], g = [[], 0], h = 0; - h < b.lengths.length; - h++ - ) { - var i = a.mergeDimensions(b.lengths[h], c.lengths[h], 2 == h) - f[0].push(i[0]), g[0].push(i[1]), e.push(i[2]) - } - if (b.color && c.color) { - var j = a.mergeColors(b.color, c.color) - ;(f[1] = j[0]), (g[1] = j[1]), (d = j[2]) - } - return [ - f, - g, - function (a) { - for (var c = b.inset ? "inset " : " ", f = 0; f < e.length; f++) - c += e[f](a[0][f]) + " " - return d && (c += d(a[1])), c - }, - ] - } - } - function e(b, c, d, e) { - function f(a) { - return { - inset: a, - color: [0, 0, 0, 0], - lengths: [{px: 0}, {px: 0}, {px: 0}, {px: 0}], - } - } - for (var g = [], h = [], i = 0; i < d.length || i < e.length; i++) { - var j = d[i] || f(e[i].inset), - k = e[i] || f(d[i].inset) - g.push(j), h.push(k) - } - return a.mergeNestedRepeated(b, c, g, h) - } - var f = e.bind(null, d, ", ") - a.addPropertiesHandler(c, f, ["box-shadow", "text-shadow"]) - })(b), - (function (a, b) { - function c(a) { - return a.toFixed(3).replace(/0+$/, "").replace(/\.$/, "") - } - function d(a, b, c) { - return Math.min(b, Math.max(a, c)) - } - function e(a) { - if (/^\s*[-+]?(\d*\.)?\d+\s*$/.test(a)) return Number(a) - } - function f(a, b) { - return [a, b, c] - } - function g(a, b) { - if (0 != a) return i(0, 1 / 0)(a, b) - } - function h(a, b) { - return [ - a, - b, - function (a) { - return Math.round(d(1, 1 / 0, a)) - }, - ] - } - function i(a, b) { - return function (e, f) { - return [ - e, - f, - function (e) { - return c(d(a, b, e)) - }, - ] - } - } - function j(a) { - var b = a.trim().split(/\s*[\s,]\s*/) - if (0 !== b.length) { - for (var c = [], d = 0; d < b.length; d++) { - var f = e(b[d]) - if (void 0 === f) return - c.push(f) - } - return c - } - } - function k(a, b) { - if (a.length == b.length) - return [ - a, - b, - function (a) { - return a.map(c).join(" ") - }, - ] - } - function l(a, b) { - return [a, b, Math.round] - } - ;(a.clamp = d), - a.addPropertiesHandler(j, k, ["stroke-dasharray"]), - a.addPropertiesHandler(e, i(0, 1 / 0), [ - "border-image-width", - "line-height", - ]), - a.addPropertiesHandler(e, i(0, 1), ["opacity", "shape-image-threshold"]), - a.addPropertiesHandler(e, g, ["flex-grow", "flex-shrink"]), - a.addPropertiesHandler(e, h, ["orphans", "widows"]), - a.addPropertiesHandler(e, l, ["z-index"]), - (a.parseNumber = e), - (a.parseNumberList = j), - (a.mergeNumbers = f), - (a.numberToString = c) - })(b), - (function (a, b) { - function c(a, b) { - if ("visible" == a || "visible" == b) - return [ - 0, - 1, - function (c) { - return c <= 0 ? a : c >= 1 ? b : "visible" - }, - ] - } - a.addPropertiesHandler(String, c, ["visibility"]) - })(b), - (function (a, b) { - function c(a) { - return [255, 255, 255, 1] - } - function d(b, c) { - return [ - b, - c, - function (b) { - function c(a) { - return Math.max(0, Math.min(255, a)) - } - if (b[3]) - for (var d = 0; d < 3; d++) b[d] = Math.round(c(b[d] / b[3])) - return ( - (b[3] = a.numberToString(a.clamp(0, 1, b[3]))), - "rgba(" + b.join(",") + ")" - ) - }, - ] - } - var e = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas") - e.width = e.height = 1 - a.addPropertiesHandler(c, d, [ - "background-color", - "border-bottom-color", - "border-left-color", - "border-right-color", - "border-top-color", - "color", - "fill", - "flood-color", - "lighting-color", - "outline-color", - "stop-color", - "stroke", - "text-decoration-color", - ]), - (a.consumeColor = a.consumeParenthesised.bind(null, c)), - (a.mergeColors = d) - })(b), - (function (a, b) { - function c(a) { - function b() { - var b = h.exec(a) - g = b ? b[0] : void 0 - } - function c() { - var a = Number(g) - return b(), a - } - function d() { - if ("(" !== g) return c() - b() - var a = f() - return ")" !== g ? NaN : (b(), a) - } - function e() { - for (var a = d(); "*" === g || "/" === g; ) { - var c = g - b() - var e = d() - "*" === c ? (a *= e) : (a /= e) - } - return a - } - function f() { - for (var a = e(); "+" === g || "-" === g; ) { - var c = g - b() - var d = e() - "+" === c ? (a += d) : (a -= d) - } - return a - } - var g, - h = /([\+\-\w\.]+|[\(\)\*\/])/g - return b(), f() - } - function d(a, b) { - if ("0" == (b = b.trim().toLowerCase()) && "px".search(a) >= 0) - return {px: 0} - if (/^[^(]*$|^calc/.test(b)) { - b = b.replace(/calc\(/g, "(") - var d = {} - b = b.replace(a, function (a) { - return (d[a] = null), "U" + a - }) - for ( - var e = "U(" + a.source + ")", - f = b - .replace(/[-+]?(\d*\.)?\d+([Ee][-+]?\d+)?/g, "N") - .replace(new RegExp("N" + e, "g"), "D") - .replace(/\s[+-]\s/g, "O") - .replace(/\s/g, ""), - g = [/N\*(D)/g, /(N|D)[*\/]N/g, /(N|D)O\1/g, /\((N|D)\)/g], - h = 0; - h < g.length; - - ) - g[h].test(f) ? ((f = f.replace(g[h], "$1")), (h = 0)) : h++ - if ("D" == f) { - for (var i in d) { - var j = c( - b - .replace(new RegExp("U" + i, "g"), "") - .replace(new RegExp(e, "g"), "*0"), - ) - if (!isFinite(j)) return - d[i] = j - } - return d - } - } - } - function e(a, b) { - return f(a, b, !0) - } - function f(b, c, d) { - var e, - f = [] - for (e in b) f.push(e) - for (e in c) f.indexOf(e) < 0 && f.push(e) - return ( - (b = f.map(function (a) { - return b[a] || 0 - })), - (c = f.map(function (a) { - return c[a] || 0 - })), - [ - b, - c, - function (b) { - var c = b - .map(function (c, e) { - return ( - 1 == b.length && d && (c = Math.max(c, 0)), - a.numberToString(c) + f[e] - ) - }) - .join(" + ") - return b.length > 1 ? "calc(" + c + ")" : c - }, - ] - ) - } - var g = "px|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc", - h = d.bind(null, new RegExp(g, "g")), - i = d.bind(null, new RegExp(g + "|%", "g")), - j = d.bind(null, /deg|rad|grad|turn/g) - ;(a.parseLength = h), - (a.parseLengthOrPercent = i), - (a.consumeLengthOrPercent = a.consumeParenthesised.bind(null, i)), - (a.parseAngle = j), - (a.mergeDimensions = f) - var k = a.consumeParenthesised.bind(null, h), - l = a.consumeRepeated.bind(void 0, k, /^/), - m = a.consumeRepeated.bind(void 0, l, /^,/) - a.consumeSizePairList = m - var n = function (a) { - var b = m(a) - if (b && "" == b[1]) return b[0] - }, - o = a.mergeNestedRepeated.bind(void 0, e, " "), - p = a.mergeNestedRepeated.bind(void 0, o, ",") - ;(a.mergeNonNegativeSizePair = o), - a.addPropertiesHandler(n, p, ["background-size"]), - a.addPropertiesHandler(i, e, [ - "border-bottom-width", - "border-image-width", - "border-left-width", - "border-right-width", - "border-top-width", - "flex-basis", - "font-size", - "height", - "line-height", - "max-height", - "max-width", - "outline-width", - "width", - ]), - a.addPropertiesHandler(i, f, [ - "border-bottom-left-radius", - "border-bottom-right-radius", - "border-top-left-radius", - "border-top-right-radius", - "bottom", - "left", - "letter-spacing", - "margin-bottom", - "margin-left", - "margin-right", - "margin-top", - "min-height", - "min-width", - "outline-offset", - "padding-bottom", - "padding-left", - "padding-right", - "padding-top", - "perspective", - "right", - "shape-margin", - "stroke-dashoffset", - "text-indent", - "top", - "vertical-align", - "word-spacing", - ]) - })(b), - (function (a, b) { - function c(b) { - return a.consumeLengthOrPercent(b) || a.consumeToken(/^auto/, b) - } - function d(b) { - var d = a.consumeList( - [ - a.ignore(a.consumeToken.bind(null, /^rect/)), - a.ignore(a.consumeToken.bind(null, /^\(/)), - a.consumeRepeated.bind(null, c, /^,/), - a.ignore(a.consumeToken.bind(null, /^\)/)), - ], - b, - ) - if (d && 4 == d[0].length) return d[0] - } - function e(b, c) { - return "auto" == b || "auto" == c - ? [ - !0, - !1, - function (d) { - var e = d ? b : c - if ("auto" == e) return "auto" - var f = a.mergeDimensions(e, e) - return f[2](f[0]) - }, - ] - : a.mergeDimensions(b, c) - } - function f(a) { - return "rect(" + a + ")" - } - var g = a.mergeWrappedNestedRepeated.bind(null, f, e, ", ") - ;(a.parseBox = d), (a.mergeBoxes = g), a.addPropertiesHandler(d, g, ["clip"]) - })(b), - (function (a, b) { - function c(a) { - return function (b) { - var c = 0 - return a.map(function (a) { - return a === k ? b[c++] : a - }) - } - } - function d(a) { - return a - } - function e(b) { - if ("none" == (b = b.toLowerCase().trim())) return [] - for (var c, d = /\s*(\w+)\(([^)]*)\)/g, e = [], f = 0; (c = d.exec(b)); ) { - if (c.index != f) return - f = c.index + c[0].length - var g = c[1], - h = n[g] - if (!h) return - var i = c[2].split(","), - j = h[0] - if (j.length < i.length) return - for (var k = [], o = 0; o < j.length; o++) { - var p, - q = i[o], - r = j[o] - if ( - void 0 === - (p = q - ? { - A: function (b) { - return "0" == b.trim() ? m : a.parseAngle(b) - }, - N: a.parseNumber, - T: a.parseLengthOrPercent, - L: a.parseLength, - }[r.toUpperCase()](q) - : {a: m, n: k[0], t: l}[r]) - ) - return - k.push(p) - } - if ((e.push({t: g, d: k}), d.lastIndex == b.length)) return e - } - } - function f(a) { - return a.toFixed(6).replace(".000000", "") - } - function g(b, c) { - if (b.decompositionPair !== c) { - b.decompositionPair = c - var d = a.makeMatrixDecomposition(b) - } - if (c.decompositionPair !== b) { - c.decompositionPair = b - var e = a.makeMatrixDecomposition(c) - } - return null == d[0] || null == e[0] - ? [ - [!1], - [!0], - function (a) { - return a ? c[0].d : b[0].d - }, - ] - : (d[0].push(0), - e[0].push(1), - [ - d, - e, - function (b) { - var c = a.quat(d[0][3], e[0][3], b[5]) - return a - .composeMatrix(b[0], b[1], b[2], c, b[4]) - .map(f) - .join(",") - }, - ]) - } - function h(a) { - return a.replace(/[xy]/, "") - } - function i(a) { - return a.replace(/(x|y|z|3d)?$/, "3d") - } - function j(b, c) { - var d = a.makeMatrixDecomposition && !0, - e = !1 - if (!b.length || !c.length) { - b.length || ((e = !0), (b = c), (c = [])) - for (var f = 0; f < b.length; f++) { - var j = b[f].t, - k = b[f].d, - l = "scale" == j.substr(0, 5) ? 1 : 0 - c.push({ - t: j, - d: k.map(function (a) { - if ("number" == typeof a) return l - var b = {} - for (var c in a) b[c] = l - return b - }), - }) - } - } - var m = function (a, b) { - return ( - ("perspective" == a && "perspective" == b) || - (("matrix" == a || "matrix3d" == a) && - ("matrix" == b || "matrix3d" == b)) - ) - }, - o = [], - p = [], - q = [] - if (b.length != c.length) { - if (!d) return - var r = g(b, c) - ;(o = [r[0]]), (p = [r[1]]), (q = [["matrix", [r[2]]]]) - } else - for (var f = 0; f < b.length; f++) { - var j, - s = b[f].t, - t = c[f].t, - u = b[f].d, - v = c[f].d, - w = n[s], - x = n[t] - if (m(s, t)) { - if (!d) return - var r = g([b[f]], [c[f]]) - o.push(r[0]), p.push(r[1]), q.push(["matrix", [r[2]]]) - } else { - if (s == t) j = s - else if (w[2] && x[2] && h(s) == h(t)) - (j = h(s)), (u = w[2](u)), (v = x[2](v)) - else { - if (!w[1] || !x[1] || i(s) != i(t)) { - if (!d) return - var r = g(b, c) - ;(o = [r[0]]), (p = [r[1]]), (q = [["matrix", [r[2]]]]) - break - } - ;(j = i(s)), (u = w[1](u)), (v = x[1](v)) - } - for (var y = [], z = [], A = [], B = 0; B < u.length; B++) { - var C = - "number" == typeof u[B] - ? a.mergeNumbers - : a.mergeDimensions, - r = C(u[B], v[B]) - ;(y[B] = r[0]), (z[B] = r[1]), A.push(r[2]) - } - o.push(y), p.push(z), q.push([j, A]) - } - } - if (e) { - var D = o - ;(o = p), (p = D) - } - return [ - o, - p, - function (a) { - return a - .map(function (a, b) { - var c = a - .map(function (a, c) { - return q[b][1][c](a) - }) - .join(",") - return ( - "matrix" == q[b][0] && - 16 == c.split(",").length && - (q[b][0] = "matrix3d"), - q[b][0] + "(" + c + ")" - ) - }) - .join(" ") - }, - ] - } - var k = null, - l = {px: 0}, - m = {deg: 0}, - n = { - matrix: ["NNNNNN", [k, k, 0, 0, k, k, 0, 0, 0, 0, 1, 0, k, k, 0, 1], d], - matrix3d: ["NNNNNNNNNNNNNNNN", d], - rotate: ["A"], - rotatex: ["A"], - rotatey: ["A"], - rotatez: ["A"], - rotate3d: ["NNNA"], - perspective: ["L"], - scale: ["Nn", c([k, k, 1]), d], - scalex: ["N", c([k, 1, 1]), c([k, 1])], - scaley: ["N", c([1, k, 1]), c([1, k])], - scalez: ["N", c([1, 1, k])], - scale3d: ["NNN", d], - skew: ["Aa", null, d], - skewx: ["A", null, c([k, m])], - skewy: ["A", null, c([m, k])], - translate: ["Tt", c([k, k, l]), d], - translatex: ["T", c([k, l, l]), c([k, l])], - translatey: ["T", c([l, k, l]), c([l, k])], - translatez: ["L", c([l, l, k])], - translate3d: ["TTL", d], - } - a.addPropertiesHandler(e, j, ["transform"]), - (a.transformToSvgMatrix = function (b) { - var c = a.transformListToMatrix(e(b)) - return ( - "matrix(" + - f(c[0]) + - " " + - f(c[1]) + - " " + - f(c[4]) + - " " + - f(c[5]) + - " " + - f(c[12]) + - " " + - f(c[13]) + - ")" - ) - }) - })(b), - (function (a) { - function b(a) { - var b = Number(a) - if (!(isNaN(b) || b < 100 || b > 900 || b % 100 != 0)) return b - } - function c(b) { - return ( - (b = 100 * Math.round(b / 100)), - (b = a.clamp(100, 900, b)), - 400 === b ? "normal" : 700 === b ? "bold" : String(b) - ) - } - function d(a, b) { - return [a, b, c] - } - a.addPropertiesHandler(b, d, ["font-weight"]) - })(b), - (function (a) { - function b(a) { - var b = {} - for (var c in a) b[c] = -a[c] - return b - } - function c(b) { - return ( - a.consumeToken(/^(left|center|right|top|bottom)\b/i, b) || - a.consumeLengthOrPercent(b) - ) - } - function d(b, d) { - var e = a.consumeRepeated(c, /^/, d) - if (e && "" == e[1]) { - var f = e[0] - if ( - ((f[0] = f[0] || "center"), - (f[1] = f[1] || "center"), - 3 == b && (f[2] = f[2] || {px: 0}), - f.length == b) - ) { - if (/top|bottom/.test(f[0]) || /left|right/.test(f[1])) { - var h = f[0] - ;(f[0] = f[1]), (f[1] = h) - } - if ( - /left|right|center|Object/.test(f[0]) && - /top|bottom|center|Object/.test(f[1]) - ) - return f.map(function (a) { - return "object" == typeof a ? a : g[a] - }) - } - } - } - function e(d) { - var e = a.consumeRepeated(c, /^/, d) - if (e) { - for ( - var f = e[0], h = [{"%": 50}, {"%": 50}], i = 0, j = !1, k = 0; - k < f.length; - k++ - ) { - var l = f[k] - "string" == typeof l - ? ((j = /bottom|right/.test(l)), - (i = {left: 0, right: 0, center: i, top: 1, bottom: 1}[l]), - (h[i] = g[l]), - "center" == l && i++) - : (j && ((l = b(l)), (l["%"] = (l["%"] || 0) + 100)), - (h[i] = l), - i++, - (j = !1)) - } - return [h, e[1]] - } - } - function f(b) { - var c = a.consumeRepeated(e, /^,/, b) - if (c && "" == c[1]) return c[0] - } - var g = { - left: {"%": 0}, - center: {"%": 50}, - right: {"%": 100}, - top: {"%": 0}, - bottom: {"%": 100}, - }, - h = a.mergeNestedRepeated.bind(null, a.mergeDimensions, " ") - a.addPropertiesHandler(d.bind(null, 3), h, ["transform-origin"]), - a.addPropertiesHandler(d.bind(null, 2), h, ["perspective-origin"]), - (a.consumePosition = e), - (a.mergeOffsetList = h) - var i = a.mergeNestedRepeated.bind(null, h, ", ") - a.addPropertiesHandler(f, i, ["background-position", "object-position"]) - })(b), - (function (a) { - function b(b) { - var c = a.consumeToken(/^circle/, b) - if (c && c[0]) - return ["circle"].concat( - a.consumeList( - [ - a.ignore(a.consumeToken.bind(void 0, /^\(/)), - d, - a.ignore(a.consumeToken.bind(void 0, /^at/)), - a.consumePosition, - a.ignore(a.consumeToken.bind(void 0, /^\)/)), - ], - c[1], - ), - ) - var f = a.consumeToken(/^ellipse/, b) - if (f && f[0]) - return ["ellipse"].concat( - a.consumeList( - [ - a.ignore(a.consumeToken.bind(void 0, /^\(/)), - e, - a.ignore(a.consumeToken.bind(void 0, /^at/)), - a.consumePosition, - a.ignore(a.consumeToken.bind(void 0, /^\)/)), - ], - f[1], - ), - ) - var g = a.consumeToken(/^polygon/, b) - return g && g[0] - ? ["polygon"].concat( - a.consumeList( - [ - a.ignore(a.consumeToken.bind(void 0, /^\(/)), - a.optional( - a.consumeToken.bind( - void 0, - /^nonzero\s*,|^evenodd\s*,/, - ), - "nonzero,", - ), - a.consumeSizePairList, - a.ignore(a.consumeToken.bind(void 0, /^\)/)), - ], - g[1], - ), - ) - : void 0 - } - function c(b, c) { - if (b[0] === c[0]) - return "circle" == b[0] - ? a.mergeList(b.slice(1), c.slice(1), [ - "circle(", - a.mergeDimensions, - " at ", - a.mergeOffsetList, - ")", - ]) - : "ellipse" == b[0] - ? a.mergeList(b.slice(1), c.slice(1), [ - "ellipse(", - a.mergeNonNegativeSizePair, - " at ", - a.mergeOffsetList, - ")", - ]) - : "polygon" == b[0] && b[1] == c[1] - ? a.mergeList(b.slice(2), c.slice(2), [ - "polygon(", - b[1], - g, - ")", - ]) - : void 0 - } - var d = a.consumeParenthesised.bind(null, a.parseLengthOrPercent), - e = a.consumeRepeated.bind(void 0, d, /^/), - f = a.mergeNestedRepeated.bind(void 0, a.mergeDimensions, " "), - g = a.mergeNestedRepeated.bind(void 0, f, ",") - a.addPropertiesHandler(b, c, ["shape-outside"]) - })(b), - (function (a, b) { - function c(a, b) { - b.concat([a]).forEach(function (b) { - b in document.documentElement.style && (d[a] = b), (e[b] = a) - }) - } - var d = {}, - e = {} - c("transform", ["webkitTransform", "msTransform"]), - c("transformOrigin", ["webkitTransformOrigin"]), - c("perspective", ["webkitPerspective"]), - c("perspectiveOrigin", ["webkitPerspectiveOrigin"]), - (a.propertyName = function (a) { - return d[a] || a - }), - (a.unprefixedPropertyName = function (a) { - return e[a] || a - }) - })(b) - })(), - (function () { - if (void 0 === document.createElement("div").animate([]).oncancel) { - var a - if (window.performance && performance.now) - var a = function () { - return performance.now() - } - else - var a = function () { - return Date.now() - } - var b = function (a, b, c) { - ;(this.target = a), - (this.currentTime = b), - (this.timelineTime = c), - (this.type = "cancel"), - (this.bubbles = !1), - (this.cancelable = !1), - (this.currentTarget = a), - (this.defaultPrevented = !1), - (this.eventPhase = Event.AT_TARGET), - (this.timeStamp = Date.now()) - }, - c = window.Element.prototype.animate - window.Element.prototype.animate = function (d, e) { - var f = c.call(this, d, e) - ;(f._cancelHandlers = []), (f.oncancel = null) - var g = f.cancel - f.cancel = function () { - g.call(this) - var c = new b(this, null, a()), - d = this._cancelHandlers.concat(this.oncancel ? [this.oncancel] : []) - setTimeout(function () { - d.forEach(function (a) { - a.call(c.target, c) - }) - }, 0) - } - var h = f.addEventListener - f.addEventListener = function (a, b) { - "function" == typeof b && "cancel" == a - ? this._cancelHandlers.push(b) - : h.call(this, a, b) - } - var i = f.removeEventListener - return ( - (f.removeEventListener = function (a, b) { - if ("cancel" == a) { - var c = this._cancelHandlers.indexOf(b) - c >= 0 && this._cancelHandlers.splice(c, 1) - } else i.call(this, a, b) - }), - f - ) - } - } - })(), - (function (a) { - var b = document.documentElement, - c = null, - d = !1 - try { - var e = getComputedStyle(b).getPropertyValue("opacity"), - f = "0" == e ? "1" : "0" - ;(c = b.animate({opacity: [f, f]}, {duration: 1})), - (c.currentTime = 0), - (d = getComputedStyle(b).getPropertyValue("opacity") == f) - } catch (a) { - } finally { - c && c.cancel() - } - if (!d) { - var g = window.Element.prototype.animate - window.Element.prototype.animate = function (b, c) { - return ( - window.Symbol && - Symbol.iterator && - Array.prototype.from && - b[Symbol.iterator] && - (b = Array.from(b)), - Array.isArray(b) || null === b || (b = a.convertToArrayForm(b)), - g.call(this, b, c) - ) - } - } - })(a) -})() diff --git a/tsconfig.json b/tsconfig.json index f1e1c46..9984983 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,7 +3,7 @@ "compilerOptions": { "lib": ["ESNext", "DOM"], "jsx": "preserve", - "jsxImportSource": "solid-js" + "jsxImportSource": "@solidjs/web" }, "include": ["src"], "references": [{"path": "./tsconfig.node.json"}]