@creatiwity/datatable
| Install | |
|---|---|
npm install @creatiwity/datatable |
|
| Latest Version: | 2.1.0 |
| Vue: | 3 |
| License: | MIT |
| Last Updated: | Mar 10, 2026 |
| Links: | GitHub · npm |
Creat Datatable
:warning: This package is under development stay tuned. :warning:
Nuxt3 Typescript Simple Datatable that handles dynamic row content with generic typing
Features
- Table
- Generic typing
- Dynamic row content
- Sorting
Quick Setup
- Add
@creatiwity/datatabledependency to your project
# Using pnpm
pnpm add @creatiwity/datatable
# Using yarn
yarn add @creatiwity/datatable
# Using npm
npm install @creatiwity/datatable
- Add
@creatiwity/datatableto themodulessection ofnuxt.config.ts
export default defineNuxtConfig({
modules: ["@creatiwity/datatable"],
});
That's it! You can now use Creat Datatable in your Nuxt app ✨
Usage
const dataTableInfos = {
headers: [
{
id: "name",
label: "Nom",
sortable: false, // default: true
},
],
data: [{ name: "Toto" }, { name: "Tata" }],
};
<CreatDataTable id="creat-datatable" :infos="dataTableInfos" table-class="class">
<template #header-name="category">
<span>{{ category.data.name }}</span>
<input />
</template>
<template #name="category">
<strong>{{ category.data.name }}</strong>
</template>
<template #empty-state>
<p>No data</p>
</template>
</CreatDataTable>
Slots
Sorting Icon Slot
You can customize the sorting icon using the #sorting-icon slot:
<CreatDataTable id="creat-datatable" :infos="dataTableInfos">
<template #sorting-icon="{ direction, headerId }">
<span v-if="direction === 'asc'">↑</span>
<span v-else-if="direction === 'desc'">↓</span>
<span v-else>○</span>
</template>
</CreatDataTable>
Checkbox Slots
You can customize the checkboxes in the header and cells using the #checkbox-header and #checkbox-cell slots:
<CreatDataTable id="creat-datatable" :infos="dataTableInfos" :checkbox-config="{}">
<template #checkbox-header="{ checked, toggleCheckbox }">
<input type="checkbox" :checked="checked" @click="toggleCheckbox" />
</template>
<template #checkbox-cell="{ row, checked, toggleCheckbox }">
<input type="checkbox" :checked="checked" @click="toggleCheckbox" />
</template>
</CreatDataTable>
Pagination Slot
You can customize the pagination using the #pagination slot:
<CreatDataTable id="creat-datatable" :infos="dataTableInfos" :pagination-config="{ itemsPerPage: 5 }">
<template #pagination="{ currentPage, maxPage, changePage }">
<div>
<button @click="changePage(currentPage - 1)" :disabled="currentPage <= 1">Previous</button>
<span>Page {{ currentPage }} of {{ maxPage }}</span>
<button @click="changePage(currentPage + 1)" :disabled="currentPage >= maxPage">Next</button>
</div>
</template>
</CreatDataTable>
Style
To change th and td style
const dataTableInfos = {
headers: [
{
id: "id",
label: "ID",
thClass: "centerth",
},
],
content: [
{
id: "id",
tdClass: "class",
},
],
};
Type
<CreatDataTable type="local" />
By default type is local
Type local will directly change the dataTable data depending on the actions
With the type remote you need to add v-model to control the data change
Sort
<CreatDataTable v-model:sort="sorting" />
const dataTableInfos = {
headers: [
{
id: "firstname",
label: "Prénom",
sortable: true,
},
],
};
const sorting = ref(["firstname", "desc"]);
Set the id you want to sort and the direction desc or asc
Filters
<CreatDataTable
v-model:filters="filtering"
:filters-config="{
class: 'class',
}"
/>
const dataTableInfos = {
headers: [
{
id: "firstname",
label: "Prénom",
filtering: true,
},
],
};
const filtering = ref({});
On input it will return data like this filtering = { "firstname": "j" }
Checkbox
<CreatDataTable
v-model:checkbox="checkbox"
:checkbox-config="{
overFilterMode: 'delete',
class: 'checkboxTest',
}"
/>
overFilterMode is to be used with the filters action, by default it's set to keep so when the checkbox of a line is selected it's doesn't deselect all the checkbox if you are typing in a filter input.
And the mode delete clear all the checkbox if you are typing in a filter input
const checkbox = ref([]);
On checkbox selection the array will look like [{ id: 0, firstname: "John" }, { id: 1, firstname: "Jack" }]
Pagination
<CreatDataTable
:pagination-config="{
itemsPerPage: 5,
currentPage: 1,
nbItems: 20,
paginationClass: 'class',
previousButtonClass: 'class',
nextButtonClass: 'class',
}"
:on-page-change="(page) => console.log('new page index = ', page)"
/>
Related Packages
This is a Nuxt 3 compatible module built with the official Nuxt 3 (module-builde...
Version History
| Version | Released | Vue | License |
|---|---|---|---|
| 2.1.0 | ^3.0 | MIT | |
| 2.0.1 | ^3.0 | MIT | |
| 2.0.0 | ^3.0 | MIT | |
| 1.0.26 | ^3.0 | MIT | |
| 1.0.25 | ^3.0 | MIT | |
| 1.0.24 | ^3.0 | MIT | |
| 1.0.23 | ^3.0 | MIT | |
| 1.0.22 | ^3.0 | MIT | |
| 1.0.21 | ^3.0 | MIT | |
| 1.0.20 | ^3.0 | MIT | |
| 1.0.19 | ^3.0 | MIT | |
| 1.0.18 | ^3.0 | MIT | |
| 1.0.17 | ^3.0 | MIT | |
| 1.0.16 | ^3.0 | MIT | |
| 1.0.15 | ^3.0 | MIT | |
| 1.0.14 | ^3.0 | MIT | |
| 1.0.13 | ^3.0 | MIT | |
| 1.0.12 | ^3.0 | MIT | |
| 1.0.10 | ^3.0 | MIT | |
| 1.0.9 | ^3.0 | MIT | |
| 1.0.8 | ^3.0 | MIT | |
| 1.0.7 | ^3.0 | MIT | |
| 1.0.6 | ^3.0 | MIT | |
| 1.0.5 | ^3.0 | MIT | |
| 1.0.4 | ^3.0 | MIT | |
| 1.0.3 | ^3.0 | MIT | |
| 1.0.2 | ^3.0 | MIT | |
| 1.0.1 | ^3.0 | MIT |