├── example
├── src
│ ├── react-app-env.d.ts
│ ├── resources
│ │ ├── frog.png
│ │ ├── impo.png
│ │ ├── bomber.png
│ │ ├── smiley.png
│ │ ├── smiley_idle.png
│ │ ├── impo.json
│ │ ├── smiley.json
│ │ └── bomber.json
│ ├── const.js
│ ├── styles.css
│ ├── setupTests.ts
│ ├── index.tsx
│ ├── reportWebVitals.ts
│ ├── actors.tsx
│ └── App.tsx
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── index.html
├── tsconfig.json
├── package.json
└── README.md
├── banner.png
├── use-spritesheet
├── src
│ ├── react-app-env.d.ts
│ ├── aseprite.ts
│ └── index.ts
├── tsconfig.json
├── LICENSE
├── package.json
└── yarn.lock
├── package.json
├── .gitignore
├── .github
└── workflows
│ └── main.yml
└── README.md
/example/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bfollington/use-spritesheet/HEAD/banner.png
--------------------------------------------------------------------------------
/use-spritesheet/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/example/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/example/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bfollington/use-spritesheet/HEAD/example/public/favicon.ico
--------------------------------------------------------------------------------
/example/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bfollington/use-spritesheet/HEAD/example/public/logo192.png
--------------------------------------------------------------------------------
/example/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bfollington/use-spritesheet/HEAD/example/public/logo512.png
--------------------------------------------------------------------------------
/example/src/resources/frog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bfollington/use-spritesheet/HEAD/example/src/resources/frog.png
--------------------------------------------------------------------------------
/example/src/resources/impo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bfollington/use-spritesheet/HEAD/example/src/resources/impo.png
--------------------------------------------------------------------------------
/example/src/const.js:
--------------------------------------------------------------------------------
1 | export const DIMENSIONS = {
2 | width: window.innerWidth,
3 | height: window.innerHeight,
4 | }
5 |
--------------------------------------------------------------------------------
/example/src/resources/bomber.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bfollington/use-spritesheet/HEAD/example/src/resources/bomber.png
--------------------------------------------------------------------------------
/example/src/resources/smiley.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bfollington/use-spritesheet/HEAD/example/src/resources/smiley.png
--------------------------------------------------------------------------------
/example/src/resources/smiley_idle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bfollington/use-spritesheet/HEAD/example/src/resources/smiley_idle.png
--------------------------------------------------------------------------------
/example/src/styles.css:
--------------------------------------------------------------------------------
1 | html,
2 | body,
3 | #root {
4 | margin: 0;
5 | padding: 0;
6 | width: 100%;
7 | height: 100%;
8 | }
9 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "workspaces": ["example", "use-spritesheet"],
4 | "scripts": {
5 | "build": "cp README.md use-spritesheet/README.md && cd use-spritesheet && yarn build && cd ../example && yarn build"
6 | }
7 | }
--------------------------------------------------------------------------------
/example/src/setupTests.ts:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/example/src/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ReactDOM from 'react-dom'
3 | import App from './App'
4 | import './styles.css'
5 |
6 | ReactDOM.render(
7 |
8 |
9 | ,
10 | document.getElementById('root')
11 | )
12 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
25 | example/build
26 | use-spritesheet/lib
27 | use-spritesheet/README.md
28 |
--------------------------------------------------------------------------------
/example/src/reportWebVitals.ts:
--------------------------------------------------------------------------------
1 | import { ReportHandler } from 'web-vitals';
2 |
3 | const reportWebVitals = (onPerfEntry?: ReportHandler) => {
4 | if (onPerfEntry && onPerfEntry instanceof Function) {
5 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
6 | getCLS(onPerfEntry);
7 | getFID(onPerfEntry);
8 | getFCP(onPerfEntry);
9 | getLCP(onPerfEntry);
10 | getTTFB(onPerfEntry);
11 | });
12 | }
13 | };
14 |
15 | export default reportWebVitals;
16 |
--------------------------------------------------------------------------------
/example/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/example/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "esModuleInterop": true,
12 | "allowSyntheticDefaultImports": true,
13 | "strict": true,
14 | "forceConsistentCasingInFileNames": true,
15 | "noFallthroughCasesInSwitch": true,
16 | "module": "esnext",
17 | "moduleResolution": "node",
18 | "resolveJsonModule": true,
19 | "isolatedModules": true,
20 | "noEmit": true,
21 | "jsx": "react-jsx"
22 | },
23 | "include": [
24 | "src"
25 | ]
26 | }
27 |
--------------------------------------------------------------------------------
/.github/workflows/main.yml:
--------------------------------------------------------------------------------
1 | name: Build
2 |
3 | on: [push]
4 |
5 | jobs:
6 | build:
7 |
8 | runs-on: ubuntu-latest
9 |
10 | steps:
11 | - uses: actions/checkout@v1
12 | - name: Cache node modules
13 | uses: actions/cache@v1.0.0
14 | with:
15 | path: |
16 | node_modules
17 | example/node_modules
18 | use-spritesheet/node_modules
19 | key: ${{ runner.OS }}-build-${{ hashFiles('**/yarn.lock') }}
20 | restore-keys: |
21 | ${{ runner.OS }}-build-${{ env.cache-name }}-
22 | ${{ runner.OS }}-build-
23 | ${{ runner.OS }}-
24 | - name: Install
25 | run: yarn install
26 | - name: Build use-spritesheet
27 | working-directory: use-spritesheet
28 | run: yarn build
29 | - name: Build example
30 | working-directory: example
31 | run: yarn build
32 |
--------------------------------------------------------------------------------
/use-spritesheet/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "outDir": "lib",
4 | "module": "esnext",
5 | "target": "es5",
6 | "lib": ["dom",
7 | "dom.iterable",
8 | "esnext"],
9 | "sourceMap": true,
10 | "allowJs": false,
11 | "esModuleInterop": true,
12 | "jsx": "react-jsx",
13 | "declaration": true,
14 | "declarationDir": "./lib",
15 | "moduleResolution": "node",
16 | "forceConsistentCasingInFileNames": true,
17 | "noImplicitReturns": true,
18 | "noImplicitThis": true,
19 | "noImplicitAny": true,
20 | "strictNullChecks": true,
21 | "suppressImplicitAnyIndexErrors": true,
22 | "noUnusedLocals": true,
23 | "noUnusedParameters": true,
24 | "allowSyntheticDefaultImports": true,
25 | "incremental": true,
26 | "strict": true,
27 | "skipLibCheck": true,
28 |
29 | },
30 | "include": ["src"],
31 | "exclude": ["node_modules", "build", "dist", "lib", "src/stories", "src/example", "**/*.test.ts", "**/*.test.tsx"]
32 | }
33 |
34 |
--------------------------------------------------------------------------------
/use-spritesheet/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Ben Follington
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/example/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "example",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@react-three/drei": "^7.22.7",
7 | "@react-three/fiber": "^7.0.19",
8 | "@types/jest": "^26.0.15",
9 | "@types/node": "^12.0.0",
10 | "@types/react": "^17.0.0",
11 | "@types/react-dom": "^17.0.0",
12 | "react": "^17.0.2",
13 | "react-dom": "^17.0.2",
14 | "react-scripts": "^4.0.3",
15 | "three": "0.134.0",
16 | "typescript": "^4.5.2",
17 | "use-spritesheet": "^0.1.0",
18 | "web-vitals": "^1.0.1"
19 | },
20 | "scripts": {
21 | "start": "react-scripts start",
22 | "build": "react-scripts build",
23 | "test": "react-scripts test",
24 | "eject": "react-scripts eject"
25 | },
26 | "eslintConfig": {
27 | "extends": [
28 | "react-app",
29 | "react-app/jest"
30 | ]
31 | },
32 | "browserslist": {
33 | "production": [
34 | ">0.2%",
35 | "not dead",
36 | "not op_mini all"
37 | ],
38 | "development": [
39 | "last 1 chrome version",
40 | "last 1 firefox version",
41 | "last 1 safari version"
42 | ]
43 | },
44 | "devDependencies": {
45 | "@types/three": "^0.134.0"
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/use-spritesheet/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "use-spritesheet",
3 | "version": "0.1.2",
4 | "publishConfig": {
5 | "access": "public"
6 | },
7 | "description": "Bringing spritesheets and aseprite intergration to react-three-fiber",
8 | "keywords": [
9 | "spritesheet",
10 | "pixel art",
11 | "gamedev",
12 | "game development",
13 | "animarion",
14 | "aseprite",
15 | "libresprite",
16 | "react-three-fiber"
17 | ],
18 | "author": "bfollington",
19 | "license": "MIT",
20 | "repository": "bfollington/use-spritesheet",
21 | "main": "lib/index.js",
22 | "types": "lib/",
23 | "files": [
24 | "lib"
25 | ],
26 | "scripts": {
27 | "build": "tsc -p tsconfig.json --outDir lib",
28 | "lint": "eslint src/ --ext .ts,.tsx",
29 | "format": "prettier --write \"src/**/*.{ts,tsx}\""
30 | },
31 | "dependencies": {},
32 | "peerDependencies": {
33 | "@react-three/fiber": "^7.0.19",
34 | "react": "^15.0.0 || ^16.0.0 || ^17.0.0"
35 | },
36 | "devDependencies": {
37 | "@react-three/fiber": "^7.0.19",
38 | "@types/jest": "^24.0.15",
39 | "@types/react": "^17.0.0",
40 | "@types/react-dom": "^17.0.0",
41 | "@types/three": "^0.134.0",
42 | "@typescript-eslint/parser": "^4.25.0",
43 | "eslint-plugin-react": "^7.23.2",
44 | "prettier": "^2.3.0",
45 | "typescript": "^4.3.2"
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/use-spritesheet/src/aseprite.ts:
--------------------------------------------------------------------------------
1 | export type AsepriteFrame = {
2 | frame: {
3 | x: number
4 | y: number
5 | w: number
6 | h: number
7 | }
8 | rotated: boolean
9 | trimmed: boolean
10 | spriteSourceSize: {
11 | x: number
12 | y: number
13 | w: number
14 | h: number
15 | }
16 | sourceSize: {
17 | w: number
18 | h: number
19 | }
20 | duration: number
21 | }
22 |
23 | export type AsepriteLayer = {
24 | name: string
25 | opacity: number
26 | blendMode: string
27 | }
28 |
29 | export type AsepriteFrameTag = {
30 | name: string
31 | from: number
32 | to: number
33 | direction: 'forward' | 'backward'
34 | }
35 |
36 | export type AsepriteJson = {
37 | frames: { [name: string]: AsepriteFrame }
38 | meta: {
39 | app: string
40 | version: string
41 | image: string
42 | format: string
43 | size: {
44 | w: number
45 | h: number
46 | }
47 | frameTags: AsepriteFrameTag[]
48 | layers: AsepriteLayer[]
49 | slices: unknown[]
50 | }
51 | }
52 |
53 | export function frameList(json: AsepriteJson): AsepriteFrame[] {
54 | return Object.values(json.frames)
55 | }
56 |
57 | export function getAnimationFrames(json: AsepriteJson, name: string): AsepriteFrame[] {
58 | const tag = json.meta.frameTags.find((t) => t.name === name)
59 | if (!tag) return []
60 |
61 | const allFrames = frameList(json)
62 | return allFrames.slice(tag.from, tag.to)
63 | }
64 |
--------------------------------------------------------------------------------
/example/src/actors.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { useAseprite } from "use-spritesheet/lib";
3 | import { AsepriteJson } from "use-spritesheet/lib/aseprite";
4 | import gremlinJson from "./resources/bomber.json";
5 | import gremlin from "./resources/bomber.png";
6 | import impoJson from "./resources/impo.json";
7 | import impo from "./resources/impo.png";
8 | import bardJson from "./resources/smiley.json";
9 | import bard from "./resources/smiley.png";
10 |
11 | export const GremlinAseprite = ({
12 | position,
13 | animation = "idle",
14 | paused,
15 | }: any) => {
16 | const [texture] = useAseprite(
17 | gremlin,
18 | gremlinJson as AsepriteJson,
19 | animation,
20 | paused
21 | );
22 |
23 | return (
24 |
25 |
26 |
27 | );
28 | };
29 |
30 | export const ImpoAseprite = ({ position, animation = "idle", paused }: any) => {
31 | const [texture] = useAseprite(
32 | impo,
33 | impoJson as AsepriteJson,
34 | animation,
35 | paused
36 | );
37 |
38 | return (
39 |
40 |
41 |
42 | );
43 | };
44 |
45 | export const SmileyAseprite = ({
46 | position,
47 | animation = "idle",
48 | paused,
49 | }: any) => {
50 | const [texture] = useAseprite(
51 | bard,
52 | bardJson as AsepriteJson,
53 | animation,
54 | paused
55 | );
56 |
57 | return (
58 |
59 |
60 |
61 | );
62 | };
63 |
--------------------------------------------------------------------------------
/example/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
17 |
18 |
27 | React App
28 |
29 |
30 |
31 |
32 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/example/README.md:
--------------------------------------------------------------------------------
1 | # Getting Started with Create React App
2 |
3 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
4 |
5 | ## Available Scripts
6 |
7 | In the project directory, you can run:
8 |
9 | ### `yarn start`
10 |
11 | Runs the app in the development mode.\
12 | Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
13 |
14 | The page will reload if you make edits.\
15 | You will also see any lint errors in the console.
16 |
17 | ### `yarn test`
18 |
19 | Launches the test runner in the interactive watch mode.\
20 | See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
21 |
22 | ### `yarn build`
23 |
24 | Builds the app for production to the `build` folder.\
25 | It correctly bundles React in production mode and optimizes the build for the best performance.
26 |
27 | The build is minified and the filenames include the hashes.\
28 | Your app is ready to be deployed!
29 |
30 | See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
31 |
32 | ### `yarn eject`
33 |
34 | **Note: this is a one-way operation. Once you `eject`, you can’t go back!**
35 |
36 | If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
37 |
38 | Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
39 |
40 | You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
41 |
42 | ## Learn More
43 |
44 | You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
45 |
46 | To learn React, check out the [React documentation](https://reactjs.org/).
47 |
--------------------------------------------------------------------------------
/example/src/resources/impo.json:
--------------------------------------------------------------------------------
1 | { "frames": {
2 | "impo 0.ase": {
3 | "frame": { "x": 0, "y": 0, "w": 36, "h": 36 },
4 | "rotated": false,
5 | "trimmed": false,
6 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
7 | "sourceSize": { "w": 36, "h": 36 },
8 | "duration": 100
9 | },
10 | "impo 1.ase": {
11 | "frame": { "x": 36, "y": 0, "w": 36, "h": 36 },
12 | "rotated": false,
13 | "trimmed": false,
14 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
15 | "sourceSize": { "w": 36, "h": 36 },
16 | "duration": 100
17 | },
18 | "impo 2.ase": {
19 | "frame": { "x": 72, "y": 0, "w": 36, "h": 36 },
20 | "rotated": false,
21 | "trimmed": false,
22 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
23 | "sourceSize": { "w": 36, "h": 36 },
24 | "duration": 100
25 | },
26 | "impo 3.ase": {
27 | "frame": { "x": 108, "y": 0, "w": 36, "h": 36 },
28 | "rotated": false,
29 | "trimmed": false,
30 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
31 | "sourceSize": { "w": 36, "h": 36 },
32 | "duration": 100
33 | },
34 | "impo 4.ase": {
35 | "frame": { "x": 0, "y": 36, "w": 36, "h": 36 },
36 | "rotated": false,
37 | "trimmed": false,
38 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
39 | "sourceSize": { "w": 36, "h": 36 },
40 | "duration": 100
41 | },
42 | "impo 5.ase": {
43 | "frame": { "x": 36, "y": 36, "w": 36, "h": 36 },
44 | "rotated": false,
45 | "trimmed": false,
46 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
47 | "sourceSize": { "w": 36, "h": 36 },
48 | "duration": 100
49 | },
50 | "impo 6.ase": {
51 | "frame": { "x": 72, "y": 36, "w": 36, "h": 36 },
52 | "rotated": false,
53 | "trimmed": false,
54 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
55 | "sourceSize": { "w": 36, "h": 36 },
56 | "duration": 100
57 | },
58 | "impo 7.ase": {
59 | "frame": { "x": 108, "y": 36, "w": 36, "h": 36 },
60 | "rotated": false,
61 | "trimmed": false,
62 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
63 | "sourceSize": { "w": 36, "h": 36 },
64 | "duration": 100
65 | }
66 | },
67 | "meta": {
68 | "app": "http://www.aseprite.org/",
69 | "version": "1.2.15",
70 | "image": "impo.png",
71 | "format": "RGBA8888",
72 | "size": { "w": 144, "h": 72 },
73 | "scale": "1",
74 | "frameTags": [
75 | { "name": "idle", "from": 0, "to": 7, "direction": "forward" }
76 | ],
77 | "layers": [
78 | { "name": "Layer", "opacity": 255, "blendMode": "normal" }
79 | ],
80 | "slices": [
81 | ]
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/example/src/App.tsx:
--------------------------------------------------------------------------------
1 | import { OrbitControls } from "@react-three/drei";
2 | import { Canvas } from "@react-three/fiber";
3 | import React, { Suspense, useState } from "react";
4 | import {
5 | usePixelTexture,
6 | useSpritesheet,
7 | useSpritesheetAnimation,
8 | } from "use-spritesheet/lib";
9 | import { GremlinAseprite, ImpoAseprite, SmileyAseprite } from "./actors";
10 | import frogSrc from "./resources/frog.png";
11 | import smileySrc from "./resources/smiley_idle.png";
12 | import impSrc from "./resources/impo.png";
13 |
14 | const PixelTexture = () => {
15 | const tex = usePixelTexture(frogSrc);
16 |
17 | return (
18 |
19 |
20 |
21 | );
22 | };
23 |
24 | const SpritesheetSingleFrame = () => {
25 | const tex = useSpritesheet(smileySrc, 1, 8, 2);
26 |
27 | return (
28 |
29 |
30 |
31 | );
32 | };
33 |
34 | const SpritesheetAnimation = ({ paused }: { paused: boolean }) => {
35 | const [tex] = useSpritesheetAnimation(impSrc, 100, 2, 4, paused);
36 |
37 | return (
38 |
39 |
40 |
41 | );
42 | };
43 |
44 | const AsepriteImports = ({
45 | paused,
46 | animation,
47 | }: {
48 | paused: boolean;
49 | animation: string;
50 | }) => {
51 | return (
52 |
53 |
58 |
59 |
60 |
61 | );
62 | };
63 |
64 | export default function App() {
65 | const [paused, setPaused] = useState(false);
66 | const [animation, setAnimation] = useState("idle");
67 |
68 | return (
69 | <>
70 |
71 |
72 |
76 |
92 | >
93 | );
94 | }
95 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | [](https://npmjs.com/package/use-spritesheet)
5 | [](https://twitter.com/vivavolt)
6 | [](https://blockchain.com/eth/address/0x981e493b795A7a28c43Bf8d7a8E125C419435Fa7)
7 | 
8 | 
9 | 
10 | [](https://github.com/bfollington/use-spritesheet/actions?query=workflow%3A%22Build%22)
11 |
12 | use-spritesheet is a set of hooks to use pixel art, spritesheets and Aseprite with react-three-fiber in just a few lines of code.
13 |
14 | 👁 Live Demo (source in example)
15 |
16 | # Installation
17 | ```
18 | npm i use-spritesheet
19 | ```
20 |
21 | ```
22 | yarn add use-spritesheet
23 | ```
24 |
25 | # API
26 |
27 | # `usePixelTexture`
28 |
29 | A small time-saver if you want crisp pixels on a texture, sets the texture filter to nearest-neighbour and (optionally) enables wrapping.
30 |
31 | ```tsx
32 | import frogSrc from './resources/frog.png';
33 |
34 | const PixelTexture = () => {
35 | const tex = usePixelTexture(frogSrc);
36 |
37 | return (
38 |
39 |
40 |
41 | );
42 | };
43 | ```
44 |
45 | # `useSpritesheet`
46 |
47 | Perfect for when you have a spritesheet and want to slice out a single frame to display statically (such as an icon from a icon set).
48 |
49 | ```tsx
50 | import smileySrc from './resources/smiley_idle.png';
51 |
52 | const SpritesheetSingleFrame = () => {
53 | // 1 row
54 | // 8 columns
55 | // display frame index 2
56 | const tex = useSpritesheet(smileySrc, 1, 8, 2);
57 |
58 | return (
59 |
60 |
61 |
62 | );
63 | };
64 | ```
65 |
66 | # `useSpritesheetAnimation`
67 |
68 | Play a series of frames that are baked into a single texture, ideal for particle effects.
69 |
70 | ```tsx
71 | import impSrc from './resources/impo.png';
72 |
73 | const SpritesheetAnimation = ({ paused }: { paused: boolean }) => {
74 | // 100ms per frame
75 | // 2 rows
76 | // 4 columns
77 | const [tex] = useSpritesheetAnimation(impSrc, 100, 2, 4, paused);
78 |
79 | return (
80 |
81 |
82 |
83 | );
84 | };
85 | ```
86 |
87 | # `useAsepriteAnimation`
88 |
89 | Import a texture + `json` file exported from [Aseprite](https://www.aseprite.org/), select which animation to play and control playback speed.
90 |
91 | ```tsx
92 | import gremlin from "./resources/bomber.png";
93 | import gremlinJson from "./resources/bomber.json";
94 |
95 | export const AsepriteAnimation = ({
96 | animation = "idle",
97 | paused,
98 | }: any) => {
99 | const [texture] = useAseprite(
100 | gremlin,
101 | gremlinJson as AsepriteJson,
102 | animation, // Changing this parameter automatically switches animations
103 | paused
104 | );
105 |
106 | return (
107 |
108 |
109 |
110 | );
111 | };
112 |
113 | ```
114 |
115 | ## Running this repo
116 |
117 | We make use of `yarn` [workspaces](https://classic.yarnpkg.com/en/docs/workspaces/) to develop the example alongside the library itself.
118 |
119 | ### Bootstrap
120 |
121 | ```
122 | yarn
123 | ```
124 |
125 | ### Running the examples
126 |
127 | ```
128 | cd use-spritesheet
129 | yarn build
130 | cd ../example
131 | yarn start
132 | ```
133 |
--------------------------------------------------------------------------------
/use-spritesheet/src/index.ts:
--------------------------------------------------------------------------------
1 | import { useFrame, useLoader } from "@react-three/fiber";
2 | import { MutableRefObject, useEffect, useMemo, useRef } from "react";
3 | import * as THREE from "three";
4 | import {
5 | AsepriteFrame,
6 | AsepriteJson,
7 | frameList,
8 | getAnimationFrames,
9 | } from "./aseprite";
10 |
11 | /**
12 | * Allow control of speed
13 | * Callback when animation finishes
14 | *
15 | * usePixelTexture -> nearest neighbour
16 | * useSpritesheet -> slice up image, allow indexing
17 | * useSpritesheetAnimation -> play back animation using speed param
18 | * useAseprite -> slice and play animations using aseprite data
19 | */
20 |
21 | export function usePixelTexture(src: string, wrap: boolean = false) {
22 | const tex: THREE.Texture = useLoader(THREE.TextureLoader, src);
23 |
24 | if (wrap) {
25 | tex.wrapS = tex.wrapT = THREE.RepeatWrapping;
26 | }
27 |
28 | tex.minFilter = THREE.NearestFilter;
29 | tex.magFilter = THREE.NearestFilter;
30 | tex.needsUpdate = true;
31 |
32 | return tex;
33 | }
34 |
35 | export function useSpritesheet(
36 | src: string,
37 | rows: number,
38 | columns: number,
39 | currentFrameIndex: number
40 | ): THREE.Texture {
41 | console.assert(Number.isInteger(rows));
42 | console.assert(Number.isInteger(columns));
43 | console.assert(Number.isInteger(currentFrameIndex));
44 | console.assert(rows >= 1);
45 | console.assert(columns >= 1);
46 | console.assert(currentFrameIndex >= 0);
47 |
48 | const texture = useLoader(THREE.TextureLoader, src);
49 | texture.minFilter = THREE.NearestFilter;
50 | texture.magFilter = THREE.NearestFilter;
51 | texture.repeat.set(1 / columns, 1 / rows);
52 |
53 | const totalFrames = rows * columns; // TODO: or override?
54 |
55 | useFrame(() => {
56 | const index = currentFrameIndex % totalFrames;
57 | texture.offset.x = (index % columns) / columns;
58 | texture.offset.y = Math.floor(index / columns) / rows;
59 | });
60 |
61 | return texture;
62 | }
63 |
64 | export function useSpritesheetAnimation(
65 | src: string,
66 | frameDuration: number,
67 | rows: number,
68 | columns: number,
69 | paused: boolean = false
70 | ): [THREE.Texture, MutableRefObject, MutableRefObject] {
71 | console.assert(Number.isInteger(rows));
72 | console.assert(Number.isInteger(columns));
73 | console.assert(rows >= 1);
74 | console.assert(columns >= 1);
75 |
76 | const texture = useLoader(THREE.TextureLoader, src);
77 |
78 | const tex = useMemo(() => {
79 | // We'll be animating this texture independently to all other instances, so clone it
80 | const tex = texture.clone();
81 | tex.minFilter = THREE.NearestFilter;
82 | tex.magFilter = THREE.NearestFilter;
83 | tex.repeat.set(1 / columns, 1 / rows);
84 | tex.needsUpdate = true;
85 |
86 | return tex;
87 | }, [texture, columns, rows]);
88 |
89 | const t = useRef(0);
90 | const index = useRef(0);
91 | const totalFrames = rows * columns;
92 |
93 | useFrame((_, delta) => {
94 | if (!paused) {
95 | t.current += delta * 1000;
96 |
97 | if (t.current >= frameDuration) {
98 | index.current += 1;
99 | if (index.current >= totalFrames) {
100 | index.current = 0;
101 | }
102 |
103 | t.current = 0;
104 | }
105 | }
106 |
107 | // split index into x and y components
108 | tex.offset.x = (index.current % columns) / columns;
109 | tex.offset.y = Math.floor(index.current / columns) / rows;
110 | });
111 |
112 | return [tex, index, t];
113 | }
114 |
115 | /**
116 | * Load an exported set of animations from Asesprite and contol playback
117 | * @param src path to spritesheet texture;
118 | * @param json json data exported from aseprite
119 | * @param currentAnimation the name of the current animation
120 | * @param paused
121 | * @returns [texture, ref internalTimer, ref currentFrameIndex]
122 | */
123 | export function useAseprite(
124 | src: string,
125 | json: AsepriteJson,
126 | currentAnimation: string | null = null,
127 | paused: boolean = false
128 | ): [THREE.Texture, MutableRefObject, MutableRefObject] {
129 | const texture: THREE.Texture = useLoader(THREE.TextureLoader, src);
130 |
131 | const tex = useMemo(() => {
132 | // We'll be animating this texture independently to all other instances, so clone it
133 | const tex = texture.clone();
134 |
135 | tex.wrapS = tex.wrapT = THREE.RepeatWrapping;
136 | tex.minFilter = THREE.NearestFilter;
137 | tex.magFilter = THREE.NearestFilter;
138 | tex.needsUpdate = true;
139 | return tex;
140 | }, [texture]);
141 |
142 | const frames: MutableRefObject = useRef([]);
143 |
144 | const w = json.meta.size.w;
145 | const h = json.meta.size.h;
146 |
147 | const t = useRef(0);
148 | const index = useRef(0);
149 |
150 | useEffect(() => {
151 | t.current = 0;
152 | index.current = 0;
153 |
154 | if (currentAnimation) {
155 | frames.current = getAnimationFrames(json, currentAnimation);
156 | } else {
157 | frames.current = frameList(json);
158 | }
159 | }, [currentAnimation, texture, json]);
160 |
161 | useFrame((_, delta) => {
162 | const f = frames.current[index.current];
163 | if (!f) return;
164 |
165 | tex.repeat.set(f.frame.w / w, f.frame.h / h);
166 |
167 | if (!paused) {
168 | t.current += delta * 1000;
169 |
170 | if (t.current >= f.duration) {
171 | index.current += 1;
172 | if (index.current >= frames.current.length) {
173 | index.current = 0;
174 | }
175 |
176 | t.current = 0;
177 | }
178 | }
179 |
180 | tex.offset.x = f.frame.x / w;
181 | tex.offset.y = f.frame.y / h;
182 | });
183 |
184 | return [tex, index, t];
185 | }
186 |
--------------------------------------------------------------------------------
/example/src/resources/smiley.json:
--------------------------------------------------------------------------------
1 | {
2 | "frames": {
3 | "smiley 0.ase": {
4 | "frame": { "x": 0, "y": 0, "w": 36, "h": 36 },
5 | "rotated": false,
6 | "trimmed": false,
7 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
8 | "sourceSize": { "w": 36, "h": 36 },
9 | "duration": 100
10 | },
11 | "smiley 1.ase": {
12 | "frame": { "x": 36, "y": 0, "w": 36, "h": 36 },
13 | "rotated": false,
14 | "trimmed": false,
15 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
16 | "sourceSize": { "w": 36, "h": 36 },
17 | "duration": 100
18 | },
19 | "smiley 2.ase": {
20 | "frame": { "x": 72, "y": 0, "w": 36, "h": 36 },
21 | "rotated": false,
22 | "trimmed": false,
23 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
24 | "sourceSize": { "w": 36, "h": 36 },
25 | "duration": 100
26 | },
27 | "smiley 3.ase": {
28 | "frame": { "x": 108, "y": 0, "w": 36, "h": 36 },
29 | "rotated": false,
30 | "trimmed": false,
31 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
32 | "sourceSize": { "w": 36, "h": 36 },
33 | "duration": 100
34 | },
35 | "smiley 4.ase": {
36 | "frame": { "x": 144, "y": 0, "w": 36, "h": 36 },
37 | "rotated": false,
38 | "trimmed": false,
39 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
40 | "sourceSize": { "w": 36, "h": 36 },
41 | "duration": 100
42 | },
43 | "smiley 5.ase": {
44 | "frame": { "x": 180, "y": 0, "w": 36, "h": 36 },
45 | "rotated": false,
46 | "trimmed": false,
47 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
48 | "sourceSize": { "w": 36, "h": 36 },
49 | "duration": 100
50 | },
51 | "smiley 6.ase": {
52 | "frame": { "x": 216, "y": 0, "w": 36, "h": 36 },
53 | "rotated": false,
54 | "trimmed": false,
55 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
56 | "sourceSize": { "w": 36, "h": 36 },
57 | "duration": 100
58 | },
59 | "smiley 7.ase": {
60 | "frame": { "x": 252, "y": 0, "w": 36, "h": 36 },
61 | "rotated": false,
62 | "trimmed": false,
63 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
64 | "sourceSize": { "w": 36, "h": 36 },
65 | "duration": 100
66 | },
67 | "smiley 8.ase": {
68 | "frame": { "x": 288, "y": 0, "w": 36, "h": 36 },
69 | "rotated": false,
70 | "trimmed": false,
71 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
72 | "sourceSize": { "w": 36, "h": 36 },
73 | "duration": 100
74 | },
75 | "smiley 9.ase": {
76 | "frame": { "x": 324, "y": 0, "w": 36, "h": 36 },
77 | "rotated": false,
78 | "trimmed": false,
79 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
80 | "sourceSize": { "w": 36, "h": 36 },
81 | "duration": 100
82 | },
83 | "smiley 10.ase": {
84 | "frame": { "x": 360, "y": 0, "w": 36, "h": 36 },
85 | "rotated": false,
86 | "trimmed": false,
87 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
88 | "sourceSize": { "w": 36, "h": 36 },
89 | "duration": 100
90 | },
91 | "smiley 11.ase": {
92 | "frame": { "x": 396, "y": 0, "w": 36, "h": 36 },
93 | "rotated": false,
94 | "trimmed": false,
95 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
96 | "sourceSize": { "w": 36, "h": 36 },
97 | "duration": 100
98 | },
99 | "smiley 12.ase": {
100 | "frame": { "x": 432, "y": 0, "w": 36, "h": 36 },
101 | "rotated": false,
102 | "trimmed": false,
103 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
104 | "sourceSize": { "w": 36, "h": 36 },
105 | "duration": 100
106 | },
107 | "smiley 13.ase": {
108 | "frame": { "x": 468, "y": 0, "w": 36, "h": 36 },
109 | "rotated": false,
110 | "trimmed": false,
111 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
112 | "sourceSize": { "w": 36, "h": 36 },
113 | "duration": 100
114 | },
115 | "smiley 14.ase": {
116 | "frame": { "x": 504, "y": 0, "w": 36, "h": 36 },
117 | "rotated": false,
118 | "trimmed": false,
119 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
120 | "sourceSize": { "w": 36, "h": 36 },
121 | "duration": 100
122 | },
123 | "smiley 15.ase": {
124 | "frame": { "x": 540, "y": 0, "w": 36, "h": 36 },
125 | "rotated": false,
126 | "trimmed": false,
127 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
128 | "sourceSize": { "w": 36, "h": 36 },
129 | "duration": 100
130 | },
131 | "smiley 16.ase": {
132 | "frame": { "x": 576, "y": 0, "w": 36, "h": 36 },
133 | "rotated": false,
134 | "trimmed": false,
135 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
136 | "sourceSize": { "w": 36, "h": 36 },
137 | "duration": 100
138 | },
139 | "smiley 17.ase": {
140 | "frame": { "x": 612, "y": 0, "w": 36, "h": 36 },
141 | "rotated": false,
142 | "trimmed": false,
143 | "spriteSourceSize": { "x": 0, "y": 0, "w": 36, "h": 36 },
144 | "sourceSize": { "w": 36, "h": 36 },
145 | "duration": 100
146 | }
147 | },
148 | "meta": {
149 | "app": "http://www.aseprite.org/",
150 | "version": "1.2.15",
151 | "image": "smiley.png",
152 | "format": "RGBA8888",
153 | "size": { "w": 648, "h": 36 },
154 | "scale": "1",
155 | "frameTags": [
156 | { "name": "idle", "from": 0, "to": 7, "direction": "forward" },
157 | { "name": "wink", "from": 8, "to": 17, "direction": "forward" }
158 | ],
159 | "layers": [
160 | { "name": "Layer", "opacity": 255, "blendMode": "normal" },
161 | { "name": "Layer 1", "opacity": 255, "blendMode": "normal" }
162 | ],
163 | "slices": []
164 | }
165 | }
166 |
--------------------------------------------------------------------------------
/example/src/resources/bomber.json:
--------------------------------------------------------------------------------
1 | { "frames": {
2 | "bomber 0.aseprite": {
3 | "frame": { "x": 0, "y": 0, "w": 40, "h": 40 },
4 | "rotated": false,
5 | "trimmed": false,
6 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
7 | "sourceSize": { "w": 40, "h": 40 },
8 | "duration": 100
9 | },
10 | "bomber 1.aseprite": {
11 | "frame": { "x": 40, "y": 0, "w": 40, "h": 40 },
12 | "rotated": false,
13 | "trimmed": false,
14 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
15 | "sourceSize": { "w": 40, "h": 40 },
16 | "duration": 100
17 | },
18 | "bomber 2.aseprite": {
19 | "frame": { "x": 80, "y": 0, "w": 40, "h": 40 },
20 | "rotated": false,
21 | "trimmed": false,
22 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
23 | "sourceSize": { "w": 40, "h": 40 },
24 | "duration": 100
25 | },
26 | "bomber 3.aseprite": {
27 | "frame": { "x": 120, "y": 0, "w": 40, "h": 40 },
28 | "rotated": false,
29 | "trimmed": false,
30 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
31 | "sourceSize": { "w": 40, "h": 40 },
32 | "duration": 100
33 | },
34 | "bomber 4.aseprite": {
35 | "frame": { "x": 160, "y": 0, "w": 40, "h": 40 },
36 | "rotated": false,
37 | "trimmed": false,
38 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
39 | "sourceSize": { "w": 40, "h": 40 },
40 | "duration": 100
41 | },
42 | "bomber 5.aseprite": {
43 | "frame": { "x": 200, "y": 0, "w": 40, "h": 40 },
44 | "rotated": false,
45 | "trimmed": false,
46 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
47 | "sourceSize": { "w": 40, "h": 40 },
48 | "duration": 100
49 | },
50 | "bomber 6.aseprite": {
51 | "frame": { "x": 240, "y": 0, "w": 40, "h": 40 },
52 | "rotated": false,
53 | "trimmed": false,
54 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
55 | "sourceSize": { "w": 40, "h": 40 },
56 | "duration": 100
57 | },
58 | "bomber 7.aseprite": {
59 | "frame": { "x": 280, "y": 0, "w": 40, "h": 40 },
60 | "rotated": false,
61 | "trimmed": false,
62 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
63 | "sourceSize": { "w": 40, "h": 40 },
64 | "duration": 100
65 | },
66 | "bomber 8.aseprite": {
67 | "frame": { "x": 320, "y": 0, "w": 40, "h": 40 },
68 | "rotated": false,
69 | "trimmed": false,
70 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
71 | "sourceSize": { "w": 40, "h": 40 },
72 | "duration": 50
73 | },
74 | "bomber 9.aseprite": {
75 | "frame": { "x": 360, "y": 0, "w": 40, "h": 40 },
76 | "rotated": false,
77 | "trimmed": false,
78 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
79 | "sourceSize": { "w": 40, "h": 40 },
80 | "duration": 50
81 | },
82 | "bomber 10.aseprite": {
83 | "frame": { "x": 400, "y": 0, "w": 40, "h": 40 },
84 | "rotated": false,
85 | "trimmed": false,
86 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
87 | "sourceSize": { "w": 40, "h": 40 },
88 | "duration": 50
89 | },
90 | "bomber 11.aseprite": {
91 | "frame": { "x": 440, "y": 0, "w": 40, "h": 40 },
92 | "rotated": false,
93 | "trimmed": false,
94 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
95 | "sourceSize": { "w": 40, "h": 40 },
96 | "duration": 50
97 | },
98 | "bomber 12.aseprite": {
99 | "frame": { "x": 480, "y": 0, "w": 40, "h": 40 },
100 | "rotated": false,
101 | "trimmed": false,
102 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
103 | "sourceSize": { "w": 40, "h": 40 },
104 | "duration": 50
105 | },
106 | "bomber 13.aseprite": {
107 | "frame": { "x": 520, "y": 0, "w": 40, "h": 40 },
108 | "rotated": false,
109 | "trimmed": false,
110 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
111 | "sourceSize": { "w": 40, "h": 40 },
112 | "duration": 50
113 | },
114 | "bomber 14.aseprite": {
115 | "frame": { "x": 560, "y": 0, "w": 40, "h": 40 },
116 | "rotated": false,
117 | "trimmed": false,
118 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
119 | "sourceSize": { "w": 40, "h": 40 },
120 | "duration": 50
121 | },
122 | "bomber 15.aseprite": {
123 | "frame": { "x": 600, "y": 0, "w": 40, "h": 40 },
124 | "rotated": false,
125 | "trimmed": false,
126 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
127 | "sourceSize": { "w": 40, "h": 40 },
128 | "duration": 50
129 | },
130 | "bomber 16.aseprite": {
131 | "frame": { "x": 640, "y": 0, "w": 40, "h": 40 },
132 | "rotated": false,
133 | "trimmed": false,
134 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
135 | "sourceSize": { "w": 40, "h": 40 },
136 | "duration": 75
137 | },
138 | "bomber 17.aseprite": {
139 | "frame": { "x": 680, "y": 0, "w": 40, "h": 40 },
140 | "rotated": false,
141 | "trimmed": false,
142 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
143 | "sourceSize": { "w": 40, "h": 40 },
144 | "duration": 75
145 | },
146 | "bomber 18.aseprite": {
147 | "frame": { "x": 720, "y": 0, "w": 40, "h": 40 },
148 | "rotated": false,
149 | "trimmed": false,
150 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
151 | "sourceSize": { "w": 40, "h": 40 },
152 | "duration": 75
153 | },
154 | "bomber 19.aseprite": {
155 | "frame": { "x": 760, "y": 0, "w": 40, "h": 40 },
156 | "rotated": false,
157 | "trimmed": false,
158 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
159 | "sourceSize": { "w": 40, "h": 40 },
160 | "duration": 75
161 | },
162 | "bomber 20.aseprite": {
163 | "frame": { "x": 800, "y": 0, "w": 40, "h": 40 },
164 | "rotated": false,
165 | "trimmed": false,
166 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
167 | "sourceSize": { "w": 40, "h": 40 },
168 | "duration": 75
169 | },
170 | "bomber 21.aseprite": {
171 | "frame": { "x": 840, "y": 0, "w": 40, "h": 40 },
172 | "rotated": false,
173 | "trimmed": false,
174 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
175 | "sourceSize": { "w": 40, "h": 40 },
176 | "duration": 75
177 | },
178 | "bomber 22.aseprite": {
179 | "frame": { "x": 880, "y": 0, "w": 40, "h": 40 },
180 | "rotated": false,
181 | "trimmed": false,
182 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
183 | "sourceSize": { "w": 40, "h": 40 },
184 | "duration": 100
185 | },
186 | "bomber 23.aseprite": {
187 | "frame": { "x": 920, "y": 0, "w": 40, "h": 40 },
188 | "rotated": false,
189 | "trimmed": false,
190 | "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
191 | "sourceSize": { "w": 40, "h": 40 },
192 | "duration": 100
193 | }
194 | },
195 | "meta": {
196 | "app": "http://www.aseprite.org/",
197 | "version": "1.2.15",
198 | "image": "bomber.png",
199 | "format": "RGBA8888",
200 | "size": { "w": 960, "h": 40 },
201 | "scale": "1",
202 | "frameTags": [
203 | { "name": "idle", "from": 0, "to": 5, "direction": "forward" },
204 | { "name": "boom", "from": 6, "to": 23, "direction": "forward" }
205 | ],
206 | "layers": [
207 | { "name": "Layer 1", "opacity": 255, "blendMode": "normal" }
208 | ],
209 | "slices": [
210 | ]
211 | }
212 | }
213 |
--------------------------------------------------------------------------------
/use-spritesheet/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/runtime@^7.13.10":
6 | version "7.16.3"
7 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5"
8 | integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==
9 | dependencies:
10 | regenerator-runtime "^0.13.4"
11 |
12 | "@jest/types@^24.9.0":
13 | version "24.9.0"
14 | resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59"
15 | integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==
16 | dependencies:
17 | "@types/istanbul-lib-coverage" "^2.0.0"
18 | "@types/istanbul-reports" "^1.1.1"
19 | "@types/yargs" "^13.0.0"
20 |
21 | "@nodelib/fs.scandir@2.1.4":
22 | version "2.1.4"
23 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69"
24 | integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==
25 | dependencies:
26 | "@nodelib/fs.stat" "2.0.4"
27 | run-parallel "^1.1.9"
28 |
29 | "@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2":
30 | version "2.0.4"
31 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655"
32 | integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==
33 |
34 | "@nodelib/fs.walk@^1.2.3":
35 | version "1.2.6"
36 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063"
37 | integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==
38 | dependencies:
39 | "@nodelib/fs.scandir" "2.1.4"
40 | fastq "^1.6.0"
41 |
42 | "@react-three/fiber@^7.0.19":
43 | version "7.0.19"
44 | resolved "https://registry.yarnpkg.com/@react-three/fiber/-/fiber-7.0.19.tgz#28a2eb2c9a93b75dfde227c4cbd77882f2dad9e8"
45 | integrity sha512-R3/HTMJjjYhJXJu3U3JJ8bmLxv0X+y6/jNBkHm+wSWTFbXkWnKYzWbHkMVMzVesKyyQK1HBP6ZoJVNG+EzM9PA==
46 | dependencies:
47 | "@babel/runtime" "^7.13.10"
48 | react-merge-refs "^1.1.0"
49 | react-reconciler "^0.26.2"
50 | react-three-fiber "0.0.0-deprecated"
51 | react-use-measure "^2.0.4"
52 | resize-observer-polyfill "^1.5.1"
53 | scheduler "^0.20.2"
54 | use-asset "^1.0.4"
55 | utility-types "^3.10.0"
56 | zustand "^3.5.1"
57 |
58 | "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
59 | version "2.0.1"
60 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff"
61 | integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==
62 |
63 | "@types/istanbul-lib-report@*":
64 | version "1.1.1"
65 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#e5471e7fa33c61358dd38426189c037a58433b8c"
66 | integrity sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==
67 | dependencies:
68 | "@types/istanbul-lib-coverage" "*"
69 |
70 | "@types/istanbul-reports@^1.1.1":
71 | version "1.1.1"
72 | resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a"
73 | integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==
74 | dependencies:
75 | "@types/istanbul-lib-coverage" "*"
76 | "@types/istanbul-lib-report" "*"
77 |
78 | "@types/jest@^24.0.15":
79 | version "24.0.23"
80 | resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.23.tgz#046f8e2ade026fe831623e361a36b6fb9a4463e4"
81 | integrity sha512-L7MBvwfNpe7yVPTXLn32df/EK+AMBFAFvZrRuArGs7npEWnlziUXK+5GMIUTI4NIuwok3XibsjXCs5HxviYXjg==
82 | dependencies:
83 | jest-diff "^24.3.0"
84 |
85 | "@types/prop-types@*":
86 | version "15.7.3"
87 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7"
88 | integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==
89 |
90 | "@types/react-dom@^17.0.0":
91 | version "17.0.5"
92 | resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.5.tgz#df44eed5b8d9e0b13bb0cd38e0ea6572a1231227"
93 | integrity sha512-ikqukEhH4H9gr4iJCmQVNzTB307kROe3XFfHAOTxOXPOw7lAoEXnM5KWTkzeANGL5Ce6ABfiMl/zJBYNi7ObmQ==
94 | dependencies:
95 | "@types/react" "*"
96 |
97 | "@types/react@*":
98 | version "16.9.11"
99 | resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.11.tgz#70e0b7ad79058a7842f25ccf2999807076ada120"
100 | integrity sha512-UBT4GZ3PokTXSWmdgC/GeCGEJXE5ofWyibCcecRLUVN2ZBpXQGVgQGtG2foS7CrTKFKlQVVswLvf7Js6XA/CVQ==
101 | dependencies:
102 | "@types/prop-types" "*"
103 | csstype "^2.2.0"
104 |
105 | "@types/react@^17.0.0":
106 | version "17.0.8"
107 | resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.8.tgz#fe76e3ba0fbb5602704110fd1e3035cf394778e3"
108 | integrity sha512-3sx4c0PbXujrYAKwXxNONXUtRp9C+hE2di0IuxFyf5BELD+B+AXL8G7QrmSKhVwKZDbv0igiAjQAMhXj8Yg3aw==
109 | dependencies:
110 | "@types/prop-types" "*"
111 | "@types/scheduler" "*"
112 | csstype "^3.0.2"
113 |
114 | "@types/scheduler@*":
115 | version "0.16.1"
116 | resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275"
117 | integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==
118 |
119 | "@types/three@^0.134.0":
120 | version "0.134.0"
121 | resolved "https://registry.yarnpkg.com/@types/three/-/three-0.134.0.tgz#22ae9892f4490faaf35f0ccea127df18407b8ab3"
122 | integrity sha512-4YB+99Rgqq27EjiYTItEoZtdjLnTh8W9LxowgpC9eWsjaQJIL4Kn/ZcUKAnW3gB/jS4hqGN8iqmid+RcUZDzpA==
123 |
124 | "@types/yargs-parser@*":
125 | version "13.1.0"
126 | resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228"
127 | integrity sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==
128 |
129 | "@types/yargs@^13.0.0":
130 | version "13.0.3"
131 | resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.3.tgz#76482af3981d4412d65371a318f992d33464a380"
132 | integrity sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ==
133 | dependencies:
134 | "@types/yargs-parser" "*"
135 |
136 | "@typescript-eslint/parser@^4.25.0":
137 | version "4.25.0"
138 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.25.0.tgz#6b2cb6285aa3d55bfb263c650739091b0f19aceb"
139 | integrity sha512-OZFa1SKyEJpAhDx8FcbWyX+vLwh7OEtzoo2iQaeWwxucyfbi0mT4DijbOSsTgPKzGHr6GrF2V5p/CEpUH/VBxg==
140 | dependencies:
141 | "@typescript-eslint/scope-manager" "4.25.0"
142 | "@typescript-eslint/types" "4.25.0"
143 | "@typescript-eslint/typescript-estree" "4.25.0"
144 | debug "^4.1.1"
145 |
146 | "@typescript-eslint/scope-manager@4.25.0":
147 | version "4.25.0"
148 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.25.0.tgz#9d86a5bcc46ef40acd03d85ad4e908e5aab8d4ca"
149 | integrity sha512-2NElKxMb/0rya+NJG1U71BuNnp1TBd1JgzYsldsdA83h/20Tvnf/HrwhiSlNmuq6Vqa0EzidsvkTArwoq+tH6w==
150 | dependencies:
151 | "@typescript-eslint/types" "4.25.0"
152 | "@typescript-eslint/visitor-keys" "4.25.0"
153 |
154 | "@typescript-eslint/types@4.25.0":
155 | version "4.25.0"
156 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.25.0.tgz#0e444a5c5e3c22d7ffa5e16e0e60510b3de5af87"
157 | integrity sha512-+CNINNvl00OkW6wEsi32wU5MhHti2J25TJsJJqgQmJu3B3dYDBcmOxcE5w9cgoM13TrdE/5ND2HoEnBohasxRQ==
158 |
159 | "@typescript-eslint/typescript-estree@4.25.0":
160 | version "4.25.0"
161 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.25.0.tgz#942e4e25888736bff5b360d9b0b61e013d0cfa25"
162 | integrity sha512-1B8U07TGNAFMxZbSpF6jqiDs1cVGO0izVkf18Q/SPcUAc9LhHxzvSowXDTvkHMWUVuPpagupaW63gB6ahTXVlg==
163 | dependencies:
164 | "@typescript-eslint/types" "4.25.0"
165 | "@typescript-eslint/visitor-keys" "4.25.0"
166 | debug "^4.1.1"
167 | globby "^11.0.1"
168 | is-glob "^4.0.1"
169 | semver "^7.3.2"
170 | tsutils "^3.17.1"
171 |
172 | "@typescript-eslint/visitor-keys@4.25.0":
173 | version "4.25.0"
174 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.25.0.tgz#863e7ed23da4287c5b469b13223255d0fde6aaa7"
175 | integrity sha512-AmkqV9dDJVKP/TcZrbf6s6i1zYXt5Hl8qOLrRDTFfRNae4+LB8A4N3i+FLZPW85zIxRy39BgeWOfMS3HoH5ngg==
176 | dependencies:
177 | "@typescript-eslint/types" "4.25.0"
178 | eslint-visitor-keys "^2.0.0"
179 |
180 | ansi-regex@^4.0.0:
181 | version "4.1.0"
182 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
183 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
184 |
185 | ansi-styles@^3.2.0, ansi-styles@^3.2.1:
186 | version "3.2.1"
187 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
188 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
189 | dependencies:
190 | color-convert "^1.9.0"
191 |
192 | array-includes@^3.1.2, array-includes@^3.1.3:
193 | version "3.1.3"
194 | resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a"
195 | integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==
196 | dependencies:
197 | call-bind "^1.0.2"
198 | define-properties "^1.1.3"
199 | es-abstract "^1.18.0-next.2"
200 | get-intrinsic "^1.1.1"
201 | is-string "^1.0.5"
202 |
203 | array-union@^2.1.0:
204 | version "2.1.0"
205 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
206 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
207 |
208 | array.prototype.flatmap@^1.2.4:
209 | version "1.2.4"
210 | resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9"
211 | integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==
212 | dependencies:
213 | call-bind "^1.0.0"
214 | define-properties "^1.1.3"
215 | es-abstract "^1.18.0-next.1"
216 | function-bind "^1.1.1"
217 |
218 | balanced-match@^1.0.0:
219 | version "1.0.0"
220 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
221 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
222 |
223 | brace-expansion@^1.1.7:
224 | version "1.1.11"
225 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
226 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
227 | dependencies:
228 | balanced-match "^1.0.0"
229 | concat-map "0.0.1"
230 |
231 | braces@^3.0.1:
232 | version "3.0.2"
233 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
234 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
235 | dependencies:
236 | fill-range "^7.0.1"
237 |
238 | call-bind@^1.0.0, call-bind@^1.0.2:
239 | version "1.0.2"
240 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
241 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
242 | dependencies:
243 | function-bind "^1.1.1"
244 | get-intrinsic "^1.0.2"
245 |
246 | chalk@^2.0.1:
247 | version "2.4.2"
248 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
249 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
250 | dependencies:
251 | ansi-styles "^3.2.1"
252 | escape-string-regexp "^1.0.5"
253 | supports-color "^5.3.0"
254 |
255 | color-convert@^1.9.0:
256 | version "1.9.3"
257 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
258 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
259 | dependencies:
260 | color-name "1.1.3"
261 |
262 | color-name@1.1.3:
263 | version "1.1.3"
264 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
265 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
266 |
267 | concat-map@0.0.1:
268 | version "0.0.1"
269 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
270 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
271 |
272 | csstype@^2.2.0:
273 | version "2.6.7"
274 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.7.tgz#20b0024c20b6718f4eda3853a1f5a1cce7f5e4a5"
275 | integrity sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ==
276 |
277 | csstype@^3.0.2:
278 | version "3.0.8"
279 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340"
280 | integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==
281 |
282 | debounce@^1.2.0:
283 | version "1.2.1"
284 | resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5"
285 | integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==
286 |
287 | debug@^4.1.1:
288 | version "4.1.1"
289 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
290 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
291 | dependencies:
292 | ms "^2.1.1"
293 |
294 | define-properties@^1.1.3:
295 | version "1.1.3"
296 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
297 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
298 | dependencies:
299 | object-keys "^1.0.12"
300 |
301 | diff-sequences@^24.9.0:
302 | version "24.9.0"
303 | resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5"
304 | integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==
305 |
306 | dir-glob@^3.0.1:
307 | version "3.0.1"
308 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
309 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
310 | dependencies:
311 | path-type "^4.0.0"
312 |
313 | doctrine@^2.1.0:
314 | version "2.1.0"
315 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
316 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
317 | dependencies:
318 | esutils "^2.0.2"
319 |
320 | es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2:
321 | version "1.18.3"
322 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0"
323 | integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==
324 | dependencies:
325 | call-bind "^1.0.2"
326 | es-to-primitive "^1.2.1"
327 | function-bind "^1.1.1"
328 | get-intrinsic "^1.1.1"
329 | has "^1.0.3"
330 | has-symbols "^1.0.2"
331 | is-callable "^1.2.3"
332 | is-negative-zero "^2.0.1"
333 | is-regex "^1.1.3"
334 | is-string "^1.0.6"
335 | object-inspect "^1.10.3"
336 | object-keys "^1.1.1"
337 | object.assign "^4.1.2"
338 | string.prototype.trimend "^1.0.4"
339 | string.prototype.trimstart "^1.0.4"
340 | unbox-primitive "^1.0.1"
341 |
342 | es-to-primitive@^1.2.1:
343 | version "1.2.1"
344 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
345 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
346 | dependencies:
347 | is-callable "^1.1.4"
348 | is-date-object "^1.0.1"
349 | is-symbol "^1.0.2"
350 |
351 | escape-string-regexp@^1.0.5:
352 | version "1.0.5"
353 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
354 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
355 |
356 | eslint-plugin-react@^7.23.2:
357 | version "7.23.2"
358 | resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz#2d2291b0f95c03728b55869f01102290e792d494"
359 | integrity sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==
360 | dependencies:
361 | array-includes "^3.1.3"
362 | array.prototype.flatmap "^1.2.4"
363 | doctrine "^2.1.0"
364 | has "^1.0.3"
365 | jsx-ast-utils "^2.4.1 || ^3.0.0"
366 | minimatch "^3.0.4"
367 | object.entries "^1.1.3"
368 | object.fromentries "^2.0.4"
369 | object.values "^1.1.3"
370 | prop-types "^15.7.2"
371 | resolve "^2.0.0-next.3"
372 | string.prototype.matchall "^4.0.4"
373 |
374 | eslint-visitor-keys@^2.0.0:
375 | version "2.1.0"
376 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
377 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
378 |
379 | esutils@^2.0.2:
380 | version "2.0.3"
381 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
382 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
383 |
384 | fast-deep-equal@^3.1.3:
385 | version "3.1.3"
386 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
387 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
388 |
389 | fast-glob@^3.1.1:
390 | version "3.2.5"
391 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661"
392 | integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==
393 | dependencies:
394 | "@nodelib/fs.stat" "^2.0.2"
395 | "@nodelib/fs.walk" "^1.2.3"
396 | glob-parent "^5.1.0"
397 | merge2 "^1.3.0"
398 | micromatch "^4.0.2"
399 | picomatch "^2.2.1"
400 |
401 | fastq@^1.6.0:
402 | version "1.11.0"
403 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858"
404 | integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==
405 | dependencies:
406 | reusify "^1.0.4"
407 |
408 | fill-range@^7.0.1:
409 | version "7.0.1"
410 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
411 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
412 | dependencies:
413 | to-regex-range "^5.0.1"
414 |
415 | function-bind@^1.1.1:
416 | version "1.1.1"
417 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
418 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
419 |
420 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
421 | version "1.1.1"
422 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
423 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
424 | dependencies:
425 | function-bind "^1.1.1"
426 | has "^1.0.3"
427 | has-symbols "^1.0.1"
428 |
429 | glob-parent@^5.1.0:
430 | version "5.1.2"
431 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
432 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
433 | dependencies:
434 | is-glob "^4.0.1"
435 |
436 | globby@^11.0.1:
437 | version "11.0.3"
438 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb"
439 | integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==
440 | dependencies:
441 | array-union "^2.1.0"
442 | dir-glob "^3.0.1"
443 | fast-glob "^3.1.1"
444 | ignore "^5.1.4"
445 | merge2 "^1.3.0"
446 | slash "^3.0.0"
447 |
448 | has-bigints@^1.0.1:
449 | version "1.0.1"
450 | resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113"
451 | integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==
452 |
453 | has-flag@^3.0.0:
454 | version "3.0.0"
455 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
456 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
457 |
458 | has-symbols@^1.0.0:
459 | version "1.0.0"
460 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
461 | integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
462 |
463 | has-symbols@^1.0.1, has-symbols@^1.0.2:
464 | version "1.0.2"
465 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
466 | integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
467 |
468 | has@^1.0.3:
469 | version "1.0.3"
470 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
471 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
472 | dependencies:
473 | function-bind "^1.1.1"
474 |
475 | ignore@^5.1.4:
476 | version "5.1.8"
477 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
478 | integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
479 |
480 | internal-slot@^1.0.3:
481 | version "1.0.3"
482 | resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"
483 | integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==
484 | dependencies:
485 | get-intrinsic "^1.1.0"
486 | has "^1.0.3"
487 | side-channel "^1.0.4"
488 |
489 | is-bigint@^1.0.1:
490 | version "1.0.2"
491 | resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a"
492 | integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==
493 |
494 | is-boolean-object@^1.1.0:
495 | version "1.1.1"
496 | resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8"
497 | integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==
498 | dependencies:
499 | call-bind "^1.0.2"
500 |
501 | is-callable@^1.1.4:
502 | version "1.1.4"
503 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
504 | integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
505 |
506 | is-callable@^1.2.3:
507 | version "1.2.3"
508 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e"
509 | integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==
510 |
511 | is-core-module@^2.2.0:
512 | version "2.4.0"
513 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1"
514 | integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==
515 | dependencies:
516 | has "^1.0.3"
517 |
518 | is-date-object@^1.0.1:
519 | version "1.0.1"
520 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
521 | integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
522 |
523 | is-extglob@^2.1.1:
524 | version "2.1.1"
525 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
526 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
527 |
528 | is-glob@^4.0.1:
529 | version "4.0.1"
530 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
531 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
532 | dependencies:
533 | is-extglob "^2.1.1"
534 |
535 | is-negative-zero@^2.0.1:
536 | version "2.0.1"
537 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"
538 | integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==
539 |
540 | is-number-object@^1.0.4:
541 | version "1.0.5"
542 | resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb"
543 | integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==
544 |
545 | is-number@^7.0.0:
546 | version "7.0.0"
547 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
548 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
549 |
550 | is-regex@^1.1.3:
551 | version "1.1.3"
552 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f"
553 | integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==
554 | dependencies:
555 | call-bind "^1.0.2"
556 | has-symbols "^1.0.2"
557 |
558 | is-string@^1.0.5, is-string@^1.0.6:
559 | version "1.0.6"
560 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f"
561 | integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==
562 |
563 | is-symbol@^1.0.2:
564 | version "1.0.2"
565 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
566 | integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
567 | dependencies:
568 | has-symbols "^1.0.0"
569 |
570 | is-symbol@^1.0.3:
571 | version "1.0.4"
572 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
573 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
574 | dependencies:
575 | has-symbols "^1.0.2"
576 |
577 | jest-diff@^24.3.0:
578 | version "24.9.0"
579 | resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da"
580 | integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==
581 | dependencies:
582 | chalk "^2.0.1"
583 | diff-sequences "^24.9.0"
584 | jest-get-type "^24.9.0"
585 | pretty-format "^24.9.0"
586 |
587 | jest-get-type@^24.9.0:
588 | version "24.9.0"
589 | resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e"
590 | integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==
591 |
592 | "js-tokens@^3.0.0 || ^4.0.0":
593 | version "4.0.0"
594 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
595 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
596 |
597 | "jsx-ast-utils@^2.4.1 || ^3.0.0":
598 | version "3.2.0"
599 | resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82"
600 | integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==
601 | dependencies:
602 | array-includes "^3.1.2"
603 | object.assign "^4.1.2"
604 |
605 | loose-envify@^1.1.0, loose-envify@^1.4.0:
606 | version "1.4.0"
607 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
608 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
609 | dependencies:
610 | js-tokens "^3.0.0 || ^4.0.0"
611 |
612 | lru-cache@^6.0.0:
613 | version "6.0.0"
614 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
615 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
616 | dependencies:
617 | yallist "^4.0.0"
618 |
619 | merge2@^1.3.0:
620 | version "1.4.1"
621 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
622 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
623 |
624 | micromatch@^4.0.2:
625 | version "4.0.4"
626 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
627 | integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
628 | dependencies:
629 | braces "^3.0.1"
630 | picomatch "^2.2.3"
631 |
632 | minimatch@^3.0.4:
633 | version "3.0.4"
634 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
635 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
636 | dependencies:
637 | brace-expansion "^1.1.7"
638 |
639 | ms@^2.1.1:
640 | version "2.1.2"
641 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
642 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
643 |
644 | object-assign@^4.1.1:
645 | version "4.1.1"
646 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
647 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
648 |
649 | object-inspect@^1.10.3, object-inspect@^1.9.0:
650 | version "1.10.3"
651 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369"
652 | integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==
653 |
654 | object-keys@^1.0.12, object-keys@^1.1.1:
655 | version "1.1.1"
656 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
657 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
658 |
659 | object.assign@^4.1.2:
660 | version "4.1.2"
661 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
662 | integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
663 | dependencies:
664 | call-bind "^1.0.0"
665 | define-properties "^1.1.3"
666 | has-symbols "^1.0.1"
667 | object-keys "^1.1.1"
668 |
669 | object.entries@^1.1.3:
670 | version "1.1.4"
671 | resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.4.tgz#43ccf9a50bc5fd5b649d45ab1a579f24e088cafd"
672 | integrity sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==
673 | dependencies:
674 | call-bind "^1.0.2"
675 | define-properties "^1.1.3"
676 | es-abstract "^1.18.2"
677 |
678 | object.fromentries@^2.0.4:
679 | version "2.0.4"
680 | resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8"
681 | integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==
682 | dependencies:
683 | call-bind "^1.0.2"
684 | define-properties "^1.1.3"
685 | es-abstract "^1.18.0-next.2"
686 | has "^1.0.3"
687 |
688 | object.values@^1.1.3:
689 | version "1.1.4"
690 | resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30"
691 | integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==
692 | dependencies:
693 | call-bind "^1.0.2"
694 | define-properties "^1.1.3"
695 | es-abstract "^1.18.2"
696 |
697 | path-parse@^1.0.6:
698 | version "1.0.6"
699 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
700 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
701 |
702 | path-type@^4.0.0:
703 | version "4.0.0"
704 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
705 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
706 |
707 | picomatch@^2.2.1, picomatch@^2.2.3:
708 | version "2.3.0"
709 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
710 | integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
711 |
712 | prettier@^2.3.0:
713 | version "2.3.0"
714 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.0.tgz#b6a5bf1284026ae640f17f7ff5658a7567fc0d18"
715 | integrity sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==
716 |
717 | pretty-format@^24.9.0:
718 | version "24.9.0"
719 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9"
720 | integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==
721 | dependencies:
722 | "@jest/types" "^24.9.0"
723 | ansi-regex "^4.0.0"
724 | ansi-styles "^3.2.0"
725 | react-is "^16.8.4"
726 |
727 | prop-types@^15.7.2:
728 | version "15.7.2"
729 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
730 | integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
731 | dependencies:
732 | loose-envify "^1.4.0"
733 | object-assign "^4.1.1"
734 | react-is "^16.8.1"
735 |
736 | queue-microtask@^1.2.2:
737 | version "1.2.3"
738 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
739 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
740 |
741 | react-is@^16.8.1, react-is@^16.8.4:
742 | version "16.12.0"
743 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c"
744 | integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==
745 |
746 | react-merge-refs@^1.1.0:
747 | version "1.1.0"
748 | resolved "https://registry.yarnpkg.com/react-merge-refs/-/react-merge-refs-1.1.0.tgz#73d88b892c6c68cbb7a66e0800faa374f4c38b06"
749 | integrity sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ==
750 |
751 | react-reconciler@^0.26.2:
752 | version "0.26.2"
753 | resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.26.2.tgz#bbad0e2d1309423f76cf3c3309ac6c96e05e9d91"
754 | integrity sha512-nK6kgY28HwrMNwDnMui3dvm3rCFjZrcGiuwLc5COUipBK5hWHLOxMJhSnSomirqWwjPBJKV1QcbkI0VJr7Gl1Q==
755 | dependencies:
756 | loose-envify "^1.1.0"
757 | object-assign "^4.1.1"
758 | scheduler "^0.20.2"
759 |
760 | react-three-fiber@0.0.0-deprecated:
761 | version "0.0.0-deprecated"
762 | resolved "https://registry.yarnpkg.com/react-three-fiber/-/react-three-fiber-0.0.0-deprecated.tgz#c737242487d824cf9520307308b7e4c4071a278f"
763 | integrity sha512-EblIqTAsIpkYeM8bZtC4lcpTE0A2zCEGipFB52RgcQq/q+0oryrk7Sxt+sqhIjUu6xMNEVywV8dr74lz5yWO6A==
764 |
765 | react-use-measure@^2.0.4:
766 | version "2.0.4"
767 | resolved "https://registry.yarnpkg.com/react-use-measure/-/react-use-measure-2.0.4.tgz#cb675b36eaeaf3681b94d5f5e08b2a1e081fedc9"
768 | integrity sha512-7K2HIGaPMl3Q9ZQiEVjen3tRXl4UDda8LiTPy/QxP8dP2rl5gPBhf7mMH6MVjjRNv3loU7sNzey/ycPNnHVTxQ==
769 | dependencies:
770 | debounce "^1.2.0"
771 |
772 | regenerator-runtime@^0.13.4:
773 | version "0.13.9"
774 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
775 | integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
776 |
777 | regexp.prototype.flags@^1.3.1:
778 | version "1.3.1"
779 | resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26"
780 | integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==
781 | dependencies:
782 | call-bind "^1.0.2"
783 | define-properties "^1.1.3"
784 |
785 | resize-observer-polyfill@^1.5.1:
786 | version "1.5.1"
787 | resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
788 | integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
789 |
790 | resolve@^2.0.0-next.3:
791 | version "2.0.0-next.3"
792 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46"
793 | integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==
794 | dependencies:
795 | is-core-module "^2.2.0"
796 | path-parse "^1.0.6"
797 |
798 | reusify@^1.0.4:
799 | version "1.0.4"
800 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
801 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
802 |
803 | run-parallel@^1.1.9:
804 | version "1.2.0"
805 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
806 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
807 | dependencies:
808 | queue-microtask "^1.2.2"
809 |
810 | scheduler@^0.20.2:
811 | version "0.20.2"
812 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91"
813 | integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==
814 | dependencies:
815 | loose-envify "^1.1.0"
816 | object-assign "^4.1.1"
817 |
818 | semver@^7.3.2:
819 | version "7.3.5"
820 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
821 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
822 | dependencies:
823 | lru-cache "^6.0.0"
824 |
825 | side-channel@^1.0.4:
826 | version "1.0.4"
827 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
828 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
829 | dependencies:
830 | call-bind "^1.0.0"
831 | get-intrinsic "^1.0.2"
832 | object-inspect "^1.9.0"
833 |
834 | slash@^3.0.0:
835 | version "3.0.0"
836 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
837 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
838 |
839 | string.prototype.matchall@^4.0.4:
840 | version "4.0.5"
841 | resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da"
842 | integrity sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==
843 | dependencies:
844 | call-bind "^1.0.2"
845 | define-properties "^1.1.3"
846 | es-abstract "^1.18.2"
847 | get-intrinsic "^1.1.1"
848 | has-symbols "^1.0.2"
849 | internal-slot "^1.0.3"
850 | regexp.prototype.flags "^1.3.1"
851 | side-channel "^1.0.4"
852 |
853 | string.prototype.trimend@^1.0.4:
854 | version "1.0.4"
855 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80"
856 | integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==
857 | dependencies:
858 | call-bind "^1.0.2"
859 | define-properties "^1.1.3"
860 |
861 | string.prototype.trimstart@^1.0.4:
862 | version "1.0.4"
863 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed"
864 | integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==
865 | dependencies:
866 | call-bind "^1.0.2"
867 | define-properties "^1.1.3"
868 |
869 | supports-color@^5.3.0:
870 | version "5.5.0"
871 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
872 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
873 | dependencies:
874 | has-flag "^3.0.0"
875 |
876 | to-regex-range@^5.0.1:
877 | version "5.0.1"
878 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
879 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
880 | dependencies:
881 | is-number "^7.0.0"
882 |
883 | tslib@^1.8.1:
884 | version "1.10.0"
885 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
886 | integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
887 |
888 | tsutils@^3.17.1:
889 | version "3.17.1"
890 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759"
891 | integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==
892 | dependencies:
893 | tslib "^1.8.1"
894 |
895 | typescript@^4.3.2:
896 | version "4.3.2"
897 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.2.tgz#399ab18aac45802d6f2498de5054fcbbe716a805"
898 | integrity sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==
899 |
900 | unbox-primitive@^1.0.1:
901 | version "1.0.1"
902 | resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"
903 | integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==
904 | dependencies:
905 | function-bind "^1.1.1"
906 | has-bigints "^1.0.1"
907 | has-symbols "^1.0.2"
908 | which-boxed-primitive "^1.0.2"
909 |
910 | use-asset@^1.0.4:
911 | version "1.0.4"
912 | resolved "https://registry.yarnpkg.com/use-asset/-/use-asset-1.0.4.tgz#506caafc29f602890593799e58b577b70293a6e2"
913 | integrity sha512-7/hqDrWa0iMnCoET9W1T07EmD4Eg/Wmoj/X8TGBc++ECRK4m5yTsjP4O6s0yagbxfqIOuUkIxe2/sA+VR2GxZA==
914 | dependencies:
915 | fast-deep-equal "^3.1.3"
916 |
917 | utility-types@^3.10.0:
918 | version "3.10.0"
919 | resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b"
920 | integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==
921 |
922 | which-boxed-primitive@^1.0.2:
923 | version "1.0.2"
924 | resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
925 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
926 | dependencies:
927 | is-bigint "^1.0.1"
928 | is-boolean-object "^1.1.0"
929 | is-number-object "^1.0.4"
930 | is-string "^1.0.5"
931 | is-symbol "^1.0.3"
932 |
933 | yallist@^4.0.0:
934 | version "4.0.0"
935 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
936 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
937 |
938 | zustand@^3.5.1:
939 | version "3.6.5"
940 | resolved "https://registry.yarnpkg.com/zustand/-/zustand-3.6.5.tgz#42a459397907d6bf0e2375351394733b2f83ee44"
941 | integrity sha512-/WfLJuXiEJimt61KGMHebrFBwckkCHGhAgVXTgPQHl6IMzjqm6MREb1OnDSnCRiSmRdhgdFCctceg6tSm79hiw==
942 |
--------------------------------------------------------------------------------