@koine/next 1.0.14 → 1.0.17

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 (95) hide show
  1. package/Auth/helpers.d.ts +2 -2
  2. package/Auth/useLogin.js +1 -1
  3. package/Auth/useLoginUrl.js +1 -1
  4. package/Auth/useLogout.js +1 -1
  5. package/Forms/index.d.ts +0 -1
  6. package/Forms/index.js +0 -1
  7. package/Forms/useForm.d.ts +3 -9
  8. package/Forms/useForm.js +1 -3
  9. package/i18n/T/index.d.ts +8 -0
  10. package/i18n/T/index.js +6 -0
  11. package/i18n/T/package.json +6 -0
  12. package/i18n/getT/index.d.ts +3 -0
  13. package/i18n/getT/index.js +9 -0
  14. package/i18n/getT/package.json +6 -0
  15. package/i18n/index.d.ts +6 -0
  16. package/i18n/index.js +6 -0
  17. package/{I18n → i18n}/package.json +1 -1
  18. package/i18n/translationAsOptions/index.d.ts +3 -0
  19. package/i18n/translationAsOptions/index.js +9 -0
  20. package/i18n/translationAsOptions/package.json +6 -0
  21. package/i18n/useDateFormat/index.d.ts +6 -0
  22. package/i18n/useDateFormat/index.js +37 -0
  23. package/i18n/useDateFormat/package.json +6 -0
  24. package/i18n/useLocale/index.d.ts +1 -0
  25. package/i18n/useLocale/index.js +4 -0
  26. package/i18n/useLocale/package.json +6 -0
  27. package/i18n/useT/index.d.ts +50 -0
  28. package/i18n/useT/index.js +115 -0
  29. package/i18n/useT/package.json +6 -0
  30. package/index.d.ts +1 -1
  31. package/index.js +1 -1
  32. package/node/Analytics/AnalyticsGoogle.js +37 -0
  33. package/node/Analytics/index.js +4 -0
  34. package/node/Auth/helpers.js +27 -0
  35. package/node/Auth/index.js +7 -0
  36. package/node/Auth/useLogin.js +53 -0
  37. package/node/Auth/useLoginUrl.js +15 -0
  38. package/node/Auth/useLogout.js +56 -0
  39. package/node/Favicon/Favicon.js +9 -0
  40. package/node/Favicon/index.js +4 -0
  41. package/node/Forms/index.js +4 -0
  42. package/node/Forms/useForm.js +37 -0
  43. package/node/Head/Head.js +5 -0
  44. package/node/Head/index.js +4 -0
  45. package/node/Img/Img.js +35 -0
  46. package/node/Img/index.js +4 -0
  47. package/node/Link/Link.js +14 -0
  48. package/node/Link/index.js +4 -0
  49. package/node/NextProgress/NextProgress.js +44 -0
  50. package/node/NextProgress/index.js +5 -0
  51. package/node/Seo/Seo.js +12 -0
  52. package/node/Seo/SeoDefaults.js +16 -0
  53. package/node/Seo/helpers.js +119 -0
  54. package/node/Seo/index.js +15 -0
  55. package/node/Theme/Theme.js +250 -0
  56. package/node/Theme/index.js +4 -0
  57. package/node/app/AppHead.js +10 -0
  58. package/node/app/AppMain.js +2 -0
  59. package/node/app/css/AppMain.js +17 -0
  60. package/node/app/css/AppTheme.js +18 -0
  61. package/node/app/css/auth/index.js +18 -0
  62. package/node/app/css/index.js +62 -0
  63. package/node/app/em/AppMain.js +28 -0
  64. package/node/app/em/AppTheme.js +22 -0
  65. package/node/app/em/auth/index.js +18 -0
  66. package/node/app/em/index.js +17 -0
  67. package/node/app/index.js +5 -0
  68. package/node/app/sc/AppMain.js +28 -0
  69. package/node/app/sc/AppTheme.js +15 -0
  70. package/node/app/sc/auth/index.js +18 -0
  71. package/node/app/sc/index.js +64 -0
  72. package/node/config/index.js +201 -0
  73. package/node/document/Document.js +29 -0
  74. package/node/document/css/index.js +47 -0
  75. package/node/document/em/index.js +62 -0
  76. package/node/document/index.js +7 -0
  77. package/node/document/sc/index.js +68 -0
  78. package/node/i18n/T/index.js +10 -0
  79. package/node/i18n/getT/index.js +13 -0
  80. package/node/i18n/index.js +9 -0
  81. package/node/i18n/translationAsOptions/index.js +13 -0
  82. package/node/i18n/useDateFormat/index.js +41 -0
  83. package/node/i18n/useLocale/index.js +9 -0
  84. package/node/i18n/useT/index.js +120 -0
  85. package/node/index.js +15 -0
  86. package/node/utils/emotion-cache.js +13 -0
  87. package/node/utils/index.js +31 -0
  88. package/package.json +4 -4
  89. package/typings.d.ts +19 -10
  90. package/utils/index.d.ts +0 -1
  91. package/utils/index.js +0 -1
  92. package/I18n/I18n.d.ts +0 -44
  93. package/I18n/I18n.js +0 -95
  94. package/I18n/index.d.ts +0 -1
  95. package/I18n/index.js +0 -1
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useLogout = void 0;
4
+ var react_1 = require("react");
5
+ var router_1 = require("next/router");
6
+ var react_2 = require("next-auth/react");
7
+ var utils_1 = require("@koine/utils");
8
+ var i18n_1 = require("../i18n");
9
+ var helpers_1 = require("./helpers");
10
+ function useLogout() {
11
+ var t = (0, i18n_1.useT)();
12
+ var push = (0, router_1.useRouter)().push;
13
+ var _a = (0, react_1.useState)(false), loading = _a[0], setLoading = _a[1];
14
+ var _b = (0, react_1.useState)(false), ok = _b[0], setOk = _b[1];
15
+ var fail = (0, react_1.useState)(false)[0];
16
+ var submit = (0, react_1.useCallback)(function (event) {
17
+ event.preventDefault();
18
+ event.stopPropagation();
19
+ setLoading(true);
20
+ (0, react_2.signOut)({ redirect: false }).then(function () {
21
+ setLoading(false);
22
+ setOk(true);
23
+ var redirectUrl = (0, utils_1.parseURL)((0, helpers_1.getCallbackUrl)());
24
+ var currentUrl = (0, utils_1.parseURL)(window.location.href);
25
+ var secured = (0, helpers_1.getAuthRoutes)(t).secured;
26
+ var signin = t("~:/signin");
27
+ var profile = t("~:/profile");
28
+ var targetUrl = redirectUrl || currentUrl;
29
+ var redirect = "";
30
+ if (targetUrl) {
31
+ if (targetUrl.pathname === profile) {
32
+ redirect = signin;
33
+ }
34
+ else if (secured) {
35
+ for (var i = 0; i < secured.length; i++) {
36
+ if (targetUrl.pathname.match(secured[i])) {
37
+ redirect = signin;
38
+ break;
39
+ }
40
+ }
41
+ }
42
+ }
43
+ if (redirect) {
44
+ push(redirect);
45
+ }
46
+ });
47
+ }, [t, push]);
48
+ // TODO: useMemo ?
49
+ return {
50
+ submit: submit,
51
+ loading: loading,
52
+ ok: ok,
53
+ fail: fail,
54
+ };
55
+ }
56
+ exports.useLogout = useLogout;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Favicon = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var jsx_runtime_1 = require("react/jsx-runtime");
6
+ var head_1 = tslib_1.__importDefault(require("next/head"));
7
+ var react_1 = require("@koine/react");
8
+ var Favicon = function (props) { return ((0, jsx_runtime_1.jsx)(head_1.default, { children: (0, jsx_runtime_1.jsx)(react_1.FaviconTags, tslib_1.__assign({}, props)) })); };
9
+ exports.Favicon = Favicon;
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./Favicon"), exports);
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./useForm"), exports);
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useForm = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var react_1 = require("react");
6
+ var react_hook_form_1 = require("react-hook-form");
7
+ var yup_1 = require("@hookform/resolvers/yup");
8
+ function useForm(
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ schema, t, formProps, debug) {
11
+ if (formProps === void 0) { formProps = {}; }
12
+ // const form = _useForm<InferType<ObjectSchema<T, object>>>({
13
+ var form = (0, react_hook_form_1.useForm)(tslib_1.__assign({
14
+ // @ts-expect-error FIXME:
15
+ resolver: (0, yup_1.yupResolver)(schema) }, formProps));
16
+ // const { control, register, setValue } = form;
17
+ // const field = { control, register, setValue, t };
18
+ // if (process.env["NODE_ENV"] !== "production") {
19
+ // if (debug) {
20
+ // console.log(
21
+ // `Form ${i18nNamespace} data`,
22
+ // form.watch(),
23
+ // `errors: `,
24
+ // form.formState.errors
25
+ // );
26
+ // }
27
+ // }
28
+ // if (formProps.mode === "onChange") {
29
+ // return { field, ...form };
30
+ // }
31
+ return (0, react_1.useMemo)(function () {
32
+ var control = form.control, register = form.register, setValue = form.setValue;
33
+ var field = { control: control, register: register, setValue: setValue, t: t };
34
+ return tslib_1.__assign({ field: field }, form);
35
+ }, [t, form]);
36
+ }
37
+ exports.useForm = useForm;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Head = void 0;
4
+ var head_1 = require("next/head");
5
+ Object.defineProperty(exports, "Head", { enumerable: true, get: function () { return __importDefault(head_1).default; } });
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./Head"), exports);
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getNextImgProps = exports.NextImgSmart = exports.NextImg = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var jsx_runtime_1 = require("react/jsx-runtime");
6
+ var react_1 = require("react");
7
+ var image_1 = tslib_1.__importDefault(require("next/image"));
8
+ exports.NextImg = image_1.default;
9
+ var NextImgSmart = function (props) {
10
+ var _a = (0, react_1.useState)(false), $loaded = _a[0], setLoaded = _a[1];
11
+ var _b = (0, react_1.useState)(false), $error = _b[0], setError = _b[1];
12
+ var _c = getNextImgProps(props), nextImgProps = _c.nextImgProps, restProps = _c.restProps;
13
+ var Wrap = restProps.Wrap;
14
+ return nextImgProps.priority ? ((0, jsx_runtime_1.jsx)(image_1.default, tslib_1.__assign({}, nextImgProps))) : ((0, jsx_runtime_1.jsx)(Wrap, tslib_1.__assign({}, restProps, { "$loaded": $loaded, "$error": $error }, { children: (0, jsx_runtime_1.jsx)(image_1.default, tslib_1.__assign({}, nextImgProps, { onLoadingComplete: function () { return setLoaded(true); }, onError: function () { return setError(true); } })) })));
15
+ };
16
+ exports.NextImgSmart = NextImgSmart;
17
+ function getNextImgProps(_a) {
18
+ var src = _a.src, alt = _a.alt, layout = _a.layout, blurDataURL = _a.blurDataURL, width = _a.width, height = _a.height, priority = _a.priority, objectFit = _a.objectFit, objectPosition = _a.objectPosition, restProps = tslib_1.__rest(_a, ["src", "alt", "layout", "blurDataURL", "width", "height", "priority", "objectFit", "objectPosition"]);
19
+ var nextImgProps = {
20
+ src: src,
21
+ alt: alt,
22
+ layout: layout,
23
+ blurDataURL: blurDataURL,
24
+ width: width,
25
+ height: height,
26
+ priority: priority,
27
+ objectFit: objectFit,
28
+ objectPosition: objectPosition,
29
+ };
30
+ return {
31
+ nextImgProps: nextImgProps,
32
+ restProps: restProps,
33
+ };
34
+ }
35
+ exports.getNextImgProps = getNextImgProps;
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./Img"), exports);
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Link = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var jsx_runtime_1 = require("react/jsx-runtime");
6
+ var react_1 = require("react");
7
+ var link_1 = tslib_1.__importDefault(require("next/link"));
8
+ /**
9
+ * @see https://next.js.org/docs/api-reference/next/link
10
+ */
11
+ exports.Link = (0, react_1.forwardRef)(function Link(_a, ref) {
12
+ var href = _a.href, prefetch = _a.prefetch, replace = _a.replace, scroll = _a.scroll, shallow = _a.shallow, locale = _a.locale, _b = _a.Link, Link = _b === void 0 ? "span" : _b, props = tslib_1.__rest(_a, ["href", "prefetch", "replace", "scroll", "shallow", "locale", "Link"]);
13
+ return ((0, jsx_runtime_1.jsx)(link_1.default, tslib_1.__assign({ href: href, replace: replace, scroll: scroll, shallow: shallow, locale: locale, passHref: true }, { children: (0, jsx_runtime_1.jsx)(Link, tslib_1.__assign({ ref: ref }, props)) })));
14
+ });
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./Link"), exports);
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NextProgress = void 0;
4
+ var jsx_runtime_1 = require("react/jsx-runtime");
5
+ var react_1 = require("react");
6
+ var router_1 = require("next/router");
7
+ var NextProgress = function (_a) {
8
+ var _b = _a.startAt, startAt = _b === void 0 ? 0.3 : _b, _c = _a.showOnShallow, showOnShallow = _c === void 0 ? true : _c, _d = _a.stopDelayMs, stopDelayMs = _d === void 0 ? 200 : _d, _e = _a.Overlay, Overlay = _e === void 0 ? "div" : _e;
9
+ var events = (0, router_1.useRouter)().events;
10
+ // const [progress, setProgress] = useState(0);
11
+ var _f = (0, react_1.useState)(false), running = _f[0], setRunning = _f[1];
12
+ var timer = (0, react_1.useRef)(null);
13
+ var routeChangeStart = (0, react_1.useCallback)(function (_, _a) {
14
+ var shallow = _a.shallow;
15
+ if (!shallow || showOnShallow) {
16
+ // setProgress(startAt);
17
+ setRunning(true);
18
+ }
19
+ }, [showOnShallow]);
20
+ var routeChangeEnd = (0, react_1.useCallback)(function (_, _a) {
21
+ var shallow = _a.shallow;
22
+ if (!shallow || showOnShallow) {
23
+ if (timer.current) {
24
+ clearTimeout(timer.current);
25
+ }
26
+ timer.current = setTimeout(function () {
27
+ // setProgress(100);
28
+ setRunning(false);
29
+ }, stopDelayMs);
30
+ }
31
+ }, [showOnShallow, stopDelayMs, timer]);
32
+ (0, react_1.useEffect)(function () {
33
+ events.on("routeChangeStart", routeChangeStart);
34
+ events.on("routeChangeComplete", routeChangeEnd);
35
+ events.on("routeChangeError", routeChangeEnd);
36
+ return function () {
37
+ events.off("routeChangeStart", routeChangeStart);
38
+ events.off("routeChangeComplete", routeChangeEnd);
39
+ events.off("routeChangeError", routeChangeEnd);
40
+ };
41
+ }, [events, routeChangeStart, routeChangeEnd]);
42
+ return (0, jsx_runtime_1.jsx)(Overlay, { running: running });
43
+ };
44
+ exports.NextProgress = NextProgress;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NextProgress = void 0;
4
+ var NextProgress_1 = require("./NextProgress");
5
+ Object.defineProperty(exports, "NextProgress", { enumerable: true, get: function () { return NextProgress_1.NextProgress; } });
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Seo = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var jsx_runtime_1 = require("react/jsx-runtime");
6
+ var react_1 = require("react");
7
+ var head_1 = tslib_1.__importDefault(require("next/head"));
8
+ var helpers_1 = require("./helpers");
9
+ var _Seo = function (props) {
10
+ return (0, jsx_runtime_1.jsx)(head_1.default, { children: (0, helpers_1.buildTags)(props) });
11
+ };
12
+ exports.Seo = (0, react_1.memo)(_Seo);
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SeoDefaults = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var jsx_runtime_1 = require("react/jsx-runtime");
6
+ var react_1 = require("react");
7
+ var head_1 = tslib_1.__importDefault(require("next/head"));
8
+ // import { useRouter } from "next/router";
9
+ // import { getSiteUrl } from "../utils";
10
+ var helpers_1 = require("./helpers");
11
+ var _SeoDefaults = function (props) {
12
+ // const router = useRouter();
13
+ // props.openGraph.url = getSiteUrl(router.asPath);
14
+ return (0, jsx_runtime_1.jsx)(head_1.default, { children: (0, helpers_1.buildTags)(props) });
15
+ };
16
+ exports.SeoDefaults = (0, react_1.memo)(_SeoDefaults);
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildTags = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var jsx_runtime_1 = require("react/jsx-runtime");
6
+ var utils_1 = require("@koine/utils");
7
+ var defaults = {
8
+ tplTitle: "",
9
+ };
10
+ /**
11
+ * We do a couple of things in addition while many other are removed.
12
+ *
13
+ * - Add `seo` meta object coming from a CMS probably
14
+ * - Add `ogimage` and `openGraph.image` as single image source
15
+ * - Add `og` alias to define `openGraph`
16
+ * - Add check for `title` equale to `templateTitle` to avoid meta titles like
17
+ * "My site | My site" often happening in homepages
18
+ * - Remove the open graph videos and images
19
+ *
20
+ * - Shorter code
21
+ *
22
+ * @returns
23
+ */
24
+ var buildTags = function (_a) {
25
+ var _b = _a === void 0 ? {} : _a, seo = _b.seo, hidden = _b.hidden, keywords = _b.keywords, _c = _b.title, title = _c === void 0 ? "" : _c, titleTemplate = _b.titleTemplate, defaultTitle = _b.defaultTitle, noindex = _b.noindex, nofollow = _b.nofollow, description = _b.description, _d = _b.languageAlternates, languageAlternates = _d === void 0 ? [] : _d, twitter = _b.twitter, facebook = _b.facebook, openGraph = _b.openGraph, ogAlias = _b.og, canonical = _b.canonical, metaTags = _b.metaTags, linkTags = _b.linkTags;
26
+ var render = [];
27
+ var $names = {};
28
+ var $properties = {};
29
+ if (titleTemplate) {
30
+ defaults.tplTitle = titleTemplate;
31
+ }
32
+ title = title || (seo === null || seo === void 0 ? void 0 : seo.title) || "";
33
+ if (title) {
34
+ if (defaults.tplTitle && defaults.tplTitle !== title) {
35
+ title = defaults.tplTitle.replace(/%s/g, title);
36
+ }
37
+ }
38
+ else if (defaultTitle) {
39
+ title = defaultTitle;
40
+ }
41
+ if (title) {
42
+ render.push((0, jsx_runtime_1.jsx)("title", { children: title }, "title"));
43
+ $properties["og:title"] = title; // overridden later...
44
+ }
45
+ $names["robots"] = "".concat(noindex || hidden ? "noindex" : "index", ",").concat(nofollow || hidden ? "nofollow" : "follow");
46
+ description = description || (seo === null || seo === void 0 ? void 0 : seo.description);
47
+ if (description) {
48
+ $names["description"] = description;
49
+ $properties["og:description"] = description; // overridden later...
50
+ }
51
+ keywords = keywords || (seo === null || seo === void 0 ? void 0 : seo.keywords);
52
+ if (keywords) {
53
+ $names["keywords"] = (0, utils_1.isArray)(keywords) ? keywords.join(", ") : keywords;
54
+ }
55
+ if ((languageAlternates === null || languageAlternates === void 0 ? void 0 : languageAlternates.length) > 0) {
56
+ languageAlternates.forEach(function (languageAlternate) {
57
+ render.push((0, jsx_runtime_1.jsx)("link", { rel: "alternate", hrefLang: languageAlternate.hrefLang, href: languageAlternate.href }, "languageAlternate-".concat(languageAlternate.hrefLang)));
58
+ });
59
+ }
60
+ if (canonical) {
61
+ render.push((0, jsx_runtime_1.jsx)("link", { rel: "canonical", href: canonical }, "canonical"));
62
+ $properties["og:url"] = canonical;
63
+ }
64
+ if (facebook === null || facebook === void 0 ? void 0 : facebook.appId)
65
+ $properties["fb:app_id"] = facebook.appId;
66
+ if (twitter) {
67
+ if (twitter.cardType)
68
+ $names["twitter:card"] = twitter.cardType;
69
+ if (twitter.site)
70
+ $names["twitter:site"] = twitter.site;
71
+ if (twitter.handle)
72
+ $names["twitter:creator"] = twitter.handle;
73
+ }
74
+ var og = ogAlias || openGraph;
75
+ if (og === null || og === void 0 ? void 0 : og.title)
76
+ $properties["og:title"] = og === null || og === void 0 ? void 0 : og.title;
77
+ if (og === null || og === void 0 ? void 0 : og.description)
78
+ $properties["og:description"] = og === null || og === void 0 ? void 0 : og.description;
79
+ if (og === null || og === void 0 ? void 0 : og.url)
80
+ $properties["og:url"] = og.url;
81
+ if (og === null || og === void 0 ? void 0 : og.type)
82
+ $properties["og:type"] = og.type.toLowerCase();
83
+ if (og === null || og === void 0 ? void 0 : og.locale)
84
+ $properties["og:locale"] = og.locale;
85
+ if (og === null || og === void 0 ? void 0 : og.site_name)
86
+ $properties["og:site_name"] = og.site_name;
87
+ var ogimage = (og === null || og === void 0 ? void 0 : og.image) || (seo === null || seo === void 0 ? void 0 : seo.ogimage);
88
+ if (ogimage)
89
+ $properties["og:image"] = ogimage;
90
+ Object.keys($names).forEach(function (key) {
91
+ render.push((0, jsx_runtime_1.jsx)("meta", { name: key, content: $names[key] }, key));
92
+ });
93
+ Object.keys($properties).forEach(function (key) {
94
+ render.push((0, jsx_runtime_1.jsx)("meta", { property: key, content: $properties[key] }, key));
95
+ });
96
+ if (metaTags && metaTags.length > 0) {
97
+ metaTags.forEach(function (tag) {
98
+ var _a, _b, _c;
99
+ render.push((0, jsx_runtime_1.jsx)("meta", tslib_1.__assign({}, tag), "meta:".concat((_c = (_b = (_a = tag.keyOverride) !== null && _a !== void 0 ? _a : tag.name) !== null && _b !== void 0 ? _b : tag.property) !== null && _c !== void 0 ? _c : tag.httpEquiv)));
100
+ });
101
+ }
102
+ if (linkTags === null || linkTags === void 0 ? void 0 : linkTags.length) {
103
+ linkTags.forEach(function (tag) {
104
+ var _a;
105
+ render.push((0, jsx_runtime_1.jsx)("link", tslib_1.__assign({}, tag), "link".concat((_a = tag.keyOverride) !== null && _a !== void 0 ? _a : tag.href).concat(tag.rel)));
106
+ });
107
+ }
108
+ // TODO: alternates and canonical
109
+ // canonical = 'https://www.domain.com/';
110
+ // languageAlternates={[{
111
+ // hrefLang: 'en',
112
+ // href: 'https://www.domain.com/en',
113
+ // }]}
114
+ // <link rel="alternate" hreflang="x-default" href="https://www.domain.com/nl/">
115
+ // <link rel="alternate" hreflang="nl" href="https://www.domain.com/nl/">
116
+ // <link rel="alternate" hreflang="en" href="https://www.domain.com/en/">
117
+ return render;
118
+ };
119
+ exports.buildTags = buildTags;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ /**
3
+ * @file
4
+ *
5
+ * Adapted from https://github.com/garmeeh/next-seo
6
+ *
7
+ * See also:
8
+ * - https://github.com/catnose99/next-head-seo
9
+ * - https://nextjs.org/docs/api-reference/next/head
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ var tslib_1 = require("tslib");
13
+ tslib_1.__exportStar(require("./helpers"), exports);
14
+ tslib_1.__exportStar(require("./Seo"), exports);
15
+ tslib_1.__exportStar(require("./SeoDefaults"), exports);
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ThemeProvider = exports.useTheme = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * @file
8
+ *
9
+ * Adapted from [next-themes](https://github.com/pacocoursey/next-themes)
10
+ */
11
+ var react_1 = require("react");
12
+ var script_1 = tslib_1.__importDefault(require("next/script"));
13
+ var utils_1 = require("@koine/utils");
14
+ var THEME_STORAGE_KEY = "theme";
15
+ var colorSchemes = ["light", "dark"];
16
+ var MEDIA = "(prefers-color-scheme: dark)";
17
+ var ThemeContext = (0, react_1.createContext)({
18
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
19
+ setTheme: function (_) { },
20
+ themes: [],
21
+ });
22
+ var useTheme = function () { return (0, react_1.useContext)(ThemeContext); };
23
+ exports.useTheme = useTheme;
24
+ var ThemeProvider = function (_a) {
25
+ var forcedTheme = _a.forcedTheme, _b = _a.disableTransitionOnChange, disableTransitionOnChange = _b === void 0 ? false : _b, _c = _a.enableSystem, enableSystem = _c === void 0 ? true : _c, _d = _a.enableColorScheme, enableColorScheme = _d === void 0 ? true : _d, _e = _a.themes, themes = _e === void 0 ? ["light", "dark"] : _e, _f = _a.defaultTheme, defaultTheme = _f === void 0 ? enableSystem ? "system" : "light" : _f, _g = _a.attribute, attribute = _g === void 0 ? "data-theme" : _g, value = _a.value, children = _a.children, nonce = _a.nonce;
26
+ var _h = (0, react_1.useState)(function () {
27
+ return getTheme(THEME_STORAGE_KEY, defaultTheme);
28
+ }), theme = _h[0], setThemeState = _h[1];
29
+ var _j = (0, react_1.useState)(function () {
30
+ return getTheme(THEME_STORAGE_KEY);
31
+ }), resolvedTheme = _j[0], setResolvedTheme = _j[1];
32
+ var attrs = !value ? themes : Object.values(value);
33
+ var applyTheme = (0, react_1.useCallback)(function (theme) {
34
+ var _a;
35
+ var resolved = theme;
36
+ if (utils_1.isServer || !resolved)
37
+ return;
38
+ // If theme is system, resolve it before setting theme
39
+ if (theme === "system" && enableSystem) {
40
+ resolved = getSystemTheme();
41
+ }
42
+ var name = value ? value[resolved] : resolved;
43
+ var enable = disableTransitionOnChange ? disableAnimation() : null;
44
+ var d = document.documentElement;
45
+ if (attribute === "class") {
46
+ (_a = d.classList).remove.apply(_a, attrs);
47
+ if (name)
48
+ d.classList.add(name);
49
+ }
50
+ else {
51
+ if (name) {
52
+ d.setAttribute(attribute, name);
53
+ }
54
+ else {
55
+ d.removeAttribute(attribute);
56
+ }
57
+ }
58
+ if (enableColorScheme) {
59
+ var fallback = colorSchemes.includes(defaultTheme)
60
+ ? defaultTheme
61
+ : "";
62
+ var colorScheme = colorSchemes.includes(resolved)
63
+ ? resolved
64
+ : fallback;
65
+ d.style.colorScheme = colorScheme;
66
+ }
67
+ enable === null || enable === void 0 ? void 0 : enable();
68
+ }, [
69
+ attribute,
70
+ attrs,
71
+ defaultTheme,
72
+ disableTransitionOnChange,
73
+ enableColorScheme,
74
+ enableSystem,
75
+ value,
76
+ ]);
77
+ var setTheme = (0, react_1.useCallback)(function (theme) {
78
+ setThemeState(theme);
79
+ // Save to storage
80
+ try {
81
+ localStorage.setItem(THEME_STORAGE_KEY, theme);
82
+ }
83
+ catch (e) {
84
+ // Unsupported
85
+ }
86
+ }, []);
87
+ var handleMediaQuery = (0, react_1.useCallback)(function (e) {
88
+ var resolved = getSystemTheme(e);
89
+ setResolvedTheme(resolved);
90
+ if (theme === "system" && enableSystem && !forcedTheme) {
91
+ applyTheme("system");
92
+ }
93
+ }, [theme, enableSystem, forcedTheme, applyTheme]);
94
+ // Always listen to System preference
95
+ (0, react_1.useEffect)(function () {
96
+ var media = window.matchMedia(MEDIA);
97
+ // Intentionally use deprecated listener methods to support iOS & old browsers
98
+ media.addListener(handleMediaQuery);
99
+ handleMediaQuery(media);
100
+ return function () { return media.removeListener(handleMediaQuery); };
101
+ }, [handleMediaQuery]);
102
+ // localStorage event handling
103
+ (0, react_1.useEffect)(function () {
104
+ var handleStorage = function (e) {
105
+ if (e.key !== THEME_STORAGE_KEY) {
106
+ return;
107
+ }
108
+ // If default theme set, use it if localstorage === null (happens on local storage manual deletion)
109
+ var theme = e.newValue || defaultTheme;
110
+ setTheme(theme);
111
+ };
112
+ window.addEventListener("storage", handleStorage);
113
+ return function () { return window.removeEventListener("storage", handleStorage); };
114
+ }, [defaultTheme, setTheme]);
115
+ // Whenever theme or forcedTheme changes, apply it
116
+ (0, react_1.useEffect)(function () {
117
+ applyTheme(forcedTheme !== null && forcedTheme !== void 0 ? forcedTheme : theme);
118
+ }, [applyTheme, forcedTheme, theme]);
119
+ return ((0, jsx_runtime_1.jsxs)(ThemeContext.Provider, tslib_1.__assign({ value: {
120
+ theme: theme,
121
+ setTheme: setTheme,
122
+ forcedTheme: forcedTheme,
123
+ resolvedTheme: theme === "system" ? resolvedTheme : theme,
124
+ themes: enableSystem ? tslib_1.__spreadArray(tslib_1.__spreadArray([], themes, true), ["system"], false) : themes,
125
+ systemTheme: (enableSystem ? resolvedTheme : undefined),
126
+ } }, { children: [(0, jsx_runtime_1.jsx)(ThemeScript, tslib_1.__assign({}, {
127
+ forcedTheme: forcedTheme,
128
+ disableTransitionOnChange: disableTransitionOnChange,
129
+ enableSystem: enableSystem,
130
+ enableColorScheme: enableColorScheme,
131
+ themes: themes,
132
+ defaultTheme: defaultTheme,
133
+ attribute: attribute,
134
+ value: value,
135
+ children: children,
136
+ attrs: attrs,
137
+ nonce: nonce,
138
+ })), children] })));
139
+ };
140
+ exports.ThemeProvider = ThemeProvider;
141
+ var ThemeScript = (0, react_1.memo)(function (_a) {
142
+ var forcedTheme = _a.forcedTheme, attribute = _a.attribute, enableSystem = _a.enableSystem, enableColorScheme = _a.enableColorScheme, defaultTheme = _a.defaultTheme, value = _a.value, attrs = _a.attrs, nonce = _a.nonce;
143
+ var defaultSystem = defaultTheme === "system";
144
+ // Code-golfing the amount of characters in the script
145
+ var optimization = (function () {
146
+ var removeClasses = "d.remove(".concat(attrs
147
+ .map(function (t) { return "'".concat(t, "'"); })
148
+ .join(","), ")");
149
+ return "var d=document.documentElement.classList;".concat(removeClasses, ";");
150
+ })();
151
+ var fallbackColorScheme = (function () {
152
+ if (!enableColorScheme) {
153
+ return "";
154
+ }
155
+ var fallback = colorSchemes.includes(defaultTheme)
156
+ ? defaultTheme
157
+ : null;
158
+ if (fallback) {
159
+ return "if(e==='light'||e==='dark'||!e)d.style.colorScheme=e||'".concat(defaultTheme, "'");
160
+ }
161
+ else {
162
+ return "if(e==='light'||e==='dark')d.style.colorScheme=e";
163
+ }
164
+ })();
165
+ var updateDOM = function (name, literal, setColorScheme) {
166
+ if (literal === void 0) { literal = false; }
167
+ if (setColorScheme === void 0) { setColorScheme = true; }
168
+ var resolvedName = value ? value[name] : name;
169
+ var val = literal ? name + "|| ''" : "'".concat(resolvedName, "'");
170
+ var text = "";
171
+ // MUCH faster to set colorScheme alongside HTML attribute/class
172
+ // as it only incurs 1 style recalculation rather than 2
173
+ // This can save over 250ms of work for pages with big DOM
174
+ if (enableColorScheme &&
175
+ setColorScheme &&
176
+ !literal &&
177
+ colorSchemes.includes(name)) {
178
+ text += "d.style.colorScheme = '".concat(name, "';");
179
+ }
180
+ if (attribute === "class") {
181
+ if (literal || resolvedName) {
182
+ text += "d.add(".concat(val, ")");
183
+ }
184
+ else {
185
+ text += "null";
186
+ }
187
+ }
188
+ else {
189
+ if (resolvedName) {
190
+ text += "d[s](n, ".concat(val, ")");
191
+ }
192
+ }
193
+ return text;
194
+ };
195
+ var scriptSrc = (function () {
196
+ if (forcedTheme) {
197
+ return "!function(){".concat(optimization).concat(updateDOM(forcedTheme), "}()");
198
+ }
199
+ if (enableSystem) {
200
+ return "!function(){try {".concat(optimization, "var e=localStorage.getItem('").concat(THEME_STORAGE_KEY, "');if(\"system\"===e||(!e&&").concat(defaultSystem, ")){var t=\"").concat(MEDIA, "\",m=window.matchMedia(t);if(m.media!==t||m.matches){").concat(updateDOM("dark"), "}else{").concat(updateDOM("light"), "}}else if(e){").concat(value ? "var x=".concat(JSON.stringify(value), ";") : "").concat(updateDOM(value ? "x[e]" : "e", true), "}").concat(!defaultSystem
201
+ ? "else{" + updateDOM(defaultTheme, false, false) + "}"
202
+ : "").concat(fallbackColorScheme, "}catch(e){}}()");
203
+ }
204
+ return "!function(){try{".concat(optimization, "var e=localStorage.getItem(\"").concat(THEME_STORAGE_KEY, "\");if(e){").concat(value ? "var x=".concat(JSON.stringify(value), ";") : "").concat(updateDOM(value ? "x[e]" : "e", true), "}else{").concat(updateDOM(defaultTheme, false, false), ";}").concat(fallbackColorScheme, "}catch(t){}}();");
205
+ })();
206
+ // We MUST use next/script's `beforeInteractive` strategy to avoid flashing on load.
207
+ // However, it only accepts the `src` prop, not `dangerouslySetInnerHTML` or `children`
208
+ // But our script cannot be external because it changes at runtime based on React props
209
+ // so we trick next/script by passing `src` as a base64 JS script
210
+ var encodedScript = "data:text/javascript;base64,".concat(encodeBase64(scriptSrc));
211
+ return ((0, jsx_runtime_1.jsx)(script_1.default, { id: "next-theme-script", strategy: "beforeInteractive", src: encodedScript, nonce: nonce }));
212
+ },
213
+ // Never re-render this component
214
+ function () { return true; });
215
+ // Helpers
216
+ var getTheme = function (key, fallback) {
217
+ if (utils_1.isServer)
218
+ return undefined;
219
+ var theme;
220
+ try {
221
+ theme = localStorage.getItem(key) || undefined;
222
+ }
223
+ catch (e) {
224
+ // Unsupported
225
+ }
226
+ return theme || fallback;
227
+ };
228
+ var disableAnimation = function () {
229
+ var css = document.createElement("style");
230
+ css.appendChild(document.createTextNode("*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}"));
231
+ document.head.appendChild(css);
232
+ return function () {
233
+ // Force restyle
234
+ (function () { return window.getComputedStyle(document.body); })();
235
+ // Wait for next tick before removing
236
+ setTimeout(function () {
237
+ document.head.removeChild(css);
238
+ }, 1);
239
+ };
240
+ };
241
+ var getSystemTheme = function (e) {
242
+ if (!e)
243
+ e = window.matchMedia(MEDIA);
244
+ var isDark = e.matches;
245
+ var systemTheme = isDark ? "dark" : "light";
246
+ return systemTheme;
247
+ };
248
+ var encodeBase64 = function (str) {
249
+ return utils_1.isServer ? Buffer.from(str).toString("base64") : btoa(str);
250
+ };