@merkaly/nuxt 0.7.7 → 0.7.9
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/dist/module.d.mts +8 -0
- package/dist/module.json +1 -1
- package/dist/module.mjs +10 -3
- package/dist/runtime/components/input/InputSearch.d.vue.ts +23 -7
- package/dist/runtime/components/input/InputSearch.vue +8 -0
- package/dist/runtime/components/input/InputSearch.vue.d.ts +23 -7
- package/dist/runtime/components/input/InputSelect.vue +1 -1
- package/dist/runtime/components/table/TableDatagrid.vue +21 -13
- package/dist/runtime/composables/useDatagrid.js +2 -0
- package/package.json +2 -2
package/dist/module.d.mts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as _nuxt_schema from '@nuxt/schema';
|
|
2
2
|
import { ClientAuthorizationParams } from '@auth0/auth0-spa-js';
|
|
3
|
+
import { Strategies } from '@nuxtjs/i18n';
|
|
3
4
|
export { AdapterArgs, AdapterOptions } from '../dist/runtime/utils/withAdapter.js';
|
|
4
5
|
export { ApiOptions, HooksOptions, ParamsOptions, RefOptions } from '../dist/runtime/plugins/api.global.js';
|
|
5
6
|
|
|
@@ -27,6 +28,13 @@ interface MerkalyModuleOptions {
|
|
|
27
28
|
i18n?: {
|
|
28
29
|
defaultLocale: string;
|
|
29
30
|
locales: MerkalyI18nLocale[];
|
|
31
|
+
/**
|
|
32
|
+
* URL routing strategy. Defaults to `'no_prefix'` so existing projects keep
|
|
33
|
+
* their current behavior (no locale segment in the URL). Set to a prefix
|
|
34
|
+
* variant to expose a locale segment (e.g. `/es/about`) without translating
|
|
35
|
+
* the route paths.
|
|
36
|
+
*/
|
|
37
|
+
strategy?: Strategies;
|
|
30
38
|
};
|
|
31
39
|
plausible?: {
|
|
32
40
|
domain: string;
|
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -27,7 +27,8 @@ const defaultOptions = {
|
|
|
27
27
|
},
|
|
28
28
|
i18n: {
|
|
29
29
|
defaultLocale: "en-US",
|
|
30
|
-
locales: []
|
|
30
|
+
locales: [],
|
|
31
|
+
strategy: "no_prefix"
|
|
31
32
|
},
|
|
32
33
|
plausible: {
|
|
33
34
|
domain: "",
|
|
@@ -117,7 +118,7 @@ function configureI18n(nuxt, options) {
|
|
|
117
118
|
defaultLocale: options.i18n.defaultLocale,
|
|
118
119
|
detectBrowserLanguage: { useCookie: true },
|
|
119
120
|
restructureDir: ".",
|
|
120
|
-
strategy: "no_prefix",
|
|
121
|
+
strategy: options.i18n.strategy ?? "no_prefix",
|
|
121
122
|
vueI18n
|
|
122
123
|
};
|
|
123
124
|
}
|
|
@@ -193,7 +194,13 @@ function configureFontAwesome(nuxt) {
|
|
|
193
194
|
}
|
|
194
195
|
function configureVite(nuxt) {
|
|
195
196
|
nuxt.options.vite = defu(nuxt.options.vite || {}, {
|
|
196
|
-
plugins: [svgLoader()]
|
|
197
|
+
plugins: [svgLoader()],
|
|
198
|
+
// Force a single shared notivue instance so consumers don't have to declare
|
|
199
|
+
// `vite.resolve.dedupe: ['notivue']` themselves (avoids the duplicate-instance
|
|
200
|
+
// `useNotivueInstance()` error, especially when @merkaly/nuxt is linked locally).
|
|
201
|
+
resolve: {
|
|
202
|
+
dedupe: ["notivue"]
|
|
203
|
+
}
|
|
197
204
|
});
|
|
198
205
|
}
|
|
199
206
|
function configureNuxtOptions(nuxt, options) {
|
|
@@ -1,11 +1,27 @@
|
|
|
1
|
-
declare const
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
2
|
+
debounce: {
|
|
3
|
+
type: NumberConstructor;
|
|
4
|
+
default: () => number;
|
|
5
|
+
};
|
|
6
|
+
modelValue: {
|
|
7
|
+
type: import("vue").PropType<string>;
|
|
8
|
+
};
|
|
9
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
10
|
+
change: () => any;
|
|
6
11
|
"update:modelValue": (value: string) => any;
|
|
7
|
-
}, string, import("vue").PublicProps, Readonly<
|
|
12
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
13
|
+
debounce: {
|
|
14
|
+
type: NumberConstructor;
|
|
15
|
+
default: () => number;
|
|
16
|
+
};
|
|
17
|
+
modelValue: {
|
|
18
|
+
type: import("vue").PropType<string>;
|
|
19
|
+
};
|
|
20
|
+
}>> & Readonly<{
|
|
21
|
+
onChange?: (() => any) | undefined;
|
|
8
22
|
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
9
|
-
}>, {
|
|
23
|
+
}>, {
|
|
24
|
+
debounce: number;
|
|
25
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
10
26
|
declare const _default: typeof __VLS_export;
|
|
11
27
|
export default _default;
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
<script setup>
|
|
2
|
+
import { watch } from "vue";
|
|
3
|
+
import { useDebounceFn } from "@vueuse/core";
|
|
2
4
|
import FormatIcon from "../format/FormatIcon.vue";
|
|
5
|
+
const props = defineProps({
|
|
6
|
+
debounce: { type: Number, default: () => 300 }
|
|
7
|
+
});
|
|
3
8
|
const search = defineModel({ type: String, default: () => String() });
|
|
9
|
+
const emit = defineEmits(["change"]);
|
|
10
|
+
const emitChange = useDebounceFn(() => emit("change"), props.debounce);
|
|
11
|
+
watch(search, () => emitChange());
|
|
4
12
|
</script>
|
|
5
13
|
|
|
6
14
|
<template>
|
|
@@ -1,11 +1,27 @@
|
|
|
1
|
-
declare const
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
2
|
+
debounce: {
|
|
3
|
+
type: NumberConstructor;
|
|
4
|
+
default: () => number;
|
|
5
|
+
};
|
|
6
|
+
modelValue: {
|
|
7
|
+
type: import("vue").PropType<string>;
|
|
8
|
+
};
|
|
9
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
10
|
+
change: () => any;
|
|
6
11
|
"update:modelValue": (value: string) => any;
|
|
7
|
-
}, string, import("vue").PublicProps, Readonly<
|
|
12
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
13
|
+
debounce: {
|
|
14
|
+
type: NumberConstructor;
|
|
15
|
+
default: () => number;
|
|
16
|
+
};
|
|
17
|
+
modelValue: {
|
|
18
|
+
type: import("vue").PropType<string>;
|
|
19
|
+
};
|
|
20
|
+
}>> & Readonly<{
|
|
21
|
+
onChange?: (() => any) | undefined;
|
|
8
22
|
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
9
|
-
}>, {
|
|
23
|
+
}>, {
|
|
24
|
+
debounce: number;
|
|
25
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
10
26
|
declare const _default: typeof __VLS_export;
|
|
11
27
|
export default _default;
|
|
@@ -22,7 +22,7 @@ const props = defineProps({
|
|
|
22
22
|
selectedItem: { type: Object, default: void 0 },
|
|
23
23
|
size: { type: String, default: () => void 0 }
|
|
24
24
|
});
|
|
25
|
-
const model = defineModel({ type: [String, Object, Number, Boolean, Array], default:
|
|
25
|
+
const model = defineModel({ type: [String, Object, Number, Boolean, Array], default: void 0 });
|
|
26
26
|
onBeforeMount(() => {
|
|
27
27
|
if (props.selectedItem) return;
|
|
28
28
|
if (model.value) {
|
|
@@ -107,10 +107,10 @@ function getRowAttrs(item, idx) {
|
|
|
107
107
|
|
|
108
108
|
<template>
|
|
109
109
|
<BCard no-body>
|
|
110
|
-
<BCardHeader v-if="!props.hideHeader" class="align-items-center
|
|
110
|
+
<BCardHeader v-if="!props.hideHeader" class="align-items-center position-relative">
|
|
111
111
|
<BCardTitle>
|
|
112
112
|
<div v-if="hasBulkSlot && !props.hideSelect && selectionState.selectedCount" class="w-35px">
|
|
113
|
-
<DropdownIcon icon="caret-down"
|
|
113
|
+
<DropdownIcon icon="caret-down" toggle-class="p-2">
|
|
114
114
|
<slot name="bulk" v-bind="{ items: selectionState.selectedItems, count: selectionState.selectedCount }" />
|
|
115
115
|
</DropdownIcon>
|
|
116
116
|
</div>
|
|
@@ -187,10 +187,10 @@ function getRowAttrs(item, idx) {
|
|
|
187
187
|
hover
|
|
188
188
|
responsive="lg"
|
|
189
189
|
small
|
|
190
|
-
table-class="align-middle table-row-dashed
|
|
191
|
-
<BThead class="sticky-top z-index-1">
|
|
192
|
-
<BTr class="text-start text-body-secondary fw-bold
|
|
193
|
-
<BTh v-if="hasDetailsSlot" class="
|
|
190
|
+
table-class="align-middle table-row-dashed h-100">
|
|
191
|
+
<BThead class="sticky-top z-index-1 align-middle">
|
|
192
|
+
<BTr class="text-start text-body-secondary fw-bold text-uppercase">
|
|
193
|
+
<BTh v-if="hasDetailsSlot" class="w-25px" style="padding: unset !important;" />
|
|
194
194
|
|
|
195
195
|
<BTh v-if="!props.hideSelect" class="w-40px px-0">
|
|
196
196
|
<div class="form-check form-check-sm form-check-custom cell-checkbox">
|
|
@@ -226,13 +226,14 @@ function getRowAttrs(item, idx) {
|
|
|
226
226
|
<BTbody v-else class="fw-semibold text-nowrap">
|
|
227
227
|
<template v-for="(item, idx) in visibleItems" :key="getRowKey(item, idx)">
|
|
228
228
|
<BTr v-bind="getRowAttrs(item, idx)">
|
|
229
|
-
<BTd v-if="hasDetailsSlot" class="
|
|
229
|
+
<BTd v-if="hasDetailsSlot" class="w-25px" style="padding: unset !important;">
|
|
230
230
|
<BButton
|
|
231
231
|
class="w-25px h-100 rounded-0 p-0 border-end border-dashed"
|
|
232
232
|
size="sm"
|
|
233
233
|
variant="none"
|
|
234
234
|
@click="toggleDetails(item)">
|
|
235
|
-
<FormatIcon :name="item._showDetails ? 'chevron-down' : 'chevron-right'"
|
|
235
|
+
<FormatIcon :name="item._showDetails ? 'chevron-down' : 'chevron-right'" class="p-0" size="sm"
|
|
236
|
+
variant="primary" />
|
|
236
237
|
</BButton>
|
|
237
238
|
</BTd>
|
|
238
239
|
|
|
@@ -251,7 +252,7 @@ function getRowAttrs(item, idx) {
|
|
|
251
252
|
</template>
|
|
252
253
|
|
|
253
254
|
<BTd v-if="hasActionsSlot" class="text-end px-3">
|
|
254
|
-
<DropdownIcon
|
|
255
|
+
<DropdownIcon :text="t('actions')" icon="caret-down" toggle-class="py-1 px-3" variant="light-dark">
|
|
255
256
|
<slot :index="idx" :item="item" name="actions" />
|
|
256
257
|
</DropdownIcon>
|
|
257
258
|
</BTd>
|
|
@@ -275,7 +276,7 @@ function getRowAttrs(item, idx) {
|
|
|
275
276
|
|
|
276
277
|
</BTableSimple>
|
|
277
278
|
|
|
278
|
-
<BCardFooter v-if="!props.hideFooter"
|
|
279
|
+
<BCardFooter v-if="!props.hideFooter">
|
|
279
280
|
<slot name="footer" />
|
|
280
281
|
|
|
281
282
|
<template v-if="!props.hidePagination">
|
|
@@ -297,7 +298,7 @@ function getRowAttrs(item, idx) {
|
|
|
297
298
|
@update:model-value="emit('fetch', 'paginate')" />
|
|
298
299
|
</BCol>
|
|
299
300
|
|
|
300
|
-
<BCol class="
|
|
301
|
+
<BCol class="text-muted" cols="auto">
|
|
301
302
|
<span v-if="$datagrid.loading">Loading...</span>
|
|
302
303
|
<FormatText v-else :template="paginationText.template" :values="paginationText.values" />
|
|
303
304
|
</BCol>
|
|
@@ -318,16 +319,23 @@ function getRowAttrs(item, idx) {
|
|
|
318
319
|
cursor: pointer;
|
|
319
320
|
}
|
|
320
321
|
|
|
321
|
-
thead {
|
|
322
|
+
table thead {
|
|
323
|
+
font-size: 0.8rem;
|
|
322
324
|
background: var(--bs-body-bg);
|
|
323
325
|
}
|
|
324
|
-
thead:before {
|
|
326
|
+
table thead:before {
|
|
325
327
|
content: "";
|
|
326
328
|
position: absolute;
|
|
327
329
|
inset: 0;
|
|
328
330
|
z-index: -1;
|
|
329
331
|
background: rgb(var(--bs-primary-rgb), 0.05);
|
|
330
332
|
}
|
|
333
|
+
table thead tr th:is(:first-child, :last-child) {
|
|
334
|
+
padding: 0 0.75rem !important;
|
|
335
|
+
}
|
|
336
|
+
table tbody tr td:is(:first-child, :last-child) {
|
|
337
|
+
padding: 0 0.75rem !important;
|
|
338
|
+
}
|
|
331
339
|
</style>
|
|
332
340
|
|
|
333
341
|
<i18n lang="json">
|
|
@@ -11,12 +11,14 @@ export function useDatagrid(params) {
|
|
|
11
11
|
} else if (mode === "append") {
|
|
12
12
|
state.items.push(item);
|
|
13
13
|
}
|
|
14
|
+
state.total += 1;
|
|
14
15
|
return state.items;
|
|
15
16
|
},
|
|
16
17
|
removeItem(predicate) {
|
|
17
18
|
const index = state.items.findIndex(predicate);
|
|
18
19
|
if (index !== -1) {
|
|
19
20
|
state.items.splice(index, 1);
|
|
21
|
+
state.total = Math.max(0, state.total - 1);
|
|
20
22
|
}
|
|
21
23
|
return index;
|
|
22
24
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@merkaly/nuxt",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.9",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/merkaly-io/nuxt.git"
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"@nuxt/kit": "^4.4.8",
|
|
39
39
|
"@nuxtjs/i18n": "^10.4.0",
|
|
40
40
|
"@nuxtjs/plausible": "^3.0.2",
|
|
41
|
-
"@sentry/nuxt": "^10.
|
|
41
|
+
"@sentry/nuxt": "^10.59.0",
|
|
42
42
|
"@types/node": "latest",
|
|
43
43
|
"@types/vue-select": "^3.16.8",
|
|
44
44
|
"@vueuse/components": "^14.3.0",
|