@benjaminor-dev/quasar-app-extension-datatable
| Install | |
|---|---|
npm install @benjaminor-dev/quasar-app-extension-datatable |
|
| Latest Version: | 0.3.0 |
| Vue: | 3 |
| License: | MIT |
| Last Updated: | Jul 22, 2026 |
| Links: | npm |
DataTable para Quasar
🇺🇸 English | 🇪🇸 Versión en español
Extensão Quasar com DataTable homologado: shell sobre QTable, paginação client/server unificada e cards em viewports < sm.
Índice
- Em 30 segundos
- O que é e o que inclui
- Requisitos e compatibilidade
- Instalação em app Quasar
- O que a extensão adiciona ao host
- Defaults globais (boot)
- Uso rápido
- Idioma (i18n)
- TypeScript no seu IDE
- API do componente
DataTable - Paginação client-side
- Paginação server-side
- Layout móvel (grid / cards)
- Referência compacta
- Entrypoints públicos
- Troubleshooting
Em 30 segundos
- Instale a extensão:
quasar ext add @benjaminor-dev/datatable. - Importe
DataTableno seu componente Vue. - Passe
rows,columns,row-keyev-model:pagination. - Adicione
client-paginationpara paginação integrada no cliente (ouserver-pagination+ emits se você controla o backend).
A extensão registra CSS e um boot de defaults no host automaticamente.
O que é e o que inclui
DataTable é uma camada de apresentação sobre Quasar QTable: shell com borda opcional, barra de paginação (TablePaginationBar) e layout em cards no mobile.
- Paginação client (
client-pagination) ou server (server-pagination+ emits). - Posição da barra:
auto|top|bottom|both(emauto, barra superior só se a página atual mostrar ≥ 15 linhas). - Escala builtin de linhas por página (5…300) e «Todas» quando aplicável.
- Breakpoint móvel compartilhado (
useDataTableGridLayout) — cards em< 600px. - Slot
#itempara cards customizados; card padrão incluído. - Helpers exportáveis para orquestrar paginação em camadas superiores da app.
- i18n integrado
en,es,pt— a barra de paginação segue$q.lang; overrides opcionais no boot (locale,messages).
Requisitos e compatibilidade
| Item | Valor |
|---|---|
| Node | >= 20.0.0 |
| Quasar | ^2.6.0 |
| Vue | ^3.4.18 |
| Formato do pacote | ES modules |
| CLI recomendado | @quasar/app-vite ^2.x ou ^3.x |
Instalação em app Quasar
quasar ext add @benjaminor-dev/datatable
Após quasar ext add, a extensão registra CSS e o boot de defaults automaticamente. Nada extra numa instalação npm normal.
Remover:
quasar ext remove @benjaminor-dev/datatable
Remove o boot de defaults gerado e a entrada em quasar.config. A injeção de estilos pode permanecer se outro pacote instalado registar o mesmo caminho CSS.
O que a extensão adiciona ao host
| Recurso | Caminho no host |
|---|---|
| Estilos | ~@benjaminor-dev/quasar-app-extension-datatable/main.css |
| Boot defaults do host | src/boot/bor/bor-datatable-defaults.ts — criado na instalação; Skip/Overwrite se já existir |
Install (quasar ext add / invoke): cria src/boot/bor/bor-datatable-defaults.ts (ou .js) e registra em quasar.config → boot: [] automaticamente. Sem edição manual numa instalação normal. main.css é injetado em cada dev/build (não aparece como entrada curta em quasar.config).
Remove (quasar ext remove): remove o boot de defaults e a entrada em quasar.config quando a extensão o criou.
Ordem de boots (esta extensão):
1. bor/bor-datatable-defaults (host)
2. resto dos seus boots
Em quasar.config só verá bor/bor-datatable-defaults; main.css é injetado pela extensão ao compilar.
Defaults globais (boot)
Edite src/boot/bor/bor-datatable-defaults.ts após instalar para fixar locale ou override de textos de paginação:
import { configureDataTableDefaults } from "@benjaminor-dev/quasar-app-extension-datatable";
configureDataTableDefaults({
// locale: "pt", // fixa en | es | pt; omitir = segue $q.lang
// messages: { allRows: "Ver todas" },
});
configureDataTable é alias de configureDataTableDefaults. Prioridade: boot locale → $q.lang.isoName → en; boot messages faz merge sobre o catálogo builtin.
Uso rápido
<script setup lang="ts">
import { ref } from "vue";
import DataTable from "@benjaminor-dev/quasar-app-extension-datatable";
import type { ClientTablePaginationState } from "@benjaminor-dev/quasar-app-extension-datatable/types";
const rows = [
{ id: 1, name: "Ana", role: "Admin" },
{ id: 2, name: "Luis", role: "Editor" },
];
const columns = [
{ name: "name", label: "Nome", field: "name", align: "left" as const },
{ name: "role", label: "Função", field: "role", align: "left" as const },
];
const pagination = ref<ClientTablePaginationState>({
sortBy: "name",
descending: false,
page: 1,
rowsPerPage: 10,
});
</script>
<template>
<DataTable
v-model:pagination="pagination"
:rows="rows"
:columns="columns"
row-key="id"
:client-pagination="{ defaultPageSize: 10 }"
/>
</template>
Idioma (i18n)
Integrado en, es e pt. Por padrão a barra de paginação segue o idioma do Quasar ($q.lang.isoName); se o Quasar não tiver idioma, o fallback é en.
Resolução de locale: boot locale → prefixo de $q.lang.isoName (es* → es, pt* → pt) → en.
| Opção | Quando usar |
|---|---|
framework.lang em quasar.config.ts |
Recomendado — alinha DataTable ao resto do Quasar |
locale: 'pt' em boot |
Fixar idioma (en | es | pt); ignora mudanças de $q.lang |
messages: { allRows: '…' } em boot |
Alterar um texto sem fixar locale |
Exemplo em quasar.config.ts (português para toda a app):
framework: {
lang: "pt-BR",
},
Chaves i18n: labels aria de navegação, linhas por página, indicador de página ({page}, {lastPage}), formato de intervalo ({start}, {end}, {total}) e allRows.
TypeScript no seu IDE
Não decore a API: deixe o autocompletar guiar você.
- Importe tipos de
@benjaminor-dev/quasar-app-extension-datatable/types(ou o entry principal para componentes e helpers). - No VS Code / Cursor: Ctrl+Space / Cmd+Space dentro de
client-paginationouserver-paginationpara ver props válidas (DataTableClientPaginationConfig,DataTableServerPaginationConfig). - Passe o cursor sobre props de
<DataTable>: o tooltip mostra JSDoc e tipos do QuasarQTablequando aplicável. v-model:paginationé tipado comoClientTablePaginationState— compatível com o modelo de paginação doQTable.useDataTableGridLayout()retornaRef<boolean>; em templates com TS estrito, usecomputed(() => layoutRef.value)se:gridnão desembrulhar o ref.
Se algo não aparecer no autocompletar, revise o import (/types vs entry principal) antes de buscar no README.
import DataTable, {
useDataTableGridLayout,
buildDynamicRowsPerPageOptions,
} from "@benjaminor-dev/quasar-app-extension-datatable";
import type {
ClientTablePaginationState,
DataTableServerPaginationConfig,
DataTablePaginationPlacement,
} from "@benjaminor-dev/quasar-app-extension-datatable/types";
API do componente DataTable
| Prop | Tipo | Default | Descrição |
|---|---|---|---|
rows |
readonly Record<string, unknown>[] |
— | Linhas a exibir |
columns |
QTableProps['columns'] |
— | Colunas Quasar |
row-key |
string | fn |
— | Chave da linha |
grid |
boolean |
auto | true = cards; false = tabela no mobile; omitido = cards em < sm |
bordered |
boolean |
true |
Borda do shell |
flat |
boolean |
true |
QTable flat |
dense |
boolean |
true |
QTable dense |
client-pagination |
DataTableClientPaginationConfig |
— | Paginação client integrada |
server-pagination |
DataTableServerPaginationConfig |
— | Estado server + barra |
pagination-placement |
DataTablePaginationPlacement |
'auto' |
Posição da barra |
selection |
'single' | 'multiple' |
— | Seleção de linhas |
loading |
boolean |
false |
Estado de carregamento |
hide-pagination |
boolean |
true |
Oculta paginação nativa do QTable |
Emits (modo server): pageSizeChange, first, previous, next, last.
Slots: item (card em grid), top, bottom, slots de coluna padrão do QTable.
Paginação client-side
<DataTable
v-model:pagination="pagination"
:rows="rows"
:columns="columns"
row-key="id"
:client-pagination="{
defaultPageSize: 10,
placement: 'auto',
pageSizeLadder: [5, 10, 25, 50],
}"
/>
- A barra fica oculta se
totalRowsnão superar o primeiro degrau da escala. - Escala builtin: «Todas» quando
5 ≤ total ≤ 100. pageSizeLaddercustom: sem opção «Todas».
Paginação server-side
O pai controla pagination e escuta emits. Passe estado derivado em server-pagination:
import type { DataTableServerPaginationConfig } from "@benjaminor-dev/quasar-app-extension-datatable/types";
const serverPagination = computed<DataTableServerPaginationConfig>(() => ({
totalRows: store.total,
pageSize: store.pageSize,
lastPage: store.lastPage,
pageSizeOptions: store.pageSizeOptions,
rangeLabel: store.rangeLabel,
enabled: store.hasSearched,
}));
Os mesmos helpers (buildDynamicRowsPerPageOptions, resolveDataTablePaginationPlacement, …) são exportáveis deste pacote.
Layout móvel (grid / cards)
Por padrão, viewports ≤ 599px usam layout grid (cards).
<script setup lang="ts">
import { computed } from "vue";
import { useDataTableGridLayout } from "@benjaminor-dev/quasar-app-extension-datatable";
const isMobileGridRef = useDataTableGridLayout();
const isMobileGrid = computed(() => isMobileGridRef.value);
</script>
<template>
<DataTable :grid="isMobileGrid" ... />
</template>
Slot #item para card customizado:
<template #item="props">
<MyCard :row="props.row" :cols="props.cols" />
</template>
Referência compacta
| Símbolo | Entry | Nota |
|---|---|---|
DataTable |
. |
Componente principal (default export) |
TablePaginationBar |
. |
Barra standalone |
useClientTablePagination |
. |
Lógica client + handlers |
useDataTableGridLayout |
. |
Breakpoint móvel (singleton) |
buildDynamicRowsPerPageOptions |
. / /types |
Opções do seletor de tamanho |
resolveDataTablePaginationPlacement |
. / /types |
top / bottom conforme placement |
shouldShowDataTablePaginationBar |
. / /types |
Mostrar barra? |
ClientTablePaginationState |
/types |
v-model:pagination |
DataTableClientPaginationConfig |
/types |
Prop client-pagination |
DataTableServerPaginationConfig |
/types |
Prop server-pagination |
DataTablePaginationPlacement |
/types |
'auto' | 'top' | 'bottom' | 'both' |
Lista completa de tipos e reexports: importe /types e use autocompletar do IDE.
Entrypoints públicos
| Entrypoint | Conteúdo |
|---|---|
@benjaminor-dev/quasar-app-extension-datatable |
DataTable, TablePaginationBar, composables, utils, i18n (configureDataTableDefaults, resolveDataTableMessages) |
@benjaminor-dev/quasar-app-extension-datatable/types |
Tipos + reexports tipados de helpers |
@benjaminor-dev/quasar-app-extension-datatable/main.css |
Estilos (registrado em quasar.config na instalação) |
Troubleshooting
| Sintoma | Causa provável | Fix |
|---|---|---|
| Tabela sem estilos | Extensão não instalada ou CSS ausente | quasar ext add @benjaminor-dev/datatable; revisar quasar.config → css |
| Barra de paginação não aparece | Poucas linhas vs primeiro degrau | Normal se totalRows ≤ minPageSizeStep |
| Cards estreitas no mobile | Slot #item sem largura 100% |
width: 100% na raiz do slot ou classes bor-dt-data-table-grid-* |
Erro TS Ref<boolean> em :grid |
Ref importado de pacote externo | computed(() => layoutRef.value) no consumidor |
| Textos de paginação em inglês | Idioma do Quasar não configurado | framework.lang em quasar.config ou configureDataTableDefaults({ locale: 'pt' }) no boot |
| Boot defaults ausente após remove | Desinstalação parcial ou delete manual | quasar ext add @benjaminor-dev/datatable novamente |
MIT © Benjamín Olvera R.
Related Packages
DataTable component with basic pagination, search filters etc for Vue3
DataTable component with basic pagination, search filters etc for Vue3
Laravel and Vuejs based custom datatable with pagination, search and page length
A lightweight, dependency-light DataTable component for Vue 3 with Tailwind CSS
Version History
| Version | Released | Vue | License |
|---|---|---|---|
| 0.3.0 | ^3.4.18 | MIT | |
| 0.2.0 | ^3.4.18 | MIT | |
| 0.1.7 | ^3.4.18 | MIT | |
| 0.1.6 | ^3.4.18 | MIT | |
| 0.1.5 | ^3.4.18 | MIT | |
| 0.1.4 | ^3.4.18 | MIT | |
| 0.1.3 | ^3.4.18 | MIT | |
| 0.1.2 | ^3.4.18 | MIT | |
| 0.1.1 | ^3.4.18 | MIT | |
| 0.1.0 | ^3.4.18 | MIT |