@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,51 @@
|
|
|
1
|
+
# O que é UIMed-Vue?
|
|
2
|
+
|
|
3
|
+
É um framework de UI, para [Vuejs](https://vuejs.org/), com diversos componentes e funções reutilizáveis entre eles (_components_ e _composables_).
|
|
4
|
+
|
|
5
|
+
> [!Danger]
|
|
6
|
+
> Construído para atender um design system específico e, portanto, eliminando a necessidade de qualquer esforço para sua estilização.
|
|
7
|
+
>
|
|
8
|
+
> Portanto, evite o uso de CSS ou estilizações paralelas enquanto estiver trabalhando com este framework.
|
|
9
|
+
|
|
10
|
+
## Casos de uso
|
|
11
|
+
|
|
12
|
+
### Componentes
|
|
13
|
+
|
|
14
|
+
São recursos que permitem a elaboração e reutilização de interface gráfica.
|
|
15
|
+
|
|
16
|
+
Os componentes a seguir possuem exemplos práticos de utilização dentro desta documentação.
|
|
17
|
+
|
|
18
|
+
| Recurso | Descrição |
|
|
19
|
+
| ---------------------------------------------------------------------- | ------------------------------------------------------ |
|
|
20
|
+
| [Botões](./components/button.md) | Componente de botão. |
|
|
21
|
+
| [Botões de ícone](./components/icon-button.md) | Componente de botão que exibe apenas um ícone. |
|
|
22
|
+
| [Campos com máscara](./components/mask-field.md) | Componente para campo de texto com máscara. |
|
|
23
|
+
| [Campos com preenchimento automático](./components/autocomplete-field.md) | Componente para autocomplete/combobox. |
|
|
24
|
+
| [Caixas de seleção](./components/checkbox.md) | Componente para caixa de seleção. |
|
|
25
|
+
| [Campos de data e hora](./components/date-time-field.md) | Componente para campo de data e/ou hora. |
|
|
26
|
+
| [Campos de texto](./components/text-field.md) | Componente para campo de texto. |
|
|
27
|
+
| [Componente base](./components/main.md) | Componente raiz. |
|
|
28
|
+
| [Componentes de layout](./components/layout.md) | Componentes para seguir o grid system. |
|
|
29
|
+
| [Agrupador de Conteúdo](./components/section.md) | Componente para agrupar conteúdo. |
|
|
30
|
+
| [Conteúdo Expansível](./components/details.md) | Componente para expandir e recolher conteúdo. |
|
|
31
|
+
| [Formulários](./components/form.md) | Componente de formulário. |
|
|
32
|
+
| [Imagens](./components/img.md) | Componente para apresentação de imagens. |
|
|
33
|
+
| [Janelas modais](./components/dialog.md) | Componente para apresentar conteúdo em janelas modais. |
|
|
34
|
+
| [Links](./components/link.md) | Componente para links de texto. |
|
|
35
|
+
| [Listagens](./components/data-set.md) | Componente para listagem de dados. |
|
|
36
|
+
| [Tabelas](./components/table.md) | Componente para apresentação de dados em tabelas. |
|
|
37
|
+
| [Transição de páginas](./components/page-transition.md) | Componente para animar a troca de páginas. |
|
|
38
|
+
|
|
39
|
+
### Composables
|
|
40
|
+
|
|
41
|
+
São funções que possibilitam a reutilização de recursos entre diversos componentes.
|
|
42
|
+
|
|
43
|
+
As composables a seguir possuem exemplos práticos de utilização dentro desta documentação.
|
|
44
|
+
|
|
45
|
+
| Recurso | Descrição |
|
|
46
|
+
| ---------------------------------------------------------- | ---------------------------------------------------------------------------------- |
|
|
47
|
+
| [Toasts](./composables/use-toast.md) | Composables para apresentar mensagens `toast`. |
|
|
48
|
+
| [RunOrToast](./composables/use-run-or-toast.md) | Composables para executar métodos e apresentar mensagens `toast` em caso de falha. |
|
|
49
|
+
| [Diálogos](./composables/use-dialog.md) | Composables para apresentar diálogos. |
|
|
50
|
+
| [Confirmações](./composables/use-confirm.md) | Composables para executar ações após a confirmação do usuário. |
|
|
51
|
+
| [Alterações não salvas](./composables/use-unsaved-changes.md) | Composables para evitar a perda de alterações não salvas ao sair da página. |
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
# Migrando da v1 para v2
|
|
2
|
+
|
|
3
|
+
A versão 2 do UIMed-Vue introduz uma mudança significativa: todos os componentes exportados agora possuem um prefixo `U`, padronizando a forma como você importa e utiliza os componentes. Além disso, alguns componentes receberam nomes mais descritivos internamente.
|
|
4
|
+
|
|
5
|
+
## Mapa de Renomeação
|
|
6
|
+
|
|
7
|
+
| Nome anterior | Novo nome |
|
|
8
|
+
| ------------- | ----------------- |
|
|
9
|
+
| `Btn` | `UButton` |
|
|
10
|
+
| `Frm` | `UForm` |
|
|
11
|
+
| `Root` | `UMain` |
|
|
12
|
+
| `ContentSet` | `USection` |
|
|
13
|
+
| `Content` | `USectionContent` |
|
|
14
|
+
| `Container` | `UContainer` |
|
|
15
|
+
| `Row` | `URow` |
|
|
16
|
+
| `Column` | `UColumn` |
|
|
17
|
+
| `TextField` | `UTextField` |
|
|
18
|
+
|
|
19
|
+
## Antes e Depois
|
|
20
|
+
|
|
21
|
+
### Importações
|
|
22
|
+
|
|
23
|
+
**Antes (v1):**
|
|
24
|
+
|
|
25
|
+
```js
|
|
26
|
+
import { Root, Btn, Row, Column, TextField } from "@nexdom/uimed-vue/components";
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Depois (v2):**
|
|
30
|
+
|
|
31
|
+
```js
|
|
32
|
+
import { UMain, UButton, URow, UColumn, UTextField } from "@nexdom/uimed-vue/components";
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Template
|
|
36
|
+
|
|
37
|
+
**Antes (v1):**
|
|
38
|
+
|
|
39
|
+
```vue
|
|
40
|
+
<template>
|
|
41
|
+
<root>
|
|
42
|
+
<row>
|
|
43
|
+
<column>
|
|
44
|
+
<btn @click="handleClick">Clique aqui</btn>
|
|
45
|
+
</column>
|
|
46
|
+
</row>
|
|
47
|
+
</root>
|
|
48
|
+
</template>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Depois (v2):**
|
|
52
|
+
|
|
53
|
+
```vue
|
|
54
|
+
<template>
|
|
55
|
+
<u-main>
|
|
56
|
+
<u-row>
|
|
57
|
+
<u-column>
|
|
58
|
+
<u-button @click="handleClick">Clique aqui</u-button>
|
|
59
|
+
</u-column>
|
|
60
|
+
</u-row>
|
|
61
|
+
</u-main>
|
|
62
|
+
</template>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Notificações do menu superior
|
|
66
|
+
|
|
67
|
+
A propriedade `date` das notificações do menu superior (`appBar.notifications`) foi substituída por `when`, um texto livre apresentado exatamente como informado. Assim, a aplicação passa a decidir como indicar quando a notificação foi gerada (exemplo: `"10:30"`, `"Ontem"` ou `"Há 5 minutos"`).
|
|
68
|
+
|
|
69
|
+
**Antes (v1):**
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
const appBar = {
|
|
73
|
+
title: "Minha aplicação",
|
|
74
|
+
notifications: [{ title: "Nova versão", date: new Date() }],
|
|
75
|
+
};
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Depois (v2):**
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
const appBar = {
|
|
82
|
+
title: "Minha aplicação",
|
|
83
|
+
notifications: [{ title: "Nova versão", when: "10:30" }],
|
|
84
|
+
};
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Para manter a formatação apresentada na v1 (horário para notificações de hoje, "Ontem" para as de ontem e a data completa para as demais), utilize as funções de [`@nexdom/shared`](https://nexdom-healthtech.github.io/shared/):
|
|
88
|
+
|
|
89
|
+
```ts
|
|
90
|
+
import { formatDateTime, toPeriodInterval } from "@nexdom/shared/utils";
|
|
91
|
+
|
|
92
|
+
function formatNotificationWhen(date: Date) {
|
|
93
|
+
const interval = toPeriodInterval(date);
|
|
94
|
+
const wasThisMonth = interval.months === 0 && interval.years === 0;
|
|
95
|
+
|
|
96
|
+
if (wasThisMonth && interval.days === 0) return formatDateTime(date, "HH:mm");
|
|
97
|
+
if (wasThisMonth && interval.days === 1) return "Ontem";
|
|
98
|
+
|
|
99
|
+
return formatDateTime(date, "DD/MM/YYYY");
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const appBar = {
|
|
103
|
+
title: "Minha aplicação",
|
|
104
|
+
notifications: [{ title: "Nova versão", when: formatNotificationWhen(new Date()) }],
|
|
105
|
+
};
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Alinhamento vertical das colunas
|
|
109
|
+
|
|
110
|
+
Na v1, as colunas de uma `Row` eram esticadas até a altura da coluna mais alta da linha. Na v2, a prop `alignY` da `URow` controla esse alinhamento e o padrão passou a ser `"start"`: cada coluna mantém a altura do próprio conteúdo e fica alinhada ao topo. Para manter o comportamento da v1, como em cartões lado a lado que devem ter a mesma altura, utilize `align-y="stretch"` (veja [Alinhamento vertical das colunas](./components/layout.md#alinhamento-vertical-das-colunas)).
|
|
111
|
+
|
|
112
|
+
**Antes (v1):**
|
|
113
|
+
|
|
114
|
+
```vue
|
|
115
|
+
<template>
|
|
116
|
+
<row>
|
|
117
|
+
<column cols="6">
|
|
118
|
+
<content-set title="Consultas" full-height>
|
|
119
|
+
<!-- conteúdo curto -->
|
|
120
|
+
</content-set>
|
|
121
|
+
</column>
|
|
122
|
+
<column cols="6">
|
|
123
|
+
<content-set title="Exames" full-height>
|
|
124
|
+
<!-- conteúdo mais longo -->
|
|
125
|
+
</content-set>
|
|
126
|
+
</column>
|
|
127
|
+
</row>
|
|
128
|
+
</template>
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**Depois (v2):**
|
|
132
|
+
|
|
133
|
+
```vue
|
|
134
|
+
<template>
|
|
135
|
+
<u-row align-y="stretch">
|
|
136
|
+
<u-column cols="6">
|
|
137
|
+
<u-section title="Consultas" full-height>
|
|
138
|
+
<!-- conteúdo curto -->
|
|
139
|
+
</u-section>
|
|
140
|
+
</u-column>
|
|
141
|
+
<u-column cols="6">
|
|
142
|
+
<u-section title="Exames" full-height>
|
|
143
|
+
<!-- conteúdo mais longo -->
|
|
144
|
+
</u-section>
|
|
145
|
+
</u-column>
|
|
146
|
+
</u-row>
|
|
147
|
+
</template>
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Menu de navegação
|
|
151
|
+
|
|
152
|
+
Na v2, o ícone (`icon`) é obrigatório nos itens e grupos do primeiro nível do menu de navegação (`navigationMenu`). Os itens dentro de um grupo continuam sem ícone. Os nomes disponíveis estão em [Ícones](./icons.md).
|
|
153
|
+
|
|
154
|
+
Em telas a partir de 1145px, o menu deixa de ser aberto pelo botão "Menu de navegação" do menu superior, que não é mais exibido: ele fica sempre visível à esquerda do conteúdo, recolhido em uma faixa de 56px com os ícones, e se expande sobre o conteúdo com o mouse, com o foco do teclado ou pelo atalho `Ctrl + K` (veja [Menu de navegação](./components/main.md#menu-de-navegacao)). O conteúdo da página fica 56px mais estreito, e testes automatizados que clicavam no botão para abrir o menu passam a encontrá-lo apenas em telas menores. Em telas menores, o menu continua sendo aberto pelo botão.
|
|
155
|
+
|
|
156
|
+
**Antes (v1):**
|
|
157
|
+
|
|
158
|
+
```ts
|
|
159
|
+
const navigationMenu = {
|
|
160
|
+
items: [
|
|
161
|
+
{ description: "Início", route: "/" },
|
|
162
|
+
{ description: "Cadastros", items: [{ description: "Pacientes", route: "/pacientes" }] },
|
|
163
|
+
],
|
|
164
|
+
};
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**Depois (v2):**
|
|
168
|
+
|
|
169
|
+
```ts
|
|
170
|
+
const navigationMenu = {
|
|
171
|
+
items: [
|
|
172
|
+
{ description: "Início", route: "/", icon: "home" },
|
|
173
|
+
{
|
|
174
|
+
description: "Cadastros",
|
|
175
|
+
icon: "folder",
|
|
176
|
+
items: [{ description: "Pacientes", route: "/pacientes" }],
|
|
177
|
+
},
|
|
178
|
+
],
|
|
179
|
+
};
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Dicas de Migração
|
|
183
|
+
|
|
184
|
+
1. Procure por todas as importações antigas e substitua pelos novos nomes com o prefixo `U`
|
|
185
|
+
2. Atualize todos os templates para usar as novas tags em kebab-case (ex: `<u-button>` em vez de `<btn>`)
|
|
186
|
+
3. Os tipos de props não são mais exportados pela biblioteca. Utilize `ComponentProps`, de [`vue-component-type-helpers`](https://www.npmjs.com/package/vue-component-type-helpers), para obtê-los a partir do componente (veja [Tipagem de props](./getting-started.md#tipagem-de-props))
|
|
187
|
+
4. Substitua a propriedade `date` das notificações do menu superior por `when`, informando o texto já formatado (veja [Notificações do menu superior](#notificacoes-do-menu-superior))
|
|
188
|
+
5. Adicione `align-y="stretch"` às `URow` cujas colunas precisam ter a mesma altura (veja [Alinhamento vertical das colunas](#alinhamento-vertical-das-colunas))
|
|
189
|
+
6. Informe um `icon` em todos os itens e grupos do primeiro nível do menu de navegação, e revise as telas e os testes que contavam com o botão do menu em telas largas (veja [Menu de navegação](#menu-de-navegacao))
|
|
190
|
+
|
|
191
|
+
Para mais informações sobre cada componente, consulte a [Documentação da API](../api/index.md).
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Testes Unitários
|
|
2
|
+
|
|
3
|
+
Testes unitários com o UIMed-Vue são muito simples, pois este framework já vem com plugins que atendem as ferramentas que serão listadas a seguir.
|
|
4
|
+
|
|
5
|
+
## Usando Vitest
|
|
6
|
+
|
|
7
|
+
Para realizar as configurações, atualize seu arquivo `vite.config.ts` da seguinte maneira:
|
|
8
|
+
|
|
9
|
+
```ts [vite.config.ts]
|
|
10
|
+
import { defineConfig } from "vite";
|
|
11
|
+
import { vitestServerPluginUimed } from "@nexdom/uimed-vue/plugins"; // [!code ++]
|
|
12
|
+
|
|
13
|
+
export default defineConfig({
|
|
14
|
+
test: {
|
|
15
|
+
server: vitestServerPluginUimed(), // [!code ++]
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Escrevendo os testes
|
|
21
|
+
|
|
22
|
+
Uma vez que as etapas mencionadas anteriormente foram realizadas, utilize o recurso de testes unitários do uimed-vue para montar os seus componentes `wrapper` através do [`@vue/test-utils`](https://test-utils.vuejs.org/).
|
|
23
|
+
|
|
24
|
+
```ts [hello-world.test.ts]
|
|
25
|
+
import { mount } from "@vue/test-utils";
|
|
26
|
+
import { vueTestUtilsPluginUimed } from "@nexdom/uimed-vue/unit-test"; // [!code ++]
|
|
27
|
+
import HelloWorld from "../hello-world.vue";
|
|
28
|
+
|
|
29
|
+
describe("HelloWorld", () => {
|
|
30
|
+
it("displays message", () => {
|
|
31
|
+
const wrapper = mount(HelloWorld, {
|
|
32
|
+
global: {
|
|
33
|
+
plugins: [vueTestUtilsPluginUimed()], // [!code ++]
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// Verifica se o wrapper/componente contém o texto esperado.
|
|
38
|
+
expect(wrapper.text()).toContain("Olá, Mundo!");
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
O plugin de testes usa o mesmo idioma do `createUimed()`, então os testes veem os mesmos textos em português da aplicação, como os anúncios para leitores de tela e os rótulos da paginação.
|
|
44
|
+
|
|
45
|
+
## Testando código que usa diálogos
|
|
46
|
+
|
|
47
|
+
Os diálogos das composables [`useDialog`](./composables/use-dialog.md) e [`useConfirm`](./composables/use-confirm.md) são exibidos pelo [Componente base](./components/main.md). Em um teste que monta apenas o seu componente, sem o `UMain`, nenhum diálogo é exibido e a `Promise` de `dialog` ou `confirm` não é resolvida.
|
|
48
|
+
|
|
49
|
+
Nos testes unitários, substitua as composables por versões simuladas que respondem pelo usuário:
|
|
50
|
+
|
|
51
|
+
```ts [delete-patient.test.ts]
|
|
52
|
+
import { mount } from "@vue/test-utils";
|
|
53
|
+
import { computed } from "vue";
|
|
54
|
+
import { vueTestUtilsPluginUimed } from "@nexdom/uimed-vue/unit-test";
|
|
55
|
+
import DeletePatient from "../delete-patient.vue";
|
|
56
|
+
|
|
57
|
+
vi.mock(import("@nexdom/uimed-vue/composables"), async (importOriginal) => ({
|
|
58
|
+
...(await importOriginal()),
|
|
59
|
+
// Simula o usuário confirmando: executa a ação como o `confirm` faria
|
|
60
|
+
useConfirm: () => ({
|
|
61
|
+
confirm: vi.fn((_options, action, ...params) => action(...params)),
|
|
62
|
+
isRunning: computed(() => false),
|
|
63
|
+
}),
|
|
64
|
+
// Simula o usuário escolhendo a ação de valor "stay"
|
|
65
|
+
useDialog: () => ({ dialog: vi.fn().mockResolvedValue("stay") }),
|
|
66
|
+
}));
|
|
67
|
+
|
|
68
|
+
describe("DeletePatient", () => {
|
|
69
|
+
it("deletes the patient once confirmed", async () => {
|
|
70
|
+
const wrapper = mount(DeletePatient, {
|
|
71
|
+
global: {
|
|
72
|
+
plugins: [vueTestUtilsPluginUimed()],
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
await wrapper.find("button").trigger("click");
|
|
77
|
+
|
|
78
|
+
// Verifique aqui o efeito da ação confirmada.
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Para simular um cancelamento, faça o `confirm` simulado resolver `false` sem executar a ação, e o `dialog` simulado resolver `undefined`.
|
|
84
|
+
|
|
85
|
+
Para verificar o diálogo em si, prefira testes E2E, que exercitam a aplicação completa, com o `UMain` montado.
|
package/AGENTS.md
DELETED
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
# AGENTS.md
|
|
2
|
-
|
|
3
|
-
## Project
|
|
4
|
-
|
|
5
|
-
`@nexdom/uimed-vue` is a Vue 3 UI component library for NEXDOM applications, built on top of [Vuetify](https://vuetifyjs.com/) and [Material Design 3](https://m3.material.io/). It's published to npm and documented via VitePress at https://nexdom-healthtech.github.io/uimed-vue/.
|
|
6
|
-
|
|
7
|
-
Tooling is built around [Vite+](https://github.com/voidzero-dev/vite-plus) (`vp`/`vpr`/`vpx` CLIs), not raw `vite`/`vitest`/`eslint` invocations.
|
|
8
|
-
|
|
9
|
-
## Using this library in an app
|
|
10
|
-
|
|
11
|
-
These steps are for developers _consuming_ `@nexdom/uimed-vue` in a Vue application (not for contributing to this repo — see the rest of this document for that).
|
|
12
|
-
|
|
13
|
-
### Install
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
vp add @nexdom/uimed-vue
|
|
17
|
-
# But, if you're not using Vite+ yet...
|
|
18
|
-
npm i @nexdom/uimed-vue
|
|
19
|
-
# Or
|
|
20
|
-
pnpm add @nexdom/uimed-vue
|
|
21
|
-
# Or
|
|
22
|
-
yarn add @nexdom/uimed-vue
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
Peer dependencies (`@fontsource/roboto`, `@mdi/font`, `@nexdom/shared`, `resize-observer-polyfill`, `vite-plugin-vuetify`, `vite-plus`, `vue`, `vue-router`, `vuetify`) must be installed alongside it — most package managers install these automatically, but confirm versions match what's declared in `package.json`'s `peerDependencies`.
|
|
26
|
-
|
|
27
|
-
### Setup
|
|
28
|
-
|
|
29
|
-
Add the Vite plugin:
|
|
30
|
-
|
|
31
|
-
```ts
|
|
32
|
-
// vite.config.ts
|
|
33
|
-
import { vitePluginUimed } from "@nexdom/uimed-vue/plugins.ts";
|
|
34
|
-
|
|
35
|
-
// ...
|
|
36
|
-
|
|
37
|
-
plugins: [vue(), vitePluginUimed()];
|
|
38
|
-
|
|
39
|
-
// ...
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
Register the plugin in the Vue app:
|
|
43
|
-
|
|
44
|
-
```ts
|
|
45
|
-
// main.js or main.ts
|
|
46
|
-
import { createApp } from "vue";
|
|
47
|
-
import { createUimed } from "@nexdom/uimed-vue";
|
|
48
|
-
|
|
49
|
-
import App from "./App.vue";
|
|
50
|
-
|
|
51
|
-
const uimed = createUimed();
|
|
52
|
-
|
|
53
|
-
createApp(App).use(uimed).mount("#app");
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
### Usage
|
|
57
|
-
|
|
58
|
-
Place the `Root` component at the top of `App.vue`, then add other components as needed:
|
|
59
|
-
|
|
60
|
-
```vue
|
|
61
|
-
<!-- App.vue -->
|
|
62
|
-
<template>
|
|
63
|
-
<root>
|
|
64
|
-
<!-- ... -->
|
|
65
|
-
</root>
|
|
66
|
-
</template>
|
|
67
|
-
|
|
68
|
-
<script setup lang="ts">
|
|
69
|
-
import { Root } from "@nexdom/uimed-vue/components";
|
|
70
|
-
</script>
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
Never write CSS, classes or any kind of styling. Always use component props.
|
|
74
|
-
|
|
75
|
-
The library doesn't export prop types. Derive them with `ComponentProps` from `vue-component-type-helpers`:
|
|
76
|
-
|
|
77
|
-
```ts
|
|
78
|
-
import type { ComponentProps } from "vue-component-type-helpers";
|
|
79
|
-
import { UMain, USection } from "@nexdom/uimed-vue/components";
|
|
80
|
-
|
|
81
|
-
type MainProps = ComponentProps<typeof UMain>;
|
|
82
|
-
type AppBar = NonNullable<MainProps["appBar"]>;
|
|
83
|
-
type NavigationMenu = NonNullable<MainProps["navigationMenu"]>;
|
|
84
|
-
type SectionAction = NonNullable<ComponentProps<typeof USection>["actions"]>[number];
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
Available entry points: `@nexdom/uimed-vue` (root), `@nexdom/uimed-vue/components`, `@nexdom/uimed-vue/composables`, `@nexdom/uimed-vue/plugins`, `@nexdom/uimed-vue/unit-test` (test helpers, e.g. `vueTestUtilsPluginUimed()` for mounting components with Vuetify in Vitest).
|
|
88
|
-
|
|
89
|
-
Full component/composable reference lives in the [docs](https://nexdom-healthtech.github.io/uimed-vue/).
|
|
90
|
-
|
|
91
|
-
## Contributing to this repo
|
|
92
|
-
|
|
93
|
-
The sections below are for developers working _on_ this library itself.
|
|
94
|
-
|
|
95
|
-
### Dev environment setup
|
|
96
|
-
|
|
97
|
-
This project expects to be opened inside its devcontainer (VSCode). If commands below fail with missing shims/commands, run:
|
|
98
|
-
|
|
99
|
-
```bash
|
|
100
|
-
vp env doctor # diagnose missing parts
|
|
101
|
-
vp env setup # create shims like vpr and vpx
|
|
102
|
-
vp install # install dependencies
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
## Commands
|
|
106
|
-
|
|
107
|
-
- `vpr check` — lint, formatter, and type-check (requires `build`/`pack` to have run first for the type-check step)
|
|
108
|
-
- `vp test --coverage` — unit tests with coverage (Vitest, jsdom, 100% coverage threshold enforced)
|
|
109
|
-
- `vpr test:mutations` — mutation tests (Stryker; thresholds: high 100, low 95, break 95)
|
|
110
|
-
- `vpr test:e2e` — E2E tests (Playwright, runs against the built docs preview site)
|
|
111
|
-
- `vpr depcruise` — architecture/dependency rules (dependency-cruiser)
|
|
112
|
-
- `vp pack` / `vpr build` — build the library
|
|
113
|
-
- `vpr docs` / `vpr docs:dev` — run docs site (imports the lib from `dist`, not `src` — run `vpr dev` in a second terminal to keep `dist` updated while iterating)
|
|
114
|
-
|
|
115
|
-
CI (`.github/workflows/ci.yml`) runs, in order: commitlint on PR commits, `vp pack`, `vpr check`, `vpr depcruise`, `vp test --coverage`, `vpr test:mutations`, `vpr test:e2e`. Match this locally before opening a PR.
|
|
116
|
-
|
|
117
|
-
## Code conventions
|
|
118
|
-
|
|
119
|
-
- All `src` code is written in English. `docs` content is written in Portuguese (aimed at Brazilian users), even though file/dir names stay in English.
|
|
120
|
-
- `docs` must not mention Vuetify
|
|
121
|
-
- A new component/composable must be listed in its guide page (`docs/guide/…`), its API page (`docs/api/…`), both sidebars in `docs/.vitepress/config.ts`, the guide index table (`docs/guide/index.md`) and the API index list (`docs/api/index.md`).
|
|
122
|
-
- Never write CSS, classes or any kind of styling. Always use component props.
|
|
123
|
-
- Path aliases: `@/*` → `src/*`, `@e2e/*` → `e2e/*`.
|
|
124
|
-
- Every public component follows this pattern to block access to internals and give it an editor-hover description:
|
|
125
|
-
|
|
126
|
-
```vue
|
|
127
|
-
<script lang="ts">
|
|
128
|
-
/**
|
|
129
|
-
* A short description of the component, shown when hovering it in the
|
|
130
|
-
* editor.
|
|
131
|
-
*/
|
|
132
|
-
export default {
|
|
133
|
-
inheritAttrs: false,
|
|
134
|
-
};
|
|
135
|
-
</script>
|
|
136
|
-
|
|
137
|
-
<script setup lang="ts">
|
|
138
|
-
// component's implementation
|
|
139
|
-
</script>
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
- Component layout: `src/components/<name>/<name>.vue`, `types.ts` for prop/option types, `__tests__/<name>.test.ts` for unit tests. Composables follow the same shape under `src/composables/<name>/`.
|
|
143
|
-
- Public components/composables/types are re-exported from `src/components/index.ts` and `src/composables/index.ts`.
|
|
144
|
-
- Every publicly exported component must use the `U` prefix on its export identifier (e.g., `UButton`, `UMain`), while internal file names and component names remain unprefixed.
|
|
145
|
-
- Use [JSDoc](https://jsdoc.app/about-getting-started) on every method/prop/type intended to be part of the public API — it's the primary documentation surface and supports markdown/code examples.
|
|
146
|
-
- Known workarounds (see CONTRIBUTING.md before touching related config): `stryker-vue-ignorer` patches a Stryker/Vue macro-hoisting issue; `vue-tsc` is used for type-check instead of Vite+'s built-in one due to an oxlint/Vue support gap. Both are meant to be removed once their upstream issues are fixed — don't build further on top of them without checking if they're still needed.
|
|
147
|
-
|
|
148
|
-
## Testing conventions
|
|
149
|
-
|
|
150
|
-
- Unit tests use Vitest + `@vue/test-utils`, with `vueTestUtilsPluginUimed()` from `@/unit-test.ts` to mount a Vuetify instance.
|
|
151
|
-
- Global unit test setup (`src/__tests__/setup.ts`) stubs `visualViewport`, uses fake timers, and silences `console.error/warn/log`.
|
|
152
|
-
- Coverage threshold is 100%; mutation testing threshold is 100% (break at 100). Don't add code paths without covering tests.
|
|
153
|
-
- E2E tests (Playwright, `e2e/`) run against the built docs preview (`http://localhost:4173/uimed-vue/`). Snapshots/screenshots live under `__snapshots__`/`__screenshot__` next to each spec.
|
|
154
|
-
|
|
155
|
-
## Git workflow
|
|
156
|
-
|
|
157
|
-
- Trunk-based development. `main` is the only long-lived branch (`beta`/`alpha` exist only for pre-release/prototype work — see CONTRIBUTING.md for when to use them). `main`, `beta`, `alpha` are all protected against direct pushes.
|
|
158
|
-
- Short-lived branches are named after their intention (e.g. `fix-some-method-behavior`) and are deleted after merging back via PR.
|
|
159
|
-
- Commit messages MUST follow [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) — enforced by commitlint in CI. Recent examples: `feat(components): ...`, `fix(composables): ...`, `test(e2e): ...`, `docs(root): ...`, `chore: ...`.
|
|
160
|
-
- Releases are automated via `semantic-release` (conventional-commits preset) — don't hand-edit versions/changelogs.
|
package/CLAUDE.md
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
@AGENTS.md
|
package/dist/types-BPXXtbmW.d.ts
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { computed, ref, toValue } from "vue";
|
|
2
|
-
const colorToVuetifyColor = {
|
|
3
|
-
primary: "primary",
|
|
4
|
-
secondary: "secondary",
|
|
5
|
-
positive: "success",
|
|
6
|
-
informative: "info",
|
|
7
|
-
caution: "warning",
|
|
8
|
-
danger: "error"
|
|
9
|
-
};
|
|
10
|
-
//#endregion
|
|
11
|
-
//#region src/composables/colors/use-vuetify-color.ts
|
|
12
|
-
function useVuetifyColor(color) {
|
|
13
|
-
return computed(() => {
|
|
14
|
-
const colorValue = toValue(color);
|
|
15
|
-
return colorValue ? colorToVuetifyColor[colorValue] : colorToVuetifyColor.primary;
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
//#endregion
|
|
19
|
-
//#region src/composables/dialogs/use-toast.ts
|
|
20
|
-
const messages = ref([]);
|
|
21
|
-
/**
|
|
22
|
-
* Composable which returns a function to display toast messages.
|
|
23
|
-
*
|
|
24
|
-
* @example
|
|
25
|
-
* ```ts
|
|
26
|
-
* const { toast } = useToast();
|
|
27
|
-
* toast({ message: "Hello, World!" });
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
function useToast() {
|
|
31
|
-
return { toast };
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Displays a toast message.
|
|
35
|
-
* @param {ToastOptions} options - Options for the toast message.
|
|
36
|
-
*
|
|
37
|
-
* @example
|
|
38
|
-
* ```ts
|
|
39
|
-
* toast({ message: "Hello, World!" });
|
|
40
|
-
* ```
|
|
41
|
-
*/
|
|
42
|
-
function toast(options) {
|
|
43
|
-
const text = options.message;
|
|
44
|
-
const color = useVuetifyColor(options.color ?? "informative");
|
|
45
|
-
const toastMessage = {
|
|
46
|
-
text,
|
|
47
|
-
color: color.value,
|
|
48
|
-
prependIcon: `$${color.value}`
|
|
49
|
-
};
|
|
50
|
-
messages.value.push(toastMessage);
|
|
51
|
-
}
|
|
52
|
-
//#endregion
|
|
53
|
-
export { useToast as n, useVuetifyColor as r, messages as t };
|