@nexdom/uimed-vue 2.0.0-beta.39 → 2.0.0-beta.40

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
@@ -210,7 +210,7 @@ Use an existing composable (e.g. `use-toast`) as the reference, and deliver in t
210
210
  - Public components/composables are re-exported from `src/components/index.ts` and `src/composables/index.ts`. Prop types stay internal (`types.ts` is not re-exported); consumers derive them with `ComponentProps` (see [Usage](#usage)).
211
211
  - 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.
212
212
  - 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.
213
- - 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.
213
+ - 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; the internal `SkeletonLoader` wraps Vuetify's skeleton loader so its loading announcement gets valid ARIA attributes in server rendering. All are meant to be removed once fixed upstream — don't build further on top of them without checking if they're still needed.
214
214
 
215
215
  ## Testing conventions
216
216
 
@@ -463,8 +463,8 @@ declare const __VLS_export$16: import("vue", { with: { "resolution-mode": "impor
463
463
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
464
464
  }>, {
465
465
  variant: TextFieldVariant;
466
- clearable: boolean;
467
466
  type: TextFieldType;
467
+ clearable: boolean;
468
468
  }, {}, {}, {}, string, import("vue", { with: { "resolution-mode": "import" } }).ComponentProvideOptions, false, {}, any>;
469
469
  //#endregion
470
470
  //#region src/components/inputs/checkbox/types.d.ts
@@ -1,5 +1,5 @@
1
1
  import { a as messages, n as owners$1, r as requests, s as useVuetifyColor } from "./use-dialog-Ck2_ZW7T.js";
2
- import { useMask } from "vuetify";
2
+ import { useLocale, useMask } from "vuetify";
3
3
  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";
4
4
  import { pt } from "vuetify/locale";
5
5
  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";
@@ -113,6 +113,78 @@ function isIgnoredTarget(event) {
113
113
  return event.target instanceof Element && event.target.closest(IGNORED_TARGETS) !== null;
114
114
  }
115
115
  //#endregion
116
+ //#region src/composables/dimensions/dimensions.ts
117
+ /**
118
+ * Vuetify's utility class that stretches a component to the whole width of its parent, for
119
+ * components with a `fullWidth` prop.
120
+ */
121
+ function useFullWidth(fullWidth) {
122
+ return computed(() => toValue(fullWidth) ? "w-100" : void 0);
123
+ }
124
+ /**
125
+ * Vuetify's utility class that stretches a component to the whole height of its parent, for
126
+ * components with a `fullHeight` prop. The parent must have a height of its own.
127
+ */
128
+ function useFullHeight(fullHeight) {
129
+ return computed(() => toValue(fullHeight) ? "h-100" : void 0);
130
+ }
131
+ //#endregion
132
+ //#region src/components/skeleton-loader/skeleton-loader.vue
133
+ var skeleton_loader_default = /* @__PURE__ */ defineComponent({
134
+ inheritAttrs: false,
135
+ __name: "skeleton-loader",
136
+ props: {
137
+ loading: {
138
+ type: Boolean,
139
+ required: false
140
+ },
141
+ type: {
142
+ type: null,
143
+ required: true
144
+ },
145
+ fullWidth: {
146
+ type: Boolean,
147
+ required: false
148
+ },
149
+ fullHeight: {
150
+ type: Boolean,
151
+ required: false
152
+ },
153
+ color: {
154
+ type: String,
155
+ required: false
156
+ }
157
+ },
158
+ setup(__props) {
159
+ const props = __props;
160
+ const { t } = useLocale();
161
+ const widthClass = useFullWidth(() => props.fullWidth);
162
+ const heightClass = useFullHeight(() => props.fullHeight);
163
+ const loadingAttrs = computed(() => ({
164
+ ariaLabel: void 0,
165
+ ariaLive: void 0,
166
+ "aria-label": t("$vuetify.loading"),
167
+ "aria-live": "polite"
168
+ }));
169
+ return (_ctx, _cache) => {
170
+ return openBlock(), createBlock(unref(VSkeletonLoader), mergeProps({
171
+ loading: props.loading,
172
+ type: props.type,
173
+ color: props.color,
174
+ class: [unref(widthClass), unref(heightClass)]
175
+ }, loadingAttrs.value), {
176
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
177
+ _: 3
178
+ }, 16, [
179
+ "loading",
180
+ "type",
181
+ "color",
182
+ "class"
183
+ ]);
184
+ };
185
+ }
186
+ });
187
+ //#endregion
116
188
  //#region src/components/app-bar/app-bar.vue?vue&type=script&setup=true&lang.ts
117
189
  const _hoisted_1$3 = { class: "opacity-60" };
118
190
  //#endregion
@@ -194,7 +266,7 @@ var app_bar_default = /* @__PURE__ */ defineComponent({
194
266
  "data-testid": props.dataTestid,
195
267
  "aria-busy": props.loading || void 0
196
268
  }, {
197
- append: withCtx(() => [createVNode(unref(VSkeletonLoader), {
269
+ append: withCtx(() => [createVNode(skeleton_loader_default, {
198
270
  loading: props.loading,
199
271
  type: "avatar"
200
272
  }, {
@@ -692,7 +764,7 @@ var navigation_menu_default = /* @__PURE__ */ defineComponent({
692
764
  "data-testid",
693
765
  "disabled"
694
766
  ])])]),
695
- default: withCtx(() => [createVNode(unref(VDivider)), createVNode(unref(VSkeletonLoader), {
767
+ default: withCtx(() => [createVNode(unref(VDivider)), createVNode(skeleton_loader_default, {
696
768
  loading: props.loading,
697
769
  type: "list-item@6",
698
770
  color: "primary"
@@ -757,22 +829,6 @@ var footer_default = /* @__PURE__ */ defineComponent({
757
829
  }
758
830
  });
759
831
  //#endregion
760
- //#region src/composables/dimensions/dimensions.ts
761
- /**
762
- * Vuetify's utility class that stretches a component to the whole width of its parent, for
763
- * components with a `fullWidth` prop.
764
- */
765
- function useFullWidth(fullWidth) {
766
- return computed(() => toValue(fullWidth) ? "w-100" : void 0);
767
- }
768
- /**
769
- * Vuetify's utility class that stretches a component to the whole height of its parent, for
770
- * components with a `fullHeight` prop. The parent must have a height of its own.
771
- */
772
- function useFullHeight(fullHeight) {
773
- return computed(() => toValue(fullHeight) ? "h-100" : void 0);
774
- }
775
- //#endregion
776
832
  //#region src/components/grid/container/container.vue
777
833
  var container_default = /* @__PURE__ */ defineComponent({
778
834
  inheritAttrs: false,
@@ -2329,10 +2385,11 @@ var section_default = /* @__PURE__ */ defineComponent({
2329
2385
  const showActions = computed(() => !!props.actions?.length);
2330
2386
  const skeletonType = computed(() => showActions.value ? "image, actions" : "image");
2331
2387
  return (_ctx, _cache) => {
2332
- return openBlock(), createBlock(unref(VSkeletonLoader), {
2388
+ return openBlock(), createBlock(skeleton_loader_default, {
2333
2389
  loading: props.loading,
2334
2390
  type: skeletonType.value,
2335
- class: normalizeClass([unref(widthClass), unref(heightClass)])
2391
+ "full-width": props.fullWidth,
2392
+ "full-height": props.fullHeight
2336
2393
  }, {
2337
2394
  default: withCtx(() => [createCommentVNode(" The card and its actions have no alignment props, so `textAlign` uses utility classes "), createVNode(unref(VCard), {
2338
2395
  title: title.value,
@@ -2370,7 +2427,8 @@ var section_default = /* @__PURE__ */ defineComponent({
2370
2427
  }, 8, [
2371
2428
  "loading",
2372
2429
  "type",
2373
- "class"
2430
+ "full-width",
2431
+ "full-height"
2374
2432
  ]);
2375
2433
  };
2376
2434
  }
@@ -2420,7 +2478,7 @@ var table_default = /* @__PURE__ */ defineComponent({
2420
2478
  return `${props.dataTestid}-${index}`;
2421
2479
  }
2422
2480
  return (_ctx, _cache) => {
2423
- return openBlock(), createBlock(unref(VSkeletonLoader), {
2481
+ return openBlock(), createBlock(skeleton_loader_default, {
2424
2482
  loading: props.loading,
2425
2483
  type: type.value
2426
2484
  }, {
@@ -2484,10 +2542,10 @@ var details_default = /* @__PURE__ */ defineComponent({
2484
2542
  const props = __props;
2485
2543
  const outlined = computed(() => props.variant === "secondary");
2486
2544
  return (_ctx, _cache) => {
2487
- return openBlock(), createBlock(unref(VSkeletonLoader), {
2545
+ return openBlock(), createBlock(skeleton_loader_default, {
2488
2546
  loading: props.loading,
2489
2547
  type: "heading",
2490
- width: "100%"
2548
+ "full-width": ""
2491
2549
  }, {
2492
2550
  default: withCtx(() => [createVNode(unref(VExpansionPanels), {
2493
2551
  flat: outlined.value,
@@ -2779,10 +2837,10 @@ var data_set_default = /* @__PURE__ */ defineComponent({
2779
2837
  const filterKeys = useDataSetFilterKeys(() => props.searchKeys);
2780
2838
  useDataSetSearchPageReset(search, page);
2781
2839
  return (_ctx, _cache) => {
2782
- return openBlock(), createBlock(unref(VSkeletonLoader), {
2840
+ return openBlock(), createBlock(skeleton_loader_default, {
2783
2841
  loading: props.loading,
2784
2842
  type: "card",
2785
- width: "100%"
2843
+ "full-width": ""
2786
2844
  }, {
2787
2845
  default: withCtx(() => [createVNode(unref(VDataIterator), {
2788
2846
  ref_key: "iterator",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nexdom/uimed-vue",
3
- "version": "2.0.0-beta.39",
3
+ "version": "2.0.0-beta.40",
4
4
  "description": "A ui framework for NEXDOM applications.",
5
5
  "keywords": [
6
6
  "lib",