refactor: align files tab with content tab design (#5621)

* fix: files.vue bugs before styling changes

* feat: move files tab to shared layout structure

* fix: qa

* fix: qa

* fix: bugs

* fix: lint

* fix: admonition cleanup with progress + actions

* fix: cleanup

* fix: modals

* fix: admon title

* fix: i18n standard

* fix: lint + i18n pass

* fix: remove transition

* fix: type errors

* feat: files tab in app

* fix: qa

* fix: backup item minmax

* fix: use ContentPageHeader for server panel

* fix: lint

* fix: lint

* fix: lint

* feat: page leave safety

* fix: lint

* fix: cargo fmt fix

* fix: blank in prod

* fix: content card table stuff

* Revert "fix: blank in prod"

This reverts commit 74758fe185cf85a4a20355857f889cb091b97ace.

* fix: import

* feat: browse worlds/servers flow

* fix: worlds tab parity with content tab

* fix: perf bug + shader filter pill copy

* feat: singleplayer filter

* fix: ordering

* fix: breadcrumbs

* fix: lint

* fix: qa

* feat: store server proj id when adding to a non-linked instance

* fix: lint

* fix: i18n + qa

* fix: conflict

* qa: already installed modal + placeholders not server-specific

* fix: qa

* fix: add + edit server modals

* fix: qa

* fix: security

* fix: devin flags

* fix: lint

* chore: change file to break build cache

* fix: admon

* fix: import path stuff

* feat: qa

* fix: fmt fmt idiot

---------

Signed-off-by: Calum H. <calum@modrinth.com>
This commit is contained in:
Calum H.
2026-03-26 18:55:15 +00:00
committed by GitHub
parent 706eb800cb
commit 381ea51cce
170 changed files with 8052 additions and 4571 deletions

View File

@@ -0,0 +1,71 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import ace from 'ace-builds'
ace['define'](
'ace/mode/mclog_highlight_rules',
['require', 'exports', 'ace/lib/oop', 'ace/mode/text_highlight_rules'],
function (require: any, exports: any) {
const oop = require('ace/lib/oop')
const TextHighlightRules = require('ace/mode/text_highlight_rules').TextHighlightRules
const MclogHighlightRules = function (this: any) {
this.$rules = {
start: [
{
token: 'comment.timestamp',
regex: /^\[\d\d:\d\d:\d\d\]/.source,
},
{
token: 'invalid.error',
regex: /\[.+?\/ERROR\]:?/.source,
},
{
token: 'keyword.warn',
regex: /\[.+?\/WARN\]:?/.source,
},
{
token: 'string.info',
regex: /\[.+?\/INFO\]:/.source,
},
{
token: 'support.command',
regex: /: \/.+/.source,
},
{
token: 'comment.stacktrace',
regex: /\tat\s.+/.source,
},
{
token: 'entity.name.function',
regex: /\w+?\[\/\d+?\.\d+?\.\d+?\.\d+?:\d+?\]/.source,
},
{
token: 'storage.chat',
regex: /\[CHAT\]/.source,
},
],
}
this.normalizeRules()
}
oop.inherits(MclogHighlightRules, TextHighlightRules)
exports.MclogHighlightRules = MclogHighlightRules
},
)
ace['define'](
'ace/mode/mclog',
['require', 'exports', 'ace/lib/oop', 'ace/mode/text', 'ace/mode/mclog_highlight_rules'],
function (require: any, exports: any) {
const oop = require('ace/lib/oop')
const TextMode = require('ace/mode/text').Mode
const MclogHighlightRules = require('ace/mode/mclog_highlight_rules').MclogHighlightRules
const Mode = function (this: any) {
this.HighlightRules = MclogHighlightRules
}
oop.inherits(Mode, TextMode)
exports.Mode = Mode
},
)

View File

@@ -1,3 +1,5 @@
import 'ace-builds/esm-resolver'
import cssText from '@modrinth/assets/styles/ace.css?raw'
import ace from 'ace-builds'

View File

@@ -470,10 +470,94 @@ export const commonMessages = defineMessages({
id: 'label.plan-custom',
defaultMessage: 'Custom',
},
copyLinkButton: {
id: 'button.copy-link',
defaultMessage: 'Copy link',
},
switchVersionButton: {
id: 'button.switch-version',
defaultMessage: 'Switch version',
},
updatingLabel: {
id: 'label.updating',
defaultMessage: 'Updating...',
},
deleteFailedLabel: {
id: 'label.delete-failed',
defaultMessage: 'Delete failed',
},
uploadFailedLabel: {
id: 'label.upload-failed',
defaultMessage: 'Upload failed',
},
renameFailedLabel: {
id: 'label.rename-failed',
defaultMessage: 'Rename failed',
},
moveFailedLabel: {
id: 'label.move-failed',
defaultMessage: 'Move failed',
},
createFailedLabel: {
id: 'label.create-failed',
defaultMessage: 'Create failed',
},
extractFailedLabel: {
id: 'label.extract-failed',
defaultMessage: 'Extract failed',
},
showFileButton: {
id: 'button.show-file',
defaultMessage: 'Show file',
},
enableButton: {
id: 'button.enable',
defaultMessage: 'Enable',
},
disableButton: {
id: 'button.disable',
defaultMessage: 'Disable',
},
renameButton: {
id: 'button.rename',
defaultMessage: 'Rename',
},
moveButton: {
id: 'button.move',
defaultMessage: 'Move',
},
extractButton: {
id: 'button.extract',
defaultMessage: 'Extract',
},
doneLabel: {
id: 'label.done',
defaultMessage: 'Done',
},
copyFilenameButton: {
id: 'button.copy-filename',
defaultMessage: 'Copy filename',
},
copyFullPathButton: {
id: 'button.copy-full-path',
defaultMessage: 'Copy full path',
},
copiedFilenameLabel: {
id: 'label.copied-filename',
defaultMessage: 'Copied filename',
},
copiedPathLabel: {
id: 'label.copied-path',
defaultMessage: 'Copied path',
},
openInFolderButton: {
id: 'button.open-in-folder',
defaultMessage: 'Open in folder',
},
downloadFailedLabel: {
id: 'label.download-failed',
defaultMessage: 'Download failed',
},
projectCreated: {
id: 'project.about.details.created',
defaultMessage: 'Created {date}',
@@ -638,6 +722,14 @@ export const financialMessages = defineMessages({
},
})
const PROJECT_TYPE_ALIASES: Record<string, string> = {
shaderpack: 'shader',
}
export function normalizeProjectType(type: string): string {
return PROJECT_TYPE_ALIASES[type] ?? type
}
export const commonProjectTypeCategoryMessages = defineMessages({
datapack: {
id: 'project-type.datapack.category',

View File

@@ -146,6 +146,8 @@ export function getEditorLanguage(ext: string): string {
case 'cfg':
case 'conf':
return 'ini'
case 'log':
return 'mclog'
default:
return 'text'
}

View File

@@ -112,7 +112,7 @@ export const SERVER_SORT_TYPES: SortType[] = [
const FILTER_FIELD_MAP: Record<string, string> = {
server_content_type: 'minecraft_java_server.content.kind',
server_game_version: 'minecraft_java_server.content.supported_game_versions',
server_game_version: 'game_versions',
server_status: 'minecraft_java_server.ping.data',
server_region: 'minecraft_server.region',
server_language: 'minecraft_server.languages',