<script setup lang="ts">
import { ref } from 'vue'
import { mdiInformationOutline } from '@mdi/js'
import { mdiAccount } from '@mdi/js'
import 'revuekitz/dist/style.css'
// buttons(3)
import { BasicButton } from 'revuekitz'
import { LinkButton } from 'revuekitz'
import { PushButton } from 'revuekitz'
// displays(7)
import { CardFlame } from 'revuekitz'
import { ChipText } from 'revuekitz'
import { LoadingLoader } from 'revuekitz'
import { ModalDialog } from 'revuekitz'
import { PageTitle } from 'revuekitz'
import { TabPanel } from 'revuekitz'
import { ToolTip } from 'revuekitz'
// fields(12)
import { CheckBoxField } from 'revuekitz'
import { ColorField } from 'revuekitz'
import { DateField } from 'revuekitz'
import { FileField } from 'revuekitz'
import { MoneyField } from 'revuekitz'
import { NumberField } from 'revuekitz'
import { RadioField } from 'revuekitz'
import { RangeField } from 'revuekitz'
import { SelectField } from 'revuekitz'
import { TextField } from 'revuekitz'
import { MultiLineField } from 'revuekitz'
import { ToggleSwitch } from 'revuekitz'
// icons(2)
import { ImgIcon } from 'revuekitz'
import { SvgIcon } from 'revuekitz'
// layouts(7)
import { GridColumn } from 'revuekitz'
import { GridRow } from 'revuekitz'
import { LayoutFooter } from 'revuekitz'
import { LayoutHeader } from 'revuekitz'
import { LayoutWrapper } from 'revuekitz'
import { NavBar } from 'revuekitz'
import { NavBarItem } from 'revuekitz'
// lists(5)
import { AccordionMenu } from 'revuekitz'
import { BasicList } from 'revuekitz'
import { BreadcrumbList } from 'revuekitz'
import { PaginateList } from 'revuekitz'
import { TreeList } from 'revuekitz'
// tables(1)
import { DataTable } from 'revuekitz'
/*======Fields:start=====*/
const text = ref('text')
const text2 = ref('text2')
const numberValue = ref(100)
const moneyValue = ref(50)
const checkedItem = ref('')
const radioCheckedItem = ref('Option 1')
const selectedItem = ref('A')
const rangeValue = ref('')
const rangeItems = ref(['Option 1', 'Option 2', 'Option 3'])
const fileData = ref(null)
const selectedColor = ref('')
const dateValue = ref('')
const toggleSwitchChecked = ref(false)
const getFileData = (targetFile: { name: null }) => {
console.log(targetFile)
fileData.value = targetFile.name
}
/*======Fields:end=====*/
/*======PaginateList:start=====*/
const items = ref([
{ id: 1, name_en: 'coffee' },
{ id: 2, name_en: 'espresso' },
{ id: 3, name_en: 'cappuccino' },
{ id: 4, name_en: 'mocha' },
{ id: 5, name_en: 'tea' },
{ id: 6, name_en: 'sandwich' },
{ id: 7, name_en: 'hotdog' },
{ id: 8, name_en: 'omelette' },
{ id: 9, name_en: 'salad' },
{ id: 10, name_en: 'curry' }
])
const displayItems = ref([])
const getDispItems = (dispArray: never[]) => {
displayItems.value = dispArray
}
/*======PaginateList:end=====*/
/*======NavBar:start======*/
const navBarVisible = ref(false)
const showNavBar = () => {
navBarVisible.value = true
}
const closeNavBar = () => {
navBarVisible.value = false
}
/*======NavBar:end======*/
/*======Modal:start=====*/
const isModalVisible = ref(false)
const toggleModal = () => {
isModalVisible.value = !isModalVisible.value
}
const closeModal = () => {
isModalVisible.value = false
}
/*=======Modal:end======*/
/*======DataTable:start=====*/
const tableItems = ref([
{ date: '2024-01-01', title: 'Title 1', content: 'Content 1', author: 'Author 1' },
{ date: '2024-01-02', title: 'Title 2', content: 'Content 2', author: 'Author 2' },
{ date: '2024-01-03', title: 'Title 3', content: 'Content 3', author: 'Author 3' },
{ date: '2024-01-04', title: 'Title 4', content: 'Content 4', author: 'Author 4' },
{ date: '2024-01-05', title: 'Title 5', content: 'Content 5', author: 'Author 5' }
])
</script>
<template>
<LayoutWrapper width="1024">
<PageTitle>RevueKitz</PageTitle>
<TabPanel
style="height: 100vh"
:tabs="['buttons', 'displays', 'fields', 'icons', 'layouts', 'lists', 'tables']"
>
<template v-slot:content0>
<section>
<h2 class="mb-3">buttons</h2>
<div>
<div style="margin-top: 15px; margin-bottom: 15px">
<h3 class="mr-2">BasicButton</h3>
<BasicButton
id="basicButtonId"
class="basic-button-class"
name="basic_button_name"
type="submit"
:style="{ color: 'white', backgroundColor: 'blue' }"
:styleReset="false"
:isDisabled="false"
>
BasicButton
</BasicButton>
</div>
</div>
<div>
<div style="margin-top: 15px; margin-bottom: 15px">
<h3 class="mr-2">LinkButton</h3>
<LinkButton
id="linkButtonId"
class="link-button-class"
name="link_button_name"
:style="{ backgroundColor: 'tomato' }"
fontColor="white"
:styleReset="false"
:isDisabled="true"
onclick="alert('hello')"
>LinkButton</LinkButton
>
</div>
</div>
<div style="margin-top: 15px; margin-bottom: 15px">
<h3 class="mr-2">PushButton</h3>
<PushButton
id="pushButtonId"
class="push-button-class"
name="push_button_name"
type="button"
:style="{ color: 'white', backgroundColor: 'bisque' }"
:styleReset="false"
:isDisabled="false"
onclick="alert('hello')"
>PushButton</PushButton
>
</div>
</section>
</template>
<template v-slot:content1>
<section>
<h3>Card</h3>
<CardFlame
id="cardFlameId"
class="card-flame-class"
:style="'background-color: lightgray; width:250px'"
title="title"
subtitle="subtitle"
>
<p>Enter the content of the card here.</p>
</CardFlame>
</section>
<section>
<h3>ChipText</h3>
<div style="margin-top: 15px; margin-bottom: 15px">
<ChipText
id="chipTextId"
class="chip-text-class"
:style="'background-color: lightgray;'"
:styleReset="false"
>
<span>vue.js</span>
</ChipText>
</div>
</section>
<section>
<h2>LoadingLoader</h2>
<div>
<small>It shows up during theloading state when mounting.</small>
<LoadingLoader>
<div class="loading_text">LoadingLoader</div>
</LoadingLoader>
</div>
</section>
<section>
<h3>Modal</h3>
<div style="margin-top: 15px; margin-bottom: 15px">
<ModalDialog
id="modal-dialog-id"
class="modal-dialog-class"
:style="{ border: '2px solid blue' }"
:is-visible="isModalVisible"
@close="closeModal"
>
<p>Display modal content here</p>
</ModalDialog>
<button @click="toggleModal">Open Modal</button>
</div>
</section>
<section>
<h2>page title</h2>
<div>
<PageTitle id="pegeTitleId" class="page-title-class" :style="'color: blue;'">
page title
</PageTitle>
</div>
</section>
<section>
<h2>TabPanel</h2>
<small>This page uses a tab list.</small>
</section>
<section>
<h2>ToolTip</h2>
<div style="margin-top: 15px; margin-bottom: 15px">
<ToolTip>
<template v-slot:toolTipBtn>
<div class="andmore"><button>TEST</button></div>
</template>
<template v-slot:toolTipContent>
<div class="pa-2">TESTNAN</div>
</template>
</ToolTip>
</div>
</section>
</template>
<template v-slot:content2>
<div style="text-align: center">
<small>You can also use required and hidden attributes</small>
</div>
<section>
<h3>CheckBoxField</h3>
<div>
<CheckBoxField
id="checkBoxFieldId"
class="check-box-field-class"
style="color: red"
:styleReset="false"
name="check_box_field_name"
item="check-box-field-item"
label="check-box-field Label"
type="checkbox"
:isChecked="true"
:isDisabled="false"
:isReadonly="false"
v-model:checked="checkedItem"
/>
</div>
<div>{{ checkedItem }}</div>
</section>
<section>
<h3>ColorField</h3>
<div style="margin-top: 15px; margin-bottom: 15px">
<ColorField
id="colorFieldId"
class="color-field-class"
style="border: 1px solid black"
:styleReset="false"
name="color_field_name"
v-model:selected-color="selectedColor"
/>
</div>
<div>{{ selectedColor }}</div>
</section>
<section>
<h3>DateField</h3>
<div style="margin-top: 15px; margin-bottom: 15px">
<DateField
type="date"
id="dateFieldId"
class="date-field-class"
style="border: 1px solid black"
:styleReset="false"
name="date_field_name"
minlength="2024-07-01"
maxlength="2024-07-26"
:isDisabled="false"
:isReadonly="false"
@fileData="dateValue"
/>
</div>
<div>{{ dateValue }}</div>
</section>
<section>
<h3>FileField</h3>
<div style="margin-top: 15px; margin-bottom: 15px">
<FileField @fileData="getFileData" />
</div>
<div>{{ fileData }}</div>
</section>
<section>
<h3>MoneyField</h3>
<div>
<MoneyField
id="moneyFieldId"
class="money-field-class"
style="background-color: blanchedalmond"
name="money_field_name"
:min="100"
:max="100000"
:isDisabled="false"
:isReadonly="false"
v-model:money="moneyValue"
/>
</div>
<div>{{ moneyValue }}</div>
</section>
<section>
<h3>MultiLineField</h3>
<div style="margin-top: 15px; margin-bottom: 15px">
<MultiLineField
id="multiLinesFieldId"
class="multi-lines-field-class"
style="width: 300px"
name="multi_lines_field_name"
valueName="textValue"
:isDisabled="false"
:isReadonly="false"
placeholder="placeholderText"
:maxlength="500"
:rows="3"
:cols="30"
/>
</div>
</section>
<section>
<h3>NumberField</h3>
<div>
<NumberField
id="numberFieldId"
class="number-field-class"
:style="{ backgroundColor: '#f0f0f0', border: '1px solid #ccc' }"
name="number_field_name"
:min="0"
:max="100"
:isDisabled="false"
:isReadonly="false"
v-model:number="numberValue"
/>
</div>
<div>{{ numberValue }}</div>
</section>
<section>
<h3>RadioField</h3>
<div>
<RadioField
:items="rangeItems"
id="radioFieldId"
class="radio-field-class"
style="accent-color: red"
name="radio_field_name"
accentColor="red"
:isDisabled="false"
:isReadonly="false"
v-model:radio="radioCheckedItem"
/>
</div>
<div>{{ radioCheckedItem }}</div>
</section>
<section>
<h3>RangeField</h3>
<div>
<RangeField
id="rangeFieldId"
class="range-field-class"
style="width: 300px"
name="range_field_name"
:initValue="50"
:min="0"
:max="100"
:step="5"
:isDisabled="false"
:isReadonly="false"
v-model:range-value="rangeValue"
/>
</div>
<div>{{ rangeValue }}</div>
</section>
<section>
<h3>SelectField</h3>
<div>
<SelectField v-model:selected-item="selectedItem" />
</div>
<div>{{ selectedItem }}</div>
</section>
<section>
<h3>TextField</h3>
<div>
<TextField
id="textFieldId"
class="text-field-class"
style="width: 300px"
name="text_field_name"
:minlength="5"
:maxlength="10"
:isDisabled="false"
:isReadonly="false"
v-model:binding-value="text"
required
/>
</div>
<div><TextField type="password" v-model:binding-value="text2" /></div>
<div>{{ text }}</div>
<div>{{ text2 }}</div>
</section>
<section>
<h3>ToggleSwitch</h3>
<small>There are S, M, and L sizes available.</small>
<div style="margin-top: 15px; margin-bottom: 15px">
<ToggleSwitch
size="L"
backgroundColor="red"
v-model:binding-value="toggleSwitchChecked"
/>
<div>Checked:{{ toggleSwitchChecked }}</div>
</div>
</section>
</template>
<template v-slot:content3>
<section>
<h2>Img Icon</h2>
<small
>"The icon size can be either '128', '64', '32', or '18'. The default is '64'."</small
>
<div style="display: flex; height: 100px; margin-top: 15px; margin-bottom: 20px">
<ImgIcon
id="imgIconId"
class="img-icon-class"
style="border: 2px solid #000"
imgFile="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100' height='100'><path d='M10 10 H 90 V 90 H 10 Z' /></svg>"
size="64"
alt="Example Image"
/>
</div>
</section>
<section>
<h2>Svg Icon</h2>
<small
>"The icon size can be either '128', '64', '32', or '18'. The default is '64'."</small
>
<div>
<SvgIcon
id="svgIconId"
class="svg-icon--class"
style="color: red"
:path="mdiAccount"
size="64"
/>
</div>
</section>
</template>
<template v-slot:content4>
<section>
<h3>GridRow/GridColumn(Grid System)</h3>
<GridRow>
<GridColumn :lg_cols="3" :cols="6" :sm_cols="12">
<p>Left</p>
</GridColumn>
<GridColumn :lg_cols="3" :cols="6" :sm_cols="12">
<p>Right</p>
</GridColumn>
</GridRow>
</section>
<section>
<h3>LayoutWrapper</h3>
<LayoutWrapper style="border: 1px solid black"> LayoutWrapper Area </LayoutWrapper>
</section>
<section>
<h2>LayoutHeader</h2>
<LayoutHeader>
<h1 class="ml-2">Re:Vue</h1>
<div></div>
</LayoutHeader>
</section>
<section>
<h2>LayoutFooter</h2>
<div style="margin-top: 15px; margin-bottom: 15px">
<LayoutFooter><div>Revue</div></LayoutFooter>
</div>
</section>
<section>
<h2>NavBar</h2>
<div>
<div class="three-lines mr-2" @click="showNavBar">≡</div>
</div>
<div>
<NavBar :isVisible="navBarVisible" @close="closeNavBar">
<NavBarItem to="" :icon="mdiInformationOutline" linkName="TEST" />
</NavBar>
</div>
</section>
</template>
<template v-slot:content5>
<section>
<h2>AccordionMenu</h2>
<div>
<AccordionMenu
id="accordionMenuId"
class="accordion-menu--class"
:style="{ backgroundColor: 'lightgray' }"
:styleReset="false"
:lists="[
{ title: 'リスト1', items: ['aaa', 'bbb', 'ccc'] },
{ title: 'リスト2', items: ['aaa', 'bbb', 'ccc'] }
]"
/>
</div>
</section>
<section>
<h2>Basic Lists</h2>
<div>
<BasicList
id="basicListId"
class="basic-list-class"
:style="{ color: 'black' }"
:styleReset="false"
:items="[
{ id: '1', title: 'Custom Item #1', value: 1, href: '#' },
{ id: '2', title: 'Custom Item #2', value: 2 }
]"
@update:value="(value: any) => console.log(value)"
/>
</div>
</section>
<section>
<h2>BreadcrumbList</h2>
<BreadcrumbList
:items="[
{ href: '/', name: 'home' },
{ href: '/about', name: 'about' },
{ name: 'current page' }
]"
id="breadcrumbListId"
class="breadcrumb-list-class"
:style="{ color: 'tomato' }"
/>
</section>
<section>
<h2>PaginateList</h2>
<div>
<ul>
<li v-for="item in displayItems" :key="item.id">
<span>{{ item.name_en }}</span>
</li>
</ul>
</div>
<div>
<PaginateList
id="paginateListId"
:style="{ color: 'tomato' }"
:items="items"
steps="4"
@handleAction="getDispItems"
/>
</div>
</section>
<section>
<h2>TreeList</h2>
<div style="margin-top: 15px; margin-bottom: 15px">
<TreeList
id="tree-list"
class="custom-tree-list"
:style="{ color: 'black' }"
:styleReset="false"
:grandparents="[
{
id: '1',
title: 'Grandparent #1',
href: 'https://example.com/grandparent',
parents: [
{
id: '1',
title: 'Parent #1',
href: 'https://example.com/parent',
children: [
{
id: '1',
title: 'Child #1',
href: 'https://example.com/child',
items: [
{
id: '1',
title: 'Item #1',
href: 'https://example.com/item1'
},
{
id: '2',
title: 'Item #2',
href: 'https://example.com/item2'
}
]
}
]
}
]
}
]"
/>
</div>
</section>
</template>
<template v-slot:content6>
<section>
<h3>DataTable</h3>
<div style="margin-top: 15px; margin-bottom: 15px">
<DataTable
:search_mode="true"
:pagination_mode="true"
:headers="['Date', 'Title', 'Content', 'Author']"
:items="tableItems"
steps="5"
/>
</div>
</section>
</template>
</TabPanel>
</LayoutWrapper>
</template>
<style>
section {
margin: 20px;
}
</style>