@ciwergrp/nuxid 1.5.14 → 1.6.2

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 CHANGED
@@ -1,6 +1,8 @@
1
1
  import * as _nuxt_schema from '@nuxt/schema';
2
2
  export * from '../dist/runtime/form.js';
3
3
  export { default as useHttp } from '../dist/runtime/form.js';
4
+ export { useBreadcrumbs, useTitle } from '../dist/runtime/page/index.js';
5
+ export { ActiveQueryFilter, QueryFilterDefinition, useQueryFilters, useRouteQuery } from '../dist/runtime/route/index.js';
4
6
  export * from '../dist/runtime/validator.js';
5
7
  export * from '../dist/runtime/helper/index.js';
6
8
  export * from '../dist/runtime/fetcher/index.js';
@@ -211,6 +213,15 @@ interface FetcherOptions {
211
213
  }
212
214
  type FetcherFeatureInput = boolean | Partial<FetcherOptions> | undefined;
213
215
 
216
+ interface VersionUpdaterOptions {
217
+ /**
218
+ * Enable version updater composable auto-import
219
+ * @default true
220
+ */
221
+ enabled: boolean;
222
+ }
223
+ type VersionUpdaterFeatureInput = boolean | Partial<VersionUpdaterOptions> | undefined;
224
+
214
225
  interface ModuleOptions {
215
226
  lodash?: LodashFeatureInput;
216
227
  validator?: ValidatorFeatureInput;
@@ -221,6 +232,7 @@ interface ModuleOptions {
221
232
  pinia?: PiniaFeatureInput;
222
233
  vueuse?: VueUseFeatureInput;
223
234
  fetcher?: FetcherFeatureInput;
235
+ versionUpdater?: VersionUpdaterFeatureInput;
224
236
  }
225
237
  declare const _default: _nuxt_schema.NuxtModule<ModuleOptions, ModuleOptions, false>;
226
238
 
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ciwergrp/nuxid",
3
3
  "configKey": "nuxid",
4
- "version": "1.5.14",
4
+ "version": "1.6.2",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "3.6.1"
package/dist/module.mjs CHANGED
@@ -3,6 +3,8 @@ import * as lodash from 'lodash-es';
3
3
  import { fileURLToPath } from 'node:url';
4
4
  export * from '../dist/runtime/form.js';
5
5
  export { default as useHttp } from '../dist/runtime/form.js';
6
+ export { useBreadcrumbs, useTitle } from '../dist/runtime/page/index.js';
7
+ export { ActiveQueryFilter, QueryFilterDefinition, useQueryFilters, useRouteQuery } from '../dist/runtime/route/index.js';
6
8
  export * from '../dist/runtime/validator.js';
7
9
  export * from '../dist/runtime/helper/index.js';
8
10
  export * from '../dist/runtime/fetcher/index.js';
@@ -577,6 +579,27 @@ function registerFetcherFeature(options, { from }) {
577
579
  addImports({ name: "CursorFetchOptions", as: "CursorFetchOptions", from, type: true });
578
580
  }
579
581
 
582
+ const versionUpdaterDefaults = {
583
+ enabled: true
584
+ };
585
+ function resolveVersionUpdaterOptions(input) {
586
+ if (input === false) {
587
+ return { ...versionUpdaterDefaults, enabled: false };
588
+ }
589
+ const overrides = typeof input === "boolean" || input === void 0 ? {} : input;
590
+ return {
591
+ ...versionUpdaterDefaults,
592
+ ...overrides,
593
+ enabled: overrides?.enabled ?? true
594
+ };
595
+ }
596
+ function registerVersionUpdaterFeature(options, { from }) {
597
+ if (!options.enabled) {
598
+ return;
599
+ }
600
+ addImports({ name: "useVersionUpdater", as: "useVersionUpdater", from });
601
+ }
602
+
580
603
  const module$1 = defineNuxtModule({
581
604
  meta: {
582
605
  name: "@ciwergrp/nuxid",
@@ -585,13 +608,15 @@ const module$1 = defineNuxtModule({
585
608
  moduleDependencies() {
586
609
  const dependencies = {
587
610
  "@sentry/nuxt": {
588
- version: "10.36.0"
611
+ version: "^10"
589
612
  }
590
613
  };
591
614
  return dependencies;
592
615
  },
593
616
  async setup(options, nuxt) {
594
617
  const resolver = createResolver(import.meta.url);
618
+ const pageRuntimeFrom = resolver.resolve("./runtime/page");
619
+ const routeRuntimeFrom = resolver.resolve("./runtime/route");
595
620
  const lodashOptions = resolveLodashOptions(options.lodash);
596
621
  const validatorOptions = resolveValidatorOptions(options.validator);
597
622
  const formOptions = resolveFormOptions(options.form);
@@ -601,6 +626,7 @@ const module$1 = defineNuxtModule({
601
626
  const piniaOptions = resolvePiniaOptions(options.pinia);
602
627
  const vueuseOptions = resolveVueUseOptions(options.vueuse);
603
628
  const fetcherOptions = resolveFetcherOptions(options.fetcher);
629
+ const versionUpdaterOptions = resolveVersionUpdaterOptions(options.versionUpdater);
604
630
  if (iconOptions.enabled) {
605
631
  await installModule("@nuxt/icon", iconOptions.config);
606
632
  }
@@ -630,6 +656,11 @@ const module$1 = defineNuxtModule({
630
656
  from: resolver.resolve("./runtime/fetcher")
631
657
  });
632
658
  }
659
+ if (versionUpdaterOptions.enabled) {
660
+ registerVersionUpdaterFeature(versionUpdaterOptions, {
661
+ from: resolver.resolve("./runtime/version-updater")
662
+ });
663
+ }
633
664
  if (piniaOptions.enabled) {
634
665
  const piniaRuntimeDir = fileURLToPath(new URL("./runtime/pinia", import.meta.url));
635
666
  registerPiniaFeature(piniaOptions, nuxt, {
@@ -647,6 +678,12 @@ const module$1 = defineNuxtModule({
647
678
  });
648
679
  registerVueUseFeature(vueuseOptions, nuxt);
649
680
  }
681
+ addImports({ name: "useTitle", as: "useTitle", from: pageRuntimeFrom });
682
+ addImports({ name: "useBreadcrumbs", as: "useBreadcrumbs", from: pageRuntimeFrom });
683
+ addImports({ name: "useRouteQuery", as: "useRouteQuery", from: routeRuntimeFrom });
684
+ addImports({ name: "useQueryFilters", as: "useQueryFilters", from: routeRuntimeFrom });
685
+ addImports({ name: "ActiveQueryFilter", as: "ActiveQueryFilter", from: routeRuntimeFrom, type: true });
686
+ addImports({ name: "QueryFilterDefinition", as: "QueryFilterDefinition", from: routeRuntimeFrom, type: true });
650
687
  addPlugin(resolver.resolve("./runtime/plugin"));
651
688
  }
652
689
  });
@@ -0,0 +1,16 @@
1
+ interface BreadcrumbItem {
2
+ name: string;
3
+ path: string;
4
+ }
5
+ export declare function useBreadcrumbs(): {
6
+ breadcrumbs: Readonly<import("vue").Ref<readonly {
7
+ readonly name: string;
8
+ readonly path: string;
9
+ }[], readonly {
10
+ readonly name: string;
11
+ readonly path: string;
12
+ }[]>>;
13
+ activeBreadcrumb: import("vue").ComputedRef<BreadcrumbItem | null>;
14
+ setBreadcrumbs: (value: BreadcrumbItem[]) => void;
15
+ };
16
+ export {};
@@ -0,0 +1,21 @@
1
+ import { computed, readonly, ref } from "vue";
2
+ const items = ref([]);
3
+ export function useBreadcrumbs() {
4
+ const activeBreadcrumb = computed(() => {
5
+ if (!items.value.length) {
6
+ return null;
7
+ }
8
+ return items.value[items.value.length - 1] ?? null;
9
+ });
10
+ function setBreadcrumbs(value) {
11
+ items.value = value.map((item) => ({
12
+ name: item.name,
13
+ path: item.path
14
+ }));
15
+ }
16
+ return {
17
+ breadcrumbs: readonly(items),
18
+ activeBreadcrumb,
19
+ setBreadcrumbs
20
+ };
21
+ }
@@ -0,0 +1,2 @@
1
+ export * from './breadcrumb.js';
2
+ export * from './title.js';
@@ -0,0 +1,2 @@
1
+ export * from "./breadcrumb.js";
2
+ export * from "./title.js";
@@ -0,0 +1,5 @@
1
+ export declare function useTitle(): {
2
+ title: Readonly<import("vue").Ref<string, string>>;
3
+ getTitle: () => string;
4
+ setTitle: (value: string) => void;
5
+ };
@@ -0,0 +1,19 @@
1
+ import { useHead } from "@unhead/vue";
2
+ import { ref, readonly } from "vue";
3
+ const title = ref("");
4
+ export function useTitle() {
5
+ const getTitle = () => {
6
+ return title.value;
7
+ };
8
+ const setTitle = (value) => {
9
+ title.value = value;
10
+ useHead({
11
+ title: title.value
12
+ });
13
+ };
14
+ return {
15
+ title: readonly(title),
16
+ getTitle,
17
+ setTitle
18
+ };
19
+ }
@@ -0,0 +1,2 @@
1
+ export * from './query-filters.js';
2
+ export * from './route-query.js';
@@ -0,0 +1,2 @@
1
+ export * from "./query-filters.js";
2
+ export * from "./route-query.js";
@@ -0,0 +1,29 @@
1
+ import type { LocationQuery, LocationQueryValue } from 'vue-router';
2
+ export interface ActiveQueryFilter {
3
+ key: string;
4
+ label: string;
5
+ value: string;
6
+ displayValue: string;
7
+ }
8
+ export interface QueryFilterDefinition {
9
+ key: string;
10
+ label: string;
11
+ clearQueryKeys: string[];
12
+ resolve: (query: LocationQuery) => {
13
+ value: string;
14
+ displayValue: string;
15
+ } | null;
16
+ }
17
+ interface FilterChangePayload {
18
+ key: string;
19
+ active: boolean;
20
+ }
21
+ declare function normalizeQueryValue(value: LocationQueryValue | LocationQueryValue[] | undefined): LocationQueryValue | undefined;
22
+ export declare function useQueryFilters(definitions: QueryFilterDefinition[]): {
23
+ activeFilters: import("vue").ComputedRef<ActiveQueryFilter[]>;
24
+ applyFilters: (query: Record<string, any>, callback?: () => void | Promise<void>) => Promise<void>;
25
+ resetFilters: (queryKeys: string[], callback?: () => void | Promise<void>) => Promise<void>;
26
+ handleFilterChange: (payload: FilterChangePayload, callback?: () => void | Promise<void>) => Promise<void>;
27
+ normalizeQueryValue: typeof normalizeQueryValue;
28
+ };
29
+ export {};
@@ -0,0 +1,61 @@
1
+ import { useRoute } from "vue-router";
2
+ import { computed } from "vue";
3
+ import { useRouteQuery } from "./route-query.js";
4
+ function normalizeQueryValue(value) {
5
+ if (Array.isArray(value)) {
6
+ return value[0];
7
+ }
8
+ return value;
9
+ }
10
+ export function useQueryFilters(definitions) {
11
+ const route = useRoute();
12
+ const { URLRouteQuery } = useRouteQuery();
13
+ const activeFilters = computed(() => {
14
+ return definitions.map((definition) => {
15
+ const resolved = definition.resolve(route.query);
16
+ if (!resolved) {
17
+ return null;
18
+ }
19
+ return {
20
+ key: definition.key,
21
+ label: definition.label,
22
+ value: resolved.value,
23
+ displayValue: resolved.displayValue
24
+ };
25
+ }).filter((filter) => filter !== null);
26
+ });
27
+ async function applyFilters(query, callback) {
28
+ await URLRouteQuery(query);
29
+ await callback?.();
30
+ }
31
+ async function resetFilters(queryKeys, callback) {
32
+ const query = {};
33
+ for (const key of queryKeys) {
34
+ query[key] = void 0;
35
+ }
36
+ await URLRouteQuery(query);
37
+ await callback?.();
38
+ }
39
+ async function handleFilterChange(payload, callback) {
40
+ if (payload.active) {
41
+ return;
42
+ }
43
+ const definition = definitions.find((filter) => filter.key === payload.key);
44
+ if (!definition) {
45
+ return;
46
+ }
47
+ const query = {};
48
+ for (const key of definition.clearQueryKeys) {
49
+ query[key] = void 0;
50
+ }
51
+ await URLRouteQuery(query);
52
+ await callback?.();
53
+ }
54
+ return {
55
+ activeFilters,
56
+ applyFilters,
57
+ resetFilters,
58
+ handleFilterChange,
59
+ normalizeQueryValue
60
+ };
61
+ }
@@ -0,0 +1,3 @@
1
+ export declare function useRouteQuery(): {
2
+ URLRouteQuery: (query: any, route?: string) => Promise<void | import("vue-router").NavigationFailure | undefined>;
3
+ };
@@ -0,0 +1,17 @@
1
+ import { useRoute, useRouter } from "vue-router";
2
+ export function useRouteQuery() {
3
+ const URLRouteQuery = (query, route) => {
4
+ const $route = useRoute();
5
+ const router = useRouter();
6
+ return router.push({
7
+ path: route,
8
+ query: {
9
+ ...$route.query,
10
+ ...query
11
+ }
12
+ });
13
+ };
14
+ return {
15
+ URLRouteQuery
16
+ };
17
+ }
@@ -0,0 +1,3 @@
1
+ export declare function useVersionUpdater(): {
2
+ isNewVersionAvailable: Readonly<import("vue").Ref<boolean, boolean>>;
3
+ };
@@ -0,0 +1,12 @@
1
+ import { useNuxtApp } from "nuxt/app";
2
+ import { ref, readonly } from "vue";
3
+ export function useVersionUpdater() {
4
+ const isNewVersionAvailable = ref(false);
5
+ const nuxtApp = useNuxtApp();
6
+ nuxtApp.hooks.hookOnce("app:manifest:update", () => {
7
+ isNewVersionAvailable.value = true;
8
+ });
9
+ return {
10
+ isNewVersionAvailable: readonly(isNewVersionAvailable)
11
+ };
12
+ }
package/dist/types.d.mts CHANGED
@@ -1,5 +1,9 @@
1
1
  export { type useHttp } from '../dist/runtime/form.js'
2
2
 
3
+ export { type useBreadcrumbs, type useTitle } from '../dist/runtime/page/index.js'
4
+
5
+ export { type ActiveQueryFilter, type QueryFilterDefinition, type useQueryFilters, type useRouteQuery } from '../dist/runtime/route/index.js'
6
+
3
7
  export { default } from './module.mjs'
4
8
 
5
9
  export { type ModuleOptions } from './module.mjs'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ciwergrp/nuxid",
3
- "version": "1.5.14",
3
+ "version": "1.6.2",
4
4
  "description": "All-in-one essential modules for Nuxt",
5
5
  "repository": {
6
6
  "type": "git",
@@ -45,35 +45,38 @@
45
45
  "access": "public"
46
46
  },
47
47
  "dependencies": {
48
- "@element-plus/nuxt": "1.1.4",
49
- "@formatjs/intl": "4.1.1",
50
- "@inquirer/prompts": "8.2.0",
48
+ "@element-plus/nuxt": "1.1.5",
49
+ "@formatjs/intl": "4.1.2",
50
+ "@inquirer/prompts": "8.3.0",
51
51
  "@nuxt/icon": "2.2.1",
52
- "@nuxt/kit": "4.3.0",
53
- "@sentry/nuxt": "10.36.0",
52
+ "@nuxt/kit": "4.3.1",
53
+ "@sentry/nuxt": "10.40.0",
54
54
  "@sindresorhus/slugify": "3.0.0",
55
55
  "@sindresorhus/transliterate": "2.3.1",
56
- "@vueuse/nuxt": "14.1.0",
56
+ "@tailwindcss/vite": "^4.2.1",
57
+ "@vueuse/nuxt": "14.2.1",
57
58
  "date-fns": "4.1.0",
58
- "element-plus": "2.13.1",
59
+ "element-plus": "2.13.2",
59
60
  "hls.js": "1.6.15",
60
61
  "lodash-es": "4.17.23",
61
62
  "pinia": "3.0.4",
62
- "socket.io-client": "4.8.3"
63
+ "socket.io-client": "4.8.3",
64
+ "tailwindcss": "4.2.1",
65
+ "vite": "7.3.1"
63
66
  },
64
67
  "devDependencies": {
65
- "@nuxt/devtools": "^3.1.1",
66
- "@nuxt/eslint-config": "^1.12.1",
68
+ "@nuxt/devtools": "^3.2.2",
69
+ "@nuxt/eslint-config": "^1.15.2",
67
70
  "@nuxt/module-builder": "^1.0.2",
68
- "@nuxt/schema": "^4.2.1",
69
- "@nuxt/test-utils": "^3.23.0",
71
+ "@nuxt/schema": "^4.3.1",
72
+ "@nuxt/test-utils": "^4.0.0",
70
73
  "@types/lodash-es": "^4.17.12",
71
74
  "@types/node": "^22",
72
- "eslint": "^9.39.2",
73
- "nuxt": "^4.2.1",
75
+ "eslint": "^10.0.2",
76
+ "nuxt": "^4.3.1",
74
77
  "typescript": "^5.9.3",
75
- "vitest": "^4.0.17",
76
- "vue-tsc": "^3.2.2"
78
+ "vitest": "^4.0.18",
79
+ "vue-tsc": "^3.2.5"
77
80
  },
78
81
  "scripts": {
79
82
  "dev": "npm run dev:prepare && nuxi dev playground",