nuxt-i18n-micro 3.26.0 → 3.28.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.
@@ -1 +1 @@
1
- {"id":"24f3c578-f02b-41bc-953a-c7ff7b504d56","timestamp":1785527483273}
1
+ {"id":"474d10ab-3098-4ac2-b6bf-953a2bab350d","timestamp":1785940941724}
@@ -0,0 +1 @@
1
+ {"id":"474d10ab-3098-4ac2-b6bf-953a2bab350d","timestamp":1785940941724,"prerendered":[]}
@@ -1 +1 @@
1
- :root{--nui-c-context:125,125,125}html{background-color:#fff}html.dark{color:#fff;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;background-color:#151515}::selection{background:#8884}.shiki .line{width:100%;display:inline-block;position:relative}.shiki.diff .line>span{filter:saturate(.75);opacity:.75}.shiki.diff .line-added,.shiki.diff .line-removed{scroll-margin:5em}.shiki.diff .line-added>span,.shiki.diff .line-removed>span{position:inherit;z-index:100;scroll-margin:20px;opacity:1!important}.shiki.diff .line-added>span{color:#218c3b!important}.shiki.diff .line-removed>span{color:#d15547!important}.shiki .line-added:after{background-color:#43885420}.shiki .line-added:after,.shiki .line-removed:after{content:"";display:block;position:absolute;inset:0}.shiki .line-removed:after{background-color:#8f4c3926}::view-transition-new(root){mix-blend-mode:normal;animation:none}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:2147483646}.dark::view-transition-old(root){z-index:2147483646}.dark::view-transition-new(root){z-index:1}*,:after,:before{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}:host,html{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}menu,ol,ul{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}@font-face{font-family:DM Mono;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/dmmono/v16/aFTU7PB1QTsUX8KYthSQBK6PYK3EXw.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:DM Mono;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/dmmono/v16/aFTU7PB1QTsUX8KYthqQBK6PYK0.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:DM Sans;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/dmsans/v17/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAopxRR232RmYJp8I5zzw.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:DM Sans;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/dmsans/v17/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAopxRSW32RmYJp8I5.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}*,:after,:before,::backdrop{--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:#93c5fd80;--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: }.container{width:100%}@media (width>=640px){.container{max-width:640px}}@media (width>=768px){.container{max-width:768px}}@media (width>=1024px){.container{max-width:1024px}}@media (width>=1280px){.container{max-width:1280px}}@media (width>=1536px){.container{max-width:1536px}}.grid{display:grid}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.max-w-520px{max-width:520px}.min-h-screen{min-height:100vh}.w-full{width:100%}.flex{display:flex}.place-content-center{place-content:center}.items-center{align-items:center}.justify-center{justify-content:center}.overflow-hidden{overflow:hidden}.bg-white{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.dark .dark\:bg-\[\#020420\]{--un-bg-opacity:1;background-color:rgb(2 4 32/var(--un-bg-opacity))}.px-2{padding-left:.5rem;padding-right:.5rem}.text-center{text-align:center}.text-\[80px\]{font-size:80px}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.dark .dark\:text-white{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}.text-\[\#020420\]{--un-text-opacity:1;color:rgb(2 4 32/var(--un-text-opacity))}.text-\[\#64748B\]{--un-text-opacity:1;color:rgb(100 116 139/var(--un-text-opacity))}.hover\:text-\[\#00DC82\]:hover{--un-text-opacity:1;color:rgb(0 220 130/var(--un-text-opacity))}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-none{line-height:1}.tracking-wide{letter-spacing:.025em}.font-sans{font-family:DM Sans,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}.tabular-nums{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.underline{text-decoration-line:underline}.underline-offset-3{text-underline-offset:3px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (width>=640px){.sm\:text-\[110px\]{font-size:110px}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}}
1
+ :root{--nui-c-context:125,125,125}html{background-color:#fff}html.dark{color:#fff;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;background-color:#151515}::selection{background:#8884}.shiki .line{width:100%;display:inline-block;position:relative}.shiki.diff .line>span{filter:saturate(.75);opacity:.75}.shiki.diff .line-added,.shiki.diff .line-removed{scroll-margin:5em}.shiki.diff .line-added>span,.shiki.diff .line-removed>span{position:inherit;z-index:100;scroll-margin:20px;opacity:1!important}.shiki.diff .line-added>span{color:#218c3b!important}.shiki.diff .line-removed>span{color:#d15547!important}.shiki .line-added:after{background-color:#43885420}.shiki .line-added:after,.shiki .line-removed:after{content:"";display:block;position:absolute;inset:0}.shiki .line-removed:after{background-color:#8f4c3926}::view-transition-new(root){mix-blend-mode:normal;animation:none}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:2147483646}.dark::view-transition-old(root){z-index:2147483646}.dark::view-transition-new(root){z-index:1}*,:after,:before{border-color:var(--un-default-border-color,#e5e7eb);box-sizing:border-box;border-style:solid;border-width:0}:after,:before{--un-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;font-variation-settings:normal;tab-size:4;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}hr{color:inherit;border-top-width:1px;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}menu,ol,ul{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{color:#9ca3af;opacity:1}textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}@font-face{font-display:swap;font-family:DM Mono;font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/dmmono/v16/aFTU7PB1QTsUX8KYthSQBK6PYK3EXw.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-display:swap;font-family:DM Mono;font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/dmmono/v16/aFTU7PB1QTsUX8KYthqQBK6PYK0.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-display:swap;font-family:DM Sans;font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/dmsans/v17/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAopxRR232RmYJp8I5zzw.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-display:swap;font-family:DM Sans;font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/dmsans/v17/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAopxRSW32RmYJp8I5.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}*,:after,:before,::backdrop{--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:#93c5fd80;--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: }.container{width:100%}@media (width>=640px){.container{max-width:640px}}@media (width>=768px){.container{max-width:768px}}@media (width>=1024px){.container{max-width:1024px}}@media (width>=1280px){.container{max-width:1280px}}@media (width>=1536px){.container{max-width:1536px}}.grid{display:grid}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.max-w-520px{max-width:520px}.min-h-screen{min-height:100vh}.w-full{width:100%}.flex{display:flex}.place-content-center{place-content:center}.items-center{align-items:center}.justify-center{justify-content:center}.overflow-hidden{overflow:hidden}.bg-white{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.dark .dark\:bg-\[\#020420\]{--un-bg-opacity:1;background-color:rgb(2 4 32/var(--un-bg-opacity))}.px-2{padding-left:.5rem;padding-right:.5rem}.text-center{text-align:center}.text-\[80px\]{font-size:80px}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.dark .dark\:text-white{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}.text-\[\#020420\]{--un-text-opacity:1;color:rgb(2 4 32/var(--un-text-opacity))}.text-\[\#64748B\]{--un-text-opacity:1;color:rgb(100 116 139/var(--un-text-opacity))}.hover\:text-\[\#00DC82\]:hover{--un-text-opacity:1;color:rgb(0 220 130/var(--un-text-opacity))}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-none{line-height:1}.tracking-wide{letter-spacing:.025em}.font-sans{font-family:DM Sans,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}.tabular-nums{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.underline{text-decoration-line:underline}.underline-offset-3{text-underline-offset:3px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (width>=640px){.sm\:text-\[110px\]{font-size:110px}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}}
@@ -0,0 +1 @@
1
+ .grid[data-v-4d1e665c]{display:grid}.mb-2[data-v-4d1e665c]{margin-bottom:.5rem}.mb-4[data-v-4d1e665c]{margin-bottom:1rem}.max-w-520px[data-v-4d1e665c]{max-width:520px}.min-h-screen[data-v-4d1e665c]{min-height:100vh}.w-full[data-v-4d1e665c]{width:100%}.flex[data-v-4d1e665c]{display:flex}.place-content-center[data-v-4d1e665c]{place-content:center}.items-center[data-v-4d1e665c]{align-items:center}.justify-center[data-v-4d1e665c]{justify-content:center}.overflow-hidden[data-v-4d1e665c]{overflow:hidden}.bg-white[data-v-4d1e665c]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-2[data-v-4d1e665c]{padding-left:.5rem;padding-right:.5rem}.text-center[data-v-4d1e665c]{text-align:center}.text-\[80px\][data-v-4d1e665c]{font-size:80px}.text-2xl[data-v-4d1e665c]{font-size:1.5rem;line-height:2rem}.text-sm[data-v-4d1e665c]{font-size:.875rem;line-height:1.25rem}.text-\[\#020420\][data-v-4d1e665c]{--un-text-opacity:1;color:rgb(2 4 32/var(--un-text-opacity))}.text-\[\#64748B\][data-v-4d1e665c]{--un-text-opacity:1;color:rgb(100 116 139/var(--un-text-opacity))}.hover\:text-\[\#00DC82\][data-v-4d1e665c]:hover{--un-text-opacity:1;color:rgb(0 220 130/var(--un-text-opacity))}.font-medium[data-v-4d1e665c]{font-weight:500}.font-semibold[data-v-4d1e665c]{font-weight:600}.leading-none[data-v-4d1e665c]{line-height:1}.tracking-wide[data-v-4d1e665c]{letter-spacing:.025em}.font-sans[data-v-4d1e665c]{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}.tabular-nums[data-v-4d1e665c]{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.underline[data-v-4d1e665c]{text-decoration-line:underline}.underline-offset-3[data-v-4d1e665c]{text-underline-offset:3px}.antialiased[data-v-4d1e665c]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-\[\#020420\][data-v-4d1e665c]{--un-bg-opacity:1;background-color:rgb(2 4 32/var(--un-bg-opacity))}.dark\:text-white[data-v-4d1e665c]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (width>=640px){.sm\:text-\[110px\][data-v-4d1e665c]{font-size:110px}.sm\:text-3xl[data-v-4d1e665c]{font-size:1.875rem;line-height:2.25rem}}
@@ -0,0 +1 @@
1
+ .grid[data-v-0954b774]{display:grid}.mb-2[data-v-0954b774]{margin-bottom:.5rem}.mb-4[data-v-0954b774]{margin-bottom:1rem}.max-w-520px[data-v-0954b774]{max-width:520px}.min-h-screen[data-v-0954b774]{min-height:100vh}.place-content-center[data-v-0954b774]{place-content:center}.overflow-hidden[data-v-0954b774]{overflow:hidden}.bg-white[data-v-0954b774]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-2[data-v-0954b774]{padding-left:.5rem;padding-right:.5rem}.text-center[data-v-0954b774]{text-align:center}.text-\[80px\][data-v-0954b774]{font-size:80px}.text-2xl[data-v-0954b774]{font-size:1.5rem;line-height:2rem}.text-\[\#020420\][data-v-0954b774]{--un-text-opacity:1;color:rgb(2 4 32/var(--un-text-opacity))}.text-\[\#64748B\][data-v-0954b774]{--un-text-opacity:1;color:rgb(100 116 139/var(--un-text-opacity))}.font-semibold[data-v-0954b774]{font-weight:600}.leading-none[data-v-0954b774]{line-height:1}.tracking-wide[data-v-0954b774]{letter-spacing:.025em}.font-sans[data-v-0954b774]{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}.tabular-nums[data-v-0954b774]{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.antialiased[data-v-0954b774]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-\[\#020420\][data-v-0954b774]{--un-bg-opacity:1;background-color:rgb(2 4 32/var(--un-bg-opacity))}.dark\:text-white[data-v-0954b774]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (width>=640px){.sm\:text-\[110px\][data-v-0954b774]{font-size:110px}.sm\:text-3xl[data-v-0954b774]{font-size:1.875rem;line-height:2.25rem}}
@@ -1 +1 @@
1
- import{$ as e,A as t,D as n,I as r,J as i,N as a,O as o,P as s,S as c,St as l,W as u,X as d,_ as f,at as p,ct as m,it as h,q as g,v as _,z as v}from"./DBXvRcU1.js";import{n as y,t as b}from"./DbtvxgAm.js";import{a as x,c as S,d as C,f as w,i as T,l as E,n as D,o as O,p as k,r as A,s as j,t as M,u as N}from"#entry";async function P(e,t=j()){let{path:n,matched:r}=t.resolve(e);if(!r.length||(t._routePreloaded||=new Set,t._routePreloaded.has(n)))return;let i=t._preloadPromises||=[];if(i.length>4)return Promise.all(i).then(()=>P(e,t));t._routePreloaded.add(n);for(let e of r){let t=e.components?.default;if(typeof t!=`function`)continue;let n=Promise.resolve(t()).catch(()=>{}).finally(()=>i.splice(i.indexOf(n),1));i.push(n)}await Promise.all(i)}var F=(...e)=>e.find(e=>e!==void 0);function I(e){let t=e.replace(/[\u0000-\u001F\s]+/g,``);for(;t.toLowerCase().startsWith(`view-source:`);)t=t.slice(12);let n=t.indexOf(`:`);return n>0&&E(t.slice(0,n+1))?null:e}function L(e){let t=e.componentName||`NuxtLink`;function i(e){return typeof e==`string`&&e.startsWith(`#`)}function a(t,n,r){let i=r??e.trailingSlash;if(!t||i!==`append`&&i!==`remove`)return t;if(typeof t==`string`)return z(t,i);let a=`path`in t&&t.path!==void 0?t.path:n(t).path;return{...t,name:void 0,path:z(a,i)}}function o(t){let r=j(),o=_(),s=n(()=>!!m(t.target)&&m(t.target)!==`_self`),c=n(()=>{let e=m(t.to)||m(t.href)||``;return typeof e==`string`&&S(e,{acceptRelative:!0})}),l=d(`RouterLink`),u=l&&typeof l!=`string`?l.useLink:void 0,f=n(()=>{if(m(t.external))return!0;let e=m(t.to)||m(t.href)||``;return typeof e==`object`?!1:e===``||c.value}),p=n(()=>{let e=m(t.to)||m(t.href)||``;return f.value?e:a(e,r.resolve,m(t.trailingSlash))}),h=f.value?void 0:u?.({...t,to:p,viewTransition:m(t.viewTransition)}),g=n(()=>{let n=m(t.trailingSlash)??e.trailingSlash;if(!p.value||c.value||i(p.value)){let e=p.value;return typeof e==`string`?I(e):e}if(f.value){let e=typeof p.value==`object`&&`path`in p.value?O(p.value):p.value,t=typeof e==`object`?r.resolve(e).href:e,i=typeof t==`string`?I(t):t;return i===null?null:z(i,n)}return typeof p.value==`object`?r.resolve(p.value)?.href??null:z(N(o.app.baseURL,p.value),n)});return{to:p,hasTarget:s,isAbsoluteUrl:c,isExternal:f,href:g,isActive:h?.isActive??n(()=>p.value===r.currentRoute.value.path),isExactActive:h?.isExactActive??n(()=>p.value===r.currentRoute.value.path),route:h?.route??n(()=>r.resolve(p.value)),async navigate(e){g.value!==null&&await x(g.value,{replace:m(t.replace),external:f.value||s.value})}}}return r({name:t,props:{to:{type:[String,Object],default:void 0,required:!1},href:{type:[String,Object],default:void 0,required:!1},target:{type:String,default:void 0,required:!1},rel:{type:String,default:void 0,required:!1},noRel:{type:Boolean,default:void 0,required:!1},prefetch:{type:Boolean,default:void 0,required:!1},prefetchOn:{type:[String,Object],default:void 0,required:!1},noPrefetch:{type:Boolean,default:void 0,required:!1},activeClass:{type:String,default:void 0,required:!1},exactActiveClass:{type:String,default:void 0,required:!1},prefetchedClass:{type:String,default:void 0,required:!1},replace:{type:Boolean,default:void 0,required:!1},ariaCurrentValue:{type:String,default:void 0,required:!1},external:{type:Boolean,default:void 0,required:!1},custom:{type:Boolean,default:void 0,required:!1},trailingSlash:{type:String,default:void 0,required:!1}},useLink:o,setup(t,{slots:n}){let r=j(),{to:a,href:s,navigate:c,isExternal:l,hasTarget:m,isAbsoluteUrl:_}=o(t),y=p(!1),b=h(null),x=e=>{b.value=t.custom?e?.$el?.nextElementSibling:e?.$el};function S(n){return!!(!y.value&&(typeof t.prefetchOn==`string`?t.prefetchOn===n:t.prefetchOn?.[n]??e.prefetchOn?.[n])&&(t.prefetch??e.prefetch)!==!1&&t.noPrefetch!==!0&&t.target!==`_blank`&&!H())}async function w(e=f()){if(y.value||s.value===null)return;y.value=!0;let t=typeof a.value==`string`?a.value:l.value?O(a.value):r.resolve(a.value).fullPath,n=l.value?new URL(t,window.location.href).href:t;await Promise.all([e.hooks.callHook(`link:prefetch`,n)?.catch(()=>{}),!l.value&&!m.value&&P(a.value,r).catch(()=>{})])}if(!t.custom&&S(`visibility`)){let e=f(),t,n=null;g(()=>{let r=B();M(()=>{t=A(()=>{b?.value?.tagName&&(n=r.observe(b.value,async()=>{n?.(),n=null,await w(e)}))})})}),u(()=>{t&&D(t),n?.(),n=null})}return()=>{let o=t.target||null,u=F(t.noRel?``:t.rel,e.externalRelAttribute,_.value||m.value?`noopener noreferrer`:``)||null,f=e=>({href:s.value,navigate:c,get route(){if(!s.value)return;let e=new URL(s.value,window.location.href);return{path:e.pathname,fullPath:e.pathname,get query(){return C(e.search)},hash:e.hash,params:{},name:void 0,matched:[],redirectedFrom:void 0,meta:{},href:s.value}},rel:u,target:o,isExternal:l.value||m.value,isActive:!1,isExactActive:!1,...e,prefetch:w,prefetched:y.value,shouldPrefetch:S});if(!l.value&&!m.value&&!i(a.value)){let r={ref:x,to:a.value,activeClass:t.activeClass||e.activeClass,exactActiveClass:t.exactActiveClass||e.exactActiveClass,replace:t.replace,ariaCurrentValue:t.ariaCurrentValue,custom:t.custom};return t.custom||(S(`interaction`)&&(r.onPointerenter=w.bind(null,void 0),r.onFocus=w.bind(null,void 0)),y.value&&(r.class=t.prefetchedClass||e.prefetchedClass),r.rel=t.rel||void 0),v(d(`RouterLink`),r,t.custom&&n.default?{default:e=>n.default(f(e))}:n.default)}return t.custom?n.default?n.default(f()):null:v(`a`,{ref:b,href:s.value||null,rel:u,target:o,onClick:async e=>{if(!(l.value||m.value)){e.preventDefault();try{let e=T(s.value??``);return await(t.replace?r.replace(e):r.push(e))}finally{if(i(a.value)){let e=a.value.slice(1),t=e;try{t=decodeURIComponent(e)}catch{}document.getElementById(t)?.focus()}}}}},n.default?.())}}})}var R=L(c);function z(e,t){if(t!==`append`&&t!==`remove`)return e;let n=t===`append`?w:k;return S(e)&&!e.startsWith(`http`)?e:n(e,!0)}function B(){let e=f();if(e._observer)return e._observer;let t=null,n=new Map;return e._observer={observe:(e,r)=>(t||=new IntersectionObserver(e=>{for(let t of e){let e=n.get(t.target);(t.isIntersecting||t.intersectionRatio>0)&&e&&e()}}),n.set(e,r),t.observe(e),()=>{n.delete(e),t?.unobserve(e),n.size===0&&(t?.disconnect(),t=null)})}}var V=/2g/;function H(){let e=navigator.connection;return!!(e&&(e.saveData||V.test(e.effectiveType)))}var U={class:`antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide`},W={class:`max-w-520px text-center`},G=[`textContent`],K=[`textContent`],q=[`textContent`],J={class:`flex items-center justify-center w-full`},Y=b({__name:`error-404`,props:{appName:{type:String,default:`Nuxt`},status:{type:Number,default:404},statusText:{type:String,default:`Page 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(n){let r=n;return y({title:`${r.status} - ${r.statusText} | ${r.appName}`,script:[{innerHTML:`!function(){let e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(let e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(let t of e)if("childList"===t.type)for(let e of t.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;let r=function(e){let 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:[{innerHTML:`*,:after,:before{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}html{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}h1,h2{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}h1,h2,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 #0000;--un-ring-shadow:0 0 #0000;--un-shadow-inset: ;--un-shadow:0 0 #0000;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:#93c5fd80;--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: }`}]}),(r,c)=>{let u=R;return i(),t(`div`,U,[o(`div`,W,[o(`h1`,{class:`font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]`,textContent:l(n.status)},null,8,G),o(`h2`,{class:`font-semibold mb-2 sm:text-3xl text-2xl`,textContent:l(n.statusText)},null,8,K),o(`p`,{class:`mb-4 px-2 text-[#64748B] text-md`,textContent:l(n.description)},null,8,q),o(`div`,J,[s(u,{to:`/`,class:`font-medium hover:text-[#00DC82] text-sm underline underline-offset-3`},{default:e(()=>[a(l(n.backHome),1)]),_:1})])])])}}},[[`__scopeId`,`data-v-2a91edc4`]]);export{Y as default};
1
+ import{$ as e,A as t,D as n,I as r,J as i,N as a,O as o,P as s,S as c,St as l,W as u,X as d,_ as f,at as p,ct as m,it as h,q as g,v as _,z as v}from"./DBXvRcU1.js";import{n as y,t as b}from"./DbtvxgAm.js";import{a as x,c as S,d as C,f as w,i as T,l as E,n as D,o as O,p as k,r as A,s as j,t as M,u as N}from"#entry";async function P(e,t=j()){let{path:n,matched:r}=t.resolve(e);if(!r.length||(t._routePreloaded||=new Set,t._routePreloaded.has(n)))return;let i=t._preloadPromises||=[];if(i.length>4)return Promise.all(i).then(()=>P(e,t));t._routePreloaded.add(n);for(let e of r){let t=e.components?.default;if(typeof t!=`function`)continue;let n=Promise.resolve(t()).catch(()=>{}).finally(()=>i.splice(i.indexOf(n),1));i.push(n)}await Promise.all(i)}var F=(...e)=>e.find(e=>e!==void 0);function I(e){let t=e.replace(/[\u0000-\u001F\s]+/g,``);for(;t.toLowerCase().startsWith(`view-source:`);)t=t.slice(12);let n=t.indexOf(`:`);return n>0&&E(t.slice(0,n+1))?null:e}function L(e){let t=e.componentName||`NuxtLink`;function i(e){return typeof e==`string`&&e.startsWith(`#`)}function a(t,n,r){let i=r??e.trailingSlash;if(!t||i!==`append`&&i!==`remove`)return t;if(typeof t==`string`)return z(t,i);let a=`path`in t&&t.path!==void 0?t.path:n(t).path;return{...t,name:void 0,path:z(a,i)}}function o(t){let r=j(),o=_(),s=n(()=>!!m(t.target)&&m(t.target)!==`_self`),c=n(()=>{let e=m(t.to)||m(t.href)||``;return typeof e==`string`&&S(e,{acceptRelative:!0})}),l=d(`RouterLink`),u=l&&typeof l!=`string`?l.useLink:void 0,f=n(()=>{if(m(t.external))return!0;let e=m(t.to)||m(t.href)||``;return typeof e==`object`?!1:e===``||c.value}),p=n(()=>{let e=m(t.to)||m(t.href)||``;return f.value?e:a(e,r.resolve,m(t.trailingSlash))}),h=f.value?void 0:u?.({...t,to:p,viewTransition:m(t.viewTransition)}),g=n(()=>{let n=m(t.trailingSlash)??e.trailingSlash;if(!p.value||c.value||i(p.value)){let e=p.value;return typeof e==`string`?I(e):e}if(f.value){let e=typeof p.value==`object`&&`path`in p.value?O(p.value):p.value,t=typeof e==`object`?r.resolve(e).href:e,i=typeof t==`string`?I(t):t;return i===null?null:z(i,n)}return typeof p.value==`object`?r.resolve(p.value)?.href??null:z(N(o.app.baseURL,p.value),n)});return{to:p,hasTarget:s,isAbsoluteUrl:c,isExternal:f,href:g,isActive:h?.isActive??n(()=>p.value===r.currentRoute.value.path),isExactActive:h?.isExactActive??n(()=>p.value===r.currentRoute.value.path),route:h?.route??n(()=>r.resolve(p.value)),async navigate(e){g.value!==null&&await x(g.value,{replace:m(t.replace),external:f.value||s.value})}}}return r({name:t,props:{to:{type:[String,Object],default:void 0,required:!1},href:{type:[String,Object],default:void 0,required:!1},target:{type:String,default:void 0,required:!1},rel:{type:String,default:void 0,required:!1},noRel:{type:Boolean,default:void 0,required:!1},prefetch:{type:Boolean,default:void 0,required:!1},prefetchOn:{type:[String,Object],default:void 0,required:!1},noPrefetch:{type:Boolean,default:void 0,required:!1},activeClass:{type:String,default:void 0,required:!1},exactActiveClass:{type:String,default:void 0,required:!1},prefetchedClass:{type:String,default:void 0,required:!1},replace:{type:Boolean,default:void 0,required:!1},ariaCurrentValue:{type:String,default:void 0,required:!1},external:{type:Boolean,default:void 0,required:!1},custom:{type:Boolean,default:void 0,required:!1},trailingSlash:{type:String,default:void 0,required:!1}},useLink:o,setup(t,{slots:n}){let r=j(),{to:a,href:s,navigate:c,isExternal:l,hasTarget:m,isAbsoluteUrl:_}=o(t),y=p(!1),b=h(null),x=e=>{b.value=t.custom?e?.$el?.nextElementSibling:e?.$el};function S(n){return!!(!y.value&&(typeof t.prefetchOn==`string`?t.prefetchOn===n:t.prefetchOn?.[n]??e.prefetchOn?.[n])&&(t.prefetch??e.prefetch)!==!1&&t.noPrefetch!==!0&&t.target!==`_blank`&&!H())}async function w(e=f()){if(y.value||s.value===null)return;y.value=!0;let t=typeof a.value==`string`?a.value:l.value?O(a.value):r.resolve(a.value).fullPath,n=l.value?new URL(t,window.location.href).href:t;await Promise.all([e.hooks.callHook(`link:prefetch`,n)?.catch(()=>{}),!l.value&&!m.value&&P(a.value,r).catch(()=>{})])}if(!t.custom&&S(`visibility`)){let e=f(),t,n=null;g(()=>{let r=B();M(()=>{t=A(()=>{b?.value?.tagName&&(n=r.observe(b.value,async()=>{n?.(),n=null,await w(e)}))})})}),u(()=>{t&&D(t),n?.(),n=null})}return()=>{let o=t.target||null,u=F(t.noRel?``:t.rel,e.externalRelAttribute,_.value||m.value?`noopener noreferrer`:``)||null,f=e=>({href:s.value,navigate:c,get route(){if(!s.value)return;let e=new URL(s.value,window.location.href);return{path:e.pathname,fullPath:e.pathname,get query(){return C(e.search)},hash:e.hash,params:{},name:void 0,matched:[],redirectedFrom:void 0,meta:{},href:s.value}},rel:u,target:o,isExternal:l.value||m.value,isActive:!1,isExactActive:!1,...e,prefetch:w,prefetched:y.value,shouldPrefetch:S});if(!l.value&&!m.value&&!i(a.value)){let r={ref:x,to:a.value,activeClass:t.activeClass||e.activeClass,exactActiveClass:t.exactActiveClass||e.exactActiveClass,replace:t.replace,ariaCurrentValue:t.ariaCurrentValue,custom:t.custom};return t.custom||(S(`interaction`)&&(r.onPointerenter=w.bind(null,void 0),r.onFocus=w.bind(null,void 0)),y.value&&(r.class=t.prefetchedClass||e.prefetchedClass),r.rel=t.rel||void 0),v(d(`RouterLink`),r,t.custom&&n.default?{default:e=>n.default(f(e))}:n.default)}return t.custom?n.default?n.default(f()):null:v(`a`,{ref:b,href:s.value||null,rel:u,target:o,onClick:async e=>{if(!(l.value||m.value)){e.preventDefault();try{let e=T(s.value??``);return await(t.replace?r.replace(e):r.push(e))}finally{if(i(a.value)){let e=a.value.slice(1),t=e;try{t=decodeURIComponent(e)}catch{}document.getElementById(t)?.focus()}}}}},n.default?.())}}})}var R=L(c);function z(e,t){if(t!==`append`&&t!==`remove`)return e;let n=t===`append`?w:k;return S(e)&&!e.startsWith(`http`)?e:n(e,!0)}function B(){let e=f();if(e._observer)return e._observer;let t=null,n=new Map;return e._observer={observe:(e,r)=>(t||=new IntersectionObserver(e=>{for(let t of e){let e=n.get(t.target);(t.isIntersecting||t.intersectionRatio>0)&&e&&e()}}),n.set(e,r),t.observe(e),()=>{n.delete(e),t?.unobserve(e),n.size===0&&(t?.disconnect(),t=null)})}}var V=/2g/;function H(){let e=navigator.connection;return!!(e&&(e.saveData||V.test(e.effectiveType)))}var U={class:`antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide`},W={class:`max-w-520px text-center`},G=[`textContent`],K=[`textContent`],q=[`textContent`],J={class:`flex items-center justify-center w-full`},Y=b({__name:`error-404`,props:{appName:{type:String,default:`Nuxt`},status:{type:Number,default:404},statusText:{type:String,default:`Page 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(n){let r=n;return y({title:`${r.status} - ${r.statusText} | ${r.appName}`,script:[{innerHTML:`!function(){let e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(let e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(let t of e)if("childList"===t.type)for(let e of t.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;let r=function(e){let 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:[{innerHTML:`*,:after,:before{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}html{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}h1,h2{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}h1,h2,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 #0000;--un-ring-shadow:0 0 #0000;--un-shadow-inset: ;--un-shadow:0 0 #0000;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:#93c5fd80;--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: }`}]}),(r,c)=>{let u=R;return i(),t(`div`,U,[o(`div`,W,[o(`h1`,{class:`font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]`,textContent:l(n.status)},null,8,G),o(`h2`,{class:`font-semibold mb-2 sm:text-3xl text-2xl`,textContent:l(n.statusText)},null,8,K),o(`p`,{class:`mb-4 px-2 text-[#64748B] text-md`,textContent:l(n.description)},null,8,q),o(`div`,J,[s(u,{to:`/`,class:`font-medium hover:text-[#00DC82] text-sm underline underline-offset-3`},{default:e(()=>[a(l(n.backHome),1)]),_:1})])])])}}},[[`__scopeId`,`data-v-4d1e665c`]]);export{Y as default};
@@ -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-i18n-micro/_nuxt/Bwak6g3b.js"}}</script><link rel="stylesheet" href="/__nuxt-i18n-micro/_nuxt/entry.CJGrD2VA.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/Bwak6g3b.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/DBXvRcU1.js"><script type="module" src="/__nuxt-i18n-micro/_nuxt/Bwak6g3b.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/__nuxt-i18n-micro/_nuxt/error-500.BcWSpGYy.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/p3h4sA5-.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/DbtvxgAm.js"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-i18n-micro",buildId:"24f3c578-f02b-41bc-953a-c7ff7b504d56",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1785527485918,false]</script></body></html>
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-i18n-micro/_nuxt/B-YzqMkr.js"}}</script><link rel="stylesheet" href="/__nuxt-i18n-micro/_nuxt/entry.DYT8mjOq.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/B-YzqMkr.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/DBXvRcU1.js"><script type="module" src="/__nuxt-i18n-micro/_nuxt/B-YzqMkr.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/__nuxt-i18n-micro/_nuxt/error-500.D5pBYfcl.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/310ILlAI.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/DbtvxgAm.js"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-i18n-micro",buildId:"474d10ab-3098-4ac2-b6bf-953a2bab350d",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1785940944185,false]</script></body></html>
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "nuxt-i18n-micro",
3
3
  "configKey": "i18n",
4
- "version": "3.26.0",
4
+ "version": "3.28.0",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "3.6.1"
package/dist/module.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as fs from 'node:fs';
2
2
  import fs__default, { readFileSync, mkdirSync, writeFileSync, existsSync } from 'node:fs';
3
- import path, { resolve, join, dirname } from 'node:path';
3
+ import path, { dirname, resolve, join } from 'node:path';
4
4
  import { fileURLToPath, pathToFileURL } from 'node:url';
5
5
  import { defaultPlural, isNoPrefixStrategy, withPrefixStrategy } from '@i18n-micro/core';
6
6
  import { generateHmrPlugin } from '@i18n-micro/hmr/generate-plugin';
@@ -22,12 +22,31 @@ import { parse } from '@vue/compiler-sfc';
22
22
  const DEVTOOLS_UI_PORT = 3030;
23
23
  const DEVTOOLS_UI_ROUTE = "/__nuxt-i18n-micro";
24
24
  const DEVTOOLS_RPC_NAMESPACE = "nuxt-i18n-micro";
25
- const distDir = resolve(fileURLToPath(import.meta.url), "..");
26
- const clientDir = resolve(distDir, "client");
25
+ const thisDir = dirname(fileURLToPath(import.meta.url));
26
+ const packageRoot = resolve(thisDir, "..");
27
+ const clientDir = resolveClientDir();
28
+ function resolveClientDir() {
29
+ const candidates = [
30
+ resolve(thisDir, "client"),
31
+ // dist/client next to dist/module.mjs
32
+ resolve(thisDir, "../dist/client"),
33
+ // src/devtools.ts → repo dist/client
34
+ resolve(thisDir, "../client/dist")
35
+ // client/dist symlink used in-repo
36
+ ];
37
+ return candidates.find((dir) => fs.existsSync(path.join(dir, "index.html"))) ?? candidates[0];
38
+ }
39
+ function resolveClientPackageDir() {
40
+ return resolve(packageRoot, "client");
41
+ }
42
+ function useLiveClientDevServer() {
43
+ return process.env.I18N_DEVTOOLS_CLIENT_DEV === "1" || process.env.I18N_DEVTOOLS_CLIENT_DEV === "true";
44
+ }
27
45
  function setupDevToolsUI(options, rootDirs) {
28
46
  const nuxt = useNuxt();
29
- const hasPrebuiltClient = fs.existsSync(clientDir);
30
- if (hasPrebuiltClient) {
47
+ const hasPrebuiltClient = fs.existsSync(path.join(clientDir, "index.html"));
48
+ const liveClient = useLiveClientDevServer();
49
+ if (hasPrebuiltClient && !liveClient) {
31
50
  addDevServerHandler({
32
51
  route: DEVTOOLS_UI_ROUTE,
33
52
  handler: fromNodeMiddleware(sirv(clientDir, { dev: true, single: true }))
@@ -37,7 +56,7 @@ function setupDevToolsUI(options, rootDirs) {
37
56
  {
38
57
  command: "npx",
39
58
  args: ["nuxi", "dev", "--port", String(DEVTOOLS_UI_PORT)],
40
- cwd: resolve(distDir, "../client")
59
+ cwd: resolveClientPackageDir()
41
60
  },
42
61
  { id: "nuxt-i18n-micro:client", name: "i18n Micro DevTools UI" }
43
62
  );
@@ -46,7 +65,9 @@ function setupDevToolsUI(options, rootDirs) {
46
65
  // `addDevServerHandler` strips the mount prefix, so `event.path` arrives as `/`
47
66
  // or `/_nuxt/...` and the route has to be put back on for the client dev server,
48
67
  // which serves itself under that same base.
49
- handler: defineEventHandler((event) => proxyRequest(event, `http://localhost:${DEVTOOLS_UI_PORT}${joinURL(DEVTOOLS_UI_ROUTE, event.path)}`))
68
+ handler: defineEventHandler(
69
+ (event) => proxyRequest(event, `http://localhost:${DEVTOOLS_UI_PORT}${joinURL(DEVTOOLS_UI_ROUTE, event.path || "/")}`)
70
+ )
50
71
  });
51
72
  }
52
73
  addCustomTab({
@@ -852,6 +873,14 @@ const module$1 = defineNuxtModule({
852
873
  order: 3
853
874
  });
854
875
  }
876
+ if (nuxt.options.dev && options.plugin !== false && options.vueDevtools !== false) {
877
+ addPlugin({
878
+ src: resolver.resolve("./runtime/plugins/04.vue-devtools"),
879
+ name: "i18n-vue-devtools",
880
+ mode: "client",
881
+ order: 5
882
+ });
883
+ }
855
884
  addPlugin({
856
885
  src: resolver.resolve("./runtime/plugins/06.redirect"),
857
886
  mode: "server",
@@ -0,0 +1,11 @@
1
+ import type { ModuleOptionsExtend } from '@i18n-micro/types';
2
+ import type { Ref } from 'vue';
3
+ import type { NuxtI18n } from '../utils/nuxt-i18n.js';
4
+ export declare const I18N_DEVTOOLS_BRIDGE_KEY = "i18n-micro-devtools-bridge";
5
+ export interface I18nDevtoolsBridge {
6
+ i18n: NuxtI18n;
7
+ i18nConfig: ModuleOptionsExtend;
8
+ localeState: Ref<string | null>;
9
+ }
10
+ export declare function setI18nDevtoolsBridge(value: I18nDevtoolsBridge | null): void;
11
+ export declare function getI18nDevtoolsBridge(): I18nDevtoolsBridge | null;
@@ -0,0 +1,8 @@
1
+ export const I18N_DEVTOOLS_BRIDGE_KEY = "i18n-micro-devtools-bridge";
2
+ let bridge = null;
3
+ export function setI18nDevtoolsBridge(value) {
4
+ bridge = value;
5
+ }
6
+ export function getI18nDevtoolsBridge() {
7
+ return bridge;
8
+ }
@@ -0,0 +1,18 @@
1
+ import type { ModuleOptionsExtend } from '@i18n-micro/types';
2
+ import type { App } from 'vue';
3
+ import type { I18nContextChangeReason, NuxtI18n } from '../utils/nuxt-i18n.js';
4
+ export interface VueI18nDevtoolsContext {
5
+ app: App;
6
+ i18n: NuxtI18n;
7
+ i18nConfig: ModuleOptionsExtend;
8
+ onContextChange: (listener: (reason: I18nContextChangeReason) => void) => () => void;
9
+ onMissingKey: (listener: (locale: string, key: string, routeName: string) => void) => () => void;
10
+ }
11
+ export interface VueI18nDevtoolsNotifier {
12
+ notifyLocaleSwitch: (from: string, to: string, routeName: string) => void;
13
+ notifyLoad: (locale: string, routeName: string, keyCount: number) => void;
14
+ notifyTranslate: (key: string, result: unknown) => void;
15
+ refreshInspector: () => void;
16
+ }
17
+ export declare function setupVueI18nDevtools(ctx: VueI18nDevtoolsContext): Promise<VueI18nDevtoolsNotifier | null>;
18
+ export declare function countLoadedTranslationKeys(i18n: NuxtI18n, locale: string, routeName: string): number;
@@ -0,0 +1,261 @@
1
+ import {
2
+ buildInspectorState,
3
+ buildInspectorTree,
4
+ countTranslationKeys,
5
+ getByInspectorPath,
6
+ parseInspectorNodeId
7
+ } from "@i18n-micro/core/devtools";
8
+ const INSPECTOR_ID = "i18n-micro-inspector";
9
+ const PLUGIN_ID = "nuxt-i18n-micro";
10
+ const TIMELINE_LAYER_ID = "i18n-micro";
11
+ const isPlainObject = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
12
+ function toInspectorState(snapshot) {
13
+ const groups = buildInspectorState(snapshot);
14
+ const state = {};
15
+ for (const [group, entries] of Object.entries(groups)) {
16
+ state[group] = entries.map((entry) => ({
17
+ key: entry.key,
18
+ value: entry.value
19
+ }));
20
+ }
21
+ return state;
22
+ }
23
+ function createSnapshot(i18n, i18nConfig) {
24
+ return {
25
+ locale: i18n.getCurrentLocale(),
26
+ routeName: i18n.getCurrentRouteName() || "index",
27
+ strategy: i18nConfig.strategy,
28
+ defaultLocale: i18nConfig.defaultLocale,
29
+ fallbackLocale: i18nConfig.fallbackLocale,
30
+ cachedChunks: i18n.storage.translations.size,
31
+ locales: (i18nConfig.locales ?? []).map((locale) => ({
32
+ code: locale.code,
33
+ displayName: locale.displayName,
34
+ disabled: locale.disabled
35
+ }))
36
+ };
37
+ }
38
+ function buildNodeState(i18n, i18nConfig, nodeId) {
39
+ const parsed = parseInspectorNodeId(nodeId);
40
+ if (parsed.kind === "active") {
41
+ return {
42
+ Translations: objectToStateEntries(i18n.resolveTranslations())
43
+ };
44
+ }
45
+ if (parsed.kind === "locale" && parsed.locale) {
46
+ const locale = parsed.locale;
47
+ const configured = (i18nConfig.locales ?? []).find((item) => item.code === locale);
48
+ const prefix = `${locale}:`;
49
+ const chunks = [];
50
+ for (const [cacheKey, data] of i18n.storage.translations) {
51
+ if (!cacheKey.startsWith(prefix)) continue;
52
+ const routeName = cacheKey.slice(prefix.length) || "index";
53
+ chunks.push({
54
+ key: routeName,
55
+ value: `${countTranslationKeys(data)} keys`
56
+ });
57
+ }
58
+ chunks.sort((a, b) => a.key.localeCompare(b.key));
59
+ return {
60
+ Locale: [
61
+ { key: "code", value: locale },
62
+ { key: "displayName", value: configured?.displayName ?? locale },
63
+ { key: "disabled", value: Boolean(configured?.disabled) },
64
+ { key: "isActive", value: i18n.getCurrentLocale() === locale },
65
+ { key: "loadedChunks", value: chunks.length }
66
+ ],
67
+ Chunks: chunks.length ? chunks : [{ key: "\u2014", value: "No translation chunks loaded for this locale yet" }]
68
+ };
69
+ }
70
+ if (parsed.kind === "chunk" && parsed.locale) {
71
+ const routeName = parsed.routeName || "index";
72
+ const cacheKey = `${parsed.locale}:${routeName}`;
73
+ const chunk = i18n.storage.translations.get(cacheKey);
74
+ if (!chunk) {
75
+ return {
76
+ Chunk: [
77
+ { key: "cacheKey", value: cacheKey },
78
+ { key: "status", value: "not loaded" }
79
+ ]
80
+ };
81
+ }
82
+ const entries = objectToStateEntries(chunk);
83
+ return {
84
+ Chunk: [
85
+ { key: "cacheKey", value: cacheKey },
86
+ { key: "keys", value: countTranslationKeys(chunk) },
87
+ {
88
+ key: "isActive",
89
+ value: i18n.getCurrentLocale() === parsed.locale && (i18n.getCurrentRouteName() || "index") === routeName
90
+ }
91
+ ],
92
+ Translations: entries.length ? entries : [{ key: "\u2014", value: "Chunk is loaded but empty" }]
93
+ };
94
+ }
95
+ if (parsed.kind === "key" && parsed.locale) {
96
+ const routeName = parsed.routeName || "index";
97
+ const segments = parsed.segments ?? [];
98
+ const chunk = i18n.storage.translations.get(`${parsed.locale}:${routeName}`);
99
+ const isActive = i18n.getCurrentLocale() === parsed.locale && (i18n.getCurrentRouteName() || "index") === routeName;
100
+ const source = isActive ? i18n.resolveTranslations() : chunk ?? {};
101
+ const value = segments.length ? getByInspectorPath(source, segments) : source;
102
+ if (isPlainObject(value)) {
103
+ return { [segments.join(".") || "root"]: objectToStateEntries(value) };
104
+ }
105
+ return {
106
+ Value: [{ key: segments.join(".") || "value", value }]
107
+ };
108
+ }
109
+ return toInspectorState(createSnapshot(i18n, i18nConfig));
110
+ }
111
+ function objectToStateEntries(obj, limit = 500) {
112
+ const entries = [];
113
+ let truncated = false;
114
+ const queue = [{ node: obj, prefix: "" }];
115
+ while (queue.length > 0) {
116
+ const { node, prefix } = queue.shift();
117
+ const nested = [];
118
+ for (const key of Object.keys(node)) {
119
+ if (key === "__proto__") continue;
120
+ if (entries.length >= limit) {
121
+ truncated = true;
122
+ break;
123
+ }
124
+ const path = prefix ? `${prefix}.${key}` : key;
125
+ const value = node[key];
126
+ if (isPlainObject(value)) {
127
+ nested.push({ node: value, prefix: path });
128
+ continue;
129
+ }
130
+ entries.push({ key: path, value });
131
+ }
132
+ if (truncated) break;
133
+ queue.push(...nested);
134
+ }
135
+ entries.sort((a, b) => a.key.localeCompare(b.key));
136
+ if (truncated) {
137
+ entries.push({
138
+ key: "\u2026",
139
+ value: `Showing first ${limit} leaves (nested keys flattened)`
140
+ });
141
+ }
142
+ return entries;
143
+ }
144
+ export async function setupVueI18nDevtools(ctx) {
145
+ if (!import.meta.dev || import.meta.server) {
146
+ return null;
147
+ }
148
+ let notifier = null;
149
+ try {
150
+ const { setupDevtoolsPlugin } = await import("@vue/devtools-api");
151
+ setupDevtoolsPlugin(
152
+ {
153
+ id: PLUGIN_ID,
154
+ label: "i18n Micro",
155
+ packageName: "nuxt-i18n-micro",
156
+ homepage: "https://s00d.github.io/nuxt-i18n-micro/",
157
+ logo: "https://s00d.github.io/nuxt-i18n-micro/favicon.svg",
158
+ app: ctx.app,
159
+ enableEarlyProxy: true
160
+ },
161
+ (api) => {
162
+ const refreshInspector = () => {
163
+ api.sendInspectorTree(INSPECTOR_ID);
164
+ api.sendInspectorState(INSPECTOR_ID);
165
+ };
166
+ api.addInspector({
167
+ id: INSPECTOR_ID,
168
+ label: "i18n Micro",
169
+ icon: "carbon:language",
170
+ actions: [
171
+ {
172
+ icon: "refresh",
173
+ tooltip: "Refresh inspector",
174
+ action: refreshInspector
175
+ }
176
+ ]
177
+ });
178
+ api.addTimelineLayer({
179
+ id: TIMELINE_LAYER_ID,
180
+ label: "i18n Micro",
181
+ color: 4372611
182
+ });
183
+ api.on.getInspectorTree((payload) => {
184
+ if (payload.inspectorId !== INSPECTOR_ID) return;
185
+ payload.rootNodes = buildInspectorTree({
186
+ nodeId: "root",
187
+ storage: ctx.i18n.storage,
188
+ configuredLocales: ctx.i18nConfig.locales ?? [],
189
+ activeLocale: ctx.i18n.getCurrentLocale(),
190
+ activeRouteName: ctx.i18n.getCurrentRouteName() || "index",
191
+ activeTranslations: ctx.i18n.resolveTranslations()
192
+ });
193
+ });
194
+ api.on.getInspectorState((payload) => {
195
+ if (payload.inspectorId !== INSPECTOR_ID) return;
196
+ payload.state = payload.nodeId ? buildNodeState(ctx.i18n, ctx.i18nConfig, payload.nodeId) : toInspectorState(createSnapshot(ctx.i18n, ctx.i18nConfig));
197
+ });
198
+ ctx.onContextChange(() => {
199
+ refreshInspector();
200
+ });
201
+ ctx.onMissingKey((locale, key, routeName) => {
202
+ api.addTimelineEvent({
203
+ layerId: TIMELINE_LAYER_ID,
204
+ event: {
205
+ time: api.now(),
206
+ title: "Missing translation",
207
+ subtitle: key,
208
+ data: { locale, key, routeName }
209
+ }
210
+ });
211
+ });
212
+ notifier = {
213
+ notifyLocaleSwitch(from, to, routeName) {
214
+ api.addTimelineEvent({
215
+ layerId: TIMELINE_LAYER_ID,
216
+ event: {
217
+ time: api.now(),
218
+ title: "Locale switch",
219
+ subtitle: `${from || "\u2014"} \u2192 ${to}`,
220
+ data: { from, to, routeName }
221
+ }
222
+ });
223
+ refreshInspector();
224
+ },
225
+ notifyLoad(locale, routeName, keyCount) {
226
+ api.addTimelineEvent({
227
+ layerId: TIMELINE_LAYER_ID,
228
+ event: {
229
+ time: api.now(),
230
+ title: "Translations loaded",
231
+ subtitle: `${locale}:${routeName}`,
232
+ data: { locale, routeName, keyCount }
233
+ }
234
+ });
235
+ refreshInspector();
236
+ },
237
+ notifyTranslate(key, result) {
238
+ api.addTimelineEvent({
239
+ layerId: TIMELINE_LAYER_ID,
240
+ event: {
241
+ time: api.now(),
242
+ title: "$t",
243
+ subtitle: key,
244
+ data: { key, result }
245
+ }
246
+ });
247
+ },
248
+ refreshInspector
249
+ };
250
+ refreshInspector();
251
+ }
252
+ );
253
+ } catch {
254
+ return null;
255
+ }
256
+ return notifier;
257
+ }
258
+ export function countLoadedTranslationKeys(i18n, locale, routeName) {
259
+ const chunk = i18n.storage.translations.get(i18n.getCacheKey(locale, routeName));
260
+ return countTranslationKeys(chunk);
261
+ }
@@ -7,6 +7,7 @@ import { createError, defineNuxtPlugin, navigateTo, useRouter, useRuntimeConfig
7
7
  import { useI18nHead } from "../composables/useI18nHead.js";
8
8
  import { useI18nLocale } from "../composables/useI18nLocale.js";
9
9
  import { createNuxtI18nPluginApi, NuxtI18n, NuxtTranslationLoader } from "../utils/nuxt-i18n.js";
10
+ import { setI18nDevtoolsBridge } from "../devtools/bridge.js";
10
11
  import { translationStorage } from "../utils/storage.js";
11
12
  const isDev = process.env.NODE_ENV !== "production";
12
13
  export default defineNuxtPlugin(async (nuxtApp) => {
@@ -28,6 +29,7 @@ export default defineNuxtPlugin(async (nuxtApp) => {
28
29
  const i18n = new NuxtI18n({
29
30
  plural,
30
31
  missingWarn: i18nConfig.missingWarn ?? true,
32
+ cacheMaxSize: i18nConfig.cacheMaxSize ?? 0,
31
33
  getCustomMissingHandler: () => customMissingHandler.value,
32
34
  numberFormats: i18nConfig.numberFormats,
33
35
  datetimeFormats: i18nConfig.datetimeFormats
@@ -102,6 +104,13 @@ export default defineNuxtPlugin(async (nuxtApp) => {
102
104
  customMissingHandler.value = handler;
103
105
  }
104
106
  });
107
+ if (import.meta.dev && import.meta.client) {
108
+ setI18nDevtoolsBridge({
109
+ i18n,
110
+ i18nConfig,
111
+ localeState
112
+ });
113
+ }
105
114
  router.beforeEach(async (to, from) => {
106
115
  if (to.name !== from.name) {
107
116
  i18nRouteParams.value = {};
@@ -0,0 +1,2 @@
1
+ declare const _default: import("nuxt/app").Plugin<Record<string, unknown>> & import("nuxt/app").ObjectPlugin<Record<string, unknown>>;
2
+ export default _default;
@@ -0,0 +1,60 @@
1
+ import { defineNuxtPlugin, useNuxtApp } from "#imports";
2
+ import { watch } from "vue";
3
+ import { getI18nDevtoolsBridge } from "../devtools/bridge.js";
4
+ import { countLoadedTranslationKeys, setupVueI18nDevtools } from "../devtools/vue-devtools.js";
5
+ export default defineNuxtPlugin({
6
+ name: "i18n-vue-devtools",
7
+ dependsOn: ["i18n-plugin-loader"],
8
+ async setup() {
9
+ if (!import.meta.dev || import.meta.server) {
10
+ return;
11
+ }
12
+ const nuxtApp = useNuxtApp();
13
+ const bridge = getI18nDevtoolsBridge();
14
+ if (!bridge) {
15
+ return;
16
+ }
17
+ const notifier = await setupVueI18nDevtools({
18
+ app: nuxtApp.vueApp,
19
+ i18n: bridge.i18n,
20
+ i18nConfig: bridge.i18nConfig,
21
+ onContextChange: (listener) => bridge.i18n.onContextChange(listener),
22
+ onMissingKey: (listener) => bridge.i18n.onMissingKey(listener)
23
+ });
24
+ if (!notifier) {
25
+ return;
26
+ }
27
+ const notifyCurrentLoad = () => {
28
+ const locale = bridge.i18n.getCurrentLocale();
29
+ const routeName = bridge.i18n.getCurrentRouteName() || "index";
30
+ notifier.notifyLoad(locale, routeName, countLoadedTranslationKeys(bridge.i18n, locale, routeName));
31
+ };
32
+ notifyCurrentLoad();
33
+ watch(
34
+ () => bridge.localeState.value,
35
+ (to, from) => {
36
+ if (to && from && to !== from) {
37
+ notifier.notifyLocaleSwitch(from, to, bridge.i18n.getCurrentRouteName() || "index");
38
+ }
39
+ }
40
+ );
41
+ bridge.i18n.onContextChange((reason) => {
42
+ if (reason === "load") {
43
+ notifyCurrentLoad();
44
+ return;
45
+ }
46
+ notifier.refreshInspector();
47
+ });
48
+ if (bridge.i18nConfig.debug) {
49
+ const wrapTranslate = (translate) => ((key, ...args) => {
50
+ const result = translate(key, ...args);
51
+ notifier.notifyTranslate(key, result);
52
+ return result;
53
+ });
54
+ const app = nuxtApp;
55
+ app.$t = wrapTranslate(app.$t.bind(app));
56
+ app.$ts = wrapTranslate(app.$ts.bind(app));
57
+ app.$tc = wrapTranslate(app.$tc.bind(app));
58
+ }
59
+ }
60
+ });