refactor: StyledInput refactor -> Input components (#6733)

* feat: align style

* feat: new input components

* refactor: migrate to new input components

* refactor: rename component

* prepr

* chore: group inputs like buttons

* fix: lint

* feat: docs

* fix: lint

* fix: bugs

* prepr

* fix slug + adjust create server project

---------

Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
This commit is contained in:
Calum H.
2026-08-25 06:15:38 +00:00
committed by GitHub
co-authored by Prospector
parent 80607c1963
commit c67f980c4a
166 changed files with 1804 additions and 1261 deletions
@@ -7,8 +7,9 @@ import {
FileTreeSelect,
injectNotificationManager,
injectPopupNotificationManager,
Input,
NewModal,
StyledInput,
Textarea,
useVIntl,
} from '@modrinth/ui'
import { save } from '@tauri-apps/plugin-dialog'
@@ -194,7 +195,7 @@ function normalizeExportPath(path) {
<div class="grid grid-cols-2 gap-4">
<div class="labeled_input w-full">
<p class="text-contrast font-semibold">{{ formatMessage(messages.modpackNameLabel) }}</p>
<StyledInput
<Input
v-model="nameInput"
type="text"
:placeholder="formatMessage(messages.modpackNamePlaceholder)"
@@ -206,7 +207,7 @@ function normalizeExportPath(path) {
<p class="text-contrast font-semibold">
{{ formatMessage(messages.versionNumberLabel) }}
</p>
<StyledInput
<Input
v-model="versionInput"
type="text"
:placeholder="formatMessage(messages.versionNumberPlaceholder)"
@@ -219,9 +220,8 @@ function normalizeExportPath(path) {
<p class="m-0 text-contrast font-semibold">
{{ formatMessage(commonMessages.descriptionLabel) }}
</p>
<StyledInput
<Textarea
v-model="exportDescription"
multiline
:placeholder="formatMessage(messages.descriptionPlaceholder)"
wrapper-class="w-full"
/>
@@ -2,7 +2,7 @@
<JavaDetectionModal ref="detectJavaModal" @submit="(val) => emit('update:modelValue', val)" />
<div :id="props.id" class="toggle-setting" :class="{ compact }">
<div class="input-with-status">
<StyledInput
<Input
autocomplete="off"
:disabled="props.disabled"
:model-value="props.modelValue ? props.modelValue.path : ''"
@@ -98,13 +98,7 @@ import {
SpinnerIcon,
XCircleIcon,
} from '@modrinth/assets'
import {
Button,
defineMessages,
injectNotificationManager,
StyledInput,
useVIntl,
} from '@modrinth/ui'
import { Button, defineMessages, injectNotificationManager, Input, useVIntl } from '@modrinth/ui'
import { open } from '@tauri-apps/plugin-dialog'
import { ref, watch } from 'vue'
@@ -6,8 +6,8 @@ import {
defineMessages,
IconButton,
injectNotificationManager,
Input,
IntlFormatted,
StyledInput,
useRelativeTime,
useVIntl,
} from '@modrinth/ui'
@@ -250,7 +250,7 @@ const messages = defineMessages({
{{ formatMessage(messages.usernameDescription) }}
</p>
<div class="flex items-center gap-2 mt-4">
<StyledInput
<Input
v-model="username"
:icon="UserIcon"
type="text"
@@ -280,7 +280,7 @@ const messages = defineMessages({
>
<UserPlusIcon />
</IconButton>
<StyledInput
<Input
v-model="search"
:icon="SearchIcon"
type="text"
@@ -6,7 +6,7 @@ import {
Button,
defineMessages,
injectNotificationManager,
StyledInput,
Input,
useVIntl,
} from '@modrinth/ui'
import { useQueryClient } from '@tanstack/vue-query'
@@ -103,7 +103,7 @@ async function addServer(instance) {
<ModalWrapper ref="modal" :header="formatMessage(messages.title)">
<div class="flex flex-col gap-4 min-w-[350px]">
<Admonition type="warning" :body="formatMessage(messages.compatibilityWarning)" />
<StyledInput
<Input
v-model="searchFilter"
:icon="SearchIcon"
type="search"
@@ -23,7 +23,7 @@
<div class="flex h-[400px] flex-col gap-3 overflow-y-auto bg-surface-2 py-4">
<div class="px-6">
<StyledInput
<Input
v-model="groupInstancesSearch"
:icon="SearchIcon"
:placeholder="formatMessage(messages.searchPlaceholder)"
@@ -96,8 +96,8 @@ import {
Button,
commonMessages,
defineMessages,
Input,
NewModal,
StyledInput,
useVIntl,
} from '@modrinth/ui'
import { ref, watch } from 'vue'
@@ -1,6 +1,6 @@
<script setup lang="ts">
import { PlusIcon, SearchIcon, SquarePlusIcon } from '@modrinth/assets'
import { Button, defineMessages, StyledInput, useVIntl } from '@modrinth/ui'
import { Button, defineMessages, Input, useVIntl } from '@modrinth/ui'
import { computed, inject } from 'vue'
import FilterMenu from '@/components/ui/library/library-toolbar/filter-menu.vue'
@@ -29,7 +29,7 @@ function openNewGroup() {
<template>
<div class="flex flex-col gap-2">
<div class="flex flex-wrap gap-2">
<StyledInput
<Input
v-model="search"
:icon="SearchIcon"
type="text"
@@ -18,7 +18,7 @@
<label for="new-group-name" class="font-semibold text-contrast">
{{ formatMessage(messages.groupName) }}
</label>
<StyledInput
<Input
id="new-group-name"
ref="groupNameInput"
v-model="newGroupName"
@@ -32,7 +32,7 @@
<div class="flex h-[400px] flex-col gap-3 overflow-y-auto bg-surface-2 py-4">
<div class="px-6">
<StyledInput
<Input
v-model="newGroupSearch"
:icon="SearchIcon"
:placeholder="formatMessage(messages.searchInstance)"
@@ -103,15 +103,7 @@
<script setup lang="ts">
import { CheckIcon, PlusIcon, SearchIcon, SpinnerIcon, XIcon } from '@modrinth/assets'
import {
Avatar,
Button,
defineMessages,
NewModal,
StyledInput,
TagItem,
useVIntl,
} from '@modrinth/ui'
import { Avatar, Button, defineMessages, Input, NewModal, TagItem, useVIntl } from '@modrinth/ui'
import { computed, ref, watch } from 'vue'
import { useLibrary } from '@/components/ui/library/use-library'
@@ -157,7 +149,7 @@ const {
} = useLibrary()
const modal = ref<InstanceType<typeof NewModal>>()
const groupNameInput = ref<InstanceType<typeof StyledInput>>()
const groupNameInput = ref<InstanceType<typeof Input>>()
const groupNamesById = computed(
() => new Map(libraryGroups.value.map((group) => [group.id, group.name])),
)
@@ -2,8 +2,8 @@
import {
defineMessages,
injectNotificationManager,
Input,
Slider,
StyledInput,
Toggle,
useVIntl,
} from '@modrinth/ui'
@@ -204,7 +204,7 @@ watch(
</p>
</div>
<StyledInput
<Input
id="width"
v-model="settings.game_resolution[0]"
:disabled="settings.force_fullscreen"
@@ -224,7 +224,7 @@ watch(
</p>
</div>
<StyledInput
<Input
id="height"
v-model="settings.game_resolution[1]"
:disabled="settings.force_fullscreen"
@@ -261,7 +261,7 @@ watch(
<h2 class="m-0 text-lg font-semibold text-contrast">
{{ formatMessage(messages.javaArgumentsTitle) }}
</h2>
<StyledInput
<Input
id="java-args"
v-model="settings.launchArgs"
autocomplete="off"
@@ -278,7 +278,7 @@ watch(
<h2 class="m-0 text-lg font-semibold text-contrast">
{{ formatMessage(messages.environmentVariablesTitle) }}
</h2>
<StyledInput
<Input
id="env-vars"
v-model="settings.envVars"
autocomplete="off"
@@ -299,7 +299,7 @@ watch(
<h3 class="m-0 text-lg font-semibold text-contrast">
{{ formatMessage(messages.preLaunchHookTitle) }}
</h3>
<StyledInput
<Input
id="pre-launch"
v-model="settings.hooks.pre_launch"
autocomplete="off"
@@ -316,7 +316,7 @@ watch(
<h3 class="m-0 text-lg font-semibold text-contrast">
{{ formatMessage(messages.wrapperHookTitle) }}
</h3>
<StyledInput
<Input
id="wrapper"
v-model="settings.hooks.wrapper"
autocomplete="off"
@@ -333,7 +333,7 @@ watch(
<h3 class="m-0 text-lg font-semibold text-contrast">
{{ formatMessage(messages.postExitHookTitle) }}
</h3>
<StyledInput
<Input
id="post-exit"
v-model="settings.hooks.post_exit"
autocomplete="off"
@@ -5,8 +5,8 @@ import {
defineMessages,
IconButton,
injectNotificationManager,
Input,
Slider,
StyledInput,
Toggle,
useVIntl,
} from '@modrinth/ui'
@@ -176,7 +176,7 @@ async function findLauncherDir() {
<h2 class="m-0 text-lg font-semibold text-contrast">
{{ formatMessage(messages.appDirectoryTitle) }}
</h2>
<StyledInput
<Input
id="appDir"
v-model="settings.custom_dir"
:icon="BoxIcon"
@@ -193,7 +193,7 @@ async function findLauncherDir() {
<FolderSearchIcon aria-hidden="true" />
</IconButton>
</template>
</StyledInput>
</Input>
<p class="m-0 leading-tight text-secondary">
{{ formatMessage(messages.appDirectoryDescription) }}
</p>
@@ -6,7 +6,7 @@ import {
commonMessages,
defineMessages,
injectNotificationManager,
StyledInput,
Input,
useVIntl,
} from '@modrinth/ui'
import { computed, ref } from 'vue'
@@ -104,7 +104,7 @@ const messages = defineMessages({
<h2 class="text-lg font-extrabold text-contrast mt-0 mb-1">
{{ formatMessage(messages.name) }}
</h2>
<StyledInput
<Input
v-model="name"
:placeholder="formatMessage(messages.placeholderName)"
autocomplete="off"
@@ -1,11 +1,5 @@
<script setup lang="ts">
import {
Combobox,
defineMessages,
type MessageDescriptor,
StyledInput,
useVIntl,
} from '@modrinth/ui'
import { Combobox, defineMessages, Input, type MessageDescriptor, useVIntl } from '@modrinth/ui'
import type { ServerPackStatus } from '@/helpers/worlds.ts'
@@ -65,7 +59,7 @@ defineExpose({ resourcePackOptions })
<div class="space-y-4 w-full">
<label class="flex flex-col gap-2">
<span class="font-semibold text-contrast">{{ formatMessage(messages.name) }}</span>
<StyledInput
<Input
v-model="name"
:placeholder="formatMessage(messages.placeholderName)"
autocomplete="off"
@@ -74,7 +68,7 @@ defineExpose({ resourcePackOptions })
</label>
<label class="flex flex-col gap-2">
<span class="font-semibold text-contrast">{{ formatMessage(messages.address) }}</span>
<StyledInput
<Input
v-model="address"
:placeholder="formatMessage(messages.placeholderAddress)"
autocomplete="off"
@@ -13,7 +13,7 @@ import {
Chips,
defineMessages,
injectNotificationManager,
StyledInput,
Input,
TeleportOverflowMenu,
useVIntl,
} from '@modrinth/ui'
@@ -367,7 +367,7 @@ const messages = defineMessages({
{{ formatMessage(messages.name) }}
</label>
<div class="flex">
<StyledInput
<Input
id="instance-name"
v-model="title"
autocomplete="off"
@@ -1,11 +1,5 @@
<script setup lang="ts">
import {
Checkbox,
defineMessages,
injectNotificationManager,
StyledInput,
useVIntl,
} from '@modrinth/ui'
import { Checkbox, defineMessages, injectNotificationManager, Input, useVIntl } from '@modrinth/ui'
import { computed, ref, watch } from 'vue'
import { edit } from '@/helpers/instance'
@@ -149,7 +143,7 @@ const messages = defineMessages({
<h2 class="mt-6 m-0 text-lg font-semibold text-contrast">
{{ formatMessage(messages.preLaunch) }}
</h2>
<StyledInput
<Input
id="pre-launch"
v-model="hooks.pre_launch"
autocomplete="off"
@@ -164,7 +158,7 @@ const messages = defineMessages({
<h2 class="mt-6 m-0 text-lg font-semibold text-contrast">
{{ formatMessage(messages.wrapper) }}
</h2>
<StyledInput
<Input
id="wrapper"
v-model="hooks.wrapper"
autocomplete="off"
@@ -179,7 +173,7 @@ const messages = defineMessages({
<h2 class="mt-6 m-0 text-lg font-semibold text-contrast">
{{ formatMessage(messages.postExit) }}
</h2>
<StyledInput
<Input
id="post-exit"
v-model="hooks.post_exit"
autocomplete="off"
@@ -13,8 +13,8 @@ import {
Checkbox,
defineMessages,
injectNotificationManager,
Input,
Slider,
StyledInput,
useVIntl,
} from '@modrinth/ui'
import { open } from '@tauri-apps/plugin-dialog'
@@ -208,7 +208,7 @@ const messages = defineMessages({
>Java {{ optimalJava?.parsed_version }}</span
>
<div class="flex gap-2 items-center">
<StyledInput
<Input
:model-value="activePath"
:disabled="!overrideJavaInstall"
autocomplete="off"
@@ -301,7 +301,7 @@ const messages = defineMessages({
:label="formatMessage(messages.customJavaArguments)"
class="my-2"
/>
<StyledInput
<Input
id="java-args"
v-model="javaArgs"
autocomplete="off"
@@ -317,7 +317,7 @@ const messages = defineMessages({
:label="formatMessage(messages.customEnvironmentVariables)"
class="mb-2"
/>
<StyledInput
<Input
id="env-vars"
v-model="envVars"
autocomplete="off"
@@ -3,7 +3,7 @@ import {
Checkbox,
defineMessages,
injectNotificationManager,
StyledInput,
Input,
Toggle,
useVIntl,
} from '@modrinth/ui'
@@ -129,7 +129,7 @@ const messages = defineMessages({
{{ formatMessage(messages.widthDescription) }}
</p>
</div>
<StyledInput
<Input
id="width"
v-model="resolution[0]"
autocomplete="off"
@@ -148,7 +148,7 @@ const messages = defineMessages({
{{ formatMessage(messages.heightDescription) }}
</p>
</div>
<StyledInput
<Input
id="height"
v-model="resolution[1]"
autocomplete="off"
@@ -2,7 +2,7 @@
<div class="flex flex-col gap-4">
<div class="flex flex-col gap-4">
<div class="flex items-center gap-2">
<StyledInput
<Input
v-model="search"
:icon="SearchIcon"
:placeholder="`Search ${rows.length} users...`"
@@ -151,8 +151,8 @@ import {
AutoLink,
Avatar,
defineMessages,
Input,
type SortDirection,
StyledInput,
Table,
type TableColumn,
truncatedTooltip,
@@ -21,7 +21,7 @@
<ReadyTransition :pending="worldsReadyPending">
<div v-if="dedupedWorlds.length > 0" class="flex flex-col gap-4">
<div class="flex flex-wrap items-center gap-2">
<StyledInput
<Input
v-model="searchFilter"
:icon="SearchIcon"
type="text"
@@ -141,8 +141,8 @@ import {
GAME_MODES,
type GameVersion,
injectNotificationManager,
Input,
ReadyTransition,
StyledInput,
useReadyState,
useVIntl,
} from '@modrinth/ui'