nuxt-i18n-micro 1.70.0 → 1.72.0
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/client/200.html +8 -8
- package/dist/client/404.html +8 -8
- package/dist/client/_nuxt/{D5DyI9oC.js → B7Jx3EF3.js} +1 -1
- package/dist/client/_nuxt/{C-ULErdD.js → BtL3Xcbs.js} +99 -99
- package/dist/client/_nuxt/{I_HlWSXB.js → ByzMOxly.js} +1 -1
- package/dist/client/_nuxt/{Bc8-3my4.js → CxlwFrJU.js} +1 -1
- package/dist/client/_nuxt/builds/latest.json +1 -1
- package/dist/client/_nuxt/builds/meta/4050273d-4ccf-4b73-9658-1534d38a63b5.json +1 -0
- package/dist/client/_nuxt/error-404.CRYJ4jen.css +1 -0
- package/dist/client/_nuxt/error-500.C0_g8rZ_.css +1 -0
- package/dist/client/index.html +8 -8
- package/dist/module.json +1 -1
- package/dist/module.mjs +12 -11
- package/dist/runtime/composables/useLocaleHead.js +2 -8
- package/dist/runtime/plugins/01.plugin.d.ts +3 -3
- package/dist/runtime/plugins/01.plugin.js +1 -6
- package/dist/runtime/plugins/02.meta.js +0 -3
- package/dist/runtime/plugins/03.define.d.ts +4 -2
- package/dist/runtime/plugins/05.hooks.d.ts +2 -0
- package/dist/runtime/plugins/05.hooks.js +26 -0
- package/dist/runtime/server/routes/get.js +2 -2
- package/dist/runtime/translation-server-middleware.js +3 -1
- package/package.json +12 -9
- package/dist/client/_nuxt/builds/meta/adf5f190-89a4-4c2d-abd9-100f4d693fb8.json +0 -1
- package/dist/client/_nuxt/error-404.DzyMP_s0.css +0 -1
- package/dist/client/_nuxt/error-500.YF1CL0xw.css +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as s,o as a,c as i,a as e,t as o}from"./
|
|
1
|
+
import{_ as s,o as a,c as i,a as e,t as o}from"./BtL3Xcbs.js";import{u}from"./B7Jx3EF3.js";const l={class:"antialiased bg-white dark:bg-black dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-black"},c={class:"max-w-520px text-center"},d=["textContent"],p=["textContent"],f={__name:"error-500",props:{appName:{type:String,default:"Nuxt"},version:{type:String,default:""},statusCode:{type:Number,default:500},statusMessage:{type:String,default:"Server error"},description:{type:String,default:"This page is temporarily unavailable."}},setup(t){const r=t;return u({title:`${r.statusCode} - ${r.statusMessage} | ${r.appName}`,script:[{children:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver((e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)})).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{children:'*,:after,:before{border-color:var(--un-default-border-color,#e5e7eb);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}h1{font-size:inherit;font-weight:inherit}h1,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(g,n)=>(a(),i("div",l,[n[0]||(n[0]=e("div",{class:"-bottom-1/2 fixed h-1/2 left-0 right-0 spotlight"},null,-1)),e("div",c,[e("h1",{class:"font-medium mb-8 sm:text-10xl text-8xl",textContent:o(t.statusCode)},null,8,d),e("p",{class:"font-light leading-tight mb-16 px-8 sm:px-0 sm:text-4xl text-xl",textContent:o(t.description)},null,8,p)])]))}},b=s(f,[["__scopeId","data-v-ebdf3d59"]]);export{b as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as a,o as i,c as u,a as e,t as r,b as c,w as l,d,e as p}from"./
|
|
1
|
+
import{_ as a,o as i,c as u,a as e,t as r,b as c,w as l,d,e as p}from"./BtL3Xcbs.js";import{u as f}from"./B7Jx3EF3.js";const m={class:"antialiased bg-white dark:bg-black dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-black"},g={class:"max-w-520px text-center z-20"},h=["textContent"],b=["textContent"],x={class:"flex items-center justify-center w-full"},y={__name:"error-404",props:{appName:{type:String,default:"Nuxt"},version:{type:String,default:""},statusCode:{type:Number,default:404},statusMessage:{type:String,default:"Not Found"},description:{type:String,default:"Sorry, the page you are looking for could not be found."},backHome:{type:String,default:"Go back home"}},setup(t){const n=t;return f({title:`${n.statusCode} - ${n.statusMessage} | ${n.appName}`,script:[{children:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver((e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)})).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{children:'*,:after,:before{border-color:var(--un-default-border-color,#e5e7eb);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}h1{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}h1,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(k,o)=>{const s=p;return i(),u("div",m,[o[0]||(o[0]=e("div",{class:"fixed left-0 right-0 spotlight z-10"},null,-1)),e("div",g,[e("h1",{class:"font-medium mb-8 sm:text-10xl text-8xl",textContent:r(t.statusCode)},null,8,h),e("p",{class:"font-light leading-tight mb-16 px-8 sm:px-0 sm:text-4xl text-xl",textContent:r(t.description)},null,8,b),e("div",x,[c(s,{to:"/",class:"cursor-pointer gradient-border px-4 py-2 sm:px-6 sm:py-3 sm:text-xl text-md"},{default:l(()=>[d(r(t.backHome),1)]),_:1})])])])}}},v=a(y,[["__scopeId","data-v-1808237f"]]);export{v as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"
|
|
1
|
+
{"id":"4050273d-4ccf-4b73-9658-1534d38a63b5","timestamp":1737710490638}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"4050273d-4ccf-4b73-9658-1534d38a63b5","timestamp":1737710490638,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.spotlight[data-v-1808237f]{background:linear-gradient(45deg,#00dc82,#36e4da 50%,#0047e1);bottom:-30vh;filter:blur(20vh);height:40vh}.gradient-border[data-v-1808237f]{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:.5rem;position:relative}@media (prefers-color-scheme:light){.gradient-border[data-v-1808237f]{background-color:#ffffff4d}.gradient-border[data-v-1808237f]:before{background:linear-gradient(90deg,#e2e2e2,#e2e2e2 25%,#00dc82,#36e4da 75%,#0047e1)}}@media (prefers-color-scheme:dark){.gradient-border[data-v-1808237f]{background-color:#1414144d}.gradient-border[data-v-1808237f]:before{background:linear-gradient(90deg,#303030,#303030 25%,#00dc82,#36e4da 75%,#0047e1)}}.gradient-border[data-v-1808237f]:before{background-size:400% auto;border-radius:.5rem;bottom:0;content:"";left:0;-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;opacity:.5;padding:2px;position:absolute;right:0;top:0;transition:background-position .3s ease-in-out,opacity .2s ease-in-out;width:100%}.gradient-border[data-v-1808237f]:hover:before{background-position:-50% 0;opacity:1}.fixed[data-v-1808237f]{position:fixed}.left-0[data-v-1808237f]{left:0}.right-0[data-v-1808237f]{right:0}.z-10[data-v-1808237f]{z-index:10}.z-20[data-v-1808237f]{z-index:20}.grid[data-v-1808237f]{display:grid}.mb-16[data-v-1808237f]{margin-bottom:4rem}.mb-8[data-v-1808237f]{margin-bottom:2rem}.max-w-520px[data-v-1808237f]{max-width:520px}.min-h-screen[data-v-1808237f]{min-height:100vh}.w-full[data-v-1808237f]{width:100%}.flex[data-v-1808237f]{display:flex}.cursor-pointer[data-v-1808237f]{cursor:pointer}.place-content-center[data-v-1808237f]{place-content:center}.items-center[data-v-1808237f]{align-items:center}.justify-center[data-v-1808237f]{justify-content:center}.overflow-hidden[data-v-1808237f]{overflow:hidden}.bg-white[data-v-1808237f]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-4[data-v-1808237f]{padding-left:1rem;padding-right:1rem}.px-8[data-v-1808237f]{padding-left:2rem;padding-right:2rem}.py-2[data-v-1808237f]{padding-bottom:.5rem;padding-top:.5rem}.text-center[data-v-1808237f]{text-align:center}.text-8xl[data-v-1808237f]{font-size:6rem;line-height:1}.text-xl[data-v-1808237f]{font-size:1.25rem;line-height:1.75rem}.text-black[data-v-1808237f]{--un-text-opacity:1;color:rgb(0 0 0/var(--un-text-opacity))}.font-light[data-v-1808237f]{font-weight:300}.font-medium[data-v-1808237f]{font-weight:500}.leading-tight[data-v-1808237f]{line-height:1.25}.font-sans[data-v-1808237f]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.antialiased[data-v-1808237f]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-black[data-v-1808237f]{--un-bg-opacity:1;background-color:rgb(0 0 0/var(--un-bg-opacity))}.dark\:text-white[data-v-1808237f]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (min-width:640px){.sm\:px-0[data-v-1808237f]{padding-left:0;padding-right:0}.sm\:px-6[data-v-1808237f]{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-3[data-v-1808237f]{padding-bottom:.75rem;padding-top:.75rem}.sm\:text-4xl[data-v-1808237f]{font-size:2.25rem;line-height:2.5rem}.sm\:text-xl[data-v-1808237f]{font-size:1.25rem;line-height:1.75rem}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.spotlight[data-v-ebdf3d59]{background:linear-gradient(45deg,#00dc82,#36e4da 50%,#0047e1);filter:blur(20vh)}.fixed[data-v-ebdf3d59]{position:fixed}.-bottom-1\/2[data-v-ebdf3d59]{bottom:-50%}.left-0[data-v-ebdf3d59]{left:0}.right-0[data-v-ebdf3d59]{right:0}.grid[data-v-ebdf3d59]{display:grid}.mb-16[data-v-ebdf3d59]{margin-bottom:4rem}.mb-8[data-v-ebdf3d59]{margin-bottom:2rem}.h-1\/2[data-v-ebdf3d59]{height:50%}.max-w-520px[data-v-ebdf3d59]{max-width:520px}.min-h-screen[data-v-ebdf3d59]{min-height:100vh}.place-content-center[data-v-ebdf3d59]{place-content:center}.overflow-hidden[data-v-ebdf3d59]{overflow:hidden}.bg-white[data-v-ebdf3d59]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-8[data-v-ebdf3d59]{padding-left:2rem;padding-right:2rem}.text-center[data-v-ebdf3d59]{text-align:center}.text-8xl[data-v-ebdf3d59]{font-size:6rem;line-height:1}.text-xl[data-v-ebdf3d59]{font-size:1.25rem;line-height:1.75rem}.text-black[data-v-ebdf3d59]{--un-text-opacity:1;color:rgb(0 0 0/var(--un-text-opacity))}.font-light[data-v-ebdf3d59]{font-weight:300}.font-medium[data-v-ebdf3d59]{font-weight:500}.leading-tight[data-v-ebdf3d59]{line-height:1.25}.font-sans[data-v-ebdf3d59]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.antialiased[data-v-ebdf3d59]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-black[data-v-ebdf3d59]{--un-bg-opacity:1;background-color:rgb(0 0 0/var(--un-bg-opacity))}.dark\:text-white[data-v-ebdf3d59]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (min-width:640px){.sm\:px-0[data-v-ebdf3d59]{padding-left:0;padding-right:0}.sm\:text-4xl[data-v-ebdf3d59]{font-size:2.25rem;line-height:2.5rem}}
|
package/dist/client/index.html
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
<!DOCTYPE html><html data-capo=""><head><meta charset="utf-8">
|
|
2
2
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
3
3
|
<link rel="stylesheet" href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/entry.B5pGkSSX.css" crossorigin>
|
|
4
|
-
<link rel="modulepreload" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/
|
|
4
|
+
<link rel="modulepreload" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BtL3Xcbs.js">
|
|
5
5
|
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/CG55hV0U.js">
|
|
6
|
-
<link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-404.
|
|
7
|
-
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/
|
|
8
|
-
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/
|
|
9
|
-
<link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-500.
|
|
10
|
-
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/
|
|
11
|
-
<script type="module" src="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/
|
|
12
|
-
<script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__NUXT_DEVTOOLS_I18N_BASE__/",buildId:"
|
|
6
|
+
<link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-404.CRYJ4jen.css">
|
|
7
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/CxlwFrJU.js">
|
|
8
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B7Jx3EF3.js">
|
|
9
|
+
<link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-500.C0_g8rZ_.css">
|
|
10
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/ByzMOxly.js">
|
|
11
|
+
<script type="module" src="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BtL3Xcbs.js" crossorigin></script></head><body><div id="__nuxt"></div><div id="teleports"></div><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1737710495632,false]</script>
|
|
12
|
+
<script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__NUXT_DEVTOOLS_I18N_BASE__/",buildId:"4050273d-4ccf-4b73-9658-1534d38a63b5",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script></body></html>
|
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -410,6 +410,7 @@ const module = defineNuxtModule({
|
|
|
410
410
|
debug: false,
|
|
411
411
|
define: true,
|
|
412
412
|
plugin: true,
|
|
413
|
+
hooks: true,
|
|
413
414
|
types: true,
|
|
414
415
|
defaultLocale: "en",
|
|
415
416
|
strategy: "prefix_except_default",
|
|
@@ -459,31 +460,21 @@ const module = defineNuxtModule({
|
|
|
459
460
|
});
|
|
460
461
|
const apiBaseUrl = (process.env.NUXT_I18N_APP_BASE_URL ?? options.apiBaseUrl ?? "_locales").replace(/^\/+|\/+$|\/{2,}/, "");
|
|
461
462
|
nuxt.options.runtimeConfig.public.i18nConfig = {
|
|
462
|
-
plural: void 0,
|
|
463
463
|
locales: localeManager.locales ?? [],
|
|
464
|
-
meta: options.meta ?? true,
|
|
465
464
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
466
465
|
// @ts-ignore
|
|
467
466
|
metaBaseUrl: options.metaBaseUrl ?? void 0,
|
|
468
|
-
define: options.define ?? true,
|
|
469
|
-
disableWatcher: options.disableWatcher ?? false,
|
|
470
|
-
disableUpdater: options.disableUpdater ?? false,
|
|
471
467
|
defaultLocale,
|
|
472
|
-
translationDir: options.translationDir ?? "locales",
|
|
473
468
|
localeCookie: options.localeCookie ?? "user-locale",
|
|
474
|
-
autoDetectLanguage: options.autoDetectLanguage ?? true,
|
|
475
469
|
autoDetectPath: options.autoDetectPath ?? "/",
|
|
476
470
|
strategy: options.strategy ?? "no_prefix",
|
|
477
471
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
478
472
|
// @ts-ignore
|
|
479
473
|
routesLocaleLinks: options.routesLocaleLinks ?? {},
|
|
480
|
-
fallbackLocale: options.fallbackLocale ?? void 0,
|
|
481
474
|
dateBuild: Date.now(),
|
|
482
475
|
hashMode: nuxt.options?.router?.options?.hashMode ?? false,
|
|
483
|
-
globalLocaleRoutes: void 0,
|
|
484
476
|
apiBaseUrl,
|
|
485
477
|
isSSG,
|
|
486
|
-
customRegexMatcher: options.customRegexMatcher,
|
|
487
478
|
disablePageLocales: options.disablePageLocales ?? false
|
|
488
479
|
};
|
|
489
480
|
if (typeof options.customRegexMatcher !== "undefined") {
|
|
@@ -495,7 +486,10 @@ const module = defineNuxtModule({
|
|
|
495
486
|
nuxt.options.runtimeConfig.i18nConfig = {
|
|
496
487
|
rootDir: nuxt.options.rootDir,
|
|
497
488
|
rootDirs,
|
|
498
|
-
debug: options.debug ?? false
|
|
489
|
+
debug: options.debug ?? false,
|
|
490
|
+
fallbackLocale: options.fallbackLocale ?? void 0,
|
|
491
|
+
translationDir: options.translationDir ?? "locales",
|
|
492
|
+
customRegexMatcher: options.customRegexMatcher
|
|
499
493
|
};
|
|
500
494
|
addImportsDir(resolver.resolve("./runtime/composables"));
|
|
501
495
|
if (process.env && process.env.TEST) {
|
|
@@ -505,6 +499,13 @@ const module = defineNuxtModule({
|
|
|
505
499
|
addPlugin({
|
|
506
500
|
src: resolver.resolve("./runtime/plugins/01.plugin"),
|
|
507
501
|
name: "i18n-plugin-loader",
|
|
502
|
+
order: -5
|
|
503
|
+
});
|
|
504
|
+
}
|
|
505
|
+
if (options.hooks) {
|
|
506
|
+
addPlugin({
|
|
507
|
+
src: resolver.resolve("./runtime/plugins/05.hooks"),
|
|
508
|
+
name: "i18n-plugin-hooks",
|
|
508
509
|
order: 1
|
|
509
510
|
});
|
|
510
511
|
}
|
|
@@ -22,16 +22,10 @@ export const useLocaleHead = ({ addDirAttribute = true, identifierAttribute = "i
|
|
|
22
22
|
const currentDir = currentLocale.dir || "auto";
|
|
23
23
|
let fullPath = unref(route.fullPath);
|
|
24
24
|
let ogUrl = joinURL(unref(baseUrl), fullPath);
|
|
25
|
-
|
|
25
|
+
const indexUrl = joinURL(unref(baseUrl));
|
|
26
26
|
if (!fullPath.startsWith("/")) {
|
|
27
27
|
fullPath = `/${fullPath}`;
|
|
28
28
|
}
|
|
29
|
-
if (!ogUrl.endsWith("/")) {
|
|
30
|
-
ogUrl += "/";
|
|
31
|
-
}
|
|
32
|
-
if (!indexUrl.endsWith("/")) {
|
|
33
|
-
indexUrl += "/";
|
|
34
|
-
}
|
|
35
29
|
const matchedLocale = locales.find((locale2) => fullPath.startsWith(`/${locale2.code}`));
|
|
36
30
|
if (routeName.startsWith("localized-") && matchedLocale) {
|
|
37
31
|
fullPath = fullPath.slice(matchedLocale.code.length + 1);
|
|
@@ -75,7 +69,7 @@ export const useLocaleHead = ({ addDirAttribute = true, identifierAttribute = "i
|
|
|
75
69
|
href,
|
|
76
70
|
hreflang: unref(loc.code)
|
|
77
71
|
}];
|
|
78
|
-
if (loc.iso) {
|
|
72
|
+
if (loc.iso && loc.iso !== loc.code) {
|
|
79
73
|
links.push({
|
|
80
74
|
[identifierAttribute]: `i18n-alternate-${loc.iso}`,
|
|
81
75
|
rel: "alternate",
|
|
@@ -3,7 +3,7 @@ import type { Locale, I18nRouteParams, Params, Translation, Translations } from
|
|
|
3
3
|
declare const _default: import("nuxt/app").Plugin<{
|
|
4
4
|
i18n: undefined;
|
|
5
5
|
__micro: boolean;
|
|
6
|
-
getLocale: () => string;
|
|
6
|
+
getLocale: (route?: RouteLocationNormalizedLoaded | RouteLocationResolvedGeneric) => string;
|
|
7
7
|
getLocaleName: () => string | null;
|
|
8
8
|
defaultLocale: () => string | undefined;
|
|
9
9
|
getLocales: () => Locale[];
|
|
@@ -27,7 +27,7 @@ declare const _default: import("nuxt/app").Plugin<{
|
|
|
27
27
|
}> & import("nuxt/app").ObjectPlugin<{
|
|
28
28
|
i18n: undefined;
|
|
29
29
|
__micro: boolean;
|
|
30
|
-
getLocale: () => string;
|
|
30
|
+
getLocale: (route?: RouteLocationNormalizedLoaded | RouteLocationResolvedGeneric) => string;
|
|
31
31
|
getLocaleName: () => string | null;
|
|
32
32
|
defaultLocale: () => string | undefined;
|
|
33
33
|
getLocales: () => Locale[];
|
|
@@ -51,7 +51,7 @@ declare const _default: import("nuxt/app").Plugin<{
|
|
|
51
51
|
}>;
|
|
52
52
|
export default _default;
|
|
53
53
|
export interface PluginsInjections {
|
|
54
|
-
$getLocale: () => string;
|
|
54
|
+
$getLocale: (route?: RouteLocationNormalizedLoaded | RouteLocationResolvedGeneric) => string;
|
|
55
55
|
$getLocaleName: () => string | null;
|
|
56
56
|
$getLocales: () => Locale[];
|
|
57
57
|
$defaultLocale: () => string | undefined;
|
|
@@ -85,11 +85,6 @@ export default defineNuxtPlugin(async (nuxtApp) => {
|
|
|
85
85
|
const routeName = routeService.getRouteName(to, locale2);
|
|
86
86
|
await loadTranslationsIfNeeded(locale2, routeName, to.fullPath);
|
|
87
87
|
}
|
|
88
|
-
await nuxtApp.callHook("i18n:register", (translations, selectedLocale) => {
|
|
89
|
-
const locale2 = routeService.getCurrentLocale(to);
|
|
90
|
-
const routeName = routeService.getRouteName(to, locale2);
|
|
91
|
-
i18nHelper.mergeTranslation(selectedLocale ?? locale2, routeName, translations, true);
|
|
92
|
-
}, locale);
|
|
93
88
|
}
|
|
94
89
|
router.beforeEach(async (to, from, next) => {
|
|
95
90
|
if (to.path !== from.path || isNoPrefixStrategy(i18nConfig.strategy)) {
|
|
@@ -103,7 +98,7 @@ export default defineNuxtPlugin(async (nuxtApp) => {
|
|
|
103
98
|
const provideData = {
|
|
104
99
|
i18n: void 0,
|
|
105
100
|
__micro: true,
|
|
106
|
-
getLocale: () => routeService.getCurrentLocale(),
|
|
101
|
+
getLocale: (route) => routeService.getCurrentLocale(route),
|
|
107
102
|
getLocaleName: () => routeService.getCurrentName(routeService.getCurrentRoute()),
|
|
108
103
|
defaultLocale: () => i18nConfig.defaultLocale,
|
|
109
104
|
getLocales: () => i18nConfig.locales || [],
|
|
@@ -7,9 +7,6 @@ export default defineNuxtPlugin((nuxtApp) => {
|
|
|
7
7
|
const i18nConfig = config.public.i18nConfig;
|
|
8
8
|
const schema = port === "443" ? "https" : "http";
|
|
9
9
|
const defaultUrl = port === "80" || port === "443" ? `${schema}://${host}` : `${schema}://${host}:${port}`;
|
|
10
|
-
if (!i18nConfig.meta) {
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
10
|
nuxtApp.hook("app:rendered", (_context) => {
|
|
14
11
|
const url = useRequestURL();
|
|
15
12
|
const baseUrl = (i18nConfig.metaBaseUrl || url.origin || defaultUrl).toString();
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
import type { Translations } from 'nuxt-i18n-micro-types';
|
|
2
|
+
type LocalesObject = Record<string, Translations>;
|
|
1
3
|
declare const _default: import("nuxt/app").Plugin<{
|
|
2
4
|
defineI18nRoute: (routeDefinition: {
|
|
3
|
-
locales?: string[] |
|
|
5
|
+
locales?: string[] | LocalesObject;
|
|
4
6
|
localeRoutes?: Record<string, string>;
|
|
5
7
|
}) => Promise<void>;
|
|
6
8
|
}> & import("nuxt/app").ObjectPlugin<{
|
|
7
9
|
defineI18nRoute: (routeDefinition: {
|
|
8
|
-
locales?: string[] |
|
|
10
|
+
locales?: string[] | LocalesObject;
|
|
9
11
|
localeRoutes?: Record<string, string>;
|
|
10
12
|
}) => Promise<void>;
|
|
11
13
|
}>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { isNoPrefixStrategy, useTranslationHelper } from "nuxt-i18n-micro-core";
|
|
2
|
+
import { defineNuxtPlugin, useRuntimeConfig } from "#app";
|
|
3
|
+
import { useRouter } from "#imports";
|
|
4
|
+
const i18nHelper = useTranslationHelper();
|
|
5
|
+
export default defineNuxtPlugin(async (nuxtApp) => {
|
|
6
|
+
const config = useRuntimeConfig();
|
|
7
|
+
const i18nConfig = config.public.i18nConfig;
|
|
8
|
+
const router = useRouter();
|
|
9
|
+
const locale = nuxtApp.$getLocale();
|
|
10
|
+
const routeName = nuxtApp.$getRouteName();
|
|
11
|
+
await nuxtApp.callHook("i18n:register", (translations, selectedLocale) => {
|
|
12
|
+
i18nHelper.mergeTranslation(selectedLocale ?? locale, routeName, translations, true);
|
|
13
|
+
}, locale);
|
|
14
|
+
router.beforeEach(async (to, from, next) => {
|
|
15
|
+
if (to.path !== from.path || isNoPrefixStrategy(i18nConfig.strategy)) {
|
|
16
|
+
const locale2 = nuxtApp.$getLocale(to);
|
|
17
|
+
const routeName2 = nuxtApp.$getRouteName(to);
|
|
18
|
+
await nuxtApp.callHook("i18n:register", (translations, selectedLocale) => {
|
|
19
|
+
i18nHelper.mergeTranslation(selectedLocale ?? locale2, routeName2, translations, true);
|
|
20
|
+
}, locale2);
|
|
21
|
+
}
|
|
22
|
+
if (next) {
|
|
23
|
+
next();
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
});
|
|
@@ -19,8 +19,8 @@ function deepMerge(target, source) {
|
|
|
19
19
|
export default defineEventHandler(async (event) => {
|
|
20
20
|
const { page, locale } = event.context.params;
|
|
21
21
|
const config = useRuntimeConfig();
|
|
22
|
-
const { rootDirs, debug } = config.i18nConfig;
|
|
23
|
-
const {
|
|
22
|
+
const { rootDirs, debug, translationDir, fallbackLocale, customRegexMatcher } = config.i18nConfig;
|
|
23
|
+
const { locales } = config.public.i18nConfig;
|
|
24
24
|
if (customRegexMatcher && locales && !locales.map((l) => l.code).includes(locale)) {
|
|
25
25
|
throw createError({ statusCode: 404 });
|
|
26
26
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { getQuery, getCookie } from "h3";
|
|
2
2
|
import { interpolate, useTranslationHelper } from "nuxt-i18n-micro-core";
|
|
3
|
+
import { useRuntimeConfig } from "#imports";
|
|
3
4
|
async function fetchTranslations(locale) {
|
|
4
5
|
try {
|
|
5
6
|
const translations = await $fetch(`/_locales/general/${locale}/data.json`);
|
|
@@ -11,7 +12,8 @@ async function fetchTranslations(locale) {
|
|
|
11
12
|
}
|
|
12
13
|
export const useTranslationServerMiddleware = async (event, defaultLocale, currentLocale) => {
|
|
13
14
|
const { getTranslation, loadTranslations, hasGeneralTranslation } = useTranslationHelper();
|
|
14
|
-
const
|
|
15
|
+
const config = useRuntimeConfig(event).i18nConfig;
|
|
16
|
+
const locale = (currentLocale || event.context.params?.locale || getQuery(event)?.locale || getCookie(event, "user-locale") || event.headers.get("accept-language")?.split(",")[0] || config.fallbackLocale || defaultLocale || "en").toString();
|
|
15
17
|
if (!hasGeneralTranslation(locale)) {
|
|
16
18
|
const translations = await fetchTranslations(locale);
|
|
17
19
|
await loadTranslations(locale, translations);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nuxt-i18n-micro",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.72.0",
|
|
4
4
|
"description": "Nuxt I18n Micro is a lightweight, high-performance internationalization module for Nuxt, designed to handle multi-language support with minimal overhead, fast build times, and efficient runtime performance.",
|
|
5
5
|
"repository": "s00d/nuxt-i18n-micro",
|
|
6
6
|
"license": "MIT",
|
|
@@ -53,9 +53,9 @@
|
|
|
53
53
|
"globby": "^14.0.2",
|
|
54
54
|
"sirv": "^2.0.4",
|
|
55
55
|
"ufo": "^1.5.4",
|
|
56
|
-
"nuxt-i18n-micro-core": "1.0.
|
|
57
|
-
"nuxt-i18n-micro-
|
|
58
|
-
"nuxt-i18n-micro-
|
|
56
|
+
"nuxt-i18n-micro-core": "1.0.16",
|
|
57
|
+
"nuxt-i18n-micro-types": "1.0.1",
|
|
58
|
+
"nuxt-i18n-micro-test-utils": "1.0.6"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@nuxt/devtools": "^1.7.0",
|
|
@@ -64,23 +64,26 @@
|
|
|
64
64
|
"@nuxt/module-builder": "^0.8.4",
|
|
65
65
|
"@nuxt/schema": "^3.15.2",
|
|
66
66
|
"@nuxt/test-utils": "^3.15.4",
|
|
67
|
-
"@playwright/test": "^1.
|
|
67
|
+
"@playwright/test": "^1.50.0",
|
|
68
68
|
"@types/jest": "^29.5.14",
|
|
69
69
|
"@types/node": "^20.17.10",
|
|
70
70
|
"changelogen": "^0.5.7",
|
|
71
|
-
"eslint": "^
|
|
71
|
+
"eslint": "^9.18.0",
|
|
72
72
|
"jest": "^29.7.0",
|
|
73
73
|
"nuxt": "^3.15.2",
|
|
74
74
|
"ts-jest": "^29.2.5",
|
|
75
75
|
"typescript": "5.6.3",
|
|
76
|
-
"vitepress": "^1.6.
|
|
77
|
-
"vitest": "^3.0.
|
|
76
|
+
"vitepress": "^1.6.3",
|
|
77
|
+
"vitest": "^3.0.4",
|
|
78
78
|
"vue-tsc": "2.1.10"
|
|
79
79
|
},
|
|
80
80
|
"optionalDependencies": {
|
|
81
81
|
"@rollup/rollup-linux-x64-gnu": "^4.28.1",
|
|
82
82
|
"@rollup/rollup-win32-x64-msvc": "^4.28.1"
|
|
83
83
|
},
|
|
84
|
+
"peerDependencies": {
|
|
85
|
+
"vue-router": ">=4.4.0"
|
|
86
|
+
},
|
|
84
87
|
"workspaces": [
|
|
85
88
|
"client",
|
|
86
89
|
"test/fixtures/**/*"
|
|
@@ -105,7 +108,7 @@
|
|
|
105
108
|
"client:build": "nuxi generate client",
|
|
106
109
|
"client:prepare": "nuxi client:prepare client",
|
|
107
110
|
"client:dev": "nuxi dev client --port 3300",
|
|
108
|
-
"clean": "find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +",
|
|
111
|
+
"clean": "find . \\( -name 'node_modules' -o -name '.nuxt' -o -name '.output' -o -name 'dist' \\) -type d -prune -exec rm -rf '{}' + && find . \\( -name 'pnpm-lock.yaml' -o -name 'package-lock.json' \\) -type f -exec rm -f '{}' +",
|
|
109
112
|
"typecheck": "tsc --noEmit",
|
|
110
113
|
"typecheck:nuxt": "nuxt typecheck --no-emit",
|
|
111
114
|
"docs:dev": "vitepress dev docs",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"id":"adf5f190-89a4-4c2d-abd9-100f4d693fb8","timestamp":1737549945992,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.spotlight[data-v-11ff7e00]{background:linear-gradient(45deg,#00dc82,#36e4da 50%,#0047e1);bottom:-30vh;filter:blur(20vh);height:40vh}.gradient-border[data-v-11ff7e00]{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:.5rem;position:relative}@media (prefers-color-scheme:light){.gradient-border[data-v-11ff7e00]{background-color:#ffffff4d}.gradient-border[data-v-11ff7e00]:before{background:linear-gradient(90deg,#e2e2e2,#e2e2e2 25%,#00dc82,#36e4da 75%,#0047e1)}}@media (prefers-color-scheme:dark){.gradient-border[data-v-11ff7e00]{background-color:#1414144d}.gradient-border[data-v-11ff7e00]:before{background:linear-gradient(90deg,#303030,#303030 25%,#00dc82,#36e4da 75%,#0047e1)}}.gradient-border[data-v-11ff7e00]:before{background-size:400% auto;border-radius:.5rem;bottom:0;content:"";left:0;-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;opacity:.5;padding:2px;position:absolute;right:0;top:0;transition:background-position .3s ease-in-out,opacity .2s ease-in-out;width:100%}.gradient-border[data-v-11ff7e00]:hover:before{background-position:-50% 0;opacity:1}.fixed[data-v-11ff7e00]{position:fixed}.left-0[data-v-11ff7e00]{left:0}.right-0[data-v-11ff7e00]{right:0}.z-10[data-v-11ff7e00]{z-index:10}.z-20[data-v-11ff7e00]{z-index:20}.grid[data-v-11ff7e00]{display:grid}.mb-16[data-v-11ff7e00]{margin-bottom:4rem}.mb-8[data-v-11ff7e00]{margin-bottom:2rem}.max-w-520px[data-v-11ff7e00]{max-width:520px}.min-h-screen[data-v-11ff7e00]{min-height:100vh}.w-full[data-v-11ff7e00]{width:100%}.flex[data-v-11ff7e00]{display:flex}.cursor-pointer[data-v-11ff7e00]{cursor:pointer}.place-content-center[data-v-11ff7e00]{place-content:center}.items-center[data-v-11ff7e00]{align-items:center}.justify-center[data-v-11ff7e00]{justify-content:center}.overflow-hidden[data-v-11ff7e00]{overflow:hidden}.bg-white[data-v-11ff7e00]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-4[data-v-11ff7e00]{padding-left:1rem;padding-right:1rem}.px-8[data-v-11ff7e00]{padding-left:2rem;padding-right:2rem}.py-2[data-v-11ff7e00]{padding-bottom:.5rem;padding-top:.5rem}.text-center[data-v-11ff7e00]{text-align:center}.text-8xl[data-v-11ff7e00]{font-size:6rem;line-height:1}.text-xl[data-v-11ff7e00]{font-size:1.25rem;line-height:1.75rem}.text-black[data-v-11ff7e00]{--un-text-opacity:1;color:rgb(0 0 0/var(--un-text-opacity))}.font-light[data-v-11ff7e00]{font-weight:300}.font-medium[data-v-11ff7e00]{font-weight:500}.leading-tight[data-v-11ff7e00]{line-height:1.25}.font-sans[data-v-11ff7e00]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.antialiased[data-v-11ff7e00]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-black[data-v-11ff7e00]{--un-bg-opacity:1;background-color:rgb(0 0 0/var(--un-bg-opacity))}.dark\:text-white[data-v-11ff7e00]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (min-width:640px){.sm\:px-0[data-v-11ff7e00]{padding-left:0;padding-right:0}.sm\:px-6[data-v-11ff7e00]{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-3[data-v-11ff7e00]{padding-bottom:.75rem;padding-top:.75rem}.sm\:text-4xl[data-v-11ff7e00]{font-size:2.25rem;line-height:2.5rem}.sm\:text-xl[data-v-11ff7e00]{font-size:1.25rem;line-height:1.75rem}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.spotlight[data-v-ea2ac144]{background:linear-gradient(45deg,#00dc82,#36e4da 50%,#0047e1);filter:blur(20vh)}.fixed[data-v-ea2ac144]{position:fixed}.-bottom-1\/2[data-v-ea2ac144]{bottom:-50%}.left-0[data-v-ea2ac144]{left:0}.right-0[data-v-ea2ac144]{right:0}.grid[data-v-ea2ac144]{display:grid}.mb-16[data-v-ea2ac144]{margin-bottom:4rem}.mb-8[data-v-ea2ac144]{margin-bottom:2rem}.h-1\/2[data-v-ea2ac144]{height:50%}.max-w-520px[data-v-ea2ac144]{max-width:520px}.min-h-screen[data-v-ea2ac144]{min-height:100vh}.place-content-center[data-v-ea2ac144]{place-content:center}.overflow-hidden[data-v-ea2ac144]{overflow:hidden}.bg-white[data-v-ea2ac144]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-8[data-v-ea2ac144]{padding-left:2rem;padding-right:2rem}.text-center[data-v-ea2ac144]{text-align:center}.text-8xl[data-v-ea2ac144]{font-size:6rem;line-height:1}.text-xl[data-v-ea2ac144]{font-size:1.25rem;line-height:1.75rem}.text-black[data-v-ea2ac144]{--un-text-opacity:1;color:rgb(0 0 0/var(--un-text-opacity))}.font-light[data-v-ea2ac144]{font-weight:300}.font-medium[data-v-ea2ac144]{font-weight:500}.leading-tight[data-v-ea2ac144]{line-height:1.25}.font-sans[data-v-ea2ac144]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.antialiased[data-v-ea2ac144]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-black[data-v-ea2ac144]{--un-bg-opacity:1;background-color:rgb(0 0 0/var(--un-bg-opacity))}.dark\:text-white[data-v-ea2ac144]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (min-width:640px){.sm\:px-0[data-v-ea2ac144]{padding-left:0;padding-right:0}.sm\:text-4xl[data-v-ea2ac144]{font-size:2.25rem;line-height:2.5rem}}
|