@termehui/vtermeh v1.0.2
vTermeh
Termeh based component for vue 3.
Installation
You must import and register components manually.
CDN
This package published as vTermeh
module in umd.
<script src="https://unpkg.com/@termehui/vtermeh"></script>
NPM
npm i @termehui/vtermeh
Choose
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 | () |
Columns
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
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
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
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 |
FileUpload
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
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.
Jalaali Date Picker
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
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
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
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
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
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 | () |
Tile
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
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 | () |
Toman
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 | () |