@nexdom/uimed-vue 2.0.0-beta.36 → 2.0.0-beta.38

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/AGENTS.md CHANGED
@@ -184,6 +184,7 @@ Use an existing composable (e.g. `use-toast`) as the reference, and deliver in t
184
184
 
185
185
  - Keep components thin: a component wires props, slots and events to Vuetify. Logic beyond that (focus management, queues, DOM lookups, comparisons) goes into an internal composable with its own unit tests.
186
186
  - Path aliases: `@/*` → `src/*`, `@e2e/*` → `e2e/*`.
187
+ - A prop or option that points to a navigation destination is typed `RouteLocationRaw` (from `vue-router`) and named `route` (e.g. the items of `UNavigationMenu`), unless the name says which destination it is (e.g. `help` in `UAppBar`). Don't split it into `to`/`href` props: convert it with `useRouteProps`/`routeToProps` (`src/composables/navigation/use-route-props.ts`), which binds strings starting with `http` as `href` and anything else as the router's `to`.
187
188
  - Every public component follows this pattern to block access to internals and give it an editor-hover description:
188
189
 
189
190
  ```vue
@@ -134,6 +134,22 @@ interface NavigationMenuItem {
134
134
  action?: () => void;
135
135
  }
136
136
  //#endregion
137
+ //#region src/components/footer/types.d.ts
138
+ /**
139
+ * Props of the footer shown by the {@link Main} component.
140
+ */
141
+ type FooterProps = {
142
+ /**
143
+ * Text shown in the footer, e.g. the application version ("Versão 1.4.2").
144
+ * The footer is hidden when it's empty or omitted.
145
+ */
146
+ description?: string;
147
+ /**
148
+ * Component id to use on automated tests.
149
+ */
150
+ dataTestid?: string;
151
+ };
152
+ //#endregion
137
153
  //#region src/components/main/types.d.ts
138
154
  /**
139
155
  * Props exposed by the {@link Main} component.
@@ -158,6 +174,16 @@ type MainProps = {
158
174
  * Navigation menu properties.
159
175
  */
160
176
  navigationMenu?: NavigationMenuProps;
177
+ /**
178
+ * Footer properties. The footer is fixed at the bottom of the screen and
179
+ * is hidden when it's omitted or its `description` is empty.
180
+ *
181
+ * @example
182
+ * ```vue
183
+ * <u-main :footer="{ description: `Versão ${version}` }" />
184
+ * ```
185
+ */
186
+ footer?: FooterProps;
161
187
  /**
162
188
  * Shows skeleton loaders in place of the user-related parts of the app bar
163
189
  * and of the navigation menu items while their data is being loaded.
@@ -182,8 +208,8 @@ type MainProps = {
182
208
  *
183
209
  * @see {@link https://nexdom-healthtech.github.io/uimed-vue/guide/components/main | Main Guide}
184
210
  */
185
- declare const _default$12: typeof __VLS_export$17;
186
- declare const __VLS_export$17: __VLS_WithSlots$10<import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<MainProps & {
211
+ declare const _default$13: typeof __VLS_export$18;
212
+ declare const __VLS_export$18: __VLS_WithSlots$11<import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<MainProps & {
187
213
  notificationsOpen?: boolean;
188
214
  }, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {
189
215
  "update:notificationsOpen": (value: boolean) => any;
@@ -194,7 +220,7 @@ declare const __VLS_export$17: __VLS_WithSlots$10<import("vue", { with: { "resol
194
220
  }>, {}, {}, {}, {}, string, import("vue", { with: { "resolution-mode": "import" } }).ComponentProvideOptions, false, {}, any>, {
195
221
  default?: (props: {}) => any;
196
222
  }>;
197
- type __VLS_WithSlots$10<T, S> = T & {
223
+ type __VLS_WithSlots$11<T, S> = T & {
198
224
  new (): {
199
225
  $slots: S;
200
226
  };
@@ -215,15 +241,15 @@ type __VLS_WithSlots$10<T, S> = T & {
215
241
  *
216
242
  * @see {@link https://nexdom-healthtech.github.io/uimed-vue/guide/components/button | Button Guide}
217
243
  */
218
- declare const _default$1: typeof __VLS_export$16;
219
- declare const __VLS_export$16: __VLS_WithSlots$9<import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<ButtonProps, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {} & {
244
+ declare const _default$1: typeof __VLS_export$17;
245
+ declare const __VLS_export$17: __VLS_WithSlots$10<import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<ButtonProps, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {} & {
220
246
  click: (event: MouseEvent) => any;
221
247
  }, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<ButtonProps> & Readonly<{
222
248
  onClick?: ((event: MouseEvent) => any) | undefined;
223
249
  }>, {}, {}, {}, {}, string, import("vue", { with: { "resolution-mode": "import" } }).ComponentProvideOptions, false, {}, any>, {
224
250
  default?: (props: {}) => any;
225
251
  }>;
226
- type __VLS_WithSlots$9<T, S> = T & {
252
+ type __VLS_WithSlots$10<T, S> = T & {
227
253
  new (): {
228
254
  $slots: S;
229
255
  };
@@ -395,8 +421,8 @@ type AutocompleteFieldProps<T = string, Multiple extends boolean = false> = {
395
421
  *
396
422
  * @see {@link https://nexdom-healthtech.github.io/uimed-vue/guide/components/autocomplete-field | AutocompleteField Guide}
397
423
  */
398
- declare const _default: typeof __VLS_export$15;
399
- declare const __VLS_export$15: <T = string, Multiple extends boolean = false>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal$2<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
424
+ declare const _default: typeof __VLS_export$16;
425
+ declare const __VLS_export$16: <T = string, Multiple extends boolean = false>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal$2<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
400
426
  props: import("vue").PublicProps & __VLS_PrettifyLocal$2<(AutocompleteFieldProps<T, Multiple> & {
401
427
  modelValue?: Multiple extends true ? T[] : T;
402
428
  }) & {
@@ -426,8 +452,8 @@ type __VLS_PrettifyLocal$2<T> = (T extends any ? { [K in keyof T]: T[K]; } : { [
426
452
  *
427
453
  * @see {@link https://nexdom-healthtech.github.io/uimed-vue/guide/components/text-field | TextField Guide}
428
454
  */
429
- declare const _default$17: typeof __VLS_export$14;
430
- declare const __VLS_export$14: import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<TextFieldProps & {
455
+ declare const _default$18: typeof __VLS_export$15;
456
+ declare const __VLS_export$15: import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<TextFieldProps & {
431
457
  modelValue?: string;
432
458
  }, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {
433
459
  "update:modelValue": (value: string) => any;
@@ -489,8 +515,8 @@ type CheckboxProps<T = boolean> = {
489
515
  *
490
516
  * @see {@link https://nexdom-healthtech.github.io/uimed-vue/guide/components/checkbox | Checkbox Guide}
491
517
  */
492
- declare const _default$2: typeof __VLS_export$13;
493
- declare const __VLS_export$13: <T = any>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal$1<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
518
+ declare const _default$2: typeof __VLS_export$14;
519
+ declare const __VLS_export$14: <T = any>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal$1<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
494
520
  props: import("vue").PublicProps & __VLS_PrettifyLocal$1<(CheckboxProps<boolean | T> & {
495
521
  modelValue?: T;
496
522
  }) & {
@@ -606,8 +632,8 @@ type DateTimeFieldProps = {
606
632
  *
607
633
  * @see {@link https://nexdom-healthtech.github.io/uimed-vue/guide/components/date-time-field | DateTimeField Guide}
608
634
  */
609
- declare const _default$7: typeof __VLS_export$12;
610
- declare const __VLS_export$12: import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<DateTimeFieldProps & {
635
+ declare const _default$7: typeof __VLS_export$13;
636
+ declare const __VLS_export$13: import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<DateTimeFieldProps & {
611
637
  modelValue?: string;
612
638
  }, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {
613
639
  "update:modelValue": (value: string) => any;
@@ -652,11 +678,11 @@ type ContainerProps = {
652
678
  *
653
679
  * @see {@link https://nexdom-healthtech.github.io/uimed-vue/guide/components/layout | Container Guide}
654
680
  */
655
- declare const _default$4: typeof __VLS_export$11;
656
- declare const __VLS_export$11: __VLS_WithSlots$8<import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<ContainerProps, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {}, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<ContainerProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue", { with: { "resolution-mode": "import" } }).ComponentProvideOptions, false, {}, any>, {
681
+ declare const _default$4: typeof __VLS_export$12;
682
+ declare const __VLS_export$12: __VLS_WithSlots$9<import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<ContainerProps, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {}, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<ContainerProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue", { with: { "resolution-mode": "import" } }).ComponentProvideOptions, false, {}, any>, {
657
683
  default?: (props: {}) => any;
658
684
  }>;
659
- type __VLS_WithSlots$8<T, S> = T & {
685
+ type __VLS_WithSlots$9<T, S> = T & {
660
686
  new (): {
661
687
  $slots: S;
662
688
  };
@@ -753,11 +779,11 @@ type RowProps = {
753
779
  *
754
780
  * @see {@link https://nexdom-healthtech.github.io/uimed-vue/guide/components/layout | Row Guide}
755
781
  */
756
- declare const _default$13: typeof __VLS_export$10;
757
- declare const __VLS_export$10: __VLS_WithSlots$7<import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<RowProps, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {}, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<RowProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue", { with: { "resolution-mode": "import" } }).ComponentProvideOptions, false, {}, any>, {
782
+ declare const _default$14: typeof __VLS_export$11;
783
+ declare const __VLS_export$11: __VLS_WithSlots$8<import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<RowProps, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {}, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<RowProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue", { with: { "resolution-mode": "import" } }).ComponentProvideOptions, false, {}, any>, {
758
784
  default?: (props: {}) => any;
759
785
  }>;
760
- type __VLS_WithSlots$7<T, S> = T & {
786
+ type __VLS_WithSlots$8<T, S> = T & {
761
787
  new (): {
762
788
  $slots: S;
763
789
  };
@@ -809,13 +835,13 @@ type Cols = "auto" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10"
809
835
  *
810
836
  * @see {@link https://nexdom-healthtech.github.io/uimed-vue/guide/components/layout | Column Guide}
811
837
  */
812
- declare const _default$3: typeof __VLS_export$9;
813
- declare const __VLS_export$9: __VLS_WithSlots$6<import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<ColumnProps, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {}, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<ColumnProps> & Readonly<{}>, {
838
+ declare const _default$3: typeof __VLS_export$10;
839
+ declare const __VLS_export$10: __VLS_WithSlots$7<import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<ColumnProps, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {}, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<ColumnProps> & Readonly<{}>, {
814
840
  cols: "12" | "auto" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11";
815
841
  }, {}, {}, {}, string, import("vue", { with: { "resolution-mode": "import" } }).ComponentProvideOptions, false, {}, any>, {
816
842
  default?: (props: {}) => any;
817
843
  }>;
818
- type __VLS_WithSlots$6<T, S> = T & {
844
+ type __VLS_WithSlots$7<T, S> = T & {
819
845
  new (): {
820
846
  $slots: S;
821
847
  };
@@ -852,15 +878,15 @@ type FormProps = {
852
878
  *
853
879
  * @see {@link https://nexdom-healthtech.github.io/uimed-vue/guide/components/form | Form Guide}
854
880
  */
855
- declare const _default$10: typeof __VLS_export$8;
856
- declare const __VLS_export$8: __VLS_WithSlots$5<import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<FormProps, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {} & {
881
+ declare const _default$10: typeof __VLS_export$9;
882
+ declare const __VLS_export$9: __VLS_WithSlots$6<import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<FormProps, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {} & {
857
883
  submit: (event: SubmitEvent) => any;
858
884
  }, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<FormProps> & Readonly<{
859
885
  onSubmit?: ((event: SubmitEvent) => any) | undefined;
860
886
  }>, {}, {}, {}, {}, string, import("vue", { with: { "resolution-mode": "import" } }).ComponentProvideOptions, false, {}, any>, {
861
887
  default?: (props: {}) => any;
862
888
  }>;
863
- type __VLS_WithSlots$5<T, S> = T & {
889
+ type __VLS_WithSlots$6<T, S> = T & {
864
890
  new (): {
865
891
  $slots: S;
866
892
  };
@@ -882,11 +908,11 @@ type __VLS_WithSlots$5<T, S> = T & {
882
908
  *
883
909
  * @see {@link https://nexdom-healthtech.github.io/uimed-vue/guide/components/section | Section Guide}
884
910
  */
885
- declare const _default$15: typeof __VLS_export$7;
886
- declare const __VLS_export$7: __VLS_WithSlots$4<import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<{}, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {}, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue", { with: { "resolution-mode": "import" } }).ComponentProvideOptions, true, {}, any>, {
911
+ declare const _default$16: typeof __VLS_export$8;
912
+ declare const __VLS_export$8: __VLS_WithSlots$5<import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<{}, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {}, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue", { with: { "resolution-mode": "import" } }).ComponentProvideOptions, true, {}, any>, {
887
913
  default?: (props: {}) => any;
888
914
  }>;
889
- type __VLS_WithSlots$4<T, S> = T & {
915
+ type __VLS_WithSlots$5<T, S> = T & {
890
916
  new (): {
891
917
  $slots: S;
892
918
  };
@@ -987,11 +1013,11 @@ interface SectionAction extends ButtonProps {
987
1013
  *
988
1014
  * @see {@link https://nexdom-healthtech.github.io/uimed-vue/guide/components/section | Section Guide}
989
1015
  */
990
- declare const _default$14: typeof __VLS_export$6;
991
- declare const __VLS_export$6: __VLS_WithSlots$3<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>, {
1016
+ declare const _default$15: typeof __VLS_export$7;
1017
+ declare const __VLS_export$7: __VLS_WithSlots$4<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>, {
992
1018
  default?: (props: {}) => any;
993
1019
  }>;
994
- type __VLS_WithSlots$3<T, S> = T & {
1020
+ type __VLS_WithSlots$4<T, S> = T & {
995
1021
  new (): {
996
1022
  $slots: S;
997
1023
  };
@@ -1062,8 +1088,8 @@ type TableProps = {
1062
1088
  *
1063
1089
  * @see {@link https://nexdom-healthtech.github.io/uimed-vue/guide/components/table | Table Guide}
1064
1090
  */
1065
- declare const _default$16: typeof __VLS_export$5;
1066
- declare const __VLS_export$5: import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<TableProps, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {}, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<TableProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue", { with: { "resolution-mode": "import" } }).ComponentProvideOptions, false, {}, any>;
1091
+ declare const _default$17: typeof __VLS_export$6;
1092
+ declare const __VLS_export$6: import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<TableProps, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {}, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<TableProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue", { with: { "resolution-mode": "import" } }).ComponentProvideOptions, false, {}, any>;
1067
1093
  //#endregion
1068
1094
  //#region src/components/details/types.d.ts
1069
1095
  type DetailsVariant = "primary" | "secondary";
@@ -1110,11 +1136,11 @@ type DetailsProps = {
1110
1136
  *
1111
1137
  * @see {@link https://nexdom-healthtech.github.io/uimed-vue/guide/components/details | Details Guide}
1112
1138
  */
1113
- declare const _default$8: typeof __VLS_export$4;
1114
- declare const __VLS_export$4: __VLS_WithSlots$2<import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<DetailsProps, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {}, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<DetailsProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue", { with: { "resolution-mode": "import" } }).ComponentProvideOptions, false, {}, any>, {
1139
+ declare const _default$8: typeof __VLS_export$5;
1140
+ declare const __VLS_export$5: __VLS_WithSlots$3<import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<DetailsProps, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {}, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<DetailsProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue", { with: { "resolution-mode": "import" } }).ComponentProvideOptions, false, {}, any>, {
1115
1141
  default?: (props: {}) => any;
1116
1142
  }>;
1117
- type __VLS_WithSlots$2<T, S> = T & {
1143
+ type __VLS_WithSlots$3<T, S> = T & {
1118
1144
  new (): {
1119
1145
  $slots: S;
1120
1146
  };
@@ -1181,8 +1207,50 @@ type ImgProps = {
1181
1207
  *
1182
1208
  * @see {@link https://nexdom-healthtech.github.io/uimed-vue/guide/components/img | Img Guide}
1183
1209
  */
1184
- declare const _default$11: typeof __VLS_export$3;
1185
- declare const __VLS_export$3: import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<ImgProps, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {}, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<ImgProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue", { with: { "resolution-mode": "import" } }).ComponentProvideOptions, false, {}, any>;
1210
+ declare const _default$11: typeof __VLS_export$4;
1211
+ declare const __VLS_export$4: import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<ImgProps, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {}, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<ImgProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue", { with: { "resolution-mode": "import" } }).ComponentProvideOptions, false, {}, any>;
1212
+ //#endregion
1213
+ //#region src/components/link/types.d.ts
1214
+ /**
1215
+ * Props exposed by the {@link Link} component.
1216
+ */
1217
+ type LinkProps = {
1218
+ /**
1219
+ * Where the link goes. A route inside the app (`"/login"`,
1220
+ * `{ name: "forgot-password" }`) navigates through the app's router; a URL
1221
+ * starting with `http` navigates through the browser, in the same tab.
1222
+ */
1223
+ route: RouteLocationRaw;
1224
+ /**
1225
+ * Component id to use on automated tests.
1226
+ */
1227
+ dataTestid?: string;
1228
+ };
1229
+ //#endregion
1230
+ //#region src/components/link/link.vue.d.ts
1231
+ /**
1232
+ * Standalone text link, such as "Forgot your password?" below a login form.
1233
+ * Routes inside the app navigate through the app's router, and URLs starting
1234
+ * with `http` navigate through the browser, in the same tab.
1235
+ *
1236
+ * @example
1237
+ * ```vue
1238
+ * <template>
1239
+ * <u-link route="/forgot-password">Forgot your password?</u-link>
1240
+ * </template>
1241
+ * ```
1242
+ *
1243
+ * @see {@link https://nexdom-healthtech.github.io/uimed-vue/guide/components/link | Link Guide}
1244
+ */
1245
+ declare const _default$12: typeof __VLS_export$3;
1246
+ declare const __VLS_export$3: __VLS_WithSlots$2<import("vue", { with: { "resolution-mode": "import" } }).DefineComponent<LinkProps, {}, {}, {}, {}, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, import("vue", { with: { "resolution-mode": "import" } }).ComponentOptionsMixin, {}, string, import("vue", { with: { "resolution-mode": "import" } }).PublicProps, Readonly<LinkProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue", { with: { "resolution-mode": "import" } }).ComponentProvideOptions, false, {}, any>, {
1247
+ default?: (props: {}) => any;
1248
+ }>;
1249
+ type __VLS_WithSlots$2<T, S> = T & {
1250
+ new (): {
1251
+ $slots: S;
1252
+ };
1253
+ };
1186
1254
  //#endregion
1187
1255
  //#region src/components/data-sets/data-set/types.d.ts
1188
1256
  /**
@@ -1451,4 +1519,4 @@ type __VLS_WithSlots<T, S> = T & {
1451
1519
  };
1452
1520
  };
1453
1521
  //#endregion
1454
- export { _default as UAutocompleteField, _default$1 as UButton, _default$2 as UCheckbox, _default$3 as UColumn, _default$4 as UContainer, _default$5 as UDataSet, _default$6 as UDataSetItem, _default$7 as UDateTimeField, _default$8 as UDetails, _default$9 as UDialog, _default$10 as UForm, _default$11 as UImg, _default$12 as UMain, _default$13 as URow, _default$14 as USection, _default$15 as USectionContent, _default$16 as UTable, _default$17 as UTextField };
1522
+ export { _default as UAutocompleteField, _default$1 as UButton, _default$2 as UCheckbox, _default$3 as UColumn, _default$4 as UContainer, _default$5 as UDataSet, _default$6 as UDataSetItem, _default$7 as UDateTimeField, _default$8 as UDetails, _default$9 as UDialog, _default$10 as UForm, _default$11 as UImg, _default$12 as ULink, _default$13 as UMain, _default$14 as URow, _default$15 as USection, _default$16 as USectionContent, _default$17 as UTable, _default$18 as UTextField };
@@ -1,9 +1,10 @@
1
1
  import { a as messages, n as owners$1, r as requests, s as useVuetifyColor } from "./use-dialog-Ck2_ZW7T.js";
2
2
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, guardReactiveProps, inject, isRef, mergeModels, mergeProps, nextTick, normalizeClass, normalizeProps, onMounted, onScopeDispose, onUnmounted, openBlock, provide, readonly, ref, renderList, renderSlot, resolveDynamicComponent, shallowRef, toDisplayString, toValue, unref, useId, useModel, useSlots, useTemplateRef, watch, withCtx, withKeys, withModifiers } from "vue";
3
3
  import { pt } from "vuetify/locale";
4
- import { VApp, VAppBar, VAppBarNavIcon, VAppBarTitle, VAutocomplete, VAvatar, VBadge, VBtn, VCard, VCardActions, VCardText, VCheckboxBtn, VCol, VCombobox, VContainer, VDataIterator, VDatePicker, VDialog, VDivider, VEmptyState, VExpansionPanel, VExpansionPanelText, VExpansionPanelTitle, VExpansionPanels, VForm, VIcon, VIconBtn, VImg, VList, VListGroup, VListItem, VListItemAction, VListSubheader, VLocaleProvider, VMain, VMenu, VNavigationDrawer, VPagination, VProgressCircular, VProgressLinear, VRow, VSkeletonLoader, VSnackbarQueue, VTable, VTextField, VTimePicker } from "vuetify/components";
4
+ import { VApp, VAppBar, VAppBarNavIcon, VAppBarTitle, VAutocomplete, VAvatar, VBadge, VBtn, VCard, VCardActions, VCardText, VCheckboxBtn, VCol, VCombobox, VContainer, VDataIterator, VDatePicker, VDialog, VDivider, VEmptyState, VExpansionPanel, VExpansionPanelText, VExpansionPanelTitle, VExpansionPanels, VFooter, VForm, VIcon, VIconBtn, VImg, VList, VListGroup, VListItem, VListItemAction, VListSubheader, VLocaleProvider, VMain, VMenu, VNavigationDrawer, VPagination, VProgressCircular, VProgressLinear, VRow, VSkeletonLoader, VSnackbarQueue, VTable, VTextField, VTimePicker } from "vuetify/components";
5
5
  import { formatDateTime, isEmail, isEmpty, isPhone, isUrl } from "@nexdom/shared/utils";
6
6
  import { VHighlight } from "vuetify/labs/VHighlight";
7
+ import { RouterLink } from "vue-router";
7
8
  //#region src/composables/navigation/use-route-props.ts
8
9
  function useRouteProps(route) {
9
10
  return computed(() => routeToProps(route));
@@ -726,6 +727,35 @@ var navigation_menu_default = /* @__PURE__ */ defineComponent({
726
727
  }
727
728
  });
728
729
  //#endregion
730
+ //#region src/components/footer/footer.vue
731
+ var footer_default = /* @__PURE__ */ defineComponent({
732
+ inheritAttrs: false,
733
+ __name: "footer",
734
+ props: {
735
+ description: {
736
+ type: String,
737
+ required: false
738
+ },
739
+ dataTestid: {
740
+ type: String,
741
+ required: false
742
+ }
743
+ },
744
+ setup(__props) {
745
+ const props = __props;
746
+ return (_ctx, _cache) => {
747
+ return openBlock(), createBlock(unref(VFooter), {
748
+ "data-testid": props.dataTestid,
749
+ class: "justify-center text-center",
750
+ app: ""
751
+ }, {
752
+ default: withCtx(() => [createTextVNode(toDisplayString(props.description), 1)]),
753
+ _: 1
754
+ }, 8, ["data-testid"]);
755
+ };
756
+ }
757
+ });
758
+ //#endregion
729
759
  //#region src/composables/dimensions/dimensions.ts
730
760
  /**
731
761
  * Vuetify's utility class that stretches a component to the whole width of its parent, for
@@ -1181,6 +1211,10 @@ var main_default = /* @__PURE__ */ defineComponent({
1181
1211
  type: Object,
1182
1212
  required: false
1183
1213
  },
1214
+ footer: {
1215
+ type: Object,
1216
+ required: false
1217
+ },
1184
1218
  loading: {
1185
1219
  type: Boolean,
1186
1220
  required: false
@@ -1227,7 +1261,8 @@ var main_default = /* @__PURE__ */ defineComponent({
1227
1261
  _: 3
1228
1262
  })]),
1229
1263
  _: 3
1230
- })
1264
+ }),
1265
+ props.footer?.description ? (openBlock(), createBlock(footer_default, normalizeProps(mergeProps({ key: 2 }, props.footer)), null, 16)) : createCommentVNode("v-if", true)
1231
1266
  ]),
1232
1267
  _: 3
1233
1268
  }, 8, ["data-testid"]);
@@ -2312,6 +2347,35 @@ var img_default = /* @__PURE__ */ defineComponent({
2312
2347
  }
2313
2348
  });
2314
2349
  //#endregion
2350
+ //#region src/components/link/link.vue
2351
+ var link_default = /* @__PURE__ */ defineComponent({
2352
+ inheritAttrs: false,
2353
+ __name: "link",
2354
+ props: {
2355
+ route: {
2356
+ type: null,
2357
+ required: true
2358
+ },
2359
+ dataTestid: {
2360
+ type: String,
2361
+ required: false
2362
+ }
2363
+ },
2364
+ setup(__props) {
2365
+ const props = __props;
2366
+ const routeProps = useRouteProps(() => props.route);
2367
+ return (_ctx, _cache) => {
2368
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" No Vuetify component renders an inline text link, so the class removes the browser's underline "), (openBlock(), createBlock(resolveDynamicComponent(unref(isExternalRoute)(props.route) ? "a" : unref(RouterLink)), mergeProps(unref(routeProps), {
2369
+ class: "text-decoration-none",
2370
+ "data-testid": props.dataTestid
2371
+ }), {
2372
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
2373
+ _: 3
2374
+ }, 16, ["data-testid"]))], 2112);
2375
+ };
2376
+ }
2377
+ });
2378
+ //#endregion
2315
2379
  //#region src/composables/data-set/data-set.ts
2316
2380
  /**
2317
2381
  * Width, out of the grid's 12 columns, taken by each record so that
@@ -2615,4 +2679,4 @@ var data_set_item_default = /* @__PURE__ */ defineComponent({
2615
2679
  }
2616
2680
  });
2617
2681
  //#endregion
2618
- export { autocomplete_field_default as UAutocompleteField, button_default as UButton, checkbox_default as UCheckbox, column_default as UColumn, container_default as UContainer, data_set_default as UDataSet, data_set_item_default as UDataSetItem, date_time_field_default as UDateTimeField, details_default as UDetails, dialog_default as UDialog, form_default as UForm, img_default as UImg, main_default as UMain, row_default as URow, section_default as USection, section_content_default as USectionContent, table_default as UTable, text_field_default as UTextField };
2682
+ export { autocomplete_field_default as UAutocompleteField, button_default as UButton, checkbox_default as UCheckbox, column_default as UColumn, container_default as UContainer, data_set_default as UDataSet, data_set_item_default as UDataSetItem, date_time_field_default as UDateTimeField, details_default as UDetails, dialog_default as UDialog, form_default as UForm, img_default as UImg, link_default as ULink, main_default as UMain, row_default as URow, section_default as USection, section_content_default as USectionContent, table_default as UTable, text_field_default as UTextField };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nexdom/uimed-vue",
3
- "version": "2.0.0-beta.36",
3
+ "version": "2.0.0-beta.38",
4
4
  "description": "A ui framework for NEXDOM applications.",
5
5
  "keywords": [
6
6
  "lib",