Compare commits

...

1267 Commits

Author SHA1 Message Date
Jai A
ac9bcabd9c Add RPM to website 2024-10-02 13:33:47 -07:00
Geometrically
5bb961f16b Fix linux appimage (#2482) 2024-10-02 12:02:14 -07:00
Jai A
a46677832b Fix ads init 2024-09-29 17:57:16 -07:00
Geometrically
624abf0df4 Mute audio from playing in ads (#2471)
* Mute audio from playing in ads

* Update tauri version, get rid of custom

* bump wry

* fix more

* Fix lint
2024-09-29 17:51:51 -07:00
Erb3
e81a4ade97 chore: run lint (#2411)
* chore: run lint

* chore: fix lint
2024-09-28 01:28:13 +00:00
Geometrically
9708685506 Add GDPR export (#2461) 2024-09-27 13:33:28 -07:00
Geometrically
2713f0e610 Fix markdown images (#2452) 2024-09-25 12:29:51 -07:00
Prospector
3b8963fad0 Update ads.txt 2024-09-16 19:19:34 -07:00
Prospector
060682a1ac Add moderation button to user menu 2024-09-14 15:02:23 -07:00
Geometrically
95cd48571e Improve ad security, add CMP changes (#2399) 2024-09-13 20:33:51 -07:00
Jai A
3d619e6a98 Fix creator balance showing as zero 2024-09-12 15:52:37 -07:00
Geometrically
0221034b60 Fix file paths opening (#2382) 2024-09-10 01:36:56 -07:00
Jai A
9500384100 Update ads.txt 2024-09-10 00:32:14 -07:00
Geometrically
0b31f2eb41 0.8.5 fixes (#2369)
* 0.8.5 fixes

* Attempt to fix binary name

* bump version + add nsis installmode

* (temp) Use cargo version of tauri CLI

* fix cli build

* Fix build env var

* Bump tauri version

* remove old invalid installs

* Fix old shortcuts + NSIS build
2024-09-10 00:24:17 -07:00
Sasha Sorokin
b3a6393c91 Add TypeScript to app-frontend (#2364)
* Add TypeScript to app-frontend

Co-authored-by: Evan Song <52982404+ferothefox@users.noreply.github.com>

* Switch app-frontend to ESLint 9 & Nuxt config

* Fix ESLint issues after config change in app-frontend

---------

Co-authored-by: Evan Song <52982404+ferothefox@users.noreply.github.com>
2024-09-07 23:40:40 -07:00
Jai A
16c5a5a3a6 revert ads changes 2024-09-05 14:56:17 -07:00
Jai A
2e7db502a9 fix empty tag 2024-09-04 09:37:58 -07:00
Jai A
d29b71ec45 Fix app ads styling 2024-09-04 09:37:07 -07:00
Jai A
9cd0af914a fix slot not rendering 2024-09-04 09:31:39 -07:00
Jai A
4a575393f0 remove inmobi 2024-09-04 09:29:06 -07:00
Jai A
76c93c767d rev.iq support 2024-09-04 09:23:18 -07:00
Jai A
e69337a1fc update ads.txt with new dsps 2024-09-03 21:22:24 -07:00
Sasha Sorokin
50734af6cd Fix Game versions input not showing (#2358)
There is a bug in vue-multiselect library where it will default
`custom-label` property to raw properies object. Presumably this is a
bug that appeared because they ported library to Vue 3 and have not
considered that the signature for `default` prop's function has changed.

To work around this, we can provide custom `custom-label` property that
is just a function that returns the input itself. In other places, where
objects are passed, `label` property can be used. In this case the first
suggestion applies. DO NOT USE VUE-MULTISELECT WITOUT `LABEL` OR
`CUSTOM-LABEL` PROPS!
2024-09-03 16:44:21 +00:00
Norbiros
81b0922c93 chore(theseus): Updated Tauri links to v2 (#2345) 2024-09-01 21:57:13 +00:00
Norbiros
d4f8fff7af fix(theseus): Posthog scripts, focus app when opening deeplink, update linux-schema (#2351)
* fix(theseus): Focus app when opening deeplink (#2347)

* fix(theseus): Allow for posthog scripts

* chores(theseus): Update `linux-schema.json`
2024-09-01 21:56:53 +00:00
Geometrically
bd61f5d591 Fix auto updater, add failure message, fix modals (#2335)
* Fix auto updater, add failure message, fix modals

* Fix ads hiding, updater UI

* dummy version, fix gh actions cache

* fix release conf

* actual version bump

* Fix ads hiding sometimes

* Fix event state init

* fix remaining bugs

* Fix lint on linux

* Fix deep linking on Windows

* Fix ad links opening multiple times
2024-08-30 10:42:58 -07:00
Geometrically
016c3d779b Fix localhost windows opening (#2331) 2024-08-28 23:21:35 -07:00
Geometrically
acf26940d6 Implement ads in desktop app (#2318)
* Implement ads in desktop app

* Finish ads

* use git dep instead

* attempt to fix linux build (temp)

* bump version + lint

* comment more

* fix build

* try to fix linux build

* Fix crashing on windows

* Fix icons not showing

* Remove useless env vars

* Actual linux build fix

* Run fmt

* Fix scrolling

* fix clippy

* bump version + fix localhost

* rev linux build patch

* update version num

* update csp

* update csp

* update csp

* Switch to mousewheel event
2024-08-28 21:44:08 -07:00
Norbiros
4bafae881f fix: Correctly fix App Build workflow (#2322)
Signed-off-by: Norbiros <norbiros@protonmail.com>
Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
2024-08-28 10:18:54 -07:00
Prospector
8311451420 Update public-facing orgs page, componetize page headers (#2307)
* Update public-facing orgs page, componetize page headers

* Improve supported environments

* Move user page stats to top and remove details card

* Fix padding on orgs page when no navlinks

* fix lint

---------

Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
2024-08-28 10:12:25 -07:00
Norbiros
4b75cb8357 fix: App Build workflow (#2320)
Signed-off-by: Norbiros <norbiros@protonmail.com>
2024-08-28 14:25:53 +00:00
Geometrically
bf16d360af Switch to PostHog for app analytics (#2316) 2024-08-27 21:19:07 -07:00
Geometrically
38d95b4faf Fix deep linking / file open on mac (#2314)
* Fix deep linking / file open on mac

* Update deep linking

* fix build

* fix build again

* update workdir

* try again

* update conf path

* try old conf

* use in house tauri

* move away from tauri GH act

* add rpm support

* Fix updater key

* Fix signing key pass

* fix ubuntu deps

* Fix macos artifacts
2024-08-27 17:50:10 -07:00
Jai A
b06e7d3cf4 Fix again 2024-08-27 13:59:16 -07:00
Jai A
9e7ea82f94 remove workdir 2024-08-27 13:50:48 -07:00
Jai A
d74fc8a5d5 fix release conf path 2024-08-27 13:39:29 -07:00
Erb3
4a43b45a99 fix(web): lint #2306 (#2309) 2024-08-27 19:48:44 +00:00
Norbiros
d6a72fbfc4 feat(theseus): Update to Tauri v2 (#2178)
* feat(theseus): Initial migration to Tauri v2

* feat(theseus): Added a way to zoom / scale UI

* chore(theseus): Started cleaning up some plugins

* fix(theseus): Github Actions

* refactor(theseus): Reduced boilerplate & more work

* feat(theseus): Allow multiple app instances to be open at once (#995)

* fix(theseus): Lint & more

* fix(theseus): App Release github action

* fix(theseus): Open links in browser & macos builds

* fix(theseus): Rebase fixes

* fix(theseus): Updater & app release action

* fix(theseus): Fixed definitions in `build.rs`

* Fix MacOS deep linking, window decorations

* fix(theseus): Closing & maximizing app

* Fix macos build

* add back release conf

* acc fix build

* make updater for release builds only

* focus window on startup

---------

Co-authored-by: Jai A <jaiagr+gpg@pm.me>
Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
2024-08-27 12:49:36 -07:00
Prospector
396f737612 Fix version page layout 2024-08-26 18:19:53 -07:00
Prospector
2dd8d5a119 Sidebar refinements (#2306)
* Begin sidebar refinement, change back to left as default

* New filters proof of concept

* Hide if only one option

* Version filters

* Update changelog page

* Use new cosmetic variable for sidebar position

* Fix safari issue and change defaults to left filters, right sidebars

* Fix download modal on safari and firefox

* Add date published tooltip to versions page

* Improve selection consistency

* Fix lint and extract i18n

* Remove unnecessary observer options
2024-08-26 16:53:27 -07:00
Erb3
656c5b61cc Hotfix ci (#2296)
* ci: fix ci

* fix(eslint): remove code comment
2024-08-26 18:21:46 +00:00
Prospector
9fd0f6834a Fix missing a11y labels on project page buttons 2024-08-24 07:04:25 -07:00
Geometrically
58dac27186 Fix MRPACK export file include, add webview2 fail msg, fix window state (#2273)
* Fix MRPACK export file include, add webview2 fail msg, fix window state

* fix limt
2024-08-23 13:50:02 -05:00
Geometrically
c8befb6843 Fix forge again (#2268) 2024-08-22 23:52:38 -05:00
Jakob
fafd47fd90 Add align to img, p, and div & allow h1 to be centered (#2231)
* Add align to img, p, and div

Signed-off-by: Jakob <minenash@protonmail.com>

* fixed issue from porting pr

Signed-off-by: Jakob <minenash@protonmail.com>

* attempt to fix overflow of aligned imgs

Signed-off-by: Jakob <minenash@protonmail.com>

* Allow h1 to be centered

Signed-off-by: Jakob <minenash@protonmail.com>

* Excluded markdown-body from universal-card styling in components

* Fixed it in editor?

* undid previous attempt, did something simpler

---------

Signed-off-by: Jakob <minenash@protonmail.com>
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
2024-08-22 18:18:22 -07:00
Sasha Sorokin
e0990910f6 Remove shift caused by the Exclude filter button (#2265)
Previously, the Exclude button was removed from the the element tree
entirely until the group is hovered. Only when the group is hovered, the
button element was being switched to a proper display form. This has
caused the layout shift which was very visible when quickly moving
cursor over the filter options.

This commit makes it so that the Exclude button is always in its proper
display form (flex), however is transparent until the group is hovered.
The repeated transparency classes were removed from the icon as well to
prevent jarringly-looking double transition.
2024-08-22 18:17:59 -07:00
Geometrically
599f23c8aa Optimize stripe links (#2258) 2024-08-22 15:37:48 -05:00
Jai A
a0bd011b80 bump app version (v0.8.2) 2024-08-21 22:24:44 -07:00
Geometrically
157c27c20d Fix forge 1.15.2->1.16.5, Fabric 0.16.0+, and migration issues with Forge (#2232)
* Fix Forge versions, newer fabric, migration breakage

* lint

* fix lint
2024-08-21 21:24:35 -07:00
Mars
4d0407a3b3 Add tailwind to app-frontend (#2234) 2024-08-21 21:21:45 -07:00
Prospector
f73ed1213f Fix navbar modrinth plus link showing for subscribers 2024-08-21 19:58:04 -07:00
Prospector
daabe11d11 Fix nav for logged out users 2024-08-21 17:21:05 -07:00
Prospector
aaf125cfca Temporary nav revert 2024-08-21 14:08:56 -07:00
Jai A
161fc6bb68 remove .env 2024-08-21 10:05:12 -07:00
Jai A
1afed9f256 Fix version page not working 2024-08-21 09:53:56 -07:00
Prospector
e8d6c15fee Sort user tabs consisently 2024-08-21 09:31:34 -07:00
Prospector
8686b28c28 Fix collections button tooltip 2024-08-21 09:29:55 -07:00
Prospector
d68251ad4b Hide "Install with Modrinth App" for plugin-only projects 2024-08-21 09:17:37 -07:00
Prospector
a02b4ae08f Fix supported environments 2024-08-21 09:00:03 -07:00
Geometrically
9ed1dd714b Fix ads showing with Modrinth PLus (#2187) 2024-08-21 00:30:23 -07:00
Prospector
95dc6c66d9 remove hardcoded url 2024-08-20 23:58:11 -07:00
Geometrically
e91c76c10c Aditude integration (#2184)
* Aditude integration

* remove diff

* remove unused vars
2024-08-20 23:42:44 -07:00
Prospector
9deddbbe7c Improve environments compat description and fix accessibility issues project-wide 2024-08-20 23:34:53 -07:00
Geometrically
2d416d491c Project, Search, User redesign (#1281)
* New project page

* fix silly icon tailwind classes

* Start new versions page, add new ButtonStyled component

* Pagination and finish mocking up versions page functionality

* green download button

* hover animation

* New Modal, Avatar refactor, subpages in NavTabs

* lint

* Download modal

* New user page + fix lint

* fix ui lint

* Download animation fix

* Versions filter + finish project page

* Improve consistency of buttons on home page

* Fix ButtonStyled breaking

* Fix margin on version summary

* finish search, new modals, user + project page mobile

* fix gallery image pages

* New project header

* Fix gallery tab showing improperly

* Use auto direction + position for all popouts

* Preliminary user page

* test to see if this fixes login stuff

* remove extra slash

* Add version actions, move download button on versions page

* Listed -> public

* Shorten download modal selector height

* Fix user menu open direction

* Change breakpoint for header collapse

* Only underline title

* Tighten padding on stats a little

* New nav

* Make mobile breakpoint more consistent

* fix header breakpoint regression

* Add sign in button

* Fix edit icon color

* Fix margin at top of screen

* Fix user bios and ad width

* Fix user nav showing when there's only one type of project

* Fix plural projects on user page & extract i18n

* Remove ads on mobile for now

* Fix overflow menu showing hidden items

* NavTabs on mobile

* Fix navbar z index

* Search filter overhaul + negative filters

* fix no-max-height

* port version filters, fix following/collections, lint

* hide promos

* ui lint

* Disable modal background animation to reduce reported motion sickness

* Hide install with modrinth app button on mobile

---------

Signed-off-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
Co-authored-by: Prospector <prospectordev@gmail.com>
2024-08-20 23:03:16 -07:00
Geometrically
a19ce0458a Finalize 0.8.1 release (#2182)
* Finalize 0.8.1 release

* Remove console.logs

* Fix build

* add default to users

* update release conf

* fix again?

* fix build (again)

* actually fix build

* Update config dir

* Update config dir

* Fix dir again
2024-08-20 17:53:14 -07:00
Magnus Jensen
3fca24e6fd remove auto margin from square button svg (#2177) 2024-08-20 23:09:08 +00:00
Norbiros
6f956e0423 fix(theseus): Correctly open/highlight folders (#2180) 2024-08-20 23:08:26 +00:00
ToBinio
bb3ce9fbc6 fix: not being able to Follow/Save/Report projects (#2173)
* fix: not being able to Follow/Save/Report projects

* fix lint
2024-08-18 18:08:04 +00:00
Jai A
06f2340569 [hotfix] fix stripe elements not working 2024-08-17 18:10:18 -07:00
Jai A
510c29cc71 [hotfix] fix env var 2024-08-17 17:55:31 -07:00
Geometrically
807aa04807 Apple pay support, fix publish key (#2171)
* Apple pay support, fix publish key

* fix api url
2024-08-17 17:43:12 -07:00
Geometrically
c84e2e0537 Switch to RustLS (#2169)
* Switch to RustLS

* Revert scroll change causing autoscroll to break

* App build remove
2024-08-17 13:37:45 -07:00
Geometrically
910e219c0e 0.8.0 beta fixes (#2154)
* initial fixes

* 0.8.0 beta fixes

* run actions

* run fmt

* Fix windows build

* Add purge cache opt

* add must revalidate to project req

* lint + clippy

* fix processes, open folder

* Update migrator to use old launcher cache for perf

* fix empty dirs not moving

* fix lint + create natives dir if not exist

* fix large request batches

* finish

* Fix deep linking on mac

* fix comp err

* fix comp err (2)

---------

Signed-off-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
2024-08-16 23:20:11 -07:00
Geometrically
3a4843fb46 Billing / plus frontend (#2130)
* [wip] initial

* [wip] subscriptions/plus frontend

* [wip] finish payment flow

* Charges page

* finish most subscriptions work

* Finish

* update eslint

* Fix issues

* fix intl extract

* fix omorphia locale extract

* fix responsiveness

* fix lint
2024-08-15 23:21:30 -07:00
Jai A
1b3744baa2 update action to use prod branch 2024-08-15 20:32:45 -07:00
Norbiros
c7d8c8b104 fix: Correct discord link in README.md (#2149)
Signed-off-by: Norbiros <norbiros@protonmail.com>
2024-08-11 18:38:58 +00:00
Norbiros
a380d39865 feat(frontend): Package datapack as NeoForge mod (#2142) 2024-08-10 20:46:42 +00:00
Norbiros
34d3310eae fix(frontend): Correctly parse neoforge.mods.toml (#2139) 2024-08-10 20:45:49 +00:00
Jai A
f328eec26d use bearer auth instead 2024-07-31 12:59:09 -07:00
Jai A
7684a54678 fix purge gh action (again) 2024-07-31 12:55:34 -07:00
Jai A
51f3174609 fix purge gh action 2024-07-31 12:48:37 -07:00
Sasha Sorokin
4fcd518b0a Replace useAutoRef with Vue's toRef (#1332)
Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
2024-07-31 19:44:48 +00:00
Sasha Sorokin
1e0d7c7e28 Rewrite cosmetics and theme preferences (#1328)
- Cosmetics and theme preferences are now only stored in cookies instead
  of a combination of both cookies and state.

- The theme plugin now supports client hints. This allows the server
  to render a page using the client-preferred theme provided it supplies
  this information (any browser other than Firefox), helping to avoid an
  annoying flash while the page is hydrating.

- For the future, the theme plugin now supports additional light themes.
  Light theme preferences are currently not stored, but this can easily
  be fixed if the need arises.

- The previous workaround using the Nitro plugin has been removed. Its
  functionality is now handled by the Nuxt theme plugin with cleaner
  code.

- All pages and components now use the new plugins.

- Compared to the previous attempt, this commit has been improved to be
  more robust in cases where the theme cookie contains invalid values.

Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
2024-07-31 19:42:55 +00:00
KTrain
984da93a7b fix issue template descriptions (#1310)
* fix incorrect api urls

* fix descriptions on issue templates

* revert b51914e

---------

Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
2024-07-31 19:42:16 +00:00
Norbiros
c2c7eda799 fix(frontend): Correctly infer Neoforge version info (#1326)
Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
2024-07-31 19:41:52 +00:00
Geometrically
04b85630b9 Cache homepage projects in tags (#1336)
* Cache homepage projects in tags

* Update app page
2024-07-31 12:37:51 -07:00
Calum H.
ae4f3759c2 fix(knossos): Eslint config fix. (#1327)
* fix(knossos): Lint

* Fix lint issue.
2024-07-28 17:48:17 +00:00
Norbiros
a238dcc5e6 fix(theseus): Error modal (#1325)
* fix(theseus): Close button in ErrorModal

* fix(theseus): Overflow in ErrorModal
2024-07-27 19:00:02 +00:00
Jai A
57ba84107c Revert "Rewrite cosmetics and theme preferences (#1292)"
This reverts commit 8704d3acb3.
2024-07-25 17:38:37 -07:00
Norbiros
ca913cafbc fix: README fixes (#1321) 2024-07-25 15:49:22 +00:00
Jai A
7032421096 revert inlineStyles 2024-07-24 16:24:56 -07:00
Geometrically
06ac959496 Fix duped styles + disable tailwind preflight (#1320) 2024-07-24 23:14:43 +00:00
Geometrically
41c15f8c96 Fix styling issues caused by omorphia/tailwind (#1319) 2024-07-24 12:40:36 -07:00
Jai A
5cad3dfbae update rtb info 2024-07-24 11:32:38 -07:00
Geometrically
49a20a303a Migrate to SQLite for Internal Launcher Data (#1300)
* initial migration

* barebones profiles

* Finish profiles

* Add back file watcher

* UI support progress

* Finish most of cache

* Fix options page

* Fix forge, finish modrinth auth

* Accounts, process cache

* Run SQLX prepare

* Finish

* Run lint + actions

* Fix version to be compat with windows

* fix lint

* actually fix lint

* actually fix lint again
2024-07-24 18:03:19 +00:00
ToBinio
90f74427d9 chore: update tauri (#1307) 2024-07-20 17:15:02 +00:00
Sasha Sorokin
ba9dc6ce26 Fix auth redirect URL being double encoded (#1280)
Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
2024-07-20 00:24:35 +00:00
Norbiros
3a73994ad4 feat: Improve iframe parameter handling (#1299)
* fix(utils): Fix TypeScript issues in `parse.ts`

* feat: Improve iframe parameter handling (modrinth/knossos#362)
- Remove not whitelisted parameters instead of not rendering whole iframe
- Allowed `start` and `end` parameters in YouTube embeds
2024-07-20 00:24:29 +00:00
Norbiros
797e1f1f21 fix(theseus): Fixed multiple bugs (#1304)
* fix(theseus): Resolve log tab freezing entire app (#1127, #1237)
Switched to `vue-typed-virtual-list` due to freezing issues in WebKit caused by `vue-virtual-scroller`, which were difficult to resolve with the previous library.

* fix(theseus): Double opening of Socials Share link (#1136, #1074)

* fix(theseus): Proper symlinks resolution (#1236)
Ensures correct symlink resolution for specific mods, the mods directory, and the entire profile directory.

* fix(theseus): Correctly recognize NeoForge mods (#1215)

* fix(theseus): Corrected `Environments` and `Loaders` filters (#899)

* fix(theseus): Remove `_JAVA_OPTIONS` when testing JRE (#1171)

* fix(theseus): Fixed opening files using `show_in_folder`
Previously, opening a mod would display the contents of the JAR file instead of its location.

* fix(theseus): Hide `.DS_Store` files (#1274, #1002, #1174)

* fix(theseus): Corrected tooltip color

* fix(theseus): Fixed white mode issues (#1144, #1010)

* fix: Corrected `Slider` min and max value handling (#1008)

* fix: Fixed rebase problems

* fix: Fixed `:deep` usage warning

* chore: Updated eslint plugins to fix conflicts with Prettier
2024-07-20 00:20:12 +00:00
Norbiros
f1713647cf More monorepo migration fixes (#1257)
* fix: More monorepo migration fixes

* fix: Corrected icon sizes & other fixes

* fix(theseus): Change color of mod installation button

* fix(theseus): More Turborepo fixes

* chore: Prettier

---------

Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
2024-07-18 05:01:58 +00:00
Sasha Sorokin
8704d3acb3 Rewrite cosmetics and theme preferences (#1292)
- Cosmetics and theme preferences are now only stored in cookies instead
  of a combination of both cookies and state.

- The theme plugin now supports client hints. This allows the server
  to render a page using the client-preferred theme provided it supplies
  this information (any browser other than Firefox), helping to avoid an
  annoying flash while the page is hydrating.

- The previous workaround using the Nitro plugin has been removed. Its
  functionality is now handled by the Nuxt theme plugin with cleaner
  code.

- All pages and components now use the new plugins.
2024-07-13 19:20:43 +00:00
Sasha Sorokin
ce4250281f Refactor auth middleware (#1279)
- Switch to TypeScript
- Use early return
- Switch to regular for loop

Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
2024-07-11 19:02:00 +00:00
Sasha Sorokin
aecbc714c4 Update @vintl/nuxt to ^1.9.2 (#1286)
This fixes the issue where types for NuxtApp would be incorrect due to
the incorrect Plugin return type by @vintl/nuxt.
2024-07-11 18:58:18 +00:00
Evan Song
c20242cf1c Fix Cloudflare Pages build (#1285)
* fix(temp): remove box shadows from tailwind config

* fix(temp): "polyfill" global during build process

* refactor: use `import.meta` instead of deprecated `process`

* oops: replace `process.server` as well
2024-07-11 05:17:04 +00:00
Evan Song
04ba76aac8 Add NavTabs component (#1278)
* feat: NavTabs component

* fix: tw config using wrong variable

* fix: actually use the config now

* fix: revert testing
2024-07-10 03:33:50 +00:00
Geometrically
d1bc65c266 Monorepo missing features (#1273)
* fix tauri config

* fix package patch

* regen pnpm lock

* use new workflow

* New GH actions

* Update lockfile

* update scripts

* Fix build script

* Fix missing deps

* Fix assets eslint

* Update libraries lint

* Fix all lint configs

* update lockfile

* add fmt + clippy fails

* Separate App Tauri portion

* fix app features

* Fix lints

* install tauri cli

* update lockfile

* corepack, fix lints

* add store path

* fix unused import

* Fix tests

* Issue templates + port over tauri release

* fix actions

* fix before build command

* Add X86 target

* Update build matrix

* finalize actions

* make debug build smaller

* Use debug build to make cache smaller

* dummy commit

* change proj name

* update file name

* Use release builds for less space use

* Remove rust cache

* Readd for app build

* add merge queue trigger
2024-07-09 15:17:38 -07:00
Evan Song
dab284f339 Frontend Tailwind Fixes + Small Fixes (#1258)
* Fix Tailwind not targeting the src dir

* Merge tw fixes

* Fix footer logo alignment in mobile layout
2024-07-07 18:28:55 -07:00
Norbiros
df76d9a50a fix(theseus): Fixed scroll behavior bug (#1249) 2024-07-07 13:21:07 -07:00
Evan Song
abec2e48d4 Add TailwindCSS (#1252)
* Setup TailwindCSS

* Fully setup configuration

* Refactor some tailwind variables
2024-07-06 20:57:32 -07:00
Evan Song
0f2ddb452c Migrate to Turborepo (#1251) 2024-07-04 21:46:29 -07:00
Jai A
6fa1acc461 prepare for initial push 2024-07-03 19:17:28 -07:00
Jai A
9502639447 Finish adding omorphia 2024-07-03 19:12:20 -07:00
Jai A
ef4acb1b66 Merge remote-tracking branch 'omorphia/monorepo-migration' 2024-07-03 16:24:41 -07:00
Jai A
8cb72d306b Prepare for adding omorphia 2024-07-03 16:22:49 -07:00
Jai A
1ef8bf4690 Move files in preparation for monorepo migration 2024-07-03 16:21:07 -07:00
Jai A
22779c9dbc Finish theseus 2024-07-03 16:03:41 -07:00
Jai A
b52467b6d6 Merge remote-tracking branch 'theseus/monorepo-migration' 2024-07-03 13:26:44 -07:00
Jai A
d33a0cd589 Prepare for adding theseus 2024-07-03 13:25:49 -07:00
Jai A
a04cb54d86 Move files in preparation for monorepo migration 2024-07-03 13:23:21 -07:00
Jai A
10785f156f Add knossos 2024-07-03 13:05:14 -07:00
Jai A
4736fb8e32 Merge remote-tracking branch 'knossos/monorepo-migration' 2024-07-03 11:20:33 -07:00
Jai A
531e7ec73d prepare for knossos merge 2024-07-03 11:20:25 -07:00
Jai A
ff946b4f2f Move files in preparation for monorepo migration 2024-07-03 11:13:51 -07:00
Jai A
68f0e68343 Initial monorepo setup 2024-07-03 11:05:58 -07:00
Jai A
12a3520563 feat(nx): Generated CI workflow 2024-07-03 00:18:37 -07:00
Jai A
e84426a4f9 feat(nx): Added Nx Cloud token to your nx.json
To connect your workspace to Nx Cloud, push your repository
          to your git hosting provider and go to the following URL:

          https://cloud.nx.app/connect/BTN2S5oDFZ
2024-07-03 00:18:36 -07:00
Jai A
8b80934f77 Initial commit 2024-07-03 00:18:35 -07:00
Sasha Sorokin
b6618f81f8 Fix transition covering More download options btn (#1736)
This pushes bottom transition to a background level while setting it so
that any z-indexes are isolated within the hero to avoid any other
weirdness from happenning.
2024-07-02 22:05:27 -07:00
IlGrandeAnonimo
8140db32dd Changed app category to “Game” to enable GameMode on macOS Sonoma 14+ (#1242)
Some references from Apple's Website:
https://support.apple.com/en-en/105118
https://forums.developer.apple.com/forums/thread/739387
2024-06-28 18:13:05 -07:00
Prospector
13db5f4423 New fancy readme (#1234)
* New fancy readme

* Add ATLauncher, clarify OneSix format support, and finish sentence.

* remove below

* missing comma

* use percentage instead of pixels for image size

* copy paste error
2024-06-28 18:12:48 -07:00
Sasha Sorokin
bd49d6bd89 Inject native router only in reactive scopes (#1730) 2024-06-15 08:27:38 -04:00
Sasha Sorokin
61fd6f1741 Fix Turnstile unable to read the siteKey (#1728)
It seems that Nuxt Turnstile's way of setting the key in `runtimeConfig`
is broken and doesn't work properly, resulting in an error in runtime,
because it has to be set. This commit sets the key in `runtimeConfig`
manually instead, which seems to fix the issue.
2024-06-14 23:26:45 -04:00
Geometrically
05d45d9aab Fix page crash on orgs (#1727) 2024-06-14 15:43:09 -07:00
Geometrically
612eb64a83 fix broken navrow (#1725) 2024-06-14 15:29:35 -07:00
Sasha Sorokin
e0a9e62d84 Fix building for Cloudflare Nitro preset (#1726)
It seems that Rollup node-resolve module doesn't properly deal with
trailing slashes, causing it to thing that `string_decoder` is a
built-in Node.js dependency and attempt to import it from `unenv`, which
will obviously fail, because `string_decoder` is not, in fact, a Node.js
dependency, but an individual dependency of `readable-stream`.

This adds a small patch for `readable-stream@2.3.8` dependency, which
removes the leading slash, which seems to fix the builds.

This probably should be reported to relevant developers (Rollup
node-resolve plugin or Nitro?).
2024-06-14 15:26:12 -07:00
Sasha Sorokin
5db5f2251f Fix bad if condition on languages page (#1721) 2024-06-14 15:21:22 -07:00
Sasha Sorokin
34fd9d29c8 Update Nuxt to v3.12.1 (#1720)
* Update Nuxt dependencies

* Fix ref access in ChartDisplay

* Fix feature flags cookie options type error

* Specify type-only imports

* Fix shorthands access to tags outside of reactive scope

* Replace most useRoute calls with useRoute from vue-router

Nuxt's version of this composable is horrendously broken (nuxt/nuxt#21340)

* Import all svgs with ?component parameter

Fixes weird hydration issues + gives correct type
2024-06-14 13:23:02 -07:00
Sasha Sorokin
c6d8476963 Update pnpm to v9.3.0 (#1684) 2024-06-13 11:13:26 -07:00
Prospector
1d9fe0c03d Add new links card and feature flag system for incremental dev. (#1714)
* Add new links card and feature flag system for incremental dev.

* Switch to env variable for dev flags

* Add members card

* fix order of creators card

* Fix owner icon color and bring org owner to top of list

* lint + other fixes

* Revamp feature flag system, add flag config page

* Add button to flags page in dev mode

* fix env overrides

* make typescript happy with the refs
2024-06-11 19:46:07 -07:00
Jakob
5b2d36e976 Move extra loaders and change RP Resolutions to use OR (#1398)
* Put extra loaders at bottom of the list

* Added hidden loaders to a tag

* Made RP Resolutions use OR

* fixed lint
2024-06-11 19:45:48 -07:00
Prospector
547135f7d2 Fix lint 2024-05-20 21:58:58 -07:00
tobinio
15f1416f52 fix weird graph rendering 2024-05-17 13:57:20 -07:00
ItsNiceCraft
b2709aa816 docs(cmp-info): update last modified 2024-05-17 13:56:26 -07:00
ItsNiceCraft
9775d4e74d docs(cmp-info): update analytics section 2024-05-17 13:56:26 -07:00
intergrav
f5661af1f4 feat: third party packages on app page 2024-05-17 13:53:37 -07:00
Geometrically
7394fdc162 Fix auth timestamps (#1184)
* Fix auth timestamps

* Update error message, get valid timestamp on token refresh

* fix lint
2024-05-10 10:31:34 -07:00
Corey Shupe
a4f133eb46 Include crash reports and attempt to order by age. (#1178)
* Include crash reports and attempt to order by age.

* Do all sorting within rust.

* Remove excess debug.

* Remove new once_cell dep.

* Use EPOCH as fallback instead of now()

* Fix prettier lint warnings.
2024-05-09 10:29:19 -07:00
Corey Shupe
53007465cd UUID implements copy so borrows are unnecessary. (#1154) 2024-05-09 10:25:53 -07:00
Sasha Sorokin
e1a748016a Prompt users to provide debug info to support (#1172)
Many people contacting support forget to provide the debug information,
which significantly delays the resolution time because we're forced to
ask for this information anyway, as without it we cannot tell with
certainty the issue the person is facing.

Ideally in the future it would probably make sense to give a link to the
article describing the common issues for self-help, but there's no such
article yet. Perseus however is able to give suggestion for a few issues
given that it has the debug information.
2024-05-09 10:25:21 -07:00
Geometrically
611bec38b4 Pre-generate homepage (#1699)
* Pregenerate homepage:

* fix lint
2024-05-03 14:48:14 -07:00
Geometrically
89c7adfbcd Fix auth device token (#1152) 2024-04-25 11:45:52 -07:00
Sasha Sorokin
4de64d9a43 Further auth requests consistency fixes (#1149)
* Further auth requests consistency fixes

- Generated device UUIDs are lowercase, whereas they're uppercase in MCL
- TitleId in SISU authenticate is supposed to be a string (it is in MCL)
- UseModernGamertag in SISU authorize, on the other hand, is a boolean
- Clarified charset of our requests like MCL does
- Specified rng gen call to generate u8 to fix compile error (???)

* Enable deflate, gzip and brotli compression support
2024-04-25 11:45:32 -07:00
Geometrically
deedf4fc8b Switch to PKSE OAuth impl (#1146)
* Auth pkse

* add additional fields

* fix actions

* fix lint

* Purge broken auth + bump version
2024-04-24 21:27:25 -07:00
Geometrically
e9e99956ad Remove unsafe unwraps causing crashes (#1135)
* Remove unsafe unwraps causing crashes

* run fmt

* bump version
2024-04-23 15:03:03 -07:00
ToBinio
08b26f9d5d fix version page (#1121) 2024-04-23 12:09:02 -07:00
Geometrically
99ea06e22a Bump to 0.7.0 + Add sign-in error (#1133) 2024-04-23 12:05:28 -07:00
Geometrically
49cecf837b Fix java installs (#1123)
* Fix java installs

* Finish java installs
2024-04-18 20:28:52 -07:00
Prospector
5a166d2455 Change to non-interactive turnstile (#1678) 2024-04-18 16:36:26 -07:00
Prospector
6808d270a7 Fix project header shadow (#1682) 2024-04-18 16:36:04 -07:00
Prospector
9dc68611a1 Remove incorrect minimum withdraw amount from dashboard (#1683) 2024-04-18 16:35:37 -07:00
Geometrically
2877919639 Switch to official launcher auth (#1118)
* Switch to official launcher auth

* add debug info

* Fix build
2024-04-15 13:58:20 -07:00
MelanX
76447019c0 Fix client-overrides not getting extracted (#1120)
Closes #1112

According to the [docs](https://support.modrinth.com/en/articles/8802351-modrinth-modpack-format-mrpack#h_3ad1b429f0), it needs to be `client-overrides`, not `client_overrides`. This PR fixes this typo.
2024-04-14 10:10:13 -07:00
Prospector
e932f38160 Fix pats and sessions using invalid translation keys (#1681) 2024-04-12 15:14:55 -07:00
Jai A
9014835880 fix translation issue 2024-04-10 18:48:06 -07:00
Geometrically
00328d04cd Add messages to checklist (#1676) 2024-04-10 18:31:05 -07:00
Prospector
5b1850e161 Fix system theme not respecting preferred dark theme. (#1673) 2024-04-10 18:30:46 -07:00
Prospector
60727656c9 Fix project list layouts on mobile (#1671) 2024-04-10 18:30:27 -07:00
Prospector
372d021062 Refactor settings to use common lang keys for titles (#1674) 2024-04-10 18:30:13 -07:00
Prospector
9c4421bfe0 Fix theme preview width (#1670) 2024-04-09 19:56:32 -07:00
Prospector
5f85af76cd Fix missing categories and environments on orgs and following collection (#1667) 2024-04-09 11:20:41 -07:00
Prospector
4c2565826f Settings refactor and redesign (#1669)
* new settings work

* Polishing work on settings refactor

* Run intl:extract

* List view -> Rows view

* Remove current preferred system theme indicator to make the themes fit on one line

* Remove extra margin on top of navstack
2024-04-09 11:18:56 -07:00
ToBinio
3e7fd80824 chore: update dependencies (#1103)
* update trivial dependencies

* switch to sha1_smol

* update async_zip

* fix cli

* clippy & fmt

* js lints

* fix build for ci
2024-04-07 12:13:35 -07:00
KnifesmithCode
6699b4cb33 Use Tokio directly instead of Tauri in io.rs (#1087) 2024-04-03 14:44:16 -07:00
Jai A
ae2d83c8aa update dashboard to apiv3 2024-03-29 22:20:31 -07:00
Jai A
3b0216ca7e fix moderation dash 2024-03-29 22:09:45 -07:00
Jai A
1abfb175b5 remove unused import 2024-03-19 17:41:37 -07:00
Geometrically
a771695348 Remove mod inbox (#1661) 2024-03-19 17:36:09 -07:00
Sasha Sorokin
fe3e4edb04 Fix removing oneself from the team not working (#1657) 2024-03-10 13:03:35 -07:00
Geometrically
364a4faa75 Fix invalid auth error on project submit (#1655) 2024-03-09 16:31:57 -07:00
Jai A
331787fe43 fix update projects 2024-02-24 22:43:20 -07:00
Jai A
9484a7237c fix moderation route 2024-02-21 23:10:23 -07:00
Jai A
96063969ae fix auth 2024-02-21 16:23:34 -07:00
Geometrically
cb1c8be870 Moderation checklist (#1635)
* Moderation checklist

* Skip button

* Fix modpacks

* Fix modpack types not being sent

* Fixes

* remove explainer

* pass auth to analytics
2024-02-21 16:11:11 -07:00
Prospector
5ea71da181 Add .ts to commonMessages import in default.vue 2024-02-01 08:04:28 -08:00
Wyatt Verchere
3ff0ff238a adds credentials refresh save (#1030) 2024-01-30 19:31:08 -05:00
Prospector
dda469d10e Add translations for the default page layout (#1616)
* Convert default.vue to composition API

* Add translations to default page layout

* Generate index.json

* Fix sign up page

* Generate index.json

* Fix atUserLabel

* Fix composition API port

* Follow-up fixes for #1616 (#1618)

* Re-organize default layout messages

- Group some of the messages by their appearance (like banners)
  Grouping makes avoids having to think too much about the property
  names, keeps declarations clean, and also can be minified better,
  since variable names, unlike property names, can be easily mangled.

- Remove needless type specification in property name[^1]
  It's already clear from where the message is formatted what it does,
  and if you need clarification, you can Ctrl+hover and see the type in
  the key.

- Change some keys to conform to conventions
  We generally follow the pattern location > kind?. Things like 'label'
  are unnecessary, as everything is assumed to be label by default; the
  same applies to things like 'button', which are also often unnecessary
  as they're part of the location compound.

- Remove message for handle, which should not be translatable
  It's very unlikely user handle format changes between any of the
  locales.

[^1]: Common messages are pending restructuring that would fix this

* Fix navRoutes not being computed in default layout

* Fix untranslated Get Modrinth App buttons in default layout

* Make legal disclaimer in the default layout translatable

It wouldn't make much sense to leave it untranslated since it is meant
for the end users too. It is also so small that it's unlikely to be
mistranslated.

* Extract missed legal disclaimer message from default layout

* Make SEO strings in default layout translatable

---------

Co-authored-by: Sasha Sorokin <10401817+brawaru@users.noreply.github.com>
2024-01-29 18:55:54 -08:00
Prospector
9f6e033c53 Add review delay link to moderation page (#1619) 2024-01-29 18:55:37 -08:00
Prospector
15f44adf3b Add support and update footer links (#1615) 2024-01-28 13:15:51 -08:00
Mysterious_Dev
e9483cb242 Use omorphia icons for auth pages (#1614)
* Begin Work

* Use omorphia icons for sign-up page
2024-01-28 11:02:29 -08:00
Mysterious_Dev
5243d8bedf Use Composition API for settings index (#1613) 2024-01-28 11:02:03 -08:00
Prospector
ed731fd7a6 Fix org project list sorting and add loaders to tags (#1610) 2024-01-28 11:00:17 -08:00
Prospector
07f5422132 Fix donation links in project settings (#1609) 2024-01-28 10:59:36 -08:00
Mysterious_Dev
5aa1764848 Add translation keys for authorize page (#1594)
* Begin Work

* Error label

* WIP

* Finish button & add authorize label

* Redirect URL Label

* Reorganize

* Finish work

* Fix lint error

* camelCase !

* Normalization

* Apply suggestion from brawaru

* Fix forgotten
2024-01-28 10:59:08 -08:00
Mysterious_Dev
4973ee555b Add translation keys for Pats page (#1590)
* Begin Work

* More work

* Fix lint error

* More work on label

* Fix mistake

* Finish adding  delete pat modal keys

* More label and button

* More label keys

* Fix lint error

* Description key

* Finish page

* Forgot this

* Fix lint error

* Add to navstack

* Apply suggestions from brawaru

* Normalization

* Re-organize PATs page messages (#10)

- Group messages by their usage
- Fix spelling mistakes in some of the property names and keys
- Change some of the keys to conform to keying conventions
- Change variable name in token.expires-in message to inTime

* Regenrate index.json

---------

Co-authored-by: Sasha Sorokin <10401817+brawaru@users.noreply.github.com>
2024-01-28 10:58:23 -08:00
Jai A
4bfccba4c0 remove search from home 2024-01-27 10:11:14 -08:00
Daniel Roe
5ddad8ebc2 fix: import nuxt composables from #imports (#1438)
* fix: import nuxt composables from #imports

* fix: combine import 🙈

---------

Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
2024-01-27 10:02:41 -08:00
Mysterious_Dev
b5921897d6 Rework session keys for normalization (#1603) 2024-01-27 09:53:46 -08:00
Prospector
53a46b88b8 Regenerate en-US language file 2024-01-27 09:49:28 -08:00
AdamRaichu
da977ccace add title to leave project button (#1583) 2024-01-27 09:44:10 -08:00
Martins Olumide
7b9a2167ad Updated 2023 to 2024 (#1602)
Co-authored-by: devasMartins-Tmd <dev.as.martins3@gmail.com>
2024-01-27 09:38:23 -08:00
Mysterious_Dev
fc16771355 Fix: Projects in collections have less tags shown that they have (#1599)
* Fix: Projects in collections have less tags shown that they have

* Fix lint error
2024-01-27 09:37:35 -08:00
pseudonym-2669
3ef3fbfd0e Fix scoped typo (#1605) 2024-01-27 09:36:38 -08:00
Mysterious_Dev
415a0aaf75 Fix: Copy ID button doesn't work (#1598) 2024-01-27 09:36:16 -08:00
Emma Alexia
5a4a9b570e Fix discrepancy in Markdown rendering (#1595) 2024-01-27 09:35:04 -08:00
Misode
2df60d6387 Add download stat on organization pages (#1581)
* Add download stat to organization page

* Fix plural in projects stat
2024-01-27 09:32:11 -08:00
Mysterious_Dev
9c176013ab Add translation keys for sign-in page (#1551)
* Begin Work

* WIP

* WIP

* WIP

* Use error notification keys

* Finish & fix error

* Fix lint error

* Normalize message IDs (#9)

It makes sense to compose message IDs in order:
- Place (page, sub page / "modal")
- Thing
- (optionally) Relation to the thing

For example, a label for a password field would be:
- auth.sign-in (on sign-in subpage of auth)
- password (password field)
- label (is a label for the field)

Another example - button to sign in:
- auth.sign-in
- action (this is an action to do something)
- sign-in (action to sign in)

This helps keep the IDs closer to the actual structure of the page,
oftentimes smaller in the code, and easier to understand by translators.

---------

Co-authored-by: Sasha Sorokin <10401817+brawaru@users.noreply.github.com>
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
2024-01-27 09:31:25 -08:00
Mysterious_Dev
036d251e15 Add translation keys for sign-up page (#1505)
* Begin Work

* WIP

* WIP

* Finish adding notification keys

* WIP

* Finish work

* Fix lint error

* Re-organize Sign up page messages (#13)

- Re-order messages by their appearance in template
- Change the keys to conform to conventions
- Inline password mismatch notification message

---------

Co-authored-by: Sasha Sorokin <10401817+brawaru@users.noreply.github.com>
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
2024-01-27 09:30:09 -08:00
Mysterious_Dev
925060689a Add translation keys for verify email page (#1503)
* Begin Work

* Begin Work

* WIP

* Finish Work

* Fix lint error

* Re-organize keys on E-mail verification page (#12)

- Group messages by the step
- Use simpler keys for message properties as they're not public
- Change message keys to conform to conventions

---------

Co-authored-by: Sasha Sorokin <10401817+brawaru@users.noreply.github.com>
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
2024-01-27 09:28:52 -08:00
Mysterious_Dev
f0631d734e Add translation keys for reset password page (#1502)
* Begin Work

* Add email sent notification keys

* Finish adding notification keys

* Fix lint error

* Finish work (I think)

* Remove password label (generic)

* Add password label key

* Re-organize Reset password page messages (#11)

- Group messages by their use
- Change some of the keys for clarity
- Change some keys to conform to conventions

---------

Co-authored-by: Sasha Sorokin <10401817+brawaru@users.noreply.github.com>
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
2024-01-27 09:27:34 -08:00
Mysterious_Dev
52b299315d Add translation keys for collections (#1496)
* Begin Work

* Add more common messages

* Work on modal

* Add more keys

* Add keys for icon buttons

* Add more keys

* Handle error keys

* Add more keys

* Add more keys

* Edit fields keys

* Finish (almost)

* Finish work for collection page

* Dashboard Nav stack & Format

* WIP

* Move some messages to common

* Finish work

* Format

* Reorganization

* Fix some mistake

* add common collections label

* Add collections label key to default layout

* Make title and description reactive (#8)

---------

Co-authored-by: Sasha Sorokin <10401817+brawaru@users.noreply.github.com>
2024-01-27 09:24:19 -08:00
Prospector
0195e94aa7 Add notification pagination (#1584)
* Add notification pagination

* Add grouping to dashboard home
2024-01-27 09:23:57 -08:00
Mysterious_Dev
75f0b2b82c Add translation keys for welcome page (#1499)
* Begin Work

* WIP

* Add long title key

* Finish work (for now)

* Fix lint error

* Add continue button key

* Make continue button key generic
2024-01-18 09:05:54 -08:00
June
f26f283c1f Added padding to account for .changelog-bar offset (#1354)
* Added padding to account for .changelog-bar offset

* Applied prettier code formatting

* Just update bottom padding

---------

Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
2024-01-18 09:02:55 -08:00
Mysterious_Dev
7c387b2aee Add autocomplete attribute for 2fa input (#1450)
* Add input mode attribute for 2fa input

* Add autocomplete property

* Remove inputmode property
2024-01-18 08:58:28 -08:00
Mysterious_Dev
071ecb284e Add apple touch icon to head (#1453) 2024-01-18 08:57:20 -08:00
Mysterious_Dev
03242942c2 Fix: Minor grammar mistake in project Moderation page (#1487)
* Fix: Minor grammar mistake in project Moderation page

* Fin lint error
2024-01-18 08:57:05 -08:00
Mysterious_Dev
a476927595 Add enter shortcut for 2FA & email management (#1504)
* Add event for email changing

* Add event for 2fa setup & removal

* Fix lint error

* Update pages/settings/account.vue

Co-authored-by: Emma Alexia <wafflecoffee7@gmail.com>

---------

Co-authored-by: Emma Alexia <wafflecoffee7@gmail.com>
2024-01-18 08:56:43 -08:00
Mysterious_Dev
ec6e1704be Fix: Project banners aren't showing in collections (#1562)
* Add featured image

* Use find method

* Fix lint error

* ...

* Fix

* Fix lint error
2024-01-18 08:56:14 -08:00
Mysterious_Dev
d2f189607e Fix logic for featured image (#1580) 2024-01-18 08:55:52 -08:00
Mysterious_Dev
c13777e68d Fix a mistake for "updated tooltip" on collection page (#1493) 2024-01-18 08:55:23 -08:00
Carter
2fb63dcfb1 Fix graph state & data handling (#1578)
* Rip out external color state

* Fix styling errors

* Allow charts to display personal/entity perspectives on routes

* Refactor analytics data processing and selection

* Include custom color icon
2024-01-12 17:51:03 -05:00
Carter
0adb7685f6 Refactor scopes to use Intl for labels and descriptions (#1570)
* Refactor scope labels for applications and pats

* move scopes to composables

* Refactor pages to use intl

* Fix merge error

* Extract messages
2024-01-12 15:55:51 -05:00
Geometrically
1cbe99a0d8 Allow users to override the org owner (#1577) 2024-01-12 15:29:50 -05:00
Prospector
fa83da6085 Fix staging banner (#1573)
* Revert "Add API indicator and staging banner (#1563)"

This reverts commit a75de51198.

* Revert "Revert "Add API indicator and staging banner (#1563)""

This reverts commit b4d3b56b33ca4080fa3bc1b7a2dde7b21ba18e51.

* Fix banner to only show on staging

---------

Co-authored-by: Jai A <jaiagr+gpg@pm.me>
2024-01-12 11:01:15 -05:00
Carter
1392c16f12 Refactor scope labels for applications and pats (#1560) 2024-01-11 19:13:03 -05:00
Emma Alexia
d6393653e1 Add new section to the rules about bypassing Mojang restrictions (#1561) 2024-01-11 19:12:50 -05:00
Prospector
a75de51198 Add API indicator and staging banner (#1563)
* Change text of Modrinth logo depending on the API url being used

* Staging banner
2024-01-11 19:12:25 -05:00
Prospector
a21869ec9b Add filters for transfer history page (#1564) 2024-01-11 19:11:58 -05:00
Prospector
f534e4ee37 Fix project page menu opening off-screen with right sidebar (#1565) 2024-01-11 19:11:39 -05:00
Carter
9add661a5b Adjust colors to be controlled from outside chart component (#1568)
* Adjust colors to be controlled from outside chart component

* Access colors from source of truth

* Change access method to omit projects from params

* Just omit projects from query
2024-01-11 19:11:26 -05:00
Carter
81948a5c29 Creator update frontend hotfixes (#1538)
* Fix donation link submission

* Refactor Charts to fit edgecase bugs in design

* edge and mobile bug fixes

* remove dead code

* fix width on mobile

* Update omorphia version to 0.7.3

* Refactor legend item styling in ChartDisplay.vue

* Update package dependencies
2024-01-10 15:50:21 -05:00
Geometrically
5924154a62 Fix org ownership (#1553) 2024-01-10 15:13:37 -05:00
Carter
354bfe58cd Add withdrawal amount validation and display details (#1549)
* Add withdrawal amount validation and display transfer details

* Fixed amt should be consistent

* Empty amount rather than clamp

* Only mutate amount if fixed or 1 value

* Add badge to giftcard withdraw methods
2024-01-10 15:13:08 -05:00
Geometrically
c5974a8575 Fix unfollowing (#1552) 2024-01-10 13:43:28 -05:00
Prospector
c0275addb0 Add report reopening and message for reopening a report (#1550) 2024-01-10 13:33:57 -05:00
Prospector
c85baf7fd0 Fix versions page bug: v-if instead of v-else-if (#1546) 2024-01-09 16:33:10 -05:00
Prospector
39e5778bd0 Country -> region (#1548) 2024-01-09 16:32:59 -05:00
Prospector
a3b77bb37f Add private mod notes and message deletion (#1494)
* Really simply private messages impl

* Make private notes better

* Add thread message deletion

* Lint
2024-01-09 16:32:38 -05:00
Prospector
660cf0c1e4 Remove the ability to replace uploaded primary versions (#1542) 2024-01-09 15:43:38 -05:00
Carter
11020c4545 Update package.json version to 0.7.3 2024-01-08 10:15:10 -08:00
Carter
e93bf02e3a Add wrap to editor 2024-01-08 10:14:54 -08:00
Geometrically
a629d7f048 Fix override perms orgs (#1536)
* Fix override perms orgs

* remove useless card?
2024-01-07 21:36:32 -05:00
Carter
683b0f5c48 Add safety and state refresh when adding to collection (#1535) 2024-01-07 19:58:30 -05:00
Geometrically
42a80a41ca Fix collection page (#1534)
* Fix collection page

* remove wrangler.toml
2024-01-07 19:27:30 -05:00
Carter
9dcb90a9cf Creator update hotfixes (#1531)
* Put image upload on v3

* Fix space encoding in search

* Add safety to any iterables
2024-01-07 17:28:51 -05:00
Mysterious_Dev
1af0aa3f57 Fix: Wrong follower count on collections (#1528) 2024-01-07 14:32:40 -05:00
Sasha Sorokin
35c9338220 Fix no collections message on user page (#1501) 2024-01-07 14:32:05 -05:00
Mysterious_Dev
2e8fa0f6c5 Fix: Add collections to mobile nav instead of follow (broken link) (#1527)
* Add collections in nav instead of follow (broken link)

* Fix lint error
2024-01-07 14:31:39 -05:00
Geometrically
931aeda17f More site fixes (#1530) 2024-01-07 14:31:22 -05:00
Carter
a037d24b0f Creator update hotfixes
* Responsive avatar sizing fix

* random mounting bug

* User owned project list correctly filtered

* fix accepted member count

* Leave team fix

* Remove debug

* Remove debug

* hide view button if collections view
2024-01-07 01:30:23 -08:00
Geometrically
1fa556cd00 Fix moderation + oauth (#1515) 2024-01-07 00:17:22 -05:00
Geometrically
82e9ad8a20 Org fixes (#1513) 2024-01-06 23:48:15 -05:00
Carter
d893765b24 New organizations (#1488)
* [WIP] Transfer organizations to own branch

* push progress

* Setup organizations page

* Add organizations grid to user profile

* Remove debug

* Add error handling for failed organization fetch

* Refactor organization page and settings

* Restructure to composition setup api

* checklist completion

* Apply suggestions from code review

Co-authored-by: Emma Alexia <emma@modrinth.com>

* Update pages/[type]/[id]/settings/index.vue

Co-authored-by: Emma Alexia <emma@modrinth.com>

* Update pages/[type]/[id]/settings/index.vue

Co-authored-by: Emma Alexia <emma@modrinth.com>

* Update pages/[type]/[id]/settings/index.vue

Co-authored-by: Emma Alexia <emma@modrinth.com>

* Update pages/[type]/[id]/settings/index.vue

Co-authored-by: Emma Alexia <emma@modrinth.com>

* Clean up org state management

* Refactor useClientTry to simplify code

* Remove unused code and update dependencies

* Refactor bulkEditLinks event handler

* Refactor organization management functions

* Update heading from "Creators" to "Members"

* Refactor team member invitation

* Refactor member management functions

* Implement validation on clientside for org names

* Name sanitization for fun characters

* Update onInviteTeamMember function parameters

* Remove name

* sidebar

* random rendering issue

* Conform to org removal

* Org no projects conditional

* Update organization links in dashboard

* Update Cards to universal-cards

* Refactor gallery upload permissions

* Refactor to sidebar pattern

* Update button classes in gallery and versions components

* Finish (most)

* almost finish

* Finish orgs :D

* Fix lint

* orgs fixes

* fix most things

* project settings

* convert grid to cards

* clean up unused test class

* Settings -> Manage

* add org view to org management

* Fix prop mounting issue

* fix analytics grid layout overflow

* fix multiselect breaking layout

* Refactor chart selection logic in ChartDisplay.vue

* Add transfer modal

---------

Co-authored-by: Jai A <jaiagr+gpg@pm.me>
Co-authored-by: Emma Alexia <emma@modrinth.com>
2024-01-06 18:09:26 -05:00
Wyatt Verchere
0d3f007dd4 Config transfer (#951)
* fixed config dir issue

* jackson's sync write
2024-01-05 14:00:48 -05:00
Carter
9702dae19d Switch from stdout log to latest log MOD-595 (#964)
* Switch from stdout log to latest log

* remove std capture

* Remove unused functions
2024-01-05 14:00:08 -05:00
Mysterious_Dev
1108b0264e Add missing extracted keys (#1498) 2024-01-03 11:42:44 -05:00
Carter
4f060579ca bump 0.7.2 2023-12-28 16:49:17 -08:00
Carter
1940c6e1ba Fix editor state issues (#173)
* Add MarkdownEditor component with default value and disabled option

* Add editorThemeCompartment for customizing editor theme
2023-12-28 16:48:10 -08:00
chaos
f6a697780b Remove lwjgl debugging arg (#959) 2023-12-28 17:00:27 -05:00
Mysterious_Dev
e754f6c234 Fix: "Set Password" button on profile page is not active (#1486)
* Fix disabled button for "Add password"

* Fix lint error

---------

Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
2023-12-27 13:28:29 -05:00
Xander
d19dbbfe7e Auto-focus 2FA input box (#1482) 2023-12-27 13:28:12 -05:00
Geometrically
3a735ea0ce New collections (#1484)
* [WIP] Transfer collections to own branch

* fixes

* rewrite js

* Add visibility dropdown to collection edit modal

* Add visibility badges to collection page

* Update visibility options and icons in collection
page

* Add delete functionality to collection modal

* Collection project deletion flow

* remove "visit project" button on overflow

* Remove via checklist not individually

* Update manage title in settings.vue

* remove collections from settings page

* hook up collections page

* collection header to look like project header

* Refactor layout.scss and collections.vue

* fix omorphia

* Update

* Conform collections to old design structure

* Update navigation links and remove unused code

* Add collection view and collections to user page

* Refactor user project display logic

* Add collection creation functionality and update profile labels

* Add function calls to initialize user collections

* Refactor collection page layout and functionality

* Add initialization of user collections in create function

* Fix styling issue in collection page

* Update collection status to private

* remove name

* Refactor card component and update grid layout

* Finish collections

---------

Co-authored-by: Carter <safe@fea.st>
2023-12-27 13:27:50 -05:00
Geometrically
e319d19a54 New analytics (#1483)
* [WIP] Transfer analytics to own branch

* code style changes

* Refactor country name conversion

* Clean up api and ssr for settings page

* refactor analytics into reusables

* Refactor chart tooltip and reset functionality

* Update dayjs import and formatTimestamp function

* Fix bug in login functionality

* Abstract data fetching

* Refactor analytics data formatting

* Refactor useFetchAllAnalytics function signature

* Refactor analytics processing functions

* Fix chart data in ChartDisplay.vue

* Refactor analytics pages

* Refactor delete labrinth.ts test types

* Fix import statement for dayjs and update usage of
unix function

* Fix dropdown select in ChartDisplay.vue and add
Analytics link in creations.vue

* Update chart colors in ChartDisplay.vue and
analytics.js

* Update defaultRanges in ChartDisplay.vue

* Add colors to chart

* Update legend position in ChartDisplay.vue

* Refactor color conversion functions in
analytics.js

* Bug fixes

* Use softer colors

* Import dayjs unix module for analytics.js

* Refactor chart tooltip generation

* Fix calculation of total value in generateTooltip
function

* Fix button-base styling in ChartDisplay.vue

* Adopt intl standard rather than iso-3166-1

* Add support for potential flags

* Analytics rebased

* fix cf pages

* now?

* try now

* now?

* Fix this time

* address rev

* Finish analytics

* fix api url

---------

Co-authored-by: Carter <safe@fea.st>
2023-12-26 14:46:32 -05:00
Jakob
5f075e4936 Fixed Password matching msg showing when confirm is empty (#1400)
* Fixed Password matching msg showing when confirm is empty

* ran lint and == → ===
2023-12-21 20:09:48 -05:00
Brady
d6ba3f3adf Add NeoForge to infer (#1443)
* Add NeoForge inferring

* Add check for if below 1.20.2
2023-12-05 19:57:03 -07:00
Sasha Sorokin
b453e2cf1a Fallback to project type message on unknown types (#1470)
This commit adds a fallback to getProjectTypeMessage function to return
a generic project type whenever it encounters an unknown project type,
ensuring there are no errors when the new project types are added.
2023-12-05 18:21:14 -07:00
Geometrically
2d14e5682d New payouts system (#1456)
* initial

* finish withdraw page

* Finish frontend

* Fix UI a bit

* tester fixes
2023-12-05 12:13:27 -07:00
Carter
1f58aebb2b Oauth 2 Flow UI (#1440)
* adjust existing sign-in flow

* test fetching of oauth client

* allow for apiversion override

* getAuthUrl refactor

* Adjust auth to accept complex url redirections

* introduce scopes

* accept oauth flow

* rename login/oauth to authorize

* conform to labrinth spec and oauth2 spec

* use cute icons for scope items

* applications pages

* Modal for copy client secret on creation

* rip out old state

* add authorizations

* add flow error state and implement feedback

* implement error notifications on error

* Client secret modal flow aligned with PAT copy

* Authorized scopes now aligned with Authorize screen

* Fix spelling and capitalization

* change redirect uris to include the input field

* refactor 2fa flow to be more stable

* visual adjustments for authorizations

* Fix empty field submission bug

* Add file upload for application icon

* Change shape of editing/create application

* replace icon with Avatar component

* Refactor authorization card styling

* UI feedback

* clean up spacing, styling

* Create a "Developer" section of user settings

* Fix spacing and scope access

* app description and url implementations

* clean up imports

* Update authorization endpoint

* Update placeholder URL in applications.vue

* Remove app information from authorization page

* Remove max scopes from application settings

* Fix import statement and update label styles

* Replace useless headers

* Update pages/auth/authorize.vue

Co-authored-by: Calum H. <contact@mineblock11.dev>

* Update pages/auth/authorize.vue

Co-authored-by: Calum H. <contact@mineblock11.dev>

* Finish PR

---------

Co-authored-by: Calum H. <contact@mineblock11.dev>
Co-authored-by: Jai A <jaiagr+gpg@pm.me>
2023-12-04 20:26:50 -07:00
Sasha Sorokin
6d70ced93a Add Omorphia locale files loading (#1447)
Implements loading of all locale files shipped with Omorphia package by
globbing and registering them during the `vintl:extendOptions` hook.

Also updated VIntl for Nuxt to ensure those files are properly loaded.
Previous version of VIntl for Nuxt had a somewhat broken module ID
tracking, preventing Omorphia locale files to be properly transformed
during the build; at least on systems like Windows, don't know about
*nix. The tracking approach was replaced in 1.8.0, and it seems to be
working now.
2023-12-04 19:48:12 -07:00
Carter
accc53c5dd Implement Editor MOD-349 (#1427)
* Implement Editor

* content oveflow fix for description

* Description card fix

* make everything fix in report modal

* seperate report page with image upload

* Bump Omorphia

* Update pages/report.vue

Co-authored-by: Emma Alexia <emma@modrinth.com>

* suggested changes and cleanup

* fix button spacing

* clean up and replace report implementations

* corepack fix

* Remove ModalReport

* image uploads for conversations

* image uploading context for versions and threads

* adjust information about thread messages

* Update pages/report.vue

Co-authored-by: Emma Alexia <emma@modrinth.com>

* Adjust image upload imports

* fix api changes for useImageUpload

* correct report redirection uri

* report button feedback

* omorphia ver bump

---------

Co-authored-by: Emma Alexia <emma@modrinth.com>
2023-11-29 11:56:17 -07:00
Emma Alexia
e4cb8b71dd Fix version editing on modpacks returning a "too large" error (#1455) 2023-11-20 18:57:06 -05:00
Carter
f6eff090e7 Accept image pasting functionality (#151)
* Accept image pasting functionality

* Bump to 0.7.1

* Default alt text should be like github

* sync modelValue changes to codemirror state

* Refactor image uploading in paste

* Fix error handling in image upload
2023-11-18 21:55:34 -07:00
Emma Alexia
61a2c362b9 Fix grammatical issue in privacy policy (#1449)
* Fix grammatical issue in privacy policy

* Update privacy.vue
2023-11-17 15:46:01 -07:00
Prospector
cbcee037a7 Merge pull request #147 from modrinth/redesign/new-promo-style
Port Promotion to redesign style
2023-11-15 17:14:28 -08:00
Prospector
de2e4a9c7f Merge branch 'master' into redesign/new-promo-style 2023-11-15 17:14:20 -08:00
Prospector
0ba0a5bcd8 Merge pull request #148 from modrinth/feature/overflow-menu-links
Add link support to overflow menus
2023-11-15 17:11:24 -08:00
Prospector
70cc409402 docs 2023-11-15 17:10:10 -08:00
Prospector
160ca610ae Bump version 2023-11-15 17:09:06 -08:00
Prospector
2f1aa95f4c Allow links in overflow menus 2023-11-15 17:08:55 -08:00
Carter
3eead128a6 Image-validation (#144)
* Add spoiler tag functionality to CodeMirror

* Refactor image insertion logic in
MarkdownEditor.vue

* Refactor modal state reset functions in
MarkdownEditor.vue
2023-11-15 12:36:34 -07:00
Prospector
4c22a73ff3 Decrease ad border opacity 2023-11-15 09:49:38 -08:00
Prospector
a78f58de92 Merge branch 'master' into redesign/new-promo-style 2023-11-15 09:38:02 -08:00
Prospector
fcda48903b Merge pull request #146 from modrinth/fix/popout-pointer-events
Fix popout menu pointer events
2023-11-15 09:25:48 -08:00
Prospector
3f9805ac56 Fix bump version 2023-11-15 09:23:31 -08:00
Prospector
2131fed0bb Update promo styling 2023-11-15 09:22:02 -08:00
Prospector
baa5d2fcac Bump version 2023-11-15 08:18:34 -08:00
Prospector
7cf9b76eb5 Fix popout menu pointer events 2023-11-15 08:17:27 -08:00
Mysterious_Dev
200648275e Convert EnvironmentIndicator component to Composition API (#125) 2023-11-14 17:35:41 -05:00
Emma Alexia
a7584d62c7 Update omorphia to 0.6.7 (#1446)
* Update omorphia to 0.6.7

* shouldn't've been changed
2023-11-13 18:30:06 -07:00
Geometrically
74e6caf633 Fix use of unscoped CSS (#140) 2023-11-13 20:16:39 -05:00
Geometrically
f1f531cbfa Fix links (#1445) 2023-11-13 16:16:43 -07:00
BD103
b5a275ad07 fix: remove sitemap property from robots.txt (#1441) 2023-11-13 13:56:55 -07:00
Sasha Sorokin
5051ad91ff Fix ambiguous default export (#113)
Currently Omorphia's index file has both the default and named exports.
While this is totally supported by native ESM, it's pretty hard for
transpilers to process and may lead to situations where named exports
cannot be imported directly, requiring destructuring on the default
import. For this and just consistency reasons, you'd usually avoid
mixing default and named exports.

This commit removes the default export, making it just an another named
export called `plugin`.

BREAKING CHANGE: plugin is now exported using `plugin` export, rather
than the default export.
2023-11-13 13:36:07 -07:00
Mysterious_Dev
06d6cb6d19 Convert CopyCode component to Composition API (#124)
* Convert CopyCode component to Composition API

* ^^/
2023-11-13 13:08:28 -07:00
Mysterious_Dev
92116273b0 Convert Checkbox component to Composition API (#126)
* Convert Checkbox component to Composition API

* Apply suggestions from brawaru

* Fix lint error

* Apply suggestions from brawaru
2023-11-13 13:06:42 -07:00
Mysterious_Dev
6169ff99a2 Convert Pagination component to Composition API (#127)
* Convert Pagination component to Composition API

* Apply suggestions by brawaru

* Fix lint error

* Apply suggestions from brawaru
2023-11-13 13:06:06 -07:00
Mysterious_Dev
67f77d027a Use Typescript for Card component (#128)
* Use Typescript for Card component

* Update Card.vue
2023-11-13 13:05:43 -07:00
Mysterious_Dev
39e1a803a1 Use TypeScript for Promotion component (#131)
* Use TypeScript for Promotion component

* Apply suggestion from brawaru
2023-11-13 13:05:01 -07:00
Mysterious_Dev
ba159e1a3e Add translation keys for Environment Indicator component (#136)
* Begin Work

* Finish work
2023-11-13 13:04:35 -07:00
Mysterious_Dev
a60b77121a Add translation keys for Badge Component & improve documentation (#137)
* Begin Work

* Ordering

* Add all keys to JSON file

* Add accepted, approved, archived & closed keys to vue component

* Add draft, failed, listed keys to vue component

* Format (fix lint) & improve documentation

* Finish the work
2023-11-13 13:04:14 -07:00
Erlend
810f0104be Fix small typo on Avatar doc (#138) 2023-11-13 13:03:42 -07:00
Geometrically
07489fb405 Revert #87 (#139) 2023-11-13 12:58:33 -07:00
Sasha Sorokin
82f0bdfc18 Add handling for locale files parsing errors (#1408) 2023-11-12 11:49:05 -05:00
Mysterious_Dev
66154b30c1 Add Prefers Reduced Motion support for most components (#133) 2023-11-11 17:22:01 -05:00
ToBinio
bf5d391d53 fix SearchFilter.vue (#123) 2023-11-11 15:12:24 -07:00
Sasha Sorokin
591ce0894e Add translations support (#116) 2023-11-11 17:03:58 -05:00
ToBinio
1c18563dfb update VitePress (#117) 2023-11-11 16:48:52 -05:00
ToBinio
b60e781767 convert slider to typescript (#108) 2023-11-11 16:39:25 -05:00
Sasha Sorokin
ca54544b82 Fix declaration types for icons (#114) 2023-11-11 16:32:56 -05:00
Sasha Sorokin
9c3ff71ce4 Make Omorphia an ESM-only module (#115) 2023-11-11 16:22:00 -05:00
Mysterious_Dev
fd82ec7659 Fix page for modal documentation (#132) 2023-11-11 16:09:19 -05:00
Emma Alexia
23ccaacdee Fix outdated moderation warning (#1430) 2023-10-30 21:28:48 -04:00
Carter
39a4297168 Requested Changes for Editor Knossos Implementation (#129)
* placeholder

* max length & placeholder

* Accept editor comment conflict

* integrate requested features

* null check for ref

* Change prompt for image upload

* change filter for proper input blocking

* Add spoiler button

* change url of helper link

* shallow resource link style

* resource link inherit site style

* detach preview styling from markdown-body style

* remove sizing dependance on global styles

* Bump 0.6.5
2023-10-30 16:59:43 -07:00
Carter
544111846c Tweaks for Knossos Integration (#122)
* placeholder

* max length & placeholder

* remove default placeholder

* remove scoped css

* allow for throwing in the upload process

* explicit import of info

* fix aggressive card input selection
2023-10-27 17:20:13 -07:00
Carter
79bdea0441 MOD-349 Contextual Uploads for MD Editor (#119)
* Migrate DropArea to composition

* remove hardcoded button styling

* let markdown editor call for image upload

* allow for local testing in the docs

* validate url on set

* add chips to modal with correct defaults

* update docs to show example url doesn't load

* Bump version 0.6.4
2023-10-26 14:34:15 -07:00
Adrian O.V
c056c4e79e Improved graphs (#120)
* Complete chart overhaul

* Update package.json

* Update pnpm-lock.yaml

* run lint

* whoops

* Update pnpm-lock.yaml

* Update analytics.md

* Try again?

* Update Chart.vue

* Added Compact/Spark charts

* Added number formatting and cleanup

* Touch ups

* improve default colors

* removed unnecessary tooltip
2023-10-26 11:39:26 -07:00
Mysterious_Dev
19828e9070 Update to omorphia 0.6.2 (#1418) 2023-10-25 13:44:29 -07:00
Jakob
8231c736ca Fixed aria-label (#1403) 2023-10-25 13:42:33 -07:00
Basil
85f639b1f0 Fixed report icons on version page when logged out (#1416) (#1417) 2023-10-25 13:41:29 -07:00
Mysterious_Dev
c471b6d66c Update to @vintl/how-ago 3.0.1 (#1413)
* Update to @vintl/how-ago 3.0.1

* Fix mistake
2023-10-25 13:40:58 -07:00
Prospector
a363efccfb new patreon logo (#1396) 2023-10-24 12:46:56 -07:00
Mysterious_Dev
871a17a108 Convert error page to Composition API and fix condition for 404 Logo (#1405)
* Convert error to Composition API

* Fixed 404 logo not being displayed every time
2023-10-24 12:46:09 -07:00
Carter
16a39b364c Change editor to comply with domain rules MOD-537 (#118)
* insert link rules

* change error message
2023-10-23 17:02:08 -07:00
Emma Alexia
91f79d2be0 Bump version v0.6.2 (#112) 2023-10-20 23:58:59 -04:00
Sasha Sorokin
9932fe5055 Fix relativeTime dayjs plugin import (#111) 2023-10-20 23:34:02 -04:00
Prospector
c296597427 Markdown editor (#92)
* Markdown editor

* use nocookie YT iframes

Co-authored-by: Emma Alexia Triphora <emma@modrinth.com>

* Fix line prefix-related Markdown editor bugs and add auto-lists

* Fix a couple codeblock issues

* address SearchFilter composition

* standardize code and patternize editor

* make editor typesafe

* adjust imports

* simplify key press handler

* Codemirror markdown implementation (#106)

* demo

* custom newline logic

* basic editor styling and buttons

* propogate styles

* validate and command structure for modals

* mobile safari event fix

* remove url field causing remount

* browser & mobile fix for link insertion

* override event passthrough to fix mobile

* fix modal state & disallow invalid url submission

* override paste behavior

* remove block flag in favor of newline insert

* cleanup before pr

* emit value from editor

* remove "a"

---------

Co-authored-by: Emma Alexia Triphora <emma@modrinth.com>
Co-authored-by: Carter <safe@fea.st>
2023-10-20 16:55:38 -07:00
Prospector
97cb5bc12c Merge pull request #110 from modrinth/fix/dropdown-icon-animation
Only animate the dropdown svg if last child
2023-10-20 09:11:59 -07:00
Prospector
7c596d6bf1 bump version 2023-10-20 08:47:25 -07:00
Prospector
b68799e2d1 Only animate the dropdown svg if last child 2023-10-20 08:20:33 -07:00
Prospector
a3d4db9fc1 Fix popout menu tab indices and buttons within being clickable when closed (#107) 2023-10-17 14:37:37 -07:00
Emma Alexia
8369330053 Move many things over from Knossos (and other rearrangements) (#102) 2023-10-16 21:18:23 -04:00
ToBinio
46a6fee81d fix Markdown table corners (#105) 2023-10-16 21:02:39 -04:00
ToBinio
b2c75130ce remove dropdown-button link (#104) 2023-10-16 20:49:53 -04:00
ToBinio
ef444f2a6f Fix slider snap points positioning (#103) 2023-10-16 20:49:20 -04:00
Carter
36f0871f69 Merge pull request #97 from brawaru/feat/typescript-hell-yeah
Enable TypeScript support
2023-10-16 14:53:40 -07:00
Carter
5adf27d345 Merge branch 'master' into feat/typescript-hell-yeah 2023-10-16 14:51:19 -07:00
Prospector
5e4c261332 Merge pull request #101 from modrinth/feature/joined-buttons
Joined buttons
2023-10-16 07:49:25 -07:00
Prospector
6fb04e23ad Remove dropdown button 2023-10-16 07:44:11 -07:00
Prospector
2c850a612d Version bump 2023-10-14 14:45:12 -07:00
Prospector
e555c4d083 Joined buttons 2023-10-14 14:44:27 -07:00
Sasha Sorokin
cb32cca6aa Enable TypeScript support
This commit enables TypeScript support in Omorphia. It reconfigures
Vite, adds two new TSConfig files as a replacement for the old JSConfig,
adds TypeScript linting to ESLint configuration.

Why?
====

TypeScript has became a standard in modern web development. In makes
JavaScript a more type-safe language, makes code more maintaible and
boosts effeciency by empowering development tools.

What's included in this commit?
===============================

TypeScript config files
-----------------------

Old and plain JSConfig has been replaced with two TSConfigs: one
designed for the code, and the other for the Vite configuration file.

JavaScript support is still enabled, therefore TypeScript files can
import JavaScript files as well, and vice versa. However, it is
recommended that all the new files will be written in TypeScript, and
old files are slowly converted over to TypeScript, so this option can be
disabled in the future, making this a safe TypeScript only project.

UMD output is replaced with CJS
-------------------------------

UMD is an old format that tries to stay compatible with both the Node.js
CJS, as well as Require.js. However, nowadays almost everyone is using a
transpiler where this format won't be beneficial.

To avoid it being a breaking change, it has been replaced with CJS. But
in the future it's worth considering removing CJS output as well and
making Omorphia an ESM module only, as it's designed only to be
consumed by the Modrinth project, and all of these projects are already
ESM-first.

Minification is disabled
------------------------

Because this is a library, the responsibility of minifying its code lies
solely on the consumer. Just like with CJS, all of the supported
consumers of this library are already performing minification, so
minifying this library beforehand is rather wasteful and harmful, as it
negatively impacts debugging experience.

More dependencies are now externalised
--------------------------------------

Disabling UMD output allows more easily externalise dependencies based
on the package.json file, making it way more approachable.

Vue is now a peer dependency
----------------------------

Because this is a component library, Vue is not a direct dependency of
this project. Instead, this library relies on consumer having a Vue as
its dependency.

`lib` is no longer included in package
--------------------------------------

`lib` folder contains sources for the imports, but it's outside of
export map and cannot be imported by the consumers. It is now excluded
from the package to reduce the package size and installation time.

Typings
-------

Consumers of this library should also be able to benefit from the type
safety. To achieve this, there's now a Vite plugin that generates type
declarations that represent the project structure.

To lesser the incompatibility with the consumers, some of the files were
changed to import `index.js` from folders rather than folders
themselves.

While both will work for building, not doing this requires consumer to
opt in to bundler module dependency, whereas if `index.js` is imported,
the consumer can use both the normal ESM / Node16 module resolution, as
well as the bundler module resolution.

ESLint configuration changes
----------------------------

ESLint has been reconfigured to support TypeScript, and include rules
recommended by the TypeScript ESLint package. In the future it would be
good to review the rules and override rules for TypeScript files to
disable rules that would conflict with ones from TypeScript ESLint.

Entry file is now a TypeScript file
-----------------------------------

To test the changes and begin the slow conversion, the entry point file
is now a proper TypeScript file.

SVG imports use `?component` parameter
--------------------------------------

All components are now imported with `?component` URL parameter so that
they have a proper file. By default, Vite imports all files like .svg
as strings containing path to the file.

Unfortunately, `vite-svg-loader` overrides this behaviour without
overriding the Vite import type declaration, leading to incorrect types.
However, it does expose a new parameter `?component`, which is properly
typed and does the same thing you'd expect - export a Vue component, so
most of the SVG imports have been converted to use this parameter.
2023-10-14 15:43:57 +02:00
Prospector
ffb491a61f Merge pull request #98 from modrinth/feature/popout-menus
Small button refactor, overflow and popout menus
2023-10-12 08:42:44 -07:00
Prospector
4ecba93a25 Fix lint 2023-10-12 08:40:05 -07:00
Prospector
52ec1d09b8 Merge pull request #99 from modrinth/bump-master
Bump version to 0.4.41
2023-10-12 08:35:59 -07:00
Prospector
3d2e2e2278 Bump version to 0.5.0 2023-10-12 08:34:02 -07:00
Prospector
f9a9ece320 More button options and dividers in overflow menus 2023-10-12 08:33:50 -07:00
Prospector
ffc46d6a48 Fix button docs 2023-10-12 08:33:50 -07:00
Prospector
ce458642af indent on popout menu docs 2023-10-12 08:33:50 -07:00
Prospector
820d3ef426 Add example docs for overflow menu 2023-10-12 08:33:50 -07:00
Prospector
145386b6a7 Change page title of overflow menu 2023-10-12 08:33:50 -07:00
Prospector
a708cf7f69 Small button refactor, overflow and popout menus 2023-10-12 08:33:50 -07:00
Prospector
c70ebb6cce Bump version 2023-10-12 08:32:50 -07:00
Prospector
a260b6eac4 Merge pull request #96 from ToBinio/snapping-slider
add snappingPoints to slider
2023-10-11 14:04:22 -07:00
Prospector
0ab17e1ec8 Merge pull request #87 from Banzobotic/fix-clickable-edges
Fix clicking edges of clickable elements
2023-10-11 14:04:10 -07:00
Prospector
d1a0cd1173 Merge pull request #94 from ToBinio/better-dropdown-transition
improve dropdown transitions
2023-10-11 14:03:59 -07:00
tobinio
3955b973ef add snappingPoints to slider 2023-10-08 10:49:51 +02:00
Mysterious_Dev
fcfa508cbc Fix convertion to Composition API for Avatar component (#1391)
* Fix Convertion for Avatar component

* Use ref for img
2023-10-02 07:08:56 -04:00
Emma Alexia Triphora
a6766ef1c0 Fix theme color not showing up properly in OpenGraph/Discord embeds (#1384) 2023-10-01 13:22:05 -07:00
chaos
606b5ac5ab Disable save & remove password button when no input password. (#1387) 2023-10-01 16:21:44 -04:00
chaos
9acc463c7f Fix dependencies list not updating on dependency remove. (#1388) 2023-10-01 16:19:23 -04:00
chaos
c4ddd08b0a Fix license element deleting itself when pressing backspace. (#1389) 2023-10-01 15:57:37 -04:00
Sasha Sorokin
5c7dd10769 Preserve whitespace in extracted translatable strings (#1390) 2023-10-01 15:45:21 -04:00
Mysterious_Dev
3fa86cb441 Convert Avatar & Badge components to Composition API (#1386) 2023-10-01 11:47:47 -04:00
Emma Alexia Triphora
4a74ee0d72 Update legal pages, especially rules (#1373)
* WIP rules update

* Update

* Run fix

* Entirely unnecessary

* Address comments
2023-09-30 15:45:53 -07:00
Mysterious_Dev
8a8759b0d4 Add sessions translation to settings navstack (#1383) 2023-09-30 14:47:34 -04:00
Sasha Sorokin
f259072136 Post translation Sessions settings page fixes (#1382) 2023-09-30 14:47:26 -04:00
Sasha Sorokin
3fd74292ef Remove unnecessary space in description on Sessions settings page (#1381) 2023-09-28 23:53:44 -04:00
Mysterious_Dev
f37c4293df Token Modal confirm for removal (#1375) 2023-09-28 22:44:36 -04:00
Mysterious_Dev
b9248553be Add translation keys for Sessions page (#1377)
Co-authored-by: Sasha Sorokin <10401817+brawaru@users.noreply.github.com>
2023-09-28 22:43:53 -04:00
Geometrically
475d434e98 Hide app promotion (#1376) 2023-09-25 20:28:48 -07:00
Mysterious_Dev
05d568d1c1 Fix "Incorrect wording for expired pats" (#1378) 2023-09-24 15:35:34 -04:00
Emma Alexia Triphora
28b63bac38 Update XSS values to be consistent with knossos (#93)
Implements modrinth/knossos#1208
Implements modrinth/knossos#1239

Also closes modrinth/knossos#1371
2023-09-24 08:07:22 -05:00
Emma Alexia Triphora
fc64719bb8 SEO cleanup (#1367)
* SEO/Metadata cleanup

May split rules changes into its own PR

* Revert rules/terms changes as they are now on a separate branch

* Update [searchProjectType].vue

* Update terms.vue
2023-09-22 11:45:03 -05:00
tobinio
323a74eef3 improve dropdown transitions 2023-09-18 16:34:41 +02:00
Sasha Sorokin
bd4da4f365 Improve i18n-related SEO (#1366) 2023-09-16 21:07:52 -04:00
Adrian O.V
ae7f7e9bd6 Search dropdown (#91)
* Bar charts

* Update package.json

* Search Dropdown

* Add circle icon option
2023-09-13 16:21:13 -04:00
Mysterious_Dev
b88e63d133 Make .well-known/change-password redirect appropriately (#1360) 2023-09-10 12:25:33 -04:00
Mysterious_Dev
a85255df5a Fix: Mistake for profile translations (#1362) 2023-09-10 12:23:42 -04:00
Mysterious_Dev
15c02e9e91 Update Discord invite link to use official (#1363) 2023-09-10 12:21:00 -04:00
Emma Alexia Triphora
ec35392cd1 Merge pull request #90 from modrinth/sync-issue-templates/default 2023-09-10 12:16:28 -04:00
modrinth-bot
b14b977bca [no ci] synced local '.github/ISSUE_TEMPLATE/' with remote 'issue_templates/' 2023-09-10 16:13:50 +00:00
Emma Alexia Triphora
54f55d44dc Fix dependency capitalization (#1351) 2023-09-02 16:45:13 -04:00
Emma Alexia Triphora
568dc1625e Skip CI in all Crowdin commits (#1338) 2023-09-02 09:42:00 -04:00
Mysterious_Dev
259b239e16 Fix: Incorrect notification history link on dashboard (#1350) 2023-09-02 09:41:32 -04:00
MMK21Hub
3033387ffc Add autocomplete attributes to auth-related inputs (#1349) 2023-09-02 09:40:02 -04:00
Mysterious_Dev
d500c29493 Fix: Notifications are always unread on small windows (#1347) 2023-09-02 09:39:26 -04:00
Sasha Sorokin
799d8003eb Skip regenerate workflow on forks (#1344) 2023-09-02 09:38:27 -04:00
Sasha Sorokin
5d34af6ac5 Make language label not translatable (#1343) 2023-09-02 09:38:10 -04:00
Mysterious_Dev
dca5b9f197 Support enter key for 2FA input field (#1341) 2023-09-02 09:37:42 -04:00
Mysterious_Dev
75e075ef8e Add translations for profile page (#1340)
Co-authored-by: Sasha Sorokin <10401817+brawaru@users.noreply.github.com>
2023-09-02 09:37:04 -04:00
Kxffie
9895976128 Add query to embed of search pages (#1284) 2023-09-02 09:33:52 -04:00
Calum
133367ddb5 Add "float: right|left" support for css. (#1208)
Co-authored-by: Sasha Sorokin <10401817+brawaru@users.noreply.github.com>
2023-09-02 09:31:59 -04:00
Emma Alexia Triphora
57964282ee Miscellaneous CSS cleanup (and make the report modal look better) (#1334) 2023-08-24 15:21:12 -04:00
Sasha Sorokin
51b07fc0c3 Add names of all languages on Crowdin (#1337) 2023-08-23 16:07:37 -04:00
Sasha Sorokin
d8f33641a5 Enable all locales on staging instances (#1336) 2023-08-23 15:18:58 -04:00
Emma Alexia Triphora
a7c7234589 Fix project deletion going to a non-existent page (#1332) 2023-08-23 12:13:25 -04:00
Emma Alexia Triphora
f22f1971cb Don't abbreviate moderation statistics (#1333) 2023-08-23 12:02:45 -04:00
Emma Alexia Triphora
28a5806492 Remove defunct modpacks alpha notice setting (#1331) 2023-08-23 11:55:20 -04:00
Nitrrine
df98167706 Use Nuxt 3 documentation link instead of Nuxt 2 (#1327) 2023-08-23 10:40:45 -04:00
falseresync
06cc40055a Extract Message banner component (#1105) 2023-08-23 10:40:16 -04:00
Nitrrine
66b47c08e6 Improve download button in changelog (#1311) 2023-08-23 10:39:30 -04:00
Sasha Sorokin
40cb8db1fc Move language nav menu item and hide it on prod (#1329) 2023-08-23 10:26:02 -04:00
Geometrically
2454a03c2b Fix broken dashboard (#1328) 2023-08-22 11:59:45 -04:00
naqaden
0a59a06121 Replace project icon border (#1319)
Icons in project pages with featured images and in search results with gallery view have borders that resize their 96x96 icons to 88x92.

These box-shadow replacements preserve icon size while retaining visual equivalency (rounded 4px border around left, top, and right).
2023-08-21 18:47:34 -04:00
Adrian O.V
a7191e8efb Bar charts (#89)
* Bar charts

* Update package.json
2023-08-21 15:55:50 -04:00
Adrian O.V
e1f4d791ae Charts (#88)
* Charts

* Version bump

* Update pnpm-lock.yaml
2023-08-21 15:29:24 -04:00
Emma Alexia Triphora
806fcb6ed2 Project moderation tab improvements (#1323) 2023-08-21 13:29:09 -04:00
Sasha Sorokin
467b0fa988 Add the language setting page (#1210)
* Add initial language picker prototype

* Heap o' improvements and Pirate tongue

* Move .visually-hidden to shared utils and add copyright notice

* Add a little space before categories names

* Simplify search to input focus logic

* Remove larger font size and padding from the search field

* Some refactors

* Braw's descent into madness

Thanks web development!

In seriousness though, tried to make the list more accessible. Making it
fully accessible feels like unbearable task, so at least that.

* Litol refactoring

* Extract new strings and remove old ones

* Update @vintl/nuxt to 1.3.0

This fixes the bug where default locale won't be saved.

* A buncha refactorings and cleanup

* Scuttle the Pirate lingo

'Twas employed 'ere for testin' purposes, but fear not, for it shall be
returnin' in the days to come. Should ye require it fer testin', simply
roll back this here commit.

* Clean languages source file

* Change "US" to "United States"

I think it would make distinguishing two languages simpler as now
there's more than one letter of difference (US/UK vs United States/
United Kingdom).
2023-08-21 13:26:39 -04:00
Nitrrine
a420d5b203 Add SEO to Rewards Program Information page (#1320) 2023-08-21 13:20:18 -04:00
Banzobotic
5be3aec7d4 whitespace fix 2023-08-20 23:33:48 +01:00
Banzobotic
5e25a4a00e Simplify code and avoid breaking change 2023-08-20 23:16:06 +01:00
Banzobotic
810cf9ab2c Use better exception for markdown
Now more readable, and doesn't affect other external links such as in sidebar-card
2023-08-20 21:44:36 +01:00
Banzobotic
2a11de7571 Fix clicking the edges of clickables 2023-08-20 21:28:53 +01:00
Prospector
12543be913 Fix placement of Modrinth App promo and add toggle for the primary nav promos (#1315) 2023-08-20 12:23:17 -07:00
Prospector
cfbf08dbf5 Fix auth layout on mobile (#1316) 2023-08-20 12:23:06 -07:00
Emma Alexia Triphora
3649573ba1 Fix "approve with reply" button being always pressable (#1322) 2023-08-20 13:30:55 -04:00
Kavi/o
0fdc02d5e9 Fixed Leave Project button (#1321) 2023-08-20 12:10:40 -04:00
falseresync
0ffe8ef102 Refine the auth design; clean up the layout and styles there (#1240)
* Refine the auth design; clean up the layout and styles there

* It doesn't really sing, does it

* Tweak auth form spacing and wording

* Final tweaks to improved auth design

* Merge

* fix lockfile

---------

Co-authored-by: Prospector <prospectordev@gmail.com>
2023-08-18 12:00:44 -07:00
Adrian
ce995812d4 Added metadata inference support for Velocity Plugins (#1296) 2023-08-18 12:00:18 -07:00
Nitrrine
cd22e1779d Add more buttons for finding the Modrinth App (#1312)
* Get the App button

* Get the App button

* Get the app -> Get Modrinth App & Add this button to account dropdown

* Using normal styles instead of inline styles
2023-08-18 12:00:02 -07:00
chaos
fbb50d8fb6 Add some text for when you haven't filed any reports (#1304)
* Add a message for no viewable reports.

* implement proposal
2023-08-18 11:55:16 -07:00
Adrian O.V
27172c2a19 Promotion tweaks (#85)
* Modify promotion, Fix #80, Fix #79

* Update Avatar.vue

* Version bump
2023-08-10 11:49:00 -04:00
Geometrically
f453dff438 add checkbox for monetization program + explainer (#1293)
* Fix bugs with threads

* remove modpack warning

* add back msg

* update project reveue info

* Add faq

* add checkbox with rewards terms
2023-08-09 20:27:49 -07:00
Geometrically
a437a40eee Fix bugs with threads (#1288)
* Fix bugs with threads

* remove modpack warning

* add back msg

* update project reveue info

* Add faq
2023-08-09 18:02:12 -07:00
Adrian
70a173a16d Added metadata inference support for Paper Plugins (#1282) 2023-08-09 14:06:32 -07:00
Apricot
7724fc74e5 Fix spelling mistake (accross -> across) (#1290) 2023-08-09 14:02:06 -07:00
Geometrically
6023c08554 bump pkg version (#84) 2023-08-08 15:25:14 -07:00
Geometrically
2de56065af Fix resize text (#83)
* Fix resize text

* fix multiselect
2023-08-08 15:23:00 -07:00
Geometrically
f5cf1ca08c Update legal docs (#1260)
* Update legal docs

* add app

* fix homepage
2023-08-05 17:27:35 -07:00
Adrian O.V
37a1e67579 App landing fixes (#1257)
* Addressed all changes and bug fixes

* Run lint

* Delete linux.svg

* buttons are no longer tabbable

* Fix os issue

* Run lint

* Fix grid issues

* Update meta

* Run lint
2023-08-05 10:09:44 -07:00
Geometrically
a372cbbf52 Switch to new ad (#82) 2023-08-05 09:50:16 -07:00
Adrian O.V
a67cf44453 Launcher page (#1249)
* Initial commit

* Update launcher.vue

* Finalize landing page!!!!!!!

* Run linter

* Address some changes

* Address changes

* Lint

* addressed more changes

* Add os logos

* Use install urls for linux

* Update app.vue

* intuitive buttons
2023-08-04 18:22:23 -04:00
Emma
a4bead1bde Fix report buttons not working for signed-out users (#1255) 2023-08-02 14:03:31 -07:00
Emma
0d15024bd2 Add links to the markdown reference on the docs (#1254) 2023-08-02 14:02:51 -07:00
Emma
6509d726b3 Remove useless moderation stuff (#1253)
Moderation messages are superseded by threads, so there is no need to have the ModalModeration anymore, it would only confuse new moderators
2023-08-02 14:02:29 -07:00
Brady
a132f0f41d Change version infering to use full semver range spec (#1248)
* Add support for all semver and forge maven range.

* Fix that old forge was checking version as an object

* Fix new version range checking not being applied to quilt.mod.jsons

* run fix
2023-08-02 14:02:03 -07:00
Sasha Sorokin
7c2ea3dcfd Don't run Deploy workflow on forks (#1252) 2023-08-01 19:38:47 -04:00
Emma
706c6d46da Fix bug with wsrv (#1239)
* Fix bug with wsrv

* Address comment
2023-08-01 15:35:06 -07:00
Geometrically
04915cc65a fix issues with auth (#1247) 2023-08-01 15:34:29 -07:00
Zefir
e2fb8827a7 Use en dash for versions range instead of em dash (#1246) 2023-07-30 16:19:42 -04:00
Wyatt Verchere
05fda903c6 added options to promotion (#81)
* added options to promotion

* prettier

* incremented package.json
2023-07-28 12:52:14 -07:00
Prospector
91e1eff763 Add formatted name for NeoForge (#1241) 2023-07-22 14:45:56 -07:00
Prospector
2c4ffcfa7c Initial frontend NeoForge support (#1233)
* Revert "fix: featured version ui shifts (#1191)"

This reverts commit 3036f43b75.

* Revert "Fix CTRL clicking on versions issue (#1189)"

This reverts commit f4560bd7d8.

* Add basic neoforge frontend support
2023-07-22 14:37:08 -07:00
Prospector
34d63f3557 Update master with new auth (#1236)
* Begin UI for threads and moderation overhaul

* Hide close button on non-report threads

* Fix review age coloring

* Add project count

* Remove action buttons from queue page and add queued date to project page

* Hook up to actual data

* Remove unused icon

* Get up to 1000 projects in queue

* prettier

* more prettier

* Changed all the things

* lint

* rebuild

* Add omorphia

* Workaround formatjs bug in ThreadSummary.vue

* Fix notifications page on prod

* Fix a few notifications and threads bugs

* lockfile

* Fix duplicate button styles

* more fixes and polishing

* More fixes

* Remove legacy pages

* More bugfixes

* Add some error catching for reports and notifications

* More error handling

* fix lint

* Add inbox links

* Remove loading component and rename member header

* Rely on threads always existing

* Handle if project update notifs are not grouped

* oops

* Fix chips on notifications page

* Import ModalModeration

* finish threads

* New authentication (#1234)

* Initial new auth work

* more auth pages

* Finish most

* more

* fix on landing page

* Finish everything but PATs + Sessions

* fix threads merge bugs

* fix cf pages ssr

* fix most issues

* Finish authentication

* Fix merge

---------

Co-authored-by: triphora <emma@modrinth.com>
Co-authored-by: Jai A <jaiagr+gpg@pm.me>
Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
2023-07-20 11:19:42 -07:00
Prospector
a5613ebb10 Threads and more! (#1232)
* Begin UI for threads and moderation overhaul

* Hide close button on non-report threads

* Fix review age coloring

* Add project count

* Remove action buttons from queue page and add queued date to project page

* Hook up to actual data

* Remove unused icon

* Get up to 1000 projects in queue

* prettier

* more prettier

* Changed all the things

* lint

* rebuild

* Add omorphia

* Workaround formatjs bug in ThreadSummary.vue

* Fix notifications page on prod

* Fix a few notifications and threads bugs

* lockfile

* Fix duplicate button styles

* more fixes and polishing

* More fixes

* Remove legacy pages

* More bugfixes

* Add some error catching for reports and notifications

* More error handling

* fix lint

* Add inbox links

* Remove loading component and rename member header

* Rely on threads always existing

* Handle if project update notifs are not grouped

* oops

* Fix chips on notifications page

* Import ModalModeration

* finish threads

---------

Co-authored-by: triphora <emma@modrinth.com>
Co-authored-by: Jai A <jaiagr+gpg@pm.me>
2023-07-15 20:39:33 -07:00
Modrinth Bot
1a2b45eebd [no ci] synced local '.github/ISSUE_TEMPLATE/' with remote 'issue_templates/' (#1219)
Co-authored-by: modrinth-bot <null>
2023-07-10 11:18:20 -07:00
Geometrically
65791a58e9 Fix CF Pages on linkify (#1231) 2023-07-04 12:15:14 -07:00
Geometrically
6e0f22323b Fix pages env vars (#1230)
* Fix pages env vars

* bring back vercel json
2023-07-03 18:08:05 -07:00
Geometrically
4c8c35a25a move to cloudflare workers (#1229)
* move to cloudflare workers

* remove junk
2023-07-03 17:23:19 -07:00
Adrian O.V
a149f06f58 Dropdown Input + move to chevron (#78) 2023-06-30 08:09:57 -07:00
Adrian O.V
42f97f63d5 Share modal (#74)
* Creation of the share modal

* Update package.json

* Addressed comments

* Fixed dependency

* Update ShareModal.vue

* Fixed url

* Update ShareModal.vue

* Adressed changes
2023-06-28 08:44:47 -07:00
Modrinth Bot
227652de2e [no ci] created local '.github/ISSUE_TEMPLATE/' from remote 'issue_templates/' (#73)
Co-authored-by: modrinth-bot <null>
2023-06-28 08:43:42 -07:00
Brady
dd205e849c Copy Knossos parser changes to Omorphia (#76) 2023-06-28 08:43:25 -07:00
Emma
05d994889d [no ci] Sync issue templates (#1216) 2023-06-21 19:32:21 -04:00
Prospector
4b381049c3 Fix/plugin datapack display (#1215)
* Fix plugin and data pack project type display

* plugin and data pack too
2023-06-21 06:59:07 -04:00
Geometrically
33f3479569 Fix tauri modal drag region (#72) 2023-06-20 17:14:48 -07:00
Prospector
6b940ed675 Revert #1189 and #1191 (#1214)
* Revert "fix: featured version ui shifts (#1191)"

This reverts commit 3036f43b75.

* Revert "Fix CTRL clicking on versions issue (#1189)"

This reverts commit f4560bd7d8.
2023-06-20 14:51:49 -07:00
MMK21Hub
247be0c11f Fix search filters being hidden (#1205)
* Fix search filters being hidden (#1165)

Previously, `max-width` was used to hide the sidebar on mobile, which
meant that at exactly 1024 pixels wide, the sidebar would be hidden.
However, this breakpoint is also as a
`min-width` other media queries, notably the ones used to enable viewing
filters on mobile sizes. This has caused issue #1024.

To fix this, I have swapped the logic of the rule that hides the filters
on mobile: it is now hidden by default and a `min-width` query is used
to show it on wider viewports. This is more consistent with similar media
queries in the same file.

Looking to the future, these issues should become less common if we
switch to range-based media queries:
https://caniuse.com/css-media-range-syntax

* Delete package-lock.json

---------

Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
2023-06-20 14:37:39 -07:00
kevoh1516
14b0e8875d fix version filtering wrong page (#1206) 2023-06-20 14:33:34 -07:00
Younes
bd51741b01 fixed detail tab with summary and bold tags (#1198) 2023-06-20 14:32:42 -07:00
Prospector
afd60b8a16 Fix license selector (#1213) 2023-06-20 12:17:10 -07:00
Geometrically
6e0659af4c add draggable attr to modal background (#71) 2023-06-20 09:19:47 -07:00
Prospector
6de1fa0878 Large and outlined buttons (#69) 2023-06-20 09:05:26 -07:00
Geometrically
61e00f1620 Add unclosable modals (#70) 2023-06-19 22:15:45 -07:00
Sasha Sorokin
c8c75b38c3 Update @vintl/nuxt to 1.2.3 (#1201)
This should fix TypeScript error related to nuxt.config.ts file and
unknown `vintl` property in it.
2023-06-15 12:24:12 -07:00
Geometrically
2bdd0a0e8d Fix dropdown bug on webkit (#68) 2023-06-14 17:48:46 -07:00
Geometrically
4131ad5016 Fix breadcrumb link style (#67) 2023-06-12 19:42:30 -07:00
Adrian O.V
4f74b3fafe Dropdowns buttons colorized (#66)
* Buttons  colorized 

* Update package.json
2023-06-12 15:02:16 -07:00
Younes
177a487ead fixed mobile navigation on iphones safari (#1193)
fixes #1164
2023-06-11 20:32:00 -04:00
Younes
99a4966786 fix logging out doesnt work (#1192)
Fixes #1108
2023-06-11 20:01:49 -04:00
Younes
db9279a6e5 fixed redirection back to followed projects (#1190)
Fixes #1158
2023-06-11 19:57:01 -04:00
Younes
3036f43b75 fix: featured version ui shifts (#1191) 2023-06-11 19:31:18 -04:00
Younes
f4560bd7d8 Fix CTRL clicking on versions issue (#1189)
Fixes #1184
2023-06-11 18:25:27 -04:00
Emma
97b9ec5cc7 Fix two bugs with Forge mod exporting (#1187) 2023-06-11 14:41:44 -04:00
Emma
cdab3d0eff Change uses of "Include snapshots" to "Include all versions" (#1178) 2023-06-11 14:41:32 -04:00
Sasha Sorokin
de991041c4 Add internationalization support (#738) 2023-06-11 14:08:16 -04:00
Nerjal Nosk
776c16cd49 Theme switch cooldown (#1188) 2023-06-11 13:47:08 -04:00
Sasha Sorokin
d9f8746438 Consistent extension usage in imports (#1171) 2023-06-11 13:37:40 -04:00
Sasha Sorokin
20d1c4d242 Switch to bundler TypeScript moduleResolution (#1170) 2023-06-11 13:33:38 -04:00
Adrian O.V
6edac37031 fix some styling (oops) (#64)
* fix some styling (oops)

* Update pnpm-lock.yaml
2023-06-10 09:21:29 -07:00
Adrian O.V
cea5a18a7a Slider and text input changes (#65) 2023-06-10 09:18:15 -07:00
Prospector
bf615303f1 Fix pagination (#1181) 2023-06-09 14:47:36 -07:00
Geometrically
063585f563 Improve landing page performance (#1180)
* Improve landing page performance

* fix build
2023-06-08 15:42:18 -07:00
Geometrically
01304e807a Fix dropdown quirks (#63) 2023-06-06 16:07:58 -07:00
kevoh1516
d275b3fd08 do not allow empty option on dropdown when adding dependency (#1155) 2023-06-06 14:23:08 -07:00
triphora
66364354da Small landing page fixes (#993)
* Miscellaneous fixes/improvements to landing page

* The downsides of not being able to set up a local testing env, in a commit

* Update how stats are retrieved

* Fix prettier

* Make requested changes

* Restore nuxt.config.js

* Restore composables/tag.js

* Update index.vue
2023-06-06 14:22:36 -07:00
Brady
48203aedf9 Fix markdown styling (#1176) 2023-06-06 14:21:10 -07:00
Calum
a6ca893ec5 Add indicators for visibility on project settings page (#1092)
* Add indicators for visibility - replace confusingly worded description.

* Add better description alongside ticks

* CrossIcon -> CheckIcon

* Icon naming

* Update index.vue

Use x.svg as exit.svg might be removed in the future.

* Visibility -> Target Visibility

* Add suggestions.

* Target Visibility -> Visibility
2023-06-06 14:20:35 -07:00
triphora
d55f1163a2 Improve withheld message banner (#1167) 2023-06-06 14:15:30 -07:00
Brady
80530012b8 Fix hljs class parsing (#1174) 2023-06-06 14:13:23 -07:00
Adrian O.V
d98a6adfb3 Create button (#62) 2023-06-05 23:34:52 -04:00
Geometrically
ae3a35816e Fix publish act (#61)
* Fix publish act

* Fix again:
2023-05-28 16:59:52 -04:00
Geometrically
8ca4be5ac0 Fix publish act (#60) 2023-05-28 16:52:54 -04:00
Geometrically
1c814946d5 bump version (#59)
* Knossos Catch-up

* bump version

* fix build

* fix build again

* Fix lint

* downgrade pnpm

* fix modals

* fix btn style

* add missing styles

* bump again
2023-05-28 16:46:13 -04:00
Geometrically
1db59fc052 Knossos Catch-up (#58)
* Knossos Catch-up

* bump version

* fix build

* fix build again

* Fix lint

* downgrade pnpm

* fix modals

* fix btn style

* add missing styles
2023-05-28 16:36:49 -04:00
Geometrically
273a69258a Fix wrong func being parsed, md parser (#1169) 2023-05-28 16:00:25 -04:00
Sasha Sorokin
3b0dc2195d Switch to pnpm (#1168) 2023-05-28 14:21:14 -04:00
Geometrically
bbb2539ace Add missing input styles (#57) 2023-05-25 20:49:32 -04:00
Geometrically
03cfe9bf62 Fix none size (#56)
* Fix none size not working

* bump
2023-05-25 17:43:15 -04:00
Geometrically
e29a4d79ba Fix none size not working (#55) 2023-05-25 17:39:32 -04:00
Geometrically
4243bf9ba8 Remove uses of iconified-button (#54) 2023-05-25 16:25:36 -04:00
Geometrically
7ae9627a79 Fix multiselect + tooltip styles (#53) 2023-05-25 14:26:03 -04:00
Geometrically
097a1cc799 Notifications (#52)
* Notifications

* fix docs
2023-05-22 14:33:45 -07:00
Geometrically
625511d28b Disabling sliders (#51)
* Add disabled slider to omorphia

* lint
2023-05-18 19:57:35 -07:00
Geometrically
b6a58ee845 Mac disable outline (#50)
* Disable outline on macos

* bump
2023-05-18 16:43:14 -07:00
Geometrically
a349aed94c Fix reload (#1154) 2023-05-15 10:41:57 -07:00
Geometrically
82b96d1a14 Fix GIFs (#1130) 2023-05-08 19:01:06 -07:00
Geometrically
b85ddd1a53 Fix link style (#49) 2023-05-06 14:20:13 -07:00
Mikhail Oleynikov
732f88ff51 Renovate config files (#1117)
* Renovate the config files

* Return Vue and TS ESLint plugins

* Revert Prettier config
Add typing to ESLint config
Re-revert package.json

* Re-add ESLint plugin for Prettier
(it went missing during merge, oops)

* Try to fix CI by explicit dependency

* Try to fix CI by explicit dependency x2

* Try to fix CI magically
Additionally, remove unneeded jsconfig.json

* Brawaru found the reason

Co-authored-by: Sasha Sorokin <10401817+brawaru@users.noreply.github.com>

---------

Co-authored-by: Sasha Sorokin <10401817+brawaru@users.noreply.github.com>
2023-05-06 12:17:43 -07:00
Emma Triphora
c08139b812 Revert "fix(xss): allow any query parameters in youtube embed, ported from #1001 (#1064)"
This reverts commit f34845fd7d.
2023-05-06 14:56:59 -04:00
Emma Triphora
a6a6e73b04 Revert "Fix lint issues (#1126)"
This reverts commit 521e21072e.
2023-05-06 14:56:47 -04:00
Emma Triphora
9971201004 Revert "Fix the remove on the Discord theme because of the way the new remove… (#1127)"
This reverts commit e99b0f8052.
2023-05-06 14:56:14 -04:00
PandaNinjas
e99b0f8052 Fix the remove on the Discord theme because of the way the new remove… (#1127) 2023-05-06 12:46:54 -04:00
Calum
7a59b2b25d Ascending/Descending order by button for projects dashboard page. (#1100) 2023-05-06 11:12:35 -04:00
triphora
521e21072e Fix lint issues (#1126) 2023-05-06 10:44:51 -04:00
PandaNinjas
f34845fd7d fix(xss): allow any query parameters in youtube embed, ported from #1001 (#1064) 2023-05-06 10:37:15 -04:00
Matias Koivikko
29ccadbd43 Add cf.way2muchnoise.eu as allowed image domain (#1123) 2023-05-06 10:31:05 -04:00
Mikhail Oleynikov
ffb4b395d0 Fix mobile navbar spacing (#1116) 2023-05-06 10:30:51 -04:00
Magnus Jensen
19eba9526a add bstats.org as allowed domain name for markdown (#1122) 2023-05-06 10:25:14 -04:00
Colby Newman
09ed76904b Prevent images from being treated as text in markdown (#1119) 2023-05-06 10:25:04 -04:00
Colby Newman
22932241bd Support HTML image maps (#1118) 2023-05-06 10:24:53 -04:00
Nitro
afc95d99cb Fix changelog-bar overflowing (#1115) 2023-05-06 10:24:32 -04:00
Adrian O.V
5fde3c53b8 Switch to composition API, Add custom names (#47)
* Switch to composition API, Add custom names

* Update package.json

* Update DropdownSelect.vue
2023-05-03 17:50:39 -04:00
Zach Baird
1135852f25 Merge pull request #46 from modrinth/remove-projectcard-underline
Remove projectcard underline
2023-05-02 13:36:02 -04:00
Zachary Baird
e892f0cb45 Removes global underline a style. 2023-05-02 13:27:26 -04:00
Zachary Baird
de56374c4d Merge branch 'master' of https://github.com/modrinth/omorphia 2023-05-02 12:49:00 -04:00
Geometrically
9d92b8cc6d fix btn transparent, add shadows (#45) 2023-04-22 12:18:09 -07:00
Geometrically
d9b3ba0ff2 Fix logged in user stall (#1114) 2023-04-22 09:59:46 -07:00
Geometrically
4be6b11c1e Fix data URL filtering (#1111)
* Fix data URL filtering

* upgrade nuxt
2023-04-21 18:39:11 -07:00
Adrian O.V
6794da0738 Dropdown improvements (#40)
* Disableability, Up or down rendering

* Switch to scale animation

* Update DropdownSelect.vue

* Fix animation

* bump

* adjustments

---------

Co-authored-by: Jai A <jaiagr+gpg@pm.me>
Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
2023-04-21 17:03:45 -07:00
Geometrically
5527170fab Fix URL bug + Redundant call (#1110)
* Fix URL bug + Redundant call

* Fix prettier
2023-04-21 14:48:23 -07:00
Geometrically
e732eed98a Fix tables (#44) 2023-04-21 12:58:30 -07:00
Zach Baird
5244642dee Adds a --color-super-raised-bg var. (#42)
* Adds card-divider and table styles.

* Adds parent table class. Adds button-span fix.

* Adds super-raised-bg vars.

* Changes super-raised var to use own value for light-mode.

* Removes erroneous var.
2023-04-21 11:41:06 -07:00
Geometrically
b329a44fef Fix input styling (#43) 2023-04-21 11:40:48 -07:00
Zachary Baird
c93632421d Merge branch 'master' of https://github.com/modrinth/omorphia 2023-04-19 23:55:59 -04:00
Justsnoopy30
97e0fd9f43 Always use https for wsrv.nl usage (#41) 2023-04-19 19:03:06 -07:00
Zach Baird
ea536c5537 Adds card-divider and table styles. (#39)
* Adds card-divider and table styles.

* Bumps package version.

* Adds parent table class. Adds button-span fix.
2023-04-19 12:07:53 -07:00
Zachary Baird
970c906c97 Adds parent table class. Adds button-span fix. 2023-04-19 15:01:51 -04:00
Zachary Baird
fe738da633 Adds card-divider and table styles. 2023-04-19 11:11:37 -04:00
Calum
5e3da71ce4 Fix bulk link editing (Fixes #1087) (#1097) 2023-04-17 15:07:21 -07:00
Prospector
a0cccb299e Fix badge color being overridden by Categories (#1098) 2023-04-17 15:00:30 -07:00
Geometrically
e56974f4b2 Navigation fixes (#1095)
* Navigation fixes

* remove console log

* Fix prettier

* Fix legal pages as well
2023-04-15 18:07:20 -07:00
Prospector
fd28da2a3b Add transfer history and unify back elements with breadcrumbs (#1088)
* Add transfer history and unify back elements with breadcrumbs

* Increase padding of breadcrumbs, include previous query params, more consistent link underlining

* Prettier

* Add project type text and link to project pages

* Remove console.log
2023-04-15 12:08:11 -07:00
Prospector
257b35e4ae Fix money rounding issue (#1094)
* Fix money rounding issue

* Re-add dollar signs

* Remove unncessary pre-rounding
2023-04-14 20:55:32 -07:00
Geometrically
4398563b85 Bump nuxt version (#1093)
* Bump nuxt version

* tests

* bump again

* fix modals
2023-04-13 15:27:41 -07:00
Zach Baird
e23ace1bb0 Adds number input style and doc. Bumps package version. (#37) 2023-04-13 12:05:45 -07:00
Zach Baird
2ef333c66d Merge pull request #36 from modrinth/fixes-modal-xicon
Imports XIcon in Modal component.
2023-04-12 11:12:11 -04:00
Zachary Baird
c6ee44010c Fixes lint error in package.json. 2023-04-12 11:08:55 -04:00
Zachary Baird
71d770e679 Fixes lint error in DropdownSelect. 2023-04-12 10:55:19 -04:00
Zachary Baird
cf17b93201 Bumps package version. 2023-04-12 10:43:12 -04:00
Zachary Baird
08f284ce29 Fixes Lint error. 2023-04-12 10:19:46 -04:00
Zachary Baird
4336aeb0ad Imports XIcon in Modal. 2023-04-12 10:16:38 -04:00
Prospector
5fd3a45c64 Fix duplicate version featured links being wrong sometimes Fixes #842 (#1085) 2023-04-07 18:43:10 -07:00
Prospector
77f8bfcf25 Fix nested lists having bottom margins Fixes #1033 (#1081)
* Fix nested lists having bottom margins Fixes #1033

* prettier
2023-04-07 18:41:00 -07:00
Prospector
509a97e532 Fix project icon label in settings id linking to project name Fixes #1045 (#1080) 2023-04-07 18:40:29 -07:00
Prospector
604683efd5 Fix project type in Dashboard & settings URLs Closes #1066 (#1078) 2023-04-07 18:39:04 -07:00
Prospector
c731515b94 Make pixel art more reliably get pixelated rendering (#1077)
* Make pixel art more reliably get pixelated rendering Closes #289

* Run prettier
2023-04-07 18:38:21 -07:00
Prospector
8d85158f91 Fix disabled css selector Closes #1042 (#1076)
* Fix disabled css selector Closes #1042

* Run prettier
2023-04-07 18:37:18 -07:00
Adrian O.V
0736f372dc Update slider to composition API (#35)
* Update slider to composition API

* Version bump
2023-04-06 20:05:14 -04:00
Geometrically
a37210b22e Fix auth login (#1074) 2023-04-03 10:11:10 -07:00
Geometrically
ccf81ff7b9 Disable system theme detection (#1071) 2023-04-02 10:03:17 -07:00
Prospector
a4c1a65f10 Revert "Fix folia projects not showing as a plugin (#1069)" (#1070)
This reverts commit 02a82e1e59.
2023-04-01 23:59:04 -07:00
Adrian O.V
6bdea219bf Create component (#34) 2023-04-02 01:53:29 -04:00
Prospector
02a82e1e59 Fix folia projects not showing as a plugin (#1069) 2023-03-31 21:09:14 -04:00
Geometrically
d238b0b9f2 Add missing icons (#33)
* Markdown table styling

* Add missing icons

* add code icon
2023-03-31 14:04:09 -04:00
Geometrically
40026fbf53 Markdown table styling (#32) 2023-03-31 13:54:04 -04:00
Geometrically
4193818259 folia (#1067) 2023-03-29 15:12:59 -07:00
Adrian O.V
78840157ef Dropdown fix (#31)
* Fix v-model not working

* Fix clicking off not closing dropdown

* Update DropdownSelect.vue
2023-03-29 14:06:50 -04:00
Geometrically
f3d69a29b9 Bump version (#30) 2023-03-29 07:36:29 -07:00
Adrian O.V
1ae6709b26 Merge pull request #29 from modrinth/navrow-markdown
Add navrow + markdown parsing
2023-03-28 18:03:34 -04:00
CodexAdrian
8cc44b3958 Update parse.js 2023-03-28 18:02:22 -04:00
Jai A
70e894c268 fix vars 2023-03-28 10:43:16 -07:00
Jai A
9ff3ab1a2b lint 2023-03-28 10:42:03 -07:00
Jai A
8167f6f232 Add navrow + markdown parsing 2023-03-28 10:34:48 -07:00
Geometrically
de844e9b23 Bump package version (#28) 2023-03-28 09:46:24 -07:00
Geometrically
7214b71c29 Bump Nuxt + Minor Fixes (#1065)
* Bump Nuxt + Minor Fixes

* Run lint
2023-03-27 09:20:25 -07:00
Geometrically
be5df46803 Ads component (#27)
* Ads component

* run lint
2023-03-26 17:32:25 -07:00
Magnus Jensen
25bd61558b fix(project): update follower count client side (#1038)
* fix(project): update follower count client side

* move following increment to user composable

---------

Co-authored-by: MagnusHJensen <magnus.holm.jensen@lego.dk>
2023-03-26 11:44:33 -07:00
Nicholas Christopher
41961de619 Use nuxt-link for team member element (#1062) 2023-03-26 11:43:23 -07:00
TheBossMagnus
1ca3f6ef8a Update COPYING.md (#22) 2023-03-24 12:16:56 -07:00
Adrian O.V
f97c94832a Toggles (#24)
* Toggles!

* Toggle component

* Ran prettier
2023-03-24 12:15:55 -07:00
Adrian O.V
4ae7786362 Modal report (#17)
* Base modal implementation

* Modal Report page

* Upgrade multiselect

* Fixed multiselect styling

* fix build err

* rev change

* Added dropdown component, addressed changes

Removed unused classes after vue multiselect was removed
Updated markdown-it and xss

* Update index.js

* fix lint

* Fix prettier code style

* Address most changes

* New dropdown

* Undo comment

Makes the component close when not focused

* Fix accessibility issues

* Fix double focus

* addressed changes to modal

* Run Prettier

* Update ModalReport.vue

* Fixed spacing issues

---------

Co-authored-by: Jai A <jaiagr+gpg@pm.me>
2023-03-24 12:15:34 -07:00
Adrian O.V
d3d553ad5a Update Slider.vue (#26)
* Update Slider.vue

* Ran prettier
2023-03-24 12:15:12 -07:00
triphora
4faab006e3 Fix #725 (#1060) 2023-03-24 12:07:54 -07:00
triphora
80621f598e Small fixes (#1061) 2023-03-24 15:03:50 -04:00
Zach Baird
eaf689fe2f Formats version text based on count. (#1053) 2023-03-24 11:47:44 -07:00
Zach Baird
211e3304f3 See all versions will navigate to versions#all-versions. (#1052)
* See all versions will navigate to versions#all-versions.

* Runs prettier.
2023-03-24 11:47:21 -07:00
Zach Baird
d4c3b70f15 Adds margin to confirmation-text. (#1051) 2023-03-24 11:46:09 -07:00
Adrian O.V
f874941e4d Merge pull request #23 from modrinth/final-components
Final few components
2023-03-17 13:34:07 -04:00
Geometrically
437b2ab30a Fix serverless crash + Version Filters on reload (#1050) 2023-03-14 15:33:10 -07:00
Jai A
dcc2a5afe0 Final few components 2023-03-14 14:22:50 -07:00
TheBossMagnus
078e952f30 Update COPYING.md (#1049) 2023-03-14 09:22:42 -04:00
Zach Baird
2d2fe4983c Adds media query style to prevent Report button from overlapping username. (#1040) 2023-03-13 20:30:12 -07:00
Zach Baird
29ddc04f7b Changes demo-search height to be min-height. (#1039) 2023-03-13 20:29:37 -07:00
Geometrically
aac2da70cf Fix authentication hydration issue (#1048)
* Fix authentication hydration issue

* reset existing cookies

* Update if statement chaining
2023-03-13 20:21:55 -07:00
Geometrically
f5cbe0c4fe Update package.json (#21) 2023-03-13 15:08:58 -07:00
Geometrically
ab28d0a9b3 Fix publish GH action (#20) 2023-03-13 13:59:10 -07:00
Geometrically
6aaf4ed9d9 run lint + fix build output (#19)
* run lint + fix build output

* remove unused env var
2023-03-13 13:28:30 -07:00
Geometrically
1b81a1f4a6 Omorphia Cleanup + Adding missing styles (#18)
* Add missing knossos styles + some knossos cleanup

* remove yarn.lock

* Update output syntax
2023-03-13 11:40:41 -07:00
Geometrically
e838fe30de Fix datapack packaging (#1044) 2023-03-12 19:01:01 -07:00
Geometrically
6d9779a497 Fix hydration issue + Edit Page (#1043) 2023-03-12 13:00:09 -07:00
Geometrically
130ece3d2e Fix upload version showing for everyone (#1037) 2023-03-10 16:37:23 -07:00
Geometrically
d63a794848 Search loading anim (#1036) 2023-03-10 16:18:26 -07:00
Geometrically
ba220abbbf Fix nuxt3 issues (#1035)
* Fix nuxt3 issues

* fix unintentional npm use
2023-03-10 14:51:48 -07:00
triphora
3825575f70 Fix #1007 (#1030) 2023-03-10 14:50:40 -07:00
Geometrically
8d69961130 Fix overflow tablet (#1029)
* Fix tablet overflow

* Fix with videos as well
2023-03-09 11:06:40 -07:00
Geometrically
740357d120 Migrate to Nuxt 3 (#933)
* Migrate to Nuxt 3

* Update vercel config

* remove tsconfig comment

* Changelog experiment + working proj pages

* Fix package json

* Prevent vercel complaining

* fix deploy (hopefully)

* Tag generator

* Switch to yarn

* Vercel pls 🙏

* Fix tag generation bug

* Make (most) non-logged in pages work

* fix base build

* Linting + state

* Eradicate axios, make most user pages work

* Fix checkbox state being set incorrectly

* Make most things work

* Final stretch

* Finish (most) things

* Move to update model value

* Fix modal text getting blurred from transforms (#964)

* Adjust nav-link border radius when focused (#961)

* Transition between animation states on TextLogo (#955)

* Transition between animation states on TextLogo

* Remove unused refs

* Fixes from review

* Disable tabbing to pagination arrows when disabled (#972)

* Make position of the "no results" text on grid/gallery views consistent (fixes #963) (#965)

* Fix position of the "no results" text on grid view

* fix padding

* Remove extra margin on main page, fixes #957 (#959)

* Fix layout shift and placeholder line height (#973)

* Fix a lot of issues

* Fix more nuxt 3 issues

* fix not all versions showing up (temp)

* inline inter css file

* More nuxt 3 fixes

* [skip ci] broken- backup changes

* Change modpack warnings to blue instead of red (#991)

* Fix some hydration issues

* Update nuxt

* Fix some images not showing

* Add pagination to versions page + fix lag

* Make changelog page consistent with versions page

* sync before merge

* Delete old file

* Fix actions failing

* update branch

* Fixes navbar transition animation. (#1012)

* Fixes navbar transition animation.

* Fixes Y-axis animation. Fixes mobile menu. Removes highlightjs prop.

* Changes xss call to renderString.

* Fixes renderString call.

* Removes unnecessary styling.

* Reverts mobile nav change.

* Nuxt 3 Lazy Loading Search (#1022)

* Uses lazyFetch for results. onSearchChange refreshes. Adds loading circle.

* Removes console.log

* Preserves old page when paging.

* Diagnosing filtering bugs.

* Fix single facet filtering

* Implements useAuth in settings/account.

* tiny ssr fix

* Updating nuxt.config checklist.

* Implements useAuth in revenue, moneitzation, and dashboard index pages.

* Fixes setups.

* Eliminates results when path changes. Adds animated logo.

* Ensures loading animation renders on search page.

---------

Co-authored-by: Jai A <jaiagr+gpg@pm.me>

* Fix navigation issues

* Square button fix (#1023)

* Removes checklist from nuxt.config.

* Modifies Nuxt CI to build after linting.

* Fixes prettierignore file.

* bug fixes

* Update whitelist domains

* Page improvements, fix CLS

* Fix a lot of things

* Fix project type redirect

* Fix 404 errors

* Fix user settings + hydration error

* Final fixes

* fix(creator-section): border radius on icons not aligning with bg (#1027)

Co-authored-by: MagnusHJensen <magnus.holm.jensen@lego.dk>

* Improvements to the mobile navbar (#984)

* Transition between animation states on TextLogo

* Remove unused refs

* Fixes from review

* Improvements to the mobile nav menu

* fix avatar alt text

* Nevermind, got confused for a moment

* Tab bar, menu layout improvements

* Highlight search icon when menu is open

* Update layouts/default.vue

Co-authored-by: Magnus Jensen <magnushjensen.mail@gmail.com>

* Fix some issues

* Use caret instead

* Run prettier

* Add create a project

---------

Co-authored-by: Magnus Jensen <magnushjensen.mail@gmail.com>
Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
Co-authored-by: Jai A <jaiagr+gpg@pm.me>

* Fix mobile menu issues

* More issues

* Fix lint

---------

Co-authored-by: Kaeden Murphy <kmurphy@kaedenmurphy.dev>
Co-authored-by: triphora <emmaffle@modrinth.com>
Co-authored-by: Zach Baird <30800863+ZachBaird@users.noreply.github.com>
Co-authored-by: stairman06 <36215135+stairman06@users.noreply.github.com>
Co-authored-by: Zachary Baird <zdb1994@yahoo.com>
Co-authored-by: Magnus Jensen <magnushjensen.mail@gmail.com>
Co-authored-by: MagnusHJensen <magnus.holm.jensen@lego.dk>
2023-03-09 10:05:32 -07:00
Geometrically
5638f0f24b Update privacy policy (#998)
* Update privacy policy

* fix prettier weirdness

* Fixes, modifications, and changes

* We don't prevent automated access, we monitor it

* Fix wonky link and fix header hierarchy

* Update address

* Fix lint

* Transfer over three sections from old policy

---------

Co-authored-by: Emma Triphora <emma@modrinth.com>
2023-03-08 15:22:15 -07:00
Adrian O.V
c8a30e793a Update ProjectCard.vue (#16) 2023-03-08 12:20:44 -07:00
Adrian O.V
2264281e4d Project card (#15)
* initial impl

* merge from main

* No more crashy

* Almost there

* fix import

* fix more imports

* Code cleanup, Fixed components, Added Tooltip

* Added Env ind and Category pages

---------

Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
2023-03-07 14:59:21 -07:00
Adrian O.V
ce38d4ff6b Slider & Text Input (#12)
* WIP Slider

* Text Input component

* Finalized

* Finishing touches

* remove styles

* Fix sizes and colors

* Fix text input being too restrictive

* Fix enter being ignored

* Fixed duplicate export
2023-03-06 15:26:10 -07:00
Geometrically
74773ade62 Update logo documentation (#14)
* Update logo documentation

* remove redunant class

* fix style on safari

* Fix favicon
2023-03-02 16:29:00 -07:00
Geometrically
3faf777db1 Add vercel conf change package name (#13) 2023-03-02 13:41:34 -07:00
Adrian O.V
09e880a90d Brand components (#11)
* Text + Animated logo

* Update text-logo.md

---------

Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
2023-03-02 13:02:50 -07:00
Geometrically
d5785e87e8 Avatar, Badge, Checkbox, Chips, Pagination components (#10) 2023-03-01 17:31:48 -07:00
Prospector
d4a43bf051 Fix oled mode table alt color (#1018) 2023-02-26 20:46:16 -05:00
Prospector
76c0432f96 Merge pull request #9 from modrinth/make-a-lib
Make current code library + add docs
2023-02-18 23:44:22 -08:00
Jai A
4434796aab Make current code library + add docs 2023-02-18 11:43:12 -07:00
Prospector
0faa24d5d3 Start omorphia 2 (#8) 2023-02-16 15:02:39 -07:00
Geometrically
6c3b87c9b9 Update ads + careers (#994)
* Update ads + careers

* fix prettier errors
2023-02-14 20:22:13 -07:00
triphora
2fb31f5944 Make mod message card background red to stand out more (#987) 2023-02-08 16:41:14 -07:00
Geometrically
8be42e78de Update IP headers to support lowercase (#979) 2023-02-02 11:15:37 -07:00
Geometrically
6d242ee6c3 Fix analytics on vercel (#976) 2023-02-01 14:31:40 -07:00
Geometrically
6c910d2b5f Sync analytics w/ api changes (#975) 2023-02-01 11:34:20 -07:00
Prospector
0caa56e618 Recalculate changelog deduplication when the filters change (#954) 2023-01-30 17:28:16 -07:00
Prospector
e5dc843d6a Fix version pages by non-members being broken (#952) 2023-01-29 12:16:51 -05:00
triphora
3efd1ee325 Fix #934 (#943) 2023-01-23 12:55:31 -07:00
triphora
56a1367322 Fix floating clear message on every project (#938) 2023-01-21 16:25:54 -05:00
triphora
544aba53dc Miscellaneous fixes relating to statuses, et al (#920) 2023-01-21 16:02:11 -05:00
Sasha Sorokin
d68bbbf9a1 GitHub Actions: Use Node 16 to build Knossos (#913) 2023-01-18 19:39:53 -05:00
Geometrically
489737274a Careers button (#921)
* Careers button

* Add link target
2023-01-17 10:11:29 -07:00
triphora
4c1fabffc3 Add nag for adding external resources (#918) 2023-01-14 13:23:10 -05:00
Geometrically
6a52d03329 Landing + other fixes (#909) 2023-01-13 12:01:20 -07:00
Prospector
17f00e6fea Fix moderation queue, moderation status card when approved, and invalid datapack packages (#907)
* Fool behavior

* Add leading underscore to packaged datapack package if it starts with a number

* Hide mod status card for all approved statuses without mod messages

* Fix project id sanitization
2023-01-11 16:21:39 -07:00
Prospector
c67bc33c23 Fix custom license erroring with spaces (#905) 2023-01-11 13:10:59 -08:00
Prospector
bb80dcb4e4 Improve moderation messages and add moderation UI on projects. (#889) 2023-01-11 16:05:11 -05:00
Prospector
8fff3e5389 Add release channel filter to versions pages (#902)
* Add release channel filter to versions pages

* Allow filtering by multiple release channels
2023-01-11 13:59:29 -07:00
Prospector
233109d23e Fix a couple of misc. page errors I noticed (#900)
* Fix for a couple of random bugs I noticed

* Add project status update to NOTIFICATION_TYPES

* Update wording

Co-authored-by: Jai A <jaiagr+gpg@pm.me>
2023-01-11 13:57:06 -07:00
Prospector
a6aa78e3b6 Balance search pages to have view mode-aware max search results (#858)
* Balance search pages to have view mode-aware max search results

* Remove console.log

* Implement #829 to prevent invalid pages when changing the max results

* dammit
2023-01-11 13:49:44 -07:00
Prospector
7536322e53 Remove numbers at the start of slugs when converting to mod ID (#897)
* Remove numbers at the start of slugs when converting to mod ID

* If mod id is all digits, replace with project ID
2023-01-11 13:49:13 -07:00
Prospector
b690e3d149 Add featured icon to featured versions on versions page Closes #769 (#890) 2023-01-11 11:13:24 -07:00
Prospector
aabf270144 Remove default description and license and add checklist nag for license (#892)
* Remove default description, remove default license, and add a checklist nag for setting a license

* Make Unknown license display nicer in License settings

Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
2023-01-11 11:06:29 -07:00
Prospector
61a4f15e53 Prevent user from adding the same dependency multiple times (#859) 2023-01-11 11:03:40 -07:00
Prospector
de212322e2 Fix project settings not allowing you to remove links & trim certain project fields (#895)
* Fix project settings not allowing you to remove links

* Trim project fields

Closes #850
2023-01-11 11:00:42 -07:00
Prospector
cda18fb957 Add support for loading Implementation-Version from MANIFEST.MF for Forge mods (#894)
* Add support for loading Implementation-Version from MANIFEST.MF for Forge mods

* Remove debug lines

* Replace just the key instead of the whole version number
2023-01-11 10:55:55 -07:00
Prospector
011ba5056a Overwrite default notification colors with !important (#898) 2023-01-11 10:54:41 -07:00
Prospector
44c871270b Remove dimming of featured gallery images in project cards (#899) 2023-01-11 10:54:01 -07:00
Prospector
9f6b0e1018 Add latest version URLs (Closes #830) (#901) 2023-01-11 10:52:43 -07:00
Prospector
2d9293732b Make landing page project cards use actual links instead of JS (#896)
* Make landing page project cards use actual links instead of JS

* Make landing page links animate like other clickable elements
2023-01-11 10:32:32 -07:00
jade
d4a131ad31 fix issue #855 (#856) 2023-01-09 18:07:53 -07:00
triphora
fa2316fb28 Fix various gallery issues reported on Discord (#854)
* Fix various gallery issues reported on Discord

Fixes #849

* fix stupidity on my part
2023-01-09 13:04:44 -07:00
triphora
6e5d1fb613 Account for new statuses (#853)
* Account for new statuses

More work is going to be needed for scheduling projects, but this is a stopgap measure to fix #852

* Fix lint

* Why, Prettier, why?
2023-01-09 13:03:57 -07:00
Geometrically
e45f0f0299 Fix text wrap (#841)
* Fix overflow search

* Make animation infinite
2023-01-07 23:26:39 -07:00
Prospector
62125d0284 Sort featured versions and remove heart fill when not signed in 2023-01-07 19:41:12 -08:00
Geometrically
d5ffede5ea Add changes from prod to master (#837)
* redo 6346b5b

* Fix incorrect caps

* Fix reduced motion
2023-01-07 19:40:34 -07:00
Prospector
212bb33142 Projects overhaul for creators (#827)
* Projects page

* Continue work on bulk edit

* editLinks is now bulkEdit

* Bulk Edit Links completed

* Edit URL clear fields.

* Create project button + other bulk buttons.

* Pagination (w/o reactivity.)

* Apply suggestions from code review

Co-authored-by: triphora <emmaffle@modrinth.com>

* Sorting fixed, broken page count though?

* Only make editable projects selectable + remove delete button

* Shorthand

* Start using computed

* Fix pagination

* Add Pagination Switching

* Final Style Changes

* Cleanup

* Action Affects dropdown

* Switch to checkbox swizzle

* Projects dashboard, the most hellish thing I have ever worked on

* Rewrite project dashboard without tables

* why's that there

* Fix mod message icon

* New project settings page

* Remove extra slash

* Bulk project route and improve styling of links UI

* Remove beta label from Monetization

* Relevant page links in project settings

* Don't vertically center header rows

* Improve error messages, add remove project icon button, add saving feedback, begin project checklist, fix license settings

* Remove contextual link from project settings, disable WIP checklist

* Fix bulk edit

* Project checklist, add featured gallery image to project pages, fix random bugs

* Remove old check

* Remove icon border on grid mode and hide project status card when unnecessary

* Fix build

* Make checklist progress smaller and add collapsing

* Remove uneven gap on nav cards

* Improve wrapping of checklist

* Replace project settings header link with status

* Fix bugs + status stuff

* Fix warns + compile error

* Update wording

* Hide environment type nag for project types without it

* Make member dropdown match

Co-authored-by: mineblock11 <93472213+mineblock11@users.noreply.github.com>
Co-authored-by: triphora <emmaffle@modrinth.com>
Co-authored-by: Jai A <jaiagr+gpg@pm.me>
Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
2023-01-07 18:37:47 -07:00
Geometrically
1d8c80c062 New landing page (#834)
* New landing page

* Edit gradient

* User + Creator sections, some css cleanup

* Most stuff

* Finish page (mostly)

* Compress images

* Moar compression

* Fix mobile zoom + adjust wording

* add utm stuff to subscribe link

* Fix border overlay

* Remove redundant CSS class

* Fix most issues (?)

* Add notifs showcase

* Spacing changes, update copy, fix lag

* add and

* Update spacing

* save work

* Update mobile support

* Update discovery copy

* Light theme

* Adjust logo banner on various screen sizes

* Add launcher links

* Oxipng

* Switch to cdn links for images

* Add animation

* Fix animation

* fix tags

Co-authored-by: Emma Cypress Pointer-Null <emmaffle@modrinth.com>
2023-01-07 18:04:43 -07:00
Robert
e8e11257d2 Make summaries and bios wrap (#833) 2023-01-06 04:49:57 -08:00
Geometrically
b4236b9a95 Fix duplicate version nums + etc (#831)
* Fix duplicate version nums + etc

* Update link info

* Remove useless loading conditions

* Update pages/legal/privacy.vue

Co-authored-by: triphora <emmaffle@modrinth.com>

* Update plugins/xss.js

Co-authored-by: triphora <emmaffle@modrinth.com>

Co-authored-by: triphora <emmaffle@modrinth.com>
2023-01-03 19:06:30 -07:00
Geometrically
d2b1404907 New gallery creation/editing/deleting UI (#826)
* New gallery creation/editing/deleting UI

* Finish new gallery UI

* port dp changes here

* Add ordering fix optional fields

* Fix dropping

* Fix fmt

* Fix version creation broken, edit issues, project type setting

* Update gallery in search
2022-12-31 23:47:47 -07:00
triphora
f11aab6c19 SPDX: Fix niche issue with checkbox (#825) 2022-12-29 16:55:00 -07:00
Geometrically
1f133dbcd0 Datapack support (#815)
* Shader support PR

* Make search page work

* Fix env showing

* Make moderation look reasonable

* Fix search for shaders

* Datapack support

* Make file types work + datapack inferring

* Add editing to file types

* Finish datapack file generation

* Fix bugs, make forge support work

* Fix inconsistent data pack label

* Final fixes
2022-12-29 09:59:41 -07:00
triphora
879576b613 Add animated logo in header and update copying info (#819) 2022-12-27 19:11:03 -05:00
triphora
7a105a1538 Fix issues geo discovered (#818) 2022-12-23 17:30:32 -07:00
frikinjay
7408d7bc95 Change 'changelog-item' display to block from flex. (#812) 2022-12-23 14:36:51 -05:00
triphora
1d9820a7c9 Force authors to use the project status sidebar (#810) 2022-12-23 14:36:14 -05:00
beansquared
c536f7d342 Fix formatting of money values (#784)
Fixes https://github.com/modrinth/knossos/issues/736
2022-12-23 14:35:55 -05:00
Arbee
6d9dfb5deb make long Projectnames wrap with a '-' (#771)
fixes https://github.com/modrinth/knossos/issues/770
2022-12-23 14:35:41 -05:00
Max Henkel
a3d469a101 Persistent version filters (#700)
* Add version filter query string

* Add query parameter for showSnapshots

* Empty commit

* Use input event instead of watch

* Remove validateFilters method

* Shorten query params

* Inline getAsQuery

* Use fetch instead of mounted

* Await updateQuery

* Remove support for query parameters as array

* Await updateQuery
2022-12-23 12:35:04 -07:00
Geometrically
97ecb0a5d6 Shaderpack support (#798)
* Shader support PR

* Make search page work

* Fix env showing

* Make moderation look reasonable

* Fix search for shaders
2022-12-20 13:47:41 -07:00
Geometrically
6f58e9e7bb Redo version page (#777)
* Redo version page

* More work on editing page

* Make saving work

* Finish version editing

* Version creation (base)

* Add creation buttons

* Add file uploader to versions page

* Add version file parsing

* Finish PR

* Fix version page responsiveness and use more consistent card design

* Whoops that wasn't supposed to be there

* Fixes + allow whole page dragging

* Re-add lost merge data

* Remove debug line

* Move back to list btm

Co-authored-by: Prospector <prospectordev@gmail.com>
2022-12-20 11:15:31 -07:00
stairman06
0de19a09ad Fix follow button being filled in when signed-out (#811) 2022-12-17 14:16:12 -05:00
Antikyth
17a56189dc fix "open-source" link on homepage's whitespace (#807) 2022-12-14 19:39:19 -05:00
triphora
520f9801be Corresponding frontend PR to modrinth/labrinth#449 (#763)
Co-authored-by: Prospector <prospectordev@gmail.com>
Fixes https://github.com/modrinth/knossos/issues/597
Fixes https://github.com/modrinth/knossos/issues/593
Fixes https://github.com/modrinth/knossos/issues/768
2022-12-14 19:36:28 -05:00
triphora
03a6b0311f Fix #673 (#687) 2022-12-14 19:36:04 -05:00
jade
1a922d41df Fix modal URL field autofill allowing invalid characters (#790)
Closes #785
2022-12-06 18:13:18 -05:00
Geometrically
050f8f3c81 Fix lint errors (#794) 2022-12-06 18:12:38 -05:00
HyperSoop
5fc32c7b85 Fix a small wording mistake (#791) 2022-12-06 15:57:33 -07:00
Prospector
964fa69fb4 Add gallery view to search pages (#773) 2022-12-03 10:29:49 -08:00
Trash Panda
f1a33db800 Fix header spacing (#787) 2022-12-01 17:35:37 -05:00
Geometrically
2e3b56c52f Fix ads not loading (#781) 2022-11-28 13:11:27 -07:00
Geometrically
8f137cf49d Security notice (#767)
Co-authored-by: triphora <emmaffle@modrinth.com>
2022-11-26 21:16:34 -05:00
Sasha Sorokin
de170ebdd2 Fix notifications fetching (#776) 2022-11-26 17:40:15 -05:00
triphora
e5ae1db49c Prevent people from selecting unknown environment (#775) 2022-11-26 13:35:13 -05:00
Sisby
63035196af Re-word "my profile" to "your profile"/"this profile" (#766) 2022-11-22 12:51:06 -05:00
Geometrically
e08d803a33 Add project redir + fix version 404 (#762) 2022-11-20 21:18:30 -07:00
Geometrically
df1a939798 Add adrinth link (#761)
* Add adrinth link

* Use article instead of aside to improve SEO

* Fix bad change

* Fix #737
2022-11-20 20:47:32 -07:00
Geometrically
848f0db3d1 Fix user errors when logged out (#759) 2022-11-20 19:23:50 -07:00
Geometrically
9e2d47eab5 Fix user page err (#758) 2022-11-20 18:32:51 -07:00
Prospector
88fa103acb Improve badges and work on a more unified color scheme for random colors (#756) 2022-11-20 13:57:44 -08:00
Prospector
9849bc055c Use safe insets on bottom of screen (#755) 2022-11-20 12:57:53 -08:00
Prospector
1cf75a7169 Improve accessibility on contrast themes (#751) 2022-11-20 12:50:10 -08:00
triphora
e297dff0d4 Massively improved moderator message visibility (#754)
Co-authored-by: Prospector <prospectordev@gmail.com>
2022-11-20 15:49:29 -05:00
triphora
aafd7ed21f Add feature flag for opening external links in a new tab (#749)
Closes https://github.com/modrinth/knossos/issues/438
2022-11-20 12:43:01 -08:00
triphora
ab2c31aa8a Improve user deletion workflow (#686) 2022-11-20 00:02:58 -05:00
Geometrically
47111819e7 Fix heart not showing up (#752) 2022-11-18 09:22:07 -07:00
triphora
ddd3f7c196 Fix text box resizing (#750)
Closes #416
Closes #475
Closes #525
2022-11-17 22:06:07 -05:00
triphora
1738f92ce2 Make download/follower displays consistent (#746)
Closes #602
2022-11-17 22:05:52 -05:00
Ennui Langeweile
074695b50c Remove bottom padding on <details>' last element (#748)
* Remove bottom padding on <details>' last element

* Fix linting screwup, refine the fix

* Fix linting for real
2022-11-17 22:03:02 -05:00
Sasha Sorokin
95ac136720 Bump Vue to 2.7 (#727)
List of changes in Vue 2.7:
https://blog.vuejs.org/posts/vue-2-7-naruto.html
2022-11-15 12:43:01 -07:00
Prospector
ecced27853 CMP Update Hotfixes (#729)
* Remove WIP for getting paid

* Fix beta badge border

* Update money formatting

* Add required "not affiliated with Mojang" notice

* Replace search video on home page
2022-11-15 12:41:38 -07:00
Sasha Sorokin
e86aa6b541 Fix project layout on right not working correctly (#730)
Fixes #726
2022-11-15 12:41:28 -07:00
Geometrically
91f74b44a0 New ads (same size + layout) (#735) 2022-11-15 08:22:46 -07:00
Geometrically
35d8e28b8c Update privacy policy (#724) 2022-11-12 19:16:49 -07:00
triphora
26a6af4ab2 Fix 404 error when creating a resource pack (#723)
Redo of #681
2022-11-12 18:11:17 -07:00
Geometrically
20785926e2 Rewrite Parity (#647)
* Rewrite Parity

* Update SEO, fix modals, add dashes to changelog

* Edit create version title

* Cache tags, SEO for search/partial noscript support, notifications fix

* Deploy?

* Fix vercel config

* Fix it again

* Finish user editing

* Remove broken docker build

* Switch reports to modals

* Update project card

* Navbar line animation in most places

* Add chips

* Move to navlink query params

* remove autogen file

* Add copy code

* Fix webkit text box outlines, port report modal

* Update error page

* Switch to avatar component

* Make keyboard nav work

* Fix team member spacing

* improve project ID display (#676)

* Bug fixes

* Update OG site title

* More fixes

* Design tweaks

* Fix card wrapping on mobile

* Darken light theme color a little

* Sidebar navigation for settings, notifications, and moderation

* Change follow icon from a heart to a bell

* Revert "Change follow icon from a heart to a bell"

This reverts commit e30b46ec5d93c57df847be88eba123c7419dd03b.

* Change follows icon in settings

* AaaaUUUUUUUGghghhhhhhhh

* Project sidebar transparent button animations

* Update file input button styling and change icon remove button text

* Fix environments filter condition being inverted

* Remove -> revert

* Improve readability of warning banners on light mode

* Fix mobile menu button colors

* Clean up notifications page more

* Creator dashboard and monetization work

* Add processing fees declarations and acknowledgement box

* Beta badges

* Downgrade Nuxt Vercel Builder

* Update the style of button groups to be more consistent

* More button consistency

* Remove desktop navbar on mobile

* Update home page progress indicators

* Fix page jumping (Thanks @stairman06)

* Make checkbox checked style consistent with other selection indicators

* More home page updates

* Properly reset NavRows

* Move filters menu on mobile

* Stylized checkbox updated to match active styling

* Filters icon

* Respect prefers-reduced-motion

* Add most backend payouts changes (untested)

* Finish tested payouts code

* Allow monetization unenrolling

* No longer use brand color for active highlights on standard nav elements

* More consistent button group on project page

* Rounded tables

* Fix some things (#716)

* Team member fixes + re-add changelog/versions stuff

* Remove dummy data

* The great CSS refactor

* Remove commented out css

* Give modals the legacy label styles and update profile edit labels

* Fix active chip size

* Remove shadow from selected chip

* Require email set for CMP

* Update styles of notifications to universal-card

* Equivalent exchange, trading some jank for some less bad jank

* Fix all gallery buttons being missing when there is only 1 image

* Update project creation modal

* Make beta badge less bright

* Beta badge heading styling

* Update withdraw processing fees info

* Remove redundant label

* be

* Fix inverted logic

* 2% is 0.02

* Add toggle to turn off alpha modpacks banner

* Why warning button?

* Add more footer links (#719)

* Add more footer links

* Move twitter

* Make items on user pages less comically large and move ad above navigation

* Bump text down a little on home page

* Update favicon colors

* Remove task list package and change default description to use bullet points

* I don't remember why I made this important but let's not

* Ah, yes

* this doesn't actually need to be important

* Align items in input groups

* Adjust some spacings and clear creation modal on opening

* Versions now clickable

* Add link to edit page to default description

* Improve monetization information text

* Make wrapped text inputs not shrink

* Make chips work better

* smol margin on clear mod message button

* Allow non-authenticated users to access settings

* Remove settings anchors

* Fix versions page button style on firefox

* Add advanced rendering toggle

* Update slug input and icon card in project edit page

* Legal sidebar

* h1 at beginning of description no longer has top margin

* Use universal card for legal pages

* Update email addresses on legal pages

* Update various page titles and descriptions for consistency

* Various fixes and consolidation to API URL retrieval

Prevents a bug where it's possible to generate the tags under one API, switch the API, and still have tags leftover from the old API

Also finally fixes staging URL being jank

* Make the theme button show regardless of login state

Also remove the change theme from the user dropdown because it's very redundant with the several other ways of changing theme

* Make mobile profile dropdown ordering consistent with desktop

* Change the base url back

* Revert "Change the base url back"

This reverts commit c1da89fddb83776b39f626eab33c8dc67f8a75e4.

* constantize

* Tiny fixes (#722)

* Box-shadow chip outlines

* Show settings when signed out

* mods -> projects

* space

* Beta badge border

* Slug input overflow fix, scrollable

* 🙈 it will all be okay 🙊 this is just temporary 🙉 😭😭 forgive me

* Fix minor bugs

* fix moderation  page

* More fixes

* Temp fix for download button

* BEGONE TABLES

* Fix download button

Co-authored-by: Ryan Cao <70191398+ryanccn@users.noreply.github.com>
Co-authored-by: Prospector <prospectordev@gmail.com>
Co-authored-by: stairman06 <36215135+stairman06@users.noreply.github.com>
Co-authored-by: triphora <emmaffle@modrinth.com>
2022-11-12 17:57:40 -07:00
Geometrically
66d0ee8156 Switch back to EthicalAds (#701)
* Switch back to EthicalAds

* Update privacy policy

* Cleanup a little
2022-10-26 10:21:03 -07:00
Geometrically
6138b060d7 Fix typo in messages (#697) 2022-10-21 08:09:46 -07:00
Andre_601
308d661d7e Add Prism Launcher (#696) 2022-10-20 16:48:40 -04:00
GreenTriangle
4e106c2355 fix the "pack creators" I added by accident (#694) 2022-10-17 18:34:37 -04:00
GreenTriangle
456160fa29 remove link to PolyMC (#693) 2022-10-17 17:41:44 -04:00
HERO
b553ac58d3 Fixed favicon not loading in some cases (#679) 2022-10-06 11:35:11 -04:00
evan
2c26f43035 Fix special characters in gallery title/description (#683) 2022-10-06 11:30:10 -04:00
Sasha Sorokin
1b49844012 Bump @nuxtjs/color-mode to v2.1.1 (#678) 2022-09-26 19:38:33 -04:00
wafflecoffee
75d45e8907 Quick fix #668 (#669) 2022-09-17 17:52:35 -04:00
wafflecoffee
b78bd5d6fd Prevent modpacks from manually adding dependencies (#575) 2022-09-17 15:26:16 -04:00
Sasha Sorokin
5d53344b75 More reliably detect ad load faults (#661)
Detecting that ad has failed to load with timeout is not accurate and
won't work on slow connections. This commit fixes that by changing
detection to use 'onerror' event on <script> tag instead, which will be
triggered if ad script fails to load due to blocking.
2022-09-12 08:14:32 -07:00
Geometrically
7cd58bd534 Fix stacked ads (#660) 2022-09-11 19:11:45 -07:00
Andre_601
9826bf67c2 Minor typo correction (#657) 2022-09-11 08:46:10 -04:00
Geometrically
350fe124d0 Update privacy policy (#656) 2022-09-09 09:31:36 -07:00
Geometrically
20aac83e5e Handle double ads shown (#655) 2022-09-08 20:50:52 -07:00
Geometrically
9d1c822ba1 Fix adblock message again (#654) 2022-09-08 20:42:08 -07:00
Geometrically
b8d46e2863 Fix adblock message (#653) 2022-09-08 20:25:39 -07:00
Geometrically
cd2f2d42a3 Try CarbonAds (#629)
* Try CarbonAds

* Move location

* add border, fix adblock msg

* Fix advertisement label look (#636)

Ever since changes for Carbon ads were introduced, the label did not
match the appearance of the card, leaving the bottom right corner of the
card not round. With more recent changes, where border was added, that
became even more apparent - now the border covers the label, which does
not look good; this effect only becomes worse when zooming.

This commit attempts to mitigate these issues with the following:

- To fix the border issues, label's absolute position is now calculated
  from the card wrapper, where the border is applied. This allows label
  to cover the border for seamless look. That is done by changing
  position of the card wrapper to relative instead of doing so for the
  ad contents container.

- The label now tries to take over the border, to do so the bottom and
  right relative positions have been changed to -3px.

- To account for the position change, the label is now a bit more
  padded, to make text content of it to look more or less as before,
  otherwise it would shift a bit. Not sure if the padding changes are
  accurate, but it does look close to how it looked before.

* Fix message again

* Update user ads position

* Remove privacy toggles (placebo and didn't do anything)

* Remove other code

* Link docs page

Co-authored-by: Sasha Sorokin <10401817+Brawaru@users.noreply.github.com>
2022-09-08 17:33:13 -07:00
Geometrically
4bfab89292 Fix misplaced buttons on versions page (#646) 2022-09-04 16:54:06 -07:00
Geometrically
1d3e8aedcd Fix required indicators showing on view page (#645) 2022-09-04 15:47:18 -07:00
kevoh1516
75c41644c6 Enhance version creation (#535) (#616) 2022-09-04 10:56:32 -07:00
Sasha Sorokin
3e221f3b6a Minor fixes for "See all" link design (#627)
- Now styled as a proper link.
- Change :focus to :focus-visible to avoid link getting stuck in that
  'hovered' state because focus does not actually change (it deffo
  should though, something to fix in the future - should be one
  fragment change).
- Removed all padding and transition.
2022-09-03 22:34:19 -07:00
Geometrically
535abdc481 Fix mobile navbar (#634) 2022-08-27 16:20:20 -07:00
Geometrically
3684126250 ???????? (#633) 2022-08-27 15:59:36 -07:00
Andre_601
d3fc34c824 Don't close dropdown when selecting loaders (#632) 2022-08-27 16:03:27 -04:00
Sasha Sorokin
8769b5d1b5 Improve design of "See all" link in feat. section (#625) 2022-08-24 13:30:57 -04:00
Ryan Cao
59bb132dd7 Add support for GitHub-styled color scheme dependent images (#617) 2022-08-23 22:38:22 -04:00
Igor Bedesqui
8a53fa0aab Add "See all" link next to featured versions (#550) 2022-08-23 22:16:47 -04:00
jade
71f42e405d Fixed description * wrap in project create page (#623) 2022-08-23 22:14:40 -04:00
Geometrically
64b89dd226 Fix search categories (#620)
* Fix search categories

* Invert condition
2022-08-22 15:29:03 -07:00
Geometrically
27d6b855b8 Fix loaders not showing (#622)
* Fix loaders not showing

* p

Co-authored-by: wafflecoffee <emmaffle@modrinth.com>
2022-08-22 15:25:42 -07:00
Geometrically
20c4f0dc10 Fix plugin URLs, display, redirects (#619)
* Fix plugin URLs, display, redirects

* Fix user profile + some redirects not working
2022-08-20 11:08:21 -07:00
Arbee
7c166d85e1 Fix inconsistent donation icons and add OpenCollective (#609)
resolved #608
* fixes Inconsistent donation icons and colours #608
replaces all donation png's with svg's from https://simpleicons.org
removes svg files with "-svg" at the end

* fixes the issues due to vscode formatting the code

* fixes Discord icon
fixes some formatting errors, caused by copy& from the previous commit with wrong formatting

* fixed else-if's
added Open Collective Icon
I couldn't find the icon for the Economy Category from Feather

* added unknown_donation.svg
replaced unknown donation icon
removed old unknown.svg icon

* renamed unkown donation icon for consistency

* somehow the cmmits before didn't add the new Icon
Fixed formatting issues (again)

* fixes formatting issues (I need to look into that)

* fixed else-if's that somehow got reverted

* Fix lint

* Strict equals

* Fix lint again
2022-08-18 10:34:27 -04:00
jade
093080894b added support for the kbd tag in markdown (#611) 2022-08-18 09:51:34 -04:00
Geometrically
9a2243da9f Fix devtools being enabled in prod (#601) 2022-08-14 22:18:13 -07:00
Geometrically
0f5aa9f8d9 Fix version sorting (#600) 2022-08-14 15:20:42 -07:00
Geometrically
673f7a82d1 New features (#592)
* New features

* Lots of bug fixes

* Fix respack creation

* Improve mobile nav with more project types

* Fix resolution sorting and remove icons

* Move cookie consent to top on small devices to get out of the way of navigation

* Move cookie consent + fix hydration

* Fix project editing + update search features

* Centralize hardcoding of loader/category names, fix cookie consent shadow, fix mobile navbar rounding

* Fix plugin platforms formatting

* Kitchen sink!

* Add support for display names

* LiteLoader formatting

* Fixed "show all loaders" toggle not resetting when changing pages

* Allow multiple loaders in version filter controls

* Fix clear filters button

* Revert "Add support for display names"

This reverts commit 370838763d86bcae51bf06c304248f7a1f8fc28f.

* Let's see how this goes. Upstream filters, attempt 1

* github? hello?

* No more "Server mod" on plugins

* Fix formatting of project types in project creation

* Move where project creation sets the resource pack loader

* Allow setting pixelated image-rendering

Allows to apply 'style' attribute to IMG tags with value
'image-rendering' set to 'pixelated', which can be useful for people who
use pixel art in their READMEs (to demonstrate items, for example).

* fix user page + hydration issue fix from Brawaru

* Rename to proxies

* Make categories use title case

* Always show project type on moderation page, improve project type display on project pages

* Remove invalid key

* Missed a check

* Fix browse menu animation

* Fix disabled button condition and minimum width for 2 lines

* Body -> Description in edit pages

* More casing consistency issues

* Fix duplicate version URLs

* Fix version creation

* Edit URLs, fix privacy page buttons

* Fix notifications popup overlaying

* Final merge fixes

Co-authored-by: Prospector <prospectordev@gmail.com>
Co-authored-by: Sasha Sorokin <10401817+Brawaru@users.noreply.github.com>
2022-08-14 12:42:58 -07:00
wafflecoffee
87251878a5 Merge pull request #5 from jadelily18/generate-docs-spelling
fixed minor spelling mistake

[no ci]
2022-08-12 06:37:49 -04:00
wafflecoffee
3a14f363d9 Merge pull request #4 from frikinjay/main
object-fit property to contain to prevent avatar stretching.
2022-08-12 06:37:10 -04:00
jade
84921f04cd fixed minor spelling mistake 2022-08-11 23:00:55 -05:00
frikinjay
b16475b8bd Change the link to Modrinth CDN from #581 (#582)
* Fix the bunny fonts link from #580

* Change the link to Modrinth CDN from #581
2022-08-06 12:06:55 -07:00
Geometrically
848e26eec6 Revert "Additional categories + fix project creation" (#591)
This reverts commit 62e86f9507.
2022-08-02 20:28:43 -07:00
Jai A
62e86f9507 Additional categories + fix project creation 2022-07-31 20:19:41 -07:00
frikinjay
5b306f365e object-fit property to contain to prevent avatar stretching. 2022-07-31 11:00:33 +05:30
github-actions
ce8950da43 Bump package version [skip ci] 2022-07-29 20:46:43 +00:00
venashial
0e1c7cd8ed Add landing page data for statistics & contributors 2022-07-29 13:44:34 -07:00
github-actions
fba6dd750d Bump package version [skip ci] 2022-07-29 06:37:10 +00:00
venashial
e73b6bc39e Move fonts folder + Update setup docs for Vite 2022-07-28 23:34:43 -07:00
github-actions
fa3cbbee67 Bump package version [skip ci] 2022-07-29 05:52:18 +00:00
venashial
029e52eb5f Fix up setup docs and leftover CSS 2022-07-28 22:50:09 -07:00
github-actions
13914507e8 Bump package version [skip ci] 2022-07-29 05:48:24 +00:00
venashial
533f0213e3 Self-host fonts + Move Vite plugins export 2022-07-28 22:45:53 -07:00
github-actions
95d6dac055 Bump package version [skip ci] 2022-07-26 21:05:14 +00:00
venashial
2001d7f02a Fix scroll not being reset 2022-07-26 14:01:59 -07:00
github-actions
bae5b70023 Bump package version [skip ci] 2022-07-26 20:34:59 +00:00
venashial
8341d343d3 Fix noScroll & add prefetch to NavRow 2022-07-26 13:32:09 -07:00
frikinjay
278a56e580 Fix the bunny fonts link from #580 (#581) 2022-07-26 11:25:43 -07:00
moehreag
6ab44ccf0c Switch from google fonts to bunny (#580) 2022-07-26 13:32:12 -04:00
github-actions
918898d6fe Bump package version [skip ci] 2022-07-17 00:08:07 +00:00
venashial
566e5dea57 Run CI on pull requests + Test packaging 2022-07-16 17:04:53 -07:00
venashial
5d1bfa18b1 Merge pull request #3 from Wuzado/main
Add svelte2tsx to fix package builds
2022-07-16 17:03:41 -07:00
Wuzado
800540ce7f Add svelte2tsx to fix package builds 2022-07-17 01:49:13 +02:00
github-actions
74ee74365e Bump package version [skip ci] 2022-07-16 23:30:45 +00:00
venashial
75f6235111 Fix sveld plugin 2022-07-16 16:28:15 -07:00
venashial
fe415cbd77 Upgrade to Vite 3 2022-07-16 16:15:06 -07:00
Emma, Cypress, Rose ⚘
dc69c0d3e5 Implement new content rules (#570)
* Overhaul of the legal pages (rules, terms, privacy policy)

Resolves MOD-90
Resolves MOD-91

* Revert changes to privacy policy & terms

The privacy policy and terms are gonna require a lot more effort to review and we just want the rules stuff in ASAP

* CI fix

* Fix the headings of all things

* Update content section of terms
2022-07-16 15:35:05 -04:00
UbiOne
40b3f39249 Hoverable "joined" fields on user pages (#555) 2022-07-16 15:03:56 -04:00
Andre_601
a9acc55735 Create config.yml for issue selection (#566) 2022-07-16 15:03:47 -04:00
github-actions
9c07612274 Bump package version [skip ci] 2022-07-11 20:25:06 +00:00
venashial
3e87d88825 Add .link underline 2022-07-11 13:23:19 -07:00
github-actions
e280c0c5ca Bump package version [skip ci] 2022-07-10 22:41:44 +00:00
venashial
64f750a097 Fix lint 2022-07-09 14:53:03 -07:00
venashial
48bc18017e Add Code component 2022-07-09 14:51:04 -07:00
github-actions
035fa3be3f Bump package version [skip ci] 2022-07-03 05:16:10 +00:00
venashial
f62723c274 Add .file class + Generator user agent 2022-07-02 22:14:20 -07:00
Geometrically
aca59019c1 Fix analytics env error (#562) 2022-07-02 15:50:01 -07:00
Geometrically
2186ea9a90 Use nuxt lifecycle hook for analytics (#561) 2022-07-02 11:23:24 -07:00
Geometrically
928f6e7009 Add ariadnee (#560) 2022-07-01 20:15:01 -07:00
github-actions
64ed5fca3b Bump package version [skip ci] 2022-07-02 00:22:02 +00:00
venashial
4c7fc79843 CheckboxList, Modal, Select, & .link-group fixes 2022-07-01 17:20:08 -07:00
Emma Cypress ⚘
153d77359f Add more banners and warnings for some statuses & other fixes (#558)
* Add more banners and warnings for some statuses & other fixes

* Remove unused css
2022-07-01 08:20:35 -07:00
github-actions
c8a2fb92d2 Bump package version [skip ci] 2022-07-01 00:47:52 +00:00
venashial
dcc252b371 Update Select component 2022-06-30 17:42:15 -07:00
github-actions
846aadd7c6 Bump package version [skip ci] 2022-06-30 20:18:51 +00:00
venashial
3c604db234 Add .member hover style + NavRow & parse fixes 2022-06-30 13:17:07 -07:00
github-actions
cb3efb1c1d Bump package version [skip ci] 2022-06-30 19:20:06 +00:00
venashial
1423db35eb Fix NavRow on mobile 2022-06-30 12:17:55 -07:00
Geometrically
cb2a7a88fc Fix auth URL using staging (#556) 2022-06-26 16:17:55 -07:00
stairman06
e530111283 Version search fix (#554) 2022-06-26 12:52:05 -07:00
Emma Cypress
332c4a1f98 Add note about adding multiple files to a version (#546)
* Add note about adding multiple files to a version

Closes #545 as not planned

Related to modrinth/docs#50

* Fix note showing on version.vue when it shouldn't
2022-06-25 22:10:22 -07:00
Emma Cypress
8541b95d8b Add Embedded dependency type (#553)
* Add Embedded dependency type

* Why, lint, did you not complain about this in my dev env???
2022-06-25 22:09:10 -07:00
Emma Cypress
e4584e3f04 Force file input to accept file type based on project type (#552) 2022-06-25 22:08:50 -07:00
Geometrically
168ec9092a Fix random Nuxt internal server errors (#551)
* Fix random Nuxt internal server errors

* Fix ratelimit key being exposed

* Add GDPR clarification
2022-06-25 16:46:10 -07:00
github-actions
914b6c757d Bump package version [skip ci] 2022-06-25 20:25:26 +00:00
venashial
48d10d701e Expose fetching from `send function 2022-06-25 13:23:39 -07:00
github-actions
6479e94c4f Bump package version [skip ci] 2022-06-25 20:10:16 +00:00
venashial
fb3a9f1f29 Fix send function headers error 2022-06-25 13:08:20 -07:00
github-actions
e9d7df8862 Bump package version [skip ci] 2022-06-25 19:33:51 +00:00
venashial
123de56f38 Refactor setup documentation 2022-06-25 12:32:03 -07:00
github-actions
8627132d6a Bump package version [skip ci] 2022-06-25 07:40:01 +00:00
venashial
3ef9c4c626 Add .gitkeep to /generated to fix tsconfig 2022-06-25 00:37:57 -07:00
venashial
aec03294d6 Create send function for API requests 2022-06-25 00:17:42 -07:00
github-actions
2e6e1f4060 Bump package version [skip ci] 2022-06-25 05:53:31 +00:00
venashial
07f1103784 Add registry-url to workflow 2022-06-24 22:52:02 -07:00
Jai A
ffc8f133c9 Fix auth URL compute 2022-06-24 22:44:47 -07:00
github-actions
507f2a4c7c Bump package version [skip ci] 2022-06-25 05:42:29 +00:00
venashial
1c9e9b9367 Use npm for publishing 2022-06-24 22:41:05 -07:00
github-actions
4d81775f8d Bump package version [skip ci] 2022-06-25 05:32:53 +00:00
venashial
cf042931b6 Use alternate NPM_TOKEN config for release 2022-06-24 22:31:11 -07:00
github-actions
f6a931599a Bump package version [skip ci] 2022-06-25 05:28:29 +00:00
venashial
1b17049e94 Cut down highlight.js size 2022-06-24 22:26:49 -07:00
venashial
81c039d645 Fix packaging to correctly handle utils/ 2022-06-24 20:36:16 -07:00
github-actions
e245edc843 Bump package version [skip ci] 2022-06-23 06:18:30 +00:00
venashial
8494ed8ac3 Add NavRow animation 2022-06-22 23:17:00 -07:00
stairman06
371f14d2e4 Show report button when logged out (#548) 2022-06-22 22:33:57 -04:00
github-actions
1109fbfcc3 Bump package version [skip ci] 2022-06-22 05:48:57 +00:00
venashial
ff88f242fa Run pnpm format 2022-06-21 22:47:15 -07:00
venashial
bd3dd69ae1 Fix package.json + NavRow indicator 2022-06-21 22:37:26 -07:00
github-actions
06780c2805 Bump package version [skip ci] 2022-06-22 04:30:34 +00:00
venashial
e44e227af6 Reorder workflow pnpm installation 2022-06-21 21:29:17 -07:00
venashial
4ca06a9218 Fix workflow NPM publish auth secret 2022-06-21 21:25:22 -07:00
venashial
9e29761581 Fix NPM package script 2022-06-21 19:11:26 -07:00
venashial
110c389d85 Fix packaging index.ts 2022-06-21 19:08:22 -07:00
github-actions
d856ed89ff Bump package version [skip ci] 2022-06-22 00:26:48 +00:00
venashial
fa747515e9 NavRow animation improvements 2022-06-21 17:25:07 -07:00
venashial
b15c9d7655 Fix release workflow (replace pnpmnpm) 2022-06-21 00:45:16 -07:00
venashial
15c3ee4af2 Update release workflow 2022-06-21 00:41:53 -07:00
venashial
748248deab Fix formatting + Update README 2022-06-21 00:38:52 -07:00
venashial
70671ac672 Merge branch 'main' of https://github.com/modrinth/kleos 2022-06-20 23:50:41 -07:00
venashial
f70f670ed3 Skip Typescript compilation on packaging 2022-06-20 23:50:33 -07:00
github-actions
4b685716d5 Bump package version [skip ci] 2022-06-20 22:35:38 +00:00
venashial
252c812125 Add FileUpload component 2022-06-20 15:34:45 -07:00
John Paul
69a437a1a8 StatelessFIleInput: add maxSize and showIcon (#544) 2022-06-20 17:04:08 -04:00
github-actions
b8b36b6248 Bump package version [skip ci] 2022-06-20 04:46:09 +00:00
venashial
28e24cb9d6 .link-group minor fix 2022-06-19 21:45:24 -07:00
github-actions
2a0609fdb8 Bump package version [skip ci] 2022-06-20 04:28:30 +00:00
venashial
b3233cab71 .link fixes + Add Modal defaultData 2022-06-19 21:27:20 -07:00
Prospector
405a3eda60 Nuxt Season Finale (#531)
Co-authored-by: Emma Cypress Pointer-Null <emmaffle@modrinth.com>
2022-06-18 21:39:53 -04:00
github-actions
49acfc496b Bump package version [skip ci] 2022-06-19 00:32:08 +00:00
venashial
a1932fa3dc sm Modal size 2022-06-18 17:31:29 -07:00
github-actions
87a8706299 Bump package version [skip ci] 2022-06-18 22:41:11 +00:00
venashial
92ec46147b Modal fixes 2022-06-18 15:40:17 -07:00
John Paul
2bda7566b4 Reset version page state when currently selected version changes (#543)
* reset versions state on current version change

* 'mode' should not be reset
2022-06-17 22:19:15 -07:00
github-actions
43488cb57b Bump package version [skip ci] 2022-06-18 02:58:57 +00:00
venashial
137fbb638b Refactor folder structure 2022-06-17 19:58:01 -07:00
John Paul
76ed8d58fa Create StatelessFileInput, use in version.vue (#537) 2022-06-15 17:49:42 -04:00
github-actions
8204139df8 Bump package version [skip ci] 2022-06-14 04:44:37 +00:00
venashial
7926684930 Add Modal triggers 2022-06-13 21:43:57 -07:00
github-actions
73946a4ede Bump package version [skip ci] 2022-06-13 19:49:44 +00:00
venashial
aa88115d45 Add Field 2022-06-13 12:48:43 -07:00
github-actions
496c08b075 Bump package version [skip ci] 2022-06-13 18:47:51 +00:00
venashial
2388d1782f Add license + Fix CI 2022-06-13 11:46:57 -07:00
github-actions
e0e1c59d41 Bump package version [skip ci] 2022-06-13 18:35:46 +00:00
venashial
f2cb6ce972 Add Modal 2022-06-13 11:34:46 -07:00
github-actions
ed3535e9c9 Bump package version [skip ci] 2022-06-11 02:14:34 +00:00
venashial
62f1830197 Improve :focus accessibility & Polish animations 2022-06-10 19:13:28 -07:00
Geometrically
2fb62fe8be Add ratelimit key header on SSR (#532) 2022-06-09 15:34:30 -07:00
github-actions
3243cbf039 Bump package version [skip ci] 2022-06-07 21:01:36 +00:00
venashial
eb171ecb21 Update CSS guidelines + Prefer rem 2022-06-07 14:00:53 -07:00
Geometrically
43b8941f7a External dependencies list (#518) 2022-06-04 12:43:32 -07:00
Ellemes
0b16839d7f Fix custom license being empty when editing a project. (#527) 2022-06-04 14:02:04 -04:00
venashial
164ba46259 Merge pull request #521 from modrinth/fix/512
Hotfix #512 not showing the correct date
2022-06-04 09:19:19 -07:00
Prospector
b174f7a023 Fix donation URLs hidden when there's no external links (#520) 2022-06-04 11:44:29 -04:00
venashial
c9ec9f14de Run prettier 2022-06-04 00:46:23 -07:00
venashial
597c071c3d Update Permissions class & docs 2022-06-04 00:05:23 -07:00
Emma Cypress
91d05434ca Hotfix #512 not showing the correct date
Co-authored-by: Essem <smswessem@gmail.com>
2022-06-01 12:31:35 -04:00
github-actions
5b0aba99bb Bump package version [skip ci] 2022-06-01 04:04:01 +00:00
venashial
87c7d1a5f4 Update ago to respect user's language 2022-05-31 21:03:22 -07:00
github-actions
d841d69bd4 Bump package version [skip ci] 2022-06-01 02:14:22 +00:00
venashial
512bf1d013 Update Option interface for type-checking 2022-05-31 19:13:36 -07:00
Essem
adbd58a949 Add date tooltips (#512) 2022-05-30 16:29:07 -07:00
Josiah (Gaming32) Glosson
a0959d2730 Make system theme selectable (#505)
Also fixes #504
2022-05-30 11:33:39 -07:00
UbiOne
f455722bed Added missing PolyMC link from modpack pages. (#499)
* Added missing PolyMC link from modpack pages.

Fix of #498

* Fixed messed up things.
2022-05-30 11:28:38 -07:00
Emma C. Pointer-Null
735d23c9eb fix 'unknown' version in footer (#511)
fixes #483
2022-05-30 11:28:23 -07:00
github-actions
0fd6a23c78 Bump package version [skip ci] 2022-05-29 18:31:07 +00:00
venashial
fd73d8d67e Merge pull request #1 from baka-gourd/main
Add chs date format
2022-05-29 11:30:26 -07:00
venashial
347366e8d7 Fix server-side rendering 2022-05-29 11:29:53 -07:00
github-actions
eb8d4abcbe Bump package version [skip ci] 2022-05-29 04:26:46 +00:00
venashial
86acccebb0 Merge pull request #2 from wafflecoffee/report-types
Add report type tag
2022-05-28 21:26:03 -07:00
Emma Cypress Pointer-Null
8f184f76fa fix formatting 2022-05-28 13:11:01 -04:00
Emma Cypress Pointer-Null
1daabfa3e0 Add report type tag 2022-05-28 13:09:57 -04:00
baka-gourd
90b49106f0 add chs date format 2022-05-28 20:53:24 +08:00
github-actions
1a5638426c Bump package version [skip ci] 2022-05-27 02:17:55 +00:00
venashial
8d4da009af Update prettier config + Run pnpm format 2022-05-26 19:17:15 -07:00
venashial
89571d57bd Fix oled theme, docs, component bugs 2022-05-26 19:16:46 -07:00
github-actions
5d4e06074a Bump package version [skip ci] 2022-05-26 06:20:56 +00:00
venashial
98522cf6e4 Move utils exports to separate path 2022-05-25 23:20:02 -07:00
github-actions
7cdb751606 Bump package version [skip ci] 2022-05-26 00:23:46 +00:00
venashial
4ffc90f963 Fix CheckBoxList SVG icons + Move docs source 2022-05-25 17:22:54 -07:00
github-actions
8da6572074 Bump package version [skip ci] 2022-05-25 04:40:41 +00:00
venashial
ee64aad670 Merge branch 'main' of https://github.com/modrinth/kleos 2022-05-24 21:39:55 -07:00
venashial
92cee2321f Add "icon" class to generated icons 2022-05-24 21:39:49 -07:00
github-actions
7f969b1252 Bump package version [skip ci] 2022-05-25 04:20:04 +00:00
venashial
a02e2e1fa1 Merge branch 'main' of https://github.com/modrinth/kleos 2022-05-24 21:19:07 -07:00
venashial
d690e1b37a Fix generator API URL & Button props 2022-05-24 21:18:54 -07:00
DioEgizio
3300c2302c add polymc to the list of supported pack launchers (#497) 2022-05-24 10:07:46 -04:00
stairman06
685470cf23 iOS video fix (#496) 2022-05-23 21:53:35 -07:00
stairman06
c545a959ac Mobile category overlap fix (#495)
* mobile spacing fix

* slightly less spacing
2022-05-23 21:53:28 -07:00
Prospector
a7832ef40f Fix font weight on code blocks (#494) 2022-05-23 21:53:22 -07:00
Prospector
3e941999d5 Make modpacks show as an yellow check mark to show it's alpha (#493) 2022-05-23 21:40:27 -07:00
Prospector
bebdfc259c Improved styling of the version file upload button (#492)
* Update SmartFileInput to be styled like the other file input

* Fix gallery upload layout
2022-05-23 21:40:17 -07:00
Prospector
d31a920eb7 Fix gallery floating buttons and text in light mode (#491) 2022-05-23 21:38:25 -07:00
Prospector
ec87821bcd Workaround ModLoader capitalization issue and make loaders list collapsible (#490) 2022-05-23 21:38:17 -07:00
Emma C. Pointer-Null
21df0e32c4 Fix #485 by removing default loader from version filters (#487)
* Fix #485 by removing default loader from version filters

It's really not our place to be imposing a default loader on people, especially as we start adding more loaders

* Fix Clear Filters button and capitalise loaders
2022-05-23 21:38:08 -07:00
stairman06
afaa235c75 Save OR facets in query string (#486)
* Save OR Facets

* revert back to staging
2022-05-23 21:37:56 -07:00
UbiOne
8d97e7136f Project ID removes spaces (Issue #467) (#484)
* Dependency Add fields now only accepts letters

No more annoying spaces, numbers or special characters

* Fixed problem(s)

Now it only disallows spaces
2022-05-23 21:37:41 -07:00
github-actions
89ac422929 Bump package version [skip ci] 2022-05-21 06:26:13 +00:00
venashial
d8d55f032e Fix tag icon generator 2022-05-20 23:25:35 -07:00
github-actions
c83d694c7a Bump package version [skip ci] 2022-05-21 04:48:01 +00:00
venashial
ea55650d45 Merge branch 'main' of https://github.com/modrinth/kleos 2022-05-20 21:47:16 -07:00
venashial
ec1aee60a1 Update brand color & preprocess config 2022-05-20 21:47:14 -07:00
github-actions
3a7a0918d3 Bump package version [skip ci] 2022-05-21 02:54:02 +00:00
venashial
8bf90714da Update utilities and documentation 2022-05-20 19:53:13 -07:00
venashial
d8b59925b0 Update Node version in workflow 2022-05-20 19:52:47 -07:00
venashial
d37fd6bea0 Run pnpm format 2022-05-20 00:10:45 -07:00
venashial
0f6263d82e Add generator plugin 2022-05-20 00:10:15 -07:00
Florentin Schleuß
e7c70945e6 Add skip links for "skip to main content" and "skip to search results" (#445) 2022-05-17 18:31:58 -07:00
UbiOne
095a936891 Fixed GitHub Issue #423 (#453)
Incrased line hights from default to 1.3 at text boxes.
2022-05-17 18:31:46 -07:00
stairman06
c49ce91fac History spam fix (#461) 2022-05-17 18:29:38 -07:00
Geometrically
dd52727055 Fix resubmit for approval button (#478) 2022-05-17 18:29:23 -07:00
Prospector
b48068c63c Add modpacks icon on mobile (#474) 2022-05-16 06:19:08 -04:00
Geometrically
c39d04e8a5 Fix broken discord link (#472) 2022-05-15 22:04:44 -07:00
venashial
0eff8e4bc8 Merge pull request #470 from modrinth/modpack-alpha-fixes
Add modpack page warning + Fix notifications nav titles
2022-05-15 18:39:44 -07:00
venashial
178551a467 Remove console.log 2022-05-15 18:36:41 -07:00
venashial
720739e50a Add modpack page warning + Fix notifications nav titles 2022-05-15 18:27:02 -07:00
venashial
46d1537d8f Modpack alpha release (#469) 2022-05-15 17:54:59 -07:00
Jai A
63b2bb55a1 Fix version editing 2022-05-15 13:06:08 -07:00
github-actions
06c210f5c8 Bump package version [skip ci] 2022-05-08 19:40:47 +00:00
venashial
a545c42047 Add secondary & tertiary buttons + Add utils index 2022-05-08 12:40:10 -07:00
github-actions
da4b4de292 Bump package version [skip ci] 2022-05-08 00:23:15 +00:00
venashial
fd936e5bf3 Update illustrations & icons docs + Fixes 2022-05-07 17:22:33 -07:00
Geometrically
dc11340faf Switch loaders to OR filtering (#460)
* Switch loaders to OR filtering

* Add or filters to clear button

* Fix clear filters button again
2022-04-22 11:36:48 -07:00
Jai A
06d921d855 Fix login button 2022-04-18 10:54:15 -07:00
github-actions
91b602341b Bump package version [skip ci] 2022-04-16 23:13:43 +00:00
Prospector
ad853ca342 Add basic slider component 2022-04-16 16:13:13 -07:00
github-actions
14fa3481b0 Bump package version [skip ci] 2022-04-16 07:33:39 +00:00
venashial
2b6fee0455 docs: Fix pnpm-lock.yaml 2022-04-16 00:32:57 -07:00
venashial
a48e6f82d1 docs: Improve example component + Fix sidebar on mobile 2022-04-16 00:29:35 -07:00
Jai A
1020904fe0 Fix #450, Fix 449 2022-04-10 14:58:43 -07:00
github-actions
6aaced0c04 Bump package version [skip ci] 2022-04-03 18:45:37 +00:00
venashial
3646c0d0a3 Remove lodash.uniqueId 2022-04-03 11:45:04 -07:00
github-actions
44c8574f1b Bump package version [skip ci] 2022-04-03 06:19:35 +00:00
venashial
ea1ff65db7 Move svelte config + postcss config to package/config 2022-04-02 23:18:57 -07:00
venashial
85b7147927 Add classes: Actions + Divider + Illustration + InfoTable + Stat, Add utilities (needs docs) 2022-04-02 16:17:58 -07:00
github-actions
6b54c342aa Bump package version [skip ci] 2022-03-31 01:50:02 +00:00
venashial
60720b04db docs: fix breakpoints 2022-03-30 18:49:27 -07:00
github-actions
323a593159 Bump package version [skip ci] 2022-03-31 01:37:04 +00:00
venashial
baef94f14a docs: add mobile support + seo 2022-03-30 18:36:27 -07:00
github-actions
59b3cfee66 Bump package version [skip ci] 2022-03-30 21:05:48 +00:00
venashial
cbc85ca98f Move COMPONENT_API to src/generated 2022-03-30 14:05:15 -07:00
github-actions
425c8cd1d3 Bump package version [skip ci] 2022-03-30 05:07:15 +00:00
venashial
1d7949ded6 Add component API to built docs + Add Checkbox, CheckboxList, & CheckboxVirtualList 2022-03-29 22:06:43 -07:00
stairman06
2507170816 YouTube embed fix (#442) 2022-03-29 21:27:05 -07:00
Emma C. Pointer-Null
2c83425b42 Make newlines behave like GitHub (#441)
fixes #440, fixes #436 too somehow
2022-03-29 21:26:43 -07:00
github-actions
1da281de8a Bump package version [skip ci] 2022-03-29 07:46:27 +00:00
venashial
98baab4d03 Update docs examples + Add Select component + Add Card, Base, Title classes 2022-03-29 00:44:23 -07:00
Geometrically
441069aa76 Send authentication headers for all project requests (#431) 2022-03-20 15:29:17 -07:00
github-actions
8c5bf55b51 Bump package version [skip ci] 2022-03-20 18:15:25 +00:00
venashial
b6d6955b39 Add Chips component 2022-03-20 11:14:46 -07:00
github-actions
0d68b1a73e (bot) Bump package version [skip ci] 2022-03-20 07:20:35 +00:00
venashial
15b7c241ff Update style vars + Add examples to docs + Add Avatar, NavRow, Pagination, & Link 2022-03-20 00:19:51 -07:00
venashial
de9c62617b Merge remote-tracking branch 'origin/main' 2022-03-16 23:35:10 -07:00
venashial
a0e05115a3 Add component API to docs (ex: props, events, slots) 2022-03-16 23:34:56 -07:00
Prospector
aaf58272f1 Add an indicator for required fields (#413) 2022-03-15 22:11:00 -07:00
Prospector
5ebaf5663d Add image description, make controls less obtrusive, display native size by default (Fixes #407), Fixed closing modal by clicking out of it (Fixes #405) (#412) 2022-03-15 22:10:30 -07:00
venashial
7dc3e6a08b Bump package version [skip ci] 2022-03-14 07:07:26 +00:00
venashial
5a5f817e59 Manually bump version 2022-03-14 00:06:52 -07:00
venashial
b650320a34 Prevent version bumping from committing tags 2022-03-14 00:03:36 -07:00
venashial
424fd8e4d3 Reorder release workflow 2022-03-13 23:59:51 -07:00
venashial
cfbf80fdfe Commit bumped package version in workflow 2022-03-13 23:48:54 -07:00
venashial
9b8ced2803 Auto bump NPM package 2022-03-13 23:40:17 -07:00
venashial
630a1d42b8 Prepare for NPM + Cloudflare pages 2022-03-13 23:10:58 -07:00
venashial
b69ff6ca8a docs: Improve header + sidebar
docs: Create workflows
lib: Start pagination
2022-03-12 01:34:09 -08:00
Glare
1a23b6178b Fixes confusing text in analytics description (#414) 2022-03-10 12:37:41 -05:00
venashial
de536d7305 docs: Improve theming + introduction 2022-03-10 00:08:59 -08:00
venashial
6dcd33bbc5 Add CSS & Icons docs 2022-03-09 23:17:28 -08:00
venashial
c6df78eb81 Improve docs 2022-03-09 22:18:22 -08:00
venashial
d1babe27ec Start work 2022-03-09 21:27:53 -08:00
Prospector
7596f62ca5 Gallery improvements (#404)
* Redo gallery controls

* Remove old css

* Geo's fixes to the gallery

* Fix filters not updating when clearing them

* Add max width to expanded images

* Center text as it gets super long

* Object-fit: cover

* Fix extra margin 😱
2022-03-08 21:43:06 -07:00
venashial
139e57f1eb Initial commit 2022-03-07 21:55:31 -08:00
Geometrically
e87d85b088 Removes google ads from codebase, fix analytics (#403) 2022-03-07 19:01:38 -07:00
Geometrically
91b79b703c Fix dependency display (#402) 2022-03-07 17:26:40 -07:00
Prospector
bdefa4a967 Fix version dropdowns and add link hover/active colors in markdown (#398)
* Fix version dropdowns and add link hover/active colors in markdown

* Add 'Clear filters' button to version filtering

* *Actually* fix #394

* semicolon
2022-03-07 08:27:10 -07:00
Prospector
b82efb6e3c Continue the cleanup train (#396)
* Improve links and search page controls... I know it looks kinda insane

* Fix donation padding Fixes #393

* Improve text field styling

* white icon

* Improve pagination and disabled button colors

* Round tab indicator

* Fix rounding of home page points card

* I hate browsers

* Change verbiage of legacy options
2022-03-06 19:34:40 -08:00
Prospector
a50e109043 Some more cleanup to prepare for 2.1.0 release (#395)
* Make syntax highlighting green match the brand color

* Fix version filter control wrapping and not obeying snapshot filter

* Fix checkbox hover state Closes #390

* Update components/ui/VersionFilterControl.vue

Co-authored-by: Emma Pointer-Null <emmaffle@modrinth.com>

* Fix missing hover and active states for various buttons

Co-authored-by: Emma Pointer-Null <emmaffle@modrinth.com>
2022-03-06 15:37:07 -07:00
Emma Pointer-Null
8b5db12e1d Make links on project pages more consistent, fix some selectors showing when they shouldn't (#391)
* Make links on project pages more consistent, fix some selectors showing when they shouldn't

* Update components/ui/VersionFilterControl.vue

Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>

Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
2022-03-06 13:35:11 -08:00
Prospector
f1f8163bb7 Add Minecraft version snapshot filter to version edit/create page (#387) 2022-03-05 17:36:15 -07:00
Prospector
c0fac90b52 Improve Multiselect styling to not overlap other elements (#386)
* Make improvements to the Multiselects in VersionFilterControl apply to all Multiselects Closes #384

* Remove unnecessary unset
2022-03-05 17:36:02 -07:00
Prospector
15717ddca0 Fix sorting on version filtering (#389) 2022-03-05 17:35:53 -07:00
Prospector
a7ce9aaca5 Fix bad contrast ratio with secondary text in dark mode (#388)
* Fix bad contrast ratio with secondary text in dark mode

* Add some more accessibility improvements
2022-03-05 17:35:45 -07:00
Prospector
d8df8e1033 Use dropdown SVG for profile dropdown (#379)
Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
2022-03-05 13:35:05 -07:00
Prospector
440a35e491 Improve the file download icon so it's more obviously a download icon (#377) 2022-03-05 13:10:38 -07:00
Prospector
dbbc6ed0bb Add easier access to the Following page and add scroll support to mobile overflow menu (#382) 2022-03-05 13:09:45 -07:00
Prospector
86fbb383fd Fix changelog textarea being unusably small (#381) 2022-03-05 13:09:31 -07:00
Prospector
1c07a74bef Add version filter controls to Changelog and Versions pages (#378) 2022-03-05 09:18:44 -07:00
BasiqueEvangelist
2df93c2ceb Fix download buttons in the changelog page (#376) 2022-03-04 13:16:45 -07:00
Prospector
6ca40afac0 Add expanding gallery images by clicking on them (#371)
* Random css variable cleanup

* Add an option for developers to temporarily switch between staging and production API

* Added a feature to expand gallery images to view them larger.
2022-03-03 21:18:42 -07:00
Jai A
36a8f044ae Show dependency when project version is not found 2022-02-28 16:02:59 -07:00
Jai A
276e5453f1 Fix dep project not showing 2022-02-28 10:07:06 -07:00
Jai A
0f81986684 Fix head attr for version pages 2022-02-27 19:00:35 -07:00
Jai A
bc54e536af Fix lint error 2022-02-27 18:00:19 -07:00
Jai A
acb57b3e9c Remove modpacks from mobile nav 2022-02-27 17:58:07 -07:00
Geometrically
de0e30de57 Fix version creation, remove obsolete download counters, dep fix (#357) 2022-02-25 07:44:28 -07:00
Geometrically
b8b942cdae Update embed, homepage and project creation fixes (#356) 2022-02-21 16:29:13 -07:00
Emma
0146a077e8 Bundle of small fixes (#355)
* Bundle of small fixes

![bundle of small fixes](https://i.imgur.com/IkPE3uP.png)

- List items in project body may overflow
- Reduce margin between pagination buttons for better mobile support
- Prevent titles from overflowing in search for better mobile support
- Don't show ThisOrThats with only one item
- Fix style inconsistencies on homepage
- Add more links to homepage to docs, GH, and discord, so they can't be missed

* Appease lint

* Dryer lint isn't even the worst type of lint. It's this.
2022-02-19 13:09:58 -07:00
Jai A
a0fcf515cd Fix default base URL 2022-02-16 18:03:51 -07:00
Jai A
1719ad81a4 Fix home page on chromium 2022-02-16 18:01:34 -07:00
Geometrically
51a9a7b75d Landing page (#353)
* Landing page

* Change legal corp name, remove google from privacy policy, other fixes
2022-02-16 17:39:48 -07:00
Geometrically
e91b0500c5 Fix browser base URL not working 2022-01-28 19:42:01 -07:00
Emma
2a17361a90 Fix issues with new left/right side toggles (#348)
https://canary.discord.com/channels/734077874708938864/734082619352023081/936801072146690079 - "cosmetics toggles v-model the wrong variable"
Also improves formatting of title/description of these options
2022-01-28 19:40:22 -07:00
Jai A
1eca3a8603 Fix right sidebar width being messed up 2022-01-28 18:25:43 -07:00
Geometrically
86f37863a7 Lots of fixes - see trello (#347)
* A ton of fixes

* Fix project deletion message
2022-01-28 18:11:34 -07:00
stairman06
643cd87706 Mostly accessibility stuff (#344) 2022-01-20 21:21:13 -07:00
Geometrically
98c85441f8 Fix a lot of bugs - see description (#343) 2022-01-17 21:49:34 -07:00
Prospector
1345f996da Rework user dropdown, redo mobile navigation, improve 'home' page (#342)
* Merge

* Mobile Navigation + home page fixes

* Remove debug line

* Fix "More" menu text
2022-01-17 21:49:10 -07:00
Emma
ff48f08241 Add OpenSearch for searching mods in browser bar (#337)
For more about what OpenSearch is, see [here](https://developer.mozilla.org/en-US/docs/Web/OpenSearch).
2022-01-12 09:37:45 -07:00
Emma
b5f438aa0c Fix various issues reported on the Trello (#341)
* Fix various issues reported on the Trello

* Remove accidental additions
2022-01-12 09:37:20 -07:00
Redblueflame
a2266adb3f Add initial support for the v2 of the API (Still WIP) (#250)
* Functionally implement modpacks

* Add LogoAnimated to logo license

* Fix eslint errors

* Add `z-index: 20` to user dropdown (#287)

* Fix pages not working, add changelog page, redesign versions page

* Update theme colors, add OLED theme, update some project creation text. (#292)

* Update theme colors, add OLED theme, update some project creation text.

* Make summary normal text color

* Update favicons, update logos to use dynamic colors, updated filters panel a bit

* Update wording from #250

* Version page rework

* Manually apply some commits from master, other minor v2 fixes (#296)

* Homepage styling improvements (#285)

* Add border radius to video + example code colors

* Change color + allow overflow scroll

* Minor v2 fixes

- Makes multiple loaders display correctly (used to be `Fabric,Forge` is now `Fabric, Forge`
- Fix oopses in #292
- Allow .jar and .zip in file prompt
- Apply 30cbd3a6c372940d1e86cc8134d0dfc7e8e5ee9c to pages/create/project.vue
- Display `fabric, forge` instead of broken icons on pages/create/project.vue

* Markdown styling fixes (#268)

* Add table color variables (+ prettier fixes)

* Add details and table styling to .markdown-body

* Add indexing meta value depending on the status of the mod. (#261)

* General UI Improvement (again) (#255)

* Add and fix some stuff

* Add warning when leaving to `mod/create`

* Fix mods/create not working

* Fix a bug & add improvements to a couple moderation aspects (#278)

This PR fixes reports on the moderation dashboard going to `/dashboard/mod/_id` instead of to `/mod/_id`.
It also allows the ability for moderators to unlist mods in the queue from the frontend instead of having to do it via the backend.
![image](https://i.imgur.com/x8shSVn.png)
Unlisted mods should have the ability to resubmit for approval, so I've also changed "Submit for Review" to "Submit for approval", allowing unlisted mods to do that as well.
![image](https://i.imgur.com/OC8Vyfo.png)

* Add project guidelines to Terms page (#275)

* Add project guidelines to Terms page

This adds the project guidelines as outlined [here](https://discord.com/channels/734077874708938864/734077874708938867/806556531491471368).
NOTE: I've made a few tweaks in wording to accommodate this format, so this is not an exact copy.

* Move rules to its own page

* Allow users to login from search page when it is rendered serverside (#272)

* Change `this.$route.fullPath` → `this.$route.path`

* Closes modrinth/knossos#256

* Wrap mod icon and title in link (#273)

* Wrap mod icon and title in link

* Fixes #218

* Editor's note

    Skipped #249 (search was rewritten), #266 (couldn't figure out how to apply it), #270 (didn't seem to apply properly), #252 (manually merged in with #292), #262 (superceded by #270), #282, #271, #277, #283, and #281 (those five didn't get wiped)

Co-authored-by: venashial <venashial.levo@aleeas.com>
Co-authored-by: Redblueflame <contact@redblueflame.com>
Co-authored-by: Johan Novak <wickedtree@wickedtree.codes>

* SSR descriptions, version edit page

* Working version editing + dependency management (besides files)

* Version create page, file functionality

* Fix some issues with the version page

* More versions page fixes

* Project gallery

* Box shadows, user profile page, WIP header

* Finish user dashboard

* Finish search and fix minor issues

* Moderator page + messages, notifications page

* Fix dropdown menu, fix XSS, fix team members page

* Change doc url on main page (#309)

* Re-Fix docs url (#313)

* Clean up. Part 1: Fix immediate problems (#316)

* Clean up tabs and cards CSS a little

* Fix project page; Remove bad styles from search

* Yeet and flatten lots of styles; fix font sizes

* Restyle search; fix moderation

* Fix profile page

* Remove injected SCSS entirely

* Fix a mobile layout overflowing

* Apiv2-support fixes (#320)

* Fix member user_id -> user.id

* Fix incorrect report redirect

* Change theme switcher from button to multiselect

* Fix remaining items

Co-authored-by: Jai A <jaiagr+gpg@pm.me>

* Fix bugs

* Full mobile support, update create project page, fix various bugs

* New Dark Mode brand colors (#325)

* Use "color-brand-hover" for auth-prompt when hover over

* New dark mode brand colors

* Fix new version featured bug

* Remove old home page, other fixes

* Fix error when merging

* Fix prettier error :(

Co-authored-by: Jai A <jaiagr+gpg@pm.me>
Co-authored-by: venashial <venashial.levo@aleeas.com>
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
Co-authored-by: Emma <emmaffle@modrinth.com>
Co-authored-by: Johan Novak <wickedtree@wickedtree.codes>
Co-authored-by: Jai A <jaiagr@pm.me>
Co-authored-by: Mysterious_Dev <40738104+Mysterious-Dev@users.noreply.github.com>
Co-authored-by: Mikhail Oleynikov <contact@falseresync.ru>
Co-authored-by: Christian Popov <30723811+Xrey274@users.noreply.github.com>
2022-01-09 15:19:27 -07:00
venashial
c518f373df Makes mod editing only send changed data (#286)
* Add getDifferences lib

* Only send mod diff to backend for changes

* Disable fields when lacking permissions
2021-10-02 16:47:59 -07:00
Emma
f4636fdca2 Direct people to docs for contributing (#306)
[no ci]
2021-10-02 14:29:33 -07:00
Mysterious_Dev
4108d7827a Issues Forms (#304)
* Issues Forms

* Fix mistake

* Delete title
2021-09-11 19:26:15 -07:00
apersomany
5ccd40f530 Fixed minor issues (#291)
* Fixed xss sanitizer config for checkboxes

* Fixed typo in version navigation tree href

* Fixed navigation tabs' margins with pure css

* Prettier

For some weird reason my prettier config seems to be different

Co-authored-by: Redblueflame <contact@redblueflame.com>
2021-08-23 14:39:03 +02:00
venashial
8798340d48 Allow Youtube through iframes + using image syntax in markdown (#294)
* Allow iframes in markdown from acceptable sources

* Remove Discord from allowed sources

* Make youtube regex more specific

* Fix prettier not wanting new line for regex

* Extend image syntax to autodetect youtube links

* Fix image rendering to support normal images
2021-08-23 14:34:04 +02:00
Emma
e8d2959350 Add follow count & user ID to user page (#253)
* Add follows & user ID to user page
Closes #192

* Why did package lock change?

* Change name follows -> followers
2021-08-23 14:31:44 +02:00
venashial
f1d838de6b Homepage styling improvements (#285)
* Add border radius to video + example code colors

* Change color + allow overflow scroll
2021-07-17 17:37:40 -07:00
Emma
ec92a4cd34 Fix a bug introduced in #278 ("submit for approval" always being present) (#283)
This fixes a bug where the "Submit for approval" button was always present no matter the project status. These things are finnicky.
2021-07-14 12:10:01 -07:00
Geometrically
b3b9788d37 License clarification on modrinth branding (#282)
* License clarification on modrinth branding

* Add favicon
2021-07-11 14:42:05 -07:00
venashial
67739e8e39 Correctly handle "" as custom license URL (#271)
* Fix `mod.license.url` check

* Fixes modrinth/knossos#267
2021-07-11 09:06:06 -07:00
Emma
be3ed7d380 Improve MIME type detection (fixes #279) (#281)
* Specify which application file types are allowed

* Attempt two

* attempt 3

* Update version edit too

good thing these commits will be squashed!

* Fix warnings
2021-07-11 09:05:21 -07:00
venashial
9b4d58cfe8 Add mod title to mod page meta description (#277) 2021-07-02 10:04:49 -07:00
venashial
fb6a8d999c Mod search fixes (#249)
* Remove all uses of `process.env.domain`

* Revert "Remove all uses of `process.env.domain`"

This reverts commit 5af9b83091f395d3a0f954cf6776494c1cfe7a04.

* Increase minimum amount of pages for pagination

Fixes modrinth/knossos#231

* Detect mod search query removal

Fixes modrinth/knossos#240

* Increase margin on project card categories mobile

Fixes modrinth/knossos#230
2021-07-02 10:04:08 -07:00
venashial
b2f6a06a1f Wrap mod icon and title in link (#273)
* Wrap mod icon and title in link

* Fixes #218
2021-07-02 10:02:55 -07:00
venashial
f7da32702f Allow users to login from search page when it is rendered serverside (#272)
* Change `this.$route.fullPath` → `this.$route.path`

* Closes modrinth/knossos#256
2021-07-02 10:02:15 -07:00
Emma
219d2246fa Add project guidelines to Terms page (#275)
* Add project guidelines to Terms page

This adds the project guidelines as outlined [here](https://discord.com/channels/734077874708938864/734077874708938867/806556531491471368).
NOTE: I've made a few tweaks in wording to accommodate this format, so this is not an exact copy.

* Move rules to its own page
2021-07-02 10:01:24 -07:00
Emma
979b5eb89c Fix a bug & add improvements to a couple moderation aspects (#278)
This PR fixes reports on the moderation dashboard going to `/dashboard/mod/_id` instead of to `/mod/_id`.
It also allows the ability for moderators to unlist mods in the queue from the frontend instead of having to do it via the backend.
![image](https://i.imgur.com/x8shSVn.png)
Unlisted mods should have the ability to resubmit for approval, so I've also changed "Submit for Review" to "Submit for approval", allowing unlisted mods to do that as well.
![image](https://i.imgur.com/OC8Vyfo.png)
2021-07-02 09:58:29 -07:00
venashial
a58811b1bf Fix notifications not being able to be dismissed (#270)
* Change undefined check to null check

* Make notification index and action index more clear

Fixes #178
2021-06-21 21:32:17 +02:00
venashial
be0e18d4b0 Markdown styling fixes (#268)
* Add table color variables (+ prettier fixes)

* Add details and table styling to .markdown-body
2021-06-21 21:06:11 +02:00
macbrayne
fea6f0ce81 fix #237 by alphabetically sorting the licenses (#266) 2021-06-19 21:17:41 +02:00
Johan Novak
5859ac7a58 General UI Improvement (again) (#255)
* Add and fix some stuff

* Add warning when leaving to `mod/create`

* Fix mods/create not working
2021-06-17 22:03:12 -07:00
venashial
566833da6e Fix first notification not performing action (#262)
* Change IF statement to accept 0

* Get rid of console.log()
2021-06-10 13:44:26 -07:00
Redblueflame
d174602cc0 Add indexing meta value depending on the status of the mod. (#261) 2021-06-10 07:17:03 -07:00
Emma
46bc04f69f Adjust quite a bit of wording (#252)
* Adjust quite a bit of wording
Also converts many title case things to sentence case (fixes #238)

* Change advised to recommended

* Oops, I missed a page

* That page too

* Missed a spot
2021-06-05 20:34:43 -07:00
venashial
bb8fd5500d Remove all uses of process.env.domain (#247)
* Remove all uses of `process.env.domain`

* Remove broken link on logout on revoke token page
2021-05-28 22:39:35 -07:00
Geometrically
d0df105dda Move auth domain to public runtime config (#246)
* Allow specifying a custom auth URL

* Readd default

* Move Host URL to top

* wat

* Move auth domain to public runtime config
2021-05-28 21:32:06 -07:00
Geometrically
a061fb5421 Allow specifying a custom auth URL (#245)
* Allow specifying a custom auth URL

* Readd default

* Move Host URL to top

* wat
2021-05-28 13:57:13 -07:00
Redblueflame
fd17e5a4c0 Add retrying logic for ethical ads, add variable for the API url (#244) 2021-05-28 13:20:22 -07:00
Geometrically
cd8bc7a7a1 Fix base URL conflicting with default axios ones (#243) 2021-05-28 12:43:44 -07:00
Geometrically
e22a586a41 Allow Base URL to be set by environment variable (#242)
* Switch site to use axios base url

* Fix team invites

* Fix find/replace setting the wrong thing

* Fix analytics being blocking, small issues

* Allow base url to be set by env variable
2021-05-28 12:26:05 -07:00
Geometrically
5017c5a5f1 Use base URL for axios (#241)
* Switch site to use axios base url

* Fix team invites

* Fix find/replace setting the wrong thing

* Fix analytics being blocking, small issues
2021-05-28 10:19:13 -07:00
venashial
03cbab5267 Checkboxes: use v-model value prop instead of "checked" prop (#227)
* Use v-model value prop instead of "checked" prop

* Scope CSS & Rename component

* Mod settings: Update prop & make Owner check all
2021-05-27 21:00:44 -07:00
venashial
2c22837d9f Fix notification & follow list sorting, Add notification badge + loading animation (#206)
* Order notifications and followed mods

Fixes modrinth/knossos#195

* Add user notification badge on avatar

Closes modrinth/knossos#145

* Add loading animation

* Chain calls, remove console.log

* Chain calls

* Fix formatting to match prettier

* Remove unused userFollows

* Create user vuex store

* Add notification count indication on dashboard

* Fix background for light mode

* Move delay check to action, add force parameter

* Slightly decrease notification badge opacity on dashboard

* Remove SVG for image masking, use border around bubble

Also adds CSS for when the dropdown is opened/hovered

* Fix merge conflicts

Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
2021-05-27 09:32:34 -07:00
venashial
4d64df37f5 Versatile auth URLs & many UI fixes (#199)
* Make project cards right-align their last element

Spaces out elements in a `.project-card` using `justify-content: space-between;`.

Fixes modrinth/knossos#170

* Automatically set URL for auth redirect

* Make login button use base url or current origin

Allows the login button to work in dev environment

* Remove Axios base URL trailing slash

* Update authUrl() on dashboard to match default

* Remove 'code' query from URL on page load
Allow non-exact paths to highlight mod & dashboard tabs

Fixes modrinth/knossos#200

* Make page 5 button visible on page 4 (pagination)

Fixes modrinth/knossos#184

* Color links on legal pages

Fixes modrinth/knossos#166

* Set max notifications to 5 and ignore duplicates

Fixes modrinth/knossos#175

* Add space above report button when no user desc

Fixes modrinth/knossos#143

* Better text spacing from edge of mobile screen

Fixes modrinth/knossos#179

* Fix slanted bars in modrinth/knossos#57

* Fix checkbox grid and role label

Fixes modrinth/knossos#191

* Move mod 'settings' button to the far right

Fixes modrinth/knossos#138

* Abbreviate minutes to min. when time is too long

Not a perfect solution imo, but works for now

Fixes modrinth/knossos#193

* Fix mobile header margins & add breakpoints

Fixes modrinth/knossos#203

* Clean up nuxt config
Silence babel warning & styleResources

* Upgrade sass-loader to 10.1.1 and remove warning

* Remove added horizontal footer padding

https://github.com/modrinth/knossos/pull/199#discussion_r629011624

* Improve mobile header fix

* Fix up minor inconsistencies in mod header

* Remove hard coded date

* Cleans up pagination to be more intuitive

* Fixes member invite input on moble

* Fix login button when searching mods

* Improved mobile mod search

Consistently sized pagination buttons

Breakpoint for sort buttons on smaller screens

* Consistent link style on text-only pages

* Better 4k support

* Slightly better mobile project-card support

Shuffles categories under mod icon when there is room

* Animate homepage typewriter effect backwards

* Tiny commit to align mod icons in mod headers

* Make processing status include 'Under Review'

This can be later updated once the backend has a separate status

* Create vercel.json

* Update domain auto detection

* Test vercel NODE_ENV

* Remove console.log for debugging hosting services

* Make mobile first + fix shrinked text circle size

* Optimize SVG

* Change media queries to be more mobile first

* Remove `|| window.location.origin`

* re-deploy vercel

* Change "Processing" message to "Under review"
2021-05-27 09:27:13 -07:00
Geometrically
b224f1d78d Fix descriptions not showing for some mod pages (#228) 2021-05-26 13:45:21 -07:00
venashial
52e018989d Add show snapshots to URL + Add snapshot checkbox (#210)
* Add show snapshots to URL + Add snapshot checkbox

* Revert spacing changes

* Make checkbox more reusable

* Use new checkbox for team permissions

* Remove XMLNS from imags/utils SVGs
2021-05-25 22:26:14 -07:00
Johan Novak
eb14193b23 Small Landing Page Fixes (#226)
* Front Page Fixes

* add webm video format
2021-05-25 22:24:44 -07:00
Redblueflame
001c2c88cd Fixed issue where ads would not show in some places. (#225) 2021-05-24 09:58:59 -07:00
venashial
98ab83976e Hide report button on user's own page (#222)
* Create vercel.json

* Add user ID check to report button

* Revert "Create vercel.json"

This reverts commit 3b261f09faa25fec6409fb3ddfc7b56d68ffb348.
2021-05-20 15:55:45 -07:00
Redblueflame
9cd5bf2992 Fixed issue where ads would not show in some places. (#216) 2021-05-20 15:44:21 -07:00
venashial
e876712af5 Revert "Fix report on own user page (#220)" (#221)
This reverts commit 9fc8d66601.
2021-05-20 15:40:17 -07:00
Mysterious_Dev
9fc8d66601 Fix report on own user page (#220) 2021-05-21 00:18:29 +02:00
Redblueflame
12d86493bf Switch ads provider, and switch the analytics system to Ariadne (#214)
* Switch ads provider, and switch the analytics system to Ariadne

* Fix CI error

* Remove debug messages and errors

* Updated nuxtjs
2021-05-18 07:48:26 -07:00
venashial
c97cba69b9 Client-side/server-side filters (#204)
* Add client and server side categories

* Quick fix for mistyped facet

* Get rid of console.logs used for debugging

* Re-add eslint overrides

* Optimize SVG

* Simplify .includes() checks
2021-05-16 12:35:46 -07:00
Jai A
63ed7a734b Fix downloading files on version pages not working 2021-05-11 20:23:26 -07:00
Geometrically
0e338ef453 Move mod pages to nuxt child (#201)
* Move mod pages to nuxt child

* Minor fixes

* Fix lockfile
2021-05-10 21:35:03 -07:00
Jai A
d914b38f9f Fix some page components not being imported 2021-05-02 16:22:52 -07:00
Geometrically
3ee00a4824 Remove analytics (#197) 2021-05-02 14:58:27 -07:00
Mysterious_Dev
5198c69f6b Fix "Available For" None (#189) 2021-04-28 20:13:52 -07:00
Emma
40704c4549 Add more detailed infos to about page (#180) 2021-04-24 19:54:33 -07:00
Milan
83df59e5f1 Allow webp images on mod creation (#186) 2021-04-24 19:53:48 -07:00
Milan
246602e275 Allow webp images on mod edit (#185) 2021-04-24 19:53:39 -07:00
Emma
d3449609da Add 'Switch to Dark/Light Mode' to header & footer (Fixes #174) (#177)
* Add 'Switch to Dark/Light Mode' to footer (Fixes #174)

* Cursed mess

* Adds mobile header dark/light mode toggle

I do not like CSS.
Mobile works fine, desktop does not

* Remove unused div & other things I don't remember

* Fixes dark/light mode toggles on desktop

Also simplifies css for footer slightly.
Sometimes a good night's sleep really does do ya good.
https://cdn.discordapp.com/attachments/745980892735864953/835256687803367464/modrinth-2021-04-23_16.50.59.webm

* that was a mistake for the login button but it actually works well
2021-04-24 19:52:49 -07:00
Mysterious_Dev
a872058704 Fix page title for dashboard (#181)
* Fix page title for dashboard

* Fix Notifications page title

* Fix My Mods title

* Fix M lowercase
2021-04-24 19:51:39 -07:00
Mysterious_Dev
3033376028 Fix "Available For" field who is set to None (#183)
* Fix "Available For" field who is set to None

* Fix 2
2021-04-24 19:51:02 -07:00
Redblueflame
0bda636113 Added mobile friendly ads & ads (#161)
* Fix spacing issues on mobile

* Added back linting on modules directory.
Please don't look at the dirty fixes :x

* Add support for responsive ads.

* Add lazy loading of images.
2021-04-15 06:48:33 -07:00
Geometrically
28092d6862 Remove analytics consent (#163)
* Remove analytics consent

* Use watch for cookie popup visibility

* Fix double scrollbar, delete account not centered
2021-04-11 14:31:21 -07:00
Jai A
cecafb726c Change auth token lifetime 2021-04-11 11:39:05 -07:00
Jai A
8418c21096 Fix privacy settings not reflecting cookie values 2021-04-11 11:21:41 -07:00
Redblueflame
c4ace1972a Fix server error (#160) 2021-04-11 19:41:19 +02:00
Redblueflame
862df1d2df Fixed double scrollbar (#159) 2021-04-11 10:03:52 -07:00
Redblueflame
487c1a58d6 Fix issues (#158)
* Fix accept all button simply not working

* Switched privacy settings icons to a shield
Fixed auth changing the theme and consent
Fixed server error on log in / out

* Fixed scrolling issue on mobile

* Fixed GPDR concerns
2021-04-11 08:21:07 -07:00
Geometrically
c06c3d48d2 Partial Mobile Support (#156)
* Add partial mobile support

* Remove file used for seperate PR

* Add mobile support for cookie consent, make dropdown close on page change
2021-04-10 22:51:10 -07:00
Jai A
7d3ad5a639 Fix issues with privacy settings 2021-04-10 21:54:16 -07:00
Redblueflame
03b2d02742 Change ads provider, and add consent system for advertising (#155)
* Add GAM integration & base for GPDR consent

* Moved consent to a specific page.

* Added functionality to the privacy page, and desactivate tracking if consent is not given.

* Added GeoEdge support, and fixed auth issues

* Fix actions issue

* Fix actions issue, attempt 2

* Added a module for analytics with consent support.

* Remove unnecessary function

* Add support for runtime config
2021-04-08 19:44:25 -07:00
Ruby
103ce44ba9 Update _id.vue (#152)
* Update _id.vue

https://discord.com/channels/734077874708938864/734077874708938867/828344523205246976
@Geometrically

* fix eslint?

* fix eslint
2021-04-04 19:38:37 -07:00
BasiqueEvangelist
22219af133 Fix adding team members (#153) 2021-04-04 19:38:20 -07:00
Emma
7d7377ab15 Fix two typos & clarify some wording (#147)
* Fix two typos

* Clarify a bit of wording
2021-03-31 18:59:29 -07:00
Redblueflame
af8fc53704 Layout refactor (#150)
* Revert recent commits

* Move things around, and do preparation work for nested page systems.

* Fixed issue on side bar not appearing
2021-03-31 19:09:18 +02:00
Jai A
e80a5d82a4 Fix icons not showing up 2021-03-30 21:52:04 -07:00
Jai A
2b73e745da Bring back popup 2021-03-30 21:45:49 -07:00
Jai A
e61a1080f7 Organize components, switch auth to not use session 2021-03-30 21:38:12 -07:00
Redblueflame
464f336790 Confirm popups (#135)
* Added confirmation popup for account deletion
(I nearly deleted my account twice, please help me)
Added component for easy adding of new confirmation popups.

* Add confirmation popup for mod deleting

* Add confirmation popup for version & file deletion

* Changed the placeholder to a generic value
2021-03-30 09:02:45 -07:00
Redblueflame
1dc6e085cc Ordered the licences in alphabetical order, and put custom at the bottom (#134)
* Ordered the licences in alphabetical order, and put custom at the bottom.

* Fixed package-lock.json version change
2021-03-30 09:02:26 -07:00
Redblueflame
8594ff0c23 Automatic redirection once you create a new version (#137) 2021-03-30 08:43:28 -07:00
Redblueflame
e58963410e Added illustration & mezssage when a page doe not contain any mod / projects (#133)
* Added new messages with illustration displaying that this page does not contain any elements
Fixed 404 error after deleting mod

* Fixed typo
2021-03-30 08:41:20 -07:00
Jai A
1e0d118930 Final auth fix 2021-03-29 19:15:18 -07:00
Jai A
723e6dd13f Fix auth again 2021-03-29 18:34:57 -07:00
Jai A
e941af0905 Fix broken login button 2021-03-29 18:14:06 -07:00
Geometrically
24c8e29691 More secure custom authentication solution (#126)
* Remove Nuxt Auth from the project, and switch to a custom solution

* Replace old testing code

* Remove warnings

* Add comments to hard to understand function calls in middleware

* Use arrow functions
2021-03-29 09:43:00 -07:00
Siphalor
8911bdf966 Fix #85 (Notification icon sized incorrectly for short user names) (#127) 2021-03-29 17:15:39 +02:00
Redblueflame
0834759e1a Add version support for the docker builds & local builds. (#128)
Add experimental support for github actions
2021-03-29 16:51:49 +02:00
Redblueflame
bb8c0d264e Github Container Registry support (#125)
* Initial tests for ghcr.io integration

* Fixed login issue

* Try with only GHCR

* Removed unused system

* Time to break everything with hub.docker.com support

* Fix format error

* Update dockerfile to use latest recommended version of nodejs.
2021-03-28 12:27:17 -07:00
Redblueflame
c7da8c5fd3 Follow page, and edit button consistency (#123)
* WIP: Added base for follow page

* Updated style for moderation page, and added label for unfollow button (not sure about that one)

* Fixed overflow issue, and width of element

* Updated npm to restore the package-lock.json file
2021-03-28 09:20:40 -07:00
Jai A
30789ff6e2 Merge 2021-03-26 22:08:13 -07:00
Jai A
e6ece10716 Fix #9, Fix #42, Fix #48, Fix #95, Fix #96, Fix #97, Fix #99, Fix #119. Fix 120 2021-03-26 22:07:15 -07:00
TheEpicBlock
ea7a255006 Implement header ids (#115) 2021-03-14 10:46:47 -07:00
Jai A
98df1f5312 Follows + Reports 2021-03-11 18:14:11 -07:00
Jai A
2bf08787d8 Switch notifications to new route, fix normal text from being bright white 2021-03-07 16:12:11 -07:00
Prospector
b8f7e4211c Clarify that monetization is not yet available (#110) 2021-02-25 07:34:53 -07:00
BasiqueEvangelist
b581d0c44f Fix uploading files to existing versions (#106) 2021-02-20 20:37:17 -07:00
Jai A
0b613812f7 Fix #93, Fix #105, Add Mod Secondary Nav Bar, Add featured versions, Remove page transition, Make load bar smaller 2021-02-14 12:02:23 -07:00
dependabot[bot]
4d066a762f Bump marked from 1.2.0 to 2.0.0 (#104)
Bumps [marked](https://github.com/markedjs/marked) from 1.2.0 to 2.0.0.
- [Release notes](https://github.com/markedjs/marked/releases)
- [Changelog](https://github.com/markedjs/marked/blob/master/release.config.js)
- [Commits](https://github.com/markedjs/marked/compare/v1.2.0...v2.0.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-02-13 13:00:14 -07:00
Geometrically
8a30a65818 Fix lint 2021-01-29 20:53:57 -07:00
Geometrically
01703aff43 Visual fixes 2021-01-29 20:49:13 -07:00
Mysterious_Dev
9d62931af9 Fix Discord and wiki not open new tab (#94) 2021-01-29 16:05:47 -07:00
Prospector
e53d8fd4fa Mod icons link to the mod page (#92) 2021-01-23 22:16:03 -07:00
Prospector
0dbde32ed4 Attempt to fix flex-shrink issue with Safari (#90) 2021-01-23 17:51:08 -07:00
Geometrically
d506fdb68c Merge branch 'master' of https://github.com/modrinth/knossos 2021-01-22 22:44:07 -07:00
Geometrically
9c10186158 Mod page fixes, better ad wrapper to make it look better with the site 2021-01-22 22:43:55 -07:00
boredomh1
3eed51dbac Fix summary tags being always escaped by XSS (#84)
* Fix summary tags being removed by XSS

* Follow falseresync's suggestion

Co-authored-by: joaoh1 <joaoh1@users.noreply.github.com>
2021-01-21 14:40:09 -07:00
Geometrically
1c1855f0c3 Fix possible (?) page hang 2021-01-18 11:40:44 -07:00
Geometrically
e0a277fa45 Fix version ordering 2021-01-18 11:15:34 -07:00
Geometrically
3d6c7171d2 Remove version moderation 2021-01-18 10:47:04 -07:00
Geometrically
0fee90e4df Fix broken placements 2021-01-18 08:56:41 -07:00
Geometrically
0cced44491 Switch to Google Adsense 2021-01-17 20:14:10 -07:00
Geometrically
f21f758591 Fix #81, Fix #82, Add missing data to mod pages, donation platforms WIP 2021-01-16 22:54:37 -07:00
Geometrically
51e9527d53 Fix #78 2021-01-15 07:52:25 -07:00
Geometrically
268cd131dc Fix mod body editing 2021-01-14 22:44:33 -07:00
Geometrically
26997ad5c3 Fix delete button showing for unauthorized users 2021-01-14 21:54:46 -07:00
Geometrically
ce1786f128 Version editing, user, mod, version deletion 2021-01-14 21:43:58 -07:00
Geometrically
888057f64a Fix version sorting 2021-01-12 07:48:38 -07:00
Geometrically
3c6c4d9601 Merge branch 'master' of https://github.com/modrinth/knossos 2021-01-11 14:04:22 -07:00
Geometrically
5e8bcf8faf Version moderation 2021-01-11 14:01:56 -07:00
Mikhail Oleynikov
0d6f2f93bf Select only a subset of hljs languages (#70) 2021-01-05 08:22:26 -07:00
Geometrically
937b00cfcc Fix accepting team invites on frontend 2021-01-03 17:55:01 -07:00
Geometrically
0d4432720c Fix icon editing for mod pages 2021-01-03 12:32:52 -07:00
Geometrically
0ec49643ee Fix teams 2021-01-03 11:52:44 -07:00
Geometrically
0d80ea4f4c Fix download button for files on version page 2021-01-03 11:38:59 -07:00
Geometrically
d2b26124e4 Fetch descriptions from origin 2021-01-02 18:34:59 -07:00
Geometrically
343116ea24 Merge branch 'master' of https://github.com/modrinth/knossos 2021-01-01 11:47:41 -07:00
Geometrically
10dc699b21 Fix last broken link 2021-01-01 11:47:24 -07:00
Mysterious_Dev
015c5f07bc Fix User Page Title (#68) 2021-01-01 09:21:13 -07:00
Geometrically
a0b6a3bed6 Better error handling, fix some more broken OG links 2021-01-01 09:09:53 -07:00
Geometrically
9de5950f4d Fix version and other pages not working 2020-12-31 12:20:28 -07:00
Geometrically
26488b793a Teams (#67)
* Teams

* Fix errors on versions with no files

* Fix user lookup

* Fix mod pages breaking
2020-12-31 12:12:11 -07:00
calum6541
5a6c2dfcd5 Add small ease-in-out transition between pages. (#66)
Really makes a big difference than before.
2020-12-31 10:21:00 -07:00
Geometrically
7e891ecb79 Fix user lookup (#65)
* Teams

* Fix errors on versions with no files

* Fix user lookup
2020-12-28 22:06:50 -07:00
Geometrically
12840f2428 Teams (#64)
* Teams

* Fix errors on versions with no files
2020-12-28 10:50:59 -07:00
Geometrically
0b160a6741 GitHub Actions 2020-12-24 18:48:50 -07:00
calum6541
dff34a8ae2 Added new options to the settings dashboard tab. (#60)
* Created developer tools dashboard

* Remove PopUp and use inline version

* Moved developer tools to the settings tab

At request of Geo

* Fixed some bugs.

* Fix Typos and flex on buttons

* Lowercased token

* Fix button styles

* Move screenshot in-house.

* Move screenshot in-house.

* Completed Developer Settings and Added features to Settings Tab.

Also fixed the about page, updated the "alpha" mention to beta.

* Update revoke-token.vue
2020-12-24 18:24:37 -07:00
Geometrically
8f780ad89e Google ad verification code 2020-12-22 19:35:33 -07:00
Jai A
4624ef393d Merge branch 'master' of https://github.com/modrinth/knossos 2020-12-21 22:26:01 -07:00
Jai A
2ce8a890e2 Re-add EthicalAds 2020-12-21 22:25:46 -07:00
Prospector
90e0e9000e Fix environment supportedness on create page too 2020-12-21 19:00:08 -08:00
Jai A
a6bb1c156d Fix bio description 2020-12-20 22:03:47 -07:00
ProspectorDev
31db8161b5 Remove the broken No Functionality side option and replace with Optional 2020-12-17 22:43:29 -08:00
Jai A
c0d1448080 Fix some links not using slugs 2020-12-16 16:19:49 -07:00
Jai A
4e4f4e60b6 Merge 2020-12-16 13:32:06 -07:00
Jai A
dcc83271af Add slugs 2020-12-16 13:30:20 -07:00
Geometrically
a38458c9be Add user settings page (#58)
* Several fixes

* User edit page
2020-12-16 13:24:17 -07:00
Gamebuster
7934f65ae8 Mod authors don't give rights to modrinth forever (#56)
Modrinth's terms has an issue similar to what overwolf used to have:

https://curseforge-ideas.overwolf.com/ideas/CF-I-222
2020-12-15 12:57:58 -07:00
Alistair Jenkins
aea0cec061 Accessibility Changes (#53)
* Semantic HTML: Cards are now articles.

* Semantic HTML: Changed aside to header.

* Changed some references from aside to header.

* Added aria-label to left and right buttons.

* Added aria-hidden to catergory icons.

* Added aria-label to the logo.

* Added aria-hidden on more icons.

* Added aria-hidden to some icons.
2020-12-11 13:11:31 -07:00
Jai A
7ac56b1a0c Peformance fixes for mod pages, Fix #52, #51 2020-12-10 17:01:00 -07:00
Jai A
f5ed0b700f Ad ads code 2020-12-06 18:04:04 -07:00
Jai A
1ff3b83766 File input fixes 2020-12-06 17:41:45 -07:00
Jai A
40eca1727e Icon editing, ready for review button 2020-12-03 15:41:09 -07:00
Jai A
9505e68ef7 Ad verification 2020-12-02 19:55:51 -07:00
Jai A
5847806a16 Allow editing of drafts 2020-12-02 13:06:26 -07:00
Jai A
e427ea44aa Fix Internal Server Error 2020-12-02 12:00:38 -07:00
Jai A
8df8bf33a4 Fix sorting 2020-12-02 10:56:50 -07:00
Jai A
29d2b942e8 Cleaner request formatting 2020-12-02 10:45:31 -07:00
Jai A
992cdb992a Fix some moderation bugs 2020-12-01 11:39:47 -07:00
Prospector
db0dc71319 Fix discord field model 2020-12-01 02:29:26 -08:00
Prospector
2c871d1339 Make edit button on dashboard more visible and fix edit button on mod page 2020-11-30 19:10:17 -08:00
Prospector
9673922ca1 Prevent sign in button from wrapping Closes #43 2020-11-30 19:03:58 -08:00
Jai A
d311870b61 Fix file upload box showing for everyone 2020-11-30 17:51:01 -07:00
Jai A
8dd1ff593a Add version title to request 2020-11-30 16:05:40 -07:00
Jai A
0f64a769c2 Fix mod creation 2020-11-30 15:47:21 -07:00
Jai A
a8d150db5c Remove CurseForge integration - some more minor fixes 2020-11-30 15:34:04 -07:00
Jai A
d7e6367ff3 Minor Fixes 2020-11-30 15:10:30 -07:00
Prospector
7b84d8c3d5 [WIP] Rework design (#34)
* WIP: Redesign the default layout

* Merge old & new default layouts

* Fix login logic; add proper user controls dropdown

* Fix latest version listing (#31) (#32)

Co-authored-by: Aeledfyr <45501007+Aeledfyr@users.noreply.github.com>

* First pass of design cleanup

* Improve ad integration and fix light theme

* Begin splitting up variables, change some styling to new mockup

* Continue redesign progress

* Work on some more pages

* Add missing dark theme variables for text

* Continue working on modularizing

* Continue progress, redo pagination

* Fix auth buttons in navbar layout

* Continue progress

* Continue progress more

* Redo ModResult

* Scope ModPage :irritater:

* Continue Dashboard

* Continue progress on Dashboard and cleanup

* Add missing variables for dark theme

* Small tweaks, cleanup, and continue mod page progress

* Fix user not being able to see hidden mods that they own

* Start reworking mod creation

* Continue revamp of mod creation page

* Yank v-html out

* Hotfix markdown rendering and some spacing issues

* Move legal; continue with mod creation; create reusable footer

* Create README.md

* Update README.md

* Update README.md

* Add in basic usage instructions

* Fix some stuff

* Continue with mod creation; fix some CSS errors

* Start user page

* Start transition to vue-select; fix a few bugs

* Continue mod creation page

* Finish mod pages

* Add very raw version editing

* Mod editing + creation

* Fixed versions that were in processing causing a 404 (#39)

Co-authored-by: Mikhail Oleynikov <falseresync@gmail.com>
Co-authored-by: Aeledfyr <45501007+Aeledfyr@users.noreply.github.com>
Co-authored-by: Jai A <jai.a@tuta.io>
Co-authored-by: MulverineX <mulverin3@gmail.com>
Co-authored-by: diabolical17 <calumproh28@gmail.com>
Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
2020-11-30 14:55:01 -07:00
Jai A
e025df0824 Fix main page, fix mod creation 2020-11-28 08:57:14 -07:00
Jai A
c3392d5386 Fix mod creation again 2020-11-27 14:30:07 -07:00
Jai A
2c09e6a7c0 Update mod creation 2020-11-27 10:56:38 -07:00
Jamie Mansfield
2a0740e135 Apply 'active-paginate' to Previous button (#35)
This has the effect of the cursor being shown when hovering over
the previous button.
2020-11-19 13:41:54 +03:00
diabolical17
ac65357c8a Template Codeblock with example for index.vue (#29)
* Replace runkit GIF with actual code on index.vue

Sometimes the GIF will not load due to a slow or crappy connection.
Syntax highlighting could be added at a later date.

* Added syntax highlighting with vue highlightJS

* Move scss to highlightjs.scss

* Introduce better syntax highlighting.

* Changed to monospace font
2020-11-16 16:28:33 +03:00
Aeledfyr
07c255f7f8 Fix latest version listing (#31) 2020-11-10 10:59:54 -07:00
Jai A
198b3c9f1b Full mobile support 2020-11-05 21:44:08 -07:00
Jai A
f5c567eb90 Merge branch 'master' of https://github.com/modrinth/knossos 2020-11-05 18:01:00 -07:00
Jai A
8ca09f6384 Fix ad warning, add snapshot search 2020-11-05 18:00:40 -07:00
Charalampos Fanoulis
386dfe42d0 fix: word the alt text (#27) 2020-11-04 22:11:41 +03:00
Jai A
7445f43b1b Tooltips, alternate ad text, better error messages 2020-11-03 21:29:45 -07:00
Jai A
5b77e78662 Unpushed stuff 2020-11-02 22:05:08 -07:00
Jai A
4b0b8d4de2 New error page, add legal pages, responsiveness for home page 2020-11-02 22:04:40 -07:00
Jai A
b7de47b6fb Fix Theme Change breaking ads 2020-10-31 09:59:57 -07:00
Jai A
3434907f52 Update Ad Placement, fix version sorting 2020-10-30 22:15:08 -07:00
Jai A
099adb3853 Merge branch 'master' of https://github.com/modrinth/knossos 2020-10-28 20:43:10 -07:00
Jai A
dd9b1c047c Change to EthicalAds 2020-10-28 20:39:44 -07:00
Aeledfyr
6084bb15cf Fix meta tags for embeds (#11) 2020-10-26 19:21:43 -07:00
Jai A
42b568952e Edit version route 2020-10-25 14:03:18 -07:00
Jai A
d3bac307bb Test ads, fix search reload on non-relevance sort types 2020-10-25 13:48:13 -07:00
Jai A
7e488b0fa3 Allow null changelogs 2020-10-25 09:15:04 -07:00
Jai A
7d7a6191ce Fix version creation 2020-10-25 08:55:55 -07:00
Jai A
5c644b31ca Make edit buttons hidden when not authorized 2020-10-23 19:27:04 -07:00
Jai A
7b4398dfee Finish ability to add files to versions and create new versions 2020-10-23 13:48:42 -07:00
Jai A
663418e943 Move everything to components, (WIP) Version creation 2020-10-22 22:46:10 -07:00
Jai A
969bec248a Add version page 2020-10-21 21:24:39 -07:00
Jai A
8f487d7d4e Bug Fixes 2020-10-21 14:30:13 -07:00
Jai A
89ebce79b2 Add versions section 2020-10-21 13:43:49 -07:00
Jai A
34ce510fbd Mod pages base 2020-10-20 22:33:49 -07:00
Jai A
39f29399e7 Turn off dev mode in production, work on mod pages 2020-10-19 22:02:29 -07:00
Jai A
8cd4cc7d0d Fix SVGs, cleanup, switch stats backend 2020-10-18 20:00:03 -07:00
Jai A
608ab8f4ad Fix creation + make it more accessible. Also added User Pages. User Context Menu moved to settings cog 2020-10-17 11:28:05 -07:00
Jai A
e95643f198 Remove console statements 2020-10-16 12:45:47 -07:00
Jai A
3b1712345b Creation fixes 2020-10-16 12:44:32 -07:00
Jai A
6effe47bcc Finish mod creation 2020-10-15 20:23:01 -07:00
Jai A
205080a210 Creation work 2020-10-14 16:03:09 -07:00
Jai A
bc998988c2 Mod creation WIP 2020-10-12 22:33:56 -07:00
Jai A
80b470cfd3 Fix scaling issue 2020-10-11 22:46:26 -07:00
Jai A
3df2b4b7f8 Add ackee analytics 2020-10-10 20:12:08 -07:00
Jai A
6141b60294 Fix embed finally 2020-10-09 20:09:38 -07:00
Jai A
e1cfb0cab6 Edit embed again 2020-10-09 19:52:12 -07:00
Jai A
9b9782ce94 Change embed 2020-10-09 18:57:26 -07:00
Jai A
5d9eb25e38 Fix meta tags 2020-10-09 15:48:02 -07:00
Jai A
f4a518ce6b Remove lots of inline SVGs, use moment.js for times, add some pages for future work 2020-10-09 14:25:02 -07:00
Jai A
3656e6ef54 Some search fixes, switch from created() to fetch() for SSR 2020-10-04 20:19:48 -07:00
Jai A
a545d7d8b1 Add user context menu 2020-10-03 22:55:58 -07:00
Jai A
3127f7a31b A little bit of SEO, fix auth callback URL 2020-10-02 22:50:41 -07:00
Jai A
f561de200d Auth 2020-10-02 21:05:43 -07:00
Jai A
d85a063db8 General fixes, compress gifs 2020-10-02 12:58:00 -07:00
Jai A
d6bf935ceb Lazy load GIFs 2020-10-01 22:56:59 -07:00
Jai A
0d6ff822e7 Landing page 2020-10-01 22:46:07 -07:00
Jai A
1c0cc8e91c Homepage base 2020-09-30 22:37:34 -07:00
Jai A
fb38573b7e Make Search fully SSR 2020-09-22 08:21:07 -07:00
stairman06
8a2f45ec23 Make responsive (#8)
* Refactor ModResult to use CSS Grid

* Mobile support for ModResult

* Mobile navbar

* Mobile fixes, get rid of x overflow

* Mobile filter support

* Fully responsive

* Collapse categories view later

* Mobile-first

* Fix version selector width
2020-09-18 13:05:13 -07:00
Jai A
fee2eb9251 Fix spinner CSS, add snapshots + alpha/beta versions 2020-09-18 10:23:25 -07:00
Jai A
24035c4ae8 Finish Search 2020-09-17 22:14:57 -07:00
Jai A
aa8215df34 URL Handling 2020-09-16 22:35:58 -07:00
Jai A
eb78e3d640 Version filters 2020-09-15 21:43:11 -07:00
Jai A
f8201cd2bc Fix filters using OR queries 2020-09-14 22:13:11 -07:00
Jai A
f37b3ecd26 Dark Theme 2020-09-13 20:11:34 -07:00
Jai A
e6dba59ae6 Add normalize css and clear filters button 2020-09-11 22:34:11 -07:00
Jai A
a7bc6b4f36 Platform filters 2020-09-10 18:12:43 -07:00
Jai A
cacc5ac803 License disclosure 2020-09-08 22:09:46 -07:00
Jai A
46dc0f144b Fix clipping on select, fix another scaling issue 2020-09-07 17:37:15 -07:00
Jai A
3cc5275592 Make search results conform to window size 2020-09-07 17:31:24 -07:00
Jai A
a3955a1ba8 Sort types 2020-09-07 17:11:26 -07:00
Jai A
89dfaf1d5d Pagination fixes, change displayed results to 6 2020-09-07 13:01:42 -07:00
Jai A
fc6246c5cb Pagination 2020-09-06 22:29:35 -07:00
Jai A
ce8a0cab2a Unpushed stuff 2020-09-06 18:58:55 -07:00
Jai A
b36b6c78a2 Add search filters 2020-09-05 14:23:19 -07:00
Jai A
5232dc6485 Fix no results bug 2020-09-04 20:19:19 -07:00
Jai A
b1d9fc6c9a Filters base 2020-09-03 22:01:23 -07:00
Geometrically
80ded84f7a Search (#7)
* Initial Search Item

* Pagination thing

* Local changes

* Push component

* Interface with API

* Temporary loader indication

* Fix sidebar spacing

* Filters sidebar

* Add filters sidebar

* Make package files the same
2020-09-02 07:55:48 -07:00
Jai A
8394535725 Remove security vulnerability 2020-09-01 11:43:12 -07:00
Geometrically
adf780d25b Google Ads (#6) 2020-09-01 11:30:09 -07:00
Geometrically
749ae3deb3 Dockerize knossos (#5)
* Dockerize knossos

* Docker actions

* Remove useless thing
2020-09-01 09:08:35 -07:00
Siphalor
2d7760e67c Add line ending configuration (#4) 2020-07-17 20:38:16 +03:00
Mikhail Oleynikov
c915926e0f Merge branch 'master' of github.com:modrinth/dungeon 2020-07-14 16:43:03 +03:00
Mikhail Oleynikov
25203934e6 Switch to Nuxt 2020-07-14 16:42:46 +03:00
Geometrically
4b1b2878ea Create LICENSE.md 2020-07-01 11:15:45 +03:00
Mikhail Oleynikov
b11d5514b9 Initial commit 2020-06-29 11:56:46 +03:00
1004 changed files with 110273 additions and 23321 deletions

View File

@@ -1,3 +1,3 @@
# Windows has stack overflows when calling from Tauri, so we increase compiler size
[target.'cfg(windows)']
rustflags = ["-C", "link-args=/STACK:16777220"]
rustflags = ["-C", "link-args=/STACK:16777220"]

View File

@@ -1,13 +1,18 @@
# Editor configuration, see http://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
trim_trailing_whitespace = true
max_line_length = 100
[*.md]
max_line_length = off
trim_trailing_whitespace = false
[*.rs]
indent_size = 4

59
.github/ISSUE_TEMPLATE/1-app-bug.yml vendored Normal file
View File

@@ -0,0 +1,59 @@
name: 🎮 Modrinth App bug
description: Report an issue in the Modrinth Launcher.
labels: [bug, app]
body:
- type: checkboxes
attributes:
label: Please confirm the following.
options:
- label: I checked the [existing issues](https://github.com/modrinth/code/issues) for duplicate problems
required: true
- label: I have tried resolving the issue using the [support portal](https://support.modrinth.com)
required: true
- label: I have ensured my Modrinth App installation is up to date
required: true
- type: input
id: version
attributes:
label: What version of the Modrinth App are you using?
description: Find this in ⚙️ Settings (bottom right) -> About -> App version.
validations:
required: true
- type: dropdown
id: oses
attributes:
label: What operating systems are you seeing the problem on?
multiple: true
options:
- Windows
- MacOS
- Linux
- type: textarea
attributes:
label: Describe the bug
description: A clear and concise description of what the bug is. Include screenshots if applicable.
validations:
required: true
- type: textarea
attributes:
label: Steps to reproduce
description: Steps to reproduce the behavior.
placeholder: |
1. Go to '...'
2. Click on '...'
3. Scroll down to '...'
4. See error
validations:
required: false
- type: textarea
attributes:
label: Expected behavior
description: A clear and concise description of what you expected to happen.
validations:
required: false
- type: textarea
attributes:
label: Additional context
description: Add any other context about the problem here.
validations:
required: false

52
.github/ISSUE_TEMPLATE/2-web-bug.yml vendored Normal file
View File

@@ -0,0 +1,52 @@
name: 🌐 Website bug (modrinth.com)
description: Report an issue on the Modrinth website.
labels: [bug, frontend]
body:
- type: checkboxes
attributes:
label: Please confirm the following.
options:
- label: I checked the [existing issues](https://github.com/modrinth/code/issues) for duplicate problems
required: true
- label: I have tried resolving the issue using the [support portal](https://support.modrinth.com)
required: true
- type: dropdown
id: browsers
attributes:
label: What browsers are you seeing the problem on?
multiple: true
options:
- Chrome (including Arc, Brave, Opera, Vivaldi)
- Microsoft Edge
- Firefox
- Safari
- Other (please specify)
- type: textarea
attributes:
label: Describe the bug
description: A clear and concise description of what the bug is. Include screenshots if applicable.
validations:
required: false
- type: textarea
attributes:
label: Steps to reproduce
description: Steps to reproduce the behavior.
placeholder: |
1. Go to '...'
2. Click on '...'
3. Scroll down to '...'
4. See error
validations:
required: false
- type: textarea
attributes:
label: Expected behavior
description: A clear and concise description of what you expected to happen.
validations:
required: false
- type: textarea
attributes:
label: Additional context
description: Add any other context about the problem here.
validations:
required: false

View File

@@ -1,11 +1,19 @@
name: Bug report
description: Create a report to help us improve Modrinth
labels: [bug]
name: 🛠️ API issue (api.modrinth.com)
description: Report an issue regarding the Modrinth API.
labels: [bug, api]
body:
- type: checkboxes
attributes:
label: Please confirm the following.
options:
- label: I checked the [existing issues](https://github.com/modrinth/code/issues) for duplicate problems
required: true
- label: I have tried resolving the issue using the [support portal](https://support.modrinth.com)
required: true
- type: textarea
attributes:
label: Describe the bug
description: A clear and concise description of what the bug is.
description: A clear and concise description of what the bug is. Include screenshots if applicable.
validations:
required: false
- type: textarea
@@ -25,13 +33,9 @@ body:
description: A clear and concise description of what you expected to happen.
validations:
required: false
- type: textarea
attributes:
label: System information
description: Add any information about what OS you are on (like Windows or Mac), and what version of the app you are using.
- type: textarea
attributes:
label: Additional context
description: Add any other context about the problem here. This might include logs, screenshots, etc. The more the merrier!
description: Add any other context about the problem here.
validations:
required: false
required: false

View File

@@ -1,10 +1,28 @@
name: Enhancement
description: Suggest an enhancement for an existing Modrinth feature
name: 💡 Feature Request
description: Suggest an idea
labels: [enhancement]
body:
- type: checkboxes
attributes:
label: Please confirm the following.
options:
- label: I checked the [existing issues](https://github.com/modrinth/code/issues) for duplicate feature requests
required: true
- label: I have checked that this feature request is not on our [roadmap](https://roadmap.modrinth.com)
required: true
- type: dropdown
id: projects
attributes:
label: What parts of Modrinth is your feature request related too?
multiple: true
options:
- App
- Website
- API
- type: textarea
attributes:
label: Is your suggested enhancement related to a problem? Please describe.
label: Is your suggested feature related to a problem? Please describe.
description: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
validations:
required: false
@@ -25,4 +43,4 @@ body:
label: Additional context
description: Add any other context or screenshots about the suggested enhancement here.
validations:
required: false
required: false

View File

@@ -1,16 +1,14 @@
blank_issues_enabled: true
contact_links:
- name: Discord
about: Ask questions on our Discord Server.
- name: 🫶 Support Portal
about: Get support using through our portal.
url: https://support.modrinth.com
- name: 💬 Chat
about: Join our Discord server to chat about Modrinth.
url: https://discord.modrinth.com
- name: Roadmap
- name: 🛣️ Roadmap
about: View our Roadmap. Please do not open issues for items on our roadmap.
url: https://roadmap.modrinth.com
- name: Discussions (Feature requests)
about: |
Please use Issues for reporting bugs and suggesting enhancements to existing features.
Suggestions for new features should be made as a Discussion.
url: https://github.com/orgs/modrinth/discussions/categories/feature-requests
- name: Documentation
about: Useful documentation about Modrinth, its API, and how you can contribute.
url: https://docs.modrinth.com
- name: 📚 Documentation
about: Useful documentation about Modrinth's API
url: https://docs.modrinth.com

BIN
.github/assets/app_cover.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
.github/assets/monorepo_cover.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 KiB

BIN
.github/assets/web_cover.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

155
.github/workflows/app-release.yml vendored Normal file
View File

@@ -0,0 +1,155 @@
name: 'Modrinth App build'
on:
push:
branches:
- main
tags:
- 'v*'
paths:
- .github/workflows/app-release.yml
- 'apps/app/**'
- 'apps/app-frontend/**'
- 'packages/app-lib/**'
- 'packages/app-macros/**'
- 'packages/assets/**'
- 'packages/ui/**'
- 'packages/utils/**'
workflow_dispatch:
jobs:
build:
strategy:
fail-fast: false
matrix:
platform: [macos-latest, windows-latest, ubuntu-22.04]
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v4
- name: Rust setup (mac)
if: startsWith(matrix.platform, 'macos')
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
targets: aarch64-apple-darwin, x86_64-apple-darwin
- name: Rust setup
if: "!startsWith(matrix.platform, 'macos')"
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- name: Setup rust cache
uses: actions/cache@v4
with:
path: |
target/**
!target/*/release/bundle/*/*.dmg
!target/*/release/bundle/*/*.app.tar.gz
!target/*/release/bundle/*/*.app.tar.gz.sig
!target/release/bundle/*/*.dmg
!target/release/bundle/*/*.app.tar.gz
!target/release/bundle/*/*.app.tar.gz.sig
!target/release/bundle/*/*.AppImage
!target/release/bundle/*/*.AppImage.tar.gz
!target/release/bundle/*/*.AppImage.tar.gz.sig
!target/release/bundle/*/*.deb
!target/release/bundle/*/*.rpm
!target/release/bundle/msi/*.msi
!target/release/bundle/msi/*.msi.zip
!target/release/bundle/msi/*.msi.zip.sig
!target/release/bundle/nsis/*.exe
!target/release/bundle/nsis/*.nsis.zip
!target/release/bundle/nsis/*.nsis.zip.sig
key: ${{ runner.os }}-rust-target-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-rust-target-
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install pnpm via corepack
shell: bash
run: |
corepack enable
corepack prepare --activate
- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Setup pnpm cache
uses: actions/cache@v4
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: install dependencies (ubuntu only)
if: startsWith(matrix.platform, 'ubuntu')
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev build-essential curl wget file libxdo-dev libssl-dev pkg-config libayatana-appindicator3-dev librsvg2-dev
- name: Install frontend dependencies
run: pnpm install
- name: build app (macos)
run: pnpm --filter=@modrinth/app run tauri build --target universal-apple-darwin --config "tauri-release.conf.json"
if: startsWith(matrix.platform, 'macos')
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ENABLE_CODE_SIGNING: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
- name: build app
run: pnpm --filter=@modrinth/app run tauri build --config "tauri-release.conf.json"
id: build_os
if: "!startsWith(matrix.platform, 'macos')"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
- name: upload ${{ matrix.platform }}
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.platform }}
path: |
target/*/release/bundle/*/*.dmg
target/*/release/bundle/*/*.app.tar.gz
target/*/release/bundle/*/*.app.tar.gz.sig
target/release/bundle/*/*.dmg
target/release/bundle/*/*.app.tar.gz
target/release/bundle/*/*.app.tar.gz.sig
target/release/bundle/*/*.AppImage
target/release/bundle/*/*.AppImage.tar.gz
target/release/bundle/*/*.AppImage.tar.gz.sig
target/release/bundle/*/*.deb
target/release/bundle/*/*.rpm
target/release/bundle/msi/*.msi
target/release/bundle/msi/*.msi.zip
target/release/bundle/msi/*.msi.zip.sig
target/release/bundle/nsis/*.exe
target/release/bundle/nsis/*.nsis.zip
target/release/bundle/nsis/*.nsis.zip.sig

70
.github/workflows/ci.yml vendored Normal file
View File

@@ -0,0 +1,70 @@
name: CI
on:
push:
branches: ["main"]
pull_request:
types: [opened, synchronize]
merge_group:
types: [ checks_requested ]
jobs:
build:
name: Build, Test, and Lint
runs-on: ubuntu-22.04
steps:
- name: Check out code
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Cache turbo build setup
uses: actions/cache@v4
with:
path: .turbo
key: ${{ runner.os }}-turbo-${{ github.sha }}
restore-keys: |
${{ runner.os }}-turbo-
- name: Install build dependencies
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
- name: Setup Node.JS environment
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install pnpm via corepack
shell: bash
run: |
corepack enable
corepack prepare --activate
- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v4
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install
- name: Build
run: pnpm build
- name: Lint
run: pnpm lint
- name: Test
run: pnpm test

View File

@@ -1,44 +0,0 @@
name: CLI Build + Lint
on:
push:
branches: [ master ]
pull_request:
env:
CARGO_TERM_COLOR: always
jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./theseus_cli
steps:
- name: Checkout
uses: actions/checkout@v3
- name: install dependencies
run: |
sudo apt-get update
sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libappindicator3-dev librsvg2-dev patchelf
- name: Rust setup
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: './src-tauri -> target'
- uses: actions-rs/cargo@v1
name: Build program
with:
command: build
args: --bin theseus_cli
- name: Run Lint
uses: actions-rs/clippy-check@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
args: --bin theseus_cli

28
.github/workflows/frontend-pages.yml vendored Normal file
View File

@@ -0,0 +1,28 @@
name: Deploy frontend
on: push
jobs:
wait:
if: github.repository_owner == 'modrinth'
runs-on: ubuntu-latest
permissions:
contents: read
deployments: write
steps:
- name: Cloudflare Pages deployment
uses: WalshyDev/cf-pages-await@v1
with:
apiToken: ${{ secrets.CF_API_TOKEN }}
accountId: '9ddae624c98677d68d93df6e524a6061'
project: 'frontend'
githubToken: ${{ secrets.GITHUB_TOKEN }}
commitHash: ${{ steps.push-changes.outputs.commit-hash }}
- name: Purge cache
if: github.ref == 'refs/heads/prod'
run: |
curl -X POST \
-H "Authorization: Bearer ${{ secrets.CF_API_TOKEN }}" \
-H "Content-Type: application/json" \
--data '{"hosts": ["modrinth.com", "www.modrinth.com"]}' \
https://api.cloudflare.com/client/v4/zones/e39df17b9c4ef44cbce2646346ee6d33/purge_cache

View File

@@ -1,42 +0,0 @@
name: GUI Build + Lint
on:
push:
branches: [master]
pull_request:
jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./theseus_gui
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: 18.x
- name: Install pnpm via corepack
shell: bash
run: |
corepack enable
corepack prepare --activate
- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Setup pnpm cache
uses: actions/cache@v3
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install
- name: Run Lint
run: pnpm lint
- name: Build
run: pnpm build

View File

@@ -1,109 +0,0 @@
name: 'Tauri GUI Build'
on:
push:
branches: [ master ]
pull_request:
jobs:
test-tauri:
strategy:
fail-fast: false
matrix:
platform: [macos-latest, windows-latest, ubuntu-20.04, ubuntu-22.04]
runs-on: ${{ matrix.platform }}
defaults:
run:
working-directory: ./theseus_gui
steps:
- uses: actions/checkout@v3
- name: Rust setup (mac)
if: startsWith(matrix.platform, 'macos')
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
targets: aarch64-apple-darwin
- name: Rust setup
if: "!startsWith(matrix.platform, 'macos')"
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: './src-tauri -> target'
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: 18.x
- name: Install pnpm via corepack
shell: bash
run: |
corepack enable
corepack prepare --activate
- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Setup pnpm cache
uses: actions/cache@v3
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: install dependencies (ubuntu only)
if: startsWith(matrix.platform, 'ubuntu')
run: |
sudo apt-get update
sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libappindicator3-dev librsvg2-dev patchelf libselinux1
- name: Install frontend dependencies
run: pnpm install
- name: build app (macos)
uses: tauri-apps/tauri-action@v0
id: build_os_mac
if: startsWith(matrix.platform, 'macos')
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ENABLE_CODE_SIGNING: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
with:
args: --target universal-apple-darwin
- name: build app
uses: tauri-apps/tauri-action@v0
id: build_os
if: "!startsWith(matrix.platform, 'macos')"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
- name: upload ${{ matrix.platform }}
uses: actions/upload-artifact@v3
if: startsWith(matrix.platform, 'macos')
with:
name: ${{ matrix.platform }}
path: "${{ join(fromJSON(steps.build_os_mac.outputs.artifactPaths), '\n') }}"
- name: upload ${{ matrix.platform }}
uses: actions/upload-artifact@v3
if: "!startsWith(matrix.platform, 'macos')"
with:
name: ${{ matrix.platform }}
path: "${{ join(fromJSON(steps.build_os.outputs.artifactPaths), '\n') }}"

161
.gitignore vendored
View File

@@ -1,114 +1,57 @@
/target
node_modules/
.svelte-kit/
theseus_gui/build/
theseus_gui/generated/
WixTools
.direnv/
# See http://help.github.com/ignore-files/ for more about ignoring files.
# compiled output
dist
tmp
/out-tsc
# dependencies
node_modules
# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
# misc
/.sass-cache
/connect.lock
/coverage
/libpeerconnection.log
npm-debug.log
yarn-error.log
testem.log
/typings
# System Files
.DS_Store
.pnpm-debug.log
Thumbs.db
minecraft
config
# Nuxt dev/build outputs
.output
.data
.nuxt
.nitro
.cache
[#]*[#]
# frontend generated files
apps/frontend/src/generated
# TEMPORARY: ignore my test instance and metadata
theseus_cli/foo
### Intellij+all ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# AWS User-specific
.idea/**/aws.xml
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# SonarLint plugin
.idea/sonarlint/
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
### Intellij+all Patch ###
# Ignore everything but code style settings and run configurations
# that are supposed to be shared within teams.
.idea/*
!.idea/codeStyles
!.idea/runConfigurations
# These are backup files generated by rustfmt
**/*.rs.bk
# MSVC Windows builds of rustc generate these, which store debugging information
*.pdb
theseus.iml
.turbo
target
generated
.env
# app testing dir
app-playground-data/*

2
.npmrc Normal file
View File

@@ -0,0 +1,2 @@
strict-peer-dependencies=false
auto-install-peers=true

View File

@@ -1,12 +1,3 @@
{
"recommendations": [
"tauri-apps.tauri-vscode",
"vunguyentuan.vscode-css-variables",
"stylelint.vscode-stylelint",
"eamodio.gitlens",
"esbenp.prettier-vscode",
"pivaszbs.svelte-autoimport",
"svelte.svelte-vscode",
"ardenivanov.svelte-intellisense"
]
}
"recommendations": ["esbenp.prettier-vscode", "Vue.volar", "rust-lang.rust-analyzer"]
}

160
.vscode/launch.json vendored
View File

@@ -1,160 +0,0 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug unit tests in library 'theseus'",
"cargo": {
"args": [
"test",
"--no-run",
"--lib",
"--package=theseus"
],
"filter": {
"name": "theseus",
"kind": "lib"
}
},
"args": [],
"cwd": "${workspaceFolder}"
},
{
"type": "lldb",
"request": "launch",
"name": "Debug executable 'theseus_cli'",
"cargo": {
"args": [
"build",
"--bin=theseus_cli",
"--package=theseus_cli"
],
"filter": {
"name": "theseus_cli",
"kind": "bin"
}
},
"args": [],
"cwd": "${workspaceFolder}"
},
{
"type": "lldb",
"request": "launch",
"name": "Debug unit tests in executable 'theseus_cli'",
"cargo": {
"args": [
"test",
"--no-run",
"--bin=theseus_cli",
"--package=theseus_cli"
],
"filter": {
"name": "theseus_cli",
"kind": "bin"
}
},
"args": [],
"cwd": "${workspaceFolder}"
},
{
"type": "lldb",
"request": "launch",
"name": "Debug executable 'theseus_playground'",
"cargo": {
"args": [
"build",
"--bin=theseus_playground",
"--package=theseus_playground"
],
"filter": {
"name": "theseus_playground",
"kind": "bin"
}
},
"args": [],
"cwd": "${workspaceFolder}"
},
{
"type": "lldb",
"request": "launch",
"name": "Debug unit tests in executable 'theseus_playground'",
"cargo": {
"args": [
"test",
"--no-run",
"--bin=theseus_playground",
"--package=theseus_playground"
],
"filter": {
"name": "theseus_playground",
"kind": "bin"
}
},
"args": [],
"cwd": "${workspaceFolder}"
},
{
"type": "lldb",
"request": "launch",
"name": "Debug executable 'theseus_gui'",
"cargo": {
"args": [
"build",
"--bin=theseus_gui",
"--package=theseus_gui"
],
"filter": {
"name": "theseus_gui",
"kind": "bin"
}
},
"args": [],
"cwd": "${workspaceFolder}"
},
{
"type": "lldb",
"request": "launch",
"name": "Debug unit tests in executable 'theseus_gui'",
"cargo": {
"args": [
"test",
"--no-run",
"--bin=theseus_gui",
"--package=theseus_gui"
],
"filter": {
"name": "theseus_gui",
"kind": "bin"
}
},
"args": [],
"cwd": "${workspaceFolder}"
},
{
"type": "lldb",
"request": "launch",
"name": "Tauri Development Debug",
"cargo": {
"args": [
"build",
"--manifest-path=./theseus_gui/src-tauri/Cargo.toml",
"--no-default-features"
]
},
"preLaunchTask": "ui:dev"
},
{
"type": "lldb",
"request": "launch",
"name": "Tauri Production Debug",
"cargo": {
"args": ["build", "--release", "--manifest-path=.theseus_gui/src-tauri/Cargo.toml"]
},
"preLaunchTask": "ui:build"
}
]
}

69
.vscode/settings.json vendored
View File

@@ -1,60 +1,13 @@
{
"cssVariables.lookupFiles": [
"**/*.postcss",
"**/node_modules/omorphia/**/*.postcss"
"prettier.endOfLine": "lf",
"editor.formatOnSave": true,
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact"
],
"cssVariables.blacklistFolders": [
"**/.git",
"**/.svn",
"**/.hg",
"**/CVS",
"**/.DS_Store",
"**/.git",
"**/bower_components",
"**/tmp",
"**/dist",
"**/tests"
],
"gitlens.showWelcomeOnInstall": false,
"gitlens.showWhatsNewAfterUpgrades": false,
"gitlens.plusFeatures.enabled": false,
"gitlens.currentLine.enabled": false,
"gitlens.currentLine.pullRequests.enabled": false,
"gitlens.currentLine.scrollable": true,
"gitlens.codeLens.enabled": false,
"gitlens.hovers.enabled": false,
"CSSNavigation.activeCSSFileExtensions": [
"css",
"postcss"
],
"CSSNavigation.activeHTMLFileExtensions": [
"html",
"svelte",
"js",
"ts"
],
"CSSNavigation.excludeGlobPatterns": [
"**/bower_components/**",
"**/vendor/**",
"**/coverage/**"
],
"CSSNavigation.alwaysIncludeGlobPatterns": [
"./theseus_gui/node_modules/omorphia/**/*.postcss"
],
"html-css-class-completion.HTMLLanguages": [
"html",
"svelte"
],
"html-css-class-completion.includeGlobPattern": "**/*.{postcss,svelte}",
"html-css-class-completion.CSSLanguages": [
"postcss",
],
"svelte.enable-ts-plugin": true,
"svelte.ask-to-enable-ts-plugin": false,
"svelte.plugin.css.diagnostics.enable": false,
"svelte.plugin.svelte.diagnostics.enable": false,
"rust-analyzer.linkedProjects": [
"./theseus/Cargo.toml"
],
"rust-analyzer.showUnlinkedFileNotification": false,
}
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
}
}

32
.vscode/tasks.json vendored
View File

@@ -1,32 +0,0 @@
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "ui:dev",
"type": "shell",
// `dev` keeps running in the background
// ideally you should also configure a `problemMatcher`
// see https://code.visualstudio.com/docs/editor/tasks#_can-a-background-task-be-used-as-a-prelaunchtask-in-launchjson
"isBackground": true,
// change this to your `beforeDevCommand`:
"command": "yarn",
"args": ["dev"],
"options": {
"cwd": "${workspaceFolder}/theseus_gui"
}
},
{
"label": "ui:build",
"type": "shell",
// change this to your `beforeBuildCommand`:
"command": "yarn",
"args": ["build"],
"options": {
"cwd": "${workspaceFolder}/theseus_gui"
}
}
]
}

View File

@@ -1,13 +1,13 @@
# Copying
# Copying Guidelines
The source code of the theseus repository is licensed under the GNU General Public License, Version 3 only, which is provided in the file [LICENSE](./LICENSE). However, some files listed below are licensed under a different license.
All packages in this repository are licensed under their respective licenses. For more information, refer to the LICENSE file in each package.
## Modrinth logo
For detailed information, consult each package's COPYING.md file, if available.
Any files depicting the Modrinth branding, including the wrench-in-labyrinth logo, the landing image, and variations thereof, are licensed as follows:
## Modrinth Branding
> All rights reserved. © 2020-2023 Rinth, Inc.
The use of Modrinth branding elements, including but not limited to the wrench-in-labyrinth logo, the landing image, and any variations thereof, is strictly prohibited without explicit written permission from Rinth, Inc. This includes trademarks, logos, or other branding elements.
This includes, but may not be limited to, the following files:
All rights reserved. © 2020-2024 Rinth, Inc.
- theseus_gui/src-tauri/icons/*
If you fork this repository, you must remove all Modrinth branding assets from your fork.

5422
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,24 +1,11 @@
[workspace]
resolver = '2'
members = [
"theseus",
"theseus_cli",
"theseus_playground",
"theseus_gui/src-tauri",
"theseus_macros"
'./packages/app-lib',
'./apps/app-playground',
'./apps/app'
]
[profile.dev]
opt-level = 0
debug = true
debug-assertions = true
overflow-checks = true
lto = false
panic = 'unwind'
incremental = true
codegen-units = 256
rpath = false
# Optimize for speed and reduce size on release builds
[profile.release]
panic = "abort" # Strip expensive panic clean-up logic
@@ -26,3 +13,9 @@ codegen-units = 1 # Compile crates one after another so the compiler can optimiz
lto = true # Enables link to optimizations
opt-level = "s" # Optimize for binary size
strip = true # Remove debug symbols
[profile.dev.package.sqlx-macros]
opt-level = 3
[patch.crates-io]
wry = { git = "https://github.com/modrinth/wry", rev = "27fb16b" }

View File

@@ -1,9 +1,39 @@
# theseus
A game launcher which can be used as a CLI, GUI, and a library for creating and playing modrinth projects
# ![Modrinth Monorepo Cover](/.github/assets/monorepo_cover.png)
Theseus aims to provide three components:
- A library (theseus)
- A CLI (theseus-cli)
- A GUI (theseus-gui)
![Issues](https://img.shields.io/github/issues-raw/Modrinth/code?color=c78aff&label=issues&style=for-the-badge)
![Pull Requests](https://img.shields.io/github/issues-pr-raw/Modrinth/code?color=c78aff&label=PRs&style=for-the-badge)
![Contributors](https://img.shields.io/github/contributors/Modrinth/code?color=c78aff&label=contributors&style=for-the-badge)
![Lines](https://img.shields.io/endpoint?url=https://ghloc.vercel.app/api/modrinth/code/badge?style=flat&logoColor=white&color=c78aff&style=for-the-badge)
![Commit Activity](https://img.shields.io/github/commit-activity/m/Modrinth/code?color=c78aff&label=commits&style=for-the-badge)
![Last Commit](https://img.shields.io/github/last-commit/Modrinth/code?color=c78aff&label=last%20commit&style=for-the-badge)
Feel free to contribute!
## Modrinth Monorepo
Welcome to the Modrinth Monorepo, the primary codebase for the Modrinth web interface and app. It contains ![Lines](https://img.shields.io/endpoint?url=https://ghloc.vercel.app/api/modrinth/olympus/badge?logoColor=white&color=black&label=) lines of code and has ![Contributors](https://img.shields.io/github/contributors/Modrinth/code?color=black&label=) contributors!
If you're not a developer and you've stumbled upon this repository, you can access the web interface on the [Modrinth website](https://modrinth.com) and download the latest release of the app [here](https://modrinth.com/app).
## Development
This repository contains two primary packages. For detailed development information, please refer to their respective READMEs:
- [Web Interface](apps/frontend/README.md)
- [Desktop App](apps/app/README.md)
## Contributing
We welcome contributions! Before submitting any contributions, please read our [contributing guidelines](https://support.modrinth.com/en/articles/8802215-contributing-to-modrinth).
If you plan to fork this repository for your own purposes, please review our [copying guidelines](COPYING.md).
## Security
If you discover a security vulnerability within our codebase, please follow our [responsible disclosure guidelines](https://modrinth.com/legal/security).
## Support
If you need help with the Modrinth web interface or app, please visit our [support page](https://support.modrinth.com). For general inquiries, you can also join our [Discord server](https://discord.modrinth.com).
## License
All packages in this repository are licensed under their respective licenses. Refer to the LICENSE file in each package for more information.

View File

@@ -0,0 +1 @@
**/dist

View File

@@ -0,0 +1,13 @@
# Copying
The source code of the theseus repository is licensed under the GNU General Public License, Version 3 only, which is provided in the file [LICENSE](./LICENSE). However, some files listed below are licensed under a different license.
## Modrinth logo
The use of Modrinth branding elements, including but not limited to the wrench-in-labyrinth logo, the landing image, and any variations thereof, is strictly prohibited without explicit written permission from Rinth, Inc. This includes trademarks, logos, or other branding elements.
> All rights reserved. © 2020-2023 Rinth, Inc.
This includes, but may not be limited to, the following files:
- theseus_gui/src-tauri/icons/\*

View File

@@ -0,0 +1,22 @@
import { createConfigForNuxt } from '@nuxt/eslint-config/flat'
import { fixupPluginRules } from '@eslint/compat'
import turboPlugin from 'eslint-plugin-turbo'
export default createConfigForNuxt().append([
{
name: 'turbo',
plugins: {
turbo: fixupPluginRules(turboPlugin),
},
rules: {
'turbo/no-undeclared-env-vars': 'error',
},
},
{
name: 'modrinth',
rules: {
'vue/html-self-closing': 'off',
'vue/multi-word-component-names': 'off',
},
},
])

View File

@@ -1,10 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<!doctype html>
<html lang="en" class="dark-mode">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Modrinth App</title>
<link rel="stylesheet" href="/src/assets/stylesheets/global.scss" />
</head>
<body>

View File

@@ -0,0 +1,54 @@
{
"name": "@modrinth/app-frontend",
"private": true,
"version": "0.8.8",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vue-tsc --noEmit && vite build",
"tsc:check": "vue-tsc --noEmit",
"lint": "eslint . && prettier --check .",
"fix": "eslint . --fix && prettier --write ."
},
"dependencies": {
"@modrinth/assets": "workspace:*",
"@modrinth/ui": "workspace:*",
"@modrinth/utils": "workspace:*",
"@sentry/vue": "^8.27.0",
"@tauri-apps/api": "^2.0.0-rc.3",
"@tauri-apps/plugin-dialog": "^2.0.0-rc.0",
"@tauri-apps/plugin-os": "^2.0.0-rc.0",
"@tauri-apps/plugin-shell": "^2.0.0-rc.0",
"@tauri-apps/plugin-updater": "^2.0.0-rc.0",
"@tauri-apps/plugin-window-state": "^2.0.0-rc.0",
"@vintl/vintl": "^4.4.1",
"dayjs": "^1.11.10",
"floating-vue": "^5.2.2",
"ofetch": "^1.3.4",
"pinia": "^2.1.7",
"posthog-js": "^1.158.2",
"vite-svg-loader": "^5.1.0",
"vue": "^3.4.21",
"vue-multiselect": "3.0.0",
"vue-router": "4.3.0",
"vue-virtual-scroller": "v2.0.0-beta.8"
},
"devDependencies": {
"@eslint/compat": "^1.1.1",
"@nuxt/eslint-config": "^0.5.6",
"@vitejs/plugin-vue": "^5.0.4",
"autoprefixer": "^10.4.19",
"eslint": "^9.9.1",
"eslint-config-custom": "workspace:*",
"eslint-plugin-turbo": "^2.1.1",
"postcss": "^8.4.39",
"prettier": "^3.2.5",
"sass": "^1.74.1",
"tailwindcss": "^3.4.4",
"tsconfig": "workspace:*",
"typescript": "^5.5.4",
"vite": "^5.2.8",
"vue-tsc": "^2.1.6"
},
"packageManager": "pnpm@9.4.0"
}

View File

@@ -0,0 +1,6 @@
export default {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}

View File

@@ -1,5 +1,5 @@
<script setup>
import { computed, ref, watch } from 'vue'
import { computed, ref, onMounted } from 'vue'
import { RouterView, RouterLink, useRouter, useRoute } from 'vue-router'
import {
HomeIcon,
@@ -7,12 +7,10 @@ import {
LibraryIcon,
PlusIcon,
SettingsIcon,
FileIcon,
Button,
Notifications,
XIcon,
Card,
} from 'omorphia'
DownloadIcon,
} from '@modrinth/assets'
import { Button, Notifications } from '@modrinth/ui'
import { useLoading, useTheming } from '@/store/state'
import AccountsCard from '@/components/ui/AccountsCard.vue'
import InstanceCreationModal from '@/components/ui/InstanceCreationModal.vue'
@@ -20,170 +18,174 @@ import { get } from '@/helpers/settings'
import Breadcrumbs from '@/components/ui/Breadcrumbs.vue'
import RunningAppBar from '@/components/ui/RunningAppBar.vue'
import SplashScreen from '@/components/ui/SplashScreen.vue'
import ErrorModal from '@/components/ui/ErrorModal.vue'
import ModrinthLoadingIndicator from '@/components/modrinth-loading-indicator'
import { handleError, useNotifications } from '@/store/notifications.js'
import { offline_listener, command_listener, warning_listener } from '@/helpers/events.js'
import { MinimizeIcon, MaximizeIcon, ChatIcon } from '@/assets/icons'
import { type } from '@tauri-apps/api/os'
import { appWindow } from '@tauri-apps/api/window'
import { isDev, getOS, isOffline, showLauncherLogsFolder } from '@/helpers/utils.js'
import {
mixpanel_track,
mixpanel_init,
mixpanel_opt_out_tracking,
mixpanel_is_loaded,
} from '@/helpers/mixpanel'
import { saveWindowState, StateFlags } from 'tauri-plugin-window-state-api'
import { command_listener, warning_listener } from '@/helpers/events.js'
import { MinimizeIcon, MaximizeIcon } from '@/assets/icons'
import { type } from '@tauri-apps/plugin-os'
import { isDev, getOS, restartApp } from '@/helpers/utils.js'
import { initAnalytics, debugAnalytics, optOutAnalytics, trackEvent } from '@/helpers/analytics'
import { getCurrentWindow } from '@tauri-apps/api/window'
import { getVersion } from '@tauri-apps/api/app'
import { window as TauriWindow } from '@tauri-apps/api'
import { TauriEvent } from '@tauri-apps/api/event'
import { await_sync, check_safe_loading_bars_complete } from './helpers/state'
import { confirm } from '@tauri-apps/api/dialog'
import URLConfirmModal from '@/components/ui/URLConfirmModal.vue'
import StickyTitleBar from '@/components/ui/tutorial/StickyTitleBar.vue'
import OnboardingScreen from '@/components/ui/tutorial/OnboardingScreen.vue'
import { install_from_file } from './helpers/pack'
import { useError } from '@/store/error.js'
import { useCheckDisableMouseover } from '@/composables/macCssFix.js'
import ModInstallModal from '@/components/ui/install_flow/ModInstallModal.vue'
import IncompatibilityWarningModal from '@/components/ui/install_flow/IncompatibilityWarningModal.vue'
import InstallConfirmModal from '@/components/ui/install_flow/InstallConfirmModal.vue'
import { useInstall } from '@/store/install.js'
import { invoke } from '@tauri-apps/api/core'
import { open } from '@tauri-apps/plugin-shell'
import { get_opening_command, initialize_state } from '@/helpers/state'
import { saveWindowState, StateFlags } from '@tauri-apps/plugin-window-state'
import { renderString } from '@modrinth/utils'
import { useFetch } from '@/helpers/fetch.js'
import { check } from '@tauri-apps/plugin-updater'
const themeStore = useTheming()
const urlModal = ref(null)
const isLoading = ref(true)
const videoPlaying = ref(false)
const offline = ref(false)
const urlModal = ref(null)
const offline = ref(!navigator.onLine)
window.addEventListener('offline', () => {
offline.value = true
})
window.addEventListener('online', () => {
offline.value = false
})
const showOnboarding = ref(false)
const nativeDecorations = ref(false)
const onboardingVideo = ref()
const failureText = ref(null)
const os = ref('')
defineExpose({
initialize: async () => {
isLoading.value = false
const {
native_decorations,
theme,
opt_out_analytics,
collapsed_navigation,
advanced_rendering,
fully_onboarded,
} = await get()
// video should play if the user is not on linux, and has not onboarded
os.value = await getOS()
videoPlaying.value = !fully_onboarded && os.value !== 'Linux'
const dev = await isDev()
const version = await getVersion()
showOnboarding.value = !fully_onboarded
const stateInitialized = ref(false)
nativeDecorations.value = native_decorations
if (os.value !== 'MacOS') appWindow.setDecorations(native_decorations)
const criticalErrorMessage = ref()
themeStore.setThemeState(theme)
themeStore.collapsedNavigation = collapsed_navigation
themeStore.advancedRendering = advanced_rendering
mixpanel_init('014c7d6a336d0efaefe3aca91063748d', { debug: dev, persistence: 'localStorage' })
if (opt_out_analytics) {
mixpanel_opt_out_tracking()
}
mixpanel_track('Launched', { version, dev, fully_onboarded })
if (!dev) document.addEventListener('contextmenu', (event) => event.preventDefault())
if ((await type()) === 'Darwin') {
document.getElementsByTagName('html')[0].classList.add('mac')
} else {
document.getElementsByTagName('html')[0].classList.add('windows')
}
offline.value = await isOffline()
await offline_listener((b) => {
offline.value = b
})
await warning_listener((e) =>
notificationsWrapper.value.addNotification({
title: 'Warning',
text: e.message,
type: 'warn',
})
)
if (showOnboarding.value) {
onboardingVideo.value.play()
}
},
failure: async (e) => {
isLoading.value = false
failureText.value = e
os.value = await getOS()
},
onMounted(async () => {
await useCheckDisableMouseover()
})
const confirmClose = async () => {
const confirmed = await confirm(
'An action is currently in progress. Are you sure you want to exit?',
{
title: 'Modrinth',
type: 'warning',
}
async function setupApp() {
stateInitialized.value = true
const {
native_decorations,
theme,
telemetry,
collapsed_navigation,
advanced_rendering,
onboarded,
default_page,
} = await get()
if (default_page && default_page !== 'Home') {
await router.push({ name: default_page })
}
os.value = await getOS()
const dev = await isDev()
const version = await getVersion()
showOnboarding.value = !onboarded
nativeDecorations.value = native_decorations
if (os.value !== 'MacOS') await getCurrentWindow().setDecorations(native_decorations)
themeStore.setThemeState(theme)
themeStore.collapsedNavigation = collapsed_navigation
themeStore.advancedRendering = advanced_rendering
initAnalytics()
if (!telemetry) {
optOutAnalytics()
}
if (dev) debugAnalytics()
trackEvent('Launched', { version, dev, onboarded })
if (!dev) document.addEventListener('contextmenu', (event) => event.preventDefault())
const osType = await type()
if (osType === 'macos') {
document.getElementsByTagName('html')[0].classList.add('mac')
} else {
document.getElementsByTagName('html')[0].classList.add('windows')
}
await warning_listener((e) =>
notificationsWrapper.value.addNotification({
title: 'Warning',
text: e.message,
type: 'warn',
}),
)
return confirmed
useFetch(
`https://api.modrinth.com/appCriticalAnnouncement.json?version=${version}`,
'criticalAnnouncements',
true,
).then((res) => {
if (res && res.header && res.body) {
criticalErrorMessage.value = res
}
})
get_opening_command().then(handleCommand)
checkUpdates()
}
const stateFailed = ref(false)
initialize_state()
.then(() => {
setupApp().catch((err) => {
stateFailed.value = true
console.error(err)
error.showError(err, null, false, 'state_init')
})
})
.catch((err) => {
stateFailed.value = true
console.error('Failed to initialize app', err)
error.showError(err, null, false, 'state_init')
})
const handleClose = async () => {
if (failureText.value != null) {
await TauriWindow.getCurrent().close()
return
}
// State should respond immeiately if it's safe to close
// If not, code is deadlocked or worse, so wait 2 seconds and then ask the user to confirm closing
// (Exception: if the user is changing config directory, which takes control of the state, and it's taking a significant amount of time for some reason)
const isSafe = await Promise.race([
check_safe_loading_bars_complete(),
new Promise((r) => setTimeout(r, 2000)),
])
if (!isSafe) {
const response = await confirmClose()
if (!response) {
return
}
}
await await_sync()
await TauriWindow.getCurrent().close()
await saveWindowState(StateFlags.ALL)
await getCurrentWindow().close()
}
const openSupport = async () => {
window.__TAURI_INVOKE__('tauri', {
__tauriModule: 'Shell',
message: {
cmd: 'open',
path: 'https://discord.gg/modrinth',
},
})
}
TauriWindow.getCurrent().listen(TauriEvent.WINDOW_CLOSE_REQUESTED, async () => {
await handleClose()
})
const router = useRouter()
router.afterEach((to, from, failure) => {
if (mixpanel_is_loaded()) {
mixpanel_track('PageView', { path: to.path, fromPath: from.path, failed: failure })
}
trackEvent('PageView', { path: to.path, fromPath: from.path, failed: failure })
})
const route = useRoute()
const isOnBrowse = computed(() => route.path.startsWith('/browse'))
const loading = useLoading()
loading.setEnabled(false)
const notifications = useNotifications()
const notificationsWrapper = ref(null)
const notificationsWrapper = ref()
const error = useError()
const errorModal = ref()
const install = useInstall()
const modInstallModal = ref()
const installConfirmModal = ref()
const incompatibilityWarningModal = ref()
onMounted(() => {
invoke('show_window')
watch(notificationsWrapper, () => {
notifications.setNotifs(notificationsWrapper.value)
error.setErrorModal(errorModal.value)
install.setIncompatibilityWarningModal(incompatibilityWarningModal)
install.setInstallConfirmModal(installConfirmModal)
install.setModInstallModal(modInstallModal)
})
document.querySelector('body').addEventListener('click', function (e) {
@@ -195,15 +197,10 @@ document.querySelector('body').addEventListener('click', function (e) {
['http://', 'https://', 'mailto:', 'tel:'].some((v) => target.href.startsWith(v)) &&
!target.classList.contains('router-link-active') &&
!target.href.startsWith('http://localhost') &&
!target.href.startsWith('https://tauri.localhost')
!target.href.startsWith('https://tauri.localhost') &&
!target.href.startsWith('http://tauri.localhost')
) {
window.__TAURI_INVOKE__('tauri', {
__tauriModule: 'Shell',
message: {
cmd: 'open',
path: target.href,
},
})
open(target.href)
}
e.preventDefault()
break
@@ -228,12 +225,15 @@ document.querySelector('body').addEventListener('auxclick', function (e) {
const accounts = ref(null)
command_listener(async (e) => {
command_listener(handleCommand)
async function handleCommand(e) {
if (!e) return
if (e.event === 'RunMRPack') {
// RunMRPack should directly install a local mrpack given a path
if (e.path.endsWith('.mrpack')) {
await install_from_file(e.path).catch(handleError)
mixpanel_track('InstanceCreate', {
trackEvent('InstanceCreate', {
source: 'CreationModalFileDrop',
})
}
@@ -241,62 +241,26 @@ command_listener(async (e) => {
// Other commands are URL-based (deep linking)
urlModal.value.show(e)
}
})
}
const updateAvailable = ref(false)
async function checkUpdates() {
const update = await check()
console.log(update)
updateAvailable.value = !!update
setTimeout(
() => {
checkUpdates()
},
5 * 1000 * 60,
)
}
</script>
<template>
<StickyTitleBar v-if="videoPlaying" />
<video
v-if="videoPlaying"
ref="onboardingVideo"
class="video"
src="@/assets/video.mp4"
autoplay
@ended="videoPlaying = false"
/>
<div v-if="failureText" class="failure dark-mode">
<div class="appbar-failure dark-mode">
<Button v-if="os != 'MacOS'" icon-only @click="TauriWindow.getCurrent().close()">
<XIcon />
</Button>
</div>
<div class="error-view dark-mode">
<Card class="error-text">
<div class="label">
<h3>
<span class="label__title size-card-header">Failed to initialize</span>
</h3>
</div>
<div class="error-div">
Modrinth App failed to load correctly. This may be because of a corrupted file, or because
the app is missing crucial files.
</div>
<div class="error-div">You may be able to fix it one of the following ways:</div>
<ul class="error-div">
<li>Ennsuring you are connected to the internet, then try restarting the app.</li>
<li>Redownloading the app.</li>
</ul>
<div class="error-div">
If it still does not work, you can seek support using the link below. You should provide
the following error, as well as any recent launcher logs in the folder below.
</div>
<div class="error-div">The following error was provided:</div>
<Card class="error-message">
{{ failureText.message }}
</Card>
<div class="button-row push-right">
<Button @click="showLauncherLogsFolder"><FileIcon />Open launcher logs</Button>
<Button @click="openSupport"><ChatIcon />Get support</Button>
</div>
</Card>
</div>
</div>
<SplashScreen v-else-if="!videoPlaying && isLoading" app-loading />
<OnboardingScreen v-else-if="showOnboarding" :finish="() => (showOnboarding = false)" />
<div v-else class="container">
<SplashScreen v-if="!stateFailed" ref="splashScreen" data-tauri-drag-region />
<div v-if="stateInitialized" class="app-container">
<div class="nav-container">
<div class="nav-section">
<suspense>
@@ -325,6 +289,14 @@ command_listener(async (e) => {
</div>
</div>
<div class="settings pages-list">
<button
v-if="updateAvailable"
v-tooltip="'Install update'"
class="btn btn-outline btn-primary icon-only collapsed-button"
@click="restartApp()"
>
<DownloadIcon />
</button>
<Button
v-tooltip="'Create profile'"
class="sleek-primary collapsed-button"
@@ -340,6 +312,10 @@ command_listener(async (e) => {
</div>
</div>
<div class="view">
<div v-if="criticalErrorMessage" class="critical-error-banner" data-tauri-drag-region>
<h1>{{ criticalErrorMessage.header }}</h1>
<div class="markdown-body" v-html="renderString(criticalErrorMessage.body ?? '')"></div>
</div>
<div class="appbar-row">
<div data-tauri-drag-region class="appbar">
<section class="navigation-controls">
@@ -352,22 +328,17 @@ command_listener(async (e) => {
</section>
</div>
<section v-if="!nativeDecorations" class="window-controls">
<Button class="titlebar-button" icon-only @click="() => appWindow.minimize()">
<Button class="titlebar-button" icon-only @click="() => getCurrentWindow().minimize()">
<MinimizeIcon />
</Button>
<Button class="titlebar-button" icon-only @click="() => appWindow.toggleMaximize()">
<Button
class="titlebar-button"
icon-only
@click="() => getCurrentWindow().toggleMaximize()"
>
<MaximizeIcon />
</Button>
<Button
class="titlebar-button close"
icon-only
@click="
() => {
saveWindowState(StateFlags.ALL)
handleClose()
}
"
>
<Button class="titlebar-button close" icon-only @click="handleClose">
<XIcon />
</Button>
</section>
@@ -389,6 +360,10 @@ command_listener(async (e) => {
</div>
<URLConfirmModal ref="urlModal" />
<Notifications ref="notificationsWrapper" />
<ErrorModal ref="errorModal" />
<ModInstallModal ref="modInstallModal" />
<IncompatibilityWarningModal ref="incompatibilityWarningModal" />
<InstallConfirmModal ref="installConfirmModal" />
</template>
<style lang="scss" scoped>
@@ -440,7 +415,7 @@ command_listener(async (e) => {
}
}
.container {
.app-container {
--appbar-height: 3.25rem;
--sidebar-width: 4.5rem;
@@ -453,6 +428,16 @@ command_listener(async (e) => {
width: calc(100% - var(--sidebar-width));
background-color: var(--color-raised-bg);
.critical-error-banner {
margin-top: -1.25rem;
padding: 1rem;
background-color: rgba(203, 34, 69, 0.1);
border-left: 2px solid var(--color-red);
border-bottom: 2px solid var(--color-red);
border-right: 2px solid var(--color-red);
border-radius: 1rem;
}
.appbar {
display: flex;
align-items: center;
@@ -478,53 +463,6 @@ command_listener(async (e) => {
}
}
.failure {
height: 100vh;
display: flex;
flex-direction: column;
overflow: hidden;
background-color: var(--color-bg);
.appbar-failure {
display: flex; /* Change to flex to align items horizontally */
justify-content: flex-end; /* Align items to the right */
height: 3.25rem;
//no select
user-select: none;
-webkit-user-select: none;
}
.error-view {
display: flex; /* Change to flex to align items horizontally */
justify-content: center;
width: 100%;
background-color: var(--color-bg);
color: var(--color-base);
.card {
background-color: var(--color-raised-bg);
}
.error-text {
display: flex;
max-width: 60%;
gap: 0.25rem;
flex-direction: column;
.error-div {
// spaced out
margin: 0.5rem;
}
.error-message {
margin: 0.5rem;
background-color: var(--color-button-bg);
}
}
}
}
.nav-container {
display: flex;
flex-direction: column;
@@ -588,55 +526,6 @@ command_listener(async (e) => {
}
}
.instance-list {
display: flex;
flex-direction: column;
justify-content: center;
width: 70%;
margin: 0.4rem;
p:nth-child(1) {
font-size: 0.6rem;
}
& > p {
color: var(--color-base);
margin: 0.8rem 0;
font-size: 0.7rem;
line-height: 0.8125rem;
font-weight: 500;
text-transform: uppercase;
}
}
.user-section {
display: flex;
justify-content: flex-start;
align-items: center;
width: 100%;
height: 4.375rem;
section {
display: flex;
flex-direction: column;
justify-content: flex-start;
text-align: left;
margin-left: 0.5rem;
}
.username {
margin-bottom: 0.3rem;
font-weight: 400;
line-height: 1.25rem;
color: var(--color-contrast);
}
a {
font-weight: 400;
color: var(--color-secondary);
}
}
.nav-section {
display: flex;
flex-direction: column;
@@ -647,14 +536,6 @@ command_listener(async (e) => {
gap: 1rem;
}
.video {
margin-top: 2.25rem;
width: 100vw;
height: calc(100vh - 2.25rem);
object-fit: cover;
border-radius: var(--radius-md);
}
.button-row {
display: flex;
flex-direction: row;
@@ -666,3 +547,33 @@ command_listener(async (e) => {
}
}
</style>
<style>
.mac {
.nav-container {
padding-top: calc(var(--gap-md) + 1.75rem);
}
.account-card,
.card-section {
top: calc(var(--gap-md) + 1.75rem);
}
}
.windows {
.fake-appbar {
height: 2.5rem !important;
}
.window-controls {
display: flex !important;
}
.info-card {
right: 8rem;
}
.profile-card {
right: 8rem;
}
}
</style>

View File

Before

Width:  |  Height:  |  Size: 952 B

After

Width:  |  Height:  |  Size: 952 B

View File

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

Before

Width:  |  Height:  |  Size: 901 B

After

Width:  |  Height:  |  Size: 901 B

View File

Before

Width:  |  Height:  |  Size: 757 B

After

Width:  |  Height:  |  Size: 757 B

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 718 B

After

Width:  |  Height:  |  Size: 718 B

View File

Before

Width:  |  Height:  |  Size: 962 B

After

Width:  |  Height:  |  Size: 962 B

View File

Before

Width:  |  Height:  |  Size: 257 B

After

Width:  |  Height:  |  Size: 257 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 415 B

After

Width:  |  Height:  |  Size: 415 B

View File

Before

Width:  |  Height:  |  Size: 274 B

After

Width:  |  Height:  |  Size: 274 B

View File

Before

Width:  |  Height:  |  Size: 706 B

After

Width:  |  Height:  |  Size: 706 B

View File

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

Before

Width:  |  Height:  |  Size: 924 B

After

Width:  |  Height:  |  Size: 924 B

View File

Before

Width:  |  Height:  |  Size: 881 B

After

Width:  |  Height:  |  Size: 881 B

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 315 B

After

Width:  |  Height:  |  Size: 315 B

View File

Before

Width:  |  Height:  |  Size: 427 B

After

Width:  |  Height:  |  Size: 427 B

View File

Before

Width:  |  Height:  |  Size: 311 B

After

Width:  |  Height:  |  Size: 311 B

View File

Before

Width:  |  Height:  |  Size: 326 B

After

Width:  |  Height:  |  Size: 326 B

View File

Before

Width:  |  Height:  |  Size: 359 B

After

Width:  |  Height:  |  Size: 359 B

View File

Before

Width:  |  Height:  |  Size: 322 B

After

Width:  |  Height:  |  Size: 322 B

View File

Before

Width:  |  Height:  |  Size: 253 B

After

Width:  |  Height:  |  Size: 253 B

View File

Before

Width:  |  Height:  |  Size: 315 B

After

Width:  |  Height:  |  Size: 315 B

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 461 B

After

Width:  |  Height:  |  Size: 461 B

View File

Before

Width:  |  Height:  |  Size: 405 B

After

Width:  |  Height:  |  Size: 405 B

View File

Before

Width:  |  Height:  |  Size: 449 B

After

Width:  |  Height:  |  Size: 449 B

View File

Before

Width:  |  Height:  |  Size: 309 B

After

Width:  |  Height:  |  Size: 309 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 937 KiB

View File

@@ -1,3 +1,7 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
:root {
font-family: var(--font-standard);
color-scheme: dark;
@@ -69,44 +73,15 @@ input {
}
}
.mac {
.nav-container {
padding-top: calc(var(--gap-md) + 1.75rem);
}
.account-card,
.card-section {
top: calc(var(--gap-md) + 1.75rem);
}
}
.windows {
.fake-appbar {
height: 2.5rem !important;
}
.window-controls {
display: flex !important;
}
.info-card {
right: 8rem;
}
.profile-card {
right: 8rem;
}
}
* {
scrollbar-width: auto;
scrollbar-color: var(--color-button-bg) var(--color-bg);
scrollbar-color: var(--color-scrollbar) var(--color-bg);
}
/* Chrome, Edge, and Safari */
*::-webkit-scrollbar {
width: var(--gap-md);
border: 3px solid var(--color-bg);
border: 3px solid var(--color-scrollbar);
}
*::-webkit-scrollbar-track {
@@ -115,7 +90,7 @@ input {
}
*::-webkit-scrollbar-thumb {
background-color: var(--color-button-bg);
background-color: var(--color-scrollbar);
border-radius: var(--radius-lg);
border: 3px solid var(--color-bg);
}
@@ -135,3 +110,5 @@ img {
-moz-user-select: none;
-ms-user-select: none;
}
@import '@modrinth/assets/omorphia.scss';

View File

@@ -9,19 +9,16 @@ import {
TrashIcon,
StopCircleIcon,
EyeIcon,
Card,
DropdownSelect,
SearchIcon,
XIcon,
Button,
formatCategoryHeader,
ModalConfirm,
} from 'omorphia'
} from '@modrinth/assets'
import { Button, Card, DropdownSelect } from '@modrinth/ui'
import { formatCategoryHeader } from '@modrinth/utils'
import ContextMenu from '@/components/ui/ContextMenu.vue'
import dayjs from 'dayjs'
import { useTheming } from '@/store/theme.js'
import { duplicate, remove } from '@/helpers/profile.js'
import { handleError } from '@/store/notifications.js'
import ConfirmModalWrapper from '@/components/ui/modal/ConfirmModalWrapper.vue'
const props = defineProps({
instances: {
@@ -38,14 +35,13 @@ const props = defineProps({
const instanceOptions = ref(null)
const instanceComponents = ref(null)
const themeStore = useTheming()
const currentDeleteInstance = ref(null)
const confirmModal = ref(null)
async function deleteProfile() {
if (currentDeleteInstance.value) {
instanceComponents.value = instanceComponents.value.filter(
(x) => x.instance.path !== currentDeleteInstance.value
(x) => x.instance.path !== currentDeleteInstance.value,
)
await remove(currentDeleteInstance.value).catch(handleError)
}
@@ -88,7 +84,7 @@ const handleRightClick = (event, profilePathId) => {
color: 'primary',
},
...baseOptions,
]
],
)
}
@@ -130,46 +126,46 @@ const sortBy = ref('Name')
const filteredResults = computed(() => {
let instances = props.instances.filter((instance) => {
return instance.metadata.name.toLowerCase().includes(search.value.toLowerCase())
return instance.name.toLowerCase().includes(search.value.toLowerCase())
})
if (sortBy.value === 'Name') {
instances.sort((a, b) => {
return a.metadata.name.localeCompare(b.metadata.name)
return a.name.localeCompare(b.name)
})
}
if (sortBy.value === 'Game version') {
instances.sort((a, b) => {
return a.metadata.game_version.localeCompare(b.metadata.game_version)
return a.game_version.localeCompare(b.game_version)
})
}
if (sortBy.value === 'Last played') {
instances.sort((a, b) => {
return dayjs(b.metadata.last_played ?? 0).diff(dayjs(a.metadata.last_played ?? 0))
return dayjs(b.last_played ?? 0).diff(dayjs(a.last_played ?? 0))
})
}
if (sortBy.value === 'Date created') {
instances.sort((a, b) => {
return dayjs(b.metadata.date_created).diff(dayjs(a.metadata.date_created))
return dayjs(b.date_created).diff(dayjs(a.date_created))
})
}
if (sortBy.value === 'Date modified') {
instances.sort((a, b) => {
return dayjs(b.metadata.date_modified).diff(dayjs(a.metadata.date_modified))
return dayjs(b.date_modified).diff(dayjs(a.date_modified))
})
}
if (filters.value === 'Custom instances') {
instances = instances.filter((instance) => {
return !instance.metadata?.linked_data
return !instance.linked_data
})
} else if (filters.value === 'Downloaded modpacks') {
instances = instances.filter((instance) => {
return instance.metadata?.linked_data
return instance.linked_data
})
}
@@ -177,7 +173,7 @@ const filteredResults = computed(() => {
if (group.value === 'Loader') {
instances.forEach((instance) => {
const loader = formatCategoryHeader(instance.metadata.loader)
const loader = formatCategoryHeader(instance.loader)
if (!instanceMap.has(loader)) {
instanceMap.set(loader, [])
}
@@ -186,19 +182,19 @@ const filteredResults = computed(() => {
})
} else if (group.value === 'Game version') {
instances.forEach((instance) => {
if (!instanceMap.has(instance.metadata.game_version)) {
instanceMap.set(instance.metadata.game_version, [])
if (!instanceMap.has(instance.game_version)) {
instanceMap.set(instance.game_version, [])
}
instanceMap.get(instance.metadata.game_version).push(instance)
instanceMap.get(instance.game_version).push(instance)
})
} else if (group.value === 'Category') {
instances.forEach((instance) => {
if (instance.metadata.groups.length === 0) {
instance.metadata.groups.push('None')
if (instance.groups.length === 0) {
instance.groups.push('None')
}
for (const category of instance.metadata.groups) {
for (const category of instance.groups) {
if (!instanceMap.has(category)) {
instanceMap.set(category, [])
}
@@ -233,20 +229,19 @@ const filteredResults = computed(() => {
})
</script>
<template>
<ModalConfirm
<ConfirmModalWrapper
ref="confirmModal"
title="Are you sure you want to delete this instance?"
description="If you proceed, all data for your instance will be removed. You will not be able to recover it."
:has-to-type="false"
proceed-label="Delete"
:noblur="!themeStore.advancedRendering"
@proceed="deleteProfile"
/>
<Card class="header">
<div class="iconified-input">
<SearchIcon />
<input v-model="search" type="text" placeholder="Search" class="search-input" />
<Button @click="() => (search = '')">
<Button class="r-btn" @click="() => (search = '')">
<XIcon />
</Button>
</div>

View File

@@ -11,27 +11,20 @@ import {
ExternalIcon,
EyeIcon,
ChevronRightIcon,
ModalConfirm,
} from 'omorphia'
} from '@modrinth/assets'
import ConfirmModalWrapper from '@/components/ui/modal/ConfirmModalWrapper.vue'
import Instance from '@/components/ui/Instance.vue'
import { computed, onMounted, onUnmounted, ref } from 'vue'
import ContextMenu from '@/components/ui/ContextMenu.vue'
import ProjectCard from '@/components/ui/ProjectCard.vue'
import InstallConfirmModal from '@/components/ui/InstallConfirmModal.vue'
import ModInstallModal from '@/components/ui/ModInstallModal.vue'
import {
get_all_running_profile_paths,
get_uuids_by_profile_path,
kill_by_uuid,
} from '@/helpers/process.js'
import { get_by_profile_path } from '@/helpers/process.js'
import { handleError } from '@/store/notifications.js'
import { duplicate, remove, run } from '@/helpers/profile.js'
import { duplicate, kill, remove, run } from '@/helpers/profile.js'
import { useRouter } from 'vue-router'
import { showProfileInFolder } from '@/helpers/utils.js'
import { useFetch } from '@/helpers/fetch.js'
import { install as pack_install } from '@/helpers/pack.js'
import { useTheming } from '@/store/state.js'
import { mixpanel_track } from '@/helpers/mixpanel'
import { trackEvent } from '@/helpers/analytics'
import { handleSevereError } from '@/store/error.js'
import { install as installVersion } from '@/store/install.js'
const router = useRouter()
@@ -50,18 +43,15 @@ const props = defineProps({
})
const actualInstances = computed(() =>
props.instances.filter((x) => x && x.instances && x.instances[0])
props.instances.filter((x) => x && x.instances && x.instances[0]),
)
const modsRow = ref(null)
const instanceOptions = ref(null)
const instanceComponents = ref(null)
const rows = ref(null)
const confirmModal = ref(null)
const deleteConfirmModal = ref(null)
const modInstallModal = ref(null)
const themeStore = useTheming()
const currentDeleteInstance = ref(null)
async function deleteProfile() {
@@ -89,23 +79,24 @@ const handleInstanceRightClick = async (event, passedInstance) => {
},
]
const running = await get_all_running_profile_paths().catch(handleError)
const runningProcesses = await get_by_profile_path(passedInstance.path).catch(handleError)
const options = running.includes(passedInstance.path)
? [
{
name: 'stop',
color: 'danger',
},
...baseOptions,
]
: [
{
name: 'play',
color: 'primary',
},
...baseOptions,
]
const options =
runningProcesses.length > 0
? [
{
name: 'stop',
color: 'danger',
},
...baseOptions,
]
: [
{
name: 'play',
color: 'primary',
},
...baseOptions,
]
instanceOptions.value.showMenu(event, passedInstance, options)
}
@@ -129,24 +120,24 @@ const handleProjectClick = (event, passedInstance) => {
const handleOptionsClick = async (args) => {
switch (args.option) {
case 'play':
await run(args.item.path).catch(handleError)
mixpanel_track('InstanceStart', {
loader: args.item.metadata.loader,
game_version: args.item.metadata.game_version,
await run(args.item.path).catch((err) =>
handleSevereError(err, { profilePath: args.item.path }),
)
trackEvent('InstanceStart', {
loader: args.item.loader,
game_version: args.item.game_version,
})
break
case 'stop':
for (const u of await get_uuids_by_profile_path(args.item.path).catch(handleError)) {
await kill_by_uuid(u).catch(handleError)
}
mixpanel_track('InstanceStop', {
loader: args.item.metadata.loader,
game_version: args.item.metadata.game_version,
await kill(args.item.path).catch(handleError)
trackEvent('InstanceStop', {
loader: args.item.loader,
game_version: args.item.game_version,
})
break
case 'add_content':
await router.push({
path: `/browse/${args.item.metadata.loader === 'vanilla' ? 'datapack' : 'mod'}`,
path: `/browse/${args.item.loader === 'vanilla' ? 'datapack' : 'mod'}`,
query: { i: args.item.path },
})
break
@@ -169,21 +160,8 @@ const handleOptionsClick = async (args) => {
await navigator.clipboard.writeText(args.item.path)
break
case 'install': {
const versions = await useFetch(
`https://api.modrinth.com/v2/project/${args.item.project_id}/version`,
'project versions'
)
await installVersion(args.item.project_id, null, null, 'ProjectCardContextMenu')
if (args.item.project_type === 'modpack') {
await pack_install(
args.item.project_id,
versions[0].id,
args.item.title,
args.item.icon_url
)
} else {
modInstallModal.value.show(args.item.project_id, versions)
}
break
}
case 'open_link':
@@ -197,7 +175,7 @@ const handleOptionsClick = async (args) => {
break
case 'copy_link':
await navigator.clipboard.writeText(
`https://modrinth.com/${args.item.project_type}/${args.item.slug}`
`https://modrinth.com/${args.item.project_type}/${args.item.slug}`,
)
break
}
@@ -227,13 +205,12 @@ onUnmounted(() => {
</script>
<template>
<ModalConfirm
<ConfirmModalWrapper
ref="deleteConfirmModal"
title="Are you sure you want to delete this instance?"
description="If you proceed, all data for your instance will be removed. You will not be able to recover it."
:has-to-type="false"
proceed-label="Delete"
:noblur="!themeStore.advancedRendering"
@proceed="deleteProfile"
/>
<div class="content">
@@ -242,7 +219,7 @@ onUnmounted(() => {
<router-link :to="row.route">{{ row.label }}</router-link>
<ChevronRightIcon />
</div>
<section v-if="row.instances[0].metadata" ref="modsRow" class="instances">
<section v-if="row.instance" ref="modsRow" class="instances">
<Instance
v-for="instance in row.instances.slice(0, maxInstancesPerRow)"
:key="(instance?.project_id || instance?.id) + instance.install_stage"
@@ -257,8 +234,6 @@ onUnmounted(() => {
ref="instanceComponents"
class="item"
:project="project"
:confirm-modal="confirmModal"
:mod-install-modal="modInstallModal"
@contextmenu.prevent.stop="(event) => handleProjectClick(event, project)"
/>
</section>
@@ -277,8 +252,6 @@ onUnmounted(() => {
<template #open_link> <GlobeIcon /> Open in Modrinth <ExternalIcon /> </template>
<template #copy_link> <ClipboardCopyIcon /> Copy link </template>
</ContextMenu>
<InstallConfirmModal ref="confirmModal" />
<ModInstallModal ref="modInstallModal" />
</template>
<style lang="scss" scoped>
.content {

View File

@@ -40,10 +40,12 @@ export default defineComponent({
const loading = useLoading()
watch(loading, (newValue) => {
if (newValue.loading) {
indicator.start()
} else {
indicator.finish()
if (newValue.barEnabled) {
if (newValue.loading) {
indicator.start()
} else {
indicator.finish()
}
}
})
@@ -66,7 +68,7 @@ export default defineComponent({
zIndex: 6,
},
},
slots
slots,
)
},
})

View File

@@ -5,7 +5,7 @@
v-tooltip.right="'Minecraft accounts'"
class="button-base avatar-button"
:class="{ expanded: mode === 'expanded' }"
@click="showCard = !showCard"
@click="toggleMenu"
>
<Avatar
:size="mode === 'expanded' ? 'xs' : 'sm'"
@@ -56,68 +56,24 @@
</Button>
</Card>
</transition>
<Modal ref="loginModal" class="modal" header="Signing in" :noblur="!themeStore.advancedRendering">
<div class="modal-body">
<QrcodeVue :value="loginUrl" class="qr-code" margin="3" size="160" />
<div class="modal-text">
<div class="label">Copy this code</div>
<div class="code-text">
<div class="code">
{{ loginCode }}
</div>
<Button
v-tooltip="'Copy code'"
icon-only
large
color="raised"
@click="() => clipboardWrite(loginCode)"
>
<ClipboardCopyIcon />
</Button>
</div>
<div>And enter it on Microsoft's website to sign in.</div>
<div class="iconified-input">
<LogInIcon />
<input type="text" :value="loginUrl" readonly />
<Button
v-tooltip="'Open link'"
icon-only
color="raised"
@click="() => clipboardWrite(loginUrl)"
>
<GlobeIcon />
</Button>
</div>
</div>
</div>
</Modal>
</template>
<script setup>
import {
Avatar,
Button,
Card,
PlusIcon,
TrashIcon,
LogInIcon,
Modal,
GlobeIcon,
ClipboardCopyIcon,
} from 'omorphia'
import { PlusIcon, TrashIcon, LogInIcon } from '@modrinth/assets'
import { Avatar, Button, Card } from '@modrinth/ui'
import { ref, computed, onMounted, onBeforeUnmount, onUnmounted } from 'vue'
import {
users,
remove_user,
authenticate_begin_flow,
authenticate_await_completion,
set_default_user,
login as login_flow,
get_default_user,
} from '@/helpers/auth'
import { get, set } from '@/helpers/settings'
import { handleError } from '@/store/state.js'
import { useTheming } from '@/store/theme.js'
import { mixpanel_track } from '@/helpers/mixpanel'
import QrcodeVue from 'qrcode.vue'
import { trackEvent } from '@/helpers/analytics'
import { process_listener } from '@/helpers/events'
import { handleSevereError } from '@/store/error.js'
import { show_ads_window, hide_ads_window } from '@/helpers/ads.js'
defineProps({
mode: {
@@ -129,16 +85,11 @@ defineProps({
const emit = defineEmits(['change'])
const loginCode = ref(null)
const themeStore = useTheming()
const settings = ref({})
const accounts = ref([])
const loginUrl = ref('')
const loginModal = ref(null)
const accounts = ref({})
const defaultUser = ref()
async function refreshValues() {
settings.value = await get().catch(handleError)
defaultUser.value = await get_default_user().catch(handleError)
accounts.value = await users().catch(handleError)
}
defineExpose({
@@ -147,47 +98,28 @@ defineExpose({
await refreshValues()
const displayAccounts = computed(() =>
accounts.value.filter((account) => settings.value.default_user !== account.id)
accounts.value.filter((account) => defaultUser.value !== account.id),
)
const selectedAccount = computed(() =>
accounts.value.find((account) => account.id === settings.value.default_user)
accounts.value.find((account) => account.id === defaultUser.value),
)
async function setAccount(account) {
settings.value.default_user = account.id
await set(settings.value).catch(handleError)
defaultUser.value = account.id
await set_default_user(account.id).catch(handleError)
emit('change')
}
const clipboardWrite = async (a) => {
navigator.clipboard.writeText(a)
}
async function login() {
const loginSuccess = await authenticate_begin_flow().catch(handleError)
loginModal.value.show()
loginCode.value = loginSuccess.user_code
loginUrl.value = loginSuccess.verification_uri
await window.__TAURI_INVOKE__('tauri', {
__tauriModule: 'Shell',
message: {
cmd: 'open',
path: loginSuccess.verification_uri,
},
})
const loggedIn = await authenticate_await_completion().catch(handleError)
loginModal.value.hide()
const loggedIn = await login_flow().catch(handleSevereError)
if (loggedIn) {
await setAccount(loggedIn)
await refreshValues()
}
loginModal.value.hide()
mixpanel_track('AccountLogIn')
trackEvent('AccountLogIn')
}
const logout = async (id) => {
@@ -199,12 +131,12 @@ const logout = async (id) => {
} else {
emit('change')
}
mixpanel_track('AccountLogOut')
trackEvent('AccountLogOut')
}
let showCard = ref(false)
let card = ref(null)
let button = ref(null)
const showCard = ref(false)
const card = ref(null)
const button = ref(null)
const handleClickOutside = (event) => {
const elements = document.elementsFromPoint(event.clientX, event.clientY)
if (
@@ -213,7 +145,20 @@ const handleClickOutside = (event) => {
!elements.includes(card.value.$el) &&
!button.value.contains(event.target)
) {
toggleMenu(false)
}
}
function toggleMenu(override = true) {
if (showCard.value || !override) {
if (showCard.value) {
show_ads_window()
}
showCard.value = false
} else {
hide_ads_window()
showCard.value = true
}
}

View File

@@ -0,0 +1,63 @@
<script setup lang="ts">
import { DropdownIcon, FolderOpenIcon, SearchIcon } from '@modrinth/assets'
import { Button, OverflowMenu } from '@modrinth/ui'
import { open } from '@tauri-apps/plugin-dialog'
import { add_project_from_path } from '@/helpers/profile.js'
import { handleError } from '@/store/notifications.js'
import { useRouter } from 'vue-router'
const props = defineProps({
instance: {
type: Object,
required: true,
},
})
const router = useRouter()
const handleAddContentFromFile = async () => {
const newProject = await open({ multiple: true })
if (!newProject) return
for (const project of newProject) {
await add_project_from_path(props.instance.path, project.path ?? project).catch(handleError)
}
}
const handleSearchContent = async () => {
await router.push({
path: `/browse/${props.instance.loader === 'vanilla' ? 'datapack' : 'mod'}`,
query: { i: props.instance.path },
})
}
</script>
<template>
<div class="joined-buttons">
<Button color="primary" @click="handleSearchContent"><SearchIcon /> Add content </Button>
<OverflowMenu
:options="[
{
id: 'search',
action: handleSearchContent,
},
{
id: 'from_file',
action: handleAddContentFromFile,
},
]"
class="btn btn-primary btn-dropdown-animation icon-only"
>
<DropdownIcon />
<template #search>
<SearchIcon />
<span class="no-wrap"> Search </span>
</template>
<template #from_file>
<FolderOpenIcon />
<span class="no-wrap"> Add from file </span>
</template>
</OverflowMenu>
</div>
</template>

View File

@@ -31,7 +31,8 @@
</template>
<script setup>
import { ChevronRightIcon, Button, ChevronLeftIcon } from 'omorphia'
import { ChevronRightIcon, ChevronLeftIcon } from '@modrinth/assets'
import { Button } from '@modrinth/ui'
import { useBreadcrumbs } from '@/store/breadcrumbs'
import { useRoute } from 'vue-router'
import { computed } from 'vue'
@@ -44,8 +45,8 @@ const breadcrumbs = computed(() => {
route.meta.useContext === true
? breadcrumbData.context
: route.meta.useRootContext === true
? breadcrumbData.rootContext
: null
? breadcrumbData.rootContext
: null
return additionalContext ? [additionalContext, ...route.meta.breadcrumb] : route.meta.breadcrumb
})
</script>

View File

@@ -25,6 +25,7 @@
<script setup>
import { onBeforeUnmount, onMounted, ref } from 'vue'
import { show_ads_window, hide_ads_window } from '@/helpers/ads.js'
const emit = defineEmits(['menu-closed', 'option-clicked'])
@@ -37,6 +38,7 @@ const shown = ref(false)
defineExpose({
showMenu: (event, passedItem, passedOptions) => {
hide_ads_window()
item.value = passedItem
options.value = passedOptions
@@ -60,15 +62,18 @@ defineExpose({
})
const isLinkedData = (item) => {
if (item.instance != undefined && item.instance.metadata.linked_data) {
if (item.instance != undefined && item.instance.linked_data) {
return true
} else if (item.metadata != undefined && item.metadata.linked_data) {
} else if (item != undefined && item.linked_data) {
return true
}
return false
}
const hideContextMenu = () => {
if (shown.value) {
show_ads_window()
}
shown.value = false
emit('menu-closed')
}

View File

@@ -0,0 +1,332 @@
<script setup>
import { XIcon, HammerIcon, LogInIcon, UpdatedIcon } from '@modrinth/assets'
import { ChatIcon } from '@/assets/icons'
import { ref } from 'vue'
import { login as login_flow, set_default_user } from '@/helpers/auth.js'
import { handleError } from '@/store/notifications.js'
import { handleSevereError } from '@/store/error.js'
import { cancel_directory_change } from '@/helpers/settings.js'
import { install } from '@/helpers/profile.js'
import { trackEvent } from '@/helpers/analytics'
import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'
const errorModal = ref()
const error = ref()
const closable = ref(true)
const title = ref('An error occurred')
const errorType = ref('unknown')
const supportLink = ref('https://support.modrinth.com')
const metadata = ref({})
defineExpose({
async show(errorVal, context, canClose = true, source = null) {
closable.value = canClose
if (errorVal.message && errorVal.message.includes('Minecraft authentication error:')) {
title.value = 'Unable to sign in to Minecraft'
errorType.value = 'minecraft_auth'
supportLink.value =
'https://support.modrinth.com/en/articles/9038231-minecraft-sign-in-issues'
if (
errorVal.message.includes('existing connection was forcibly closed') ||
errorVal.message.includes('error sending request for url')
) {
metadata.value.network = true
}
if (errorVal.message.includes('because the target machine actively refused it')) {
metadata.value.hostsFile = true
}
} else if (errorVal.message && errorVal.message.includes('User is not logged in')) {
title.value = 'Sign in to Minecraft'
errorType.value = 'minecraft_sign_in'
supportLink.value = 'https://support.modrinth.com'
} else if (errorVal.message && errorVal.message.includes('Move directory error:')) {
title.value = 'Could not change app directory'
errorType.value = 'directory_move'
supportLink.value = 'https://support.modrinth.com'
if (errorVal.message.includes('directory is not writeable')) {
metadata.value.readOnly = true
}
if (errorVal.message.includes('Not enough space')) {
metadata.value.notEnoughSpace = true
}
} else if (errorVal.message && errorVal.message.includes('No loader version selected for')) {
title.value = 'No loader selected'
errorType.value = 'no_loader_version'
supportLink.value = 'https://support.modrinth.com'
metadata.value.profilePath = context.profilePath
} else if (source === 'state_init') {
title.value = 'Error initializing Modrinth App'
errorType.value = 'state_init'
supportLink.value = 'https://support.modrinth.com'
} else {
title.value = 'An error occurred'
errorType.value = 'unknown'
supportLink.value = 'https://support.modrinth.com'
metadata.value = {}
}
error.value = errorVal
errorModal.value.show()
},
})
const loadingMinecraft = ref(false)
async function loginMinecraft() {
try {
loadingMinecraft.value = true
const loggedIn = await login_flow()
if (loggedIn) {
await set_default_user(loggedIn.id).catch(handleError)
}
await trackEvent('AccountLogIn', { source: 'ErrorModal' })
loadingMinecraft.value = false
errorModal.value.hide()
} catch (err) {
loadingMinecraft.value = false
handleSevereError(err)
}
}
async function cancelDirectoryChange() {
try {
await cancel_directory_change()
window.location.reload()
} catch (err) {
handleError(err)
}
}
function retryDirectoryChange() {
window.location.reload()
}
const loadingRepair = ref(false)
async function repairInstance() {
loadingRepair.value = true
try {
await install(metadata.value.profilePath, false)
errorModal.value.hide()
} catch (err) {
handleSevereError(err)
}
loadingRepair.value = false
}
</script>
<template>
<ModalWrapper ref="errorModal" :header="title" :closable="closable">
<div class="modal-body">
<div class="markdown-body">
<template v-if="errorType === 'minecraft_auth'">
<template v-if="metadata.network">
<h3>Network issues</h3>
<p>
It looks like there were issues with the Modrinth App connecting to Microsoft's
servers. This is often the result of a poor connection, so we recommend trying again
to see if it works. If issues continue to persist, follow the steps in
<a
href="https://support.modrinth.com/en/articles/9038231-minecraft-sign-in-issues#h_e71a5f805f"
>
our support article
</a>
to troubleshoot.
</p>
</template>
<template v-else-if="metadata.hostsFile">
<h3>Network issues</h3>
<p>
The Modrinth App tried to connect to Microsoft / Xbox / Minecraft services, but the
remote server rejected the connection. This may indicate that these services are
blocked by the hosts file. Please visit
<a
href="https://support.modrinth.com/en/articles/9038231-minecraft-sign-in-issues#h_d694a29256"
>
our support article
</a>
for steps on how to fix the issue.
</p>
</template>
<template v-else>
<h3>Try another Microsoft account</h3>
<p>
Double check you've signed in with the right account. You may own Minecraft on a
different Microsoft account.
</p>
<div class="cta-button">
<button class="btn btn-primary" :disabled="loadingMinecraft" @click="loginMinecraft">
<LogInIcon /> Try another account
</button>
</div>
<h3>Using PC Game Pass, coming from Bedrock, or just bought the game?</h3>
<p>
Try signing in with the
<a href="https://www.minecraft.net/en-us/download">official Minecraft Launcher</a>
first. Once you're done, come back here and sign in!
</p>
</template>
<div class="cta-button">
<button class="btn btn-primary" :disabled="loadingMinecraft" @click="loginMinecraft">
<LogInIcon /> Try signing in again
</button>
</div>
</template>
<template v-if="errorType === 'directory_move'">
<template v-if="metadata.readOnly">
<h3>Change directory permissions</h3>
<p>
It looks like the Modrinth App is unable to write to the directory you selected.
Please adjust the permissions of the directory and try again or cancel the directory
change.
</p>
</template>
<template v-else-if="metadata.notEnoughSpace">
<h3>Not enough space</h3>
<p>
It looks like there is not enough space on the disk containing the dirctory you
selected Please free up some space and try again or cancel the directory change.
</p>
</template>
<template v-else>
<p>
The Modrinth App is unable to migrate to the new directory you selected. Please
contact support for help or cancel the directory change.
</p>
</template>
<div class="cta-button">
<button class="btn" @click="retryDirectoryChange">
<UpdatedIcon /> Retry directory change
</button>
<button class="btn btn-danger" @click="cancelDirectoryChange">
<XIcon /> Cancel directory change
</button>
</div>
</template>
<div v-else-if="errorType === 'minecraft_sign_in'">
<p>
To play this instance, you must sign in through Microsoft below. If you don't have a
Minecraft account, you can purchase the game on the
<a href="https://www.minecraft.net/en-us/store/minecraft-java-bedrock-edition-pc"
>Minecraft website</a
>.
</p>
<div class="cta-button">
<button class="btn btn-primary" :disabled="loadingMinecraft" @click="loginMinecraft">
<LogInIcon /> Sign in to Minecraft
</button>
</div>
</div>
<template v-else-if="errorType === 'state_init'">
<p>
Modrinth App failed to load correctly. This may be because of a corrupted file, or
because the app is missing crucial files.
</p>
<p>You may be able to fix it through one of the following ways:</p>
<ul>
<li>Ennsuring you are connected to the internet, then try restarting the app.</li>
<li>Redownloading the app.</li>
</ul>
</template>
<template v-else-if="errorType === 'no_loader_version'">
<p>The Modrinth App failed to find the loader version for this instance.</p>
<p>To resolve this, you need to repair the instance. Click the button below to do so.</p>
<div class="cta-button">
<button class="btn btn-primary" :disabled="loadingRepair" @click="repairInstance">
<HammerIcon /> Repair instance
</button>
</div>
</template>
<template v-else>
{{ error.message ?? error }}
</template>
<template
v-if="
errorType === 'directory_move' ||
errorType === 'minecraft_auth' ||
errorType === 'state_init' ||
errorType === 'no_loader_version'
"
>
<hr />
<p>
If nothing is working and you need help, visit
<a :href="supportLink">our support page</a>
and start a chat using the widget in the bottom right and we will be more than happy to
assist! Make sure to provide the following debug information to the agent:
</p>
<details>
<summary>Debug information</summary>
{{ error.message ?? error }}
</details>
</template>
</div>
<div class="input-group push-right">
<a :href="supportLink" class="btn" @click="errorModal.hide()"><ChatIcon /> Get support</a>
<button v-if="closable" class="btn" @click="errorModal.hide()"><XIcon /> Close</button>
</div>
</div>
</ModalWrapper>
</template>
<style>
.light-mode {
--color-orange-bg: rgba(255, 163, 71, 0.2);
}
.dark-mode,
.oled-mode {
--color-orange-bg: rgba(224, 131, 37, 0.2);
}
</style>
<style scoped lang="scss">
.cta-button {
display: flex;
align-items: center;
justify-content: center;
padding: 0.5rem;
gap: 0.5rem;
}
.warning-banner {
display: flex;
flex-direction: column;
gap: 0.5rem;
padding: var(--gap-lg);
background-color: var(--color-orange-bg);
border: 2px solid var(--color-orange);
border-radius: var(--radius-md);
margin-bottom: 1rem;
}
.warning-banner__title {
display: flex;
align-items: center;
gap: 0.5rem;
font-weight: 700;
svg {
color: var(--color-orange);
height: 1.5rem;
width: 1.5rem;
}
}
.modal-body {
display: flex;
flex-direction: column;
gap: var(--gap-md);
padding: var(--gap-lg);
}
.markdown-body {
overflow: auto;
}
</style>

View File

@@ -1,11 +1,12 @@
<script setup>
import { Button, Checkbox, Modal, XIcon, PlusIcon } from 'omorphia'
import { XIcon, PlusIcon } from '@modrinth/assets'
import { Button, Checkbox } from '@modrinth/ui'
import { PackageIcon, VersionIcon } from '@/assets/icons'
import { ref } from 'vue'
import { export_profile_mrpack, get_pack_export_candidates } from '@/helpers/profile.js'
import { open } from '@tauri-apps/api/dialog'
import { open } from '@tauri-apps/plugin-dialog'
import { handleError } from '@/store/notifications.js'
import { useTheming } from '@/store/theme'
import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'
const props = defineProps({
instance: {
@@ -22,15 +23,13 @@ defineExpose({
})
const exportModal = ref(null)
const nameInput = ref(props.instance.metadata.name)
const nameInput = ref(props.instance.name)
const exportDescription = ref('')
const versionInput = ref('1.0.0')
const files = ref([])
const folders = ref([])
const showingFiles = ref(false)
const themeStore = useTheming()
const initFiles = async () => {
const newFolders = new Map()
const sep = '/'
@@ -49,9 +48,9 @@ const initFiles = async () => {
disabled:
folder === 'profile.json' ||
folder.startsWith('modrinth_logs') ||
folder.startsWith('.fabric') ||
folder.includes('.DS_Store'),
folder.startsWith('.fabric'),
}))
.filter((pathData) => !pathData.path.includes('.DS_Store'))
.forEach((pathData) => {
const parent = pathData.path.split(sep).slice(0, -1).join(sep)
if (parent !== '') {
@@ -63,7 +62,7 @@ const initFiles = async () => {
} else {
files.value.push(pathData)
}
})
}),
)
folders.value = [...newFolders.entries()].map(([name, value]) => [
{
@@ -97,7 +96,7 @@ const exportPack = async () => {
filesToExport,
versionInput.value,
exportDescription.value,
nameInput.value
nameInput.value,
).catch((err) => handleError(err))
exportModal.value.hide()
}
@@ -105,14 +104,14 @@ const exportPack = async () => {
</script>
<template>
<Modal ref="exportModal" header="Export modpack" :noblur="!themeStore.advancedRendering">
<ModalWrapper ref="exportModal" header="Export modpack">
<div class="modal-body">
<div class="labeled_input">
<p>Modpack Name</p>
<div class="iconified-input">
<PackageIcon />
<input v-model="nameInput" type="text" placeholder="Modpack name" class="input" />
<Button @click="nameInput = ''">
<Button class="r-btn" @click="nameInput = ''">
<XIcon />
</Button>
</div>
@@ -122,7 +121,7 @@ const exportPack = async () => {
<div class="iconified-input">
<VersionIcon />
<input v-model="versionInput" type="text" placeholder="1.0.0" class="input" />
<Button @click="versionInput = ''">
<Button class="r-btn" @click="versionInput = ''">
<XIcon />
</Button>
</div>
@@ -207,7 +206,7 @@ const exportPack = async () => {
</Button>
</div>
</div>
</Modal>
</ModalWrapper>
</template>
<style scoped lang="scss">

View File

@@ -0,0 +1,259 @@
<script setup>
import { onUnmounted, ref, computed } from 'vue'
import { useRouter } from 'vue-router'
import { StopCircleIcon, PlayIcon } from '@modrinth/assets'
import { Card, Avatar, AnimatedLogo } from '@modrinth/ui'
import { convertFileSrc } from '@tauri-apps/api/core'
import { kill, run } from '@/helpers/profile'
import { get_by_profile_path } from '@/helpers/process'
import { process_listener } from '@/helpers/events'
import { handleError } from '@/store/state.js'
import { showProfileInFolder } from '@/helpers/utils.js'
import { handleSevereError } from '@/store/error.js'
import { trackEvent } from '@/helpers/analytics'
const props = defineProps({
instance: {
type: Object,
default() {
return {}
},
},
})
const playing = ref(false)
const modLoading = computed(() => props.instance.install_stage !== 'installed')
const router = useRouter()
const seeInstance = async () => {
await router.push(`/instance/${encodeURIComponent(props.instance.path)}/`)
}
const checkProcess = async () => {
const runningProcesses = await get_by_profile_path(props.instance.path).catch(handleError)
playing.value = runningProcesses.length > 0
}
const play = async (e, context) => {
e?.stopPropagation()
modLoading.value = true
await run(props.instance.path).catch((err) =>
handleSevereError(err, { profilePath: props.instance.path }),
)
modLoading.value = false
trackEvent('InstancePlay', {
loader: props.instance.loader,
game_version: props.instance.game_version,
source: context,
})
}
const stop = async (e, context) => {
e?.stopPropagation()
playing.value = false
await kill(props.instance.path).catch(handleError)
trackEvent('InstanceStop', {
loader: props.instance.loader,
game_version: props.instance.game_version,
source: context,
})
}
const openFolder = async () => {
await showProfileInFolder(props.instance.path)
}
const addContent = async () => {
await router.push({
path: `/browse/${props.instance.loader === 'vanilla' ? 'datapack' : 'mod'}`,
query: { i: props.instance.path },
})
}
defineExpose({
play,
stop,
seeInstance,
openFolder,
addContent,
instance: props.instance,
})
const unlisten = await process_listener((e) => {
if (e.event === 'finished' && e.profile_path_id === props.instance.path) playing.value = false
})
onUnmounted(() => unlisten())
</script>
<template>
<div class="instance">
<Card class="instance-card-item button-base" @click="seeInstance" @mouseenter="checkProcess">
<Avatar
size="lg"
:src="props.instance.icon_path ? convertFileSrc(props.instance.icon_path) : null"
alt="Mod card"
class="mod-image"
/>
<div class="project-info">
<p class="title">{{ props.instance.name }}</p>
<p
v-if="
props.instance.install_stage === 'installing' ||
props.instance.install_stage === 'not_installed' ||
props.instance.install_stage === 'pack_installing'
"
class="description"
>
Installing...
</p>
<p v-else class="description">
{{ props.instance.loader }}
{{ props.instance.game_version }}
</p>
</div>
</Card>
<div
v-if="playing === true"
class="stop cta button-base"
@click="(e) => stop(e, 'InstanceCard')"
@mousehover="checkProcess"
>
<StopCircleIcon />
</div>
<div v-else-if="modLoading === true && playing === false" class="cta loading-cta">
<AnimatedLogo class="loading-indicator" />
</div>
<div v-else class="install cta button-base" @click="(e) => play(e, 'InstanceCard')">
<PlayIcon />
</div>
</div>
</template>
<style lang="scss">
.loading-indicator {
width: 2.5rem !important;
height: 2.5rem !important;
svg {
width: 2.5rem !important;
height: 2.5rem !important;
}
}
</style>
<style lang="scss" scoped>
.instance {
position: relative;
&:hover {
.cta {
opacity: 1;
bottom: calc(var(--gap-md) + 4.25rem);
}
}
}
.cta {
position: absolute;
display: flex;
align-items: center;
justify-content: center;
border-radius: var(--radius-md);
z-index: 1;
width: 3rem;
height: 3rem;
right: calc(var(--gap-md) * 2);
bottom: 3.25rem;
opacity: 0;
transition:
0.2s ease-in-out bottom,
0.2s ease-in-out opacity,
0.1s ease-in-out filter !important;
cursor: pointer;
box-shadow: var(--shadow-floating);
svg {
color: var(--color-accent-contrast);
width: 1.5rem !important;
height: 1.5rem !important;
}
&.install {
background: var(--color-brand);
display: flex;
}
&.stop {
background: var(--color-red);
display: flex;
}
&.loading-cta {
background: hsl(220, 11%, 10%) !important;
display: flex;
justify-content: center;
align-items: center;
}
}
.instance-card-item {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
cursor: pointer;
padding: var(--gap-md);
transition: 0.1s ease-in-out all !important; /* overrides Omorphia defaults */
margin-bottom: 0;
.mod-image {
--size: 100%;
width: 100% !important;
height: auto !important;
max-width: unset !important;
max-height: unset !important;
aspect-ratio: 1 / 1 !important;
}
.project-info {
margin-top: 1rem;
width: 100%;
.title {
color: var(--color-contrast);
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
width: 100%;
margin: 0;
font-weight: 600;
font-size: 1rem;
line-height: 110%;
display: inline-block;
}
.description {
color: var(--color-base);
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
font-weight: 500;
font-size: 0.775rem;
line-height: 125%;
margin: 0.25rem 0 0;
text-transform: capitalize;
white-space: nowrap;
text-overflow: ellipsis;
}
}
}
</style>

View File

@@ -1,5 +1,5 @@
<template>
<Modal ref="modal" header="Create instance" :noblur="!themeStore.advancedRendering">
<ModalWrapper ref="modal" header="Create instance">
<div class="modal-header">
<Chips v-model="creationType" :items="['custom', 'from file', 'import from launcher']" />
</div>
@@ -110,7 +110,7 @@
placeholder="Path to launcher"
@change="setPath"
/>
<Button @click="() => (selectedLauncherPath = '')">
<Button class="r-btn" @click="() => (selectedLauncherPath = '')">
<XIcon />
</Button>
</div>
@@ -177,14 +177,14 @@
loading
? 'Importing...'
: Array.from(profiles.values())
.flatMap((e) => e)
.some((e) => e.selected)
? `Import ${
Array.from(profiles.values())
.flatMap((e) => e)
.filter((e) => e.selected).length
} profiles`
: 'Select profiles to import'
.some((e) => e.selected)
? `Import ${
Array.from(profiles.values())
.flatMap((e) => e)
.filter((e) => e.selected).length
} profiles`
: 'Select profiles to import'
}}
</Button>
<ProgressBar
@@ -193,41 +193,31 @@
/>
</div>
</div>
</Modal>
</ModalWrapper>
</template>
<script setup>
import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'
import {
Avatar,
Button,
Chips,
Modal,
PlusIcon,
UploadIcon,
XIcon,
CodeIcon,
Checkbox,
FolderOpenIcon,
InfoIcon,
FolderSearchIcon,
UpdatedIcon,
} from 'omorphia'
} from '@modrinth/assets'
import { Avatar, Button, Chips, Checkbox } from '@modrinth/ui'
import { computed, onUnmounted, ref, shallowRef } from 'vue'
import { get_loaders } from '@/helpers/tags'
import { create } from '@/helpers/profile'
import { open } from '@tauri-apps/api/dialog'
import { tauri } from '@tauri-apps/api'
import {
get_game_versions,
get_fabric_versions,
get_forge_versions,
get_quilt_versions,
get_neoforge_versions,
} from '@/helpers/metadata'
import { open } from '@tauri-apps/plugin-dialog'
import { convertFileSrc } from '@tauri-apps/api/core'
import { get_game_versions, get_loader_versions } from '@/helpers/metadata'
import { handleError } from '@/store/notifications.js'
import Multiselect from 'vue-multiselect'
import { mixpanel_track } from '@/helpers/mixpanel'
import { useTheming } from '@/store/state.js'
import { trackEvent } from '@/helpers/analytics'
import { listen } from '@tauri-apps/api/event'
import { install_from_file } from '@/helpers/pack.js'
import {
@@ -237,8 +227,6 @@ import {
} from '@/helpers/import.js'
import ProgressBar from '@/components/ui/ProgressBar.vue'
const themeStore = useTheming()
const profile_name = ref('')
const game_version = ref('')
const loader = ref('vanilla')
@@ -274,13 +262,13 @@ defineExpose({
hide()
if (event.payload && event.payload.length > 0 && event.payload[0].endsWith('.mrpack')) {
await install_from_file(event.payload[0]).catch(handleError)
mixpanel_track('InstanceCreate', {
trackEvent('InstanceCreate', {
source: 'CreationModalFileDrop',
})
}
})
mixpanel_track('InstanceCreateStart', { source: 'CreationModal' })
trackEvent('InstanceCreateStart', { source: 'CreationModal' })
},
})
@@ -308,16 +296,16 @@ const [
all_game_versions,
loaders,
] = await Promise.all([
get_fabric_versions().then(shallowRef).catch(handleError),
get_forge_versions().then(shallowRef).catch(handleError),
get_quilt_versions().then(shallowRef).catch(handleError),
get_neoforge_versions().then(shallowRef).catch(handleError),
get_loader_versions('fabric').then(shallowRef).catch(handleError),
get_loader_versions('forge').then(shallowRef).catch(handleError),
get_loader_versions('quilt').then(shallowRef).catch(handleError),
get_loader_versions('neo').then(shallowRef).catch(handleError),
get_game_versions().then(shallowRef).catch(handleError),
get_loaders()
.then((value) =>
value
.filter((item) => item.supported_project_types.includes('modpack'))
.map((item) => item.name.toLowerCase())
.map((item) => item.name.toLowerCase()),
)
.then(ref)
.catch(handleError),
@@ -367,10 +355,10 @@ const create_instance = async () => {
game_version.value,
loader.value,
loader.value === 'vanilla' ? null : loader_version_value ?? 'stable',
icon.value
icon.value,
).catch(handleError)
mixpanel_track('InstanceCreate', {
trackEvent('InstanceCreate', {
profile_name: profile_name.value,
game_version: game_version.value,
loader: loader.value,
@@ -381,7 +369,7 @@ const create_instance = async () => {
}
const upload_icon = async () => {
icon.value = await open({
const res = await open({
multiple: false,
filters: [
{
@@ -391,8 +379,10 @@ const upload_icon = async () => {
],
})
icon.value = res.path ?? res
if (!icon.value) return
display_icon.value = tauri.convertFileSrc(icon.value)
display_icon.value = convertFileSrc(icon.value)
}
const reset_icon = () => {
@@ -427,9 +417,9 @@ const openFile = async () => {
const newProject = await open({ multiple: false })
if (!newProject) return
hide()
await install_from_file(newProject).catch(handleError)
await install_from_file(newProject.path ?? newProject).catch(handleError)
mixpanel_track('InstanceCreate', {
trackEvent('InstanceCreate', {
source: 'CreationModalFileOpen',
})
}
@@ -441,7 +431,7 @@ const profiles = ref(
['ATLauncher', []],
['Curseforge', []],
['PrismLauncher', []],
])
]),
)
const loading = ref(false)
@@ -470,9 +460,9 @@ const promises = profileOptions.value.map(async (option) => {
profileOptions.value.find((profile) => profile.name === option.name).path = path
profiles.value.set(
option.name,
instances.map((name) => ({ name, selected: false }))
instances.map((name) => ({ name, selected: false })),
)
} catch (error) {
} catch {
// Allow failure silently
}
})
@@ -489,12 +479,12 @@ const selectLauncherPath = async () => {
const reload = async () => {
const instances = await get_importable_instances(
selectedProfileType.value.name,
selectedProfileType.value.path
selectedProfileType.value.path,
).catch(handleError)
if (instances) {
profiles.value.set(
selectedProfileType.value.name,
instances.map((name) => ({ name, selected: false }))
instances.map((name) => ({ name, selected: false })),
)
} else {
profiles.value.set(selectedProfileType.value.name, [])

View File

@@ -1,5 +1,5 @@
<template>
<Modal ref="detectJavaModal" header="Select java version" :noblur="!themeStore.advancedRendering">
<ModalWrapper ref="detectJavaModal" header="Select java version">
<div class="auto-detect-modal">
<div class="table">
<div class="table-row table-head">
@@ -32,22 +32,16 @@
</Button>
</div>
</div>
</Modal>
</ModalWrapper>
</template>
<script setup>
import { Modal, PlusIcon, CheckIcon, Button, XIcon } from 'omorphia'
import { PlusIcon, CheckIcon, XIcon } from '@modrinth/assets'
import { Button } from '@modrinth/ui'
import { ref } from 'vue'
import {
find_jre_17_jres,
find_jre_18plus_jres,
find_jre_8_jres,
get_all_jre,
} from '@/helpers/jre.js'
import { find_filtered_jres } from '@/helpers/jre.js'
import { handleError } from '@/store/notifications.js'
import { mixpanel_track } from '@/helpers/mixpanel'
import { useTheming } from '@/store/theme.js'
const themeStore = useTheming()
import { trackEvent } from '@/helpers/analytics'
import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'
const chosenInstallOptions = ref([])
const detectJavaModal = ref(null)
@@ -55,15 +49,7 @@ const currentSelected = ref({})
defineExpose({
show: async (version, currentSelectedJava) => {
if (version <= 8 && !!version) {
chosenInstallOptions.value = await find_jre_8_jres().catch(handleError)
} else if (version >= 18) {
chosenInstallOptions.value = await find_jre_18plus_jres().catch(handleError)
} else if (version) {
chosenInstallOptions.value = await find_jre_17_jres().catch(handleError)
} else {
chosenInstallOptions.value = await get_all_jre().catch(handleError)
}
chosenInstallOptions.value = await find_filtered_jres(version).catch(handleError)
currentSelected.value = currentSelectedJava
if (!currentSelected.value) {
@@ -79,7 +65,7 @@ const emit = defineEmits(['submit'])
function setJavaInstall(javaInstall) {
emit('submit', javaInstall)
detectJavaModal.value.hide()
mixpanel_track('JavaAutoDetect', {
trackEvent('JavaAutoDetect', {
path: javaInstall.path,
version: javaInstall.version,
})

View File

@@ -53,26 +53,20 @@
<script setup>
import {
Button,
SearchIcon,
PlayIcon,
CheckIcon,
XIcon,
FolderSearchIcon,
DownloadIcon,
} from 'omorphia'
import {
auto_install_java,
find_jre_17_jres,
find_jre_8_jres,
get_jre,
test_jre,
} from '@/helpers/jre.js'
} from '@modrinth/assets'
import { Button } from '@modrinth/ui'
import { auto_install_java, find_filtered_jres, get_jre, test_jre } from '@/helpers/jre.js'
import { ref } from 'vue'
import { open } from '@tauri-apps/api/dialog'
import { open } from '@tauri-apps/plugin-dialog'
import JavaDetectionModal from '@/components/ui/JavaDetectionModal.vue'
import { mixpanel_track } from '@/helpers/mixpanel'
import { handleError } from '@/store/state.js'
import { trackEvent } from '@/helpers/analytics'
const props = defineProps({
version: {
@@ -82,7 +76,10 @@ const props = defineProps({
},
modelValue: {
type: Object,
required: true,
default: () => ({
path: '',
version: '',
}),
},
disabled: {
type: Boolean,
@@ -112,11 +109,11 @@ async function testJava() {
testingJavaSuccess.value = await test_jre(
props.modelValue ? props.modelValue.path : '',
1,
props.version
props.version,
)
testingJava.value = false
mixpanel_track('JavaTest', {
trackEvent('JavaTest', {
path: props.modelValue ? props.modelValue.path : '',
success: testingJavaSuccess.value,
})
@@ -127,20 +124,19 @@ async function testJava() {
}
async function handleJavaFileInput() {
let filePath = await open()
const filePath = await open()
if (filePath) {
let result = await get_jre(filePath)
let result = await get_jre(filePath.path ?? filePath)
if (!result) {
result = {
path: filePath,
path: filePath.path ?? filePath,
version: props.version.toString(),
architecture: 'x86',
}
}
mixpanel_track('JavaManualSelect', {
path: filePath,
trackEvent('JavaManualSelect', {
version: props.version,
})
@@ -153,16 +149,9 @@ async function autoDetect() {
if (!props.compact) {
detectJavaModal.value.show(props.version, props.modelValue)
} else {
if (props.version == 8) {
let versions = await find_jre_8_jres().catch(handleError)
if (versions.length > 0) {
emit('update:modelValue', versions[0])
}
} else {
let versions = await find_jre_17_jres().catch(handleError)
if (versions.length > 0) {
emit('update:modelValue', versions[0])
}
const versions = await find_filtered_jres(props.version).catch(handleError)
if (versions.length > 0) {
emit('update:modelValue', versions[0])
}
}
}
@@ -170,10 +159,8 @@ async function autoDetect() {
async function reinstallJava() {
installingJava.value = true
const path = await auto_install_java(props.version).catch(handleError)
console.log('java path: ' + path)
let result = await get_jre(path)
console.log('java result ' + result)
if (!result) {
result = {
path: path,
@@ -182,7 +169,7 @@ async function reinstallJava() {
}
}
mixpanel_track('JavaReInstall', {
trackEvent('JavaReInstall', {
path: path,
version: props.version,
})
@@ -216,6 +203,10 @@ async function reinstallJava() {
align-items: center;
gap: 0.5rem;
margin: 0;
.btn {
width: max-content;
}
}
.test-success {

View File

@@ -1,10 +1,11 @@
<script setup>
import { Button, Modal, CheckIcon, Badge } from 'omorphia'
import { CheckIcon } from '@modrinth/assets'
import { Button, Badge } from '@modrinth/ui'
import { computed, ref } from 'vue'
import { useTheming } from '@/store/theme'
import { update_managed_modrinth_version } from '@/helpers/profile'
import { releaseColor } from '@/helpers/utils'
import { SwapIcon } from '@/assets/icons/index.js'
import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'
const props = defineProps({
versions: {
@@ -28,12 +29,10 @@ const filteredVersions = computed(() => {
})
const modpackVersionModal = ref(null)
const installedVersion = computed(() => props.instance?.metadata?.linked_data?.version_id)
const installedVersion = computed(() => props.instance?.linked_data?.version_id)
const installing = computed(() => props.instance.install_stage !== 'installed')
const inProgress = ref(false)
const themeStore = useTheming()
const switchVersion = async (versionId) => {
inProgress.value = true
await update_managed_modrinth_version(props.instance.path, versionId)
@@ -42,14 +41,13 @@ const switchVersion = async (versionId) => {
</script>
<template>
<Modal
<ModalWrapper
ref="modpackVersionModal"
class="modpack-version-modal"
header="Change modpack version"
:noblur="!themeStore.advancedRendering"
>
<div class="modal-body">
<Card v-if="instance.metadata.linked_data" class="mod-card">
<Card v-if="instance.linked_data" class="mod-card">
<div class="table">
<div class="table-row with-columns table-head">
<div class="table-cell table-text download-cell" />
@@ -110,7 +108,7 @@ const switchVersion = async (versionId) => {
</div>
</Card>
</div>
</Modal>
</ModalWrapper>
</template>
<style scoped lang="scss">

View File

@@ -1,22 +1,13 @@
<script setup>
import {
Card,
Avatar,
Button,
formatNumber,
formatCategory,
DownloadIcon,
HeartIcon,
CalendarIcon,
} from 'omorphia'
import { Card, Avatar, Button } from '@modrinth/ui'
import { DownloadIcon, HeartIcon, CalendarIcon } from '@modrinth/assets'
import { formatNumber, formatCategory } from '@modrinth/utils'
import { computed, ref } from 'vue'
import dayjs from 'dayjs'
import relativeTime from 'dayjs/plugin/relativeTime'
import { useRouter } from 'vue-router'
import { useFetch } from '@/helpers/fetch.js'
import { list } from '@/helpers/profile.js'
import { handleError } from '@/store/notifications.js'
import { install as pack_install } from '@/helpers/pack.js'
import { install as installVersion } from '@/store/install.js'
dayjs.extend(relativeTime)
const router = useRouter()
@@ -29,18 +20,6 @@ const props = defineProps({
return {}
},
},
confirmModal: {
type: Object,
default() {
return {}
},
},
modInstallModal: {
type: Object,
default() {
return {}
},
},
})
const toColor = computed(() => {
@@ -72,40 +51,15 @@ const toTransparent = computed(() => {
const install = async (e) => {
e?.stopPropagation()
installing.value = true
const versions = await useFetch(
`https://api.modrinth.com/v2/project/${props.project.project_id}/version`,
'project versions'
)
if (props.project.project_type === 'modpack') {
const packs = Object.values(await list(true).catch(handleError))
if (
packs.length === 0 ||
!packs
.map((value) => value.metadata)
.find((pack) => pack.linked_data?.project_id === props.project.project_id)
) {
installing.value = true
await pack_install(
props.project.project_id,
versions[0].id,
props.project.title,
props.project.icon_url
).catch(handleError)
await installVersion(
props.project.project_id,
null,
props.instance ? props.instance.path : null,
'ProjectCard',
() => {
installing.value = false
} else
props.confirmModal.show(
props.project.project_id,
versions[0].id,
props.project.title,
props.project.icon_url
)
} else {
props.modInstallModal.show(props.project.project_id, versions)
}
installing.value = false
},
)
}
</script>

View File

@@ -0,0 +1,126 @@
<script setup>
import { ref, onMounted, onUnmounted } from 'vue'
import { get as getCreds } from '@/helpers/mr_auth.js'
import { handleError } from '@/store/notifications.js'
import { get_user } from '@/helpers/cache.js'
import { ChevronRightIcon } from '@modrinth/assets'
import { init_ads_window, open_ads_link, record_ads_click } from '@/helpers/ads.js'
import { listen } from '@tauri-apps/api/event'
const showAd = ref(true)
defineExpose({
scroll() {
updateAdPosition()
},
})
const creds = await getCreds().catch(handleError)
if (creds && creds.user_id) {
const user = await get_user(creds.user_id).catch(handleError)
const MIDAS_BITFLAG = 1 << 0
if (user && (user.badges & MIDAS_BITFLAG) === MIDAS_BITFLAG) {
showAd.value = false
}
}
const adsWrapper = ref(null)
let resizeObserver
let scrollHandler
let intersectionObserver
let mutationObserver
onMounted(() => {
if (showAd.value) {
updateAdPosition(true)
resizeObserver = new ResizeObserver(() => updateAdPosition())
resizeObserver.observe(adsWrapper.value)
intersectionObserver = new IntersectionObserver(() => updateAdPosition())
intersectionObserver.observe(adsWrapper.value)
mutationObserver = new MutationObserver(() => updateAdPosition())
mutationObserver.observe(adsWrapper.value, { attributes: true, childList: true, subtree: true })
// Add scroll event listener
scrollHandler = () => {
requestAnimationFrame(() => updateAdPosition())
}
window.addEventListener('scroll', scrollHandler, { passive: true })
}
})
function updateAdPosition(overrideShown = false) {
if (adsWrapper.value) {
const rect = adsWrapper.value.getBoundingClientRect()
let y = rect.top + window.scrollY
let height = rect.bottom - rect.top
// Prevent ad from overlaying the app bar
if (y <= 52) {
y = 52
height = rect.bottom - 52
if (height < 0) {
height = 0
y = -1000
}
}
init_ads_window(rect.left + window.scrollX, y, rect.right - rect.left, height, overrideShown)
}
}
async function openPlusLink() {
await record_ads_click()
await open_ads_link('https://modrinth.com/plus', 'https://modrinth.com')
}
const unlisten = await listen('ads-scroll', (event) => {
if (adsWrapper.value) {
adsWrapper.value.parentNode.scrollTop += event.payload.scroll
updateAdPosition()
}
})
onUnmounted(() => {
if (resizeObserver) {
resizeObserver.disconnect()
}
if (intersectionObserver) {
intersectionObserver.disconnect()
}
if (mutationObserver) {
mutationObserver.disconnect()
}
if (scrollHandler) {
window.removeEventListener('scroll', scrollHandler)
}
unlisten()
})
</script>
<template>
<div
v-if="showAd"
ref="adsWrapper"
class="ad-parent relative mb-3 flex w-full justify-center rounded-2xl bg-bg-raised cursor-pointer"
>
<div class="flex max-h-[250px] min-h-[250px] min-w-[300px] max-w-[300px] flex-col gap-4 p-6">
<p class="m-0 text-2xl font-bold text-contrast">75% of ad revenue goes to creators</p>
<button
class="mt-auto items-center gap-1 text-purple hover:underline bg-transparent border-none text-left cursor-pointer outline-none"
@click="openPlusLink"
>
<span>
Support creators and Modrinth ad-free with
<span class="font-bold">Modrinth+</span>
</span>
<ChevronRightIcon class="relative top-[3px] h-5 w-5" />
</button>
</div>
</div>
</template>

View File

@@ -1,6 +1,6 @@
<template>
<div class="action-groups">
<a href="https://discord.modrinth.com" class="link">
<a href="https://support.modrinth.com" class="link">
<ChatIcon />
<span> Get support </span>
</a>
@@ -15,15 +15,15 @@
</Button>
<div v-if="offline" class="status">
<span class="circle stopped" />
<div class="running-text clickable" @click="refreshInternet()">
<div class="running-text">
<span> Offline </span>
</div>
</div>
<div v-if="selectedProfile" class="status">
<div v-if="selectedProcess" class="status">
<span class="circle running" />
<div ref="profileButton" class="running-text">
<router-link :to="`/instance/${encodeURIComponent(selectedProfile.path)}`">
{{ selectedProfile.metadata.name }}
<router-link :to="`/instance/${encodeURIComponent(selectedProcess.profile.path)}`">
{{ selectedProcess.profile.name }}
</router-link>
<div
v-if="currentProcesses.length > 1"
@@ -34,7 +34,12 @@
<DropdownIcon />
</div>
</div>
<Button v-tooltip="'Stop instance'" icon-only class="icon-button stop" @click="stop()">
<Button
v-tooltip="'Stop instance'"
icon-only
class="icon-button stop"
@click="stop(selectedProcess)"
>
<StopCircleIcon />
</Button>
<Button v-tooltip="'View logs'" icon-only class="icon-button" @click="goToTerminal()">
@@ -75,17 +80,17 @@
class="profile-card"
>
<Button
v-for="profile in currentProcesses"
:key="profile.id"
v-for="process in currentProcesses"
:key="process.uuid"
class="profile-button"
@click="selectProfile(profile)"
@click="selectProcess(process)"
>
<div class="text"><span class="circle running" /> {{ profile.metadata.name }}</div>
<div class="text"><span class="circle running" /> {{ process.profile.name }}</div>
<Button
v-tooltip="'Stop instance'"
icon-only
class="icon-button stop"
@click.stop="stop(profile.path)"
@click.stop="stop(process)"
>
<StopCircleIcon />
</Button>
@@ -93,7 +98,7 @@
v-tooltip="'View logs'"
icon-only
class="icon-button"
@click.stop="goToTerminal(profile.path)"
@click.stop="goToTerminal(process.profile.path)"
>
<TerminalSquareIcon />
</Button>
@@ -103,28 +108,18 @@
</template>
<script setup>
import {
Button,
DownloadIcon,
Card,
StopCircleIcon,
TerminalSquareIcon,
DropdownIcon,
} from 'omorphia'
import { DownloadIcon, StopCircleIcon, TerminalSquareIcon, DropdownIcon } from '@modrinth/assets'
import { Button, Card } from '@modrinth/ui'
import { onBeforeUnmount, onMounted, ref } from 'vue'
import {
get_all_running_profiles as getRunningProfiles,
kill_by_uuid as killProfile,
get_uuids_by_profile_path as getProfileProcesses,
} from '@/helpers/process'
import { loading_listener, process_listener, offline_listener } from '@/helpers/events'
import { get_all as getRunningProcesses, kill as killProcess } from '@/helpers/process'
import { loading_listener, process_listener } from '@/helpers/events'
import { useRouter } from 'vue-router'
import { progress_bars_list } from '@/helpers/state.js'
import { refreshOffline, isOffline } from '@/helpers/utils.js'
import ProgressBar from '@/components/ui/ProgressBar.vue'
import { handleError } from '@/store/notifications.js'
import { mixpanel_track } from '@/helpers/mixpanel'
import { ChatIcon } from '@/assets/icons'
import { get_many } from '@/helpers/profile.js'
import { trackEvent } from '@/helpers/analytics'
const router = useRouter()
const card = ref(null)
@@ -135,38 +130,43 @@ const showCard = ref(false)
const showProfiles = ref(false)
const currentProcesses = ref(await getRunningProfiles().catch(handleError))
const selectedProfile = ref(currentProcesses.value[0])
const currentProcesses = ref([])
const selectedProcess = ref()
const offline = ref(await isOffline().catch(handleError))
const refreshInternet = async () => {
offline.value = await refreshOffline().catch(handleError)
const refresh = async () => {
const processes = await getRunningProcesses().catch(handleError)
const profiles = await get_many(processes.map((x) => x.profile_path)).catch(handleError)
currentProcesses.value = processes.map((x) => ({
profile: profiles.find((prof) => x.profile_path === prof.path),
...x,
}))
if (!selectedProcess.value || !currentProcesses.value.includes(selectedProcess.value)) {
selectedProcess.value = currentProcesses.value[0]
}
}
await refresh()
const offline = ref(!navigator.onLine)
window.addEventListener('offline', () => {
offline.value = true
})
window.addEventListener('online', () => {
offline.value = false
})
const unlistenProcess = await process_listener(async () => {
await refresh()
})
const unlistenRefresh = await offline_listener(async (b) => {
offline.value = b
await refresh()
})
const refresh = async () => {
currentProcesses.value = await getRunningProfiles().catch(handleError)
if (!currentProcesses.value.includes(selectedProfile.value)) {
selectedProfile.value = currentProcesses.value[0]
}
}
const stop = async (path) => {
const stop = async (process) => {
try {
const processes = await getProfileProcesses(path ?? selectedProfile.value.path)
await killProfile(processes[0])
await killProcess(process.uuid).catch(handleError)
mixpanel_track('InstanceStop', {
loader: currentProcesses.value[0].metadata.loader,
game_version: currentProcesses.value[0].metadata.game_version,
trackEvent('InstanceStop', {
loader: process.profile.loader,
game_version: process.profile.game_version,
source: 'AppBar',
})
} catch (e) {
@@ -176,7 +176,7 @@ const stop = async (path) => {
}
const goToTerminal = (path) => {
router.push(`/instance/${encodeURIComponent(path ?? selectedProfile.value.path)}/logs`)
router.push(`/instance/${encodeURIComponent(path ?? selectedProcess.value.profile.path)}/logs`)
}
const currentLoadingBars = ref([])
@@ -188,16 +188,27 @@ const refreshInfo = async () => {
if (x.bar_type.type === 'java_download') {
x.title = 'Downloading Java ' + x.bar_type.version
}
if (x.bar_type.profile_name) {
x.title = x.bar_type.profile_name
if (x.bar_type.profile_path) {
x.title = x.bar_type.profile_path
}
if (x.bar_type.pack_name) {
x.title = x.bar_type.pack_name
}
return x
}
},
)
currentLoadingBars.value.sort((a, b) => {
if (a.loading_bar_uuid < b.loading_bar_uuid) {
return -1
}
if (a.loading_bar_uuid > b.loading_bar_uuid) {
return 1
}
return 0
})
if (currentLoadingBars.value.length === 0) {
showCard.value = false
} else if (currentLoadingBarCount < currentLoadingBars.value.length) {
@@ -210,8 +221,8 @@ const unlistenLoading = await loading_listener(async () => {
await refreshInfo()
})
const selectProfile = (profile) => {
selectedProfile.value = profile
const selectProcess = (process) => {
selectedProcess.value = process
showProfiles.value = false
}
@@ -262,7 +273,6 @@ onBeforeUnmount(() => {
window.removeEventListener('click', handleClickOutsideProfile)
unlistenProcess()
unlistenLoading()
unlistenRefresh()
})
</script>
@@ -330,8 +340,12 @@ onBeforeUnmount(() => {
width: 1.25rem !important;
height: 1.25rem !important;
svg {
min-width: 1.25rem;
}
&.stop {
--text-color: var(--color-red) !important;
color: var(--color-red);
}
}

View File

@@ -63,29 +63,13 @@
</template>
<script setup>
import {
Avatar,
Card,
Categories,
EnvironmentIndicator,
Button,
DownloadIcon,
formatNumber,
formatCategory,
HeartIcon,
CalendarIcon,
CheckIcon,
StarIcon,
} from 'omorphia'
import { DownloadIcon, HeartIcon, CalendarIcon, CheckIcon, StarIcon } from '@modrinth/assets'
import { Avatar, Card, Categories, EnvironmentIndicator, Button } from '@modrinth/ui'
import { formatNumber, formatCategory } from '@modrinth/utils'
import dayjs from 'dayjs'
import relativeTime from 'dayjs/plugin/relativeTime'
import { ref } from 'vue'
import { add_project_from_version as installMod, list } from '@/helpers/profile.js'
import { install as packInstall } from '@/helpers/pack.js'
import { installVersionDependencies } from '@/helpers/utils.js'
import { useFetch } from '@/helpers/fetch.js'
import { handleError } from '@/store/notifications.js'
import { mixpanel_track } from '@/helpers/mixpanel'
import { install as installVersion } from '@/store/install.js'
dayjs.extend(relativeTime)
const props = defineProps({
@@ -105,18 +89,6 @@ const props = defineProps({
type: Object,
default: null,
},
confirmModal: {
type: Object,
default: null,
},
modInstallModal: {
type: Object,
default: null,
},
incompatibilityWarningModal: {
type: Object,
default: null,
},
featured: {
type: Boolean,
default: false,
@@ -134,92 +106,19 @@ const installed = ref(props.installed)
async function install() {
installing.value = true
const versions = await useFetch(
`https://api.modrinth.com/v2/project/${props.project.project_id}/version`,
'project versions'
)
let queuedVersionData
if (!props.instance) {
queuedVersionData = versions[0]
} else {
queuedVersionData = versions.find(
(v) =>
v.game_versions.includes(props.instance.metadata.game_version) &&
(props.project.project_type !== 'mod' || v.loaders.includes(props.instance.metadata.loader))
)
}
if (props.project.project_type === 'modpack') {
const packs = Object.values(await list().catch(handleError))
if (
packs.length === 0 ||
!packs
.map((value) => value.metadata)
.find((pack) => pack.linked_data?.project_id === props.project.project_id)
) {
await packInstall(
props.project.project_id,
queuedVersionData.id,
props.project.title,
props.project.icon_url
).catch(handleError)
mixpanel_track('PackInstall', {
id: props.project.project_id,
version_id: queuedVersionData.id,
title: props.project.title,
source: 'SearchCard',
})
} else {
props.confirmModal.show(
props.project.project_id,
queuedVersionData.id,
props.project.title,
props.project.icon_url
)
}
} else {
if (props.instance) {
if (!queuedVersionData) {
props.incompatibilityWarningModal.show(
props.instance,
props.project.title,
versions,
() => (installed.value = true),
props.project.project_id,
props.project.project_type
)
installing.value = false
return
} else {
await installMod(props.instance.path, queuedVersionData.id).catch(handleError)
await installVersionDependencies(props.instance, queuedVersionData)
mixpanel_track('ProjectInstall', {
loader: props.instance.metadata.loader,
game_version: props.instance.metadata.game_version,
id: props.project.project_id,
project_type: props.project.project_type,
version_id: queuedVersionData.id,
title: props.project.title,
source: 'SearchCard',
})
}
} else {
props.modInstallModal.show(
props.project.project_id,
versions,
props.project.title,
props.project.project_type
)
await installVersion(
props.project.project_id,
null,
props.instance ? props.instance.path : null,
'SearchCard',
(version) => {
installing.value = false
return
}
if (props.instance) installed.value = true
}
installing.value = false
if (props.instance && version) {
installed.value = true
}
},
)
}
</script>

File diff suppressed because one or more lines are too long

View File

@@ -1,48 +1,35 @@
<script setup>
import { Modal, Button } from 'omorphia'
import { Button } from '@modrinth/ui'
import { ref } from 'vue'
import { useFetch } from '@/helpers/fetch.js'
import SearchCard from '@/components/ui/SearchCard.vue'
import { get_categories } from '@/helpers/tags.js'
import { handleError } from '@/store/notifications.js'
import { install as packInstall } from '@/helpers/pack.js'
import mixpanel from 'mixpanel-browser'
import ModInstallModal from '@/components/ui/ModInstallModal.vue'
import { get_version, get_project } from '@/helpers/cache.js'
import { install as installVersion } from '@/store/install.js'
import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'
const confirmModal = ref(null)
const project = ref(null)
const version = ref(null)
const categories = ref(null)
const installing = ref(false)
const modInstallModal = ref(null)
defineExpose({
async show(event) {
if (event.event === 'InstallVersion') {
version.value = await useFetch(
`https://api.modrinth.com/v2/version/${encodeURIComponent(event.id)}`,
'version'
)
project.value = await useFetch(
`https://api.modrinth.com/v2/project/${encodeURIComponent(version.value.project_id)}`,
'project'
version.value = await get_version(event.id, 'must_revalidate').catch(handleError)
project.value = await get_project(version.value.project_id, 'must_revalidate').catch(
handleError,
)
} else {
project.value = await useFetch(
`https://api.modrinth.com/v2/project/${encodeURIComponent(event.id)}`,
'project'
)
version.value = await useFetch(
`https://api.modrinth.com/v2/version/${encodeURIComponent(project.value.versions[0])}`,
'version'
)
project.value = await get_project(event.id, 'must_revalidate').catch(handleError)
version.value = await get_version(
project.value.versions[project.value.versions.length - 1],
'must_revalidate',
).catch(handleError)
}
categories.value = (await get_categories().catch(handleError)).filter(
(cat) => project.value.categories.includes(cat.name) && cat.project_type === 'mod'
)
confirmModal.value.show()
categories.value = (await get_categories().catch(handleError)).filter(
(cat) => project.value.categories.includes(cat.name) && cat.project_type === 'mod'
(cat) => project.value.categories.includes(cat.name) && cat.project_type === 'mod',
)
confirmModal.value.show()
},
@@ -50,33 +37,12 @@ defineExpose({
async function install() {
confirmModal.value.hide()
if (project.value.project_type === 'modpack') {
await packInstall(
project.value.id,
version.value.id,
project.value.title,
project.value.icon_url
).catch(handleError)
mixpanel.track('PackInstall', {
id: project.value.id,
version_id: version.value.id,
title: project.value.title,
source: 'ProjectPage',
})
} else {
modInstallModal.value.show(
project.value.id,
[version.value],
project.value.title,
project.value.project_type
)
}
await installVersion(project.value.id, version.value.id, null, 'URLConfirmModal')
}
</script>
<template>
<Modal ref="confirmModal" :header="`Install ${project?.title}`">
<ModalWrapper ref="confirmModal" :header="`Install ${project?.title}`">
<div class="modal-body">
<SearchCard
:project="project"
@@ -95,8 +61,7 @@ async function install() {
</div>
</div>
</div>
</Modal>
<ModInstallModal ref="modInstallModal" />
</ModalWrapper>
</template>
<style scoped lang="scss">

View File

@@ -1,9 +1,5 @@
<template>
<Modal
ref="incompatibleModal"
header="Incompatibility warning"
:noblur="!themeStore.advancedRendering"
>
<ModalWrapper ref="incompatibleModal" header="Incompatibility warning" :on-hide="onInstall">
<div class="modal-body">
<p>
This {{ versions?.length > 0 ? 'project' : 'version' }} is not compatible with the instance
@@ -12,13 +8,11 @@
</p>
<table>
<tr class="header">
<th>{{ instance?.metadata.name }}</th>
<th>{{ projectTitle }}</th>
<th>{{ instance?.name }}</th>
<th>{{ project.title }}</th>
</tr>
<tr class="content">
<td class="data">
{{ instance?.metadata.loader }} {{ instance?.metadata.game_version }}
</td>
<td class="data">{{ instance?.loader }} {{ instance?.game_version }}</td>
<td>
<DropdownSelect
v-if="versions?.length > 1"
@@ -52,50 +46,42 @@
</Button>
</div>
</div>
</Modal>
</ModalWrapper>
</template>
<script setup>
import { Button, Modal, XIcon, DownloadIcon, DropdownSelect, formatCategory } from 'omorphia'
import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'
import { XIcon, DownloadIcon } from '@modrinth/assets'
import { Button, DropdownSelect } from '@modrinth/ui'
import { formatCategory } from '@modrinth/utils'
import { add_project_from_version as installMod } from '@/helpers/profile'
import { ref } from 'vue'
import { handleError, useTheming } from '@/store/state.js'
import { mixpanel_track } from '@/helpers/mixpanel'
const themeStore = useTheming()
import { handleError } from '@/store/state.js'
import { trackEvent } from '@/helpers/analytics'
const instance = ref(null)
const project = ref(null)
const projectType = ref(null)
const projectTitle = ref(null)
const versions = ref(null)
const selectedVersion = ref(null)
const incompatibleModal = ref(null)
const installing = ref(false)
let markInstalled = () => {}
const onInstall = ref(() => {})
defineExpose({
show: (
instanceVal,
projectTitleVal,
selectedVersions,
extMarkInstalled,
projectIdVal,
projectTypeVal
) => {
show: (instanceVal, projectVal, projectVersions, callback) => {
instance.value = instanceVal
projectTitle.value = projectTitleVal
versions.value = selectedVersions
selectedVersion.value = selectedVersions[0]
versions.value = projectVersions
selectedVersion.value = projectVersions[0]
project.value = projectIdVal
projectType.value = projectTypeVal
project.value = projectVal
onInstall.value = callback
installing.value = false
incompatibleModal.value.show()
markInstalled = extMarkInstalled
mixpanel_track('ProjectInstallStart', { source: 'ProjectIncompatibilityWarningModal' })
trackEvent('ProjectInstallStart', { source: 'ProjectIncompatibilityWarningModal' })
},
})
@@ -103,16 +89,16 @@ const install = async () => {
installing.value = true
await installMod(instance.value.path, selectedVersion.value.id).catch(handleError)
installing.value = false
markInstalled()
onInstall.value(selectedVersion.value.id)
incompatibleModal.value.hide()
mixpanel_track('ProjectInstall', {
loader: instance.value.metadata.loader,
game_version: instance.value.metadata.game_version,
trackEvent('ProjectInstall', {
loader: instance.value.loader,
game_version: instance.value.game_version,
id: project.value,
version_id: selectedVersion.value.id,
project_type: projectType.value,
title: projectTitle.value,
project_type: project.value.project_type,
title: project.value.title,
source: 'ProjectIncompatibilityWarningModal',
})
}

View File

@@ -1,54 +1,56 @@
<script setup>
import { Button, Modal, XIcon, DownloadIcon } from 'omorphia'
import { XIcon, DownloadIcon } from '@modrinth/assets'
import { Button } from '@modrinth/ui'
import { install as pack_install } from '@/helpers/pack'
import { ref } from 'vue'
import { mixpanel_track } from '@/helpers/mixpanel'
import { useTheming } from '@/store/theme.js'
import { trackEvent } from '@/helpers/analytics'
import { handleError } from '@/store/state.js'
import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'
const themeStore = useTheming()
const version = ref('')
const title = ref('')
const projectId = ref('')
const icon = ref('')
const versionId = ref()
const project = ref()
const confirmModal = ref(null)
const installing = ref(false)
const onInstall = ref(() => {})
defineExpose({
show: (projectIdVal, versionId, projectTitle, projectIcon) => {
projectId.value = projectIdVal
version.value = versionId
title.value = projectTitle
icon.value = projectIcon
show: (projectVal, versionIdVal, callback) => {
project.value = projectVal
versionId.value = versionIdVal
installing.value = false
confirmModal.value.show()
mixpanel_track('PackInstallStart')
onInstall.value = callback
trackEvent('PackInstallStart')
},
})
async function install() {
installing.value = true
console.log(`Installing ${projectId.value} ${version.value} ${title.value} ${icon.value}`)
confirmModal.value.hide()
await pack_install(
projectId.value,
version.value,
title.value,
icon.value ? icon.value : null
project.value.id,
versionId.value,
project.value.title,
project.value.icon_url,
).catch(handleError)
mixpanel_track('PackInstall', {
id: projectId.value,
version_id: version.value,
title: title.value,
trackEvent('PackInstall', {
id: project.value.id,
version_id: versionId.value,
title: project.value.title,
source: 'ConfirmModal',
})
onInstall.value(versionId.value)
installing.value = false
}
</script>
<template>
<Modal ref="confirmModal" header="Are you sure?" :noblur="!themeStore.advancedRendering">
<ModalWrapper ref="confirmModal" header="Are you sure?" :on-hide="onInstall">
<div class="modal-body">
<p>You already have this modpack installed. Are you sure you want to install it again?</p>
<div class="input-group push-right">
@@ -58,7 +60,7 @@ async function install() {
>
</div>
</div>
</Modal>
</ModalWrapper>
</template>
<style lang="scss" scoped>

View File

@@ -1,42 +1,37 @@
<script setup>
import {
Avatar,
Modal,
Button,
DownloadIcon,
PlusIcon,
Card,
UploadIcon,
XIcon,
RightArrowIcon,
CheckIcon,
} from 'omorphia'
} from '@modrinth/assets'
import { Avatar, Button, Card } from '@modrinth/ui'
import { computed, ref } from 'vue'
import {
add_project_from_version as installMod,
check_installed,
get,
list,
create,
} from '@/helpers/profile'
import { open } from '@tauri-apps/api/dialog'
import { create } from '@/helpers/profile'
import { installVersionDependencies } from '@/helpers/utils'
import { open } from '@tauri-apps/plugin-dialog'
import { installVersionDependencies } from '@/store/install.js'
import { handleError } from '@/store/notifications.js'
import { mixpanel_track } from '@/helpers/mixpanel'
import { useTheming } from '@/store/theme.js'
import { useRouter } from 'vue-router'
import { tauri } from '@tauri-apps/api'
import { convertFileSrc } from '@tauri-apps/api/core'
import { trackEvent } from '@/helpers/analytics'
import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'
const themeStore = useTheming()
const router = useRouter()
const versions = ref([])
const project = ref('')
const projectTitle = ref('')
const projectType = ref('')
const versions = ref()
const project = ref()
const installModal = ref(null)
const installModal = ref()
const searchFilter = ref('')
const showCreation = ref(false)
const icon = ref(null)
const name = ref(null)
@@ -45,33 +40,65 @@ const loader = ref(null)
const gameVersion = ref(null)
const creatingInstance = ref(false)
defineExpose({
show: async (projectId, selectedVersions, title, type) => {
project.value = projectId
versions.value = selectedVersions
projectTitle.value = title
projectType.value = type
const profiles = ref([])
installModal.value.show()
const shownProfiles = computed(() =>
profiles.value
.filter((profile) => {
return profile.name.toLowerCase().includes(searchFilter.value.toLowerCase())
})
.filter((profile) => {
const loaders = versions.value.flatMap((v) => v.loaders)
return (
versions.value.flatMap((v) => v.game_versions).includes(profile.game_version) &&
(project.value.project_type === 'mod'
? loaders.includes(profile.loader) || loaders.includes('minecraft')
: true)
)
}),
)
const onInstall = ref(() => {})
defineExpose({
show: async (projectVal, versionsVal, callback) => {
project.value = projectVal
versions.value = versionsVal
searchFilter.value = ''
profiles.value = await getData()
showCreation.value = false
name.value = null
icon.value = null
display_icon.value = null
gameVersion.value = null
loader.value = null
mixpanel_track('ProjectInstallStart', { source: 'ProjectInstallModal' })
onInstall.value = callback
const profilesVal = await list().catch(handleError)
for (const profile of profilesVal) {
profile.installing = false
profile.installedMod = await check_installed(profile.path, project.value.id).catch(
handleError,
)
}
profiles.value = profilesVal
installModal.value.show()
trackEvent('ProjectInstallStart', { source: 'ProjectInstallModal' })
},
})
const profiles = ref([])
async function install(instance) {
instance.installing = true
const version = versions.value.find((v) => {
return (
v.game_versions.includes(instance.metadata.game_version) &&
(v.loaders.includes(instance.metadata.loader) ||
v.loaders.includes('minecraft') ||
v.loaders.includes('iris') ||
v.loaders.includes('optifine'))
v.game_versions.includes(instance.game_version) &&
(project.value.project_type === 'mod'
? v.loaders.includes(instance.loader) || v.loaders.includes('minecraft')
: true)
)
})
@@ -87,45 +114,19 @@ async function install(instance) {
instance.installedMod = true
instance.installing = false
mixpanel_track('ProjectInstall', {
loader: instance.metadata.loader,
game_version: instance.metadata.game_version,
id: project.value,
trackEvent('ProjectInstall', {
loader: instance.loader,
game_version: instance.game_version,
id: project.value.id,
version_id: version.id,
project_type: projectType.value,
title: projectTitle.value,
project_type: project.value.project_type,
title: project.value.title,
source: 'ProjectInstallModal',
})
onInstall.value(version.id)
}
async function getData() {
const projects = await list(true).then(Object.values).catch(handleError)
const filtered = projects
.filter((profile) => {
return profile.metadata.name.toLowerCase().includes(searchFilter.value.toLowerCase())
})
.filter((profile) => {
return (
versions.value.flatMap((v) => v.game_versions).includes(profile.metadata.game_version) &&
versions.value
.flatMap((v) => v.loaders)
.some(
(value) =>
value === profile.metadata.loader || ['minecraft', 'iris', 'optifine'].includes(value)
)
)
})
for (let profile of filtered) {
profile.installing = false
profile.installedMod = await check_installed(profile.path, project.value).catch(handleError)
}
return filtered
}
const alreadySentCreation = ref(false)
const toggleCreation = () => {
showCreation.value = !showCreation.value
name.value = null
@@ -134,14 +135,13 @@ const toggleCreation = () => {
gameVersion.value = null
loader.value = null
if (!alreadySentCreation.value) {
alreadySentCreation.value = false
mixpanel_track('InstanceCreateStart', { source: 'ProjectInstallModal' })
if (showCreation.value) {
trackEvent('InstanceCreateStart', { source: 'ProjectInstallModal' })
}
}
const upload_icon = async () => {
icon.value = await open({
const res = await open({
multiple: false,
filters: [
{
@@ -150,9 +150,10 @@ const upload_icon = async () => {
},
],
})
icon.value = res.path ?? res
if (!icon.value) return
display_icon.value = tauri.convertFileSrc(icon.value)
display_icon.value = convertFileSrc(icon.value)
}
const reset_icon = () => {
@@ -175,7 +176,7 @@ const createInstance = async () => {
versions.value[0].game_versions[0],
loader,
'latest',
icon.value
icon.value,
).catch(handleError)
await installMod(id, versions.value[0].id).catch(handleError)
@@ -185,7 +186,7 @@ const createInstance = async () => {
const instance = await get(id, true)
await installVersionDependencies(instance, versions.value[0])
mixpanel_track('InstanceCreate', {
trackEvent('InstanceCreate', {
profile_name: name.value,
game_version: versions.value[0].game_versions[0],
loader: loader,
@@ -194,31 +195,25 @@ const createInstance = async () => {
source: 'ProjectInstallModal',
})
mixpanel_track('ProjectInstall', {
trackEvent('ProjectInstall', {
loader: loader,
game_version: versions.value[0].game_versions[0],
id: project.value,
version_id: versions.value[0].id,
project_type: projectType.value,
title: projectTitle.value,
project_type: project.value.project_type,
title: project.value.title,
source: 'ProjectInstallModal',
})
onInstall.value(versions.value[0].id)
if (installModal.value) installModal.value.hide()
creatingInstance.value = false
}
const check_valid = computed(() => {
return name.value
})
</script>
<template>
<Modal
ref="installModal"
header="Install project to instance"
:noblur="!themeStore.advancedRendering"
>
<ModalWrapper ref="installModal" header="Install project to instance" :on-hide="onInstall">
<div class="modal-body">
<input
v-model="searchFilter"
@@ -228,34 +223,27 @@ const check_valid = computed(() => {
placeholder="Search for an instance"
/>
<div class="profiles" :class="{ 'hide-creation': !showCreation }">
<div v-for="profile in profiles" :key="profile.metadata.name" class="option">
<Button
color="raised"
class="profile-button"
@click="$router.push(`/instance/${encodeURIComponent(profile.path)}`)"
<div v-for="profile in shownProfiles" :key="profile.name" class="option">
<router-link
class="btn btn-transparent profile-button"
:to="`/instance/${encodeURIComponent(profile.path)}`"
@click="installModal.hide()"
>
<Avatar
:src="
!profile.metadata.icon ||
(profile.metadata.icon && profile.metadata.icon.startsWith('http'))
? profile.metadata.icon
: tauri.convertFileSrc(profile.metadata?.icon)
"
:src="profile.icon_path ? convertFileSrc(profile.icon_path) : null"
class="profile-image"
/>
{{ profile.metadata.name }}
</Button>
{{ profile.name }}
</router-link>
<div
v-tooltip="
profile.metadata.linked_data?.locked && !profile.installedMod
profile.linked_data?.locked && !profile.installedMod
? 'Unpair or unlock an instance to add mods.'
: ''
"
>
<Button
:disabled="
profile.installedMod || profile.installing || profile.metadata.linked_data?.locked
"
:disabled="profile.installedMod || profile.installing || profile.linked_data?.locked"
@click="install(profile)"
>
<DownloadIcon v-if="!profile.installedMod && !profile.installing" />
@@ -264,10 +252,10 @@ const check_valid = computed(() => {
profile.installing
? 'Installing...'
: profile.installedMod
? 'Installed'
: profile.metadata.linked_data && profile.metadata.linked_data.locked
? 'Paired'
: 'Install'
? 'Installed'
: profile.linked_data && profile.linked_data.locked
? 'Paired'
: 'Install'
}}
</Button>
</div>
@@ -296,7 +284,7 @@ const check_valid = computed(() => {
placeholder="Name"
class="creation-input"
/>
<Button :disabled="creatingInstance === true || !check_valid" @click="createInstance()">
<Button :disabled="creatingInstance === true || !name" @click="createInstance()">
<RightArrowIcon />
{{ creatingInstance ? 'Creating...' : 'Create' }}
</Button>
@@ -311,7 +299,7 @@ const check_valid = computed(() => {
<Button @click="installModal.hide()">Cancel</Button>
</div>
</div>
</Modal>
</ModalWrapper>
</template>
<style scoped lang="scss">

View File

@@ -0,0 +1,69 @@
<script setup lang="ts">
import { ref } from 'vue'
import { ConfirmModal } from '@modrinth/ui'
import { show_ads_window, hide_ads_window } from '@/helpers/ads.js'
import { useTheming } from '@/store/theme.js'
const themeStore = useTheming()
defineProps({
confirmationText: {
type: String,
default: '',
},
hasToType: {
type: Boolean,
default: false,
},
title: {
type: String,
default: 'No title defined',
required: true,
},
description: {
type: String,
default: 'No description defined',
required: true,
},
proceedLabel: {
type: String,
default: 'Proceed',
},
})
const emit = defineEmits(['proceed'])
const modal = ref(null)
defineExpose({
show: () => {
hide_ads_window()
modal.value.show()
},
hide: () => {
onModalHide()
modal.value.hide()
},
})
function onModalHide() {
show_ads_window()
}
function proceed() {
emit('proceed')
}
</script>
<template>
<ConfirmModal
ref="modal"
:confirmation-text="confirmationText"
:has-to-type="hasToType"
:title="title"
:description="description"
:proceed-label="proceedLabel"
:on-hide="onModalHide"
:noblur="!themeStore.advancedRendering"
@proceed="proceed"
/>
</template>

View File

@@ -0,0 +1,49 @@
<script setup lang="ts">
import { ref } from 'vue'
import { Modal } from '@modrinth/ui'
import { show_ads_window, hide_ads_window } from '@/helpers/ads.js'
import { useTheming } from '@/store/theme.js'
const themeStore = useTheming()
const props = defineProps({
header: {
type: String,
default: null,
},
closable: {
type: Boolean,
default: true,
},
onHide: {
type: Function,
default() {
return () => {}
},
},
})
const modal = ref(null)
defineExpose({
show: () => {
hide_ads_window()
modal.value.show()
},
hide: () => {
onModalHide()
modal.value.hide()
},
})
function onModalHide() {
show_ads_window()
props.onHide()
}
</script>
<template>
<Modal ref="modal" :header="header" :noblur="!themeStore.advancedRendering" @hide="onModalHide">
<slot />
</Modal>
</template>

View File

@@ -0,0 +1,61 @@
<script setup lang="ts">
import { ref } from 'vue'
import { ShareModal } from '@modrinth/ui'
import { show_ads_window, hide_ads_window } from '@/helpers/ads.js'
import { useTheming } from '@/store/theme.js'
const themeStore = useTheming()
defineProps({
header: {
type: String,
default: 'Share',
},
shareTitle: {
type: String,
default: 'Modrinth',
},
shareText: {
type: String,
default: null,
},
link: {
type: Boolean,
default: false,
},
openInNewTab: {
type: Boolean,
default: true,
},
})
const modal = ref(null)
defineExpose({
show: (passedContent) => {
hide_ads_window()
modal.value.show(passedContent)
},
hide: () => {
onModalHide()
modal.value.hide()
},
})
function onModalHide() {
show_ads_window()
}
</script>
<template>
<ShareModal
ref="modal"
:header="header"
:share-title="shareTitle"
:share-text="shareText"
:link="link"
:open-in-new-tab="openInNewTab"
:on-hide="onModalHide"
:noblur="!themeStore.advancedRendering"
/>
</template>

View File

@@ -0,0 +1,368 @@
<script setup>
import { UserIcon, LockIcon, MailIcon } from '@modrinth/assets'
import { Button, Card, Checkbox } from '@modrinth/ui'
import {
DiscordIcon,
GithubIcon,
MicrosoftIcon,
GoogleIcon,
SteamIcon,
GitLabIcon,
} from '@/assets/external'
import { login, login_2fa, create_account, login_pass } from '@/helpers/mr_auth.js'
import { handleError, useNotifications } from '@/store/state.js'
import { ref } from 'vue'
import { handleSevereError } from '@/store/error.js'
import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'
const props = defineProps({
callback: {
type: Function,
required: true,
},
})
const modal = ref()
const turnstileToken = ref()
const widgetId = ref()
defineExpose({
show: () => {
modal.value.show()
if (window.turnstile === null || !window.turnstile) {
const script = document.createElement('script')
script.src =
'https://challenges.cloudflare.com/turnstile/v0/api.js?onload=onloadTurnstileCallback'
script.async = true
script.defer = true
document.head.appendChild(script)
window.onloadTurnstileCallback = loadWidget
} else {
loadWidget()
}
},
})
function loadWidget() {
widgetId.value = window.turnstile.render('#turnstile-container', {
sitekey: '0x4AAAAAAAW3guHM6Eunbgwu',
callback: (token) => (turnstileToken.value = token),
expiredCallback: () => (turnstileToken.value = null),
})
}
function removeWidget() {
if (widgetId.value) {
window.turnstile.remove(widgetId.value)
widgetId.value = null
turnstileToken.value = null
}
}
const loggingIn = ref(true)
const twoFactorFlow = ref(null)
const twoFactorCode = ref('')
const email = ref('')
const username = ref('')
const password = ref('')
const confirmPassword = ref('')
const subscribe = ref(true)
async function signInOauth(provider) {
const creds = await login(provider).catch(handleSevereError)
if (creds && creds.type === 'two_factor_required') {
twoFactorFlow.value = creds.flow
} else if (creds && creds.session) {
props.callback()
modal.value.hide()
}
}
async function signIn2fa() {
const creds = await login_2fa(twoFactorCode.value, twoFactorFlow.value).catch(handleError)
if (creds && creds.session) {
props.callback()
modal.value.hide()
}
}
async function signIn() {
const creds = await login_pass(username.value, password.value, turnstileToken.value).catch(
handleError,
)
window.turnstile.reset(widgetId.value)
if (creds && creds.type === 'two_factor_required') {
twoFactorFlow.value = creds.flow
} else if (creds && creds.session) {
props.callback()
modal.value.hide()
}
}
async function createAccount() {
if (password.value !== confirmPassword.value) {
const notifs = useNotifications()
notifs.addNotification({
title: 'An error occurred',
text: 'Passwords do not match!',
type: 'error',
})
return
}
const creds = await create_account(
username.value,
email.value,
password.value,
turnstileToken.value,
subscribe.value,
).catch(handleError)
window.turnstile.reset(widgetId.value)
if (creds && creds.session) {
props.callback()
modal.value.hide()
}
}
</script>
<template>
<ModalWrapper ref="modal" :on-hide="removeWidget">
<Card>
<template v-if="twoFactorFlow">
<h1>Enter two-factor code</h1>
<p>Please enter a two-factor code to proceed.</p>
<input v-model="twoFactorCode" maxlength="11" type="text" placeholder="Enter code..." />
</template>
<template v-else>
<h1 v-if="loggingIn">Login to Modrinth</h1>
<h1 v-else>Create an account</h1>
<div class="button-grid">
<Button class="discord" large @click="signInOauth('discord')">
<DiscordIcon />
Discord
</Button>
<Button class="github" large @click="signInOauth('github')">
<GithubIcon />
Github
</Button>
<Button class="white" large @click="signInOauth('microsoft')">
<MicrosoftIcon />
Microsoft
</Button>
<Button class="google" large @click="signInOauth('google')">
<GoogleIcon />
Google
</Button>
<Button class="white" large @click="signInOauth('steam')">
<SteamIcon />
Steam
</Button>
<Button class="gitlab" large @click="signInOauth('gitlab')">
<GitLabIcon />
GitLab
</Button>
</div>
<div class="divider">
<hr />
<p>Or</p>
</div>
<div v-if="!loggingIn" class="iconified-input username">
<MailIcon />
<input v-model="email" type="text" placeholder="Email" />
</div>
<div class="iconified-input username">
<UserIcon />
<input
v-model="username"
type="text"
:placeholder="loggingIn ? 'Email or username' : 'Username'"
/>
</div>
<div class="iconified-input" :class="{ username: !loggingIn }">
<LockIcon />
<input v-model="password" type="password" placeholder="Password" />
</div>
<div v-if="!loggingIn" class="iconified-input username">
<LockIcon />
<input v-model="confirmPassword" type="password" placeholder="Confirm password" />
</div>
<div class="turnstile">
<div id="turnstile-container"></div>
<div id="turnstile-container-2"></div>
</div>
<Checkbox
v-if="!loggingIn"
v-model="subscribe"
class="subscribe-btn"
label="Subscribe to updates about Modrinth"
/>
<div class="link-row">
<a v-if="loggingIn" class="button-base" @click="loggingIn = false"> Create account </a>
<a v-else class="button-base" @click="loggingIn = true">Sign in</a>
<a class="button-base" href="https://modrinth.com/auth/reset-password">
Forgot password?
</a>
</div>
</template>
<div class="button-row">
<Button class="transparent" large>Close</Button>
<Button v-if="twoFactorCode" color="primary" large @click="signIn2fa"> Login </Button>
<Button
v-else-if="loggingIn"
color="primary"
large
:disabled="!turnstileToken"
@click="signIn"
>
Login
</Button>
<Button v-else color="primary" large :disabled="!turnstileToken" @click="createAccount">
Create account
</Button>
</div>
</Card>
</ModalWrapper>
</template>
<style scoped lang="scss">
:deep(.modal-container) {
.modal-body {
width: auto;
.content {
background: none;
}
}
}
.card {
width: 25rem;
}
.button-grid {
display: grid;
grid-template-columns: 1fr 1fr;
grid-gap: var(--gap-md);
.btn {
width: 100%;
justify-content: center;
}
.discord {
background-color: #5865f2;
color: var(--color-contrast);
}
.github {
background-color: #8740f1;
color: var(--color-contrast);
}
.white {
background-color: var(--color-contrast);
color: var(--color-accent-contrast);
}
.google {
background-color: #4285f4;
color: var(--color-contrast);
}
.gitlab {
background-color: #fc6d26;
color: var(--color-contrast);
}
}
.divider {
position: relative;
display: flex;
align-items: center;
justify-content: center;
margin: var(--gap-md) 0;
p {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: var(--color-raised-bg);
padding: 0 1rem;
margin: 0;
}
hr {
border: none;
width: 100%;
border-top: 2px solid var(--color-button-bg);
}
}
.iconified-input {
width: 100%;
input {
width: 100%;
flex-basis: auto;
}
}
.username {
margin-bottom: var(--gap-sm);
}
.link-row {
display: flex;
justify-content: space-between;
margin: var(--gap-md) 0;
a {
color: var(--color-blue);
text-decoration: underline;
&:hover {
cursor: pointer;
}
}
}
.button-row {
display: flex;
justify-content: space-between;
.btn {
flex-basis: auto;
}
.transparent {
padding: var(--gap-md) 0;
}
}
:deep(.checkbox) {
border: none;
}
.turnstile {
display: flex;
justify-content: center;
overflow: hidden;
border-radius: var(--radius-md);
border: 2px solid var(--color-button-bg);
height: 66px;
margin-top: var(--gap-md);
iframe {
margin: -1px;
min-width: calc(100% + 2px);
}
}
</style>

View File

@@ -0,0 +1,20 @@
import { invoke } from '@tauri-apps/api/core'
import cssContent from '@/assets/stylesheets/macFix.css?inline'
export async function useCheckDisableMouseover() {
try {
// Fetch the CSS content from the Rust backend
let should_disable_mouseover = await invoke('plugin:utils|should_disable_mouseover')
if (should_disable_mouseover) {
// Create a style element and set its content
const styleElement = document.createElement('style')
styleElement.innerHTML = cssContent
// Append the style element to the document's head
document.head.appendChild(styleElement)
}
} catch (error) {
console.error('Error checking OS version from Rust backend', error)
}
}

Some files were not shown because too many files have changed in this diff Show More