diff --git a/apps/frontend/package.json b/apps/frontend/package.json
index 52faf1324..64b7a31cf 100644
--- a/apps/frontend/package.json
+++ b/apps/frontend/package.json
@@ -57,6 +57,8 @@
"pinia": "^2.1.7",
"qrcode.vue": "^3.4.0",
"semver": "^7.5.4",
+ "three": "^0.172.0",
+ "@types/three": "^0.172.0",
"vue-multiselect": "3.0.0-alpha.2",
"vue-typed-virtual-list": "^1.0.10",
"vue3-ace-editor": "^2.2.4",
diff --git a/apps/frontend/src/components/ui/NavTabs.vue b/apps/frontend/src/components/ui/NavTabs.vue
index ab8ef5b7c..629b47f5e 100644
--- a/apps/frontend/src/components/ui/NavTabs.vue
+++ b/apps/frontend/src/components/ui/NavTabs.vue
@@ -76,7 +76,12 @@ function pickLink() {
subpageSelected.value = false;
for (let i = filteredLinks.value.length - 1; i >= 0; i--) {
const link = filteredLinks.value[i];
- if (decodeURIComponent(route.path) === link.href) {
+ if (props.query) {
+ if (route.query[props.query] === link.href || (!route.query[props.query] && !link.href)) {
+ index = i;
+ break;
+ }
+ } else if (decodeURIComponent(route.path) === link.href) {
index = i;
break;
} else if (
@@ -150,7 +155,7 @@ onMounted(() => {
});
watch(
- () => route.path,
+ () => [route.path, route.query],
() => pickLink(),
);
diff --git a/apps/frontend/src/components/ui/servers/Globe.vue b/apps/frontend/src/components/ui/servers/Globe.vue
new file mode 100644
index 000000000..65040d9ab
--- /dev/null
+++ b/apps/frontend/src/components/ui/servers/Globe.vue
@@ -0,0 +1,308 @@
+
+
+
+
+
+
+
diff --git a/apps/frontend/src/layouts/default.vue b/apps/frontend/src/layouts/default.vue
index 25c977363..84426eba6 100644
--- a/apps/frontend/src/layouts/default.vue
+++ b/apps/frontend/src/layouts/default.vue
@@ -1444,10 +1444,6 @@ function hideStagingBanner() {
.mobile-navigation {
display: flex;
}
-
- main {
- padding-top: 1.5rem;
- }
}
diff --git a/apps/frontend/src/locales/en-US/index.json b/apps/frontend/src/locales/en-US/index.json
index df10535bf..773dc25a5 100644
--- a/apps/frontend/src/locales/en-US/index.json
+++ b/apps/frontend/src/locales/en-US/index.json
@@ -521,6 +521,9 @@
"report.not-for.bug-reports": {
"message": "Bug reports"
},
+ "report.not-for.bug-reports.description": {
+ "message": "You can report bugs to their issue tracker."
+ },
"report.not-for.dmca": {
"message": "DMCA takedowns"
},
diff --git a/apps/frontend/src/pages/news/changelog.vue b/apps/frontend/src/pages/news/changelog.vue
new file mode 100644
index 000000000..9cfb0802b
--- /dev/null
+++ b/apps/frontend/src/pages/news/changelog.vue
@@ -0,0 +1,16 @@
+
+
+
+
Keep up-to-date on what's new with Modrinth.
+
+
+
+
+
diff --git a/apps/frontend/src/pages/news/changelog/[product]/[date].vue b/apps/frontend/src/pages/news/changelog/[product]/[date].vue
new file mode 100644
index 000000000..136a0951e
--- /dev/null
+++ b/apps/frontend/src/pages/news/changelog/[product]/[date].vue
@@ -0,0 +1,79 @@
+
+
+
+
+
+ View full changelog
+
+
+
+
+
+
diff --git a/apps/frontend/src/pages/news/changelog/index.vue b/apps/frontend/src/pages/news/changelog/index.vue
new file mode 100644
index 000000000..1262191df
--- /dev/null
+++ b/apps/frontend/src/pages/news/changelog/index.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
diff --git a/apps/frontend/src/pages/report.vue b/apps/frontend/src/pages/report.vue
index e44a8a9cd..7ce690a24 100644
--- a/apps/frontend/src/pages/report.vue
+++ b/apps/frontend/src/pages/report.vue
@@ -63,7 +63,20 @@
-
{{ formatMessage(messages.bugReports) }}
+
+
+
{{ formatMessage(messages.bugReports) }}
+
+
+
+
+
+
+
+
+
+
+
@@ -238,6 +251,7 @@ import {
AutoLink,
} from "@modrinth/ui";
import {
+ ExternalIcon,
LeftArrowIcon,
RightArrowIcon,
CheckIcon,
@@ -289,6 +303,7 @@ const itemIcon = ref();
const itemName = ref();
const itemLink = ref();
const itemId = ref();
+const itemIssueTracker = ref();
const reports = ref([]);
const existingReport = computed(() =>
@@ -319,6 +334,7 @@ async function fetchItem() {
itemName.value = undefined;
itemLink.value = undefined;
itemId.value = undefined;
+ itemIssueTracker.value = undefined;
try {
if (reportItem.value === "project") {
const project = (await useBaseFetch(`project/${reportItemID.value}`)) as Project;
@@ -328,6 +344,7 @@ async function fetchItem() {
itemName.value = project.title;
itemLink.value = `/project/${project.id}`;
itemId.value = project.id;
+ itemIssueTracker.value = project.issues_url;
} else if (reportItem.value === "version") {
const version = (await useBaseFetch(`version/${reportItemID.value}`)) as Version;
currentVersion.value = version;
@@ -540,6 +557,10 @@ const messages = defineMessages({
id: "report.not-for.bug-reports",
defaultMessage: "Bug reports",
},
+ bugReportsDescription: {
+ id: "report.not-for.bug-reports.description",
+ defaultMessage: "You can report bugs to their issue tracker.",
+ },
dmcaTakedown: {
id: "report.not-for.dmca",
defaultMessage: "DMCA takedowns",
@@ -586,7 +607,7 @@ const messages = defineMessages({
diff --git a/packages/ui/src/components/index.ts b/packages/ui/src/components/index.ts
index 00b016550..ee552fe63 100644
--- a/packages/ui/src/components/index.ts
+++ b/packages/ui/src/components/index.ts
@@ -40,6 +40,9 @@ export { default as Toggle } from './base/Toggle.vue'
export { default as AnimatedLogo } from './brand/AnimatedLogo.vue'
export { default as TextLogo } from './brand/TextLogo.vue'
+// Changelog
+export { default as ChangelogEntry } from './changelog/ChangelogEntry.vue'
+
// Charts
export { default as Chart } from './chart/Chart.vue'
export { default as CompactChart } from './chart/CompactChart.vue'
diff --git a/packages/ui/src/locales/en-US/index.json b/packages/ui/src/locales/en-US/index.json
index f6529b8c7..a3bca1c36 100644
--- a/packages/ui/src/locales/en-US/index.json
+++ b/packages/ui/src/locales/en-US/index.json
@@ -32,6 +32,18 @@
"button.upload-image": {
"defaultMessage": "Upload image"
},
+ "changelog.product.api": {
+ "defaultMessage": "API"
+ },
+ "changelog.product.app": {
+ "defaultMessage": "App"
+ },
+ "changelog.product.servers": {
+ "defaultMessage": "Servers"
+ },
+ "changelog.product.web": {
+ "defaultMessage": "Website"
+ },
"collection.label.private": {
"defaultMessage": "Private"
},
diff --git a/packages/utils/changelog.ts b/packages/utils/changelog.ts
new file mode 100644
index 000000000..27c45bb5c
--- /dev/null
+++ b/packages/utils/changelog.ts
@@ -0,0 +1,151 @@
+import dayjs from 'dayjs'
+
+export type Product = 'web' | 'servers' | 'api' | 'app'
+
+export type VersionEntry = {
+ date: dayjs.Dayjs
+ product: Product
+ version?: string
+ body: string
+}
+
+const VERSIONS: VersionEntry[] = [
+ {
+ date: `2025-02-12T12:10:00-08:00`,
+ product: 'web',
+ body: `### Added
+- Added a 3D globe to visualize node locations to Modrinth Servers marketing page.
+- Added an indicator to show when certain server plans are running low on availability.
+
+### Improvements
+- Improved out-of-stock notifications on Modrinth Servers page to be more accurate.`,
+ },
+ {
+ date: `2025-02-11T13:00:00-08:00`,
+ product: 'web',
+ body: `### Improvements
+- Added project issues link to report page if present.
+- Added relative times for all recent versions to changelog page.
+- Added header to changelog sub-pages.
+- Fixed various padding issues and changelog overlapping navbar on mobile.`,
+ },
+ {
+ date: `2025-02-11T09:00:00-08:00`,
+ product: 'web',
+ body: `### Added
+- Added a changelog page to view recent changes to Modrinth.`,
+ },
+ {
+ date: `2025-02-10T14:00:00-08:00`,
+ product: 'web',
+ body: `### Improvements
+- The license selector in project settings has been updated to make selecting a license a clearer process. (Contributed by [Erb3](https://github.com/modrinth/code/pull/3225))`,
+ },
+ {
+ date: `2025-02-10T08:00:00-08:00`,
+ product: 'servers',
+ body: `### Added
+- You can now search and filter through your server's console in the Overview tab, jump to specific results to see the log in context, select them, and copy them.
+- You can now drag and select any number of lines in the console, copy them. and view them formatted.
+- Hide your server's \`.modrinth.gg\` custom URL using the new **Hide subdomain label** toggle in Options > Preferences.
+- The Content page has been updated to make managing your server's mods and plugins easier than ever. Now, only versions that are available for your server's Minecraft version and platform are shown by default, and you can now show beta and alpha versions in the selector.
+### Improvements
+- The Overview page loads faster.
+- The Options > Properties page loads faster.
+- The server hardware graphs in the Overview page have been rewritten to improve power efficiency and fix rendering bugs.
+- The modpack selector in Options > Platform now shows more information about a modpack, like its tags, downloads, and followers.
+- Reinstalling your server no longer requires the browser to refresh the page in order to work properly. We now also lock more options while a server installs to prevent your server from bricking itself.
+- The server console has been rewritten to implement proper batching. All performance issues with the console previously have now been fixed.
+- An error state has been added in the server list if servers are unable to be fetched.
+- Sorting in the Files tab is now accessible by clicking the column headers.
+- Backing up a server and erasing all its data simultaneously in the Platform page now works as expected.
+- Opening a platform modal, then opening another, no longer causes versions of that platform to fail to load.`,
+ },
+ {
+ date: `2025-02-06T10:00:00-08:00`,
+ product: 'app',
+ version: `0.9.3`,
+ body: `### Improvements
+- Prevent ads from being able to open additional windows.
+- Fixed update checking only checking for mod updates.
+- Fixed issue importing newer Prism instances.
+- Fixed issue where instances get stuck "Installing" forever when the app is closed during an install.
+- Minecraft profile is now updated every time the user's token is refreshed.
+- Improved ability for package managers to update Modrinth App by skipping the updater at runtime with an environment variable.`,
+ },
+ {
+ date: `2025-02-02T14:00:00-08:00`,
+ product: 'web',
+ body: `### Improvements
+- The report form has been updated to walk you through the report process better and clarify some things like that the form is for Modrinth rules and terms violations, not for bug reports or DMCA takedowns.
+
+`,
+ },
+ {
+ date: `2025-01-28T19:00:00-08:00`,
+ product: 'web',
+ body: `### Improvements
+- The UI for analytics has been updated to make it way more useful. What was previously called "Last month" really meant "Previous 30 days". Now, many more options have been added such as:
+ - "This month" which refers to the current calendar month (Jan 1st - Jan 28th, currently)
+ - "Last month" which refers to the previous calendar month (currently, Dec 1st thru Dec 31st)
+
+Contributed by [IMB11](https://github.com/modrinth/code/pull/1301).`,
+ },
+ {
+ date: `2025-01-10T09:00:00-08:00`,
+ product: 'servers',
+ body: `### Improvements
+- The content page layout has been enhanced, now showing the file name and author of each installed item.
+- You can now upload directly from the content page, instead of having to go to the Files page.`,
+ },
+ {
+ date: `2025-01-10T09:00:00-08:00`,
+ product: 'web',
+ body: `### Improvements
+- Tags on project pages are now clickable to view other projects with that tag (Contributed by [Neddo](https://github.com/modrinth/code/pull/3126))
+- You can now send someone a link to the download interface with a specific version and loader selected, like so: https://modrinth.com/mod/sodium?version=1.21.2&loader=quilt#download (Contributed by [AwakenedRedstone](https://github.com/modrinth/code/pull/3138))`,
+ },
+ {
+ date: `2024-12-25T14:00:00-08:00`,
+ product: 'app',
+ version: `0.9.2`,
+ body: `### Improvements
+- Prevent ads from being able to play audio.`,
+ },
+ {
+ date: `2024-12-24T22:00:00-08:00`,
+ product: 'app',
+ version: `0.9.1`,
+ body: `### Added
+- Added filter to filter projects by disabled.
+- Re-added back/forward navigation buttons.
+### Improvements
+- Fixed environment tags missing from search.
+- Fixed an issue where ads could play audio.
+- Changed content enable/disable buttons to toggle switches.
+- Show "install" button at all time on project cards.
+- Fixed issue where cards would shrink when clicking button inside them causing click not to register.
+- Made sidebar hide instantly.`,
+ },
+ {
+ date: `2024-12-23T22:16:00-08:00`,
+ product: 'app',
+ version: `0.9.0`,
+ body: `### Improvements
+- New, updated design that brings the app in-line with the website.
+ - A dynamic sidebar that adjusts to the most relevant content for each page, and keeps the ad in a consistent place instead of moving all around your screen.
+ - More organized settings interfaces that makes each option clearer and easier to find.
+ - Managing your content is much easier with enhanced filters for content types or checking for updates.
+ - Content discovery has been overhauled and now has fully-featured project pages that match the website.
+ - Instances now show your total play time, and will show the last time you played on the Home screen.
+ - The library page now gives responsive feedback as instances are installing.
+- The beginnings of a Friends system. In the future, you will be able to share the instances you’re playing and invite them to servers.
+- Access your most recent instances with ease with Quick Instances.
+- Fixed “Database is locked” errors on devices with slow disks.
+- Fixed a few edge cases where API downtime could lead to an invalid state.`,
+ },
+].map((x) => ({ ...x, date: dayjs(x.date) }) as VersionEntry)
+
+export function getChangelog() {
+ return VERSIONS
+}
diff --git a/packages/utils/index.ts b/packages/utils/index.ts
index 7e2bfa3d1..8cac23953 100644
--- a/packages/utils/index.ts
+++ b/packages/utils/index.ts
@@ -1,4 +1,5 @@
export * from './billing'
+export * from './changelog'
export * from './highlight'
export * from './licenses'
export * from './parse'
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index bcfebf375..9a6cd6808 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -209,6 +209,9 @@ importers:
'@pinia/nuxt':
specifier: ^0.5.1
version: 0.5.1(magicast@0.3.5)(rollup@4.28.1)(typescript@5.5.4)(vue@3.5.13(typescript@5.5.4))
+ '@types/three':
+ specifier: ^0.172.0
+ version: 0.172.0
'@vintl/vintl':
specifier: ^4.4.1
version: 4.4.1(typescript@5.5.4)(vue@3.5.13(typescript@5.5.4))
@@ -260,6 +263,9 @@ importers:
semver:
specifier: ^7.5.4
version: 7.6.3
+ three:
+ specifier: ^0.172.0
+ version: 0.172.0
vue-multiselect:
specifier: 3.0.0-alpha.2
version: 3.0.0-alpha.2
@@ -2146,6 +2152,9 @@ packages:
resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
engines: {node: '>=10.13.0'}
+ '@tweenjs/tween.js@23.1.3':
+ resolution: {integrity: sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==}
+
'@types/acorn@4.0.6':
resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
@@ -2248,6 +2257,12 @@ packages:
'@types/semver@7.5.8':
resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==}
+ '@types/stats.js@0.17.3':
+ resolution: {integrity: sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==}
+
+ '@types/three@0.172.0':
+ resolution: {integrity: sha512-LrUtP3FEG26Zg5WiF0nbg8VoXiKokBLTcqM2iLvM9vzcfEiYmmBAPGdBgV0OYx9fvWlY3R/3ERTZcD9X5sc0NA==}
+
'@types/trusted-types@2.0.7':
resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
@@ -2263,6 +2278,9 @@ packages:
'@types/web-bluetooth@0.0.20':
resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
+ '@types/webxr@0.5.21':
+ resolution: {integrity: sha512-geZIAtLzjGmgY2JUi6VxXdCrTb99A7yP49lxLr2Nm/uIK0PkkxcEi4OGhoGDO4pxCf3JwGz2GiJL2Ej4K2bKaA==}
+
'@typescript-eslint/eslint-plugin@6.21.0':
resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -2714,6 +2732,9 @@ packages:
'@webassemblyjs/wast-printer@1.14.1':
resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==}
+ '@webgpu/types@0.1.54':
+ resolution: {integrity: sha512-81oaalC8LFrXjhsczomEQ0u3jG+TqE6V9QHLA8GNZq/Rnot0KDugu3LhSYSlie8tSdooAN1Hov05asrUUp9qgg==}
+
'@xtuc/ieee754@1.2.0':
resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
@@ -4063,6 +4084,9 @@ packages:
fflate@0.4.8:
resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==}
+ fflate@0.8.2:
+ resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
+
file-entry-cache@6.0.1:
resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
engines: {node: ^10.12.0 || >=12.0.0}
@@ -5046,6 +5070,9 @@ packages:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
+ meshoptimizer@0.18.1:
+ resolution: {integrity: sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==}
+
micromark-core-commonmark@2.0.1:
resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==}
@@ -6677,6 +6704,9 @@ packages:
thenify@3.3.1:
resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+ three@0.172.0:
+ resolution: {integrity: sha512-6HMgMlzU97MsV7D/tY8Va38b83kz8YJX+BefKjspMNAv0Vx6dxMogHOrnRl/sbMIs3BPUKijPqDqJ/+UwJbIow==}
+
tiny-invariant@1.3.3:
resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
@@ -8937,7 +8967,7 @@ snapshots:
'@nuxtjs/eslint-config-typescript@12.1.0(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4)':
dependencies:
- '@nuxtjs/eslint-config': 12.0.0(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.13.0(jiti@2.4.1))
+ '@nuxtjs/eslint-config': 12.0.0(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.13.0(jiti@2.4.1)))(eslint@9.13.0(jiti@2.4.1))
'@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4))(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4)
'@typescript-eslint/parser': 6.21.0(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4)
eslint: 9.13.0(jiti@2.4.1)
@@ -8950,10 +8980,10 @@ snapshots:
- supports-color
- typescript
- '@nuxtjs/eslint-config@12.0.0(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.13.0(jiti@2.4.1))':
+ '@nuxtjs/eslint-config@12.0.0(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.13.0(jiti@2.4.1)))(eslint@9.13.0(jiti@2.4.1))':
dependencies:
eslint: 9.13.0(jiti@2.4.1)
- eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@15.7.0(eslint@9.13.0(jiti@2.4.1)))(eslint-plugin-promise@6.4.0(eslint@9.13.0(jiti@2.4.1)))(eslint@9.13.0(jiti@2.4.1))
+ eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.13.0(jiti@2.4.1)))(eslint-plugin-n@15.7.0(eslint@9.13.0(jiti@2.4.1)))(eslint-plugin-promise@6.4.0(eslint@9.13.0(jiti@2.4.1)))(eslint@9.13.0(jiti@2.4.1))
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.13.0(jiti@2.4.1))
eslint-plugin-n: 15.7.0(eslint@9.13.0(jiti@2.4.1))
eslint-plugin-node: 11.1.0(eslint@9.13.0(jiti@2.4.1))
@@ -9393,6 +9423,8 @@ snapshots:
'@trysound/sax@0.2.0': {}
+ '@tweenjs/tween.js@23.1.3': {}
+
'@types/acorn@4.0.6':
dependencies:
'@types/estree': 1.0.6
@@ -9517,6 +9549,17 @@ snapshots:
'@types/semver@7.5.8': {}
+ '@types/stats.js@0.17.3': {}
+
+ '@types/three@0.172.0':
+ dependencies:
+ '@tweenjs/tween.js': 23.1.3
+ '@types/stats.js': 0.17.3
+ '@types/webxr': 0.5.21
+ '@webgpu/types': 0.1.54
+ fflate: 0.8.2
+ meshoptimizer: 0.18.1
+
'@types/trusted-types@2.0.7': {}
'@types/unist@2.0.11': {}
@@ -9527,6 +9570,8 @@ snapshots:
'@types/web-bluetooth@0.0.20': {}
+ '@types/webxr@0.5.21': {}
+
'@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4))(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4)':
dependencies:
'@eslint-community/regexpp': 4.11.0
@@ -10295,6 +10340,8 @@ snapshots:
'@xtuc/long': 4.2.2
optional: true
+ '@webgpu/types@0.1.54': {}
+
'@xtuc/ieee754@1.2.0':
optional: true
@@ -11445,10 +11492,10 @@ snapshots:
dependencies:
eslint: 9.13.0(jiti@2.4.1)
- eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@15.7.0(eslint@9.13.0(jiti@2.4.1)))(eslint-plugin-promise@6.4.0(eslint@9.13.0(jiti@2.4.1)))(eslint@9.13.0(jiti@2.4.1)):
+ eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.13.0(jiti@2.4.1)))(eslint-plugin-n@15.7.0(eslint@9.13.0(jiti@2.4.1)))(eslint-plugin-promise@6.4.0(eslint@9.13.0(jiti@2.4.1)))(eslint@9.13.0(jiti@2.4.1)):
dependencies:
eslint: 9.13.0(jiti@2.4.1)
- eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.16.1(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4))(eslint@9.13.0(jiti@2.4.1))
+ eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.13.0(jiti@2.4.1))
eslint-plugin-n: 15.7.0(eslint@9.13.0(jiti@2.4.1))
eslint-plugin-promise: 6.4.0(eslint@9.13.0(jiti@2.4.1))
@@ -11474,7 +11521,7 @@ snapshots:
debug: 4.4.0(supports-color@9.4.0)
enhanced-resolve: 5.17.1
eslint: 9.13.0(jiti@2.4.1)
- eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.13.0(jiti@2.4.1))
+ eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.13.0(jiti@2.4.1)))(eslint@9.13.0(jiti@2.4.1))
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.16.1(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4))(eslint@9.13.0(jiti@2.4.1))
fast-glob: 3.3.2
get-tsconfig: 4.7.5
@@ -11486,7 +11533,7 @@ snapshots:
- eslint-import-resolver-webpack
- supports-color
- eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@9.13.0(jiti@2.4.1)):
+ eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@2.4.1))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.13.0(jiti@2.4.1)))(eslint@9.13.0(jiti@2.4.1)):
dependencies:
debug: 3.2.7
optionalDependencies:
@@ -12001,6 +12048,8 @@ snapshots:
fflate@0.4.8: {}
+ fflate@0.8.2: {}
+
file-entry-cache@6.0.1:
dependencies:
flat-cache: 3.2.0
@@ -13217,6 +13266,8 @@ snapshots:
merge2@1.4.1: {}
+ meshoptimizer@0.18.1: {}
+
micromark-core-commonmark@2.0.1:
dependencies:
decode-named-character-reference: 1.0.2
@@ -15318,6 +15369,8 @@ snapshots:
dependencies:
any-promise: 1.3.0
+ three@0.172.0: {}
+
tiny-invariant@1.3.3: {}
tinyexec@0.3.1: {}