mirror of
https://github.com/ArthurDanjou/ui.git
synced 2026-01-28 10:50:40 +01:00
chore: uniformize icons in Button / Input / Select / SelectMenu
Also adds `loading` to `Select` and `SelectMenu`
This commit is contained in:
@@ -166,6 +166,7 @@ export default defineAppConfig({
|
|||||||
},
|
},
|
||||||
select: {
|
select: {
|
||||||
default: {
|
default: {
|
||||||
|
loadingIcon: 'i-octicon-sync-24',
|
||||||
trailingIcon: 'i-octicon-chevron-down-24'
|
trailingIcon: 'i-octicon-chevron-down-24'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -157,6 +157,29 @@ props:
|
|||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
|
### Loading
|
||||||
|
|
||||||
|
Use the `loading` prop to show a loading icon and disable the Input.
|
||||||
|
|
||||||
|
Use the `loading-icon` prop to set a different icon or change it globally in `ui.select.default.loadingIcon`. Defaults to `i-heroicons-arrow-path-20-solid`.
|
||||||
|
|
||||||
|
::component-card
|
||||||
|
---
|
||||||
|
baseProps:
|
||||||
|
name: 'select'
|
||||||
|
options:
|
||||||
|
- 'United States'
|
||||||
|
- 'Canada'
|
||||||
|
- 'Mexico'
|
||||||
|
placeholder: 'Search...'
|
||||||
|
props:
|
||||||
|
loading: true
|
||||||
|
icon: 'i-heroicons-magnifying-glass-20-solid'
|
||||||
|
excludedProps:
|
||||||
|
- icon
|
||||||
|
---
|
||||||
|
::
|
||||||
|
|
||||||
## Props
|
## Props
|
||||||
|
|
||||||
:component-props
|
:component-props
|
||||||
|
|||||||
@@ -162,10 +162,6 @@ const selected = ref(people[0])
|
|||||||
|
|
||||||
### Icon
|
### Icon
|
||||||
|
|
||||||
Use any icon from [Iconify](https://icones.js.org) by setting the `icon` prop by using this pattern: `i-{collection_name}-{icon_name}`.
|
|
||||||
|
|
||||||
Use the `trailing-icon` prop to set a different icon or change it globally in `ui.select.default.trailingIcon`. Defaults to `i-heroicons-chevron-down-20-solid`.
|
|
||||||
|
|
||||||
Use the `selected-icon` prop to set a different icon or change it globally in `ui.selectMenu.default.selectedIcon`. Defaults to `i-heroicons-check-20-solid`.
|
Use the `selected-icon` prop to set a different icon or change it globally in `ui.selectMenu.default.selectedIcon`. Defaults to `i-heroicons-check-20-solid`.
|
||||||
|
|
||||||
::component-card
|
::component-card
|
||||||
@@ -175,16 +171,16 @@ baseProps:
|
|||||||
placeholder: 'Select a person'
|
placeholder: 'Select a person'
|
||||||
options: ['Wade Cooper', 'Arlene Mccoy', 'Devon Webb', 'Tom Cook', 'Tanya Fox', 'Hellen Schmidt', 'Caroline Schultz', 'Mason Heaney', 'Claudie Smitham', 'Emil Schaefer']
|
options: ['Wade Cooper', 'Arlene Mccoy', 'Devon Webb', 'Tom Cook', 'Tanya Fox', 'Hellen Schmidt', 'Caroline Schultz', 'Mason Heaney', 'Claudie Smitham', 'Emil Schaefer']
|
||||||
props:
|
props:
|
||||||
icon: 'i-heroicons-magnifying-glass-20-solid'
|
selectedIcon: 'i-heroicons-hand-thumb-up-solid'
|
||||||
color: 'white'
|
|
||||||
extraColors:
|
|
||||||
- white
|
|
||||||
- gray
|
|
||||||
excludedProps:
|
excludedProps:
|
||||||
- icon
|
- selectedIcon
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
|
::alert{icon="i-heroicons-light-bulb"}
|
||||||
|
Learn how to customize icons from the [Select](/forms/select#icon) component.
|
||||||
|
::
|
||||||
|
|
||||||
### Search
|
### Search
|
||||||
|
|
||||||
Use the `searchable` prop to enable search.
|
Use the `searchable` prop to enable search.
|
||||||
|
|||||||
@@ -399,6 +399,7 @@ const select = {
|
|||||||
size: 'sm',
|
size: 'sm',
|
||||||
color: 'white',
|
color: 'white',
|
||||||
variant: 'outline',
|
variant: 'outline',
|
||||||
|
loadingIcon: 'i-heroicons-arrow-path-20-solid',
|
||||||
trailingIcon: 'i-heroicons-chevron-down-20-solid'
|
trailingIcon: 'i-heroicons-chevron-down-20-solid'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,11 +18,11 @@
|
|||||||
@blur="$emit('blur', $event)"
|
@blur="$emit('blur', $event)"
|
||||||
>
|
>
|
||||||
<slot />
|
<slot />
|
||||||
<div v-if="isLeading && leadingIconName" :class="leadingIconClass">
|
<div v-if="isLeading && leadingIconName" :class="leadingWrapperIconClass">
|
||||||
<UIcon :name="leadingIconName" :class="iconClass" />
|
<UIcon :name="leadingIconName" :class="leadingIconClass" />
|
||||||
</div>
|
</div>
|
||||||
<div v-if="isTrailing && trailingIconName" :class="trailingIconClass">
|
<div v-if="isTrailing && trailingIconName" :class="trailingWrapperIconClass">
|
||||||
<UIcon :name="trailingIconName" :class="iconClass" />
|
<UIcon :name="trailingIconName" :class="trailingIconClass" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -211,7 +211,14 @@ export default defineComponent({
|
|||||||
return props.trailingIcon || props.icon
|
return props.trailingIcon || props.icon
|
||||||
})
|
})
|
||||||
|
|
||||||
const iconClass = computed(() => {
|
const leadingWrapperIconClass = computed(() => {
|
||||||
|
return classNames(
|
||||||
|
ui.value.icon.leading.wrapper,
|
||||||
|
ui.value.icon.leading.padding[props.size]
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
const leadingIconClass = computed(() => {
|
||||||
return classNames(
|
return classNames(
|
||||||
ui.value.icon.base,
|
ui.value.icon.base,
|
||||||
appConfig.ui.colors.includes(props.color) && ui.value.icon.color.replaceAll('{color}', props.color),
|
appConfig.ui.colors.includes(props.color) && ui.value.icon.color.replaceAll('{color}', props.color),
|
||||||
@@ -220,17 +227,19 @@ export default defineComponent({
|
|||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
const leadingIconClass = computed(() => {
|
const trailingWrapperIconClass = computed(() => {
|
||||||
return classNames(
|
return classNames(
|
||||||
ui.value.icon.leading.wrapper,
|
ui.value.icon.trailing.wrapper,
|
||||||
ui.value.icon.leading.padding[props.size]
|
ui.value.icon.trailing.padding[props.size]
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
const trailingIconClass = computed(() => {
|
const trailingIconClass = computed(() => {
|
||||||
return classNames(
|
return classNames(
|
||||||
ui.value.icon.trailing.wrapper,
|
ui.value.icon.base,
|
||||||
ui.value.icon.trailing.padding[props.size]
|
appConfig.ui.colors.includes(props.color) && ui.value.icon.color.replaceAll('{color}', props.color),
|
||||||
|
ui.value.icon.size[props.size],
|
||||||
|
props.loading && !isLeading.value && 'animate-spin'
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -241,11 +250,12 @@ export default defineComponent({
|
|||||||
isLeading,
|
isLeading,
|
||||||
isTrailing,
|
isTrailing,
|
||||||
inputClass,
|
inputClass,
|
||||||
iconClass,
|
|
||||||
leadingIconName,
|
leadingIconName,
|
||||||
leadingIconClass,
|
leadingIconClass,
|
||||||
|
leadingWrapperIconClass,
|
||||||
trailingIconName,
|
trailingIconName,
|
||||||
trailingIconClass,
|
trailingIconClass,
|
||||||
|
trailingWrapperIconClass,
|
||||||
onInput
|
onInput
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
:name="name"
|
:name="name"
|
||||||
:value="modelValue"
|
:value="modelValue"
|
||||||
:required="required"
|
:required="required"
|
||||||
:disabled="disabled"
|
:disabled="disabled || loading"
|
||||||
:class="selectClass"
|
:class="selectClass"
|
||||||
@input="onInput"
|
@input="onInput"
|
||||||
>
|
>
|
||||||
@@ -36,12 +36,12 @@
|
|||||||
</template>
|
</template>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<div v-if="icon" :class="leadingIconClass">
|
<div v-if="isLeading && leadingIconName" :class="leadingWrapperIconClass">
|
||||||
<UIcon :name="icon" :class="iconClass" />
|
<UIcon :name="leadingIconName" :class="leadingIconClass" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span v-if="trailingIcon" :class="trailingIconClass">
|
<span v-if="isTrailing && trailingIconName" :class="trailingWrapperIconClass">
|
||||||
<UIcon :name="trailingIcon" :class="iconClass" aria-hidden="true" />
|
<UIcon :name="trailingIconName" :class="trailingIconClass" aria-hidden="true" />
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -89,18 +89,38 @@ export default defineComponent({
|
|||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null
|
||||||
},
|
},
|
||||||
|
loadingIcon: {
|
||||||
|
type: String,
|
||||||
|
default: () => appConfig.ui.input.default.loadingIcon
|
||||||
|
},
|
||||||
|
leadingIcon: {
|
||||||
|
type: String,
|
||||||
|
default: null
|
||||||
|
},
|
||||||
trailingIcon: {
|
trailingIcon: {
|
||||||
type: String,
|
type: String,
|
||||||
default: () => appConfig.ui.select.default.trailingIcon
|
default: () => appConfig.ui.select.default.trailingIcon
|
||||||
},
|
},
|
||||||
options: {
|
trailing: {
|
||||||
type: Array,
|
type: Boolean,
|
||||||
default: () => []
|
default: false
|
||||||
|
},
|
||||||
|
leading: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
loading: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
},
|
},
|
||||||
padded: {
|
padded: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: true
|
default: true
|
||||||
},
|
},
|
||||||
|
options: {
|
||||||
|
type: Array,
|
||||||
|
default: () => []
|
||||||
|
},
|
||||||
size: {
|
size: {
|
||||||
type: String,
|
type: String,
|
||||||
default: () => appConfig.ui.select.default.size,
|
default: () => appConfig.ui.select.default.size,
|
||||||
@@ -210,43 +230,82 @@ export default defineComponent({
|
|||||||
ui.value.size[props.size],
|
ui.value.size[props.size],
|
||||||
props.padded && ui.value.padding[props.size],
|
props.padded && ui.value.padding[props.size],
|
||||||
variant?.replaceAll('{color}', props.color),
|
variant?.replaceAll('{color}', props.color),
|
||||||
!!props.icon && ui.value.leading.padding[props.size],
|
isLeading.value && ui.value.leading.padding[props.size],
|
||||||
ui.value.trailing.padding[props.size],
|
isTrailing.value && ui.value.trailing.padding[props.size],
|
||||||
ui.value.custom
|
ui.value.custom
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
const iconClass = computed(() => {
|
const isLeading = computed(() => {
|
||||||
return classNames(
|
return (props.icon && props.leading) || (props.icon && !props.trailing) || (props.loading && !props.trailing) || props.leadingIcon
|
||||||
ui.value.icon.base,
|
|
||||||
appConfig.ui.colors.includes(props.color) && ui.value.icon.color.replaceAll('{color}', props.color),
|
|
||||||
ui.value.icon.size[props.size]
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
const leadingIconClass = computed(() => {
|
const isTrailing = computed(() => {
|
||||||
|
return (props.icon && props.trailing) || (props.loading && props.trailing) || props.trailingIcon
|
||||||
|
})
|
||||||
|
|
||||||
|
const leadingIconName = computed(() => {
|
||||||
|
if (props.loading) {
|
||||||
|
return props.loadingIcon
|
||||||
|
}
|
||||||
|
|
||||||
|
return props.leadingIcon || props.icon
|
||||||
|
})
|
||||||
|
|
||||||
|
const trailingIconName = computed(() => {
|
||||||
|
if (props.loading && !isLeading.value) {
|
||||||
|
return props.loadingIcon
|
||||||
|
}
|
||||||
|
|
||||||
|
return props.trailingIcon || props.icon
|
||||||
|
})
|
||||||
|
|
||||||
|
const leadingWrapperIconClass = computed(() => {
|
||||||
return classNames(
|
return classNames(
|
||||||
ui.value.icon.leading.wrapper,
|
ui.value.icon.leading.wrapper,
|
||||||
ui.value.icon.leading.padding[props.size]
|
ui.value.icon.leading.padding[props.size]
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
const trailingIconClass = computed(() => {
|
const leadingIconClass = computed(() => {
|
||||||
|
return classNames(
|
||||||
|
ui.value.icon.base,
|
||||||
|
appConfig.ui.colors.includes(props.color) && ui.value.icon.color.replaceAll('{color}', props.color),
|
||||||
|
ui.value.icon.size[props.size],
|
||||||
|
props.loading && 'animate-spin'
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
const trailingWrapperIconClass = computed(() => {
|
||||||
return classNames(
|
return classNames(
|
||||||
ui.value.icon.trailing.wrapper,
|
ui.value.icon.trailing.wrapper,
|
||||||
ui.value.icon.trailing.padding[props.size]
|
ui.value.icon.trailing.padding[props.size]
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const trailingIconClass = computed(() => {
|
||||||
|
return classNames(
|
||||||
|
ui.value.icon.base,
|
||||||
|
appConfig.ui.colors.includes(props.color) && ui.value.icon.color.replaceAll('{color}', props.color),
|
||||||
|
ui.value.icon.size[props.size],
|
||||||
|
props.loading && !isLeading.value && 'animate-spin'
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
return {
|
return {
|
||||||
// eslint-disable-next-line vue/no-dupe-keys
|
// eslint-disable-next-line vue/no-dupe-keys
|
||||||
ui,
|
ui,
|
||||||
normalizedOptionsWithPlaceholder,
|
normalizedOptionsWithPlaceholder,
|
||||||
normalizedValue,
|
normalizedValue,
|
||||||
|
isLeading,
|
||||||
|
isTrailing,
|
||||||
selectClass,
|
selectClass,
|
||||||
iconClass,
|
leadingIconName,
|
||||||
leadingIconClass,
|
leadingIconClass,
|
||||||
|
leadingWrapperIconClass,
|
||||||
|
trailingIconName,
|
||||||
trailingIconClass,
|
trailingIconClass,
|
||||||
|
trailingWrapperIconClass,
|
||||||
onInput
|
onInput
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,10 +27,10 @@
|
|||||||
role="button"
|
role="button"
|
||||||
class="inline-flex w-full"
|
class="inline-flex w-full"
|
||||||
>
|
>
|
||||||
<slot :open="open" :disabled="disabled">
|
<slot :open="open" :disabled="disabled" :loading="loading">
|
||||||
<button :class="selectMenuClass" :disabled="disabled" type="button">
|
<button :class="selectMenuClass" :disabled="disabled || loading" type="button">
|
||||||
<span v-if="icon" :class="leadingIconClass">
|
<span v-if="isLeading && leadingIconName" :class="leadingWrapperIconClass">
|
||||||
<UIcon :name="icon" :class="iconClass" />
|
<UIcon :name="leadingIconName" :class="leadingIconClass" />
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<slot name="label">
|
<slot name="label">
|
||||||
@@ -39,8 +39,8 @@
|
|||||||
<span v-else class="block truncate" :class="ui.placeholder">{{ placeholder || ' ' }}</span>
|
<span v-else class="block truncate" :class="ui.placeholder">{{ placeholder || ' ' }}</span>
|
||||||
</slot>
|
</slot>
|
||||||
|
|
||||||
<span v-if="trailingIcon" :class="trailingIconClass">
|
<span v-if="isTrailing && trailingIconName" :class="trailingWrapperIconClass">
|
||||||
<UIcon :name="trailingIcon" :class="iconClass" aria-hidden="true" />
|
<UIcon :name="trailingIconName" :class="trailingIconClass" aria-hidden="true" />
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
</slot>
|
</slot>
|
||||||
@@ -167,10 +167,30 @@ export default defineComponent({
|
|||||||
type: String,
|
type: String,
|
||||||
default: null
|
default: null
|
||||||
},
|
},
|
||||||
|
loadingIcon: {
|
||||||
|
type: String,
|
||||||
|
default: () => appConfig.ui.input.default.loadingIcon
|
||||||
|
},
|
||||||
|
leadingIcon: {
|
||||||
|
type: String,
|
||||||
|
default: null
|
||||||
|
},
|
||||||
trailingIcon: {
|
trailingIcon: {
|
||||||
type: String,
|
type: String,
|
||||||
default: () => appConfig.ui.select.default.trailingIcon
|
default: () => appConfig.ui.select.default.trailingIcon
|
||||||
},
|
},
|
||||||
|
trailing: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
leading: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
loading: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
selectedIcon: {
|
selectedIcon: {
|
||||||
type: String,
|
type: String,
|
||||||
default: () => appConfig.ui.selectMenu.default.selectedIcon
|
default: () => appConfig.ui.selectMenu.default.selectedIcon
|
||||||
@@ -274,35 +294,69 @@ export default defineComponent({
|
|||||||
uiSelect.value.gap[props.size],
|
uiSelect.value.gap[props.size],
|
||||||
props.padded && uiSelect.value.padding[props.size],
|
props.padded && uiSelect.value.padding[props.size],
|
||||||
variant?.replaceAll('{color}', props.color),
|
variant?.replaceAll('{color}', props.color),
|
||||||
!!props.icon && uiSelect.value.leading.padding[props.size],
|
isLeading.value && uiSelect.value.leading.padding[props.size],
|
||||||
uiSelect.value.trailing.padding[props.size],
|
isTrailing.value && uiSelect.value.trailing.padding[props.size],
|
||||||
uiSelect.value.custom,
|
uiSelect.value.custom,
|
||||||
'inline-flex items-center'
|
'inline-flex items-center'
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
const iconClass = computed(() => {
|
const isLeading = computed(() => {
|
||||||
return classNames(
|
return (props.icon && props.leading) || (props.icon && !props.trailing) || (props.loading && !props.trailing) || props.leadingIcon
|
||||||
uiSelect.value.icon.base,
|
|
||||||
appConfig.ui.colors.includes(props.color) && uiSelect.value.icon.color.replaceAll('{color}', props.color),
|
|
||||||
uiSelect.value.icon.size[props.size]
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
const leadingIconClass = computed(() => {
|
const isTrailing = computed(() => {
|
||||||
|
return (props.icon && props.trailing) || (props.loading && props.trailing) || props.trailingIcon
|
||||||
|
})
|
||||||
|
|
||||||
|
const leadingIconName = computed(() => {
|
||||||
|
if (props.loading) {
|
||||||
|
return props.loadingIcon
|
||||||
|
}
|
||||||
|
|
||||||
|
return props.leadingIcon || props.icon
|
||||||
|
})
|
||||||
|
|
||||||
|
const trailingIconName = computed(() => {
|
||||||
|
if (props.loading && !isLeading.value) {
|
||||||
|
return props.loadingIcon
|
||||||
|
}
|
||||||
|
|
||||||
|
return props.trailingIcon || props.icon
|
||||||
|
})
|
||||||
|
|
||||||
|
const leadingWrapperIconClass = computed(() => {
|
||||||
return classNames(
|
return classNames(
|
||||||
uiSelect.value.icon.leading.wrapper,
|
uiSelect.value.icon.leading.wrapper,
|
||||||
uiSelect.value.icon.leading.padding[props.size]
|
uiSelect.value.icon.leading.padding[props.size]
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
const trailingIconClass = computed(() => {
|
const leadingIconClass = computed(() => {
|
||||||
|
return classNames(
|
||||||
|
uiSelect.value.icon.base,
|
||||||
|
appConfig.ui.colors.includes(props.color) && uiSelect.value.icon.color.replaceAll('{color}', props.color),
|
||||||
|
uiSelect.value.icon.size[props.size],
|
||||||
|
props.loading && 'animate-spin'
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
const trailingWrapperIconClass = computed(() => {
|
||||||
return classNames(
|
return classNames(
|
||||||
uiSelect.value.icon.trailing.wrapper,
|
uiSelect.value.icon.trailing.wrapper,
|
||||||
uiSelect.value.icon.trailing.padding[props.size]
|
uiSelect.value.icon.trailing.padding[props.size]
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const trailingIconClass = computed(() => {
|
||||||
|
return classNames(
|
||||||
|
uiSelect.value.icon.base,
|
||||||
|
appConfig.ui.colors.includes(props.color) && uiSelect.value.icon.color.replaceAll('{color}', props.color),
|
||||||
|
uiSelect.value.icon.size[props.size],
|
||||||
|
props.loading && !isLeading.value && 'animate-spin'
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
const filteredOptions = computed(() =>
|
const filteredOptions = computed(() =>
|
||||||
query.value === ''
|
query.value === ''
|
||||||
? props.options
|
? props.options
|
||||||
@@ -339,10 +393,15 @@ export default defineComponent({
|
|||||||
ui,
|
ui,
|
||||||
trigger,
|
trigger,
|
||||||
container,
|
container,
|
||||||
|
isLeading,
|
||||||
|
isTrailing,
|
||||||
selectMenuClass,
|
selectMenuClass,
|
||||||
iconClass,
|
leadingIconName,
|
||||||
leadingIconClass,
|
leadingIconClass,
|
||||||
|
leadingWrapperIconClass,
|
||||||
|
trailingIconName,
|
||||||
trailingIconClass,
|
trailingIconClass,
|
||||||
|
trailingWrapperIconClass,
|
||||||
filteredOptions,
|
filteredOptions,
|
||||||
queryOption,
|
queryOption,
|
||||||
query,
|
query,
|
||||||
|
|||||||
Reference in New Issue
Block a user