@koine/next 2.0.0-beta.77 → 2.0.0-beta.78

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.
Files changed (78) hide show
  1. package/12.cjs.d.ts +1 -0
  2. package/12.cjs.default.js +1 -0
  3. package/12.cjs.js +53 -0
  4. package/12.cjs.mjs +2 -0
  5. package/12.esm.js +43 -0
  6. package/README.md +1 -0
  7. package/ThemeContext.cjs.d.ts +2 -0
  8. package/ThemeContext.cjs.default.js +1 -0
  9. package/ThemeContext.cjs.js +13 -0
  10. package/ThemeContext.cjs.mjs +2 -0
  11. package/ThemeContext.esm.js +8 -0
  12. package/ThemeProvider.cjs.d.ts +2 -0
  13. package/ThemeProvider.cjs.default.js +1 -0
  14. package/ThemeProvider.cjs.js +214 -0
  15. package/ThemeProvider.cjs.mjs +2 -0
  16. package/ThemeProvider.esm.js +205 -0
  17. package/config.cjs.d.ts +1 -0
  18. package/config.cjs.default.js +1 -0
  19. package/config.cjs.js +84 -0
  20. package/config.cjs.mjs +2 -0
  21. package/config.esm.js +80 -0
  22. package/index.cjs.d.ts +1 -0
  23. package/index.cjs.default.js +1 -0
  24. package/index.cjs.js +19 -0
  25. package/index.cjs.mjs +2 -0
  26. package/index.esm.js +8 -0
  27. package/load.cjs.d.ts +2 -0
  28. package/load.cjs.default.js +1 -0
  29. package/load.cjs.js +12 -0
  30. package/load.cjs.mjs +2 -0
  31. package/load.esm.js +7 -0
  32. package/package.json +30 -47
  33. package/typings.d.ts +61 -0
  34. package/useTheme.cjs.d.ts +2 -0
  35. package/useTheme.cjs.default.js +1 -0
  36. package/useTheme.cjs.js +11 -0
  37. package/useTheme.cjs.mjs +2 -0
  38. package/useTheme.esm.js +6 -0
  39. package/12/AnalyticsGoogle.js +0 -7
  40. package/12/DisableErrorOverlay.js +0 -1
  41. package/12/Seo.js +0 -1
  42. package/12/SeoDefaults.js +0 -1
  43. package/12/seoBuildTags.js +0 -1
  44. package/12/types.js +0 -1
  45. package/12.js +0 -1
  46. package/ThemeContext.js +0 -1
  47. package/ThemeProvider.js +0 -1
  48. package/cjs/12/AnalyticsGoogle.d.ts +0 -5
  49. package/cjs/12/AnalyticsGoogle.js +0 -7
  50. package/cjs/12/DisableErrorOverlay.d.ts +0 -2
  51. package/cjs/12/DisableErrorOverlay.js +0 -1
  52. package/cjs/12/Seo.d.ts +0 -23
  53. package/cjs/12/Seo.js +0 -1
  54. package/cjs/12/SeoDefaults.d.ts +0 -10
  55. package/cjs/12/SeoDefaults.js +0 -1
  56. package/cjs/12/seoBuildTags.d.ts +0 -8
  57. package/cjs/12/seoBuildTags.js +0 -1
  58. package/cjs/12/types.d.ts +0 -2
  59. package/cjs/12/types.js +0 -1
  60. package/cjs/12.d.ts +0 -3
  61. package/cjs/12.js +0 -1
  62. package/cjs/ThemeContext.d.ts +0 -11
  63. package/cjs/ThemeContext.js +0 -1
  64. package/cjs/ThemeProvider.d.ts +0 -17
  65. package/cjs/ThemeProvider.js +0 -1
  66. package/cjs/config.d.ts +0 -7
  67. package/cjs/config.js +0 -1
  68. package/cjs/index.d.ts +0 -4
  69. package/cjs/index.js +0 -1
  70. package/cjs/load.d.ts +0 -2
  71. package/cjs/load.js +0 -1
  72. package/cjs/package.json +0 -22
  73. package/cjs/useTheme.d.ts +0 -4
  74. package/cjs/useTheme.js +0 -1
  75. package/config.js +0 -1
  76. package/index.js +0 -1
  77. package/load.js +0 -1
  78. package/useTheme.js +0 -1
package/12.cjs.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "./12";
@@ -0,0 +1 @@
1
+ exports._default = require('./12.cjs.js').default;
package/12.cjs.js ADDED
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var router = require('next/router');
7
+ var Script = require('next/script');
8
+ var react = require('react');
9
+ var browser = require('@koine/browser');
10
+ var Head = require('next/head');
11
+
12
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
+
14
+ var Script__default = /*#__PURE__*/_interopDefaultLegacy(Script);
15
+ var Head__default = /*#__PURE__*/_interopDefaultLegacy(Head);
16
+
17
+ let AnalyticsGoogle = ({ id }) => {
18
+ const uid = id || process.env["NEXT_PUBLIC_GTM_ID"];
19
+ const { events, asPath, query } = router.useRouter();
20
+ const [ready, setReady] = react.useState(false);
21
+ const [routed, setRouted] = react.useState(false);
22
+ react.useEffect(() => {
23
+ const handleRouteChange = () => {
24
+ setRouted(true);
25
+ };
26
+ events.on("routeChangeComplete", handleRouteChange);
27
+ return () => {
28
+ events.off("routeChangeComplete", handleRouteChange);
29
+ };
30
+ }, [events]);
31
+ react.useEffect(() => {
32
+ if (routed && ready && asPath) {
33
+ browser.gtagPageview(asPath);
34
+ }
35
+ }, [asPath, query, routed, ready]);
36
+ if (!uid) {
37
+ return null;
38
+ }
39
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Script__default["default"], { id: "google-tagmanager", src: `https://www.googletagmanager.com/gtag/js?id=${id}`, strategy: "afterInteractive", onLoad: () => setReady(true) }), jsxRuntime.jsx(Script__default["default"], { id: "google-analytics", strategy: "afterInteractive", children: `
40
+ window.dataLayer = window.dataLayer || [];
41
+ function gtag(){window.dataLayer.push(arguments);}
42
+ gtag('js', new Date());
43
+
44
+ gtag('config', '${id}', { 'send_page_view': false });
45
+ ` })] }));
46
+ };
47
+
48
+ let DisableErrorOverlay = () => (jsxRuntime.jsx(Head__default["default"], { children: process.env["NODE_ENV"] === "development" && (jsxRuntime.jsx("script", { dangerouslySetInnerHTML: {
49
+ __html: `window.addEventListener('error',event =>{event.stopImmediatePropagation()});window.addEventListener('unhandledrejection',event =>{event.stopImmediatePropagation()});`,
50
+ } })) }));
51
+
52
+ exports.AnalyticsGoogle = AnalyticsGoogle;
53
+ exports.DisableErrorOverlay = DisableErrorOverlay;
package/12.cjs.mjs ADDED
@@ -0,0 +1,2 @@
1
+ export * from './12.cjs.js';
2
+ export { _default as default } from './12.cjs.default.js';
package/12.esm.js ADDED
@@ -0,0 +1,43 @@
1
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
+ import { useRouter } from 'next/router';
3
+ import Script from 'next/script';
4
+ import { useState, useEffect } from 'react';
5
+ import { gtagPageview } from '@koine/browser';
6
+ import Head from 'next/head';
7
+
8
+ let AnalyticsGoogle = ({ id }) => {
9
+ const uid = id || process.env["NEXT_PUBLIC_GTM_ID"];
10
+ const { events, asPath, query } = useRouter();
11
+ const [ready, setReady] = useState(false);
12
+ const [routed, setRouted] = useState(false);
13
+ useEffect(() => {
14
+ const handleRouteChange = () => {
15
+ setRouted(true);
16
+ };
17
+ events.on("routeChangeComplete", handleRouteChange);
18
+ return () => {
19
+ events.off("routeChangeComplete", handleRouteChange);
20
+ };
21
+ }, [events]);
22
+ useEffect(() => {
23
+ if (routed && ready && asPath) {
24
+ gtagPageview(asPath);
25
+ }
26
+ }, [asPath, query, routed, ready]);
27
+ if (!uid) {
28
+ return null;
29
+ }
30
+ return (jsxs(Fragment, { children: [jsx(Script, { id: "google-tagmanager", src: `https://www.googletagmanager.com/gtag/js?id=${id}`, strategy: "afterInteractive", onLoad: () => setReady(true) }), jsx(Script, { id: "google-analytics", strategy: "afterInteractive", children: `
31
+ window.dataLayer = window.dataLayer || [];
32
+ function gtag(){window.dataLayer.push(arguments);}
33
+ gtag('js', new Date());
34
+
35
+ gtag('config', '${id}', { 'send_page_view': false });
36
+ ` })] }));
37
+ };
38
+
39
+ let DisableErrorOverlay = () => (jsx(Head, { children: process.env["NODE_ENV"] === "development" && (jsx("script", { dangerouslySetInnerHTML: {
40
+ __html: `window.addEventListener('error',event =>{event.stopImmediatePropagation()});window.addEventListener('unhandledrejection',event =>{event.stopImmediatePropagation()});`,
41
+ } })) }));
42
+
43
+ export { AnalyticsGoogle, DisableErrorOverlay };
package/README.md ADDED
@@ -0,0 +1 @@
1
+ # @koine/next
@@ -0,0 +1,2 @@
1
+ export * from "./ThemeContext";
2
+ export { default } from "./ThemeContext";
@@ -0,0 +1 @@
1
+ exports._default = require('./ThemeContext.cjs.js').default;
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var react = require('react');
6
+
7
+ const ThemeContext = react.createContext({
8
+ setTheme: (_) => { },
9
+ themes: [],
10
+ });
11
+
12
+ exports.ThemeContext = ThemeContext;
13
+ exports["default"] = ThemeContext;
@@ -0,0 +1,2 @@
1
+ export * from './ThemeContext.cjs.js';
2
+ export { _default as default } from './ThemeContext.cjs.default.js';
@@ -0,0 +1,8 @@
1
+ import { createContext } from 'react';
2
+
3
+ const ThemeContext = createContext({
4
+ setTheme: (_) => { },
5
+ themes: [],
6
+ });
7
+
8
+ export { ThemeContext, ThemeContext as default };
@@ -0,0 +1,2 @@
1
+ export * from "./ThemeProvider";
2
+ export { default } from "./ThemeProvider";
@@ -0,0 +1 @@
1
+ exports._default = require('./ThemeProvider.cjs.js').default;
@@ -0,0 +1,214 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var Script = require('next/script');
7
+ var react = require('react');
8
+ var utils = require('@koine/utils');
9
+ var ThemeContext = require('./ThemeContext.cjs.js');
10
+
11
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
12
+
13
+ var Script__default = /*#__PURE__*/_interopDefaultLegacy(Script);
14
+
15
+ const colorSchemes = ["light", "dark"];
16
+ const MEDIA = "(prefers-color-scheme: dark)";
17
+ const THEME_STORAGE_KEY = "theme";
18
+ const ThemeProvider = ({ forcedTheme, disableTransitionOnChange = false, enableSystem = true, enableColorScheme, themes = ["light", "dark"], defaultTheme = enableSystem ? "system" : "light", attribute = "data-theme", value, children, nonce, }) => {
19
+ const [theme, setThemeState] = react.useState(() => getTheme(THEME_STORAGE_KEY, defaultTheme));
20
+ const [resolvedTheme, setResolvedTheme] = react.useState(() => getTheme(THEME_STORAGE_KEY));
21
+ const attrs = !value ? themes : Object.values(value);
22
+ const applyTheme = react.useCallback((theme) => {
23
+ let resolved = theme;
24
+ if (utils.isServer || !resolved)
25
+ return;
26
+ if (theme === "system" && enableSystem) {
27
+ resolved = getSystemTheme();
28
+ }
29
+ const name = value ? value[resolved] : resolved;
30
+ const enable = disableTransitionOnChange ? disableAnimation() : null;
31
+ const d = document.documentElement;
32
+ if (attribute === "class") {
33
+ d.classList.remove(...attrs);
34
+ if (name)
35
+ d.classList.add(name);
36
+ }
37
+ else {
38
+ if (name) {
39
+ d.setAttribute(attribute, name);
40
+ }
41
+ else {
42
+ d.removeAttribute(attribute);
43
+ }
44
+ }
45
+ if (enableColorScheme) {
46
+ const fallback = colorSchemes.includes(defaultTheme)
47
+ ? defaultTheme
48
+ : "";
49
+ const colorScheme = colorSchemes.includes(resolved)
50
+ ? resolved
51
+ : fallback;
52
+ d.style.colorScheme = colorScheme;
53
+ }
54
+ enable?.();
55
+ }, [
56
+ attribute,
57
+ attrs,
58
+ defaultTheme,
59
+ disableTransitionOnChange,
60
+ enableColorScheme,
61
+ enableSystem,
62
+ value,
63
+ ]);
64
+ const setTheme = react.useCallback((theme) => {
65
+ setThemeState(theme);
66
+ try {
67
+ localStorage.setItem(THEME_STORAGE_KEY, theme);
68
+ }
69
+ catch (e) {
70
+ }
71
+ }, []);
72
+ const handleMediaQuery = react.useCallback((e) => {
73
+ const resolved = getSystemTheme(e);
74
+ setResolvedTheme(resolved);
75
+ if (theme === "system" && enableSystem && !forcedTheme) {
76
+ applyTheme("system");
77
+ }
78
+ }, [theme, enableSystem, forcedTheme, applyTheme]);
79
+ react.useEffect(() => {
80
+ const media = window.matchMedia(MEDIA);
81
+ media.addListener(handleMediaQuery);
82
+ handleMediaQuery(media);
83
+ return () => media.removeListener(handleMediaQuery);
84
+ }, [handleMediaQuery]);
85
+ react.useEffect(() => {
86
+ const handleStorage = (e) => {
87
+ if (e.key !== THEME_STORAGE_KEY) {
88
+ return;
89
+ }
90
+ const theme = e.newValue || defaultTheme;
91
+ setTheme(theme);
92
+ };
93
+ window.addEventListener("storage", handleStorage);
94
+ return () => window.removeEventListener("storage", handleStorage);
95
+ }, [defaultTheme, setTheme]);
96
+ react.useEffect(() => {
97
+ applyTheme(forcedTheme ?? theme);
98
+ }, [applyTheme, forcedTheme, theme]);
99
+ return (jsxRuntime.jsxs(ThemeContext.ThemeContext.Provider, { value: {
100
+ theme,
101
+ setTheme,
102
+ forcedTheme,
103
+ resolvedTheme: theme === "system" ? resolvedTheme : theme,
104
+ themes: enableSystem ? [...themes, "system"] : themes,
105
+ systemTheme: (enableSystem ? resolvedTheme : undefined),
106
+ }, children: [jsxRuntime.jsx(ThemeScript, { forcedTheme,
107
+ disableTransitionOnChange,
108
+ enableSystem,
109
+ enableColorScheme,
110
+ themes,
111
+ defaultTheme,
112
+ attribute,
113
+ value,
114
+ children,
115
+ attrs,
116
+ nonce }), children] }));
117
+ };
118
+ const ThemeScript = react.memo(({ forcedTheme, attribute, enableSystem, enableColorScheme, defaultTheme, value, attrs, nonce, }) => {
119
+ const defaultSystem = defaultTheme === "system";
120
+ const optimization = (() => {
121
+ const removeClasses = `d.remove(${attrs
122
+ .map((t) => `'${t}'`)
123
+ .join(",")})`;
124
+ return `var d=document.documentElement.classList;${removeClasses};`;
125
+ })();
126
+ const fallbackColorScheme = (() => {
127
+ if (!enableColorScheme) {
128
+ return "";
129
+ }
130
+ const fallback = colorSchemes.includes(defaultTheme)
131
+ ? defaultTheme
132
+ : null;
133
+ if (fallback) {
134
+ return `if(e==='light'||e==='dark'||!e)d.style.colorScheme=e||'${defaultTheme}'`;
135
+ }
136
+ else {
137
+ return `if(e==='light'||e==='dark')d.style.colorScheme=e`;
138
+ }
139
+ })();
140
+ const updateDOM = (name, literal = false, setColorScheme = true) => {
141
+ const resolvedName = value ? value[name] : name;
142
+ const val = literal ? name + `|| ''` : `'${resolvedName}'`;
143
+ let text = "";
144
+ if (enableColorScheme &&
145
+ setColorScheme &&
146
+ !literal &&
147
+ colorSchemes.includes(name)) {
148
+ text += `d.style.colorScheme = '${name}';`;
149
+ }
150
+ if (attribute === "class") {
151
+ if (literal || resolvedName) {
152
+ text += `d.add(${val})`;
153
+ }
154
+ else {
155
+ text += `null`;
156
+ }
157
+ }
158
+ else {
159
+ if (resolvedName) {
160
+ text += `d[s](n, ${val})`;
161
+ }
162
+ }
163
+ return text;
164
+ };
165
+ const scriptSrc = (() => {
166
+ if (forcedTheme) {
167
+ return `!function(){${optimization}${updateDOM(forcedTheme)}}()`;
168
+ }
169
+ if (enableSystem) {
170
+ return `!function(){try {${optimization}var e=localStorage.getItem('${THEME_STORAGE_KEY}');if("system"===e||(!e&&${defaultSystem})){var t="${MEDIA}",m=window.matchMedia(t);if(m.media!==t||m.matches){${updateDOM("dark")}}else{${updateDOM("light")}}}else if(e){${value ? `var x=${JSON.stringify(value)};` : ""}${updateDOM(value ? `x[e]` : "e", true)}}${!defaultSystem
171
+ ? `else{` + updateDOM(defaultTheme, false, false) + "}"
172
+ : ""}${fallbackColorScheme}}catch(e){}}()`;
173
+ }
174
+ return `!function(){try{${optimization}var e=localStorage.getItem("${THEME_STORAGE_KEY}");if(e){${value ? `var x=${JSON.stringify(value)};` : ""}${updateDOM(value ? `x[e]` : "e", true)}}else{${updateDOM(defaultTheme, false, false)};}${fallbackColorScheme}}catch(t){}}();`;
175
+ })();
176
+ const encodedScript = `data:text/javascript;base64,${encodeBase64(scriptSrc)}`;
177
+ return (jsxRuntime.jsx(Script__default["default"], { id: "next-theme-script", strategy: "beforeInteractive", src: encodedScript, nonce: nonce }));
178
+ }, () => true);
179
+ const getTheme = (key, fallback) => {
180
+ if (utils.isServer)
181
+ return undefined;
182
+ let theme;
183
+ try {
184
+ theme = localStorage.getItem(key) || undefined;
185
+ }
186
+ catch (e) {
187
+ }
188
+ return theme || fallback;
189
+ };
190
+ const disableAnimation = () => {
191
+ const d = document;
192
+ const css = d.createElement("style");
193
+ css.appendChild(d.createTextNode(`*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}`));
194
+ d.head.appendChild(css);
195
+ return () => {
196
+ (() => window.getComputedStyle(d.body))();
197
+ setTimeout(() => {
198
+ d.head.removeChild(css);
199
+ }, 1);
200
+ };
201
+ };
202
+ const getSystemTheme = (e) => {
203
+ if (!e)
204
+ e = window.matchMedia(MEDIA);
205
+ const isDark = e.matches;
206
+ const systemTheme = isDark ? "dark" : "light";
207
+ return systemTheme;
208
+ };
209
+ const encodeBase64 = (str) => {
210
+ return utils.isServer ? Buffer.from(str).toString("base64") : btoa(str);
211
+ };
212
+
213
+ exports.ThemeProvider = ThemeProvider;
214
+ exports["default"] = ThemeProvider;
@@ -0,0 +1,2 @@
1
+ export * from './ThemeProvider.cjs.js';
2
+ export { _default as default } from './ThemeProvider.cjs.default.js';
@@ -0,0 +1,205 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import Script from 'next/script';
3
+ import { memo, useState, useCallback, useEffect } from 'react';
4
+ import { isServer } from '@koine/utils';
5
+ import { ThemeContext } from './ThemeContext.esm.js';
6
+
7
+ const colorSchemes = ["light", "dark"];
8
+ const MEDIA = "(prefers-color-scheme: dark)";
9
+ const THEME_STORAGE_KEY = "theme";
10
+ const ThemeProvider = ({ forcedTheme, disableTransitionOnChange = false, enableSystem = true, enableColorScheme, themes = ["light", "dark"], defaultTheme = enableSystem ? "system" : "light", attribute = "data-theme", value, children, nonce, }) => {
11
+ const [theme, setThemeState] = useState(() => getTheme(THEME_STORAGE_KEY, defaultTheme));
12
+ const [resolvedTheme, setResolvedTheme] = useState(() => getTheme(THEME_STORAGE_KEY));
13
+ const attrs = !value ? themes : Object.values(value);
14
+ const applyTheme = useCallback((theme) => {
15
+ let resolved = theme;
16
+ if (isServer || !resolved)
17
+ return;
18
+ if (theme === "system" && enableSystem) {
19
+ resolved = getSystemTheme();
20
+ }
21
+ const name = value ? value[resolved] : resolved;
22
+ const enable = disableTransitionOnChange ? disableAnimation() : null;
23
+ const d = document.documentElement;
24
+ if (attribute === "class") {
25
+ d.classList.remove(...attrs);
26
+ if (name)
27
+ d.classList.add(name);
28
+ }
29
+ else {
30
+ if (name) {
31
+ d.setAttribute(attribute, name);
32
+ }
33
+ else {
34
+ d.removeAttribute(attribute);
35
+ }
36
+ }
37
+ if (enableColorScheme) {
38
+ const fallback = colorSchemes.includes(defaultTheme)
39
+ ? defaultTheme
40
+ : "";
41
+ const colorScheme = colorSchemes.includes(resolved)
42
+ ? resolved
43
+ : fallback;
44
+ d.style.colorScheme = colorScheme;
45
+ }
46
+ enable?.();
47
+ }, [
48
+ attribute,
49
+ attrs,
50
+ defaultTheme,
51
+ disableTransitionOnChange,
52
+ enableColorScheme,
53
+ enableSystem,
54
+ value,
55
+ ]);
56
+ const setTheme = useCallback((theme) => {
57
+ setThemeState(theme);
58
+ try {
59
+ localStorage.setItem(THEME_STORAGE_KEY, theme);
60
+ }
61
+ catch (e) {
62
+ }
63
+ }, []);
64
+ const handleMediaQuery = useCallback((e) => {
65
+ const resolved = getSystemTheme(e);
66
+ setResolvedTheme(resolved);
67
+ if (theme === "system" && enableSystem && !forcedTheme) {
68
+ applyTheme("system");
69
+ }
70
+ }, [theme, enableSystem, forcedTheme, applyTheme]);
71
+ useEffect(() => {
72
+ const media = window.matchMedia(MEDIA);
73
+ media.addListener(handleMediaQuery);
74
+ handleMediaQuery(media);
75
+ return () => media.removeListener(handleMediaQuery);
76
+ }, [handleMediaQuery]);
77
+ useEffect(() => {
78
+ const handleStorage = (e) => {
79
+ if (e.key !== THEME_STORAGE_KEY) {
80
+ return;
81
+ }
82
+ const theme = e.newValue || defaultTheme;
83
+ setTheme(theme);
84
+ };
85
+ window.addEventListener("storage", handleStorage);
86
+ return () => window.removeEventListener("storage", handleStorage);
87
+ }, [defaultTheme, setTheme]);
88
+ useEffect(() => {
89
+ applyTheme(forcedTheme ?? theme);
90
+ }, [applyTheme, forcedTheme, theme]);
91
+ return (jsxs(ThemeContext.Provider, { value: {
92
+ theme,
93
+ setTheme,
94
+ forcedTheme,
95
+ resolvedTheme: theme === "system" ? resolvedTheme : theme,
96
+ themes: enableSystem ? [...themes, "system"] : themes,
97
+ systemTheme: (enableSystem ? resolvedTheme : undefined),
98
+ }, children: [jsx(ThemeScript, { forcedTheme,
99
+ disableTransitionOnChange,
100
+ enableSystem,
101
+ enableColorScheme,
102
+ themes,
103
+ defaultTheme,
104
+ attribute,
105
+ value,
106
+ children,
107
+ attrs,
108
+ nonce }), children] }));
109
+ };
110
+ const ThemeScript = memo(({ forcedTheme, attribute, enableSystem, enableColorScheme, defaultTheme, value, attrs, nonce, }) => {
111
+ const defaultSystem = defaultTheme === "system";
112
+ const optimization = (() => {
113
+ const removeClasses = `d.remove(${attrs
114
+ .map((t) => `'${t}'`)
115
+ .join(",")})`;
116
+ return `var d=document.documentElement.classList;${removeClasses};`;
117
+ })();
118
+ const fallbackColorScheme = (() => {
119
+ if (!enableColorScheme) {
120
+ return "";
121
+ }
122
+ const fallback = colorSchemes.includes(defaultTheme)
123
+ ? defaultTheme
124
+ : null;
125
+ if (fallback) {
126
+ return `if(e==='light'||e==='dark'||!e)d.style.colorScheme=e||'${defaultTheme}'`;
127
+ }
128
+ else {
129
+ return `if(e==='light'||e==='dark')d.style.colorScheme=e`;
130
+ }
131
+ })();
132
+ const updateDOM = (name, literal = false, setColorScheme = true) => {
133
+ const resolvedName = value ? value[name] : name;
134
+ const val = literal ? name + `|| ''` : `'${resolvedName}'`;
135
+ let text = "";
136
+ if (enableColorScheme &&
137
+ setColorScheme &&
138
+ !literal &&
139
+ colorSchemes.includes(name)) {
140
+ text += `d.style.colorScheme = '${name}';`;
141
+ }
142
+ if (attribute === "class") {
143
+ if (literal || resolvedName) {
144
+ text += `d.add(${val})`;
145
+ }
146
+ else {
147
+ text += `null`;
148
+ }
149
+ }
150
+ else {
151
+ if (resolvedName) {
152
+ text += `d[s](n, ${val})`;
153
+ }
154
+ }
155
+ return text;
156
+ };
157
+ const scriptSrc = (() => {
158
+ if (forcedTheme) {
159
+ return `!function(){${optimization}${updateDOM(forcedTheme)}}()`;
160
+ }
161
+ if (enableSystem) {
162
+ return `!function(){try {${optimization}var e=localStorage.getItem('${THEME_STORAGE_KEY}');if("system"===e||(!e&&${defaultSystem})){var t="${MEDIA}",m=window.matchMedia(t);if(m.media!==t||m.matches){${updateDOM("dark")}}else{${updateDOM("light")}}}else if(e){${value ? `var x=${JSON.stringify(value)};` : ""}${updateDOM(value ? `x[e]` : "e", true)}}${!defaultSystem
163
+ ? `else{` + updateDOM(defaultTheme, false, false) + "}"
164
+ : ""}${fallbackColorScheme}}catch(e){}}()`;
165
+ }
166
+ return `!function(){try{${optimization}var e=localStorage.getItem("${THEME_STORAGE_KEY}");if(e){${value ? `var x=${JSON.stringify(value)};` : ""}${updateDOM(value ? `x[e]` : "e", true)}}else{${updateDOM(defaultTheme, false, false)};}${fallbackColorScheme}}catch(t){}}();`;
167
+ })();
168
+ const encodedScript = `data:text/javascript;base64,${encodeBase64(scriptSrc)}`;
169
+ return (jsx(Script, { id: "next-theme-script", strategy: "beforeInteractive", src: encodedScript, nonce: nonce }));
170
+ }, () => true);
171
+ const getTheme = (key, fallback) => {
172
+ if (isServer)
173
+ return undefined;
174
+ let theme;
175
+ try {
176
+ theme = localStorage.getItem(key) || undefined;
177
+ }
178
+ catch (e) {
179
+ }
180
+ return theme || fallback;
181
+ };
182
+ const disableAnimation = () => {
183
+ const d = document;
184
+ const css = d.createElement("style");
185
+ css.appendChild(d.createTextNode(`*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}`));
186
+ d.head.appendChild(css);
187
+ return () => {
188
+ (() => window.getComputedStyle(d.body))();
189
+ setTimeout(() => {
190
+ d.head.removeChild(css);
191
+ }, 1);
192
+ };
193
+ };
194
+ const getSystemTheme = (e) => {
195
+ if (!e)
196
+ e = window.matchMedia(MEDIA);
197
+ const isDark = e.matches;
198
+ const systemTheme = isDark ? "dark" : "light";
199
+ return systemTheme;
200
+ };
201
+ const encodeBase64 = (str) => {
202
+ return isServer ? Buffer.from(str).toString("base64") : btoa(str);
203
+ };
204
+
205
+ export { ThemeProvider, ThemeProvider as default };
@@ -0,0 +1 @@
1
+ export * from "./config";
@@ -0,0 +1 @@
1
+ exports._default = require('./config.cjs.js').default;
package/config.cjs.js ADDED
@@ -0,0 +1,84 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var next = require('@koine/i18n/next');
6
+
7
+ let withKoine = (options = {}) => {
8
+ const { nx, svg, i18nRoutes, i18nCompiler, ...restNextConfig } = options;
9
+ const nextConfig = {
10
+ eslint: {
11
+ ignoreDuringBuilds: true,
12
+ },
13
+ typescript: {
14
+ ignoreBuildErrors: true,
15
+ },
16
+ poweredByHeader: false,
17
+ experimental: {
18
+ scrollRestoration: true,
19
+ ...(restNextConfig.experimental || {}),
20
+ },
21
+ modularizeImports: {
22
+ ...(restNextConfig.modularizeImports || {}),
23
+ "@koine/api": { transform: "@koine/api/{{member}}" },
24
+ "@koine/browser": { transform: "@koine/browser/{{member}}" },
25
+ "@koine/dom": { transform: "@koine/dom/{{member}}" },
26
+ "@koine/node": { transform: "@koine/node/{{member}}" },
27
+ "@koine/i18n/?(((\\w*)?/?)*)": {
28
+ transform: "@koine/i18n/{{ matches.[1] }}/{{member}}",
29
+ },
30
+ "@koine/react/?(((\\w*)?/?)*)": {
31
+ transform: "@koine/react/{{ matches.[1] }}/{{member}}",
32
+ },
33
+ "@koine/next/?(((\\w*)?/?)*)": {
34
+ transform: "@koine/next/{{ matches.[1] }}/{{member}}",
35
+ },
36
+ "@koine/utils": { transform: "@koine/utils/{{member}}" },
37
+ },
38
+ ...restNextConfig,
39
+ };
40
+ if (svg) {
41
+ if (nx) {
42
+ nextConfig["nx"] = { svgr: true };
43
+ }
44
+ else {
45
+ delete nextConfig["nx"];
46
+ nextConfig.webpack = (_config, options) => {
47
+ const webpackConfig = typeof nextConfig.webpack === "function"
48
+ ? nextConfig.webpack(_config, options)
49
+ : _config;
50
+ webpackConfig.module.rules.push({
51
+ test: /\.svg$/,
52
+ use: [
53
+ {
54
+ loader: "@svgr/webpack",
55
+ options: {
56
+ svgoConfig: {
57
+ plugins: [
58
+ {
59
+ name: "removeViewBox",
60
+ active: false,
61
+ },
62
+ ],
63
+ },
64
+ },
65
+ },
66
+ ],
67
+ });
68
+ return webpackConfig;
69
+ };
70
+ }
71
+ }
72
+ if (i18nRoutes) {
73
+ return next.withI18nLegacy({ ...nextConfig, i18nRoutes });
74
+ }
75
+ if (i18nCompiler) {
76
+ if (nx) {
77
+ return next.withI18nAsync({ ...nextConfig, i18nCompiler });
78
+ }
79
+ return next.withI18n({ ...nextConfig, i18nCompiler });
80
+ }
81
+ return nextConfig;
82
+ };
83
+
84
+ exports.withKoine = withKoine;
package/config.cjs.mjs ADDED
@@ -0,0 +1,2 @@
1
+ export * from './config.cjs.js';
2
+ export { _default as default } from './config.cjs.default.js';