-
+
{{ searchQuery }}
@@ -30,7 +26,7 @@
:spellcheck="searchSpellcheck"
:inputmode="searchInputmode"
:input-attrs="searchInputAttrs"
- wrapper-class="w-full !bg-transparent"
+ wrapper-class="w-full"
:input-class="searchableInputClass"
class="relative z-[1]"
@input="handleSearchInput"
@@ -39,9 +35,9 @@
@focusout="handleSearchFocusout"
@click="handleSearchClick"
>
-
+
@@ -217,7 +213,7 @@ import {
watch,
} from 'vue'
-import StyledInput from './StyledInput.vue'
+import StyledInput from './inputs/StyledInput.vue'
export interface ComboboxOption {
value: T
@@ -389,8 +385,7 @@ const searchSelectionOverlayVisible = computed(() => {
})
const searchableInputClass = computed(() => {
- const parts = ['!bg-transparent']
- if (props.showChevron) parts.push('!pr-9')
+ const parts: string[] = []
if (searchSelectionOverlayVisible.value) {
parts.push('!text-transparent [caret-color:var(--color-text-primary)] selection:bg-transparent')
}
diff --git a/packages/ui/src/components/base/DropdownFilterBar.vue b/packages/ui/src/components/base/DropdownFilterBar.vue
index 73d61e6507..5cc2cfe05e 100644
--- a/packages/ui/src/components/base/DropdownFilterBar.vue
+++ b/packages/ui/src/components/base/DropdownFilterBar.vue
@@ -197,8 +197,7 @@
:icon="SearchIcon"
type="text"
:placeholder="activeCategory.searchPlaceholder ?? 'Search...'"
- wrapper-class="grow bg-surface-4 mx-1"
- input-class="ps-9 mx-1.5"
+ wrapper-class="grow mx-1"
/>
@@ -415,7 +414,7 @@ import {
} from 'vue'
import { useVirtualScroll } from '../../composables/virtual-scroll'
-import StyledInput from './StyledInput.vue'
+import StyledInput from './inputs/StyledInput.vue'
export interface MultiSelectOption {
value: T
diff --git a/packages/ui/src/components/base/Slider.vue b/packages/ui/src/components/base/Slider.vue
index 6c1e30c105..a73376c56f 100644
--- a/packages/ui/src/components/base/Slider.vue
+++ b/packages/ui/src/components/base/Slider.vue
@@ -60,7 +60,7 @@
diff --git a/packages/ui/src/components/base/TimeFramePicker.vue b/packages/ui/src/components/base/TimeFramePicker.vue
index 0db65f9e14..8c5a6dfcae 100644
--- a/packages/ui/src/components/base/TimeFramePicker.vue
+++ b/packages/ui/src/components/base/TimeFramePicker.vue
@@ -199,7 +199,7 @@ import { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'
import { defineMessages, useVIntl } from '../../composables/i18n'
import ButtonStyled from './ButtonStyled.vue'
import Combobox, { type ComboboxOption } from './Combobox.vue'
-import DatePicker from './DatePicker.vue'
+import DatePicker from './inputs/DatePicker.vue'
export type TimeFramePreset =
| 'today'
diff --git a/packages/ui/src/components/base/index.ts b/packages/ui/src/components/base/index.ts
index 7fa6262111..fba1536364 100644
--- a/packages/ui/src/components/base/index.ts
+++ b/packages/ui/src/components/base/index.ts
@@ -21,7 +21,6 @@ export type { ComboboxOption } from './Combobox.vue'
export { default as Combobox } from './Combobox.vue'
export { default as ContentPageHeader } from './ContentPageHeader.vue'
export { default as CopyCode } from './CopyCode.vue'
-export { default as DatePicker } from './DatePicker.vue'
export { default as DoubleIcon } from './DoubleIcon.vue'
export { default as DropArea } from './DropArea.vue'
export type { DropdownFilterBarCategory, DropdownFilterBarOption } from './DropdownFilterBar.vue'
@@ -82,7 +81,15 @@ export { default as SmartClickable } from './SmartClickable.vue'
export type { StackedAdmonitionItem, StackedAdmonitionType } from './StackedAdmonitions.vue'
export { default as StackedAdmonitions } from './StackedAdmonitions.vue'
export { default as StatItem } from './StatItem.vue'
-export { default as StyledInput } from './StyledInput.vue'
+export {
+ DatePicker,
+ InputClearButton,
+ InputFrame,
+ NativeDateInput,
+ StyledInput,
+ StyledTextarea,
+} from './inputs'
+export type { InputAppearance, InputSize } from './inputs'
export type { SortDirection, TableColumn } from './Table.vue'
export { default as Table } from './Table.vue'
export type { TabsTab, TabsValue } from './Tabs.vue'
diff --git a/packages/ui/src/components/base/DatePicker.vue b/packages/ui/src/components/base/inputs/DatePicker.vue
similarity index 97%
rename from packages/ui/src/components/base/DatePicker.vue
rename to packages/ui/src/components/base/inputs/DatePicker.vue
index 17ab811f74..6b55b552cf 100644
--- a/packages/ui/src/components/base/DatePicker.vue
+++ b/packages/ui/src/components/base/inputs/DatePicker.vue
@@ -5,7 +5,7 @@
:class="[
wrapperClass,
calendarOnly ? 'calendar-only' : '',
- disabled ? 'cursor-not-allowed opacity-50' : '',
+ disabled ? 'cursor-not-allowed' : '',
showToday ? 'show-today' : '',
props.mode === 'range' && selectedDates.length < 2 ? 'can-select-range' : '',
props.mode === 'range' && selectedDates.length === 1 ? 'is-selecting-range' : '',
@@ -14,40 +14,50 @@
rangeEndpointMoveState ? 'is-moving-range-end' : '',
]"
>
-
+
+
+
+
+
+
+
+
+
+
+
-
diff --git a/packages/ui/src/components/base/inputs/InputFrame.vue b/packages/ui/src/components/base/inputs/InputFrame.vue
new file mode 100644
index 0000000000..7fdb9e8f18
--- /dev/null
+++ b/packages/ui/src/components/base/inputs/InputFrame.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
diff --git a/packages/ui/src/components/base/inputs/NativeDateInput.vue b/packages/ui/src/components/base/inputs/NativeDateInput.vue
new file mode 100644
index 0000000000..95e452031a
--- /dev/null
+++ b/packages/ui/src/components/base/inputs/NativeDateInput.vue
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/ui/src/components/base/inputs/StyledInput.vue b/packages/ui/src/components/base/inputs/StyledInput.vue
new file mode 100644
index 0000000000..e2c4131b4d
--- /dev/null
+++ b/packages/ui/src/components/base/inputs/StyledInput.vue
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/ui/src/components/base/inputs/StyledTextarea.vue b/packages/ui/src/components/base/inputs/StyledTextarea.vue
new file mode 100644
index 0000000000..32749d0fc0
--- /dev/null
+++ b/packages/ui/src/components/base/inputs/StyledTextarea.vue
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/ui/src/components/base/inputs/index.ts b/packages/ui/src/components/base/inputs/index.ts
new file mode 100644
index 0000000000..3d504c56ff
--- /dev/null
+++ b/packages/ui/src/components/base/inputs/index.ts
@@ -0,0 +1,7 @@
+export { default as DatePicker } from './DatePicker.vue'
+export { default as InputClearButton } from './InputClearButton.vue'
+export { default as InputFrame } from './InputFrame.vue'
+export { default as NativeDateInput } from './NativeDateInput.vue'
+export { default as StyledInput } from './StyledInput.vue'
+export { default as StyledTextarea } from './StyledTextarea.vue'
+export type { InputAppearance, InputSize } from './types'
diff --git a/packages/ui/src/components/base/inputs/types.ts b/packages/ui/src/components/base/inputs/types.ts
new file mode 100644
index 0000000000..a1fa179fb1
--- /dev/null
+++ b/packages/ui/src/components/base/inputs/types.ts
@@ -0,0 +1,2 @@
+export type InputAppearance = 'button' | 'surface' | 'transparent'
+export type InputSize = 'small' | 'standard' | 'medium' | 'large'
diff --git a/packages/ui/src/components/billing/PurchaseModal.vue b/packages/ui/src/components/billing/PurchaseModal.vue
index d1753d10a0..3e0230fb5a 100644
--- a/packages/ui/src/components/billing/PurchaseModal.vue
+++ b/packages/ui/src/components/billing/PurchaseModal.vue
@@ -477,7 +477,7 @@ import Admonition from '../base/Admonition.vue'
import Checkbox from '../base/Checkbox.vue'
import Combobox from '../base/Combobox.vue'
import Slider from '../base/Slider.vue'
-import StyledInput from '../base/StyledInput.vue'
+import StyledInput from '../base/inputs/StyledInput.vue'
import AnimatedLogo from '../brand/AnimatedLogo.vue'
import NewModal from '../modal/NewModal.vue'
import LoaderIcon from '../servers/icons/LoaderIcon.vue'
diff --git a/packages/ui/src/components/content/CollectionWidget.vue b/packages/ui/src/components/content/CollectionWidget.vue
index a7e5608f16..1d9a62a315 100644
--- a/packages/ui/src/components/content/CollectionWidget.vue
+++ b/packages/ui/src/components/content/CollectionWidget.vue
@@ -10,7 +10,7 @@ import { defineMessages, useVIntl } from '../../composables/i18n'
import { injectModrinthClient } from '../../providers/api-client'
import AutoLink from '../base/AutoLink.vue'
import Avatar from '../base/Avatar.vue'
-import StyledInput from '../base/StyledInput.vue'
+import StyledInput from '../base/inputs/StyledInput.vue'
const { formatMessage } = useVIntl()
const { formatCompactNumber } = useCompactNumber()
@@ -109,7 +109,7 @@ const messages = defineMessages({
v-if="(projects?.length ?? 0) > 5"
v-model="query"
:placeholder="formatMessage(messages.searchPlaceholder)"
- input-class="bg-transparent !rounded-l-none !rounded-b-none m-1"
+ wrapper-class="m-1 !rounded-l-none !rounded-b-none !bg-transparent"
:icon="SearchIcon"
:disabled="isLoadingCollection || isLoadingProjects"
/>
diff --git a/packages/ui/src/components/external_files/AddFilesToAttributionGroupModal.vue b/packages/ui/src/components/external_files/AddFilesToAttributionGroupModal.vue
index fc94cf5af1..e1340b4bc7 100644
--- a/packages/ui/src/components/external_files/AddFilesToAttributionGroupModal.vue
+++ b/packages/ui/src/components/external_files/AddFilesToAttributionGroupModal.vue
@@ -197,7 +197,7 @@ defineExpose({ show, hide })
:placeholder="formatMessage(messages.addFilesModalSearchPlaceholder)"
:icon="SearchIcon"
:disabled="pending"
- input-class="h-[40px]"
+ size="medium"
class="sticky top-0"
clearable
/>
diff --git a/packages/ui/src/components/external_files/AddToGlobalPermissionsDatabaseModal.vue b/packages/ui/src/components/external_files/AddToGlobalPermissionsDatabaseModal.vue
index c3a55d80d0..ab28b571a9 100644
--- a/packages/ui/src/components/external_files/AddToGlobalPermissionsDatabaseModal.vue
+++ b/packages/ui/src/components/external_files/AddToGlobalPermissionsDatabaseModal.vue
@@ -11,6 +11,7 @@ import {
type ComboboxOption,
NewModal,
StyledInput,
+ StyledTextarea,
} from '#ui/components'
import { injectModrinthClient, injectNotificationManager } from '../../providers'
@@ -175,7 +176,7 @@ defineExpose({ show, hide })
v-model="flameProjectId"
type="text"
placeholder="1234567"
- input-class="h-[40px]"
+ size="medium"
:disabled="createMutation.isPending.value"
/>