@koine/next 2.0.0-beta.133 → 2.0.0-beta.135
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/12/AnalyticsGoogle.cjs.js +1 -3
- package/12/AnalyticsGoogle.esm.js +1 -3
- package/12/DisableErrorOverlay.cjs.js +1 -5
- package/12/DisableErrorOverlay.esm.js +1 -5
- package/ThemeContext.cjs.js +1 -2
- package/ThemeContext.esm.js +1 -2
- package/ThemeProvider.cjs.js +1 -30
- package/ThemeProvider.esm.js +3 -32
- package/config.cjs.js +1 -31
- package/config.esm.js +1 -31
- package/load.cjs.js +1 -8
- package/load.esm.js +1 -8
- package/package.json +5 -4
- package/useTheme.cjs.js +1 -3
- package/useTheme.esm.js +1 -3
|
@@ -8,9 +8,7 @@ var o = require('next/script');
|
|
|
8
8
|
var react = require('react');
|
|
9
9
|
var browser = require('@koine/browser');
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
react.useEffect(()=>{let e=()=>{u(!0);};return m.on("routeChangeComplete",e),()=>{m.off("routeChangeComplete",e);}},[m]),react.useEffect(()=>{w&&p&&c&&// const search = query;
|
|
13
|
-
browser.gtagPageview(c);},[c,d,w,p]),l)?/*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[/*#__PURE__*/jsxRuntime.jsx(o,{id:"google-tagmanager",src:`https://www.googletagmanager.com/gtag/js?id=${s}`,strategy:"afterInteractive",onLoad:()=>f(!0)}),/*#__PURE__*/jsxRuntime.jsx(o,{id:"google-analytics",strategy:"afterInteractive",children:`
|
|
11
|
+
let AnalyticsGoogle=({id:s})=>{let l=s||process.env.NEXT_PUBLIC_GTM_ID,{events:m,asPath:c,query:d}=router.useRouter(),[p,f]=react.useState(!1),[w,u]=react.useState(!1);return (react.useEffect(()=>{let e=()=>{u(!0);};return m.on("routeChangeComplete",e),()=>{m.off("routeChangeComplete",e);}},[m]),react.useEffect(()=>{w&&p&&c&&browser.gtagPageview(c);},[c,d,w,p]),l)?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(o,{id:"google-tagmanager",src:`https://www.googletagmanager.com/gtag/js?id=${s}`,strategy:"afterInteractive",onLoad:()=>f(!0)}),jsxRuntime.jsx(o,{id:"google-analytics",strategy:"afterInteractive",children:`
|
|
14
12
|
window.dataLayer = window.dataLayer || [];
|
|
15
13
|
function gtag(){window.dataLayer.push(arguments);}
|
|
16
14
|
gtag('js', new Date());
|
|
@@ -4,9 +4,7 @@ import o from 'next/script';
|
|
|
4
4
|
import { useState, useEffect } from 'react';
|
|
5
5
|
import { gtagPageview } from '@koine/browser';
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
useEffect(()=>{let e=()=>{u(!0);};return m.on("routeChangeComplete",e),()=>{m.off("routeChangeComplete",e);}},[m]),useEffect(()=>{w&&p&&c&&// const search = query;
|
|
9
|
-
gtagPageview(c);},[c,d,w,p]),l)?/*#__PURE__*/jsxs(Fragment,{children:[/*#__PURE__*/jsx(o,{id:"google-tagmanager",src:`https://www.googletagmanager.com/gtag/js?id=${s}`,strategy:"afterInteractive",onLoad:()=>f(!0)}),/*#__PURE__*/jsx(o,{id:"google-analytics",strategy:"afterInteractive",children:`
|
|
7
|
+
let AnalyticsGoogle=({id:s})=>{let l=s||process.env.NEXT_PUBLIC_GTM_ID,{events:m,asPath:c,query:d}=useRouter(),[p,f]=useState(!1),[w,u]=useState(!1);return (useEffect(()=>{let e=()=>{u(!0);};return m.on("routeChangeComplete",e),()=>{m.off("routeChangeComplete",e);}},[m]),useEffect(()=>{w&&p&&c&>agPageview(c);},[c,d,w,p]),l)?jsxs(Fragment,{children:[jsx(o,{id:"google-tagmanager",src:`https://www.googletagmanager.com/gtag/js?id=${s}`,strategy:"afterInteractive",onLoad:()=>f(!0)}),jsx(o,{id:"google-analytics",strategy:"afterInteractive",children:`
|
|
10
8
|
window.dataLayer = window.dataLayer || [];
|
|
11
9
|
function gtag(){window.dataLayer.push(arguments);}
|
|
12
10
|
gtag('js', new Date());
|
|
@@ -5,11 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
var r = require('next/head');
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
* Disable error overlay during `dev`
|
|
10
|
-
*
|
|
11
|
-
* @see https://github.com/vercel/next.js/discussions/13387#discussioncomment-101564
|
|
12
|
-
*/let DisableErrorOverlay=()=>/*#__PURE__*/jsxRuntime.jsx(r,{children:"development"===process.env.NODE_ENV&&/*#__PURE__*/jsxRuntime.jsx("script",{dangerouslySetInnerHTML:{__html:"window.addEventListener('error',event =>{event.stopImmediatePropagation()});window.addEventListener('unhandledrejection',event =>{event.stopImmediatePropagation()});"}})});
|
|
8
|
+
let DisableErrorOverlay=()=>jsxRuntime.jsx(r,{children:"development"===process.env.NODE_ENV&&jsxRuntime.jsx("script",{dangerouslySetInnerHTML:{__html:"window.addEventListener('error',event =>{event.stopImmediatePropagation()});window.addEventListener('unhandledrejection',event =>{event.stopImmediatePropagation()});"}})});
|
|
13
9
|
|
|
14
10
|
exports.DisableErrorOverlay = DisableErrorOverlay;
|
|
15
11
|
exports.default = DisableErrorOverlay;
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import r from 'next/head';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
* Disable error overlay during `dev`
|
|
6
|
-
*
|
|
7
|
-
* @see https://github.com/vercel/next.js/discussions/13387#discussioncomment-101564
|
|
8
|
-
*/let DisableErrorOverlay=()=>/*#__PURE__*/jsx(r,{children:"development"===process.env.NODE_ENV&&/*#__PURE__*/jsx("script",{dangerouslySetInnerHTML:{__html:"window.addEventListener('error',event =>{event.stopImmediatePropagation()});window.addEventListener('unhandledrejection',event =>{event.stopImmediatePropagation()});"}})});
|
|
4
|
+
let DisableErrorOverlay=()=>jsx(r,{children:"development"===process.env.NODE_ENV&&jsx("script",{dangerouslySetInnerHTML:{__html:"window.addEventListener('error',event =>{event.stopImmediatePropagation()});window.addEventListener('unhandledrejection',event =>{event.stopImmediatePropagation()});"}})});
|
|
9
5
|
|
|
10
6
|
export { DisableErrorOverlay, DisableErrorOverlay as default };
|
package/ThemeContext.cjs.js
CHANGED
|
@@ -4,8 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var react = require('react');
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
setTheme:e=>{},themes:[]});
|
|
7
|
+
const ThemeContext=react.createContext({setTheme:e=>{},themes:[]});
|
|
9
8
|
|
|
10
9
|
exports.ThemeContext = ThemeContext;
|
|
11
10
|
exports.default = ThemeContext;
|
package/ThemeContext.esm.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { createContext } from 'react';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
setTheme:e=>{},themes:[]});
|
|
3
|
+
const ThemeContext=createContext({setTheme:e=>{},themes:[]});
|
|
5
4
|
|
|
6
5
|
export { ThemeContext, ThemeContext as default };
|
package/ThemeProvider.cjs.js
CHANGED
|
@@ -8,36 +8,7 @@ var react = require('react');
|
|
|
8
8
|
var utils = require('@koine/utils');
|
|
9
9
|
var ThemeContext = require('./ThemeContext.cjs.js');
|
|
10
10
|
|
|
11
|
-
let l=["light","dark"],d="(prefers-color-scheme: dark)",c="theme"
|
|
12
|
-
* @borrows [next-themes](https://github.com/pacocoursey/next-themes)
|
|
13
|
-
*
|
|
14
|
-
* Differences:
|
|
15
|
-
*
|
|
16
|
-
* - enableColorScheme: `false` by default (instead of `true`), this plays more
|
|
17
|
-
* nicely with tailwind `dark` class mode as dark theme is supposed to be only
|
|
18
|
-
* controlled by tailwind modifiers
|
|
19
|
-
*/const ThemeProvider=({forcedTheme:r,disableTransitionOnChange:o=!1,enableSystem:v=!0,enableColorScheme:y,themes:p=["light","dark"],defaultTheme:g=v?"system":"light",attribute:w="data-theme",value:x,children:S,nonce:k})=>{let[b,L]=react.useState(()=>u(c,g)),[T,j]=react.useState(()=>u(c)),C=x?Object.values(x):p,E=react.useCallback(e=>{let t=e;if(utils.isServer||!t)return;"system"===// If theme is system, resolve it before setting theme
|
|
20
|
-
e&&v&&(t=f());let r=x?x[t]:t,i=o?$():null,n=document.documentElement;if("class"===w?(n.classList.remove(...C),r&&n.classList.add(r)):r?n.setAttribute(w,r):n.removeAttribute(w),y){let e=l.includes(g)?g:"",r=l.includes(t)?t:e;n.style.colorScheme=r;}i?.();},[w,C,g,o,y,v,x]),I=react.useCallback(e=>{L(e);// Save to storage
|
|
21
|
-
try{localStorage.setItem(c,e);}catch(e){}},// Unsupported
|
|
22
|
-
[]),M=react.useCallback(e=>{j(f(e)),"system"===b&&v&&!r&&E("system");},[b,v,r,E]);return(// Always listen to System preference
|
|
23
|
-
react.useEffect(()=>{let e=window.matchMedia(d);return(// Intentionally use deprecated listener methods to support iOS & old browsers
|
|
24
|
-
e.addListener(M),M(e),()=>e.removeListener(M))},[M]),// localStorage event handling
|
|
25
|
-
react.useEffect(()=>{let e=e=>{e.key===c&&I(// If default theme set, use it if localstorage === null (happens on local storage manual deletion)
|
|
26
|
-
e.newValue||g);};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[g,I]),// Whenever theme or forcedTheme changes, apply it
|
|
27
|
-
react.useEffect(()=>{E(r??b);},[E,r,b]),/*#__PURE__*/jsxRuntime.jsxs(ThemeContext.ThemeContext.Provider,{value:{theme:b,setTheme:I,forcedTheme:r,resolvedTheme:"system"===b?T:b,themes:v?[...p,"system"]:p,systemTheme:v?T:void 0},children:[/*#__PURE__*/jsxRuntime.jsx(h,{forcedTheme:r,disableTransitionOnChange:o,enableSystem:v,enableColorScheme:y,themes:p,defaultTheme:g,attribute:w,value:x,children:S,attrs:C,nonce:k}),S]}))};let h=/*#__PURE__*/react.memo(({forcedTheme:t,attribute:o$1,enableSystem:i,enableColorScheme:n,defaultTheme:s,value:a,attrs:m,nonce:h})=>{let u="system"===s,// Code-golfing the amount of characters in the script
|
|
28
|
-
$=(()=>{let e=`d.remove(${m.map(e=>`'${e}'`).join(",")})`;return `var d=document.documentElement.classList;${e};`})(),f=n?(l.includes(s)?s:null)?`if(e==='light'||e==='dark'||!e)d.style.colorScheme=e||'${s}'`:"if(e==='light'||e==='dark')d.style.colorScheme=e":"",y=(e,t=!1,r=!0)=>{let i=a?a[e]:e,s=t?e+"|| ''":`'${i}'`,m="";return(// MUCH faster to set colorScheme alongside HTML attribute/class
|
|
29
|
-
// as it only incurs 1 style recalculation rather than 2
|
|
30
|
-
// This can save over 250ms of work for pages with big DOM
|
|
31
|
-
n&&r&&!t&&l.includes(e)&&(m+=`d.style.colorScheme = '${e}';`),"class"===o$1?t||i?m+=`d.add(${s})`:m+="null":i&&(m+=`d[s](n, ${s})`),m)},p=t?`!function(){${$}${y(t)}}()`:i?`!function(){try {${$}var e=localStorage.getItem('${c}');if("system"===e||(!e&&${u})){var t="${d}",m=window.matchMedia(t);if(m.media!==t||m.matches){${y("dark")}}else{${y("light")}}}else if(e){${a?`var x=${JSON.stringify(a)};`:""}${y(a?"x[e]":"e",!0)}}${u?"":"else{"+y(s,!1,!1)+"}"}${f}}catch(e){}}()`:`!function(){try{${$}var e=localStorage.getItem("${c}");if(e){${a?`var x=${JSON.stringify(a)};`:""}${y(a?"x[e]":"e",!0)}}else{${y(s,!1,!1)};}${f}}catch(t){}}();`;return /*#__PURE__*/jsxRuntime.jsx(o,{id:"next-theme-script",strategy:"beforeInteractive",src:// We MUST use next/script's `beforeInteractive` strategy to avoid flashing on load.
|
|
32
|
-
// However, it only accepts the `src` prop, not `dangerouslySetInnerHTML` or `children`
|
|
33
|
-
// But our script cannot be external because it changes at runtime based on React props
|
|
34
|
-
// so we trick next/script by passing `src` as a base64 JS script
|
|
35
|
-
`data:text/javascript;base64,${v(p)}`,nonce:h})},// Never re-render this component
|
|
36
|
-
()=>!0),// Helpers
|
|
37
|
-
u=(e,t)=>{let r;if(!utils.isServer){try{r=localStorage.getItem(e)||void 0;}catch(e){}// Unsupported
|
|
38
|
-
return r||t}},$=()=>{let e=document,t=e.createElement("style");return t.appendChild(e.createTextNode("*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),e.head.appendChild(t),()=>{// Force restyle
|
|
39
|
-
window.getComputedStyle(e.body),// Wait for next tick before removing
|
|
40
|
-
setTimeout(()=>{e.head.removeChild(t);},1);}},f=e=>(e||(e=window.matchMedia(d)),e.matches?"dark":"light"),v=e=>utils.isServer?Buffer.from(e).toString("base64"):btoa(e);
|
|
11
|
+
let l=["light","dark"],d="(prefers-color-scheme: dark)",c="theme";const ThemeProvider=({forcedTheme:r,disableTransitionOnChange:o=!1,enableSystem:v=!0,enableColorScheme:y,themes:p=["light","dark"],defaultTheme:g=v?"system":"light",attribute:w="data-theme",value:x,children:S,nonce:k})=>{let[b,L]=react.useState(()=>u(c,g)),[T,j]=react.useState(()=>u(c)),C=x?Object.values(x):p,E=react.useCallback(e=>{let t=e;if(utils.isServer||!t)return;"system"===e&&v&&(t=f());let r=x?x[t]:t,i=o?$():null,n=document.documentElement;if("class"===w?(n.classList.remove(...C),r&&n.classList.add(r)):r?n.setAttribute(w,r):n.removeAttribute(w),y){let e=l.includes(g)?g:"",r=l.includes(t)?t:e;n.style.colorScheme=r;}i?.();},[w,C,g,o,y,v,x]),I=react.useCallback(e=>{L(e);try{localStorage.setItem(c,e);}catch(e){}},[]),M=react.useCallback(e=>{j(f(e)),"system"===b&&v&&!r&&E("system");},[b,v,r,E]);return react.useEffect(()=>{let e=window.matchMedia(d);return e.addListener(M),M(e),()=>e.removeListener(M)},[M]),react.useEffect(()=>{let e=e=>{e.key===c&&I(e.newValue||g);};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[g,I]),react.useEffect(()=>{E(r??b);},[E,r,b]),jsxRuntime.jsxs(ThemeContext.ThemeContext.Provider,{value:{theme:b,setTheme:I,forcedTheme:r,resolvedTheme:"system"===b?T:b,themes:v?[...p,"system"]:p,systemTheme:v?T:void 0},children:[jsxRuntime.jsx(h,{forcedTheme:r,disableTransitionOnChange:o,enableSystem:v,enableColorScheme:y,themes:p,defaultTheme:g,attribute:w,value:x,children:S,attrs:C,nonce:k}),S]})};let h=react.memo(({forcedTheme:t,attribute:o$1,enableSystem:i,enableColorScheme:n,defaultTheme:s,value:a,attrs:m,nonce:h})=>{let u="system"===s,$=(()=>{let e=`d.remove(${m.map(e=>`'${e}'`).join(",")})`;return `var d=document.documentElement.classList;${e};`})(),f=n?(l.includes(s)?s:null)?`if(e==='light'||e==='dark'||!e)d.style.colorScheme=e||'${s}'`:"if(e==='light'||e==='dark')d.style.colorScheme=e":"",y=(e,t=!1,r=!0)=>{let i=a?a[e]:e,s=t?e+"|| ''":`'${i}'`,m="";return n&&r&&!t&&l.includes(e)&&(m+=`d.style.colorScheme = '${e}';`),"class"===o$1?t||i?m+=`d.add(${s})`:m+="null":i&&(m+=`d[s](n, ${s})`),m},p=t?`!function(){${$}${y(t)}}()`:i?`!function(){try {${$}var e=localStorage.getItem('${c}');if("system"===e||(!e&&${u})){var t="${d}",m=window.matchMedia(t);if(m.media!==t||m.matches){${y("dark")}}else{${y("light")}}}else if(e){${a?`var x=${JSON.stringify(a)};`:""}${y(a?"x[e]":"e",!0)}}${u?"":"else{"+y(s,!1,!1)+"}"}${f}}catch(e){}}()`:`!function(){try{${$}var e=localStorage.getItem("${c}");if(e){${a?`var x=${JSON.stringify(a)};`:""}${y(a?"x[e]":"e",!0)}}else{${y(s,!1,!1)};}${f}}catch(t){}}();`;return jsxRuntime.jsx(o,{id:"next-theme-script",strategy:"beforeInteractive",src:`data:text/javascript;base64,${v(p)}`,nonce:h})},()=>!0),u=(e,t)=>{let r;if(!utils.isServer){try{r=localStorage.getItem(e)||void 0;}catch(e){}return r||t}},$=()=>{let e=document,t=e.createElement("style");return t.appendChild(e.createTextNode("*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),e.head.appendChild(t),()=>{window.getComputedStyle(e.body),setTimeout(()=>{e.head.removeChild(t);},1);}},f=e=>(e||(e=window.matchMedia(d)),e.matches?"dark":"light"),v=e=>utils.isServer?Buffer.from(e).toString("base64"):btoa(e);
|
|
41
12
|
|
|
42
13
|
exports.ThemeProvider = ThemeProvider;
|
|
43
14
|
exports.default = ThemeProvider;
|
package/ThemeProvider.esm.js
CHANGED
|
@@ -1,38 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import o from 'next/script';
|
|
3
|
-
import { useState, useCallback, useEffect
|
|
3
|
+
import { memo, useState, useCallback, useEffect } from 'react';
|
|
4
4
|
import { isServer } from '@koine/utils';
|
|
5
5
|
import { ThemeContext } from './ThemeContext.esm.js';
|
|
6
6
|
|
|
7
|
-
let l=["light","dark"],d="(prefers-color-scheme: dark)",c="theme"
|
|
8
|
-
* @borrows [next-themes](https://github.com/pacocoursey/next-themes)
|
|
9
|
-
*
|
|
10
|
-
* Differences:
|
|
11
|
-
*
|
|
12
|
-
* - enableColorScheme: `false` by default (instead of `true`), this plays more
|
|
13
|
-
* nicely with tailwind `dark` class mode as dark theme is supposed to be only
|
|
14
|
-
* controlled by tailwind modifiers
|
|
15
|
-
*/const ThemeProvider=({forcedTheme:r,disableTransitionOnChange:o=!1,enableSystem:v=!0,enableColorScheme:y,themes:p=["light","dark"],defaultTheme:g=v?"system":"light",attribute:w="data-theme",value:x,children:S,nonce:k})=>{let[b,L]=useState(()=>u(c,g)),[T,j]=useState(()=>u(c)),C=x?Object.values(x):p,E=useCallback(e=>{let t=e;if(isServer||!t)return;"system"===// If theme is system, resolve it before setting theme
|
|
16
|
-
e&&v&&(t=f());let r=x?x[t]:t,i=o?$():null,n=document.documentElement;if("class"===w?(n.classList.remove(...C),r&&n.classList.add(r)):r?n.setAttribute(w,r):n.removeAttribute(w),y){let e=l.includes(g)?g:"",r=l.includes(t)?t:e;n.style.colorScheme=r;}i?.();},[w,C,g,o,y,v,x]),I=useCallback(e=>{L(e);// Save to storage
|
|
17
|
-
try{localStorage.setItem(c,e);}catch(e){}},// Unsupported
|
|
18
|
-
[]),M=useCallback(e=>{j(f(e)),"system"===b&&v&&!r&&E("system");},[b,v,r,E]);return(// Always listen to System preference
|
|
19
|
-
useEffect(()=>{let e=window.matchMedia(d);return(// Intentionally use deprecated listener methods to support iOS & old browsers
|
|
20
|
-
e.addListener(M),M(e),()=>e.removeListener(M))},[M]),// localStorage event handling
|
|
21
|
-
useEffect(()=>{let e=e=>{e.key===c&&I(// If default theme set, use it if localstorage === null (happens on local storage manual deletion)
|
|
22
|
-
e.newValue||g);};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[g,I]),// Whenever theme or forcedTheme changes, apply it
|
|
23
|
-
useEffect(()=>{E(r??b);},[E,r,b]),/*#__PURE__*/jsxs(ThemeContext.Provider,{value:{theme:b,setTheme:I,forcedTheme:r,resolvedTheme:"system"===b?T:b,themes:v?[...p,"system"]:p,systemTheme:v?T:void 0},children:[/*#__PURE__*/jsx(h,{forcedTheme:r,disableTransitionOnChange:o,enableSystem:v,enableColorScheme:y,themes:p,defaultTheme:g,attribute:w,value:x,children:S,attrs:C,nonce:k}),S]}))};let h=/*#__PURE__*/memo(({forcedTheme:t,attribute:o$1,enableSystem:i,enableColorScheme:n,defaultTheme:s,value:a,attrs:m,nonce:h})=>{let u="system"===s,// Code-golfing the amount of characters in the script
|
|
24
|
-
$=(()=>{let e=`d.remove(${m.map(e=>`'${e}'`).join(",")})`;return `var d=document.documentElement.classList;${e};`})(),f=n?(l.includes(s)?s:null)?`if(e==='light'||e==='dark'||!e)d.style.colorScheme=e||'${s}'`:"if(e==='light'||e==='dark')d.style.colorScheme=e":"",y=(e,t=!1,r=!0)=>{let i=a?a[e]:e,s=t?e+"|| ''":`'${i}'`,m="";return(// MUCH faster to set colorScheme alongside HTML attribute/class
|
|
25
|
-
// as it only incurs 1 style recalculation rather than 2
|
|
26
|
-
// This can save over 250ms of work for pages with big DOM
|
|
27
|
-
n&&r&&!t&&l.includes(e)&&(m+=`d.style.colorScheme = '${e}';`),"class"===o$1?t||i?m+=`d.add(${s})`:m+="null":i&&(m+=`d[s](n, ${s})`),m)},p=t?`!function(){${$}${y(t)}}()`:i?`!function(){try {${$}var e=localStorage.getItem('${c}');if("system"===e||(!e&&${u})){var t="${d}",m=window.matchMedia(t);if(m.media!==t||m.matches){${y("dark")}}else{${y("light")}}}else if(e){${a?`var x=${JSON.stringify(a)};`:""}${y(a?"x[e]":"e",!0)}}${u?"":"else{"+y(s,!1,!1)+"}"}${f}}catch(e){}}()`:`!function(){try{${$}var e=localStorage.getItem("${c}");if(e){${a?`var x=${JSON.stringify(a)};`:""}${y(a?"x[e]":"e",!0)}}else{${y(s,!1,!1)};}${f}}catch(t){}}();`;return /*#__PURE__*/jsx(o,{id:"next-theme-script",strategy:"beforeInteractive",src:// We MUST use next/script's `beforeInteractive` strategy to avoid flashing on load.
|
|
28
|
-
// However, it only accepts the `src` prop, not `dangerouslySetInnerHTML` or `children`
|
|
29
|
-
// But our script cannot be external because it changes at runtime based on React props
|
|
30
|
-
// so we trick next/script by passing `src` as a base64 JS script
|
|
31
|
-
`data:text/javascript;base64,${v(p)}`,nonce:h})},// Never re-render this component
|
|
32
|
-
()=>!0),// Helpers
|
|
33
|
-
u=(e,t)=>{let r;if(!isServer){try{r=localStorage.getItem(e)||void 0;}catch(e){}// Unsupported
|
|
34
|
-
return r||t}},$=()=>{let e=document,t=e.createElement("style");return t.appendChild(e.createTextNode("*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),e.head.appendChild(t),()=>{// Force restyle
|
|
35
|
-
window.getComputedStyle(e.body),// Wait for next tick before removing
|
|
36
|
-
setTimeout(()=>{e.head.removeChild(t);},1);}},f=e=>(e||(e=window.matchMedia(d)),e.matches?"dark":"light"),v=e=>isServer?Buffer.from(e).toString("base64"):btoa(e);
|
|
7
|
+
let l=["light","dark"],d="(prefers-color-scheme: dark)",c="theme";const ThemeProvider=({forcedTheme:r,disableTransitionOnChange:o=!1,enableSystem:v=!0,enableColorScheme:y,themes:p=["light","dark"],defaultTheme:g=v?"system":"light",attribute:w="data-theme",value:x,children:S,nonce:k})=>{let[b,L]=useState(()=>u(c,g)),[T,j]=useState(()=>u(c)),C=x?Object.values(x):p,E=useCallback(e=>{let t=e;if(isServer||!t)return;"system"===e&&v&&(t=f());let r=x?x[t]:t,i=o?$():null,n=document.documentElement;if("class"===w?(n.classList.remove(...C),r&&n.classList.add(r)):r?n.setAttribute(w,r):n.removeAttribute(w),y){let e=l.includes(g)?g:"",r=l.includes(t)?t:e;n.style.colorScheme=r;}i?.();},[w,C,g,o,y,v,x]),I=useCallback(e=>{L(e);try{localStorage.setItem(c,e);}catch(e){}},[]),M=useCallback(e=>{j(f(e)),"system"===b&&v&&!r&&E("system");},[b,v,r,E]);return useEffect(()=>{let e=window.matchMedia(d);return e.addListener(M),M(e),()=>e.removeListener(M)},[M]),useEffect(()=>{let e=e=>{e.key===c&&I(e.newValue||g);};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[g,I]),useEffect(()=>{E(r??b);},[E,r,b]),jsxs(ThemeContext.Provider,{value:{theme:b,setTheme:I,forcedTheme:r,resolvedTheme:"system"===b?T:b,themes:v?[...p,"system"]:p,systemTheme:v?T:void 0},children:[jsx(h,{forcedTheme:r,disableTransitionOnChange:o,enableSystem:v,enableColorScheme:y,themes:p,defaultTheme:g,attribute:w,value:x,children:S,attrs:C,nonce:k}),S]})};let h=memo(({forcedTheme:t,attribute:o$1,enableSystem:i,enableColorScheme:n,defaultTheme:s,value:a,attrs:m,nonce:h})=>{let u="system"===s,$=(()=>{let e=`d.remove(${m.map(e=>`'${e}'`).join(",")})`;return `var d=document.documentElement.classList;${e};`})(),f=n?(l.includes(s)?s:null)?`if(e==='light'||e==='dark'||!e)d.style.colorScheme=e||'${s}'`:"if(e==='light'||e==='dark')d.style.colorScheme=e":"",y=(e,t=!1,r=!0)=>{let i=a?a[e]:e,s=t?e+"|| ''":`'${i}'`,m="";return n&&r&&!t&&l.includes(e)&&(m+=`d.style.colorScheme = '${e}';`),"class"===o$1?t||i?m+=`d.add(${s})`:m+="null":i&&(m+=`d[s](n, ${s})`),m},p=t?`!function(){${$}${y(t)}}()`:i?`!function(){try {${$}var e=localStorage.getItem('${c}');if("system"===e||(!e&&${u})){var t="${d}",m=window.matchMedia(t);if(m.media!==t||m.matches){${y("dark")}}else{${y("light")}}}else if(e){${a?`var x=${JSON.stringify(a)};`:""}${y(a?"x[e]":"e",!0)}}${u?"":"else{"+y(s,!1,!1)+"}"}${f}}catch(e){}}()`:`!function(){try{${$}var e=localStorage.getItem("${c}");if(e){${a?`var x=${JSON.stringify(a)};`:""}${y(a?"x[e]":"e",!0)}}else{${y(s,!1,!1)};}${f}}catch(t){}}();`;return jsx(o,{id:"next-theme-script",strategy:"beforeInteractive",src:`data:text/javascript;base64,${v(p)}`,nonce:h})},()=>!0),u=(e,t)=>{let r;if(!isServer){try{r=localStorage.getItem(e)||void 0;}catch(e){}return r||t}},$=()=>{let e=document,t=e.createElement("style");return t.appendChild(e.createTextNode("*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),e.head.appendChild(t),()=>{window.getComputedStyle(e.body),setTimeout(()=>{e.head.removeChild(t);},1);}},f=e=>(e||(e=window.matchMedia(d)),e.matches?"dark":"light"),v=e=>isServer?Buffer.from(e).toString("base64"):btoa(e);
|
|
37
8
|
|
|
38
9
|
export { ThemeProvider, ThemeProvider as default };
|
package/config.cjs.js
CHANGED
|
@@ -3,36 +3,6 @@
|
|
|
3
3
|
var swc = require('@koine/node/swc');
|
|
4
4
|
var next = require('@koine/i18n/next');
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
* @legacy
|
|
8
|
-
*//**
|
|
9
|
-
* A list of the packages to modularize, if a `scope` is given that will be
|
|
10
|
-
* automatically prepended before a slash e.g. `{scope}/@{lib}`.
|
|
11
|
-
* @example ["components", "utils"]
|
|
12
|
-
*//**
|
|
13
|
-
* The scope of the packages to modularize, if given a slash is automatically
|
|
14
|
-
* appended between the scope and the lib name
|
|
15
|
-
* @example "@"
|
|
16
|
-
*//**
|
|
17
|
-
* Shortcut option to automatically create swc transforms to feed into
|
|
18
|
-
* _Next.js_' `modularizeImports`
|
|
19
|
-
*//**
|
|
20
|
-
* Get Next.js config with some basic opinionated defaults
|
|
21
|
-
*
|
|
22
|
-
* @param {object} options
|
|
23
|
-
* @property {boolean} [options.nx=false] Nx monorepo setup
|
|
24
|
-
* @property {boolean} [options.svg=false] SVG to react components
|
|
25
|
-
*/let withKoine=(s={})=>{let{nx:n,svg:p,i18nRoutes:l,i18nCompiler:a,modularize:u,...m}=s,c={eslint:{ignoreDuringBuilds:!0},// we have this strict check on each commit
|
|
26
|
-
typescript:{ignoreBuildErrors:!0},// we have this strict check on each commit
|
|
27
|
-
poweredByHeader:!1,experimental:{// @see https://github.com/vercel/vercel/discussions/5973#discussioncomment-472618
|
|
28
|
-
// @see critters error https://github.com/vercel/next.js/issues/20742
|
|
29
|
-
// optimizeCss: true,
|
|
30
|
-
// @see https://github.com/vercel/next.js/discussions/30174#discussion-3643870
|
|
31
|
-
scrollRestoration:!0,...m.experimental||{}},// @see https://www.zhoulujun.net/nextjs/advanced-features/compiler.html#modularize-imports
|
|
32
|
-
modularizeImports:{...u?Array.isArray(u)?u.reduce((r,o)=>({...r,...swc.swcCreateTransforms(o.libs,o.scope)}),{}):swc.swcCreateTransforms(u.libs,u.scope):{},...m.modularizeImports||{},...swc.swcTransformsKoine},...m};return (p&&(n?// @see https://github.com/gregberge/svgr
|
|
33
|
-
c.nx={svgr:!0}:(// if falsy just remove the key
|
|
34
|
-
delete c.nx,c.webpack=(e,r)=>// ...[_config, options]: Parameters<NonNullable<NextConfig['webpack']>>
|
|
35
|
-
{let o="function"==typeof m.webpack?m.webpack(e,r):e;return(// @see https://dev.to/dolearning/importing-svgs-to-next-js-nna#svgr
|
|
36
|
-
o.module.rules.push({test:/\.svg$/,use:[{loader:"@svgr/webpack",options:{svgoConfig:{plugins:[{name:"removeViewBox",active:!1}]}}}]}),o)})),l)?next.withI18nLegacy({...c,i18nRoutes:l}):a?n?next.withI18nAsync({...c,i18nCompiler:a}):next.withI18n({...c,i18nCompiler:a}):c};
|
|
6
|
+
let withKoine=(s={})=>{let{nx:n,svg:p,i18nRoutes:l,i18nCompiler:a,modularize:u,...m}=s,c={eslint:{ignoreDuringBuilds:!0},typescript:{ignoreBuildErrors:!0},poweredByHeader:!1,experimental:{scrollRestoration:!0,...m.experimental||{}},modularizeImports:{...u?Array.isArray(u)?u.reduce((r,o)=>({...r,...swc.swcCreateTransforms(o.libs,o.scope)}),{}):swc.swcCreateTransforms(u.libs,u.scope):{},...m.modularizeImports||{},...swc.swcTransformsKoine},...m};return (p&&(n?c.nx={svgr:!0}:(delete c.nx,c.webpack=(e,r)=>{let o="function"==typeof m.webpack?m.webpack(e,r):e;return o.module.rules.push({test:/\.svg$/,use:[{loader:"@svgr/webpack",options:{svgoConfig:{plugins:[{name:"removeViewBox",active:!1}]}}}]}),o})),l)?next.withI18nLegacy({...c,i18nRoutes:l}):a?n?next.withI18nAsync({...c,i18nCompiler:a}):next.withI18n({...c,i18nCompiler:a}):c};
|
|
37
7
|
|
|
38
8
|
exports.withKoine = withKoine;
|
package/config.esm.js
CHANGED
|
@@ -1,36 +1,6 @@
|
|
|
1
1
|
import { swcCreateTransforms, swcTransformsKoine } from '@koine/node/swc';
|
|
2
2
|
import { withI18nLegacy, withI18nAsync, withI18n } from '@koine/i18n/next';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
* @legacy
|
|
6
|
-
*//**
|
|
7
|
-
* A list of the packages to modularize, if a `scope` is given that will be
|
|
8
|
-
* automatically prepended before a slash e.g. `{scope}/@{lib}`.
|
|
9
|
-
* @example ["components", "utils"]
|
|
10
|
-
*//**
|
|
11
|
-
* The scope of the packages to modularize, if given a slash is automatically
|
|
12
|
-
* appended between the scope and the lib name
|
|
13
|
-
* @example "@"
|
|
14
|
-
*//**
|
|
15
|
-
* Shortcut option to automatically create swc transforms to feed into
|
|
16
|
-
* _Next.js_' `modularizeImports`
|
|
17
|
-
*//**
|
|
18
|
-
* Get Next.js config with some basic opinionated defaults
|
|
19
|
-
*
|
|
20
|
-
* @param {object} options
|
|
21
|
-
* @property {boolean} [options.nx=false] Nx monorepo setup
|
|
22
|
-
* @property {boolean} [options.svg=false] SVG to react components
|
|
23
|
-
*/let withKoine=(s={})=>{let{nx:n,svg:p,i18nRoutes:l,i18nCompiler:a,modularize:u,...m}=s,c={eslint:{ignoreDuringBuilds:!0},// we have this strict check on each commit
|
|
24
|
-
typescript:{ignoreBuildErrors:!0},// we have this strict check on each commit
|
|
25
|
-
poweredByHeader:!1,experimental:{// @see https://github.com/vercel/vercel/discussions/5973#discussioncomment-472618
|
|
26
|
-
// @see critters error https://github.com/vercel/next.js/issues/20742
|
|
27
|
-
// optimizeCss: true,
|
|
28
|
-
// @see https://github.com/vercel/next.js/discussions/30174#discussion-3643870
|
|
29
|
-
scrollRestoration:!0,...m.experimental||{}},// @see https://www.zhoulujun.net/nextjs/advanced-features/compiler.html#modularize-imports
|
|
30
|
-
modularizeImports:{...u?Array.isArray(u)?u.reduce((r,o)=>({...r,...swcCreateTransforms(o.libs,o.scope)}),{}):swcCreateTransforms(u.libs,u.scope):{},...m.modularizeImports||{},...swcTransformsKoine},...m};return (p&&(n?// @see https://github.com/gregberge/svgr
|
|
31
|
-
c.nx={svgr:!0}:(// if falsy just remove the key
|
|
32
|
-
delete c.nx,c.webpack=(e,r)=>// ...[_config, options]: Parameters<NonNullable<NextConfig['webpack']>>
|
|
33
|
-
{let o="function"==typeof m.webpack?m.webpack(e,r):e;return(// @see https://dev.to/dolearning/importing-svgs-to-next-js-nna#svgr
|
|
34
|
-
o.module.rules.push({test:/\.svg$/,use:[{loader:"@svgr/webpack",options:{svgoConfig:{plugins:[{name:"removeViewBox",active:!1}]}}}]}),o)})),l)?withI18nLegacy({...c,i18nRoutes:l}):a?n?withI18nAsync({...c,i18nCompiler:a}):withI18n({...c,i18nCompiler:a}):c};
|
|
4
|
+
let withKoine=(s={})=>{let{nx:n,svg:p,i18nRoutes:l,i18nCompiler:a,modularize:u,...m}=s,c={eslint:{ignoreDuringBuilds:!0},typescript:{ignoreBuildErrors:!0},poweredByHeader:!1,experimental:{scrollRestoration:!0,...m.experimental||{}},modularizeImports:{...u?Array.isArray(u)?u.reduce((r,o)=>({...r,...swcCreateTransforms(o.libs,o.scope)}),{}):swcCreateTransforms(u.libs,u.scope):{},...m.modularizeImports||{},...swcTransformsKoine},...m};return (p&&(n?c.nx={svgr:!0}:(delete c.nx,c.webpack=(e,r)=>{let o="function"==typeof m.webpack?m.webpack(e,r):e;return o.module.rules.push({test:/\.svg$/,use:[{loader:"@svgr/webpack",options:{svgoConfig:{plugins:[{name:"removeViewBox",active:!1}]}}}]}),o})),l)?withI18nLegacy({...c,i18nRoutes:l}):a?n?withI18nAsync({...c,i18nCompiler:a}):withI18n({...c,i18nCompiler:a}):c};
|
|
35
5
|
|
|
36
6
|
export { withKoine };
|
package/load.cjs.js
CHANGED
|
@@ -2,14 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
* Utility to load a component with an optional pre-determined delay.
|
|
7
|
-
*
|
|
8
|
-
* This was designed to improve anti spam with async form loading.
|
|
9
|
-
*
|
|
10
|
-
* @see https://github.com/vercel/next.js/blob/main/packages/next/next-server/lib/dynamic.tsx
|
|
11
|
-
* @see https://github.com/vercel/next.js/blob/canary/examples/with-dynamic-import/pages/index.js
|
|
12
|
-
*/function load(e,o){return new Promise(t=>{setTimeout(()=>t(e),o);})}
|
|
5
|
+
function load(e,o){return new Promise(t=>{setTimeout(()=>t(e),o);})}
|
|
13
6
|
|
|
14
7
|
exports.default = load;
|
|
15
8
|
exports.load = load;
|
package/load.esm.js
CHANGED
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
* Utility to load a component with an optional pre-determined delay.
|
|
3
|
-
*
|
|
4
|
-
* This was designed to improve anti spam with async form loading.
|
|
5
|
-
*
|
|
6
|
-
* @see https://github.com/vercel/next.js/blob/main/packages/next/next-server/lib/dynamic.tsx
|
|
7
|
-
* @see https://github.com/vercel/next.js/blob/canary/examples/with-dynamic-import/pages/index.js
|
|
8
|
-
*/function load(e,o){return new Promise(t=>{setTimeout(()=>t(e),o);})}
|
|
1
|
+
function load(e,o){return new Promise(t=>{setTimeout(()=>t(e),o);})}
|
|
9
2
|
|
|
10
3
|
export { load as default, load };
|
package/package.json
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
"name": "@koine/next",
|
|
3
3
|
"sideEffects": false,
|
|
4
4
|
"dependencies": {
|
|
5
|
-
"@koine/browser": "2.0.0-beta.
|
|
6
|
-
"@koine/
|
|
7
|
-
"@koine/
|
|
5
|
+
"@koine/browser": "2.0.0-beta.135",
|
|
6
|
+
"@koine/i18n": "2.0.0-beta.135",
|
|
7
|
+
"@koine/node": "2.0.0-beta.135",
|
|
8
|
+
"@koine/utils": "2.0.0-beta.135"
|
|
8
9
|
},
|
|
9
10
|
"peerDependencies": {
|
|
10
11
|
"next": "^14.0.4",
|
|
@@ -64,5 +65,5 @@
|
|
|
64
65
|
"module": "./index.esm.js",
|
|
65
66
|
"main": "./index.cjs.js",
|
|
66
67
|
"types": "./index.esm.d.ts",
|
|
67
|
-
"version": "2.0.0-beta.
|
|
68
|
+
"version": "2.0.0-beta.135"
|
|
68
69
|
}
|
package/useTheme.cjs.js
CHANGED
|
@@ -5,9 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var react = require('react');
|
|
6
6
|
var ThemeContext = require('./ThemeContext.cjs.js');
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
* @borrows [next-themes](https://github.com/pacocoursey/next-themes)
|
|
10
|
-
*/const useTheme=()=>react.useContext(ThemeContext.ThemeContext);
|
|
8
|
+
const useTheme=()=>react.useContext(ThemeContext.ThemeContext);
|
|
11
9
|
|
|
12
10
|
exports.default = useTheme;
|
|
13
11
|
exports.useTheme = useTheme;
|
package/useTheme.esm.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { useContext } from 'react';
|
|
2
2
|
import { ThemeContext } from './ThemeContext.esm.js';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
* @borrows [next-themes](https://github.com/pacocoursey/next-themes)
|
|
6
|
-
*/const useTheme=()=>useContext(ThemeContext);
|
|
4
|
+
const useTheme=()=>useContext(ThemeContext);
|
|
7
5
|
|
|
8
6
|
export { useTheme as default, useTheme };
|