@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,42 @@
|
|
|
1
|
+
# UTextField
|
|
2
|
+
|
|
3
|
+
Componente para utilização de campos de text.
|
|
4
|
+
|
|
5
|
+
## Props
|
|
6
|
+
|
|
7
|
+
| Prop | Tipo | Padrão | Descrição |
|
|
8
|
+
| ------------- | ------------------------------------------------------------------ | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
9
|
+
| `modelValue` | `string` | `""` | Valor digitado no campo. |
|
|
10
|
+
| `variant` | `"primary" \| "secondary"` | `"primary"` | Aplica uma variação de estilo distinta ao campo. |
|
|
11
|
+
| `type` | `"text" \| "phone" \| "email" \| "url" \| "password" \| "search" ` | `"text"` | Ajusta o tipo de campo de texto. Com `password`, exibe o ícone "Mostrar senha", que alterna entre mostrar e ocultar o valor. |
|
|
12
|
+
| `label` | `string` | | Título dado ao campo. |
|
|
13
|
+
| `placeholder` | `string` | | Exemplo de valor para preenchimento do campo. |
|
|
14
|
+
| `hint` | `string` | | Dica, instrução ou mensagem relacionada ao campo. |
|
|
15
|
+
| `required` | `boolean` | `false` | Torna o campo obrigatório para a submissão do formulário. |
|
|
16
|
+
| `disabled` | `boolean` | `false` | Remove a possibilidade de interação com o campo. |
|
|
17
|
+
| `readonly` | `boolean` | `false` | Remove a possibilidade de edição do campo. |
|
|
18
|
+
| `loading` | `boolean` | `false` | Exibe um indicador de carregamento. O campo mantém o rótulo como nome acessível e fica marcado como ocupado, e leitores de tela ignoram o indicador. |
|
|
19
|
+
| `clearable` | `boolean` | `false` | Exibe recurso para limpar o campo. O valor padrão muda para `true` quando o `type` é `search`. |
|
|
20
|
+
| `dataTestid` | `string` | | Aplica atributo `data-testid` para testes sobre o componente. |
|
|
21
|
+
|
|
22
|
+
## Eventos
|
|
23
|
+
|
|
24
|
+
| Event | Retorno | Descrição |
|
|
25
|
+
| ------------------- | -------- | ------------------------------------------------------------------ |
|
|
26
|
+
| `update:modelValue` | `string` | Retorna o novo valor do campo sempre que o usuário altera o mesmo. |
|
|
27
|
+
|
|
28
|
+
## Exemplo
|
|
29
|
+
|
|
30
|
+
```vue
|
|
31
|
+
<template>
|
|
32
|
+
<u-text-field v-model="name" label="Nome" />
|
|
33
|
+
Olá, {{ name }}!
|
|
34
|
+
</template>
|
|
35
|
+
|
|
36
|
+
<script lang="ts" setup>
|
|
37
|
+
import { ref } from "vue";
|
|
38
|
+
import { UTextField } from "@nexdom/uimed-vue/components";
|
|
39
|
+
|
|
40
|
+
const name = ref("");
|
|
41
|
+
</script>
|
|
42
|
+
```
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# useConfirm
|
|
2
|
+
|
|
3
|
+
Composable para execução de ações somente após a confirmação do usuário em um diálogo.
|
|
4
|
+
|
|
5
|
+
## Tipo
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
type ColorVariant = "primary" | "secondary" | "positive" | "informative" | "caution" | "danger";
|
|
9
|
+
|
|
10
|
+
interface ConfirmOptions {
|
|
11
|
+
title?: string;
|
|
12
|
+
message: string;
|
|
13
|
+
confirmText?: string;
|
|
14
|
+
cancelText?: string;
|
|
15
|
+
color?: ColorVariant;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function useConfirm(): {
|
|
19
|
+
confirm: <F extends (...args: Parameters<F>) => PromiseLike<Awaited<ReturnType<F>>>>(
|
|
20
|
+
options: ConfirmOptions,
|
|
21
|
+
action: F,
|
|
22
|
+
...params: Parameters<F>
|
|
23
|
+
) => Promise<Awaited<ReturnType<F>> | false>;
|
|
24
|
+
isRunning: import("vue").ComputedRef<boolean>;
|
|
25
|
+
};
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Detalhes
|
|
29
|
+
|
|
30
|
+
Retorna uma função (`confirm`) e uma [`computed`](https://vuejs.org/guide/essentials/computed.html) (`isRunning`) para monitorar a execução da ação. Cada chamada de `useConfirm` tem o seu próprio `isRunning`.
|
|
31
|
+
|
|
32
|
+
A função (`confirm`) apresenta um diálogo com os botões "Cancelar" e "Confirmar". A ação (`action`) é obrigatória e só é executada, com os parâmetros seguintes (`params`), depois que o usuário clica em "Confirmar". Enquanto ela executa:
|
|
33
|
+
|
|
34
|
+
- o botão de confirmação apresenta um indicador de carregamento;
|
|
35
|
+
- o botão de cancelamento fica desabilitado;
|
|
36
|
+
- o diálogo não pode ser fechado;
|
|
37
|
+
- `isRunning` é `true`.
|
|
38
|
+
|
|
39
|
+
Ao terminar a execução, o diálogo fecha. Se houver qualquer erro durante a execução, a mensagem do erro é apresentada em um [`toast`](./use-toast.md), assim como no [`useRunOrToast`](./use-run-or-toast.md).
|
|
40
|
+
|
|
41
|
+
Os diálogos de `confirm` compartilham a fila de diálogos do [`useDialog`](./use-dialog.md).
|
|
42
|
+
|
|
43
|
+
### `ConfirmOptions`
|
|
44
|
+
|
|
45
|
+
| Opção | Tipo | Padrão | Descrição |
|
|
46
|
+
| ------------- | -------------------------------------------------------------------------------------------- | ------------- | ---------------------------------------------------------------- |
|
|
47
|
+
| `title` | `string` | | Título do diálogo, em texto simples (HTML não é interpretado). |
|
|
48
|
+
| `message` | `string` | | Mensagem do diálogo, em texto simples (HTML não é interpretado). |
|
|
49
|
+
| `confirmText` | `string` | `"Confirmar"` | Texto do botão de confirmação. |
|
|
50
|
+
| `cancelText` | `string` | `"Cancelar"` | Texto do botão de cancelamento. |
|
|
51
|
+
| `color` | `"primary"` \| `"secondary"` \| `"positive"` \| `"informative"` \| `"caution"` \| `"danger"` | `"primary"` | Cor do botão de confirmação. |
|
|
52
|
+
|
|
53
|
+
### Retorno
|
|
54
|
+
|
|
55
|
+
`confirm` resolve o retorno da ação, ou `false` quando:
|
|
56
|
+
|
|
57
|
+
- a ação falha;
|
|
58
|
+
- o usuário clica no botão de cancelamento;
|
|
59
|
+
- o usuário pressiona a tecla `Esc` ou clica fora do diálogo;
|
|
60
|
+
- o usuário usa o botão "voltar" do navegador, em aplicações que usam o [Vue Router](https://router.vuejs.org/), exceto quando ele leva a uma página aberta com `router.replace` (como a página pela qual o usuário entrou na aplicação).
|
|
61
|
+
|
|
62
|
+
### Acessibilidade
|
|
63
|
+
|
|
64
|
+
O diálogo usa o papel `alertdialog`. O foco inicia no botão de cancelamento, fica restrito ao diálogo enquanto ele estiver aberto e volta ao elemento de origem quando ele fecha.
|
|
65
|
+
|
|
66
|
+
## Exemplo
|
|
67
|
+
|
|
68
|
+
```vue
|
|
69
|
+
<template>
|
|
70
|
+
<u-main>
|
|
71
|
+
<!-- ... -->
|
|
72
|
+
</u-main>
|
|
73
|
+
</template>
|
|
74
|
+
<script lang="ts" setup>
|
|
75
|
+
import { UMain } from "@nexdom/uimed-vue/components";
|
|
76
|
+
import { useConfirm } from "@nexdom/uimed-vue/composables";
|
|
77
|
+
|
|
78
|
+
const { confirm, isRunning } = useConfirm();
|
|
79
|
+
|
|
80
|
+
const removed = await confirm(
|
|
81
|
+
{
|
|
82
|
+
title: "Excluir paciente",
|
|
83
|
+
message: "Esta ação não pode ser desfeita.",
|
|
84
|
+
confirmText: "Excluir",
|
|
85
|
+
color: "danger",
|
|
86
|
+
},
|
|
87
|
+
() => api.deletePatient(id),
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
if (removed === false) {
|
|
91
|
+
// Executa algo quando o usuário cancela ou a ação falha.
|
|
92
|
+
} else {
|
|
93
|
+
// Executa algo quando a ação executa com sucesso.
|
|
94
|
+
}
|
|
95
|
+
</script>
|
|
96
|
+
```
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# useDialog
|
|
2
|
+
|
|
3
|
+
Composable para apresentação de diálogos.
|
|
4
|
+
|
|
5
|
+
## Tipo
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
type ButtonVariant = "primary" | "secondary" | "ghost";
|
|
9
|
+
|
|
10
|
+
type ColorVariant = "primary" | "secondary" | "positive" | "informative" | "caution" | "danger";
|
|
11
|
+
|
|
12
|
+
interface DialogAction<T extends string = string> {
|
|
13
|
+
text: string;
|
|
14
|
+
value: T;
|
|
15
|
+
variant?: ButtonVariant;
|
|
16
|
+
color?: ColorVariant;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
interface DialogOptions<T extends string = string> {
|
|
20
|
+
title?: string;
|
|
21
|
+
message: string;
|
|
22
|
+
actions?: DialogAction<T>[];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function dialog<T extends string = never>(options: DialogOptions<T>): Promise<T | undefined>;
|
|
26
|
+
|
|
27
|
+
function useDialog(): {
|
|
28
|
+
dialog: typeof dialog;
|
|
29
|
+
};
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Detalhes
|
|
33
|
+
|
|
34
|
+
Retorna uma função (`dialog`) para exibir diálogos. Ela devolve uma `Promise` que resolve quando o diálogo é fechado.
|
|
35
|
+
|
|
36
|
+
Os diálogos são apresentados um de cada vez, na ordem em que foram solicitados, incluindo os de [`useConfirm`](./use-confirm.md). Diálogos solicitados enquanto nenhum [`UMain`](../components/main.md) estiver montado aguardam até que um seja montado. Havendo mais de um `UMain` na página, apenas o primeiro montado apresenta os diálogos.
|
|
37
|
+
|
|
38
|
+
### `DialogOptions`
|
|
39
|
+
|
|
40
|
+
| Opção | Tipo | Padrão | Descrição |
|
|
41
|
+
| --------- | --------------------------------- | ---------------------- | --------------------------------------------------------------------------- |
|
|
42
|
+
| `title` | `string` | | Título do diálogo, em texto simples (HTML não é interpretado). |
|
|
43
|
+
| `message` | `string` | | Mensagem do diálogo, em texto simples (HTML não é interpretado). |
|
|
44
|
+
| `actions` | [`DialogAction[]`](#dialogaction) | `[{ text: "Fechar" }]` | Botões apresentados no rodapé do diálogo, alinhados à direita, nesta ordem. |
|
|
45
|
+
|
|
46
|
+
### `DialogAction`
|
|
47
|
+
|
|
48
|
+
| Opção | Tipo | Padrão | Descrição |
|
|
49
|
+
| --------- | -------------------------------------------------------------------------------------------- | -------------------------------------------- | ------------------------------------------------------ |
|
|
50
|
+
| `text` | `string` | | Texto do botão. |
|
|
51
|
+
| `value` | `string` | | Valor devolvido por `dialog` quando o botão é clicado. |
|
|
52
|
+
| `variant` | `"primary"` \| `"secondary"` \| `"ghost"` | `"ghost"`, ou `"primary"` para a última ação | Variante do botão. |
|
|
53
|
+
| `color` | `"primary"` \| `"secondary"` \| `"positive"` \| `"informative"` \| `"caution"` \| `"danger"` | `"primary"` | Cor do botão. |
|
|
54
|
+
|
|
55
|
+
### Retorno
|
|
56
|
+
|
|
57
|
+
`dialog` resolve o `value` da ação clicada, ou `undefined` quando o diálogo é fechado:
|
|
58
|
+
|
|
59
|
+
- pelo botão padrão "Fechar";
|
|
60
|
+
- pela tecla `Esc`;
|
|
61
|
+
- por um clique fora do diálogo;
|
|
62
|
+
- pelo botão "voltar" do navegador, em aplicações que usam o [Vue Router](https://router.vuejs.org/), exceto quando ele leva a uma página aberta com `router.replace` (como a página pela qual o usuário entrou na aplicação).
|
|
63
|
+
|
|
64
|
+
### Acessibilidade
|
|
65
|
+
|
|
66
|
+
O foco inicia na primeira ação, fica restrito ao diálogo enquanto ele estiver aberto e volta ao elemento de origem quando ele fecha. O diálogo é identificado pelo título (ou pela mensagem, quando não houver título) e descrito pela mensagem.
|
|
67
|
+
|
|
68
|
+
## Exemplo
|
|
69
|
+
|
|
70
|
+
```vue
|
|
71
|
+
<template>
|
|
72
|
+
<u-main>
|
|
73
|
+
<!-- ... -->
|
|
74
|
+
</u-main>
|
|
75
|
+
</template>
|
|
76
|
+
<script lang="ts" setup>
|
|
77
|
+
import { UMain } from "@nexdom/uimed-vue/components";
|
|
78
|
+
import { useDialog } from "@nexdom/uimed-vue/composables";
|
|
79
|
+
|
|
80
|
+
const { dialog } = useDialog();
|
|
81
|
+
|
|
82
|
+
const answer = await dialog({
|
|
83
|
+
title: "Sessão expirando",
|
|
84
|
+
message: "Deseja continuar conectado?",
|
|
85
|
+
actions: [
|
|
86
|
+
{ text: "Sair", value: "sair" },
|
|
87
|
+
{ text: "Continuar conectado", value: "continuar" },
|
|
88
|
+
],
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
if (answer === "sair") {
|
|
92
|
+
// Executa algo quando o usuário escolhe sair.
|
|
93
|
+
}
|
|
94
|
+
</script>
|
|
95
|
+
```
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# useRunOrToast
|
|
2
|
+
|
|
3
|
+
Composable para execução de métodos assíncronos e apresentação de mensagens, tipo _toast_, em caso de falha.
|
|
4
|
+
|
|
5
|
+
## Tipo
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
function useRunOrToast(): {
|
|
9
|
+
run: <T extends (...args: Parameters<T>) => PromiseLike<Awaited<ReturnType<T>>>>(
|
|
10
|
+
toRun: T,
|
|
11
|
+
...params: Parameters<T>
|
|
12
|
+
) => Promise<Awaited<ReturnType<T>> | false>;
|
|
13
|
+
isRunning: import("vue").ComputedRef<boolean>;
|
|
14
|
+
};
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Detalhes
|
|
18
|
+
|
|
19
|
+
Retorna uma função (`run`) e uma [`computed`](https://vuejs.org/guide/essentials/computed.html) (`isRunning`) para monitorar a execução da função.
|
|
20
|
+
|
|
21
|
+
A função (`run`) espera receber um parâmetro com a função que deverá ser executada (`callback`), então devolverá o retorno dessa função.
|
|
22
|
+
|
|
23
|
+
Se houver qualquer erro durante a execução da função (`run`), a mesma irá chamar o [`toast`](./use-toast.md) e apresentar o erro, retornando `false` em seguida.
|
|
24
|
+
|
|
25
|
+
## Exemplo
|
|
26
|
+
|
|
27
|
+
```vue
|
|
28
|
+
<template>
|
|
29
|
+
<u-main>
|
|
30
|
+
<!-- ... -->
|
|
31
|
+
</u-main>
|
|
32
|
+
</template>
|
|
33
|
+
<script lang="ts" setup>
|
|
34
|
+
import { UMain } from "@nexdom/uimed-vue/components";
|
|
35
|
+
import { useRunOrToast } from "@nexdom/uimed-vue/composables";
|
|
36
|
+
|
|
37
|
+
const { run, isRunning } = useRunOrToast();
|
|
38
|
+
|
|
39
|
+
// Apresenta: false
|
|
40
|
+
console.log(isRunning.value);
|
|
41
|
+
|
|
42
|
+
const promise = run(() => someFunction(param1, param2));
|
|
43
|
+
|
|
44
|
+
// Apresenta: true
|
|
45
|
+
console.log(isRunning.value);
|
|
46
|
+
|
|
47
|
+
const response = await promise;
|
|
48
|
+
|
|
49
|
+
// Apresenta: false
|
|
50
|
+
console.log(isRunning.value);
|
|
51
|
+
|
|
52
|
+
if (response === false) {
|
|
53
|
+
// Executa algo em caso de falha no método.
|
|
54
|
+
} else {
|
|
55
|
+
// Executa algo quando o método executa com sucesso.
|
|
56
|
+
}
|
|
57
|
+
</script>
|
|
58
|
+
```
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# useToast
|
|
2
|
+
|
|
3
|
+
Composable para apresentação de mensagens tipo _toast_.
|
|
4
|
+
|
|
5
|
+
## Tipo
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
type FeedbackColorVariant = "positive" | "informative" | "caution" | "danger";
|
|
9
|
+
|
|
10
|
+
interface ToastOptions {
|
|
11
|
+
message: string;
|
|
12
|
+
color?: FeedbackColorVariant;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function toast(options: ToastOptions): void;
|
|
16
|
+
|
|
17
|
+
function useToast(): {
|
|
18
|
+
toast: typeof toast;
|
|
19
|
+
};
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Detalhes
|
|
23
|
+
|
|
24
|
+
Retorna uma função (`toast`) para exibir novas mensagens _toast_. As mensagens são apresentadas pelo [`UMain`](../components/main.md), que precisa estar montado na página.
|
|
25
|
+
|
|
26
|
+
### `ToastOptions`
|
|
27
|
+
|
|
28
|
+
| Opção | Tipo | Padrão | Descrição |
|
|
29
|
+
| --------- | ------------------------------------------------------------ | --------------- | --------------------------- |
|
|
30
|
+
| `message` | `string` | | Texto apresentado no toast. |
|
|
31
|
+
| `color` | `"positive"` \| `"informative"` \| `"caution"` \| `"danger"` | `"informative"` | Cor do toast. |
|
|
32
|
+
|
|
33
|
+
## Exemplo
|
|
34
|
+
|
|
35
|
+
```vue
|
|
36
|
+
<template>
|
|
37
|
+
<u-main>
|
|
38
|
+
<!-- ... -->
|
|
39
|
+
</u-main>
|
|
40
|
+
</template>
|
|
41
|
+
<script lang="ts" setup>
|
|
42
|
+
import { UMain } from "@nexdom/uimed-vue/components";
|
|
43
|
+
import { useToast } from "@nexdom/uimed-vue/composables";
|
|
44
|
+
|
|
45
|
+
const { toast } = useToast();
|
|
46
|
+
toast({ message: "Olá, Toast!" });
|
|
47
|
+
</script>
|
|
48
|
+
```
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# useUnsavedChanges
|
|
2
|
+
|
|
3
|
+
Composable para evitar a perda de alterações não salvas de um formulário ao sair da página.
|
|
4
|
+
|
|
5
|
+
## Tipo
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
type ColorVariant = "primary" | "secondary" | "positive" | "informative" | "caution" | "danger";
|
|
9
|
+
|
|
10
|
+
interface UnsavedChangesValues<T> {
|
|
11
|
+
previous: import("vue").MaybeRefOrGetter<T>;
|
|
12
|
+
current: import("vue").MaybeRefOrGetter<T>;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
interface UnsavedChangesOptions {
|
|
16
|
+
title?: string;
|
|
17
|
+
message?: string;
|
|
18
|
+
confirmText?: string;
|
|
19
|
+
cancelText?: string;
|
|
20
|
+
color?: ColorVariant;
|
|
21
|
+
beforeUnload?: boolean;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function useUnsavedChanges<T>(
|
|
25
|
+
values: UnsavedChangesValues<T>,
|
|
26
|
+
options?: UnsavedChangesOptions,
|
|
27
|
+
): {
|
|
28
|
+
hasChanges: import("vue").ComputedRef<boolean>;
|
|
29
|
+
};
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Detalhes
|
|
33
|
+
|
|
34
|
+
Deve ser chamada no `setup` de um componente. Retorna uma [`computed`](https://vuejs.org/guide/essentials/computed.html) somente leitura (`hasChanges`), que é `true` enquanto o valor original (`previous`) e o valor atual (`current`) forem diferentes.
|
|
35
|
+
|
|
36
|
+
`previous` e `current` aceitam uma `ref`, um getter ou um objeto `reactive`, e são comparados em profundidade:
|
|
37
|
+
|
|
38
|
+
- a ordem das propriedades não importa;
|
|
39
|
+
- uma propriedade com `undefined` é igual a uma propriedade ausente;
|
|
40
|
+
- datas (`Date`) são comparadas pelo horário;
|
|
41
|
+
- listas são comparadas item a item, na mesma ordem;
|
|
42
|
+
- objetos simples (literais ou sem protótipo) são comparados propriedade a propriedade;
|
|
43
|
+
- os demais objetos, como `File`, `Blob`, `Map`, `Set` e instâncias de classes, são comparados por referência;
|
|
44
|
+
- os demais valores são comparados com [`Object.is`](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Object/is), então `null`, `""` e `undefined` são diferentes entre si e `NaN` é igual a `NaN`.
|
|
45
|
+
|
|
46
|
+
Para marcar o formulário como salvo, atribua a `previous` uma cópia do valor atual. Se `previous` e `current` apontarem para o mesmo objeto, `hasChanges` fica sempre `false`.
|
|
47
|
+
|
|
48
|
+
### Navegação
|
|
49
|
+
|
|
50
|
+
Quando o componente é renderizado por um `<RouterView>` do [Vue Router](https://router.vuejs.org/) (diretamente ou dentro de uma página), sair da página com alterações apresenta um diálogo de [confirmação](./use-confirm.md):
|
|
51
|
+
|
|
52
|
+
- "Sair sem salvar" continua a navegação;
|
|
53
|
+
- "Continuar editando", a tecla `Esc` ou um clique fora do diálogo cancelam a navegação.
|
|
54
|
+
|
|
55
|
+
`hasChanges` é lido no momento da navegação, então uma navegação feita logo depois de atualizar `previous` acontece sem diálogo. Enquanto o diálogo estiver aberto, novas navegações reaproveitam a mesma resposta, que vale para a navegação mais recente. Em aplicações com Vue Router e histórico do navegador (`createWebHistory` ou `createWebHashHistory`), o botão "voltar" do navegador passa pela mesma verificação e, com o diálogo aberto, não o fecha (ao contrário do [`useConfirm`](./use-confirm.md)): a resposta passa a valer para o "voltar". Cada chamada de `useUnsavedChanges` com alterações apresenta o seu diálogo.
|
|
56
|
+
|
|
57
|
+
A verificação é removida quando o componente é desmontado. Ela não acontece:
|
|
58
|
+
|
|
59
|
+
- fora de um `<RouterView>` ou em aplicações sem Vue Router;
|
|
60
|
+
- em mudanças apenas nos parâmetros (`params`) ou na consulta (`query`) da mesma rota.
|
|
61
|
+
|
|
62
|
+
O diálogo depende do [`UMain`](../components/main.md): sem ele, o diálogo não aparece e a navegação fica pendente.
|
|
63
|
+
|
|
64
|
+
### Aviso do navegador
|
|
65
|
+
|
|
66
|
+
Com `beforeUnload` ligado (padrão), recarregar a página, fechar a aba ou sair da aplicação por um link externo com alterações apresenta o aviso do próprio navegador. O texto é definido pelo navegador, e o aviso só aparece se o usuário já interagiu com a página. O aviso só é registrado enquanto houver alterações e é removido quando o componente é desmontado ou, dentro de um `<KeepAlive>`, desativado. Alterações feitas enquanto o componente está desativado (por exemplo, por uma requisição que termina depois que o usuário saiu da página) só registram o aviso quando ele é ativado de novo.
|
|
67
|
+
|
|
68
|
+
### `UnsavedChangesOptions`
|
|
69
|
+
|
|
70
|
+
| Opção | Tipo | Padrão | Descrição |
|
|
71
|
+
| -------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
|
|
72
|
+
| `title` | `string` | `"Alterações não salvas"` | Título do diálogo, em texto simples (HTML não é interpretado). |
|
|
73
|
+
| `message` | `string` | `"Existem alterações que ainda não foram salvas. Deseja sair sem salvar?"` | Mensagem do diálogo, em texto simples (HTML não é interpretado). |
|
|
74
|
+
| `confirmText` | `string` | `"Sair sem salvar"` | Texto do botão que continua a navegação. |
|
|
75
|
+
| `cancelText` | `string` | `"Continuar editando"` | Texto do botão que cancela a navegação. |
|
|
76
|
+
| `color` | `"primary"` \| `"secondary"` \| `"positive"` \| `"informative"` \| `"caution"` \| `"danger"` | `"danger"` | Cor do botão que continua a navegação. |
|
|
77
|
+
| `beforeUnload` | `boolean` | `true` | Apresenta o aviso do navegador ao recarregar, fechar a aba ou sair por um link externo. |
|
|
78
|
+
|
|
79
|
+
### Acessibilidade
|
|
80
|
+
|
|
81
|
+
O diálogo usa o papel `alertdialog`. O foco inicia no botão "Continuar editando", fica restrito ao diálogo enquanto ele estiver aberto e volta ao elemento de origem quando ele fecha.
|
|
82
|
+
|
|
83
|
+
## Exemplo
|
|
84
|
+
|
|
85
|
+
```vue
|
|
86
|
+
<template>
|
|
87
|
+
<u-text-field v-model="form.name" label="Nome" />
|
|
88
|
+
<u-button :disabled="!hasChanges" @click="save">Salvar</u-button>
|
|
89
|
+
</template>
|
|
90
|
+
<script lang="ts" setup>
|
|
91
|
+
import { ref, toRaw } from "vue";
|
|
92
|
+
import { UButton, UTextField } from "@nexdom/uimed-vue/components";
|
|
93
|
+
import { useUnsavedChanges } from "@nexdom/uimed-vue/composables";
|
|
94
|
+
|
|
95
|
+
const saved = ref({ name: "Maria" });
|
|
96
|
+
const form = ref(structuredClone(toRaw(saved.value)));
|
|
97
|
+
|
|
98
|
+
const { hasChanges } = useUnsavedChanges({ previous: saved, current: form });
|
|
99
|
+
|
|
100
|
+
async function save() {
|
|
101
|
+
await api.save(form.value);
|
|
102
|
+
// Marca o formulário como salvo
|
|
103
|
+
saved.value = structuredClone(toRaw(form.value));
|
|
104
|
+
}
|
|
105
|
+
</script>
|
|
106
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# APIs Disponíveis
|