diff --git a/docs/.vitepress/config.js b/docs/.vitepress/config.js
index aad908db..5e0d0a50 100644
--- a/docs/.vitepress/config.js
+++ b/docs/.vitepress/config.js
@@ -125,16 +125,30 @@ const guideMenu = [{
]
},
{
- text: 'GUI Creation',
+ text: 'GUI',
collapsed: false,
items: [
{ text: "Customizing Your Theme", link: "/gui/theme" },
{ text: "Reusing GUI Components", link: "/gui/reuse-gui" },
{ text: "Creating Notifications in Your GUI", link: "/gui/notification-gui" },
+ ]
+},
+{
+ text: 'Create GUI with VueJS',
+ collapsed: false,
+ items: [
{ text: "Creating Your Own GUI", link: "/guide/create-gui" },
{ text: "Adding Tooltips to Your GUI", link: "/gui/tooltip" }
]
},
+{
+ text: 'Create GUI with React',
+ collapsed: false,
+ items: [
+ { text: "Create Gui with React", link: "/gui/react" },
+ { text: "Adding Tooltips to Your GUI", link: "/gui/react-tooltip" }
+ ]
+},
{
text: 'Technical',
collapsed: false,
@@ -145,6 +159,7 @@ const guideMenu = [{
{ text: "Supporting Gamepad Input", link: "/guide/gamepad" },
{ text: "Creating Responsive Game Design", link: "/guide/responsive-design" },
{ text: "Create Progressive Web Apps (PWA)", link: "/guide/pwa" },
+ { text: "Add TailwindCSS", link: "/guide/tailwindcss" },
{ text: "Upgrade/Update RPGJS", link: "/guide/upgrade" }
]
@@ -172,6 +187,13 @@ const pluginMenu = [{
{ text: "Creating a Title Screen Plugin", link: "/plugins/title-screen" },
{ text: "Displaying Emotion Bubbles for Characters", link: "/plugins/emotion-bubble" }
]
+},
+{
+ text: 'Unofficial Plugins',
+ collapsed: false,
+ items: [
+ { text: "Character Select", link: "/plugins/character-select" },
+ ]
}]
const GA_ID = 'G-VCPFWQS1BJ'
diff --git a/docs/.vitepress/theme/components/PreferenceSwitch.vue b/docs/.vitepress/theme/components/PreferenceSwitch.vue
index 365a3337..6937bfd8 100644
--- a/docs/.vitepress/theme/components/PreferenceSwitch.vue
+++ b/docs/.vitepress/theme/components/PreferenceSwitch.vue
@@ -9,7 +9,7 @@ import {
const route = useRoute()
const show = computed(() =>
- /^\/(guide|tutorial|examples|style-guide)\//.test(route.path)
+ /^\/(guide|tutorial|examples|style-guide|gui|advanced)\//.test(route.path)
)
let isOpen = ref(true)
diff --git a/docs/gui/_trigger-tooltip.md b/docs/gui/_trigger-tooltip.md
new file mode 100644
index 00000000..6ba6d37a
--- /dev/null
+++ b/docs/gui/_trigger-tooltip.md
@@ -0,0 +1,122 @@
+## Trigger the GUI
+
+You have either the client side solution or the server side solution.
+
+- Advantage on the client side: instantaneous, no communication with the server
+- Disadvantage: the server does not have the authority and cannot trigger it for all players at once
+
+On the server side, it's the opposite :)
+
+### Client Side
+
+1. you must open the menu, as usual (here, named `my-tooltip`)
+
+```ts
+RpgGui.display('my-tooltip')
+```
+
+You can open it whenever you want, for example, after loading a map
+
+
+
+```ts
+import { RpgClient, RpgModule, RpgGui } from '@rpgjs/client'
+import myTooltip from './gui/tooltip.vue'
+import sprite from './sprite'
+
+@RpgModule
({
+ scenes: {
+ map: {
+ onAfterLoading() {
+ RpgGui.display('my-tooltip')
+ }
+ }
+ },
+ sprite,
+ gui: [
+ myTooltip
+ ]
+})
+export default class RpgClientModuleEngine {}
+```
+
+
+
+```ts
+import { RpgSprite, RpgSpriteHooks } from '@rpgjs/client'
+
+export const sprite: RpgSpriteHooks = {
+ onInit(sprite: RpgSprite) {
+ sprite.interactive = true
+ sprite.on('click', () => {
+ sprite.guiDisplay = !sprite.guiDisplay
+ })
+ }
+}
+```
+
+
+
+
+
+
+
+```ts
+import {RpgGui } from '@rpgjs/client'
+
+export default {
+ onAfterLoading() {
+ RpgGui.display('my-tooltip')
+ }
+}
+```
+
+2. Then you can trigger the opening on the sprite
+
+
+
+```ts
+import { RpgSprite, RpgSpriteHooks } from '@rpgjs/client'
+
+export const sprite: RpgSpriteHooks = {
+ onInit(sprite: RpgSprite) {
+ sprite.interactive = true
+ sprite.on('click', () => {
+ sprite.guiDisplay = !sprite.guiDisplay
+ })
+ }
+}
+```
+
+Clicking on the sprite opens (or closes) the tooltip
+
+
+
+
+## Server Side
+
+> Even if we are on the server side, remember to add the GUI in the client side module
+
+
+
+```ts
+import { RpgPlayer, RpgPlayerHooks } from '@rpgjs/server'
+
+export const player: RpgPlayerHooks = {
+ onJoinMap(player: RpgPlayer) {
+ player.gui('my-tooltip').open()
+ player.showAttachedGui()
+ // you can hide with player.hideAttachedGui()
+ }
+}
+```
+
+We open the `my-tooltip` GUI and display the player's tooltip
+
+:::tip Tip
+You can indicate which tooltips you want to display by specifying the events (or players) in parameter:
+
+```ts
+player.showAttachedGui([otherEvent, otherPlayer])
+```
+:::
\ No newline at end of file
diff --git a/docs/gui/react-tooltip.md b/docs/gui/react-tooltip.md
new file mode 100644
index 00000000..ca5436e6
--- /dev/null
+++ b/docs/gui/react-tooltip.md
@@ -0,0 +1,35 @@
+# Create a GUI attached to a sprite
+
+## Prerequisites
+
+- Know how to create a GUI and add it in the module
+- Be comfortable with React
+- Since v4.1.0
+
+::: warning
+**Experimental Feature**: This feature is still in its experimental stage and may not be stable.
+:::
+
+## Example
+
+This is very useful to make more advanced interactions on a sprite. For example, display a tooltip or additional interactive displays.
+
+
+
+## Create Component
+
+
+
+```tsx
+export default function MyTooltip({ spriteData }) {
+ return (
+
+ {spriteData.position.x}, {spriteData.position.y}
+
+ )
+}
+
+MyTooltip.rpgAttachToSprite = true
+```
+
+
\ No newline at end of file
diff --git a/docs/gui/react.md b/docs/gui/react.md
new file mode 100644
index 00000000..62dd7544
--- /dev/null
+++ b/docs/gui/react.md
@@ -0,0 +1,87 @@
+# Building GUI with React
+
+## Prerequisites
+
+- You must be familiar with the [React](https://react.dev) library
+- Since v4.1.0
+
+::: warning
+**Experimental Feature**: This feature is still in its experimental stage and may not be stable.
+:::
+
+## Step 1: Installation
+
+Begin by installing the necessary dependencies:
+
+```bash
+npm install react react-dom
+```
+
+## Step 2: Set Up a Basic GUI
+
+In the file , create a simple React component:
+
+```tsx
+export default function MyGUI() {
+ return (
+
+
Hello World
+
+ );
+}
+```
+Name function is used for identifying the GUI. Id is `my-gui`.
+
+> Id is Kebab Case of the name function
+
+## Step 3: Incorporate Context
+
+For more dynamic data, you can utilize the context from the RPG client and some React hooks.
+
+```tsx
+import { RpgReactContext } from '@rpgjs/client/react';
+import { useContext, useEffect, useState } from 'react';
+
+export default function MyGUI({ foo }) {
+ const { rpgCurrentPlayer } = useContext(RpgReactContext);
+ const [hp, setHp] = useState(0);
+
+ console.log(foo);
+
+ useEffect(() => {
+ rpgCurrentPlayer.subscribe(({ object }) => {
+ setHp(object.hp);
+ });
+
+ return () => {
+ rpgCurrentPlayer.unsubscribe();
+ };
+ }, []);
+
+ return (
+
+
{hp}
+
+ );
+}
+```
+
+## Step 4: Interact with the Server Side
+
+On the server side, you have the capability to open the GUI for players.
+
+In the file :
+
+```ts
+import { RpgPlayer, RpgPlayerHooks } from '@rpgjs/server';
+
+const player: RpgPlayerHooks = {
+ onJoinMap(player: RpgPlayer) {
+ player.gui('my-gui').open({
+ foo: 'bar' // You can send props to the GUI
+ });
+ }
+};
+
+export default player;
+```
\ No newline at end of file
diff --git a/docs/gui/tooltip.md b/docs/gui/tooltip.md
index 76c6867b..6676c03e 100644
--- a/docs/gui/tooltip.md
+++ b/docs/gui/tooltip.md
@@ -167,87 +167,4 @@ const sprite = this.rpgScene().getSprite(this.spriteData.id)
```
:::
-## Trigger the GUI
-
-You have either the client side solution or the server side solution.
-
-- Advantage on the client side: instantaneous, no communication with the server
-- Disadvantage: the server does not have the authority and cannot trigger it for all players at once
-
-On the server side, it's the opposite :)
-
-### Client Side
-
-1. you must open the menu, as usual (here, named `my-tooltip`)
-
-```ts
-RpgGui.display('my-tooltip')
-```
-
-You can open it whenever you want, for example, after loading a map
-
-```ts
-import { RpgClient, RpgModule, RpgGui } from '@rpgjs/client'
-import myTooltip from './gui/tooltip.vue'
-
-@RpgModule({
- scenes: {
- map: {
- onAfterLoading() {
- RpgGui.display('my-tooltip')
- }
- }
- },
- gui: [
- myTooltip
- ]
-})
-export default class RpgClientModuleEngine {}
-```
-
-2. Then you can trigger the opening on the sprite
-
-
-
-```ts
-import { RpgSprite, RpgSpriteHooks } from '@rpgjs/client'
-
-export const sprite: RpgSpriteHooks = {
- onInit(sprite: RpgSprite) {
- sprite.interactive = true
- sprite.on('click', () => {
- sprite.guiDisplay = !sprite.guiDisplay
- })
- }
-}
-```
-
-Clicking on the sprite opens (or closes) the tooltip
-
-## Server Side
-
-> Even if we are on the server side, remember to add the GUI in the client side module
-
-
-
-```ts
-import { RpgPlayer, RpgPlayerHooks } from '@rpgjs/server'
-
-export const player: RpgPlayerHooks = {
- onJoinMap(player: RpgPlayer) {
- player.gui('my-tooltip').open()
- player.showAttachedGui()
- // you can hide with player.hideAttachedGui()
- }
-}
-```
-
-We open the `my-tooltip` GUI and display the player's tooltip
-
-:::tip Tip
-You can indicate which tooltips you want to display by specifying the events (or players) in parameter:
-
-```ts
-player.showAttachedGui([otherEvent, otherPlayer])
-```
-:::
\ No newline at end of file
+
\ No newline at end of file
diff --git a/docs/guide/create-gui.md b/docs/guide/create-gui.md
index 4195b2cf..71e200df 100644
--- a/docs/guide/create-gui.md
+++ b/docs/guide/create-gui.md
@@ -118,20 +118,30 @@ export default {
2. This service is an [Observable](https://github.com/ReactiveX/rxjs). Subscribe to it to read the last value. In the parameter, you get an object representing the current player
3. Remember to unsubscribe to the observable to avoid memory leaks
-### Server Side
+## Server Side
-On the server side, you can call the menu at any time:
+> Even if we are on the server side, remember to add the GUI in the client side module
-In :
+
-```ts{8}
+```ts
import { RpgPlayer, RpgPlayerHooks } from '@rpgjs/server'
-
-const player: RpgPlayerHooks = {
+
+export const player: RpgPlayerHooks = {
onJoinMap(player: RpgPlayer) {
- player.gui('my-hud').open() // Here, open the HUD after loading the map
+ player.gui('my-tooltip').open()
+ player.showAttachedGui()
+ // you can hide with player.hideAttachedGui()
}
}
+```
+
+We open the `my-tooltip` GUI and display the player's tooltip
-export default player
-```
\ No newline at end of file
+:::tip Tip
+You can indicate which tooltips you want to display by specifying the events (or players) in parameter:
+
+```ts
+player.showAttachedGui([otherEvent, otherPlayer])
+```
+:::
\ No newline at end of file
diff --git a/docs/guide/tailwindcss.md b/docs/guide/tailwindcss.md
new file mode 100644
index 00000000..641cb6ea
--- /dev/null
+++ b/docs/guide/tailwindcss.md
@@ -0,0 +1,61 @@
+# Adding TailwindCSS to RPGJS Project
+
+If you're using an RPGJS project and would like to harness the utility-first CSS framework, TailwindCSS, this guide will help you integrate it smoothly. Below are the steps to follow:
+
+## Step 1: Installation
+
+Start by installing the necessary dependencies:
+
+```bash
+npm install -D tailwindcss postcss autoprefixer
+```
+
+This will install `tailwindcss`, `postcss`, and `autoprefixer` as development dependencies.
+
+## Step 2: Initialization
+
+Initialize the configuration files for both TailwindCSS and PostCSS:
+
+```bash
+npx tailwindcss init -p
+```
+
+Executing this command will generate two files: `tailwind.config.js` and `postcss.config.js`.
+
+## Step 3: Configure TailwindCSS
+
+Edit the generated `tailwind.config.js` to specify the content files (so that unused styles can be purged) and any theme customizations or plugins you may need.
+
+Here's a base configuration to start with:
+
+```javascript
+/** @type {import('tailwindcss').Config} */
+export default {
+ content: [
+ "./index.html",
+ "./{!(dist|node_modules)/**/*,*}.{vue,js,ts,jsx,tsx}"
+ ],
+ theme: {
+ extend: {},
+ },
+ plugins: [],
+}
+```
+
+This configuration tells Tailwind to look for class usage in all `.vue`, `.js`, `.ts`, `.jsx`, and `.tsx` files outside the `dist` and `node_modules` directories, as well as the `index.html` file. The styles not used within these files will be purged from the final CSS build.
+
+## Step 4: Import Tailwind's Directives
+
+In your main CSS (let's call it `style.css`), you will need to import Tailwind's base, components, and utilities directives:
+
+```css
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+```
+
+When building for production, these directives will be replaced with the actual TailwindCSS styles.
+
+---
+
+That's it! Now, you can start using TailwindCSS classes in your RPGJS project. As you develop, remember to consult the [TailwindCSS documentation](https://tailwindcss.com/docs) for available utility classes and more advanced features.
\ No newline at end of file
diff --git a/docs/plugins/character-select.md b/docs/plugins/character-select.md
new file mode 100644
index 00000000..f7bbe2c2
--- /dev/null
+++ b/docs/plugins/character-select.md
@@ -0,0 +1,23 @@
+# Character Select (MMORPG)
+
+## Goal
+
+It's Character Select plugin which allows you to select characters based on Actors and Classes
+
+![chat](/assets/plugins/character-select.png)
+
+## Installation
+
+`npx rpgjs add @rpgjs/title-screen`
+
+and
+
+`npx rpgjs add rpgjs-character-select`
+
+## Plugin Discussion
+
+https://community.rpgjs.dev/d/199-character-select-plugin
+
+## Author
+
+[dominx99](https://community.rpgjs.dev/u/dominx99)
\ No newline at end of file
diff --git a/docs/public/assets/plugins/character-select.png b/docs/public/assets/plugins/character-select.png
new file mode 100644
index 00000000..4ea5d6e5
Binary files /dev/null and b/docs/public/assets/plugins/character-select.png differ
diff --git a/packages/client/package-lock.json b/packages/client/package-lock.json
index 19bbc30d..d63f8c9a 100644
--- a/packages/client/package-lock.json
+++ b/packages/client/package-lock.json
@@ -9,6 +9,7 @@
"version": "4.0.2",
"license": "MIT",
"dependencies": {
+ "@nanostores/react": "^0.7.1",
"@pixi/tilemap": "^4.0.0",
"@rpgjs/common": "^4.0.2",
"@rpgjs/tiled": "^4.0.2",
@@ -19,6 +20,8 @@
"lodash.merge": "4.6.2",
"pixi-viewport": "^5.0.2",
"pixi.js": "7.2.4",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
"rxjs": "7.8.0",
"simple-room-client": "^2.0.6",
"vue": "^3.2.47"
@@ -28,6 +31,7 @@
"@rpgjs/compiler": "^4.0.2",
"@types/css-font-loading-module": "^0.0.8",
"@types/node": "^18.16.0",
+ "@types/react": "^18.2.25",
"typescript": "^5.0.4"
}
},
@@ -2190,6 +2194,24 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "node_modules/@nanostores/react": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/@nanostores/react/-/react-0.7.1.tgz",
+ "integrity": "sha512-EXQg9N4MdI4eJQz/AZLIx3hxQ6BuBmV4Q55bCd5YCSgEOAW7tGTsIZxpRXxvxLXzflNvHTBvfrDNY38TlSVBkQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "engines": {
+ "node": "^16.0.0 || ^18.0.0 || >=20.0.0"
+ },
+ "peerDependencies": {
+ "nanostores": "^0.9.0",
+ "react": ">=18.0.0"
+ }
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -2591,12 +2613,12 @@
}
},
"node_modules/@rpgjs/common": {
- "version": "4.0.0-rc.12",
- "resolved": "https://registry.npmjs.org/@rpgjs/common/-/common-4.0.0-rc.12.tgz",
- "integrity": "sha512-gBn9ONXVxGPb13gh3AmWf0lS260TlQuGEGRq9YqM+J/HAGmQwjO+sU2I6SE/joGtJBp/bLMXshyYG7qTMrMrmA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/common/-/common-4.0.2.tgz",
+ "integrity": "sha512-xvPyu07bMr13lCVhukRic19huRsdgNZsL3YyqUeNaqQrgo4/Juy69T7gruYZQh5CITXDR8zI25lolUO4mxE8Dg==",
"dependencies": {
- "@rpgjs/tiled": "^4.0.0-rc.12",
- "@rpgjs/types": "^4.0.0-rc.12",
+ "@rpgjs/tiled": "^4.0.2",
+ "@rpgjs/types": "^4.0.2",
"rbush": "^3.0.1",
"rxjs": "^7.8.0",
"sat": "^0.9.0",
@@ -2604,9 +2626,9 @@
}
},
"node_modules/@rpgjs/compiler": {
- "version": "4.0.0-rc.12",
- "resolved": "https://registry.npmjs.org/@rpgjs/compiler/-/compiler-4.0.0-rc.12.tgz",
- "integrity": "sha512-LzstT2KKUR5omwqEl+Y2mTjic3d1ixm/fdDdn5jzYcZUMM5fU0Aok0XZo2jqECiK35XzsPZTTjRcCBIXfHwP7Q==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/compiler/-/compiler-4.0.2.tgz",
+ "integrity": "sha512-Tq/RN7GOlDq690PT31gxHqAqfwHuctx2C++z0k+pCnH19WRLPokO7xwUC8yU0vbI64TGzowLEaWkUFfWWjhRNA==",
"dev": true,
"dependencies": {
"@babel/core": "^7.21.4",
@@ -2646,9 +2668,9 @@
}
},
"node_modules/@rpgjs/tiled": {
- "version": "4.0.0-rc.12",
- "resolved": "https://registry.npmjs.org/@rpgjs/tiled/-/tiled-4.0.0-rc.12.tgz",
- "integrity": "sha512-BTO9Y+CnWqnPAZEQ1eaPXJAggBarkcojnzP9QpQiKnvgYYDXjjDjtLg9n+TP/b/76IPOW2WCGOhivoJ3sWY4IA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/tiled/-/tiled-4.0.2.tgz",
+ "integrity": "sha512-XL7+hFHF5lM1o/aRSRO6K32EMuamRMv30PFwtd/vnmyQ3woY+20bHKEBwiSO/1+hZajfFGPnAWZQ0Av0kGhEGA==",
"dependencies": {
"axios": "^1.3.4",
"buffer": "^6.0.3",
@@ -2657,9 +2679,9 @@
}
},
"node_modules/@rpgjs/types": {
- "version": "4.0.0-rc.12",
- "resolved": "https://registry.npmjs.org/@rpgjs/types/-/types-4.0.0-rc.12.tgz",
- "integrity": "sha512-ZqxcFo0NA5MkDyFJkO41BgoosZZAm0SBhK4I1+M62N9weZUyVl8nHn1w+Wii2MKzmewVH0GcrMRADoRtR3Pu3w==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/types/-/types-4.0.2.tgz",
+ "integrity": "sha512-SvvD25qy0/3WmoNLIoAqObHphfpgvJCgGW+wQqCGH/a2UOAtbErx9BN7xmlx0EH6Ce1+suMGDnfAe8m5bmllwg==",
"dependencies": {
"rxjs": "^7.8.1"
}
@@ -2753,6 +2775,29 @@
"resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz",
"integrity": "sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg=="
},
+ "node_modules/@types/prop-types": {
+ "version": "15.7.8",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.8.tgz",
+ "integrity": "sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ==",
+ "dev": true
+ },
+ "node_modules/@types/react": {
+ "version": "18.2.25",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.25.tgz",
+ "integrity": "sha512-24xqse6+VByVLIr+xWaQ9muX1B4bXJKXBbjszbld/UEDslGLY53+ZucF44HCmLbMPejTzGG9XgR+3m2/Wqu1kw==",
+ "dev": true,
+ "dependencies": {
+ "@types/prop-types": "*",
+ "@types/scheduler": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react/node_modules/csstype": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
+ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==",
+ "dev": true
+ },
"node_modules/@types/resolve": {
"version": "1.17.1",
"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
@@ -2762,6 +2807,12 @@
"@types/node": "*"
}
},
+ "node_modules/@types/scheduler": {
+ "version": "0.16.4",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.4.tgz",
+ "integrity": "sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ==",
+ "dev": true
+ },
"node_modules/@types/trusted-types": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz",
@@ -5040,8 +5091,7 @@
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
},
"node_modules/jsesc": {
"version": "2.5.2",
@@ -5188,6 +5238,17 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
"node_modules/loupe": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz",
@@ -5377,17 +5438,18 @@
}
},
"node_modules/nanostores": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/nanostores/-/nanostores-0.8.1.tgz",
- "integrity": "sha512-1ZCfQtII2XeFDrtqXL2cdQ/diGrLxzRB3YMyQjn8m7GSGQrJfGST2iuqMpWnS/ZlifhtjgR/SX0Jy6Uij6lRLA==",
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/nanostores/-/nanostores-0.9.3.tgz",
+ "integrity": "sha512-KobZjcVyNndNrb5DAjfs0WG0lRcZu5Q1BOrfTOxokFLi25zFrWPjg+joXC6kuDqNfSt9fQwppyjUBkRPtsL+8w==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
+ "peer": true,
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^16.0.0 || ^18.0.0 || >=20.0.0"
}
},
"node_modules/node-releases": {
@@ -5858,6 +5920,29 @@
"quickselect": "^2.0.0"
}
},
+ "node_modules/react": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.0"
+ },
+ "peerDependencies": {
+ "react": "^18.2.0"
+ }
+ },
"node_modules/react-is": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
@@ -6219,6 +6304,14 @@
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
},
+ "node_modules/scheduler": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
"node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -6302,6 +6395,20 @@
"rxjs": "7.8.0"
}
},
+ "node_modules/simple-room-client/node_modules/nanostores": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/nanostores/-/nanostores-0.8.1.tgz",
+ "integrity": "sha512-1ZCfQtII2XeFDrtqXL2cdQ/diGrLxzRB3YMyQjn8m7GSGQrJfGST2iuqMpWnS/ZlifhtjgR/SX0Jy6Uij6lRLA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ }
+ },
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -9750,6 +9857,12 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "@nanostores/react": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/@nanostores/react/-/react-0.7.1.tgz",
+ "integrity": "sha512-EXQg9N4MdI4eJQz/AZLIx3hxQ6BuBmV4Q55bCd5YCSgEOAW7tGTsIZxpRXxvxLXzflNvHTBvfrDNY38TlSVBkQ==",
+ "requires": {}
+ },
"@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -10051,12 +10164,12 @@
"optional": true
},
"@rpgjs/common": {
- "version": "4.0.0-rc.12",
- "resolved": "https://registry.npmjs.org/@rpgjs/common/-/common-4.0.0-rc.12.tgz",
- "integrity": "sha512-gBn9ONXVxGPb13gh3AmWf0lS260TlQuGEGRq9YqM+J/HAGmQwjO+sU2I6SE/joGtJBp/bLMXshyYG7qTMrMrmA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/common/-/common-4.0.2.tgz",
+ "integrity": "sha512-xvPyu07bMr13lCVhukRic19huRsdgNZsL3YyqUeNaqQrgo4/Juy69T7gruYZQh5CITXDR8zI25lolUO4mxE8Dg==",
"requires": {
- "@rpgjs/tiled": "^4.0.0-rc.12",
- "@rpgjs/types": "^4.0.0-rc.12",
+ "@rpgjs/tiled": "^4.0.2",
+ "@rpgjs/types": "^4.0.2",
"rbush": "^3.0.1",
"rxjs": "^7.8.0",
"sat": "^0.9.0",
@@ -10064,9 +10177,9 @@
}
},
"@rpgjs/compiler": {
- "version": "4.0.0-rc.12",
- "resolved": "https://registry.npmjs.org/@rpgjs/compiler/-/compiler-4.0.0-rc.12.tgz",
- "integrity": "sha512-LzstT2KKUR5omwqEl+Y2mTjic3d1ixm/fdDdn5jzYcZUMM5fU0Aok0XZo2jqECiK35XzsPZTTjRcCBIXfHwP7Q==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/compiler/-/compiler-4.0.2.tgz",
+ "integrity": "sha512-Tq/RN7GOlDq690PT31gxHqAqfwHuctx2C++z0k+pCnH19WRLPokO7xwUC8yU0vbI64TGzowLEaWkUFfWWjhRNA==",
"dev": true,
"requires": {
"@babel/core": "^7.21.4",
@@ -10103,9 +10216,9 @@
}
},
"@rpgjs/tiled": {
- "version": "4.0.0-rc.12",
- "resolved": "https://registry.npmjs.org/@rpgjs/tiled/-/tiled-4.0.0-rc.12.tgz",
- "integrity": "sha512-BTO9Y+CnWqnPAZEQ1eaPXJAggBarkcojnzP9QpQiKnvgYYDXjjDjtLg9n+TP/b/76IPOW2WCGOhivoJ3sWY4IA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/tiled/-/tiled-4.0.2.tgz",
+ "integrity": "sha512-XL7+hFHF5lM1o/aRSRO6K32EMuamRMv30PFwtd/vnmyQ3woY+20bHKEBwiSO/1+hZajfFGPnAWZQ0Av0kGhEGA==",
"requires": {
"axios": "^1.3.4",
"buffer": "^6.0.3",
@@ -10114,9 +10227,9 @@
}
},
"@rpgjs/types": {
- "version": "4.0.0-rc.12",
- "resolved": "https://registry.npmjs.org/@rpgjs/types/-/types-4.0.0-rc.12.tgz",
- "integrity": "sha512-ZqxcFo0NA5MkDyFJkO41BgoosZZAm0SBhK4I1+M62N9weZUyVl8nHn1w+Wii2MKzmewVH0GcrMRADoRtR3Pu3w==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/types/-/types-4.0.2.tgz",
+ "integrity": "sha512-SvvD25qy0/3WmoNLIoAqObHphfpgvJCgGW+wQqCGH/a2UOAtbErx9BN7xmlx0EH6Ce1+suMGDnfAe8m5bmllwg==",
"requires": {
"rxjs": "^7.8.1"
},
@@ -10212,6 +10325,31 @@
"resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz",
"integrity": "sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg=="
},
+ "@types/prop-types": {
+ "version": "15.7.8",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.8.tgz",
+ "integrity": "sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ==",
+ "dev": true
+ },
+ "@types/react": {
+ "version": "18.2.25",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.25.tgz",
+ "integrity": "sha512-24xqse6+VByVLIr+xWaQ9muX1B4bXJKXBbjszbld/UEDslGLY53+ZucF44HCmLbMPejTzGG9XgR+3m2/Wqu1kw==",
+ "dev": true,
+ "requires": {
+ "@types/prop-types": "*",
+ "@types/scheduler": "*",
+ "csstype": "^3.0.2"
+ },
+ "dependencies": {
+ "csstype": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
+ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==",
+ "dev": true
+ }
+ }
+ },
"@types/resolve": {
"version": "1.17.1",
"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
@@ -10221,6 +10359,12 @@
"@types/node": "*"
}
},
+ "@types/scheduler": {
+ "version": "0.16.4",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.4.tgz",
+ "integrity": "sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ==",
+ "dev": true
+ },
"@types/trusted-types": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz",
@@ -11891,8 +12035,7 @@
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
},
"jsesc": {
"version": "2.5.2",
@@ -12003,6 +12146,14 @@
}
}
},
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
"loupe": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz",
@@ -12144,9 +12295,10 @@
"integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA=="
},
"nanostores": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/nanostores/-/nanostores-0.8.1.tgz",
- "integrity": "sha512-1ZCfQtII2XeFDrtqXL2cdQ/diGrLxzRB3YMyQjn8m7GSGQrJfGST2iuqMpWnS/ZlifhtjgR/SX0Jy6Uij6lRLA=="
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/nanostores/-/nanostores-0.9.3.tgz",
+ "integrity": "sha512-KobZjcVyNndNrb5DAjfs0WG0lRcZu5Q1BOrfTOxokFLi25zFrWPjg+joXC6kuDqNfSt9fQwppyjUBkRPtsL+8w==",
+ "peer": true
},
"node-releases": {
"version": "2.0.13",
@@ -12497,6 +12649,23 @@
"quickselect": "^2.0.0"
}
},
+ "react": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "requires": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "react-dom": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.0"
+ }
+ },
"react-is": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
@@ -12771,6 +12940,14 @@
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
},
+ "scheduler": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "requires": {
+ "loose-envify": "^1.1.0"
+ }
+ },
"semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -12834,6 +13011,13 @@
"msgpack-lite": "0.1.26",
"nanostores": "^0.8.0",
"rxjs": "7.8.0"
+ },
+ "dependencies": {
+ "nanostores": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/nanostores/-/nanostores-0.8.1.tgz",
+ "integrity": "sha512-1ZCfQtII2XeFDrtqXL2cdQ/diGrLxzRB3YMyQjn8m7GSGQrJfGST2iuqMpWnS/ZlifhtjgR/SX0Jy6Uij6lRLA=="
+ }
}
},
"source-map": {
diff --git a/packages/client/package.json b/packages/client/package.json
index 37e26139..5690604e 100644
--- a/packages/client/package.json
+++ b/packages/client/package.json
@@ -13,9 +13,21 @@
"watch": "tsc -w"
},
"keywords": [],
+ "typesVersions": {
+ "*": {
+ "react": [
+ "lib/Gui/React.d.ts"
+ ]
+ }
+ },
+ "exports": {
+ ".": "./lib/index.js",
+ "./react": "./lib/Gui/React.js"
+ },
"author": "Samuel Ronce",
"license": "MIT",
"dependencies": {
+ "@nanostores/react": "^0.7.1",
"@pixi/tilemap": "^4.0.0",
"@rpgjs/common": "^4.0.2",
"@rpgjs/tiled": "^4.0.2",
@@ -26,6 +38,8 @@
"lodash.merge": "4.6.2",
"pixi-viewport": "^5.0.2",
"pixi.js": "7.2.4",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
"rxjs": "7.8.0",
"simple-room-client": "^2.0.6",
"vue": "^3.2.47"
@@ -36,6 +50,7 @@
"@rpgjs/compiler": "^4.0.2",
"@types/css-font-loading-module": "^0.0.8",
"@types/node": "^18.16.0",
+ "@types/react": "^18.2.25",
"typescript": "^5.0.4"
},
"type": "module"
diff --git a/packages/client/src/Components/Component.ts b/packages/client/src/Components/Component.ts
index 46d8d824..d2f3b509 100644
--- a/packages/client/src/Components/Component.ts
+++ b/packages/client/src/Components/Component.ts
@@ -197,6 +197,12 @@ export class RpgComponent extends Container {
set guiDisplay(val: boolean) {
(this.logic as RpgCommonPlayer).guiDisplay = val
+ this.game.setObject(this.logic?.id, {
+ object: this.logic,
+ paramsChanged: {
+ guiDisplay: val
+ }
+ })
}
setPosition(smooth: boolean = true) {
diff --git a/packages/client/src/GameEngine.ts b/packages/client/src/GameEngine.ts
index 73f6e0e9..7ce24c04 100644
--- a/packages/client/src/GameEngine.ts
+++ b/packages/client/src/GameEngine.ts
@@ -271,15 +271,19 @@ export class GameEngineClient extends RpgCommonGame {
paramsChanged
}
+ this.setObject(id, newObject)
+
+ return newObject
+ }
+
+ setObject(id: string, newObject) {
+ const propName = newObject.object instanceof RpgShape ? '_shapes' : '_objects'
this[propName].next({
...this[propName].value,
...{
[id]: newObject
}
})
-
this._obsObjects[id].next(newObject)
-
- return newObject
}
}
\ No newline at end of file
diff --git a/packages/client/src/Gui/Gui.ts b/packages/client/src/Gui/Gui.ts
new file mode 100644
index 00000000..8fba5439
--- /dev/null
+++ b/packages/client/src/Gui/Gui.ts
@@ -0,0 +1,556 @@
+import { RpgCommonPlayer, Utils } from '@rpgjs/common'
+import { RpgSound } from '../Sound/RpgSound'
+import { RpgClientEngine, RpgResource } from '../index'
+import { RpgRenderer } from '../Renderer'
+import { GameEngineClient } from '../GameEngine'
+import { SceneMap } from '../Scene/Map'
+import { VueGui } from './Vue'
+import { Scene } from '../Scene/Scene'
+import { map, tap, combineLatest, Subject, filter, Observable } from 'rxjs';
+
+const { elementToPositionAbsolute } = Utils
+
+interface GuiOptions {
+ data: any,
+ attachToSprite: boolean
+ display: boolean,
+ name: string
+ isFunction: boolean,
+ gui: any
+}
+
+interface GuiList {
+ [guiName: string]: GuiOptions
+}
+
+const COMPONENT_LIBRARIES: any = [
+ VueGui
+]
+
+export class Gui {
+ private renderer: RpgRenderer
+ private gameEngine: GameEngineClient
+ public clientEngine: RpgClientEngine
+ private socket
+ public gui: GuiList = {}
+ public currentScene: Scene | null = null
+ private librariesInstances: any[] = []
+
+ async _initialize(clientEngine: RpgClientEngine, guiEl: HTMLDivElement) {
+ this.clientEngine = clientEngine
+ this.renderer = clientEngine.renderer
+ this.gameEngine = clientEngine.gameEngine
+ const { gui } = this.renderer.options
+
+ for (let ui of gui) {
+ let name = ui.name
+ if (Utils.isFunction(ui)) {
+ name = Utils.camelToKebab(name)
+ }
+ this.gui[name] = {
+ data: ui.data,
+ attachToSprite: ui.rpgAttachToSprite,
+ display: false,
+ name: name,
+ isFunction: Utils.isFunction(ui),
+ gui: ui
+ }
+ }
+
+ if (this.clientEngine.envs?.['VITE_REACT']) {
+ console.warn('[RPGJS] React GUI is experimental feature. So, its use may change over time. Not yet in production')
+ COMPONENT_LIBRARIES.push(await import('./React').then(m => m.ReactGui))
+ }
+
+ const propagateEvents = (el: HTMLElement) => {
+ const events = ['click', 'mousedown', 'mouseup', 'mousemove', 'mouseenter', 'mouseleave', 'mouseover', 'mouseout', 'contextmenu', 'pointerdown', 'pointerup', 'pointermove', 'pointerenter', 'pointerleave', 'pointerover', 'pointerout', 'pointerupoutside', 'pointercancel', 'touchstart', 'touchend', 'touchmove', 'touchcancel', 'wheel', 'keydown', 'keyup', 'keypress', 'keydownoutside', 'keyupoutside', 'keypressoutside']
+ for (let type of events) {
+ el.addEventListener(type, (e) => {
+ this.renderer.canvas.dispatchEvent(new MouseEvent(type, e))
+ })
+ }
+ }
+
+ for (let componentClass of COMPONENT_LIBRARIES) {
+ const el = document.createElement('div')
+ elementToPositionAbsolute(el)
+ el.style['pointer-events'] = 'auto'
+ propagateEvents(el)
+ guiEl.appendChild(el)
+ this.librariesInstances.push(new componentClass(el, this))
+ }
+
+ guiEl.style['pointer-events'] = 'none'
+ }
+
+ _setSceneReady(scene: Scene) {
+ this.currentScene = scene
+ this.librariesInstances.forEach(instance => {
+ if (instance._setSceneReady) instance._setSceneReady(scene)
+ })
+ }
+
+ getInjectObject(): any {
+ const self = this
+ return {
+ /**
+ * Recovery of the current scene
+ *
+ * ```js
+ * export default {
+ * inject: ['rpgScene'],
+ * mounted() {
+ * const scene = this.rpgScene()
+ * scene.stopInputs()
+ * }
+ * }
+ * ```
+ *
+ * @prop {Function returns RpgScene} [rpgScene]
+ * @memberof VueInject
+ * */
+ rpgScene: this.renderer.getScene.bind(this.renderer),
+
+ /**
+ * Retrieve the main container of the game
+ *
+ * ```js
+ * export default {
+ * inject: ['rpgStage'],
+ * mounted() {
+ * const blur = new PIXI.BlurFilter()
+ this.rpgStage.filters = [blur]
+ * }
+ * }
+ * ```
+ *
+ * @prop {PIXI.Container} [rpgStage]
+ * @memberof VueInject
+ * */
+ rpgStage: this.renderer.stage,
+
+ /**
+ * Listen to all the objects present in the room (events and players)
+ *
+ * ```js
+ * export default {
+ * inject: ['rpgObjects'],
+ * mounted() {
+ * this.obs = this.rpgObjects.subscribe((objects) => {
+ * for (let id in objects) {
+ * const obj = objects[id]
+ * console.log(obj.object, obj.paramsChanged)
+ * }
+ * })
+ * },
+ * unmounted() {
+ * this.obs.unsubscribe()
+ * }
+ * }
+ * ```
+ *
+ * > remember to unsubscribe for memory leaks
+ *
+ * It is an observable that returns an object:
+ *
+ * * the key is the object identifier
+ * * The value is an object comprising:
+ * * `object`: The entire object
+ * * `paramsChanged`: Only the representation of the properties that have been changed on this object
+ *
+ * @prop {Observable<{ [objectId]: { object: object, paramsChanged: object } }>} [rpgObjects]
+ * @memberof VueInject
+ * */
+ rpgObjects: this.clientEngine.objects,
+
+ /**
+ * Recovers and listens to the current player
+ *
+ * ```js
+ * export default {
+ * inject: ['rpgCurrentPlayer'],
+ * mounted() {
+ * this.obs = this.rpgCurrentPlayer.subscribe((obj) => {
+ * console.log(obj.object, obj.paramsChanged)
+ * })
+ * },
+ * unmounted() {
+ * this.obs.unsubscribe()
+ * }
+ * }
+ * ```
+ *
+ * * `object`: The whole player
+ * * `paramsChanged`: Only the representation of the properties that have been changed on this player
+ *
+ * @prop {Observable<{ object: object, paramsChanged: object }>} [rpgCurrentPlayer]
+ * @memberof VueInject
+ * */
+ rpgCurrentPlayer: this.clientEngine.objects
+ .pipe(
+ map((objects: any) => objects[this.gameEngine.playerId]),
+ filter(player => !!player)
+ ),
+ rpgGameEngine: this.gameEngine,
+
+ /**
+ * Tell the server to close the GUI.
+ *
+ * It is a function with 2 parameters:
+ * * `name`: The name of the component
+ * * `data`: The data you want to pass to the server
+ *
+ * ```js
+ * export default {
+ * inject: ['rpgGuiClose'],
+ * methods: {
+ * close() {
+ * this.rpgGuiClose('gui-name', {
+ * amount: 1000
+ * })
+ * }
+ * }
+ * }
+ * ```
+ *
+ * @prop {Function(name, data)} [rpgGuiClose]
+ * @memberof VueInject
+ * */
+ rpgGuiClose(name: string, data?) {
+ const guiId = name || this.$options?.name
+ self.socket.emit('gui.exit', {
+ guiId,
+ data
+ })
+ },
+
+ /**
+ * Perform an interaction with the open GUI
+ *
+ * It is a function with 2 parameters:
+ * * `guiId`: The name of the component/Gui
+ * * `name`: The name of the interaction (defined on the server side)
+ * * `data`: Data to be sent
+ *
+ * ```js
+ * export default {
+ * inject: ['rpgGuiInteraction'],
+ * methods: {
+ * changeGold() {
+ * this.rpgGuiInteraction('gui-name', 'change-gold', {
+ * amount: 100
+ * })
+ * }
+ * }
+ * }
+ * ```
+ *
+ * @prop {Function(guiId, name, data = {})} [rpgGuiInteraction]
+ * @memberof VueInject
+ * */
+ rpgGuiInteraction: (guiId: string, name: string, data: any = {}) => {
+ this.socket.emit('gui.interaction', {
+ guiId,
+ name,
+ data
+ })
+ },
+
+ /**
+ * Listen to the keys that are pressed on the keyboard
+ *
+ * ```js
+ * export default {
+ * inject: ['rpgKeypress'],
+ * mounted() {
+ * this.obs = this.rpgKeypress.subscribe(({ inputName, control }) => {
+ * console.log(inputName) // "escape"
+ * console.log(control.actionName) // "back"
+ * })
+ * },
+ * unmounted() {
+ * this.obs.unsubscribe()
+ * }
+ * }
+ * ```
+ *
+ * @prop {Observable<{ inputName: string, control: { actionName: string, options: any } }>} [rpgKeypress]
+ * @memberof VueInject
+ * */
+ rpgKeypress: this.clientEngine.keyChange
+ .pipe(
+ map(name => {
+ const control = this.clientEngine.controls.getControl(name)
+ return {
+ inputName: name,
+ control
+ }
+ })
+ ),
+
+ /**
+ * Recovers the socket.
+ *
+ * ```js
+ * export default {
+ * inject: ['rpgSocket'],
+ * mounted() {
+ * const socket = this.rpgSocket()
+ * socket.emit('foo', 'bar')
+ * }
+ * }
+ * ```
+ *
+ * @prop {Function returns RpgScene} [rpgSocket]
+ * @memberof VueInject
+ * */
+ rpgSocket: () => this.socket,
+
+ /**
+ * The RpgGui object to control GUIs
+ *
+ * ```js
+ * export default {
+ * inject: ['rpgGui'],
+ * mounted() {
+ * const guis = this.rpgGui.getAll()
+ * }
+ * }
+ * ```
+ *
+ * @prop {RpgGui} [rpgGui]
+ * @memberof VueInject
+ * */
+ rpgGui: this,
+
+ /**
+ * Equivalent to RpgSound
+ *
+ * ```js
+ * export default {
+ * inject: ['rpgSound'],
+ * mounted() {
+ * this.rpgSound.get('my-sound-id').play()
+ * }
+ * }
+ * ```
+ *
+ * @prop {RpgSound} [rpgSound]
+ * @memberof VueInject
+ * */
+ rpgSound: RpgSound,
+
+ /**
+ * Find the game's image and sound library
+ *
+ * ```js
+ * export default {
+ * inject: ['rpgResource'],
+ * mounted() {
+ * const resourceImage = this.rpgResource.spritesheets.get('image_id')
+ * const resourceSound = this.rpgResource.sounds.get('sound_id')
+ * }
+ * }
+ * ```
+ *
+ * @prop { { spritesheets: Map, sounds: Map } } [rpgResource]
+ * @memberof VueInject
+ * */
+ rpgResource: RpgResource,
+
+ /**
+ * Get RpgClientEngine instance
+ *
+ * ```js
+ * export default {
+ * inject: ['rpgEngine'],
+ * mounted() {
+ * const vueInstance = this.rpgEngine.vueInstance
+ * }
+ * }
+ * ```
+ *
+ * @prop {RpgClientEngine} [rpgEngine]
+ * @memberof VueInject
+ * */
+ rpgEngine: this.clientEngine
+ }
+ }
+
+ /** @internal */
+ _setSocket(socket) {
+ this.socket = socket
+ this.socket.on('gui.open', ({ guiId, data }) => {
+ this.display(guiId, data)
+ })
+ this.socket.on('gui.tooltip', ({ players, display }) => {
+ for (let playerId of players) {
+ const sprite = this.renderer.getScene()?.getSprite(playerId)
+ if (sprite) sprite.guiDisplay = display
+ }
+ })
+ this.socket.on('gui.exit', (guiId) => {
+ this.hide(guiId)
+ })
+ }
+
+ /** @internal */
+ _setGui(id, obj) {
+ const guiObj = this.get(id)
+ if (!guiObj) {
+ throw `The GUI named ${id} is non-existent. Please add the component in the gui property of the decorator @RpgClient`
+ }
+ for (let key in obj) {
+ guiObj[key] = obj[key]
+ }
+ this.librariesInstances.forEach(instance => {
+ instance.gui = Object.assign({}, this.gui)
+ })
+ }
+
+ /**
+ * Get a GUI. You retrieve GUI data and information whether it is displayed or not
+ *
+ * ```ts
+ * import { RpgGui } from '@rpgjs/client'
+ *
+ * const gui = RpgGui.get('my-gui')
+ * console.log(gui.display) // false
+ * ```
+ *
+ * @title Get a GUI
+ * @method RpgGui.get(id)
+ * @param {string} id
+ * @returns { { data: any, display: boolean } }
+ * @memberof RpgGui
+ */
+ get(id) {
+ if (typeof id != 'string') {
+ id = id.name
+ }
+ return this.gui[id]
+ }
+
+ /**
+ * Get all GUI. You retrieve GUI data and information whether it is displayed or not
+ *
+ * ```ts
+ * import { RpgGui } from '@rpgjs/client'
+ *
+ * const gui = RpgGui.getAll()
+ * console.log(gui) // { 'rpg-dialog': { data: {}, display: true } }
+ * ```
+ *
+ * @title Get all GUI
+ * @method RpgGui.getAll()
+ * @returns { { [guiName]: { data: any, display: boolean } }}
+ * @memberof RpgGui
+ */
+ getAll() {
+ return this.gui
+ }
+
+ /**
+ * Checks if the GUI exists RpgClient's gui array
+ *
+ * ```ts
+ * import { RpgGui } from '@rpgjs/client'
+ *
+ * RpgGui.exists('my-gui') // true
+ * ```
+ *
+ * @title GUI Exists ?
+ * @method RpgGui.exists(id)
+ * @param {string} id
+ * @returns {boolean}
+ * @memberof RpgGui
+ */
+ exists(id: string): boolean {
+ return !!this.get(id)
+ }
+
+ /**
+ * Calls a GUI according to identifier. You can send retrievable data in the component
+ *
+ * ```ts
+ * import { RpgGui } from '@rpgjs/client'
+ *
+ * RpgGui.display('my-gui')
+ * ```
+ *
+ * @title Display GUI
+ * @method RpgGui.display(id,data)
+ * @param {string} id
+ * @param {object} [data]
+ * @returns {void}
+ * @memberof RpgGui
+ */
+ display(id: string, data = {}) {
+ this._setGui(id, {
+ display: true,
+ data
+ })
+ }
+
+ /**
+ * Hide a GUI according to its identifier
+ *
+ * ```ts
+ * import { RpgGui } from '@rpgjs/client'
+ *
+ * RpgGui.hide('my-gui')
+ * ```
+ *
+ * @title Hide GUI
+ * @method RpgGui.hide(id)
+ * @param {string} id
+ * @returns {void}
+ * @memberof RpgGui
+ */
+ hide(id: string) {
+ this._setGui(id, {
+ display: false
+ })
+ }
+
+ /** @internal */
+ clear() {
+ this.gui = {}
+ }
+
+ /** @internal */
+ tooltipPosition(position: { x: number, y: number }) {
+ const scene = this.renderer.getScene()
+ const viewport = scene?.viewport
+ if (viewport) {
+ const currentZoom = viewport.scale.x
+ const left = (position.x - viewport.left) * currentZoom
+ const top = (position.y - viewport.top) * currentZoom
+ return {
+ transform: `translate(${left}px,${top}px)`
+ }
+ }
+ return {}
+ }
+
+ /** @internal */
+ tooltipFilter(sprites: RpgCommonPlayer[]): RpgCommonPlayer[] {
+ return sprites.filter(tooltip => tooltip.guiDisplay)
+ }
+
+ /** @internal */
+ get listenTooltipObjects(): Observable {
+ return combineLatest(
+ [
+ this.clientEngine.gameEngine.all,
+ this.currentScene?.objectsMoving as Subject
+ ]
+ ).pipe(
+ map(([objects]) => {
+ return Object.values(objects).map((obj: any) => obj.object)
+ })
+ )
+ }
+}
+
+export const RpgGui = new Gui()
\ No newline at end of file
diff --git a/packages/client/src/Gui/React.ts b/packages/client/src/Gui/React.ts
new file mode 100644
index 00000000..b8089a6c
--- /dev/null
+++ b/packages/client/src/Gui/React.ts
@@ -0,0 +1,116 @@
+import { createRoot } from 'react-dom/client';
+import { createElement, Fragment, useState, createContext, useEffect, useContext, useCallback, useSyncExternalStore, useRef } from 'react'
+import { RpgClientEngine } from '../RpgClientEngine';
+import { RpgRenderer } from '../Renderer';
+import { BehaviorSubject, map, tap, combineLatest, Subject } from 'rxjs';
+import type { Gui } from './Gui';
+
+export { useStore } from '@nanostores/react'
+export const RpgReactContext = createContext({} as any)
+
+// TODO
+export const useObjects = () => {
+ const [objects, setObjects] = useState([] as any[])
+ const { rpgObjects } = useContext(RpgReactContext)
+ useEffect(() => {
+ rpgObjects
+ .pipe(
+ map((objects: any) => Object.values(objects).map((obj: any) => obj.object))
+ )
+ .subscribe(setObjects)
+ }, [])
+ return objects
+}
+
+// TODO
+export const useCurrentPlayer = () => {
+ const { rpgCurrentPlayer } = useContext(RpgReactContext);
+
+ const currentPlayerRef = useRef({});
+ let _onChanges
+
+ const subscribe = (onChanges) => {
+ _onChanges = onChanges
+ return () => {
+ _onChanges = null
+ }
+ }
+
+ useEffect(() => {
+ const ob$ = rpgCurrentPlayer
+ .pipe(
+ map((player: any) => player.object),
+ tap((player: any) => currentPlayerRef.current = player)
+ );
+ const subscription = ob$.subscribe(() => {
+ _onChanges?.()
+ });
+ return () => subscription.unsubscribe();
+ }, []);
+
+ return useSyncExternalStore(subscribe, () => currentPlayerRef.current);
+}
+
+export class ReactGui {
+ private app: any
+ private clientEngine: RpgClientEngine
+ private renderer: RpgRenderer
+ private _gui: BehaviorSubject = new BehaviorSubject([] as any)
+ //private _tooltips: BehaviorSubject = new BehaviorSubject([] as any)
+
+ constructor(rootEl: HTMLDivElement, parentGui: Gui) {
+ this.app = createRoot(rootEl)
+ this.clientEngine = parentGui.clientEngine
+ this.renderer = this.clientEngine.renderer
+
+ const GuiTooltip = (ui): any => {
+ return () => {
+ const [_tooltip, setTooltip] = useState([])
+ useEffect(() => {
+ parentGui.listenTooltipObjects.subscribe(setTooltip)
+ // force combineLatest to emit first value
+ parentGui.currentScene?.objectsMoving.next({})
+ }, [parentGui.currentScene])
+ return parentGui.tooltipFilter(_tooltip).map(sprite => createElement('div', {
+ style: parentGui.tooltipPosition({ x: sprite.position.x, y: sprite.position.y }),
+ key: sprite.id,
+ }, createElement(ui.gui, {
+ spriteData: sprite,
+ ...(ui.data || {}),
+ })))
+ }
+ }
+
+ const GuiWrapper = () => {
+ const [_gui, setGui] = useState([])
+ useEffect(() => {
+ this._gui.subscribe(gui => setGui(gui))
+ }, [])
+ return createElement(RpgReactContext.Provider, {
+ value: parentGui.getInjectObject()
+ },
+ ..._gui.filter(ui => ui.display && !ui.attachToSprite).map(ui => createElement(ui.gui, {
+ key: ui.name,
+ ...(ui.data || {})
+ })),
+ ..._gui.filter(ui => ui.display && ui.attachToSprite).map(ui => createElement('div', {
+ key: ui.name
+ }, createElement(GuiTooltip(ui)))),
+ )
+ }
+
+ this.app.render(
+ createElement(GuiWrapper)
+ )
+ }
+
+ set gui(val) {
+ let array: any = []
+ for (let key in val) {
+ // ignore vuejs component
+ if (!val[key].isFunction) continue
+ array.push(val[key])
+ }
+ this._gui.next(array)
+ }
+}
\ No newline at end of file
diff --git a/packages/client/src/Gui/Vue.ts b/packages/client/src/Gui/Vue.ts
new file mode 100644
index 00000000..e8ce1d56
--- /dev/null
+++ b/packages/client/src/Gui/Vue.ts
@@ -0,0 +1,137 @@
+import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveDynamicComponent as _resolveDynamicComponent, normalizeProps as _normalizeProps, guardReactiveProps as _guardReactiveProps, createBlock as _createBlock, mergeProps as _mergeProps, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode } from "vue"
+import { App, ComponentPublicInstance, createApp } from 'vue'
+import { RpgCommonPlayer, Utils } from '@rpgjs/common'
+import { RpgRenderer } from '../Renderer'
+import { GameEngineClient } from '../GameEngine'
+import { RpgClientEngine } from '../RpgClientEngine'
+import type { Gui } from './Gui'
+import { Scene } from '../Scene/Scene'
+
+interface VueInstance extends ComponentPublicInstance {
+ gui: GuiList,
+ tooltips: RpgCommonPlayer[]
+}
+
+interface GuiOptions {
+ data: any,
+ attachToSprite: boolean
+ display: boolean,
+ name: string
+}
+
+interface GuiList {
+ [guiName: string]: GuiOptions
+}
+
+interface VueInstance extends ComponentPublicInstance {
+ gui: GuiList,
+ tooltips: RpgCommonPlayer[]
+}
+
+const _hoisted_1 = {
+ id: "tooltips",
+ style: { "position": "absolute", "top": "0", "left": "0" }
+}
+function render(_ctx, _cache) {
+ return (_openBlock(), _createElementBlock("div", {}, [
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.fixedGui, (ui) => {
+ return (_openBlock(), _createElementBlock(_Fragment, null, [
+ (ui.display)
+ ? (_openBlock(), _createBlock(_resolveDynamicComponent(ui.name), _normalizeProps(_mergeProps({ key: 0 }, ui.data)), null, 16 /* FULL_PROPS */))
+ : _createCommentVNode("v-if", true)
+ ], 64 /* STABLE_FRAGMENT */))
+ }), 256 /* UNKEYED_FRAGMENT */)),
+ _createElementVNode("div", _hoisted_1, [
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.attachedGui, (ui) => {
+ return (_openBlock(), _createElementBlock(_Fragment, null, [
+ (ui.display)
+ ? (_openBlock(true), _createElementBlock(_Fragment, { key: 0 }, _renderList(_ctx.tooltipFilter(_ctx.tooltips, ui), (tooltip) => {
+ return (_openBlock(), _createElementBlock("div", {
+ style: _normalizeStyle(_ctx.tooltipPosition(tooltip.position))
+ }, [
+ (_openBlock(), _createBlock(_resolveDynamicComponent(ui.name), _mergeProps({ ...ui.data, spriteData: tooltip }, {
+ ref_for: true,
+ ref: ui.name
+ }), null, 16 /* FULL_PROPS */))
+ ], 4 /* STYLE */))
+ }), 256 /* UNKEYED_FRAGMENT */))
+ : _createCommentVNode("v-if", true)
+ ], 64 /* STABLE_FRAGMENT */))
+ }), 256 /* UNKEYED_FRAGMENT */))
+ ])
+ ], 32 /* HYDRATE_EVENTS */))
+}
+
+
+export class VueGui {
+ private renderer: RpgRenderer
+ private gameEngine: GameEngineClient
+ private clientEngine: RpgClientEngine
+ private app: App
+ private vm: VueInstance
+ private socket
+
+ constructor(rootEl: HTMLDivElement, private parentGui: Gui) {
+ this.clientEngine = parentGui.clientEngine
+ this.renderer = this.clientEngine.renderer
+ this.gameEngine = this.clientEngine.gameEngine
+ const { gui } = parentGui
+ const self = this
+
+ const obj = {
+ render,
+ data() {
+ return {
+ gui: {},
+ tooltips: []
+ }
+ },
+ provide: () => {
+ return parentGui.getInjectObject()
+ },
+ computed: {
+ fixedGui() {
+ return Object.values(this.gui).filter((gui: any) => !gui.attachToSprite)
+ },
+ attachedGui() {
+ return Object.values(this.gui).filter((gui: any) => gui.attachToSprite)
+ }
+ },
+ methods: {
+ tooltipPosition: parentGui.tooltipPosition.bind(parentGui),
+ tooltipFilter: parentGui.tooltipFilter.bind(parentGui)
+ },
+ mounted() {
+
+ }
+ }
+
+ this.app = createApp(obj)
+
+ const guiVue = Object.values(gui).filter(ui => !Utils.isFunction(ui))
+
+ for (let ui of guiVue) {
+ this.app.component(ui.name, ui.gui)
+ }
+
+ this.vm = this.app.mount(rootEl) as VueInstance
+ this.renderer.app = this.app
+ this.renderer.vm = this.vm
+ }
+
+ _setSceneReady() {
+ this.parentGui.listenTooltipObjects.subscribe((tooltips) => {
+ this.vm.tooltips = [...tooltips]
+ })
+ this.parentGui.currentScene?.objectsMoving.next({})
+ }
+
+ set gui(val) {
+ for (let key in val) {
+ // ignore react component
+ if (val[key].isFunction) continue
+ this.vm.gui[key] = val[key]
+ }
+ this.vm.gui = Object.assign({}, this.vm.gui)
+ }
+}
diff --git a/packages/client/src/Renderer.ts b/packages/client/src/Renderer.ts
index 2cea2f98..cd90eea4 100644
--- a/packages/client/src/Renderer.ts
+++ b/packages/client/src/Renderer.ts
@@ -1,8 +1,8 @@
-import { RpgPlugin, HookClient } from '@rpgjs/common'
+import { RpgPlugin, HookClient, Utils } from '@rpgjs/common'
import { SceneMap } from './Scene/Map'
import { Scene } from './Scene/Scene'
import { Scene as PresetScene } from './Presets/Scene'
-import { RpgGui } from './RpgGui'
+import { RpgGui } from './Gui/Gui'
import { RpgClientEngine } from './RpgClientEngine'
import type { App, ComponentPublicInstance } from 'vue'
import { TransitionScene } from './Effects/TransitionScene'
@@ -11,6 +11,8 @@ import { GameEngineClient } from './GameEngine'
import { SpinnerGraphic } from './Effects/Spinner'
import { autoDetectRenderer, Container, Graphics, ICanvas, IRenderer } from 'pixi.js'
+const { elementToPositionAbsolute } = Utils
+
export enum TransitionMode {
None,
Fading
@@ -112,9 +114,11 @@ export class RpgRenderer {
if (!this.guiEl) {
this.guiEl = document.createElement('div')
- this.selector.appendChild(this.guiEl)
+ this.guiEl = this.selector.appendChild(this.guiEl)
}
+ elementToPositionAbsolute(this.guiEl)
+
if (!this.canvasEl) {
this.selector.insertBefore(this.renderer.view as HTMLCanvasElement, this.selector.firstChild)
const [canvas] = document.querySelector(this.options.selector).children
@@ -131,7 +135,7 @@ export class RpgRenderer {
this.fadeContainer.visible = false
this.fadeContainer.alpha = 0
- RpgGui._initalize(this.clientEngine)
+ RpgGui._initialize(this.clientEngine, this.guiEl)
this.resize()
}
diff --git a/packages/client/src/RpgClientEngine.ts b/packages/client/src/RpgClientEngine.ts
index eabdf4fe..06b11c3c 100644
--- a/packages/client/src/RpgClientEngine.ts
+++ b/packages/client/src/RpgClientEngine.ts
@@ -5,7 +5,7 @@ import { _initSound, sounds } from './Sound/Sounds'
import { World } from 'simple-room-client'
import { BehaviorSubject, Observable, Subject, Subscription, lastValueFrom } from 'rxjs'
import { ajax } from 'rxjs/ajax'
-import { RpgGui } from './RpgGui'
+import { RpgGui } from './Gui/Gui'
import {
RpgCommonPlayer,
PrebuiltGui,
diff --git a/packages/client/src/RpgGui.ts b/packages/client/src/RpgGui.ts
deleted file mode 100644
index 68524c22..00000000
--- a/packages/client/src/RpgGui.ts
+++ /dev/null
@@ -1,553 +0,0 @@
-import RpgGuiCompiled from './RpgGuiCompiled'
-import { App, ComponentPublicInstance, createApp } from 'vue'
-import { RpgCommonPlayer } from '@rpgjs/common'
-import { map } from 'rxjs'
-import { RpgSound } from './Sound/RpgSound'
-import { RpgClientEngine, RpgResource } from './index'
-import { RpgRenderer } from './Renderer'
-import { GameEngineClient } from './GameEngine'
-import { SceneMap } from './Scene/Map'
-
-interface GuiOptions {
- data: any,
- attachToSprite: boolean
- display: boolean,
- name: string
-}
-
-interface GuiList {
- [guiName: string]: GuiOptions
-}
-
-interface VueInstance extends ComponentPublicInstance {
- gui: GuiList,
- tooltips: RpgCommonPlayer[]
-}
-
-class Gui {
- private renderer: RpgRenderer
- private gameEngine: GameEngineClient
- private clientEngine: RpgClientEngine
- private app: App
- private vm: VueInstance
- private socket
- private gui: GuiList = {}
-
- /** @internal */
- _initalize(clientEngine: RpgClientEngine) {
-
- this.clientEngine = clientEngine
- this.renderer = clientEngine.renderer
- this.gameEngine = clientEngine.gameEngine
-
- const self = this
- const { gui } = this.renderer.options
- const selectorGui = this.renderer.guiEl
-
- const obj = {
- /* template: `
-
- `,*/
- render: RpgGuiCompiled,
- data() {
- return {
- gui,
- tooltips: []
- }
- },
- provide: () => {
- return {
- /**
- * Recovery of the current scene
- *
- * ```js
- * export default {
- * inject: ['rpgScene'],
- * mounted() {
- * const scene = this.rpgScene()
- * scene.stopInputs()
- * }
- * }
- * ```
- *
- * @prop {Function returns RpgScene} [rpgScene]
- * @memberof VueInject
- * */
- rpgScene: this.renderer.getScene.bind(this.renderer),
-
- /**
- * Retrieve the main container of the game
- *
- * ```js
- * export default {
- * inject: ['rpgStage'],
- * mounted() {
- * const blur = new PIXI.BlurFilter()
- this.rpgStage.filters = [blur]
- * }
- * }
- * ```
- *
- * @prop {PIXI.Container} [rpgStage]
- * @memberof VueInject
- * */
- rpgStage: this.renderer.stage,
-
- /**
- * Listen to all the objects present in the room (events and players)
- *
- * ```js
- * export default {
- * inject: ['rpgObjects'],
- * mounted() {
- * this.obs = this.rpgObjects.subscribe((objects) => {
- * for (let id in objects) {
- * const obj = objects[id]
- * console.log(obj.object, obj.paramsChanged)
- * }
- * })
- * },
- * unmounted() {
- * this.obs.unsubscribe()
- * }
- * }
- * ```
- *
- * > remember to unsubscribe for memory leaks
- *
- * It is an observable that returns an object:
- *
- * * the key is the object identifier
- * * The value is an object comprising:
- * * `object`: The entire object
- * * `paramsChanged`: Only the representation of the properties that have been changed on this object
- *
- * @prop {Observable<{ [objectId]: { object: object, paramsChanged: object } }>} [rpgObjects]
- * @memberof VueInject
- * */
- rpgObjects: this.clientEngine.objects,
-
- /**
- * Recovers and listens to the current player
- *
- * ```js
- * export default {
- * inject: ['rpgCurrentPlayer'],
- * mounted() {
- * this.obs = this.rpgCurrentPlayer.subscribe((obj) => {
- * console.log(obj.object, obj.paramsChanged)
- * })
- * },
- * unmounted() {
- * this.obs.unsubscribe()
- * }
- * }
- * ```
- *
- * * `object`: The whole player
- * * `paramsChanged`: Only the representation of the properties that have been changed on this player
- *
- * @prop {Observable<{ object: object, paramsChanged: object }>} [rpgCurrentPlayer]
- * @memberof VueInject
- * */
- rpgCurrentPlayer: this.clientEngine.objects
- .pipe(
- map((objects: any) => objects[this.gameEngine.playerId])
- ),
- rpgGameEngine: this.gameEngine,
-
- /**
- * Tell the server to close the GUI.
- *
- * It is a function with 2 parameters:
- * * `name`: The name of the component
- * * `data`: The data you want to pass to the server
- *
- * ```js
- * export default {
- * inject: ['rpgGuiClose'],
- * methods: {
- * close() {
- * this.rpgGuiClose('gui-name', {
- * amount: 1000
- * })
- * }
- * }
- * }
- * ```
- *
- * @prop {Function(name, data)} [rpgGuiClose]
- * @memberof VueInject
- * */
- rpgGuiClose(name: string, data?) {
- const guiId = name || this.$options.name
- self.socket.emit('gui.exit', {
- guiId,
- data
- })
- },
-
- /**
- * Perform an interaction with the open GUI
- *
- * It is a function with 2 parameters:
- * * `guiId`: The name of the component/Gui
- * * `name`: The name of the interaction (defined on the server side)
- * * `data`: Data to be sent
- *
- * ```js
- * export default {
- * inject: ['rpgGuiInteraction'],
- * methods: {
- * changeGold() {
- * this.rpgGuiInteraction('gui-name', 'change-gold', {
- * amount: 100
- * })
- * }
- * }
- * }
- * ```
- *
- * @prop {Function(guiId, name, data = {})} [rpgGuiInteraction]
- * @memberof VueInject
- * */
- rpgGuiInteraction: (guiId: string, name: string, data: any = {}) => {
- this.socket.emit('gui.interaction', {
- guiId,
- name,
- data
- })
- },
-
- /**
- * Listen to the keys that are pressed on the keyboard
- *
- * ```js
- * export default {
- * inject: ['rpgKeypress'],
- * mounted() {
- * this.obs = this.rpgKeypress.subscribe(({ inputName, control }) => {
- * console.log(inputName) // "escape"
- * console.log(control.actionName) // "back"
- * })
- * },
- * unmounted() {
- * this.obs.unsubscribe()
- * }
- * }
- * ```
- *
- * @prop {Observable<{ inputName: string, control: { actionName: string, options: any } }>} [rpgKeypress]
- * @memberof VueInject
- * */
- rpgKeypress: this.clientEngine.keyChange
- .pipe(
- map(name => {
- const control = this.clientEngine.controls.getControl(name)
- return {
- inputName: name,
- control
- }
- })
- ),
-
- /**
- * Recovers the socket.
- *
- * ```js
- * export default {
- * inject: ['rpgSocket'],
- * mounted() {
- * const socket = this.rpgSocket()
- * socket.emit('foo', 'bar')
- * }
- * }
- * ```
- *
- * @prop {Function returns RpgScene} [rpgSocket]
- * @memberof VueInject
- * */
- rpgSocket: () => this.socket,
-
- /**
- * The RpgGui object to control GUIs
- *
- * ```js
- * export default {
- * inject: ['rpgGui'],
- * mounted() {
- * const guis = this.rpgGui.getAll()
- * }
- * }
- * ```
- *
- * @prop {RpgGui} [rpgGui]
- * @memberof VueInject
- * */
- rpgGui: this,
-
- /**
- * Equivalent to RpgSound
- *
- * ```js
- * export default {
- * inject: ['rpgSound'],
- * mounted() {
- * this.rpgSound.get('my-sound-id').play()
- * }
- * }
- * ```
- *
- * @prop {RpgSound} [rpgSound]
- * @memberof VueInject
- * */
- rpgSound: RpgSound,
-
- /**
- * Find the game's image and sound library
- *
- * ```js
- * export default {
- * inject: ['rpgResource'],
- * mounted() {
- * const resourceImage = this.rpgResource.spritesheets.get('image_id')
- * const resourceSound = this.rpgResource.sounds.get('sound_id')
- * }
- * }
- * ```
- *
- * @prop { { spritesheets: Map, sounds: Map } } [rpgResource]
- * @memberof VueInject
- * */
- rpgResource: RpgResource,
-
- /**
- * Get RpgClientEngine instance
- *
- * ```js
- * export default {
- * inject: ['rpgEngine'],
- * mounted() {
- * const vueInstance = this.rpgEngine.vueInstance
- * }
- * }
- * ```
- *
- * @prop {RpgClientEngine} [rpgEngine]
- * @memberof VueInject
- * */
- rpgEngine: this.clientEngine
- }
- },
- computed: {
- fixedGui() {
- return Object.values(this.gui).filter((gui: any) => !gui.attachToSprite)
- },
- attachedGui() {
- return Object.values(this.gui).filter((gui: any) => gui.attachToSprite)
- }
- },
- methods: {
- propagate: (type: string, event) => {
- this.renderer.canvas.dispatchEvent(new MouseEvent(type, event))
- },
- tooltipPosition: (position: { x: number, y: number }) => {
- const scene = this.renderer.getScene()
- const viewport = scene?.viewport
- if (viewport) {
- const left = position.x - viewport.left
- const top = position.y - viewport.top
- return {
- transform: `translate(${left}px,${top}px)`
- }
- }
- },
- tooltipFilter(sprites: RpgCommonPlayer[], ui: GuiOptions): RpgCommonPlayer[] {
- return sprites.filter(tooltip => tooltip.guiDisplay)
- }
- }
- }
-
- this.app = createApp(obj)
-
- for (let ui of gui) {
- this.app.component(ui.name, ui)
- this.gui[ui.name] = {
- data: ui.data,
- attachToSprite: ui.rpgAttachToSprite,
- display: false,
- name: ui.name
- }
- }
- this.vm = this.app.mount(selectorGui) as VueInstance
- this.vm.gui = this.gui
- this.renderer.app = this.app
- this.renderer.vm = this.vm
- }
-
- /** @internal */
- update(logicObjects: RpgCommonPlayer) {
- this.vm.tooltips = Object.values(logicObjects).map((object: any) => object.object)
- }
-
- /** @internal */
- _setSocket(socket) {
- this.socket = socket
- this.socket.on('gui.open', ({ guiId, data }) => {
- this.display(guiId, data)
- })
- this.socket.on('gui.tooltip', ({ players, display }) => {
- for (let playerId of players) {
- const sprite = this.renderer.getScene()?.getSprite(playerId)
- if (sprite) sprite.guiDisplay = display
- }
- })
- this.socket.on('gui.exit', (guiId) => {
- this.hide(guiId)
- })
- }
-
- /** @internal */
- _setGui(id, obj) {
- const guiObj = this.get(id)
- if (!guiObj) {
- throw `The GUI named ${id} is non-existent. Please add the component in the gui property of the decorator @RpgClient`
- }
- for (let key in obj) {
- guiObj[key] = obj[key]
- }
- this.vm.gui = Object.assign({}, this.vm.gui)
- }
-
- /**
- * Get a GUI. You retrieve GUI data and information whether it is displayed or not
- *
- * ```ts
- * import { RpgGui } from '@rpgjs/client'
- *
- * const gui = RpgGui.get('my-gui')
- * console.log(gui.display) // false
- * ```
- *
- * @title Get a GUI
- * @method RpgGui.get(id)
- * @param {string} id
- * @returns { { data: any, display: boolean } }
- * @memberof RpgGui
- */
- get(id) {
- if (typeof id != 'string') {
- id = id.name
- }
- return this.gui[id]
- }
-
- /**
- * Get all GUI. You retrieve GUI data and information whether it is displayed or not
- *
- * ```ts
- * import { RpgGui } from '@rpgjs/client'
- *
- * const gui = RpgGui.getAll()
- * console.log(gui) // { 'rpg-dialog': { data: {}, display: true } }
- * ```
- *
- * @title Get all GUI
- * @method RpgGui.getAll()
- * @returns { { [guiName]: { data: any, display: boolean } }}
- * @memberof RpgGui
- */
- getAll() {
- return this.gui
- }
-
- /**
- * Checks if the GUI exists RpgClient's gui array
- *
- * ```ts
- * import { RpgGui } from '@rpgjs/client'
- *
- * RpgGui.exists('my-gui') // true
- * ```
- *
- * @title GUI Exists ?
- * @method RpgGui.exists(id)
- * @param {string} id
- * @returns {boolean}
- * @memberof RpgGui
- */
- exists(id: string): boolean {
- return !!this.get(id)
- }
-
- /**
- * Calls a GUI according to identifier. You can send retrievable data in the component
- *
- * ```ts
- * import { RpgGui } from '@rpgjs/client'
- *
- * RpgGui.display('my-gui')
- * ```
- *
- * @title Display GUI
- * @method RpgGui.display(id,data)
- * @param {string} id
- * @param {object} [data]
- * @returns {void}
- * @memberof RpgGui
- */
- display(id: string, data = {}) {
- this._setGui(id, {
- display: true,
- data
- })
- }
-
- /**
- * Hide a GUI according to its identifier
- *
- * ```ts
- * import { RpgGui } from '@rpgjs/client'
- *
- * RpgGui.hide('my-gui')
- * ```
- *
- * @title Hide GUI
- * @method RpgGui.hide(id)
- * @param {string} id
- * @returns {void}
- * @memberof RpgGui
- */
- hide(id: string) {
- this._setGui(id, {
- display: false
- })
- }
-
- /** @internal */
- clear() {
- this.gui = {}
- }
-}
-
-export const RpgGui = new Gui()
\ No newline at end of file
diff --git a/packages/client/src/RpgGuiCompiled.ts b/packages/client/src/RpgGuiCompiled.ts
deleted file mode 100644
index 5a3c1a5d..00000000
--- a/packages/client/src/RpgGuiCompiled.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-const __sfc__ = {}
-import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveDynamicComponent as _resolveDynamicComponent, normalizeProps as _normalizeProps, guardReactiveProps as _guardReactiveProps, createBlock as _createBlock, mergeProps as _mergeProps, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode } from "vue"
-
-const _hoisted_1 = {
- id: "tooltips",
- style: {"position":"absolute","top":"0","left":"0"}
- }
-export default function render(_ctx, _cache) {
- return (_openBlock(), _createElementBlock("div", {
- onPointerdown: _cache[0] || (_cache[0] = $event => (_ctx.propagate('pointerdown', $event))),
- onPointermove: _cache[1] || (_cache[1] = $event => (_ctx.propagate('pointermove', $event))),
- onPointerleave: _cache[2] || (_cache[2] = $event => (_ctx.propagate('pointerleave', $event))),
- onPointerover: _cache[3] || (_cache[3] = $event => (_ctx.propagate('pointerover', $event))),
- onPointercancel: _cache[4] || (_cache[4] = $event => (_ctx.propagate('pointercancel', $event))),
- onPointerup: _cache[5] || (_cache[5] = $event => (_ctx.propagate('pointerup', $event)))
- }, [
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.fixedGui, (ui) => {
- return (_openBlock(), _createElementBlock(_Fragment, null, [
- (ui.display)
- ? (_openBlock(), _createBlock(_resolveDynamicComponent(ui.name), _normalizeProps(_mergeProps({ key: 0 }, ui.data)), null, 16 /* FULL_PROPS */))
- : _createCommentVNode("v-if", true)
- ], 64 /* STABLE_FRAGMENT */))
- }), 256 /* UNKEYED_FRAGMENT */)),
- _createElementVNode("div", _hoisted_1, [
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.attachedGui, (ui) => {
- return (_openBlock(), _createElementBlock(_Fragment, null, [
- (ui.display)
- ? (_openBlock(true), _createElementBlock(_Fragment, { key: 0 }, _renderList(_ctx.tooltipFilter(_ctx.tooltips, ui), (tooltip) => {
- return (_openBlock(), _createElementBlock("div", {
- style: _normalizeStyle(_ctx.tooltipPosition(tooltip.position))
- }, [
- (_openBlock(), _createBlock(_resolveDynamicComponent(ui.name), _mergeProps({ ...ui.data, spriteData: tooltip }, {
- ref_for: true,
- ref: ui.name
- }), null, 16 /* FULL_PROPS */))
- ], 4 /* STYLE */))
- }), 256 /* UNKEYED_FRAGMENT */))
- : _createCommentVNode("v-if", true)
- ], 64 /* STABLE_FRAGMENT */))
- }), 256 /* UNKEYED_FRAGMENT */))
- ])
- ], 32 /* HYDRATE_EVENTS */))
- }
diff --git a/packages/client/src/Scene/Scene.ts b/packages/client/src/Scene/Scene.ts
index d0c4664c..0db0a8d4 100644
--- a/packages/client/src/Scene/Scene.ts
+++ b/packages/client/src/Scene/Scene.ts
@@ -2,12 +2,12 @@ import { RpgPlugin, HookClient, DefaultInput } from '@rpgjs/common'
import { KeyboardControls } from '../KeyboardControls'
import RpgSprite from '../Sprite/Character'
import { Animation } from '../Effects/Animation'
-import { BehaviorSubject, Observable } from 'rxjs'
-import { RpgGui } from '../RpgGui'
+import { BehaviorSubject, Observable, Subject } from 'rxjs'
import { GameEngineClient } from '../GameEngine'
import { RpgComponent } from '../Components/Component'
import { Controls } from '@rpgjs/types'
import { Container } from 'pixi.js'
+import { RpgGui } from '../Gui/Gui'
export type SceneObservableData = {
data: {
@@ -37,6 +37,32 @@ export abstract class Scene {
partial: {}
})
+ /**
+ * Listen to the movement of objects on stage
+ *
+ * @prop {Observable<{ [key: string]: object }>} [objectsMoving]
+ * @readonly
+ * @memberof RpgScene
+ * @since v4.1.0
+ *
+ * In /scene-map.ts
+ *
+ * ```ts
+ * import { RpgSceneMap } from '@rpgjs/client'
+ *
+ * export default {
+ * onAfterLoading(scene: RpgSceneMap) {
+ * scene.objectsMoving.subscribe((objects) => {
+ * console.log(objects)
+ * })
+ * }
+ * }
+ * ```
+ */
+ public readonly objectsMoving: Subject<{
+ [key: string]: any
+ }> = new Subject()
+
constructor(public game: GameEngineClient) {
const { globalConfig } = this.game.clientEngine
this.controls = this.game.clientEngine.controls
@@ -45,6 +71,7 @@ export abstract class Scene {
...(globalConfig.inputs || {})
}
this.controls.setInputs(this.inputs || mergeInputs)
+ RpgGui._setSceneReady(this)
}
/**
@@ -106,8 +133,9 @@ export abstract class Scene {
}
const renderObjects = this.objects
const sizeLogic = Object.values(logicObjects).length
+ const objectMoving = {}
for (let key in logicObjects) {
- const val: SceneSpriteLogic = logicObjects[key].object
+ const val: any = logicObjects[key].object
const valueChanged = logicObjects[key].paramsChanged
if (!renderObjects.has(key)) {
const sprite = this.addObject(val, key)
@@ -118,6 +146,7 @@ export abstract class Scene {
if (!object?.update) return
const ret = object.update(val, valueChanged, time, deltaRatio)
this.triggerSpriteChanges(val, object, ret.moving)
+ if (ret.moving) objectMoving[val.id] = val
}
}
if (sizeLogic < renderObjects.size) {
@@ -131,7 +160,9 @@ export abstract class Scene {
animation.update(deltaRatio)
}
this.onDraw(time)
- RpgGui.update(logicObjects)
+ if (Object.values(objectMoving).length) {
+ this.objectsMoving.next(objectMoving)
+ }
RpgPlugin.emit(HookClient.SceneDraw, this)
}
diff --git a/packages/client/src/index.ts b/packages/client/src/index.ts
index d51781c9..f2ceb701 100644
--- a/packages/client/src/index.ts
+++ b/packages/client/src/index.ts
@@ -13,9 +13,10 @@ export { Animation as AnimationClass } from './Effects/Animation'
export type { ISpriteCharacter } from './Interfaces/Character'
export { SceneData } from './Scene/SceneData'
export { SceneMap as RpgSceneMap } from './Scene/Map'
-export { RpgGui } from './RpgGui';
+export { RpgGui } from './Gui/Gui';
export { Timeline, Ease } from './Effects/Timeline';
export { RpgComponent, RpgComponent as RpgSprite } from './Components/Component'
+export { World, room } from 'simple-room-client'
import { spritesheets } from './Sprite/Spritesheets'
import { sounds } from './Sound/Sounds'
diff --git a/packages/common/src/Utils.ts b/packages/common/src/Utils.ts
index 576d5a24..fe760ef3 100644
--- a/packages/common/src/Utils.ts
+++ b/packages/common/src/Utils.ts
@@ -53,6 +53,12 @@ export function capitalize(s: unknown): string {
return s.charAt(0).toUpperCase() + s.slice(1)
}
+export function camelToKebab(str: string): string {
+ return str
+ .replace(/([a-z])([A-Z])/g, '$1-$2')
+ .toLowerCase();
+}
+
export function arrayEquals(a: any[], b: any[]): boolean {
return a.length === b.length && a.every((v, i) => v === b[i])
}
@@ -160,6 +166,16 @@ export function set(obj, path, value, onlyPlainObject = false) {
return obj; // Return the top-level object to allow chaining
};
+export function elementToPositionAbsolute(element: HTMLElement) {
+ element.style.position = 'absolute'
+ element.style.top = '0'
+ element.style.left = '0'
+ element.style.right = '0'
+ element.style.bottom = '0'
+ element.style.width = '100%'
+ element.style.height = '100%'
+}
+
export default {
random,
isBrowser,
@@ -186,5 +202,7 @@ export default {
preciseNow,
hexaToNumber,
set,
- round
+ round,
+ camelToKebab,
+ elementToPositionAbsolute
}
\ No newline at end of file
diff --git a/packages/compiler/package-lock.json b/packages/compiler/package-lock.json
index 0c9c805b..024b5fbc 100644
--- a/packages/compiler/package-lock.json
+++ b/packages/compiler/package-lock.json
@@ -17,6 +17,7 @@
"@esbuild-plugins/node-globals-polyfill": "^0.2.3",
"@esbuild-plugins/node-modules-polyfill": "^0.2.2",
"@iarna/toml": "^2.2.5",
+ "@vitejs/plugin-react": "^4.1.0",
"@vitejs/plugin-vue": "^4.2.1",
"ajv": "^8.12.0",
"ajv-formats": "^2.1.1",
@@ -110,25 +111,25 @@
}
},
"node_modules/@babel/core": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz",
- "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.0.tgz",
+ "integrity": "sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==",
"dependencies": {
"@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.21.4",
- "@babel/generator": "^7.21.4",
- "@babel/helper-compilation-targets": "^7.21.4",
- "@babel/helper-module-transforms": "^7.21.2",
- "@babel/helpers": "^7.21.0",
- "@babel/parser": "^7.21.4",
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.21.4",
- "@babel/types": "^7.21.4",
- "convert-source-map": "^1.7.0",
+ "@babel/code-frame": "^7.22.13",
+ "@babel/generator": "^7.23.0",
+ "@babel/helper-compilation-targets": "^7.22.15",
+ "@babel/helper-module-transforms": "^7.23.0",
+ "@babel/helpers": "^7.23.0",
+ "@babel/parser": "^7.23.0",
+ "@babel/template": "^7.22.15",
+ "@babel/traverse": "^7.23.0",
+ "@babel/types": "^7.23.0",
+ "convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
- "json5": "^2.2.2",
- "semver": "^6.3.0"
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
@@ -160,11 +161,11 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/@babel/generator": {
- "version": "7.21.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz",
- "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
+ "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
"dependencies": {
- "@babel/types": "^7.21.5",
+ "@babel/types": "^7.23.0",
"@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
@@ -196,12 +197,12 @@
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.22.10",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz",
- "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz",
+ "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==",
"dependencies": {
"@babel/compat-data": "^7.22.9",
- "@babel/helper-validator-option": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.15",
"browserslist": "^4.21.9",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
@@ -293,20 +294,20 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/@babel/helper-environment-visitor": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz",
- "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+ "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-function-name": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz",
- "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
+ "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
"dependencies": {
- "@babel/template": "^7.22.5",
- "@babel/types": "^7.22.5"
+ "@babel/template": "^7.22.15",
+ "@babel/types": "^7.23.0"
},
"engines": {
"node": ">=6.9.0"
@@ -335,26 +336,26 @@
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz",
- "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
+ "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.22.15"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.22.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz",
- "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz",
+ "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==",
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.5",
- "@babel/helper-module-imports": "^7.22.5",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-module-imports": "^7.22.15",
"@babel/helper-simple-access": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/helper-validator-identifier": "^7.22.5"
+ "@babel/helper-validator-identifier": "^7.22.20"
},
"engines": {
"node": ">=6.9.0"
@@ -456,17 +457,17 @@
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz",
- "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz",
- "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz",
+ "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==",
"engines": {
"node": ">=6.9.0"
}
@@ -485,13 +486,13 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz",
- "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==",
+ "version": "7.23.1",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.1.tgz",
+ "integrity": "sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==",
"dependencies": {
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.21.0",
- "@babel/types": "^7.21.0"
+ "@babel/template": "^7.22.15",
+ "@babel/traverse": "^7.23.0",
+ "@babel/types": "^7.23.0"
},
"engines": {
"node": ">=6.9.0"
@@ -511,9 +512,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.13.tgz",
- "integrity": "sha512-3l6+4YOvc9wx7VlCSw4yQfcBo01ECA8TicQfbnCPuCEpRQrf+gTUyGdxNw+pyTUyywp6JRD1w0YQs9TpBXYlkw==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
+ "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -1344,6 +1345,34 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-transform-react-jsx-self": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz",
+ "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-source": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz",
+ "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
"node_modules/@babel/plugin-transform-regenerator": {
"version": "7.22.10",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz",
@@ -1626,31 +1655,31 @@
}
},
"node_modules/@babel/template": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz",
- "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
+ "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
"dependencies": {
- "@babel/code-frame": "^7.22.5",
- "@babel/parser": "^7.22.5",
- "@babel/types": "^7.22.5"
+ "@babel/code-frame": "^7.22.13",
+ "@babel/parser": "^7.22.15",
+ "@babel/types": "^7.22.15"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.21.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz",
- "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==",
- "dependencies": {
- "@babel/code-frame": "^7.21.4",
- "@babel/generator": "^7.21.5",
- "@babel/helper-environment-visitor": "^7.21.5",
- "@babel/helper-function-name": "^7.21.0",
- "@babel/helper-hoist-variables": "^7.18.6",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/parser": "^7.21.5",
- "@babel/types": "^7.21.5",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.0.tgz",
+ "integrity": "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==",
+ "dependencies": {
+ "@babel/code-frame": "^7.22.13",
+ "@babel/generator": "^7.23.0",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.23.0",
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/parser": "^7.23.0",
+ "@babel/types": "^7.23.0",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
@@ -1680,12 +1709,12 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/@babel/types": {
- "version": "7.22.11",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz",
- "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
+ "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
"dependencies": {
"@babel/helper-string-parser": "^7.22.5",
- "@babel/helper-validator-identifier": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
"engines": {
@@ -2182,6 +2211,43 @@
"string.prototype.matchall": "^4.0.6"
}
},
+ "node_modules/@types/babel__core": {
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz",
+ "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==",
+ "dependencies": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "node_modules/@types/babel__generator": {
+ "version": "7.6.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz",
+ "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==",
+ "dependencies": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__template": {
+ "version": "7.4.2",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz",
+ "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==",
+ "dependencies": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__traverse": {
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz",
+ "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==",
+ "dependencies": {
+ "@babel/types": "^7.20.7"
+ }
+ },
"node_modules/@types/chai": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz",
@@ -2218,6 +2284,24 @@
"resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz",
"integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g=="
},
+ "node_modules/@vitejs/plugin-react": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.1.0.tgz",
+ "integrity": "sha512-rM0SqazU9iqPUraQ2JlIvReeaxOoRj6n+PzB1C0cBzIbd8qP336nC39/R9yPi3wVcah7E7j/kdU1uCUqMEU4OQ==",
+ "dependencies": {
+ "@babel/core": "^7.22.20",
+ "@babel/plugin-transform-react-jsx-self": "^7.22.5",
+ "@babel/plugin-transform-react-jsx-source": "^7.22.5",
+ "@types/babel__core": "^7.20.2",
+ "react-refresh": "^0.14.0"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^4.2.0"
+ }
+ },
"node_modules/@vitejs/plugin-vue": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.2.1.tgz",
@@ -2994,9 +3078,9 @@
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
"node_modules/convert-source-map": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
- "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
},
"node_modules/core-js-compat": {
"version": "3.32.1",
@@ -4893,6 +4977,14 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
},
+ "node_modules/react-refresh": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz",
+ "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/readable-stream": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
@@ -6655,25 +6747,25 @@
"integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ=="
},
"@babel/core": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz",
- "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.0.tgz",
+ "integrity": "sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==",
"requires": {
"@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.21.4",
- "@babel/generator": "^7.21.4",
- "@babel/helper-compilation-targets": "^7.21.4",
- "@babel/helper-module-transforms": "^7.21.2",
- "@babel/helpers": "^7.21.0",
- "@babel/parser": "^7.21.4",
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.21.4",
- "@babel/types": "^7.21.4",
- "convert-source-map": "^1.7.0",
+ "@babel/code-frame": "^7.22.13",
+ "@babel/generator": "^7.23.0",
+ "@babel/helper-compilation-targets": "^7.22.15",
+ "@babel/helper-module-transforms": "^7.23.0",
+ "@babel/helpers": "^7.23.0",
+ "@babel/parser": "^7.23.0",
+ "@babel/template": "^7.22.15",
+ "@babel/traverse": "^7.23.0",
+ "@babel/types": "^7.23.0",
+ "convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
- "json5": "^2.2.2",
- "semver": "^6.3.0"
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
},
"dependencies": {
"debug": {
@@ -6692,11 +6784,11 @@
}
},
"@babel/generator": {
- "version": "7.21.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz",
- "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
+ "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
"requires": {
- "@babel/types": "^7.21.5",
+ "@babel/types": "^7.23.0",
"@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
@@ -6719,12 +6811,12 @@
}
},
"@babel/helper-compilation-targets": {
- "version": "7.22.10",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz",
- "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz",
+ "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==",
"requires": {
"@babel/compat-data": "^7.22.9",
- "@babel/helper-validator-option": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.15",
"browserslist": "^4.21.9",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
@@ -6794,17 +6886,17 @@
}
},
"@babel/helper-environment-visitor": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz",
- "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q=="
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+ "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA=="
},
"@babel/helper-function-name": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz",
- "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
+ "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
"requires": {
- "@babel/template": "^7.22.5",
- "@babel/types": "^7.22.5"
+ "@babel/template": "^7.22.15",
+ "@babel/types": "^7.23.0"
}
},
"@babel/helper-hoist-variables": {
@@ -6824,23 +6916,23 @@
}
},
"@babel/helper-module-imports": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz",
- "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
+ "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
"requires": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.22.15"
}
},
"@babel/helper-module-transforms": {
- "version": "7.22.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz",
- "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz",
+ "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==",
"requires": {
- "@babel/helper-environment-visitor": "^7.22.5",
- "@babel/helper-module-imports": "^7.22.5",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-module-imports": "^7.22.15",
"@babel/helper-simple-access": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/helper-validator-identifier": "^7.22.5"
+ "@babel/helper-validator-identifier": "^7.22.20"
}
},
"@babel/helper-optimise-call-expression": {
@@ -6906,14 +6998,14 @@
"integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw=="
},
"@babel/helper-validator-identifier": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz",
- "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ=="
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A=="
},
"@babel/helper-validator-option": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz",
- "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw=="
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz",
+ "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA=="
},
"@babel/helper-wrap-function": {
"version": "7.22.10",
@@ -6926,13 +7018,13 @@
}
},
"@babel/helpers": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz",
- "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==",
+ "version": "7.23.1",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.1.tgz",
+ "integrity": "sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==",
"requires": {
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.21.0",
- "@babel/types": "^7.21.0"
+ "@babel/template": "^7.22.15",
+ "@babel/traverse": "^7.23.0",
+ "@babel/types": "^7.23.0"
}
},
"@babel/highlight": {
@@ -6946,9 +7038,9 @@
}
},
"@babel/parser": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.13.tgz",
- "integrity": "sha512-3l6+4YOvc9wx7VlCSw4yQfcBo01ECA8TicQfbnCPuCEpRQrf+gTUyGdxNw+pyTUyywp6JRD1w0YQs9TpBXYlkw=="
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
+ "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw=="
},
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
"version": "7.22.5",
@@ -7462,6 +7554,22 @@
"@babel/helper-plugin-utils": "^7.22.5"
}
},
+ "@babel/plugin-transform-react-jsx-self": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz",
+ "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-react-jsx-source": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz",
+ "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
"@babel/plugin-transform-regenerator": {
"version": "7.22.10",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz",
@@ -7666,28 +7774,28 @@
}
},
"@babel/template": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz",
- "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
+ "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
"requires": {
- "@babel/code-frame": "^7.22.5",
- "@babel/parser": "^7.22.5",
- "@babel/types": "^7.22.5"
+ "@babel/code-frame": "^7.22.13",
+ "@babel/parser": "^7.22.15",
+ "@babel/types": "^7.22.15"
}
},
"@babel/traverse": {
- "version": "7.21.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz",
- "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==",
- "requires": {
- "@babel/code-frame": "^7.21.4",
- "@babel/generator": "^7.21.5",
- "@babel/helper-environment-visitor": "^7.21.5",
- "@babel/helper-function-name": "^7.21.0",
- "@babel/helper-hoist-variables": "^7.18.6",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/parser": "^7.21.5",
- "@babel/types": "^7.21.5",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.0.tgz",
+ "integrity": "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==",
+ "requires": {
+ "@babel/code-frame": "^7.22.13",
+ "@babel/generator": "^7.23.0",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.23.0",
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/parser": "^7.23.0",
+ "@babel/types": "^7.23.0",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
@@ -7708,12 +7816,12 @@
}
},
"@babel/types": {
- "version": "7.22.11",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz",
- "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
+ "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
"requires": {
"@babel/helper-string-parser": "^7.22.5",
- "@babel/helper-validator-identifier": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
}
},
@@ -7983,6 +8091,43 @@
"string.prototype.matchall": "^4.0.6"
}
},
+ "@types/babel__core": {
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz",
+ "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==",
+ "requires": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "@types/babel__generator": {
+ "version": "7.6.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz",
+ "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==",
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@types/babel__template": {
+ "version": "7.4.2",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz",
+ "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==",
+ "requires": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@types/babel__traverse": {
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz",
+ "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==",
+ "requires": {
+ "@babel/types": "^7.20.7"
+ }
+ },
"@types/chai": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz",
@@ -8019,6 +8164,18 @@
"resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz",
"integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g=="
},
+ "@vitejs/plugin-react": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.1.0.tgz",
+ "integrity": "sha512-rM0SqazU9iqPUraQ2JlIvReeaxOoRj6n+PzB1C0cBzIbd8qP336nC39/R9yPi3wVcah7E7j/kdU1uCUqMEU4OQ==",
+ "requires": {
+ "@babel/core": "^7.22.20",
+ "@babel/plugin-transform-react-jsx-self": "^7.22.5",
+ "@babel/plugin-transform-react-jsx-source": "^7.22.5",
+ "@types/babel__core": "^7.20.2",
+ "react-refresh": "^0.14.0"
+ }
+ },
"@vitejs/plugin-vue": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.2.1.tgz",
@@ -8599,9 +8756,9 @@
}
},
"convert-source-map": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
- "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
},
"core-js-compat": {
"version": "3.32.1",
@@ -9920,6 +10077,11 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
},
+ "react-refresh": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz",
+ "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ=="
+ },
"readable-stream": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
diff --git a/packages/compiler/package.json b/packages/compiler/package.json
index cc459527..7f3f4fa8 100644
--- a/packages/compiler/package.json
+++ b/packages/compiler/package.json
@@ -26,6 +26,7 @@
"@esbuild-plugins/node-globals-polyfill": "^0.2.3",
"@esbuild-plugins/node-modules-polyfill": "^0.2.2",
"@iarna/toml": "^2.2.5",
+ "@vitejs/plugin-react": "^4.1.0",
"@vitejs/plugin-vue": "^4.2.1",
"ajv": "^8.12.0",
"ajv-formats": "^2.1.1",
diff --git a/packages/compiler/src/build/client-config.ts b/packages/compiler/src/build/client-config.ts
index 1eb07c2e..b1445f5d 100644
--- a/packages/compiler/src/build/client-config.ts
+++ b/packages/compiler/src/build/client-config.ts
@@ -7,6 +7,7 @@ import { resolve, join } from 'path'
import requireTransform from './vite-plugin-require.js';
import { flagTransform } from './vite-plugin-flag-transform.js';
import vue from '@vitejs/plugin-vue'
+import react from '@vitejs/plugin-react'
import { worldTransformPlugin } from './vite-plugin-world-transform.js';
import fs from 'fs/promises'
import _fs from 'fs'
@@ -135,6 +136,14 @@ export async function clientBuildConfig(dirname: string, options: ClientBuildCon
buildOptions.outputDir = 'dist'
}
+ // found react packages in node_modules
+ const hasPkg = pkg => _fs.existsSync(join(cwd(), 'node_modules', pkg))
+ let hasReact = false
+ if (hasPkg('react') && hasPkg('react-dom')) {
+ process.env.VITE_REACT = 'true'
+ hasReact = true
+ }
+
const libMode = config.vite?.build?.lib
const vite = config.vite ?? {}
@@ -193,6 +202,7 @@ export async function clientBuildConfig(dirname: string, options: ClientBuildCon
plugins = [
...plugins,
vue(),
+ react(),
cssPlugin(config),
codeInjectorPlugin(),
NodeModulesPolyfillPlugin(),
@@ -360,6 +370,19 @@ export async function clientBuildConfig(dirname: string, options: ClientBuildCon
}
}
+ const external: string[] = []
+
+ if (libMode) {
+ external.push('vue')
+ }
+
+ if (!hasReact) {
+ external.push('react', 'react-dom/client')
+ }
+
+ if (vite?.build?.external) {
+ external.push(...vite.build.external)
+ }
const viteConfig = {
mode: options.mode || 'development',
@@ -372,7 +395,7 @@ export async function clientBuildConfig(dirname: string, options: ClientBuildCon
},
extensions: ['.ts', '.js', '.jsx', '.json', '.vue', '.css', '.scss', '.sass', '.html', 'tmx', 'tsx', '.toml'],
},
- assetsInclude: ['**/*.tmx', '**/*.tsx'],
+ assetsInclude: ['**/*.tmx', "{!(gui)/**/*}.tsx"],
server: options.server,
logLevel: options.server?.loglevel,
debug: options.server?.debug,
@@ -401,15 +424,16 @@ export async function clientBuildConfig(dirname: string, options: ClientBuildCon
!isServer ? nodePolyfills() as any : null
],
...(libMode ? {
- external: ['vue']
+ external
} : {
input: {
main: plugin ? plugin.entry :
!isServer ?
resolve(dirname, 'index.html') :
entryPointServer()
- },
+ }
}),
+ external
},
...moreBuildOptions
},
diff --git a/packages/compiler/src/build/vite-plugin-config.toml.ts b/packages/compiler/src/build/vite-plugin-config.toml.ts
index ba863281..52b88146 100644
--- a/packages/compiler/src/build/vite-plugin-config.toml.ts
+++ b/packages/compiler/src/build/vite-plugin-config.toml.ts
@@ -227,7 +227,7 @@ export function loadClientFiles(modulePath: string, options, config) {
const importSceneMapString = importString(modulePath, 'scene-map', 'sceneMap')
const importSpriteString = importString(modulePath, 'sprite')
const importEngine = importString(modulePath, 'client', 'engine')
- const guiFilesString = searchFolderAndTransformToImportString('gui', modulePath, '.vue')
+ const guiFilesString = searchFolderAndTransformToImportString('gui', modulePath, ['.vue', '.tsx', '.jsx'])
let importSpritesheets: ImportImageObject[] = []
const extraOptions = {
@@ -440,7 +440,8 @@ export default function configTomlPlugin(options: ClientBuildConfigOptions = {},
VITE_BUILT: ${env.VITE_BUILT},
VITE_SERVER_URL: ${serverUrl ? "'" + serverUrl + "'" : 'undefined'},
VITE_RPG_TYPE: '${options.type ?? 'mmorpg'}',
- VITE_ASSETS_PATH: '${env.VITE_ASSETS_PATH ?? ''}'
+ VITE_ASSETS_PATH: '${env.VITE_ASSETS_PATH ?? ''}',
+ VITE_REACT: ${env.VITE_REACT},
}`
if (id.endsWith(MODULE_NAME)) {
const modulesToImport = modules.reduce((acc, module) => {
diff --git a/packages/compiler/src/build/vite-plugin-map-extract.ts b/packages/compiler/src/build/vite-plugin-map-extract.ts
index 8d14d0db..ff730a68 100644
--- a/packages/compiler/src/build/vite-plugin-map-extract.ts
+++ b/packages/compiler/src/build/vite-plugin-map-extract.ts
@@ -5,6 +5,8 @@ import { globFiles } from './utils.js';
// Process a TSX file and copy its image to the output directory
async function processTsxFile(tsxFile: string, output: string) {
+ if (tsxFile.includes('gui')) return
+
const content = fs.readFileSync(tsxFile, 'utf-8');
const result = await parseStringPromise(content);
const imagePath = path.join(path.dirname(tsxFile), result.tileset.image[0].$.source);
diff --git a/packages/compiler/src/build/vite-plugin-map-update.ts b/packages/compiler/src/build/vite-plugin-map-update.ts
index 7f202b56..4751ddfe 100644
--- a/packages/compiler/src/build/vite-plugin-map-update.ts
+++ b/packages/compiler/src/build/vite-plugin-map-update.ts
@@ -23,7 +23,7 @@ export function mapUpdatePlugin(_serverUrl?: string): Plugin {
data
}).catch(errorApi)
}
- else if (file.endsWith('tsx')) {
+ else if (file.endsWith('tsx') && !file.includes('gui')) {
info(`File ${file} changed, updating tileset...`)
// open file
const data = await fs.readFile(file, 'utf-8');
diff --git a/packages/compiler/src/build/vite-plugin-require.ts b/packages/compiler/src/build/vite-plugin-require.ts
index 212636fd..28c51a23 100644
--- a/packages/compiler/src/build/vite-plugin-require.ts
+++ b/packages/compiler/src/build/vite-plugin-require.ts
@@ -6,8 +6,8 @@ import _generate from "@babel/generator";
import { Plugin } from "vite";
import { importDeclaration, importDefaultSpecifier, stringLiteral, identifier, newExpression, expressionStatement, memberExpression, BinaryExpression, ExpressionStatement } from "@babel/types";
-const traverse = _traverse.default ?? _generate;
-const generate = _generate.default ?? _generate;
+const traverse = _traverse['default'] ?? _generate;
+const generate = _generate['default'] ?? _generate;
export default function vitePluginRequire(opts?: {
fileRegex?: RegExp;
diff --git a/packages/compiler/src/build/vite-plugin-tmx-tsx-mover.ts b/packages/compiler/src/build/vite-plugin-tmx-tsx-mover.ts
index 1a291b54..c5e3b5d1 100644
--- a/packages/compiler/src/build/vite-plugin-tmx-tsx-mover.ts
+++ b/packages/compiler/src/build/vite-plugin-tmx-tsx-mover.ts
@@ -8,6 +8,7 @@ const moveTMXTSXFiles = async (outputDir: string): Promise => {
const files = globFiles('@(tmx|tsx)')
for (const file of files) {
+ if (file.includes('gui')) continue;
const target = path.join(assetDir, path.basename(file));
await fs.copy(file, target, { overwrite: true });
}
diff --git a/packages/compiler/src/build/vite-plugin-tsx-xml.ts b/packages/compiler/src/build/vite-plugin-tsx-xml.ts
index a1f7f408..45fae403 100644
--- a/packages/compiler/src/build/vite-plugin-tsx-xml.ts
+++ b/packages/compiler/src/build/vite-plugin-tsx-xml.ts
@@ -9,10 +9,9 @@ export const tsxXmlPlugin = (): Plugin => {
configureServer(server) {
server.middlewares.use((req, res, next) => {
- if (req.url && (req.url.endsWith('.tsx'))) {
+ if (req.url && (req.url.endsWith('.tsx')) && !req.url.includes('gui')) {
const publicPath = server.config.root;
const filePath = path.join(publicPath, req.url);
-
if (fs.existsSync(filePath)) {
const xmlContent = fs.readFileSync(filePath, 'utf-8');
res.setHeader('Content-Type', 'application/xml');
diff --git a/packages/sample2/main/client.ts b/packages/sample2/main/client.ts
index 65ba06c9..7abe2772 100644
--- a/packages/sample2/main/client.ts
+++ b/packages/sample2/main/client.ts
@@ -1,51 +1,5 @@
import { RpgClientEngine, Timeline, Ease } from "@rpgjs/client"
-const animations = new Timeline()
-.add(40, ({ scale }) => [{
- frameX: 0,
- frameY: 1,
- scale: [scale],
-}], {
- scale: {
- from: 1,
- to: 1.3,
- easing: Ease.easeInBounce
- }
-})
-.add(40, ({ scale }) => [{
- frameX: 1,
- frameY: 1,
- scale: [scale],
-}], {
- scale: {
- from: 1.3,
- to: 1.5,
- }
-})
-.add(40, ({ scale }) => [{
- frameX: 3,
- frameY: 1,
- scale: [scale],
-}], {
- scale: {
- from: 1.5,
- to: 1.3,
- }
-})
-.add(40, ({ scale }) => [{
- frameX: 2,
- frameY: 1,
- scale: [scale],
-}], {
- scale: {
- from: 1.3,
- to: 1.2,
- }
-})
-.create()
-
-console.log(animations)
-
export default {
async onStart(engine: RpgClientEngine) {
diff --git a/packages/sample2/main/gui/test.tsx b/packages/sample2/main/gui/test.tsx
new file mode 100644
index 00000000..2286b07d
--- /dev/null
+++ b/packages/sample2/main/gui/test.tsx
@@ -0,0 +1,9 @@
+import { room } from '@rpgjs/client'
+import { RpgReactContext, useObjects, useCurrentPlayer } from '@rpgjs/client/react'
+import { useContext } from 'react'
+
+export default function Test({ gold }) {
+ const player = useCurrentPlayer()
+ console.log(player)
+ return <>{player?.position?.x}>
+}
\ No newline at end of file
diff --git a/packages/sample2/main/gui/tooltip.tsx b/packages/sample2/main/gui/tooltip.tsx
new file mode 100644
index 00000000..dd0a1b60
--- /dev/null
+++ b/packages/sample2/main/gui/tooltip.tsx
@@ -0,0 +1,13 @@
+import { RpgReactContext } from '@rpgjs/client/react'
+import { useContext } from 'react'
+
+export default function tooltip({ spriteData }) {
+ const context = useContext(RpgReactContext)
+ return (
+
+ {spriteData.position.x}, {spriteData.position.y}
+
+ )
+}
+
+tooltip.rpgAttachToSprite = true
\ No newline at end of file
diff --git a/packages/sample2/main/gui/tooltip.vue b/packages/sample2/main/gui/tooltip.vue
new file mode 100644
index 00000000..b5a38509
--- /dev/null
+++ b/packages/sample2/main/gui/tooltip.vue
@@ -0,0 +1,11 @@
+
+ {{ spriteData.position.x }}, {{ spriteData.position.y }}
+
+
+
\ No newline at end of file
diff --git a/packages/sample2/main/player.ts b/packages/sample2/main/player.ts
index fcf9b8ea..0e5dbc61 100644
--- a/packages/sample2/main/player.ts
+++ b/packages/sample2/main/player.ts
@@ -13,7 +13,8 @@ const player: RpgPlayerHooks = {
onInput(player: RpgPlayer, { input }) {
const map = player.getCurrentMap()
if (input == 'action') {
-
+ const gui = player.gui('test')
+ gui.open({ gold: 10 })
// const event = map?.createDynamicEvent({
// x: player.position.x + 5,
// y: player.position.y + 5,
@@ -21,8 +22,7 @@ const player: RpgPlayerHooks = {
// });
}
if (input == 'back') {
- const event = player?.getEventByName('EV-1') as any
- if (event) event.hp -= 200
+ player.callMainMenu()
}
},
async onJoinMap(player: RpgPlayer, map: RpgMap) {
diff --git a/packages/sample2/main/scene-map.ts b/packages/sample2/main/scene-map.ts
index 690bebd4..06451182 100644
--- a/packages/sample2/main/scene-map.ts
+++ b/packages/sample2/main/scene-map.ts
@@ -1,8 +1,9 @@
-import { RpgSceneMapHooks, RpgSceneMap } from '@rpgjs/client'
+import { RpgSceneMapHooks, RpgSceneMap, RpgGui } from '@rpgjs/client'
const sceneMap: RpgSceneMapHooks = {
onAfterLoading(scene: RpgSceneMap) {
- console.log('loaded scene');
+ RpgGui.display('tooltip')
+ scene.viewport?.setZoom(1.5)
}
}
diff --git a/packages/sample2/main/sprite.ts b/packages/sample2/main/sprite.ts
index 1f615d0a..75b12871 100644
--- a/packages/sample2/main/sprite.ts
+++ b/packages/sample2/main/sprite.ts
@@ -1,7 +1,12 @@
import { RpgSprite, RpgSpriteHooks } from '@rpgjs/client'
const sprite: RpgSpriteHooks = {
-
+ onInit(sprite: RpgSprite) {
+ sprite.eventMode = 'static'
+ sprite.on('pointerdown', () => {
+ sprite.guiDisplay = !sprite.guiDisplay
+ })
+ }
}
export default sprite
\ No newline at end of file
diff --git a/packages/sample2/package-lock.json b/packages/sample2/package-lock.json
index b34d3cf7..a157c520 100644
--- a/packages/sample2/package-lock.json
+++ b/packages/sample2/package-lock.json
@@ -7,8 +7,9 @@
"": {
"name": "sample2",
"version": "4.0.2",
- "license": "ISC",
+ "license": "MIT",
"dependencies": {
+ "@nanostores/react": "^0.7.1",
"@rpgjs/chat": "^4.0.2",
"@rpgjs/client": "^4.0.2",
"@rpgjs/common": "^4.0.2",
@@ -22,6 +23,8 @@
"@rpgjs/server": "^4.0.2",
"@rpgjs/standalone": "^4.0.2",
"@rpgjs/title-screen": "^4.0.2",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
"rpgjs-helloworld": "^0.0.1",
"socket.io-client": "^4.7.2"
}
@@ -805,9 +808,9 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.22.9",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz",
- "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz",
+ "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==",
"engines": {
"node": ">=6.9.0"
}
@@ -878,12 +881,12 @@
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.22.10",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz",
- "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz",
+ "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==",
"dependencies": {
"@babel/compat-data": "^7.22.9",
- "@babel/helper-validator-option": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.15",
"browserslist": "^4.21.9",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
@@ -946,9 +949,9 @@
}
},
"node_modules/@babel/helper-environment-visitor": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz",
- "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+ "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
"engines": {
"node": ">=6.9.0"
}
@@ -988,26 +991,26 @@
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz",
- "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
+ "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.22.15"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.22.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz",
- "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz",
+ "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==",
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.5",
- "@babel/helper-module-imports": "^7.22.5",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-module-imports": "^7.22.15",
"@babel/helper-simple-access": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/helper-validator-identifier": "^7.22.5"
+ "@babel/helper-validator-identifier": "^7.22.20"
},
"engines": {
"node": ">=6.9.0"
@@ -1109,17 +1112,17 @@
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz",
- "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz",
- "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz",
+ "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==",
"engines": {
"node": ">=6.9.0"
}
@@ -1175,9 +1178,9 @@
}
},
"node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz",
- "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz",
+ "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==",
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5"
},
@@ -1189,13 +1192,13 @@
}
},
"node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz",
- "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz",
+ "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==",
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
- "@babel/plugin-transform-optional-chaining": "^7.22.5"
+ "@babel/plugin-transform-optional-chaining": "^7.22.15"
},
"engines": {
"node": ">=6.9.0"
@@ -1662,9 +1665,9 @@
}
},
"node_modules/@babel/plugin-transform-async-generator-functions": {
- "version": "7.22.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.11.tgz",
- "integrity": "sha512-0pAlmeRJn6wU84zzZsEOx1JV1Jf8fqO9ok7wofIJwUnplYo247dcd24P+cMJht7ts9xkzdtB0EPHmOb7F+KzXw==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz",
+ "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==",
"dependencies": {
"@babel/helper-environment-visitor": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5",
@@ -1709,9 +1712,9 @@
}
},
"node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.22.10",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz",
- "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz",
+ "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==",
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5"
},
@@ -1754,17 +1757,17 @@
}
},
"node_modules/@babel/plugin-transform-classes": {
- "version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz",
- "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz",
+ "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-compilation-targets": "^7.22.6",
+ "@babel/helper-compilation-targets": "^7.22.15",
"@babel/helper-environment-visitor": "^7.22.5",
"@babel/helper-function-name": "^7.22.5",
"@babel/helper-optimise-call-expression": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-replace-supers": "^7.22.5",
+ "@babel/helper-replace-supers": "^7.22.9",
"@babel/helper-split-export-declaration": "^7.22.6",
"globals": "^11.1.0"
},
@@ -1791,9 +1794,9 @@
}
},
"node_modules/@babel/plugin-transform-destructuring": {
- "version": "7.22.10",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz",
- "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz",
+ "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==",
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5"
},
@@ -1879,9 +1882,9 @@
}
},
"node_modules/@babel/plugin-transform-for-of": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz",
- "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz",
+ "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==",
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5"
},
@@ -1982,11 +1985,11 @@
}
},
"node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.22.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.11.tgz",
- "integrity": "sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz",
+ "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==",
"dependencies": {
- "@babel/helper-module-transforms": "^7.22.9",
+ "@babel/helper-module-transforms": "^7.23.0",
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/helper-simple-access": "^7.22.5"
},
@@ -2089,15 +2092,15 @@
}
},
"node_modules/@babel/plugin-transform-object-rest-spread": {
- "version": "7.22.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.11.tgz",
- "integrity": "sha512-nX8cPFa6+UmbepISvlf5jhQyaC7ASs/7UxHmMkuJ/k5xSHvDPPaibMo+v3TXwU/Pjqhep/nFNpd3zn4YR59pnw==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz",
+ "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==",
"dependencies": {
"@babel/compat-data": "^7.22.9",
- "@babel/helper-compilation-targets": "^7.22.10",
+ "@babel/helper-compilation-targets": "^7.22.15",
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.22.5"
+ "@babel/plugin-transform-parameters": "^7.22.15"
},
"engines": {
"node": ">=6.9.0"
@@ -2137,9 +2140,9 @@
}
},
"node_modules/@babel/plugin-transform-optional-chaining": {
- "version": "7.22.12",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.12.tgz",
- "integrity": "sha512-7XXCVqZtyFWqjDsYDY4T45w4mlx1rf7aOgkc/Ww76xkgBiOlmjPkx36PBLHa1k1rwWvVgYMPsbuVnIamx2ZQJw==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz",
+ "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==",
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
@@ -2153,9 +2156,9 @@
}
},
"node_modules/@babel/plugin-transform-parameters": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz",
- "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz",
+ "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==",
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5"
},
@@ -2389,16 +2392,16 @@
}
},
"node_modules/@babel/preset-env": {
- "version": "7.22.10",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.10.tgz",
- "integrity": "sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.20.tgz",
+ "integrity": "sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg==",
"dependencies": {
- "@babel/compat-data": "^7.22.9",
- "@babel/helper-compilation-targets": "^7.22.10",
+ "@babel/compat-data": "^7.22.20",
+ "@babel/helper-compilation-targets": "^7.22.15",
"@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-validator-option": "^7.22.5",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.15",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15",
"@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-class-properties": "^7.12.13",
@@ -2419,41 +2422,41 @@
"@babel/plugin-syntax-top-level-await": "^7.14.5",
"@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
"@babel/plugin-transform-arrow-functions": "^7.22.5",
- "@babel/plugin-transform-async-generator-functions": "^7.22.10",
+ "@babel/plugin-transform-async-generator-functions": "^7.22.15",
"@babel/plugin-transform-async-to-generator": "^7.22.5",
"@babel/plugin-transform-block-scoped-functions": "^7.22.5",
- "@babel/plugin-transform-block-scoping": "^7.22.10",
+ "@babel/plugin-transform-block-scoping": "^7.22.15",
"@babel/plugin-transform-class-properties": "^7.22.5",
- "@babel/plugin-transform-class-static-block": "^7.22.5",
- "@babel/plugin-transform-classes": "^7.22.6",
+ "@babel/plugin-transform-class-static-block": "^7.22.11",
+ "@babel/plugin-transform-classes": "^7.22.15",
"@babel/plugin-transform-computed-properties": "^7.22.5",
- "@babel/plugin-transform-destructuring": "^7.22.10",
+ "@babel/plugin-transform-destructuring": "^7.22.15",
"@babel/plugin-transform-dotall-regex": "^7.22.5",
"@babel/plugin-transform-duplicate-keys": "^7.22.5",
- "@babel/plugin-transform-dynamic-import": "^7.22.5",
+ "@babel/plugin-transform-dynamic-import": "^7.22.11",
"@babel/plugin-transform-exponentiation-operator": "^7.22.5",
- "@babel/plugin-transform-export-namespace-from": "^7.22.5",
- "@babel/plugin-transform-for-of": "^7.22.5",
+ "@babel/plugin-transform-export-namespace-from": "^7.22.11",
+ "@babel/plugin-transform-for-of": "^7.22.15",
"@babel/plugin-transform-function-name": "^7.22.5",
- "@babel/plugin-transform-json-strings": "^7.22.5",
+ "@babel/plugin-transform-json-strings": "^7.22.11",
"@babel/plugin-transform-literals": "^7.22.5",
- "@babel/plugin-transform-logical-assignment-operators": "^7.22.5",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.22.11",
"@babel/plugin-transform-member-expression-literals": "^7.22.5",
"@babel/plugin-transform-modules-amd": "^7.22.5",
- "@babel/plugin-transform-modules-commonjs": "^7.22.5",
- "@babel/plugin-transform-modules-systemjs": "^7.22.5",
+ "@babel/plugin-transform-modules-commonjs": "^7.22.15",
+ "@babel/plugin-transform-modules-systemjs": "^7.22.11",
"@babel/plugin-transform-modules-umd": "^7.22.5",
"@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
"@babel/plugin-transform-new-target": "^7.22.5",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5",
- "@babel/plugin-transform-numeric-separator": "^7.22.5",
- "@babel/plugin-transform-object-rest-spread": "^7.22.5",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11",
+ "@babel/plugin-transform-numeric-separator": "^7.22.11",
+ "@babel/plugin-transform-object-rest-spread": "^7.22.15",
"@babel/plugin-transform-object-super": "^7.22.5",
- "@babel/plugin-transform-optional-catch-binding": "^7.22.5",
- "@babel/plugin-transform-optional-chaining": "^7.22.10",
- "@babel/plugin-transform-parameters": "^7.22.5",
+ "@babel/plugin-transform-optional-catch-binding": "^7.22.11",
+ "@babel/plugin-transform-optional-chaining": "^7.22.15",
+ "@babel/plugin-transform-parameters": "^7.22.15",
"@babel/plugin-transform-private-methods": "^7.22.5",
- "@babel/plugin-transform-private-property-in-object": "^7.22.5",
+ "@babel/plugin-transform-private-property-in-object": "^7.22.11",
"@babel/plugin-transform-property-literals": "^7.22.5",
"@babel/plugin-transform-regenerator": "^7.22.10",
"@babel/plugin-transform-reserved-words": "^7.22.5",
@@ -2467,7 +2470,7 @@
"@babel/plugin-transform-unicode-regex": "^7.22.5",
"@babel/plugin-transform-unicode-sets-regex": "^7.22.5",
"@babel/preset-modules": "0.1.6-no-external-plugins",
- "@babel/types": "^7.22.10",
+ "@babel/types": "^7.22.19",
"babel-plugin-polyfill-corejs2": "^0.4.5",
"babel-plugin-polyfill-corejs3": "^0.8.3",
"babel-plugin-polyfill-regenerator": "^0.5.2",
@@ -2557,12 +2560,12 @@
}
},
"node_modules/@babel/types": {
- "version": "7.22.11",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz",
- "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
+ "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
"dependencies": {
"@babel/helper-string-parser": "^7.22.5",
- "@babel/helper-validator-identifier": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
"engines": {
@@ -3052,6 +3055,24 @@
"sparse-bitfield": "^3.0.3"
}
},
+ "node_modules/@nanostores/react": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/@nanostores/react/-/react-0.7.1.tgz",
+ "integrity": "sha512-EXQg9N4MdI4eJQz/AZLIx3hxQ6BuBmV4Q55bCd5YCSgEOAW7tGTsIZxpRXxvxLXzflNvHTBvfrDNY38TlSVBkQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "engines": {
+ "node": "^16.0.0 || ^18.0.0 || >=20.0.0"
+ },
+ "peerDependencies": {
+ "nanostores": "^0.9.0",
+ "react": ">=18.0.0"
+ }
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -3438,99 +3459,42 @@
"node": ">=14"
}
},
- "node_modules/@rollup/plugin-replace": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.2.tgz",
- "integrity": "sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==",
- "dependencies": {
- "@rollup/pluginutils": "^5.0.1",
- "magic-string": "^0.27.0"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "rollup": "^1.20.0||^2.0.0||^3.0.0"
- },
- "peerDependenciesMeta": {
- "rollup": {
- "optional": true
- }
- }
- },
- "node_modules/@rollup/plugin-replace/node_modules/magic-string": {
- "version": "0.27.0",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz",
- "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==",
- "dependencies": {
- "@jridgewell/sourcemap-codec": "^1.4.13"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@rollup/pluginutils": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.4.tgz",
- "integrity": "sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==",
- "dependencies": {
- "@types/estree": "^1.0.0",
- "estree-walker": "^2.0.2",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "rollup": "^1.20.0||^2.0.0||^3.0.0"
- },
- "peerDependenciesMeta": {
- "rollup": {
- "optional": true
- }
- }
- },
- "node_modules/@rollup/pluginutils/node_modules/estree-walker": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
- },
"node_modules/@rpgjs/chat": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/chat/-/chat-4.0.0-rc.10.tgz",
- "integrity": "sha512-+ABREzDeCUw8gIgYptdTwLd6tCAT0zeXBkJbyhJvsanru/sSfP4/JrXbP2cWznfSQwTb7bNueoG5UcDN54ITSg==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/chat/-/chat-4.0.2.tgz",
+ "integrity": "sha512-sEmrP3+GPo+23DpppzMl/lI6fWJQKy0g7JMzYVi1Qro360KC8ynOQE8hdZ9bMzpGkEZTpMAidklM85/ngOznyg==",
"dependencies": {
- "@rpgjs/client": "^4.0.0-rc.10",
- "@rpgjs/server": "^4.0.0-rc.10"
+ "@rpgjs/client": "^4.0.2",
+ "@rpgjs/server": "^4.0.2"
}
},
"node_modules/@rpgjs/client": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/client/-/client-4.0.0-rc.10.tgz",
- "integrity": "sha512-8pxXhBt+naT2etjpcMMa6mI7TRNy6vbkFmotvjfVdfWYlQJ6seJ0r9Iu8bP1hM6bPpNi7uHHbQDPgKoEGH9IIA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/client/-/client-4.0.2.tgz",
+ "integrity": "sha512-1giTS0X/7dKVD8syC7/Fh9bXvvplklZkgeNu2SwiA08Rfjx4lDiPu0N42ulILT0wsZFaUKIpOH032XjKWil09A==",
"dependencies": {
"@pixi/tilemap": "^4.0.0",
- "@rpgjs/common": "^4.0.0-rc.10",
- "@rpgjs/tiled": "^4.0.0-rc.10",
- "@rpgjs/types": "^4.0.0-rc.10",
+ "@rpgjs/common": "^4.0.2",
+ "@rpgjs/tiled": "^4.0.2",
+ "@rpgjs/types": "^4.0.2",
"@types/howler": "2.2.7",
"howler": "2.2.3",
"lodash.get": "^4.4.2",
"lodash.merge": "4.6.2",
- "pixi-viewport": "5.0.1",
+ "pixi-viewport": "^5.0.2",
"pixi.js": "7.2.4",
"rxjs": "7.8.0",
- "simple-room-client": "^2.0.5",
+ "simple-room-client": "^2.0.6",
"vue": "^3.2.47"
}
},
"node_modules/@rpgjs/common": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/common/-/common-4.0.0-rc.10.tgz",
- "integrity": "sha512-DE8A7JsvZGwQ+TbAYm/t5e12f8OixghzddK7ptU8Ob21EiX+Ea/j0ui65zN/ydQ/0B3OT7/+me5cYnDQoxl2/g==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/common/-/common-4.0.2.tgz",
+ "integrity": "sha512-xvPyu07bMr13lCVhukRic19huRsdgNZsL3YyqUeNaqQrgo4/Juy69T7gruYZQh5CITXDR8zI25lolUO4mxE8Dg==",
"dependencies": {
- "@rpgjs/tiled": "^4.0.0-rc.10",
- "@rpgjs/types": "^4.0.0-rc.10",
+ "@rpgjs/tiled": "^4.0.2",
+ "@rpgjs/types": "^4.0.2",
"rbush": "^3.0.1",
"rxjs": "^7.8.0",
"sat": "^0.9.0",
@@ -3546,9 +3510,9 @@
}
},
"node_modules/@rpgjs/compiler": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/compiler/-/compiler-4.0.0-rc.10.tgz",
- "integrity": "sha512-JzneWRb1Tzoyb+7kFCwdIoM+UtrWVLpIHhZBreV+fnumqIkZ7ZfDg4ZkmabbNX1hJBIsHxf6Q2z81sQFBycPWA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/compiler/-/compiler-4.0.2.tgz",
+ "integrity": "sha512-Tq/RN7GOlDq690PT31gxHqAqfwHuctx2C++z0k+pCnH19WRLPokO7xwUC8yU0vbI64TGzowLEaWkUFfWWjhRNA==",
"dependencies": {
"@babel/core": "^7.21.4",
"@babel/generator": "^7.21.4",
@@ -3558,11 +3522,12 @@
"@esbuild-plugins/node-globals-polyfill": "^0.2.3",
"@esbuild-plugins/node-modules-polyfill": "^0.2.2",
"@iarna/toml": "^2.2.5",
- "@rpgjs/common": "^4.0.0-rc.10",
"@vitejs/plugin-vue": "^4.2.1",
"ajv": "^8.12.0",
"ajv-formats": "^2.1.1",
"axios": "^1.3.6",
+ "dedent": "^1.5.1",
+ "default-composer": "^0.5.1",
"fs-extra": "^11.1.1",
"glob": "^10.2.2",
"image-size": "^1.0.2",
@@ -3574,7 +3539,7 @@
"sass": "^1.62.1",
"vite": "^4.3.2",
"vite-node": "^0.30.1",
- "vite-plugin-pwa": "^0.14.7",
+ "vite-plugin-pwa": "^0.16.4",
"vite-plugin-require-transform": "^1.0.12",
"vitest": "^0.30.1",
"vitest-webgl-canvas-mock": "^1.1.0",
@@ -3586,67 +3551,67 @@
}
},
"node_modules/@rpgjs/database": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/database/-/database-4.0.0-rc.10.tgz",
- "integrity": "sha512-8qs/F+NHZBBX851bCZ4lEDaypaNNevn8YBhDfUcBb1tXZwMdVtSLvAqP8GV1ZJC30HO0uo3SzMXdMtEuFlEP5A=="
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/database/-/database-4.0.2.tgz",
+ "integrity": "sha512-g6MRGu50OPBMY3AgD7OlazqPXOoDFXTvyKbXz91ZL07/CCs9S+SI6ndcgg0STve9ZoSbg8fAwtfFFwZYb3krkA=="
},
"node_modules/@rpgjs/default-gui": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/default-gui/-/default-gui-4.0.0-rc.10.tgz",
- "integrity": "sha512-GnZPB7QEK0ayaJvrq6WhbHt7IKgQWf2fMpThQ5bJVgjg814r1TIKngATXr6WJMyH6UTI3BFmIV/6i5rHUdAWkw==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/default-gui/-/default-gui-4.0.2.tgz",
+ "integrity": "sha512-xmXMVVqE4r3pp7BHG5Up0qghhktke2jolj2UlZYZnDYc6CuxTJKA7UH4G2AfEsrDiNqGKByX+EAvdREvj+es6Q==",
"dependencies": {
- "@rpgjs/client": "^4.0.0-rc.10",
+ "@rpgjs/client": "^4.0.2",
"rxjs": "^7.8.0",
"typescript": "^5.0.2",
"vue": "^3.2.47"
}
},
"node_modules/@rpgjs/gamepad": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/gamepad/-/gamepad-4.0.0-rc.10.tgz",
- "integrity": "sha512-hs5Qo6Y99qu5V9Y6CvVBHMQnb5omrKMWJmRtXL5iP5c5jqpSVOUYAI+RdQ2ndV1f+R7LXXDh8EQIQSe/E2w1WA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/gamepad/-/gamepad-4.0.2.tgz",
+ "integrity": "sha512-eVVM6zmZvBkjIOqzZ8xGExp0l/pcGDlXVnya6G72EDwUhLPlAbhAFsOrHGBjORL7C0L4FLTqOhERkr5W5azYZQ==",
"dependencies": {
- "@rpgjs/client": "^4.0.0-rc.10",
+ "@rpgjs/client": "^4.0.2",
"joypad.js": "^2.3.3"
}
},
"node_modules/@rpgjs/mobile-gui": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/mobile-gui/-/mobile-gui-4.0.0-rc.10.tgz",
- "integrity": "sha512-Pbo/vJQo6caAmJAxjJhcByJZsOOiGN093WElNUY/xhW6EEkLHHNGe6kQvc6M3ycuoOeL2B2uapDtwbhZiaI/fQ==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/mobile-gui/-/mobile-gui-4.0.2.tgz",
+ "integrity": "sha512-PJD69RVx7lycd+7VSHCqez91QR6v1Z43UmAtTjw2LCDYhmttwXs2e8JWQKCdylDrQC6Mx7oZTZFIx/LID3MM2Q==",
"dependencies": {
- "@rpgjs/client": "^4.0.0-rc.10",
+ "@rpgjs/client": "^4.0.2",
"nipplejs": "^0.10.1",
"vue": "^3.2.47"
}
},
"node_modules/@rpgjs/plugin-emotion-bubbles": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/plugin-emotion-bubbles/-/plugin-emotion-bubbles-4.0.0-rc.10.tgz",
- "integrity": "sha512-TpYh90Z07beel3wTUWdmTUEcfFLcCKd+6LKYetdIuXNV9efYVu3h1ZBGCwiawaN0GHnNx6zE3aBlIBkoV5tCHw==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/plugin-emotion-bubbles/-/plugin-emotion-bubbles-4.0.2.tgz",
+ "integrity": "sha512-mKOoZrvMH1joUCTVPKohJzKSPox+IXoMQQGTMd009+aiqUpYvXKk92GKbx3d+xbZGOF35UxtEWR9x2yk4DzF2A==",
"dependencies": {
- "@rpgjs/client": "^4.0.0-rc.10",
- "@rpgjs/server": "^4.0.0-rc.10"
+ "@rpgjs/client": "^4.0.2",
+ "@rpgjs/server": "^4.0.2"
}
},
"node_modules/@rpgjs/save": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/save/-/save-4.0.0-rc.10.tgz",
- "integrity": "sha512-ZC2OV/WF+ofyJwoQ5yfFtHbSHVI24J6iw35KDdEH302pqaZMX7eikiqIxkAFuxAsgPgmbang+ifgx5rhstR0YQ==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/save/-/save-4.0.2.tgz",
+ "integrity": "sha512-LyGCz3NDGiJigbt7azd16OeltzM2NUYNLlX1avblC97YdjRtcTz0Rda0ey6fExWMi7CdhkcVHn/6TnK7NEsanA==",
"dependencies": {
- "@rpgjs/client": "^4.0.0-rc.10",
- "@rpgjs/server": "^4.0.0-rc.10"
+ "@rpgjs/client": "^4.0.2",
+ "@rpgjs/server": "^4.0.2"
}
},
"node_modules/@rpgjs/server": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/server/-/server-4.0.0-rc.10.tgz",
- "integrity": "sha512-O2DiwuTmODHdmHEp2vmJj1dlUWh8EZszpMQ5bB2nmpgITP0BKM+opieSaZn0YPj/f5DQY+3Q8adK/2iG99SZJA==",
- "dependencies": {
- "@rpgjs/common": "^4.0.0-rc.10",
- "@rpgjs/database": "^4.0.0-rc.10",
- "@rpgjs/tiled": "^4.0.0-rc.10",
- "@rpgjs/types": "^4.0.0-rc.10",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/server/-/server-4.0.2.tgz",
+ "integrity": "sha512-wrGX+PaIFVezxIErTCpr6JmBTtpUPHyix7D8R0B9MPlL2ZgH+BNLkIrpqBHwvEhMgRVJLAr/kEVJ6mwwR/b42w==",
+ "dependencies": {
+ "@rpgjs/common": "^4.0.2",
+ "@rpgjs/database": "^4.0.2",
+ "@rpgjs/tiled": "^4.0.2",
+ "@rpgjs/types": "^4.0.2",
"axios": "^1.3.6",
"cors": "^2.8.5",
"express": "^4.18.2",
@@ -3660,19 +3625,19 @@
}
},
"node_modules/@rpgjs/standalone": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/standalone/-/standalone-4.0.0-rc.10.tgz",
- "integrity": "sha512-iY0A+goEDMlkLCj2jJ6ofuUPOocqMmb3w0U6Lgeir9pSVkpL7CUi9mc8nU+WFLrrkc+amZdXJrgDKDWrMVUO/w==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/standalone/-/standalone-4.0.2.tgz",
+ "integrity": "sha512-M5yvGCK4oSjZuSrtgS+eEDgkMP1Ttddnt1/RXfrl5Lr7nlN43urEppAsb91nV9IuHH/7VlJZt7yuB2dZSPeSug==",
"dependencies": {
- "@rpgjs/client": "^4.0.0-rc.10",
- "@rpgjs/common": "^4.0.0-rc.10",
- "@rpgjs/server": "^4.0.0-rc.10"
+ "@rpgjs/client": "^4.0.2",
+ "@rpgjs/common": "^4.0.2",
+ "@rpgjs/server": "^4.0.2"
}
},
"node_modules/@rpgjs/tiled": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/tiled/-/tiled-4.0.0-rc.10.tgz",
- "integrity": "sha512-d2JogD6rHpnoAzPdRQv8/vcVnwmw9064we4lL1aZkYc2ZhkhcaS7GXxkMQxrR3wBd3julAB7v8490ttXAHcSsw==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/tiled/-/tiled-4.0.2.tgz",
+ "integrity": "sha512-XL7+hFHF5lM1o/aRSRO6K32EMuamRMv30PFwtd/vnmyQ3woY+20bHKEBwiSO/1+hZajfFGPnAWZQ0Av0kGhEGA==",
"dependencies": {
"axios": "^1.3.4",
"buffer": "^6.0.3",
@@ -3681,12 +3646,12 @@
}
},
"node_modules/@rpgjs/title-screen": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/title-screen/-/title-screen-4.0.0-rc.10.tgz",
- "integrity": "sha512-nPR4FqiYptKxwpsL5Ukq9HmIbetsolDhnVeJMMACdJ9W9q33lrYaN19lt0IkwnpI60YX2qNJ0QiCHLl6LvBKGg==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/title-screen/-/title-screen-4.0.2.tgz",
+ "integrity": "sha512-dAVFsHmgTmM4Qk8SALGpGd+kuLRlp04GK2eQfMea5IlGr5n92+F6h8Ro3g64kcVGvGGVijDijt197q2elx0Arg==",
"dependencies": {
- "@rpgjs/client": "^4.0.0-rc.10",
- "@rpgjs/server": "^4.0.0-rc.10",
+ "@rpgjs/client": "^4.0.2",
+ "@rpgjs/server": "^4.0.2",
"axios": "^1.4.0",
"body-parser": "^1.20.2",
"mongoose": "^7.4.3",
@@ -3694,9 +3659,9 @@
}
},
"node_modules/@rpgjs/types": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/types/-/types-4.0.0-rc.10.tgz",
- "integrity": "sha512-Q3XbXl5vDN7iA44T6xJJEDd3xsORnoxDhxhhTg9tBpra2gGdJ4Pgm/G4rTfycpjzpePqyxdBH2sxNj0ECQOk9Q==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/types/-/types-4.0.2.tgz",
+ "integrity": "sha512-SvvD25qy0/3WmoNLIoAqObHphfpgvJCgGW+wQqCGH/a2UOAtbErx9BN7xmlx0EH6Ce1+suMGDnfAe8m5bmllwg==",
"dependencies": {
"rxjs": "^7.8.1"
}
@@ -4294,9 +4259,9 @@
"integrity": "sha512-w8oigUCDjElRHRRrMvn/spybSMyX8MTkKA5Dv+tS1IE/TgmNZPqUYtvYBXGY8cieSE66gm+szeK+bnbxC2xHTQ=="
},
"node_modules/@types/estree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz",
- "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA=="
+ "version": "0.0.39",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
+ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw=="
},
"node_modules/@types/howler": {
"version": "2.2.7",
@@ -4322,9 +4287,9 @@
}
},
"node_modules/@types/trusted-types": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz",
- "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g=="
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.4.tgz",
+ "integrity": "sha512-IDaobHimLQhjwsQ/NMwRVfa/yL7L/wriQPMhw1ZJall0KX6E1oxk29XMDeilW5qTIg5aoiqf5Udy8U/51aNoQQ=="
},
"node_modules/@types/webidl-conversions": {
"version": "7.0.0",
@@ -4665,13 +4630,14 @@
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
},
"node_modules/arraybuffer.prototype.slice": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz",
- "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz",
+ "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==",
"dependencies": {
"array-buffer-byte-length": "^1.0.0",
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
"get-intrinsic": "^1.2.1",
"is-array-buffer": "^3.0.2",
"is-shared-array-buffer": "^1.0.2"
@@ -4747,12 +4713,12 @@
}
},
"node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz",
- "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==",
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.4.tgz",
+ "integrity": "sha512-9l//BZZsPR+5XjyJMPtZSK4jv0BsTO1zDac2GC6ygx9WLGlcsnRd1Co0B2zT5fF5Ic6BZy+9m3HNZ3QcOeDKfg==",
"dependencies": {
"@babel/helper-define-polyfill-provider": "^0.4.2",
- "core-js-compat": "^3.31.0"
+ "core-js-compat": "^3.32.2"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
@@ -4896,9 +4862,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.21.10",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz",
- "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==",
+ "version": "4.22.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz",
+ "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==",
"funding": [
{
"type": "opencollective",
@@ -4914,10 +4880,10 @@
}
],
"dependencies": {
- "caniuse-lite": "^1.0.30001517",
- "electron-to-chromium": "^1.4.477",
+ "caniuse-lite": "^1.0.30001541",
+ "electron-to-chromium": "^1.4.535",
"node-releases": "^2.0.13",
- "update-browserslist-db": "^1.0.11"
+ "update-browserslist-db": "^1.0.13"
},
"bin": {
"browserslist": "cli.js"
@@ -5002,9 +4968,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001524",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz",
- "integrity": "sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==",
+ "version": "1.0.30001546",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz",
+ "integrity": "sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==",
"funding": [
{
"type": "opencollective",
@@ -5338,11 +5304,11 @@
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
},
"node_modules/core-js-compat": {
- "version": "3.32.1",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.1.tgz",
- "integrity": "sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA==",
+ "version": "3.33.0",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.0.tgz",
+ "integrity": "sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw==",
"dependencies": {
- "browserslist": "^4.21.10"
+ "browserslist": "^4.22.1"
},
"funding": {
"type": "opencollective",
@@ -5445,6 +5411,19 @@
}
}
},
+ "node_modules/dedent": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz",
+ "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==",
+ "peerDependencies": {
+ "babel-plugin-macros": "^3.1.0"
+ },
+ "peerDependenciesMeta": {
+ "babel-plugin-macros": {
+ "optional": true
+ }
+ }
+ },
"node_modules/deep-eql": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
@@ -5464,11 +5443,30 @@
"node": ">=0.10.0"
}
},
+ "node_modules/default-composer": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/default-composer/-/default-composer-0.5.1.tgz",
+ "integrity": "sha512-lEX0EoZZNkdDGL4kvu1SEi3blRkNF81VTx2PdFkQ7jxR+99tJRl6VoEiig91mwXf3xKYuXeBJzVsd7SvTA2c7A=="
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz",
+ "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==",
+ "dependencies": {
+ "get-intrinsic": "^1.2.1",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/define-properties": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
- "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
"dependencies": {
+ "define-data-property": "^1.0.1",
"has-property-descriptors": "^1.0.0",
"object-keys": "^1.1.1"
},
@@ -5593,9 +5591,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.4.505",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.505.tgz",
- "integrity": "sha512-0A50eL5BCCKdxig2SsCXhpuztnB9PfUgRMojj5tMvt8O54lbwz3t6wNgnpiTRosw5QjlJB7ixhVyeg8daLQwSQ=="
+ "version": "1.4.544",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.544.tgz",
+ "integrity": "sha512-54z7squS1FyFRSUqq/knOFSptjjogLZXbKcYk3B0qkE1KZzvqASwRZnY2KzZQJqIYLVD38XZeoiMRflYSwyO4w=="
},
"node_modules/emoji-regex": {
"version": "9.2.2",
@@ -5667,17 +5665,17 @@
}
},
"node_modules/es-abstract": {
- "version": "1.22.1",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz",
- "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==",
+ "version": "1.22.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz",
+ "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==",
"dependencies": {
"array-buffer-byte-length": "^1.0.0",
- "arraybuffer.prototype.slice": "^1.0.1",
+ "arraybuffer.prototype.slice": "^1.0.2",
"available-typed-arrays": "^1.0.5",
"call-bind": "^1.0.2",
"es-set-tostringtag": "^2.0.1",
"es-to-primitive": "^1.2.1",
- "function.prototype.name": "^1.1.5",
+ "function.prototype.name": "^1.1.6",
"get-intrinsic": "^1.2.1",
"get-symbol-description": "^1.0.0",
"globalthis": "^1.0.3",
@@ -5693,23 +5691,23 @@
"is-regex": "^1.1.4",
"is-shared-array-buffer": "^1.0.2",
"is-string": "^1.0.7",
- "is-typed-array": "^1.1.10",
+ "is-typed-array": "^1.1.12",
"is-weakref": "^1.0.2",
"object-inspect": "^1.12.3",
"object-keys": "^1.1.1",
"object.assign": "^4.1.4",
- "regexp.prototype.flags": "^1.5.0",
- "safe-array-concat": "^1.0.0",
+ "regexp.prototype.flags": "^1.5.1",
+ "safe-array-concat": "^1.0.1",
"safe-regex-test": "^1.0.0",
- "string.prototype.trim": "^1.2.7",
- "string.prototype.trimend": "^1.0.6",
- "string.prototype.trimstart": "^1.0.6",
+ "string.prototype.trim": "^1.2.8",
+ "string.prototype.trimend": "^1.0.7",
+ "string.prototype.trimstart": "^1.0.7",
"typed-array-buffer": "^1.0.0",
"typed-array-byte-length": "^1.0.0",
"typed-array-byte-offset": "^1.0.0",
"typed-array-length": "^1.0.4",
"unbox-primitive": "^1.0.2",
- "which-typed-array": "^1.1.10"
+ "which-typed-array": "^1.1.11"
},
"engines": {
"node": ">= 0.4"
@@ -7171,6 +7169,17 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
"node_modules/loupe": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz",
@@ -7607,17 +7616,18 @@
}
},
"node_modules/nanostores": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/nanostores/-/nanostores-0.8.1.tgz",
- "integrity": "sha512-1ZCfQtII2XeFDrtqXL2cdQ/diGrLxzRB3YMyQjn8m7GSGQrJfGST2iuqMpWnS/ZlifhtjgR/SX0Jy6Uij6lRLA==",
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/nanostores/-/nanostores-0.9.3.tgz",
+ "integrity": "sha512-KobZjcVyNndNrb5DAjfs0WG0lRcZu5Q1BOrfTOxokFLi25zFrWPjg+joXC6kuDqNfSt9fQwppyjUBkRPtsL+8w==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
+ "peer": true,
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^16.0.0 || ^18.0.0 || >=20.0.0"
}
},
"node_modules/negotiator": {
@@ -7907,9 +7917,9 @@
}
},
"node_modules/pixi-viewport": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/pixi-viewport/-/pixi-viewport-5.0.1.tgz",
- "integrity": "sha512-fIILU9xztqGnhGF5SYfjn1Rir/7asWkJ8zSUay2hwzPrdGTWFtB4yiIlZDeFaLf7KHA04RRb2kI01Sy1kNksAw=="
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/pixi-viewport/-/pixi-viewport-5.0.2.tgz",
+ "integrity": "sha512-U77KnCTl81xEgxEQRFEuI7MYVySWwCVkA41EnM8KiOYwgVOwdBUa7318O+u61IOnTwnoYLzaihy/kpoONKU13Q=="
},
"node_modules/pixi.js": {
"version": "7.2.4",
@@ -8171,6 +8181,29 @@
"quickselect": "^2.0.0"
}
},
+ "node_modules/react": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.0"
+ },
+ "peerDependencies": {
+ "react": "^18.2.0"
+ }
+ },
"node_modules/react-is": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
@@ -8230,13 +8263,13 @@
}
},
"node_modules/regexp.prototype.flags": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz",
- "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz",
+ "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==",
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
- "functions-have-names": "^1.2.3"
+ "set-function-name": "^2.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -8328,9 +8361,9 @@
}
},
"node_modules/resolve": {
- "version": "1.22.4",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
- "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "version": "1.22.6",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz",
+ "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==",
"dependencies": {
"is-core-module": "^2.13.0",
"path-parse": "^1.0.7",
@@ -8658,12 +8691,12 @@
}
},
"node_modules/safe-array-concat": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz",
- "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz",
+ "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==",
"dependencies": {
"call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.0",
+ "get-intrinsic": "^1.2.1",
"has-symbols": "^1.0.3",
"isarray": "^2.0.5"
},
@@ -8742,6 +8775,14 @@
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
},
+ "node_modules/scheduler": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
"node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -8813,6 +8854,19 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/set-function-name": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
+ "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==",
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "functions-have-names": "^1.2.3",
+ "has-property-descriptors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/set-value": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/set-value/-/set-value-3.0.2.tgz",
@@ -8894,9 +8948,9 @@
}
},
"node_modules/simple-room-client": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/simple-room-client/-/simple-room-client-2.0.5.tgz",
- "integrity": "sha512-OuSGM3QvBilB/hs7IlZcm4OhpnlWjGVg6z4pi601/iP/q0WQ+xbNU3yK3JFT7g32IACZuTbPMyQFVdkr+JdIPA==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/simple-room-client/-/simple-room-client-2.0.6.tgz",
+ "integrity": "sha512-HA3cdXsnx/gpQVC9VU/ZbVMg6NgFFw9XZCwHqueEiToYbFLaRHdI+skFeL2B4Xp6aCDy1lu2AyUNYjNQmF733Q==",
"dependencies": {
"lodash.merge": "4.6.2",
"lodash.mergewith": "4.6.2",
@@ -8905,6 +8959,20 @@
"rxjs": "7.8.0"
}
},
+ "node_modules/simple-room-client/node_modules/nanostores": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/nanostores/-/nanostores-0.8.1.tgz",
+ "integrity": "sha512-1ZCfQtII2XeFDrtqXL2cdQ/diGrLxzRB3YMyQjn8m7GSGQrJfGST2iuqMpWnS/ZlifhtjgR/SX0Jy6Uij6lRLA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ }
+ },
"node_modules/simple-room/node_modules/rxjs": {
"version": "7.8.1",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
@@ -9121,9 +9189,9 @@
}
},
"node_modules/string.prototype.matchall": {
- "version": "4.0.9",
- "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.9.tgz",
- "integrity": "sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA==",
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz",
+ "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==",
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
@@ -9132,6 +9200,7 @@
"has-symbols": "^1.0.3",
"internal-slot": "^1.0.5",
"regexp.prototype.flags": "^1.5.0",
+ "set-function-name": "^2.0.0",
"side-channel": "^1.0.4"
},
"funding": {
@@ -9139,13 +9208,13 @@
}
},
"node_modules/string.prototype.trim": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz",
- "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==",
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz",
+ "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==",
"dependencies": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
},
"engines": {
"node": ">= 0.4"
@@ -9155,26 +9224,26 @@
}
},
"node_modules/string.prototype.trimend": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
- "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz",
+ "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==",
"dependencies": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/string.prototype.trimstart": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
- "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz",
+ "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==",
"dependencies": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -9584,9 +9653,9 @@
}
},
"node_modules/update-browserslist-db": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
- "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
+ "version": "1.0.13",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
+ "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
"funding": [
{
"type": "opencollective",
@@ -9746,25 +9815,26 @@
}
},
"node_modules/vite-plugin-pwa": {
- "version": "0.14.7",
- "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.14.7.tgz",
- "integrity": "sha512-dNJaf0fYOWncmjxv9HiSa2xrSjipjff7IkYE5oIUJ2x5HKu3cXgA8LRgzOwTc5MhwyFYRSU0xyN0Phbx3NsQYw==",
+ "version": "0.16.5",
+ "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.16.5.tgz",
+ "integrity": "sha512-Ahol4dwhMP2UHPQXkllSlXbihOaDFnvBIDPmAxoSZ1EObBUJGP4CMRyCyAVkIHjd6/H+//vH0DM2ON+XxHr81g==",
"dependencies": {
- "@rollup/plugin-replace": "^5.0.1",
"debug": "^4.3.4",
- "fast-glob": "^3.2.12",
- "pretty-bytes": "^6.0.0",
- "rollup": "^3.7.2",
- "workbox-build": "^6.5.4",
- "workbox-window": "^6.5.4"
+ "fast-glob": "^3.3.1",
+ "pretty-bytes": "^6.1.1",
+ "workbox-build": "^7.0.0",
+ "workbox-window": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/antfu"
},
"peerDependencies": {
"vite": "^3.1.0 || ^4.0.0",
- "workbox-build": "^6.5.4",
- "workbox-window": "^6.5.4"
+ "workbox-build": "^7.0.0",
+ "workbox-window": "^7.0.0"
}
},
"node_modules/vite-plugin-require-transform": {
@@ -10345,26 +10415,26 @@
}
},
"node_modules/workbox-background-sync": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz",
- "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-7.0.0.tgz",
+ "integrity": "sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==",
"dependencies": {
"idb": "^7.0.1",
- "workbox-core": "6.6.0"
+ "workbox-core": "7.0.0"
}
},
"node_modules/workbox-broadcast-update": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz",
- "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-7.0.0.tgz",
+ "integrity": "sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ==",
"dependencies": {
- "workbox-core": "6.6.0"
+ "workbox-core": "7.0.0"
}
},
"node_modules/workbox-build": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz",
- "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-7.0.0.tgz",
+ "integrity": "sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg==",
"dependencies": {
"@apideck/better-ajv-errors": "^0.3.1",
"@babel/core": "^7.11.1",
@@ -10388,24 +10458,24 @@
"strip-comments": "^2.0.1",
"tempy": "^0.6.0",
"upath": "^1.2.0",
- "workbox-background-sync": "6.6.0",
- "workbox-broadcast-update": "6.6.0",
- "workbox-cacheable-response": "6.6.0",
- "workbox-core": "6.6.0",
- "workbox-expiration": "6.6.0",
- "workbox-google-analytics": "6.6.0",
- "workbox-navigation-preload": "6.6.0",
- "workbox-precaching": "6.6.0",
- "workbox-range-requests": "6.6.0",
- "workbox-recipes": "6.6.0",
- "workbox-routing": "6.6.0",
- "workbox-strategies": "6.6.0",
- "workbox-streams": "6.6.0",
- "workbox-sw": "6.6.0",
- "workbox-window": "6.6.0"
- },
- "engines": {
- "node": ">=10.0.0"
+ "workbox-background-sync": "7.0.0",
+ "workbox-broadcast-update": "7.0.0",
+ "workbox-cacheable-response": "7.0.0",
+ "workbox-core": "7.0.0",
+ "workbox-expiration": "7.0.0",
+ "workbox-google-analytics": "7.0.0",
+ "workbox-navigation-preload": "7.0.0",
+ "workbox-precaching": "7.0.0",
+ "workbox-range-requests": "7.0.0",
+ "workbox-recipes": "7.0.0",
+ "workbox-routing": "7.0.0",
+ "workbox-strategies": "7.0.0",
+ "workbox-streams": "7.0.0",
+ "workbox-sw": "7.0.0",
+ "workbox-window": "7.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
}
},
"node_modules/workbox-build/node_modules/@rollup/plugin-babel": {
@@ -10477,11 +10547,6 @@
"rollup": "^1.20.0||^2.0.0"
}
},
- "node_modules/workbox-build/node_modules/@types/estree": {
- "version": "0.0.39",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
- "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw=="
- },
"node_modules/workbox-build/node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -10615,115 +10680,114 @@
}
},
"node_modules/workbox-cacheable-response": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz",
- "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==",
- "deprecated": "workbox-background-sync@6.6.0",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-7.0.0.tgz",
+ "integrity": "sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g==",
"dependencies": {
- "workbox-core": "6.6.0"
+ "workbox-core": "7.0.0"
}
},
"node_modules/workbox-core": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz",
- "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ=="
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-7.0.0.tgz",
+ "integrity": "sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ=="
},
"node_modules/workbox-expiration": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz",
- "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-7.0.0.tgz",
+ "integrity": "sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ==",
"dependencies": {
"idb": "^7.0.1",
- "workbox-core": "6.6.0"
+ "workbox-core": "7.0.0"
}
},
"node_modules/workbox-google-analytics": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz",
- "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-7.0.0.tgz",
+ "integrity": "sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==",
"dependencies": {
- "workbox-background-sync": "6.6.0",
- "workbox-core": "6.6.0",
- "workbox-routing": "6.6.0",
- "workbox-strategies": "6.6.0"
+ "workbox-background-sync": "7.0.0",
+ "workbox-core": "7.0.0",
+ "workbox-routing": "7.0.0",
+ "workbox-strategies": "7.0.0"
}
},
"node_modules/workbox-navigation-preload": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz",
- "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-7.0.0.tgz",
+ "integrity": "sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==",
"dependencies": {
- "workbox-core": "6.6.0"
+ "workbox-core": "7.0.0"
}
},
"node_modules/workbox-precaching": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz",
- "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-7.0.0.tgz",
+ "integrity": "sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA==",
"dependencies": {
- "workbox-core": "6.6.0",
- "workbox-routing": "6.6.0",
- "workbox-strategies": "6.6.0"
+ "workbox-core": "7.0.0",
+ "workbox-routing": "7.0.0",
+ "workbox-strategies": "7.0.0"
}
},
"node_modules/workbox-range-requests": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz",
- "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-7.0.0.tgz",
+ "integrity": "sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ==",
"dependencies": {
- "workbox-core": "6.6.0"
+ "workbox-core": "7.0.0"
}
},
"node_modules/workbox-recipes": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz",
- "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-7.0.0.tgz",
+ "integrity": "sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww==",
"dependencies": {
- "workbox-cacheable-response": "6.6.0",
- "workbox-core": "6.6.0",
- "workbox-expiration": "6.6.0",
- "workbox-precaching": "6.6.0",
- "workbox-routing": "6.6.0",
- "workbox-strategies": "6.6.0"
+ "workbox-cacheable-response": "7.0.0",
+ "workbox-core": "7.0.0",
+ "workbox-expiration": "7.0.0",
+ "workbox-precaching": "7.0.0",
+ "workbox-routing": "7.0.0",
+ "workbox-strategies": "7.0.0"
}
},
"node_modules/workbox-routing": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz",
- "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-7.0.0.tgz",
+ "integrity": "sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA==",
"dependencies": {
- "workbox-core": "6.6.0"
+ "workbox-core": "7.0.0"
}
},
"node_modules/workbox-strategies": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz",
- "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-7.0.0.tgz",
+ "integrity": "sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA==",
"dependencies": {
- "workbox-core": "6.6.0"
+ "workbox-core": "7.0.0"
}
},
"node_modules/workbox-streams": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz",
- "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-7.0.0.tgz",
+ "integrity": "sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ==",
"dependencies": {
- "workbox-core": "6.6.0",
- "workbox-routing": "6.6.0"
+ "workbox-core": "7.0.0",
+ "workbox-routing": "7.0.0"
}
},
"node_modules/workbox-sw": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz",
- "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ=="
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-7.0.0.tgz",
+ "integrity": "sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA=="
},
"node_modules/workbox-window": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz",
- "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-7.0.0.tgz",
+ "integrity": "sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==",
"dependencies": {
"@types/trusted-types": "^2.0.2",
- "workbox-core": "6.6.0"
+ "workbox-core": "7.0.0"
}
},
"node_modules/workerpool": {
@@ -11581,9 +11645,9 @@
}
},
"@babel/compat-data": {
- "version": "7.22.9",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz",
- "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ=="
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz",
+ "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw=="
},
"@babel/core": {
"version": "7.21.8",
@@ -11635,12 +11699,12 @@
}
},
"@babel/helper-compilation-targets": {
- "version": "7.22.10",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz",
- "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz",
+ "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==",
"requires": {
"@babel/compat-data": "^7.22.9",
- "@babel/helper-validator-option": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.15",
"browserslist": "^4.21.9",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
@@ -11685,9 +11749,9 @@
}
},
"@babel/helper-environment-visitor": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz",
- "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q=="
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+ "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA=="
},
"@babel/helper-function-name": {
"version": "7.22.5",
@@ -11715,23 +11779,23 @@
}
},
"@babel/helper-module-imports": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz",
- "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
+ "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
"requires": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.22.15"
}
},
"@babel/helper-module-transforms": {
- "version": "7.22.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz",
- "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz",
+ "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==",
"requires": {
- "@babel/helper-environment-visitor": "^7.22.5",
- "@babel/helper-module-imports": "^7.22.5",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-module-imports": "^7.22.15",
"@babel/helper-simple-access": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/helper-validator-identifier": "^7.22.5"
+ "@babel/helper-validator-identifier": "^7.22.20"
}
},
"@babel/helper-optimise-call-expression": {
@@ -11797,14 +11861,14 @@
"integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw=="
},
"@babel/helper-validator-identifier": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz",
- "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ=="
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A=="
},
"@babel/helper-validator-option": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz",
- "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw=="
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz",
+ "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA=="
},
"@babel/helper-wrap-function": {
"version": "7.22.10",
@@ -11842,21 +11906,21 @@
"integrity": "sha512-3l6+4YOvc9wx7VlCSw4yQfcBo01ECA8TicQfbnCPuCEpRQrf+gTUyGdxNw+pyTUyywp6JRD1w0YQs9TpBXYlkw=="
},
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz",
- "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz",
+ "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==",
"requires": {
"@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz",
- "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz",
+ "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==",
"requires": {
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
- "@babel/plugin-transform-optional-chaining": "^7.22.5"
+ "@babel/plugin-transform-optional-chaining": "^7.22.15"
}
},
"@babel/plugin-proposal-async-generator-functions": {
@@ -12150,9 +12214,9 @@
}
},
"@babel/plugin-transform-async-generator-functions": {
- "version": "7.22.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.11.tgz",
- "integrity": "sha512-0pAlmeRJn6wU84zzZsEOx1JV1Jf8fqO9ok7wofIJwUnplYo247dcd24P+cMJht7ts9xkzdtB0EPHmOb7F+KzXw==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz",
+ "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==",
"requires": {
"@babel/helper-environment-visitor": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5",
@@ -12179,9 +12243,9 @@
}
},
"@babel/plugin-transform-block-scoping": {
- "version": "7.22.10",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz",
- "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz",
+ "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==",
"requires": {
"@babel/helper-plugin-utils": "^7.22.5"
}
@@ -12206,17 +12270,17 @@
}
},
"@babel/plugin-transform-classes": {
- "version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz",
- "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz",
+ "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==",
"requires": {
"@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-compilation-targets": "^7.22.6",
+ "@babel/helper-compilation-targets": "^7.22.15",
"@babel/helper-environment-visitor": "^7.22.5",
"@babel/helper-function-name": "^7.22.5",
"@babel/helper-optimise-call-expression": "^7.22.5",
"@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-replace-supers": "^7.22.5",
+ "@babel/helper-replace-supers": "^7.22.9",
"@babel/helper-split-export-declaration": "^7.22.6",
"globals": "^11.1.0"
}
@@ -12231,9 +12295,9 @@
}
},
"@babel/plugin-transform-destructuring": {
- "version": "7.22.10",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz",
- "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz",
+ "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==",
"requires": {
"@babel/helper-plugin-utils": "^7.22.5"
}
@@ -12283,9 +12347,9 @@
}
},
"@babel/plugin-transform-for-of": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz",
- "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz",
+ "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==",
"requires": {
"@babel/helper-plugin-utils": "^7.22.5"
}
@@ -12344,11 +12408,11 @@
}
},
"@babel/plugin-transform-modules-commonjs": {
- "version": "7.22.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.11.tgz",
- "integrity": "sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz",
+ "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==",
"requires": {
- "@babel/helper-module-transforms": "^7.22.9",
+ "@babel/helper-module-transforms": "^7.23.0",
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/helper-simple-access": "^7.22.5"
}
@@ -12409,15 +12473,15 @@
}
},
"@babel/plugin-transform-object-rest-spread": {
- "version": "7.22.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.11.tgz",
- "integrity": "sha512-nX8cPFa6+UmbepISvlf5jhQyaC7ASs/7UxHmMkuJ/k5xSHvDPPaibMo+v3TXwU/Pjqhep/nFNpd3zn4YR59pnw==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz",
+ "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==",
"requires": {
"@babel/compat-data": "^7.22.9",
- "@babel/helper-compilation-targets": "^7.22.10",
+ "@babel/helper-compilation-targets": "^7.22.15",
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.22.5"
+ "@babel/plugin-transform-parameters": "^7.22.15"
}
},
"@babel/plugin-transform-object-super": {
@@ -12439,9 +12503,9 @@
}
},
"@babel/plugin-transform-optional-chaining": {
- "version": "7.22.12",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.12.tgz",
- "integrity": "sha512-7XXCVqZtyFWqjDsYDY4T45w4mlx1rf7aOgkc/Ww76xkgBiOlmjPkx36PBLHa1k1rwWvVgYMPsbuVnIamx2ZQJw==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz",
+ "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==",
"requires": {
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
@@ -12449,9 +12513,9 @@
}
},
"@babel/plugin-transform-parameters": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz",
- "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz",
+ "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==",
"requires": {
"@babel/helper-plugin-utils": "^7.22.5"
}
@@ -12589,16 +12653,16 @@
}
},
"@babel/preset-env": {
- "version": "7.22.10",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.10.tgz",
- "integrity": "sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.20.tgz",
+ "integrity": "sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg==",
"requires": {
- "@babel/compat-data": "^7.22.9",
- "@babel/helper-compilation-targets": "^7.22.10",
+ "@babel/compat-data": "^7.22.20",
+ "@babel/helper-compilation-targets": "^7.22.15",
"@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-validator-option": "^7.22.5",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.15",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15",
"@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-class-properties": "^7.12.13",
@@ -12619,41 +12683,41 @@
"@babel/plugin-syntax-top-level-await": "^7.14.5",
"@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
"@babel/plugin-transform-arrow-functions": "^7.22.5",
- "@babel/plugin-transform-async-generator-functions": "^7.22.10",
+ "@babel/plugin-transform-async-generator-functions": "^7.22.15",
"@babel/plugin-transform-async-to-generator": "^7.22.5",
"@babel/plugin-transform-block-scoped-functions": "^7.22.5",
- "@babel/plugin-transform-block-scoping": "^7.22.10",
+ "@babel/plugin-transform-block-scoping": "^7.22.15",
"@babel/plugin-transform-class-properties": "^7.22.5",
- "@babel/plugin-transform-class-static-block": "^7.22.5",
- "@babel/plugin-transform-classes": "^7.22.6",
+ "@babel/plugin-transform-class-static-block": "^7.22.11",
+ "@babel/plugin-transform-classes": "^7.22.15",
"@babel/plugin-transform-computed-properties": "^7.22.5",
- "@babel/plugin-transform-destructuring": "^7.22.10",
+ "@babel/plugin-transform-destructuring": "^7.22.15",
"@babel/plugin-transform-dotall-regex": "^7.22.5",
"@babel/plugin-transform-duplicate-keys": "^7.22.5",
- "@babel/plugin-transform-dynamic-import": "^7.22.5",
+ "@babel/plugin-transform-dynamic-import": "^7.22.11",
"@babel/plugin-transform-exponentiation-operator": "^7.22.5",
- "@babel/plugin-transform-export-namespace-from": "^7.22.5",
- "@babel/plugin-transform-for-of": "^7.22.5",
+ "@babel/plugin-transform-export-namespace-from": "^7.22.11",
+ "@babel/plugin-transform-for-of": "^7.22.15",
"@babel/plugin-transform-function-name": "^7.22.5",
- "@babel/plugin-transform-json-strings": "^7.22.5",
+ "@babel/plugin-transform-json-strings": "^7.22.11",
"@babel/plugin-transform-literals": "^7.22.5",
- "@babel/plugin-transform-logical-assignment-operators": "^7.22.5",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.22.11",
"@babel/plugin-transform-member-expression-literals": "^7.22.5",
"@babel/plugin-transform-modules-amd": "^7.22.5",
- "@babel/plugin-transform-modules-commonjs": "^7.22.5",
- "@babel/plugin-transform-modules-systemjs": "^7.22.5",
+ "@babel/plugin-transform-modules-commonjs": "^7.22.15",
+ "@babel/plugin-transform-modules-systemjs": "^7.22.11",
"@babel/plugin-transform-modules-umd": "^7.22.5",
"@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
"@babel/plugin-transform-new-target": "^7.22.5",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5",
- "@babel/plugin-transform-numeric-separator": "^7.22.5",
- "@babel/plugin-transform-object-rest-spread": "^7.22.5",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11",
+ "@babel/plugin-transform-numeric-separator": "^7.22.11",
+ "@babel/plugin-transform-object-rest-spread": "^7.22.15",
"@babel/plugin-transform-object-super": "^7.22.5",
- "@babel/plugin-transform-optional-catch-binding": "^7.22.5",
- "@babel/plugin-transform-optional-chaining": "^7.22.10",
- "@babel/plugin-transform-parameters": "^7.22.5",
+ "@babel/plugin-transform-optional-catch-binding": "^7.22.11",
+ "@babel/plugin-transform-optional-chaining": "^7.22.15",
+ "@babel/plugin-transform-parameters": "^7.22.15",
"@babel/plugin-transform-private-methods": "^7.22.5",
- "@babel/plugin-transform-private-property-in-object": "^7.22.5",
+ "@babel/plugin-transform-private-property-in-object": "^7.22.11",
"@babel/plugin-transform-property-literals": "^7.22.5",
"@babel/plugin-transform-regenerator": "^7.22.10",
"@babel/plugin-transform-reserved-words": "^7.22.5",
@@ -12667,7 +12731,7 @@
"@babel/plugin-transform-unicode-regex": "^7.22.5",
"@babel/plugin-transform-unicode-sets-regex": "^7.22.5",
"@babel/preset-modules": "0.1.6-no-external-plugins",
- "@babel/types": "^7.22.10",
+ "@babel/types": "^7.22.19",
"babel-plugin-polyfill-corejs2": "^0.4.5",
"babel-plugin-polyfill-corejs3": "^0.8.3",
"babel-plugin-polyfill-regenerator": "^0.5.2",
@@ -12736,12 +12800,12 @@
}
},
"@babel/types": {
- "version": "7.22.11",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz",
- "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
+ "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
"requires": {
"@babel/helper-string-parser": "^7.22.5",
- "@babel/helper-validator-identifier": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
}
},
@@ -13011,6 +13075,12 @@
"sparse-bitfield": "^3.0.3"
}
},
+ "@nanostores/react": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/@nanostores/react/-/react-0.7.1.tgz",
+ "integrity": "sha512-EXQg9N4MdI4eJQz/AZLIx3hxQ6BuBmV4Q55bCd5YCSgEOAW7tGTsIZxpRXxvxLXzflNvHTBvfrDNY38TlSVBkQ==",
+ "requires": {}
+ },
"@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -13293,78 +13363,42 @@
"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
"optional": true
},
- "@rollup/plugin-replace": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.2.tgz",
- "integrity": "sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==",
- "requires": {
- "@rollup/pluginutils": "^5.0.1",
- "magic-string": "^0.27.0"
- },
- "dependencies": {
- "magic-string": {
- "version": "0.27.0",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz",
- "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==",
- "requires": {
- "@jridgewell/sourcemap-codec": "^1.4.13"
- }
- }
- }
- },
- "@rollup/pluginutils": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.4.tgz",
- "integrity": "sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==",
- "requires": {
- "@types/estree": "^1.0.0",
- "estree-walker": "^2.0.2",
- "picomatch": "^2.3.1"
- },
- "dependencies": {
- "estree-walker": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
- }
- }
- },
"@rpgjs/chat": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/chat/-/chat-4.0.0-rc.10.tgz",
- "integrity": "sha512-+ABREzDeCUw8gIgYptdTwLd6tCAT0zeXBkJbyhJvsanru/sSfP4/JrXbP2cWznfSQwTb7bNueoG5UcDN54ITSg==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/chat/-/chat-4.0.2.tgz",
+ "integrity": "sha512-sEmrP3+GPo+23DpppzMl/lI6fWJQKy0g7JMzYVi1Qro360KC8ynOQE8hdZ9bMzpGkEZTpMAidklM85/ngOznyg==",
"requires": {
- "@rpgjs/client": "^4.0.0-rc.10",
- "@rpgjs/server": "^4.0.0-rc.10"
+ "@rpgjs/client": "^4.0.2",
+ "@rpgjs/server": "^4.0.2"
}
},
"@rpgjs/client": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/client/-/client-4.0.0-rc.10.tgz",
- "integrity": "sha512-8pxXhBt+naT2etjpcMMa6mI7TRNy6vbkFmotvjfVdfWYlQJ6seJ0r9Iu8bP1hM6bPpNi7uHHbQDPgKoEGH9IIA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/client/-/client-4.0.2.tgz",
+ "integrity": "sha512-1giTS0X/7dKVD8syC7/Fh9bXvvplklZkgeNu2SwiA08Rfjx4lDiPu0N42ulILT0wsZFaUKIpOH032XjKWil09A==",
"requires": {
"@pixi/tilemap": "^4.0.0",
- "@rpgjs/common": "^4.0.0-rc.10",
- "@rpgjs/tiled": "^4.0.0-rc.10",
- "@rpgjs/types": "^4.0.0-rc.10",
+ "@rpgjs/common": "^4.0.2",
+ "@rpgjs/tiled": "^4.0.2",
+ "@rpgjs/types": "^4.0.2",
"@types/howler": "2.2.7",
"howler": "2.2.3",
"lodash.get": "^4.4.2",
"lodash.merge": "4.6.2",
- "pixi-viewport": "5.0.1",
+ "pixi-viewport": "^5.0.2",
"pixi.js": "7.2.4",
"rxjs": "7.8.0",
- "simple-room-client": "^2.0.5",
+ "simple-room-client": "^2.0.6",
"vue": "^3.2.47"
}
},
"@rpgjs/common": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/common/-/common-4.0.0-rc.10.tgz",
- "integrity": "sha512-DE8A7JsvZGwQ+TbAYm/t5e12f8OixghzddK7ptU8Ob21EiX+Ea/j0ui65zN/ydQ/0B3OT7/+me5cYnDQoxl2/g==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/common/-/common-4.0.2.tgz",
+ "integrity": "sha512-xvPyu07bMr13lCVhukRic19huRsdgNZsL3YyqUeNaqQrgo4/Juy69T7gruYZQh5CITXDR8zI25lolUO4mxE8Dg==",
"requires": {
- "@rpgjs/tiled": "^4.0.0-rc.10",
- "@rpgjs/types": "^4.0.0-rc.10",
+ "@rpgjs/tiled": "^4.0.2",
+ "@rpgjs/types": "^4.0.2",
"rbush": "^3.0.1",
"rxjs": "^7.8.0",
"sat": "^0.9.0",
@@ -13382,9 +13416,9 @@
}
},
"@rpgjs/compiler": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/compiler/-/compiler-4.0.0-rc.10.tgz",
- "integrity": "sha512-JzneWRb1Tzoyb+7kFCwdIoM+UtrWVLpIHhZBreV+fnumqIkZ7ZfDg4ZkmabbNX1hJBIsHxf6Q2z81sQFBycPWA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/compiler/-/compiler-4.0.2.tgz",
+ "integrity": "sha512-Tq/RN7GOlDq690PT31gxHqAqfwHuctx2C++z0k+pCnH19WRLPokO7xwUC8yU0vbI64TGzowLEaWkUFfWWjhRNA==",
"requires": {
"@babel/core": "^7.21.4",
"@babel/generator": "^7.21.4",
@@ -13394,11 +13428,12 @@
"@esbuild-plugins/node-globals-polyfill": "^0.2.3",
"@esbuild-plugins/node-modules-polyfill": "^0.2.2",
"@iarna/toml": "^2.2.5",
- "@rpgjs/common": "^4.0.0-rc.10",
"@vitejs/plugin-vue": "^4.2.1",
"ajv": "^8.12.0",
"ajv-formats": "^2.1.1",
"axios": "^1.3.6",
+ "dedent": "^1.5.1",
+ "default-composer": "^0.5.1",
"fs-extra": "^11.1.1",
"glob": "^10.2.2",
"image-size": "^1.0.2",
@@ -13410,7 +13445,7 @@
"sass": "^1.62.1",
"vite": "^4.3.2",
"vite-node": "^0.30.1",
- "vite-plugin-pwa": "^0.14.7",
+ "vite-plugin-pwa": "^0.16.4",
"vite-plugin-require-transform": "^1.0.12",
"vitest": "^0.30.1",
"vitest-webgl-canvas-mock": "^1.1.0",
@@ -13419,67 +13454,67 @@
}
},
"@rpgjs/database": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/database/-/database-4.0.0-rc.10.tgz",
- "integrity": "sha512-8qs/F+NHZBBX851bCZ4lEDaypaNNevn8YBhDfUcBb1tXZwMdVtSLvAqP8GV1ZJC30HO0uo3SzMXdMtEuFlEP5A=="
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/database/-/database-4.0.2.tgz",
+ "integrity": "sha512-g6MRGu50OPBMY3AgD7OlazqPXOoDFXTvyKbXz91ZL07/CCs9S+SI6ndcgg0STve9ZoSbg8fAwtfFFwZYb3krkA=="
},
"@rpgjs/default-gui": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/default-gui/-/default-gui-4.0.0-rc.10.tgz",
- "integrity": "sha512-GnZPB7QEK0ayaJvrq6WhbHt7IKgQWf2fMpThQ5bJVgjg814r1TIKngATXr6WJMyH6UTI3BFmIV/6i5rHUdAWkw==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/default-gui/-/default-gui-4.0.2.tgz",
+ "integrity": "sha512-xmXMVVqE4r3pp7BHG5Up0qghhktke2jolj2UlZYZnDYc6CuxTJKA7UH4G2AfEsrDiNqGKByX+EAvdREvj+es6Q==",
"requires": {
- "@rpgjs/client": "^4.0.0-rc.10",
+ "@rpgjs/client": "^4.0.2",
"rxjs": "^7.8.0",
"typescript": "^5.0.2",
"vue": "^3.2.47"
}
},
"@rpgjs/gamepad": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/gamepad/-/gamepad-4.0.0-rc.10.tgz",
- "integrity": "sha512-hs5Qo6Y99qu5V9Y6CvVBHMQnb5omrKMWJmRtXL5iP5c5jqpSVOUYAI+RdQ2ndV1f+R7LXXDh8EQIQSe/E2w1WA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/gamepad/-/gamepad-4.0.2.tgz",
+ "integrity": "sha512-eVVM6zmZvBkjIOqzZ8xGExp0l/pcGDlXVnya6G72EDwUhLPlAbhAFsOrHGBjORL7C0L4FLTqOhERkr5W5azYZQ==",
"requires": {
- "@rpgjs/client": "^4.0.0-rc.10",
+ "@rpgjs/client": "^4.0.2",
"joypad.js": "^2.3.3"
}
},
"@rpgjs/mobile-gui": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/mobile-gui/-/mobile-gui-4.0.0-rc.10.tgz",
- "integrity": "sha512-Pbo/vJQo6caAmJAxjJhcByJZsOOiGN093WElNUY/xhW6EEkLHHNGe6kQvc6M3ycuoOeL2B2uapDtwbhZiaI/fQ==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/mobile-gui/-/mobile-gui-4.0.2.tgz",
+ "integrity": "sha512-PJD69RVx7lycd+7VSHCqez91QR6v1Z43UmAtTjw2LCDYhmttwXs2e8JWQKCdylDrQC6Mx7oZTZFIx/LID3MM2Q==",
"requires": {
- "@rpgjs/client": "^4.0.0-rc.10",
+ "@rpgjs/client": "^4.0.2",
"nipplejs": "^0.10.1",
"vue": "^3.2.47"
}
},
"@rpgjs/plugin-emotion-bubbles": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/plugin-emotion-bubbles/-/plugin-emotion-bubbles-4.0.0-rc.10.tgz",
- "integrity": "sha512-TpYh90Z07beel3wTUWdmTUEcfFLcCKd+6LKYetdIuXNV9efYVu3h1ZBGCwiawaN0GHnNx6zE3aBlIBkoV5tCHw==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/plugin-emotion-bubbles/-/plugin-emotion-bubbles-4.0.2.tgz",
+ "integrity": "sha512-mKOoZrvMH1joUCTVPKohJzKSPox+IXoMQQGTMd009+aiqUpYvXKk92GKbx3d+xbZGOF35UxtEWR9x2yk4DzF2A==",
"requires": {
- "@rpgjs/client": "^4.0.0-rc.10",
- "@rpgjs/server": "^4.0.0-rc.10"
+ "@rpgjs/client": "^4.0.2",
+ "@rpgjs/server": "^4.0.2"
}
},
"@rpgjs/save": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/save/-/save-4.0.0-rc.10.tgz",
- "integrity": "sha512-ZC2OV/WF+ofyJwoQ5yfFtHbSHVI24J6iw35KDdEH302pqaZMX7eikiqIxkAFuxAsgPgmbang+ifgx5rhstR0YQ==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/save/-/save-4.0.2.tgz",
+ "integrity": "sha512-LyGCz3NDGiJigbt7azd16OeltzM2NUYNLlX1avblC97YdjRtcTz0Rda0ey6fExWMi7CdhkcVHn/6TnK7NEsanA==",
"requires": {
- "@rpgjs/client": "^4.0.0-rc.10",
- "@rpgjs/server": "^4.0.0-rc.10"
+ "@rpgjs/client": "^4.0.2",
+ "@rpgjs/server": "^4.0.2"
}
},
"@rpgjs/server": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/server/-/server-4.0.0-rc.10.tgz",
- "integrity": "sha512-O2DiwuTmODHdmHEp2vmJj1dlUWh8EZszpMQ5bB2nmpgITP0BKM+opieSaZn0YPj/f5DQY+3Q8adK/2iG99SZJA==",
- "requires": {
- "@rpgjs/common": "^4.0.0-rc.10",
- "@rpgjs/database": "^4.0.0-rc.10",
- "@rpgjs/tiled": "^4.0.0-rc.10",
- "@rpgjs/types": "^4.0.0-rc.10",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/server/-/server-4.0.2.tgz",
+ "integrity": "sha512-wrGX+PaIFVezxIErTCpr6JmBTtpUPHyix7D8R0B9MPlL2ZgH+BNLkIrpqBHwvEhMgRVJLAr/kEVJ6mwwR/b42w==",
+ "requires": {
+ "@rpgjs/common": "^4.0.2",
+ "@rpgjs/database": "^4.0.2",
+ "@rpgjs/tiled": "^4.0.2",
+ "@rpgjs/types": "^4.0.2",
"axios": "^1.3.6",
"cors": "^2.8.5",
"express": "^4.18.2",
@@ -13493,19 +13528,19 @@
}
},
"@rpgjs/standalone": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/standalone/-/standalone-4.0.0-rc.10.tgz",
- "integrity": "sha512-iY0A+goEDMlkLCj2jJ6ofuUPOocqMmb3w0U6Lgeir9pSVkpL7CUi9mc8nU+WFLrrkc+amZdXJrgDKDWrMVUO/w==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/standalone/-/standalone-4.0.2.tgz",
+ "integrity": "sha512-M5yvGCK4oSjZuSrtgS+eEDgkMP1Ttddnt1/RXfrl5Lr7nlN43urEppAsb91nV9IuHH/7VlJZt7yuB2dZSPeSug==",
"requires": {
- "@rpgjs/client": "^4.0.0-rc.10",
- "@rpgjs/common": "^4.0.0-rc.10",
- "@rpgjs/server": "^4.0.0-rc.10"
+ "@rpgjs/client": "^4.0.2",
+ "@rpgjs/common": "^4.0.2",
+ "@rpgjs/server": "^4.0.2"
}
},
"@rpgjs/tiled": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/tiled/-/tiled-4.0.0-rc.10.tgz",
- "integrity": "sha512-d2JogD6rHpnoAzPdRQv8/vcVnwmw9064we4lL1aZkYc2ZhkhcaS7GXxkMQxrR3wBd3julAB7v8490ttXAHcSsw==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/tiled/-/tiled-4.0.2.tgz",
+ "integrity": "sha512-XL7+hFHF5lM1o/aRSRO6K32EMuamRMv30PFwtd/vnmyQ3woY+20bHKEBwiSO/1+hZajfFGPnAWZQ0Av0kGhEGA==",
"requires": {
"axios": "^1.3.4",
"buffer": "^6.0.3",
@@ -13514,12 +13549,12 @@
}
},
"@rpgjs/title-screen": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/title-screen/-/title-screen-4.0.0-rc.10.tgz",
- "integrity": "sha512-nPR4FqiYptKxwpsL5Ukq9HmIbetsolDhnVeJMMACdJ9W9q33lrYaN19lt0IkwnpI60YX2qNJ0QiCHLl6LvBKGg==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/title-screen/-/title-screen-4.0.2.tgz",
+ "integrity": "sha512-dAVFsHmgTmM4Qk8SALGpGd+kuLRlp04GK2eQfMea5IlGr5n92+F6h8Ro3g64kcVGvGGVijDijt197q2elx0Arg==",
"requires": {
- "@rpgjs/client": "^4.0.0-rc.10",
- "@rpgjs/server": "^4.0.0-rc.10",
+ "@rpgjs/client": "^4.0.2",
+ "@rpgjs/server": "^4.0.2",
"axios": "^1.4.0",
"body-parser": "^1.20.2",
"mongoose": "^7.4.3",
@@ -13527,9 +13562,9 @@
}
},
"@rpgjs/types": {
- "version": "4.0.0-rc.10",
- "resolved": "https://registry.npmjs.org/@rpgjs/types/-/types-4.0.0-rc.10.tgz",
- "integrity": "sha512-Q3XbXl5vDN7iA44T6xJJEDd3xsORnoxDhxhhTg9tBpra2gGdJ4Pgm/G4rTfycpjzpePqyxdBH2sxNj0ECQOk9Q==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@rpgjs/types/-/types-4.0.2.tgz",
+ "integrity": "sha512-SvvD25qy0/3WmoNLIoAqObHphfpgvJCgGW+wQqCGH/a2UOAtbErx9BN7xmlx0EH6Ce1+suMGDnfAe8m5bmllwg==",
"requires": {
"rxjs": "^7.8.1"
},
@@ -14030,9 +14065,9 @@
"integrity": "sha512-w8oigUCDjElRHRRrMvn/spybSMyX8MTkKA5Dv+tS1IE/TgmNZPqUYtvYBXGY8cieSE66gm+szeK+bnbxC2xHTQ=="
},
"@types/estree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz",
- "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA=="
+ "version": "0.0.39",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
+ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw=="
},
"@types/howler": {
"version": "2.2.7",
@@ -14058,9 +14093,9 @@
}
},
"@types/trusted-types": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz",
- "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g=="
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.4.tgz",
+ "integrity": "sha512-IDaobHimLQhjwsQ/NMwRVfa/yL7L/wriQPMhw1ZJall0KX6E1oxk29XMDeilW5qTIg5aoiqf5Udy8U/51aNoQQ=="
},
"@types/webidl-conversions": {
"version": "7.0.0",
@@ -14352,13 +14387,14 @@
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
},
"arraybuffer.prototype.slice": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz",
- "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz",
+ "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==",
"requires": {
"array-buffer-byte-length": "^1.0.0",
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
"get-intrinsic": "^1.2.1",
"is-array-buffer": "^3.0.2",
"is-shared-array-buffer": "^1.0.2"
@@ -14413,12 +14449,12 @@
}
},
"babel-plugin-polyfill-corejs3": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz",
- "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==",
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.4.tgz",
+ "integrity": "sha512-9l//BZZsPR+5XjyJMPtZSK4jv0BsTO1zDac2GC6ygx9WLGlcsnRd1Co0B2zT5fF5Ic6BZy+9m3HNZ3QcOeDKfg==",
"requires": {
"@babel/helper-define-polyfill-provider": "^0.4.2",
- "core-js-compat": "^3.31.0"
+ "core-js-compat": "^3.32.2"
}
},
"babel-plugin-polyfill-regenerator": {
@@ -14531,14 +14567,14 @@
}
},
"browserslist": {
- "version": "4.21.10",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz",
- "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==",
+ "version": "4.22.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz",
+ "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==",
"requires": {
- "caniuse-lite": "^1.0.30001517",
- "electron-to-chromium": "^1.4.477",
+ "caniuse-lite": "^1.0.30001541",
+ "electron-to-chromium": "^1.4.535",
"node-releases": "^2.0.13",
- "update-browserslist-db": "^1.0.11"
+ "update-browserslist-db": "^1.0.13"
}
},
"bson": {
@@ -14585,9 +14621,9 @@
}
},
"caniuse-lite": {
- "version": "1.0.30001524",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz",
- "integrity": "sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA=="
+ "version": "1.0.30001546",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz",
+ "integrity": "sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw=="
},
"chai": {
"version": "4.3.8",
@@ -14825,11 +14861,11 @@
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
},
"core-js-compat": {
- "version": "3.32.1",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.1.tgz",
- "integrity": "sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA==",
+ "version": "3.33.0",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.0.tgz",
+ "integrity": "sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw==",
"requires": {
- "browserslist": "^4.21.10"
+ "browserslist": "^4.22.1"
}
},
"cors": {
@@ -14899,6 +14935,12 @@
"ms": "2.1.2"
}
},
+ "dedent": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz",
+ "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==",
+ "requires": {}
+ },
"deep-eql": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
@@ -14912,11 +14954,27 @@
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
"integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="
},
+ "default-composer": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/default-composer/-/default-composer-0.5.1.tgz",
+ "integrity": "sha512-lEX0EoZZNkdDGL4kvu1SEi3blRkNF81VTx2PdFkQ7jxR+99tJRl6VoEiig91mwXf3xKYuXeBJzVsd7SvTA2c7A=="
+ },
+ "define-data-property": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz",
+ "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==",
+ "requires": {
+ "get-intrinsic": "^1.2.1",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0"
+ }
+ },
"define-properties": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
- "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
"requires": {
+ "define-data-property": "^1.0.1",
"has-property-descriptors": "^1.0.0",
"object-keys": "^1.1.1"
}
@@ -15001,9 +15059,9 @@
}
},
"electron-to-chromium": {
- "version": "1.4.505",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.505.tgz",
- "integrity": "sha512-0A50eL5BCCKdxig2SsCXhpuztnB9PfUgRMojj5tMvt8O54lbwz3t6wNgnpiTRosw5QjlJB7ixhVyeg8daLQwSQ=="
+ "version": "1.4.544",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.544.tgz",
+ "integrity": "sha512-54z7squS1FyFRSUqq/knOFSptjjogLZXbKcYk3B0qkE1KZzvqASwRZnY2KzZQJqIYLVD38XZeoiMRflYSwyO4w=="
},
"emoji-regex": {
"version": "9.2.2",
@@ -15062,17 +15120,17 @@
"integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="
},
"es-abstract": {
- "version": "1.22.1",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz",
- "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==",
+ "version": "1.22.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz",
+ "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==",
"requires": {
"array-buffer-byte-length": "^1.0.0",
- "arraybuffer.prototype.slice": "^1.0.1",
+ "arraybuffer.prototype.slice": "^1.0.2",
"available-typed-arrays": "^1.0.5",
"call-bind": "^1.0.2",
"es-set-tostringtag": "^2.0.1",
"es-to-primitive": "^1.2.1",
- "function.prototype.name": "^1.1.5",
+ "function.prototype.name": "^1.1.6",
"get-intrinsic": "^1.2.1",
"get-symbol-description": "^1.0.0",
"globalthis": "^1.0.3",
@@ -15088,23 +15146,23 @@
"is-regex": "^1.1.4",
"is-shared-array-buffer": "^1.0.2",
"is-string": "^1.0.7",
- "is-typed-array": "^1.1.10",
+ "is-typed-array": "^1.1.12",
"is-weakref": "^1.0.2",
"object-inspect": "^1.12.3",
"object-keys": "^1.1.1",
"object.assign": "^4.1.4",
- "regexp.prototype.flags": "^1.5.0",
- "safe-array-concat": "^1.0.0",
+ "regexp.prototype.flags": "^1.5.1",
+ "safe-array-concat": "^1.0.1",
"safe-regex-test": "^1.0.0",
- "string.prototype.trim": "^1.2.7",
- "string.prototype.trimend": "^1.0.6",
- "string.prototype.trimstart": "^1.0.6",
+ "string.prototype.trim": "^1.2.8",
+ "string.prototype.trimend": "^1.0.7",
+ "string.prototype.trimstart": "^1.0.7",
"typed-array-buffer": "^1.0.0",
"typed-array-byte-length": "^1.0.0",
"typed-array-byte-offset": "^1.0.0",
"typed-array-length": "^1.0.4",
"unbox-primitive": "^1.0.2",
- "which-typed-array": "^1.1.10"
+ "which-typed-array": "^1.1.11"
}
},
"es-set-tostringtag": {
@@ -16142,6 +16200,14 @@
}
}
},
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
"loupe": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz",
@@ -16439,9 +16505,10 @@
"integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA=="
},
"nanostores": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/nanostores/-/nanostores-0.8.1.tgz",
- "integrity": "sha512-1ZCfQtII2XeFDrtqXL2cdQ/diGrLxzRB3YMyQjn8m7GSGQrJfGST2iuqMpWnS/ZlifhtjgR/SX0Jy6Uij6lRLA=="
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/nanostores/-/nanostores-0.9.3.tgz",
+ "integrity": "sha512-KobZjcVyNndNrb5DAjfs0WG0lRcZu5Q1BOrfTOxokFLi25zFrWPjg+joXC6kuDqNfSt9fQwppyjUBkRPtsL+8w==",
+ "peer": true
},
"negotiator": {
"version": "0.6.3",
@@ -16652,9 +16719,9 @@
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
},
"pixi-viewport": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/pixi-viewport/-/pixi-viewport-5.0.1.tgz",
- "integrity": "sha512-fIILU9xztqGnhGF5SYfjn1Rir/7asWkJ8zSUay2hwzPrdGTWFtB4yiIlZDeFaLf7KHA04RRb2kI01Sy1kNksAw=="
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/pixi-viewport/-/pixi-viewport-5.0.2.tgz",
+ "integrity": "sha512-U77KnCTl81xEgxEQRFEuI7MYVySWwCVkA41EnM8KiOYwgVOwdBUa7318O+u61IOnTwnoYLzaihy/kpoONKU13Q=="
},
"pixi.js": {
"version": "7.2.4",
@@ -16846,6 +16913,23 @@
"quickselect": "^2.0.0"
}
},
+ "react": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "requires": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "react-dom": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.0"
+ }
+ },
"react-is": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
@@ -16896,13 +16980,13 @@
}
},
"regexp.prototype.flags": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz",
- "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz",
+ "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==",
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
- "functions-have-names": "^1.2.3"
+ "set-function-name": "^2.0.0"
}
},
"regexpu-core": {
@@ -16971,9 +17055,9 @@
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
},
"resolve": {
- "version": "1.22.4",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
- "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "version": "1.22.6",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz",
+ "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==",
"requires": {
"is-core-module": "^2.13.0",
"path-parse": "^1.0.7",
@@ -17259,12 +17343,12 @@
}
},
"safe-array-concat": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz",
- "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz",
+ "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==",
"requires": {
"call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.0",
+ "get-intrinsic": "^1.2.1",
"has-symbols": "^1.0.3",
"isarray": "^2.0.5"
},
@@ -17316,6 +17400,14 @@
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
},
+ "scheduler": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "requires": {
+ "loose-envify": "^1.1.0"
+ }
+ },
"semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -17382,6 +17474,16 @@
"send": "0.18.0"
}
},
+ "set-function-name": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
+ "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==",
+ "requires": {
+ "define-data-property": "^1.0.1",
+ "functions-have-names": "^1.2.3",
+ "has-property-descriptors": "^1.0.0"
+ }
+ },
"set-value": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/set-value/-/set-value-3.0.2.tgz",
@@ -17455,15 +17557,22 @@
}
},
"simple-room-client": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/simple-room-client/-/simple-room-client-2.0.5.tgz",
- "integrity": "sha512-OuSGM3QvBilB/hs7IlZcm4OhpnlWjGVg6z4pi601/iP/q0WQ+xbNU3yK3JFT7g32IACZuTbPMyQFVdkr+JdIPA==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/simple-room-client/-/simple-room-client-2.0.6.tgz",
+ "integrity": "sha512-HA3cdXsnx/gpQVC9VU/ZbVMg6NgFFw9XZCwHqueEiToYbFLaRHdI+skFeL2B4Xp6aCDy1lu2AyUNYjNQmF733Q==",
"requires": {
"lodash.merge": "4.6.2",
"lodash.mergewith": "4.6.2",
"msgpack-lite": "0.1.26",
"nanostores": "^0.8.0",
"rxjs": "7.8.0"
+ },
+ "dependencies": {
+ "nanostores": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/nanostores/-/nanostores-0.8.1.tgz",
+ "integrity": "sha512-1ZCfQtII2XeFDrtqXL2cdQ/diGrLxzRB3YMyQjn8m7GSGQrJfGST2iuqMpWnS/ZlifhtjgR/SX0Jy6Uij6lRLA=="
+ }
}
},
"smart-buffer": {
@@ -17627,9 +17736,9 @@
}
},
"string.prototype.matchall": {
- "version": "4.0.9",
- "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.9.tgz",
- "integrity": "sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA==",
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz",
+ "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==",
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
@@ -17638,37 +17747,38 @@
"has-symbols": "^1.0.3",
"internal-slot": "^1.0.5",
"regexp.prototype.flags": "^1.5.0",
+ "set-function-name": "^2.0.0",
"side-channel": "^1.0.4"
}
},
"string.prototype.trim": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz",
- "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==",
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz",
+ "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==",
"requires": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
}
},
"string.prototype.trimend": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
- "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz",
+ "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==",
"requires": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
}
},
"string.prototype.trimstart": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
- "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz",
+ "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==",
"requires": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
}
},
"stringify-object": {
@@ -17945,9 +18055,9 @@
"integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="
},
"update-browserslist-db": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
- "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
+ "version": "1.0.13",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
+ "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
"requires": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
@@ -18191,17 +18301,15 @@
}
},
"vite-plugin-pwa": {
- "version": "0.14.7",
- "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.14.7.tgz",
- "integrity": "sha512-dNJaf0fYOWncmjxv9HiSa2xrSjipjff7IkYE5oIUJ2x5HKu3cXgA8LRgzOwTc5MhwyFYRSU0xyN0Phbx3NsQYw==",
+ "version": "0.16.5",
+ "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.16.5.tgz",
+ "integrity": "sha512-Ahol4dwhMP2UHPQXkllSlXbihOaDFnvBIDPmAxoSZ1EObBUJGP4CMRyCyAVkIHjd6/H+//vH0DM2ON+XxHr81g==",
"requires": {
- "@rollup/plugin-replace": "^5.0.1",
"debug": "^4.3.4",
- "fast-glob": "^3.2.12",
- "pretty-bytes": "^6.0.0",
- "rollup": "^3.7.2",
- "workbox-build": "^6.5.4",
- "workbox-window": "^6.5.4"
+ "fast-glob": "^3.3.1",
+ "pretty-bytes": "^6.1.1",
+ "workbox-build": "^7.0.0",
+ "workbox-window": "^7.0.0"
}
},
"vite-plugin-require-transform": {
@@ -18340,26 +18448,26 @@
}
},
"workbox-background-sync": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz",
- "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-7.0.0.tgz",
+ "integrity": "sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==",
"requires": {
"idb": "^7.0.1",
- "workbox-core": "6.6.0"
+ "workbox-core": "7.0.0"
}
},
"workbox-broadcast-update": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz",
- "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-7.0.0.tgz",
+ "integrity": "sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ==",
"requires": {
- "workbox-core": "6.6.0"
+ "workbox-core": "7.0.0"
}
},
"workbox-build": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz",
- "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-7.0.0.tgz",
+ "integrity": "sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg==",
"requires": {
"@apideck/better-ajv-errors": "^0.3.1",
"@babel/core": "^7.11.1",
@@ -18383,21 +18491,21 @@
"strip-comments": "^2.0.1",
"tempy": "^0.6.0",
"upath": "^1.2.0",
- "workbox-background-sync": "6.6.0",
- "workbox-broadcast-update": "6.6.0",
- "workbox-cacheable-response": "6.6.0",
- "workbox-core": "6.6.0",
- "workbox-expiration": "6.6.0",
- "workbox-google-analytics": "6.6.0",
- "workbox-navigation-preload": "6.6.0",
- "workbox-precaching": "6.6.0",
- "workbox-range-requests": "6.6.0",
- "workbox-recipes": "6.6.0",
- "workbox-routing": "6.6.0",
- "workbox-strategies": "6.6.0",
- "workbox-streams": "6.6.0",
- "workbox-sw": "6.6.0",
- "workbox-window": "6.6.0"
+ "workbox-background-sync": "7.0.0",
+ "workbox-broadcast-update": "7.0.0",
+ "workbox-cacheable-response": "7.0.0",
+ "workbox-core": "7.0.0",
+ "workbox-expiration": "7.0.0",
+ "workbox-google-analytics": "7.0.0",
+ "workbox-navigation-preload": "7.0.0",
+ "workbox-precaching": "7.0.0",
+ "workbox-range-requests": "7.0.0",
+ "workbox-recipes": "7.0.0",
+ "workbox-routing": "7.0.0",
+ "workbox-strategies": "7.0.0",
+ "workbox-streams": "7.0.0",
+ "workbox-sw": "7.0.0",
+ "workbox-window": "7.0.0"
},
"dependencies": {
"@rollup/plugin-babel": {
@@ -18441,11 +18549,6 @@
"picomatch": "^2.2.2"
}
},
- "@types/estree": {
- "version": "0.0.39",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
- "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw=="
- },
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -18550,114 +18653,114 @@
}
},
"workbox-cacheable-response": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz",
- "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-7.0.0.tgz",
+ "integrity": "sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g==",
"requires": {
- "workbox-core": "6.6.0"
+ "workbox-core": "7.0.0"
}
},
"workbox-core": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz",
- "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ=="
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-7.0.0.tgz",
+ "integrity": "sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ=="
},
"workbox-expiration": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz",
- "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-7.0.0.tgz",
+ "integrity": "sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ==",
"requires": {
"idb": "^7.0.1",
- "workbox-core": "6.6.0"
+ "workbox-core": "7.0.0"
}
},
"workbox-google-analytics": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz",
- "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-7.0.0.tgz",
+ "integrity": "sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==",
"requires": {
- "workbox-background-sync": "6.6.0",
- "workbox-core": "6.6.0",
- "workbox-routing": "6.6.0",
- "workbox-strategies": "6.6.0"
+ "workbox-background-sync": "7.0.0",
+ "workbox-core": "7.0.0",
+ "workbox-routing": "7.0.0",
+ "workbox-strategies": "7.0.0"
}
},
"workbox-navigation-preload": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz",
- "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-7.0.0.tgz",
+ "integrity": "sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==",
"requires": {
- "workbox-core": "6.6.0"
+ "workbox-core": "7.0.0"
}
},
"workbox-precaching": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz",
- "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-7.0.0.tgz",
+ "integrity": "sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA==",
"requires": {
- "workbox-core": "6.6.0",
- "workbox-routing": "6.6.0",
- "workbox-strategies": "6.6.0"
+ "workbox-core": "7.0.0",
+ "workbox-routing": "7.0.0",
+ "workbox-strategies": "7.0.0"
}
},
"workbox-range-requests": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz",
- "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-7.0.0.tgz",
+ "integrity": "sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ==",
"requires": {
- "workbox-core": "6.6.0"
+ "workbox-core": "7.0.0"
}
},
"workbox-recipes": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz",
- "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-7.0.0.tgz",
+ "integrity": "sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww==",
"requires": {
- "workbox-cacheable-response": "6.6.0",
- "workbox-core": "6.6.0",
- "workbox-expiration": "6.6.0",
- "workbox-precaching": "6.6.0",
- "workbox-routing": "6.6.0",
- "workbox-strategies": "6.6.0"
+ "workbox-cacheable-response": "7.0.0",
+ "workbox-core": "7.0.0",
+ "workbox-expiration": "7.0.0",
+ "workbox-precaching": "7.0.0",
+ "workbox-routing": "7.0.0",
+ "workbox-strategies": "7.0.0"
}
},
"workbox-routing": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz",
- "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-7.0.0.tgz",
+ "integrity": "sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA==",
"requires": {
- "workbox-core": "6.6.0"
+ "workbox-core": "7.0.0"
}
},
"workbox-strategies": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz",
- "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-7.0.0.tgz",
+ "integrity": "sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA==",
"requires": {
- "workbox-core": "6.6.0"
+ "workbox-core": "7.0.0"
}
},
"workbox-streams": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz",
- "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-7.0.0.tgz",
+ "integrity": "sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ==",
"requires": {
- "workbox-core": "6.6.0",
- "workbox-routing": "6.6.0"
+ "workbox-core": "7.0.0",
+ "workbox-routing": "7.0.0"
}
},
"workbox-sw": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz",
- "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ=="
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-7.0.0.tgz",
+ "integrity": "sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA=="
},
"workbox-window": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz",
- "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-7.0.0.tgz",
+ "integrity": "sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==",
"requires": {
"@types/trusted-types": "^2.0.2",
- "workbox-core": "6.6.0"
+ "workbox-core": "7.0.0"
}
},
"workerpool": {
diff --git a/packages/sample2/package.json b/packages/sample2/package.json
index d8ecb1f8..20aee22b 100644
--- a/packages/sample2/package.json
+++ b/packages/sample2/package.json
@@ -12,6 +12,7 @@
"author": "",
"license": "MIT",
"dependencies": {
+ "@nanostores/react": "^0.7.1",
"@rpgjs/chat": "^4.0.2",
"@rpgjs/client": "^4.0.2",
"@rpgjs/common": "^4.0.2",
@@ -25,6 +26,8 @@
"@rpgjs/server": "^4.0.2",
"@rpgjs/standalone": "^4.0.2",
"@rpgjs/title-screen": "^4.0.2",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
"rpgjs-helloworld": "^0.0.1",
"socket.io-client": "^4.7.2"
},
diff --git a/packages/sample2/rpg.toml b/packages/sample2/rpg.toml
index f8d16136..2df70adc 100644
--- a/packages/sample2/rpg.toml
+++ b/packages/sample2/rpg.toml
@@ -4,6 +4,7 @@ modules = [
'@rpgjs/default-gui',
'@rpgjs/plugin-emotion-bubbles',
'@rpgjs/gamepad',
+ # '@rpgjs/mobile-gui'
# '@rpgjs/chat',
# '@rpgjs/title-screen'
]
diff --git a/packages/sample2/tsconfig.json b/packages/sample2/tsconfig.json
index 2f2606cb..dee1e974 100644
--- a/packages/sample2/tsconfig.json
+++ b/packages/sample2/tsconfig.json
@@ -21,7 +21,8 @@
"types": [
"node"
],
- "resolveJsonModule": true
+ "resolveJsonModule": true,
+ "jsx": "react"
},
"include": [
".",