@unhead/bundler 3.0.5 → 3.1.1
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 +0 -15
- package/dist/devtools-ui/200.html +1 -1
- package/dist/devtools-ui/404.html +1 -1
- package/dist/devtools-ui/_nuxt/2R9QS7Fj.js +1 -0
- package/dist/devtools-ui/_nuxt/Bb_3BFDc.js +1 -0
- package/dist/devtools-ui/_nuxt/C81xmMuP.js +1 -0
- package/dist/devtools-ui/_nuxt/CCYIWYmq.js +1 -0
- package/dist/devtools-ui/_nuxt/CLWRWTUc.js +1 -0
- package/dist/devtools-ui/_nuxt/ChL3K-7X.js +1 -0
- package/dist/devtools-ui/_nuxt/Ct3QmJw6.js +1 -0
- package/dist/devtools-ui/_nuxt/D-Etbhpg.js +1 -0
- package/dist/devtools-ui/_nuxt/DAKdquko.js +1 -0
- package/dist/devtools-ui/_nuxt/DBeHrZGS.js +1 -0
- package/dist/devtools-ui/_nuxt/DPCTmUYV.js +1 -0
- package/dist/devtools-ui/_nuxt/DZ2eF3EI.js +1 -0
- package/dist/devtools-ui/_nuxt/DevtoolsKeyValue.M9_a09GB.css +1 -0
- package/dist/devtools-ui/_nuxt/DevtoolsTagTable.B0gJ7h62.css +1 -0
- package/dist/devtools-ui/_nuxt/{DevtoolsTip.By8OtGoF.css → DevtoolsTip.Di2k2xeK.css} +1 -1
- package/dist/devtools-ui/_nuxt/DgVGCDvY.js +1 -0
- package/dist/devtools-ui/_nuxt/DsxXb4gA.js +191 -0
- package/dist/devtools-ui/_nuxt/GDfpgsTy.js +1 -0
- package/dist/devtools-ui/_nuxt/OCodeBlock.PlkyOOuq.css +1 -0
- package/dist/devtools-ui/_nuxt/Ou52Vqik.js +1 -0
- package/dist/devtools-ui/_nuxt/builds/latest.json +1 -1
- package/dist/devtools-ui/_nuxt/builds/meta/131284c6-b351-4ba5-8ac9-6320fa409f91.json +1 -0
- package/dist/devtools-ui/_nuxt/entry.BIq0UsGv.css +1 -0
- package/dist/devtools-ui/_nuxt/error-404.DhI8zfQF.css +1 -0
- package/dist/devtools-ui/_nuxt/error-500.BLpai_3s.css +1 -0
- package/dist/devtools-ui/_nuxt/identity.C-pUYhOl.css +1 -0
- package/dist/devtools-ui/_nuxt/schema-validation.5FNvfDML.css +1 -0
- package/dist/devtools-ui/_nuxt/schema.DAhpSINo.css +1 -0
- package/dist/devtools-ui/_nuxt/{scripts.UkRMfT5v.css → scripts.BbrQ9ioA.css} +1 -1
- package/dist/devtools-ui/_nuxt/serp.C68Pg8m3.css +1 -0
- package/dist/devtools-ui/_nuxt/uY6k474J.js +1 -0
- package/dist/devtools-ui/_nuxt/xSwJ5b7x.js +1 -0
- package/dist/devtools-ui/index.html +1 -1
- package/dist/framework.d.mts +72 -0
- package/dist/framework.d.ts +72 -0
- package/dist/framework.mjs +102 -0
- package/dist/minify/esbuild.d.mts +1 -1
- package/dist/minify/esbuild.d.ts +1 -1
- package/dist/minify/lightningcss.d.mts +1 -1
- package/dist/minify/lightningcss.d.ts +1 -1
- package/dist/minify/rolldown.d.mts +1 -1
- package/dist/minify/rolldown.d.ts +1 -1
- package/dist/shared/{bundler.CXyDmCqn.mjs → bundler.D9eYJXZg.mjs} +312 -3
- package/dist/shared/{bundler.BwKIGaKX.d.mts → bundler.LjD9SWtb.d.mts} +17 -2
- package/dist/shared/{bundler.BwKIGaKX.d.ts → bundler.LjD9SWtb.d.ts} +17 -2
- package/dist/vite.d.mts +10 -2
- package/dist/vite.d.ts +10 -2
- package/dist/vite.mjs +9 -244
- package/package.json +26 -14
- package/dist/devtools-ui/_nuxt/B4E3K9Fu.js +0 -1
- package/dist/devtools-ui/_nuxt/BMUkMEmv.js +0 -1
- package/dist/devtools-ui/_nuxt/BWpSa8Y9.js +0 -1
- package/dist/devtools-ui/_nuxt/BhGkw7Dk.js +0 -1
- package/dist/devtools-ui/_nuxt/Bhqqi5fM.js +0 -1
- package/dist/devtools-ui/_nuxt/CbZZKQdd.js +0 -1
- package/dist/devtools-ui/_nuxt/Cmcm1MM8.js +0 -1
- package/dist/devtools-ui/_nuxt/CtFJRg95.js +0 -1
- package/dist/devtools-ui/_nuxt/D3kFDrsW.js +0 -1
- package/dist/devtools-ui/_nuxt/DBI97vI-.js +0 -1
- package/dist/devtools-ui/_nuxt/DF0wUzLT.js +0 -1
- package/dist/devtools-ui/_nuxt/DNL7PE-I.js +0 -1
- package/dist/devtools-ui/_nuxt/DVtdvxJ7.js +0 -184
- package/dist/devtools-ui/_nuxt/DevtoolsKeyValue.CGQNexGc.css +0 -1
- package/dist/devtools-ui/_nuxt/DevtoolsTagTable.Bi_gUiSE.css +0 -1
- package/dist/devtools-ui/_nuxt/OCodeBlock.cuqShMa1.css +0 -1
- package/dist/devtools-ui/_nuxt/builds/meta/35b427b0-d95c-4e8c-ba8f-41688b3cc0a3.json +0 -1
- package/dist/devtools-ui/_nuxt/ddqlfTNL.js +0 -1
- package/dist/devtools-ui/_nuxt/entry.clcQIxBm.css +0 -1
- package/dist/devtools-ui/_nuxt/error-404.CfdWat2O.css +0 -1
- package/dist/devtools-ui/_nuxt/error-500.By77bS06.css +0 -1
- package/dist/devtools-ui/_nuxt/identity.qqB_zwgO.css +0 -1
- package/dist/devtools-ui/_nuxt/oWUcG044.js +0 -1
- package/dist/devtools-ui/_nuxt/p7SZRf-U.js +0 -1
- package/dist/devtools-ui/_nuxt/schema-validation.CRmraV8c.css +0 -1
- package/dist/devtools-ui/_nuxt/schema.CFjU2dVl.css +0 -1
- package/dist/devtools-ui/_nuxt/serp.CZGidvZH.css +0 -1
- package/dist/devtools-ui/_nuxt/zAl29A3_.js +0 -1
- package/dist/webpack.d.mts +0 -5
- package/dist/webpack.d.ts +0 -5
- package/dist/webpack.mjs +0 -31
|
@@ -51,10 +51,25 @@ interface VitePluginOptions extends UnpluginOptions {
|
|
|
51
51
|
devtools?: UnheadDevtoolsOptions | false;
|
|
52
52
|
/** Inject ValidatePlugin in dev to surface head tag warnings in the console. Enabled by default, set `false` to disable. */
|
|
53
53
|
validate?: boolean;
|
|
54
|
-
/**
|
|
54
|
+
/**
|
|
55
|
+
* @internal
|
|
56
|
+
* @deprecated Pass via the `internal` second argument of `Unhead()` instead.
|
|
57
|
+
* Retained as a passthrough so existing framework wrappers keep working.
|
|
58
|
+
*/
|
|
55
59
|
_framework?: string;
|
|
56
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Internal extension carrying the framework package name (e.g. `@unhead/vue`)
|
|
63
|
+
* so the base bundler factory can import runtime plugins from the right path.
|
|
64
|
+
* Never exposed on public option types; framework wrappers pass this via
|
|
65
|
+
* the factory helpers in `./framework`.
|
|
66
|
+
*
|
|
67
|
+
* @internal
|
|
68
|
+
*/
|
|
69
|
+
interface InternalFrameworkContext {
|
|
70
|
+
framework?: string;
|
|
71
|
+
}
|
|
57
72
|
interface UnheadDevtoolsOptions {
|
|
58
73
|
}
|
|
59
74
|
|
|
60
|
-
export type {
|
|
75
|
+
export type { InternalFrameworkContext as I, MinifyFn as M, VitePluginOptions as V };
|
|
@@ -51,10 +51,25 @@ interface VitePluginOptions extends UnpluginOptions {
|
|
|
51
51
|
devtools?: UnheadDevtoolsOptions | false;
|
|
52
52
|
/** Inject ValidatePlugin in dev to surface head tag warnings in the console. Enabled by default, set `false` to disable. */
|
|
53
53
|
validate?: boolean;
|
|
54
|
-
/**
|
|
54
|
+
/**
|
|
55
|
+
* @internal
|
|
56
|
+
* @deprecated Pass via the `internal` second argument of `Unhead()` instead.
|
|
57
|
+
* Retained as a passthrough so existing framework wrappers keep working.
|
|
58
|
+
*/
|
|
55
59
|
_framework?: string;
|
|
56
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Internal extension carrying the framework package name (e.g. `@unhead/vue`)
|
|
63
|
+
* so the base bundler factory can import runtime plugins from the right path.
|
|
64
|
+
* Never exposed on public option types; framework wrappers pass this via
|
|
65
|
+
* the factory helpers in `./framework`.
|
|
66
|
+
*
|
|
67
|
+
* @internal
|
|
68
|
+
*/
|
|
69
|
+
interface InternalFrameworkContext {
|
|
70
|
+
framework?: string;
|
|
71
|
+
}
|
|
57
72
|
interface UnheadDevtoolsOptions {
|
|
58
73
|
}
|
|
59
74
|
|
|
60
|
-
export type {
|
|
75
|
+
export type { InternalFrameworkContext as I, MinifyFn as M, VitePluginOptions as V };
|
package/dist/vite.d.mts
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { Plugin } from 'vite';
|
|
2
|
-
import { V as VitePluginOptions } from './shared/bundler.
|
|
2
|
+
import { V as VitePluginOptions, I as InternalFrameworkContext } from './shared/bundler.LjD9SWtb.mjs';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Vite plugin factory that composes the core Unhead build-time transforms
|
|
6
|
+
* (tree-shake, seo-meta, minify, SSR static replace, devtools).
|
|
7
|
+
*
|
|
8
|
+
* Framework packages (e.g. `@unhead/vue/vite`) should not call this directly;
|
|
9
|
+
* use the `createFrameworkVitePlugin` helper in `./framework` which threads
|
|
10
|
+
* `_framework` correctly without exposing it on public options.
|
|
11
|
+
*/
|
|
12
|
+
declare function Unhead(options?: VitePluginOptions, internal?: InternalFrameworkContext): Plugin[];
|
|
5
13
|
|
|
6
14
|
export { Unhead, VitePluginOptions };
|
package/dist/vite.d.ts
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { Plugin } from 'vite';
|
|
2
|
-
import { V as VitePluginOptions } from './shared/bundler.
|
|
2
|
+
import { V as VitePluginOptions, I as InternalFrameworkContext } from './shared/bundler.LjD9SWtb.js';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Vite plugin factory that composes the core Unhead build-time transforms
|
|
6
|
+
* (tree-shake, seo-meta, minify, SSR static replace, devtools).
|
|
7
|
+
*
|
|
8
|
+
* Framework packages (e.g. `@unhead/vue/vite`) should not call this directly;
|
|
9
|
+
* use the `createFrameworkVitePlugin` helper in `./framework` which threads
|
|
10
|
+
* `_framework` correctly without exposing it on public options.
|
|
11
|
+
*/
|
|
12
|
+
declare function Unhead(options?: VitePluginOptions, internal?: InternalFrameworkContext): Plugin[];
|
|
5
13
|
|
|
6
14
|
export { Unhead, VitePluginOptions };
|
package/dist/vite.mjs
CHANGED
|
@@ -1,255 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
1
|
+
import { T as TreeshakeServerComposables, U as UseSeoMetaTransform, M as MinifyTransform, u as unheadDevtools, S as SSRStaticReplace, C as CreateHeadTransform, c as createHeadTransformContext } from './shared/bundler.D9eYJXZg.mjs';
|
|
2
|
+
import 'node:fs';
|
|
3
|
+
import 'node:path';
|
|
4
|
+
import 'node:url';
|
|
5
|
+
import 'magic-string';
|
|
6
|
+
import 'oxc-walker';
|
|
7
|
+
import '@vitejs/devtools-kit';
|
|
8
8
|
import 'oxc-parser';
|
|
9
9
|
import 'ufo';
|
|
10
10
|
import 'unplugin';
|
|
11
11
|
import 'node:vm';
|
|
12
12
|
import 'unhead/utils';
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
name: "unhead:get-config",
|
|
16
|
-
type: "static",
|
|
17
|
-
setup: (ctx) => ({
|
|
18
|
-
handler: () => ({
|
|
19
|
-
cwd: ctx.cwd,
|
|
20
|
-
mode: ctx.mode
|
|
21
|
-
})
|
|
22
|
-
})
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
const HEAD_COMPOSABLES = ["useHead", "useSeoMeta", "useHeadSafe", "useScript"];
|
|
26
|
-
const FILE_RE$1 = /\.(vue|tsx?|jsx?|svelte)$/;
|
|
27
|
-
const LEADING_SLASH_RE = /^\//;
|
|
28
|
-
const UNHEAD_VERSION_RE = /__UNHEAD_VERSION__ = ['"]'?["']/;
|
|
29
|
-
const UNHEAD_ICON = `data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 24 24'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0%25' y1='0%25' x2='100%25' y2='100%25'%3E%3Cstop offset='0%25' stop-color='%23FBBF24'/%3E%3Cstop offset='100%25' stop-color='%23f0db4f'/%3E%3C/linearGradient%3E%3Cmask id='m'%3E%3Crect width='100%25' height='100%25' fill='white'/%3E%3Cpath d='M12 32 L1 32 L15 15 Z' fill='black'/%3E%3C/mask%3E%3C/defs%3E%3Cpath fill='none' stroke='url(%23g)' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 4v14a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V4' mask='url(%23m)'/%3E%3C/svg%3E`;
|
|
30
|
-
const DEVTOOLS_UI_ROUTE = "/__unhead/";
|
|
31
|
-
function transformSourceLocations(code, id, root) {
|
|
32
|
-
if (!HEAD_COMPOSABLES.some((c) => code.includes(c)))
|
|
33
|
-
return;
|
|
34
|
-
const s = new MagicString(code);
|
|
35
|
-
let transformed = false;
|
|
36
|
-
const relativePath = id.startsWith(root) ? id.slice(root.length).replace(LEADING_SLASH_RE, "") : id;
|
|
37
|
-
parseAndWalk(code, id, {
|
|
38
|
-
parseOptions: { lang: "ts" },
|
|
39
|
-
enter(node) {
|
|
40
|
-
if (node.type !== "CallExpression")
|
|
41
|
-
return;
|
|
42
|
-
const callee = node.callee;
|
|
43
|
-
if (!callee)
|
|
44
|
-
return;
|
|
45
|
-
const name = callee.type === "Identifier" ? callee.name : callee.type === "MemberExpression" && callee.property?.type === "Identifier" ? callee.property.name : null;
|
|
46
|
-
if (!name || !HEAD_COMPOSABLES.includes(name))
|
|
47
|
-
return;
|
|
48
|
-
const args = node.arguments;
|
|
49
|
-
if (!args || args.length === 0)
|
|
50
|
-
return;
|
|
51
|
-
const lineNumber = code.slice(0, node.start).split("\n").length;
|
|
52
|
-
const sourceValue = `${relativePath}:${lineNumber}`;
|
|
53
|
-
if (args.length === 1) {
|
|
54
|
-
const argEnd = args[0].end;
|
|
55
|
-
s.appendRight(argEnd, `, { _source: ${JSON.stringify(sourceValue)} }`);
|
|
56
|
-
transformed = true;
|
|
57
|
-
} else if (args.length >= 2 && args[1].type === "ObjectExpression") {
|
|
58
|
-
const objStart = args[1].start + 1;
|
|
59
|
-
s.appendRight(objStart, ` _source: ${JSON.stringify(sourceValue)},`);
|
|
60
|
-
transformed = true;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
if (!transformed)
|
|
65
|
-
return;
|
|
66
|
-
return {
|
|
67
|
-
code: s.toString(),
|
|
68
|
-
map: s.generateMap({ includeContent: true, source: id })
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
function unheadDevtools(options) {
|
|
72
|
-
let root = "";
|
|
73
|
-
let enabled = false;
|
|
74
|
-
let bridgeCode;
|
|
75
|
-
let unheadVersion = "";
|
|
76
|
-
const pkgDir = fileURLToPath(new URL("..", import.meta.url));
|
|
77
|
-
const devtoolsUiDir = fileURLToPath(new URL("./devtools-ui", import.meta.url));
|
|
78
|
-
return {
|
|
79
|
-
name: "@unhead/devtools",
|
|
80
|
-
apply: "serve",
|
|
81
|
-
configResolved(config) {
|
|
82
|
-
root = config.root;
|
|
83
|
-
enabled = config.plugins.some((p) => p.name?.startsWith("vite:devtools"));
|
|
84
|
-
if (!enabled)
|
|
85
|
-
return;
|
|
86
|
-
if (options?._ctx) {
|
|
87
|
-
options._ctx.addRuntimePlugin({
|
|
88
|
-
import: { name: "devtoolsPlugin", source: "@unhead/bundler", as: "__unhead_devtoolsPlugin" },
|
|
89
|
-
client: "window.__unhead_devtools__=_h",
|
|
90
|
-
server: "_h.use(__unhead_devtoolsPlugin())"
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
try {
|
|
94
|
-
const unheadPkg = resolve(pkgDir, "node_modules/unhead/package.json");
|
|
95
|
-
if (existsSync(unheadPkg))
|
|
96
|
-
unheadVersion = JSON.parse(readFileSync(unheadPkg, "utf-8")).version || "";
|
|
97
|
-
} catch {
|
|
98
|
-
}
|
|
99
|
-
const bridgePath = resolve(pkgDir, "dist/devtools/bridge.mjs");
|
|
100
|
-
if (existsSync(bridgePath))
|
|
101
|
-
bridgeCode = readFileSync(bridgePath, "utf-8");
|
|
102
|
-
},
|
|
103
|
-
configureServer(server) {
|
|
104
|
-
if (!enabled)
|
|
105
|
-
return;
|
|
106
|
-
server.middlewares.use("/@unhead/bridge.mjs", async (_req, res) => {
|
|
107
|
-
const result = await server.transformRequest("/@unhead/bridge.mjs");
|
|
108
|
-
res.setHeader("Content-Type", "application/javascript");
|
|
109
|
-
res.end(result?.code || 'console.warn("[unhead devtools] bridge not built")');
|
|
110
|
-
});
|
|
111
|
-
},
|
|
112
|
-
resolveId(id) {
|
|
113
|
-
if (!enabled)
|
|
114
|
-
return;
|
|
115
|
-
if (id === "/@unhead/bridge.mjs")
|
|
116
|
-
return id;
|
|
117
|
-
},
|
|
118
|
-
load(id) {
|
|
119
|
-
if (!enabled || id !== "/@unhead/bridge.mjs")
|
|
120
|
-
return;
|
|
121
|
-
if (!bridgeCode)
|
|
122
|
-
return 'console.warn("[unhead devtools] bridge not built")';
|
|
123
|
-
let code = bridgeCode;
|
|
124
|
-
if (unheadVersion)
|
|
125
|
-
code = code.replace(UNHEAD_VERSION_RE, `__UNHEAD_VERSION__ = '${unheadVersion}'`);
|
|
126
|
-
const kitClientPath = resolve(pkgDir, "node_modules/@vitejs/devtools-kit/dist/client.js");
|
|
127
|
-
if (existsSync(kitClientPath))
|
|
128
|
-
return code.replace(`'@vitejs/devtools-kit/client'`, `'${kitClientPath}'`);
|
|
129
|
-
return code;
|
|
130
|
-
},
|
|
131
|
-
transform: {
|
|
132
|
-
filter: { id: FILE_RE$1 },
|
|
133
|
-
handler(code, id) {
|
|
134
|
-
if (!enabled)
|
|
135
|
-
return;
|
|
136
|
-
return transformSourceLocations(code, id, root);
|
|
137
|
-
}
|
|
138
|
-
},
|
|
139
|
-
transformIndexHtml() {
|
|
140
|
-
if (!enabled)
|
|
141
|
-
return [];
|
|
142
|
-
return [{
|
|
143
|
-
tag: "script",
|
|
144
|
-
attrs: { type: "module" },
|
|
145
|
-
children: `import("/@unhead/bridge.mjs")`,
|
|
146
|
-
injectTo: "head"
|
|
147
|
-
}];
|
|
148
|
-
},
|
|
149
|
-
devtools: {
|
|
150
|
-
setup(ctx) {
|
|
151
|
-
if (existsSync(devtoolsUiDir)) {
|
|
152
|
-
ctx.views.hostStatic(DEVTOOLS_UI_ROUTE, devtoolsUiDir);
|
|
153
|
-
}
|
|
154
|
-
ctx.docks.register({
|
|
155
|
-
id: "unhead",
|
|
156
|
-
title: "Unhead",
|
|
157
|
-
icon: UNHEAD_ICON,
|
|
158
|
-
type: "iframe",
|
|
159
|
-
url: DEVTOOLS_UI_ROUTE
|
|
160
|
-
});
|
|
161
|
-
ctx.rpc.register(getConfigRpc);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
const FILE_RE = /\.(vue|tsx?|jsx?|svelte)$/;
|
|
168
|
-
const UNHEAD_SOURCE_RE = /^(?:@unhead\/[^/]+|unhead)(?:\/[^?]*)?$/;
|
|
169
|
-
function createHeadTransformContext() {
|
|
170
|
-
const registrations = [];
|
|
171
|
-
return {
|
|
172
|
-
addRuntimePlugin(reg) {
|
|
173
|
-
registrations.push(reg);
|
|
174
|
-
},
|
|
175
|
-
getRegistrations() {
|
|
176
|
-
return registrations;
|
|
177
|
-
}
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
function CreateHeadTransform(ctx) {
|
|
181
|
-
let root = "";
|
|
182
|
-
return {
|
|
183
|
-
name: "@unhead/create-head-transform",
|
|
184
|
-
apply: "serve",
|
|
185
|
-
configResolved(config) {
|
|
186
|
-
root = config.root;
|
|
187
|
-
},
|
|
188
|
-
transform: {
|
|
189
|
-
filter: { id: FILE_RE },
|
|
190
|
-
handler(code, id) {
|
|
191
|
-
const registrations = ctx.getRegistrations();
|
|
192
|
-
if (!registrations.length)
|
|
193
|
-
return;
|
|
194
|
-
if (!code.includes("createHead"))
|
|
195
|
-
return;
|
|
196
|
-
const isServer = this.environment?.config?.consumer === "server";
|
|
197
|
-
const envRegistrations = registrations.filter((r) => isServer ? r.server : r.client);
|
|
198
|
-
if (!envRegistrations.length)
|
|
199
|
-
return;
|
|
200
|
-
const s = new MagicString(code);
|
|
201
|
-
let transformed = false;
|
|
202
|
-
const directCreateHeadNames = /* @__PURE__ */ new Set();
|
|
203
|
-
const namespaceNames = /* @__PURE__ */ new Set();
|
|
204
|
-
parseAndWalk(code, id, {
|
|
205
|
-
parseOptions: { lang: "ts" },
|
|
206
|
-
enter(node) {
|
|
207
|
-
if (node.type === "ImportDeclaration") {
|
|
208
|
-
const source = node.source?.value;
|
|
209
|
-
if (typeof source !== "string" || !UNHEAD_SOURCE_RE.test(source))
|
|
210
|
-
return;
|
|
211
|
-
for (const spec of node.specifiers || []) {
|
|
212
|
-
if (spec.type === "ImportSpecifier" && spec.imported?.name === "createHead")
|
|
213
|
-
directCreateHeadNames.add(spec.local.name);
|
|
214
|
-
else if (spec.type === "ImportNamespaceSpecifier")
|
|
215
|
-
namespaceNames.add(spec.local.name);
|
|
216
|
-
}
|
|
217
|
-
return;
|
|
218
|
-
}
|
|
219
|
-
if (node.type !== "CallExpression")
|
|
220
|
-
return;
|
|
221
|
-
const callee = node.callee;
|
|
222
|
-
if (!callee)
|
|
223
|
-
return;
|
|
224
|
-
const isDirect = callee.type === "Identifier" && directCreateHeadNames.has(callee.name);
|
|
225
|
-
const isNamespaced = callee.type === "MemberExpression" && callee.object?.type === "Identifier" && namespaceNames.has(callee.object.name) && callee.property?.type === "Identifier" && callee.property.name === "createHead";
|
|
226
|
-
if (!isDirect && !isNamespaced)
|
|
227
|
-
return;
|
|
228
|
-
const statements = envRegistrations.map((r) => (isServer ? r.server : r.client).replace(/__ROOT__/g, JSON.stringify(root))).join(",");
|
|
229
|
-
s.prependLeft(node.start, `((_h)=>(${statements},_h))(`);
|
|
230
|
-
s.appendRight(node.end, `)`);
|
|
231
|
-
transformed = true;
|
|
232
|
-
}
|
|
233
|
-
});
|
|
234
|
-
if (!transformed)
|
|
235
|
-
return;
|
|
236
|
-
for (const reg of envRegistrations) {
|
|
237
|
-
s.prepend(`import { ${reg.import.name} as ${reg.import.as} } from '${reg.import.source}';
|
|
238
|
-
`);
|
|
239
|
-
}
|
|
240
|
-
return {
|
|
241
|
-
code: s.toString(),
|
|
242
|
-
map: s.generateMap({ includeContent: true, source: id })
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
};
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
function Unhead(options = {}) {
|
|
14
|
+
function Unhead(options = {}, internal = {}) {
|
|
250
15
|
const plugins = [];
|
|
251
16
|
const ctx = createHeadTransformContext();
|
|
252
|
-
const framework = options._framework;
|
|
17
|
+
const framework = internal.framework ?? options._framework;
|
|
253
18
|
if (options.treeshake !== false) {
|
|
254
19
|
const treeshakeOpts = typeof options.treeshake === "object" ? options.treeshake : {};
|
|
255
20
|
plugins.push(TreeshakeServerComposables.vite({ filter: options.filter, sourcemap: options.sourcemap, ...treeshakeOpts }));
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unhead/bundler",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.1.1",
|
|
5
5
|
"description": "Unhead build-time optimizations for Vite and Webpack.",
|
|
6
6
|
"author": "Harlan Wilton <harlan@harlanzw.com>",
|
|
7
7
|
"license": "MIT",
|
|
@@ -29,9 +29,9 @@
|
|
|
29
29
|
"types": "./dist/vite.d.ts",
|
|
30
30
|
"default": "./dist/vite.mjs"
|
|
31
31
|
},
|
|
32
|
-
"./
|
|
33
|
-
"types": "./dist/
|
|
34
|
-
"default": "./dist/
|
|
32
|
+
"./framework": {
|
|
33
|
+
"types": "./dist/framework.d.ts",
|
|
34
|
+
"default": "./dist/framework.mjs"
|
|
35
35
|
},
|
|
36
36
|
"./minify/rolldown": {
|
|
37
37
|
"types": "./dist/minify/rolldown.d.ts",
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
"vite": [
|
|
55
55
|
"dist/vite"
|
|
56
56
|
],
|
|
57
|
-
"
|
|
58
|
-
"dist/
|
|
57
|
+
"framework": [
|
|
58
|
+
"dist/framework"
|
|
59
59
|
],
|
|
60
60
|
"minify/rolldown": [
|
|
61
61
|
"dist/minify/rolldown"
|
|
@@ -76,9 +76,15 @@
|
|
|
76
76
|
"esbuild": ">=0.17.0",
|
|
77
77
|
"lightningcss": ">=1.20.0",
|
|
78
78
|
"rolldown": ">=1.0.0-beta.0",
|
|
79
|
-
"
|
|
79
|
+
"vite": ">=6.4.2",
|
|
80
|
+
"webpack": ">=5.0.0",
|
|
81
|
+
"@unhead/cli": "^3.1.1",
|
|
82
|
+
"unhead": "^3.1.1"
|
|
80
83
|
},
|
|
81
84
|
"peerDependenciesMeta": {
|
|
85
|
+
"@unhead/cli": {
|
|
86
|
+
"optional": true
|
|
87
|
+
},
|
|
82
88
|
"esbuild": {
|
|
83
89
|
"optional": true
|
|
84
90
|
},
|
|
@@ -87,20 +93,26 @@
|
|
|
87
93
|
},
|
|
88
94
|
"rolldown": {
|
|
89
95
|
"optional": true
|
|
96
|
+
},
|
|
97
|
+
"vite": {
|
|
98
|
+
"optional": true
|
|
99
|
+
},
|
|
100
|
+
"webpack": {
|
|
101
|
+
"optional": true
|
|
90
102
|
}
|
|
91
103
|
},
|
|
92
104
|
"dependencies": {
|
|
93
|
-
"@vitejs/devtools-kit": "^0.
|
|
105
|
+
"@vitejs/devtools-kit": "^0.2.0",
|
|
94
106
|
"magic-string": "^0.30.21",
|
|
95
|
-
"oxc-parser": "^0.
|
|
96
|
-
"oxc-walker": "^0.
|
|
97
|
-
"ufo": "^1.6.
|
|
107
|
+
"oxc-parser": "^0.132.0",
|
|
108
|
+
"oxc-walker": "^1.0.0",
|
|
109
|
+
"ufo": "^1.6.4",
|
|
98
110
|
"unplugin": "^3.0.0"
|
|
99
111
|
},
|
|
100
112
|
"devDependencies": {
|
|
101
|
-
"rollup": "^4.60.
|
|
102
|
-
"vite": "^8.0.
|
|
103
|
-
"unhead": "3.
|
|
113
|
+
"rollup": "^4.60.4",
|
|
114
|
+
"vite": "^8.0.14",
|
|
115
|
+
"unhead": "3.1.1"
|
|
104
116
|
},
|
|
105
117
|
"scripts": {
|
|
106
118
|
"build": "unbuild",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as p,C as m,D as y,o as s,g,w as b,c as i,n as o,i as e,v as n,l as u,P as h,p as C,M as f}from"./DVtdvxJ7.js";const k={slots:{root:"rounded-lg overflow-hidden",header:"p-4 sm:px-6",body:"p-4 sm:p-6",footer:"p-4 sm:px-6"},variants:{variant:{solid:{root:"bg-inverted text-inverted"},outline:{root:"bg-default ring ring-default divide-y divide-default"},soft:{root:"bg-elevated/50 divide-y divide-default"},subtle:{root:"bg-elevated/50 ring ring-default divide-y divide-default"}}},defaultVariants:{variant:"outline"}},w={__name:"UCard",props:{as:{type:null,required:!1},variant:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(c){const r=c,l=p(),v=m(),a=y("card",r),t=C(()=>f({extend:f(k),...v.ui?.card||{}})({variant:r.variant}));return(d,q)=>(s(),g(e(h),{as:c.as,"data-slot":"root",class:o(t.value.root({class:[e(a)?.root,r.class]}))},{default:b(()=>[l.header?(s(),i("div",{key:0,"data-slot":"header",class:o(t.value.header({class:e(a)?.header}))},[n(d.$slots,"header")],2)):u("",!0),l.default?(s(),i("div",{key:1,"data-slot":"body",class:o(t.value.body({class:e(a)?.body}))},[n(d.$slots,"default")],2)):u("",!0),l.footer?(s(),i("div",{key:2,"data-slot":"footer",class:o(t.value.footer({class:e(a)?.footer}))},[n(d.$slots,"footer")],2)):u("",!0)]),_:3},8,["as","class"]))}};export{w as _};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as q}from"./DNL7PE-I.js";import{f as N,o as n,c as o,n as $,g as r,h as O,l as i,a,t as c,_ as G,y as J,i as l,w as y,d as g,F as k,r as C,k as K,b as S,p as w,s as Q,z as L}from"./DVtdvxJ7.js";import{_ as W}from"./B4E3K9Fu.js";const X={class:"font-mono font-semibold"},Y={key:1,class:"opacity-70"},Z=N({__name:"DevtoolsMetric",props:{label:{},value:{},icon:{},variant:{default:"default"}},setup(u){return(B,d)=>{const f=O;return n(),o("div",{class:$(["devtools-metric",`devtools-metric--${u.variant}`])},[u.icon?(n(),r(f,{key:0,name:u.icon,class:"text-sm shrink-0","aria-hidden":"true"},null,8,["name"])):i("",!0),a("span",X,c(u.value),1),u.label?(n(),o("span",Y,c(u.label),1)):i("",!0)],2)}}}),ee=Object.assign(G(Z,[["__scopeId","data-v-c55561d5"]]),{__name:"DevtoolsMetric"}),te={class:"space-y-4"},ne={class:"flex flex-wrap gap-1.5"},ae={class:"ml-1 opacity-70 tabular-nums"},se={class:"flex items-center justify-between gap-3"},oe={class:"flex items-center gap-2.5 min-w-0"},re={class:"w-7 h-7 rounded-lg bg-elevated border border-default flex items-center justify-center flex-shrink-0 overflow-hidden"},le=["src"],ie={class:"text-sm font-mono text-highlighted truncate"},ce={class:"flex items-center gap-1"},ue={class:"flex flex-wrap gap-1.5 mt-3"},de={key:0,class:"border-t border-default mt-3 -mx-4 -mb-4"},fe=["onClick"],me={class:"text-[9px] px-1 py-px rounded-full bg-elevated tabular-nums font-mono"},_e={key:0,class:"px-3 pb-3"},ve={class:"space-y-1"},he={class:"font-mono text-muted tabular-nums text-[10px] w-20 flex-shrink-0"},pe={key:0,class:"font-mono text-muted text-[10px] w-14 flex-shrink-0"},ge={key:1,class:"w-14 flex-shrink-0"},xe={class:"flex items-center gap-1"},we=N({__name:"scripts",setup(u){const B=/^https?:\/\//,d=w(()=>Q.value.scripts||[]),f=L("all"),v=w(()=>{const e={all:d.value.length};for(const s of d.value)e[s.status]=(e[s.status]||0)+1;return e}),R=w(()=>f.value==="all"?d.value:d.value.filter(e=>e.status===f.value)),b=L({});async function I(e){if(!(!e||b.value[e]))try{const h=(await fetch(e,{method:"HEAD"})).headers.get("content-length");h&&(b.value[e]=M(Number.parseInt(h,10)))}catch{}}function M(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} kB`:`${(e/(1024*1024)).toFixed(1)} MB`}J(d,e=>{for(const s of e)s.src&&I(s.src)},{immediate:!0});function D(e){return e==="loaded"?"success":e==="loading"?"info":e==="error"?"error":e==="awaitingLoad"?"warning":"neutral"}function z(e){return e==="loaded"?"bg-green-500":e==="loading"?"bg-purple-500 motion-safe:animate-pulse":e==="error"?"bg-red-500":e==="awaitingLoad"?"bg-amber-400":"bg-neutral-400"}function T(e){return e.replace(B,"")}function E(e){try{return`https://www.google.com/s2/favicons?domain=${new URL(e).hostname}`}catch{return null}}function V(e){return new Date(e).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit",fractionalSecondDigits:3})}function j(e,s){if(!e.length)return"";const h=e[0].timestamp,m=s-h;return m<1e3?`+${m}ms`:`+${(m/1e3).toFixed(1)}s`}const A=w(()=>{const e=[{key:"all",label:"All"}];return v.value.loaded&&e.push({key:"loaded",label:"Loaded"}),v.value.loading&&e.push({key:"loading",label:"Loading"}),v.value.awaitingLoad&&e.push({key:"awaitingLoad",label:"Awaiting"}),v.value.error&&e.push({key:"error",label:"Error"}),v.value.removed&&e.push({key:"removed",label:"Removed"}),e}),x=L({});function H(e){x.value={...x.value,[e]:!x.value[e]}}return(e,s)=>{const h=q,m=K,F=O,p=ee,P=W;return n(),o("div",te,[l(d).length?(n(),o(k,{key:1},[a("div",ne,[(n(!0),o(k,null,C(l(A),t=>(n(),r(m,{key:t.key,color:l(f)===t.key?"primary":"neutral",variant:l(f)===t.key?"solid":"subtle",size:"xs",class:"cursor-pointer",onClick:_=>f.value=t.key},{default:y(()=>[g(c(t.label)+" ",1),a("span",ae,c(l(v)[t.key]||0),1)]),_:2},1032,["color","variant","onClick"]))),128))]),(n(!0),o(k,null,C(l(R),t=>(n(),r(P,{key:t.id,class:"overflow-hidden"},{default:y(()=>[a("div",se,[a("div",oe,[a("div",re,[t.src&&E(t.src)?(n(),o("img",{key:0,src:E(t.src),class:"w-4 h-4 rounded-sm",alt:""},null,8,le)):(n(),r(F,{key:1,name:"i-carbon-script",class:"text-sm text-muted"}))]),a("p",ie,c(t.src?T(t.src):"(inline)"),1)]),S(m,{color:D(t.status),variant:"subtle",size:"xs",class:"flex-shrink-0"},{default:y(()=>[a("span",ce,[a("span",{class:$(["w-1.5 h-1.5 rounded-full",z(t.status)])},null,2),g(" "+c(t.status),1)])]),_:2},1032,["color"])]),a("div",ue,[t.src&&l(b)[t.src]?(n(),r(p,{key:0,icon:"i-carbon-data-volume",value:l(b)[t.src],label:"size"},null,8,["value"])):i("",!0),t.warmupStrategy?(n(),r(p,{key:1,icon:"i-carbon-flash",value:t.warmupStrategy,label:"warmup"},null,8,["value"])):i("",!0),t.fetchpriority?(n(),r(p,{key:2,icon:"i-carbon-meter-alt",value:t.fetchpriority,label:"priority"},null,8,["value"])):i("",!0),t.defer?(n(),r(p,{key:3,icon:"i-carbon-time",value:"defer"})):i("",!0),t.async?(n(),r(p,{key:4,icon:"i-carbon-flash-filled",value:"async"})):i("",!0),t.crossorigin?(n(),r(p,{key:5,icon:"i-carbon-locked",value:t.crossorigin,label:"CORS"},null,8,["value"])):i("",!0)]),t.events?.length?(n(),o("div",de,[a("button",{class:"flex items-center gap-1.5 px-3 py-2 text-xs font-medium text-muted hover:text-highlighted w-full",onClick:_=>H(t.id)},[S(F,{name:"i-carbon-chevron-right",class:$(["text-xs transition-transform",l(x)[t.id]?"rotate-90":""])},null,8,["class"]),s[1]||(s[1]=g(" Events ",-1)),a("span",me,c(t.events.length),1)],8,fe),l(x)[t.id]?(n(),o("div",_e,[a("div",ve,[(n(!0),o(k,null,C(t.events,(_,U)=>(n(),o("div",{key:U,class:"flex items-center gap-2 py-1 px-2 rounded hover:bg-elevated text-xs"},[a("span",he,c(V(_.timestamp)),1),U>0?(n(),o("span",pe,c(j(t.events,_.timestamp)),1)):(n(),o("span",ge)),S(m,{color:D(_.type),variant:"subtle",size:"xs"},{default:y(()=>[a("span",xe,[a("span",{class:$(["w-1.5 h-1.5 rounded-full",z(_.type)])},null,2),g(" "+c(_.type),1)])]),_:2},1032,["color"])]))),128))])])):i("",!0)])):i("",!0)]),_:2},1024))),128))],64)):(n(),r(h,{key:0,icon:"i-carbon-script",title:"No scripts detected"},{description:y(()=>[...s[0]||(s[0]=[g(" Use ",-1),a("code",{class:"bg-elevated px-1.5 py-0.5 rounded text-xs"},"useScript()",-1),g(" to manage third-party scripts with loading strategies, triggers, and status tracking. ",-1)])]),_:1}))])}}});export{we as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{S as $,f as k,o as t,g as f,T as S,i as r,w as B,b as u,U as D,n as _,c as a,v as w,a as x,t as d,l as y,_ as h,F as V,r as j,d as v,h as N,m as O}from"./DVtdvxJ7.js";import{_ as U}from"./DF0wUzLT.js";function z(o=2e3){const{copy:l,copied:n}=$({legacy:!0,copiedDuring:o});return{copy:l,copied:n}}const I=k({__name:"DevtoolsCopyButton",props:{text:{}},setup(o){const{copy:l,copied:n}=z();return(p,c)=>{const s=D,g=S;return t(),f(g,{text:r(n)?"Copied!":"Copy"},{default:B(()=>[u(s,{icon:r(n)?"i-carbon-checkmark":"i-carbon-copy","aria-label":r(n)?"Copied":"Copy to clipboard",size:"xs",variant:"ghost",color:"neutral",class:_(r(n)?"text-green-500":""),onClick:c[0]||(c[0]=i=>r(l)(o.text))},null,8,["icon","aria-label","class"])]),_:1},8,["text"])}}}),b=Object.assign(I,{__name:"DevtoolsCopyButton"}),T={class:"devtools-snippet"},F={key:0,class:"devtools-snippet-header"},K={class:"text-xs font-mono text-muted"},L=k({__name:"DevtoolsSnippet",props:{label:{},code:{},lang:{default:"json"}},setup(o){return(l,n)=>{const p=b,c=U;return t(),a("div",T,[o.label||l.$slots.header?(t(),a("div",F,[w(l.$slots,"header",{},()=>[x("code",K,d(o.label),1)],!0),u(p,{text:o.code},null,8,["text"])])):y("",!0),u(c,{code:o.code,lang:o.lang,class:"devtools-snippet-block"},null,8,["code","lang"])])}}}),R=Object.assign(h(L,[["__scopeId","data-v-1994adf5"]]),{__name:"DevtoolsSnippet"}),A={class:"divide-y divide-[var(--ui-border)]"},E={class:"devtools-kv-key"},q=["href"],G=["href"],H=k({__name:"DevtoolsKeyValue",props:{items:{},striped:{type:Boolean,default:!1}},setup(o){const l=/^https?:\/\/\S+$/,n=/^#(?:[0-9a-f]{3,4}){1,2}$|^rgba?\([\d\s,./]+\)$|^hsla?\([\d\s%,./]+\)$/i;function p(s){return!s.link&&!s.code&&typeof s.value=="string"&&l.test(s.value)}function c(s){return typeof s.value=="string"&&n.test(s.value.trim())}return(s,g)=>{const i=N,m=R,C=b;return t(),a("div",A,[(t(!0),a(V,null,j(o.items,e=>(t(),a("div",{key:e.key,class:_(["devtools-kv-row group",{"devtools-kv-striped":o.striped,"devtools-kv-stacked":!!e.code}])},[x("span",E,d(e.key),1),x("div",{class:_(["devtools-kv-value-wrap",{"w-full":!!e.code}])},[e.link?(t(),a("a",{key:0,href:e.link,target:"_blank",rel:"noopener noreferrer",class:"text-xs text-muted hover:text-default flex items-center gap-1"},[v(d(e.value)+" ",1),u(i,{name:"i-carbon-launch",class:"text-xs"})],8,q)):e.code&&e.value!==void 0&&e.value!==""?(t(),f(m,{key:1,code:String(e.value),lang:e.code,class:"w-full"},null,8,["code","lang"])):p(e)?(t(),a("a",{key:2,href:String(e.value),target:"_blank",rel:"noopener noreferrer",class:"text-xs text-muted hover:text-default flex items-center gap-1"},[v(d(e.value)+" ",1),u(i,{name:"i-carbon-launch",class:"text-xs"})],8,G)):(t(),a("span",{key:3,class:_(["devtools-kv-value flex items-center gap-1.5",{"font-mono":e.mono!==!1,"text-green-500":e.value===!0,"text-red-400":e.value===!1,"text-muted italic":e.value===void 0||e.value===""}])},[c(e)?(t(),a("span",{key:0,class:"inline-block w-3 h-3 rounded-sm shrink-0 border border-[var(--ui-border)]",style:O({background:String(e.value).trim()})},null,4)):y("",!0),v(" "+d(e.value===void 0||e.value===""?"(empty)":e.value),1)],2)),!e.code&&e.copyable&&e.value!==void 0&&e.value!==""?(t(),f(C,{key:4,text:String(e.value),class:"opacity-0 group-hover:opacity-100 transition-opacity"},null,8,["text"])):y("",!0)],2)],2))),128))])}}}),P=Object.assign(h(H,[["__scopeId","data-v-983967b4"]]),{__name:"DevtoolsKeyValue"});export{P as _,R as a};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as I}from"./DNL7PE-I.js";import{_ as M,g as y,a as i,b as p,f as T,c as q,n as O,d as U,e as J,i as E}from"./Bhqqi5fM.js";import{f as C,q as F,o,c as r,a as n,n as k,g as f,h as L,l as g,v as N,d as c,t as m,x as G,_ as H,i as e,w as h,F as w,r as j,b as x,k as K,p as R,s as Q}from"./DVtdvxJ7.js";import{_ as W}from"./DF0wUzLT.js";import{_ as X}from"./B4E3K9Fu.js";const Y=["open"],Z={class:"flex-1 min-w-0"},ee={class:"text-sm font-semibold"},te={key:0,class:"text-xs text-muted mt-0.5"},se=C({__name:"DevtoolsSection",props:G({icon:{},text:{},description:{},collapse:{type:Boolean,default:!0},padding:{type:Boolean,default:!0}},{open:{default:!0},openModifiers:{}}),emits:["update:open"],setup(d){const v=F(d,"open");function b(u){v.value=u.target.open}return(u,S)=>{const a=L;return o(),r("details",{open:v.value,class:"section-block",onToggle:b},[n("summary",{class:k(["section-header",d.collapse?"":"pointer-events-none"])},[n("div",{class:k(["section-title",v.value?"":"opacity-60"])},[d.icon?(o(),f(a,{key:0,name:d.icon,class:"text-lg text-muted shrink-0"},null,8,["name"])):g("",!0),n("div",Z,[n("div",ee,[N(u.$slots,"text",{},()=>[c(m(d.text),1)],!0)]),d.description||u.$slots.description?(o(),r("div",te,[N(u.$slots,"description",{},()=>[c(m(d.description),1)],!0)])):g("",!0)]),N(u.$slots,"actions",{},void 0,!0),d.collapse?(o(),f(a,{key:1,name:"i-carbon-chevron-down",class:"section-chevron text-muted"})):g("",!0)],2)],2),n("div",{class:k(d.padding?"p-3":"")},[N(u.$slots,"default",{},void 0,!0)],2)],40,Y)}}}),oe=Object.assign(H(se,[["__scopeId","data-v-4f7a0867"]]),{__name:"DevtoolsSection"}),ne={class:"space-y-4"},ae={class:"font-medium"},re={class:"flex items-center gap-2"},le={class:"font-medium text-sm"},ie={class:"text-xs text-muted mt-1 truncate"},ce={key:0,class:"space-y-4"},de={key:0},me={class:"space-y-0.5"},ue={class:"text-sm font-mono"},pe={key:0,class:"text-xs text-muted font-mono ml-auto truncate max-w-[200px]"},xe={class:"space-y-0.5 p-2"},fe={class:"text-sm font-mono"},ge={key:0,class:"text-xs text-muted font-mono ml-auto truncate max-w-[200px]"},_e={class:"flex gap-3 pt-2 border-t border-default"},he=["href"],ve=["href"],ye={class:"flex gap-3 justify-center pt-2"},ke={href:"https://validator.schema.org/",target:"_blank",rel:"noopener noreferrer",class:"text-xs text-muted hover:text-default flex items-center gap-1"},be={href:"https://search.google.com/test/rich-results",target:"_blank",rel:"noopener noreferrer",class:"text-xs text-muted hover:text-default flex items-center gap-1"},De=C({__name:"schema",setup(d){const v=R(()=>{const a=Q.value.tags.filter(t=>t.tag==="script"&&t.props?.type==="application/ld+json");if(!a.length)return null;for(const t of a)try{return JSON.parse(t.innerHTML||"{}")}catch{continue}return null}),b=R(()=>{const a=v.value;return a?a["@graph"]&&Array.isArray(a["@graph"])?a["@graph"].filter(t=>!t||typeof t!="object"||Object.keys(t).length===1&&t["@id"]?!1:!!t["@type"]):a["@type"]?[a]:[]:[]}),u=R(()=>b.value.filter(a=>E(i(a)))),S=R(()=>{let a=0,t=0;for(const D of u.value){const $=q(D);a+=$.missingRequired.length,t+=$.missingRecommended.length}return{errors:a,warnings:t}});return(a,t)=>{const D=I,$=M,_=L,B=K,V=oe,P=W,z=X;return o(),r("div",ne,[e(v)?(o(),r(w,{key:1},[e(S).errors>0?(o(),f($,{key:0,variant:"error"},{default:h(()=>[n("p",ae,m(e(S).errors)+" missing required propert"+m(e(S).errors>1?"ies":"y"),1)]),_:1})):g("",!0),(o(!0),r(w,null,j(e(b),(s,A)=>(o(),f(z,{key:A},{header:h(()=>[n("div",re,[x(_,{name:e(U)(e(i)(s)),class:"text-lg"},null,8,["name"]),n("span",le,m(e(i)(s)),1)]),n("p",ie,m(e(J)(s)),1)]),default:h(()=>[e(y)[e(i)(s)]?(o(),r("div",ce,[e(y)[e(i)(s)]?.required.length?(o(),r("div",de,[t[2]||(t[2]=n("div",{class:"text-xs font-semibold uppercase tracking-wider text-muted mb-2"}," Required ",-1)),n("div",me,[(o(!0),r(w,null,j(e(y)[e(i)(s)].required,l=>(o(),r("div",{key:l,class:"flex items-center gap-2 px-2 py-1.5 rounded-md"},[x(_,{name:e(p)(s,l)!==void 0?"i-carbon-checkmark-filled":"i-carbon-close-filled",class:k(["text-sm shrink-0",e(p)(s,l)!==void 0?"text-green-500":"text-red-400"])},null,8,["name","class"]),n("span",ue,m(l),1),e(p)(s,l)!==void 0?(o(),r("span",pe,m(e(T)(e(p)(s,l))),1)):(o(),f(B,{key:1,color:"error",variant:"subtle",size:"xs",class:"ml-auto"},{default:h(()=>[...t[1]||(t[1]=[c(" missing ",-1)])]),_:1}))]))),128))])])):g("",!0),e(y)[e(i)(s)]?.recommended.length?(o(),f(V,{key:1,open:!1,icon:"i-carbon-warning-filled",text:`Recommended (${e(q)(s).missingRecommended.length} missing)`,padding:!1},{default:h(()=>[n("div",xe,[(o(!0),r(w,null,j(e(y)[e(i)(s)].recommended,l=>(o(),r("div",{key:l,class:"flex items-center gap-2 px-2 py-1.5 rounded-md"},[x(_,{name:e(p)(s,l)!==void 0?"i-carbon-checkmark-filled":"i-carbon-warning-filled",class:k(["text-sm shrink-0",e(p)(s,l)!==void 0?"text-green-500":"text-amber-400"])},null,8,["name","class"]),n("span",fe,m(l),1),e(p)(s,l)!==void 0?(o(),r("span",ge,m(e(T)(e(p)(s,l))),1)):(o(),f(B,{key:1,color:"warning",variant:"subtle",size:"xs",class:"ml-auto"},{default:h(()=>[...t[3]||(t[3]=[c(" missing ",-1)])]),_:1}))]))),128))])]),_:2},1032,["text"])):g("",!0),n("div",_e,[n("a",{href:e(O)(e(i)(s)).schemaOrg,target:"_blank",rel:"noopener noreferrer",class:"text-xs text-muted hover:text-default flex items-center gap-1"},[x(_,{name:"i-carbon-launch",class:"text-xs"}),t[4]||(t[4]=c(" Schema.org ",-1))],8,he),e(O)(e(i)(s)).googlePage?(o(),r("a",{key:0,href:e(O)(e(i)(s)).googlePage,target:"_blank",rel:"noopener noreferrer",class:"text-xs text-muted hover:text-default flex items-center gap-1"},[x(_,{name:"i-carbon-launch",class:"text-xs"}),t[5]||(t[5]=c(" Google Docs ",-1))],8,ve)):g("",!0)])])):g("",!0),n("div",{class:k(["max-h-[400px] overflow-auto",{"mt-4 pt-4 border-t border-default":e(y)[e(i)(s)]}])},[x(P,{code:JSON.stringify(s,null,2),lang:"json"},null,8,["code"])],2)]),_:2},1024))),128)),n("div",ye,[n("a",ke,[x(_,{name:"i-carbon-launch",class:"text-xs"}),t[6]||(t[6]=c(" Schema.org Validator ",-1))]),n("a",be,[x(_,{name:"i-carbon-launch",class:"text-xs"}),t[7]||(t[7]=c(" Google Rich Results Test ",-1))])])],64)):(o(),f(D,{key:0,icon:"i-carbon-chart-relationship",title:"No structured data detected"},{description:h(()=>[...t[0]||(t[0]=[c(" Add JSON-LD structured data via ",-1),n("code",{class:"bg-elevated px-1.5 py-0.5 rounded text-xs"},"useSchemaOrg()",-1),c(" or ",-1),n("code",{class:"bg-elevated px-1.5 py-0.5 rounded text-xs"},"useHead()",-1),c(" with a script tag. ",-1)])]),_:1}))])}}});export{De as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{f as h,o as d,c as u,n as b,b as y,h as v,a as A,v as l,l as w,_ as R}from"./DVtdvxJ7.js";const P=["role"],S={class:"flex-1 min-w-0 text-sm"},q={key:0,class:"ml-auto shrink-0"},O=h({__name:"DevtoolsAlert",props:{icon:{},variant:{default:"info"}},setup(e){const r={info:"i-carbon-information",warning:"i-carbon-warning",error:"i-carbon-close-outline",success:"i-carbon-checkmark-outline"};return(o,i)=>{const t=v;return d(),u("div",{class:b(["devtools-alert",`devtools-alert--${e.variant}`]),role:e.variant==="error"?"alert":"status"},[y(t,{name:e.icon||r[e.variant],class:"shrink-0","aria-hidden":"true"},null,8,["name"]),A("div",S,[l(o.$slots,"default",{},void 0,!0)]),o.$slots.action?(d(),u("div",q,[l(o.$slots,"action",{},void 0,!0)])):w("",!0)],10,P)}}}),B=Object.assign(R(O,[["__scopeId","data-v-6dbb49a3"]]),{__name:"DevtoolsAlert"}),j=new Set(["Article","NewsArticle","BlogPosting","ScholarlyArticle","Product","AggregateOffer","Offer","FAQPage","Question","HowTo","HowToStep","Recipe","Event","LocalBusiness","Restaurant","JobPosting","Course","Movie","Book","SoftwareApplication","VideoObject","Review","AggregateRating","BreadcrumbList","SearchAction","Dataset","SpecialAnnouncement","Person","NewsMediaOrganization","Organization"]),k={Article:{required:[],recommended:["author","author.name","dateModified","datePublished","headline","image"],documentationUrl:"https://developers.google.com/search/docs/appearance/structured-data/article"},NewsArticle:{required:[],recommended:["author","author.name","dateModified","datePublished","headline","image"],documentationUrl:"https://developers.google.com/search/docs/appearance/structured-data/article"},BlogPosting:{required:[],recommended:["author","author.name","dateModified","datePublished","headline","image"],documentationUrl:"https://developers.google.com/search/docs/appearance/structured-data/article"},Product:{required:["name"],recommended:["description","offers","offers.price","offers.priceCurrency","offers.availability","aggregateRating","review","image"],documentationUrl:"https://developers.google.com/search/docs/appearance/structured-data/product"},FAQPage:{required:["mainEntity"],recommended:[],documentationUrl:"https://developers.google.com/search/docs/appearance/structured-data/faqpage"},Recipe:{required:["name","image"],recommended:["aggregateRating","author","cookTime","datePublished","description","keywords","nutrition","prepTime","recipeCategory","recipeCuisine","recipeIngredient","recipeInstructions","recipeYield","totalTime","video"],documentationUrl:"https://developers.google.com/search/docs/appearance/structured-data/recipe"},Event:{required:["name","location","startDate"],recommended:["description","endDate","eventStatus","image","offers","performer","organizer"],documentationUrl:"https://developers.google.com/search/docs/appearance/structured-data/event"},LocalBusiness:{required:["name","address"],recommended:["aggregateRating","department","geo","openingHoursSpecification","priceRange","telephone","url"],documentationUrl:"https://developers.google.com/search/docs/appearance/structured-data/local-business"},Restaurant:{required:["name","address"],recommended:["aggregateRating","servesCuisine","hasMenu","geo","openingHoursSpecification","priceRange","telephone","url"],documentationUrl:"https://developers.google.com/search/docs/appearance/structured-data/local-business"},Review:{required:["author","itemReviewed","reviewRating"],recommended:["datePublished","reviewRating.bestRating","reviewRating.worstRating"],documentationUrl:"https://developers.google.com/search/docs/appearance/structured-data/review-snippet"},AggregateRating:{required:["itemReviewed","ratingValue"],recommended:["bestRating","worstRating","ratingCount","reviewCount"],documentationUrl:"https://developers.google.com/search/docs/appearance/structured-data/review-snippet"},BreadcrumbList:{required:["itemListElement"],recommended:[],documentationUrl:"https://developers.google.com/search/docs/appearance/structured-data/breadcrumb"},Organization:{required:[],recommended:["name","logo","url","email","telephone","contactPoint","sameAs","address","description"],documentationUrl:"https://developers.google.com/search/docs/appearance/structured-data/organization"},Person:{required:[],recommended:["name","url","image","sameAs","jobTitle","worksFor"],documentationUrl:"https://developers.google.com/search/docs/appearance/structured-data/person"},SoftwareApplication:{required:["name","offers"],recommended:["applicationCategory","operatingSystem","aggregateRating","review"],documentationUrl:"https://developers.google.com/search/docs/appearance/structured-data/software-app"},VideoObject:{required:["name","thumbnailUrl","uploadDate"],recommended:["contentUrl","description","duration","embedUrl"],documentationUrl:"https://developers.google.com/search/docs/appearance/structured-data/video"},JobPosting:{required:["datePosted","description","hiringOrganization","jobLocation","title"],recommended:["applicantLocationRequirements","baseSalary","employmentType","jobLocationType","validThrough"],documentationUrl:"https://developers.google.com/search/docs/appearance/structured-data/job-posting"},Course:{required:["description","name"],recommended:["provider"],documentationUrl:"https://developers.google.com/search/docs/appearance/structured-data/course"}};function c(e,r,o){if(!(!e||typeof e!="object"||o.has(e))){o.add(e),e["@type"]&&Object.keys(e).length>1&&r.push(e);for(const i of Object.values(e))if(Array.isArray(i))for(const t of i)c(t,r,o);else typeof i=="object"&&c(i,r,o)}}function g(e,r){const o={...e};return Object.keys(o).forEach(i=>{const t=o[i];t&&typeof t=="object"&&!Array.isArray(t)&&Object.keys(t).length===1&&t["@id"]&&r.has(t["@id"])?o[i]={...r.get(t["@id"])}:Array.isArray(t)?o[i]=t.map(n=>n&&typeof n=="object"&&Object.keys(n).length===1&&n["@id"]&&r.has(n["@id"])?{...r.get(n["@id"])}:n):t&&typeof t=="object"&&!Array.isArray(t)&&Object.keys(t).length>1&&(o[i]=g(t,r))}),o}function L(e){const r=[];if(!e)return r;const o=new Set;if(e["@graph"]&&Array.isArray(e["@graph"])){const n=new Map;e["@graph"].forEach(a=>{a&&typeof a=="object"&&a["@id"]&&n.set(a["@id"],a)});const s=new Set;e["@graph"].forEach(a=>{if(a&&typeof a=="object"){if(Object.keys(a).length===1&&a["@id"]||a["@id"]&&s.has(a["@id"]))return;const f=g(a,n);c(f,r,o),a["@id"]&&s.add(a["@id"])}})}else e["@type"]&&c(e,r,o);const i=[],t=new Set;for(const n of r){const s=n["@id"];if(s){if(t.has(s))continue;t.add(s)}i.push(n)}return i}function m(e){return!e||!e["@type"]?"Unknown":Array.isArray(e["@type"])?e["@type"][0]:e["@type"]}function N(e){return j.has(e)}function C(e){const r=m(e);return e.name?e.name:e.headline?e.headline:e.title?e.title:e.description?typeof e.description=="string"?e.description.substring(0,100)+(e.description.length>100?"...":""):"":e["@id"]?e["@id"]:e.url?e.url:`${r} Schema`}function p(e,r){const o=r.split(".");let i=e;for(const t of o)if(i&&typeof i=="object"&&t in i)i=i[t];else return;return i}function T(e){const r=m(e),o=k[r];if(!o)return{missingRequired:[],missingRecommended:[],presentProperties:{}};const i=[],t=[],n={};return o.required.forEach(s=>{const a=p(e,s);a==null||a===""?i.push(s):n[s]=a}),o.recommended.forEach(s=>{const a=p(e,s);a==null||a===""?t.push(s):n[s]=a}),{missingRequired:i,missingRecommended:t,presentProperties:n}}function E(e){return e==null?"null":typeof e=="string"?e.length>50?`${e.substring(0,50)}...`:e:typeof e=="number"?e.toString():typeof e=="boolean"?e?"true":"false":Array.isArray(e)?`[${e.length} items]`:typeof e=="object"&&e["@type"]?e["@type"]:typeof e=="object"?"{...}":String(e)}function z(e){return{Article:"carbon:document",NewsArticle:"carbon:news",BlogPosting:"carbon:blog",Product:"carbon:shopping-cart",FAQPage:"carbon:help",Organization:"carbon:building",LocalBusiness:"carbon:location",Person:"carbon:user",Event:"carbon:calendar",SoftwareApplication:"carbon:application",Recipe:"carbon:restaurant",HowTo:"carbon:list-numbered",WebSite:"carbon:earth",WebPage:"carbon:page-first",BreadcrumbList:"carbon:flow",VideoObject:"carbon:video",Review:"carbon:star",AggregateRating:"carbon:star-filled",SearchAction:"carbon:search"}[e]||"carbon:code"}const U={article:["Article","NewsArticle","BlogPosting"],book:["Book"],breadcrumb:["BreadcrumbList"],carousel:["ItemList"],"course-info":["Course"],course:["Course"],dataset:["Dataset"],"discussion-forum":["DiscussionForumPosting"],"education-qa":["Question","Answer"],"employer-rating":["EmployerAggregateRating"],"estimated-salary":["OccupationalExperienceRequirements"],event:["Event"],factcheck:["ClaimReview"],faqpage:["FAQPage"],"image-license-metadata":["ImageObject"],"job-posting":["JobPosting"],"learning-video":["LearningResource","VideoObject"],"local-business":["LocalBusiness"],"math-solvers":["MathSolver"],movie:["Movie"],organization:["Organization"],"practice-problems":["Quiz","Question"],product:["Product"],"product-snippet":["Product"],"merchant-listing":["Product","Offer"],"product-variants":["Product"],"profile-page":["ProfilePage","Person"],qapage:["QAPage"],recipe:["Recipe"],"review-snippet":["Review"],"software-app":["SoftwareApplication"],speakable:["SpeakableSpecification"],"special-announcements":["SpecialAnnouncement"],"paywalled-content":["CreativeWork"],"vacation-rental":["Accommodation","LodgingBusiness"],"vehicle-listing":["Vehicle"],video:["VideoObject"]};function V(e){const r=e.replace("https://schema.org/",""),o=Object.entries(U).find(([i,t])=>t.includes(r))?.[0];return{type:r,schemaOrg:`https://schema.org/${r}`,googlePage:o?`https://developers.google.com/search/docs/appearance/structured-data/${o}`:null}}function D(e){return Array.isArray(e)?e:[e]}export{B as _,m as a,p as b,T as c,z as d,C as e,E as f,k as g,D as h,N as i,L as j,V as n};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as C}from"./zAl29A3_.js";import{f as v,o as t,c as d,a as n,b as o,h as k,t as c,k as $,w as r,d as f,l as g,i as s,s as a,F as y,r as b,g as m}from"./DVtdvxJ7.js";import{_ as D}from"./DF0wUzLT.js";import{_ as E}from"./DNL7PE-I.js";import{_ as N}from"./B4E3K9Fu.js";import"./BWpSa8Y9.js";const U={class:"border border-default rounded-lg overflow-hidden group"},z={class:"flex items-center gap-3 p-3 bg-default cursor-pointer select-none list-none [&::-webkit-details-marker]:hidden"},H={class:"font-mono text-sm"},T={key:0,class:"text-xs text-muted font-mono ml-auto"},V={class:"p-3 bg-elevated border-t border-default"},O=v({__name:"DevtoolsHeadEntry",props:{entry:{}},setup(e){const u={server:{color:"info",icon:"i-carbon-cloud"},client:{color:"warning",icon:"i-carbon-laptop"},hydrated:{color:"success",icon:"i-carbon-arrows-horizontal"},stream:{color:"primary",icon:"i-carbon-flow-stream"}};return(w,h)=>{const l=k,_=$,p=D;return t(),d("details",U,[n("summary",z,[o(l,{name:"i-carbon-chevron-right",class:"text-xs transition-transform group-open:rotate-90 shrink-0"}),n("span",H,"#"+c(e.entry.id),1),o(_,{variant:"subtle",size:"xs"},{default:r(()=>[f(c(e.entry.tagCount)+" tags ",1)]),_:1}),o(_,{color:u[e.entry.mode]?.color||"neutral",variant:"subtle",size:"xs"},{default:r(()=>[o(l,{name:u[e.entry.mode]?.icon||"i-carbon-help",class:"text-xs"},null,8,["name"]),f(" "+c(e.entry.mode||"unknown"),1)]),_:1},8,["color"]),e.entry.source?(t(),d("span",T,c(e.entry.source),1)):g("",!0)]),n("div",V,[o(p,{code:JSON.stringify(e.entry.input,null,2),lang:"json"},null,8,["code"])])])}}}),S=Object.assign(O,{__name:"DevtoolsHeadEntry"}),j={class:"space-y-4"},F={class:"flex items-center gap-2"},I={class:"font-medium"},J={class:"space-y-3"},L={class:"flex items-center gap-2"},P={class:"font-medium"},R={class:"flex flex-wrap gap-2"},W=v({__name:"index",setup(e){return(u,w)=>{const h=C,l=k,_=S,p=E,x=N,B=$;return t(),d("div",j,[o(h,{tags:s(a).tags,title:"Resolved Tags"},null,8,["tags"]),o(x,null,{header:r(()=>[n("div",F,[o(l,{name:"i-carbon-list",class:"text-lg"}),n("span",I,"Head Entries ("+c(s(a).entries.length)+")",1)])]),default:r(()=>[n("div",J,[(t(!0),d(y,null,b(s(a).entries,i=>(t(),m(_,{key:i.id,entry:i},null,8,["entry"]))),128)),s(a).entries.length?g("",!0):(t(),m(p,{key:0,icon:"i-carbon-list",title:"No entries detected"}))])]),_:1}),s(a).plugins.length?(t(),m(x,{key:0},{header:r(()=>[n("div",L,[o(l,{name:"i-carbon-plug",class:"text-lg"}),n("span",P,"Plugins ("+c(s(a).plugins.length)+")",1)])]),default:r(()=>[n("div",R,[(t(!0),d(y,null,b(s(a).plugins,i=>(t(),m(B,{key:i,variant:"subtle",size:"xs"},{default:r(()=>[f(c(i),1)]),_:2},1024))),128))])]),_:1})):g("",!0)])}}});export{W as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{f as F,o as l,c as d,b,w as n,a as e,h as R,t as c,i as o,j as z,g as u,F as x,r as y,n as S,k as E,d as _,l as p,m as O,p as f,s as C,_ as q}from"./DVtdvxJ7.js";import{_ as H}from"./p7SZRf-U.js";import{_ as P}from"./B4E3K9Fu.js";import{_ as G}from"./DNL7PE-I.js";const J={class:"space-y-4"},K={class:"flex items-center gap-2"},M={class:"id-browser",role:"img","aria-label":"Browser tab preview"},Q={class:"id-browser__chrome"},W={class:"id-browser__bar"},X={class:"id-browser__url"},Y={class:"id-browser__tabs"},Z={class:"id-browser__tab id-browser__tab--active"},ee=["src"],te={class:"id-browser__title"},se={class:"mt-3 space-y-1"},oe={class:"flex items-center justify-between"},le={class:"flex items-center gap-2"},re={class:"id-group-header"},ae={class:"id-group-count"},ne={class:"text-xs text-muted mb-3"},ie={class:"id-icon-grid"},de={class:"id-icon-preview"},ce=["src","alt"],ue={class:"id-icon-meta"},me={class:"id-icon-badges"},pe={class:"flex items-center justify-between"},he={class:"flex items-center gap-2"},_e={key:0,class:"mb-5"},fe={class:"flex items-center gap-3"},ve={class:"text-sm font-mono font-medium"},ge={key:1},be={class:"id-color-grid"},xe=["aria-label"],ye={class:"id-color-card__meta"},ke={class:"text-sm font-mono font-medium"},we=F({__name:"identity",setup(ze){const k=f(()=>C.value.seo),h=f(()=>C.value.tags.filter(s=>s.tag==="link"&&["icon","apple-touch-icon"].includes(s.props?.rel||"")).map(s=>({rel:s.props?.rel||"icon",href:s.props?.href||"",type:s.props?.type,sizes:s.props?.sizes,media:s.props?.media}))),T=f(()=>{const s={};for(const t of h.value){const i=t.rel;s[i]||(s[i]=[]),s[i].push(t)}return s}),A={icon:{label:"Favicon",description:"Browser tab icons"},"apple-touch-icon":{label:"Apple Touch Icon",description:"iOS home screen icon"}},v=f(()=>C.value.tags.filter(s=>s.tag==="meta"&&s.props?.name==="theme-color").map(s=>{const t=s.props?.media||null;let i="default";return t?.includes("prefers-color-scheme: light")?i="light":t?.includes("prefers-color-scheme: dark")&&(i="dark"),{color:s.props?.content||"",media:t,context:i}})),w=f(()=>C.value.tags.find(t=>t.tag==="meta"&&t.props?.name==="color-scheme")?.props?.content||null),B=f(()=>{const s=h.value.find(t=>t.href?.includes("favicon.ico"));return s?s.href:h.value.find(t=>t.rel==="icon")?.href||null}),L=f(()=>C.value.tags.find(t=>t.tag==="htmlAttrs")?.props?.lang||null),D=f(()=>[{done:!!k.value.title,html:"Set a <code>title</code> for the browser tab and search results."},{done:!!k.value.description,html:"Add a <code>description</code> meta tag for search result snippets."},{done:!!k.value.canonical,html:"Set a <code>canonical</code> URL so search engines know the preferred address."},{done:!!L.value,html:"Set the <code>lang</code> attribute on <code><html></code> for accessibility."}]),I=f(()=>[{done:h.value.some(s=>s.rel==="icon"),html:'Add a <code><link rel="icon"></code> favicon.'},{done:h.value.some(s=>s.rel==="apple-touch-icon"),html:"Add an <code>apple-touch-icon</code> for iOS home screen."},{done:h.value.some(s=>s.sizes),html:"Specify <code>sizes</code> on icons for resolution hints."}]),V=f(()=>[{done:v.value.length>0,html:"Set a <code>theme-color</code> to brand the mobile browser UI."},{done:v.value.some(s=>s.context==="light")&&v.value.some(s=>s.context==="dark"),html:"Add light/dark <code>theme-color</code> variants with <code>prefers-color-scheme</code> media queries."},{done:!!w.value,html:"Set <code>color-scheme</code> to declare supported modes (e.g. <code>light dark</code>)."}]);return(s,t)=>{const i=R,$=H,U=P,g=E,N=G;return l(),d("div",J,[b(U,null,{header:n(()=>[e("div",K,[b(i,{name:"i-carbon-application-web",class:"text-lg"}),t[0]||(t[0]=e("span",{class:"font-medium"},"Browser Preview",-1))])]),default:n(()=>[e("div",M,[e("div",Q,[t[1]||(t[1]=e("div",{class:"id-browser__dots","aria-hidden":"true"},[e("span"),e("span"),e("span")],-1)),e("div",W,[b(i,{name:"i-carbon-locked",class:"id-browser__lock"}),e("span",X,c(o(k).canonical||"localhost"),1)]),t[2]||(t[2]=e("div",{class:"id-browser__actions","aria-hidden":"true"},[e("span"),e("span"),e("span")],-1))]),e("div",Y,[e("div",Z,[!o(B)||o(z)(o(B))?(l(),u(i,{key:0,name:"i-carbon-earth",class:"id-browser__favicon-placeholder"})):(l(),d("img",{key:1,src:o(B),class:"id-browser__favicon",alt:"",width:"14",height:"14"},null,8,ee)),e("span",te,c(o(k).title||"Untitled"),1)]),t[3]||(t[3]=e("div",{class:"id-browser__tab"},[e("span",{class:"id-browser__title text-muted/40"},"New Tab")],-1))]),t[4]||(t[4]=e("div",{class:"id-browser__body","aria-hidden":"true"},null,-1))]),e("div",se,[(l(!0),d(x,null,y(o(D),(a,m)=>(l(),u($,{key:m,done:a.done,html:a.html},null,8,["done","html"]))),128))])]),_:1}),b(U,null,{header:n(()=>[e("div",oe,[e("div",le,[b(i,{name:"i-carbon-image",class:"text-lg"}),t[5]||(t[5]=e("span",{class:"font-medium"},"Icons",-1))]),o(h).length?(l(),u(g,{key:0,variant:"subtle",size:"xs",color:"neutral"},{default:n(()=>[_(c(o(h).length),1)]),_:1})):p("",!0)])]),default:n(()=>[o(h).length?(l(!0),d(x,{key:0},y(o(T),(a,m)=>(l(),d("div",{key:m,class:"mb-5 last:mb-0"},[e("div",re,[e("span",null,c(A[m]?.label||m),1),e("span",ae,c(a.length),1)]),e("p",ne,c(A[m]?.description||""),1),e("div",ie,[(l(!0),d(x,null,y(a,(r,j)=>(l(),d("div",{key:`${r.rel}:${r.href}:${r.sizes||""}:${r.type||""}:${j}`,class:S(["id-icon-card",{"id-icon-card--broken":o(z)(r.href)}])},[e("div",de,[o(z)(r.href)?(l(),u(i,{key:0,name:"i-carbon-warning-filled",class:"text-red-400 text-lg"})):(l(),d("img",{key:1,src:r.href,alt:r.rel,class:"id-icon-img",width:"32",height:"32",loading:"lazy"},null,8,ce))]),e("div",ue,[e("p",{class:S(["text-xs font-mono truncate",o(z)(r.href)?"text-red-400":"text-muted"])},c(r.href),3),e("div",me,[o(z)(r.href)?(l(),u(g,{key:0,color:"error",variant:"subtle",size:"xs"},{default:n(()=>[...t[6]||(t[6]=[_(" Broken ",-1)])]),_:1})):p("",!0),r.sizes?(l(),u(g,{key:1,variant:"subtle",size:"xs"},{default:n(()=>[_(c(r.sizes),1)]),_:2},1024)):p("",!0),r.type?(l(),u(g,{key:2,variant:"subtle",size:"xs",color:"neutral"},{default:n(()=>[_(c(r.type),1)]),_:2},1024)):p("",!0),r.media?(l(),u(g,{key:3,variant:"subtle",size:"xs",color:"info"},{default:n(()=>[_(c(r.media.includes("dark")?"Dark":r.media.includes("light")?"Light":r.media),1)]),_:2},1024)):p("",!0)])])],2))),128))])]))),128)):p("",!0),o(h).length?p("",!0):(l(),u(N,{key:1,icon:"i-carbon-image",title:"No favicons detected"},{description:n(()=>[...t[7]||(t[7]=[_(" Add a ",-1),e("code",{class:"bg-elevated px-1.5 py-0.5 rounded text-xs"},'<link rel="icon">',-1),_(" tag via ",-1),e("code",{class:"bg-elevated px-1.5 py-0.5 rounded text-xs"},"useHead()",-1),_(" to set your favicon. ",-1)])]),_:1})),e("div",{class:S(["space-y-1",o(h).length?"mt-4":"mt-2"])},[(l(!0),d(x,null,y(o(I),(a,m)=>(l(),u($,{key:m,done:a.done,html:a.html},null,8,["done","html"]))),128))],2)]),_:1}),b(U,null,{header:n(()=>[e("div",pe,[e("div",he,[b(i,{name:"i-carbon-color-palette",class:"text-lg"}),t[8]||(t[8]=e("span",{class:"font-medium"},"Theme Colors",-1))]),o(v).length?(l(),u(g,{key:0,variant:"subtle",size:"xs",color:"neutral"},{default:n(()=>[_(c(o(v).length),1)]),_:1})):p("",!0)])]),default:n(()=>[o(w)?(l(),d("div",_e,[t[11]||(t[11]=e("div",{class:"id-group-header"},[e("span",null,"Color Scheme")],-1)),e("div",fe,[t[10]||(t[10]=e("div",{class:"w-10 h-6 rounded border border-default",style:{background:"linear-gradient(90deg, #fff 50%, #1a1a1a 50%)"},"aria-hidden":"true"},null,-1)),e("div",null,[e("span",ve,c(o(w)),1),t[9]||(t[9]=e("p",{class:"text-xs text-muted"}," Supported color schemes for system preferences ",-1))])])])):p("",!0),o(v).length?(l(),d("div",ge,[t[12]||(t[12]=e("div",{class:"id-group-header"},[e("span",null,"Theme Colors")],-1)),e("div",be,[(l(!0),d(x,null,y(o(v),(a,m)=>(l(),d("div",{key:m,class:"id-color-card"},[e("div",{class:"id-color-card__swatch",role:"img","aria-label":`Color swatch: ${a.color}`,style:O({backgroundColor:a.color})},null,12,xe),e("div",ye,[e("span",ke,c(a.color),1),a.context!=="default"?(l(),u(g,{key:0,variant:"subtle",size:"xs"},{default:n(()=>[_(c(a.context),1)]),_:2},1024)):p("",!0)])]))),128))])])):p("",!0),!o(v).length&&!o(w)?(l(),u(N,{key:2,icon:"i-carbon-color-palette",title:"No theme colors set"},{description:n(()=>[...t[13]||(t[13]=[_(" Theme colors customize the browser chrome and mobile status bar. ",-1)])]),_:1})):p("",!0),e("div",{class:S(["space-y-1",o(v).length||o(w)?"mt-4":"mt-2"])},[(l(!0),d(x,null,y(o(V),(a,m)=>(l(),u($,{key:m,done:a.done,html:a.html},null,8,["done","html"]))),128))],2)]),_:1})])}}}),Ue=q(we,[["__scopeId","data-v-fc14a067"]]);export{Ue as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{f as c,o as t,c as n,a as l,_ as a,g as r}from"./DVtdvxJ7.js";const _={class:"h-full max-h-full overflow-hidden"},u=["src","title"],i=c({__name:"DevtoolsDocs",props:{url:{}},setup(e){return(s,o)=>(t(),n("div",_,[l("iframe",{src:e.url,title:`Documentation: ${e.url}`,class:"w-full h-full border-none",style:{"min-height":"calc(100vh - 100px)"}},null,8,u)]))}}),f=Object.assign(i,{__name:"DevtoolsDocs"}),m={};function d(e,s){const o=f;return t(),r(o,{url:"https://unhead.unjs.io"})}const p=a(m,[["render",d]]);export{p as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{f as F,o,c as n,b as m,w as v,a as t,F as j,r as D,n as k,i as e,h as R,t as s,l as _,g as T,k as V,d as W,p as x,s as y,j as z,z as G}from"./DVtdvxJ7.js";import{_ as O}from"./B4E3K9Fu.js";import{_ as P}from"./p7SZRf-U.js";import{_ as K}from"./zAl29A3_.js";import"./BWpSa8Y9.js";import"./DF0wUzLT.js";import"./DNL7PE-I.js";const M={class:"space-y-4"},X={class:"flex items-center gap-2"},E=["id","aria-selected","aria-controls","tabindex","aria-label","onClick"],q={class:"hidden sm:inline"},H={class:"p-6"},J={key:0,id:"social-panel-twitter",role:"tabpanel","aria-labelledby":"social-tab-twitter",class:"max-w-[500px] mx-auto"},Q={class:"rounded-2xl overflow-hidden border border-neutral-200 dark:border-neutral-700"},Y={key:0,class:"aspect-[1.91/1] bg-neutral-100 dark:bg-neutral-800"},Z=["src","alt"],ee={class:"p-3"},te={class:"text-xs text-neutral-500"},ae={class:"text-sm font-medium line-clamp-1"},oe={class:"text-xs text-neutral-500 line-clamp-2"},le={key:1,id:"social-panel-facebook",role:"tabpanel","aria-labelledby":"social-tab-facebook",class:"max-w-[500px] mx-auto"},se={class:"rounded-lg overflow-hidden border border-neutral-200 dark:border-neutral-700 bg-neutral-50 dark:bg-neutral-800"},ne={key:0,class:"aspect-[1.91/1] bg-neutral-100 dark:bg-neutral-700"},ie=["src","alt"],re={class:"p-3"},ce={class:"text-[11px] text-neutral-500 uppercase tracking-wider"},de={class:"text-base font-semibold line-clamp-1 mt-0.5"},ue={class:"text-sm text-neutral-500 line-clamp-1 mt-0.5"},me={key:2,id:"social-panel-linkedin",role:"tabpanel","aria-labelledby":"social-tab-linkedin",class:"max-w-[500px] mx-auto"},pe={class:"rounded-lg overflow-hidden border border-neutral-200 dark:border-neutral-700"},ge={key:0,class:"aspect-[1.91/1] bg-neutral-100 dark:bg-neutral-800"},xe=["src","alt"],_e={class:"p-3 bg-neutral-50 dark:bg-neutral-800"},fe={class:"text-sm font-semibold line-clamp-2"},be={class:"text-xs text-neutral-500 mt-1"},ve={key:3,id:"social-panel-discord",role:"tabpanel","aria-labelledby":"social-tab-discord",class:"max-w-[500px] mx-auto"},he={class:"rounded-lg overflow-hidden border-l-4 border-[#5865F2] bg-[#2f3136] text-white p-4"},ke={class:"text-xs text-neutral-400 mb-1"},we={class:"text-[#00aff4] text-sm font-semibold"},ye={class:"text-sm text-neutral-300 mt-1 line-clamp-2"},Ie={key:0,class:"mt-3 rounded-lg overflow-hidden max-w-[300px]"},je=["src","alt"],Te={key:4,id:"social-panel-slack",role:"tabpanel","aria-labelledby":"social-tab-slack",class:"max-w-[500px] mx-auto"},Be={class:"rounded-lg overflow-hidden border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 py-2"},Se={class:"text-xs text-neutral-500 font-bold mb-1"},De={class:"text-[#1264a3] dark:text-[#1d9bd1] text-sm font-bold"},ze={class:"text-sm text-neutral-600 dark:text-neutral-400 mt-0.5 line-clamp-2"},Ce={key:0,class:"mt-2 rounded overflow-hidden max-w-[360px]"},Ne=["src","alt"],Ue={class:"flex items-center gap-2"},Ae={class:"space-y-1"},Le={class:"flex items-center justify-between"},$e={class:"flex items-center gap-2"},Fe={key:0,class:"flex flex-col items-center justify-center gap-2 py-8 rounded-lg border border-red-200 dark:border-red-900/50 bg-red-50 dark:bg-red-950/20"},Re={class:"text-xs text-muted font-mono truncate max-w-full px-4"},Ve={class:"rounded-lg overflow-hidden border border-default"},We=["src"],Ge={class:"mt-2 text-xs text-muted font-mono truncate"},Je=F({__name:"social",setup(Oe){const r=x(()=>y.value.seo),p=x(()=>r.value.ogTitle||r.value.title||"Untitled"),w=x(()=>r.value.ogDescription||r.value.description||""),g=x(()=>{const l=r.value.ogImage;return!l||z(l)?null:l}),c=x(()=>!!r.value.ogImage&&z(r.value.ogImage)),h=x(()=>{try{return new URL(r.value.canonical||"").hostname}catch{return r.value.canonical||"example.com"}}),u=G("twitter"),f=[{label:"X / Twitter",value:"twitter",icon:"i-carbon-logo-x"},{label:"Facebook",value:"facebook",icon:"i-carbon-logo-facebook"},{label:"LinkedIn",value:"linkedin",icon:"i-carbon-logo-linkedin"},{label:"Discord",value:"discord",icon:"i-carbon-logo-discord"},{label:"Slack",value:"slack",icon:"i-carbon-logo-slack"}];function C(l){const a=f.findIndex(i=>i.value===u.value);l.key==="ArrowRight"||l.key==="ArrowDown"?(l.preventDefault(),u.value=f[(a+1)%f.length].value):(l.key==="ArrowLeft"||l.key==="ArrowUp")&&(l.preventDefault(),u.value=f[(a-1+f.length)%f.length].value)}const N=x(()=>y.value.tags.filter(l=>{if(l.tag!=="meta")return!1;const a=l.props?.property||l.props?.name||"";return a.startsWith("og:")||a.startsWith("twitter:")})),b=x(()=>{const l={};for(const a of y.value.tags){if(a.tag!=="meta")continue;const i=a.props?.property||"";i.startsWith("og:")&&(l[i]=a.props?.content||"")}return l}),B=x(()=>{const l={};for(const a of y.value.tags){if(a.tag!=="meta")continue;const i=a.props?.name||"";i.startsWith("twitter:")&&(l[i]=a.props?.content||"")}return l}),U=x(()=>[{done:!!(b.value["og:title"]||r.value.ogTitle),html:"Set <code>og:title</code> to control how your page appears when shared."},{done:!!(b.value["og:description"]||r.value.ogDescription),html:"Add <code>og:description</code> for a compelling preview snippet."},{done:!!(b.value["og:image"]||r.value.ogImage)&&!c.value,html:c.value?"Fix <code>og:image</code>: the current URL is broken or unreachable.":"Add an <code>og:image</code> (1200x630) for rich social previews."},{done:!!b.value["og:url"],html:"Set <code>og:url</code> to the canonical URL of this page."},{done:!!b.value["og:type"],html:"Set <code>og:type</code> (e.g. <code>website</code>, <code>article</code>) for content classification."},{done:!!b.value["og:site_name"],html:"Set <code>og:site_name</code> to identify your brand across platforms."},{done:!!B.value["twitter:card"],html:"Set <code>twitter:card</code> (usually <code>summary_large_image</code>) for Twitter/X previews."},{done:!!(B.value["twitter:image"]||b.value["og:image"]),html:"Provide a <code>twitter:image</code> or rely on <code>og:image</code> fallback."}]);return(l,a)=>{const i=R,I=O,A=P,L=K,$=V;return o(),n("div",M,[m(I,null,{header:v(()=>[t("div",X,[m(i,{name:"i-carbon-share",class:"text-lg"}),a[0]||(a[0]=t("span",{class:"font-medium"},"Social Preview",-1))])]),default:v(()=>[t("div",{role:"tablist","aria-label":"Social preview platforms",class:"flex gap-0.5 px-3 py-2 border-b border-default overflow-x-auto",onKeydown:C},[(o(),n(j,null,D(f,d=>t("button",{id:`social-tab-${d.value}`,key:d.value,role:"tab","aria-selected":e(u)===d.value,"aria-controls":`social-panel-${d.value}`,tabindex:e(u)===d.value?0:-1,"aria-label":d.label,class:k(["flex items-center gap-1.5 px-2.5 py-1 rounded-md text-xs font-medium whitespace-nowrap transition-colors duration-150",e(u)===d.value?"bg-elevated text-highlighted":"text-muted hover:bg-elevated hover:text-default"]),onClick:S=>u.value=d.value},[m(i,{name:d.icon,class:"text-sm"},null,8,["name"]),t("span",q,s(d.label),1)],10,E)),64))],32),t("div",H,[e(u)==="twitter"?(o(),n("div",J,[t("div",Q,[e(g)?(o(),n("div",Y,[t("img",{src:e(g),class:"w-full h-full object-cover",alt:e(p),loading:"lazy"},null,8,Z)])):(o(),n("div",{key:1,class:k(["flex flex-col items-center justify-center gap-1.5 aspect-[1.91/1] bg-elevated text-xs font-medium",e(c)?"text-red-400":"text-muted"])},[m(i,{name:e(c)?"i-carbon-warning-filled":"i-carbon-image",class:"text-2xl"},null,8,["name"]),t("span",null,s(e(c)?"Broken og:image":"No og:image"),1)],2)),t("div",ee,[t("p",te,s(e(h)),1),t("p",ae,s(e(p)),1),t("p",oe,s(e(w)),1)])])])):_("",!0),e(u)==="facebook"?(o(),n("div",le,[t("div",se,[e(g)?(o(),n("div",ne,[t("img",{src:e(g),class:"w-full h-full object-cover",alt:e(p),loading:"lazy"},null,8,ie)])):(o(),n("div",{key:1,class:k(["flex flex-col items-center justify-center gap-1.5 aspect-[1.91/1] bg-elevated text-xs font-medium",e(c)?"text-red-400":"text-muted"])},[m(i,{name:e(c)?"i-carbon-warning-filled":"i-carbon-image",class:"text-2xl"},null,8,["name"]),t("span",null,s(e(c)?"Broken og:image":"No og:image"),1)],2)),t("div",re,[t("p",ce,s(e(h)),1),t("p",de,s(e(p)),1),t("p",ue,s(e(w)),1)])])])):_("",!0),e(u)==="linkedin"?(o(),n("div",me,[t("div",pe,[e(g)?(o(),n("div",ge,[t("img",{src:e(g),class:"w-full h-full object-cover",alt:e(p),loading:"lazy"},null,8,xe)])):(o(),n("div",{key:1,class:k(["flex flex-col items-center justify-center gap-1.5 aspect-[1.91/1] bg-elevated text-xs font-medium",e(c)?"text-red-400":"text-muted"])},[m(i,{name:e(c)?"i-carbon-warning-filled":"i-carbon-image",class:"text-2xl"},null,8,["name"]),t("span",null,s(e(c)?"Broken og:image":"No og:image"),1)],2)),t("div",_e,[t("p",fe,s(e(p)),1),t("p",be,s(e(h)),1)])])])):_("",!0),e(u)==="discord"?(o(),n("div",ve,[t("div",he,[t("p",ke,s(e(h)),1),t("p",we,s(e(p)),1),t("p",ye,s(e(w)),1),e(g)?(o(),n("div",Ie,[t("img",{src:e(g),class:"w-full object-cover",alt:e(p),loading:"lazy"},null,8,je)])):(o(),n("div",{key:1,class:k(["flex flex-col items-center justify-center gap-1.5 mt-3 max-w-[300px] aspect-video rounded-lg bg-[#36393f] text-xs font-medium",e(c)?"text-red-400":"text-[#72767d]"])},[m(i,{name:e(c)?"i-carbon-warning-filled":"i-carbon-image",class:"text-xl"},null,8,["name"]),t("span",null,s(e(c)?"Broken image":"No image"),1)],2))])])):_("",!0),e(u)==="slack"?(o(),n("div",Te,[t("div",Be,[t("p",Se,s(e(h)),1),t("p",De,s(e(p)),1),t("p",ze,s(e(w)),1),e(g)?(o(),n("div",Ce,[t("img",{src:e(g),class:"w-full object-cover",alt:e(p),loading:"lazy"},null,8,Ne)])):_("",!0)])])):_("",!0)])]),_:1}),m(I,null,{header:v(()=>[t("div",Ue,[m(i,{name:"i-carbon-task",class:"text-lg"}),a[1]||(a[1]=t("span",{class:"font-medium"},"Social Checklist",-1))])]),default:v(()=>[t("div",Ae,[(o(!0),n(j,null,D(e(U),(d,S)=>(o(),T(A,{key:S,done:d.done,html:d.html},null,8,["done","html"]))),128))])]),_:1}),m(L,{tags:e(N),title:"Open Graph Tags",icon:"i-carbon-share"},null,8,["tags"]),e(r).ogImage?(o(),T(I,{key:0},{header:v(()=>[t("div",Le,[t("div",$e,[m(i,{name:"i-carbon-image",class:"text-lg"}),a[2]||(a[2]=t("span",{class:"font-medium"},"OG Image",-1))]),e(c)?(o(),T($,{key:0,color:"error",variant:"subtle",size:"xs"},{default:v(()=>[...a[3]||(a[3]=[W(" Broken ",-1)])]),_:1})):_("",!0)])]),default:v(()=>[e(c)?(o(),n("div",Fe,[m(i,{name:"i-carbon-warning-filled",class:"text-3xl text-red-400"}),a[4]||(a[4]=t("span",{class:"text-sm text-red-500 font-medium"},"Image failed to load",-1)),t("p",Re,s(e(r).ogImage),1)])):(o(),n(j,{key:1},[t("div",Ve,[t("img",{src:e(r).ogImage,class:"w-full max-h-64 object-contain bg-neutral-100 dark:bg-neutral-800",alt:"OG Image",loading:"lazy"},null,8,We)]),t("p",Ge,s(e(r).ogImage),1)],64))]),_:1})):_("",!0)])}}});export{Je as default};
|