@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.
Files changed (222) hide show
  1. package/README.md +1 -1
  2. package/dist/_virtual/_rolldown/runtime.js +7 -0
  3. package/dist/components/app-bar/app-bar.js +5 -0
  4. package/dist/components/app-bar/app-bar.vue_vue_type_script_setup_true_lang.js +286 -0
  5. package/dist/components/app-bar/types.d.ts +96 -0
  6. package/dist/components/button/button.js +5 -0
  7. package/dist/components/button/button.vue.d.ts +31 -0
  8. package/dist/components/button/button.vue_vue_type_script_setup_true_lang.js +97 -0
  9. package/dist/components/button/types.d.ts +65 -0
  10. package/dist/components/data-sets/data-set/data-set.js +5 -0
  11. package/dist/components/data-sets/data-set/data-set.vue.d.ts +47 -0
  12. package/dist/components/data-sets/data-set/data-set.vue_vue_type_script_setup_true_lang.js +157 -0
  13. package/dist/components/data-sets/data-set/types.d.ts +93 -0
  14. package/dist/components/data-sets/data-set-bar.js +5 -0
  15. package/dist/components/data-sets/data-set-bar.vue_vue_type_script_setup_true_lang.js +99 -0
  16. package/dist/components/data-sets/data-set-item/data-set-item.js +5 -0
  17. package/dist/components/data-sets/data-set-item/data-set-item.vue.d.ts +35 -0
  18. package/dist/components/data-sets/data-set-item/data-set-item.vue_vue_type_script_setup_true_lang.js +57 -0
  19. package/dist/components/data-sets/data-set-item/types.d.ts +42 -0
  20. package/dist/components/details/details.js +5 -0
  21. package/dist/components/details/details.vue.d.ts +28 -0
  22. package/dist/components/details/details.vue_vue_type_script_setup_true_lang.js +56 -0
  23. package/dist/components/details/types.d.ts +29 -0
  24. package/dist/components/dialogs/dialog/dialog-host-key.js +10 -0
  25. package/dist/components/dialogs/dialog/dialog.js +5 -0
  26. package/dist/components/dialogs/dialog/dialog.vue.d.ts +36 -0
  27. package/dist/components/dialogs/dialog/dialog.vue_vue_type_script_setup_true_lang.js +112 -0
  28. package/dist/components/dialogs/dialog/types.d.ts +47 -0
  29. package/dist/components/dialogs/dialog-host.js +5 -0
  30. package/dist/components/dialogs/dialog-host.vue_vue_type_script_setup_true_lang.js +81 -0
  31. package/dist/components/dialogs/toast.js +5 -0
  32. package/dist/components/dialogs/toast.vue_vue_type_script_setup_true_lang.js +35 -0
  33. package/dist/components/footer/footer.js +5 -0
  34. package/dist/components/footer/footer.vue_vue_type_script_setup_true_lang.js +31 -0
  35. package/dist/components/footer/types.d.ts +16 -0
  36. package/dist/components/form/form.js +5 -0
  37. package/dist/components/form/form.vue.d.ts +32 -0
  38. package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js +37 -0
  39. package/dist/components/form/types.d.ts +15 -0
  40. package/dist/components/grid/column/column.js +5 -0
  41. package/dist/components/grid/column/column.vue.d.ts +33 -0
  42. package/dist/components/grid/column/column.vue_vue_type_script_setup_true_lang.js +45 -0
  43. package/dist/components/grid/column/types.d.ts +27 -0
  44. package/dist/components/grid/container/container.js +5 -0
  45. package/dist/components/grid/container/container.vue.d.ts +27 -0
  46. package/dist/components/grid/container/container.vue_vue_type_script_setup_true_lang.js +33 -0
  47. package/dist/components/grid/container/types.d.ts +17 -0
  48. package/dist/components/grid/row/row.js +5 -0
  49. package/dist/components/grid/row/row.vue.d.ts +29 -0
  50. package/dist/components/grid/row/row.vue_vue_type_script_setup_true_lang.js +61 -0
  51. package/dist/components/grid/row/types.d.ts +63 -0
  52. package/dist/components/icon-button/icon-button.js +5 -0
  53. package/dist/components/icon-button/icon-button.vue.d.ts +23 -0
  54. package/dist/components/icon-button/icon-button.vue_vue_type_script_setup_true_lang.js +51 -0
  55. package/dist/components/icon-button/types.d.ts +32 -0
  56. package/dist/components/img/img.js +5 -0
  57. package/dist/components/img/img.vue.d.ts +23 -0
  58. package/dist/components/img/img.vue_vue_type_script_setup_true_lang.js +61 -0
  59. package/dist/components/img/types.d.ts +43 -0
  60. package/dist/components/inputs/autocomplete-field/autocomplete-field.js +5 -0
  61. package/dist/components/inputs/autocomplete-field/autocomplete-field.vue.d.ts +33 -0
  62. package/dist/components/inputs/autocomplete-field/autocomplete-field.vue_vue_type_script_setup_true_lang.js +161 -0
  63. package/dist/components/inputs/autocomplete-field/types.d.ts +84 -0
  64. package/dist/components/inputs/checkbox/checkbox.js +5 -0
  65. package/dist/components/inputs/checkbox/checkbox.vue.d.ts +33 -0
  66. package/dist/components/inputs/checkbox/checkbox.vue_vue_type_script_setup_true_lang.js +71 -0
  67. package/dist/components/inputs/checkbox/types.d.ts +35 -0
  68. package/dist/components/inputs/date-time-field/date-time-field.js +5 -0
  69. package/dist/components/inputs/date-time-field/date-time-field.vue.d.ts +32 -0
  70. package/dist/components/inputs/date-time-field/date-time-field.vue_vue_type_script_setup_true_lang.js +205 -0
  71. package/dist/components/inputs/date-time-field/types.d.ts +84 -0
  72. package/dist/components/inputs/field-loader.js +5 -0
  73. package/dist/components/inputs/field-loader.vue_vue_type_script_setup_true_lang.js +30 -0
  74. package/dist/components/inputs/mask-field/mask-field.js +5 -0
  75. package/dist/components/inputs/mask-field/mask-field.vue.d.ts +32 -0
  76. package/dist/components/inputs/mask-field/mask-field.vue_vue_type_script_setup_true_lang.js +120 -0
  77. package/dist/components/inputs/mask-field/types.d.ts +118 -0
  78. package/dist/components/inputs/text-field/text-field.js +5 -0
  79. package/dist/components/inputs/text-field/text-field.vue.d.ts +30 -0
  80. package/dist/components/inputs/text-field/text-field.vue_vue_type_script_setup_true_lang.js +119 -0
  81. package/dist/components/inputs/text-field/types.d.ts +70 -0
  82. package/dist/components/link/link.js +5 -0
  83. package/dist/components/link/link.vue.d.ts +27 -0
  84. package/dist/components/link/link.vue_vue_type_script_setup_true_lang.js +32 -0
  85. package/dist/components/link/types.d.ts +18 -0
  86. package/dist/components/main/main.js +5 -0
  87. package/dist/components/main/main.vue.d.ts +33 -0
  88. package/dist/components/main/main.vue_vue_type_script_setup_true_lang.js +104 -0
  89. package/dist/components/main/types.d.ts +75 -0
  90. package/dist/components/navigation-menu/navigation-menu.js +5 -0
  91. package/dist/components/navigation-menu/navigation-menu.vue_vue_type_script_setup_true_lang.js +207 -0
  92. package/dist/components/navigation-menu/types.d.ts +62 -0
  93. package/dist/components/page-transition/page-transition.js +5 -0
  94. package/dist/components/page-transition/page-transition.vue.d.ts +40 -0
  95. package/dist/components/page-transition/page-transition.vue_vue_type_script_setup_true_lang.js +27 -0
  96. package/dist/components/page-transition/types.d.ts +18 -0
  97. package/dist/components/sections/section/section.js +5 -0
  98. package/dist/components/sections/section/section.vue.d.ts +28 -0
  99. package/dist/components/sections/section/section.vue_vue_type_script_setup_true_lang.js +108 -0
  100. package/dist/components/sections/section/types.d.ts +80 -0
  101. package/dist/components/sections/section-content/section-content.js +5 -0
  102. package/dist/components/sections/section-content/section-content.vue.d.ts +27 -0
  103. package/dist/components/sections/section-content/section-content.vue_vue_type_script_setup_true_lang.js +16 -0
  104. package/dist/components/skeleton-loader/skeleton-loader.js +5 -0
  105. package/dist/components/skeleton-loader/skeleton-loader.vue_vue_type_script_setup_true_lang.js +65 -0
  106. package/dist/components/table/table.js +5 -0
  107. package/dist/components/table/table.vue.d.ts +19 -0
  108. package/dist/components/table/table.vue_vue_type_script_setup_true_lang.js +84 -0
  109. package/dist/components/table/types.d.ts +51 -0
  110. package/dist/components.d.ts +23 -940
  111. package/dist/components.js +23 -1254
  112. package/dist/composables/alignment/alignment.js +41 -0
  113. package/dist/composables/alignment/types.d.ts +12 -0
  114. package/dist/composables/button/button.js +54 -0
  115. package/dist/composables/colors/constants.js +27 -0
  116. package/dist/composables/colors/types.d.ts +4 -0
  117. package/dist/composables/colors/use-vuetify-background-color.js +16 -0
  118. package/dist/composables/colors/use-vuetify-color.js +11 -0
  119. package/dist/composables/colors/use-vuetify-text-color.js +12 -0
  120. package/dist/composables/data-set/data-set.js +128 -0
  121. package/dist/composables/dialogs/types.d.ts +88 -0
  122. package/dist/composables/dialogs/use-confirm.d.ts +21 -0
  123. package/dist/composables/dialogs/use-confirm.js +55 -0
  124. package/dist/composables/dialogs/use-decorative-timer.js +25 -0
  125. package/dist/composables/dialogs/use-dialog-focus.js +64 -0
  126. package/dist/composables/dialogs/use-dialog-loading.js +13 -0
  127. package/dist/composables/dialogs/use-dialog.d.ts +36 -0
  128. package/dist/composables/dialogs/use-dialog.js +73 -0
  129. package/dist/composables/dialogs/use-run-or-toast.d.ts +27 -0
  130. package/dist/composables/dialogs/use-run-or-toast.js +65 -0
  131. package/dist/composables/dialogs/use-toast.d.ts +25 -0
  132. package/dist/composables/dialogs/use-toast.js +39 -0
  133. package/dist/composables/dimensions/dimensions.js +18 -0
  134. package/dist/composables/inputs/autocomplete-field.js +39 -0
  135. package/dist/composables/inputs/date-time-field.js +109 -0
  136. package/dist/composables/inputs/fields.js +28 -0
  137. package/dist/composables/inputs/mask-field.js +133 -0
  138. package/dist/composables/inputs/rules.js +16 -0
  139. package/dist/composables/inputs/text-field.js +81 -0
  140. package/dist/composables/navigation/types.d.ts +54 -0
  141. package/dist/composables/navigation/use-navigation-rail.js +163 -0
  142. package/dist/composables/navigation/use-navigation-search-shortcut.js +96 -0
  143. package/dist/composables/navigation/use-route-props.js +21 -0
  144. package/dist/composables/navigation/use-unsaved-changes.d.ts +35 -0
  145. package/dist/composables/navigation/use-unsaved-changes.js +88 -0
  146. package/dist/composables/section/section.js +34 -0
  147. package/dist/composables.d.ts +6 -67
  148. package/dist/composables.js +6 -65
  149. package/dist/consts/icons.d.ts +67 -0
  150. package/dist/consts/icons.js +69 -0
  151. package/dist/consts/locale.js +12 -0
  152. package/dist/consts/types.d.ts +12 -0
  153. package/dist/index.d.ts +1 -13
  154. package/dist/index.js +39 -14
  155. package/dist/plugins.d.ts +15 -4
  156. package/dist/plugins.js +54 -3
  157. package/dist/styles/fonts/UnimedSlab-Regular.woff2 +0 -0
  158. package/dist/styles/fonts/fonts.css +5 -0
  159. package/dist/styles/settings.scss +155 -0
  160. package/dist/unit-test.js +11 -7
  161. package/package.json +11 -11
  162. package/skills/uimed-vue/SKILL.md +113 -0
  163. package/skills/uimed-vue/references/api/components/autocomplete-field.md +45 -0
  164. package/skills/uimed-vue/references/api/components/button.md +48 -0
  165. package/skills/uimed-vue/references/api/components/checkbox.md +36 -0
  166. package/skills/uimed-vue/references/api/components/data-sets/data-set-item.md +61 -0
  167. package/skills/uimed-vue/references/api/components/data-sets/data-set.md +67 -0
  168. package/skills/uimed-vue/references/api/components/date-time-field.md +44 -0
  169. package/skills/uimed-vue/references/api/components/details.md +33 -0
  170. package/skills/uimed-vue/references/api/components/dialog.md +70 -0
  171. package/skills/uimed-vue/references/api/components/form.md +43 -0
  172. package/skills/uimed-vue/references/api/components/grid/column.md +41 -0
  173. package/skills/uimed-vue/references/api/components/grid/container.md +32 -0
  174. package/skills/uimed-vue/references/api/components/grid/row.md +37 -0
  175. package/skills/uimed-vue/references/api/components/icon-button.md +37 -0
  176. package/skills/uimed-vue/references/api/components/img.md +34 -0
  177. package/skills/uimed-vue/references/api/components/link.md +31 -0
  178. package/skills/uimed-vue/references/api/components/main.md +174 -0
  179. package/skills/uimed-vue/references/api/components/mask-field.md +60 -0
  180. package/skills/uimed-vue/references/api/components/page-transition.md +37 -0
  181. package/skills/uimed-vue/references/api/components/sections/section-content.md +23 -0
  182. package/skills/uimed-vue/references/api/components/sections/section.md +61 -0
  183. package/skills/uimed-vue/references/api/components/table.md +35 -0
  184. package/skills/uimed-vue/references/api/components/text-field.md +42 -0
  185. package/skills/uimed-vue/references/api/composables/use-confirm.md +96 -0
  186. package/skills/uimed-vue/references/api/composables/use-dialog.md +95 -0
  187. package/skills/uimed-vue/references/api/composables/use-run-or-toast.md +58 -0
  188. package/skills/uimed-vue/references/api/composables/use-toast.md +48 -0
  189. package/skills/uimed-vue/references/api/composables/use-unsaved-changes.md +106 -0
  190. package/skills/uimed-vue/references/api/index.md +1 -0
  191. package/skills/uimed-vue/references/guide/components/autocomplete-field.md +256 -0
  192. package/skills/uimed-vue/references/guide/components/button.md +155 -0
  193. package/skills/uimed-vue/references/guide/components/checkbox.md +113 -0
  194. package/skills/uimed-vue/references/guide/components/data-set.md +370 -0
  195. package/skills/uimed-vue/references/guide/components/date-time-field.md +202 -0
  196. package/skills/uimed-vue/references/guide/components/details.md +76 -0
  197. package/skills/uimed-vue/references/guide/components/dialog.md +269 -0
  198. package/skills/uimed-vue/references/guide/components/form.md +96 -0
  199. package/skills/uimed-vue/references/guide/components/icon-button.md +76 -0
  200. package/skills/uimed-vue/references/guide/components/img.md +128 -0
  201. package/skills/uimed-vue/references/guide/components/layout.md +323 -0
  202. package/skills/uimed-vue/references/guide/components/link.md +47 -0
  203. package/skills/uimed-vue/references/guide/components/main.md +435 -0
  204. package/skills/uimed-vue/references/guide/components/mask-field.md +256 -0
  205. package/skills/uimed-vue/references/guide/components/page-transition.md +111 -0
  206. package/skills/uimed-vue/references/guide/components/section.md +232 -0
  207. package/skills/uimed-vue/references/guide/components/table.md +102 -0
  208. package/skills/uimed-vue/references/guide/components/text-field.md +172 -0
  209. package/skills/uimed-vue/references/guide/composables/use-confirm.md +123 -0
  210. package/skills/uimed-vue/references/guide/composables/use-dialog.md +102 -0
  211. package/skills/uimed-vue/references/guide/composables/use-run-or-toast.md +55 -0
  212. package/skills/uimed-vue/references/guide/composables/use-toast.md +57 -0
  213. package/skills/uimed-vue/references/guide/composables/use-unsaved-changes.md +129 -0
  214. package/skills/uimed-vue/references/guide/getting-started.md +135 -0
  215. package/skills/uimed-vue/references/guide/icons.md +71 -0
  216. package/skills/uimed-vue/references/guide/index.md +51 -0
  217. package/skills/uimed-vue/references/guide/migration-v1-to-v2.md +191 -0
  218. package/skills/uimed-vue/references/guide/unit-testing.md +85 -0
  219. package/AGENTS.md +0 -160
  220. package/CLAUDE.md +0 -1
  221. package/dist/types-BPXXtbmW.d.ts +0 -5
  222. package/dist/use-toast-CACuYhK_.js +0 -53
@@ -0,0 +1,104 @@
1
+ import app_bar_default from "../app-bar/app-bar.js";
2
+ import { useMobileNavigation } from "../../composables/navigation/use-navigation-rail.js";
3
+ import navigation_menu_default from "../navigation-menu/navigation-menu.js";
4
+ import footer_default from "../footer/footer.js";
5
+ import container_default from "../grid/container/container.js";
6
+ import toast_default from "../dialogs/toast.js";
7
+ import dialog_host_default from "../dialogs/dialog-host.js";
8
+ import useVuetifyBackgroundColor from "../../composables/colors/use-vuetify-background-color.js";
9
+ import { computed, createBlock, createCommentVNode, createSlots, createVNode, defineComponent, mergeModels, mergeProps, normalizeClass, normalizeProps, openBlock, ref, renderSlot, unref, useModel, useSlots, withCtx } from "vue";
10
+ import { VApp, VMain } from "vuetify/components";
11
+ var main_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
12
+ inheritAttrs: false,
13
+ __name: "main",
14
+ props: /*@__PURE__*/ mergeModels({
15
+ dataTestid: {
16
+ type: String,
17
+ required: false
18
+ },
19
+ logo: {
20
+ type: String,
21
+ required: false
22
+ },
23
+ appBar: {
24
+ type: Object,
25
+ required: false
26
+ },
27
+ navigationMenu: {
28
+ type: Object,
29
+ required: false
30
+ },
31
+ footer: {
32
+ type: Object,
33
+ required: false
34
+ },
35
+ loading: {
36
+ type: Boolean,
37
+ required: false
38
+ },
39
+ background: {
40
+ type: String,
41
+ required: false
42
+ }
43
+ }, {
44
+ "notificationsOpen": {
45
+ type: Boolean,
46
+ default: false
47
+ },
48
+ "notificationsOpenModifiers": {}
49
+ }),
50
+ emits: ["update:notificationsOpen"],
51
+ setup(__props) {
52
+ const props = __props;
53
+ const slots = useSlots();
54
+ const mobile = useMobileNavigation();
55
+ const appBarProps = computed(() => props.appBar ? {
56
+ ...props.appBar,
57
+ logo: props.logo,
58
+ navigation: props.navigationMenu !== void 0 && mobile.value,
59
+ loading: props.loading
60
+ } : void 0);
61
+ const backgroundClass = useVuetifyBackgroundColor(() => props.background);
62
+ const notificationsOpen = useModel(__props, "notificationsOpen");
63
+ const navigationMenuOpen = ref(false);
64
+ return (_ctx, _cache) => {
65
+ return openBlock(), createBlock(unref(VApp), {
66
+ class: normalizeClass(unref(backgroundClass)),
67
+ "data-testid": props.dataTestid
68
+ }, {
69
+ default: withCtx(() => [
70
+ appBarProps.value ? (openBlock(), createBlock(app_bar_default, mergeProps({ key: 0 }, appBarProps.value, {
71
+ "notifications-open": notificationsOpen.value,
72
+ "onUpdate:notificationsOpen": _cache[0] || (_cache[0] = ($event) => notificationsOpen.value = $event),
73
+ "navigation-open": navigationMenuOpen.value,
74
+ "onUpdate:navigationOpen": _cache[1] || (_cache[1] = ($event) => navigationMenuOpen.value = $event)
75
+ }), createSlots({ _: 2 }, [slots["user-section-details"] ? {
76
+ name: "user-section-details",
77
+ fn: withCtx(() => [renderSlot(_ctx.$slots, "user-section-details")]),
78
+ key: "0"
79
+ } : void 0]), 1040, ["notifications-open", "navigation-open"])) : createCommentVNode("v-if", true),
80
+ props.navigationMenu ? (openBlock(), createBlock(navigation_menu_default, mergeProps({ key: 1 }, props.navigationMenu, {
81
+ modelValue: navigationMenuOpen.value,
82
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => navigationMenuOpen.value = $event),
83
+ loading: props.loading
84
+ }), null, 16, ["modelValue", "loading"])) : createCommentVNode("v-if", true),
85
+ createVNode(unref(VMain), null, {
86
+ default: withCtx(() => [createCommentVNode(" Full height, so the page's rows and containers with `fullHeight` have a height to fill "), createVNode(container_default, { "full-height": "" }, {
87
+ default: withCtx(() => [
88
+ renderSlot(_ctx.$slots, "default"),
89
+ createVNode(toast_default),
90
+ createVNode(dialog_host_default)
91
+ ]),
92
+ _: 3
93
+ })]),
94
+ _: 3
95
+ }),
96
+ props.footer?.description ? (openBlock(), createBlock(footer_default, normalizeProps(mergeProps({ key: 2 }, props.footer)), null, 16)) : createCommentVNode("v-if", true)
97
+ ]),
98
+ _: 3
99
+ }, 8, ["class", "data-testid"]);
100
+ };
101
+ }
102
+ });
103
+ //#endregion
104
+ export { main_vue_vue_type_script_setup_true_lang_default as default };
@@ -0,0 +1,75 @@
1
+ import { AppBarProps } from "../app-bar/types.js";
2
+ import { NavigationMenuProps } from "../navigation-menu/types.js";
3
+ import { FooterProps } from "../footer/types.js";
4
+ import { ColorVariant } from "../../composables/colors/types.js";
5
+ //#region src/components/main/types.d.ts
6
+ /**
7
+ * Props exposed by the {@link Main} component.
8
+ */
9
+ export type MainProps = {
10
+ /**
11
+ * Component id to use on automated tests.
12
+ */
13
+ dataTestid?: string;
14
+ /**
15
+ * URL to logo image.
16
+ *
17
+ * The logo is decorative (`alt=""`): screen readers identify the app by
18
+ * the app bar title (`appBar.title`).
19
+ */
20
+ logo?: string;
21
+ /**
22
+ * App bar properties.
23
+ */
24
+ appBar?: AppBarProps;
25
+ /**
26
+ * Navigation menu properties.
27
+ */
28
+ navigationMenu?: NavigationMenuProps;
29
+ /**
30
+ * Footer properties. The footer is fixed at the bottom of the screen and
31
+ * is hidden when it's omitted or its `description` is empty.
32
+ *
33
+ * @example
34
+ * ```vue
35
+ * <u-main :footer="{ description: `Versão ${version}` }" />
36
+ * ```
37
+ */
38
+ footer?: FooterProps;
39
+ /**
40
+ * Shows skeleton loaders in place of the user-related parts of the app bar
41
+ * and of the navigation menu items while their data is being loaded.
42
+ * The main content (default slot) isn't affected.
43
+ * @default false
44
+ */
45
+ loading?: boolean;
46
+ /**
47
+ * Applies a color to the background of the whole app, e.g. on landing pages. Text placed
48
+ * directly on the background takes the color the theme pairs with it (white or black), while
49
+ * the app bar, the footer, sections and dialogs keep their own backgrounds. When omitted, the
50
+ * app uses the theme's default background.
51
+ *
52
+ * @example
53
+ * ```vue
54
+ * <u-main background="primary" />
55
+ * ```
56
+ */
57
+ background?: ColorVariant;
58
+ };
59
+ /**
60
+ * Slots exposed by the {@link Main} component.
61
+ */
62
+ export type MainSlots = {
63
+ /**
64
+ * Content of the page, below the app bar (and above the footer, when shown).
65
+ */
66
+ default?: () => unknown;
67
+ /**
68
+ * Details of the user shown in the user menu of the app bar, below the
69
+ * name and subtitle and above the options, with the text centered like
70
+ * them (e.g. the user's organization and profile, and an action to manage
71
+ * the profile). Only shown when `appBar.user` is given.
72
+ */
73
+ "user-section-details"?: () => unknown;
74
+ };
75
+ //#endregion
@@ -0,0 +1,5 @@
1
+ import navigation_menu_vue_vue_type_script_setup_true_lang_default from "./navigation-menu.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/components/navigation-menu/navigation-menu.vue
3
+ var navigation_menu_default = navigation_menu_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { navigation_menu_default as default };
@@ -0,0 +1,207 @@
1
+ import { icons } from "../../consts/icons.js";
2
+ import { routeToListItemProps } from "../../composables/navigation/use-route-props.js";
3
+ import { useNavigationSearchShortcut } from "../../composables/navigation/use-navigation-search-shortcut.js";
4
+ import skeleton_loader_default from "../skeleton-loader/skeleton-loader.js";
5
+ import text_field_default from "../inputs/text-field/text-field.js";
6
+ import { isParentItem, useNavigationRail } from "../../composables/navigation/use-navigation-rail.js";
7
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, isRef, mergeModels, mergeProps, openBlock, ref, renderList, unref, useModel, useTemplateRef, vShow, withCtx, withDirectives, withKeys } from "vue";
8
+ import { VDivider, VList, VListGroup, VListItem, VNavigationDrawer } from "vuetify/components";
9
+ //#region src/components/navigation-menu/navigation-menu.vue?vue&type=script&setup=true&lang.ts
10
+ const _hoisted_1 = { class: "px-4 pt-2" };
11
+ var navigation_menu_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
12
+ inheritAttrs: false,
13
+ __name: "navigation-menu",
14
+ props: /*@__PURE__*/ mergeModels({
15
+ dataTestid: {
16
+ type: String,
17
+ required: false
18
+ },
19
+ items: {
20
+ type: Array,
21
+ required: false
22
+ },
23
+ loading: {
24
+ type: Boolean,
25
+ required: false
26
+ }
27
+ }, {
28
+ "modelValue": {
29
+ type: Boolean,
30
+ default: false
31
+ },
32
+ "modelModifiers": {}
33
+ }),
34
+ emits: ["update:modelValue"],
35
+ setup(__props) {
36
+ const props = __props;
37
+ const open = useModel(__props, "modelValue");
38
+ const search = ref("");
39
+ const field = useTemplateRef("searchField");
40
+ const { mobile, collapsed, drawerOpen, menuOpen, opened, isActiveGroup, dismiss, isRestoringFocus, onFocusin, onFocusout, onMouseenter, onMouseleave } = useNavigationRail({
41
+ open,
42
+ field,
43
+ searchItem: useTemplateRef("searchItem"),
44
+ items: () => props.items,
45
+ search
46
+ });
47
+ const { label: shortcutLabel, ariaKeyshortcuts, openSearch } = useNavigationSearchShortcut({
48
+ open: menuOpen,
49
+ field
50
+ });
51
+ const filteredItems = computed(() => filterItems());
52
+ function onSearchItemFocus(event) {
53
+ if (!isRestoringFocus()) openSearch(event.relatedTarget);
54
+ }
55
+ const searchDataTestid = computed(() => `${props.dataTestid}-search`);
56
+ const query = computed(() => search.value.toLowerCase());
57
+ function filterItems() {
58
+ return (props.items ?? []).reduce((filtered, item) => {
59
+ if (matches(item)) filtered.push(item);
60
+ else if (isParentItem(item)) {
61
+ const matchingChildren = item.items.filter((child) => matches(child));
62
+ if (matchingChildren.length) filtered.push({
63
+ ...item,
64
+ items: matchingChildren
65
+ });
66
+ }
67
+ return filtered;
68
+ }, []);
69
+ }
70
+ function matches(item) {
71
+ return item.description.toLowerCase().includes(query.value);
72
+ }
73
+ return (_ctx, _cache) => {
74
+ return openBlock(), createBlock(unref(VNavigationDrawer), {
75
+ modelValue: unref(drawerOpen),
76
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => isRef(drawerOpen) ? drawerOpen.value = $event : null),
77
+ color: "primary",
78
+ "data-testid": props.dataTestid,
79
+ "aria-busy": props.loading || void 0,
80
+ mobile: unref(mobile),
81
+ permanent: !unref(mobile),
82
+ rail: !unref(mobile),
83
+ "expand-on-hover": "",
84
+ absolute: "",
85
+ temporary: "",
86
+ onFocusin: unref(onFocusin),
87
+ onFocusout: unref(onFocusout),
88
+ onMouseenter: unref(onMouseenter),
89
+ onMouseleave: unref(onMouseleave),
90
+ onKeydown: withKeys(unref(dismiss), ["esc"])
91
+ }, {
92
+ prepend: withCtx(() => [
93
+ withDirectives(createElementVNode("div", _hoisted_1, [createVNode(text_field_default, {
94
+ ref: "searchField",
95
+ modelValue: search.value,
96
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => search.value = $event),
97
+ type: "search",
98
+ placeholder: `Buscar (${unref(shortcutLabel)})`,
99
+ "data-testid": searchDataTestid.value,
100
+ disabled: props.loading
101
+ }, null, 8, [
102
+ "modelValue",
103
+ "placeholder",
104
+ "data-testid",
105
+ "disabled"
106
+ ])], 512), [[vShow, !unref(collapsed)]]),
107
+ createCommentVNode(" Vuetify's list is focusable and passes the focus on to its first item: out of the tab\n order, the item gets the focus straight from the page, which then gets it back on `Esc` "),
108
+ withDirectives(createVNode(unref(VList), {
109
+ nav: "",
110
+ role: "group",
111
+ tabindex: "-1"
112
+ }, {
113
+ default: withCtx(() => [createCommentVNode(" Rendered as a native button, as the groups' headers (see below). Vuetify only styles\n a disabled item, and its button would still take the focus "), createVNode(unref(VListItem), {
114
+ ref: "searchItem",
115
+ title: "Buscar",
116
+ "prepend-icon": unref(icons).search,
117
+ disabled: props.loading,
118
+ tabindex: props.loading ? -1 : void 0,
119
+ "aria-disabled": props.loading || void 0,
120
+ "aria-keyshortcuts": unref(ariaKeyshortcuts),
121
+ role: void 0,
122
+ tag: "button",
123
+ type: "button",
124
+ class: "w-100 text-start",
125
+ onFocus: onSearchItemFocus
126
+ }, null, 8, [
127
+ "prepend-icon",
128
+ "disabled",
129
+ "tabindex",
130
+ "aria-disabled",
131
+ "aria-keyshortcuts"
132
+ ])]),
133
+ _: 1
134
+ }, 512), [[vShow, unref(collapsed)]])
135
+ ]),
136
+ default: withCtx(() => [createVNode(unref(VDivider)), createVNode(skeleton_loader_default, {
137
+ loading: props.loading,
138
+ type: "list-item@6",
139
+ color: "primary"
140
+ }, {
141
+ default: withCtx(() => [createCommentVNode(" Vuetify's `list` role only allows list items, but the items are links "), createVNode(unref(VList), {
142
+ opened: unref(opened),
143
+ "onUpdate:opened": _cache[1] || (_cache[1] = ($event) => isRef(opened) ? opened.value = $event : null),
144
+ nav: "",
145
+ role: "group"
146
+ }, {
147
+ default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(filteredItems.value, (item, index) => {
148
+ return openBlock(), createElementBlock(Fragment, { key: index }, [unref(isParentItem)(item) ? (openBlock(), createBlock(unref(VListGroup), {
149
+ key: 0,
150
+ value: item.description
151
+ }, {
152
+ activator: withCtx(({ props: activatorProps, isOpen }) => [createVNode(unref(VListItem), mergeProps({ ref_for: true }, activatorProps, {
153
+ title: item.description,
154
+ "prepend-icon": unref(icons)[item.icon],
155
+ active: unref(isActiveGroup)(item),
156
+ "aria-expanded": isOpen,
157
+ "aria-selected": void 0,
158
+ role: void 0,
159
+ tag: "button",
160
+ type: "button",
161
+ class: "w-100 text-start"
162
+ }), null, 16, [
163
+ "title",
164
+ "prepend-icon",
165
+ "active",
166
+ "aria-expanded"
167
+ ])]),
168
+ default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(item.items, (childItem, childIndex) => {
169
+ return openBlock(), createBlock(unref(VListItem), mergeProps({ key: childIndex }, { ref_for: true }, unref(routeToListItemProps)(childItem.route), {
170
+ title: childItem.description,
171
+ onClick: childItem.action
172
+ }), null, 16, ["title", "onClick"]);
173
+ }), 128))]),
174
+ _: 2
175
+ }, 1032, ["value"])) : (openBlock(), createBlock(unref(VListItem), mergeProps({
176
+ key: 1,
177
+ title: item.description,
178
+ "prepend-icon": unref(icons)[item.icon]
179
+ }, { ref_for: true }, unref(routeToListItemProps)(item.route), { onClick: item.action }), null, 16, [
180
+ "title",
181
+ "prepend-icon",
182
+ "onClick"
183
+ ]))], 64);
184
+ }), 128))]),
185
+ _: 1
186
+ }, 8, ["opened"])]),
187
+ _: 1
188
+ }, 8, ["loading"])]),
189
+ _: 1
190
+ }, 8, [
191
+ "modelValue",
192
+ "data-testid",
193
+ "aria-busy",
194
+ "mobile",
195
+ "permanent",
196
+ "rail",
197
+ "onFocusin",
198
+ "onFocusout",
199
+ "onMouseenter",
200
+ "onMouseleave",
201
+ "onKeydown"
202
+ ]);
203
+ };
204
+ }
205
+ });
206
+ //#endregion
207
+ export { navigation_menu_vue_vue_type_script_setup_true_lang_default as default };
@@ -0,0 +1,62 @@
1
+ import { Icon } from "../../consts/types.js";
2
+ import { RouteLocationRaw } from "vue-router";
3
+ //#region src/components/navigation-menu/types.d.ts
4
+ /**
5
+ * Props exposed by the {@link NavigationMenu} component.
6
+ */
7
+ export type NavigationMenuProps = {
8
+ /**
9
+ * Component id to use on automated tests.
10
+ */
11
+ dataTestid?: string;
12
+ /**
13
+ * List of items to show in the {@link NavigationMenu}.
14
+ * Can be plain items, grouped or both.
15
+ */
16
+ items?: Array<NavigationMenuParentItemOrItem>;
17
+ };
18
+ export type NavigationMenuParentItemOrItem = NavigationMenuParentItem | NavigationMenuItem;
19
+ export type NavigationMenuParentItem = {
20
+ /**
21
+ * Text to present for the group.
22
+ */
23
+ description: string;
24
+ /**
25
+ * Icon shown before the group's description, and alone while the menu is collapsed to a rail.
26
+ * One of the names listed on the "Ícones" guide page.
27
+ *
28
+ * @see {@link https://nexdom-healthtech.github.io/uimed-vue/guide/icons | Icons Guide}
29
+ */
30
+ icon: Icon;
31
+ /**
32
+ * Child {@link NavigationMenuChildItem} list. Unlike the first level items, they show no icon.
33
+ */
34
+ items: Array<NavigationMenuChildItem>;
35
+ };
36
+ /**
37
+ * Item inside a {@link NavigationMenuParentItem}. Only the first level items and groups show an
38
+ * icon, so every menu follows the same visual pattern.
39
+ */
40
+ export type NavigationMenuChildItem = Omit<NavigationMenuItem, "icon">;
41
+ export interface NavigationMenuItem {
42
+ /**
43
+ * Text to present for the item.
44
+ */
45
+ description: string;
46
+ /**
47
+ * Icon shown before the item's description, and alone while the menu is collapsed to a rail.
48
+ * One of the names listed on the "Ícones" guide page.
49
+ *
50
+ * @see {@link https://nexdom-healthtech.github.io/uimed-vue/guide/icons | Icons Guide}
51
+ */
52
+ icon: Icon;
53
+ /**
54
+ * Route to navigate when item is clicked.
55
+ */
56
+ route?: RouteLocationRaw;
57
+ /**
58
+ * Callback to be triggered when the item is clicked.
59
+ */
60
+ action?: () => void;
61
+ }
62
+ //#endregion
@@ -0,0 +1,5 @@
1
+ import page_transition_vue_vue_type_script_setup_true_lang_default from "./page-transition.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/components/page-transition/page-transition.vue
3
+ var page_transition_default = page_transition_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { page_transition_default as default };
@@ -0,0 +1,40 @@
1
+ import { PageTransitionProps } from "./types.js";
2
+ //#region src/components/page-transition/page-transition.vue.d.ts
3
+ /**
4
+ * Animates the change between the pages rendered by the app's router: the
5
+ * current page fades out before the next one fades in. When the operating
6
+ * system asks for reduced motion, the pages change without animation.
7
+ *
8
+ * The page is rendered inside a `div` that takes the whole height of its
9
+ * parent, so any page is animated, whatever it renders at its root. The
10
+ * change is animated whenever `transitionKey` changes, which defaults to the
11
+ * current route's `fullPath`: every navigation is animated, including the
12
+ * ones that only change the route's params, query or hash. Attributes
13
+ * (`class`, `style`...) aren't passed on.
14
+ *
15
+ * @example
16
+ * ```vue
17
+ * <template>
18
+ * <u-main>
19
+ * <router-view v-slot="{ Component }">
20
+ * <u-page-transition>
21
+ * <component :is="Component" />
22
+ * </u-page-transition>
23
+ * </router-view>
24
+ * </u-main>
25
+ * </template>
26
+ * ```
27
+ *
28
+ * @see {@link https://nexdom-healthtech.github.io/uimed-vue/guide/components/page-transition | Page Transition Guide}
29
+ */
30
+ declare const _default: typeof __VLS_export;
31
+ declare const __VLS_export: __VLS_WithSlots<import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<PageTransitionProps, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {}, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<PageTransitionProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue", { with: { "resolution-mode": "import" } }).ComponentProvideOptions, false, {}, any>, {
32
+ default?: (props: {}) => any;
33
+ }>;
34
+ type __VLS_WithSlots<T, S> = T & {
35
+ new (): {
36
+ $slots: S;
37
+ };
38
+ };
39
+ //#endregion
40
+ export { _default as default };
@@ -0,0 +1,27 @@
1
+ import { Fragment, computed, createCommentVNode, createElementBlock, createVNode, defineComponent, openBlock, renderSlot, unref, withCtx } from "vue";
2
+ import { VFadeTransition } from "vuetify/components";
3
+ import { useRoute } from "vue-router";
4
+ var page_transition_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
5
+ inheritAttrs: false,
6
+ __name: "page-transition",
7
+ props: { transitionKey: {
8
+ type: String,
9
+ required: false
10
+ } },
11
+ setup(__props) {
12
+ const props = __props;
13
+ const route = useRoute();
14
+ const pageKey = computed(() => props.transitionKey ?? route.fullPath);
15
+ return (_ctx, _cache) => {
16
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The page is wrapped so any page can be animated, whatever it renders at its root. The\n wrapper takes the parent's height, so pages with `fullHeight` still have a height to fill "), createVNode(unref(VFadeTransition), { mode: "out-in" }, {
17
+ default: withCtx(() => [(openBlock(), createElementBlock("div", {
18
+ key: pageKey.value,
19
+ class: "h-100"
20
+ }, [renderSlot(_ctx.$slots, "default")]))]),
21
+ _: 3
22
+ })], 2112);
23
+ };
24
+ }
25
+ });
26
+ //#endregion
27
+ export { page_transition_vue_vue_type_script_setup_true_lang_default as default };
@@ -0,0 +1,18 @@
1
+ //#region src/components/page-transition/types.d.ts
2
+ /**
3
+ * Props exposed by the {@link PageTransition} component.
4
+ */
5
+ export type PageTransitionProps = {
6
+ /**
7
+ * Identifies the page on display: the change is animated whenever it
8
+ * changes. Defaults to the current route's `fullPath`, so every navigation
9
+ * is animated, including the ones that only change the route's params,
10
+ * query or hash. Pass another value to choose which navigations are
11
+ * animated, e.g. `route.path` to not animate when only the query or the
12
+ * hash changes.
13
+ *
14
+ * @default route.fullPath
15
+ */
16
+ transitionKey?: string;
17
+ };
18
+ //#endregion
@@ -0,0 +1,5 @@
1
+ import section_vue_vue_type_script_setup_true_lang_default from "./section.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/components/sections/section/section.vue
3
+ var section_default = section_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { section_default as default };
@@ -0,0 +1,28 @@
1
+ import { SectionProps } from "./types.js";
2
+ //#region src/components/sections/section/section.vue.d.ts
3
+ /**
4
+ * Section component to group related content and actions, to be used
5
+ * throughout the application.
6
+ *
7
+ * @example
8
+ * ```vue
9
+ * <template>
10
+ * <u-section title="Title" subtitle="Subtitle">
11
+ * Content
12
+ * </u-section>
13
+ * <template>
14
+ * ```
15
+ *
16
+ * @see {@link https://nexdom-healthtech.github.io/uimed-vue/guide/components/section | Section Guide}
17
+ */
18
+ declare const _default: typeof __VLS_export;
19
+ declare const __VLS_export: __VLS_WithSlots<import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<SectionProps, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {}, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<SectionProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue", { with: { "resolution-mode": "import" } }).ComponentProvideOptions, false, {}, any>, {
20
+ default?: (props: {}) => any;
21
+ }>;
22
+ type __VLS_WithSlots<T, S> = T & {
23
+ new (): {
24
+ $slots: S;
25
+ };
26
+ };
27
+ //#endregion
28
+ export { _default as default };