Termeh based component for vue 3.
You must import and register components manually.
This package published as vTermeh
module in umd.
<script src="https://unpkg.com/@termehui/vtermeh"></script>
npm i @termehui/vtermeh
Choose component. You can set default slot to change default item template.
<template>
<vChoose :items="items" v-model="item">
<template #default="{ item, failed, disabled }">
{{ item == "first" ? "1th" : item == "second" ? "2th" : item }}
</template>
</vChoose>
</template>
<script lang="ts" setup>
import { vChoose } from "@termehui/vtermeh";
const items = ref(["first", "second", "third"]);
const item = ref("");
</script>
<style lang="scss">
@import "@termehui/vtermeh/choose.scss";
@import "@termehui/vtermeh/dist/choose.scss"; // old node version
</style>
Property | Type | Description |
---|---|---|
items | Array |
List of items |
disabled | Boolean |
disabled state |
failed | Boolean |
failed state (error) |
identifier | String |
id field of item, empty identifier for non-object items |
Choose component have following classes:
- is-stacked: set choose direction as vertical.
- is-{device}-stacked: set choose direction as vertical for device.
- is-{size}: set choose size to size.
- is-{color}: set choose color to registered iterable colors.
variable | description | default |
---|---|---|
sizes | list of non-iterable sizes to include in choose sizes | () |
Responsive columns generator.
Note: child items must have column-item
class and data-priority
attribute.
Note: this component does not support dynamic fields.
Note: you can use update
exposed function to manually update layout.
<template>
<vColumns>
<div
v-for="(v, i) in items"
:key="i"
class="column-item"
:data-priority="i + 1"
>
{{ v }}
</div>
<div class="column-item" data-priority="0">AA</div>
</vColumns>
</template>
<script lang="ts" setup>
import { vColumns } from "@termehui/vtermeh";
import { ref } from "vue";
const items = ref(["hi", "a", "b", "c"]);
</script>
<style lang="scss">
@import "@termehui/vtermeh/columns.scss";
@import "@termehui/vtermeh/dist/columns.scss"; // old node version
</style>
Property | Type | Description | Default |
---|---|---|---|
mobile | number |
column count on mobile device | 1 |
tablet | number |
column count on tablet device | 2 |
desktop | number |
column count on desktop device | 3 |
wide | number |
column count on wide device and higher | 4 |
mobileQ | string |
query string for mobile | "screen and (max-width: 768px)" |
desktopQ | string |
query string for desktop | "screen and (min-width: 1024px)" |
wideQ | string |
query string for wide | "screen and (min-width: 1408px)" |
Columns component have following classes:
- is-gapless: remove gap between columns.
- is-{gap}-gaped: set options gap to registered iterable gaps.
variable | description | default |
---|---|---|
gaps | list of non-iterable gaps to include in columns gaps | () |
Dropdown component.
<template>
<vDropdown :items="items" v-model="item" v-model:searchValue="search">
<template #icon="{ isEmpty, isOpen, isFiltered, failed, disabled }">
Icon
</template>
<template #selected="{ item, failed, disabled }"> Single item </template>
<template #selected="{ item, remove, failed, disabled }">
Multi Select items
</template>
<template #action="{ isEmpty, isOpen, isFiltered, failed, disabled }">
action
</template>
<template #menu="{ isEmpty, isOpen, isFiltered, failed, disabled }">
<div class="item" v-if="isFiltered">Add new</div>
</template>
<template #default="{ id, selected, active, failed, disabled, item }">
Menu Item
</template>
</vDropdown>
</template>
<script lang="ts" setup>
import { vDropdown } from "@termehui/vtermeh";
const items = ref([{...}, {...}]);
const item = ref();
</script>
<style lang="scss">
@import "@termehui/vtermeh/dropdown.scss";
@import "@termehui/vtermeh/dist/dropdown.scss"; // old node version
</style>
Note: if you return true from key handler function, default dropdown keyboard handler not fired!
Note: you can use close
and open
exposed function to manually close dropdown.
Property | Type | default | Description |
---|---|---|---|
search | Boolean |
false |
allow search |
delete | Boolean |
true |
allow delete item with ctrl+backspace |
autoClose | Boolean |
true |
close dropdown after select on single mode |
multiple | Boolean |
false |
allow multiple selection |
disabled | Boolean |
false |
disabled state |
failed | Boolean |
false |
failed state (error) |
placeholder | String |
'Select' |
placeholder text |
identifier | String |
'' |
id field of item, empty identifier for non-object items |
items | Array |
[] |
items list |
searchValue | String |
'' |
search model value |
modelValue | any |
undefined |
model value |
keyHandler | (e: KeyboardEvent, selected: unknown) => boolean |
undefined |
custom keyboard handler |
Field wrapper component (based on termeh form field).
<template>
<vField
:errors="errors"
:messages="messages"
label="Enter name"
help="enter your full name"
default="name is invalid"
:required="true"
:fit="true"
>
<template #default="{ id }">
<div class="input">
<input :id="id" v-model="name" />
</div>
</template>
</vField>
</template>
<script lang="ts" setup>
import { vField } from "@termehui/vtermeh";
</script>
<style lang="scss">
@import "@termehui/vtermeh/field.scss";
@import "@termehui/vtermeh/dist/field.scss"; // old node version
</style>
Property | Type | Description | |
---|---|---|---|
errors | `Array | Object` | list of error keys or error with message |
messages | Object |
list of error messages (can override default error message) | |
label | string |
label text | |
help | string |
help text | |
default | string |
default error message | |
required | bool |
mark field as required | |
fit | bool |
add is-marginless to field |
File upload with preview. You can get selected files from @select
event.
Note: You can call clear
inner method to clear input (e.g. refVar.value.clear()
);
<template>
<vFileUpload
:multiple="true"
accept="image-*"
:icons="{ '.*/x-zip.*': 'zip.png', '*': 'default.png' }"
@select="log_file_list"
>
<template #thumbnails>
<img src="default thumb.jpg" />
</template>
<template v-slot="{ count }">
<div v-if="count == 0">Please select image</div>
<div v-else>{{ count }} Image</div>
</template>
</vFileUpload>
</template>
<script lang="ts" setup>
import { vFileUpload } from "@termehui/vtermeh";
const page = ref(0);
</script>
<style lang="scss">
@import "@termehui/vtermeh/file-upload.scss";
@import "@termehui/vtermeh/dist/file-upload.scss"; // old node version
</style>
Property | Type | Description |
---|---|---|
multiple | boolean |
allow select multiple file |
accept | string |
accept pattern |
icons | object |
key/value object of file type pattern (regex or * for default) with icon path |
File upload component use default termeh .input
for styling.
variable | description | default |
---|---|---|
width | thumbnail icon width | 4em |
height | thumbnail icon height | 4em |
opacity | hover state opacity | 0.1 |
You must use "file-upload"
as component name for overriding variable in termeh.
Icon toggle component. you must set icon
and active
slot to set different state icons.
<template>
<vIconToggle v-model="selected" class="is-large is-primary">
<template #icon>
<Star />
</template>
<template #active>
<StarFill />
</template>
</vIconToggle>
</template>
<script lang="ts" setup>
import { vIconToggle } from "@termehui/vtermeh";
const selected = ref(false);
</script>
<style lang="scss">
@import "@termehui/vtermeh/icon-toggle.scss";
@import "@termehui/vtermeh/dist/icon-toggle.scss"; // old node version
</style>
Icon toggle follow icon styling.
Create jalaali date picker input.
Caution: you must install vue3-persian-datetime-picker
and register component as v3-datetime-picker
to make date picker work!
Note: you must set picker color using color
option on register time or color property.
<template>
<vJalaaliPicker v-model="jalaali" type="datetime" />
<br />
<vJalaaliPicker v-model="jalaali" :icon="true">
<template #icon="{ show }">
<div class="button is-primary" @click="show()">Select</div>
</template>
</vJalaaliPicker>
<br />
<vJalaaliPicker v-model="jalaalies" :range="true" clear="CLS" />
<br />
<vJalaaliPicker
v-model="jalaalies"
:multiple="true"
:icon="true"
clear="CLEAR"
/>
</template>
<script lang="ts" setup>
import { vJalaaliPicker } from "@termehui/vtermeh";
const jalaali = ref();
const jalaalies = ref([]);
</script>
<style lang="scss">
@import "@termehui/vtermeh/jalaali-picker.scss";
@import "@termehui/vtermeh/dist/jalaali-picker.scss"; // old node version
</style>
Property | Type | Description |
---|---|---|
rtl | Boolean |
make input layout rtl |
range | Boolean |
allow select date range |
multiple | Boolean |
allow select multiple date |
icon | Boolean |
make action date picker (no input field) date |
inputMode | String |
input mode, default to numeric |
colorClass | String |
set elements color (icon, input, button), default to primary |
placeholder | String |
input placeholder text |
clear | String |
set clear button title and enable clearing from dialog |
closeOnClear | Boolean |
close date picker by clear button |
editable | Boolean |
allow edit , default false |
Note: this component accept all vue3-persian-datetime-picker
properties.
Jalaali picker component have following slots:
<template>
<vJalaaliPicker>
<!-- only in non-icon mode for add extra content to input -->
<template #input="{ show, clear }"></template>
<!-- input calendar icon in non-icon and action icon in icon mode -->
<template #input="{ show }"></template>
</vJalaaliPicker>
</template>
options component. You can set default slot to change default item template.
<template>
<vOptions :items="items" v-model="item">
<template #default="{ item, disabled }">
{{ item == "first" ? "1th" : item == "second" ? "2th" : item }}
</template>
</vOptions>
</template>
<script lang="ts" setup>
import { vOptions } from "@termehui/vtermeh";
const items = ref(["first", "second", "third"]);
const item = ref("");
</script>
<style lang="scss">
@import "@termehui/vtermeh/options.scss";
@import "@termehui/vtermeh/dist/options.scss"; // old node version
</style>
Property | Type | Description |
---|---|---|
items | Array |
List of items |
identifier | String | id field of item, empty identifier for non-object items |
disabled | Boolean | disabled state |
multiple | Boolean | allow multiple selection |
Options component have following classes:
- is-gapless: remove item gaps.
- is-{gap}-gaped: set options gap to registered iterable gaps.
- is-{color}: set options color to registered iterable colors.
variable | description | default |
---|---|---|
gaps | list of non-iterable gaps to include in option gaps | () |
Pagination component. You can fill default slot for change template of empty pagination.
<template>
<vPagination :count="5" :total="23" v-model="page"> No Records </vPagination>
</template>
<script lang="ts" setup>
import { vPagination } from "@termehui/vtermeh";
const page = ref(0);
</script>
<style lang="scss">
@import "@termehui/vtermeh/pagination.scss";
@import "@termehui/vtermeh/dist/pagination.scss"; // old node version
</style>
Property | Type | Description |
---|---|---|
count | number |
number of pagination buttons |
total | number |
total page count |
pagination component have following classes:
- is-flat: remove paginator border and paddings.
- is-disabled: disable pagination component.
- is-rounded: make page buttons corner round.
- is-{color}: set pagination color to registered iterable colors.
variable | description | default |
---|---|---|
colors | list of non-iterable colors to include in pagination colors | () |
Pie chart component. You can fill default slot to set label content.
<template>
<vPie :percent="75" class="is-primary">
<span>Interaction percent</span>
</vPie>
</template>
<script lang="ts" setup>
import { vPie } from "@termehui/vtermeh";
</script>
<style lang="scss">
@import "@termehui/vtermeh/pie.scss";
@import "@termehui/vtermeh/dist/pie.scss"; // old node version
</style>
Property | Type | Description |
---|---|---|
percent | number |
chart fill percent |
pie component have following classes:
- is-{color}: set pie color to registered iterable colors.
variable | description | default |
---|---|---|
sizes | list of pie sizes ("small" 10em, "medium" 20em) |
() |
colors | list of non-iterable colors to include in pie colors | () |
Simple pagination component. You can fill default
slot for change template of empty pagination. pagination contains prev-icon
and next-icon
slots to change pagination icons.
<template>
<vSimplePagination :total="23" v-model="page" next="Go Next" prev="Go Prev">
<template #prev-icon>...</template>
<template #next-icon>...</template>
<template #default> No Records </template>
</vSimplePagination>
</template>
<script lang="ts" setup>
import { vPagination } from "@termehui/vtermeh";
const page = ref(0);
</script>
<style lang="scss">
@import "@termehui/vtermeh/simple-pagination.scss";
@import "@termehui/vtermeh/dist/simple-pagination.scss"; // old node version
</style>
Property | Type | Description |
---|---|---|
total | Number |
total page count |
prev | String |
prev button text |
next | String |
next button text |
pagination component have following classes:
- is-disabled: disable pagination component.
- is-{color}: set pagination color to registered iterable colors.
variable | description | default |
---|---|---|
colors | list of non-iterable colors to include in pagination colors | () |
Tab component.
<template>
<vTab class="is-large-padded is-primary" v-model:tab="tab" animation="slide">
<template #tabs="{ style }">
<div class="tab" :class="style('A')" @click="tab = 'A'">A</div>
<div class="tab" :class="style('B')" @click="tab = 'B'">B</div>
<div class="tab" :class="style('C')" @click="tab = 'C'">C</div>
</template>
<template #A>A Content</template>
<template #B>B Content</template>
<template #C>C Content</template>
</vTab>
</template>
Property | Type | Description |
---|---|---|
animation | String |
tab animation. contains slide animation by default. custom animation style must defined |
tab | String |
active tab name |
tab component have following events:
Property | Description |
---|---|
changed | called when tab changed and animation completed |
tab component have following classes:
- is-centered: center aligned tab content.
- is-paddingless: remove tab content padding.
- is-{gap}-padded: set tab content padding.
- is-{color}: set tab header color.
variable | description | default |
---|---|---|
gaps | list of non-iterable gaps to include in tab gaps | () |
colors | list of non-iterable colors to include in tab colors | () |
Create optimized tile layout.
Caution: if your content size changed you must call update()
method on tile component.
<template>
<vTile ref="el" class="is-large-gaped" :horizontalOrder="false">
<div class="tile is-2">...</div>
<div class="tile">...</div>
<div class="tile">...</div>
<div class="tile">...</div>
<div class="tile">...</div>
<div class="tile">...</div>
<div class="tile">...</div>
</vTile>
</template>
Property | Type | Description |
---|---|---|
rtl | Boolean |
generate rtl layout |
horizontalOrder | Boolean |
lays out items to (mostly) maintain horizontal order |
originTop | Boolean |
attach items to top |
tile component have following classes:
- is-{gap}-gaped: set tile items gap to registered iterable gaps.
- is-{column}: set tile item width to column. e.g.
tile is-2
variable | description | default |
---|---|---|
columns | tiles column count | 3 |
gaps | list of non-iterable gaps to include in tile gaps | () |
Toggle component. You can fill default slot to change label content.
<template>
<vToggle :disabled="false" v-model="isEnabled">Reporting Service</vToggle>
</template>
<script lang="ts" setup>
import { vToggle } from "@termehui/vtermeh";
const isEnabled = ref(true);
</script>
<style lang="scss">
@import "@termehui/vtermeh/toggle.scss";
@import "@termehui/vtermeh/dist/toggle.scss"; // old node version
</style>
Property | Type | Description |
---|---|---|
disabled | boolean |
disable toggle control |
toggle component have following classes:
- is-rounded: make page buttons corner round.
- is-{color}: set toggle color to registered iterable colors.
variable | description | default |
---|---|---|
colors | list of non-iterable colors to include in toggle colors | () |
Persian currency (تومان) component with icon.
<template>
<vToman :value="1200000" class="is-primary" />
<h6>
<vToman :value="9310500" class="is-error" />
</h6>
</template>
<script lang="ts" setup>
import { vToman } from "@termehui/vtermeh";
</script>
<style lang="scss">
@import "@termehui/vtermeh/toman.scss";
@import "@termehui/vtermeh/dist/toman.scss"; // old node version
</style>
Property | Type | Description |
---|---|---|
items | Array |
List of items |
disabled | Boolean |
disabled state |
failed | Boolean |
failed state (error) |
identifier | String |
id field of item, empty identifier for non-object items |
Toman component have following classes:
- is-{color}: set toman color to registered iterable colors.
variable | description | default |
---|---|---|
sizes | list of non-iterable sizes to include in choose sizes | () |