@nexdom/uimed-vue 2.0.0-beta.8 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/_virtual/_rolldown/runtime.js +7 -0
- package/dist/components/app-bar/app-bar.js +5 -0
- package/dist/components/app-bar/app-bar.vue_vue_type_script_setup_true_lang.js +286 -0
- package/dist/components/app-bar/types.d.ts +96 -0
- package/dist/components/button/button.js +5 -0
- package/dist/components/button/button.vue.d.ts +31 -0
- package/dist/components/button/button.vue_vue_type_script_setup_true_lang.js +97 -0
- package/dist/components/button/types.d.ts +65 -0
- package/dist/components/data-sets/data-set/data-set.js +5 -0
- package/dist/components/data-sets/data-set/data-set.vue.d.ts +47 -0
- package/dist/components/data-sets/data-set/data-set.vue_vue_type_script_setup_true_lang.js +157 -0
- package/dist/components/data-sets/data-set/types.d.ts +93 -0
- package/dist/components/data-sets/data-set-bar.js +5 -0
- package/dist/components/data-sets/data-set-bar.vue_vue_type_script_setup_true_lang.js +99 -0
- package/dist/components/data-sets/data-set-item/data-set-item.js +5 -0
- package/dist/components/data-sets/data-set-item/data-set-item.vue.d.ts +35 -0
- package/dist/components/data-sets/data-set-item/data-set-item.vue_vue_type_script_setup_true_lang.js +57 -0
- package/dist/components/data-sets/data-set-item/types.d.ts +42 -0
- package/dist/components/details/details.js +5 -0
- package/dist/components/details/details.vue.d.ts +28 -0
- package/dist/components/details/details.vue_vue_type_script_setup_true_lang.js +56 -0
- package/dist/components/details/types.d.ts +29 -0
- package/dist/components/dialogs/dialog/dialog-host-key.js +10 -0
- package/dist/components/dialogs/dialog/dialog.js +5 -0
- package/dist/components/dialogs/dialog/dialog.vue.d.ts +36 -0
- package/dist/components/dialogs/dialog/dialog.vue_vue_type_script_setup_true_lang.js +112 -0
- package/dist/components/dialogs/dialog/types.d.ts +47 -0
- package/dist/components/dialogs/dialog-host.js +5 -0
- package/dist/components/dialogs/dialog-host.vue_vue_type_script_setup_true_lang.js +81 -0
- package/dist/components/dialogs/toast.js +5 -0
- package/dist/components/dialogs/toast.vue_vue_type_script_setup_true_lang.js +35 -0
- package/dist/components/footer/footer.js +5 -0
- package/dist/components/footer/footer.vue_vue_type_script_setup_true_lang.js +31 -0
- package/dist/components/footer/types.d.ts +16 -0
- package/dist/components/form/form.js +5 -0
- package/dist/components/form/form.vue.d.ts +32 -0
- package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js +37 -0
- package/dist/components/form/types.d.ts +15 -0
- package/dist/components/grid/column/column.js +5 -0
- package/dist/components/grid/column/column.vue.d.ts +33 -0
- package/dist/components/grid/column/column.vue_vue_type_script_setup_true_lang.js +45 -0
- package/dist/components/grid/column/types.d.ts +27 -0
- package/dist/components/grid/container/container.js +5 -0
- package/dist/components/grid/container/container.vue.d.ts +27 -0
- package/dist/components/grid/container/container.vue_vue_type_script_setup_true_lang.js +33 -0
- package/dist/components/grid/container/types.d.ts +17 -0
- package/dist/components/grid/row/row.js +5 -0
- package/dist/components/grid/row/row.vue.d.ts +29 -0
- package/dist/components/grid/row/row.vue_vue_type_script_setup_true_lang.js +61 -0
- package/dist/components/grid/row/types.d.ts +63 -0
- package/dist/components/icon-button/icon-button.js +5 -0
- package/dist/components/icon-button/icon-button.vue.d.ts +23 -0
- package/dist/components/icon-button/icon-button.vue_vue_type_script_setup_true_lang.js +51 -0
- package/dist/components/icon-button/types.d.ts +32 -0
- package/dist/components/img/img.js +5 -0
- package/dist/components/img/img.vue.d.ts +23 -0
- package/dist/components/img/img.vue_vue_type_script_setup_true_lang.js +61 -0
- package/dist/components/img/types.d.ts +43 -0
- package/dist/components/inputs/autocomplete-field/autocomplete-field.js +5 -0
- package/dist/components/inputs/autocomplete-field/autocomplete-field.vue.d.ts +33 -0
- package/dist/components/inputs/autocomplete-field/autocomplete-field.vue_vue_type_script_setup_true_lang.js +161 -0
- package/dist/components/inputs/autocomplete-field/types.d.ts +84 -0
- package/dist/components/inputs/checkbox/checkbox.js +5 -0
- package/dist/components/inputs/checkbox/checkbox.vue.d.ts +33 -0
- package/dist/components/inputs/checkbox/checkbox.vue_vue_type_script_setup_true_lang.js +71 -0
- package/dist/components/inputs/checkbox/types.d.ts +35 -0
- package/dist/components/inputs/date-time-field/date-time-field.js +5 -0
- package/dist/components/inputs/date-time-field/date-time-field.vue.d.ts +32 -0
- package/dist/components/inputs/date-time-field/date-time-field.vue_vue_type_script_setup_true_lang.js +205 -0
- package/dist/components/inputs/date-time-field/types.d.ts +84 -0
- package/dist/components/inputs/field-loader.js +5 -0
- package/dist/components/inputs/field-loader.vue_vue_type_script_setup_true_lang.js +30 -0
- package/dist/components/inputs/mask-field/mask-field.js +5 -0
- package/dist/components/inputs/mask-field/mask-field.vue.d.ts +32 -0
- package/dist/components/inputs/mask-field/mask-field.vue_vue_type_script_setup_true_lang.js +120 -0
- package/dist/components/inputs/mask-field/types.d.ts +118 -0
- package/dist/components/inputs/text-field/text-field.js +5 -0
- package/dist/components/inputs/text-field/text-field.vue.d.ts +30 -0
- package/dist/components/inputs/text-field/text-field.vue_vue_type_script_setup_true_lang.js +119 -0
- package/dist/components/inputs/text-field/types.d.ts +70 -0
- package/dist/components/link/link.js +5 -0
- package/dist/components/link/link.vue.d.ts +27 -0
- package/dist/components/link/link.vue_vue_type_script_setup_true_lang.js +32 -0
- package/dist/components/link/types.d.ts +18 -0
- package/dist/components/main/main.js +5 -0
- package/dist/components/main/main.vue.d.ts +33 -0
- package/dist/components/main/main.vue_vue_type_script_setup_true_lang.js +104 -0
- package/dist/components/main/types.d.ts +75 -0
- package/dist/components/navigation-menu/navigation-menu.js +5 -0
- package/dist/components/navigation-menu/navigation-menu.vue_vue_type_script_setup_true_lang.js +207 -0
- package/dist/components/navigation-menu/types.d.ts +62 -0
- package/dist/components/page-transition/page-transition.js +5 -0
- package/dist/components/page-transition/page-transition.vue.d.ts +40 -0
- package/dist/components/page-transition/page-transition.vue_vue_type_script_setup_true_lang.js +27 -0
- package/dist/components/page-transition/types.d.ts +18 -0
- package/dist/components/sections/section/section.js +5 -0
- package/dist/components/sections/section/section.vue.d.ts +28 -0
- package/dist/components/sections/section/section.vue_vue_type_script_setup_true_lang.js +108 -0
- package/dist/components/sections/section/types.d.ts +80 -0
- package/dist/components/sections/section-content/section-content.js +5 -0
- package/dist/components/sections/section-content/section-content.vue.d.ts +27 -0
- package/dist/components/sections/section-content/section-content.vue_vue_type_script_setup_true_lang.js +16 -0
- package/dist/components/skeleton-loader/skeleton-loader.js +5 -0
- package/dist/components/skeleton-loader/skeleton-loader.vue_vue_type_script_setup_true_lang.js +65 -0
- package/dist/components/table/table.js +5 -0
- package/dist/components/table/table.vue.d.ts +19 -0
- package/dist/components/table/table.vue_vue_type_script_setup_true_lang.js +84 -0
- package/dist/components/table/types.d.ts +51 -0
- package/dist/components.d.ts +23 -940
- package/dist/components.js +23 -1254
- package/dist/composables/alignment/alignment.js +41 -0
- package/dist/composables/alignment/types.d.ts +12 -0
- package/dist/composables/button/button.js +54 -0
- package/dist/composables/colors/constants.js +27 -0
- package/dist/composables/colors/types.d.ts +4 -0
- package/dist/composables/colors/use-vuetify-background-color.js +16 -0
- package/dist/composables/colors/use-vuetify-color.js +11 -0
- package/dist/composables/colors/use-vuetify-text-color.js +12 -0
- package/dist/composables/data-set/data-set.js +128 -0
- package/dist/composables/dialogs/types.d.ts +88 -0
- package/dist/composables/dialogs/use-confirm.d.ts +21 -0
- package/dist/composables/dialogs/use-confirm.js +55 -0
- package/dist/composables/dialogs/use-decorative-timer.js +25 -0
- package/dist/composables/dialogs/use-dialog-focus.js +64 -0
- package/dist/composables/dialogs/use-dialog-loading.js +13 -0
- package/dist/composables/dialogs/use-dialog.d.ts +36 -0
- package/dist/composables/dialogs/use-dialog.js +73 -0
- package/dist/composables/dialogs/use-run-or-toast.d.ts +27 -0
- package/dist/composables/dialogs/use-run-or-toast.js +65 -0
- package/dist/composables/dialogs/use-toast.d.ts +25 -0
- package/dist/composables/dialogs/use-toast.js +39 -0
- package/dist/composables/dimensions/dimensions.js +18 -0
- package/dist/composables/inputs/autocomplete-field.js +39 -0
- package/dist/composables/inputs/date-time-field.js +109 -0
- package/dist/composables/inputs/fields.js +28 -0
- package/dist/composables/inputs/mask-field.js +133 -0
- package/dist/composables/inputs/rules.js +16 -0
- package/dist/composables/inputs/text-field.js +81 -0
- package/dist/composables/navigation/types.d.ts +54 -0
- package/dist/composables/navigation/use-navigation-rail.js +163 -0
- package/dist/composables/navigation/use-navigation-search-shortcut.js +96 -0
- package/dist/composables/navigation/use-route-props.js +21 -0
- package/dist/composables/navigation/use-unsaved-changes.d.ts +35 -0
- package/dist/composables/navigation/use-unsaved-changes.js +88 -0
- package/dist/composables/section/section.js +34 -0
- package/dist/composables.d.ts +6 -67
- package/dist/composables.js +6 -65
- package/dist/consts/icons.d.ts +67 -0
- package/dist/consts/icons.js +69 -0
- package/dist/consts/locale.js +12 -0
- package/dist/consts/types.d.ts +12 -0
- package/dist/index.d.ts +1 -13
- package/dist/index.js +39 -14
- package/dist/plugins.d.ts +15 -4
- package/dist/plugins.js +54 -3
- package/dist/styles/fonts/UnimedSlab-Regular.woff2 +0 -0
- package/dist/styles/fonts/fonts.css +5 -0
- package/dist/styles/settings.scss +155 -0
- package/dist/unit-test.js +11 -7
- package/package.json +11 -11
- package/skills/uimed-vue/SKILL.md +113 -0
- package/skills/uimed-vue/references/api/components/autocomplete-field.md +45 -0
- package/skills/uimed-vue/references/api/components/button.md +48 -0
- package/skills/uimed-vue/references/api/components/checkbox.md +36 -0
- package/skills/uimed-vue/references/api/components/data-sets/data-set-item.md +61 -0
- package/skills/uimed-vue/references/api/components/data-sets/data-set.md +67 -0
- package/skills/uimed-vue/references/api/components/date-time-field.md +44 -0
- package/skills/uimed-vue/references/api/components/details.md +33 -0
- package/skills/uimed-vue/references/api/components/dialog.md +70 -0
- package/skills/uimed-vue/references/api/components/form.md +43 -0
- package/skills/uimed-vue/references/api/components/grid/column.md +41 -0
- package/skills/uimed-vue/references/api/components/grid/container.md +32 -0
- package/skills/uimed-vue/references/api/components/grid/row.md +37 -0
- package/skills/uimed-vue/references/api/components/icon-button.md +37 -0
- package/skills/uimed-vue/references/api/components/img.md +34 -0
- package/skills/uimed-vue/references/api/components/link.md +31 -0
- package/skills/uimed-vue/references/api/components/main.md +174 -0
- package/skills/uimed-vue/references/api/components/mask-field.md +60 -0
- package/skills/uimed-vue/references/api/components/page-transition.md +37 -0
- package/skills/uimed-vue/references/api/components/sections/section-content.md +23 -0
- package/skills/uimed-vue/references/api/components/sections/section.md +61 -0
- package/skills/uimed-vue/references/api/components/table.md +35 -0
- package/skills/uimed-vue/references/api/components/text-field.md +42 -0
- package/skills/uimed-vue/references/api/composables/use-confirm.md +96 -0
- package/skills/uimed-vue/references/api/composables/use-dialog.md +95 -0
- package/skills/uimed-vue/references/api/composables/use-run-or-toast.md +58 -0
- package/skills/uimed-vue/references/api/composables/use-toast.md +48 -0
- package/skills/uimed-vue/references/api/composables/use-unsaved-changes.md +106 -0
- package/skills/uimed-vue/references/api/index.md +1 -0
- package/skills/uimed-vue/references/guide/components/autocomplete-field.md +256 -0
- package/skills/uimed-vue/references/guide/components/button.md +155 -0
- package/skills/uimed-vue/references/guide/components/checkbox.md +113 -0
- package/skills/uimed-vue/references/guide/components/data-set.md +370 -0
- package/skills/uimed-vue/references/guide/components/date-time-field.md +202 -0
- package/skills/uimed-vue/references/guide/components/details.md +76 -0
- package/skills/uimed-vue/references/guide/components/dialog.md +269 -0
- package/skills/uimed-vue/references/guide/components/form.md +96 -0
- package/skills/uimed-vue/references/guide/components/icon-button.md +76 -0
- package/skills/uimed-vue/references/guide/components/img.md +128 -0
- package/skills/uimed-vue/references/guide/components/layout.md +323 -0
- package/skills/uimed-vue/references/guide/components/link.md +47 -0
- package/skills/uimed-vue/references/guide/components/main.md +435 -0
- package/skills/uimed-vue/references/guide/components/mask-field.md +256 -0
- package/skills/uimed-vue/references/guide/components/page-transition.md +111 -0
- package/skills/uimed-vue/references/guide/components/section.md +232 -0
- package/skills/uimed-vue/references/guide/components/table.md +102 -0
- package/skills/uimed-vue/references/guide/components/text-field.md +172 -0
- package/skills/uimed-vue/references/guide/composables/use-confirm.md +123 -0
- package/skills/uimed-vue/references/guide/composables/use-dialog.md +102 -0
- package/skills/uimed-vue/references/guide/composables/use-run-or-toast.md +55 -0
- package/skills/uimed-vue/references/guide/composables/use-toast.md +57 -0
- package/skills/uimed-vue/references/guide/composables/use-unsaved-changes.md +129 -0
- package/skills/uimed-vue/references/guide/getting-started.md +135 -0
- package/skills/uimed-vue/references/guide/icons.md +71 -0
- package/skills/uimed-vue/references/guide/index.md +51 -0
- package/skills/uimed-vue/references/guide/migration-v1-to-v2.md +191 -0
- package/skills/uimed-vue/references/guide/unit-testing.md +85 -0
- package/AGENTS.md +0 -160
- package/CLAUDE.md +0 -1
- package/dist/types-BPXXtbmW.d.ts +0 -5
- package/dist/use-toast-CACuYhK_.js +0 -53
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
# Listagem
|
|
2
|
+
|
|
3
|
+
O componente padrão para listar registros se chama `DataSet`.
|
|
4
|
+
|
|
5
|
+
Ele apresenta os registros da página atual em uma grade responsiva de cartões, montada com os componentes de [layout](./layout.md) `Row` e `Column`. Cada registro ocupa a sua própria coluna e é apresentado por meio do slot padrão, que recebe o registro original (`item`) e a sua posição na página atual (`index`). Dentro do slot, monte o cartão de cada registro com o componente [`DataSetItem`](#componente-datasetitem), baseado no [agrupador de conteúdo](./section.md).
|
|
6
|
+
|
|
7
|
+
## Propriedades
|
|
8
|
+
|
|
9
|
+
### Itens
|
|
10
|
+
|
|
11
|
+
A prop `items` define os registros a serem listados.
|
|
12
|
+
|
|
13
|
+
```vue
|
|
14
|
+
<template>
|
|
15
|
+
<u-data-set :items="pacientes">
|
|
16
|
+
<template #default="{ item }">
|
|
17
|
+
<u-data-set-item :title="item.nome" :subtitle="`Plano ${item.plano}`" />
|
|
18
|
+
</template>
|
|
19
|
+
</u-data-set>
|
|
20
|
+
</template>
|
|
21
|
+
|
|
22
|
+
<script lang="ts" setup>
|
|
23
|
+
import { UDataSet, UDataSetItem } from "@nexdom/uimed-vue/components";
|
|
24
|
+
|
|
25
|
+
const pacientes = [
|
|
26
|
+
{ id: 1, nome: "Ana Souza", plano: "Ouro" },
|
|
27
|
+
{ id: 2, nome: "Bruno Lima", plano: "Prata" },
|
|
28
|
+
{ id: 3, nome: "Carla Dias", plano: "Bronze" },
|
|
29
|
+
];
|
|
30
|
+
</script>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Colunas
|
|
34
|
+
|
|
35
|
+
A prop `columns` define a quantidade máxima de registros apresentados lado a lado em cada linha da grade: `1`, `2`, `3`, `4` ou `6`. O padrão é `3`.
|
|
36
|
+
|
|
37
|
+
A grade é responsiva e se adapta ao espaço que a listagem realmente ocupa, e não apenas ao tamanho da tela: para que cada cartão tenha pelo menos 240px de largura, a quantidade de registros por linha é reduzida para o maior dos valores acima que caiba na largura disponível. Assim, uma listagem dentro de um espaço estreito, como um diálogo ou um painel lateral, apresenta menos registros por linha, podendo chegar a um único registro. Em telas muito pequenas, como as de celulares, cada registro ocupa a largura inteira.
|
|
38
|
+
|
|
39
|
+
Experimente alterar a quantidade de colunas no [Playground](#playground), cuja área de visualização é estreita, e a largura da janela: a quantidade de registros por linha se ajusta ao espaço disponível.
|
|
40
|
+
|
|
41
|
+
```vue
|
|
42
|
+
<template>
|
|
43
|
+
<u-data-set :items="pacientes" :columns="2">
|
|
44
|
+
<template #default="{ item }">
|
|
45
|
+
<u-data-set-item :title="item.nome" :subtitle="`Plano ${item.plano}`" />
|
|
46
|
+
</template>
|
|
47
|
+
</u-data-set>
|
|
48
|
+
</template>
|
|
49
|
+
|
|
50
|
+
<script lang="ts" setup>
|
|
51
|
+
import { UDataSet, UDataSetItem } from "@nexdom/uimed-vue/components";
|
|
52
|
+
|
|
53
|
+
const pacientes = [
|
|
54
|
+
{ id: 1, nome: "Ana Souza", plano: "Ouro" },
|
|
55
|
+
{ id: 2, nome: "Bruno Lima", plano: "Prata" },
|
|
56
|
+
{ id: 3, nome: "Carla Dias", plano: "Bronze" },
|
|
57
|
+
{ id: 4, nome: "Daniel Rocha", plano: "Ouro" },
|
|
58
|
+
];
|
|
59
|
+
</script>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Paginação
|
|
63
|
+
|
|
64
|
+
Os registros são divididos em páginas de acordo com a prop `itemsPerPage`, que por padrão apresenta até `10` registros por página. Os controles de paginação só são exibidos quando há mais de uma página.
|
|
65
|
+
|
|
66
|
+
A página atual pode ser acompanhada, ou alterada, por meio do `v-model:page`, que inicia na primeira página.
|
|
67
|
+
|
|
68
|
+
```vue
|
|
69
|
+
<template>
|
|
70
|
+
<u-data-set v-model:page="paginaAtual" :items="consultas" :items-per-page="6">
|
|
71
|
+
<template #default="{ item }">
|
|
72
|
+
<u-data-set-item :title="item.paciente" :subtitle="item.especialidade">
|
|
73
|
+
Consulta em {{ item.data }}
|
|
74
|
+
</u-data-set-item>
|
|
75
|
+
</template>
|
|
76
|
+
</u-data-set>
|
|
77
|
+
Página atual: {{ paginaAtual }}
|
|
78
|
+
</template>
|
|
79
|
+
|
|
80
|
+
<script lang="ts" setup>
|
|
81
|
+
import { ref } from "vue";
|
|
82
|
+
import { UDataSet, UDataSetItem } from "@nexdom/uimed-vue/components";
|
|
83
|
+
|
|
84
|
+
const paginaAtual = ref(1);
|
|
85
|
+
const consultas = [
|
|
86
|
+
{ id: 1, paciente: "Ana Souza", especialidade: "Cardiologia", data: "01/10/2026" },
|
|
87
|
+
{ id: 2, paciente: "Bruno Lima", especialidade: "Dermatologia", data: "02/10/2026" },
|
|
88
|
+
// ...
|
|
89
|
+
];
|
|
90
|
+
</script>
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Pesquisa
|
|
94
|
+
|
|
95
|
+
A prop `searchable` exibe um campo de pesquisa na barra acima dos registros, alinhado à direita e com 240px de largura, a mesma largura mínima de um cartão. Em telas muito pequenas, como as de celulares, ele ocupa a largura inteira. Apenas os registros que contêm o texto pesquisado, sem diferenciar maiúsculas e minúsculas, são listados, e a listagem volta para a primeira página a cada nova pesquisa.
|
|
96
|
+
|
|
97
|
+
Por padrão, todas as propriedades dos registros são consideradas. Utilize a prop `searchKeys` para restringir a pesquisa a algumas delas.
|
|
98
|
+
|
|
99
|
+
O texto pesquisado pode ser acompanhado, ou alterado, por meio do `v-model:search`. Ele filtra os registros mesmo quando o campo de pesquisa não é exibido.
|
|
100
|
+
|
|
101
|
+
```vue
|
|
102
|
+
<template>
|
|
103
|
+
<u-data-set
|
|
104
|
+
v-model:search="pesquisa"
|
|
105
|
+
:items="pacientes"
|
|
106
|
+
:search-keys="['nome']"
|
|
107
|
+
:items-per-page="4"
|
|
108
|
+
:columns="2"
|
|
109
|
+
searchable
|
|
110
|
+
>
|
|
111
|
+
<template #default="{ item }">
|
|
112
|
+
<u-data-set-item :title="item.nome" :subtitle="`Plano ${item.plano}`" />
|
|
113
|
+
</template>
|
|
114
|
+
</u-data-set>
|
|
115
|
+
Pesquisa: {{ pesquisa }}
|
|
116
|
+
</template>
|
|
117
|
+
|
|
118
|
+
<script lang="ts" setup>
|
|
119
|
+
import { ref } from "vue";
|
|
120
|
+
import { UDataSet, UDataSetItem } from "@nexdom/uimed-vue/components";
|
|
121
|
+
|
|
122
|
+
const pesquisa = ref("");
|
|
123
|
+
const pacientes = [
|
|
124
|
+
{ id: 1, nome: "Ana Souza", plano: "Ouro" },
|
|
125
|
+
{ id: 2, nome: "Bruno Lima", plano: "Prata" },
|
|
126
|
+
// ...
|
|
127
|
+
];
|
|
128
|
+
</script>
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Ações da listagem
|
|
132
|
+
|
|
133
|
+
A prop `actions` define as ações sobre a listagem como um todo, como "Novo paciente". Elas são exibidas como botões à esquerda da barra acima dos registros, na mesma linha do campo de pesquisa, e aceitam as mesmas opções das [ações do agrupador de conteúdo](./section.md#acoes). A barra só é exibida quando há ações ou pesquisa.
|
|
134
|
+
|
|
135
|
+
Sem `variant`, as ações da listagem são `secondary`, e não `primary` como nas ações do agrupador de conteúdo e dos registros, para não concorrerem com elas. Uma ação que informa `variant` mantém a sua.
|
|
136
|
+
|
|
137
|
+
Com o campo de pesquisa, as ações ocupam a metade esquerda da barra, e o campo, a metade direita. As ações que não cabem na metade delas passam para a linha seguinte, ainda à esquerda. Quando a listagem não tem largura para dois cartões lado a lado, como em diálogos e painéis laterais, as ações e o campo de pesquisa ficam em linhas separadas, com o campo ainda à direita. Em telas muito pequenas, como as de celulares, cada ação e o campo de pesquisa ocupam uma linha inteira.
|
|
138
|
+
|
|
139
|
+
```vue
|
|
140
|
+
<template>
|
|
141
|
+
<u-data-set
|
|
142
|
+
:items="pacientes"
|
|
143
|
+
:columns="2"
|
|
144
|
+
:actions="[
|
|
145
|
+
{ label: 'Novo paciente', onClick: novoPaciente },
|
|
146
|
+
{ label: 'Exportar', onClick: exportar },
|
|
147
|
+
]"
|
|
148
|
+
searchable
|
|
149
|
+
>
|
|
150
|
+
<template #default="{ item }">
|
|
151
|
+
<u-data-set-item :title="item.nome" :subtitle="`Plano ${item.plano}`" />
|
|
152
|
+
</template>
|
|
153
|
+
</u-data-set>
|
|
154
|
+
Última ação: {{ ultimaAcao }}
|
|
155
|
+
</template>
|
|
156
|
+
|
|
157
|
+
<script lang="ts" setup>
|
|
158
|
+
import { ref } from "vue";
|
|
159
|
+
import { UDataSet, UDataSetItem } from "@nexdom/uimed-vue/components";
|
|
160
|
+
|
|
161
|
+
const ultimaAcao = ref("nenhuma");
|
|
162
|
+
const pacientes = [
|
|
163
|
+
{ id: 1, nome: "Ana Souza", plano: "Ouro" },
|
|
164
|
+
{ id: 2, nome: "Bruno Lima", plano: "Prata" },
|
|
165
|
+
// ...
|
|
166
|
+
];
|
|
167
|
+
|
|
168
|
+
function novoPaciente() {
|
|
169
|
+
ultimaAcao.value = "Novo paciente";
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
function exportar() {
|
|
173
|
+
ultimaAcao.value = "Exportar";
|
|
174
|
+
}
|
|
175
|
+
</script>
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Sem registros
|
|
179
|
+
|
|
180
|
+
Quando não há registros para listar, seja porque `items` está vazio ou porque nenhum registro corresponde à pesquisa, a mensagem "Nenhum registro encontrado." é exibida. Utilize a prop `noDataText` para personalizá-la.
|
|
181
|
+
|
|
182
|
+
```vue
|
|
183
|
+
<template>
|
|
184
|
+
<u-data-set :items="[]" no-data-text="Nenhum paciente agendado para hoje." />
|
|
185
|
+
</template>
|
|
186
|
+
|
|
187
|
+
<script lang="ts" setup>
|
|
188
|
+
import { UDataSet } from "@nexdom/uimed-vue/components";
|
|
189
|
+
</script>
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Carregamento
|
|
193
|
+
|
|
194
|
+
A prop `loading` exibe um skeleton loader no lugar da listagem enquanto uma operação está em andamento.
|
|
195
|
+
|
|
196
|
+
```vue
|
|
197
|
+
<template>
|
|
198
|
+
<u-data-set :items="pacientes" loading />
|
|
199
|
+
</template>
|
|
200
|
+
|
|
201
|
+
<script lang="ts" setup>
|
|
202
|
+
import { UDataSet } from "@nexdom/uimed-vue/components";
|
|
203
|
+
|
|
204
|
+
const pacientes = [
|
|
205
|
+
{ id: 1, nome: "Ana Souza", plano: "Ouro" },
|
|
206
|
+
{ id: 2, nome: "Bruno Lima", plano: "Prata" },
|
|
207
|
+
];
|
|
208
|
+
</script>
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
## Componente DataSetItem
|
|
212
|
+
|
|
213
|
+
O componente `DataSetItem` apresenta um registro como um cartão, baseado no [agrupador de conteúdo](./section.md). Ele ocupa toda a altura da sua coluna, de forma que os cartões de uma mesma linha fiquem alinhados.
|
|
214
|
+
|
|
215
|
+
### Título e subtítulo
|
|
216
|
+
|
|
217
|
+
As props `title` e `subtitle` definem o título e uma breve descrição, exibidos no topo do cartão.
|
|
218
|
+
|
|
219
|
+
```vue
|
|
220
|
+
<template>
|
|
221
|
+
<u-data-set :items="pacientes" :columns="2">
|
|
222
|
+
<template #default="{ item, index }">
|
|
223
|
+
<u-data-set-item :title="`${index + 1}. ${item.nome}`" :subtitle="item.cidade" />
|
|
224
|
+
</template>
|
|
225
|
+
</u-data-set>
|
|
226
|
+
</template>
|
|
227
|
+
|
|
228
|
+
<script lang="ts" setup>
|
|
229
|
+
import { UDataSet, UDataSetItem } from "@nexdom/uimed-vue/components";
|
|
230
|
+
|
|
231
|
+
const pacientes = [
|
|
232
|
+
{ id: 1, nome: "Ana Souza", cidade: "São Paulo - SP" },
|
|
233
|
+
{ id: 2, nome: "Bruno Lima", cidade: "Belo Horizonte - MG" },
|
|
234
|
+
];
|
|
235
|
+
</script>
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Campos do registro
|
|
239
|
+
|
|
240
|
+
O slot padrão do `DataSetItem` apresenta os detalhes do registro abaixo do título. Para apresentar alguns dos seus campos, utilize a [tabela](./table.md) com o layout `vertical`, que exibe o nome de cada campo ao lado do seu valor.
|
|
241
|
+
|
|
242
|
+
```vue
|
|
243
|
+
<template>
|
|
244
|
+
<u-data-set :items="pacientes" :columns="2">
|
|
245
|
+
<template #default="{ item }">
|
|
246
|
+
<u-data-set-item :title="item.nome" :subtitle="item.cidade">
|
|
247
|
+
<u-table
|
|
248
|
+
:headers="['Plano', 'Idade', 'Carteirinha']"
|
|
249
|
+
:items="[[item.plano, item.idade, item.carteirinha]]"
|
|
250
|
+
vertical
|
|
251
|
+
/>
|
|
252
|
+
</u-data-set-item>
|
|
253
|
+
</template>
|
|
254
|
+
</u-data-set>
|
|
255
|
+
</template>
|
|
256
|
+
|
|
257
|
+
<script lang="ts" setup>
|
|
258
|
+
import { UDataSet, UDataSetItem, UTable } from "@nexdom/uimed-vue/components";
|
|
259
|
+
|
|
260
|
+
const pacientes = [
|
|
261
|
+
{
|
|
262
|
+
id: 1,
|
|
263
|
+
nome: "Ana Souza",
|
|
264
|
+
cidade: "São Paulo - SP",
|
|
265
|
+
plano: "Ouro",
|
|
266
|
+
idade: "34 anos",
|
|
267
|
+
carteirinha: "0001 2345 6789",
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
id: 2,
|
|
271
|
+
nome: "Bruno Lima",
|
|
272
|
+
cidade: "Belo Horizonte - MG",
|
|
273
|
+
plano: "Prata",
|
|
274
|
+
idade: "52 anos",
|
|
275
|
+
carteirinha: "0001 9876 5432",
|
|
276
|
+
},
|
|
277
|
+
// ...
|
|
278
|
+
];
|
|
279
|
+
</script>
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### Ações
|
|
283
|
+
|
|
284
|
+
A prop `actions` define as ações do registro, como "Editar" e "Excluir". Elas são exibidas como botões no rodapé do cartão, alinhadas entre os cartões de uma mesma linha mesmo quando os detalhes têm alturas diferentes, e aceitam as mesmas opções das [ações do agrupador de conteúdo](./section.md#acoes). Como as ações são definidas dentro do slot, cada uma pode usar o registro (`item`) diretamente.
|
|
285
|
+
|
|
286
|
+
```vue
|
|
287
|
+
<template>
|
|
288
|
+
<u-data-set :items="contatos" :columns="2">
|
|
289
|
+
<template #default="{ item }">
|
|
290
|
+
<u-data-set-item
|
|
291
|
+
:title="item.nome"
|
|
292
|
+
:subtitle="item.email"
|
|
293
|
+
:actions="[
|
|
294
|
+
{ label: 'Editar', variant: 'secondary', onClick: () => editar(item) },
|
|
295
|
+
{ label: 'Excluir', color: 'danger', variant: 'secondary', onClick: () => excluir(item) },
|
|
296
|
+
]"
|
|
297
|
+
>
|
|
298
|
+
<u-table
|
|
299
|
+
:headers="Object.keys(item.telefones)"
|
|
300
|
+
:items="[Object.values(item.telefones)]"
|
|
301
|
+
vertical
|
|
302
|
+
/>
|
|
303
|
+
</u-data-set-item>
|
|
304
|
+
</template>
|
|
305
|
+
</u-data-set>
|
|
306
|
+
Última ação: {{ ultimaAcao }}
|
|
307
|
+
</template>
|
|
308
|
+
|
|
309
|
+
<script lang="ts" setup>
|
|
310
|
+
import { ref } from "vue";
|
|
311
|
+
import { UDataSet, UDataSetItem, UTable } from "@nexdom/uimed-vue/components";
|
|
312
|
+
|
|
313
|
+
type Contato = (typeof contatos)[number];
|
|
314
|
+
|
|
315
|
+
const ultimaAcao = ref("nenhuma");
|
|
316
|
+
const contatos = [
|
|
317
|
+
{
|
|
318
|
+
id: 1,
|
|
319
|
+
nome: "Ana Souza",
|
|
320
|
+
email: "ana.souza@example.com",
|
|
321
|
+
telefones: { Celular: "(00) 90000-0001", Residencial: "(00) 3000-0001" },
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
id: 2,
|
|
325
|
+
nome: "Bruno Lima",
|
|
326
|
+
email: "bruno.lima@example.com",
|
|
327
|
+
telefones: { Celular: "(00) 90000-0002" },
|
|
328
|
+
},
|
|
329
|
+
];
|
|
330
|
+
|
|
331
|
+
function editar(contato: Contato) {
|
|
332
|
+
ultimaAcao.value = `Editar ${contato.nome}`;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
function excluir(contato: Contato) {
|
|
336
|
+
ultimaAcao.value = `Excluir ${contato.nome}`;
|
|
337
|
+
}
|
|
338
|
+
</script>
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### Variantes
|
|
342
|
+
|
|
343
|
+
A prop `variant` define a variação de estilo do cartão, assim como no agrupador de conteúdo: `primary` ou `secondary`. O padrão é `primary`.
|
|
344
|
+
|
|
345
|
+
```vue
|
|
346
|
+
<template>
|
|
347
|
+
<u-data-set :items="pacientes" :columns="2">
|
|
348
|
+
<template #default="{ item }">
|
|
349
|
+
<u-data-set-item :title="item.nome" :subtitle="`Plano ${item.plano}`" variant="secondary" />
|
|
350
|
+
</template>
|
|
351
|
+
</u-data-set>
|
|
352
|
+
</template>
|
|
353
|
+
|
|
354
|
+
<script lang="ts" setup>
|
|
355
|
+
import { UDataSet, UDataSetItem } from "@nexdom/uimed-vue/components";
|
|
356
|
+
|
|
357
|
+
const pacientes = [
|
|
358
|
+
{ id: 1, nome: "Ana Souza", plano: "Ouro" },
|
|
359
|
+
{ id: 2, nome: "Bruno Lima", plano: "Prata" },
|
|
360
|
+
];
|
|
361
|
+
</script>
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
## Playground
|
|
365
|
+
|
|
366
|
+
Experimente as combinações de props do componente.
|
|
367
|
+
|
|
368
|
+
## Ver também
|
|
369
|
+
|
|
370
|
+
Consulte a referência de [API do UDataSet](../../api/components/data-sets/data-set.md) e da [API do UDataSetItem](../../api/components/data-sets/data-set-item.md) para a lista completa de props, slots e eventos.
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# Campos de data e hora
|
|
2
|
+
|
|
3
|
+
O componente para campos de data e hora se chama `DateTimeField`.
|
|
4
|
+
|
|
5
|
+
Ao clicar no campo, um seletor é aberto para escolher a data, o horário ou ambos. O valor é exibido no formato brasileiro (`24/09/2026`, `14:30` ou `24/09/2026 14:30`), mas o `v-model` utiliza os formatos padrão dos campos nativos:
|
|
6
|
+
|
|
7
|
+
| Tipo | Formato do `v-model` | Exemplo |
|
|
8
|
+
| ---------- | -------------------- | ------------------ |
|
|
9
|
+
| `date` | `YYYY-MM-DD` | `2026-09-24` |
|
|
10
|
+
| `time` | `HH:mm` (24 horas) | `14:30` |
|
|
11
|
+
| `datetime` | `YYYY-MM-DDTHH:mm` | `2026-09-24T14:30` |
|
|
12
|
+
|
|
13
|
+
Quando não há valor, o `v-model` é uma `string` vazia (`""`).
|
|
14
|
+
|
|
15
|
+
> [!Warning]
|
|
16
|
+
> Deve ser utilizado no lugar do `<input>` nativo dos tipos `date`, `time` e `datetime-local`.
|
|
17
|
+
|
|
18
|
+
## Propriedades
|
|
19
|
+
|
|
20
|
+
### Tipos
|
|
21
|
+
|
|
22
|
+
A prop `type` define quais seletores são apresentados e o formato do valor. O padrão é `datetime`.
|
|
23
|
+
|
|
24
|
+
```vue
|
|
25
|
+
<template>
|
|
26
|
+
<u-date-time-field v-model="dateValue" label="Data" type="date" />
|
|
27
|
+
<u-date-time-field v-model="timeValue" label="Horário" type="time" />
|
|
28
|
+
<u-date-time-field v-model="dateTimeValue" label="Data e hora" type="datetime" />
|
|
29
|
+
</template>
|
|
30
|
+
|
|
31
|
+
<script lang="ts" setup>
|
|
32
|
+
import { ref } from "vue";
|
|
33
|
+
import { UDateTimeField } from "@nexdom/uimed-vue/components";
|
|
34
|
+
|
|
35
|
+
const dateValue = ref("2026-09-10");
|
|
36
|
+
const timeValue = ref("08:00");
|
|
37
|
+
const dateTimeValue = ref("2026-09-10T08:00");
|
|
38
|
+
</script>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
O seletor é fechado assim que o valor estiver completo:
|
|
42
|
+
|
|
43
|
+
- `date`: ao escolher o dia;
|
|
44
|
+
- `time`: ao escolher os minutos;
|
|
45
|
+
- `datetime`: ao escolher o dia ou os minutos, desde que data e horário já estejam definidos.
|
|
46
|
+
|
|
47
|
+
> [!Tip]
|
|
48
|
+
> No tipo `datetime`, o `v-model` só é atualizado quando data e horário estão definidos. Ao escolher uma nova data, o horário atual é mantido. Se o seletor for fechado com apenas uma das partes escolhida, a seleção incompleta é descartada.
|
|
49
|
+
|
|
50
|
+
### Variantes
|
|
51
|
+
|
|
52
|
+
A prop `variant` define a variação de estilo aplicada ao campo. O padrão é `primary`.
|
|
53
|
+
|
|
54
|
+
```vue
|
|
55
|
+
<template>
|
|
56
|
+
<u-date-time-field label="Primary" variant="primary" />
|
|
57
|
+
<u-date-time-field label="Secondary" variant="secondary" />
|
|
58
|
+
</template>
|
|
59
|
+
|
|
60
|
+
<script lang="ts" setup>
|
|
61
|
+
import { UDateTimeField } from "@nexdom/uimed-vue/components";
|
|
62
|
+
</script>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Labels, placeholders e mensagens
|
|
66
|
+
|
|
67
|
+
As props `label`, `placeholder` e `hint` funcionam da mesma forma que nos [campos de texto](./text-field.md).
|
|
68
|
+
|
|
69
|
+
```vue
|
|
70
|
+
<template>
|
|
71
|
+
<u-date-time-field
|
|
72
|
+
label="Data de nascimento"
|
|
73
|
+
type="date"
|
|
74
|
+
placeholder="dd/mm/aaaa"
|
|
75
|
+
hint="Informe a data do documento"
|
|
76
|
+
/>
|
|
77
|
+
</template>
|
|
78
|
+
|
|
79
|
+
<script lang="ts" setup>
|
|
80
|
+
import { UDateTimeField } from "@nexdom/uimed-vue/components";
|
|
81
|
+
</script>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Limites
|
|
85
|
+
|
|
86
|
+
As props `min` e `max` recebem valores no mesmo formato do `v-model` para o `type` atual. Opções fora do intervalo não podem ser escolhidas no seletor e, se o valor estiver fora do intervalo (por exemplo, quando definido pelo código), uma mensagem de erro é exibida.
|
|
87
|
+
|
|
88
|
+
```vue
|
|
89
|
+
<template>
|
|
90
|
+
<u-date-time-field
|
|
91
|
+
v-model="limitedValue"
|
|
92
|
+
label="Data do retorno"
|
|
93
|
+
type="date"
|
|
94
|
+
min="2026-09-10"
|
|
95
|
+
max="2026-09-20"
|
|
96
|
+
hint="Entre 10/09/2026 e 20/09/2026"
|
|
97
|
+
/>
|
|
98
|
+
<u-button variant="secondary" @click="limitedValue = '2026-09-25'">Definir 25/09/2026</u-button>
|
|
99
|
+
</template>
|
|
100
|
+
|
|
101
|
+
<script lang="ts" setup>
|
|
102
|
+
import { ref } from "vue";
|
|
103
|
+
import { UButton, UDateTimeField } from "@nexdom/uimed-vue/components";
|
|
104
|
+
|
|
105
|
+
const limitedValue = ref("2026-09-15");
|
|
106
|
+
</script>
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
> [!Tip]
|
|
110
|
+
> No tipo `datetime`, a data do limite restringe o calendário, e o horário do limite só restringe o relógio quando a data escolhida é a própria data do limite. Por exemplo, com `min="2026-09-10T08:00"`, os horários antes das 08:00 só ficam indisponíveis no dia 10/09/2026.
|
|
111
|
+
|
|
112
|
+
### Obrigatório
|
|
113
|
+
|
|
114
|
+
A prop `required` impede o envio do [formulário](./form.md) enquanto o campo estiver vazio.
|
|
115
|
+
|
|
116
|
+
```vue
|
|
117
|
+
<template>
|
|
118
|
+
<u-form>
|
|
119
|
+
<u-date-time-field label="Data da consulta" type="date" required />
|
|
120
|
+
<u-button type="submit">Enviar</u-button>
|
|
121
|
+
</u-form>
|
|
122
|
+
</template>
|
|
123
|
+
|
|
124
|
+
<script lang="ts" setup>
|
|
125
|
+
import { UButton, UDateTimeField, UForm } from "@nexdom/uimed-vue/components";
|
|
126
|
+
</script>
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Estados
|
|
130
|
+
|
|
131
|
+
#### Desabilitado
|
|
132
|
+
|
|
133
|
+
Utilize a prop `disabled` para indicar ao usuário que não há possibilidade de interação com o campo.
|
|
134
|
+
|
|
135
|
+
```vue
|
|
136
|
+
<template>
|
|
137
|
+
<u-date-time-field label="Desabilitado" disabled />
|
|
138
|
+
</template>
|
|
139
|
+
|
|
140
|
+
<script lang="ts" setup>
|
|
141
|
+
import { UDateTimeField } from "@nexdom/uimed-vue/components";
|
|
142
|
+
</script>
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
#### Somente leitura
|
|
146
|
+
|
|
147
|
+
Utilize a prop `readonly` para evitar que o valor presente em um campo seja alterado. O seletor não é aberto.
|
|
148
|
+
|
|
149
|
+
```vue
|
|
150
|
+
<template>
|
|
151
|
+
<u-date-time-field model-value="2026-09-24T14:30" label="Somente leitura" readonly />
|
|
152
|
+
</template>
|
|
153
|
+
|
|
154
|
+
<script lang="ts" setup>
|
|
155
|
+
import { UDateTimeField } from "@nexdom/uimed-vue/components";
|
|
156
|
+
</script>
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
#### Carregamento
|
|
160
|
+
|
|
161
|
+
A prop `loading` exibe um indicador de carregamento no campo enquanto ativa. Nesse estado, o campo mantém o rótulo como nome acessível e fica marcado como ocupado, e leitores de tela ignoram o indicador.
|
|
162
|
+
|
|
163
|
+
```vue
|
|
164
|
+
<template>
|
|
165
|
+
<u-date-time-field label="Carregando" loading />
|
|
166
|
+
</template>
|
|
167
|
+
|
|
168
|
+
<script lang="ts" setup>
|
|
169
|
+
import { UDateTimeField } from "@nexdom/uimed-vue/components";
|
|
170
|
+
</script>
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
#### Limpável
|
|
174
|
+
|
|
175
|
+
A prop `clearable` exibe um recurso para limpar o campo, que altera o `v-model` para uma `string` vazia. O recurso não é exibido enquanto o campo estiver somente leitura.
|
|
176
|
+
|
|
177
|
+
```vue
|
|
178
|
+
<template>
|
|
179
|
+
<u-date-time-field v-model="clearableValue" label="Limpável" type="date" clearable />
|
|
180
|
+
</template>
|
|
181
|
+
|
|
182
|
+
<script lang="ts" setup>
|
|
183
|
+
import { ref } from "vue";
|
|
184
|
+
import { UDateTimeField } from "@nexdom/uimed-vue/components";
|
|
185
|
+
|
|
186
|
+
const clearableValue = ref("2026-09-24");
|
|
187
|
+
</script>
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## Eventos
|
|
191
|
+
|
|
192
|
+
### Atualização
|
|
193
|
+
|
|
194
|
+
O evento `update:modelValue` será emitido toda vez que o usuário escolher um valor completo ou limpar o campo, repassando o novo valor como uma `string`.
|
|
195
|
+
|
|
196
|
+
## Playground
|
|
197
|
+
|
|
198
|
+
Experimente as combinações de props do componente.
|
|
199
|
+
|
|
200
|
+
## Ver também
|
|
201
|
+
|
|
202
|
+
Consulte a referência de [API do UDateTimeField](../../api/components/date-time-field.md) para a lista completa de props, slots e eventos.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Conteúdo Expansível
|
|
2
|
+
|
|
3
|
+
O componente padrão para exibir conteúdo que pode ser expandido e recolhido se chama `Details`.
|
|
4
|
+
|
|
5
|
+
> [!Warning]
|
|
6
|
+
> Deve ser utilizado no lugar do `<details>` nativo.
|
|
7
|
+
|
|
8
|
+
O conteúdo inicia recolhido e é exibido ao clicar no título.
|
|
9
|
+
|
|
10
|
+
## Propriedades
|
|
11
|
+
|
|
12
|
+
### Variantes
|
|
13
|
+
|
|
14
|
+
A prop `variant` define a variação de estilo aplicada ao conteúdo expansível. O padrão é `primary`.
|
|
15
|
+
|
|
16
|
+
```vue
|
|
17
|
+
<template>
|
|
18
|
+
<u-details variant="primary" title="Primary">Conteúdo expansível primary</u-details>
|
|
19
|
+
<u-details variant="secondary" title="Secondary">Conteúdo expansível secondary</u-details>
|
|
20
|
+
</template>
|
|
21
|
+
|
|
22
|
+
<script lang="ts" setup>
|
|
23
|
+
import { UDetails } from "@nexdom/uimed-vue/components";
|
|
24
|
+
</script>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Título
|
|
28
|
+
|
|
29
|
+
A prop `title` define o texto exibido no cabeçalho. Ao clicar nele, o conteúdo é expandido ou recolhido.
|
|
30
|
+
|
|
31
|
+
```vue
|
|
32
|
+
<template>
|
|
33
|
+
<u-details title="Mais informações">Conteúdo exibido ao expandir</u-details>
|
|
34
|
+
</template>
|
|
35
|
+
|
|
36
|
+
<script lang="ts" setup>
|
|
37
|
+
import { UDetails } from "@nexdom/uimed-vue/components";
|
|
38
|
+
</script>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Carregamento
|
|
42
|
+
|
|
43
|
+
A prop `loading` exibe um skeleton loader no lugar do conteúdo expansível enquanto uma operação está em andamento.
|
|
44
|
+
|
|
45
|
+
```vue
|
|
46
|
+
<template>
|
|
47
|
+
<u-details title="Carregando..." loading>Conteúdo expansível</u-details>
|
|
48
|
+
</template>
|
|
49
|
+
|
|
50
|
+
<script lang="ts" setup>
|
|
51
|
+
import { UDetails } from "@nexdom/uimed-vue/components";
|
|
52
|
+
</script>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Vários conteúdos expansíveis
|
|
56
|
+
|
|
57
|
+
Cada `Details` é independente: vários podem ficar abertos ao mesmo tempo.
|
|
58
|
+
|
|
59
|
+
```vue
|
|
60
|
+
<template>
|
|
61
|
+
<u-details title="Primeiro">Conteúdo do primeiro</u-details>
|
|
62
|
+
<u-details title="Segundo">Conteúdo do segundo</u-details>
|
|
63
|
+
</template>
|
|
64
|
+
|
|
65
|
+
<script lang="ts" setup>
|
|
66
|
+
import { UDetails } from "@nexdom/uimed-vue/components";
|
|
67
|
+
</script>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Playground
|
|
71
|
+
|
|
72
|
+
Experimente as combinações de props do componente.
|
|
73
|
+
|
|
74
|
+
## Ver também
|
|
75
|
+
|
|
76
|
+
Consulte a referência de [API do UDetails](../../api/components/details.md) para a lista completa de props e slots.
|