@movk/nuxt 1.1.0 → 1.1.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/README.md +3 -0
- package/dist/module.d.mts +0 -29
- package/dist/module.json +1 -1
- package/dist/module.mjs +46 -73
- package/dist/runtime/components/theme-picker/ThemePicker.vue +31 -0
- package/dist/runtime/composables/index.d.ts +8 -0
- package/dist/runtime/composables/index.js +8 -0
- package/dist/runtime/composables/useTheme.d.ts +6 -0
- package/dist/runtime/composables/useTheme.js +38 -1
- package/dist/runtime/plugins/theme.js +12 -1
- package/dist/runtime/types/index.d.ts +1 -0
- package/dist/runtime/types/index.js +1 -0
- package/dist/runtime/types/module.d.ts +39 -0
- package/dist/runtime/types/module.js +0 -0
- package/dist/runtime/utils/theme.d.ts +135 -0
- package/dist/runtime/utils/theme.js +134 -0
- package/dist/types.d.mts +6 -2
- package/package.json +35 -3
package/README.md
CHANGED
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
> `@movk/nuxt` 是一个为 Nuxt 4 设计的模块化工程套件,提供 Schema 驱动的自动表单生成、API 集成系统、独立 UI 组件和通用工具函数。
|
|
4
4
|
|
|
5
|
+
[](https://nuxt.mhaibaraai.cn/mcp/deeplink)
|
|
6
|
+
[](https://nuxt.mhaibaraai.cn/mcp/deeplink?ide=vscode)
|
|
7
|
+
|
|
5
8
|
[](https://www.typescriptlang.org/)
|
|
6
9
|
[](https://nuxt.com/)
|
|
7
10
|
[![npm version][npm-version-src]][npm-version-href]
|
package/dist/module.d.mts
CHANGED
|
@@ -1,34 +1,5 @@
|
|
|
1
|
-
import { z } from 'zod/v4';
|
|
2
|
-
import { ApiClient, MovkApiPublicConfig, MovkApiPrivateConfig } from '../dist/runtime/types/index.js';
|
|
3
1
|
export * from '../dist/runtime/types/index.js';
|
|
4
2
|
|
|
5
|
-
declare const moduleOptionsSchema: any;
|
|
6
|
-
type ModuleOptions = z.input<typeof moduleOptionsSchema>;
|
|
7
3
|
declare const _default: any;
|
|
8
4
|
|
|
9
|
-
declare module 'nuxt/app' {
|
|
10
|
-
interface NuxtApp {
|
|
11
|
-
$api: ApiClient;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
declare module 'nuxt/schema' {
|
|
15
|
-
interface NuxtOptions {
|
|
16
|
-
['movk']: ModuleOptions;
|
|
17
|
-
}
|
|
18
|
-
interface PublicRuntimeConfig {
|
|
19
|
-
movkApi: MovkApiPublicConfig;
|
|
20
|
-
}
|
|
21
|
-
interface RuntimeConfig {
|
|
22
|
-
movkApi: MovkApiPrivateConfig;
|
|
23
|
-
}
|
|
24
|
-
interface AppConfig {
|
|
25
|
-
theme: {
|
|
26
|
-
radius: number;
|
|
27
|
-
blackAsPrimary: boolean;
|
|
28
|
-
font: string;
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
5
|
export { _default as default };
|
|
34
|
-
export type { ModuleOptions };
|
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { addPlugin, defineNuxtModule, createResolver, addComponentsDir, addImportsDir, addServerHandler
|
|
2
|
-
import {
|
|
3
|
-
import { movkApiFullConfigSchema, apiToastConfigSchema, apiAuthConfigSchema, apiResponseConfigSchema } from '../dist/runtime/schemas/api.js';
|
|
1
|
+
import { addPlugin, defineNuxtModule, createResolver, addComponentsDir, addImportsDir, addServerHandler } from '@nuxt/kit';
|
|
2
|
+
import { apiToastConfigSchema, apiAuthConfigSchema, apiResponseConfigSchema } from '../dist/runtime/schemas/api.js';
|
|
4
3
|
import defu from 'defu';
|
|
5
4
|
export * from '../dist/runtime/types/index.js';
|
|
6
5
|
|
|
7
6
|
const name = "@movk/nuxt";
|
|
8
|
-
const version = "1.1.
|
|
7
|
+
const version = "1.1.2";
|
|
9
8
|
|
|
10
9
|
function setupTheme(nuxt, resolve) {
|
|
11
10
|
nuxt.options.appConfig.theme = defu(nuxt.options.appConfig.theme || {}, {
|
|
12
11
|
radius: 0.25,
|
|
13
12
|
blackAsPrimary: false,
|
|
14
|
-
font: "Public Sans"
|
|
13
|
+
font: "Public Sans",
|
|
14
|
+
icons: "lucide"
|
|
15
15
|
});
|
|
16
16
|
nuxt.options.app.head.meta = nuxt.options.app.head.meta || [];
|
|
17
17
|
nuxt.options.app.head.meta.push(
|
|
@@ -24,101 +24,74 @@ function setupTheme(nuxt, resolve) {
|
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
27
|
+
const DEFAULT_ENDPOINT = { default: { baseURL: "/api" } };
|
|
28
|
+
function splitEndpointConfigs(endpoints) {
|
|
29
|
+
const publicEndpoints = {};
|
|
30
|
+
const privateEndpoints = {};
|
|
31
|
+
if (!endpoints) return { publicEndpoints, privateEndpoints };
|
|
32
|
+
for (const [name2, { headers, ...publicConfig }] of Object.entries(endpoints)) {
|
|
33
|
+
publicEndpoints[name2] = publicConfig;
|
|
34
|
+
if (headers) {
|
|
35
|
+
privateEndpoints[name2] = { headers };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return { publicEndpoints, privateEndpoints };
|
|
39
|
+
}
|
|
40
|
+
function buildApiRuntimeConfig(apiConfig) {
|
|
41
|
+
const { publicEndpoints, privateEndpoints } = splitEndpointConfigs(apiConfig.endpoints);
|
|
42
|
+
const hasEndpoints = Object.keys(publicEndpoints).length > 0;
|
|
43
|
+
const publicConfig = {
|
|
44
|
+
defaultEndpoint: apiConfig.defaultEndpoint ?? "default",
|
|
45
|
+
debug: apiConfig.debug ?? false,
|
|
46
|
+
endpoints: hasEndpoints ? publicEndpoints : DEFAULT_ENDPOINT,
|
|
47
|
+
response: apiResponseConfigSchema.parse(apiConfig.response ?? {}),
|
|
48
|
+
auth: apiAuthConfigSchema.parse(apiConfig.auth ?? {}),
|
|
49
|
+
toast: apiToastConfigSchema.parse(apiConfig.toast ?? {})
|
|
50
|
+
};
|
|
51
|
+
const privateConfig = {
|
|
52
|
+
endpoints: Object.keys(privateEndpoints).length > 0 ? privateEndpoints : void 0
|
|
53
|
+
};
|
|
54
|
+
return { publicConfig, privateConfig };
|
|
55
|
+
}
|
|
38
56
|
const module$1 = defineNuxtModule({
|
|
39
57
|
meta: {
|
|
40
58
|
name,
|
|
41
59
|
version,
|
|
42
60
|
configKey: "movk",
|
|
43
|
-
compatibility: {
|
|
44
|
-
nuxt: ">=4.2.0"
|
|
45
|
-
}
|
|
61
|
+
compatibility: { nuxt: ">=4.2.0" }
|
|
46
62
|
},
|
|
47
|
-
defaults:
|
|
63
|
+
defaults: { prefix: "M" },
|
|
48
64
|
moduleDependencies: {
|
|
49
|
-
"@nuxt/image": {
|
|
50
|
-
|
|
51
|
-
},
|
|
52
|
-
"
|
|
53
|
-
|
|
54
|
-
},
|
|
55
|
-
"@vueuse/nuxt": {
|
|
56
|
-
version: ">=14.1.0"
|
|
57
|
-
},
|
|
58
|
-
"nuxt-og-image": {
|
|
59
|
-
version: ">=5.1.13"
|
|
60
|
-
},
|
|
61
|
-
"nuxt-auth-utils": {
|
|
62
|
-
version: ">=0.5.26"
|
|
63
|
-
}
|
|
65
|
+
"@nuxt/image": { version: ">=2.0.0" },
|
|
66
|
+
"@nuxt/ui": { version: ">=4.3.0" },
|
|
67
|
+
"@vueuse/nuxt": { version: ">=14.1.0" },
|
|
68
|
+
"nuxt-og-image": { version: ">=5.1.13" },
|
|
69
|
+
"nuxt-auth-utils": { version: ">=0.5.26" }
|
|
64
70
|
},
|
|
65
|
-
|
|
71
|
+
setup(options, nuxt) {
|
|
66
72
|
const { resolve } = createResolver(import.meta.url);
|
|
67
73
|
setupTheme(nuxt, resolve);
|
|
68
74
|
nuxt.options.alias["#movk"] = resolve("./runtime");
|
|
69
|
-
|
|
75
|
+
nuxt.options.css.push(resolve("runtime/style.css"));
|
|
70
76
|
addComponentsDir({
|
|
71
77
|
path: resolve("runtime/components"),
|
|
72
78
|
prefix: options.prefix,
|
|
73
79
|
pathPrefix: false,
|
|
74
80
|
ignore: ["auto-form-renderer/**", "theme-picker/ThemePickerButton.vue"]
|
|
75
81
|
});
|
|
76
|
-
nuxt.options.css.push(resolve("runtime/style.css"));
|
|
77
82
|
addImportsDir(resolve("runtime/composables"));
|
|
78
|
-
|
|
83
|
+
const apiConfig = options.api ?? {};
|
|
79
84
|
if (apiConfig.enabled !== false) {
|
|
80
|
-
const
|
|
81
|
-
const privateEndpoints = {};
|
|
82
|
-
if (apiConfig.endpoints) {
|
|
83
|
-
for (const [endpointName, endpoint] of Object.entries(apiConfig.endpoints)) {
|
|
84
|
-
const { headers, ...publicConfig2 } = endpoint;
|
|
85
|
-
publicEndpoints[endpointName] = publicConfig2;
|
|
86
|
-
if (headers) {
|
|
87
|
-
privateEndpoints[endpointName] = { headers };
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
const publicConfig = {
|
|
92
|
-
defaultEndpoint: apiConfig.defaultEndpoint ?? "default",
|
|
93
|
-
debug: apiConfig.debug ?? false,
|
|
94
|
-
endpoints: Object.keys(publicEndpoints).length > 0 ? publicEndpoints : { default: { baseURL: "/api" } },
|
|
95
|
-
response: apiResponseConfigSchema.parse(apiConfig.response ?? {}),
|
|
96
|
-
auth: apiAuthConfigSchema.parse(apiConfig.auth ?? {}),
|
|
97
|
-
toast: apiToastConfigSchema.parse(apiConfig.toast ?? {})
|
|
98
|
-
};
|
|
99
|
-
const privateConfig = {
|
|
100
|
-
endpoints: Object.keys(privateEndpoints).length > 0 ? privateEndpoints : void 0
|
|
101
|
-
};
|
|
85
|
+
const { publicConfig, privateConfig } = buildApiRuntimeConfig(apiConfig);
|
|
102
86
|
nuxt.options.runtimeConfig.movkApi = privateConfig;
|
|
103
87
|
nuxt.options.runtimeConfig.public.movkApi = publicConfig;
|
|
104
|
-
addPlugin({
|
|
105
|
-
src: resolve("runtime/plugins/api.factory"),
|
|
106
|
-
mode: "all"
|
|
107
|
-
});
|
|
88
|
+
addPlugin({ src: resolve("runtime/plugins/api.factory"), mode: "all" });
|
|
108
89
|
addServerHandler({
|
|
109
90
|
route: "/api/_movk/session",
|
|
110
91
|
method: "post",
|
|
111
92
|
handler: resolve("runtime/server/api/_movk/session.post")
|
|
112
93
|
});
|
|
113
94
|
}
|
|
114
|
-
addTypeTemplate({
|
|
115
|
-
filename: "runtime/types/auto-form-zod.d.ts",
|
|
116
|
-
src: resolve("runtime/types/zod.d.ts")
|
|
117
|
-
});
|
|
118
|
-
addTypeTemplate({
|
|
119
|
-
filename: "runtime/types/auth.d.ts",
|
|
120
|
-
src: resolve("runtime/types/auth.d.ts")
|
|
121
|
-
});
|
|
122
95
|
}
|
|
123
96
|
});
|
|
124
97
|
|
|
@@ -19,6 +19,8 @@ const {
|
|
|
19
19
|
radius,
|
|
20
20
|
fonts,
|
|
21
21
|
font,
|
|
22
|
+
icon,
|
|
23
|
+
icons,
|
|
22
24
|
modes,
|
|
23
25
|
mode,
|
|
24
26
|
hasCSSChanges,
|
|
@@ -165,6 +167,35 @@ const {
|
|
|
165
167
|
</div>
|
|
166
168
|
</fieldset>
|
|
167
169
|
|
|
170
|
+
<fieldset>
|
|
171
|
+
<legend class="text-[11px] leading-none font-semibold mb-2 select-none flex items-center gap-1">
|
|
172
|
+
Icons
|
|
173
|
+
|
|
174
|
+
<UButton
|
|
175
|
+
to="https://ui.nuxt.com/docs/getting-started/integrations/icons"
|
|
176
|
+
size="xs"
|
|
177
|
+
color="neutral"
|
|
178
|
+
variant="link"
|
|
179
|
+
target="_blank"
|
|
180
|
+
icon="i-lucide-circle-help"
|
|
181
|
+
class="p-0 -my-0.5"
|
|
182
|
+
:ui="{ leadingIcon: 'size-3' }"
|
|
183
|
+
/>
|
|
184
|
+
</legend>
|
|
185
|
+
|
|
186
|
+
<div class="-mx-2">
|
|
187
|
+
<USelect
|
|
188
|
+
v-model="icon"
|
|
189
|
+
size="sm"
|
|
190
|
+
color="neutral"
|
|
191
|
+
:icon="icons.find((i) => i.value === icon)?.icon"
|
|
192
|
+
:items="icons"
|
|
193
|
+
class="w-full ring-default rounded-sm hover:bg-elevated/50 capitalize text-[11px] data-[state=open]:bg-elevated/50"
|
|
194
|
+
:ui="{ item: 'capitalize text-[11px]', trailingIcon: 'group-data-[state=open]:rotate-180 transition-transform duration-200' }"
|
|
195
|
+
/>
|
|
196
|
+
</div>
|
|
197
|
+
</fieldset>
|
|
198
|
+
|
|
168
199
|
<fieldset>
|
|
169
200
|
<legend class="text-[11px] leading-none font-semibold mb-2 select-none flex items-center gap-1">
|
|
170
201
|
Color Mode
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './useApiFetch.js';
|
|
2
|
+
export * from './useClientApiFetch.js';
|
|
3
|
+
export * from './useApiAuth.js';
|
|
4
|
+
export * from './useDownloadWithProgress.js';
|
|
5
|
+
export * from './useUploadWithProgress.js';
|
|
6
|
+
export * from './useAutoForm.js';
|
|
7
|
+
export * from './useTheme.js';
|
|
8
|
+
export * from './useDateFormatter.js';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from "./useApiFetch.js";
|
|
2
|
+
export * from "./useClientApiFetch.js";
|
|
3
|
+
export * from "./useApiAuth.js";
|
|
4
|
+
export * from "./useDownloadWithProgress.js";
|
|
5
|
+
export * from "./useUploadWithProgress.js";
|
|
6
|
+
export * from "./useAutoForm.js";
|
|
7
|
+
export * from "./useTheme.js";
|
|
8
|
+
export * from "./useDateFormatter.js";
|
|
@@ -8,6 +8,12 @@ export declare function useTheme(): {
|
|
|
8
8
|
radius: import("vue").WritableComputedRef<any, any>;
|
|
9
9
|
fonts: string[];
|
|
10
10
|
font: import("vue").WritableComputedRef<any, any>;
|
|
11
|
+
icon: import("vue").WritableComputedRef<any, any>;
|
|
12
|
+
icons: {
|
|
13
|
+
label: string;
|
|
14
|
+
icon: string;
|
|
15
|
+
value: string;
|
|
16
|
+
}[];
|
|
11
17
|
modes: {
|
|
12
18
|
label: string;
|
|
13
19
|
icon: any;
|
|
@@ -2,6 +2,7 @@ import { useAppConfig, useColorMode, useSiteConfig } from "#imports";
|
|
|
2
2
|
import { omit } from "@movk/core";
|
|
3
3
|
import colors from "tailwindcss/colors";
|
|
4
4
|
import { computed } from "vue";
|
|
5
|
+
import { themeIcons } from "../utils/theme.js";
|
|
5
6
|
export function useTheme() {
|
|
6
7
|
const appConfig = useAppConfig();
|
|
7
8
|
const colorMode = useColorMode();
|
|
@@ -50,6 +51,31 @@ export function useTheme() {
|
|
|
50
51
|
}
|
|
51
52
|
}
|
|
52
53
|
});
|
|
54
|
+
const icons = [{
|
|
55
|
+
label: "Lucide",
|
|
56
|
+
icon: "i-lucide-feather",
|
|
57
|
+
value: "lucide"
|
|
58
|
+
}, {
|
|
59
|
+
label: "Phosphor",
|
|
60
|
+
icon: "i-ph-phosphor-logo",
|
|
61
|
+
value: "phosphor"
|
|
62
|
+
}, {
|
|
63
|
+
label: "Tabler",
|
|
64
|
+
icon: "i-tabler-brand-tabler",
|
|
65
|
+
value: "tabler"
|
|
66
|
+
}];
|
|
67
|
+
const icon = computed({
|
|
68
|
+
get() {
|
|
69
|
+
return appConfig.theme.icons;
|
|
70
|
+
},
|
|
71
|
+
set(option) {
|
|
72
|
+
appConfig.theme.icons = option;
|
|
73
|
+
appConfig.ui.icons = themeIcons[option];
|
|
74
|
+
if (appConfig.theme.icons) {
|
|
75
|
+
window.localStorage.setItem(`${site.name}-ui-icons`, appConfig.theme.icons);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
});
|
|
53
79
|
const modes = [
|
|
54
80
|
{ label: "light", icon: appConfig.ui.icons.light },
|
|
55
81
|
{ label: "dark", icon: appConfig.ui.icons.dark },
|
|
@@ -68,7 +94,7 @@ export function useTheme() {
|
|
|
68
94
|
window.localStorage.setItem(`${site.name}-ui-black-as-primary`, String(value));
|
|
69
95
|
}
|
|
70
96
|
const hasCSSChanges = computed(() => {
|
|
71
|
-
return appConfig.theme.radius !== 0.25 || appConfig.theme.blackAsPrimary || appConfig.theme.font !== "Public Sans";
|
|
97
|
+
return appConfig.theme.radius !== 0.25 || appConfig.theme.blackAsPrimary || appConfig.theme.font !== "Public Sans" || appConfig.theme.icons !== "lucide";
|
|
72
98
|
});
|
|
73
99
|
const hasAppConfigChanges = computed(() => {
|
|
74
100
|
return appConfig.ui.colors.primary !== "green" || appConfig.ui.colors.neutral !== "slate";
|
|
@@ -107,6 +133,12 @@ export function useTheme() {
|
|
|
107
133
|
config.ui.colors.neutral = appConfig.ui.colors.neutral;
|
|
108
134
|
}
|
|
109
135
|
}
|
|
136
|
+
if (appConfig.theme.icons !== "lucide") {
|
|
137
|
+
const iconSet = appConfig.theme.icons;
|
|
138
|
+
const icons2 = themeIcons[iconSet];
|
|
139
|
+
config.ui = config.ui || {};
|
|
140
|
+
config.ui.icons = icons2;
|
|
141
|
+
}
|
|
110
142
|
const configString = JSON.stringify(config, null, 2).replace(/"([^"]+)":/g, "$1:").replace(/"/g, "'");
|
|
111
143
|
return `export default defineAppConfig(${configString})`;
|
|
112
144
|
}
|
|
@@ -119,6 +151,9 @@ export function useTheme() {
|
|
|
119
151
|
window.localStorage.removeItem(`${site.name}-ui-radius`);
|
|
120
152
|
appConfig.theme.font = "Public Sans";
|
|
121
153
|
window.localStorage.removeItem(`${site.name}-ui-font`);
|
|
154
|
+
appConfig.theme.icons = "lucide";
|
|
155
|
+
appConfig.ui.icons = themeIcons.lucide;
|
|
156
|
+
window.localStorage.removeItem(`${site.name}-ui-icons`);
|
|
122
157
|
appConfig.theme.blackAsPrimary = false;
|
|
123
158
|
window.localStorage.removeItem(`${site.name}-ui-black-as-primary`);
|
|
124
159
|
}
|
|
@@ -132,6 +167,8 @@ export function useTheme() {
|
|
|
132
167
|
radius,
|
|
133
168
|
fonts,
|
|
134
169
|
font,
|
|
170
|
+
icon,
|
|
171
|
+
icons,
|
|
135
172
|
modes,
|
|
136
173
|
mode,
|
|
137
174
|
hasCSSChanges,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { defineNuxtPlugin, useAppConfig, useHead, useSiteConfig } from "#imports";
|
|
1
|
+
import { defineNuxtPlugin, onNuxtReady, useAppConfig, useHead, useSiteConfig } from "#imports";
|
|
2
|
+
import { themeIcons } from "../utils/theme.js";
|
|
2
3
|
export default defineNuxtPlugin({
|
|
3
4
|
enforce: "post",
|
|
4
5
|
setup() {
|
|
@@ -32,6 +33,16 @@ export default defineNuxtPlugin({
|
|
|
32
33
|
updateBlackAsPrimary();
|
|
33
34
|
updateFont();
|
|
34
35
|
}
|
|
36
|
+
onNuxtReady(() => {
|
|
37
|
+
function updateIcons() {
|
|
38
|
+
const icons = localStorage.getItem(`${site.name}-ui-icons`);
|
|
39
|
+
if (icons) {
|
|
40
|
+
appConfig.theme.icons = icons;
|
|
41
|
+
appConfig.ui.icons = themeIcons[icons];
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
updateIcons();
|
|
45
|
+
});
|
|
35
46
|
if (import.meta.server) {
|
|
36
47
|
useHead({
|
|
37
48
|
script: [{
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ApiClient, MovkApiPublicConfig, MovkApiPrivateConfig, MovkApiFullConfig } from './api.js';
|
|
2
|
+
export interface ModuleOptions {
|
|
3
|
+
/**
|
|
4
|
+
* 组件前缀
|
|
5
|
+
* @default 'M'
|
|
6
|
+
*/
|
|
7
|
+
prefix?: string;
|
|
8
|
+
/**
|
|
9
|
+
* API 模块配置
|
|
10
|
+
*/
|
|
11
|
+
api?: MovkApiFullConfig;
|
|
12
|
+
}
|
|
13
|
+
declare module '#app' {
|
|
14
|
+
interface NuxtApp {
|
|
15
|
+
$api: ApiClient;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
declare module 'nuxt/schema' {
|
|
19
|
+
interface NuxtConfig {
|
|
20
|
+
movk?: ModuleOptions;
|
|
21
|
+
}
|
|
22
|
+
interface NuxtOptions {
|
|
23
|
+
movk: ModuleOptions;
|
|
24
|
+
}
|
|
25
|
+
interface PublicRuntimeConfig {
|
|
26
|
+
movkApi: MovkApiPublicConfig;
|
|
27
|
+
}
|
|
28
|
+
interface RuntimeConfig {
|
|
29
|
+
movkApi: MovkApiPrivateConfig;
|
|
30
|
+
}
|
|
31
|
+
interface AppConfig {
|
|
32
|
+
theme: {
|
|
33
|
+
radius: number;
|
|
34
|
+
blackAsPrimary: boolean;
|
|
35
|
+
font: string;
|
|
36
|
+
icons: string;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
export declare const themeIcons: {
|
|
2
|
+
lucide: {
|
|
3
|
+
arrowDown: string;
|
|
4
|
+
arrowLeft: string;
|
|
5
|
+
arrowRight: string;
|
|
6
|
+
arrowUp: string;
|
|
7
|
+
caution: string;
|
|
8
|
+
check: string;
|
|
9
|
+
chevronDoubleLeft: string;
|
|
10
|
+
chevronDoubleRight: string;
|
|
11
|
+
chevronDown: string;
|
|
12
|
+
chevronLeft: string;
|
|
13
|
+
chevronRight: string;
|
|
14
|
+
chevronUp: string;
|
|
15
|
+
close: string;
|
|
16
|
+
copy: string;
|
|
17
|
+
copyCheck: string;
|
|
18
|
+
dark: string;
|
|
19
|
+
drag: string;
|
|
20
|
+
ellipsis: string;
|
|
21
|
+
error: string;
|
|
22
|
+
external: string;
|
|
23
|
+
eye: string;
|
|
24
|
+
eyeOff: string;
|
|
25
|
+
file: string;
|
|
26
|
+
folder: string;
|
|
27
|
+
folderOpen: string;
|
|
28
|
+
hash: string;
|
|
29
|
+
info: string;
|
|
30
|
+
light: string;
|
|
31
|
+
loading: string;
|
|
32
|
+
menu: string;
|
|
33
|
+
minus: string;
|
|
34
|
+
panelClose: string;
|
|
35
|
+
panelOpen: string;
|
|
36
|
+
plus: string;
|
|
37
|
+
reload: string;
|
|
38
|
+
search: string;
|
|
39
|
+
stop: string;
|
|
40
|
+
success: string;
|
|
41
|
+
system: string;
|
|
42
|
+
tip: string;
|
|
43
|
+
upload: string;
|
|
44
|
+
warning: string;
|
|
45
|
+
};
|
|
46
|
+
phosphor: {
|
|
47
|
+
arrowDown: string;
|
|
48
|
+
arrowLeft: string;
|
|
49
|
+
arrowRight: string;
|
|
50
|
+
arrowUp: string;
|
|
51
|
+
caution: string;
|
|
52
|
+
check: string;
|
|
53
|
+
chevronDoubleLeft: string;
|
|
54
|
+
chevronDoubleRight: string;
|
|
55
|
+
chevronDown: string;
|
|
56
|
+
chevronLeft: string;
|
|
57
|
+
chevronRight: string;
|
|
58
|
+
chevronUp: string;
|
|
59
|
+
close: string;
|
|
60
|
+
copy: string;
|
|
61
|
+
copyCheck: string;
|
|
62
|
+
dark: string;
|
|
63
|
+
drag: string;
|
|
64
|
+
ellipsis: string;
|
|
65
|
+
error: string;
|
|
66
|
+
external: string;
|
|
67
|
+
eye: string;
|
|
68
|
+
eyeOff: string;
|
|
69
|
+
file: string;
|
|
70
|
+
folder: string;
|
|
71
|
+
folderOpen: string;
|
|
72
|
+
hash: string;
|
|
73
|
+
info: string;
|
|
74
|
+
light: string;
|
|
75
|
+
loading: string;
|
|
76
|
+
menu: string;
|
|
77
|
+
minus: string;
|
|
78
|
+
panelClose: string;
|
|
79
|
+
panelOpen: string;
|
|
80
|
+
plus: string;
|
|
81
|
+
reload: string;
|
|
82
|
+
search: string;
|
|
83
|
+
stop: string;
|
|
84
|
+
success: string;
|
|
85
|
+
system: string;
|
|
86
|
+
tip: string;
|
|
87
|
+
upload: string;
|
|
88
|
+
warning: string;
|
|
89
|
+
};
|
|
90
|
+
tabler: {
|
|
91
|
+
arrowDown: string;
|
|
92
|
+
arrowLeft: string;
|
|
93
|
+
arrowRight: string;
|
|
94
|
+
arrowUp: string;
|
|
95
|
+
caution: string;
|
|
96
|
+
check: string;
|
|
97
|
+
chevronDoubleLeft: string;
|
|
98
|
+
chevronDoubleRight: string;
|
|
99
|
+
chevronDown: string;
|
|
100
|
+
chevronLeft: string;
|
|
101
|
+
chevronRight: string;
|
|
102
|
+
chevronUp: string;
|
|
103
|
+
close: string;
|
|
104
|
+
copy: string;
|
|
105
|
+
copyCheck: string;
|
|
106
|
+
dark: string;
|
|
107
|
+
drag: string;
|
|
108
|
+
ellipsis: string;
|
|
109
|
+
error: string;
|
|
110
|
+
external: string;
|
|
111
|
+
eye: string;
|
|
112
|
+
eyeOff: string;
|
|
113
|
+
file: string;
|
|
114
|
+
folder: string;
|
|
115
|
+
folderOpen: string;
|
|
116
|
+
hash: string;
|
|
117
|
+
info: string;
|
|
118
|
+
light: string;
|
|
119
|
+
loading: string;
|
|
120
|
+
menu: string;
|
|
121
|
+
minus: string;
|
|
122
|
+
panelClose: string;
|
|
123
|
+
panelOpen: string;
|
|
124
|
+
plus: string;
|
|
125
|
+
reload: string;
|
|
126
|
+
search: string;
|
|
127
|
+
stop: string;
|
|
128
|
+
success: string;
|
|
129
|
+
system: string;
|
|
130
|
+
tip: string;
|
|
131
|
+
upload: string;
|
|
132
|
+
warning: string;
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
export type ThemeIcons = keyof typeof themeIcons;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
export const themeIcons = {
|
|
2
|
+
lucide: {
|
|
3
|
+
arrowDown: "i-lucide-arrow-down",
|
|
4
|
+
arrowLeft: "i-lucide-arrow-left",
|
|
5
|
+
arrowRight: "i-lucide-arrow-right",
|
|
6
|
+
arrowUp: "i-lucide-arrow-up",
|
|
7
|
+
caution: "i-lucide-circle-alert",
|
|
8
|
+
check: "i-lucide-check",
|
|
9
|
+
chevronDoubleLeft: "i-lucide-chevrons-left",
|
|
10
|
+
chevronDoubleRight: "i-lucide-chevrons-right",
|
|
11
|
+
chevronDown: "i-lucide-chevron-down",
|
|
12
|
+
chevronLeft: "i-lucide-chevron-left",
|
|
13
|
+
chevronRight: "i-lucide-chevron-right",
|
|
14
|
+
chevronUp: "i-lucide-chevron-up",
|
|
15
|
+
close: "i-lucide-x",
|
|
16
|
+
copy: "i-lucide-copy",
|
|
17
|
+
copyCheck: "i-lucide-copy-check",
|
|
18
|
+
dark: "i-lucide-moon",
|
|
19
|
+
drag: "i-lucide-grip-vertical",
|
|
20
|
+
ellipsis: "i-lucide-ellipsis",
|
|
21
|
+
error: "i-lucide-circle-x",
|
|
22
|
+
external: "i-lucide-arrow-up-right",
|
|
23
|
+
eye: "i-lucide-eye",
|
|
24
|
+
eyeOff: "i-lucide-eye-off",
|
|
25
|
+
file: "i-lucide-file",
|
|
26
|
+
folder: "i-lucide-folder",
|
|
27
|
+
folderOpen: "i-lucide-folder-open",
|
|
28
|
+
hash: "i-lucide-hash",
|
|
29
|
+
info: "i-lucide-info",
|
|
30
|
+
light: "i-lucide-sun",
|
|
31
|
+
loading: "i-lucide-loader-circle",
|
|
32
|
+
menu: "i-lucide-menu",
|
|
33
|
+
minus: "i-lucide-minus",
|
|
34
|
+
panelClose: "i-lucide-panel-left-close",
|
|
35
|
+
panelOpen: "i-lucide-panel-left-open",
|
|
36
|
+
plus: "i-lucide-plus",
|
|
37
|
+
reload: "i-lucide-rotate-ccw",
|
|
38
|
+
search: "i-lucide-search",
|
|
39
|
+
stop: "i-lucide-square",
|
|
40
|
+
success: "i-lucide-circle-check",
|
|
41
|
+
system: "i-lucide-monitor",
|
|
42
|
+
tip: "i-lucide-lightbulb",
|
|
43
|
+
upload: "i-lucide-upload",
|
|
44
|
+
warning: "i-lucide-triangle-alert"
|
|
45
|
+
},
|
|
46
|
+
phosphor: {
|
|
47
|
+
arrowDown: "i-ph-arrow-down",
|
|
48
|
+
arrowLeft: "i-ph-arrow-left",
|
|
49
|
+
arrowRight: "i-ph-arrow-right",
|
|
50
|
+
arrowUp: "i-ph-arrow-up",
|
|
51
|
+
caution: "i-ph-warning-circle",
|
|
52
|
+
check: "i-ph-check",
|
|
53
|
+
chevronDoubleLeft: "i-ph-caret-double-left",
|
|
54
|
+
chevronDoubleRight: "i-ph-caret-double-right",
|
|
55
|
+
chevronDown: "i-ph-caret-down",
|
|
56
|
+
chevronLeft: "i-ph-caret-left",
|
|
57
|
+
chevronRight: "i-ph-caret-right",
|
|
58
|
+
chevronUp: "i-ph-caret-up",
|
|
59
|
+
close: "i-ph-x",
|
|
60
|
+
copy: "i-ph-copy",
|
|
61
|
+
copyCheck: "i-ph-check-circle",
|
|
62
|
+
dark: "i-ph-moon",
|
|
63
|
+
drag: "i-ph-dots-six-vertical",
|
|
64
|
+
ellipsis: "i-ph-dots-three",
|
|
65
|
+
error: "i-ph-x-circle",
|
|
66
|
+
external: "i-ph-arrow-up-right",
|
|
67
|
+
eye: "i-ph-eye",
|
|
68
|
+
eyeOff: "i-ph-eye-slash",
|
|
69
|
+
file: "i-ph-file",
|
|
70
|
+
folder: "i-ph-folder",
|
|
71
|
+
folderOpen: "i-ph-folder-open",
|
|
72
|
+
hash: "i-ph-hash",
|
|
73
|
+
info: "i-ph-info",
|
|
74
|
+
light: "i-ph-sun",
|
|
75
|
+
loading: "i-ph-circle-notch",
|
|
76
|
+
menu: "i-ph-list",
|
|
77
|
+
minus: "i-ph-minus",
|
|
78
|
+
panelClose: "i-ph-caret-left",
|
|
79
|
+
panelOpen: "i-ph-caret-right",
|
|
80
|
+
plus: "i-ph-plus",
|
|
81
|
+
reload: "i-ph-arrow-counter-clockwise",
|
|
82
|
+
search: "i-ph-magnifying-glass",
|
|
83
|
+
stop: "i-ph-square",
|
|
84
|
+
success: "i-ph-check-circle",
|
|
85
|
+
system: "i-ph-monitor",
|
|
86
|
+
tip: "i-ph-lightbulb",
|
|
87
|
+
upload: "i-ph-upload",
|
|
88
|
+
warning: "i-ph-warning"
|
|
89
|
+
},
|
|
90
|
+
tabler: {
|
|
91
|
+
arrowDown: "i-tabler-arrow-down",
|
|
92
|
+
arrowLeft: "i-tabler-arrow-left",
|
|
93
|
+
arrowRight: "i-tabler-arrow-right",
|
|
94
|
+
arrowUp: "i-tabler-arrow-up",
|
|
95
|
+
caution: "i-tabler-alert-square-rounded",
|
|
96
|
+
check: "i-tabler-check",
|
|
97
|
+
chevronDoubleLeft: "i-tabler-chevrons-left",
|
|
98
|
+
chevronDoubleRight: "i-tabler-chevrons-right",
|
|
99
|
+
chevronDown: "i-tabler-chevron-down",
|
|
100
|
+
chevronLeft: "i-tabler-chevron-left",
|
|
101
|
+
chevronRight: "i-tabler-chevron-right",
|
|
102
|
+
chevronUp: "i-tabler-chevron-up",
|
|
103
|
+
close: "i-tabler-x",
|
|
104
|
+
copy: "i-tabler-copy",
|
|
105
|
+
copyCheck: "i-tabler-copy-check",
|
|
106
|
+
dark: "i-tabler-moon",
|
|
107
|
+
drag: "i-tabler-grip-vertical",
|
|
108
|
+
ellipsis: "i-tabler-dots",
|
|
109
|
+
error: "i-tabler-square-rounded-x",
|
|
110
|
+
external: "i-tabler-external-link",
|
|
111
|
+
eye: "i-tabler-eye",
|
|
112
|
+
eyeOff: "i-tabler-eye-off",
|
|
113
|
+
file: "i-tabler-file",
|
|
114
|
+
folder: "i-tabler-folder",
|
|
115
|
+
folderOpen: "i-tabler-folder-open",
|
|
116
|
+
hash: "i-tabler-hash",
|
|
117
|
+
info: "i-tabler-info-square-rounded",
|
|
118
|
+
light: "i-tabler-sun",
|
|
119
|
+
loading: "i-tabler-loader-2",
|
|
120
|
+
menu: "i-tabler-menu",
|
|
121
|
+
minus: "i-tabler-minus",
|
|
122
|
+
panelClose: "i-tabler-layout-sidebar-left-collapse",
|
|
123
|
+
panelOpen: "i-tabler-layout-sidebar-left-expand",
|
|
124
|
+
plus: "i-tabler-plus",
|
|
125
|
+
reload: "i-tabler-reload",
|
|
126
|
+
search: "i-tabler-search",
|
|
127
|
+
stop: "i-tabler-player-stop",
|
|
128
|
+
success: "i-tabler-square-rounded-check",
|
|
129
|
+
system: "i-tabler-device-desktop",
|
|
130
|
+
tip: "i-tabler-bulb",
|
|
131
|
+
upload: "i-tabler-upload",
|
|
132
|
+
warning: "i-tabler-alert-triangle"
|
|
133
|
+
}
|
|
134
|
+
};
|
package/dist/types.d.mts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
import type { NuxtModule } from '@nuxt/schema'
|
|
2
|
+
|
|
3
|
+
import type { default as Module } from './module.mjs'
|
|
2
4
|
|
|
3
|
-
export
|
|
5
|
+
export type ModuleOptions = typeof Module extends NuxtModule<infer O> ? Partial<O> : Record<string, any>
|
|
6
|
+
|
|
7
|
+
export { default } from './module.mjs'
|
|
4
8
|
|
|
5
9
|
export * from '../dist/runtime/types/index.js'
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@movk/nuxt",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.2",
|
|
5
5
|
"packageManager": "pnpm@10.28.0",
|
|
6
6
|
"description": "Modular engineering suite for Nuxt 4 with schema-driven forms, API integration, UI components and composables",
|
|
7
7
|
"author": "YiXuan <mhaibaraai@gmail.com>",
|
|
@@ -36,12 +36,42 @@
|
|
|
36
36
|
],
|
|
37
37
|
"exports": {
|
|
38
38
|
".": {
|
|
39
|
-
"types": "./dist/
|
|
39
|
+
"types": "./dist/module.d.mts",
|
|
40
|
+
"style": "./dist/runtime/style.css",
|
|
40
41
|
"import": "./dist/module.mjs"
|
|
42
|
+
},
|
|
43
|
+
"./runtime/*": "./dist/runtime/*",
|
|
44
|
+
"./components/*": "./dist/runtime/components/*",
|
|
45
|
+
"./composables": {
|
|
46
|
+
"types": "./dist/runtime/composables/index.d.ts",
|
|
47
|
+
"import": "./dist/runtime/composables/index.js"
|
|
48
|
+
},
|
|
49
|
+
"./composables/*": {
|
|
50
|
+
"types": "./dist/runtime/composables/*.d.ts",
|
|
51
|
+
"import": "./dist/runtime/composables/*.js"
|
|
41
52
|
}
|
|
42
53
|
},
|
|
54
|
+
"typesVersions": {
|
|
55
|
+
"*": {
|
|
56
|
+
".": [
|
|
57
|
+
"./dist/module.d.mts"
|
|
58
|
+
],
|
|
59
|
+
"runtime/*": [
|
|
60
|
+
"./dist/runtime/*"
|
|
61
|
+
],
|
|
62
|
+
"components/*": [
|
|
63
|
+
"./dist/runtime/components/*"
|
|
64
|
+
],
|
|
65
|
+
"composables": [
|
|
66
|
+
"./dist/runtime/composables/index.d.ts"
|
|
67
|
+
],
|
|
68
|
+
"composables/*": [
|
|
69
|
+
"./dist/runtime/composables/*.d.ts"
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"style": "./dist/runtime/index.css",
|
|
43
74
|
"main": "./dist/module.mjs",
|
|
44
|
-
"types": "./dist/types.d.mts",
|
|
45
75
|
"files": [
|
|
46
76
|
"dist"
|
|
47
77
|
],
|
|
@@ -66,6 +96,8 @@
|
|
|
66
96
|
},
|
|
67
97
|
"dependencies": {
|
|
68
98
|
"@iconify-json/lucide": "^1.2.86",
|
|
99
|
+
"@iconify-json/ph": "^1.2.2",
|
|
100
|
+
"@iconify-json/tabler": "^1.2.26",
|
|
69
101
|
"@internationalized/date": "^3.10.1",
|
|
70
102
|
"@movk/core": "^1.1.0",
|
|
71
103
|
"@nuxt/image": "^2.0.0",
|