diff --git a/.vitepress/config.ts b/.vitepress/config.ts index 31625186c..f1dfa14d6 100644 --- a/.vitepress/config.ts +++ b/.vitepress/config.ts @@ -1,12 +1,19 @@ import fs from 'fs' import path from 'path' -import { defineConfigWithTheme, type HeadConfig, type Plugin } from 'vitepress' +import { + defineConfigWithTheme, + type HeadConfig, + type Plugin +} from 'vitepress' import type { Config as ThemeConfig } from '@vue/theme' import llmstxt from 'vitepress-plugin-llms' import baseConfig from '@vue/theme/config' import { headerPlugin } from './headerMdPlugin' // import { textAdPlugin } from './textAdMdPlugin' -import { groupIconMdPlugin,groupIconVitePlugin } from 'vitepress-plugin-group-icons' +import { + groupIconMdPlugin, + groupIconVitePlugin +} from 'vitepress-plugin-group-icons' const nav: ThemeConfig['nav'] = [ { @@ -47,9 +54,12 @@ const nav: ThemeConfig['nav'] = [ text: '资源', items: [ { text: '合作伙伴', link: '/partners/' }, - { text: '开发者', link: '/developers/' }, { text: '主题', link: '/ecosystem/themes' }, { text: 'UI 组件', link: 'https://ui-libs.vercel.app/' }, + { + text: '插件合集', + link: 'https://www.vue-plugins.org/' + }, { text: '证书', link: 'https://certificates.dev/vuejs/?ref=vuejs-nav' @@ -97,7 +107,7 @@ const nav: ThemeConfig['nav'] = [ text: '动态', items: [ { text: '博客', link: 'https://blog.vuejs.org/' }, - { text: 'Twitter', link: 'https://twitter.com/vuejs' }, + { text: 'Twitter', link: 'https://x.com/vuejs' }, { text: '活动', link: 'https://events.vuejs.org/' }, { text: '新闻简报', link: '/ecosystem/newsletters' } ] @@ -128,13 +138,9 @@ const nav: ThemeConfig['nav'] = [ link: '/sponsor/' }, { - text: '专家', - badge: { text: '新' }, - activeMatch: `^/(partners|developers)/`, - items: [ - { text: '合作伙伴', link: '/partners/' }, - { text: '开发者', link: '/developers/', badge: { text: '新' } } - ] + text: '合作伙伴', + activeMatch: `^/partners/`, + link: '/partners/' } ] @@ -497,7 +503,7 @@ export const sidebar: ThemeConfig['sidebar'] = { { text: '带过渡动效的列表', link: '/examples/#list-transition' - }, + } ] }, { @@ -664,11 +670,10 @@ export default defineConfigWithTheme({ [ 'script', { - src: 'https://vueschool.io/banner.js?affiliate=vuejs&type=top', + src: 'https://media.bitterbrains.com/main.js?from=vuejs&type=top', async: 'true' } - ], - inlineScript('perfops.js') + ] ], themeConfig: { @@ -740,7 +745,7 @@ export default defineConfigWithTheme({ { link: 'https://pl.vuejs.org', text: 'Polski', - repo: 'https://github.com/vuejs-translations/docs-pl', + repo: 'https://github.com/vuejs-translations/docs-pl' }, { link: '/translations/', @@ -803,7 +808,7 @@ export default defineConfigWithTheme({ socialLinks: [ { icon: 'github', link: 'https://github.com/vuejs/' }, - { icon: 'twitter', link: 'https://twitter.com/vuejs' }, + { icon: 'twitter', link: 'https://x.com/vuejs' }, { icon: 'discord', link: 'https://discord.com/invite/vue' } ], @@ -825,8 +830,7 @@ export default defineConfigWithTheme({ markdown: { theme: 'github-dark', config(md) { - md.use(headerPlugin) - .use(groupIconMdPlugin) + md.use(headerPlugin).use(groupIconMdPlugin) // .use(textAdPlugin) } }, diff --git a/.vitepress/inlined-scripts/perfops.js b/.vitepress/inlined-scripts/perfops.js deleted file mode 100644 index 381ff494a..000000000 --- a/.vitepress/inlined-scripts/perfops.js +++ /dev/null @@ -1,9 +0,0 @@ -;((d) => { - window.rum = { key: 'a9efvfeu' } - var script = d.createElement('script') - script.src = '/rom3.min.js' - script.type = 'text/javascript' - script.defer = true - script.async = true - d.getElementsByTagName('head')[0].appendChild(script) -})(document) diff --git a/.vitepress/inlined-scripts/restorePreference.js b/.vitepress/inlined-scripts/restorePreference.js index 8e61d189f..5e18b50ff 100644 --- a/.vitepress/inlined-scripts/restorePreference.js +++ b/.vitepress/inlined-scripts/restorePreference.js @@ -8,6 +8,6 @@ restore('vue-docs-prefer-composition', 'prefer-composition', true) restore('vue-docs-prefer-sfc', 'prefer-sfc', true) - // window.__VUE_BANNER_ID__ = 'viteconf2025' + // window.__VUE_BANNER_ID__ = '' // restore(`vue-docs-banner-${__VUE_BANNER_ID__}`, 'banner-dismissed') })() diff --git a/.vitepress/theme/components/Banner.vue b/.vitepress/theme/components/Banner.vue index aa6ae0a74..6730fcd48 100644 --- a/.vitepress/theme/components/Banner.vue +++ b/.vitepress/theme/components/Banner.vue @@ -20,48 +20,12 @@ function dismiss() { } - @@ -82,80 +46,31 @@ html:not(.banner-dismissed) { height: var(--vt-banner-height); line-height: var(--vt-banner-height); text-align: center; - font-size: 12px; - color: white; - background: #262626; - display: flex; - justify-content: center; - align-items: center; - overflow: hidden; -} - -.glow.glow--purple { - position: absolute; - bottom: -15%; - left: -75%; - width: 80%; - aspect-ratio: 1.5; - pointer-events: none; - border-radius: 100%; - background: linear-gradient(270deg, #7a23a1, #715ebde6 60% 80%, #bd34fe00); - filter: blur(15vw); - transform: none; - opacity: .6 -} - -.glow.glow--blue { - position: absolute; - bottom: -15%; - right: -40%; - width: 80%; - aspect-ratio: 1.5; - pointer-events: none; - border-radius: 100%; - background: linear-gradient(180deg, #61d9ff, #0000); - filter: blur(15vw); - transform: none; - opacity: .3 -} - -@media (min-width: 768px) { - .glow.glow--blue { - top: -15%; - right: -40%; - width: 80%; - } - - .glow.glow--purple { - bottom: -15%; - left: -40%; - width: 80%; - } -} - -@media (min-width: 1025px) { - .glow.glow--blue { - top: -15%; - right: -40%; - width: 80%; - } - - .glow.glow--purple { - bottom: -15%; - left: -40%; - width: 80%; - } + font-size: 13px; + font-weight: 600; + color: #fff; + background-color: var(--vt-c-green); + background: linear-gradient( + 90deg, + rgba(66, 184, 131, 1) 0%, + rgba(39, 179, 137, 1) 19%, + rgba(100, 126, 255, 1) 100% + ); } .banner-dismissed .banner { display: none; } +a:hover { + text-decoration: underline; +} + button { position: absolute; right: 0; top: 0; - padding: 5px 5px; + padding: 5px; } .close { @@ -164,65 +79,9 @@ button { fill: #fff; transform: rotate(45deg); } - -.vt-banner-text { - color: #fff; - font-size: 12px; -} - -.vt-main { - color: transparent; - background-image: linear-gradient(120deg, #b047ff 16%, #9499ff, #9499ff); - background-clip: text; -} - -.vt-primary-action { - background: radial-gradient(141.42% 141.42% at 100% 0%, #ffffff80, #fff0), radial-gradient(140.35% 140.35% at 100% 94.74%, #bd34fe, #bd34fe00), radial-gradient(89.94% 89.94% at 18.42% 15.79%, #41d1ff, #41d1ff00); - color: #fff; - padding: 4px 8px; - border-radius: 5px; - font-size: 10px; - text-decoration: none; - margin: 0 10px; - transition: all .2s ease-in-out; - - &:hover { - box-shadow: 0 1px #fffc inset; - } -} - - -@media (max-width: 1280px) { - .banner .vt-banner-text { - font-size: 14px; - } - - .vt-tagline { - display: none; - } -} - -@media (max-width: 780px) { - .vt-tagline { - display: none; - } - - .vt-coupon { - display: none; - } - - .vt-primary-action { - margin: 0 10px; - padding: 4px 8px; - } - - .vt-time-now { - display: none; - } -} - -@media (max-width: 560px) { - .vt-place { +/* +@media (max-width: 720px) { + a > span { display: none; } } */ diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts index f3a6196bd..6d4d78706 100644 --- a/.vitepress/theme/index.ts +++ b/.vitepress/theme/index.ts @@ -12,7 +12,7 @@ import SponsorsAside from './components/SponsorsAside.vue' // import VueSchoolLink from './components/VueSchoolLink.vue' import ScrimbaLink from './components/ScrimbaLink.vue' import WwAds from './components/WwAds.vue' -import Banner from './components/Banner.vue' +// import Banner from './components/Banner.vue' // import TextAd from './components/TextAd.vue' import 'vitepress/dist/client/theme-default/styles/components/vp-code-group.css' diff --git a/package.json b/package.json index d512bde8a..17550bbd0 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "@vue/theme": "^2.3.0", "dynamics.js": "^1.1.5", "gsap": "^3.12.5", - "vitepress": "^1.4.3", + "vitepress": "^1.6.4", "vue": "^3.5.12" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 18cf38e5e..b67c1f192 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,7 +13,7 @@ importers: version: 4.7.0 '@vue/theme': specifier: ^2.3.0 - version: 2.3.0(@algolia/client-search@5.20.0)(search-insights@2.17.2)(vitepress@1.6.3(@algolia/client-search@5.20.0)(@types/node@22.7.5)(postcss@8.5.6)(search-insights@2.17.2)(typescript@5.6.3))(vue@3.5.22(typescript@5.6.3)) + version: 2.3.0(@algolia/client-search@5.35.0)(search-insights@2.17.2)(vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@22.7.5)(postcss@8.5.6)(search-insights@2.17.2)(typescript@5.6.3))(vue@3.5.22(typescript@5.6.3)) dynamics.js: specifier: ^1.1.5 version: 1.1.5 @@ -21,8 +21,8 @@ importers: specifier: ^3.12.5 version: 3.12.5 vitepress: - specifier: ^1.4.3 - version: 1.6.3(@algolia/client-search@5.20.0)(@types/node@22.7.5)(postcss@8.5.6)(search-insights@2.17.2)(typescript@5.6.3) + specifier: ^1.6.4 + version: 1.6.4(@algolia/client-search@5.35.0)(@types/node@22.7.5)(postcss@8.5.6)(search-insights@2.17.2)(typescript@5.6.3) vue: specifier: ^3.5.12 version: 3.5.22(typescript@5.6.3) @@ -59,7 +59,7 @@ importers: version: 5.6.3 vitepress-plugin-group-icons: specifier: ^1.5.4 - version: 1.5.4(markdown-it@14.1.0)(vite@5.4.14(@types/node@22.7.5)) + version: 1.5.4(markdown-it@14.1.0)(vite@5.4.19(@types/node@22.7.5)) vitepress-plugin-llms: specifier: ^0.0.8 version: 0.0.8 @@ -72,6 +72,10 @@ importers: packages: + '@algolia/abtesting@1.1.0': + resolution: {integrity: sha512-sEyWjw28a/9iluA37KLGu8vjxEIlb60uxznfTUmXImy7H5NvbpSO6yYgmgH5KiD7j+zTUUihiST0jEP12IoXow==} + engines: {node: '>= 14.0.0'} + '@algolia/autocomplete-core@1.17.7': resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==} @@ -121,8 +125,8 @@ packages: '@algolia/cache-in-memory@4.24.0': resolution: {integrity: sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==} - '@algolia/client-abtesting@5.20.0': - resolution: {integrity: sha512-YaEoNc1Xf2Yk6oCfXXkZ4+dIPLulCx8Ivqj0OsdkHWnsI3aOJChY5qsfyHhDBNSOhqn2ilgHWxSfyZrjxBcAww==} + '@algolia/client-abtesting@5.35.0': + resolution: {integrity: sha512-uUdHxbfHdoppDVflCHMxRlj49/IllPwwQ2cQ8DLC4LXr3kY96AHBpW0dMyi6ygkn2MtFCc6BxXCzr668ZRhLBQ==} engines: {node: '>= 14.0.0'} '@algolia/client-account@4.24.0': @@ -131,41 +135,41 @@ packages: '@algolia/client-analytics@4.24.0': resolution: {integrity: sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==} - '@algolia/client-analytics@5.20.0': - resolution: {integrity: sha512-CIT9ni0+5sYwqehw+t5cesjho3ugKQjPVy/iPiJvtJX4g8Cdb6je6SPt2uX72cf2ISiXCAX9U3cY0nN0efnRDw==} + '@algolia/client-analytics@5.35.0': + resolution: {integrity: sha512-SunAgwa9CamLcRCPnPHx1V2uxdQwJGqb1crYrRWktWUdld0+B2KyakNEeVn5lln4VyeNtW17Ia7V7qBWyM/Skw==} engines: {node: '>= 14.0.0'} '@algolia/client-common@4.24.0': resolution: {integrity: sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==} - '@algolia/client-common@5.20.0': - resolution: {integrity: sha512-iSTFT3IU8KNpbAHcBUJw2HUrPnMXeXLyGajmCL7gIzWOsYM4GabZDHXOFx93WGiXMti1dymz8k8R+bfHv1YZmA==} + '@algolia/client-common@5.35.0': + resolution: {integrity: sha512-ipE0IuvHu/bg7TjT2s+187kz/E3h5ssfTtjpg1LbWMgxlgiaZIgTTbyynM7NfpSJSKsgQvCQxWjGUO51WSCu7w==} engines: {node: '>= 14.0.0'} - '@algolia/client-insights@5.20.0': - resolution: {integrity: sha512-w9RIojD45z1csvW1vZmAko82fqE/Dm+Ovsy2ElTsjFDB0HMAiLh2FO86hMHbEXDPz6GhHKgGNmBRiRP8dDPgJg==} + '@algolia/client-insights@5.35.0': + resolution: {integrity: sha512-UNbCXcBpqtzUucxExwTSfAe8gknAJ485NfPN6o1ziHm6nnxx97piIbcBQ3edw823Tej2Wxu1C0xBY06KgeZ7gA==} engines: {node: '>= 14.0.0'} '@algolia/client-personalization@4.24.0': resolution: {integrity: sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==} - '@algolia/client-personalization@5.20.0': - resolution: {integrity: sha512-p/hftHhrbiHaEcxubYOzqVV4gUqYWLpTwK+nl2xN3eTrSW9SNuFlAvUBFqPXSVBqc6J5XL9dNKn3y8OA1KElSQ==} + '@algolia/client-personalization@5.35.0': + resolution: {integrity: sha512-/KWjttZ6UCStt4QnWoDAJ12cKlQ+fkpMtyPmBgSS2WThJQdSV/4UWcqCUqGH7YLbwlj3JjNirCu3Y7uRTClxvA==} engines: {node: '>= 14.0.0'} - '@algolia/client-query-suggestions@5.20.0': - resolution: {integrity: sha512-m4aAuis5vZi7P4gTfiEs6YPrk/9hNTESj3gEmGFgfJw3hO2ubdS4jSId1URd6dGdt0ax2QuapXufcrN58hPUcw==} + '@algolia/client-query-suggestions@5.35.0': + resolution: {integrity: sha512-8oCuJCFf/71IYyvQQC+iu4kgViTODbXDk3m7yMctEncRSRV+u2RtDVlpGGfPlJQOrAY7OONwJlSHkmbbm2Kp/w==} engines: {node: '>= 14.0.0'} '@algolia/client-search@4.24.0': resolution: {integrity: sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==} - '@algolia/client-search@5.20.0': - resolution: {integrity: sha512-KL1zWTzrlN4MSiaK1ea560iCA/UewMbS4ZsLQRPoDTWyrbDKVbztkPwwv764LAqgXk0fvkNZvJ3IelcK7DqhjQ==} + '@algolia/client-search@5.35.0': + resolution: {integrity: sha512-FfmdHTrXhIduWyyuko1YTcGLuicVbhUyRjO3HbXE4aP655yKZgdTIfMhZ/V5VY9bHuxv/fGEh3Od1Lvv2ODNTg==} engines: {node: '>= 14.0.0'} - '@algolia/ingestion@1.20.0': - resolution: {integrity: sha512-shj2lTdzl9un4XJblrgqg54DoK6JeKFO8K8qInMu4XhE2JuB8De6PUuXAQwiRigZupbI0xq8aM0LKdc9+qiLQA==} + '@algolia/ingestion@1.35.0': + resolution: {integrity: sha512-gPzACem9IL1Co8mM1LKMhzn1aSJmp+Vp434An4C0OBY4uEJRcqsLN3uLBlY+bYvFg8C8ImwM9YRiKczJXRk0XA==} engines: {node: '>= 14.0.0'} '@algolia/logger-common@4.24.0': @@ -174,36 +178,36 @@ packages: '@algolia/logger-console@4.24.0': resolution: {integrity: sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==} - '@algolia/monitoring@1.20.0': - resolution: {integrity: sha512-aF9blPwOhKtWvkjyyXh9P5peqmhCA1XxLBRgItT+K6pbT0q4hBDQrCid+pQZJYy4HFUKjB/NDDwyzFhj/rwKhw==} + '@algolia/monitoring@1.35.0': + resolution: {integrity: sha512-w9MGFLB6ashI8BGcQoVt7iLgDIJNCn4OIu0Q0giE3M2ItNrssvb8C0xuwJQyTy1OFZnemG0EB1OvXhIHOvQwWw==} engines: {node: '>= 14.0.0'} '@algolia/recommend@4.24.0': resolution: {integrity: sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==} - '@algolia/recommend@5.20.0': - resolution: {integrity: sha512-T6B/WPdZR3b89/F9Vvk6QCbt/wrLAtrGoL8z4qPXDFApQ8MuTFWbleN/4rHn6APWO3ps+BUePIEbue2rY5MlRw==} + '@algolia/recommend@5.35.0': + resolution: {integrity: sha512-AhrVgaaXAb8Ue0u2nuRWwugt0dL5UmRgS9LXe0Hhz493a8KFeZVUE56RGIV3hAa6tHzmAV7eIoqcWTQvxzlJeQ==} engines: {node: '>= 14.0.0'} '@algolia/requester-browser-xhr@4.24.0': resolution: {integrity: sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==} - '@algolia/requester-browser-xhr@5.20.0': - resolution: {integrity: sha512-t6//lXsq8E85JMenHrI6mhViipUT5riNhEfCcvtRsTV+KIBpC6Od18eK864dmBhoc5MubM0f+sGpKOqJIlBSCg==} + '@algolia/requester-browser-xhr@5.35.0': + resolution: {integrity: sha512-diY415KLJZ6x1Kbwl9u96Jsz0OstE3asjXtJ9pmk1d+5gPuQ5jQyEsgC+WmEXzlec3iuVszm8AzNYYaqw6B+Zw==} engines: {node: '>= 14.0.0'} '@algolia/requester-common@4.24.0': resolution: {integrity: sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==} - '@algolia/requester-fetch@5.20.0': - resolution: {integrity: sha512-FHxYGqRY+6bgjKsK4aUsTAg6xMs2S21elPe4Y50GB0Y041ihvw41Vlwy2QS6K9ldoftX4JvXodbKTcmuQxywdQ==} + '@algolia/requester-fetch@5.35.0': + resolution: {integrity: sha512-uydqnSmpAjrgo8bqhE9N1wgcB98psTRRQXcjc4izwMB7yRl9C8uuAQ/5YqRj04U0mMQ+fdu2fcNF6m9+Z1BzDQ==} engines: {node: '>= 14.0.0'} '@algolia/requester-node-http@4.24.0': resolution: {integrity: sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==} - '@algolia/requester-node-http@5.20.0': - resolution: {integrity: sha512-kmtQClq/w3vtPteDSPvaW9SPZL/xrIgMrxZyAgsFwrJk0vJxqyC5/hwHmrCraDnStnGSADnLpBf4SpZnwnkwWw==} + '@algolia/requester-node-http@5.35.0': + resolution: {integrity: sha512-RgLX78ojYOrThJHrIiPzT4HW3yfQa0D7K+MQ81rhxqaNyNBu4F1r+72LNHYH/Z+y9I1Mrjrd/c/Ue5zfDgAEjQ==} engines: {node: '>= 14.0.0'} '@algolia/transporter@4.24.0': @@ -419,8 +423,8 @@ packages: '@iconify-json/logos@1.2.4': resolution: {integrity: sha512-XC4If5D/hbaZvUkTV8iaZuGlQCyG6CNOlaAaJaGa13V5QMYwYjgtKk3vPP8wz3wtTVNVEVk3LRx1fOJz+YnSMw==} - '@iconify-json/simple-icons@1.2.21': - resolution: {integrity: sha512-aqbIuVshMZ2fNEhm25//9DoKudboXF3CpoEQJJlHl9gVSVNOTr4cgaCIZvgSEYmys2HHEfmhcpoZIhoEFZS8SQ==} + '@iconify-json/simple-icons@1.2.46': + resolution: {integrity: sha512-MJfKQDhOMQD5Fc8PcTtCdFX0oBf/nKVfp69ScdEKIXW0JXELX5V2Ld45EsjShi8aJ6DNhdDtSDZvKuDnkDiKnw==} '@iconify-json/vscode-icons@1.2.21': resolution: {integrity: sha512-velkIWAZRxvM9VuhkVeD6obyw0UXjTFk7lqcaxIzY+X7lXx2+yX2MoMbIwgpH3PbgqjvymS/SujBb4aWYcfmhw==} @@ -448,124 +452,129 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@rollup/rollup-android-arm-eabi@4.31.0': - resolution: {integrity: sha512-9NrR4033uCbUBRgvLcBrJofa2KY9DzxL2UKZ1/4xA/mnTNyhZCWBuD8X3tPm1n4KxcgaraOYgrFKSgwjASfmlA==} + '@rollup/rollup-android-arm-eabi@4.46.2': + resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.31.0': - resolution: {integrity: sha512-iBbODqT86YBFHajxxF8ebj2hwKm1k8PTBQSojSt3d1FFt1gN+xf4CowE47iN0vOSdnd+5ierMHBbu/rHc7nq5g==} + '@rollup/rollup-android-arm64@4.46.2': + resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.31.0': - resolution: {integrity: sha512-WHIZfXgVBX30SWuTMhlHPXTyN20AXrLH4TEeH/D0Bolvx9PjgZnn4H677PlSGvU6MKNsjCQJYczkpvBbrBnG6g==} + '@rollup/rollup-darwin-arm64@4.46.2': + resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.31.0': - resolution: {integrity: sha512-hrWL7uQacTEF8gdrQAqcDy9xllQ0w0zuL1wk1HV8wKGSGbKPVjVUv/DEwT2+Asabf8Dh/As+IvfdU+H8hhzrQQ==} + '@rollup/rollup-darwin-x64@4.46.2': + resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.31.0': - resolution: {integrity: sha512-S2oCsZ4hJviG1QjPY1h6sVJLBI6ekBeAEssYKad1soRFv3SocsQCzX6cwnk6fID6UQQACTjeIMB+hyYrFacRew==} + '@rollup/rollup-freebsd-arm64@4.46.2': + resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.31.0': - resolution: {integrity: sha512-pCANqpynRS4Jirn4IKZH4tnm2+2CqCNLKD7gAdEjzdLGbH1iO0zouHz4mxqg0uEMpO030ejJ0aA6e1PJo2xrPA==} + '@rollup/rollup-freebsd-x64@4.46.2': + resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.31.0': - resolution: {integrity: sha512-0O8ViX+QcBd3ZmGlcFTnYXZKGbFu09EhgD27tgTdGnkcYXLat4KIsBBQeKLR2xZDCXdIBAlWLkiXE1+rJpCxFw==} + '@rollup/rollup-linux-arm-gnueabihf@4.46.2': + resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.31.0': - resolution: {integrity: sha512-w5IzG0wTVv7B0/SwDnMYmbr2uERQp999q8FMkKG1I+j8hpPX2BYFjWe69xbhbP6J9h2gId/7ogesl9hwblFwwg==} + '@rollup/rollup-linux-arm-musleabihf@4.46.2': + resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.31.0': - resolution: {integrity: sha512-JyFFshbN5xwy6fulZ8B/8qOqENRmDdEkcIMF0Zz+RsfamEW+Zabl5jAb0IozP/8UKnJ7g2FtZZPEUIAlUSX8cA==} + '@rollup/rollup-linux-arm64-gnu@4.46.2': + resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.31.0': - resolution: {integrity: sha512-kpQXQ0UPFeMPmPYksiBL9WS/BDiQEjRGMfklVIsA0Sng347H8W2iexch+IEwaR7OVSKtr2ZFxggt11zVIlZ25g==} + '@rollup/rollup-linux-arm64-musl@4.46.2': + resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.31.0': - resolution: {integrity: sha512-pMlxLjt60iQTzt9iBb3jZphFIl55a70wexvo8p+vVFK+7ifTRookdoXX3bOsRdmfD+OKnMozKO6XM4zR0sHRrQ==} + '@rollup/rollup-linux-loongarch64-gnu@4.46.2': + resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.31.0': - resolution: {integrity: sha512-D7TXT7I/uKEuWiRkEFbed1UUYZwcJDU4vZQdPTcepK7ecPhzKOYk4Er2YR4uHKme4qDeIh6N3XrLfpuM7vzRWQ==} + '@rollup/rollup-linux-ppc64-gnu@4.46.2': + resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.31.0': - resolution: {integrity: sha512-wal2Tc8O5lMBtoePLBYRKj2CImUCJ4UNGJlLwspx7QApYny7K1cUYlzQ/4IGQBLmm+y0RS7dwc3TDO/pmcneTw==} + '@rollup/rollup-linux-riscv64-gnu@4.46.2': + resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.46.2': + resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.31.0': - resolution: {integrity: sha512-O1o5EUI0+RRMkK9wiTVpk2tyzXdXefHtRTIjBbmFREmNMy7pFeYXCFGbhKFwISA3UOExlo5GGUuuj3oMKdK6JQ==} + '@rollup/rollup-linux-s390x-gnu@4.46.2': + resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.31.0': - resolution: {integrity: sha512-zSoHl356vKnNxwOWnLd60ixHNPRBglxpv2g7q0Cd3Pmr561gf0HiAcUBRL3S1vPqRC17Zo2CX/9cPkqTIiai1g==} + '@rollup/rollup-linux-x64-gnu@4.46.2': + resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.31.0': - resolution: {integrity: sha512-ypB/HMtcSGhKUQNiFwqgdclWNRrAYDH8iMYH4etw/ZlGwiTVxBz2tDrGRrPlfZu6QjXwtd+C3Zib5pFqID97ZA==} + '@rollup/rollup-linux-x64-musl@4.46.2': + resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.31.0': - resolution: {integrity: sha512-JuhN2xdI/m8Hr+aVO3vspO7OQfUFO6bKLIRTAy0U15vmWjnZDLrEgCZ2s6+scAYaQVpYSh9tZtRijApw9IXyMw==} + '@rollup/rollup-win32-arm64-msvc@4.46.2': + resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.31.0': - resolution: {integrity: sha512-U1xZZXYkvdf5MIWmftU8wrM5PPXzyaY1nGCI4KI4BFfoZxHamsIe+BtnPLIvvPykvQWlVbqUXdLa4aJUuilwLQ==} + '@rollup/rollup-win32-ia32-msvc@4.46.2': + resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.31.0': - resolution: {integrity: sha512-ul8rnCsUumNln5YWwz0ted2ZHFhzhRRnkpBZ+YRuHoRAlUji9KChpOUOndY7uykrPEPXVbHLlsdo6v5yXo/TXw==} + '@rollup/rollup-win32-x64-msvc@4.46.2': + resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==} cpu: [x64] os: [win32] - '@shikijs/core@2.1.0': - resolution: {integrity: sha512-v795KDmvs+4oV0XD05YLzfDMe9ISBgNjtFxP4PAEv5DqyeghO1/TwDqs9ca5/E6fuO95IcAcWqR6cCX9TnqLZA==} + '@shikijs/core@2.5.0': + resolution: {integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==} - '@shikijs/engine-javascript@2.1.0': - resolution: {integrity: sha512-cgIUdAliOsoaa0rJz/z+jvhrpRd+fVAoixVFEVxUq5FA+tHgBZAIfVJSgJNVRj2hs/wZ1+4hMe82eKAThVh0nQ==} + '@shikijs/engine-javascript@2.5.0': + resolution: {integrity: sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==} - '@shikijs/engine-oniguruma@2.1.0': - resolution: {integrity: sha512-Ujik33wEDqgqY2WpjRDUBECGcKPv3eGGkoXPujIXvokLaRmGky8NisSk8lHUGeSFxo/Cz5sgFej9sJmA9yeepg==} + '@shikijs/engine-oniguruma@2.5.0': + resolution: {integrity: sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==} - '@shikijs/langs@2.1.0': - resolution: {integrity: sha512-Jn0gS4rPgerMDPj1ydjgFzZr5fAIoMYz4k7ZT3LJxWWBWA6lokK0pumUwVtb+MzXtlpjxOaQejLprmLbvMZyww==} + '@shikijs/langs@2.5.0': + resolution: {integrity: sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==} - '@shikijs/themes@2.1.0': - resolution: {integrity: sha512-oS2mU6+bz+8TKutsjBxBA7Z3vrQk21RCmADLpnu8cy3tZD6Rw0FKqDyXNtwX52BuIDKHxZNmRlTdG3vtcYv3NQ==} + '@shikijs/themes@2.5.0': + resolution: {integrity: sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==} - '@shikijs/transformers@2.1.0': - resolution: {integrity: sha512-3sfvh6OKUVkT5wZFU1xxiq1qqNIuCwUY3yOb9ZGm19y80UZ/eoroLE2orGNzfivyTxR93GfXXZC/ghPR0/SBow==} + '@shikijs/transformers@2.5.0': + resolution: {integrity: sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==} - '@shikijs/types@2.1.0': - resolution: {integrity: sha512-OFOdHA6VEVbiQvepJ8yqicC6VmBrKxFFhM2EsHHrZESqLVAXOSeRDiuSYV185lIgp15TVic5vYBYNhTsk1xHLg==} + '@shikijs/types@2.5.0': + resolution: {integrity: sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==} - '@shikijs/vscode-textmate@10.0.1': - resolution: {integrity: sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==} + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} '@types/body-scroll-lock@3.1.2': resolution: {integrity: sha512-ELhtuphE/YbhEcpBf/rIV9Tl3/O0A0gpCVD+oYFSS8bWstHFJUgA4nNw1ZakVlRC38XaQEIsBogUZKWIPBvpfQ==} @@ -573,8 +582,8 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} @@ -609,11 +618,14 @@ packages: '@types/web-bluetooth@0.0.20': resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} - '@ungap/structured-clone@1.2.1': - resolution: {integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==} + '@types/web-bluetooth@0.0.21': + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@vitejs/plugin-vue@5.2.1': - resolution: {integrity: sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==} + '@vitejs/plugin-vue@5.2.4': + resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: vite: ^5.0.0 || ^6.0.0 @@ -643,14 +655,14 @@ packages: '@vue/compiler-vue2@2.7.16': resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} - '@vue/devtools-api@7.7.0': - resolution: {integrity: sha512-bHEv6kT85BHtyGgDhE07bAUMAy7zpv6nnR004nSTd0wWMrAOtcrYoXO5iyr20Hkf5jR8obQOfS3byW+I3l2CCA==} + '@vue/devtools-api@7.7.7': + resolution: {integrity: sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==} - '@vue/devtools-kit@7.7.0': - resolution: {integrity: sha512-5cvZ+6SA88zKC8XiuxUfqpdTwVjJbvYnQZY5NReh7qlSGPvVDjjzyEtW+gdzLXNSd8tStgOjAdMCpvDQamUXtA==} + '@vue/devtools-kit@7.7.7': + resolution: {integrity: sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==} - '@vue/devtools-shared@7.7.0': - resolution: {integrity: sha512-jtlQY26R5thQxW9YQTpXbI0HoK0Wf9Rd4ekidOkRvSy7ChfK0kIU6vvcBtjj87/EcpeOSK49fZAicaFNJcoTcQ==} + '@vue/devtools-shared@7.7.7': + resolution: {integrity: sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==} '@vue/language-core@2.1.6': resolution: {integrity: sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg==} @@ -677,8 +689,8 @@ packages: peerDependencies: vue: 3.5.22 - '@vue/shared@3.5.13': - resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + '@vue/shared@3.5.20': + resolution: {integrity: sha512-SoRGP596KU/ig6TfgkCMbXkr4YJ91n/QSdMuqeP5r3hVIYA3CPHUBCc7Skak0EAKV+5lL4KyIh61VA/pK1CIAA==} '@vue/shared@3.5.22': resolution: {integrity: sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==} @@ -691,11 +703,11 @@ packages: '@vueuse/core@10.11.1': resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==} - '@vueuse/core@12.5.0': - resolution: {integrity: sha512-GVyH1iYqNANwcahAx8JBm6awaNgvR/SwZ1fjr10b8l1HIgDp82ngNbfzJUgOgWEoxjL+URAggnlilAEXwCOZtg==} + '@vueuse/core@12.8.2': + resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==} - '@vueuse/integrations@12.5.0': - resolution: {integrity: sha512-HYLt8M6mjUfcoUOzyBcX2RjpfapIwHPBmQJtTmXOQW845Y/Osu9VuTJ5kPvnmWJ6IUa05WpblfOwZ+P0G4iZsQ==} + '@vueuse/integrations@12.8.2': + resolution: {integrity: sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==} peerDependencies: async-validator: ^4 axios: ^1 @@ -738,14 +750,14 @@ packages: '@vueuse/metadata@10.11.1': resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==} - '@vueuse/metadata@12.5.0': - resolution: {integrity: sha512-Ui7Lo2a7AxrMAXRF+fAp9QsXuwTeeZ8fIB9wsLHqzq9MQk+2gMYE2IGJW48VMJ8ecvCB3z3GsGLKLbSasQ5Qlg==} + '@vueuse/metadata@12.8.2': + resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==} '@vueuse/shared@10.11.1': resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==} - '@vueuse/shared@12.5.0': - resolution: {integrity: sha512-vMpcL1lStUU6O+kdj6YdHDixh0odjPAUM15uJ9f7MY781jcYkIwFA4iv2EfoIPO6vBmvutI1HxxAwmf0cx5ISQ==} + '@vueuse/shared@12.8.2': + resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==} acorn@8.14.1: resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} @@ -755,24 +767,24 @@ packages: algoliasearch@4.24.0: resolution: {integrity: sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==} - algoliasearch@5.20.0: - resolution: {integrity: sha512-groO71Fvi5SWpxjI9Ia+chy0QBwT61mg6yxJV27f5YFf+Mw+STT75K6SHySpP8Co5LsCrtsbCH5dJZSRtkSKaQ==} + algoliasearch@5.35.0: + resolution: {integrity: sha512-Y+moNhsqgLmvJdgTsO4GZNgsaDWv8AOGAaPeIeHKlDn/XunoAqYbA+XNpBd1dW8GOXAUDyxC9Rxc7AV4kpFcIg==} engines: {node: '>= 14.0.0'} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} argparse@1.0.10: @@ -787,8 +799,8 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - birpc@0.2.19: - resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} + birpc@2.5.0: + resolution: {integrity: sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==} body-scroll-lock@4.0.0-beta.0: resolution: {integrity: sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==} @@ -929,8 +941,8 @@ packages: fault@2.0.1: resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} - focus-trap@7.6.4: - resolution: {integrity: sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==} + focus-trap@7.6.5: + resolution: {integrity: sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==} foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} @@ -964,8 +976,8 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - hast-util-to-html@9.0.4: - resolution: {integrity: sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==} + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} @@ -1205,8 +1217,8 @@ packages: micromark-util-types@1.1.0: resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} - micromark-util-types@2.0.1: - resolution: {integrity: sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==} + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} micromark@3.2.0: resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} @@ -1226,8 +1238,8 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - minisearch@7.1.1: - resolution: {integrity: sha512-b3YZEYCEH4EdCAtYP7OlDyx7FdPwNzuNwLQ34SfJpM9dlbBZzeXndGavTrC+VCiRWomL21SWfMc6SCKO/U2ZNw==} + minisearch@7.1.2: + resolution: {integrity: sha512-R1Pd9eF+MD5JYDDSPAp/q1ougKglm14uEkPMvQ/05RGmx6G9wvmLTrTI/Q5iPNJLYqNdsDQ7qTGIcNWR+FrHmA==} mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} @@ -1253,8 +1265,8 @@ packages: normalize.css@8.0.1: resolution: {integrity: sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==} - oniguruma-to-es@2.3.0: - resolution: {integrity: sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==} + oniguruma-to-es@3.1.1: + resolution: {integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==} open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} @@ -1299,11 +1311,11 @@ packages: preact@10.24.2: resolution: {integrity: sha512-1cSoF0aCC8uaARATfrlz4VCBqE8LwZwRfLgkxJOQwAlQt6ayTmi0D9OF7nXid1POI5SZidFuG9CnlXbDfLqY/Q==} - preact@10.25.4: - resolution: {integrity: sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==} + preact@10.27.0: + resolution: {integrity: sha512-/DTYoB6mwwgPytiqQTh/7SFRL98ZdiD8Sk8zIUVOxtwq4oWcwrcd1uno9fE/zZmUaUrFNYzbH14CPebOz9tZQw==} - property-information@6.5.0: - resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} @@ -1312,14 +1324,14 @@ packages: quansync@0.2.10: resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} - regex-recursion@5.1.1: - resolution: {integrity: sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==} + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} regex-utilities@2.3.0: resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} - regex@5.1.1: - resolution: {integrity: sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==} + regex@6.0.1: + resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} remark-custom-container@1.3.1: resolution: {integrity: sha512-yu2P4r/Pk2PS7rF9NcWUfz5Va2nuuXq5PtyitOgOGNMhgWTznNnvzu9n1xeaEnzLL/NMHpu7btt/Z46m8O9lhg==} @@ -1336,8 +1348,8 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rollup@4.31.0: - resolution: {integrity: sha512-9cCE8P4rZLx9+PjoyqHLs31V9a9Vpvfo4qNcs6JCiGWYhw2gijSetFbH6SSy1whnkgcefnUwr8sad7tgqsGvnw==} + rollup@4.46.2: + resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -1365,8 +1377,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shiki@2.1.0: - resolution: {integrity: sha512-yvKPdNGLXZv7WC4bl7JBbU3CEcUxnBanvMez8MG3gZXKpClGL4bHqFyLhTx+2zUvbjClUANs/S22HXb7aeOgmA==} + shiki@2.5.0: + resolution: {integrity: sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==} signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} @@ -1404,8 +1416,8 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} engines: {node: '>=12'} strip-bom-string@1.0.0: @@ -1487,8 +1499,8 @@ packages: vfile-message@3.1.4: resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} - vfile-message@4.0.2: - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} vfile@5.3.7: resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} @@ -1496,8 +1508,8 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite@5.4.14: - resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==} + vite@5.4.19: + resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -1536,8 +1548,8 @@ packages: vitepress-plugin-llms@0.0.8: resolution: {integrity: sha512-xz4wb87TqAn75RbKwQs+w+63OToK7W57pmLKIEY849Izpzi/WvTI9T+rCDwabdhPFirI3LLT2P2nErsSrik0/A==} - vitepress@1.6.3: - resolution: {integrity: sha512-fCkfdOk8yRZT8GD9BFqusW3+GggWYZ/rYncOfmgcDtP3ualNHCAg+Robxp2/6xfH1WwPHtGpPwv7mbA3qomtBw==} + vitepress@1.6.4: + resolution: {integrity: sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==} hasBin: true peerDependencies: markdown-it-mathjax3: ^4 @@ -1598,60 +1610,67 @@ packages: snapshots: - '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0)(search-insights@2.17.2)': + '@algolia/abtesting@1.1.0': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0)(search-insights@2.17.2) - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0) + '@algolia/client-common': 5.35.0 + '@algolia/requester-browser-xhr': 5.35.0 + '@algolia/requester-fetch': 5.35.0 + '@algolia/requester-node-http': 5.35.0 + + '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.35.0)(algoliasearch@5.35.0)(search-insights@2.17.2)': + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.35.0)(algoliasearch@5.35.0)(search-insights@2.17.2) + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.35.0)(algoliasearch@5.35.0) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-core@1.9.3(@algolia/client-search@5.20.0)(algoliasearch@4.24.0)(search-insights@2.17.2)': + '@algolia/autocomplete-core@1.9.3(@algolia/client-search@5.35.0)(algoliasearch@4.24.0)(search-insights@2.17.2)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@5.20.0)(algoliasearch@4.24.0)(search-insights@2.17.2) - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.20.0)(algoliasearch@4.24.0) + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@5.35.0)(algoliasearch@4.24.0)(search-insights@2.17.2) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.35.0)(algoliasearch@4.24.0) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0)(search-insights@2.17.2)': + '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.35.0)(algoliasearch@5.35.0)(search-insights@2.17.2)': dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0) + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.35.0)(algoliasearch@5.35.0) search-insights: 2.17.2 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@5.20.0)(algoliasearch@4.24.0)(search-insights@2.17.2)': + '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@5.35.0)(algoliasearch@4.24.0)(search-insights@2.17.2)': dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.20.0)(algoliasearch@4.24.0) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.35.0)(algoliasearch@4.24.0) search-insights: 2.17.2 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0)': + '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.35.0)(algoliasearch@5.35.0)': dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0) - '@algolia/client-search': 5.20.0 - algoliasearch: 5.20.0 + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.35.0)(algoliasearch@5.35.0) + '@algolia/client-search': 5.35.0 + algoliasearch: 5.35.0 - '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@5.20.0)(algoliasearch@4.24.0)': + '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@5.35.0)(algoliasearch@4.24.0)': dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.20.0)(algoliasearch@4.24.0) - '@algolia/client-search': 5.20.0 + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.35.0)(algoliasearch@4.24.0) + '@algolia/client-search': 5.35.0 algoliasearch: 4.24.0 - '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0)': + '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.35.0)(algoliasearch@5.35.0)': dependencies: - '@algolia/client-search': 5.20.0 - algoliasearch: 5.20.0 + '@algolia/client-search': 5.35.0 + algoliasearch: 5.35.0 - '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@5.20.0)(algoliasearch@4.24.0)': + '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@5.35.0)(algoliasearch@4.24.0)': dependencies: - '@algolia/client-search': 5.20.0 + '@algolia/client-search': 5.35.0 algoliasearch: 4.24.0 '@algolia/cache-browser-local-storage@4.24.0': @@ -1664,12 +1683,12 @@ snapshots: dependencies: '@algolia/cache-common': 4.24.0 - '@algolia/client-abtesting@5.20.0': + '@algolia/client-abtesting@5.35.0': dependencies: - '@algolia/client-common': 5.20.0 - '@algolia/requester-browser-xhr': 5.20.0 - '@algolia/requester-fetch': 5.20.0 - '@algolia/requester-node-http': 5.20.0 + '@algolia/client-common': 5.35.0 + '@algolia/requester-browser-xhr': 5.35.0 + '@algolia/requester-fetch': 5.35.0 + '@algolia/requester-node-http': 5.35.0 '@algolia/client-account@4.24.0': dependencies: @@ -1684,26 +1703,26 @@ snapshots: '@algolia/requester-common': 4.24.0 '@algolia/transporter': 4.24.0 - '@algolia/client-analytics@5.20.0': + '@algolia/client-analytics@5.35.0': dependencies: - '@algolia/client-common': 5.20.0 - '@algolia/requester-browser-xhr': 5.20.0 - '@algolia/requester-fetch': 5.20.0 - '@algolia/requester-node-http': 5.20.0 + '@algolia/client-common': 5.35.0 + '@algolia/requester-browser-xhr': 5.35.0 + '@algolia/requester-fetch': 5.35.0 + '@algolia/requester-node-http': 5.35.0 '@algolia/client-common@4.24.0': dependencies: '@algolia/requester-common': 4.24.0 '@algolia/transporter': 4.24.0 - '@algolia/client-common@5.20.0': {} + '@algolia/client-common@5.35.0': {} - '@algolia/client-insights@5.20.0': + '@algolia/client-insights@5.35.0': dependencies: - '@algolia/client-common': 5.20.0 - '@algolia/requester-browser-xhr': 5.20.0 - '@algolia/requester-fetch': 5.20.0 - '@algolia/requester-node-http': 5.20.0 + '@algolia/client-common': 5.35.0 + '@algolia/requester-browser-xhr': 5.35.0 + '@algolia/requester-fetch': 5.35.0 + '@algolia/requester-node-http': 5.35.0 '@algolia/client-personalization@4.24.0': dependencies: @@ -1711,19 +1730,19 @@ snapshots: '@algolia/requester-common': 4.24.0 '@algolia/transporter': 4.24.0 - '@algolia/client-personalization@5.20.0': + '@algolia/client-personalization@5.35.0': dependencies: - '@algolia/client-common': 5.20.0 - '@algolia/requester-browser-xhr': 5.20.0 - '@algolia/requester-fetch': 5.20.0 - '@algolia/requester-node-http': 5.20.0 + '@algolia/client-common': 5.35.0 + '@algolia/requester-browser-xhr': 5.35.0 + '@algolia/requester-fetch': 5.35.0 + '@algolia/requester-node-http': 5.35.0 - '@algolia/client-query-suggestions@5.20.0': + '@algolia/client-query-suggestions@5.35.0': dependencies: - '@algolia/client-common': 5.20.0 - '@algolia/requester-browser-xhr': 5.20.0 - '@algolia/requester-fetch': 5.20.0 - '@algolia/requester-node-http': 5.20.0 + '@algolia/client-common': 5.35.0 + '@algolia/requester-browser-xhr': 5.35.0 + '@algolia/requester-fetch': 5.35.0 + '@algolia/requester-node-http': 5.35.0 '@algolia/client-search@4.24.0': dependencies: @@ -1731,19 +1750,19 @@ snapshots: '@algolia/requester-common': 4.24.0 '@algolia/transporter': 4.24.0 - '@algolia/client-search@5.20.0': + '@algolia/client-search@5.35.0': dependencies: - '@algolia/client-common': 5.20.0 - '@algolia/requester-browser-xhr': 5.20.0 - '@algolia/requester-fetch': 5.20.0 - '@algolia/requester-node-http': 5.20.0 + '@algolia/client-common': 5.35.0 + '@algolia/requester-browser-xhr': 5.35.0 + '@algolia/requester-fetch': 5.35.0 + '@algolia/requester-node-http': 5.35.0 - '@algolia/ingestion@1.20.0': + '@algolia/ingestion@1.35.0': dependencies: - '@algolia/client-common': 5.20.0 - '@algolia/requester-browser-xhr': 5.20.0 - '@algolia/requester-fetch': 5.20.0 - '@algolia/requester-node-http': 5.20.0 + '@algolia/client-common': 5.35.0 + '@algolia/requester-browser-xhr': 5.35.0 + '@algolia/requester-fetch': 5.35.0 + '@algolia/requester-node-http': 5.35.0 '@algolia/logger-common@4.24.0': {} @@ -1751,12 +1770,12 @@ snapshots: dependencies: '@algolia/logger-common': 4.24.0 - '@algolia/monitoring@1.20.0': + '@algolia/monitoring@1.35.0': dependencies: - '@algolia/client-common': 5.20.0 - '@algolia/requester-browser-xhr': 5.20.0 - '@algolia/requester-fetch': 5.20.0 - '@algolia/requester-node-http': 5.20.0 + '@algolia/client-common': 5.35.0 + '@algolia/requester-browser-xhr': 5.35.0 + '@algolia/requester-fetch': 5.35.0 + '@algolia/requester-node-http': 5.35.0 '@algolia/recommend@4.24.0': dependencies: @@ -1772,34 +1791,34 @@ snapshots: '@algolia/requester-node-http': 4.24.0 '@algolia/transporter': 4.24.0 - '@algolia/recommend@5.20.0': + '@algolia/recommend@5.35.0': dependencies: - '@algolia/client-common': 5.20.0 - '@algolia/requester-browser-xhr': 5.20.0 - '@algolia/requester-fetch': 5.20.0 - '@algolia/requester-node-http': 5.20.0 + '@algolia/client-common': 5.35.0 + '@algolia/requester-browser-xhr': 5.35.0 + '@algolia/requester-fetch': 5.35.0 + '@algolia/requester-node-http': 5.35.0 '@algolia/requester-browser-xhr@4.24.0': dependencies: '@algolia/requester-common': 4.24.0 - '@algolia/requester-browser-xhr@5.20.0': + '@algolia/requester-browser-xhr@5.35.0': dependencies: - '@algolia/client-common': 5.20.0 + '@algolia/client-common': 5.35.0 '@algolia/requester-common@4.24.0': {} - '@algolia/requester-fetch@5.20.0': + '@algolia/requester-fetch@5.35.0': dependencies: - '@algolia/client-common': 5.20.0 + '@algolia/client-common': 5.35.0 '@algolia/requester-node-http@4.24.0': dependencies: '@algolia/requester-common': 4.24.0 - '@algolia/requester-node-http@5.20.0': + '@algolia/requester-node-http@5.35.0': dependencies: - '@algolia/client-common': 5.20.0 + '@algolia/client-common': 5.35.0 '@algolia/transporter@4.24.0': dependencies: @@ -1831,9 +1850,9 @@ snapshots: '@docsearch/css@3.8.2': {} - '@docsearch/js@3.6.2(@algolia/client-search@5.20.0)(search-insights@2.17.2)': + '@docsearch/js@3.6.2(@algolia/client-search@5.35.0)(search-insights@2.17.2)': dependencies: - '@docsearch/react': 3.6.2(@algolia/client-search@5.20.0)(search-insights@2.17.2) + '@docsearch/react': 3.6.2(@algolia/client-search@5.35.0)(search-insights@2.17.2) preact: 10.24.2 transitivePeerDependencies: - '@algolia/client-search' @@ -1842,10 +1861,10 @@ snapshots: - react-dom - search-insights - '@docsearch/js@3.8.2(@algolia/client-search@5.20.0)(search-insights@2.17.2)': + '@docsearch/js@3.8.2(@algolia/client-search@5.35.0)(search-insights@2.17.2)': dependencies: - '@docsearch/react': 3.8.2(@algolia/client-search@5.20.0)(search-insights@2.17.2) - preact: 10.25.4 + '@docsearch/react': 3.8.2(@algolia/client-search@5.35.0)(search-insights@2.17.2) + preact: 10.27.0 transitivePeerDependencies: - '@algolia/client-search' - '@types/react' @@ -1853,10 +1872,10 @@ snapshots: - react-dom - search-insights - '@docsearch/react@3.6.2(@algolia/client-search@5.20.0)(search-insights@2.17.2)': + '@docsearch/react@3.6.2(@algolia/client-search@5.35.0)(search-insights@2.17.2)': dependencies: - '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@5.20.0)(algoliasearch@4.24.0)(search-insights@2.17.2) - '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@5.20.0)(algoliasearch@4.24.0) + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@5.35.0)(algoliasearch@4.24.0)(search-insights@2.17.2) + '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@5.35.0)(algoliasearch@4.24.0) '@docsearch/css': 3.6.2 algoliasearch: 4.24.0 optionalDependencies: @@ -1864,12 +1883,12 @@ snapshots: transitivePeerDependencies: - '@algolia/client-search' - '@docsearch/react@3.8.2(@algolia/client-search@5.20.0)(search-insights@2.17.2)': + '@docsearch/react@3.8.2(@algolia/client-search@5.35.0)(search-insights@2.17.2)': dependencies: - '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0)(search-insights@2.17.2) - '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.20.0)(algoliasearch@5.20.0) + '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.35.0)(algoliasearch@5.35.0)(search-insights@2.17.2) + '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.35.0)(algoliasearch@5.35.0) '@docsearch/css': 3.8.2 - algoliasearch: 5.20.0 + algoliasearch: 5.35.0 optionalDependencies: search-insights: 2.17.2 transitivePeerDependencies: @@ -1948,7 +1967,7 @@ snapshots: dependencies: '@iconify/types': 2.0.0 - '@iconify-json/simple-icons@1.2.21': + '@iconify-json/simple-icons@1.2.46': dependencies: '@iconify/types': 2.0.0 @@ -1975,7 +1994,7 @@ snapshots: dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 @@ -1993,102 +2012,105 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@rollup/rollup-android-arm-eabi@4.31.0': + '@rollup/rollup-android-arm-eabi@4.46.2': + optional: true + + '@rollup/rollup-android-arm64@4.46.2': optional: true - '@rollup/rollup-android-arm64@4.31.0': + '@rollup/rollup-darwin-arm64@4.46.2': optional: true - '@rollup/rollup-darwin-arm64@4.31.0': + '@rollup/rollup-darwin-x64@4.46.2': optional: true - '@rollup/rollup-darwin-x64@4.31.0': + '@rollup/rollup-freebsd-arm64@4.46.2': optional: true - '@rollup/rollup-freebsd-arm64@4.31.0': + '@rollup/rollup-freebsd-x64@4.46.2': optional: true - '@rollup/rollup-freebsd-x64@4.31.0': + '@rollup/rollup-linux-arm-gnueabihf@4.46.2': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.31.0': + '@rollup/rollup-linux-arm-musleabihf@4.46.2': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.31.0': + '@rollup/rollup-linux-arm64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-arm64-gnu@4.31.0': + '@rollup/rollup-linux-arm64-musl@4.46.2': optional: true - '@rollup/rollup-linux-arm64-musl@4.31.0': + '@rollup/rollup-linux-loongarch64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.31.0': + '@rollup/rollup-linux-ppc64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.31.0': + '@rollup/rollup-linux-riscv64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.31.0': + '@rollup/rollup-linux-riscv64-musl@4.46.2': optional: true - '@rollup/rollup-linux-s390x-gnu@4.31.0': + '@rollup/rollup-linux-s390x-gnu@4.46.2': optional: true - '@rollup/rollup-linux-x64-gnu@4.31.0': + '@rollup/rollup-linux-x64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-x64-musl@4.31.0': + '@rollup/rollup-linux-x64-musl@4.46.2': optional: true - '@rollup/rollup-win32-arm64-msvc@4.31.0': + '@rollup/rollup-win32-arm64-msvc@4.46.2': optional: true - '@rollup/rollup-win32-ia32-msvc@4.31.0': + '@rollup/rollup-win32-ia32-msvc@4.46.2': optional: true - '@rollup/rollup-win32-x64-msvc@4.31.0': + '@rollup/rollup-win32-x64-msvc@4.46.2': optional: true - '@shikijs/core@2.1.0': + '@shikijs/core@2.5.0': dependencies: - '@shikijs/engine-javascript': 2.1.0 - '@shikijs/engine-oniguruma': 2.1.0 - '@shikijs/types': 2.1.0 - '@shikijs/vscode-textmate': 10.0.1 + '@shikijs/engine-javascript': 2.5.0 + '@shikijs/engine-oniguruma': 2.5.0 + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - hast-util-to-html: 9.0.4 + hast-util-to-html: 9.0.5 - '@shikijs/engine-javascript@2.1.0': + '@shikijs/engine-javascript@2.5.0': dependencies: - '@shikijs/types': 2.1.0 - '@shikijs/vscode-textmate': 10.0.1 - oniguruma-to-es: 2.3.0 + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 3.1.1 - '@shikijs/engine-oniguruma@2.1.0': + '@shikijs/engine-oniguruma@2.5.0': dependencies: - '@shikijs/types': 2.1.0 - '@shikijs/vscode-textmate': 10.0.1 + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs@2.1.0': + '@shikijs/langs@2.5.0': dependencies: - '@shikijs/types': 2.1.0 + '@shikijs/types': 2.5.0 - '@shikijs/themes@2.1.0': + '@shikijs/themes@2.5.0': dependencies: - '@shikijs/types': 2.1.0 + '@shikijs/types': 2.5.0 - '@shikijs/transformers@2.1.0': + '@shikijs/transformers@2.5.0': dependencies: - '@shikijs/core': 2.1.0 - '@shikijs/types': 2.1.0 + '@shikijs/core': 2.5.0 + '@shikijs/types': 2.5.0 - '@shikijs/types@2.1.0': + '@shikijs/types@2.5.0': dependencies: - '@shikijs/vscode-textmate': 10.0.1 + '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - '@shikijs/vscode-textmate@10.0.1': {} + '@shikijs/vscode-textmate@10.0.2': {} '@types/body-scroll-lock@3.1.2': {} @@ -2096,7 +2118,7 @@ snapshots: dependencies: '@types/ms': 2.1.0 - '@types/estree@1.0.6': {} + '@types/estree@1.0.8': {} '@types/hast@3.0.4': dependencies: @@ -2131,11 +2153,13 @@ snapshots: '@types/web-bluetooth@0.0.20': {} - '@ungap/structured-clone@1.2.1': {} + '@types/web-bluetooth@0.0.21': {} + + '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-vue@5.2.1(vite@5.4.14(@types/node@22.7.5))(vue@3.5.22(typescript@5.6.3))': + '@vitejs/plugin-vue@5.2.4(vite@5.4.19(@types/node@22.7.5))(vue@3.5.22(typescript@5.6.3))': dependencies: - vite: 5.4.14(@types/node@22.7.5) + vite: 5.4.19(@types/node@22.7.5) vue: 3.5.22(typescript@5.6.3) '@volar/language-core@2.4.6': @@ -2185,21 +2209,21 @@ snapshots: de-indent: 1.0.2 he: 1.2.0 - '@vue/devtools-api@7.7.0': + '@vue/devtools-api@7.7.7': dependencies: - '@vue/devtools-kit': 7.7.0 + '@vue/devtools-kit': 7.7.7 - '@vue/devtools-kit@7.7.0': + '@vue/devtools-kit@7.7.7': dependencies: - '@vue/devtools-shared': 7.7.0 - birpc: 0.2.19 + '@vue/devtools-shared': 7.7.7 + birpc: 2.5.0 hookable: 5.5.3 mitt: 3.0.1 perfect-debounce: 1.0.0 speakingurl: 14.0.1 superjson: 2.2.2 - '@vue/devtools-shared@7.7.0': + '@vue/devtools-shared@7.7.7': dependencies: rfdc: 1.4.1 @@ -2240,19 +2264,19 @@ snapshots: '@vue/shared': 3.5.22 vue: 3.5.22(typescript@5.6.3) - '@vue/shared@3.5.13': {} + '@vue/shared@3.5.20': {} '@vue/shared@3.5.22': {} - '@vue/theme@2.3.0(@algolia/client-search@5.20.0)(search-insights@2.17.2)(vitepress@1.6.3(@algolia/client-search@5.20.0)(@types/node@22.7.5)(postcss@8.5.6)(search-insights@2.17.2)(typescript@5.6.3))(vue@3.5.22(typescript@5.6.3))': + '@vue/theme@2.3.0(@algolia/client-search@5.35.0)(search-insights@2.17.2)(vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@22.7.5)(postcss@8.5.6)(search-insights@2.17.2)(typescript@5.6.3))(vue@3.5.22(typescript@5.6.3))': dependencies: '@docsearch/css': 3.6.2 - '@docsearch/js': 3.6.2(@algolia/client-search@5.20.0)(search-insights@2.17.2) + '@docsearch/js': 3.6.2(@algolia/client-search@5.35.0)(search-insights@2.17.2) '@vueuse/core': 10.11.1(vue@3.5.22(typescript@5.6.3)) body-scroll-lock: 4.0.0-beta.0 normalize.css: 8.0.1 tiny-decode: 0.1.3 - vitepress: 1.6.3(@algolia/client-search@5.20.0)(@types/node@22.7.5)(postcss@8.5.6)(search-insights@2.17.2)(typescript@5.6.3) + vitepress: 1.6.4(@algolia/client-search@5.35.0)(@types/node@22.7.5)(postcss@8.5.6)(search-insights@2.17.2)(typescript@5.6.3) transitivePeerDependencies: - '@algolia/client-search' - '@types/react' @@ -2272,28 +2296,28 @@ snapshots: - '@vue/composition-api' - vue - '@vueuse/core@12.5.0(typescript@5.6.3)': + '@vueuse/core@12.8.2(typescript@5.6.3)': dependencies: - '@types/web-bluetooth': 0.0.20 - '@vueuse/metadata': 12.5.0 - '@vueuse/shared': 12.5.0(typescript@5.6.3) + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 12.8.2 + '@vueuse/shared': 12.8.2(typescript@5.6.3) vue: 3.5.22(typescript@5.6.3) transitivePeerDependencies: - typescript - '@vueuse/integrations@12.5.0(focus-trap@7.6.4)(typescript@5.6.3)': + '@vueuse/integrations@12.8.2(focus-trap@7.6.5)(typescript@5.6.3)': dependencies: - '@vueuse/core': 12.5.0(typescript@5.6.3) - '@vueuse/shared': 12.5.0(typescript@5.6.3) + '@vueuse/core': 12.8.2(typescript@5.6.3) + '@vueuse/shared': 12.8.2(typescript@5.6.3) vue: 3.5.22(typescript@5.6.3) optionalDependencies: - focus-trap: 7.6.4 + focus-trap: 7.6.5 transitivePeerDependencies: - typescript '@vueuse/metadata@10.11.1': {} - '@vueuse/metadata@12.5.0': {} + '@vueuse/metadata@12.8.2': {} '@vueuse/shared@10.11.1(vue@3.5.22(typescript@5.6.3))': dependencies: @@ -2302,7 +2326,7 @@ snapshots: - '@vue/composition-api' - vue - '@vueuse/shared@12.5.0(typescript@5.6.3)': + '@vueuse/shared@12.8.2(typescript@5.6.3)': dependencies: vue: 3.5.22(typescript@5.6.3) transitivePeerDependencies: @@ -2328,31 +2352,32 @@ snapshots: '@algolia/requester-node-http': 4.24.0 '@algolia/transporter': 4.24.0 - algoliasearch@5.20.0: - dependencies: - '@algolia/client-abtesting': 5.20.0 - '@algolia/client-analytics': 5.20.0 - '@algolia/client-common': 5.20.0 - '@algolia/client-insights': 5.20.0 - '@algolia/client-personalization': 5.20.0 - '@algolia/client-query-suggestions': 5.20.0 - '@algolia/client-search': 5.20.0 - '@algolia/ingestion': 1.20.0 - '@algolia/monitoring': 1.20.0 - '@algolia/recommend': 5.20.0 - '@algolia/requester-browser-xhr': 5.20.0 - '@algolia/requester-fetch': 5.20.0 - '@algolia/requester-node-http': 5.20.0 + algoliasearch@5.35.0: + dependencies: + '@algolia/abtesting': 1.1.0 + '@algolia/client-abtesting': 5.35.0 + '@algolia/client-analytics': 5.35.0 + '@algolia/client-common': 5.35.0 + '@algolia/client-insights': 5.35.0 + '@algolia/client-personalization': 5.35.0 + '@algolia/client-query-suggestions': 5.35.0 + '@algolia/client-search': 5.35.0 + '@algolia/ingestion': 1.35.0 + '@algolia/monitoring': 1.35.0 + '@algolia/recommend': 5.35.0 + '@algolia/requester-browser-xhr': 5.35.0 + '@algolia/requester-fetch': 5.35.0 + '@algolia/requester-node-http': 5.35.0 ansi-regex@5.0.1: {} - ansi-regex@6.1.0: {} + ansi-regex@6.2.2: {} ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - ansi-styles@6.2.1: {} + ansi-styles@6.2.3: {} argparse@1.0.10: dependencies: @@ -2364,7 +2389,7 @@ snapshots: balanced-match@1.0.2: {} - birpc@0.2.19: {} + birpc@2.5.0: {} body-scroll-lock@4.0.0-beta.0: {} @@ -2494,7 +2519,7 @@ snapshots: dependencies: format: 0.2.2 - focus-trap@7.6.4: + focus-trap@7.6.5: dependencies: tabbable: 6.2.0 @@ -2530,7 +2555,7 @@ snapshots: has-flag@4.0.0: {} - hast-util-to-html@9.0.4: + hast-util-to-html@9.0.5: dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 @@ -2539,7 +2564,7 @@ snapshots: hast-util-whitespace: 3.0.0 html-void-elements: 3.0.0 mdast-util-to-hast: 13.2.0 - property-information: 6.5.0 + property-information: 7.1.0 space-separated-tokens: 2.0.2 stringify-entities: 4.0.4 zwitch: 2.0.4 @@ -2709,7 +2734,7 @@ snapshots: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.2.1 + '@ungap/structured-clone': 1.3.0 devlop: 1.1.0 micromark-util-sanitize-uri: 2.0.1 trim-lines: 3.0.1 @@ -2858,7 +2883,7 @@ snapshots: micromark-util-character@2.1.1: dependencies: micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 micromark-util-chunked@1.1.0: dependencies: @@ -2925,7 +2950,7 @@ snapshots: micromark-util-types@1.1.0: {} - micromark-util-types@2.0.1: {} + micromark-util-types@2.0.2: {} micromark@3.2.0: dependencies: @@ -2961,7 +2986,7 @@ snapshots: minipass@7.1.2: {} - minisearch@7.1.1: {} + minisearch@7.1.2: {} mitt@3.0.1: {} @@ -2982,11 +3007,11 @@ snapshots: normalize.css@8.0.1: {} - oniguruma-to-es@2.3.0: + oniguruma-to-es@3.1.1: dependencies: emoji-regex-xs: 1.0.0 - regex: 5.1.1 - regex-recursion: 5.1.1 + regex: 6.0.1 + regex-recursion: 6.0.2 open@8.4.2: dependencies: @@ -3033,22 +3058,21 @@ snapshots: preact@10.24.2: {} - preact@10.25.4: {} + preact@10.27.0: {} - property-information@6.5.0: {} + property-information@7.1.0: {} punycode.js@2.3.1: {} quansync@0.2.10: {} - regex-recursion@5.1.1: + regex-recursion@6.0.2: dependencies: - regex: 5.1.1 regex-utilities: 2.3.0 regex-utilities@2.3.0: {} - regex@5.1.1: + regex@6.0.1: dependencies: regex-utilities: 2.3.0 @@ -3082,29 +3106,30 @@ snapshots: rfdc@1.4.1: {} - rollup@4.31.0: + rollup@4.46.2: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.31.0 - '@rollup/rollup-android-arm64': 4.31.0 - '@rollup/rollup-darwin-arm64': 4.31.0 - '@rollup/rollup-darwin-x64': 4.31.0 - '@rollup/rollup-freebsd-arm64': 4.31.0 - '@rollup/rollup-freebsd-x64': 4.31.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.31.0 - '@rollup/rollup-linux-arm-musleabihf': 4.31.0 - '@rollup/rollup-linux-arm64-gnu': 4.31.0 - '@rollup/rollup-linux-arm64-musl': 4.31.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.31.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.31.0 - '@rollup/rollup-linux-riscv64-gnu': 4.31.0 - '@rollup/rollup-linux-s390x-gnu': 4.31.0 - '@rollup/rollup-linux-x64-gnu': 4.31.0 - '@rollup/rollup-linux-x64-musl': 4.31.0 - '@rollup/rollup-win32-arm64-msvc': 4.31.0 - '@rollup/rollup-win32-ia32-msvc': 4.31.0 - '@rollup/rollup-win32-x64-msvc': 4.31.0 + '@rollup/rollup-android-arm-eabi': 4.46.2 + '@rollup/rollup-android-arm64': 4.46.2 + '@rollup/rollup-darwin-arm64': 4.46.2 + '@rollup/rollup-darwin-x64': 4.46.2 + '@rollup/rollup-freebsd-arm64': 4.46.2 + '@rollup/rollup-freebsd-x64': 4.46.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.46.2 + '@rollup/rollup-linux-arm-musleabihf': 4.46.2 + '@rollup/rollup-linux-arm64-gnu': 4.46.2 + '@rollup/rollup-linux-arm64-musl': 4.46.2 + '@rollup/rollup-linux-loongarch64-gnu': 4.46.2 + '@rollup/rollup-linux-ppc64-gnu': 4.46.2 + '@rollup/rollup-linux-riscv64-gnu': 4.46.2 + '@rollup/rollup-linux-riscv64-musl': 4.46.2 + '@rollup/rollup-linux-s390x-gnu': 4.46.2 + '@rollup/rollup-linux-x64-gnu': 4.46.2 + '@rollup/rollup-linux-x64-musl': 4.46.2 + '@rollup/rollup-win32-arm64-msvc': 4.46.2 + '@rollup/rollup-win32-ia32-msvc': 4.46.2 + '@rollup/rollup-win32-x64-msvc': 4.46.2 fsevents: 2.3.3 sade@1.8.1: @@ -3126,15 +3151,15 @@ snapshots: shebang-regex@3.0.0: {} - shiki@2.1.0: + shiki@2.5.0: dependencies: - '@shikijs/core': 2.1.0 - '@shikijs/engine-javascript': 2.1.0 - '@shikijs/engine-oniguruma': 2.1.0 - '@shikijs/langs': 2.1.0 - '@shikijs/themes': 2.1.0 - '@shikijs/types': 2.1.0 - '@shikijs/vscode-textmate': 10.0.1 + '@shikijs/core': 2.5.0 + '@shikijs/engine-javascript': 2.5.0 + '@shikijs/engine-oniguruma': 2.5.0 + '@shikijs/langs': 2.5.0 + '@shikijs/themes': 2.5.0 + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 signal-exit@4.1.0: {} @@ -3165,7 +3190,7 @@ snapshots: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 stringify-entities@4.0.4: dependencies: @@ -3176,9 +3201,9 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.0: + strip-ansi@7.1.2: dependencies: - ansi-regex: 6.1.0 + ansi-regex: 6.2.2 strip-bom-string@1.0.0: {} @@ -3274,7 +3299,7 @@ snapshots: '@types/unist': 2.0.11 unist-util-stringify-position: 3.0.3 - vfile-message@4.0.2: + vfile-message@4.0.3: dependencies: '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 @@ -3289,24 +3314,24 @@ snapshots: vfile@6.0.3: dependencies: '@types/unist': 3.0.3 - vfile-message: 4.0.2 + vfile-message: 4.0.3 - vite@5.4.14(@types/node@22.7.5): + vite@5.4.19(@types/node@22.7.5): dependencies: esbuild: 0.21.5 postcss: 8.5.6 - rollup: 4.31.0 + rollup: 4.46.2 optionalDependencies: '@types/node': 22.7.5 fsevents: 2.3.3 - vitepress-plugin-group-icons@1.5.4(markdown-it@14.1.0)(vite@5.4.14(@types/node@22.7.5)): + vitepress-plugin-group-icons@1.5.4(markdown-it@14.1.0)(vite@5.4.19(@types/node@22.7.5)): dependencies: '@iconify-json/logos': 1.2.4 '@iconify-json/vscode-icons': 1.2.21 '@iconify/utils': 2.3.0 markdown-it: 14.1.0 - vite: 5.4.14(@types/node@22.7.5) + vite: 5.4.19(@types/node@22.7.5) transitivePeerDependencies: - supports-color @@ -3317,25 +3342,25 @@ snapshots: minimatch: 10.0.1 picocolors: 1.1.1 - vitepress@1.6.3(@algolia/client-search@5.20.0)(@types/node@22.7.5)(postcss@8.5.6)(search-insights@2.17.2)(typescript@5.6.3): + vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@22.7.5)(postcss@8.5.6)(search-insights@2.17.2)(typescript@5.6.3): dependencies: '@docsearch/css': 3.8.2 - '@docsearch/js': 3.8.2(@algolia/client-search@5.20.0)(search-insights@2.17.2) - '@iconify-json/simple-icons': 1.2.21 - '@shikijs/core': 2.1.0 - '@shikijs/transformers': 2.1.0 - '@shikijs/types': 2.1.0 + '@docsearch/js': 3.8.2(@algolia/client-search@5.35.0)(search-insights@2.17.2) + '@iconify-json/simple-icons': 1.2.46 + '@shikijs/core': 2.5.0 + '@shikijs/transformers': 2.5.0 + '@shikijs/types': 2.5.0 '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 5.2.1(vite@5.4.14(@types/node@22.7.5))(vue@3.5.22(typescript@5.6.3)) - '@vue/devtools-api': 7.7.0 - '@vue/shared': 3.5.13 - '@vueuse/core': 12.5.0(typescript@5.6.3) - '@vueuse/integrations': 12.5.0(focus-trap@7.6.4)(typescript@5.6.3) - focus-trap: 7.6.4 + '@vitejs/plugin-vue': 5.2.4(vite@5.4.19(@types/node@22.7.5))(vue@3.5.22(typescript@5.6.3)) + '@vue/devtools-api': 7.7.7 + '@vue/shared': 3.5.20 + '@vueuse/core': 12.8.2(typescript@5.6.3) + '@vueuse/integrations': 12.8.2(focus-trap@7.6.5)(typescript@5.6.3) + focus-trap: 7.6.5 mark.js: 8.11.1 - minisearch: 7.1.1 - shiki: 2.1.0 - vite: 5.4.14(@types/node@22.7.5) + minisearch: 7.1.2 + shiki: 2.5.0 + vite: 5.4.19(@types/node@22.7.5) vue: 3.5.22(typescript@5.6.3) optionalDependencies: postcss: 8.5.6 @@ -3401,9 +3426,9 @@ snapshots: wrap-ansi@8.1.0: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 string-width: 5.1.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 zhlint@0.8.2: dependencies: diff --git a/src/about/privacy.md b/src/about/privacy.md index 63484c9e6..1b3677211 100644 --- a/src/about/privacy.md +++ b/src/about/privacy.md @@ -24,7 +24,7 @@ - Fathom Analytics 的隐私政策: -- **搜索功能的使用数据**:我们的搜索功能由 [Algolia DocSearch](https://docsearch.algolia.com/) 驱动,该服务不进行任何形式的用户追踪或指纹识别,也不使用 cookies。Algolia 的服务符合 GPDR、CCPA 标准,并获得 TRUSTe 认证。 +- **搜索功能的使用数据**:我们的搜索功能由 [Algolia DocSearch](https://docsearch.algolia.com/) 驱动,该服务不进行任何形式的用户追踪或指纹识别,也不使用 cookies。Algolia 的服务符合 GDPR、CCPA 标准,并获得 TRUSTe 认证。 - Algolia 的隐私政策: - Algolia 的安全与隐私合规性: diff --git a/src/developers/[developerSlug].md b/src/developers/[developerSlug].md deleted file mode 100644 index 751efb0a0..000000000 --- a/src/developers/[developerSlug].md +++ /dev/null @@ -1,23 +0,0 @@ ---- -page: true -footer: false -title: Vue Developer ---- - - - - diff --git a/src/developers/[developerSlug].paths.ts b/src/developers/[developerSlug].paths.ts deleted file mode 100644 index 9f5d4c196..000000000 --- a/src/developers/[developerSlug].paths.ts +++ /dev/null @@ -1,12 +0,0 @@ -import developers from './developers.json' - -export default { - paths: developers.map((developer) => { - return { - params: { - developerId: developer.id, - developerSlug: developer.slug, - } - } - }) -} diff --git a/src/developers/components/DeveloperCard.vue b/src/developers/components/DeveloperCard.vue deleted file mode 100644 index f052938e5..000000000 --- a/src/developers/components/DeveloperCard.vue +++ /dev/null @@ -1,325 +0,0 @@ - - - - - diff --git a/src/developers/components/DeveloperCompensations.vue b/src/developers/components/DeveloperCompensations.vue deleted file mode 100644 index c7bd41718..000000000 --- a/src/developers/components/DeveloperCompensations.vue +++ /dev/null @@ -1,37 +0,0 @@ - - - - - diff --git a/src/developers/components/DeveloperEducation.vue b/src/developers/components/DeveloperEducation.vue deleted file mode 100644 index f72bcedac..000000000 --- a/src/developers/components/DeveloperEducation.vue +++ /dev/null @@ -1,35 +0,0 @@ - - - - - diff --git a/src/developers/components/DeveloperExperiences.vue b/src/developers/components/DeveloperExperiences.vue deleted file mode 100644 index 6610549ab..000000000 --- a/src/developers/components/DeveloperExperiences.vue +++ /dev/null @@ -1,72 +0,0 @@ - - - - - diff --git a/src/developers/components/DeveloperHero.vue b/src/developers/components/DeveloperHero.vue deleted file mode 100644 index 9263d837b..000000000 --- a/src/developers/components/DeveloperHero.vue +++ /dev/null @@ -1,65 +0,0 @@ - - - - - diff --git a/src/developers/components/DeveloperImage.vue b/src/developers/components/DeveloperImage.vue deleted file mode 100644 index 9cb1aee6c..000000000 --- a/src/developers/components/DeveloperImage.vue +++ /dev/null @@ -1,57 +0,0 @@ - - - - - diff --git a/src/developers/components/DeveloperJoin.vue b/src/developers/components/DeveloperJoin.vue deleted file mode 100644 index 69c329e1e..000000000 --- a/src/developers/components/DeveloperJoin.vue +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/src/developers/components/DeveloperLanding.vue b/src/developers/components/DeveloperLanding.vue deleted file mode 100644 index 35388dd87..000000000 --- a/src/developers/components/DeveloperLanding.vue +++ /dev/null @@ -1,116 +0,0 @@ - - - - - diff --git a/src/developers/components/DeveloperPage.vue b/src/developers/components/DeveloperPage.vue deleted file mode 100644 index e7800de90..000000000 --- a/src/developers/components/DeveloperPage.vue +++ /dev/null @@ -1,340 +0,0 @@ - - - - - diff --git a/src/developers/components/DeveloperPageFooter.vue b/src/developers/components/DeveloperPageFooter.vue deleted file mode 100644 index 585b59a85..000000000 --- a/src/developers/components/DeveloperPageFooter.vue +++ /dev/null @@ -1,86 +0,0 @@ - - - - - diff --git a/src/developers/components/DeveloperProficiencies.vue b/src/developers/components/DeveloperProficiencies.vue deleted file mode 100644 index 65a4e8bec..000000000 --- a/src/developers/components/DeveloperProficiencies.vue +++ /dev/null @@ -1,87 +0,0 @@ - - - - - diff --git a/src/developers/components/DeveloperProfileDiagram.vue b/src/developers/components/DeveloperProfileDiagram.vue deleted file mode 100644 index 7042af24f..000000000 --- a/src/developers/components/DeveloperProfileDiagram.vue +++ /dev/null @@ -1,44 +0,0 @@ - - - - - diff --git a/src/developers/components/type.ts b/src/developers/components/type.ts deleted file mode 100644 index 4271a1976..000000000 --- a/src/developers/components/type.ts +++ /dev/null @@ -1,44 +0,0 @@ -export interface DeveloperExperienceDescription { - isGrouped: boolean - content: string | string[] -} -export interface DeveloperExperience { - id: number - role: string - company: string - startDate: string - endDate: string - period: string - description: DeveloperExperienceDescription[] - skills: string[] -} - -export interface DeveloperEducation { - id: number - degree: string - school: string - startDate: string - endDate: string -} - -export interface DeveloperCompensations { - partTime: string - monthly: string -} - -export interface DeveloperProfile { - id: number - slug: string - name: string - alias: string - description: string[] - proficiencies: string[] - compensations: DeveloperCompensations - location: string - region: string - experiences?: DeveloperExperience[] - education?: DeveloperEducation[] -} - -export interface DeveloperProfiles extends Array { -} diff --git a/src/developers/components/utils.ts b/src/developers/components/utils.ts deleted file mode 100644 index 3528f4826..000000000 --- a/src/developers/components/utils.ts +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Generate a UTM-encoded URL for tracking purposes. - * @param baseUrl - The base URL to append UTM parameters to. - * @param page - The page path to be used for the UTM campaign. - * @param utmSource - The UTM source parameter. - * @param utmMedium - The UTM medium parameter. - * @returns The full URL with UTM parameters. - */ -export function generateUTMUrl( - baseUrl: string, - page: string = '/developers/', - utmSource: string = 'partnership', - utmMedium: string = 'vuejs' -): string { - if (!baseUrl) { - console.warn('Base URL is empty. Returning an empty string.') - return '' - } - - const cleanedPage = page.replace(/\//g, '-').replace(/^-+|-+$/g, '') - - const url = new URL(baseUrl) - url.searchParams.append('utm_source', utmSource) - url.searchParams.append('utm_medium', utmMedium) - url.searchParams.append('utm_campaign', cleanedPage) - - return url.toString() -} - -/** - * Truncate a combined string from an array of text to a specified length. - * @param textArray - The array of strings to combine and truncate. - * @param maxLength - The maximum allowed length of the resulting string. - * @param ellipsis - The string to append to truncated text, defaulting to '...'. - * @returns The truncated string with ellipsis if truncation occurs. - */ -export function truncateTextFromArray( - textArray: string[], - maxLength: number, - ellipsis: string = '...' -): string { - if (textArray.length === 0) return '' - - const combinedText = textArray.join(' ') - - if (combinedText.length <= maxLength) return combinedText - - let truncatedText = combinedText.slice(0, combinedText.lastIndexOf(' ', maxLength)) - - // Remove trailing comma or punctuation - truncatedText = truncatedText.replace(/,\s*$/, '') - - return `${truncatedText}${ellipsis}` -} diff --git a/src/developers/developers.json b/src/developers/developers.json deleted file mode 100644 index 00e1011b3..000000000 --- a/src/developers/developers.json +++ /dev/null @@ -1,2027 +0,0 @@ -[ - { - "id": 1346, - "name": "Stelios Kitziris", - "slug": "stelios-vue-node-fullstack-developer", - "alias": "Stelios", - "description": [ - "Stelios is a fullstack developer with over six years of commercial experience, specializing in the MEVN stack.", - "He is skilled in building scalable software solutions and has successfully led the development of several large-scale and business-critical systems. Also, he is interested in emerging technologies such as Web3 and AI.", - "Stelios holds a Master’s Degree in Computing, equipping him with a thorough understanding of the tech landscape. His perfectionist approach is ideal for projects that benefit from meticulous attention to detail." - ], - "proficiencies": [ - "MongoDB", - "Vue.js", - "Express.js", - "Node.js", - "TypeScript", - "Nuxt.js", - "Laravel", - "PHP", - "PostgreSQL", - "Ionic", - "Cordova", - "MySQL", - "Docker", - "React.js" - ], - "compensations": { - "partTime": "€4,276 /month (20 h per week)", - "monthly": "€7,879 /month (40 h per week)" - }, - "location": "Greece", - "region": "GTM+3", - "experiences": [ - { - "id": 1, - "role": "Senior Frontend Engineer", - "company": "White Hat Gaming", - "startDate": "Dec 2020", - "endDate": "May 2024", - "period": "3 years 5 months", - "description": [ - { - "isGrouped": false, - "content": "White Hat Gaming is a casino game provider company in Malta:" - }, - { - "isGrouped": true, - "content": [ - "Using Vue.js version 3 with composition API for front end development Software Architecture;", - "Planning and Development for in-house Web Apps; Unit testing." - ] - } - ], - "skills": [ - "Vue.js", - "PostgreSQL", - "Node.js", - "Nuxt.js", - "TypeScript" - ] - }, - { - "id": 2, - "role": "Lead Node.js Developer", - "company": "Netguru S.A.", - "startDate": "Dec 2019", - "endDate": "Dec 2020", - "period": "1 year", - "description": [ - { - "isGrouped": true, - "content": [ - "Provided effective troubleshooting and remediation for web applications;", - "Interfaced with clients to identify business requirements;", - "Utilized the latest software development tools, techniques, and approaches. Using Node.js, Express.js, Vue.js, React.js, MongoDB, PostgreSQL. Brought forth a passion and dedication to software development;", - "Utilized the latest software development tools, techniques, and approaches." - ] - } - ], - "skills": [ - "Vue.js", - "MongoDB", - "Node.js", - "Express.js", - "PostgreSQL", - "TypeScript", - "Nuxt.js" - ] - }, - { - "id": 3, - "role": "Lead Software Engineer", - "company": "Draxis Environment S.A.", - "startDate": "Oct 2017", - "endDate": "Dec 2019", - "period": "2 years 2 months", - "description": [ - { - "isGrouped": false, - "content": "Draxis was a company that created applications for European unions, with a focus on agricultural applications:" - }, - { - "isGrouped": true, - "content": [ - "Performed software architecture, planning, and development for web apps, and mobile apps;", - "Designed and developed large-scale ICT systems, funded by international donors, the Horizon 2020 program, and the European Commission." - ] - } - ], - "skills": [ - "PHP", - "Laravel", - "JavaScript", - "React.js", - "Vue.js", - "PostgreSQL", - "TypeScript", - "Node.js", - "Nuxt.js", - "Cordova" - ] - }, - { - "id": 4, - "role": "Full-Stack Developer", - "company": "Archirodon Group N.V.", - "startDate": "Sept 2015", - "endDate": "Aug 2017", - "period": "1 year 11 months", - "description": [ - { - "isGrouped": false, - "content": "Archirodon Group N.V. was a construction company focused on building artificial lakes and skyscrapers." - }, - { - "isGrouped": true, - "content": [ - "Developed web applications;", - "Created, communicated, and managed project plans." - ] - } - ], - "skills": [ - "Laravel", - "JavaScript", - "Angular.js", - "Vue.js" - ] - }, - { - "id": 5, - "role": "Web Developer", - "company": "24 Media Digital Media Group", - "startDate": "Jan 2015", - "endDate": "Aug 2015", - "period": "7 months", - "description": [ - { - "isGrouped": false, - "content": "It was an internship. 24 Media Digital Media Group is a big journal company in Greece." - }, - { - "isGrouped": true, - "content": [ - "Created websites and web applications." - ] - } - ], - "skills": [ - "PHP", - "Laravel", - "Angular.js", - "WordPress" - ] - }, - { - "id": 6, - "role": "Web Developer", - "company": "Shape LTD", - "startDate": "Dec 2013", - "endDate": "Feb 2014", - "period": "2 months", - "description": [ - { - "isGrouped": false, - "content": "It was an ads company, and Stelios was creating websites." - }, - { - "isGrouped": true, - "content": [ - "Developed and supported the website;", - "Performed SEO of the platform." - ] - } - ], - "skills": [ - "PHP", - "WordPress" - ] - } - ], - "education": [ - { - "id": 1, - "degree": "MSc. Computing", - "school": "Cardiff Metropolitan University", - "startDate": "2019", - "endDate": "2022" - }, - { - "id": 2, - "degree": "BSc. Computer Science", - "school": "IEK Akmi", - "startDate": "2014", - "endDate": "2016" - } - ] - }, - { - "id": 2535, - "name": "Tomek Jankowski", - "slug": "tomek-vue-node-fullstack-developer", - "alias": "Tomek", - "description": [ - "Tomek is a fullstack developer with over 17 years of commercial experience. Over the years, he has transitioned from using PHP to mastering modern tech stacks, focusing on Vue.js and Node.js in the last six years. His expertise in these technologies has driven the development and support of robust, high-traffic systems.", - "As the Technical Director at a web development agency for over a decade, he has successfully managed a team of 12 to 17 people and overseen projects for high-profile clients across various sectors.", - "Tomek has consistently received high appreciation from Proxify clients for his outstanding contributions and leadership." - ], - "proficiencies": [ - "Vue.js", - "Node.js", - "MongoDB", - "Nuxt.js", - "PHP", - "MySQL", - "Google Cloud", - "ElasticSearch", - "Redis", - "RabbitMQ", - "Kubernetes", - "TypeScript", - "Express.js", - "Koa", - "Nest.js" - ], - "compensations": { - "partTime": "€4,696 /month (20 h per week)", - "monthly": "€8,551 /month (40 h per week)" - }, - "location": "Poland", - "region": "GTM+3", - "experiences": [ - { - "id": 1, - "role": "Technical Director", - "company": "i3MEDIA LTD", - "startDate": "Jul 2010", - "endDate": "Jun 2022", - "period": "11 years 11 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Feature design, requirements for the dev team.", - "Development of more advanced or mission-critical features.", - "Code reviews + support for the other dev/front-end.", - "Technical meetings with clients.", - "Infrastructure design and maintenance/automation (GCP last 10 years).", - "Time & cost estimates." - ] - }, - { - "isGrouped": false, - "content": "Systems That Built" - }, - { - "isGrouped": true, - "content": [ - "Multi-channel (eBay, Amazon + web front) eCommerce solution with advanced modules to calculate optimal selling prices, complex product definitions & shipping rules, promotions, and integrations with couriers & warehousing solutions.", - "Public sector CMS with content versioning, advanced access control, publishing flows, widget-based content editor, dynamic forms module with manageable logic, validation, and payments; eventually used by councils for most citizen-council interactions (about 80 forms per website, i.e., bus passes, reporting issues, bins).", - "Charity donation platform - used to this date by a number of medium to large charities in the UK, integrated with MS Dynamics and other CRM solutions, also integrated with Gov.UK.", - "Project management - dedicated for media agencies, used internally for about 4 years. Too many features to list, definitely more than Basecamp/TeamWork (leaders at the time).", - "SEO campaign management - dedicated to marketing agencies, integrated into all relevant tools in the world of online marketing, report generation, prospect negotiations, content writing, time tracking, campaign schedule planning, task lists, etc.", - "Many bespoke websites: penny auctions, online poster design, search directories of various sorts, award applications, recruitment...the list goes on." - ] - } - ], - "skills": [ - "PHP", - "Symfony", - "Laravel", - "MySQL", - "JavaScript", - "Vue.js", - "jQuery", - "Node.js", - "Zend", - "Google Cloud" - ] - }, - { - "id": 2, - "role": "Web Developer, then Lead Developer", - "company": "i3MEDIA", - "startDate": "May 2007", - "endDate": "Jul 2010", - "period": "3 years 2 months", - "description": [ - { - "isGrouped": false, - "content": "i3MEDIA was a small agency building websites for local businesses.\n\n" - }, - { - "isGrouped": true, - "content": [ - "Developed the first bespoke CMS, which became the core product, the second version of which was implemented on some nationally recognized websites in 2010." - ] - } - ], - "skills": [ - "PHP", - "MySQL", - "JavaScript", - "Zend" - ] - }, - { - "id": 3, - "role": "Web Developer", - "company": "Freelance", - "startDate": "Mar 2005", - "endDate": "Mar 2007", - "period": "2 years", - "description": [ - { - "isGrouped": false, - "content": "Managed to complete 3 commercial projects." - } - ], - "skills": [ - "PHP", - "MySQL", - "Adobe Flash" - ] - } - ], - "education": [ - { - "id": 1, - "degree": "MSc. Computer Science", - "school": "Faculty of Mathematics and Computer Science, University of Łódź", - "startDate": "2002", - "endDate": "2006" - } - ] - }, - { - "id": 3021, - "name": "Vardan Hayrapetyan", - "slug": "vardan-vue-node-fullstack-developer", - "alias": "Vardan", - "description": [ - "Vardan is a frontend-heavy fullstack developer with expertise in Vue.js, and Node.js. With six years of experience, he has worked on several large-scale web applications, particularly excelling in the real estate sector.", - "He is known for his leadership skills, guiding development teams toward completing high-quality projects that often exceed expectations. His problem-solving and management abilities ensure successful project outcomes.", - "Beyond his technical proficiency, Vardan's analytical skills are enhanced by his Master’s in International Relations, adding a unique perspective to his approach in technology projects." - ], - "proficiencies": [ - "Vue.js", - "React.js", - "Node.js", - "MongoDB", - "TypeScript", - "PostgreSQL", - "SQL", - "Apollo", - "Flask" - ], - "compensations": { - "partTime": "€3,772 /month (20 h per week)", - "monthly": "€6,871 /month (40 h per week)" - }, - "location": "Armenia", - "region": "GTM+4", - "experiences": [ - { - "id": 1, - "role": "Tech Lead", - "company": "Flair.hr", - "startDate": "Feb 2023", - "endDate": "Feb 2024", - "period": "1 year", - "description": [ - { - "isGrouped": true, - "content": [ - "Led the development of the HR Help Desk, Ticketing, Inventory, Documents Management and Performance Reviews projects.", - "Participated in code reviews and provided constructive feedback to colleagues to ensure best practices and high-quality code.", - "Led post-project evaluations to identify areas for improvement and implemented process improvements for future projects." - ] - } - ], - "skills": [ - "React.js", - "Node.js", - "GraphQL", - "Apollo" - ] - }, - { - "id": 2, - "role": "Tech Lead", - "company": "Monday Merch", - "startDate": "Feb 2022", - "endDate": "Dec 2023", - "period": "1 year 10 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Effectively communicated project progress, risks, and issues to stakeholders, ensuring that all parties were informed and aligned throughout the project.", - "Conducted a thorough analysis of existing processes and identified areas for improvement, using this knowledge to develop and implement new processes that better aligned with business needs and objectives.", - "Switched the MVP version by defining the project structure and revisiting the architecture." - ] - } - ], - "skills": [ - "JavaScript", - "Vue.js", - "TypeScript", - "Python", - "Tailwind", - "Team leading" - ] - }, - { - "id": 3, - "role": "Web Developer", - "company": "Remix", - "startDate": "May 2022", - "endDate": "Nov 2022", - "period": "6 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Developed the Remix official website's user interface and core functionalities, ensuring mobile responsiveness;", - "Utilized GitHub Pages to deploy the React application;", - "Implemented a custom section scroller for enhanced user experience." - ] - } - ], - "skills": [ - "JavaScript", - "React.js", - "TypeScript", - "Project management", - "Tailwind" - ] - }, - { - "id": 4, - "role": "Tech Lead", - "company": "Flote", - "startDate": "May 2017", - "endDate": "Nov 2022", - "period": "5 years 6 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Mentored 4 junior frontend developers, enhancing their proficiency in JavaScript and Vue.js;", - "Collaborated closely with the PM to ensure alignment with project plans, timelines, and billing;", - "Developed and constructed dynamic user interfaces within Agile environments for enterprise clients with valuations of up to $3 billion;", - "Participated actively in all development phases, from conceptualization and functional design to detailed implementation, debugging, and software solution deployment;", - "Supervised and coordinated a team of six employees, overseeing multiple critical business processes;", - "Led the design of the project's frontend architecture, leading weekly team meetings and formulating and executing strategies and plans;", - "Provided 24/7 technical support to maintain the seamless operation of the website;", - "Generated wireframes, mockups, and prototypes to communicate design concepts visually;", - "Implemented responsive design techniques, ensuring optimal user interface performance across various devices and screen sizes;", - "Contributed to enhancing the software development by proposing new tools and implementing best practices;", - "Conducted user research and usability testing, gathering feedback and pinpointing areas for improvement;", - "Played a key role in documenting project requirements, technical specifications, and development procedures." - ] - } - ], - "skills": [ - "JavaScript", - "Vue.js", - "TypeScript", - "Project management", - "Design", - "Tailwind", - "Team leading" - ] - }, - { - "id": 5, - "role": "Tech Lead", - "company": "Tenanti", - "startDate": "Dec 2019", - "endDate": "Jun 2021", - "period": "1 year 6 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Supervised a web development team, which included contract and off-shore developers, and held supervisory responsibilities over employees;", - "Established team-wide standards for quality processes and methodologies, ensuring that all applications met the highest quality benchmarks;", - "Provided mentorship and support to fellow team members, functioning as a team leader and in client interactions;", - "Led team meetings and organized task prioritization to ensure the punctual delivery of projects met required standards;", - "Maintained vigilant oversight across all facets of application development to guarantee alignment with quality standards;", - "Created comprehensive documentation for development tasks and Product Requirement Documents (PRD), ensuring clarity for team members and stakeholders;", - "Orchestrated software release planning and execution, encompassing testing, deployment, and documentation processes;", - "Conducted code reviews of team members' work, offering constructive feedback and guidance to enhance code quality." - ] - } - ], - "skills": [ - "JavaScript", - "React.js", - "TypeScript", - "Flask", - "Design", - "Tailwind", - "Team leading" - ] - } - ], - "education": [ - { - "id": 1, - "degree": "MSc. International Relations and Affairs", - "school": "Armenian National Academy of Sciences", - "startDate": "2017", - "endDate": "2019" - }, - { - "id": 2, - "degree": "BSc. Caucasian Studies", - "school": "Yerevan State University", - "startDate": "2013", - "endDate": "2017" - } - ] - }, - { - "id": 2030, - "name": "Emre Demir", - "slug": "emre-vue-frontend-developer", - "alias": "Emre", - "description": [ - "Emre is a talented frontend developer with over six years of commercial experience in IT services & solutions and design. Throughout his career, Emre has worked in various industries, including FinTech, banking, gaming, marketing automation, defense, and cybersecurity.", - "He is the most skilled in frontend programming languages like JS framework Vue.js, React.js, Typescript, and RxJs. Specializing in collaborating with product managers and designers to gather requirements, produce plans and improve designs for usability and functionality.", - "Emre is goal-oriented and brings a strong commitment to collaboration. He uses various web design packages to develop custom-crafted, customer-focused websites and designs." - ], - "proficiencies": [ - "Vue.js", - "JavaScript", - "React.js", - "Node.js", - "Nuxt.js", - "Java", - "AWS", - "Figma", - "Jira", - "REST API" - ], - "compensations": { - "partTime": "€4,452 /month (20 h per week)", - "monthly": "€8,215 /month (40 h per week)" - }, - "location": "Turkey", - "region": "GTM+3", - "experiences": [ - { - "id": 1, - "role": "Senior Front-end Developer", - "company": "A5 Labs", - "startDate": "Mar 2021", - "endDate": "Oct 2022", - "period": "1 year 7 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Worked as a Front End Developer in the Back Office project of the WPTO Poker application. This project is responsible for CRUD operations such as reading BOT Detection results, locking accounts, locking withdrawal/deposit, etc...", - "Responsible for creating GraphQL contracts, and integrating them with the backend (GraphQL, Rest, Websocket).", - "Created UI library using MaterialUI.", - "Scheduled meetings with the designer and product manager to handle edge cases, improvements, and requirements." - ] - } - ], - "skills": [ - "React.js", - "Vue.js", - "RxJs", - "GraphQL", - "Figma", - "API", - "Jira", - "Material-UI", - "REST API" - ] - }, - { - "id": 2, - "role": "Senior Consultant", - "company": "Softtech", - "startDate": "Aug 2020", - "endDate": "Apr 2021", - "period": "8 months", - "description": [ - { - "isGrouped": false, - "content": "Worked as a Senior Consultant in banking and finance projects as a member of international Agile teams - (Delivery Hub - Remote) Vue.js, Amazon AWS" - } - ], - "skills": [ - "Vue.js", - "AWS", - "Agile" - ] - }, - { - "id": 3, - "role": "Senior Front-end Developer", - "company": "Insider", - "startDate": "Feb 2020", - "endDate": "Aug 2020", - "period": "6 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Insider—one platform for individualized, cross-channel experiences—enables enterprise marketers to connect customer data across channels and systems, predict their future behavior with an AI intent engine and individualize customer experiences. Marketers use Insider’s platform to deliver experiences across channels like Web, App, Web Push, Email, SMS, and Messaging Apps (WhatsApp, Facebook Messenger, RCS).", - "Worked as a Lead Senior Frontend Developer, implemented the frontend part of a dashboard using Vue.js." - ] - } - ], - "skills": [ - "Vue.js" - ] - }, - { - "id": 4, - "role": "Expert Software Developer", - "company": "Comodo", - "startDate": "May 2018", - "endDate": "Dec 2019", - "period": "1 year 7 months", - "description": [ - { - "isGrouped": false, - "content": "Worked in DNS-based Web filtering project, Dome Shield, and also worked in sub-projects, Dome Analytics, Comodo Threat Analysis, and NuEDUSec. Worked as a full-stack developer in all of the projects - Dome Shield, Dome Analytics ,Comodo Threat Analysis and NuEDUSec" - } - ], - "skills": [ - "Vue.js", - "MySQL", - "MongoDB", - "AWS", - "Redis", - "Node.js", - "Jenkins", - "AWS SQS", - "AWS Lambda", - "Nuxt.js", - "Angular" - ] - }, - { - "id": 5, - "role": "Software Developer", - "company": "Freelance", - "startDate": "Jul 2017", - "endDate": "May 2018", - "period": "10 months", - "description": [ - { - "isGrouped": true, - "content": [ - "He quit his job because he accepted a master's degree at Berlin Technical University. He started freelance work to make some money before he went to Berlin. Some medical issues occurred, and he canceled his master's degree.", - "Worked in development, design, deployment, and ASO for Android and iOS games using Unity.", - "Created SPA using Vue.js and Node.js for customers that found me on upwork.com" - ] - } - ], - "skills": [ - "Vue.js", - "Node.js", - "Unity" - ] - }, - { - "id": 6, - "role": "Research and Development Engineer", - "company": "Havelsan Teknoloji Radar(HTR)", - "startDate": "Sep 2016", - "endDate": "Jul 2017", - "period": "10 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Designed and implemented Geographic Information System in Java and Android.", - "Built and managed a database system for both Java and Android versions of GIS using PostgreSql and Java.", - "Designed RabbitMQ messaging infrastructure for communicating with all system devices.", - "Integrated Radar, Sonars, Cameras, Cabins, and UPS to GIS using both RabbitMQ and PostgreSQL.", - "Displayed both live and recorded cameras using video encoder and decoder libraries.", - "This project is shown by Havelsan Teknoloji Radar A.Ş. at IDEF17 International Defence Industry Fair in İstanbul." - ] - } - ], - "skills": [ - "PostgreSQL", - "Java", - "Android", - "RabbitMQ" - ] - } - ], - "education": [ - { - "id": 1, - "degree": "BSc. Computer Engineering", - "school": "TOBB Ekonomi ve Teknoloji Üniversitesi", - "startDate": "2011", - "endDate": "2016" - }, - { - "id": 2, - "degree": "BSc. Computer Engineering", - "school": "School name AGH University of Science and Technology (Exchange)", - "startDate": "2013", - "endDate": "2014" - } - ] - }, - { - "id": 5328, - "name": "Santiago Anaya", - "slug": "santiago-anaya-vue-ruby-fullstack-developer", - "alias": "Santiago", - "description": [ - "Santiago is a fullstack engineer with over six years of commercial experience, focusing on frontend development. He is an expert in Vue.js. On the backend, he uses Ruby on Rails and various relational databases, particularly PostgreSQL.", - "He is adept at increasing app performance and enhancing user experience, significantly contributing to every engagement he undertakes. His experience as a Tech and Engineering Lead highlights his leadership capabilities and ability to drive technical initiatives.", - "Santiago's combination of technical expertise, leadership skills, and dedication to improving application performance makes him a valuable asset to any development team." - ], - "proficiencies": [ - "Vue.js", - "PostgreSQL", - "Ruby", - "Ruby on Rails", - "TypeScript", - "SQL", - "Java", - "Vuex", - "Backbone", - "Angular", - "MySQL", - "Vuetify", - "React.js", - "Node.js", - "WordPress", - "MongoDB" - ], - "compensations": { - "partTime": "€3,100 /month (20 h per week)", - "monthly": "€5,695 /month (40 h per week)" - }, - "location": "Argentina", - "region": "GTM-3", - "experiences": [ - { - "id": 1, - "role": "Engineer Manager", - "company": "WISBOO.COM", - "startDate": "Oct 2022", - "endDate": "Aug 2023", - "period": "10 months", - "description": [ - { - "isGrouped": true, - "content": [ - "GROUP TECH LEAD & DEVELOPER ENGINEER MANAGER.", - "APP DEVELOPMENT - WISBOO.COM / A dynamic application tailored for content creators, enabling them to craft and sell courses through personalized websites.", - "Responsible for the roles of Engineer Manager and Tech Lead.", - "Helped the team with contributing significantly to a dedicated working cell focused on a specific component of the app." - ] - } - ], - "skills": [ - "Angular.js", - "React.js", - "Ruby on Rails", - "Bootstrap" - ] - }, - { - "id": 2, - "role": "Full Stack Developer", - "company": "KEEPCON", - "startDate": "Jun 2020", - "endDate": "Apr 2022", - "period": "1 year 10 months", - "description": [ - { - "isGrouped": true, - "content": [ - "APP DEVELOPMENT - KEEPCON.COM / An innovative application for large corporations, aggregating messages from various social media platforms for efficient operator response.", - "Responsible for a strategic migration to Vue.js.", - "Helped the team with enhancing the app's performance and user experience." - ] - } - ], - "skills": [ - "JavaScript", - "Vue.js", - "Ruby on Rails", - "Bootstrap", - "TypeScript", - "Java", - "Backbone" - ] - }, - { - "id": 3, - "role": "Full Stack Developer", - "company": "XUBIO", - "startDate": "Mar 2019", - "endDate": "Dec 2019", - "period": "9 months", - "description": [ - { - "isGrouped": true, - "content": [ - "APP DEVELOPMENT - XUBIO.COM / A specialized application for accountants, designed to manage client or company accounts with features tailored to different countries.", - "Responsible for providing a robust and user-friendly platform for accounting needs." - ] - } - ], - "skills": [ - "MySQL", - "Bootstrap", - "TypeScript", - "Java" - ] - }, - { - "id": 4, - "role": "Full Stack Developer", - "company": "KEEPERS", - "startDate": "Feb 2018", - "endDate": "Mar 2019", - "period": "1 year 1 month", - "description": [ - { - "isGrouped": true, - "content": [ - "WEB APPLICATIONS DEVELOPMENT.", - "Responsible for user-friendly and efficient platforms." - ] - } - ], - "skills": [ - "Vue.js", - "MongoDB", - "Node.js" - ] - } - ], - "education": [ - { - "id": 1, - "degree": "BSc. Systems Engeneering", - "school": "Universidad Technologica Nacinal", - "startDate": "2015", - "endDate": "2021" - } - ] - }, - { - "id": 5697, - "name": "Harshit Sangani", - "slug": "harshit-vue-frontend-developer", - "alias": "Harshit", - "description": [ - "Harshit is a frontend engineer with over six years of commercial experience, specializing in Vue.js. He has been integral to various stages of the software development lifecycle, from ideation to deployment, ensuring top-notch user experiences and scalable applications.", - "His expertise extends to modern frontend technologies and proficiency in DevOps practices. Notably, he has led the development of a CO2 Calculator for cost-splitting emissions and a community application targeting a 15M+ user base.", - "His strong background in building complex, modular frontend solutions and managing deployment cycles and state management tools like Vuex and Apollo further solidifies his capability to deliver high-quality, user-centric applications." - ], - "proficiencies": [ - "Vue.js", - "Nuxt.js", - "TypeScript", - "Flutter", - "Node.js", - "Golang", - "GraphQL", - "React.js", - "JavaScript", - "Tailwind", - "Dart", - "Apollo", - "Vuex", - "Figma", - "Neo4j", - "Vuetify", - "Angular", - "Storybook", - "Laravel", - "React Native" - ], - "compensations": { - "partTime": "€3,688 /month (20 h per week)", - "monthly": "€6,552 /month (40 h per week)" - }, - "location": "India", - "region": "GTM+5:30", - "experiences": [ - { - "id": 1, - "role": "Sr. Software Engineer", - "company": "Purpose Digital Real Estate GmbH", - "startDate": "Nov 2022", - "endDate": "Jun 2024", - "period": "1 year 7 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Single-handedly worked on a CO2 Calculator, which helped easily calculate the cost split for CO2 emission between landlords and tenants.", - "Created the base project setup, leveraging TypeScript to speed up the development in the long run.", - "Generated many modular base components to be used throughout the project.", - "Helped setting up deployment cycles and environments using Vercel." - ] - } - ], - "skills": [ - "Vue.js", - "TypeScript", - "Microservices", - "Tailwind", - "DevOps", - "Angular", - "VSCode", - "Storybook", - "Vuex" - ] - }, - { - "id": 2, - "role": "Founder and Engineering Manager", - "company": "BK Softech", - "startDate": "Jun 2022", - "endDate": "Apr 2024", - "period": "1 year and 10 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Managed a team of 15+ members actively collaborating on non-profit community projects.", - "Connected communities across divided regions on a single platform to perform integrated businesses, find matrimonial matches, engage in advanced discussions, and much more." - ] - } - ], - "skills": [ - "React.js", - "Vue.js", - "TypeScript", - "Node.js", - "Flutter", - "Golang", - "Microservices", - "Figma", - "Tailwind", - "Nuxt.js", - "DevOps", - "Dart", - "Neo4j", - "MVVM", - "Vuetify", - "VSCode", - "Chakra UI", - "Vuex" - ] - }, - { - "id": 3, - "role": "Sr. Software Engineer", - "company": "REO", - "startDate": "Nov 2021", - "endDate": "Oct 2022", - "period": "11 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Worked with a great team to build advanced real-estate brokerage software.", - "Solved many user-centric issues and helped the team transition to TypeScript.", - "Created real-time compilation of GraphQL schemas to be directly used in the Frontend codebase, reducing the related bug reports by ~40% and enhancing Developer Experience." - ] - } - ], - "skills": [ - "Vue.js", - "TypeScript", - "GraphQL", - "Microservices", - "Tailwind", - "Nuxt.js", - "DevOps", - "VSCode", - "Apollo", - "Vuex" - ] - }, - { - "id": 4, - "role": "Co-Founder and Sr. Software Engineer", - "company": "HK Byte", - "startDate": "Nov 2017", - "endDate": "Apr 2022", - "period": "4 years 5 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Fulfilled requirements of 20+ clients.", - "Developed 25+ projects.", - "Helped the team grow with an overall experience in the SDLC process.", - "Managed a team of 8+ members.", - "Provided technical support to two successful startups, uplifting their profits by more than 250% and still counting." - ] - } - ], - "skills": [ - "Laravel", - "JavaScript", - "Vue.js", - "TypeScript", - "Adobe Illustrator", - "Node.js", - "React Native", - "Flutter", - "Figma", - "Tailwind", - "Nuxt.js", - "DevOps", - "Dart", - "Neo4j", - "MVVM", - "VSCode", - "Fusion 360", - "Storybook", - "Vuex" - ] - } - ], - "education": [ - { - "id": 1, - "degree": "BSc. Computer Science", - "school": "Smt. CZMG BCA College", - "startDate": "2015", - "endDate": "2018" - } - ] - }, - { - "id": 3709, - "name": "Kostiantyn Draliuk", - "slug": "kostiantyn-vue-frontend-developer", - "alias": "Kostiantyn", - "description": [ - "Kostiantyn is a frontend developer with eight years of commercial experience. His primary expertise lies in Vue.js, where he has demonstrated exceptional proficiency in building robust and scalable web applications.", - "On top of his development skills, he has a great eye for design and works alongside the designers in his teams using Figma.", - "He has a proven track record of working with Proxify clients, delivering outstanding results with both high output and high code quality." - ], - "proficiencies": [ - "Vue.js", - "Vuex", - "Figma", - "Nuxt.js", - "TypeScript", - "Cypress", - "Svelte", - "JavaScript", - "SvelteKit" - ], - "compensations": { - "partTime": "€4,024 /month (20 h per week)", - "monthly": "€7,375 /month (40 h per week)" - }, - "location": "Ukraine", - "region": "GTM+3", - "experiences": [ - { - "id": 1, - "role": "Software Engineer (Frontend Developer / VueJs Developer / Svelte Developer)", - "company": "DNV GL (Norway, Remote)", - "startDate": "Oct 2021", - "endDate": "Jul 2024", - "period": "2 years 9 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Developed high-performance micro-frontends using cutting-edge technologies like VueJS, Svelte, and TypeScript, resulting in improved application performance and scalability.", - "Played a key role in designing and implementing a micro-frontend applications, component libraries, and routing, which allowed for faster development, easier maintenance, and consistent user experiences across multiple applications.", - "Collaborated with cross-functional teams, including UX/UI designers, backend developers, and product managers, in an Agile environment to ensure smooth communication, timely delivery of features, and overall project success.", - "Actively participated in code reviews, ensuring adherence to best practices and high-quality code standards.", - "Implemented and maintained unit and integration tests, resulting in increased application stability and reduced time spent on bug fixes.", - "Demonstrated commitment to continuous learning and professional development by staying up-to-date with the latest frontend technologies and industry trends, leading to adopting new tools and practices that improved team efficiency and product quality." - ] - } - ], - "skills": [ - "Vue.js", - "TypeScript", - "Svelte" - ] - }, - { - "id": 2, - "role": "Full-stack Developer", - "company": "Freelance", - "startDate": "Dec 2017", - "endDate": "Oct 2021", - "period": "3 years 10 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Successfully delivered a wide range of projects for diverse clients, including the development of websites from scratch, enhancements to existing frontends, and the creation of custom web applications, showcasing adaptability and versatility in addressing varied client needs.", - "Achieved outstanding results in speed optimization, SEO optimization, and quality audits, leading to increased client satisfaction, improved site rankings, and reduced page load times.", - "Expertly utilized a diverse range of frontend and backend technologies, including VueJS, Laravel, NodeJS, AdonisJs, and ExpressJS, to develop tailor-made solutions that met client requirements and exceeded expectations.", - "Developed and maintained component libraries and design systems in VueJS, ensuring a seamless user experience, improved maintainability, and efficient UI development across multiple projects.", - "Collaborated with clients to gather requirements, provide estimates, and offer technical guidance, ensuring clear communication, timely delivery, and alignment with project goals.", - "Effectively managed projects using tools like Jira, Azure, and YouTrack, prioritizing tasks, tracking progress, and providing regular status updates to clients.", - "Proactively identified and addressed performance bottlenecks, security vulnerabilities, and code maintainability issues, resulting in the delivery of robust, secure, and maintainable web applications.", - "Kept up-to-date with the latest industry trends, best practices, and emerging technologies, incorporating them into projects when appropriate to deliver cutting-edge solutions and stay competitive in the market." - ] - } - ], - "skills": [ - "Laravel", - "Vue.js", - "Node.js", - "Express.js", - "Azure" - ] - }, - { - "id": 3, - "role": "Frontend Developer", - "company": "Boboyan (Khmelnytskyy, Ukraine)", - "startDate": "Mar 2016", - "endDate": "Dec 2017", - "period": "1 year 9 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Developed high-quality frontend solutions for Magento and OpenCart e-commerce platforms, consistently meeting project deadlines and exceeding client expectations with visually appealing and user-friendly designs.", - "Leveraged expertise in Git, Docker, and Linux to optimize development workflows, enhance collaboration among team members, and ensure efficient deployment and maintenance of applications.", - "Mentored colleagues in frontend development best practices, fostering a collaborative and supportive team environment that encouraged skill development and knowledge sharing.", - "Acted as a key contributor in the planning and execution of projects, working closely with project managers and other team members to gather requirements, estimate timelines, and allocate resources effectively.", - "Implemented responsive design principles, ensuring seamless and consistent user experiences across various devices and browsers, resulting in increased customer engagement and reduced bounce rates.", - "Proactively identified and resolved performance issues, bugs, and usability concerns, leading to improved site stability, increased conversion rates, and overall enhanced user satisfaction.", - "Participated in regular code reviews, providing constructive feedback and suggestions for improvement, leading to higher quality code and reduced technical debt.", - "Stayed up-to-date with the latest industry trends and frontend technologies, incorporating new tools and best practices to improve team efficiency, product quality, and client satisfaction." - ] - } - ], - "skills": [ - "JavaScript", - "Angular.js", - "Docker", - "Magento", - "Linux", - "eCommerce" - ] - }, - { - "id": 4, - "role": "Frontend Developer", - "company": "Avivi (Khmelnytskyy, Ukraine)", - "startDate": "Feb 2015", - "endDate": "Oct 2016", - "period": "1 year 8 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Crafted visually stunning and responsive frontend designs for a variety of CMS-based websites using Photoshop and Zeplin mockups, resulting in increased client satisfaction and enhanced user experiences.", - "Developed responsive email templates that significantly improved client engagement, open rates, and click-through rates by optimizing for various devices and email clients.", - "Demonstrated proficiency in CSS, HTML, JavaScript, PHP, Angular, and Git to deliver exceptional results, showcasing adaptability and a strong foundation in frontend development technologies.", - "Collaborated with cross-functional teams, including designers, developers, and project managers, to ensure clear communication, efficient workflows, and alignment with project goals.", - "Implemented web accessibility best practices, ensuring that websites were usable and inclusive for a diverse range of users, leading to increased site traffic and improved brand reputation.", - "Actively participated in code reviews and knowledge sharing sessions, contributing to the continuous improvement of the team's coding standards and practices.", - "Worked with various CMS platforms, gaining valuable experience in customizing and extending their functionality to meet unique client requirements.", - "Kept up-to-date with the latest industry trends, best practices, and emerging frontend technologies, applying new knowledge and techniques to projects as appropriate." - ] - } - ], - "skills": [ - "PHP", - "JavaScript", - "Angular" - ] - } - ], - "education": [ - { - "id": 1, - "degree": "BSc. Computer Engineering and Systems Programming", - "school": "Khmelnytskyi National University", - "startDate": "2013", - "endDate": "2017" - } - ] - }, - { - "id": 5022, - "name": "Eduard Miskov", - "slug": "eduard-miskov-vue-frontend-developer", - "alias": "Eduard", - "description": [ - "Eduard is a frontend developer with over seven years of commercial experience. His primary expertise is crafting visually appealing and user-friendly web applications using Vue.js.", - "Eduard's positivity and high motivation set him apart in the fast-evolving field of frontend development. His outstanding code quality highlights his technical expertise and commitment to excellence.", - "He has successfully collaborated with Proxify clients, consistently delivering timely results and maintaining high-quality standards. Eduard's ability to focus on engagement goals and deliver outstanding results makes him a valuable team member." - ], - "proficiencies": [ - "Vue.js", - "Vuex", - "Nuxt.js", - "Vanilla JavaScript", - "TypeScript", - "Jest", - "Figma", - "Vagrant", - "Shopware", - "jQuery", - "Storybook" - ], - "compensations": { - "partTime": "€3,436 /month (20 h per week)", - "monthly": "€6,119 /month (40 h per week)" - }, - "location": "Ukraine", - "region": "GTM+3", - "experiences": [ - { - "id": 1, - "role": "Frontend Developer", - "company": "Avenga", - "startDate": "May 2023", - "endDate": "Aug 2023", - "period": "3 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Led frontend development efforts in creating the online clothing store network for a leading German market player.", - "Focused on designing and implementing user panels, product listing pages, and search functionalities to enhance user experience.", - "Developed reusable components for Storybook, featuring diverse themes, to ensure consistent design elements across all online stores with unique visual identities.", - "Employed Nuxt 3 for its performance optimization and server-side rendering capabilities, enhancing overall website speed and responsiveness.", - "Demonstrated proficiency in Storybook, Vue, Nuxt, and Shopware to meet project requirements effectively." - ] - } - ], - "skills": [ - "JavaScript", - "Vue.js", - "TypeScript", - "Nuxt.js", - "Storybook", - "Shopware" - ] - }, - { - "id": 2, - "role": "Frontend Developer", - "company": "Simplifai", - "startDate": "Feb 2021", - "endDate": "Oct 2022", - "period": "1 year 8 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Developed a web application for a subsidiary of Elop specializing in smart concrete scanning solutions for architectural and bridge building firms.", - "Designed and implemented reusable UI components to enhance the application's usability and maintainability.", - "Utilized TypeScript to write clean and maintainable code, ensuring codebase quality and reliability.", - "Leveraged the Three.js library to create interactive 3D visualizations of concrete structures, enhancing the user experience.", - "Demonstrated expertise in Vue.js, JavaScript, Vuetify, and TypeScript to meet the project's technical requirements effectively.", - "Contributed to the advancement of smart concrete scanning solutions, supporting architectural and bridge-building companies in their projects." - ] - } - ], - "skills": [ - "JavaScript", - "Vue.js", - "TypeScript", - "Vuetify" - ] - }, - { - "id": 3, - "role": "Frontend Developer", - "company": "Recman AS", - "startDate": "May 2020", - "endDate": "Feb 2021", - "period": "9 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Spearheaded the development of a robust web calendar as an integral module within the Recman platform.", - "Employed Vanilla.js extensively to implement core features, including routing, MVC architecture, state management, and view rendering, all crafted from scratch.", - "Designed and built a calendar system akin to Google Calendar, seamlessly integrated into the organization's internal infrastructure.", - "Demonstrated proficiency in Vue.js, JavaScript, and SASS, ensuring the successful completion of the project.", - "Contributed significantly to enhancing the Recman platform's functionality by adding a feature-rich, internally focused web calendar module." - ] - } - ], - "skills": [ - "JavaScript", - "Vue.js" - ] - }, - { - "id": 4, - "role": "Frontend Developer", - "company": "Trinetix", - "startDate": "Jun 2019", - "endDate": "May 2020", - "period": "11 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Played a key role in a substantial analytical project aimed at enhancing the hotel and restaurant industry.", - "Led the migration process of an Angular.js application to Angular, ensuring the seamless transition while preserving the existing design system guidelines.", - "Successfully implemented new features within the Angular framework to enhance the functionality and capabilities of the application.", - "Demonstrated proficiency in Vue.js, JavaScript, SASS, and Angular to meet project requirements effectively.", - "Contributed significantly to the project's success, improving the analytical tools and capabilities available to the hotel and restaurant business." - ] - } - ], - "skills": [ - "JavaScript", - "Angular.js", - "Vue.js", - "Less CSS", - "Angular" - ] - }, - { - "id": 5, - "role": "Medior Frontend Developer", - "company": "Devellar", - "startDate": "Mar 2017", - "endDate": "Jun 2019", - "period": "2 years 3 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Developed custom WordPress templates from scratch within the educational sector, paying close attention to design aesthetics, SEO best practices, and alignment with the business's core values.", - "Demonstrated proficiency in JavaScript, WordPress, PHP, and Angular to successfully create bespoke templates tailored to educational needs.", - "Played a crucial role in enhancing the online presence and functionality of educational websites, catering to both user experience and search engine optimization.", - "Contributed to the growth and success of educational institutions by providing them with tailored WordPress solutions that aligned with their unique requirements and goals." - ] - } - ], - "skills": [ - "PHP", - "MySQL", - "JavaScript", - "HTML", - "WordPress", - "SQL", - "Angular", - "SASS" - ] - }, - { - "id": 6, - "role": "Medior Frontend Developer", - "company": "Webkitchen", - "startDate": "Jun 2016", - "endDate": "Jan 2017", - "period": "7 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Crafted customized templates to meet clients' unique design and functionality demands during my tenure at a web agency.", - "Delivered tailored solutions for various projects, including basic corporate websites and expansive online cosmetics stores, all built from the ground up.", - "Demonstrated expertise in WordPress, PHP, and MySQL to develop templates that catered to the specific needs and goals of each client.", - "Played a pivotal role in the agency's ability to provide clients with highly individualized web solutions, contributing to the success of various online ventures." - ] - } - ], - "skills": [ - "PHP", - "MySQL", - "HTML", - "WordPress", - "SQL", - "SASS" - ] - }, - { - "id": 7, - "role": "Web Development Mentor", - "company": "Education US", - "startDate": "Nov 2014", - "endDate": "Jun 2016", - "period": "1 year 7 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Offered valuable guidance and mentorship to students, focusing on contemporary website creation techniques, Adobe Creative Cloud (CC) tools, and navigating the job search process.", - "Equipped students with the necessary skills and knowledge to excel in website development within the dynamic IT industry.", - "Facilitated students' journeys toward securing their first positions in the IT field by providing essential insights and practical advice.", - "Acted as a supportive and knowledgeable resource for aspiring professionals, contributing to their career development and growth." - ] - } - ], - "skills": [ - "jQuery", - "Adobe Photoshop" - ] - }, - { - "id": 8, - "role": "Web Designer", - "company": "Slicemix", - "startDate": "Mar 2014", - "endDate": "Aug 2014", - "period": "5 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Held the position of lead web designer, with primary responsibilities encompassing the creation of visually captivating and impactful promotional websites.", - "Designed banners and engaging printed materials tailored to clients' distinct requirements within our digital marketing agency.", - "Leveraged skills in Adobe Photoshop and Adobe Illustrator to ensure the delivery of high-quality design work that effectively communicated our clients' messages and brand identities.", - "Played a pivotal role in enhancing the online presence and marketing collateral of various clients, contributing to their success in the digital landscape." - ] - } - ], - "skills": [ - "Adobe Photoshop", - "Adobe Illustrator" - ] - }, - { - "id": 9, - "role": "Web Designer", - "company": "DigitalDealerz", - "startDate": "Feb 2013", - "endDate": "Jan 2014", - "period": "11 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Designed and developed commercial websites and promotional materials catering to the needs of small to mid-sized businesses.", - "Prioritized user-friendliness, responsiveness, and visual appeal in all web projects to enhance the online presence and customer engagement for clients.", - "Generated blueprints and wireframes for websites, establishing clear and concise plans before the development phase.", - "Ensured that the end products were not only interactive but also engaging for users, enhancing the overall user experience and client satisfaction." - ] - } - ], - "skills": [ - "Adobe Photoshop", - "Adobe Illustrator", - "AutoCAD" - ] - }, - { - "id": 10, - "role": "Junior PHP Developer", - "company": "Metr&co", - "startDate": "Jan 2012", - "endDate": "Jan 2013", - "period": "1 year", - "description": [ - { - "isGrouped": true, - "content": [ - "Actively explored and applied Drupal's API to enhance the functionality and interactivity of web applications, contributing to the mastery of this versatile content management system.", - "Acquired knowledge and expertise in leveraging Drupal's capabilities to build dynamic and feature-rich web applications.", - "Kept abreast of the latest trends and best practices in Drupal web development, ensuring the ability to create robust and efficient solutions." - ] - } - ], - "skills": [ - "PHP", - "MySQL", - "SQL", - "Drupal" - ] - } - ], - "education": [ - { - "id": 1, - "degree": "BSc. Computer Science and Information Technologies", - "school": "National University of Food Technologies", - "startDate": "2014", - "endDate": "2019" - }, - { - "id": 2, - "degree": "Sc. Software Development", - "school": "Kyiv Optical and Mechanical College", - "startDate": "2010", - "endDate": "2014" - } - ] - }, - { - "id": 4290, - "name": "Nicolas Tellez", - "slug": "nicolas-vue-php-fullstack-developer", - "alias": "Nicolas", - "description": [ - "Nicolas is a Fullstack and Integrations Developer with seven years of experience working in industries like education, government, transportation, and consulting in both Argentina and the US. He has gained strong technical skills and knows how to adapt to different business needs.", - "Along with his technical work, Nicolas has been responsible for technical hiring, choosing staff, and helping with internal technical training. His leadership has helped build solid development teams and improve technical knowledge within the companies he's worked for.", - "Nicolas is skilled in integrating systems with Hubspot and Mercadopago using APIs and webhooks. He has also worked with Mulesoft products to create solutions for both on-premise and cloud-based systems. He is experienced in designing data integration solutions and building Firebase-based projects." - ], - "proficiencies": [ - "Vue.js", - "JavaScript", - "Nuxt.js", - "PHP", - "Laravel", - "Node.js", - "MySQL", - "Firebase", - "MongoDB", - "Express.js", - "Java" - ], - "compensations": { - "partTime": "€4,452 /month (20 h per week)", - "monthly": "€8,215 /month (40 h per week)" - }, - "location": "Argentina", - "region": "GTM-3", - "experiences": [ - { - "id": 1, - "role": "Principal Technical Engineer", - "company": "MuleSoft", - "startDate": "Jul 2020", - "endDate": "May 2024", - "period": "3 years and 10 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Customer-facing position providing solutions on Mulesoft products and services for integrated solutions for on-premise and cloud.", - "Member of the Core Runtime team." - ] - } - ], - "skills": [ - "JavaScript", - "Docker", - "Java", - "Microservices", - "Maven", - "Eclipse", - "Bash", - "Data Engineering", - "Linux", - "API", - "IntelliJ", - "Load testing", - "Apache HTTP Server", - "AWS EC2" - ] - }, - { - "id": 2, - "role": "Software Engineer", - "company": "Fundacion Conocimiento Abierto", - "startDate": "Jan 2018", - "endDate": "Jun 2024", - "period": "6 years 5 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Design and development of communication solutions for the organization.", - "Involved and responsible for the delivery process as a sysadmin but also self-carry projects as a Full Stack developer." - ] - } - ], - "skills": [ - "Vue.js", - "Laravel", - "Node.js", - "SQL", - "Google Cloud", - "Product Development", - "Linux", - "Vuetify", - "Unix", - "REST API", - "Serverless", - "Vuex" - ] - }, - { - "id": 3, - "role": "NodeJS Backend Developer", - "company": "ProMujer", - "startDate": "Jun 2022", - "endDate": "Mar 2023", - "period": "9 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Backend development for Edutech using typescript, NestJs, typeORM.", - "Worked on the Integration with Hubspot and Mercadopago by API and webhooks." - ] - } - ], - "skills": [ - "JavaScript", - "TypeScript", - "Node.js", - "Nest.js", - "REST API", - "eCommerce" - ] - }, - { - "id": 4, - "role": "Fullstack Developer", - "company": "El Patronato en Casa", - "startDate": "Feb 2020", - "endDate": "Dec 2020", - "period": "10 months", - "description": [ - { - "isGrouped": false, - "content": "Development of an educational site, ruins VueJs and Nuxt, based on the Firebase suite (Auth, Firestore, Storage, Hosting, and Functions) and custom integration with Stripe and Vimeo." - } - ], - "skills": [ - "JavaScript", - "Vue.js", - "Bootstrap", - "Node.js", - "Express.js", - "Google Cloud", - "Firebase", - "Nuxt.js", - "Vuex" - ] - }, - { - "id": 5, - "role": "Development/Operations Lead", - "company": "Raxar", - "startDate": "Sep 2019", - "endDate": "Jul 2020", - "period": "10 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Development and infrastructure lead of the company. Involved and responsible for the delivery process.", - "Responsible for technical hiring and staff selection. Self-carried critical projects as Full Stack developer. (PHP/Laravel/JS/Vue) Internal technical training." - ] - } - ], - "skills": [ - "PHP", - "Laravel", - "JavaScript", - "Vue.js", - "Docker", - "NGINX", - "Zend", - "Operational management", - "Google Cloud", - "Firebase", - "Nuxt.js", - "Jira", - "HTML / CSS", - "Apache HTTP Server", - "Electron" - ] - }, - { - "id": 6, - "role": "Product Owner / FullStack Developer", - "company": "National Ministry of culture", - "startDate": "Jun 2018", - "endDate": "Jul 2019", - "period": "1 year 1 month", - "description": [ - { - "isGrouped": false, - "content": "Led the development of a system to enable artists to submit information and data to run contests for not only visibility/exposure but also potentially earn financial support from the government." - } - ], - "skills": [ - "PHP", - "Laravel", - "MySQL", - "Vue.js", - "SQL", - "Nuxt.js", - "Product Development", - "REST API", - "Vuex" - ] - }, - { - "id": 7, - "role": "Independent Information Technology Consultant", - "company": "IT Consultant", - "startDate": "Jun 2016", - "endDate": "Jul 2019", - "period": "3 years 1 month", - "description": [ - { - "isGrouped": true, - "content": [ - "Custom application and product development as a fullstack developer using PHP/Laravel, VueJS, and mongoDB/MySQL.", - "Unix sysadmin working with AWS/Azure/GoogleCloud. Provided project management services. Infrastructure support and strategy planning Unix Security assessment and hardening." - ] - } - ], - "skills": [ - "PHP", - "Laravel", - "JavaScript", - "Vue.js", - "MongoDB", - "AWS", - "Google Cloud", - "Linux", - "Vuetify", - "Azure Cloud", - "REST API", - "HTML / CSS", - "Apache HTTP Server", - "Electron", - "Vuex" - ] - }, - { - "id": 8, - "role": "Senior Web Middleware Specialist", - "company": "Hewlett Packard", - "startDate": "Jun 2007", - "endDate": "Oct 2016", - "period": "9 years 4 months", - "description": [ - { - "isGrouped": true, - "content": [ - "L3/L4 support the most widely used web-serving product types and brands. Performed the environment build-outs.", - "Provided coordination, assessment, and fixes for PCI security compliance rules involving access control, data protection, encryption, and best practices to allow systems to handle credit card transactions.", - "In charge of the offshore’s web middleware team to act as work queue manager and region SME. Management of thousands of SSL certificates across many platforms." - ] - } - ], - "skills": [ - "Java", - "Project management", - "Google Cloud", - "Perl", - "Linux", - "Unix", - "Load testing", - "REST API", - "Apache HTTP Server", - "Tomcat", - "Jakarta", - "Team leading" - ] - } - ], - "education": [ - { - "id": 1, - "degree": "Sc. Certified MuleSoft Developer", - "school": "SalesForce", - "startDate": "2020", - "endDate": "2020" - }, - { - "id": 2, - "degree": "Sc. Certified Websphere Network Deployment Administration", - "school": "IBM", - "startDate": "2004", - "endDate": "2004" - } - ] - }, - { - "id": 1020, - "name": "Abdusaid Umarov", - "slug": "abdusaid-html-css-vue-typescript-frontend-dev", - "alias": "Abdusaid", - "intro": "Abdusaid is a Senior Frontend Developer with over six years of experience, where he’s made a name for himself in Vue.js and Nuxt.js. His skill in Vue.js is top-notch, proven by the perfect 100% score he achieved on the Proxify test.", - "description": [ - "Though he focuses on frontend work, Abdusaid isn’t just limited to that—he’s also jumped in to help with backend tasks using Laravel.", - "His experience across identity management, fintech, eCommerce, and other tech sectors shows his ability to adapt and thrive in different environments.", - "What makes Abdusaid stand out is not just his technical skills but his knack for understanding the bigger picture and delivering work that truly meets the needs of each project he takes on." - ], - "proficiencies": [ - "Vue.js", - "Vuex", - "Nuxt.js", - "Laravel", - "Java", - "Tailwind", - "Jest", - "React.js", - "Jenkins", - "Storybook", - "SonarQube", - "Docker" - ], - "compensations": { - "partTime": "€2,764 /month (20 h per week)", - "monthly": "€5,359 /month (40 h per week)" - }, - "location": "Uzbekistan", - "region": "GTM+5", - "experiences": [ - { - "id": 1, - "role": "Senior Frontend Developer", - "company": "Identity Blitz", - "startDate": "Sept 2023", - "endDate": "Jul 2024", - "period": "10 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Got experience creating custom web plugins: i18n localization plugin and automated docker runner plugin using Vite.", - "Configured project settings with prettierrc and vite.config, postcss.config, tsup.config, ts.config.", - "Developed Tablet and Mobile views by applying PostCSS." - ] - } - ], - "skills": [ - "Vue.js", - "Docker", - "TypeScript", - "SCSS" - ] - }, - { - "id": 2, - "role": "Senior Frontend Developer", - "company": "Uzum", - "startDate": "Jan 2023", - "endDate": "Sept 2023", - "period": "8 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Got experience in building web apps using Modular Architecture.", - "Took full responsibility for complex tasks (such as authentication and fixing merge conflicts).", - "Got experience in using Turbo repo in projects that are based on mono repo architecture.", - "Did releases into the PROD environment.", - "Integrated localization using i18n-vue package." - ] - } - ], - "skills": [ - "Laravel", - "MySQL", - "JavaScript", - "Vue.js", - "TypeScript", - "Tailwind" - ] - }, - { - "id": 3, - "role": "Software Engineer", - "company": "EPAM Systems", - "startDate": "Sept 2021", - "endDate": "May 2023", - "period": "1 year 8 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Implemented new features using Vue.js/NUXT.js.", - "Conducted Code reviews.", - "Bug fixing.", - "Refactored the code to make it cleaner.", - "Made documented reports about commits using Gitlab's MergeRequests and Spikes.", - "Learnt new Prismic CMS.", - "Got experience with Magnolia CMS to work with the classic version of the project.", - "Worked in a Scrum environment and understood all of the features and terminologies of the methodology, including sprints, sprint plannings, retrospectives, and daily meetings/Stand-Ups." - ] - } - ], - "skills": [ - "MySQL", - "JavaScript", - "Vue.js", - "ES5/ES6", - "Jenkins", - "Nuxt.js", - "SonarQube" - ] - }, - { - "id": 4, - "role": "Frontend Developer", - "company": "Genesis-Innovation LLC. (Uzcard)", - "startDate": "Jan 2021", - "endDate": "Dec 2021", - "period": "11 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Created components/UI according to Figma design.", - "Connected APIs to UI using Axios.", - "Provided token authorizations, silent authentication method, and refreshed token/ JWT token.", - "Connected charts using Apex charts.", - "Created Vue Routers.", - "Used i18n internal language localization.", - "Widely used 'Vuex' module-based structure.", - "Created Designs using Element UI." - ] - } - ], - "skills": [ - "JavaScript", - "Vue.js", - "UI", - "Vuex" - ] - }, - { - "id": 5, - "role": "Web Developer", - "company": "Fido-Biznes LLC", - "startDate": "Jun 2019", - "endDate": "Jun 2021", - "period": "2 years", - "description": [ - { - "isGrouped": true, - "content": [ - "Worked in a team to build the Uzbekistan Banking System.", - "Improved System’s performance, stability Querying, indexing, writing procedures, and functions to make the backend section of the system.", - "Created sophisticated JSP pages with JavaScript language for the frontend logic of the banking system.", - "Made Java services for exchanging information with the Government Custom Center in XML and JSON formats with key exchange techniques for providing such potential REST APIs." - ] - } - ], - "skills": [ - "MySQL", - "JavaScript", - "Java", - "SQL", - "Oracle", - "JSON", - "PL/SQL", - "XML" - ] - }, - { - "id": 6, - "role": "Web Developer", - "company": "Artel", - "startDate": "Sept 2018", - "endDate": "Jan 2020", - "period": "1 year 4 months", - "description": [ - { - "isGrouped": true, - "content": [ - "Worked in a team to build a real-world system for the technology industry.", - "Improved UI/frontend interface.", - "Built an Analytical section of the System with graphic analysis, according to the industry's provided Excel sheets, using logic to extract data.", - "Implemented frontend structures/components of the Internal Document Exchange System." - ] - } - ], - "skills": [ - "JavaScript", - "Vue.js", - "ES5/ES6", - "SCSS", - "Vuex" - ] - } - ], - "education": [ - { - "id": 1, - "degree": "BSc. Computer Science and Software Engineering", - "school": "INHA University in Tashkent", - "startDate": "2015", - "endDate": "2019" - } - ] - } -] diff --git a/src/developers/index.md b/src/developers/index.md deleted file mode 100644 index 234625377..000000000 --- a/src/developers/index.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -page: true -footer: false -title: Vue Developers ---- - - - - diff --git a/src/developers/partnerConfig.js b/src/developers/partnerConfig.js deleted file mode 100644 index 4f6c59559..000000000 --- a/src/developers/partnerConfig.js +++ /dev/null @@ -1,75 +0,0 @@ -import partnerData from '../partners/partners.json' - -const partnerName = 'Proxify' -const partner = partnerData.find(partner => partner.name === partnerName) - -const websiteLabel = 'proxify.io' -const websiteUrl = 'https://proxify.io/' -const applyUrl = 'https://career.proxify.io/apply' -const hireUrl = 'https://proxify.io/hire-vuejs' -const vueArticleUrl = 'https://proxify.io/hire-vue-developers' -const imageStorageUrl = 'https://res.cloudinary.com/proxify-io/image/upload' - -const partnerConfig = { - // Partner information - partnerName: partner?.name, - logo: partner?.logo, - flipLogo: partner?.flipLogo || false, - - // Partner website - websiteUrl: websiteUrl, - hireUsButtonUrl: hireUrl, - - // Image storage URL - imageStorageUrl: imageStorageUrl, - - // Hero Section - pageHeroBanner: { - title: '为你的团队寻找顶级的 Vue.js 开发者', - description1: '访问可用于你的下一个项目的经过认证的 Vue.js 开发者', - description2: 'Proxify 负责筛选过程,以确保顶级的质量和可靠性', - hireButton: { - url: hireUrl, - label: '立即寻找 Vue.js 开发者' - }, - footer: '在不到 48 小时内与顶级 Vue.js 开发者匹配' - }, - - // Hero Section - pageJoinSection: { - title: '成为一名注册开发者', - description: '获得一个长期的兼职或全职职位,适合正在寻找 Vue.js 开发者的公司', - applyButton: { - url: applyUrl, - label: '申请加入' - } - }, - - // Footer Configuration - pageFooter: { - text: `This highly vetted developer is brought to you by Vue’s partner:`, - email: 'vue@proxify.io', - phone: '+44 20 4614 2667', - websiteVueLink: vueArticleUrl, - websiteVueLabel: websiteLabel + '/hire-vue-developers' - }, - - // Diagram sections - profileDiagram: { - title: 'Candidate profile', - prependText: 'How our developers score in the parameters that correlate best with future success in the role.' - }, - - scoreDiagram: { - title: 'Engineering excellence score', - prependText: 'The practical score range is 0 to 300. This is the distribution of scores for all evaluated Vue.js developers, and here’s where your candidate scored.', - appendText: 'Data from 3,661 evaluated Vue.js developers and 38,008 applicants.' - }, - - // Proficiency Section - proficiencies: { - skillsPerCard: 5 - } -} - -export default partnerConfig diff --git a/src/ecosystem/themes/themes.json b/src/ecosystem/themes/themes.json index 225d94653..2371c8cc9 100644 --- a/src/ecosystem/themes/themes.json +++ b/src/ecosystem/themes/themes.json @@ -1,20 +1,13 @@ [ { "name": "Nuxt UI", - "description": "[Nuxt UI](https://ui.nuxt.com) is a free and open-source UI library for Vue.js. It is built on top of Tailwind CSS and includes a variety of components and utilities that can be used to quickly build modern, responsive web applications.", - "seeMoreUrl": "https://ui.nuxt.com/pro", + "description": "[Nuxt UI](https://ui.nuxt.com/) is an intuitive, open-source UI library for Vue and Nuxt applications. Built with Tailwind CSS and Reka UI, it provides 100+ beautifully crafted, accessible components with a flexible CSS-first design system.", + "seeMoreUrl": "https://ui.nuxt.com", "products": [ - { - "name": "UI Pro Components", - "price": 199, - "description": "Premium Vue components, composables, and utils based on Nuxt UI.", - "url": "https://ui.nuxt.com/pro", - "image": "https://res.cloudinary.com/nuxt/image/upload/v1742036103/nuxt-ui/nuxt-ui-pro-og-image_vzvwge.png" - }, { "name": "Dashboard", - "price": 199, - "description": "Vue Dashboard Template made with Nuxt UI Pro.", + "price": 0, + "description": "Professional Vue Dashboard Template showcasing Nuxt UI capabilities.", "url": "https://vue-dashboard-template.nuxt.dev", "image": "https://res.cloudinary.com/nuxt/image/upload/v1742036101/nuxt-ui/nuxt-ui-dashboard-social-card_kpeysq.png" } @@ -279,14 +272,14 @@ }, { "name": "Berry Vue3 Admin Dashboard", - "price": 49, + "price": 59, "description": "Discover our visually captivating Vue 3 Dashboard Theme!", "url": "https://codedthemes.com/item/berry-vue-admin-dashboard/?ref=evan.vuejs", "image": "https://org-public-assets.s3.us-west-2.amazonaws.com/Banners/Berry-pro-vue.png" }, { "name": "Mantis Vue3 Admin Dashboard", - "price": 49, + "price": 59, "description": "Simple yet rebust to start any development with latest VueJs and Vuetify", "url": "https://codedthemes.com/item/mantis-vue-admin-template/?ref=evan.vuejs", "image": "https://org-public-assets.s3.us-west-2.amazonaws.com/Banners/Mantis-pro-vue.png" @@ -306,11 +299,18 @@ "image": "https://org-public-assets.s3.us-west-2.amazonaws.com/Banners/Able+pro-free-vue.png" }, { - "name": "Able Pro Vue3 + Vuetify Dashboard", - "price": 11, - "description": "Vue3 + Vite + Vuetify + Typescript", - "url": "https://codedthemes.com/item/able-pro-vuejs-admin-dashboard/?ref=evan.vuejs", - "image": "https://org-public-assets.s3.us-west-2.amazonaws.com/Banners/Able+pro-pro-vue.png" + "name": "Free Datta Able Vue Admin Template", + "price": 0, + "description": "Free & Open Source VueJs Bootstrap Admin Template", + "url": "https://codedthemes.com/item/datta-able-free-vue-admin-template/?ref=evan.vuejs", + "image": "https://org-public-assets.s3.us-west-2.amazonaws.com/Banners/Datta+able-free-vue.png" + }, + { + "name": "Datta Able Vue + Bootstrap Admin Template", + "price": 59, + "description": "Premium VueJs + Bootstrap + Vite + Typescript Admin Template", + "url": "https://codedthemes.com/item/datta-able-vue-admin-template/?ref=evan.vuejs", + "image": "https://org-public-assets.s3.us-west-2.amazonaws.com/Banners/Datta+able-pro-vue.png" } ] }, diff --git a/src/examples/examples.data.ts b/src/examples/examples.data.ts index ea028b52c..befd1d2c6 100644 --- a/src/examples/examples.data.ts +++ b/src/examples/examples.data.ts @@ -1,6 +1,6 @@ import fs from 'fs' import path from 'path' -import { ExampleData } from './utils' +import type { ExampleData } from './utils' export declare const data: Record diff --git a/src/guide/components/provide-inject.md b/src/guide/components/provide-inject.md index 454011c4b..282dc950a 100644 --- a/src/guide/components/provide-inject.md +++ b/src/guide/components/provide-inject.md @@ -323,7 +323,7 @@ export default { ## 使用 Symbol 作注入名 {#working-with-symbol-keys} -至此,我们已经了解了如何使用字符串作为注入名。但如果你正在构建大型的应用,包含非常多的依赖提供,或者你正在编写提供给其他开发者使用的组件库,建议最好使用 Symbol 来作为注入名以避免潜在的冲突。 +至此,我们已经了解了如何使用字符串作为注入名。但如果你正在构建大型的应用,包含非常多的依赖提供,或者你正在编写提供给其他开发者使用的组件库,建议最好使用 [Symbol](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Symbol) 来作为注入名以避免潜在的冲突。 我们通常推荐在一个单独的文件中导出这些注入名 Symbol: diff --git a/src/guide/essentials/forms.md b/src/guide/essentials/forms.md index 78ac2107e..db04d7bb1 100644 --- a/src/guide/essentials/forms.md +++ b/src/guide/essentials/forms.md @@ -11,6 +11,12 @@ const checkedNames = ref([]) const picked = ref('') const selected = ref('') const multiSelected = ref([]) +const dynamicSelected = ref('A') +const options = ref([ + { text: 'One', value: 'A' }, + { text: 'Two', value: 'B' }, + { text: 'Three', value: 'C' } +]) # 表单输入绑定 {#form-input-bindings} @@ -332,23 +338,32 @@ export default { ```vue-html +
Selected: {{ selected }}
+ - -
Selected: {{ selected }}
``` +
+
Selected: {{ dynamicSelected }}
+ + +
-[在演练场中尝试一下](https://play.vuejs.org/#eNplkMFugzAQRH9l5YtbKYU7IpFoP6CH9lb3EMGiWgLbMguthPzvXduEJMqNYUazb7yKxrlimVFUop5arx3BhDS7kzJ6dNYTrOCxhwC9tyNIjkpllGmtmWJ0wJawg2MMPclGPl9N60jzx+Z9KQPcRfhHFch3g/IAy3mYkVUjIRzu/M9fe+O/Pvo/Hm8b3jihzDdfr8s8gwewIBzdcCZkBVBnXFheRtvhcFTiwq9ECnAkQ3Okt54Dm9TmskYJqNLR3SyS3BsYct3CRYSFwGCpusx/M0qZTydKRXWnl9PHBlPFhv1lQ6jL6MZl+xoR/gFjPZTD) +[在演练场中尝试一下](https://play.vuejs.org/#eNp9kj9vwjAQxb/KyUtaiYahGwpIgBjaoVSFre6AkguEOnZkOwEpynfv2flDqlZkyt37+fye7ZotiyKsSmQzFplYZ4UFg7YsFlxmeaG0hRo0ptBAqlUOAaEBl1zGShqHCowtJjB30EOwDB5voipsRj+d9skl0CyLVzuDYCsxmEB1ECVStQygmfzS9xc10ld/9ZPG8YQ1EVx+0e7RtI1BAaiwmBfiYNFVNkqyarHrLM+grm/+myaaOtUtAojaPlRPuUpQzDnrQc4IAfqiNh0hqdIEdGUm+9icwcy7G8TQl8MESlN3cOhSkYdu9LTteo7i+K2piKZDGjZh1tApp9kxPBsl6fZqR3MWq7zIBOpt74JytmM5OwihLq++Z3WJ/kT9mhPG3//0z+bqepy9azSoK/I+aPagj2hbebN7I/8jkU6tFETfET/QKFE6jy22KmVCtkecd/vi32Amj3uzuVqUpg/ljDqyfRec0btc34l+s/scPvt1XDas+QENov3B)
-[在演练场中尝试一下](https://play.vuejs.org/#eNp1kMFqxCAQhl9l8JIWtsk92IVtH6CH9lZ7COssDbgqZpJdCHn3nWiUXBZE/Mdvxv93Fifv62lE0Qo5nEPv6ags3r0LBBov3WgIZmUBdEfdy2s6AwSkMdisAAY0eCbULVSn6pCrzlPv7NDCb64AzEB4J+a+LFYHmDozYuyCpfTtqJ+b21Efz6j/gPtpn8xl7C8douaNl2xKUhaEV286QlYAMgWB6e3qNJp3JXIyJSLASErFyMUFBjbZ2xxXCWijkXJZR1kmsPF5g+s1ACybWdmkarLSpKejS0VS99Pxu3wzT8jOuF026+2arKQRywOBGJfE) +[在演练场中尝试一下](https://play.vuejs.org/#eNp9ksFuwjAMhl/FyoVNYuWwG+omAeKwHcY0uC07VK2BspBUiVuQKt59Tkq6Hjakqortz87/J2nFrKqSpkYxFanLbVnRs9R4rowlKHCb1YqglRqgyCi7u+/WABaptjpGAA4V5oTFFEaz0ThmTUWl0W4KnzED0ALhmZhbaRyNoclUjaELLn3fgNqczICa/0ftLQ6nLZiL2Fe3CDH/+EsnvVMOCI+Vygh9RGlRNs/r3kzb9s7gckknvuqbANIuD83D0RSonqSIoBSM+B3Tzj4jW2MZuIaljuciBUyD4r6YhLCfwA7bK5x4p6zhOnrSZQPHdsLWHKST3o0YC3K50dtylxyc0XzB4bakyM2xKhXaVVTBPruxUmRKmdNryJGt8XrW3LPH/PuP/MGdfU6Kd4sObcPa+xpldofUlZfrN9Y/KPKp1YrpG8UPdEbVXmOHzWtdsOwBF9S+HP1jLfVu45ZnQu2iKS80XHrgpeBXvrhh/VfuY/IYH4u4/AD+8ADR)
diff --git a/src/guide/extras/ways-of-using-vue.md b/src/guide/extras/ways-of-using-vue.md index a0e56ef13..a67714772 100644 --- a/src/guide/extras/ways-of-using-vue.md +++ b/src/guide/extras/ways-of-using-vue.md @@ -6,7 +6,7 @@ Vue 可以以一个单独 JS 文件的形式使用,无需构建步骤!如果你的后端框架已经渲染了大部分的 HTML,或者你的前端逻辑并不复杂,不需要构建步骤,这是最简单的使用 Vue 的方式。在这些场景中你可以将 Vue 看作一个更加声明式的 jQuery 替代品。 -Vue 也提供了另一个更适用于此类无构建步骤场景的版本 [petite-vue](https://github.com/vuejs/petite-vue)。它为渐进式增强已有的 HTML 作了特别的优化,功能更加精简,十分轻量。 +我们曾提供过一个名为 [petite-vue](https://github.com/vuejs/petite-vue) 的替代发行版,该版本专门针对渐进增强现有 HTML 进行了优化。然而 petite-vue 已不再积极维护,其最后发布的版本适配于 Vue 3.2.27。 ## 作为 Web Component 嵌入 {#embedded-web-components} diff --git a/src/guide/quick-start.md b/src/guide/quick-start.md index abc2ef02b..babfa2675 100644 --- a/src/guide/quick-start.md +++ b/src/guide/quick-start.md @@ -23,7 +23,7 @@ import { VTCodeGroup, VTCodeGroupTab } from '@vue/theme' :::tip 前提条件 - 熟悉命令行 -- 已安装 18.3 或更高版本的 [Node.js](https://nodejs.org/) +- 已安装 `^20.19.0 || >=22.12.0` 版本的 [Node.js](https://nodejs.org/) ::: 在本节中,我们将介绍如何在本地搭建 Vue [单页应用](/guide/extras/ways-of-using-vue#single-page-application-spa)。创建的项目将使用基于 [Vite](https://vitejs.dev) 的构建设置,并允许我们使用 Vue 的[单文件组件](/guide/scaling-up/sfc) (SFC)。 diff --git a/src/guide/reusability/custom-directives.md b/src/guide/reusability/custom-directives.md index 0ee34935a..b390e8634 100644 --- a/src/guide/reusability/custom-directives.md +++ b/src/guide/reusability/custom-directives.md @@ -110,6 +110,10 @@ app.directive('highlight', { }) ``` +通过扩展 `vue` 中的 `ComponentCustomProperties` 接口,可以为自定义的全局指令添加类型。 + +更多细节参考:[为自定义全局指令添加类型](/guide/typescript/composition-api#typing-global-custom-directives) + ## 自定义指令的使用时机 {#when-to-use} 只有当所需功能只能通过直接的 DOM 操作来实现时,才应该使用自定义指令。 diff --git a/src/guide/typescript/composition-api.md b/src/guide/typescript/composition-api.md index 304c90c0d..32fcd8203 100644 --- a/src/guide/typescript/composition-api.md +++ b/src/guide/typescript/composition-api.md @@ -468,7 +468,8 @@ import { useTemplateRef } from 'vue' import MyGenericModal from './MyGenericModal.vue' import type { ComponentExposed } from 'vue-component-type-helpers' -const modal = useTemplateRef>('modal') +const modal = + useTemplateRef>('modal') const openModal = () => { modal.value?.open('newValue') @@ -477,3 +478,41 @@ const openModal = () => { ``` 请注意在 `@vue/language-tools` 2.1 以上版本中,静态模板 ref 的类型可以被自动推导,上述这些仅在极端情况下需要。 + +## 为自定义全局指令添加类型 {#typing-global-custom-directives} + +可以通过扩展 `ComponentCustomProperties` 来为使用 `app.directive()` 声明的全局自定义指令获取类型提示和类型检查 + +```ts [src/directives/highlight.ts] +import type { Directive } from 'vue' + +export type HighlightDirective = Directive + +declare module 'vue' { + export interface ComponentCustomProperties { + // 使用 v 作为前缀 (v-highlight) + vHighlight: HighlightDirective + } +} + +export default { + mounted: (el, binding) => { + el.style.backgroundColor = binding.value + } +} satisfies HighlightDirective +``` + +```ts [main.ts] +import highlight from './directives/highlight' +// ...其它代码 +const app = createApp(App) +app.directive('highlight', highlight) +``` + +在组件中使用 + +```vue [App.vue] + +``` diff --git a/src/guide/typescript/options-api.md b/src/guide/typescript/options-api.md index 62486c034..5b98cbe28 100644 --- a/src/guide/typescript/options-api.md +++ b/src/guide/typescript/options-api.md @@ -293,3 +293,7 @@ declare module 'vue' { - [对组件类型扩展的 TypeScript 单元测试](https://github.com/vuejs/core/blob/main/packages-private/dts-test/componentTypeExtensions.test-d.tsx) + +## Typing Global Custom Directives {#typing-global-custom-directives} + +See: [Typing Custom Global Directives](/guide/typescript/composition-api#typing-global-custom-directives) diff --git a/src/partners/partners.json b/src/partners/partners.json index 59bd61e10..169aee77b 100644 --- a/src/partners/partners.json +++ b/src/partners/partners.json @@ -117,13 +117,17 @@ { "name": "Redberry", "logo": "redberry.png", - "intro": "We are a 100+ award-winning, Laravel & Vue partner software design, development, and growth marketing agency from Tbilisi. In 8 years, we have taken 300+ products from zero to hero using Vue, Laravel, React and React Native for clients ranging from startups and government institutions to international agencies and enterprises.", + "intro": "We are the 100+ award-winning Vue and Laravel development agency you couldn't afford at home. But we are based in Georgia, the country. So you can.", "description": [ - "Redberry was born in 2014 as a four friends’ venture to bring digital transformation to the brick-to-mortar business in Georgia. Today, we are more than 150 and represent the biggest Georgian agency. We are multifaceted in every way - technology, services, people. We accompany our clients along the entire product journey - from product design to development to its growth. We boast a 100+ international award-winning team of legendary UX/UI designers, software developers, DevOps engineers, project managers, scrum masters, digital strategists, copywriters, content creators, and growth hackers. So call us your swiss-army-knife digital partner if you like; we do.", - "While we are a top-tier agency, one of the most beautiful things about us is our location, both literally and metaphorically. We are based in Georgia (country, not the state), where IT outsourcing is almost tax-free. As a result, our EU and US-based partner startups, agencies, and companies enjoy a longer runway and more significant project margins. Luckily, we have a substantial capacity and easy access to the rapidly growing local tech talent, so we are our clients’ reliable and scalable partner.", - "Besides being an official Laravel and now Vue Partner software house, we are a Google and Facebook partner creative growth agency, making us an ideal, full-service partner for 80+ companies of all sizes to grow their business progressively. It has also earned us the Best Agency of the Year titles twice in 3 years, 2019 and 2021. Our client’s business is our business, so we remain results-oriented at all times, on and off work hours, weekdays and weekends, to ensure we deliver the solutions that drive your business results. That mindset has shaped our list of clients with industry leaders and runner-ups in finance, insurance, real estate, auto, education, healthcare, etc.", - "As for the methodology, running our startup studio has imprinted agile into our DNA. We have built a dozen MVPs and continued developing them over time according to the ever-changing business requirements, honing our ability to optimize for low initial time-to-market and high development velocity on any project we take on. We also internalized and standardized setting up and maintaining adequate codebase test coverage and regularly using CI/CD pipelines, making our lives and codes that much more manageable.", - "If you would like to collaborate on extending your product team, you can contact us through our website." + "We’re Redberry — an official Vue Partner agency, based in Tbilisi, Georgia. We’re a 200-person team that’s shipped 300+ products across the EU, UK, US, and the Middle East. Founded in 2014 by four friends to build reliable, scalable software, we still live that mission—now at scale, with Vue at the heart of our front end.", + "We choose the best option for your product: Nuxt when search visibility and first-load speed matter most, and Inertia + Vue when you want to move quickly on a Laravel backend. Either way, you get a fast, SEO-friendly interface that feels instant. We also set up a reusable design system so new features ship in days, stay on-brand, and remain easy to maintain. If your users need live data or work with spotty connectivity, we design for real-time updates and offline use.", + "Every engagement starts with clarity—goals, users, constraints. In Discovery & Planning, we align on architecture, roadmap, backlog, and risks. Then we run dual-track delivery (design and engineering in parallel) so learning feeds building without slowing momentum.", + "Our engineering playbook de-risks delivery. Each task starts on a feature branch off main, and we keep main in a releasable state. Changes move through a structured pipeline—Local → Development → Staging → Prerelease → Production—with automated CI/CD, review gates, and client validation in prerelease, so you see progress early and handoffs are clean. We bake in quality from day one: strict code standards, automated tests, measurable performance and accessibility targets, and clear API contracts. After launch, we monitor and trace real usage, fix issues before customers notice, and use data to guide what we improve next.", + "How we work:", + "Staff Augmentation — embed our Vue engineers into your team.", + "Managed Projects — we own delivery end-to-end (discovery → build → launch → evolve).", + "Stuck product? We specialize in rescue projects—stabilizing codebases and accelerating delivery. First we audit, then prioritize and fix.", + "We typically pair Vue with a robust Laravel backend (we’re one of only 8 diamond-tier Laravel Partners worldwide), and being based in Georgia (the country) lets us deliver top-tier engineering with unbeatable value for price." ], "region": ["Europe"], "proficiencies": [ @@ -135,7 +139,7 @@ ], "website": { "text": "redberry.international", - "url": "https://redberry.international/" + "url": "https://redberry.international?utm_source=vuepartners&utm_campaign=partners_page" }, "contact": "nini.doggo@redberry.ge" }, @@ -200,12 +204,8 @@ "React Native", "Flutter" ], - "region": [ - "Europe" - ], - "location": [ - "Europe" - ], + "region": ["Europe"], + "location": ["Europe"], "website": { "text": "proxify.io", "url": "https://proxify.io?utm_source=partnership&utm_medium=vuejs&utm_campaign=partners-proxify.html" diff --git a/src/public/images/partners/redberry-hero.jpg b/src/public/images/partners/redberry-hero.jpg index d04581444..273e91f1a 100644 Binary files a/src/public/images/partners/redberry-hero.jpg and b/src/public/images/partners/redberry-hero.jpg differ