nuxt-og-image 6.4.0 → 6.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/tw4.cjs +1 -1
- package/dist/chunks/tw4.mjs +1 -1
- package/dist/chunks/uno.cjs +1 -1
- package/dist/chunks/uno.mjs +1 -1
- package/dist/devtools/200.html +1 -1
- package/dist/devtools/404.html +1 -1
- package/dist/devtools/_nuxt/{Bqc0aGFQ.js → B6Dg3dZ6.js} +1 -1
- package/dist/devtools/_nuxt/{Dc6eeJGV.js → BMVWkjCo.js} +1 -1
- package/dist/devtools/_nuxt/{Dm872wiT.js → BQDcSiMf.js} +1 -1
- package/dist/devtools/_nuxt/{BzIf6hz_.js → BsivBvAU.js} +1 -1
- package/dist/devtools/_nuxt/{DbpvCpU1.js → CHeKziWa.js} +1 -1
- package/dist/devtools/_nuxt/DevtoolsSection.C-PGRg5f.css +1 -0
- package/dist/devtools/_nuxt/DevtoolsSnippet.BipAyEUC.css +1 -0
- package/dist/devtools/_nuxt/builds/latest.json +1 -1
- package/dist/devtools/_nuxt/builds/meta/150c0674-b387-4525-9043-e05dd343db8e.json +1 -0
- package/dist/devtools/_nuxt/{entry.BbbigIAW.css → entry.BjD2aghs.css} +1 -1
- package/dist/devtools/_nuxt/{pages.Bgwt6-05.css → pages.DO0dnDUs.css} +1 -1
- package/dist/devtools/_nuxt/renderer-select.J57nTUNW.css +1 -0
- package/dist/devtools/_nuxt/{DjV7IYFt.js → w_tq7NMl.js} +1 -1
- package/dist/devtools/_nuxt/{Dxins0lX.js → yBiBpwD7.js} +6 -6
- package/dist/devtools/debug/index.html +1 -1
- package/dist/devtools/docs/index.html +1 -1
- package/dist/devtools/index.html +1 -1
- package/dist/devtools/templates/index.html +1 -1
- package/dist/module.cjs +1 -1
- package/dist/module.json +1 -1
- package/dist/module.mjs +1 -1
- package/dist/runtime/app/client-utils.d.ts +18 -0
- package/dist/runtime/app/client-utils.js +86 -0
- package/dist/runtime/app/composables/_defineOgImageRaw.js +4 -1
- package/dist/runtime/app/utils.js +23 -12
- package/dist/runtime/server/og-image/templates/html.js +2 -3
- package/dist/runtime/server/util/cache.js +1 -1
- package/dist/shared/{nuxt-og-image.D6dSBPnf.mjs → nuxt-og-image.BK0-aZom.mjs} +29 -21
- package/dist/shared/{nuxt-og-image.BRq8WvnV.cjs → nuxt-og-image.C2oXAHiT.cjs} +30 -22
- package/package.json +7 -7
- package/dist/devtools/_nuxt/DevtoolsSection.BtROL5Ex.css +0 -1
- package/dist/devtools/_nuxt/DevtoolsSnippet.BeWnBUTX.css +0 -1
- package/dist/devtools/_nuxt/builds/meta/966cadeb-de3b-4c08-b33e-ccf471f25ca9.json +0 -1
- package/dist/devtools/_nuxt/renderer-select.BMMQvtBd.css +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/yBiBpwD7.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BjD2aghs.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/renderer-select.J57nTUNW.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/DevtoolsSection.C-PGRg5f.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/yBiBpwD7.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/CP0tQR2M.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DmsY5seq.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Cy0omYQh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/BWm573-p.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DDRo8-tD.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/B6Dg3dZ6.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/BQDcSiMf.js"><script type="module" src="/__nuxt-og-image/_nuxt/yBiBpwD7.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"150c0674-b387-4525-9043-e05dd343db8e",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1776225190433,false]</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/yBiBpwD7.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BjD2aghs.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/renderer-select.J57nTUNW.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/DevtoolsSection.C-PGRg5f.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/yBiBpwD7.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/CP0tQR2M.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DmsY5seq.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Cy0omYQh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/BWm573-p.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DDRo8-tD.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/B6Dg3dZ6.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/BQDcSiMf.js"><script type="module" src="/__nuxt-og-image/_nuxt/yBiBpwD7.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"150c0674-b387-4525-9043-e05dd343db8e",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1776225190434,false]</script></body></html>
|
package/dist/devtools/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/yBiBpwD7.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BjD2aghs.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/renderer-select.J57nTUNW.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/DevtoolsSection.C-PGRg5f.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/yBiBpwD7.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/CP0tQR2M.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DmsY5seq.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Cy0omYQh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/BWm573-p.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DDRo8-tD.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/B6Dg3dZ6.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/BQDcSiMf.js"><script type="module" src="/__nuxt-og-image/_nuxt/yBiBpwD7.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT_SITE_CONFIG__={_priority:{env:-15,url:-3},env:"production",url:"https:\u002F\u002Fnuxtseo.com"}</script><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"150c0674-b387-4525-9043-e05dd343db8e",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1776225190434,false]</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/yBiBpwD7.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BjD2aghs.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/renderer-select.J57nTUNW.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/DevtoolsSection.C-PGRg5f.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/yBiBpwD7.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/CP0tQR2M.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DmsY5seq.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Cy0omYQh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/BWm573-p.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DDRo8-tD.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/B6Dg3dZ6.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/BQDcSiMf.js"><script type="module" src="/__nuxt-og-image/_nuxt/yBiBpwD7.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"150c0674-b387-4525-9043-e05dd343db8e",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1776225190434,false]</script></body></html>
|
package/dist/module.cjs
CHANGED
|
@@ -9,7 +9,7 @@ require('nuxt-site-config/kit');
|
|
|
9
9
|
require('ohash');
|
|
10
10
|
require('pathe');
|
|
11
11
|
require('pkg-types');
|
|
12
|
-
const module$1 = require('./shared/nuxt-og-image.
|
|
12
|
+
const module$1 = require('./shared/nuxt-og-image.C2oXAHiT.cjs');
|
|
13
13
|
require('nuxtseo-shared/kit');
|
|
14
14
|
require('../dist/runtime/logger.js');
|
|
15
15
|
require('node:crypto');
|
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -7,7 +7,7 @@ import 'nuxt-site-config/kit';
|
|
|
7
7
|
import 'ohash';
|
|
8
8
|
import 'pathe';
|
|
9
9
|
import 'pkg-types';
|
|
10
|
-
export { m as default } from './shared/nuxt-og-image.
|
|
10
|
+
export { m as default } from './shared/nuxt-og-image.BK0-aZom.mjs';
|
|
11
11
|
import 'nuxtseo-shared/kit';
|
|
12
12
|
import '../dist/runtime/logger.js';
|
|
13
13
|
import 'node:crypto';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { RouteLocationNormalizedLoaded } from 'vue-router';
|
|
2
|
+
import type { DefineOgImageInput } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Client-side processing for SPA navigations: registers a `useHead` entry pointing
|
|
5
|
+
* at the correct og:image URL for the current route so iOS share sheet, devtools
|
|
6
|
+
* and any other DOM reader see the current page's image instead of the initial
|
|
7
|
+
* page's (#567).
|
|
8
|
+
*
|
|
9
|
+
* Strategy by deployment:
|
|
10
|
+
* - SSR (any flavour): point at the `/_og/r/<path>` resolver. Re-fetches the
|
|
11
|
+
* target page server-side and redirects to whatever og:image SSR emits, so the
|
|
12
|
+
* client URL always matches the server's (including useSeoMeta-injected titles
|
|
13
|
+
* and strict HMAC-signed URLs, without exposing the secret).
|
|
14
|
+
* - Pure SSG (no runtime server): rebuild the URL directly from defaults. If the
|
|
15
|
+
* page relies on useSeoMeta auto-injection the rebuilt URL won't include those
|
|
16
|
+
* values; the resolver can't help without a server.
|
|
17
|
+
*/
|
|
18
|
+
export declare function clientProcessOgImageOptions(input: DefineOgImageInput | DefineOgImageInput[], route: RouteLocationNormalizedLoaded, basePath: string): string[];
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { componentNames } from "#build/nuxt-og-image/components.mjs";
|
|
2
|
+
import { defu } from "defu";
|
|
3
|
+
import { useHead, useRuntimeConfig } from "nuxt/app";
|
|
4
|
+
import { joinURL, withQuery } from "ufo";
|
|
5
|
+
import { toValue } from "vue";
|
|
6
|
+
import { buildOgImageUrl, generateMeta, separateProps } from "../shared.js";
|
|
7
|
+
function resolveReactiveOptions(input) {
|
|
8
|
+
const options = toValue(input);
|
|
9
|
+
if (options === false)
|
|
10
|
+
return false;
|
|
11
|
+
const opts = options;
|
|
12
|
+
if (opts.width)
|
|
13
|
+
opts.width = toValue(opts.width);
|
|
14
|
+
if (opts.height)
|
|
15
|
+
opts.height = toValue(opts.height);
|
|
16
|
+
if (opts.alt)
|
|
17
|
+
opts.alt = toValue(opts.alt);
|
|
18
|
+
if (opts.url)
|
|
19
|
+
opts.url = toValue(opts.url);
|
|
20
|
+
if (opts.props) {
|
|
21
|
+
opts.props = { ...opts.props };
|
|
22
|
+
for (const key in opts.props) {
|
|
23
|
+
opts.props[key] = toValue(opts.props[key]);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return opts;
|
|
27
|
+
}
|
|
28
|
+
function buildResolverUrl(baseURL, basePath, ogKey, query) {
|
|
29
|
+
const resolverUrl = `${joinURL("/", baseURL, "_og/r", basePath)}.png`;
|
|
30
|
+
const queryObj = {};
|
|
31
|
+
if (query) {
|
|
32
|
+
for (const [k, v] of Object.entries(query)) {
|
|
33
|
+
if (!k.startsWith("_og_"))
|
|
34
|
+
queryObj[k] = v;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (ogKey === "twitter")
|
|
38
|
+
queryObj._og_key = "twitter";
|
|
39
|
+
return Object.keys(queryObj).length ? withQuery(resolverUrl, queryObj) : resolverUrl;
|
|
40
|
+
}
|
|
41
|
+
export function clientProcessOgImageOptions(input, route, basePath) {
|
|
42
|
+
const inputs = Array.isArray(input) ? input : [input];
|
|
43
|
+
const rc = useRuntimeConfig();
|
|
44
|
+
const baseURL = rc.app.baseURL;
|
|
45
|
+
const publicCfg = rc.public?.["nuxt-og-image"] || {};
|
|
46
|
+
const defaults = publicCfg.defaults || {};
|
|
47
|
+
const paths = [];
|
|
48
|
+
for (const rawInput of inputs) {
|
|
49
|
+
const resolved = resolveReactiveOptions(rawInput);
|
|
50
|
+
if (resolved === false)
|
|
51
|
+
continue;
|
|
52
|
+
const validOptions = resolved;
|
|
53
|
+
for (const key in defaults) {
|
|
54
|
+
if (validOptions[key] === void 0)
|
|
55
|
+
validOptions[key] = defaults[key];
|
|
56
|
+
}
|
|
57
|
+
if (route.query)
|
|
58
|
+
validOptions._query = route.query;
|
|
59
|
+
if (validOptions.url) {
|
|
60
|
+
const url = validOptions.url;
|
|
61
|
+
useHead({ meta: generateMeta(url, validOptions) }, { tagPriority: "high" });
|
|
62
|
+
paths.push(url);
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (publicCfg.hasServerRuntime) {
|
|
66
|
+
const ogKey = validOptions.key || "og";
|
|
67
|
+
const finalUrl2 = buildResolverUrl(baseURL, basePath, ogKey, route.query);
|
|
68
|
+
useHead({ meta: generateMeta(finalUrl2, validOptions) }, { tagPriority: 35 });
|
|
69
|
+
paths.push(finalUrl2);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
const opts = separateProps(defu(validOptions, defaults));
|
|
73
|
+
const extension = opts.extension || defaults?.extension || "png";
|
|
74
|
+
const urlOpts = { ...opts, _path: basePath };
|
|
75
|
+
const componentName = opts.component || componentNames?.[0]?.pascalName;
|
|
76
|
+
const component = componentNames?.find((c) => c.pascalName === componentName || c.kebabName === componentName);
|
|
77
|
+
if (component?.hash)
|
|
78
|
+
urlOpts._componentHash = component.hash;
|
|
79
|
+
const result = buildOgImageUrl(urlOpts, extension, true, defaults, void 0);
|
|
80
|
+
const resolvedUrl = joinURL("/", baseURL, result.url);
|
|
81
|
+
const finalUrl = opts._query && Object.keys(opts._query).length ? withQuery(resolvedUrl, { _query: opts._query }) : resolvedUrl;
|
|
82
|
+
useHead({ meta: generateMeta(finalUrl, opts) }, { processTemplateParams: true, tagPriority: 35 });
|
|
83
|
+
paths.push(finalUrl);
|
|
84
|
+
}
|
|
85
|
+
return paths;
|
|
86
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createError, injectHead, useError, useNuxtApp, useRequestEvent, useRoute, useState } from "nuxt/app";
|
|
2
2
|
import { toValue } from "vue";
|
|
3
|
+
import { clientProcessOgImageOptions } from "../client-utils.js";
|
|
3
4
|
import { createOgImageMeta, getOgImagePath, setHeadOgImagePrebuilt, useOgImageRuntimeConfig } from "../utils.js";
|
|
4
5
|
export function defineOgImageRaw(_options = {}) {
|
|
5
6
|
const nuxtApp = useNuxtApp();
|
|
@@ -15,7 +16,9 @@ export function defineOgImageRaw(_options = {}) {
|
|
|
15
16
|
throw createError({ message: "You are using a defineOgImage() function in a client-only context. You must call this function within your root component setup, see https://github.com/nuxt-modules/og-image/pull/293." });
|
|
16
17
|
}
|
|
17
18
|
}
|
|
18
|
-
|
|
19
|
+
if (nuxtApp.isHydrating)
|
|
20
|
+
return [];
|
|
21
|
+
return clientProcessOgImageOptions(_options, route, basePath);
|
|
19
22
|
}
|
|
20
23
|
const paths = [];
|
|
21
24
|
if (Array.isArray(_options)) {
|
|
@@ -1,12 +1,25 @@
|
|
|
1
1
|
import { componentNames } from "#build/nuxt-og-image/components.mjs";
|
|
2
|
-
import { resolveUnrefHeadInput } from "@unhead/vue";
|
|
3
2
|
import { defu } from "defu";
|
|
4
3
|
import { stringify } from "devalue";
|
|
5
4
|
import { useHead, useRuntimeConfig } from "nuxt/app";
|
|
6
5
|
import { joinURL, withQuery } from "ufo";
|
|
7
|
-
import { toValue } from "vue";
|
|
8
|
-
import { logger } from "../logger.js";
|
|
6
|
+
import { isRef, toValue } from "vue";
|
|
9
7
|
import { buildOgImageUrl, generateMeta, separateProps } from "../shared.js";
|
|
8
|
+
function resolveUnrefHeadInput(input) {
|
|
9
|
+
if (input == null)
|
|
10
|
+
return input;
|
|
11
|
+
if (isRef(input) || typeof input === "function")
|
|
12
|
+
return resolveUnrefHeadInput(toValue(input));
|
|
13
|
+
if (Array.isArray(input))
|
|
14
|
+
return input.map(resolveUnrefHeadInput);
|
|
15
|
+
if (typeof input === "object") {
|
|
16
|
+
const result = {};
|
|
17
|
+
for (const k in input)
|
|
18
|
+
result[k] = resolveUnrefHeadInput(input[k]);
|
|
19
|
+
return result;
|
|
20
|
+
}
|
|
21
|
+
return input;
|
|
22
|
+
}
|
|
10
23
|
const RE_RENDERER_SUFFIX = /(Satori|Browser|Takumi)$/;
|
|
11
24
|
function extractHeadSeoProps(head) {
|
|
12
25
|
const result = {};
|
|
@@ -29,7 +42,7 @@ function extractHeadSeoProps(head) {
|
|
|
29
42
|
}
|
|
30
43
|
} catch (e) {
|
|
31
44
|
if (import.meta.dev)
|
|
32
|
-
|
|
45
|
+
console.warn("[nuxt-og-image] Failed to extract SEO props from head entries", e);
|
|
33
46
|
}
|
|
34
47
|
return result;
|
|
35
48
|
}
|
|
@@ -134,7 +147,7 @@ export function createOgImageMeta(src, input, ssrContext, pagePath, head) {
|
|
|
134
147
|
payload.component = resolveComponentName(payload.component);
|
|
135
148
|
} else if (payload.component) {
|
|
136
149
|
if (import.meta.dev)
|
|
137
|
-
|
|
150
|
+
console.warn(`[nuxt-og-image] defineOgImage() received a non-string component value (${typeof payload.component}). Pass the component name as a plain string.`);
|
|
138
151
|
delete payload.component;
|
|
139
152
|
}
|
|
140
153
|
payload.key = key;
|
|
@@ -218,11 +231,9 @@ export function getOgImagePath(_pagePath, _options) {
|
|
|
218
231
|
}
|
|
219
232
|
export function useOgImageRuntimeConfig() {
|
|
220
233
|
const c = useRuntimeConfig();
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
}
|
|
227
|
-
};
|
|
234
|
+
const serverCfg = c["nuxt-og-image"] || {};
|
|
235
|
+
const publicCfg = c.public?.["nuxt-og-image"] || {};
|
|
236
|
+
const merged = { defaults: {}, ...publicCfg, ...serverCfg };
|
|
237
|
+
merged.app = { baseURL: c.app.baseURL };
|
|
238
|
+
return merged;
|
|
228
239
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import resolvedFonts from "#og-image/fonts";
|
|
2
|
-
import {
|
|
3
|
-
import { renderSSRHead } from "@unhead/vue/server";
|
|
2
|
+
import { createHead, renderSSRHead } from "@unhead/vue/server";
|
|
4
3
|
import { createError } from "h3";
|
|
5
4
|
import { fetchIsland } from "../../util/kit.js";
|
|
6
5
|
import { applyEmojis } from "../core/transforms/emojis/index.js";
|
|
@@ -15,7 +14,7 @@ export async function html(ctx) {
|
|
|
15
14
|
});
|
|
16
15
|
}
|
|
17
16
|
const island = await fetchIsland(ctx.e, ctx.options.component, typeof ctx.options.props !== "undefined" ? ctx.options.props : ctx.options);
|
|
18
|
-
const head =
|
|
17
|
+
const head = createHead();
|
|
19
18
|
head.push(island.head);
|
|
20
19
|
let defaultFontFamily = "sans-serif";
|
|
21
20
|
const firstFont = fonts[0];
|
|
@@ -80,7 +80,7 @@ export async function useOgImageBufferCache(ctx, options) {
|
|
|
80
80
|
"Vary": "accept-encoding, host",
|
|
81
81
|
"etag": `W/"${digest(value)}"`,
|
|
82
82
|
"last-modified": (/* @__PURE__ */ new Date()).toUTCString(),
|
|
83
|
-
"cache-control": `public, max-age=${maxAge}, s-maxage=${maxAge},
|
|
83
|
+
"cache-control": `public, max-age=${maxAge}, s-maxage=${maxAge}, immutable`
|
|
84
84
|
};
|
|
85
85
|
setHeaders(ctx.e, headers);
|
|
86
86
|
await cache.setItem(key, {
|
|
@@ -4742,13 +4742,21 @@ ${familyInfo}`);
|
|
|
4742
4742
|
});
|
|
4743
4743
|
if (!nuxt.options.dev) {
|
|
4744
4744
|
nuxt.options.routeRules = nuxt.options.routeRules || {};
|
|
4745
|
-
|
|
4745
|
+
const ttl = config.cacheMaxAgeSeconds ?? config.defaults?.cacheMaxAgeSeconds ?? 60 * 60 * 24 * 3;
|
|
4746
|
+
if (ttl > 0) {
|
|
4747
|
+
const dynamicCacheControl = `public, max-age=${ttl}, s-maxage=${ttl}, immutable`;
|
|
4746
4748
|
const ogDynamicRule = nuxt.options.routeRules["/_og/d/**"];
|
|
4747
4749
|
if (!ogDynamicRule?.swr && !ogDynamicRule?.isr && !ogDynamicRule?.cache && !ogDynamicRule?.headers) {
|
|
4748
|
-
const ttl = config.cacheMaxAgeSeconds ?? config.defaults?.cacheMaxAgeSeconds ?? 60 * 60 * 24 * 3;
|
|
4749
4750
|
nuxt.options.routeRules["/_og/d/**"] = defu(
|
|
4750
4751
|
nuxt.options.routeRules["/_og/d/**"] || {},
|
|
4751
|
-
{
|
|
4752
|
+
{ headers: { "cache-control": dynamicCacheControl } }
|
|
4753
|
+
);
|
|
4754
|
+
}
|
|
4755
|
+
const ogResolveRule = nuxt.options.routeRules["/_og/r/**"];
|
|
4756
|
+
if (!ogResolveRule?.swr && !ogResolveRule?.isr && !ogResolveRule?.cache && !ogResolveRule?.headers) {
|
|
4757
|
+
nuxt.options.routeRules["/_og/r/**"] = defu(
|
|
4758
|
+
nuxt.options.routeRules["/_og/r/**"] || {},
|
|
4759
|
+
{ headers: { "cache-control": dynamicCacheControl } }
|
|
4752
4760
|
);
|
|
4753
4761
|
}
|
|
4754
4762
|
}
|
|
@@ -4759,20 +4767,8 @@ ${familyInfo}`);
|
|
|
4759
4767
|
{ headers: { "cache-control": "public, max-age=31536000, immutable" } }
|
|
4760
4768
|
);
|
|
4761
4769
|
}
|
|
4762
|
-
if (config.runtimeCacheStorage !== false && !nuxt.options.test) {
|
|
4763
|
-
const ogResolveRule = nuxt.options.routeRules["/_og/r/**"];
|
|
4764
|
-
if (!ogResolveRule?.swr && !ogResolveRule?.isr && !ogResolveRule?.cache && !ogResolveRule?.headers) {
|
|
4765
|
-
const ttl = config.cacheMaxAgeSeconds ?? config.defaults?.cacheMaxAgeSeconds ?? 60 * 60 * 24 * 3;
|
|
4766
|
-
nuxt.options.routeRules["/_og/r/**"] = defu(
|
|
4767
|
-
nuxt.options.routeRules["/_og/r/**"] || {},
|
|
4768
|
-
{ swr: ttl }
|
|
4769
|
-
);
|
|
4770
|
-
}
|
|
4771
|
-
}
|
|
4772
|
-
}
|
|
4773
|
-
if (!nuxt.options.dev) {
|
|
4774
|
-
nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"] = [];
|
|
4775
4770
|
}
|
|
4771
|
+
nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"] = [];
|
|
4776
4772
|
[
|
|
4777
4773
|
"defineOgImage",
|
|
4778
4774
|
"defineOgImageComponent",
|
|
@@ -4789,11 +4785,6 @@ ${familyInfo}`);
|
|
|
4789
4785
|
name,
|
|
4790
4786
|
from: resolve(`./runtime/app/composables/${name}`)
|
|
4791
4787
|
});
|
|
4792
|
-
if (!nuxt.options.dev) {
|
|
4793
|
-
nuxt.options.optimization.treeShake.composables.client = nuxt.options.optimization.treeShake.composables.client || {};
|
|
4794
|
-
nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"] = nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"] || [];
|
|
4795
|
-
nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"].push(name);
|
|
4796
|
-
}
|
|
4797
4788
|
});
|
|
4798
4789
|
addImports({
|
|
4799
4790
|
name: "getOgImagePath",
|
|
@@ -5244,6 +5235,23 @@ export const rootDir = ${JSON.stringify(nuxt.options.rootDir)}`;
|
|
|
5244
5235
|
}
|
|
5245
5236
|
nuxt.hooks.callHook("nuxt-og-image:runtime-config", runtimeConfig);
|
|
5246
5237
|
nuxt.options.runtimeConfig["nuxt-og-image"] = runtimeConfig;
|
|
5238
|
+
nuxt.options.runtimeConfig.public = {
|
|
5239
|
+
...nuxt.options.runtimeConfig.public,
|
|
5240
|
+
"nuxt-og-image": {
|
|
5241
|
+
defaults: runtimeConfig.defaults,
|
|
5242
|
+
hasServerRuntime: !nuxt.options._generate && !nuxt.options.nitro?.static
|
|
5243
|
+
}
|
|
5244
|
+
};
|
|
5245
|
+
});
|
|
5246
|
+
nuxt.hook("nitro:init", (nitro) => {
|
|
5247
|
+
const pub = nuxt.options.runtimeConfig.public["nuxt-og-image"] || {};
|
|
5248
|
+
nuxt.options.runtimeConfig.public = {
|
|
5249
|
+
...nuxt.options.runtimeConfig.public,
|
|
5250
|
+
"nuxt-og-image": {
|
|
5251
|
+
...pub,
|
|
5252
|
+
hasServerRuntime: !nitro.options.static && !nuxt.options._generate
|
|
5253
|
+
}
|
|
5254
|
+
};
|
|
5247
5255
|
});
|
|
5248
5256
|
const getDetectedRenderers = () => ogImageComponentCtx.detectedRenderers;
|
|
5249
5257
|
if (nuxt.options.dev) {
|
|
@@ -4316,7 +4316,7 @@ const module$1 = kit.defineNuxtModule({
|
|
|
4316
4316
|
await onUpgrade(nuxt, options, previousVersion);
|
|
4317
4317
|
},
|
|
4318
4318
|
async setup(config, nuxt) {
|
|
4319
|
-
const _resolver = kit.createResolver((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('shared/nuxt-og-image.
|
|
4319
|
+
const _resolver = kit.createResolver((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('shared/nuxt-og-image.C2oXAHiT.cjs', document.baseURI).href)));
|
|
4320
4320
|
const fixSharedPath = (p) => {
|
|
4321
4321
|
if (p.includes("/shared/runtime/"))
|
|
4322
4322
|
return p.replace("/shared/runtime/", "/runtime/");
|
|
@@ -4762,13 +4762,21 @@ ${familyInfo}`);
|
|
|
4762
4762
|
});
|
|
4763
4763
|
if (!nuxt.options.dev) {
|
|
4764
4764
|
nuxt.options.routeRules = nuxt.options.routeRules || {};
|
|
4765
|
-
|
|
4765
|
+
const ttl = config.cacheMaxAgeSeconds ?? config.defaults?.cacheMaxAgeSeconds ?? 60 * 60 * 24 * 3;
|
|
4766
|
+
if (ttl > 0) {
|
|
4767
|
+
const dynamicCacheControl = `public, max-age=${ttl}, s-maxage=${ttl}, immutable`;
|
|
4766
4768
|
const ogDynamicRule = nuxt.options.routeRules["/_og/d/**"];
|
|
4767
4769
|
if (!ogDynamicRule?.swr && !ogDynamicRule?.isr && !ogDynamicRule?.cache && !ogDynamicRule?.headers) {
|
|
4768
|
-
const ttl = config.cacheMaxAgeSeconds ?? config.defaults?.cacheMaxAgeSeconds ?? 60 * 60 * 24 * 3;
|
|
4769
4770
|
nuxt.options.routeRules["/_og/d/**"] = defu.defu(
|
|
4770
4771
|
nuxt.options.routeRules["/_og/d/**"] || {},
|
|
4771
|
-
{
|
|
4772
|
+
{ headers: { "cache-control": dynamicCacheControl } }
|
|
4773
|
+
);
|
|
4774
|
+
}
|
|
4775
|
+
const ogResolveRule = nuxt.options.routeRules["/_og/r/**"];
|
|
4776
|
+
if (!ogResolveRule?.swr && !ogResolveRule?.isr && !ogResolveRule?.cache && !ogResolveRule?.headers) {
|
|
4777
|
+
nuxt.options.routeRules["/_og/r/**"] = defu.defu(
|
|
4778
|
+
nuxt.options.routeRules["/_og/r/**"] || {},
|
|
4779
|
+
{ headers: { "cache-control": dynamicCacheControl } }
|
|
4772
4780
|
);
|
|
4773
4781
|
}
|
|
4774
4782
|
}
|
|
@@ -4779,20 +4787,8 @@ ${familyInfo}`);
|
|
|
4779
4787
|
{ headers: { "cache-control": "public, max-age=31536000, immutable" } }
|
|
4780
4788
|
);
|
|
4781
4789
|
}
|
|
4782
|
-
if (config.runtimeCacheStorage !== false && !nuxt.options.test) {
|
|
4783
|
-
const ogResolveRule = nuxt.options.routeRules["/_og/r/**"];
|
|
4784
|
-
if (!ogResolveRule?.swr && !ogResolveRule?.isr && !ogResolveRule?.cache && !ogResolveRule?.headers) {
|
|
4785
|
-
const ttl = config.cacheMaxAgeSeconds ?? config.defaults?.cacheMaxAgeSeconds ?? 60 * 60 * 24 * 3;
|
|
4786
|
-
nuxt.options.routeRules["/_og/r/**"] = defu.defu(
|
|
4787
|
-
nuxt.options.routeRules["/_og/r/**"] || {},
|
|
4788
|
-
{ swr: ttl }
|
|
4789
|
-
);
|
|
4790
|
-
}
|
|
4791
|
-
}
|
|
4792
|
-
}
|
|
4793
|
-
if (!nuxt.options.dev) {
|
|
4794
|
-
nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"] = [];
|
|
4795
4790
|
}
|
|
4791
|
+
nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"] = [];
|
|
4796
4792
|
[
|
|
4797
4793
|
"defineOgImage",
|
|
4798
4794
|
"defineOgImageComponent",
|
|
@@ -4809,11 +4805,6 @@ ${familyInfo}`);
|
|
|
4809
4805
|
name,
|
|
4810
4806
|
from: resolve(`./runtime/app/composables/${name}`)
|
|
4811
4807
|
});
|
|
4812
|
-
if (!nuxt.options.dev) {
|
|
4813
|
-
nuxt.options.optimization.treeShake.composables.client = nuxt.options.optimization.treeShake.composables.client || {};
|
|
4814
|
-
nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"] = nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"] || [];
|
|
4815
|
-
nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"].push(name);
|
|
4816
|
-
}
|
|
4817
4808
|
});
|
|
4818
4809
|
kit.addImports({
|
|
4819
4810
|
name: "getOgImagePath",
|
|
@@ -5264,6 +5255,23 @@ export const rootDir = ${JSON.stringify(nuxt.options.rootDir)}`;
|
|
|
5264
5255
|
}
|
|
5265
5256
|
nuxt.hooks.callHook("nuxt-og-image:runtime-config", runtimeConfig);
|
|
5266
5257
|
nuxt.options.runtimeConfig["nuxt-og-image"] = runtimeConfig;
|
|
5258
|
+
nuxt.options.runtimeConfig.public = {
|
|
5259
|
+
...nuxt.options.runtimeConfig.public,
|
|
5260
|
+
"nuxt-og-image": {
|
|
5261
|
+
defaults: runtimeConfig.defaults,
|
|
5262
|
+
hasServerRuntime: !nuxt.options._generate && !nuxt.options.nitro?.static
|
|
5263
|
+
}
|
|
5264
|
+
};
|
|
5265
|
+
});
|
|
5266
|
+
nuxt.hook("nitro:init", (nitro) => {
|
|
5267
|
+
const pub = nuxt.options.runtimeConfig.public["nuxt-og-image"] || {};
|
|
5268
|
+
nuxt.options.runtimeConfig.public = {
|
|
5269
|
+
...nuxt.options.runtimeConfig.public,
|
|
5270
|
+
"nuxt-og-image": {
|
|
5271
|
+
...pub,
|
|
5272
|
+
hasServerRuntime: !nitro.options.static && !nuxt.options._generate
|
|
5273
|
+
}
|
|
5274
|
+
};
|
|
5267
5275
|
});
|
|
5268
5276
|
const getDetectedRenderers = () => ogImageComponentCtx.detectedRenderers;
|
|
5269
5277
|
if (nuxt.options.dev) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nuxt-og-image",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "6.4.
|
|
4
|
+
"version": "6.4.2",
|
|
5
5
|
"description": "Enlightened OG Image generation for Nuxt.",
|
|
6
6
|
"author": {
|
|
7
7
|
"website": "https://harlanzw.com",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"@resvg/resvg-wasm": "^2.6.0",
|
|
53
53
|
"@takumi-rs/core": "^1.0.0-beta.3",
|
|
54
54
|
"@takumi-rs/wasm": "^1.0.0-beta.3",
|
|
55
|
-
"@unhead/vue": "^2.0.5",
|
|
55
|
+
"@unhead/vue": "^2.0.5 || ^3.0.0",
|
|
56
56
|
"fontless": "^0.2.0",
|
|
57
57
|
"playwright-core": "^1.50.0",
|
|
58
58
|
"satori": ">=0.19.2",
|
|
@@ -134,7 +134,7 @@
|
|
|
134
134
|
"@iconify-json/ri": "^1.2.10",
|
|
135
135
|
"@iconify-json/tabler": "^1.2.33",
|
|
136
136
|
"@img/sharp-linux-x64": "^0.34.5",
|
|
137
|
-
"@nuxt/content": "^3.
|
|
137
|
+
"@nuxt/content": "^3.13.0",
|
|
138
138
|
"@nuxt/devtools": "4.0.0-alpha.4",
|
|
139
139
|
"@nuxt/devtools-kit": "4.0.0-alpha.4",
|
|
140
140
|
"@nuxt/fonts": "^0.14.0",
|
|
@@ -152,8 +152,8 @@
|
|
|
152
152
|
"@shikijs/langs": "^4.0.2",
|
|
153
153
|
"@shikijs/themes": "^4.0.2",
|
|
154
154
|
"@tailwindcss/vite": "^4.2.2",
|
|
155
|
-
"@takumi-rs/core": "^1.0.
|
|
156
|
-
"@takumi-rs/wasm": "^1.0.
|
|
155
|
+
"@takumi-rs/core": "^1.0.9",
|
|
156
|
+
"@takumi-rs/wasm": "^1.0.9",
|
|
157
157
|
"@unocss/nuxt": "^66.6.8",
|
|
158
158
|
"@vitejs/plugin-vue": "^6.0.6",
|
|
159
159
|
"@vueuse/nuxt": "^14.2.1",
|
|
@@ -164,7 +164,7 @@
|
|
|
164
164
|
"fontless": "^0.2.1",
|
|
165
165
|
"get-image-colors": "^4.0.1",
|
|
166
166
|
"globby": "^16.2.0",
|
|
167
|
-
"happy-dom": "^20.
|
|
167
|
+
"happy-dom": "^20.9.0",
|
|
168
168
|
"jest-image-snapshot": "^6.5.2",
|
|
169
169
|
"lightningcss": "^1.32.0",
|
|
170
170
|
"nuxt": "^4.4.2",
|
|
@@ -181,7 +181,7 @@
|
|
|
181
181
|
"unocss": "^66.6.8",
|
|
182
182
|
"vitest": "^4.1.4",
|
|
183
183
|
"vue-tsc": "^3.2.6",
|
|
184
|
-
"wrangler": "^4.82.
|
|
184
|
+
"wrangler": "^4.82.2",
|
|
185
185
|
"yoga-wasm-web": "^0.3.3"
|
|
186
186
|
},
|
|
187
187
|
"scripts": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.section-block[data-v-0af7c2b0]{background:var(--color-surface-elevated);border:1px solid var(--color-border);border-radius:var(--radius-lg);transition:border-color .2s;overflow:hidden}.section-block[data-v-0af7c2b0]:hover{border-color:var(--color-neutral-300)}.dark .section-block[data-v-0af7c2b0]:hover{border-color:var(--color-neutral-700)}.section-header[data-v-0af7c2b0]{cursor:pointer;-webkit-user-select:none;user-select:none;padding:.875rem 1rem;list-style:none;transition:background .15s}.section-header[data-v-0af7c2b0]::-webkit-details-marker{display:none}.section-header[data-v-0af7c2b0]:hover{background:var(--color-surface-sunken)}details[open] .section-header[data-v-0af7c2b0]{border-bottom:1px solid var(--color-border)}.section-title[data-v-0af7c2b0]{align-items:center;gap:.625rem;transition:opacity .15s;display:flex}.section-icon[data-v-0af7c2b0]{color:var(--color-text-muted);flex-shrink:0;font-size:1.125rem}.section-label[data-v-0af7c2b0]{color:var(--color-text);font-size:.875rem;font-weight:600}.section-description[data-v-0af7c2b0]{color:var(--color-text-muted);margin-top:.125rem;font-size:.75rem}.chevron[data-v-0af7c2b0]{color:var(--color-text-subtle);flex-shrink:0;font-size:.875rem;transition:transform .2s cubic-bezier(.22,1,.36,1)}details[open] .chevron[data-v-0af7c2b0]{color:var(--color-text-muted);transform:rotate(180deg)}.section-content[data-v-0af7c2b0]{background:var(--color-surface-sunken);flex-direction:column;gap:.75rem;padding:1rem;display:flex}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.devtools-snippet[data-v-b3d419fb]{margin:.5rem .75rem}.devtools-snippet-header[data-v-b3d419fb]{justify-content:space-between;align-items:center;margin-bottom:.375rem;display:flex}.devtools-snippet-label[data-v-b3d419fb]{color:var(--color-text-muted);font-family:var(--font-mono);letter-spacing:-.01em;font-size:.6875rem;font-weight:500}.devtools-snippet-block[data-v-b3d419fb]{border-radius:var(--radius-sm);max-height:300px;font-size:.6875rem;line-height:1.6;overflow-y:auto;padding:.5rem .625rem!important}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"id":"966cadeb-de3b-4c08-b33e-ccf471f25ca9","timestamp":1776092889087,"prerendered":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.devtools-alert[data-v-301cc3ed]{border-bottom:1px solid var(--color-border);align-items:center;gap:.5rem;padding:.5rem 1rem;font-size:.8125rem;display:flex}.devtools-alert-icon[data-v-301cc3ed]{flex-shrink:0}.devtools-alert-content[data-v-301cc3ed]{flex:1;min-width:0}.devtools-alert-action[data-v-301cc3ed]{flex-shrink:0;margin-left:auto}.devtools-alert-info[data-v-301cc3ed]{color:oklch(55% .12 230);background:oklch(85% .1 230/.1);border-bottom-color:oklch(75% .1 230/.2)}.dark .devtools-alert-info[data-v-301cc3ed]{color:oklch(80% .1 230);background:oklch(45% .1 230/.15)}.devtools-alert-error[data-v-301cc3ed]{color:oklch(52% .18 25);background:oklch(65% .18 25/.1);border-bottom-color:oklch(55% .15 25/.25)}.dark .devtools-alert-error[data-v-301cc3ed]{color:oklch(75% .14 25);background:oklch(40% .14 25/.18)}.devtools-alert-warning[data-v-301cc3ed]{color:oklch(55% .15 85);background:oklch(85% .12 85/.1);border-bottom-color:oklch(75% .12 85/.2)}.dark .devtools-alert-warning[data-v-301cc3ed]{color:oklch(80% .12 85);background:oklch(45% .12 85/.15)}.devtools-alert-success[data-v-301cc3ed]{color:oklch(50% .15 145);background:oklch(75% .15 145/.12);border-bottom-color:oklch(65% .12 145/.2)}.dark .devtools-alert-success[data-v-301cc3ed]{color:oklch(75% .18 145);background:oklch(50% .15 145/.15)}.devtools-alert-production[data-v-301cc3ed]{color:oklch(45% .15 145);background:oklch(85% .12 145/.1);border-bottom-color:oklch(75% .12 145/.2)}.dark .devtools-alert-production[data-v-301cc3ed]{color:oklch(75% .12 145);background:oklch(35% .08 145/.15)}
|