@koine/next 1.2.2 → 2.0.0-alpha.1
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/AnalyticsGoogle.js +1 -0
- package/AnalyticsGoogle.mjs +1 -0
- package/DynamicNamespaces.js +1 -0
- package/DynamicNamespaces.mjs +1 -0
- package/NextProgress.js +1 -0
- package/NextProgress.mjs +1 -0
- package/T.js +1 -0
- package/T.mjs +1 -0
- package/ThemeProvider.js +1 -0
- package/ThemeProvider.mjs +1 -0
- package/TransText.js +1 -0
- package/TransText.mjs +1 -0
- package/auth/useLoginUrl.js +1 -0
- package/auth/useLoginUrl.mjs +1 -0
- package/auth/useLogout.js +1 -0
- package/auth/useLogout.mjs +1 -0
- package/getT.js +2 -1
- package/getT.mjs +1 -0
- package/index.d.ts +2 -28
- package/index.js +5 -31
- package/index.mjs +2 -30
- package/legacy/AnalyticsGoogle.d.ts +6 -0
- package/legacy/AnalyticsGoogle.js +39 -0
- package/legacy/AnalyticsGoogle.mjs +35 -0
- package/legacy/DisableErrorOverlay.d.ts +7 -0
- package/legacy/DisableErrorOverlay.js +18 -0
- package/legacy/DisableErrorOverlay.mjs +13 -0
- package/legacy/DynamicNamespaces.d.ts +13 -0
- package/legacy/DynamicNamespaces.js +13 -0
- package/legacy/DynamicNamespaces.mjs +9 -0
- package/legacy/Favicon.d.ts +4 -0
- package/legacy/Favicon.js +10 -0
- package/legacy/Favicon.mjs +6 -0
- package/legacy/Link.d.ts +10 -0
- package/legacy/Link.js +15 -0
- package/legacy/Link.mjs +12 -0
- package/legacy/NextProgress.d.ts +25 -0
- package/legacy/NextProgress.js +46 -0
- package/legacy/NextProgress.mjs +42 -0
- package/legacy/Seo.d.ts +41 -0
- package/legacy/Seo.js +34 -0
- package/legacy/Seo.mjs +29 -0
- package/legacy/SeoDefaults.d.ts +11 -0
- package/legacy/SeoDefaults.js +17 -0
- package/legacy/SeoDefaults.mjs +12 -0
- package/legacy/T.d.ts +15 -0
- package/legacy/T.js +17 -0
- package/legacy/T.mjs +13 -0
- package/legacy/ThemeContext.d.ts +17 -0
- package/legacy/ThemeContext.js +10 -0
- package/legacy/ThemeContext.mjs +7 -0
- package/legacy/ThemeProvider.d.ts +35 -0
- package/legacy/ThemeProvider.js +251 -0
- package/legacy/ThemeProvider.mjs +247 -0
- package/legacy/TransText.d.ts +3 -0
- package/legacy/TransText.js +8 -0
- package/legacy/TransText.mjs +4 -0
- package/legacy/app/AppHead.d.ts +3 -0
- package/legacy/app/AppHead.js +11 -0
- package/legacy/app/AppHead.mjs +6 -0
- package/legacy/app/AppMain.d.ts +35 -0
- package/legacy/app/AppMain.js +2 -0
- package/legacy/app/AppMain.mjs +1 -0
- package/legacy/app/css/AppMain.d.ts +9 -0
- package/legacy/app/css/AppMain.js +18 -0
- package/legacy/app/css/AppMain.mjs +14 -0
- package/legacy/app/css/AppTheme.d.ts +11 -0
- package/legacy/app/css/AppTheme.js +19 -0
- package/legacy/app/css/AppTheme.mjs +15 -0
- package/legacy/app/css/auth/index.d.ts +11 -0
- package/legacy/app/css/auth/index.js +17 -0
- package/legacy/app/css/auth/index.mjs +13 -0
- package/legacy/app/css/auth/package.json +6 -0
- package/legacy/app/css/index.d.ts +54 -0
- package/legacy/app/css/index.js +61 -0
- package/legacy/app/css/index.mjs +57 -0
- package/legacy/app/css/package.json +6 -0
- package/legacy/app/index.d.ts +2 -0
- package/legacy/app/index.js +5 -0
- package/legacy/app/index.mjs +2 -0
- package/legacy/app/package.json +6 -0
- package/legacy/app/sc/AppMain.d.ts +11 -0
- package/legacy/app/sc/AppMain.js +29 -0
- package/legacy/app/sc/AppMain.mjs +25 -0
- package/legacy/app/sc/AppTheme.d.ts +14 -0
- package/legacy/app/sc/AppTheme.js +16 -0
- package/legacy/app/sc/AppTheme.mjs +12 -0
- package/legacy/app/sc/auth/index.d.ts +11 -0
- package/legacy/app/sc/auth/index.js +17 -0
- package/legacy/app/sc/auth/index.mjs +13 -0
- package/legacy/app/sc/auth/package.json +6 -0
- package/legacy/app/sc/index.d.ts +56 -0
- package/legacy/app/sc/index.js +63 -0
- package/legacy/app/sc/index.mjs +59 -0
- package/legacy/app/sc/package.json +6 -0
- package/legacy/document/Document.d.ts +16 -0
- package/legacy/document/Document.js +31 -0
- package/legacy/document/Document.mjs +28 -0
- package/legacy/document/css/index.d.ts +18 -0
- package/legacy/document/css/index.js +45 -0
- package/legacy/document/css/index.mjs +45 -0
- package/legacy/document/css/package.json +6 -0
- package/legacy/document/index.d.ts +2 -0
- package/legacy/document/index.js +7 -0
- package/legacy/document/index.mjs +2 -0
- package/legacy/document/package.json +6 -0
- package/legacy/document/sc/index.d.ts +20 -0
- package/legacy/document/sc/index.js +67 -0
- package/legacy/document/sc/index.mjs +64 -0
- package/legacy/document/sc/package.json +6 -0
- package/legacy/getT.d.ts +9 -0
- package/legacy/getT.js +14 -0
- package/legacy/getT.mjs +10 -0
- package/legacy/index.d.ts +24 -0
- package/legacy/index.js +52 -0
- package/legacy/index.mjs +27 -0
- package/legacy/package.json +6 -0
- package/legacy/seoBuildTags.d.ts +23 -0
- package/legacy/seoBuildTags.js +121 -0
- package/legacy/seoBuildTags.mjs +117 -0
- package/legacy/to.d.ts +24 -0
- package/legacy/to.js +29 -0
- package/legacy/to.mjs +25 -0
- package/legacy/translationAsOptions.d.ts +3 -0
- package/legacy/translationAsOptions.js +13 -0
- package/legacy/translationAsOptions.mjs +9 -0
- package/legacy/types-i18n.d.ts +118 -0
- package/legacy/types-i18n.js +14 -0
- package/legacy/types-i18n.mjs +13 -0
- package/legacy/types-seo.d.ts +7 -0
- package/legacy/types-seo.js +2 -0
- package/legacy/types-seo.mjs +1 -0
- package/legacy/useBackUrl.d.ts +2 -0
- package/legacy/useBackUrl.js +33 -0
- package/legacy/useBackUrl.mjs +28 -0
- package/legacy/useDateFormat.d.ts +7 -0
- package/legacy/useDateFormat.js +43 -0
- package/legacy/useDateFormat.mjs +39 -0
- package/legacy/useForm.d.ts +27 -0
- package/legacy/useForm.js +39 -0
- package/legacy/useForm.mjs +35 -0
- package/legacy/useLocale.d.ts +2 -0
- package/legacy/useLocale.js +11 -0
- package/legacy/useLocale.mjs +6 -0
- package/legacy/useT.d.ts +17 -0
- package/legacy/useT.js +40 -0
- package/legacy/useT.mjs +19 -0
- package/legacy/useTheme.d.ts +7 -0
- package/legacy/useTheme.js +12 -0
- package/legacy/useTheme.mjs +8 -0
- package/legacy/useTo.d.ts +3 -0
- package/legacy/useTo.js +19 -0
- package/legacy/useTo.mjs +15 -0
- package/package.json +4 -10
- package/typings.d.ts +0 -87
- package/useBackUrl.js +1 -0
- package/useBackUrl.mjs +1 -0
- package/useDateFormat.js +1 -0
- package/useDateFormat.mjs +1 -0
- package/useForm.js +1 -0
- package/useForm.mjs +1 -0
- package/useLocale.js +1 -0
- package/useLocale.mjs +1 -0
- package/useT.js +1 -0
- package/useT.mjs +1 -16
- package/useTheme.js +1 -0
- package/useTheme.mjs +1 -0
- package/useTo.js +1 -0
- package/useTo.mjs +1 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.translationAsOptions = void 0;
|
|
4
|
+
function translationAsOptions(t, i18nKey) {
|
|
5
|
+
var dictionary = t(i18nKey, undefined, {
|
|
6
|
+
returnObjects: true,
|
|
7
|
+
});
|
|
8
|
+
return Object.keys(dictionary).map(function (key) { return ({
|
|
9
|
+
value: key,
|
|
10
|
+
label: dictionary[key],
|
|
11
|
+
}); });
|
|
12
|
+
}
|
|
13
|
+
exports.translationAsOptions = translationAsOptions;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* Test this on TSplayground:
|
|
5
|
+
* https://www.typescriptlang.org/play?#code/PTAEFpK6dv4YpSBQJSgJYEYAcA7YAFwE8AHTfAcwGcA6AEzqJrTGQ86+7hRQYCmAYwA2AQwBOA0PjEBbATTJih0gJJ58oAN4oMlIgIkAzFdIAqEsfhriimAPY2dejKHQAiAH4eAXKGsSAG5XAF8+fXxDEzNQS2tbMXsnGgBhJ2NMKh1w8LYIHkKi4sh8rE1ickVmVnQS+obUFFIyaQApB0oAHgBlbAAaUB6AJgA+UABeIexQAQAPQ3wGGlAaIglKKlcAfiHh2YWBJZW1jepXDF2AAwASbT7QujuR0KuL0H8+1398AQA3IwhNAAKmBemBoAAIpghMlZBISKAHMYAiIRKAiAALaTrBJ2Rw2cHAFDzMgOCREDFVOJWGz4lLQ2EEySIqYaAh0eJ0pIEmhA4Cg8GgABy8kUylUJ0xDgAriIGKA5EkhJiMdjQJkREcxSsAO5GHG0xJwlaSaSCTK-BhEklzMkUqmtGl4pICUUKJSxKYAUQWVlhXQA1gISMjndyTYy4SzBqdNqN+YLQBCAErCGUSGiYAGKsRkVoKlo4hwHXGw1HomU0MQAIy1q3Wm1AyixK2MEgccgCGKN9PwQotlEwcKRNYAVsJKQAKKsysRoxHtzvdto9ADywo1mC1AEo6EK1JSq4o1dIrpRjEYrqAPI2hIGPBiS2tyTj1Q5x5OsFoFHJyYjrAVMgpABKIhQAbQvIdDG-NZrHsHknFmCQO0zABdKdMSIIgyBoXwQDg+8HABEwRAcXU6CETtgAAR2AAB2ABWRiAGZsBYgA2DjgGwABOFjcF4+iAAYdxtUlyUpItw2NXkAAUkkxGgulccwUHGKZdAwcCAGlv1AX0yyIIMQzDcxY0bahRjQ3x3nQeZRBlQRZjkMhSFHCdYRoQYBFc9zJCsEhvJctzETjahWDcOJdLQ0sjmWUA0yoiQGC6cKqEGX4SPGAAfGR-iMcDYryjxH12LKjDssApCEDMswBERESVWQqGkD9PJYd5-HMGK4uORLhHJVL0sGGV8EDfByPwcZdneDA8tubQdNedwwCxTAVg2p9QBraRa3rIgS2PU8b3ax8aGlClaqIObQDyjpuh0wYuVklIFNbLoep0tDRlGKqK3I5sNjkYdsxPckAhQsRETDYDMBB+wAUitxut6+ZFgS9K7pkGU5F2iRsZrBwHC1axsYAQShkg0ss7I8vwXH8cJ4nSem0BrjuZa3ii+y5kc5zAnW6hZhEGgBC6-KSJCUJwMM-1jODUMUXMhszioay+oSi8jFANd2d1j5JcBPgBTBZMBtqzMwdzfMBELakw3nStqzraQsZbJSNQ7LssWkXVpQO3tEMJc2GBhaMEToUBD1AY8Vl90Bz3wS8JGvW8NnvR9DobV8Tvar9KEVXz-wCJYgYKsDzcg5PoOkSg4KiTBg+Q1CaAwrCcLwgiiBUQNiKMYwyIoqi5FohjmLYzjuL4gShNE8S7Ukx0LCDk1ybRd7Pc01xwM3Qu5ZUBXTOV1feSjZkEQstXrP8LS3F0-SD4DRWzNPhlw4vkhd7Q-p0pv27eb82kL5UKHlJzBRAf5KmEC-JhVpsjKKL0+w0HPk4Fk380aHH6klIaNM1aZQKhIXKRsJBFWxqVfWFUJAAOqumK2DUmrWDEK1MBXlbrdTfjYVB8Iv7CjQpgjGKwcEpTwZsUa41Jq6jZtsW6UUFp3GFKEXwnMVroHWpteOJZdoBFdttY6CcPBnVWJdIg11ZFuHup0fAXQ9Lo3iicWm+tFqKOUUtFa-hnFKKuM9ThNBN7KSQcHFBH80EIgwd9X6NCAa6iBvDUGSMkQEwCtDJEKI4YIzBgglGMlkHcPQXwgR9jVZNnpozHWeUiYkwEGTPKlNAqiOFqUvG5Sdos2qdIxOCilEqO5lFVaBwgGlxIELbIAhRbiz6YbKhYRZZ+kPiZJWOSgl5LCXwq+8Y0LS1mUZBZr8XSRhCTw9ZVlYp2P6trAmetdh6x+IQxMZsIQAFV8AiEwMGfSVxfgLHALiCMAhrz6gCAwICYgaBZmFjQTs0hgJ2wEJaO2kMqC4yOCwAIkUIQXUktdNsEMR5-i0MdIQoLFC2XNuAROhjxweGvKC7smKroykpMYCGVxtCgCkEQDM+A1yfi8v4dYMppCvCFOSq4pUaWmmMVixlGoWVstMGiGsvd-AUOFcmBe9opLUkCXCHoJjrqTFOlS8hHh7lCgAIqCoRKwqSJYyRkDlK6E6HKuUIt+caBFWMDBGDJPiYWDAkhiCFBDMQSzdX6sZfudV5thRrnMN6fw-sjix3BdkUN9LTEyuUGCpsOqCRrjcrybaVwiBTh3NeLak1KQ0BlPmSSdshTmDXJCNc-LqTVkvGqLau1MRiD+I4DMqSTrrRSoi5FURQBTgcIWlIe4NVL2knmpwlqjCslcHlMag4rTrpxmiHdS78B6ulTdeaLhJngUVv4dKNlimNJxs0gmFS2nWBCFFUIZrzYFqLWGBO7q7DSGMGNJkSEQ1hoJEehlRAo0PJFHGhNoAk0EtTXSiNlJs3IYPQWk0xbS3lqwCsKtqxa2aobebJtLa21Og7W+btAhe39tlATH96oR0KkkEihQE6p0zpsHO5MxIJIOkXZwrDRaJg7s3XCygpHsYHog5mk92M75RRdRIblvKWDbH8JU1mr6+kKpEEq+8Wnb101M0VPTUULRiDlEQEz6VLOgHfSbJMEIdUAaAyOf2MJVTTujAuAIQhVBuW7LID0Eo9ptkwJmSk7Hx0nuBAJxeQntWrwEJ9d04pYhnISu5zLnpVDY0k-ChgGlVL5Yi5rFYeWdQRfeLsGr4WzCpXMBVswf0oocP2QISEcKbMiCIB+tzaWNSeYJMmYEuphzSkZaCGQtWzCDGHNEzRqwxlfkCEOhOTshR9rENufabt4H6SdvNprkpoNJc1cvMNPW+u2cNZ9NMnK1OGr-lOVweEwMpHXiIfx-RXA0RMweldl9XAOGByJnjrAdyTHGOYZ7XKhu3dG-gYDWhQRTaxHNsLWXVBLdi2iciq2xZanLE4RqJ1Tt7YO67IU6VNpaATlQMGWhccFYEJd2013hPdba6oFr-PgFYNy2loXGlQAqQwAjgQL2tBTHSupD7GAvsHr8YpAJviVlf1awt1QP0AcYCB11iMBJQckEN0iSH+z83Q5QLDiY8PEdqeR+51H6PQBkQcGLZegxs7HQp4iQu8MyBak4z3bDWIkgpsUEKBOJbryAbRyOSgYcapEEp1jmblJfh22FhNciWoGAsOY0dtWWAc8CDtui7asocKRvnSlp07mAAyxMfdTGV6sEzgRLfG++-gc3luIcm9etyu3DvxgOZczBgAQoiKi+BQIjg7Iyk8W7QYpEhnXJn6orheDoGOSF+BE-bh3ydMiRKtQ0GANoS-84BChGJObDsDgmUk0EBIKO5hMRbWklIGFMWCdQhREMkHNOsREXHLbdULdBFVfQwAAchr3v1eTFhBSxCgKnArgQ2m1AAYBIDCxhGbEkl5D40S25wXVS26wYBTDr2kCmDV38U+i10OXQW8A8B+mR0eXsFeXcgbgDTIl+Bu2znRnlgrEnSVDmAxF1BLC1AajwIEDckxFhxVG3AYCkC0HgNj3Nij2rR7gpD1FwOZ1Z1M2g0bV-w0Rj0A3RGzlaiknVBrRrC0JWEdi0DzFDxhGbjNDEB8joCoCjlO0cOcODRRFDQDQuiJkkAYFGmQ2Wyz1JRgyuCSLj2pEhFBUxEiJSloLXxWAYLSxoLoLSF-3lA0LXGMC6A8HCIyIcCiI8ATCFCSO5nIMEy1Wb3yOyMMCKLUNKPKNUh6H0NRRywcXwVUiq1M0NXcwKLX3UgmLGMWnMH6MkBYEeDuAuVAAADFos1gVjtA1iehBolg1V9ZNiYtsZFoTjtinh7gDiGAjj-B7JbADBwAw4XYtRwAvkiBwBXkhCAABIsGgIQDYNycARQb4ogYASacAMaY8BgcAP4SQZGcwOYu4BYgYmgHYtYi4ogI43YLE74EhfkdgRoYkkk8AMoHAAgYAOw8wGofIUk+k+oPgFom7AAcVlyRKmClziCFzGMazx2kA3SWCkytENWK2k2tFGC7xQIEHs1pkt3Zwi2ByF3tzh1ADkm9g2nS3cwyz1wEF+mR1BFjXjVBG6hLCVHeX+MBMwBCxkIkEDBkBhDGURGxCkFzHeRrVdJENkDpyriuCkEhREABDaGPwAFkHAGA5R-l25sJcJ8JgBdQEzmAqgASgSM9rB-DyQqBiAASMgsgABif0kmIM0M8MyMsSc2QuUMQdEtHMmufwo-JwU-LULnZkxfNYUAakw1KcMtVU7QUIWHWlNkogcwQkgoBk8c7gckioY8GkzqOoCchcjgJk5LSkQQUQM0d3EcGcstUff9XrUwWzEIZktc8QV0pPD3GcnU87YXQRW7cXKcBUswbqIXHcXc10IXQXXU+oukxc38hAKcykw6Wk+cv80C6AE2MAEPSgp0NlPkjnaI27KYmCUIL2ZcDwOgSoVoGgcACk-AU1PgaSNcF5EgRY+wIQT6MYv+WYoYndRadKR4cCO4eitCK4+i3peRbQeiugRizi2mUINCdixOHi5i1iviwSq4YSvigSnYEhfEkcgi6kIixqSEAg+QGECioY0zCXJEmi09Oivi7ipiqS0StWI4jiriyS0y6SvSyyzYfikyuy8S2y6gfi3pBrfEqhZHH4omFCYnUAcCMQfUSFBQH5EBf9L44cIwecH5ZM6MzuOMlnLEGUGsSiaiKgGbNETAIwYAQKxQKFUK1ycK3gqKkQGKrCgsugiQcAZQKwOQbCmq1Ncs8g6SJ+IgDogQBSWqgJSi2mCXLGTStSS4C2XBEaLS-Eh4sE54jaQ7d49GCK34y01MkEx4qICEhwKEhmNAuEhE0YzSxaNYgAfUWIpBllWOTh1k6vkHsrOpTgGm2Lcp0H8vtMLkuq7DyhfhRFavateuUjTDWBvnGKaSZnCAwHuLAFBKeJeJmo+PmukD+OTKtOBIhtWshOhK2vhMzF2pFxWH2vOoJiOoGNOt2LxrVMkCuusv1jZQvX0lepvSxiBp1hBsNj7KBGZMXQcDdzyL511NSnYO-LZu1QcFIphHasNSUpIoj3UsmPav5pXJu3MAcBUsIKEFFqmHFqVrUvIulroNlp50FsploEmB3XAgVuFpVroLQmNoVo1pBnNrX0GC+roJ+s+kVtUttpls2RnwaIVuvFxwVC0Njh4OHBICjhjhUGC0pAEGmx1nTU2HrDi3DywBRF0PwzpUlqECFADqgNAzFkXzYwkA4xRTVGj29QkF9VdHjhgLdqIM1W-WMDj3VCzrFG-xY2TOgMUGhRIK3w3Js0OiVDIqdiDzxqkCYHBCFG8vJA7F1BWACqCvysMEKtdAiuiGiv+LitjJAESsxGStStHnStlEyuytyuCoEAKtDyXuKqsFKv+KaquyXnPJHEOinDoBfvYy+xNo5rS0GBfs5AcANrblhzvi1EpCkHxBzCmFKj0zbMpHAiIFiimDfqBH0BRCnDfroC1GoCxEmAmCmBYkAfeEwBQbfvAmGDQnwcmVAZ5HAYxFQYLpoHAmwB-kRXodIb3AAPEFUCnA8GBA8EGFKh3EcyZpQrGR90IcnTQYwaoCwZwamGGHIbcEocRnoJoeIcYYEbCAiHZVly5S0bAYEGlggrHLArAoAsIBnIcGAqJOMZMYoIdAfvG3MZ7LvmgYxFFLFnMC4Z8HUYwFUy0GftfrodNP-snyfCnCIG-oCdoHUbyBAusb-PJMKt8hRR1k6LnKsbid-L4BcecMNTvmlAUBVWAF4dcFrDr0KdKcZShJoA8BQGcxQBcYbPwE2K1AUlagAAkoVcnXB7AM8BAVUOmFBmxmEBAam6mGnj9mmOrhnyYiYZVt4MAemtQVUZm68hnWpimMAFAe5b53hcdln8o1gEUtnQ1ccamMBQhLdUCiB-BwJ3hDFfgNm3BbwZCznQAf5XBIESBb4LmPnYEW8Nprn-LLa6mTyNzHzCt2QtA75S7TBCs1cz0nmfBKMBAwxnDHN8m+nl4wxGnJnWmBABn9H3gKnAWixsWJmz88WVnGU9M8hIhohYWV4bcUhRMt8+zanlzrtQUCChBNzxsczWgnHNG1FFBAWZzXBYmmgMAXHKQphtzvH+k3AAA9GRKVlIKSAltxgQDxjwDFjweV9AJVlV0AaVqlmVmPbV4lvVvTA1jAZVoVtaEV-wcx0uQsBwcV9JyV41tVjEdq3I81zxq191qKO11VmwI8NAhWzVhWsta1sAQ1+1jER1js9koNrgVwaV31tMP8GCBB3UfbSkakrho4Xhm8Lx2N4No16VglrNt-ZRwK-N5N4cotvCvh3V-VuN21mRdN712BmtwwYYP3TN4uftv3at4dgQAdjEU1vtid+BgIPN5bdUzsTUugJ2KcW5qKQtjwYtncS3DALd4tvhrxvdxt7Vw9m8Ntk9g9ltm8S13d1wMh8t+N7tsN0zP15TAIflLhjF3wRZkZ+9qKGsflAlrhv9vVk9oQL9jwYl3wY5ugU5gDtwBgflU1rhuDhDk9zFmE6N6D2ZogcD94YwflBwMJ311tqFAjzd-lId7NgQb9ijxDjATEYDqFGd0D4cLUSjtwTAaj8d4YLhmD9DsULj-QYYFDvDmd-jjwK5kTz3ajwoyTgTvD2T9AP47C0kScEE3ygmT5yGQKKUA+hUQjbRY8Q7d4OQcTuvItv5gFlTsANTkEu0TTowVCEKdyfOLyKVOUIzt-HaaQUzn0twCzqdvD6z0KWThwFjhQRT28Dj-9sINFL1sNp9ztvgUIIAA
|
|
6
|
+
*
|
|
7
|
+
* @see
|
|
8
|
+
* - https://stackoverflow.com/q/75531366/1938970: fix for `Type instantiation is excessively deep and possibly infinite in Promise.all`
|
|
9
|
+
*
|
|
10
|
+
* @notes
|
|
11
|
+
* I might take a better look at how things were done in [i18next](https://github.com/i18next/i18next/blob/master/index.d.ts)
|
|
12
|
+
*/
|
|
13
|
+
type Merge<T, K> = Omit<T, keyof K> & K;
|
|
14
|
+
type Join<S1, S2> = S1 extends string ? S2 extends string ? `${S1}.${S2}` : S1 : never;
|
|
15
|
+
/**
|
|
16
|
+
*
|
|
17
|
+
*/
|
|
18
|
+
export type TranslationsDictionaryDefault = {
|
|
19
|
+
"~": any;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Dictionary of all the translations
|
|
23
|
+
*
|
|
24
|
+
* It must uses `~` as namespace for routes defintions to make the `to` and `useTo`
|
|
25
|
+
* working
|
|
26
|
+
*/
|
|
27
|
+
export type TranslationsDictionary = Merge<TranslationsDictionaryDefault, Koine.Translations>;
|
|
28
|
+
/**
|
|
29
|
+
* Namespaces should match the filenames were translations are defined
|
|
30
|
+
*/
|
|
31
|
+
export type TranslateNamespace = Extract<keyof TranslationsDictionary, string>;
|
|
32
|
+
/**
|
|
33
|
+
* Recursive mapped type to extract all usable string paths from a translation
|
|
34
|
+
* definition object (usually from a JSON file).
|
|
35
|
+
* It uses the `infer` "trick" to store the object in memory and prevent
|
|
36
|
+
* [infinite instantiation errors](https://stackoverflow.com/q/75531366/1938970)
|
|
37
|
+
*/
|
|
38
|
+
export type TranslationsPaths<T> = {
|
|
39
|
+
[K in Extract<keyof T, string>]: T[K] extends Record<string, never> | never[] | "" ? never : T[K] extends Record<string, unknown> ? `${K}` | Join<K, TranslationsPaths<T[K]>> : T[K] extends string | number | boolean | Array<string | number | boolean | object> ? `${K}` : never;
|
|
40
|
+
}[Extract<keyof T, string>] extends infer O ? O : never;
|
|
41
|
+
/**
|
|
42
|
+
* Recursive mapped type of all usable string paths from the whole translations
|
|
43
|
+
* dictionary. It uses the `infer` "trick" to store the object in memory and prevent
|
|
44
|
+
* [infinite instantiation errors](https://stackoverflow.com/q/75531366/1938970)
|
|
45
|
+
*/
|
|
46
|
+
export type TranslationsAllPaths = {
|
|
47
|
+
[N in Extract<keyof TranslationsDictionary, string>]: {
|
|
48
|
+
[K in Extract<keyof TranslationsDictionary[N], string>]: TranslationsDictionary[N][K] extends Record<string, never> | never[] | "" ? never : TranslationsDictionary[N][K] extends Record<string, unknown> ? `${N}:${K}` | Join<K extends string ? `${N}:${K}` : `${N}:`, TranslationsPaths<TranslationsDictionary[N][K]>> : TranslationsDictionary[N][K] extends string | number | boolean | Array<string | number | boolean | object> ? `${N}:${K}` : never;
|
|
49
|
+
}[Extract<keyof TranslationsDictionary[N], string>];
|
|
50
|
+
}[Extract<keyof TranslationsDictionary, string>] extends infer O ? O : never;
|
|
51
|
+
/**
|
|
52
|
+
* Unlike in `next-translate` we add passing some predefined arguments as
|
|
53
|
+
* shortcuts for common use cases:
|
|
54
|
+
* - `"obj"` as a shortcut for `{ returnObjects: true }`
|
|
55
|
+
* - `""` as a shortcut for `{ fallback: "" }`
|
|
56
|
+
*
|
|
57
|
+
*/
|
|
58
|
+
export type TranslationShortcut = "obj" | "";
|
|
59
|
+
/**
|
|
60
|
+
* Query object to populate the returned translated string interpolating data
|
|
61
|
+
* or a TranslationShortcut.
|
|
62
|
+
*
|
|
63
|
+
* NOTE: when using a shortcut passing TranslationOptions to `t()` is not supported
|
|
64
|
+
* TODO: type safe this behaviour of the third argument (options).
|
|
65
|
+
*/
|
|
66
|
+
export type TranslationQuery = undefined | null | TranslationShortcut | {
|
|
67
|
+
[key: string]: string | number | boolean;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Opions of the translate function or a TranslationShortcut.
|
|
71
|
+
*
|
|
72
|
+
* NOTE: when using a shortcut passing TranslationOptions to `t()` is not supported
|
|
73
|
+
* TODO: type safe this behaviour of the third argument (options).
|
|
74
|
+
*/
|
|
75
|
+
export type TranslationOptions = undefined | TranslationShortcut | {
|
|
76
|
+
returnObjects?: boolean;
|
|
77
|
+
fallback?: string | string[];
|
|
78
|
+
default?: string;
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Translate function which optionally accept a namespace as first argument
|
|
82
|
+
*/
|
|
83
|
+
export type Translate<TNamespace extends TranslateNamespace | undefined> = TNamespace extends TranslateNamespace ? TranslateNamespaced<TNamespace> : TranslateDefault;
|
|
84
|
+
/**
|
|
85
|
+
* Translate function **without** namespace, it allows to select any of the all
|
|
86
|
+
* available strings in all namespaces.
|
|
87
|
+
*/
|
|
88
|
+
export type TranslateDefault = <TReturn = string>(s: TranslationsAllPaths, q?: TranslationQuery, o?: TranslationOptions) => TReturn;
|
|
89
|
+
/**
|
|
90
|
+
* Translate function **with** namespace, it allows to select only the all available
|
|
91
|
+
* strings in the given namespace.
|
|
92
|
+
*/
|
|
93
|
+
export type TranslateNamespaced<TNamespace extends TranslateNamespace> = <TReturn = string>(s: TranslationsPaths<TranslationsDictionary[TNamespace]>, q?: TranslationQuery, o?: TranslationOptions) => TReturn;
|
|
94
|
+
/**
|
|
95
|
+
* Translate function loose type, to use only in implementations that uses
|
|
96
|
+
* the `t` function indirectly without needng knowledge of the string it needs
|
|
97
|
+
* to output.
|
|
98
|
+
*/
|
|
99
|
+
export type TranslateLoose = (s?: any, q?: TranslationQuery, o?: TranslationOptions) => string;
|
|
100
|
+
/**
|
|
101
|
+
* By convention routes definitions are in the `~.json` file in the locales/{locale}/
|
|
102
|
+
* root folder. This type represent every possibly name of the defined route's
|
|
103
|
+
* localised pathname (even with dynamic portions).
|
|
104
|
+
*/
|
|
105
|
+
export type TranslatedRoute = TranslationsPaths<TranslationsDictionary["~"]>;
|
|
106
|
+
/**
|
|
107
|
+
* Utility standalone type to extract all (max two level depth) children routes
|
|
108
|
+
* that starts with the given string.
|
|
109
|
+
*
|
|
110
|
+
* This is useful to get the subroutes of an application area, e.g. all subroutes
|
|
111
|
+
* of a dashboard, using it with:
|
|
112
|
+
*
|
|
113
|
+
* ```
|
|
114
|
+
* type DashboardRoutes = TranslatedRoutesChildrenOf<"dashboard">;
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
export type TranslatedRoutesChildrenOf<TStarts extends string, T extends string = TranslatedRoute> = T extends `${TStarts}.${infer First}.${infer Second}` ? First | `${First}.${Second}` : T extends `${TStarts}.${infer First}` ? First : never;
|
|
118
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Test this on TSplayground:
|
|
6
|
+
* https://www.typescriptlang.org/play?#code/PTAEFpK6dv4YpSBQJSgJYEYAcA7YAFwE8AHTfAcwGcA6AEzqJrTGQ86+7hRQYCmAYwA2AQwBOA0PjEBbATTJih0gJJ58oAN4oMlIgIkAzFdIAqEsfhriimAPY2dejKHQAiAH4eAXKGsSAG5XAF8+fXxDEzNQS2tbMXsnGgBhJ2NMKh1w8LYIHkKi4sh8rE1ickVmVnQS+obUFFIyaQApB0oAHgBlbAAaUB6AJgA+UABeIexQAQAPQ3wGGlAaIglKKlcAfiHh2YWBJZW1jepXDF2AAwASbT7QujuR0KuL0H8+1398AQA3IwhNAAKmBemBoAAIpghMlZBISKAHMYAiIRKAiAALaTrBJ2Rw2cHAFDzMgOCREDFVOJWGz4lLQ2EEySIqYaAh0eJ0pIEmhA4Cg8GgABy8kUylUJ0xDgAriIGKA5EkhJiMdjQJkREcxSsAO5GHG0xJwlaSaSCTK-BhEklzMkUqmtGl4pICUUKJSxKYAUQWVlhXQA1gISMjndyTYy4SzBqdNqN+YLQBCAErCGUSGiYAGKsRkVoKlo4hwHXGw1HomU0MQAIy1q3Wm1AyixK2MEgccgCGKN9PwQotlEwcKRNYAVsJKQAKKsysRoxHtzvdto9ADywo1mC1AEo6EK1JSq4o1dIrpRjEYrqAPI2hIGPBiS2tyTj1Q5x5OsFoFHJyYjrAVMgpABKIhQAbQvIdDG-NZrHsHknFmCQO0zABdKdMSIIgyBoXwQDg+8HABEwRAcXU6CETtgAAR2AAB2ABWRiAGZsBYgA2DjgGwABOFjcF4+iAAYdxtUlyUpItw2NXkAAUkkxGgulccwUHGKZdAwcCAGlv1AX0yyIIMQzDcxY0bahRjQ3x3nQeZRBlQRZjkMhSFHCdYRoQYBFc9zJCsEhvJctzETjahWDcOJdLQ0sjmWUA0yoiQGC6cKqEGX4SPGAAfGR-iMcDYryjxH12LKjDssApCEDMswBERESVWQqGkD9PJYd5-HMGK4uORLhHJVL0sGGV8EDfByPwcZdneDA8tubQdNedwwCxTAVg2p9QBraRa3rIgS2PU8b3ax8aGlClaqIObQDyjpuh0wYuVklIFNbLoep0tDRlGKqK3I5sNjkYdsxPckAhQsRETDYDMBB+wAUitxut6+ZFgS9K7pkGU5F2iRsZrBwHC1axsYAQShkg0ss7I8vwXH8cJ4nSem0BrjuZa3ii+y5kc5zAnW6hZhEGgBC6-KSJCUJwMM-1jODUMUXMhszioay+oSi8jFANd2d1j5JcBPgBTBZMBtqzMwdzfMBELakw3nStqzraQsZbJSNQ7LssWkXVpQO3tEMJc2GBhaMEToUBD1AY8Vl90Bz3wS8JGvW8NnvR9DobV8Tvar9KEVXz-wCJYgYKsDzcg5PoOkSg4KiTBg+Q1CaAwrCcLwgiiBUQNiKMYwyIoqi5FohjmLYzjuL4gShNE8S7Ukx0LCDk1ybRd7Pc01xwM3Qu5ZUBXTOV1feSjZkEQstXrP8LS3F0-SD4DRWzNPhlw4vkhd7Q-p0pv27eb82kL5UKHlJzBRAf5KmEC-JhVpsjKKL0+w0HPk4Fk380aHH6klIaNM1aZQKhIXKRsJBFWxqVfWFUJAAOqumK2DUmrWDEK1MBXlbrdTfjYVB8Iv7CjQpgjGKwcEpTwZsUa41Jq6jZtsW6UUFp3GFKEXwnMVroHWpteOJZdoBFdttY6CcPBnVWJdIg11ZFuHup0fAXQ9Lo3iicWm+tFqKOUUtFa-hnFKKuM9ThNBN7KSQcHFBH80EIgwd9X6NCAa6iBvDUGSMkQEwCtDJEKI4YIzBgglGMlkHcPQXwgR9jVZNnpozHWeUiYkwEGTPKlNAqiOFqUvG5Sdos2qdIxOCilEqO5lFVaBwgGlxIELbIAhRbiz6YbKhYRZZ+kPiZJWOSgl5LCXwq+8Y0LS1mUZBZr8XSRhCTw9ZVlYp2P6trAmetdh6x+IQxMZsIQAFV8AiEwMGfSVxfgLHALiCMAhrz6gCAwICYgaBZmFjQTs0hgJ2wEJaO2kMqC4yOCwAIkUIQXUktdNsEMR5-i0MdIQoLFC2XNuAROhjxweGvKC7smKroykpMYCGVxtCgCkEQDM+A1yfi8v4dYMppCvCFOSq4pUaWmmMVixlGoWVstMGiGsvd-AUOFcmBe9opLUkCXCHoJjrqTFOlS8hHh7lCgAIqCoRKwqSJYyRkDlK6E6HKuUIt+caBFWMDBGDJPiYWDAkhiCFBDMQSzdX6sZfudV5thRrnMN6fw-sjix3BdkUN9LTEyuUGCpsOqCRrjcrybaVwiBTh3NeLak1KQ0BlPmSSdshTmDXJCNc-LqTVkvGqLau1MRiD+I4DMqSTrrRSoi5FURQBTgcIWlIe4NVL2knmpwlqjCslcHlMag4rTrpxmiHdS78B6ulTdeaLhJngUVv4dKNlimNJxs0gmFS2nWBCFFUIZrzYFqLWGBO7q7DSGMGNJkSEQ1hoJEehlRAo0PJFHGhNoAk0EtTXSiNlJs3IYPQWk0xbS3lqwCsKtqxa2aobebJtLa21Og7W+btAhe39tlATH96oR0KkkEihQE6p0zpsHO5MxIJIOkXZwrDRaJg7s3XCygpHsYHog5mk92M75RRdRIblvKWDbH8JU1mr6+kKpEEq+8Wnb101M0VPTUULRiDlEQEz6VLOgHfSbJMEIdUAaAyOf2MJVTTujAuAIQhVBuW7LID0Eo9ptkwJmSk7Hx0nuBAJxeQntWrwEJ9d04pYhnISu5zLnpVDY0k-ChgGlVL5Yi5rFYeWdQRfeLsGr4WzCpXMBVswf0oocP2QISEcKbMiCIB+tzaWNSeYJMmYEuphzSkZaCGQtWzCDGHNEzRqwxlfkCEOhOTshR9rENufabt4H6SdvNprkpoNJc1cvMNPW+u2cNZ9NMnK1OGr-lOVweEwMpHXiIfx-RXA0RMweldl9XAOGByJnjrAdyTHGOYZ7XKhu3dG-gYDWhQRTaxHNsLWXVBLdi2iciq2xZanLE4RqJ1Tt7YO67IU6VNpaATlQMGWhccFYEJd2013hPdba6oFr-PgFYNy2loXGlQAqQwAjgQL2tBTHSupD7GAvsHr8YpAJviVlf1awt1QP0AcYCB11iMBJQckEN0iSH+z83Q5QLDiY8PEdqeR+51H6PQBkQcGLZegxs7HQp4iQu8MyBak4z3bDWIkgpsUEKBOJbryAbRyOSgYcapEEp1jmblJfh22FhNciWoGAsOY0dtWWAc8CDtui7asocKRvnSlp07mAAyxMfdTGV6sEzgRLfG++-gc3luIcm9etyu3DvxgOZczBgAQoiKi+BQIjg7Iyk8W7QYpEhnXJn6orheDoGOSF+BE-bh3ydMiRKtQ0GANoS-84BChGJObDsDgmUk0EBIKO5hMRbWklIGFMWCdQhREMkHNOsREXHLbdULdBFVfQwAAchr3v1eTFhBSxCgKnArgQ2m1AAYBIDCxhGbEkl5D40S25wXVS26wYBTDr2kCmDV38U+i10OXQW8A8B+mR0eXsFeXcgbgDTIl+Bu2znRnlgrEnSVDmAxF1BLC1AajwIEDckxFhxVG3AYCkC0HgNj3Nij2rR7gpD1FwOZ1Z1M2g0bV-w0Rj0A3RGzlaiknVBrRrC0JWEdi0DzFDxhGbjNDEB8joCoCjlO0cOcODRRFDQDQuiJkkAYFGmQ2Wyz1JRgyuCSLj2pEhFBUxEiJSloLXxWAYLSxoLoLSF-3lA0LXGMC6A8HCIyIcCiI8ATCFCSO5nIMEy1Wb3yOyMMCKLUNKPKNUh6H0NRRywcXwVUiq1M0NXcwKLX3UgmLGMWnMH6MkBYEeDuAuVAAADFos1gVjtA1iehBolg1V9ZNiYtsZFoTjtinh7gDiGAjj-B7JbADBwAw4XYtRwAvkiBwBXkhCAABIsGgIQDYNycARQb4ogYASacAMaY8BgcAP4SQZGcwOYu4BYgYmgHYtYi4ogI43YLE74EhfkdgRoYkkk8AMoHAAgYAOw8wGofIUk+k+oPgFom7AAcVlyRKmClziCFzGMazx2kA3SWCkytENWK2k2tFGC7xQIEHs1pkt3Zwi2ByF3tzh1ADkm9g2nS3cwyz1wEF+mR1BFjXjVBG6hLCVHeX+MBMwBCxkIkEDBkBhDGURGxCkFzHeRrVdJENkDpyriuCkEhREABDaGPwAFkHAGA5R-l25sJcJ8JgBdQEzmAqgASgSM9rB-DyQqBiAASMgsgABif0kmIM0M8MyMsSc2QuUMQdEtHMmufwo-JwU-LULnZkxfNYUAakw1KcMtVU7QUIWHWlNkogcwQkgoBk8c7gckioY8GkzqOoCchcjgJk5LSkQQUQM0d3EcGcstUff9XrUwWzEIZktc8QV0pPD3GcnU87YXQRW7cXKcBUswbqIXHcXc10IXQXXU+oukxc38hAKcykw6Wk+cv80C6AE2MAEPSgp0NlPkjnaI27KYmCUIL2ZcDwOgSoVoGgcACk-AU1PgaSNcF5EgRY+wIQT6MYv+WYoYndRadKR4cCO4eitCK4+i3peRbQeiugRizi2mUINCdixOHi5i1iviwSq4YSvigSnYEhfEkcgi6kIixqSEAg+QGECioY0zCXJEmi09Oivi7ipiqS0StWI4jiriyS0y6SvSyyzYfikyuy8S2y6gfi3pBrfEqhZHH4omFCYnUAcCMQfUSFBQH5EBf9L44cIwecH5ZM6MzuOMlnLEGUGsSiaiKgGbNETAIwYAQKxQKFUK1ycK3gqKkQGKrCgsugiQcAZQKwOQbCmq1Ncs8g6SJ+IgDogQBSWqgJSi2mCXLGTStSS4C2XBEaLS-Eh4sE54jaQ7d49GCK34y01MkEx4qICEhwKEhmNAuEhE0YzSxaNYgAfUWIpBllWOTh1k6vkHsrOpTgGm2Lcp0H8vtMLkuq7DyhfhRFavateuUjTDWBvnGKaSZnCAwHuLAFBKeJeJmo+PmukD+OTKtOBIhtWshOhK2vhMzF2pFxWH2vOoJiOoGNOt2LxrVMkCuusv1jZQvX0lepvSxiBp1hBsNj7KBGZMXQcDdzyL511NSnYO-LZu1QcFIphHasNSUpIoj3UsmPav5pXJu3MAcBUsIKEFFqmHFqVrUvIulroNlp50FsploEmB3XAgVuFpVroLQmNoVo1pBnNrX0GC+roJ+s+kVtUttpls2RnwaIVuvFxwVC0Njh4OHBICjhjhUGC0pAEGmx1nTU2HrDi3DywBRF0PwzpUlqECFADqgNAzFkXzYwkA4xRTVGj29QkF9VdHjhgLdqIM1W-WMDj3VCzrFG-xY2TOgMUGhRIK3w3Js0OiVDIqdiDzxqkCYHBCFG8vJA7F1BWACqCvysMEKtdAiuiGiv+LitjJAESsxGStStHnStlEyuytyuCoEAKtDyXuKqsFKv+KaquyXnPJHEOinDoBfvYy+xNo5rS0GBfs5AcANrblhzvi1EpCkHxBzCmFKj0zbMpHAiIFiimDfqBH0BRCnDfroC1GoCxEmAmCmBYkAfeEwBQbfvAmGDQnwcmVAZ5HAYxFQYLpoHAmwB-kRXodIb3AAPEFUCnA8GBA8EGFKh3EcyZpQrGR90IcnTQYwaoCwZwamGGHIbcEocRnoJoeIcYYEbCAiHZVly5S0bAYEGlggrHLArAoAsIBnIcGAqJOMZMYoIdAfvG3MZ7LvmgYxFFLFnMC4Z8HUYwFUy0GftfrodNP-snyfCnCIG-oCdoHUbyBAusb-PJMKt8hRR1k6LnKsbid-L4BcecMNTvmlAUBVWAF4dcFrDr0KdKcZShJoA8BQGcxQBcYbPwE2K1AUlagAAkoVcnXB7AM8BAVUOmFBmxmEBAam6mGnj9mmOrhnyYiYZVt4MAemtQVUZm68hnWpimMAFAe5b53hcdln8o1gEUtnQ1ccamMBQhLdUCiB-BwJ3hDFfgNm3BbwZCznQAf5XBIESBb4LmPnYEW8Nprn-LLa6mTyNzHzCt2QtA75S7TBCs1cz0nmfBKMBAwxnDHN8m+nl4wxGnJnWmBABn9H3gKnAWixsWJmz88WVnGU9M8hIhohYWV4bcUhRMt8+zanlzrtQUCChBNzxsczWgnHNG1FFBAWZzXBYmmgMAXHKQphtzvH+k3AAA9GRKVlIKSAltxgQDxjwDFjweV9AJVlV0AaVqlmVmPbV4lvVvTA1jAZVoVtaEV-wcx0uQsBwcV9JyV41tVjEdq3I81zxq191qKO11VmwI8NAhWzVhWsta1sAQ1+1jER1js9koNrgVwaV31tMP8GCBB3UfbSkakrho4Xhm8Lx2N4No16VglrNt-ZRwK-N5N4cotvCvh3V-VuN21mRdN712BmtwwYYP3TN4uftv3at4dgQAdjEU1vtid+BgIPN5bdUzsTUugJ2KcW5qKQtjwYtncS3DALd4tvhrxvdxt7Vw9m8Ntk9g9ltm8S13d1wMh8t+N7tsN0zP15TAIflLhjF3wRZkZ+9qKGsflAlrhv9vVk9oQL9jwYl3wY5ugU5gDtwBgflU1rhuDhDk9zFmE6N6D2ZogcD94YwflBwMJ311tqFAjzd-lId7NgQb9ijxDjATEYDqFGd0D4cLUSjtwTAaj8d4YLhmD9DsULj-QYYFDvDmd-jjwK5kTz3ajwoyTgTvD2T9AP47C0kScEE3ygmT5yGQKKUA+hUQjbRY8Q7d4OQcTuvItv5gFlTsANTkEu0TTowVCEKdyfOLyKVOUIzt-HaaQUzn0twCzqdvD6z0KWThwFjhQRT28Dj-9sINFL1sNp9ztvgUIIAA
|
|
7
|
+
*
|
|
8
|
+
* @see
|
|
9
|
+
* - https://stackoverflow.com/q/75531366/1938970: fix for `Type instantiation is excessively deep and possibly infinite in Promise.all`
|
|
10
|
+
*
|
|
11
|
+
* @notes
|
|
12
|
+
* I might take a better look at how things were done in [i18next](https://github.com/i18next/i18next/blob/master/index.d.ts)
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* Test this on TSplayground:
|
|
5
|
+
* https://www.typescriptlang.org/play?#code/PTAEFpK6dv4YpSBQJSgJYEYAcA7YAFwE8AHTfAcwGcA6AEzqJrTGQ86+7hRQYCmAYwA2AQwBOA0PjEBbATTJih0gJJ58oAN4oMlIgIkAzFdIAqEsfhriimAPY2dejKHQAiAH4eAXKGsSAG5XAF8+fXxDEzNQS2tbMXsnGgBhJ2NMKh1w8LYIHkKi4sh8rE1ickVmVnQS+obUFFIyaQApB0oAHgBlbAAaUB6AJgA+UABeIexQAQAPQ3wGGlAaIglKKlcAfiHh2YWBJZW1jepXDF2AAwASbT7QujuR0KuL0H8+1398AQA3IwhNAAKmBemBoAAIpghMlZBISKAHMYAiIRKAiAALaTrBJ2Rw2cHAFDzMgOCREDFVOJWGz4lLQ2EEySIqYaAh0eJ0pIEmhA4Cg8GgABy8kUylUJ0xDgAriIGKA5EkhJiMdjQJkREcxSsAO5GHG0xJwlaSaSCTK-BhEklzMkUqmtGl4pICUUKJSxKYAUQWVlhXQA1gISMjndyTYy4SzBqdNqN+YLQBCAErCGUSGiYAGKsRkVoKlo4hwHXGw1HomU0MQAIy1q3Wm1AyixK2MEgccgCGKN9PwQotlEwcKRNYAVsJKQAKKsysRoxHtzvdto9ADywo1mC1AEo6EK1JSq4o1dIrpRjEYrqAPI2hIGPBiS2tyTj1Q5x5OsFoFHJyYjrAVMgpABKIhQAbQvIdDG-NZrHsHknFmCQO0zABdKdMSIIgyBoXwQDg+8HABEwRAcXU6CETtgAAR2AAB2ABWRiAGZsBYgA2DjgGwABOFjcF4+iAAYdxtUlyUpItw2NXkAAUkkxGgulccwUHGKZdAwcCAGlv1AX0yyIIMQzDcxY0bahRjQ3x3nQeZRBlQRZjkMhSFHCdYRoQYBFc9zJCsEhvJctzETjahWDcOJdLQ0sjmWUA0yoiQGC6cKqEGX4SPGAAfGR-iMcDYryjxH12LKjDssApCEDMswBERESVWQqGkD9PJYd5-HMGK4uORLhHJVL0sGGV8EDfByPwcZdneDA8tubQdNedwwCxTAVg2p9QBraRa3rIgS2PU8b3ax8aGlClaqIObQDyjpuh0wYuVklIFNbLoep0tDRlGKqK3I5sNjkYdsxPckAhQsRETDYDMBB+wAUitxut6+ZFgS9K7pkGU5F2iRsZrBwHC1axsYAQShkg0ss7I8vwXH8cJ4nSem0BrjuZa3ii+y5kc5zAnW6hZhEGgBC6-KSJCUJwMM-1jODUMUXMhszioay+oSi8jFANd2d1j5JcBPgBTBZMBtqzMwdzfMBELakw3nStqzraQsZbJSNQ7LssWkXVpQO3tEMJc2GBhaMEToUBD1AY8Vl90Bz3wS8JGvW8NnvR9DobV8Tvar9KEVXz-wCJYgYKsDzcg5PoOkSg4KiTBg+Q1CaAwrCcLwgiiBUQNiKMYwyIoqi5FohjmLYzjuL4gShNE8S7Ukx0LCDk1ybRd7Pc01xwM3Qu5ZUBXTOV1feSjZkEQstXrP8LS3F0-SD4DRWzNPhlw4vkhd7Q-p0pv27eb82kL5UKHlJzBRAf5KmEC-JhVpsjKKL0+w0HPk4Fk380aHH6klIaNM1aZQKhIXKRsJBFWxqVfWFUJAAOqumK2DUmrWDEK1MBXlbrdTfjYVB8Iv7CjQpgjGKwcEpTwZsUa41Jq6jZtsW6UUFp3GFKEXwnMVroHWpteOJZdoBFdttY6CcPBnVWJdIg11ZFuHup0fAXQ9Lo3iicWm+tFqKOUUtFa-hnFKKuM9ThNBN7KSQcHFBH80EIgwd9X6NCAa6iBvDUGSMkQEwCtDJEKI4YIzBgglGMlkHcPQXwgR9jVZNnpozHWeUiYkwEGTPKlNAqiOFqUvG5Sdos2qdIxOCilEqO5lFVaBwgGlxIELbIAhRbiz6YbKhYRZZ+kPiZJWOSgl5LCXwq+8Y0LS1mUZBZr8XSRhCTw9ZVlYp2P6trAmetdh6x+IQxMZsIQAFV8AiEwMGfSVxfgLHALiCMAhrz6gCAwICYgaBZmFjQTs0hgJ2wEJaO2kMqC4yOCwAIkUIQXUktdNsEMR5-i0MdIQoLFC2XNuAROhjxweGvKC7smKroykpMYCGVxtCgCkEQDM+A1yfi8v4dYMppCvCFOSq4pUaWmmMVixlGoWVstMGiGsvd-AUOFcmBe9opLUkCXCHoJjrqTFOlS8hHh7lCgAIqCoRKwqSJYyRkDlK6E6HKuUIt+caBFWMDBGDJPiYWDAkhiCFBDMQSzdX6sZfudV5thRrnMN6fw-sjix3BdkUN9LTEyuUGCpsOqCRrjcrybaVwiBTh3NeLak1KQ0BlPmSSdshTmDXJCNc-LqTVkvGqLau1MRiD+I4DMqSTrrRSoi5FURQBTgcIWlIe4NVL2knmpwlqjCslcHlMag4rTrpxmiHdS78B6ulTdeaLhJngUVv4dKNlimNJxs0gmFS2nWBCFFUIZrzYFqLWGBO7q7DSGMGNJkSEQ1hoJEehlRAo0PJFHGhNoAk0EtTXSiNlJs3IYPQWk0xbS3lqwCsKtqxa2aobebJtLa21Og7W+btAhe39tlATH96oR0KkkEihQE6p0zpsHO5MxIJIOkXZwrDRaJg7s3XCygpHsYHog5mk92M75RRdRIblvKWDbH8JU1mr6+kKpEEq+8Wnb101M0VPTUULRiDlEQEz6VLOgHfSbJMEIdUAaAyOf2MJVTTujAuAIQhVBuW7LID0Eo9ptkwJmSk7Hx0nuBAJxeQntWrwEJ9d04pYhnISu5zLnpVDY0k-ChgGlVL5Yi5rFYeWdQRfeLsGr4WzCpXMBVswf0oocP2QISEcKbMiCIB+tzaWNSeYJMmYEuphzSkZaCGQtWzCDGHNEzRqwxlfkCEOhOTshR9rENufabt4H6SdvNprkpoNJc1cvMNPW+u2cNZ9NMnK1OGr-lOVweEwMpHXiIfx-RXA0RMweldl9XAOGByJnjrAdyTHGOYZ7XKhu3dG-gYDWhQRTaxHNsLWXVBLdi2iciq2xZanLE4RqJ1Tt7YO67IU6VNpaATlQMGWhccFYEJd2013hPdba6oFr-PgFYNy2loXGlQAqQwAjgQL2tBTHSupD7GAvsHr8YpAJviVlf1awt1QP0AcYCB11iMBJQckEN0iSH+z83Q5QLDiY8PEdqeR+51H6PQBkQcGLZegxs7HQp4iQu8MyBak4z3bDWIkgpsUEKBOJbryAbRyOSgYcapEEp1jmblJfh22FhNciWoGAsOY0dtWWAc8CDtui7asocKRvnSlp07mAAyxMfdTGV6sEzgRLfG++-gc3luIcm9etyu3DvxgOZczBgAQoiKi+BQIjg7Iyk8W7QYpEhnXJn6orheDoGOSF+BE-bh3ydMiRKtQ0GANoS-84BChGJObDsDgmUk0EBIKO5hMRbWklIGFMWCdQhREMkHNOsREXHLbdULdBFVfQwAAchr3v1eTFhBSxCgKnArgQ2m1AAYBIDCxhGbEkl5D40S25wXVS26wYBTDr2kCmDV38U+i10OXQW8A8B+mR0eXsFeXcgbgDTIl+Bu2znRnlgrEnSVDmAxF1BLC1AajwIEDckxFhxVG3AYCkC0HgNj3Nij2rR7gpD1FwOZ1Z1M2g0bV-w0Rj0A3RGzlaiknVBrRrC0JWEdi0DzFDxhGbjNDEB8joCoCjlO0cOcODRRFDQDQuiJkkAYFGmQ2Wyz1JRgyuCSLj2pEhFBUxEiJSloLXxWAYLSxoLoLSF-3lA0LXGMC6A8HCIyIcCiI8ATCFCSO5nIMEy1Wb3yOyMMCKLUNKPKNUh6H0NRRywcXwVUiq1M0NXcwKLX3UgmLGMWnMH6MkBYEeDuAuVAAADFos1gVjtA1iehBolg1V9ZNiYtsZFoTjtinh7gDiGAjj-B7JbADBwAw4XYtRwAvkiBwBXkhCAABIsGgIQDYNycARQb4ogYASacAMaY8BgcAP4SQZGcwOYu4BYgYmgHYtYi4ogI43YLE74EhfkdgRoYkkk8AMoHAAgYAOw8wGofIUk+k+oPgFom7AAcVlyRKmClziCFzGMazx2kA3SWCkytENWK2k2tFGC7xQIEHs1pkt3Zwi2ByF3tzh1ADkm9g2nS3cwyz1wEF+mR1BFjXjVBG6hLCVHeX+MBMwBCxkIkEDBkBhDGURGxCkFzHeRrVdJENkDpyriuCkEhREABDaGPwAFkHAGA5R-l25sJcJ8JgBdQEzmAqgASgSM9rB-DyQqBiAASMgsgABif0kmIM0M8MyMsSc2QuUMQdEtHMmufwo-JwU-LULnZkxfNYUAakw1KcMtVU7QUIWHWlNkogcwQkgoBk8c7gckioY8GkzqOoCchcjgJk5LSkQQUQM0d3EcGcstUff9XrUwWzEIZktc8QV0pPD3GcnU87YXQRW7cXKcBUswbqIXHcXc10IXQXXU+oukxc38hAKcykw6Wk+cv80C6AE2MAEPSgp0NlPkjnaI27KYmCUIL2ZcDwOgSoVoGgcACk-AU1PgaSNcF5EgRY+wIQT6MYv+WYoYndRadKR4cCO4eitCK4+i3peRbQeiugRizi2mUINCdixOHi5i1iviwSq4YSvigSnYEhfEkcgi6kIixqSEAg+QGECioY0zCXJEmi09Oivi7ipiqS0StWI4jiriyS0y6SvSyyzYfikyuy8S2y6gfi3pBrfEqhZHH4omFCYnUAcCMQfUSFBQH5EBf9L44cIwecH5ZM6MzuOMlnLEGUGsSiaiKgGbNETAIwYAQKxQKFUK1ycK3gqKkQGKrCgsugiQcAZQKwOQbCmq1Ncs8g6SJ+IgDogQBSWqgJSi2mCXLGTStSS4C2XBEaLS-Eh4sE54jaQ7d49GCK34y01MkEx4qICEhwKEhmNAuEhE0YzSxaNYgAfUWIpBllWOTh1k6vkHsrOpTgGm2Lcp0H8vtMLkuq7DyhfhRFavateuUjTDWBvnGKaSZnCAwHuLAFBKeJeJmo+PmukD+OTKtOBIhtWshOhK2vhMzF2pFxWH2vOoJiOoGNOt2LxrVMkCuusv1jZQvX0lepvSxiBp1hBsNj7KBGZMXQcDdzyL511NSnYO-LZu1QcFIphHasNSUpIoj3UsmPav5pXJu3MAcBUsIKEFFqmHFqVrUvIulroNlp50FsploEmB3XAgVuFpVroLQmNoVo1pBnNrX0GC+roJ+s+kVtUttpls2RnwaIVuvFxwVC0Njh4OHBICjhjhUGC0pAEGmx1nTU2HrDi3DywBRF0PwzpUlqECFADqgNAzFkXzYwkA4xRTVGj29QkF9VdHjhgLdqIM1W-WMDj3VCzrFG-xY2TOgMUGhRIK3w3Js0OiVDIqdiDzxqkCYHBCFG8vJA7F1BWACqCvysMEKtdAiuiGiv+LitjJAESsxGStStHnStlEyuytyuCoEAKtDyXuKqsFKv+KaquyXnPJHEOinDoBfvYy+xNo5rS0GBfs5AcANrblhzvi1EpCkHxBzCmFKj0zbMpHAiIFiimDfqBH0BRCnDfroC1GoCxEmAmCmBYkAfeEwBQbfvAmGDQnwcmVAZ5HAYxFQYLpoHAmwB-kRXodIb3AAPEFUCnA8GBA8EGFKh3EcyZpQrGR90IcnTQYwaoCwZwamGGHIbcEocRnoJoeIcYYEbCAiHZVly5S0bAYEGlggrHLArAoAsIBnIcGAqJOMZMYoIdAfvG3MZ7LvmgYxFFLFnMC4Z8HUYwFUy0GftfrodNP-snyfCnCIG-oCdoHUbyBAusb-PJMKt8hRR1k6LnKsbid-L4BcecMNTvmlAUBVWAF4dcFrDr0KdKcZShJoA8BQGcxQBcYbPwE2K1AUlagAAkoVcnXB7AM8BAVUOmFBmxmEBAam6mGnj9mmOrhnyYiYZVt4MAemtQVUZm68hnWpimMAFAe5b53hcdln8o1gEUtnQ1ccamMBQhLdUCiB-BwJ3hDFfgNm3BbwZCznQAf5XBIESBb4LmPnYEW8Nprn-LLa6mTyNzHzCt2QtA75S7TBCs1cz0nmfBKMBAwxnDHN8m+nl4wxGnJnWmBABn9H3gKnAWixsWJmz88WVnGU9M8hIhohYWV4bcUhRMt8+zanlzrtQUCChBNzxsczWgnHNG1FFBAWZzXBYmmgMAXHKQphtzvH+k3AAA9GRKVlIKSAltxgQDxjwDFjweV9AJVlV0AaVqlmVmPbV4lvVvTA1jAZVoVtaEV-wcx0uQsBwcV9JyV41tVjEdq3I81zxq191qKO11VmwI8NAhWzVhWsta1sAQ1+1jER1js9koNrgVwaV31tMP8GCBB3UfbSkakrho4Xhm8Lx2N4No16VglrNt-ZRwK-N5N4cotvCvh3V-VuN21mRdN712BmtwwYYP3TN4uftv3at4dgQAdjEU1vtid+BgIPN5bdUzsTUugJ2KcW5qKQtjwYtncS3DALd4tvhrxvdxt7Vw9m8Ntk9g9ltm8S13d1wMh8t+N7tsN0zP15TAIflLhjF3wRZkZ+9qKGsflAlrhv9vVk9oQL9jwYl3wY5ugU5gDtwBgflU1rhuDhDk9zFmE6N6D2ZogcD94YwflBwMJ311tqFAjzd-lId7NgQb9ijxDjATEYDqFGd0D4cLUSjtwTAaj8d4YLhmD9DsULj-QYYFDvDmd-jjwK5kTz3ajwoyTgTvD2T9AP47C0kScEE3ygmT5yGQKKUA+hUQjbRY8Q7d4OQcTuvItv5gFlTsANTkEu0TTowVCEKdyfOLyKVOUIzt-HaaQUzn0twCzqdvD6z0KWThwFjhQRT28Dj-9sINFL1sNp9ztvgUIIAA
|
|
6
|
+
*
|
|
7
|
+
* @see
|
|
8
|
+
* - https://stackoverflow.com/q/75531366/1938970: fix for `Type instantiation is excessively deep and possibly infinite in Promise.all`
|
|
9
|
+
*
|
|
10
|
+
* @notes
|
|
11
|
+
* I might take a better look at how things were done in [i18next](https://github.com/i18next/i18next/blob/master/index.d.ts)
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.useBackUrl = void 0;
|
|
5
|
+
var tslib_1 = require("tslib");
|
|
6
|
+
var react_1 = require("react");
|
|
7
|
+
var router_1 = require("next/router");
|
|
8
|
+
var createStorage_1 = tslib_1.__importDefault(require("@koine/browser/createStorage"));
|
|
9
|
+
var back = (0, createStorage_1.default)({
|
|
10
|
+
lastUrl: "",
|
|
11
|
+
});
|
|
12
|
+
function useBackUrl() {
|
|
13
|
+
var asPath = (0, router_1.useRouter)().asPath;
|
|
14
|
+
var calledOnce = (0, react_1.useRef)(false);
|
|
15
|
+
var _a = (0, react_1.useState)(), backUrl = _a[0], setBackUrl = _a[1];
|
|
16
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
17
|
+
(0, react_1.useEffect)(function () {
|
|
18
|
+
if (calledOnce.current) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
var prevLastUrl = back.get("lastUrl");
|
|
22
|
+
// console.log("useBackUrl: prevLastUrl", prevLastUrl);
|
|
23
|
+
// first set it to use on a link, set to undefined if the previous URL
|
|
24
|
+
// is the same as the current one
|
|
25
|
+
setBackUrl(asPath === prevLastUrl || !prevLastUrl ? undefined : prevLastUrl);
|
|
26
|
+
// then update the local storage
|
|
27
|
+
back.set("lastUrl", asPath);
|
|
28
|
+
calledOnce.current = true;
|
|
29
|
+
});
|
|
30
|
+
return backUrl;
|
|
31
|
+
}
|
|
32
|
+
exports.useBackUrl = useBackUrl;
|
|
33
|
+
exports.default = useBackUrl;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
import { useRouter } from "next/router";
|
|
4
|
+
import createStorage from "@koine/browser/createStorage";
|
|
5
|
+
var back = createStorage({
|
|
6
|
+
lastUrl: "",
|
|
7
|
+
});
|
|
8
|
+
export function useBackUrl() {
|
|
9
|
+
var asPath = useRouter().asPath;
|
|
10
|
+
var calledOnce = useRef(false);
|
|
11
|
+
var _a = useState(), backUrl = _a[0], setBackUrl = _a[1];
|
|
12
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
13
|
+
useEffect(function () {
|
|
14
|
+
if (calledOnce.current) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
var prevLastUrl = back.get("lastUrl");
|
|
18
|
+
// console.log("useBackUrl: prevLastUrl", prevLastUrl);
|
|
19
|
+
// first set it to use on a link, set to undefined if the previous URL
|
|
20
|
+
// is the same as the current one
|
|
21
|
+
setBackUrl(asPath === prevLastUrl || !prevLastUrl ? undefined : prevLastUrl);
|
|
22
|
+
// then update the local storage
|
|
23
|
+
back.set("lastUrl", asPath);
|
|
24
|
+
calledOnce.current = true;
|
|
25
|
+
});
|
|
26
|
+
return backUrl;
|
|
27
|
+
}
|
|
28
|
+
export default useBackUrl;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import format from "date-fns/format";
|
|
2
|
+
/**
|
|
3
|
+
* Automatically returns the `date-fns/format` function with the right locale
|
|
4
|
+
* passed as option (grabbed from next router value).
|
|
5
|
+
*/
|
|
6
|
+
export declare const useDateFormat: () => typeof format;
|
|
7
|
+
export default useDateFormat;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.useDateFormat = void 0;
|
|
5
|
+
var tslib_1 = require("tslib");
|
|
6
|
+
var react_1 = require("react");
|
|
7
|
+
var router_1 = require("next/router");
|
|
8
|
+
var format_1 = tslib_1.__importDefault(require("date-fns/format"));
|
|
9
|
+
var useDateLocale_1 = tslib_1.__importDefault(require("@koine/react/hooks/useDateLocale"));
|
|
10
|
+
/**
|
|
11
|
+
* Automatically returns the `date-fns/format` function with the right locale
|
|
12
|
+
* passed as option (grabbed from next router value).
|
|
13
|
+
*/
|
|
14
|
+
var useDateFormat = function () {
|
|
15
|
+
var _a = (0, react_1.useState)(function () {
|
|
16
|
+
return function () {
|
|
17
|
+
var args = [];
|
|
18
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
19
|
+
args[_i] = arguments[_i];
|
|
20
|
+
}
|
|
21
|
+
return format_1.default.apply(void 0, args);
|
|
22
|
+
};
|
|
23
|
+
}), formatter = _a[0], setFormatter = _a[1];
|
|
24
|
+
var router = (0, router_1.useRouter)();
|
|
25
|
+
var locale = (0, useDateLocale_1.default)(router.locale);
|
|
26
|
+
(0, react_1.useEffect)(function () {
|
|
27
|
+
if (locale) {
|
|
28
|
+
var newFormatter_1 = function (date, _format, options) { return (0, format_1.default)(date, _format, tslib_1.__assign(tslib_1.__assign({}, (options || {})), { locale: locale })); };
|
|
29
|
+
setFormatter(function () {
|
|
30
|
+
return function () {
|
|
31
|
+
var args = [];
|
|
32
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
33
|
+
args[_i] = arguments[_i];
|
|
34
|
+
}
|
|
35
|
+
return newFormatter_1.apply(void 0, args);
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}, [locale]);
|
|
40
|
+
return formatter;
|
|
41
|
+
};
|
|
42
|
+
exports.useDateFormat = useDateFormat;
|
|
43
|
+
exports.default = exports.useDateFormat;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { __assign } from "tslib";
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
|
+
import { useRouter } from "next/router";
|
|
5
|
+
import format from "date-fns/format";
|
|
6
|
+
import useDateLocale from "@koine/react/hooks/useDateLocale";
|
|
7
|
+
/**
|
|
8
|
+
* Automatically returns the `date-fns/format` function with the right locale
|
|
9
|
+
* passed as option (grabbed from next router value).
|
|
10
|
+
*/
|
|
11
|
+
export var useDateFormat = function () {
|
|
12
|
+
var _a = useState(function () {
|
|
13
|
+
return function () {
|
|
14
|
+
var args = [];
|
|
15
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
16
|
+
args[_i] = arguments[_i];
|
|
17
|
+
}
|
|
18
|
+
return format.apply(void 0, args);
|
|
19
|
+
};
|
|
20
|
+
}), formatter = _a[0], setFormatter = _a[1];
|
|
21
|
+
var router = useRouter();
|
|
22
|
+
var locale = useDateLocale(router.locale);
|
|
23
|
+
useEffect(function () {
|
|
24
|
+
if (locale) {
|
|
25
|
+
var newFormatter_1 = function (date, _format, options) { return format(date, _format, __assign(__assign({}, (options || {})), { locale: locale })); };
|
|
26
|
+
setFormatter(function () {
|
|
27
|
+
return function () {
|
|
28
|
+
var args = [];
|
|
29
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
30
|
+
args[_i] = arguments[_i];
|
|
31
|
+
}
|
|
32
|
+
return newFormatter_1.apply(void 0, args);
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}, [locale]);
|
|
37
|
+
return formatter;
|
|
38
|
+
};
|
|
39
|
+
export default useDateFormat;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { UseFormProps, FieldValues } from "react-hook-form";
|
|
2
|
+
import type { ObjectSchema } from "@kuus/yup";
|
|
3
|
+
import { type TranslateLoose } from "./types-i18n";
|
|
4
|
+
export declare function useForm<T extends FieldValues>(schema: ObjectSchema<any>, t: TranslateLoose, formProps?: UseFormProps, debug?: boolean): {
|
|
5
|
+
watch: import("react-hook-form").UseFormWatch<T>;
|
|
6
|
+
getValues: import("react-hook-form").UseFormGetValues<T>;
|
|
7
|
+
getFieldState: import("react-hook-form").UseFormGetFieldState<T>;
|
|
8
|
+
setError: import("react-hook-form").UseFormSetError<T>;
|
|
9
|
+
clearErrors: import("react-hook-form").UseFormClearErrors<T>;
|
|
10
|
+
setValue: import("react-hook-form").UseFormSetValue<T>;
|
|
11
|
+
trigger: import("react-hook-form").UseFormTrigger<T>;
|
|
12
|
+
formState: import("react-hook-form").FormState<T>;
|
|
13
|
+
resetField: import("react-hook-form").UseFormResetField<T>;
|
|
14
|
+
reset: import("react-hook-form").UseFormReset<T>;
|
|
15
|
+
handleSubmit: import("react-hook-form").UseFormHandleSubmit<T>;
|
|
16
|
+
unregister: import("react-hook-form").UseFormUnregister<T>;
|
|
17
|
+
control: import("react-hook-form").Control<T, any>;
|
|
18
|
+
register: import("react-hook-form").UseFormRegister<T>;
|
|
19
|
+
setFocus: import("react-hook-form").UseFormSetFocus<T>;
|
|
20
|
+
field: {
|
|
21
|
+
control: import("react-hook-form").Control<T, any>;
|
|
22
|
+
register: import("react-hook-form").UseFormRegister<T>;
|
|
23
|
+
setValue: import("react-hook-form").UseFormSetValue<T>;
|
|
24
|
+
t: TranslateLoose;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
export default useForm;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.useForm = void 0;
|
|
5
|
+
var tslib_1 = require("tslib");
|
|
6
|
+
var react_1 = require("react");
|
|
7
|
+
var react_hook_form_1 = require("react-hook-form");
|
|
8
|
+
var yup_1 = require("@hookform/resolvers/yup");
|
|
9
|
+
function useForm(
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
11
|
+
schema, t, formProps, debug) {
|
|
12
|
+
if (formProps === void 0) { formProps = {}; }
|
|
13
|
+
// const form = _useForm<InferType<ObjectSchema<T, object>>>({
|
|
14
|
+
var form = (0, react_hook_form_1.useForm)(tslib_1.__assign({
|
|
15
|
+
// @ts-expect-error FIXME:
|
|
16
|
+
resolver: (0, yup_1.yupResolver)(schema) }, formProps));
|
|
17
|
+
// const { control, register, setValue } = form;
|
|
18
|
+
// const field = { control, register, setValue, t };
|
|
19
|
+
// if (process.env["NODE_ENV"] !== "production") {
|
|
20
|
+
// if (debug) {
|
|
21
|
+
// console.info(
|
|
22
|
+
// `Form ${i18nNamespace} data`,
|
|
23
|
+
// form.watch(),
|
|
24
|
+
// `errors: `,
|
|
25
|
+
// form.formState.errors
|
|
26
|
+
// );
|
|
27
|
+
// }
|
|
28
|
+
// }
|
|
29
|
+
// if (formProps.mode === "onChange") {
|
|
30
|
+
// return { field, ...form };
|
|
31
|
+
// }
|
|
32
|
+
return (0, react_1.useMemo)(function () {
|
|
33
|
+
var control = form.control, register = form.register, setValue = form.setValue;
|
|
34
|
+
var field = { control: control, register: register, setValue: setValue, t: t };
|
|
35
|
+
return tslib_1.__assign({ field: field }, form);
|
|
36
|
+
}, [t, form]);
|
|
37
|
+
}
|
|
38
|
+
exports.useForm = useForm;
|
|
39
|
+
exports.default = useForm;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { __assign } from "tslib";
|
|
3
|
+
import { useMemo } from "react";
|
|
4
|
+
import { useForm as _useForm } from "react-hook-form";
|
|
5
|
+
import { yupResolver as resolver } from "@hookform/resolvers/yup";
|
|
6
|
+
export function useForm(
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
8
|
+
schema, t, formProps, debug) {
|
|
9
|
+
if (formProps === void 0) { formProps = {}; }
|
|
10
|
+
// const form = _useForm<InferType<ObjectSchema<T, object>>>({
|
|
11
|
+
var form = _useForm(__assign({
|
|
12
|
+
// @ts-expect-error FIXME:
|
|
13
|
+
resolver: resolver(schema) }, formProps));
|
|
14
|
+
// const { control, register, setValue } = form;
|
|
15
|
+
// const field = { control, register, setValue, t };
|
|
16
|
+
// if (process.env["NODE_ENV"] !== "production") {
|
|
17
|
+
// if (debug) {
|
|
18
|
+
// console.info(
|
|
19
|
+
// `Form ${i18nNamespace} data`,
|
|
20
|
+
// form.watch(),
|
|
21
|
+
// `errors: `,
|
|
22
|
+
// form.formState.errors
|
|
23
|
+
// );
|
|
24
|
+
// }
|
|
25
|
+
// }
|
|
26
|
+
// if (formProps.mode === "onChange") {
|
|
27
|
+
// return { field, ...form };
|
|
28
|
+
// }
|
|
29
|
+
return useMemo(function () {
|
|
30
|
+
var control = form.control, register = form.register, setValue = form.setValue;
|
|
31
|
+
var field = { control: control, register: register, setValue: setValue, t: t };
|
|
32
|
+
return __assign({ field: field }, form);
|
|
33
|
+
}, [t, form]);
|
|
34
|
+
}
|
|
35
|
+
export default useForm;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.useLocale = void 0;
|
|
5
|
+
var tslib_1 = require("tslib");
|
|
6
|
+
var useTranslation_1 = tslib_1.__importDefault(require("next-translate/useTranslation"));
|
|
7
|
+
function useLocale() {
|
|
8
|
+
return (0, useTranslation_1.default)().lang;
|
|
9
|
+
}
|
|
10
|
+
exports.useLocale = useLocale;
|
|
11
|
+
exports.default = useLocale;
|
package/legacy/useT.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { TranslateNamespace, TranslateDefault, TranslateNamespaced } from "./types-i18n";
|
|
2
|
+
/**
|
|
3
|
+
* Wrap `next-translate` useTranslations for type safety and adds TranslationShortcut
|
|
4
|
+
* as second/thir argument.
|
|
5
|
+
*
|
|
6
|
+
* @see https://github.com/vinissimus/next-translate/issues/513#issuecomment-779826418
|
|
7
|
+
*
|
|
8
|
+
* About the typescript support for translation strings see:
|
|
9
|
+
* - https://github.com/vinissimus/next-translate/issues/721
|
|
10
|
+
*
|
|
11
|
+
* **NOTE**: To make typescript work nicely here make sure to enable
|
|
12
|
+
* [`resolveJsonModule`](https://www.typescriptlang.org/tsconfig#resolveJsonModule)
|
|
13
|
+
* in your `tsconfig.json` file.
|
|
14
|
+
*/
|
|
15
|
+
export declare function useT(): TranslateDefault;
|
|
16
|
+
export declare function useT<TNamespace extends TranslateNamespace>(namespace: TNamespace): TranslateNamespaced<TNamespace>;
|
|
17
|
+
export default useT;
|
package/legacy/useT.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.useT = void 0;
|
|
5
|
+
var tslib_1 = require("tslib");
|
|
6
|
+
var react_1 = require("react");
|
|
7
|
+
var useTranslation_1 = tslib_1.__importDefault(require("next-translate/useTranslation"));
|
|
8
|
+
function useT(namespace) {
|
|
9
|
+
var t = (0, useTranslation_1.default)().t;
|
|
10
|
+
var tMemoized = (0, react_1.useMemo)(function () {
|
|
11
|
+
return function (s, q, o) {
|
|
12
|
+
return t(namespace ? "".concat(namespace, ":").concat(s) : "".concat(s), q === "obj" || q === "" ? null : q, q === "obj" || o === "obj"
|
|
13
|
+
? { returnObjects: true }
|
|
14
|
+
: q === "" || o === ""
|
|
15
|
+
? { fallback: "" }
|
|
16
|
+
: o
|
|
17
|
+
// ) as TReturn extends (undefined | never | unknown) ? TranslateReturn<TranslationQuery, TranslationOptions> : TReturn;
|
|
18
|
+
);
|
|
19
|
+
};
|
|
20
|
+
}, [t, namespace]);
|
|
21
|
+
return tMemoized;
|
|
22
|
+
}
|
|
23
|
+
exports.useT = useT;
|
|
24
|
+
exports.default = useT;
|
|
25
|
+
// Instead of wrapping the `useTranslation` hook from [`next-translate`](https://github.com/vinissimus/next-translate/blob/master/src/useTranslation.tsx)
|
|
26
|
+
// we might just rewrite it with our custom implementation but the `_context`
|
|
27
|
+
// to use is not exposed by the library...
|
|
28
|
+
// import { useContext, useMemo } from "react"
|
|
29
|
+
// import wrapTWithDefaultNs from "next-translate/lib/cjs/wrapTWithDefaultNs";
|
|
30
|
+
// import I18nContext from "next-translate/lib/cjs/_context";
|
|
31
|
+
// export default function useTranslation(defaultNS?: string): I18n {
|
|
32
|
+
// const ctx = useContext(I18nContext)
|
|
33
|
+
// return useMemo(
|
|
34
|
+
// () => ({
|
|
35
|
+
// ...ctx,
|
|
36
|
+
// t: wrapTWithDefaultNs(ctx.t, defaultNS),
|
|
37
|
+
// }),
|
|
38
|
+
// [ctx.lang, defaultNS]
|
|
39
|
+
// )
|
|
40
|
+
// }
|
package/legacy/useT.mjs
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useMemo } from "react";
|
|
3
|
+
import useTranslation from "next-translate/useTranslation";
|
|
4
|
+
export function useT(namespace) {
|
|
5
|
+
var t = useTranslation().t;
|
|
6
|
+
var tMemoized = useMemo(function () {
|
|
7
|
+
return function (s, q, o) {
|
|
8
|
+
return t(namespace ? "".concat(namespace, ":").concat(s) : "".concat(s), q === "obj" || q === "" ? null : q, q === "obj" || o === "obj"
|
|
9
|
+
? { returnObjects: true }
|
|
10
|
+
: q === "" || o === ""
|
|
11
|
+
? { fallback: "" }
|
|
12
|
+
: o
|
|
13
|
+
// ) as TReturn extends (undefined | never | unknown) ? TranslateReturn<TranslationQuery, TranslationOptions> : TReturn;
|
|
14
|
+
);
|
|
15
|
+
};
|
|
16
|
+
}, [t, namespace]);
|
|
17
|
+
return tMemoized;
|
|
18
|
+
}
|
|
19
|
+
export default useT;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.useTheme = void 0;
|
|
5
|
+
var react_1 = require("react");
|
|
6
|
+
var ThemeContext_1 = require("./ThemeContext");
|
|
7
|
+
/**
|
|
8
|
+
* @borrows [next-themes](https://github.com/pacocoursey/next-themes)
|
|
9
|
+
*/
|
|
10
|
+
var useTheme = function () { return (0, react_1.useContext)(ThemeContext_1.ThemeContext); };
|
|
11
|
+
exports.useTheme = useTheme;
|
|
12
|
+
exports.default = exports.useTheme;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useContext } from "react";
|
|
3
|
+
import { ThemeContext } from "./ThemeContext";
|
|
4
|
+
/**
|
|
5
|
+
* @borrows [next-themes](https://github.com/pacocoursey/next-themes)
|
|
6
|
+
*/
|
|
7
|
+
export var useTheme = function () { return useContext(ThemeContext); };
|
|
8
|
+
export default useTheme;
|