@myelophone/nuxt 0.18.2
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/.devcontainer/Dockerfile +7 -0
- package/.devcontainer/devcontainer.json +21 -0
- package/.editorconfig +43 -0
- package/.github/workflows/package.yml +73 -0
- package/.nuxtignore +6 -0
- package/.releaserc.js +132 -0
- package/.yarn/releases/yarn-4.18.0.cjs +1000 -0
- package/.yarnrc.yml +8 -0
- package/CHANGELOG.md +141 -0
- package/LICENSE +77 -0
- package/README.md +3004 -0
- package/app/app.vue +455 -0
- package/app/assets/css/animation.css +81 -0
- package/app/assets/css/backgrounds.css +57 -0
- package/app/assets/css/base.css +182 -0
- package/app/assets/css/index.css +9 -0
- package/app/assets/css/links.css +12 -0
- package/app/assets/css/multimedia.css +102 -0
- package/app/assets/css/preloader.css +68 -0
- package/app/assets/css/print.css +40 -0
- package/app/assets/css/tailwind.css +20 -0
- package/app/assets/css/theme.css +29 -0
- package/app/components/consent/GoogleMap.vue +59 -0
- package/app/components/consent/Youtube.vue +27 -0
- package/app/components/cookie/Banner.vue +70 -0
- package/app/components/cookie/ConsentWrapper.vue +71 -0
- package/app/components/cookie/PrivacyPolicy.vue +179 -0
- package/app/components/cookie/SettingsModal.vue +387 -0
- package/app/components/grid/Col.vue +262 -0
- package/app/components/grid/Container.vue +236 -0
- package/app/components/grid/Row.vue +248 -0
- package/app/components/grid/Stack.vue +233 -0
- package/app/components/myelophone/Copyright.vue +5 -0
- package/app/components/myelophone/Welcome.vue +107 -0
- package/app/components/page/FullscreenPreloader.vue +177 -0
- package/app/components/page/Preloader.vue +18 -0
- package/app/components/page/ReadyLocalized.vue +19 -0
- package/app/components/ready/.gitkeep +0 -0
- package/app/components/safe/Email.vue +52 -0
- package/app/components/safe/ImgWithLoader.vue +180 -0
- package/app/components/safe/NuxtImg.vue +25 -0
- package/app/components/safe/NuxtPicture.vue +29 -0
- package/app/components/section/.gitkeep +0 -0
- package/app/components/seo/BrandInfo.vue +76 -0
- package/app/components/seo/ContentNoIndex.vue +35 -0
- package/app/components/seo/NoIndex.vue +22 -0
- package/app/components/seo/OrgInfo.vue +130 -0
- package/app/components/seo/ProfileInfo.vue +137 -0
- package/app/components/ui/Accordion.vue +163 -0
- package/app/components/ui/Alert.vue +179 -0
- package/app/components/ui/Avatar.vue +88 -0
- package/app/components/ui/Badge.vue +150 -0
- package/app/components/ui/Banner.vue +133 -0
- package/app/components/ui/Button.vue +175 -0
- package/app/components/ui/Card.vue +66 -0
- package/app/components/ui/Checkbox.vue +134 -0
- package/app/components/ui/Chip.vue +136 -0
- package/app/components/ui/CommandPalette.vue +434 -0
- package/app/components/ui/Console.vue +583 -0
- package/app/components/ui/CursorCreative.vue +148 -0
- package/app/components/ui/FeatureAccordion.vue +165 -0
- package/app/components/ui/FileUpload.vue +705 -0
- package/app/components/ui/GeoDependent.vue +72 -0
- package/app/components/ui/Heading.vue +51 -0
- package/app/components/ui/Icon.vue +42 -0
- package/app/components/ui/Icon8.vue +39 -0
- package/app/components/ui/Input.vue +88 -0
- package/app/components/ui/LangLink.vue +34 -0
- package/app/components/ui/LangVisible.vue +33 -0
- package/app/components/ui/LanguageSelect.vue +202 -0
- package/app/components/ui/LightBox.vue +155 -0
- package/app/components/ui/LocalTime.vue +170 -0
- package/app/components/ui/Modal.vue +161 -0
- package/app/components/ui/Popup.vue +200 -0
- package/app/components/ui/PostContent.server.vue +23 -0
- package/app/components/ui/ProtectedEmail.vue +52 -0
- package/app/components/ui/RelativeTime.vue +141 -0
- package/app/components/ui/ScheduledContent.vue +150 -0
- package/app/components/ui/ScrollToTop.client.vue +48 -0
- package/app/components/ui/SegmentedControl.vue +148 -0
- package/app/components/ui/SiteSearch.vue +1191 -0
- package/app/components/ui/Skeleton.vue +91 -0
- package/app/components/ui/SmartContrast.vue +74 -0
- package/app/components/ui/SnapContainer.vue +222 -0
- package/app/components/ui/SnapSection.vue +294 -0
- package/app/components/ui/SonnerStyle.vue +7 -0
- package/app/components/ui/SplitSection.vue +99 -0
- package/app/components/ui/Steps.vue +858 -0
- package/app/components/ui/StickyWrapper.vue +46 -0
- package/app/components/ui/Table.vue +251 -0
- package/app/components/ui/Tabs.vue +451 -0
- package/app/components/ui/TextColumn.vue +36 -0
- package/app/components/ui/Textarea.vue +251 -0
- package/app/components/ui/Toggler.vue +40 -0
- package/app/components/ui/Tooltip.vue +524 -0
- package/app/components/ui/TruncateText.vue +105 -0
- package/app/components/ui/ViewportSpacer.vue +72 -0
- package/app/components/view/AnimatedCounter.vue +121 -0
- package/app/components/view/AnnouncementBar.vue +104 -0
- package/app/components/view/AvatarGroup.vue +104 -0
- package/app/components/view/Breadcrumbs.vue +97 -0
- package/app/components/view/ContentWithToc.vue +152 -0
- package/app/components/view/Copyright.vue +68 -0
- package/app/components/view/CountdownTimer.vue +184 -0
- package/app/components/view/CreativeCTA.vue +143 -0
- package/app/components/view/CurrencySelect.vue +254 -0
- package/app/components/view/FeatureBoxGrid.vue +142 -0
- package/app/components/view/HorizontalMenu.vue +97 -0
- package/app/components/view/ImageCompare.vue +141 -0
- package/app/components/view/ImgSlider.vue +333 -0
- package/app/components/view/InfiniteMarquee.vue +147 -0
- package/app/components/view/InfoBar.vue +86 -0
- package/app/components/view/LogoGrid.vue +106 -0
- package/app/components/view/LogoSlider.vue +83 -0
- package/app/components/view/NotFound.vue +81 -0
- package/app/components/view/PartialBackground.vue +313 -0
- package/app/components/view/QuoteBig.vue +111 -0
- package/app/components/view/ResponsiveMenu.vue +219 -0
- package/app/components/view/ReviewsSlider.vue +230 -0
- package/app/components/view/SocialBar.vue +78 -0
- package/app/components/view/StickyHeadingContent.vue +158 -0
- package/app/components/view/TallyForm.vue +295 -0
- package/app/components/view/WarningOutdated.vue +113 -0
- package/app/composables/useApi.ts +88 -0
- package/app/composables/useAppSeo.ts +78 -0
- package/app/composables/useBreadcrumbs.ts +106 -0
- package/app/composables/useChangeUrl.ts +73 -0
- package/app/composables/useCommand.ts +28 -0
- package/app/composables/useCookieControl.ts +111 -0
- package/app/composables/useCookieModal.ts +9 -0
- package/app/composables/useDevice.ts +109 -0
- package/app/composables/useGeoFetch.ts +139 -0
- package/app/composables/useLoadScript.ts +36 -0
- package/app/composables/useModalState.ts +37 -0
- package/app/composables/useMultiLang.ts +278 -0
- package/app/composables/useNetwork.ts +49 -0
- package/app/composables/useNuxtVersion.ts +5 -0
- package/app/composables/usePiniaStore.ts +5 -0
- package/app/composables/usePopupControl.ts +57 -0
- package/app/composables/useQuery.ts +307 -0
- package/app/composables/useReadyPage.ts +182 -0
- package/app/composables/useSafeList.ts +90 -0
- package/app/composables/useScriptLoader.ts +221 -0
- package/app/composables/useSiteSearch.ts +32 -0
- package/app/composables/useSnapScroll.ts +24 -0
- package/app/composables/useStatic.ts +5 -0
- package/app/composables/useStorage.ts +252 -0
- package/app/composables/useStoreBroadcast.ts +146 -0
- package/app/composables/useThemeSync.ts +81 -0
- package/app/constants/layout.ts +109 -0
- package/app/constants/predefinedCookieScripts.ts +1222 -0
- package/app/constants/ui-events.ts +1 -0
- package/app/error.vue +169 -0
- package/app/layouts/default-blog.vue +5 -0
- package/app/layouts/default.vue +3 -0
- package/app/locales/en/commands.json +5 -0
- package/app/locales/en/cookies.json +182 -0
- package/app/locales/en/error.json +4 -0
- package/app/locales/en/interface.json +33 -0
- package/app/locales/en/myelophone.json +8 -0
- package/app/locales/en/outdated.json +5 -0
- package/app/locales/en/times.json +18 -0
- package/app/locales/pl/commands.json +5 -0
- package/app/locales/pl/cookies.json +182 -0
- package/app/locales/pl/error.json +4 -0
- package/app/locales/pl/interface.json +33 -0
- package/app/locales/pl/myelophone.json +8 -0
- package/app/locales/pl/outdated.json +5 -0
- package/app/locales/pl/times.json +18 -0
- package/app/locales/ru/commands.json +5 -0
- package/app/locales/ru/cookies.json +182 -0
- package/app/locales/ru/error.json +4 -0
- package/app/locales/ru/interface.json +33 -0
- package/app/locales/ru/myelophone.json +8 -0
- package/app/locales/ru/outdated.json +5 -0
- package/app/locales/ru/times.json +18 -0
- package/app/middleware/blog-layout.ts +28 -0
- package/app/middleware/i18n.global.ts +17 -0
- package/app/middleware/not-found-status.ts +11 -0
- package/app/modules/default-blog/index.ts +39 -0
- package/app/modules/default-blog/posts.ts +80 -0
- package/app/modules/default-sitemap/index.ts +116 -0
- package/app/modules/default-sitemap/runtime/sitemap.get.ts +42 -0
- package/app/modules/fullscreen-preloader/module.ts +43 -0
- package/app/modules/htaccess/.htaccess +38 -0
- package/app/modules/htaccess/index.ts +23 -0
- package/app/modules/i18n-shaker.mjs +221 -0
- package/app/modules/multi18n/module.ts +71 -0
- package/app/modules/myelophone-config/module.ts +241 -0
- package/app/pages/[...all].vue +9 -0
- package/app/pages/index.vue +3 -0
- package/app/pages/post/[...slug].vue +30 -0
- package/app/plugins/bfcache-refresh.client.ts +9 -0
- package/app/plugins/canonical.ts +30 -0
- package/app/plugins/csp-nonce.server.ts +41 -0
- package/app/plugins/multi18n.client.ts +21 -0
- package/app/plugins/multi18n.server.ts +15 -0
- package/app/plugins/nuxt-version.client.ts +4 -0
- package/app/plugins/restore.client.ts +21 -0
- package/app/plugins/reveal.ts +89 -0
- package/app/plugins/url-helper.client.ts +66 -0
- package/app/server/api/exchange-rates.get.ts +216 -0
- package/app/server/api/healthz.ts +1 -0
- package/app/server/api/logout.post.ts +6 -0
- package/app/server/middleware/normalize-url.ts +14 -0
- package/app/server/middleware/security-headers.ts +147 -0
- package/app/server/middleware/url-helper.ts +43 -0
- package/app/server/plugins/clean-html-spaces.ts +15 -0
- package/app/server/plugins/clean-styles.ts +94 -0
- package/app/server/plugins/compression.ts +122 -0
- package/app/server/plugins/css-preload.ts +26 -0
- package/app/server/plugins/early-hints.ts +31 -0
- package/app/server/plugins/force-noindex.ts +43 -0
- package/app/server/plugins/html-one-line.ts +17 -0
- package/app/server/plugins/inline-style.ts +7 -0
- package/app/server/routes/healthz.get.ts +1 -0
- package/app/server/tsconfig.json +3 -0
- package/app/stores/cart.ts +945 -0
- package/app/stores/commands.ts +43 -0
- package/app/stores/device.ts +156 -0
- package/app/stores/querySync.ts +5 -0
- package/app/stores/settings.ts +145 -0
- package/app/stores/user.ts +607 -0
- package/app/types/cookie.ts +89 -0
- package/app/types/myelophone.d.ts +87 -0
- package/app/types/site-search.ts +110 -0
- package/app/utils/asyncRefresh.ts +4 -0
- package/app/utils/blog.server.ts +142 -0
- package/app/utils/jsonLd.ts +56 -0
- package/app/utils/myelophoneConfig.ts +4 -0
- package/app/utils/sortBy.ts +18 -0
- package/app/utils/transliterate.ts +75 -0
- package/app/utils/ytVideo.ts +37 -0
- package/app/workers/site-search.worker.ts +661 -0
- package/biome.json +94 -0
- package/commitlint.config.js +3 -0
- package/nuxt.config.ts +539 -0
- package/package.json +101 -0
- package/playground/content/.gitkeep +0 -0
- package/playground/locales/.gitkeep +0 -0
- package/playground/myelophone.dev.ts +45 -0
- package/playground/nuxt.config.ts +105 -0
- package/playground/package.json +5 -0
- package/playground/pages/.gitkeep +0 -0
- package/playground/tsconfig.json +3 -0
- package/playwright.config.ts +23 -0
- package/public/browsers/chrome.svg +77 -0
- package/public/browsers/edge.svg +98 -0
- package/public/browsers/firefox.svg +300 -0
- package/public/favicon.ico +0 -0
- package/public/myelophone_eng.png +0 -0
- package/public/myelophone_eng_white.png +0 -0
- package/spa-loading-template.html +72 -0
- package/tests/home.spec.ts +9 -0
- package/tests/utils.ts +23 -0
- package/tsconfig.json +16 -0
- package/vite/plugins/clean-css.ts +190 -0
- package/vite/plugins/postcss-add-viewportunits.ts +33 -0
- package/vite/plugins/postcss-viewport-fallback.ts +49 -0
package/package.json
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@myelophone/nuxt",
|
|
3
|
+
"version": "0.18.2",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"author": "Aliaksandr Ivanou <aleksivanov.me@gmail.com> (https://github.com/aleksivanou)",
|
|
6
|
+
"maintainers": [
|
|
7
|
+
{
|
|
8
|
+
"name": "MyelophOne",
|
|
9
|
+
"url": "https://github.com/MyelophOne"
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"license": "PolyForm-Noncommercial-1.0.0",
|
|
13
|
+
"main": "./nuxt.config.ts",
|
|
14
|
+
"scripts": {
|
|
15
|
+
"dev": "NODE_OPTIONS='--no-webstorage' NUXT_TELEMETRY_DEBUG=1 NUXT_PLAYGROUND=true nuxt dev playground",
|
|
16
|
+
"build": "NODE_OPTIONS='--no-deprecation --no-webstorage' NUXT_TELEMETRY_DEBUG=1 NODE_ENV=production NUXT_PLAYGROUND=true nuxt build playground",
|
|
17
|
+
"generate": "NODE_OPTIONS='--no-webstorage' NUXT_TELEMETRY_DEBUG=1 NODE_ENV=production NUXT_STATIC=true NUXT_PLAYGROUND=true nuxt generate playground",
|
|
18
|
+
"preview": "NODE_OPTIONS='--no-webstorage' NUXT_TELEMETRY_DEBUG=1 NUXT_PLAYGROUND=true nuxt preview playground",
|
|
19
|
+
"server": "node --no-deprecation --no-warnings --no-webstorage playground/.output/server/index.mjs",
|
|
20
|
+
"prepare": "nuxt prepare && nuxt prepare playground",
|
|
21
|
+
"analyze": "NODE_OPTIONS='--no-deprecation --no-webstorage' yarn nuxi analyze playground",
|
|
22
|
+
"test": "yarn test:types && yarn playwright",
|
|
23
|
+
"test:types": "vue-tsc --noEmit && cd playground && vue-tsc --noEmit",
|
|
24
|
+
"playwright:install": "npx playwright install chromium",
|
|
25
|
+
"playwright": "npx playwright test",
|
|
26
|
+
"biome:check": "biome check --write ./app && biome check --write ./playground",
|
|
27
|
+
"biome:format": "biome format --fix ./app && biome format --fix ./playground",
|
|
28
|
+
"biome:all": "biome format --fix .",
|
|
29
|
+
"upgrade": "npx nuxi upgrade && yarn prepare",
|
|
30
|
+
"update": "yarn upgrade-interactive",
|
|
31
|
+
"clear": "yarn cache clean",
|
|
32
|
+
"audit": "yarn npm audit",
|
|
33
|
+
"self-update": "yarn set version berry",
|
|
34
|
+
"lock-update": "yarn dedupe --strategy highest"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@biomejs/biome": "^2.5.11",
|
|
38
|
+
"@commitlint/cli": "^21.2.2",
|
|
39
|
+
"@commitlint/config-conventional": "^21.2.2",
|
|
40
|
+
"@nuxt/fonts": "^0.14.0",
|
|
41
|
+
"@nuxt/image": "^2.1.0",
|
|
42
|
+
"@nuxt/schema": "^4.5.2",
|
|
43
|
+
"@nuxt/scripts": "^1.3.8",
|
|
44
|
+
"@nuxt/types": "^2.18.1",
|
|
45
|
+
"@nuxtjs/fontaine": "^0.5.0",
|
|
46
|
+
"@nuxtjs/robots": "^6.2.0",
|
|
47
|
+
"@pinia/colada": "^1.4.2",
|
|
48
|
+
"@pinia/colada-nuxt": "^1.0.2",
|
|
49
|
+
"@pinia/nuxt": "^1.0.2",
|
|
50
|
+
"@playwright/test": "^1.62.1",
|
|
51
|
+
"@semantic-release/changelog": "^7.0.0",
|
|
52
|
+
"@semantic-release/commit-analyzer": "^13.0.1",
|
|
53
|
+
"@semantic-release/git": "^11.0.1",
|
|
54
|
+
"@semantic-release/github": "^12.0.9",
|
|
55
|
+
"@semantic-release/npm": "^13.1.5",
|
|
56
|
+
"@semantic-release/release-notes-generator": "^14.1.1",
|
|
57
|
+
"@tailwindcss/vite": "^4.3.3",
|
|
58
|
+
"@types/node": "^26.4.0",
|
|
59
|
+
"@unhead/vue": "^3.4.0",
|
|
60
|
+
"@vue/devtools-api": "^8.2.1",
|
|
61
|
+
"@vueuse/core": "^14.4.0",
|
|
62
|
+
"commitlint": "^21.2.2",
|
|
63
|
+
"conventional-changelog-conventionalcommits": "^10.4.0",
|
|
64
|
+
"markdown-it": "^15.0.1",
|
|
65
|
+
"nuxt": "^4.5.2",
|
|
66
|
+
"nuxt-api-party": "^4.0.0",
|
|
67
|
+
"nuxt-link-checker": "^5.3.0",
|
|
68
|
+
"nuxt-og-image": "^6.7.8",
|
|
69
|
+
"nuxt-payload-analyzer": "^0.1.4",
|
|
70
|
+
"nuxt-security": "^2.6.0",
|
|
71
|
+
"nuxt-seo-utils": "^8.4.3",
|
|
72
|
+
"nuxt-vitalizer": "^3.0.0",
|
|
73
|
+
"pinia": "^4.0.3",
|
|
74
|
+
"postcss": "^8.5.26",
|
|
75
|
+
"postcss-no-important": "^11.0.0",
|
|
76
|
+
"purgecss": "^8.0.0",
|
|
77
|
+
"rolldown": "^1.2.6",
|
|
78
|
+
"semantic-release": "^25.0.9",
|
|
79
|
+
"tailwindcss": "^4.3.3",
|
|
80
|
+
"typescript": "^7.0.2",
|
|
81
|
+
"unstorage": "^1.17.5",
|
|
82
|
+
"valibot": "^1.4.2",
|
|
83
|
+
"vite": "^8.2.2",
|
|
84
|
+
"vue": "^3.5.42",
|
|
85
|
+
"vue-easy-lightbox": "^1.19.0",
|
|
86
|
+
"vue-sonner": "^2.0.9",
|
|
87
|
+
"vue-tsc": "^3.3.11",
|
|
88
|
+
"yaml": "^2.9.0"
|
|
89
|
+
},
|
|
90
|
+
"packageManager": "yarn@4.18.0",
|
|
91
|
+
"repository": {
|
|
92
|
+
"type": "git",
|
|
93
|
+
"url": "git+https://github.com/myelophone/nuxt.git"
|
|
94
|
+
},
|
|
95
|
+
"publishConfig": {
|
|
96
|
+
"access": "public"
|
|
97
|
+
},
|
|
98
|
+
"dependencies": {
|
|
99
|
+
"fuse.js": "^7.5.0"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export default defineNuxtConfig({
|
|
2
|
+
app: {
|
|
3
|
+
head: {
|
|
4
|
+
title: 'Myelophone Nuxt Playground',
|
|
5
|
+
},
|
|
6
|
+
},
|
|
7
|
+
myelophone: {
|
|
8
|
+
cookieControl: {
|
|
9
|
+
enabled: true,
|
|
10
|
+
},
|
|
11
|
+
bundleTranslations: true,
|
|
12
|
+
splitCss: true,
|
|
13
|
+
stores: {
|
|
14
|
+
cart: false,
|
|
15
|
+
user: false,
|
|
16
|
+
},
|
|
17
|
+
frankfurterCurrencies: [],
|
|
18
|
+
frankfurterBaseCurrency: 'USD',
|
|
19
|
+
creativeCursor: false,
|
|
20
|
+
siteSearch: {
|
|
21
|
+
strategy: 'client',
|
|
22
|
+
endpoint: '',
|
|
23
|
+
minQueryLength: 2,
|
|
24
|
+
limit: 10,
|
|
25
|
+
operator: 'and',
|
|
26
|
+
queryParam: 'search',
|
|
27
|
+
modeParam: 'searchMode',
|
|
28
|
+
operatorParam: 'searchOperator',
|
|
29
|
+
urlMode: 'search',
|
|
30
|
+
consumeUrl: false,
|
|
31
|
+
enabled: true,
|
|
32
|
+
},
|
|
33
|
+
pageFullscreenPreloader: {
|
|
34
|
+
component: 'DemoPreloaderLogo',
|
|
35
|
+
props: {
|
|
36
|
+
label: 'MyelophOne',
|
|
37
|
+
},
|
|
38
|
+
background: '#f7f7f7',
|
|
39
|
+
backgroundDark: '#121212',
|
|
40
|
+
minimumDuration: 250,
|
|
41
|
+
ariaLabel: 'Loading MyelophOne site',
|
|
42
|
+
},
|
|
43
|
+
ssrStream: false,
|
|
44
|
+
},
|
|
45
|
+
});
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { defineNuxtConfig, type NuxtConfig } from 'nuxt/config';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
5
|
+
|
|
6
|
+
const dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
const myelophonePath = path.resolve(dirname, 'myelophone.ts');
|
|
8
|
+
|
|
9
|
+
const baseConfig = defineNuxtConfig({
|
|
10
|
+
extends: ['../'],
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
let extendedConfig: NuxtConfig = {};
|
|
14
|
+
|
|
15
|
+
function isNuxtConfig(value: unknown): value is NuxtConfig {
|
|
16
|
+
return !!value && typeof value === 'object' && !Array.isArray(value);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
type DefaultSeo = {
|
|
20
|
+
title?: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
function getStringDefaultSeo(value: unknown): DefaultSeo {
|
|
25
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
26
|
+
return {};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const seo = value as Record<string, unknown>;
|
|
30
|
+
|
|
31
|
+
return {
|
|
32
|
+
...(typeof seo.title === 'string' ? { title: seo.title } : {}),
|
|
33
|
+
...(typeof seo.description === 'string'
|
|
34
|
+
? { description: seo.description }
|
|
35
|
+
: {}),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (fs.existsSync(myelophonePath)) {
|
|
40
|
+
try {
|
|
41
|
+
const mod = await import(pathToFileURL(myelophonePath).href);
|
|
42
|
+
const config = mod.default || mod;
|
|
43
|
+
|
|
44
|
+
if (isNuxtConfig(config)) {
|
|
45
|
+
extendedConfig = config as NuxtConfig;
|
|
46
|
+
const title = extendedConfig.app?.head?.title;
|
|
47
|
+
const appConfig = extendedConfig.appConfig as
|
|
48
|
+
| {
|
|
49
|
+
defaultSeo?: unknown;
|
|
50
|
+
}
|
|
51
|
+
| undefined;
|
|
52
|
+
const defaultSeo = getStringDefaultSeo(appConfig?.defaultSeo);
|
|
53
|
+
|
|
54
|
+
if (typeof title === 'string' && !defaultSeo.title) {
|
|
55
|
+
extendedConfig.appConfig = {
|
|
56
|
+
...(extendedConfig.appConfig || {}),
|
|
57
|
+
defaultSeo: {
|
|
58
|
+
...defaultSeo,
|
|
59
|
+
title,
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
} else {
|
|
64
|
+
console.warn(
|
|
65
|
+
'[myelophone-nuxt] ignored: myelophone.ts export is not a valid NuxtConfig object.',
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
} catch (err) {
|
|
69
|
+
console.warn(
|
|
70
|
+
'[myelophone-nuxt] failed to load configuration:',
|
|
71
|
+
(err as Error).message,
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// biome-ignore lint/suspicious/noExplicitAny: we do not know type of records
|
|
77
|
+
function isObject(value: unknown): value is Record<string, any> {
|
|
78
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// biome-ignore lint/suspicious/noExplicitAny: we do not know type of records
|
|
82
|
+
function deepMerge<T extends Record<string, any>>(target: T, source: T): T {
|
|
83
|
+
// biome-ignore lint/suspicious/noExplicitAny: we do not know type of records
|
|
84
|
+
const result: Record<string, any> = { ...target };
|
|
85
|
+
|
|
86
|
+
for (const key of Object.keys(source)) {
|
|
87
|
+
const a = target[key as keyof T];
|
|
88
|
+
const b = source[key as keyof T];
|
|
89
|
+
|
|
90
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
91
|
+
result[key] = [...a, ...b.filter((x: unknown) => !a.includes(x))];
|
|
92
|
+
} else if (isObject(a) && isObject(b)) {
|
|
93
|
+
result[key] = deepMerge(a, b);
|
|
94
|
+
} else if (b !== undefined) {
|
|
95
|
+
result[key] = b;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return result as T;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const mergedConfig = deepMerge(baseConfig, extendedConfig);
|
|
103
|
+
mergedConfig.extends = baseConfig.extends;
|
|
104
|
+
|
|
105
|
+
export default defineNuxtConfig(mergedConfig);
|
|
File without changes
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { defineConfig } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
testDir: 'tests',
|
|
5
|
+
fullyParallel: true,
|
|
6
|
+
timeout: 300_000,
|
|
7
|
+
retries: 2,
|
|
8
|
+
workers: 4,
|
|
9
|
+
reporter: [['html', { open: 'never' }]],
|
|
10
|
+
use: {
|
|
11
|
+
baseURL: 'http://localhost:3000',
|
|
12
|
+
browserName: 'chromium',
|
|
13
|
+
headless: true,
|
|
14
|
+
viewport: { width: 1536, height: 864 },
|
|
15
|
+
trace: 'on',
|
|
16
|
+
},
|
|
17
|
+
webServer: {
|
|
18
|
+
command: 'yarn build && yarn server',
|
|
19
|
+
url: 'http://localhost:3000',
|
|
20
|
+
reuseExistingServer: !process.env.CI,
|
|
21
|
+
timeout: 240 * 1000,
|
|
22
|
+
},
|
|
23
|
+
});
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
|
2
|
+
<svg
|
|
3
|
+
width="800px"
|
|
4
|
+
height="800px"
|
|
5
|
+
viewBox="-0.5 0 257 257"
|
|
6
|
+
version="1.1"
|
|
7
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
8
|
+
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
9
|
+
preserveAspectRatio="xMidYMid"
|
|
10
|
+
>
|
|
11
|
+
<defs>
|
|
12
|
+
<linearGradient
|
|
13
|
+
x1="49.9976632%"
|
|
14
|
+
y1="0.70578635%"
|
|
15
|
+
x2="49.9976632%"
|
|
16
|
+
y2="96.9898739%"
|
|
17
|
+
id="linearGradient-1"
|
|
18
|
+
>
|
|
19
|
+
<stop stop-color="#86BBE5" offset="0%">
|
|
20
|
+
|
|
21
|
+
</stop>
|
|
22
|
+
<stop stop-color="#1072BA" offset="100%">
|
|
23
|
+
|
|
24
|
+
</stop>
|
|
25
|
+
</linearGradient>
|
|
26
|
+
</defs>
|
|
27
|
+
<g>
|
|
28
|
+
<path
|
|
29
|
+
d="M127.788721,0.035213205 C127.788721,0.035213205 203.109766,-3.34525447 243.041541,72.3631362 L121.379917,72.3631362 C121.379917,72.3631362 98.4209078,71.6236589 78.8071527,99.477304 C73.1730399,111.168088 67.1163686,123.211004 73.9125172,146.944704 C64.1232462,130.359285 21.9378267,56.9045392 21.9378267,56.9045392 C21.9378267,56.9045392 51.6929849,3.02833563 127.788721,0.035213205 L127.788721,0.035213205 Z"
|
|
30
|
+
fill="#EF3F36"
|
|
31
|
+
>
|
|
32
|
+
|
|
33
|
+
</path>
|
|
34
|
+
<path
|
|
35
|
+
d="M239.132875,192.228886 C239.132875,192.228886 204.377442,259.169188 118.87978,255.859147 C129.443741,237.583494 179.728198,150.501238 179.728198,150.501238 C179.728198,150.501238 191.876754,130.993122 177.544979,100.075928 C170.255846,89.335901 162.82586,78.1028886 138.88088,72.1166437 C158.142503,71.9405777 242.830261,72.1166437 242.830261,72.1166437 C242.830261,72.1166437 274.557359,124.830812 239.132875,192.228886 L239.132875,192.228886 Z"
|
|
36
|
+
fill="#FCD900"
|
|
37
|
+
>
|
|
38
|
+
|
|
39
|
+
</path>
|
|
40
|
+
<path
|
|
41
|
+
d="M16.9727648,192.757084 C16.9727648,192.757084 -23.6280605,129.197249 22.0082531,56.7988996 C32.5370014,75.074553 82.821458,162.156809 82.821458,162.156809 C82.821458,162.156809 93.6671252,182.439615 127.577442,185.46795 C140.500688,184.517194 153.952132,183.70729 171.136176,165.995048 C161.663824,182.756534 119.161486,256 119.161486,256 C119.161486,256 57.6088033,257.126823 16.9727648,192.757084 L16.9727648,192.757084 Z"
|
|
42
|
+
fill="#61BC5B"
|
|
43
|
+
>
|
|
44
|
+
|
|
45
|
+
</path>
|
|
46
|
+
<path
|
|
47
|
+
d="M118.844567,256.492985 L135.958184,185.080605 C135.958184,185.080605 154.762036,183.601651 170.537552,166.311967 C160.748281,183.531224 118.844567,256.492985 118.844567,256.492985 L118.844567,256.492985 Z"
|
|
48
|
+
fill="#5AB055"
|
|
49
|
+
>
|
|
50
|
+
|
|
51
|
+
</path>
|
|
52
|
+
<path
|
|
53
|
+
d="M70.4616231,129.056396 C70.4616231,97.5757909 95.9911967,72.0462173 127.471802,72.0462173 C158.952407,72.0462173 184.481981,97.5757909 184.481981,129.056396 C184.481981,160.537001 158.952407,186.066575 127.471802,186.066575 C95.9911967,186.031362 70.4616231,160.537001 70.4616231,129.056396 L70.4616231,129.056396 Z"
|
|
54
|
+
fill="#FFFFFF"
|
|
55
|
+
>
|
|
56
|
+
|
|
57
|
+
</path>
|
|
58
|
+
<path
|
|
59
|
+
d="M80.0044017,129.056396 C80.0044017,102.857772 101.237964,81.5889959 127.471802,81.5889959 C153.670426,81.5889959 174.939202,102.822558 174.939202,129.056396 C174.939202,155.255021 153.70564,176.523796 127.471802,176.523796 C101.273177,176.523796 80.0044017,155.255021 80.0044017,129.056396 L80.0044017,129.056396 Z"
|
|
60
|
+
fill="url(#linearGradient-1)"
|
|
61
|
+
>
|
|
62
|
+
|
|
63
|
+
</path>
|
|
64
|
+
<path
|
|
65
|
+
d="M242.795048,72.1518569 L172.333425,92.8220083 C172.333425,92.8220083 161.699037,77.2225585 138.845667,72.1518569 C158.670702,72.0462173 242.795048,72.1518569 242.795048,72.1518569 L242.795048,72.1518569 Z"
|
|
66
|
+
fill="#EACA05"
|
|
67
|
+
>
|
|
68
|
+
|
|
69
|
+
</path>
|
|
70
|
+
<path
|
|
71
|
+
d="M72.5392022,144.338927 C62.6442916,127.190096 21.9378267,56.9045392 21.9378267,56.9045392 L74.1237964,108.527098 C74.1237964,108.527098 68.7713893,119.548831 70.778542,135.324347 L72.5392022,144.338927 L72.5392022,144.338927 Z"
|
|
72
|
+
fill="#DF3A32"
|
|
73
|
+
>
|
|
74
|
+
|
|
75
|
+
</path>
|
|
76
|
+
</g>
|
|
77
|
+
</svg>
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256"><defs
|
|
2
|
+
><radialGradient
|
|
3
|
+
id="b"
|
|
4
|
+
cx="161.8"
|
|
5
|
+
cy="68.9"
|
|
6
|
+
r="95.4"
|
|
7
|
+
gradientTransform="matrix(1 0 0 -.95 0 248.8)"
|
|
8
|
+
gradientUnits="userSpaceOnUse"
|
|
9
|
+
><stop offset=".7" stop-opacity="0" /><stop
|
|
10
|
+
offset=".9"
|
|
11
|
+
stop-opacity=".5"
|
|
12
|
+
/><stop offset="1" /></radialGradient><radialGradient
|
|
13
|
+
id="d"
|
|
14
|
+
cx="-340.3"
|
|
15
|
+
cy="63"
|
|
16
|
+
r="143.2"
|
|
17
|
+
gradientTransform="matrix(.15 -.99 -.8 -.12 176.6 -125.4)"
|
|
18
|
+
gradientUnits="userSpaceOnUse"
|
|
19
|
+
><stop offset=".8" stop-opacity="0" /><stop
|
|
20
|
+
offset=".9"
|
|
21
|
+
stop-opacity=".5"
|
|
22
|
+
/><stop offset="1" /></radialGradient><radialGradient
|
|
23
|
+
id="e"
|
|
24
|
+
cx="113.4"
|
|
25
|
+
cy="570.2"
|
|
26
|
+
r="202.4"
|
|
27
|
+
gradientTransform="matrix(-.04 1 2.13 .08 -1179.5 -106.7)"
|
|
28
|
+
gradientUnits="userSpaceOnUse"
|
|
29
|
+
><stop offset="0" stop-color="#35c1f1" /><stop
|
|
30
|
+
offset=".1"
|
|
31
|
+
stop-color="#34c1ed"
|
|
32
|
+
/><stop offset=".2" stop-color="#2fc2df" /><stop
|
|
33
|
+
offset=".3"
|
|
34
|
+
stop-color="#2bc3d2"
|
|
35
|
+
/><stop
|
|
36
|
+
offset=".7"
|
|
37
|
+
stop-color="#36c752"
|
|
38
|
+
/></radialGradient><radialGradient
|
|
39
|
+
id="f"
|
|
40
|
+
cx="376.5"
|
|
41
|
+
cy="568"
|
|
42
|
+
r="97.3"
|
|
43
|
+
gradientTransform="matrix(.28 .96 .78 -.23 -303.8 -148.5)"
|
|
44
|
+
gradientUnits="userSpaceOnUse"
|
|
45
|
+
><stop offset="0" stop-color="#66eb6e" /><stop
|
|
46
|
+
offset="1"
|
|
47
|
+
stop-color="#66eb6e"
|
|
48
|
+
stop-opacity="0"
|
|
49
|
+
/></radialGradient><linearGradient
|
|
50
|
+
id="a"
|
|
51
|
+
x1="63.3"
|
|
52
|
+
y1="84"
|
|
53
|
+
x2="241.7"
|
|
54
|
+
y2="84"
|
|
55
|
+
gradientTransform="matrix(1 0 0 -1 0 266)"
|
|
56
|
+
gradientUnits="userSpaceOnUse"
|
|
57
|
+
><stop offset="0" stop-color="#0c59a4" /><stop
|
|
58
|
+
offset="1"
|
|
59
|
+
stop-color="#114a8b"
|
|
60
|
+
/></linearGradient><linearGradient
|
|
61
|
+
id="c"
|
|
62
|
+
x1="157.3"
|
|
63
|
+
y1="161.4"
|
|
64
|
+
x2="46"
|
|
65
|
+
y2="40.1"
|
|
66
|
+
gradientTransform="matrix(1 0 0 -1 0 266)"
|
|
67
|
+
gradientUnits="userSpaceOnUse"
|
|
68
|
+
><stop offset="0" stop-color="#1b9de2" /><stop
|
|
69
|
+
offset=".2"
|
|
70
|
+
stop-color="#1595df"
|
|
71
|
+
/><stop offset=".7" stop-color="#0680d7" /><stop
|
|
72
|
+
offset="1"
|
|
73
|
+
stop-color="#0078d4"
|
|
74
|
+
/></linearGradient></defs><path
|
|
75
|
+
d="M235.7 195.5a93.7 93.7 0 0 1-10.6 4.7 101.9 101.9 0 0 1-35.9 6.4c-47.3 0-88.5-32.5-88.5-74.3a31.5 31.5 0 0 1 16.4-27.3c-42.8 1.8-53.8 46.4-53.8 72.5 0 74 68.1 81.4 82.8 81.4 7.9 0 19.8-2.3 27-4.6l1.3-.4a128.3 128.3 0 0 0 66.6-52.8 4 4 0 0 0-5.3-5.6Z"
|
|
76
|
+
transform="translate(-4.6 -5)"
|
|
77
|
+
style="fill:url(#a)"
|
|
78
|
+
/><path
|
|
79
|
+
d="M235.7 195.5a93.7 93.7 0 0 1-10.6 4.7 101.9 101.9 0 0 1-35.9 6.4c-47.3 0-88.5-32.5-88.5-74.3a31.5 31.5 0 0 1 16.4-27.3c-42.8 1.8-53.8 46.4-53.8 72.5 0 74 68.1 81.4 82.8 81.4 7.9 0 19.8-2.3 27-4.6l1.3-.4a128.3 128.3 0 0 0 66.6-52.8 4 4 0 0 0-5.3-5.6Z"
|
|
80
|
+
transform="translate(-4.6 -5)"
|
|
81
|
+
style="isolation:isolate;opacity:.35;fill:url(#b)"
|
|
82
|
+
/><path
|
|
83
|
+
d="M110.3 246.3A79.2 79.2 0 0 1 87.6 225a80.7 80.7 0 0 1 29.5-120c3.2-1.5 8.5-4.1 15.6-4a32.4 32.4 0 0 1 25.7 13 31.9 31.9 0 0 1 6.3 18.7c0-.2 24.5-79.6-80-79.6-43.9 0-80 41.6-80 78.2a130.2 130.2 0 0 0 12.1 56 128 128 0 0 0 156.4 67 75.5 75.5 0 0 1-62.8-8Z"
|
|
84
|
+
transform="translate(-4.6 -5)"
|
|
85
|
+
style="fill:url(#c)"
|
|
86
|
+
/><path
|
|
87
|
+
d="M110.3 246.3A79.2 79.2 0 0 1 87.6 225a80.7 80.7 0 0 1 29.5-120c3.2-1.5 8.5-4.1 15.6-4a32.4 32.4 0 0 1 25.7 13 31.9 31.9 0 0 1 6.3 18.7c0-.2 24.5-79.6-80-79.6-43.9 0-80 41.6-80 78.2a130.2 130.2 0 0 0 12.1 56 128 128 0 0 0 156.4 67 75.5 75.5 0 0 1-62.8-8Z"
|
|
88
|
+
transform="translate(-4.6 -5)"
|
|
89
|
+
style="opacity:.41;fill:url(#d);isolation:isolate"
|
|
90
|
+
/><path
|
|
91
|
+
d="M157 153.8c-.9 1-3.4 2.5-3.4 5.6 0 2.6 1.7 5.2 4.8 7.3 14.3 10 41.4 8.6 41.5 8.6a59.6 59.6 0 0 0 30.3-8.3 61.4 61.4 0 0 0 30.4-52.9c.3-22.4-8-37.3-11.3-43.9C228 28.8 182.3 5 132.6 5a128 128 0 0 0-128 126.2c.5-36.5 36.8-66 80-66 3.5 0 23.5.3 42 10a72.6 72.6 0 0 1 30.9 29.3c6.1 10.6 7.2 24.1 7.2 29.5s-2.7 13.3-7.8 19.9Z"
|
|
92
|
+
transform="translate(-4.6 -5)"
|
|
93
|
+
style="fill:url(#e)"
|
|
94
|
+
/><path
|
|
95
|
+
d="M157 153.8c-.9 1-3.4 2.5-3.4 5.6 0 2.6 1.7 5.2 4.8 7.3 14.3 10 41.4 8.6 41.5 8.6a59.6 59.6 0 0 0 30.3-8.3 61.4 61.4 0 0 0 30.4-52.9c.3-22.4-8-37.3-11.3-43.9C228 28.8 182.3 5 132.6 5a128 128 0 0 0-128 126.2c.5-36.5 36.8-66 80-66 3.5 0 23.5.3 42 10a72.6 72.6 0 0 1 30.9 29.3c6.1 10.6 7.2 24.1 7.2 29.5s-2.7 13.3-7.8 19.9Z"
|
|
96
|
+
transform="translate(-4.6 -5)"
|
|
97
|
+
style="fill:url(#f)"
|
|
98
|
+
/></svg>
|