SInputHMS
<SInputHMS>
is a input component to fill in "Hour", "Minute", and "Second".
Usage
Import <SInputHMS>
component and pass in :value
props. The value should be an object with hour
, minute
, and second
properties.
<script setup lang="ts">
import { ref } from 'vue'
import SInputHMS from '@globalbrain/sefirot/lib/components/SInputHMS.vue'
const input = ref({
hour: null,
minute: null,
second: null
})
</script>
<template>
<SInputHMS v-model="input" />
</template>
<script setup lang="ts">
import { ref } from 'vue'
import SInputHMS from '@globalbrain/sefirot/lib/components/SInputHMS.vue'
const input = ref({
hour: null,
minute: null,
second: null
})
</script>
<template>
<SInputHMS v-model="input" />
</template>
Props
Here are the list of props you may pass to the component.
:size
Defines the size of the input. The default is small
.
interface Props {
size?: 'mini' | 'small' | 'medium'
}
interface Props {
size?: 'mini' | 'small' | 'medium'
}
<SInputHMS size="small" v-model="..." />
<SInputHMS size="small" v-model="..." />
:label
Defines the label text of the input.
interface Props {
label?: string
}
interface Props {
label?: string
}
<SInputHMS label="Time" v-model="..." />
<SInputHMS label="Time" v-model="..." />
:info
Shows help icon after the label and shows info in a tooltip when the user hovers the label.
interface Props {
info?: string
}
interface Props {
info?: string
}
<SInputHMS
label="Time"
info="Some helpful information."
v-model="..."
/>
<SInputHMS
label="Time"
info="Some helpful information."
v-model="..."
/>
:note
Adds small help text after the label. Best used along with label
prop.
interface Props {
note?: string
}
interface Props {
note?: string
}
<SInputHMS
label="Time"
note="Optional"
v-model="..."
/>
<SInputHMS
label="Time"
note="Optional"
v-model="..."
/>
:placeholder
Defines the placeholder to show when the value is empty. The default is 00:00:00
.
interface Props {
placeholder?: Placeholder
}
interface Placeholder {
hour: string
minute: string
second: string
}
interface Props {
placeholder?: Placeholder
}
interface Placeholder {
hour: string
minute: string
second: string
}
<SInputHMS
:placeholder="{
hour: 18,
minute: 30,
second: 15
}"
v-model="..."
/>
<SInputHMS
:placeholder="{
hour: 18,
minute: 30,
second: 15
}"
v-model="..."
/>
:check-icon
Icon to display at corner right of label. Useful to show the status of a particular input.
import { IconifyIcon } from '@iconify/vue/dist/offline'
import { DefineComponent } from 'vue'
interface Props {
checkIcon?: IconifyIcon | DefineComponent
}
import { IconifyIcon } from '@iconify/vue/dist/offline'
import { DefineComponent } from 'vue'
interface Props {
checkIcon?: IconifyIcon | DefineComponent
}
<SInputHMS :check-icon="IconCheckCircle" v-model="..." />
<SInputHMS :check-icon="IconCheckCircle" v-model="..." />
:check-text
Text to display alongside check-icon
.
interface Props {
checkText?: string
}
interface Props {
checkText?: string
}
<SInputHMS :check-text="Saved" v-model="..." />
<SInputHMS :check-text="Saved" v-model="..." />
:check-color
Defines the color of check-icon
and check-text
. The default is neutral
.
interface Props {
checkColor?: Color
}
type Color =
| 'neutral'
| 'mute'
| 'info'
| 'success'
| 'warning'
| 'danger'
interface Props {
checkColor?: Color
}
type Color =
| 'neutral'
| 'mute'
| 'info'
| 'success'
| 'warning'
| 'danger'
<SInputHMS
:check-icon="IconCheckCircle"
check-text="Uploaded"
check-color="success"
v-model="..."
/>
<SInputHMS
:check-icon="IconCheckCircle"
check-text="Uploaded"
check-color="success"
v-model="..."
/>
:no-hour
Hide the "hour" input.
interface Props {
noHour?: boolean
}
interface Props {
noHour?: boolean
}
<SInputHMS no-hour v-model="..." />
<SInputHMS no-hour v-model="..." />
:no-minute
Hide the "minute" input.
interface Props {
noMinute?: boolean
}
interface Props {
noMinute?: boolean
}
<SInputHMS no-minute v-model="..." />
<SInputHMS no-minute v-model="..." />
:no-second
Hide the "second" input.
interface Props {
noSecond?: boolean
}
interface Props {
noSecond?: boolean
}
<SInputHMS no-second v-model="..." />
<SInputHMS no-second v-model="..." />
:disabled
Mark input as disabled. When this prop is set, users may not be able to focus the element nor trigger any events.
interface Props {
disabled?: boolean
}
interface Props {
disabled?: boolean
}
<SInputHMS disabled v-model="..." />
<SInputHMS disabled v-model="..." />
:value
Sets the input value. When model-value
prop is set (e.g. via v-model
directive), this prop gets ignored.
interface Props {
value?: Value
}
interface Value {
hour: string | null
minute: string | null
second: string | null
}
interface Props {
value?: Value
}
interface Value {
hour: string | null
minute: string | null
second: string | null
}
<SInputHMS :value="value" />
<SInputHMS :value="value" />
:model-value
The v-model
binding for the input.
interface Props {
value?: Value
}
interface Value {
hour: string | null
minute: string | null
second: string | null
}
interface Props {
value?: Value
}
interface Value {
hour: string | null
minute: string | null
second: string | null
}
<SInputHMS v-model="value" />
<SInputHMS v-model="value" />
:validation
The validation object for the input. It accepts Vuelidate like validation object and displays error if there're any.
import { Ref } from 'vue'
interface Props {
validation?: Validatable
}
interface Validatable {
readonly $dirty: boolean
readonly $invalid: boolean
readonly $errors: ValidatableError[]
readonly $touch: () => void
}
interface ValidatableError {
readonly $message: string | Ref<string>
}
import { Ref } from 'vue'
interface Props {
validation?: Validatable
}
interface Validatable {
readonly $dirty: boolean
readonly $invalid: boolean
readonly $errors: ValidatableError[]
readonly $touch: () => void
}
interface ValidatableError {
readonly $message: string | Ref<string>
}
<SInputHMS v-model="..." :validation="validation" />
<SInputHMS v-model="..." :validation="validation" />
:hide-error
Stop showing validation error message even when there are errors. This prop will not prevent the error color from appearing.
interface Props {
hideError?: boolean
}
interface Props {
hideError?: boolean
}
<SInputHMS
v-model="1"
:validation="validation"
hide-error
/>
<SInputHMS
v-model="1"
:validation="validation"
hide-error
/>
Slots
Here are the list of slots you may define within the component.
#info
Same as info
prop. When info
prop and this slot are defined at the same time, this slot will take precedence.
<SInputHMS label="Time" v-model="...">
<template #info>
Learn more about this field <SLink href="...">here</SLink>.
</template>
</SInputHMS>
<SInputHMS label="Time" v-model="...">
<template #info>
Learn more about this field <SLink href="...">here</SLink>.
</template>
</SInputHMS>
Events
Here are the list of events the component may emit.
@update:model-value
Emits when the user selects the item. This event is always emitted together with change
event.
interface Emits {
(e: 'update:model-value', value: Value): void
}
interface Value {
hour: string | null
minute: string | null
second: string | null
}
interface Emits {
(e: 'update:model-value', value: Value): void
}
interface Value {
hour: string | null
minute: string | null
second: string | null
}
@change
Emits when the user selects the item. This event is always emitted together with update:model-value
event.
interface Emits {
(e: 'change', value: Value): void
}
interface Value {
hour: string | null
minute: string | null
second: string | null
}
interface Emits {
(e: 'change', value: Value): void
}
interface Value {
hour: string | null
minute: string | null
second: string | null
}
Styles
You may customize the styles by overriding --input
prefixed CSS variables.
Global input styles
You may customize the various styles of the component via global input related CSS variables. Please refer to Styles: Input Styles page.