diff --git a/404.html b/404.html index 82ddd9617..04bd52a15 100644 --- a/404.html +++ b/404.html @@ -6,9 +6,9 @@ 404 | Vue FAQ - + - + @@ -28,7 +28,7 @@
Skip to content

404

PAGE NOT FOUND

But if you don't change your direction, and if you keep looking, you may end up where you are heading.
- + \ No newline at end of file diff --git a/assets/app.CQNbc8G_.js b/assets/app.Dnc_Qpyz.js similarity index 95% rename from assets/app.CQNbc8G_.js rename to assets/app.Dnc_Qpyz.js index c896c30d4..6ed3047b6 100644 --- a/assets/app.CQNbc8G_.js +++ b/assets/app.Dnc_Qpyz.js @@ -1 +1 @@ -import{R as i}from"./chunks/theme.DZmaZJwY.js";import{U as o,av as u,aw as l,ax as c,ay as f,az as d,aA as m,aB as h,aC as A,aD as g,aE as y,d as v,u as w,k as C,y as P,aF as R,aG as E,aH as b,aI as S}from"./chunks/framework.B8KxSsRZ.js";function p(e){if(e.extends){const a=p(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=p(i),T=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=w();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&R(),E(),b(),s.setup&&s.setup(),()=>S(s.Layout)}});async function D(){globalThis.__VITEPRESS__=!0;const e=F(),a=x();a.provide(l,e);const t=c(e.route);return a.provide(f,t),a.component("Content",d),a.component("ClientOnly",m),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:h}),{app:a,router:e,data:t}}function x(){return A(T)}function F(){let e=o,a;return g(t=>{let n=y(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&D().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{D as createApp}; +import{R as i}from"./chunks/theme.C42NH7fS.js";import{U as o,av as u,aw as l,ax as c,ay as f,az as d,aA as m,aB as h,aC as A,aD as g,aE as y,d as v,u as w,k as C,y as P,aF as R,aG as E,aH as b,aI as S}from"./chunks/framework.B8KxSsRZ.js";function p(e){if(e.extends){const a=p(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=p(i),T=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=w();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&R(),E(),b(),s.setup&&s.setup(),()=>S(s.Layout)}});async function D(){globalThis.__VITEPRESS__=!0;const e=F(),a=x();a.provide(l,e);const t=c(e.route);return a.provide(f,t),a.component("Content",d),a.component("ClientOnly",m),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:h}),{app:a,router:e,data:t}}function x(){return A(T)}function F(){let e=o,a;return g(t=>{let n=y(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&D().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{D as createApp}; diff --git a/assets/chunks/@localSearchIndexen.Bkd2CT2K.js b/assets/chunks/@localSearchIndexen.Bkd2CT2K.js deleted file mode 100644 index 7d08da808..000000000 --- a/assets/chunks/@localSearchIndexen.Bkd2CT2K.js +++ /dev/null @@ -1 +0,0 @@ -const e='{"documentCount":140,"nextId":140,"documentIds":{"0":"/en/backend/api.html#api-service","1":"/en/backend/auth.html#authentication-and-authorization","2":"/en/backend/backend.html#options-to-leverage-your-backend-for-frontenders","3":"/en/backend/cors.html#cors","4":"/en/backend/protocols.html#protocols-to-rest-or-not-to-rest","5":"/en/deployment/ci-cd.html#ci-cd","6":"/en/deployment/docker.html#docker","7":"/en/deployment/github-actions.html#github-actions","8":"/en/development/assets.html#application-resources","9":"/en/development/assets.html#baseicon","10":"/en/development/assets.html#icons-js","11":"/en/development/architectural-patterns.html#architectural-patterns","12":"/en/development/architectural-patterns.html#use-cases","13":"/en/development/architectural-patterns.html#best-practices-and-considerations","14":"/en/development/architectural-patterns.html#apploader-vue","15":"/en/development/architectural-patterns.html#useapploader-ts","16":"/en/development/architectural-patterns.html#some-component","17":"/en/deployment/hosting.html#hosting","18":"/en/development/building.html#create-and-build-an-application","19":"/en/development/ide.html#configuring-the-ide","20":"/en/development/libraries.html#tell-me-a-handy-library","21":"/en/development/misc.html#helpful-hints","22":"/en/development/misc.html#carousel-or-slider","23":"/en/development/misc.html#toaster","24":"/en/development/misc.html#date-and-time","25":"/en/development/project-structure.html#vue-3-project-structure","26":"/en/development/project-structure.html#possible-file-structures-for-vue-3-projects","27":"/en/development/project-structure.html#suitable-architecture-for-vue-3-web-application","28":"/en/development/stores.html#state-management-in-vue-3","29":"/en/frontend/about-frameworks.html#about-frontend-frameworks","30":"/en/development/testing.html#testing","31":"/en/frontend/css-ui-libs.html#css-and-ui-libraries","32":"/en/frontend/architecture.html#frontend-application-architecture","33":"/en/frontend/architecture.html#avoid-dependencies","34":"/en/frontend/architecture.html#use-wrappers-over-components-of-ui-libraries-and-third-party-utilities","35":"/en/frontend/architecture.html#regular-refactoring","36":"/en/frontend/architecture.html#use-css3","37":"/en/frontend/architecture.html#use-modern-standards-and-language-features","38":"/en/frontend/architecture.html#document-the-project","39":"/en/frontend/learning.html#learning-vue","40":"/en/frontend/spa-pwa-ssr-ssg.html#spa-pwa-ssg-ssr-and-seo","41":"/en/misc/cheat-sheets.html#cheat-sheet","42":"/en/misc/cheat-sheets.html#vue","43":"/en/misc/cheat-sheets.html#javascript","44":"/en/misc/cheat-sheets.html#html","45":"/en/misc/cheat-sheets.html#css","46":"/en/misc/cheat-sheets.html#typescript","47":"/en/misc/cheat-sheets.html#markdown","48":"/en/misc/glossary.html#glossary-and-abbreviations","49":"/en/misc/contribute.html#contribute-to-the-development-of-this-resource","50":"/en/misc/introduction.html#introduction","51":"/en/misc/introduction.html#about-the-author","52":"/en/release-timeline/config.html#configuration","53":"/en/release-timeline/config.html#options","54":"/en/release-timeline/config.html#styling","55":"/en/release-timeline/getting-data.html#getting-release-commit-and-pull-requests-data","56":"/en/release-timeline/getting-data.html#retrieving-data","57":"/en/release-timeline/getting-started.html#installation","58":"/en/release-timeline/getting-started.html#installation-of-the-npm-package","59":"/en/release-timeline/getting-started.html#usage-in-vue-project-code","60":"/en/release-timeline/getting-started.html#use-in-vitepress","61":"/en/release-timeline/getting-started.html#use-as-web-component","62":"/en/release-timeline/microfrontend.html#micro-frontend","63":"/en/release-timeline/microfrontend.html#usage","64":"/en/release-timeline/microfrontend.html#demo","65":"/en/release-timeline/#release-timeline","66":"/en/release-timeline/#release-timeline-visualization","67":"/en/release-timeline/#github","68":"/en/release-timeline/#demo","69":"/en/release-timeline/#credits","70":"/en/release-timeline/vitepress.html#vitepress","71":"/en/release-timeline/vitepress.html#installation","72":"/en/release-timeline/vitepress.html#usage","73":"/en/release-timeline/vitepress.html#css-variables","74":"/en/release-timeline/vue-3.html#vue-3-project","75":"/en/release-timeline/vue-3.html#installation","76":"/en/release-timeline/vue-3.html#use-in-vue-component","77":"/en/release-timeline/web-component.html#web-component","78":"/en/release-timeline/web-component.html#usage","79":"/en/release-timeline/web-component.html#configuration","80":"/en/release-timeline/web-component.html#demo","81":"/en/vue-webapp/contribution.html#project-participation","82":"/en/vue-webapp/getting-started.html#getting-started","83":"/en/vue-webapp/getting-started.html#installation-via-create-vue-webapp","84":"/en/vue-webapp/getting-started.html#initializing-and-launching-a-web-application","85":"/en/vue-webapp/getting-started.html#installation-from-the-repository","86":"/en/vue-webapp/guidelines.html#guidelines","87":"/en/vue-webapp/#scaffolding-a-vue-webapp","88":"/en/vue-webapp/#summary","89":"/en/vue-webapp/#justification","90":"/en/vue-webapp/objectives.html#objectives","91":"/en/vue-webapp/options/adaptability.html#adaptability","92":"/en/vue-webapp/options/api.html#api-module","93":"/en/vue-webapp/options/api.html#api-rest","94":"/en/vue-webapp/options/api.html#json-rpc","95":"/en/vue-webapp/options/baseIcon.html#baseicon","96":"/en/vue-webapp/options/description.html#implementation-details","97":"/en/vue-webapp/options/description.html#code-injections-in-the-index-html","98":"/en/vue-webapp/options/description.html#css-tricks","99":"/en/vue-webapp/options/drawer.html#navigation-drawers","100":"/en/vue-webapp/options/drawer.html#simpledrawer","101":"/en/vue-webapp/options/drawer.html#touchslideoutdrawer","102":"/en/vue-webapp/options/footer.html#footers","103":"/en/vue-webapp/options/footer.html#simplefooter","104":"/en/vue-webapp/options/footer.html#richfooter","105":"/en/vue-webapp/options/footer.html#mantinesimplefooter","106":"/en/vue-webapp/options/footer.html#mantinerichfooter","107":"/en/vue-webapp/options/footer.html#distributedfooter","108":"/en/vue-webapp/options/ga-gp.html#github-actions-script-to-deploy-to-github-pages","109":"/en/vue-webapp/options/ga-gp.html#deployment","110":"/en/vue-webapp/options/ga-gp.html#setting-base-in-vite-config","111":"/en/vue-webapp/options/google-analytics.html#google-analytics","112":"/en/vue-webapp/options/header.html#headers","113":"/en/vue-webapp/options/header.html#simpleheader","114":"/en/vue-webapp/options/header.html#mantinesimpleheader","115":"/en/vue-webapp/options/header.html#mantinelayeredheader","116":"/en/vue-webapp/options/header.html#slidingheader","117":"/en/vue-webapp/options/#options-when-creating-an-application","118":"/en/vue-webapp/options/#available-options","119":"/en/vue-webapp/options/#available-by-default","120":"/en/vue-webapp/options/#in-development","121":"/en/vue-webapp/options/#planned","122":"/en/vue-webapp/options/i18n.html#i18n","123":"/en/vue-webapp/options/i18n.html#i18next","124":"/en/vue-webapp/options/i18n.html#usei18nlight","125":"/en/vue-webapp/options/i18n.html#usage","126":"/en/vue-webapp/options/i18n.html#i18next-extensions","127":"/en/vue-webapp/options/i18n.html#as-a-result","128":"/en/vue-webapp/options/layout-main.html#mainlayout","129":"/en/vue-webapp/options/layout-main.html#routing","130":"/en/vue-webapp/options/layout-one-column.html#onecolumnlayout","131":"/en/vue-webapp/options/navbar.html#navbar","132":"/en/vue-webapp/options/navbar.html#simplenavbar","133":"/en/vue-webapp/options/navbar.html#mantinesimplenavbar","134":"/en/vue-webapp/options/open-graph.html#google-analytics","135":"/en/vue-webapp/options/splash-screen.html#splash-screen","136":"/en/vue-webapp/options/pwa.html#pwa","137":"/en/vue-webapp/options/pwa.html#manifest-json","138":"/en/vue-webapp/options/pwa.html#service-worker","139":"/en/vue-webapp/options/themes.html#themes"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[2,1,189],"1":[3,1,328],"2":[7,1,226],"3":[1,1,177],"4":[7,1,147],"5":[2,1,71],"6":[1,1,1],"7":[2,1,385],"8":[2,1,178],"9":[1,2,71],"10":[2,2,116],"11":[2,1,82],"12":[2,2,83],"13":[4,2,171],"14":[2,6,22],"15":[2,6,28],"16":[2,6,41],"17":[1,1,124],"18":[5,1,209],"19":[3,1,815],"20":[5,1,49],"21":[2,1,9],"22":[3,2,17],"23":[1,2,3],"24":[3,2,312],"25":[4,1,1],"26":[7,4,400],"27":[7,4,118],"28":[5,1,466],"29":[3,1,370],"30":[1,1,149],"31":[4,1,214],"32":[3,1,352],"33":[2,3,79],"34":[11,3,41],"35":[2,3,30],"36":[2,3,48],"37":[6,3,18],"38":[3,3,36],"39":[2,1,408],"40":[6,1,457],"41":[2,1,1],"42":[1,2,5],"43":[1,2,4],"44":[1,2,4],"45":[1,2,6],"46":[1,2,8],"47":[1,2,2],"48":[3,1,61],"49":[7,1,42],"50":[1,1,80],"51":[4,1,29],"52":[1,1,6],"53":[1,1,84],"54":[1,1,85],"55":[7,1,1],"56":[2,7,106],"57":[1,1,1],"58":[5,1,8],"59":[5,1,49],"60":[3,1,2],"61":[4,1,39],"62":[2,1,1],"63":[1,2,53],"64":[1,2,26],"65":[2,1,1],"66":[3,2,90],"67":[1,2,2],"68":[1,2,14],"69":[1,2,6],"70":[1,1,16],"71":[1,1,8],"72":[1,1,31],"73":[2,1,35],"74":[3,1,1],"75":[1,3,8],"76":[4,3,43],"77":[2,1,1],"78":[1,2,68],"79":[1,2,116],"80":[1,2,26],"81":[2,1,15],"82":[2,1,1],"83":[5,2,136],"84":[6,7,14],"85":[4,2,37],"86":[1,1,134],"87":[4,1,1],"88":[1,4,63],"89":[1,4,158],"90":[1,1,169],"91":[1,1,79],"92":[2,1,1],"93":[3,2,92],"94":[2,2,89],"95":[1,1,65],"96":[2,1,1],"97":[6,2,44],"98":[2,2,30],"99":[2,1,12],"100":[1,2,23],"101":[1,2,24],"102":[1,1,9],"103":[1,1,1],"104":[1,1,1],"105":[1,1,1],"106":[1,1,1],"107":[1,1,1],"108":[6,1,1],"109":[1,6,67],"110":[5,6,46],"111":[2,1,45],"112":[1,1,5],"113":[1,1,4],"114":[1,1,8],"115":[1,1,8],"116":[1,1,30],"117":[5,1,1],"118":[2,5,73],"119":[3,5,20],"120":[2,5,12],"121":[1,5,74],"122":[1,1,1],"123":[1,1,99],"124":[1,1,22],"125":[1,1,56],"126":[2,1,56],"127":[3,1,17],"128":[1,1,28],"129":[1,1,13],"130":[1,1,46],"131":[1,1,17],"132":[1,1,1],"133":[1,1,1],"134":[2,1,34],"135":[2,1,49],"136":[1,1,16],"137":[2,1,56],"138":[2,1,66],"139":[1,1,83]},"averageFieldLength":[2.3642857142857143,1.792857142857143,74.7642857142857],"storedFields":{"0":{"title":"API service","titles":[]},"1":{"title":"Authentication and authorization","titles":[]},"2":{"title":"Options to leverage your backend for frontenders","titles":[]},"3":{"title":"CORS","titles":[]},"4":{"title":"Protocols. To REST or not to REST?","titles":[]},"5":{"title":"CI/CD","titles":[]},"6":{"title":"Docker","titles":[]},"7":{"title":"Github Actions","titles":[]},"8":{"title":"Application Resources","titles":[]},"9":{"title":"BaseIcon","titles":["Application Resources"]},"10":{"title":"icons.js","titles":["Application Resources"]},"11":{"title":"Architectural patterns","titles":[]},"12":{"title":"Use cases","titles":["Architectural patterns"]},"13":{"title":"Best Practices and Considerations","titles":["Architectural patterns"]},"14":{"title":"AppLoader.vue","titles":["Architectural patterns","Best Practices and Considerations"]},"15":{"title":"useAppLoader.ts","titles":["Architectural patterns","Best Practices and Considerations"]},"16":{"title":"Some component","titles":["Architectural patterns","Best Practices and Considerations"]},"17":{"title":"Hosting","titles":[]},"18":{"title":"Create and build an application","titles":[]},"19":{"title":"Configuring the IDE","titles":[]},"20":{"title":"Tell me a handy library","titles":[]},"21":{"title":"Helpful hints","titles":[]},"22":{"title":"Carousel or slider","titles":["Helpful hints"]},"23":{"title":"Toaster","titles":["Helpful hints"]},"24":{"title":"Date and time","titles":["Helpful hints"]},"25":{"title":"Vue 3 project structure","titles":[]},"26":{"title":"Possible file structures for Vue 3 projects","titles":["Vue 3 project structure"]},"27":{"title":"Suitable architecture for Vue 3 web application","titles":["Vue 3 project structure"]},"28":{"title":"State management in Vue 3","titles":[]},"29":{"title":"About frontend frameworks","titles":[]},"30":{"title":"Testing","titles":[]},"31":{"title":"CSS and UI libraries","titles":[]},"32":{"title":"Frontend application architecture","titles":[]},"33":{"title":"Avoid dependencies","titles":["Frontend application architecture"]},"34":{"title":"Use wrappers over components of UI libraries and third-party utilities","titles":["Frontend application architecture"]},"35":{"title":"Regular refactoring","titles":["Frontend application architecture"]},"36":{"title":"Use CSS3","titles":["Frontend application architecture"]},"37":{"title":"Use modern standards and language features","titles":["Frontend application architecture"]},"38":{"title":"Document the project","titles":["Frontend application architecture"]},"39":{"title":"Learning Vue","titles":[]},"40":{"title":"SPA, PWA, SSG, SSR and SEO","titles":[]},"41":{"title":"Cheat Sheet","titles":[]},"42":{"title":"Vue","titles":["Cheat Sheet"]},"43":{"title":"JavaScript","titles":["Cheat Sheet"]},"44":{"title":"HTML","titles":["Cheat Sheet"]},"45":{"title":"CSS","titles":["Cheat Sheet"]},"46":{"title":"Typescript","titles":["Cheat Sheet"]},"47":{"title":"Markdown","titles":["Cheat Sheet"]},"48":{"title":"Glossary and abbreviations","titles":[]},"49":{"title":"Contribute to the development of this resource","titles":[]},"50":{"title":"Introduction","titles":[]},"51":{"title":"About the author:","titles":["Introduction"]},"52":{"title":"Configuration","titles":[]},"53":{"title":"Options","titles":["Configuration"]},"54":{"title":"Styling","titles":["Configuration"]},"55":{"title":"Getting release, commit and pull requests data","titles":[]},"56":{"title":"Retrieving data","titles":["Getting release, commit and pull requests data"]},"57":{"title":"Installation","titles":[]},"58":{"title":"Installation of the npm package","titles":["Installation"]},"59":{"title":"Usage in Vue project code","titles":["Installation"]},"60":{"title":"Use in VitePress","titles":["Installation"]},"61":{"title":"Use as web component","titles":["Installation"]},"62":{"title":"Micro-frontend","titles":[]},"63":{"title":"Usage","titles":["Micro-frontend"]},"64":{"title":"Demo","titles":["Micro-frontend"]},"65":{"title":"Release Timeline","titles":[]},"66":{"title":"Release timeline visualization","titles":["Release Timeline"]},"67":{"title":"GitHub","titles":["Release Timeline"]},"68":{"title":"Demo","titles":["Release Timeline"]},"69":{"title":"Credits","titles":["Release Timeline"]},"70":{"title":"VitePress","titles":[]},"71":{"title":"Installation","titles":["VitePress"]},"72":{"title":"Usage","titles":["VitePress"]},"73":{"title":"CSS variables","titles":["VitePress"]},"74":{"title":"Vue 3 project","titles":[]},"75":{"title":"Installation","titles":["Vue 3 project"]},"76":{"title":"Use in Vue component","titles":["Vue 3 project"]},"77":{"title":"Web component","titles":[]},"78":{"title":"Usage","titles":["Web component"]},"79":{"title":"Configuration","titles":["Web component"]},"80":{"title":"Demo","titles":["Web component"]},"81":{"title":"Project participation","titles":[]},"82":{"title":"Getting started","titles":[]},"83":{"title":"Installation via create vue-webapp","titles":["Getting started"]},"84":{"title":"Initializing and launching a web application","titles":["Getting started","Installation via create vue-webapp"]},"85":{"title":"Installation from the repository","titles":["Getting started"]},"86":{"title":"Guidelines","titles":[]},"87":{"title":"Scaffolding a Vue webapp","titles":[]},"88":{"title":"Summary","titles":["Scaffolding a Vue webapp"]},"89":{"title":"Justification","titles":["Scaffolding a Vue webapp"]},"90":{"title":"Objectives","titles":[]},"91":{"title":"Adaptability","titles":[]},"92":{"title":"API module","titles":[]},"93":{"title":"API (REST)","titles":["API module"]},"94":{"title":"JSON-RPC","titles":["API module"]},"95":{"title":"BaseIcon","titles":[]},"96":{"title":"Implementation details","titles":[]},"97":{"title":"Code injections in the index.html","titles":["Implementation details"]},"98":{"title":"CSS tricks","titles":["Implementation details"]},"99":{"title":"Navigation drawers","titles":[]},"100":{"title":"SimpleDrawer","titles":["Navigation drawers"]},"101":{"title":"TouchSlideoutDrawer","titles":["Navigation drawers"]},"102":{"title":"Footers","titles":[]},"103":{"title":"SimpleFooter","titles":["Footers"]},"104":{"title":"RichFooter","titles":["Footers"]},"105":{"title":"MantineSimpleFooter","titles":["Footers"]},"106":{"title":"MantineRichFooter","titles":["Footers"]},"107":{"title":"DistributedFooter","titles":["Footers"]},"108":{"title":"GitHub Actions script to deploy to GitHub Pages","titles":[]},"109":{"title":"Deployment","titles":["GitHub Actions script to deploy to GitHub Pages"]},"110":{"title":"Setting base in Vite config","titles":["GitHub Actions script to deploy to GitHub Pages"]},"111":{"title":"Google analytics","titles":[]},"112":{"title":"Headers","titles":[]},"113":{"title":"SimpleHeader","titles":["Headers"]},"114":{"title":"MantineSimpleHeader","titles":["Headers"]},"115":{"title":"MantineLayeredHeader","titles":["Headers"]},"116":{"title":"SlidingHeader","titles":["Headers"]},"117":{"title":"Options when creating an application","titles":[]},"118":{"title":"Available options","titles":["Options when creating an application"]},"119":{"title":"Available by default","titles":["Options when creating an application"]},"120":{"title":"In development","titles":["Options when creating an application"]},"121":{"title":"Planned","titles":["Options when creating an application"]},"122":{"title":"i18n","titles":[]},"123":{"title":"i18next","titles":["i18n"]},"124":{"title":"useI18nLight","titles":["i18n"]},"125":{"title":"Usage","titles":["i18n"]},"126":{"title":"i18next extensions","titles":["i18n"]},"127":{"title":"As a result","titles":["i18n"]},"128":{"title":"MainLayout","titles":[]},"129":{"title":"Routing","titles":["MainLayout"]},"130":{"title":"OneColumnLayout","titles":[]},"131":{"title":"Navbar","titles":[]},"132":{"title":"SimpleNavbar","titles":["Navbar"]},"133":{"title":"MantineSimpleNavbar","titles":["Navbar"]},"134":{"title":"Google analytics","titles":[]},"135":{"title":"Splash screen","titles":[]},"136":{"title":"PWA","titles":[]},"137":{"title":"Manifest.json","titles":["PWA"]},"138":{"title":"Service worker","titles":["PWA"]},"139":{"title":"Themes","titles":[]}},"dirtCount":0,"index":[["78",{"2":{"139":1}}],["767",{"2":{"91":1}}],["70kb",{"2":{"59":1,"76":1}}],["70",{"2":{"39":1,"124":1}}],["√",{"2":{"83":13,"88":5}}],["67",{"2":{"139":3}}],["60",{"2":{"139":6}}],["6",{"2":{"54":1,"59":1,"61":2,"76":1,"78":1,"79":1,"139":1}}],["и",{"2":{"52":1}}],["q",{"2":{"49":1}}],["qbutton",{"2":{"31":1}}],["questions",{"2":{"50":3}}],["question",{"2":{"39":1,"49":1}}],["questionable",{"2":{"30":1}}],["queued",{"2":{"32":1}}],["queries",{"2":{"4":1}}],["query",{"2":{"2":1,"4":1,"37":1}}],["quasar",{"2":{"19":2,"20":1}}],["quality",{"2":{"10":1,"19":1,"31":1,"39":3,"48":2}}],["quickly",{"2":{"32":1,"89":3,"90":1}}],["quick",{"2":{"30":1}}],["quieter",{"2":{"19":1}}],["quiet",{"2":{"19":1}}],["quite",{"2":{"1":1,"19":1,"20":1,"28":1,"29":1,"39":1,"40":2,"89":3,"126":1}}],["quote",{"2":{"31":1}}],["quot",{"2":{"1":2,"2":2,"3":4,"24":6,"26":2,"28":8,"29":4,"32":12,"36":2,"39":5,"40":4,"78":10,"83":6,"89":4,"100":2,"109":14,"123":8,"128":2,"130":2}}],["zuckerberg",{"2":{"29":1}}],["zero",{"2":{"1":1,"19":1}}],["с",{"2":{"26":1}}],["^",{"2":{"19":1}}],["^20",{"2":{"18":1}}],["400",{"2":{"116":1}}],["401",{"2":{"1":2}}],["480",{"2":{"91":1}}],["4",{"2":{"10":2,"19":1,"32":1,"39":1}}],[">",{"2":{"7":1,"8":5,"9":2,"13":8,"14":2,"15":1,"19":1,"31":2,"49":2,"59":1,"61":4,"63":5,"72":1,"76":1,"78":4,"79":4,"91":5,"95":3,"111":2,"116":3,"125":2,"134":15}}],[">>",{"2":{"7":5}}],["`dark`",{"2":{"54":1}}],["`desc`",{"2":{"53":1}}],["``",{"2":{"53":1}}],["`commits`",{"2":{"53":1}}],["`pulls`",{"2":{"53":1}}],["`~",{"2":{"19":1}}],["`$",{"2":{"9":4}}],["`",{"2":{"7":3,"8":1}}],["+page",{"2":{"19":6}}],["+layout",{"2":{"19":7}}],["+$backups",{"2":{"7":1}}],["+",{"2":{"7":1,"10":2}}],["||",{"2":{"111":1}}],["|",{"2":{"7":4,"19":1,"26":323}}],["$1",{"2":{"17":1}}],["$dirs",{"2":{"7":1}}],["$root",{"2":{"7":3}}],["$backup",{"2":{"7":6}}],["$env",{"2":{"7":1}}],["$project",{"2":{"7":3}}],["$github",{"2":{"7":5}}],["$target",{"2":{"7":8}}],["$",{"2":{"7":15,"8":1,"19":96,"84":2,"85":3}}],["kb",{"2":{"127":1}}],["kits",{"2":{"89":1}}],["kill",{"2":{"39":1}}],["kids",{"2":{"39":1}}],["kinds",{"2":{"39":1}}],["kind",{"2":{"28":1,"40":1}}],["karma",{"2":{"19":10}}],["keen",{"2":{"22":1}}],["keeps",{"2":{"29":1}}],["keep",{"2":{"19":1,"26":1,"28":1,"39":1}}],["keys",{"2":{"28":1}}],["keyboard",{"2":{"19":2}}],["key",{"2":{"7":10,"24":1,"123":1}}],["knows",{"2":{"39":2}}],["knowledge",{"2":{"39":2}}],["known",{"2":{"22":1,"24":1}}],["know",{"2":{"2":1,"18":1,"31":1,"39":3}}],["🚀",{"2":{"7":1}}],["🛎️",{"2":{"7":1}}],["56",{"2":{"139":1}}],["50",{"2":{"127":1}}],["50kb",{"2":{"24":1}}],["5c73e7",{"2":{"54":1,"78":1,"79":1}}],["58",{"2":{"19":1}}],["5",{"2":{"7":3,"16":1,"28":1}}],["86",{"2":{"54":1,"78":1,"79":1,"139":1}}],["888",{"2":{"54":2,"73":1,"78":1,"79":1}}],["8",{"2":{"7":2}}],["yes",{"2":{"83":8,"88":4}}],["yet",{"2":{"29":1}}],["years",{"2":{"24":2,"40":1,"50":1,"51":1,"123":1}}],["year",{"2":{"17":1,"39":1}}],["yielded",{"2":{"28":1}}],["yarnrc",{"2":{"19":2}}],["yarn",{"2":{"18":1,"19":4}}],["yamllint",{"2":{"19":2}}],["yaml",{"2":{"7":7,"19":7}}],["y",{"2":{"7":1}}],["yougithubusername",{"2":{"109":1}}],["youtube",{"2":{"39":2}}],["you",{"2":{"0":3,"1":3,"2":5,"4":2,"8":3,"10":1,"11":3,"12":3,"13":3,"16":1,"17":6,"18":6,"19":6,"24":4,"26":1,"28":9,"29":3,"30":1,"31":3,"32":8,"33":2,"34":1,"36":1,"39":9,"40":9,"49":1,"54":2,"56":1,"63":1,"64":2,"68":1,"79":1,"80":2,"83":1,"89":2,"109":1,"110":3,"111":1,"126":1,"134":1,"138":1}}],["yourname",{"2":{"110":1}}],["yourself",{"2":{"17":2,"18":1,"19":1,"39":1}}],["your",{"0":{"2":1},"2":{"0":3,"1":4,"2":4,"3":1,"4":1,"7":18,"8":3,"12":1,"13":1,"17":5,"18":1,"19":3,"24":1,"26":1,"28":6,"31":3,"32":2,"33":3,"34":1,"35":1,"38":1,"39":5,"40":4,"49":1,"54":1,"109":2,"110":1,"111":1,"134":1,"137":1}}],["99",{"2":{"4":1,"28":3}}],["95",{"2":{"1":1,"20":1,"24":1,"56":1}}],["04",{"2":{"19":1}}],["0",{"2":{"4":1,"7":5,"15":1,"40":2,"53":1,"54":3,"61":2,"78":3,"79":3,"94":2,"139":5}}],["38",{"2":{"54":1,"78":1,"79":1,"139":1}}],["3a5ccc",{"2":{"54":1}}],["3451b2",{"2":{"54":1}}],["3c3c438f",{"2":{"54":1}}],["3c3c43c7",{"2":{"54":1}}],["3c3c43",{"2":{"54":1}}],["300",{"2":{"19":1}}],["30",{"2":{"19":1}}],["3",{"0":{"25":1,"26":1,"27":1,"28":1,"74":1},"1":{"26":1,"27":1,"75":1,"76":1},"2":{"3":1,"4":1,"16":1,"18":1,"19":2,"24":3,"27":1,"28":9,"29":3,"32":2,"39":5,"42":1,"50":2,"54":2,"61":3,"66":1,"73":2,"78":2,"79":2,"86":2,"88":1,"90":1,"94":1,"139":2}}],["1443",{"2":{"94":1}}],["1px",{"2":{"91":1}}],["1199",{"2":{"91":1}}],["1kb",{"2":{"59":1,"76":1}}],["161618",{"2":{"54":1,"78":1,"79":1}}],["16gb",{"2":{"19":1}}],["1b1b1f",{"2":{"54":2,"78":2,"79":2}}],["1280px",{"2":{"139":1}}],["12",{"2":{"39":1}}],["15kb",{"2":{"66":1}}],["15",{"2":{"33":1}}],["10",{"2":{"19":1,"24":1,"32":1,"39":2}}],["100vw",{"2":{"98":1}}],["10000",{"2":{"91":1}}],["1000",{"2":{"28":1}}],["100",{"2":{"9":2,"40":1,"53":1,"98":1}}],["1",{"2":{"3":6,"10":2,"18":1,"24":2,"28":2,"32":1,"39":2,"40":1,"53":1,"54":4,"73":4,"78":2,"79":2,"93":1,"94":1,"98":1,"139":2}}],["x301",{"2":{"29":1}}],["x3c",{"2":{"8":4,"9":8,"13":20,"14":7,"15":1,"19":1,"31":4,"54":2,"59":3,"61":7,"63":9,"72":3,"76":3,"78":10,"79":12,"91":10,"95":7,"111":5,"116":8,"125":8,"134":15}}],["x",{"2":{"24":2,"98":1}}],["xshell",{"2":{"19":1}}],["xss",{"2":{"1":1}}],["xo",{"2":{"19":4}}],["xmlhttprequest",{"2":{"40":1}}],["xml",{"2":{"19":4}}],["xaml",{"2":{"19":2}}],["xdv",{"2":{"19":1}}],["x26",{"2":{"7":4,"19":1,"78":10,"91":2}}],["xhr",{"2":{"0":1,"93":1}}],["2e2e32",{"2":{"54":1,"78":1,"79":1}}],["235",{"2":{"54":4,"78":4,"79":4,"139":4}}],["255",{"2":{"54":2,"78":2,"79":2,"139":2}}],["22+",{"2":{"19":1}}],["29",{"2":{"19":1}}],["245",{"2":{"54":3,"78":3,"79":3,"139":3}}],["24",{"2":{"9":2}}],["26",{"2":{"8":1}}],["20+",{"2":{"51":1}}],["2022",{"2":{"50":1}}],["2023",{"2":{"19":1,"39":1,"50":1}}],["2016",{"2":{"39":1}}],["200",{"2":{"19":1,"40":1,"53":2,"116":1}}],["20~30",{"2":{"18":1}}],["20",{"2":{"7":1,"28":1,"39":1,"53":1}}],["2",{"2":{"1":1,"3":1,"19":3,"24":5,"28":2,"29":1,"31":1,"39":3,"40":1,"45":2,"54":4,"73":4,"78":2,"79":2,"94":1,"139":2}}],["gap",{"2":{"53":1}}],["gave",{"2":{"40":1}}],["gatsby",{"2":{"19":5}}],["gateway",{"2":{"2":1}}],["gql",{"2":{"19":2}}],["gzip",{"2":{"59":1,"76":1}}],["gz",{"2":{"19":1}}],["goes",{"2":{"19":1,"34":1}}],["governance",{"2":{"19":1}}],["go",{"2":{"19":6,"39":1,"89":1,"109":1}}],["good",{"2":{"2":1,"19":1,"21":1,"22":1,"28":1,"29":1,"30":1,"31":2,"32":4,"33":1,"35":1,"39":3,"66":1}}],["googletagmanager",{"2":{"111":1}}],["googleanalytics",{"2":{"83":1}}],["google",{"0":{"111":1,"134":1},"2":{"1":8,"2":4,"17":1,"24":1,"33":1,"39":1,"40":3,"83":1,"88":1,"97":1,"111":2,"118":2}}],["gutter",{"2":{"139":1}}],["guidelines",{"0":{"86":1}}],["guide",{"2":{"39":2}}],["guides",{"2":{"19":1}}],["gui",{"2":{"29":1}}],["gulp",{"2":{"19":2}}],["guest",{"2":{"1":1}}],["glass",{"2":{"39":1}}],["gls",{"2":{"19":1}}],["glossary",{"0":{"48":1}}],["glo",{"2":{"19":1}}],["global",{"2":{"12":1,"13":1,"26":1,"28":7,"32":1,"61":1,"78":1,"79":1,"90":1,"120":1}}],["glob",{"2":{"9":1,"10":2,"95":1}}],["glg",{"2":{"19":1}}],["glitches",{"2":{"19":1}}],["gtag",{"2":{"111":5}}],["gt",{"2":{"7":1,"19":1,"40":2}}],["gh",{"2":{"7":2,"109":3}}],["gitpod",{"2":{"19":2}}],["gitmessage",{"2":{"19":1}}],["gitmodules",{"2":{"19":1}}],["gitattributes",{"2":{"19":1}}],["gitlens",{"2":{"19":4}}],["gitlab",{"2":{"5":1,"19":2}}],["gitignore",{"2":{"7":1,"19":1}}],["githubactionsgithubpagesworkflow",{"2":{"83":1}}],["githubpullrequests",{"2":{"19":1}}],["githubissues",{"2":{"19":1}}],["github",{"0":{"7":1,"67":1,"108":2},"1":{"109":2,"110":2},"2":{"5":2,"7":23,"17":3,"19":7,"39":2,"49":1,"53":7,"56":6,"59":2,"63":1,"66":3,"67":1,"72":2,"76":2,"78":1,"79":1,"83":2,"85":1,"88":1,"90":1,"109":6,"118":3,"121":1}}],["git",{"2":{"5":1,"7":3,"11":1,"19":10,"85":2}}],["gives",{"2":{"4":2,"19":1,"24":1}}],["given",{"2":{"2":1}}],["give",{"2":{"1":2,"29":1,"40":1}}],["grpc",{"2":{"93":1}}],["grid",{"2":{"37":1,"45":2}}],["growth",{"2":{"35":1}}],["grows",{"2":{"26":1}}],["grow",{"2":{"26":1}}],["grown",{"2":{"24":1,"123":1}}],["groups",{"2":{"26":1}}],["grunt",{"2":{"19":2}}],["greater",{"2":{"29":1}}],["great",{"2":{"18":1,"19":1}}],["greatly",{"2":{"4":1,"27":1,"89":1,"138":1}}],["gray",{"2":{"91":1}}],["graph",{"2":{"83":1,"88":1,"97":1,"118":1,"134":1}}],["graphql",{"2":{"4":1,"93":1}}],["grains",{"2":{"39":1}}],["grab",{"2":{"7":1}}],["grant",{"2":{"3":1}}],["granted",{"2":{"3":2}}],["granular",{"2":{"1":1}}],["g",{"2":{"2":1,"8":1,"19":1,"26":3,"28":1,"40":1,"86":1,"111":1}}],["gmail",{"2":{"1":1,"51":1}}],["gemfile",{"2":{"19":2}}],["geneva",{"2":{"54":1}}],["generation",{"2":{"40":2}}],["generating",{"2":{"18":1,"40":1}}],["generated",{"2":{"40":2}}],["generate",{"2":{"7":1,"16":1,"17":1,"40":1}}],["generates",{"2":{"1":2,"2":1,"40":1}}],["generalize",{"2":{"90":1}}],["generally",{"2":{"50":1}}],["generalroutes",{"2":{"13":2}}],["general",{"2":{"8":1,"19":3,"27":1,"39":1,"40":1,"48":1,"90":2}}],["genuinely",{"2":{"13":1}}],["getbestblockhash",{"2":{"94":1}}],["getting",{"0":{"55":1,"82":1},"1":{"56":1,"83":1,"84":1,"85":1}}],["getters",{"2":{"28":2}}],["gettoken",{"2":{"0":1}}],["getimageurl",{"2":{"9":2,"10":2}}],["getitem",{"2":{"7":1}}],["getsvgicon",{"2":{"9":3,"10":2}}],["gets",{"2":{"1":1,"8":2,"19":1}}],["get",{"2":{"0":1,"1":1,"2":1,"3":1,"5":1,"10":2,"17":2,"29":1,"39":1,"40":2,"53":3,"56":1,"93":1}}],["getuserdata",{"2":{"0":2}}],["jl65gwrnqqq",{"2":{"111":1}}],["jl65gwrnqq",{"2":{"111":1}}],["jumping",{"2":{"98":1}}],["justification",{"0":{"89":1}}],["justifications",{"2":{"32":1}}],["just",{"2":{"1":2,"13":1,"19":1,"24":1,"28":3,"31":2,"32":1,"39":1,"64":1,"80":1,"86":1,"89":1}}],["jest",{"2":{"19":10,"30":1}}],["jenkins",{"2":{"5":1,"19":2}}],["j",{"2":{"18":1}}],["jpeg",{"2":{"17":1}}],["jpg",{"2":{"10":1}}],["jasmine",{"2":{"19":10}}],["java",{"2":{"19":1,"51":1}}],["javascript",{"0":{"43":1},"2":{"2":1,"8":1,"18":2,"19":2,"20":1,"24":4,"28":2,"29":1,"31":3,"32":3,"39":4,"40":4,"43":1,"86":1,"91":1,"127":1}}],["jamesives",{"2":{"7":3,"109":1}}],["job",{"2":{"29":2}}],["jobs",{"2":{"7":2}}],["john",{"2":{"1":2,"123":1}}],["jwt",{"2":{"1":4,"48":2,"121":1}}],["jslint",{"2":{"19":2}}],["jsconfig",{"2":{"19":11}}],["jsconst",{"2":{"7":1,"10":1,"24":2}}],["jsx",{"2":{"19":3}}],["jsexport",{"2":{"13":1,"53":1,"110":1}}],["jsonrpc",{"2":{"83":1,"94":6}}],["json5",{"2":{"19":1}}],["jsonc",{"2":{"19":1}}],["jsonplaceholder",{"2":{"2":1,"93":1}}],["json",{"0":{"94":1,"137":1},"2":{"0":1,"2":1,"4":7,"7":4,"8":1,"10":4,"18":4,"19":50,"39":1,"40":2,"53":1,"79":1,"83":5,"86":1,"93":1,"94":6,"118":1,"125":1,"126":1,"137":2}}],["jsimport",{"2":{"0":3,"8":1,"16":1,"18":1,"93":1,"94":1,"125":1}}],["js",{"0":{"10":1},"2":{"0":4,"1":1,"2":3,"8":4,"9":1,"10":1,"12":1,"17":1,"18":3,"19":21,"20":2,"22":1,"24":3,"26":28,"28":1,"29":4,"32":2,"39":4,"40":1,"50":1,"61":2,"78":2,"79":2,"90":1,"91":1,"93":1,"94":1,"111":3,"138":3}}],["nice",{"2":{"101":1}}],["nix",{"2":{"19":3}}],["nls",{"2":{"19":2}}],["nx",{"2":{"19":2}}],["nvmrc",{"2":{"19":2}}],["number",{"2":{"24":1,"30":1,"32":1,"53":1,"121":1}}],["numbers",{"2":{"24":1,"123":1}}],["nuxt",{"2":{"19":2,"89":1}}],["null",{"2":{"19":1}}],["npx",{"2":{"18":2}}],["npm",{"0":{"58":1},"2":{"11":1,"18":1,"19":4,"24":1,"33":1,"90":1,"123":1}}],["n",{"2":{"7":1,"19":1,"39":1}}],["naming",{"2":{"90":1}}],["namely",{"2":{"28":1}}],["named",{"2":{"10":2}}],["name=",{"2":{"8":1,"95":1,"134":4}}],["names",{"2":{"3":1,"8":1,"95":1}}],["name",{"2":{"3":1,"7":13,"8":3,"9":4,"10":8,"13":2,"49":1,"53":1,"83":1,"88":1,"95":1,"109":1,"110":1,"119":1,"137":2}}],["navbar",{"0":{"131":1},"1":{"132":1,"133":1},"2":{"83":2,"118":1,"131":1}}],["navigationdrawer",{"2":{"83":1,"131":1}}],["navigation",{"0":{"99":1},"1":{"100":1,"101":1},"2":{"26":1,"83":1,"90":1,"99":1,"118":2,"130":1}}],["native",{"2":{"29":1,"40":3,"137":1}}],["nativetabs",{"2":{"19":1}}],["nature",{"2":{"20":1}}],["naturally",{"2":{"7":1,"28":1}}],["nginx",{"2":{"2":1,"17":1}}],["neighboring",{"2":{"53":1}}],["nexttick",{"2":{"32":1}}],["next",{"2":{"19":2,"39":1}}],["nest",{"2":{"19":2}}],["nesting",{"2":{"19":2}}],["nested",{"2":{"13":1}}],["netlify",{"2":{"17":1,"19":2}}],["networks",{"2":{"94":1,"118":1}}],["network",{"2":{"2":1,"32":1}}],["newitem",{"2":{"29":3}}],["news",{"2":{"28":2}}],["newer",{"2":{"18":1,"32":1}}],["new",{"2":{"7":5,"10":2,"15":1,"19":1,"29":2,"31":1,"32":1,"33":2,"39":1,"40":1,"49":1,"56":1,"91":1,"111":1,"121":1,"126":1,"138":1,"139":1}}],["never",{"2":{"4":1,"19":1,"39":1}}],["nevertheless",{"2":{"0":1,"89":1}}],["needs",{"2":{"8":1,"12":1,"28":1,"30":1,"31":1,"40":1}}],["needed",{"2":{"7":1,"8":1,"24":1,"26":1,"32":2,"56":1,"79":1,"86":2,"90":1,"110":1,"123":1,"126":1,"135":1}}],["need",{"2":{"2":1,"4":1,"7":2,"8":1,"11":2,"12":2,"13":1,"17":1,"18":4,"24":1,"28":1,"29":3,"30":1,"32":3,"33":1,"39":3,"40":3,"54":1,"56":2,"89":2,"110":1,"126":1}}],["necessary",{"2":{"1":1,"7":1,"19":1,"27":1,"30":1,"39":1,"40":1,"86":2,"89":1,"127":1}}],["novice",{"2":{"89":1,"90":1}}],["non",{"2":{"28":2,"32":2,"39":1,"50":1,"66":1}}],["nontrivial",{"2":{"19":1}}],["now",{"2":{"17":1,"39":1}}],["normal",{"2":{"8":1,"19":1,"40":2}}],["nosql",{"2":{"2":1,"28":1}}],["nodemon",{"2":{"19":4}}],["node",{"2":{"2":2,"7":2,"18":3,"19":7,"39":1,"40":1}}],["no",{"2":{"1":1,"10":1,"19":1,"24":1,"28":4,"33":1,"40":1,"66":1,"83":8,"88":4}}],["nothing",{"2":{"31":1,"32":1}}],["notified",{"2":{"29":1}}],["notificationinterceptor",{"2":{"0":2,"94":2}}],["notebook",{"2":{"91":3,"100":1,"128":1,"130":1}}],["notes",{"2":{"40":1}}],["note",{"2":{"18":1,"26":1,"31":1,"39":1}}],["not",{"0":{"4":1},"2":{"0":2,"1":6,"2":3,"3":3,"4":1,"5":1,"10":1,"19":4,"22":1,"24":7,"26":1,"27":1,"28":7,"29":4,"30":1,"31":1,"32":2,"33":2,"36":1,"39":5,"40":7,"50":1,"53":1,"56":1,"86":3,"89":1,"110":1,"138":1}}],["bg",{"2":{"54":7,"73":5,"78":4,"79":5}}],["b",{"2":{"24":2,"32":2}}],["bzl",{"2":{"19":1}}],["bbl",{"2":{"19":1}}],["blank",{"2":{"135":1}}],["blame",{"2":{"19":3}}],["blg",{"2":{"19":1}}],["bloating",{"2":{"97":1}}],["blocking",{"2":{"32":1}}],["blocks",{"2":{"26":1,"90":2}}],["block",{"2":{"19":1}}],["bloc",{"2":{"19":1}}],["blog",{"2":{"1":1,"26":1,"88":1,"89":1,"90":1}}],["bit",{"2":{"28":1,"29":1,"33":1,"40":2}}],["bidirectional",{"2":{"4":1}}],["big",{"2":{"1":1,"26":1,"29":1,"39":1}}],["bunch",{"2":{"24":1,"28":1,"123":1}}],["bundleconfig",{"2":{"19":2}}],["bundle",{"2":{"2":1,"18":4,"24":1,"31":1,"33":1,"127":1}}],["buying",{"2":{"17":1}}],["built",{"2":{"7":1,"28":1,"40":1}}],["builds",{"2":{"18":1,"26":1}}],["builders",{"2":{"18":1}}],["builder",{"2":{"18":5,"86":1,"88":1,"90":1}}],["building",{"2":{"17":1,"18":1,"90":1,"118":1}}],["builddata",{"2":{"7":4}}],["build",{"0":{"18":1},"2":{"5":1,"7":12,"18":3,"19":4,"30":1,"56":1,"90":1,"109":2,"118":1,"127":1}}],["bus",{"2":{"4":1}}],["business",{"2":{"2":1,"26":3,"28":7,"29":1,"88":1,"89":3,"90":1,"93":1}}],["button>",{"2":{"125":1}}],["button",{"2":{"31":1,"32":1,"125":2}}],["buttons",{"2":{"26":1,"32":1}}],["but",{"2":{"0":2,"1":5,"2":3,"3":1,"4":1,"5":1,"7":1,"8":1,"13":1,"19":1,"24":4,"27":1,"28":4,"29":4,"30":1,"31":1,"32":4,"33":2,"39":6,"40":6,"56":2,"85":1,"86":2,"89":1,"94":1,"101":1,"123":1,"130":1}}],["broken",{"2":{"39":1}}],["browserslist",{"2":{"19":2}}],["browsers",{"2":{"17":1,"24":1,"40":1}}],["browser",{"2":{"1":3,"3":5,"7":1,"8":1,"18":1,"19":1,"30":1,"32":1,"40":5,"84":1,"121":1,"137":1,"138":1}}],["brings",{"2":{"31":1}}],["bring",{"2":{"28":1,"32":1}}],["brand",{"2":{"54":4,"73":4,"78":2,"79":2,"135":1}}],["branch",{"2":{"7":5,"40":1,"109":6}}],["branches",{"2":{"7":2,"28":1}}],["bracketpairs",{"2":{"19":1}}],["breakpoint",{"2":{"91":1}}],["breaks",{"2":{"26":1}}],["break",{"2":{"1":1,"29":1}}],["bar",{"2":{"118":1}}],["bars",{"2":{"26":2}}],["bad",{"2":{"24":2,"28":2,"31":2}}],["babel",{"2":{"19":10}}],["babelrc",{"2":{"19":10}}],["bazelproject",{"2":{"19":1}}],["bazelignore",{"2":{"19":1}}],["bazelrc",{"2":{"19":1}}],["bazel",{"2":{"19":3}}],["bandle",{"2":{"8":2}}],["banner",{"2":{"8":1}}],["bash$",{"2":{"83":1}}],["bashnpm",{"2":{"58":1,"71":1,"75":1}}],["bashpnpm",{"2":{"58":2,"71":2,"75":2,"83":1}}],["basis",{"2":{"28":1}}],["basics",{"2":{"39":1}}],["basic",{"2":{"26":3,"32":1,"39":3}}],["basically",{"2":{"2":1,"28":1}}],["basetoggle",{"2":{"119":1}}],["baseurl",{"2":{"94":1}}],["baseinput",{"2":{"26":1,"34":1}}],["baseicon",{"0":{"9":1,"95":1},"2":{"8":2,"18":2,"26":1,"95":5,"119":1}}],["basecard",{"2":{"26":1}}],["basebuttonandstringhelpers",{"2":{"27":1}}],["basebutton",{"2":{"26":3,"31":2,"34":1}}],["base",{"0":{"110":1},"2":{"9":1,"54":1,"73":2,"110":2,"139":1}}],["base64",{"2":{"8":1}}],["based",{"2":{"1":2,"7":1,"24":2,"26":1}}],["baas",{"2":{"2":6}}],["battery",{"2":{"1":1}}],["backers",{"2":{"19":1}}],["backend",{"0":{"2":1},"2":{"0":5,"1":6,"2":8,"3":6,"4":2,"13":1,"17":1,"29":3,"30":1,"39":2,"40":1,"89":1,"93":2,"94":2,"118":1}}],["backroute",{"2":{"13":1}}],["background",{"2":{"10":1,"59":2,"61":1,"63":1,"69":1,"72":1,"76":2,"78":2,"79":5}}],["backups",{"2":{"7":2}}],["backup",{"2":{"7":9}}],["back",{"2":{"1":3,"2":1,"4":1,"19":1,"29":1,"31":1,"39":1}}],["box",{"2":{"90":1,"91":4}}],["bottom",{"2":{"118":1}}],["bot",{"2":{"40":2}}],["bots",{"2":{"40":2}}],["bother",{"2":{"2":1}}],["both",{"2":{"2":2,"4":1,"7":2,"11":1,"18":1,"19":1,"28":1,"32":1,"35":1,"39":4,"50":2,"53":1,"121":1,"126":1}}],["born",{"2":{"40":1}}],["border",{"2":{"32":1,"54":2,"73":2,"78":1,"79":1,"91":1,"139":1}}],["book",{"2":{"39":6,"50":1}}],["booting",{"2":{"19":1}}],["boilerplates",{"2":{"90":1}}],["boilerplate",{"2":{"29":1,"89":1}}],["bound",{"2":{"28":3}}],["boundary",{"2":{"19":1}}],["bower",{"2":{"19":3}}],["bonuses",{"2":{"1":1}}],["body>",{"2":{"63":1,"78":2,"79":2}}],["body",{"2":{"0":2,"63":1,"78":1,"79":2,"91":1,"135":1}}],["bypass",{"2":{"40":1}}],["by",{"0":{"119":1},"2":{"1":5,"2":4,"3":5,"7":1,"8":3,"13":1,"18":1,"19":1,"24":3,"28":4,"29":3,"30":1,"31":1,"32":3,"39":3,"40":8,"56":2,"83":1,"100":1,"101":1,"118":1,"123":2,"125":1,"130":1,"135":1,"139":2}}],["bedroom",{"2":{"40":1}}],["benefit",{"2":{"40":1}}],["believed",{"2":{"39":1}}],["belong",{"2":{"28":1}}],["below",{"2":{"3":1,"49":1,"53":1,"54":1}}],["besides",{"2":{"33":1,"39":1}}],["best",{"0":{"13":1},"1":{"14":1,"15":1,"16":1},"2":{"0":1,"1":1,"10":1,"13":2,"19":2,"26":1,"39":5,"48":1,"50":1,"89":3,"90":2}}],["beautiful",{"2":{"31":1,"40":1}}],["beyond",{"2":{"29":1}}],["better",{"2":{"29":1,"36":1,"39":2,"40":1,"126":1}}],["between",{"2":{"3":1,"13":1,"26":2,"28":2,"29":1,"39":2,"40":1,"53":1,"66":1}}],["behavior",{"2":{"29":1}}],["behind",{"2":{"29":1}}],["beforehand",{"2":{"39":2}}],["before",{"2":{"8":1,"39":1,"40":1}}],["been",{"2":{"8":1,"24":1,"29":1,"40":2,"135":1}}],["beginners",{"2":{"19":1,"50":1}}],["beginner",{"2":{"4":1,"39":1}}],["becoming",{"2":{"89":1}}],["become",{"2":{"26":1,"28":1,"29":1,"31":2,"32":1,"33":1,"39":1}}],["becomes",{"2":{"3":1,"28":2}}],["became",{"2":{"28":2}}],["because",{"2":{"1":1,"4":1,"7":1,"24":1,"28":1,"32":1,"40":1}}],["being",{"2":{"1":1}}],["be",{"2":{"0":1,"1":2,"2":2,"7":9,"8":3,"13":5,"17":4,"19":2,"24":3,"26":2,"27":3,"28":9,"29":9,"30":4,"31":1,"32":3,"35":1,"36":2,"39":6,"40":6,"50":1,"53":1,"56":3,"66":3,"79":3,"83":2,"85":2,"86":3,"89":2,"90":2,"91":2,"93":1,"100":1,"110":1,"123":1,"130":1,"137":1}}],["skeleton",{"2":{"89":1}}],["sky",{"2":{"59":1,"76":1,"79":1}}],["skill",{"2":{"31":1,"39":1}}],["snippets",{"2":{"97":1,"118":1}}],["snickerbockers",{"2":{"7":2}}],["snapshot",{"2":{"56":1}}],["sd",{"2":{"51":1}}],["sw",{"2":{"40":1,"48":1}}],["swagger",{"2":{"39":1}}],["switch",{"2":{"34":1,"54":1,"93":1}}],["switching",{"2":{"4":1,"66":1,"119":1,"139":2}}],["swiper",{"2":{"22":1}}],["sleeping",{"2":{"40":1}}],["slowing",{"2":{"32":1}}],["slower",{"2":{"28":2}}],["slot",{"2":{"12":1}}],["slidingheader",{"0":{"116":1}}],["slider",{"0":{"22":1},"2":{"22":1}}],["slices",{"2":{"26":1}}],["sliced",{"2":{"26":3}}],["svelte",{"2":{"19":3,"29":2}}],["svgo",{"2":{"19":10}}],["svgs",{"2":{"18":1}}],["svgresources",{"2":{"10":4}}],["svg",{"2":{"9":2,"10":2,"19":2,"95":1}}],["syntax",{"2":{"86":1}}],["synthesizing",{"2":{"28":1}}],["synctex",{"2":{"19":1}}],["systems",{"2":{"29":2,"32":1}}],["system",{"2":{"0":1,"1":4,"29":2,"31":1,"93":1}}],["smartphone",{"2":{"40":2}}],["smaller",{"2":{"29":1,"127":1}}],["small",{"2":{"1":2,"2":1,"8":1,"20":1,"26":2,"28":1,"31":1,"40":1}}],["smoothly",{"2":{"26":1}}],["smoothscrolling",{"2":{"19":1}}],["sftp",{"2":{"19":1}}],["sfc",{"2":{"19":2,"29":1}}],["s3",{"2":{"17":1}}],["src=",{"2":{"8":3,"9":1,"61":2,"78":2,"79":2,"111":1}}],["src",{"2":{"8":1,"18":2,"26":5,"97":1,"125":1}}],["ssg",{"0":{"40":1},"2":{"40":3}}],["ssd",{"2":{"19":1}}],["ssrs",{"2":{"40":1}}],["ssr",{"0":{"40":1},"2":{"19":1,"28":2,"40":8}}],["ss06",{"2":{"19":1}}],["ss03",{"2":{"19":1}}],["ss02",{"2":{"19":1}}],["ss01",{"2":{"19":1}}],["ssl",{"2":{"17":2}}],["ssh",{"2":{"7":14,"19":2}}],["sso",{"2":{"1":2}}],["sql",{"2":{"4":1,"7":1,"19":1,"28":2,"39":1}}],["sh$",{"2":{"83":1,"84":1,"85":1,"88":1}}],["sheet",{"0":{"41":1},"1":{"42":1,"43":1,"44":1,"45":1,"46":1,"47":1},"2":{"42":1,"43":1,"44":1,"45":4}}],["shell",{"2":{"19":1,"26":1,"27":2,"40":1}}],["shims",{"2":{"19":1}}],["sh",{"2":{"19":2,"63":2}}],["shrinkwrap",{"2":{"19":2}}],["shnpx",{"2":{"18":1}}],["shpnpm",{"2":{"18":1}}],["shadow",{"2":{"32":1}}],["shallowref",{"2":{"24":2}}],["shared",{"2":{"12":1,"19":1,"26":2,"28":1}}],["share",{"2":{"12":1,"13":1,"28":1}}],["sharing",{"2":{"3":1}}],["shaking",{"2":{"10":1,"33":1}}],["showcase",{"2":{"90":1,"121":1}}],["show",{"2":{"40":1}}],["showed",{"2":{"39":1,"40":1}}],["shows",{"2":{"28":1}}],["showsuggestionsassnippets",{"2":{"19":1}}],["showdocumentation",{"2":{"19":1}}],["showing",{"2":{"7":1}}],["shown",{"2":{"3":1,"13":1,"24":1,"29":1,"54":1,"79":1}}],["should",{"2":{"1":3,"2":1,"7":1,"8":1,"13":1,"19":1,"24":2,"28":4,"29":2,"30":1,"32":1,"35":1,"39":1,"56":2,"79":1,"83":1,"86":2,"89":1,"90":1,"111":1,"134":1}}],["shortens",{"2":{"31":1}}],["short",{"2":{"1":1,"39":1,"137":1}}],["sans",{"2":{"54":1,"139":1}}],["sandboxes",{"2":{"19":1}}],["sandbox",{"2":{"18":1}}],["saw",{"2":{"40":1}}],["says",{"2":{"32":1}}],["say",{"2":{"32":1}}],["sass",{"2":{"19":1}}],["sample",{"2":{"7":2}}],["same",{"2":{"1":2,"4":2,"11":3,"18":1,"19":1,"24":1,"28":4,"29":1,"30":2,"32":2,"34":1,"56":1,"89":1,"94":1,"109":1,"123":1}}],["saved",{"2":{"7":1}}],["save",{"2":{"1":1,"2":1,"19":1,"31":1,"33":1,"56":1}}],["saves",{"2":{"1":1,"7":1,"18":1}}],["saving",{"2":{"1":1,"56":1}}],["safely",{"2":{"0":1}}],["scope",{"2":{"137":1}}],["scoped>",{"2":{"9":1}}],["scaffolder",{"2":{"88":1,"90":1}}],["scaffolded",{"2":{"86":1}}],["scaffold",{"2":{"83":1,"90":1}}],["scaffolding",{"0":{"87":1},"1":{"88":1,"89":1},"2":{"83":1,"89":1,"90":1}}],["scalable",{"2":{"26":4,"29":1}}],["scalability",{"2":{"26":1}}],["scales",{"2":{"26":1}}],["scale",{"2":{"26":1}}],["scheme",{"2":{"54":1}}],["school",{"2":{"39":1}}],["screenwidthfactor",{"2":{"91":1}}],["screen",{"0":{"135":1},"2":{"40":1,"83":1,"88":2,"90":1,"97":1,"98":2,"100":1,"118":2,"135":4,"137":1}}],["screens",{"2":{"26":1,"101":1}}],["scrollbar",{"2":{"98":1}}],["scroll",{"2":{"24":1}}],["scrolls",{"2":{"24":1,"116":1}}],["script>",{"2":{"9":1,"14":1,"59":1,"61":2,"63":1,"72":1,"76":1,"78":2,"79":4,"91":1,"95":1,"111":3,"125":1}}],["scripts",{"2":{"7":1,"30":1,"40":1,"121":1}}],["script",{"0":{"108":1},"1":{"109":1,"110":1},"2":{"0":5,"2":2,"7":2,"9":1,"14":1,"19":1,"24":1,"40":1,"59":1,"61":2,"63":1,"72":1,"76":1,"78":2,"79":2,"86":1,"91":1,"95":1,"111":1,"118":1,"125":1}}],["scmitem",{"2":{"19":1}}],["scmgroupinline",{"2":{"19":1}}],["scmgroup",{"2":{"19":1}}],["scm",{"2":{"19":2}}],["scss",{"2":{"9":1,"19":1,"26":2,"86":1,"91":2,"139":1}}],["scenario",{"2":{"1":1,"13":1}}],["sun",{"2":{"51":1}}],["suffer",{"2":{"36":1}}],["sufficient",{"2":{"20":1,"24":1}}],["success",{"2":{"27":1}}],["such",{"2":{"1":1,"2":1,"3":1,"11":1,"12":1,"26":2,"28":1,"40":1,"86":1}}],["suit",{"2":{"54":1}}],["suits",{"2":{"26":1}}],["suitable",{"0":{"27":1},"2":{"2":1,"19":1,"27":1,"28":1,"29":1,"40":2}}],["summary",{"0":{"88":1}}],["sum",{"2":{"19":2}}],["support",{"2":{"24":2,"28":3,"32":2,"39":1,"54":1,"119":1,"123":1,"139":1}}],["supports",{"2":{"18":1,"70":1}}],["supported",{"2":{"10":1,"24":1,"28":1,"33":1,"138":1}}],["supabase",{"2":{"2":2,"39":1}}],["sudo",{"2":{"7":3}}],["subjective",{"2":{"50":1}}],["subdomains",{"2":{"17":1}}],["subdirectory",{"2":{"8":1,"11":1}}],["subdirectories",{"2":{"7":1}}],["substring",{"2":{"10":2}}],["submodules",{"2":{"7":4,"11":2}}],["suggestselection",{"2":{"19":1}}],["suggest",{"2":{"4":1,"39":1,"49":1}}],["suspicious",{"2":{"1":1}}],["suspense",{"2":{"0":1,"13":1}}],["sure",{"2":{"1":1,"39":1}}],["study",{"2":{"39":1}}],["studying",{"2":{"39":1}}],["student",{"2":{"39":1}}],["stylized",{"2":{"31":1}}],["styling",{"0":{"54":1},"2":{"29":1,"34":1,"90":1}}],["stylus",{"2":{"24":1}}],["stylesheet",{"2":{"61":1,"63":2,"78":1,"79":1}}],["styles",{"2":{"26":5,"31":4,"70":1}}],["stylelint",{"2":{"19":4}}],["styleci",{"2":{"19":2}}],["style>",{"2":{"9":1,"54":2,"78":2,"79":2}}],["style",{"2":{"9":1,"19":1,"31":1,"39":2,"48":1,"59":1,"63":1,"72":1,"76":1,"90":1,"114":1,"115":1}}],["style=",{"2":{"9":2}}],["step",{"2":{"40":1}}],["steps",{"2":{"1":1,"7":2}}],["steit",{"2":{"24":1}}],["stick",{"2":{"31":1}}],["sticky",{"2":{"19":1,"113":1,"114":1,"115":1}}],["stickyscroll",{"2":{"19":1}}],["still",{"2":{"13":1,"32":1,"39":1,"40":1}}],["storage",{"2":{"28":1}}],["storages",{"2":{"28":2}}],["story",{"2":{"19":1}}],["storefront",{"2":{"89":1}}],["stored",{"2":{"39":1,"139":1}}],["stores",{"2":{"28":4}}],["store",{"2":{"1":2,"7":1,"12":1,"26":7,"27":1,"28":8,"40":2,"88":1,"89":1,"90":1}}],["stoploading",{"2":{"15":2,"16":2}}],["strengthen",{"2":{"135":1}}],["streets",{"2":{"39":1}}],["stretch",{"2":{"32":1}}],["structuring",{"2":{"35":1}}],["structured",{"2":{"40":1}}],["structures",{"0":{"26":1}}],["structure",{"0":{"25":1},"1":{"26":1,"27":1},"2":{"26":6}}],["strategies",{"2":{"39":1}}],["strategy",{"2":{"26":1,"138":1}}],["straightforward",{"2":{"13":1,"26":1}}],["strong",{"2":{"10":1}}],["strings",{"2":{"32":1}}],["string>",{"2":{"15":1}}],["string",{"2":{"1":1,"3":1,"8":1,"9":6,"24":1,"79":1}}],["star",{"2":{"69":1}}],["starred",{"2":{"59":1,"76":1,"79":1}}],["starter",{"2":{"89":1}}],["started",{"0":{"82":1},"1":{"83":1,"84":1,"85":1}}],["startup",{"2":{"30":1,"118":1,"121":1,"135":1}}],["startloading",{"2":{"15":2,"16":2}}],["start",{"2":{"2":1,"4":1,"39":1,"40":1,"89":1,"137":1}}],["stand",{"2":{"29":1}}],["standalone",{"2":{"2":1,"29":1,"137":1}}],["standards",{"0":{"37":1},"2":{"31":1}}],["standard",{"2":{"1":2,"3":1,"4":1,"20":1,"24":2,"39":1,"94":1,"128":1}}],["stack",{"2":{"28":1,"51":1}}],["stackblitz",{"2":{"19":3}}],["stage",{"2":{"32":1}}],["staged",{"2":{"19":2}}],["staging",{"2":{"7":5}}],["states",{"2":{"28":2}}],["stateful",{"2":{"28":1}}],["state",{"0":{"28":1},"2":{"19":1,"28":15,"29":1,"32":1}}],["statistics",{"2":{"18":1}}],["static",{"2":{"8":1,"17":1,"32":1,"40":3}}],["stash",{"2":{"19":3}}],["s",{"2":{"1":4,"2":2,"4":1,"7":1,"8":1,"9":1,"18":2,"19":3,"20":1,"26":1,"28":5,"29":4,"31":1,"32":3,"39":3,"40":3,"48":3,"56":1,"66":1,"86":1,"89":1,"93":2}}],["splashscreen",{"2":{"83":1}}],["splash",{"0":{"135":1},"2":{"83":1,"88":2,"90":1,"97":1,"118":2,"135":4}}],["split",{"2":{"28":1}}],["splide",{"2":{"22":1}}],["spite",{"2":{"39":1}}],["spinning",{"2":{"19":1}}],["spread",{"2":{"28":1}}],["sponsors",{"2":{"19":1}}],["spend",{"2":{"19":1,"36":1}}],["spec",{"2":{"19":1,"26":3}}],["specifying",{"2":{"83":1}}],["specify",{"2":{"29":1,"32":1,"56":1,"68":1,"119":1}}],["specified",{"2":{"3":1,"126":1}}],["specifications",{"2":{"40":1}}],["specification",{"2":{"39":1,"79":1,"94":1}}],["specifically",{"2":{"3":1}}],["specific",{"2":{"2":1,"3":1,"4":1,"13":1,"26":4,"32":1,"53":1,"86":3,"89":1,"90":3}}],["specialized",{"2":{"3":1}}],["special",{"2":{"3":1,"4":1}}],["speeds",{"2":{"31":1}}],["speed",{"2":{"8":1,"26":1,"31":1,"32":2,"40":1}}],["speaking",{"2":{"1":1,"3":1,"29":1,"32":1}}],["span",{"2":{"53":1}}],["space",{"2":{"18":1}}],["spaces",{"2":{"3":1}}],["spa",{"0":{"40":1},"2":{"1":1,"26":1,"40":10,"90":1}}],["silent",{"2":{"83":1}}],["since",{"2":{"40":1}}],["singleton",{"2":{"28":1}}],["singlequote",{"2":{"19":1}}],["singleclick",{"2":{"19":1}}],["single",{"2":{"1":1,"27":1,"29":1,"40":1}}],["situations",{"2":{"32":1}}],["situation",{"2":{"28":1,"29":1}}],["sites",{"2":{"2":1,"40":2}}],["site",{"2":{"1":7,"2":1,"3":3,"5":1,"7":17,"17":2,"24":2,"26":1,"28":1,"29":1,"30":1,"32":2,"39":3,"40":5,"48":1,"56":1,"89":1,"90":1,"109":1,"110":1,"123":3}}],["simultaneous",{"2":{"32":1}}],["simultaneously",{"2":{"13":1,"32":1}}],["simulates",{"2":{"30":1}}],["similarity",{"2":{"32":1}}],["similar",{"2":{"28":1,"29":1,"39":1,"40":1,"89":1,"101":1,"130":1}}],["simply",{"2":{"32":1}}],["simplified",{"2":{"40":1}}],["simplifies",{"2":{"4":1}}],["simplistically",{"2":{"29":1}}],["simplenavbar",{"0":{"132":1}}],["simpleheader",{"0":{"113":1}}],["simplefooter",{"0":{"103":1}}],["simpledrawer",{"0":{"100":1},"2":{"83":2,"101":1}}],["simpledialog",{"2":{"19":1}}],["simplest",{"2":{"26":1}}],["simpler",{"2":{"24":1}}],["simple",{"2":{"0":1,"1":1,"5":1,"19":4,"24":1,"26":2,"29":1,"39":1,"40":4,"90":1,"113":1,"114":1,"123":2,"136":1}}],["sidebar",{"2":{"109":1,"128":2,"130":2}}],["sidebarlayout",{"2":{"13":2}}],["side",{"2":{"13":2,"27":1,"40":3,"138":1}}],["size=",{"2":{"8":1}}],["size",{"2":{"8":2,"9":5,"15":1,"33":1,"53":3,"56":1}}],["significantly",{"2":{"40":1}}],["significant",{"2":{"24":1,"29":1,"40":1}}],["signing",{"2":{"1":1}}],["sign",{"2":{"1":1}}],["sort",{"2":{"28":1}}],["sonner",{"2":{"23":1}}],["sophisticated",{"2":{"19":1}}],["social",{"2":{"8":1,"118":1}}],["solving",{"2":{"89":3}}],["solvery",{"2":{"39":1}}],["solve",{"2":{"7":1,"8":1,"28":1,"39":1}}],["solid",{"2":{"20":1,"91":1}}],["solutions",{"2":{"40":1,"51":1,"90":1}}],["solution",{"2":{"2":2,"3":2,"4":1,"7":1,"13":1,"19":1,"40":1,"89":1}}],["software",{"2":{"4":1,"17":1,"29":1,"30":1,"38":1}}],["source",{"2":{"3":2,"7":1,"19":4,"26":1,"39":2,"81":1,"109":1}}],["sources",{"2":{"0":1,"3":2,"39":1,"50":1}}],["sooner",{"2":{"33":1}}],["soon",{"2":{"1":1}}],["somehow",{"2":{"40":1}}],["someone",{"2":{"30":1,"40":1}}],["somearr",{"2":{"29":4}}],["sometimes",{"2":{"11":1,"27":1,"28":1,"31":1}}],["something",{"2":{"1":1,"28":1,"30":1,"32":1,"39":1}}],["someimage",{"2":{"8":1}}],["somefunc",{"2":{"2":1}}],["somewhere",{"2":{"2":1}}],["some",{"0":{"16":1},"2":{"1":1,"2":2,"13":2,"17":1,"19":1,"21":1,"24":2,"28":3,"31":1,"32":2,"33":1,"34":1,"39":3,"40":3,"89":1}}],["so",{"2":{"0":1,"1":3,"7":1,"17":2,"19":1,"22":1,"24":1,"26":1,"28":2,"29":1,"32":1,"39":1,"40":3,"86":1,"89":1,"110":1,"126":2}}],["serialised",{"2":{"79":1}}],["serif",{"2":{"54":1,"139":1}}],["serve",{"2":{"29":1}}],["server",{"2":{"0":1,"2":4,"3":8,"4":3,"5":1,"7":7,"8":1,"17":2,"19":6,"24":1,"39":1,"40":13,"123":1}}],["services",{"2":{"0":1,"1":1,"2":5,"11":1,"19":1,"26":3,"28":1,"32":1,"39":1,"90":1,"93":1,"121":1}}],["service",{"0":{"0":1,"138":1},"2":{"0":2,"2":4,"4":1,"19":1,"29":1,"39":1,"40":4,"48":2,"83":1,"88":1,"93":1,"97":1,"118":1,"121":1,"136":1,"138":2}}],["segoe",{"2":{"54":1}}],["seo",{"0":{"40":1},"2":{"40":1}}],["semantic",{"2":{"37":1}}],["semi",{"2":{"19":1}}],["selected",{"2":{"83":1,"139":1}}],["selection",{"2":{"68":1}}],["select",{"2":{"31":2,"83":6,"109":2}}],["self",{"2":{"29":1,"31":1,"39":1}}],["separation",{"2":{"26":1}}],["separately",{"2":{"26":2,"90":1}}],["separated",{"2":{"3":1}}],["separate",{"2":{"0":3,"3":2,"11":2,"19":1,"28":2,"29":1,"31":1,"32":3,"39":1,"138":1}}],["searching",{"2":{"26":1}}],["searchinput",{"2":{"26":1}}],["searchtests",{"2":{"26":1}}],["searchstore",{"2":{"26":1}}],["search",{"2":{"19":1,"26":2,"40":4}}],["several",{"2":{"7":1,"11":1,"13":3,"28":3,"29":1,"30":1,"40":1}}],["seed",{"2":{"94":1}}],["seem",{"2":{"89":1}}],["see",{"2":{"1":1,"8":1,"13":1,"18":2,"19":2,"40":1,"64":1,"80":1,"137":1}}],["secrets",{"2":{"7":2}}],["section",{"2":{"3":1,"24":1,"26":1,"37":1,"109":1}}],["sections",{"2":{"1":1,"26":1}}],["seconds",{"2":{"19":1}}],["secondary",{"2":{"19":1}}],["second",{"2":{"1":2,"19":3,"56":2,"116":2}}],["security",{"2":{"1":5,"19":1,"32":1}}],["sense",{"2":{"28":1}}],["sentry",{"2":{"19":2}}],["sent",{"2":{"1":2}}],["send",{"2":{"4":1,"29":1,"40":1}}],["sends",{"2":{"1":1,"40":1}}],["sending",{"2":{"0":1,"26":1}}],["senior",{"2":{"1":1}}],["setlocale",{"2":{"125":2}}],["setlogoutcallback",{"2":{"0":1}}],["setoptions",{"2":{"94":1}}],["sets",{"2":{"94":1}}],["setsomearr",{"2":{"29":1}}],["setitem",{"2":{"7":1}}],["settimeout",{"2":{"32":1}}],["settings",{"2":{"7":1,"12":2,"19":1,"26":1,"109":1}}],["setting",{"0":{"110":1},"2":{"3":1,"7":1,"18":1,"19":1,"24":4,"89":1,"123":1}}],["setters",{"2":{"28":1}}],["settokencallback",{"2":{"0":1}}],["setup>",{"2":{"9":1,"14":1,"59":1,"72":1,"76":1}}],["setup",{"2":{"0":5,"7":4,"19":1,"24":1,"26":3,"28":1,"86":1,"91":1,"95":1,"125":1}}],["set",{"2":{"0":1,"1":2,"10":3,"15":1,"17":1,"18":2,"19":1,"29":1,"39":1,"40":1,"54":1,"79":1,"91":2,"130":1,"134":1}}],["setbaseurl",{"2":{"0":1}}],["dx",{"2":{"31":1,"48":1}}],["drop",{"2":{"109":1}}],["dropdown",{"2":{"31":1}}],["drawers",{"0":{"99":1},"1":{"100":1,"101":1},"2":{"99":1}}],["drawer",{"2":{"83":1,"90":1,"95":1,"118":2}}],["draw",{"2":{"38":1,"39":1}}],["dream",{"2":{"24":1}}],["driving",{"2":{"39":5}}],["driver",{"2":{"39":2}}],["drive",{"2":{"1":4,"39":1}}],["dribbling",{"2":{"28":1}}],["drilling",{"2":{"13":2}}],["dprint",{"2":{"19":4}}],["dlint",{"2":{"19":4}}],["dash",{"2":{"94":1}}],["days",{"2":{"31":1,"36":1,"39":2}}],["day",{"2":{"20":2,"24":2,"39":1}}],["dangerfile",{"2":{"19":2}}],["dart",{"2":{"19":6}}],["dark",{"2":{"19":1,"54":2,"63":1,"66":1,"70":1,"119":1,"139":2}}],["dates",{"2":{"20":1,"24":1,"53":2,"123":1}}],["date=`date",{"2":{"7":1}}],["date",{"0":{"24":1},"2":{"7":9,"18":1,"19":1,"24":1,"111":1}}],["datalayer",{"2":{"111":3}}],["databases",{"2":{"19":1}}],["database",{"2":{"2":5,"19":1,"28":3}}],["data",{"0":{"55":1,"56":1},"1":{"56":1},"2":{"0":3,"1":2,"2":6,"3":3,"4":1,"7":2,"12":3,"13":4,"18":1,"24":2,"26":1,"28":5,"29":7,"32":1,"39":2,"40":4,"56":6,"66":1,"79":1,"137":1}}],["dynamically",{"2":{"8":1,"29":1,"40":1,"90":1,"91":1,"119":1}}],["dynamic",{"2":{"8":1,"40":1,"56":1,"95":1,"121":1}}],["dt",{"2":{"7":1}}],["d",{"2":{"7":1,"19":16}}],["dual",{"2":{"32":1}}],["duplication",{"2":{"26":1}}],["duplicate",{"2":{"1":1}}],["due",{"2":{"4":1,"29":1}}],["during",{"2":{"3":1,"24":1,"56":2,"118":1,"135":1}}],["diagrams",{"2":{"38":1}}],["dialyzer",{"2":{"19":1}}],["dialogstyle",{"2":{"19":1}}],["dies",{"2":{"28":1}}],["divider",{"2":{"139":1}}],["divided",{"2":{"27":1,"32":1}}],["division",{"2":{"31":1}}],["div>",{"2":{"13":6,"14":1,"91":4,"125":2}}],["div",{"2":{"9":1,"14":2,"63":1,"91":4}}],["dirname",{"2":{"18":1}}],["dirs",{"2":{"7":1}}],["dir=`echo",{"2":{"7":2}}],["dir=your",{"2":{"7":1}}],["dir=dev",{"2":{"7":1}}],["dir=",{"2":{"7":2}}],["dir",{"2":{"7":24,"137":1}}],["direction",{"2":{"91":2}}],["direct",{"2":{"28":1,"56":1}}],["directly",{"2":{"18":1,"24":2,"33":1,"34":1,"40":1,"56":1}}],["directories",{"2":{"9":1}}],["directory",{"2":{"7":3,"27":1,"83":2,"95":1,"97":1}}],["directs",{"2":{"1":1}}],["disappears",{"2":{"98":1}}],["disable",{"2":{"24":1}}],["discussion",{"2":{"28":1}}],["disk",{"2":{"18":1,"19":1}}],["displaying",{"2":{"26":1,"28":2,"32":1}}],["displaylanguage",{"2":{"19":1}}],["display",{"2":{"8":2,"12":1,"40":1,"53":2,"91":1,"137":1}}],["dispatch",{"2":{"7":2}}],["distribution",{"2":{"40":1}}],["distributedfooter",{"0":{"107":1}}],["distributed",{"2":{"40":1,"90":1}}],["dist",{"2":{"7":2,"8":1,"19":1,"59":2,"61":3,"63":2,"72":3,"76":2,"78":3,"79":3}}],["diffeditor",{"2":{"19":1}}],["differing",{"2":{"28":1}}],["differs",{"2":{"3":1}}],["difference",{"2":{"24":1,"28":1,"29":1,"39":1}}],["differences",{"2":{"1":1,"29":1}}],["differently",{"2":{"18":1,"40":1}}],["different",{"2":{"1":2,"2":1,"10":2,"12":1,"18":1,"24":1,"26":4,"28":1,"29":3,"30":1,"32":3,"40":1,"116":1,"120":1,"121":3,"138":1}}],["diffdecorationsgutterwidth",{"2":{"19":1}}],["difficulties",{"2":{"4":1}}],["difficult",{"2":{"1":1,"39":1}}],["did",{"2":{"0":1,"24":1}}],["degree",{"2":{"86":1}}],["demo",{"0":{"64":1,"68":1,"80":1},"2":{"64":1,"68":1,"80":1}}],["demonstrates",{"2":{"28":1}}],["dead",{"2":{"40":1}}],["debounce",{"2":{"33":1}}],["debugging",{"2":{"24":1}}],["debuganyway",{"2":{"19":1}}],["debug",{"2":{"19":1}}],["deno",{"2":{"19":2}}],["deep",{"2":{"9":1,"121":1}}],["defining",{"2":{"89":1}}],["definitions",{"2":{"32":1}}],["definition",{"2":{"28":1}}],["defined",{"2":{"139":1}}],["define",{"2":{"28":1,"29":1}}],["defineconfig",{"2":{"18":1,"110":1}}],["defineprops",{"2":{"9":1}}],["defaultopentab",{"2":{"53":1}}],["defaultoptions",{"2":{"53":1,"59":1,"72":1,"76":1}}],["defaultlayout",{"2":{"26":2}}],["defaultformatter",{"2":{"19":4}}],["default",{"0":{"119":1},"2":{"0":1,"7":2,"9":6,"18":1,"19":2,"54":1,"56":1,"94":1,"110":1,"125":1}}],["detailed",{"2":{"32":1}}],["details",{"0":{"96":1},"1":{"97":1,"98":1},"2":{"8":1,"12":1,"13":1,"26":1,"37":1,"38":1,"109":1}}],["determined",{"2":{"1":1}}],["determines",{"2":{"1":1}}],["desired",{"2":{"79":2,"86":1}}],["designed",{"2":{"31":1}}],["designer",{"2":{"19":2}}],["design",{"2":{"0":1,"10":1,"26":6,"27":2,"29":1,"39":2,"48":1,"50":1,"88":1,"90":1}}],["desktop",{"2":{"32":1,"40":1,"91":3,"100":1,"128":1,"130":1}}],["desc",{"2":{"53":1}}],["descendant",{"2":{"28":2}}],["describe",{"2":{"38":1,"50":1}}],["describes",{"2":{"7":1}}],["description",{"2":{"7":1,"26":1,"40":1,"66":1,"134":3,"137":1}}],["delve",{"2":{"26":1}}],["deleting",{"2":{"24":1}}],["delete",{"2":{"1":1,"15":1,"24":1}}],["delivery",{"2":{"5":1}}],["de",{"2":{"4":1,"94":1}}],["deception",{"2":{"40":1}}],["decided",{"2":{"32":3}}],["decides",{"2":{"1":1,"28":1}}],["decomposition",{"2":{"29":1}}],["decomposed",{"2":{"26":1}}],["declensions",{"2":{"24":1,"123":1}}],["declared",{"2":{"3":2,"28":2}}],["declaration",{"2":{"3":1}}],["decade",{"2":{"10":1}}],["devdependencies",{"2":{"18":1,"19":1}}],["dev",{"2":{"7":10,"17":2,"18":1,"28":1,"40":1,"84":1,"85":1,"137":1}}],["devops",{"2":{"5":1}}],["developing",{"2":{"29":1,"32":1,"40":1,"86":1}}],["develop",{"2":{"29":1}}],["developed",{"2":{"11":1,"26":1,"27":1}}],["developers",{"2":{"13":1,"30":1,"31":2,"39":1,"50":1,"88":1,"90":2}}],["developer",{"2":{"2":2,"5":1,"28":3,"31":1,"38":1,"39":4,"48":2,"51":1,"86":1,"89":2,"93":1}}],["development",{"0":{"49":1,"120":1},"2":{"3":2,"5":1,"11":1,"17":1,"19":4,"24":1,"26":3,"29":1,"30":3,"31":2,"32":1,"39":1,"40":1,"89":2,"137":1}}],["devtoolsformatters",{"2":{"24":3}}],["devtools",{"2":{"2":1,"24":2,"28":4,"126":1}}],["deposit",{"2":{"123":1}}],["deposits",{"2":{"1":1}}],["deprecated",{"2":{"28":1}}],["deployed",{"2":{"7":2,"26":1}}],["deploy",{"0":{"108":1},"1":{"109":1,"110":1},"2":{"7":21,"39":1,"90":1,"109":3,"118":2}}],["deployments",{"2":{"26":1}}],["deployment",{"0":{"109":1},"2":{"5":1,"7":3,"109":2,"121":1}}],["depend",{"2":{"29":1}}],["dependency",{"2":{"28":1,"31":2,"33":1,"86":1}}],["dependencies",{"0":{"33":1},"2":{"7":2,"24":1,"29":2,"40":1,"66":1,"86":1,"124":1,"126":1}}],["depending",{"2":{"1":1,"8":1,"39":1}}],["depends",{"2":{"0":1,"3":1,"32":1}}],["dozens",{"2":{"18":1,"19":1}}],["down",{"2":{"12":1,"29":1,"32":1,"50":1,"109":1,"116":1}}],["downloading",{"2":{"24":1,"123":1}}],["downloaded",{"2":{"8":1,"40":1,"56":1}}],["download",{"2":{"7":1,"39":1}}],["don",{"2":{"7":1,"8":1,"13":1,"29":1,"33":2,"34":1,"40":2,"110":1,"126":1}}],["done",{"2":{"1":2,"30":1,"36":1,"86":1,"97":1}}],["document",{"0":{"38":1},"2":{"13":1,"31":1,"39":1}}],["documentation",{"2":{"7":1,"8":1,"13":2,"28":1,"38":1,"39":3,"40":1,"48":1,"50":1,"56":1,"66":1,"89":1}}],["docs",{"2":{"7":1,"17":1}}],["dockerignore",{"2":{"19":1}}],["dockerfile",{"2":{"19":2}}],["docker",{"0":{"6":1},"2":{"19":2}}],["domains",{"2":{"3":1}}],["domain",{"2":{"3":6,"17":4,"26":1,"39":1,"110":2,"134":1}}],["doe",{"2":{"1":2}}],["doesn",{"2":{"2":1,"19":2,"29":1,"33":1}}],["does",{"2":{"0":1,"1":4,"3":1,"19":2,"24":3,"28":1,"29":1,"40":1,"50":1,"138":1}}],["do",{"2":{"0":1,"2":3,"3":1,"17":1,"18":1,"19":1,"24":1,"28":2,"29":2,"30":1,"31":1,"32":2,"33":1,"35":1,"36":1,"39":4,"40":2,"86":1,"139":1}}],["rgba",{"2":{"54":3,"78":3,"79":3,"139":6}}],["richfooter",{"0":{"104":1}}],["rip",{"2":{"28":1}}],["rigor",{"2":{"4":1}}],["rights",{"2":{"1":1}}],["right",{"2":{"1":3,"19":2,"24":1,"39":1,"40":1,"98":1,"123":1,"136":1}}],["rspack",{"2":{"19":12}}],["rc",{"2":{"19":1}}],["ruslan",{"2":{"51":2}}],["rush",{"2":{"19":1}}],["rust",{"2":{"19":1}}],["rustfmt",{"2":{"19":2}}],["ruby",{"2":{"19":1}}],["ru",{"2":{"19":3,"50":2}}],["rules",{"2":{"19":2,"29":1,"39":1}}],["runtime",{"2":{"32":1}}],["running",{"2":{"30":1}}],["runs",{"2":{"7":2}}],["run",{"2":{"2":2,"7":9,"19":3,"32":1,"40":2,"137":1}}],["r",{"2":{"7":2,"28":1,"50":2}}],["rf",{"2":{"7":4}}],["rm",{"2":{"7":3}}],["range",{"2":{"89":1}}],["rantime",{"2":{"32":1}}],["raise",{"2":{"38":1}}],["ram",{"2":{"19":1,"126":1}}],["raw",{"2":{"8":2,"10":1,"18":1}}],["rather",{"2":{"2":1,"4":1,"89":1}}],["rarely",{"2":{"1":1}}],["roboto",{"2":{"139":1}}],["robust",{"2":{"29":1}}],["row",{"2":{"91":1}}],["room",{"2":{"40":1}}],["root",{"2":{"7":2,"10":1,"12":2,"54":1,"73":1,"139":1}}],["routine",{"2":{"29":1}}],["routing",{"0":{"129":1},"2":{"26":1}}],["router",{"2":{"13":4,"26":4,"86":1,"129":1}}],["routes",{"2":{"13":2,"27":1,"129":1}}],["roughly",{"2":{"1":1,"3":1,"32":1}}],["rollup",{"2":{"18":2,"19":2}}],["rollback",{"2":{"7":1}}],["roles",{"2":{"1":1,"29":1}}],["role",{"2":{"1":2,"26":1,"28":1,"29":1,"39":1}}],["rbac",{"2":{"1":1}}],["rtl",{"2":{"24":1,"123":1}}],["rt",{"2":{"1":4,"48":1,"54":21,"73":10,"78":10,"79":13}}],["rpc",{"0":{"94":1},"2":{"0":1,"4":7,"39":1,"83":1,"93":1,"94":5,"118":1}}],["rebuilt",{"2":{"56":1}}],["retrieving",{"0":{"56":1}}],["returns",{"2":{"1":2,"2":1,"8":1,"24":1,"93":1}}],["return",{"2":{"0":1,"3":1,"9":2,"10":2,"15":1,"93":1,"94":1}}],["reviews",{"2":{"40":1}}],["rehydration",{"2":{"40":1}}],["rewriting",{"2":{"28":1,"30":1}}],["reduces",{"2":{"32":1,"40":1}}],["reduce",{"2":{"30":1,"31":1,"56":1}}],["reddit",{"2":{"28":1,"50":1}}],["redis",{"2":{"28":1}}],["registration",{"2":{"121":1}}],["registers",{"2":{"29":1}}],["register",{"2":{"26":1,"28":1,"39":2}}],["regarding",{"2":{"40":1}}],["regulate",{"2":{"13":1}}],["regular",{"0":{"35":1},"2":{"1":1,"18":1,"40":1}}],["reusable",{"2":{"26":2,"90":1}}],["reuse",{"2":{"11":1}}],["renting",{"2":{"40":1}}],["renaming",{"2":{"35":1}}],["renamed",{"2":{"8":1}}],["renovate",{"2":{"19":2}}],["rendering",{"2":{"32":2,"40":2}}],["renderwhitespace",{"2":{"19":1}}],["render",{"2":{"17":1}}],["refactoring",{"0":{"35":1},"2":{"35":1}}],["refs",{"2":{"28":2}}],["ref",{"2":{"15":1,"24":7,"28":6,"29":2,"93":1}}],["reference",{"2":{"39":2}}],["referred",{"2":{"27":1}}],["refer",{"2":{"8":1}}],["refreshes",{"2":{"1":1}}],["refresh",{"2":{"1":1,"48":1}}],["recalculate",{"2":{"29":1}}],["recent",{"2":{"24":1,"123":1}}],["recentchange",{"2":{"19":1}}],["receive",{"2":{"40":2}}],["receives",{"2":{"3":1,"40":1}}],["receiving",{"2":{"1":1,"56":1}}],["recursive",{"2":{"7":1}}],["recognition",{"2":{"135":1}}],["recognized",{"2":{"50":1}}],["recommend",{"2":{"24":1}}],["recommended",{"2":{"7":1,"17":1,"18":1,"19":1,"24":1,"94":1,"126":1,"139":1}}],["reconnection",{"2":{"4":1}}],["reason",{"2":{"39":1}}],["reasons",{"2":{"31":1}}],["react",{"2":{"29":6,"39":2}}],["reactivity",{"2":{"28":1,"29":7,"123":1}}],["reactive",{"2":{"15":2,"24":9,"28":11,"29":11,"90":1}}],["reality",{"2":{"33":1}}],["realized",{"2":{"32":2}}],["really",{"2":{"10":1,"30":1}}],["real",{"2":{"2":1,"26":1,"30":1,"39":2}}],["readdir",{"2":{"32":1}}],["readable",{"2":{"24":1}}],["ready",{"2":{"19":1,"89":2,"90":2}}],["readme",{"2":{"19":2}}],["read",{"2":{"0":1,"28":2,"39":2,"40":1,"61":1,"95":1}}],["re",{"2":{"1":2}}],["remain",{"2":{"28":1,"94":1}}],["remains",{"2":{"0":1}}],["remix",{"2":{"19":2}}],["removed",{"2":{"7":1,"135":1}}],["removed=`ls",{"2":{"7":1}}],["remove",{"2":{"7":2}}],["removes",{"2":{"1":1}}],["remote",{"2":{"7":12,"19":5}}],["rel=",{"2":{"61":1,"63":2,"78":1,"79":1}}],["reliably",{"2":{"19":1}}],["reliable",{"2":{"1":1,"7":1}}],["relevance",{"2":{"50":1}}],["relevant",{"2":{"2":1,"89":1}}],["releasetimeline",{"2":{"59":2,"72":2,"76":2}}],["releases",{"2":{"53":6,"56":2,"66":2}}],["release",{"0":{"55":1,"65":1,"66":1},"1":{"56":1,"66":1,"67":1,"68":1,"69":1},"2":{"19":4,"53":3,"56":2,"58":3,"59":4,"61":4,"63":6,"64":1,"70":1,"71":3,"72":5,"73":1,"75":3,"76":4,"78":3,"79":4,"80":1,"138":1}}],["releaserc",{"2":{"19":2}}],["reload",{"2":{"7":2,"121":1}}],["related",{"2":{"0":1,"1":1,"27":1,"28":1,"32":1}}],["resume",{"2":{"39":1}}],["result",{"0":{"127":1},"2":{"1":1,"2":1,"7":1,"19":1,"28":1,"84":1,"86":1,"89":1}}],["respect",{"2":{"28":1}}],["responsiveness",{"2":{"32":1}}],["responsible",{"2":{"1":1,"13":2,"28":2,"29":1,"32":1,"139":1}}],["responses",{"2":{"56":1}}],["response",{"2":{"3":4,"7":2}}],["resides",{"2":{"28":1}}],["resx",{"2":{"19":2}}],["resolutions",{"2":{"32":1,"98":1,"100":1}}],["resolver",{"2":{"18":1,"19":1}}],["resolve",{"2":{"18":2}}],["resources",{"0":{"8":1},"1":{"9":1,"10":1},"2":{"1":1,"2":1,"3":1,"8":7,"11":3,"18":1,"26":1,"27":1,"39":1,"40":3,"126":1,"135":1,"138":1}}],["resource",{"0":{"49":1},"2":{"1":3,"3":6,"8":3,"11":1,"32":1}}],["reserve",{"2":{"13":1}}],["resets",{"2":{"1":1}}],["restrictions",{"2":{"40":1}}],["rest",{"0":{"4":2,"93":1},"2":{"0":1,"4":2,"56":3,"66":1,"83":1,"93":1,"94":2}}],["repetitive",{"2":{"29":1}}],["repeated",{"2":{"0":1}}],["represents",{"2":{"26":1}}],["representation",{"2":{"8":1}}],["replacing",{"2":{"24":1,"29":1}}],["replaced",{"2":{"24":1}}],["replacement",{"2":{"24":2,"66":1}}],["replace",{"2":{"0":1,"31":2,"32":1,"34":1,"111":1}}],["replit",{"2":{"19":1}}],["repositories",{"2":{"53":1,"66":2}}],["repository",{"0":{"85":1},"2":{"5":1,"7":4,"11":1,"19":1,"39":1,"53":1,"59":1,"66":2,"68":1,"76":1,"109":4,"110":1}}],["repo",{"2":{"19":1,"52":1,"53":2,"59":1,"63":1,"72":1,"76":1,"78":1,"79":1}}],["require",{"2":{"12":1,"17":1,"66":1}}],["required",{"2":{"2":1,"7":1,"52":1,"56":1}}],["requirements",{"2":{"1":1,"26":1,"31":1,"40":1}}],["requiresauth",{"2":{"13":1}}],["requires",{"2":{"0":1,"4":1,"10":1,"17":1,"18":1,"24":1,"26":1,"28":1,"123":1}}],["requested",{"2":{"1":1,"3":2}}],["requesting",{"2":{"1":1}}],["requests",{"0":{"55":1},"1":{"56":1},"2":{"0":3,"3":3,"4":1,"19":2,"32":1,"40":3,"56":3,"66":1,"94":1}}],["request",{"2":{"0":5,"1":2,"3":7,"40":2,"56":4}}],["og",{"2":{"134":6}}],["oop",{"2":{"28":1,"29":1,"32":3}}],["ok",{"2":{"24":2}}],["os",{"2":{"19":1,"32":1}}],["overriding",{"2":{"139":1}}],["override",{"2":{"54":1}}],["overrides",{"2":{"19":1}}],["overflow",{"2":{"98":1}}],["overwrite",{"2":{"83":3}}],["over",{"0":{"34":1},"2":{"28":1,"29":1,"32":1,"40":1,"93":1}}],["overhead",{"2":{"26":1}}],["overview",{"2":{"20":1,"26":1}}],["overuse",{"2":{"13":2}}],["obtained",{"2":{"123":1}}],["obvious",{"2":{"50":1}}],["obj",{"2":{"24":1}}],["objectives",{"0":{"90":1}}],["objective",{"2":{"50":1}}],["object",{"2":{"10":1,"24":5,"28":1,"29":2,"32":3,"39":1}}],["objects",{"2":{"3":2,"24":4,"28":1,"29":1}}],["observer",{"2":{"24":1}}],["obsolete",{"2":{"18":1,"20":1,"24":1,"28":1,"31":1,"33":1,"89":1}}],["old",{"2":{"7":1,"10":1,"24":2,"32":1,"39":1}}],["outdated",{"2":{"19":1,"39":1}}],["out",{"2":{"19":2,"20":1,"24":1,"28":1,"29":1,"39":2,"56":1,"64":1,"80":1,"90":1,"130":1}}],["outputs",{"2":{"32":1}}],["output",{"2":{"19":2,"32":2,"40":1}}],["outer",{"2":{"13":1}}],["outside",{"2":{"3":1,"28":1,"32":1}}],["our",{"2":{"7":2}}],["occurs",{"2":{"40":1}}],["occur",{"2":{"3":1}}],["otherwise",{"2":{"24":1}}],["others",{"2":{"13":1,"26":2,"29":1,"121":1}}],["other",{"2":{"2":2,"3":1,"4":1,"5":1,"7":1,"8":2,"11":1,"17":2,"19":3,"24":1,"26":1,"27":1,"28":6,"29":2,"31":1,"32":3,"38":1,"40":3,"89":4,"90":1,"121":3,"123":1}}],["owner",{"2":{"52":1,"53":2,"59":1,"63":1,"72":1,"76":1,"78":1,"79":1}}],["own",{"2":{"2":2,"4":1,"7":3,"18":2,"24":1,"26":1,"27":1,"28":2,"31":2,"33":1,"34":1,"40":1,"111":1}}],["opinion",{"2":{"50":1}}],["optimise",{"2":{"56":2}}],["optimization",{"2":{"40":1}}],["optional",{"2":{"49":1,"59":1,"76":1}}],["option",{"2":{"1":1,"39":1,"56":6}}],["options=",{"2":{"59":1,"61":1,"72":1,"76":1,"78":1,"79":1}}],["options",{"0":{"2":1,"53":1,"117":1,"118":1},"1":{"118":1,"119":1,"120":1,"121":1},"2":{"1":1,"7":1,"12":1,"17":1,"18":1,"19":1,"24":2,"52":1,"59":4,"63":2,"72":4,"76":4,"79":4,"83":2,"90":3,"118":1}}],["operation",{"2":{"40":1}}],["operations",{"2":{"24":1}}],["open=",{"2":{"116":1}}],["opened",{"2":{"100":1}}],["opengraph",{"2":{"83":1}}],["opening",{"2":{"56":1}}],["openclose",{"2":{"19":1}}],["open",{"2":{"2":1,"39":2,"81":1,"83":1,"88":1,"97":1,"118":1,"134":1}}],["oauth",{"2":{"1":2}}],["ontaskerrors",{"2":{"19":1}}],["onecolumnlayout",{"0":{"130":1}}],["ones",{"2":{"18":1,"39":1,"139":1}}],["one",{"2":{"1":1,"3":1,"7":2,"8":2,"13":6,"18":2,"24":1,"28":8,"30":1,"31":1,"32":6,"39":1,"40":1,"54":1,"89":2,"116":1,"124":1}}],["once",{"2":{"1":1,"24":1}}],["onlyenabledextensions",{"2":{"19":1}}],["only",{"2":{"1":1,"2":1,"3":2,"5":1,"10":1,"12":1,"13":1,"19":5,"24":3,"28":3,"29":1,"31":2,"32":1,"39":2,"56":1,"79":2,"83":1,"86":2,"123":1,"126":1}}],["online",{"2":{"1":1,"17":1,"18":1,"19":1,"27":1,"40":1,"89":1,"90":1,"121":1}}],["onmounted",{"2":{"0":3,"135":1}}],["on",{"2":{"0":2,"1":9,"2":5,"3":3,"4":5,"5":2,"7":9,"8":2,"11":1,"17":4,"18":2,"19":7,"24":4,"26":6,"28":10,"29":8,"30":5,"31":3,"32":9,"36":2,"39":13,"40":10,"48":2,"50":1,"54":1,"56":1,"66":2,"83":1,"89":3,"91":1,"98":1,"100":2,"101":1,"121":2,"123":1,"128":1,"135":1,"137":1}}],["org",{"2":{"94":1}}],["organismheader",{"2":{"26":1}}],["organismpokemoncard",{"2":{"26":1}}],["organisms",{"2":{"26":2}}],["organise",{"2":{"13":1}}],["organizing",{"2":{"17":1}}],["organized",{"2":{"26":1}}],["organizes",{"2":{"26":2}}],["organizeimports",{"2":{"19":1}}],["organize",{"2":{"4":1,"26":1,"29":1}}],["oreilly",{"2":{"39":1}}],["orientation",{"2":{"137":1}}],["oriented",{"2":{"29":2,"32":1}}],["originally",{"2":{"40":1}}],["origin",{"2":{"3":7}}],["ordinary",{"2":{"29":1}}],["orders",{"2":{"40":1}}],["order",{"2":{"1":1,"4":1,"26":1,"40":1}}],["oracle",{"2":{"2":1,"17":1}}],["or",{"0":{"4":1,"22":1},"2":{"0":4,"1":1,"2":2,"3":4,"4":1,"8":3,"10":1,"11":1,"12":3,"17":1,"18":3,"24":3,"26":5,"28":11,"29":4,"31":4,"32":3,"33":1,"34":2,"39":6,"40":3,"49":3,"53":4,"66":1,"79":2,"83":1,"86":1,"89":4,"91":1,"93":1,"123":1}}],["offline",{"2":{"40":2}}],["off",{"2":{"19":2,"28":1,"29":1}}],["officially",{"2":{"28":1}}],["official",{"2":{"13":1,"19":1,"28":1,"50":1}}],["offers",{"2":{"29":1}}],["offer",{"2":{"2":1,"31":1,"39":1}}],["often",{"2":{"8":1,"24":1,"30":1,"32":1,"39":1,"40":1,"123":1}}],["of",{"0":{"34":1,"49":1,"58":1},"2":{"0":6,"1":12,"2":2,"3":8,"4":5,"5":3,"7":13,"8":4,"10":1,"11":2,"12":2,"13":1,"17":1,"18":5,"19":9,"20":3,"24":20,"26":12,"27":4,"28":30,"29":17,"30":7,"31":12,"32":10,"33":4,"34":1,"36":2,"38":2,"39":11,"40":20,"48":4,"49":1,"50":5,"51":1,"53":3,"54":1,"56":4,"59":1,"66":3,"83":2,"85":1,"86":1,"88":1,"89":3,"90":6,"93":4,"94":2,"95":1,"97":1,"99":1,"102":1,"109":2,"110":1,"118":3,"120":2,"121":6,"123":7,"124":3,"125":1,"129":1,"130":1,"135":1,"138":5}}],["wc",{"2":{"80":1}}],["would",{"2":{"28":2,"39":1,"86":1}}],["won",{"2":{"26":1}}],["word",{"2":{"49":1}}],["wordseparators",{"2":{"19":1}}],["words",{"2":{"5":1,"28":2,"40":1,"89":1}}],["worth",{"2":{"39":1}}],["world",{"2":{"31":1,"32":2,"40":1}}],["workable",{"2":{"89":1}}],["workbox",{"2":{"40":2,"138":1}}],["workbench",{"2":{"19":11}}],["worker",{"0":{"138":1},"2":{"32":1,"40":3,"48":2,"83":1,"88":1,"97":1,"118":1,"136":1,"138":2}}],["workers",{"2":{"32":2}}],["worked",{"2":{"0":1}}],["workflow",{"2":{"7":2,"83":1,"118":1}}],["workflows",{"2":{"7":3}}],["workingissueformatscm",{"2":{"19":1}}],["working",{"2":{"2":1,"3":1,"5":2,"8":1,"19":1,"20":1,"21":1,"29":1,"48":2,"86":1}}],["workspace",{"2":{"19":3}}],["works",{"2":{"1":2,"18":1,"24":3,"26":1,"39":1,"40":2,"64":1,"80":1,"126":1}}],["work",{"2":{"0":1,"1":1,"2":2,"4":1,"7":1,"11":1,"13":1,"19":5,"26":3,"28":2,"30":1,"33":1,"39":2,"66":1,"136":1}}],["worsens",{"2":{"31":1}}],["worse",{"2":{"0":1}}],["www",{"2":{"3":1,"7":6,"111":1}}],["welcome",{"2":{"49":1,"81":1}}],["well",{"2":{"8":1,"19":2,"22":1,"24":1,"29":1,"32":1,"39":3,"40":2,"89":1,"90":1,"126":1}}],["went",{"2":{"31":1}}],["weight",{"2":{"31":1}}],["were",{"2":{"24":1,"27":1,"29":1,"31":1,"39":1,"40":1}}],["webapp",{"0":{"83":1,"87":1},"1":{"84":1,"88":1,"89":1},"2":{"81":2,"83":7,"85":2,"88":1,"109":2,"110":1,"137":1}}],["webdriverio",{"2":{"30":1}}],["webpack",{"2":{"18":4,"19":13}}],["webp",{"2":{"10":1}}],["webstorm",{"2":{"19":2}}],["website",{"2":{"7":3,"11":1,"17":9,"18":1,"40":2,"48":1,"88":1,"89":1,"90":2,"109":1,"134":1}}],["websocket",{"2":{"4":1}}],["websockets",{"2":{"0":1,"4":3,"39":1,"93":1}}],["webservers",{"2":{"19":1}}],["webserver",{"2":{"3":1,"17":2,"19":1,"40":1}}],["web",{"0":{"27":1,"61":1,"77":1,"84":1},"1":{"78":1,"79":1,"80":1},"2":{"3":3,"4":2,"19":1,"26":2,"30":1,"31":2,"32":3,"40":8,"61":1,"66":2,"79":2,"80":1,"86":2,"89":2,"90":3,"94":1,"137":1}}],["we",{"2":{"1":1,"7":4,"24":2,"31":1,"32":7,"39":1}}],["wrap",{"2":{"31":1,"32":1}}],["wrappers",{"0":{"34":1},"2":{"32":1,"34":1}}],["wrapper",{"2":{"0":1,"29":1,"40":2,"86":1}}],["writes",{"2":{"40":1}}],["write",{"2":{"2":2,"7":1,"28":2,"29":1,"39":1,"40":1}}],["written",{"2":{"1":1,"2":1,"30":1,"66":1}}],["writing",{"2":{"1":1,"2":1,"30":1,"39":1,"40":1}}],["walk",{"2":{"40":1}}],["water",{"2":{"39":1}}],["watch",{"2":{"29":1}}],["watchman",{"2":{"19":2}}],["waiting",{"2":{"26":1}}],["warm",{"2":{"19":1}}],["wants",{"2":{"2":1}}],["want",{"2":{"2":2,"12":1,"24":1,"32":2,"39":1,"109":1}}],["ways",{"2":{"39":1,"56":1}}],["way",{"2":{"1":3,"4":1,"7":2,"13":1,"18":1,"24":1,"26":1,"28":1,"31":2,"40":2,"49":1}}],["was",{"2":{"0":1,"24":1,"28":2,"29":2,"31":1,"40":5}}],["while",{"2":{"13":1}}],["which",{"2":{"0":1,"1":1,"2":1,"3":2,"4":1,"8":2,"16":1,"17":1,"18":1,"19":1,"24":2,"26":1,"27":1,"28":6,"29":4,"31":1,"32":2,"33":1,"40":5,"83":1,"89":2,"109":1,"139":2}}],["why",{"2":{"4":1,"19":1,"28":2,"29":2,"31":2,"32":2}}],["whose",{"2":{"32":1}}],["whole",{"2":{"31":2,"40":1}}],["whom",{"2":{"1":1}}],["who",{"2":{"1":1,"29":2,"39":1}}],["whether",{"2":{"1":2,"13":1,"28":1,"83":1}}],["when",{"0":{"117":1},"1":{"118":1,"119":1,"120":1,"121":1},"2":{"0":1,"1":6,"2":1,"3":2,"4":1,"7":2,"8":1,"19":2,"24":2,"26":1,"28":3,"29":3,"31":1,"32":2,"39":1,"40":9,"53":1,"56":1,"86":1,"90":1,"95":1,"98":1,"128":1,"130":1}}],["where",{"2":{"0":1,"1":1,"2":1,"10":1,"13":1,"17":1,"19":1,"28":2,"29":4,"30":1,"35":1,"40":2,"90":1}}],["whatever",{"2":{"31":1}}],["what",{"2":{"0":2,"1":2,"2":2,"3":1,"4":1,"5":1,"7":1,"10":1,"13":1,"19":1,"21":1,"27":1,"28":3,"29":3,"30":1,"31":1,"32":1,"39":2}}],["wireframe",{"2":{"90":1}}],["wise",{"2":{"27":1}}],["wide",{"2":{"89":1}}],["widgets",{"2":{"26":3,"28":1}}],["width",{"2":{"9":7,"130":2,"139":1}}],["windi",{"2":{"19":10}}],["window",{"2":{"7":1,"19":4,"24":3,"27":1,"79":2,"86":1,"111":2,"137":1}}],["within",{"2":{"24":1,"27":1}}],["without",{"2":{"2":2,"5":1,"12":2,"13":3,"19":1,"24":1,"26":3,"29":2,"30":1,"31":1,"39":1,"40":1,"83":1,"86":1,"89":1,"93":1,"124":1,"130":1,"136":1,"137":1}}],["with",{"2":{"0":2,"1":7,"2":9,"3":2,"4":4,"7":12,"8":2,"10":3,"11":1,"12":1,"13":4,"17":3,"18":3,"19":6,"20":1,"21":1,"24":3,"26":5,"27":1,"28":6,"29":2,"30":3,"31":2,"32":10,"33":1,"34":1,"36":1,"39":8,"40":11,"48":1,"51":1,"59":1,"66":1,"76":1,"83":2,"85":1,"86":2,"88":1,"89":3,"90":8,"91":1,"94":1,"95":2,"101":1,"111":1,"118":1,"119":1,"121":1,"123":2,"126":1,"127":1,"128":1,"138":1}}],["will",{"2":{"0":1,"2":3,"3":3,"4":2,"7":5,"8":1,"10":1,"17":1,"24":3,"28":1,"29":3,"30":4,"31":1,"32":3,"33":1,"34":2,"36":1,"38":1,"39":2,"40":3,"56":1,"83":3,"85":2,"90":1,"93":1,"138":1}}],["pwa",{"0":{"40":1,"136":1},"1":{"137":1,"138":1},"2":{"40":12,"48":1,"83":2,"88":2,"90":1,"118":1}}],["pwd",{"2":{"7":1}}],["pseudo",{"2":{"32":1}}],["psalm",{"2":{"19":1}}],["pc",{"2":{"19":2}}],["pdm",{"2":{"19":2}}],["pdf",{"2":{"8":1,"19":1}}],["python",{"2":{"39":1,"40":1}}],["pyproject",{"2":{"19":2}}],["pyrightconfig",{"2":{"19":2}}],["pieces",{"2":{"32":1}}],["pinia",{"2":{"28":14}}],["picked",{"2":{"19":1}}],["picture",{"2":{"10":1,"40":1}}],["pictures",{"2":{"8":1,"10":1,"40":1}}],["pipelines",{"2":{"19":2}}],["pm2",{"2":{"19":4}}],["pm",{"2":{"19":1}}],["px`",{"2":{"9":4}}],["pnp",{"2":{"19":2}}],["pnpmyarnnpm",{"2":{"58":1,"71":1,"75":1}}],["pnpm",{"2":{"7":12,"18":2,"19":6,"83":3,"84":2,"85":2,"88":1}}],["png`",{"2":{"8":1}}],["png",{"2":{"8":3,"10":3,"95":1}}],["p",{"2":{"7":1}}],["people",{"2":{"32":1}}],["pet",{"2":{"7":1}}],["perfect",{"2":{"29":1}}],["perfectly",{"2":{"29":1}}],["performant",{"2":{"29":1}}],["performance",{"2":{"24":1,"28":1,"33":1,"40":1}}],["performed",{"2":{"29":1}}],["perform",{"2":{"29":1}}],["percent",{"2":{"24":1,"123":1}}],["perspective",{"2":{"28":2}}],["persistentsessionreviveprocess",{"2":{"19":1}}],["person",{"2":{"1":1,"19":1,"39":2}}],["personal",{"2":{"1":1}}],["pereditorgroup",{"2":{"19":1}}],["per",{"2":{"17":1,"29":1,"32":1}}],["permissions",{"2":{"1":1,"7":1}}],["permission",{"2":{"1":1}}],["physically",{"2":{"32":1}}],["phpcs",{"2":{"19":2}}],["phpunit",{"2":{"19":1}}],["php",{"2":{"2":1,"19":2,"39":1,"40":2}}],["photo",{"2":{"1":1}}],["pull",{"0":{"55":1},"1":{"56":1},"2":{"56":3,"66":1}}],["pulls",{"2":{"53":3}}],["pullapprove",{"2":{"19":2}}],["pure",{"2":{"31":1,"36":1,"86":1}}],["purpose",{"2":{"24":1,"28":1,"32":1,"40":1}}],["purposes",{"2":{"7":1}}],["pug",{"2":{"24":1}}],["pugtools",{"2":{"19":1}}],["puppeteer",{"2":{"19":10}}],["publishing",{"2":{"83":1}}],["public",{"2":{"2":1,"8":4,"39":1,"66":1}}],["pubspec",{"2":{"19":3}}],["pubxml",{"2":{"19":2}}],["push",{"2":{"5":1,"7":4,"29":1,"111":1}}],["put",{"2":{"7":1,"8":2,"19":1,"27":1,"28":2,"39":1,"110":1}}],["putting",{"2":{"2":1}}],["puts",{"2":{"1":1}}],["pba",{"2":{"1":1}}],["pops",{"2":{"130":1}}],["populated",{"2":{"28":1}}],["popular",{"2":{"2":1,"7":1,"18":1,"19":1,"24":1,"31":1,"40":1,"90":2,"121":1,"123":1}}],["popups",{"2":{"24":1}}],["polymorphism",{"2":{"32":1}}],["policy",{"2":{"1":2}}],["potentially",{"2":{"26":1}}],["potential",{"2":{"26":2}}],["poorly",{"2":{"24":1}}],["portfolio",{"2":{"88":1,"89":1,"90":1}}],["port",{"2":{"3":1}}],["portal",{"2":{"1":1}}],["position",{"2":{"29":1,"89":1}}],["post",{"2":{"26":1}}],["postcss",{"2":{"19":10}}],["postcssrc",{"2":{"19":10}}],["postman",{"2":{"3":1,"19":1}}],["postgresql",{"2":{"2":1}}],["possibilities",{"2":{"19":1}}],["possibility",{"2":{"1":1,"30":1,"33":1,"90":2}}],["possibly",{"2":{"2":1,"7":1}}],["possible",{"0":{"26":1},"2":{"1":2,"24":1,"28":1,"29":3,"31":1,"32":1,"40":2,"83":1,"86":1,"131":1,"139":1}}],["pokemonmodel",{"2":{"26":1}}],["pokemonservice",{"2":{"26":1}}],["pokemonstatswidget",{"2":{"26":1}}],["pokemonstore",{"2":{"26":1}}],["pokemontests",{"2":{"26":1}}],["pokemonthumbnail",{"2":{"26":1}}],["pokemon",{"2":{"26":3}}],["pokemondetailpage",{"2":{"26":2}}],["pokemondetailtemplate",{"2":{"26":1}}],["pokemondetail",{"2":{"26":1}}],["pokemoncard",{"2":{"26":2}}],["pokemonlisttemplate",{"2":{"26":1}}],["pokemonlist",{"2":{"26":2}}],["poke",{"2":{"2":1}}],["powerful",{"2":{"13":1}}],["power",{"2":{"1":1,"28":1,"32":1}}],["points",{"2":{"50":1}}],["point",{"2":{"0":1,"28":1,"40":2,"48":1,"56":1}}],["pleasant",{"2":{"31":1}}],["please",{"2":{"19":1,"26":1}}],["plenty",{"2":{"2":1}}],["plugging",{"2":{"86":1}}],["plugged",{"2":{"66":2}}],["plug",{"2":{"33":2}}],["plugin",{"2":{"18":2,"19":1,"40":3,"97":3}}],["plugins",{"2":{"18":4,"19":1,"26":3,"28":1,"119":1}}],["plus",{"2":{"1":1,"7":1,"28":1}}],["planned",{"0":{"121":1},"2":{"90":1}}],["planning",{"2":{"26":1}}],["plans",{"2":{"2":2,"17":2}}],["play",{"2":{"39":1}}],["plays",{"2":{"29":1}}],["played",{"2":{"28":1,"39":1}}],["playground",{"2":{"19":1}}],["playwright",{"2":{"19":10}}],["placing",{"2":{"2":1,"40":1}}],["places",{"2":{"40":1}}],["placed",{"2":{"8":2,"17":1}}],["placeholder",{"2":{"2":1}}],["place",{"2":{"0":1,"24":1,"29":1}}],["pr",{"2":{"49":1}}],["practical",{"2":{"39":1}}],["practice",{"2":{"24":1,"28":2,"89":1}}],["practices",{"0":{"13":1},"1":{"14":1,"15":1,"16":1},"2":{"1":1,"31":1,"39":5,"48":1,"50":1,"89":2,"90":2}}],["price",{"2":{"40":1}}],["priority",{"2":{"32":2}}],["prioritize",{"2":{"32":1}}],["primitive",{"2":{"28":1}}],["primitives",{"2":{"24":2}}],["primevue",{"2":{"20":1}}],["private",{"2":{"7":6,"11":1,"28":1,"53":1,"66":1}}],["print",{"2":{"24":1}}],["printwidth",{"2":{"19":1}}],["printf",{"2":{"7":1}}],["printed",{"2":{"3":1}}],["principle",{"2":{"3":1,"29":1}}],["preserving",{"2":{"123":1}}],["presence",{"2":{"29":1,"30":1}}],["presentation",{"2":{"31":1}}],["present",{"2":{"28":1}}],["preprocessor",{"2":{"86":1}}],["preparing",{"2":{"26":1}}],["precisely",{"2":{"40":1}}],["prerenderer",{"2":{"40":1}}],["pre",{"2":{"39":1,"40":1}}],["prevent",{"2":{"98":1}}],["prevalent",{"2":{"39":1}}],["prevalence",{"2":{"29":1}}],["previous",{"2":{"39":1}}],["previously",{"2":{"7":1}}],["preview",{"2":{"19":1}}],["prefer",{"2":{"26":1}}],["preferredtagnamecase",{"2":{"19":1}}],["pretentious",{"2":{"24":1}}],["prettier",{"2":{"19":14}}],["pretty",{"2":{"2":1,"126":2}}],["preloader",{"2":{"13":2,"120":1}}],["proven",{"2":{"48":1,"89":1}}],["providing",{"2":{"13":1}}],["provides",{"2":{"3":1,"26":1}}],["provider",{"2":{"2":2,"32":1}}],["providers",{"2":{"2":1,"4":1,"17":3,"26":1,"39":1,"121":1}}],["provided",{"2":{"2":2,"32":1,"129":1}}],["provide",{"2":{"2":3,"11":1,"12":1,"13":2,"17":2,"28":3,"31":1,"56":1}}],["progressive",{"2":{"40":1}}],["programmatically",{"2":{"24":1}}],["programmers",{"2":{"29":2,"50":1}}],["programmer",{"2":{"24":1,"29":2,"32":3}}],["programming",{"2":{"2":2,"29":3,"39":2}}],["programs",{"2":{"19":1}}],["program",{"2":{"3":1,"24":1,"29":2,"32":1}}],["professional",{"2":{"35":1}}],["probability",{"2":{"30":1}}],["probably",{"2":{"27":1,"29":1,"40":1}}],["problems",{"2":{"3":2,"28":1,"40":1}}],["problem",{"2":{"2":1,"7":1,"8":1,"28":1,"39":1,"40":1}}],["pros",{"2":{"26":1,"28":1,"31":2}}],["proof",{"2":{"26":2}}],["procfile",{"2":{"19":2}}],["processed",{"2":{"39":1}}],["processes",{"2":{"26":1}}],["processing",{"2":{"32":1}}],["processors",{"2":{"32":1}}],["processor",{"2":{"19":1,"32":1}}],["process",{"2":{"5":1,"7":1,"8":1,"11":1,"30":1,"40":1}}],["proj",{"2":{"19":2}}],["projectname",{"2":{"83":1}}],["projects",{"0":{"26":1},"2":{"7":1,"11":2,"18":1,"26":3,"29":1,"30":2,"31":1,"39":1,"66":1,"81":1}}],["project",{"0":{"25":1,"38":1,"59":1,"74":1,"81":1},"1":{"26":1,"27":1,"75":1,"76":1},"2":{"2":1,"5":1,"7":10,"11":3,"17":1,"18":3,"19":1,"26":4,"27":1,"28":1,"31":1,"32":1,"36":1,"38":1,"39":1,"48":2,"56":1,"66":1,"83":6,"84":1,"88":2,"89":1,"109":1}}],["proposed",{"2":{"40":1}}],["property=",{"2":{"134":7}}],["properties",{"2":{"40":1}}],["proper",{"2":{"31":1}}],["prop",{"2":{"12":1,"13":2,"28":1}}],["props",{"2":{"9":11,"12":1,"13":1,"16":1,"28":2,"79":1}}],["prod",{"2":{"7":5,"61":1,"78":1,"79":1}}],["productive",{"2":{"19":1}}],["production",{"2":{"18":1,"30":1}}],["productid",{"2":{"16":1}}],["product",{"2":{"5":1,"16":2,"26":1,"27":2,"39":1,"40":1}}],["products",{"2":{"0":3,"16":1}}],["proxy",{"2":{"3":2,"4":1,"24":2,"29":2,"56":1}}],["protocols",{"0":{"4":1},"2":{"4":1,"39":1}}],["protocol",{"2":{"3":1,"17":1,"94":1}}],["protect",{"2":{"3":1}}],["promises",{"2":{"32":2,"39":1}}],["promise",{"2":{"0":1,"93":2}}],["palettes",{"2":{"121":1}}],["paddingtop",{"2":{"53":1}}],["paid",{"2":{"39":1}}],["payment",{"2":{"32":1}}],["pascal",{"2":{"19":1}}],["passed",{"2":{"79":2}}],["passes",{"2":{"1":1}}],["pass",{"2":{"12":1,"28":3,"32":1}}],["passing",{"2":{"12":1,"13":1}}],["password",{"2":{"1":1,"28":1}}],["packages",{"2":{"18":1,"19":2,"90":1}}],["package",{"0":{"58":1},"2":{"11":1,"18":1,"19":8,"20":1,"24":1,"33":1,"56":1,"86":2,"126":2}}],["panel",{"2":{"11":1,"129":1}}],["pattern",{"2":{"13":1,"24":1,"28":2,"29":1}}],["patterns",{"0":{"11":1},"1":{"12":1,"13":1,"14":1,"15":1,"16":1},"2":{"19":1,"31":1,"39":2,"50":1}}],["paths",{"2":{"18":2}}],["path",{"2":{"9":1,"13":4,"18":3}}],["pagepokemondetail",{"2":{"26":1}}],["pagehome",{"2":{"26":1}}],["page",{"2":{"3":6,"8":1,"30":1,"40":8,"53":1,"56":1,"63":1,"64":1,"66":1,"78":1,"80":1,"116":1}}],["pagespeed",{"2":{"40":2}}],["pages",{"0":{"108":1},"1":{"109":1,"110":1},"2":{"3":3,"5":1,"7":11,"13":1,"17":3,"26":5,"31":1,"39":1,"40":2,"83":1,"109":6,"118":2}}],["parents",{"2":{"54":1}}],["parallax",{"2":{"69":1}}],["parallel",{"2":{"32":1}}],["parallelization",{"2":{"32":1}}],["paragraphs",{"2":{"39":1,"123":1}}],["parameter",{"2":{"83":1,"110":1,"123":1}}],["parameters",{"2":{"7":1,"83":1,"90":1,"91":1,"121":1}}],["params",{"2":{"0":2,"94":1}}],["participation",{"0":{"81":1}}],["particular",{"2":{"66":1,"123":1}}],["partially",{"2":{"28":3,"29":2}}],["part",{"2":{"24":1,"26":4,"28":1,"39":2,"118":2}}],["party",{"0":{"34":1},"2":{"1":1,"3":5,"4":1,"28":1,"33":1,"40":1,"86":2,"138":1}}],["parts",{"2":{"1":1,"26":1,"53":1,"121":1}}],["vwa",{"2":{"130":1,"139":11}}],["vp",{"2":{"73":9}}],["vulnerability",{"2":{"33":1}}],["vulnerabilities",{"2":{"28":1}}],["vuesence",{"2":{"53":1,"59":1,"63":1,"72":1,"76":1,"79":1,"85":1}}],["vuefaq",{"2":{"51":1}}],["vuetify",{"2":{"31":1}}],["vuejs",{"2":{"28":1,"50":4,"78":1}}],["vuex",{"2":{"28":6}}],["vue",{"0":{"14":1,"25":1,"26":1,"27":1,"28":1,"39":1,"42":1,"59":1,"74":1,"76":1,"83":1,"87":1},"1":{"26":1,"27":1,"75":1,"76":1,"84":1,"88":1,"89":1},"2":{"7":1,"8":1,"9":2,"12":1,"13":2,"14":1,"15":1,"16":2,"18":4,"19":15,"22":1,"23":1,"24":7,"26":47,"27":2,"28":12,"29":17,"30":1,"31":2,"39":20,"40":1,"42":1,"49":1,"50":2,"54":1,"59":2,"61":2,"66":2,"72":1,"76":1,"78":2,"79":2,"81":2,"83":7,"84":1,"85":2,"86":3,"88":3,"89":4,"90":3,"91":2,"95":2,"109":2,"110":1,"125":1,"126":2,"129":1,"135":1}}],["vetur",{"2":{"19":2}}],["verdana",{"2":{"54":1}}],["vertical",{"2":{"53":1}}],["verified",{"2":{"40":1,"50":1}}],["verifies",{"2":{"1":2}}],["vercel",{"2":{"17":1,"19":2,"121":1}}],["versionrc",{"2":{"19":2}}],["versions",{"2":{"16":1,"19":3}}],["versioning",{"2":{"11":1,"138":1}}],["version",{"2":{"7":8,"19":3,"39":1,"40":1,"93":1,"121":1,"138":2}}],["very",{"2":{"1":3,"2":2,"17":1,"19":3,"24":4,"28":1,"30":1,"31":1,"38":1,"39":2,"40":3,"49":1,"94":1,"123":3}}],["vbproj",{"2":{"19":1}}],["vb",{"2":{"19":6}}],["volar",{"2":{"19":4}}],["vs",{"2":{"11":1,"19":7,"29":1,"126":1}}],["vscode",{"2":{"7":1,"19":9}}],["v",{"2":{"9":3}}],["v4",{"2":{"7":5}}],["v2",{"2":{"7":3}}],["v3",{"2":{"7":4}}],["vars",{"2":{"139":1}}],["various",{"2":{"39":1,"121":1}}],["variations",{"2":{"90":1}}],["variant",{"2":{"4":1,"24":1}}],["variants",{"2":{"1":1,"120":1,"121":3,"131":1}}],["variables",{"0":{"73":1},"2":{"24":1,"28":1,"29":2,"54":1,"73":2,"139":2}}],["variable",{"2":{"1":1,"24":2,"28":3,"29":6,"79":1,"130":1}}],["var",{"2":{"7":4,"73":9}}],["validation",{"2":{"28":1}}],["validators",{"2":{"26":3}}],["validate",{"2":{"19":1}}],["valid",{"2":{"1":2}}],["values",{"2":{"54":1,"79":1,"83":1,"134":1}}],["value",{"2":{"0":2,"7":1,"16":1,"19":1,"24":1,"26":1,"28":1,"29":4,"93":1,"111":1,"125":1,"138":1}}],["visual",{"2":{"29":1,"48":1}}],["visualize",{"2":{"59":1,"66":1,"76":1}}],["visualizer",{"2":{"18":4}}],["visualization",{"0":{"66":1},"2":{"28":1,"29":1,"31":1}}],["visuals",{"2":{"19":1}}],["visible",{"2":{"1":1,"19":1}}],["videos",{"2":{"39":3}}],["video",{"2":{"8":1,"39":1,"40":1}}],["virtual",{"2":{"2":1,"17":1,"24":1,"39":1}}],["views",{"2":{"13":1,"26":4,"27":1}}],["view",{"2":{"0":1,"13":3,"28":3,"29":2,"48":1,"90":1}}],["via",{"0":{"83":1},"1":{"84":1},"2":{"0":1,"1":3,"2":1,"4":1,"7":1,"8":2,"13":1,"17":1,"19":1,"24":2,"28":1,"66":1,"68":1,"79":3,"91":1,"97":1,"129":1,"139":1}}],["vitest",{"2":{"19":10,"30":1}}],["vitepress",{"0":{"60":1,"70":1},"1":{"71":1,"72":1,"73":1},"2":{"7":1,"38":1,"39":1,"66":2,"70":1,"72":1,"73":2,"89":1}}],["vite",{"0":{"110":1},"2":{"0":1,"3":1,"8":1,"9":1,"18":13,"19":3,"40":3,"50":1,"78":1,"86":1,"94":1,"97":2,"110":1}}],["effective",{"2":{"90":1}}],["effect",{"2":{"32":1}}],["effort",{"2":{"32":1}}],["efficiency",{"2":{"24":1}}],["efficiently",{"2":{"29":1,"32":2,"89":1,"90":1}}],["efficient",{"2":{"24":1,"29":1,"40":1,"86":2}}],["e2e2e3",{"2":{"54":1,"139":2}}],["e2e",{"2":{"30":5}}],["empty",{"2":{"79":1,"89":1}}],["employing",{"2":{"26":1}}],["embeds",{"2":{"66":1}}],["embla",{"2":{"22":1}}],["email",{"2":{"51":1}}],["emits",{"2":{"28":1}}],["emmet",{"2":{"19":2}}],["eex",{"2":{"19":1}}],["eol",{"2":{"19":1}}],["education",{"2":{"137":1}}],["edited",{"2":{"137":1}}],["edit",{"2":{"49":1}}],["editorconfig",{"2":{"19":2}}],["editortab",{"2":{"19":1}}],["editorgroup",{"2":{"19":1}}],["editor",{"2":{"19":31}}],["edge",{"2":{"2":2}}],["element",{"2":{"29":1,"48":1,"91":1}}],["elements",{"2":{"1":1,"5":1,"24":4,"26":1,"29":1,"30":1,"37":1,"40":2}}],["else",{"2":{"9":1,"19":1,"39":1}}],["e88a22df",{"2":{"8":1}}],["ecosystem",{"2":{"19":1,"24":1,"90":1}}],["economical",{"2":{"2":1}}],["echo",{"2":{"7":8}}],["established",{"2":{"89":1}}],["es",{"2":{"63":1}}],["esm",{"2":{"63":2,"64":1}}],["es6",{"2":{"24":1,"29":1}}],["esbenp",{"2":{"19":4}}],["esbuild",{"2":{"18":1}}],["eslint",{"2":{"18":3,"19":17,"39":1,"86":2}}],["esnext",{"2":{"18":1}}],["especially",{"2":{"4":1,"30":1,"90":1}}],["essence",{"2":{"1":1}}],["e",{"2":{"2":1,"8":1,"12":1,"26":3,"28":1,"29":1,"40":1,"86":1}}],["etc",{"2":{"2":1,"18":1,"27":1,"30":1,"37":1,"40":1,"48":1,"88":2,"89":1,"90":4,"97":1,"139":1}}],["either",{"2":{"1":1,"8":1,"31":1,"79":1}}],["enhance",{"2":{"135":1}}],["enhancing",{"2":{"26":1}}],["enough",{"2":{"40":1,"89":1}}],["english",{"2":{"39":1}}],["engines",{"2":{"40":1}}],["engine",{"2":{"24":1,"39":1,"40":1}}],["engineer",{"2":{"5":1,"51":1}}],["entering",{"2":{"83":1}}],["enter",{"2":{"49":1}}],["enters",{"2":{"29":1}}],["entrance",{"2":{"40":1}}],["entry",{"2":{"29":1,"40":1}}],["entity",{"2":{"28":3}}],["entities",{"2":{"26":4,"29":1}}],["entirely",{"2":{"135":1}}],["entire",{"2":{"10":1,"24":1,"28":1,"123":1}}],["encapsulated",{"2":{"26":1,"29":1}}],["encapsulates",{"2":{"26":2,"29":1}}],["encoded",{"2":{"8":1}}],["ensures",{"2":{"26":1}}],["en",{"2":{"19":3}}],["enablesmartcommit",{"2":{"19":1}}],["enable",{"2":{"19":4,"24":1,"90":2}}],["enabled",{"2":{"1":1,"19":9,"24":1,"85":1}}],["endpoint",{"2":{"2":2}}],["endpoints",{"2":{"2":2}}],["end",{"2":{"1":1,"2":5,"4":1,"5":1,"19":1,"26":1,"29":1,"30":4,"32":1,"40":1,"90":1}}],["envrc",{"2":{"19":12}}],["envs",{"2":{"7":2}}],["environment",{"2":{"7":3,"19":1,"89":1}}],["environments",{"2":{"7":1,"17":1}}],["env",{"2":{"0":1,"7":26,"19":38,"94":1}}],["earlier",{"2":{"16":1,"19":1}}],["eager",{"2":{"10":2}}],["easy",{"2":{"8":1,"13":2,"17":1,"26":1,"39":1,"86":1}}],["easingthemes",{"2":{"7":2}}],["easier",{"2":{"7":1,"26":1,"29":2,"31":1,"34":2,"40":1}}],["easiest",{"2":{"2":1,"39":1}}],["easily",{"2":{"0":1,"39":1,"93":1}}],["each",{"2":{"1":4,"7":3,"11":1,"18":2,"19":1,"26":7,"27":4,"28":3,"29":2,"40":1,"90":1,"91":1,"93":1,"138":1}}],["evan",{"2":{"29":1}}],["evaluate",{"2":{"13":1}}],["evolving",{"2":{"29":1}}],["evolution",{"2":{"26":1,"31":1}}],["ever",{"2":{"12":1}}],["everyone",{"2":{"40":1}}],["everybody",{"2":{"28":1}}],["everything",{"2":{"19":1,"24":2,"29":1,"48":1,"85":1}}],["every",{"2":{"0":1}}],["events",{"2":{"28":1}}],["event",{"2":{"4":1,"19":1,"28":1,"32":1}}],["even",{"2":{"1":1,"3":1,"10":1,"24":1,"28":2,"29":1,"31":1,"39":3,"123":1}}],["evidence",{"2":{"0":1}}],["errors",{"2":{"19":1}}],["error",{"2":{"0":1,"3":1,"7":1}}],["exact",{"2":{"32":1}}],["examples",{"2":{"39":1,"90":1}}],["example",{"2":{"0":2,"1":5,"2":5,"3":2,"5":2,"7":1,"10":2,"11":1,"13":3,"16":1,"19":2,"27":2,"28":4,"29":4,"32":2,"33":1,"34":1,"37":1,"40":1,"125":1,"130":1}}],["existing",{"2":{"39":1,"83":1}}],["exist",{"2":{"29":1}}],["exiting",{"2":{"7":1}}],["excellent",{"2":{"39":1}}],["exceptional",{"2":{"40":1}}],["except",{"2":{"28":1}}],["excessive",{"2":{"27":1}}],["exclude",{"2":{"7":1,"19":1}}],["execution",{"2":{"24":1,"32":2}}],["executes",{"2":{"40":1}}],["execute",{"2":{"7":1,"32":1}}],["executed",{"2":{"2":1,"13":1,"32":4}}],["exs",{"2":{"19":5}}],["extreme",{"2":{"39":1}}],["extractor",{"2":{"19":11}}],["extent",{"2":{"53":1}}],["extensibility",{"2":{"31":1}}],["extension",{"2":{"19":1,"29":1,"126":2}}],["extensions",{"0":{"126":1},"2":{"3":1,"19":6,"95":1,"126":1}}],["extending",{"2":{"26":1}}],["extend",{"2":{"18":1}}],["external",{"2":{"0":1,"28":1,"32":1}}],["ex",{"2":{"19":1}}],["express",{"2":{"40":1}}],["expediency",{"2":{"30":1}}],["experimentally",{"2":{"53":1}}],["experiment",{"2":{"39":1}}],["experimenting",{"2":{"29":1}}],["experience",{"2":{"4":1,"39":3,"40":1,"48":4,"51":1,"135":1}}],["experienced",{"2":{"4":1,"39":2,"50":2,"89":1,"90":1}}],["expanding",{"2":{"121":1}}],["expand",{"2":{"19":1,"39":1}}],["expandmode",{"2":{"19":1}}],["explained",{"2":{"39":1}}],["explorer",{"2":{"19":6}}],["explicitly",{"2":{"86":1,"89":1}}],["explicit",{"2":{"0":1}}],["expires",{"2":{"1":2}}],["expired",{"2":{"1":1}}],["exports",{"2":{"10":1}}],["export",{"2":{"0":2,"10":1,"13":1,"15":1,"18":1,"28":2,"94":2}}],["href=",{"2":{"61":1,"63":2,"78":1,"79":1}}],["hurry",{"2":{"33":1}}],["huskyrc",{"2":{"19":2}}],["huge",{"2":{"10":1}}],["hxx",{"2":{"19":3}}],["hpp",{"2":{"19":3}}],["hmr",{"2":{"18":1}}],["h",{"2":{"7":1,"19":4}}],["html5",{"2":{"37":1,"44":1,"86":1}}],["htmlnanorc",{"2":{"19":20}}],["html=",{"2":{"9":1}}],["html",{"0":{"44":1,"97":1},"2":{"3":1,"7":2,"8":2,"17":1,"19":6,"29":3,"39":1,"40":10,"61":1,"63":2,"64":1,"66":1,"78":2,"79":1,"80":1,"91":1,"97":2,"111":2,"134":2,"135":1}}],["https",{"2":{"3":6,"17":1,"19":2,"40":1,"61":3,"63":3,"78":3,"79":3,"85":1,"93":1,"94":1,"109":1,"111":1}}],["httponly",{"2":{"1":3}}],["http",{"2":{"0":11,"2":1,"3":3,"8":1,"93":5,"94":4}}],["hello",{"2":{"123":1}}],["helpers",{"2":{"26":1}}],["helpful",{"0":{"21":1},"1":{"22":1,"23":1,"24":1}}],["helps",{"2":{"10":1,"39":1,"89":1}}],["help",{"2":{"3":1,"19":1,"31":1,"39":3}}],["heavy",{"2":{"40":1}}],["heavyweight",{"2":{"20":1,"24":1,"123":1}}],["heading",{"2":{"109":1}}],["head>",{"2":{"63":2}}],["headless",{"2":{"30":1,"31":1,"90":1}}],["header>",{"2":{"95":1,"116":2}}],["header",{"2":{"27":1,"37":1,"83":2,"90":2,"95":2,"113":1,"114":1,"115":1,"118":1,"121":1,"128":1,"130":1}}],["headers",{"0":{"112":1},"1":{"113":1,"114":1,"115":1,"116":1},"2":{"3":1,"94":1,"112":1,"116":1}}],["heidisql",{"2":{"19":1}}],["height",{"2":{"9":7}}],["heex",{"2":{"19":1}}],["hexcolorlength",{"2":{"19":1}}],["heroku",{"2":{"17":1,"121":1}}],["here",{"2":{"2":1,"4":1,"20":1,"26":1,"28":3,"39":1,"64":1,"73":1,"80":1,"124":1}}],["he",{"2":{"1":1,"28":1,"29":1}}],["hotel",{"2":{"40":1}}],["horizons",{"2":{"39":1}}],["hood",{"2":{"29":1,"39":1}}],["hooks",{"2":{"19":4}}],["hook",{"2":{"0":2}}],["holding",{"2":{"28":2}}],["home",{"2":{"26":2,"40":1,"83":1,"137":1}}],["hoppscotch",{"2":{"19":1}}],["houdini",{"2":{"19":1}}],["hover",{"2":{"19":1}}],["hosts",{"2":{"28":1}}],["hosted",{"2":{"17":1}}],["hosting",{"0":{"17":1},"2":{"17":3,"90":1}}],["host",{"2":{"3":1,"7":10,"17":2}}],["however",{"2":{"20":1,"26":1,"28":2,"126":1}}],["how",{"2":{"1":1,"2":3,"4":1,"8":1,"10":1,"11":1,"13":2,"18":3,"19":1,"24":1,"26":1,"28":3,"31":1,"39":3,"40":2,"64":1,"80":1}}],["hide=",{"2":{"116":1}}],["hidemergecommits",{"2":{"53":1}}],["hidecommitusername",{"2":{"53":1}}],["hidepullusername",{"2":{"53":1}}],["hidden",{"2":{"0":1,"98":1,"128":1}}],["highly",{"2":{"30":1}}],["highlightmodifiedtabs",{"2":{"19":1}}],["high",{"2":{"26":2,"86":1}}],["hierarchize",{"2":{"29":1}}],["hierarchical",{"2":{"26":1,"31":1}}],["hierarchy",{"2":{"26":1,"27":1,"28":2}}],["hints",{"0":{"21":1},"1":{"22":1,"23":1,"24":1}}],["himself",{"2":{"28":1,"31":1,"89":1}}],["him",{"2":{"1":1,"5":1,"32":2}}],["historically",{"2":{"28":1}}],["history",{"2":{"19":5}}],["histoire",{"2":{"19":10}}],["his",{"2":{"1":2,"2":1,"19":1,"32":1}}],["half",{"2":{"124":1}}],["hack",{"2":{"98":1}}],["hamburger",{"2":{"95":1,"100":1,"128":1,"130":1}}],["harmful",{"2":{"39":1}}],["hardware",{"2":{"40":2}}],["hard",{"2":{"18":1}}],["happen",{"2":{"28":1}}],["happened",{"2":{"28":1}}],["had",{"2":{"24":1,"28":1}}],["handling",{"2":{"32":1}}],["handle",{"2":{"39":1,"40":1}}],["handles",{"2":{"26":2,"29":1}}],["handled",{"2":{"0":1,"40":1}}],["handy",{"0":{"20":1},"2":{"19":1,"38":1}}],["hand",{"2":{"19":1,"28":1,"89":2}}],["hash",{"2":{"8":1}}],["hassles",{"2":{"1":1}}],["has",{"2":{"1":7,"2":1,"4":1,"7":2,"18":1,"24":3,"27":1,"28":5,"29":3,"32":1,"40":1,"66":1,"109":1,"123":2,"126":1}}],["have",{"2":{"0":1,"1":3,"2":1,"7":1,"8":1,"12":1,"13":1,"19":2,"24":3,"28":4,"29":2,"31":2,"32":4,"33":1,"39":1,"40":1,"53":1,"89":1,"110":2,"135":1}}],["uri",{"2":{"94":1}}],["url",{"2":{"0":1,"8":2,"10":1,"53":6,"56":2,"94":1,"134":2,"137":1}}],["umd",{"2":{"61":1,"78":1,"79":1}}],["ux",{"2":{"40":2,"48":1,"86":1,"101":1,"118":1,"138":1}}],["uis",{"2":{"26":1,"29":1}}],["uikit",{"2":{"26":1}}],["ui",{"0":{"31":1,"34":1},"2":{"18":1,"20":2,"26":3,"29":2,"30":1,"31":9,"32":3,"34":1,"36":1,"48":1,"54":1,"86":1,"90":1,"95":1,"114":1,"115":1}}],["u",{"2":{"13":1}}],["utility",{"2":{"28":1,"95":1}}],["utilities",{"0":{"34":1},"2":{"11":1,"26":1,"27":1,"34":1}}],["utils",{"2":{"0":3,"9":2,"26":3,"27":1,"93":3,"94":5,"95":2,"97":1,"125":1}}],["upper",{"2":{"68":1,"91":1}}],["upgrading",{"2":{"32":1,"40":1}}],["upgrade",{"2":{"31":1}}],["up",{"2":{"7":1,"18":1,"19":3,"24":1,"26":1,"30":1,"31":3,"32":2,"39":1,"89":1,"94":1,"123":1}}],["updating",{"2":{"7":1,"29":1}}],["updates",{"2":{"29":1}}],["updated",{"2":{"26":1,"29":2,"30":1}}],["update",{"2":{"7":3,"19":1,"26":1}}],["upload",{"2":{"7":3,"39":1}}],["ubuntu",{"2":{"7":3,"83":1}}],["usability",{"2":{"48":1}}],["usage",{"0":{"59":1,"63":1,"72":1,"78":1,"125":1},"2":{"24":1,"32":1,"61":1}}],["usual",{"2":{"29":1}}],["usually",{"2":{"4":1,"13":1,"24":1,"28":2,"29":1,"30":1,"32":1,"39":1,"40":1,"89":1,"123":1}}],["us",{"2":{"19":1}}],["using",{"2":{"2":2,"3":1,"4":1,"7":1,"8":1,"11":1,"17":1,"18":2,"26":2,"28":3,"29":1,"31":1,"40":2,"48":1,"49":1,"63":1,"66":1,"90":1,"120":1}}],["usetouchswipe",{"2":{"101":1}}],["uselessly",{"2":{"39":1}}],["useless",{"2":{"39":1,"126":1}}],["usenewswidget",{"2":{"29":1}}],["usei18nlight",{"0":{"124":1},"2":{"125":2}}],["usei18n",{"2":{"27":1,"29":1,"125":4}}],["useid",{"2":{"16":3}}],["usepokemon",{"2":{"26":2}}],["useappconfig",{"2":{"95":3}}],["useapploader",{"0":{"15":1},"2":{"14":3,"15":1,"16":3}}],["useauthstore",{"2":{"28":1}}],["useauthservice",{"2":{"28":1}}],["useauth",{"2":{"0":4,"28":1}}],["usescreenwidth",{"2":{"91":6}}],["usescreensize",{"2":{"29":1}}],["useshoppingcart",{"2":{"29":1}}],["uses",{"2":{"7":11,"9":1,"16":1,"18":1,"24":3,"29":1,"54":1,"86":2,"95":2,"109":1}}],["usefulness",{"2":{"30":1}}],["useful",{"2":{"5":1,"7":1,"19":4,"26":1,"28":1,"30":1,"32":1,"39":3,"40":2,"85":1,"121":1,"126":1}}],["used",{"2":{"1":3,"3":3,"7":2,"18":2,"24":2,"27":1,"28":2,"29":3,"32":1,"39":1,"50":1,"56":2,"86":3,"91":1,"94":1,"130":1,"138":1}}],["use",{"0":{"12":1,"34":1,"36":1,"37":1,"60":1,"61":1,"76":1},"2":{"0":2,"1":1,"2":1,"4":2,"8":3,"11":3,"16":1,"18":2,"19":2,"24":3,"28":3,"29":2,"30":1,"31":2,"32":3,"34":2,"36":1,"38":1,"39":2,"40":4,"79":1,"86":3,"90":1,"94":1,"95":1,"109":1,"125":1,"126":2,"138":1}}],["userloggedin",{"2":{"28":1}}],["usermodel",{"2":{"26":1}}],["userprofile",{"2":{"26":2}}],["useraccountview",{"2":{"13":1}}],["username",{"2":{"1":1,"7":2,"28":1,"53":1}}],["user",{"2":{"0":2,"1":16,"7":8,"12":2,"19":3,"24":1,"26":4,"27":1,"28":3,"29":4,"30":1,"32":1,"40":3,"48":4,"56":1,"86":1,"90":1,"116":1,"128":1,"135":1,"137":1,"139":1}}],["userid",{"2":{"0":1}}],["userservice",{"2":{"26":1}}],["users",{"2":{"0":7,"1":2,"26":1,"32":1,"40":2,"66":1}}],["userdata",{"2":{"0":1}}],["unwanted",{"2":{"89":1}}],["unpacked",{"2":{"66":1}}],["unpkg",{"2":{"61":3,"63":2,"78":3,"79":3}}],["unless",{"2":{"36":1,"86":1}}],["unlighthouse",{"2":{"19":2}}],["unlike",{"2":{"0":1,"28":1}}],["unknown",{"2":{"32":1}}],["unequivocally",{"2":{"29":1}}],["unfortunate",{"2":{"28":1}}],["unfortunately",{"2":{"19":1}}],["unrelated",{"2":{"26":1}}],["unoptimized",{"2":{"40":1}}],["unocss",{"2":{"19":10}}],["uno",{"2":{"19":10}}],["untrackedchanges",{"2":{"19":1}}],["unified",{"2":{"31":1}}],["unification",{"2":{"4":1}}],["unit",{"2":{"30":6}}],["unicodehighlight",{"2":{"19":1}}],["unique",{"2":{"16":1,"28":2}}],["universal",{"2":{"8":2}}],["under",{"2":{"5":1,"29":1,"81":1,"109":5}}],["understanding",{"2":{"39":1}}],["understand",{"2":{"13":1,"28":1,"39":2,"40":1}}],["understandable",{"2":{"4":1}}],["understood",{"2":{"1":1}}],["undeservedly",{"2":{"1":1}}],["unnecessary",{"2":{"1":1,"4":1,"28":1}}],["unnecessarily",{"2":{"0":1,"86":1}}],["uncaught",{"2":{"0":1}}],["=+",{"2":{"19":1}}],["==",{"2":{"7":3}}],["=>",{"2":{"7":2,"9":2,"15":1,"125":1}}],["=",{"2":{"0":5,"7":1,"9":3,"10":6,"13":3,"14":1,"15":2,"16":2,"24":6,"28":1,"29":1,"53":1,"59":2,"63":1,"72":2,"76":2,"79":1,"91":1,"93":3,"94":2,"95":2,"111":1,"125":3}}],["f6f6f7",{"2":{"54":1}}],["ffffff",{"2":{"54":2}}],["fcp",{"2":{"40":1}}],["fs",{"2":{"32":1}}],["fsd",{"2":{"27":1}}],["fnc",{"2":{"20":1,"24":1}}],["fly",{"2":{"40":1,"123":1}}],["flagship",{"2":{"29":1}}],["flat",{"2":{"26":2}}],["flake",{"2":{"19":2}}],["flows",{"2":{"56":1}}],["flow",{"2":{"24":1,"29":1,"46":1}}],["flowconfig",{"2":{"19":2}}],["fls",{"2":{"19":1}}],["flex",{"2":{"91":3}}],["flexbox",{"2":{"36":1,"37":1,"45":2}}],["flexible",{"2":{"28":1,"29":1}}],["flexibility",{"2":{"4":1,"28":1}}],["fledged",{"2":{"2":2,"86":1}}],["fdb",{"2":{"19":1}}],["feedtype",{"2":{"53":5}}],["fetish",{"2":{"30":1}}],["fetch",{"2":{"0":1,"7":1,"32":1,"89":1,"93":1}}],["ferferga",{"2":{"28":1}}],["featuretests",{"2":{"26":1}}],["feature",{"2":{"26":5,"29":1}}],["features",{"0":{"37":1},"2":{"2":1,"24":1,"26":6,"28":1,"40":2,"123":1}}],["few",{"2":{"3":1,"20":1,"89":1,"90":1}}],["future",{"2":{"90":1}}],["further",{"2":{"88":1,"89":1,"90":1}}],["fundamental",{"2":{"29":1}}],["functional",{"2":{"26":1,"28":1,"90":2}}],["functionality",{"2":{"24":2,"31":1,"32":1,"38":1,"83":1,"85":2,"86":4,"88":1,"89":1,"90":2,"101":1,"121":1,"123":2,"124":1,"127":1}}],["function",{"2":{"9":1,"10":3,"13":1,"15":3,"16":1,"24":1,"28":3,"32":4,"33":2,"86":1,"91":2,"93":1,"101":1,"111":1,"123":1,"125":1}}],["functions",{"2":{"2":3,"11":1,"13":1,"28":9,"29":2,"32":1}}],["fu",{"2":{"19":1,"86":1}}],["fully",{"2":{"70":1}}],["fullstack",{"2":{"4":1,"19":1}}],["fullstackers",{"2":{"4":1}}],["full",{"2":{"2":2,"26":1,"28":1,"31":1,"51":1,"86":1}}],["frequently",{"2":{"50":2}}],["frequency",{"2":{"32":1}}],["freezed",{"2":{"19":1}}],["free",{"2":{"2":3,"17":2,"39":3}}],["fragments",{"2":{"90":1,"97":1}}],["frantically",{"2":{"19":1}}],["frameworks",{"0":{"29":1},"2":{"29":3,"89":1}}],["framework",{"2":{"3":1,"24":4,"28":1,"29":1,"86":1,"89":2,"121":1,"123":1}}],["friendly",{"2":{"18":1,"39":1}}],["front",{"2":{"1":6,"2":4,"4":1,"5":1,"19":1,"26":1,"29":1,"30":2,"32":1,"90":1}}],["frontends",{"2":{"26":1}}],["frontenders",{"0":{"2":1}}],["frontend",{"0":{"29":1,"32":1,"62":1},"1":{"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"63":1,"64":1},"2":{"1":3,"2":3,"3":1,"4":2,"17":1,"19":1,"26":1,"27":1,"28":5,"29":5,"30":2,"32":3,"39":2,"40":1,"50":1,"64":1,"66":1,"89":1}}],["from",{"0":{"85":1},"2":{"0":13,"1":1,"2":1,"3":7,"7":3,"8":9,"9":3,"10":3,"13":1,"14":1,"15":1,"16":2,"17":1,"18":3,"19":1,"24":1,"26":1,"28":8,"29":3,"30":2,"32":1,"35":1,"39":7,"40":7,"48":1,"50":1,"53":2,"56":2,"59":1,"63":1,"72":1,"76":1,"90":1,"91":1,"93":2,"94":5,"95":3,"99":1,"109":1,"110":1,"123":1,"125":2,"128":1,"131":1}}],["fix",{"2":{"19":1,"32":1}}],["fixall",{"2":{"19":2}}],["fields",{"2":{"56":1}}],["field",{"2":{"10":2,"28":1,"29":2}}],["finance",{"2":{"123":1}}],["final",{"2":{"31":1,"32":1}}],["finished",{"2":{"39":1}}],["fine",{"2":{"19":1,"90":1}}],["finding",{"2":{"123":1}}],["find",{"2":{"10":1,"19":1,"40":1,"125":1}}],["fingerprint",{"2":{"1":1}}],["filtering",{"2":{"56":1}}],["filling",{"2":{"88":1,"90":1}}],["fill",{"2":{"9":1}}],["filenesting",{"2":{"19":3}}],["filename",{"2":{"10":10}}],["filelistlayout",{"2":{"19":1}}],["file=",{"2":{"7":1}}],["files",{"2":{"7":3,"8":1,"9":1,"17":1,"18":2,"19":4,"40":2,"95":1,"125":1}}],["file",{"0":{"26":1},"2":{"3":1,"7":9,"9":1,"19":3,"40":2,"56":1,"72":1,"83":2,"97":1,"137":1,"139":2}}],["fi",{"2":{"7":2}}],["firesbase",{"2":{"121":1}}],["firestore",{"2":{"39":1}}],["firebase",{"2":{"2":2,"17":2,"19":4,"121":1}}],["fira",{"2":{"19":1}}],["first",{"2":{"1":2,"10":1,"19":1,"28":2,"39":2,"40":4,"50":1,"56":2,"116":1,"138":1}}],["fight",{"2":{"1":1}}],["follows",{"2":{"93":1}}],["follow",{"2":{"39":1}}],["following",{"2":{"32":1,"102":1,"118":1}}],["folder",{"2":{"7":1,"8":6,"26":1}}],["found",{"2":{"28":1}}],["four",{"2":{"1":1,"91":1}}],["footers",{"0":{"102":1},"1":{"103":1,"104":1,"105":1,"106":1,"107":1},"2":{"102":1}}],["footer",{"2":{"27":1,"83":2,"90":2,"118":1,"121":1,"128":1}}],["focus",{"2":{"26":1}}],["focuses",{"2":{"26":1}}],["fowler",{"2":{"26":1}}],["fonts",{"2":{"138":1}}],["font",{"2":{"54":1,"73":2,"139":1}}],["fontweight",{"2":{"19":1}}],["fontligatures",{"2":{"19":1}}],["fontfamily",{"2":{"19":1}}],["fontaliasing",{"2":{"19":1}}],["fork",{"2":{"49":1}}],["forgotten",{"2":{"36":1}}],["forget",{"2":{"24":1}}],["foreign",{"2":{"28":1,"31":1}}],["forbidden",{"2":{"1":1}}],["forces",{"2":{"7":1}}],["force",{"2":{"1":1}}],["forms",{"2":{"40":1,"121":1}}],["formulate",{"2":{"19":10}}],["formkit",{"2":{"19":10}}],["formatters",{"2":{"24":2}}],["formatter",{"2":{"19":1}}],["formatting",{"2":{"19":2,"24":1,"40":1,"86":1}}],["formatonsave",{"2":{"19":1}}],["formats",{"2":{"10":1,"19":1}}],["format",{"2":{"2":1,"4":1,"7":3,"10":2,"19":2,"40":2,"56":1,"59":1,"76":1,"83":1}}],["form",{"2":{"1":1,"2":2,"24":1,"28":1,"49":1,"79":1}}],["forming",{"2":{"0":1}}],["for",{"0":{"2":1,"26":1,"27":1},"2":{"0":2,"1":15,"2":9,"3":2,"4":6,"5":6,"7":6,"8":2,"10":4,"11":2,"13":8,"16":1,"17":3,"18":5,"19":14,"20":2,"21":1,"22":1,"24":7,"26":7,"27":6,"28":13,"29":8,"30":3,"31":4,"32":6,"33":1,"34":3,"35":1,"36":1,"37":1,"38":1,"39":9,"40":16,"50":1,"53":1,"56":1,"66":2,"79":1,"83":1,"85":1,"86":4,"88":2,"89":6,"90":2,"91":2,"93":1,"94":2,"95":1,"100":2,"111":1,"118":6,"121":5,"123":3,"126":2,"130":1,"134":1,"137":1,"138":3,"139":1}}],["familiarize",{"2":{"89":1,"90":1}}],["family",{"2":{"54":1,"73":2,"139":1}}],["favorable",{"2":{"32":1}}],["favorite",{"2":{"0":1}}],["fairly",{"2":{"27":1,"39":1}}],["facebook",{"2":{"134":1}}],["facilitate",{"2":{"86":1}}],["facilitating",{"2":{"26":1}}],["fact",{"2":{"24":1,"28":1}}],["factor",{"2":{"29":1}}],["facto",{"2":{"4":1,"94":1}}],["fans",{"2":{"19":1}}],["fast",{"2":{"19":1,"31":1}}],["faster",{"2":{"18":2,"19":1,"29":1,"36":1}}],["fall",{"2":{"28":1,"29":1}}],["fallback",{"2":{"10":1}}],["false",{"2":{"0":1,"7":2,"19":27,"28":1,"53":1,"83":4}}],["faq",{"2":{"7":1,"50":1}}],["luxury",{"2":{"40":1}}],["lumps",{"2":{"29":1}}],["l",{"2":{"29":1,"125":2}}],["lt",{"2":{"19":1}}],["ll",{"2":{"18":1,"39":1}}],["lying",{"2":{"5":1}}],["lazy",{"2":{"40":1}}],["labor",{"2":{"40":2}}],["latter",{"2":{"32":1}}],["later",{"2":{"33":1,"40":1,"86":1}}],["latexmk",{"2":{"19":1}}],["latest",{"2":{"7":2}}],["launched",{"2":{"30":1,"40":1}}],["launching",{"0":{"84":1},"2":{"26":1}}],["laptop",{"2":{"19":1}}],["layoutadmin",{"2":{"26":1}}],["layoutdefault",{"2":{"26":1}}],["layout",{"2":{"13":2,"26":3,"31":3,"36":1,"83":2,"86":1,"88":1,"90":1,"118":2,"121":1,"128":1,"130":3,"139":1}}],["layouts",{"2":{"13":2,"26":1,"27":1,"90":1}}],["layered",{"2":{"115":1}}],["layers",{"2":{"26":3}}],["layer",{"2":{"0":1,"31":1,"40":1,"83":1,"93":1,"118":1}}],["lang=",{"2":{"9":1,"91":1,"95":1,"125":1}}],["languages",{"2":{"12":1,"29":1,"32":2}}],["language",{"0":{"37":1},"2":{"2":2,"3":1,"4":1,"19":1,"24":2,"28":1,"39":1,"123":2}}],["lastindexof",{"2":{"10":2}}],["last",{"2":{"7":1,"19":1}}],["lamda",{"2":{"2":1}}],["lambda",{"2":{"2":1}}],["larger",{"2":{"26":1}}],["large",{"2":{"2":1,"7":1,"24":2,"26":1,"29":4,"30":2,"53":1,"98":1,"123":1}}],["left",{"2":{"68":1,"128":1}}],["least",{"2":{"19":1,"28":1,"32":1,"38":1,"39":2}}],["learning",{"0":{"39":1},"2":{"31":1,"39":3,"89":1}}],["learn",{"2":{"7":1,"32":1,"36":1,"39":1,"90":1}}],["lerna",{"2":{"19":2}}],["leex",{"2":{"19":1}}],["lengths",{"2":{"53":1}}],["length",{"2":{"10":2}}],["let",{"2":{"10":1,"26":1,"32":2,"36":1}}],["leverage",{"0":{"2":1},"2":{"90":1}}],["levels",{"2":{"1":1,"29":1}}],["level",{"2":{"1":2,"12":2,"24":1,"30":1,"32":2,"38":1,"39":3,"50":1,"89":1}}],["less",{"2":{"0":1,"19":1,"40":1}}],["lightweight",{"2":{"86":1}}],["light",{"2":{"66":1,"70":1,"139":1}}],["lighthouserc",{"2":{"19":20}}],["little",{"2":{"40":3}}],["lives",{"2":{"29":1}}],["lived",{"2":{"1":2}}],["license",{"2":{"19":1,"81":1}}],["limitations",{"2":{"31":1}}],["limit",{"2":{"19":3}}],["lib",{"2":{"19":1,"26":1}}],["libraries",{"0":{"31":1,"34":1},"2":{"10":1,"18":1,"20":1,"21":1,"26":1,"31":9,"36":1,"86":1,"89":2,"90":1,"120":1,"138":1}}],["library",{"0":{"20":1},"2":{"0":1,"11":1,"24":1,"28":6,"29":1,"31":2,"32":1,"33":2,"34":2,"54":1,"66":1,"86":2,"123":1}}],["link",{"2":{"61":1,"63":2,"78":1,"79":1,"110":1}}],["links",{"2":{"18":1}}],["linux",{"2":{"19":1}}],["linting",{"2":{"30":1,"86":1}}],["linter",{"2":{"19":1}}],["lintstagedrc",{"2":{"19":2}}],["lint",{"2":{"19":4}}],["linenumbers",{"2":{"19":1}}],["lines",{"2":{"3":1,"33":1,"40":1,"124":1}}],["line",{"2":{"3":1,"18":1,"19":1,"39":1,"53":1}}],["lifehack",{"2":{"28":1}}],["life",{"2":{"7":1}}],["lifetime",{"2":{"1":4}}],["lists",{"2":{"123":1}}],["listeners",{"2":{"29":1}}],["list",{"2":{"3":2,"18":1,"19":1}}],["lies",{"2":{"2":1}}],["likely",{"2":{"28":1}}],["likelihood",{"2":{"27":1}}],["like",{"2":{"0":1,"3":1,"8":1,"12":1,"17":1,"18":2,"24":2,"26":3,"27":1,"28":5,"31":5,"32":1,"39":2,"40":5,"83":1,"89":1,"110":1,"138":1}}],["loop",{"2":{"32":2}}],["loose",{"2":{"27":1}}],["loosely",{"2":{"27":1}}],["looks",{"2":{"28":1,"40":2}}],["look",{"2":{"0":1,"4":1,"10":1,"19":1,"20":1,"28":1,"39":1,"93":1}}],["long",{"2":{"26":1}}],["longer",{"2":{"1":1,"19":1,"24":1,"28":1,"33":1}}],["lof",{"2":{"19":1}}],["lock",{"2":{"19":13}}],["located",{"2":{"31":1,"97":2,"125":1,"130":1,"131":1,"135":1}}],["location",{"2":{"7":1}}],["locally",{"2":{"40":1,"56":1}}],["locale",{"2":{"24":1,"125":3}}],["locales",{"2":{"24":1,"86":1,"123":1,"125":4}}],["localizing",{"2":{"24":1,"123":1}}],["localization",{"2":{"24":2,"123":2}}],["local",{"2":{"19":1,"28":2,"32":1}}],["localstoragename",{"2":{"7":3}}],["localstorage",{"2":{"1":2,"7":3,"139":1}}],["lot",{"2":{"18":1,"19":3,"24":1,"29":2,"39":2,"40":1,"123":1}}],["lose",{"2":{"28":1,"40":1}}],["loss",{"2":{"10":1}}],["losing",{"2":{"1":1}}],["loaded",{"2":{"40":1,"135":1}}],["loaderset",{"2":{"15":4}}],["loaderbar",{"2":{"14":1}}],["loader",{"2":{"14":1,"26":1}}],["loadicons",{"2":{"10":2}}],["loading",{"2":{"0":2,"7":1,"8":1,"13":1,"14":2,"15":2}}],["load",{"2":{"2":1,"32":2,"40":2}}],["lower",{"2":{"29":1}}],["low",{"2":{"1":1,"89":1}}],["log",{"2":{"7":1,"19":1,"24":1}}],["logically",{"2":{"35":1}}],["logical",{"2":{"24":1,"27":1,"28":1,"40":1}}],["logic",{"2":{"2":3,"26":1,"28":11,"29":4,"31":2,"32":1,"56":1,"93":1}}],["login",{"2":{"1":6,"26":1,"28":1,"30":1,"121":1}}],["logs",{"2":{"1":2,"7":1,"19":1}}],["logged",{"2":{"1":1,"28":1}}],["logout",{"2":{"0":1,"28":1}}],["msg",{"2":{"125":1}}],["mjs",{"2":{"19":4}}],["mysql",{"2":{"19":1,"39":1}}],["my",{"2":{"18":1,"28":1,"83":3,"84":1,"88":1,"109":2,"110":1}}],["m",{"2":{"7":2}}],["mdsvex",{"2":{"19":1}}],["md",{"2":{"7":1,"19":3}}],["mkdir",{"2":{"7":2}}],["mvp",{"2":{"30":1}}],["mvc",{"2":{"28":1,"29":1}}],["mv",{"2":{"7":1}}],["mit",{"2":{"81":1}}],["mitt",{"2":{"4":1}}],["mistake",{"2":{"32":1}}],["middle",{"2":{"32":1}}],["microfrontend",{"2":{"26":2}}],["microfrontends",{"2":{"26":7}}],["microservice",{"2":{"26":1,"29":1}}],["microservices",{"2":{"26":2,"32":1}}],["microsoft",{"2":{"2":1,"17":1,"19":1,"40":1}}],["micro",{"0":{"62":1},"1":{"63":1,"64":1},"2":{"19":1,"26":1,"64":1,"66":1}}],["mixins",{"2":{"24":4}}],["mix",{"2":{"19":3,"29":1}}],["might",{"2":{"13":1,"19":1,"26":1,"28":1,"31":1}}],["minutes",{"2":{"39":1,"90":1}}],["mind",{"2":{"28":1}}],["minimum",{"2":{"85":1}}],["minimalistic",{"2":{"89":1}}],["minimal",{"2":{"26":1,"86":1}}],["miniserver",{"2":{"19":1}}],["mini",{"2":{"19":2}}],["miniature",{"2":{"2":1}}],["minheight",{"2":{"9":1}}],["minwidth",{"2":{"9":1}}],["multi",{"2":{"32":2}}],["multithreading",{"2":{"32":4}}],["multithreaded",{"2":{"29":1}}],["multicursormodifier",{"2":{"19":1}}],["multiple",{"2":{"18":1,"24":1,"26":1,"32":1,"86":1}}],["must",{"2":{"1":1,"7":2,"8":1,"40":1,"79":1,"137":1}}],["much",{"2":{"0":1,"7":1,"18":1,"19":2,"24":1,"28":1,"29":2,"31":4,"34":2,"39":1,"40":3}}],["megabytes",{"2":{"124":1}}],["mention",{"2":{"40":1}}],["mentor",{"2":{"39":2}}],["menus",{"2":{"19":1}}],["menu",{"2":{"13":2,"27":1,"109":1,"118":1}}],["mechanism",{"2":{"32":1}}],["mechanisms",{"2":{"28":1}}],["mess",{"2":{"30":1}}],["message",{"2":{"4":1,"49":1,"123":1}}],["messages",{"2":{"4":2,"32":1}}],["means",{"2":{"24":1,"26":1,"31":1,"86":1,"89":1}}],["measures",{"2":{"1":1}}],["me",{"0":{"20":1}}],["metrics",{"2":{"40":2}}],["met",{"2":{"39":1}}],["methodology",{"2":{"26":1}}],["methods",{"2":{"3":1,"24":1,"28":1,"39":1}}],["method",{"2":{"1":1,"18":1,"26":1,"40":2,"83":2,"85":1,"94":1}}],["metaframwork",{"2":{"89":1}}],["metadata",{"2":{"19":1}}],["meta",{"2":{"0":1,"9":1,"10":2,"13":1,"83":1,"88":1,"94":1,"95":1,"118":1,"134":15}}],["mountrt",{"2":{"63":2}}],["mouse",{"2":{"19":1}}],["mobile",{"2":{"40":1,"91":4,"100":1,"128":1,"130":1}}],["morgan",{"2":{"39":1}}],["more",{"2":{"1":1,"3":1,"4":2,"7":1,"8":1,"11":1,"13":2,"18":1,"19":4,"24":4,"26":1,"28":3,"29":6,"30":1,"31":1,"32":3,"39":3,"40":4,"61":1,"109":1,"137":1}}],["motivation",{"2":{"39":1}}],["moves",{"2":{"128":1}}],["moved",{"2":{"0":1}}],["moving",{"2":{"35":1}}],["moleculepokemonthumbnail",{"2":{"26":1}}],["moleculesearchinput",{"2":{"26":1}}],["molecules",{"2":{"26":2}}],["moments",{"2":{"30":1,"39":1}}],["moment",{"2":{"20":1,"24":2,"40":1,"131":1}}],["mocha",{"2":{"19":10}}],["monitor",{"2":{"19":2,"29":1}}],["monitoring",{"2":{"1":1}}],["money",{"2":{"19":1}}],["monolithic",{"2":{"26":1}}],["monospace",{"2":{"19":1}}],["mono",{"2":{"19":1}}],["modal",{"2":{"86":1}}],["modifiers",{"2":{"28":1}}],["modular",{"2":{"26":2,"27":1}}],["modules",{"2":{"10":6,"18":1,"19":2,"26":3,"27":1,"28":2,"32":1,"35":1}}],["module",{"0":{"92":1},"1":{"93":1,"94":1},"2":{"0":2,"19":1,"27":8,"28":2,"29":1,"32":1,"63":2,"88":2,"90":2,"94":1,"118":2,"121":1}}],["mod",{"2":{"19":1}}],["modes",{"2":{"128":2,"130":2}}],["model",{"2":{"28":3,"29":2,"31":1}}],["models",{"2":{"26":4,"36":1}}],["mode",{"2":{"19":3,"28":2,"30":1,"79":1,"91":1,"137":1}}],["modern",{"0":{"37":1},"2":{"10":1,"17":1,"18":1,"19":1,"24":1,"39":1,"86":1,"90":1}}],["mostly",{"2":{"4":1,"89":1}}],["most",{"2":{"1":1,"2":2,"7":1,"11":1,"18":2,"19":1,"26":1,"27":1,"29":2,"30":1,"32":1,"39":2,"40":2,"50":1}}],["max",{"2":{"130":1,"139":1}}],["maximum",{"2":{"130":1}}],["magnitude",{"2":{"40":1}}],["magic",{"2":{"24":1}}],["mat",{"2":{"40":1}}],["matter",{"2":{"39":1}}],["match",{"2":{"7":1,"137":1}}],["margin",{"2":{"98":1}}],["martin",{"2":{"26":1}}],["markdownlint",{"2":{"19":2}}],["markdown",{"0":{"47":1},"2":{"19":1,"47":1,"72":1}}],["machine",{"2":{"19":1}}],["macos",{"2":{"19":1}}],["made",{"2":{"19":1,"28":1,"29":1,"40":1,"89":1,"90":1}}],["mailmap",{"2":{"19":1}}],["mainly",{"2":{"28":1,"29":1}}],["mainlayout",{"0":{"128":1},"1":{"129":1},"2":{"13":2,"83":2,"130":1}}],["maintainability",{"2":{"26":2,"31":1}}],["maintainers",{"2":{"19":1}}],["maintenanceview",{"2":{"13":1}}],["maintenance",{"2":{"13":2}}],["main",{"2":{"0":1,"1":1,"5":1,"7":6,"19":1,"26":6,"27":1,"28":2,"30":2,"32":3,"38":1,"39":1,"50":1,"53":1,"98":1,"125":1,"129":1}}],["may",{"2":{"18":1,"28":1,"29":1,"33":2,"39":1,"40":1,"50":1,"56":1,"89":1}}],["makarov",{"2":{"51":2}}],["making",{"2":{"18":1,"40":1,"49":1,"66":1}}],["makes",{"2":{"0":1,"4":1,"7":1,"28":2,"29":2,"56":1,"109":1}}],["make",{"2":{"0":1,"1":2,"2":2,"11":1,"13":2,"24":2,"26":1,"28":1,"29":1,"32":1,"33":1,"34":3,"39":1,"40":1,"83":1,"88":1,"138":1}}],["map",{"2":{"10":2,"19":7}}],["mastery",{"2":{"39":1}}],["master",{"2":{"7":3,"19":1}}],["masked",{"2":{"9":1}}],["mask",{"2":{"3":2}}],["major",{"2":{"2":1}}],["mantinelayeredheader",{"0":{"115":1}}],["mantine",{"2":{"114":1,"115":1}}],["mantinerichfooter",{"0":{"106":1},"2":{"83":2}}],["mantinesimplefooter",{"0":{"105":1}}],["mantinesimpleheader",{"0":{"114":1},"2":{"83":2}}],["mantinesimplenavbar",{"0":{"133":1},"2":{"83":2}}],["manifest",{"0":{"137":1},"2":{"40":3,"83":1,"88":1,"118":1,"136":1,"137":2}}],["manipulating",{"2":{"1":1}}],["managing",{"2":{"26":1,"28":2}}],["manageable",{"2":{"138":1}}],["managed",{"2":{"40":1}}],["management",{"0":{"28":1},"2":{"28":3}}],["manage",{"2":{"26":2,"29":1}}],["manager",{"2":{"1":3,"7":1}}],["manual",{"2":{"19":1,"39":1}}],["manually",{"2":{"7":1,"19":1,"83":1}}],["many",{"2":{"1":1,"2":1,"8":1,"10":1,"17":1,"19":2,"29":1,"32":1,"39":1,"40":1,"89":1}}],["c2c2c4",{"2":{"139":1}}],["czrc",{"2":{"19":2}}],["cz",{"2":{"19":2}}],["cypress",{"2":{"19":10,"30":1}}],["cmakepresets",{"2":{"19":1}}],["cmake",{"2":{"19":3}}],["cmakelists",{"2":{"19":1}}],["cxx",{"2":{"19":1}}],["cjs",{"2":{"19":4}}],["cc",{"2":{"19":1}}],["c",{"2":{"19":1,"54":20,"73":17,"78":10,"79":11,"83":1,"139":9}}],["csproj",{"2":{"19":1}}],["cspell",{"2":{"19":2}}],["cshtml",{"2":{"19":2}}],["cs",{"2":{"19":12}}],["csshtml",{"2":{"98":1}}],["css3",{"0":{"36":1},"2":{"31":1,"36":1,"37":1,"86":1}}],["cssnano",{"2":{"19":10}}],["cssnanorc",{"2":{"19":10}}],["css",{"0":{"31":1,"45":1,"73":1,"98":1},"2":{"17":1,"19":5,"20":1,"29":1,"31":9,"36":1,"39":1,"40":1,"54":2,"59":4,"61":1,"63":2,"69":1,"72":3,"73":4,"76":4,"78":1,"79":1,"86":1,"90":1,"91":2,"121":1,"130":1,"135":1,"138":1,"139":4}}],["ctrlcmd",{"2":{"19":1}}],["cpus",{"2":{"32":1}}],["cpu",{"2":{"32":2,"126":1}}],["cpp",{"2":{"19":1}}],["cp",{"2":{"7":1}}],["curve",{"2":{"31":1}}],["cursorstyle",{"2":{"19":1}}],["cursorsmoothcaretanimation",{"2":{"19":1}}],["cursorblinking",{"2":{"19":1}}],["currently",{"2":{"56":1,"99":1,"102":1,"118":1}}],["currentcolor",{"2":{"9":2}}],["current",{"2":{"7":1,"24":1,"83":1}}],["customize",{"2":{"139":1}}],["customization",{"2":{"18":1,"19":3,"86":2,"88":1,"90":1,"121":1,"136":1}}],["customer",{"2":{"32":1,"36":1,"40":1}}],["custom",{"2":{"2":1,"17":1,"18":1,"19":2,"24":3,"31":2,"32":1,"110":2,"139":1}}],["cd",{"0":{"5":1},"2":{"5":5,"7":4,"30":1,"39":1,"84":1,"85":1,"121":1}}],["circle",{"2":{"54":2,"73":1,"78":1,"79":1}}],["circleci",{"2":{"19":2}}],["circumstances",{"2":{"32":1}}],["citation",{"2":{"19":1}}],["ci",{"0":{"5":1},"2":{"5":5,"7":1,"30":1,"39":1,"121":1}}],["clutters",{"2":{"26":1}}],["clone",{"2":{"85":1}}],["close",{"2":{"40":2}}],["closeonfiledelete",{"2":{"19":1}}],["cloud",{"2":{"2":4,"5":1,"17":2,"39":1}}],["clicked",{"2":{"130":1}}],["clicks",{"2":{"128":1}}],["click",{"2":{"109":1}}],["clicking",{"2":{"100":1}}],["click=",{"2":{"95":1,"125":1}}],["clippy",{"2":{"19":2}}],["clipboard",{"2":{"19":4}}],["cli",{"2":{"18":1,"19":2}}],["clients",{"2":{"3":1}}],["client",{"2":{"3":9,"4":2,"19":2,"40":2,"93":2,"138":2}}],["clamps",{"2":{"29":1}}],["clangd",{"2":{"19":1}}],["clang",{"2":{"19":2}}],["classes",{"2":{"28":2,"32":1,"46":1,"90":1,"91":2}}],["classpath",{"2":{"19":1}}],["class=",{"2":{"9":1,"14":3,"63":1,"91":4,"95":2}}],["class",{"2":{"8":1,"19":1,"28":1,"31":1,"32":1,"54":1,"135":1}}],["clarity",{"2":{"4":1}}],["clear",{"2":{"13":1,"26":1,"31":1,"89":1,"138":1}}],["cleared",{"2":{"1":1}}],["clean",{"2":{"7":1,"86":1,"124":1}}],["certified",{"2":{"51":2}}],["certification",{"2":{"39":2}}],["certifications",{"2":{"39":1}}],["certificate",{"2":{"17":3}}],["certificates",{"2":{"17":1}}],["certbot",{"2":{"17":1}}],["certain",{"2":{"1":2,"2":1,"24":1,"28":1,"32":1,"40":1,"56":1,"86":1,"89":2,"90":1}}],["center",{"2":{"1":1}}],["crm",{"2":{"90":1}}],["crawler",{"2":{"40":1}}],["crowdin",{"2":{"19":2}}],["crossorigin",{"2":{"63":2}}],["cross",{"2":{"3":2,"19":1}}],["credits",{"0":{"69":1},"2":{"19":1}}],["credo",{"2":{"19":1}}],["creator",{"2":{"29":1}}],["creation",{"2":{"19":1,"30":1}}],["creating",{"0":{"117":1},"1":{"118":1,"119":1,"120":1,"121":1},"2":{"3":1,"13":1,"18":1,"19":1,"29":1,"40":1,"86":1,"89":2,"90":1}}],["create",{"0":{"18":1,"83":1},"1":{"84":1},"2":{"8":1,"13":1,"18":2,"28":1,"31":1,"32":3,"49":1,"81":1,"83":5,"88":1,"89":4,"90":2,"109":1,"139":1}}],["created",{"2":{"7":1,"40":2,"50":1,"138":1}}],["creates",{"2":{"1":1,"24":1,"93":1}}],["crud",{"2":{"2":1}}],["critical",{"2":{"1":1}}],["cryptography",{"2":{"1":1}}],["cheat",{"0":{"41":1},"1":{"42":1,"43":1,"44":1,"45":1,"46":1,"47":1},"2":{"42":1,"43":1,"44":1,"45":4}}],["checkout",{"2":{"7":4}}],["check",{"2":{"1":1,"7":1,"19":1,"30":1,"39":2,"40":1,"64":1,"80":1,"121":1}}],["checks",{"2":{"1":2,"19":1}}],["checking",{"2":{"1":1,"28":3}}],["chat",{"2":{"50":1}}],["chaff",{"2":{"39":1}}],["changing",{"2":{"29":1,"32":1,"70":1,"90":1,"93":1,"123":1,"129":1}}],["changelocale",{"2":{"125":2}}],["changelog",{"2":{"19":1,"66":1}}],["changed",{"2":{"8":1,"29":1}}],["changes",{"2":{"5":1,"19":2,"24":2,"28":1,"29":3,"49":1,"66":1}}],["change",{"2":{"0":1,"1":1,"24":3,"26":1,"28":1,"29":3,"31":1,"32":1,"86":1,"121":1,"138":1}}],["chromium",{"2":{"24":1}}],["chrome",{"2":{"24":2,"40":1}}],["chosen",{"2":{"53":1}}],["choosing",{"2":{"39":1}}],["choose",{"2":{"19":1,"90":1,"99":1,"131":1}}],["choice",{"2":{"7":2,"19":1,"88":1,"93":1}}],["children",{"2":{"13":2}}],["chgrp",{"2":{"7":2}}],["came",{"2":{"40":2}}],["calc",{"2":{"98":1}}],["calculations",{"2":{"29":1}}],["call",{"2":{"93":1}}],["callback",{"2":{"32":1}}],["calling",{"2":{"28":1}}],["called",{"2":{"2":1,"28":4,"32":1,"109":1}}],["calls",{"2":{"0":1,"24":1,"93":2,"94":1,"123":1}}],["categories",{"2":{"32":1,"137":1}}],["category",{"2":{"28":1}}],["catalog",{"2":{"27":1}}],["catchpokemon",{"2":{"26":1}}],["catch",{"2":{"24":1}}],["caches",{"2":{"138":1}}],["cached",{"2":{"40":1}}],["cache",{"2":{"19":1,"121":1,"138":2}}],["caching",{"2":{"7":1,"28":1,"40":1,"138":2}}],["card",{"2":{"89":1,"134":1}}],["car",{"2":{"39":1}}],["cart",{"2":{"26":1}}],["carousel",{"0":{"22":1},"2":{"22":1}}],["cargo",{"2":{"19":2}}],["careful",{"2":{"30":1}}],["care",{"2":{"10":1,"29":1}}],["capabilities",{"2":{"18":1,"20":1,"24":1}}],["capture",{"2":{"1":1,"19":95}}],["cause",{"2":{"4":1}}],["cases",{"0":{"12":1},"2":{"1":1,"11":1,"13":2,"20":1,"24":1,"28":2,"40":2,"130":1}}],["case",{"2":{"1":4,"2":1,"7":2,"11":1,"17":1,"18":1,"24":1,"28":1,"29":2,"30":1,"32":1,"38":1,"39":1,"56":1,"79":1,"83":1}}],["cannot",{"2":{"0":1,"90":1}}],["can",{"2":{"0":2,"1":3,"2":4,"3":3,"4":2,"7":1,"8":4,"11":1,"12":2,"13":5,"16":1,"17":3,"18":1,"19":4,"24":2,"26":8,"27":2,"28":10,"29":8,"30":1,"31":3,"32":9,"39":8,"40":8,"49":1,"54":1,"56":1,"63":1,"64":2,"66":3,"68":1,"79":1,"80":2,"83":1,"89":1,"91":2,"93":1,"100":1,"110":1,"116":1,"123":1,"130":1,"135":1,"138":1}}],["coefficients",{"2":{"53":1}}],["covers",{"2":{"50":1}}],["coincides",{"2":{"40":1}}],["cost",{"2":{"40":1}}],["copy",{"2":{"33":1}}],["copying",{"2":{"18":1,"19":1}}],["cop",{"2":{"29":1}}],["cohesion",{"2":{"26":1}}],["cohesive",{"2":{"26":1}}],["coolcosmos",{"2":{"28":1}}],["cooler",{"2":{"19":1}}],["coordination",{"2":{"26":1}}],["cookie",{"2":{"1":4}}],["collect",{"2":{"90":1}}],["collects",{"2":{"18":1}}],["colleagues",{"2":{"39":1}}],["columnar",{"2":{"36":1}}],["column",{"2":{"31":1,"91":1}}],["colortheme",{"2":{"19":1}}],["color",{"2":{"9":3,"54":1,"78":1,"79":2,"121":1}}],["could",{"2":{"19":1,"89":1}}],["couple",{"2":{"19":1,"24":1,"36":1,"123":1}}],["coupled",{"2":{"12":1}}],["coupling",{"2":{"13":1,"27":1}}],["counterpart",{"2":{"40":1}}],["counterparties",{"2":{"29":1}}],["count`",{"2":{"7":1}}],["count=5",{"2":{"7":1}}],["courses",{"2":{"39":2}}],["course",{"2":{"4":1,"32":1,"39":1,"40":1}}],["corporation",{"2":{"137":1}}],["corner",{"2":{"68":1}}],["corridor",{"2":{"40":1}}],["correct",{"2":{"56":1}}],["corrections",{"2":{"49":1}}],["correctly",{"2":{"0":1}}],["corresponding",{"2":{"7":1,"24":1,"86":1}}],["core",{"2":{"26":2,"32":5}}],["cors",{"0":{"3":1},"2":{"3":8}}],["comfort",{"2":{"40":1}}],["comfortable",{"2":{"19":2,"28":1}}],["comfortably",{"2":{"11":1}}],["come",{"2":{"40":1,"50":1}}],["comes",{"2":{"32":1,"56":1}}],["combination",{"2":{"90":1}}],["combines",{"2":{"26":1}}],["combustion",{"2":{"39":1}}],["coming",{"2":{"32":1}}],["com",{"2":{"2":1,"3":9,"7":10,"17":5,"19":2,"51":1,"61":3,"63":2,"78":3,"79":3,"85":1,"93":1,"110":1,"111":1}}],["command",{"2":{"18":1,"83":1}}],["commands",{"2":{"7":1,"19":1}}],["communicate",{"2":{"13":1,"32":1,"94":1}}],["communications",{"2":{"4":1}}],["communication",{"2":{"0":2,"4":2,"118":1}}],["commenting",{"2":{"48":1}}],["comments",{"2":{"1":1,"26":1,"86":1}}],["commercial",{"2":{"7":1,"39":1}}],["commits",{"2":{"53":2,"56":2,"66":1}}],["commitlint",{"2":{"19":4}}],["commit",{"0":{"55":1},"1":{"56":1},"2":{"5":1}}],["common",{"2":{"1":2,"24":1,"29":1,"32":1}}],["competent",{"2":{"39":1,"48":1}}],["computations",{"2":{"32":2}}],["computer",{"2":{"18":1,"19":1,"40":1}}],["computed",{"2":{"9":3,"15":2}}],["compile",{"2":{"19":1}}],["compileroptions",{"2":{"18":1}}],["companies",{"2":{"39":1}}],["company",{"2":{"1":1}}],["comparable",{"2":{"30":1}}],["comparison",{"2":{"26":1}}],["compare",{"2":{"19":6}}],["compression",{"2":{"10":1}}],["complicated",{"2":{"40":1}}],["complicates",{"2":{"0":1}}],["completely",{"2":{"32":1,"39":1}}],["completion",{"2":{"19":1}}],["complex",{"2":{"1":1,"4":1,"26":7,"28":1,"29":1,"31":1,"40":1}}],["complexity",{"2":{"0":1,"26":4,"27":1,"29":2,"50":1}}],["compound",{"2":{"123":1}}],["composition",{"2":{"24":3,"28":1,"39":1,"86":1}}],["composite",{"2":{"11":1,"28":1}}],["compose",{"2":{"19":1}}],["composer",{"2":{"19":2}}],["composable",{"2":{"13":1,"24":1,"28":14,"29":2,"32":2,"86":1,"91":2,"101":1,"123":1}}],["composables",{"2":{"0":1,"14":1,"16":1,"26":2,"27":1,"28":2,"91":1,"95":1,"125":2}}],["components",{"0":{"34":1},"2":{"0":1,"11":1,"12":3,"13":3,"18":1,"19":1,"20":1,"26":10,"27":3,"28":4,"29":4,"31":5,"32":2,"34":3,"35":1,"79":2,"83":1,"85":1,"90":1,"95":1,"121":2,"139":1}}],["component",{"0":{"16":1,"61":1,"76":1,"77":1},"1":{"78":1,"79":1,"80":1},"2":{"0":4,"8":1,"10":1,"12":2,"13":4,"19":7,"24":1,"26":2,"28":18,"29":2,"31":3,"59":1,"61":1,"66":2,"80":1,"90":1,"95":2,"101":1,"119":2,"125":1,"139":1}}],["concurrency",{"2":{"32":1}}],["concepts",{"2":{"32":1}}],["concept",{"2":{"1":1,"26":2,"29":1,"32":1}}],["connoisseurs",{"2":{"19":1}}],["connecting",{"2":{"61":1}}],["connection",{"2":{"4":1,"19":2,"125":1}}],["connects",{"2":{"26":1}}],["connect",{"2":{"8":1,"11":1,"17":1,"28":1,"63":1,"90":1}}],["connected",{"2":{"8":1,"11":1,"73":1}}],["conditional",{"2":{"32":1}}],["conditions",{"2":{"8":1}}],["conduct",{"2":{"19":1}}],["confusing",{"2":{"28":1}}],["conflict",{"2":{"19":1}}],["conf",{"2":{"19":1}}],["confirmsync",{"2":{"19":1}}],["confirmdraganddrop",{"2":{"19":1}}],["confirmdelete",{"2":{"19":1}}],["configs",{"2":{"19":1}}],["config",{"0":{"110":1},"2":{"18":3,"19":226,"83":4,"86":1,"97":1,"110":1,"111":1}}],["configuring",{"0":{"19":1}}],["configure",{"2":{"18":2}}],["configured",{"2":{"3":1,"7":1}}],["configurations",{"2":{"19":1,"40":1}}],["configuration",{"0":{"52":1,"79":1},"1":{"53":1,"54":1},"2":{"7":1,"12":2,"19":1,"83":1,"91":1,"97":1,"118":1}}],["consume",{"2":{"126":1}}],["consultant",{"2":{"51":1}}],["consequence",{"2":{"27":1}}],["cons",{"2":{"26":1,"28":2,"31":2}}],["consists",{"2":{"95":1}}],["consist",{"2":{"28":1}}],["consistency",{"2":{"28":1}}],["consistent",{"2":{"26":1}}],["considers",{"2":{"28":1}}],["consider",{"2":{"13":1,"26":1,"32":1,"40":1}}],["considerations",{"0":{"13":1},"1":{"14":1,"15":1,"16":1}}],["console",{"2":{"7":1,"24":3,"32":1}}],["constraints",{"2":{"28":1}}],["construct",{"2":{"28":1}}],["constructor",{"2":{"0":1}}],["constant",{"2":{"1":1}}],["constantly",{"2":{"1":1}}],["const",{"2":{"0":3,"9":3,"10":5,"13":2,"14":1,"15":2,"16":1,"24":1,"28":1,"53":1,"63":1,"91":1,"93":2,"94":2,"95":1,"125":2}}],["contacts",{"2":{"49":1}}],["container",{"2":{"37":1,"79":1,"91":2}}],["contain",{"2":{"3":1,"7":1,"27":1,"31":1,"56":1,"116":1}}],["contains",{"2":{"3":2,"28":1}}],["continue",{"2":{"36":1,"86":1}}],["continuous",{"2":{"5":2}}],["controversial",{"2":{"89":1}}],["controlled",{"2":{"101":1,"135":1,"139":1}}],["controller",{"2":{"19":1,"26":1,"28":3,"29":2}}],["controls",{"2":{"24":1,"29":1}}],["control",{"2":{"1":1,"3":4,"29":1,"46":1}}],["contributions",{"2":{"81":1}}],["contributing",{"2":{"19":1}}],["contribute",{"0":{"49":1}}],["contributors",{"2":{"19":1}}],["content=",{"2":{"134":11}}],["content",{"2":{"40":5,"83":1,"88":1,"90":1,"94":1,"129":1}}],["contentlayer",{"2":{"19":10}}],["contents",{"2":{"7":1,"73":1}}],["context",{"2":{"0":1}}],["convenience",{"2":{"0":1,"1":1,"48":2}}],["conveniently",{"2":{"89":1}}],["convenient",{"2":{"0":2,"4":2,"7":1,"11":1,"13":1,"17":1,"19":2,"24":1,"28":2,"31":3,"32":1,"39":1,"66":1,"88":1,"94":1}}],["codesandbox",{"2":{"19":1}}],["coder",{"2":{"19":1}}],["codeowners",{"2":{"19":1}}],["codecov",{"2":{"19":10}}],["codelens",{"2":{"19":4}}],["codeaction",{"2":{"19":1}}],["codeactions",{"2":{"19":1}}],["codeactionsonsave",{"2":{"19":2}}],["codeium",{"2":{"19":1}}],["code",{"0":{"59":1,"97":1},"2":{"0":4,"2":2,"3":1,"4":1,"5":2,"7":2,"11":1,"19":11,"24":1,"28":1,"29":5,"31":3,"32":5,"33":1,"35":3,"39":4,"40":2,"48":1,"64":1,"80":1,"83":1,"86":1,"88":1,"89":1,"90":2,"91":1,"93":2,"94":1,"97":2,"109":1,"111":1,"118":1,"125":4,"126":2,"135":1}}],["ignite",{"2":{"135":1}}],["ignoredlocales",{"2":{"19":1}}],["ignore",{"2":{"19":2,"83":1}}],["ignoretrimwhitespace",{"2":{"19":1}}],["ignorerecommendations",{"2":{"19":1}}],["io",{"2":{"109":1}}],["illustration",{"2":{"86":1}}],["illogical",{"2":{"0":1,"28":1}}],["irretrievably",{"2":{"20":1,"24":1}}],["i18next",{"0":{"123":1,"126":1},"2":{"24":1,"123":1,"124":1,"126":3,"127":1}}],["i18n",{"0":{"122":1},"1":{"123":1,"124":1,"125":1,"126":1,"127":1},"2":{"12":1,"19":3,"24":3,"86":1,"88":1,"90":1,"120":2,"123":2,"125":1,"126":1}}],["ie6",{"2":{"31":1}}],["iex",{"2":{"19":1}}],["ie11",{"2":{"10":1}}],["ie",{"2":{"10":1}}],["iconify",{"2":{"10":1,"19":2}}],["icon",{"2":{"8":2,"9":1,"10":1,"40":1,"95":2,"100":1,"119":1,"128":1,"130":1}}],["icons",{"0":{"10":1},"2":{"8":3,"9":2,"10":2,"18":1,"26":1,"137":1}}],["imagine",{"2":{"28":1}}],["imageresources",{"2":{"10":3}}],["imageraw",{"2":{"8":1}}],["imagenameinvariable",{"2":{"8":1}}],["image",{"2":{"8":4,"134":4}}],["imageurl",{"2":{"8":1}}],["images",{"2":{"7":1,"8":10,"10":3,"26":4,"40":2,"95":1,"134":1,"138":1}}],["imgurl",{"2":{"8":2}}],["img",{"2":{"8":6,"9":1}}],["immediately",{"2":{"8":1,"40":2,"66":1}}],["impression",{"2":{"48":1}}],["improve",{"2":{"39":1,"40":1,"118":1,"138":1}}],["improvement",{"2":{"24":1}}],["improving",{"2":{"35":1}}],["implies",{"2":{"40":1}}],["implements",{"2":{"86":1,"94":1,"139":1}}],["implemented",{"2":{"56":2,"91":1,"93":1,"101":1}}],["implement",{"2":{"13":1,"26":1}}],["implementations",{"2":{"24":1}}],["implementation",{"0":{"96":1},"1":{"97":1,"98":1},"2":{"4":1,"24":2,"33":1,"38":1,"124":1,"126":1,"138":1}}],["impose",{"2":{"89":1}}],["impossible",{"2":{"28":1,"32":1,"39":1}}],["important",{"2":{"30":1,"38":1}}],["importing",{"2":{"8":1}}],["imported",{"2":{"8":1}}],["import",{"2":{"0":7,"8":4,"9":4,"10":7,"14":1,"16":1,"18":3,"19":2,"28":2,"59":4,"63":1,"72":4,"76":4,"91":1,"93":1,"94":5,"95":3,"125":1}}],["id=g",{"2":{"111":1}}],["id=",{"2":{"63":1}}],["idx",{"2":{"19":1}}],["identifiers",{"2":{"95":1}}],["identifying",{"2":{"40":1}}],["ides",{"2":{"32":1}}],["ideally",{"2":{"28":1}}],["ideal",{"2":{"26":2}}],["ideas",{"2":{"26":1}}],["idea",{"2":{"26":1,"28":1,"40":1}}],["ide",{"0":{"19":1},"2":{"19":1,"48":1}}],["id",{"2":{"7":2,"15":3,"16":1,"111":1}}],["i",{"2":{"4":1,"8":1,"12":1,"18":1,"19":2,"26":1,"28":4,"29":1,"30":1,"32":2,"39":5,"84":1,"85":1}}],["ip",{"2":{"1":1}}],["iphones",{"2":{"1":1}}],["if=",{"2":{"9":1}}],["if",{"2":{"0":1,"1":5,"2":1,"3":5,"7":5,"8":2,"10":1,"11":1,"13":1,"17":1,"18":3,"19":1,"24":1,"27":1,"28":5,"31":2,"32":2,"33":2,"34":1,"39":4,"40":3,"86":1,"90":1,"109":1,"110":2,"126":1,"130":1}}],["iife",{"2":{"0":1}}],["inefficient",{"2":{"40":1}}],["inexpensive",{"2":{"17":1}}],["infinite",{"2":{"32":1}}],["info",{"2":{"3":3}}],["informational",{"2":{"7":1}}],["information",{"2":{"1":2,"7":1,"12":1,"18":1,"39":1,"50":3,"53":2,"66":1,"137":1}}],["ingredient",{"2":{"30":1}}],["innovation",{"2":{"28":1}}],["inner",{"2":{"13":1}}],["involved",{"2":{"89":1}}],["invented",{"2":{"27":1,"29":1,"40":1}}],["invisiblecharacters",{"2":{"19":1}}],["inheritance",{"2":{"24":1,"32":2}}],["inplace",{"2":{"19":1}}],["input",{"2":{"19":1,"29":1}}],["inputs",{"2":{"7":5}}],["inlinesuggest",{"2":{"19":1}}],["insertfinalnewline",{"2":{"19":1}}],["inside",{"2":{"12":1,"19":1,"24":2,"28":1,"118":1,"131":1}}],["instances",{"2":{"28":1}}],["installation",{"0":{"57":1,"58":1,"71":1,"75":1,"83":1,"85":1},"1":{"58":1,"59":1,"60":1,"61":1,"84":1},"2":{"40":1,"83":1}}],["installed",{"2":{"7":1,"40":1,"83":1,"85":1}}],["install",{"2":{"2":2,"7":11,"17":1,"19":1,"39":1,"58":1,"71":1,"75":1,"83":1,"137":1}}],["instructions",{"2":{"7":1,"60":1}}],["instead",{"2":{"3":1,"18":1,"24":1,"28":1,"40":1,"94":2,"135":1}}],["injection",{"2":{"97":2}}],["injections",{"0":{"97":1},"2":{"97":2}}],["injecting",{"2":{"13":1}}],["injected",{"2":{"90":1}}],["inject",{"2":{"11":1,"12":3,"13":2,"28":2}}],["inc",{"2":{"137":1}}],["include",{"2":{"86":1,"121":1}}],["includes",{"2":{"48":1,"86":1}}],["including",{"2":{"18":1,"19":1,"24":1,"31":1,"32":1,"70":1,"90":1,"121":1}}],["increasing",{"2":{"32":1}}],["increase",{"2":{"32":1,"50":1}}],["increases",{"2":{"8":1,"27":1,"33":1,"40":1}}],["increased",{"2":{"8":1}}],["inch",{"2":{"19":1}}],["inconvenience",{"2":{"27":1}}],["inconvenient",{"2":{"8":1}}],["incoming",{"2":{"4":1}}],["indirect",{"2":{"28":1}}],["individually",{"2":{"1":1}}],["ind",{"2":{"19":1}}],["independent",{"2":{"26":1,"28":1,"51":1}}],["independently",{"2":{"26":1,"27":1}}],["independence",{"2":{"11":1}}],["indent",{"2":{"19":1}}],["indexed",{"2":{"40":1}}],["indexing",{"2":{"40":1}}],["index",{"0":{"97":1},"2":{"7":2,"26":6,"40":3,"61":1,"78":1,"79":1,"97":1,"111":1,"134":1,"135":1}}],["initi18n",{"2":{"125":2}}],["initialized",{"2":{"95":1}}],["initialization",{"2":{"94":1,"111":1,"125":1}}],["initializing",{"0":{"84":1}}],["initially",{"2":{"27":1}}],["initial",{"2":{"26":1}}],["initiating",{"2":{"3":1}}],["init",{"2":{"0":1,"7":2,"94":1}}],["introduction",{"0":{"50":1},"1":{"51":1}}],["introduce",{"2":{"33":1}}],["introduced",{"2":{"24":2,"28":1,"29":2}}],["intl",{"2":{"20":1,"24":1}}],["intended",{"2":{"39":1}}],["intensive",{"2":{"32":1,"40":1}}],["integrate",{"2":{"90":2}}],["integrated",{"2":{"19":5,"136":1}}],["integrating",{"2":{"86":1}}],["integration",{"2":{"5":1,"28":1,"30":1,"86":1,"118":1,"121":1}}],["intermediate",{"2":{"29":1,"39":1}}],["intermediary",{"2":{"3":1}}],["interaction",{"2":{"32":1}}],["interactions",{"2":{"26":1}}],["interactivity",{"2":{"29":1}}],["interfering",{"2":{"26":1}}],["interfaces",{"2":{"46":1}}],["interface",{"2":{"2":1,"30":1,"48":1}}],["intersection",{"2":{"24":1}}],["interval",{"2":{"19":1}}],["internal",{"2":{"29":1,"39":1}}],["internally",{"2":{"8":1}}],["internationalization",{"2":{"12":1,"24":3,"120":1,"123":2}}],["internet",{"2":{"2":3,"3":3,"39":3}}],["interesting",{"2":{"7":1,"28":1,"50":1}}],["interceptors",{"2":{"0":1,"93":2,"94":1}}],["into",{"2":{"0":3,"1":1,"5":1,"8":1,"11":1,"12":2,"18":1,"26":5,"27":2,"29":2,"31":2,"32":2,"40":2,"66":1,"97":1,"136":1}}],["in",{"0":{"28":1,"59":1,"60":1,"76":1,"97":1,"110":1,"120":1},"2":{"0":12,"1":19,"2":13,"3":3,"4":2,"5":2,"7":7,"8":11,"10":4,"11":3,"12":2,"13":3,"16":1,"17":1,"18":9,"19":14,"20":2,"24":18,"26":2,"27":3,"28":32,"29":15,"30":6,"31":4,"32":13,"33":3,"39":9,"40":22,"48":1,"50":2,"51":1,"53":1,"56":4,"59":2,"63":1,"66":5,"68":1,"69":1,"72":1,"73":1,"76":1,"78":1,"79":3,"83":3,"84":1,"86":6,"89":2,"90":1,"91":3,"93":2,"94":1,"95":1,"97":1,"98":1,"109":2,"110":1,"114":1,"115":1,"118":1,"123":2,"124":1,"125":3,"126":3,"128":3,"130":4,"135":2,"137":1,"138":2,"139":3}}],["isdraweropen",{"2":{"95":3}}],["isn",{"2":{"28":2}}],["isauthenticated",{"2":{"28":1}}],["ist",{"2":{"19":1}}],["issues",{"2":{"54":2,"78":1,"79":1,"121":1}}],["issuelist",{"2":{"26":1}}],["issuenumberlabel",{"2":{"19":1}}],["issued",{"2":{"1":1}}],["is",{"2":{"0":9,"1":25,"2":11,"3":12,"4":4,"5":2,"7":6,"8":4,"10":3,"11":1,"13":6,"17":2,"18":8,"19":13,"20":2,"22":1,"24":10,"26":5,"27":5,"28":35,"29":13,"30":5,"31":5,"32":20,"33":2,"35":1,"36":1,"38":1,"39":15,"40":21,"49":1,"50":1,"53":1,"56":4,"59":1,"64":1,"66":2,"76":1,"79":1,"80":1,"83":1,"85":1,"86":5,"89":3,"90":1,"91":1,"93":2,"94":3,"97":1,"98":1,"100":1,"101":2,"110":1,"123":1,"124":1,"126":3,"127":2,"128":1,"129":1,"130":3,"131":2,"135":3,"138":2,"139":4}}],["itself",{"2":{"7":1,"24":2,"28":1,"30":1,"35":1,"40":1,"89":1}}],["its",{"2":{"1":3,"2":2,"3":1,"7":3,"8":1,"18":2,"19":1,"24":1,"26":1,"27":1,"28":2,"29":3,"31":1,"32":2,"33":1,"38":1,"39":1,"40":8,"48":1,"64":1,"70":1,"73":1,"80":1}}],["item",{"2":{"1":1}}],["it",{"2":{"0":5,"1":24,"2":7,"3":2,"4":5,"7":7,"10":1,"11":2,"12":3,"13":4,"17":2,"18":4,"19":11,"24":6,"26":2,"27":2,"28":19,"29":11,"30":1,"31":3,"32":9,"33":5,"34":1,"36":3,"39":11,"40":17,"56":1,"64":1,"66":1,"83":4,"85":1,"86":2,"88":1,"89":5,"90":2,"97":1,"100":1,"123":3,"126":2,"131":1,"135":1,"137":2,"139":1}}],["twitter",{"2":{"51":1,"134":8}}],["twenty",{"2":{"39":1}}],["two",{"2":{"1":2,"11":1,"13":1,"32":4,"39":3,"40":3,"99":1,"116":1,"131":1}}],["tune",{"2":{"90":1}}],["tutorial",{"2":{"39":3}}],["turn",{"2":{"28":1}}],["turned",{"2":{"19":1}}],["turbo",{"2":{"19":2}}],["txt",{"2":{"19":1,"26":4}}],["tmp",{"2":{"19":1}}],["tsup",{"2":{"19":2}}],["tslint",{"2":{"19":2}}],["tsdoc",{"2":{"19":11}}],["tsdk",{"2":{"19":1}}],["tsx",{"2":{"19":3}}],["tsconfig",{"2":{"18":2,"19":11}}],["tsc",{"2":{"18":1}}],["tsimport",{"2":{"15":1}}],["ts",{"0":{"15":1},"2":{"19":33,"26":3,"28":1,"91":1,"93":1,"94":1,"95":3,"97":1,"110":1,"125":2}}],["title",{"2":{"39":1,"53":2,"134":4}}],["titlebarstyle",{"2":{"19":1}}],["tied",{"2":{"36":1}}],["tips",{"2":{"32":1}}],["tip",{"2":{"24":1,"29":1,"39":1,"94":1}}],["tidy",{"2":{"19":1}}],["tight",{"2":{"13":1}}],["tightly",{"2":{"12":1,"29":1}}],["timeline>",{"2":{"61":1}}],["timeline",{"0":{"65":1,"66":1},"1":{"66":1,"67":1,"68":1,"69":1},"2":{"53":2,"58":3,"59":4,"61":3,"63":6,"64":1,"66":1,"70":1,"71":3,"72":5,"73":1,"75":3,"76":4,"78":3,"79":4,"80":1}}],["times",{"2":{"18":2,"28":2,"32":1,"40":1}}],["timestamp",{"2":{"7":1}}],["time",{"0":{"24":1},"2":{"1":2,"4":1,"7":1,"11":1,"19":1,"24":2,"28":1,"30":6,"32":2,"33":1,"35":2,"39":2,"56":1,"89":1,"123":1}}],["tapping",{"2":{"100":1}}],["tahoma",{"2":{"54":1}}],["tags",{"2":{"83":1,"88":1,"118":1,"134":4}}],["tag",{"2":{"31":1,"111":2,"135":1}}],["taking",{"2":{"29":1,"39":1}}],["taken",{"2":{"29":1,"66":1}}],["takes",{"2":{"28":1,"59":1,"66":1,"76":1}}],["take",{"2":{"4":1,"19":1,"24":1,"26":1,"30":2,"40":1,"89":1,"123":1}}],["tablet",{"2":{"91":4,"100":1,"128":1,"130":1}}],["table",{"2":{"26":1}}],["tabs",{"2":{"19":1}}],["tabsize",{"2":{"19":1}}],["task",{"2":{"19":1,"29":1,"90":1}}],["tasks",{"2":{"19":2,"89":3}}],["tazerc",{"2":{"19":2}}],["tailwind",{"2":{"19":10,"31":2,"36":1}}],["tail",{"2":{"7":1}}],["target",{"2":{"7":15,"18":1}}],["type=",{"2":{"63":1,"125":1}}],["typedoc",{"2":{"19":2}}],["types",{"2":{"18":1,"28":2,"30":1,"46":1,"99":1,"102":1,"138":1}}],["typescript",{"0":{"46":1},"2":{"4":1,"13":1,"18":3,"19":6,"28":2,"46":4,"86":1}}],["type",{"2":{"7":1,"9":7,"13":1,"28":1,"31":1,"94":1,"134":1}}],["typicode",{"2":{"2":1,"93":1}}],["telegram",{"2":{"50":1}}],["tells",{"2":{"83":1}}],["tell",{"0":{"20":1}}],["teaches",{"2":{"39":2}}],["teacher",{"2":{"39":1}}],["team",{"2":{"26":1,"40":1}}],["teams",{"2":{"26":4,"29":1}}],["techniques",{"2":{"90":1}}],["technical",{"2":{"38":1,"66":1}}],["technologies",{"2":{"18":1,"24":1,"26":1,"39":1,"89":2}}],["technology",{"2":{"5":1,"26":1}}],["terserrc",{"2":{"19":10}}],["term",{"2":{"26":1}}],["terminal",{"2":{"19":5}}],["terms",{"2":{"2":1,"24":1,"31":1,"40":1}}],["tex",{"2":{"19":1}}],["textbooks",{"2":{"39":1}}],["textbook",{"2":{"39":1}}],["textlint",{"2":{"19":2}}],["text",{"2":{"12":1,"40":4,"54":6,"73":6,"78":3,"79":3,"123":1,"139":6}}],["temporarily",{"2":{"24":1}}],["temporary",{"2":{"3":1}}],["templatepokemondetail",{"2":{"26":1}}],["templatepokemonlist",{"2":{"26":1}}],["templates",{"2":{"26":2,"40":1,"89":1,"121":1}}],["template>",{"2":{"9":2,"13":6,"14":2,"31":2,"95":2,"116":2,"125":2}}],["template",{"2":{"8":1,"27":1,"29":1,"31":1,"86":1,"88":2,"90":1,"116":3,"118":2}}],["testnet",{"2":{"94":1}}],["testjsonrpc",{"2":{"94":1}}],["testrest",{"2":{"93":2}}],["tests",{"2":{"26":6,"28":1,"30":11,"40":1}}],["testing",{"0":{"30":1},"2":{"2":1,"5":1,"30":6,"85":1,"121":1}}],["test",{"2":{"2":1,"7":1,"19":1,"30":1,"90":1,"125":1}}],["t",{"2":{"0":1,"2":1,"7":1,"8":1,"13":1,"18":3,"19":2,"26":1,"28":2,"29":3,"32":1,"33":3,"34":1,"40":2,"86":1,"110":1,"123":2,"125":2,"126":1}}],["tricks",{"0":{"98":1}}],["trivial",{"2":{"32":1}}],["tries",{"2":{"19":1}}],["triggerexpansionontab",{"2":{"19":1}}],["training",{"2":{"39":2}}],["traffic",{"2":{"39":1}}],["tragedy",{"2":{"31":1}}],["tracking",{"2":{"24":1,"66":1}}],["tracks",{"2":{"24":1}}],["track",{"2":{"24":3,"29":1}}],["travis",{"2":{"19":2}}],["transactions",{"2":{"123":1}}],["transmission",{"2":{"39":1}}],["transform",{"2":{"29":1}}],["transformer",{"2":{"19":1}}],["transfer",{"2":{"7":1,"19":1}}],["translation",{"2":{"12":1,"123":2}}],["translate",{"2":{"4":1,"26":3}}],["transition",{"2":{"5":1,"26":1}}],["transpile",{"2":{"18":1}}],["transparently",{"2":{"11":1}}],["transparent",{"2":{"1":1,"7":1,"10":1,"13":1,"78":1,"79":2}}],["transport",{"2":{"0":1,"4":1,"39":1,"93":3}}],["trend",{"2":{"31":1}}],["tree",{"2":{"10":1,"19":3,"28":3,"33":1}}],["trevis",{"2":{"5":1}}],["trying",{"2":{"32":1}}],["try",{"2":{"10":2,"19":1,"32":1,"36":1,"39":3}}],["trusted",{"2":{"3":2}}],["true",{"2":{"0":1,"7":1,"10":2,"13":1,"19":61,"53":7,"83":4}}],["those",{"2":{"90":1}}],["thorough",{"2":{"26":1,"28":1}}],["than",{"2":{"18":2,"24":1,"28":3,"29":1,"31":1,"32":2,"36":1,"40":2,"127":1}}],["that",{"2":{"0":1,"1":5,"2":3,"3":4,"8":1,"11":2,"12":5,"13":1,"17":1,"18":1,"19":1,"24":2,"26":6,"27":1,"28":20,"29":5,"30":3,"31":3,"32":3,"39":7,"40":6,"50":1,"86":4,"89":4,"90":1,"91":1,"93":1,"110":1,"123":1}}],["threshold",{"2":{"29":1,"116":2}}],["threads",{"2":{"32":10}}],["thread",{"2":{"29":1,"32":7}}],["three",{"2":{"7":2,"56":1,"138":1}}],["throw",{"2":{"7":1}}],["throughout",{"2":{"27":1,"28":1}}],["through",{"2":{"1":1,"12":1,"13":1,"18":1,"31":1,"32":1,"39":1,"56":1,"86":1}}],["thus",{"2":{"2":1,"32":1}}],["think",{"2":{"28":1,"32":1}}],["thinner",{"2":{"24":1}}],["thing",{"2":{"4":1,"31":1}}],["things",{"2":{"2":1,"19":1,"24":2,"32":2,"40":1,"123":2}}],["third",{"0":{"34":1},"2":{"1":1,"3":5,"4":1,"28":1,"33":1,"40":1,"56":2,"86":2,"138":1}}],["this",{"0":{"49":1},"2":{"0":1,"1":4,"2":1,"3":1,"7":4,"8":2,"11":1,"13":1,"16":1,"17":2,"18":2,"19":5,"20":1,"24":3,"26":9,"27":1,"28":11,"29":13,"30":3,"31":2,"32":9,"34":1,"35":1,"38":1,"39":6,"40":7,"48":1,"50":1,"56":1,"79":2,"80":1,"83":3,"85":1,"90":1,"110":1,"123":1,"138":2}}],["theoretical",{"2":{"32":1}}],["themselves",{"2":{"17":1,"29":1,"89":1,"90":1,"97":1}}],["themetoggle",{"2":{"139":1}}],["themes",{"0":{"139":1},"2":{"12":1,"32":1,"54":1,"66":1,"70":1,"88":1,"90":2,"121":2,"139":4}}],["theme",{"2":{"12":1,"54":1,"119":2,"139":2}}],["them",{"2":{"7":1,"8":3,"12":4,"13":4,"18":1,"19":2,"24":1,"28":4,"30":1,"31":1,"32":1,"34":3,"35":1,"39":1,"40":1,"54":1,"66":1,"79":1,"86":1,"126":1}}],["these",{"2":{"2":2,"3":1,"24":1,"28":1,"30":1,"32":3,"40":1}}],["theft",{"2":{"1":1}}],["their",{"2":{"1":1,"2":3,"8":1,"18":1,"20":1,"26":1,"28":1,"29":1,"30":1,"31":1,"39":1,"40":1,"90":1,"95":1}}],["they",{"2":{"0":1,"1":1,"7":1,"8":4,"18":1,"24":1,"26":2,"28":2,"29":2,"31":1,"32":2,"35":1,"39":1,"40":1}}],["therefore",{"2":{"31":1,"79":1}}],["there",{"2":{"0":2,"1":3,"2":4,"7":2,"8":1,"10":1,"11":1,"13":1,"19":3,"20":3,"27":1,"28":6,"29":2,"30":2,"31":1,"32":4,"33":1,"39":4,"40":2,"53":1,"56":2,"89":2,"97":1,"99":1,"126":1,"127":1}}],["then",{"2":{"0":2,"1":2,"2":1,"7":4,"10":1,"18":1,"28":3,"32":2,"40":6}}],["the",{"0":{"19":1,"38":1,"49":1,"51":1,"58":1,"85":1,"97":1},"2":{"0":25,"1":67,"2":16,"3":40,"4":13,"5":2,"7":43,"8":22,"9":1,"10":5,"11":7,"12":3,"13":11,"17":4,"18":9,"19":16,"20":2,"22":1,"24":35,"26":18,"27":6,"28":50,"29":41,"30":17,"31":20,"32":35,"33":3,"34":2,"35":2,"36":1,"38":2,"39":28,"40":55,"48":6,"49":2,"50":9,"53":3,"54":4,"56":17,"59":1,"63":1,"66":2,"68":2,"73":2,"79":6,"81":1,"83":9,"86":12,"89":7,"90":12,"91":2,"93":9,"94":6,"95":4,"97":3,"98":2,"100":1,"102":1,"109":10,"110":3,"111":1,"116":3,"118":5,"119":1,"120":1,"121":3,"123":10,"124":1,"126":2,"127":2,"128":3,"129":2,"130":7,"131":3,"135":7,"136":1,"137":2,"138":5,"139":6}}],["touch",{"2":{"101":2}}],["touchslideoutdrawer",{"0":{"101":1},"2":{"101":1}}],["touched",{"2":{"50":1}}],["toggle",{"2":{"95":1,"119":1}}],["together",{"2":{"26":1,"29":1,"32":1,"33":1}}],["todos",{"2":{"93":1}}],["top",{"2":{"50":1,"118":1}}],["topics",{"2":{"50":1}}],["topic",{"2":{"30":1}}],["too",{"2":{"39":1,"40":1}}],["took",{"2":{"32":1}}],["toolchain",{"2":{"19":1}}],["tool",{"2":{"18":1,"19":3,"38":1,"89":1}}],["tools",{"2":{"5":1,"24":1,"30":1,"40":1,"89":1}}],["towards",{"2":{"26":1}}],["toaster",{"0":{"23":1},"2":{"86":1}}],["toml",{"2":{"19":10}}],["toc",{"2":{"19":1}}],["tokens",{"2":{"1":2,"12":1,"121":1}}],["token",{"2":{"0":1,"1":15,"48":4,"53":2,"66":1}}],["to",{"0":{"2":1,"4":2,"49":1,"108":2},"1":{"109":2,"110":2},"2":{"0":13,"1":33,"2":15,"3":11,"4":8,"5":1,"7":30,"8":8,"9":1,"10":3,"11":5,"12":4,"13":7,"16":1,"17":8,"18":12,"19":12,"24":6,"26":10,"27":4,"28":26,"29":19,"30":5,"31":7,"32":23,"33":3,"34":2,"35":2,"36":5,"39":21,"40":26,"49":1,"53":4,"54":5,"56":8,"59":1,"66":1,"70":1,"73":1,"76":1,"79":4,"83":2,"86":4,"89":8,"90":11,"93":3,"94":2,"95":2,"97":1,"98":1,"99":1,"101":1,"109":3,"110":1,"118":3,"119":1,"121":3,"126":2,"130":1,"131":1,"135":1,"137":2,"138":1,"139":2}}],["a8b1ff",{"2":{"54":1,"78":1,"79":1}}],["aesthetics",{"2":{"48":1}}],["afraid",{"2":{"39":1}}],["affects",{"2":{"33":1,"53":1}}],["affecting",{"2":{"26":1}}],["after",{"2":{"4":1,"5":1,"7":3,"17":1,"32":1,"40":2,"116":1,"127":1,"135":1}}],["agnostic",{"2":{"93":1}}],["ago",{"2":{"24":1}}],["against",{"2":{"7":1,"124":1}}],["again",{"2":{"4":1,"39":1}}],["azure",{"2":{"19":2}}],["air",{"2":{"19":1}}],["ava",{"2":{"19":10}}],["available",{"0":{"118":1,"119":1},"2":{"8":1,"10":1,"28":2,"40":1,"66":1,"85":1,"90":1,"102":1,"109":1,"118":1}}],["avoids",{"2":{"29":1}}],["avoided",{"2":{"24":1}}],["avoid",{"0":{"33":1},"2":{"13":1,"26":1,"97":1,"121":1}}],["aux",{"2":{"19":1}}],["audio",{"2":{"8":1}}],["autocompleterefs",{"2":{"19":1}}],["autodetection",{"2":{"19":1}}],["autodetectcolorscheme",{"2":{"19":1}}],["autofetch",{"2":{"19":1}}],["autoupdate",{"2":{"19":1}}],["auto",{"2":{"7":1,"9":1,"19":1,"137":1}}],["automatically",{"2":{"7":1,"29":1,"109":1}}],["automation",{"2":{"7":1,"39":1,"109":1}}],["automating",{"2":{"5":1,"66":1}}],["automate",{"2":{"7":1}}],["author",{"0":{"51":1},"2":{"50":1}}],["authors",{"2":{"19":3}}],["authorization",{"0":{"1":1},"2":{"1":6}}],["authentication",{"0":{"1":1},"2":{"1":7,"2":1,"12":3,"28":1,"48":2,"121":1}}],["authinterceptor",{"2":{"0":2}}],["auth",{"2":{"0":3,"88":1,"90":1,"121":2}}],["away",{"2":{"136":1}}],["await",{"2":{"0":3,"16":1,"32":2,"93":1}}],["aws",{"2":{"2":1,"51":1}}],["abbreviations",{"0":{"48":1}}],["above",{"2":{"40":1,"79":1,"110":1,"124":1}}],["about",{"0":{"29":1,"51":1},"2":{"10":1,"24":1,"28":2,"39":1,"40":1,"61":1,"66":1,"137":1}}],["able",{"2":{"7":1,"29":1,"36":1,"90":1}}],["ability",{"2":{"2":4,"17":1,"39":1,"90":3,"119":1,"121":1}}],["absolutely",{"2":{"39":2}}],["absolute",{"2":{"2":1}}],["abstracting",{"2":{"0":1}}],["abstraction",{"2":{"0":1,"93":1,"118":1}}],["among",{"2":{"30":1}}],["amount",{"2":{"1":1,"32":1}}],["ambiguous",{"2":{"28":1}}],["amazon",{"2":{"2":2,"17":2}}],["alt",{"2":{"54":2,"73":2,"78":1,"79":1}}],["alternate",{"2":{"32":1}}],["alternative",{"2":{"2":1,"13":1}}],["almost",{"2":{"32":1}}],["along",{"2":{"30":1,"40":1}}],["alg",{"2":{"19":1}}],["alias",{"2":{"18":5}}],["always",{"2":{"8":1,"12":1,"28":2,"33":1,"100":1}}],["already",{"2":{"2":1,"7":1,"29":1,"30":1,"32":1,"39":1}}],["also",{"2":{"1":3,"2":2,"5":1,"7":1,"13":1,"17":2,"18":3,"19":1,"28":4,"29":4,"30":1,"31":2,"32":1,"34":1,"39":4,"40":2,"49":1,"56":2,"66":1,"83":1,"93":1,"97":1,"130":1}}],["ally",{"2":{"19":3,"126":2}}],["allowcompoundwords",{"2":{"19":1}}],["allowing",{"2":{"5":1}}],["allowed",{"2":{"3":1,"40":1}}],["allows",{"2":{"3":4,"11":1,"19":2,"27":1,"28":1,"29":1,"32":2,"40":2,"79":1,"93":1,"95":1,"137":1,"138":1}}],["allow",{"2":{"1":2,"3":4,"17":1,"18":1,"89":1}}],["all",{"2":{"0":1,"1":1,"3":4,"19":1,"26":1,"28":3,"29":6,"31":1,"32":2,"39":2,"40":4,"85":1,"95":1,"112":1,"119":1,"130":2,"135":1,"138":1,"139":1}}],["attribute",{"2":{"79":2,"95":1}}],["attributes",{"2":{"31":1,"79":1}}],["attempt",{"2":{"4":1}}],["atombutton",{"2":{"26":1}}],["atoms",{"2":{"26":3}}],["atomicon",{"2":{"26":1}}],["atomic",{"2":{"26":3,"27":2}}],["at",{"2":{"1":10,"3":1,"4":2,"7":1,"11":1,"12":2,"19":3,"24":2,"28":2,"29":1,"30":4,"32":3,"38":1,"39":5,"40":3,"48":1,"56":1,"89":1,"93":1,"109":1,"123":1,"131":1}}],["aside",{"2":{"37":1}}],["aspect",{"2":{"29":1,"30":1}}],["aspx",{"2":{"19":1}}],["astro",{"2":{"19":1,"89":1}}],["ashx",{"2":{"19":1}}],["ascx",{"2":{"19":1}}],["asax",{"2":{"19":1}}],["associated",{"2":{"28":1}}],["assets",{"2":{"8":5,"10":2,"26":4,"27":1,"95":1,"138":1}}],["assigned",{"2":{"1":1}}],["asked",{"2":{"50":1}}],["ask",{"2":{"1":1}}],["as",{"0":{"61":1,"127":1},"2":{"1":5,"2":1,"3":2,"4":1,"8":4,"10":3,"11":2,"12":2,"18":1,"19":4,"24":2,"26":4,"27":2,"28":5,"29":2,"30":1,"31":5,"32":4,"38":1,"39":2,"40":10,"50":1,"56":2,"59":1,"61":1,"63":1,"64":1,"66":2,"72":1,"76":1,"79":1,"80":1,"86":3,"89":4,"90":5,"93":1,"95":1,"110":1,"126":1}}],["asynchronicity",{"2":{"32":5}}],["asynchronous",{"2":{"0":1,"13":1,"93":1}}],["async",{"2":{"0":1,"32":2,"93":1,"94":1,"111":1}}],["arguments",{"2":{"111":1}}],["architect",{"2":{"51":1}}],["architecture",{"0":{"27":1,"32":1},"1":{"33":1,"34":1,"35":1,"36":1,"37":1,"38":1},"2":{"26":1,"27":1,"32":2,"48":1,"90":1}}],["architecturally",{"2":{"28":1}}],["architectural",{"0":{"11":1},"1":{"12":1,"13":1,"14":1,"15":1,"16":1},"2":{"24":1}}],["arranged",{"2":{"27":1}}],["arrays",{"2":{"123":1}}],["array",{"2":{"24":6,"29":2,"39":1}}],["articles",{"2":{"31":1}}],["article",{"2":{"20":1,"24":1,"30":1,"37":1}}],["artisan",{"2":{"19":1}}],["area",{"2":{"28":1}}],["are",{"2":{"1":6,"2":3,"3":2,"5":1,"7":4,"8":6,"11":2,"13":3,"17":1,"18":2,"19":4,"20":2,"21":1,"24":5,"26":1,"27":1,"28":8,"29":5,"30":7,"31":2,"32":10,"39":6,"40":6,"50":1,"54":1,"56":2,"66":1,"73":2,"81":2,"89":1,"91":1,"97":2,"99":1,"102":1,"112":1,"118":1,"125":1,"136":1,"138":1,"139":2}}],["around",{"2":{"0":1,"2":1,"28":1,"39":1,"40":1}}],["adaptive",{"2":{"89":1,"112":1}}],["adapting",{"2":{"70":1}}],["adapter",{"2":{"83":1,"94":2,"118":1}}],["adapted",{"2":{"66":1}}],["adaptability",{"0":{"91":1},"2":{"31":1,"32":1,"36":1,"91":1}}],["advent",{"2":{"40":1}}],["advertising",{"2":{"33":1}}],["advance",{"2":{"40":1}}],["advantage",{"2":{"26":1,"28":1}}],["advantageous",{"2":{"26":1}}],["advisable",{"2":{"39":1}}],["adding",{"2":{"24":1,"26":1,"29":1,"86":1}}],["additional",{"2":{"5":1,"40":1}}],["addition",{"2":{"4":1,"7":2,"27":1,"29":1,"40":2,"118":1}}],["addextraspaceontop",{"2":{"19":1}}],["added",{"2":{"8":1,"40":1}}],["add",{"2":{"3":1,"7":1,"15":1,"19":1,"26":1,"31":1,"32":3,"49":1,"58":2,"71":2,"75":2,"83":6,"88":3}}],["adds",{"2":{"3":1,"31":1,"83":1,"88":1,"101":1,"111":1,"134":1}}],["addresponseinterceptor",{"2":{"0":2,"94":1}}],["adminlayout",{"2":{"26":2}}],["admin",{"2":{"1":2,"11":1}}],["acme",{"2":{"137":3}}],["acr",{"2":{"19":1}}],["across",{"2":{"13":1}}],["acn",{"2":{"19":1}}],["act",{"2":{"90":1}}],["activitybar",{"2":{"19":1}}],["actively",{"2":{"29":1}}],["active",{"2":{"14":1,"19":1}}],["actions",{"0":{"7":1,"108":1},"1":{"109":1,"110":1},"2":{"1":1,"5":2,"7":12,"19":1,"30":1,"39":1,"90":1,"109":1,"118":1,"121":1}}],["action",{"2":{"1":2,"7":9,"19":1,"83":1,"109":2}}],["actually",{"2":{"26":1,"89":1}}],["actual",{"2":{"7":1,"26":1,"40":1}}],["accepts",{"2":{"83":1}}],["accessing",{"2":{"19":1,"40":2,"53":1}}],["accessibility",{"2":{"31":1}}],["accessibilitysupport",{"2":{"19":1}}],["accessible",{"2":{"17":1}}],["accesses",{"2":{"2":1}}],["accessed",{"2":{"2":1,"3":1,"8":1,"110":1}}],["access",{"2":{"0":1,"1":14,"2":5,"3":13,"7":1,"12":1,"28":2,"48":1,"93":1}}],["accomplish",{"2":{"32":1}}],["accompanying",{"2":{"28":1}}],["according",{"2":{"28":1}}],["accordingly",{"2":{"3":1,"40":1}}],["accordian",{"2":{"12":1}}],["accordianpanel",{"2":{"12":1}}],["accountroutes",{"2":{"13":2}}],["account",{"2":{"0":1,"1":2,"8":1,"10":1,"13":2,"27":1,"40":1}}],["animated",{"2":{"59":2,"61":1,"63":1,"72":1,"76":2,"78":1,"79":1}}],["animation",{"2":{"13":1,"40":1}}],["answers",{"2":{"50":3}}],["answer",{"2":{"39":1,"49":1}}],["angular",{"2":{"29":2}}],["analytics",{"0":{"111":1,"134":1},"2":{"83":1,"88":1,"97":1,"118":2}}],["analysis",{"2":{"19":1,"46":1}}],["analogy",{"2":{"32":1,"39":1}}],["analogs",{"2":{"28":1}}],["analog",{"2":{"28":2}}],["annotations",{"2":{"19":1}}],["antony",{"2":{"19":1,"86":1}}],["antfu",{"2":{"19":3}}],["antialiased",{"2":{"19":1}}],["anti",{"2":{"13":1}}],["another",{"2":{"7":1,"28":5,"32":1,"34":1,"39":1,"40":1,"89":1,"93":1}}],["anyone",{"2":{"28":1}}],["anywhere",{"2":{"28":1}}],["anything",{"2":{"7":1}}],["any",{"2":{"1":2,"2":1,"3":2,"4":2,"8":1,"12":1,"16":1,"28":3,"29":1,"31":1,"36":1,"40":1,"49":1,"66":2,"68":1,"72":1,"124":1,"137":1}}],["an",{"0":{"18":1,"117":1},"1":{"118":1,"119":1,"120":1,"121":1},"2":{"0":1,"1":3,"2":2,"3":4,"4":3,"7":2,"8":1,"12":1,"13":3,"17":1,"18":3,"24":4,"26":1,"27":1,"28":8,"29":4,"31":1,"32":3,"39":7,"40":3,"56":1,"63":1,"64":1,"80":1,"89":3,"93":1,"95":1,"123":1,"126":2}}],["and",{"0":{"1":1,"13":1,"18":1,"24":1,"31":1,"34":1,"37":1,"40":1,"48":1,"55":1,"84":1},"1":{"14":1,"15":1,"16":1,"56":1},"2":{"0":6,"1":24,"2":13,"3":3,"4":3,"5":1,"7":22,"8":6,"11":6,"12":2,"13":7,"17":4,"18":6,"19":18,"20":3,"24":20,"26":17,"27":5,"28":39,"29":22,"30":5,"31":20,"32":21,"33":3,"34":1,"35":4,"36":4,"37":1,"38":2,"39":37,"40":31,"48":2,"49":1,"50":8,"56":5,"66":3,"70":2,"79":1,"81":1,"83":3,"85":1,"86":5,"88":3,"89":7,"90":10,"91":2,"94":1,"95":3,"100":3,"101":1,"109":5,"118":2,"121":8,"123":2,"124":1,"125":1,"126":2,"128":4,"130":2,"135":1,"136":2,"137":1,"138":3,"139":2}}],["axios",{"2":{"0":1,"89":1,"93":1}}],["apollo",{"2":{"19":2}}],["apache",{"2":{"17":1}}],["approximately",{"2":{"32":1}}],["approaches",{"2":{"29":1}}],["approach",{"2":{"13":1,"26":5,"31":1,"40":1,"89":1}}],["appveyor",{"2":{"19":2}}],["apps",{"2":{"26":1}}],["appsettings",{"2":{"19":2}}],["appsidebar",{"2":{"13":1}}],["appfooter",{"2":{"13":2}}],["appheader>",{"2":{"116":1}}],["appheadersecond",{"2":{"116":1}}],["appheaderfirst",{"2":{"116":1}}],["appheader",{"2":{"13":2,"116":1}}],["apparent",{"2":{"10":1}}],["app",{"2":{"9":2,"13":3,"14":1,"16":1,"26":10,"27":1,"40":3,"83":1,"91":1,"135":1}}],["applied",{"2":{"98":1}}],["applicants",{"2":{"29":1}}],["applications",{"2":{"1":1,"26":1,"32":1,"40":3,"89":1,"90":1}}],["application",{"0":{"8":1,"18":1,"27":1,"32":1,"84":1,"117":1},"1":{"9":1,"10":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"118":1,"119":1,"120":1,"121":1},"2":{"0":2,"2":2,"4":1,"7":1,"8":4,"12":1,"13":2,"18":3,"24":1,"26":5,"27":3,"28":4,"29":1,"30":1,"31":1,"32":2,"33":1,"39":1,"40":8,"48":3,"56":1,"83":1,"86":4,"89":3,"90":7,"93":2,"94":2,"95":1,"98":1,"118":6,"120":1,"121":4,"135":3,"136":1,"137":2,"138":1,"139":1}}],["applying",{"2":{"86":1}}],["apply",{"2":{"26":1}}],["apploader",{"0":{"14":1}}],["appleboy",{"2":{"7":3}}],["appeared",{"2":{"16":1}}],["appears",{"2":{"12":1,"30":1,"98":1,"116":1}}],["appear",{"2":{"3":1,"19":1,"40":1}}],["apidata",{"2":{"93":2}}],["apis",{"2":{"2":1,"4":1,"26":1,"39":1}}],["api",{"0":{"0":1,"92":1,"93":1},"1":{"93":1,"94":1},"2":{"0":13,"2":4,"4":1,"16":1,"17":2,"19":14,"24":4,"26":1,"27":2,"28":2,"29":1,"39":2,"40":1,"53":1,"56":3,"66":2,"83":2,"86":1,"88":1,"90":2,"93":5,"94":6,"118":3}}],["a",{"0":{"20":1,"84":1,"87":1,"127":1},"1":{"88":1,"89":1},"2":{"0":5,"1":12,"2":24,"3":11,"4":6,"5":8,"7":9,"8":3,"10":4,"11":3,"12":1,"13":3,"16":1,"17":9,"18":7,"19":15,"20":2,"24":19,"26":10,"27":10,"28":33,"29":23,"30":5,"31":6,"32":17,"33":6,"36":2,"38":2,"39":29,"40":33,"49":2,"53":1,"54":1,"56":5,"59":1,"64":1,"66":5,"79":1,"80":1,"83":2,"84":1,"85":1,"86":6,"88":2,"89":13,"90":8,"93":2,"94":1,"98":1,"101":1,"109":3,"110":2,"119":1,"123":6,"124":2,"125":1,"135":2,"137":1,"138":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/assets/chunks/@localSearchIndexen.DqmUO0wv.js b/assets/chunks/@localSearchIndexen.DqmUO0wv.js new file mode 100644 index 000000000..6c06c21e3 --- /dev/null +++ b/assets/chunks/@localSearchIndexen.DqmUO0wv.js @@ -0,0 +1 @@ +const e='{"documentCount":140,"nextId":140,"documentIds":{"0":"/en/backend/api.html#api-service","1":"/en/backend/backend.html#options-to-leverage-your-backend-for-frontenders","2":"/en/backend/auth.html#authentication-and-authorization","3":"/en/backend/cors.html#cors","4":"/en/backend/protocols.html#protocols-to-rest-or-not-to-rest","5":"/en/deployment/ci-cd.html#ci-cd","6":"/en/deployment/docker.html#docker","7":"/en/deployment/github-actions.html#github-actions","8":"/en/deployment/hosting.html#hosting","9":"/en/development/architectural-patterns.html#architectural-patterns","10":"/en/development/architectural-patterns.html#use-cases","11":"/en/development/architectural-patterns.html#best-practices-and-considerations","12":"/en/development/architectural-patterns.html#apploader-vue","13":"/en/development/architectural-patterns.html#useapploader-ts","14":"/en/development/architectural-patterns.html#some-component","15":"/en/development/assets.html#application-resources","16":"/en/development/assets.html#baseicon","17":"/en/development/assets.html#icons-js","18":"/en/development/building.html#create-and-build-an-application","19":"/en/development/ide.html#configuring-the-ide","20":"/en/development/libraries.html#tell-me-a-handy-library","21":"/en/development/misc.html#helpful-hints","22":"/en/development/misc.html#carousel-or-slider","23":"/en/development/misc.html#toaster","24":"/en/development/misc.html#date-and-time","25":"/en/development/project-structure.html#vue-3-project-structure","26":"/en/development/project-structure.html#possible-file-structures-for-vue-3-projects","27":"/en/development/project-structure.html#suitable-architecture-for-vue-3-web-application","28":"/en/development/stores.html#state-management-in-vue-3","29":"/en/development/testing.html#testing","30":"/en/frontend/about-frameworks.html#about-frontend-frameworks","31":"/en/frontend/architecture.html#frontend-application-architecture","32":"/en/frontend/architecture.html#avoid-dependencies","33":"/en/frontend/architecture.html#use-wrappers-over-components-of-ui-libraries-and-third-party-utilities","34":"/en/frontend/architecture.html#regular-refactoring","35":"/en/frontend/architecture.html#use-css3","36":"/en/frontend/architecture.html#use-modern-standards-and-language-features","37":"/en/frontend/architecture.html#document-the-project","38":"/en/frontend/css-ui-libs.html#css-and-ui-libraries","39":"/en/frontend/learning.html#learning-vue","40":"/en/frontend/spa-pwa-ssr-ssg.html#spa-pwa-ssg-ssr-and-seo","41":"/en/misc/cheat-sheets.html#cheat-sheet","42":"/en/misc/cheat-sheets.html#vue","43":"/en/misc/cheat-sheets.html#javascript","44":"/en/misc/cheat-sheets.html#html","45":"/en/misc/cheat-sheets.html#css","46":"/en/misc/cheat-sheets.html#typescript","47":"/en/misc/cheat-sheets.html#markdown","48":"/en/misc/contribute.html#contribute-to-the-development-of-this-resource","49":"/en/misc/glossary.html#glossary-and-abbreviations","50":"/en/misc/introduction.html#introduction","51":"/en/misc/introduction.html#about-the-author","52":"/en/release-timeline/getting-data.html#getting-release-commit-and-pull-requests-data","53":"/en/release-timeline/getting-data.html#retrieving-data","54":"/en/release-timeline/config.html#configuration","55":"/en/release-timeline/config.html#options","56":"/en/release-timeline/config.html#styling","57":"/en/release-timeline/getting-started.html#installation","58":"/en/release-timeline/getting-started.html#installation-of-the-npm-package","59":"/en/release-timeline/getting-started.html#usage-in-vue-project-code","60":"/en/release-timeline/getting-started.html#use-in-vitepress","61":"/en/release-timeline/getting-started.html#use-as-web-component","62":"/en/release-timeline/#release-timeline","63":"/en/release-timeline/#release-timeline-visualization","64":"/en/release-timeline/#github","65":"/en/release-timeline/#demo","66":"/en/release-timeline/#credits","67":"/en/release-timeline/microfrontend.html#micro-frontend","68":"/en/release-timeline/microfrontend.html#usage","69":"/en/release-timeline/microfrontend.html#demo","70":"/en/release-timeline/vitepress.html#vitepress","71":"/en/release-timeline/vitepress.html#installation","72":"/en/release-timeline/vitepress.html#usage","73":"/en/release-timeline/vitepress.html#css-variables","74":"/en/release-timeline/web-component.html#web-component","75":"/en/release-timeline/web-component.html#usage","76":"/en/release-timeline/web-component.html#configuration","77":"/en/release-timeline/web-component.html#demo","78":"/en/release-timeline/vue-3.html#vue-3-project","79":"/en/release-timeline/vue-3.html#installation","80":"/en/release-timeline/vue-3.html#use-in-vue-component","81":"/en/vue-webapp/contribution.html#project-participation","82":"/en/vue-webapp/getting-started.html#getting-started","83":"/en/vue-webapp/getting-started.html#installation-via-create-vue-webapp","84":"/en/vue-webapp/getting-started.html#initializing-and-launching-a-web-application","85":"/en/vue-webapp/getting-started.html#installation-from-the-repository","86":"/en/vue-webapp/guidelines.html#guidelines","87":"/en/vue-webapp/#scaffolding-a-vue-webapp","88":"/en/vue-webapp/#summary","89":"/en/vue-webapp/#justification","90":"/en/vue-webapp/objectives.html#objectives","91":"/en/vue-webapp/options/adaptability.html#adaptability","92":"/en/vue-webapp/options/api.html#api-module","93":"/en/vue-webapp/options/api.html#api-rest","94":"/en/vue-webapp/options/api.html#json-rpc","95":"/en/vue-webapp/options/baseIcon.html#baseicon","96":"/en/vue-webapp/options/description.html#implementation-details","97":"/en/vue-webapp/options/description.html#code-injections-in-the-index-html","98":"/en/vue-webapp/options/description.html#css-tricks","99":"/en/vue-webapp/options/footer.html#footers","100":"/en/vue-webapp/options/footer.html#simplefooter","101":"/en/vue-webapp/options/footer.html#richfooter","102":"/en/vue-webapp/options/footer.html#mantinesimplefooter","103":"/en/vue-webapp/options/footer.html#mantinerichfooter","104":"/en/vue-webapp/options/footer.html#distributedfooter","105":"/en/vue-webapp/options/ga-gp.html#github-actions-script-to-deploy-to-github-pages","106":"/en/vue-webapp/options/ga-gp.html#deployment","107":"/en/vue-webapp/options/ga-gp.html#setting-base-in-vite-config","108":"/en/vue-webapp/options/drawer.html#navigation-drawers","109":"/en/vue-webapp/options/drawer.html#simpledrawer","110":"/en/vue-webapp/options/drawer.html#touchslideoutdrawer","111":"/en/vue-webapp/options/google-analytics.html#google-analytics","112":"/en/vue-webapp/options/header.html#headers","113":"/en/vue-webapp/options/header.html#simpleheader","114":"/en/vue-webapp/options/header.html#mantinesimpleheader","115":"/en/vue-webapp/options/header.html#mantinelayeredheader","116":"/en/vue-webapp/options/header.html#slidingheader","117":"/en/vue-webapp/options/i18n.html#i18n","118":"/en/vue-webapp/options/i18n.html#i18next","119":"/en/vue-webapp/options/i18n.html#usei18nlight","120":"/en/vue-webapp/options/i18n.html#usage","121":"/en/vue-webapp/options/i18n.html#i18next-extensions","122":"/en/vue-webapp/options/i18n.html#as-a-result","123":"/en/vue-webapp/options/#options-when-creating-an-application","124":"/en/vue-webapp/options/#available-options","125":"/en/vue-webapp/options/#available-by-default","126":"/en/vue-webapp/options/#in-development","127":"/en/vue-webapp/options/#planned","128":"/en/vue-webapp/options/layout-main.html#mainlayout","129":"/en/vue-webapp/options/layout-main.html#routing","130":"/en/vue-webapp/options/layout-one-column.html#onecolumnlayout","131":"/en/vue-webapp/options/open-graph.html#google-analytics","132":"/en/vue-webapp/options/navbar.html#navbar","133":"/en/vue-webapp/options/navbar.html#simplenavbar","134":"/en/vue-webapp/options/navbar.html#mantinesimplenavbar","135":"/en/vue-webapp/options/pwa.html#pwa","136":"/en/vue-webapp/options/pwa.html#manifest-json","137":"/en/vue-webapp/options/pwa.html#service-worker","138":"/en/vue-webapp/options/splash-screen.html#splash-screen","139":"/en/vue-webapp/options/themes.html#themes"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[2,1,189],"1":[7,1,226],"2":[3,1,328],"3":[1,1,177],"4":[7,1,147],"5":[2,1,71],"6":[1,1,1],"7":[2,1,385],"8":[1,1,124],"9":[2,1,82],"10":[2,2,83],"11":[4,2,171],"12":[2,6,22],"13":[2,6,28],"14":[2,6,41],"15":[2,1,178],"16":[1,2,71],"17":[2,2,116],"18":[5,1,209],"19":[3,1,815],"20":[5,1,49],"21":[2,1,9],"22":[3,2,17],"23":[1,2,3],"24":[3,2,312],"25":[4,1,1],"26":[7,4,400],"27":[7,4,118],"28":[5,1,466],"29":[1,1,149],"30":[3,1,370],"31":[3,1,352],"32":[2,3,79],"33":[11,3,41],"34":[2,3,30],"35":[2,3,48],"36":[6,3,18],"37":[3,3,36],"38":[4,1,214],"39":[2,1,408],"40":[6,1,457],"41":[2,1,1],"42":[1,2,5],"43":[1,2,4],"44":[1,2,4],"45":[1,2,6],"46":[1,2,8],"47":[1,2,2],"48":[7,1,42],"49":[3,1,61],"50":[1,1,80],"51":[4,1,29],"52":[7,1,1],"53":[2,7,106],"54":[1,1,6],"55":[1,1,84],"56":[1,1,85],"57":[1,1,1],"58":[5,1,8],"59":[5,1,49],"60":[3,1,2],"61":[4,1,39],"62":[2,1,1],"63":[3,2,90],"64":[1,2,2],"65":[1,2,14],"66":[1,2,6],"67":[2,1,1],"68":[1,2,53],"69":[1,2,26],"70":[1,1,16],"71":[1,1,8],"72":[1,1,31],"73":[2,1,35],"74":[2,1,1],"75":[1,2,68],"76":[1,2,116],"77":[1,2,26],"78":[3,1,1],"79":[1,3,8],"80":[4,3,43],"81":[2,1,15],"82":[2,1,1],"83":[5,2,136],"84":[6,7,14],"85":[4,2,37],"86":[1,1,134],"87":[4,1,1],"88":[1,4,63],"89":[1,4,158],"90":[1,1,169],"91":[1,1,79],"92":[2,1,1],"93":[3,2,92],"94":[2,2,89],"95":[1,1,65],"96":[2,1,1],"97":[6,2,44],"98":[2,2,30],"99":[1,1,9],"100":[1,1,1],"101":[1,1,1],"102":[1,1,1],"103":[1,1,1],"104":[1,1,1],"105":[6,1,1],"106":[1,6,67],"107":[5,6,46],"108":[2,1,12],"109":[1,2,23],"110":[1,2,24],"111":[2,1,45],"112":[1,1,5],"113":[1,1,4],"114":[1,1,8],"115":[1,1,8],"116":[1,1,30],"117":[1,1,1],"118":[1,1,99],"119":[1,1,22],"120":[1,1,56],"121":[2,1,56],"122":[3,1,17],"123":[5,1,1],"124":[2,5,73],"125":[3,5,20],"126":[2,5,12],"127":[1,5,74],"128":[1,1,28],"129":[1,1,13],"130":[1,1,46],"131":[2,1,34],"132":[1,1,17],"133":[1,1,1],"134":[1,1,1],"135":[1,1,16],"136":[2,1,56],"137":[2,1,66],"138":[2,1,49],"139":[1,1,83]},"averageFieldLength":[2.3642857142857143,1.792857142857143,74.76428571428572],"storedFields":{"0":{"title":"API service","titles":[]},"1":{"title":"Options to leverage your backend for frontenders","titles":[]},"2":{"title":"Authentication and authorization","titles":[]},"3":{"title":"CORS","titles":[]},"4":{"title":"Protocols. To REST or not to REST?","titles":[]},"5":{"title":"CI/CD","titles":[]},"6":{"title":"Docker","titles":[]},"7":{"title":"Github Actions","titles":[]},"8":{"title":"Hosting","titles":[]},"9":{"title":"Architectural patterns","titles":[]},"10":{"title":"Use cases","titles":["Architectural patterns"]},"11":{"title":"Best Practices and Considerations","titles":["Architectural patterns"]},"12":{"title":"AppLoader.vue","titles":["Architectural patterns","Best Practices and Considerations"]},"13":{"title":"useAppLoader.ts","titles":["Architectural patterns","Best Practices and Considerations"]},"14":{"title":"Some component","titles":["Architectural patterns","Best Practices and Considerations"]},"15":{"title":"Application Resources","titles":[]},"16":{"title":"BaseIcon","titles":["Application Resources"]},"17":{"title":"icons.js","titles":["Application Resources"]},"18":{"title":"Create and build an application","titles":[]},"19":{"title":"Configuring the IDE","titles":[]},"20":{"title":"Tell me a handy library","titles":[]},"21":{"title":"Helpful hints","titles":[]},"22":{"title":"Carousel or slider","titles":["Helpful hints"]},"23":{"title":"Toaster","titles":["Helpful hints"]},"24":{"title":"Date and time","titles":["Helpful hints"]},"25":{"title":"Vue 3 project structure","titles":[]},"26":{"title":"Possible file structures for Vue 3 projects","titles":["Vue 3 project structure"]},"27":{"title":"Suitable architecture for Vue 3 web application","titles":["Vue 3 project structure"]},"28":{"title":"State management in Vue 3","titles":[]},"29":{"title":"Testing","titles":[]},"30":{"title":"About frontend frameworks","titles":[]},"31":{"title":"Frontend application architecture","titles":[]},"32":{"title":"Avoid dependencies","titles":["Frontend application architecture"]},"33":{"title":"Use wrappers over components of UI libraries and third-party utilities","titles":["Frontend application architecture"]},"34":{"title":"Regular refactoring","titles":["Frontend application architecture"]},"35":{"title":"Use CSS3","titles":["Frontend application architecture"]},"36":{"title":"Use modern standards and language features","titles":["Frontend application architecture"]},"37":{"title":"Document the project","titles":["Frontend application architecture"]},"38":{"title":"CSS and UI libraries","titles":[]},"39":{"title":"Learning Vue","titles":[]},"40":{"title":"SPA, PWA, SSG, SSR and SEO","titles":[]},"41":{"title":"Cheat Sheet","titles":[]},"42":{"title":"Vue","titles":["Cheat Sheet"]},"43":{"title":"JavaScript","titles":["Cheat Sheet"]},"44":{"title":"HTML","titles":["Cheat Sheet"]},"45":{"title":"CSS","titles":["Cheat Sheet"]},"46":{"title":"Typescript","titles":["Cheat Sheet"]},"47":{"title":"Markdown","titles":["Cheat Sheet"]},"48":{"title":"Contribute to the development of this resource","titles":[]},"49":{"title":"Glossary and abbreviations","titles":[]},"50":{"title":"Introduction","titles":[]},"51":{"title":"About the author:","titles":["Introduction"]},"52":{"title":"Getting release, commit and pull requests data","titles":[]},"53":{"title":"Retrieving data","titles":["Getting release, commit and pull requests data"]},"54":{"title":"Configuration","titles":[]},"55":{"title":"Options","titles":["Configuration"]},"56":{"title":"Styling","titles":["Configuration"]},"57":{"title":"Installation","titles":[]},"58":{"title":"Installation of the npm package","titles":["Installation"]},"59":{"title":"Usage in Vue project code","titles":["Installation"]},"60":{"title":"Use in VitePress","titles":["Installation"]},"61":{"title":"Use as web component","titles":["Installation"]},"62":{"title":"Release Timeline","titles":[]},"63":{"title":"Release timeline visualization","titles":["Release Timeline"]},"64":{"title":"GitHub","titles":["Release Timeline"]},"65":{"title":"Demo","titles":["Release Timeline"]},"66":{"title":"Credits","titles":["Release Timeline"]},"67":{"title":"Micro-frontend","titles":[]},"68":{"title":"Usage","titles":["Micro-frontend"]},"69":{"title":"Demo","titles":["Micro-frontend"]},"70":{"title":"VitePress","titles":[]},"71":{"title":"Installation","titles":["VitePress"]},"72":{"title":"Usage","titles":["VitePress"]},"73":{"title":"CSS variables","titles":["VitePress"]},"74":{"title":"Web component","titles":[]},"75":{"title":"Usage","titles":["Web component"]},"76":{"title":"Configuration","titles":["Web component"]},"77":{"title":"Demo","titles":["Web component"]},"78":{"title":"Vue 3 project","titles":[]},"79":{"title":"Installation","titles":["Vue 3 project"]},"80":{"title":"Use in Vue component","titles":["Vue 3 project"]},"81":{"title":"Project participation","titles":[]},"82":{"title":"Getting started","titles":[]},"83":{"title":"Installation via create vue-webapp","titles":["Getting started"]},"84":{"title":"Initializing and launching a web application","titles":["Getting started","Installation via create vue-webapp"]},"85":{"title":"Installation from the repository","titles":["Getting started"]},"86":{"title":"Guidelines","titles":[]},"87":{"title":"Scaffolding a Vue webapp","titles":[]},"88":{"title":"Summary","titles":["Scaffolding a Vue webapp"]},"89":{"title":"Justification","titles":["Scaffolding a Vue webapp"]},"90":{"title":"Objectives","titles":[]},"91":{"title":"Adaptability","titles":[]},"92":{"title":"API module","titles":[]},"93":{"title":"API (REST)","titles":["API module"]},"94":{"title":"JSON-RPC","titles":["API module"]},"95":{"title":"BaseIcon","titles":[]},"96":{"title":"Implementation details","titles":[]},"97":{"title":"Code injections in the index.html","titles":["Implementation details"]},"98":{"title":"CSS tricks","titles":["Implementation details"]},"99":{"title":"Footers","titles":[]},"100":{"title":"SimpleFooter","titles":["Footers"]},"101":{"title":"RichFooter","titles":["Footers"]},"102":{"title":"MantineSimpleFooter","titles":["Footers"]},"103":{"title":"MantineRichFooter","titles":["Footers"]},"104":{"title":"DistributedFooter","titles":["Footers"]},"105":{"title":"GitHub Actions script to deploy to GitHub Pages","titles":[]},"106":{"title":"Deployment","titles":["GitHub Actions script to deploy to GitHub Pages"]},"107":{"title":"Setting base in Vite config","titles":["GitHub Actions script to deploy to GitHub Pages"]},"108":{"title":"Navigation drawers","titles":[]},"109":{"title":"SimpleDrawer","titles":["Navigation drawers"]},"110":{"title":"TouchSlideoutDrawer","titles":["Navigation drawers"]},"111":{"title":"Google analytics","titles":[]},"112":{"title":"Headers","titles":[]},"113":{"title":"SimpleHeader","titles":["Headers"]},"114":{"title":"MantineSimpleHeader","titles":["Headers"]},"115":{"title":"MantineLayeredHeader","titles":["Headers"]},"116":{"title":"SlidingHeader","titles":["Headers"]},"117":{"title":"i18n","titles":[]},"118":{"title":"i18next","titles":["i18n"]},"119":{"title":"useI18nLight","titles":["i18n"]},"120":{"title":"Usage","titles":["i18n"]},"121":{"title":"i18next extensions","titles":["i18n"]},"122":{"title":"As a result","titles":["i18n"]},"123":{"title":"Options when creating an application","titles":[]},"124":{"title":"Available options","titles":["Options when creating an application"]},"125":{"title":"Available by default","titles":["Options when creating an application"]},"126":{"title":"In development","titles":["Options when creating an application"]},"127":{"title":"Planned","titles":["Options when creating an application"]},"128":{"title":"MainLayout","titles":[]},"129":{"title":"Routing","titles":["MainLayout"]},"130":{"title":"OneColumnLayout","titles":[]},"131":{"title":"Google analytics","titles":[]},"132":{"title":"Navbar","titles":[]},"133":{"title":"SimpleNavbar","titles":["Navbar"]},"134":{"title":"MantineSimpleNavbar","titles":["Navbar"]},"135":{"title":"PWA","titles":[]},"136":{"title":"Manifest.json","titles":["PWA"]},"137":{"title":"Service worker","titles":["PWA"]},"138":{"title":"Splash screen","titles":[]},"139":{"title":"Themes","titles":[]}},"dirtCount":0,"index":[["78",{"2":{"139":1}}],["767",{"2":{"91":1}}],["70kb",{"2":{"59":1,"80":1}}],["70",{"2":{"39":1,"119":1}}],["√",{"2":{"83":13,"88":5}}],["67",{"2":{"139":3}}],["60",{"2":{"139":6}}],["6",{"2":{"56":1,"59":1,"61":2,"75":1,"76":1,"80":1,"139":1}}],["и",{"2":{"54":1}}],["q",{"2":{"48":1}}],["qbutton",{"2":{"38":1}}],["questions",{"2":{"50":3}}],["question",{"2":{"39":1,"48":1}}],["questionable",{"2":{"29":1}}],["queued",{"2":{"31":1}}],["queries",{"2":{"4":1}}],["query",{"2":{"1":1,"4":1,"36":1}}],["quasar",{"2":{"19":2,"20":1}}],["quality",{"2":{"17":1,"19":1,"38":1,"39":3,"49":2}}],["quickly",{"2":{"31":1,"89":3,"90":1}}],["quick",{"2":{"29":1}}],["quieter",{"2":{"19":1}}],["quiet",{"2":{"19":1}}],["quite",{"2":{"2":1,"19":1,"20":1,"28":1,"30":1,"39":1,"40":2,"89":3,"121":1}}],["quote",{"2":{"38":1}}],["quot",{"2":{"1":2,"2":2,"3":4,"24":6,"26":2,"28":8,"30":4,"31":12,"35":2,"39":5,"40":4,"75":10,"83":6,"89":4,"106":14,"109":2,"118":8,"128":2,"130":2}}],["zuckerberg",{"2":{"30":1}}],["zero",{"2":{"2":1,"19":1}}],["с",{"2":{"26":1}}],["^",{"2":{"19":1}}],["^20",{"2":{"18":1}}],["400",{"2":{"116":1}}],["401",{"2":{"2":2}}],["480",{"2":{"91":1}}],["4",{"2":{"17":2,"19":1,"31":1,"39":1}}],[">",{"2":{"7":1,"11":8,"12":2,"13":1,"15":5,"16":2,"19":1,"38":2,"48":2,"59":1,"61":4,"68":5,"72":1,"75":4,"76":4,"80":1,"91":5,"95":3,"111":2,"116":3,"120":2,"131":15}}],[">>",{"2":{"7":5}}],["`dark`",{"2":{"56":1}}],["`desc`",{"2":{"55":1}}],["``",{"2":{"55":1}}],["`commits`",{"2":{"55":1}}],["`pulls`",{"2":{"55":1}}],["`~",{"2":{"19":1}}],["`$",{"2":{"16":4}}],["`",{"2":{"7":3,"15":1}}],["+page",{"2":{"19":6}}],["+layout",{"2":{"19":7}}],["+$backups",{"2":{"7":1}}],["+",{"2":{"7":1,"17":2}}],["||",{"2":{"111":1}}],["|",{"2":{"7":4,"19":1,"26":323}}],["$1",{"2":{"8":1}}],["$dirs",{"2":{"7":1}}],["$root",{"2":{"7":3}}],["$backup",{"2":{"7":6}}],["$env",{"2":{"7":1}}],["$project",{"2":{"7":3}}],["$github",{"2":{"7":5}}],["$target",{"2":{"7":8}}],["$",{"2":{"7":15,"15":1,"19":96,"84":2,"85":3}}],["kb",{"2":{"122":1}}],["kits",{"2":{"89":1}}],["kill",{"2":{"39":1}}],["kids",{"2":{"39":1}}],["kinds",{"2":{"39":1}}],["kind",{"2":{"28":1,"40":1}}],["karma",{"2":{"19":10}}],["keen",{"2":{"22":1}}],["keeps",{"2":{"30":1}}],["keep",{"2":{"19":1,"26":1,"28":1,"39":1}}],["keys",{"2":{"28":1}}],["keyboard",{"2":{"19":2}}],["key",{"2":{"7":10,"24":1,"118":1}}],["knows",{"2":{"39":2}}],["knowledge",{"2":{"39":2}}],["known",{"2":{"22":1,"24":1}}],["know",{"2":{"1":1,"18":1,"38":1,"39":3}}],["🚀",{"2":{"7":1}}],["🛎️",{"2":{"7":1}}],["56",{"2":{"139":1}}],["50",{"2":{"122":1}}],["50kb",{"2":{"24":1}}],["5c73e7",{"2":{"56":1,"75":1,"76":1}}],["58",{"2":{"19":1}}],["5",{"2":{"7":3,"14":1,"28":1}}],["86",{"2":{"56":1,"75":1,"76":1,"139":1}}],["888",{"2":{"56":2,"73":1,"75":1,"76":1}}],["8",{"2":{"7":2}}],["yes",{"2":{"83":8,"88":4}}],["yet",{"2":{"30":1}}],["years",{"2":{"24":2,"40":1,"50":1,"51":1,"118":1}}],["year",{"2":{"8":1,"39":1}}],["yielded",{"2":{"28":1}}],["yarnrc",{"2":{"19":2}}],["yarn",{"2":{"18":1,"19":4}}],["yamllint",{"2":{"19":2}}],["yaml",{"2":{"7":7,"19":7}}],["y",{"2":{"7":1}}],["yougithubusername",{"2":{"106":1}}],["youtube",{"2":{"39":2}}],["you",{"2":{"0":3,"1":5,"2":3,"4":2,"8":6,"9":3,"10":3,"11":3,"14":1,"15":3,"17":1,"18":6,"19":6,"24":4,"26":1,"28":9,"29":1,"30":3,"31":8,"32":2,"33":1,"35":1,"38":3,"39":9,"40":9,"48":1,"53":1,"56":2,"65":1,"68":1,"69":2,"76":1,"77":2,"83":1,"89":2,"106":1,"107":3,"111":1,"121":1,"131":1,"137":1}}],["yourname",{"2":{"107":1}}],["yourself",{"2":{"8":2,"18":1,"19":1,"39":1}}],["your",{"0":{"1":1},"2":{"0":3,"1":4,"2":4,"3":1,"4":1,"7":18,"8":5,"10":1,"11":1,"15":3,"18":1,"19":3,"24":1,"26":1,"28":6,"31":2,"32":3,"33":1,"34":1,"37":1,"38":3,"39":5,"40":4,"48":1,"56":1,"106":2,"107":1,"111":1,"131":1,"136":1}}],["99",{"2":{"4":1,"28":3}}],["95",{"2":{"2":1,"20":1,"24":1,"53":1}}],["04",{"2":{"19":1}}],["0",{"2":{"4":1,"7":5,"13":1,"40":2,"55":1,"56":3,"61":2,"75":3,"76":3,"94":2,"139":5}}],["38",{"2":{"56":1,"75":1,"76":1,"139":1}}],["3a5ccc",{"2":{"56":1}}],["3451b2",{"2":{"56":1}}],["3c3c438f",{"2":{"56":1}}],["3c3c43c7",{"2":{"56":1}}],["3c3c43",{"2":{"56":1}}],["300",{"2":{"19":1}}],["30",{"2":{"19":1}}],["3",{"0":{"25":1,"26":1,"27":1,"28":1,"78":1},"1":{"26":1,"27":1,"79":1,"80":1},"2":{"3":1,"4":1,"14":1,"18":1,"19":2,"24":3,"27":1,"28":9,"30":3,"31":2,"39":5,"42":1,"50":2,"56":2,"61":3,"63":1,"73":2,"75":2,"76":2,"86":2,"88":1,"90":1,"94":1,"139":2}}],["1443",{"2":{"94":1}}],["1px",{"2":{"91":1}}],["1199",{"2":{"91":1}}],["1kb",{"2":{"59":1,"80":1}}],["161618",{"2":{"56":1,"75":1,"76":1}}],["16gb",{"2":{"19":1}}],["1b1b1f",{"2":{"56":2,"75":2,"76":2}}],["1280px",{"2":{"139":1}}],["12",{"2":{"39":1}}],["15kb",{"2":{"63":1}}],["15",{"2":{"32":1}}],["10",{"2":{"19":1,"24":1,"31":1,"39":2}}],["100vw",{"2":{"98":1}}],["10000",{"2":{"91":1}}],["1000",{"2":{"28":1}}],["100",{"2":{"16":2,"40":1,"55":1,"98":1}}],["1",{"2":{"3":6,"17":2,"18":1,"24":2,"28":2,"31":1,"39":2,"40":1,"55":1,"56":4,"73":4,"75":2,"76":2,"93":1,"94":1,"98":1,"139":2}}],["x301",{"2":{"30":1}}],["x3c",{"2":{"11":20,"12":7,"13":1,"15":4,"16":8,"19":1,"38":4,"56":2,"59":3,"61":7,"68":9,"72":3,"75":10,"76":12,"80":3,"91":10,"95":7,"111":5,"116":8,"120":8,"131":15}}],["x",{"2":{"24":2,"98":1}}],["xshell",{"2":{"19":1}}],["xss",{"2":{"2":1}}],["xo",{"2":{"19":4}}],["xmlhttprequest",{"2":{"40":1}}],["xml",{"2":{"19":4}}],["xaml",{"2":{"19":2}}],["xdv",{"2":{"19":1}}],["x26",{"2":{"7":4,"19":1,"75":10,"91":2}}],["xhr",{"2":{"0":1,"93":1}}],["2e2e32",{"2":{"56":1,"75":1,"76":1}}],["235",{"2":{"56":4,"75":4,"76":4,"139":4}}],["255",{"2":{"56":2,"75":2,"76":2,"139":2}}],["22+",{"2":{"19":1}}],["29",{"2":{"19":1}}],["245",{"2":{"56":3,"75":3,"76":3,"139":3}}],["24",{"2":{"16":2}}],["26",{"2":{"15":1}}],["20+",{"2":{"51":1}}],["2022",{"2":{"50":1}}],["2023",{"2":{"19":1,"39":1,"50":1}}],["2016",{"2":{"39":1}}],["200",{"2":{"19":1,"40":1,"55":2,"116":1}}],["20~30",{"2":{"18":1}}],["20",{"2":{"7":1,"28":1,"39":1,"55":1}}],["2",{"2":{"2":1,"3":1,"19":3,"24":5,"28":2,"30":1,"38":1,"39":3,"40":1,"45":2,"56":4,"73":4,"75":2,"76":2,"94":1,"139":2}}],["jl65gwrnqqq",{"2":{"111":1}}],["jl65gwrnqq",{"2":{"111":1}}],["jumping",{"2":{"98":1}}],["justification",{"0":{"89":1}}],["justifications",{"2":{"31":1}}],["just",{"2":{"2":2,"11":1,"19":1,"24":1,"28":3,"31":1,"38":2,"39":1,"69":1,"77":1,"86":1,"89":1}}],["jest",{"2":{"19":10,"29":1}}],["jenkins",{"2":{"5":1,"19":2}}],["j",{"2":{"18":1}}],["jpg",{"2":{"17":1}}],["jpeg",{"2":{"8":1}}],["jasmine",{"2":{"19":10}}],["java",{"2":{"19":1,"51":1}}],["javascript",{"0":{"43":1},"2":{"1":1,"15":1,"18":2,"19":2,"20":1,"24":4,"28":2,"30":1,"31":3,"38":3,"39":4,"40":4,"43":1,"86":1,"91":1,"122":1}}],["jamesives",{"2":{"7":3,"106":1}}],["job",{"2":{"30":2}}],["jobs",{"2":{"7":2}}],["john",{"2":{"2":2,"118":1}}],["jwt",{"2":{"2":4,"49":2,"127":1}}],["jslint",{"2":{"19":2}}],["jsconfig",{"2":{"19":11}}],["jsconst",{"2":{"7":1,"17":1,"24":2}}],["jsx",{"2":{"19":3}}],["jsexport",{"2":{"11":1,"55":1,"107":1}}],["jsonrpc",{"2":{"83":1,"94":6}}],["json5",{"2":{"19":1}}],["jsonc",{"2":{"19":1}}],["jsonplaceholder",{"2":{"1":1,"93":1}}],["json",{"0":{"94":1,"136":1},"2":{"0":1,"1":1,"4":7,"7":4,"15":1,"17":4,"18":4,"19":50,"39":1,"40":2,"55":1,"76":1,"83":5,"86":1,"93":1,"94":6,"120":1,"121":1,"124":1,"136":2}}],["jsimport",{"2":{"0":3,"14":1,"15":1,"18":1,"93":1,"94":1,"120":1}}],["js",{"0":{"17":1},"2":{"0":4,"1":3,"2":1,"8":1,"10":1,"15":4,"16":1,"17":1,"18":3,"19":21,"20":2,"22":1,"24":3,"26":28,"28":1,"30":4,"31":2,"39":4,"40":1,"50":1,"61":2,"75":2,"76":2,"90":1,"91":1,"93":1,"94":1,"111":3,"137":3}}],["gap",{"2":{"55":1}}],["gave",{"2":{"40":1}}],["gatsby",{"2":{"19":5}}],["gateway",{"2":{"1":1}}],["gql",{"2":{"19":2}}],["gzip",{"2":{"59":1,"80":1}}],["gz",{"2":{"19":1}}],["goes",{"2":{"19":1,"33":1}}],["governance",{"2":{"19":1}}],["go",{"2":{"19":6,"39":1,"89":1,"106":1}}],["good",{"2":{"1":1,"19":1,"21":1,"22":1,"28":1,"29":1,"30":1,"31":4,"32":1,"34":1,"38":2,"39":3,"63":1}}],["googletagmanager",{"2":{"111":1}}],["googleanalytics",{"2":{"83":1}}],["google",{"0":{"111":1,"131":1},"2":{"1":4,"2":8,"8":1,"24":1,"32":1,"39":1,"40":3,"83":1,"88":1,"97":1,"111":2,"124":2}}],["gutter",{"2":{"139":1}}],["guidelines",{"0":{"86":1}}],["guide",{"2":{"39":2}}],["guides",{"2":{"19":1}}],["gui",{"2":{"30":1}}],["gulp",{"2":{"19":2}}],["guest",{"2":{"2":1}}],["glass",{"2":{"39":1}}],["gls",{"2":{"19":1}}],["glossary",{"0":{"49":1}}],["glo",{"2":{"19":1}}],["glob",{"2":{"16":1,"17":2,"95":1}}],["global",{"2":{"10":1,"11":1,"26":1,"28":7,"31":1,"61":1,"75":1,"76":1,"90":1,"126":1}}],["glg",{"2":{"19":1}}],["glitches",{"2":{"19":1}}],["gtag",{"2":{"111":5}}],["gt",{"2":{"7":1,"19":1,"40":2}}],["gh",{"2":{"7":2,"106":3}}],["gitpod",{"2":{"19":2}}],["gitmessage",{"2":{"19":1}}],["gitmodules",{"2":{"19":1}}],["gitattributes",{"2":{"19":1}}],["gitlens",{"2":{"19":4}}],["gitlab",{"2":{"5":1,"19":2}}],["gitignore",{"2":{"7":1,"19":1}}],["githubactionsgithubpagesworkflow",{"2":{"83":1}}],["githubpullrequests",{"2":{"19":1}}],["githubissues",{"2":{"19":1}}],["github",{"0":{"7":1,"64":1,"105":2},"1":{"106":2,"107":2},"2":{"5":2,"7":23,"8":3,"19":7,"39":2,"48":1,"53":6,"55":7,"59":2,"63":3,"64":1,"68":1,"72":2,"75":1,"76":1,"80":2,"83":2,"85":1,"88":1,"90":1,"106":6,"124":3,"127":1}}],["git",{"2":{"5":1,"7":3,"9":1,"19":10,"85":2}}],["gives",{"2":{"4":2,"19":1,"24":1}}],["give",{"2":{"2":2,"30":1,"40":1}}],["given",{"2":{"1":1}}],["grpc",{"2":{"93":1}}],["grid",{"2":{"36":1,"45":2}}],["growth",{"2":{"34":1}}],["grows",{"2":{"26":1}}],["grow",{"2":{"26":1}}],["grown",{"2":{"24":1,"118":1}}],["groups",{"2":{"26":1}}],["grunt",{"2":{"19":2}}],["greater",{"2":{"30":1}}],["great",{"2":{"18":1,"19":1}}],["greatly",{"2":{"4":1,"27":1,"89":1,"137":1}}],["gray",{"2":{"91":1}}],["graph",{"2":{"83":1,"88":1,"97":1,"124":1,"131":1}}],["graphql",{"2":{"4":1,"93":1}}],["grains",{"2":{"39":1}}],["grab",{"2":{"7":1}}],["grant",{"2":{"3":1}}],["granted",{"2":{"3":2}}],["granular",{"2":{"2":1}}],["gmail",{"2":{"2":1,"51":1}}],["gemfile",{"2":{"19":2}}],["geneva",{"2":{"56":1}}],["generation",{"2":{"40":2}}],["generating",{"2":{"18":1,"40":1}}],["generated",{"2":{"40":2}}],["generate",{"2":{"7":1,"8":1,"14":1,"40":1}}],["generates",{"2":{"1":1,"2":2,"40":1}}],["generalize",{"2":{"90":1}}],["generally",{"2":{"50":1}}],["general",{"2":{"15":1,"19":3,"27":1,"39":1,"40":1,"49":1,"90":2}}],["generalroutes",{"2":{"11":2}}],["genuinely",{"2":{"11":1}}],["getbestblockhash",{"2":{"94":1}}],["getting",{"0":{"52":1,"82":1},"1":{"53":1,"83":1,"84":1,"85":1}}],["getters",{"2":{"28":2}}],["gettoken",{"2":{"0":1}}],["getimageurl",{"2":{"16":2,"17":2}}],["getitem",{"2":{"7":1}}],["getsvgicon",{"2":{"16":3,"17":2}}],["gets",{"2":{"2":1,"15":2,"19":1}}],["get",{"2":{"0":1,"1":1,"2":1,"3":1,"5":1,"8":2,"17":2,"30":1,"39":1,"40":2,"53":1,"55":3,"93":1}}],["getuserdata",{"2":{"0":2}}],["g",{"2":{"1":1,"15":1,"19":1,"26":3,"28":1,"40":1,"86":1,"111":1}}],["nice",{"2":{"110":1}}],["nix",{"2":{"19":3}}],["nls",{"2":{"19":2}}],["nx",{"2":{"19":2}}],["nvmrc",{"2":{"19":2}}],["number",{"2":{"24":1,"29":1,"31":1,"55":1,"127":1}}],["numbers",{"2":{"24":1,"118":1}}],["nuxt",{"2":{"19":2,"89":1}}],["null",{"2":{"19":1}}],["npx",{"2":{"18":2}}],["npm",{"0":{"58":1},"2":{"9":1,"18":1,"19":4,"24":1,"32":1,"90":1,"118":1}}],["n",{"2":{"7":1,"19":1,"39":1}}],["naming",{"2":{"90":1}}],["namely",{"2":{"28":1}}],["named",{"2":{"17":2}}],["name=",{"2":{"15":1,"95":1,"131":4}}],["names",{"2":{"3":1,"15":1,"95":1}}],["name",{"2":{"3":1,"7":13,"11":2,"15":3,"16":4,"17":8,"48":1,"55":1,"83":1,"88":1,"95":1,"106":1,"107":1,"125":1,"136":2}}],["navbar",{"0":{"132":1},"1":{"133":1,"134":1},"2":{"83":2,"124":1,"132":1}}],["navigationdrawer",{"2":{"83":1,"132":1}}],["navigation",{"0":{"108":1},"1":{"109":1,"110":1},"2":{"26":1,"83":1,"90":1,"108":1,"124":2,"130":1}}],["native",{"2":{"30":1,"40":3,"136":1}}],["nativetabs",{"2":{"19":1}}],["nature",{"2":{"20":1}}],["naturally",{"2":{"7":1,"28":1}}],["nginx",{"2":{"1":1,"8":1}}],["novice",{"2":{"89":1,"90":1}}],["non",{"2":{"28":2,"31":2,"39":1,"50":1,"63":1}}],["nontrivial",{"2":{"19":1}}],["normal",{"2":{"15":1,"19":1,"40":2}}],["now",{"2":{"8":1,"39":1}}],["no",{"2":{"2":1,"17":1,"19":1,"24":1,"28":4,"32":1,"40":1,"63":1,"83":8,"88":4}}],["nosql",{"2":{"1":1,"28":1}}],["nodemon",{"2":{"19":4}}],["node",{"2":{"1":2,"7":2,"18":3,"19":7,"39":1,"40":1}}],["nothing",{"2":{"31":1,"38":1}}],["notified",{"2":{"30":1}}],["notificationinterceptor",{"2":{"0":2,"94":2}}],["notebook",{"2":{"91":3,"109":1,"128":1,"130":1}}],["notes",{"2":{"40":1}}],["note",{"2":{"18":1,"26":1,"38":1,"39":1}}],["not",{"0":{"4":1},"2":{"0":2,"1":3,"2":6,"3":3,"4":1,"5":1,"17":1,"19":4,"22":1,"24":7,"26":1,"27":1,"28":7,"29":1,"30":4,"31":2,"32":2,"35":1,"38":1,"39":5,"40":7,"50":1,"53":1,"55":1,"86":3,"89":1,"107":1,"137":1}}],["neighboring",{"2":{"55":1}}],["nexttick",{"2":{"31":1}}],["next",{"2":{"19":2,"39":1}}],["nest",{"2":{"19":2}}],["nesting",{"2":{"19":2}}],["nested",{"2":{"11":1}}],["netlify",{"2":{"8":1,"19":2}}],["networks",{"2":{"94":1,"124":1}}],["network",{"2":{"1":1,"31":1}}],["newitem",{"2":{"30":3}}],["news",{"2":{"28":2}}],["newer",{"2":{"18":1,"31":1}}],["new",{"2":{"7":5,"13":1,"17":2,"19":1,"30":2,"31":1,"32":2,"38":1,"39":1,"40":1,"48":1,"53":1,"91":1,"111":1,"121":1,"127":1,"137":1,"139":1}}],["never",{"2":{"4":1,"19":1,"39":1}}],["nevertheless",{"2":{"0":1,"89":1}}],["necessary",{"2":{"2":1,"7":1,"19":1,"27":1,"29":1,"39":1,"40":1,"86":2,"89":1,"122":1}}],["needs",{"2":{"10":1,"15":1,"28":1,"29":1,"38":1,"40":1}}],["needed",{"2":{"7":1,"15":1,"24":1,"26":1,"31":2,"53":1,"76":1,"86":2,"90":1,"107":1,"118":1,"121":1,"138":1}}],["need",{"2":{"1":1,"4":1,"7":2,"8":1,"9":2,"10":2,"11":1,"15":1,"18":4,"24":1,"28":1,"29":1,"30":3,"31":3,"32":1,"39":3,"40":3,"53":2,"56":1,"89":2,"107":1,"121":1}}],["bg",{"2":{"56":7,"73":5,"75":4,"76":5}}],["b",{"2":{"24":2,"31":2}}],["bzl",{"2":{"19":1}}],["bbl",{"2":{"19":1}}],["blank",{"2":{"138":1}}],["blame",{"2":{"19":3}}],["blg",{"2":{"19":1}}],["bloating",{"2":{"97":1}}],["blocking",{"2":{"31":1}}],["blocks",{"2":{"26":1,"90":2}}],["block",{"2":{"19":1}}],["bloc",{"2":{"19":1}}],["blog",{"2":{"2":1,"26":1,"88":1,"89":1,"90":1}}],["bit",{"2":{"28":1,"30":1,"32":1,"40":2}}],["bidirectional",{"2":{"4":1}}],["big",{"2":{"2":1,"26":1,"30":1,"39":1}}],["broken",{"2":{"39":1}}],["browserslist",{"2":{"19":2}}],["browsers",{"2":{"8":1,"24":1,"40":1}}],["browser",{"2":{"2":3,"3":5,"7":1,"15":1,"18":1,"19":1,"29":1,"31":1,"40":5,"84":1,"127":1,"136":1,"137":1}}],["brings",{"2":{"38":1}}],["bring",{"2":{"28":1,"31":1}}],["brand",{"2":{"56":4,"73":4,"75":2,"76":2,"138":1}}],["branch",{"2":{"7":5,"40":1,"106":6}}],["branches",{"2":{"7":2,"28":1}}],["bracketpairs",{"2":{"19":1}}],["breakpoint",{"2":{"91":1}}],["breaks",{"2":{"26":1}}],["break",{"2":{"2":1,"30":1}}],["bar",{"2":{"124":1}}],["bars",{"2":{"26":2}}],["bad",{"2":{"24":2,"28":2,"38":2}}],["babel",{"2":{"19":10}}],["babelrc",{"2":{"19":10}}],["bazelproject",{"2":{"19":1}}],["bazelignore",{"2":{"19":1}}],["bazelrc",{"2":{"19":1}}],["bazel",{"2":{"19":3}}],["bandle",{"2":{"15":2}}],["banner",{"2":{"15":1}}],["bash$",{"2":{"83":1}}],["bashnpm",{"2":{"58":1,"71":1,"79":1}}],["bashpnpm",{"2":{"58":2,"71":2,"79":2,"83":1}}],["basis",{"2":{"28":1}}],["basics",{"2":{"39":1}}],["basic",{"2":{"26":3,"31":1,"39":3}}],["basically",{"2":{"1":1,"28":1}}],["basetoggle",{"2":{"125":1}}],["baseurl",{"2":{"94":1}}],["baseinput",{"2":{"26":1,"33":1}}],["baseicon",{"0":{"16":1,"95":1},"2":{"15":2,"18":2,"26":1,"95":5,"125":1}}],["basecard",{"2":{"26":1}}],["basebuttonandstringhelpers",{"2":{"27":1}}],["basebutton",{"2":{"26":3,"33":1,"38":2}}],["base",{"0":{"107":1},"2":{"16":1,"56":1,"73":2,"107":2,"139":1}}],["base64",{"2":{"15":1}}],["based",{"2":{"2":2,"7":1,"24":2,"26":1}}],["battery",{"2":{"2":1}}],["baas",{"2":{"1":6}}],["backers",{"2":{"19":1}}],["backend",{"0":{"1":1},"2":{"0":5,"1":8,"2":6,"3":6,"4":2,"8":1,"11":1,"29":1,"30":3,"39":2,"40":1,"89":1,"93":2,"94":2,"124":1}}],["background",{"2":{"17":1,"59":2,"61":1,"66":1,"68":1,"72":1,"75":2,"76":5,"80":2}}],["backroute",{"2":{"11":1}}],["backups",{"2":{"7":2}}],["backup",{"2":{"7":9}}],["back",{"2":{"1":1,"2":3,"4":1,"19":1,"30":1,"38":1,"39":1}}],["bunch",{"2":{"24":1,"28":1,"118":1}}],["bundleconfig",{"2":{"19":2}}],["bundle",{"2":{"1":1,"18":4,"24":1,"32":1,"38":1,"122":1}}],["buying",{"2":{"8":1}}],["built",{"2":{"7":1,"28":1,"40":1}}],["builds",{"2":{"18":1,"26":1}}],["builders",{"2":{"18":1}}],["builder",{"2":{"18":5,"86":1,"88":1,"90":1}}],["building",{"2":{"8":1,"18":1,"90":1,"124":1}}],["builddata",{"2":{"7":4}}],["build",{"0":{"18":1},"2":{"5":1,"7":12,"18":3,"19":4,"29":1,"53":1,"90":1,"106":2,"122":1,"124":1}}],["bus",{"2":{"4":1}}],["business",{"2":{"1":1,"26":3,"28":7,"30":1,"88":1,"89":3,"90":1,"93":1}}],["button>",{"2":{"120":1}}],["button",{"2":{"31":1,"38":1,"120":2}}],["buttons",{"2":{"26":1,"31":1}}],["but",{"2":{"0":2,"1":3,"2":5,"3":1,"4":1,"5":1,"7":1,"11":1,"15":1,"19":1,"24":4,"27":1,"28":4,"29":1,"30":4,"31":4,"32":2,"38":1,"39":6,"40":6,"53":2,"85":1,"86":2,"89":1,"94":1,"110":1,"118":1,"130":1}}],["box",{"2":{"90":1,"91":4}}],["bottom",{"2":{"124":1}}],["bot",{"2":{"40":2}}],["bots",{"2":{"40":2}}],["bother",{"2":{"1":1}}],["both",{"2":{"1":2,"4":1,"7":2,"9":1,"18":1,"19":1,"28":1,"31":1,"34":1,"39":4,"50":2,"55":1,"121":1,"127":1}}],["born",{"2":{"40":1}}],["border",{"2":{"31":1,"56":2,"73":2,"75":1,"76":1,"91":1,"139":1}}],["book",{"2":{"39":6,"50":1}}],["booting",{"2":{"19":1}}],["boilerplates",{"2":{"90":1}}],["boilerplate",{"2":{"30":1,"89":1}}],["bound",{"2":{"28":3}}],["boundary",{"2":{"19":1}}],["bower",{"2":{"19":3}}],["bonuses",{"2":{"2":1}}],["body>",{"2":{"68":1,"75":2,"76":2}}],["body",{"2":{"0":2,"68":1,"75":1,"76":2,"91":1,"138":1}}],["bypass",{"2":{"40":1}}],["by",{"0":{"125":1},"2":{"1":4,"2":5,"3":5,"7":1,"11":1,"15":3,"18":1,"19":1,"24":3,"28":4,"29":1,"30":3,"31":3,"38":1,"39":3,"40":8,"53":2,"83":1,"109":1,"110":1,"118":2,"120":1,"124":1,"130":1,"138":1,"139":2}}],["bedroom",{"2":{"40":1}}],["benefit",{"2":{"40":1}}],["believed",{"2":{"39":1}}],["belong",{"2":{"28":1}}],["below",{"2":{"3":1,"48":1,"55":1,"56":1}}],["beautiful",{"2":{"38":1,"40":1}}],["besides",{"2":{"32":1,"39":1}}],["best",{"0":{"11":1},"1":{"12":1,"13":1,"14":1},"2":{"0":1,"2":1,"11":2,"17":1,"19":2,"26":1,"39":5,"49":1,"50":1,"89":3,"90":2}}],["beyond",{"2":{"30":1}}],["better",{"2":{"30":1,"35":1,"39":2,"40":1,"121":1}}],["between",{"2":{"3":1,"11":1,"26":2,"28":2,"30":1,"39":2,"40":1,"55":1,"63":1}}],["behavior",{"2":{"30":1}}],["behind",{"2":{"30":1}}],["beforehand",{"2":{"39":2}}],["before",{"2":{"15":1,"39":1,"40":1}}],["been",{"2":{"15":1,"24":1,"30":1,"40":2,"138":1}}],["beginners",{"2":{"19":1,"50":1}}],["beginner",{"2":{"4":1,"39":1}}],["becoming",{"2":{"89":1}}],["become",{"2":{"26":1,"28":1,"30":1,"31":1,"32":1,"38":2,"39":1}}],["becomes",{"2":{"3":1,"28":2}}],["became",{"2":{"28":2}}],["because",{"2":{"2":1,"4":1,"7":1,"24":1,"28":1,"31":1,"40":1}}],["being",{"2":{"2":1}}],["be",{"2":{"0":1,"1":2,"2":2,"7":9,"8":4,"11":5,"15":3,"19":2,"24":3,"26":2,"27":3,"28":9,"29":4,"30":9,"31":3,"34":1,"35":2,"38":1,"39":6,"40":6,"50":1,"53":3,"55":1,"63":3,"76":3,"83":2,"85":2,"86":3,"89":2,"90":2,"91":2,"93":1,"107":1,"109":1,"118":1,"130":1,"136":1}}],["skeleton",{"2":{"89":1}}],["sky",{"2":{"59":1,"76":1,"80":1}}],["skill",{"2":{"38":1,"39":1}}],["snippets",{"2":{"97":1,"124":1}}],["snickerbockers",{"2":{"7":2}}],["snapshot",{"2":{"53":1}}],["sd",{"2":{"51":1}}],["sw",{"2":{"40":1,"49":1}}],["swagger",{"2":{"39":1}}],["switch",{"2":{"33":1,"56":1,"93":1}}],["switching",{"2":{"4":1,"63":1,"125":1,"139":2}}],["swiper",{"2":{"22":1}}],["sleeping",{"2":{"40":1}}],["slowing",{"2":{"31":1}}],["slower",{"2":{"28":2}}],["slot",{"2":{"10":1}}],["slidingheader",{"0":{"116":1}}],["slider",{"0":{"22":1},"2":{"22":1}}],["slices",{"2":{"26":1}}],["sliced",{"2":{"26":3}}],["svelte",{"2":{"19":3,"30":2}}],["svgo",{"2":{"19":10}}],["svgs",{"2":{"18":1}}],["svgresources",{"2":{"17":4}}],["svg",{"2":{"16":2,"17":2,"19":2,"95":1}}],["syntax",{"2":{"86":1}}],["synthesizing",{"2":{"28":1}}],["synctex",{"2":{"19":1}}],["systems",{"2":{"30":2,"31":1}}],["system",{"2":{"0":1,"2":4,"30":2,"38":1,"93":1}}],["smartphone",{"2":{"40":2}}],["smaller",{"2":{"30":1,"122":1}}],["small",{"2":{"1":1,"2":2,"15":1,"20":1,"26":2,"28":1,"38":1,"40":1}}],["smoothly",{"2":{"26":1}}],["smoothscrolling",{"2":{"19":1}}],["sftp",{"2":{"19":1}}],["sfc",{"2":{"19":2,"30":1}}],["src=",{"2":{"15":3,"16":1,"61":2,"75":2,"76":2,"111":1}}],["src",{"2":{"15":1,"18":2,"26":5,"97":1,"120":1}}],["s3",{"2":{"8":1}}],["ssg",{"0":{"40":1},"2":{"40":3}}],["ssd",{"2":{"19":1}}],["ssrs",{"2":{"40":1}}],["ssr",{"0":{"40":1},"2":{"19":1,"28":2,"40":8}}],["ss06",{"2":{"19":1}}],["ss03",{"2":{"19":1}}],["ss02",{"2":{"19":1}}],["ss01",{"2":{"19":1}}],["ssl",{"2":{"8":2}}],["ssh",{"2":{"7":14,"19":2}}],["sso",{"2":{"2":2}}],["sql",{"2":{"4":1,"7":1,"19":1,"28":2,"39":1}}],["sh$",{"2":{"83":1,"84":1,"85":1,"88":1}}],["sheet",{"0":{"41":1},"1":{"42":1,"43":1,"44":1,"45":1,"46":1,"47":1},"2":{"42":1,"43":1,"44":1,"45":4}}],["shell",{"2":{"19":1,"26":1,"27":2,"40":1}}],["shims",{"2":{"19":1}}],["sh",{"2":{"19":2,"68":2}}],["shrinkwrap",{"2":{"19":2}}],["shnpx",{"2":{"18":1}}],["shpnpm",{"2":{"18":1}}],["shadow",{"2":{"31":1}}],["shallowref",{"2":{"24":2}}],["shaking",{"2":{"17":1,"32":1}}],["shared",{"2":{"10":1,"19":1,"26":2,"28":1}}],["share",{"2":{"10":1,"11":1,"28":1}}],["sharing",{"2":{"3":1}}],["showcase",{"2":{"90":1,"127":1}}],["show",{"2":{"40":1}}],["showed",{"2":{"39":1,"40":1}}],["shows",{"2":{"28":1}}],["showsuggestionsassnippets",{"2":{"19":1}}],["showdocumentation",{"2":{"19":1}}],["showing",{"2":{"7":1}}],["shown",{"2":{"3":1,"11":1,"24":1,"30":1,"56":1,"76":1}}],["shortens",{"2":{"38":1}}],["short",{"2":{"2":1,"39":1,"136":1}}],["should",{"2":{"1":1,"2":3,"7":1,"11":1,"15":1,"19":1,"24":2,"28":4,"29":1,"30":2,"31":1,"34":1,"39":1,"53":2,"76":1,"83":1,"86":2,"89":1,"90":1,"111":1,"131":1}}],["scope",{"2":{"136":1}}],["scoped>",{"2":{"16":1}}],["scaffolder",{"2":{"88":1,"90":1}}],["scaffolded",{"2":{"86":1}}],["scaffold",{"2":{"83":1,"90":1}}],["scaffolding",{"0":{"87":1},"1":{"88":1,"89":1},"2":{"83":1,"89":1,"90":1}}],["scalable",{"2":{"26":4,"30":1}}],["scalability",{"2":{"26":1}}],["scales",{"2":{"26":1}}],["scale",{"2":{"26":1}}],["scheme",{"2":{"56":1}}],["school",{"2":{"39":1}}],["screenwidthfactor",{"2":{"91":1}}],["screen",{"0":{"138":1},"2":{"40":1,"83":1,"88":2,"90":1,"97":1,"98":2,"109":1,"124":2,"136":1,"138":4}}],["screens",{"2":{"26":1,"110":1}}],["scrollbar",{"2":{"98":1}}],["scroll",{"2":{"24":1}}],["scrolls",{"2":{"24":1,"116":1}}],["script>",{"2":{"12":1,"16":1,"59":1,"61":2,"68":1,"72":1,"75":2,"76":4,"80":1,"91":1,"95":1,"111":3,"120":1}}],["scripts",{"2":{"7":1,"29":1,"40":1,"127":1}}],["script",{"0":{"105":1},"1":{"106":1,"107":1},"2":{"0":5,"1":2,"7":2,"12":1,"16":1,"19":1,"24":1,"40":1,"59":1,"61":2,"68":1,"72":1,"75":2,"76":2,"80":1,"86":1,"91":1,"95":1,"111":1,"120":1,"124":1}}],["scmitem",{"2":{"19":1}}],["scmgroupinline",{"2":{"19":1}}],["scmgroup",{"2":{"19":1}}],["scm",{"2":{"19":2}}],["scss",{"2":{"16":1,"19":1,"26":2,"86":1,"91":2,"139":1}}],["scenario",{"2":{"2":1,"11":1}}],["study",{"2":{"39":1}}],["studying",{"2":{"39":1}}],["student",{"2":{"39":1}}],["stylized",{"2":{"38":1}}],["styling",{"0":{"56":1},"2":{"30":1,"33":1,"90":1}}],["stylus",{"2":{"24":1}}],["stylesheet",{"2":{"61":1,"68":2,"75":1,"76":1}}],["styles",{"2":{"26":5,"38":4,"70":1}}],["stylelint",{"2":{"19":4}}],["styleci",{"2":{"19":2}}],["style>",{"2":{"16":1,"56":2,"75":2,"76":2}}],["style",{"2":{"16":1,"19":1,"38":1,"39":2,"49":1,"59":1,"68":1,"72":1,"80":1,"90":1,"114":1,"115":1}}],["style=",{"2":{"16":2}}],["step",{"2":{"40":1}}],["steps",{"2":{"2":1,"7":2}}],["steit",{"2":{"24":1}}],["stick",{"2":{"38":1}}],["sticky",{"2":{"19":1,"113":1,"114":1,"115":1}}],["stickyscroll",{"2":{"19":1}}],["still",{"2":{"11":1,"31":1,"39":1,"40":1}}],["storage",{"2":{"28":1}}],["storages",{"2":{"28":2}}],["story",{"2":{"19":1}}],["storefront",{"2":{"89":1}}],["stored",{"2":{"39":1,"139":1}}],["stores",{"2":{"28":4}}],["store",{"2":{"2":2,"7":1,"10":1,"26":7,"27":1,"28":8,"40":2,"88":1,"89":1,"90":1}}],["stoploading",{"2":{"13":2,"14":2}}],["strengthen",{"2":{"138":1}}],["streets",{"2":{"39":1}}],["stretch",{"2":{"31":1}}],["structuring",{"2":{"34":1}}],["structured",{"2":{"40":1}}],["structures",{"0":{"26":1}}],["structure",{"0":{"25":1},"1":{"26":1,"27":1},"2":{"26":6}}],["strategies",{"2":{"39":1}}],["strategy",{"2":{"26":1,"137":1}}],["straightforward",{"2":{"11":1,"26":1}}],["strong",{"2":{"17":1}}],["strings",{"2":{"31":1}}],["string>",{"2":{"13":1}}],["string",{"2":{"2":1,"3":1,"15":1,"16":6,"24":1,"76":1}}],["star",{"2":{"66":1}}],["starred",{"2":{"59":1,"76":1,"80":1}}],["starter",{"2":{"89":1}}],["started",{"0":{"82":1},"1":{"83":1,"84":1,"85":1}}],["startup",{"2":{"29":1,"124":1,"127":1,"138":1}}],["startloading",{"2":{"13":2,"14":2}}],["start",{"2":{"1":1,"4":1,"39":1,"40":1,"89":1,"136":1}}],["stand",{"2":{"30":1}}],["standards",{"0":{"36":1},"2":{"38":1}}],["standard",{"2":{"2":2,"3":1,"4":1,"20":1,"24":2,"39":1,"94":1,"128":1}}],["standalone",{"2":{"1":1,"30":1,"136":1}}],["stack",{"2":{"28":1,"51":1}}],["stackblitz",{"2":{"19":3}}],["stage",{"2":{"31":1}}],["staged",{"2":{"19":2}}],["staging",{"2":{"7":5}}],["states",{"2":{"28":2}}],["stateful",{"2":{"28":1}}],["state",{"0":{"28":1},"2":{"19":1,"28":15,"30":1,"31":1}}],["statistics",{"2":{"18":1}}],["static",{"2":{"8":1,"15":1,"31":1,"40":3}}],["stash",{"2":{"19":3}}],["splashscreen",{"2":{"83":1}}],["splash",{"0":{"138":1},"2":{"83":1,"88":2,"90":1,"97":1,"124":2,"138":4}}],["split",{"2":{"28":1}}],["splide",{"2":{"22":1}}],["spite",{"2":{"39":1}}],["spinning",{"2":{"19":1}}],["spread",{"2":{"28":1}}],["sponsors",{"2":{"19":1}}],["span",{"2":{"55":1}}],["space",{"2":{"18":1}}],["spaces",{"2":{"3":1}}],["spa",{"0":{"40":1},"2":{"2":1,"26":1,"40":10,"90":1}}],["spend",{"2":{"19":1,"35":1}}],["spec",{"2":{"19":1,"26":3}}],["specifying",{"2":{"83":1}}],["specify",{"2":{"30":1,"31":1,"53":1,"65":1,"125":1}}],["specified",{"2":{"3":1,"121":1}}],["specifications",{"2":{"40":1}}],["specification",{"2":{"39":1,"76":1,"94":1}}],["specifically",{"2":{"3":1}}],["specific",{"2":{"1":1,"3":1,"4":1,"11":1,"26":4,"31":1,"55":1,"86":3,"89":1,"90":3}}],["specialized",{"2":{"3":1}}],["special",{"2":{"3":1,"4":1}}],["speeds",{"2":{"38":1}}],["speed",{"2":{"15":1,"26":1,"31":2,"38":1,"40":1}}],["speaking",{"2":{"2":1,"3":1,"30":1,"31":1}}],["s",{"2":{"1":2,"2":4,"4":1,"7":1,"15":1,"16":1,"18":2,"19":3,"20":1,"26":1,"28":5,"30":4,"31":3,"38":1,"39":3,"40":3,"49":3,"53":1,"63":1,"86":1,"89":1,"93":2}}],["sans",{"2":{"56":1,"139":1}}],["sandboxes",{"2":{"19":1}}],["sandbox",{"2":{"18":1}}],["saw",{"2":{"40":1}}],["says",{"2":{"31":1}}],["say",{"2":{"31":1}}],["sass",{"2":{"19":1}}],["sample",{"2":{"7":2}}],["same",{"2":{"2":2,"4":2,"9":3,"18":1,"19":1,"24":1,"28":4,"29":2,"30":1,"31":2,"33":1,"53":1,"89":1,"94":1,"106":1,"118":1}}],["saving",{"2":{"2":1,"53":1}}],["saved",{"2":{"7":1}}],["saves",{"2":{"2":1,"7":1,"18":1}}],["save",{"2":{"1":1,"2":1,"19":1,"32":1,"38":1,"53":1}}],["safely",{"2":{"0":1}}],["sun",{"2":{"51":1}}],["suffer",{"2":{"35":1}}],["sufficient",{"2":{"20":1,"24":1}}],["success",{"2":{"27":1}}],["such",{"2":{"1":1,"2":1,"3":1,"9":1,"10":1,"26":2,"28":1,"40":1,"86":1}}],["suit",{"2":{"56":1}}],["suits",{"2":{"26":1}}],["suitable",{"0":{"27":1},"2":{"1":1,"19":1,"27":1,"28":1,"30":1,"40":2}}],["summary",{"0":{"88":1}}],["sum",{"2":{"19":2}}],["support",{"2":{"24":2,"28":3,"31":2,"39":1,"56":1,"118":1,"125":1,"139":1}}],["supports",{"2":{"18":1,"70":1}}],["supported",{"2":{"17":1,"24":1,"28":1,"32":1,"137":1}}],["supabase",{"2":{"1":2,"39":1}}],["sudo",{"2":{"7":3}}],["subjective",{"2":{"50":1}}],["substring",{"2":{"17":2}}],["subdirectory",{"2":{"9":1,"15":1}}],["subdirectories",{"2":{"7":1}}],["subdomains",{"2":{"8":1}}],["submodules",{"2":{"7":4,"9":2}}],["suggestselection",{"2":{"19":1}}],["suggest",{"2":{"4":1,"39":1,"48":1}}],["suspicious",{"2":{"2":1}}],["suspense",{"2":{"0":1,"11":1}}],["sure",{"2":{"2":1,"39":1}}],["silent",{"2":{"83":1}}],["since",{"2":{"40":1}}],["singleton",{"2":{"28":1}}],["singlequote",{"2":{"19":1}}],["singleclick",{"2":{"19":1}}],["single",{"2":{"2":1,"27":1,"30":1,"40":1}}],["situations",{"2":{"31":1}}],["situation",{"2":{"28":1,"30":1}}],["site",{"2":{"1":1,"2":7,"3":3,"5":1,"7":17,"8":2,"24":2,"26":1,"28":1,"29":1,"30":1,"31":2,"39":3,"40":5,"49":1,"53":1,"89":1,"90":1,"106":1,"107":1,"118":3}}],["sites",{"2":{"1":1,"40":2}}],["size=",{"2":{"15":1}}],["size",{"2":{"13":1,"15":2,"16":5,"32":1,"53":1,"55":3}}],["simultaneous",{"2":{"31":1}}],["simultaneously",{"2":{"11":1,"31":1}}],["simulates",{"2":{"29":1}}],["similarity",{"2":{"31":1}}],["similar",{"2":{"28":1,"30":1,"39":1,"40":1,"89":1,"110":1,"130":1}}],["simply",{"2":{"31":1}}],["simplified",{"2":{"40":1}}],["simplifies",{"2":{"4":1}}],["simplistically",{"2":{"30":1}}],["simplenavbar",{"0":{"133":1}}],["simpleheader",{"0":{"113":1}}],["simplefooter",{"0":{"100":1}}],["simpledrawer",{"0":{"109":1},"2":{"83":2,"110":1}}],["simpledialog",{"2":{"19":1}}],["simplest",{"2":{"26":1}}],["simpler",{"2":{"24":1}}],["simple",{"2":{"0":1,"2":1,"5":1,"19":4,"24":1,"26":2,"30":1,"39":1,"40":4,"90":1,"113":1,"114":1,"118":2,"135":1}}],["sidebar",{"2":{"106":1,"128":2,"130":2}}],["sidebarlayout",{"2":{"11":2}}],["side",{"2":{"11":2,"27":1,"40":3,"137":1}}],["significantly",{"2":{"40":1}}],["significant",{"2":{"24":1,"30":1,"40":1}}],["signing",{"2":{"2":1}}],["sign",{"2":{"2":1}}],["sort",{"2":{"28":1}}],["sonner",{"2":{"23":1}}],["sophisticated",{"2":{"19":1}}],["social",{"2":{"15":1,"124":1}}],["solving",{"2":{"89":3}}],["solvery",{"2":{"39":1}}],["solve",{"2":{"7":1,"15":1,"28":1,"39":1}}],["solid",{"2":{"20":1,"91":1}}],["solutions",{"2":{"40":1,"51":1,"90":1}}],["solution",{"2":{"1":2,"3":2,"4":1,"7":1,"11":1,"19":1,"40":1,"89":1}}],["software",{"2":{"4":1,"8":1,"29":1,"30":1,"37":1}}],["source",{"2":{"3":2,"7":1,"19":4,"26":1,"39":2,"81":1,"106":1}}],["sources",{"2":{"0":1,"3":2,"39":1,"50":1}}],["sooner",{"2":{"32":1}}],["soon",{"2":{"2":1}}],["somehow",{"2":{"40":1}}],["somearr",{"2":{"30":4}}],["someone",{"2":{"29":1,"40":1}}],["someimage",{"2":{"15":1}}],["sometimes",{"2":{"9":1,"27":1,"28":1,"38":1}}],["something",{"2":{"2":1,"28":1,"29":1,"31":1,"39":1}}],["somefunc",{"2":{"1":1}}],["somewhere",{"2":{"1":1}}],["some",{"0":{"14":1},"2":{"1":2,"2":1,"8":1,"11":2,"19":1,"21":1,"24":2,"28":3,"31":2,"32":1,"33":1,"38":1,"39":3,"40":3,"89":1}}],["so",{"2":{"0":1,"2":3,"7":1,"8":2,"19":1,"22":1,"24":1,"26":1,"28":2,"30":1,"31":1,"39":1,"40":3,"86":1,"89":1,"107":1,"121":2}}],["serialised",{"2":{"76":1}}],["serif",{"2":{"56":1,"139":1}}],["serve",{"2":{"30":1}}],["server",{"2":{"0":1,"1":4,"3":8,"4":3,"5":1,"7":7,"8":2,"15":1,"19":6,"24":1,"39":1,"40":13,"118":1}}],["services",{"2":{"0":1,"1":5,"2":1,"9":1,"19":1,"26":3,"28":1,"31":1,"39":1,"90":1,"93":1,"127":1}}],["service",{"0":{"0":1,"137":1},"2":{"0":2,"1":4,"4":1,"19":1,"30":1,"39":1,"40":4,"49":2,"83":1,"88":1,"93":1,"97":1,"124":1,"127":1,"135":1,"137":2}}],["segoe",{"2":{"56":1}}],["seo",{"0":{"40":1},"2":{"40":1}}],["selected",{"2":{"83":1,"139":1}}],["selection",{"2":{"65":1}}],["select",{"2":{"38":2,"83":6,"106":2}}],["self",{"2":{"30":1,"38":1,"39":1}}],["semantic",{"2":{"36":1}}],["semi",{"2":{"19":1}}],["separation",{"2":{"26":1}}],["separately",{"2":{"26":2,"90":1}}],["separated",{"2":{"3":1}}],["separate",{"2":{"0":3,"3":2,"9":2,"19":1,"28":2,"30":1,"31":3,"38":1,"39":1,"137":1}}],["searching",{"2":{"26":1}}],["searchinput",{"2":{"26":1}}],["searchtests",{"2":{"26":1}}],["searchstore",{"2":{"26":1}}],["search",{"2":{"19":1,"26":2,"40":4}}],["several",{"2":{"7":1,"9":1,"11":3,"28":3,"29":1,"30":1,"40":1}}],["seed",{"2":{"94":1}}],["seem",{"2":{"89":1}}],["see",{"2":{"2":1,"11":1,"15":1,"18":2,"19":2,"40":1,"69":1,"77":1,"136":1}}],["secrets",{"2":{"7":2}}],["section",{"2":{"3":1,"24":1,"26":1,"36":1,"106":1}}],["sections",{"2":{"2":1,"26":1}}],["seconds",{"2":{"19":1}}],["secondary",{"2":{"19":1}}],["second",{"2":{"2":2,"19":3,"53":2,"116":2}}],["security",{"2":{"2":5,"19":1,"31":1}}],["sense",{"2":{"28":1}}],["sentry",{"2":{"19":2}}],["sent",{"2":{"2":2}}],["send",{"2":{"4":1,"30":1,"40":1}}],["sends",{"2":{"2":1,"40":1}}],["sending",{"2":{"0":1,"26":1}}],["senior",{"2":{"2":1}}],["setlocale",{"2":{"120":2}}],["setlogoutcallback",{"2":{"0":1}}],["setoptions",{"2":{"94":1}}],["sets",{"2":{"94":1}}],["setsomearr",{"2":{"30":1}}],["setitem",{"2":{"7":1}}],["settimeout",{"2":{"31":1}}],["settings",{"2":{"7":1,"10":2,"19":1,"26":1,"106":1}}],["setting",{"0":{"107":1},"2":{"3":1,"7":1,"18":1,"19":1,"24":4,"89":1,"118":1}}],["setters",{"2":{"28":1}}],["settokencallback",{"2":{"0":1}}],["setup>",{"2":{"12":1,"16":1,"59":1,"72":1,"80":1}}],["setup",{"2":{"0":5,"7":4,"19":1,"24":1,"26":3,"28":1,"86":1,"91":1,"95":1,"120":1}}],["set",{"2":{"0":1,"2":2,"8":1,"13":1,"17":3,"18":2,"19":1,"30":1,"39":1,"40":1,"56":1,"76":1,"91":2,"130":1,"131":1}}],["setbaseurl",{"2":{"0":1}}],["dx",{"2":{"38":1,"49":1}}],["drop",{"2":{"106":1}}],["dropdown",{"2":{"38":1}}],["drawers",{"0":{"108":1},"1":{"109":1,"110":1},"2":{"108":1}}],["drawer",{"2":{"83":1,"90":1,"95":1,"124":2}}],["draw",{"2":{"37":1,"39":1}}],["dream",{"2":{"24":1}}],["driving",{"2":{"39":5}}],["driver",{"2":{"39":2}}],["drive",{"2":{"2":4,"39":1}}],["dribbling",{"2":{"28":1}}],["drilling",{"2":{"11":2}}],["dprint",{"2":{"19":4}}],["dlint",{"2":{"19":4}}],["dash",{"2":{"94":1}}],["days",{"2":{"35":1,"38":1,"39":2}}],["day",{"2":{"20":2,"24":2,"39":1}}],["dangerfile",{"2":{"19":2}}],["dart",{"2":{"19":6}}],["dark",{"2":{"19":1,"56":2,"63":1,"68":1,"70":1,"125":1,"139":2}}],["dates",{"2":{"20":1,"24":1,"55":2,"118":1}}],["date=`date",{"2":{"7":1}}],["date",{"0":{"24":1},"2":{"7":9,"18":1,"19":1,"24":1,"111":1}}],["datalayer",{"2":{"111":3}}],["databases",{"2":{"19":1}}],["database",{"2":{"1":5,"19":1,"28":3}}],["data",{"0":{"52":1,"53":1},"1":{"53":1},"2":{"0":3,"1":6,"2":2,"3":3,"4":1,"7":2,"10":3,"11":4,"18":1,"24":2,"26":1,"28":5,"30":7,"31":1,"39":2,"40":4,"53":6,"63":1,"76":1,"136":1}}],["dynamically",{"2":{"15":1,"30":1,"40":1,"90":1,"91":1,"125":1}}],["dynamic",{"2":{"15":1,"40":1,"53":1,"95":1,"127":1}}],["dt",{"2":{"7":1}}],["d",{"2":{"7":1,"19":16}}],["dual",{"2":{"31":1}}],["duplication",{"2":{"26":1}}],["duplicate",{"2":{"2":1}}],["due",{"2":{"4":1,"30":1}}],["during",{"2":{"3":1,"24":1,"53":2,"124":1,"138":1}}],["diagrams",{"2":{"37":1}}],["dialyzer",{"2":{"19":1}}],["dialogstyle",{"2":{"19":1}}],["dies",{"2":{"28":1}}],["divider",{"2":{"139":1}}],["divided",{"2":{"27":1,"31":1}}],["division",{"2":{"38":1}}],["div",{"2":{"12":2,"16":1,"68":1,"91":4}}],["div>",{"2":{"11":6,"12":1,"91":4,"120":2}}],["dirname",{"2":{"18":1}}],["dirs",{"2":{"7":1}}],["dir=`echo",{"2":{"7":2}}],["dir=your",{"2":{"7":1}}],["dir=dev",{"2":{"7":1}}],["dir=",{"2":{"7":2}}],["dir",{"2":{"7":24,"136":1}}],["direction",{"2":{"91":2}}],["direct",{"2":{"28":1,"53":1}}],["directly",{"2":{"18":1,"24":2,"32":1,"33":1,"40":1,"53":1}}],["directories",{"2":{"16":1}}],["directory",{"2":{"7":3,"27":1,"83":2,"95":1,"97":1}}],["directs",{"2":{"2":1}}],["disappears",{"2":{"98":1}}],["disable",{"2":{"24":1}}],["discussion",{"2":{"28":1}}],["disk",{"2":{"18":1,"19":1}}],["displaying",{"2":{"26":1,"28":2,"31":1}}],["displaylanguage",{"2":{"19":1}}],["display",{"2":{"10":1,"15":2,"40":1,"55":2,"91":1,"136":1}}],["dispatch",{"2":{"7":2}}],["distribution",{"2":{"40":1}}],["distributedfooter",{"0":{"104":1}}],["distributed",{"2":{"40":1,"90":1}}],["dist",{"2":{"7":2,"15":1,"19":1,"59":2,"61":3,"68":2,"72":3,"75":3,"76":3,"80":2}}],["diffeditor",{"2":{"19":1}}],["differing",{"2":{"28":1}}],["differs",{"2":{"3":1}}],["difference",{"2":{"24":1,"28":1,"30":1,"39":1}}],["differences",{"2":{"2":1,"30":1}}],["differently",{"2":{"18":1,"40":1}}],["different",{"2":{"1":1,"2":2,"10":1,"17":2,"18":1,"24":1,"26":4,"28":1,"29":1,"30":3,"31":3,"40":1,"116":1,"126":1,"127":3,"137":1}}],["diffdecorationsgutterwidth",{"2":{"19":1}}],["difficulties",{"2":{"4":1}}],["difficult",{"2":{"2":1,"39":1}}],["did",{"2":{"0":1,"24":1}}],["degree",{"2":{"86":1}}],["demo",{"0":{"65":1,"69":1,"77":1},"2":{"65":1,"69":1,"77":1}}],["demonstrates",{"2":{"28":1}}],["dead",{"2":{"40":1}}],["debounce",{"2":{"32":1}}],["debugging",{"2":{"24":1}}],["debuganyway",{"2":{"19":1}}],["debug",{"2":{"19":1}}],["deno",{"2":{"19":2}}],["deep",{"2":{"16":1,"127":1}}],["defining",{"2":{"89":1}}],["definitions",{"2":{"31":1}}],["definition",{"2":{"28":1}}],["defined",{"2":{"139":1}}],["define",{"2":{"28":1,"30":1}}],["defineconfig",{"2":{"18":1,"107":1}}],["defineprops",{"2":{"16":1}}],["defaultopentab",{"2":{"55":1}}],["defaultoptions",{"2":{"55":1,"59":1,"72":1,"80":1}}],["defaultlayout",{"2":{"26":2}}],["defaultformatter",{"2":{"19":4}}],["default",{"0":{"125":1},"2":{"0":1,"7":2,"16":6,"18":1,"19":2,"53":1,"56":1,"94":1,"107":1,"120":1}}],["detailed",{"2":{"31":1}}],["details",{"0":{"96":1},"1":{"97":1,"98":1},"2":{"10":1,"11":1,"15":1,"26":1,"36":1,"37":1,"106":1}}],["determined",{"2":{"2":1}}],["determines",{"2":{"2":1}}],["desired",{"2":{"76":2,"86":1}}],["designed",{"2":{"38":1}}],["designer",{"2":{"19":2}}],["design",{"2":{"0":1,"17":1,"26":6,"27":2,"30":1,"39":2,"49":1,"50":1,"88":1,"90":1}}],["desktop",{"2":{"31":1,"40":1,"91":3,"109":1,"128":1,"130":1}}],["desc",{"2":{"55":1}}],["descendant",{"2":{"28":2}}],["describe",{"2":{"37":1,"50":1}}],["describes",{"2":{"7":1}}],["description",{"2":{"7":1,"26":1,"40":1,"63":1,"131":3,"136":1}}],["delve",{"2":{"26":1}}],["deleting",{"2":{"24":1}}],["delete",{"2":{"2":1,"13":1,"24":1}}],["delivery",{"2":{"5":1}}],["de",{"2":{"4":1,"94":1}}],["deception",{"2":{"40":1}}],["decided",{"2":{"31":3}}],["decides",{"2":{"2":1,"28":1}}],["decomposition",{"2":{"30":1}}],["decomposed",{"2":{"26":1}}],["declensions",{"2":{"24":1,"118":1}}],["declared",{"2":{"3":2,"28":2}}],["declaration",{"2":{"3":1}}],["decade",{"2":{"17":1}}],["deposit",{"2":{"118":1}}],["deposits",{"2":{"2":1}}],["deprecated",{"2":{"28":1}}],["deployed",{"2":{"7":2,"26":1}}],["deploy",{"0":{"105":1},"1":{"106":1,"107":1},"2":{"7":21,"39":1,"90":1,"106":3,"124":2}}],["deployments",{"2":{"26":1}}],["deployment",{"0":{"106":1},"2":{"5":1,"7":3,"106":2,"127":1}}],["depend",{"2":{"30":1}}],["dependency",{"2":{"28":1,"32":1,"38":2,"86":1}}],["dependencies",{"0":{"32":1},"2":{"7":2,"24":1,"30":2,"40":1,"63":1,"86":1,"119":1,"121":1}}],["depending",{"2":{"2":1,"15":1,"39":1}}],["depends",{"2":{"0":1,"3":1,"31":1}}],["devdependencies",{"2":{"18":1,"19":1}}],["dev",{"2":{"7":10,"8":2,"18":1,"28":1,"40":1,"84":1,"85":1,"136":1}}],["devops",{"2":{"5":1}}],["developing",{"2":{"30":1,"31":1,"40":1,"86":1}}],["develop",{"2":{"30":1}}],["developed",{"2":{"9":1,"26":1,"27":1}}],["developers",{"2":{"11":1,"29":1,"38":2,"39":1,"50":1,"88":1,"90":2}}],["developer",{"2":{"1":2,"5":1,"28":3,"37":1,"38":1,"39":4,"49":2,"51":1,"86":1,"89":2,"93":1}}],["development",{"0":{"48":1,"126":1},"2":{"3":2,"5":1,"8":1,"9":1,"19":4,"24":1,"26":3,"29":3,"30":1,"31":1,"38":2,"39":1,"40":1,"89":2,"136":1}}],["devtoolsformatters",{"2":{"24":3}}],["devtools",{"2":{"1":1,"24":2,"28":4,"121":1}}],["dozens",{"2":{"18":1,"19":1}}],["down",{"2":{"10":1,"30":1,"31":1,"50":1,"106":1,"116":1}}],["downloading",{"2":{"24":1,"118":1}}],["downloaded",{"2":{"15":1,"40":1,"53":1}}],["download",{"2":{"7":1,"39":1}}],["don",{"2":{"7":1,"11":1,"15":1,"30":1,"32":2,"33":1,"40":2,"107":1,"121":1}}],["done",{"2":{"2":2,"29":1,"35":1,"86":1,"97":1}}],["document",{"0":{"37":1},"2":{"11":1,"38":1,"39":1}}],["documentation",{"2":{"7":1,"11":2,"15":1,"28":1,"37":1,"39":3,"40":1,"49":1,"50":1,"53":1,"63":1,"89":1}}],["docs",{"2":{"7":1,"8":1}}],["dockerignore",{"2":{"19":1}}],["dockerfile",{"2":{"19":2}}],["docker",{"0":{"6":1},"2":{"19":2}}],["domains",{"2":{"3":1}}],["domain",{"2":{"3":6,"8":4,"26":1,"39":1,"107":2,"131":1}}],["doe",{"2":{"2":2}}],["doesn",{"2":{"1":1,"19":2,"30":1,"32":1}}],["does",{"2":{"0":1,"2":4,"3":1,"19":2,"24":3,"28":1,"30":1,"40":1,"50":1,"137":1}}],["do",{"2":{"0":1,"1":3,"3":1,"8":1,"18":1,"19":1,"24":1,"28":2,"29":1,"30":2,"31":2,"32":1,"34":1,"35":1,"38":1,"39":4,"40":2,"86":1,"139":1}}],["rgba",{"2":{"56":3,"75":3,"76":3,"139":6}}],["richfooter",{"0":{"101":1}}],["rip",{"2":{"28":1}}],["rigor",{"2":{"4":1}}],["rights",{"2":{"2":1}}],["right",{"2":{"2":3,"19":2,"24":1,"39":1,"40":1,"98":1,"118":1,"135":1}}],["rspack",{"2":{"19":12}}],["rc",{"2":{"19":1}}],["ruslan",{"2":{"51":2}}],["rush",{"2":{"19":1}}],["rust",{"2":{"19":1}}],["rustfmt",{"2":{"19":2}}],["ruby",{"2":{"19":1}}],["ru",{"2":{"19":3,"50":2}}],["rules",{"2":{"19":2,"30":1,"39":1}}],["runtime",{"2":{"31":1}}],["running",{"2":{"29":1}}],["runs",{"2":{"7":2}}],["run",{"2":{"1":2,"7":9,"19":3,"31":1,"40":2,"136":1}}],["r",{"2":{"7":2,"28":1,"50":2}}],["rf",{"2":{"7":4}}],["rm",{"2":{"7":3}}],["roboto",{"2":{"139":1}}],["robust",{"2":{"30":1}}],["row",{"2":{"91":1}}],["room",{"2":{"40":1}}],["root",{"2":{"7":2,"10":2,"17":1,"56":1,"73":1,"139":1}}],["routine",{"2":{"30":1}}],["routing",{"0":{"129":1},"2":{"26":1}}],["router",{"2":{"11":4,"26":4,"86":1,"129":1}}],["routes",{"2":{"11":2,"27":1,"129":1}}],["roughly",{"2":{"2":1,"3":1,"31":1}}],["rollup",{"2":{"18":2,"19":2}}],["rollback",{"2":{"7":1}}],["roles",{"2":{"2":1,"30":1}}],["role",{"2":{"2":2,"26":1,"28":1,"30":1,"39":1}}],["rbac",{"2":{"2":1}}],["rtl",{"2":{"24":1,"118":1}}],["rt",{"2":{"2":4,"49":1,"56":21,"73":10,"75":10,"76":13}}],["range",{"2":{"89":1}}],["rantime",{"2":{"31":1}}],["raise",{"2":{"37":1}}],["ram",{"2":{"19":1,"121":1}}],["raw",{"2":{"15":2,"17":1,"18":1}}],["rarely",{"2":{"2":1}}],["rather",{"2":{"1":1,"4":1,"89":1}}],["rpc",{"0":{"94":1},"2":{"0":1,"4":7,"39":1,"83":1,"93":1,"94":5,"124":1}}],["rebuilt",{"2":{"53":1}}],["retrieving",{"0":{"53":1}}],["returns",{"2":{"1":1,"2":2,"15":1,"24":1,"93":1}}],["return",{"2":{"0":1,"3":1,"13":1,"16":2,"17":2,"93":1,"94":1}}],["reviews",{"2":{"40":1}}],["rehydration",{"2":{"40":1}}],["rewriting",{"2":{"28":1,"29":1}}],["reduces",{"2":{"31":1,"40":1}}],["reduce",{"2":{"29":1,"38":1,"53":1}}],["reddit",{"2":{"28":1,"50":1}}],["redis",{"2":{"28":1}}],["registration",{"2":{"127":1}}],["registers",{"2":{"30":1}}],["register",{"2":{"26":1,"28":1,"39":2}}],["regarding",{"2":{"40":1}}],["regulate",{"2":{"11":1}}],["regular",{"0":{"34":1},"2":{"2":1,"18":1,"40":1}}],["reusable",{"2":{"26":2,"90":1}}],["reuse",{"2":{"9":1}}],["renting",{"2":{"40":1}}],["renaming",{"2":{"34":1}}],["renamed",{"2":{"15":1}}],["renovate",{"2":{"19":2}}],["rendering",{"2":{"31":2,"40":2}}],["renderwhitespace",{"2":{"19":1}}],["render",{"2":{"8":1}}],["refactoring",{"0":{"34":1},"2":{"34":1}}],["refs",{"2":{"28":2}}],["reference",{"2":{"39":2}}],["referred",{"2":{"27":1}}],["refer",{"2":{"15":1}}],["ref",{"2":{"13":1,"24":7,"28":6,"30":2,"93":1}}],["refreshes",{"2":{"2":1}}],["refresh",{"2":{"2":1,"49":1}}],["recalculate",{"2":{"30":1}}],["recent",{"2":{"24":1,"118":1}}],["recentchange",{"2":{"19":1}}],["receive",{"2":{"40":2}}],["receives",{"2":{"3":1,"40":1}}],["receiving",{"2":{"2":1,"53":1}}],["recursive",{"2":{"7":1}}],["recognition",{"2":{"138":1}}],["recognized",{"2":{"50":1}}],["recommend",{"2":{"24":1}}],["recommended",{"2":{"7":1,"8":1,"18":1,"19":1,"24":1,"94":1,"121":1,"139":1}}],["reconnection",{"2":{"4":1}}],["re",{"2":{"2":2}}],["remain",{"2":{"28":1,"94":1}}],["remains",{"2":{"0":1}}],["remix",{"2":{"19":2}}],["removed",{"2":{"7":1,"138":1}}],["removed=`ls",{"2":{"7":1}}],["remove",{"2":{"7":2}}],["removes",{"2":{"2":1}}],["remote",{"2":{"7":12,"19":5}}],["resume",{"2":{"39":1}}],["result",{"0":{"122":1},"2":{"1":1,"2":1,"7":1,"19":1,"28":1,"84":1,"86":1,"89":1}}],["respect",{"2":{"28":1}}],["responsiveness",{"2":{"31":1}}],["responsible",{"2":{"2":1,"11":2,"28":2,"30":1,"31":1,"139":1}}],["responses",{"2":{"53":1}}],["response",{"2":{"3":4,"7":2}}],["resides",{"2":{"28":1}}],["resx",{"2":{"19":2}}],["resolutions",{"2":{"31":1,"98":1,"109":1}}],["resolver",{"2":{"18":1,"19":1}}],["resolve",{"2":{"18":2}}],["resource",{"0":{"48":1},"2":{"2":3,"3":6,"9":1,"15":3,"31":1}}],["resources",{"0":{"15":1},"1":{"16":1,"17":1},"2":{"1":1,"2":1,"3":1,"9":3,"15":7,"18":1,"26":1,"27":1,"39":1,"40":3,"121":1,"137":1,"138":1}}],["reserve",{"2":{"11":1}}],["resets",{"2":{"2":1}}],["restrictions",{"2":{"40":1}}],["rest",{"0":{"4":2,"93":1},"2":{"0":1,"4":2,"53":3,"63":1,"83":1,"93":1,"94":2}}],["rel=",{"2":{"61":1,"68":2,"75":1,"76":1}}],["reliably",{"2":{"19":1}}],["reliable",{"2":{"2":1,"7":1}}],["relevance",{"2":{"50":1}}],["relevant",{"2":{"1":1,"89":1}}],["releasetimeline",{"2":{"59":2,"72":2,"80":2}}],["releases",{"2":{"53":2,"55":6,"63":2}}],["release",{"0":{"52":1,"62":1,"63":1},"1":{"53":1,"63":1,"64":1,"65":1,"66":1},"2":{"19":4,"53":2,"55":3,"58":3,"59":4,"61":4,"68":6,"69":1,"70":1,"71":3,"72":5,"73":1,"75":3,"76":4,"77":1,"79":3,"80":4,"137":1}}],["releaserc",{"2":{"19":2}}],["reload",{"2":{"7":2,"127":1}}],["related",{"2":{"0":1,"2":1,"27":1,"28":1,"31":1}}],["reason",{"2":{"39":1}}],["reasons",{"2":{"38":1}}],["react",{"2":{"30":6,"39":2}}],["reactivity",{"2":{"28":1,"30":7,"118":1}}],["reactive",{"2":{"13":2,"24":9,"28":11,"30":11,"90":1}}],["reality",{"2":{"32":1}}],["realized",{"2":{"31":2}}],["really",{"2":{"17":1,"29":1}}],["real",{"2":{"1":1,"26":1,"29":1,"39":2}}],["readdir",{"2":{"31":1}}],["readable",{"2":{"24":1}}],["ready",{"2":{"19":1,"89":2,"90":2}}],["readme",{"2":{"19":2}}],["read",{"2":{"0":1,"28":2,"39":2,"40":1,"61":1,"95":1}}],["repetitive",{"2":{"30":1}}],["repeated",{"2":{"0":1}}],["represents",{"2":{"26":1}}],["representation",{"2":{"15":1}}],["replacing",{"2":{"24":1,"30":1}}],["replaced",{"2":{"24":1}}],["replacement",{"2":{"24":2,"63":1}}],["replace",{"2":{"0":1,"31":1,"33":1,"38":2,"111":1}}],["replit",{"2":{"19":1}}],["repositories",{"2":{"55":1,"63":2}}],["repository",{"0":{"85":1},"2":{"5":1,"7":4,"9":1,"19":1,"39":1,"55":1,"59":1,"63":2,"65":1,"80":1,"106":4,"107":1}}],["repo",{"2":{"19":1,"54":1,"55":2,"59":1,"68":1,"72":1,"75":1,"76":1,"80":1}}],["require",{"2":{"8":1,"10":1,"63":1}}],["requirements",{"2":{"2":1,"26":1,"38":1,"40":1}}],["required",{"2":{"1":1,"7":1,"53":1,"54":1}}],["requiresauth",{"2":{"11":1}}],["requires",{"2":{"0":1,"4":1,"8":1,"17":1,"18":1,"24":1,"26":1,"28":1,"118":1}}],["requested",{"2":{"2":1,"3":2}}],["requesting",{"2":{"2":1}}],["requests",{"0":{"52":1},"1":{"53":1},"2":{"0":3,"3":3,"4":1,"19":2,"31":1,"40":3,"53":3,"63":1,"94":1}}],["request",{"2":{"0":5,"2":2,"3":7,"40":2,"53":4}}],["og",{"2":{"131":6}}],["oop",{"2":{"28":1,"30":1,"31":3}}],["ok",{"2":{"24":2}}],["os",{"2":{"19":1,"31":1}}],["overriding",{"2":{"139":1}}],["override",{"2":{"56":1}}],["overrides",{"2":{"19":1}}],["overflow",{"2":{"98":1}}],["overwrite",{"2":{"83":3}}],["over",{"0":{"33":1},"2":{"28":1,"30":1,"31":1,"40":1,"93":1}}],["overhead",{"2":{"26":1}}],["overview",{"2":{"20":1,"26":1}}],["overuse",{"2":{"11":2}}],["obtained",{"2":{"118":1}}],["obvious",{"2":{"50":1}}],["obj",{"2":{"24":1}}],["objectives",{"0":{"90":1}}],["objective",{"2":{"50":1}}],["object",{"2":{"17":1,"24":5,"28":1,"30":2,"31":3,"39":1}}],["objects",{"2":{"3":2,"24":4,"28":1,"30":1}}],["observer",{"2":{"24":1}}],["obsolete",{"2":{"18":1,"20":1,"24":1,"28":1,"32":1,"38":1,"89":1}}],["old",{"2":{"7":1,"17":1,"24":2,"31":1,"39":1}}],["outdated",{"2":{"19":1,"39":1}}],["out",{"2":{"19":2,"20":1,"24":1,"28":1,"30":1,"39":2,"53":1,"69":1,"77":1,"90":1,"130":1}}],["outputs",{"2":{"31":1}}],["output",{"2":{"19":2,"31":2,"40":1}}],["outer",{"2":{"11":1}}],["outside",{"2":{"3":1,"28":1,"31":1}}],["our",{"2":{"7":2}}],["occurs",{"2":{"40":1}}],["occur",{"2":{"3":1}}],["oauth",{"2":{"2":2}}],["otherwise",{"2":{"24":1}}],["others",{"2":{"11":1,"26":2,"30":1,"127":1}}],["other",{"2":{"1":2,"3":1,"4":1,"5":1,"7":1,"8":2,"9":1,"15":2,"19":3,"24":1,"26":1,"27":1,"28":6,"30":2,"31":3,"37":1,"38":1,"40":3,"89":4,"90":1,"118":1,"127":3}}],["owner",{"2":{"54":1,"55":2,"59":1,"68":1,"72":1,"75":1,"76":1,"80":1}}],["own",{"2":{"1":2,"4":1,"7":3,"18":2,"24":1,"26":1,"27":1,"28":2,"32":1,"33":1,"38":2,"40":1,"111":1}}],["opinion",{"2":{"50":1}}],["optimise",{"2":{"53":2}}],["optimization",{"2":{"40":1}}],["optional",{"2":{"48":1,"59":1,"80":1}}],["option",{"2":{"2":1,"39":1,"53":6}}],["options=",{"2":{"59":1,"61":1,"72":1,"75":1,"76":1,"80":1}}],["options",{"0":{"1":1,"55":1,"123":1,"124":1},"1":{"124":1,"125":1,"126":1,"127":1},"2":{"2":1,"7":1,"8":1,"10":1,"18":1,"19":1,"24":2,"54":1,"59":4,"68":2,"72":4,"76":4,"80":4,"83":2,"90":3,"124":1}}],["operation",{"2":{"40":1}}],["operations",{"2":{"24":1}}],["open=",{"2":{"116":1}}],["opened",{"2":{"109":1}}],["opengraph",{"2":{"83":1}}],["opening",{"2":{"53":1}}],["openclose",{"2":{"19":1}}],["open",{"2":{"1":1,"39":2,"81":1,"83":1,"88":1,"97":1,"124":1,"131":1}}],["ontaskerrors",{"2":{"19":1}}],["onecolumnlayout",{"0":{"130":1}}],["ones",{"2":{"18":1,"39":1,"139":1}}],["one",{"2":{"2":1,"3":1,"7":2,"11":6,"15":2,"18":2,"24":1,"28":8,"29":1,"31":6,"38":1,"39":1,"40":1,"56":1,"89":2,"116":1,"119":1}}],["once",{"2":{"2":1,"24":1}}],["online",{"2":{"2":1,"8":1,"18":1,"19":1,"27":1,"40":1,"89":1,"90":1,"127":1}}],["onlyenabledextensions",{"2":{"19":1}}],["only",{"2":{"1":1,"2":1,"3":2,"5":1,"10":1,"11":1,"17":1,"19":5,"24":3,"28":3,"30":1,"31":1,"38":2,"39":2,"53":1,"76":2,"83":1,"86":2,"118":1,"121":1}}],["onmounted",{"2":{"0":3,"138":1}}],["on",{"2":{"0":2,"1":5,"2":9,"3":3,"4":5,"5":2,"7":9,"8":4,"9":1,"15":2,"18":2,"19":7,"24":4,"26":6,"28":10,"29":5,"30":8,"31":9,"35":2,"38":3,"39":13,"40":10,"49":2,"50":1,"53":1,"56":1,"63":2,"83":1,"89":3,"91":1,"98":1,"109":2,"110":1,"118":1,"127":2,"128":1,"136":1,"138":1}}],["org",{"2":{"94":1}}],["organismheader",{"2":{"26":1}}],["organismpokemoncard",{"2":{"26":1}}],["organisms",{"2":{"26":2}}],["organise",{"2":{"11":1}}],["organizing",{"2":{"8":1}}],["organized",{"2":{"26":1}}],["organizes",{"2":{"26":2}}],["organizeimports",{"2":{"19":1}}],["organize",{"2":{"4":1,"26":1,"30":1}}],["oreilly",{"2":{"39":1}}],["orientation",{"2":{"136":1}}],["oriented",{"2":{"30":2,"31":1}}],["originally",{"2":{"40":1}}],["origin",{"2":{"3":7}}],["ordinary",{"2":{"30":1}}],["orders",{"2":{"40":1}}],["order",{"2":{"2":1,"4":1,"26":1,"40":1}}],["oracle",{"2":{"1":1,"8":1}}],["or",{"0":{"4":1,"22":1},"2":{"0":4,"1":2,"2":1,"3":4,"4":1,"8":1,"9":1,"10":3,"15":3,"17":1,"18":3,"24":3,"26":5,"28":11,"30":4,"31":3,"32":1,"33":2,"38":4,"39":6,"40":3,"48":3,"55":4,"63":1,"76":2,"83":1,"86":1,"89":4,"91":1,"93":1,"118":1}}],["often",{"2":{"15":1,"24":1,"29":1,"31":1,"39":1,"40":1,"118":1}}],["offline",{"2":{"40":2}}],["off",{"2":{"19":2,"28":1,"30":1}}],["officially",{"2":{"28":1}}],["official",{"2":{"11":1,"19":1,"28":1,"50":1}}],["offers",{"2":{"30":1}}],["offer",{"2":{"1":1,"38":1,"39":1}}],["of",{"0":{"33":1,"48":1,"58":1},"2":{"0":6,"1":2,"2":12,"3":8,"4":5,"5":3,"7":13,"8":1,"9":2,"10":2,"11":1,"15":4,"17":1,"18":5,"19":9,"20":3,"24":20,"26":12,"27":4,"28":30,"29":7,"30":17,"31":10,"32":4,"33":1,"35":2,"37":2,"38":12,"39":11,"40":20,"48":1,"49":4,"50":5,"51":1,"53":4,"55":3,"56":1,"59":1,"63":3,"83":2,"85":1,"86":1,"88":1,"89":3,"90":6,"93":4,"94":2,"95":1,"97":1,"99":1,"106":2,"107":1,"108":1,"118":7,"119":3,"120":1,"124":3,"126":2,"127":6,"129":1,"130":1,"137":5,"138":1}}],["wc",{"2":{"77":1}}],["would",{"2":{"28":2,"39":1,"86":1}}],["won",{"2":{"26":1}}],["word",{"2":{"48":1}}],["wordseparators",{"2":{"19":1}}],["words",{"2":{"5":1,"28":2,"40":1,"89":1}}],["worth",{"2":{"39":1}}],["world",{"2":{"31":2,"38":1,"40":1}}],["workable",{"2":{"89":1}}],["workbox",{"2":{"40":2,"137":1}}],["workbench",{"2":{"19":11}}],["worker",{"0":{"137":1},"2":{"31":1,"40":3,"49":2,"83":1,"88":1,"97":1,"124":1,"135":1,"137":2}}],["workers",{"2":{"31":2}}],["worked",{"2":{"0":1}}],["workflow",{"2":{"7":2,"83":1,"124":1}}],["workflows",{"2":{"7":3}}],["workspace",{"2":{"19":3}}],["works",{"2":{"2":2,"18":1,"24":3,"26":1,"39":1,"40":2,"69":1,"77":1,"121":1}}],["workingissueformatscm",{"2":{"19":1}}],["working",{"2":{"1":1,"3":1,"5":2,"15":1,"19":1,"20":1,"21":1,"30":1,"49":2,"86":1}}],["work",{"2":{"0":1,"1":2,"2":1,"4":1,"7":1,"9":1,"11":1,"19":5,"26":3,"28":2,"29":1,"32":1,"39":2,"63":1,"135":1}}],["worsens",{"2":{"38":1}}],["worse",{"2":{"0":1}}],["www",{"2":{"3":1,"7":6,"111":1}}],["welcome",{"2":{"48":1,"81":1}}],["well",{"2":{"15":1,"19":2,"22":1,"24":1,"30":1,"31":1,"39":3,"40":2,"89":1,"90":1,"121":1}}],["went",{"2":{"38":1}}],["weight",{"2":{"38":1}}],["were",{"2":{"24":1,"27":1,"30":1,"38":1,"39":1,"40":1}}],["webapp",{"0":{"83":1,"87":1},"1":{"84":1,"88":1,"89":1},"2":{"81":2,"83":7,"85":2,"88":1,"106":2,"107":1,"136":1}}],["webdriverio",{"2":{"29":1}}],["webpack",{"2":{"18":4,"19":13}}],["webp",{"2":{"17":1}}],["webstorm",{"2":{"19":2}}],["website",{"2":{"7":3,"8":9,"9":1,"18":1,"40":2,"49":1,"88":1,"89":1,"90":2,"106":1,"131":1}}],["websocket",{"2":{"4":1}}],["websockets",{"2":{"0":1,"4":3,"39":1,"93":1}}],["webservers",{"2":{"19":1}}],["webserver",{"2":{"3":1,"8":2,"19":1,"40":1}}],["web",{"0":{"27":1,"61":1,"74":1,"84":1},"1":{"75":1,"76":1,"77":1},"2":{"3":3,"4":2,"19":1,"26":2,"29":1,"31":3,"38":2,"40":8,"61":1,"63":2,"76":2,"77":1,"86":2,"89":2,"90":3,"94":1,"136":1}}],["we",{"2":{"2":1,"7":4,"24":2,"31":7,"38":1,"39":1}}],["wrap",{"2":{"31":1,"38":1}}],["wrappers",{"0":{"33":1},"2":{"31":1,"33":1}}],["wrapper",{"2":{"0":1,"30":1,"40":2,"86":1}}],["written",{"2":{"1":1,"2":1,"29":1,"63":1}}],["writing",{"2":{"1":1,"2":1,"29":1,"39":1,"40":1}}],["writes",{"2":{"40":1}}],["write",{"2":{"1":2,"7":1,"28":2,"30":1,"39":1,"40":1}}],["walk",{"2":{"40":1}}],["water",{"2":{"39":1}}],["watch",{"2":{"30":1}}],["watchman",{"2":{"19":2}}],["waiting",{"2":{"26":1}}],["warm",{"2":{"19":1}}],["ways",{"2":{"39":1,"53":1}}],["way",{"2":{"2":3,"4":1,"7":2,"11":1,"18":1,"24":1,"26":1,"28":1,"38":2,"40":2,"48":1}}],["wants",{"2":{"1":1}}],["want",{"2":{"1":2,"10":1,"24":1,"31":2,"39":1,"106":1}}],["was",{"2":{"0":1,"24":1,"28":2,"30":2,"38":1,"40":5}}],["while",{"2":{"11":1}}],["which",{"2":{"0":1,"1":1,"2":1,"3":2,"4":1,"8":1,"14":1,"15":2,"18":1,"19":1,"24":2,"26":1,"27":1,"28":6,"30":4,"31":2,"32":1,"38":1,"40":5,"83":1,"89":2,"106":1,"139":2}}],["why",{"2":{"4":1,"19":1,"28":2,"30":2,"31":2,"38":2}}],["whole",{"2":{"38":2,"40":1}}],["whose",{"2":{"31":1}}],["whom",{"2":{"2":1}}],["who",{"2":{"2":1,"30":2,"39":1}}],["whether",{"2":{"2":2,"11":1,"28":1,"83":1}}],["when",{"0":{"123":1},"1":{"124":1,"125":1,"126":1,"127":1},"2":{"0":1,"1":1,"2":6,"3":2,"4":1,"7":2,"15":1,"19":2,"24":2,"26":1,"28":3,"30":3,"31":2,"38":1,"39":1,"40":9,"53":1,"55":1,"86":1,"90":1,"95":1,"98":1,"128":1,"130":1}}],["where",{"2":{"0":1,"1":1,"2":1,"8":1,"11":1,"17":1,"19":1,"28":2,"29":1,"30":4,"34":1,"40":2,"90":1}}],["whatever",{"2":{"38":1}}],["what",{"2":{"0":2,"1":2,"2":2,"3":1,"4":1,"5":1,"7":1,"11":1,"17":1,"19":1,"21":1,"27":1,"28":3,"29":1,"30":3,"31":1,"38":1,"39":2}}],["wireframe",{"2":{"90":1}}],["wise",{"2":{"27":1}}],["wide",{"2":{"89":1}}],["widgets",{"2":{"26":3,"28":1}}],["width",{"2":{"16":7,"130":2,"139":1}}],["windi",{"2":{"19":10}}],["window",{"2":{"7":1,"19":4,"24":3,"27":1,"76":2,"86":1,"111":2,"136":1}}],["within",{"2":{"24":1,"27":1}}],["without",{"2":{"1":2,"5":1,"10":2,"11":3,"19":1,"24":1,"26":3,"29":1,"30":2,"38":1,"39":1,"40":1,"83":1,"86":1,"89":1,"93":1,"119":1,"130":1,"135":1,"136":1}}],["with",{"2":{"0":2,"1":9,"2":7,"3":2,"4":4,"7":12,"8":3,"9":1,"10":1,"11":4,"15":2,"17":3,"18":3,"19":6,"20":1,"21":1,"24":3,"26":5,"27":1,"28":6,"29":3,"30":2,"31":10,"32":1,"33":1,"35":1,"38":2,"39":8,"40":11,"49":1,"51":1,"59":1,"63":1,"80":1,"83":2,"85":1,"86":2,"88":1,"89":3,"90":8,"91":1,"94":1,"95":2,"110":1,"111":1,"118":2,"121":1,"122":1,"124":1,"125":1,"127":1,"128":1,"137":1}}],["will",{"2":{"0":1,"1":3,"3":3,"4":2,"7":5,"8":1,"15":1,"17":1,"24":3,"28":1,"29":4,"30":3,"31":3,"32":1,"33":2,"35":1,"37":1,"38":1,"39":2,"40":3,"53":1,"83":3,"85":2,"90":1,"93":1,"137":1}}],["pwa",{"0":{"40":1,"135":1},"1":{"136":1,"137":1},"2":{"40":12,"49":1,"83":2,"88":2,"90":1,"124":1}}],["pwd",{"2":{"7":1}}],["pseudo",{"2":{"31":1}}],["psalm",{"2":{"19":1}}],["pc",{"2":{"19":2}}],["pdm",{"2":{"19":2}}],["pdf",{"2":{"15":1,"19":1}}],["python",{"2":{"39":1,"40":1}}],["pyproject",{"2":{"19":2}}],["pyrightconfig",{"2":{"19":2}}],["pieces",{"2":{"31":1}}],["pinia",{"2":{"28":14}}],["picked",{"2":{"19":1}}],["picture",{"2":{"17":1,"40":1}}],["pictures",{"2":{"15":1,"17":1,"40":1}}],["pipelines",{"2":{"19":2}}],["pm2",{"2":{"19":4}}],["pm",{"2":{"19":1}}],["px`",{"2":{"16":4}}],["pnp",{"2":{"19":2}}],["pnpmyarnnpm",{"2":{"58":1,"71":1,"79":1}}],["pnpm",{"2":{"7":12,"18":2,"19":6,"83":3,"84":2,"85":2,"88":1}}],["png`",{"2":{"15":1}}],["png",{"2":{"15":3,"17":3,"95":1}}],["p",{"2":{"7":1}}],["people",{"2":{"31":1}}],["pet",{"2":{"7":1}}],["perfect",{"2":{"30":1}}],["perfectly",{"2":{"30":1}}],["performant",{"2":{"30":1}}],["performance",{"2":{"24":1,"28":1,"32":1,"40":1}}],["performed",{"2":{"30":1}}],["perform",{"2":{"30":1}}],["percent",{"2":{"24":1,"118":1}}],["perspective",{"2":{"28":2}}],["persistentsessionreviveprocess",{"2":{"19":1}}],["person",{"2":{"2":1,"19":1,"39":2}}],["personal",{"2":{"2":1}}],["pereditorgroup",{"2":{"19":1}}],["per",{"2":{"8":1,"30":1,"31":1}}],["permissions",{"2":{"2":1,"7":1}}],["permission",{"2":{"2":1}}],["pba",{"2":{"2":1}}],["physically",{"2":{"31":1}}],["photo",{"2":{"2":1}}],["phpcs",{"2":{"19":2}}],["phpunit",{"2":{"19":1}}],["php",{"2":{"1":1,"19":2,"39":1,"40":2}}],["palettes",{"2":{"127":1}}],["paddingtop",{"2":{"55":1}}],["paid",{"2":{"39":1}}],["payment",{"2":{"31":1}}],["pascal",{"2":{"19":1}}],["passed",{"2":{"76":2}}],["passes",{"2":{"2":1}}],["pass",{"2":{"10":1,"28":3,"31":1}}],["passing",{"2":{"10":1,"11":1}}],["password",{"2":{"2":1,"28":1}}],["paths",{"2":{"18":2}}],["path",{"2":{"11":4,"16":1,"18":3}}],["pattern",{"2":{"11":1,"24":1,"28":2,"30":1}}],["patterns",{"0":{"9":1},"1":{"10":1,"11":1,"12":1,"13":1,"14":1},"2":{"19":1,"38":1,"39":2,"50":1}}],["packages",{"2":{"18":1,"19":2,"90":1}}],["package",{"0":{"58":1},"2":{"9":1,"18":1,"19":8,"20":1,"24":1,"32":1,"53":1,"86":2,"121":2}}],["panel",{"2":{"9":1,"129":1}}],["pagepokemondetail",{"2":{"26":1}}],["pagehome",{"2":{"26":1}}],["page",{"2":{"3":6,"15":1,"29":1,"40":8,"53":1,"55":1,"63":1,"68":1,"69":1,"75":1,"77":1,"116":1}}],["pagespeed",{"2":{"40":2}}],["pages",{"0":{"105":1},"1":{"106":1,"107":1},"2":{"3":3,"5":1,"7":11,"8":3,"11":1,"26":5,"38":1,"39":1,"40":2,"83":1,"106":6,"124":2}}],["parents",{"2":{"56":1}}],["parallax",{"2":{"66":1}}],["parallel",{"2":{"31":1}}],["parallelization",{"2":{"31":1}}],["paragraphs",{"2":{"39":1,"118":1}}],["parameter",{"2":{"83":1,"107":1,"118":1}}],["parameters",{"2":{"7":1,"83":1,"90":1,"91":1,"127":1}}],["params",{"2":{"0":2,"94":1}}],["participation",{"0":{"81":1}}],["particular",{"2":{"63":1,"118":1}}],["partially",{"2":{"28":3,"30":2}}],["part",{"2":{"24":1,"26":4,"28":1,"39":2,"124":2}}],["party",{"0":{"33":1},"2":{"2":1,"3":5,"4":1,"28":1,"32":1,"40":1,"86":2,"137":1}}],["parts",{"2":{"2":1,"26":1,"55":1,"127":1}}],["pr",{"2":{"48":1}}],["practical",{"2":{"39":1}}],["practice",{"2":{"24":1,"28":2,"89":1}}],["practices",{"0":{"11":1},"1":{"12":1,"13":1,"14":1},"2":{"2":1,"38":1,"39":5,"49":1,"50":1,"89":2,"90":2}}],["price",{"2":{"40":1}}],["priority",{"2":{"31":2}}],["prioritize",{"2":{"31":1}}],["primitive",{"2":{"28":1}}],["primitives",{"2":{"24":2}}],["primevue",{"2":{"20":1}}],["private",{"2":{"7":6,"9":1,"28":1,"55":1,"63":1}}],["print",{"2":{"24":1}}],["printwidth",{"2":{"19":1}}],["printf",{"2":{"7":1}}],["printed",{"2":{"3":1}}],["principle",{"2":{"3":1,"30":1}}],["preserving",{"2":{"118":1}}],["presence",{"2":{"29":1,"30":1}}],["presentation",{"2":{"38":1}}],["present",{"2":{"28":1}}],["preprocessor",{"2":{"86":1}}],["preparing",{"2":{"26":1}}],["precisely",{"2":{"40":1}}],["prerenderer",{"2":{"40":1}}],["pre",{"2":{"39":1,"40":1}}],["prevent",{"2":{"98":1}}],["prevalent",{"2":{"39":1}}],["prevalence",{"2":{"30":1}}],["previous",{"2":{"39":1}}],["previously",{"2":{"7":1}}],["preview",{"2":{"19":1}}],["prefer",{"2":{"26":1}}],["preferredtagnamecase",{"2":{"19":1}}],["pretentious",{"2":{"24":1}}],["prettier",{"2":{"19":14}}],["pretty",{"2":{"1":1,"121":2}}],["preloader",{"2":{"11":2,"126":1}}],["proven",{"2":{"49":1,"89":1}}],["providing",{"2":{"11":1}}],["provides",{"2":{"3":1,"26":1}}],["provider",{"2":{"1":2,"31":1}}],["providers",{"2":{"1":1,"4":1,"8":3,"26":1,"39":1,"127":1}}],["provided",{"2":{"1":2,"31":1,"129":1}}],["provide",{"2":{"1":3,"8":2,"9":1,"10":1,"11":2,"28":3,"38":1,"53":1}}],["progressive",{"2":{"40":1}}],["programmatically",{"2":{"24":1}}],["programmers",{"2":{"30":2,"50":1}}],["programmer",{"2":{"24":1,"30":2,"31":3}}],["programming",{"2":{"1":2,"30":3,"39":2}}],["programs",{"2":{"19":1}}],["program",{"2":{"3":1,"24":1,"30":2,"31":1}}],["professional",{"2":{"34":1}}],["probability",{"2":{"29":1}}],["probably",{"2":{"27":1,"30":1,"40":1}}],["problems",{"2":{"3":2,"28":1,"40":1}}],["problem",{"2":{"1":1,"7":1,"15":1,"28":1,"39":1,"40":1}}],["pros",{"2":{"26":1,"28":1,"38":2}}],["proof",{"2":{"26":2}}],["procfile",{"2":{"19":2}}],["processed",{"2":{"39":1}}],["processes",{"2":{"26":1}}],["processing",{"2":{"31":1}}],["processors",{"2":{"31":1}}],["processor",{"2":{"19":1,"31":1}}],["process",{"2":{"5":1,"7":1,"9":1,"15":1,"29":1,"40":1}}],["proj",{"2":{"19":2}}],["projectname",{"2":{"83":1}}],["projects",{"0":{"26":1},"2":{"7":1,"9":2,"18":1,"26":3,"29":2,"30":1,"38":1,"39":1,"63":1,"81":1}}],["project",{"0":{"25":1,"37":1,"59":1,"78":1,"81":1},"1":{"26":1,"27":1,"79":1,"80":1},"2":{"1":1,"5":1,"7":10,"8":1,"9":3,"18":3,"19":1,"26":4,"27":1,"28":1,"31":1,"35":1,"37":1,"38":1,"39":1,"49":2,"53":1,"63":1,"83":6,"84":1,"88":2,"89":1,"106":1}}],["proposed",{"2":{"40":1}}],["property=",{"2":{"131":7}}],["properties",{"2":{"40":1}}],["proper",{"2":{"38":1}}],["prop",{"2":{"10":1,"11":2,"28":1}}],["props",{"2":{"10":1,"11":1,"14":1,"16":11,"28":2,"76":1}}],["prod",{"2":{"7":5,"61":1,"75":1,"76":1}}],["productive",{"2":{"19":1}}],["production",{"2":{"18":1,"29":1}}],["productid",{"2":{"14":1}}],["product",{"2":{"5":1,"14":2,"26":1,"27":2,"39":1,"40":1}}],["products",{"2":{"0":3,"14":1}}],["proxy",{"2":{"3":2,"4":1,"24":2,"30":2,"53":1}}],["protocols",{"0":{"4":1},"2":{"4":1,"39":1}}],["protocol",{"2":{"3":1,"8":1,"94":1}}],["protect",{"2":{"3":1}}],["promises",{"2":{"31":2,"39":1}}],["promise",{"2":{"0":1,"93":2}}],["pulls",{"2":{"55":3}}],["pull",{"0":{"52":1},"1":{"53":1},"2":{"53":3,"63":1}}],["pullapprove",{"2":{"19":2}}],["pure",{"2":{"35":1,"38":1,"86":1}}],["purpose",{"2":{"24":1,"28":1,"31":1,"40":1}}],["purposes",{"2":{"7":1}}],["pug",{"2":{"24":1}}],["pugtools",{"2":{"19":1}}],["puppeteer",{"2":{"19":10}}],["publishing",{"2":{"83":1}}],["public",{"2":{"1":1,"15":4,"39":1,"63":1}}],["pubspec",{"2":{"19":3}}],["pubxml",{"2":{"19":2}}],["push",{"2":{"5":1,"7":4,"30":1,"111":1}}],["put",{"2":{"7":1,"15":2,"19":1,"27":1,"28":2,"39":1,"107":1}}],["puts",{"2":{"2":1}}],["putting",{"2":{"1":1}}],["pops",{"2":{"130":1}}],["populated",{"2":{"28":1}}],["popular",{"2":{"1":1,"7":1,"18":1,"19":1,"24":1,"38":1,"40":1,"90":2,"118":1,"127":1}}],["popups",{"2":{"24":1}}],["polymorphism",{"2":{"31":1}}],["policy",{"2":{"2":2}}],["potentially",{"2":{"26":1}}],["potential",{"2":{"26":2}}],["poorly",{"2":{"24":1}}],["portfolio",{"2":{"88":1,"89":1,"90":1}}],["port",{"2":{"3":1}}],["portal",{"2":{"2":1}}],["powerful",{"2":{"11":1}}],["power",{"2":{"2":1,"28":1,"31":1}}],["position",{"2":{"30":1,"89":1}}],["post",{"2":{"26":1}}],["postcss",{"2":{"19":10}}],["postcssrc",{"2":{"19":10}}],["postman",{"2":{"3":1,"19":1}}],["postgresql",{"2":{"1":1}}],["possibilities",{"2":{"19":1}}],["possibility",{"2":{"2":1,"29":1,"32":1,"90":2}}],["possible",{"0":{"26":1},"2":{"2":2,"24":1,"28":1,"30":3,"31":1,"38":1,"40":2,"83":1,"86":1,"132":1,"139":1}}],["possibly",{"2":{"1":1,"7":1}}],["pokemonmodel",{"2":{"26":1}}],["pokemonservice",{"2":{"26":1}}],["pokemonstatswidget",{"2":{"26":1}}],["pokemonstore",{"2":{"26":1}}],["pokemontests",{"2":{"26":1}}],["pokemonthumbnail",{"2":{"26":1}}],["pokemon",{"2":{"26":3}}],["pokemondetailpage",{"2":{"26":2}}],["pokemondetailtemplate",{"2":{"26":1}}],["pokemondetail",{"2":{"26":1}}],["pokemoncard",{"2":{"26":2}}],["pokemonlisttemplate",{"2":{"26":1}}],["pokemonlist",{"2":{"26":2}}],["poke",{"2":{"1":1}}],["points",{"2":{"50":1}}],["point",{"2":{"0":1,"28":1,"40":2,"49":1,"53":1}}],["pleasant",{"2":{"38":1}}],["please",{"2":{"19":1,"26":1}}],["plenty",{"2":{"1":1}}],["plugging",{"2":{"86":1}}],["plugged",{"2":{"63":2}}],["plug",{"2":{"32":2}}],["plugin",{"2":{"18":2,"19":1,"40":3,"97":3}}],["plugins",{"2":{"18":4,"19":1,"26":3,"28":1,"125":1}}],["plus",{"2":{"2":1,"7":1,"28":1}}],["planned",{"0":{"127":1},"2":{"90":1}}],["planning",{"2":{"26":1}}],["plans",{"2":{"1":2,"8":2}}],["play",{"2":{"39":1}}],["plays",{"2":{"30":1}}],["played",{"2":{"28":1,"39":1}}],["playground",{"2":{"19":1}}],["playwright",{"2":{"19":10}}],["placing",{"2":{"1":1,"40":1}}],["places",{"2":{"40":1}}],["placed",{"2":{"8":1,"15":2}}],["placeholder",{"2":{"1":1}}],["place",{"2":{"0":1,"24":1,"30":1}}],["vwa",{"2":{"130":1,"139":11}}],["vp",{"2":{"73":9}}],["vulnerability",{"2":{"32":1}}],["vulnerabilities",{"2":{"28":1}}],["vuesence",{"2":{"55":1,"59":1,"68":1,"72":1,"76":1,"80":1,"85":1}}],["vuefaq",{"2":{"51":1}}],["vuetify",{"2":{"38":1}}],["vuejs",{"2":{"28":1,"50":4,"75":1}}],["vuex",{"2":{"28":6}}],["vue",{"0":{"12":1,"25":1,"26":1,"27":1,"28":1,"39":1,"42":1,"59":1,"78":1,"80":1,"83":1,"87":1},"1":{"26":1,"27":1,"79":1,"80":1,"84":1,"88":1,"89":1},"2":{"7":1,"10":1,"11":2,"12":1,"13":1,"14":2,"15":1,"16":2,"18":4,"19":15,"22":1,"23":1,"24":7,"26":47,"27":2,"28":12,"29":1,"30":17,"38":2,"39":20,"40":1,"42":1,"48":1,"50":2,"56":1,"59":2,"61":2,"63":2,"72":1,"75":2,"76":2,"80":1,"81":2,"83":7,"84":1,"85":2,"86":3,"88":3,"89":4,"90":3,"91":2,"95":2,"106":2,"107":1,"120":1,"121":2,"129":1,"138":1}}],["vetur",{"2":{"19":2}}],["verdana",{"2":{"56":1}}],["vertical",{"2":{"55":1}}],["verified",{"2":{"40":1,"50":1}}],["verifies",{"2":{"2":2}}],["vercel",{"2":{"8":1,"19":2,"127":1}}],["versionrc",{"2":{"19":2}}],["versions",{"2":{"14":1,"19":3}}],["versioning",{"2":{"9":1,"137":1}}],["version",{"2":{"7":8,"19":3,"39":1,"40":1,"93":1,"127":1,"137":2}}],["very",{"2":{"1":2,"2":3,"8":1,"19":3,"24":4,"28":1,"29":1,"37":1,"38":1,"39":2,"40":3,"48":1,"94":1,"118":3}}],["vbproj",{"2":{"19":1}}],["vb",{"2":{"19":6}}],["volar",{"2":{"19":4}}],["v",{"2":{"16":3}}],["vs",{"2":{"9":1,"19":7,"30":1,"121":1}}],["vscode",{"2":{"7":1,"19":9}}],["v4",{"2":{"7":5}}],["v2",{"2":{"7":3}}],["v3",{"2":{"7":4}}],["vars",{"2":{"139":1}}],["various",{"2":{"39":1,"127":1}}],["variations",{"2":{"90":1}}],["variant",{"2":{"4":1,"24":1}}],["variants",{"2":{"2":1,"126":1,"127":3,"132":1}}],["variables",{"0":{"73":1},"2":{"24":1,"28":1,"30":2,"56":1,"73":2,"139":2}}],["variable",{"2":{"2":1,"24":2,"28":3,"30":6,"76":1,"130":1}}],["var",{"2":{"7":4,"73":9}}],["validation",{"2":{"28":1}}],["validators",{"2":{"26":3}}],["validate",{"2":{"19":1}}],["valid",{"2":{"2":2}}],["values",{"2":{"56":1,"76":1,"83":1,"131":1}}],["value",{"2":{"0":2,"7":1,"14":1,"19":1,"24":1,"26":1,"28":1,"30":4,"93":1,"111":1,"120":1,"137":1}}],["visual",{"2":{"30":1,"49":1}}],["visualize",{"2":{"59":1,"63":1,"80":1}}],["visualizer",{"2":{"18":4}}],["visualization",{"0":{"63":1},"2":{"28":1,"30":1,"38":1}}],["visuals",{"2":{"19":1}}],["visible",{"2":{"2":1,"19":1}}],["videos",{"2":{"39":3}}],["video",{"2":{"15":1,"39":1,"40":1}}],["virtual",{"2":{"1":1,"8":1,"24":1,"39":1}}],["views",{"2":{"11":1,"26":4,"27":1}}],["view",{"2":{"0":1,"11":3,"28":3,"30":2,"49":1,"90":1}}],["via",{"0":{"83":1},"1":{"84":1},"2":{"0":1,"1":1,"2":3,"4":1,"7":1,"8":1,"11":1,"15":2,"19":1,"24":2,"28":1,"63":1,"65":1,"76":3,"91":1,"97":1,"129":1,"139":1}}],["vitest",{"2":{"19":10,"29":1}}],["vitepress",{"0":{"60":1,"70":1},"1":{"71":1,"72":1,"73":1},"2":{"7":1,"37":1,"39":1,"63":2,"70":1,"72":1,"73":2,"89":1}}],["vite",{"0":{"107":1},"2":{"0":1,"3":1,"15":1,"16":1,"18":13,"19":3,"40":3,"50":1,"75":1,"86":1,"94":1,"97":2,"107":1}}],["effective",{"2":{"90":1}}],["effect",{"2":{"31":1}}],["effort",{"2":{"31":1}}],["efficiency",{"2":{"24":1}}],["efficiently",{"2":{"30":1,"31":2,"89":1,"90":1}}],["efficient",{"2":{"24":1,"30":1,"40":1,"86":2}}],["e2e2e3",{"2":{"56":1,"139":2}}],["e2e",{"2":{"29":5}}],["empty",{"2":{"76":1,"89":1}}],["employing",{"2":{"26":1}}],["embeds",{"2":{"63":1}}],["embla",{"2":{"22":1}}],["email",{"2":{"51":1}}],["emits",{"2":{"28":1}}],["emmet",{"2":{"19":2}}],["eex",{"2":{"19":1}}],["eol",{"2":{"19":1}}],["education",{"2":{"136":1}}],["edited",{"2":{"136":1}}],["edit",{"2":{"48":1}}],["editorconfig",{"2":{"19":2}}],["editortab",{"2":{"19":1}}],["editorgroup",{"2":{"19":1}}],["editor",{"2":{"19":31}}],["edge",{"2":{"1":2}}],["element",{"2":{"30":1,"49":1,"91":1}}],["elements",{"2":{"2":1,"5":1,"24":4,"26":1,"29":1,"30":1,"36":1,"40":2}}],["else",{"2":{"16":1,"19":1,"39":1}}],["e88a22df",{"2":{"15":1}}],["ecosystem",{"2":{"19":1,"24":1,"90":1}}],["economical",{"2":{"1":1}}],["echo",{"2":{"7":8}}],["established",{"2":{"89":1}}],["es",{"2":{"68":1}}],["esm",{"2":{"68":2,"69":1}}],["es6",{"2":{"24":1,"30":1}}],["esbenp",{"2":{"19":4}}],["esbuild",{"2":{"18":1}}],["eslint",{"2":{"18":3,"19":17,"39":1,"86":2}}],["esnext",{"2":{"18":1}}],["especially",{"2":{"4":1,"29":1,"90":1}}],["essence",{"2":{"2":1}}],["either",{"2":{"2":1,"15":1,"38":1,"76":1}}],["eager",{"2":{"17":2}}],["earlier",{"2":{"14":1,"19":1}}],["easy",{"2":{"8":1,"11":2,"15":1,"26":1,"39":1,"86":1}}],["easingthemes",{"2":{"7":2}}],["easier",{"2":{"7":1,"26":1,"30":2,"33":2,"38":1,"40":1}}],["easiest",{"2":{"1":1,"39":1}}],["easily",{"2":{"0":1,"39":1,"93":1}}],["each",{"2":{"2":4,"7":3,"9":1,"18":2,"19":1,"26":7,"27":4,"28":3,"30":2,"40":1,"90":1,"91":1,"93":1,"137":1}}],["e",{"2":{"1":1,"10":1,"15":1,"26":3,"28":1,"30":1,"40":1,"86":1}}],["etc",{"2":{"1":1,"18":1,"27":1,"29":1,"36":1,"40":1,"49":1,"88":2,"89":1,"90":4,"97":1,"139":1}}],["enhance",{"2":{"138":1}}],["enhancing",{"2":{"26":1}}],["enough",{"2":{"40":1,"89":1}}],["english",{"2":{"39":1}}],["engines",{"2":{"40":1}}],["engine",{"2":{"24":1,"39":1,"40":1}}],["engineer",{"2":{"5":1,"51":1}}],["entering",{"2":{"83":1}}],["enter",{"2":{"48":1}}],["enters",{"2":{"30":1}}],["entrance",{"2":{"40":1}}],["entry",{"2":{"30":1,"40":1}}],["entity",{"2":{"28":3}}],["entities",{"2":{"26":4,"30":1}}],["entirely",{"2":{"138":1}}],["entire",{"2":{"17":1,"24":1,"28":1,"118":1}}],["encapsulated",{"2":{"26":1,"30":1}}],["encapsulates",{"2":{"26":2,"30":1}}],["encoded",{"2":{"15":1}}],["ensures",{"2":{"26":1}}],["en",{"2":{"19":3}}],["enablesmartcommit",{"2":{"19":1}}],["enable",{"2":{"19":4,"24":1,"90":2}}],["enabled",{"2":{"2":1,"19":9,"24":1,"85":1}}],["endpoint",{"2":{"1":2}}],["endpoints",{"2":{"1":2}}],["end",{"2":{"1":5,"2":1,"4":1,"5":1,"19":1,"26":1,"29":4,"30":1,"31":1,"40":1,"90":1}}],["envrc",{"2":{"19":12}}],["envs",{"2":{"7":2}}],["environment",{"2":{"7":3,"19":1,"89":1}}],["environments",{"2":{"7":1,"8":1}}],["env",{"2":{"0":1,"7":26,"19":38,"94":1}}],["evan",{"2":{"30":1}}],["evaluate",{"2":{"11":1}}],["evolving",{"2":{"30":1}}],["evolution",{"2":{"26":1,"38":1}}],["ever",{"2":{"10":1}}],["everyone",{"2":{"40":1}}],["everybody",{"2":{"28":1}}],["everything",{"2":{"19":1,"24":2,"30":1,"49":1,"85":1}}],["every",{"2":{"0":1}}],["events",{"2":{"28":1}}],["event",{"2":{"4":1,"19":1,"28":1,"31":1}}],["even",{"2":{"2":1,"3":1,"17":1,"24":1,"28":2,"30":1,"38":1,"39":3,"118":1}}],["evidence",{"2":{"0":1}}],["errors",{"2":{"19":1}}],["error",{"2":{"0":1,"3":1,"7":1}}],["exact",{"2":{"31":1}}],["examples",{"2":{"39":1,"90":1}}],["example",{"2":{"0":2,"1":5,"2":5,"3":2,"5":2,"7":1,"9":1,"11":3,"14":1,"17":2,"19":2,"27":2,"28":4,"30":4,"31":2,"32":1,"33":1,"36":1,"40":1,"120":1,"130":1}}],["existing",{"2":{"39":1,"83":1}}],["exist",{"2":{"30":1}}],["exiting",{"2":{"7":1}}],["excellent",{"2":{"39":1}}],["exceptional",{"2":{"40":1}}],["except",{"2":{"28":1}}],["excessive",{"2":{"27":1}}],["exclude",{"2":{"7":1,"19":1}}],["execution",{"2":{"24":1,"31":2}}],["executes",{"2":{"40":1}}],["execute",{"2":{"7":1,"31":1}}],["executed",{"2":{"1":1,"11":1,"31":4}}],["exs",{"2":{"19":5}}],["extreme",{"2":{"39":1}}],["extractor",{"2":{"19":11}}],["extent",{"2":{"55":1}}],["extensibility",{"2":{"38":1}}],["extension",{"2":{"19":1,"30":1,"121":2}}],["extensions",{"0":{"121":1},"2":{"3":1,"19":6,"95":1,"121":1}}],["extending",{"2":{"26":1}}],["extend",{"2":{"18":1}}],["external",{"2":{"0":1,"28":1,"31":1}}],["ex",{"2":{"19":1}}],["express",{"2":{"40":1}}],["experimentally",{"2":{"55":1}}],["experiment",{"2":{"39":1}}],["experimenting",{"2":{"30":1}}],["experience",{"2":{"4":1,"39":3,"40":1,"49":4,"51":1,"138":1}}],["experienced",{"2":{"4":1,"39":2,"50":2,"89":1,"90":1}}],["expediency",{"2":{"29":1}}],["expanding",{"2":{"127":1}}],["expand",{"2":{"19":1,"39":1}}],["expandmode",{"2":{"19":1}}],["explained",{"2":{"39":1}}],["explorer",{"2":{"19":6}}],["explicitly",{"2":{"86":1,"89":1}}],["explicit",{"2":{"0":1}}],["expires",{"2":{"2":2}}],["expired",{"2":{"2":1}}],["exports",{"2":{"17":1}}],["export",{"2":{"0":2,"11":1,"13":1,"17":1,"18":1,"28":2,"94":2}}],["href=",{"2":{"61":1,"68":2,"75":1,"76":1}}],["hurry",{"2":{"32":1}}],["huskyrc",{"2":{"19":2}}],["huge",{"2":{"17":1}}],["hxx",{"2":{"19":3}}],["hpp",{"2":{"19":3}}],["hmr",{"2":{"18":1}}],["h",{"2":{"7":1,"19":4}}],["html5",{"2":{"36":1,"44":1,"86":1}}],["htmlnanorc",{"2":{"19":20}}],["html=",{"2":{"16":1}}],["html",{"0":{"44":1,"97":1},"2":{"3":1,"7":2,"8":1,"15":2,"19":6,"30":3,"39":1,"40":10,"61":1,"63":1,"68":2,"69":1,"75":2,"76":1,"77":1,"91":1,"97":2,"111":2,"131":2,"138":1}}],["https",{"2":{"3":6,"8":1,"19":2,"40":1,"61":3,"68":3,"75":3,"76":3,"85":1,"93":1,"94":1,"106":1,"111":1}}],["httponly",{"2":{"2":3}}],["http",{"2":{"0":11,"1":1,"3":3,"15":1,"93":5,"94":4}}],["hello",{"2":{"118":1}}],["helpers",{"2":{"26":1}}],["helpful",{"0":{"21":1},"1":{"22":1,"23":1,"24":1}}],["helps",{"2":{"17":1,"39":1,"89":1}}],["help",{"2":{"3":1,"19":1,"38":1,"39":3}}],["heavy",{"2":{"40":1}}],["heavyweight",{"2":{"20":1,"24":1,"118":1}}],["heading",{"2":{"106":1}}],["head>",{"2":{"68":2}}],["headless",{"2":{"29":1,"38":1,"90":1}}],["header>",{"2":{"95":1,"116":2}}],["header",{"2":{"27":1,"36":1,"83":2,"90":2,"95":2,"113":1,"114":1,"115":1,"124":1,"127":1,"128":1,"130":1}}],["headers",{"0":{"112":1},"1":{"113":1,"114":1,"115":1,"116":1},"2":{"3":1,"94":1,"112":1,"116":1}}],["heidisql",{"2":{"19":1}}],["height",{"2":{"16":7}}],["heex",{"2":{"19":1}}],["hexcolorlength",{"2":{"19":1}}],["heroku",{"2":{"8":1,"127":1}}],["here",{"2":{"1":1,"4":1,"20":1,"26":1,"28":3,"39":1,"69":1,"73":1,"77":1,"119":1}}],["he",{"2":{"2":1,"28":1,"30":1}}],["hide=",{"2":{"116":1}}],["hidemergecommits",{"2":{"55":1}}],["hidecommitusername",{"2":{"55":1}}],["hidepullusername",{"2":{"55":1}}],["hidden",{"2":{"0":1,"98":1,"128":1}}],["highly",{"2":{"29":1}}],["highlightmodifiedtabs",{"2":{"19":1}}],["high",{"2":{"26":2,"86":1}}],["hierarchize",{"2":{"30":1}}],["hierarchical",{"2":{"26":1,"38":1}}],["hierarchy",{"2":{"26":1,"27":1,"28":2}}],["hints",{"0":{"21":1},"1":{"22":1,"23":1,"24":1}}],["himself",{"2":{"28":1,"38":1,"89":1}}],["him",{"2":{"2":1,"5":1,"31":2}}],["historically",{"2":{"28":1}}],["history",{"2":{"19":5}}],["histoire",{"2":{"19":10}}],["his",{"2":{"1":1,"2":2,"19":1,"31":1}}],["hotel",{"2":{"40":1}}],["horizons",{"2":{"39":1}}],["hood",{"2":{"30":1,"39":1}}],["hooks",{"2":{"19":4}}],["hook",{"2":{"0":2}}],["holding",{"2":{"28":2}}],["home",{"2":{"26":2,"40":1,"83":1,"136":1}}],["hoppscotch",{"2":{"19":1}}],["houdini",{"2":{"19":1}}],["hover",{"2":{"19":1}}],["hosts",{"2":{"28":1}}],["hosted",{"2":{"8":1}}],["hosting",{"0":{"8":1},"2":{"8":3,"90":1}}],["host",{"2":{"3":1,"7":10,"8":2}}],["however",{"2":{"20":1,"26":1,"28":2,"121":1}}],["how",{"2":{"1":3,"2":1,"4":1,"9":1,"11":2,"15":1,"17":1,"18":3,"19":1,"24":1,"26":1,"28":3,"38":1,"39":3,"40":2,"69":1,"77":1}}],["half",{"2":{"119":1}}],["hack",{"2":{"98":1}}],["hamburger",{"2":{"95":1,"109":1,"128":1,"130":1}}],["harmful",{"2":{"39":1}}],["hardware",{"2":{"40":2}}],["hard",{"2":{"18":1}}],["happen",{"2":{"28":1}}],["happened",{"2":{"28":1}}],["had",{"2":{"24":1,"28":1}}],["handling",{"2":{"31":1}}],["handle",{"2":{"39":1,"40":1}}],["handles",{"2":{"26":2,"30":1}}],["handled",{"2":{"0":1,"40":1}}],["handy",{"0":{"20":1},"2":{"19":1,"37":1}}],["hand",{"2":{"19":1,"28":1,"89":2}}],["hash",{"2":{"15":1}}],["hassles",{"2":{"2":1}}],["has",{"2":{"1":1,"2":7,"4":1,"7":2,"18":1,"24":3,"27":1,"28":5,"30":3,"31":1,"40":1,"63":1,"106":1,"118":2,"121":1}}],["have",{"2":{"0":1,"1":1,"2":3,"7":1,"10":1,"11":1,"15":1,"19":2,"24":3,"28":4,"30":2,"31":4,"32":1,"38":2,"39":1,"40":1,"55":1,"89":1,"107":2,"138":1}}],["uri",{"2":{"94":1}}],["url",{"2":{"0":1,"15":2,"17":1,"53":2,"55":6,"94":1,"131":2,"136":1}}],["umd",{"2":{"61":1,"75":1,"76":1}}],["ux",{"2":{"40":2,"49":1,"86":1,"110":1,"124":1,"137":1}}],["uis",{"2":{"26":1,"30":1}}],["uikit",{"2":{"26":1}}],["ui",{"0":{"33":1,"38":1},"2":{"18":1,"20":2,"26":3,"29":1,"30":2,"31":3,"33":1,"35":1,"38":9,"49":1,"56":1,"86":1,"90":1,"95":1,"114":1,"115":1}}],["u",{"2":{"11":1}}],["utility",{"2":{"28":1,"95":1}}],["utilities",{"0":{"33":1},"2":{"9":1,"26":1,"27":1,"33":1}}],["utils",{"2":{"0":3,"16":2,"26":3,"27":1,"93":3,"94":5,"95":2,"97":1,"120":1}}],["upper",{"2":{"65":1,"91":1}}],["upgrade",{"2":{"38":1}}],["upgrading",{"2":{"31":1,"40":1}}],["up",{"2":{"7":1,"18":1,"19":3,"24":1,"26":1,"29":1,"31":2,"38":3,"39":1,"89":1,"94":1,"118":1}}],["updating",{"2":{"7":1,"30":1}}],["updates",{"2":{"30":1}}],["updated",{"2":{"26":1,"29":1,"30":2}}],["update",{"2":{"7":3,"19":1,"26":1}}],["upload",{"2":{"7":3,"39":1}}],["ubuntu",{"2":{"7":3,"83":1}}],["usability",{"2":{"49":1}}],["usage",{"0":{"59":1,"68":1,"72":1,"75":1,"120":1},"2":{"24":1,"31":1,"61":1}}],["usual",{"2":{"30":1}}],["usually",{"2":{"4":1,"11":1,"24":1,"28":2,"29":1,"30":1,"31":1,"39":1,"40":1,"89":1,"118":1}}],["us",{"2":{"19":1}}],["using",{"2":{"1":2,"3":1,"4":1,"7":1,"8":1,"9":1,"15":1,"18":2,"26":2,"28":3,"30":1,"38":1,"40":2,"48":1,"49":1,"63":1,"68":1,"90":1,"126":1}}],["usetouchswipe",{"2":{"110":1}}],["uselessly",{"2":{"39":1}}],["useless",{"2":{"39":1,"121":1}}],["usenewswidget",{"2":{"30":1}}],["usei18nlight",{"0":{"119":1},"2":{"120":2}}],["usei18n",{"2":{"27":1,"30":1,"120":4}}],["useid",{"2":{"14":3}}],["usepokemon",{"2":{"26":2}}],["useappconfig",{"2":{"95":3}}],["useapploader",{"0":{"13":1},"2":{"12":3,"13":1,"14":3}}],["useauthstore",{"2":{"28":1}}],["useauthservice",{"2":{"28":1}}],["useauth",{"2":{"0":4,"28":1}}],["usescreenwidth",{"2":{"91":6}}],["usescreensize",{"2":{"30":1}}],["useshoppingcart",{"2":{"30":1}}],["uses",{"2":{"7":11,"14":1,"16":1,"18":1,"24":3,"30":1,"56":1,"86":2,"95":2,"106":1}}],["usefulness",{"2":{"29":1}}],["useful",{"2":{"5":1,"7":1,"19":4,"26":1,"28":1,"29":1,"31":1,"39":3,"40":2,"85":1,"121":1,"127":1}}],["used",{"2":{"2":3,"3":3,"7":2,"18":2,"24":2,"27":1,"28":2,"30":3,"31":1,"39":1,"50":1,"53":2,"86":3,"91":1,"94":1,"130":1,"137":1}}],["use",{"0":{"10":1,"33":1,"35":1,"36":1,"60":1,"61":1,"80":1},"2":{"0":2,"1":1,"2":1,"4":2,"9":3,"14":1,"15":3,"18":2,"19":2,"24":3,"28":3,"29":1,"30":2,"31":3,"33":2,"35":1,"37":1,"38":2,"39":2,"40":4,"76":1,"86":3,"90":1,"94":1,"95":1,"106":1,"120":1,"121":2,"137":1}}],["userloggedin",{"2":{"28":1}}],["usermodel",{"2":{"26":1}}],["userprofile",{"2":{"26":2}}],["useraccountview",{"2":{"11":1}}],["username",{"2":{"2":1,"7":2,"28":1,"55":1}}],["user",{"2":{"0":2,"2":16,"7":8,"10":2,"19":3,"24":1,"26":4,"27":1,"28":3,"29":1,"30":4,"31":1,"40":3,"49":4,"53":1,"86":1,"90":1,"116":1,"128":1,"136":1,"138":1,"139":1}}],["userid",{"2":{"0":1}}],["userservice",{"2":{"26":1}}],["users",{"2":{"0":7,"2":2,"26":1,"31":1,"40":2,"63":1}}],["userdata",{"2":{"0":1}}],["unwanted",{"2":{"89":1}}],["unpacked",{"2":{"63":1}}],["unpkg",{"2":{"61":3,"68":2,"75":3,"76":3}}],["unless",{"2":{"35":1,"86":1}}],["unlighthouse",{"2":{"19":2}}],["unlike",{"2":{"0":1,"28":1}}],["unknown",{"2":{"31":1}}],["unequivocally",{"2":{"30":1}}],["unfortunate",{"2":{"28":1}}],["unfortunately",{"2":{"19":1}}],["unrelated",{"2":{"26":1}}],["unoptimized",{"2":{"40":1}}],["unocss",{"2":{"19":10}}],["uno",{"2":{"19":10}}],["untrackedchanges",{"2":{"19":1}}],["unified",{"2":{"38":1}}],["unification",{"2":{"4":1}}],["unit",{"2":{"29":6}}],["unicodehighlight",{"2":{"19":1}}],["universal",{"2":{"15":2}}],["unique",{"2":{"14":1,"28":2}}],["under",{"2":{"5":1,"30":1,"81":1,"106":5}}],["understanding",{"2":{"39":1}}],["understand",{"2":{"11":1,"28":1,"39":2,"40":1}}],["understandable",{"2":{"4":1}}],["understood",{"2":{"2":1}}],["undeservedly",{"2":{"2":1}}],["unnecessary",{"2":{"2":1,"4":1,"28":1}}],["unnecessarily",{"2":{"0":1,"86":1}}],["uncaught",{"2":{"0":1}}],["=+",{"2":{"19":1}}],["==",{"2":{"7":3}}],["=>",{"2":{"7":2,"13":1,"16":2,"120":1}}],["=",{"2":{"0":5,"7":1,"11":3,"12":1,"13":2,"14":2,"16":3,"17":6,"24":6,"28":1,"30":1,"55":1,"59":2,"68":1,"72":2,"76":1,"80":2,"91":1,"93":3,"94":2,"95":2,"111":1,"120":3}}],["f6f6f7",{"2":{"56":1}}],["ffffff",{"2":{"56":2}}],["fcp",{"2":{"40":1}}],["fs",{"2":{"31":1}}],["fsd",{"2":{"27":1}}],["fnc",{"2":{"20":1,"24":1}}],["fly",{"2":{"40":1,"118":1}}],["flagship",{"2":{"30":1}}],["flat",{"2":{"26":2}}],["flake",{"2":{"19":2}}],["flows",{"2":{"53":1}}],["flow",{"2":{"24":1,"30":1,"46":1}}],["flowconfig",{"2":{"19":2}}],["fls",{"2":{"19":1}}],["flex",{"2":{"91":3}}],["flexbox",{"2":{"35":1,"36":1,"45":2}}],["flexible",{"2":{"28":1,"30":1}}],["flexibility",{"2":{"4":1,"28":1}}],["fledged",{"2":{"1":2,"86":1}}],["fdb",{"2":{"19":1}}],["fix",{"2":{"19":1,"31":1}}],["fixall",{"2":{"19":2}}],["fields",{"2":{"53":1}}],["field",{"2":{"17":2,"28":1,"30":2}}],["finance",{"2":{"118":1}}],["final",{"2":{"31":1,"38":1}}],["finished",{"2":{"39":1}}],["fine",{"2":{"19":1,"90":1}}],["finding",{"2":{"118":1}}],["find",{"2":{"17":1,"19":1,"40":1,"120":1}}],["fingerprint",{"2":{"2":1}}],["filtering",{"2":{"53":1}}],["filling",{"2":{"88":1,"90":1}}],["fill",{"2":{"16":1}}],["filenesting",{"2":{"19":3}}],["filename",{"2":{"17":10}}],["filelistlayout",{"2":{"19":1}}],["file=",{"2":{"7":1}}],["files",{"2":{"7":3,"8":1,"15":1,"16":1,"18":2,"19":4,"40":2,"95":1,"120":1}}],["file",{"0":{"26":1},"2":{"3":1,"7":9,"16":1,"19":3,"40":2,"53":1,"72":1,"83":2,"97":1,"136":1,"139":2}}],["fi",{"2":{"7":2}}],["fight",{"2":{"2":1}}],["firesbase",{"2":{"127":1}}],["firestore",{"2":{"39":1}}],["firebase",{"2":{"1":2,"8":2,"19":4,"127":1}}],["fira",{"2":{"19":1}}],["first",{"2":{"2":2,"17":1,"19":1,"28":2,"39":2,"40":4,"50":1,"53":2,"116":1,"137":1}}],["follows",{"2":{"93":1}}],["follow",{"2":{"39":1}}],["following",{"2":{"31":1,"99":1,"124":1}}],["folder",{"2":{"7":1,"15":6,"26":1}}],["found",{"2":{"28":1}}],["four",{"2":{"2":1,"91":1}}],["footers",{"0":{"99":1},"1":{"100":1,"101":1,"102":1,"103":1,"104":1},"2":{"99":1}}],["footer",{"2":{"27":1,"83":2,"90":2,"124":1,"127":1,"128":1}}],["focus",{"2":{"26":1}}],["focuses",{"2":{"26":1}}],["fowler",{"2":{"26":1}}],["fonts",{"2":{"137":1}}],["font",{"2":{"56":1,"73":2,"139":1}}],["fontweight",{"2":{"19":1}}],["fontligatures",{"2":{"19":1}}],["fontfamily",{"2":{"19":1}}],["fontaliasing",{"2":{"19":1}}],["fork",{"2":{"48":1}}],["forgotten",{"2":{"35":1}}],["forget",{"2":{"24":1}}],["foreign",{"2":{"28":1,"38":1}}],["forbidden",{"2":{"2":1}}],["forces",{"2":{"7":1}}],["force",{"2":{"2":1}}],["forms",{"2":{"40":1,"127":1}}],["formulate",{"2":{"19":10}}],["formkit",{"2":{"19":10}}],["form",{"2":{"1":2,"2":1,"24":1,"28":1,"48":1,"76":1}}],["formatters",{"2":{"24":2}}],["formatter",{"2":{"19":1}}],["formatting",{"2":{"19":2,"24":1,"40":1,"86":1}}],["formatonsave",{"2":{"19":1}}],["formats",{"2":{"17":1,"19":1}}],["format",{"2":{"1":1,"4":1,"7":3,"17":2,"19":2,"40":2,"53":1,"59":1,"80":1,"83":1}}],["forming",{"2":{"0":1}}],["for",{"0":{"1":1,"26":1,"27":1},"2":{"0":2,"1":9,"2":15,"3":2,"4":6,"5":6,"7":6,"8":3,"9":2,"11":8,"14":1,"15":2,"17":4,"18":5,"19":14,"20":2,"21":1,"22":1,"24":7,"26":7,"27":6,"28":13,"29":3,"30":8,"31":6,"32":1,"33":3,"34":1,"35":1,"36":1,"37":1,"38":4,"39":9,"40":16,"50":1,"53":1,"55":1,"63":2,"76":1,"83":1,"85":1,"86":4,"88":2,"89":6,"90":2,"91":2,"93":1,"94":2,"95":1,"109":2,"111":1,"118":3,"121":2,"124":6,"127":5,"130":1,"131":1,"136":1,"137":3,"139":1}}],["feedtype",{"2":{"55":5}}],["fetish",{"2":{"29":1}}],["fetch",{"2":{"0":1,"7":1,"31":1,"89":1,"93":1}}],["ferferga",{"2":{"28":1}}],["featuretests",{"2":{"26":1}}],["feature",{"2":{"26":5,"30":1}}],["features",{"0":{"36":1},"2":{"1":1,"24":1,"26":6,"28":1,"40":2,"118":1}}],["few",{"2":{"3":1,"20":1,"89":1,"90":1}}],["future",{"2":{"90":1}}],["further",{"2":{"88":1,"89":1,"90":1}}],["fundamental",{"2":{"30":1}}],["functional",{"2":{"26":1,"28":1,"90":2}}],["functionality",{"2":{"24":2,"31":1,"37":1,"38":1,"83":1,"85":2,"86":4,"88":1,"89":1,"90":2,"110":1,"118":2,"119":1,"122":1,"127":1}}],["function",{"2":{"11":1,"13":3,"14":1,"16":1,"17":3,"24":1,"28":3,"31":4,"32":2,"86":1,"91":2,"93":1,"110":1,"111":1,"118":1,"120":1}}],["functions",{"2":{"1":3,"9":1,"11":1,"28":9,"30":2,"31":1}}],["fu",{"2":{"19":1,"86":1}}],["fully",{"2":{"70":1}}],["fullstack",{"2":{"4":1,"19":1}}],["fullstackers",{"2":{"4":1}}],["full",{"2":{"1":2,"26":1,"28":1,"38":1,"51":1,"86":1}}],["frequently",{"2":{"50":2}}],["frequency",{"2":{"31":1}}],["freezed",{"2":{"19":1}}],["free",{"2":{"1":3,"8":2,"39":3}}],["fragments",{"2":{"90":1,"97":1}}],["frantically",{"2":{"19":1}}],["frameworks",{"0":{"30":1},"2":{"30":3,"89":1}}],["framework",{"2":{"3":1,"24":4,"28":1,"30":1,"86":1,"89":2,"118":1,"127":1}}],["friendly",{"2":{"18":1,"39":1}}],["front",{"2":{"1":4,"2":6,"4":1,"5":1,"19":1,"26":1,"29":2,"30":1,"31":1,"90":1}}],["frontends",{"2":{"26":1}}],["frontend",{"0":{"30":1,"31":1,"67":1},"1":{"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"68":1,"69":1},"2":{"1":3,"2":3,"3":1,"4":2,"8":1,"19":1,"26":1,"27":1,"28":5,"29":2,"30":5,"31":3,"39":2,"40":1,"50":1,"63":1,"69":1,"89":1}}],["frontenders",{"0":{"1":1}}],["from",{"0":{"85":1},"2":{"0":13,"1":1,"2":1,"3":7,"7":3,"8":1,"11":1,"12":1,"13":1,"14":2,"15":9,"16":3,"17":3,"18":3,"19":1,"24":1,"26":1,"28":8,"29":2,"30":3,"31":1,"34":1,"39":7,"40":7,"49":1,"50":1,"53":2,"55":2,"59":1,"68":1,"72":1,"80":1,"90":1,"91":1,"93":2,"94":5,"95":3,"106":1,"107":1,"108":1,"118":1,"120":2,"128":1,"132":1}}],["familiarize",{"2":{"89":1,"90":1}}],["family",{"2":{"56":1,"73":2,"139":1}}],["favorable",{"2":{"31":1}}],["favorite",{"2":{"0":1}}],["fairly",{"2":{"27":1,"39":1}}],["facebook",{"2":{"131":1}}],["facilitate",{"2":{"86":1}}],["facilitating",{"2":{"26":1}}],["fact",{"2":{"24":1,"28":1}}],["factor",{"2":{"30":1}}],["facto",{"2":{"4":1,"94":1}}],["fans",{"2":{"19":1}}],["fast",{"2":{"19":1,"38":1}}],["faster",{"2":{"18":2,"19":1,"30":1,"35":1}}],["fall",{"2":{"28":1,"30":1}}],["fallback",{"2":{"17":1}}],["false",{"2":{"0":1,"7":2,"19":27,"28":1,"55":1,"83":4}}],["faq",{"2":{"7":1,"50":1}}],["luxury",{"2":{"40":1}}],["lumps",{"2":{"30":1}}],["l",{"2":{"30":1,"120":2}}],["lt",{"2":{"19":1}}],["ll",{"2":{"18":1,"39":1}}],["lying",{"2":{"5":1}}],["lazy",{"2":{"40":1}}],["labor",{"2":{"40":2}}],["latter",{"2":{"31":1}}],["later",{"2":{"32":1,"40":1,"86":1}}],["latexmk",{"2":{"19":1}}],["latest",{"2":{"7":2}}],["launched",{"2":{"29":1,"40":1}}],["launching",{"0":{"84":1},"2":{"26":1}}],["laptop",{"2":{"19":1}}],["lang=",{"2":{"16":1,"91":1,"95":1,"120":1}}],["languages",{"2":{"10":1,"30":1,"31":2}}],["language",{"0":{"36":1},"2":{"1":2,"3":1,"4":1,"19":1,"24":2,"28":1,"39":1,"118":2}}],["layoutadmin",{"2":{"26":1}}],["layoutdefault",{"2":{"26":1}}],["layout",{"2":{"11":2,"26":3,"35":1,"38":3,"83":2,"86":1,"88":1,"90":1,"124":2,"127":1,"128":1,"130":3,"139":1}}],["layouts",{"2":{"11":2,"26":1,"27":1,"90":1}}],["layered",{"2":{"115":1}}],["layers",{"2":{"26":3}}],["layer",{"2":{"0":1,"38":1,"40":1,"83":1,"93":1,"124":1}}],["lastindexof",{"2":{"17":2}}],["last",{"2":{"7":1,"19":1}}],["lamda",{"2":{"1":1}}],["lambda",{"2":{"1":1}}],["larger",{"2":{"26":1}}],["large",{"2":{"1":1,"7":1,"24":2,"26":1,"29":2,"30":4,"55":1,"98":1,"118":1}}],["left",{"2":{"65":1,"128":1}}],["least",{"2":{"19":1,"28":1,"31":1,"37":1,"39":2}}],["learning",{"0":{"39":1},"2":{"38":1,"39":3,"89":1}}],["learn",{"2":{"7":1,"31":1,"35":1,"39":1,"90":1}}],["lerna",{"2":{"19":2}}],["leex",{"2":{"19":1}}],["lengths",{"2":{"55":1}}],["length",{"2":{"17":2}}],["let",{"2":{"17":1,"26":1,"31":2,"35":1}}],["levels",{"2":{"2":1,"30":1}}],["level",{"2":{"2":2,"10":2,"24":1,"29":1,"31":2,"37":1,"39":3,"50":1,"89":1}}],["leverage",{"0":{"1":1},"2":{"90":1}}],["less",{"2":{"0":1,"19":1,"40":1}}],["lightweight",{"2":{"86":1}}],["light",{"2":{"63":1,"70":1,"139":1}}],["lighthouserc",{"2":{"19":20}}],["little",{"2":{"40":3}}],["lives",{"2":{"30":1}}],["lived",{"2":{"2":2}}],["license",{"2":{"19":1,"81":1}}],["limitations",{"2":{"38":1}}],["limit",{"2":{"19":3}}],["lib",{"2":{"19":1,"26":1}}],["libraries",{"0":{"33":1,"38":1},"2":{"17":1,"18":1,"20":1,"21":1,"26":1,"35":1,"38":9,"86":1,"89":2,"90":1,"126":1,"137":1}}],["library",{"0":{"20":1},"2":{"0":1,"9":1,"24":1,"28":6,"30":1,"31":1,"32":2,"33":2,"38":2,"56":1,"63":1,"86":2,"118":1}}],["link",{"2":{"61":1,"68":2,"75":1,"76":1,"107":1}}],["links",{"2":{"18":1}}],["linux",{"2":{"19":1}}],["linting",{"2":{"29":1,"86":1}}],["linter",{"2":{"19":1}}],["lintstagedrc",{"2":{"19":2}}],["lint",{"2":{"19":4}}],["linenumbers",{"2":{"19":1}}],["lines",{"2":{"3":1,"32":1,"40":1,"119":1}}],["line",{"2":{"3":1,"18":1,"19":1,"39":1,"55":1}}],["lifehack",{"2":{"28":1}}],["life",{"2":{"7":1}}],["lifetime",{"2":{"2":4}}],["lists",{"2":{"118":1}}],["listeners",{"2":{"30":1}}],["list",{"2":{"3":2,"18":1,"19":1}}],["lies",{"2":{"1":1}}],["likely",{"2":{"28":1}}],["likelihood",{"2":{"27":1}}],["like",{"2":{"0":1,"3":1,"8":1,"10":1,"15":1,"18":2,"24":2,"26":3,"27":1,"28":5,"31":1,"38":5,"39":2,"40":5,"83":1,"89":1,"107":1,"137":1}}],["loop",{"2":{"31":2}}],["loose",{"2":{"27":1}}],["loosely",{"2":{"27":1}}],["looks",{"2":{"28":1,"40":2}}],["look",{"2":{"0":1,"4":1,"17":1,"19":1,"20":1,"28":1,"39":1,"93":1}}],["long",{"2":{"26":1}}],["longer",{"2":{"2":1,"19":1,"24":1,"28":1,"32":1}}],["lof",{"2":{"19":1}}],["lock",{"2":{"19":13}}],["located",{"2":{"38":1,"97":2,"120":1,"130":1,"132":1,"138":1}}],["location",{"2":{"7":1}}],["locally",{"2":{"40":1,"53":1}}],["locale",{"2":{"24":1,"120":3}}],["locales",{"2":{"24":1,"86":1,"118":1,"120":4}}],["localizing",{"2":{"24":1,"118":1}}],["localization",{"2":{"24":2,"118":2}}],["local",{"2":{"19":1,"28":2,"31":1}}],["localstoragename",{"2":{"7":3}}],["localstorage",{"2":{"2":2,"7":3,"139":1}}],["lot",{"2":{"18":1,"19":3,"24":1,"30":2,"39":2,"40":1,"118":1}}],["lose",{"2":{"28":1,"40":1}}],["loss",{"2":{"17":1}}],["losing",{"2":{"2":1}}],["lower",{"2":{"30":1}}],["low",{"2":{"2":1,"89":1}}],["loaded",{"2":{"40":1,"138":1}}],["loaderset",{"2":{"13":4}}],["loaderbar",{"2":{"12":1}}],["loader",{"2":{"12":1,"26":1}}],["loadicons",{"2":{"17":2}}],["loading",{"2":{"0":2,"7":1,"11":1,"12":2,"13":2,"15":1}}],["load",{"2":{"1":1,"31":2,"40":2}}],["log",{"2":{"7":1,"19":1,"24":1}}],["login",{"2":{"2":6,"26":1,"28":1,"29":1,"127":1}}],["logically",{"2":{"34":1}}],["logical",{"2":{"24":1,"27":1,"28":1,"40":1}}],["logic",{"2":{"1":3,"26":1,"28":11,"30":4,"31":1,"38":2,"53":1,"93":1}}],["logs",{"2":{"2":2,"7":1,"19":1}}],["logged",{"2":{"2":1,"28":1}}],["logout",{"2":{"0":1,"28":1}}],["msg",{"2":{"120":1}}],["mjs",{"2":{"19":4}}],["mysql",{"2":{"19":1,"39":1}}],["my",{"2":{"18":1,"28":1,"83":3,"84":1,"88":1,"106":2,"107":1}}],["m",{"2":{"7":2}}],["mdsvex",{"2":{"19":1}}],["md",{"2":{"7":1,"19":3}}],["mkdir",{"2":{"7":2}}],["mvp",{"2":{"29":1}}],["mvc",{"2":{"28":1,"30":1}}],["mv",{"2":{"7":1}}],["multi",{"2":{"31":2}}],["multithreading",{"2":{"31":4}}],["multithreaded",{"2":{"30":1}}],["multicursormodifier",{"2":{"19":1}}],["multiple",{"2":{"18":1,"24":1,"26":1,"31":1,"86":1}}],["must",{"2":{"2":1,"7":2,"15":1,"40":1,"76":1,"136":1}}],["much",{"2":{"0":1,"7":1,"18":1,"19":2,"24":1,"28":1,"30":2,"33":2,"38":4,"39":1,"40":3}}],["megabytes",{"2":{"119":1}}],["mention",{"2":{"40":1}}],["mentor",{"2":{"39":2}}],["menus",{"2":{"19":1}}],["menu",{"2":{"11":2,"27":1,"106":1,"124":1}}],["mechanism",{"2":{"31":1}}],["mechanisms",{"2":{"28":1}}],["mess",{"2":{"29":1}}],["message",{"2":{"4":1,"48":1,"118":1}}],["messages",{"2":{"4":2,"31":1}}],["means",{"2":{"24":1,"26":1,"38":1,"86":1,"89":1}}],["measures",{"2":{"2":1}}],["me",{"0":{"20":1}}],["metrics",{"2":{"40":2}}],["met",{"2":{"39":1}}],["methodology",{"2":{"26":1}}],["methods",{"2":{"3":1,"24":1,"28":1,"39":1}}],["method",{"2":{"2":1,"18":1,"26":1,"40":2,"83":2,"85":1,"94":1}}],["metaframwork",{"2":{"89":1}}],["metadata",{"2":{"19":1}}],["meta",{"2":{"0":1,"11":1,"16":1,"17":2,"83":1,"88":1,"94":1,"95":1,"124":1,"131":15}}],["mit",{"2":{"81":1}}],["mitt",{"2":{"4":1}}],["mistake",{"2":{"31":1}}],["middle",{"2":{"31":1}}],["microfrontend",{"2":{"26":2}}],["microfrontends",{"2":{"26":7}}],["microservice",{"2":{"26":1,"30":1}}],["microservices",{"2":{"26":2,"31":1}}],["microsoft",{"2":{"1":1,"8":1,"19":1,"40":1}}],["micro",{"0":{"67":1},"1":{"68":1,"69":1},"2":{"19":1,"26":1,"63":1,"69":1}}],["mixins",{"2":{"24":4}}],["mix",{"2":{"19":3,"30":1}}],["minutes",{"2":{"39":1,"90":1}}],["mind",{"2":{"28":1}}],["minimum",{"2":{"85":1}}],["minimalistic",{"2":{"89":1}}],["minimal",{"2":{"26":1,"86":1}}],["miniserver",{"2":{"19":1}}],["mini",{"2":{"19":2}}],["miniature",{"2":{"1":1}}],["minheight",{"2":{"16":1}}],["minwidth",{"2":{"16":1}}],["might",{"2":{"11":1,"19":1,"26":1,"28":1,"38":1}}],["mountrt",{"2":{"68":2}}],["mouse",{"2":{"19":1}}],["mobile",{"2":{"40":1,"91":4,"109":1,"128":1,"130":1}}],["morgan",{"2":{"39":1}}],["more",{"2":{"2":1,"3":1,"4":2,"7":1,"9":1,"11":2,"15":1,"18":1,"19":4,"24":4,"26":1,"28":3,"29":1,"30":6,"31":3,"38":1,"39":3,"40":4,"61":1,"106":1,"136":1}}],["motivation",{"2":{"39":1}}],["moves",{"2":{"128":1}}],["moved",{"2":{"0":1}}],["moving",{"2":{"34":1}}],["moleculepokemonthumbnail",{"2":{"26":1}}],["moleculesearchinput",{"2":{"26":1}}],["molecules",{"2":{"26":2}}],["moments",{"2":{"29":1,"39":1}}],["moment",{"2":{"20":1,"24":2,"40":1,"132":1}}],["mocha",{"2":{"19":10}}],["monitor",{"2":{"19":2,"30":1}}],["monitoring",{"2":{"2":1}}],["money",{"2":{"19":1}}],["monolithic",{"2":{"26":1}}],["monospace",{"2":{"19":1}}],["mono",{"2":{"19":1}}],["modal",{"2":{"86":1}}],["modifiers",{"2":{"28":1}}],["modular",{"2":{"26":2,"27":1}}],["modules",{"2":{"17":6,"18":1,"19":2,"26":3,"27":1,"28":2,"31":1,"34":1}}],["module",{"0":{"92":1},"1":{"93":1,"94":1},"2":{"0":2,"19":1,"27":8,"28":2,"30":1,"31":1,"68":2,"88":2,"90":2,"94":1,"124":2,"127":1}}],["mod",{"2":{"19":1}}],["modes",{"2":{"128":2,"130":2}}],["model",{"2":{"28":3,"30":2,"38":1}}],["models",{"2":{"26":4,"35":1}}],["mode",{"2":{"19":3,"28":2,"29":1,"76":1,"91":1,"136":1}}],["modern",{"0":{"36":1},"2":{"8":1,"17":1,"18":1,"19":1,"24":1,"39":1,"86":1,"90":1}}],["mostly",{"2":{"4":1,"89":1}}],["most",{"2":{"1":2,"2":1,"7":1,"9":1,"18":2,"19":1,"26":1,"27":1,"29":1,"30":2,"31":1,"39":2,"40":2,"50":1}}],["max",{"2":{"130":1,"139":1}}],["maximum",{"2":{"130":1}}],["magnitude",{"2":{"40":1}}],["magic",{"2":{"24":1}}],["mat",{"2":{"40":1}}],["matter",{"2":{"39":1}}],["match",{"2":{"7":1,"136":1}}],["margin",{"2":{"98":1}}],["martin",{"2":{"26":1}}],["markdownlint",{"2":{"19":2}}],["markdown",{"0":{"47":1},"2":{"19":1,"47":1,"72":1}}],["machine",{"2":{"19":1}}],["macos",{"2":{"19":1}}],["made",{"2":{"19":1,"28":1,"30":1,"40":1,"89":1,"90":1}}],["mailmap",{"2":{"19":1}}],["mainly",{"2":{"28":1,"30":1}}],["mainlayout",{"0":{"128":1},"1":{"129":1},"2":{"11":2,"83":2,"130":1}}],["maintainability",{"2":{"26":2,"38":1}}],["maintainers",{"2":{"19":1}}],["maintenanceview",{"2":{"11":1}}],["maintenance",{"2":{"11":2}}],["main",{"2":{"0":1,"2":1,"5":1,"7":6,"19":1,"26":6,"27":1,"28":2,"29":2,"31":3,"37":1,"39":1,"50":1,"55":1,"98":1,"120":1,"129":1}}],["may",{"2":{"18":1,"28":1,"30":1,"32":2,"39":1,"40":1,"50":1,"53":1,"89":1}}],["makarov",{"2":{"51":2}}],["making",{"2":{"18":1,"40":1,"48":1,"63":1}}],["makes",{"2":{"0":1,"4":1,"7":1,"28":2,"30":2,"53":1,"106":1}}],["make",{"2":{"0":1,"1":2,"2":2,"9":1,"11":2,"24":2,"26":1,"28":1,"30":1,"31":1,"32":1,"33":3,"39":1,"40":1,"83":1,"88":1,"137":1}}],["map",{"2":{"17":2,"19":7}}],["mastery",{"2":{"39":1}}],["master",{"2":{"7":3,"19":1}}],["masked",{"2":{"16":1}}],["mask",{"2":{"3":2}}],["mantinelayeredheader",{"0":{"115":1}}],["mantine",{"2":{"114":1,"115":1}}],["mantinerichfooter",{"0":{"103":1},"2":{"83":2}}],["mantinesimplefooter",{"0":{"102":1}}],["mantinesimpleheader",{"0":{"114":1},"2":{"83":2}}],["mantinesimplenavbar",{"0":{"134":1},"2":{"83":2}}],["manifest",{"0":{"136":1},"2":{"40":3,"83":1,"88":1,"124":1,"135":1,"136":2}}],["manipulating",{"2":{"2":1}}],["managing",{"2":{"26":1,"28":2}}],["manageable",{"2":{"137":1}}],["managed",{"2":{"40":1}}],["management",{"0":{"28":1},"2":{"28":3}}],["manage",{"2":{"26":2,"30":1}}],["manager",{"2":{"2":3,"7":1}}],["manual",{"2":{"19":1,"39":1}}],["manually",{"2":{"7":1,"19":1,"83":1}}],["many",{"2":{"1":1,"2":1,"8":1,"15":1,"17":1,"19":2,"30":1,"31":1,"39":1,"40":1,"89":1}}],["major",{"2":{"1":1}}],["c2c2c4",{"2":{"139":1}}],["czrc",{"2":{"19":2}}],["cz",{"2":{"19":2}}],["cypress",{"2":{"19":10,"29":1}}],["cmakepresets",{"2":{"19":1}}],["cmake",{"2":{"19":3}}],["cmakelists",{"2":{"19":1}}],["cxx",{"2":{"19":1}}],["cjs",{"2":{"19":4}}],["cc",{"2":{"19":1}}],["c",{"2":{"19":1,"56":20,"73":17,"75":10,"76":11,"83":1,"139":9}}],["csproj",{"2":{"19":1}}],["cspell",{"2":{"19":2}}],["cshtml",{"2":{"19":2}}],["cs",{"2":{"19":12}}],["csshtml",{"2":{"98":1}}],["css3",{"0":{"35":1},"2":{"35":1,"36":1,"38":1,"86":1}}],["cssnano",{"2":{"19":10}}],["cssnanorc",{"2":{"19":10}}],["css",{"0":{"38":1,"45":1,"73":1,"98":1},"2":{"8":1,"19":5,"20":1,"30":1,"35":1,"38":9,"39":1,"40":1,"56":2,"59":4,"61":1,"66":1,"68":2,"72":3,"73":4,"75":1,"76":1,"80":4,"86":1,"90":1,"91":2,"127":1,"130":1,"137":1,"138":1,"139":4}}],["ctrlcmd",{"2":{"19":1}}],["cpus",{"2":{"31":1}}],["cpu",{"2":{"31":2,"121":1}}],["cpp",{"2":{"19":1}}],["cp",{"2":{"7":1}}],["curve",{"2":{"38":1}}],["cursorstyle",{"2":{"19":1}}],["cursorsmoothcaretanimation",{"2":{"19":1}}],["cursorblinking",{"2":{"19":1}}],["currently",{"2":{"53":1,"99":1,"108":1,"124":1}}],["currentcolor",{"2":{"16":2}}],["current",{"2":{"7":1,"24":1,"83":1}}],["customize",{"2":{"139":1}}],["customization",{"2":{"18":1,"19":3,"86":2,"88":1,"90":1,"127":1,"135":1}}],["customer",{"2":{"31":1,"35":1,"40":1}}],["custom",{"2":{"1":1,"8":1,"18":1,"19":2,"24":3,"31":1,"38":2,"107":2,"139":1}}],["cd",{"0":{"5":1},"2":{"5":5,"7":4,"29":1,"39":1,"84":1,"85":1,"127":1}}],["circle",{"2":{"56":2,"73":1,"75":1,"76":1}}],["circleci",{"2":{"19":2}}],["circumstances",{"2":{"31":1}}],["citation",{"2":{"19":1}}],["ci",{"0":{"5":1},"2":{"5":5,"7":1,"29":1,"39":1,"127":1}}],["certified",{"2":{"51":2}}],["certification",{"2":{"39":2}}],["certifications",{"2":{"39":1}}],["certificate",{"2":{"8":3}}],["certificates",{"2":{"8":1}}],["certbot",{"2":{"8":1}}],["certain",{"2":{"1":1,"2":2,"24":1,"28":1,"31":1,"40":1,"53":1,"86":1,"89":2,"90":1}}],["center",{"2":{"2":1}}],["clutters",{"2":{"26":1}}],["clone",{"2":{"85":1}}],["close",{"2":{"40":2}}],["closeonfiledelete",{"2":{"19":1}}],["cloud",{"2":{"1":4,"5":1,"8":2,"39":1}}],["clicked",{"2":{"130":1}}],["clicks",{"2":{"128":1}}],["clicking",{"2":{"109":1}}],["click",{"2":{"106":1}}],["click=",{"2":{"95":1,"120":1}}],["clippy",{"2":{"19":2}}],["clipboard",{"2":{"19":4}}],["cli",{"2":{"18":1,"19":2}}],["clients",{"2":{"3":1}}],["client",{"2":{"3":9,"4":2,"19":2,"40":2,"93":2,"137":2}}],["clamps",{"2":{"30":1}}],["clangd",{"2":{"19":1}}],["clang",{"2":{"19":2}}],["classes",{"2":{"28":2,"31":1,"46":1,"90":1,"91":2}}],["classpath",{"2":{"19":1}}],["class",{"2":{"15":1,"19":1,"28":1,"31":1,"38":1,"56":1,"138":1}}],["class=",{"2":{"12":3,"16":1,"68":1,"91":4,"95":2}}],["clarity",{"2":{"4":1}}],["clear",{"2":{"11":1,"26":1,"38":1,"89":1,"137":1}}],["cleared",{"2":{"2":1}}],["clean",{"2":{"7":1,"86":1,"119":1}}],["crm",{"2":{"90":1}}],["crawler",{"2":{"40":1}}],["crowdin",{"2":{"19":2}}],["crossorigin",{"2":{"68":2}}],["cross",{"2":{"3":2,"19":1}}],["credits",{"0":{"66":1},"2":{"19":1}}],["credo",{"2":{"19":1}}],["creator",{"2":{"30":1}}],["creation",{"2":{"19":1,"29":1}}],["creating",{"0":{"123":1},"1":{"124":1,"125":1,"126":1,"127":1},"2":{"3":1,"11":1,"18":1,"19":1,"30":1,"40":1,"86":1,"89":2,"90":1}}],["create",{"0":{"18":1,"83":1},"1":{"84":1},"2":{"11":1,"15":1,"18":2,"28":1,"31":3,"38":1,"48":1,"81":1,"83":5,"88":1,"89":4,"90":2,"106":1,"139":1}}],["created",{"2":{"7":1,"40":2,"50":1,"137":1}}],["creates",{"2":{"2":1,"24":1,"93":1}}],["critical",{"2":{"2":1}}],["cryptography",{"2":{"2":1}}],["crud",{"2":{"1":1}}],["cheat",{"0":{"41":1},"1":{"42":1,"43":1,"44":1,"45":1,"46":1,"47":1},"2":{"42":1,"43":1,"44":1,"45":4}}],["checkout",{"2":{"7":4}}],["check",{"2":{"2":1,"7":1,"19":1,"29":1,"39":2,"40":1,"69":1,"77":1,"127":1}}],["checks",{"2":{"2":2,"19":1}}],["checking",{"2":{"2":1,"28":3}}],["chat",{"2":{"50":1}}],["chaff",{"2":{"39":1}}],["changing",{"2":{"30":1,"31":1,"70":1,"90":1,"93":1,"118":1,"129":1}}],["changelocale",{"2":{"120":2}}],["changelog",{"2":{"19":1,"63":1}}],["changed",{"2":{"15":1,"30":1}}],["changes",{"2":{"5":1,"19":2,"24":2,"28":1,"30":3,"48":1,"63":1}}],["change",{"2":{"0":1,"2":1,"24":3,"26":1,"28":1,"30":3,"31":1,"38":1,"86":1,"127":1,"137":1}}],["chromium",{"2":{"24":1}}],["chrome",{"2":{"24":2,"40":1}}],["chosen",{"2":{"55":1}}],["choosing",{"2":{"39":1}}],["choose",{"2":{"19":1,"90":1,"108":1,"132":1}}],["choice",{"2":{"7":2,"19":1,"88":1,"93":1}}],["children",{"2":{"11":2}}],["chgrp",{"2":{"7":2}}],["came",{"2":{"40":2}}],["calc",{"2":{"98":1}}],["calculations",{"2":{"30":1}}],["call",{"2":{"93":1}}],["callback",{"2":{"31":1}}],["calling",{"2":{"28":1}}],["called",{"2":{"1":1,"28":4,"31":1,"106":1}}],["calls",{"2":{"0":1,"24":1,"93":2,"94":1,"118":1}}],["categories",{"2":{"31":1,"136":1}}],["category",{"2":{"28":1}}],["catalog",{"2":{"27":1}}],["catchpokemon",{"2":{"26":1}}],["catch",{"2":{"24":1}}],["caches",{"2":{"137":1}}],["cached",{"2":{"40":1}}],["cache",{"2":{"19":1,"127":1,"137":2}}],["caching",{"2":{"7":1,"28":1,"40":1,"137":2}}],["card",{"2":{"89":1,"131":1}}],["car",{"2":{"39":1}}],["cart",{"2":{"26":1}}],["carousel",{"0":{"22":1},"2":{"22":1}}],["cargo",{"2":{"19":2}}],["careful",{"2":{"29":1}}],["care",{"2":{"17":1,"30":1}}],["capabilities",{"2":{"18":1,"20":1,"24":1}}],["capture",{"2":{"2":1,"19":95}}],["cause",{"2":{"4":1}}],["cases",{"0":{"10":1},"2":{"2":1,"9":1,"11":2,"20":1,"24":1,"28":2,"40":2,"130":1}}],["case",{"2":{"1":1,"2":4,"7":2,"8":1,"9":1,"18":1,"24":1,"28":1,"29":1,"30":2,"31":1,"37":1,"39":1,"53":1,"76":1,"83":1}}],["cannot",{"2":{"0":1,"90":1}}],["can",{"2":{"0":2,"1":4,"2":3,"3":3,"4":2,"7":1,"8":3,"9":1,"10":2,"11":5,"14":1,"15":4,"18":1,"19":4,"24":2,"26":8,"27":2,"28":10,"29":1,"30":8,"31":9,"38":3,"39":8,"40":8,"48":1,"53":1,"56":1,"63":3,"65":1,"68":1,"69":2,"76":1,"77":2,"83":1,"89":1,"91":2,"93":1,"107":1,"109":1,"116":1,"118":1,"130":1,"137":1,"138":1}}],["coefficients",{"2":{"55":1}}],["covers",{"2":{"50":1}}],["coincides",{"2":{"40":1}}],["cost",{"2":{"40":1}}],["copy",{"2":{"32":1}}],["copying",{"2":{"18":1,"19":1}}],["cop",{"2":{"30":1}}],["cohesion",{"2":{"26":1}}],["cohesive",{"2":{"26":1}}],["coolcosmos",{"2":{"28":1}}],["cooler",{"2":{"19":1}}],["coordination",{"2":{"26":1}}],["cookie",{"2":{"2":4}}],["collect",{"2":{"90":1}}],["collects",{"2":{"18":1}}],["colleagues",{"2":{"39":1}}],["column",{"2":{"38":1,"91":1}}],["columnar",{"2":{"35":1}}],["colortheme",{"2":{"19":1}}],["color",{"2":{"16":3,"56":1,"75":1,"76":2,"127":1}}],["could",{"2":{"19":1,"89":1}}],["couple",{"2":{"19":1,"24":1,"35":1,"118":1}}],["coupled",{"2":{"10":1}}],["coupling",{"2":{"11":1,"27":1}}],["counterpart",{"2":{"40":1}}],["counterparties",{"2":{"30":1}}],["count`",{"2":{"7":1}}],["count=5",{"2":{"7":1}}],["courses",{"2":{"39":2}}],["course",{"2":{"4":1,"31":1,"39":1,"40":1}}],["corporation",{"2":{"136":1}}],["corner",{"2":{"65":1}}],["corridor",{"2":{"40":1}}],["correct",{"2":{"53":1}}],["corrections",{"2":{"48":1}}],["correctly",{"2":{"0":1}}],["corresponding",{"2":{"7":1,"24":1,"86":1}}],["core",{"2":{"26":2,"31":5}}],["cors",{"0":{"3":1},"2":{"3":8}}],["comfort",{"2":{"40":1}}],["comfortable",{"2":{"19":2,"28":1}}],["comfortably",{"2":{"9":1}}],["come",{"2":{"40":1,"50":1}}],["comes",{"2":{"31":1,"53":1}}],["combination",{"2":{"90":1}}],["combines",{"2":{"26":1}}],["combustion",{"2":{"39":1}}],["coming",{"2":{"31":1}}],["command",{"2":{"18":1,"83":1}}],["commands",{"2":{"7":1,"19":1}}],["communicate",{"2":{"11":1,"31":1,"94":1}}],["communications",{"2":{"4":1}}],["communication",{"2":{"0":2,"4":2,"124":1}}],["commenting",{"2":{"49":1}}],["comments",{"2":{"2":1,"26":1,"86":1}}],["commercial",{"2":{"7":1,"39":1}}],["commits",{"2":{"53":2,"55":2,"63":1}}],["commitlint",{"2":{"19":4}}],["commit",{"0":{"52":1},"1":{"53":1},"2":{"5":1}}],["common",{"2":{"2":2,"24":1,"30":1,"31":1}}],["com",{"2":{"1":1,"3":9,"7":10,"8":5,"19":2,"51":1,"61":3,"68":2,"75":3,"76":3,"85":1,"93":1,"107":1,"111":1}}],["competent",{"2":{"39":1,"49":1}}],["computations",{"2":{"31":2}}],["computer",{"2":{"18":1,"19":1,"40":1}}],["computed",{"2":{"13":2,"16":3}}],["compile",{"2":{"19":1}}],["compileroptions",{"2":{"18":1}}],["companies",{"2":{"39":1}}],["company",{"2":{"2":1}}],["comparable",{"2":{"29":1}}],["comparison",{"2":{"26":1}}],["compare",{"2":{"19":6}}],["compression",{"2":{"17":1}}],["complicated",{"2":{"40":1}}],["complicates",{"2":{"0":1}}],["completely",{"2":{"31":1,"39":1}}],["completion",{"2":{"19":1}}],["complex",{"2":{"2":1,"4":1,"26":7,"28":1,"30":1,"38":1,"40":1}}],["complexity",{"2":{"0":1,"26":4,"27":1,"30":2,"50":1}}],["compound",{"2":{"118":1}}],["composition",{"2":{"24":3,"28":1,"39":1,"86":1}}],["composite",{"2":{"9":1,"28":1}}],["compose",{"2":{"19":1}}],["composer",{"2":{"19":2}}],["composable",{"2":{"11":1,"24":1,"28":14,"30":2,"31":2,"86":1,"91":2,"110":1,"118":1}}],["composables",{"2":{"0":1,"12":1,"14":1,"26":2,"27":1,"28":2,"91":1,"95":1,"120":2}}],["components",{"0":{"33":1},"2":{"0":1,"9":1,"10":3,"11":3,"18":1,"19":1,"20":1,"26":10,"27":3,"28":4,"30":4,"31":2,"33":3,"34":1,"38":5,"76":2,"83":1,"85":1,"90":1,"95":1,"127":2,"139":1}}],["component",{"0":{"14":1,"61":1,"74":1,"80":1},"1":{"75":1,"76":1,"77":1},"2":{"0":4,"10":2,"11":4,"15":1,"17":1,"19":7,"24":1,"26":2,"28":18,"30":2,"38":3,"59":1,"61":1,"63":2,"77":1,"90":1,"95":2,"110":1,"120":1,"125":2,"139":1}}],["concurrency",{"2":{"31":1}}],["concepts",{"2":{"31":1}}],["concept",{"2":{"2":1,"26":2,"30":1,"31":1}}],["connoisseurs",{"2":{"19":1}}],["connecting",{"2":{"61":1}}],["connection",{"2":{"4":1,"19":2,"120":1}}],["connects",{"2":{"26":1}}],["connected",{"2":{"9":1,"15":1,"73":1}}],["connect",{"2":{"8":1,"9":1,"15":1,"28":1,"68":1,"90":1}}],["conditional",{"2":{"31":1}}],["conditions",{"2":{"15":1}}],["conduct",{"2":{"19":1}}],["confusing",{"2":{"28":1}}],["conflict",{"2":{"19":1}}],["conf",{"2":{"19":1}}],["confirmsync",{"2":{"19":1}}],["confirmdraganddrop",{"2":{"19":1}}],["confirmdelete",{"2":{"19":1}}],["configs",{"2":{"19":1}}],["config",{"0":{"107":1},"2":{"18":3,"19":226,"83":4,"86":1,"97":1,"107":1,"111":1}}],["configuring",{"0":{"19":1}}],["configure",{"2":{"18":2}}],["configured",{"2":{"3":1,"7":1}}],["configurations",{"2":{"19":1,"40":1}}],["configuration",{"0":{"54":1,"76":1},"1":{"55":1,"56":1},"2":{"7":1,"10":2,"19":1,"83":1,"91":1,"97":1,"124":1}}],["consume",{"2":{"121":1}}],["consultant",{"2":{"51":1}}],["consequence",{"2":{"27":1}}],["cons",{"2":{"26":1,"28":2,"38":2}}],["consists",{"2":{"95":1}}],["consist",{"2":{"28":1}}],["consistency",{"2":{"28":1}}],["consistent",{"2":{"26":1}}],["considers",{"2":{"28":1}}],["consider",{"2":{"11":1,"26":1,"31":1,"40":1}}],["considerations",{"0":{"11":1},"1":{"12":1,"13":1,"14":1}}],["console",{"2":{"7":1,"24":3,"31":1}}],["constraints",{"2":{"28":1}}],["construct",{"2":{"28":1}}],["constructor",{"2":{"0":1}}],["constant",{"2":{"2":1}}],["constantly",{"2":{"2":1}}],["const",{"2":{"0":3,"11":2,"12":1,"13":2,"14":1,"16":3,"17":5,"24":1,"28":1,"55":1,"68":1,"91":1,"93":2,"94":2,"95":1,"120":2}}],["contacts",{"2":{"48":1}}],["container",{"2":{"36":1,"76":1,"91":2}}],["contain",{"2":{"3":1,"7":1,"27":1,"38":1,"53":1,"116":1}}],["contains",{"2":{"3":2,"28":1}}],["continue",{"2":{"35":1,"86":1}}],["continuous",{"2":{"5":2}}],["controversial",{"2":{"89":1}}],["controlled",{"2":{"110":1,"138":1,"139":1}}],["controller",{"2":{"19":1,"26":1,"28":3,"30":2}}],["controls",{"2":{"24":1,"30":1}}],["control",{"2":{"2":1,"3":4,"30":1,"46":1}}],["contributions",{"2":{"81":1}}],["contributing",{"2":{"19":1}}],["contribute",{"0":{"48":1}}],["contributors",{"2":{"19":1}}],["content=",{"2":{"131":11}}],["content",{"2":{"40":5,"83":1,"88":1,"90":1,"94":1,"129":1}}],["contentlayer",{"2":{"19":10}}],["contents",{"2":{"7":1,"73":1}}],["context",{"2":{"0":1}}],["convenience",{"2":{"0":1,"2":1,"49":2}}],["conveniently",{"2":{"89":1}}],["convenient",{"2":{"0":2,"4":2,"7":1,"8":1,"9":1,"11":1,"19":2,"24":1,"28":2,"31":1,"38":3,"39":1,"63":1,"88":1,"94":1}}],["codesandbox",{"2":{"19":1}}],["coder",{"2":{"19":1}}],["codeowners",{"2":{"19":1}}],["codecov",{"2":{"19":10}}],["codelens",{"2":{"19":4}}],["codeaction",{"2":{"19":1}}],["codeactions",{"2":{"19":1}}],["codeactionsonsave",{"2":{"19":2}}],["codeium",{"2":{"19":1}}],["code",{"0":{"59":1,"97":1},"2":{"0":4,"1":2,"3":1,"4":1,"5":2,"7":2,"9":1,"19":11,"24":1,"28":1,"30":5,"31":5,"32":1,"34":3,"38":3,"39":4,"40":2,"49":1,"69":1,"77":1,"83":1,"86":1,"88":1,"89":1,"90":2,"91":1,"93":2,"94":1,"97":2,"106":1,"111":1,"120":4,"121":2,"124":1,"138":1}}],["ignite",{"2":{"138":1}}],["ignoredlocales",{"2":{"19":1}}],["ignore",{"2":{"19":2,"83":1}}],["ignoretrimwhitespace",{"2":{"19":1}}],["ignorerecommendations",{"2":{"19":1}}],["io",{"2":{"106":1}}],["illustration",{"2":{"86":1}}],["illogical",{"2":{"0":1,"28":1}}],["irretrievably",{"2":{"20":1,"24":1}}],["ie6",{"2":{"38":1}}],["iex",{"2":{"19":1}}],["ie11",{"2":{"17":1}}],["ie",{"2":{"17":1}}],["iconify",{"2":{"17":1,"19":2}}],["icon",{"2":{"15":2,"16":1,"17":1,"40":1,"95":2,"109":1,"125":1,"128":1,"130":1}}],["icons",{"0":{"17":1},"2":{"15":3,"16":2,"17":2,"18":1,"26":1,"136":1}}],["i18next",{"0":{"118":1,"121":1},"2":{"24":1,"118":1,"119":1,"121":3,"122":1}}],["i18n",{"0":{"117":1},"1":{"118":1,"119":1,"120":1,"121":1,"122":1},"2":{"10":1,"19":3,"24":3,"86":1,"88":1,"90":1,"118":2,"120":1,"121":1,"126":2}}],["imagine",{"2":{"28":1}}],["imageresources",{"2":{"17":3}}],["imageraw",{"2":{"15":1}}],["imagenameinvariable",{"2":{"15":1}}],["image",{"2":{"15":4,"131":4}}],["imageurl",{"2":{"15":1}}],["images",{"2":{"7":1,"15":10,"17":3,"26":4,"40":2,"95":1,"131":1,"137":1}}],["imgurl",{"2":{"15":2}}],["img",{"2":{"15":6,"16":1}}],["immediately",{"2":{"15":1,"40":2,"63":1}}],["impression",{"2":{"49":1}}],["improve",{"2":{"39":1,"40":1,"124":1,"137":1}}],["improvement",{"2":{"24":1}}],["improving",{"2":{"34":1}}],["implies",{"2":{"40":1}}],["implements",{"2":{"86":1,"94":1,"139":1}}],["implemented",{"2":{"53":2,"91":1,"93":1,"110":1}}],["implement",{"2":{"11":1,"26":1}}],["implementations",{"2":{"24":1}}],["implementation",{"0":{"96":1},"1":{"97":1,"98":1},"2":{"4":1,"24":2,"32":1,"37":1,"119":1,"121":1,"137":1}}],["impose",{"2":{"89":1}}],["impossible",{"2":{"28":1,"31":1,"39":1}}],["important",{"2":{"29":1,"37":1}}],["importing",{"2":{"15":1}}],["imported",{"2":{"15":1}}],["import",{"2":{"0":7,"12":1,"14":1,"15":4,"16":4,"17":7,"18":3,"19":2,"28":2,"59":4,"68":1,"72":4,"80":4,"91":1,"93":1,"94":5,"95":3,"120":1}}],["id=g",{"2":{"111":1}}],["id=",{"2":{"68":1}}],["idx",{"2":{"19":1}}],["identifiers",{"2":{"95":1}}],["identifying",{"2":{"40":1}}],["ides",{"2":{"31":1}}],["ideally",{"2":{"28":1}}],["ideal",{"2":{"26":2}}],["ideas",{"2":{"26":1}}],["idea",{"2":{"26":1,"28":1,"40":1}}],["ide",{"0":{"19":1},"2":{"19":1,"49":1}}],["id",{"2":{"7":2,"13":3,"14":1,"111":1}}],["i",{"2":{"4":1,"10":1,"15":1,"18":1,"19":2,"26":1,"28":4,"29":1,"30":1,"31":2,"39":5,"84":1,"85":1}}],["ip",{"2":{"2":1}}],["iphones",{"2":{"2":1}}],["if=",{"2":{"16":1}}],["if",{"2":{"0":1,"1":1,"2":5,"3":5,"7":5,"8":1,"9":1,"11":1,"15":2,"17":1,"18":3,"19":1,"24":1,"27":1,"28":5,"31":2,"32":2,"33":1,"38":2,"39":4,"40":3,"86":1,"90":1,"106":1,"107":2,"121":1,"130":1}}],["iife",{"2":{"0":1}}],["inefficient",{"2":{"40":1}}],["inexpensive",{"2":{"8":1}}],["infinite",{"2":{"31":1}}],["info",{"2":{"3":3}}],["informational",{"2":{"7":1}}],["information",{"2":{"2":2,"7":1,"10":1,"18":1,"39":1,"50":3,"55":2,"63":1,"136":1}}],["ingredient",{"2":{"29":1}}],["innovation",{"2":{"28":1}}],["inner",{"2":{"11":1}}],["involved",{"2":{"89":1}}],["invented",{"2":{"27":1,"30":1,"40":1}}],["invisiblecharacters",{"2":{"19":1}}],["inheritance",{"2":{"24":1,"31":2}}],["inplace",{"2":{"19":1}}],["input",{"2":{"19":1,"30":1}}],["inputs",{"2":{"7":5}}],["inlinesuggest",{"2":{"19":1}}],["inc",{"2":{"136":1}}],["include",{"2":{"86":1,"127":1}}],["includes",{"2":{"49":1,"86":1}}],["including",{"2":{"18":1,"19":1,"24":1,"31":1,"38":1,"70":1,"90":1,"127":1}}],["increasing",{"2":{"31":1}}],["increase",{"2":{"31":1,"50":1}}],["increases",{"2":{"15":1,"27":1,"32":1,"40":1}}],["increased",{"2":{"15":1}}],["inch",{"2":{"19":1}}],["inconvenience",{"2":{"27":1}}],["inconvenient",{"2":{"15":1}}],["incoming",{"2":{"4":1}}],["insertfinalnewline",{"2":{"19":1}}],["inside",{"2":{"10":1,"19":1,"24":2,"28":1,"124":1,"132":1}}],["instances",{"2":{"28":1}}],["installation",{"0":{"57":1,"58":1,"71":1,"79":1,"83":1,"85":1},"1":{"58":1,"59":1,"60":1,"61":1,"84":1},"2":{"40":1,"83":1}}],["installed",{"2":{"7":1,"40":1,"83":1,"85":1}}],["install",{"2":{"1":2,"7":11,"8":1,"19":1,"39":1,"58":1,"71":1,"79":1,"83":1,"136":1}}],["instructions",{"2":{"7":1,"60":1}}],["instead",{"2":{"3":1,"18":1,"24":1,"28":1,"40":1,"94":2,"138":1}}],["injection",{"2":{"97":2}}],["injections",{"0":{"97":1},"2":{"97":2}}],["injecting",{"2":{"11":1}}],["injected",{"2":{"90":1}}],["inject",{"2":{"9":1,"10":3,"11":2,"28":2}}],["indirect",{"2":{"28":1}}],["individually",{"2":{"2":1}}],["ind",{"2":{"19":1}}],["independent",{"2":{"26":1,"28":1,"51":1}}],["independently",{"2":{"26":1,"27":1}}],["independence",{"2":{"9":1}}],["indent",{"2":{"19":1}}],["indexed",{"2":{"40":1}}],["indexing",{"2":{"40":1}}],["index",{"0":{"97":1},"2":{"7":2,"26":6,"40":3,"61":1,"75":1,"76":1,"97":1,"111":1,"131":1,"138":1}}],["initi18n",{"2":{"120":2}}],["initialized",{"2":{"95":1}}],["initialization",{"2":{"94":1,"111":1,"120":1}}],["initializing",{"0":{"84":1}}],["initially",{"2":{"27":1}}],["initial",{"2":{"26":1}}],["initiating",{"2":{"3":1}}],["init",{"2":{"0":1,"7":2,"94":1}}],["introduction",{"0":{"50":1},"1":{"51":1}}],["introduce",{"2":{"32":1}}],["introduced",{"2":{"24":2,"28":1,"30":2}}],["intl",{"2":{"20":1,"24":1}}],["intended",{"2":{"39":1}}],["intensive",{"2":{"31":1,"40":1}}],["integrate",{"2":{"90":2}}],["integrated",{"2":{"19":5,"135":1}}],["integrating",{"2":{"86":1}}],["integration",{"2":{"5":1,"28":1,"29":1,"86":1,"124":1,"127":1}}],["intermediate",{"2":{"30":1,"39":1}}],["intermediary",{"2":{"3":1}}],["interaction",{"2":{"31":1}}],["interactions",{"2":{"26":1}}],["interactivity",{"2":{"30":1}}],["interfering",{"2":{"26":1}}],["interfaces",{"2":{"46":1}}],["interface",{"2":{"1":1,"29":1,"49":1}}],["intersection",{"2":{"24":1}}],["interval",{"2":{"19":1}}],["internal",{"2":{"30":1,"39":1}}],["internally",{"2":{"15":1}}],["internationalization",{"2":{"10":1,"24":3,"118":2,"126":1}}],["internet",{"2":{"1":3,"3":3,"39":3}}],["interesting",{"2":{"7":1,"28":1,"50":1}}],["interceptors",{"2":{"0":1,"93":2,"94":1}}],["into",{"2":{"0":3,"2":1,"5":1,"9":1,"10":2,"15":1,"18":1,"26":5,"27":2,"30":2,"31":2,"38":2,"40":2,"63":1,"97":1,"135":1}}],["in",{"0":{"28":1,"59":1,"60":1,"80":1,"97":1,"107":1,"126":1},"2":{"0":12,"1":13,"2":19,"3":3,"4":2,"5":2,"7":7,"8":1,"9":3,"10":2,"11":3,"14":1,"15":11,"17":4,"18":9,"19":14,"20":2,"24":18,"26":2,"27":3,"28":32,"29":6,"30":15,"31":13,"32":3,"38":4,"39":9,"40":22,"49":1,"50":2,"51":1,"53":4,"55":1,"59":2,"63":5,"65":1,"66":1,"68":1,"72":1,"73":1,"75":1,"76":3,"80":1,"83":3,"84":1,"86":6,"89":2,"90":1,"91":3,"93":2,"94":1,"95":1,"97":1,"98":1,"106":2,"107":1,"114":1,"115":1,"118":2,"119":1,"120":3,"121":3,"124":1,"128":3,"130":4,"136":1,"137":2,"138":2,"139":3}}],["isdraweropen",{"2":{"95":3}}],["isn",{"2":{"28":2}}],["isauthenticated",{"2":{"28":1}}],["ist",{"2":{"19":1}}],["issues",{"2":{"56":2,"75":1,"76":1,"127":1}}],["issuelist",{"2":{"26":1}}],["issuenumberlabel",{"2":{"19":1}}],["issued",{"2":{"2":1}}],["is",{"2":{"0":9,"1":11,"2":25,"3":12,"4":4,"5":2,"7":6,"8":2,"9":1,"11":6,"15":4,"17":3,"18":8,"19":13,"20":2,"22":1,"24":10,"26":5,"27":5,"28":35,"29":5,"30":13,"31":20,"32":2,"34":1,"35":1,"37":1,"38":5,"39":15,"40":21,"48":1,"50":1,"53":4,"55":1,"59":1,"63":2,"69":1,"76":1,"77":1,"80":1,"83":1,"85":1,"86":5,"89":3,"90":1,"91":1,"93":2,"94":3,"97":1,"98":1,"107":1,"109":1,"110":2,"118":1,"119":1,"121":3,"122":2,"128":1,"129":1,"130":3,"132":2,"137":2,"138":3,"139":4}}],["item",{"2":{"2":1}}],["itself",{"2":{"7":1,"24":2,"28":1,"29":1,"34":1,"40":1,"89":1}}],["its",{"2":{"1":2,"2":3,"3":1,"7":3,"15":1,"18":2,"19":1,"24":1,"26":1,"27":1,"28":2,"30":3,"31":2,"32":1,"37":1,"38":1,"39":1,"40":8,"49":1,"69":1,"70":1,"73":1,"77":1}}],["it",{"2":{"0":5,"1":7,"2":24,"3":2,"4":5,"7":7,"8":2,"9":2,"10":3,"11":4,"17":1,"18":4,"19":11,"24":6,"26":2,"27":2,"28":19,"29":1,"30":11,"31":9,"32":5,"33":1,"35":3,"38":3,"39":11,"40":17,"53":1,"63":1,"69":1,"83":4,"85":1,"86":2,"88":1,"89":5,"90":2,"97":1,"109":1,"118":3,"121":2,"132":1,"136":2,"138":1,"139":1}}],["twitter",{"2":{"51":1,"131":8}}],["twenty",{"2":{"39":1}}],["two",{"2":{"2":2,"9":1,"11":1,"31":4,"39":3,"40":3,"108":1,"116":1,"132":1}}],["tune",{"2":{"90":1}}],["tutorial",{"2":{"39":3}}],["turn",{"2":{"28":1}}],["turned",{"2":{"19":1}}],["turbo",{"2":{"19":2}}],["txt",{"2":{"19":1,"26":4}}],["tmp",{"2":{"19":1}}],["tsup",{"2":{"19":2}}],["tslint",{"2":{"19":2}}],["tsdoc",{"2":{"19":11}}],["tsdk",{"2":{"19":1}}],["tsx",{"2":{"19":3}}],["tsconfig",{"2":{"18":2,"19":11}}],["tsc",{"2":{"18":1}}],["tsimport",{"2":{"13":1}}],["ts",{"0":{"13":1},"2":{"19":33,"26":3,"28":1,"91":1,"93":1,"94":1,"95":3,"97":1,"107":1,"120":2}}],["title",{"2":{"39":1,"55":2,"131":4}}],["titlebarstyle",{"2":{"19":1}}],["tied",{"2":{"35":1}}],["tips",{"2":{"31":1}}],["tip",{"2":{"24":1,"30":1,"39":1,"94":1}}],["tidy",{"2":{"19":1}}],["tight",{"2":{"11":1}}],["tightly",{"2":{"10":1,"30":1}}],["timeline>",{"2":{"61":1}}],["timeline",{"0":{"62":1,"63":1},"1":{"63":1,"64":1,"65":1,"66":1},"2":{"55":2,"58":3,"59":4,"61":3,"63":1,"68":6,"69":1,"70":1,"71":3,"72":5,"73":1,"75":3,"76":4,"77":1,"79":3,"80":4}}],["times",{"2":{"18":2,"28":2,"31":1,"40":1}}],["timestamp",{"2":{"7":1}}],["time",{"0":{"24":1},"2":{"2":2,"4":1,"7":1,"9":1,"19":1,"24":2,"28":1,"29":6,"31":2,"32":1,"34":2,"39":2,"53":1,"89":1,"118":1}}],["tapping",{"2":{"109":1}}],["tahoma",{"2":{"56":1}}],["tags",{"2":{"83":1,"88":1,"124":1,"131":4}}],["tag",{"2":{"38":1,"111":2,"138":1}}],["taking",{"2":{"30":1,"39":1}}],["taken",{"2":{"30":1,"63":1}}],["takes",{"2":{"28":1,"59":1,"63":1,"80":1}}],["take",{"2":{"4":1,"19":1,"24":1,"26":1,"29":2,"40":1,"89":1,"118":1}}],["tablet",{"2":{"91":4,"109":1,"128":1,"130":1}}],["table",{"2":{"26":1}}],["tabs",{"2":{"19":1}}],["tabsize",{"2":{"19":1}}],["task",{"2":{"19":1,"30":1,"90":1}}],["tasks",{"2":{"19":2,"89":3}}],["tazerc",{"2":{"19":2}}],["tailwind",{"2":{"19":10,"35":1,"38":2}}],["tail",{"2":{"7":1}}],["target",{"2":{"7":15,"18":1}}],["type=",{"2":{"68":1,"120":1}}],["typedoc",{"2":{"19":2}}],["types",{"2":{"18":1,"28":2,"29":1,"46":1,"99":1,"108":1,"137":1}}],["typescript",{"0":{"46":1},"2":{"4":1,"11":1,"18":3,"19":6,"28":2,"46":4,"86":1}}],["type",{"2":{"7":1,"11":1,"16":7,"28":1,"38":1,"94":1,"131":1}}],["typicode",{"2":{"1":1,"93":1}}],["telegram",{"2":{"50":1}}],["tells",{"2":{"83":1}}],["tell",{"0":{"20":1}}],["teaches",{"2":{"39":2}}],["teacher",{"2":{"39":1}}],["team",{"2":{"26":1,"40":1}}],["teams",{"2":{"26":4,"30":1}}],["techniques",{"2":{"90":1}}],["technical",{"2":{"37":1,"63":1}}],["technologies",{"2":{"18":1,"24":1,"26":1,"39":1,"89":2}}],["technology",{"2":{"5":1,"26":1}}],["terserrc",{"2":{"19":10}}],["term",{"2":{"26":1}}],["terminal",{"2":{"19":5}}],["terms",{"2":{"1":1,"24":1,"38":1,"40":1}}],["tex",{"2":{"19":1}}],["textbooks",{"2":{"39":1}}],["textbook",{"2":{"39":1}}],["textlint",{"2":{"19":2}}],["text",{"2":{"10":1,"40":4,"56":6,"73":6,"75":3,"76":3,"118":1,"139":6}}],["temporarily",{"2":{"24":1}}],["temporary",{"2":{"3":1}}],["templatepokemondetail",{"2":{"26":1}}],["templatepokemonlist",{"2":{"26":1}}],["templates",{"2":{"26":2,"40":1,"89":1,"127":1}}],["template",{"2":{"15":1,"27":1,"30":1,"38":1,"86":1,"88":2,"90":1,"116":3,"124":2}}],["template>",{"2":{"11":6,"12":2,"16":2,"38":2,"95":2,"116":2,"120":2}}],["testnet",{"2":{"94":1}}],["testjsonrpc",{"2":{"94":1}}],["testrest",{"2":{"93":2}}],["tests",{"2":{"26":6,"28":1,"29":11,"40":1}}],["testing",{"0":{"29":1},"2":{"1":1,"5":1,"29":6,"85":1,"127":1}}],["test",{"2":{"1":1,"7":1,"19":1,"29":1,"90":1,"120":1}}],["t",{"2":{"0":1,"1":1,"7":1,"11":1,"15":1,"18":3,"19":2,"26":1,"28":2,"30":3,"31":1,"32":3,"33":1,"40":2,"86":1,"107":1,"118":2,"120":2,"121":1}}],["tricks",{"0":{"98":1}}],["trivial",{"2":{"31":1}}],["tries",{"2":{"19":1}}],["triggerexpansionontab",{"2":{"19":1}}],["training",{"2":{"39":2}}],["traffic",{"2":{"39":1}}],["tragedy",{"2":{"38":1}}],["tracking",{"2":{"24":1,"63":1}}],["tracks",{"2":{"24":1}}],["track",{"2":{"24":3,"30":1}}],["travis",{"2":{"19":2}}],["transactions",{"2":{"118":1}}],["transmission",{"2":{"39":1}}],["transform",{"2":{"30":1}}],["transformer",{"2":{"19":1}}],["transfer",{"2":{"7":1,"19":1}}],["translation",{"2":{"10":1,"118":2}}],["translate",{"2":{"4":1,"26":3}}],["transition",{"2":{"5":1,"26":1}}],["transpile",{"2":{"18":1}}],["transparently",{"2":{"9":1}}],["transparent",{"2":{"2":1,"7":1,"11":1,"17":1,"75":1,"76":2}}],["transport",{"2":{"0":1,"4":1,"39":1,"93":3}}],["trend",{"2":{"38":1}}],["tree",{"2":{"17":1,"19":3,"28":3,"32":1}}],["trevis",{"2":{"5":1}}],["trying",{"2":{"31":1}}],["try",{"2":{"17":2,"19":1,"31":1,"35":1,"39":3}}],["trusted",{"2":{"3":2}}],["true",{"2":{"0":1,"7":1,"11":1,"17":2,"19":61,"55":7,"83":4}}],["those",{"2":{"90":1}}],["thorough",{"2":{"26":1,"28":1}}],["than",{"2":{"18":2,"24":1,"28":3,"30":1,"31":2,"35":1,"38":1,"40":2,"122":1}}],["that",{"2":{"0":1,"1":3,"2":5,"3":4,"8":1,"9":2,"10":5,"11":1,"15":1,"18":1,"19":1,"24":2,"26":6,"27":1,"28":20,"29":3,"30":5,"31":3,"38":3,"39":7,"40":6,"50":1,"86":4,"89":4,"90":1,"91":1,"93":1,"107":1,"118":1}}],["threshold",{"2":{"30":1,"116":2}}],["threads",{"2":{"31":10}}],["thread",{"2":{"30":1,"31":7}}],["three",{"2":{"7":2,"53":1,"137":1}}],["throw",{"2":{"7":1}}],["throughout",{"2":{"27":1,"28":1}}],["through",{"2":{"2":1,"10":1,"11":1,"18":1,"31":1,"38":1,"39":1,"53":1,"86":1}}],["think",{"2":{"28":1,"31":1}}],["thinner",{"2":{"24":1}}],["thing",{"2":{"4":1,"38":1}}],["things",{"2":{"1":1,"19":1,"24":2,"31":2,"40":1,"118":2}}],["third",{"0":{"33":1},"2":{"2":1,"3":5,"4":1,"28":1,"32":1,"40":1,"53":2,"86":2,"137":1}}],["this",{"0":{"48":1},"2":{"0":1,"1":1,"2":4,"3":1,"7":4,"8":2,"9":1,"11":1,"14":1,"15":2,"18":2,"19":5,"20":1,"24":3,"26":9,"27":1,"28":11,"29":3,"30":13,"31":9,"33":1,"34":1,"37":1,"38":2,"39":6,"40":7,"49":1,"50":1,"53":1,"76":2,"77":1,"83":3,"85":1,"90":1,"107":1,"118":1,"137":2}}],["thus",{"2":{"1":1,"31":1}}],["theoretical",{"2":{"31":1}}],["themetoggle",{"2":{"139":1}}],["themes",{"0":{"139":1},"2":{"10":1,"31":1,"56":1,"63":1,"70":1,"88":1,"90":2,"127":2,"139":4}}],["theme",{"2":{"10":1,"56":1,"125":2,"139":2}}],["themselves",{"2":{"8":1,"30":1,"89":1,"90":1,"97":1}}],["them",{"2":{"7":1,"10":4,"11":4,"15":3,"18":1,"19":2,"24":1,"28":4,"29":1,"31":1,"33":3,"34":1,"38":1,"39":1,"40":1,"56":1,"63":1,"76":1,"86":1,"121":1}}],["theft",{"2":{"2":1}}],["these",{"2":{"1":2,"3":1,"24":1,"28":1,"29":1,"31":3,"40":1}}],["their",{"2":{"1":3,"2":1,"15":1,"18":1,"20":1,"26":1,"28":1,"29":1,"30":1,"38":1,"39":1,"40":1,"90":1,"95":1}}],["they",{"2":{"0":1,"2":1,"7":1,"15":4,"18":1,"24":1,"26":2,"28":2,"30":2,"31":2,"34":1,"38":1,"39":1,"40":1}}],["therefore",{"2":{"38":1,"76":1}}],["there",{"2":{"0":2,"1":4,"2":3,"7":2,"9":1,"11":1,"15":1,"17":1,"19":3,"20":3,"27":1,"28":6,"29":2,"30":2,"31":4,"32":1,"38":1,"39":4,"40":2,"53":2,"55":1,"89":2,"97":1,"108":1,"121":1,"122":1}}],["then",{"2":{"0":2,"1":1,"2":2,"7":4,"17":1,"18":1,"28":3,"31":2,"40":6}}],["the",{"0":{"19":1,"37":1,"48":1,"51":1,"58":1,"85":1,"97":1},"2":{"0":25,"1":16,"2":67,"3":40,"4":13,"5":2,"7":43,"8":4,"9":7,"10":3,"11":11,"15":22,"16":1,"17":5,"18":9,"19":16,"20":2,"22":1,"24":35,"26":18,"27":6,"28":50,"29":17,"30":41,"31":35,"32":3,"33":2,"34":2,"35":1,"37":2,"38":20,"39":28,"40":55,"48":2,"49":6,"50":9,"53":17,"55":3,"56":4,"59":1,"63":2,"65":2,"68":1,"73":2,"76":6,"81":1,"83":9,"86":12,"89":7,"90":12,"91":2,"93":9,"94":6,"95":4,"97":3,"98":2,"99":1,"106":10,"107":3,"109":1,"111":1,"116":3,"118":10,"119":1,"121":2,"122":2,"124":5,"125":1,"126":1,"127":3,"128":3,"129":2,"130":7,"132":3,"135":1,"136":2,"137":5,"138":7,"139":6}}],["touch",{"2":{"110":2}}],["touchslideoutdrawer",{"0":{"110":1},"2":{"110":1}}],["touched",{"2":{"50":1}}],["toggle",{"2":{"95":1,"125":1}}],["together",{"2":{"26":1,"30":1,"31":1,"32":1}}],["todos",{"2":{"93":1}}],["top",{"2":{"50":1,"124":1}}],["topics",{"2":{"50":1}}],["topic",{"2":{"29":1}}],["too",{"2":{"39":1,"40":1}}],["took",{"2":{"31":1}}],["toolchain",{"2":{"19":1}}],["tool",{"2":{"18":1,"19":3,"37":1,"89":1}}],["tools",{"2":{"5":1,"24":1,"29":1,"40":1,"89":1}}],["towards",{"2":{"26":1}}],["toaster",{"0":{"23":1},"2":{"86":1}}],["toml",{"2":{"19":10}}],["toc",{"2":{"19":1}}],["tokens",{"2":{"2":2,"10":1,"127":1}}],["token",{"2":{"0":1,"2":15,"49":4,"55":2,"63":1}}],["to",{"0":{"1":1,"4":2,"48":1,"105":2},"1":{"106":2,"107":2},"2":{"0":13,"1":15,"2":33,"3":11,"4":8,"5":1,"7":30,"8":8,"9":5,"10":4,"11":7,"14":1,"15":8,"16":1,"17":3,"18":12,"19":12,"24":6,"26":10,"27":4,"28":26,"29":5,"30":19,"31":23,"32":3,"33":2,"34":2,"35":5,"38":7,"39":21,"40":26,"48":1,"53":8,"55":4,"56":5,"59":1,"63":1,"70":1,"73":1,"76":4,"80":1,"83":2,"86":4,"89":8,"90":11,"93":3,"94":2,"95":2,"97":1,"98":1,"106":3,"107":1,"108":1,"110":1,"121":2,"124":3,"125":1,"127":3,"130":1,"132":1,"136":2,"137":1,"138":1,"139":2}}],["a8b1ff",{"2":{"56":1,"75":1,"76":1}}],["aesthetics",{"2":{"49":1}}],["afraid",{"2":{"39":1}}],["affects",{"2":{"32":1,"55":1}}],["affecting",{"2":{"26":1}}],["after",{"2":{"4":1,"5":1,"7":3,"8":1,"31":1,"40":2,"116":1,"122":1,"138":1}}],["agnostic",{"2":{"93":1}}],["ago",{"2":{"24":1}}],["against",{"2":{"7":1,"119":1}}],["again",{"2":{"4":1,"39":1}}],["azure",{"2":{"19":2}}],["air",{"2":{"19":1}}],["ava",{"2":{"19":10}}],["available",{"0":{"124":1,"125":1},"2":{"15":1,"17":1,"28":2,"40":1,"63":1,"85":1,"90":1,"99":1,"106":1,"124":1}}],["avoids",{"2":{"30":1}}],["avoided",{"2":{"24":1}}],["avoid",{"0":{"32":1},"2":{"11":1,"26":1,"97":1,"127":1}}],["aux",{"2":{"19":1}}],["audio",{"2":{"15":1}}],["autocompleterefs",{"2":{"19":1}}],["autodetection",{"2":{"19":1}}],["autodetectcolorscheme",{"2":{"19":1}}],["autofetch",{"2":{"19":1}}],["autoupdate",{"2":{"19":1}}],["auto",{"2":{"7":1,"16":1,"19":1,"136":1}}],["automatically",{"2":{"7":1,"30":1,"106":1}}],["automation",{"2":{"7":1,"39":1,"106":1}}],["automating",{"2":{"5":1,"63":1}}],["automate",{"2":{"7":1}}],["author",{"0":{"51":1},"2":{"50":1}}],["authors",{"2":{"19":3}}],["authorization",{"0":{"2":1},"2":{"2":6}}],["authentication",{"0":{"2":1},"2":{"1":1,"2":7,"10":3,"28":1,"49":2,"127":1}}],["authinterceptor",{"2":{"0":2}}],["auth",{"2":{"0":3,"88":1,"90":1,"127":2}}],["attribute",{"2":{"76":2,"95":1}}],["attributes",{"2":{"38":1,"76":1}}],["attempt",{"2":{"4":1}}],["atombutton",{"2":{"26":1}}],["atoms",{"2":{"26":3}}],["atomicon",{"2":{"26":1}}],["atomic",{"2":{"26":3,"27":2}}],["at",{"2":{"2":10,"3":1,"4":2,"7":1,"9":1,"10":2,"19":3,"24":2,"28":2,"29":4,"30":1,"31":3,"37":1,"39":5,"40":3,"49":1,"53":1,"89":1,"93":1,"106":1,"118":1,"132":1}}],["among",{"2":{"29":1}}],["amount",{"2":{"2":1,"31":1}}],["ambiguous",{"2":{"28":1}}],["amazon",{"2":{"1":2,"8":2}}],["adaptive",{"2":{"89":1,"112":1}}],["adapting",{"2":{"70":1}}],["adapter",{"2":{"83":1,"94":2,"124":1}}],["adapted",{"2":{"63":1}}],["adaptability",{"0":{"91":1},"2":{"31":1,"35":1,"38":1,"91":1}}],["advent",{"2":{"40":1}}],["advertising",{"2":{"32":1}}],["advance",{"2":{"40":1}}],["advantage",{"2":{"26":1,"28":1}}],["advantageous",{"2":{"26":1}}],["advisable",{"2":{"39":1}}],["adding",{"2":{"24":1,"26":1,"30":1,"86":1}}],["additional",{"2":{"5":1,"40":1}}],["addition",{"2":{"4":1,"7":2,"27":1,"30":1,"40":2,"124":1}}],["addextraspaceontop",{"2":{"19":1}}],["added",{"2":{"15":1,"40":1}}],["add",{"2":{"3":1,"7":1,"13":1,"19":1,"26":1,"31":3,"38":1,"48":1,"58":2,"71":2,"79":2,"83":6,"88":3}}],["adds",{"2":{"3":1,"38":1,"83":1,"88":1,"110":1,"111":1,"131":1}}],["addresponseinterceptor",{"2":{"0":2,"94":1}}],["adminlayout",{"2":{"26":2}}],["admin",{"2":{"2":2,"9":1}}],["acme",{"2":{"136":3}}],["acr",{"2":{"19":1}}],["across",{"2":{"11":1}}],["acn",{"2":{"19":1}}],["act",{"2":{"90":1}}],["activitybar",{"2":{"19":1}}],["actively",{"2":{"30":1}}],["active",{"2":{"12":1,"19":1}}],["actions",{"0":{"7":1,"105":1},"1":{"106":1,"107":1},"2":{"2":1,"5":2,"7":12,"19":1,"29":1,"39":1,"90":1,"106":1,"124":1,"127":1}}],["action",{"2":{"2":2,"7":9,"19":1,"83":1,"106":2}}],["actually",{"2":{"26":1,"89":1}}],["actual",{"2":{"7":1,"26":1,"40":1}}],["accepts",{"2":{"83":1}}],["accessing",{"2":{"19":1,"40":2,"55":1}}],["accessibility",{"2":{"38":1}}],["accessibilitysupport",{"2":{"19":1}}],["accessible",{"2":{"8":1}}],["accesses",{"2":{"1":1}}],["accessed",{"2":{"1":1,"3":1,"15":1,"107":1}}],["access",{"2":{"0":1,"1":5,"2":14,"3":13,"7":1,"10":1,"28":2,"49":1,"93":1}}],["accomplish",{"2":{"31":1}}],["accompanying",{"2":{"28":1}}],["according",{"2":{"28":1}}],["accordingly",{"2":{"3":1,"40":1}}],["accordian",{"2":{"10":1}}],["accordianpanel",{"2":{"10":1}}],["accountroutes",{"2":{"11":2}}],["account",{"2":{"0":1,"2":2,"11":2,"15":1,"17":1,"27":1,"40":1}}],["away",{"2":{"135":1}}],["await",{"2":{"0":3,"14":1,"31":2,"93":1}}],["aws",{"2":{"1":1,"51":1}}],["aside",{"2":{"36":1}}],["aspect",{"2":{"29":1,"30":1}}],["aspx",{"2":{"19":1}}],["astro",{"2":{"19":1,"89":1}}],["ashx",{"2":{"19":1}}],["ascx",{"2":{"19":1}}],["asax",{"2":{"19":1}}],["associated",{"2":{"28":1}}],["assets",{"2":{"15":5,"17":2,"26":4,"27":1,"95":1,"137":1}}],["assigned",{"2":{"2":1}}],["asked",{"2":{"50":1}}],["ask",{"2":{"2":1}}],["as",{"0":{"61":1,"122":1},"2":{"1":1,"2":5,"3":2,"4":1,"9":2,"10":2,"15":4,"17":3,"18":1,"19":4,"24":2,"26":4,"27":2,"28":5,"29":1,"30":2,"31":4,"37":1,"38":5,"39":2,"40":10,"50":1,"53":2,"59":1,"61":1,"63":2,"68":1,"69":1,"72":1,"76":1,"77":1,"80":1,"86":3,"89":4,"90":5,"93":1,"95":1,"107":1,"121":1}}],["asynchronicity",{"2":{"31":5}}],["asynchronous",{"2":{"0":1,"11":1,"93":1}}],["async",{"2":{"0":1,"31":2,"93":1,"94":1,"111":1}}],["abbreviations",{"0":{"49":1}}],["above",{"2":{"40":1,"76":1,"107":1,"119":1}}],["about",{"0":{"30":1,"51":1},"2":{"17":1,"24":1,"28":2,"39":1,"40":1,"61":1,"63":1,"136":1}}],["able",{"2":{"7":1,"30":1,"35":1,"90":1}}],["ability",{"2":{"1":4,"8":1,"39":1,"90":3,"125":1,"127":1}}],["absolutely",{"2":{"39":2}}],["absolute",{"2":{"1":1}}],["abstracting",{"2":{"0":1}}],["abstraction",{"2":{"0":1,"93":1,"124":1}}],["alt",{"2":{"56":2,"73":2,"75":1,"76":1}}],["alternate",{"2":{"31":1}}],["alternative",{"2":{"1":1,"11":1}}],["almost",{"2":{"31":1}}],["along",{"2":{"29":1,"40":1}}],["alg",{"2":{"19":1}}],["alias",{"2":{"18":5}}],["always",{"2":{"10":1,"15":1,"28":2,"32":1,"109":1}}],["already",{"2":{"1":1,"7":1,"29":1,"30":1,"31":1,"39":1}}],["also",{"2":{"1":2,"2":3,"5":1,"7":1,"8":2,"11":1,"18":3,"19":1,"28":4,"29":1,"30":4,"31":1,"33":1,"38":2,"39":4,"40":2,"48":1,"53":2,"63":1,"83":1,"93":1,"97":1,"130":1}}],["ally",{"2":{"19":3,"121":2}}],["allowcompoundwords",{"2":{"19":1}}],["allowing",{"2":{"5":1}}],["allowed",{"2":{"3":1,"40":1}}],["allows",{"2":{"3":4,"9":1,"19":2,"27":1,"28":1,"30":1,"31":2,"40":2,"76":1,"93":1,"95":1,"136":1,"137":1}}],["allow",{"2":{"2":2,"3":4,"8":1,"18":1,"89":1}}],["all",{"2":{"0":1,"2":1,"3":4,"19":1,"26":1,"28":3,"30":6,"31":2,"38":1,"39":2,"40":4,"85":1,"95":1,"112":1,"125":1,"130":2,"137":1,"138":1,"139":1}}],["arguments",{"2":{"111":1}}],["architect",{"2":{"51":1}}],["architecture",{"0":{"27":1,"31":1},"1":{"32":1,"33":1,"34":1,"35":1,"36":1,"37":1},"2":{"26":1,"27":1,"31":2,"49":1,"90":1}}],["architecturally",{"2":{"28":1}}],["architectural",{"0":{"9":1},"1":{"10":1,"11":1,"12":1,"13":1,"14":1},"2":{"24":1}}],["arranged",{"2":{"27":1}}],["arrays",{"2":{"118":1}}],["array",{"2":{"24":6,"30":2,"39":1}}],["articles",{"2":{"38":1}}],["article",{"2":{"20":1,"24":1,"29":1,"36":1}}],["artisan",{"2":{"19":1}}],["area",{"2":{"28":1}}],["are",{"2":{"1":3,"2":6,"3":2,"5":1,"7":4,"8":1,"9":2,"11":3,"15":6,"18":2,"19":4,"20":2,"21":1,"24":5,"26":1,"27":1,"28":8,"29":7,"30":5,"31":10,"38":2,"39":6,"40":6,"50":1,"53":2,"56":1,"63":1,"73":2,"81":2,"89":1,"91":1,"97":2,"99":1,"108":1,"112":1,"120":1,"124":1,"135":1,"137":1,"139":2}}],["around",{"2":{"0":1,"1":1,"28":1,"39":1,"40":1}}],["animated",{"2":{"59":2,"61":1,"68":1,"72":1,"75":1,"76":1,"80":2}}],["animation",{"2":{"11":1,"40":1}}],["answers",{"2":{"50":3}}],["answer",{"2":{"39":1,"48":1}}],["angular",{"2":{"30":2}}],["analytics",{"0":{"111":1,"131":1},"2":{"83":1,"88":1,"97":1,"124":2}}],["analysis",{"2":{"19":1,"46":1}}],["analogy",{"2":{"31":1,"39":1}}],["analogs",{"2":{"28":1}}],["analog",{"2":{"28":2}}],["annotations",{"2":{"19":1}}],["antony",{"2":{"19":1,"86":1}}],["antfu",{"2":{"19":3}}],["antialiased",{"2":{"19":1}}],["anti",{"2":{"11":1}}],["another",{"2":{"7":1,"28":5,"31":1,"33":1,"39":1,"40":1,"89":1,"93":1}}],["anyone",{"2":{"28":1}}],["anywhere",{"2":{"28":1}}],["anything",{"2":{"7":1}}],["any",{"2":{"1":1,"2":2,"3":2,"4":2,"10":1,"14":1,"15":1,"28":3,"30":1,"35":1,"38":1,"40":1,"48":1,"63":2,"65":1,"72":1,"119":1,"136":1}}],["an",{"0":{"18":1,"123":1},"1":{"124":1,"125":1,"126":1,"127":1},"2":{"0":1,"1":2,"2":3,"3":4,"4":3,"7":2,"8":1,"10":1,"11":3,"15":1,"18":3,"24":4,"26":1,"27":1,"28":8,"30":4,"31":3,"38":1,"39":7,"40":3,"53":1,"68":1,"69":1,"77":1,"89":3,"93":1,"95":1,"118":1,"121":2}}],["and",{"0":{"2":1,"11":1,"18":1,"24":1,"33":1,"36":1,"38":1,"40":1,"49":1,"52":1,"84":1},"1":{"12":1,"13":1,"14":1,"53":1},"2":{"0":6,"1":13,"2":24,"3":3,"4":3,"5":1,"7":22,"8":4,"9":6,"10":2,"11":7,"15":6,"18":6,"19":18,"20":3,"24":20,"26":17,"27":5,"28":39,"29":5,"30":22,"31":21,"32":3,"33":1,"34":4,"35":4,"36":1,"37":2,"38":20,"39":37,"40":31,"48":1,"49":2,"50":8,"53":5,"63":3,"70":2,"76":1,"81":1,"83":3,"85":1,"86":5,"88":3,"89":7,"90":10,"91":2,"94":1,"95":3,"106":5,"109":3,"110":1,"118":2,"119":1,"120":1,"121":2,"124":2,"127":8,"128":4,"130":2,"135":2,"136":1,"137":3,"138":1,"139":2}}],["axios",{"2":{"0":1,"89":1,"93":1}}],["apollo",{"2":{"19":2}}],["apache",{"2":{"8":1}}],["approximately",{"2":{"31":1}}],["approaches",{"2":{"30":1}}],["approach",{"2":{"11":1,"26":5,"38":1,"40":1,"89":1}}],["appveyor",{"2":{"19":2}}],["apps",{"2":{"26":1}}],["appsettings",{"2":{"19":2}}],["appsidebar",{"2":{"11":1}}],["apparent",{"2":{"17":1}}],["appfooter",{"2":{"11":2}}],["appheader>",{"2":{"116":1}}],["appheadersecond",{"2":{"116":1}}],["appheaderfirst",{"2":{"116":1}}],["appheader",{"2":{"11":2,"116":1}}],["app",{"2":{"11":3,"12":1,"14":1,"16":2,"26":10,"27":1,"40":3,"83":1,"91":1,"138":1}}],["applied",{"2":{"98":1}}],["applicants",{"2":{"30":1}}],["applications",{"2":{"2":1,"26":1,"31":1,"40":3,"89":1,"90":1}}],["application",{"0":{"15":1,"18":1,"27":1,"31":1,"84":1,"123":1},"1":{"16":1,"17":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"124":1,"125":1,"126":1,"127":1},"2":{"0":2,"1":2,"4":1,"7":1,"10":1,"11":2,"15":4,"18":3,"24":1,"26":5,"27":3,"28":4,"29":1,"30":1,"31":2,"32":1,"38":1,"39":1,"40":8,"49":3,"53":1,"83":1,"86":4,"89":3,"90":7,"93":2,"94":2,"95":1,"98":1,"124":6,"126":1,"127":4,"135":1,"136":2,"137":1,"138":3,"139":1}}],["applying",{"2":{"86":1}}],["apply",{"2":{"26":1}}],["apploader",{"0":{"12":1}}],["appleboy",{"2":{"7":3}}],["appeared",{"2":{"14":1}}],["appears",{"2":{"10":1,"29":1,"98":1,"116":1}}],["appear",{"2":{"3":1,"19":1,"40":1}}],["apidata",{"2":{"93":2}}],["apis",{"2":{"1":1,"4":1,"26":1,"39":1}}],["api",{"0":{"0":1,"92":1,"93":1},"1":{"93":1,"94":1},"2":{"0":13,"1":4,"4":1,"8":2,"14":1,"19":14,"24":4,"26":1,"27":2,"28":2,"30":1,"39":2,"40":1,"53":3,"55":1,"63":2,"83":2,"86":1,"88":1,"90":2,"93":5,"94":6,"124":3}}],["a",{"0":{"20":1,"84":1,"87":1,"122":1},"1":{"88":1,"89":1},"2":{"0":5,"1":24,"2":12,"3":11,"4":6,"5":8,"7":9,"8":9,"9":3,"10":1,"11":3,"14":1,"15":3,"17":4,"18":7,"19":15,"20":2,"24":19,"26":10,"27":10,"28":33,"29":5,"30":23,"31":17,"32":6,"35":2,"37":2,"38":6,"39":29,"40":33,"48":2,"53":5,"55":1,"56":1,"59":1,"63":5,"69":1,"76":1,"77":1,"83":2,"84":1,"85":1,"86":6,"88":2,"89":13,"90":8,"93":2,"94":1,"98":1,"106":3,"107":2,"110":1,"118":6,"119":2,"120":1,"125":1,"136":1,"137":1,"138":2}}]],"serializationVersion":2}';export{e as default}; diff --git a/assets/chunks/@localSearchIndexru.0ouXapIQ.js b/assets/chunks/@localSearchIndexru.0ouXapIQ.js new file mode 100644 index 000000000..a151f30a0 --- /dev/null +++ b/assets/chunks/@localSearchIndexru.0ouXapIQ.js @@ -0,0 +1 @@ +const t='{"documentCount":592,"nextId":592,"documentIds":{"0":"/ru/articles/#наши-статьи-на-других-ресурсах","1":"/ru/arty-crafty/analysis/architecture-and-design.html#архитектура-и-дизаин","2":"/ru/arty-crafty/analysis/architecture-and-design.html#упрощение-сложного","3":"/ru/arty-crafty/analysis/architecture-and-design.html#абстракция-и-инкапсуляция","4":"/ru/arty-crafty/analysis/architecture-and-design.html#разбиение-проекта-на-подсистемы","5":"/ru/arty-crafty/analysis/architecture-and-design.html#package-diagram","6":"/ru/arty-crafty/analysis/architecture-and-design.html#клиент-серверная-архитектура","7":"/ru/arty-crafty/analysis/architecture-and-design.html#routing","8":"/ru/arty-crafty/analysis/business-analysis.html#бизнес-анализ","9":"/ru/arty-crafty/analysis/business-analysis.html#границы-проекта","10":"/ru/arty-crafty/analysis/business-analysis.html#существующие-решения","11":"/ru/arty-crafty/analysis/business-analysis.html#витрина","12":"/ru/arty-crafty/analysis/business-analysis.html#магазин","13":"/ru/arty-crafty/analysis/business-analysis.html#маркетплеис","14":"/ru/arty-crafty/analysis/business-analysis.html#use-case-диаграмма","15":"/ru/arty-crafty/analysis/data-model.html#модель-данных","16":"/ru/arty-crafty/analysis/data-model.html#категория-и-товар","17":"/ru/arty-crafty/analysis/data-model.html#типы-баз-данных","18":"/ru/arty-crafty/analysis/data-model.html#_1-json","19":"/ru/arty-crafty/analysis/data-model.html#_1-json-1","20":"/ru/arty-crafty/analysis/tech-stack.html#техническии-стек-проекта","21":"/ru/arty-crafty/analysis/research.html#анализ-рынка","22":"/ru/arty-crafty/analysis/research.html#изучение-конкурентов","23":"/ru/arty-crafty/analysis/research.html#саиты-аналоги","24":"/ru/arty-crafty/analysis/ui-design.html#ui-дизаин","25":"/ru/arty-crafty/analysis/ui-design.html#дизаин-саита","26":"/ru/arty-crafty/analysis/ui-design.html#творческие-способности","27":"/ru/arty-crafty/analysis/ui-layout.html#ui-макет","28":"/ru/arty-crafty/analysis/ui-layout.html#основные-компоненты-страницы","29":"/ru/arty-crafty/analysis/ui-layout.html#header","30":"/ru/arty-crafty/analysis/ui-layout.html#sidebar","31":"/ru/arty-crafty/analysis/ui-layout.html#main-panel","32":"/ru/arty-crafty/analysis/ui-layout.html#footer","33":"/ru/arty-crafty/analysis/ui-layout.html#мобильная-версия","34":"/ru/arty-crafty/analysis/ui-layout.html#слабая-связанность","35":"/ru/arty-crafty/analysis/ui-layout.html#адаптивность","36":"/ru/arty-crafty/analysis/ui-layout.html#вывод","37":"/ru/arty-crafty/backend/baas-choosing.html#выбор-baas-или-cms","38":"/ru/arty-crafty/backend/baas-choosing.html#json-фаилы-товаров","39":"/ru/arty-crafty/backend/baas-choosing.html#выбор-cms","40":"/ru/arty-crafty/backend/baas-choosing.html#сервисы-supabase","41":"/ru/arty-crafty/backend/baas-choosing.html#адаптеры","42":"/ru/arty-crafty/backend/hoppscotch.html#hoppscotch","43":"/ru/arty-crafty/backend/hoppscotch.html#работа-с-api","44":"/ru/arty-crafty/backend/hoppscotch.html#endpoints","45":"/ru/arty-crafty/backend/db-data-model.html#модель-данных-в-базе-данных","46":"/ru/arty-crafty/backend/db-data-model.html#сущности","47":"/ru/arty-crafty/backend/db-data-model.html#данные","48":"/ru/arty-crafty/backend/db-data-model.html#categories-table","49":"/ru/arty-crafty/backend/db-data-model.html#products-table","50":"/ru/arty-crafty/backend/db-data-model.html#category-product-join-table","51":"/ru/arty-crafty/backend/db-data-model.html#поиск-по-json-полям","52":"/ru/arty-crafty/backend/supabase-api.html#supabase-rest-api","53":"/ru/arty-crafty/backend/supabase-api.html#supabase-sdk","54":"/ru/arty-crafty/backend/supabase-api.html#установка","55":"/ru/arty-crafty/backend/supabase-api.html#использование","56":"/ru/arty-crafty/backend/supabase-api.html#supabase-rest-api-1","57":"/ru/arty-crafty/backend/supabase.html#supabase","58":"/ru/arty-crafty/backend/supabase.html#создание-проекта","59":"/ru/arty-crafty/backend/supabase.html#безопасность-и-доступ","60":"/ru/arty-crafty/#онлаин-маркетплеис","61":"/ru/arty-crafty/#проект-arty-crafty","62":"/ru/arty-crafty/#причины","63":"/ru/arty-crafty/#цель","64":"/ru/arty-crafty/#что-здесь-будет","65":"/ru/arty-crafty/#для-чего","66":"/ru/arty-crafty/introduction/development-stages.html#план-работы","67":"/ru/arty-crafty/introduction/development-stages.html#стадии-разработки-по","68":"/ru/arty-crafty/introduction/development-stages.html#бизнес-анализ","69":"/ru/arty-crafty/introduction/development-stages.html#архитектура-и-дизаин","70":"/ru/arty-crafty/introduction/development-stages.html#разработка","71":"/ru/arty-crafty/introduction/development-stages.html#развертывание","72":"/ru/arty-crafty/introduction/development-stages.html#тестирование-и-qa","73":"/ru/arty-crafty/introduction/development-stages.html#документирование","74":"/ru/arty-crafty/introduction/development-stages.html#поддержка","75":"/ru/arty-crafty/introduction/repository.html#репозитории-и-саит-проекта","76":"/ru/arty-crafty/introduction/goals.html#цели-и-задачи-проекта","77":"/ru/arty-crafty/introduction/goals.html#цели-данного-проекта","78":"/ru/arty-crafty/introduction/goals.html#нефункциональные-требования-software-quality-attributes","79":"/ru/arty-crafty/introduction/goals.html#общие-функциональные-требования","80":"/ru/arty-crafty/introduction/goals.html#этапы-развития-приложения-приблизительно","81":"/ru/arty-crafty/showcase-data/api-service-adapter.html#работа-с-api-на-фронтенде","82":"/ru/arty-crafty/showcase-data/api-service-adapter.html#supabase-адаптер","83":"/ru/arty-crafty/showcase-data/api-service-adapter.html#api-products-ts","84":"/ru/arty-crafty/showcase-data/product-page.html#слаидер-productview","85":"/ru/arty-crafty/showcase-data/product-page.html#embla-carousel","86":"/ru/arty-crafty/showcase-data/product-page.html#productview","87":"/ru/arty-crafty/showcase-data/mobile-menu.html#мобильное-меню-css","88":"/ru/arty-crafty/showcase-data/mobile-menu.html#iconbutton","89":"/ru/arty-crafty/showcase-data/mobile-menu.html#scss-css","90":"/ru/arty-crafty/showcase-data/mobile-menu.html#tag-и-cmv","91":"/ru/arty-crafty/showcase-data/typescript.html#typescript","92":"/ru/arty-crafty/showcase-data/typescript.html#index-d-ts","93":"/ru/arty-crafty/showcase-data/typescript.html#типизация","94":"/ru/arty-crafty/showcase-data/vueuse.html#vueuse","95":"/ru/arty-crafty/showcase-data/vueuse.html#uselocalstorage","96":"/ru/arty-crafty/showcase-data/vueuse.html#библиотека-vueuse","97":"/ru/arty-crafty/showcase/codeium.html#codeium","98":"/ru/arty-crafty/showcase/codeium.html#автокомплит","99":"/ru/arty-crafty/showcase/codeium.html#чат-бот","100":"/ru/arty-crafty/showcase/codeium.html#explain-refactor-jsdoc","101":"/ru/arty-crafty/showcase/codeium.html#explain-problem","102":"/ru/arty-crafty/showcase/codeium.html#вывод","103":"/ru/arty-crafty/showcase/customization.html#кастомизация","104":"/ru/arty-crafty/showcase/customization.html#персонализация","105":"/ru/arty-crafty/showcase/customization.html#views","106":"/ru/arty-crafty/showcase/customization.html#routes","107":"/ru/arty-crafty/showcase/customization.html#header","108":"/ru/arty-crafty/showcase/customization.html#sidebar","109":"/ru/arty-crafty/showcase/customization.html#небольшои-рефакторинг","110":"/ru/arty-crafty/showcase/favourites.html#избранное","111":"/ru/arty-crafty/showcase/favourites.html#иконка-на-карточке-товара","112":"/ru/arty-crafty/showcase/favourites.html#композабл-usefavourites","113":"/ru/arty-crafty/showcase/favourites.html#сохранение-между-сессиями","114":"/ru/arty-crafty/showcase/favourites.html#бэджик","115":"/ru/arty-crafty/showcase/favourites.html#tag-и-cmv","116":"/ru/arty-crafty/showcase/product-category.html#категория-товаров","117":"/ru/arty-crafty/showcase/product-category.html#layout","118":"/ru/arty-crafty/showcase/product-category.html#данные-и-api","119":"/ru/arty-crafty/showcase/project-setup.html#создание-проекта","120":"/ru/arty-crafty/showcase/project-setup.html#репозитории-на-github","121":"/ru/arty-crafty/showcase/project-setup.html#vue-webapp","122":"/ru/backend/api.html#api-сервис","123":"/ru/backend/auth.html#аутентификация-и-авторизация","124":"/ru/backend/backend.html#варианты-задеиствовать-свои-бэкенд-для-фронтендера","125":"/ru/backend/cors.html#cors","126":"/ru/backend/protocols.html#протоколы-to-rest-или-не-rest","127":"/ru/book/Appendix__Migrating_from_Vue_2.html#приложение-миграция-с-vue-2","128":"/ru/book/Appendix__Migrating_from_Vue_2.html#другои-способ-загрузки-и-запуска-приложения","129":"/ru/book/Appendix__Migrating_from_Vue_2.html#регистрация-глобальных-компонентов-плагинов-и-так-далее","130":"/ru/book/Appendix__Migrating_from_Vue_2.html#своиство-data-теперь-всегда-является-функциеи","131":"/ru/book/Appendix__Migrating_from_Vue_2.html#больше-реактивных-возможностеи","132":"/ru/book/Appendix__Migrating_from_Vue_2.html#изменения-в-v-model-props-и-events","133":"/ru/book/Appendix__Migrating_from_Vue_2.html#удалена-совместимость-со-старыми-браузерами","134":"/ru/book/Appendix__Migrating_from_Vue_2.html#изменения-в-организации-каталогов-и-фаилов","135":"/ru/book/Appendix__Migrating_from_Vue_2.html#изменения-в-роутере-и-state-manager","136":"/ru/book/Appendix__Migrating_from_Vue_2.html#новые-компоненты-и-другие-изменения","137":"/ru/book/Appendix__Migrating_from_Vue_2.html#другие-изменения","138":"/ru/book/Appendix__Migrating_from_Vue_2.html#итог","139":"/ru/book/Chapter_10__Deploying_Your_Application.html#развертывание-приложения","140":"/ru/book/Chapter_10__Deploying_Your_Application.html#технические-требования","141":"/ru/book/Chapter_10__Deploying_Your_Application.html#что-включает-в-себя-публикация-веб-приложения","142":"/ru/book/Chapter_10__Deploying_Your_Application.html#домены-серверы-доменных-имен-dns-и-записи-dns","143":"/ru/book/Chapter_10__Deploying_Your_Application.html#размышления-о-создании-приложения-для-развертывания","144":"/ru/book/Chapter_10__Deploying_Your_Application.html#chapter-5-to-do-spa-src-router-index-js","145":"/ru/book/Chapter_10__Deploying_Your_Application.html#опции-и-конфигурации-веб-сервера","146":"/ru/book/Chapter_10__Deploying_Your_Application.html#конфигурация-http-сервера-apache","147":"/ru/book/Chapter_10__Deploying_Your_Application.html#htaccess","148":"/ru/book/Chapter_10__Deploying_Your_Application.html#настроика-сервера-nginx","149":"/ru/book/Chapter_10__Deploying_Your_Application.html#etc-nginx-sites-available-default","150":"/ru/book/Chapter_10__Deploying_Your_Application.html#другие-серверы","151":"/ru/book/Chapter_10__Deploying_Your_Application.html#перенос-фаилов-на-сервер","152":"/ru/book/Chapter_10__Deploying_Your_Application.html#защита-веб-приложения-с-помощью-let-s-encrypt","153":"/ru/book/Chapter_10__Deploying_Your_Application.html#подведение-итогов","154":"/ru/book/Chapter_10__Deploying_Your_Application.html#вопросы-для-проверки","155":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#бонусная-глава-шаблоны-ux","156":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#технические-требования","157":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#ui-дизаин-против-ux-дизаина","158":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#принципы-проектирования-пользовательского-интерфеиса","159":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#достаточныи-контраст-или-различие-между-элементами","160":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#стимулировать-повторение-и-быть-последовательным","161":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#внимательно-следите-за-выравниванием-и-направлением","162":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#используите-близость-и-расстояние-чтобы-показать-естественные-группы","163":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#законы-проектирования-пользовательского-интерфеиса","164":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#закон-фитта","165":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#закон-хика","166":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#восемь-правил-бена-шнаидермана","167":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#принципы-проектирования-ux","168":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#общие-шаблоны-для-работы-с-данными","169":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#элементы-ввода-html","170":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#чекбоксы-радиокнопки-и-тумблеры","171":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#чипы-таблетки-или-теги","172":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#подсказки-tooltips","173":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#уведомляющие-точки-пузырьки-метки-или-значки","174":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#тостовые-уведомления","175":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#карусель-или-слаидеры-изображении","176":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#панели-прогресса-progress-bars-и-спиннеры","177":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#components-spinner-vue","178":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#пагинация-пеиджер-и-бесконечныи-скроллер","179":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#src-components-infinitescroller-vue","180":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#общие-шаблоны-для-взаимодеиствия-и-навигации","181":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#размещение-меню","182":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#хлебные-крошки-breadcrumbs","183":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#модальные-диалоги","184":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#иконки-меню","185":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#аккордеонные-меню","186":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#мегаменю","187":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#выпадающие-меню","188":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#общие-шаблоны-для-организации-контента","189":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#отзывчивые-responsive-приложения","190":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#домашняя-ссылка","191":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#главная-hero-секция-призыв-к-деиствию-call-to-action-и-иконки-социальных-сетеи","192":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#другие-шаблоны","193":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#темные-шаблоны","194":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#вопросы-с-подвохом","195":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#проникновение-в-корзину","196":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#приманка-для-тараканов-roach-motels","197":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#privacy-zuckering","198":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#предотвращение-сравнения-цен","199":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#ненаправленность","200":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#скрытые-расходы","201":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#приманка-и-подмена","202":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#подтверждение-позора-confirm-shaming","203":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#замаскированная-реклама","204":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#дружественныи-спам","205":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#подведение-итогов","206":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#вопросы-для-проверки","207":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#установка-рабочего-проекта","208":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#технические-требования","209":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#настроика-проекта-и-инструменты","210":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#структура-папок-и-ее-модификации","211":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#интеграция-с-css-фреимворками","212":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#фреимворк-w3-css","213":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#fontawesome-это-просто-замечательно","214":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#опции-конфигурации-vite","215":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#приложение-to-do","216":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#app-vue","217":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#todos-vue","218":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#краткая-критика-нашего-приложения-to-do","219":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#подведение-итогов","220":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#вопросы-для-проверки","221":"/ru/book/Chapter_1__The_Vue_3_Framework.html#фреимворк-vue-3","222":"/ru/book/Chapter_1__The_Vue_3_Framework.html#прогрессивныи-фреимворк","223":"/ru/book/Chapter_1__The_Vue_3_Framework.html#использование-vue-в-веб-приложении","224":"/ru/book/Chapter_1__The_Vue_3_Framework.html#путь-сборщика-лучшии-путь","225":"/ru/book/Chapter_1__The_Vue_3_Framework.html#понимание-однофаиловых-компонентов","226":"/ru/book/Chapter_1__The_Vue_3_Framework.html#разные-варианты-options-composition-и-script-setup-api","227":"/ru/book/Chapter_1__The_Vue_3_Framework.html#изучение-встроенных-директив-в-vue-3","228":"/ru/book/Chapter_1__The_Vue_3_Framework.html#v-bind-сокращение","229":"/ru/book/Chapter_1__The_Vue_3_Framework.html#v-show","230":"/ru/book/Chapter_1__The_Vue_3_Framework.html#v-if-v-else-и-v-else-if","231":"/ru/book/Chapter_1__The_Vue_3_Framework.html#v-for-и-key","232":"/ru/book/Chapter_1__The_Vue_3_Framework.html#v-model","233":"/ru/book/Chapter_1__The_Vue_3_Framework.html#v-on-и-сокращение","234":"/ru/book/Chapter_1__The_Vue_3_Framework.html#встроенные-компоненты","235":"/ru/book/Chapter_1__The_Vue_3_Framework.html#кодовые-соглашения-code-conventions-в-книге","236":"/ru/book/Chapter_1__The_Vue_3_Framework.html#переменные-и-пропсы","237":"/ru/book/Chapter_1__The_Vue_3_Framework.html#константы","238":"/ru/book/Chapter_1__The_Vue_3_Framework.html#имена-классов-и-компонентов","239":"/ru/book/Chapter_1__The_Vue_3_Framework.html#функции-методы-события-и-имена-фаилов","240":"/ru/book/Chapter_1__The_Vue_3_Framework.html#экземпляры","241":"/ru/book/Chapter_1__The_Vue_3_Framework.html#подведение-итогов","242":"/ru/book/Chapter_1__The_Vue_3_Framework.html#вопросы-для-проверки","243":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#композиция-пользовательского-интерфеиса-с-помощью-компонентов","244":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#технические-требования","245":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#составление-страницы-с-помощью-компонентов","246":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#этап-1-определение-макетов-и-элементов-пользовательского-интерфеиса","247":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#шаг-2-определение-связеи-потока-данных-взаимодеиствии-и-событии","248":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#шаг-3-определение-элементов-пользовательскои-интерактивности-входов-диалогов-уведомлении-и-т-д","249":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#шаг-4-выявление-шаблонов-проектирования-и-компромиссов","250":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#компоненты-в-деталях","251":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#локальные-и-глобальные-компоненты","252":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#статическии-асинхронныи-и-динамическии-импорт","253":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#пропсы-события-и-директива-v-model","254":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#настраиваемые-контроллеры-ввода","255":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#инъекция-зависимости-с-помощью-provide-и-inject","256":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#специальные-компоненты","257":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#слоты-слоты-и-еще-раз-слоты","258":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#композабл-функции-composables-и-миксины","259":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#динамические-компоненты-с-помощью-component-is","260":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#реальныи-пример-плагин-модалов","261":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#настроика-нашего-проекта","262":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#конструкция","263":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#реализация","264":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#реализация-нашего-нового-приложения-to-do","265":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#небольшая-критика-нашего-нового-приложения-to-do","266":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#подведение-итогов","267":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#вопросы-для-проверки","268":"/ru/book/Chapter_6__Progressive_Web_Applications.html#прогрессивные-веб-приложения","269":"/ru/book/Chapter_6__Progressive_Web_Applications.html#технические-требования","270":"/ru/book/Chapter_6__Progressive_Web_Applications.html#pwa-или-устанавливаемые-spa","271":"/ru/book/Chapter_6__Progressive_Web_Applications.html#увеличение-spa-до-уровня-pwa","272":"/ru/book/Chapter_6__Progressive_Web_Applications.html#фаил-манифеста","273":"/ru/book/Chapter_6__Progressive_Web_Applications.html#необходимо","274":"/ru/book/Chapter_6__Progressive_Web_Applications.html#рекомендуется","275":"/ru/book/Chapter_6__Progressive_Web_Applications.html#описательные","276":"/ru/book/Chapter_6__Progressive_Web_Applications.html#тестирование-манифеста","277":"/ru/book/Chapter_6__Progressive_Web_Applications.html#подсказка-к-установке-install-prompt","278":"/ru/book/Chapter_6__Progressive_Web_Applications.html#service-workers","279":"/ru/book/Chapter_6__Progressive_Web_Applications.html#плагин-vite-pwa","280":"/ru/book/Chapter_6__Progressive_Web_Applications.html#тестирование-показателеи-pwa-с-помощью-google-lighthouse","281":"/ru/book/Chapter_6__Progressive_Web_Applications.html#подведение-итогов","282":"/ru/book/Chapter_6__Progressive_Web_Applications.html#вопросы-для-проверки","283":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#принципы-и-шаблоны-проектирования-программного-обеспечения","284":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#каковы-принципы-проектирования-программного-обеспечения","285":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#неполныи-список-принципов-проектирования","286":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#separation-of-concerns-разделение-ответственности","287":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#composition-over-inheritance-композиция-над-наследованием","288":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#single-responsibility-principle-принцип-единои-ответственности","289":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#encapsulation-инкапсуляция","290":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#kic-keep-it-clean","291":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#dry-–-don-t-repeat-yourself-не-повторяися","292":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#kiss-keep-it-simple-and-short-держи-это-простым-и-коротким","293":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#code-for-the-next-пиши-код-для-следующего","294":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#что-такое-шаблон-проектирования-программного-обеспечения","295":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#краткии-справочныи-список-шаблонов","296":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#порождающие-шаблоны","297":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#поведенческие-шаблоны","298":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#структурные-шаблоны","299":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#асинхронные-шаблоны","300":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#шаблон-singleton","301":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#когда-его-использовать","302":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#реализация","303":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#метод-1","304":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#метод-2","305":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#шаблон-dependency-injection-инъекция-зависимостеи","306":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-dependency-injection-1-js","307":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-dependency-injection-2-js","308":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-dependency-injection-3-js","309":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-dependency-injection-4-js","310":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-dependency-injection-5-js","311":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-dependency-injection-6-js","312":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-dependency-injection-7-js","313":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#шаблон-factory-фабрика","314":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#шаблон-observer-наблюдатель","315":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-observer-1-js","316":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#шаблон-command-команда","317":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-command-1-js","318":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#шаблон-proxy","319":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-proxy-1-js","320":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#шаблон-decorator-декоратор","321":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-decorator-1-vue","322":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-decorator-2-vue","323":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#шаблон-facade-фасад","324":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#шаблон-callback-обратныи-вызов","325":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-callback-1-js-синхронныи-фибоначчи","326":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#шаблон-promise-обещаниe","327":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#подведение-итогов","328":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#вопросы-для-проверки","329":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#многопоточность-с-web-workers","330":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#технические-требования","331":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#введение-в-web-workers","332":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#реализация-web-worker","333":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#my-worker-js","334":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#main-js","335":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#шаблон-business-delegate","336":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#шаблон-dispatcher","337":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#установка-конвеиера-взаимодеиствия-с-веб-рабочим","338":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#services-webworker-js","339":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#webworker-index-js","340":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#webworker-services-test-js","341":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#получение-доступа-к-indexeddb-с-помощью-dexiejs-в-web-worker","342":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#src-components-dbnotes-vue","343":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#src-webworker-services-dbservice-js","344":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#src-webworker-index-js","345":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#webworker-services-network-js","346":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#webworker-index-js-1","347":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#src-components-networkcommunication-vue","348":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#простои-nodejs-сервер-для-тестирования","349":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#server-index-js","350":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#подведение-итогов","351":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#вопросы-для-проверки","352":"/ru/book/Chapter_5__Single-Page_Applications.html#одностраничные-приложения","353":"/ru/book/Chapter_5__Single-Page_Applications.html#технические-требования","354":"/ru/book/Chapter_5__Single-Page_Applications.html#что-такое-spa","355":"/ru/book/Chapter_5__Single-Page_Applications.html#vue-3-роутер","356":"/ru/book/Chapter_5__Single-Page_Applications.html#установка","357":"/ru/book/Chapter_5__Single-Page_Applications.html#новое-приложение-to-do","358":"/ru/book/Chapter_5__Single-Page_Applications.html#определение-маршрутов-и-объект-router","359":"/ru/book/Chapter_5__Single-Page_Applications.html#src-router-index-js","360":"/ru/book/Chapter_5__Single-Page_Applications.html#src-main-js","361":"/ru/book/Chapter_5__Single-Page_Applications.html#шаблонные-компоненты-маршрутизатора","362":"/ru/book/Chapter_5__Single-Page_Applications.html#app-vue","363":"/ru/book/Chapter_5__Single-Page_Applications.html#вложенные-маршруты-именованные-представления-и-программная-навигация","364":"/ru/book/Chapter_5__Single-Page_Applications.html#определение-вложенных-маршрутов","365":"/ru/book/Chapter_5__Single-Page_Applications.html#src-views-directory-vue-component-lines-13-18","366":"/ru/book/Chapter_5__Single-Page_Applications.html#push","367":"/ru/book/Chapter_5__Single-Page_Applications.html#replace","368":"/ru/book/Chapter_5__Single-Page_Applications.html#go","369":"/ru/book/Chapter_5__Single-Page_Applications.html#исследование-шаблонов-аутентификации","370":"/ru/book/Chapter_5__Single-Page_Applications.html#простая-аутентификация-по-имени-пользователя-и-паролю","371":"/ru/book/Chapter_5__Single-Page_Applications.html#openid-и-сторонняя-аутентификация","372":"/ru/book/Chapter_5__Single-Page_Applications.html#_1","373":"/ru/book/Chapter_5__Single-Page_Applications.html#_2","374":"/ru/book/Chapter_5__Single-Page_Applications.html#_3","375":"/ru/book/Chapter_5__Single-Page_Applications.html#беспарольная-аутентификация-или-аутентификация-по-одноразовому-паролю-otp","376":"/ru/book/Chapter_5__Single-Page_Applications.html#_2fa-двухфакторная-аутентификация","377":"/ru/book/Chapter_5__Single-Page_Applications.html#web3-аутентификация","378":"/ru/book/Chapter_5__Single-Page_Applications.html#подведение-итогов","379":"/ru/book/Chapter_5__Single-Page_Applications.html#вопросы-для-проверки","380":"/ru/book/#vue-js-3-шаблоны-проектирования-и-лучшие-практики","381":"/ru/book/#здесь-представлен-перевод-книги-vue-js-3-design-patterns-and-best-practices-на-русскии-язык","382":"/ru/book/#предисловие","383":"/ru/book/#для-кого-эта-книга","384":"/ru/book/#чтобы-получить-максимальную-пользу-от-этои-книги","385":"/ru/book/#купить-книгу","386":"/ru/book/#скачать-фаилы-кода-примеров","387":"/ru/book/#код-в-деиствии","388":"/ru/book/summary.html#что-включает-в-себя-эта-книга","389":"/ru/book/summary.html#глава-1-фреимворк-vue-3","390":"/ru/book/summary.html#глава-2-принципы-и-шаблоны-проектирования-программного-обеспечения","391":"/ru/book/summary.html#глава-3-создание-рабочего-проекта","392":"/ru/book/summary.html#глава-4-композиция-пользовательского-интерфеиса-с-помощью-компонентов","393":"/ru/book/summary.html#глава-5-одностраничные-приложения","394":"/ru/book/summary.html#глава-6-прогрессивные-веб-приложения","395":"/ru/book/summary.html#глава-7-управление-потоками-данных","396":"/ru/book/summary.html#глава-8-многопоточность-с-помощью-web-workers","397":"/ru/book/summary.html#глава-9-тестирование-и-контроль-исходных-текстов","398":"/ru/book/summary.html#глава-10-развертывание-приложения","399":"/ru/book/summary.html#глава-11-ux-patterns","400":"/ru/book/summary.html#приложение-миграция-с-vue-2-на-vue-3","401":"/ru/deployment/ci-cd.html#ci-cd","402":"/ru/deployment/docker.html#docker","403":"/ru/book/Chapter_7__Data_Flow_Management.html#управление-потоками-данных","404":"/ru/book/Chapter_7__Data_Flow_Management.html#технические-требования","405":"/ru/book/Chapter_7__Data_Flow_Management.html#основное-взаимодеиствие-компонентов","406":"/ru/book/Chapter_7__Data_Flow_Management.html#basic-parentbasic-vue","407":"/ru/book/Chapter_7__Data_Flow_Management.html#basic-child-vue","408":"/ru/book/Chapter_7__Data_Flow_Management.html#реализация-шины-событии-с-помощью-шаблонов-singleton-и-observer","409":"/ru/book/Chapter_7__Data_Flow_Management.html#services-messagebus-js","410":"/ru/book/Chapter_7__Data_Flow_Management.html#bus-child-vue","411":"/ru/book/Chapter_7__Data_Flow_Management.html#реализация-базового-реактивного-состояния","412":"/ru/book/Chapter_7__Data_Flow_Management.html#service-simplestate-js","413":"/ru/book/Chapter_7__Data_Flow_Management.html#реализация-мощного-реактивного-стора-с-помощью-pinia","414":"/ru/book/Chapter_7__Data_Flow_Management.html#options-api-basic-store","415":"/ru/book/Chapter_7__Data_Flow_Management.html#stores-counter-js","416":"/ru/book/Chapter_7__Data_Flow_Management.html#main-js","417":"/ru/book/Chapter_7__Data_Flow_Management.html#pinia-childpinia-vue","418":"/ru/book/Chapter_7__Data_Flow_Management.html#хранилища-данных-браузера-сессионные-локальные-и-indexeddb","419":"/ru/book/Chapter_7__Data_Flow_Management.html#экспериментируем-с-шаблонами-reactivity-и-proxies","420":"/ru/book/Chapter_7__Data_Flow_Management.html#services-sessionstorage-js","421":"/ru/book/Chapter_7__Data_Flow_Management.html#session-storage-childsession-vue","422":"/ru/book/Chapter_7__Data_Flow_Management.html#подведение-итогов","423":"/ru/book/Chapter_7__Data_Flow_Management.html#вопросы-для-проверки","424":"/ru/deployment/github-actions.html#github-actions","425":"/ru/deployment/hosting.html#хостинг","426":"/ru/development/architectural-patterns.html#архитектурные-решения","427":"/ru/development/architectural-patterns.html#плоская","428":"/ru/development/architectural-patterns.html#атомарныи-дизаин","429":"/ru/development/architectural-patterns.html#модульныи-дизаин","430":"/ru/development/architectural-patterns.html#feature-sliced-design","431":"/ru/development/architectural-patterns.html#микрофронтенды","432":"/ru/development/architectural-patterns.html#use-cases","433":"/ru/development/architectural-patterns.html#лучшие-практики-и-соображения","434":"/ru/development/architectural-patterns.html#apploader-vue","435":"/ru/development/architectural-patterns.html#useapploader-ts","436":"/ru/development/architectural-patterns.html#somecomponent","437":"/ru/development/assets.html#ресурсы-приложения","438":"/ru/development/assets.html#baseicon","439":"/ru/development/assets.html#icons-js","440":"/ru/development/building.html#создание-и-сборка-приложения","441":"/ru/development/ide.html#настроика-ide","442":"/ru/development/libraries.html#подскажите-удобную-библиотеку","443":"/ru/development/misc.html#полезные-советы","444":"/ru/development/misc.html#карусель-или-слаидер","445":"/ru/development/misc.html#toaster","446":"/ru/development/misc.html#дата-и-время","447":"/ru/development/project-structure.html#структура-vue-3-проекта","448":"/ru/development/project-structure.html#какие-бывают-структуры-фаилов-для-vue-3-проектов","449":"/ru/development/project-structure.html#подходящая-структура-для-vue-3-проекта","450":"/ru/development/stores.html#state-management-во-vue-3","451":"/ru/book/Chapter_9__Testing_and_Source_Control.html#тестирование-и-системы-контроля-версии","452":"/ru/book/Chapter_9__Testing_and_Source_Control.html#технические-требования","453":"/ru/book/Chapter_9__Testing_and_Source_Control.html#что-такое-тестирование-и-tdd","454":"/ru/book/Chapter_9__Testing_and_Source_Control.html#что-тестировать","455":"/ru/book/Chapter_9__Testing_and_Source_Control.html#наш-базовыи-пример-приложения","456":"/ru/book/Chapter_9__Testing_and_Source_Control.html#установка-и-использование-vitest","457":"/ru/book/Chapter_9__Testing_and_Source_Control.html#src-tests-fibonacci-test-js","458":"/ru/book/Chapter_9__Testing_and_Source_Control.html#специальныи-случаи-утверждения-намеренная-ошибка","459":"/ru/book/Chapter_9__Testing_and_Source_Control.html#специальныи-случаи-утверждения-асинхронныи-код","460":"/ru/book/Chapter_9__Testing_and_Source_Control.html#установка-vue-test-utils","461":"/ru/book/Chapter_9__Testing_and_Source_Control.html#src-tests-fibonaccioutput-test-js","462":"/ru/book/Chapter_9__Testing_and_Source_Control.html#src-tests-fibonacciinput-test-js","463":"/ru/book/Chapter_9__Testing_and_Source_Control.html#in-source-тестирование","464":"/ru/book/Chapter_9__Testing_and_Source_Control.html#покрытие","465":"/ru/book/Chapter_9__Testing_and_Source_Control.html#интерфеис-vitest","466":"/ru/book/Chapter_9__Testing_and_Source_Control.html#что-такое-source-control-и-зачем-он-нужен","467":"/ru/book/Chapter_9__Testing_and_Source_Control.html#управление-исходными-текстами-с-помощью-git","468":"/ru/book/Chapter_9__Testing_and_Source_Control.html#установка-в-системах-windows","469":"/ru/book/Chapter_9__Testing_and_Source_Control.html#установка-в-системах-linux","470":"/ru/book/Chapter_9__Testing_and_Source_Control.html#установка-в-системах-macos","471":"/ru/book/Chapter_9__Testing_and_Source_Control.html#использование-git","472":"/ru/book/Chapter_9__Testing_and_Source_Control.html#chapter-10-gitignore","473":"/ru/book/Chapter_9__Testing_and_Source_Control.html#управление-ветвями-и-слияниями","474":"/ru/book/Chapter_9__Testing_and_Source_Control.html#конфликты-при-слиянии","475":"/ru/book/Chapter_9__Testing_and_Source_Control.html#работа-с-удаленными-репозиториями","476":"/ru/book/Chapter_9__Testing_and_Source_Control.html#непрерывная-интеграция-и-доставка","477":"/ru/book/Chapter_9__Testing_and_Source_Control.html#подведение-итогов","478":"/ru/book/Chapter_9__Testing_and_Source_Control.html#вопросы-для-проверки","479":"/ru/development/testing.html#тестирование","480":"/ru/development/web-components.html#web-components","481":"/ru/development/web-components.html#custom-elements","482":"/ru/frontend/about-frameworks.html#о-фронтенд-фреимворках","483":"/ru/frontend/architecture.html#архитектура-фронтэнд-приложении","484":"/ru/frontend/architecture.html#избегаите-зависимостеи","485":"/ru/frontend/architecture.html#используите-обертки-над-компонентами-ui-библиотек-и-сторонних-утилит","486":"/ru/frontend/architecture.html#регулярныи-рефакторинг","487":"/ru/frontend/architecture.html#используите-css3","488":"/ru/frontend/architecture.html#используите-современные-стандарты-и-возможности-языков","489":"/ru/frontend/architecture.html#документируите-проект","490":"/ru/frontend/css-ui-libs.html#css-и-ui-библиотеки","491":"/ru/frontend/learning.html#изучение-vue","492":"/ru/frontend/spa-pwa-ssr-ssg.html#spa-pwa-ssg-ssr-и-seo","493":"/ru/misc/cheat-sheets.html#шпаргалки-cheat-sheet","494":"/ru/misc/cheat-sheets.html#vue","495":"/ru/misc/cheat-sheets.html#javascript","496":"/ru/misc/cheat-sheets.html#html","497":"/ru/misc/cheat-sheets.html#css","498":"/ru/misc/cheat-sheets.html#typescript","499":"/ru/misc/cheat-sheets.html#markdown","500":"/ru/misc/contribute.html#внесите-лепту-в-развитие-данного-ресурса","501":"/ru/misc/glossary.html#глоссарии-и-сокращения","502":"/ru/misc/introduction.html#предисловие","503":"/ru/misc/introduction.html#у-нас-есть-телеграм-канал","504":"/ru/release-timeline/config.html#конфигурация","505":"/ru/release-timeline/config.html#опции","506":"/ru/release-timeline/config.html#стилизация","507":"/ru/release-timeline/getting-data.html#данные-релизов-коммитов-и-пул-риквестов","508":"/ru/release-timeline/getting-data.html#получение-данных","509":"/ru/release-timeline/getting-started.html#установка","510":"/ru/release-timeline/getting-started.html#установка-пакета","511":"/ru/release-timeline/getting-started.html#использование-в-коде-vue-проекта","512":"/ru/release-timeline/getting-started.html#использование-в-vitepress","513":"/ru/release-timeline/getting-started.html#использование-как-web-component","514":"/ru/release-timeline/#release-timeline","515":"/ru/release-timeline/#визуализация-релизов","516":"/ru/release-timeline/#репозитории","517":"/ru/release-timeline/#demo","518":"/ru/release-timeline/#credits","519":"/ru/release-timeline/microfrontend.html#микрофронтенд","520":"/ru/release-timeline/microfrontend.html#подключение","521":"/ru/release-timeline/microfrontend.html#demo","522":"/ru/release-timeline/vitepress.html#vitepress","523":"/ru/release-timeline/vitepress.html#установка-пакета","524":"/ru/release-timeline/vitepress.html#подключение","525":"/ru/release-timeline/vitepress.html#css-переменные","526":"/ru/release-timeline/vue-3.html#vue-3-проект","527":"/ru/release-timeline/vue-3.html#установка-пакета","528":"/ru/release-timeline/vue-3.html#использование-во-vue-компоненте","529":"/ru/release-timeline/web-component.html#web-component","530":"/ru/release-timeline/web-component.html#подключение","531":"/ru/release-timeline/web-component.html#конфигурация","532":"/ru/release-timeline/web-component.html#demo","533":"/ru/vue-webapp/contribution.html#участие-в-проекте","534":"/ru/vue-webapp/getting-started.html#установка","535":"/ru/vue-webapp/getting-started.html#установка-через-create-vue-webapp","536":"/ru/vue-webapp/getting-started.html#инициализация-и-запуск-веб-приложения","537":"/ru/vue-webapp/getting-started.html#установка-из-репозитория","538":"/ru/vue-webapp/guidelines.html#принципы","539":"/ru/vue-webapp/#vue-3-webapp-билдер","540":"/ru/vue-webapp/#краткое-описание","541":"/ru/vue-webapp/#обоснование","542":"/ru/vue-webapp/objectives.html#цели","543":"/ru/vue-webapp/options/adaptability.html#адаптивность","544":"/ru/vue-webapp/options/api.html#api-модуль","545":"/ru/vue-webapp/options/api.html#api-rest","546":"/ru/vue-webapp/options/api.html#json-rpc","547":"/ru/vue-webapp/options/baseIcon.html#baseicon","548":"/ru/vue-webapp/options/description.html#детали-реализации","549":"/ru/vue-webapp/options/description.html#инъекции-кода-в-index-html","550":"/ru/vue-webapp/options/description.html#css-tricks","551":"/ru/vue-webapp/options/drawer.html#navigation-drawers","552":"/ru/vue-webapp/options/drawer.html#simpledrawer","553":"/ru/vue-webapp/options/drawer.html#touchslideoutdrawer","554":"/ru/vue-webapp/options/footer.html#footers","555":"/ru/vue-webapp/options/footer.html#simplefooter","556":"/ru/vue-webapp/options/footer.html#richfooter","557":"/ru/vue-webapp/options/footer.html#mantinesimplefooter","558":"/ru/vue-webapp/options/footer.html#mantinerichfooter","559":"/ru/vue-webapp/options/footer.html#distributedfooter","560":"/ru/vue-webapp/options/ga-gp.html#github-actions-сценарии-для-развертывания-на-github-pages","561":"/ru/vue-webapp/options/ga-gp.html#deployment","562":"/ru/vue-webapp/options/ga-gp.html#настроика-base-в-vite-конфиге","563":"/ru/vue-webapp/options/google-analytics.html#google-analytics","564":"/ru/vue-webapp/options/header.html#headers","565":"/ru/vue-webapp/options/header.html#simpleheader","566":"/ru/vue-webapp/options/header.html#mantinesimpleheader","567":"/ru/vue-webapp/options/header.html#mantinelayeredheader","568":"/ru/vue-webapp/options/header.html#slidingheader","569":"/ru/vue-webapp/options/i18n.html#i18n","570":"/ru/vue-webapp/options/i18n.html#i18next","571":"/ru/vue-webapp/options/i18n.html#usei18nlight","572":"/ru/vue-webapp/options/i18n.html#использование","573":"/ru/vue-webapp/options/i18n.html#i18next-расширения","574":"/ru/vue-webapp/options/i18n.html#в-итоге","575":"/ru/vue-webapp/options/#опции-при-создании-приложения","576":"/ru/vue-webapp/options/#доступные-опции","577":"/ru/vue-webapp/options/#доступно-по-умолчанию","578":"/ru/vue-webapp/options/#в-разработке","579":"/ru/vue-webapp/options/#в-планах","580":"/ru/vue-webapp/options/layout-main.html#mainlayout","581":"/ru/vue-webapp/options/layout-main.html#routing","582":"/ru/vue-webapp/options/layout-one-column.html#onecolumnlayout","583":"/ru/vue-webapp/options/navbar.html#navbar","584":"/ru/vue-webapp/options/navbar.html#simplenavbar","585":"/ru/vue-webapp/options/navbar.html#mantinesimplenavbar","586":"/ru/vue-webapp/options/open-graph.html#google-analytics","587":"/ru/vue-webapp/options/pwa.html#pwa","588":"/ru/vue-webapp/options/pwa.html#manifest-json","589":"/ru/vue-webapp/options/pwa.html#service-worker","590":"/ru/vue-webapp/options/splash-screen.html#splash-screen","591":"/ru/vue-webapp/options/themes.html#темы"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[5,1,6],"1":[3,1,1],"2":[2,3,97],"3":[3,3,119],"4":[4,3,99],"5":[2,3,13],"6":[3,3,40],"7":[1,3,34],"8":[2,1,1],"9":[2,2,62],"10":[2,2,41],"11":[1,2,95],"12":[1,2,119],"13":[1,2,36],"14":[3,2,36],"15":[2,1,1],"16":[3,2,78],"17":[3,2,132],"18":[2,4,33],"19":[2,4,10],"20":[3,1,119],"21":[2,1,1],"22":[2,2,13],"23":[2,2,136],"24":[2,1,1],"25":[2,2,36],"26":[2,2,81],"27":[2,1,21],"28":[3,2,16],"29":[1,5,47],"30":[1,5,25],"31":[2,5,13],"32":[1,5,16],"33":[2,2,34],"34":[2,2,44],"35":[1,2,31],"36":[1,2,43],"37":[4,1,1],"38":[3,4,33],"39":[2,4,107],"40":[2,4,79],"41":[1,4,149],"42":[1,1,1],"43":[3,1,58],"44":[1,1,70],"45":[4,1,1],"46":[1,4,49],"47":[1,4,46],"48":[2,5,1],"49":[2,5,1],"50":[4,5,92],"51":[4,4,81],"52":[3,1,1],"53":[2,3,16],"54":[2,4,6],"55":[2,4,37],"56":[3,3,99],"57":[1,1,1],"58":[2,1,32],"59":[3,1,116],"60":[2,1,1],"61":[3,2,32],"62":[1,2,81],"63":[1,2,47],"64":[4,2,44],"65":[3,2,53],"66":[2,1,1],"67":[3,2,46],"68":[2,2,116],"69":[3,2,130],"70":[1,2,9],"71":[1,2,18],"72":[3,2,10],"73":[1,2,10],"74":[1,2,23],"75":[4,1,13],"76":[4,1,1],"77":[4,4,68],"78":[6,4,14],"79":[3,4,15],"80":[5,4,86],"81":[5,1,1],"82":[2,5,29],"83":[3,7,91],"84":[2,1,1],"85":[2,2,46],"86":[1,2,11],"87":[3,1,1],"88":[1,3,59],"89":[4,3,114],"90":[3,3,12],"91":[1,1,1],"92":[3,1,39],"93":[1,1,41],"94":[1,1,1],"95":[1,1,87],"96":[2,1,423],"97":[1,1,1],"98":[1,1,89],"99":[2,1,10],"100":[3,1,95],"101":[2,1,30],"102":[1,1,13],"103":[1,1,1],"104":[1,1,94],"105":[1,1,38],"106":[1,1,73],"107":[1,1,66],"108":[1,1,16],"109":[2,1,18],"110":[1,1,1],"111":[4,1,96],"112":[2,1,105],"113":[3,1,75],"114":[1,1,126],"115":[3,1,12],"116":[2,1,1],"117":[1,2,58],"118":[3,2,62],"119":[2,1,1],"120":[3,2,16],"121":[2,2,174],"122":[2,1,201],"123":[3,1,399],"124":[6,1,258],"125":[1,1,228],"126":[6,1,153],"127":[5,1,148],"128":[6,5,82],"129":[7,5,81],"130":[6,5,97],"131":[3,5,187],"132":[7,5,121],"133":[5,5,175],"134":[6,5,58],"135":[6,5,86],"136":[6,5,50],"137":[2,5,21],"138":[1,5,73],"139":[2,1,85],"140":[2,2,23],"141":[8,2,73],"142":[7,9,463],"143":[6,2,151],"144":[10,14,143],"145":[5,2,276],"146":[4,7,51],"147":[2,10,69],"148":[3,7,92],"149":[6,9,98],"150":[2,7,44],"151":[4,2,167],"152":[8,2,253],"153":[2,2,112],"154":[3,2,55],"155":[4,1,168],"156":[2,4,59],"157":[5,4,223],"158":[4,4,172],"159":[6,8,150],"160":[6,8,180],"161":[6,8,116],"162":[8,8,145],"163":[4,8,35],"164":[2,8,139],"165":[2,8,120],"166":[4,8,211],"167":[3,8,118],"168":[6,4,45],"169":[3,10,101],"170":[4,13,145],"171":[4,13,122],"172":[3,13,141],"173":[6,13,96],"174":[2,13,117],"175":[4,13,159],"176":[6,13,211],"177":[4,19,79],"178":[5,13,243],"179":[5,18,240],"180":[6,4,29],"181":[2,13,118],"182":[4,13,103],"183":[2,13,81],"184":[2,13,152],"185":[2,13,76],"186":[1,13,194],"187":[2,13,77],"188":[5,4,12],"189":[3,9,236],"190":[2,9,136],"191":[13,9,205],"192":[2,9,56],"193":[2,4,78],"194":[3,6,88],"195":[3,6,106],"196":[6,6,74],"197":[2,6,82],"198":[3,6,50],"199":[1,6,57],"200":[2,6,39],"201":[3,6,53],"202":[5,6,82],"203":[2,6,108],"204":[2,6,72],"205":[2,4,97],"206":[3,4,42],"207":[3,1,164],"208":[2,3,292],"209":[4,3,363],"210":[5,3,470],"211":[4,3,278],"212":[3,7,153],"213":[4,3,323],"214":[3,3,255],"215":[3,3,165],"216":[2,9,187],"217":[2,9,583],"218":[6,9,207],"219":[2,3,75],"220":[3,3,59],"221":[3,1,278],"222":[2,3,474],"223":[5,3,269],"224":[5,7,231],"225":[3,3,292],"226":[8,3,542],"227":[6,3,48],"228":[5,7,58],"229":[2,7,67],"230":[4,7,97],"231":[4,7,95],"232":[2,7,91],"233":[5,7,134],"234":[2,3,267],"235":[6,3,46],"236":[3,9,18],"237":[1,9,44],"238":[4,9,17],"239":[6,9,9],"240":[1,9,119],"241":[2,3,49],"242":[3,3,68],"243":[6,1,160],"244":[2,6,30],"245":[5,6,114],"246":[8,8,172],"247":[9,8,233],"248":[13,8,131],"249":[7,8,168],"250":[3,6,31],"251":[4,9,159],"252":[5,9,305],"253":[6,9,170],"254":[3,9,239],"255":[7,9,274],"256":[2,6,48],"257":[6,8,367],"258":[5,6,283],"259":[8,11,203],"260":[4,6,99],"261":[3,10,36],"262":[1,10,80],"263":[1,10,456],"264":[6,6,422],"265":[7,6,88],"266":[2,6,95],"267":[3,6,61],"268":[3,1,167],"269":[2,3,52],"270":[4,3,459],"271":[5,3,39],"272":[2,8,172],"273":[2,10,112],"274":[2,10,56],"275":[2,10,140],"276":[2,8,69],"277":[6,8,391],"278":[2,3,360],"279":[3,3,230],"280":[7,3,138],"281":[2,3,79],"282":[3,3,55],"283":[6,1,198],"284":[6,6,64],"285":[4,6,25],"286":[6,9,195],"287":[7,9,123],"288":[7,9,210],"289":[3,9,104],"290":[4,9,274],"291":[8,9,182],"292":[12,9,128],"293":[9,9,167],"294":[7,6,185],"295":[4,6,39],"296":[2,19,16],"297":[2,19,14],"298":[2,19,18],"299":[2,19,70],"300":[2,10,50],"301":[3,12,52],"302":[1,12,37],"303":[2,13,78],"304":[2,13,151],"305":[6,10,78],"306":[7,16,39],"307":[6,16,93],"308":[7,16,38],"309":[7,16,101],"310":[7,16,193],"311":[7,16,115],"312":[7,16,137],"313":[4,10,83],"314":[4,10,175],"315":[6,14,232],"316":[4,10,129],"317":[6,14,133],"318":[2,10,267],"319":[6,12,258],"320":[4,10,303],"321":[6,14,112],"322":[5,14,91],"323":[4,10,274],"324":[5,10,210],"325":[8,15,248],"326":[4,10,421],"327":[2,6,92],"328":[3,6,42],"329":[4,1,149],"330":[2,4,57],"331":[4,4,516],"332":[3,7,162],"333":[4,10,133],"334":[3,10,121],"335":[3,4,216],"336":[2,4,113],"337":[6,4,142],"338":[4,12,234],"339":[4,12,174],"340":[5,12,153],"341":[11,4,197],"342":[5,14,251],"343":[6,14,216],"344":[5,14,241],"345":[5,14,178],"346":[4,14,69],"347":[5,14,158],"348":[5,4,75],"349":[4,12,280],"350":[2,4,115],"351":[3,4,50],"352":[2,1,108],"353":[2,2,33],"354":[4,2,397],"355":[3,2,124],"356":[1,5,150],"357":[4,5,158],"358":[5,5,24],"359":[5,10,345],"360":[4,10,46],"361":[3,5,81],"362":[2,5,439],"363":[7,5,170],"364":[3,12,101],"365":[9,12,354],"366":[2,5,57],"367":[2,5,15],"368":[2,5,258],"369":[3,2,222],"370":[7,5,315],"371":[4,5,469],"372":[2,5,106],"373":[2,5,118],"374":[2,5,207],"375":[8,5,321],"376":[3,5,288],"377":[2,5,459],"378":[2,2,109],"379":[3,2,64],"380":[8,1,4],"381":[16,8,1],"382":[1,8,124],"383":[4,8,50],"384":[7,8,144],"385":[2,8,14],"386":[4,8,24],"387":[3,8,41],"388":[6,1,1],"389":[5,6,20],"390":[8,6,26],"391":[5,6,32],"392":[8,6,22],"393":[4,6,15],"394":[5,6,19],"395":[5,6,26],"396":[7,6,28],"397":[7,6,32],"398":[4,6,27],"399":[4,6,29],"400":[7,6,16],"401":[2,1,64],"402":[1,1,1],"403":[3,1,150],"404":[2,3,79],"405":[3,3,235],"406":[4,6,94],"407":[4,6,188],"408":[9,3,153],"409":[4,12,46],"410":[4,12,259],"411":[4,3,127],"412":[4,7,253],"413":[7,3,178],"414":[4,10,174],"415":[4,10,163],"416":[3,10,45],"417":[4,10,260],"418":[7,3,476],"419":[6,3,110],"420":[4,9,215],"421":[5,9,127],"422":[2,3,71],"423":[3,3,52],"424":[2,1,450],"425":[1,1,137],"426":[2,1,8],"427":[1,2,51],"428":[2,2,102],"429":[2,2,69],"430":[3,2,138],"431":[1,2,359],"432":[2,2,78],"433":[4,2,184],"434":[2,6,22],"435":[2,6,28],"436":[1,6,40],"437":[2,1,201],"438":[1,2,71],"439":[2,2,118],"440":[4,1,216],"441":[2,1,863],"442":[3,1,42],"443":[2,1,8],"444":[3,2,15],"445":[1,2,3],"446":[3,2,347],"447":[4,1,1],"448":[9,4,453],"449":[6,4,131],"450":[5,1,587],"451":[5,1,191],"452":[2,5,46],"453":[5,5,296],"454":[2,5,232],"455":[4,5,183],"456":[4,5,266],"457":[6,8,392],"458":[5,5,107],"459":[5,5,149],"460":[4,5,150],"461":[6,9,182],"462":[6,9,331],"463":[3,5,154],"464":[1,5,194],"465":[2,5,127],"466":[9,5,203],"467":[6,5,163],"468":[4,5,75],"469":[4,5,86],"470":[4,5,39],"471":[2,5,191],"472":[4,7,215],"473":[4,5,65],"474":[3,5,231],"475":[4,5,267],"476":[4,5,141],"477":[2,5,87],"478":[3,5,63],"479":[1,1,162],"480":[2,1,1],"481":[2,2,74],"482":[3,1,416],"483":[3,1,404],"484":[2,3,78],"485":[9,3,41],"486":[2,3,29],"487":[2,3,47],"488":[6,3,18],"489":[2,3,30],"490":[4,1,223],"491":[2,1,501],"492":[6,1,538],"493":[4,1,1],"494":[1,4,5],"495":[1,4,4],"496":[1,4,4],"497":[1,4,6],"498":[1,4,8],"499":[1,4,2],"500":[6,1,36],"501":[3,1,66],"502":[1,1,80],"503":[5,1,23],"504":[1,1,6],"505":[1,1,84],"506":[1,1,82],"507":[6,1,1],"508":[2,6,108],"509":[1,1,1],"510":[2,1,8],"511":[5,1,45],"512":[3,1,2],"513":[4,1,37],"514":[2,1,1],"515":[2,2,86],"516":[1,2,2],"517":[1,2,12],"518":[1,2,6],"519":[1,1,1],"520":[1,1,51],"521":[1,1,19],"522":[1,1,16],"523":[2,1,8],"524":[1,1,32],"525":[2,1,33],"526":[3,1,1],"527":[2,3,8],"528":[4,3,42],"529":[2,1,1],"530":[1,2,68],"531":[1,2,115],"532":[1,2,19],"533":[3,1,17],"534":[1,1,1],"535":[5,1,128],"536":[5,5,13],"537":[3,1,38],"538":[1,1,144],"539":[4,1,1],"540":[2,4,70],"541":[1,4,175],"542":[1,1,171],"543":[1,1,81],"544":[2,1,1],"545":[3,2,103],"546":[2,2,89],"547":[1,1,67],"548":[2,1,1],"549":[5,2,41],"550":[2,2,27],"551":[2,1,11],"552":[1,2,21],"553":[1,2,22],"554":[1,1,9],"555":[1,1,1],"556":[1,1,1],"557":[1,1,1],"558":[1,1,1],"559":[1,1,1],"560":[7,1,1],"561":[1,7,78],"562":[5,7,38],"563":[2,1,41],"564":[1,1,4],"565":[1,1,4],"566":[1,1,8],"567":[1,1,9],"568":[1,1,32],"569":[1,1,1],"570":[1,1,97],"571":[1,1,16],"572":[1,1,54],"573":[2,1,52],"574":[2,1,16],"575":[4,1,1],"576":[2,4,77],"577":[3,4,21],"578":[2,4,11],"579":[2,4,80],"580":[1,1,27],"581":[1,1,10],"582":[1,1,43],"583":[1,1,13],"584":[1,1,1],"585":[1,1,1],"586":[2,1,34],"587":[1,1,13],"588":[2,1,54],"589":[2,1,60],"590":[2,1,44],"591":[1,1,80]},"averageFieldLength":[3.3361486486486496,4.805743243243243,111.12837837837837],"storedFields":{"0":{"title":"Наши статьи на других ресурсах","titles":[]},"1":{"title":"Архитектура и дизайн","titles":[]},"2":{"title":"Упрощение сложного","titles":["Архитектура и дизайн"]},"3":{"title":"Абстракция и инкапсуляция","titles":["Архитектура и дизайн"]},"4":{"title":"Разбиение проекта на подсистемы","titles":["Архитектура и дизайн"]},"5":{"title":"Package Diagram","titles":["Архитектура и дизайн"]},"6":{"title":"Клиент-серверная архитектура","titles":["Архитектура и дизайн"]},"7":{"title":"Routing","titles":["Архитектура и дизайн"]},"8":{"title":"Бизнес-анализ","titles":[]},"9":{"title":"Границы проекта","titles":["Бизнес-анализ"]},"10":{"title":"Существующие решения","titles":["Бизнес-анализ"]},"11":{"title":"Витрина","titles":["Бизнес-анализ"]},"12":{"title":"Магазин","titles":["Бизнес-анализ"]},"13":{"title":"Маркетплейс","titles":["Бизнес-анализ"]},"14":{"title":"Use case диаграмма","titles":["Бизнес-анализ"]},"15":{"title":"Модель данных","titles":[]},"16":{"title":"Категория и товар","titles":["Модель данных"]},"17":{"title":"Типы баз данных","titles":["Модель данных"]},"18":{"title":"1.json","titles":["Модель данных","Типы баз данных"]},"19":{"title":"1.json","titles":["Модель данных","Типы баз данных"]},"20":{"title":"Технический стек проекта","titles":[]},"21":{"title":"Анализ рынка","titles":[]},"22":{"title":"Изучение конкурентов","titles":["Анализ рынка"]},"23":{"title":"Сайты-аналоги","titles":["Анализ рынка"]},"24":{"title":"UI дизайн","titles":[]},"25":{"title":"Дизайн сайта","titles":["UI дизайн"]},"26":{"title":"Творческие способности","titles":["UI дизайн"]},"27":{"title":"UI макет","titles":[]},"28":{"title":"Основные компоненты страницы","titles":["UI макет"]},"29":{"title":"Header","titles":["UI макет","Основные компоненты страницы"]},"30":{"title":"Sidebar","titles":["UI макет","Основные компоненты страницы"]},"31":{"title":"Main panel","titles":["UI макет","Основные компоненты страницы"]},"32":{"title":"Footer","titles":["UI макет","Основные компоненты страницы"]},"33":{"title":"Мобильная версия","titles":["UI макет"]},"34":{"title":"Слабая связанность","titles":["UI макет"]},"35":{"title":"Адаптивность","titles":["UI макет"]},"36":{"title":"Вывод","titles":["UI макет"]},"37":{"title":"Выбор BaaS или CMS","titles":[]},"38":{"title":"JSON файлы товаров","titles":["Выбор BaaS или CMS"]},"39":{"title":"Выбор CMS","titles":["Выбор BaaS или CMS"]},"40":{"title":"Сервисы Supabase","titles":["Выбор BaaS или CMS"]},"41":{"title":"Адаптеры","titles":["Выбор BaaS или CMS"]},"42":{"title":"Hoppscotch","titles":[]},"43":{"title":"Работа с API","titles":["Hoppscotch"]},"44":{"title":"Endpoints","titles":["Hoppscotch"]},"45":{"title":"Модель данных в базе данных","titles":[]},"46":{"title":"Сущности","titles":["Модель данных в базе данных"]},"47":{"title":"Данные","titles":["Модель данных в базе данных"]},"48":{"title":"Categories table","titles":["Модель данных в базе данных","Данные"]},"49":{"title":"Products table","titles":["Модель данных в базе данных","Данные"]},"50":{"title":"Category-product join table","titles":["Модель данных в базе данных","Данные"]},"51":{"title":"Поиск по json полям","titles":["Модель данных в базе данных"]},"52":{"title":"Supabase REST API","titles":[]},"53":{"title":"Supabase SDK","titles":["Supabase REST API"]},"54":{"title":"Установка:","titles":["Supabase REST API","Supabase SDK"]},"55":{"title":"Использование:","titles":["Supabase REST API","Supabase SDK"]},"56":{"title":"Supabase REST API","titles":["Supabase REST API"]},"57":{"title":"Supabase","titles":[]},"58":{"title":"Создание проекта","titles":["Supabase"]},"59":{"title":"Безопасность и доступ","titles":["Supabase"]},"60":{"title":"Онлайн маркетплейс","titles":[]},"61":{"title":"Проект Arty-Crafty","titles":["Онлайн маркетплейс"]},"62":{"title":"Причины","titles":["Онлайн маркетплейс"]},"63":{"title":"Цель","titles":["Онлайн маркетплейс"]},"64":{"title":"Что здесь будет?","titles":["Онлайн маркетплейс"]},"65":{"title":"Для чего?","titles":["Онлайн маркетплейс"]},"66":{"title":"План работы","titles":[]},"67":{"title":"Стадии разработки ПО","titles":["План работы"]},"68":{"title":"Бизнес-анализ","titles":["План работы"]},"69":{"title":"Архитектура и дизайн","titles":["План работы"]},"70":{"title":"Разработка","titles":["План работы"]},"71":{"title":"Развертывание","titles":["План работы"]},"72":{"title":"Тестирование и QA","titles":["План работы"]},"73":{"title":"Документирование","titles":["План работы"]},"74":{"title":"Поддержка","titles":["План работы"]},"75":{"title":"Репозиторий и сайт проекта","titles":[]},"76":{"title":"Цели и задачи проекта","titles":[]},"77":{"title":"Цели данного проекта:","titles":["Цели и задачи проекта"]},"78":{"title":"Нефункциональные требования (software quality attributes)","titles":["Цели и задачи проекта"]},"79":{"title":"Общие функциональные требования","titles":["Цели и задачи проекта"]},"80":{"title":"Этапы развития приложения (приблизительно)","titles":["Цели и задачи проекта"]},"81":{"title":"Работа с API на фронтенде","titles":[]},"82":{"title":"Supabase адаптер","titles":["Работа с API на фронтенде"]},"83":{"title":"api/products.ts","titles":["Работа с API на фронтенде","Supabase адаптер"]},"84":{"title":"Слайдер, ProductView","titles":[]},"85":{"title":"embla-carousel","titles":["Слайдер, ProductView"]},"86":{"title":"ProductView","titles":["Слайдер, ProductView"]},"87":{"title":"Мобильное меню, CSS","titles":[]},"88":{"title":"IconButton","titles":["Мобильное меню, CSS"]},"89":{"title":"SCSS => CSS","titles":["Мобильное меню, CSS"]},"90":{"title":"Tag и CMV","titles":["Мобильное меню, CSS"]},"91":{"title":"TypeScript","titles":[]},"92":{"title":"index.d.ts","titles":["TypeScript"]},"93":{"title":"Типизация","titles":["TypeScript"]},"94":{"title":"VueUse","titles":[]},"95":{"title":"useLocalStorage","titles":["VueUse"]},"96":{"title":"Библиотека VueUse","titles":["VueUse"]},"97":{"title":"Codeium","titles":[]},"98":{"title":"Автокомплит","titles":["Codeium"]},"99":{"title":"Чат-бот","titles":["Codeium"]},"100":{"title":"Explain, Refactor, JSDoc","titles":["Codeium"]},"101":{"title":"Explain problem","titles":["Codeium"]},"102":{"title":"Вывод","titles":["Codeium"]},"103":{"title":"Кастомизация","titles":[]},"104":{"title":"Персонализация","titles":["Кастомизация"]},"105":{"title":"Views","titles":["Кастомизация"]},"106":{"title":"Routes","titles":["Кастомизация"]},"107":{"title":"Header","titles":["Кастомизация"]},"108":{"title":"Sidebar","titles":["Кастомизация"]},"109":{"title":"Небольшой рефакторинг","titles":["Кастомизация"]},"110":{"title":"Избранное","titles":[]},"111":{"title":"Иконка на карточке товара","titles":["Избранное"]},"112":{"title":"Композабл useFavourites","titles":["Избранное"]},"113":{"title":"Сохранение между сессиями","titles":["Избранное"]},"114":{"title":"Бэджик","titles":["Избранное"]},"115":{"title":"Tag и CMV","titles":["Избранное"]},"116":{"title":"Категория товаров","titles":[]},"117":{"title":"Layout","titles":["Категория товаров"]},"118":{"title":"Данные и API","titles":["Категория товаров"]},"119":{"title":"Создание проекта","titles":[]},"120":{"title":"Репозиторий на GitHub","titles":["Создание проекта"]},"121":{"title":"vue-webapp","titles":["Создание проекта"]},"122":{"title":"API сервис","titles":[]},"123":{"title":"Аутентификация и авторизация","titles":[]},"124":{"title":"Варианты задействовать свой бэкенд для фронтендера","titles":[]},"125":{"title":"CORS","titles":[]},"126":{"title":"Протоколы. To REST или не REST?","titles":[]},"127":{"title":"Приложение: Миграция с Vue 2","titles":[]},"128":{"title":"Другой способ загрузки и запуска приложения","titles":["Приложение: Миграция с Vue 2"]},"129":{"title":"Регистрация глобальных компонентов, плагинов и так далее","titles":["Приложение: Миграция с Vue 2"]},"130":{"title":"Свойство data теперь всегда является функцией","titles":["Приложение: Миграция с Vue 2"]},"131":{"title":"Больше реактивных возможностей","titles":["Приложение: Миграция с Vue 2"]},"132":{"title":"Изменения в v-model, props и events","titles":["Приложение: Миграция с Vue 2"]},"133":{"title":"Удалена совместимость со старыми браузерами","titles":["Приложение: Миграция с Vue 2"]},"134":{"title":"Изменения в организации каталогов и файлов","titles":["Приложение: Миграция с Vue 2"]},"135":{"title":"Изменения в роутере и state manager","titles":["Приложение: Миграция с Vue 2"]},"136":{"title":"Новые компоненты и другие изменения.","titles":["Приложение: Миграция с Vue 2"]},"137":{"title":"Другие изменения","titles":["Приложение: Миграция с Vue 2"]},"138":{"title":"Итог","titles":["Приложение: Миграция с Vue 2"]},"139":{"title":"Развертывание приложения","titles":[]},"140":{"title":"Технические требования","titles":["Развертывание приложения"]},"141":{"title":"Что включает в себя публикация веб-приложения?","titles":["Развертывание приложения"]},"142":{"title":"Домены, серверы доменных имен (DNS) и записи DNS","titles":["Развертывание приложения","Что включает в себя публикация веб-приложения?"]},"143":{"title":"Размышления о создании приложения для развертывания","titles":["Развертывание приложения"]},"144":{"title":"/chapter 5/to-do SPA/src/router/index.js","titles":["Развертывание приложения","Размышления о создании приложения для развертывания","Домены, серверы доменных имен (DNS) и записи DNS"]},"145":{"title":"Опции и конфигурации веб-сервера","titles":["Развертывание приложения"]},"146":{"title":"Конфигурация HTTP-сервера Apache","titles":["Развертывание приложения","Опции и конфигурации веб-сервера"]},"147":{"title":"/.htaccess","titles":["Развертывание приложения","Опции и конфигурации веб-сервера","Конфигурация HTTP-сервера Apache"]},"148":{"title":"Настройка сервера Nginx","titles":["Развертывание приложения","Опции и конфигурации веб-сервера"]},"149":{"title":"/etc/nginx/sites-available/default","titles":["Развертывание приложения","Опции и конфигурации веб-сервера","Настройка сервера Nginx"]},"150":{"title":"Другие серверы","titles":["Развертывание приложения","Опции и конфигурации веб-сервера"]},"151":{"title":"Перенос файлов на сервер","titles":["Развертывание приложения"]},"152":{"title":"Защита веб-приложения с помощью Let\'s Encrypt","titles":["Развертывание приложения"]},"153":{"title":"Подведение итогов","titles":["Развертывание приложения"]},"154":{"title":"Вопросы для проверки","titles":["Развертывание приложения"]},"155":{"title":"Бонусная глава - Шаблоны UX","titles":[]},"156":{"title":"Технические требования","titles":["Бонусная глава - Шаблоны UX"]},"157":{"title":"UI-дизайн против UX-дизайна","titles":["Бонусная глава - Шаблоны UX"]},"158":{"title":"Принципы проектирования пользовательского интерфейса","titles":["Бонусная глава - Шаблоны UX"]},"159":{"title":"Достаточный контраст или различие между элементами","titles":["Бонусная глава - Шаблоны UX","Принципы проектирования пользовательского интерфейса"]},"160":{"title":"Стимулировать повторение и быть последовательным.","titles":["Бонусная глава - Шаблоны UX","Принципы проектирования пользовательского интерфейса"]},"161":{"title":"Внимательно следите за выравниванием и направлением","titles":["Бонусная глава - Шаблоны UX","Принципы проектирования пользовательского интерфейса"]},"162":{"title":"Используйте близость и расстояние, чтобы показать естественные группы","titles":["Бонусная глава - Шаблоны UX","Принципы проектирования пользовательского интерфейса"]},"163":{"title":"Законы проектирования пользовательского интерфейса","titles":["Бонусная глава - Шаблоны UX","Принципы проектирования пользовательского интерфейса"]},"164":{"title":"Закон Фитта","titles":["Бонусная глава - Шаблоны UX","Принципы проектирования пользовательского интерфейса"]},"165":{"title":"Закон Хика","titles":["Бонусная глава - Шаблоны UX","Принципы проектирования пользовательского интерфейса"]},"166":{"title":"Восемь правил Бена Шнайдермана","titles":["Бонусная глава - Шаблоны UX","Принципы проектирования пользовательского интерфейса"]},"167":{"title":"Принципы проектирования UX","titles":["Бонусная глава - Шаблоны UX","Принципы проектирования пользовательского интерфейса"]},"168":{"title":"Общие шаблоны для работы с данными","titles":["Бонусная глава - Шаблоны UX"]},"169":{"title":"Элементы ввода HTML","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для работы с данными"]},"170":{"title":"Чекбоксы, радиокнопки и тумблеры","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для работы с данными","Элементы ввода HTML"]},"171":{"title":"Чипы, таблетки или теги","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для работы с данными","Элементы ввода HTML"]},"172":{"title":"Подсказки (tooltips)","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для работы с данными","Элементы ввода HTML"]},"173":{"title":"Уведомляющие точки, пузырьки, метки или значки","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для работы с данными","Элементы ввода HTML"]},"174":{"title":"Тостовые уведомления","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для работы с данными","Элементы ввода HTML"]},"175":{"title":"Карусель или слайдеры изображений","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для работы с данными","Элементы ввода HTML"]},"176":{"title":"Панели прогресса (progress bars) и спиннеры","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для работы с данными","Элементы ввода HTML"]},"177":{"title":"./components/Spinner.vue","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для работы с данными","Элементы ввода HTML","Панели прогресса (progress bars) и спиннеры"]},"178":{"title":"Пагинация (пейджер) и бесконечный скроллер","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для работы с данными","Элементы ввода HTML"]},"179":{"title":"./src/components/InfiniteScroller.vue","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для работы с данными","Элементы ввода HTML","Пагинация (пейджер) и бесконечный скроллер"]},"180":{"title":"Общие шаблоны для взаимодействия и навигации","titles":["Бонусная глава - Шаблоны UX"]},"181":{"title":"Размещение меню","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для взаимодействия и навигации","Элементы ввода HTML"]},"182":{"title":"Хлебные крошки (breadcrumbs)","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для взаимодействия и навигации","Элементы ввода HTML"]},"183":{"title":"Модальные диалоги","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для взаимодействия и навигации","Элементы ввода HTML"]},"184":{"title":"Иконки меню","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для взаимодействия и навигации","Элементы ввода HTML"]},"185":{"title":"Аккордеонные меню","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для взаимодействия и навигации","Элементы ввода HTML"]},"186":{"title":"Мегаменю","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для взаимодействия и навигации","Элементы ввода HTML"]},"187":{"title":"Выпадающие меню","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для взаимодействия и навигации","Элементы ввода HTML"]},"188":{"title":"Общие шаблоны для организации контента","titles":["Бонусная глава - Шаблоны UX"]},"189":{"title":"Отзывчивые (responsive) приложения","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для организации контента"]},"190":{"title":"Домашняя ссылка","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для организации контента"]},"191":{"title":"Главная (hero) секция, призыв к действию (call to action) и иконки социальных сетей","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для организации контента"]},"192":{"title":"Другие шаблоны","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для организации контента"]},"193":{"title":"Темные шаблоны","titles":["Бонусная глава - Шаблоны UX"]},"194":{"title":"Вопросы с подвохом","titles":["Бонусная глава - Шаблоны UX","Темные шаблоны"]},"195":{"title":"Проникновение в корзину","titles":["Бонусная глава - Шаблоны UX","Темные шаблоны"]},"196":{"title":"Приманка для тараканов (Roach motels)","titles":["Бонусная глава - Шаблоны UX","Темные шаблоны"]},"197":{"title":"Privacy Zuckering","titles":["Бонусная глава - Шаблоны UX","Темные шаблоны"]},"198":{"title":"Предотвращение сравнения цен","titles":["Бонусная глава - Шаблоны UX","Темные шаблоны"]},"199":{"title":"Ненаправленность","titles":["Бонусная глава - Шаблоны UX","Темные шаблоны"]},"200":{"title":"Скрытые расходы","titles":["Бонусная глава - Шаблоны UX","Темные шаблоны"]},"201":{"title":"Приманка и подмена","titles":["Бонусная глава - Шаблоны UX","Темные шаблоны"]},"202":{"title":"Подтверждение позора (Confirm shaming)","titles":["Бонусная глава - Шаблоны UX","Темные шаблоны"]},"203":{"title":"Замаскированная реклама","titles":["Бонусная глава - Шаблоны UX","Темные шаблоны"]},"204":{"title":"Дружественный спам","titles":["Бонусная глава - Шаблоны UX","Темные шаблоны"]},"205":{"title":"Подведение итогов","titles":["Бонусная глава - Шаблоны UX"]},"206":{"title":"Вопросы для проверки","titles":["Бонусная глава - Шаблоны UX"]},"207":{"title":"Установка рабочего проекта","titles":[]},"208":{"title":"Технические требования","titles":["Установка рабочего проекта"]},"209":{"title":"Настройка проекта и инструменты","titles":["Установка рабочего проекта"]},"210":{"title":"Структура папок и её модификации","titles":["Установка рабочего проекта"]},"211":{"title":"Интеграция с CSS-фреймворками","titles":["Установка рабочего проекта"]},"212":{"title":"Фреймворк w3.css","titles":["Установка рабочего проекта","Интеграция с CSS-фреймворками"]},"213":{"title":"FontAwesome - это просто замечательно","titles":["Установка рабочего проекта"]},"214":{"title":"Опции конфигурации Vite","titles":["Установка рабочего проекта"]},"215":{"title":"Приложение To-Do","titles":["Установка рабочего проекта"]},"216":{"title":"App.vue","titles":["Установка рабочего проекта","Приложение To-Do","Фреймворк w3.css"]},"217":{"title":"ToDos.vue","titles":["Установка рабочего проекта","Приложение To-Do","Фреймворк w3.css"]},"218":{"title":"Краткая критика нашего приложения To-Do","titles":["Установка рабочего проекта","Приложение To-Do","Фреймворк w3.css"]},"219":{"title":"Подведение итогов","titles":["Установка рабочего проекта"]},"220":{"title":"Вопросы для проверки","titles":["Установка рабочего проекта"]},"221":{"title":"Фреймворк Vue 3","titles":[]},"222":{"title":"Прогрессивный фреймворк","titles":["Фреймворк Vue 3"]},"223":{"title":"Использование Vue в веб-приложении","titles":["Фреймворк Vue 3"]},"224":{"title":"Путь сборщика, лучший путь...","titles":["Фреймворк Vue 3","Использование Vue в веб-приложении"]},"225":{"title":"Понимание однофайловых компонентов","titles":["Фреймворк Vue 3"]},"226":{"title":"Разные варианты - options, composition, и script setup API","titles":["Фреймворк Vue 3"]},"227":{"title":"Изучение встроенных директив в Vue 3","titles":["Фреймворк Vue 3"]},"228":{"title":"v-bind: (сокращение ":")","titles":["Фреймворк Vue 3","Изучение встроенных директив в Vue 3"]},"229":{"title":"v-show","titles":["Фреймворк Vue 3","Изучение встроенных директив в Vue 3"]},"230":{"title":"v-if, v-else и v-else-if","titles":["Фреймворк Vue 3","Изучение встроенных директив в Vue 3"]},"231":{"title":"v-for и :key","titles":["Фреймворк Vue 3","Изучение встроенных директив в Vue 3"]},"232":{"title":"v-model","titles":["Фреймворк Vue 3","Изучение встроенных директив в Vue 3"]},"233":{"title":"v-on: (и сокращение @)","titles":["Фреймворк Vue 3","Изучение встроенных директив в Vue 3"]},"234":{"title":"Встроенные компоненты","titles":["Фреймворк Vue 3"]},"235":{"title":"Кодовые соглашения (code conventions) в книге","titles":["Фреймворк Vue 3"]},"236":{"title":"Переменные и пропсы","titles":["Фреймворк Vue 3","Кодовые соглашения (code conventions) в книге"]},"237":{"title":"Константы","titles":["Фреймворк Vue 3","Кодовые соглашения (code conventions) в книге"]},"238":{"title":"Имена классов и компонентов","titles":["Фреймворк Vue 3","Кодовые соглашения (code conventions) в книге"]},"239":{"title":"Функции, методы, события и имена файлов","titles":["Фреймворк Vue 3","Кодовые соглашения (code conventions) в книге"]},"240":{"title":"Экземпляры","titles":["Фреймворк Vue 3","Кодовые соглашения (code conventions) в книге"]},"241":{"title":"Подведение итогов","titles":["Фреймворк Vue 3"]},"242":{"title":"Вопросы для проверки","titles":["Фреймворк Vue 3"]},"243":{"title":"Композиция пользовательского интерфейса с помощью компонентов","titles":[]},"244":{"title":"Технические требования","titles":["Композиция пользовательского интерфейса с помощью компонентов"]},"245":{"title":"Составление страницы с помощью компонентов","titles":["Композиция пользовательского интерфейса с помощью компонентов"]},"246":{"title":"Этап 1 - определение макетов и элементов пользовательского интерфейса","titles":["Композиция пользовательского интерфейса с помощью компонентов","Составление страницы с помощью компонентов"]},"247":{"title":"Шаг 2 - определение связей, потока данных, взаимодействий и событий","titles":["Композиция пользовательского интерфейса с помощью компонентов","Составление страницы с помощью компонентов"]},"248":{"title":"Шаг 3 - определение элементов пользовательской интерактивности (входов, диалогов, уведомлений и т.д.)","titles":["Композиция пользовательского интерфейса с помощью компонентов","Составление страницы с помощью компонентов"]},"249":{"title":"Шаг 4 - выявление шаблонов проектирования и компромиссов","titles":["Композиция пользовательского интерфейса с помощью компонентов","Составление страницы с помощью компонентов"]},"250":{"title":"Компоненты в деталях","titles":["Композиция пользовательского интерфейса с помощью компонентов"]},"251":{"title":"Локальные и глобальные компоненты","titles":["Композиция пользовательского интерфейса с помощью компонентов","Компоненты в деталях"]},"252":{"title":"Статический, асинхронный и динамический импорт","titles":["Композиция пользовательского интерфейса с помощью компонентов","Компоненты в деталях"]},"253":{"title":"Пропсы, события и директива v-model","titles":["Композиция пользовательского интерфейса с помощью компонентов","Компоненты в деталях"]},"254":{"title":"Настраиваемые контроллеры ввода","titles":["Композиция пользовательского интерфейса с помощью компонентов","Компоненты в деталях"]},"255":{"title":"Инъекция зависимости с помощью Provide и Inject","titles":["Композиция пользовательского интерфейса с помощью компонентов","Компоненты в деталях"]},"256":{"title":"Специальные компоненты","titles":["Композиция пользовательского интерфейса с помощью компонентов"]},"257":{"title":"Слоты, слоты и еще раз слоты...","titles":["Композиция пользовательского интерфейса с помощью компонентов","Специальные компоненты"]},"258":{"title":"Композабл функции (composables) и миксины","titles":["Композиция пользовательского интерфейса с помощью компонентов"]},"259":{"title":"Динамические компоненты с помощью "component :is"","titles":["Композиция пользовательского интерфейса с помощью компонентов","Композабл функции (composables) и миксины"]},"260":{"title":"Реальный пример - плагин модалов","titles":["Композиция пользовательского интерфейса с помощью компонентов"]},"261":{"title":"Настройка нашего проекта","titles":["Композиция пользовательского интерфейса с помощью компонентов","Реальный пример - плагин модалов"]},"262":{"title":"Конструкция","titles":["Композиция пользовательского интерфейса с помощью компонентов","Реальный пример - плагин модалов"]},"263":{"title":"Реализация","titles":["Композиция пользовательского интерфейса с помощью компонентов","Реальный пример - плагин модалов"]},"264":{"title":"Реализация нашего нового приложения To-Do","titles":["Композиция пользовательского интерфейса с помощью компонентов"]},"265":{"title":"Небольшая критика нашего нового приложения To-Do","titles":["Композиция пользовательского интерфейса с помощью компонентов"]},"266":{"title":"Подведение итогов","titles":["Композиция пользовательского интерфейса с помощью компонентов"]},"267":{"title":"Вопросы для проверки","titles":["Композиция пользовательского интерфейса с помощью компонентов"]},"268":{"title":"Прогрессивные веб-приложения","titles":[]},"269":{"title":"Технические требования","titles":["Прогрессивные веб-приложения"]},"270":{"title":"PWA или устанавливаемые SPA","titles":["Прогрессивные веб-приложения"]},"271":{"title":"Увеличение SPA до уровня PWA","titles":["Прогрессивные веб-приложения"]},"272":{"title":"Файл манифеста","titles":["Прогрессивные веб-приложения","Увеличение SPA до уровня PWA"]},"273":{"title":"Необходимо:","titles":["Прогрессивные веб-приложения","Увеличение SPA до уровня PWA","Файл манифеста"]},"274":{"title":"Рекомендуется:","titles":["Прогрессивные веб-приложения","Увеличение SPA до уровня PWA","Файл манифеста"]},"275":{"title":"Описательные:","titles":["Прогрессивные веб-приложения","Увеличение SPA до уровня PWA","Файл манифеста"]},"276":{"title":"Тестирование манифеста","titles":["Прогрессивные веб-приложения","Увеличение SPA до уровня PWA"]},"277":{"title":"Подсказка к установке (Install prompt)","titles":["Прогрессивные веб-приложения","Увеличение SPA до уровня PWA"]},"278":{"title":"Service workers","titles":["Прогрессивные веб-приложения"]},"279":{"title":"Плагин Vite-PWA","titles":["Прогрессивные веб-приложения"]},"280":{"title":"Тестирование показателей PWA с помощью Google Lighthouse","titles":["Прогрессивные веб-приложения"]},"281":{"title":"Подведение итогов","titles":["Прогрессивные веб-приложения"]},"282":{"title":"Вопросы для проверки","titles":["Прогрессивные веб-приложения"]},"283":{"title":"Принципы и шаблоны проектирования программного обеспечения","titles":[]},"284":{"title":"Каковы принципы проектирования программного обеспечения?","titles":["Принципы и шаблоны проектирования программного обеспечения"]},"285":{"title":"Неполный список принципов проектирования","titles":["Принципы и шаблоны проектирования программного обеспечения"]},"286":{"title":"Separation of concerns (Разделение ответственности)","titles":["Принципы и шаблоны проектирования программного обеспечения","Неполный список принципов проектирования"]},"287":{"title":"Composition over inheritance (Композиция над наследованием)","titles":["Принципы и шаблоны проектирования программного обеспечения","Неполный список принципов проектирования"]},"288":{"title":"Single responsibility principle (Принцип единой ответственности)","titles":["Принципы и шаблоны проектирования программного обеспечения","Неполный список принципов проектирования"]},"289":{"title":"Encapsulation (Инкапсуляция)","titles":["Принципы и шаблоны проектирования программного обеспечения","Неполный список принципов проектирования"]},"290":{"title":"KIC - keep it clean","titles":["Принципы и шаблоны проектирования программного обеспечения","Неполный список принципов проектирования"]},"291":{"title":"DRY – don’t repeat yourself (не повторяйся)","titles":["Принципы и шаблоны проектирования программного обеспечения","Неполный список принципов проектирования"]},"292":{"title":"KISS - keep it simple and short (держи это простым и коротким)","titles":["Принципы и шаблоны проектирования программного обеспечения","Неполный список принципов проектирования"]},"293":{"title":"Code for the next (Пиши код для следующего)","titles":["Принципы и шаблоны проектирования программного обеспечения","Неполный список принципов проектирования"]},"294":{"title":"Что такое шаблон проектирования программного обеспечения?","titles":["Принципы и шаблоны проектирования программного обеспечения"]},"295":{"title":"Краткий справочный список шаблонов","titles":["Принципы и шаблоны проектирования программного обеспечения"]},"296":{"title":"Порождающие шаблоны","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Code for the next (Пиши код для следующего)"]},"297":{"title":"Поведенческие шаблоны","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Code for the next (Пиши код для следующего)"]},"298":{"title":"Структурные шаблоны","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Code for the next (Пиши код для следующего)"]},"299":{"title":"Асинхронные шаблоны","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Code for the next (Пиши код для следующего)"]},"300":{"title":"Шаблон Singleton","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов"]},"301":{"title":"Когда его использовать","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Singleton"]},"302":{"title":"Реализация","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Singleton"]},"303":{"title":"Метод 1","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Singleton","Реализация"]},"304":{"title":"Метод 2","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Singleton","Реализация"]},"305":{"title":"Шаблон Dependency injection (инъекция зависимостей)","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов"]},"306":{"title":"./chapter 2/dependency-injection-1.js","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Dependency injection (инъекция зависимостей)"]},"307":{"title":"./chapter 2/dependency-injection-2.js","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Dependency injection (инъекция зависимостей)"]},"308":{"title":"./chapter 2/dependency-injection-3.js","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Dependency injection (инъекция зависимостей)"]},"309":{"title":"./chapter 2/dependency-injection-4.js","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Dependency injection (инъекция зависимостей)"]},"310":{"title":"./chapter 2/dependency-injection-5.js","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Dependency injection (инъекция зависимостей)"]},"311":{"title":"./chapter 2/dependency-injection-6.js","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Dependency injection (инъекция зависимостей)"]},"312":{"title":"./chapter 2/dependency-injection-7.js","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Dependency injection (инъекция зависимостей)"]},"313":{"title":"Шаблон factory (фабрика)","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов"]},"314":{"title":"Шаблон Observer (наблюдатель)","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов"]},"315":{"title":"./chapter 2/Observer-1.js","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Observer (наблюдатель)"]},"316":{"title":"Шаблон Command (команда)","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов"]},"317":{"title":"./chapter 2/Command-1.js","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Command (команда)"]},"318":{"title":"Шаблон Proxy","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов"]},"319":{"title":"./chapter 2/proxy-1.js","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Proxy"]},"320":{"title":"Шаблон Decorator (декоратор)","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов"]},"321":{"title":"./chapter 2/decorator-1.vue","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Decorator (декоратор)"]},"322":{"title":"./chapter 2/decorator-2.vue","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Decorator (декоратор)"]},"323":{"title":"Шаблон Façade (фасад)","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов"]},"324":{"title":"Шаблон Callback (обратный вызов)","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов"]},"325":{"title":"./chapter 2/callback-1.js - Синхронный Фибоначчи","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Callback (обратный вызов)"]},"326":{"title":"Шаблон Promise (обещаниe)","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов"]},"327":{"title":"Подведение итогов","titles":["Принципы и шаблоны проектирования программного обеспечения"]},"328":{"title":"Вопросы для проверки","titles":["Принципы и шаблоны проектирования программного обеспечения"]},"329":{"title":"Многопоточность с Web Workers","titles":[]},"330":{"title":"Технические требования","titles":["Многопоточность с Web Workers"]},"331":{"title":"Введение в Web workers","titles":["Многопоточность с Web Workers"]},"332":{"title":"Реализация web worker","titles":["Многопоточность с Web Workers","Введение в Web workers"]},"333":{"title":"./my_worker.js","titles":["Многопоточность с Web Workers","Введение в Web workers","Реализация web worker"]},"334":{"title":"./main.js","titles":["Многопоточность с Web Workers","Введение в Web workers","Реализация web worker"]},"335":{"title":"Шаблон Business delegate","titles":["Многопоточность с Web Workers"]},"336":{"title":"Шаблон Dispatcher","titles":["Многопоточность с Web Workers"]},"337":{"title":"Установка конвейера взаимодействия с веб-рабочим","titles":["Многопоточность с Web Workers"]},"338":{"title":"./services/WebWorker.js","titles":["Многопоточность с Web Workers","Установка конвейера взаимодействия с веб-рабочим","Реализация web worker"]},"339":{"title":"./webworker/index.js","titles":["Многопоточность с Web Workers","Установка конвейера взаимодействия с веб-рабочим","Реализация web worker"]},"340":{"title":"./webworker/services/test.js","titles":["Многопоточность с Web Workers","Установка конвейера взаимодействия с веб-рабочим","Реализация web worker"]},"341":{"title":"Получение доступа к IndexedDB с помощью DexieJS в web worker.","titles":["Многопоточность с Web Workers"]},"342":{"title":"/src/components/DbNotes.vue","titles":["Многопоточность с Web Workers","Получение доступа к IndexedDB с помощью DexieJS в web worker.","Реализация web worker"]},"343":{"title":"./src/webworker/services/dbService.js","titles":["Многопоточность с Web Workers","Получение доступа к IndexedDB с помощью DexieJS в web worker.","Реализация web worker"]},"344":{"title":"./src/webworker/index.js","titles":["Многопоточность с Web Workers","Получение доступа к IndexedDB с помощью DexieJS в web worker.","Реализация web worker"]},"345":{"title":"./webworker/services/network.js","titles":["Многопоточность с Web Workers","Получение доступа к IndexedDB с помощью DexieJS в web worker.","Реализация web worker"]},"346":{"title":"./webworker/index.js","titles":["Многопоточность с Web Workers","Получение доступа к IndexedDB с помощью DexieJS в web worker.","Реализация web worker"]},"347":{"title":"./src/components/NetworkCommunication.vue","titles":["Многопоточность с Web Workers","Получение доступа к IndexedDB с помощью DexieJS в web worker.","Реализация web worker"]},"348":{"title":"Простой NodeJS-сервер для тестирования","titles":["Многопоточность с Web Workers"]},"349":{"title":"./server/index.js","titles":["Многопоточность с Web Workers","Простой NodeJS-сервер для тестирования","Реализация web worker"]},"350":{"title":"Подведение итогов","titles":["Многопоточность с Web Workers"]},"351":{"title":"Вопросы для проверки","titles":["Многопоточность с Web Workers"]},"352":{"title":"Одностраничные приложения","titles":[]},"353":{"title":"Технические требования","titles":["Одностраничные приложения"]},"354":{"title":"Что такое SPA?","titles":["Одностраничные приложения"]},"355":{"title":"Vue 3 роутер","titles":["Одностраничные приложения"]},"356":{"title":"Установка","titles":["Одностраничные приложения","Vue 3 роутер"]},"357":{"title":"Новое приложение To-Do","titles":["Одностраничные приложения","Vue 3 роутер"]},"358":{"title":"Определение маршрутов и объект Router","titles":["Одностраничные приложения","Vue 3 роутер"]},"359":{"title":"/src/router/index.js","titles":["Одностраничные приложения","Vue 3 роутер","Определение маршрутов и объект Router"]},"360":{"title":"/src/main.js","titles":["Одностраничные приложения","Vue 3 роутер","Определение маршрутов и объект Router"]},"361":{"title":"Шаблонные компоненты маршрутизатора","titles":["Одностраничные приложения","Vue 3 роутер"]},"362":{"title":"App.vue","titles":["Одностраничные приложения","Vue 3 роутер"]},"363":{"title":"Вложенные маршруты, именованные представления и программная навигация","titles":["Одностраничные приложения","Vue 3 роутер"]},"364":{"title":"Определение вложенных маршрутов","titles":["Одностраничные приложения","Vue 3 роутер","Вложенные маршруты, именованные представления и программная навигация"]},"365":{"title":"/src/views/Directory.vue component, lines 13-18","titles":["Одностраничные приложения","Vue 3 роутер","Вложенные маршруты, именованные представления и программная навигация"]},"366":{"title":".push()","titles":["Одностраничные приложения","Vue 3 роутер"]},"367":{"title":".replace()","titles":["Одностраничные приложения","Vue 3 роутер"]},"368":{"title":".go()","titles":["Одностраничные приложения","Vue 3 роутер"]},"369":{"title":"Исследование шаблонов аутентификации","titles":["Одностраничные приложения"]},"370":{"title":"Простая аутентификация по имени пользователя и паролю","titles":["Одностраничные приложения","Исследование шаблонов аутентификации"]},"371":{"title":"OpenID и сторонняя аутентификация","titles":["Одностраничные приложения","Исследование шаблонов аутентификации"]},"372":{"title":"1.","titles":["Одностраничные приложения","Исследование шаблонов аутентификации"]},"373":{"title":"2.","titles":["Одностраничные приложения","Исследование шаблонов аутентификации"]},"374":{"title":"3.","titles":["Одностраничные приложения","Исследование шаблонов аутентификации"]},"375":{"title":"Беспарольная аутентификация или аутентификация по одноразовому паролю (OTP)","titles":["Одностраничные приложения","Исследование шаблонов аутентификации"]},"376":{"title":"2FA - двухфакторная аутентификация","titles":["Одностраничные приложения","Исследование шаблонов аутентификации"]},"377":{"title":"Web3-аутентификация","titles":["Одностраничные приложения","Исследование шаблонов аутентификации"]},"378":{"title":"Подведение итогов","titles":["Одностраничные приложения"]},"379":{"title":"Вопросы для проверки","titles":["Одностраничные приложения"]},"380":{"title":"Vue.js 3 - Шаблоны проектирования и лучшие практики","titles":[]},"381":{"title":"Здесь представлен перевод книги "Vue.js 3 - Design Patterns and Best Practices" на русский язык","titles":["Vue.js 3 - Шаблоны проектирования и лучшие практики"]},"382":{"title":"Предисловие","titles":["Vue.js 3 - Шаблоны проектирования и лучшие практики"]},"383":{"title":"Для кого эта книга","titles":["Vue.js 3 - Шаблоны проектирования и лучшие практики"]},"384":{"title":"Чтобы получить максимальную пользу от этой книги","titles":["Vue.js 3 - Шаблоны проектирования и лучшие практики"]},"385":{"title":"Купить книгу","titles":["Vue.js 3 - Шаблоны проектирования и лучшие практики"]},"386":{"title":"Скачать файлы кода примеров","titles":["Vue.js 3 - Шаблоны проектирования и лучшие практики"]},"387":{"title":"Код в действии","titles":["Vue.js 3 - Шаблоны проектирования и лучшие практики"]},"388":{"title":"Что включает в себя эта книга","titles":[]},"389":{"title":"Глава 1, Фреймворк Vue 3","titles":["Что включает в себя эта книга"]},"390":{"title":"Глава 2, Принципы и шаблоны проектирования программного обеспечения","titles":["Что включает в себя эта книга"]},"391":{"title":"Глава 3, Создание рабочего проекта","titles":["Что включает в себя эта книга"]},"392":{"title":"Глава 4, Композиция пользовательского интерфейса с помощью компонентов","titles":["Что включает в себя эта книга"]},"393":{"title":"Глава 5, Одностраничные приложения","titles":["Что включает в себя эта книга"]},"394":{"title":"Глава 6, Прогрессивные веб-приложения","titles":["Что включает в себя эта книга"]},"395":{"title":"Глава 7, Управление потоками данных","titles":["Что включает в себя эта книга"]},"396":{"title":"Глава 8, Многопоточность с помощью web-workers","titles":["Что включает в себя эта книга"]},"397":{"title":"Глава 9, Тестирование и контроль исходных текстов","titles":["Что включает в себя эта книга"]},"398":{"title":"Глава 10, Развертывание приложения","titles":["Что включает в себя эта книга"]},"399":{"title":"Глава 11, UX Patterns","titles":["Что включает в себя эта книга"]},"400":{"title":"Приложение: Миграция с Vue 2 на Vue 3","titles":["Что включает в себя эта книга"]},"401":{"title":"CI/CD","titles":[]},"402":{"title":"Docker","titles":[]},"403":{"title":"Управление потоками данных","titles":[]},"404":{"title":"Технические требования","titles":["Управление потоками данных"]},"405":{"title":"Основное взаимодействие компонентов","titles":["Управление потоками данных"]},"406":{"title":"/basic/ParentBasic.vue","titles":["Управление потоками данных","Основное взаимодействие компонентов"]},"407":{"title":"/basic/Child.vue","titles":["Управление потоками данных","Основное взаимодействие компонентов"]},"408":{"title":"Реализация шины событий с помощью шаблонов Singleton и Observer","titles":["Управление потоками данных"]},"409":{"title":"/services/MessageBus.js","titles":["Управление потоками данных","Реализация шины событий с помощью шаблонов Singleton и Observer"]},"410":{"title":"/bus/Child.vue","titles":["Управление потоками данных","Реализация шины событий с помощью шаблонов Singleton и Observer"]},"411":{"title":"Реализация базового реактивного состояния","titles":["Управление потоками данных"]},"412":{"title":"/service/SimpleState.js","titles":["Управление потоками данных","Реализация базового реактивного состояния"]},"413":{"title":"Реализация мощного реактивного стора с помощью Pinia","titles":["Управление потоками данных"]},"414":{"title":"Options API basic store","titles":["Управление потоками данных","Реализация мощного реактивного стора с помощью Pinia"]},"415":{"title":"/stores/counter.js","titles":["Управление потоками данных","Реализация мощного реактивного стора с помощью Pinia"]},"416":{"title":"./main.js","titles":["Управление потоками данных","Реализация мощного реактивного стора с помощью Pinia"]},"417":{"title":"/pinia/ChildPinia.vue","titles":["Управление потоками данных","Реализация мощного реактивного стора с помощью Pinia"]},"418":{"title":"Хранилища данных браузера - сессионные, локальные и IndexedDB","titles":["Управление потоками данных"]},"419":{"title":"Экспериментируем с шаблонами reactivity и Proxies","titles":["Управление потоками данных"]},"420":{"title":"/services/sessionStorage.js","titles":["Управление потоками данных","Экспериментируем с шаблонами reactivity и Proxies"]},"421":{"title":"/session_storage/ChildSession.vue","titles":["Управление потоками данных","Экспериментируем с шаблонами reactivity и Proxies"]},"422":{"title":"Подведение итогов","titles":["Управление потоками данных"]},"423":{"title":"Вопросы для проверки","titles":["Управление потоками данных"]},"424":{"title":"Github Actions","titles":[]},"425":{"title":"Хостинг","titles":[]},"426":{"title":"Архитектурные решения","titles":[]},"427":{"title":"Плоская","titles":["Архитектурные решения"]},"428":{"title":"Атомарный дизайн","titles":["Архитектурные решения"]},"429":{"title":"Модульный дизайн","titles":["Архитектурные решения"]},"430":{"title":"Feature Sliced Design","titles":["Архитектурные решения"]},"431":{"title":"Микрофронтенды","titles":["Архитектурные решения"]},"432":{"title":"Use cases","titles":["Архитектурные решения"]},"433":{"title":"Лучшие практики и соображения","titles":["Архитектурные решения"]},"434":{"title":"AppLoader.vue","titles":["Архитектурные решения","Лучшие практики и соображения"]},"435":{"title":"useAppLoader.ts","titles":["Архитектурные решения","Лучшие практики и соображения"]},"436":{"title":"SomeComponent","titles":["Архитектурные решения","Лучшие практики и соображения"]},"437":{"title":"Ресурсы приложения","titles":[]},"438":{"title":"BaseIcon","titles":["Ресурсы приложения"]},"439":{"title":"icons.js","titles":["Ресурсы приложения"]},"440":{"title":"Создание и сборка приложения","titles":[]},"441":{"title":"Настройка IDE","titles":[]},"442":{"title":"Подскажите удобную библиотеку","titles":[]},"443":{"title":"Полезные советы","titles":[]},"444":{"title":"Карусель или слайдер","titles":["Полезные советы"]},"445":{"title":"Toaster","titles":["Полезные советы"]},"446":{"title":"Дата и время","titles":["Полезные советы"]},"447":{"title":"Структура Vue 3 проекта","titles":[]},"448":{"title":"Какие бывают структуры файлов для Vue 3 проектов?","titles":["Структура Vue 3 проекта"]},"449":{"title":"Подходящая структура для Vue 3 проекта","titles":["Структура Vue 3 проекта"]},"450":{"title":"State management во Vue 3","titles":[]},"451":{"title":"Тестирование и системы контроля версий","titles":[]},"452":{"title":"Технические требования","titles":["Тестирование и системы контроля версий"]},"453":{"title":"Что такое тестирование и TDD","titles":["Тестирование и системы контроля версий"]},"454":{"title":"Что тестировать","titles":["Тестирование и системы контроля версий"]},"455":{"title":"Наш базовый пример приложения","titles":["Тестирование и системы контроля версий"]},"456":{"title":"Установка и использование Vitest","titles":["Тестирование и системы контроля версий"]},"457":{"title":"/src/tests/Fibonacci.test.js","titles":["Тестирование и системы контроля версий","Установка и использование Vitest"]},"458":{"title":"Специальный случай утверждения - намеренная ошибка","titles":["Тестирование и системы контроля версий"]},"459":{"title":"Специальный случай утверждения - асинхронный код","titles":["Тестирование и системы контроля версий"]},"460":{"title":"Установка Vue Test Utils","titles":["Тестирование и системы контроля версий"]},"461":{"title":"/src/tests/FibonacciOutput.test.js","titles":["Тестирование и системы контроля версий","Установка Vue Test Utils"]},"462":{"title":"/src/tests/FibonacciInput.test.js","titles":["Тестирование и системы контроля версий","Установка Vue Test Utils"]},"463":{"title":"In-source тестирование","titles":["Тестирование и системы контроля версий"]},"464":{"title":"Покрытие","titles":["Тестирование и системы контроля версий"]},"465":{"title":"Интерфейс Vitest","titles":["Тестирование и системы контроля версий"]},"466":{"title":"Что такое source control и зачем он нужен?","titles":["Тестирование и системы контроля версий"]},"467":{"title":"Управление исходными текстами с помощью Git","titles":["Тестирование и системы контроля версий"]},"468":{"title":"Установка в системах Windows","titles":["Тестирование и системы контроля версий"]},"469":{"title":"Установка в системах Linux","titles":["Тестирование и системы контроля версий"]},"470":{"title":"Установка в системах macOS","titles":["Тестирование и системы контроля версий"]},"471":{"title":"Использование Git","titles":["Тестирование и системы контроля версий"]},"472":{"title":"/chapter 10/.gitignore","titles":["Тестирование и системы контроля версий","Использование Git"]},"473":{"title":"Управление ветвями и слияниями","titles":["Тестирование и системы контроля версий"]},"474":{"title":"Конфликты при слиянии","titles":["Тестирование и системы контроля версий"]},"475":{"title":"Работа с удаленными репозиториями","titles":["Тестирование и системы контроля версий"]},"476":{"title":"Непрерывная интеграция и доставка","titles":["Тестирование и системы контроля версий"]},"477":{"title":"Подведение итогов","titles":["Тестирование и системы контроля версий"]},"478":{"title":"Вопросы для проверки","titles":["Тестирование и системы контроля версий"]},"479":{"title":"Тестирование","titles":[]},"480":{"title":"Web components","titles":[]},"481":{"title":"Custom elements","titles":["Web components"]},"482":{"title":"О фронтенд фреймворках","titles":[]},"483":{"title":"Архитектура фронтэнд приложений","titles":[]},"484":{"title":"Избегайте зависимостей","titles":["Архитектура фронтэнд приложений"]},"485":{"title":"Используйте обертки над компонентами UI библиотек и сторонних утилит","titles":["Архитектура фронтэнд приложений"]},"486":{"title":"Регулярный рефакторинг","titles":["Архитектура фронтэнд приложений"]},"487":{"title":"Используйте CSS3","titles":["Архитектура фронтэнд приложений"]},"488":{"title":"Используйте современные стандарты и возможности языков","titles":["Архитектура фронтэнд приложений"]},"489":{"title":"Документируйте проект","titles":["Архитектура фронтэнд приложений"]},"490":{"title":"CSS и UI библиотеки","titles":[]},"491":{"title":"Изучение Vue","titles":[]},"492":{"title":"SPA, PWA, SSG, SSR и SEO","titles":[]},"493":{"title":"Шпаргалки (Cheat Sheet)","titles":[]},"494":{"title":"Vue","titles":["Шпаргалки (Cheat Sheet)"]},"495":{"title":"JavaScript","titles":["Шпаргалки (Cheat Sheet)"]},"496":{"title":"HTML","titles":["Шпаргалки (Cheat Sheet)"]},"497":{"title":"CSS","titles":["Шпаргалки (Cheat Sheet)"]},"498":{"title":"Typescript","titles":["Шпаргалки (Cheat Sheet)"]},"499":{"title":"Markdown","titles":["Шпаргалки (Cheat Sheet)"]},"500":{"title":"Внесите лепту в развитие данного ресурса","titles":[]},"501":{"title":"Глоссарий и сокращения","titles":[]},"502":{"title":"Предисловие","titles":[]},"503":{"title":"У нас есть Телеграм канал","titles":["Предисловие"]},"504":{"title":"Конфигурация","titles":[]},"505":{"title":"Опции","titles":["Конфигурация"]},"506":{"title":"Стилизация","titles":["Конфигурация"]},"507":{"title":"Данные релизов, коммитов и пул риквестов","titles":[]},"508":{"title":"Получение данных","titles":["Данные релизов, коммитов и пул риквестов"]},"509":{"title":"Установка","titles":[]},"510":{"title":"Установка пакета","titles":["Установка"]},"511":{"title":"Использование в коде Vue проекта","titles":["Установка"]},"512":{"title":"Использование в VitePress","titles":["Установка"]},"513":{"title":"Использование как web component","titles":["Установка"]},"514":{"title":"Release Timeline","titles":[]},"515":{"title":"Визуализация релизов","titles":["Release Timeline"]},"516":{"title":"Репозиторий","titles":["Release Timeline"]},"517":{"title":"Demo","titles":["Release Timeline"]},"518":{"title":"Credits","titles":["Release Timeline"]},"519":{"title":"Микрофронтенд","titles":[]},"520":{"title":"Подключение","titles":["Микрофронтенд"]},"521":{"title":"Demo","titles":["Микрофронтенд"]},"522":{"title":"VitePress","titles":[]},"523":{"title":"Установка пакета","titles":["VitePress"]},"524":{"title":"Подключение","titles":["VitePress"]},"525":{"title":"CSS переменные","titles":["VitePress"]},"526":{"title":"Vue 3 проект","titles":[]},"527":{"title":"Установка пакета","titles":["Vue 3 проект"]},"528":{"title":"Использование во Vue компоненте","titles":["Vue 3 проект"]},"529":{"title":"Web component","titles":[]},"530":{"title":"Подключение","titles":["Web component"]},"531":{"title":"Конфигурация","titles":["Web component"]},"532":{"title":"Demo","titles":["Web component"]},"533":{"title":"Участие в проекте","titles":[]},"534":{"title":"Установка","titles":[]},"535":{"title":"Установка через create vue-webapp","titles":["Установка"]},"536":{"title":"Инициализация и запуск веб приложения","titles":["Установка","Установка через create vue-webapp"]},"537":{"title":"Установка из репозитория","titles":["Установка"]},"538":{"title":"Принципы","titles":[]},"539":{"title":"Vue 3 webapp билдер","titles":[]},"540":{"title":"Краткое описание","titles":["Vue 3 webapp билдер"]},"541":{"title":"Обоснование","titles":["Vue 3 webapp билдер"]},"542":{"title":"Цели","titles":[]},"543":{"title":"Адаптивность","titles":[]},"544":{"title":"API модуль","titles":[]},"545":{"title":"API (REST)","titles":["API модуль"]},"546":{"title":"JSON-RPC","titles":["API модуль"]},"547":{"title":"BaseIcon","titles":[]},"548":{"title":"Детали реализации","titles":[]},"549":{"title":"Инъекции кода в index.html","titles":["Детали реализации"]},"550":{"title":"CSS tricks","titles":["Детали реализации"]},"551":{"title":"Navigation drawers","titles":[]},"552":{"title":"SimpleDrawer","titles":["Navigation drawers"]},"553":{"title":"TouchSlideoutDrawer","titles":["Navigation drawers"]},"554":{"title":"Footers","titles":[]},"555":{"title":"SimpleFooter","titles":["Footers"]},"556":{"title":"RichFooter","titles":["Footers"]},"557":{"title":"MantineSimpleFooter","titles":["Footers"]},"558":{"title":"MantineRichFooter","titles":["Footers"]},"559":{"title":"DistributedFooter","titles":["Footers"]},"560":{"title":"Github Actions сценарий для развертывания на Github Pages","titles":[]},"561":{"title":"Deployment","titles":["Github Actions сценарий для развертывания на Github Pages"]},"562":{"title":"Настройка base в Vite конфиге","titles":["Github Actions сценарий для развертывания на Github Pages"]},"563":{"title":"Google analytics","titles":[]},"564":{"title":"Headers","titles":[]},"565":{"title":"SimpleHeader","titles":["Headers"]},"566":{"title":"MantineSimpleHeader","titles":["Headers"]},"567":{"title":"MantineLayeredHeader","titles":["Headers"]},"568":{"title":"SlidingHeader","titles":["Headers"]},"569":{"title":"i18n","titles":[]},"570":{"title":"i18next","titles":["i18n"]},"571":{"title":"useI18nLight","titles":["i18n"]},"572":{"title":"Использование","titles":["i18n"]},"573":{"title":"i18next расширения","titles":["i18n"]},"574":{"title":"В итоге","titles":["i18n"]},"575":{"title":"Опции при создании приложения","titles":[]},"576":{"title":"Доступные опции","titles":["Опции при создании приложения"]},"577":{"title":"Доступно по умолчанию","titles":["Опции при создании приложения"]},"578":{"title":"В разработке","titles":["Опции при создании приложения"]},"579":{"title":"В планах","titles":["Опции при создании приложения"]},"580":{"title":"MainLayout","titles":[]},"581":{"title":"Routing","titles":["MainLayout"]},"582":{"title":"OneColumnLayout","titles":[]},"583":{"title":"Navbar","titles":[]},"584":{"title":"SimpleNavbar","titles":["Navbar"]},"585":{"title":"MantineSimpleNavbar","titles":["Navbar"]},"586":{"title":"Google analytics","titles":[]},"587":{"title":"PWA","titles":[]},"588":{"title":"manifest.json","titles":["PWA"]},"589":{"title":"Service worker","titles":["PWA"]},"590":{"title":"Splash screen","titles":[]},"591":{"title":"Темы","titles":[]}},"dirtCount":0,"index":[["^",{"2":{"441":1}}],["^20",{"2":{"440":1}}],["^index",{"2":{"147":1}}],["||",{"2":{"563":1}}],["|",{"2":{"424":4,"427":44,"428":68,"429":125,"430":86,"441":1,"448":323}}],["🚀",{"2":{"424":1}}],["🛎️",{"2":{"424":1}}],["ютюбе",{"2":{"491":1}}],["ютюба",{"2":{"491":1}}],["ю",{"2":{"482":1}}],["юнит",{"2":{"459":1,"461":1}}],["юридическую",{"2":{"370":1}}],["юзер",{"2":{"123":1}}],["щепоткой",{"2":{"222":1}}],["щелкает",{"2":{"275":1}}],["щелкать",{"2":{"215":1}}],["щелкнуть",{"2":{"215":1}}],["щелчку",{"2":{"375":1}}],["щелчке",{"2":{"264":1,"357":1}}],["щелчком",{"2":{"186":1,"187":1,"264":1}}],["щелчок",{"2":{"172":1,"264":1,"342":1}}],["└────",{"2":{"182":1}}],["└──",{"2":{"182":3}}],["86",{"2":{"506":1,"530":1,"531":1,"591":1}}],["888",{"2":{"506":2,"525":1,"530":1,"531":1}}],["8",{"0":{"396":1},"2":{"172":1,"208":1,"268":1,"280":1,"291":1,"294":1,"317":1,"319":3,"323":2,"325":2,"330":1,"331":3,"335":1,"337":1,"338":2,"340":1,"341":1,"346":2,"349":2,"369":1,"376":1,"418":2,"424":2,"471":1}}],["800",{"2":{"166":1}}],["80",{"2":{"96":1,"98":1,"149":1}}],["№",{"2":{"171":1}}],["zero",{"2":{"441":1}}],["zip",{"2":{"213":2}}],["zuckering",{"0":{"197":1}}],["z",{"2":{"166":1,"190":1}}],["56",{"2":{"591":1}}],["5c73e7",{"2":{"506":1,"530":1,"531":1}}],["55",{"2":{"457":3,"459":1,"461":2}}],["58",{"2":{"441":1}}],["512x512",{"2":{"279":2}}],["5rem",{"2":{"216":1}}],["5",{"0":{"144":1,"310":1,"393":1},"2":{"135":1,"143":2,"166":1,"170":1,"179":2,"183":1,"213":1,"217":4,"231":2,"252":1,"257":1,"258":2,"259":2,"263":2,"277":1,"311":1,"315":1,"316":1,"319":1,"326":1,"337":1,"338":2,"339":2,"342":1,"343":2,"345":1,"349":2,"354":1,"357":3,"359":2,"363":1,"365":1,"368":1,"370":4,"371":1,"374":1,"375":2,"376":1,"399":1,"410":2,"413":1,"414":2,"415":2,"418":1,"420":2,"424":3,"436":1,"458":2,"462":2,"464":1,"475":1}}],["50кб",{"2":{"446":1}}],["50",{"2":{"96":1,"177":1,"410":1,"418":1,"457":1,"574":1}}],["67",{"2":{"331":1,"591":3}}],["64",{"2":{"208":1,"468":1}}],["60000",{"2":{"252":1}}],["600",{"2":{"189":1}}],["600px",{"2":{"189":1}}],["60",{"2":{"159":2,"292":1,"331":1,"375":1,"376":1,"591":6}}],["6",{"0":{"311":1,"394":1},"2":{"133":1,"142":1,"170":1,"215":1,"217":4,"258":2,"262":1,"275":2,"276":1,"277":4,"278":2,"279":4,"280":3,"311":1,"312":2,"318":1,"319":1,"338":2,"339":2,"340":1,"342":2,"343":2,"349":2,"354":1,"371":1,"410":2,"415":2,"420":2,"421":1,"462":2,"465":1,"506":1,"511":1,"513":2,"528":1,"530":1,"531":1,"591":1}}],["78",{"2":{"591":1}}],["78919d98ece0",{"2":{"270":1}}],["767",{"2":{"543":1}}],["70kb",{"2":{"511":1,"528":1}}],["70",{"2":{"491":2,"571":1}}],["77",{"2":{"319":1}}],["7",{"0":{"312":1,"395":1},"2":{"133":2,"135":1,"171":1,"226":1,"247":1,"257":1,"264":1,"268":1,"277":1,"280":1,"305":1,"311":1,"312":1,"319":2,"320":1,"338":2,"339":2,"341":1,"349":2,"362":1,"375":1,"405":2,"408":1,"410":1,"411":1,"413":1,"421":3,"468":1}}],["7542",{"2":{"106":1}}],["9",{"0":{"397":1},"2":{"151":1,"172":1,"184":1,"208":1,"210":1,"319":1,"325":2,"326":1,"338":2,"349":2,"455":2,"464":3,"465":1,"468":1,"471":1,"472":3,"474":1}}],["99",{"2":{"126":1,"450":3}}],["95",{"2":{"123":1,"442":1,"446":1,"508":1}}],["90",{"2":{"89":1,"280":1}}],["ждать",{"2":{"375":2,"376":1,"457":1}}],["жить",{"2":{"222":1}}],["жизненно",{"2":{"293":1}}],["жизненного",{"2":{"226":1,"258":1,"290":2,"310":1,"362":1,"410":1}}],["жизненный",{"2":{"278":1,"290":1}}],["жизнь",{"2":{"210":1,"424":1,"482":1}}],["жизни",{"2":{"123":4,"418":1}}],["жив",{"2":{"340":2}}],["живом",{"2":{"398":1}}],["живой",{"2":{"210":1,"463":1}}],["живого",{"2":{"209":1,"461":1,"465":1}}],["живущий",{"2":{"123":1}}],["жирным",{"2":{"194":1}}],["жирный",{"2":{"161":1}}],["железу",{"2":{"492":1}}],["железо",{"2":{"492":1}}],["желаемым",{"2":{"451":1}}],["желаемых",{"2":{"217":1}}],["желающих",{"2":{"533":1}}],["желаю",{"2":{"387":1}}],["желательно",{"2":{"113":1,"208":1,"410":1,"491":1}}],["желании",{"2":{"40":1,"538":1,"542":1,"545":1}}],["желание",{"2":{"25":1}}],["жесткие",{"2":{"440":1}}],["жестким",{"2":{"152":1}}],["жестко",{"2":{"312":1,"482":1}}],["жесткое",{"2":{"307":1,"418":1}}],["же",{"2":{"3":1,"11":1,"12":1,"16":1,"20":1,"26":2,"33":1,"35":1,"41":1,"47":1,"51":1,"56":1,"62":1,"82":1,"106":1,"111":2,"112":1,"123":2,"131":1,"132":1,"133":2,"139":1,"142":3,"143":1,"144":1,"145":1,"155":2,"157":1,"160":2,"161":1,"162":1,"164":2,"166":1,"168":1,"171":1,"175":1,"184":1,"187":1,"189":1,"194":1,"210":1,"213":1,"216":1,"217":3,"222":4,"224":1,"226":3,"230":1,"232":1,"244":1,"255":1,"257":1,"260":1,"268":1,"270":2,"272":1,"277":1,"284":1,"286":2,"288":1,"291":2,"293":2,"303":1,"304":1,"306":1,"307":1,"309":1,"310":2,"313":1,"315":3,"318":5,"319":2,"320":4,"321":1,"322":1,"323":1,"325":1,"326":1,"329":1,"331":2,"334":1,"349":2,"354":1,"355":1,"359":1,"367":1,"369":1,"370":1,"371":1,"377":3,"405":1,"407":1,"408":2,"410":2,"411":1,"412":2,"414":1,"415":3,"418":5,"420":1,"421":1,"424":1,"425":1,"431":2,"441":1,"446":1,"449":1,"450":3,"453":1,"454":1,"456":2,"457":1,"459":1,"460":1,"462":3,"464":1,"466":2,"467":1,"475":2,"479":2,"482":1,"483":2,"485":1,"491":1,"492":1,"541":1,"545":1,"546":1,"549":1,"561":1,"570":1}}],["yandex",{"2":{"492":1}}],["yarnrc",{"2":{"441":2}}],["yarn",{"2":{"440":1,"441":4,"472":2}}],["yamllint",{"2":{"441":2}}],["yaml",{"2":{"424":7,"441":7}}],["yellow",{"2":{"362":1}}],["yes",{"2":{"121":6,"535":8,"540":4}}],["y=ref",{"2":{"258":1}}],["y",{"2":{"209":1,"258":4,"424":1}}],["yougithubusername",{"2":{"561":1}}],["youtube",{"2":{"64":1,"331":2,"354":1}}],["yourname",{"2":{"562":1}}],["yourself",{"0":{"291":1},"2":{"258":1,"283":1,"441":1}}],["your",{"2":{"55":1,"217":1,"424":13,"450":2}}],["√",{"2":{"121":15,"535":13,"540":5}}],[">decrement",{"2":{"412":1,"417":1}}],[">increment",{"2":{"412":1}}],[">install",{"2":{"277":1}}],[">home",{"2":{"362":1}}],[">search",{"2":{"362":1}}],[">send",{"2":{"347":1,"410":1}}],[">save",{"2":{"342":1}}],[">cancel",{"2":{"263":1}}],[">completed",{"2":{"217":1}}],[">accept",{"2":{"263":1}}],[">edit",{"2":{"234":1}}],[">print",{"2":{"233":2}}],[">pending",{"2":{"217":1}}],[">no",{"2":{"217":1}}],[">",{"2":{"112":2,"114":3,"177":1,"179":2,"182":4,"212":1,"213":4,"216":2,"217":20,"223":2,"228":1,"229":1,"231":1,"232":1,"234":1,"254":2,"257":12,"259":2,"263":3,"272":1,"277":2,"315":1,"322":2,"342":5,"347":3,"362":3,"365":4,"406":4,"407":2,"417":2,"424":1,"433":8,"434":2,"435":1,"437":4,"438":2,"441":1,"481":1,"490":2,"500":2,"511":1,"513":4,"520":5,"524":1,"528":1,"530":4,"531":4,"543":5,"547":3,"563":2,"568":3,"572":2,"586":15}}],[">>",{"2":{"112":1,"113":1,"424":5}}],["⌥",{"2":{"98":2}}],["+page",{"2":{"441":6}}],["+layout",{"2":{"441":7}}],["+$backups",{"2":{"424":1}}],["++id",{"2":{"343":1}}],["+f",{"2":{"324":1}}],["+=",{"2":{"179":1}}],["+",{"2":{"98":4,"166":1,"209":1,"222":1,"280":1,"319":1,"325":2,"326":7,"349":1,"371":2,"372":2,"374":1,"384":1,"424":1,"439":2}}],["400",{"2":{"568":1}}],["401",{"2":{"123":2}}],["480",{"2":{"543":1}}],["4",{"0":{"249":1,"309":1,"392":1},"2":{"90":1,"96":1,"132":1,"142":1,"149":2,"162":2,"164":1,"166":1,"179":2,"212":1,"215":1,"217":6,"225":2,"231":1,"232":1,"246":2,"247":1,"248":1,"255":2,"257":1,"258":2,"262":1,"263":6,"264":3,"277":1,"287":1,"290":1,"311":1,"312":1,"314":1,"315":1,"319":1,"320":1,"321":1,"326":3,"335":1,"338":2,"339":2,"342":1,"343":2,"349":2,"355":1,"356":1,"359":2,"365":1,"374":1,"383":1,"384":1,"406":2,"407":3,"410":2,"411":1,"414":2,"415":2,"417":2,"420":2,"439":2,"441":1,"461":2,"462":2,"464":1,"475":1,"483":1,"491":1}}],["04",{"2":{"208":1,"441":1}}],["0deg",{"2":{"177":1}}],["06c9c9",{"2":{"177":1}}],["000",{"2":{"275":1}}],["0001",{"2":{"142":1}}],["000000",{"2":{"279":1}}],["0000",{"2":{"142":7}}],["0",{"2":{"83":2,"93":1,"126":1,"142":12,"177":1,"208":1,"217":4,"259":1,"314":1,"315":1,"319":1,"324":2,"325":2,"326":1,"354":3,"359":1,"371":2,"375":1,"377":1,"406":1,"412":1,"414":2,"415":2,"424":5,"435":1,"457":2,"462":6,"492":2,"505":1,"506":3,"513":2,"530":3,"531":3,"546":2,"591":5}}],["$dirs",{"2":{"424":1}}],["$backup",{"2":{"424":6}}],["$env",{"2":{"424":1}}],["$emit=defineemits",{"2":{"407":1}}],["$emit",{"2":{"132":1,"253":1,"254":2,"407":1}}],["$project",{"2":{"424":3}}],["$props=defineprops",{"2":{"407":1,"410":1}}],["$props",{"2":{"132":1,"177":2,"253":3,"254":2,"263":3,"321":2,"322":2,"362":1,"407":2,"410":2}}],["$github",{"2":{"424":5}}],["$target",{"2":{"424":8}}],["$sessionstorage",{"2":{"421":3}}],["$service",{"2":{"255":2}}],["$store",{"2":{"417":5}}],["$store=usecounterstore",{"2":{"417":1}}],["$store=usestore",{"2":{"237":1}}],["$state",{"2":{"412":4}}],["$root",{"2":{"424":3}}],["$route",{"2":{"365":2,"368":3,"373":3}}],["$router",{"2":{"237":1,"365":3,"366":4,"368":4}}],["$received",{"2":{"255":1}}],["$notifications",{"2":{"237":1}}],["$modals",{"2":{"237":1,"263":11,"264":1}}],["$uri",{"2":{"149":2}}],["$",{"2":{"83":3,"93":1,"121":2,"237":1,"408":1,"410":1,"413":1,"424":15,"437":1,"441":96,"469":2,"470":2,"473":6,"474":5,"536":2,"537":3}}],["$apikey$",{"2":{"44":6}}],["`dark`",{"2":{"506":1}}],["`desc`",{"2":{"505":1}}],["``",{"2":{"505":1}}],["`commits`",{"2":{"505":1}}],["`pulls`",{"2":{"505":1}}],["`~",{"2":{"441":1}}],["`sent",{"2":{"410":1}}],["`$",{"2":{"83":3,"93":1,"322":1,"438":4}}],["`",{"2":{"83":3,"93":1,"322":1,"410":1,"424":3,"437":1}}],["qbutton",{"2":{"490":1}}],["qa",{"0":{"72":1},"2":{"67":1}}],["quasar",{"2":{"441":2,"442":1}}],["quality",{"0":{"78":1}}],["quiet",{"2":{"441":1}}],["quicktime",{"2":{"221":1}}],["questions",{"2":{"502":1}}],["queue",{"2":{"338":9}}],["queuebuilder",{"2":{"238":1}}],["queryselector",{"2":{"462":1}}],["query",{"2":{"20":1,"349":2,"366":2,"368":2,"372":4,"373":2,"488":1}}],["quot",{"0":{"228":2,"259":2,"381":2},"2":{"2":4,"4":2,"9":2,"11":2,"23":2,"41":6,"59":2,"64":2,"65":4,"89":4,"96":2,"101":2,"104":2,"111":10,"112":2,"113":4,"114":4,"121":2,"123":2,"124":4,"132":6,"133":2,"142":6,"143":4,"145":4,"155":2,"158":2,"159":6,"160":8,"162":6,"163":2,"164":2,"165":2,"166":4,"167":4,"170":6,"171":4,"172":2,"174":2,"175":2,"176":12,"178":2,"179":2,"181":4,"182":2,"186":2,"187":2,"189":4,"190":4,"191":4,"195":6,"196":2,"204":2,"205":2,"208":2,"210":2,"213":8,"215":4,"217":2,"218":6,"222":6,"223":6,"224":2,"225":4,"226":8,"234":4,"242":2,"249":2,"252":2,"255":8,"257":2,"258":2,"263":4,"264":2,"270":8,"278":2,"279":4,"280":2,"283":2,"289":2,"293":2,"294":2,"306":2,"314":4,"316":4,"318":2,"319":2,"320":2,"323":2,"325":6,"326":2,"329":2,"331":14,"336":2,"338":4,"341":2,"349":2,"354":4,"359":8,"362":2,"363":6,"365":4,"368":2,"371":30,"375":4,"376":4,"377":8,"382":2,"405":4,"446":6,"450":8,"453":4,"454":4,"457":4,"458":4,"461":2,"463":2,"466":4,"471":2,"474":2,"482":4,"483":12,"487":2,"491":5,"492":6,"530":10,"535":8,"538":2,"541":2,"552":2,"561":14,"570":8,"580":2,"582":2}}],["x301",{"2":{"482":1}}],["x3c",{"2":{"93":2,"100":2,"112":8,"113":2,"114":4,"131":9,"147":4,"177":10,"179":8,"212":1,"213":5,"216":9,"217":46,"223":12,"225":8,"226":8,"228":1,"229":2,"231":2,"232":1,"233":4,"234":8,"254":4,"257":54,"259":6,"263":22,"272":1,"277":6,"290":2,"315":1,"321":8,"322":7,"325":4,"326":3,"342":33,"345":2,"347":29,"362":20,"365":12,"375":1,"406":20,"407":10,"410":12,"412":15,"417":14,"421":6,"433":20,"434":7,"435":1,"437":4,"438":8,"441":1,"481":2,"490":4,"506":2,"511":3,"513":7,"520":9,"524":3,"528":3,"530":10,"531":12,"543":10,"547":7,"563":5,"568":8,"572":8,"586":15}}],["xcode",{"2":{"470":1}}],["xshell",{"2":{"441":1}}],["xss",{"2":{"123":1}}],["xo",{"2":{"441":4}}],["xaml",{"2":{"441":2}}],["xdv",{"2":{"441":1}}],["xyz",{"2":{"252":1}}],["xmlhttprequest",{"2":{"369":1,"492":1}}],["xml",{"2":{"147":1,"323":1,"369":1,"441":4}}],["xhr",{"2":{"122":1,"545":1}}],["x",{"2":{"56":2,"138":1,"158":1,"164":1,"171":1,"201":1,"342":1,"446":2,"550":1}}],["x26",{"2":{"44":2,"83":2,"93":1,"217":2,"277":2,"342":2,"345":4,"375":2,"424":4,"441":1,"530":10,"543":2}}],["=+",{"2":{"441":1}}],["==",{"2":{"217":3,"263":1,"424":3}}],["=>return",{"2":{"415":1}}],["=>",{"2":{"179":1,"217":4,"252":5,"258":2,"263":6,"277":1,"278":2,"290":2,"315":1,"325":1,"326":16,"332":2,"333":2,"334":1,"338":2,"339":4,"340":4,"342":5,"343":3,"345":4,"347":1,"349":3,"359":1,"362":3,"363":3,"365":3,"374":1,"375":1,"377":2,"410":2,"414":3,"415":2,"420":1,"424":2,"435":1,"438":2,"457":2,"458":2,"459":1,"461":2,"462":2,"572":1}}],["=",{"0":{"89":1},"2":{"55":4,"61":2,"83":3,"93":4,"95":1,"106":1,"112":2,"113":2,"122":5,"128":2,"129":2,"131":6,"132":2,"144":1,"177":1,"179":3,"217":5,"222":1,"223":1,"226":3,"234":2,"252":4,"253":4,"254":4,"255":4,"258":1,"259":1,"263":18,"277":7,"278":4,"303":1,"304":1,"306":1,"307":1,"308":1,"309":1,"310":3,"311":2,"312":1,"313":2,"315":6,"319":7,"321":1,"322":1,"324":3,"325":12,"326":14,"332":4,"333":1,"334":2,"338":7,"339":2,"340":1,"343":2,"344":1,"345":1,"346":1,"347":3,"349":6,"359":2,"362":1,"365":2,"370":2,"372":2,"373":1,"374":1,"406":1,"409":1,"412":2,"414":1,"415":4,"416":1,"420":5,"421":1,"424":1,"433":3,"434":1,"435":2,"436":2,"438":3,"439":6,"446":6,"450":1,"457":2,"461":1,"463":1,"482":1,"505":1,"511":2,"520":1,"524":2,"528":2,"531":1,"543":1,"545":3,"546":2,"547":2,"563":1,"572":3}}],["ы",{"2":{"44":1}}],["jl65gwrnqq",{"2":{"563":2}}],["j",{"2":{"440":1}}],["jpg",{"2":{"439":1}}],["jpeg",{"2":{"425":1}}],["jest",{"2":{"441":10,"457":1,"479":1}}],["jenkins",{"2":{"401":1,"441":2}}],["jetbrains",{"2":{"208":1}}],["justify",{"2":{"216":1}}],["jasmine",{"2":{"441":10}}],["jamesives",{"2":{"424":3,"561":1}}],["javascirpt",{"2":{"383":1}}],["javascript",{"0":{"495":1},"2":{"47":1,"124":1,"131":1,"133":1,"178":1,"179":1,"189":1,"207":1,"208":1,"209":2,"210":2,"211":4,"214":2,"217":1,"221":3,"222":2,"223":3,"224":4,"225":5,"226":4,"228":1,"230":1,"231":1,"232":2,"233":2,"240":1,"252":3,"257":1,"278":1,"287":3,"288":1,"289":1,"290":2,"291":1,"300":1,"302":3,"303":2,"311":1,"314":1,"318":1,"320":1,"323":1,"324":2,"325":1,"326":1,"327":1,"329":1,"331":9,"332":1,"338":1,"343":1,"344":1,"351":1,"354":2,"356":1,"365":1,"369":1,"371":1,"377":2,"379":1,"384":1,"390":1,"397":1,"411":1,"412":1,"418":1,"420":3,"422":1,"437":1,"440":2,"441":2,"442":1,"446":4,"450":2,"456":1,"457":2,"458":1,"459":2,"460":1,"463":2,"481":1,"482":1,"483":3,"490":3,"491":7,"492":4,"495":1,"538":1,"543":1,"574":1}}],["java",{"2":{"221":1,"226":1,"302":1,"441":1}}],["jane",{"2":{"131":1}}],["jobs",{"2":{"424":2}}],["jo",{"2":{"371":1}}],["john",{"2":{"131":1,"253":1,"570":1}}],["join",{"0":{"50":1},"2":{"44":2,"51":1}}],["jwts",{"2":{"371":1}}],["jwt",{"2":{"123":4,"371":8,"501":2,"579":1}}],["jsscripts",{"2":{"465":1}}],["jsself",{"2":{"333":1}}],["jstest",{"2":{"458":1,"459":1,"464":1}}],["jslint",{"2":{"441":2}}],["jslocalstorage",{"2":{"418":1}}],["jslocation",{"2":{"372":1}}],["jslet",{"2":{"326":2,"332":1,"418":1}}],["jsethereum",{"2":{"377":1}}],["jseventbus",{"2":{"362":1}}],["jsexport",{"2":{"130":1,"214":1,"433":1,"460":1,"463":2,"505":1,"562":1}}],["jsmyfunction",{"2":{"326":1}}],["jsfibonaccisync",{"2":{"325":1}}],["jsf",{"2":{"324":1}}],["jsfunction",{"2":{"313":1,"325":2,"326":1}}],["jsdom",{"2":{"460":3}}],["jsdoc",{"0":{"100":1},"2":{"100":2}}],["jsdescribe",{"2":{"457":1}}],["jsdispatcher",{"2":{"315":1}}],["jsif",{"2":{"278":1,"332":1,"463":1}}],["jsimport",{"2":{"55":1,"122":3,"128":2,"129":3,"144":1,"214":2,"217":1,"251":2,"252":1,"255":4,"258":2,"263":3,"277":1,"279":1,"304":1,"306":1,"309":1,"310":1,"312":2,"315":2,"334":1,"338":1,"339":1,"340":1,"343":1,"344":1,"345":1,"346":1,"359":1,"360":1,"362":1,"365":1,"369":1,"370":1,"373":1,"374":1,"409":1,"412":1,"414":1,"416":1,"420":1,"436":1,"437":1,"440":1,"457":1,"461":1,"462":1,"545":1,"572":1}}],["js$",{"2":{"369":1}}],["js$props",{"2":{"362":1}}],["js$modals",{"2":{"263":1}}],["js$emit",{"2":{"253":1}}],["jsx",{"2":{"257":1,"441":3}}],["jspending",{"2":{"217":1}}],["jsconfig",{"2":{"441":11}}],["jsconsole",{"2":{"320":1,"325":2,"326":1}}],["jsconst",{"2":{"83":1,"106":1,"113":1,"132":1,"252":3,"253":4,"254":2,"255":1,"263":1,"303":1,"307":1,"308":1,"311":1,"319":1,"326":1,"340":1,"349":1,"372":1,"375":1,"424":1,"439":1,"446":2}}],["jsclass",{"2":{"304":1,"310":1,"315":1,"317":1}}],["jscreateapp",{"2":{"130":1}}],["jsasync",{"2":{"83":2,"326":1}}],["js",{"0":{"144":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"315":1,"317":1,"319":1,"325":1,"333":1,"334":1,"338":1,"339":1,"340":1,"343":1,"344":1,"345":1,"346":1,"349":1,"359":1,"360":1,"380":1,"381":1,"409":1,"412":1,"415":1,"416":1,"420":1,"439":1,"457":1,"461":1,"462":1},"1":{"381":1,"382":1,"383":1,"384":1,"385":1,"386":1,"387":1},"2":{"12":1,"54":1,"55":1,"77":1,"85":1,"95":1,"96":1,"100":1,"107":1,"112":1,"121":3,"122":4,"123":1,"124":3,"128":1,"130":1,"156":1,"208":5,"209":1,"210":4,"211":2,"214":5,"217":2,"224":2,"226":1,"243":1,"251":3,"258":3,"263":8,"264":6,"269":1,"278":3,"279":2,"305":1,"307":1,"309":2,"310":5,"315":2,"329":2,"330":1,"332":4,"333":1,"334":1,"338":2,"340":1,"342":1,"347":2,"348":4,"353":1,"358":1,"359":2,"363":1,"365":1,"366":1,"368":1,"382":1,"384":1,"386":1,"404":1,"415":2,"418":1,"425":1,"427":6,"428":6,"429":6,"430":10,"432":1,"437":4,"439":1,"440":3,"441":21,"442":2,"444":1,"446":3,"448":28,"450":1,"452":1,"455":2,"456":5,"457":2,"459":2,"460":1,"463":2,"464":1,"482":3,"483":2,"491":4,"492":1,"502":1,"503":1,"513":2,"530":2,"531":2,"542":1,"543":1,"545":1,"546":2,"563":3,"589":3}}],["jsonrpc",{"2":{"535":1,"546":6}}],["json5",{"2":{"441":1}}],["jsonc",{"2":{"441":1}}],["jsonmounted",{"2":{"362":1}}],["jsonp",{"2":{"349":3}}],["jsonplaceholder",{"2":{"124":1,"545":1}}],["json`",{"2":{"83":1}}],["json",{"0":{"18":1,"19":1,"38":1,"51":1,"546":1,"588":1},"2":{"6":1,"11":1,"17":5,"18":2,"19":1,"38":1,"50":2,"51":2,"56":1,"77":1,"104":1,"113":2,"118":2,"121":2,"122":1,"124":1,"126":9,"210":3,"272":4,"275":2,"303":1,"304":1,"309":1,"339":1,"342":4,"343":1,"344":1,"345":1,"348":1,"349":5,"370":1,"371":2,"418":2,"424":4,"437":1,"439":4,"440":4,"441":50,"456":3,"464":4,"465":1,"472":1,"491":1,"492":2,"505":1,"531":1,"535":5,"538":1,"545":1,"546":6,"572":1,"573":1,"576":1,"588":2}}],["richfooter",{"0":{"556":1}}],["right",{"2":{"550":1}}],["rip",{"2":{"450":1}}],["rgba",{"2":{"506":3,"530":3,"531":3,"591":6}}],["rspack",{"2":{"441":12}}],["rc",{"2":{"441":1}}],["r",{"2":{"424":2,"450":1,"502":2}}],["rf",{"2":{"424":4}}],["rm",{"2":{"424":3}}],["rxdb",{"2":{"341":1}}],["raw",{"2":{"437":2,"439":1,"440":1}}],["range=ref",{"2":{"415":1}}],["range",{"2":{"414":1,"417":3,"458":1}}],["randomuuid",{"2":{"338":1}}],["random",{"2":{"259":1}}],["ram",{"2":{"384":1}}],["radius",{"2":{"177":1}}],["radio",{"2":{"170":1,"347":2}}],["rush",{"2":{"441":1}}],["rust",{"2":{"441":1}}],["rustfmt",{"2":{"441":2}}],["ruby",{"2":{"441":1}}],["ru",{"2":{"441":3,"491":1,"502":2}}],["rules",{"2":{"441":2}}],["rule",{"2":{"159":1}}],["runs",{"2":{"424":2}}],["runcommand",{"2":{"317":1}}],["runlog",{"2":{"255":2}}],["run",{"2":{"144":1,"209":1,"210":4,"212":1,"217":1,"424":9,"455":1,"456":3,"457":4,"464":1,"465":1}}],["roboto",{"2":{"591":1}}],["robots",{"2":{"210":1}}],["rollupjs",{"2":{"214":1}}],["rollup",{"2":{"214":1,"440":2,"441":2}}],["role",{"2":{"123":1}}],["roach",{"0":{"196":1}}],["row",{"2":{"189":1,"543":1}}],["rotate",{"2":{"177":4}}],["root",{"2":{"149":1,"424":1,"439":1,"506":1,"525":1,"591":1}}],["route",{"2":{"366":6}}],["routeview",{"2":{"364":3,"365":1}}],["routes",{"0":{"106":1},"2":{"106":2,"144":1,"356":1,"359":3,"431":1,"433":1,"449":1}}],["routerlink>",{"2":{"362":3,"365":1}}],["routerlink",{"2":{"361":1,"362":4,"364":1,"365":2,"366":1}}],["routerview>",{"2":{"365":4}}],["routerview",{"2":{"361":1,"365":3}}],["routerecordraw",{"2":{"106":1}}],["router",{"0":{"144":1,"358":1,"359":1},"1":{"359":1,"360":1},"2":{"3":1,"20":1,"34":1,"127":1,"143":2,"144":2,"145":1,"147":1,"150":1,"153":1,"154":1,"252":3,"259":1,"335":1,"352":2,"355":1,"356":2,"358":1,"359":7,"360":3,"362":4,"365":2,"368":2,"373":1,"383":1,"384":1,"393":1,"427":1,"428":1,"429":1,"430":1,"433":4,"448":4,"538":1,"581":1}}],["routing",{"0":{"7":1,"581":1},"2":{"11":1}}],["rbac",{"2":{"123":1}}],["rtl",{"2":{"446":1,"570":1}}],["rt",{"2":{"123":4,"501":1,"506":21,"525":10,"530":10,"531":13}}],["rpc",{"0":{"546":1},"2":{"121":1,"122":1,"126":9,"491":1,"535":1,"545":1,"546":5,"576":1}}],["rehydration",{"2":{"492":1}}],["remix",{"2":{"441":2}}],["remote",{"2":{"424":7,"441":5,"475":1}}],["removed",{"2":{"424":1}}],["removed=`ls",{"2":{"424":1}}],["remove",{"2":{"424":2}}],["removeitem",{"2":{"418":1}}],["removeroute",{"2":{"368":1}}],["removeeventlistener",{"2":{"258":1,"290":1}}],["renovate",{"2":{"441":2}}],["rendering",{"2":{"492":1}}],["renderwhitespace",{"2":{"441":1}}],["render",{"2":{"425":1}}],["renderer",{"2":{"331":1}}],["recentchange",{"2":{"441":1}}],["receiver",{"2":{"420":1}}],["received",{"2":{"347":5}}],["recursive",{"2":{"424":1}}],["reddit",{"2":{"450":1,"502":1}}],["redis",{"2":{"450":1}}],["redirect",{"2":{"372":1}}],["red",{"2":{"417":3}}],["reilly",{"2":{"385":1}}],["req",{"2":{"349":5}}],["requiresauth",{"2":{"433":1}}],["required",{"2":{"373":1,"424":1}}],["require",{"2":{"349":2}}],["requirements",{"2":{"69":1}}],["requests",{"2":{"508":2}}],["requestaccounts",{"2":{"377":1}}],["requestotp",{"2":{"375":1}}],["request",{"2":{"44":3,"122":1,"147":2,"278":3,"338":2,"340":2,"342":3,"347":1,"349":2,"373":1,"377":1}}],["re",{"2":{"284":1}}],["repositories",{"2":{"505":1}}],["repository",{"2":{"469":1,"505":1,"511":1,"528":1}}],["reporter",{"2":{"464":1}}],["repo",{"2":{"441":1,"504":1,"505":2,"511":1,"520":1,"524":1,"528":1,"530":1,"531":1}}],["representation",{"2":{"437":1}}],["representational",{"2":{"344":1,"369":1}}],["replit",{"2":{"441":1}}],["replace",{"0":{"367":1}}],["replacement",{"2":{"209":1}}],["reply=>",{"2":{"347":1}}],["repeat",{"0":{"291":1},"2":{"283":1,"317":1}}],["registertype",{"2":{"279":1}}],["register",{"2":{"278":1,"430":1,"448":1,"450":1}}],["rejects",{"2":{"459":1}}],["reject",{"2":{"249":1,"252":1,"263":6,"326":7,"338":6,"340":1,"343":6,"345":6}}],["readdir",{"2":{"483":1}}],["readme",{"2":{"441":2}}],["ready",{"2":{"277":4}}],["read",{"2":{"248":1,"450":1}}],["reactivity",{"0":{"419":1},"1":{"420":1,"421":1},"2":{"450":1,"482":2}}],["reactive",{"2":{"131":7,"263":6,"318":1,"403":1,"411":1,"412":3,"420":3,"435":2,"446":6,"450":6,"482":2}}],["react",{"2":{"222":1,"354":1,"482":6,"491":2}}],["releasetimeline",{"2":{"511":2,"524":2,"528":2}}],["releases",{"2":{"505":6,"508":2}}],["release",{"0":{"514":1},"1":{"515":1,"516":1,"517":1,"518":1},"2":{"441":4,"481":2,"505":3,"510":3,"511":4,"513":4,"520":6,"521":1,"522":1,"523":3,"524":5,"525":1,"527":3,"528":4,"530":3,"531":4,"532":1}}],["releaserc",{"2":{"441":2}}],["related",{"2":{"279":1}}],["relative",{"2":{"114":1}}],["rel",{"2":{"272":1}}],["rel=",{"2":{"212":1,"213":3,"272":1,"513":1,"520":2,"530":1,"531":1}}],["reload",{"2":{"210":1,"424":1}}],["rewritecond",{"2":{"147":2}}],["rewriterule",{"2":{"147":2}}],["rewritebase",{"2":{"147":2}}],["rewriteengine",{"2":{"147":1}}],["rewrite",{"2":{"147":1}}],["resx",{"2":{"441":2}}],["res",{"2":{"349":6}}],["results",{"2":{"457":2}}],["result=>",{"2":{"345":2,"374":1,"375":2}}],["result=await",{"2":{"343":1}}],["result",{"2":{"326":8,"339":2,"343":3,"345":6,"374":1,"375":2,"377":2,"457":2}}],["resize",{"2":{"290":3}}],["responsibility",{"0":{"288":1},"2":{"283":1}}],["responsive",{"0":{"189":1},"2":{"270":1}}],["response=>",{"2":{"370":1}}],["response",{"2":{"278":3,"370":2,"372":1,"424":2}}],["respondwith",{"2":{"278":1}}],["resolves",{"2":{"459":3}}],["resolver",{"2":{"440":1,"441":1}}],["resolve",{"2":{"214":2,"249":1,"252":3,"263":6,"326":9,"338":6,"340":2,"343":6,"345":4,"440":2,"459":1}}],["resource",{"2":{"125":1,"437":2}}],["restful",{"2":{"344":2,"369":1}}],["rest",{"0":{"52":1,"56":1,"126":2,"545":1},"1":{"53":1,"54":1,"55":1,"56":1},"2":{"40":1,"43":1,"44":3,"56":4,"58":1,"59":2,"118":1,"121":1,"122":1,"126":2,"369":1,"508":3,"515":1,"535":1,"545":1,"546":2}}],["ref=",{"2":{"179":1}}],["refresh",{"2":{"123":1,"501":1}}],["refactor",{"0":{"100":1},"2":{"100":1}}],["ref",{"2":{"93":1,"112":2,"113":1,"131":6,"179":3,"217":5,"226":7,"234":2,"258":1,"277":4,"318":1,"342":1,"347":4,"370":3,"406":2,"410":1,"415":2,"435":1,"446":7,"450":5,"482":2,"545":1}}],["returns",{"2":{"100":4}}],["return",{"2":{"83":4,"93":1,"100":2,"112":3,"122":1,"130":2,"217":2,"223":1,"226":2,"252":1,"258":1,"259":1,"263":3,"264":3,"278":2,"304":2,"306":1,"307":1,"308":1,"311":2,"313":2,"315":1,"319":3,"325":1,"326":7,"338":1,"340":1,"343":3,"345":2,"359":1,"412":1,"414":3,"415":4,"420":5,"435":1,"438":2,"439":2,"545":1,"546":1}}],["return=minimal",{"2":{"56":1}}],["rdbms",{"2":{"39":1}}],["f6f6f7",{"2":{"506":1}}],["ffffff",{"2":{"506":2}}],["fcp",{"2":{"492":1}}],["fs",{"2":{"483":1}}],["fsd",{"2":{"448":1,"449":1}}],["fdb",{"2":{"441":1}}],["feedtype",{"2":{"505":5}}],["fetish",{"2":{"479":1}}],["fetch",{"2":{"41":1,"122":1,"278":2,"369":1,"424":1,"483":1,"541":1,"545":1}}],["ferferga",{"2":{"450":1}}],["featuretests",{"2":{"430":1,"448":1}}],["features",{"2":{"430":1,"448":2}}],["feature",{"0":{"430":1},"2":{"430":1,"448":2}}],["ftcms",{"2":{"387":1}}],["ftp",{"2":{"151":2}}],["fps",{"2":{"331":2}}],["fnc",{"2":{"442":1,"446":1}}],["fn",{"2":{"280":1,"315":4}}],["f12",{"2":{"280":2}}],["flow",{"2":{"498":1}}],["flowconfig",{"2":{"441":2}}],["flake",{"2":{"441":2}}],["flash",{"2":{"221":1}}],["fls",{"2":{"441":1}}],["flipcoin",{"2":{"259":3}}],["flex",{"2":{"117":1,"189":4,"216":2,"217":3,"543":3}}],["flexbox",{"2":{"35":1,"117":1,"189":1,"488":1,"497":2}}],["frequently",{"2":{"502":1}}],["freezed",{"2":{"441":1}}],["free",{"2":{"159":1}}],["framework",{"2":{"318":1,"384":1}}],["frontend",{"2":{"431":1,"448":1}}],["frontends",{"2":{"431":1,"448":1}}],["frontier",{"2":{"152":1}}],["from",{"2":{"55":4,"95":1,"100":2,"112":3,"122":9,"128":2,"129":6,"131":1,"144":1,"179":1,"214":2,"216":1,"217":1,"226":2,"234":3,"251":4,"252":4,"255":4,"258":2,"259":2,"263":8,"277":1,"279":3,"290":1,"304":2,"306":1,"309":2,"310":4,"312":5,"315":2,"322":1,"334":2,"338":1,"339":1,"340":1,"342":2,"343":1,"344":1,"345":1,"346":1,"347":2,"359":3,"360":5,"362":2,"365":1,"369":1,"370":2,"373":1,"374":1,"406":2,"409":1,"410":2,"412":2,"414":1,"415":2,"416":3,"417":1,"420":1,"421":1,"434":1,"435":1,"436":2,"437":3,"438":2,"439":2,"440":2,"457":3,"461":3,"462":3,"505":2,"511":1,"520":1,"524":1,"528":1,"543":1,"545":2,"546":5,"547":2,"561":1,"572":2}}],["f",{"2":{"147":1,"324":3}}],["family",{"2":{"506":1,"525":2,"591":1}}],["fail",{"2":{"458":1}}],["fallback",{"2":{"439":1}}],["false",{"2":{"122":1,"170":2,"217":2,"263":2,"277":2,"279":1,"339":1,"375":1,"414":1,"424":2,"441":27,"450":1,"505":1,"535":4}}],["fahrenheit",{"2":{"319":7}}],["factory",{"0":{"313":1},"2":{"296":1}}],["facebook",{"2":{"222":1,"374":1,"586":1}}],["façade",{"0":{"323":1},"2":{"283":1,"298":1,"323":1,"326":1,"418":1}}],["fa",{"2":{"213":2,"217":6}}],["favicon",{"2":{"210":1}}],["favorite",{"2":{"100":3}}],["favourites",{"2":{"95":3,"100":2,"106":3,"112":7,"113":3,"114":1}}],["faq",{"2":{"185":1,"424":1,"502":1}}],["fix",{"2":{"441":1}}],["fixall",{"2":{"441":2}}],["field",{"2":{"439":2}}],["finance",{"2":{"570":1}}],["finally",{"2":{"326":2,"342":2}}],["find",{"2":{"441":1,"462":4,"572":1}}],["fingerprint",{"2":{"123":1}}],["fibonaccioutput",{"0":{"461":1},"2":{"455":2,"460":1,"461":3}}],["fibonacciinput",{"0":{"462":1},"2":{"455":2,"462":3}}],["fibonacci",{"0":{"457":1},"2":{"455":2,"456":3,"457":12,"458":2}}],["fibonaccipromise",{"2":{"326":2,"457":2,"459":2}}],["fibonacciasync",{"2":{"325":2}}],["fibonaccisync",{"2":{"325":3}}],["fill",{"2":{"438":1}}],["filter",{"2":{"217":2,"264":1}}],["filenesting",{"2":{"441":3}}],["filename2",{"2":{"471":1}}],["filename1",{"2":{"471":1}}],["filename",{"2":{"147":2,"252":1,"332":1,"439":10}}],["filelistlayout",{"2":{"441":1}}],["file=",{"2":{"424":1}}],["filehippo",{"2":{"203":2}}],["filezilla",{"2":{"151":1}}],["file",{"2":{"151":1,"160":1,"424":2,"441":2,"471":1}}],["files",{"2":{"121":1,"149":1,"210":1,"424":1,"441":3}}],["fi",{"2":{"186":1,"424":2}}],["fitts",{"2":{"164":1}}],["fira",{"2":{"441":1}}],["first",{"2":{"189":1,"237":1,"441":1,"568":1,"589":1}}],["firstname",{"2":{"50":1}}],["firesbase",{"2":{"579":1}}],["firestore",{"2":{"491":1}}],["firefox",{"2":{"133":1,"208":1,"331":1,"384":1}}],["firebase",{"2":{"39":2,"41":1,"124":2,"425":2,"441":4,"579":1}}],["fowler",{"2":{"431":1,"448":1}}],["font",{"2":{"506":1,"525":2,"591":1}}],["fontweight",{"2":{"441":1}}],["fontligatures",{"2":{"441":1}}],["fontfamily",{"2":{"441":1}}],["fontaliasing",{"2":{"441":1}}],["fontawesome",{"0":{"213":1},"2":{"213":6}}],["fonts",{"2":{"279":1,"589":1}}],["found",{"2":{"278":3}}],["foundation",{"2":{"152":1}}],["foot",{"2":{"270":1}}],["footers",{"0":{"554":1},"1":{"555":1,"556":1,"557":1,"558":1,"559":1}}],["footer>",{"2":{"263":2}}],["footer",{"0":{"32":1},"2":{"28":1,"121":1,"535":2,"542":2,"576":1,"579":1}}],["folder",{"2":{"424":1}}],["fold",{"2":{"191":1}}],["fork",{"2":{"500":1}}],["foreign",{"2":{"450":1}}],["foreach",{"2":{"339":1}}],["formulate",{"2":{"441":10}}],["formkit",{"2":{"441":10}}],["formatters",{"2":{"446":2}}],["formatter",{"2":{"441":1}}],["formatting",{"2":{"441":1,"446":1}}],["formatonsave",{"2":{"441":1}}],["format",{"2":{"424":3,"441":2}}],["forward",{"2":{"368":1}}],["for=",{"2":{"179":1,"217":2,"231":1,"342":1,"362":1,"365":1}}],["for",{"0":{"231":1,"293":1},"1":{"296":1,"297":1,"298":1,"299":1},"2":{"55":1,"121":1,"142":1,"159":1,"166":1,"179":1,"189":2,"217":2,"231":1,"234":1,"283":1,"315":1,"325":2,"326":1,"424":1,"439":2,"441":1,"492":1,"505":1,"535":1}}],["fullpath",{"2":{"368":1}}],["fullscreen",{"2":{"273":2}}],["function",{"2":{"95":1,"100":4,"112":4,"179":1,"217":2,"255":1,"258":2,"259":1,"263":1,"264":1,"277":3,"290":1,"319":2,"326":1,"339":1,"342":4,"347":1,"370":1,"374":1,"375":3,"406":1,"407":1,"410":2,"412":1,"415":2,"420":2,"435":3,"439":3,"457":2,"563":1,"572":1}}],["functions",{"2":{"40":1,"124":2,"430":1,"450":1}}],["fu",{"2":{"20":1,"96":1,"441":1,"538":1}}],["l",{"2":{"147":2,"190":1,"315":2,"572":2}}],["learn",{"2":{"491":1}}],["learning",{"2":{"159":1}}],["lerna",{"2":{"441":2,"472":1}}],["leex",{"2":{"441":1}}],["less",{"2":{"441":1}}],["level",{"2":{"182":6}}],["let",{"0":{"152":1},"2":{"139":1,"152":3,"153":1,"271":1,"315":1,"325":8,"326":4,"332":1,"338":2,"343":2,"375":1,"398":1,"420":2,"439":1,"457":1,"462":2}}],["lengths",{"2":{"505":1}}],["length==0",{"2":{"217":1}}],["length",{"2":{"112":1,"114":1,"217":6,"315":1,"439":2}}],["left",{"2":{"44":1,"217":2}}],["live",{"2":{"463":1}}],["license",{"2":{"441":1}}],["limit",{"2":{"441":3}}],["lib",{"2":{"430":1,"441":1,"448":1}}],["life",{"2":{"226":1}}],["lifecycle",{"2":{"67":1}}],["lintstagedrc",{"2":{"441":2}}],["lint",{"2":{"441":4}}],["line",{"2":{"441":1,"505":1}}],["linenumbers",{"2":{"441":1}}],["lineno",{"2":{"332":1}}],["lines",{"0":{"365":1}}],["linear",{"2":{"177":1}}],["link",{"2":{"212":2,"213":3,"272":1,"387":1,"513":1,"520":2,"530":1,"531":1}}],["linux",{"0":{"469":1},"2":{"145":2,"148":3,"151":1,"172":1,"208":2,"270":1,"280":1,"331":1,"384":5,"441":1,"467":2,"469":1}}],["lighthouserc",{"2":{"441":20}}],["lighthouse",{"0":{"280":1},"2":{"268":1,"280":3,"281":1}}],["light",{"2":{"121":1,"217":1,"257":1}}],["like",{"2":{"100":1,"450":2}}],["listening",{"2":{"349":1}}],["listen",{"2":{"149":1,"349":1}}],["list",{"2":{"100":3,"215":1,"217":8,"440":1,"441":1}}],["listfavourites",{"2":{"100":3,"112":5,"113":1,"114":1}}],["lts",{"2":{"208":1,"384":1}}],["lt",{"2":{"96":1,"100":1,"130":1,"210":1,"216":1,"259":1,"362":3,"415":1,"441":1,"474":4}}],["ls",{"2":{"95":4}}],["large",{"2":{"505":1}}],["latexmk",{"2":{"441":1}}],["latest",{"2":{"209":1,"424":2}}],["landing",{"2":{"359":5,"362":1}}],["lang",{"2":{"274":1}}],["language",{"2":{"237":1,"247":1,"441":1}}],["lang=",{"2":{"89":1,"112":1,"225":1,"438":1,"543":1,"547":1,"572":1}}],["lastindexof",{"2":{"439":2}}],["last",{"2":{"253":2,"441":1}}],["lastname",{"2":{"50":1}}],["label",{"2":{"217":3,"321":4,"322":2}}],["label>",{"2":{"217":4,"347":4}}],["law",{"2":{"164":1}}],["lamda",{"2":{"124":1}}],["lambda",{"2":{"124":1}}],["layer",{"2":{"121":1,"370":1,"535":1}}],["layouts",{"2":{"431":1,"449":1}}],["layoutadmin",{"2":{"428":1,"448":1}}],["layoutdefault",{"2":{"428":1,"448":1}}],["layout",{"0":{"117":1},"2":{"27":1,"36":1,"121":1,"257":1,"365":1,"427":1,"428":1,"448":2,"535":2,"576":1,"579":1,"582":1,"591":1}}],["lot",{"2":{"441":1}}],["lof",{"2":{"441":1}}],["loadicons",{"2":{"439":2}}],["loadingerror",{"2":{"252":2}}],["loadingcomponent",{"2":{"252":3}}],["loading",{"2":{"122":2,"229":3,"434":2,"435":2}}],["loadproject",{"2":{"362":2}}],["loadnotes",{"2":{"342":4}}],["loaderset",{"2":{"435":4}}],["loaderbar",{"2":{"434":1}}],["loader",{"2":{"252":2,"430":1,"434":1,"448":1}}],["lock",{"2":{"210":1,"441":13}}],["location",{"2":{"149":2,"372":1,"424":1}}],["locale",{"2":{"572":3}}],["locales",{"2":{"572":3}}],["local",{"2":{"472":1}}],["localstore",{"2":{"418":1}}],["localstoragename",{"2":{"424":3}}],["localstorage",{"2":{"95":3,"96":2,"113":4,"123":2,"277":1,"357":1,"362":1,"418":4,"423":2,"424":3,"591":1}}],["localhost",{"2":{"142":1,"209":1,"278":1,"345":1,"349":2}}],["loop",{"2":{"483":1}}],["loopback",{"2":{"142":3}}],["lookup",{"2":{"335":1}}],["loosely",{"2":{"2":1}}],["logic",{"2":{"450":2}}],["login",{"2":{"106":1,"430":1,"448":1,"450":1}}],["logs",{"2":{"424":1,"441":1}}],["log",{"2":{"255":1,"304":1,"319":1,"320":1,"325":7,"326":8,"332":1,"333":1,"349":1,"370":2,"377":2,"424":1,"441":1,"446":1,"472":6}}],["logmessage",{"2":{"255":2}}],["logout",{"2":{"122":1,"450":1}}],["lodash",{"2":{"96":1}}],["low",{"2":{"39":1}}],["шпаргалки",{"0":{"493":1},"1":{"494":1,"495":1,"496":1,"497":1,"498":1,"499":1}}],["шкалы",{"2":{"331":1}}],["шкале",{"2":{"320":1,"515":1}}],["шлюз",{"2":{"301":1}}],["шлюза",{"2":{"300":1}}],["шнайдермане",{"2":{"166":1}}],["шнайдерман",{"2":{"166":1}}],["шнайдермана",{"0":{"166":1}}],["шестнадцатеричных",{"2":{"142":1}}],["шифрующая",{"2":{"371":1}}],["шифрованного",{"2":{"370":1}}],["шифрования",{"2":{"152":2,"371":1}}],["шину",{"2":{"407":1,"408":1}}],["шины",{"0":{"408":1},"1":{"409":1,"410":1},"2":{"403":1,"408":1,"409":1,"411":1}}],["шиной",{"2":{"362":1,"408":1}}],["шина",{"2":{"126":1,"408":1,"423":1}}],["широкие",{"2":{"369":1}}],["широкий",{"2":{"157":2,"305":1}}],["широким",{"2":{"96":1}}],["широком",{"2":{"317":1,"335":1}}],["широкое",{"2":{"155":1,"213":1}}],["широко",{"2":{"145":1,"146":1,"185":1,"190":1,"201":1,"299":1,"326":1,"370":1}}],["широкого",{"2":{"41":1,"184":1,"541":1}}],["ширина",{"2":{"582":1}}],["ширине",{"2":{"189":1}}],["ширину",{"2":{"117":1,"181":1,"217":1}}],["шириной",{"2":{"96":1}}],["ширины",{"2":{"96":1,"117":1}}],["шторки",{"2":{"576":1}}],["шторка",{"2":{"576":1}}],["шторок",{"2":{"551":1}}],["штраф",{"2":{"344":1}}],["штатном",{"2":{"441":1}}],["штатную",{"2":{"104":1}}],["штата",{"2":{"363":1}}],["штатов",{"2":{"363":1}}],["штат",{"2":{"363":1}}],["штабелируемыми",{"2":{"320":1}}],["штука",{"2":{"126":1}}],["штукатурки",{"2":{"26":1}}],["шаге",{"2":{"248":1,"320":1,"371":1,"373":1,"374":1}}],["шагу",{"2":{"246":1}}],["шагом",{"2":{"209":1,"212":1,"216":1,"245":1,"248":1,"268":1,"338":1,"341":1,"372":1,"375":1,"391":1,"471":1}}],["шагов",{"2":{"67":1,"139":1,"152":1,"176":1,"208":1,"370":1,"374":1,"377":1,"475":1}}],["шаги",{"2":{"207":1,"208":2,"209":1,"212":1,"220":1,"263":1,"371":1,"474":1,"475":2}}],["шаг",{"0":{"247":1,"248":1,"249":1},"2":{"142":1,"155":1,"190":1,"209":1,"218":1,"245":1,"246":1,"247":1,"248":1,"249":1,"264":1,"320":1,"331":1,"374":1,"376":2,"391":1,"416":1,"474":1,"492":1}}],["шагах",{"2":{"166":1}}],["шагами",{"2":{"152":1}}],["шага",{"2":{"67":1}}],["шаблонная",{"2":{"456":1}}],["шаблонные",{"0":{"361":1}}],["шаблонным",{"2":{"191":1}}],["шаблону",{"2":{"190":1,"262":1,"264":1,"277":1,"323":1,"336":1,"337":1,"450":1}}],["шаблоном",{"2":{"175":1,"263":1,"314":1,"318":1,"328":1,"365":1,"422":1}}],["шаблонов",{"0":{"249":1,"295":1,"369":1,"408":1},"1":{"296":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"326":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1,"377":1,"409":1,"410":1},"2":{"155":3,"158":1,"171":2,"180":1,"186":2,"191":1,"192":1,"204":1,"205":1,"206":2,"207":1,"243":1,"246":1,"248":1,"249":1,"255":1,"256":1,"268":1,"277":1,"283":3,"293":1,"294":2,"295":2,"299":2,"304":1,"312":1,"335":1,"354":1,"376":1,"382":1,"403":1,"418":1,"419":1}}],["шаблона",{"2":{"172":1,"173":1,"176":1,"178":3,"179":1,"190":2,"207":1,"211":1,"217":1,"226":1,"255":2,"257":5,"259":2,"263":1,"294":1,"302":2,"314":1,"316":2,"317":1,"318":2,"320":2,"322":1,"323":2,"325":2,"329":1,"334":1,"335":2,"336":1,"351":1,"362":1,"375":1,"406":1,"408":1,"410":1,"411":1,"418":1,"419":1,"472":1,"540":1,"542":1,"579":1}}],["шаблонам",{"2":{"158":1,"168":1,"281":1,"405":1,"492":1}}],["шаблонами",{"0":{"419":1},"1":{"420":1,"421":1},"2":{"155":1,"167":1,"193":1,"202":1,"299":1,"301":1,"313":1,"319":1,"326":1,"329":1,"350":1,"403":1}}],["шаблонах",{"2":{"158":1,"212":1,"216":1,"243":1,"323":1,"382":1}}],["шаблоны",{"0":{"155":1,"168":1,"180":1,"188":1,"192":1,"193":1,"283":1,"296":1,"297":1,"298":1,"299":1,"380":1,"390":1},"1":{"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":2,"170":2,"171":2,"172":2,"173":2,"174":2,"175":2,"176":2,"177":2,"178":2,"179":2,"180":1,"181":2,"182":2,"183":2,"184":2,"185":2,"186":2,"187":2,"188":1,"189":2,"190":2,"191":2,"192":2,"193":1,"194":2,"195":2,"196":2,"197":2,"198":2,"199":2,"200":2,"201":2,"202":2,"203":2,"204":2,"205":1,"206":1,"284":1,"285":1,"286":1,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"326":1,"327":1,"328":1,"381":1,"382":1,"383":1,"384":1,"385":1,"386":1,"387":1},"2":{"136":1,"155":1,"158":1,"162":1,"167":2,"171":2,"176":1,"180":1,"188":1,"192":4,"193":1,"206":2,"221":1,"234":1,"243":1,"245":1,"249":4,"251":1,"257":1,"258":1,"264":1,"266":2,"267":1,"283":1,"294":2,"295":1,"298":1,"319":1,"327":4,"328":2,"334":1,"335":1,"336":1,"337":1,"338":1,"356":1,"368":1,"369":1,"379":1,"382":1,"390":1,"399":1,"403":1,"404":1,"408":1,"417":1,"419":1,"428":1,"448":1}}],["шаблоне",{"2":{"89":1,"179":1,"204":1,"218":1,"226":5,"258":1,"263":1,"264":1,"277":1,"320":3,"323":1,"336":1,"337":1,"347":1,"361":1,"368":1,"407":1,"410":1,"412":1,"437":1,"538":1}}],["шаблон",{"0":{"294":1,"300":1,"305":1,"313":1,"314":1,"316":1,"318":1,"320":1,"323":1,"324":1,"326":1,"335":1,"336":1},"1":{"301":1,"302":1,"303":1,"304":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"315":1,"317":1,"319":1,"321":1,"322":1,"325":1},"2":{"41":1,"112":1,"169":1,"171":1,"172":3,"173":1,"174":1,"175":2,"181":1,"185":2,"186":5,"189":1,"190":4,"194":1,"195":1,"196":1,"199":2,"202":1,"207":1,"213":1,"216":1,"217":2,"226":1,"249":2,"254":3,"256":1,"260":1,"294":2,"296":3,"297":2,"298":3,"299":2,"300":1,"301":1,"304":2,"305":1,"310":1,"312":1,"313":1,"314":2,"315":1,"316":1,"317":2,"318":3,"319":2,"320":3,"322":2,"323":4,"324":3,"325":1,"326":2,"328":1,"329":1,"335":7,"336":1,"347":1,"375":3,"407":2,"408":2,"410":2,"411":1,"413":1,"421":1,"431":1,"449":1,"450":1,"461":1,"482":2,"490":1}}],["шрифта",{"2":{"212":1}}],["шрифтами",{"2":{"161":1,"213":1}}],["шрифты",{"2":{"210":1,"213":5,"219":1}}],["шрифтом",{"2":{"194":1,"217":1}}],["шрифтовых",{"2":{"213":1}}],["шрифтов",{"2":{"161":1,"211":3,"213":3,"215":1}}],["шрифт",{"2":{"26":1,"161":1}}],["цукерберг",{"2":{"482":1}}],["цветом",{"2":{"280":1,"457":1}}],["цветовую",{"2":{"506":1}}],["цветов",{"2":{"157":1,"159":1,"169":1,"270":1}}],["цветовой",{"2":{"95":1,"159":1}}],["цветовые",{"2":{"26":1,"579":1}}],["цвет",{"2":{"159":2,"170":1,"177":1,"213":1,"216":1,"274":2}}],["цветами",{"2":{"213":1,"277":1}}],["цветах",{"2":{"170":1}}],["цвета",{"2":{"159":2,"160":1,"169":1,"270":1,"457":1}}],["цитата",{"2":{"490":1}}],["цикле",{"2":{"331":1,"483":1}}],["цикл",{"2":{"231":1,"278":1,"290":1}}],["циклу",{"2":{"231":1}}],["цикла",{"2":{"226":1,"231":1,"258":1,"290":2,"310":1,"362":1,"365":1,"410":1}}],["циклов",{"2":{"96":1}}],["цифровыми",{"2":{"377":1}}],["цифрой",{"2":{"173":1,"178":1}}],["цифра",{"2":{"173":1}}],["цифры",{"2":{"142":1}}],["царька",{"2":{"111":1}}],["цепляемыми",{"2":{"320":1}}],["цепочечный",{"2":{"457":1}}],["цепочечными",{"2":{"129":1,"457":1}}],["цепочку",{"2":{"311":1,"325":1,"326":2}}],["цепочке",{"2":{"223":1,"326":1}}],["ценность",{"2":{"430":1,"448":1,"477":1,"478":1}}],["цене",{"2":{"377":1}}],["ценовые",{"2":{"199":1}}],["цена",{"2":{"198":1}}],["цен",{"0":{"198":1}}],["центов",{"2":{"142":1}}],["централизованным",{"2":{"412":1}}],["централизованное",{"2":{"423":1}}],["централизованного",{"2":{"403":1,"412":2}}],["централизованному",{"2":{"257":1,"362":1}}],["центральный",{"2":{"413":1,"419":1,"476":1}}],["центральном",{"2":{"476":1}}],["центрального",{"2":{"417":1,"422":1}}],["центральное",{"2":{"243":1,"413":2,"417":1}}],["центральной",{"2":{"31":1,"581":1}}],["центральную",{"2":{"159":1}}],["центральная",{"2":{"28":1}}],["центрирования",{"2":{"216":1}}],["центре",{"2":{"209":1}}],["центру",{"2":{"174":1,"216":1}}],["центр",{"2":{"123":1}}],["цены",{"2":{"142":1,"198":1,"199":1}}],["цену",{"2":{"96":1}}],["целях",{"2":{"344":1}}],["целями",{"2":{"69":1,"164":1}}],["целям",{"2":{"68":1,"209":1}}],["целая",{"2":{"299":1}}],["целые",{"2":{"294":1,"453":1}}],["целый",{"2":{"270":1,"475":1,"476":1}}],["целостного",{"2":{"466":1}}],["целостные",{"2":{"430":1,"448":1}}],["целое",{"2":{"224":1,"289":1,"368":1,"453":1,"455":1}}],["целого",{"2":{"179":1}}],["целом",{"2":{"68":1,"152":1,"218":1,"246":1,"263":1,"270":1,"293":1,"323":1,"335":1,"376":1,"441":1,"449":1,"490":1,"491":1,"492":2}}],["целесообразность",{"2":{"479":1}}],["целесообразно",{"2":{"351":1,"431":1,"449":1}}],["целесообразным",{"2":{"348":1}}],["целевую",{"2":{"362":1}}],["целевая",{"2":{"318":1,"357":2}}],["целевым",{"2":{"318":1}}],["целевые",{"2":{"275":1}}],["целевых",{"2":{"189":1,"270":1}}],["целевого",{"2":{"320":1,"321":2,"322":1}}],["целевому",{"2":{"172":1,"318":1,"320":1,"322":1,"377":1,"483":1}}],["целевом",{"2":{"172":1}}],["целевое",{"2":{"144":1}}],["целевой",{"2":{"142":1,"318":4,"319":2,"320":1,"377":1,"474":1}}],["целей",{"2":{"157":2,"158":1,"213":2,"221":1,"294":1,"334":1,"335":1,"369":1,"377":1,"417":1,"418":1}}],["цели",{"0":{"76":1,"77":1,"542":1},"1":{"77":1,"78":1,"79":1,"80":1},"2":{"96":1,"164":5,"167":1,"286":1,"424":1,"450":1}}],["целиком",{"2":{"26":1}}],["цельсия",{"2":{"318":1}}],["целью",{"2":{"74":1,"193":1,"195":1,"199":1,"203":1,"204":1,"319":1,"365":1,"410":1,"453":1,"455":1}}],["цель",{"0":{"63":1},"2":{"65":1,"68":1,"139":1,"157":2,"167":1,"176":1,"186":1,"215":1,"223":1,"318":2,"320":3,"362":1,"462":1}}],["huskyrc",{"2":{"441":2}}],["human",{"2":{"166":1}}],["hxx",{"2":{"441":3}}],["hpp",{"2":{"441":3}}],["hmacsha256",{"2":{"371":1}}],["hmr",{"2":{"209":1,"440":1}}],["hs256",{"2":{"371":3}}],["href",{"2":{"362":1}}],["href=",{"2":{"212":1,"213":3,"272":1,"513":1,"520":2,"530":1,"531":1}}],["h4>child",{"2":{"417":1}}],["h4>данные",{"2":{"347":1}}],["h4>",{"2":{"347":2,"410":2,"417":1}}],["h4>текст",{"2":{"347":1}}],["h3>selected",{"2":{"342":1}}],["h3>notes",{"2":{"342":1}}],["h3>new",{"2":{"342":1}}],["h3>",{"2":{"342":3,"407":2}}],["hamburger",{"2":{"547":1}}],["have",{"2":{"505":1}}],["handler",{"2":{"319":3,"420":3}}],["handleappinstalled",{"2":{"277":2}}],["hasroute",{"2":{"368":1}}],["hash",{"2":{"149":1,"359":2,"368":1}}],["has",{"2":{"100":1,"112":2}}],["haskell",{"2":{"56":1}}],["hidden",{"2":{"550":1}}],["hide=",{"2":{"568":1}}],["hidemergecommits",{"2":{"505":1}}],["hidecommitusername",{"2":{"505":1}}],["hidepullusername",{"2":{"505":1}}],["histoire",{"2":{"441":10}}],["history",{"2":{"143":1,"144":1,"359":7,"441":5}}],["highlightmodifiedtabs",{"2":{"441":1}}],["hi",{"2":{"255":1,"334":1}}],["h1",{"2":{"225":1,"320":1,"321":1}}],["h1>hello",{"2":{"225":1}}],["h1>",{"2":{"217":2,"225":1,"321":2}}],["hyvinkaa",{"2":{"186":1}}],["hypertext",{"2":{"152":1}}],["hola",{"2":{"481":1}}],["holding",{"2":{"450":2}}],["houdini",{"2":{"441":1}}],["hover",{"2":{"441":1}}],["hooks",{"2":{"226":1,"441":4}}],["hot",{"2":{"209":1,"210":1}}],["homebrew",{"2":{"470":1}}],["home",{"2":{"149":1,"162":1,"357":1,"427":1,"430":1,"448":2,"535":1}}],["homeview",{"2":{"105":1}}],["hosts",{"2":{"450":1}}],["host",{"2":{"125":1,"424":7}}],["how",{"2":{"121":1}}],["hopscotch",{"2":{"43":1}}],["hoppscotch",{"0":{"42":1},"1":{"43":1,"44":1},"2":{"44":1,"82":1,"441":1}}],["h",{"2":{"56":8,"424":1,"441":4}}],["htaccess",{"0":{"147":1},"2":{"148":1}}],["httponly",{"2":{"123":3}}],["http",{"0":{"146":1},"1":{"147":1},"2":{"56":2,"83":4,"93":1,"122":11,"124":1,"125":3,"145":1,"146":1,"152":1,"329":1,"344":2,"345":3,"346":1,"349":2,"369":2,"437":1,"545":5,"546":4}}],["https",{"2":{"44":3,"55":1,"56":3,"75":2,"120":1,"121":1,"125":6,"133":3,"137":1,"152":3,"153":1,"156":1,"164":1,"185":1,"208":2,"212":2,"213":1,"214":5,"223":1,"233":1,"234":2,"243":1,"257":1,"258":1,"259":1,"263":1,"264":1,"269":1,"270":2,"272":1,"292":1,"315":1,"330":1,"353":1,"368":1,"370":1,"371":3,"372":2,"375":2,"386":1,"387":1,"404":1,"408":1,"417":1,"418":1,"425":1,"441":2,"452":1,"492":1,"503":1,"513":3,"520":3,"530":3,"531":3,"537":1,"545":1,"546":1,"561":1,"563":1}}],["htmlnanorc",{"2":{"441":20}}],["html=",{"2":{"438":1}}],["html>",{"2":{"223":2}}],["html5",{"2":{"153":1,"221":1,"359":1,"481":1,"488":1,"496":1,"538":1}}],["html$",{"2":{"147":1}}],["html",{"0":{"169":1,"496":1,"549":1},"1":{"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1},"2":{"23":1,"121":1,"125":1,"128":1,"133":2,"134":1,"143":2,"144":2,"145":1,"147":2,"149":3,"158":1,"168":1,"169":1,"170":2,"171":2,"176":1,"179":1,"187":1,"210":3,"211":3,"212":2,"213":3,"216":3,"217":5,"221":5,"222":1,"223":3,"224":2,"225":6,"226":1,"227":2,"228":4,"232":2,"233":4,"234":4,"251":2,"254":1,"257":5,"259":1,"266":1,"272":2,"276":1,"279":1,"289":1,"319":1,"368":1,"371":1,"384":1,"399":1,"424":2,"425":1,"437":2,"441":6,"454":2,"459":1,"461":3,"464":3,"474":5,"481":1,"482":3,"491":1,"492":10,"513":1,"515":1,"520":2,"521":1,"530":2,"531":1,"532":1,"543":1,"549":2,"563":2,"586":2,"590":1}}],["heidisql",{"2":{"441":1}}],["height",{"2":{"18":1,"177":1,"216":1,"438":7}}],["heex",{"2":{"441":1}}],["hexcolorlength",{"2":{"441":1}}],["helps",{"2":{"439":1}}],["helpers",{"2":{"430":1,"448":1}}],["hello=",{"2":{"226":1}}],["helloworld",{"2":{"210":1}}],["hello",{"2":{"207":1,"218":1,"223":1,"226":10,"570":1}}],["heavycomponent",{"2":{"252":2}}],["heads",{"2":{"259":4}}],["head>",{"2":{"223":2,"520":2}}],["head",{"2":{"211":1,"223":1,"272":1}}],["headers",{"0":{"564":1},"1":{"565":1,"566":1,"567":1,"568":1},"2":{"374":1,"546":1}}],["headerh1",{"2":{"322":2}}],["header=",{"2":{"257":1}}],["header>",{"2":{"257":3,"263":2,"547":1,"568":2}}],["header",{"0":{"29":1,"107":1},"2":{"28":1,"44":6,"121":1,"257":3,"263":1,"365":2,"371":4,"488":1,"535":2,"542":2,"547":2,"565":1,"566":1,"567":1,"568":1,"576":1,"579":1}}],["headless",{"2":{"6":1,"12":2,"62":1,"77":1,"80":1,"479":1,"490":1,"542":1}}],["here",{"2":{"217":1,"225":1}}],["heroku",{"2":{"425":1,"579":1}}],["hero",{"0":{"191":1},"2":{"191":2}}],["wc",{"2":{"532":1}}],["when",{"2":{"505":1}}],["white",{"2":{"217":1}}],["write",{"2":{"225":1,"424":1,"450":1}}],["wrap",{"2":{"117":1}}],["wrapper=mount",{"2":{"462":1}}],["wrapper",{"2":{"114":1,"257":1,"263":2,"461":2,"462":2}}],["w3css",{"2":{"212":3}}],["w3schools",{"2":{"212":3}}],["w3",{"0":{"212":1},"1":{"216":1,"217":1,"218":1},"2":{"212":4,"216":2,"217":28,"257":4,"272":1,"354":1,"362":2}}],["words",{"2":{"450":1}}],["wordseparators",{"2":{"441":1}}],["world",{"2":{"142":1,"207":1,"218":1,"221":1,"223":1,"225":1,"226":4,"354":1}}],["workspace",{"2":{"441":3}}],["workingissueformatscm",{"2":{"441":1}}],["workbench",{"2":{"441":11}}],["workbox",{"2":{"278":1,"279":4,"492":2,"589":1}}],["work",{"2":{"424":1,"441":2}}],["workflows",{"2":{"424":3}}],["workflow",{"2":{"121":2,"424":2,"535":1,"576":1}}],["workerу",{"2":{"338":1}}],["workers",{"0":{"278":1,"329":1,"331":1,"396":1},"1":{"330":1,"331":1,"332":2,"333":2,"334":2,"335":1,"336":1,"337":1,"338":1,"339":1,"340":1,"341":1,"342":1,"343":1,"344":1,"345":1,"346":1,"347":1,"348":1,"349":1,"350":1,"351":1},"2":{"268":3,"277":1,"278":1,"291":1,"294":1,"301":1,"317":1,"323":2,"329":2,"330":1,"331":10,"333":2,"334":3,"335":1,"336":1,"337":1,"338":1,"350":4,"351":4,"369":1,"383":1,"396":1,"418":2,"422":1,"483":2}}],["worker",{"0":{"332":1,"333":1,"341":1,"589":1},"1":{"333":1,"334":1,"338":1,"339":1,"340":1,"342":2,"343":2,"344":2,"345":2,"346":2,"347":2,"349":1},"2":{"121":2,"270":1,"278":4,"279":1,"282":1,"329":1,"331":2,"332":21,"333":4,"334":5,"335":2,"337":2,"338":11,"339":1,"340":4,"341":1,"342":5,"343":2,"344":3,"345":1,"346":1,"483":1,"492":3,"501":1,"535":1,"540":1,"549":1,"576":1,"587":1,"589":2}}],["www",{"2":{"125":1,"133":1,"142":1,"149":2,"175":1,"185":1,"186":1,"212":2,"214":1,"272":1,"315":1,"354":1,"387":1,"424":6,"563":1}}],["we",{"2":{"225":1}}],["webdriverio",{"2":{"479":1}}],["webhooks",{"2":{"475":1}}],["webp",{"2":{"439":1}}],["webpack",{"2":{"127":1,"134":1,"135":1,"440":4,"441":13}}],["web3js",{"2":{"377":1}}],["web3",{"0":{"377":1},"2":{"376":1,"377":2,"378":1}}],["webworker",{"0":{"338":1,"339":1,"340":1,"343":1,"344":1,"345":1,"346":1},"2":{"338":4,"340":3,"342":5,"347":4}}],["webmanifest",{"2":{"272":2}}],["webfonts",{"2":{"213":2}}],["website",{"2":{"424":1,"425":5,"586":1}}],["webstorm",{"2":{"208":1,"441":2}}],["websocket",{"2":{"126":1}}],["websockets",{"2":{"122":1,"126":3,"491":1,"545":1}}],["web",{"0":{"329":1,"331":1,"332":1,"341":1,"396":1,"480":1,"513":1,"529":1},"1":{"330":1,"331":1,"332":2,"333":3,"334":3,"335":1,"336":1,"337":1,"338":2,"339":2,"340":2,"341":1,"342":3,"343":3,"344":3,"345":3,"346":3,"347":3,"348":1,"349":2,"350":1,"351":1,"481":1,"530":1,"531":1,"532":1},"2":{"126":1,"142":1,"143":1,"149":1,"213":1,"221":1,"268":2,"270":1,"280":1,"291":1,"294":1,"301":1,"317":1,"323":2,"325":1,"329":3,"330":1,"331":12,"332":8,"333":6,"334":5,"335":3,"336":1,"337":3,"338":8,"339":1,"340":4,"341":1,"342":5,"343":2,"344":3,"345":2,"346":1,"350":4,"351":4,"354":5,"359":4,"369":1,"371":1,"372":1,"382":1,"383":1,"384":1,"396":1,"418":2,"421":1,"422":1,"463":1,"481":3,"483":2,"492":4,"513":1,"515":2,"531":2,"546":1,"588":1}}],["webapp",{"0":{"121":1,"535":1,"539":1},"1":{"536":1,"540":1,"541":1},"2":{"121":5,"533":2,"535":7,"537":2,"540":1,"561":2,"562":1,"588":1}}],["webapi",{"2":{"118":1}}],["weight",{"2":{"18":1}}],["will",{"2":{"446":1}}],["wild",{"2":{"152":1}}],["windi",{"2":{"441":10}}],["window",{"2":{"211":1,"258":1,"277":2,"290":2,"331":1,"332":3,"377":1,"418":3,"420":2,"424":1,"441":4,"446":3,"531":2,"563":2}}],["windows",{"0":{"468":1},"2":{"145":1,"148":1,"151":1,"172":1,"208":3,"270":1,"273":1,"280":1,"377":1,"384":5,"459":1,"468":2}}],["widgets",{"2":{"430":2,"448":2}}],["width",{"2":{"177":1,"189":1,"216":1,"217":2,"438":7,"582":1,"591":1}}],["wide",{"2":{"142":1,"221":1,"354":1}}],["wiki",{"2":{"164":1,"292":1,"418":1}}],["wikipedia",{"2":{"96":1,"164":1,"292":1,"418":1}}],["without",{"2":{"446":1}}],["with",{"2":{"55":1,"349":1,"366":2,"424":8,"439":1,"441":1}}],["way",{"2":{"500":1}}],["wait",{"2":{"375":5}}],["watchman",{"2":{"441":2}}],["watcher",{"2":{"179":6}}],["watch",{"2":{"96":1,"362":4,"482":1}}],["walmart",{"2":{"23":1}}],["bg",{"2":{"506":7,"525":5,"530":4,"531":5}}],["bitkeeper",{"2":{"466":1,"467":1}}],["bit",{"2":{"450":1}}],["binance",{"2":{"377":1}}],["bind",{"0":{"228":1},"2":{"228":1}}],["bzl",{"2":{"441":1}}],["bbl",{"2":{"441":1}}],["by",{"2":{"410":1,"424":1,"457":2}}],["b",{"2":{"222":3,"326":7,"446":2,"473":1,"474":1}}],["blg",{"2":{"441":1}}],["blame",{"2":{"441":3}}],["black",{"2":{"217":1}}],["blue",{"2":{"216":1,"217":4}}],["bloc",{"2":{"441":1}}],["blockchain",{"2":{"377":1}}],["block",{"2":{"177":1}}],["blog",{"2":{"133":1}}],["built",{"2":{"233":1,"234":2,"259":1}}],["builddata",{"2":{"424":4}}],["build",{"2":{"133":1,"144":1,"210":1,"424":10,"440":1,"441":4,"456":2,"561":2}}],["bundleconfig",{"2":{"441":2}}],["bundle",{"2":{"224":1,"440":3}}],["bundler",{"2":{"224":1}}],["button>вариант",{"2":{"257":2}}],["button>option",{"2":{"257":2}}],["button>",{"2":{"217":2,"233":2,"234":1,"257":4,"263":2,"277":1,"342":1,"347":1,"406":1,"407":1,"410":1,"412":2,"417":2,"572":1}}],["button",{"2":{"170":1,"217":4,"233":2,"234":1,"263":2,"277":1,"342":1,"347":1,"406":1,"407":1,"410":1,"412":2,"417":2,"462":2,"490":1,"572":2}}],["business",{"0":{"335":1},"2":{"329":1,"334":1,"335":5,"337":1,"351":1,"450":2}}],["bus",{"0":{"410":1},"2":{"126":1,"407":2}}],["brew",{"2":{"470":1}}],["break",{"2":{"317":3,"319":2}}],["breaking",{"2":{"137":1}}],["breadcrumbs",{"0":{"182":1},"2":{"117":1}}],["bracketpairs",{"2":{"441":1}}],["brand",{"2":{"506":4,"525":4,"530":2,"531":2}}],["brands",{"2":{"213":3}}],["branching",{"2":{"472":1}}],["branch",{"2":{"424":1,"467":1,"472":1,"473":8,"474":1,"561":2}}],["branches",{"2":{"424":2}}],["brave",{"2":{"208":1}}],["br>",{"2":{"131":1,"412":1}}],["browserslist",{"2":{"441":2}}],["browser",{"2":{"123":1,"273":1,"384":1,"441":1}}],["box",{"2":{"543":4}}],["boilerplate",{"2":{"542":1}}],["both",{"2":{"505":1}}],["bottombar",{"2":{"217":1}}],["bound",{"2":{"450":2}}],["boundary",{"2":{"441":1}}],["bower",{"2":{"441":3}}],["bootstrap",{"2":{"211":1}}],["boolean",{"2":{"112":1,"217":1,"338":1}}],["border",{"2":{"177":3,"217":2,"257":1,"506":2,"525":2,"530":1,"531":1,"543":1,"591":1}}],["body>",{"2":{"223":2,"520":1,"530":2,"531":2}}],["body",{"2":{"20":1,"96":1,"210":1,"211":1,"223":2,"349":1,"520":1,"530":1,"531":2,"543":1,"590":1}}],["between",{"2":{"505":1}}],["be",{"2":{"424":2,"441":1,"505":1,"543":1}}],["before",{"2":{"325":4,"326":2}}],["beforeinstallprompt",{"2":{"277":3}}],["below",{"2":{"191":1,"505":1}}],["bento",{"2":{"184":1}}],["bearer",{"2":{"44":3,"56":3,"374":2}}],["best",{"0":{"381":1},"2":{"23":1,"156":1,"243":1,"263":1,"264":1,"269":1,"330":1,"353":1,"386":1,"404":1,"452":1,"491":2,"502":1}}],["babel",{"2":{"441":10}}],["babelrc",{"2":{"441":10}}],["bazelproject",{"2":{"441":1}}],["bazelignore",{"2":{"441":1}}],["bazelrc",{"2":{"441":1}}],["bazel",{"2":{"441":3}}],["banner",{"2":{"437":1}}],["band",{"2":{"162":1}}],["bash$",{"2":{"535":1}}],["bashnpm",{"2":{"510":1,"523":1,"527":1}}],["bashpnpm",{"2":{"510":2,"523":2,"527":2,"535":1}}],["basic",{"0":{"406":1,"407":1,"414":1}}],["basetoggle",{"2":{"577":1}}],["baseurl",{"2":{"546":1}}],["baseurl=",{"2":{"345":1}}],["baseinput",{"2":{"430":1,"448":1,"485":1}}],["baseicon",{"0":{"438":1,"547":1},"2":{"107":1,"114":3,"429":1,"437":2,"440":2,"448":1,"547":5,"577":1}}],["baseiconbutton",{"2":{"88":2}}],["basecard",{"2":{"427":1,"448":1}}],["basebutton",{"2":{"427":1,"429":1,"430":1,"431":1,"448":3,"449":1,"485":1,"490":2}}],["base64urlencode",{"2":{"371":2}}],["base64",{"2":{"371":3,"437":1}}],["based",{"2":{"123":3,"341":1}}],["base",{"0":{"562":1},"2":{"121":1,"438":1,"506":1,"525":2,"562":2,"591":1}}],["bar",{"2":{"257":1}}],["bars",{"0":{"176":1},"1":{"177":1},"2":{"181":2}}],["backers",{"2":{"441":1}}],["backend",{"2":{"39":1,"122":1,"124":1,"371":1}}],["backroute",{"2":{"433":1}}],["backups",{"2":{"424":1}}],["backup",{"2":{"424":8}}],["background",{"2":{"274":1,"275":1,"279":1,"511":2,"513":1,"518":1,"520":1,"524":1,"528":2,"530":2,"531":3}}],["back",{"2":{"182":1,"368":1}}],["badge",{"2":{"88":1,"112":1,"173":1,"407":1}}],["baas",{"0":{"37":1},"1":{"38":1,"39":1,"40":1,"41":1},"2":{"39":1,"124":5}}],["agnostic",{"2":{"545":1}}],["age",{"2":{"253":1}}],["a8b1ff",{"2":{"506":1,"530":1,"531":1}}],["affects",{"2":{"505":1}}],["after",{"2":{"258":1,"325":5,"326":2,"424":1}}],["azure",{"2":{"441":2}}],["ava",{"2":{"441":10}}],["available",{"0":{"149":1},"2":{"148":1}}],["aux",{"2":{"441":1}}],["automation",{"2":{"561":1}}],["autocompleterefs",{"2":{"441":1}}],["autodetection",{"2":{"441":1}}],["autodetectcolorscheme",{"2":{"441":1}}],["autofetch",{"2":{"441":1}}],["autofocus",{"2":{"217":1}}],["auto",{"2":{"279":1,"438":1,"441":1,"588":1}}],["autoupdate",{"2":{"279":1,"441":1}}],["authors",{"2":{"441":3}}],["authorization",{"2":{"44":3,"56":3,"123":2,"374":2}}],["authenticator",{"2":{"376":1}}],["auth0",{"2":{"374":1}}],["authinterceptor",{"2":{"122":2}}],["auth",{"2":{"122":3,"372":1,"540":1,"542":1,"579":2}}],["abc",{"2":{"362":1}}],["a>",{"2":{"342":2}}],["ajax",{"2":{"323":1,"354":1,"369":2}}],["aaaa",{"2":{"142":2}}],["awesome",{"2":{"214":1}}],["aws",{"2":{"124":1}}],["await",{"2":{"55":3,"83":2,"93":2,"122":3,"278":3,"326":8,"343":1,"436":1,"459":3,"483":2,"545":1}}],["amd",{"2":{"384":1}}],["amazon",{"2":{"124":2,"175":5,"270":1,"425":2}}],["amplify",{"2":{"39":1}}],["atombutton",{"2":{"428":1,"448":1}}],["atoms",{"2":{"428":1,"448":1}}],["atomicon",{"2":{"428":1,"448":1}}],["atomic",{"2":{"428":1,"448":1}}],["at",{"2":{"123":6,"371":1,"441":1,"501":1}}],["attributes",{"0":{"78":1}}],["ad",{"2":{"179":1}}],["adminlayout",{"2":{"427":1,"429":1,"448":2}}],["admin",{"2":{"142":1,"255":1}}],["adapter",{"2":{"121":1,"535":1}}],["added",{"2":{"474":1}}],["addextraspaceontop",{"2":{"441":1}}],["addeventlistener",{"2":{"258":1,"277":2,"278":1,"290":1}}],["addroute",{"2":{"368":1}}],["addresponseinterceptor",{"2":{"122":2,"546":1}}],["addnote",{"2":{"342":1,"343":2}}],["addcommand",{"2":{"317":1}}],["addyosmani",{"2":{"270":1}}],["addtodo",{"2":{"217":6}}],["adds",{"2":{"121":1,"535":1,"540":1}}],["add",{"2":{"54":1,"112":1,"121":7,"343":1,"435":1,"469":1,"471":2,"474":1,"475":1,"510":2,"523":2,"527":2,"535":6,"540":3}}],["acme",{"2":{"588":3}}],["acr",{"2":{"441":1}}],["acn",{"2":{"441":1}}],["activitybar",{"2":{"441":1}}],["active",{"2":{"263":3,"362":1,"365":1,"434":1,"441":1}}],["actions",{"0":{"424":1,"560":1},"1":{"561":1,"562":1},"2":{"121":1,"401":1,"413":1,"414":4,"415":1,"424":12,"441":1,"491":1,"542":1,"561":1,"576":1,"579":1}}],["action",{"0":{"191":1},"2":{"121":1,"191":1,"234":4,"317":2,"424":9,"441":1,"462":1,"535":1,"561":2}}],["according",{"2":{"457":1}}],["accordian",{"2":{"432":1}}],["accordianpanel",{"2":{"432":1}}],["accountroutes",{"2":{"433":2}}],["account",{"2":{"122":1,"433":2,"437":1,"439":1}}],["accept",{"2":{"263":5}}],["accessing",{"2":{"505":1}}],["accessibility",{"2":{"490":1}}],["accessibilitysupport",{"2":{"441":1}}],["access",{"2":{"123":5,"125":4,"501":1}}],["ac",{"2":{"113":2}}],["arguments",{"2":{"563":1}}],["args",{"2":{"420":2}}],["article",{"2":{"488":1}}],["artisan",{"2":{"441":1}}],["arty",{"0":{"61":1},"2":{"75":2,"83":1,"104":1,"120":1,"121":5}}],["array",{"2":{"100":8,"112":1,"253":1}}],["always",{"2":{"450":1}}],["alg",{"2":{"371":1,"441":1}}],["ally",{"2":{"441":3,"573":2}}],["all",{"2":{"326":1,"441":1}}],["allowcompoundwords",{"2":{"441":1}}],["allows",{"2":{"441":1}}],["allow",{"2":{"125":4}}],["alert",{"2":{"325":1}}],["alexa",{"2":{"157":1}}],["alias",{"2":{"214":1,"440":1}}],["align",{"2":{"177":1}}],["alibris",{"2":{"23":1}}],["alt",{"2":{"98":2,"506":2,"525":2,"530":1,"531":1}}],["air",{"2":{"441":1}}],["ai",{"2":{"96":1,"98":1}}],["animated",{"2":{"511":2,"513":1,"520":1,"524":1,"528":2,"530":1,"531":1}}],["animation",{"2":{"177":1}}],["analysis",{"2":{"441":1,"498":1}}],["analytics",{"0":{"563":1,"586":1},"2":{"121":1,"535":1,"540":1,"549":1,"576":1}}],["angular",{"2":{"354":1,"482":2}}],["anothercomponent",{"2":{"252":3}}],["anon",{"2":{"55":1,"56":6}}],["android",{"2":{"270":2,"277":1}}],["and",{"0":{"292":1,"381":1},"2":{"121":2,"142":1,"156":1,"189":1,"243":1,"263":1,"264":1,"269":1,"330":1,"353":1,"369":1,"386":1,"404":1,"424":4,"450":4,"452":1,"458":1,"461":2,"462":2,"491":2,"502":1,"535":1,"540":1,"561":3}}],["an",{"2":{"100":1,"366":1,"450":2,"458":1}}],["annotations",{"2":{"441":1}}],["annotation",{"2":{"100":1}}],["antfu",{"2":{"441":3}}],["antialiased",{"2":{"441":1}}],["anthony",{"2":{"96":1}}],["antony",{"2":{"20":1,"441":1,"538":1}}],["any",{"2":{"92":4,"384":1,"588":1}}],["axios",{"2":{"41":1,"122":1,"323":1,"344":4,"345":5,"349":2,"369":4,"370":4,"374":5,"375":3,"541":1,"545":1}}],["apt",{"2":{"469":4}}],["apollo",{"2":{"441":2}}],["apache",{"0":{"146":1},"1":{"147":1},"2":{"145":1,"146":1,"148":1,"341":1,"384":1,"425":1}}],["appveyor",{"2":{"441":2}}],["appsettings",{"2":{"441":2}}],["appsearchbar",{"2":{"107":1}}],["appsidebar",{"2":{"433":1,"580":1}}],["appfooter",{"2":{"433":2}}],["appinstalled",{"2":{"277":2}}],["appmanifest",{"2":{"272":1}}],["apploader",{"0":{"434":1}}],["appleboy",{"2":{"424":3}}],["apple",{"2":{"270":2}}],["applications",{"2":{"279":1}}],["application",{"2":{"56":1,"121":1,"272":1,"276":1,"382":1,"492":2,"535":1,"546":1}}],["approach",{"2":{"189":1}}],["app",{"0":{"216":1,"362":1},"2":{"95":1,"104":2,"107":1,"114":1,"128":5,"129":5,"142":1,"143":1,"144":3,"149":2,"210":2,"215":1,"216":3,"223":6,"224":1,"225":2,"246":2,"251":6,"255":2,"263":8,"264":1,"270":2,"272":1,"277":5,"280":1,"340":1,"349":6,"360":4,"361":1,"362":2,"416":7,"427":1,"428":1,"429":1,"430":4,"431":1,"433":1,"434":1,"436":1,"438":2,"448":7,"449":1,"455":2,"492":1,"543":1,"590":1}}],["appheader>",{"2":{"568":1}}],["appheadersecond",{"2":{"568":1}}],["appheaderfirst",{"2":{"568":1}}],["appheader",{"2":{"88":1,"109":1,"111":1,"114":1,"433":2,"568":1}}],["appwrite",{"2":{"39":1}}],["apidata",{"2":{"545":2}}],["apikey",{"2":{"44":3,"56":3}}],["api",{"0":{"43":1,"52":1,"56":1,"81":1,"83":1,"118":1,"122":1,"226":1,"414":1,"544":1,"545":1},"1":{"53":1,"54":1,"55":1,"56":1,"82":1,"83":1,"545":1,"546":1},"2":{"20":1,"40":2,"41":9,"43":1,"56":1,"58":2,"59":1,"83":1,"93":2,"111":1,"118":2,"121":1,"122":12,"124":5,"126":2,"127":3,"129":2,"130":1,"131":1,"133":4,"138":1,"226":16,"233":1,"234":2,"255":1,"258":2,"259":1,"262":1,"263":9,"264":1,"268":1,"270":2,"278":1,"289":2,"291":2,"301":1,"305":2,"307":1,"318":8,"319":1,"320":5,"321":2,"323":7,"325":1,"326":1,"329":3,"331":2,"332":1,"333":1,"341":2,"344":5,"347":1,"349":2,"368":4,"369":2,"370":4,"372":1,"411":1,"413":3,"414":2,"415":3,"417":3,"418":2,"419":1,"420":1,"425":2,"430":2,"431":2,"436":1,"441":14,"446":4,"448":2,"449":2,"450":3,"461":1,"482":1,"491":3,"492":1,"505":1,"508":3,"515":2,"535":2,"538":1,"540":1,"542":2,"545":4,"546":7,"576":3}}],["a",{"2":{"39":1,"55":1,"100":5,"121":1,"124":1,"142":2,"222":2,"270":1,"315":2,"326":10,"342":2,"362":2,"366":4,"439":1,"441":1,"446":2,"450":3,"457":1,"474":1,"483":1,"491":1,"492":1,"505":1,"535":1,"540":1,"561":1}}],["asked",{"2":{"502":1}}],["aside",{"2":{"488":1}}],["astro",{"2":{"441":1,"541":1}}],["ashx",{"2":{"441":1}}],["ascx",{"2":{"441":1}}],["asax",{"2":{"441":1}}],["aspx",{"2":{"441":1}}],["asp",{"2":{"212":1}}],["assign",{"2":{"372":1}}],["assigned",{"2":{"142":1}}],["assets",{"2":{"210":2,"360":1,"427":1,"428":1,"429":1,"430":1,"431":1,"437":5,"439":2,"448":4,"449":1,"547":1,"589":1}}],["asynchronous",{"2":{"369":1}}],["async",{"2":{"83":1,"93":1,"122":1,"249":1,"262":1,"278":1,"326":3,"343":3,"459":3,"483":2,"545":1,"546":1,"563":1}}],["as",{"2":{"39":1,"124":1,"439":3,"457":1,"511":1,"524":1,"528":1}}],["two",{"2":{"492":1}}],["twitter",{"2":{"374":1,"586":8}}],["tdd",{"0":{"453":1},"2":{"451":1,"453":2,"455":1}}],["turbo",{"2":{"441":2}}],["tmp",{"2":{"441":1}}],["ttf",{"2":{"279":1}}],["t",{"0":{"291":1},"2":{"190":1,"283":1,"440":3,"450":2,"503":1,"538":1,"570":2,"572":2}}],["txtlogs",{"2":{"472":1}}],["txthome",{"2":{"182":2}}],["txtserver",{"2":{"149":1}}],["txt",{"2":{"142":1,"210":1,"427":1,"428":1,"429":1,"430":1,"441":1,"448":4}}],["typ",{"2":{"371":1}}],["typicode",{"2":{"124":1,"545":1}}],["types",{"2":{"440":1,"498":1}}],["typescript",{"0":{"91":1,"498":1},"1":{"92":1,"93":1},"2":{"20":2,"101":1,"126":1,"209":1,"225":1,"417":1,"440":3,"441":6,"450":2,"498":4,"538":1}}],["type=",{"2":{"217":3,"232":1,"342":1,"347":3,"520":1,"572":1}}],["typedoc",{"2":{"441":2}}],["typed",{"2":{"100":1}}],["type",{"2":{"56":1,"100":1,"169":1,"217":1,"253":2,"263":2,"275":1,"279":3,"313":2,"372":1,"424":1,"438":7,"546":1,"586":1}}],["trevis",{"2":{"401":1}}],["tree",{"2":{"96":1,"156":1,"269":1,"330":1,"353":1,"404":1,"439":1,"441":3,"450":2,"452":1,"484":1}}],["tr",{"2":{"272":1}}],["travis",{"2":{"441":2}}],["traffic",{"2":{"270":1}}],["transactions",{"2":{"570":1}}],["transport",{"2":{"545":1}}],["transparent",{"2":{"530":1,"531":2}}],["translate",{"2":{"427":1,"428":1,"429":1,"448":3,"491":1}}],["transitiongroup",{"2":{"234":1}}],["transition",{"2":{"234":1}}],["transformer",{"2":{"441":1}}],["transform",{"2":{"177":2,"482":1}}],["transfer",{"2":{"151":1,"152":1,"344":1,"369":1,"424":1}}],["tricks",{"0":{"550":1}}],["trigger",{"2":{"462":1}}],["triggerexpansionontab",{"2":{"441":1}}],["triggerevent",{"2":{"179":4}}],["trivago",{"2":{"270":1}}],["try",{"2":{"149":1,"159":1,"310":1,"326":2,"343":3,"458":1}}],["true",{"2":{"122":1,"170":1,"217":1,"229":2,"252":1,"263":1,"277":2,"279":1,"339":1,"359":2,"363":2,"415":1,"420":1,"424":1,"433":1,"439":2,"441":61,"505":7,"535":4}}],["terserrc",{"2":{"441":10}}],["terminal",{"2":{"208":1,"441":5}}],["tex",{"2":{"441":1}}],["textlint",{"2":{"441":2}}],["text=abc",{"2":{"362":1}}],["text",{"2":{"208":1,"217":12,"232":1,"257":2,"342":5,"347":1,"362":1,"461":1,"464":2,"506":6,"525":6,"530":3,"531":3,"591":6}}],["textarea>",{"2":{"342":1}}],["textarea",{"2":{"169":1,"232":1,"342":1}}],["testnet",{"2":{"546":1}}],["testjsonrpc",{"2":{"546":1}}],["testrest",{"2":{"545":2}}],["tests",{"0":{"457":1,"461":1,"462":1},"2":{"427":1,"428":1,"429":3,"430":1,"448":6,"456":4}}],["testservice",{"2":{"339":4,"344":1,"346":1}}],["testing",{"2":{"384":1,"451":1,"453":2,"455":1}}],["test",{"0":{"340":1,"457":1,"460":1,"461":1,"462":1},"1":{"461":1,"462":1},"2":{"339":1,"340":2,"347":1,"349":2,"441":1,"451":1,"454":1,"456":7,"457":10,"459":2,"460":5,"461":5,"462":3,"463":2,"464":1,"465":2,"479":1,"572":1}}],["temperature",{"2":{"319":5}}],["templatepokemondetail",{"2":{"428":1,"448":1}}],["templatepokemonlist",{"2":{"428":1,"448":1}}],["templates",{"2":{"428":1,"448":1}}],["template",{"2":{"114":1,"225":1,"257":8,"568":3}}],["template>",{"2":{"112":2,"131":2,"177":2,"179":2,"216":2,"225":2,"234":2,"257":9,"259":2,"263":2,"321":2,"322":2,"342":2,"347":2,"362":2,"406":2,"407":2,"410":2,"412":2,"417":2,"421":2,"433":6,"434":2,"438":2,"490":2,"547":2,"568":2,"572":2}}],["team",{"2":{"162":1}}],["teleport",{"2":{"136":1,"234":1}}],["telegram",{"2":{"64":1,"354":1}}],["threshold",{"2":{"568":2}}],["threads",{"2":{"483":1}}],["throw",{"2":{"310":1,"424":1,"457":1,"458":1}}],["that",{"2":{"100":2,"450":4}}],["there",{"2":{"334":1,"450":1,"505":1}}],["themetoggle",{"2":{"591":1}}],["themes",{"2":{"542":1,"579":1}}],["theme",{"2":{"274":1,"275":1,"279":1,"577":1}}],["thenable",{"2":{"326":1}}],["then",{"2":{"122":1,"263":1,"326":13,"339":1,"340":1,"342":2,"345":2,"347":1,"370":1,"374":1,"375":2,"377":1,"424":4}}],["the",{"0":{"293":1},"1":{"296":1,"297":1,"298":1,"299":1},"2":{"100":5,"166":1,"191":1,"283":1,"318":1,"424":2,"437":2,"439":1,"441":1,"457":4,"492":1,"505":3}}],["this",{"2":{"100":2,"225":1,"226":6,"304":2,"308":1,"310":1,"311":3,"315":9,"368":2,"414":4,"420":3,"441":3}}],["tahoma",{"2":{"506":1}}],["tazerc",{"2":{"441":2}}],["tauri",{"2":{"359":1}}],["target",{"2":{"319":6,"420":7,"424":15,"440":1}}],["tail",{"2":{"424":1}}],["tails",{"2":{"259":4}}],["tailwind",{"2":{"211":2,"441":10,"490":2}}],["tasks",{"2":{"217":2,"441":2}}],["task",{"2":{"217":1,"238":1}}],["tabs",{"2":{"441":1}}],["tabsize",{"2":{"441":1}}],["tab",{"2":{"98":1}}],["table",{"0":{"48":1,"49":1,"50":1}}],["tablet",{"2":{"20":1,"104":1,"543":4,"580":2,"582":1}}],["tags",{"2":{"121":1,"535":1,"540":1,"586":2}}],["tag",{"0":{"90":1,"115":1},"2":{"563":2}}],["tsup",{"2":{"441":2}}],["tslint",{"2":{"441":2}}],["tsdoc",{"2":{"441":11}}],["tsdk",{"2":{"441":1}}],["tsx",{"2":{"441":3}}],["tsconfig",{"2":{"440":2,"441":11}}],["tsconst",{"2":{"93":1}}],["tsc",{"2":{"440":1}}],["tsimport",{"2":{"435":1}}],["tsinterface",{"2":{"92":1}}],["ts",{"0":{"83":1,"92":1,"435":1},"2":{"92":1,"95":1,"112":2,"113":1,"121":1,"225":1,"429":3,"441":33,"448":3,"450":1,"463":1,"543":1,"545":1,"546":2,"547":3,"549":1,"562":1,"572":2}}],["tip",{"2":{"446":1,"482":1}}],["tidy",{"2":{"441":1}}],["tinder",{"2":{"270":2}}],["timeline>",{"2":{"481":1,"513":1}}],["timeline",{"0":{"514":1},"1":{"515":1,"516":1,"517":1,"518":1},"2":{"481":1,"505":2,"510":3,"511":4,"513":3,"520":6,"521":1,"522":1,"523":3,"524":5,"525":1,"527":3,"528":4,"530":3,"531":4,"532":1}}],["time",{"2":{"371":1,"375":1}}],["timeout",{"2":{"252":3}}],["times",{"2":{"217":1}}],["timestamp",{"2":{"50":1}}],["titlebarstyle",{"2":{"441":1}}],["title=",{"2":{"254":1,"263":1,"322":1,"406":3,"481":1}}],["title",{"2":{"0":1,"17":1,"18":1,"19":1,"44":3,"83":4,"92":2,"93":1,"254":2,"263":4,"342":5,"343":2,"407":2,"410":3,"505":2,"586":4}}],["tothrow",{"2":{"458":1}}],["total",{"2":{"236":1,"237":1}}],["toequal",{"2":{"457":1,"462":1}}],["tobegreaterthan",{"2":{"457":1}}],["tobe",{"2":{"457":8,"459":1,"462":2}}],["toaster",{"0":{"445":1}}],["toarray",{"2":{"343":2}}],["toml",{"2":{"441":10}}],["tocontain",{"2":{"461":1}}],["toc",{"2":{"441":1}}],["tool",{"2":{"441":3}}],["toolchain",{"2":{"441":1}}],["tools",{"2":{"384":1}}],["tooltips",{"0":{"172":1}}],["tostring",{"2":{"372":1}}],["to=",{"2":{"362":3,"365":1}}],["todolist",{"2":{"247":1,"248":1}}],["todofilter",{"2":{"247":1}}],["todoproject",{"2":{"246":1,"247":2,"248":2,"264":3,"357":1,"359":1,"362":3}}],["todo",{"2":{"217":26,"264":3}}],["todoservice",{"2":{"264":1}}],["todosummary",{"2":{"247":1,"264":1}}],["todos",{"0":{"217":1},"2":{"216":7,"545":1}}],["top",{"2":{"177":1,"359":1}}],["togglestatus",{"2":{"264":2}}],["toggle",{"2":{"170":2,"547":1}}],["togglefavourite",{"2":{"112":3}}],["tokens",{"2":{"345":1,"371":1}}],["token",{"2":{"122":1,"123":5,"373":2,"374":3,"501":2,"505":2}}],["touchslideoutdrawer",{"0":{"553":1},"2":{"121":1,"553":1}}],["to",{"0":{"126":1,"144":1,"191":1,"215":1,"218":1,"264":1,"265":1,"357":1},"1":{"216":1,"217":1,"218":1},"2":{"46":1,"100":1,"121":1,"122":1,"191":1,"207":1,"209":1,"214":1,"215":2,"216":1,"217":2,"218":1,"219":1,"246":1,"259":1,"263":1,"264":3,"265":1,"267":1,"347":3,"352":2,"357":1,"359":1,"362":2,"366":4,"424":2,"431":1,"437":1,"441":2,"448":1,"450":3,"453":1,"454":1,"457":1,"479":1,"505":4,"511":1,"528":1}}],["38",{"2":{"506":1,"530":1,"531":1,"591":1}}],["3a5ccc",{"2":{"506":1}}],["3c3c438f",{"2":{"506":1}}],["3c3c43c7",{"2":{"506":1}}],["3c3c43",{"2":{"506":1}}],["39",{"2":{"471":1}}],["365",{"2":{"354":1}}],["360deg",{"2":{"177":1}}],["3451b2",{"2":{"506":1}}],["34",{"2":{"325":3,"326":1}}],["32",{"2":{"319":3,"468":1}}],["333333",{"2":{"279":1}}],["3x3",{"2":{"184":1}}],["300",{"2":{"345":2,"375":1,"441":1}}],["3000",{"2":{"333":1,"340":1,"345":1,"349":3}}],["30rem",{"2":{"217":1}}],["30",{"2":{"159":2,"179":1,"203":1,"441":1}}],["3",{"0":{"221":1,"227":1,"248":1,"308":1,"355":1,"374":1,"380":1,"381":1,"389":1,"391":1,"400":1,"447":1,"448":1,"449":1,"450":1,"526":1,"539":1},"1":{"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":2,"229":2,"230":2,"231":2,"232":2,"233":2,"234":1,"235":1,"236":1,"237":1,"238":1,"239":1,"240":1,"241":1,"242":1,"356":1,"357":1,"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1,"365":1,"366":1,"367":1,"368":1,"381":1,"382":1,"383":1,"384":1,"385":1,"386":1,"387":1,"448":1,"449":1,"527":1,"528":1,"540":1,"541":1},"2":{"20":1,"96":3,"107":1,"111":1,"112":1,"115":1,"118":1,"125":1,"126":1,"127":3,"128":4,"129":2,"130":1,"132":2,"133":2,"134":2,"135":1,"136":2,"138":5,"141":1,"145":3,"149":2,"152":2,"153":1,"156":2,"161":1,"179":2,"182":2,"183":1,"206":1,"207":2,"208":2,"209":4,"210":5,"212":1,"213":1,"214":1,"215":1,"217":4,"220":2,"221":3,"222":1,"223":2,"224":3,"225":2,"226":4,"231":1,"233":1,"234":2,"235":1,"241":1,"243":2,"244":1,"245":1,"248":1,"250":1,"251":1,"252":3,"254":1,"257":1,"258":3,"259":1,"260":1,"261":1,"263":8,"264":1,"269":1,"277":2,"283":1,"287":1,"288":1,"289":1,"290":2,"294":2,"311":1,"312":2,"314":1,"315":2,"317":2,"318":2,"319":2,"320":1,"322":3,"323":1,"326":4,"327":1,"330":1,"331":2,"333":1,"338":2,"339":2,"340":2,"342":2,"343":1,"349":2,"352":2,"353":1,"354":2,"355":1,"359":3,"363":1,"370":1,"371":3,"374":1,"377":1,"382":2,"384":2,"386":1,"389":1,"390":1,"395":1,"397":1,"398":1,"403":1,"404":2,"406":3,"407":2,"410":3,"411":1,"412":4,"414":2,"415":2,"417":3,"420":3,"422":1,"426":1,"431":2,"436":1,"440":1,"441":2,"446":3,"449":1,"450":9,"452":1,"457":1,"461":3,"462":4,"464":1,"474":1,"475":1,"482":3,"483":2,"490":1,"491":6,"494":1,"502":2,"506":2,"513":3,"515":1,"525":2,"530":2,"531":2,"538":2,"540":1,"542":1,"546":1,"591":2}}],["msg",{"2":{"572":1}}],["mjs",{"2":{"441":4}}],["m",{"2":{"424":2,"472":1,"474":1}}],["mdsvex",{"2":{"441":1}}],["md",{"2":{"424":1,"441":3}}],["mdn",{"2":{"420":1}}],["mkdir",{"2":{"424":2}}],["mvp",{"2":{"479":1}}],["mvc",{"2":{"450":1,"482":1}}],["mv",{"2":{"424":1}}],["mpr551xpscgmizp8ezuscoy7t7iqnpp",{"2":{"371":1}}],["mpa",{"2":{"270":1,"354":5,"355":2,"379":1}}],["myworker",{"2":{"334":5}}],["myprocessfunction",{"2":{"326":3}}],["myfuncc",{"2":{"326":3}}],["myfuncb",{"2":{"326":3}}],["myfunca",{"2":{"326":5}}],["myfunction",{"2":{"290":3,"304":3,"315":2}}],["myfile2",{"2":{"312":1}}],["myfile1",{"2":{"312":1}}],["mydata",{"2":{"418":2}}],["mydependency2",{"2":{"312":2}}],["mydependency1",{"2":{"312":2}}],["mydomain",{"2":{"142":1,"143":2,"144":2,"149":3}}],["myclass",{"2":{"304":5}}],["mycache",{"2":{"278":1}}],["mycomponent>",{"2":{"254":1}}],["mycomponent",{"2":{"129":12,"214":2,"251":7,"252":4,"254":3}}],["mymodal",{"2":{"263":2}}],["mymenubar>",{"2":{"257":2}}],["mymenubar",{"2":{"257":3}}],["mymethod",{"2":{"226":1}}],["mylayout>",{"2":{"257":2}}],["mylayout",{"2":{"257":2}}],["my",{"0":{"333":1},"2":{"228":3,"303":2,"304":4,"332":9,"334":1,"366":2,"370":1,"535":3,"536":1,"540":1,"561":2,"562":1}}],["mysql",{"2":{"40":1,"51":1,"441":1,"491":1}}],["moment",{"2":{"442":1,"446":1}}],["mocha",{"2":{"441":10}}],["monospace",{"2":{"441":1}}],["mono",{"2":{"441":1}}],["moleculepokemonthumbnail",{"2":{"428":1,"448":1}}],["moleculesearchinput",{"2":{"428":1,"448":1}}],["molecules",{"2":{"428":1,"448":1}}],["motels",{"0":{"196":1}}],["modern",{"2":{"441":1}}],["mode",{"2":{"359":1,"441":1}}],["models",{"2":{"429":3,"448":3}}],["modeling",{"2":{"247":1}}],["model=",{"2":{"217":3,"232":1,"254":2,"342":2,"347":3}}],["modelperson",{"2":{"132":4}}],["modelvalue",{"2":{"132":4,"254":9}}],["model",{"0":{"132":1,"232":1,"253":1},"2":{"127":1,"132":3,"217":2,"229":1,"240":1,"254":6,"259":1,"290":1,"450":1,"482":1}}],["modal>",{"2":{"263":1}}],["modal",{"2":{"263":14}}],["modals",{"2":{"261":1,"263":6,"264":3,"360":3}}],["module",{"2":{"209":1,"441":1,"520":2}}],["modules",{"2":{"209":1,"210":2,"356":1,"429":1,"439":6,"440":1,"441":2,"448":1,"472":1}}],["mod",{"2":{"147":2,"441":1}}],["mozilla",{"2":{"133":1,"208":1,"278":1,"334":1,"372":1,"384":1,"418":1}}],["mountrt",{"2":{"520":2}}],["mount",{"2":{"128":1,"129":2,"223":2,"251":1,"263":1,"360":1,"416":1,"461":4,"462":1}}],["mobile",{"2":{"20":1,"189":2,"280":1,"543":4,"580":2,"582":1}}],["mit",{"2":{"533":1}}],["mitt",{"2":{"126":1,"315":2,"323":1,"408":4,"409":3}}],["mix",{"2":{"441":3}}],["mixin",{"2":{"258":1}}],["might",{"2":{"441":1}}],["migration",{"2":{"133":2,"137":1}}],["microfrontends",{"2":{"431":1,"448":1}}],["microservice",{"2":{"431":1,"448":1}}],["microsoft",{"2":{"124":1,"162":1,"208":3,"270":1,"374":1,"384":1,"425":1,"441":1}}],["micro",{"2":{"431":1,"448":1}}],["missing",{"2":{"310":1}}],["mime",{"2":{"272":1,"275":1}}],["minheight",{"2":{"438":1}}],["minwidth",{"2":{"438":1}}],["minimal",{"2":{"273":1}}],["min",{"2":{"213":3,"216":1,"217":1}}],["middleware",{"2":{"320":1}}],["middle",{"2":{"177":1}}],["mil",{"2":{"142":1}}],["must",{"2":{"458":1}}],["music",{"2":{"64":1,"90":1,"115":1}}],["multicursormodifier",{"2":{"441":1}}],["multipurpose",{"2":{"272":1}}],["multiviews",{"2":{"147":1}}],["muzhskaya",{"2":{"106":1}}],["map",{"2":{"439":2,"441":7}}],["mastery",{"2":{"491":1}}],["master",{"2":{"424":3,"441":1,"472":3,"474":4,"475":5}}],["match",{"2":{"278":1}}],["math",{"2":{"259":1}}],["material",{"2":{"18":1,"184":1,"211":3,"212":1}}],["macports",{"2":{"470":1}}],["mac",{"2":{"280":1}}],["macromedia",{"2":{"221":1}}],["macos",{"0":{"470":1},"2":{"151":1,"208":3,"270":1,"384":4,"441":1,"470":1}}],["max",{"2":{"179":3,"189":1,"217":1,"582":1,"591":1}}],["mailmap",{"2":{"441":1}}],["mail",{"2":{"142":1,"272":1}}],["maintainers",{"2":{"441":1}}],["maintainability",{"2":{"284":1}}],["maintenanceview",{"2":{"433":1}}],["maintenance",{"2":{"433":2}}],["mainheader",{"2":{"264":1}}],["main>",{"2":{"257":2,"263":2,"362":2}}],["mainlayout",{"0":{"580":1},"1":{"581":1},"2":{"36":1,"121":1,"433":2,"535":2,"582":1}}],["main",{"0":{"31":1,"334":1,"360":1,"416":1},"2":{"128":1,"130":1,"156":1,"210":3,"211":2,"224":1,"251":3,"263":2,"264":1,"269":1,"278":1,"330":1,"333":1,"353":1,"359":1,"365":1,"404":1,"415":1,"424":6,"427":1,"428":1,"429":1,"430":1,"448":4,"452":1,"505":1,"572":1}}],["markdownlint",{"2":{"441":2}}],["markdown",{"0":{"499":1},"2":{"441":1,"499":1,"524":1}}],["marketplace",{"2":{"23":1}}],["martin",{"2":{"431":1,"448":1}}],["margin",{"2":{"217":3,"550":1}}],["mary",{"2":{"131":1}}],["mantinelayeredheader",{"0":{"567":1}}],["mantine",{"2":{"566":1,"567":1}}],["mantinerichfooter",{"0":{"558":1},"2":{"535":2}}],["mantinesimplefooter",{"0":{"557":1},"2":{"121":1}}],["mantinesimplenavbar",{"0":{"585":1},"2":{"121":1,"535":2}}],["mantinesimpleheader",{"0":{"566":1},"2":{"109":1,"121":1,"535":2}}],["management",{"0":{"450":1},"2":{"450":2,"466":1}}],["manager",{"0":{"135":1},"2":{"111":1,"127":1,"208":1,"419":1}}],["manually",{"2":{"441":1}}],["man",{"2":{"162":1}}],["manifest+json",{"2":{"272":1}}],["manifest",{"0":{"588":1},"2":{"121":2,"210":1,"272":5,"275":1,"279":1,"535":1,"540":1,"587":1,"588":1}}],["many",{"2":{"46":2}}],["make",{"2":{"100":1,"121":1,"535":1,"540":1}}],["magento",{"2":{"41":1,"50":1,"118":1}}],["me",{"2":{"503":1}}],["merge",{"2":{"467":1,"473":1,"474":2}}],["mercurial",{"2":{"466":1}}],["merchants",{"2":{"12":1}}],["memory",{"2":{"359":2}}],["message=ref",{"2":{"410":1}}],["messagebus",{"0":{"409":1},"2":{"409":2,"410":6}}],["message",{"2":{"223":4,"332":2,"338":3,"407":1,"410":8,"570":1}}],["meatball",{"2":{"184":1}}],["menus",{"2":{"441":1}}],["menu",{"2":{"181":1}}],["metadata",{"2":{"441":1}}],["metamask",{"2":{"377":5}}],["meta",{"2":{"121":1,"122":1,"433":1,"438":1,"439":2,"463":3,"535":1,"540":1,"546":1,"547":1,"586":13}}],["method2",{"2":{"304":2}}],["method1",{"2":{"304":2}}],["methods",{"2":{"226":1}}],["method",{"2":{"100":1,"347":9,"377":1,"546":1}}],["medium",{"2":{"270":1}}],["media",{"2":{"20":1,"189":1,"203":1}}],["medusajs",{"2":{"62":1}}],["medusa",{"2":{"12":1}}],["gql",{"2":{"441":2}}],["gzip",{"2":{"511":1,"528":1}}],["gz",{"2":{"441":1}}],["gls",{"2":{"441":1}}],["glo",{"2":{"441":1}}],["global",{"2":{"450":1,"513":1,"530":1,"531":1}}],["glob",{"2":{"438":1,"439":2,"547":1}}],["globpatterns",{"2":{"279":1}}],["glg",{"2":{"441":1}}],["g",{"2":{"441":1,"563":1}}],["gb",{"2":{"384":2}}],["gutter",{"2":{"591":1}}],["gui",{"2":{"482":1}}],["guides",{"2":{"441":1}}],["guide",{"2":{"69":1,"257":1,"491":2}}],["gulp",{"2":{"441":2}}],["guards",{"2":{"359":3,"370":1}}],["go",{"0":{"368":1},"2":{"368":4,"441":6}}],["governance",{"2":{"441":1}}],["gov",{"2":{"142":1}}],["googletagmanager",{"2":{"563":1}}],["googleanalytics",{"2":{"535":1}}],["google",{"0":{"280":1,"563":1,"586":1},"2":{"17":1,"121":1,"123":8,"124":2,"184":1,"190":4,"208":1,"211":1,"212":1,"268":1,"276":2,"278":1,"354":1,"374":1,"376":1,"425":1,"446":1,"491":1,"492":4,"535":1,"540":1,"549":1,"563":2,"576":1}}],["gap",{"2":{"505":1}}],["gatsby",{"2":{"441":5}}],["gateway",{"2":{"124":1}}],["garaguso",{"2":{"371":1,"380":1}}],["garfield",{"2":{"18":2}}],["gmail",{"2":{"123":1,"369":1}}],["ghz",{"2":{"384":1}}],["gh",{"2":{"121":1,"424":2,"561":3}}],["grpc",{"2":{"545":1}}],["grunt",{"2":{"441":2}}],["great",{"2":{"441":1}}],["grey",{"2":{"257":1}}],["gray",{"2":{"216":1,"217":2,"543":1}}],["graphql",{"2":{"126":1,"545":1}}],["graph",{"2":{"121":1,"535":1,"540":1,"549":1,"576":1,"586":1}}],["grid",{"2":{"117":1,"488":1,"497":2}}],["gitpod",{"2":{"441":2}}],["gitmessage",{"2":{"441":1}}],["gitmodules",{"2":{"441":1}}],["gitattributes",{"2":{"441":1}}],["gitlens",{"2":{"441":4}}],["gitlab",{"2":{"151":1,"401":1,"441":2,"451":1,"472":1,"475":2,"476":1,"478":1}}],["gitignore",{"0":{"472":1},"2":{"210":1,"424":1,"441":1,"471":1}}],["git",{"0":{"467":1,"471":1},"1":{"472":1},"2":{"120":2,"151":2,"208":3,"210":2,"397":1,"401":1,"424":3,"431":1,"441":10,"451":1,"465":1,"466":3,"467":4,"468":3,"469":6,"470":4,"471":9,"472":7,"473":7,"474":9,"475":12,"476":1,"477":1,"478":2,"537":2}}],["githubactionsgithubpagesworkflow",{"2":{"535":1}}],["githubpullrequests",{"2":{"441":1}}],["githubissues",{"2":{"441":1}}],["github",{"0":{"120":1,"424":1,"560":2},"1":{"561":2,"562":2},"2":{"75":2,"104":1,"120":2,"121":6,"133":1,"151":1,"156":1,"208":1,"214":2,"243":2,"244":1,"263":2,"264":2,"269":1,"277":1,"330":2,"337":1,"353":2,"362":1,"368":1,"374":1,"386":2,"401":2,"404":1,"408":1,"421":1,"424":23,"425":3,"441":7,"451":1,"452":1,"472":1,"475":6,"476":1,"478":1,"491":2,"500":1,"505":7,"508":6,"511":2,"515":3,"516":1,"520":1,"524":2,"528":2,"530":1,"531":1,"535":2,"537":1,"540":1,"542":1,"561":5,"576":3,"579":1}}],["geneva",{"2":{"506":1}}],["generation",{"2":{"492":1}}],["generate",{"2":{"100":1}}],["generalroutes",{"2":{"433":2}}],["gemfile",{"2":{"441":2}}],["getbestblockhash",{"2":{"546":1}}],["getsvgicon",{"2":{"438":3,"439":2}}],["gets",{"2":{"437":2}}],["getroutes",{"2":{"368":1}}],["getnotes",{"2":{"342":1,"343":2}}],["gettimestamp",{"2":{"320":2}}],["getters",{"2":{"413":1,"414":4}}],["getter",{"2":{"319":1}}],["gettoken",{"2":{"122":1}}],["getall",{"2":{"306":1,"307":1,"308":1}}],["getallprojects",{"2":{"306":1,"307":1,"308":1,"309":1}}],["getimageurl",{"2":{"438":2,"439":2}}],["getinstance",{"2":{"302":1}}],["getitem",{"2":{"113":1,"418":2,"420":1,"424":1}}],["getelementbyid",{"2":{"179":1}}],["getuserdata",{"2":{"122":2}}],["get",{"2":{"44":3,"83":4,"93":1,"122":1,"125":1,"319":2,"344":3,"345":2,"346":1,"347":3,"349":3,"369":2,"420":2,"439":2,"505":3,"545":1}}],["gtag",{"2":{"563":5}}],["gt",{"0":{"89":1},"2":{"61":2,"96":1,"100":2,"130":1,"182":1,"186":2,"210":1,"216":1,"259":1,"362":3,"415":1,"424":1,"441":1,"474":4,"492":2}}],["1px",{"2":{"543":1}}],["1кб",{"2":{"511":1,"528":1}}],["1b1b1f",{"2":{"506":2,"530":2,"531":2}}],["192x192",{"2":{"279":2}}],["19",{"2":{"184":1}}],["1986",{"2":{"166":1}}],["18",{"0":{"365":1},"2":{"183":1}}],["17",{"2":{"178":1,"179":1}}],["161618",{"2":{"506":1,"530":1,"531":1}}],["16гб",{"2":{"441":1}}],["16",{"2":{"178":1,"208":2,"331":1,"418":2}}],["15кб",{"2":{"515":1}}],["1516239022",{"2":{"371":1}}],["15",{"2":{"178":1,"484":1}}],["1s",{"2":{"177":1}}],["1rem",{"2":{"177":2}}],["1443",{"2":{"546":1}}],["14",{"2":{"176":1}}],["13",{"0":{"365":1},"2":{"176":1}}],["1280px",{"2":{"591":1}}],["1234567890",{"2":{"371":1}}],["12",{"2":{"175":1,"491":1}}],["127",{"2":{"142":2}}],["1199",{"2":{"543":1}}],["11",{"0":{"399":1},"2":{"159":1,"160":1,"161":1,"162":1,"164":1,"170":2,"171":1,"172":2,"174":1,"175":3,"176":2,"178":3,"179":1,"183":1,"184":1,"185":1,"186":2,"189":1,"190":4,"191":1,"194":1,"195":1,"202":1,"203":1,"474":3}}],["10000",{"2":{"543":1}}],["1000",{"2":{"375":1,"410":1,"450":1}}],["100vh",{"2":{"216":1}}],["100vw",{"2":{"216":1,"550":1}}],["100",{"2":{"177":1,"217":1,"410":1,"438":2,"454":1,"464":1,"492":1,"505":1,"550":1}}],["10",{"0":{"398":1,"472":1},"2":{"96":1,"142":2,"145":1,"152":1,"159":2,"174":1,"214":1,"271":1,"338":2,"349":2,"359":1,"384":1,"441":1,"446":1,"457":3,"459":1,"461":2,"462":6,"472":1,"483":1,"490":1,"491":2}}],["1",{"0":{"18":1,"19":1,"246":1,"303":1,"306":1,"315":1,"317":1,"319":1,"321":1,"325":1,"372":1,"389":1},"2":{"18":2,"19":1,"104":1,"125":6,"126":1,"131":1,"142":6,"147":2,"149":2,"159":1,"179":2,"182":2,"209":1,"210":1,"217":4,"224":2,"231":1,"246":1,"248":1,"250":1,"252":1,"257":2,"258":2,"263":6,"264":1,"272":2,"275":1,"276":1,"286":1,"304":1,"311":1,"314":1,"315":3,"317":1,"318":1,"319":3,"321":2,"322":3,"324":3,"325":10,"326":9,"331":4,"338":2,"339":2,"342":2,"343":3,"347":2,"349":2,"354":2,"357":2,"359":2,"368":2,"370":1,"371":2,"384":1,"405":2,"406":3,"407":2,"410":2,"412":4,"414":2,"415":2,"417":2,"420":2,"439":2,"440":1,"446":2,"450":1,"455":1,"457":3,"461":2,"462":2,"475":1,"483":1,"491":2,"492":1,"505":1,"506":4,"525":4,"530":2,"531":2,"545":1,"546":1,"550":1,"591":2}}],["х",{"2":{"292":1}}],["хак",{"2":{"550":1}}],["хау",{"2":{"466":1}}],["ханту",{"2":{"291":1}}],["характеристик",{"2":{"198":1}}],["характеристики",{"2":{"198":1,"352":1}}],["характер",{"2":{"140":1,"156":1,"202":1,"205":1,"477":1}}],["хватает",{"2":{"273":1,"442":1,"466":1}}],["хвастовство",{"2":{"209":1}}],["хювинкяя",{"2":{"186":1}}],["хювинкяа",{"2":{"186":1}}],["хлебным",{"2":{"182":1}}],["хлебные",{"0":{"182":1},"2":{"182":2}}],["хика",{"0":{"165":1},"2":{"166":1}}],["хеша",{"2":{"144":1}}],["хеш",{"2":{"144":1}}],["хеши",{"2":{"144":1}}],["хеширования",{"2":{"144":2}}],["хедеры",{"2":{"564":1}}],["хедере",{"2":{"88":1,"104":1,"112":1}}],["хедером",{"2":{"35":1,"431":1,"449":1,"580":1}}],["хедера",{"2":{"29":2}}],["хедер",{"2":{"29":2,"107":1,"582":1}}],["хэш",{"2":{"144":1,"359":1,"437":1}}],["хэша",{"2":{"135":1,"144":1,"368":1}}],["художественных",{"2":{"182":1}}],["хука",{"2":{"122":1}}],["хуке",{"2":{"122":1}}],["хуже",{"2":{"122":1,"166":1}}],["хранящиеся",{"2":{"418":1}}],["хранящей",{"2":{"411":1}}],["хранящуюся",{"2":{"370":1}}],["хранят",{"2":{"377":1}}],["хранятся",{"2":{"17":1,"370":1,"418":3,"491":1}}],["хранению",{"2":{"418":2}}],["хранения",{"2":{"310":1,"311":1,"338":1,"341":1,"342":1,"347":1,"354":1,"403":1,"418":4,"472":1}}],["хранением",{"2":{"422":1}}],["хранение",{"2":{"51":1,"471":1}}],["храним",{"2":{"420":1}}],["хранилищ",{"2":{"418":3}}],["хранилищу",{"2":{"341":1,"421":1}}],["хранилищами",{"2":{"422":1}}],["хранилищах",{"2":{"418":1}}],["хранилища",{"0":{"418":1},"2":{"145":1,"149":1,"277":1,"377":1,"403":2,"417":3,"418":6,"421":1}}],["хранилищем",{"2":{"412":1,"420":1}}],["хранилище",{"2":{"143":1,"148":1,"268":1,"418":1,"419":1,"421":2,"471":1}}],["храните",{"2":{"432":1}}],["хранится",{"2":{"263":1,"423":1}}],["хранить",{"2":{"123":1,"217":1,"247":1,"270":1,"424":1,"450":1}}],["храниться",{"2":{"50":1,"95":1,"338":1,"405":1}}],["хранит",{"2":{"46":1,"410":1,"418":1,"446":1}}],["хочу",{"2":{"483":2,"491":1}}],["хочется",{"2":{"293":1}}],["хочет",{"2":{"68":1,"124":2,"176":1,"194":1}}],["холсте",{"2":{"313":1}}],["ходе",{"2":{"176":2,"466":1}}],["ходу",{"2":{"17":1}}],["хостите",{"2":{"425":1}}],["хостингом",{"2":{"152":1}}],["хостинговым",{"2":{"145":1}}],["хостинг",{"0":{"425":1},"2":{"145":1,"146":2,"152":2,"195":1,"425":1}}],["хостинги",{"2":{"142":1,"542":1}}],["хостинга",{"2":{"139":2,"141":1,"145":3,"151":1,"153":1}}],["хостинге",{"2":{"121":1,"145":1,"154":1}}],["хост",{"2":{"424":2}}],["хостеры",{"2":{"425":1}}],["хосте",{"2":{"142":1,"424":1}}],["хотим",{"2":{"218":1,"249":2,"257":1,"277":1,"320":1,"335":1,"337":1,"340":1,"349":1,"356":1,"363":3,"371":1,"372":1,"373":1,"410":1,"416":1,"419":1,"457":1,"464":1,"471":1}}],["хотите",{"2":{"151":2,"194":1,"209":2,"222":1,"225":2,"334":1,"432":1,"446":1,"457":1,"471":1}}],["хотел",{"2":{"202":1}}],["хоть",{"2":{"114":1,"482":2}}],["хотя",{"2":{"96":1,"127":1,"139":1,"142":1,"152":1,"153":1,"161":1,"176":1,"189":1,"202":1,"205":1,"208":2,"209":1,"214":1,"217":1,"243":1,"259":1,"272":1,"277":2,"287":1,"304":1,"324":1,"331":2,"354":1,"368":1,"369":1,"370":1,"433":1,"457":1,"477":1,"491":1}}],["хорош",{"2":{"484":1}}],["хороша",{"2":{"270":1}}],["хорошая",{"2":{"69":1,"214":1,"225":1,"479":1,"483":2}}],["хорошего",{"2":{"290":1,"331":1,"454":1}}],["хорошей",{"2":{"220":1,"235":1,"243":1,"255":1,"362":1,"364":1,"390":1,"405":1,"450":1,"463":1,"483":1,"515":1}}],["хорошее",{"2":{"167":1,"319":1,"417":1}}],["хорошему",{"2":{"158":1,"167":1}}],["хороших",{"2":{"213":1,"265":1}}],["хорошими",{"2":{"354":1}}],["хорошим",{"2":{"175":1,"190":2,"375":1,"491":2}}],["хорошие",{"2":{"150":1,"167":1,"443":1,"482":1,"490":2,"491":1}}],["хороший",{"2":{"25":1,"205":1,"222":1,"263":1,"287":1,"290":1,"410":1,"414":1,"441":1,"473":1}}],["хорошую",{"2":{"26":1,"208":1,"213":1}}],["хорошо",{"2":{"3":1,"39":2,"47":1,"63":1,"65":1,"96":1,"145":1,"161":1,"167":1,"168":1,"178":1,"185":1,"186":1,"189":1,"221":1,"226":1,"264":1,"323":2,"335":1,"338":1,"341":2,"350":1,"371":1,"374":1,"377":1,"410":1,"441":1,"444":1,"490":1}}],["njsproj",{"2":{"472":1}}],["ntvs",{"2":{"472":1}}],["nls",{"2":{"441":2}}],["nx",{"2":{"441":2}}],["nvmrc",{"2":{"441":2}}],["nix",{"2":{"441":3}}],["npx",{"2":{"440":2}}],["npmjs",{"2":{"315":1}}],["npm",{"2":{"144":1,"208":1,"209":4,"210":6,"211":1,"212":1,"217":1,"279":1,"341":2,"344":1,"348":2,"356":1,"369":1,"408":1,"413":1,"431":1,"440":1,"441":4,"446":1,"455":2,"456":3,"457":3,"460":2,"464":1,"465":3,"472":1,"484":1,"542":1,"570":1}}],["nw",{"2":{"359":1,"418":1}}],["n>=2",{"2":{"324":1}}],["n",{"2":{"314":1,"324":3,"325":9,"326":5,"342":5,"424":1,"441":1}}],["nginx",{"0":{"148":1,"149":1},"1":{"149":1},"2":{"124":1,"145":1,"148":2,"149":1,"152":1,"384":1,"425":1}}],["nativetabs",{"2":{"441":1}}],["naruto",{"2":{"133":1}}],["navigate",{"2":{"366":4}}],["navigator",{"2":{"278":2}}],["navigationdrawer",{"2":{"535":1,"583":1}}],["navigation",{"0":{"551":1},"1":{"552":1,"553":1},"2":{"121":1,"181":1,"359":2,"535":1,"542":1}}],["navbar",{"0":{"583":1},"1":{"584":1,"585":1},"2":{"121":1,"535":2,"576":1,"583":1}}],["named",{"2":{"439":1}}],["names",{"2":{"142":1}}],["name=",{"2":{"114":1,"257":3,"263":1,"347":2,"365":2,"437":1,"547":1,"586":4}}],["name",{"2":{"106":3,"121":1,"131":6,"149":1,"226":3,"232":2,"253":5,"254":1,"255":5,"257":1,"263":10,"273":2,"275":2,"278":2,"279":2,"311":4,"315":13,"359":3,"362":4,"363":3,"365":4,"366":4,"368":2,"371":1,"418":5,"424":12,"433":2,"437":2,"438":4,"439":8,"473":5,"505":1,"535":1,"540":1,"588":2}}],["neighboring",{"2":{"505":1}}],["nest",{"2":{"441":2}}],["nesting",{"2":{"89":5,"441":2}}],["never",{"2":{"441":1}}],["nexttick",{"2":{"483":1}}],["next",{"0":{"293":1},"1":{"296":1,"297":1,"298":1,"299":1},"2":{"283":1,"441":2}}],["negotiation",{"2":{"147":1}}],["netlify",{"2":{"425":1,"441":2}}],["netflix",{"2":{"354":1}}],["netservice",{"2":{"346":2}}],["netbeans",{"2":{"208":1}}],["net",{"2":{"142":1,"371":1}}],["networks",{"2":{"546":1}}],["networkcommunication",{"0":{"347":1}}],["network",{"0":{"345":1},"2":{"124":1,"278":1,"334":1,"346":1,"418":1}}],["newitem",{"2":{"482":3}}],["new",{"2":{"112":1,"113":1,"128":1,"129":1,"179":1,"217":1,"252":1,"263":1,"304":1,"310":1,"313":2,"319":1,"326":6,"332":2,"334":1,"338":2,"340":1,"343":4,"345":2,"372":1,"420":1,"424":2,"435":1,"439":2,"543":1,"563":1}}],["num=",{"2":{"114":1}}],["numbers",{"2":{"100":1,"142":1}}],["number>",{"2":{"100":2}}],["number",{"2":{"83":1,"92":2,"93":1,"100":1,"112":3,"113":1,"253":1,"461":2,"505":1}}],["null",{"2":{"83":1,"93":1,"179":3,"263":2,"277":2,"310":1,"311":2,"418":1,"441":1}}],["nuxt",{"2":{"10":1,"222":1,"441":2,"541":1}}],["nodе",{"2":{"441":1}}],["nodemon",{"2":{"441":4}}],["nodes",{"2":{"377":1}}],["nodejs",{"0":{"348":1},"1":{"349":1},"2":{"208":1}}],["node",{"2":{"124":2,"208":6,"209":2,"210":2,"214":2,"329":2,"347":2,"348":2,"356":1,"384":1,"424":2,"440":3,"441":6,"459":2,"472":1,"491":1,"492":1}}],["now",{"2":{"159":1}}],["note=",{"2":{"343":1}}],["note=ref",{"2":{"342":1}}],["notes",{"2":{"342":4,"343":8}}],["notes=ref",{"2":{"342":1}}],["note",{"2":{"342":13,"343":1}}],["notebook",{"2":{"20":1,"543":3,"552":1,"580":2,"582":1}}],["notation",{"2":{"303":1}}],["notificationinterceptor",{"2":{"122":2,"546":2}}],["not",{"2":{"121":1,"264":2,"441":1,"446":1,"457":1,"505":1}}],["no",{"2":{"121":2,"217":1,"535":8,"540":4}}],["nosql",{"2":{"17":2,"39":1,"124":1,"341":1,"450":1}}],["umd",{"2":{"513":1,"530":1,"531":1}}],["uml",{"2":{"14":1,"247":2}}],["u",{"2":{"433":1}}],["uri",{"2":{"345":1,"362":1,"372":1,"373":1,"546":1}}],["urlsearchparams",{"2":{"372":3}}],["urls",{"2":{"359":1}}],["url",{"2":{"0":1,"44":3,"122":1,"169":1,"191":1,"210":1,"273":2,"275":3,"277":1,"278":1,"279":1,"345":2,"347":1,"349":2,"355":1,"357":1,"359":5,"362":3,"363":2,"364":1,"365":1,"366":4,"367":1,"368":4,"370":1,"371":1,"372":1,"374":1,"375":2,"437":2,"439":1,"475":2,"505":6,"508":2,"546":1,"586":2,"588":1}}],["usage",{"2":{"408":1}}],["usability",{"2":{"284":1}}],["us",{"2":{"372":1,"441":1}}],["using",{"2":{"366":1}}],["usb",{"2":{"270":1,"376":1}}],["usetouchswipe",{"2":{"553":1}}],["usenewswidget",{"2":{"482":1}}],["useid",{"2":{"436":3}}],["usei18nlight",{"0":{"571":1},"2":{"572":2}}],["usei18n",{"2":{"431":1,"449":1,"482":1,"572":4}}],["usepokemon",{"2":{"427":1,"428":1,"448":2}}],["usecounterstore",{"2":{"414":2,"415":1,"417":1}}],["usedocumentscroll",{"2":{"258":5}}],["usewindowsevents",{"2":{"258":1}}],["useappconfig",{"2":{"547":3}}],["useapploader",{"0":{"435":1},"2":{"434":3,"435":1,"436":3}}],["useadmin",{"2":{"258":1}}],["useauthservice",{"2":{"450":1}}],["useauthstore",{"2":{"450":1}}],["useauth",{"2":{"122":4,"450":1}}],["userloggedin",{"2":{"450":1}}],["useraccountview",{"2":{"433":1}}],["usermodel",{"2":{"430":1,"448":1}}],["userprofile",{"2":{"430":2,"448":2}}],["username",{"2":{"370":3,"424":2,"450":1,"505":1}}],["userouter",{"2":{"365":3,"368":1}}],["useroute",{"2":{"365":3,"368":1,"373":2}}],["user",{"2":{"122":2,"149":1,"157":2,"166":1,"247":1,"255":1,"375":2,"424":6,"430":2,"441":3,"448":2,"501":2}}],["userid",{"2":{"122":1}}],["userservice",{"2":{"430":1,"448":1}}],["users",{"2":{"122":7,"255":1}}],["userdata",{"2":{"122":1}}],["usescreenwidth",{"2":{"543":6}}],["usescreensize",{"2":{"482":1}}],["useshoppingcart",{"2":{"482":1}}],["usesessionstorage",{"2":{"420":3,"421":2}}],["usestate",{"2":{"412":6}}],["usestore",{"2":{"258":1}}],["uses",{"2":{"100":1,"424":10}}],["usefavourites",{"0":{"112":1},"2":{"98":1,"112":6,"113":1}}],["usebreakponts",{"2":{"96":2}}],["uselocalstorage",{"0":{"95":1},"2":{"95":4,"96":3}}],["use",{"0":{"14":1,"432":1},"2":{"14":4,"129":1,"237":1,"247":1,"258":1,"263":2,"264":1,"349":2,"360":2,"416":1,"441":1,"489":1}}],["upstream",{"2":{"475":1}}],["up",{"2":{"424":1,"441":1}}],["updating",{"2":{"424":1}}],["updateprojects",{"2":{"362":5}}],["update",{"2":{"132":5,"248":1,"254":6,"258":4,"424":1,"441":1,"469":1}}],["upwardprop",{"2":{"257":5}}],["undefined",{"2":{"463":1}}],["unlighthouse",{"2":{"441":2}}],["unocss",{"2":{"441":10}}],["uno",{"2":{"441":10}}],["untrackedchanges",{"2":{"441":1}}],["unit",{"2":{"451":1,"453":1,"479":6}}],["unique",{"2":{"450":1}}],["unicodehighlight",{"2":{"441":1}}],["universal",{"2":{"247":1}}],["unpkg",{"2":{"223":1,"513":3,"520":2,"530":3,"531":3}}],["utf",{"2":{"208":1,"418":2}}],["utils",{"0":{"460":1},"1":{"461":1,"462":1},"2":{"122":3,"427":1,"428":1,"429":1,"431":1,"438":2,"448":3,"449":1,"451":1,"454":1,"455":1,"459":1,"460":3,"461":2,"462":1,"545":3,"546":5,"547":2,"549":1,"572":1}}],["ubuntu",{"2":{"152":1,"208":1,"421":1,"424":3,"469":1,"535":1}}],["ux",{"0":{"155":1,"157":1,"167":1,"399":1},"1":{"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":1,"203":1,"204":1,"205":1,"206":1},"2":{"78":1,"80":1,"95":1,"106":1,"155":6,"157":2,"158":2,"167":2,"179":1,"206":2,"492":2,"501":1,"538":1,"553":1,"576":1,"590":1}}],["uikit",{"2":{"430":1,"448":1}}],["ui",{"0":{"24":1,"27":1,"157":1,"485":1,"490":1},"1":{"25":1,"26":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1},"2":{"20":2,"26":1,"68":1,"80":1,"88":1,"96":1,"114":1,"155":3,"157":2,"206":1,"273":1,"284":1,"289":1,"331":1,"430":1,"440":1,"442":2,"448":1,"463":1,"465":4,"479":1,"482":3,"483":3,"485":1,"487":1,"490":10,"501":1,"506":1,"538":1,"542":1,"547":1,"566":1,"567":1}}],["og",{"2":{"586":6}}],["owner",{"2":{"504":1,"505":2,"511":1,"520":1,"524":1,"528":1,"530":1,"531":1}}],["os",{"2":{"483":1}}],["old",{"2":{"446":2}}],["ok",{"2":{"446":2}}],["okta",{"2":{"374":1}}],["o",{"2":{"385":1}}],["otp",{"0":{"375":1},"2":{"375":5,"376":2,"378":1}}],["othervalue",{"2":{"55":1,"56":1}}],["other",{"2":{"55":1,"56":1,"450":1}}],["out",{"2":{"441":2,"446":1,"458":1}}],["output",{"2":{"441":1,"461":1}}],["outlook",{"2":{"369":1}}],["our",{"2":{"225":1}}],["overflow",{"2":{"550":1}}],["overwrite",{"2":{"535":2}}],["overrides",{"2":{"441":1}}],["over",{"0":{"287":1},"2":{"283":1}}],["option",{"2":{"237":1}}],["options=",{"2":{"511":1,"513":1,"524":1,"528":1,"530":1,"531":1}}],["options",{"0":{"226":1,"414":1},"2":{"127":1,"129":1,"130":1,"147":1,"226":6,"263":1,"359":1,"368":1,"369":1,"413":2,"414":1,"417":1,"424":1,"441":1,"446":1,"511":4,"520":2,"524":4,"528":4,"531":4}}],["opera",{"2":{"208":1}}],["open=",{"2":{"568":1}}],["opengraph",{"2":{"535":1}}],["openclose",{"2":{"441":1}}],["opencart",{"2":{"16":2,"62":1}}],["openid",{"0":{"371":1},"2":{"371":6,"372":2,"376":1}}],["opennote",{"2":{"342":2}}],["open",{"2":{"12":1,"39":1,"62":1,"121":1,"278":1,"323":1,"533":1,"535":1,"540":1,"549":1,"576":1,"586":1}}],["oreilly",{"2":{"491":1}}],["orientation",{"2":{"274":1,"275":1,"279":1,"588":1}}],["origins",{"2":{"349":1}}],["origin",{"2":{"125":7,"349":2,"418":2,"475":5}}],["or",{"2":{"255":1,"384":5,"505":4,"535":1,"543":1}}],["oracle",{"2":{"124":1,"425":1}}],["organizeimports",{"2":{"441":1}}],["organismheader",{"2":{"428":1,"448":1}}],["organismpokemoncard",{"2":{"428":1,"448":1}}],["organisms",{"2":{"428":1,"448":1}}],["org",{"2":{"107":1,"133":2,"137":1,"142":1,"164":1,"208":1,"214":1,"233":1,"234":2,"257":1,"258":1,"259":1,"272":1,"292":1,"368":1,"372":1,"417":1,"418":1,"546":1}}],["orders",{"2":{"12":1}}],["odezhda",{"2":{"106":1}}],["obj",{"2":{"446":1}}],["object",{"2":{"100":1,"229":1,"253":1,"290":1,"303":1,"366":1,"439":1}}],["observerclass",{"2":{"315":3}}],["observerpattern",{"2":{"315":1}}],["observer",{"0":{"314":1,"315":1,"408":1},"1":{"315":1,"409":1,"410":1},"2":{"178":1,"179":2,"283":1,"297":1,"319":2,"323":1,"403":1,"408":1,"410":1,"446":1}}],["observe",{"2":{"95":2,"179":1}}],["official",{"2":{"384":1}}],["office",{"2":{"162":1,"354":1}}],["off",{"2":{"315":4,"362":1,"410":1,"441":1,"450":1}}],["of",{"0":{"286":1},"2":{"100":5,"121":1,"254":1,"283":1,"427":1,"437":1,"441":1,"448":1,"457":1,"458":1,"492":1,"505":3}}],["once",{"2":{"456":1,"457":1}}],["onclickoutside",{"2":{"96":1}}],["ontaskerrors",{"2":{"441":1}}],["onmesssage",{"2":{"333":1}}],["onmessage=",{"2":{"339":1}}],["onmessage",{"2":{"332":2,"333":2,"334":1,"336":1,"338":1,"339":1}}],["onmounted",{"2":{"122":3,"179":2,"258":2,"277":2,"290":3,"410":3,"590":1}}],["onbeforeunmount",{"2":{"277":1,"290":3,"362":1,"410":3}}],["onboarding",{"2":{"192":1}}],["onunmounted",{"2":{"258":2}}],["onlyenabledextensions",{"2":{"441":1}}],["only",{"2":{"189":1,"441":2}}],["online",{"2":{"14":1,"354":1}}],["onecolumnlayout",{"0":{"582":1}}],["onecomponent",{"2":{"252":3}}],["onerror",{"2":{"332":2}}],["one",{"2":{"162":1,"368":2,"492":1}}],["on",{"0":{"233":1},"2":{"121":1,"123":1,"147":1,"233":2,"315":3,"349":1,"362":1,"410":1,"424":5,"431":1,"441":2,"448":1,"462":1,"535":1}}],["oauth",{"2":{"40":1,"123":2,"371":1,"378":1}}],["ozon",{"2":{"23":1}}],["eex",{"2":{"441":1}}],["eol",{"2":{"441":1}}],["e88a22df",{"2":{"437":1}}],["echo",{"2":{"424":8}}],["ecosystem",{"2":{"384":1}}],["ecommerce",{"2":{"41":1}}],["eager",{"2":{"439":2}}],["easingthemes",{"2":{"424":2}}],["eat",{"2":{"317":1}}],["eyjzdwiioiixmjm0nty3odkwiiwibmftzsi6ilbhymxviequiedhcmfndxnviiwiawf0ijoxnte2mjm5mdiyfq",{"2":{"371":1}}],["eyjhbgcioijiuzi1niisinr5cci6ikpxvcj9",{"2":{"371":1}}],["err=>",{"2":{"342":1,"370":1,"375":2}}],["err",{"2":{"326":1,"332":1,"339":2,"340":1,"343":1,"377":2}}],["errorcomponent",{"2":{"252":3}}],["error",{"2":{"55":3,"326":1,"347":1,"373":2,"424":1,"457":1,"458":1,"472":1}}],["education",{"2":{"588":1}}],["editorconfig",{"2":{"441":2}}],["editortab",{"2":{"441":1}}],["editorgroup",{"2":{"441":1}}],["editor",{"2":{"441":29}}],["edit",{"2":{"234":1,"248":1,"500":1}}],["edititem",{"2":{"234":4}}],["edge",{"2":{"40":1,"124":2,"208":1,"384":1}}],["es",{"2":{"520":1}}],["esm",{"2":{"520":2,"521":1}}],["esbenp",{"2":{"441":4}}],["esbuild",{"2":{"214":2,"440":1}}],["esnext",{"2":{"440":1}}],["es6",{"2":{"303":1,"446":1,"482":1}}],["eslint",{"2":{"20":1,"101":1,"440":3,"441":17,"491":1,"538":2}}],["effective",{"2":{"166":1}}],["eff",{"2":{"152":2}}],["eth",{"2":{"377":1}}],["ethjs",{"2":{"377":1}}],["ethereum",{"2":{"377":4}}],["etc",{"0":{"149":1},"2":{"148":1,"591":1}}],["etsy",{"2":{"23":1}}],["eventbus",{"2":{"362":3}}],["event",{"2":{"277":3,"278":5,"315":13,"332":4,"333":2,"334":1,"338":2,"339":2,"407":1,"441":1,"462":2,"483":1}}],["eventname",{"2":{"253":2}}],["events",{"0":{"132":1},"2":{"253":1,"315":9,"454":2}}],["everybody",{"2":{"450":1}}],["every",{"2":{"122":1}}],["electron",{"2":{"359":1}}],["electronic",{"2":{"152":1}}],["elements",{"0":{"481":1},"2":{"234":1,"259":1,"481":1}}],["element",{"2":{"179":1,"481":1}}],["elem",{"2":{"179":3}}],["el",{"2":{"128":1}}],["else",{"0":{"230":2},"2":{"112":1,"252":1,"278":1,"310":1,"325":2,"326":2,"338":1,"345":2,"373":1,"375":2,"414":1,"415":1,"420":1,"438":1}}],["end",{"2":{"453":2,"454":2,"479":2}}],["endpoint",{"2":{"370":1,"372":1}}],["endpoints",{"0":{"44":1},"2":{"371":1}}],["engine",{"2":{"446":1}}],["enablesmartcommit",{"2":{"441":1}}],["enable",{"2":{"441":3,"446":1}}],["enabled",{"2":{"279":1,"441":9}}],["entity",{"2":{"450":2}}],["entities",{"2":{"430":2,"448":2}}],["entire",{"2":{"439":1}}],["entry",{"2":{"368":2}}],["enter=",{"2":{"217":2}}],["enter",{"2":{"209":2,"215":1,"217":1,"462":1}}],["encapsulation",{"0":{"289":1},"2":{"283":1}}],["encryption",{"2":{"371":1}}],["encrypt",{"0":{"152":1},"2":{"139":1,"152":3,"153":1,"271":1,"398":1}}],["en",{"2":{"164":1,"292":1,"372":1,"418":1,"441":3}}],["envrc",{"2":{"441":12}}],["envs",{"2":{"424":2}}],["environments",{"2":{"425":1}}],["environment",{"2":{"424":1,"460":1}}],["env",{"2":{"122":1,"424":26,"441":38,"546":1}}],["emmet",{"2":{"441":2}}],["emma",{"2":{"131":1}}],["email",{"2":{"375":3}}],["email=ref",{"2":{"375":1}}],["emitted",{"2":{"462":1}}],["emit",{"2":{"132":1,"315":3,"362":1,"410":1,"462":1}}],["emits",{"2":{"127":1,"132":1,"226":1,"254":1,"405":2}}],["empty",{"2":{"121":1}}],["embla",{"0":{"85":1},"2":{"85":1,"444":1}}],["e2e2e3",{"2":{"506":1,"591":2}}],["e2e",{"2":{"72":1,"453":1,"479":5}}],["eq",{"2":{"55":1}}],["exs",{"2":{"441":5}}],["ex",{"2":{"441":1}}],["exclude",{"2":{"424":1,"441":1}}],["exiting",{"2":{"424":1}}],["extractor",{"2":{"441":11}}],["extractdomain",{"2":{"0":1}}],["extent",{"2":{"505":1}}],["extension",{"2":{"441":1}}],["extensions",{"2":{"272":1,"441":3,"472":1}}],["extending",{"2":{"431":1,"448":1}}],["experimentally",{"2":{"505":1}}],["experience",{"2":{"157":1,"454":1,"501":2}}],["expected",{"2":{"457":1}}],["expect",{"2":{"457":12,"458":1,"459":3,"461":2,"462":4,"463":1}}],["expand",{"2":{"441":1}}],["expandmode",{"2":{"441":1}}],["express",{"2":{"348":2,"349":7,"492":1}}],["explorer",{"2":{"210":1,"441":6,"471":1}}],["explain",{"0":{"100":1,"101":1},"2":{"100":1,"101":1}}],["exports",{"2":{"439":1}}],["export",{"2":{"95":1,"112":1,"122":2,"226":2,"258":1,"263":2,"279":1,"303":1,"304":1,"306":1,"307":1,"308":1,"311":1,"338":1,"340":1,"343":1,"345":1,"359":1,"409":1,"412":1,"414":1,"415":1,"420":1,"433":1,"435":1,"439":1,"440":1,"450":1,"546":2}}],["examplecomponent",{"2":{"252":1}}],["example",{"2":{"14":1,"439":2}}],["e",{"2":{"12":2,"16":1,"62":1,"63":1,"77":1,"80":1}}],["2e2e32",{"2":{"506":1,"530":1,"531":1}}],["2fa",{"0":{"376":1},"2":{"375":1,"376":4}}],["299",{"2":{"370":1}}],["2979ff",{"2":{"275":1}}],["29",{"2":{"202":1,"441":1}}],["28",{"2":{"195":1}}],["27",{"2":{"194":1}}],["26",{"2":{"191":1,"437":1}}],["25",{"2":{"190":1,"319":2}}],["255",{"2":{"142":1,"506":2,"530":2,"531":2,"591":2}}],["245",{"2":{"506":3,"530":3,"531":3,"591":3}}],["24",{"2":{"190":1,"438":2}}],["235",{"2":{"506":4,"530":4,"531":4,"591":4}}],["23",{"2":{"189":1}}],["22+",{"2":{"441":1}}],["22",{"2":{"186":1,"190":1,"208":1}}],["21",{"2":{"186":1,"190":1,"325":2}}],["2px",{"2":{"177":1}}],["2022",{"2":{"502":1}}],["2023",{"2":{"441":1,"491":1,"502":1}}],["2016",{"2":{"491":1}}],["20~30",{"2":{"440":1}}],["20",{"2":{"96":1,"114":1,"152":1,"179":1,"185":1,"424":1,"450":1,"491":1,"505":1}}],["200",{"2":{"50":1,"252":1,"370":1,"425":1,"441":1,"492":1,"505":2,"568":1}}],["2",{"0":{"127":1,"247":1,"304":1,"306":1,"307":2,"308":1,"309":1,"310":1,"311":1,"312":1,"315":1,"317":1,"319":1,"321":1,"322":2,"325":1,"373":1,"390":1,"400":1},"1":{"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1},"2":{"10":1,"44":2,"96":2,"107":1,"109":1,"125":1,"126":1,"127":2,"128":2,"129":1,"130":1,"132":2,"133":6,"134":1,"136":1,"138":2,"145":1,"149":2,"152":1,"160":1,"179":1,"182":2,"209":1,"211":1,"215":1,"217":4,"221":1,"226":4,"231":1,"243":1,"246":1,"247":1,"251":1,"257":2,"258":4,"263":6,"264":1,"272":1,"277":1,"286":1,"288":2,"311":1,"314":2,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":2,"322":2,"323":1,"324":1,"325":10,"326":10,"331":2,"335":1,"336":1,"338":2,"339":2,"342":2,"343":2,"349":2,"354":1,"357":1,"359":3,"371":2,"400":1,"406":3,"407":2,"408":2,"410":1,"412":4,"414":3,"415":3,"417":3,"418":1,"419":1,"420":2,"441":3,"446":5,"450":2,"455":2,"457":4,"461":2,"462":4,"471":2,"482":1,"490":1,"491":3,"492":1,"497":2,"506":4,"525":4,"530":2,"531":2,"546":1,"591":2}}],["c2c2c4",{"2":{"591":1}}],["cтановиться",{"2":{"483":1}}],["czrc",{"2":{"441":2}}],["cz",{"2":{"441":2}}],["cypress",{"2":{"441":10,"462":1,"479":1}}],["cycle",{"2":{"226":1}}],["cxx",{"2":{"441":1}}],["cjs",{"2":{"441":4}}],["cc",{"2":{"441":1}}],["csproj",{"2":{"441":1}}],["cspell",{"2":{"441":2}}],["cshtml",{"2":{"441":2}}],["cs",{"2":{"441":12}}],["csshtml",{"2":{"550":1}}],["cssnano",{"2":{"441":10}}],["cssnanorc",{"2":{"441":10}}],["css",{"0":{"87":1,"89":1,"211":1,"212":1,"490":1,"497":1,"525":1,"550":1},"1":{"88":1,"89":1,"90":1,"212":1,"216":1,"217":1,"218":1},"2":{"20":2,"35":3,"85":1,"89":6,"96":1,"169":1,"170":1,"171":1,"176":1,"189":3,"207":1,"210":4,"211":5,"212":9,"213":9,"216":2,"217":4,"219":1,"220":1,"221":4,"223":1,"224":1,"225":4,"229":1,"234":1,"257":1,"270":1,"274":1,"279":3,"289":1,"342":1,"360":1,"384":1,"425":1,"441":5,"442":1,"482":1,"487":1,"490":9,"491":1,"492":1,"506":2,"511":4,"513":1,"518":1,"520":2,"524":3,"525":4,"528":4,"530":1,"531":1,"538":1,"542":1,"579":1,"582":1,"589":1,"590":1,"591":4}}],["css3",{"0":{"487":1},"2":{"20":1,"487":1,"488":1,"490":1,"538":1}}],["cpp",{"2":{"441":1}}],["cp",{"2":{"424":1}}],["cpu",{"2":{"384":1,"483":2}}],["c++",{"2":{"290":1}}],["certification",{"2":{"491":1}}],["certbot",{"2":{"152":6,"154":1,"425":1}}],["central",{"2":{"419":1}}],["center",{"2":{"216":1}}],["celsius",{"2":{"319":9}}],["ctrlcmd",{"2":{"441":1}}],["ctrl",{"2":{"166":1}}],["c>",{"2":{"147":2}}],["cname",{"2":{"142":1}}],["cheat",{"0":{"493":1},"1":{"494":1,"495":1,"496":1,"497":1,"498":1,"499":1},"2":{"494":1,"495":1,"496":1,"497":4}}],["check",{"2":{"441":1,"461":1,"462":1}}],["checkout",{"2":{"424":4,"473":2,"474":2}}],["checkotp",{"2":{"375":3}}],["checkbox",{"2":{"217":2}}],["checked",{"2":{"217":6}}],["chia",{"2":{"457":1}}],["childsession",{"0":{"421":1}}],["childsimple",{"2":{"412":1}}],["childpinia",{"0":{"417":1}}],["children",{"2":{"363":2,"364":1,"433":2}}],["child",{"0":{"407":1,"410":1},"2":{"254":1,"406":4}}],["childcomponent>",{"2":{"254":1,"406":3}}],["childcomponent",{"2":{"254":1,"406":4}}],["chgrp",{"2":{"424":2}}],["chosen",{"2":{"505":1}}],["choice",{"2":{"424":1}}],["choose",{"2":{"121":1}}],["chrome",{"2":{"208":1,"276":2,"280":1,"384":2,"418":1,"421":1,"446":2,"492":1}}],["chromium",{"2":{"133":1,"208":1,"384":1,"446":1}}],["changelocale",{"2":{"572":2}}],["changelog",{"2":{"441":1,"515":1}}],["changes",{"2":{"137":1}}],["chain",{"2":{"377":1}}],["chainable",{"2":{"320":1}}],["chapter09",{"2":{"452":1}}],["chapter07",{"2":{"404":1}}],["chapter05",{"2":{"353":1}}],["chapter08",{"2":{"330":1}}],["chapter06",{"2":{"269":1}}],["chapter11",{"2":{"156":1}}],["chapter",{"0":{"144":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"315":1,"317":1,"319":1,"321":1,"322":1,"325":1,"472":1},"2":{"209":1,"279":3}}],["clangd",{"2":{"441":1}}],["clang",{"2":{"441":2}}],["classes",{"2":{"498":1}}],["classpath",{"2":{"441":1}}],["class",{"2":{"304":1,"441":1}}],["class=",{"2":{"112":1,"114":2,"177":1,"213":1,"216":1,"217":17,"257":3,"263":2,"362":3,"365":1,"407":1,"417":1,"434":3,"438":1,"520":1,"543":4,"547":2}}],["clearcase",{"2":{"466":1}}],["clear",{"2":{"418":1}}],["clearinterval",{"2":{"375":1}}],["cleartodo",{"2":{"217":3}}],["clean",{"0":{"290":1},"2":{"258":1,"283":1,"290":1,"315":1,"424":1}}],["clippy",{"2":{"441":2}}],["clipboard",{"2":{"217":1,"441":4}}],["click",{"2":{"233":2,"263":1,"406":1,"462":3}}],["click=",{"2":{"217":3,"233":2,"234":1,"263":2,"277":1,"342":3,"347":1,"406":1,"407":1,"410":1,"412":2,"417":2,"547":1,"572":1}}],["cli",{"2":{"134":1,"440":1,"441":2}}],["client",{"2":{"44":3,"55":2,"56":9,"125":6,"371":1,"372":1,"545":1}}],["closeonfiledelete",{"2":{"441":1}}],["closemodal",{"2":{"263":3}}],["cloud",{"2":{"124":2,"491":1}}],["clone",{"2":{"120":1,"278":1,"537":1}}],["customevent",{"2":{"481":1}}],["customer",{"2":{"80":1}}],["custom",{"0":{"481":1},"2":{"441":2,"446":3,"481":2,"591":1}}],["cursorstyle",{"2":{"441":1}}],["cursorsmoothcaretanimation",{"2":{"441":1}}],["cursorblinking",{"2":{"441":1}}],["cursor",{"2":{"217":1}}],["currentcolor",{"2":{"438":2}}],["current",{"2":{"121":1,"182":2,"263":11}}],["curl",{"2":{"44":2,"56":2}}],["cdn",{"2":{"223":1}}],["cd",{"0":{"401":1},"2":{"71":1,"121":1,"401":5,"424":4,"476":2,"477":1,"478":1,"479":1,"491":1,"536":1,"537":1,"579":1}}],["citation",{"2":{"441":1}}],["city",{"2":{"363":1,"365":1}}],["cities",{"2":{"363":1}}],["circleci",{"2":{"441":2}}],["circle",{"2":{"313":4,"506":2,"525":1,"530":1,"531":1}}],["ci",{"0":{"401":1},"2":{"71":1,"401":5,"424":1,"476":3,"477":1,"478":1,"479":1,"491":1,"579":1}}],["cmakepresets",{"2":{"441":1}}],["cmake",{"2":{"441":3}}],["cmakelists",{"2":{"441":1}}],["cmv",{"0":{"90":1,"115":1},"2":{"64":1}}],["cms",{"0":{"37":1,"39":1},"1":{"38":1,"39":1,"40":1,"41":1},"2":{"6":1,"12":2,"39":1,"63":1}}],["crm",{"2":{"542":1}}],["crowdin",{"2":{"441":2}}],["crossorigin",{"2":{"520":2}}],["cross",{"2":{"125":1,"349":1,"441":1}}],["credits",{"0":{"518":1},"2":{"441":1}}],["credo",{"2":{"441":1}}],["creator",{"2":{"143":1}}],["created",{"2":{"474":1}}],["createpinia",{"2":{"416":2}}],["createshape",{"2":{"313":3}}],["createrouter",{"2":{"144":1,"359":3}}],["creatememoryhistory",{"2":{"135":1}}],["createwebhistory",{"2":{"135":1,"144":3}}],["createwebhashhistory",{"2":{"135":1,"144":1,"359":3}}],["createapp",{"2":{"128":2,"129":4,"223":4,"251":2,"255":1,"263":2,"360":2,"416":2}}],["create",{"0":{"535":1},"1":{"536":1},"2":{"55":1,"121":1,"209":1,"248":1,"440":1,"500":1,"533":1,"535":4,"540":1,"541":1}}],["createclient",{"2":{"55":2}}],["crypto",{"2":{"338":1}}],["crafty",{"0":{"61":1},"2":{"75":2,"83":1,"104":1,"120":1,"121":5}}],["crud",{"2":{"59":1,"124":1,"248":2,"290":1,"305":1,"341":2,"342":1,"344":2}}],["c",{"2":{"17":1,"222":3,"226":1,"290":1,"326":7,"365":4,"441":1,"506":20,"525":17,"530":10,"531":11,"535":1,"542":1,"591":9}}],["capture",{"2":{"441":95}}],["caption",{"2":{"177":2}}],["capacitor",{"2":{"359":1}}],["calc",{"2":{"550":1}}],["calculation",{"2":{"457":1}}],["calculatecelsius",{"2":{"319":2}}],["calculatefahrenheit",{"2":{"319":2}}],["callback",{"0":{"324":1,"325":1},"1":{"325":1},"2":{"324":1,"325":7,"326":1,"332":2,"483":1}}],["callbacks",{"2":{"283":1,"299":1}}],["call",{"0":{"191":1},"2":{"191":1}}],["called",{"2":{"100":1}}],["catchpokemon",{"2":{"430":1,"448":1}}],["catch",{"2":{"310":1,"326":5,"343":3,"345":2,"370":1,"374":1,"375":2,"458":1}}],["categories",{"0":{"48":1},"2":{"44":3,"46":1,"83":3,"588":1}}],["categoryproducts",{"2":{"83":1}}],["category",{"0":{"50":1},"2":{"18":1,"83":1,"106":4,"118":1}}],["categoryid",{"2":{"18":1,"83":3,"106":2}}],["caches",{"2":{"278":2}}],["cache",{"2":{"278":4,"441":1,"589":1}}],["can",{"2":{"450":1,"543":1}}],["cancel",{"2":{"263":3}}],["caniuse",{"2":{"133":1}}],["camelcase",{"2":{"239":1,"258":1}}],["cargo",{"2":{"441":2}}],["card",{"2":{"217":1,"586":1}}],["carousel",{"0":{"85":1},"2":{"85":1,"444":1}}],["cart",{"2":{"12":1,"106":1}}],["cases",{"0":{"432":1}}],["case",{"0":{"14":1},"2":{"14":4,"47":1,"237":1,"247":1,"264":3,"270":1,"313":2,"317":3,"319":2,"489":1}}],["coefficients",{"2":{"505":1}}],["coverage",{"2":{"456":2,"464":4}}],["coolcosmos",{"2":{"450":1}}],["cookies",{"2":{"418":2}}],["cookie",{"2":{"123":3,"277":1}}],["copying",{"2":{"441":1}}],["copilot",{"2":{"98":1}}],["coinflip",{"2":{"259":1}}],["couchdb",{"2":{"341":2}}],["count`",{"2":{"424":1}}],["count=5",{"2":{"424":1}}],["count++",{"2":{"414":1}}],["count>=0",{"2":{"414":2}}],["counter++",{"2":{"412":1}}],["counter=",{"2":{"406":3}}],["counter",{"0":{"415":1},"2":{"406":8,"407":3,"412":2,"414":1,"415":1,"417":1,"421":2}}],["countries",{"2":{"365":1}}],["country",{"2":{"363":1,"365":3}}],["count",{"2":{"236":1,"414":3,"415":7}}],["coupled",{"2":{"2":1}}],["colortheme",{"2":{"441":1}}],["color",{"2":{"159":1,"177":1,"225":1,"274":2,"275":2,"279":2,"322":2,"417":1,"438":3,"530":1,"531":2}}],["column=eq",{"2":{"56":1}}],["column",{"2":{"55":3,"56":2,"189":1,"543":1}}],["core",{"2":{"371":1,"429":1,"448":1,"469":1}}],["cordova",{"2":{"359":1}}],["corporation",{"2":{"142":1,"588":1}}],["cors",{"0":{"125":1},"2":{"125":10,"348":1,"349":5}}],["coding",{"2":{"64":1,"90":1,"115":1}}],["codesandbox",{"2":{"441":1}}],["codeowners",{"2":{"441":1}}],["codecov",{"2":{"441":10}}],["codelens",{"2":{"441":4}}],["codeaction",{"2":{"441":1}}],["codeactions",{"2":{"441":1}}],["codeactionsonsave",{"2":{"441":2}}],["code>",{"2":{"417":1}}],["code=ref",{"2":{"375":2}}],["codeium",{"0":{"97":1},"1":{"98":1,"99":1,"100":1,"101":1,"102":1},"2":{"98":3,"99":1,"100":1,"101":1,"102":1,"441":1}}],["code",{"0":{"235":1,"293":1},"1":{"236":1,"237":1,"238":1,"239":1,"240":1,"296":1,"297":1,"298":1,"299":1},"2":{"39":1,"89":1,"98":1,"100":2,"121":1,"208":2,"210":1,"226":1,"237":1,"283":1,"317":1,"365":2,"373":3,"374":2,"375":3,"384":1,"417":1,"431":1,"441":9,"468":1,"475":1,"482":1,"535":1,"540":1,"561":1,"572":4,"573":1}}],["conduct",{"2":{"441":1}}],["conf",{"2":{"441":1}}],["confirmsync",{"2":{"441":1}}],["confirmdraganddrop",{"2":{"441":1}}],["confirmdelete",{"2":{"441":1}}],["confirm",{"0":{"202":1}}],["configs",{"2":{"441":1}}],["config",{"2":{"121":1,"210":1,"214":3,"279":1,"440":2,"441":225,"460":1,"463":1,"464":1,"535":4,"538":1,"549":1,"562":1,"563":1}}],["concept",{"2":{"427":1,"448":1}}],["concerns",{"0":{"286":1},"2":{"283":1}}],["connection",{"2":{"441":1}}],["connect",{"2":{"371":1}}],["console",{"2":{"255":1,"304":1,"319":1,"325":5,"326":7,"332":1,"333":1,"349":1,"370":2,"377":2,"424":1,"446":2}}],["constructor",{"2":{"304":1,"310":1,"315":1}}],["constant",{"2":{"226":2}}],["const",{"2":{"55":4,"83":2,"93":2,"95":1,"112":2,"113":1,"122":3,"128":2,"129":2,"131":1,"177":1,"179":1,"217":1,"223":1,"226":2,"234":1,"237":1,"240":1,"252":1,"255":3,"258":2,"263":3,"277":1,"278":4,"306":1,"310":1,"312":1,"313":2,"315":1,"319":1,"321":1,"322":1,"326":3,"334":1,"338":2,"339":2,"342":1,"343":2,"344":1,"345":1,"346":1,"347":1,"349":5,"359":1,"365":1,"370":1,"373":1,"406":1,"407":1,"409":1,"410":1,"412":2,"414":1,"415":2,"416":1,"417":1,"420":1,"421":1,"433":2,"434":1,"435":2,"436":1,"438":3,"439":5,"446":1,"450":1,"461":1,"463":1,"505":1,"520":1,"543":1,"545":2,"546":2,"547":1,"572":2}}],["conventions",{"0":{"235":1},"1":{"236":1,"237":1,"238":1,"239":1,"240":1}}],["convention",{"2":{"226":1}}],["convert",{"2":{"100":1}}],["contributors",{"2":{"441":1}}],["contributing",{"2":{"441":1}}],["controller",{"2":{"441":1,"450":3,"482":2}}],["control",{"0":{"466":1},"2":{"123":1,"125":4,"466":3,"478":1,"498":1}}],["continuous",{"2":{"401":2,"476":3}}],["continue",{"2":{"121":1}}],["container",{"2":{"217":6,"488":1,"543":2}}],["content=",{"2":{"586":11}}],["contentlayer",{"2":{"441":10}}],["contents",{"2":{"424":1}}],["content>",{"2":{"257":1}}],["content",{"2":{"56":1,"216":1,"257":2,"546":1}}],["co",{"2":{"44":3,"55":1,"56":3}}],["commits",{"2":{"505":2,"508":2}}],["commitlint",{"2":{"441":4}}],["commit",{"2":{"401":1,"471":1,"472":3,"474":1}}],["common",{"2":{"374":1}}],["commands",{"2":{"441":1}}],["commandinvoker",{"2":{"317":1}}],["command",{"0":{"316":1,"317":1},"1":{"317":1},"2":{"208":1,"283":1,"297":1,"317":4,"335":1,"336":1,"338":4,"339":2,"340":1}}],["commerce",{"2":{"12":2,"16":1,"62":1,"63":1,"77":1,"80":1}}],["compile",{"2":{"441":1}}],["compileroptions",{"2":{"440":1}}],["compare",{"2":{"441":6}}],["completed",{"2":{"264":2}}],["completion",{"2":{"208":1,"441":1}}],["computer",{"2":{"166":1}}],["computed",{"2":{"96":1,"217":7,"226":1,"263":4,"412":1,"415":3,"435":2,"438":3}}],["component>",{"2":{"234":1,"259":1}}],["components",{"0":{"177":1,"179":1,"342":1,"347":1,"480":1},"1":{"481":1},"2":{"114":1,"210":1,"214":5,"216":3,"226":1,"234":1,"257":1,"362":2,"365":2,"427":1,"428":1,"429":3,"431":1,"440":1,"441":1,"448":5,"449":2,"456":1,"461":1,"462":1,"481":1,"531":2,"547":1}}],["component",{"0":{"259":1,"365":1,"513":1,"529":1},"1":{"530":1,"531":1,"532":1},"2":{"106":3,"129":4,"234":2,"251":3,"259":3,"263":1,"359":3,"363":3,"365":1,"406":3,"417":1,"421":1,"433":4,"441":7,"450":3,"461":1,"462":1,"481":2,"513":1,"515":2}}],["compose",{"2":{"441":1}}],["composer",{"2":{"441":2}}],["composables",{"0":{"258":1},"1":{"259":1},"2":{"95":1,"112":2,"122":1,"226":1,"258":1,"427":1,"428":1,"431":1,"434":1,"436":1,"448":2,"449":1,"450":1,"543":1,"547":1,"572":2}}],["composable",{"2":{"34":1,"433":1,"450":9,"482":2,"538":1,"543":1,"553":1,"570":1}}],["composition",{"0":{"226":1,"287":1},"2":{"20":1,"111":1,"127":2,"129":1,"131":1,"133":2,"138":1,"226":10,"258":2,"283":1,"368":2,"411":1,"413":1,"414":1,"415":2,"417":1,"446":3,"450":2,"491":1,"538":1}}],["com",{"2":{"23":3,"75":1,"120":1,"124":1,"125":9,"133":2,"142":1,"143":2,"144":2,"149":3,"156":1,"185":1,"203":2,"208":1,"212":3,"213":1,"214":1,"223":1,"243":1,"263":1,"264":1,"269":1,"270":1,"315":1,"330":1,"353":1,"371":1,"386":1,"387":1,"404":1,"408":1,"424":10,"425":5,"441":2,"452":1,"513":3,"520":2,"530":3,"531":3,"537":1,"545":1,"562":1,"563":1}}],["ds",{"2":{"472":1}}],["dx",{"2":{"454":1,"462":1,"490":1,"501":1}}],["dprint",{"2":{"441":4}}],["dlint",{"2":{"441":4}}],["dynamic",{"2":{"437":1}}],["dt",{"2":{"424":1}}],["dash",{"2":{"546":1}}],["day",{"2":{"442":2,"446":2}}],["dangerfile",{"2":{"441":2}}],["dart",{"2":{"441":6}}],["dark",{"2":{"441":1,"506":1,"520":1,"577":1,"591":1}}],["dapp",{"2":{"377":2}}],["dapps",{"2":{"377":1,"378":1}}],["datalayer",{"2":{"563":3}}],["data>",{"2":{"257":1}}],["data=json",{"2":{"418":1}}],["data=localstorage",{"2":{"418":1}}],["data=",{"2":{"257":1}}],["data`",{"2":{"83":1}}],["database",{"2":{"55":1}}],["data",{"0":{"130":1},"2":{"17":1,"18":2,"19":1,"44":1,"50":3,"51":1,"55":2,"83":5,"92":3,"93":3,"127":1,"130":6,"131":5,"223":2,"226":6,"255":6,"257":3,"315":3,"317":4,"332":2,"333":1,"338":6,"339":7,"340":1,"342":1,"345":6,"347":9,"349":4,"370":1,"372":2,"374":1,"375":1,"413":1,"418":4,"424":2,"440":1,"446":1}}],["dates",{"2":{"505":2}}],["date=`date",{"2":{"424":1}}],["date",{"2":{"0":1,"217":1,"424":7,"441":1,"563":1}}],["db",{"2":{"343":5}}],["dbservice",{"0":{"343":1},"2":{"342":1,"344":3,"346":1}}],["dbnotes",{"0":{"342":1}}],["dbmanager",{"2":{"305":1,"306":3,"307":3,"308":2,"309":4,"310":10,"312":6}}],["döner",{"2":{"184":1}}],["dns",{"0":{"142":2},"1":{"144":2},"2":{"142":6,"153":1,"154":2}}],["doublecount",{"2":{"414":1,"415":2}}],["don",{"0":{"291":1},"2":{"283":1}}],["done",{"2":{"217":5,"218":1}}],["dosignin",{"2":{"370":1}}],["dosubscribe",{"2":{"239":1}}],["dos",{"2":{"216":1}}],["download",{"2":{"213":1}}],["downloads",{"2":{"212":1}}],["docs",{"2":{"354":1,"372":1,"424":1,"425":1}}],["documentscroll",{"2":{"258":2}}],["document",{"2":{"179":1,"229":1,"258":2,"290":1,"341":1,"491":1}}],["dockerignore",{"2":{"441":1}}],["dockerfile",{"2":{"441":2}}],["docker",{"0":{"402":1},"2":{"40":1,"441":2}}],["do",{"0":{"144":1,"215":1,"218":1,"264":1,"265":1,"357":1},"1":{"216":1,"217":1,"218":1},"2":{"207":1,"209":1,"214":1,"215":2,"217":2,"218":1,"219":1,"246":1,"259":1,"263":1,"264":3,"265":1,"267":1,"352":2,"357":1,"362":2}}],["domain",{"2":{"586":1}}],["dom",{"2":{"136":1,"179":2,"229":1,"230":2,"232":1,"290":1,"331":1,"459":2}}],["doe",{"2":{"131":2,"253":1}}],["dropdown",{"2":{"490":1}}],["draw",{"2":{"313":3}}],["drawers",{"0":{"551":1},"1":{"552":1,"553":1}}],["drawer",{"2":{"121":1,"535":1,"542":1,"547":1,"576":1}}],["drilling",{"2":{"255":1,"433":2}}],["drive",{"2":{"123":3}}],["dry",{"0":{"291":1},"2":{"251":1,"258":1,"283":1}}],["diffeditor",{"2":{"441":1}}],["diffdecorationsgutterwidth",{"2":{"441":1}}],["di",{"2":{"407":1}}],["dialyzer",{"2":{"441":1}}],["dialogstyle",{"2":{"441":1}}],["dialog",{"2":{"263":1}}],["diagram",{"0":{"5":1}}],["dirs",{"2":{"424":1}}],["dir=`echo",{"2":{"424":2}}],["dir=your",{"2":{"424":1}}],["dir=dev",{"2":{"424":1}}],["dir=",{"2":{"424":2}}],["dir",{"2":{"424":24,"588":1}}],["dirname",{"2":{"214":1,"440":1}}],["direction",{"2":{"189":2,"543":2}}],["directives",{"2":{"233":1}}],["directive",{"2":{"129":1}}],["directory",{"0":{"365":1},"2":{"121":1,"363":3,"364":1}}],["disabled=",{"2":{"417":1}}],["discord",{"2":{"354":1}}],["dispatch",{"2":{"424":2}}],["dispatcher",{"0":{"336":1},"2":{"315":4,"334":1,"335":1,"336":1,"337":1}}],["displaylanguage",{"2":{"441":1}}],["display",{"2":{"177":1,"189":2,"216":1,"217":1,"229":1,"273":1,"275":1,"279":1,"505":2,"543":1,"588":1}}],["distributedfooter",{"0":{"559":1}}],["dist",{"2":{"144":1,"151":1,"424":2,"437":1,"441":1,"472":2,"511":2,"513":3,"520":2,"524":3,"528":2,"530":3,"531":3}}],["divider",{"2":{"591":1}}],["div>",{"2":{"114":1,"177":2,"179":2,"216":1,"217":10,"223":1,"226":2,"229":1,"257":5,"263":2,"322":1,"342":3,"347":4,"362":2,"365":3,"406":2,"410":2,"412":2,"433":6,"434":1,"543":4,"572":2}}],["div",{"2":{"114":2,"178":1,"179":4,"216":3,"217":12,"223":3,"229":2,"257":4,"263":2,"322":1,"342":1,"362":2,"365":1,"434":2,"438":1,"474":5,"520":1,"543":4}}],["d",{"0":{"92":1},"2":{"56":1,"92":1,"147":1,"371":1,"424":1,"441":16,"456":1,"460":2,"465":1,"473":1}}],["demo",{"0":{"517":1,"521":1,"532":1},"2":{"517":1,"521":1,"532":1}}],["details",{"2":{"488":1}}],["debounce",{"2":{"484":1}}],["debian",{"2":{"469":1}}],["debuganyway",{"2":{"441":1}}],["debug",{"2":{"441":1,"472":4}}],["deno",{"2":{"441":2}}],["deep",{"2":{"438":1}}],["decrement",{"2":{"414":1,"415":2,"417":1}}],["decoder",{"2":{"371":1}}],["decorator=",{"2":{"420":1}}],["decorator",{"0":{"320":1,"321":1,"322":1},"1":{"321":1,"322":1},"2":{"283":1,"298":1,"322":1,"326":1,"335":1,"419":1,"420":2,"422":1}}],["dexie",{"2":{"341":2,"343":5}}],["dexiejs",{"0":{"341":1},"1":{"342":1,"343":1,"344":1,"345":1,"346":1,"347":1},"2":{"341":2}}],["dexiedb",{"2":{"323":1}}],["deposit",{"2":{"570":1}}],["deployment",{"0":{"561":1},"2":{"476":1,"561":2}}],["deploy",{"2":{"424":16,"561":2,"576":1}}],["deprecated",{"2":{"325":1,"450":1}}],["dependencies",{"2":{"311":3,"424":2,"573":1}}],["dependency2",{"2":{"312":1}}],["dependency1",{"2":{"312":1}}],["dependencyservice",{"2":{"311":2,"312":6}}],["dependency",{"0":{"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1},"1":{"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1},"2":{"283":1,"296":1,"310":1,"311":2,"312":2}}],["degrees",{"2":{"319":6}}],["delivery",{"2":{"401":1,"476":1}}],["delegate",{"0":{"335":1},"2":{"329":1,"334":1,"335":3,"337":1,"351":1}}],["deletenote",{"2":{"342":3,"343":2}}],["delete",{"2":{"55":1,"56":1,"112":1,"248":1,"338":1,"343":1,"344":1,"369":1,"435":1,"446":1}}],["delay",{"2":{"252":2}}],["de",{"2":{"175":1}}],["definition",{"2":{"457":1}}],["define",{"2":{"463":1}}],["defined",{"2":{"457":2}}],["defineasynccomponent",{"2":{"252":7}}],["defineconfig",{"2":{"214":1,"279":2,"440":1,"460":1,"463":2,"562":1}}],["defineemits",{"2":{"132":1,"253":3,"254":2}}],["defineprops",{"2":{"132":1,"177":1,"253":4,"254":2,"263":1,"321":1,"322":1,"362":1,"438":1}}],["definestore",{"2":{"414":3,"415":3}}],["defines",{"2":{"100":1}}],["defaultopentab",{"2":{"505":1}}],["defaultoptions",{"2":{"505":1,"511":1,"524":1,"528":1}}],["defaultformatter",{"2":{"441":4}}],["defaultlayout",{"2":{"427":1,"429":1,"448":2}}],["defaults",{"2":{"345":1,"374":1}}],["default",{"0":{"149":1},"2":{"122":1,"130":1,"214":1,"226":2,"253":3,"257":1,"263":4,"279":1,"303":1,"304":1,"306":1,"307":1,"308":1,"311":1,"338":1,"340":1,"343":1,"345":1,"359":1,"365":2,"409":1,"412":1,"424":2,"438":6,"440":1,"441":2,"460":1,"463":2,"546":1,"562":1}}],["devdependencies",{"2":{"440":1,"441":1}}],["devoptions",{"2":{"279":1}}],["developit",{"2":{"408":1}}],["developer",{"2":{"278":1,"334":1,"372":1,"418":1,"454":1,"501":1}}],["development",{"2":{"67":1,"431":1,"448":1,"588":1}}],["dev",{"2":{"75":1,"121":1,"125":1,"209":1,"210":1,"212":1,"214":2,"217":1,"279":1,"424":10,"425":2,"440":1,"474":5,"492":1,"536":1,"537":1,"588":1}}],["devtoolsformatters",{"2":{"446":3}}],["devtools",{"2":{"23":1,"124":1,"446":2,"450":4,"573":1}}],["designer",{"2":{"441":2}}],["designing",{"2":{"166":1}}],["design",{"0":{"381":1,"430":1},"2":{"156":1,"184":1,"211":2,"212":1,"243":1,"263":1,"264":1,"269":1,"330":1,"353":1,"382":1,"386":1,"404":1,"428":1,"430":1,"439":1,"448":3,"452":1,"491":2,"502":1}}],["describe",{"2":{"457":3,"461":2,"462":2,"463":1}}],["description",{"2":{"18":1,"19":1,"144":3,"275":1,"424":1,"586":3,"588":1}}],["desc",{"2":{"44":2,"50":2,"83":1,"505":1}}],["desktop",{"2":{"20":1,"104":1,"164":1,"189":2,"280":1,"543":3,"552":1,"580":2,"582":1}}],["ppa",{"2":{"469":3}}],["python",{"2":{"491":1,"492":1}}],["pyproject",{"2":{"441":2}}],["pyrightconfig",{"2":{"441":2}}],["psalm",{"2":{"441":1}}],["pm2",{"2":{"441":4}}],["pm",{"2":{"441":1}}],["px`",{"2":{"438":4}}],["pdm",{"2":{"441":2}}],["pdf",{"2":{"437":1,"441":1}}],["pdgaraguso",{"2":{"387":1}}],["pwd",{"2":{"424":1}}],["pwas",{"2":{"378":1}}],["pwa",{"0":{"270":1,"271":1,"279":1,"280":1,"492":1,"587":1},"1":{"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"588":1,"589":1},"2":{"43":1,"79":1,"121":1,"139":2,"152":1,"221":1,"268":5,"270":15,"272":1,"275":2,"277":8,"278":5,"279":5,"280":3,"281":3,"282":4,"382":1,"394":1,"492":12,"501":1,"535":2,"540":2,"542":1,"576":1}}],["pnp",{"2":{"441":2}}],["pnpmyarnnpm",{"2":{"510":1,"523":1,"527":1}}],["pnpm",{"2":{"54":1,"121":3,"424":12,"440":2,"441":6,"472":1,"535":3,"536":2,"537":2,"540":1}}],["png`",{"2":{"437":1}}],["png",{"2":{"279":8,"437":3,"439":3,"547":1}}],["p>",{"2":{"277":2,"342":2}}],["p",{"2":{"277":2,"362":4,"424":1,"474":2}}],["pipelines",{"2":{"441":2}}],["picture",{"2":{"228":3}}],["pinia",{"0":{"413":1,"417":1},"1":{"414":1,"415":1,"416":1,"417":1},"2":{"20":1,"113":1,"127":1,"135":2,"383":1,"384":1,"395":1,"403":1,"412":1,"413":6,"414":3,"415":2,"416":2,"417":12,"421":1,"450":14}}],["pending",{"2":{"217":10,"218":1}}],["persistentsessionreviveprocess",{"2":{"441":1}}],["person=",{"2":{"132":1}}],["person",{"2":{"131":5,"132":1,"236":1,"238":1}}],["pereditorgroup",{"2":{"441":1}}],["performance",{"2":{"270":1}}],["permissions",{"2":{"424":1}}],["permission",{"2":{"123":1}}],["pug",{"2":{"446":1}}],["pugtools",{"2":{"441":1}}],["puppeteer",{"2":{"441":10}}],["pubspec",{"2":{"441":3}}],["pubxml",{"2":{"441":2}}],["pub",{"2":{"314":1,"318":1,"362":2}}],["publishing",{"2":{"121":1,"160":1,"535":1}}],["public",{"2":{"55":1,"58":2,"118":1,"124":1,"134":1,"210":1,"211":1,"212":1,"213":1,"437":4,"515":1}}],["put",{"2":{"278":1,"344":1,"369":2}}],["purple",{"2":{"225":1,"322":1}}],["pure",{"2":{"225":1}}],["push",{"0":{"366":1},"2":{"217":1,"270":3,"315":1,"366":4,"367":1,"401":1,"424":3,"467":1,"475":2,"476":1,"482":1,"563":1}}],["pulls",{"2":{"505":3}}],["pullapprove",{"2":{"441":2}}],["pull",{"2":{"151":1,"467":1,"475":1,"508":2}}],["plugin",{"2":{"263":4,"279":3,"440":2,"441":1,"492":2,"549":1}}],["plugins",{"2":{"214":3,"261":2,"263":5,"264":1,"279":1,"360":1,"427":1,"428":1,"429":1,"440":1,"448":3,"460":1}}],["plus",{"2":{"217":1}}],["playground",{"2":{"441":1}}],["playwright",{"2":{"441":10}}],["player",{"2":{"203":1}}],["placeholder=",{"2":{"217":1,"342":2}}],["placeholder",{"2":{"124":1}}],["please",{"2":{"121":1,"441":1}}],["pba",{"2":{"123":1}}],["phantom",{"2":{"377":1}}],["photoshop",{"2":{"354":1}}],["photo",{"2":{"123":1}}],["phpcs",{"2":{"441":2}}],["phpunit",{"2":{"441":1}}],["php",{"2":{"62":1,"124":1,"441":2,"491":1,"492":2}}],["pokemonmodel",{"2":{"430":1,"448":1}}],["pokemonservice",{"2":{"430":1,"448":1}}],["pokemonstatswidget",{"2":{"430":1,"448":1}}],["pokemonstore",{"2":{"429":1,"448":1}}],["pokemontests",{"2":{"429":1,"448":1}}],["pokemonthumbnail",{"2":{"429":1,"448":1}}],["pokemon",{"2":{"429":1,"430":2,"448":3}}],["pokemondetailpage",{"2":{"429":1,"430":1,"448":2}}],["pokemondetailtemplate",{"2":{"429":1,"448":1}}],["pokemondetail",{"2":{"427":1,"448":1}}],["pokemoncard",{"2":{"427":1,"429":1,"448":2}}],["pokemonlisttemplate",{"2":{"429":1,"448":1}}],["pokemonlist",{"2":{"427":1,"430":1,"448":2}}],["polygon",{"2":{"377":1}}],["policy",{"2":{"123":1}}],["policies",{"2":{"59":1}}],["port",{"2":{"349":4,"470":1}}],["portrait",{"2":{"275":1}}],["pouchdb",{"2":{"341":1}}],["pointer",{"2":{"217":1}}],["position",{"2":{"114":1}}],["postmessage",{"2":{"332":2,"333":1,"334":1,"338":1,"339":1}}],["postman",{"2":{"43":2,"125":1,"441":1}}],["posts",{"2":{"133":1}}],["postcssrc",{"2":{"441":10}}],["postcss",{"2":{"89":2,"441":10}}],["postwoman",{"2":{"43":1}}],["postgresql",{"2":{"124":1}}],["postgrest",{"2":{"56":2}}],["postgres",{"2":{"40":2,"51":1,"56":1}}],["post",{"2":{"0":3,"56":1,"344":3,"345":2,"346":1,"347":2,"349":3,"369":2,"370":1,"374":1,"375":2}}],["populus",{"2":{"96":1}}],["pablo",{"2":{"371":1,"380":1}}],["payload=",{"2":{"339":1,"345":2}}],["payload",{"2":{"338":7,"339":3,"345":4,"371":4}}],["pascal",{"2":{"441":1}}],["pascalcase",{"2":{"216":2,"238":1}}],["password",{"2":{"370":3}}],["passingpropsupward>",{"2":{"257":1}}],["passingpropsupward",{"2":{"257":2}}],["paddingtop",{"2":{"505":1}}],["padding",{"2":{"216":1,"217":7,"349":1,"362":1}}],["patterns",{"0":{"381":1,"399":1},"2":{"156":1,"243":1,"263":1,"264":1,"269":1,"330":1,"353":1,"382":1,"386":1,"404":1,"441":1,"452":1,"491":2,"502":1}}],["paths",{"2":{"440":1}}],["path",{"2":{"106":3,"214":4,"359":3,"363":3,"365":1,"366":1,"433":4,"438":1,"440":3}}],["packtpub",{"2":{"185":1}}],["packtpublishing",{"2":{"156":1,"243":1,"263":1,"264":1,"269":1,"330":1,"353":1,"386":1,"404":1,"452":1}}],["packt",{"2":{"159":2,"160":1,"161":1,"185":1,"186":2,"387":1}}],["packages",{"2":{"441":1}}],["package",{"0":{"5":1},"2":{"104":1,"208":1,"210":2,"315":1,"348":1,"440":1,"441":7,"456":2,"464":1,"465":1,"538":1,"573":1}}],["parallax",{"2":{"518":1}}],["parameters",{"2":{"366":1}}],["params",{"2":{"122":2,"345":1,"362":4,"365":1,"366":1,"368":2,"546":1}}],["parts",{"2":{"505":1}}],["parentbasic",{"0":{"406":1}}],["parent",{"2":{"254":1,"331":1}}],["parse",{"2":{"113":1,"342":1,"343":1,"418":1}}],["pagepokemondetail",{"2":{"428":1,"448":1}}],["pagehome",{"2":{"428":1,"448":1}}],["pagespeed",{"2":{"492":2}}],["pages",{"0":{"560":1},"1":{"561":1,"562":1},"2":{"121":3,"401":1,"424":11,"425":3,"428":1,"430":2,"448":3,"491":1,"535":1,"561":6,"576":2}}],["page",{"2":{"105":2,"125":1,"182":2,"492":1,"505":1}}],["panel",{"0":{"31":1}}],["pr",{"2":{"500":1}}],["practices",{"0":{"381":1},"2":{"156":1,"243":1,"263":1,"264":1,"269":1,"330":1,"353":1,"386":1,"404":1,"452":1,"491":2,"502":1}}],["primevue",{"2":{"442":1}}],["print",{"2":{"446":1}}],["printwidth",{"2":{"441":1}}],["printf",{"2":{"424":1}}],["printpage",{"2":{"233":3}}],["principle",{"0":{"288":1},"2":{"292":1}}],["privacy",{"0":{"197":1}}],["private",{"2":{"145":1,"424":5,"431":1,"450":1,"505":1,"515":1}}],["price",{"2":{"18":1,"83":1,"492":1}}],["procfile",{"2":{"441":2}}],["processes",{"2":{"430":1,"448":1}}],["processmessage",{"2":{"338":4}}],["process",{"2":{"331":1}}],["processqueue",{"2":{"239":1}}],["proceed",{"2":{"121":1}}],["proj",{"2":{"441":2}}],["projectname",{"2":{"535":1}}],["projects",{"2":{"305":2,"306":3,"307":4,"308":3,"309":4,"310":9,"362":1}}],["projectservice",{"2":{"240":1}}],["projectservice=new",{"2":{"240":1}}],["project",{"2":{"121":2,"359":4,"362":1,"424":5,"441":1,"535":5,"536":1,"540":2}}],["proof",{"2":{"427":1,"448":1}}],["prod",{"2":{"424":5,"513":1,"530":1,"531":1}}],["production",{"2":{"440":1}}],["productid",{"2":{"93":1,"106":1,"112":6,"436":1}}],["product>",{"2":{"93":2}}],["productcategoryview",{"2":{"105":2,"106":2}}],["productcategory",{"2":{"92":2}}],["productcard",{"2":{"83":1,"117":1}}],["productview",{"0":{"84":1,"86":1},"1":{"85":1,"86":1},"2":{"105":2,"106":1}}],["products",{"0":{"49":1,"83":1},"2":{"41":2,"44":2,"46":1,"50":1,"51":1,"55":3,"56":3,"83":5,"93":3,"100":1,"104":1,"105":1,"112":2,"118":1,"122":3,"436":1}}],["product",{"0":{"50":1},"2":{"16":1,"17":1,"44":1,"55":1,"59":1,"83":4,"92":2,"93":4,"100":2,"106":3,"143":1,"436":2}}],["proxies",{"0":{"419":1},"1":{"420":1,"421":1}}],["proxy",{"0":{"318":1,"319":1},"1":{"319":1},"2":{"125":1,"131":1,"133":1,"283":1,"298":1,"318":1,"319":3,"320":2,"335":1,"419":1,"420":3,"446":2,"482":1}}],["provision",{"2":{"255":5}}],["provider",{"2":{"371":1}}],["provide",{"0":{"255":1},"2":{"254":1,"255":8,"263":1,"311":3,"312":4,"407":2,"431":1,"433":3,"450":2}}],["profile",{"2":{"228":3,"255":1}}],["prompt",{"0":{"277":1},"2":{"208":1,"276":1,"277":6}}],["promised",{"2":{"328":1}}],["promises",{"2":{"283":1,"299":1,"325":1}}],["promise",{"0":{"326":1},"2":{"93":1,"249":1,"252":1,"263":1,"326":9,"338":3,"339":2,"340":2,"343":3,"345":2,"459":2,"545":1}}],["progressive",{"2":{"270":1,"280":1,"382":1,"492":1}}],["progress",{"0":{"176":1},"1":{"177":1},"2":{"176":1,"264":2}}],["protocol",{"2":{"142":1,"151":2,"152":1}}],["problem",{"0":{"101":1},"2":{"101":1,"492":1}}],["prop",{"2":{"132":2,"254":1,"263":1,"362":2,"406":1,"420":12,"433":2}}],["property=",{"2":{"586":7}}],["properties",{"2":{"368":1}}],["proper",{"2":{"100":1}}],["props",{"0":{"132":1},"2":{"93":1,"127":1,"132":3,"226":1,"253":1,"254":2,"255":2,"257":1,"263":1,"359":2,"362":1,"363":2,"365":1,"405":2,"420":6,"436":1,"438":11,"454":2,"455":1,"461":3}}],["prerenderer",{"2":{"492":1}}],["prettier",{"2":{"441":14}}],["pretty",{"2":{"359":1}}],["pre>",{"2":{"412":2}}],["pre",{"2":{"325":14,"326":7}}],["preventdefault",{"2":{"277":1}}],["preview",{"2":{"210":1,"441":1,"456":2}}],["press",{"2":{"191":2}}],["prestashop",{"2":{"41":1}}],["preferredtagnamecase",{"2":{"441":1}}],["prefer",{"2":{"56":1,"279":1}}],["ядро",{"2":{"483":2}}],["ядра",{"2":{"133":1,"467":2}}],["ящики",{"2":{"289":1}}],["ячеек",{"2":{"286":1}}],["ярким",{"2":{"369":1,"418":1}}],["яркий",{"2":{"289":1}}],["ярких",{"2":{"170":1}}],["ярлыков",{"2":{"186":1}}],["ярлыка",{"2":{"172":1,"275":1}}],["языком",{"2":{"287":1,"331":1}}],["языков",{"0":{"488":1},"2":{"211":1,"222":1,"302":1,"304":1,"446":1,"483":1,"570":1}}],["языке",{"2":{"124":2,"157":1,"164":1,"171":1,"212":1,"226":1,"283":1,"385":1,"491":1}}],["языках",{"2":{"288":2,"432":1,"482":1,"483":1}}],["языками",{"2":{"225":1,"290":1}}],["языка",{"2":{"68":1,"125":1,"157":1,"211":1,"287":1,"295":1,"446":1,"457":1,"491":1,"570":1}}],["язык",{"0":{"381":1},"2":{"68":2,"126":1,"155":1,"221":2,"240":1,"274":1,"287":1,"399":1,"450":1,"491":2}}],["явная",{"2":{"291":1}}],["явным",{"2":{"122":1}}],["явные",{"2":{"56":1}}],["явного",{"2":{"309":1}}],["явное",{"2":{"265":1}}],["явном",{"2":{"225":1}}],["явно",{"2":{"114":1,"196":1,"210":1,"226":1,"234":1,"538":1}}],["явен",{"2":{"114":1}}],["являющееся",{"2":{"173":2}}],["являются",{"2":{"14":1,"124":1,"129":1,"132":1,"160":1,"164":2,"166":1,"178":1,"190":1,"195":1,"208":1,"211":1,"235":1,"240":1,"251":1,"270":1,"278":1,"285":1,"290":1,"293":1,"301":1,"303":1,"319":1,"325":1,"331":1,"354":2,"368":1,"369":1,"370":3,"374":1,"377":3,"390":1,"405":1,"414":2,"418":2,"433":1,"446":1,"451":1,"457":1,"533":1}}],["является",{"0":{"130":1},"2":{"41":1,"43":1,"124":1,"127":1,"130":1,"131":1,"133":1,"142":1,"145":1,"151":1,"152":2,"158":1,"164":1,"165":1,"172":1,"175":1,"178":2,"179":1,"182":1,"186":1,"189":1,"190":3,"194":1,"202":2,"205":1,"207":1,"209":1,"210":3,"213":2,"214":2,"218":1,"220":2,"222":1,"223":1,"225":3,"226":4,"228":1,"242":1,"243":1,"246":1,"248":1,"249":1,"252":1,"253":1,"254":3,"255":3,"264":3,"268":1,"272":1,"275":1,"277":1,"278":2,"280":1,"283":1,"287":1,"288":1,"289":1,"291":1,"292":1,"299":1,"303":1,"307":1,"314":1,"315":1,"318":2,"319":2,"323":3,"324":2,"325":1,"326":1,"331":3,"336":1,"338":1,"340":1,"342":1,"344":2,"345":1,"354":1,"357":1,"359":1,"362":1,"364":1,"365":1,"369":2,"370":1,"371":3,"375":4,"377":3,"405":2,"411":2,"412":2,"413":1,"417":2,"418":4,"420":4,"433":1,"450":2,"451":1,"454":2,"455":1,"457":3,"459":1,"460":1,"466":2,"467":2,"468":1,"471":2,"472":2,"482":2,"483":1,"492":1,"546":1}}],["являться",{"2":{"6":1,"345":1}}],["я",{"2":{"4":1,"62":2,"96":3,"127":1,"192":1,"208":4,"223":1,"226":2,"234":1,"247":1,"257":1,"263":1,"275":1,"288":1,"290":1,"315":2,"318":1,"319":1,"325":1,"326":2,"345":1,"362":1,"387":1,"407":1,"417":1,"420":1,"431":1,"450":2,"483":2,"491":2}}],["едят",{"2":{"573":1}}],["единицы",{"2":{"453":1}}],["единиц",{"2":{"323":1}}],["единицей",{"2":{"246":1}}],["единую",{"2":{"304":1,"316":1,"335":1}}],["единый",{"2":{"291":1,"412":1,"413":1,"490":1}}],["единая",{"2":{"270":1,"283":1,"286":1,"314":1}}],["единой",{"0":{"288":1},"2":{"288":1,"335":1,"337":1,"411":1}}],["единое",{"2":{"224":1,"289":1,"453":1}}],["единовременно",{"2":{"152":1}}],["единственным",{"2":{"307":1,"349":1}}],["единственный",{"2":{"226":2,"362":1,"417":1}}],["единственные",{"2":{"162":1,"417":1,"418":1}}],["единственному",{"2":{"457":1}}],["единственной",{"2":{"193":1}}],["единственное",{"2":{"62":1,"326":1,"457":1}}],["единственная",{"2":{"178":1,"538":1}}],["ежедневно",{"2":{"422":1}}],["ею",{"2":{"325":1,"405":2}}],["е",{"2":{"141":1,"191":1}}],["еvent",{"2":{"126":1}}],["ему",{"2":{"123":1,"160":1,"172":1,"247":1,"248":1,"315":1,"326":1,"340":1,"362":1,"375":1,"401":1,"450":1,"492":1}}],["ей",{"2":{"62":1,"294":1,"490":1}}],["ее",{"2":{"20":1,"69":1,"96":1,"148":1,"157":1,"167":1,"171":2,"179":1,"201":1,"208":2,"211":2,"215":1,"217":1,"218":1,"222":1,"223":1,"225":2,"226":2,"248":1,"252":1,"254":1,"258":3,"259":2,"265":1,"277":1,"286":1,"290":2,"292":1,"307":1,"309":1,"310":2,"315":1,"324":1,"331":2,"332":1,"339":1,"341":1,"343":2,"350":1,"354":1,"363":1,"373":1,"377":1,"405":1,"406":1,"408":1,"412":1,"414":1,"418":3,"431":1,"448":1,"458":1,"461":1,"462":1,"464":1,"466":1,"474":1,"483":1}}],["её",{"0":{"210":1},"2":{"20":1,"41":1,"56":1,"95":1,"96":2,"98":1,"106":1,"107":2,"117":1,"122":1,"123":2,"228":1,"431":1,"437":1,"446":1,"482":2,"483":2,"484":2,"521":1,"532":1}}],["еще",{"0":{"257":1},"2":{"10":1,"27":1,"41":1,"92":1,"96":2,"142":1,"151":1,"155":1,"157":1,"160":1,"162":1,"175":1,"199":1,"208":1,"209":2,"210":1,"213":2,"214":1,"222":1,"224":1,"233":1,"234":1,"241":1,"247":1,"251":1,"254":1,"255":1,"257":1,"263":1,"264":3,"265":1,"266":1,"276":1,"286":2,"292":1,"293":1,"312":1,"322":1,"331":1,"334":2,"335":1,"339":1,"349":1,"350":1,"354":2,"374":1,"376":3,"441":4,"446":1,"453":1,"456":2,"457":2,"459":1,"463":1,"464":1,"465":1,"472":1,"474":1,"475":1,"482":1,"491":1,"492":3,"570":1}}],["ещё",{"2":{"4":1,"354":1}}],["естественный",{"2":{"355":1}}],["естественным",{"2":{"162":1,"254":1}}],["естественные",{"0":{"162":1}}],["естественных",{"2":{"161":1,"457":1}}],["естественной",{"2":{"161":1}}],["естественном",{"2":{"157":1}}],["естественно",{"2":{"51":1,"121":1,"138":1,"288":1,"424":1,"450":1}}],["есть",{"0":{"503":1},"2":{"9":1,"10":1,"12":1,"13":1,"16":3,"17":2,"23":2,"46":1,"50":1,"51":1,"59":1,"77":1,"88":2,"89":2,"92":1,"95":1,"96":3,"98":1,"99":1,"106":1,"111":3,"114":1,"121":1,"123":3,"124":4,"127":1,"130":1,"131":1,"133":1,"142":2,"144":1,"150":1,"152":1,"166":1,"173":1,"175":1,"176":3,"179":1,"181":1,"190":1,"192":2,"195":1,"209":2,"213":1,"217":4,"218":3,"221":1,"222":4,"225":2,"226":3,"234":1,"242":1,"246":1,"251":1,"252":1,"254":1,"256":1,"257":1,"259":1,"263":1,"264":1,"266":1,"267":1,"270":2,"276":1,"277":2,"278":3,"279":1,"287":2,"290":1,"292":1,"315":1,"316":1,"318":2,"320":3,"322":1,"325":1,"326":4,"331":4,"333":1,"337":1,"354":1,"356":1,"359":1,"360":1,"362":2,"363":1,"365":3,"371":3,"375":1,"377":1,"405":3,"407":2,"409":1,"410":1,"412":3,"413":1,"415":1,"417":1,"418":1,"424":3,"431":2,"439":1,"441":1,"442":2,"443":1,"449":1,"450":4,"456":3,"457":1,"460":2,"462":1,"463":1,"464":1,"466":1,"472":1,"475":1,"482":3,"483":3,"484":1,"490":1,"491":6,"492":3,"508":2,"541":1,"573":2,"574":1}}],["если",{"2":{"3":1,"9":1,"12":2,"20":1,"26":1,"34":1,"36":1,"40":1,"41":1,"59":2,"68":1,"96":3,"100":1,"102":2,"114":2,"118":1,"122":1,"123":5,"124":2,"125":5,"129":1,"133":4,"139":1,"142":1,"143":4,"144":2,"145":1,"147":1,"149":2,"151":1,"152":4,"153":1,"155":1,"158":1,"160":3,"162":2,"164":1,"165":1,"166":1,"167":1,"173":1,"176":1,"178":1,"181":1,"186":1,"192":1,"194":2,"199":1,"203":1,"204":1,"208":1,"209":8,"210":2,"211":3,"212":1,"213":2,"217":2,"218":1,"221":1,"222":1,"224":1,"225":4,"226":2,"228":2,"230":2,"231":1,"234":1,"240":1,"242":2,"246":1,"247":1,"251":2,"252":2,"254":1,"255":1,"257":6,"258":1,"263":1,"270":3,"272":1,"277":2,"278":3,"279":1,"280":1,"281":1,"286":2,"288":1,"290":3,"291":2,"293":2,"300":1,"303":2,"304":1,"307":1,"309":2,"310":2,"311":1,"315":2,"316":1,"317":1,"318":1,"319":1,"320":1,"324":1,"331":8,"332":2,"334":1,"336":1,"340":1,"342":1,"343":1,"344":1,"352":1,"354":1,"356":1,"359":1,"362":3,"364":1,"365":1,"368":2,"370":1,"371":1,"376":3,"377":1,"384":1,"404":1,"407":2,"410":5,"412":3,"413":1,"414":1,"416":1,"417":1,"418":2,"420":2,"421":2,"424":1,"425":1,"431":1,"433":1,"437":2,"439":1,"440":3,"441":1,"446":1,"450":5,"456":1,"457":3,"459":2,"460":1,"463":1,"464":2,"466":1,"468":1,"469":1,"470":3,"471":4,"475":1,"483":2,"484":2,"485":1,"487":1,"490":1,"491":4,"492":2,"538":1,"561":1,"562":2,"573":1,"582":1}}],["его",{"0":{"301":1},"2":{"3":1,"4":1,"16":1,"20":1,"23":2,"25":1,"41":1,"51":1,"59":1,"64":1,"65":1,"68":1,"69":1,"85":1,"88":1,"98":2,"113":1,"114":2,"117":1,"121":1,"123":10,"124":2,"125":1,"129":3,"131":2,"133":1,"142":1,"143":1,"145":1,"148":1,"149":1,"152":2,"155":1,"157":3,"160":2,"165":1,"170":2,"173":1,"174":1,"176":4,"178":1,"179":1,"181":1,"183":1,"185":1,"186":1,"189":1,"191":1,"193":2,"194":1,"195":1,"199":1,"202":1,"204":2,"207":1,"208":2,"209":2,"210":6,"212":1,"213":1,"215":2,"216":2,"217":3,"218":3,"219":1,"222":2,"223":2,"225":1,"226":5,"229":2,"233":1,"234":1,"235":1,"251":2,"252":2,"253":1,"254":1,"255":1,"263":4,"264":2,"266":1,"267":1,"268":1,"270":2,"274":1,"276":1,"277":2,"278":6,"279":1,"281":1,"282":1,"288":1,"290":1,"291":4,"293":1,"304":1,"308":1,"311":1,"312":2,"315":2,"316":1,"318":4,"319":1,"320":4,"321":1,"323":3,"325":2,"326":1,"332":1,"334":1,"335":2,"336":1,"338":1,"339":2,"340":1,"341":2,"342":1,"343":1,"345":2,"349":1,"350":1,"355":1,"356":1,"357":1,"359":1,"361":1,"362":3,"363":1,"365":1,"369":1,"370":2,"371":4,"372":1,"375":2,"376":1,"377":6,"398":1,"405":2,"407":1,"408":1,"411":2,"413":4,"414":3,"415":1,"417":2,"418":2,"419":3,"420":5,"421":2,"423":1,"424":1,"431":1,"433":1,"440":1,"441":2,"450":1,"451":1,"453":1,"454":2,"455":1,"456":1,"460":1,"462":2,"465":1,"466":1,"467":2,"471":3,"474":3,"475":1,"476":1,"482":1,"483":3,"489":1,"490":1,"491":1,"492":7,"501":2,"522":1,"525":1,"542":2,"573":1,"588":1}}],["ie6",{"2":{"490":1}}],["iex",{"2":{"441":1}}],["ie11",{"2":{"439":1}}],["ie",{"2":{"439":1}}],["igzir14e",{"2":{"371":1}}],["ignoredlocales",{"2":{"441":1}}],["ignoretrimwhitespace",{"2":{"441":1}}],["ignorerecommendations",{"2":{"441":1}}],["ignore",{"2":{"121":1,"441":2,"535":1}}],["iat",{"2":{"371":2}}],["i++",{"2":{"315":1,"325":2,"326":1}}],["i>",{"2":{"213":1,"217":3}}],["ico",{"2":{"210":1,"279":1}}],["iconify",{"2":{"439":1,"441":2}}],["icons",{"0":{"439":1},"2":{"273":1,"279":1,"438":2,"439":1,"588":1}}],["iconwithbadge",{"2":{"114":3}}],["iconbadge",{"2":{"114":3}}],["iconbuddy",{"2":{"107":1}}],["iconbutton",{"0":{"88":1}}],["icones",{"2":{"107":1}}],["icon",{"2":{"19":1,"114":2,"212":1,"279":3,"438":1}}],["icann",{"2":{"142":2}}],["ipc",{"2":{"326":1,"332":1}}],["ipv6",{"2":{"142":4}}],["ipv4",{"2":{"142":3}}],["ip",{"2":{"123":1,"142":7}}],["iphone",{"2":{"123":1,"170":1}}],["ipo",{"2":{"63":1}}],["iife",{"2":{"122":1}}],["i",{"2":{"121":1,"213":2,"217":3,"231":4,"315":6,"325":4,"326":2,"441":1,"536":1,"537":1}}],["if=",{"2":{"263":1,"438":1}}],["ifmodule>",{"2":{"147":2}}],["ifmodule",{"2":{"147":2}}],["if",{"0":{"230":2},"2":{"112":1,"217":1,"230":1,"234":1,"252":1,"259":1,"277":1,"278":1,"304":1,"310":1,"315":3,"325":2,"326":2,"338":1,"339":1,"342":1,"345":2,"373":1,"375":2,"414":1,"415":1,"418":1,"420":3,"424":3,"457":1}}],["isdraweropen",{"2":{"547":3}}],["isdarktheme",{"2":{"95":2}}],["isdarkmode",{"2":{"95":1}}],["isn",{"2":{"450":2}}],["isauthenticated",{"2":{"450":1}}],["ist",{"2":{"441":1}}],["issues",{"2":{"506":2,"530":1,"531":1}}],["issuenumberlabel",{"2":{"441":1}}],["issuelist",{"2":{"430":1,"448":1}}],["issued",{"2":{"371":1}}],["is=",{"2":{"234":1}}],["is",{"0":{"259":1},"2":{"121":1,"225":1,"234":1,"252":1,"259":2,"441":1,"446":2,"450":2,"505":1}}],["isinfavourites",{"2":{"112":3}}],["imageresources",{"2":{"439":3}}],["imageraw",{"2":{"437":1}}],["imagenameinvariable",{"2":{"437":1}}],["imageurl",{"2":{"437":1}}],["image",{"2":{"279":3,"437":4,"586":4}}],["images",{"2":{"18":1,"279":4,"424":1,"427":1,"428":1,"429":1,"430":1,"437":3,"439":2,"448":4,"547":1,"586":1,"589":1}}],["imgurl",{"2":{"437":2}}],["img",{"2":{"228":1,"437":6,"438":1}}],["importscript",{"2":{"333":2,"334":1}}],["important",{"2":{"322":1}}],["import",{"2":{"95":1,"112":2,"122":7,"129":3,"131":1,"179":1,"216":1,"226":2,"234":3,"251":2,"252":7,"259":2,"263":5,"279":2,"290":1,"304":1,"309":1,"310":3,"312":3,"322":1,"333":1,"334":1,"342":2,"347":2,"359":2,"360":4,"362":1,"363":3,"365":3,"370":1,"406":2,"410":2,"412":1,"415":2,"416":2,"417":1,"421":1,"434":1,"436":1,"437":3,"438":3,"439":6,"440":3,"441":2,"457":1,"461":2,"462":2,"463":3,"511":3,"520":1,"524":4,"528":3,"543":1,"545":1,"546":6,"547":3,"572":1}}],["i18next",{"0":{"570":1,"573":1},"2":{"446":1,"570":1,"573":3,"574":1}}],["i18n",{"0":{"569":1},"1":{"570":1,"571":1,"572":1,"573":1,"574":1},"2":{"79":1,"105":1,"121":1,"432":1,"441":3,"446":3,"538":1,"540":1,"542":1,"570":2,"572":1,"573":1,"578":2}}],["ios",{"2":{"270":1}}],["io",{"2":{"75":1,"121":1,"214":1,"371":1,"561":1}}],["inplace",{"2":{"441":1}}],["inputevents",{"2":{"462":4}}],["inputevents=wrapper",{"2":{"462":1}}],["inputs",{"2":{"424":5}}],["input",{"2":{"107":1,"169":2,"217":6,"232":2,"237":1,"252":1,"342":1,"347":3,"375":2,"441":1,"461":2,"462":6,"482":1}}],["inrange",{"2":{"414":1,"415":2}}],["inc",{"2":{"588":1}}],["includesource",{"2":{"463":1}}],["includeassets",{"2":{"279":1}}],["increment=",{"2":{"406":3}}],["increment",{"2":{"406":1,"407":4,"414":1,"415":2,"417":3}}],["incrementcounter",{"2":{"406":7,"407":2}}],["invisiblecharacters",{"2":{"441":1}}],["invalid",{"2":{"373":1}}],["invoker",{"2":{"316":1,"317":2}}],["inheritance",{"0":{"287":1},"2":{"283":1}}],["injections",{"2":{"549":1}}],["injection",{"0":{"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1},"1":{"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1},"2":{"283":1,"296":1,"312":2,"549":2}}],["injectregister",{"2":{"279":1}}],["inject",{"0":{"255":1},"2":{"254":1,"255":7,"263":4,"311":2,"312":2,"407":2,"431":1,"433":3,"450":2}}],["instanceof",{"2":{"420":1}}],["instance",{"2":{"304":5}}],["installpwa",{"2":{"277":3}}],["installed",{"2":{"277":5}}],["install",{"0":{"277":1},"2":{"209":1,"260":1,"263":2,"276":1,"277":10,"278":1,"279":1,"341":1,"344":1,"348":1,"356":1,"369":1,"408":1,"413":1,"424":10,"455":1,"456":1,"460":2,"465":1,"469":2,"470":2,"510":1,"523":1,"527":1}}],["insertfinalnewline",{"2":{"441":1}}],["insert",{"2":{"55":1}}],["infinitum",{"2":{"179":1}}],["infinitescroller",{"0":{"179":1}}],["infinite",{"2":{"177":1,"178":1}}],["information",{"2":{"505":2}}],["info",{"2":{"125":3}}],["inlinesuggest",{"2":{"441":1}}],["inline",{"2":{"177":1}}],["in",{"0":{"463":1},"2":{"121":1,"179":1,"217":2,"231":1,"233":1,"234":2,"259":1,"264":2,"342":1,"362":1,"365":1,"414":1,"415":1,"417":3,"439":2,"441":1,"450":1,"456":1,"474":2,"505":1,"518":1,"535":1}}],["ind",{"2":{"441":1}}],["indent",{"2":{"441":1}}],["indexof",{"2":{"315":1}}],["indexeddb",{"0":{"341":1,"418":1},"1":{"342":1,"343":1,"344":1,"345":1,"346":1,"347":1},"2":{"305":2,"323":2,"329":2,"331":1,"335":1,"341":2,"350":1,"418":5}}],["indexedb",{"2":{"277":1}}],["index",{"0":{"92":1,"144":1,"339":1,"344":1,"346":1,"349":1,"359":1,"549":1},"2":{"92":1,"128":1,"134":1,"143":1,"144":1,"145":1,"147":2,"149":4,"210":3,"211":2,"212":1,"213":1,"224":1,"263":5,"272":1,"276":1,"338":2,"348":1,"358":1,"424":2,"427":2,"428":2,"430":2,"448":6,"474":5,"492":2,"513":1,"530":1,"531":1,"546":1,"549":1,"563":1,"586":1,"590":1}}],["individual",{"2":{"255":1}}],["indicating",{"2":{"100":1}}],["intl",{"2":{"442":1,"446":1}}],["integrated",{"2":{"441":5}}],["integration",{"2":{"401":1,"476":1}}],["intel",{"2":{"384":1}}],["intellisense",{"2":{"208":1}}],["inteface",{"2":{"157":1}}],["interval",{"2":{"375":2,"441":1}}],["intersectionobserver",{"2":{"179":3}}],["intersection",{"2":{"178":1,"446":1}}],["interaction",{"2":{"166":1,"373":1}}],["interacting",{"2":{"55":1}}],["internet",{"2":{"142":2,"272":1}}],["interceptors",{"2":{"122":1,"545":1,"546":1}}],["interfaces",{"2":{"368":1,"498":1}}],["interface",{"2":{"92":1,"166":1,"501":1}}],["into",{"2":{"100":1,"122":1}}],["initi18n",{"2":{"572":2}}],["initialset",{"2":{"113":2}}],["init",{"2":{"95":3,"122":1,"348":1,"424":2,"471":1,"546":1}}],["idx",{"2":{"441":1}}],["idb",{"2":{"341":1}}],["id=g",{"2":{"563":1}}],["id=setinterval",{"2":{"375":1}}],["id=await",{"2":{"343":1}}],["id=",{"2":{"223":3,"520":1}}],["id=eq",{"2":{"44":2,"83":2,"93":1}}],["ids",{"2":{"100":2}}],["idea",{"2":{"472":1}}],["ideas",{"2":{"431":1,"448":1}}],["identity",{"2":{"373":1,"374":2}}],["ide",{"0":{"441":1},"2":{"98":1,"207":1,"208":6,"210":2,"219":1,"290":1,"417":1,"441":1,"475":1,"483":1,"501":1}}],["id",{"2":{"3":2,"18":1,"19":1,"44":4,"55":1,"56":3,"83":3,"92":2,"93":2,"106":1,"217":4,"223":1,"231":1,"236":1,"338":9,"339":5,"342":5,"343":6,"359":2,"362":5,"371":1,"372":1,"375":1,"424":2,"435":3,"436":1,"563":1}}],["items",{"2":{"264":1}}],["item",{"2":{"217":5,"264":1,"418":7}}],["it",{"0":{"290":1,"292":1},"2":{"2":1,"68":1,"100":1,"121":2,"283":2,"290":1,"315":1,"450":2,"535":2,"540":1,"588":1}}],["льшая",{"2":{"482":1}}],["лэндинг",{"2":{"357":2,"362":1}}],["лэйаута",{"2":{"542":1,"582":1}}],["лэйаутами",{"2":{"433":1}}],["лэйауте",{"2":{"433":1}}],["лэйаутов",{"2":{"433":1}}],["лэйаут",{"2":{"26":1,"28":1,"216":1,"433":1,"490":1}}],["лёгкое",{"2":{"96":1,"538":1}}],["лайфхак",{"2":{"450":1}}],["ландшафтная",{"2":{"274":1}}],["ландшафте",{"2":{"221":1}}],["лаконичен",{"2":{"252":1,"457":1}}],["лаконичный",{"2":{"96":1}}],["лазить",{"2":{"123":1}}],["лат",{"2":{"96":1}}],["лепту",{"0":{"500":1}}],["лепить",{"2":{"96":1}}],["лечь",{"2":{"492":1}}],["лень",{"2":{"492":1}}],["ленивой",{"2":{"279":1}}],["ленивую",{"2":{"252":1}}],["ленточная",{"2":{"162":1}}],["лет",{"2":{"175":1,"213":1,"446":1}}],["лету",{"2":{"157":1,"354":1}}],["левой",{"2":{"160":1,"190":1}}],["левом",{"2":{"158":1,"164":1,"190":1,"517":1}}],["легче",{"2":{"133":1,"280":1,"430":1,"448":1,"491":1}}],["легким",{"2":{"454":1}}],["легкий",{"2":{"85":1,"491":1}}],["легкая",{"2":{"222":1,"341":1}}],["легкой",{"2":{"226":1,"482":1}}],["легкого",{"2":{"202":1}}],["легко",{"2":{"35":1,"63":1,"122":1,"166":2,"170":1,"178":1,"181":1,"196":1,"211":1,"213":1,"222":1,"291":1,"292":1,"325":1,"326":1,"344":1,"345":1,"362":1,"371":1,"433":1,"456":1,"457":2,"460":1,"462":1,"481":1,"491":1,"538":1,"545":1}}],["лежат",{"2":{"457":1}}],["лежать",{"2":{"118":1}}],["лежащего",{"2":{"401":1}}],["лежащую",{"2":{"354":1}}],["лежит",{"2":{"96":1,"124":1,"158":1,"162":1}}],["лучшем",{"2":{"331":1,"454":1}}],["лучшего",{"2":{"223":1,"404":1}}],["лучшее",{"2":{"157":1,"270":1,"441":1}}],["лучшей",{"2":{"59":1,"288":1,"290":1,"356":1,"541":1}}],["лучше",{"2":{"20":1,"35":1,"59":1,"88":1,"122":1,"133":1,"134":1,"189":1,"209":1,"218":1,"219":1,"226":1,"234":1,"246":1,"252":1,"278":1,"286":1,"288":1,"290":2,"292":1,"309":1,"310":1,"327":1,"354":1,"361":1,"369":1,"371":1,"379":1,"384":1,"403":1,"410":1,"431":1,"433":1,"439":1,"441":1,"448":1,"455":1,"482":1,"487":1,"491":2,"492":1,"573":1}}],["лучшими",{"2":{"491":1}}],["лучшим",{"2":{"369":1,"433":1}}],["лучших",{"2":{"78":1,"207":1,"213":1,"288":1,"293":1,"310":1,"433":1,"491":1,"501":1,"541":2,"542":1}}],["лучший",{"0":{"224":1},"2":{"17":1,"407":1}}],["лучшие",{"0":{"380":1,"433":1},"1":{"381":1,"382":1,"383":1,"384":1,"385":1,"386":1,"387":1,"434":1,"435":1,"436":1},"2":{"9":1,"77":1,"123":1,"218":1,"221":1,"294":1,"462":1,"491":1,"542":1}}],["литерал",{"2":{"303":1,"311":1}}],["литературах",{"2":{"299":1}}],["линтинга",{"2":{"538":1}}],["линтингом",{"2":{"479":1}}],["линтер",{"2":{"240":1,"441":1}}],["линус",{"2":{"467":1}}],["линусом",{"2":{"467":1}}],["линии",{"2":{"184":2}}],["листов",{"2":{"213":1}}],["лицензией",{"2":{"533":1}}],["лицензии",{"2":{"212":1}}],["лица",{"2":{"376":1}}],["лицом",{"2":{"142":1}}],["лишен",{"2":{"376":1}}],["лишающие",{"2":{"205":1}}],["лишь",{"2":{"123":1,"166":1,"190":1,"213":1,"221":1,"224":1,"255":1,"263":1,"270":1,"331":1,"453":1,"461":1}}],["лишние",{"2":{"123":1,"474":1}}],["лимиты",{"2":{"40":1}}],["личное",{"2":{"362":1}}],["личность",{"2":{"196":1,"377":1}}],["личного",{"2":{"36":1,"431":1,"449":1}}],["личным",{"2":{"59":1}}],["личный",{"2":{"29":1,"33":1,"80":1,"123":1}}],["ли",{"2":{"10":1,"26":1,"123":3,"124":1,"142":1,"143":1,"145":1,"154":1,"172":1,"206":1,"220":3,"246":2,"257":1,"267":1,"276":1,"278":1,"304":1,"324":1,"328":3,"407":1,"410":1,"420":2,"433":1,"450":1,"451":1,"464":1,"478":3,"479":1,"491":4,"492":1}}],["либо",{"2":{"3":1,"31":1,"40":1,"50":3,"53":1,"56":1,"59":1,"98":1,"124":1,"160":2,"171":2,"172":1,"174":2,"176":2,"190":2,"198":2,"200":2,"204":1,"208":1,"210":4,"214":1,"252":1,"259":4,"264":1,"277":4,"316":1,"325":1,"331":1,"335":2,"338":2,"345":2,"366":2,"376":1,"377":2,"412":1,"437":3,"440":1,"456":2,"464":1,"484":1,"490":2,"491":1,"492":1,"531":2,"538":1,"541":1,"571":1}}],["ложное",{"2":{"457":1}}],["ложится",{"2":{"39":1}}],["ломают",{"2":{"454":1}}],["ловушки",{"2":{"420":1}}],["ловушку",{"2":{"196":1}}],["лотком",{"2":{"174":1}}],["локали",{"2":{"446":1}}],["локализации",{"2":{"446":3,"570":3}}],["локалей",{"2":{"446":1,"538":1,"570":1,"572":1}}],["локальную",{"2":{"467":1}}],["локальных",{"2":{"441":1,"450":1}}],["локальные",{"0":{"251":1,"418":1},"2":{"467":2}}],["локальными",{"2":{"270":2}}],["локальным",{"2":{"210":1,"270":1,"335":1,"475":1,"483":1}}],["локальный",{"2":{"209":1,"450":1,"471":2,"475":3}}],["локальное",{"2":{"257":1,"354":1}}],["локального",{"2":{"149":1,"152":1,"251":1,"354":1,"418":1}}],["локальной",{"2":{"143":1,"170":1,"174":1,"270":3,"323":1,"340":1,"350":1,"418":1,"475":1}}],["локальному",{"2":{"341":1,"421":1}}],["локальном",{"2":{"143":1,"148":1,"151":1}}],["локально",{"2":{"120":1,"210":2,"221":1,"251":1,"418":1,"475":2,"492":1,"508":1}}],["локация",{"2":{"4":1}}],["логарифмической",{"2":{"165":1}}],["лого",{"2":{"107":1}}],["логотипа",{"2":{"104":1,"190":1}}],["логотип",{"2":{"29":1,"190":2}}],["логирования",{"2":{"320":1}}],["логично",{"2":{"450":1}}],["логичный",{"2":{"355":1,"446":1}}],["логичней",{"2":{"114":1}}],["логическому",{"2":{"492":1}}],["логическом",{"2":{"335":1}}],["логической",{"2":{"290":1}}],["логические",{"2":{"431":1,"449":1,"454":1}}],["логически",{"2":{"377":1,"486":1}}],["логический",{"2":{"293":1}}],["логических",{"2":{"68":1}}],["логикe",{"2":{"258":1}}],["логикой",{"2":{"234":1,"264":2,"288":1,"290":1,"316":1,"317":1,"375":1,"430":1,"448":1,"483":1}}],["логике",{"2":{"98":1,"217":1,"277":1,"291":1,"326":1}}],["логику",{"2":{"40":1,"93":1,"124":2,"217":2,"226":1,"252":1,"263":1,"264":2,"278":1,"291":2,"293":1,"317":1,"318":1,"319":1,"320":1,"325":1,"413":1,"450":2,"457":2,"462":1,"482":3,"490":2,"508":1}}],["логика",{"2":{"34":1,"96":1,"124":1,"218":1,"257":1,"377":1,"450":4,"482":1}}],["логики",{"2":{"6":1,"83":1,"96":1,"258":4,"263":1,"264":3,"291":1,"370":3,"450":3,"454":1,"457":1,"545":1}}],["логине",{"2":{"123":1}}],["логинится",{"2":{"123":1}}],["логина",{"2":{"107":1,"123":1,"479":1,"579":1}}],["логин",{"2":{"33":1,"123":4}}],["люксовый",{"2":{"492":1}}],["людям",{"2":{"481":1}}],["людей",{"2":{"204":1}}],["люди",{"2":{"2":1,"160":1,"475":1}}],["любезно",{"2":{"456":1}}],["любимую",{"2":{"122":1}}],["любая",{"2":{"111":1,"274":1,"450":1,"462":1,"490":1}}],["любую",{"2":{"95":1,"211":1,"252":1,"286":1,"371":1,"412":1,"436":1}}],["любые",{"2":{"335":1,"343":1,"372":1,"373":1}}],["любым",{"2":{"142":1,"178":1,"331":1,"334":1,"412":1,"418":2,"420":1,"424":1}}],["любыми",{"2":{"63":1}}],["любых",{"2":{"2":1,"192":1,"310":1}}],["любого",{"2":{"20":1,"125":1,"141":1,"249":1,"253":1,"263":2,"319":1,"337":1,"349":2,"356":1,"364":1,"376":1,"377":1,"471":1,"500":1,"515":1}}],["любом",{"2":{"12":1,"123":1,"164":1,"172":1,"211":1,"213":1,"268":1,"272":1,"320":2,"326":1,"362":1,"407":1,"450":1,"487":1,"492":1,"524":1}}],["любому",{"2":{"2":1,"131":1,"142":1,"175":1,"407":1,"418":1}}],["любой",{"2":{"2":1,"96":1,"125":1,"132":1,"145":1,"176":2,"215":1,"222":1,"224":1,"255":2,"260":1,"308":1,"332":1,"336":1,"354":1,"364":1,"369":1,"377":1,"408":1,"411":1,"432":1,"437":1,"450":1,"475":1,"481":1,"490":1,"515":1,"517":1}}],["любое",{"2":{"2":1,"123":1,"190":1,"209":1,"411":1,"417":1,"458":1}}],["vwa",{"2":{"582":1,"591":11}}],["vp",{"2":{"525":9}}],["vps",{"2":{"145":4,"148":2,"151":1,"154":1}}],["vetur",{"2":{"441":2}}],["verdana",{"2":{"506":1}}],["vercel",{"2":{"425":1,"441":2,"579":1}}],["vertical",{"2":{"177":1,"505":1}}],["versionrc",{"2":{"441":2}}],["versions",{"2":{"441":3}}],["version",{"2":{"121":1,"343":1,"384":1,"424":5,"441":3,"471":1,"589":1}}],["vbproj",{"2":{"441":1}}],["vb",{"2":{"441":6}}],["v4значительно",{"2":{"424":1}}],["v4",{"2":{"424":4}}],["v2",{"2":{"424":3}}],["validate",{"2":{"441":1}}],["validateotp",{"2":{"375":1}}],["validators",{"2":{"427":1,"428":1,"429":1,"448":3}}],["values",{"2":{"457":1}}],["value>=0",{"2":{"415":2}}],["value>0",{"2":{"375":1}}],["value++",{"2":{"406":1,"415":1}}],["value=value",{"2":{"410":1}}],["value=true",{"2":{"375":1}}],["value=result",{"2":{"375":1}}],["value=reply",{"2":{"347":1}}],["value=data",{"2":{"342":1}}],["value=note",{"2":{"342":1}}],["value=",{"2":{"342":2,"347":3}}],["value=window",{"2":{"258":1}}],["valueof",{"2":{"217":1}}],["value",{"2":{"93":1,"100":2,"112":5,"122":2,"131":3,"179":5,"217":9,"226":2,"252":1,"253":2,"255":1,"277":6,"319":4,"325":8,"326":6,"342":5,"347":2,"366":2,"370":2,"371":1,"375":3,"410":1,"415":2,"420":8,"436":1,"441":1,"446":1,"450":1,"457":2,"462":1,"482":2,"545":1,"572":1}}],["vars",{"2":{"591":1}}],["var",{"2":{"424":4,"525":9}}],["varb",{"2":{"254":1}}],["vara",{"2":{"254":1}}],["variable",{"2":{"226":1,"254":1}}],["variablename",{"2":{"226":1}}],["volar",{"2":{"208":1,"441":4}}],["vlc",{"2":{"203":1}}],["v3",{"2":{"133":1,"137":1,"424":4}}],["v",{"0":{"132":1,"228":1,"229":1,"230":3,"231":1,"232":1,"233":1,"253":1},"2":{"127":1,"132":5,"170":1,"179":2,"217":11,"227":1,"228":1,"229":2,"230":4,"231":1,"232":1,"233":2,"234":3,"254":9,"257":8,"259":3,"263":1,"277":2,"342":3,"347":3,"362":1,"365":1,"438":3,"481":1}}],["v0",{"2":{"90":1,"104":1,"109":1,"115":1}}],["vscode",{"2":{"210":1,"424":1,"441":9,"472":2}}],["vs",{"2":{"89":1,"98":1,"431":1,"441":7,"482":1,"573":1}}],["v16",{"2":{"384":1}}],["v1",{"2":{"44":3,"56":3}}],["visible",{"2":{"441":1}}],["visualize",{"2":{"511":1,"528":1}}],["visualizer",{"2":{"440":4}}],["visuals",{"2":{"441":1}}],["visual",{"2":{"208":1,"210":1,"384":1,"468":1,"475":1}}],["vivaldi",{"2":{"208":1}}],["virtual",{"2":{"145":1,"446":1}}],["video",{"2":{"64":1,"90":1,"115":1}}],["vitepress",{"0":{"512":1,"522":1},"1":{"523":1,"524":1,"525":1},"2":{"424":1,"489":1,"491":1,"515":2,"522":1,"524":1,"525":2,"541":1}}],["vitepwa",{"2":{"279":3}}],["vitest",{"0":{"456":1,"465":1},"1":{"457":1},"2":{"384":1,"441":10,"451":1,"454":1,"455":1,"456":12,"457":6,"459":1,"460":3,"461":1,"462":3,"463":6,"464":5,"465":4,"479":1}}],["vitejs",{"2":{"214":3,"279":1}}],["vite",{"0":{"214":1,"279":1,"562":1},"2":{"20":1,"121":1,"122":1,"125":1,"127":1,"134":1,"144":1,"207":2,"208":1,"209":8,"210":6,"213":1,"214":10,"217":2,"220":1,"224":1,"225":1,"226":1,"252":1,"268":1,"278":2,"279":9,"281":1,"331":1,"333":1,"334":2,"338":1,"383":1,"384":1,"437":1,"438":1,"440":13,"441":3,"456":5,"460":2,"463":1,"464":1,"465":1,"492":3,"502":1,"530":1,"538":1,"546":1,"549":2,"562":1}}],["view>",{"2":{"362":2}}],["viewport",{"2":{"263":1}}],["viewitem",{"2":{"234":3}}],["view",{"2":{"11":1,"105":4,"362":1,"363":2,"365":1,"433":4,"450":2,"482":1}}],["views",{"0":{"105":1,"365":1},"2":{"3":1,"105":1,"356":1,"359":2,"363":3,"427":1,"429":3,"431":1,"448":4,"449":1}}],["vuefaq",{"2":{"503":1}}],["vuetify",{"2":{"490":1}}],["vuejs",{"2":{"133":3,"137":1,"213":1,"233":1,"234":2,"257":1,"259":1,"368":1,"417":1,"450":1,"502":4,"530":1}}],["vuex",{"2":{"127":1,"135":1,"417":4,"450":6}}],["vuesence",{"2":{"75":2,"120":1,"121":2,"505":1,"511":1,"520":1,"524":1,"528":1,"531":1,"537":1}}],["vuestorefront",{"2":{"62":1}}],["vueuse",{"0":{"94":1,"96":1},"1":{"95":1,"96":1},"2":{"20":1,"96":8,"113":1,"258":1}}],["vue",{"0":{"121":1,"127":1,"177":1,"179":1,"216":1,"217":1,"221":1,"223":1,"227":1,"321":1,"322":1,"342":1,"347":1,"355":1,"362":1,"365":1,"380":1,"381":1,"389":1,"400":2,"406":1,"407":1,"410":1,"417":1,"421":1,"434":1,"447":1,"448":1,"449":1,"450":1,"460":1,"491":1,"494":1,"511":1,"526":1,"528":1,"535":1,"539":1},"1":{"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"222":1,"223":1,"224":2,"225":1,"226":1,"227":1,"228":2,"229":2,"230":2,"231":2,"232":2,"233":2,"234":1,"235":1,"236":1,"237":1,"238":1,"239":1,"240":1,"241":1,"242":1,"356":1,"357":1,"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1,"365":1,"366":1,"367":1,"368":1,"381":1,"382":1,"383":1,"384":1,"385":1,"386":1,"387":1,"448":1,"449":1,"461":1,"462":1,"527":1,"528":1,"536":1,"540":1,"541":1},"2":{"3":2,"10":2,"11":1,"20":2,"41":1,"43":1,"77":2,"85":1,"96":4,"111":1,"112":3,"121":2,"127":6,"128":11,"129":13,"130":2,"131":2,"132":4,"133":9,"134":3,"135":1,"136":4,"138":7,"141":1,"143":2,"144":2,"145":5,"147":1,"150":1,"153":3,"154":1,"156":2,"162":1,"176":1,"177":1,"179":6,"183":1,"191":3,"206":1,"207":2,"208":3,"209":4,"210":9,"211":2,"213":3,"214":5,"215":1,"216":5,"217":4,"220":3,"221":4,"222":9,"223":11,"224":7,"225":8,"226":16,"227":3,"229":1,"231":1,"232":1,"233":3,"234":6,"235":1,"241":1,"242":2,"243":2,"245":1,"246":2,"247":6,"248":2,"249":1,"250":1,"251":7,"252":11,"254":6,"255":6,"257":9,"258":4,"259":5,"260":2,"263":16,"264":4,"269":1,"270":1,"277":3,"279":3,"283":1,"287":1,"288":1,"289":1,"290":4,"294":2,"295":1,"312":2,"317":1,"318":3,"319":1,"320":1,"321":1,"322":3,"323":1,"327":1,"330":1,"331":1,"333":1,"335":1,"337":2,"340":1,"342":4,"347":2,"348":1,"351":1,"352":4,"353":1,"354":1,"355":4,"356":2,"357":1,"359":4,"360":2,"361":1,"362":12,"363":3,"364":1,"365":7,"370":2,"371":2,"373":1,"374":1,"377":1,"378":1,"382":3,"383":3,"384":4,"386":1,"389":1,"390":1,"393":1,"395":1,"397":2,"398":1,"400":1,"403":1,"404":1,"405":2,"406":3,"407":1,"410":3,"411":2,"412":6,"413":2,"415":2,"416":2,"417":5,"420":3,"421":1,"422":1,"424":1,"426":1,"427":10,"428":14,"429":11,"430":12,"431":2,"432":1,"433":2,"434":1,"435":1,"436":2,"437":1,"438":2,"440":4,"441":15,"444":1,"445":1,"446":7,"448":47,"449":2,"450":12,"451":2,"452":1,"453":2,"454":3,"455":7,"456":2,"459":2,"460":6,"461":4,"462":2,"478":1,"479":1,"481":3,"482":16,"490":3,"491":22,"492":1,"494":1,"500":1,"502":2,"503":1,"506":1,"511":2,"513":2,"515":2,"524":1,"528":1,"530":2,"531":2,"533":2,"535":7,"536":1,"537":2,"538":3,"540":3,"541":4,"542":2,"543":2,"547":2,"561":2,"562":1,"572":1,"573":2,"581":1,"590":1}}],["эстетики",{"2":{"501":1}}],["эскиза",{"2":{"266":1}}],["эван",{"2":{"482":1}}],["эволюция",{"2":{"490":1}}],["эволюцией",{"2":{"377":1}}],["эволюции",{"2":{"268":1,"429":1,"448":1}}],["эра",{"2":{"354":1}}],["эмиттера",{"2":{"409":1}}],["эмитент",{"2":{"371":1}}],["эмиты",{"2":{"132":1}}],["эмпирическое",{"2":{"301":1}}],["эмулятор",{"2":{"208":1}}],["эфемерны",{"2":{"174":1,"265":1}}],["эффектам",{"2":{"405":1}}],["эффектом",{"2":{"359":1}}],["эффектов",{"2":{"107":1,"258":1,"291":1}}],["эффективен",{"2":{"158":1,"410":1,"462":1}}],["эффективная",{"2":{"354":1,"467":1}}],["эффективна",{"2":{"338":1}}],["эффективные",{"2":{"302":1,"407":1}}],["эффективным",{"2":{"292":1}}],["эффективны",{"2":{"157":1,"363":1}}],["эффективный",{"2":{"96":1,"179":1,"331":1}}],["эффективней",{"2":{"85":1,"96":1,"446":1,"482":2,"492":1}}],["эффективной",{"2":{"331":1}}],["эффективности",{"2":{"281":1,"329":1,"446":1}}],["эффективное",{"2":{"266":1,"354":1,"417":1,"538":1}}],["эффективного",{"2":{"231":1,"538":1}}],["эффективно",{"2":{"50":1,"96":1,"145":1,"268":1,"283":1,"483":2,"541":1,"542":1}}],["эффекты",{"2":{"26":1,"155":1,"175":1}}],["элегантен",{"2":{"457":1}}],["элегантно",{"2":{"293":1}}],["электронных",{"2":{"375":1}}],["электронные",{"2":{"354":1}}],["электронная",{"2":{"375":1}}],["электронной",{"2":{"142":1,"173":1,"375":2,"376":1,"377":1}}],["элементу",{"2":{"179":1,"207":1,"232":1,"251":1,"257":1}}],["элементом",{"2":{"178":1,"179":1,"184":1,"190":1,"232":1,"263":1,"421":1}}],["элементов",{"0":{"246":1,"248":1},"2":{"69":2,"96":1,"123":1,"145":1,"159":1,"160":1,"161":1,"166":2,"168":1,"171":2,"176":1,"177":1,"178":2,"179":2,"186":1,"217":3,"218":1,"221":1,"230":2,"231":2,"234":5,"245":1,"246":1,"247":1,"254":1,"264":4,"273":1,"280":1,"286":1,"291":1,"315":1,"338":1,"342":1,"354":1,"407":1,"446":4,"479":1,"540":1}}],["элементе",{"2":{"171":2,"172":1,"213":1,"217":3}}],["элементарное",{"2":{"491":1}}],["элементарно",{"2":{"437":1}}],["элементах",{"2":{"259":1}}],["элементам",{"2":{"161":1}}],["элементами",{"0":{"159":1},"2":{"69":1,"131":1,"175":1,"178":1,"215":1,"217":1,"230":1,"233":1,"297":1,"342":1,"403":1}}],["элемента",{"2":{"136":2,"171":1,"172":1,"178":2,"179":1,"184":2,"216":1,"217":5,"225":1,"227":2,"231":2,"247":3,"248":2,"264":4,"266":1,"277":1,"286":1,"418":1,"462":2,"482":1,"492":1}}],["элементы",{"0":{"169":1},"1":{"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1},"2":{"29":1,"69":1,"141":1,"157":1,"159":1,"161":1,"162":1,"168":1,"169":2,"178":5,"179":1,"195":1,"217":1,"218":1,"221":1,"225":1,"234":1,"245":1,"247":1,"248":1,"254":1,"257":1,"265":1,"270":1,"273":1,"277":1,"286":1,"331":1,"343":1,"399":1,"401":1,"413":1,"428":1,"448":1,"454":1,"462":2,"482":1,"488":1,"492":1}}],["элемент",{"2":{"9":1,"169":1,"172":1,"176":4,"178":1,"179":1,"187":1,"215":1,"216":1,"217":7,"223":3,"229":2,"230":4,"234":1,"248":1,"257":1,"262":1,"277":2,"321":1,"361":1,"364":1,"413":1,"420":1,"421":1,"451":1,"462":1,"501":1}}],["эндрю",{"2":{"291":1}}],["эндпойнтов",{"2":{"124":1}}],["эндпойнты",{"2":{"53":1}}],["эндпойнтам",{"2":{"124":1}}],["эндпойнта",{"2":{"44":1}}],["эндпойнту",{"2":{"41":1,"124":2}}],["энергосбережения",{"2":{"123":1}}],["экстремального",{"2":{"491":1}}],["экстраполированного",{"2":{"322":1}}],["экспериментов",{"2":{"492":1}}],["экспериментировал",{"2":{"482":1}}],["экспериментируя",{"2":{"422":1}}],["экспериментируем",{"0":{"419":1},"1":{"420":1,"421":1}}],["экспериментального",{"2":{"419":1}}],["экспериментальной",{"2":{"234":1}}],["эксперименты",{"2":{"403":1}}],["экспозиции",{"2":{"270":1}}],["экспортом",{"2":{"412":1}}],["экспортируем",{"2":{"304":1,"338":1}}],["экспортируете",{"2":{"450":1}}],["экспортирует",{"2":{"214":1,"225":1,"258":1,"305":1}}],["экспортирующий",{"2":{"260":1,"303":1}}],["экспортировать",{"2":{"258":1,"420":1}}],["экспорт",{"2":{"226":1,"464":1}}],["экспорта",{"2":{"214":1}}],["эксплуатационным",{"2":{"69":1}}],["экземпляром",{"2":{"310":1}}],["экземпляров",{"2":{"253":1,"450":1}}],["экземпляре",{"2":{"263":1}}],["экземпляры",{"0":{"240":1},"2":{"234":1,"240":1,"362":1}}],["экземпляр",{"2":{"223":1,"263":1,"300":1,"304":2,"338":1}}],["экземпляру",{"2":{"129":1,"179":1,"226":1,"260":1}}],["эквивалентны",{"2":{"457":1}}],["эквивалентный",{"2":{"142":1}}],["эквивалентно",{"2":{"458":1}}],["эквивалентное",{"2":{"365":1}}],["эквивалентности",{"2":{"326":1}}],["эквивалентная",{"2":{"462":1}}],["эквивалентна",{"2":{"229":1}}],["эквивалент",{"2":{"207":1,"216":1,"366":1}}],["экономии",{"2":{"213":1}}],["экономичным",{"2":{"124":1}}],["экономит",{"2":{"102":1}}],["экосистемой",{"2":{"542":1}}],["экосистеме",{"2":{"279":1,"441":1,"446":1}}],["экосистему",{"2":{"96":1,"127":1}}],["экосистемы",{"2":{"77":1,"207":1,"355":1}}],["экраны",{"2":{"428":1,"448":1}}],["экранов",{"2":{"189":2}}],["экран",{"2":{"158":1,"190":1,"191":1,"264":1,"288":1,"492":1,"576":1,"588":1}}],["экранах",{"2":{"553":1}}],["экрана",{"2":{"9":1,"20":1,"96":3,"117":1,"158":1,"159":1,"160":1,"164":4,"174":1,"181":4,"189":3,"191":1,"209":1,"216":1,"365":1,"411":1,"472":1,"550":1,"552":1,"590":1}}],["экране",{"2":{"3":1,"166":1,"234":1,"277":1,"331":5,"346":1,"347":1}}],["эту",{"2":{"126":1,"142":1,"143":1,"151":1,"155":1,"162":1,"176":1,"179":1,"181":1,"187":1,"191":1,"194":1,"210":1,"211":1,"213":1,"216":1,"226":1,"246":1,"248":1,"255":1,"257":2,"258":2,"264":2,"291":2,"314":1,"320":1,"325":1,"331":1,"337":1,"347":1,"348":1,"354":1,"356":1,"371":1,"377":1,"406":1,"408":1,"412":1,"437":1,"450":1,"453":3,"464":2,"474":1,"479":1,"491":1}}],["эталонный",{"2":{"329":1}}],["эта",{"0":{"383":1,"388":1},"1":{"389":1,"390":1,"391":1,"392":1,"393":1,"394":1,"395":1,"396":1,"397":1,"398":1,"399":1,"400":1},"2":{"89":1,"95":1,"130":1,"140":1,"145":1,"156":1,"161":1,"179":1,"189":1,"197":1,"201":1,"205":1,"207":1,"208":1,"209":2,"210":2,"211":1,"213":1,"222":1,"226":1,"229":1,"232":1,"233":1,"246":1,"252":1,"255":1,"259":1,"263":1,"264":2,"272":1,"283":1,"288":1,"289":1,"290":1,"317":1,"318":1,"319":1,"324":1,"327":1,"330":1,"332":1,"338":1,"340":1,"343":1,"354":1,"355":1,"376":1,"382":1,"383":1,"384":1,"392":1,"395":1,"396":1,"399":1,"410":1,"412":1,"431":1,"441":1,"448":1,"452":1,"456":2,"457":1,"476":1}}],["этап",{"0":{"246":1},"2":{"246":1}}],["этапов",{"2":{"64":1}}],["этапах",{"2":{"453":1}}],["этапами",{"2":{"245":1}}],["этапам",{"2":{"14":1,"80":1}}],["этапа",{"2":{"11":1,"17":1,"80":1}}],["этапы",{"0":{"80":1},"2":{"10":1,"153":1,"453":1,"471":2}}],["этапе",{"2":{"6":1,"7":1,"11":2,"12":1,"17":1,"23":1,"39":1,"44":1,"72":1,"176":1,"179":1,"247":1,"249":1,"259":1,"283":1,"362":1,"375":1,"456":1,"483":1}}],["этическая",{"2":{"204":1}}],["этичный",{"2":{"192":1}}],["этим",{"2":{"127":1,"149":1,"152":1,"157":1,"159":1,"168":1,"175":1,"213":1,"214":1,"222":1,"225":1,"246":1,"248":1,"254":1,"255":1,"263":2,"264":2,"291":1,"321":1,"331":1,"334":1,"346":1,"352":1,"354":1,"357":1,"370":1,"453":1,"466":1,"541":1}}],["этими",{"2":{"69":1,"157":1,"263":1,"318":1,"460":1,"475":1}}],["этих",{"2":{"69":2,"125":1,"127":1,"130":1,"159":1,"164":1,"166":1,"180":1,"186":1,"192":1,"193":1,"211":1,"214":1,"217":1,"221":1,"222":4,"232":1,"268":1,"270":2,"278":1,"283":2,"284":1,"286":1,"293":1,"314":1,"315":1,"323":1,"325":1,"331":1,"349":1,"356":1,"362":1,"369":1,"371":3,"377":3,"418":4,"451":1,"456":1,"460":1,"462":2,"463":1,"469":1,"471":1,"472":1,"475":1,"479":1,"491":1,"492":2}}],["эти",{"2":{"3":1,"69":1,"134":1,"142":3,"143":2,"149":1,"157":1,"158":1,"161":1,"162":1,"164":2,"166":2,"169":2,"170":1,"171":1,"174":2,"175":2,"180":1,"181":1,"197":1,"208":1,"211":2,"213":3,"224":2,"225":1,"226":2,"230":1,"231":1,"240":1,"241":1,"242":1,"245":2,"247":2,"249":2,"252":1,"259":1,"270":1,"314":1,"322":1,"325":1,"327":2,"331":2,"334":1,"336":2,"338":1,"340":1,"341":1,"343":1,"344":1,"349":1,"354":1,"357":1,"361":1,"365":2,"368":1,"369":1,"370":1,"371":2,"377":2,"378":1,"405":1,"408":1,"412":1,"418":2,"422":1,"423":1,"450":2,"451":2,"454":1,"456":1,"457":1,"459":1,"463":1,"472":1,"475":1,"476":1,"477":1,"483":1}}],["этой",{"0":{"384":1},"2":{"23":1,"51":1,"123":1,"132":1,"139":2,"141":1,"150":1,"152":1,"153":2,"155":2,"159":1,"167":1,"170":1,"179":1,"181":1,"191":2,"193":1,"204":2,"205":1,"206":1,"208":4,"209":1,"210":2,"213":2,"219":1,"221":4,"222":1,"226":3,"233":2,"234":1,"235":2,"241":1,"242":1,"243":4,"244":2,"247":2,"248":1,"252":1,"254":1,"255":3,"257":3,"258":2,"263":1,"264":3,"266":1,"267":1,"268":2,"269":1,"281":2,"282":1,"283":1,"286":3,"288":1,"289":1,"294":1,"295":1,"311":1,"313":1,"315":3,"319":3,"320":2,"325":1,"327":1,"329":4,"331":1,"332":1,"335":1,"345":1,"350":1,"352":2,"353":1,"354":1,"356":1,"362":1,"365":1,"368":1,"371":1,"377":2,"378":1,"379":1,"384":3,"386":1,"387":3,"389":1,"390":1,"391":1,"394":1,"397":1,"398":1,"403":3,"404":3,"415":1,"418":1,"419":1,"421":1,"422":1,"423":1,"424":1,"431":1,"442":1,"446":1,"450":1,"451":4,"452":1,"453":2,"455":1,"456":2,"461":1,"465":1,"466":2,"467":1,"471":1,"472":1,"474":1,"475":1,"477":1,"490":1,"538":1}}],["этого",{"2":{"12":1,"27":1,"41":1,"59":1,"62":1,"95":1,"96":1,"104":1,"111":1,"129":1,"132":1,"142":3,"148":1,"164":2,"165":2,"172":2,"173":1,"176":1,"178":3,"181":2,"189":2,"190":2,"191":1,"208":1,"215":1,"216":1,"217":3,"224":1,"225":3,"226":1,"227":1,"230":1,"247":1,"248":1,"249":1,"251":2,"257":3,"258":1,"259":2,"263":1,"264":2,"270":1,"277":2,"278":1,"280":1,"286":1,"288":2,"290":2,"291":1,"293":1,"302":2,"303":1,"311":1,"314":1,"315":1,"316":1,"317":1,"318":1,"320":2,"321":1,"323":1,"324":1,"331":1,"334":1,"336":2,"340":1,"345":1,"348":1,"349":1,"357":1,"359":1,"362":2,"365":1,"369":2,"371":2,"374":2,"375":1,"376":2,"377":1,"405":1,"406":1,"407":2,"411":1,"412":2,"415":1,"417":1,"418":3,"419":1,"425":1,"440":1,"446":1,"450":1,"454":1,"455":1,"456":1,"457":1,"461":1,"462":1,"463":1,"464":1,"466":1,"470":1,"471":1,"472":1,"476":1,"482":1,"483":1,"491":2,"492":1}}],["этом",{"2":{"12":1,"39":1,"41":1,"62":1,"69":1,"95":1,"96":1,"142":2,"144":1,"145":1,"151":1,"164":1,"165":1,"171":1,"173":1,"175":1,"176":1,"177":1,"178":1,"179":1,"182":1,"203":1,"204":1,"210":1,"213":2,"215":1,"217":1,"222":2,"223":2,"224":1,"226":2,"232":1,"234":1,"247":1,"250":1,"254":1,"259":1,"260":1,"263":1,"268":1,"269":1,"272":1,"277":1,"279":1,"289":1,"290":1,"293":1,"308":2,"314":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":2,"324":1,"326":2,"338":1,"344":1,"347":1,"349":1,"362":3,"363":1,"365":1,"369":1,"370":2,"371":1,"374":1,"400":1,"404":1,"405":1,"406":1,"410":1,"413":1,"414":2,"415":1,"420":1,"421":1,"425":1,"433":1,"437":1,"440":1,"450":2,"453":2,"455":1,"456":1,"459":1,"463":1,"469":1,"471":1,"474":2,"479":2,"482":3,"491":2,"508":1,"531":1,"541":1}}],["этому",{"2":{"2":1,"16":1,"166":1,"190":1,"207":1,"245":1,"252":2,"280":1,"289":1,"290":1,"299":1,"305":1,"343":2,"349":1,"357":1,"359":1,"368":1,"413":1,"457":1,"491":1}}],["этот",{"2":{"9":1,"13":1,"89":1,"112":1,"121":2,"123":1,"127":1,"131":1,"142":3,"145":2,"152":1,"159":1,"160":1,"161":1,"162":1,"164":1,"165":1,"166":1,"171":1,"172":2,"173":2,"174":1,"175":1,"176":1,"179":2,"184":2,"185":1,"186":3,"189":3,"190":2,"194":2,"195":2,"196":1,"199":1,"202":1,"208":1,"209":2,"210":4,"214":1,"215":1,"216":1,"217":1,"222":2,"223":3,"224":1,"226":3,"229":1,"246":2,"247":2,"248":2,"249":1,"251":1,"252":2,"255":1,"257":1,"258":1,"259":1,"263":1,"264":1,"268":1,"272":1,"279":1,"286":2,"287":2,"288":2,"289":2,"290":1,"291":1,"292":2,"293":2,"299":1,"300":1,"301":1,"303":2,"304":3,"305":1,"306":1,"309":1,"310":1,"312":2,"313":1,"314":1,"316":2,"317":1,"318":2,"320":1,"323":3,"326":3,"333":1,"334":1,"335":3,"336":1,"338":1,"339":2,"340":1,"345":2,"347":2,"359":1,"361":1,"362":1,"364":1,"365":3,"368":1,"370":1,"371":4,"375":1,"376":4,"407":1,"408":1,"410":3,"411":1,"412":4,"414":2,"415":1,"416":2,"418":1,"420":2,"421":2,"424":1,"428":2,"431":1,"441":1,"448":2,"449":1,"453":1,"455":1,"456":1,"461":1,"462":2,"463":1,"464":3,"471":1,"472":1,"476":1,"483":1,"491":2,"562":1}}],["это",{"0":{"213":1,"292":1},"2":{"2":1,"3":1,"11":1,"12":2,"13":1,"20":1,"26":1,"29":1,"33":1,"34":1,"39":1,"40":1,"43":1,"44":1,"50":1,"51":1,"59":2,"68":1,"82":1,"85":1,"89":2,"96":7,"98":1,"106":1,"111":1,"112":1,"113":1,"114":1,"122":2,"123":3,"124":3,"125":3,"130":1,"132":2,"133":1,"135":1,"138":2,"139":1,"142":6,"143":2,"144":1,"145":1,"146":1,"149":1,"151":1,"153":2,"155":1,"157":1,"158":1,"159":2,"160":2,"162":3,"167":3,"170":1,"171":1,"175":1,"176":4,"178":3,"179":1,"180":1,"181":1,"182":1,"183":1,"185":1,"186":4,"187":1,"191":1,"193":2,"195":1,"199":1,"203":1,"205":1,"208":4,"209":6,"210":9,"211":5,"213":2,"214":4,"216":2,"217":7,"218":2,"220":2,"221":1,"222":9,"223":4,"224":1,"225":7,"226":16,"230":1,"231":1,"232":1,"233":1,"234":4,"240":2,"243":1,"246":2,"247":1,"249":1,"250":1,"251":1,"252":2,"253":2,"254":2,"257":2,"258":3,"260":1,"261":1,"262":1,"263":4,"264":7,"265":1,"266":1,"268":1,"270":4,"271":3,"272":2,"274":1,"275":1,"277":5,"278":2,"279":1,"280":1,"283":4,"284":2,"286":1,"287":2,"288":3,"289":2,"290":2,"291":3,"294":3,"300":1,"303":1,"304":1,"305":1,"307":3,"308":1,"309":3,"310":5,"311":1,"312":4,"314":2,"315":2,"316":1,"317":1,"318":5,"319":6,"320":6,"321":1,"323":2,"324":6,"325":4,"326":7,"327":2,"331":15,"332":3,"333":2,"334":1,"335":1,"339":2,"341":3,"342":2,"343":2,"344":1,"345":2,"347":1,"349":5,"350":1,"351":1,"354":4,"355":2,"359":5,"362":4,"363":2,"365":3,"366":1,"368":1,"370":2,"371":4,"373":2,"374":1,"375":2,"376":1,"377":3,"378":1,"382":2,"393":1,"401":1,"405":6,"407":2,"408":2,"409":1,"410":5,"411":2,"412":5,"413":3,"414":5,"415":2,"417":3,"418":8,"420":4,"421":2,"425":1,"430":1,"431":3,"433":1,"437":2,"440":1,"446":1,"448":3,"449":1,"450":8,"453":4,"454":1,"455":1,"456":2,"457":4,"458":2,"459":2,"462":1,"464":1,"465":1,"466":2,"467":3,"471":4,"472":5,"474":6,"475":6,"476":2,"478":1,"479":1,"481":1,"482":10,"483":12,"484":2,"485":1,"486":1,"487":1,"489":1,"490":1,"491":4,"492":4,"521":1,"531":1,"532":1,"541":1,"589":1}}],["ухудшает",{"2":{"490":1}}],["ушли",{"2":{"467":1}}],["ушло",{"2":{"166":1}}],["уязвимости",{"2":{"450":1}}],["уязвимость",{"2":{"96":1,"484":1}}],["укрепить",{"2":{"590":1}}],["украдут",{"2":{"376":1}}],["укоряет",{"2":{"490":1}}],["укоренилась",{"2":{"354":1}}],["укажет",{"2":{"462":1}}],["укажу",{"2":{"208":1}}],["указателей",{"2":{"226":1}}],["указателями",{"2":{"226":1}}],["указателя",{"2":{"164":1}}],["указать",{"2":{"143":2,"418":1,"457":1,"463":1,"475":1,"482":1,"483":1,"508":2}}],["указано",{"2":{"257":2,"280":1}}],["указаны",{"2":{"209":1}}],["указаниям",{"2":{"263":1}}],["указания",{"2":{"217":1,"459":1,"577":1}}],["указанием",{"2":{"375":1,"453":1,"457":1,"535":1}}],["указание",{"2":{"151":1}}],["указании",{"2":{"144":1}}],["указана",{"2":{"125":1}}],["указанные",{"2":{"472":1}}],["указанных",{"2":{"253":1}}],["указанный",{"2":{"253":1,"349":1,"373":1}}],["указанными",{"2":{"277":1,"368":1,"372":1}}],["указанным",{"2":{"212":1}}],["указанную",{"2":{"125":1,"372":1}}],["указанная",{"2":{"96":1}}],["указывали",{"2":{"191":1}}],["указывают",{"2":{"272":1}}],["указываются",{"2":{"152":1}}],["указывающие",{"2":{"474":1}}],["указывающих",{"2":{"457":1}}],["указывающий",{"2":{"176":1}}],["указывающей",{"2":{"179":1}}],["указывающее",{"2":{"173":1,"217":1}}],["указывающая",{"2":{"142":1,"173":1}}],["указываем",{"2":{"148":1,"149":1,"214":1}}],["указывает",{"2":{"142":1,"144":1,"151":1,"160":1,"172":1,"176":1,"184":3,"223":1,"226":2,"356":1,"359":3,"362":1,"471":1,"472":1}}],["указывать",{"2":{"142":2,"359":1}}],["унаследован",{"2":{"226":1}}],["уникален",{"2":{"377":1,"450":1}}],["уникальному",{"2":{"377":1}}],["уникального",{"2":{"338":1,"377":1,"436":1,"457":1}}],["уникальная",{"2":{"371":1}}],["уникальным",{"2":{"338":1,"414":1,"418":1}}],["уникальный",{"2":{"142":1,"217":1,"231":1,"359":1,"362":1,"371":1}}],["унификации",{"2":{"126":1}}],["универсального",{"2":{"96":1}}],["универсальный",{"2":{"96":2,"437":2}}],["универсальней",{"2":{"88":1}}],["утвердить",{"2":{"462":1}}],["утверждаем",{"2":{"457":1}}],["утверждает",{"2":{"197":1,"305":1}}],["утверждениях",{"2":{"462":1}}],["утверждения",{"0":{"458":1,"459":1},"2":{"457":3,"458":1}}],["утверждений",{"2":{"457":4,"461":1}}],["утверждение",{"2":{"305":1,"457":1,"458":2,"459":1,"462":2}}],["утерянных",{"2":{"377":1}}],["утеряны",{"2":{"371":1}}],["утечек",{"2":{"290":1}}],["утечку",{"2":{"225":1}}],["уточняет",{"2":{"272":1}}],["утилиту",{"2":{"113":1}}],["утилитами",{"2":{"485":1}}],["утилита",{"2":{"280":3}}],["утилитарных",{"2":{"211":1}}],["утилитарные",{"2":{"96":1}}],["утилитах",{"2":{"96":1}}],["утилиты",{"2":{"96":5,"104":1,"339":1,"430":1,"431":2,"448":1,"449":1,"450":1,"455":1,"547":1}}],["утилит",{"0":{"485":1},"2":{"96":2}}],["узлов",{"2":{"377":1}}],["узлами",{"2":{"377":1}}],["узких",{"2":{"189":1}}],["узнаете",{"2":{"226":1,"383":1,"391":1}}],["узнает",{"2":{"179":1,"276":1}}],["узнаем",{"2":{"155":1,"243":1,"252":1,"268":1,"305":1,"329":1,"352":1}}],["узнаваемость",{"2":{"157":1,"167":1,"590":1}}],["узнали",{"2":{"153":1,"160":1,"206":1,"219":1,"266":2,"419":1,"423":1,"477":1}}],["узнать",{"2":{"143":1,"223":1,"334":2,"357":1,"377":1}}],["уж",{"2":{"187":1,"223":1,"240":1,"263":1,"291":1,"344":1}}],["уже",{"2":{"3":1,"16":1,"27":1,"36":1,"38":1,"39":1,"50":1,"89":3,"92":1,"96":1,"121":1,"124":1,"126":1,"142":1,"151":2,"158":1,"161":1,"176":1,"179":1,"183":1,"191":1,"209":1,"210":1,"211":1,"213":1,"216":1,"217":1,"225":1,"226":2,"240":1,"245":1,"248":1,"255":1,"264":2,"270":1,"271":1,"279":2,"310":1,"311":1,"315":1,"320":2,"323":2,"329":1,"362":1,"363":1,"368":1,"377":2,"382":1,"403":2,"411":1,"412":1,"424":1,"446":1,"453":1,"456":1,"464":1,"472":1,"475":1,"479":1,"482":1,"483":1,"491":1,"492":3,"535":1,"570":1}}],["угрозой",{"2":{"418":1}}],["уголкам",{"2":{"193":1}}],["угодно",{"2":{"142":1}}],["угла",{"2":{"164":1}}],["углов",{"2":{"164":1}}],["углубление",{"2":{"464":1}}],["углубляться",{"2":{"286":1,"431":1}}],["углубляясь",{"2":{"182":1}}],["углубиться",{"2":{"210":1}}],["углу",{"2":{"158":2,"160":1,"164":2,"190":1,"280":2,"517":1}}],["уважает",{"2":{"456":1}}],["увидели",{"2":{"350":1,"492":1}}],["увидеть",{"2":{"96":1,"142":2,"156":1,"175":1,"183":1,"191":1,"208":1,"209":1,"210":1,"217":2,"244":1,"269":1,"294":1,"319":1,"330":2,"337":1,"339":1,"340":1,"353":1,"362":1,"404":1,"406":1,"412":1,"415":1,"421":1,"423":1,"452":1}}],["увидит",{"2":{"331":1}}],["увидите",{"2":{"209":3,"222":1,"286":1,"289":1,"365":1,"403":1,"421":1}}],["увидим",{"2":{"212":1,"217":1,"224":1,"226":1,"233":2,"247":1,"259":1,"278":1,"287":1,"313":1,"317":1,"330":1,"342":1,"354":1,"357":1,"359":1,"370":1,"376":1,"410":1,"414":1,"472":1}}],["уверенным",{"2":{"491":1}}],["уверенный",{"2":{"455":1}}],["уверенную",{"2":{"166":1}}],["уверены",{"2":{"326":1,"349":1}}],["увеличили",{"2":{"331":1}}],["увеличивая",{"2":{"403":1}}],["увеличивает",{"2":{"252":1,"437":1,"484":1}}],["увеличивается",{"2":{"209":1,"343":1,"437":1}}],["увеличиваем",{"2":{"179":1}}],["увеличивать",{"2":{"179":1}}],["увеличения",{"2":{"221":1}}],["увеличение",{"0":{"271":1},"1":{"272":1,"273":1,"274":1,"275":1,"276":1,"277":1},"2":{"133":1,"354":3}}],["уведомить",{"2":{"176":1,"277":1,"407":1}}],["уведомлять",{"2":{"252":1}}],["уведомляется",{"2":{"314":1}}],["уведомляет",{"2":{"248":1}}],["уведомляющие",{"0":{"173":1}}],["уведомлений",{"0":{"248":1}}],["уведомление",{"2":{"174":3,"277":1}}],["уведомления",{"0":{"174":1},"2":{"174":2,"270":3}}],["уведомлении",{"2":{"173":1}}],["увесистыми",{"2":{"155":1}}],["упаковывает",{"2":{"349":1}}],["упакованных",{"2":{"374":1}}],["упакованные",{"2":{"315":1}}],["упакован",{"2":{"224":1}}],["упакует",{"2":{"224":1}}],["упала",{"2":{"133":1}}],["упорядоченной",{"2":{"456":1}}],["упорядочиваете",{"2":{"290":1}}],["упоминалось",{"2":{"217":1,"255":1,"411":1}}],["упоминали",{"2":{"151":1,"210":1,"279":1,"320":1,"323":1,"345":1}}],["упомянутую",{"2":{"337":1}}],["упомянутый",{"2":{"225":1}}],["упомянутых",{"2":{"137":1,"174":1,"384":1,"476":1}}],["упомянуть",{"2":{"166":1,"264":1,"293":1}}],["упомянутого",{"2":{"152":1,"309":1}}],["уполномоченной",{"2":{"142":1}}],["упражнением",{"2":{"375":1}}],["упражнение",{"2":{"310":1}}],["упражнения",{"2":{"215":2,"218":1,"344":1,"363":1,"455":1}}],["управлению",{"2":{"222":1,"257":1,"292":1,"362":1,"403":1,"410":1}}],["управлении",{"2":{"127":1,"145":1,"431":1,"448":1}}],["управлением",{"2":{"208":1}}],["управление",{"0":{"395":1,"403":1,"467":1,"473":1},"1":{"404":1,"405":1,"406":1,"407":1,"408":1,"409":1,"410":1,"411":1,"412":1,"413":1,"414":1,"415":1,"416":1,"417":1,"418":1,"419":1,"420":1,"421":1,"422":1,"423":1},"2":{"80":1,"127":1,"135":2,"157":1,"222":1,"226":1,"247":3,"254":1,"257":1,"259":1,"266":1,"268":1,"277":1,"278":1,"288":1,"305":1,"312":1,"362":1,"413":2,"423":1,"431":1,"448":1,"451":1,"466":1,"475":1}}],["управления",{"2":{"56":1,"135":1,"144":1,"145":3,"180":1,"210":1,"216":1,"252":1,"254":1,"260":1,"264":1,"273":2,"277":1,"307":1,"315":1,"340":1,"383":1,"395":2,"404":1,"411":1,"412":1,"413":1,"417":2,"422":1,"450":3,"473":2,"478":1}}],["управляло",{"2":{"265":1}}],["управляемое",{"2":{"492":1}}],["управляемым",{"2":{"589":1}}],["управляемые",{"2":{"286":2}}],["управляемый",{"2":{"145":1}}],["управляет",{"2":{"145":1,"210":1,"248":1,"258":1,"263":1,"264":1,"277":1,"288":1,"431":1,"448":1,"467":1}}],["управляется",{"2":{"2":1,"142":1,"553":1}}],["управляют",{"2":{"142":1,"180":1}}],["управляются",{"2":{"85":1,"591":1}}],["управляющему",{"2":{"2":1}}],["управляться",{"2":{"471":1}}],["управлять",{"2":{"2":1,"165":1,"189":1,"218":1,"223":1,"225":1,"270":1,"328":1,"351":1,"355":2,"359":1,"405":1,"430":1,"448":1,"477":1,"482":2}}],["упростит",{"2":{"485":1}}],["упростить",{"2":{"142":1,"257":1,"301":1,"323":1,"377":1}}],["упрощенную",{"2":{"492":1}}],["упрощенно",{"2":{"482":1}}],["упрощенного",{"2":{"376":1}}],["упрощенное",{"2":{"224":1,"323":1,"371":1}}],["упрощенный",{"2":{"323":1,"326":1,"376":1,"408":1}}],["упрощенным",{"2":{"277":1}}],["упрощения",{"2":{"277":1,"292":1,"294":1,"323":2}}],["упрощение",{"0":{"2":1}}],["упрощать",{"2":{"323":1}}],["упрощающий",{"2":{"323":1}}],["упрощают",{"2":{"50":1}}],["упрощает",{"2":{"80":1,"126":1,"378":1,"424":1}}],["уровень",{"2":{"123":2,"152":2,"213":1,"363":1,"376":1,"483":1,"489":1,"502":1}}],["уровни",{"2":{"323":1}}],["уровней",{"2":{"182":1,"186":1}}],["уровне",{"2":{"144":1,"189":1,"254":1,"255":1,"260":1,"263":1,"270":1,"318":1,"333":1,"432":2,"446":1,"479":1,"483":1,"491":2}}],["уровнем",{"2":{"122":1}}],["уровнями",{"2":{"363":1,"567":1}}],["уровнях",{"2":{"283":1,"318":1,"335":1}}],["уровня",{"0":{"271":1},"1":{"272":1,"273":1,"274":1,"275":1,"276":1,"277":1},"2":{"65":1,"123":1,"128":1,"133":1,"142":3,"154":1,"284":1,"356":1,"357":1,"378":1,"454":1,"455":1,"482":1,"491":1}}],["удивительная",{"2":{"350":1}}],["удивительных",{"2":{"323":1}}],["удивительные",{"2":{"143":1}}],["уделяя",{"2":{"384":1}}],["уделять",{"2":{"281":1}}],["уделите",{"2":{"457":1}}],["уделить",{"2":{"249":1,"270":1}}],["уделили",{"2":{"378":1,"422":2}}],["удерживать",{"2":{"166":1}}],["удержание",{"2":{"158":1}}],["удачные",{"2":{"326":1}}],["удастся",{"2":{"252":1,"474":1}}],["удается",{"2":{"149":1}}],["удалась",{"2":{"373":1}}],["удалить",{"2":{"195":1,"211":1,"213":1,"216":1,"474":1}}],["удалось",{"2":{"176":1,"457":1}}],["удаляет",{"2":{"418":2}}],["удаляем",{"2":{"258":1,"338":1,"362":1}}],["удаляют",{"2":{"230":1,"344":1}}],["удаляя",{"2":{"142":1,"229":1}}],["удалять",{"2":{"133":1,"341":1,"473":1}}],["удалении",{"2":{"202":1,"234":1}}],["удалением",{"2":{"166":1,"290":1}}],["удаление",{"2":{"166":1,"247":2,"368":1,"446":1,"473":1}}],["удаления",{"2":{"123":1,"133":1,"171":1,"218":1,"290":1,"341":2}}],["удаленно",{"2":{"475":1}}],["удаленном",{"2":{"424":1,"476":1}}],["удаленного",{"2":{"151":1,"467":1,"475":1}}],["удаленные",{"2":{"475":1}}],["удаленных",{"2":{"467":1}}],["удаленный",{"2":{"151":1,"152":1,"344":1,"424":4,"467":1,"474":1,"475":3}}],["удаленными",{"0":{"475":1},"2":{"341":1}}],["удаленным",{"2":{"145":1,"291":1,"335":1,"344":1,"475":5}}],["удалена",{"0":{"133":1},"2":{"133":1}}],["удовлетворения",{"2":{"451":1}}],["удовлетворение",{"2":{"158":1}}],["удовлетворить",{"2":{"245":1,"249":1}}],["удовлетворительный",{"2":{"205":1}}],["удовлетворяющее",{"2":{"69":1,"277":1}}],["удостоверяющим",{"2":{"196":1}}],["удостоверяется",{"2":{"123":2}}],["удостовериться",{"2":{"123":1}}],["удобен",{"2":{"126":1,"158":1,"322":1,"326":1,"464":1,"546":1}}],["удобство",{"2":{"163":1,"167":1,"475":1,"501":2}}],["удобством",{"2":{"17":1}}],["удобства",{"2":{"123":1,"142":1,"184":1,"205":1,"208":1,"213":1,"217":2,"234":1,"311":1,"341":1,"456":1,"465":1,"501":1}}],["удобную",{"0":{"442":1},"2":{"178":1,"441":1,"490":1}}],["удобнее",{"2":{"126":1,"278":1}}],["удобней",{"2":{"20":1,"450":1,"490":1}}],["удобна",{"2":{"77":1,"441":1}}],["удобная",{"2":{"56":1,"89":1,"213":1,"431":1,"449":1,"462":1}}],["удобного",{"2":{"369":1}}],["удобное",{"2":{"334":1,"431":1}}],["удобной",{"2":{"208":1,"369":1,"396":1}}],["удобно",{"2":{"47":1,"69":1,"98":1,"112":1,"122":3,"131":1,"146":1,"159":1,"209":1,"226":1,"231":1,"309":2,"312":1,"324":1,"344":1,"433":1,"441":1,"450":2,"490":1,"537":1,"541":1}}],["удобны",{"2":{"264":1,"425":1}}],["удобным",{"2":{"96":1,"240":1,"307":1,"515":1}}],["удобные",{"2":{"62":1,"344":1,"483":1}}],["удобных",{"2":{"43":1,"233":1,"323":1,"361":1,"365":1}}],["удобный",{"2":{"17":1,"23":1,"377":1,"424":1,"441":1,"446":1,"489":1,"491":1}}],["умирает",{"2":{"450":1}}],["умными",{"2":{"377":1}}],["умных",{"2":{"354":1}}],["умны",{"2":{"303":1}}],["умные",{"2":{"293":1}}],["умён",{"2":{"217":1}}],["ума",{"2":{"215":1}}],["умаляя",{"2":{"96":1}}],["ум",{"2":{"178":1}}],["умолчанию",{"0":{"577":1},"2":{"131":1,"132":3,"133":1,"144":1,"149":1,"152":1,"179":1,"209":1,"253":2,"254":1,"257":6,"263":1,"273":1,"310":1,"345":1,"349":1,"362":1,"365":3,"374":1,"417":1,"472":1,"506":1,"508":1,"572":1}}],["умеет",{"2":{"492":1}}],["умеешь",{"2":{"102":2}}],["умел",{"2":{"491":1}}],["умело",{"2":{"221":1}}],["уместен",{"2":{"410":1}}],["уместно",{"2":{"327":1}}],["умеют",{"2":{"323":1}}],["умеющий",{"2":{"43":1}}],["умение",{"2":{"491":1}}],["умении",{"2":{"490":1}}],["умения",{"2":{"283":1}}],["уменьшения",{"2":{"508":1}}],["уменьшение",{"2":{"133":1,"138":1}}],["уменьшить",{"2":{"355":1,"359":1}}],["уме",{"2":{"23":1,"142":1,"242":1}}],["убить",{"2":{"491":1}}],["убирать",{"2":{"290":1}}],["убирается",{"2":{"111":1,"590":1}}],["убираем",{"2":{"89":2,"105":2}}],["убывающей",{"2":{"464":1}}],["убедились",{"2":{"377":1}}],["убедимся",{"2":{"331":1}}],["убедиться",{"2":{"217":1,"242":1,"301":1,"326":1,"342":1,"359":1,"374":1,"458":1}}],["убедитесь",{"2":{"211":1,"280":1,"323":1,"472":1}}],["убрать",{"2":{"89":1,"121":1}}],["улицам",{"2":{"491":1}}],["улице",{"2":{"26":1}}],["уложенные",{"2":{"189":1}}],["улучшайте",{"2":{"491":1}}],["улучшая",{"2":{"486":1}}],["улучшать",{"2":{"65":1}}],["улучшена",{"2":{"417":2}}],["улучшению",{"2":{"457":1}}],["улучшение",{"2":{"265":1,"446":1}}],["улучшения",{"2":{"74":1,"222":1,"341":1,"576":1}}],["улучшила",{"2":{"453":1}}],["улучшили",{"2":{"378":1}}],["улучшит",{"2":{"230":1}}],["улучшить",{"2":{"218":1,"219":1,"350":1,"359":1,"410":1,"453":1,"492":1,"589":1}}],["учит",{"2":{"491":2}}],["учителем",{"2":{"491":1}}],["учите",{"2":{"293":2}}],["учиться",{"2":{"483":1}}],["учить",{"2":{"293":1}}],["учитывают",{"2":{"492":1}}],["учитывать",{"2":{"158":1,"210":1,"270":1,"278":1,"370":1,"440":1}}],["учитывал",{"2":{"96":1}}],["учитывая",{"2":{"96":1,"245":1,"246":1,"249":1,"257":1,"264":1,"271":1,"375":2,"414":1}}],["учреждения",{"2":{"191":1}}],["участию",{"2":{"533":1}}],["участие",{"0":{"533":1}}],["участника",{"2":{"371":2}}],["участниками",{"2":{"371":2}}],["участки",{"2":{"143":1,"217":1,"246":1,"290":1}}],["учатся",{"2":{"160":1}}],["ученика",{"2":{"491":1}}],["учебники",{"2":{"491":1}}],["учебник",{"2":{"491":3}}],["учебного",{"2":{"344":1,"363":1,"455":1}}],["учетной",{"2":{"377":1}}],["учетным",{"2":{"376":1}}],["учетными",{"2":{"371":1}}],["учетные",{"2":{"370":2,"371":1,"377":1}}],["учетных",{"2":{"370":3,"371":1,"375":1}}],["учетом",{"2":{"46":1,"127":1,"207":1,"248":1,"249":1,"454":1}}],["учесть",{"2":{"141":1,"332":1}}],["учтем",{"2":{"40":1}}],["усваивать",{"2":{"293":1}}],["усвоить",{"2":{"167":1}}],["усовершенствование",{"2":{"270":1}}],["усовершенствовать",{"2":{"265":1}}],["ускоряет",{"2":{"431":1,"448":1,"490":1}}],["ускорение",{"2":{"270":1}}],["ускорению",{"2":{"226":1}}],["ускорить",{"2":{"165":1,"283":1,"483":1,"490":1}}],["усилий",{"2":{"270":1,"275":1,"279":1,"350":1,"453":1}}],["усилия",{"2":{"222":1,"331":1,"344":1,"464":1}}],["усиливает",{"2":{"157":1}}],["усмотрению",{"2":{"210":1,"331":1,"474":1}}],["услышать",{"2":{"157":1}}],["услуг",{"2":{"196":2,"197":1,"369":1,"483":1}}],["услугу",{"2":{"152":1}}],["услуги",{"2":{"142":1,"198":1,"200":1,"202":2,"204":1,"476":1}}],["услугам",{"2":{"286":1}}],["услуга",{"2":{"141":1,"157":1}}],["усложнению",{"2":{"288":1}}],["усложнение",{"2":{"196":1}}],["усложняет",{"2":{"122":1}}],["усложняться",{"2":{"492":1}}],["усложнять",{"2":{"114":1}}],["условно",{"2":{"483":1}}],["условные",{"2":{"230":1,"263":1}}],["условна",{"2":{"14":1}}],["условию",{"2":{"456":1,"457":1}}],["условие",{"2":{"326":1}}],["условием",{"2":{"196":1,"205":1,"417":1}}],["условии",{"2":{"257":1,"304":1,"320":1,"370":1,"371":1,"457":1}}],["условий",{"2":{"174":1,"264":1,"270":2,"326":1,"437":1}}],["условиям",{"2":{"294":1}}],["условиями",{"2":{"139":1}}],["условиях",{"2":{"197":1,"222":1,"453":1}}],["условия",{"2":{"157":1,"249":1,"322":1}}],["устраняет",{"2":{"478":1}}],["устраняя",{"2":{"294":1}}],["устранения",{"2":{"474":1}}],["устранению",{"2":{"453":1}}],["устранить",{"2":{"474":1}}],["устроить",{"2":{"449":1}}],["устройстве",{"2":{"272":1}}],["устройств",{"2":{"181":1,"268":1,"552":1}}],["устройством",{"2":{"289":1}}],["устройство",{"2":{"158":1,"376":2}}],["устройствами",{"2":{"270":1}}],["устройствам",{"2":{"270":2}}],["устройствах",{"2":{"270":3,"273":1,"274":1,"277":1,"331":1,"354":1}}],["устройства",{"2":{"117":1,"157":1,"268":1,"270":2,"376":1,"491":1}}],["устроена",{"2":{"118":1}}],["устойчивым",{"2":{"218":1}}],["устоявшихся",{"2":{"155":1,"541":1}}],["уступают",{"2":{"169":1}}],["устареет",{"2":{"484":1}}],["устаревающих",{"2":{"541":1}}],["устаревает",{"2":{"450":1}}],["устаревший",{"2":{"440":1}}],["устаревшими",{"2":{"354":1}}],["устаревшие",{"2":{"138":1,"441":1}}],["устаревшем",{"2":{"133":1,"270":1}}],["устарели",{"2":{"491":1}}],["устарел",{"2":{"442":1,"446":1,"450":1}}],["устареть",{"2":{"96":1,"490":1}}],["устанавливающихся",{"2":{"543":1}}],["устанавливаются",{"2":{"209":1,"278":1,"543":1}}],["устанавливать",{"2":{"262":1,"281":1,"315":1,"477":1,"588":1}}],["устанавливаться",{"2":{"221":1,"270":1,"354":1}}],["устанавливается",{"2":{"440":1,"582":1}}],["устанавливает",{"2":{"189":1,"277":1,"340":1,"546":1}}],["устанавливаемые",{"0":{"270":1}}],["устанавливаем",{"2":{"20":1,"278":1,"279":1,"374":2}}],["установят",{"2":{"469":1}}],["установливаем",{"2":{"362":1}}],["установлены",{"2":{"468":1,"535":1}}],["установленную",{"2":{"424":1}}],["установленный",{"2":{"277":1}}],["установленным",{"2":{"208":1}}],["установлена",{"2":{"344":1,"492":1}}],["установлено",{"2":{"272":1,"276":1,"277":7,"537":1}}],["установлен",{"2":{"179":1,"209":1,"408":1,"470":2,"471":1}}],["установим",{"2":{"455":1,"456":1}}],["установив",{"2":{"208":1,"271":1}}],["установили",{"2":{"210":1,"464":1,"470":1}}],["установил",{"2":{"159":1,"278":1}}],["установит",{"2":{"209":1,"356":1}}],["установите",{"2":{"152":1,"277":1,"356":1,"456":1,"491":1}}],["установить",{"2":{"124":1,"152":3,"208":3,"209":1,"214":1,"270":2,"277":1,"278":1,"356":1,"369":1,"425":1,"455":1,"459":1,"460":3,"462":1,"464":2,"465":1,"506":1,"531":1}}],["установкой",{"2":{"153":1,"226":1,"276":1}}],["установке",{"0":{"277":1},"2":{"152":1,"208":1,"209":1,"217":1,"277":6,"278":2,"492":2}}],["установку",{"2":{"141":1,"152":1,"209":1,"210":1,"277":8,"469":1,"471":1}}],["установки",{"2":{"125":1,"131":1,"152":2,"165":1,"209":1,"212":1,"216":1,"263":1,"270":2,"277":10,"279":1,"344":1,"348":1,"356":1,"384":1,"413":1,"420":1,"424":1,"441":1,"446":1,"455":1,"460":1,"462":1,"467":1,"468":4,"469":1,"470":1,"471":1,"570":1}}],["установка",{"0":{"54":1,"207":1,"337":1,"356":1,"456":1,"460":1,"468":1,"469":1,"470":1,"509":1,"510":1,"523":1,"527":1,"534":1,"535":1,"537":1},"1":{"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"338":1,"339":1,"340":1,"457":1,"461":1,"462":1,"510":1,"511":1,"512":1,"513":1,"535":1,"536":2,"537":1},"2":{"128":1,"134":1,"148":1,"209":1,"224":1,"225":1,"226":1,"243":1,"244":1,"261":1,"270":1,"315":1,"356":1,"404":1,"451":2,"460":1,"469":1,"535":2}}],["успевает",{"2":{"441":1}}],["успешным",{"2":{"324":1}}],["успешными",{"2":{"270":1}}],["успешный",{"2":{"157":1,"373":1}}],["успешности",{"2":{"431":1,"449":1}}],["успешностью",{"2":{"23":1}}],["успешной",{"2":{"372":1,"373":1}}],["успешном",{"2":{"326":1}}],["успешного",{"2":{"326":1,"459":1}}],["успешно",{"2":{"212":1,"280":1,"373":1}}],["успехов",{"2":{"387":1}}],["успехом",{"2":{"370":1}}],["успех",{"2":{"69":1,"174":1,"324":1,"451":1}}],["успеха",{"2":{"41":1,"326":3,"370":1,"375":1,"454":1}}],["у",{"0":{"503":1},"2":{"3":1,"12":1,"13":1,"16":3,"17":2,"23":1,"28":1,"29":1,"36":1,"41":1,"46":1,"50":3,"51":1,"59":1,"92":1,"95":1,"98":1,"104":1,"106":1,"111":2,"121":1,"123":3,"124":4,"126":1,"131":1,"142":2,"145":1,"152":2,"155":1,"157":1,"160":1,"164":1,"166":3,"174":1,"179":1,"192":1,"194":1,"201":1,"209":1,"217":4,"225":2,"226":1,"240":1,"242":1,"247":1,"251":1,"252":1,"254":1,"257":1,"259":1,"261":1,"265":1,"277":1,"278":1,"287":1,"290":1,"314":1,"322":1,"324":1,"325":1,"326":2,"333":1,"337":1,"338":2,"362":1,"363":1,"365":3,"371":2,"375":1,"377":3,"405":1,"407":2,"410":1,"415":1,"417":1,"418":2,"424":1,"433":1,"446":1,"450":5,"456":2,"459":1,"460":1,"467":2,"470":2,"471":1,"472":1,"475":1,"481":1,"483":2,"490":1,"491":1,"492":2,"508":1,"541":1,"562":2,"573":1}}],["флексбокса",{"2":{"487":1}}],["флагманом",{"2":{"482":1}}],["флаг",{"2":{"277":1,"418":2}}],["флажок",{"2":{"170":1,"194":1}}],["флажка",{"2":{"170":1,"194":1,"217":2}}],["форсирует",{"2":{"424":1}}],["форумах",{"2":{"182":1}}],["форм",{"2":{"579":1}}],["формочки",{"2":{"492":1}}],["формой",{"2":{"332":1}}],["формы",{"2":{"165":1,"418":1,"450":1}}],["формируя",{"2":{"224":1}}],["формируется",{"2":{"191":1}}],["формирует",{"2":{"124":1,"209":1,"492":1}}],["формирование",{"2":{"122":1}}],["формуле",{"2":{"371":1}}],["формулы",{"2":{"189":1}}],["формулу",{"2":{"141":1,"222":1,"324":2}}],["формулировки",{"2":{"202":1}}],["формулировок",{"2":{"202":1}}],["формулировать",{"2":{"4":1}}],["формулируется",{"2":{"2":1}}],["форму",{"2":{"123":1,"194":1,"370":1,"375":1,"500":1}}],["форме",{"2":{"77":1,"171":1,"481":1}}],["формальная",{"2":{"247":1}}],["формальный",{"2":{"226":1}}],["формах",{"2":{"169":1}}],["форма",{"2":{"51":1,"178":1,"449":1}}],["форматирует",{"2":{"441":1}}],["форматируете",{"2":{"290":1}}],["форматировании",{"2":{"492":1}}],["форматирование",{"2":{"441":1}}],["форматирования",{"2":{"344":1,"538":1}}],["форматированию",{"2":{"169":1}}],["форматов",{"2":{"253":1}}],["форматом",{"2":{"170":1,"464":1}}],["формата",{"2":{"126":1,"492":1}}],["формате",{"2":{"124":1,"208":1,"226":1,"247":1,"258":1,"349":1,"370":1,"418":1,"439":2,"463":1,"492":1,"511":1,"528":1}}],["формат",{"2":{"17":1,"160":1,"226":1,"326":1,"344":1,"371":1,"439":1,"508":1,"535":1}}],["фоне",{"2":{"482":1}}],["фон",{"2":{"439":1}}],["фонт",{"2":{"278":1}}],["фоновые",{"2":{"344":1}}],["фоновыми",{"2":{"331":1}}],["фоновый",{"2":{"278":1,"531":1}}],["фоновом",{"2":{"176":1}}],["фона",{"2":{"216":1,"274":1,"277":1,"531":1}}],["фонд",{"2":{"152":1}}],["фондом",{"2":{"152":1}}],["фокусируется",{"2":{"431":1,"448":1}}],["фокусироваться",{"2":{"170":1,"183":1}}],["фокусировки",{"2":{"159":1}}],["фокус",{"2":{"183":1}}],["фокусной",{"2":{"159":1}}],["ферме",{"2":{"145":1}}],["физически",{"2":{"483":1}}],["физических",{"2":{"145":1}}],["фибоначчи",{"0":{"325":1},"2":{"324":1,"326":1,"455":3,"458":1}}],["фигура",{"2":{"410":1}}],["фигуру",{"2":{"313":1}}],["фигурные",{"2":{"223":1}}],["фигурных",{"2":{"217":1}}],["финальном",{"2":{"483":1}}],["финальную",{"2":{"251":1}}],["финансы",{"2":{"377":1}}],["финляндия",{"2":{"186":1}}],["фиксит",{"2":{"483":1}}],["фиксируют",{"2":{"476":1}}],["фиксируются",{"2":{"462":1}}],["фиксируем",{"2":{"217":1}}],["фиксированного",{"2":{"178":1}}],["фиксацию",{"2":{"515":1}}],["фиксация",{"2":{"472":1}}],["фиксации",{"2":{"240":1,"471":2,"472":2}}],["философию",{"2":{"189":1}}],["фильтрасобытия",{"2":{"247":1}}],["фильтрасостояние",{"2":{"247":1}}],["фильтрации",{"2":{"186":1,"217":1,"247":1,"264":1,"319":1}}],["фильтрация",{"2":{"16":1,"23":1,"508":1}}],["фильтрами",{"2":{"30":1,"35":1}}],["фильтры",{"2":{"4":1,"33":1}}],["фишек",{"2":{"171":1}}],["фитта",{"0":{"164":1}}],["фидбеки",{"2":{"64":1}}],["фулстек",{"2":{"126":1,"441":1}}],["фулстеков",{"2":{"126":1}}],["футеров",{"2":{"554":1}}],["футером",{"2":{"431":1,"449":1,"580":1}}],["футер",{"2":{"32":1}}],["фунциональность",{"2":{"89":1}}],["функций",{"2":{"161":1,"170":1,"222":2,"226":1,"254":1,"255":1,"258":1,"263":1,"290":2,"294":1,"300":1,"308":1,"312":1,"314":1,"320":1,"321":1,"323":1,"326":1,"328":1,"335":1,"414":1,"430":1,"431":1,"433":1,"448":2,"450":3,"455":1,"459":1,"460":1,"462":1}}],["функциях",{"2":{"326":1,"405":1,"462":1,"482":1}}],["функциям",{"2":{"257":1,"286":1}}],["функциями",{"2":{"210":1,"255":1,"405":1,"411":1,"450":1}}],["функция",{"2":{"132":1,"152":1,"159":1,"165":1,"213":1,"217":3,"226":1,"233":1,"247":1,"252":2,"258":4,"263":1,"264":2,"288":1,"290":1,"311":2,"313":1,"319":1,"320":1,"324":3,"325":2,"331":1,"335":1,"343":1,"371":1,"375":1,"410":3,"412":3,"414":1,"420":3,"446":1,"450":1,"457":4,"458":2,"461":1,"483":3,"484":1}}],["функцией",{"0":{"130":1},"2":{"100":1,"130":1,"165":1,"178":1,"209":1,"217":1,"226":1,"233":1,"253":1,"286":1,"320":1,"325":1,"420":1,"451":1,"457":1,"570":1}}],["функцию",{"2":{"96":1,"130":1,"133":1,"143":1,"159":1,"179":2,"181":1,"217":1,"223":1,"233":1,"249":1,"252":3,"253":1,"255":2,"258":5,"260":1,"263":1,"264":1,"288":2,"290":3,"304":1,"309":1,"310":2,"313":1,"314":1,"315":3,"316":1,"319":1,"325":3,"326":3,"331":1,"338":1,"339":2,"349":1,"362":2,"369":1,"406":3,"407":2,"412":1,"415":2,"417":1,"420":2,"429":1,"433":1,"436":1,"438":1,"448":1,"450":1,"453":1,"457":3,"458":1,"459":1,"461":2,"462":1,"471":1,"484":1,"545":1}}],["функции",{"0":{"239":1,"258":1},"1":{"259":1},"2":{"40":1,"41":1,"98":2,"100":2,"112":2,"113":1,"124":2,"133":1,"148":1,"157":1,"158":1,"163":1,"164":1,"170":1,"179":1,"211":1,"222":1,"223":1,"226":6,"237":1,"240":1,"252":2,"258":4,"259":1,"263":1,"264":1,"277":1,"286":1,"288":2,"290":2,"295":1,"305":1,"307":1,"309":1,"311":1,"312":1,"315":1,"319":2,"324":5,"325":3,"326":8,"331":2,"333":1,"335":1,"336":1,"340":1,"341":1,"342":2,"343":1,"374":1,"375":2,"405":1,"412":1,"414":1,"415":3,"420":1,"430":1,"431":3,"448":3,"450":6,"454":3,"456":1,"457":6,"458":1,"459":3,"463":1,"482":1,"483":1,"538":1,"543":1,"553":1}}],["функционируют",{"2":{"22":1}}],["функционалом",{"2":{"25":1,"335":1,"535":1,"541":1}}],["функциональную",{"2":{"286":1}}],["функциональным",{"2":{"287":1,"320":1,"431":1,"448":1}}],["функциональный",{"2":{"214":1}}],["функциональные",{"0":{"79":1},"2":{"286":1,"292":1,"369":1,"542":1}}],["функциональных",{"2":{"3":1,"162":1,"542":1}}],["функциональном",{"2":{"288":1}}],["функциональному",{"2":{"264":1}}],["функциональности",{"2":{"211":1,"222":3,"240":1,"243":1,"246":1,"247":1,"249":1,"260":1,"264":1,"287":1,"318":1,"320":3,"354":1,"477":1,"538":2}}],["функциональностью",{"2":{"169":1,"226":1,"260":1,"288":2,"320":1}}],["функциональность",{"2":{"11":1,"78":1,"216":1,"219":1,"222":1,"226":1,"227":1,"251":1,"255":1,"266":1,"270":1,"279":1,"287":2,"291":1,"314":3,"320":2,"321":1,"341":1,"407":1,"408":1,"417":1,"537":1,"553":1}}],["функциональной",{"2":{"96":1,"450":1}}],["функционально",{"2":{"23":1}}],["функционал",{"2":{"9":1,"13":1,"26":1,"43":1,"51":1,"407":1,"483":1,"489":1,"538":1,"542":1,"570":1,"574":1}}],["функционала",{"2":{"9":1,"32":1,"80":1,"114":1,"446":2,"490":1,"537":1,"538":1,"540":1,"542":1,"570":1,"571":1,"579":1}}],["фундаментальное",{"2":{"465":1,"482":1}}],["фундаментальной",{"2":{"222":1}}],["фундаментальными",{"2":{"352":1}}],["фундаментальный",{"2":{"325":1}}],["фундаментальную",{"2":{"283":1}}],["фундаментальная",{"2":{"257":1}}],["фундамента",{"2":{"26":1}}],["фракционирование",{"2":{"378":1}}],["фрагментов",{"2":{"549":1}}],["фрагментом",{"2":{"178":1,"284":1}}],["фрагменте",{"2":{"294":1,"364":1}}],["фрагменты",{"2":{"257":1,"542":1,"549":1}}],["фрагментам",{"2":{"329":1,"431":1,"448":1}}],["фрагментах",{"2":{"264":1}}],["фрагмента",{"2":{"223":1,"325":1,"365":1,"457":1}}],["фрагмент",{"2":{"162":1,"174":1,"178":1,"258":1,"264":1,"290":1,"339":1,"363":1}}],["фреймворку",{"2":{"230":1,"270":1}}],["фреймворке",{"2":{"222":1,"446":1,"482":1}}],["фреймворки",{"2":{"210":2,"211":2,"220":1,"221":1,"222":2,"224":1,"234":1,"270":1,"482":2}}],["фреймворков",{"2":{"207":1,"211":1,"214":1,"221":1,"222":2,"241":1,"382":1,"418":1,"482":1,"538":1,"541":1}}],["фреймворком",{"2":{"132":1,"153":1,"211":1,"217":1,"221":1,"225":1,"227":1,"240":1,"242":2,"446":1,"570":1}}],["фреймворк",{"0":{"212":1,"221":1,"222":1,"389":1},"1":{"216":1,"217":1,"218":1,"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"232":1,"233":1,"234":1,"235":1,"236":1,"237":1,"238":1,"239":1,"240":1,"241":1,"242":1},"2":{"127":2,"209":1,"210":1,"211":2,"212":1,"221":1,"222":6,"223":1,"224":1,"233":2,"234":1,"250":1,"259":1,"278":1,"283":1,"289":1,"329":1,"341":1,"348":1,"355":1,"377":1,"382":1,"389":1,"395":1,"450":1,"456":1,"541":1}}],["фреймворках",{"0":{"482":1},"2":{"359":1,"413":1,"418":1}}],["фреймворками",{"0":{"211":1},"1":{"212":1},"2":{"210":1,"453":1}}],["фреймворка",{"2":{"20":1,"125":1,"127":1,"207":1,"211":1,"217":2,"221":1,"222":3,"223":1,"250":1,"266":2,"290":1,"314":1,"356":1,"382":2,"383":1,"389":1,"403":1,"446":2,"454":1,"541":1}}],["фронте",{"2":{"123":3,"126":2,"479":2,"482":1,"483":2,"491":1}}],["фронтендом",{"2":{"125":1}}],["фронтенды",{"2":{"62":1}}],["фронтенда",{"2":{"10":1,"11":1,"23":1,"41":2,"59":1,"82":1,"449":1,"450":3,"491":1,"542":2}}],["фронтенд",{"0":{"482":1},"2":{"4":1,"6":1,"20":1,"41":1,"50":1,"124":1,"329":1,"376":1,"377":1,"425":1,"431":1,"441":1,"448":1,"479":1,"481":1,"482":1,"483":1,"492":1,"541":1}}],["фронтендеру",{"2":{"401":1}}],["фронтендера",{"0":{"124":1}}],["фронтенде",{"0":{"81":1},"1":{"82":1,"83":1},"2":{"3":1,"6":1,"13":1,"47":1,"111":1,"375":1,"450":2,"479":1,"482":2,"483":1,"491":1}}],["фронту",{"2":{"123":1,"124":1}}],["фронт",{"2":{"123":3,"124":2,"441":1}}],["фронта",{"2":{"123":1,"124":1,"482":1}}],["фронтэнде",{"2":{"482":1}}],["фронтэндер",{"2":{"124":1}}],["фронтэнд",{"0":{"483":1},"1":{"484":1,"485":1,"486":1,"487":1,"488":1,"489":1},"2":{"123":1,"124":1,"126":1,"502":1}}],["фабричной",{"2":{"412":1}}],["фабрики",{"2":{"313":2}}],["фабрика",{"0":{"313":1}}],["фаренгейта",{"2":{"318":1,"319":2}}],["фасадов",{"2":{"323":1}}],["фасадный",{"2":{"323":1}}],["фасада",{"2":{"322":1,"323":1}}],["фасад",{"0":{"323":1},"2":{"283":1,"319":1,"323":1}}],["фантазийный",{"2":{"245":1}}],["фактического",{"2":{"424":1,"453":1,"492":1}}],["фактические",{"2":{"405":1}}],["фактически",{"2":{"255":1,"341":1}}],["факт",{"2":{"172":1,"450":1}}],["факто",{"2":{"126":1,"356":1,"546":1}}],["фактора",{"2":{"378":1}}],["фактор",{"2":{"320":1,"376":1,"482":1}}],["фактором",{"2":{"264":1,"318":1,"336":1,"370":1}}],["факторов",{"2":{"41":1,"324":1,"451":1,"454":2}}],["факторизация",{"2":{"13":1}}],["файлом",{"2":{"147":1,"210":1,"276":1}}],["файловой",{"2":{"270":1}}],["файловый",{"2":{"145":1}}],["файлов",{"0":{"134":1,"151":1,"239":1,"448":1},"2":{"11":2,"38":1,"77":1,"118":1,"127":1,"140":1,"143":2,"149":1,"153":2,"203":1,"209":1,"211":1,"215":1,"224":1,"252":2,"264":1,"279":1,"365":1,"424":1,"425":1,"438":1,"440":1,"456":2,"463":1,"471":3}}],["файлу",{"2":{"143":1,"214":1,"290":1,"332":1}}],["файл",{"0":{"272":1},"1":{"273":1,"274":1,"275":1},"2":{"121":1,"143":1,"144":1,"145":1,"147":1,"148":2,"149":2,"160":2,"166":1,"203":2,"210":12,"211":2,"212":3,"213":2,"214":5,"216":1,"224":3,"225":3,"252":2,"263":2,"264":2,"268":1,"270":1,"272":4,"276":3,"278":2,"279":2,"305":1,"307":1,"338":1,"342":1,"343":1,"348":1,"354":1,"358":1,"359":4,"362":1,"412":1,"415":1,"416":1,"424":4,"438":1,"441":1,"455":1,"456":5,"460":5,"461":1,"463":1,"464":2,"465":1,"471":4,"472":2,"474":6,"478":1,"492":2,"549":1}}],["файле",{"2":{"89":1,"92":1,"121":1,"212":1,"225":1,"251":2,"264":1,"272":1,"278":1,"332":1,"338":1,"344":1,"362":2,"365":1,"413":1,"463":1,"464":1,"474":1,"524":1,"588":1,"591":2}}],["файлам",{"2":{"143":1,"210":1}}],["файлами",{"2":{"11":1,"38":1,"148":1,"263":1,"471":1}}],["файлах",{"2":{"118":1,"441":1,"456":2,"457":1,"462":2,"463":3}}],["файла",{"2":{"17":1,"125":1,"128":1,"144":1,"146":1,"148":1,"210":1,"212":1,"213":1,"252":1,"263":2,"270":1,"272":2,"275":2,"306":1,"332":1,"333":1,"345":2,"348":1,"424":3,"457":2,"463":1,"471":1,"492":1,"508":1,"535":2}}],["файлы",{"0":{"38":1,"386":1},"2":{"6":1,"11":1,"17":1,"134":1,"144":2,"145":1,"150":1,"151":2,"152":1,"208":1,"209":2,"210":4,"213":2,"224":1,"244":1,"263":1,"270":1,"278":1,"279":1,"344":1,"354":1,"356":1,"386":1,"424":1,"437":1,"440":1,"456":1,"466":2,"467":1,"471":5,"472":3,"473":1,"474":1,"492":1,"547":1,"572":1}}],["зря",{"2":{"490":1}}],["зрения",{"2":{"11":1,"23":1,"96":1,"112":1,"122":1,"131":1,"157":1,"324":1,"335":2,"350":1,"362":1,"450":3,"501":1}}],["зерна",{"2":{"491":1}}],["зеркально",{"2":{"346":2,"347":1}}],["зеркальное",{"2":{"143":1}}],["зеленого",{"2":{"457":1}}],["звездного",{"2":{"531":1}}],["звездным",{"2":{"511":1,"528":1}}],["звездочка",{"2":{"472":1}}],["звеном",{"2":{"345":1}}],["звучало",{"2":{"455":1}}],["звучит",{"2":{"224":1}}],["звуков",{"2":{"157":1}}],["зону",{"2":{"286":1}}],["зона",{"2":{"222":1}}],["змеином",{"2":{"237":1}}],["злоупотреблять",{"2":{"331":1,"433":1}}],["злоупотребление",{"2":{"175":1}}],["злой",{"2":{"155":1}}],["знал",{"2":{"491":1}}],["знатоков",{"2":{"441":1}}],["знать",{"2":{"127":1,"138":1,"143":1,"205":1,"209":1,"222":1,"224":1,"226":1,"259":1,"268":1,"277":1,"308":1,"318":1,"352":1,"368":1,"440":1,"491":2}}],["знающих",{"2":{"491":1}}],["знают",{"2":{"405":1,"490":1}}],["знаю",{"2":{"326":1}}],["знанию",{"2":{"491":1}}],["знаний",{"2":{"422":1,"491":1}}],["знание",{"2":{"283":1,"383":1}}],["знаниями",{"2":{"352":1}}],["знания",{"2":{"205":1,"221":1,"243":1,"259":1,"267":1,"283":1,"329":1,"352":1,"379":1,"383":1,"491":2}}],["знаем",{"2":{"226":1,"259":1,"324":1,"331":1,"368":1,"462":1,"464":1}}],["знает",{"2":{"224":1,"226":2,"318":1,"344":1}}],["знаете",{"2":{"124":1,"376":1}}],["знаки",{"2":{"472":1}}],["знаку",{"2":{"359":1}}],["знаками",{"2":{"377":1}}],["знака",{"2":{"237":1,"322":1}}],["знак",{"2":{"223":1,"343":1,"359":1,"472":1}}],["знаке",{"2":{"215":1}}],["знакомимся",{"2":{"397":1}}],["знакомиться",{"2":{"455":1}}],["знакомит",{"2":{"392":1,"395":1}}],["знакомясь",{"2":{"352":1}}],["знаком",{"2":{"236":1,"257":1,"368":1}}],["знакома",{"2":{"208":1,"264":1}}],["знакомым",{"2":{"225":1,"481":1}}],["знакомы",{"2":{"161":1,"289":1,"384":1}}],["знакомой",{"2":{"290":1}}],["знакомо",{"2":{"158":1}}],["знакомого",{"2":{"77":1}}],["знакомстве",{"2":{"327":1}}],["знакомство",{"2":{"139":1}}],["знакомства",{"2":{"139":2,"153":1,"299":1}}],["знаменитая",{"2":{"162":1}}],["значимых",{"2":{"213":1}}],["значимое",{"2":{"210":1}}],["значителен",{"2":{"344":1}}],["значительную",{"2":{"222":1,"354":1}}],["значительный",{"2":{"222":1,"340":1,"492":1}}],["значительные",{"2":{"221":1,"320":1,"331":1}}],["значительными",{"2":{"312":1}}],["значительным",{"2":{"133":1}}],["значительных",{"2":{"62":1}}],["значительной",{"2":{"158":1,"162":1,"221":1,"324":1,"354":1,"466":1}}],["значительно",{"2":{"142":1,"222":1,"223":1,"270":1,"326":1,"329":1,"350":1,"378":1,"431":1,"441":1,"449":1,"490":1,"492":1,"541":1}}],["значительного",{"2":{"133":1,"266":1}}],["значительное",{"2":{"69":1,"446":1,"453":1}}],["значит",{"2":{"12":1,"88":1,"375":1}}],["значков",{"2":{"191":1,"213":2}}],["значком",{"2":{"171":1,"173":1,"181":1}}],["значке",{"2":{"173":1,"275":1}}],["значками",{"2":{"213":2}}],["значка",{"2":{"173":2,"273":1}}],["значки",{"0":{"173":1},"2":{"162":1,"211":1,"213":5,"270":1,"374":1}}],["значок",{"2":{"158":1,"160":1,"173":1,"181":1,"184":2,"213":2}}],["значений",{"2":{"226":1,"253":1,"331":1,"342":1,"411":1,"413":1,"417":1,"418":1,"462":1}}],["значению",{"2":{"217":1,"226":2,"253":1,"417":1,"457":2,"462":2}}],["значении",{"2":{"124":1,"218":1}}],["значением",{"2":{"217":1,"228":1,"253":1,"254":1,"258":1,"310":1,"319":1,"405":1,"406":1,"457":1,"461":1,"462":1,"482":1}}],["значение",{"2":{"95":1,"132":1,"142":2,"179":1,"199":1,"217":2,"222":4,"223":1,"226":6,"228":2,"229":2,"231":1,"232":2,"234":1,"253":3,"254":3,"258":1,"259":1,"263":1,"274":1,"304":1,"319":5,"321":1,"324":1,"325":1,"326":2,"341":1,"342":1,"347":2,"362":2,"371":1,"405":1,"410":1,"412":2,"420":2,"421":1,"424":1,"457":1,"458":1,"461":1,"462":4,"563":1,"589":1}}],["значениями",{"2":{"253":1,"263":1,"372":1,"420":1}}],["значениям",{"2":{"131":1}}],["значения",{"2":{"95":1,"131":1,"132":1,"144":1,"145":1,"179":1,"217":3,"222":1,"223":1,"226":1,"228":1,"230":1,"232":1,"234":1,"237":1,"252":1,"253":2,"255":1,"272":1,"277":1,"324":1,"326":4,"343":1,"368":1,"370":1,"413":1,"417":1,"418":2,"419":1,"421":1,"454":1,"459":1,"462":1,"482":1,"506":1,"531":1,"535":1,"586":1}}],["зная",{"2":{"59":1,"215":1,"270":1}}],["здравом",{"2":{"292":1}}],["здравым",{"2":{"16":1}}],["здесь",{"0":{"64":1,"381":1},"2":{"3":1,"5":1,"12":1,"61":1,"64":1,"126":1,"127":2,"133":1,"137":1,"140":1,"142":2,"143":1,"145":2,"147":1,"148":1,"150":1,"152":2,"159":2,"161":1,"164":1,"166":1,"169":1,"187":1,"191":1,"196":1,"207":1,"208":1,"209":3,"210":5,"211":1,"214":1,"221":1,"224":1,"225":2,"226":2,"233":1,"234":2,"244":1,"257":3,"263":1,"264":1,"270":2,"276":1,"277":1,"288":1,"290":4,"303":1,"310":1,"311":2,"312":1,"315":2,"317":4,"319":3,"320":1,"324":1,"332":2,"337":1,"338":2,"341":1,"356":1,"362":1,"365":1,"368":2,"371":1,"375":1,"376":1,"377":1,"405":1,"407":1,"412":1,"413":1,"417":1,"418":2,"450":2,"454":1,"459":1,"462":1,"463":2,"474":1,"477":1}}],["зазываниях",{"2":{"484":1}}],["зажимает",{"2":{"482":1}}],["зафиксирован",{"2":{"474":1}}],["зафиксированное",{"2":{"33":1}}],["заинтересованные",{"2":{"384":1}}],["заимствован",{"2":{"287":1}}],["зашифрованных",{"2":{"371":1}}],["зашифрованном",{"2":{"370":1}}],["займет",{"2":{"325":1}}],["застывший",{"2":{"331":1}}],["застыть",{"2":{"331":1}}],["заставки",{"2":{"590":1}}],["заставка",{"2":{"277":1,"576":1,"590":2}}],["заставим",{"2":{"318":1}}],["заставив",{"2":{"202":1}}],["заставить",{"2":{"193":1,"194":1,"199":1,"203":1,"405":1,"419":1}}],["заставили",{"2":{"23":1,"417":1}}],["заставляя",{"2":{"179":1}}],["заставляет",{"2":{"165":1,"331":1}}],["заставлять",{"2":{"123":1}}],["заслуживает",{"2":{"310":1}}],["заумной",{"2":{"293":1}}],["заодно",{"2":{"219":1}}],["заложим",{"2":{"327":1}}],["заложили",{"2":{"207":1}}],["залог",{"2":{"167":1}}],["залогинился",{"2":{"123":1,"450":1}}],["заняв",{"2":{"210":1}}],["занят",{"2":{"331":1}}],["занятость",{"2":{"176":1}}],["занято",{"2":{"176":1}}],["занять",{"2":{"176":1,"479":1}}],["занята",{"2":{"176":2}}],["заново",{"2":{"160":1}}],["занимающиеся",{"2":{"453":1}}],["занимающие",{"2":{"446":1,"570":1}}],["занимаются",{"2":{"479":1}}],["занимают",{"2":{"133":1,"181":1,"243":1,"440":1}}],["занимать",{"2":{"418":2}}],["заниматься",{"2":{"65":1}}],["занимается",{"2":{"157":1,"213":1}}],["занимает",{"2":{"96":1,"134":1,"221":1,"318":1,"331":2,"511":1,"515":1,"528":1}}],["заботу",{"2":{"482":1}}],["заботы",{"2":{"477":1}}],["заботитесь",{"2":{"439":1}}],["забот",{"2":{"314":1}}],["заботятся",{"2":{"145":1,"383":1}}],["забыл",{"2":{"487":1}}],["забыть",{"2":{"291":1,"310":1,"446":1}}],["забывает",{"2":{"186":1}}],["забывать",{"2":{"152":1}}],["заблокировать",{"2":{"263":1}}],["забудьте",{"2":{"212":1}}],["забрасывается",{"2":{"204":1}}],["защищенную",{"2":{"375":1}}],["защищенному",{"2":{"271":1,"375":1}}],["защищенное",{"2":{"270":1}}],["защищать",{"2":{"152":1}}],["защитить",{"2":{"398":1}}],["защит",{"2":{"359":1,"370":1}}],["защите",{"2":{"153":1}}],["защита",{"0":{"152":1},"2":{"139":1,"370":1}}],["защиты",{"2":{"125":1,"139":1,"371":1}}],["зачем",{"0":{"466":1},"2":{"133":1,"282":1,"318":1,"362":1,"450":1,"481":1}}],["зачастую",{"2":{"47":1,"197":1,"204":1,"205":1,"248":1,"454":1,"479":1}}],["загуглите",{"2":{"484":1}}],["заглянуть",{"2":{"416":1,"441":1}}],["заглавными",{"2":{"237":1,"240":1}}],["загрязнять",{"2":{"362":1}}],["загромождает",{"2":{"226":1}}],["загружен",{"2":{"178":1,"213":1,"359":1}}],["загружено",{"2":{"140":1}}],["загружают",{"2":{"362":1}}],["загружаются",{"2":{"178":1}}],["загружаясь",{"2":{"437":1}}],["загружая",{"2":{"362":1}}],["загружает",{"2":{"203":1,"209":1,"252":1}}],["загружаемого",{"2":{"508":1}}],["загружаем",{"2":{"90":1,"104":1,"109":1,"115":1,"121":1}}],["загружать",{"2":{"145":1,"213":1,"224":1,"234":1}}],["загружаться",{"2":{"133":1,"210":1,"252":1}}],["загрузился",{"2":{"276":2}}],["загрузит",{"2":{"224":2,"356":1}}],["загрузить",{"2":{"83":1,"144":1,"151":1,"203":1,"252":2,"354":1,"386":1,"460":1,"464":1}}],["загрузчик",{"2":{"252":1}}],["загрузку",{"2":{"210":1,"252":1,"280":1,"310":1,"359":1,"373":1,"483":1}}],["загрузке",{"2":{"179":1,"190":1,"191":2,"312":1,"362":1,"424":1,"441":1,"455":1,"492":1}}],["загрузка",{"2":{"129":1,"252":2,"354":1,"355":1,"362":1,"424":1,"433":1,"468":1}}],["загрузки",{"0":{"128":1},"2":{"127":1,"128":1,"178":2,"203":3,"210":1,"211":1,"252":2,"279":1,"331":2,"354":2,"359":1,"424":2,"437":1,"446":1,"455":1,"570":1,"590":1}}],["заголовки",{"2":{"345":1,"374":2}}],["заголовках",{"2":{"374":1}}],["заголовка",{"2":{"263":1,"274":1,"371":1}}],["заголовком",{"2":{"185":1,"194":1,"277":1,"320":1,"561":1}}],["заголовков",{"2":{"125":1}}],["заголовок",{"2":{"217":3,"263":1,"264":1,"365":1,"374":1,"410":1}}],["загорается",{"2":{"111":1}}],["захваченного",{"2":{"462":1}}],["захват",{"2":{"462":1}}],["захватывая",{"2":{"183":1}}],["захвата",{"2":{"164":1,"217":1}}],["захостите",{"2":{"491":1}}],["захостить",{"2":{"124":1,"425":1}}],["захотеть",{"2":{"222":1}}],["захотим",{"2":{"51":1,"114":1}}],["захардкодим",{"2":{"108":1}}],["замаскированная",{"0":{"203":1}}],["замаскирована",{"2":{"198":1}}],["замаскировать",{"2":{"170":1}}],["заманить",{"2":{"196":1}}],["заморозить",{"2":{"325":1}}],["заморожено",{"2":{"324":1}}],["заморочки",{"2":{"123":1}}],["заморочится",{"2":{"96":1}}],["заморачиваться",{"2":{"124":1}}],["замедление",{"2":{"354":1}}],["замечаем",{"2":{"319":1}}],["замечаниями",{"2":{"257":1}}],["замечание",{"2":{"4":1,"65":1,"105":1,"343":1,"418":1}}],["замечательную",{"2":{"369":1}}],["замечательным",{"2":{"223":1}}],["замечательно",{"0":{"213":1}}],["заметка",{"2":{"491":1}}],["заметку",{"2":{"342":1}}],["заметки",{"2":{"247":1,"341":1,"342":1,"492":1}}],["заметок",{"2":{"341":1,"342":2}}],["заметите",{"2":{"342":1}}],["заметить",{"2":{"226":1,"320":1,"326":1,"344":1,"356":1,"365":2,"457":1,"471":1}}],["заметили",{"2":{"310":1,"457":1}}],["заметим",{"2":{"272":1}}],["заметьте",{"2":{"202":1,"246":1,"311":1,"325":1,"421":1,"474":1}}],["заметным",{"2":{"177":1}}],["заметное",{"2":{"134":1}}],["замену",{"2":{"446":2,"482":1,"485":1}}],["замены",{"2":{"287":1,"446":1}}],["заменяет",{"2":{"367":1}}],["заменяем",{"2":{"88":1,"89":1}}],["заменяются",{"2":{"236":1}}],["заменяющий",{"2":{"127":1}}],["заменяя",{"2":{"142":1}}],["замена",{"2":{"127":2,"326":1,"446":1}}],["заменой",{"2":{"104":1,"515":1}}],["заменится",{"2":{"234":1}}],["замените",{"2":{"233":1}}],["заменить",{"2":{"122":1,"131":1,"483":1,"490":2,"563":1}}],["заменим",{"2":{"104":2}}],["заменив",{"2":{"82":1,"325":1,"417":1}}],["заменено",{"2":{"223":1}}],["заменен",{"2":{"131":2,"257":1}}],["замене",{"2":{"41":1,"83":1}}],["заранее",{"2":{"492":1}}],["заработать",{"2":{"62":1,"63":1}}],["зародились",{"2":{"221":1}}],["заряде",{"2":{"123":1}}],["зарекомендовавшие",{"2":{"221":1}}],["зарекомендовавшую",{"2":{"39":1}}],["зарегистрируйте",{"2":{"491":1}}],["зарегистрирует",{"2":{"190":1}}],["зарегистрировали",{"2":{"372":1,"373":1}}],["зарегистрировано",{"2":{"371":1}}],["зарегистрированной",{"2":{"376":1}}],["зарегистрированное",{"2":{"311":1}}],["зарегистрированным",{"2":{"263":1}}],["зарегистрированных",{"2":{"59":1,"368":1}}],["зарегистрирован",{"2":{"142":1,"278":1,"375":1}}],["зарегистрировать",{"2":{"95":1,"263":1,"279":1,"311":1,"315":1}}],["зарегистрироваться",{"2":{"58":1,"371":1,"491":1}}],["зарезервированный",{"2":{"184":1}}],["зарезервированных",{"2":{"142":1}}],["зарезервированное",{"2":{"142":1,"226":1,"333":1}}],["запятыми",{"2":{"343":1}}],["запятой",{"2":{"142":1}}],["запланированных",{"2":{"338":1}}],["запланированы",{"2":{"316":1}}],["запишем",{"2":{"247":1}}],["записывается",{"2":{"377":1}}],["записываются",{"2":{"238":1}}],["записью",{"2":{"343":1}}],["запись",{"2":{"142":2,"343":1}}],["записать",{"2":{"142":1,"418":1}}],["записанный",{"2":{"123":1}}],["записи",{"0":{"142":1},"1":{"144":1},"2":{"59":1,"123":1,"142":4,"154":1,"226":1,"338":1,"377":1,"420":1}}],["записей",{"2":{"51":1,"142":2,"153":1,"184":1,"456":1}}],["запасного",{"2":{"234":1}}],["запомните",{"2":{"225":1}}],["запомнить",{"2":{"172":1,"318":1}}],["запоминается",{"2":{"591":1}}],["запоминаемость",{"2":{"167":1}}],["запоминанием",{"2":{"371":1}}],["запоминать",{"2":{"207":1}}],["заполнено",{"2":{"450":1}}],["заполнен",{"2":{"365":1}}],["заполнения",{"2":{"165":1,"263":1}}],["заполняется",{"2":{"363":1}}],["заполнять",{"2":{"275":1}}],["заполнял",{"2":{"257":1}}],["заполняющего",{"2":{"194":1}}],["заполнителя",{"2":{"342":1}}],["заполнить",{"2":{"311":1}}],["заполним",{"2":{"217":1}}],["заполнили",{"2":{"85":1}}],["запутанным",{"2":{"462":1}}],["запутать",{"2":{"414":1}}],["запутывающее",{"2":{"450":1}}],["запутывает",{"2":{"165":1}}],["запущен",{"2":{"331":1,"479":1}}],["запустили",{"2":{"462":1}}],["запустив",{"2":{"365":2}}],["запустим",{"2":{"224":1,"278":1}}],["запустится",{"2":{"465":1}}],["запустит",{"2":{"209":1,"210":1}}],["запустите",{"2":{"152":1,"217":1,"453":1,"468":1}}],["запустить",{"2":{"59":1,"124":2,"151":1,"209":3,"212":1,"277":1,"340":1,"349":1,"410":1,"441":1,"457":2,"459":1,"465":2,"469":1,"471":1,"475":1,"483":1}}],["запуском",{"2":{"476":1}}],["запуске",{"2":{"251":1,"252":1,"270":1,"274":1,"356":1,"421":1,"427":1,"448":1,"460":1,"492":2}}],["запуск",{"0":{"536":1},"2":{"210":1,"277":1,"413":1,"451":1,"453":1,"457":1}}],["запуску",{"2":{"152":1}}],["запускалось",{"2":{"492":1}}],["запускают",{"2":{"476":1}}],["запускаются",{"2":{"226":1,"441":1}}],["запускается",{"2":{"331":1,"376":1,"440":1}}],["запускает",{"2":{"224":1,"277":2,"362":1,"368":1,"476":1}}],["запускаем",{"2":{"121":1,"263":1,"406":1,"407":1}}],["запускаться",{"2":{"331":1}}],["запускать",{"2":{"179":1,"210":3,"331":1,"365":2,"377":1,"457":1,"460":1,"468":1,"588":1}}],["запуска",{"0":{"128":1},"2":{"127":1,"128":1,"131":2,"277":1,"344":1,"375":2,"384":1,"405":1,"410":1,"455":1,"456":2,"465":1}}],["запрограммировать",{"2":{"476":1}}],["запрограммированной",{"2":{"278":1}}],["запрошенное",{"2":{"319":1}}],["запрошен",{"2":{"125":1}}],["запросом",{"2":{"492":1}}],["запросов",{"2":{"11":1,"40":1,"56":1,"59":1,"122":1,"125":1,"126":2,"145":1,"146":1,"349":3,"368":1,"369":1,"508":1,"546":1}}],["запросу",{"2":{"187":1,"369":1,"467":1}}],["запросить",{"2":{"174":1,"377":1}}],["запросами",{"2":{"299":1}}],["запросам",{"2":{"125":1}}],["запроса",{"2":{"122":1,"125":4,"277":1,"335":1,"338":1,"342":1,"345":1,"346":1,"347":2,"349":3,"362":2,"364":1,"368":1,"369":1,"371":1,"372":2,"373":2,"376":1,"379":1,"492":1}}],["запросе",{"2":{"50":1,"122":1,"123":2,"349":1}}],["запросы",{"2":{"43":1,"44":1,"50":1,"56":2,"59":2,"82":1,"126":1,"143":1,"145":1,"146":1,"303":1,"349":2,"441":2,"492":2}}],["запрос",{"2":{"41":1,"44":1,"59":1,"83":1,"122":1,"125":3,"143":1,"145":1,"147":1,"209":1,"277":3,"278":1,"340":1,"344":2,"345":1,"347":1,"349":1,"370":1,"376":1,"464":1,"508":3}}],["запрещены",{"2":{"123":1}}],["запрашивают",{"2":{"418":1}}],["запрашивающий",{"2":{"123":1,"377":1}}],["запрашиваем",{"2":{"377":1}}],["запрашиваемая",{"2":{"374":1}}],["запрашиваемого",{"2":{"125":1,"420":1}}],["запрашиваемому",{"2":{"123":1}}],["запрашивает",{"2":{"125":1,"204":1}}],["запрашивать",{"2":{"122":1,"124":1}}],["завернуть",{"2":{"325":1}}],["завершится",{"2":{"474":1}}],["завершиться",{"2":{"453":1}}],["завершить",{"2":{"263":3}}],["завершая",{"2":{"474":1}}],["завершают",{"2":{"418":1}}],["завершаться",{"2":{"331":1}}],["завершает",{"2":{"283":1,"457":1}}],["завершена",{"2":{"331":1}}],["завершенного",{"2":{"278":1}}],["завершенные",{"2":{"217":2}}],["завершенных",{"2":{"217":1}}],["завершение",{"2":{"411":1}}],["завершении",{"2":{"324":1}}],["завершению",{"2":{"263":1}}],["завершения",{"2":{"215":1,"324":1,"331":1,"332":1,"348":1,"460":1,"468":1}}],["зависеть",{"2":{"324":1,"373":1}}],["зависанию",{"2":{"324":1}}],["завис",{"2":{"176":1}}],["зависящая",{"2":{"483":1}}],["зависящих",{"2":{"324":1}}],["зависящие",{"2":{"217":1,"482":1}}],["зависящей",{"2":{"165":1}}],["зависят",{"2":{"158":1,"270":1,"283":1}}],["зависимой",{"2":{"305":1,"312":1}}],["зависимое",{"2":{"222":1}}],["зависимостями",{"2":{"210":1,"307":1,"328":1}}],["зависимость",{"2":{"96":1,"262":1,"263":2,"279":1,"307":1,"309":1,"310":3,"311":3,"312":1,"450":1,"464":1,"465":1,"484":1,"490":2,"538":1}}],["зависимостей",{"0":{"305":1,"484":1},"1":{"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1},"2":{"89":1,"209":1,"210":2,"222":1,"237":1,"249":1,"254":1,"255":1,"256":1,"260":1,"266":1,"283":1,"305":1,"306":1,"307":1,"309":2,"310":3,"311":2,"313":1,"319":1,"407":1,"446":1,"455":1,"456":1,"482":2,"515":1,"538":1,"571":1}}],["зависимости",{"0":{"255":1},"2":{"20":2,"56":1,"96":2,"123":1,"127":1,"142":1,"151":1,"174":1,"189":1,"209":3,"210":1,"211":1,"217":1,"222":2,"225":1,"226":1,"230":1,"251":1,"252":1,"257":1,"259":1,"277":1,"285":1,"295":2,"299":1,"305":1,"306":1,"307":1,"309":2,"310":4,"312":2,"315":1,"317":1,"327":1,"331":2,"341":2,"344":1,"348":1,"356":1,"370":1,"418":1,"437":1,"451":1,"456":1,"460":1,"464":2,"469":1,"472":1,"491":1,"492":1,"541":1}}],["зависит",{"2":{"117":1,"122":1,"125":1,"129":1,"164":1,"222":1,"223":1,"283":1,"309":1,"370":2,"371":1,"376":1,"451":1,"466":1,"476":1,"541":1}}],["завоевать",{"2":{"96":1}}],["завязанные",{"2":{"39":1}}],["закэшировать",{"2":{"492":1}}],["закладывающих",{"2":{"268":1}}],["заключаться",{"2":{"419":1}}],["заключает",{"2":{"294":1}}],["заключается",{"2":{"172":1,"173":2,"174":1,"179":1,"186":1,"189":1,"195":1,"196":1,"197":1,"199":1,"213":1,"215":1,"222":4,"226":1,"234":1,"246":1,"259":1,"264":1,"268":1,"290":1,"291":1,"293":1,"307":1,"312":2,"316":1,"320":1,"326":1,"349":1,"362":2,"375":1,"376":1,"418":2,"431":1,"448":1,"458":1,"459":1,"461":1,"462":1,"463":1}}],["заключенного",{"2":{"224":1}}],["заключена",{"2":{"34":1}}],["закрепления",{"2":{"282":1}}],["закрепить",{"2":{"242":1,"327":1,"379":1}}],["закрываем",{"2":{"265":1}}],["закрывать",{"2":{"263":1}}],["закрытый",{"2":{"424":1}}],["закрытых",{"2":{"377":1}}],["закрытым",{"2":{"370":1}}],["закрытие",{"2":{"263":1}}],["закрытия",{"2":{"158":1,"164":1}}],["закрыть",{"2":{"201":2}}],["закомитьте",{"2":{"474":1}}],["закоммичен",{"2":{"474":1}}],["закоммитьте",{"2":{"474":1}}],["закоммитили",{"2":{"472":1}}],["закомментируем",{"2":{"121":1}}],["закодированное",{"2":{"339":1}}],["закодированные",{"2":{"312":1,"371":1}}],["законченный",{"2":{"491":1}}],["закончите",{"2":{"382":1}}],["закончить",{"2":{"347":1}}],["закончила",{"2":{"412":1}}],["закончилась",{"2":{"139":1}}],["закончили",{"2":{"263":1,"281":1}}],["законодательством",{"2":{"370":1}}],["закономерности",{"2":{"205":1}}],["законом",{"2":{"166":1}}],["законе",{"2":{"164":1,"165":1}}],["закона",{"2":{"164":2,"165":2}}],["закон",{"0":{"164":1,"165":1},"2":{"164":1,"165":1,"222":1,"464":1}}],["законы",{"0":{"163":1},"2":{"163":1,"166":1}}],["заканчивается",{"2":{"418":1}}],["заканчивая",{"2":{"77":2,"153":1,"191":1,"225":1,"246":1,"284":1,"286":1,"378":1}}],["заказа",{"2":{"195":2}}],["заказами",{"2":{"59":1}}],["заказчик",{"2":{"483":1,"487":1}}],["заказчика",{"2":{"68":1}}],["заказчиком",{"2":{"9":1,"12":1}}],["заказ",{"2":{"12":1,"430":1,"448":1}}],["заказов",{"2":{"12":1,"36":1,"80":1}}],["заказываете",{"2":{"26":1}}],["заказы",{"2":{"4":1,"59":1,"114":1}}],["закупаете",{"2":{"26":1}}],["зато",{"2":{"324":1}}],["затушевывает",{"2":{"251":1}}],["затруднена",{"2":{"412":1}}],["затруднение",{"2":{"354":1}}],["затрудняет",{"2":{"186":1,"405":1,"417":1,"418":1}}],["затронуть",{"2":{"365":1}}],["затронуты",{"2":{"343":1}}],["затронуло",{"2":{"135":1}}],["затраченные",{"2":{"344":1}}],["затрагиваемым",{"2":{"502":1}}],["затрагивает",{"2":{"135":1}}],["затрагивая",{"2":{"472":1,"473":1}}],["затрагивают",{"2":{"127":1}}],["затраты",{"2":{"301":1}}],["затратно",{"2":{"41":1}}],["затратами",{"2":{"40":1,"483":1}}],["затрат",{"2":{"12":1,"270":1,"331":1}}],["затем",{"2":{"6":1,"96":1,"98":1,"123":1,"124":1,"128":1,"130":1,"131":1,"142":1,"151":1,"158":1,"189":2,"197":1,"210":1,"217":1,"224":2,"248":1,"258":3,"263":2,"266":1,"278":4,"286":1,"304":2,"306":1,"312":1,"316":2,"322":1,"326":1,"329":1,"331":2,"339":2,"342":1,"362":2,"363":1,"369":1,"371":2,"373":1,"374":1,"375":3,"376":1,"377":1,"382":1,"412":1,"415":1,"418":1,"420":2,"439":1,"457":2,"461":1,"462":2,"465":1,"468":1,"474":2,"476":1,"492":3}}],["задумываемся",{"2":{"190":1}}],["задуман",{"2":{"214":1}}],["задумал",{"2":{"167":1,"194":1,"201":1}}],["задуматься",{"2":{"131":1}}],["задает",{"2":{"446":1}}],["задаем",{"2":{"177":1,"345":1}}],["зададим",{"2":{"362":1}}],["задаст",{"2":{"348":1}}],["задаются",{"2":{"210":1}}],["заданными",{"2":{"365":1}}],["заданный",{"2":{"273":1}}],["заданное",{"2":{"457":1}}],["заданного",{"2":{"324":1,"375":1}}],["заданном",{"2":{"224":1}}],["заданному",{"2":{"124":1,"263":1}}],["задания",{"2":{"309":1}}],["заданиями",{"2":{"265":1}}],["заданий",{"2":{"217":1}}],["задание",{"2":{"176":2,"319":1}}],["задавать",{"2":{"345":1}}],["задаваемые",{"2":{"185":1,"502":1}}],["задав",{"2":{"144":1}}],["задать",{"2":{"123":1,"482":2,"483":1,"517":1}}],["задачу",{"2":{"217":1,"453":1,"542":1}}],["задачей",{"2":{"362":1,"466":1,"482":1}}],["задаче",{"2":{"215":1,"218":1}}],["задач",{"2":{"14":1,"68":1,"70":1,"112":1,"166":2,"173":1,"176":1,"189":1,"210":1,"215":1,"217":6,"265":1,"286":1,"294":1,"316":1,"317":1,"335":1,"338":1,"368":1,"377":1,"541":3}}],["задачи",{"0":{"76":1},"1":{"77":1,"78":1,"79":1,"80":1},"2":{"12":1,"68":1,"80":1,"165":1,"215":2,"217":3,"218":1,"288":1,"294":1,"322":1,"331":2,"336":1,"377":1,"451":1,"453":1,"466":1}}],["задачами",{"2":{"155":1}}],["задача",{"2":{"11":1,"12":1,"158":1,"159":1,"160":1,"183":1,"217":1,"259":1,"323":1,"355":1,"376":1,"441":1,"454":1,"456":2}}],["задержка",{"2":{"340":1}}],["задержкам",{"2":{"252":1}}],["задеплоится",{"2":{"121":1}}],["задействовано",{"2":{"451":1}}],["задействовать",{"0":{"124":1},"2":{"20":1,"492":1}}],["задействуем",{"2":{"17":1}}],["задокументированный",{"2":{"78":1}}],["задокументировать",{"2":{"9":1}}],["за",{"0":{"161":1},"2":{"2":1,"6":1,"41":1,"43":1,"96":4,"114":1,"121":1,"122":1,"123":1,"126":1,"131":1,"141":1,"143":1,"157":1,"161":1,"174":1,"178":1,"179":3,"189":3,"195":1,"208":1,"210":1,"211":1,"213":1,"221":1,"222":1,"226":1,"230":1,"234":3,"240":1,"243":1,"245":2,"247":1,"257":1,"266":1,"268":1,"278":1,"279":1,"288":1,"289":1,"290":3,"291":1,"292":1,"293":1,"309":1,"310":1,"314":1,"315":1,"319":1,"323":2,"324":1,"331":4,"335":1,"342":1,"344":1,"359":1,"362":2,"368":1,"369":1,"370":7,"374":1,"377":2,"387":2,"391":1,"403":1,"407":1,"418":2,"431":1,"433":2,"441":1,"446":2,"448":1,"450":4,"454":1,"457":1,"466":1,"472":1,"475":3,"482":6,"483":1,"491":1,"515":1,"542":1,"570":1,"591":1}}],["тёмной",{"2":{"591":1}}],["тише",{"2":{"441":1}}],["типичными",{"2":{"211":1}}],["типичный",{"2":{"178":1}}],["типичного",{"2":{"178":2}}],["типизировать",{"2":{"433":1}}],["типизированным",{"2":{"288":1}}],["типизируем",{"2":{"20":1}}],["типизация",{"0":{"93":1}}],["типом",{"2":{"253":1,"272":1}}],["типографика",{"2":{"162":1}}],["типографики",{"2":{"157":1,"159":1,"161":1}}],["типов",{"2":{"131":1,"169":2,"171":1,"257":1,"305":1,"331":1,"450":1,"453":1,"479":1,"589":1}}],["типе",{"2":{"145":1,"268":1}}],["тип",{"2":{"142":1,"145":2,"152":1,"162":1,"253":1,"275":1,"332":1,"344":2,"347":1,"349":1,"362":1,"365":1,"369":1,"371":3,"471":1,"490":1}}],["типу",{"2":{"131":1}}],["типыref",{"2":{"450":1}}],["типы",{"0":{"17":1},"1":{"18":1,"19":1},"2":{"16":1,"26":1,"92":1,"93":1,"100":1,"132":1,"142":1,"171":1,"184":1,"232":1,"253":1,"255":1,"332":1,"405":1,"450":1,"457":1,"554":1}}],["типам",{"2":{"157":1}}],["типами",{"2":{"131":1}}],["типах",{"2":{"153":1,"253":1}}],["типа",{"2":{"11":1,"17":2,"43":1,"62":1,"125":1,"152":1,"225":1,"253":1,"255":1,"295":1,"324":1,"341":1,"344":1,"354":1,"377":1,"425":1,"437":1,"440":1,"483":1,"490":3,"491":2,"492":1,"562":1,"589":1}}],["твердые",{"2":{"329":1}}],["творчества",{"2":{"294":1}}],["творческим",{"2":{"249":1}}],["творчески",{"2":{"26":1,"456":1}}],["творческие",{"0":{"26":1}}],["твой",{"2":{"123":1,"124":1,"441":1}}],["твоего",{"2":{"123":1}}],["твоему",{"2":{"123":1,"124":1}}],["твоем",{"2":{"123":1,"441":1}}],["тканей",{"2":{"286":1}}],["тяжеловеса",{"2":{"446":1,"570":1}}],["тяжеловесности",{"2":{"442":1}}],["тяжелые",{"2":{"331":1}}],["тяжелыми",{"2":{"331":1}}],["тяжелым",{"2":{"169":1}}],["тяжесть",{"2":{"151":1}}],["тщательного",{"2":{"431":1,"448":1}}],["тщательно",{"2":{"167":1,"193":1,"454":1}}],["тщательную",{"2":{"108":1}}],["тысячи",{"2":{"192":1,"323":1}}],["тысяч",{"2":{"142":1,"288":1}}],["ты",{"2":{"96":1,"98":2,"123":1,"483":1}}],["тупиковой",{"2":{"492":1}}],["ту",{"2":{"217":1,"315":1,"410":1,"456":1}}],["тумблер",{"2":{"170":4}}],["тумблеры",{"0":{"170":1},"2":{"170":1}}],["туда",{"2":{"47":1,"124":1,"225":1,"486":1}}],["туториал",{"2":{"61":1}}],["тут",{"2":{"41":1,"65":1,"88":1,"114":1,"124":1,"521":1,"532":1}}],["тэгов",{"2":{"490":1}}],["тэг",{"2":{"20":1,"90":1,"104":1,"109":1,"115":1,"543":1}}],["тэги",{"2":{"16":1,"171":1,"576":1,"586":1}}],["тайлвинде",{"2":{"487":1}}],["таймстемпа",{"2":{"424":1}}],["таймер",{"2":{"340":1}}],["таймера",{"2":{"175":1,"375":1}}],["тайм",{"2":{"160":1,"338":1}}],["тарифы",{"2":{"425":1}}],["тарифных",{"2":{"198":1}}],["тараканов",{"0":{"196":1}}],["таблетками",{"2":{"171":1}}],["таблетки",{"0":{"171":1}}],["таблицу",{"2":{"210":1,"213":1}}],["таблицы",{"2":{"51":1,"59":1,"210":1,"213":1,"221":1,"247":1,"305":1,"354":1}}],["таблиц",{"2":{"50":3,"178":1,"211":1,"343":1}}],["таблицам",{"2":{"53":1,"59":1}}],["таблицами",{"2":{"50":1}}],["таблица",{"2":{"17":1,"131":1,"142":1,"145":1,"212":1,"275":1,"354":1,"431":1,"448":1}}],["таблицах",{"2":{"17":2,"44":1,"50":1}}],["таблицей",{"2":{"46":1}}],["таблице",{"2":{"16":1,"51":2,"59":1,"275":1,"354":1}}],["та",{"2":{"160":1,"187":1,"200":1,"374":1}}],["там",{"2":{"29":1,"124":1,"264":1,"407":1,"424":2,"441":1,"450":1,"479":1,"549":1}}],["такая",{"2":{"155":1,"182":1,"197":1,"291":1,"362":1,"370":1,"371":1,"429":1,"431":1,"448":1}}],["такую",{"2":{"106":1,"224":1,"369":1,"371":1,"408":1,"466":1}}],["таком",{"2":{"252":1,"430":1,"448":1}}],["такому",{"2":{"142":1}}],["таковые",{"2":{"263":1,"368":1}}],["таковы",{"2":{"222":1}}],["таковыми",{"2":{"490":1}}],["таковым",{"2":{"202":1}}],["такова",{"2":{"203":1}}],["такового",{"2":{"123":1}}],["такого",{"2":{"178":1,"193":1,"226":1,"270":1,"286":1,"299":1,"310":1,"344":1,"351":1,"354":2,"418":1,"427":1,"448":1}}],["такое",{"0":{"294":1,"354":1,"453":1,"466":1},"2":{"96":2,"123":2,"124":1,"125":1,"126":1,"154":4,"155":1,"160":1,"190":1,"197":1,"206":2,"221":1,"222":2,"224":1,"234":1,"242":1,"248":2,"267":1,"268":1,"270":1,"282":2,"325":1,"328":1,"331":2,"335":1,"336":1,"351":1,"354":2,"377":1,"401":1,"423":2,"424":1,"450":1,"478":2,"479":1,"482":1,"483":1,"490":1,"492":1}}],["такой",{"2":{"17":1,"96":1,"146":1,"152":1,"155":1,"175":1,"182":2,"191":1,"193":1,"195":1,"226":1,"243":1,"254":1,"258":1,"270":1,"287":1,"288":1,"309":1,"313":1,"326":1,"334":1,"363":1,"371":1,"410":1,"459":1,"462":1,"463":1,"481":1,"492":1}}],["также",{"2":{"63":1,"95":1,"108":1,"109":1,"114":1,"121":1,"123":3,"124":1,"127":3,"128":1,"135":2,"136":2,"141":1,"142":3,"147":1,"151":1,"152":4,"153":2,"155":1,"161":2,"162":1,"164":1,"166":1,"167":2,"170":1,"173":1,"185":1,"191":1,"204":1,"205":2,"208":2,"210":5,"212":1,"214":2,"216":1,"217":8,"218":1,"219":3,"221":2,"222":3,"225":3,"226":1,"227":2,"233":2,"234":2,"240":1,"243":1,"253":1,"255":2,"257":2,"259":1,"262":1,"263":1,"264":2,"266":1,"268":1,"270":1,"272":1,"275":1,"277":1,"278":2,"279":1,"280":3,"281":1,"284":1,"287":1,"288":2,"290":1,"293":1,"294":1,"299":1,"303":1,"304":1,"309":2,"312":1,"314":2,"316":3,"318":1,"319":2,"320":1,"321":1,"322":2,"323":1,"325":1,"326":2,"329":4,"331":2,"333":1,"335":1,"337":1,"338":2,"339":1,"341":2,"342":1,"343":1,"344":2,"349":3,"350":2,"352":1,"354":1,"357":3,"359":5,"362":2,"363":2,"365":7,"368":1,"370":1,"371":4,"372":1,"374":1,"375":2,"377":5,"378":3,"382":2,"384":1,"394":1,"396":1,"397":2,"405":1,"407":3,"408":1,"410":2,"412":1,"413":2,"415":1,"418":5,"421":2,"422":1,"425":1,"433":1,"440":1,"441":1,"450":2,"454":2,"456":1,"457":1,"459":1,"462":2,"463":1,"464":2,"465":1,"466":1,"467":1,"472":3,"474":1,"475":3,"476":1,"477":3,"479":1,"482":2,"483":1,"485":1,"490":2,"491":5,"492":1,"500":1,"508":2,"515":1,"535":1,"542":1,"582":1}}],["таки",{"2":{"59":1,"491":1,"492":1}}],["такие",{"2":{"46":1,"62":1,"69":1,"82":1,"136":1,"142":2,"157":1,"158":1,"175":1,"184":1,"195":2,"211":1,"222":1,"232":2,"244":1,"252":2,"253":1,"255":1,"257":2,"284":1,"323":1,"344":1,"369":1,"377":2,"378":1,"430":3,"448":3,"457":1,"462":1,"472":1,"475":1,"542":1}}],["такими",{"2":{"157":1,"175":1,"213":1,"257":1,"286":1,"290":1,"354":1,"384":1,"546":1}}],["таким",{"2":{"17":1,"36":1,"51":1,"56":1,"96":1,"123":2,"124":1,"134":1,"157":1,"159":1,"161":1,"184":1,"197":1,"198":1,"212":1,"214":1,"217":1,"223":1,"224":1,"231":1,"251":1,"254":1,"255":1,"258":1,"278":1,"304":2,"310":1,"318":1,"321":1,"326":1,"332":1,"343":1,"345":1,"355":1,"359":1,"363":1,"368":1,"371":1,"405":1,"456":1,"459":1,"460":1,"462":1,"475":1,"483":1,"490":1}}],["таких",{"2":{"2":1,"4":1,"23":1,"67":1,"151":1,"157":1,"158":1,"163":1,"166":1,"168":1,"169":1,"176":1,"179":2,"191":1,"195":1,"211":2,"259":1,"270":1,"277":1,"288":1,"326":2,"354":1,"359":1,"362":1,"369":2,"371":2,"412":1,"418":1,"451":1,"457":1,"458":1,"466":1,"472":1}}],["так",{"0":{"129":1},"2":{"9":2,"11":1,"14":1,"16":1,"23":1,"26":2,"32":1,"47":1,"62":1,"63":1,"79":1,"104":1,"106":1,"111":1,"112":1,"113":1,"122":1,"123":1,"126":1,"127":1,"134":1,"143":1,"151":1,"155":1,"157":2,"160":1,"164":1,"165":1,"166":1,"171":1,"175":1,"182":1,"187":1,"190":2,"197":1,"202":1,"207":2,"208":2,"209":1,"210":3,"211":1,"212":1,"213":3,"214":2,"216":1,"217":4,"218":1,"220":1,"221":1,"222":1,"223":2,"226":3,"230":2,"240":1,"252":1,"257":4,"258":1,"263":2,"268":1,"270":3,"280":1,"281":1,"286":1,"288":1,"291":2,"293":1,"294":1,"312":1,"313":1,"315":1,"320":3,"324":1,"326":1,"327":1,"328":2,"331":2,"333":1,"335":1,"338":1,"341":1,"344":2,"345":1,"347":1,"349":2,"354":3,"370":2,"371":2,"373":1,"374":1,"375":2,"377":1,"408":1,"411":1,"412":3,"414":1,"417":1,"418":2,"419":1,"421":1,"424":3,"440":1,"441":1,"446":1,"450":3,"453":1,"454":1,"456":2,"457":2,"458":1,"459":1,"460":1,"462":2,"464":1,"467":2,"471":1,"472":1,"474":1,"479":1,"483":1,"491":4,"492":3,"502":2,"508":1,"541":1,"543":1,"545":1,"573":2,"579":1}}],["теcты",{"2":{"479":1}}],["теоретическая",{"2":{"337":1}}],["теоретически",{"2":{"208":1,"222":1,"418":1,"462":1}}],["теоретические",{"2":{"207":1,"483":1}}],["теории",{"2":{"324":2}}],["тесно",{"2":{"432":1}}],["тесной",{"2":{"275":1,"433":1}}],["тесную",{"2":{"312":1}}],["теста",{"2":{"453":1,"456":1,"461":2}}],["тестами",{"2":{"464":2}}],["тестам",{"2":{"450":1}}],["тестироваться",{"2":{"460":1}}],["тестировать",{"0":{"454":1},"2":{"453":1,"454":2,"459":1}}],["тестированию",{"2":{"451":1,"459":1}}],["тестировании",{"2":{"354":1,"458":1,"462":1,"463":1}}],["тестированием",{"2":{"153":1,"479":2}}],["тестирование",{"0":{"72":1,"276":1,"280":1,"397":1,"451":1,"453":1,"463":1,"479":1},"1":{"452":1,"453":1,"454":1,"455":1,"456":1,"457":1,"458":1,"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1,"467":1,"468":1,"469":1,"470":1,"471":1,"472":1,"473":1,"474":1,"475":1,"476":1,"477":1,"478":1},"2":{"67":1,"72":1,"151":1,"208":1,"210":1,"349":1,"451":1,"453":4,"454":1,"462":1,"476":1,"478":1,"479":2}}],["тестирования",{"0":{"348":1},"1":{"349":1},"2":{"43":1,"71":1,"124":1,"249":1,"280":1,"329":2,"346":1,"348":1,"350":1,"377":1,"382":1,"397":1,"401":1,"424":1,"451":1,"453":5,"454":4,"455":2,"456":2,"457":1,"458":1,"459":1,"460":3,"461":1,"465":1,"466":1,"478":2,"479":2,"537":1,"579":1}}],["тестирующее",{"2":{"453":1}}],["тестируемый",{"2":{"456":1}}],["тестируем",{"2":{"348":1}}],["тест",{"2":{"280":1,"346":1,"453":1,"457":3,"459":1,"462":1,"491":1}}],["тестовая",{"2":{"457":1}}],["тестовую",{"2":{"457":1}}],["тестового",{"2":{"451":1,"453":2,"454":1,"457":1,"465":1}}],["тестовой",{"2":{"451":1,"461":2}}],["тестовое",{"2":{"340":1}}],["тестовыми",{"2":{"457":1,"465":1}}],["тестовые",{"2":{"397":1,"456":1,"463":1}}],["тестовый",{"2":{"340":1,"346":1,"347":2,"455":2,"456":4,"458":1,"460":1,"463":2,"465":1}}],["тестовых",{"2":{"152":1,"454":1,"456":1,"457":2}}],["тестов",{"2":{"280":1,"451":2,"453":2,"454":1,"455":1,"456":3,"457":10,"461":1,"462":2,"465":1,"477":1,"479":3}}],["тесты",{"2":{"72":1,"280":1,"453":1,"456":1,"457":3,"459":2,"460":1,"462":1,"463":4,"465":1,"476":1,"479":7,"492":1}}],["тень",{"2":{"483":1}}],["тенденции",{"2":{"490":1}}],["тенденцию",{"2":{"288":1,"466":1}}],["тенденция",{"2":{"194":1}}],["теневым",{"2":{"193":1}}],["тегом",{"2":{"362":1,"474":1}}],["тегов",{"2":{"171":1,"257":1,"321":1}}],["теге",{"2":{"211":1,"227":1}}],["тег",{"2":{"210":1,"211":2,"213":1,"223":1,"225":3,"226":1,"251":1,"320":1,"362":1,"415":1}}],["тегами",{"2":{"257":1}}],["тега",{"2":{"210":1,"212":1,"223":2}}],["теги",{"0":{"171":1},"2":{"257":1}}],["течение",{"2":{"142":1,"226":1,"331":1,"375":1,"376":1,"418":2}}],["течением",{"2":{"133":1,"258":1}}],["телеграм",{"0":{"503":1},"2":{"502":1}}],["телефонную",{"2":{"376":1}}],["телефона",{"2":{"375":1,"376":1}}],["телефон",{"2":{"375":1}}],["телефоны",{"2":{"270":1}}],["теле",{"2":{"122":1,"349":1}}],["телодвижения",{"2":{"123":1}}],["тело",{"2":{"98":1,"415":1}}],["тексте",{"2":{"404":1,"474":1}}],["тексты",{"2":{"375":1}}],["текстом",{"2":{"181":1,"208":1,"213":1}}],["текстов",{"0":{"397":1},"2":{"208":1,"210":2,"243":1,"465":1,"466":1}}],["текстовые",{"2":{"354":1,"409":1}}],["текстовых",{"2":{"269":1,"375":1}}],["текстовым",{"2":{"176":1}}],["текстовый",{"2":{"160":1,"174":1,"208":1,"225":1,"472":1,"492":1}}],["текстового",{"2":{"184":1,"375":1}}],["текстовом",{"2":{"172":1}}],["текстовое",{"2":{"100":1,"492":1}}],["текстовую",{"2":{"169":1}}],["текстовая",{"2":{"142":1}}],["текст",{"2":{"169":1,"171":1,"172":1,"187":1,"194":1,"232":1,"265":1,"363":1,"371":1,"432":1,"461":1,"492":2}}],["текстами",{"0":{"467":1}}],["текста",{"2":{"159":1,"169":1,"177":1,"214":1,"217":3,"265":1,"326":1,"341":1,"457":1,"570":1}}],["текущим",{"2":{"258":1}}],["текущий",{"2":{"209":1,"218":1,"264":1,"367":1}}],["текущей",{"2":{"377":1,"424":1,"446":1,"471":1,"473":3,"474":2,"535":1}}],["текущего",{"2":{"184":1,"262":1,"263":2,"377":1}}],["текущее",{"2":{"176":1,"182":1,"368":1}}],["текущему",{"2":{"226":1,"263":1,"368":1,"467":1}}],["текущем",{"2":{"44":1,"209":1,"278":1,"365":1,"368":1}}],["текущую",{"2":{"173":1,"209":1}}],["текущая",{"2":{"75":1}}],["тебе",{"2":{"96":2,"98":1,"483":1}}],["теряете",{"2":{"450":1}}],["термины",{"2":{"478":1}}],["терминологией",{"2":{"222":1}}],["терминов",{"2":{"222":1,"371":1}}],["термина",{"2":{"157":1}}],["терминала",{"2":{"208":1,"209":1,"348":1,"471":2}}],["терминал",{"2":{"151":1,"208":1,"468":1}}],["терминалом",{"2":{"145":1}}],["терминале",{"2":{"144":1,"209":3,"217":1,"279":1,"344":1,"356":1,"408":1,"470":2,"474":1}}],["терминами",{"2":{"139":2,"205":1,"222":1}}],["терминах",{"2":{"68":1}}],["термин",{"2":{"105":1,"141":1,"189":1,"268":1,"270":1}}],["терпимая",{"2":{"89":1}}],["те",{"2":{"88":1,"145":1,"213":1,"227":1,"251":1,"260":1,"262":1,"284":1,"315":1,"320":1,"327":1,"354":1,"360":1,"367":1,"405":1,"431":2,"464":1,"466":1}}],["техноологии",{"2":{"446":1}}],["технологиями",{"2":{"384":1}}],["технологиям",{"2":{"354":1}}],["технология",{"2":{"270":1,"323":1,"331":1,"350":1,"354":1,"401":1}}],["технологии",{"2":{"221":1,"258":1,"268":1,"270":2,"283":1,"354":2,"377":1,"383":1,"431":1,"440":1,"448":1,"491":2}}],["технологий",{"2":{"221":1,"268":2,"270":4,"281":1,"323":2,"354":3,"369":1,"377":3,"431":1,"448":1,"476":1,"541":1}}],["технической",{"2":{"515":1}}],["технического",{"2":{"489":1,"491":1}}],["техническим",{"2":{"69":1}}],["технический",{"0":{"20":1}}],["технически",{"2":{"12":1,"36":1}}],["технические",{"0":{"140":1,"156":1,"208":1,"244":1,"269":1,"330":1,"353":1,"404":1,"452":1},"2":{"9":1}}],["техник",{"2":{"542":1}}],["техника",{"2":{"179":2}}],["технику",{"2":{"179":1}}],["техники",{"2":{"156":1,"283":1,"342":1}}],["тех",{"2":{"64":1,"150":1,"169":1,"183":1,"196":1,"210":1,"222":1,"234":1,"246":1,"249":2,"251":1,"273":1,"287":1,"293":1,"307":1,"324":1,"326":1,"331":1,"354":1,"362":2,"375":1,"377":1,"411":1,"460":1,"467":1,"492":1}}],["теперь",{"0":{"130":1},"2":{"41":1,"82":1,"83":1,"89":1,"100":1,"104":1,"111":1,"121":2,"127":1,"128":2,"130":1,"132":1,"133":1,"134":2,"135":1,"136":1,"144":2,"151":2,"179":1,"208":1,"210":2,"211":1,"212":2,"213":1,"216":1,"217":3,"222":1,"226":3,"234":1,"246":1,"252":1,"254":2,"257":2,"259":1,"263":1,"264":1,"270":1,"277":2,"306":1,"307":1,"318":1,"320":2,"323":3,"325":2,"326":3,"331":1,"337":2,"338":1,"340":1,"346":1,"349":1,"352":1,"354":3,"359":1,"360":1,"362":2,"365":1,"368":1,"374":1,"403":1,"406":1,"416":1,"420":1,"421":1,"453":1,"455":1,"460":2,"461":1,"463":1,"472":1,"474":2}}],["темой",{"2":{"257":1,"277":1}}],["темам",{"2":{"502":1}}],["тема",{"2":{"211":1,"276":1,"417":1,"577":1,"591":1}}],["темную",{"2":{"506":1}}],["темная",{"2":{"192":1,"196":1,"197":1,"577":1}}],["темный",{"2":{"195":1,"270":1}}],["темные",{"0":{"193":1},"1":{"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":1,"203":1,"204":1},"2":{"193":1,"206":1}}],["темными",{"2":{"202":1}}],["темным",{"2":{"167":1}}],["темных",{"2":{"155":1,"192":1,"204":1,"205":1}}],["темной",{"2":{"515":1,"522":1}}],["темном",{"2":{"204":1}}],["темно",{"2":{"159":1}}],["теми",{"2":{"157":1,"221":1,"312":1,"349":1}}],["тему",{"2":{"126":1,"143":1,"151":1,"166":1,"257":1,"354":1,"453":1,"479":1,"506":1}}],["теме",{"2":{"123":1,"125":1,"151":1,"294":1,"450":1,"466":1,"475":1}}],["темы",{"0":{"591":1},"2":{"79":1,"95":1,"153":1,"221":1,"329":2,"377":1,"403":1,"432":2,"483":1,"540":1,"542":1,"579":1,"591":2}}],["тем",{"2":{"2":1,"6":1,"39":1,"122":1,"126":2,"144":1,"145":1,"164":1,"176":1,"190":1,"209":1,"210":1,"213":1,"216":1,"222":2,"224":1,"225":1,"226":2,"232":1,"278":1,"292":1,"314":1,"319":1,"323":1,"324":1,"325":1,"326":1,"335":1,"342":1,"343":1,"349":1,"365":2,"371":1,"377":1,"379":1,"418":1,"450":1,"453":1,"462":1,"474":2,"506":1,"515":1,"522":1,"541":1,"577":1,"591":3}}],["трагедия",{"2":{"490":1}}],["трафика",{"2":{"270":1}}],["традиционными",{"2":{"354":1}}],["традиционным",{"2":{"326":1}}],["традиционном",{"2":{"222":1,"270":1}}],["традиционно",{"2":{"172":1,"225":1,"304":1,"326":1,"370":1}}],["традиции",{"2":{"213":1}}],["тратить",{"2":{"165":1,"293":1}}],["траекторию",{"2":{"138":1}}],["транзакционной",{"2":{"418":1}}],["транзакционность",{"2":{"17":1}}],["транспорт",{"2":{"545":1}}],["транспортного",{"2":{"545":1}}],["транспортной",{"2":{"83":1}}],["транспортные",{"2":{"126":1,"491":1}}],["транспортным",{"2":{"122":1}}],["транспиляции",{"2":{"440":1}}],["трансформацию",{"2":{"221":1}}],["трансформация",{"2":{"189":1}}],["труднее",{"2":{"292":1}}],["трудночитаемый",{"2":{"293":1}}],["трудностями",{"2":{"222":1}}],["трудности",{"2":{"214":1}}],["трудностей",{"2":{"126":1}}],["трудно",{"2":{"158":1,"208":1,"226":1,"288":1,"464":1}}],["трудозатратней",{"2":{"492":1}}],["трудозатратам",{"2":{"492":1}}],["трудов",{"2":{"209":1}}],["трудоемко",{"2":{"12":1}}],["труда",{"2":{"59":1}}],["трем",{"2":{"282":1}}],["тремя",{"2":{"175":1,"326":1,"339":1}}],["трехуровневая",{"2":{"363":1}}],["трехуровневых",{"2":{"6":1}}],["трех",{"2":{"181":1,"186":1,"338":2,"379":1}}],["трехмесячные",{"2":{"155":1}}],["третьего",{"2":{"376":1,"508":1}}],["третьей",{"2":{"247":1,"371":1}}],["третье",{"2":{"218":1}}],["третьему",{"2":{"114":1}}],["третий",{"2":{"67":1,"252":1,"481":1,"508":1}}],["требовать",{"2":{"309":1}}],["требоваться",{"2":{"178":1}}],["требование",{"2":{"271":1}}],["требованием",{"2":{"152":1}}],["требованиях",{"2":{"431":1,"448":1,"453":2}}],["требованиями",{"2":{"145":1,"217":1,"350":1,"453":1}}],["требованиям",{"2":{"69":1,"245":1,"249":1,"270":1,"280":1,"282":1,"384":1,"453":1}}],["требования",{"0":{"78":1,"79":1,"140":1,"156":1,"208":1,"244":1,"269":1,"330":1,"353":1,"404":1,"452":1},"2":{"68":1,"145":1,"220":1,"244":1,"271":1,"384":1,"451":1,"454":1,"490":1,"492":1}}],["требований",{"2":{"67":1,"69":1,"96":1,"123":1,"330":1,"341":1,"384":1,"451":1,"452":1}}],["требуемого",{"2":{"344":1,"538":1}}],["требуемой",{"2":{"211":1,"344":1}}],["требуеться",{"2":{"440":1}}],["требуется",{"2":{"124":1,"128":1,"130":1,"145":1,"165":1,"249":1,"256":1,"344":2,"432":1,"515":1}}],["требует",{"2":{"122":1,"126":1,"138":1,"139":2,"146":1,"210":1,"270":1,"272":1,"275":1,"278":1,"283":1,"350":1,"354":1,"359":1,"376":1,"431":1,"440":1,"448":1,"453":1,"471":1}}],["требуются",{"2":{"446":1,"570":1}}],["требуют",{"2":{"196":1,"234":1,"331":1,"425":1}}],["требующее",{"2":{"173":1}}],["требующий",{"2":{"111":1,"359":1}}],["требующих",{"2":{"17":1,"174":1,"176":1}}],["тривиален",{"2":{"374":1}}],["тривиальными",{"2":{"375":1}}],["тривиальность",{"2":{"375":1,"457":1}}],["тривиально",{"2":{"362":1}}],["тривиального",{"2":{"226":1,"405":1}}],["тривиальную",{"2":{"175":1}}],["тривиальна",{"2":{"148":1,"171":1,"176":1,"277":1,"336":1,"347":1,"365":1,"376":1}}],["триггерного",{"2":{"277":1}}],["триггерную",{"2":{"187":1}}],["три",{"2":{"7":1,"11":1,"44":1,"112":2,"184":4,"210":1,"211":1,"225":1,"288":1,"318":1,"319":1,"322":1,"326":1,"338":1,"347":1,"371":2,"377":1,"405":1,"420":1,"424":2,"455":1,"457":1,"508":1,"589":1}}],["т",{"0":{"248":1},"2":{"4":1,"38":1,"68":2,"118":1,"124":1,"127":1,"128":1,"132":1,"141":1,"157":5,"161":2,"166":2,"170":1,"172":1,"173":1,"174":2,"178":2,"191":1,"208":1,"210":3,"213":1,"222":1,"223":1,"225":1,"226":2,"232":1,"234":1,"257":1,"258":1,"265":2,"270":3,"272":1,"273":1,"274":1,"286":1,"311":1,"314":1,"318":1,"321":1,"326":1,"331":1,"332":1,"344":1,"354":3,"359":1,"368":1,"369":1,"370":1,"374":1,"375":1,"376":2,"405":1,"451":1,"453":3,"454":1,"457":3,"459":1,"460":1,"472":1,"473":1,"476":1,"479":1,"483":1,"488":1,"492":1,"501":1,"540":2,"541":1,"542":4}}],["тонкая",{"2":{"542":1}}],["тонкую",{"2":{"441":1}}],["тонкий",{"2":{"214":1,"226":2,"279":1}}],["тонкостей",{"2":{"155":1}}],["толку",{"2":{"199":1,"325":1,"456":1}}],["только",{"2":{"4":1,"16":1,"20":2,"23":1,"34":1,"39":1,"41":3,"56":1,"58":1,"59":1,"71":1,"74":1,"88":1,"89":1,"96":1,"100":1,"101":1,"104":1,"106":1,"111":1,"112":1,"114":1,"117":1,"123":2,"124":1,"125":2,"127":1,"131":2,"135":1,"142":3,"152":1,"157":1,"160":1,"161":2,"164":1,"169":1,"170":1,"174":1,"177":1,"183":1,"185":3,"189":2,"203":1,"209":4,"211":1,"213":4,"214":3,"216":2,"217":4,"218":4,"220":1,"222":1,"223":1,"224":1,"225":1,"226":2,"228":2,"230":1,"235":1,"247":2,"251":1,"252":1,"253":1,"255":1,"263":1,"264":2,"265":2,"270":1,"277":4,"278":2,"281":1,"283":1,"288":1,"289":2,"291":2,"293":1,"300":1,"301":1,"317":1,"326":2,"330":1,"331":1,"335":2,"343":1,"344":1,"345":1,"354":1,"359":1,"362":4,"364":1,"365":4,"371":3,"375":1,"377":1,"401":1,"405":2,"412":1,"413":2,"418":5,"420":1,"432":1,"439":1,"441":3,"446":2,"450":4,"457":1,"462":1,"464":1,"465":1,"474":1,"482":1,"483":1,"487":1,"490":2,"491":1,"508":1,"531":2,"535":1,"538":2}}],["торопитесь",{"2":{"484":1}}],["торвальдс",{"2":{"467":1}}],["торвальдсом",{"2":{"467":1}}],["тормозит",{"2":{"483":1}}],["тормозить",{"2":{"96":1}}],["тормозящим",{"2":{"331":1}}],["торговые",{"2":{"175":1,"222":1}}],["тостах",{"2":{"174":1}}],["тостер",{"2":{"538":1}}],["тосте",{"2":{"174":1}}],["тостовое",{"2":{"174":2}}],["тостовые",{"0":{"174":1}}],["тобой",{"2":{"124":1}}],["токены",{"2":{"374":1,"432":1}}],["токенов",{"2":{"371":1,"374":1}}],["токеном",{"2":{"123":1}}],["токенами",{"2":{"371":2}}],["токена",{"2":{"123":2,"371":5}}],["токенах",{"2":{"123":2,"579":1}}],["токену",{"2":{"123":1}}],["токен",{"2":{"123":7,"371":3,"374":1,"501":2,"515":1}}],["той",{"2":{"96":1,"142":1,"143":1,"161":1,"201":1,"217":1,"230":1,"277":1,"286":1,"292":1,"293":1,"320":1,"331":1,"355":1,"418":2,"424":1,"450":1,"454":1,"466":1,"475":1,"541":1}}],["тот",{"2":{"41":1,"131":1,"132":1,"133":1,"172":1,"199":1,"222":2,"226":1,"270":1,"291":1,"303":1,"313":1,"318":3,"319":1,"320":2,"321":1,"322":1,"323":1,"325":1,"326":1,"334":1,"371":1,"372":1,"377":2,"415":3,"418":1,"420":1,"460":1,"482":1,"491":1}}],["тоже",{"2":{"16":1,"46":1,"51":1,"121":1,"181":1,"482":1,"483":1,"492":1}}],["точек",{"2":{"348":1,"371":1,"418":1}}],["точечной",{"2":{"175":1}}],["точка",{"2":{"189":1,"209":1,"210":1,"261":1,"272":1,"345":1,"349":1,"492":1}}],["точками",{"2":{"142":1,"189":1,"344":1}}],["точке",{"2":{"145":1,"292":1,"344":1}}],["точкой",{"2":{"142":2,"173":1,"210":1,"246":1,"268":1,"337":2,"371":2}}],["точку",{"2":{"127":1,"159":2,"209":2,"223":1,"245":1,"304":1,"316":1,"335":1,"370":1,"372":1,"373":1,"376":2}}],["точки",{"0":{"173":1},"2":{"11":1,"23":1,"96":1,"112":1,"122":1,"131":1,"157":1,"159":1,"184":2,"210":1,"225":1,"324":1,"335":3,"349":1,"350":1,"417":1,"450":3,"475":1,"501":1}}],["точное",{"2":{"178":1,"483":1}}],["точностью",{"2":{"158":1}}],["точно",{"2":{"98":1,"114":1,"125":1,"240":1,"320":1,"412":1,"451":1,"457":1}}],["точней",{"2":{"4":1,"492":1}}],["томасу",{"2":{"291":1}}],["тому",{"2":{"96":1,"189":1,"194":1,"290":1,"293":1,"333":1,"354":1,"377":1,"378":1,"475":1}}],["том",{"2":{"7":1,"13":1,"23":1,"25":2,"68":2,"96":1,"111":1,"133":1,"144":1,"152":1,"153":1,"155":1,"157":1,"164":2,"172":1,"173":1,"176":1,"185":1,"186":1,"189":1,"195":1,"196":1,"197":1,"205":1,"210":2,"213":1,"217":1,"218":1,"221":1,"222":4,"223":1,"224":1,"226":1,"230":1,"246":1,"249":1,"254":1,"259":1,"264":1,"268":1,"270":1,"277":2,"289":1,"291":1,"293":2,"294":1,"307":1,"312":1,"317":1,"319":2,"323":1,"326":1,"329":1,"331":1,"335":1,"337":1,"342":2,"345":1,"349":1,"362":1,"375":1,"376":1,"377":1,"403":1,"418":3,"431":1,"448":1,"450":1,"454":1,"456":1,"458":1,"459":1,"462":1,"463":1,"464":2,"474":1,"492":1,"542":1}}],["тогдашний",{"2":{"134":1}}],["тогда",{"2":{"3":1,"47":1,"95":1,"113":1,"122":1,"147":1,"233":1,"313":1,"320":1,"326":1,"331":1,"371":1,"408":1,"483":2}}],["того",{"2":{"2":1,"7":1,"23":1,"46":1,"69":1,"96":3,"111":1,"121":1,"123":1,"126":1,"131":1,"138":1,"142":1,"143":1,"144":1,"157":1,"158":1,"165":1,"168":1,"172":1,"177":1,"178":1,"184":1,"202":1,"209":2,"211":1,"213":1,"214":1,"217":2,"222":2,"223":1,"226":7,"233":1,"242":1,"246":1,"249":2,"255":1,"257":2,"263":1,"264":1,"266":2,"270":5,"275":1,"276":1,"277":5,"278":1,"283":2,"286":1,"287":1,"289":1,"292":1,"304":1,"308":1,"309":1,"311":1,"315":3,"316":1,"317":1,"319":1,"320":1,"325":1,"326":1,"329":1,"331":3,"334":1,"335":1,"338":1,"343":1,"349":1,"355":1,"356":1,"359":1,"362":2,"368":1,"376":1,"377":1,"382":1,"398":1,"405":1,"407":1,"412":1,"415":1,"420":1,"421":1,"423":1,"424":3,"431":2,"440":2,"449":1,"450":1,"451":1,"453":1,"454":1,"455":1,"460":1,"463":1,"467":1,"468":1,"471":2,"472":1,"477":1,"482":1,"484":1,"492":3,"561":1,"568":1}}],["то",{"2":{"3":2,"9":1,"12":2,"17":1,"20":3,"26":2,"30":1,"33":1,"35":3,"40":2,"41":2,"51":1,"59":3,"61":1,"62":1,"77":1,"96":7,"102":1,"104":1,"106":2,"111":1,"118":1,"122":1,"123":4,"124":3,"130":2,"131":1,"133":1,"135":1,"142":2,"143":3,"144":2,"145":1,"149":1,"152":2,"155":2,"158":2,"160":3,"161":1,"162":1,"164":2,"166":1,"167":4,"173":1,"175":2,"176":1,"178":1,"181":1,"184":1,"191":2,"194":1,"196":1,"197":1,"202":1,"204":1,"206":1,"208":1,"209":5,"210":1,"211":1,"212":1,"213":3,"214":1,"216":1,"217":2,"218":1,"222":7,"224":1,"225":2,"226":3,"228":2,"229":1,"234":1,"242":2,"245":1,"246":1,"247":2,"251":1,"254":1,"255":1,"257":2,"263":1,"264":1,"270":3,"278":3,"279":1,"280":1,"286":1,"288":1,"290":4,"291":3,"293":4,"294":1,"303":1,"304":1,"305":1,"307":3,"309":1,"310":2,"317":1,"318":5,"319":3,"320":3,"324":1,"326":1,"331":10,"332":3,"336":2,"339":1,"340":2,"344":2,"352":1,"354":2,"356":1,"359":2,"362":2,"365":1,"368":2,"370":1,"371":5,"376":1,"377":1,"384":1,"405":4,"408":1,"409":1,"410":6,"412":3,"413":1,"414":1,"416":1,"417":1,"419":1,"420":2,"421":1,"424":1,"425":1,"431":1,"433":2,"440":1,"441":1,"446":2,"449":2,"450":5,"453":1,"454":1,"456":4,"457":1,"458":1,"460":2,"463":2,"466":1,"471":2,"479":4,"482":1,"483":3,"485":2,"491":4,"492":6,"541":1,"562":2,"570":1}}],["товару",{"2":{"191":1}}],["товаров",{"0":{"38":1,"116":1},"1":{"117":1,"118":1},"2":{"4":1,"23":1,"30":1,"31":1,"41":1,"44":1,"50":1,"80":2,"82":1,"83":1,"85":2,"104":1,"111":1,"117":2,"175":1,"431":1,"449":1}}],["товаре",{"2":{"4":1,"31":1,"44":1,"82":1,"83":1}}],["товары",{"2":{"4":1,"7":1,"16":1,"111":1,"195":2}}],["товар",{"0":{"16":1},"2":{"3":2,"16":2,"111":1,"191":1,"195":2}}],["товарам",{"2":{"50":1,"80":1,"104":1}}],["товарами",{"2":{"3":1,"46":1}}],["товара",{"0":{"111":1},"2":{"3":3,"4":2,"7":1,"16":2,"17":1,"23":1,"30":1,"50":2,"51":1,"83":1,"86":1,"111":1,"117":1,"118":1,"123":1,"200":1,"431":1,"449":1,"492":1}}],["мгновенную",{"2":{"472":1}}],["мгновений",{"2":{"344":1}}],["мб",{"2":{"418":2}}],["мучается",{"2":{"487":1}}],["мутировать",{"2":{"288":1}}],["мутный",{"2":{"10":1}}],["мусора",{"2":{"290":1}}],["мусор",{"2":{"234":1}}],["множественного",{"2":{"446":1}}],["множественность",{"2":{"411":1}}],["множественном",{"2":{"365":1}}],["множестве",{"2":{"359":1}}],["множество",{"2":{"96":2,"142":1,"150":1,"151":1,"169":1,"175":1,"182":1,"212":1,"245":1,"246":1,"247":1,"260":1,"264":1,"287":1,"295":1,"302":1,"307":1,"335":1,"341":1,"344":1,"363":1,"371":2,"377":2,"379":1,"441":2,"453":1,"454":1,"457":1,"466":1,"482":1,"492":1}}],["множеством",{"2":{"88":1,"145":1,"209":1,"213":1,"281":1,"370":1,"467":1}}],["множества",{"2":{"16":1,"189":1,"286":1}}],["многим",{"2":{"293":1}}],["многих",{"2":{"155":1,"165":1,"174":1,"187":1,"195":1,"212":1,"214":1,"240":1,"288":1,"331":1,"368":1,"451":1,"541":1}}],["многие",{"2":{"85":1,"133":1,"193":1,"290":1,"356":1,"425":1,"441":1,"483":1,"491":1}}],["многолетним",{"2":{"492":1}}],["многолетние",{"2":{"155":1}}],["многоядерный",{"2":{"483":1}}],["многоядерные",{"2":{"483":1}}],["многофункциональный",{"2":{"431":1}}],["многоразовые",{"2":{"431":1,"448":1}}],["многочисленные",{"2":{"301":1}}],["многочисленных",{"2":{"215":1}}],["многого",{"2":{"291":1}}],["многоцелевые",{"2":{"288":1}}],["многопоточной",{"2":{"482":1}}],["многопоточности",{"2":{"396":1}}],["многопоточность",{"0":{"329":1,"396":1},"1":{"330":1,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"338":1,"339":1,"340":1,"341":1,"342":1,"343":1,"344":1,"345":1,"346":1,"347":1,"348":1,"349":1,"350":1,"351":1},"2":{"268":1,"291":1,"294":1,"317":1,"323":1,"329":1,"330":1,"350":1,"369":1,"418":2,"483":4}}],["многопоточным",{"2":{"382":1}}],["многоплатформенностью",{"2":{"270":1}}],["многостраничные",{"2":{"354":1}}],["многостраничное",{"2":{"270":1}}],["многословны",{"2":{"417":1}}],["многословным",{"2":{"278":1,"326":1,"471":1}}],["многословно",{"2":{"318":1,"326":1,"407":1}}],["многословность",{"2":{"226":1}}],["многословной",{"2":{"226":1}}],["многословен",{"2":{"226":1,"326":1}}],["многом",{"2":{"223":1,"283":1}}],["многократно",{"2":{"222":1,"224":1,"243":1,"249":1,"337":1,"430":1,"448":1}}],["много",{"2":{"63":1,"67":1,"96":1,"102":1,"123":1,"124":1,"125":1,"133":1,"142":1,"213":1,"214":1,"263":1,"286":1,"288":1,"318":1,"331":3,"334":1,"344":1,"412":1,"415":1,"437":1,"441":1,"442":1,"446":1,"482":1,"541":1,"570":1}}],["многое",{"2":{"26":1,"148":1,"222":1,"247":1,"250":1,"265":1,"377":1,"475":1}}],["мнению",{"2":{"351":1}}],["мнение",{"2":{"209":1,"502":1}}],["мнения",{"2":{"175":1}}],["мне",{"2":{"23":1,"96":3,"117":1}}],["мягкое",{"2":{"418":1}}],["мягкие",{"2":{"19":1}}],["мягкая",{"2":{"18":1}}],["м",{"2":{"16":1}}],["мидл",{"2":{"483":1}}],["микрософт",{"2":{"492":1}}],["микросервиса",{"2":{"482":1}}],["микросервисов",{"2":{"429":1,"431":1,"448":1,"483":1}}],["микро",{"2":{"441":1}}],["микроинтерфейсы",{"2":{"431":1}}],["микрофронтендов",{"2":{"448":1}}],["микрофронтенд",{"0":{"519":1},"1":{"520":1,"521":1},"2":{"431":2,"448":2,"515":1}}],["микрофронтенды",{"0":{"431":1},"2":{"431":4,"448":5,"449":1}}],["миксинов",{"2":{"226":1,"258":1}}],["миксины",{"0":{"258":1},"1":{"259":1},"2":{"226":2,"258":1,"446":4}}],["миллисекундах",{"2":{"252":1}}],["миллисекунд",{"2":{"252":1}}],["миллисекунды",{"2":{"209":1,"331":1}}],["миллионами",{"2":{"142":1}}],["миллионов",{"2":{"51":1,"63":1}}],["мир",{"2":{"490":1}}],["мира",{"2":{"475":1}}],["миру",{"2":{"466":1,"492":1}}],["миров",{"2":{"270":1}}],["миром",{"2":{"3":1,"34":1,"483":1}}],["мире",{"2":{"133":1,"224":1,"320":1,"384":1,"467":1,"483":1}}],["миграции",{"2":{"127":2,"133":1,"226":1,"400":1,"417":1}}],["миграция",{"0":{"127":1,"400":1},"1":{"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1},"2":{"226":1}}],["минут",{"2":{"491":1,"542":1}}],["минуточку",{"2":{"331":1}}],["минуты",{"2":{"252":1}}],["минуя",{"2":{"222":1}}],["минусов",{"2":{"450":1}}],["минусы",{"2":{"431":1,"448":1,"490":2}}],["минус",{"2":{"114":1,"450":1}}],["минисервере",{"2":{"441":1}}],["мини",{"2":{"341":1,"441":2}}],["миниатюр",{"2":{"175":1}}],["миниатюре",{"2":{"124":1}}],["минималистичным",{"2":{"541":1}}],["минимален",{"2":{"179":1}}],["минимальную",{"2":{"217":1,"538":1}}],["минимальным",{"2":{"410":1}}],["минимальны",{"2":{"210":1}}],["минимальный",{"2":{"178":1,"272":1}}],["минимальной",{"2":{"50":1,"311":1}}],["минимальная",{"2":{"431":1,"448":1}}],["минимальна",{"2":{"23":1}}],["минимуму",{"2":{"165":1}}],["минимум",{"2":{"12":1,"270":1,"273":1,"275":1,"288":1,"318":1,"335":1,"344":1,"359":1,"375":1,"384":2,"441":1,"450":1,"489":1,"491":2}}],["мае",{"2":{"491":1}}],["маяк",{"2":{"280":1}}],["манифест",{"2":{"282":1,"492":3}}],["манифестом",{"2":{"279":1}}],["манифесте",{"2":{"277":1}}],["манифеста",{"0":{"272":1,"276":1},"1":{"273":1,"274":1,"275":1},"2":{"268":1,"270":2,"272":2,"275":2,"276":2,"278":1,"279":2,"576":1,"588":1}}],["манипулирование",{"2":{"205":1}}],["манипулирования",{"2":{"199":1,"221":1,"230":1}}],["манипулироваться",{"2":{"405":1}}],["манипулировать",{"2":{"193":1,"405":2,"462":1}}],["манипулятивный",{"2":{"202":1}}],["манипулятивных",{"2":{"192":1}}],["манипулятивная",{"2":{"202":1}}],["манипуляций",{"2":{"179":1}}],["манипуляции",{"2":{"123":1,"405":1}}],["манере",{"2":{"240":1}}],["магические",{"2":{"446":1}}],["магия",{"2":{"232":1}}],["магию",{"2":{"213":1,"225":1,"457":1}}],["магазине",{"2":{"492":1}}],["магазины",{"2":{"23":1,"27":1,"80":1,"118":1,"270":2}}],["магазином",{"2":{"23":1}}],["магазинов",{"2":{"22":1,"28":1,"80":1,"118":1,"270":1}}],["магазинах",{"2":{"106":1,"272":1}}],["магазинами",{"2":{"114":1}}],["магазинам",{"2":{"23":1}}],["магазина",{"2":{"14":1,"23":1,"39":2,"79":1,"175":1,"191":1,"270":1,"431":1,"449":1}}],["магазин",{"0":{"12":1},"2":{"9":1,"12":1,"23":2,"46":1,"61":1,"63":1,"123":1,"540":1,"541":1,"542":1}}],["машин",{"2":{"221":1}}],["машине",{"2":{"209":1,"317":1,"491":1}}],["машиной",{"2":{"145":1}}],["машина",{"2":{"145":1,"166":1}}],["машины",{"2":{"145":1,"264":1,"441":1}}],["материал",{"2":{"118":1}}],["материалах",{"2":{"503":1}}],["материала",{"2":{"65":1,"312":1,"500":1}}],["максимальная",{"2":{"582":1}}],["максимальную",{"0":{"384":1},"2":{"217":1,"384":1}}],["максимального",{"2":{"451":1}}],["максимально",{"2":{"96":1,"205":1,"268":1,"283":1,"483":1,"490":1,"492":1,"546":1}}],["максимум",{"2":{"191":1,"213":1}}],["максимизации",{"2":{"164":1}}],["макрос",{"2":{"132":1}}],["макросами",{"2":{"132":1}}],["макете",{"2":{"576":2}}],["макетов",{"0":{"246":1},"2":{"363":1}}],["макетом",{"2":{"216":1,"246":1}}],["макетами",{"2":{"433":1}}],["макета",{"2":{"217":1,"257":1,"361":1,"540":1}}],["макеты",{"2":{"162":1,"277":1,"365":1,"428":1,"448":1,"542":1}}],["макет",{"0":{"27":1},"1":{"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1},"2":{"27":1,"160":1,"189":1,"245":1,"246":2,"576":1,"580":1}}],["масштабируемых",{"2":{"482":1}}],["масштабируемые",{"2":{"431":1,"448":1}}],["масштабируемость",{"2":{"428":1,"431":2,"448":3}}],["масштабируемой",{"2":{"350":1}}],["масштабируется",{"2":{"431":1,"448":1}}],["масштабирования",{"2":{"222":1,"329":1,"429":1}}],["масштаб",{"2":{"331":1}}],["масштабе",{"2":{"317":1,"335":1}}],["масштабах",{"2":{"230":1}}],["мастере",{"2":{"456":1}}],["мастер",{"2":{"152":1,"348":1}}],["мастером",{"2":{"62":1}}],["маске",{"2":{"438":1}}],["маскируемый",{"2":{"279":1}}],["маскирует",{"2":{"198":1,"201":1}}],["маскируются",{"2":{"203":1}}],["маскировка",{"2":{"203":1}}],["маскироваться",{"2":{"203":1}}],["маску",{"2":{"142":1}}],["маска",{"2":{"125":2}}],["массовый",{"2":{"472":1}}],["массовых",{"2":{"341":1}}],["массовой",{"2":{"204":1,"475":1}}],["массу",{"2":{"213":1}}],["масс",{"2":{"96":1}}],["массам",{"2":{"96":1}}],["массиву",{"2":{"315":1,"339":1,"462":1}}],["массиве",{"2":{"217":1,"231":1,"253":1,"462":1}}],["массива",{"2":{"217":2,"253":1,"363":1,"446":3,"462":1,"482":1,"491":1}}],["массивам",{"2":{"131":2}}],["массивы",{"2":{"132":1,"232":1,"253":1,"255":1,"332":1,"405":1,"570":1}}],["массивов",{"2":{"131":1}}],["массив",{"2":{"41":1,"217":5,"253":3,"254":1,"264":1,"273":1,"275":3,"315":2,"316":1,"339":2,"343":1,"345":1,"359":1,"364":1,"377":1,"446":3,"462":3,"482":1}}],["малая",{"2":{"453":1}}],["маленьких",{"2":{"224":1,"286":1}}],["маленький",{"2":{"123":1,"173":2}}],["маленьком",{"2":{"365":1}}],["маленькой",{"2":{"195":1}}],["маленького",{"2":{"173":1,"437":1}}],["маленькая",{"2":{"23":1,"173":1}}],["маломощных",{"2":{"331":1}}],["малого",{"2":{"222":2}}],["мало",{"2":{"38":1,"218":1,"278":1,"362":1,"364":1}}],["маркерами",{"2":{"474":1}}],["маркером",{"2":{"374":1}}],["маркетинговые",{"2":{"158":1}}],["маркетинг",{"2":{"157":1}}],["маркетплейсом",{"2":{"23":1,"77":1}}],["маркетплейсов",{"2":{"22":1}}],["маркетплейс",{"0":{"13":1,"60":1},"1":{"61":1,"62":1,"63":1,"64":1,"65":1},"2":{"9":1,"23":2,"61":1,"80":1}}],["маркетплейса",{"2":{"4":1,"12":1,"23":2,"46":1,"61":1,"79":1,"80":1}}],["маршруте",{"2":{"359":2,"365":3}}],["маршруту",{"2":{"356":1,"359":1,"364":2,"375":1,"379":1}}],["маршрутов",{"0":{"358":1,"364":1},"1":{"359":1,"360":1},"2":{"252":1,"357":1,"361":1,"363":2,"364":1,"365":2,"368":2,"370":1,"371":1}}],["маршрут",{"2":{"144":1,"357":1,"359":5,"362":1,"364":1,"375":1,"376":2}}],["маршрутизацией",{"2":{"431":1,"448":1}}],["маршрутизации",{"2":{"144":1,"317":1,"352":1}}],["маршрутизацию",{"2":{"11":1}}],["маршрутизатору",{"2":{"365":1}}],["маршрутизатором",{"2":{"135":1,"364":1,"365":1}}],["маршрутизатора",{"0":{"361":1},"2":{"135":1,"352":1,"355":4,"356":1,"362":1,"378":1,"379":1}}],["маршрутизатор",{"2":{"135":1,"354":1,"356":3,"359":1,"360":1,"362":1,"363":1,"364":1,"365":1,"373":1,"393":1}}],["маршрутизаторе",{"2":{"127":1,"135":2,"145":1}}],["маршруты",{"0":{"363":1},"1":{"364":1,"365":1},"2":{"106":1,"278":1,"355":2,"356":3,"358":1,"359":3,"363":2,"364":2,"368":1,"581":1}}],["маршрутам",{"2":{"361":1,"362":1,"365":1,"370":1}}],["маршрутами",{"2":{"144":1,"356":1,"359":1,"368":1}}],["маршрута",{"2":{"7":1,"359":1,"361":1,"362":3,"365":4,"368":3}}],["мыслить",{"2":{"483":1}}],["мыслит",{"2":{"283":1}}],["мышление",{"2":{"453":1}}],["мышления",{"2":{"222":1}}],["мышку",{"2":{"441":1}}],["мышки",{"2":{"96":1}}],["мыши",{"2":{"172":1,"186":1,"187":1,"233":1,"258":1,"264":2,"275":1}}],["мышью",{"2":{"164":1,"178":1}}],["мышь",{"2":{"160":1,"164":1,"331":1}}],["мы",{"2":{"6":1,"9":1,"12":3,"13":1,"17":2,"18":1,"20":2,"23":4,"36":2,"40":1,"41":4,"51":1,"56":2,"59":1,"89":2,"100":1,"104":1,"106":1,"112":1,"114":1,"128":2,"129":3,"130":1,"132":2,"139":2,"141":2,"142":5,"143":4,"144":3,"145":7,"147":1,"148":2,"149":8,"151":3,"152":1,"153":5,"154":1,"155":2,"158":2,"160":1,"161":2,"162":2,"165":1,"167":1,"177":1,"178":1,"179":10,"183":1,"189":1,"190":1,"191":2,"205":3,"207":5,"208":4,"209":7,"210":10,"211":4,"212":2,"213":12,"214":8,"215":4,"216":11,"217":22,"218":10,"219":4,"221":3,"222":2,"223":10,"224":4,"225":13,"226":14,"227":1,"228":1,"232":3,"233":8,"234":3,"235":1,"240":1,"241":3,"243":7,"245":4,"246":4,"247":4,"249":6,"250":2,"251":3,"252":6,"253":1,"254":7,"255":8,"256":1,"257":11,"258":10,"259":5,"260":3,"262":1,"263":19,"264":18,"265":4,"266":8,"267":3,"268":3,"270":1,"271":1,"272":4,"276":3,"277":8,"278":13,"279":6,"281":3,"283":1,"286":4,"287":1,"289":1,"290":4,"291":2,"294":3,"295":1,"304":5,"305":1,"306":1,"309":1,"310":7,"311":6,"312":2,"313":1,"315":8,"317":3,"318":2,"319":15,"320":5,"321":4,"322":5,"323":6,"324":2,"325":6,"326":11,"327":5,"329":8,"330":1,"331":4,"332":1,"333":3,"334":6,"335":5,"336":4,"337":6,"338":7,"339":7,"340":2,"341":2,"342":6,"343":8,"344":3,"345":6,"346":1,"347":7,"348":1,"349":13,"350":4,"352":5,"354":9,"355":1,"356":4,"357":9,"359":15,"361":2,"362":20,"363":5,"364":3,"365":11,"368":4,"369":4,"370":7,"371":4,"372":5,"373":3,"374":8,"375":6,"376":2,"377":8,"378":4,"379":1,"391":1,"397":1,"403":7,"404":1,"405":4,"406":3,"407":8,"408":4,"409":1,"410":7,"411":3,"412":7,"413":3,"414":4,"415":8,"416":1,"417":5,"418":8,"419":6,"420":10,"421":5,"422":4,"423":1,"424":2,"451":2,"453":2,"454":3,"455":3,"456":7,"457":10,"458":1,"459":5,"460":1,"461":10,"462":21,"463":3,"464":5,"465":1,"466":2,"468":1,"471":1,"472":5,"474":3,"475":2,"477":2,"483":5}}],["молчаливая",{"2":{"535":1}}],["молекулы",{"2":{"428":1,"448":1}}],["морган",{"2":{"491":1}}],["морскими",{"2":{"292":1}}],["мотивации",{"2":{"491":1}}],["мощь",{"2":{"450":1,"483":1}}],["мощную",{"2":{"418":1}}],["мощная",{"2":{"222":1,"341":1}}],["мощный",{"2":{"256":1}}],["мощные",{"2":{"254":1,"270":1}}],["мощных",{"2":{"221":1}}],["мощным",{"2":{"186":1,"325":1}}],["мощными",{"2":{"151":1,"433":1}}],["мощного",{"0":{"413":1},"1":{"414":1,"415":1,"416":1,"417":1},"2":{"403":1}}],["мощности",{"2":{"221":1,"256":1,"268":1,"329":1,"340":1,"354":1}}],["мощность",{"2":{"145":1,"377":1}}],["мощной",{"2":{"208":1}}],["мой",{"2":{"294":1}}],["мошенническими",{"2":{"195":1}}],["мои",{"2":{"126":1}}],["моем",{"2":{"440":1}}],["моему",{"2":{"288":1,"295":1,"331":1}}],["мое",{"2":{"209":1}}],["моего",{"2":{"96":1}}],["моей",{"2":{"23":1}}],["могущие",{"2":{"502":1}}],["могу",{"2":{"368":1}}],["могут",{"2":{"17":1,"50":1,"125":2,"136":1,"142":1,"162":1,"171":1,"174":1,"175":3,"176":1,"180":1,"193":1,"208":1,"210":1,"211":1,"214":1,"221":1,"222":2,"226":1,"230":1,"234":1,"246":2,"247":1,"249":1,"253":2,"255":1,"266":1,"267":1,"268":1,"270":4,"272":1,"281":1,"284":2,"312":1,"316":1,"320":1,"327":1,"331":3,"333":1,"336":1,"351":2,"354":1,"359":1,"364":1,"368":1,"371":2,"376":1,"377":1,"378":1,"382":1,"384":1,"408":2,"414":1,"418":2,"419":1,"431":3,"433":1,"437":1,"441":1,"448":2,"449":1,"451":1,"453":1,"454":1,"482":2,"483":1,"484":1,"491":2,"542":1}}],["могла",{"2":{"342":1}}],["могло",{"2":{"332":1}}],["могли",{"2":{"218":1,"243":1,"263":1,"265":1,"310":2,"319":1,"349":1,"354":1,"356":1,"357":1,"369":1,"376":1,"407":1,"419":2,"420":1,"462":1}}],["мог",{"2":{"96":1,"166":1,"225":1,"354":1,"363":1,"377":1,"413":1,"492":1,"541":1}}],["монитора",{"2":{"441":1}}],["монитор",{"2":{"441":1}}],["мониторинг",{"2":{"197":1}}],["мониторингом",{"2":{"123":1}}],["монолитных",{"2":{"288":1}}],["монополистом",{"2":{"43":1}}],["монтируется",{"2":{"290":1}}],["монтируем",{"2":{"128":1,"251":1}}],["монтирования",{"2":{"129":1,"290":1,"362":1,"462":1}}],["монетизация",{"2":{"64":1}}],["мобильную",{"2":{"277":1}}],["мобильный",{"2":{"376":1}}],["мобильных",{"2":{"181":3,"184":1,"189":1,"212":1,"268":1,"270":1,"273":1,"274":1,"277":2,"354":1,"371":1,"552":1}}],["мобильные",{"2":{"157":1,"270":1,"375":1,"377":1}}],["мобильного",{"2":{"189":1}}],["мобильном",{"2":{"88":1,"104":1,"117":1,"189":1,"272":1}}],["мобильное",{"0":{"87":1},"1":{"88":1,"89":1,"90":1},"2":{"492":1}}],["мобильной",{"2":{"29":1,"30":1,"33":2,"35":1}}],["мобильная",{"0":{"33":1},"2":{"277":1}}],["модернизируем",{"2":{"270":1}}],["моделям",{"2":{"281":1,"487":1}}],["модели",{"2":{"170":1,"189":1,"218":1,"222":1,"254":1,"331":1,"362":1,"412":1,"430":1,"448":1}}],["моделей",{"2":{"132":1,"240":1,"254":1,"417":1}}],["моделью",{"2":{"132":2}}],["модель",{"0":{"15":1,"45":1},"1":{"16":1,"17":1,"18":1,"19":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1},"2":{"39":2,"222":2,"337":2,"341":1,"362":1,"450":2,"482":1,"490":1}}],["модал",{"2":{"263":2,"264":1}}],["модала",{"2":{"263":4}}],["модалы",{"2":{"248":1}}],["модалов",{"0":{"260":1},"1":{"261":1,"262":1,"263":1},"2":{"247":1}}],["модальное",{"2":{"262":1,"538":1}}],["модального",{"2":{"262":4,"263":3}}],["модальной",{"2":{"249":1}}],["модальном",{"2":{"184":1}}],["модальных",{"2":{"183":1,"247":1,"248":1,"249":1,"255":1,"266":1}}],["модальный",{"2":{"183":1,"248":1,"249":2,"262":2,"263":6}}],["модальные",{"0":{"183":1},"2":{"183":1,"246":1,"249":1,"260":1,"264":1,"357":1}}],["модификатор",{"2":{"225":1,"254":1}}],["модификаций",{"2":{"325":1,"357":1}}],["модификация",{"2":{"207":1,"362":1}}],["модификации",{"0":{"210":1},"2":{"143":1,"229":1,"356":1,"412":1}}],["модифицировали",{"2":{"362":1}}],["модифицировать",{"2":{"69":1,"148":1,"361":1,"410":1}}],["модифицирует",{"2":{"248":1,"321":1}}],["модифицируем",{"2":{"209":1,"212":1,"217":1,"355":1}}],["модули",{"2":{"264":1,"288":1,"303":2,"323":1,"431":2,"448":1,"449":1,"450":2,"483":1,"486":1}}],["модулях",{"2":{"417":1}}],["модуля",{"2":{"105":1,"412":1,"449":1,"450":1,"546":1,"576":1,"579":1}}],["модулем",{"2":{"449":1}}],["модуле",{"2":{"104":1,"106":1,"211":1,"358":1,"420":1,"431":1,"449":1,"450":1,"482":1}}],["модулей",{"2":{"5":1,"98":1,"289":1}}],["модульная",{"2":{"431":2,"448":2,"449":2}}],["модульный",{"0":{"429":1},"2":{"448":1}}],["модульными",{"2":{"222":1}}],["модульности",{"2":{"135":1}}],["модульной",{"2":{"104":1,"429":1,"449":1}}],["модуль",{"0":{"544":1},"1":{"545":1,"546":1},"2":{"4":2,"41":1,"122":2,"146":1,"225":1,"258":1,"260":1,"291":2,"303":2,"312":1,"413":1,"417":1,"431":6,"449":6,"483":1,"540":2,"542":2,"576":1}}],["моменты",{"2":{"491":1,"502":1}}],["моментов",{"2":{"479":1}}],["моментом",{"2":{"145":1,"264":1,"405":1,"541":1}}],["моментами",{"2":{"370":1}}],["момента",{"2":{"217":1,"331":1,"374":1}}],["момент",{"2":{"9":1,"16":1,"36":1,"46":1,"56":1,"131":1,"142":1,"179":1,"210":1,"214":1,"234":1,"259":1,"263":1,"264":1,"270":1,"277":1,"285":1,"309":1,"310":1,"362":1,"446":1,"460":1,"471":1,"492":1,"508":2,"551":1,"554":1,"576":1,"583":1}}],["можем",{"2":{"20":2,"23":1,"36":1,"129":1,"132":1,"142":1,"143":1,"144":1,"149":1,"151":1,"153":1,"154":1,"165":1,"179":1,"210":3,"211":1,"213":4,"214":3,"216":1,"217":2,"218":2,"223":1,"225":5,"226":3,"227":1,"232":1,"233":2,"234":1,"245":3,"246":1,"249":2,"251":2,"252":2,"254":2,"255":3,"258":1,"263":2,"264":2,"265":1,"267":2,"277":2,"278":3,"279":1,"286":1,"311":1,"312":1,"319":1,"320":1,"321":1,"325":3,"331":1,"334":4,"335":2,"342":1,"345":1,"349":4,"355":1,"357":3,"359":5,"361":1,"362":2,"363":1,"364":1,"365":3,"372":1,"373":1,"374":1,"375":1,"377":1,"405":3,"408":1,"411":2,"412":3,"418":2,"420":1,"421":2,"423":1,"454":1,"456":2,"457":3,"459":1,"461":1,"462":3,"463":3,"464":1,"465":1}}],["можете",{"2":{"131":2,"133":1,"142":2,"151":1,"162":1,"170":1,"183":1,"189":1,"206":1,"209":1,"210":3,"211":1,"220":1,"222":5,"224":1,"226":2,"235":1,"240":2,"242":2,"270":3,"276":1,"294":1,"303":1,"309":1,"318":2,"325":1,"328":2,"331":2,"340":1,"342":1,"357":1,"362":1,"369":1,"418":1,"427":1,"432":2,"437":1,"448":1,"457":1,"467":1,"471":1,"472":2,"473":1,"475":1,"476":1,"500":1,"506":1}}],["может",{"2":{"2":2,"3":1,"4":1,"14":1,"16":1,"17":1,"18":1,"26":1,"46":1,"47":1,"67":1,"68":1,"69":1,"85":1,"96":3,"105":1,"107":1,"114":2,"118":1,"123":2,"124":2,"125":1,"126":1,"127":1,"131":2,"132":2,"133":1,"142":2,"145":1,"148":1,"155":1,"157":1,"165":1,"166":1,"170":1,"171":2,"172":2,"173":1,"174":1,"175":1,"176":4,"178":4,"185":1,"186":3,"187":2,"194":1,"198":2,"202":2,"203":2,"204":1,"206":1,"209":3,"210":1,"214":1,"215":1,"218":1,"221":1,"222":4,"224":1,"225":3,"226":3,"229":1,"234":2,"243":1,"246":2,"247":1,"249":3,"252":3,"255":1,"257":3,"259":2,"260":2,"264":2,"268":1,"269":1,"270":3,"272":2,"276":1,"277":7,"278":1,"286":1,"287":1,"288":1,"290":2,"291":1,"292":1,"299":1,"300":1,"304":2,"311":1,"314":1,"317":2,"318":4,"320":3,"325":1,"326":2,"331":9,"332":3,"335":1,"336":2,"339":1,"341":1,"347":2,"363":1,"370":1,"371":2,"376":1,"377":3,"384":1,"403":1,"405":1,"407":1,"408":2,"411":1,"412":1,"414":1,"415":1,"418":7,"420":1,"424":1,"428":1,"431":4,"433":4,"437":1,"440":1,"441":1,"446":1,"448":5,"450":6,"451":1,"453":4,"456":3,"462":2,"464":2,"469":1,"474":2,"475":1,"476":1,"479":1,"481":1,"482":3,"483":2,"484":1,"490":3,"491":1,"492":6,"508":2,"515":3,"535":1,"541":2,"545":1,"568":1,"582":1,"590":1}}],["можно",{"2":{"3":1,"4":1,"9":1,"10":1,"12":1,"16":2,"23":1,"25":1,"26":1,"27":1,"29":2,"35":1,"36":1,"40":4,"46":1,"47":1,"53":1,"56":1,"59":1,"63":2,"64":1,"67":1,"82":1,"88":1,"89":1,"95":1,"96":3,"98":1,"100":1,"107":1,"111":1,"113":2,"114":1,"117":1,"118":1,"122":1,"123":4,"124":2,"126":1,"132":1,"135":1,"137":1,"140":1,"142":4,"148":1,"150":1,"151":1,"152":2,"156":1,"157":1,"160":1,"161":1,"164":1,"165":1,"166":1,"169":1,"170":1,"175":1,"176":1,"184":1,"186":2,"187":1,"189":1,"193":1,"203":1,"208":5,"211":4,"212":2,"213":3,"214":3,"218":1,"219":1,"222":2,"223":1,"224":3,"233":1,"234":3,"240":1,"243":1,"244":1,"252":1,"254":3,"256":1,"257":3,"259":1,"262":1,"263":1,"264":2,"265":1,"270":1,"277":1,"278":2,"279":1,"281":1,"282":1,"286":2,"288":3,"291":1,"294":2,"307":1,"311":1,"315":1,"317":1,"318":1,"320":3,"323":1,"325":2,"326":2,"328":1,"329":2,"331":2,"332":1,"333":1,"334":1,"335":2,"336":1,"337":1,"340":1,"341":2,"342":1,"344":2,"351":1,"353":1,"354":1,"362":3,"363":1,"365":3,"368":4,"369":1,"371":4,"373":1,"375":1,"376":2,"377":1,"378":1,"379":2,"386":1,"387":1,"407":1,"413":1,"415":1,"416":1,"417":1,"418":3,"421":1,"423":1,"425":3,"431":1,"433":2,"436":1,"437":1,"441":2,"446":2,"449":1,"450":3,"451":2,"452":1,"453":3,"454":1,"455":1,"456":1,"457":3,"460":2,"461":1,"462":1,"464":1,"465":1,"469":2,"470":1,"471":3,"475":1,"476":2,"481":2,"482":3,"483":4,"490":1,"491":5,"492":3,"517":1,"520":1,"521":2,"531":1,"532":2,"535":1,"538":1,"543":1,"551":1,"554":1,"570":1,"583":1,"589":1}}],["механической",{"2":{"491":1}}],["механизмом",{"2":{"483":1}}],["механизмы",{"2":{"450":1}}],["механизм",{"2":{"411":1}}],["медленней",{"2":{"450":1}}],["медиазапросов",{"2":{"189":1}}],["медиазапросами",{"2":{"189":1}}],["мешая",{"2":{"431":1,"448":1}}],["мешает",{"2":{"121":1}}],["межпроцессное",{"2":{"344":1}}],["межпроцессного",{"2":{"332":1}}],["межпроцессные",{"2":{"326":1}}],["межстрочные",{"2":{"293":1}}],["между",{"0":{"113":1,"159":1},"2":{"3":1,"17":1,"23":1,"34":1,"46":2,"68":2,"69":1,"96":1,"113":1,"125":1,"127":1,"131":1,"152":1,"155":1,"157":1,"164":1,"175":1,"178":1,"184":1,"210":1,"217":2,"221":3,"222":3,"225":1,"226":2,"242":1,"245":1,"246":1,"251":1,"254":1,"255":1,"257":1,"258":2,"260":1,"264":1,"270":1,"282":1,"291":1,"294":1,"297":1,"298":1,"312":1,"314":1,"317":1,"318":1,"319":1,"320":1,"323":1,"328":2,"331":2,"335":2,"336":2,"344":1,"355":1,"359":1,"362":1,"370":1,"371":3,"376":1,"378":1,"399":1,"403":1,"404":1,"405":1,"413":1,"414":1,"417":1,"422":1,"423":2,"431":1,"433":2,"441":1,"448":1,"450":2,"465":1,"467":1,"491":2,"492":1}}],["мелких",{"2":{"292":1,"450":1}}],["мелкие",{"2":{"165":1,"286":1}}],["мельчайшей",{"2":{"286":1}}],["мечом",{"2":{"202":1}}],["мегабайт",{"2":{"571":1}}],["мега",{"2":{"186":4}}],["мегаменю",{"0":{"186":1},"2":{"29":1,"186":2,"187":1}}],["мета",{"2":{"576":1,"586":1}}],["метасервисы",{"2":{"374":1}}],["метрике",{"2":{"492":1}}],["метрики",{"2":{"492":1}}],["метку",{"2":{"405":1}}],["метка",{"2":{"371":1}}],["метки",{"0":{"173":1},"2":{"474":1}}],["методом",{"2":{"376":1,"492":1}}],["методологии",{"2":{"354":1,"355":1,"428":1,"448":1}}],["методов",{"2":{"14":1,"310":1,"312":1,"339":1,"364":1,"365":1,"368":2,"371":1,"376":1,"408":1,"414":1,"417":1,"446":1,"457":3}}],["методу",{"2":{"326":1}}],["методе",{"2":{"226":1,"304":1,"349":1,"359":1}}],["метод",{"0":{"303":1,"304":1},"2":{"123":1,"131":1,"189":3,"223":3,"226":1,"251":2,"255":1,"260":1,"263":2,"264":1,"277":2,"288":1,"304":3,"310":2,"313":2,"315":3,"317":1,"326":3,"333":1,"338":3,"343":1,"344":1,"346":1,"349":1,"359":1,"366":1,"368":1,"371":2,"376":3,"428":1,"448":1,"462":2,"535":1}}],["методы",{"0":{"239":1},"2":{"80":1,"125":1,"129":1,"131":1,"221":1,"223":1,"224":1,"255":1,"260":1,"263":1,"289":1,"290":1,"304":1,"315":1,"318":1,"326":1,"338":2,"344":2,"345":1,"349":2,"350":1,"352":1,"359":1,"368":1,"369":2,"410":1,"413":1,"415":2,"417":1,"418":1,"422":1,"423":1,"450":1,"462":2}}],["методах",{"2":{"418":1}}],["методами",{"2":{"326":1,"376":1,"450":1,"491":1}}],["методам",{"2":{"226":1,"345":1,"369":1,"461":1}}],["метода",{"2":{"3":1,"263":1,"302":1,"315":1,"320":1,"333":1,"343":1,"344":2,"345":2,"347":1,"349":2,"359":1,"376":1,"420":1,"422":1,"492":1}}],["месяцев",{"2":{"152":1}}],["месяца",{"2":{"152":1}}],["местным",{"2":{"370":1}}],["места",{"2":{"273":1,"384":1,"410":1,"418":2,"446":1,"472":1}}],["местах",{"2":{"165":1,"420":1}}],["мест",{"2":{"114":1,"492":1}}],["месте",{"2":{"100":1,"114":1,"214":1,"225":1,"277":1,"291":1,"312":1,"344":1,"362":1,"407":1,"476":1,"482":1}}],["местом",{"2":{"186":1,"191":1,"357":1}}],["местоположение",{"2":{"178":1}}],["место",{"2":{"89":1,"134":1,"186":1,"210":1,"221":1,"234":1,"243":1,"361":1,"418":2,"482":1}}],["мер",{"2":{"349":1,"453":1}}],["меры",{"2":{"123":1,"166":1,"373":1}}],["меру",{"2":{"20":1}}],["мере",{"2":{"12":2,"141":1,"178":1,"184":1,"207":2,"218":1,"221":2,"224":1,"226":2,"233":1,"241":1,"246":1,"252":1,"270":1,"275":1,"289":1,"307":1,"311":1,"319":1,"324":1,"327":1,"331":1,"337":1,"354":1,"371":1,"384":1,"429":1,"431":1,"448":1,"451":1}}],["ментор",{"2":{"491":2}}],["менталитета",{"2":{"138":1}}],["меньшим",{"2":{"354":1,"377":1}}],["меньших",{"2":{"270":1}}],["меньший",{"2":{"226":1,"482":1}}],["меньшего",{"2":{"252":1}}],["меньше",{"2":{"175":1,"293":1,"331":1,"482":1,"574":1}}],["менеджера",{"2":{"424":1,"469":1}}],["менеджер",{"2":{"123":3,"209":1,"419":1,"456":1}}],["менее",{"2":{"2":1,"122":2,"160":1,"216":1,"319":1,"323":1,"324":1,"326":1,"349":1,"365":1,"379":1,"417":1,"418":1,"453":1,"492":1,"541":1}}],["меня",{"2":{"450":1}}],["меняющими",{"2":{"230":1}}],["меняют",{"2":{"222":1}}],["меняются",{"2":{"207":1,"231":1,"446":1}}],["меняете",{"2":{"450":1}}],["меняет",{"2":{"226":1}}],["меняется",{"2":{"122":1,"345":1,"362":1,"365":1}}],["меняем",{"2":{"147":1,"483":1}}],["менялась",{"2":{"96":1}}],["меняя",{"2":{"17":1,"89":1,"542":1}}],["меняться",{"2":{"92":1,"359":1,"446":1,"451":1}}],["менять",{"2":{"17":1,"41":1,"114":1,"376":1,"437":1,"579":1}}],["меню",{"0":{"87":1,"181":1,"184":1,"185":1,"187":1},"1":{"88":1,"89":1,"90":1},"2":{"3":2,"4":1,"29":1,"30":1,"33":1,"88":1,"104":1,"107":2,"158":1,"159":1,"160":2,"161":1,"166":1,"172":5,"178":1,"181":4,"182":1,"184":7,"185":3,"186":8,"187":3,"189":2,"191":2,"209":1,"246":1,"257":2,"275":2,"276":1,"277":3,"280":2,"356":1,"362":1,"431":1,"433":2,"449":1,"561":1,"576":1}}],["ах",{"2":{"446":1}}],["аудио",{"2":{"437":1}}],["аутентифицирует",{"2":{"376":1}}],["аутентифицирующему",{"2":{"371":1}}],["аутентификаторы",{"2":{"375":1}}],["аутентификацию",{"2":{"124":1,"371":2,"372":1}}],["аутентификацией",{"2":{"123":1}}],["аутентификация",{"0":{"123":1,"370":1,"371":1,"375":2,"376":1,"377":1},"2":{"80":1,"123":5,"369":1,"370":1,"373":2,"375":2,"376":1}}],["аутентификации",{"0":{"369":1},"1":{"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1,"377":1},"2":{"59":1,"123":1,"345":2,"352":2,"359":1,"368":1,"369":1,"370":4,"371":5,"372":4,"373":2,"374":1,"376":5,"377":1,"378":2,"379":2,"432":3,"450":1,"501":2,"579":1}}],["аутентификаций",{"2":{"40":1}}],["аута",{"2":{"338":1}}],["ами",{"2":{"338":1}}],["азы",{"2":{"222":1}}],["аварийно",{"2":{"418":1}}],["авиабилетов",{"2":{"199":1}}],["авиабилеты",{"2":{"195":1}}],["автошколе",{"2":{"491":1}}],["автозаполнения",{"2":{"417":1}}],["автономным",{"2":{"382":1}}],["автономной",{"2":{"278":1}}],["автономности",{"2":{"277":1}}],["автономное",{"2":{"268":1,"270":1}}],["автономного",{"2":{"223":1,"270":2,"277":1}}],["автор",{"2":{"380":1}}],["авторство",{"2":{"291":1}}],["авторизации",{"2":{"371":2}}],["авторизационный",{"2":{"123":1}}],["авторизация",{"0":{"123":1},"2":{"80":1,"123":4}}],["автоматы",{"2":{"264":1}}],["автомат",{"2":{"264":2}}],["автоматического",{"2":{"152":1,"222":1,"279":1,"350":1,"424":1}}],["автоматические",{"2":{"476":1}}],["автоматически",{"2":{"53":1,"121":2,"142":1,"195":1,"209":1,"210":1,"213":1,"217":1,"221":1,"226":1,"252":2,"277":2,"318":1,"319":1,"320":1,"343":2,"355":1,"359":1,"362":2,"365":1,"368":2,"377":1,"417":1,"421":1,"424":1,"457":1,"460":1,"482":1,"561":1}}],["автоматизацией",{"2":{"491":1}}],["автоматизацию",{"2":{"210":1}}],["автоматизации",{"2":{"71":1,"268":1,"401":1,"424":2}}],["автоматизируя",{"2":{"515":1}}],["автоматизирует",{"2":{"152":1}}],["автоматизированный",{"2":{"476":1}}],["автоматизированными",{"2":{"464":1}}],["автоматизированных",{"2":{"453":1,"477":1}}],["автоматизированное",{"2":{"453":1,"478":1}}],["автоматизировано",{"2":{"453":1}}],["автоматизировать",{"2":{"151":1}}],["автообновление",{"2":{"152":1}}],["автокомплита",{"2":{"98":1}}],["автокомплит",{"0":{"98":1},"2":{"98":1}}],["абзаца",{"2":{"162":1,"172":1,"194":1}}],["абзацев",{"2":{"162":1}}],["абы",{"2":{"126":1}}],["абсолютный",{"2":{"149":1}}],["абсолютном",{"2":{"124":1}}],["абсолютно",{"2":{"96":1,"483":1,"491":2}}],["абстрагированный",{"2":{"294":1}}],["абстрагирование",{"2":{"122":1,"291":1}}],["абстрагировать",{"2":{"291":1}}],["абстракции",{"2":{"283":1,"305":1}}],["абстракция",{"0":{"3":1},"2":{"122":1,"286":1,"545":1}}],["абстрактный",{"2":{"576":1}}],["абстрактны",{"2":{"241":1}}],["абстрактное",{"2":{"240":1}}],["анонсы",{"2":{"503":1}}],["аномалией",{"2":{"466":1}}],["антипаттерн",{"2":{"405":1}}],["антипаттерны",{"2":{"294":1}}],["антипаттерном",{"2":{"294":1,"433":1}}],["анимационный",{"2":{"433":1}}],["анимация",{"2":{"258":1}}],["анимацию",{"2":{"221":1,"492":1}}],["анимации",{"2":{"157":1,"234":3,"355":1}}],["английского",{"2":{"491":1}}],["английском",{"2":{"385":1,"491":2}}],["англ",{"2":{"125":1,"377":1}}],["аналогу",{"2":{"492":1}}],["аналогов",{"2":{"482":1}}],["аналогом",{"2":{"450":1}}],["аналогами",{"2":{"414":1}}],["аналог",{"2":{"96":1,"132":1,"433":1,"450":1,"456":1}}],["аналогию",{"2":{"491":1}}],["аналогией",{"2":{"483":1}}],["аналогичен",{"2":{"257":1,"293":1,"553":1,"582":1}}],["аналогичную",{"2":{"462":1}}],["аналогичные",{"2":{"450":1}}],["аналогичным",{"2":{"217":1,"454":1}}],["аналогичных",{"2":{"107":1,"270":1}}],["аналогичный",{"2":{"96":1,"98":1,"160":1,"257":1,"377":1,"413":1,"491":1}}],["аналогичного",{"2":{"541":1}}],["аналогичном",{"2":{"23":1}}],["аналогично",{"2":{"2":1,"18":1,"273":1,"333":1}}],["аналогии",{"2":{"257":1}}],["аналоги",{"0":{"23":1},"2":{"5":1,"450":1}}],["аналитика",{"2":{"68":1}}],["анализировать",{"2":{"280":1}}],["анализа",{"2":{"14":1,"331":1,"379":1}}],["анализ",{"0":{"8":1,"21":1,"68":1},"1":{"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"22":1,"23":1},"2":{"12":1,"67":1,"159":1,"189":1}}],["ассоциируют",{"2":{"475":1}}],["ассоциируются",{"2":{"157":1}}],["асинхронная",{"2":{"325":1,"331":1}}],["асинхронную",{"2":{"291":1,"324":1,"325":1,"331":1,"459":1,"545":1}}],["асинхронности",{"2":{"483":1}}],["асинхронность",{"2":{"483":4}}],["асинхронно",{"2":{"418":1}}],["асинхронное",{"2":{"328":1}}],["асинхронном",{"2":{"326":1}}],["асинхронного",{"2":{"252":1,"316":1,"331":1,"369":1,"451":1}}],["асинхронной",{"2":{"174":1,"324":1,"325":1,"343":1}}],["асинхронных",{"2":{"323":1,"324":2,"325":1,"369":1,"433":1}}],["асинхронный",{"0":{"252":1,"459":1},"2":{"331":1,"459":1}}],["асинхронные",{"0":{"299":1},"2":{"234":1,"324":2,"331":1,"354":1,"454":1}}],["асинхронными",{"2":{"299":1,"326":1,"331":1,"344":1}}],["асинхронным",{"2":{"122":1,"326":1,"412":1}}],["аспекте",{"2":{"479":1,"482":1}}],["аспекты",{"2":{"157":1,"389":1}}],["аспект",{"2":{"65":1,"158":1}}],["аспиранты",{"2":{"65":1}}],["апгрейд",{"2":{"483":1,"492":1}}],["апдейта",{"2":{"424":1}}],["апплеты",{"2":{"221":1}}],["аппаратного",{"2":{"324":1}}],["аппаратное",{"2":{"270":1,"384":1}}],["аппаратному",{"2":{"145":1,"384":1}}],["аппаратных",{"2":{"350":1}}],["аппаратные",{"2":{"157":1}}],["аппаратным",{"2":{"157":1}}],["аппарате",{"2":{"68":1}}],["апеллирующая",{"2":{"96":1}}],["академическое",{"2":{"310":1}}],["академических",{"2":{"221":1}}],["аккуратней",{"2":{"479":1}}],["аккуратно",{"2":{"456":1}}],["аккордеона",{"2":{"185":1,"186":1}}],["аккордеонное",{"2":{"185":1,"187":2}}],["аккордеонные",{"0":{"185":1}}],["аккаунт",{"2":{"123":1}}],["аккаунтом",{"2":{"123":1}}],["аккаунта",{"2":{"107":1,"431":1,"449":1}}],["акт",{"2":{"471":1}}],["актуальность",{"2":{"354":1,"502":1}}],["актуальные",{"2":{"417":1}}],["актуальных",{"2":{"337":1,"354":1}}],["актуальны",{"2":{"166":1,"378":1}}],["актуален",{"2":{"226":1}}],["активен",{"2":{"362":1}}],["активных",{"2":{"342":1}}],["активными",{"2":{"331":1}}],["активного",{"2":{"263":1}}],["активности",{"2":{"197":1}}],["активно",{"2":{"96":1,"152":1,"247":1,"482":1}}],["активы",{"2":{"211":1,"278":1}}],["активизируется",{"2":{"375":1}}],["активизируются",{"2":{"187":1}}],["активировать",{"2":{"277":1,"471":1}}],["активированным",{"2":{"278":1}}],["активирован",{"2":{"170":1,"418":1}}],["активирует",{"2":{"172":1}}],["активации",{"2":{"170":2,"172":1,"278":1,"333":1}}],["акции",{"2":{"4":1}}],["атомный",{"2":{"431":1,"448":1}}],["атомов",{"2":{"428":1,"448":1}}],["атомы",{"2":{"428":1,"448":1}}],["атомарный",{"0":{"428":1},"2":{"448":1,"449":1}}],["атомарного",{"2":{"211":1,"286":1,"449":1}}],["аттрибуты",{"2":{"531":1}}],["аттрибутах",{"2":{"490":1}}],["аттрибута",{"2":{"252":1}}],["аттрибут",{"2":{"223":1,"531":2}}],["аттрибуту",{"2":{"13":1}}],["атрибутом",{"2":{"259":1}}],["атрибутов",{"2":{"163":1,"171":1,"198":1,"259":1,"263":1,"272":3,"368":1,"453":1}}],["атрибутами",{"2":{"252":1,"366":1}}],["атрибутам",{"2":{"217":1,"451":1}}],["атрибута",{"2":{"217":2,"228":1,"229":1,"231":1,"257":1,"273":1,"310":1,"362":1,"364":1,"365":2,"420":1}}],["атрибуту",{"2":{"169":1,"226":1,"310":2}}],["атрибут",{"2":{"130":2,"132":1,"222":2,"225":3,"226":1,"228":1,"231":2,"253":1,"272":1,"273":1,"274":1,"275":1,"321":1,"322":1,"362":4,"364":2,"365":1}}],["атрибуте",{"2":{"130":1,"338":1}}],["атрибуты",{"2":{"69":1,"131":2,"226":1,"227":1,"252":2,"253":2,"272":2,"284":1,"368":1}}],["ат",{"2":{"123":2}}],["алиаса",{"2":{"440":1}}],["алиасы",{"2":{"440":1}}],["алиас",{"2":{"440":2}}],["алгоритму",{"2":{"371":1}}],["алгоритмы",{"2":{"292":1}}],["алгоритм",{"2":{"290":1,"371":2}}],["алгоритмов",{"2":{"68":1}}],["альтернативной",{"2":{"310":1}}],["альтернативный",{"2":{"226":1,"251":1,"257":1,"333":1}}],["альтернативные",{"2":{"68":1,"199":1}}],["альтернативы",{"2":{"213":1,"463":1,"470":1}}],["альтернативой",{"2":{"178":1,"186":1,"252":2,"288":1}}],["альтернативах",{"2":{"170":1}}],["альтернатива",{"2":{"98":1,"124":1,"152":1,"318":1,"405":1,"462":1,"464":1}}],["альтернатив",{"2":{"43":1,"189":1,"331":1,"403":1,"405":1}}],["аргумент",{"2":{"253":1,"257":1,"414":1}}],["аргументов",{"2":{"253":1,"405":1,"462":2}}],["аргументы",{"2":{"214":1,"420":1}}],["аргументами",{"2":{"457":1,"462":1}}],["аргумента",{"2":{"131":1,"223":1,"251":1,"252":1,"253":1,"270":1,"311":1,"319":1,"349":1,"414":2,"420":1,"457":2,"461":1}}],["арендовать",{"2":{"153":1}}],["арендуем",{"2":{"145":1}}],["артефакты",{"2":{"68":1}}],["архитектур",{"2":{"350":1,"382":1}}],["архитектуру",{"2":{"350":1}}],["архитектурой",{"2":{"208":1,"222":1}}],["архитектуре",{"2":{"104":1,"329":1,"339":1}}],["архитектурные",{"0":{"426":1},"1":{"427":1,"428":1,"429":1,"430":1,"431":1,"432":1,"433":1,"434":1,"435":1,"436":1}}],["архитектурный",{"2":{"286":1}}],["архитектурными",{"2":{"222":1,"335":1}}],["архитектурных",{"2":{"69":1,"207":1,"335":1}}],["архитектурная",{"2":{"222":1}}],["архитектурной",{"2":{"446":1}}],["архитектурное",{"2":{"69":1}}],["архитектурно",{"2":{"6":1,"450":1}}],["архитектуры",{"2":{"40":1,"77":1,"96":1,"145":1,"155":1,"284":1,"286":1,"295":1,"331":1,"350":1,"369":1,"384":1,"390":1,"396":1,"429":1,"542":1}}],["архитектура",{"0":{"1":1,"6":1,"69":1,"483":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1},"2":{"67":1,"69":2,"246":1,"337":1,"417":1,"431":1,"448":1,"449":1,"483":2,"501":1}}],["адресом",{"2":{"209":1}}],["адресов",{"2":{"142":2}}],["адресе",{"2":{"142":1,"144":1,"363":2}}],["адресное",{"2":{"142":1}}],["адресата",{"2":{"142":1}}],["адресату",{"2":{"142":1}}],["адресах",{"2":{"142":1,"144":1}}],["адреса",{"2":{"142":5,"152":1,"191":1,"210":1,"355":1}}],["адрес",{"2":{"142":8,"144":1,"209":1,"217":1,"228":1,"273":1,"275":1,"349":1,"354":1,"362":1,"372":1,"377":2,"465":1}}],["адресу",{"2":{"121":1,"125":1,"137":1,"142":1,"156":1,"164":1,"208":1,"243":1,"257":1,"259":1,"263":1,"269":1,"349":2,"353":1,"368":2,"377":1,"386":1,"417":1,"452":1,"561":1}}],["администратора",{"2":{"471":1}}],["административного",{"2":{"142":1}}],["административная",{"2":{"80":1}}],["администрирования",{"2":{"146":1}}],["админ",{"2":{"123":1,"431":1}}],["админке",{"2":{"13":1,"123":1}}],["админка",{"2":{"12":1,"56":1}}],["адаптацию",{"2":{"288":1,"522":1}}],["адаптация",{"2":{"278":1}}],["адаптации",{"2":{"270":1,"294":1}}],["адаптирована",{"2":{"515":1}}],["адаптированная",{"2":{"208":1}}],["адаптировать",{"2":{"85":1,"292":1,"360":1}}],["адаптируется",{"2":{"189":2}}],["адаптивны",{"2":{"564":1}}],["адаптивный",{"2":{"268":1}}],["адаптивного",{"2":{"541":1}}],["адаптивноcти",{"2":{"487":1}}],["адаптивность",{"0":{"35":1,"543":1},"2":{"483":1,"490":1,"543":2}}],["адаптивностью",{"2":{"25":1}}],["адаптивности",{"2":{"20":1,"96":1,"107":1}}],["адаптивная",{"2":{"36":1}}],["адаптеров",{"2":{"96":1}}],["адаптер",{"0":{"82":1},"1":{"83":1},"2":{"41":2,"546":2,"576":1}}],["адаптеры",{"0":{"41":1},"2":{"41":1}}],["а",{"2":{"4":1,"11":1,"12":2,"16":1,"20":1,"25":1,"39":1,"65":1,"95":1,"96":2,"105":2,"111":1,"113":1,"114":1,"122":1,"123":2,"124":1,"125":2,"127":2,"128":1,"130":1,"131":2,"132":1,"136":1,"142":3,"151":2,"152":2,"155":1,"157":1,"158":2,"159":2,"160":1,"161":2,"166":1,"167":1,"178":2,"182":1,"184":1,"185":1,"189":2,"191":1,"195":1,"197":1,"199":1,"203":1,"207":1,"209":2,"210":6,"211":2,"214":6,"217":5,"218":1,"219":2,"220":1,"222":4,"223":1,"224":1,"225":1,"226":4,"233":1,"234":1,"236":1,"243":1,"253":1,"254":2,"255":2,"257":1,"258":1,"262":2,"263":2,"264":1,"265":1,"268":1,"270":3,"272":1,"275":2,"277":3,"278":4,"279":1,"280":3,"286":2,"287":1,"290":3,"293":1,"294":2,"299":1,"304":3,"305":2,"309":1,"314":1,"316":1,"317":1,"318":3,"320":1,"321":1,"322":1,"323":1,"325":1,"329":3,"331":2,"333":2,"335":2,"337":1,"338":1,"339":1,"341":2,"344":1,"349":2,"350":2,"351":1,"357":1,"359":3,"362":4,"363":1,"364":1,"365":3,"368":1,"370":2,"371":3,"372":1,"375":5,"376":1,"377":3,"378":1,"382":2,"394":1,"397":2,"403":1,"405":3,"407":1,"409":1,"413":1,"414":1,"415":4,"417":2,"418":3,"420":2,"421":1,"433":2,"446":2,"449":1,"450":5,"454":1,"457":3,"458":1,"459":3,"461":2,"462":2,"463":2,"466":3,"468":1,"472":1,"474":3,"475":2,"476":1,"477":2,"482":1,"483":5,"485":1,"491":4,"492":5,"508":1,"515":1,"538":1,"542":1,"552":1,"568":1}}],["ощущениям",{"2":{"492":1}}],["ощущение",{"2":{"161":1}}],["ощутим",{"2":{"350":1}}],["ощутить",{"2":{"331":1}}],["оцените",{"2":{"433":1}}],["оценить",{"2":{"281":1,"340":1}}],["оценки",{"2":{"280":2,"394":1,"453":1}}],["охватить",{"2":{"270":2,"454":1}}],["охватывают",{"2":{"257":1,"378":1}}],["охватывает",{"2":{"152":1,"157":1,"171":1,"502":1}}],["оживают",{"2":{"270":1}}],["ожидая",{"2":{"324":1,"375":1}}],["ожиданий",{"2":{"466":1}}],["ожидание",{"2":{"340":1}}],["ожидания",{"2":{"252":1,"326":1,"375":1}}],["ожидании",{"2":{"218":1}}],["ожидаемую",{"2":{"462":1}}],["ожидаемому",{"2":{"307":1,"457":1}}],["ожидаемых",{"2":{"453":1}}],["ожидаемый",{"2":{"310":1}}],["ожидаемым",{"2":{"254":1}}],["ожидаемые",{"2":{"226":1}}],["ожидает",{"2":{"229":1,"233":1,"325":1,"339":1,"365":1,"375":1}}],["ожидается",{"2":{"133":1,"453":1,"458":1}}],["ожидалось",{"2":{"217":1,"321":1,"325":1,"340":1,"458":1,"462":1}}],["ожидающие",{"2":{"215":1,"217":1}}],["ожидать",{"2":{"184":1,"412":1,"415":1,"417":1}}],["оговорками",{"2":{"226":1}}],["огромный",{"2":{"439":1,"474":1}}],["огромные",{"2":{"222":1}}],["огромного",{"2":{"291":1}}],["огромном",{"2":{"142":1}}],["огромная",{"2":{"222":1}}],["огромен",{"2":{"211":1}}],["ограничивают",{"2":{"270":1}}],["ограничивает",{"2":{"51":1,"217":1,"225":1}}],["ограничить",{"2":{"213":1}}],["ограничимся",{"2":{"377":1}}],["ограничим",{"2":{"158":1}}],["ограничен",{"2":{"418":1}}],["ограничено",{"2":{"326":1}}],["ограниченным",{"2":{"370":1}}],["ограниченный",{"2":{"319":1}}],["ограниченного",{"2":{"142":1,"176":1,"178":1}}],["ограниченное",{"2":{"142":1,"159":1}}],["ограничены",{"2":{"211":1}}],["ограничений",{"2":{"226":1,"418":2,"450":1,"454":1,"492":1}}],["ограничением",{"2":{"179":1,"254":1}}],["ограничение",{"2":{"154":1,"354":1,"418":2}}],["ограничения",{"2":{"136":1,"222":1,"256":1,"323":1,"351":2,"407":1,"410":1,"418":3,"490":1}}],["оффлайн",{"2":{"492":2}}],["оффлайном",{"2":{"270":1}}],["оформить",{"2":{"431":1,"481":1}}],["оформлении",{"2":{"195":1}}],["оформлением",{"2":{"410":1}}],["оформление",{"2":{"80":1}}],["оформления",{"2":{"25":1,"195":1,"342":1}}],["официальная",{"2":{"272":1,"450":1,"502":1}}],["официальную",{"2":{"207":1,"417":1}}],["официальные",{"2":{"441":1,"454":1,"468":1,"477":1}}],["официальными",{"2":{"397":1}}],["официальным",{"2":{"214":1,"224":1,"417":1}}],["официальных",{"2":{"142":1,"214":1,"453":1}}],["официальный",{"2":{"127":1,"133":1,"186":1,"208":5,"259":1,"355":1,"395":1,"469":1}}],["официально",{"2":{"413":1,"450":1}}],["официального",{"2":{"208":1,"468":1}}],["официальному",{"2":{"412":1}}],["официальном",{"2":{"186":1,"212":1,"417":1,"452":1}}],["официальное",{"2":{"135":1}}],["официальной",{"2":{"127":1,"136":1,"137":1,"145":1,"146":1,"150":1,"208":1,"233":1,"234":1,"257":1,"259":1,"345":1,"359":1,"368":2,"433":1,"457":1,"460":1,"461":1,"469":1,"470":1}}],["очищен",{"2":{"342":1}}],["очищаются",{"2":{"234":1}}],["очищаться",{"2":{"123":1}}],["очистит",{"2":{"589":1}}],["очистить",{"2":{"212":1,"218":1,"315":1}}],["очистки",{"2":{"465":1}}],["очистке",{"2":{"314":1}}],["очереди",{"2":{"193":1,"218":1,"317":1,"483":1}}],["очередь",{"2":{"25":1,"223":1,"264":1,"286":2,"316":2,"317":1,"326":2,"331":1,"335":1,"354":1,"364":1,"431":1,"450":2,"483":1}}],["очевидны",{"2":{"248":1}}],["очевидным",{"2":{"158":1,"223":1,"225":1,"342":1,"359":1}}],["очевидной",{"2":{"259":1,"369":1,"454":1}}],["очевидно",{"2":{"16":1,"23":1,"159":1,"224":1,"359":1}}],["очень",{"2":{"3":1,"12":1,"14":1,"39":1,"40":1,"41":1,"43":1,"44":1,"47":1,"62":1,"96":1,"101":1,"123":3,"124":2,"138":1,"145":4,"146":1,"150":1,"157":1,"162":1,"167":1,"170":1,"175":1,"176":1,"184":1,"186":1,"190":1,"196":1,"197":1,"208":3,"209":3,"210":1,"218":1,"222":1,"223":1,"224":2,"226":1,"231":1,"249":1,"252":1,"254":1,"255":1,"256":1,"257":1,"260":1,"264":1,"288":3,"290":1,"292":1,"300":1,"305":1,"307":1,"310":1,"312":2,"314":1,"316":1,"320":2,"322":2,"323":1,"324":2,"325":1,"332":1,"333":1,"341":3,"342":1,"344":1,"345":1,"350":1,"354":1,"357":1,"362":1,"375":1,"377":1,"408":1,"412":2,"418":1,"425":1,"433":1,"440":1,"441":4,"444":1,"446":3,"450":1,"455":1,"456":1,"462":2,"464":2,"466":2,"472":1,"473":1,"477":1,"479":1,"482":1,"489":1,"490":1,"491":4,"492":3,"546":1,"570":2}}],["ооп",{"2":{"112":1,"287":4,"288":1,"450":1,"482":1,"483":3}}],["ом",{"2":{"101":1,"210":1,"471":1,"474":1,"477":1,"478":1,"482":1,"492":1}}],["ошибетесь",{"2":{"225":1}}],["ошибемся",{"2":{"40":1}}],["ошибку",{"2":{"309":1,"310":1,"326":1,"332":2,"342":1,"457":2,"458":1}}],["ошибке",{"2":{"166":1,"324":1,"458":1,"474":1}}],["ошибкам",{"2":{"414":1,"451":2}}],["ошибками",{"2":{"101":1}}],["ошибка",{"0":{"458":1},"2":{"122":1,"174":1,"226":1,"326":1,"332":1,"343":1,"377":1,"462":1,"483":1}}],["ошибки",{"2":{"101":2,"125":1,"325":1,"332":2,"343":1,"369":1,"373":1,"374":1,"441":1,"453":1,"457":1,"458":2}}],["ошибок",{"2":{"74":1,"166":3,"310":2,"315":1,"318":1,"374":1,"375":1,"453":2,"457":1}}],["оригинал",{"2":{"472":1}}],["оригинальный",{"2":{"318":1}}],["оригинального",{"2":{"170":1}}],["ориентацию",{"2":{"274":1}}],["ориентация",{"2":{"222":1}}],["ориентации",{"2":{"189":1}}],["ориентированных",{"2":{"483":1}}],["ориентированными",{"2":{"225":1}}],["ориентированное",{"2":{"335":1,"482":1}}],["ориентированного",{"2":{"3":1,"287":1,"482":1}}],["ориентироваться",{"2":{"23":1,"181":1}}],["ориентируемся",{"2":{"12":1,"13":1}}],["оранжевого",{"2":{"159":1}}],["органично",{"2":{"449":1}}],["организует",{"2":{"428":1,"431":1,"448":2}}],["организмы",{"2":{"428":1,"448":1}}],["организм",{"2":{"286":1}}],["организовываться",{"2":{"264":1}}],["организовывать",{"2":{"226":1}}],["организован",{"2":{"456":1}}],["организованные",{"2":{"431":1,"448":1}}],["организованными",{"2":{"378":1}}],["организованности",{"2":{"161":1}}],["организованы",{"2":{"134":1,"186":1}}],["организовать",{"2":{"126":1,"219":1,"224":1,"226":1,"337":1,"352":1,"361":1,"378":1,"433":1,"476":1}}],["организация",{"2":{"226":1}}],["организациям",{"2":{"204":1}}],["организациях",{"2":{"186":1,"356":1}}],["организаций",{"2":{"142":2}}],["организацией",{"2":{"142":1,"188":1}}],["организацию",{"2":{"134":1,"209":1,"456":1}}],["организации",{"0":{"134":1,"188":1},"1":{"189":1,"190":1,"191":1,"192":1},"2":{"64":1,"127":1,"142":1,"223":1,"290":1,"376":1,"377":1,"410":1,"425":1,"430":1,"448":1,"451":1,"456":1,"482":1}}],["органами",{"2":{"286":1}}],["органом",{"2":{"152":1}}],["ов",{"2":{"51":1,"64":1}}],["одинаковую",{"2":{"417":1}}],["одинаковым",{"2":{"319":1}}],["одинаковыми",{"2":{"218":1,"440":1}}],["одинаковы",{"2":{"218":1,"349":1,"478":1}}],["одинаковых",{"2":{"217":1}}],["одинаковый",{"2":{"161":1,"418":1}}],["одинакового",{"2":{"178":1}}],["одинаковое",{"2":{"160":1}}],["одинаково",{"2":{"130":1,"217":1,"408":1}}],["один",{"2":{"36":1,"41":1,"46":1,"58":1,"112":1,"113":1,"123":2,"131":1,"142":1,"160":1,"170":1,"175":1,"182":1,"199":1,"203":1,"208":1,"209":1,"216":1,"217":2,"224":1,"225":1,"228":1,"234":1,"247":1,"251":1,"252":3,"257":1,"259":1,"263":2,"264":2,"265":1,"277":3,"288":1,"291":1,"292":1,"300":2,"301":1,"303":1,"313":1,"314":2,"320":1,"321":1,"322":1,"335":1,"346":1,"349":1,"354":1,"359":1,"363":1,"365":2,"370":1,"374":1,"376":2,"377":1,"408":1,"415":1,"417":1,"433":3,"440":1,"450":4,"455":1,"457":2,"459":1,"460":1,"465":1,"479":1,"483":1,"492":1}}],["одаренный",{"2":{"26":1}}],["одних",{"2":{"411":1}}],["одни",{"2":{"284":1,"354":1,"363":1,"431":2,"466":1,"467":1}}],["одним",{"2":{"14":1,"41":1,"138":1,"186":1,"204":1,"213":3,"218":1,"225":1,"226":1,"249":1,"254":1,"257":1,"264":2,"323":1,"331":1,"344":2,"351":1,"369":1,"371":1,"449":1,"454":1}}],["одними",{"2":{"3":1,"213":1}}],["одну",{"2":{"82":1,"157":1,"189":1,"201":1,"213":1,"288":1,"315":1,"320":1,"347":1,"349":1,"359":1,"376":1,"410":1,"418":1,"420":1,"456":1,"482":1,"483":1}}],["одна",{"2":{"96":3,"117":1,"118":1,"160":2,"178":1,"185":1,"203":1,"264":1,"276":1,"331":1,"365":1,"464":1,"483":1}}],["однажды",{"2":{"62":1}}],["однако",{"2":{"12":1,"13":1,"20":1,"43":1,"62":2,"138":1,"140":1,"150":1,"152":1,"156":1,"158":1,"175":1,"178":1,"182":1,"184":1,"186":2,"190":1,"192":1,"207":1,"208":1,"209":1,"211":1,"213":1,"218":1,"222":2,"225":1,"226":5,"240":1,"241":1,"249":1,"251":1,"252":2,"253":2,"259":1,"263":1,"270":2,"272":1,"277":1,"278":2,"288":1,"290":1,"292":1,"302":1,"319":1,"320":2,"325":2,"326":1,"330":1,"331":2,"341":1,"342":1,"354":1,"356":1,"359":1,"362":1,"364":1,"365":1,"370":1,"371":3,"405":1,"410":1,"412":1,"414":2,"417":1,"431":1,"442":1,"446":1,"448":1,"450":2,"451":1,"453":1,"454":2,"457":1,"459":1,"462":2,"469":1,"471":1,"490":1,"491":2,"492":2,"537":1,"538":1,"570":1}}],["однократный",{"2":{"457":1}}],["однокомпонентного",{"2":{"341":1}}],["однокомпонентное",{"2":{"220":1,"341":1}}],["однозначно",{"2":{"418":1,"441":1,"482":1}}],["однозначных",{"2":{"331":1}}],["одноразового",{"2":{"375":1}}],["одноразовому",{"0":{"375":1}}],["одноименный",{"2":{"362":1}}],["однопоточным",{"2":{"331":1}}],["однопоточными",{"2":{"324":1}}],["однопоточных",{"2":{"299":1}}],["однофайловыми",{"2":{"456":1}}],["однофайловый",{"2":{"225":1}}],["однофайловых",{"0":{"225":1},"2":{"223":1,"289":1,"460":1,"478":1}}],["однофайловые",{"2":{"210":1,"221":1,"242":1,"459":1}}],["одновременно",{"2":{"145":1,"166":1,"185":1,"209":1,"218":1,"260":1,"318":1,"431":1,"433":1,"457":1,"463":1,"483":1}}],["одновременного",{"2":{"132":1,"410":1}}],["одновременных",{"2":{"145":1,"483":1}}],["одностраничными",{"2":{"352":1}}],["одностраничных",{"2":{"329":1,"393":1}}],["одностраничные",{"0":{"352":1,"393":1},"1":{"353":1,"354":1,"355":1,"356":1,"357":1,"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1,"365":1,"366":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1,"377":1,"378":1,"379":1},"2":{"135":1,"143":2,"183":1,"252":1,"259":1,"345":1,"354":1}}],["одностраничное",{"2":{"266":1,"268":1}}],["одностраничного",{"2":{"139":1}}],["одного",{"2":{"136":1,"146":1,"184":1,"220":1,"243":1,"264":1,"300":1,"324":1,"339":1,"377":1,"413":1,"418":1,"450":2,"451":1,"456":1,"467":1,"472":1}}],["одномоментное",{"2":{"417":1}}],["одному",{"2":{"142":1,"310":1,"456":1}}],["одном",{"2":{"95":1,"112":1,"114":1,"142":1,"164":1,"171":1,"175":1,"183":1,"189":1,"214":1,"215":1,"218":1,"225":1,"291":1,"294":1,"312":1,"324":1,"331":1,"414":1,"418":1,"455":1,"463":1,"482":1,"483":1,"506":1}}],["одно",{"2":{"51":1,"176":1,"222":1,"226":1,"253":1,"257":1,"264":1,"287":1,"291":1,"292":1,"315":1,"318":1,"320":1,"326":2,"362":1,"370":1,"410":1,"411":1,"424":1,"454":1,"456":1,"457":1,"462":1,"475":1,"482":1,"483":1}}],["одной",{"2":{"16":1,"34":1,"43":1,"95":1,"161":1,"177":1,"189":1,"217":1,"222":3,"256":1,"265":1,"270":1,"277":1,"288":1,"309":1,"314":1,"323":1,"324":1,"331":1,"354":1,"377":1,"403":1,"418":1,"437":1,"450":1,"462":1,"466":1,"475":1,"541":1}}],["означают",{"2":{"354":1,"478":1}}],["означает",{"2":{"11":2,"152":1,"158":1,"159":1,"186":1,"211":1,"214":1,"222":2,"226":1,"247":1,"253":1,"254":1,"258":1,"283":1,"292":2,"314":1,"318":1,"320":1,"331":2,"359":1,"369":1,"374":1,"410":1,"413":1,"431":1,"448":1,"457":1,"467":1,"535":1,"538":1}}],["ознакомления",{"2":{"417":1,"537":1}}],["ознакомьтесь",{"2":{"337":1,"377":1,"421":1,"491":1}}],["ознакомительный",{"2":{"477":1}}],["ознакомиться",{"2":{"56":1,"123":1,"140":1,"142":1,"159":1,"255":1,"258":1,"368":1,"404":1,"420":1,"541":1,"542":1}}],["ознакомились",{"2":{"224":1}}],["озон",{"2":{"4":1}}],["осущестляется",{"2":{"437":1}}],["осуществляет",{"2":{"366":1}}],["осуществляется",{"2":{"145":1,"152":2,"301":1,"414":1,"418":1}}],["осуществляются",{"2":{"300":1}}],["осуществляться",{"2":{"254":1,"313":1,"370":1,"371":1,"377":1}}],["осуществлять",{"2":{"254":1,"332":1}}],["осуществления",{"2":{"122":1,"369":1}}],["освоения",{"2":{"477":1}}],["освоении",{"2":{"270":1}}],["освобождаем",{"2":{"290":1}}],["освобождать",{"2":{"290":1}}],["освобождения",{"2":{"290":1}}],["освободить",{"2":{"290":1}}],["осваивать",{"2":{"207":1}}],["осведомлен",{"2":{"197":1}}],["освежить",{"2":{"143":1}}],["оскорбления",{"2":{"202":1}}],["ос",{"2":{"170":1,"174":3,"176":1,"208":1,"210":1,"274":1,"441":1}}],["особый",{"2":{"459":1}}],["особых",{"2":{"254":1,"275":1,"279":1,"350":1,"384":1}}],["особенного",{"2":{"340":1}}],["особенностей",{"2":{"320":1,"324":1,"331":1}}],["особенностью",{"2":{"319":1}}],["особенность",{"2":{"138":1,"482":1}}],["особенно",{"2":{"126":1,"145":1,"166":1,"208":1,"288":1,"293":1,"313":1,"316":1,"324":1,"326":1,"329":1,"344":1,"479":1,"542":1}}],["особого",{"2":{"272":1,"310":1}}],["особому",{"2":{"270":1}}],["особое",{"2":{"142":1,"270":1}}],["особо",{"2":{"64":1}}],["основополагающих",{"2":{"323":1}}],["основополагающим",{"2":{"152":1}}],["основу",{"2":{"268":1,"283":1,"431":1,"448":1,"477":1}}],["основ",{"2":{"241":1,"314":1,"382":1,"455":1,"491":1}}],["основательным",{"2":{"450":1}}],["основателя",{"2":{"197":1}}],["основа",{"2":{"242":1,"475":1}}],["основано",{"2":{"475":1}}],["основанное",{"2":{"455":1}}],["основанного",{"2":{"307":1,"453":1}}],["основанная",{"2":{"431":1,"448":1}}],["основанные",{"2":{"446":1}}],["основанным",{"2":{"218":1}}],["основанный",{"2":{"208":1,"212":1}}],["основанных",{"2":{"145":1}}],["основана",{"2":{"292":1}}],["основан",{"2":{"160":1,"278":1,"371":1,"465":1}}],["основаны",{"2":{"155":1,"222":1,"277":1,"477":1}}],["основании",{"2":{"98":1,"317":1,"338":1}}],["основываясь",{"2":{"263":1,"313":1}}],["основы",{"2":{"153":1,"207":1,"315":1,"327":1,"391":1}}],["основе",{"2":{"96":1,"158":1,"198":1,"209":1,"215":1,"221":1,"222":1,"234":1,"252":1,"280":1,"341":3,"354":1,"365":1,"369":1,"375":1,"394":1,"418":1,"450":1,"457":1,"473":1,"476":1}}],["основную",{"2":{"362":1,"408":1}}],["основная",{"2":{"34":1,"65":1,"139":1,"142":1,"157":1,"159":1,"167":1,"173":1,"176":1,"186":1,"189":1,"196":1,"217":1,"234":1,"268":1,"291":1,"300":1,"316":1,"375":1,"376":1}}],["основное",{"0":{"405":1},"1":{"406":1,"407":1},"2":{"258":1,"281":1,"307":1,"323":1,"418":1,"431":1,"448":1,"450":1}}],["основной",{"2":{"35":1,"127":1,"159":1,"182":1,"189":2,"195":1,"210":1,"213":1,"216":2,"252":1,"274":1,"277":2,"324":2,"331":1,"359":1,"371":1,"377":1,"418":1,"431":1,"441":1,"448":1,"450":1,"472":1,"483":1,"489":1}}],["основного",{"2":{"29":2,"122":1,"216":1,"314":1,"419":1}}],["основном",{"2":{"10":1,"83":1,"140":1,"156":1,"161":1,"172":1,"175":1,"176":1,"181":1,"185":1,"205":1,"207":1,"234":1,"274":1,"310":1,"311":1,"320":1,"333":1,"347":1,"354":1,"359":1,"370":1,"371":1,"410":1,"541":1}}],["основным",{"2":{"182":1,"223":1,"246":1,"282":1,"483":1}}],["основными",{"2":{"39":1,"155":1,"243":1,"481":1}}],["основные",{"0":{"28":1},"1":{"29":1,"30":1,"31":1,"32":1},"2":{"20":1,"59":1,"69":1,"105":1,"123":1,"153":1,"162":1,"248":1,"253":1,"332":1,"341":1,"401":1,"430":1,"448":1,"479":1,"483":1,"502":1}}],["основных",{"2":{"17":1,"64":1,"69":1,"92":1,"96":1,"127":1,"181":1,"264":1,"468":1,"479":1}}],["острова",{"2":{"246":1}}],["острых",{"2":{"96":1}}],["осторожность",{"2":{"331":1}}],["осторожно",{"2":{"190":1}}],["остаться",{"2":{"450":1,"473":1}}],["останемся",{"2":{"339":1}}],["останова",{"2":{"189":2}}],["остановится",{"2":{"178":1}}],["остановиться",{"2":{"133":1}}],["остановимся",{"2":{"12":1,"217":1,"247":1,"305":1,"337":1,"359":1,"453":1}}],["осталось",{"2":{"213":1,"416":1}}],["остальная",{"2":{"347":1}}],["остальной",{"2":{"263":1}}],["остальное",{"2":{"43":1,"225":1,"415":1,"441":1}}],["остальным",{"2":{"213":1}}],["остальными",{"2":{"183":1}}],["остальных",{"2":{"130":1,"160":1,"283":1,"327":2,"345":1,"431":1,"448":1,"478":1}}],["остальные",{"2":{"17":1,"109":1,"130":1,"184":1,"203":1,"362":1}}],["остается",{"2":{"105":1,"122":1,"127":1,"209":1,"362":1}}],["оставьте",{"2":{"433":1}}],["оставались",{"2":{"331":1}}],["оставаться",{"2":{"292":1,"310":1}}],["оставшихся",{"2":{"290":1}}],["оставшиеся",{"2":{"96":1}}],["оставшейся",{"2":{"209":1}}],["оставить",{"2":{"194":1}}],["оставим",{"2":{"7":1,"108":1}}],["оставляем",{"2":{"92":1,"106":1}}],["оставлять",{"2":{"64":1,"176":1}}],["остаются",{"2":{"17":1,"451":1,"546":1}}],["о",{"0":{"143":1,"482":1},"1":{"144":1},"2":{"4":1,"10":1,"11":3,"31":1,"44":1,"58":1,"68":1,"82":1,"83":1,"96":1,"98":1,"127":1,"135":1,"136":1,"138":1,"142":2,"145":1,"153":4,"155":2,"157":1,"166":1,"172":1,"174":3,"176":3,"186":1,"189":1,"190":1,"191":1,"205":2,"209":1,"210":1,"211":1,"217":1,"218":1,"221":1,"222":1,"223":2,"224":1,"225":1,"226":1,"243":2,"249":1,"253":1,"259":2,"264":2,"266":1,"270":4,"271":1,"277":2,"279":2,"289":1,"293":2,"319":1,"320":1,"321":1,"329":1,"331":1,"334":1,"336":1,"337":2,"342":1,"345":2,"349":1,"362":1,"365":1,"368":2,"374":1,"383":1,"390":1,"418":3,"433":1,"439":1,"446":2,"454":2,"456":1,"457":1,"459":1,"464":6,"466":1,"472":1,"474":1,"475":2,"477":1,"482":2,"492":2,"503":1,"513":1,"515":1,"588":1}}],["окажется",{"2":{"376":1}}],["оказывается",{"2":{"200":1}}],["оказывают",{"2":{"192":1}}],["оказание",{"2":{"74":1}}],["оказать",{"2":{"69":1}}],["оказаться",{"2":{"4":1,"209":1,"278":1,"428":1,"448":1}}],["оказалось",{"2":{"62":1}}],["окружению",{"2":{"424":1}}],["окружения",{"2":{"424":1,"425":1,"541":1}}],["окружений",{"2":{"424":1}}],["окружение",{"2":{"234":1,"460":1}}],["окружении",{"2":{"174":1,"331":1}}],["окружающей",{"2":{"258":1}}],["окружающим",{"2":{"3":1,"34":1}}],["окружает",{"2":{"225":2}}],["окружности",{"2":{"177":1}}],["окне",{"2":{"174":1,"184":1,"201":1,"270":1,"462":1}}],["окном",{"2":{"431":1,"449":1}}],["окно",{"2":{"172":1,"183":1,"201":1,"209":1,"262":1,"348":1,"359":1,"377":1,"459":1,"461":1,"471":1,"538":1}}],["окна",{"2":{"158":1,"160":1,"164":2,"165":1,"174":1,"246":1,"258":2,"262":1,"274":1,"277":1,"290":2,"418":1,"471":1,"588":1}}],["окошко",{"2":{"325":1}}],["окончательный",{"2":{"452":1}}],["окончательные",{"2":{"144":1}}],["окончательном",{"2":{"216":1}}],["окончания",{"2":{"457":1}}],["окончании",{"2":{"212":1,"264":1}}],["окончанием",{"2":{"166":1}}],["около",{"2":{"89":1}}],["опен",{"2":{"491":1}}],["оперировать",{"2":{"319":1,"338":1}}],["оперирующие",{"2":{"39":1}}],["оперируют",{"2":{"3":1}}],["оперативной",{"2":{"441":1}}],["оператора",{"2":{"420":1}}],["оператор",{"2":{"264":1,"333":1}}],["операциях",{"2":{"418":1}}],["операциям",{"2":{"344":1}}],["операциями",{"2":{"290":1,"326":1}}],["операция",{"2":{"252":1,"319":2,"325":1,"343":2,"374":1,"376":1}}],["операцией",{"2":{"252":1}}],["операций",{"2":{"230":1,"318":2,"324":2,"325":1,"326":2,"341":1,"344":1,"362":1,"377":2,"420":2,"446":1,"468":1,"475":1}}],["операции",{"2":{"174":1,"247":1,"248":1,"249":1,"252":1,"305":2,"320":2,"324":3,"325":1,"326":1,"331":1,"338":1,"341":2,"342":2,"343":2,"344":5,"370":1,"373":1,"418":1,"454":1,"473":1}}],["операцию",{"2":{"166":1,"202":1,"288":1,"324":1,"326":2}}],["операционные",{"2":{"270":1}}],["операционных",{"2":{"270":1,"277":1,"350":1}}],["операционными",{"2":{"268":1,"270":1}}],["операционной",{"2":{"152":1,"270":3,"272":1,"275":1,"384":1,"418":1,"468":1}}],["операционная",{"2":{"145":1,"270":1}}],["операционную",{"2":{"145":1}}],["оповестить",{"2":{"482":1}}],["оповещение",{"2":{"419":1}}],["оповещения",{"2":{"314":1,"410":2}}],["оповещает",{"2":{"314":1}}],["опору",{"2":{"166":1}}],["опытным",{"2":{"542":1}}],["опытный",{"2":{"491":1}}],["опытных",{"2":{"96":1,"126":1,"160":1,"400":1,"502":2}}],["опытному",{"2":{"491":1,"541":1}}],["опыту",{"2":{"167":1,"288":1,"295":1,"331":1}}],["опытом",{"2":{"157":1}}],["опыт",{"2":{"153":1,"157":1,"176":1,"192":1,"205":1,"225":1,"325":1,"491":3,"492":1,"501":2,"589":1}}],["опыта",{"2":{"126":1,"155":1,"192":1,"205":1,"223":1,"335":1,"399":1,"404":1,"456":1}}],["опубликовывать",{"2":{"314":1}}],["опубликовала",{"2":{"417":1}}],["опубликовал",{"2":{"166":1}}],["опубликовать",{"2":{"104":1,"139":1,"315":1,"398":1,"408":1}}],["опущены",{"2":{"277":1,"361":1,"374":1}}],["опущено",{"2":{"263":1}}],["опускаю",{"2":{"263":1}}],["опустили",{"2":{"375":1}}],["опустил",{"2":{"247":1}}],["опустим",{"2":{"243":1}}],["опустить",{"2":{"9":1,"418":1}}],["опираться",{"2":{"462":1}}],["опираясь",{"2":{"320":1}}],["опишу",{"2":{"96":1}}],["описательные",{"0":{"275":1},"2":{"275":1}}],["описательным",{"2":{"255":1,"268":1,"272":1}}],["описательная",{"2":{"247":1}}],["описать",{"2":{"225":1}}],["описан",{"2":{"424":1}}],["описанная",{"2":{"337":1}}],["описанных",{"2":{"191":1,"208":1,"289":1}}],["описанным",{"2":{"80":1}}],["описаны",{"2":{"128":1,"134":1,"221":1}}],["описаний",{"2":{"217":1}}],["описании",{"2":{"191":1}}],["описания",{"2":{"68":1,"129":1,"184":1,"217":1,"226":1,"272":1,"457":1,"462":1}}],["описанию",{"2":{"51":1}}],["описание",{"0":{"540":1},"2":{"50":1,"64":1,"68":3,"100":1,"104":1,"117":1,"118":1,"142":1,"200":1,"215":1,"217":2,"225":1,"234":1,"275":1,"299":1,"332":1,"368":1,"431":1,"448":1,"457":2,"492":1}}],["описанием",{"2":{"11":1,"168":1,"275":1}}],["описываются",{"2":{"502":1}}],["описывающий",{"2":{"342":1}}],["описывающие",{"2":{"226":1}}],["описывайте",{"2":{"489":1}}],["описываться",{"2":{"61":1}}],["описывает",{"2":{"44":1,"69":2}}],["опционально",{"2":{"275":1,"500":1,"511":1,"528":1}}],["опциональными",{"2":{"272":1}}],["опциональный",{"2":{"96":1}}],["опция",{"2":{"209":2,"210":1,"288":1,"471":1}}],["опциями",{"2":{"121":1,"128":1,"152":1,"165":2,"263":1,"279":1,"345":1,"535":1}}],["опцию",{"2":{"101":1,"194":1,"201":1,"356":1,"456":1,"464":1}}],["опций",{"2":{"88":1,"152":1,"165":1,"186":3,"187":2,"199":1,"210":1,"213":1,"462":1,"576":1}}],["опции",{"0":{"145":1,"214":1,"505":1,"575":1,"576":1},"1":{"146":1,"147":1,"148":1,"149":1,"150":1,"576":1,"577":1,"578":1,"579":1},"2":{"16":1,"85":1,"152":1,"184":1,"214":1,"225":1,"226":1,"257":1,"345":1,"446":1,"504":1,"535":1}}],["оптимизируют",{"2":{"454":1}}],["оптимизируя",{"2":{"69":1}}],["оптимизирован",{"2":{"252":1}}],["оптимизировать",{"2":{"210":1,"224":1,"453":1,"508":1}}],["оптимизаций",{"2":{"224":1,"331":1}}],["оптимизация",{"2":{"80":1,"492":1,"508":1}}],["оптимизации",{"2":{"51":1,"179":1,"331":1}}],["опять",{"2":{"56":1,"145":1,"315":1,"405":1,"407":1,"414":1,"462":1,"475":1}}],["оправдали",{"2":{"466":1}}],["оправдан",{"2":{"138":1}}],["оправдывает",{"2":{"344":1}}],["опробованы",{"2":{"62":1}}],["опрятностью",{"2":{"17":1}}],["определённых",{"2":{"483":1}}],["определил",{"2":{"359":1,"362":1}}],["определились",{"2":{"255":1,"263":1}}],["определили",{"2":{"219":1,"240":1,"246":1}}],["определите",{"2":{"263":1}}],["определиться",{"2":{"222":1}}],["определить",{"2":{"16":1,"68":1,"132":1,"161":1,"177":1,"217":1,"255":1,"263":2,"278":1,"283":1,"343":1,"358":1,"362":1,"365":1,"377":1,"382":1,"451":1}}],["определим",{"2":{"216":2,"245":1}}],["определяя",{"2":{"413":1}}],["определяю",{"2":{"226":1}}],["определяют",{"2":{"223":2,"226":2,"253":1}}],["определяются",{"2":{"68":1}}],["определяющая",{"2":{"274":1}}],["определяющих",{"2":{"275":1}}],["определяющим",{"2":{"264":1,"336":1}}],["определяющие",{"2":{"222":1,"225":2}}],["определяющий",{"2":{"210":1,"344":1}}],["определяющую",{"2":{"142":1}}],["определять",{"2":{"132":1,"211":1,"226":1,"255":1,"362":1,"418":1}}],["определяемой",{"2":{"252":1}}],["определяемого",{"2":{"230":1}}],["определяемое",{"2":{"69":1}}],["определяем",{"2":{"92":1,"177":1,"217":1,"223":2,"263":1,"277":1,"339":2,"343":1,"359":1,"362":1,"365":1,"413":1}}],["определяете",{"2":{"225":1,"450":1}}],["определяется",{"2":{"123":1,"226":1,"278":1,"338":1}}],["определяет",{"2":{"69":1,"123":1,"164":1,"210":1,"221":1,"222":1,"223":1,"225":1,"274":1,"277":1,"300":1,"303":1,"314":2}}],["определено",{"2":{"234":1,"457":1}}],["определен",{"2":{"226":1,"336":1,"365":1,"458":1}}],["определены",{"2":{"163":1,"252":1,"253":1,"359":1,"591":1}}],["определений",{"2":{"253":1}}],["определении",{"2":{"179":1,"252":1,"253":1,"365":2,"377":1}}],["определение",{"0":{"246":1,"247":1,"248":1,"358":1,"364":1},"1":{"359":1,"360":1},"2":{"143":1,"157":1,"254":1,"257":1,"318":1,"362":1,"365":2,"414":1,"450":1,"541":1}}],["определением",{"2":{"130":1,"157":1,"251":1,"259":1,"263":1,"361":1}}],["определению",{"2":{"135":1,"222":1,"249":1,"365":2}}],["определения",{"2":{"3":1,"178":1,"193":1,"217":1,"222":1,"250":1,"253":3,"254":1,"257":1,"277":2,"331":1,"363":2,"365":1,"379":1,"407":1,"414":1,"483":1}}],["определенную",{"2":{"210":1,"270":1,"370":1,"376":1,"430":1,"448":1,"476":1}}],["определенный",{"2":{"278":1,"289":1,"310":1,"338":1,"373":1,"375":1,"413":1,"483":1,"508":1}}],["определенных",{"2":{"163":1,"270":1,"354":1,"371":1,"450":1,"541":1}}],["определенными",{"2":{"144":1,"158":1,"225":1,"226":2,"245":1,"541":1,"542":1}}],["определенным",{"2":{"123":1,"124":1,"320":1,"335":1}}],["определенные",{"2":{"100":1,"189":1,"212":1,"222":1,"223":1,"226":1,"248":1,"257":1,"288":1,"294":1,"365":1,"463":1,"472":1,"475":1}}],["определенном",{"2":{"277":1}}],["определенному",{"2":{"41":1,"124":1,"222":1,"457":1}}],["определенное",{"2":{"277":1,"408":1}}],["определенного",{"2":{"7":1,"214":1,"320":1,"376":1,"446":1,"515":1}}],["определенной",{"2":{"7":1,"11":1,"44":1,"187":1,"431":1,"448":1,"473":1,"538":2}}],["оплаты",{"2":{"4":1,"12":1,"80":1,"200":1}}],["обёртку",{"2":{"538":1}}],["обзора",{"2":{"423":1}}],["обзор",{"2":{"403":1,"417":1,"431":1,"442":1,"448":1}}],["обхода",{"2":{"294":1,"349":1}}],["обходимся",{"2":{"20":1}}],["обиход",{"2":{"292":1}}],["обучающие",{"2":{"491":2}}],["обучающего",{"2":{"218":1}}],["обучение",{"2":{"218":1,"490":1,"491":1}}],["обучением",{"2":{"155":1}}],["обучения",{"2":{"63":1,"155":1}}],["обман",{"2":{"492":1}}],["обмануть",{"2":{"193":1,"194":1}}],["обманных",{"2":{"192":1}}],["обменять",{"2":{"373":1}}],["обмена",{"2":{"273":1,"332":1,"338":1,"362":1,"370":1,"371":3,"403":1,"411":1,"423":1,"475":1}}],["обмену",{"2":{"226":1,"407":1}}],["обмен",{"2":{"152":1,"254":1,"370":1,"371":1}}],["обмениваются",{"2":{"403":1}}],["обмениваться",{"2":{"41":1,"258":1,"260":1}}],["обменивается",{"2":{"3":1}}],["обсуждение",{"2":{"450":1}}],["обсуждали",{"2":{"270":1}}],["обсуждать",{"2":{"259":1}}],["обсуждается",{"2":{"158":1}}],["обсервер",{"2":{"283":1}}],["обслуживается",{"2":{"209":1}}],["обслуживании",{"2":{"214":1,"312":1,"396":1}}],["обслуживанием",{"2":{"320":1}}],["обслуживание",{"2":{"152":1,"157":1,"271":1}}],["обслуживания",{"2":{"143":1,"145":1,"149":1,"153":1,"278":1,"318":1,"345":1,"349":1}}],["обслуживать",{"2":{"145":1,"292":1}}],["обслуживаться",{"2":{"143":1,"270":1}}],["обстоятельствах",{"2":{"187":1}}],["обстоятельств",{"2":{"12":1,"96":1,"483":1}}],["оба",{"2":{"124":1,"252":1,"313":1,"325":1,"331":1,"349":1,"368":1,"440":1,"476":1,"573":1}}],["обновят",{"2":{"469":2}}],["обновим",{"2":{"421":1}}],["обновилось",{"2":{"319":1}}],["обновить",{"2":{"278":1,"460":1}}],["обновится",{"2":{"209":1,"482":1}}],["обновляют",{"2":{"344":1}}],["обновляться",{"2":{"357":2,"431":1,"448":1,"479":1}}],["обновлять",{"2":{"264":1,"376":1,"431":1,"448":1}}],["обновляется",{"2":{"264":1,"363":2}}],["обновляет",{"2":{"123":1,"217":1,"258":1,"320":1,"362":1}}],["обновляем",{"2":{"106":1,"265":1}}],["обновлено",{"2":{"254":1}}],["обновлении",{"2":{"318":1,"418":1,"419":1,"482":1}}],["обновление",{"2":{"218":1,"228":1,"319":1,"417":1,"424":1,"482":1}}],["обновлением",{"2":{"215":1}}],["обновления",{"2":{"152":2,"209":1,"270":1,"290":1,"341":1,"362":1}}],["обнаружении",{"2":{"475":1}}],["обнаружения",{"2":{"131":2,"290":1,"354":1,"362":2}}],["обнаружились",{"2":{"492":1}}],["обнаружили",{"2":{"293":1,"331":1}}],["обнаруживает",{"2":{"277":1,"476":1}}],["обнаруживаем",{"2":{"209":1}}],["обнаружить",{"2":{"257":1,"484":1}}],["обнаружите",{"2":{"210":1}}],["обнуляет",{"2":{"123":1}}],["обвесы",{"2":{"96":1}}],["общую",{"2":{"157":1,"226":1,"247":1,"251":1,"268":1}}],["общепризнанная",{"2":{"502":1}}],["общедоступным",{"2":{"377":1}}],["общее",{"2":{"217":1,"337":1,"405":1,"501":1}}],["общения",{"2":{"204":1,"483":1}}],["общение",{"2":{"126":1,"403":1}}],["общей",{"2":{"182":1,"188":1,"222":1,"247":1,"253":1,"286":1,"331":1,"418":1,"446":1}}],["общего",{"2":{"160":1,"286":1,"320":1,"337":1,"542":2}}],["общем",{"2":{"141":1,"222":1,"258":1,"286":1,"354":1}}],["общая",{"2":{"89":1,"200":1,"287":1}}],["общим",{"2":{"411":1}}],["общих",{"2":{"166":1,"222":2,"382":1}}],["общий",{"2":{"69":1,"152":1,"155":1,"240":1,"245":1,"313":1,"335":1,"375":1,"399":1,"411":1}}],["общие",{"0":{"79":1,"168":1,"180":1,"188":1},"1":{"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"189":1,"190":1,"191":1,"192":1},"2":{"69":1,"79":1,"104":1,"171":1,"219":1,"368":1,"369":1,"379":1,"399":2,"432":1}}],["обязательная",{"2":{"538":1}}],["обязательно",{"2":{"252":1,"491":2}}],["обязательной",{"2":{"209":1}}],["обязательные",{"2":{"284":1,"372":1,"504":1}}],["обязательными",{"2":{"240":1}}],["обязательным",{"2":{"226":1,"417":1}}],["обязательных",{"2":{"20":1}}],["обязанность",{"2":{"204":1}}],["обязанности",{"2":{"157":1}}],["обязаны",{"2":{"65":1}}],["объявим",{"2":{"412":1}}],["объявивший",{"2":{"405":1}}],["объявить",{"2":{"225":1,"251":1}}],["объявили",{"2":{"216":1,"217":1}}],["объявляя",{"2":{"410":1}}],["объявляют",{"2":{"226":2}}],["объявлять",{"2":{"130":1,"217":1,"226":1,"250":1}}],["объявляете",{"2":{"331":1}}],["объявляется",{"2":{"125":1,"226":1,"227":1}}],["объявляем",{"2":{"129":1,"149":2,"217":1,"223":1,"226":1,"264":1,"310":1,"311":1,"315":1,"319":3,"321":1,"347":1,"371":1,"406":1,"412":1,"414":1,"415":1,"420":1}}],["объявлены",{"2":{"450":1}}],["объявлено",{"2":{"233":1}}],["объявленным",{"2":{"226":1}}],["объявленного",{"2":{"125":1}}],["объявления",{"2":{"203":1,"326":1}}],["объявление",{"2":{"125":1,"252":1,"254":2,"326":1}}],["объяснить",{"2":{"354":2,"491":1}}],["объяснимо",{"2":{"475":1}}],["объясним",{"2":{"216":1,"455":1}}],["объяснению",{"2":{"492":1}}],["объяснения",{"2":{"195":1}}],["объяснение",{"2":{"64":1,"100":1,"101":1}}],["объясняющие",{"2":{"293":1}}],["объясняя",{"2":{"141":1}}],["объясняет",{"2":{"68":1,"491":1}}],["объем",{"2":{"217":1,"294":1}}],["объемном",{"2":{"197":1}}],["объему",{"2":{"50":1}}],["объединению",{"2":{"466":1}}],["объединением",{"2":{"466":1}}],["объединение",{"2":{"17":1,"69":1,"375":1,"376":1}}],["объединены",{"2":{"286":1}}],["объединен",{"2":{"210":1}}],["объединяющие",{"2":{"454":1}}],["объединяют",{"2":{"430":1,"448":1}}],["объединяются",{"2":{"142":1,"157":1}}],["объединяет",{"2":{"376":1,"457":1}}],["объединять",{"2":{"16":1,"467":3}}],["объединить",{"2":{"113":1,"474":1}}],["объективная",{"2":{"502":1}}],["объективных",{"2":{"12":1}}],["объектах",{"2":{"310":1,"446":1}}],["объекта",{"2":{"226":2,"229":1,"231":1,"253":2,"255":1,"264":2,"290":1,"300":1,"307":1,"308":1,"309":1,"310":1,"312":1,"316":1,"318":2,"319":4,"320":4,"321":1,"323":2,"342":2,"347":1,"349":1,"365":1,"412":1,"415":1,"418":1,"420":2,"421":1,"446":2,"450":1,"459":1,"461":1,"482":1,"483":1}}],["объектами",{"2":{"297":1,"314":1,"318":1,"411":1,"446":1}}],["объектам",{"2":{"125":2,"131":2,"331":1}}],["объектом",{"2":{"226":1,"303":1,"314":1,"315":1,"318":1,"319":1,"323":1,"349":1,"359":1,"412":2,"418":1,"420":1}}],["объектов",{"2":{"17":1,"131":1,"240":1,"264":1,"273":1,"275":2,"287":1,"296":1,"313":1,"318":1,"349":1,"418":1,"420":1,"446":1}}],["объекту",{"2":{"172":1,"211":1,"226":1,"257":1,"309":2,"310":1,"312":1,"316":1,"318":1,"320":1,"359":1,"365":1,"418":1}}],["объекты",{"2":{"132":1,"211":1,"217":1,"226":2,"232":1,"237":1,"253":1,"255":1,"332":1,"349":1,"368":2,"405":1,"417":1,"418":1,"446":1,"450":1,"457":1,"482":1}}],["объект",{"0":{"358":1},"1":{"359":1,"360":1},"2":{"112":1,"113":1,"128":1,"130":2,"131":6,"223":3,"225":1,"226":9,"251":1,"252":1,"253":3,"255":2,"257":1,"258":1,"260":1,"263":2,"264":2,"273":1,"275":1,"279":1,"287":1,"300":1,"301":1,"303":2,"305":2,"311":3,"312":1,"313":1,"314":2,"315":1,"317":1,"318":5,"319":6,"320":2,"323":2,"326":3,"332":1,"338":1,"342":2,"343":2,"345":1,"349":1,"359":3,"362":2,"364":1,"365":3,"366":1,"368":3,"369":1,"371":3,"372":2,"377":4,"405":1,"408":1,"410":1,"411":2,"413":1,"414":5,"415":1,"417":1,"418":3,"420":5,"421":2,"446":2,"457":1,"461":2,"462":1}}],["объекте",{"2":{"95":1,"112":1,"223":1,"277":1,"309":1,"332":1,"365":1,"446":1,"491":1}}],["объектным",{"2":{"483":1}}],["объектный",{"2":{"303":1,"311":1}}],["объектные",{"2":{"17":1}}],["объектной",{"2":{"331":1}}],["объектного",{"2":{"318":1}}],["объектно",{"2":{"3":1,"225":1,"287":1,"482":1,"483":1}}],["об",{"2":{"62":1,"142":1,"164":1,"165":1,"166":1,"174":1,"197":1,"210":1,"222":1,"224":1,"226":2,"232":1,"254":1,"255":1,"258":1,"277":1,"293":1,"304":1,"305":1,"308":1,"314":1,"323":1,"337":1,"349":1,"369":1,"371":1,"414":1,"419":1,"432":1,"471":1,"474":1,"482":2,"491":1}}],["образец",{"2":{"424":1}}],["образу",{"2":{"222":1}}],["образованную",{"2":{"371":1}}],["образовательный",{"2":{"65":1}}],["образом",{"2":{"17":1,"36":1,"51":1,"56":1,"96":1,"123":2,"124":1,"134":1,"142":2,"143":1,"159":1,"162":1,"165":1,"178":2,"191":1,"197":1,"198":1,"211":1,"212":3,"214":3,"215":1,"216":1,"217":2,"224":2,"231":2,"245":1,"246":2,"249":1,"251":1,"254":2,"255":3,"257":1,"258":1,"262":1,"263":2,"264":1,"277":1,"278":1,"279":1,"290":1,"304":1,"307":1,"310":2,"312":1,"317":1,"318":2,"320":1,"321":1,"323":1,"325":1,"326":2,"332":2,"343":1,"345":2,"346":1,"355":1,"357":1,"359":1,"363":2,"365":1,"370":1,"377":1,"405":1,"408":1,"409":1,"454":1,"456":2,"459":1,"460":1,"462":1,"464":1,"465":2,"469":1,"474":1,"475":1,"483":1,"490":1,"545":1}}],["обрабатывающий",{"2":{"371":1}}],["обрабатывают",{"2":{"252":1,"430":1,"448":1}}],["обрабатываются",{"2":{"68":1,"349":1,"491":1}}],["обрабатываем",{"2":{"332":2}}],["обрабатывает",{"2":{"258":1,"305":2,"370":1}}],["обрабатывается",{"2":{"135":1}}],["обрабатывать",{"2":{"210":1,"216":1,"318":1,"325":1,"334":1,"345":1,"354":1,"374":1,"410":1,"437":1,"492":2}}],["обрабатываться",{"2":{"210":1,"317":1}}],["обработчика",{"2":{"419":1}}],["обработчиком",{"2":{"319":1}}],["обработчиков",{"2":{"131":1}}],["обработчике",{"2":{"319":1}}],["обработчики",{"2":{"318":1}}],["обработчик",{"2":{"310":1,"339":1,"420":1}}],["обработана",{"2":{"234":1,"342":1}}],["обработать",{"2":{"122":1,"344":1}}],["обработка",{"2":{"331":2,"349":1,"374":1,"483":1}}],["обработке",{"2":{"331":1,"483":1}}],["обработкой",{"2":{"290":1}}],["обработку",{"2":{"166":1,"270":1,"331":1,"370":1,"411":1}}],["обработки",{"2":{"149":1,"214":1,"222":1,"264":1,"310":1,"315":1,"316":2,"317":1,"323":1,"325":1,"331":1,"339":1,"369":1,"370":1}}],["обратимся",{"2":{"412":1}}],["обратился",{"2":{"196":1}}],["обратит",{"2":{"203":1}}],["обратитесь",{"2":{"136":1,"334":1}}],["обратите",{"2":{"130":1,"131":1,"144":1,"147":1,"161":1,"162":1,"186":1,"189":1,"191":1,"210":1,"216":2,"217":3,"223":3,"225":1,"226":1,"254":1,"263":1,"264":3,"304":1,"319":2,"324":1,"326":1,"331":1,"333":1,"342":1,"345":1,"359":2,"365":1,"371":1,"375":1,"407":1,"410":1,"414":1,"417":1,"431":1,"457":1,"459":1,"462":3,"472":1}}],["обратиться",{"2":{"234":1,"279":1,"330":1}}],["обратить",{"2":{"114":1,"173":1,"191":1,"194":1,"221":1,"222":1,"314":1,"331":1,"362":1}}],["обратных",{"2":{"326":1}}],["обратными",{"2":{"326":1}}],["обратный",{"0":{"324":1},"1":{"325":1},"2":{"324":1}}],["обратные",{"2":{"283":1}}],["обратную",{"2":{"142":1,"166":1,"318":1}}],["обратная",{"2":{"133":1}}],["обратное",{"2":{"319":1}}],["обратном",{"2":{"255":1}}],["обратного",{"2":{"148":1,"324":3,"325":1,"326":3,"333":1,"349":1}}],["обратной",{"2":{"74":1,"176":1,"226":1,"258":1,"329":1,"354":1,"364":1,"453":1}}],["обратно",{"2":{"47":1,"95":1,"123":1,"171":1,"318":1,"331":1,"346":1,"373":1,"418":1}}],["обращаясь",{"2":{"461":1}}],["обращающегося",{"2":{"332":1}}],["обращаются",{"2":{"252":1,"418":1}}],["обращались",{"2":{"331":1}}],["обращаемся",{"2":{"338":1,"339":1,"417":1,"461":1}}],["обращается",{"2":{"125":1,"210":1,"354":1}}],["обращаешься",{"2":{"124":1}}],["обращаться",{"2":{"53":1,"122":2,"124":1,"210":1,"211":1,"217":1,"221":1,"270":1,"349":2,"359":1,"405":1,"412":1,"418":2,"419":1,"462":1,"491":1}}],["обращений",{"2":{"304":1,"338":1,"420":2,"545":1}}],["обращения",{"2":{"226":1,"278":1,"349":1,"492":1,"545":1}}],["обращении",{"2":{"124":1,"333":1,"492":2}}],["обращением",{"2":{"547":1}}],["обращение",{"2":{"41":1,"362":1}}],["обложка",{"2":{"157":1}}],["обладают",{"2":{"281":1}}],["обладает",{"2":{"222":1}}],["область",{"2":{"181":1,"187":1,"263":2,"278":2,"361":1,"375":1,"448":1,"451":1}}],["областью",{"2":{"178":1}}],["области",{"2":{"145":1,"155":1,"179":2,"189":1,"226":2,"277":1,"285":1,"294":1,"450":1,"456":1}}],["облачном",{"2":{"401":1,"425":1}}],["облачное",{"2":{"124":1}}],["облачные",{"2":{"377":1,"425":1}}],["облачных",{"2":{"39":1,"124":1}}],["облегчили",{"2":{"482":1}}],["облегчит",{"2":{"339":1,"485":1}}],["облегчения",{"2":{"329":1,"538":1}}],["облегчен",{"2":{"29":1}}],["облегчающего",{"2":{"466":1}}],["облегчают",{"2":{"454":1}}],["облегчая",{"2":{"428":1,"448":1}}],["облегчат",{"2":{"210":1,"329":1}}],["облегчать",{"2":{"20":1}}],["облегчает",{"2":{"3":1,"83":1,"162":1,"288":1}}],["обычная",{"2":{"142":1,"194":1,"272":1,"474":1}}],["обычное",{"2":{"270":2,"492":1}}],["обычном",{"2":{"211":1,"226":1,"309":1,"314":1,"326":1,"327":1,"457":1,"458":1}}],["обычной",{"2":{"111":1,"123":1,"454":1,"482":1}}],["обычного",{"2":{"39":1,"58":1,"159":1,"161":1,"171":1,"184":1,"222":1,"225":1,"270":1,"324":1,"325":2,"326":1,"342":1}}],["обычно",{"2":{"28":1,"30":1,"43":1,"88":1,"96":1,"118":1,"123":1,"126":1,"142":1,"145":3,"148":1,"152":1,"158":1,"171":1,"172":1,"178":3,"180":1,"181":1,"182":1,"184":1,"191":1,"195":1,"201":1,"207":1,"222":1,"224":1,"234":1,"246":2,"247":1,"249":1,"258":1,"264":1,"274":1,"275":1,"316":1,"319":1,"331":1,"335":2,"338":1,"371":1,"376":1,"433":1,"446":1,"450":2,"471":1,"475":1,"479":1,"482":1,"483":1,"491":1,"492":1,"541":1,"570":1}}],["обычным",{"2":{"208":1,"211":1,"461":1,"492":1}}],["обычными",{"2":{"112":1,"213":1,"411":1,"437":1}}],["обычный",{"2":{"169":1,"209":1,"225":2,"265":1,"303":1,"335":1,"405":1,"440":1,"461":1,"472":1}}],["обычных",{"2":{"23":1,"240":1,"270":1,"352":1,"460":1,"492":1}}],["обычные",{"2":{"17":1,"257":1,"320":1,"417":1,"473":1,"482":1,"483":1}}],["обещанных",{"2":{"326":1}}],["обещанной",{"2":{"326":2}}],["обещаний",{"2":{"326":2}}],["обещаниe",{"0":{"326":1}}],["обещаниями",{"2":{"326":1}}],["обещания",{"2":{"263":2,"325":1,"326":4,"338":1,"343":1}}],["обещание",{"2":{"252":1,"262":2,"263":1,"326":2,"338":1,"347":1}}],["обещающая",{"2":{"96":1}}],["оберток",{"2":{"492":1}}],["обертывания",{"2":{"326":1}}],["обертку",{"2":{"461":1,"462":1,"545":1}}],["обертка",{"2":{"122":1,"234":1,"482":1}}],["обертки",{"0":{"485":1},"2":{"20":1,"216":1,"217":1,"341":1,"461":1,"462":2,"483":1,"485":1,"492":1}}],["обернуть",{"2":{"304":1,"325":1,"326":1,"411":1,"458":1,"483":1}}],["обернутых",{"2":{"462":1}}],["обернуты",{"2":{"289":1}}],["обернутый",{"2":{"234":1}}],["обернутую",{"2":{"258":1}}],["обернем",{"2":{"217":1,"408":1,"419":1}}],["обеспечат",{"2":{"249":1,"425":1}}],["обеспечит",{"2":{"453":1}}],["обеспечить",{"2":{"167":1,"178":1,"222":1,"304":1,"315":1,"399":1}}],["обеспечим",{"2":{"340":1}}],["обеспечивает",{"2":{"208":2,"218":1,"221":1,"226":1,"252":1,"316":1,"325":1,"354":1,"361":1,"371":1,"405":1,"428":1,"448":1,"464":1}}],["обеспечивается",{"2":{"152":1,"483":1,"581":1}}],["обеспечивая",{"2":{"176":1,"270":1}}],["обеспечивающая",{"2":{"341":1}}],["обеспечивающие",{"2":{"142":2,"350":1,"451":1}}],["обеспечивают",{"2":{"138":1,"251":1,"340":1,"418":1}}],["обеспечьте",{"2":{"166":1}}],["обеспечении",{"2":{"165":1,"286":1}}],["обеспечению",{"2":{"145":1,"350":1,"384":1,"453":1}}],["обеспечением",{"2":{"157":1,"453":1,"464":1}}],["обеспечение",{"2":{"141":1,"145":2,"155":1,"157":2,"203":1,"335":1,"382":1,"384":1,"451":1,"453":2,"466":1}}],["обеспечения",{"0":{"283":1,"284":1,"294":1,"390":1},"1":{"284":1,"285":1,"286":1,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"326":1,"327":1,"328":1},"2":{"67":1,"69":1,"77":1,"126":1,"133":1,"155":1,"157":1,"163":1,"165":1,"203":1,"211":1,"215":1,"220":1,"221":1,"222":1,"234":1,"243":1,"247":1,"251":1,"258":2,"283":1,"284":2,"292":1,"293":1,"294":1,"324":1,"327":1,"329":1,"336":1,"390":2,"408":1,"419":1,"451":4,"453":2,"455":1,"466":2,"476":1,"479":1}}],["обе",{"2":{"128":1,"157":1,"277":1,"418":1,"463":1,"474":1}}],["обеих",{"2":{"9":1,"474":1}}],["обобщение",{"2":{"542":1}}],["обобщить",{"2":{"206":1}}],["обоснование",{"0":{"541":1}}],["обоснования",{"2":{"483":1}}],["обоснованное",{"2":{"198":1}}],["оболочку",{"2":{"492":1}}],["оболочки",{"2":{"431":1,"449":1}}],["оболочка",{"2":{"431":1,"448":1}}],["обоих",{"2":{"304":1,"418":2,"420":1,"456":1,"582":1}}],["обоими",{"2":{"247":1}}],["обоюдоострым",{"2":{"202":1}}],["обоюдная",{"2":{"65":1}}],["обо",{"2":{"160":1}}],["обороты",{"2":{"376":1}}],["оборудовании",{"2":{"155":1,"270":1}}],["оборудование",{"2":{"145":1}}],["оборачивайте",{"2":{"490":1}}],["оборачивает",{"2":{"334":1}}],["оборачивать",{"2":{"114":1,"326":1}}],["оборачивая",{"2":{"20":1}}],["обозначение",{"2":{"257":1,"359":1}}],["обозначениях",{"2":{"368":1}}],["обозначения",{"2":{"142":1,"184":1,"263":1,"365":1}}],["обозначить",{"2":{"246":1,"277":1}}],["обозначают",{"2":{"217":1}}],["обозначаются",{"2":{"170":1,"237":1}}],["обозначающий",{"2":{"160":1}}],["обозначается",{"2":{"178":1}}],["обозначает",{"2":{"142":1,"286":1}}],["обогащение",{"2":{"96":1}}],["обойтись",{"2":{"20":1,"208":1,"214":1}}],["обширен",{"2":{"13":1}}],["оно",{"2":{"147":1,"160":1,"167":1,"172":1,"174":2,"185":1,"186":2,"190":1,"209":1,"215":1,"218":1,"222":1,"226":1,"252":1,"255":1,"265":1,"268":1,"270":3,"274":1,"315":1,"326":2,"328":1,"333":2,"345":1,"359":1,"365":1,"371":1,"413":1,"414":1,"421":1,"453":3,"455":2,"462":1,"478":1,"492":1}}],["она",{"2":{"34":1,"36":1,"69":2,"86":1,"96":1,"133":1,"151":1,"197":1,"203":1,"204":1,"205":1,"213":1,"214":1,"215":1,"222":1,"225":1,"228":1,"229":2,"232":1,"233":1,"234":2,"258":1,"264":1,"270":1,"277":1,"283":1,"286":1,"290":2,"310":1,"311":1,"315":1,"320":1,"338":1,"341":1,"342":1,"377":1,"410":1,"412":2,"418":1,"423":1,"424":1,"446":2,"450":2,"453":2,"457":3,"466":1,"482":1,"484":1,"570":2}}],["онлайновыми",{"2":{"477":1}}],["онлайном",{"2":{"270":1}}],["онлайн",{"0":{"60":1},"1":{"61":1,"62":1,"63":1,"64":1,"65":1},"2":{"12":1,"14":1,"27":1,"61":1,"123":1,"150":1,"153":1,"172":1,"431":1,"440":1,"441":1,"449":1,"451":1,"475":1,"492":1,"541":1,"542":1,"579":1}}],["они",{"2":{"3":3,"22":1,"47":1,"96":1,"118":1,"142":1,"143":1,"145":1,"155":2,"156":1,"158":2,"160":1,"164":1,"165":1,"168":1,"169":1,"171":2,"174":1,"175":1,"181":1,"184":1,"186":1,"187":1,"191":1,"207":1,"210":1,"211":1,"221":1,"222":2,"230":3,"231":1,"234":3,"235":1,"236":1,"238":1,"239":1,"240":1,"255":1,"257":1,"265":1,"266":1,"268":1,"270":4,"272":1,"275":1,"277":2,"278":1,"281":1,"283":1,"284":1,"286":1,"288":1,"293":1,"294":1,"295":1,"296":1,"297":1,"298":1,"299":1,"309":1,"312":1,"319":1,"323":1,"324":1,"325":1,"326":2,"331":4,"338":1,"341":1,"342":2,"344":1,"345":1,"349":1,"359":1,"361":1,"364":1,"368":4,"375":2,"377":1,"378":2,"410":1,"417":2,"424":1,"431":1,"432":2,"437":3,"440":1,"448":1,"450":1,"453":1,"454":2,"457":3,"460":1,"462":2,"474":1,"475":2,"477":2,"478":1,"482":2,"483":2,"486":1,"491":2,"492":1}}],["он",{"0":{"466":1},"2":{"2":1,"30":1,"32":1,"43":1,"68":1,"96":1,"98":1,"114":1,"123":3,"126":1,"127":1,"128":1,"131":2,"132":1,"134":1,"142":4,"148":2,"154":2,"157":3,"159":2,"160":2,"164":1,"166":1,"167":1,"170":3,"171":1,"174":1,"176":1,"178":1,"179":2,"183":1,"184":1,"185":1,"186":1,"189":1,"190":1,"194":2,"195":1,"196":1,"199":1,"201":1,"202":2,"208":1,"209":3,"210":4,"211":1,"212":2,"213":1,"214":2,"217":1,"221":1,"222":2,"225":2,"226":1,"234":2,"245":1,"247":2,"251":1,"252":2,"259":2,"262":2,"264":3,"268":1,"270":1,"272":1,"276":1,"277":3,"278":3,"279":1,"282":1,"287":1,"288":2,"289":1,"291":2,"292":1,"293":1,"294":1,"303":1,"304":1,"307":1,"309":1,"310":1,"312":1,"313":1,"314":4,"316":1,"318":2,"320":1,"321":3,"323":1,"324":2,"331":5,"332":1,"333":2,"335":1,"336":1,"338":3,"339":1,"341":2,"345":1,"346":1,"359":1,"361":1,"362":5,"363":1,"365":3,"366":2,"368":1,"370":1,"371":2,"376":1,"384":1,"405":2,"412":1,"413":1,"414":1,"418":3,"420":1,"424":2,"431":1,"440":1,"441":2,"446":1,"448":1,"450":1,"453":2,"456":3,"457":2,"460":2,"462":1,"463":1,"464":1,"465":1,"467":3,"468":1,"471":2,"476":1,"478":3,"479":1,"482":1,"483":1,"492":3}}],["отчетности",{"2":{"464":1}}],["отчета",{"2":{"464":1}}],["отчет",{"2":{"457":1,"464":3}}],["отходят",{"2":{"451":1}}],["отец",{"2":{"407":1}}],["отовсюду",{"2":{"450":1}}],["отодвигает",{"2":{"307":1}}],["отобрав",{"2":{"454":1}}],["отобразим",{"2":{"263":1}}],["отобразит",{"2":{"209":1,"215":2}}],["отобразить",{"2":{"174":1,"178":1,"213":1,"229":1,"234":1}}],["отобразится",{"2":{"172":1}}],["отображен",{"2":{"362":1}}],["отображено",{"2":{"231":1}}],["отображении",{"2":{"160":1,"173":1,"174":1,"210":1,"217":1,"230":1,"234":2,"331":1}}],["отображения",{"2":{"107":1,"160":1,"161":1,"171":1,"172":3,"175":4,"183":1,"185":1,"187":1,"217":4,"222":1,"223":1,"230":2,"231":1,"252":1,"255":1,"259":1,"263":2,"264":1,"273":1,"342":1,"357":1,"410":1,"465":1,"492":1}}],["отображением",{"2":{"252":1,"273":1}}],["отображение",{"2":{"23":1,"143":1,"184":1,"331":1,"450":1}}],["отображая",{"2":{"355":1}}],["отображаемому",{"2":{"461":1}}],["отображаемый",{"2":{"263":1,"331":1}}],["отображаемые",{"2":{"226":1}}],["отображаем",{"2":{"252":1,"263":1,"407":1}}],["отображается",{"2":{"172":1,"184":1,"191":1,"201":1,"234":1,"252":1,"257":1,"288":1,"357":1,"365":1}}],["отображает",{"2":{"160":1,"175":1,"217":1,"247":2,"357":1,"413":1}}],["отображать",{"2":{"178":1,"346":1,"356":1,"357":1,"359":1,"362":1,"409":1,"432":1,"437":1}}],["отображаться",{"2":{"95":1,"174":1,"184":1,"185":1,"209":1,"252":2,"273":1,"277":2,"280":1,"361":1,"364":2,"365":1}}],["отображающего",{"2":{"465":1}}],["отображающие",{"2":{"428":1,"448":1}}],["отображающий",{"2":{"176":1,"320":1,"450":1}}],["отображающая",{"2":{"172":1,"217":1}}],["отображаются",{"2":{"181":1,"184":1,"191":1,"213":2,"226":1,"417":1}}],["отображают",{"2":{"171":1,"187":1,"191":1,"405":1}}],["отбрасывании",{"2":{"290":1}}],["отладка",{"2":{"412":1}}],["отложено",{"2":{"218":1,"331":1}}],["отложенных",{"2":{"217":2}}],["отличную",{"2":{"279":1}}],["отличный",{"2":{"208":1,"279":1,"355":1,"462":1,"491":1}}],["отличным",{"2":{"151":1,"280":1}}],["отличного",{"2":{"335":1}}],["отличной",{"2":{"331":1}}],["отличное",{"2":{"203":1,"312":1,"440":1}}],["отлично",{"2":{"142":1,"326":1,"482":1}}],["отличает",{"2":{"352":1}}],["отличается",{"2":{"23":1,"125":1,"141":1,"154":1,"362":1,"461":1,"478":1,"479":1}}],["отличать",{"2":{"258":1}}],["отличаться",{"2":{"208":1,"210":1,"299":1}}],["отличалась",{"2":{"159":1}}],["отличающим",{"2":{"264":1}}],["отличающий",{"2":{"142":1}}],["отличаются",{"2":{"152":1,"446":1}}],["отличия",{"2":{"482":1}}],["отличительных",{"2":{"320":1}}],["отличительной",{"2":{"319":1}}],["отличить",{"2":{"203":1}}],["отличимы",{"2":{"159":1}}],["отличий",{"2":{"141":1}}],["отличием",{"2":{"218":1,"349":1}}],["отличие",{"2":{"26":1,"39":1,"122":1,"148":1,"152":1,"165":1,"170":1,"207":1,"210":1,"213":1,"217":1,"230":1,"253":1,"307":1,"411":1,"417":1,"418":2,"446":1,"450":2,"453":1,"476":1,"482":1}}],["отнимают",{"2":{"479":1}}],["отнести",{"2":{"368":1}}],["отнесены",{"2":{"180":1}}],["относящаяся",{"2":{"503":1}}],["относящейся",{"2":{"369":1}}],["относятся",{"2":{"193":2,"354":1}}],["относительно",{"2":{"338":1,"339":1,"492":1}}],["относительные",{"2":{"214":1}}],["относить",{"2":{"272":2}}],["относиться",{"2":{"247":1}}],["относится",{"2":{"2":1,"20":1,"104":1,"157":1,"161":1,"189":1,"226":4,"257":1,"268":1,"288":1,"290":2,"326":1,"331":1}}],["отношений",{"2":{"247":1,"408":1}}],["отношении",{"2":{"230":1}}],["отношению",{"2":{"226":1}}],["отношения",{"2":{"46":1,"251":1,"277":1,"314":1,"405":1}}],["отношение",{"2":{"46":1}}],["оттенок",{"2":{"270":1}}],["отторжение",{"2":{"166":1}}],["оттуда",{"2":{"96":1,"111":1}}],["отредактирован",{"2":{"588":1}}],["отредактированы",{"2":{"471":1,"474":1}}],["отредактировать",{"2":{"474":1}}],["отредактируйте",{"2":{"474":1}}],["отрендерит",{"2":{"373":1}}],["отреагировать",{"2":{"233":1}}],["отрисовкой",{"2":{"492":1}}],["отрисовку",{"2":{"483":1}}],["отрисованные",{"2":{"462":1}}],["отрисовываться",{"2":{"359":1}}],["отрицательных",{"2":{"326":2,"458":1}}],["отрицательные",{"2":{"155":1,"368":1}}],["отрицательного",{"2":{"326":1,"458":1}}],["отражение",{"2":{"421":1}}],["отражалось",{"2":{"363":1}}],["отражаются",{"2":{"221":1}}],["отражается",{"2":{"411":1,"421":1}}],["отражает",{"2":{"159":1,"248":1,"346":1}}],["отражать",{"2":{"134":1,"159":1,"346":1,"347":1}}],["отражаться",{"2":{"95":1,"228":1}}],["отразятся",{"2":{"253":1}}],["отраслевым",{"2":{"208":1}}],["отраслевыми",{"2":{"158":1}}],["отрасли",{"2":{"168":1,"204":1,"281":1,"356":1}}],["отзывами",{"2":{"492":1}}],["отзывчивости",{"2":{"483":1}}],["отзывчивой",{"2":{"331":1}}],["отзывчивого",{"2":{"189":1,"270":1}}],["отзывчивых",{"2":{"382":1}}],["отзывчивый",{"2":{"189":1}}],["отзывчивые",{"0":{"189":1},"2":{"270":2}}],["отзывчивыми",{"2":{"133":1,"268":1}}],["отзывы",{"2":{"4":1,"50":1,"80":1}}],["отследить",{"2":{"466":1}}],["отслеживать",{"2":{"471":1,"472":2,"477":1}}],["отслеживаться",{"2":{"471":1}}],["отслеживаются",{"2":{"417":1}}],["отслеживание",{"2":{"451":1,"466":1}}],["отслеживании",{"2":{"337":1}}],["отслеживанию",{"2":{"314":1,"319":1}}],["отслеживания",{"2":{"208":1,"231":1,"262":1,"316":1,"418":1,"446":2,"465":1,"471":1}}],["отслеживает",{"2":{"210":1,"446":3}}],["отсылается",{"2":{"418":1}}],["отсылаю",{"2":{"127":1,"326":1,"345":1,"362":1}}],["отсутствует",{"2":{"464":1}}],["отсутствие",{"2":{"451":1}}],["отсутствий",{"2":{"59":1}}],["отсутствовавшие",{"2":{"341":1}}],["отстоит",{"2":{"377":1}}],["отступов",{"2":{"290":1}}],["отступам",{"2":{"162":1}}],["отстает",{"2":{"491":1}}],["отстают",{"2":{"270":1}}],["отставать",{"2":{"270":1}}],["отсюда",{"2":{"213":1,"349":1}}],["отписки",{"2":{"410":1}}],["отпечаток",{"2":{"123":1,"293":1}}],["отправили",{"2":{"373":1,"374":1}}],["отправитель",{"2":{"349":1}}],["отправить",{"2":{"151":1,"332":1,"346":1,"375":1,"377":1}}],["отправленные",{"2":{"370":1}}],["отправленную",{"2":{"346":1,"354":1}}],["отправляя",{"2":{"336":1}}],["отправлять",{"2":{"270":1,"339":1,"376":1,"409":1,"492":1}}],["отправляемого",{"2":{"347":1}}],["отправляем",{"2":{"340":1,"347":1,"374":1,"475":1}}],["отправляемые",{"2":{"226":1}}],["отправляет",{"2":{"123":1,"333":1,"340":1,"354":1,"467":1}}],["отправляется",{"2":{"3":1,"375":1}}],["отправляли",{"2":{"166":1}}],["отправки",{"2":{"347":2,"349":1,"376":2}}],["отправке",{"2":{"314":1}}],["отправка",{"2":{"122":1,"375":1,"430":1,"448":1}}],["отправной",{"2":{"246":1,"268":1}}],["отправная",{"2":{"209":1,"210":1,"261":1,"272":1}}],["отправную",{"2":{"127":1,"245":1}}],["отката",{"2":{"424":1}}],["отказа",{"2":{"376":1,"377":1}}],["отказаться",{"2":{"375":1}}],["отказывается",{"2":{"277":1}}],["отказ",{"2":{"152":1,"196":1,"202":1,"262":1,"459":1}}],["отключена",{"2":{"471":1}}],["отключить",{"2":{"446":1}}],["откладывается",{"2":{"331":1}}],["отклоняется",{"2":{"371":1}}],["отклоняем",{"2":{"326":1}}],["отклоняющий",{"2":{"369":1}}],["отклонив",{"2":{"339":1}}],["отклонить",{"2":{"249":1,"277":1,"338":1}}],["отклонения",{"2":{"263":2}}],["отклонение",{"2":{"173":1,"263":1}}],["отклонено",{"2":{"252":1,"326":1}}],["откроем",{"2":{"213":1,"348":1}}],["откройте",{"2":{"209":2,"214":1,"217":1,"280":1,"471":1}}],["откровенного",{"2":{"202":1}}],["открыла",{"2":{"291":1}}],["открыв",{"2":{"214":1}}],["открываемость",{"2":{"417":1}}],["открываем",{"2":{"278":1}}],["открывает",{"2":{"223":1,"248":1,"263":1,"264":1,"305":1,"307":1,"457":1,"462":1}}],["открывается",{"2":{"172":1,"183":1,"201":1,"552":1}}],["открываться",{"2":{"270":1}}],["открывать",{"2":{"262":1,"418":1}}],["открывающем",{"2":{"227":1}}],["открывающих",{"2":{"191":1}}],["открываются",{"2":{"172":1}}],["открыт",{"2":{"552":1}}],["открытия",{"2":{"280":1,"465":1,"508":1}}],["открытии",{"2":{"262":1}}],["открытие",{"2":{"247":1}}],["открытого",{"2":{"467":1}}],["открыто",{"2":{"173":1,"273":1}}],["открытом",{"2":{"153":1,"491":1}}],["открытый",{"2":{"293":1}}],["открытыми",{"2":{"491":1}}],["открытым",{"2":{"209":1}}],["открытые",{"2":{"124":1}}],["открытых",{"2":{"95":1,"377":1,"418":1}}],["открыть",{"2":{"96":1,"151":1,"160":3,"210":1,"249":1,"262":1,"331":1,"376":1,"377":2,"421":1,"456":1,"471":1}}],["откуда",{"2":{"122":1,"482":1}}],["отяжелел",{"2":{"43":1}}],["отмечают",{"2":{"453":1}}],["отмечаем",{"2":{"23":1,"106":1}}],["отмеченных",{"2":{"280":1}}],["отмеченным",{"2":{"194":1}}],["отмечена",{"2":{"280":1}}],["отметить",{"2":{"215":1,"217":1,"255":1,"264":2,"270":1,"299":1,"317":1,"323":1,"345":1,"354":1,"405":1,"411":1,"490":1,"491":1}}],["отметим",{"2":{"33":1}}],["отметьте",{"2":{"194":1}}],["отметка",{"2":{"173":1}}],["отменяет",{"2":{"354":1}}],["отменять",{"2":{"166":1}}],["отменены",{"2":{"316":1}}],["отменен",{"2":{"263":1}}],["отменена",{"2":{"215":1,"376":1}}],["отмене",{"2":{"262":1}}],["отмены",{"2":{"196":1}}],["отменит",{"2":{"196":1}}],["отменить",{"2":{"166":1,"202":1,"249":1,"263":1}}],["отдавать",{"2":{"492":1}}],["отдаваемыми",{"2":{"11":1}}],["отдачи",{"2":{"464":1}}],["отделяет",{"2":{"316":1}}],["отделить",{"2":{"482":1,"491":1}}],["отделит",{"2":{"225":1}}],["отделены",{"2":{"186":1}}],["отделку",{"2":{"26":1}}],["отдельная",{"2":{"73":1,"111":1,"125":1,"270":1}}],["отдельного",{"2":{"359":1,"431":1,"449":1,"482":1,"542":1}}],["отдельности",{"2":{"294":1}}],["отдельном",{"2":{"278":1,"291":1,"413":1,"450":1}}],["отдельно",{"2":{"67":1,"96":2,"431":2,"448":2,"542":1}}],["отдельной",{"2":{"46":1,"99":1,"178":1,"348":1}}],["отдельное",{"2":{"33":1,"481":1}}],["отдельным",{"2":{"331":1}}],["отдельными",{"2":{"125":1}}],["отдельных",{"2":{"153":1,"215":1,"261":1,"331":1,"350":1,"462":1,"463":2,"589":1}}],["отдельный",{"2":{"9":1,"41":1,"83":1,"88":1,"107":1,"111":1,"114":2,"122":2,"225":1,"291":1,"417":1,"431":1,"476":1,"483":1,"490":1}}],["отдельные",{"2":{"2":1,"11":1,"80":1,"431":1,"448":1,"483":1}}],["отдельную",{"2":{"3":1,"23":1,"273":1,"286":1,"450":1,"475":1}}],["от",{"0":{"384":1},"2":{"3":1,"20":2,"23":1,"26":1,"39":1,"56":1,"61":1,"64":1,"74":1,"89":1,"96":4,"117":1,"122":3,"123":1,"125":4,"129":1,"135":1,"138":1,"141":1,"142":4,"148":1,"151":1,"152":2,"154":1,"155":1,"158":1,"159":2,"164":1,"165":2,"169":2,"170":1,"172":1,"173":1,"174":2,"179":1,"184":1,"186":2,"187":1,"189":3,"191":2,"194":1,"196":1,"202":2,"203":2,"204":1,"207":1,"208":1,"210":2,"211":3,"213":1,"217":4,"219":1,"221":2,"222":3,"223":1,"225":1,"226":3,"230":2,"241":1,"246":1,"247":1,"253":2,"254":1,"257":1,"258":1,"259":1,"264":3,"266":1,"270":3,"277":3,"283":2,"285":1,"286":1,"291":1,"294":1,"295":2,"299":1,"309":1,"314":1,"316":1,"317":1,"318":3,"320":1,"321":1,"323":1,"324":3,"327":1,"331":2,"332":2,"333":1,"335":1,"337":1,"341":3,"342":1,"348":1,"350":1,"352":1,"370":4,"371":2,"373":1,"374":1,"375":1,"376":5,"377":1,"378":1,"384":1,"405":1,"408":1,"410":3,"411":1,"412":1,"417":2,"418":3,"425":1,"428":2,"437":1,"446":1,"448":2,"450":3,"451":1,"453":1,"455":1,"461":1,"464":1,"466":4,"471":1,"475":1,"476":3,"478":1,"479":2,"482":3,"483":1,"486":1,"490":1,"491":4,"501":1,"538":1,"541":1,"542":1,"570":1}}],["отводится",{"2":{"159":1}}],["отвечающего",{"2":{"466":1}}],["отвечающие",{"2":{"450":1,"482":1}}],["отвечающий",{"2":{"331":1,"349":1}}],["отвечаем",{"2":{"349":1,"370":2}}],["отвечает",{"2":{"123":1,"157":1,"199":1,"210":1,"245":1,"246":1,"247":2,"248":1,"249":1,"278":1,"407":1,"433":1,"464":1,"483":1,"591":1}}],["отвечал",{"2":{"349":1}}],["отвечать",{"2":{"6":1,"335":1,"384":1}}],["ответы",{"2":{"338":1}}],["ответственная",{"2":{"450":1}}],["ответственностью",{"2":{"288":2}}],["ответственность",{"2":{"283":1,"286":1,"310":1,"314":1,"370":2}}],["ответственности",{"0":{"286":1,"288":1},"2":{"283":1,"286":4}}],["ответственным",{"2":{"2":1}}],["ответьте",{"2":{"267":1,"282":1}}],["ответить",{"2":{"222":1,"242":1,"464":1}}],["ответов",{"2":{"182":1,"502":2}}],["ответе",{"2":{"125":2}}],["ответах",{"2":{"502":1,"508":1}}],["ответа",{"2":{"4":2,"278":1,"324":1,"338":1,"347":1,"349":3,"370":1,"374":1,"375":2}}],["ответ",{"2":{"4":1,"125":2,"171":1,"248":1,"278":1,"331":1,"340":1,"349":2,"354":1,"362":1,"370":2,"372":1,"459":1,"462":1,"491":1,"500":1}}],["отвлечься",{"2":{"3":1}}],["н",{"2":{"491":1}}],["нынешними",{"2":{"216":1}}],["ный",{"2":{"62":1}}],["нюансов",{"2":{"125":1,"127":1}}],["нулей",{"2":{"323":1}}],["нулевой",{"2":{"279":1}}],["нулевые",{"2":{"142":1}}],["нуля",{"2":{"207":2,"222":1,"327":1}}],["нули",{"2":{"142":1}}],["ну",{"2":{"83":1,"263":1,"323":1}}],["нуждающихся",{"2":{"416":1}}],["нуждаются",{"2":{"255":1}}],["нужд",{"2":{"369":1,"412":1}}],["нужды",{"2":{"207":1}}],["нужен",{"0":{"466":1},"2":{"17":1,"279":1,"282":1,"311":1,"362":3,"424":1,"440":1,"450":2,"469":1,"481":1,"491":2,"492":1,"508":1,"562":1}}],["нужную",{"2":{"312":1,"468":1,"561":1}}],["нужна",{"2":{"12":1,"126":1,"133":1,"222":1,"287":1,"290":1,"431":1,"439":1,"446":1,"483":1,"484":1}}],["нужное",{"2":{"89":1,"424":1}}],["нужно",{"2":{"12":1,"39":1,"41":2,"59":1,"68":1,"82":1,"83":1,"96":5,"104":2,"111":1,"121":1,"123":2,"129":1,"131":1,"142":2,"149":1,"155":1,"177":1,"178":1,"207":1,"210":1,"213":2,"216":1,"217":1,"218":1,"222":1,"223":1,"224":1,"226":2,"230":1,"234":1,"247":1,"252":1,"257":1,"258":1,"263":1,"288":1,"310":1,"315":1,"318":1,"326":1,"342":1,"349":1,"362":2,"371":1,"375":1,"410":1,"415":1,"424":1,"433":1,"437":2,"440":2,"446":1,"450":2,"453":1,"456":1,"459":1,"471":1,"472":1,"474":1,"479":2,"483":1,"490":1,"491":1,"492":2,"508":1,"531":1}}],["нужного",{"2":{"9":1,"191":1}}],["нужный",{"2":{"142":1,"203":1,"213":1,"479":1,"531":2,"574":1}}],["нужные",{"2":{"124":1,"391":1,"508":1,"586":1}}],["нужных",{"2":{"96":1,"446":1,"570":1}}],["нужны",{"2":{"7":1,"44":1,"112":1,"432":1,"446":1,"460":1,"462":1,"483":1,"492":1,"570":1}}],["нужным",{"2":{"3":1}}],["нём",{"2":{"41":1,"111":1,"487":1}}],["нежелаемые",{"2":{"541":1}}],["нежелательных",{"2":{"212":1}}],["нежелательные",{"2":{"175":1}}],["нежелательная",{"2":{"211":1}}],["неба",{"2":{"531":1}}],["небом",{"2":{"511":1,"528":1}}],["небольшом",{"2":{"362":1}}],["небольшого",{"2":{"123":1,"124":1,"223":1,"405":1,"419":1,"427":1,"448":1}}],["небольшой",{"0":{"109":1},"2":{"114":1,"145":1,"172":1,"217":1,"258":1,"344":1,"348":1,"349":1,"442":1,"492":1}}],["небольшое",{"2":{"38":1,"131":1,"144":1,"173":1,"183":1,"223":1,"234":1}}],["небольшим",{"2":{"138":1,"218":1,"222":1}}],["небольшими",{"2":{"100":1,"280":1,"421":1}}],["небольших",{"2":{"96":1,"189":1,"226":1,"252":1,"403":1,"412":1,"431":1,"448":1,"464":1,"490":1,"542":1}}],["небольшие",{"2":{"80":1,"96":2,"156":1,"178":1,"292":1}}],["небольшая",{"0":{"265":1},"2":{"89":1}}],["небольшую",{"2":{"2":1,"195":1,"492":1}}],["неблокирующая",{"2":{"483":1}}],["неуклюжим",{"2":{"462":1}}],["неудачей",{"2":{"453":1,"474":1}}],["неудачи",{"2":{"326":2,"453":1}}],["неудачное",{"2":{"450":1}}],["неудачного",{"2":{"326":1}}],["неудачной",{"2":{"252":1,"457":2}}],["неудачный",{"2":{"373":1}}],["неудачные",{"2":{"325":1}}],["неудачным",{"2":{"324":1,"376":1}}],["неудача",{"2":{"324":1}}],["неудобства",{"2":{"449":1}}],["неудобно",{"2":{"437":1}}],["неудобными",{"2":{"96":1}}],["неудобен",{"2":{"96":1}}],["неэффективным",{"2":{"492":1}}],["неэффективной",{"2":{"410":1}}],["неэтичной",{"2":{"193":1}}],["недействительным",{"2":{"462":1}}],["неделимого",{"2":{"286":1}}],["недопущения",{"2":{"550":1}}],["недопонимание",{"2":{"68":1}}],["недочеты",{"2":{"453":1}}],["недорого",{"2":{"425":1}}],["недоумении",{"2":{"176":1}}],["недостающие",{"2":{"460":1,"464":1}}],["недостаточно",{"2":{"268":1,"269":1,"376":1}}],["недостаток",{"2":{"96":1,"325":1,"410":1}}],["недостатком",{"2":{"331":2,"411":1}}],["недостатков",{"2":{"251":1,"354":1,"370":1,"376":1}}],["недостатки",{"2":{"226":1,"270":2,"354":1,"370":1,"412":1,"456":1}}],["недостатка",{"2":{"208":1,"374":1}}],["недоступна",{"2":{"133":1}}],["нередко",{"2":{"376":1}}],["нереактивных",{"2":{"362":1}}],["нереактивные",{"2":{"226":1}}],["нерационального",{"2":{"290":1}}],["неразличенно",{"2":{"157":1}}],["независимых",{"2":{"456":2}}],["независимы",{"2":{"450":1}}],["независимые",{"2":{"431":1,"448":1}}],["независимость",{"2":{"431":1}}],["независимо",{"2":{"277":1,"294":1,"408":1,"410":2,"431":2,"448":1,"449":1,"471":1}}],["независимое",{"2":{"266":1}}],["незавершенных",{"2":{"217":1}}],["незаслужено",{"2":{"123":1}}],["неиспользуемых",{"2":{"290":1}}],["неиспользуемые",{"2":{"211":1}}],["неисчерпывающими",{"2":{"285":1}}],["неизвестно",{"2":{"483":1}}],["неизменяемым",{"2":{"377":1}}],["неизменяемое",{"2":{"226":1}}],["неизменным",{"2":{"310":1}}],["неизбежным",{"2":{"186":1}}],["нечто",{"2":{"207":1,"357":1,"365":1,"413":1,"450":1}}],["ненужную",{"2":{"292":1}}],["ненужным",{"2":{"287":1}}],["ненужной",{"2":{"450":1}}],["ненужного",{"2":{"292":1}}],["ненужному",{"2":{"288":1}}],["ненужное",{"2":{"126":1}}],["ненужно",{"2":{"122":1}}],["ненависть",{"2":{"201":1}}],["ненаправленность",{"0":{"199":1}}],["негативный",{"2":{"176":1}}],["негативных",{"2":{"176":1,"291":1}}],["него",{"2":{"9":1,"11":1,"85":1,"89":1,"96":1,"98":1,"111":1,"113":1,"125":1,"138":2,"152":1,"185":1,"187":1,"190":1,"204":1,"208":1,"211":1,"214":1,"217":1,"234":1,"293":1,"304":1,"365":1,"374":1,"375":1,"407":1,"420":1,"439":1,"441":1,"450":2,"456":1,"460":1,"462":1,"463":1,"467":1,"549":1}}],["неяркой",{"2":{"170":1}}],["неявно",{"2":{"112":1}}],["невероятно",{"2":{"454":1}}],["невелика",{"2":{"362":1}}],["невелик",{"2":{"217":1}}],["невелики",{"2":{"145":1}}],["невозможен",{"2":{"355":1}}],["невозможна",{"2":{"344":1}}],["невозможным",{"2":{"196":1}}],["невозможной",{"2":{"454":1}}],["невозможность",{"2":{"196":1}}],["невозможности",{"2":{"12":1}}],["невозможно",{"2":{"142":1,"150":1,"203":1,"211":1,"264":1,"286":1,"450":1,"454":1,"491":1}}],["невыполненных",{"2":{"215":1}}],["неочевидные",{"2":{"502":1}}],["неотзывчивым",{"2":{"331":1,"418":1}}],["неотъемлемой",{"2":{"251":1,"323":1}}],["неоднократно",{"2":{"313":1,"323":1,"368":1}}],["неоднократные",{"2":{"122":1}}],["неоптимизированных",{"2":{"492":1}}],["неопределено",{"2":{"326":1}}],["неопределенное",{"2":{"462":1}}],["неопределенном",{"2":{"176":1,"326":1}}],["неопределенных",{"2":{"326":1}}],["неопределенна",{"2":{"324":1}}],["неопытный",{"2":{"293":1}}],["необычными",{"2":{"382":1}}],["необычно",{"2":{"257":1}}],["необязателен",{"2":{"333":1}}],["необязательными",{"2":{"366":1}}],["необязательным",{"2":{"253":1}}],["необязательные",{"2":{"56":1}}],["необходима",{"2":{"410":1,"431":1,"448":1}}],["необходимую",{"2":{"342":1,"492":1}}],["необходим",{"2":{"152":1,"315":1,"416":1,"425":1,"478":1}}],["необходимы",{"2":{"368":1,"371":1,"378":1,"432":1,"477":1}}],["необходимыми",{"2":{"213":1,"316":1,"538":1}}],["необходимым",{"2":{"205":1,"272":1,"541":1}}],["необходимые",{"2":{"141":1,"208":1,"257":1,"270":1,"275":1,"278":1,"349":1,"398":1,"441":1}}],["необходимых",{"2":{"127":1,"139":1,"415":1,"456":1,"590":1}}],["необходимый",{"2":{"43":1,"141":1,"195":1,"491":1}}],["необходимому",{"2":{"165":1}}],["необходимость",{"2":{"111":1,"159":1,"173":1,"248":1,"294":1,"369":1,"466":1,"471":1,"478":1}}],["необходимости",{"2":{"59":1,"127":1,"152":1,"213":1,"222":2,"226":1,"252":2,"275":1,"311":1,"320":2,"331":1,"337":1,"354":1,"355":2,"359":1,"362":1,"368":1,"371":3,"412":1,"424":1,"432":1,"437":1,"449":2,"464":1,"538":2}}],["необходимое",{"2":{"88":1,"164":1,"249":1,"457":1}}],["необходимой",{"2":{"12":1,"315":1,"316":1}}],["необходимо",{"0":{"273":1},"2":{"9":1,"12":1,"59":1,"123":1,"133":2,"141":1,"142":2,"143":6,"145":1,"148":1,"152":1,"153":1,"154":1,"158":1,"169":1,"191":2,"210":1,"211":1,"213":1,"216":1,"221":1,"222":3,"226":3,"234":1,"245":1,"246":1,"247":2,"251":1,"252":1,"253":1,"255":1,"257":1,"262":1,"263":2,"264":1,"270":2,"277":1,"278":2,"279":2,"287":1,"288":1,"290":2,"301":2,"304":1,"315":1,"317":1,"318":6,"321":1,"323":1,"324":2,"326":1,"332":1,"333":2,"334":1,"335":1,"342":1,"343":2,"344":1,"349":1,"354":1,"356":1,"358":1,"360":1,"362":2,"364":1,"365":1,"368":1,"370":1,"371":2,"372":1,"373":2,"375":1,"376":1,"377":1,"410":1,"413":2,"417":1,"433":1,"454":4,"455":2,"456":1,"457":2,"458":1,"459":1,"460":1,"463":2,"464":1,"469":1,"471":1,"475":1,"478":1,"506":1,"508":1,"531":1,"541":1,"562":1,"563":1,"586":1}}],["нелегкая",{"2":{"454":1}}],["нелогично",{"2":{"122":1,"450":1}}],["нельзя",{"2":{"89":1,"122":1,"418":1,"482":1,"483":1}}],["неё",{"2":{"100":1,"104":1,"123":1,"210":1,"377":1,"545":1}}],["нецелесообразно",{"2":{"96":1,"368":1}}],["нефункциональные",{"0":{"78":1},"2":{"68":1}}],["некая",{"2":{"483":2}}],["некую",{"2":{"316":1}}],["некоего",{"2":{"450":1}}],["некое",{"2":{"173":1}}],["некой",{"2":{"123":1}}],["некоторая",{"2":{"377":1}}],["некоторый",{"2":{"218":1}}],["некоторыми",{"2":{"139":2,"214":1,"217":1,"279":1,"294":1,"341":1,"363":1,"453":1}}],["некоторым",{"2":{"139":2,"169":1,"331":1}}],["некоторые",{"2":{"136":1,"138":1,"142":2,"155":1,"158":2,"165":1,"176":1,"180":1,"181":1,"184":1,"196":1,"203":1,"205":1,"207":1,"208":2,"210":3,"211":4,"214":1,"215":1,"219":1,"221":1,"222":3,"226":2,"257":1,"259":1,"270":3,"272":2,"277":1,"282":1,"284":1,"290":1,"293":1,"314":1,"315":1,"323":1,"338":1,"339":1,"341":1,"354":1,"368":1,"369":1,"374":1,"377":1,"379":2,"403":2,"407":1,"418":2,"446":1,"451":1,"461":2,"465":1,"474":1,"475":1,"492":1}}],["некоторых",{"2":{"50":1,"131":1,"157":1,"171":1,"195":1,"203":1,"209":1,"210":1,"211":1,"213":1,"234":1,"243":1,"259":1,"270":2,"289":1,"299":1,"302":1,"312":1,"331":1,"345":1,"371":1,"377":1,"405":1,"433":1,"453":1,"454":1,"463":1}}],["некоторое",{"2":{"226":1,"299":1,"456":1,"457":1}}],["некоторой",{"2":{"134":1,"265":1,"278":1,"316":1,"317":1,"336":1,"457":1,"462":1}}],["некотором",{"2":{"61":1,"376":1,"450":1}}],["некоторую",{"2":{"124":1}}],["некритичными",{"2":{"40":1}}],["некий",{"2":{"9":1,"318":1,"492":1}}],["ней",{"2":{"34":1,"40":1,"96":2,"124":2,"156":1,"207":1,"258":1,"315":1,"347":1,"391":1,"395":1,"396":1,"399":1,"405":1,"418":2,"446":1,"450":1,"457":1,"484":1,"492":1,"570":1}}],["нетривиальные",{"2":{"454":1,"483":1}}],["нетривиальных",{"2":{"451":1,"466":1}}],["нетривиальная",{"2":{"441":1}}],["нетерпеливые",{"2":{"175":1}}],["нет",{"2":{"30":1,"32":1,"62":1,"96":1,"105":1,"123":2,"127":1,"142":1,"152":1,"166":1,"181":1,"186":1,"195":1,"208":1,"209":1,"217":1,"220":1,"226":2,"229":1,"242":1,"265":2,"304":1,"315":1,"320":1,"331":3,"360":1,"365":1,"368":1,"384":1,"412":2,"415":1,"456":2,"457":1,"459":2,"491":2,"492":1}}],["немножко",{"2":{"492":1}}],["немногие",{"2":{"197":1}}],["немного",{"2":{"89":1,"107":1,"212":1,"218":1,"223":1,"241":1,"256":1,"270":3,"321":1,"326":1,"343":1,"357":1,"365":1,"371":1,"414":1,"482":1,"484":1,"490":1}}],["немедленным",{"2":{"340":1}}],["немедленное",{"2":{"336":1}}],["немедленно",{"2":{"264":1,"411":1}}],["немодифицированный",{"2":{"318":1}}],["нему",{"2":{"123":1,"125":1,"147":1,"257":1,"362":1,"368":1,"441":1,"450":1,"462":1,"475":1}}],["немаленький",{"2":{"47":1}}],["нем",{"2":{"29":1,"32":1,"104":1,"122":1,"123":2,"125":1,"190":1,"221":1,"222":1,"320":1,"323":1,"331":1,"343":1,"416":1,"418":1,"424":2,"425":1,"457":1,"461":1,"483":1,"491":1,"503":1}}],["непустое",{"2":{"229":1}}],["неплохим",{"2":{"124":1}}],["неплохой",{"2":{"483":1}}],["неплохо",{"2":{"101":1,"114":1,"322":1,"491":1,"573":1}}],["непрактичным",{"2":{"466":1}}],["неправильно",{"2":{"371":1}}],["неправильном",{"2":{"230":1,"376":1}}],["непрямой",{"2":{"450":1}}],["непрерывно",{"2":{"476":1}}],["непрерывной",{"2":{"151":1}}],["непрерывная",{"0":{"476":1},"2":{"401":1,"475":1,"476":3}}],["непредусмотренные",{"2":{"193":1}}],["непроизвольным",{"2":{"414":1}}],["непроизвольных",{"2":{"176":1}}],["непростой",{"2":{"107":1}}],["непростая",{"2":{"25":1}}],["неприятных",{"2":{"258":1}}],["неприемлимо",{"2":{"96":1}}],["неприемлимым",{"2":{"96":1}}],["непривычно",{"2":{"85":1}}],["неполным",{"2":{"475":1}}],["неполный",{"0":{"285":1},"1":{"286":1,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1,"293":1},"2":{"127":1,"168":1,"171":1,"283":1,"295":1}}],["непостоянен",{"2":{"218":1}}],["непосредственный",{"2":{"191":1}}],["непосредственное",{"2":{"192":1}}],["непосредственно",{"2":{"40":1,"130":1,"145":1,"151":1,"191":1,"209":1,"210":2,"211":2,"217":1,"224":1,"251":1,"278":1,"279":1,"287":1,"290":2,"304":1,"318":1,"321":1,"333":1,"338":1,"342":1,"343":1,"365":1,"377":2,"446":1,"462":2,"508":1,"537":1,"541":1}}],["непонятным",{"2":{"210":1}}],["непойманная",{"2":{"122":1}}],["неподкованых",{"2":{"12":1}}],["нее",{"2":{"20":1,"181":1,"226":1,"409":1,"411":1,"450":1,"472":1,"473":1,"482":1}}],["нестандартные",{"2":{"491":1}}],["нестандартных",{"2":{"370":1}}],["нести",{"2":{"370":1}}],["несем",{"2":{"370":1}}],["несовместимости",{"2":{"221":2}}],["несомненно",{"2":{"155":1}}],["несоответствия",{"2":{"474":1}}],["несоответствие",{"2":{"130":2,"474":1}}],["несоответствию",{"2":{"68":1}}],["несложен",{"2":{"152":1}}],["несложных",{"2":{"492":1}}],["несложный",{"2":{"12":1}}],["несложно",{"2":{"23":1,"39":1,"58":1,"123":1,"433":1}}],["несмотря",{"2":{"96":1,"175":2,"294":1,"344":1,"405":1,"456":1,"457":1,"491":1}}],["несколькими",{"2":{"214":1,"255":1,"265":1,"351":1,"377":1,"431":1,"448":1}}],["нескольким",{"2":{"125":1,"254":1,"292":1}}],["нескольких",{"2":{"46":1,"95":1,"132":1,"141":1,"142":2,"209":1,"216":1,"226":1,"249":1,"251":1,"258":1,"267":1,"268":1,"281":1,"283":1,"288":1,"294":1,"335":1,"342":1,"349":1,"357":1,"363":1,"376":1,"410":1,"418":1,"431":1,"433":1,"440":1,"450":1,"466":2,"474":1,"479":1,"482":1,"538":1}}],["несколько",{"2":{"11":1,"29":1,"38":1,"95":1,"108":1,"118":2,"140":1,"142":3,"145":1,"166":1,"170":1,"175":2,"189":1,"191":1,"198":1,"203":2,"206":1,"210":1,"213":2,"217":1,"222":1,"223":1,"224":3,"226":1,"233":2,"234":1,"249":2,"251":1,"252":2,"254":2,"257":3,"264":1,"265":1,"270":1,"277":1,"278":1,"285":1,"288":2,"291":1,"294":1,"314":1,"320":1,"323":1,"325":1,"331":1,"344":1,"348":1,"350":1,"352":1,"365":2,"368":1,"369":1,"371":2,"378":1,"405":1,"408":1,"410":1,"418":2,"424":1,"433":3,"450":2,"456":3,"457":3,"461":1,"462":1,"483":1,"492":1}}],["несвязанные",{"2":{"3":1}}],["не",{"0":{"126":1,"291":1},"2":{"3":1,"10":2,"17":1,"20":1,"23":2,"26":1,"32":1,"33":1,"39":3,"40":1,"41":1,"43":1,"44":1,"51":1,"56":1,"59":2,"64":3,"65":1,"71":1,"73":1,"74":1,"77":1,"89":1,"95":1,"96":15,"101":1,"102":2,"105":1,"113":1,"114":2,"122":4,"123":4,"124":4,"125":3,"126":2,"127":4,"129":2,"130":1,"131":4,"132":2,"133":1,"137":1,"139":1,"141":1,"142":4,"144":1,"145":4,"147":1,"148":1,"149":2,"150":1,"151":2,"152":2,"156":1,"157":1,"158":2,"160":3,"162":3,"164":1,"169":2,"170":1,"173":3,"174":1,"175":1,"176":4,"178":5,"179":1,"181":1,"182":3,"183":2,"184":1,"186":5,"187":1,"190":3,"192":1,"194":4,"195":3,"196":1,"198":2,"200":1,"202":2,"203":1,"204":1,"207":3,"208":1,"209":6,"210":5,"211":3,"212":1,"213":5,"214":8,"216":2,"218":3,"220":1,"221":2,"222":3,"223":2,"224":2,"225":2,"226":9,"228":1,"229":1,"230":1,"231":1,"233":2,"234":4,"235":1,"240":2,"243":2,"246":1,"248":1,"249":3,"251":1,"252":1,"253":1,"254":2,"255":3,"257":5,"258":2,"259":4,"263":2,"264":3,"270":6,"272":3,"273":1,"275":2,"277":1,"278":7,"280":2,"281":1,"283":4,"284":2,"286":1,"287":3,"288":1,"289":3,"290":4,"291":3,"292":2,"293":2,"294":1,"299":1,"300":1,"303":1,"304":2,"307":1,"309":5,"310":4,"311":2,"312":2,"315":5,"317":1,"318":4,"319":1,"320":2,"321":1,"323":3,"324":7,"325":5,"326":5,"330":1,"331":11,"335":2,"336":1,"338":1,"340":1,"341":1,"342":3,"343":5,"344":4,"349":2,"350":1,"351":1,"354":6,"356":2,"359":4,"362":6,"364":1,"365":3,"367":1,"368":1,"370":2,"371":3,"373":1,"374":2,"375":4,"376":6,"377":4,"379":1,"401":1,"405":3,"407":4,"410":1,"412":1,"413":2,"414":1,"417":2,"418":11,"419":1,"420":1,"424":1,"430":1,"431":5,"432":1,"433":2,"437":1,"439":1,"441":7,"444":1,"446":7,"448":5,"449":1,"450":11,"451":1,"452":1,"453":3,"454":1,"456":2,"457":4,"458":5,"459":2,"460":1,"461":1,"462":3,"463":3,"465":1,"466":3,"469":1,"471":6,"472":4,"473":1,"474":3,"475":1,"478":1,"479":1,"481":1,"482":6,"483":4,"484":5,"485":1,"487":2,"490":1,"491":5,"492":10,"502":1,"508":1,"515":2,"537":1,"538":3,"541":2,"542":1,"549":1,"562":2,"573":1,"589":1}}],["низкоуровневый",{"2":{"541":1}}],["низком",{"2":{"318":1}}],["низкие",{"2":{"145":1}}],["низвело",{"2":{"111":1}}],["никогда",{"2":{"126":1,"142":1,"178":1,"210":1,"214":1,"251":1,"278":1,"376":1,"491":1}}],["никаким",{"2":{"362":1}}],["никакие",{"2":{"216":1}}],["никаких",{"2":{"96":1,"126":1,"450":1,"462":1}}],["никакого",{"2":{"195":1}}],["никакой",{"2":{"179":1,"264":1,"265":1,"450":1,"492":1}}],["никак",{"2":{"3":1,"362":1}}],["ни",{"2":{"96":2,"226":1,"257":1,"299":1,"310":1,"370":1,"413":1,"418":3,"455":1,"456":1,"457":1,"472":1}}],["нисколько",{"2":{"96":1}}],["нижняя",{"2":{"576":1}}],["нижний",{"2":{"161":1,"263":1}}],["нижней",{"2":{"178":1,"179":1,"181":1,"189":1,"191":1,"277":1}}],["нижнем",{"2":{"158":1,"160":1,"164":2,"191":1,"216":1,"236":1}}],["нижнее",{"2":{"88":1}}],["ниже",{"2":{"10":1,"125":1,"133":1,"145":1,"168":1,"171":1,"173":1,"191":2,"255":1,"365":1,"366":1,"377":1,"473":1,"500":1,"506":1}}],["ниша",{"2":{"63":1}}],["нивелирования",{"2":{"41":1}}],["ничем",{"2":{"32":1}}],["ничего",{"2":{"10":1,"96":1,"166":1,"224":1,"226":1,"340":1,"418":1,"483":1,"491":1}}],["нибудь",{"2":{"12":1,"166":1,"373":1}}],["ним",{"2":{"9":1,"17":1,"43":2,"51":1,"53":1,"111":1,"142":1,"178":1,"211":1,"323":1,"327":1,"331":1,"341":1,"349":1,"357":1,"376":1,"462":2,"487":1,"491":1,"492":1,"547":1}}],["ними",{"2":{"2":1,"34":1,"46":1,"113":1,"123":1,"142":1,"205":1,"210":1,"217":1,"222":2,"225":1,"246":1,"278":1,"281":1,"320":1,"327":1,"331":1,"352":1,"361":1,"368":1,"369":1,"376":1,"405":1,"418":1,"420":1,"433":1,"467":1,"515":1}}],["них",{"2":{"6":1,"39":1,"41":1,"74":1,"80":1,"96":1,"131":2,"142":2,"160":1,"168":1,"170":1,"175":1,"181":1,"189":1,"193":1,"203":2,"211":2,"213":1,"217":1,"221":1,"222":1,"226":2,"227":1,"234":1,"247":1,"254":1,"255":1,"256":1,"257":2,"259":1,"264":1,"277":1,"278":1,"286":1,"287":1,"293":1,"299":1,"304":1,"314":1,"315":1,"316":1,"320":1,"323":1,"326":1,"331":1,"336":2,"339":1,"354":2,"357":1,"362":3,"368":2,"390":1,"403":2,"418":1,"420":1,"440":1,"446":1,"454":1,"457":2,"460":1,"461":1,"466":3,"467":1,"472":1,"479":1,"483":1,"485":1}}],["ночных",{"2":{"476":1}}],["ноу",{"2":{"466":1}}],["ноут",{"2":{"441":1}}],["ное",{"2":{"464":1}}],["нормальный",{"2":{"306":1}}],["нормально",{"2":{"62":1,"492":1}}],["нормальному",{"2":{"38":1}}],["нотация",{"2":{"462":1}}],["нотацией",{"2":{"368":1}}],["нотации",{"2":{"334":1}}],["нотаций",{"2":{"247":1}}],["нотацию",{"2":{"216":1,"227":1,"359":3,"417":1}}],["нотированной",{"2":{"132":1}}],["носят",{"2":{"202":1,"477":1}}],["носит",{"2":{"140":1,"156":1,"205":1}}],["номера",{"2":{"375":1,"376":1}}],["номер",{"2":{"332":1,"492":1}}],["номеров",{"2":{"178":1}}],["номером",{"2":{"178":1}}],["номеру",{"2":{"178":1}}],["новички",{"2":{"384":1}}],["новичка",{"2":{"126":1}}],["новейшим",{"2":{"252":1}}],["нова",{"2":{"213":1}}],["новая",{"2":{"135":1,"178":1,"201":1,"212":1,"264":1,"265":1,"325":1,"354":1,"492":1}}],["новую",{"2":{"212":1,"261":1,"342":1,"343":1,"352":1,"354":1,"464":1,"474":1,"484":1,"579":1}}],["нововведением",{"2":{"450":1}}],["новое",{"0":{"357":1},"2":{"222":1,"326":1,"377":1,"424":1}}],["новой",{"2":{"207":1,"209":1,"259":1,"264":1,"318":1,"343":1,"365":1,"424":1,"464":1,"490":1,"573":1,"589":1}}],["новостных",{"2":{"354":1,"450":1}}],["новостные",{"2":{"175":1}}],["новостей",{"2":{"194":1,"450":1}}],["новому",{"2":{"267":1}}],["новом",{"2":{"135":2,"249":1,"263":1,"357":1}}],["нового",{"0":{"264":1,"265":1},"2":{"127":1,"133":1,"207":2,"226":1,"264":1,"332":1,"356":1,"364":1,"375":1,"376":1,"411":1,"453":1,"482":1,"483":1,"500":1,"508":1}}],["новыми",{"2":{"378":1}}],["новым",{"2":{"155":1,"226":1,"326":1,"346":1}}],["новые",{"0":{"136":1},"2":{"136":1,"142":1,"178":2,"179":1,"187":1,"221":3,"246":1,"259":1,"260":1,"264":1,"341":1,"344":1,"354":1,"357":2,"360":1,"361":1,"365":1,"369":1,"379":1,"382":1,"412":1,"422":1,"441":1,"451":1,"465":1,"474":1,"482":1,"491":1}}],["новый",{"2":{"114":1,"127":3,"135":1,"138":1,"170":1,"179":1,"195":2,"209":2,"225":1,"226":1,"234":2,"246":2,"254":1,"304":1,"362":2,"366":1,"375":1,"377":1,"383":1,"404":1,"440":1,"471":1,"475":1,"484":1}}],["новых",{"2":{"2":1,"136":1,"173":1,"207":1,"247":1,"264":2,"268":1,"329":1,"339":1,"342":1,"354":2,"382":1,"417":1,"418":1,"424":1,"503":1,"591":1}}],["но",{"2":{"3":1,"9":1,"17":1,"20":1,"23":3,"26":3,"29":1,"39":1,"41":1,"47":1,"59":1,"71":1,"74":1,"85":1,"88":1,"89":2,"96":4,"101":1,"102":1,"106":1,"113":1,"114":2,"122":1,"123":3,"124":3,"126":1,"127":3,"131":1,"133":1,"138":3,"139":1,"142":2,"145":4,"146":1,"148":1,"157":2,"161":1,"162":2,"167":1,"170":1,"171":2,"172":2,"173":2,"175":1,"176":2,"179":2,"181":1,"186":3,"187":1,"189":2,"190":1,"195":1,"198":1,"201":1,"203":1,"204":1,"208":2,"209":2,"210":3,"211":2,"213":3,"214":2,"221":1,"222":6,"223":1,"224":1,"225":3,"226":9,"229":1,"230":1,"232":1,"233":1,"234":2,"235":1,"240":1,"247":1,"254":1,"255":1,"256":2,"257":2,"258":1,"259":1,"263":1,"264":3,"265":2,"266":1,"268":1,"270":6,"272":2,"273":3,"276":1,"277":1,"278":1,"279":1,"283":1,"288":2,"289":1,"291":2,"293":2,"309":1,"310":3,"312":2,"315":1,"318":5,"320":3,"322":1,"323":2,"324":2,"325":3,"326":3,"327":1,"329":1,"331":3,"335":2,"338":1,"339":1,"344":1,"354":1,"355":1,"356":1,"357":1,"359":1,"362":1,"363":1,"365":2,"369":1,"370":2,"371":2,"376":4,"377":2,"384":1,"401":1,"403":1,"404":1,"405":2,"407":2,"410":3,"413":1,"414":1,"415":1,"417":3,"418":3,"424":1,"433":1,"437":1,"441":1,"446":2,"450":4,"453":1,"454":2,"455":1,"456":4,"457":2,"461":3,"462":2,"465":1,"466":1,"467":1,"471":1,"473":1,"474":1,"475":2,"479":1,"482":5,"483":4,"484":2,"491":4,"492":5,"508":2,"541":1,"546":1,"553":1,"582":1}}],["нахождение",{"2":{"570":1}}],["находят",{"2":{"450":1}}],["находятся",{"2":{"151":1,"162":1,"191":1,"431":1,"491":1,"572":1}}],["находимся",{"2":{"472":1}}],["находим",{"2":{"107":1,"339":1,"462":1}}],["находит",{"2":{"213":1}}],["находить",{"2":{"157":1,"290":1}}],["находиться",{"2":{"17":1,"46":1,"317":1,"335":1,"356":2}}],["находится",{"2":{"51":1,"152":1,"158":1,"170":2,"176":1,"194":1,"213":1,"234":1,"263":1,"278":1,"326":1,"370":1,"410":2,"450":1,"471":1,"491":1,"549":1,"583":1,"590":1}}],["находились",{"2":{"50":1}}],["накладные",{"2":{"411":1,"431":1,"448":1}}],["накладывает",{"2":{"293":1,"294":1}}],["наконец",{"2":{"149":1,"214":1,"217":2,"221":2,"223":1,"258":2,"263":1,"272":1,"315":1,"319":1,"338":2,"339":1,"349":1,"359":1,"363":1,"371":1,"420":1,"463":1,"474":1}}],["научимся",{"2":{"454":1,"467":1}}],["научиться",{"2":{"382":1,"466":1}}],["научились",{"2":{"266":1,"281":1,"462":1}}],["научных",{"2":{"221":1}}],["наоборот",{"2":{"226":1,"379":1,"418":1}}],["нажали",{"2":{"462":1}}],["нажав",{"2":{"280":1}}],["нажатию",{"2":{"552":1}}],["нажатии",{"2":{"263":1,"340":1,"580":1,"582":1}}],["нажатием",{"2":{"172":1,"209":1}}],["нажать",{"2":{"160":1,"213":1}}],["нажмет",{"2":{"234":1}}],["нажмите",{"2":{"209":3,"280":1,"561":1}}],["нажимая",{"2":{"462":1}}],["нажимать",{"2":{"215":1}}],["нажимает",{"2":{"201":1,"375":1}}],["нагружает",{"2":{"492":1}}],["нагружающие",{"2":{"483":1}}],["нагрузку",{"2":{"339":1,"371":1,"483":1}}],["нагрузке",{"2":{"337":1,"371":1}}],["нагрузки",{"2":{"148":1,"347":1,"371":1}}],["наглядные",{"2":{"403":1}}],["наглядно",{"2":{"179":1}}],["наглядность",{"2":{"176":1}}],["наглядности",{"2":{"130":1}}],["наглядной",{"2":{"171":1}}],["наглядного",{"2":{"68":1}}],["нанимаемой",{"2":{"142":1}}],["наивная",{"2":{"315":1}}],["наивной",{"2":{"314":1,"315":1,"316":1,"318":1}}],["наивную",{"2":{"310":1}}],["наименьшими",{"2":{"483":1}}],["наименьшей",{"2":{"246":1}}],["наименования",{"2":{"23":1,"542":1}}],["наилучшим",{"2":{"245":1,"249":1}}],["наибольшую",{"2":{"201":1}}],["наиболее",{"2":{"142":2,"145":1,"155":1,"171":1,"189":1,"191":1,"198":1,"205":1,"208":2,"210":1,"213":1,"221":1,"226":1,"227":1,"242":1,"249":1,"268":1,"272":1,"292":1,"294":1,"337":1,"344":2,"354":2,"365":1,"368":3,"370":1,"374":1,"377":2,"382":1,"389":1,"397":1,"417":1,"423":1,"440":1,"455":1,"466":1,"473":1,"475":1,"483":1,"502":1}}],["налету",{"2":{"492":1,"570":1}}],["налево",{"2":{"142":1}}],["наложенный",{"2":{"277":1}}],["налогов",{"2":{"200":1}}],["наличии",{"2":{"368":1}}],["наличия",{"2":{"122":1,"272":1,"275":1,"290":1,"368":1,"482":1}}],["наличие",{"2":{"12":1,"152":1,"184":1,"214":1,"217":1,"309":1,"326":1,"376":1,"456":1,"458":1,"479":1}}],["натянуть",{"2":{"483":1}}],["нативная",{"2":{"318":1}}],["нативного",{"2":{"270":1,"482":1,"492":1}}],["нативное",{"2":{"174":1,"268":1}}],["нативно",{"2":{"170":1}}],["нативный",{"2":{"588":1}}],["нативным",{"2":{"492":1}}],["нативными",{"2":{"221":1,"277":1}}],["нативные",{"2":{"133":1,"318":1}}],["нативных",{"2":{"131":1,"259":1,"323":2,"492":1}}],["нативную",{"2":{"131":1}}],["натуры",{"2":{"9":1}}],["набросать",{"2":{"263":1}}],["набросок",{"2":{"245":1}}],["набрать",{"2":{"377":1}}],["набранный",{"2":{"217":1}}],["набрав",{"2":{"210":1}}],["набирают",{"2":{"240":1}}],["набираются",{"2":{"237":1}}],["набирает",{"2":{"217":1,"376":1}}],["набирать",{"2":{"214":1}}],["наберите",{"2":{"209":1}}],["наблюдает",{"2":{"314":1}}],["наблюдающий",{"2":{"179":1}}],["наблюдателю",{"2":{"315":1}}],["наблюдателей",{"2":{"314":4}}],["наблюдатели",{"2":{"314":3}}],["наблюдатель",{"0":{"314":1},"1":{"315":1},"2":{"314":2,"315":2}}],["наблюдателям",{"2":{"314":1,"315":1}}],["наблюдателя",{"2":{"178":1,"314":1,"318":1}}],["наблюдать",{"2":{"165":1,"314":1}}],["наблюдении",{"2":{"114":1}}],["набором",{"2":{"462":1}}],["наборов",{"2":{"454":1}}],["набору",{"2":{"312":1}}],["наборы",{"2":{"222":1,"224":1}}],["наборе",{"2":{"178":1}}],["наборами",{"2":{"457":1}}],["набора",{"2":{"160":1,"178":1,"207":1,"370":1}}],["набор",{"2":{"69":1,"158":1,"178":2,"221":1,"235":1,"272":1,"287":1,"326":1,"354":1,"425":1,"456":2,"460":1,"475":1}}],["назовите",{"2":{"379":1}}],["назвать",{"2":{"206":1,"220":1,"341":1}}],["названную",{"2":{"412":1}}],["названный",{"2":{"226":1,"332":1,"359":1}}],["названа",{"2":{"197":1}}],["названий",{"2":{"199":1}}],["названиемстор",{"2":{"450":1}}],["названием",{"2":{"166":1,"216":1,"259":1,"277":1,"304":1,"315":1,"454":1,"561":1}}],["название",{"2":{"47":1,"98":1,"117":1,"118":1,"172":1,"176":1,"226":1,"272":1,"345":1,"354":1,"491":1,"562":1}}],["названиями",{"2":{"357":1}}],["названия",{"2":{"23":1,"106":1,"176":1,"270":1,"273":1,"318":1}}],["назад",{"2":{"155":1,"175":1,"218":1,"264":1,"273":1,"368":2,"446":1}}],["назначению",{"2":{"350":1,"483":1}}],["назначение",{"2":{"144":1,"258":1,"279":1,"323":1,"368":1}}],["назначения",{"2":{"141":1,"314":1,"344":1}}],["называть",{"2":{"210":1,"450":2}}],["называют",{"2":{"173":1,"294":1,"314":1,"354":2,"369":1}}],["называются",{"2":{"142":2,"143":1,"184":1,"257":1,"314":1,"377":2}}],["называет",{"2":{"431":1,"449":1}}],["называется",{"2":{"111":1,"132":1,"145":1,"178":2,"191":1,"197":1,"223":1,"232":1,"255":1,"307":1,"354":1,"446":1,"450":1,"466":1,"467":2,"472":1,"476":1,"483":1,"561":1,"570":1}}],["называемому",{"2":{"377":1}}],["называемой",{"2":{"142":1,"225":1}}],["называемая",{"2":{"318":1}}],["называемую",{"2":{"304":1,"407":1}}],["называемых",{"2":{"354":1}}],["называемыми",{"2":{"331":1}}],["называемые",{"2":{"227":1,"257":1,"270":1,"326":1,"377":1,"450":1}}],["называемый",{"2":{"226":1,"257":1,"314":1,"335":1}}],["навязывающим",{"2":{"541":1}}],["навязывание",{"2":{"96":1}}],["навык",{"2":{"403":1}}],["навыков",{"2":{"207":1}}],["навыки",{"2":{"153":1,"219":1,"352":1,"378":1,"422":1,"451":1,"477":1}}],["навигационная",{"2":{"576":1}}],["навигационное",{"2":{"576":1}}],["навигационного",{"2":{"359":1}}],["навигационной",{"2":{"182":1}}],["навигационных",{"2":{"359":1,"363":1,"370":1,"551":1}}],["навигационные",{"2":{"246":1,"359":1,"365":1}}],["навигационный",{"2":{"191":1}}],["навигацией",{"2":{"180":1,"273":1,"355":1,"378":1}}],["навигацию",{"2":{"178":1,"355":2,"357":1,"361":1,"362":1,"365":1,"368":1,"370":1,"464":1}}],["навигации",{"0":{"180":1},"1":{"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1},"2":{"142":1,"175":1,"181":1,"182":2,"184":1,"186":1,"189":2,"259":1,"277":1,"355":1,"356":2,"363":1,"364":1,"367":1,"368":1,"378":1,"428":1,"448":1}}],["навигация",{"0":{"363":1},"1":{"364":1,"365":1},"2":{"135":1,"144":1,"152":1,"178":1,"355":1,"359":1,"365":1,"582":1}}],["наведение",{"2":{"172":1}}],["наведем",{"2":{"100":1}}],["наверное",{"2":{"310":1,"338":1,"482":1,"492":1}}],["наверняка",{"2":{"51":1}}],["наверх",{"2":{"30":1}}],["начнут",{"2":{"471":1}}],["начните",{"2":{"453":1}}],["начнется",{"2":{"224":1}}],["начнете",{"2":{"189":1,"382":1}}],["начнем",{"2":{"207":1,"217":1,"235":1,"257":1,"263":1,"326":1,"327":1,"337":1,"338":1,"339":1,"357":1,"359":1,"361":1,"362":1,"363":2,"407":1,"408":1,"412":1,"419":1,"420":1,"456":2,"457":2,"460":1,"467":1}}],["начаться",{"2":{"331":1}}],["начать",{"2":{"124":1,"155":1,"208":1,"222":1,"267":1,"391":1,"460":1,"471":1,"474":1}}],["началу",{"2":{"457":1}}],["начали",{"2":{"219":1,"323":1,"472":1}}],["начальная",{"2":{"246":1,"431":1,"448":1}}],["начальный",{"2":{"246":1}}],["начальных",{"2":{"210":1,"268":1}}],["начальным",{"2":{"179":1,"207":1,"243":1,"412":1}}],["начального",{"2":{"475":1,"491":1}}],["начальное",{"2":{"230":1}}],["начальной",{"2":{"210":1}}],["начальном",{"2":{"11":1,"212":1}}],["начало",{"2":{"207":1,"345":1,"467":1}}],["началось",{"2":{"176":1}}],["началом",{"2":{"165":1,"491":1}}],["начале",{"2":{"83":1,"152":1,"191":1,"202":1,"223":1,"264":1,"306":1,"331":1,"345":1}}],["начала",{"2":{"23":1,"61":1,"158":1,"235":1,"264":1,"278":1,"331":1,"370":1,"453":1,"456":1,"459":1,"492":1,"541":1,"590":1}}],["начинаниях",{"2":{"387":1}}],["начинаются",{"2":{"237":2,"364":1}}],["начинающим",{"2":{"542":1}}],["начинающий",{"2":{"541":1}}],["начинающих",{"2":{"441":1,"502":1}}],["начинающихся",{"2":{"217":1}}],["начинающему",{"2":{"491":1}}],["начинающемся",{"2":{"217":1}}],["начинающуюся",{"2":{"227":1}}],["начинаете",{"2":{"404":1}}],["начинает",{"2":{"264":1,"349":1}}],["начинается",{"2":{"217":2,"238":1,"286":1,"365":1,"382":1,"462":1}}],["начинаем",{"2":{"217":1,"258":1,"263":2,"320":1,"326":1,"342":1,"410":1,"414":1,"415":1,"462":1}}],["начинаешь",{"2":{"98":1}}],["начинаться",{"2":{"237":1}}],["начинать",{"2":{"126":1,"222":1}}],["начиная",{"2":{"77":2,"153":1,"191":1,"210":2,"225":1,"246":1,"284":1,"286":1,"326":1,"378":1,"392":1,"410":1}}],["наряду",{"2":{"281":1,"354":1,"479":1}}],["нарезку",{"2":{"246":1}}],["нарушена",{"2":{"342":1}}],["нарушению",{"2":{"68":1}}],["нарушить",{"2":{"451":1}}],["нарушит",{"2":{"288":1}}],["нарушать",{"2":{"331":1}}],["нарушает",{"2":{"186":2,"251":1,"309":1,"314":1}}],["нарушаются",{"2":{"215":1}}],["нарушают",{"2":{"181":1}}],["народу",{"2":{"96":1}}],["народ",{"2":{"96":1}}],["наращивать",{"2":{"11":1,"221":1}}],["найдете",{"2":{"213":1}}],["найдем",{"2":{"104":1,"290":1}}],["найдена",{"2":{"311":1}}],["найдены",{"2":{"309":1}}],["найденные",{"2":{"27":1,"152":1}}],["найдено",{"2":{"10":2,"418":1}}],["найти",{"2":{"62":1,"133":1,"135":1,"137":1,"149":1,"150":1,"152":1,"156":1,"158":1,"160":1,"164":1,"165":1,"166":1,"169":1,"170":1,"208":2,"211":1,"212":1,"213":1,"214":1,"233":1,"234":1,"243":1,"244":1,"259":1,"263":1,"277":1,"278":1,"286":1,"342":1,"353":1,"368":3,"371":1,"375":1,"416":1,"417":1,"418":1,"452":1,"455":1,"457":1,"461":1,"462":1,"463":1,"464":1,"469":1,"470":1}}],["наполнения",{"2":{"540":1,"542":1}}],["наподобие",{"2":{"449":1}}],["напомним",{"2":{"324":1,"408":1}}],["напишем",{"2":{"233":1,"458":1,"459":1}}],["напишите",{"2":{"96":1,"453":1}}],["написали",{"2":{"149":1}}],["написана",{"2":{"515":1}}],["написаны",{"2":{"224":1,"457":1}}],["написано",{"2":{"222":1}}],["написание",{"2":{"453":1,"479":1}}],["написании",{"2":{"240":1,"491":1,"492":1}}],["написанию",{"2":{"213":1,"461":1}}],["написания",{"2":{"124":1,"179":1,"221":1,"225":3,"234":1,"270":1,"461":1,"471":1}}],["написанным",{"2":{"479":1}}],["написанный",{"2":{"10":1,"124":1,"222":1}}],["написанную",{"2":{"56":1}}],["написан",{"2":{"43":1,"98":1,"453":1}}],["написать",{"2":{"12":1,"26":1,"41":1,"96":2,"98":1,"113":1,"124":2,"217":1,"263":1,"291":1,"333":1,"454":1,"457":1,"491":1,"492":1}}],["напротив",{"2":{"368":1}}],["направленные",{"2":{"205":1}}],["направленную",{"2":{"194":1}}],["направление",{"2":{"462":1}}],["направлением",{"0":{"161":1}}],["направлению",{"2":{"189":1}}],["направлении",{"2":{"164":2,"190":1,"255":1}}],["направлений",{"2":{"164":1}}],["направляя",{"2":{"190":1}}],["направляют",{"2":{"157":1}}],["направляться",{"2":{"147":1}}],["направлять",{"2":{"142":1,"143":1,"145":1}}],["направляется",{"2":{"123":1}}],["направляет",{"2":{"123":1,"316":1,"317":1}}],["направить",{"2":{"159":1,"335":1}}],["напрямую",{"2":{"20":1,"56":1,"96":1,"204":1,"217":1,"223":1,"226":1,"278":1,"288":1,"304":1,"309":1,"318":1,"331":1,"332":1,"335":1,"362":1,"412":1,"417":1,"418":1,"440":1,"446":1,"457":1,"484":1,"485":1,"492":1}}],["например",{"2":{"3":1,"12":1,"16":1,"18":1,"23":1,"41":2,"50":2,"51":1,"59":1,"95":1,"96":1,"100":1,"107":1,"112":1,"123":6,"124":6,"125":1,"132":2,"133":1,"134":1,"136":1,"142":4,"143":1,"144":1,"151":1,"158":2,"160":1,"162":1,"164":1,"165":1,"171":2,"172":2,"175":1,"176":2,"178":2,"181":1,"182":2,"186":3,"187":2,"190":1,"191":1,"192":1,"196":1,"199":1,"210":2,"211":1,"213":2,"214":1,"217":1,"218":1,"222":3,"226":4,"228":1,"229":1,"231":1,"233":1,"234":1,"236":1,"237":4,"238":1,"239":1,"240":1,"247":1,"248":1,"253":3,"255":2,"257":4,"258":1,"270":3,"274":1,"275":1,"276":1,"277":2,"286":2,"290":1,"291":1,"294":1,"301":3,"305":1,"307":2,"313":1,"315":1,"316":1,"317":1,"318":3,"319":1,"320":1,"323":1,"324":1,"326":1,"331":1,"332":1,"333":1,"336":1,"344":2,"345":1,"359":1,"365":1,"369":1,"371":2,"373":1,"374":2,"375":1,"376":4,"377":1,"401":2,"407":1,"408":1,"416":1,"418":2,"428":3,"430":1,"431":3,"432":2,"433":2,"437":1,"441":2,"448":4,"449":2,"450":5,"453":1,"454":1,"457":2,"458":2,"459":1,"463":1,"468":1,"472":1,"475":2,"476":1,"482":4,"483":2,"484":1,"485":1,"488":1,"492":2,"538":2,"582":1}}],["намекнули",{"2":{"327":1}}],["намекает",{"2":{"264":1}}],["намеренная",{"0":{"458":1}}],["намеренное",{"2":{"202":1}}],["намеренно",{"2":{"198":1,"215":1}}],["намереваясь",{"2":{"201":1}}],["намечены",{"2":{"36":1}}],["намеченные",{"2":{"10":1}}],["нами",{"2":{"142":1,"186":1,"216":1,"326":1,"359":1,"373":1,"476":1}}],["намного",{"2":{"13":1,"20":1,"50":1,"56":1,"85":1,"96":1,"354":1,"441":1,"450":1,"482":2,"485":1,"490":2,"491":1,"492":3}}],["нам",{"2":{"7":1,"39":2,"41":1,"43":1,"44":1,"129":1,"141":2,"142":1,"143":5,"145":4,"148":1,"149":1,"157":1,"166":1,"177":1,"178":1,"209":1,"210":3,"213":1,"214":1,"215":1,"216":2,"217":5,"221":1,"222":1,"223":1,"224":2,"226":3,"233":1,"234":2,"247":1,"248":1,"249":3,"251":1,"252":1,"255":2,"256":1,"257":1,"258":1,"263":3,"265":1,"266":1,"270":1,"277":1,"278":1,"279":2,"287":1,"310":1,"311":2,"313":1,"318":2,"319":1,"320":1,"321":1,"326":3,"329":1,"331":1,"332":2,"334":1,"335":1,"338":1,"348":2,"349":1,"355":1,"362":4,"365":3,"368":1,"369":2,"371":2,"372":1,"373":2,"377":1,"408":2,"409":1,"410":2,"412":1,"413":5,"415":2,"417":1,"423":1,"454":3,"455":3,"456":3,"457":1,"459":3,"460":4,"461":2,"462":3,"464":3,"465":1,"466":1,"471":1,"472":1}}],["нашли",{"2":{"382":1}}],["наша",{"2":{"209":1,"218":2,"258":1,"264":1,"325":1,"357":1,"407":1,"462":1}}],["нашу",{"2":{"179":1,"194":1,"213":1,"216":1,"217":1,"258":1,"264":1,"278":1,"290":1,"342":1,"406":2,"407":1,"472":1,"475":1}}],["нашей",{"2":{"209":1,"210":1,"213":1,"217":4,"218":1,"264":1,"279":1,"315":1,"319":1,"326":3,"329":1,"337":2,"340":1,"349":1,"370":2,"374":1,"407":1,"409":1,"410":1,"466":2,"467":1,"471":1,"475":1}}],["наше",{"2":{"128":1,"142":1,"143":2,"145":3,"207":1,"210":1,"211":1,"214":1,"218":2,"219":1,"223":2,"243":1,"263":1,"265":1,"266":1,"277":1,"280":1,"281":1,"324":1,"334":1,"335":1,"336":1,"341":1,"344":1,"352":1,"356":1,"357":1,"359":1,"371":1,"375":1,"376":1,"377":1,"378":1,"408":1,"412":1}}],["нашего",{"0":{"218":1,"261":1,"264":1,"265":1},"2":{"14":1,"27":1,"82":1,"113":1,"128":2,"139":2,"141":2,"142":1,"143":2,"144":1,"145":3,"147":1,"148":1,"153":4,"154":1,"179":1,"207":1,"209":3,"210":5,"211":2,"212":2,"213":1,"216":1,"217":4,"223":1,"224":2,"225":5,"226":1,"251":2,"252":1,"255":1,"259":1,"263":2,"264":4,"266":1,"272":3,"277":4,"278":1,"279":1,"310":1,"333":1,"334":2,"337":1,"342":1,"348":1,"350":3,"356":3,"358":1,"362":3,"365":1,"368":1,"370":3,"371":1,"373":3,"374":2,"375":1,"376":4,"377":1,"403":1,"407":1,"410":1,"411":1,"418":1,"419":1,"420":2,"421":1,"422":1,"451":2,"456":2,"460":1,"461":2,"462":2,"463":1,"464":3,"465":1,"471":1,"472":3,"477":1}}],["нашему",{"2":{"142":1,"145":1,"149":1,"179":1,"210":1,"216":1,"218":1,"219":1,"251":1,"260":1,"275":1,"278":1,"312":1,"330":1,"335":1,"359":2,"360":1,"371":1,"374":1,"377":1,"413":1,"417":1,"467":1}}],["нашем",{"2":{"5":1,"11":1,"50":1,"88":1,"132":1,"142":1,"144":1,"145":1,"158":1,"179":1,"209":1,"213":1,"217":1,"218":1,"226":2,"233":1,"248":1,"249":3,"252":1,"263":8,"264":4,"272":1,"277":1,"278":1,"310":1,"315":1,"323":1,"326":1,"331":1,"333":1,"334":1,"335":1,"337":1,"342":1,"343":1,"356":2,"357":1,"361":2,"362":1,"369":1,"371":3,"374":1,"377":3,"407":1,"408":1,"409":1,"412":1,"413":2,"414":1,"415":1,"419":1,"420":1,"453":1,"454":2,"456":2,"460":1,"462":1,"464":3,"474":1,"477":1}}],["наш",{"0":{"455":1},"2":{"4":1,"9":1,"12":1,"39":1,"41":2,"109":1,"113":1,"121":1,"144":2,"149":1,"150":1,"151":1,"179":1,"208":1,"209":1,"210":2,"211":1,"213":3,"214":1,"215":2,"216":4,"217":4,"218":3,"219":1,"224":1,"225":1,"226":2,"243":1,"246":1,"249":1,"252":1,"257":1,"262":1,"263":4,"264":3,"277":3,"278":2,"280":1,"326":1,"332":2,"333":2,"340":1,"341":2,"344":1,"345":1,"346":2,"347":1,"355":1,"357":1,"359":2,"361":2,"362":2,"365":2,"370":1,"371":2,"374":1,"375":1,"376":2,"407":2,"408":1,"410":1,"412":1,"413":2,"415":1,"417":1,"419":1,"420":3,"424":1,"455":2,"456":5,"458":1,"461":3,"464":2,"472":1,"475":1}}],["наших",{"2":{"153":1,"158":1,"162":1,"209":1,"213":3,"216":1,"217":1,"224":1,"258":1,"264":1,"272":1,"304":1,"319":1,"323":1,"326":1,"333":1,"334":2,"335":1,"363":1,"365":2,"369":1,"371":2,"377":2,"378":1,"417":1,"418":1,"419":1,"420":1,"422":1,"451":1,"454":1,"456":1,"457":1,"459":1,"461":2,"462":2,"463":3,"464":1,"467":1,"472":1,"478":1}}],["нашими",{"2":{"217":1,"334":1,"356":1,"357":1,"359":1,"415":1,"422":1}}],["нашим",{"2":{"53":1,"133":1,"147":1,"179":1,"209":1,"210":1,"217":1,"223":1,"243":1,"263":2,"265":1,"319":1,"335":1,"340":1,"365":2,"370":1,"411":1,"412":1,"451":1,"462":1}}],["наши",{"0":{"0":1},"2":{"7":1,"145":1,"150":1,"151":2,"207":1,"210":1,"211":1,"218":1,"224":2,"225":1,"226":2,"243":1,"261":1,"264":1,"265":1,"270":1,"287":1,"329":1,"356":4,"359":1,"365":1,"370":1,"374":2,"403":1,"408":1,"409":1,"415":1,"454":1,"456":1,"459":3,"460":1,"462":1}}],["надстройку",{"2":{"541":1}}],["надёжней",{"2":{"441":1}}],["наделите",{"2":{"288":1}}],["наделение",{"2":{"178":1}}],["надеюсь",{"2":{"157":1,"270":1,"318":1}}],["надежного",{"2":{"412":1,"492":1}}],["надежное",{"2":{"249":1,"334":1,"424":1}}],["надежность",{"2":{"17":1}}],["надежные",{"2":{"382":1}}],["надежными",{"2":{"268":1}}],["надежных",{"2":{"243":1,"383":1,"482":1}}],["надежный",{"2":{"123":1,"145":1}}],["надежная",{"2":{"152":1}}],["надобности",{"2":{"573":1}}],["надо",{"2":{"39":1,"41":2,"50":1,"85":1,"89":1,"95":1,"96":4,"98":2,"104":1,"114":1,"121":1,"424":1,"425":1,"433":1,"450":2,"482":3,"483":3,"491":2,"573":1}}],["над",{"0":{"287":1,"485":1},"2":{"4":1,"25":1,"100":1,"114":4,"139":1,"167":1,"172":1,"174":1,"208":1,"214":1,"226":2,"252":1,"263":2,"264":1,"266":1,"279":2,"287":1,"316":1,"338":1,"391":1,"431":1,"448":1,"457":1,"475":2,"482":1,"483":1,"492":1,"501":1}}],["насыщенные",{"2":{"354":1}}],["насыщенного",{"2":{"265":1}}],["наследуют",{"2":{"365":1}}],["наследуемая",{"2":{"287":1}}],["наследованием",{"0":{"287":1},"2":{"287":1,"483":2}}],["наследования",{"2":{"283":1,"287":3,"320":1,"446":1}}],["насколько",{"2":{"209":1,"222":1,"289":1}}],["насчет",{"2":{"20":1,"220":1,"265":1}}],["настал",{"2":{"323":1}}],["настало",{"2":{"209":1,"210":1,"263":1,"277":1,"419":1,"455":1}}],["настоятельно",{"2":{"208":1,"289":1}}],["настоящий",{"2":{"277":1}}],["настоящему",{"2":{"270":1,"323":1}}],["настоящее",{"2":{"142":2,"169":1,"182":1,"185":1,"191":1,"375":1,"377":1,"451":1}}],["настоящую",{"2":{"17":1}}],["настольная",{"2":{"277":1}}],["настольном",{"2":{"272":1}}],["настольному",{"2":{"189":1}}],["настольные",{"2":{"270":1}}],["настольными",{"2":{"221":1,"270":2}}],["настольных",{"2":{"181":2,"189":1,"268":1,"270":1,"277":1,"354":1}}],["настолько",{"2":{"145":1,"189":1,"190":2,"222":1,"259":1,"418":1,"492":1}}],["настройте",{"2":{"491":1}}],["настройку",{"2":{"263":1,"441":1,"446":2}}],["настройкой",{"2":{"263":1}}],["настройке",{"2":{"153":1,"475":1}}],["настройках",{"2":{"373":1}}],["настройками",{"2":{"179":1,"270":1}}],["настройка",{"0":{"148":1,"209":1,"261":1,"441":1,"562":1},"1":{"149":1},"2":{"129":1,"139":1,"195":1,"207":1,"270":1,"431":3,"440":2,"441":1,"448":3,"475":1,"541":1}}],["настройки",{"2":{"113":1,"359":1,"430":1,"432":2,"440":1,"448":1,"465":1,"587":1}}],["настроили",{"2":{"349":1}}],["настроить",{"2":{"11":1,"142":2,"143":1,"151":1,"440":2,"441":1,"476":1}}],["настроен",{"2":{"424":1}}],["настроена",{"2":{"151":2}}],["настроек",{"2":{"170":1,"217":1,"441":2,"446":1}}],["настраивает",{"2":{"152":1}}],["настраивается",{"2":{"125":1,"270":1}}],["настраиваемой",{"2":{"225":1}}],["настраиваемым",{"2":{"263":1}}],["настраиваемыми",{"2":{"152":1}}],["настраиваемые",{"0":{"254":1},"2":{"79":1}}],["настраиваем",{"2":{"121":1,"475":1}}],["настраивать",{"2":{"63":1,"279":1,"383":1}}],["нас",{"0":{"503":1},"2":{"3":1,"12":1,"16":1,"17":1,"29":1,"36":1,"41":1,"46":1,"51":1,"92":1,"95":1,"104":1,"106":1,"111":2,"121":1,"123":1,"131":1,"152":1,"166":1,"179":3,"209":1,"210":1,"217":4,"225":1,"226":2,"240":1,"245":1,"252":1,"254":2,"257":1,"265":1,"277":1,"278":1,"287":1,"319":1,"324":1,"326":2,"333":1,"337":1,"363":1,"365":3,"370":1,"371":3,"405":1,"407":1,"410":1,"415":1,"424":1,"456":2,"459":1,"483":1}}],["на",{"0":{"0":1,"4":1,"81":1,"111":1,"120":1,"151":1,"381":1,"400":1,"560":1},"1":{"82":1,"83":1,"561":1,"562":1},"2":{"2":2,"3":6,"4":1,"6":2,"7":1,"10":2,"11":3,"12":3,"13":2,"16":1,"17":1,"20":3,"23":5,"27":1,"33":1,"34":1,"36":2,"39":5,"40":3,"41":4,"43":1,"44":2,"46":1,"47":2,"50":3,"51":1,"56":3,"58":1,"59":1,"63":1,"67":1,"68":2,"69":1,"71":1,"72":1,"80":1,"85":1,"88":3,"89":2,"96":6,"98":3,"100":2,"104":2,"105":1,"106":1,"107":2,"108":1,"111":2,"117":1,"118":3,"120":1,"121":1,"122":6,"123":14,"124":8,"125":5,"126":11,"127":3,"129":1,"131":2,"133":6,"134":2,"138":3,"142":13,"143":4,"144":6,"145":5,"147":1,"148":3,"150":1,"151":9,"152":5,"153":2,"154":1,"155":3,"156":1,"157":4,"158":1,"159":3,"160":2,"161":1,"162":1,"164":4,"165":2,"166":3,"167":2,"170":2,"171":3,"172":1,"173":5,"174":2,"175":4,"176":4,"178":5,"179":8,"181":2,"182":1,"183":1,"184":4,"185":2,"186":3,"189":4,"190":4,"191":5,"192":1,"194":3,"195":2,"198":2,"200":1,"203":9,"205":2,"207":2,"208":6,"209":7,"210":5,"211":3,"212":4,"213":3,"214":6,"215":3,"216":1,"217":9,"218":1,"221":3,"222":10,"223":8,"224":2,"225":3,"226":8,"227":1,"230":1,"231":4,"233":3,"234":6,"237":3,"240":1,"242":1,"244":1,"245":1,"246":2,"247":3,"248":5,"249":2,"252":3,"253":2,"254":3,"255":2,"257":3,"258":3,"259":3,"260":1,"263":7,"264":6,"265":1,"266":1,"267":1,"268":3,"270":7,"271":1,"272":1,"273":1,"275":3,"276":1,"277":14,"278":3,"280":2,"281":1,"282":1,"283":3,"284":2,"286":6,"287":2,"288":5,"289":2,"290":2,"291":1,"292":1,"293":2,"294":6,"295":1,"298":1,"299":1,"301":1,"304":2,"305":1,"307":1,"309":2,"310":4,"313":2,"314":5,"315":1,"316":1,"317":3,"318":3,"319":3,"320":5,"322":1,"323":2,"324":1,"325":2,"326":2,"327":3,"331":17,"332":3,"333":2,"334":2,"335":2,"336":1,"337":1,"338":5,"339":1,"340":3,"341":3,"342":3,"343":2,"344":6,"346":1,"347":1,"348":1,"349":2,"350":1,"351":1,"352":3,"353":1,"354":6,"355":1,"357":6,"359":5,"362":10,"363":1,"364":1,"365":3,"369":1,"370":5,"371":6,"372":2,"373":3,"374":5,"375":8,"376":5,"377":6,"384":3,"385":2,"387":1,"390":1,"394":1,"397":1,"398":1,"401":2,"403":2,"405":4,"408":3,"410":4,"411":3,"413":1,"414":1,"415":2,"417":2,"418":12,"419":1,"420":2,"421":1,"424":12,"425":4,"430":1,"431":8,"432":3,"437":2,"440":3,"441":5,"446":7,"448":6,"449":1,"450":11,"451":3,"453":7,"454":3,"455":2,"456":4,"457":5,"458":1,"459":3,"460":1,"462":6,"463":1,"464":2,"465":2,"467":2,"468":2,"469":1,"471":4,"473":2,"474":2,"475":5,"476":4,"477":1,"478":1,"479":8,"482":11,"483":15,"484":1,"485":2,"487":3,"490":5,"491":23,"492":16,"501":1,"503":1,"506":2,"508":3,"531":1,"538":2,"542":3,"543":1,"545":2,"550":1,"551":1,"552":1,"553":1,"554":1,"561":2,"563":1,"570":1,"574":1,"576":2,"579":3,"580":1,"582":1,"583":1,"588":2,"589":1,"590":1}}],["пдд",{"2":{"491":1}}],["псевдопараллельное",{"2":{"483":1}}],["псевдонима",{"2":{"214":1}}],["псевдонимов",{"2":{"214":1}}],["псевдонимы",{"2":{"210":1}}],["псевдоним",{"2":{"142":1,"214":1,"216":1}}],["пк",{"2":{"441":2}}],["пытаются",{"2":{"319":1,"483":1}}],["пытаться",{"2":{"287":1,"288":1,"292":1,"483":1}}],["пытается",{"2":{"278":1,"441":1,"463":1}}],["пытался",{"2":{"96":1}}],["птицы",{"2":{"157":1}}],["пятого",{"2":{"67":1}}],["пятью",{"2":{"175":1}}],["пять",{"2":{"36":1,"96":1,"231":1}}],["песочницы",{"2":{"441":1}}],["песочнице",{"2":{"440":1}}],["пешеходного",{"2":{"270":1}}],["пейджера",{"2":{"178":2}}],["пейджером",{"2":{"178":1}}],["пейджер",{"0":{"178":1},"1":{"179":1},"2":{"178":2}}],["печатает",{"2":{"333":1}}],["печати",{"2":{"273":1}}],["печать",{"2":{"166":2}}],["печатными",{"2":{"155":1}}],["печально",{"2":{"139":1}}],["петлю",{"2":{"142":1}}],["пет",{"2":{"63":1,"424":1}}],["периодическая",{"2":{"214":1}}],["периодически",{"2":{"207":1}}],["периода",{"2":{"196":1}}],["первую",{"2":{"264":1,"326":1,"331":1,"335":1}}],["первые",{"2":{"331":1,"460":1}}],["первых",{"2":{"329":1,"354":1,"491":1,"502":1}}],["первым",{"2":{"190":1,"263":1,"265":1,"345":1}}],["первый",{"2":{"111":1,"117":1,"142":1,"186":1,"190":1,"200":1,"208":1,"218":1,"226":1,"290":1,"303":1,"320":1,"326":1,"349":1,"359":1,"362":2,"364":1,"457":2,"472":1,"508":2}}],["первичный",{"2":{"159":1}}],["первая",{"2":{"131":1,"191":1,"195":1,"277":1,"331":1,"375":1,"472":2}}],["первоклассные",{"2":{"221":1}}],["первоначальном",{"2":{"228":1}}],["первоначальной",{"2":{"200":1}}],["первоначальный",{"2":{"191":1,"246":1,"370":1}}],["первое",{"2":{"172":1,"217":1,"271":1,"375":1}}],["первой",{"2":{"17":1,"179":1,"191":1,"283":1,"331":3,"359":1,"362":1,"377":1,"457":1,"471":1,"472":1,"491":1,"492":1}}],["первого",{"2":{"11":1,"17":1,"155":1,"158":1,"168":1,"184":1,"189":1,"223":1,"253":1,"309":1,"331":1,"414":1,"417":1,"450":1,"457":1,"461":1,"462":2}}],["первом",{"2":{"6":1,"7":1,"11":1,"17":2,"23":1,"50":1,"72":1,"123":2,"217":2,"304":1,"318":1,"327":1,"460":1,"492":1}}],["персонализация",{"0":{"104":1}}],["перспективе",{"2":{"69":1,"294":1}}],["переопределение",{"2":{"591":1}}],["переопределить",{"2":{"506":1}}],["переутомлению",{"2":{"451":1}}],["переупаковывать",{"2":{"270":1}}],["перерастает",{"2":{"449":1}}],["перерасти",{"2":{"222":1}}],["переиспользуемые",{"2":{"542":1}}],["переиспользовать",{"2":{"431":1}}],["переименуем",{"2":{"109":1}}],["переименовывая",{"2":{"486":1}}],["переименовываются",{"2":{"437":1}}],["переименовываем",{"2":{"105":1}}],["переименован",{"2":{"83":1}}],["переадресация",{"2":{"373":1}}],["перезаписывание",{"2":{"535":1}}],["перезаписываем",{"2":{"466":1}}],["перезаписью",{"2":{"359":1}}],["перезагрузка",{"2":{"579":1}}],["перезагрузку",{"2":{"424":1}}],["перезагрузкой",{"2":{"210":1,"354":1}}],["перезагружается",{"2":{"362":1}}],["перечисленные",{"2":{"453":1}}],["перечисленных",{"2":{"376":1}}],["перечислены",{"2":{"365":1}}],["перечислим",{"2":{"354":1}}],["перечень",{"2":{"204":1}}],["перебирать",{"2":{"217":1}}],["перевыполняет",{"2":{"457":1}}],["перевычеслены",{"2":{"217":1}}],["перевода",{"2":{"432":1,"570":1}}],["перевод",{"0":{"381":1},"2":{"491":1,"570":1}}],["переводчика",{"2":{"208":1}}],["перевешивают",{"2":{"270":1,"326":1}}],["перевести",{"2":{"68":1,"126":1}}],["перепишите",{"2":{"243":1}}],["переписывание",{"2":{"479":1}}],["переписываете",{"2":{"450":1}}],["переписывать",{"2":{"146":1,"320":1,"466":1}}],["переписать",{"2":{"414":1}}],["переписанный",{"2":{"128":1}}],["переполнение",{"2":{"179":1}}],["перекомпоновать",{"2":{"343":1}}],["перекрывают",{"2":{"270":1}}],["перекрестного",{"2":{"125":1}}],["переключитесь",{"2":{"473":1}}],["переключателя",{"2":{"577":1}}],["переключатель",{"2":{"319":1}}],["переключаться",{"2":{"230":1,"467":1}}],["переключать",{"2":{"181":1}}],["переключения",{"2":{"171":1,"189":1}}],["переключение",{"2":{"170":1,"247":1,"515":1,"577":1,"591":3}}],["перегружена",{"2":{"352":1}}],["перегруженности",{"2":{"175":1}}],["перегруженных",{"2":{"165":1}}],["перегружать",{"2":{"165":1,"186":1}}],["перехвачен",{"2":{"371":1}}],["перехваченные",{"2":{"320":1}}],["перехвачена",{"2":{"319":1}}],["перехватчиков",{"2":{"545":1}}],["перехватчики",{"2":{"420":1}}],["перехвата",{"2":{"420":2}}],["перехватываем",{"2":{"343":1,"462":1}}],["перехватывается",{"2":{"319":1}}],["перехватывает",{"2":{"278":1,"321":1}}],["перехватывать",{"2":{"318":1}}],["перехватываться",{"2":{"147":1}}],["перехватывая",{"2":{"278":1,"318":1,"462":1}}],["перехвате",{"2":{"277":1}}],["перехватить",{"2":{"254":1,"373":1}}],["перехвату",{"2":{"217":1}}],["переходом",{"2":{"368":1}}],["переходов",{"2":{"234":1}}],["переходят",{"2":{"189":1}}],["переходит",{"2":{"189":1,"287":1}}],["переходить",{"2":{"127":1,"246":1,"264":1}}],["переходим",{"2":{"142":1,"375":1}}],["переход",{"2":{"126":1,"127":1,"138":3,"264":1,"366":1,"417":1,"428":1,"448":1,"473":1,"485":1}}],["переходе",{"2":{"89":1,"203":1}}],["перехода",{"2":{"20":1,"181":1,"184":1,"234":1,"355":1,"359":1,"364":1,"366":1,"401":1,"506":1}}],["перешло",{"2":{"135":1}}],["перешел",{"2":{"134":1}}],["перемещения",{"2":{"256":1,"273":1,"471":1}}],["перемещая",{"2":{"486":1}}],["перемещать",{"2":{"217":1}}],["перемещаться",{"2":{"178":1}}],["перемещается",{"2":{"189":1,"217":1}}],["перемещает",{"2":{"164":1}}],["переместившись",{"2":{"473":1}}],["переместит",{"2":{"215":1}}],["переместился",{"2":{"134":1,"210":1}}],["переменной",{"2":{"96":1,"111":1,"123":1,"179":2,"217":1,"218":1,"222":2,"223":1,"226":3,"228":2,"232":2,"234":2,"254":2,"263":1,"347":2,"359":1,"407":1,"410":1,"446":2,"450":1,"482":2,"582":1}}],["переменная",{"2":{"96":1,"179":1,"217":1,"222":1,"223":1,"226":1,"228":3,"229":2,"247":1,"254":1,"263":1,"264":2,"326":1,"482":2}}],["переменным",{"2":{"226":2,"525":1}}],["переменными",{"2":{"226":1}}],["переменные",{"0":{"236":1,"525":1},"2":{"95":1,"217":2,"223":1,"225":1,"226":4,"250":1,"255":1,"258":1,"264":1,"290":1,"326":1,"347":1,"412":1,"450":1,"482":2,"506":1,"525":1,"591":1}}],["переменных",{"2":{"95":1,"96":1,"131":1,"217":1,"222":1,"226":1,"234":1,"277":1,"342":1,"446":1,"591":1}}],["переменную",{"2":{"95":1,"96":2,"181":1,"217":2,"222":1,"226":2,"229":1,"233":1,"257":1,"258":1,"259":1,"304":1,"405":2,"406":2,"410":1,"412":1,"450":2,"482":1,"531":1}}],["перелогиниваться",{"2":{"123":1}}],["перелогин",{"2":{"123":1}}],["пересобрать",{"2":{"508":1}}],["пересылает",{"2":{"492":1}}],["пересылаемый",{"2":{"123":1}}],["перестанет",{"2":{"484":1}}],["перестает",{"2":{"314":1,"450":1}}],["пересмотреть",{"2":{"407":1}}],["пересмотрите",{"2":{"143":1}}],["пересекаться",{"2":{"368":1}}],["пересекаются",{"2":{"193":1}}],["пересечении",{"2":{"178":1}}],["пересчитали",{"2":{"482":1}}],["пересчитывались",{"2":{"96":1}}],["пересчет",{"2":{"217":1}}],["пересчете",{"2":{"142":1}}],["пересчетов",{"2":{"96":1}}],["переделать",{"2":{"352":1}}],["передаст",{"2":{"375":1}}],["передадим",{"2":{"359":1}}],["передаю",{"2":{"450":1}}],["передающих",{"2":{"338":1}}],["передают",{"2":{"316":1,"405":1}}],["передаются",{"2":{"253":2,"343":1,"349":1}}],["переданной",{"2":{"457":1}}],["переданное",{"2":{"420":1,"462":1}}],["переданного",{"2":{"338":1}}],["переданному",{"2":{"325":1}}],["переданную",{"2":{"311":1,"373":1}}],["переданные",{"2":{"332":1,"338":1}}],["переданными",{"2":{"462":1}}],["переданным",{"2":{"230":1,"379":1}}],["переданный",{"2":{"131":1}}],["переданы",{"2":{"263":1}}],["передан",{"2":{"257":1,"359":1,"365":1}}],["передач",{"2":{"491":1}}],["передача",{"2":{"309":1,"310":2,"364":1,"433":1}}],["передачи",{"2":{"226":1,"253":1,"255":1,"257":1,"309":1,"371":1,"405":1}}],["передаче",{"2":{"210":1}}],["передачу",{"2":{"151":1}}],["передаваемых",{"2":{"344":1}}],["передаваемые",{"2":{"322":1,"331":1,"373":1}}],["передаваемой",{"2":{"347":1}}],["передаваемое",{"2":{"338":1}}],["передаваемому",{"2":{"257":1}}],["передавая",{"2":{"214":1,"223":1,"248":1,"315":1,"318":1,"339":1,"359":1,"432":1,"461":1}}],["передавать",{"2":{"214":2,"247":1,"253":1,"255":1,"257":1,"326":1,"331":1,"335":1,"365":1,"376":1,"407":2,"408":1,"432":1,"482":1,"531":1}}],["передаваться",{"2":{"144":1,"259":1,"342":1,"405":1}}],["передав",{"2":{"143":1,"362":1}}],["передает",{"2":{"257":1,"315":1,"370":1,"455":1}}],["передается",{"2":{"135":1,"204":1,"307":1}}],["передаем",{"2":{"128":1,"144":1,"179":1,"223":1,"279":1,"325":1,"326":1,"339":1,"343":1,"347":1,"349":2,"359":2,"365":2,"375":1,"406":1,"410":1,"415":1,"461":2,"462":3}}],["передаёт",{"2":{"123":1}}],["передать",{"2":{"50":1,"149":1,"179":1,"225":1,"252":2,"254":1,"293":1,"315":1,"342":1,"362":2,"371":1,"405":2,"450":2,"462":1,"483":1,"531":1}}],["перед",{"2":{"121":1,"165":1,"166":1,"179":1,"182":1,"183":1,"197":1,"209":1,"210":1,"222":2,"226":1,"252":1,"255":1,"277":1,"290":2,"308":1,"310":1,"320":1,"326":1,"334":1,"335":1,"359":1,"362":1,"368":1,"377":1,"437":1,"474":1,"476":1,"491":1,"541":1}}],["перейдите",{"2":{"561":1}}],["перейдем",{"2":{"89":1,"151":1,"158":1,"160":1,"215":1,"312":1,"407":1,"461":1,"474":1}}],["перейти",{"2":{"38":1,"175":1,"323":1,"337":1,"365":1,"377":1,"421":1,"545":1}}],["переехать",{"2":{"39":1}}],["перенесенного",{"2":{"331":1}}],["перенесена",{"2":{"310":1}}],["перенести",{"2":{"104":1,"150":1}}],["перенаправить",{"2":{"375":1}}],["перенаправит",{"2":{"373":1}}],["перенаправлен",{"2":{"372":1}}],["перенаправления",{"2":{"372":2,"373":1}}],["перенаправлениях",{"2":{"371":1}}],["перенаправление",{"2":{"203":1,"375":1}}],["перенаправляющие",{"2":{"374":1}}],["перенаправляют",{"2":{"203":1}}],["перенаправляем",{"2":{"372":1}}],["перенаправляться",{"2":{"371":1}}],["перенасыщенности",{"2":{"175":1}}],["переноса",{"2":{"243":1}}],["переносить",{"2":{"234":1,"354":1}}],["переносится",{"2":{"30":1,"302":1,"441":1}}],["перенос",{"0":{"151":1},"2":{"377":1}}],["переносе",{"2":{"122":1,"221":1}}],["перенять",{"2":{"26":1}}],["плевел",{"2":{"491":1}}],["плечах",{"2":{"162":1}}],["плоский",{"2":{"431":1,"448":1}}],["плоская",{"0":{"427":1},"2":{"448":1,"449":1}}],["плохая",{"2":{"450":2}}],["плохие",{"2":{"294":1,"490":1}}],["плохую",{"2":{"294":1}}],["плохой",{"2":{"157":1,"291":1,"446":1}}],["плохо",{"2":{"65":1,"96":1,"446":1,"490":1}}],["плавный",{"2":{"428":1,"448":1}}],["плавность",{"2":{"331":1}}],["плавающее",{"2":{"199":1}}],["плавающей",{"2":{"191":1}}],["плавающего",{"2":{"174":1}}],["плавающий",{"2":{"172":1}}],["платежей",{"2":{"483":1}}],["плату",{"2":{"475":1}}],["платформах",{"2":{"478":1}}],["платформа",{"2":{"277":3,"475":1}}],["платформы",{"2":{"270":1,"272":1,"275":1,"277":1,"281":1}}],["платить",{"2":{"226":1}}],["платных",{"2":{"374":1}}],["платные",{"2":{"39":1,"491":1}}],["платная",{"2":{"208":2}}],["плагину",{"2":{"279":1}}],["плагине",{"2":{"259":1,"263":1}}],["плагинами",{"2":{"440":1}}],["плагина",{"2":{"243":1,"255":1,"262":1,"263":3,"264":1,"278":1,"281":1,"359":1,"492":1,"549":1}}],["плагином",{"2":{"214":1,"260":1,"263":1}}],["плагинов",{"0":{"129":1},"2":{"127":1,"129":1,"133":1,"214":2,"221":1,"225":1,"260":1,"279":1,"339":1,"417":1,"440":1,"441":1}}],["плагин",{"0":{"260":1,"279":1},"1":{"261":1,"262":1,"263":1},"2":{"133":2,"208":1,"243":1,"249":1,"260":1,"262":1,"263":4,"264":2,"266":1,"267":1,"278":1,"279":6,"349":3,"355":1,"549":1}}],["плагины",{"2":{"113":1,"127":1,"128":1,"129":1,"138":1,"210":1,"221":1,"260":1,"261":1,"268":1,"377":1,"440":1,"450":1}}],["планшетов",{"2":{"552":1}}],["планшеты",{"2":{"270":1}}],["планирования",{"2":{"336":1,"337":1,"431":1,"448":1}}],["планирование",{"2":{"336":1}}],["планироваться",{"2":{"336":1}}],["планируется",{"2":{"64":1,"542":1}}],["планов",{"2":{"198":1}}],["планы",{"2":{"124":2}}],["план",{"0":{"66":1},"1":{"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1},"2":{"451":1,"453":2}}],["планах",{"0":{"579":1}}],["планами",{"2":{"425":1}}],["плана",{"2":{"40":1,"67":1,"337":1,"454":1}}],["плане",{"2":{"9":1,"25":1,"218":1,"446":1,"450":1,"490":1}}],["плюсы",{"2":{"431":1,"448":1,"450":1,"490":2}}],["плюсом",{"2":{"217":1}}],["плюс",{"2":{"25":1,"56":1,"89":1,"123":1,"215":1,"226":1,"343":1,"424":1,"450":1,"456":1}}],["пищеварительной",{"2":{"286":1}}],["пишут",{"2":{"293":1}}],["пишутся",{"2":{"236":1,"239":1}}],["пишет",{"2":{"492":1}}],["пишете",{"2":{"290":1,"291":1}}],["пишем",{"2":{"9":1,"225":1}}],["пиши",{"0":{"293":1},"1":{"296":1,"297":1,"298":1,"299":1},"2":{"283":1,"291":1}}],["пикселей",{"2":{"189":1}}],["пиктограмму",{"2":{"187":1}}],["пиктограмм",{"2":{"184":1}}],["пиктограммами",{"2":{"181":2}}],["пиктограммой",{"2":{"174":1}}],["пиктограммы",{"2":{"161":1,"162":1,"166":1,"172":1,"173":1}}],["письмо",{"2":{"375":2}}],["письмом",{"2":{"196":1}}],["письмами",{"2":{"204":1}}],["писем",{"2":{"173":1,"375":1}}],["писать",{"2":{"98":1,"214":1,"226":1,"240":1,"450":1,"456":1,"466":1,"482":1,"538":1}}],["писаться",{"2":{"20":1}}],["пуша",{"2":{"424":1}}],["пул",{"0":{"507":1},"1":{"508":1},"2":{"508":1,"515":1}}],["пулей",{"2":{"270":1}}],["пули",{"2":{"249":1}}],["пузырьком",{"2":{"173":1}}],["пузырьки",{"0":{"173":1}}],["пузыря",{"2":{"172":1}}],["публичным",{"2":{"377":1}}],["публичный",{"2":{"142":2,"210":1}}],["публикуются",{"2":{"503":1}}],["публикуем",{"2":{"338":1,"410":1}}],["публиковаться",{"2":{"336":1}}],["публикацию",{"2":{"476":1}}],["публикации",{"2":{"139":1,"141":1,"153":1,"154":1,"314":2,"410":1}}],["публикация",{"0":{"141":1},"1":{"142":1},"2":{"139":1,"141":1}}],["пупкина",{"2":{"123":1}}],["пупкин",{"2":{"123":1}}],["путаница",{"2":{"377":1}}],["путаницу",{"2":{"157":1,"175":1}}],["путешествии",{"2":{"209":1}}],["путешествовать",{"2":{"131":1}}],["путем",{"2":{"125":1,"146":1,"148":1,"160":1,"183":1,"214":1,"263":1,"287":1,"320":1,"339":1,"365":1,"368":1,"370":1,"371":2,"467":1}}],["путей",{"2":{"104":1,"214":1}}],["путях",{"2":{"121":1,"440":1}}],["путями",{"2":{"121":1,"143":1,"364":1}}],["путь",{"0":{"224":2},"2":{"117":1,"135":2,"141":1,"143":3,"144":2,"147":1,"148":1,"149":2,"157":1,"225":1,"241":1,"255":1,"273":1,"278":1,"332":1,"362":1,"365":1,"368":1,"471":1}}],["пути",{"2":{"83":1,"143":2,"182":1,"214":2,"216":1,"359":1,"362":1,"364":1,"368":4,"378":1,"410":1}}],["пункте",{"2":{"561":1}}],["пункту",{"2":{"407":1}}],["пунктирными",{"2":{"246":1}}],["пункт",{"2":{"195":2,"290":1}}],["пункты",{"2":{"141":1,"215":1,"264":2,"275":1,"362":1}}],["пунктов",{"2":{"29":1,"127":1,"184":1,"215":1,"362":1}}],["пунктах",{"2":{"280":1,"337":1}}],["пункта",{"2":{"4":1,"309":1}}],["пуст",{"2":{"217":1}}],["пуста",{"2":{"217":1}}],["пустого",{"2":{"541":1,"590":1}}],["пустом",{"2":{"213":1}}],["пустой",{"2":{"7":1,"311":1,"315":1,"410":1}}],["пустым",{"2":{"142":1,"420":1,"531":1}}],["пусть",{"2":{"16":1,"364":1,"483":1,"487":1}}],["пабло",{"2":{"387":1}}],["падает",{"2":{"331":1}}],["паутина",{"2":{"221":1}}],["паттернов",{"2":{"241":1,"283":1,"352":1,"378":1,"383":1,"384":1,"399":1,"451":1}}],["паттерн",{"2":{"217":1,"362":1,"446":1}}],["паттерны",{"2":{"211":2,"215":1,"218":2,"221":2,"352":1,"396":1,"455":1,"490":1}}],["пагинации",{"2":{"178":2}}],["пагинация",{"0":{"178":1},"1":{"179":1},"2":{"178":1}}],["памятью",{"2":{"410":2}}],["память",{"2":{"166":1,"290":1}}],["памяти",{"2":{"135":1,"142":1,"166":1,"290":3,"331":1,"441":1,"466":1}}],["папок",{"0":{"210":1},"2":{"145":1,"207":1,"427":1,"448":1}}],["папкоподобная",{"2":{"182":1}}],["папке",{"2":{"156":1,"210":1,"213":1,"263":1,"356":2,"375":1,"437":1,"471":3}}],["папка",{"2":{"143":1,"144":1,"148":1,"151":1,"210":4}}],["папки",{"2":{"134":1,"209":1,"213":1,"261":1,"437":2}}],["папку",{"2":{"134":1,"144":1,"151":1,"209":1,"210":1,"211":1,"212":1,"213":1,"261":1,"437":3,"456":2}}],["панацея",{"2":{"102":1}}],["панелей",{"2":{"184":1}}],["панели",{"0":{"176":1},"1":{"177":1},"2":{"31":1,"99":1,"173":1,"181":3,"184":1,"186":1,"191":1,"357":1,"362":1,"428":1,"448":1,"464":1,"561":1,"581":1}}],["панелью",{"2":{"186":1}}],["панель",{"2":{"28":1,"80":1,"145":2,"146":1,"162":1,"176":1,"189":3,"191":1,"357":1,"365":1,"431":1,"465":1}}],["палитры",{"2":{"579":1}}],["палитру",{"2":{"159":1}}],["пал",{"2":{"39":1}}],["пару",{"2":{"371":1,"441":1,"446":1,"487":1,"542":1,"570":1}}],["паролей",{"2":{"371":2,"376":1}}],["паролями",{"2":{"370":1,"371":1}}],["пароля",{"2":{"370":2,"376":1,"378":1}}],["паролю",{"0":{"370":1,"375":1},"2":{"370":1}}],["пароль",{"2":{"123":1,"371":1,"376":1,"450":1}}],["парольной",{"2":{"40":1}}],["параграфов",{"2":{"570":1}}],["параграфы",{"2":{"491":1}}],["параграфа",{"2":{"277":1}}],["параллельно",{"2":{"453":1}}],["парами",{"2":{"362":1}}],["параметре",{"2":{"317":1}}],["параметр",{"2":{"310":1,"326":1,"345":1,"349":1,"359":1,"365":3,"457":2,"535":1,"562":1}}],["параметром",{"2":{"252":1,"345":1,"457":1,"570":1}}],["параметров",{"2":{"209":1,"305":1,"324":1,"338":1,"345":1,"349":1,"405":1,"462":1,"535":1}}],["параметрам",{"2":{"379":1}}],["параметрами",{"2":{"363":1,"368":2,"424":1}}],["параметра",{"2":{"135":1,"252":2,"263":1,"307":1,"310":1,"315":1,"325":1,"332":1,"333":1,"339":1,"359":1,"364":1,"366":1,"368":1,"457":1}}],["параметры",{"2":{"113":1,"226":2,"260":1,"289":1,"314":1,"355":1,"359":1,"362":1,"365":2,"367":1,"373":1,"432":1,"542":1,"543":1,"579":1}}],["параметру",{"2":{"51":1,"325":1}}],["парадигм",{"2":{"287":1}}],["парадигму",{"2":{"221":1}}],["парадигмы",{"2":{"221":2,"287":1}}],["пара",{"2":{"11":1,"217":1}}],["паре",{"2":{"3":1}}],["пакетных",{"2":{"208":1}}],["пакетами",{"2":{"440":1}}],["пакета",{"0":{"510":1,"523":1,"527":1},"2":{"128":1,"133":1,"135":1,"153":1,"209":2,"226":1,"252":3,"355":1,"356":1,"359":3,"414":1,"442":1,"446":1,"451":1,"454":1,"469":1,"508":1}}],["пакет",{"2":{"89":3,"210":2,"252":1,"316":1,"359":1,"408":2,"431":1,"441":1,"455":2,"456":1,"484":1,"538":1,"573":1}}],["пакеты",{"2":{"5":1,"96":1,"354":1,"542":1}}],["пакетов",{"2":{"5":1,"209":2,"441":1,"456":1,"469":1,"538":1}}],["п",{"2":{"4":1,"38":1,"118":1,"174":1,"472":1,"479":1,"483":1,"501":1,"541":1}}],["поиграйте",{"2":{"491":1}}],["поизучайте",{"2":{"491":1}}],["поисковых",{"2":{"492":1}}],["поисковыми",{"2":{"270":1,"354":1}}],["поисковиков",{"2":{"492":1}}],["поисковик",{"2":{"492":1}}],["поисковиками",{"2":{"492":2}}],["поисковая",{"2":{"107":1}}],["поисковой",{"2":{"107":1}}],["поиск",{"0":{"51":1},"2":{"16":1,"17":2,"51":2,"80":1,"162":1,"186":1,"213":1,"430":1,"448":1}}],["поисках",{"2":{"339":1}}],["поискать",{"2":{"107":1,"439":1}}],["поиска",{"2":{"4":1,"29":1,"51":2,"190":2,"370":1,"428":1,"448":1}}],["побуждает",{"2":{"377":1}}],["побочным",{"2":{"359":1,"405":1}}],["побочных",{"2":{"258":1,"291":1}}],["побочные",{"2":{"175":1}}],["пояснить",{"2":{"320":1}}],["появятся",{"2":{"234":1}}],["появлении",{"2":{"474":1,"550":1}}],["появление",{"2":{"354":2}}],["появлением",{"2":{"221":1,"354":1}}],["появлению",{"2":{"226":1,"462":1}}],["появления",{"2":{"210":1,"354":1,"492":1}}],["появляются",{"2":{"210":1,"275":1,"331":1,"441":1}}],["появляется",{"2":{"33":1,"264":1,"270":1,"363":1,"365":1,"432":1,"568":1}}],["появившаяся",{"2":{"466":1}}],["появиться",{"2":{"179":1,"209":1,"246":1,"263":1,"455":1}}],["появится",{"2":{"125":1,"152":1,"179":1,"209":1,"213":1,"229":1,"277":1,"474":1}}],["появились",{"2":{"136":1,"168":1,"221":1,"283":1,"450":1,"465":1}}],["появился",{"2":{"127":1,"246":1,"254":1,"436":1,"450":1,"492":1}}],["появилась",{"2":{"111":1,"132":1,"318":1,"354":1,"482":1,"541":1}}],["появилось",{"2":{"62":1,"446":1,"450":1}}],["пошагово",{"2":{"263":1}}],["пожалуйста",{"2":{"310":1,"337":1,"370":1}}],["пожалуй",{"2":{"252":1,"270":1,"286":1,"454":1}}],["пограничная",{"2":{"483":1}}],["погрузимся",{"2":{"403":1,"411":1}}],["поговорим",{"2":{"225":1,"369":1,"472":1}}],["погуглим",{"2":{"23":1}}],["поймать",{"2":{"446":1}}],["поймете",{"2":{"160":1,"189":1,"288":1}}],["поймем",{"2":{"155":1,"222":1}}],["пойдем",{"2":{"141":1,"370":1}}],["пойдет",{"2":{"124":1,"466":1}}],["почта",{"2":{"375":1}}],["почтовые",{"2":{"354":1}}],["почти",{"2":{"213":1,"278":1,"291":1,"457":1,"469":1,"483":1,"491":1}}],["почты",{"2":{"142":1,"173":1,"369":1,"375":2,"376":1,"377":1}}],["почувствовать",{"2":{"202":1}}],["почву",{"2":{"157":1}}],["почему",{"2":{"39":1,"96":1,"126":1,"154":1,"158":3,"160":1,"206":1,"220":2,"242":2,"259":1,"280":1,"328":3,"331":1,"339":1,"462":1,"478":3,"482":1,"490":1,"491":1}}],["похудеет",{"2":{"446":1}}],["похвастаться",{"2":{"341":1}}],["похож",{"2":{"418":1}}],["похожем",{"2":{"588":1}}],["похожее",{"2":{"365":1}}],["похожей",{"2":{"290":1,"334":1}}],["похоже",{"2":{"268":1,"309":1,"376":1}}],["похожим",{"2":{"320":1,"415":1}}],["похожий",{"2":{"252":1}}],["похожи",{"2":{"88":1,"230":1,"342":1,"345":1}}],["похожие",{"2":{"4":1,"23":1,"164":1}}],["похакать",{"2":{"124":1}}],["порекомендовать",{"2":{"240":1}}],["порой",{"2":{"491":1}}],["порог",{"2":{"482":1}}],["породили",{"2":{"354":1}}],["породить",{"2":{"187":1}}],["порождать",{"2":{"331":1}}],["порождающие",{"0":{"296":1}}],["порождают",{"2":{"294":1}}],["порождал",{"2":{"258":1}}],["порождает",{"2":{"224":1}}],["пор",{"2":{"156":1,"183":1,"186":1,"196":1,"207":1,"222":1,"224":1,"233":1,"234":1,"246":1,"249":1,"252":1,"293":1,"307":1,"323":1,"326":1,"331":1,"354":1,"362":1,"363":1,"365":2,"375":1,"412":1,"467":1}}],["порядки",{"2":{"492":1}}],["порядковому",{"2":{"462":1}}],["порядковым",{"2":{"178":1}}],["порядке",{"2":{"178":1,"189":1,"209":1,"210":2,"217":1,"224":1,"263":1,"264":1,"272":1,"339":1}}],["порядка",{"2":{"161":1,"178":1,"184":1,"224":1}}],["порядку",{"2":{"141":1,"469":1}}],["порядок",{"2":{"126":1,"264":1}}],["портфолио",{"2":{"540":1,"541":1,"542":1}}],["порта",{"2":{"418":1}}],["порталов",{"2":{"142":1}}],["портал",{"2":{"123":1}}],["портрет",{"2":{"279":1}}],["портретная",{"2":{"274":1}}],["портретных",{"2":{"189":1}}],["порт",{"2":{"209":1,"349":1}}],["портом",{"2":{"125":1}}],["поработайте",{"2":{"491":2}}],["поработать",{"2":{"338":1}}],["поработаем",{"2":{"263":1,"316":1}}],["пора",{"2":{"88":1,"246":1,"323":1}}],["пофиксила",{"2":{"96":1}}],["повысит",{"2":{"489":1}}],["повысить",{"2":{"329":1,"483":1,"590":1}}],["повышая",{"2":{"429":1,"448":1}}],["повышается",{"2":{"483":1,"492":1}}],["повышает",{"2":{"80":1,"350":1,"431":1,"449":1,"475":1}}],["повышение",{"2":{"422":1,"502":1}}],["повышению",{"2":{"396":1}}],["повышения",{"2":{"281":1,"318":1,"329":1,"354":1}}],["повсеместно",{"2":{"323":1}}],["повседневном",{"2":{"165":1}}],["повсюду",{"2":{"189":1}}],["поверх",{"2":{"173":1,"208":1,"222":2,"341":1,"369":1,"370":1,"475":1}}],["поведенческие",{"0":{"297":1}}],["поведенческих",{"2":{"69":1}}],["поведением",{"2":{"221":1}}],["поведение",{"2":{"69":1,"112":1,"160":1,"210":1,"217":1,"221":1,"227":1,"288":1,"301":1,"482":1}}],["поведения",{"2":{"68":1,"178":1,"190":1,"197":1,"331":1}}],["поводу",{"2":{"172":1,"176":1}}],["повлиять",{"2":{"351":1}}],["повлияют",{"2":{"343":1}}],["повлияет",{"2":{"164":1,"253":1,"331":1,"362":1}}],["повлияли",{"2":{"134":1}}],["повторно",{"2":{"226":1,"267":1,"357":1}}],["повторного",{"2":{"226":1,"256":1,"258":1,"277":1,"284":1,"294":1,"307":1,"464":1}}],["повторяйтесь",{"2":{"323":1}}],["повторяйся",{"0":{"291":1}}],["повторяющегося",{"2":{"482":1}}],["повторяющееся",{"2":{"160":1,"251":1}}],["повторяющихся",{"2":{"283":1}}],["повторяемому",{"2":{"245":1}}],["повторяется",{"2":{"179":1,"453":1}}],["повторяет",{"2":{"160":1}}],["повторять",{"2":{"214":1,"407":1}}],["повторяться",{"2":{"211":1,"214":1,"283":1,"407":1}}],["повторения",{"2":{"160":2,"161":1,"258":1,"303":1,"345":1}}],["повторение",{"0":{"160":1},"2":{"160":4}}],["покрывается",{"2":{"464":1}}],["покрытии",{"2":{"464":3}}],["покрытия",{"2":{"464":2}}],["покрытие",{"0":{"464":1},"2":{"463":1,"464":1}}],["покидают",{"2":{"376":1}}],["покидать",{"2":{"248":1}}],["покупку",{"2":{"196":1}}],["покупках",{"2":{"200":1}}],["покупка",{"2":{"196":1}}],["покупке",{"2":{"153":1,"200":1}}],["покупки",{"2":{"142":1,"195":2,"385":1}}],["покупать",{"2":{"142":1}}],["покупателей",{"2":{"80":1,"492":1}}],["покупателя",{"2":{"80":1}}],["покупаем",{"2":{"142":1}}],["покупок",{"2":{"80":1,"195":1}}],["показывали",{"2":{"491":1,"492":1}}],["показывания",{"2":{"424":1}}],["показываем",{"2":{"375":1}}],["показывает",{"2":{"127":1,"172":1,"229":1,"331":1,"340":1,"450":1,"466":1}}],["показывается",{"2":{"30":2,"31":1,"83":1}}],["показываются",{"2":{"433":1}}],["показывают",{"2":{"184":1,"230":1}}],["показывающее",{"2":{"421":1}}],["показывающие",{"2":{"276":1}}],["показывающих",{"2":{"182":1}}],["показывающим",{"2":{"111":1}}],["показывающая",{"2":{"111":1,"173":1}}],["показываться",{"2":{"230":1,"446":1}}],["показывать",{"2":{"172":1,"288":1,"433":1,"482":1,"492":1}}],["показывая",{"2":{"161":1,"170":1,"215":1,"230":1}}],["показ",{"2":{"80":1,"483":1}}],["показав",{"2":{"331":1}}],["показателей",{"0":{"280":1}}],["показать",{"0":{"162":1},"2":{"173":1,"176":1,"186":1,"471":1}}],["показаться",{"2":{"26":1,"145":1,"210":1,"225":3,"268":1,"270":1,"290":1,"320":1,"326":1,"331":1,"462":1}}],["показана",{"2":{"462":1}}],["показанном",{"2":{"264":1}}],["показанное",{"2":{"190":1}}],["показаны",{"2":{"178":1,"257":1}}],["показано",{"2":{"142":1,"226":1,"254":1,"316":1,"325":1,"337":1,"370":1,"397":1,"404":1,"405":1,"406":1,"410":1,"412":1,"531":1}}],["показа",{"2":{"50":1,"230":2,"437":1}}],["показе",{"2":{"30":1,"277":1}}],["пока",{"2":{"25":1,"34":1,"41":1,"56":1,"73":1,"85":1,"92":1,"105":1,"106":2,"113":1,"114":1,"142":1,"178":1,"183":1,"196":1,"214":1,"221":1,"222":1,"225":1,"234":2,"246":1,"249":1,"252":1,"263":2,"286":1,"290":1,"293":1,"305":1,"307":1,"321":1,"324":1,"326":1,"331":1,"339":1,"357":1,"359":1,"362":1,"369":1,"375":1,"415":1,"472":1}}],["поначалу",{"2":{"225":1}}],["понадобятся",{"2":{"217":1,"269":1,"318":1}}],["понадобится",{"2":{"36":1,"73":1,"113":1,"114":1,"217":2,"223":1,"263":1,"264":1,"310":1,"440":1}}],["понадобиться",{"2":{"34":1}}],["поняв",{"2":{"234":1}}],["поняли",{"2":{"209":1,"277":1}}],["понятен",{"2":{"190":1,"349":1}}],["понять",{"2":{"167":1,"189":1,"218":1,"235":1,"247":1,"278":1,"301":1,"327":1,"338":1,"371":1,"413":1,"414":1,"433":1,"450":1,"456":1,"491":1}}],["понятий",{"2":{"224":1,"282":1}}],["понятийном",{"2":{"68":1}}],["понятия",{"2":{"222":1,"224":1,"241":1,"291":1,"314":1,"379":1,"389":1,"399":1,"408":1,"477":1,"483":1}}],["понятиями",{"2":{"164":1,"255":1}}],["понятии",{"2":{"222":1}}],["понятие",{"2":{"123":1,"223":1,"257":1,"291":1,"465":1,"475":1,"482":1}}],["понятное",{"2":{"332":1}}],["понятно",{"2":{"255":1,"338":1,"541":1}}],["понятной",{"2":{"174":1}}],["понятна",{"2":{"189":1,"411":1}}],["понятные",{"2":{"440":1}}],["понятными",{"2":{"178":1}}],["понятным",{"2":{"126":1,"293":1,"329":1}}],["понятный",{"2":{"68":1,"78":1,"185":1,"405":1}}],["понятную",{"2":{"106":1,"490":1}}],["понятней",{"2":{"83":1}}],["понимаете",{"2":{"365":1,"475":1}}],["понимается",{"2":{"292":1}}],["понимают",{"2":{"176":1,"218":1,"291":1}}],["понимаются",{"2":{"168":1,"437":1}}],["понимании",{"2":{"403":1,"418":1}}],["пониманием",{"2":{"190":1}}],["понимание",{"0":{"225":1},"2":{"157":1,"162":1,"283":1,"382":1,"405":1,"491":1}}],["понимания",{"2":{"65":1,"68":1,"96":1,"139":1,"153":1,"157":1,"186":1,"283":1,"316":1,"324":1,"326":1,"347":1,"384":1,"398":1,"404":1,"412":1}}],["понимать",{"2":{"123":1,"222":1,"294":1,"371":1,"455":1,"491":1}}],["понравиться",{"2":{"96":1}}],["попап",{"2":{"446":1}}],["попадают",{"2":{"464":1}}],["попадает",{"2":{"176":1,"375":1}}],["попадет",{"2":{"164":1,"214":1}}],["попасть",{"2":{"89":1,"407":1}}],["попробуем",{"2":{"474":1}}],["попробует",{"2":{"439":1}}],["попробуйте",{"2":{"96":1,"439":1,"441":1,"491":2}}],["попросите",{"2":{"160":1}}],["попытаемся",{"2":{"474":1}}],["попытается",{"2":{"160":1,"460":1}}],["попытаться",{"2":{"149":1,"278":2,"464":1}}],["попытался",{"2":{"62":1}}],["попытка",{"2":{"126":1,"319":1,"454":1}}],["популистов",{"2":{"96":1}}],["популизма",{"2":{"96":1}}],["популизмом",{"2":{"96":1}}],["попули́зм",{"2":{"96":1}}],["популярен",{"2":{"145":1,"148":1,"170":1,"223":1,"313":1,"467":1,"475":1}}],["популяризация",{"2":{"126":2}}],["популяризацией",{"2":{"96":1}}],["популярной",{"2":{"467":1}}],["популярности",{"2":{"441":1}}],["популярность",{"2":{"240":1}}],["популярном",{"2":{"212":1}}],["популярного",{"2":{"211":1}}],["популярна",{"2":{"203":1,"446":1,"570":1}}],["популярная",{"2":{"96":1}}],["популярных",{"2":{"208":1,"221":1,"466":1}}],["популярными",{"2":{"268":1,"377":1,"579":1}}],["популярным",{"2":{"184":2,"453":1,"492":1}}],["популярные",{"2":{"181":1,"440":1,"542":1}}],["популярны",{"2":{"175":1,"184":1}}],["популярный",{"2":{"124":1,"208":2,"424":1}}],["попутный",{"2":{"65":1}}],["попутно",{"2":{"63":1,"221":1}}],["познавательные",{"2":{"477":1}}],["познакомившись",{"2":{"155":1}}],["познакомились",{"2":{"153":1,"205":1,"329":1,"350":1}}],["познакомился",{"2":{"62":1}}],["познакомимся",{"2":{"139":1,"155":1,"210":1,"221":1,"243":2,"268":1,"378":1}}],["позитивного",{"2":{"458":1}}],["позиционируют",{"2":{"541":1}}],["позицией",{"2":{"377":1}}],["позиции",{"2":{"181":1}}],["позаботится",{"2":{"210":1,"217":1,"226":1,"414":1}}],["позора",{"0":{"202":1}}],["поздно",{"2":{"164":1,"484":1}}],["позже",{"2":{"88":1,"114":1,"142":2,"208":1,"213":1,"223":1,"234":1,"247":1,"255":1,"257":1,"258":1,"263":1,"277":2,"287":1,"291":1,"338":1,"339":1,"347":1,"357":1,"359":1,"417":1,"455":1,"472":1,"492":1}}],["позволили",{"2":{"354":1}}],["позволить",{"2":{"59":1,"309":1}}],["позволит",{"2":{"11":1,"50":1,"89":1,"181":1,"210":1,"255":1,"283":1,"290":1,"327":1,"382":1,"455":1,"456":1}}],["позволял",{"2":{"258":1}}],["позволят",{"2":{"252":1,"329":1,"475":1}}],["позволяя",{"2":{"214":1,"324":1,"401":1}}],["позволяют",{"2":{"170":1,"254":1,"270":1,"344":1,"361":1,"368":1,"425":1,"431":1,"440":1,"448":1}}],["позволяющую",{"2":{"359":1}}],["позволяющая",{"2":{"320":1,"350":1,"378":1}}],["позволяющего",{"2":{"466":1}}],["позволяющее",{"2":{"301":1}}],["позволяющему",{"2":{"169":1}}],["позволяющим",{"2":{"375":1}}],["позволяющими",{"2":{"205":1}}],["позволяющих",{"2":{"350":1,"371":1}}],["позволяющие",{"2":{"205":1,"221":1,"290":1,"377":1,"475":1,"541":1}}],["позволяющий",{"2":{"125":1,"136":1,"146":1,"178":1,"260":1,"277":1,"418":1}}],["позволяйте",{"2":{"166":2}}],["позволяет",{"2":{"34":1,"68":1,"69":1,"100":1,"114":1,"133":1,"142":2,"146":1,"176":1,"178":2,"182":1,"183":1,"185":1,"210":3,"222":1,"225":1,"234":1,"252":1,"254":1,"286":1,"294":1,"311":1,"315":2,"326":1,"331":1,"332":1,"337":1,"346":1,"355":1,"362":1,"365":3,"368":1,"412":1,"424":1,"431":2,"441":1,"449":1,"450":1,"456":1,"461":1,"467":2,"472":1,"475":1,"482":2,"483":2,"492":2,"531":1,"540":1,"545":1,"547":1,"588":1,"589":1}}],["поэкспериментируйте",{"2":{"491":1}}],["поэкспериментировать",{"2":{"44":1}}],["поэтапного",{"2":{"281":1}}],["поэтапно",{"2":{"61":1}}],["поэтому",{"2":{"13":1,"20":1,"47":1,"65":2,"92":1,"96":1,"104":1,"107":1,"117":1,"122":1,"132":2,"142":1,"145":1,"151":1,"152":1,"158":2,"166":1,"174":1,"176":2,"183":1,"189":1,"209":1,"211":1,"212":1,"213":2,"218":1,"222":1,"223":1,"224":1,"226":2,"234":2,"240":1,"241":1,"245":1,"253":1,"264":1,"272":1,"277":2,"278":1,"285":1,"287":1,"290":1,"303":1,"310":2,"314":1,"318":1,"330":1,"331":4,"333":2,"334":1,"336":1,"338":1,"341":1,"342":2,"344":1,"349":1,"363":1,"368":1,"371":2,"372":1,"376":1,"377":3,"407":1,"408":1,"418":3,"420":1,"441":2,"446":1,"450":1,"455":1,"456":1,"458":2,"459":1,"462":2,"463":1,"464":1,"469":1,"471":1,"475":1,"482":1,"483":2,"492":1,"531":1}}],["помечает",{"2":{"474":1}}],["помечаем",{"2":{"179":1}}],["помечена",{"2":{"325":1}}],["помеченный",{"2":{"264":1}}],["помеченных",{"2":{"217":1}}],["поместили",{"2":{"264":1,"278":1}}],["поместим",{"2":{"210":1,"456":1}}],["поместите",{"2":{"211":1,"212":1,"474":1}}],["поместит",{"2":{"209":1,"225":1}}],["поместить",{"2":{"147":1,"278":1,"431":1,"449":1}}],["помещен",{"2":{"463":1}}],["помещены",{"2":{"144":1,"472":1}}],["помещаться",{"2":{"437":1}}],["помещаем",{"2":{"362":1}}],["помещается",{"2":{"257":1,"582":1}}],["помещаются",{"2":{"195":1,"210":1,"437":1}}],["поменять",{"2":{"40":1,"41":1,"538":1}}],["помните",{"2":{"310":1,"418":1,"457":1,"474":1}}],["помнить",{"2":{"142":1,"213":1,"224":1,"225":1,"253":1,"290":1,"342":1,"343":1,"370":2,"371":1,"433":1,"450":1,"459":1,"475":1}}],["помним",{"2":{"41":1}}],["помимо",{"2":{"127":1,"176":1,"179":1,"184":1,"200":1,"210":1,"314":1,"323":1,"331":1,"371":1,"382":1,"451":1}}],["помогают",{"2":{"224":1,"490":1,"491":1}}],["помогающая",{"2":{"222":1}}],["помогает",{"2":{"185":1,"234":1,"248":1,"290":1,"338":1,"491":1,"541":1}}],["помогут",{"2":{"162":1,"206":1,"221":1,"235":1,"278":1}}],["поможет",{"2":{"127":1,"157":1,"283":2,"318":1,"382":2,"453":2,"491":1}}],["помочь",{"2":{"125":1,"172":1,"242":1,"327":1,"491":1}}],["помощь",{"2":{"254":1,"257":1,"276":1,"459":1}}],["помощью",{"0":{"152":1,"243":1,"245":1,"255":1,"259":1,"280":1,"341":1,"392":1,"396":1,"408":1,"413":1,"467":1},"1":{"244":1,"245":1,"246":2,"247":2,"248":2,"249":2,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"262":1,"263":1,"264":1,"265":1,"266":1,"267":1,"342":1,"343":1,"344":1,"345":1,"346":1,"347":1,"409":1,"410":1,"414":1,"415":1,"416":1,"417":1},"2":{"35":2,"98":2,"117":1,"124":1,"139":1,"145":1,"151":1,"152":2,"153":1,"155":1,"158":1,"170":1,"171":1,"172":1,"174":1,"175":2,"184":1,"189":2,"207":1,"209":2,"210":1,"212":2,"213":1,"215":2,"217":7,"218":1,"220":1,"225":2,"226":1,"233":2,"234":1,"243":3,"245":1,"246":1,"247":2,"251":1,"252":3,"253":2,"254":1,"255":2,"257":2,"260":1,"262":2,"263":2,"264":2,"267":1,"268":1,"270":4,"271":1,"277":1,"278":1,"279":1,"281":2,"287":1,"290":1,"312":1,"315":2,"318":2,"323":3,"325":2,"326":1,"327":1,"329":1,"331":1,"333":2,"339":1,"341":1,"342":1,"344":1,"345":1,"347":2,"349":3,"352":1,"354":1,"355":2,"356":1,"357":1,"361":1,"362":2,"365":2,"369":2,"371":1,"373":1,"374":1,"375":1,"376":2,"377":2,"378":1,"382":1,"396":1,"398":1,"403":2,"407":1,"408":1,"410":1,"412":1,"413":2,"414":2,"417":1,"418":2,"419":1,"420":2,"422":1,"425":1,"441":1,"450":1,"451":2,"453":1,"456":1,"457":2,"459":1,"460":1,"461":1,"462":3,"465":3,"471":1,"472":3,"474":2,"476":1,"520":1,"542":1,"543":1,"545":1,"547":1,"553":2,"578":1}}],["помощников",{"2":{"157":1}}],["помощник",{"2":{"98":1,"209":2}}],["помощи",{"2":{"74":1,"208":1}}],["посещении",{"2":{"377":1}}],["послано",{"2":{"462":1}}],["послойное",{"2":{"331":1}}],["после",{"2":{"39":1,"58":1,"72":1,"80":1,"85":1,"126":1,"128":1,"129":1,"133":1,"143":1,"144":1,"153":1,"176":1,"186":1,"193":1,"195":1,"196":1,"204":1,"209":1,"215":1,"216":1,"217":1,"218":1,"230":1,"233":1,"246":1,"248":1,"251":2,"254":1,"255":1,"263":1,"264":2,"265":1,"276":1,"277":2,"278":2,"279":1,"280":1,"299":1,"303":1,"309":1,"311":1,"315":2,"320":1,"321":1,"324":3,"331":3,"332":1,"333":1,"338":1,"339":1,"343":1,"348":2,"349":2,"355":1,"356":1,"359":3,"369":1,"372":2,"376":1,"377":1,"401":1,"412":2,"413":1,"424":2,"425":1,"446":1,"450":1,"451":1,"453":1,"455":2,"456":1,"457":2,"460":2,"465":1,"466":1,"468":1,"471":5,"472":2,"475":1,"483":1,"492":3,"568":1,"574":1,"590":1}}],["последствия",{"2":{"294":1}}],["последующим",{"2":{"457":1}}],["последующих",{"2":{"200":1,"304":2}}],["последующая",{"2":{"356":1}}],["последующей",{"2":{"376":1}}],["последующего",{"2":{"20":1,"268":1,"338":1,"538":1}}],["последующему",{"2":{"152":1}}],["последующем",{"2":{"17":1,"277":1}}],["последовательную",{"2":{"326":1}}],["последовательный",{"2":{"178":1}}],["последовательным",{"0":{"160":1},"2":{"255":1}}],["последовательной",{"2":{"240":1}}],["последовательном",{"2":{"178":1}}],["последовательного",{"2":{"175":1,"331":3}}],["последовательно",{"2":{"165":1,"324":1,"325":1,"331":1,"418":1}}],["последовательности",{"2":{"161":1,"166":1,"248":1,"431":1,"448":1}}],["последнем",{"2":{"363":1,"483":1}}],["последнего",{"2":{"349":1}}],["последней",{"2":{"225":1,"286":1}}],["последнее",{"2":{"172":1,"343":1}}],["последняя",{"2":{"221":1,"382":1,"469":1,"476":1}}],["последним",{"2":{"264":1,"284":1,"326":1,"338":1}}],["последними",{"2":{"89":1}}],["последний",{"2":{"167":1,"277":1,"309":1,"357":1,"462":1,"469":1,"475":1}}],["последних",{"2":{"151":1,"211":1,"424":1}}],["последние",{"2":{"43":1,"77":1,"168":1,"446":1,"570":1}}],["последнюю",{"2":{"25":1,"208":1}}],["посвящены",{"2":{"217":1,"294":1}}],["посвящена",{"2":{"207":1,"299":1,"331":1,"396":1}}],["посвященный",{"2":{"162":1}}],["посадочная",{"2":{"175":1}}],["посадочной",{"2":{"175":1}}],["поскольку",{"2":{"142":1,"143":2,"145":1,"156":1,"157":1,"164":1,"170":1,"175":2,"178":1,"179":2,"186":1,"207":1,"213":2,"217":3,"218":2,"222":1,"223":2,"226":1,"234":1,"235":1,"252":1,"264":2,"278":1,"279":1,"288":1,"290":1,"309":1,"314":1,"318":1,"319":3,"320":1,"321":1,"323":1,"324":1,"326":1,"331":2,"334":1,"335":1,"340":1,"341":1,"343":1,"344":1,"349":2,"357":1,"362":1,"365":2,"368":2,"370":1,"374":2,"375":1,"377":2,"405":1,"407":1,"408":1,"410":1,"412":2,"414":1,"415":1,"418":3,"419":1,"420":2,"453":3,"454":1,"457":1,"460":1,"462":1,"464":1,"465":1,"471":1,"472":1,"474":1,"475":1,"477":1}}],["посылать",{"2":{"126":1}}],["посредником",{"2":{"125":1}}],["посредством",{"2":{"40":1}}],["посмотрели",{"2":{"422":1}}],["посмотреть",{"2":{"16":1,"118":2,"148":1,"209":1,"222":1,"277":1,"362":2,"376":1,"387":1,"440":1,"441":1,"491":1,"492":1,"521":2,"532":2,"542":1}}],["посмотрим",{"2":{"150":1,"167":1,"254":1,"271":1,"326":1,"331":1,"339":2,"347":1,"360":1,"361":1,"364":1,"371":1,"405":2,"406":1,"414":2}}],["посмотрите",{"2":{"23":1,"156":1,"208":1,"244":1,"257":1,"269":1,"325":1,"330":1,"353":1,"404":1,"441":1,"452":1,"491":1}}],["поступившие",{"2":{"476":1}}],["поступления",{"2":{"12":1}}],["пострадать",{"2":{"270":1}}],["построим",{"2":{"337":1,"413":1}}],["построить",{"2":{"83":1,"211":1,"218":2,"222":1,"329":1,"382":1}}],["построчно",{"2":{"315":1,"317":1,"319":1}}],["построенные",{"2":{"222":1,"369":1,"450":1,"475":1}}],["построено",{"2":{"218":1,"475":1}}],["построен",{"2":{"215":1,"222":1,"224":1}}],["построены",{"2":{"143":1,"222":1}}],["построению",{"2":{"243":1,"382":1}}],["построение",{"2":{"77":1}}],["построения",{"2":{"39":1,"222":3,"322":1,"542":1,"576":1}}],["постов",{"2":{"191":1}}],["постоянный",{"2":{"277":1}}],["постоянных",{"2":{"166":1}}],["постоянными",{"2":{"341":1}}],["постоянным",{"2":{"123":1}}],["постоянной",{"2":{"329":1,"350":1}}],["постоянного",{"2":{"277":1,"422":1}}],["постоянно",{"2":{"123":1,"211":1,"251":1,"466":1,"477":1}}],["постсервисное",{"2":{"157":1}}],["постепенной",{"2":{"282":1}}],["постепенно",{"2":{"80":1,"221":1,"222":1,"268":1,"382":1}}],["постепенное",{"2":{"77":1,"270":1}}],["постановка",{"2":{"471":1,"472":1}}],["поставки",{"2":{"470":1}}],["поставлен",{"2":{"471":1}}],["поставлены",{"2":{"316":1}}],["поставленных",{"2":{"70":1}}],["поставляется",{"2":{"280":1}}],["поставляемых",{"2":{"207":1}}],["поставщиков",{"2":{"126":1}}],["поставив",{"2":{"124":1}}],["поставить",{"2":{"121":1,"124":1,"441":1,"474":1,"491":1}}],["поставили",{"2":{"85":1}}],["постараемся",{"2":{"20":1}}],["потратит",{"2":{"456":1}}],["потратьте",{"2":{"441":1,"487":1}}],["потребуются",{"2":{"454":1}}],["потребует",{"2":{"38":1,"222":1}}],["потребуется",{"2":{"12":1,"208":1,"214":1,"217":1,"324":1,"352":1,"357":1,"371":1,"457":1,"508":1}}],["потребностей",{"2":{"327":1,"403":1,"464":1}}],["потребностями",{"2":{"210":1,"217":1}}],["потребностях",{"2":{"145":1}}],["потребляют",{"2":{"324":1}}],["потребительском",{"2":{"155":1}}],["потери",{"2":{"439":1}}],["потеряете",{"2":{"376":1}}],["потеряло",{"2":{"167":1}}],["потерять",{"2":{"123":1}}],["потенциал",{"2":{"354":1,"474":2}}],["потенциальной",{"2":{"429":1,"448":1}}],["потенциально",{"2":{"331":1,"431":1,"448":1}}],["потоки",{"2":{"483":3,"508":1}}],["потоке",{"2":{"278":1,"291":1,"324":1,"331":2,"418":1,"482":1,"483":1}}],["потокам",{"2":{"483":1}}],["потоками",{"0":{"395":1,"403":1},"1":{"404":1,"405":1,"406":1,"407":1,"408":1,"409":1,"410":1,"411":1,"412":1,"413":1,"414":1,"415":1,"416":1,"417":1,"418":1,"419":1,"420":1,"421":1,"422":1,"423":1},"2":{"247":1,"257":1,"268":1,"277":1,"305":1,"317":1,"336":2,"395":1,"483":1}}],["потоках",{"2":{"331":1}}],["потока",{"0":{"247":1},"2":{"317":1,"324":2,"325":1,"326":1,"371":1,"405":1,"483":2}}],["поток",{"2":{"167":1,"222":1,"293":1,"324":2,"371":1,"446":1,"483":6}}],["потоком",{"2":{"135":1,"225":1,"226":1,"299":1,"312":1,"362":1,"403":1,"404":1,"410":1,"417":1,"422":1,"482":1}}],["потоков",{"2":{"11":1,"68":1,"483":2}}],["поточнее",{"2":{"98":1}}],["потомок",{"2":{"450":1}}],["потомком",{"2":{"450":1}}],["потом",{"2":{"23":1,"26":1,"36":1,"39":1,"40":1,"63":1,"65":1,"108":1,"160":1,"278":1,"450":2,"492":2,"538":1}}],["потому",{"2":{"3":1,"17":1,"51":1,"104":1,"105":1,"123":1,"160":1,"214":1,"303":1,"325":1,"349":1,"365":1,"424":1,"450":1,"483":1,"492":1}}],["по",{"0":{"51":1,"67":1,"370":1,"375":1,"577":1},"2":{"11":1,"12":1,"13":3,"14":1,"16":1,"17":3,"23":2,"26":2,"41":1,"50":2,"51":4,"69":1,"77":2,"80":2,"89":2,"96":2,"98":1,"112":1,"114":2,"118":1,"121":1,"123":4,"124":3,"125":3,"131":2,"132":4,"133":1,"137":1,"141":2,"142":2,"143":1,"144":1,"145":2,"148":1,"149":1,"150":1,"151":1,"152":5,"153":2,"156":1,"161":1,"164":1,"166":1,"169":2,"172":2,"174":1,"176":2,"178":4,"179":1,"180":1,"184":1,"186":1,"187":1,"189":2,"190":1,"193":1,"195":1,"207":3,"208":2,"209":2,"210":2,"212":1,"213":2,"214":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":4,"222":3,"223":1,"224":1,"226":3,"231":1,"233":1,"241":2,"243":1,"246":2,"247":3,"249":1,"252":4,"253":3,"254":1,"255":2,"257":9,"258":1,"259":1,"262":1,"263":4,"264":6,"265":3,"267":1,"269":1,"270":4,"271":1,"273":1,"275":1,"277":1,"279":1,"281":1,"283":2,"286":2,"287":1,"288":2,"289":1,"290":1,"292":1,"294":1,"295":1,"307":2,"309":1,"310":3,"311":4,"312":1,"314":3,"315":2,"319":1,"324":2,"326":2,"327":1,"329":1,"331":4,"335":1,"336":1,"337":1,"342":1,"343":2,"345":1,"349":4,"351":1,"353":1,"354":4,"355":3,"356":1,"359":1,"362":4,"364":1,"365":3,"368":5,"370":2,"371":3,"374":1,"375":1,"376":2,"377":5,"378":1,"384":1,"386":1,"400":1,"403":1,"405":3,"406":1,"407":3,"412":2,"417":5,"418":3,"424":2,"425":1,"429":1,"431":4,"437":4,"438":1,"440":2,"441":2,"446":2,"448":3,"449":1,"450":6,"451":2,"452":2,"453":1,"456":2,"460":1,"462":1,"466":3,"467":1,"469":1,"472":1,"474":1,"475":2,"479":1,"483":4,"489":1,"490":1,"491":8,"492":8,"502":1,"506":1,"508":1,"515":2,"538":1,"545":1,"547":1,"552":1,"561":1,"562":1,"570":1,"572":1,"573":1,"574":1}}],["полиморфизмом",{"2":{"483":1}}],["политической",{"2":{"96":1}}],["политиков",{"2":{"96":1}}],["политика",{"2":{"96":1,"123":1}}],["политиками",{"2":{"59":1}}],["политики",{"2":{"59":2}}],["политик",{"2":{"59":1,"454":1}}],["полтора",{"2":{"450":1}}],["полагаясь",{"2":{"365":1}}],["полагаться",{"2":{"152":1,"375":1}}],["полос",{"2":{"376":1}}],["полосой",{"2":{"331":1}}],["полоса",{"2":{"179":1}}],["полосу",{"2":{"176":1}}],["поломке",{"2":{"132":1}}],["положено",{"2":{"467":1}}],["положение",{"2":{"128":1,"182":1,"318":1}}],["положить",{"2":{"437":1}}],["положительное",{"2":{"455":1}}],["положительного",{"2":{"80":1,"205":1}}],["положительный",{"2":{"157":1}}],["положительные",{"2":{"138":1,"155":1,"368":1}}],["половину",{"2":{"96":1,"331":1}}],["полгода",{"2":{"89":1}}],["пользуется",{"2":{"450":1}}],["пользу",{"0":{"384":1},"2":{"206":1,"384":1}}],["польза",{"2":{"65":1}}],["пользоваться",{"2":{"98":1,"325":1,"450":1,"482":1,"490":1,"573":1}}],["пользователем",{"2":{"157":1,"185":1,"186":1,"199":1,"200":1,"217":1,"247":1,"252":1,"258":1,"363":1,"371":1,"375":1,"419":1,"451":1,"482":1,"483":1,"591":1}}],["пользователей",{"2":{"50":1,"59":2,"158":1,"160":1,"194":1,"201":1,"208":1,"221":1,"265":1,"270":2,"291":1,"369":2,"370":5,"371":2,"374":1,"376":2,"377":1,"379":2,"410":1,"430":1,"448":1,"453":1,"479":1,"483":1,"492":2,"515":1}}],["пользователи",{"2":{"123":1,"160":1,"175":1,"176":1,"190":2,"197":1,"208":1,"281":1,"370":1}}],["пользователю",{"2":{"68":1,"123":1,"146":1,"158":1,"160":1,"162":1,"164":1,"165":2,"167":1,"169":1,"170":2,"171":1,"172":2,"175":2,"176":2,"178":3,"180":1,"181":1,"182":1,"183":2,"184":1,"185":1,"187":1,"191":1,"197":1,"198":1,"205":1,"248":1,"252":1,"270":1,"277":2,"363":1,"370":1,"371":1,"372":1,"374":1,"375":2,"376":2,"418":1,"424":1,"455":1,"474":1,"482":1,"508":1}}],["пользователями",{"2":{"168":1,"205":1,"590":1}}],["пользователям",{"2":{"74":1,"123":1,"185":1,"190":1,"208":1,"462":1}}],["пользователя",{"0":{"370":1},"2":{"50":1,"77":1,"113":1,"123":7,"155":1,"157":2,"158":1,"159":2,"160":2,"165":2,"166":3,"167":4,"169":1,"171":1,"173":2,"174":3,"175":1,"176":4,"178":1,"186":1,"187":1,"193":1,"194":2,"196":1,"197":2,"199":1,"202":1,"203":2,"204":1,"205":1,"217":1,"248":1,"249":1,"264":1,"270":3,"277":3,"278":1,"324":1,"331":1,"354":2,"370":3,"371":2,"373":2,"375":4,"376":5,"377":9,"378":1,"418":2,"424":1,"431":1,"432":2,"449":1,"450":2,"462":1,"492":3,"501":1}}],["пользовательской",{"0":{"248":1},"2":{"190":1}}],["пользовательского",{"0":{"158":1,"163":1,"243":1,"246":1,"392":1},"1":{"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"262":1,"263":1,"264":1,"265":1,"266":1,"267":1},"2":{"132":1,"155":2,"157":2,"158":5,"159":1,"162":3,"164":1,"171":3,"186":1,"191":1,"192":1,"215":1,"217":1,"225":2,"232":1,"245":1,"249":1,"257":1,"258":1,"270":1,"273":1,"287":1,"288":1,"290":1,"312":2,"320":2,"321":1,"324":1,"335":1,"342":1,"354":1,"355":1,"357":1,"399":2,"407":2,"428":1,"430":1,"448":2,"465":1}}],["пользовательские",{"2":{"243":3,"247":1,"354":1,"430":1,"431":1,"448":2}}],["пользовательский",{"2":{"162":1,"192":2,"205":1,"211":1,"217":1,"277":3,"278":1,"325":1,"331":1,"363":1,"492":1,"589":1}}],["пользовательским",{"2":{"157":1,"264":1,"284":1}}],["пользовательских",{"2":{"157":1,"158":2,"209":1,"219":1,"222":2,"254":1,"323":1,"365":1,"382":1,"392":1}}],["пользовательская",{"2":{"68":1}}],["пользователь",{"2":{"11":1,"123":6,"155":1,"164":1,"165":1,"166":2,"167":4,"172":1,"176":1,"178":2,"179":1,"190":1,"195":1,"196":2,"197":2,"198":2,"200":1,"201":2,"202":1,"203":1,"204":1,"215":2,"217":1,"232":1,"234":1,"247":1,"248":1,"249":1,"262":1,"270":2,"275":1,"276":1,"277":4,"278":1,"331":1,"347":1,"365":1,"370":1,"371":2,"372":1,"375":4,"376":1,"377":1,"430":1,"446":1,"448":1,"450":1,"474":1,"482":2,"538":1,"542":1,"568":1}}],["пользования",{"2":{"41":1}}],["полутора",{"2":{"571":1}}],["полупрозрачным",{"2":{"263":1}}],["полуготовые",{"2":{"62":1}}],["получены",{"2":{"347":1,"365":1}}],["полученном",{"2":{"349":1}}],["полученное",{"2":{"332":1}}],["полученный",{"2":{"374":1}}],["полученными",{"2":{"349":1}}],["полученные",{"2":{"315":1,"333":1,"338":1,"344":1,"346":1,"349":1,"352":1,"371":1,"379":1}}],["полученных",{"2":{"173":1}}],["полученная",{"2":{"133":1}}],["получению",{"2":{"314":1,"418":1}}],["получения",{"2":{"131":1,"136":1,"169":1,"217":1,"226":1,"249":1,"263":2,"302":1,"310":1,"324":1,"347":1,"407":1,"420":1,"466":1,"508":1}}],["получении",{"2":{"123":1,"339":1}}],["получение",{"0":{"341":1,"508":1},"1":{"342":1,"343":1,"344":1,"345":1,"346":1,"347":1},"2":{"74":1,"141":1,"151":1,"368":1,"508":1}}],["получила",{"2":{"326":1}}],["получилось",{"2":{"209":1}}],["получил",{"2":{"173":1,"226":1}}],["получили",{"2":{"143":1,"259":1,"291":1,"349":1,"354":1,"374":1}}],["получившуюся",{"2":{"408":1}}],["получив",{"2":{"144":2,"213":1,"311":1,"334":1,"371":1,"377":1}}],["получим",{"2":{"100":1,"215":1,"243":1,"278":1,"357":1}}],["получит",{"2":{"228":1,"270":1,"326":1}}],["получите",{"2":{"155":1,"246":1,"457":1,"474":1}}],["получить",{"0":{"384":1},"2":{"68":1,"96":1,"100":1,"123":1,"138":1,"153":1,"162":1,"186":1,"217":1,"226":3,"257":1,"280":1,"312":1,"318":1,"326":1,"331":1,"344":1,"372":1,"373":1,"379":1,"401":1,"418":2,"425":1,"457":1,"461":1,"464":1,"492":1,"570":1}}],["получится",{"2":{"26":1,"96":1,"305":1,"471":1,"491":1}}],["получай",{"2":{"377":1}}],["получат",{"2":{"384":1}}],["получатель",{"2":{"349":1}}],["получателя",{"2":{"317":3,"373":1}}],["получателей",{"2":{"316":1}}],["получателе",{"2":{"255":1}}],["получаться",{"2":{"80":1}}],["получать",{"2":{"11":1,"118":1,"124":1,"194":2,"252":1,"257":1,"270":3,"336":1,"344":1,"347":1,"349":1,"354":1,"414":1,"462":1,"491":1,"492":1}}],["получаем",{"2":{"107":1,"121":1,"132":1,"179":1,"217":1,"255":1,"319":1,"326":1,"338":1,"354":1,"371":1,"377":1,"420":1,"462":1,"475":1}}],["получаете",{"2":{"331":1,"425":1}}],["получается",{"2":{"17":1,"155":1,"226":1,"288":1,"326":1,"424":1,"437":1,"446":1,"483":1,"492":4,"538":1}}],["получает",{"2":{"3":1,"123":1,"125":1,"142":1,"251":1,"252":1,"263":1,"264":1,"319":1,"320":1,"324":1,"326":4,"332":2,"333":1,"349":1,"362":1,"364":1,"365":1,"368":1,"376":1,"410":1,"414":2,"418":1,"455":1,"457":1,"492":1}}],["получают",{"2":{"96":1,"405":2}}],["получая",{"2":{"11":1,"310":1,"463":1}}],["полем",{"2":{"217":1,"317":1}}],["полезную",{"2":{"339":1}}],["полезная",{"2":{"474":1}}],["полезна",{"2":{"272":1,"423":1}}],["полезные",{"0":{"443":1},"1":{"444":1,"445":1,"446":1},"2":{"431":1,"441":1,"448":1,"483":1,"491":1,"579":1}}],["полезным",{"2":{"218":1,"325":1,"326":1,"359":1,"428":1,"448":1}}],["полезных",{"2":{"212":1,"272":1,"441":1}}],["полезный",{"2":{"162":1,"252":1}}],["полезны",{"2":{"157":1,"174":1,"320":1,"322":1,"331":1,"383":1,"401":1,"479":1,"492":1}}],["полезного",{"2":{"343":1,"441":1}}],["полезной",{"2":{"337":1,"347":1,"371":2,"424":1}}],["полезное",{"2":{"207":1,"573":1}}],["полезность",{"2":{"167":1,"479":1}}],["полезно",{"2":{"3":1,"4":1,"23":1,"95":1,"106":1,"153":1,"318":1,"325":1,"375":1,"404":1,"472":1,"486":1}}],["полезен",{"2":{"142":1,"304":1,"314":1,"316":1,"324":1,"354":1,"412":1,"491":1,"492":1}}],["поле",{"2":{"50":1,"51":2,"217":1,"226":2,"231":1,"279":1,"332":1,"343":1,"349":1,"359":2,"362":1,"371":2,"375":3,"450":1,"462":1,"482":1}}],["полей",{"2":{"47":1,"50":2,"51":1,"159":1,"223":1,"272":1,"275":1,"343":1,"371":1}}],["полях",{"2":{"51":1}}],["полям",{"0":{"51":1},"2":{"272":1,"412":1}}],["полями",{"2":{"17":1,"217":1,"225":1,"226":1,"272":1,"339":1,"343":2,"372":1}}],["поля",{"2":{"16":1,"17":1,"18":1,"47":1,"50":2,"51":1,"169":1,"187":1,"223":1,"226":3,"275":4,"311":1,"317":1,"332":1,"343":2,"359":1,"365":1,"372":1,"413":1,"482":1,"508":1}}],["полна",{"2":{"157":1}}],["полную",{"2":{"145":1,"214":1,"453":1}}],["полные",{"2":{"214":1}}],["полным",{"2":{"145":1,"299":1,"337":1,"368":1,"404":1,"407":1}}],["полный",{"2":{"137":1,"156":1,"169":1,"233":1,"243":1,"263":1,"277":1,"294":1,"359":1,"363":1,"368":3,"450":1,"457":1,"461":1,"462":1,"469":1}}],["полноты",{"2":{"394":1}}],["полноэкранном",{"2":{"273":1}}],["полного",{"2":{"273":1,"342":1,"417":1,"421":1}}],["полно",{"2":{"124":1,"490":1,"546":1}}],["полному",{"2":{"51":1,"217":1}}],["полное",{"2":{"50":1,"100":1,"142":1,"200":1,"205":1,"270":1,"273":1,"349":1}}],["полностью",{"2":{"26":1,"127":1,"135":1,"155":1,"183":1,"189":1,"211":1,"222":1,"226":1,"230":1,"280":1,"331":1,"349":1,"354":1,"451":1,"454":1,"522":1,"590":1}}],["полноценную",{"2":{"538":1}}],["полноценного",{"2":{"318":1}}],["полноценное",{"2":{"124":1}}],["полноценной",{"2":{"124":1}}],["полноценных",{"2":{"430":1,"448":1}}],["полноценным",{"2":{"77":1}}],["полноценный",{"2":{"12":1,"245":1}}],["полноценная",{"2":{"12":1,"418":1}}],["полней",{"2":{"4":1}}],["подтвердили",{"2":{"462":1}}],["подтверждающих",{"2":{"453":1}}],["подтверждать",{"2":{"377":1}}],["подтверждается",{"2":{"23":1,"152":1}}],["подтвержден",{"2":{"375":1}}],["подтверждение",{"0":{"202":1}}],["подтверждения",{"2":{"166":1,"183":1,"195":1,"202":1,"375":1}}],["подтверждении",{"2":{"142":1}}],["поделился",{"2":{"441":1}}],["поделиться",{"2":{"191":1,"247":2,"270":1,"363":1,"433":1}}],["подмаршрутов",{"2":{"363":1}}],["подмаршруты",{"2":{"363":1,"365":1}}],["подмена",{"0":{"201":1}}],["поднимают",{"2":{"405":1}}],["подниматься",{"2":{"255":1}}],["поднабор",{"2":{"178":1}}],["подумайте",{"2":{"462":1}}],["подумаем",{"2":{"246":1}}],["подумав",{"2":{"218":1}}],["подумать",{"2":{"4":1,"176":1,"193":1}}],["подводит",{"2":{"392":1}}],["подвохом",{"0":{"194":1},"2":{"194":1}}],["подвижные",{"2":{"320":1}}],["подвесить",{"2":{"325":1}}],["подвергнуть",{"2":{"218":1}}],["подведут",{"2":{"160":1}}],["подведение",{"0":{"153":1,"205":1,"219":1,"241":1,"266":1,"281":1,"327":1,"350":1,"378":1,"422":1,"477":1}}],["подгружается",{"2":{"492":1}}],["подгруппа",{"2":{"186":2}}],["подгруппе",{"2":{"178":1}}],["подготовиться",{"2":{"403":1}}],["подготовились",{"2":{"214":1}}],["подготовим",{"2":{"207":1}}],["подготовлены",{"2":{"210":1,"234":1}}],["подготовки",{"2":{"141":1,"282":1,"372":1,"491":1}}],["подготовка",{"2":{"65":1}}],["подпапкой",{"2":{"261":1}}],["подпапка",{"2":{"143":1}}],["подписанных",{"2":{"410":1}}],["подписанным",{"2":{"196":1}}],["подписи",{"2":{"371":3}}],["подпись",{"2":{"371":1}}],["подписчиков",{"2":{"314":1}}],["подписывает",{"2":{"408":1}}],["подписываться",{"2":{"408":1}}],["подписываются",{"2":{"314":1}}],["подписывания",{"2":{"123":1}}],["подписок",{"2":{"196":1}}],["подписки",{"2":{"194":1,"196":1,"410":1}}],["поддиректории",{"2":{"431":1,"437":1}}],["поддиректориями",{"2":{"424":1}}],["подделки",{"2":{"371":1}}],["поддержании",{"2":{"431":1,"448":1}}],["поддерживоемость",{"2":{"429":1}}],["поддерживаются",{"2":{"446":1}}],["поддерживают",{"2":{"270":1,"577":1,"591":1}}],["поддерживающих",{"2":{"138":1,"377":1}}],["поддерживая",{"2":{"232":1}}],["поддерживаемость",{"2":{"428":1,"448":2,"490":1}}],["поддерживаемый",{"2":{"413":1}}],["поддерживаемых",{"2":{"169":1,"275":1,"371":1}}],["поддерживает",{"2":{"287":1,"341":1,"522":1}}],["поддерживается",{"2":{"89":1,"225":1,"226":2,"258":1,"439":1,"481":1,"589":1}}],["поддерживайте",{"2":{"166":1}}],["поддерживаться",{"2":{"450":1,"484":1}}],["поддерживать",{"2":{"69":1,"133":1,"262":1,"288":1,"318":1,"331":1,"475":1,"483":1}}],["поддержкой",{"2":{"440":1,"450":1,"483":1}}],["поддержки",{"2":{"196":1,"375":1,"412":1,"446":2,"491":1,"506":1,"570":1}}],["поддержку",{"2":{"96":1,"208":1,"288":1}}],["поддержка",{"0":{"74":1},"2":{"67":1,"74":1,"89":2,"157":2,"417":3,"450":2}}],["поддается",{"2":{"292":1,"492":1}}],["поддавайтесь",{"2":{"287":1}}],["поддомена",{"2":{"152":1}}],["поддомен",{"2":{"142":2,"143":1}}],["поддомены",{"2":{"142":3,"149":1,"152":1,"425":1}}],["поддоменов",{"2":{"142":2,"154":1}}],["подарила",{"2":{"492":1}}],["подарочные",{"2":{"4":1}}],["подавляющее",{"2":{"368":1}}],["подавление",{"2":{"175":1}}],["податлив",{"2":{"341":1}}],["подает",{"2":{"253":1}}],["подальше",{"2":{"105":1}}],["подчиняется",{"2":{"362":1}}],["подчинение",{"2":{"2":1}}],["подчеркнуть",{"2":{"290":1}}],["подчеркивания",{"2":{"236":1}}],["подчеркивании",{"2":{"101":1}}],["подчеркивает",{"2":{"222":1}}],["подчеркивающим",{"2":{"171":1}}],["подразумевает",{"2":{"211":1,"222":1,"286":1,"451":1,"466":1}}],["подразумевается",{"2":{"157":1,"492":1,"541":1}}],["подразумеваю",{"2":{"96":1}}],["подробней",{"2":{"588":1}}],["подробнее",{"2":{"123":1,"142":1,"232":1,"299":1,"305":1,"369":1,"371":1,"440":1,"513":1}}],["подробны",{"2":{"477":1}}],["подробные",{"2":{"362":1}}],["подробный",{"2":{"280":1}}],["подробную",{"2":{"135":1,"164":1,"165":1,"212":1}}],["подробности",{"2":{"377":1,"433":1}}],["подробностями",{"2":{"362":1}}],["подробностей",{"2":{"294":1}}],["подробное",{"2":{"279":1}}],["подробному",{"2":{"249":1}}],["подробной",{"2":{"136":1}}],["подробно",{"2":{"127":1,"128":1,"132":1,"209":1,"225":2,"226":1,"243":1,"247":1,"254":1,"257":1,"259":1,"264":1,"266":1,"268":1,"312":1,"320":1,"321":1,"354":1,"368":1,"418":1,"422":1,"437":1,"561":1}}],["подробная",{"2":{"44":1,"82":1,"125":1}}],["подзадачи",{"2":{"80":1}}],["подключить",{"2":{"359":1,"425":1,"520":1}}],["подключена",{"2":{"537":1}}],["подключено",{"2":{"515":1}}],["подключены",{"2":{"281":1}}],["подключении",{"2":{"377":1,"513":1}}],["подключения",{"2":{"260":1,"345":1,"377":1,"431":1,"475":1,"481":2,"531":1,"542":1,"576":1}}],["подключение",{"0":{"520":1,"524":1,"530":1},"2":{"41":1,"121":1,"377":2,"511":1,"524":1,"528":1,"538":3,"572":1}}],["подключенными",{"2":{"431":1}}],["подключенных",{"2":{"142":1}}],["подключенный",{"2":{"142":1}}],["подключаются",{"2":{"437":1,"525":1}}],["подключаемые",{"2":{"377":1,"577":1}}],["подключаемый",{"2":{"260":1}}],["подключаем",{"2":{"128":1,"145":1}}],["подключаться",{"2":{"515":1}}],["подключать",{"2":{"12":1,"96":1,"437":1,"450":1,"481":1,"484":2,"573":1}}],["подстановочные",{"2":{"472":1}}],["подскажите",{"0":{"442":1}}],["подсказку",{"2":{"277":2}}],["подсказкой",{"2":{"172":1}}],["подсказка",{"0":{"277":1},"2":{"172":1}}],["подсказками",{"2":{"107":1}}],["подсказки",{"0":{"172":1},"2":{"172":1,"277":1}}],["подсказок",{"2":{"160":1}}],["подсказать",{"2":{"98":1}}],["подсоединение",{"2":{"441":1}}],["подсоединяться",{"2":{"40":1}}],["подсчет",{"2":{"247":1}}],["подсегмент",{"2":{"142":1}}],["подсвечивать",{"2":{"112":1}}],["подсветкой",{"2":{"89":1}}],["подсистему",{"2":{"3":1,"69":1}}],["подсистем",{"2":{"3":1,"286":1,"323":1,"410":1}}],["подсистемы",{"0":{"4":1},"2":{"2":2,"3":1,"4":1,"7":1,"34":3,"41":2,"286":1}}],["подобие",{"2":{"483":1}}],["подобранных",{"2":{"441":1}}],["подобной",{"2":{"362":1}}],["подобно",{"2":{"231":1,"405":1,"472":1,"475":1}}],["подобному",{"2":{"410":1}}],["подобном",{"2":{"226":1}}],["подобное",{"2":{"34":1,"96":1,"290":1,"305":1,"357":1,"413":1}}],["подобную",{"2":{"210":1,"421":1}}],["подобная",{"2":{"203":1}}],["подобными",{"2":{"176":1}}],["подобный",{"2":{"124":1,"125":1,"322":1,"490":1}}],["подобные",{"2":{"96":1,"193":1,"342":1,"476":1,"492":1}}],["подобных",{"2":{"88":1,"96":1,"98":1,"217":1,"294":1}}],["подождать",{"2":{"252":1}}],["подождите",{"2":{"226":1}}],["подойдут",{"2":{"341":1}}],["подойдет",{"2":{"145":1}}],["подойти",{"2":{"245":1,"376":1,"456":1}}],["подошли",{"2":{"219":1}}],["подошел",{"2":{"39":1}}],["подозрительные",{"2":{"123":1}}],["подходу",{"2":{"222":1,"245":1,"375":1}}],["подходов",{"2":{"222":1,"249":1,"260":1,"323":1,"375":1,"418":1,"422":1,"453":1,"459":1}}],["подходом",{"2":{"179":1,"189":1,"265":1,"291":1,"433":1,"541":1}}],["подходе",{"2":{"189":1,"243":1,"252":1,"376":1,"430":1,"448":1,"455":1}}],["подходы",{"2":{"155":1,"226":1,"362":1,"382":1,"403":1,"422":1,"451":1,"466":1,"482":1}}],["подходят",{"2":{"142":2,"403":1,"431":1,"448":1,"450":1}}],["подходящая",{"0":{"449":1},"2":{"431":2,"448":1}}],["подходящей",{"2":{"339":1}}],["подходящее",{"2":{"246":1,"249":1}}],["подходящем",{"2":{"124":1}}],["подходящую",{"2":{"104":1,"107":1}}],["подходящим",{"2":{"186":1,"220":1}}],["подходящие",{"2":{"107":1}}],["подходящий",{"2":{"27":1,"96":1,"198":1}}],["подходящих",{"2":{"12":1}}],["подход",{"2":{"135":2,"176":1,"183":1,"189":1,"213":1,"243":1,"246":2,"258":1,"261":1,"266":1,"288":1,"294":1,"306":1,"309":3,"310":2,"312":1,"319":2,"323":1,"326":1,"334":2,"355":1,"370":1,"382":1,"410":2,"412":3,"415":2,"417":1,"419":2,"420":1,"428":1,"431":2,"448":3,"457":1,"462":1,"466":1,"490":1,"492":1}}],["подходах",{"2":{"456":1}}],["подхода",{"2":{"114":1,"222":1,"226":1,"252":2,"270":1,"296":1,"307":1,"354":1,"376":1,"382":1,"412":1,"419":1,"458":2}}],["подходите",{"2":{"283":1}}],["подходит",{"2":{"63":1,"245":1,"246":1,"326":1,"344":1,"377":1,"412":2,"431":1,"441":1,"444":1,"448":1,"482":1,"483":1,"492":2}}],["подхедер",{"2":{"29":1}}],["подберем",{"2":{"27":1}}],["подбора",{"2":{"9":1}}],["под",{"2":{"4":1,"85":1,"96":1,"127":1,"157":1,"159":1,"166":1,"172":1,"185":1,"201":1,"203":2,"207":1,"208":1,"259":1,"263":1,"270":1,"277":1,"279":1,"288":1,"315":1,"354":1,"418":2,"437":1,"454":1,"457":1,"464":1,"479":1,"482":1,"506":1,"533":1,"541":1,"542":1,"561":1}}],["прыгания",{"2":{"550":1}}],["пр",{"2":{"440":1}}],["прямая",{"2":{"405":1}}],["прямую",{"2":{"369":1}}],["прямым",{"2":{"189":1,"450":1}}],["прямых",{"2":{"179":1,"313":1,"405":1}}],["прямого",{"2":{"275":1,"405":1}}],["прямоугольниками",{"2":{"246":1}}],["прямое",{"2":{"145":1,"198":1,"310":1}}],["прямолинейна",{"2":{"96":1}}],["прямо",{"2":{"40":1,"145":1,"201":1,"441":1,"541":1}}],["прямой",{"2":{"20":1,"143":1,"191":1,"213":1,"254":1,"508":1}}],["прятать",{"2":{"4":1}}],["препроцессора",{"2":{"538":1}}],["преподавательской",{"2":{"65":1}}],["презентационный",{"2":{"490":1}}],["презентационного",{"2":{"335":2}}],["прекрасный",{"2":{"491":1}}],["прекрасно",{"2":{"462":1,"475":1}}],["прекратит",{"2":{"178":1}}],["прелоадер",{"2":{"433":2,"578":1}}],["прервет",{"2":{"343":1}}],["прервана",{"2":{"176":1}}],["прерывая",{"2":{"458":1}}],["прерывать",{"2":{"458":1}}],["прерывается",{"2":{"326":1}}],["прерывании",{"2":{"320":1}}],["преследуете",{"2":{"223":1}}],["преследовали",{"2":{"186":1}}],["претенциозной",{"2":{"446":1}}],["претензий",{"2":{"9":1}}],["претерпела",{"2":{"221":1}}],["преобладающим",{"2":{"191":1}}],["преобразуется",{"2":{"259":1,"362":1}}],["преобразует",{"2":{"131":1,"343":1}}],["преобразовать",{"2":{"342":1}}],["преобразованным",{"2":{"319":1}}],["преобразованы",{"2":{"316":1}}],["преобразовано",{"2":{"216":1}}],["преобразованию",{"2":{"266":1}}],["преобразование",{"2":{"142":2,"370":1}}],["преобразования",{"2":{"47":1,"89":1,"224":1,"319":1}}],["преобразовывать",{"2":{"41":1,"96":1,"318":1,"319":1}}],["пренебрегали",{"2":{"157":1}}],["превышает",{"2":{"331":1}}],["превзошла",{"2":{"258":1}}],["превзойти",{"2":{"226":1}}],["превосходящие",{"2":{"157":1}}],["превращения",{"2":{"272":1,"278":1}}],["превращает",{"2":{"268":1}}],["превращается",{"2":{"225":1}}],["превращая",{"2":{"207":1}}],["превращать",{"2":{"20":1,"281":1}}],["превратим",{"2":{"324":1}}],["превратилось",{"2":{"320":1}}],["превратился",{"2":{"291":1}}],["превратится",{"2":{"96":1,"233":1}}],["превратить",{"2":{"29":1,"270":1,"277":1,"325":1,"361":1}}],["превратятся",{"2":{"226":1}}],["прежнему",{"2":{"186":1,"258":1,"265":2,"270":1,"354":1}}],["прежним",{"2":{"126":1,"221":1}}],["прежде",{"2":{"155":1,"157":1,"166":1,"167":2,"210":1,"222":1,"252":1,"326":1,"331":1,"343":1,"347":1,"356":1,"360":1,"361":1,"365":1,"377":1,"415":1,"461":1,"462":1,"472":1}}],["префикса",{"2":{"343":1}}],["префиксом",{"2":{"258":1}}],["префиксируем",{"2":{"257":1}}],["префикс",{"2":{"121":2,"228":1,"254":1}}],["преимуществами",{"2":{"222":2,"450":1}}],["преимущества",{"2":{"131":1,"138":1,"206":1,"270":2,"282":1,"288":1,"312":1,"326":1,"350":1,"351":1,"354":2,"355":1,"379":1,"456":1,"463":2}}],["преимущественно",{"2":{"126":1,"450":1,"482":1}}],["преимуществ",{"2":{"51":1,"210":1,"213":1,"222":1,"226":2,"252":1,"270":2,"281":1,"335":1,"354":1,"411":1,"412":1,"417":2,"454":2}}],["преимуществом",{"2":{"224":1,"225":1}}],["преимущество",{"2":{"17":1,"312":1,"331":1,"431":1,"448":1}}],["предназначались",{"2":{"491":1}}],["предназначена",{"2":{"383":1}}],["предназначен",{"2":{"326":1,"354":1}}],["предназначенная",{"2":{"280":1}}],["предназначенных",{"2":{"221":1}}],["предназначенный",{"2":{"176":1}}],["предназначено",{"2":{"167":1}}],["пределами",{"2":{"418":2,"450":1,"482":1}}],["пределы",{"2":{"179":1,"234":2,"418":1}}],["преданность",{"2":{"387":1}}],["предисловие",{"0":{"382":1,"502":1},"1":{"503":1}}],["предшествующий",{"2":{"362":1}}],["предвидеть",{"2":{"218":1}}],["предварительных",{"2":{"476":1}}],["предварительный",{"2":{"210":1,"491":1}}],["предварительное",{"2":{"383":1}}],["предварительного",{"2":{"209":1,"219":1}}],["предварительно",{"2":{"199":1,"491":2,"492":1}}],["предварительной",{"2":{"172":1,"178":1,"359":1}}],["предприятий",{"2":{"354":1}}],["предписаны",{"2":{"240":1}}],["предписано",{"2":{"234":1}}],["предписанный",{"2":{"225":1}}],["предписывает",{"2":{"222":1,"224":1,"226":1,"294":1,"325":1}}],["предписывается",{"2":{"222":1}}],["предписывают",{"2":{"210":1,"222":1}}],["предпочесть",{"2":{"427":1,"448":1}}],["предпочтение",{"2":{"362":1}}],["предпочтительнее",{"2":{"326":1}}],["предпочтительно",{"2":{"105":1,"230":1}}],["предпосылкам",{"2":{"357":1}}],["предположим",{"2":{"305":1,"363":1,"376":1}}],["предполагалось",{"2":{"319":1}}],["предполагают",{"2":{"272":1}}],["предполагающая",{"2":{"202":1}}],["предполагает",{"2":{"384":1,"453":1,"476":1}}],["предполагается",{"2":{"270":2,"375":1,"453":1}}],["предполагаемой",{"2":{"203":1}}],["предполагая",{"2":{"151":1}}],["предупредить",{"2":{"175":1,"288":1}}],["предусмотреть",{"2":{"370":1}}],["предусмотренный",{"2":{"252":2}}],["предусмотренные",{"2":{"169":1,"399":1}}],["предусмотрены",{"2":{"227":1}}],["предусмотрен",{"2":{"152":1,"170":1,"176":1,"257":1,"418":1}}],["предусмотрена",{"2":{"64":1,"252":1,"357":1}}],["предусматривает",{"2":{"69":1,"218":1}}],["предусматривают",{"2":{"41":1}}],["предстоит",{"2":{"222":1,"265":1}}],["представительное",{"2":{"263":1}}],["представить",{"2":{"186":1,"208":1,"224":1,"245":1,"246":1,"255":1,"262":1,"264":1,"318":1,"323":1,"335":1,"363":1,"376":1,"408":1,"451":1}}],["представим",{"2":{"26":1,"288":1,"320":1,"326":1,"329":2}}],["представьте",{"2":{"142":1,"155":1,"450":1}}],["представлен",{"0":{"381":1},"2":{"359":1,"393":1,"455":1}}],["представлено",{"2":{"288":1,"331":1,"375":1,"400":1}}],["представлены",{"2":{"203":1,"389":1,"394":1,"396":1,"398":1,"399":1,"506":1}}],["представленная",{"2":{"183":1,"315":1}}],["представленную",{"2":{"167":1}}],["представленные",{"2":{"451":1}}],["представленных",{"2":{"158":1,"371":1,"455":1}}],["представленный",{"2":{"147":1,"179":1,"404":1}}],["представлена",{"2":{"159":1,"324":1,"395":1}}],["представлений",{"2":{"359":1,"363":1,"365":1,"371":1}}],["представлении",{"2":{"184":1,"365":1}}],["представлением",{"2":{"365":1}}],["представление",{"2":{"4":2,"11":2,"68":1,"139":1,"155":1,"157":1,"176":1,"178":1,"205":1,"210":1,"221":1,"224":2,"247":1,"255":1,"259":1,"262":1,"270":1,"286":1,"288":1,"289":1,"314":1,"316":1,"319":1,"321":1,"325":1,"331":3,"335":1,"337":1,"347":1,"365":1,"371":1,"375":1,"464":1}}],["представления",{"0":{"363":1},"1":{"364":1,"365":1},"2":{"3":2,"17":1,"157":1,"182":1,"217":1,"264":1,"272":1,"273":1,"277":1,"331":1,"379":1,"455":1,"482":1}}],["представляем",{"2":{"354":1}}],["представляемых",{"2":{"248":1}}],["представляется",{"2":{"195":1,"348":1}}],["представляет",{"2":{"142":1,"189":1,"194":1,"198":1,"210":2,"222":1,"225":1,"264":1,"273":1,"338":1,"344":1,"348":1,"354":1,"371":1,"382":1,"389":1,"418":1,"462":1,"545":1}}],["представлял",{"2":{"221":1}}],["представляющая",{"2":{"273":1,"274":2,"359":1}}],["представляющий",{"2":{"210":1,"251":1,"461":1}}],["представляются",{"2":{"165":1,"170":1,"175":1,"178":1}}],["представляют",{"2":{"6":1,"163":1,"169":1,"170":1,"181":1,"205":1,"224":1,"418":1,"430":1,"448":2}}],["представлять",{"2":{"23":1,"77":1,"217":1,"246":1,"320":1,"450":1}}],["предсказания",{"2":{"163":1}}],["предыдущую",{"2":{"491":1}}],["предыдущая",{"2":{"213":1,"352":1}}],["предыдущее",{"2":{"458":1}}],["предыдущей",{"2":{"264":1,"275":1,"279":1,"322":1,"331":1,"464":1}}],["предыдущего",{"2":{"161":1,"189":1,"268":1,"272":1,"365":1,"413":1}}],["предыдущему",{"2":{"466":1}}],["предыдущем",{"2":{"142":1,"160":1,"178":1,"190":1,"191":1,"257":2,"277":2,"279":1,"309":1,"317":1,"331":1,"362":1,"364":1,"365":1,"368":1,"374":1,"375":2,"411":1}}],["предыдущих",{"2":{"207":2,"210":1,"225":1,"254":1,"337":1,"352":1,"362":1,"375":1,"376":1,"403":1,"411":1,"417":1}}],["предыдущими",{"2":{"210":1,"452":1}}],["предыдущим",{"2":{"142":1}}],["предыдущие",{"2":{"141":1,"233":1,"458":1,"469":1}}],["предыдущий",{"2":{"129":1,"149":1,"233":1,"277":1,"278":1,"306":1,"314":1,"320":1,"326":1,"332":1,"341":1,"462":1}}],["предметную",{"2":{"448":1}}],["предмет",{"2":{"124":1,"275":1}}],["предмета",{"2":{"65":1,"160":1}}],["предотвратить",{"2":{"277":1,"290":1}}],["предотвращает",{"2":{"277":1}}],["предотвращая",{"2":{"225":1}}],["предотвращать",{"2":{"204":1}}],["предотвращение",{"0":{"198":1}}],["предотвращением",{"2":{"96":1}}],["предотвращения",{"2":{"176":1,"349":1}}],["предостережений",{"2":{"418":1}}],["предостережение",{"2":{"176":1,"287":1,"292":1}}],["предоставили",{"2":{"255":1}}],["предоставило",{"2":{"214":1}}],["предоставить",{"2":{"255":1,"270":1,"279":1,"309":1,"432":1,"459":1}}],["предоставит",{"2":{"215":1,"249":1,"262":1,"277":1,"348":1,"408":1,"465":1,"468":1}}],["предоставленные",{"2":{"384":1}}],["предоставленного",{"2":{"263":1}}],["предоставленное",{"2":{"257":1}}],["предоставлена",{"2":{"310":1}}],["предоставление",{"2":{"167":1,"335":1}}],["предоставления",{"2":{"125":1,"183":1,"197":1,"204":1,"205":1,"255":1,"260":1,"369":1,"453":1}}],["предоставляйте",{"2":{"432":1}}],["предоставляющая",{"2":{"475":1}}],["предоставляющую",{"2":{"369":1}}],["предоставляющие",{"2":{"374":1}}],["предоставляющий",{"2":{"369":1}}],["предоставляющих",{"2":{"240":1,"323":1}}],["предоставляются",{"2":{"170":1,"227":1,"305":1,"460":1,"475":1}}],["предоставляют",{"2":{"124":1,"142":1,"152":1,"211":1,"221":1,"222":1,"289":1,"298":1,"335":1,"369":2,"376":1,"418":3,"425":1,"475":1,"490":1}}],["предоставляя",{"2":{"145":1,"335":1,"462":1}}],["предоставляемой",{"2":{"350":1,"477":1}}],["предоставляемое",{"2":{"252":1}}],["предоставляемого",{"2":{"178":1,"255":1}}],["предоставляемых",{"2":{"403":1,"413":1,"418":1,"451":1,"453":1}}],["предоставляемыми",{"2":{"397":1,"422":1}}],["предоставляемым",{"2":{"335":1}}],["предоставляемый",{"2":{"212":1,"277":1,"343":1}}],["предоставляемые",{"2":{"211":1,"365":1,"417":1,"454":1,"477":1}}],["предоставляемую",{"2":{"152":1}}],["предоставляем",{"2":{"145":1,"255":1,"263":1,"420":1}}],["предоставляемая",{"2":{"132":1,"152":1}}],["предоставляет",{"2":{"124":4,"125":1,"142":1,"152":1,"210":1,"213":1,"221":1,"226":1,"233":2,"234":1,"255":1,"259":1,"260":1,"279":1,"313":1,"318":3,"326":2,"331":1,"332":2,"341":1,"344":1,"360":1,"361":1,"365":3,"368":1,"369":2,"370":1,"408":1,"413":2,"418":1,"419":1,"430":1,"448":1,"456":1,"460":1,"464":1,"475":1}}],["предоставляется",{"2":{"58":1,"125":1,"145":2,"234":1,"342":1,"418":1}}],["предоставляться",{"2":{"262":1}}],["предоставлять",{"2":{"125":1,"130":1,"183":1,"252":1,"255":1,"270":2,"277":1,"289":1,"450":1}}],["предъявляемых",{"2":{"69":1}}],["предложенное",{"2":{"209":1}}],["предложенных",{"2":{"98":1}}],["предложено",{"2":{"209":1,"474":1}}],["предложений",{"2":{"482":1}}],["предложением",{"2":{"204":1,"255":1,"418":1}}],["предложение",{"2":{"195":1}}],["предложения",{"2":{"175":1,"199":1,"230":1}}],["предложит",{"2":{"277":1}}],["предложить",{"2":{"222":1,"270":1,"323":1,"361":1,"500":1}}],["предложите",{"2":{"160":1}}],["предложил",{"2":{"62":1,"491":1,"492":1}}],["предлагайте",{"2":{"166":2}}],["предлагаемого",{"2":{"222":1}}],["предлагаемый",{"2":{"10":1}}],["предлагается",{"2":{"197":1,"212":1,"418":1}}],["предлагает",{"2":{"39":1,"40":1,"101":1,"187":1,"209":1,"212":1,"214":1,"222":1,"224":1,"255":1,"272":1,"335":1,"418":1,"464":2,"467":1}}],["предлагающий",{"2":{"213":1}}],["предлагающих",{"2":{"124":1,"203":1}}],["предлагают",{"2":{"152":1,"169":1,"180":1,"476":1,"490":1,"491":1}}],["предлагаю",{"2":{"4":1,"126":1,"315":1}}],["прагматичный",{"2":{"291":1}}],["прайм",{"2":{"160":1}}],["практичности",{"2":{"344":1}}],["практическое",{"2":{"491":1}}],["практической",{"2":{"207":1,"283":1}}],["практического",{"2":{"166":1}}],["практическим",{"2":{"352":1}}],["практических",{"2":{"207":1,"208":1,"352":1}}],["практически",{"2":{"32":1,"133":1,"145":1,"155":2,"175":1,"196":1,"217":2,"249":1,"417":1,"454":1}}],["практикой",{"2":{"235":1,"243":1,"255":1,"362":1,"364":1,"446":1,"450":1}}],["практикующие",{"2":{"453":1}}],["практику",{"2":{"213":1,"294":1}}],["практиками",{"2":{"491":1}}],["практиках",{"2":{"433":1}}],["практика",{"2":{"197":1,"225":1,"272":1,"349":1,"450":1,"474":1,"476":1}}],["практике",{"2":{"133":1,"175":1,"176":1,"193":1,"209":1,"222":1,"225":1,"275":1,"280":1,"284":1,"288":1,"291":1,"294":1,"310":1,"323":1,"324":1,"352":1,"405":2,"417":1,"418":1,"419":1,"453":1,"455":1,"475":1}}],["практик",{"2":{"78":1,"207":1,"288":1,"293":1,"310":1,"491":1,"501":1,"541":2,"542":1}}],["практики",{"0":{"380":1,"433":1},"1":{"381":1,"382":1,"383":1,"384":1,"385":1,"386":1,"387":1,"434":1,"435":1,"436":1},"2":{"9":1,"77":1,"123":1,"218":2,"221":1,"290":1,"293":1,"294":1,"356":1,"476":1,"490":1,"491":1,"541":1,"542":1}}],["прав",{"2":{"369":1,"471":1}}],["правая",{"2":{"441":1}}],["права",{"2":{"123":1,"142":1,"375":1}}],["правой",{"2":{"172":1,"275":1}}],["правом",{"2":{"158":1,"160":1,"164":1,"280":2}}],["право",{"2":{"123":3}}],["правками",{"2":{"100":1}}],["правительственных",{"2":{"142":1,"186":1}}],["править",{"2":{"89":1}}],["правильных",{"2":{"491":1}}],["правильным",{"2":{"179":1,"216":1,"291":1,"405":1,"462":1}}],["правильное",{"2":{"462":1}}],["правильность",{"2":{"410":1}}],["правильном",{"2":{"186":1,"331":1}}],["правильно",{"2":{"122":1,"197":1,"218":1,"225":1,"272":1,"276":2,"324":1,"332":1,"342":1,"457":1}}],["правильного",{"2":{"101":1}}],["правил",{"0":{"166":1},"2":{"158":1,"166":2,"270":1}}],["правилах",{"2":{"166":1,"186":1}}],["правила",{"2":{"68":1,"166":2,"211":1,"221":1,"222":1,"225":1,"284":1,"321":1,"482":1}}],["правило",{"2":{"2":1,"20":1,"68":1,"96":1,"147":1,"159":1,"175":1,"186":2,"210":1,"291":1,"301":1,"368":1,"384":1,"405":1,"453":1}}],["правда",{"2":{"23":1,"324":1,"453":1}}],["проехать",{"2":{"491":1}}],["проекты",{"2":{"357":3,"384":1,"467":2,"491":1}}],["проекту",{"2":{"96":1,"207":1,"454":1,"467":1}}],["проектов",{"0":{"448":1},"2":{"96":1,"138":2,"208":1,"258":1,"294":1,"357":2,"391":1,"417":1,"426":1,"430":1,"431":2,"440":1,"448":3,"464":1,"466":2,"467":1,"475":1,"482":1,"490":1}}],["проектом",{"2":{"80":1,"207":1,"208":1,"391":1,"431":1,"475":1}}],["проекте",{"0":{"533":1},"2":{"62":1,"95":1,"96":1,"121":1,"209":1,"213":1,"214":1,"284":2,"365":1,"424":1,"431":1,"440":1,"450":1,"451":1,"453":1,"454":1,"455":1,"464":1,"467":1,"490":1,"501":1,"537":1}}],["проектированию",{"2":{"382":1}}],["проектирование",{"2":{"158":1,"162":1,"320":1}}],["проектирования",{"0":{"158":1,"163":1,"167":1,"249":1,"283":1,"284":1,"285":1,"294":1,"380":1,"390":1},"1":{"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"284":1,"285":1,"286":2,"287":2,"288":2,"289":2,"290":2,"291":2,"292":2,"293":2,"294":1,"295":1,"296":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"326":1,"327":1,"328":1,"381":1,"382":1,"383":1,"384":1,"385":1,"386":1,"387":1},"2":{"41":1,"112":1,"155":1,"158":1,"159":1,"162":1,"166":1,"186":1,"193":1,"207":1,"211":2,"215":2,"221":2,"241":1,"243":3,"245":1,"246":1,"248":1,"249":1,"251":1,"254":1,"257":1,"258":1,"260":1,"266":1,"283":1,"284":1,"285":1,"293":2,"294":2,"299":1,"312":1,"314":1,"327":1,"328":1,"329":2,"334":1,"335":2,"336":2,"337":1,"350":1,"351":1,"382":3,"383":2,"384":1,"390":1,"395":1,"405":1,"408":1,"419":1,"455":1}}],["проектировании",{"2":{"2":1}}],["проект",{"0":{"61":1,"489":1,"526":1},"1":{"527":1,"528":1},"2":{"4":1,"39":1,"58":1,"63":2,"69":1,"77":1,"96":1,"207":1,"208":1,"209":8,"210":2,"211":1,"213":2,"264":1,"314":1,"327":1,"344":1,"355":1,"362":1,"391":1,"404":1,"413":2,"424":2,"431":2,"440":2,"448":1,"451":1,"455":1,"464":1,"467":2,"483":1,"487":1,"535":2,"561":1}}],["проектами",{"2":{"260":1,"265":1,"357":1,"533":1}}],["проектах",{"2":{"96":1,"207":2,"213":1,"240":1,"249":1,"259":1,"294":1,"424":1,"431":1,"463":1,"477":1,"479":1,"481":1,"515":1}}],["проекта",{"0":{"4":1,"9":1,"20":1,"58":1,"75":1,"76":1,"77":1,"119":1,"207":1,"209":1,"261":1,"391":1,"447":1,"449":1,"511":1},"1":{"77":1,"78":1,"79":1,"80":1,"120":1,"121":1,"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"448":1,"449":1},"2":{"10":1,"14":1,"61":1,"64":1,"65":1,"68":3,"77":1,"89":1,"95":1,"96":4,"121":1,"124":1,"127":1,"128":1,"134":1,"156":1,"207":1,"209":8,"210":3,"211":1,"212":1,"213":1,"214":1,"224":1,"225":1,"226":1,"243":1,"244":1,"260":1,"261":1,"266":1,"315":1,"356":2,"357":2,"358":1,"362":5,"401":1,"404":1,"412":1,"413":1,"419":1,"424":2,"425":1,"427":1,"429":1,"431":4,"448":2,"449":1,"451":1,"453":2,"456":3,"463":1,"464":1,"467":1,"471":1,"472":1,"479":1,"489":1,"491":1,"501":1,"508":1,"515":1,"541":1}}],["проапгрейдиться",{"2":{"490":1}}],["проанализировав",{"2":{"365":1}}],["проанализировать",{"2":{"257":1}}],["пройден",{"2":{"457":1}}],["пройти",{"2":{"155":1,"372":1,"491":1}}],["процедур",{"2":{"475":1}}],["процедуры",{"2":{"454":1}}],["процентные",{"2":{"466":1}}],["процентов",{"2":{"446":1,"570":1}}],["процессы",{"2":{"294":1,"331":1,"344":1}}],["процессу",{"2":{"245":1,"283":1,"284":1,"333":1,"339":1}}],["процессом",{"2":{"180":1,"249":1,"252":1,"331":2,"405":1}}],["процессоры",{"2":{"483":1}}],["процессор",{"2":{"160":1,"240":1,"441":1,"483":1}}],["процессора",{"2":{"145":1,"483":1}}],["процессов",{"2":{"68":1,"205":1,"299":1,"371":1}}],["процессах",{"2":{"199":1}}],["процессами",{"2":{"139":1,"331":2,"335":1}}],["процесса",{"2":{"80":1,"152":1,"174":1,"176":1,"190":1,"223":1,"226":1,"251":1,"278":1,"283":1,"325":1,"331":2,"332":2,"337":2,"348":1,"371":3,"374":1,"375":1,"376":2,"403":1,"424":1,"454":1,"458":1,"466":1,"476":1}}],["процессе",{"2":{"68":1,"69":1,"134":1,"143":1,"167":1,"210":1,"218":1,"222":1,"224":1,"263":1,"279":1,"291":1,"331":1,"335":1,"344":1,"370":1,"371":1,"375":1,"431":1,"453":1,"454":1}}],["процесс",{"2":{"61":1,"134":1,"151":1,"152":1,"176":1,"179":1,"218":1,"220":1,"224":1,"245":1,"248":1,"255":1,"263":1,"277":2,"278":1,"291":1,"326":1,"331":9,"335":2,"336":2,"337":1,"343":1,"370":1,"371":1,"375":1,"376":4,"377":2,"401":1,"418":1,"453":2,"454":1,"466":1,"476":3,"478":1,"479":1}}],["проходит",{"2":{"280":1}}],["прозрачным",{"2":{"433":1}}],["прозрачны",{"2":{"270":1}}],["прозрачный",{"2":{"123":1,"439":1}}],["прозрачное",{"2":{"424":1}}],["прозрачно",{"2":{"270":1,"320":1,"431":1}}],["прояснить",{"2":{"318":1}}],["проясняться",{"2":{"226":1}}],["проявлять",{"2":{"331":1}}],["проявляться",{"2":{"284":1}}],["проявляются",{"2":{"270":1}}],["проявляется",{"2":{"196":1,"319":1,"479":1}}],["проявившиеся",{"2":{"226":1}}],["проникновение",{"0":{"195":1}}],["прокручивается",{"2":{"359":1}}],["прокручиваются",{"2":{"181":1}}],["прокрутить",{"2":{"178":1,"191":1}}],["прокруткой",{"2":{"179":1}}],["прокрутка",{"2":{"178":1,"359":1}}],["прокрутку",{"2":{"178":1}}],["прокрутки",{"2":{"164":1,"178":1,"179":1,"258":2}}],["проксирования",{"2":{"318":1,"319":2}}],["прокси",{"2":{"125":1,"126":1,"148":1,"211":1,"278":1,"283":1,"294":1,"318":8,"319":6,"320":6,"322":1,"323":2,"335":1,"342":1,"403":1,"420":2,"482":1,"508":1}}],["профессиональную",{"2":{"477":1}}],["профессиональные",{"2":{"451":1}}],["профессиональный",{"2":{"162":1}}],["профессионального",{"2":{"486":1}}],["профессиональной",{"2":{"387":1}}],["профессиональное",{"2":{"293":1}}],["профессор",{"2":{"166":1}}],["профилем",{"2":{"59":1}}],["профиля",{"2":{"4":1}}],["прочную",{"2":{"477":1}}],["прочная",{"2":{"475":1}}],["прочтение",{"2":{"387":1}}],["прочим",{"2":{"483":1}}],["прочие",{"2":{"431":1,"437":1}}],["прочих",{"2":{"210":1,"492":1}}],["прочитаны",{"2":{"418":1}}],["прочитал",{"2":{"173":1}}],["прочитать",{"2":{"155":1,"417":1}}],["прочесть",{"2":{"492":1}}],["прочей",{"2":{"96":1}}],["прочее",{"2":{"59":1,"96":2}}],["прочего",{"2":{"36":1}}],["прошла",{"2":{"373":1,"375":1}}],["прошлый",{"2":{"293":1}}],["прошли",{"2":{"241":1,"280":2,"456":1,"457":1}}],["прошлой",{"2":{"98":1}}],["прошел",{"2":{"127":1}}],["пробовать",{"2":{"466":1}}],["пробегаемся",{"2":{"315":1}}],["пробелы",{"2":{"236":1}}],["пробелами",{"2":{"125":1}}],["пробная",{"2":{"208":2}}],["пробного",{"2":{"196":1}}],["проблемой",{"2":{"331":2,"371":1}}],["проблему",{"2":{"141":1,"142":1,"179":1,"294":1,"331":2,"424":1,"437":1,"450":1}}],["проблемам",{"2":{"286":1}}],["проблема",{"2":{"68":1,"89":1,"96":1,"130":1,"226":1,"254":1,"255":1,"290":1,"326":1,"418":1}}],["проблемы",{"2":{"62":1,"125":2,"221":1,"234":1,"255":1,"283":1,"294":2,"295":1,"371":1,"377":1,"450":1,"451":1,"466":1,"491":1,"492":1}}],["проблем",{"2":{"9":1,"96":1,"124":1,"179":1,"222":1,"258":1,"283":1,"286":1,"291":1,"325":1,"370":1,"382":1,"451":1,"467":2,"579":1}}],["провайдите",{"2":{"433":1}}],["провайдеры",{"2":{"152":1,"425":2,"430":1,"448":1}}],["провайдерами",{"2":{"491":1,"579":1}}],["провайдерах",{"2":{"146":1}}],["провайдера",{"2":{"124":1,"145":1,"483":1}}],["провайдер",{"2":{"124":1,"146":1}}],["провайдеров",{"2":{"124":1,"152":1,"374":1}}],["провизия",{"2":{"255":1}}],["провизию",{"2":{"255":1}}],["проводить",{"2":{"482":1}}],["проводиться",{"2":{"453":2}}],["проводилось",{"2":{"453":1}}],["проводил",{"2":{"179":1}}],["проводнике",{"2":{"210":1}}],["проведения",{"2":{"478":1}}],["проведение",{"2":{"451":1}}],["проведет",{"2":{"280":1}}],["провели",{"2":{"266":1}}],["проверено",{"2":{"492":1}}],["проверена",{"2":{"375":1}}],["проверенная",{"2":{"502":1}}],["проверенное",{"2":{"222":1,"294":1}}],["проверенным",{"2":{"541":1}}],["проверенных",{"2":{"501":1}}],["проверенные",{"2":{"77":1}}],["проверенный",{"2":{"9":1}}],["проверенную",{"2":{"17":1}}],["проверке",{"2":{"457":2}}],["проверку",{"2":{"310":1,"319":1,"371":1,"453":1}}],["проверка",{"2":{"263":1,"318":1,"368":1,"370":1,"376":1,"450":3,"473":1,"579":1}}],["проверки",{"0":{"154":1,"206":1,"220":1,"242":1,"267":1,"282":1,"328":1,"351":1,"379":1,"423":1,"478":1},"2":{"169":1,"370":4,"371":3,"374":2,"376":4,"431":1,"448":1,"453":1,"457":1,"459":1}}],["проверит",{"2":{"456":1}}],["проверить",{"2":{"142":1,"209":1,"267":1,"268":1,"276":1,"325":1,"371":1,"374":1,"458":1,"459":1,"462":1,"463":1,"471":1,"472":1,"491":1}}],["проверили",{"2":{"350":1}}],["проверив",{"2":{"123":1}}],["проверьте",{"2":{"133":1,"217":1,"410":1,"492":1}}],["проверяются",{"2":{"453":2}}],["проверяем",{"2":{"278":1,"304":1,"311":1,"315":1,"319":1,"326":1,"420":2,"461":1}}],["проверяет",{"2":{"123":2,"217":1,"371":1,"376":1,"424":1,"441":1}}],["проверять",{"2":{"123":1,"370":1,"457":1,"479":1}}],["проверок",{"2":{"96":1,"133":1}}],["провести",{"2":{"12":1,"198":1,"222":1,"349":1,"491":1}}],["промежутках",{"2":{"376":1}}],["промежутка",{"2":{"376":1}}],["промежуток",{"2":{"375":1}}],["промежуточным",{"2":{"345":1}}],["промежуточных",{"2":{"320":1}}],["промежуточный",{"2":{"210":1}}],["промежуточное",{"2":{"318":1}}],["промежуточного",{"2":{"264":1,"482":1}}],["промптировании",{"2":{"277":1}}],["промптов",{"2":{"99":1}}],["промисная",{"2":{"545":1}}],["промисный",{"2":{"122":1}}],["промисы",{"2":{"283":1,"459":1,"483":2}}],["промисов",{"2":{"260":1,"491":1}}],["промис",{"2":{"252":2,"369":1,"377":1}}],["промиса",{"2":{"249":1,"263":1}}],["промышленном",{"2":{"345":1}}],["промышленной",{"2":{"211":1,"279":1}}],["промышленный",{"2":{"158":1}}],["про",{"2":{"96":1}}],["проталкивает",{"2":{"366":1}}],["протестировали",{"2":{"462":1}}],["протестированы",{"2":{"323":1,"454":1}}],["протестировать",{"2":{"124":1,"454":3,"456":1,"457":1,"459":1,"542":1}}],["протяжении",{"2":{"209":1,"224":1}}],["противоположную",{"2":{"201":1,"294":1}}],["противоположное",{"2":{"194":1}}],["противоположные",{"2":{"175":1}}],["против",{"0":{"157":1},"2":{"161":1}}],["противном",{"2":{"89":1,"217":1,"253":1,"310":1,"332":1,"340":1}}],["прототипа",{"2":{"267":1}}],["прототипов",{"2":{"249":1}}],["прототип",{"2":{"218":1}}],["прототипирования",{"2":{"20":1}}],["протоколе",{"2":{"371":1}}],["протоколирования",{"2":{"320":1}}],["протоколам",{"2":{"221":1}}],["протокола",{"2":{"152":2,"371":2,"418":1}}],["протоколу",{"2":{"151":1,"152":1,"153":1,"329":1,"425":1,"437":1}}],["протокол",{"2":{"142":3,"344":2,"371":3,"546":1}}],["протоколы",{"0":{"126":1},"2":{"126":1,"378":1,"491":1}}],["протоколом",{"2":{"125":1,"371":1,"373":1}}],["прогон",{"2":{"479":1}}],["проговаривание",{"2":{"65":1}}],["програмную",{"2":{"492":1}}],["програмных",{"2":{"382":1}}],["программе",{"2":{"508":1}}],["программистов",{"2":{"482":1,"502":1}}],["программистские",{"2":{"482":1}}],["программистам",{"2":{"482":1}}],["программиста",{"2":{"283":1,"483":1}}],["программист",{"2":{"222":2,"291":1,"446":1,"482":1,"483":2}}],["программировали",{"2":{"323":1}}],["программированию",{"2":{"491":2}}],["программирование",{"2":{"283":1,"328":1,"387":1,"482":1}}],["программировании",{"2":{"222":3,"288":1}}],["программирования",{"2":{"3":1,"17":1,"124":2,"221":2,"222":1,"255":1,"278":1,"287":1,"289":1,"482":2}}],["программировать",{"2":{"102":1,"483":1}}],["программой",{"2":{"212":1}}],["программ",{"2":{"208":1,"384":1}}],["программы",{"2":{"143":1,"222":1,"225":1,"257":1,"356":1,"407":1,"425":1,"441":1,"446":1,"468":1,"482":2}}],["программа",{"2":{"125":1,"222":1}}],["программу",{"2":{"68":1,"222":1,"292":1,"468":1}}],["программный",{"2":{"366":1}}],["программные",{"2":{"157":1}}],["программными",{"2":{"482":1}}],["программным",{"2":{"157":1,"464":1}}],["программно",{"2":{"222":1,"359":2,"376":1,"446":1,"462":2}}],["программном",{"2":{"165":1,"286":1}}],["программному",{"2":{"145":1,"350":1,"453":1}}],["программное",{"2":{"141":1,"145":2,"155":1,"157":2,"203":1,"382":1,"384":1,"451":1,"453":2,"466":1}}],["программной",{"2":{"69":1,"221":1,"222":1,"286":1,"294":1}}],["программного",{"0":{"283":1,"284":1,"294":1,"390":1},"1":{"284":1,"285":1,"286":1,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"326":1,"327":1,"328":1},"2":{"61":1,"67":1,"69":1,"77":1,"126":1,"155":1,"157":1,"163":1,"165":1,"203":1,"211":1,"215":1,"220":1,"221":1,"243":1,"247":1,"251":1,"258":1,"283":1,"284":2,"292":1,"293":1,"294":1,"327":1,"336":1,"390":2,"408":1,"419":1,"451":3,"453":2,"455":1,"466":2,"476":1,"479":1}}],["программная",{"0":{"363":1},"1":{"364":1,"365":1},"2":{"2":1,"77":1,"365":1}}],["прогрессивному",{"2":{"375":1}}],["прогрессивное",{"2":{"277":1}}],["прогрессивность",{"2":{"222":1}}],["прогрессивного",{"2":{"139":1,"221":1,"275":1,"279":1,"382":1}}],["прогрессивные",{"0":{"268":1,"394":1},"1":{"269":1,"270":1,"271":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1},"2":{"268":1,"354":1}}],["прогрессивными",{"2":{"378":1}}],["прогрессивным",{"2":{"242":1}}],["прогрессивный",{"0":{"222":1},"2":{"221":1,"222":2,"270":1,"323":1,"389":1}}],["прогрессивных",{"2":{"221":1}}],["прогресса",{"0":{"176":1},"1":{"177":1},"2":{"176":1,"266":1}}],["прогресс",{"2":{"155":1,"176":3}}],["проп",{"2":{"450":1}}],["пропорционально",{"2":{"325":1}}],["проприетарных",{"2":{"270":1}}],["прописать",{"2":{"424":1,"562":1}}],["прописан",{"2":{"573":1}}],["прописано",{"2":{"231":1}}],["прописаны",{"2":{"222":1}}],["прописывать",{"2":{"41":1}}],["пропустили",{"2":{"319":1}}],["пропустить",{"2":{"213":1}}],["пропускать",{"2":{"59":1}}],["пропсом",{"2":{"263":1}}],["пропсов",{"2":{"85":1,"253":2,"254":2,"257":1,"361":1,"407":1,"432":1,"450":1}}],["пропсу",{"2":{"257":1}}],["пропсами",{"2":{"362":1,"368":1}}],["пропсам",{"2":{"355":1}}],["пропса",{"2":{"254":1,"263":1,"359":1,"365":1}}],["пропс",{"2":{"177":1,"257":1,"263":2,"359":1,"362":1,"365":1,"407":1}}],["пропсы",{"0":{"236":1,"253":1},"2":{"114":1,"253":1,"254":2,"257":2,"264":1,"432":1,"433":1,"450":1,"481":1,"531":1}}],["проиграет",{"2":{"492":1}}],["проигнорируем",{"2":{"210":1}}],["проиндексировать",{"2":{"492":1}}],["происхождения",{"2":{"418":1}}],["происхождением",{"2":{"418":1}}],["происходят",{"2":{"270":1}}],["происходящего",{"2":{"176":1}}],["происходящим",{"2":{"167":1}}],["происходить",{"2":{"17":1,"424":1,"450":1,"451":1}}],["происходит",{"2":{"3":1,"138":1,"167":1,"179":1,"217":1,"255":1,"259":1,"262":1,"265":1,"319":2,"325":1,"331":4,"339":1,"343":1,"365":1,"368":1,"370":1,"375":2,"412":1,"418":1,"451":1,"462":1,"476":1,"478":2,"492":1}}],["проиллюстрирован",{"2":{"248":1}}],["проиллюстрировать",{"2":{"189":1}}],["произошла",{"2":{"332":1,"355":1,"460":1}}],["произошло",{"2":{"173":1,"450":1}}],["произойти",{"2":{"270":1,"458":1}}],["произойдет",{"2":{"179":1,"209":1,"217":1,"252":1,"324":1,"376":1,"407":1}}],["произвольные",{"2":{"346":1}}],["произвольный",{"2":{"178":1}}],["произвольное",{"2":{"272":1}}],["производственной",{"2":{"463":1}}],["производственных",{"2":{"213":1}}],["производственные",{"2":{"210":1}}],["производстве",{"2":{"210":1,"315":1}}],["производства",{"2":{"210":2,"214":1}}],["производству",{"2":{"153":1,"210":1}}],["производилась",{"2":{"209":1}}],["производится",{"2":{"376":1,"469":1}}],["производителен",{"2":{"209":1}}],["производительней",{"2":{"441":1}}],["производительнее",{"2":{"133":1}}],["производительных",{"2":{"383":1}}],["производительными",{"2":{"268":1}}],["производительным",{"2":{"131":1}}],["производительная",{"2":{"382":1}}],["производительное",{"2":{"482":1}}],["производительной",{"2":{"331":1}}],["производительности",{"2":{"68":1,"138":1,"148":1,"213":1,"222":2,"281":1,"318":1,"331":3,"335":1,"340":1,"344":1,"354":1,"394":1,"396":1,"422":1,"446":1,"450":1,"492":1}}],["производительностью",{"2":{"331":1}}],["производительность",{"2":{"17":1,"69":2,"78":1,"96":1,"230":1,"270":2,"329":1,"331":2,"350":2,"351":1,"354":1,"484":1}}],["производиться",{"2":{"96":1}}],["продвигает",{"2":{"289":1}}],["продвинулись",{"2":{"209":1}}],["продвинутые",{"2":{"250":1}}],["продвинутыми",{"2":{"329":1}}],["продвинутым",{"2":{"218":1}}],["продвинутых",{"2":{"207":1,"362":1}}],["продвинуться",{"2":{"208":1}}],["продвижение",{"2":{"157":1}}],["продвижения",{"2":{"141":1,"218":1,"221":1,"233":1,"241":1,"277":1,"327":1}}],["продуманный",{"2":{"378":1}}],["продуманных",{"2":{"376":1}}],["продуманные",{"2":{"193":1}}],["продуманного",{"2":{"189":1}}],["продуктом",{"2":{"157":1,"167":1}}],["продуктовый",{"2":{"491":1}}],["продуктовое",{"2":{"80":1}}],["продуктов",{"2":{"11":4,"38":1,"39":1}}],["продукте",{"2":{"11":1}}],["продуктами",{"2":{"106":1}}],["продуктах",{"2":{"11":1}}],["продукта",{"2":{"11":1,"13":1,"61":1,"69":1,"74":1,"77":1,"158":1,"191":1,"476":2}}],["продукты",{"2":{"11":1,"157":1}}],["продукт",{"2":{"10":1,"46":1,"65":1,"77":1,"139":1,"157":1,"215":1,"401":1,"430":1,"448":1}}],["продолжать",{"2":{"538":1}}],["продолжаться",{"2":{"196":1}}],["продолжаем",{"2":{"352":1}}],["продолжает",{"2":{"325":1,"457":1,"466":1}}],["продолжения",{"2":{"264":1}}],["продолжение",{"2":{"164":2}}],["продолжим",{"2":{"159":1}}],["продолжительность",{"2":{"324":1}}],["продолжить",{"2":{"192":1,"324":1,"472":1}}],["продолжит",{"2":{"133":1}}],["продлевать",{"2":{"152":1}}],["продлить",{"2":{"142":1}}],["продакшен",{"2":{"210":1}}],["продакшне",{"2":{"121":1,"479":1}}],["продает",{"2":{"142":1}}],["продаются",{"2":{"142":1,"197":1}}],["продавалось",{"2":{"155":1}}],["продавать",{"2":{"142":1}}],["продавцам",{"2":{"13":1}}],["продавцов",{"2":{"12":1}}],["проскроллит",{"2":{"568":1}}],["прослойка",{"2":{"492":1}}],["прослойки",{"2":{"85":1}}],["прослушивание",{"2":{"362":1}}],["прослушивания",{"2":{"290":1}}],["прослушивать",{"2":{"349":2}}],["проследим",{"2":{"213":1}}],["просмотр",{"2":{"210":1,"377":1}}],["просмотреть",{"2":{"183":1,"213":1,"242":1,"471":1}}],["просмотра",{"2":{"178":1,"179":2,"181":1,"209":1,"219":1,"226":1,"263":1,"277":1,"341":2,"421":1,"464":1,"471":1}}],["просматривать",{"2":{"11":2,"290":1,"341":1}}],["просишь",{"2":{"123":1}}],["простейший",{"2":{"320":1}}],["пространства",{"2":{"159":1}}],["пространстве",{"2":{"153":1,"175":1,"418":1}}],["пространство",{"2":{"142":1,"418":1,"440":1}}],["простую",{"2":{"141":1,"148":1,"166":1,"194":1,"222":1,"258":1,"325":1,"343":1,"344":1,"357":1,"427":1,"448":1}}],["прост",{"2":{"127":1,"145":1,"162":1,"255":1,"277":1,"316":1,"324":2,"333":1,"345":1,"376":1}}],["проставить",{"2":{"586":1}}],["проставляем",{"2":{"83":1}}],["простая",{"0":{"370":1},"2":{"127":1,"201":1,"217":1,"277":2,"337":1,"370":1,"410":1,"431":1,"448":1,"467":1}}],["проста",{"2":{"96":1,"189":1,"257":1,"338":1,"346":1,"355":1,"356":1,"370":1,"374":1,"407":1,"411":1,"464":1}}],["просты",{"2":{"157":1,"492":1}}],["простых",{"2":{"98":1,"131":1,"152":1,"178":1,"206":1,"210":1,"221":2,"243":1,"264":1,"350":1,"369":1,"378":1,"412":1,"428":1,"448":1,"459":1,"472":1,"492":1}}],["простым",{"0":{"292":1},"2":{"77":1,"122":1,"167":1,"266":1,"275":1,"283":1,"292":1,"320":1,"323":1,"332":1,"335":1,"357":1,"375":1,"412":1,"433":1,"460":1,"468":1}}],["простыми",{"2":{"11":1,"152":1,"213":1,"339":1}}],["простые",{"2":{"2":1,"23":1,"41":1,"210":1,"211":1,"292":1,"321":1,"322":1,"325":1,"340":1,"405":1,"446":1,"570":1,"587":1}}],["простор",{"2":{"294":1}}],["простого",{"2":{"217":1,"221":1,"257":1,"318":1,"376":1,"418":1,"428":1,"448":1,"542":1}}],["простому",{"2":{"219":1,"401":1}}],["простом",{"2":{"177":1,"234":1,"318":1,"321":1,"482":1}}],["простое",{"2":{"131":1,"209":1,"214":1,"218":1,"219":1,"224":1,"254":1,"305":1,"332":1,"405":1,"492":1}}],["простота",{"2":{"39":1,"292":1,"412":1,"431":1,"448":1}}],["простоты",{"2":{"7":1,"186":1,"247":1,"272":1,"344":1,"365":1}}],["простой",{"0":{"348":1},"1":{"349":1},"2":{"32":1,"89":1,"96":2,"123":1,"161":1,"179":1,"189":1,"215":1,"217":2,"223":1,"246":1,"259":2,"260":1,"277":1,"278":1,"281":1,"286":1,"303":1,"311":1,"314":1,"315":1,"319":1,"320":1,"323":1,"326":1,"329":2,"331":1,"332":1,"342":1,"346":1,"347":2,"359":1,"361":1,"370":1,"382":1,"396":1,"405":1,"412":1,"418":1,"420":1,"421":1,"457":1,"464":2,"476":1,"491":1,"565":1,"566":1,"570":1}}],["просто",{"0":{"213":1},"2":{"2":1,"12":1,"89":1,"96":1,"112":1,"123":1,"129":1,"139":1,"142":2,"145":1,"146":1,"149":1,"166":1,"179":1,"185":1,"201":1,"209":1,"214":1,"226":1,"233":1,"243":1,"257":1,"263":2,"293":1,"305":1,"310":2,"311":1,"315":1,"319":1,"320":1,"325":1,"331":1,"332":2,"333":1,"342":1,"343":1,"346":1,"347":1,"349":1,"356":1,"360":1,"362":1,"369":1,"374":1,"404":1,"405":1,"406":2,"408":1,"412":1,"415":1,"418":2,"420":1,"425":1,"446":1,"450":3,"455":1,"469":1,"481":1,"483":2,"490":1,"491":1,"521":1,"532":1,"538":1,"541":1}}],["проще",{"2":{"2":1,"38":1,"56":1,"124":1,"165":1,"186":1,"270":1,"288":1,"354":1,"413":1,"417":1,"420":1,"446":1,"490":1,"492":1}}],["приоритетом",{"2":{"483":2}}],["приоритеты",{"2":{"483":1}}],["приобрела",{"2":{"354":1}}],["приобрести",{"2":{"208":1}}],["приобретают",{"2":{"453":1}}],["приобретаются",{"2":{"142":1}}],["приобретен",{"2":{"142":1,"152":1}}],["приглашаем",{"2":{"533":1}}],["приглашение",{"2":{"278":1}}],["приглашения",{"2":{"277":2}}],["пригодится",{"2":{"471":1,"491":1}}],["пригодиться",{"2":{"441":1,"464":1}}],["приписываются",{"2":{"377":1}}],["природа",{"2":{"451":1}}],["природе",{"2":{"235":1,"326":1}}],["прирост",{"2":{"331":1,"340":1}}],["пришли",{"2":{"354":1}}],["пришла",{"2":{"258":1}}],["пришло",{"2":{"86":1,"92":1,"151":1,"217":1,"263":1,"264":1,"277":1,"337":1,"338":1,"340":1,"343":1,"359":1,"362":1,"368":1,"465":1}}],["пришлось",{"2":{"44":1,"160":1}}],["признательность",{"2":{"387":1}}],["признаку",{"2":{"264":1}}],["признания",{"2":{"252":1}}],["призывом",{"2":{"191":2}}],["призыв",{"0":{"191":1},"2":{"191":1,"203":1}}],["призывы",{"2":{"174":1}}],["призыва",{"2":{"159":1}}],["придумали",{"2":{"492":1}}],["придумать",{"2":{"328":1}}],["придать",{"2":{"216":1}}],["придерживаться",{"2":{"205":1,"222":1,"324":1,"456":1,"491":1}}],["придерживаются",{"2":{"191":1,"490":1}}],["придется",{"2":{"38":1,"59":1,"222":1,"255":1,"293":1,"304":1,"331":1}}],["приятный",{"2":{"553":1}}],["приятные",{"2":{"210":1}}],["приятней",{"2":{"490":1}}],["приятно",{"2":{"226":1}}],["приятен",{"2":{"158":1}}],["приемник",{"2":{"317":1}}],["приемники",{"2":{"316":1}}],["приемнику",{"2":{"316":1}}],["приемы",{"2":{"205":1}}],["приемов",{"2":{"178":1,"192":1,"213":1}}],["причудливо",{"2":{"222":1}}],["причем",{"2":{"185":1,"318":1,"324":1,"335":1,"418":1,"459":1,"462":1,"491":2}}],["причина",{"2":{"463":1}}],["причинам",{"2":{"460":1}}],["причине",{"2":{"252":1}}],["причин",{"2":{"64":1,"133":1,"181":1,"318":1,"331":1}}],["причины",{"0":{"62":1},"2":{"318":1,"490":1}}],["приборная",{"2":{"465":1}}],["приборной",{"2":{"464":1}}],["прибегая",{"2":{"182":1}}],["приблизить",{"2":{"492":1}}],["приблизительно",{"0":{"80":1}}],["приближении",{"2":{"17":1}}],["присутствует",{"2":{"450":1}}],["присутствию",{"2":{"142":1}}],["присущей",{"2":{"413":1}}],["приспособленным",{"2":{"382":1}}],["приспособить",{"2":{"153":1}}],["присоединить",{"2":{"254":1}}],["присоединении",{"2":{"232":1}}],["присоединяет",{"2":{"316":1}}],["присоединяем",{"2":{"217":1}}],["присоединять",{"2":{"260":1}}],["присоединяться",{"2":{"63":1}}],["присваивать",{"2":{"359":1}}],["присваивание",{"2":{"319":1}}],["присваивая",{"2":{"310":1,"319":1,"365":1}}],["присваиваем",{"2":{"257":1,"309":1,"310":1,"311":1,"319":1,"365":1}}],["присваивает",{"2":{"232":1,"254":1}}],["присваивается",{"2":{"222":1,"232":1,"362":1}}],["присвоено",{"2":{"362":1}}],["присвоение",{"2":{"310":2}}],["присвоения",{"2":{"246":1}}],["присвоении",{"2":{"217":1}}],["присвоить",{"2":{"307":1,"308":1,"319":1}}],["присвоили",{"2":{"257":1}}],["присвоил",{"2":{"179":1}}],["приступать",{"2":{"471":1}}],["приступаем",{"2":{"461":1}}],["приступить",{"2":{"210":1,"213":1,"249":1,"335":1,"343":1,"356":1,"360":1}}],["приступили",{"2":{"207":1}}],["пристыдить",{"2":{"202":1}}],["пристальное",{"2":{"191":1,"384":1}}],["примитивах",{"2":{"446":1}}],["примитивам",{"2":{"131":2}}],["примитивов",{"2":{"446":1}}],["примитивные",{"2":{"232":1,"253":1,"450":1}}],["примите",{"2":{"226":1,"373":1}}],["прим",{"2":{"208":1}}],["приманка",{"0":{"196":1,"201":1}}],["примет",{"2":{"222":1,"249":1}}],["примечание",{"2":{"142":1,"243":1,"253":1}}],["примечателен",{"2":{"32":1}}],["применяют",{"2":{"342":1,"431":1,"448":1}}],["применяются",{"2":{"270":1}}],["применять",{"2":{"212":1,"218":1,"222":1,"283":1,"292":1,"301":1,"327":1,"403":1,"454":1,"477":1}}],["применяться",{"2":{"172":1,"210":1,"283":1,"284":1,"582":1}}],["применяя",{"2":{"189":1,"217":1,"334":1,"455":1}}],["применяет",{"2":{"190":1,"324":1}}],["применяется",{"2":{"123":1,"131":2,"189":1,"226":1,"274":1,"293":1,"319":1,"324":1,"370":1}}],["применяемая",{"2":{"257":1}}],["применяемых",{"2":{"211":1,"349":1}}],["применяем",{"2":{"41":1,"415":1,"459":1}}],["применены",{"2":{"461":1}}],["применен",{"2":{"335":1,"550":1}}],["примененными",{"2":{"215":1}}],["применена",{"2":{"187":1,"212":1}}],["применено",{"2":{"159":1}}],["применений",{"2":{"254":1,"344":1}}],["применению",{"2":{"222":1}}],["применения",{"2":{"153":1,"164":1,"166":1,"189":1,"249":1,"252":1,"274":1,"290":1,"302":1,"350":1,"424":1,"451":1}}],["применением",{"2":{"243":1,"352":1}}],["применение",{"2":{"126":1,"165":1,"211":1,"213":1,"215":1,"270":2,"286":1,"293":1,"294":1,"299":1,"327":1,"403":1,"538":1}}],["применении",{"2":{"96":1,"131":1,"211":1,"455":1}}],["применив",{"2":{"467":1}}],["применительно",{"2":{"270":1}}],["применить",{"2":{"96":1,"218":1,"245":1,"249":1,"256":1,"321":1,"335":1,"337":1,"352":1,"419":1,"421":1,"453":1}}],["применили",{"2":{"191":1,"216":1,"218":1,"257":1,"266":1,"267":1}}],["применимы",{"2":{"293":1}}],["применим",{"2":{"211":1,"243":1,"259":1,"263":1,"287":1,"310":1,"342":1,"377":1,"404":1}}],["применима",{"2":{"161":1}}],["применимо",{"2":{"155":1}}],["примеры",{"2":{"145":1,"150":1,"156":1,"173":1,"176":1,"193":1,"211":1,"235":1,"243":1,"269":1,"325":1,"327":1,"328":1,"362":1,"366":1,"390":1,"397":1,"403":2,"455":1,"477":1,"491":1}}],["примеров",{"0":{"386":1},"2":{"131":1,"140":1,"157":1,"175":1,"203":1,"208":1,"222":1,"224":1,"226":1,"269":1,"283":1,"289":1,"368":1,"377":1,"382":1,"386":1,"411":1,"416":1,"452":1,"455":1,"456":1}}],["примером",{"2":{"77":1,"190":1,"246":1,"369":1,"418":1,"471":1}}],["примеру",{"2":{"96":1,"217":1,"222":1,"305":1,"461":1}}],["примере",{"2":{"17":1,"118":1,"129":1,"149":1,"159":1,"160":1,"191":1,"195":1,"202":1,"209":1,"211":1,"222":1,"223":1,"226":1,"234":1,"254":1,"255":2,"257":1,"264":1,"277":1,"278":1,"279":1,"290":1,"310":1,"314":1,"315":1,"318":2,"319":1,"320":1,"329":1,"333":1,"341":2,"345":1,"350":1,"356":1,"368":1,"374":2,"377":1,"405":1,"408":1,"409":1,"410":2,"413":2,"414":1,"421":1,"454":1,"464":1,"474":1}}],["примерное",{"2":{"331":1}}],["примерно",{"2":{"14":1,"17":1,"26":2,"51":1,"96":1,"106":1,"122":1,"209":2,"257":2,"264":1,"280":1,"313":1,"331":1,"341":1,"370":1,"375":1,"411":1,"450":1,"464":1,"471":1,"472":1,"481":1,"483":1,"492":1}}],["примерный",{"2":{"5":1}}],["примерами",{"2":{"211":1,"234":1,"270":1,"354":1,"359":1,"465":1}}],["примерам",{"2":{"142":1,"302":1,"330":1,"352":1,"384":1}}],["примерах",{"2":{"130":1,"164":1,"232":1,"243":1,"254":1,"272":1,"299":1,"304":1,"323":1,"334":1,"352":1,"354":1,"359":1,"368":1,"375":1,"418":1,"542":1}}],["примера",{"2":{"4":1,"143":1,"159":1,"189":1,"194":1,"210":1,"215":1,"226":1,"269":1,"276":1,"278":1,"280":1,"286":1,"288":1,"319":1,"325":1,"326":1,"332":1,"340":1,"341":1,"351":1,"359":1,"363":1,"364":1,"377":1,"411":1,"413":1,"421":3,"457":1,"464":1,"472":1}}],["пример",{"0":{"260":1,"455":1},"1":{"261":1,"262":1,"263":1},"2":{"3":1,"14":1,"17":1,"112":1,"122":2,"125":1,"128":1,"129":2,"130":1,"132":1,"146":1,"148":1,"160":2,"161":2,"170":1,"172":1,"174":1,"175":1,"176":2,"178":1,"182":1,"183":1,"185":1,"189":1,"194":1,"195":1,"201":1,"202":1,"215":1,"223":1,"226":1,"231":1,"232":1,"233":1,"234":1,"243":1,"252":3,"253":2,"257":2,"258":1,"259":1,"263":1,"275":3,"277":1,"278":1,"279":2,"280":1,"289":1,"290":1,"307":1,"308":1,"309":1,"311":1,"317":1,"318":1,"319":1,"320":3,"324":2,"326":2,"328":1,"333":1,"340":1,"341":3,"362":1,"365":2,"368":1,"371":1,"407":1,"410":1,"413":1,"421":1,"424":2,"433":1,"436":1,"450":1,"455":1,"458":1,"461":1,"462":1,"463":1,"464":1,"473":1,"572":1}}],["приходила",{"2":{"492":1}}],["приходит",{"2":{"145":1,"254":1,"257":1,"276":1}}],["приходится",{"2":{"96":1,"122":1,"152":1,"209":1,"226":2,"230":1,"255":1,"441":1,"462":1}}],["приходите",{"2":{"26":1}}],["приходу",{"2":{"336":1}}],["приходя",{"2":{"483":1}}],["приходятся",{"2":{"450":1,"482":1}}],["приходят",{"2":{"178":1,"459":1}}],["приходящих",{"2":{"126":1}}],["привыкли",{"2":{"415":1}}],["привычный",{"2":{"334":1}}],["привычным",{"2":{"304":1,"475":1}}],["привычными",{"2":{"293":1}}],["привычнее",{"2":{"117":1}}],["привлечь",{"2":{"405":1}}],["привлекает",{"2":{"159":1}}],["привлекательными",{"2":{"96":1}}],["приватные",{"2":{"412":1}}],["приватный",{"2":{"145":1}}],["приватному",{"2":{"310":2}}],["привяжем",{"2":{"217":1}}],["привязывайтесь",{"2":{"487":1}}],["привязывание",{"2":{"258":1}}],["привязывается",{"2":{"142":1,"418":1}}],["привязки",{"2":{"361":1}}],["привязку",{"2":{"254":1}}],["привязке",{"2":{"179":1}}],["привязанной",{"2":{"368":1}}],["привязанный",{"2":{"257":1}}],["привязанные",{"2":{"211":1}}],["привязана",{"2":{"218":1,"450":1}}],["приводящую",{"2":{"457":1}}],["приводятся",{"2":{"390":1}}],["приводят",{"2":{"167":1,"245":1,"324":1}}],["приводит",{"2":{"376":1,"457":1,"462":1}}],["приводится",{"2":{"168":1,"294":1}}],["приветствуется",{"2":{"500":1}}],["привет",{"2":{"332":1,"333":1}}],["привел",{"2":{"234":1}}],["привели",{"2":{"226":2,"327":1}}],["привело",{"2":{"221":1,"258":1}}],["приведет",{"2":{"152":1,"164":1,"324":1,"410":1,"418":1,"462":1}}],["приведем",{"2":{"130":1,"132":1,"160":1,"206":1,"252":2,"275":1,"286":1,"309":1}}],["приведена",{"2":{"264":1}}],["приведенной",{"2":{"408":1}}],["приведенном",{"2":{"278":1}}],["приведенного",{"2":{"194":1}}],["приведенным",{"2":{"261":1}}],["приведенные",{"2":{"235":1,"477":1}}],["приведенный",{"2":{"127":1,"307":1,"315":1,"377":1,"407":1,"461":1}}],["приведены",{"2":{"145":1,"173":1,"211":1,"366":1,"473":1}}],["приведен",{"2":{"125":1,"127":1,"145":1,"146":1,"171":1,"290":1,"312":1,"359":1,"368":1,"377":1}}],["привести",{"2":{"68":1,"132":1,"175":1,"226":1,"252":1,"270":1,"287":1,"288":1,"328":1,"405":1,"414":1,"451":2,"458":1}}],["прикосновений",{"2":{"553":1}}],["прикосновением",{"2":{"187":1}}],["прикладном",{"2":{"546":1}}],["прикладного",{"2":{"17":1,"255":1,"289":1}}],["прикладную",{"2":{"264":1}}],["прикрыть",{"2":{"263":1}}],["прикрываются",{"2":{"96":1}}],["прикрепить",{"2":{"413":1}}],["прикрепив",{"2":{"251":1}}],["прикрепляем",{"2":{"290":1}}],["прикрепляя",{"2":{"129":1}}],["прилагает",{"2":{"331":1}}],["приложить",{"2":{"270":1}}],["приложений",{"0":{"483":1},"1":{"484":1,"485":1,"486":1,"487":1,"488":1,"489":1},"2":{"123":1,"142":1,"152":1,"153":1,"158":1,"197":1,"207":1,"221":2,"222":5,"224":2,"243":2,"268":1,"270":7,"272":1,"281":1,"283":2,"289":1,"291":1,"327":1,"329":1,"354":2,"369":1,"370":2,"371":1,"374":1,"376":2,"378":1,"383":2,"384":1,"393":1,"403":2,"412":1,"417":1,"422":1,"428":1,"431":1,"448":2,"451":1,"464":1,"472":1,"476":1,"492":1}}],["приложению",{"2":{"112":1,"142":1,"149":1,"180":1,"210":2,"216":1,"219":1,"225":1,"251":1,"260":1,"267":1,"278":1,"330":1,"335":1,"337":1,"340":1,"355":1,"359":1,"360":1,"371":1,"377":1,"412":1,"413":1,"417":1,"431":1,"449":1,"450":1,"576":1}}],["приложениями",{"2":{"145":2,"184":1,"221":1,"270":3,"277":1,"280":1,"281":2,"294":1,"352":1,"354":1,"377":2,"378":1}}],["приложениям",{"2":{"133":1,"350":1,"352":1}}],["приложениях",{"2":{"130":1,"155":2,"162":1,"174":1,"176":1,"181":1,"184":1,"195":1,"212":2,"213":1,"243":1,"295":1,"299":2,"326":1,"329":1,"369":1,"371":1,"378":1,"454":1}}],["приложения",{"0":{"80":1,"128":1,"139":1,"141":1,"143":1,"152":1,"189":1,"218":1,"264":1,"265":1,"268":1,"352":1,"393":1,"394":1,"398":1,"437":1,"440":1,"455":1,"536":1,"575":1},"1":{"140":1,"141":1,"142":2,"143":1,"144":2,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1,"151":1,"152":1,"153":1,"154":1,"269":1,"270":1,"271":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"353":1,"354":1,"355":1,"356":1,"357":1,"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1,"365":1,"366":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1,"377":1,"378":1,"379":1,"438":1,"439":1,"576":1,"577":1,"578":1,"579":1},"2":{"11":1,"59":1,"83":1,"113":1,"122":1,"126":1,"127":4,"128":5,"129":3,"135":1,"139":6,"141":3,"142":1,"143":4,"144":2,"145":3,"146":1,"147":1,"151":2,"152":1,"153":3,"154":1,"171":1,"174":1,"176":1,"181":2,"183":2,"186":1,"188":1,"189":1,"191":3,"205":1,"207":2,"209":1,"210":7,"211":2,"212":1,"214":1,"215":3,"216":1,"217":1,"219":3,"220":2,"221":2,"222":6,"223":5,"224":4,"225":1,"233":1,"234":1,"245":2,"246":2,"248":1,"249":1,"251":2,"252":2,"255":2,"259":2,"260":2,"263":4,"264":3,"265":1,"266":1,"268":2,"270":8,"271":2,"272":3,"273":3,"274":4,"275":4,"276":1,"277":5,"278":3,"279":1,"280":2,"282":1,"286":2,"288":1,"290":2,"291":2,"292":1,"297":1,"298":1,"301":1,"310":1,"318":2,"323":1,"327":1,"329":2,"330":1,"331":3,"333":1,"335":1,"337":3,"340":1,"341":1,"345":1,"348":1,"349":1,"350":3,"351":2,"352":1,"354":8,"356":3,"359":2,"362":2,"369":2,"370":1,"371":1,"372":1,"373":2,"374":2,"375":2,"376":2,"377":6,"378":1,"379":1,"382":1,"392":1,"396":1,"403":3,"404":1,"405":1,"410":5,"411":1,"412":2,"413":1,"416":1,"418":5,"422":1,"424":1,"431":7,"432":1,"433":1,"437":2,"440":3,"446":1,"448":6,"449":1,"451":2,"453":2,"454":3,"455":5,"465":1,"476":1,"479":1,"482":1,"483":3,"484":1,"492":5,"501":1,"538":1,"540":1,"541":3,"542":4,"545":1,"576":5,"578":1,"579":3,"588":1,"589":1,"590":3}}],["приложением",{"2":{"6":1,"139":1,"151":1,"155":1,"157":1,"167":1,"183":1,"223":1,"243":1,"278":1,"382":1,"492":1,"501":2}}],["приложение",{"0":{"127":1,"215":1,"357":1,"400":1},"1":{"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"216":1,"217":1,"218":1},"2":{"6":1,"11":1,"43":1,"80":1,"104":1,"122":1,"124":2,"128":1,"129":1,"133":1,"142":2,"143":4,"144":1,"145":3,"149":1,"151":3,"152":1,"167":2,"173":1,"176":2,"191":1,"204":1,"207":2,"209":1,"210":4,"211":1,"214":1,"215":4,"217":1,"218":4,"219":2,"220":2,"221":1,"222":4,"223":2,"224":2,"225":2,"243":1,"249":1,"264":1,"265":1,"266":1,"268":3,"270":9,"272":1,"273":2,"274":1,"276":1,"277":6,"280":1,"281":1,"282":1,"286":1,"320":1,"324":1,"331":2,"334":1,"335":1,"337":1,"340":1,"341":2,"344":1,"348":1,"352":2,"354":1,"356":1,"357":1,"359":1,"361":1,"365":1,"369":1,"371":1,"375":3,"376":1,"377":1,"378":2,"398":1,"403":1,"408":1,"413":1,"415":1,"418":1,"430":2,"431":2,"437":1,"448":3,"449":1,"455":4,"465":1,"481":1,"490":1,"491":1,"492":3,"538":2,"542":1,"587":1,"588":1}}],["приложении",{"0":{"223":1},"1":{"224":1},"2":{"5":1,"11":1,"83":1,"111":1,"129":1,"173":1,"211":1,"213":1,"215":1,"216":1,"217":1,"222":1,"223":1,"226":1,"248":1,"249":2,"252":1,"263":3,"264":2,"270":1,"291":2,"294":1,"300":1,"310":1,"311":1,"317":1,"331":1,"333":1,"334":1,"337":1,"345":1,"356":1,"357":1,"361":1,"368":1,"371":2,"374":1,"375":1,"395":1,"400":1,"405":1,"410":1,"411":1,"413":1,"415":1,"419":1,"433":1,"437":2,"450":3,"460":1,"481":1,"492":1,"547":1,"550":1,"591":1}}],["приличных",{"2":{"65":1}}],["приняли",{"2":{"209":2,"338":1,"339":1}}],["принят",{"2":{"248":1,"263":1}}],["приняты",{"2":{"221":1}}],["принято",{"2":{"178":1,"182":2,"210":1,"224":1,"272":1,"314":1,"466":1}}],["принять",{"2":{"166":1,"197":1,"198":1,"249":2,"263":1,"277":1,"320":1}}],["принятие",{"2":{"165":1}}],["принятия",{"2":{"64":1,"165":1,"183":1,"453":1}}],["принести",{"2":{"206":1,"450":1}}],["принадлежность",{"2":{"375":1}}],["принадлежит",{"2":{"291":1,"374":1}}],["принадлежат",{"2":{"161":1,"450":1}}],["принадлежать",{"2":{"16":1}}],["принадлежт",{"2":{"114":1}}],["принимают",{"2":{"254":1,"257":1,"289":1}}],["принимающей",{"2":{"342":1}}],["принимающую",{"2":{"253":1,"260":1,"408":1}}],["принимающий",{"2":{"125":1,"349":1,"362":1,"409":1}}],["принимаемого",{"2":{"366":1}}],["принимает",{"2":{"252":1,"253":1,"257":1,"259":1,"262":1,"263":1,"264":1,"311":1,"366":1,"367":1,"370":1,"420":2}}],["принимается",{"2":{"132":1,"272":1}}],["принимаешь",{"2":{"98":1}}],["принимать",{"2":{"23":1,"178":1,"259":1,"283":1,"481":1,"535":1}}],["принципу",{"2":{"289":1,"377":1}}],["принципа",{"2":{"161":1,"211":1,"286":1,"288":1,"290":2,"293":1,"314":1}}],["принципами",{"2":{"159":1,"163":1,"286":1}}],["принципах",{"2":{"155":1,"186":1,"191":1,"383":1}}],["принципом",{"2":{"159":1,"291":1,"328":1}}],["принципов",{"0":{"285":1},"1":{"286":1,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1,"293":1},"2":{"157":1,"241":1,"283":2,"284":1,"293":1,"382":1}}],["принципы",{"0":{"158":1,"167":1,"283":1,"284":1,"390":1,"538":1},"1":{"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"284":1,"285":1,"286":1,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"326":1,"327":1,"328":1},"2":{"158":2,"162":2,"166":1,"167":1,"211":1,"215":2,"218":1,"243":1,"251":1,"258":1,"283":2,"284":2,"285":2,"293":1,"327":1,"335":1,"336":1,"390":1,"408":1,"419":1,"454":1,"455":1}}],["принципе",{"2":{"114":1,"218":1,"293":1,"482":1}}],["принцип",{"0":{"288":1},"2":{"2":1,"125":1,"159":1,"160":1,"162":1,"166":1,"167":1,"214":1,"251":1,"258":2,"286":3,"287":3,"288":2,"289":2,"290":1,"291":1,"292":3,"293":2,"309":1,"315":1,"405":1}}],["при",{"0":{"474":1,"575":1},"1":{"576":1,"577":1,"578":1,"579":1},"2":{"2":1,"23":1,"30":1,"39":2,"40":1,"41":5,"50":1,"59":2,"62":1,"69":1,"77":1,"83":1,"88":1,"89":1,"95":1,"96":5,"101":1,"106":1,"111":2,"114":2,"121":1,"122":1,"123":4,"124":1,"125":2,"126":1,"130":2,"131":3,"138":1,"142":1,"144":2,"149":1,"151":1,"153":2,"154":1,"157":1,"160":1,"161":2,"162":1,"164":1,"166":1,"171":1,"172":3,"173":1,"175":1,"176":2,"178":2,"179":1,"184":1,"185":1,"186":1,"187":1,"190":1,"191":3,"195":1,"197":1,"200":3,"202":1,"203":2,"209":2,"210":4,"212":1,"213":4,"214":1,"215":1,"216":1,"217":3,"221":1,"222":6,"223":1,"224":2,"226":1,"228":1,"230":2,"232":1,"234":3,"240":1,"242":1,"243":1,"251":1,"252":4,"253":1,"254":1,"255":1,"257":1,"259":1,"262":2,"264":1,"268":1,"270":2,"272":2,"274":1,"277":3,"278":1,"279":1,"283":1,"284":1,"289":1,"294":2,"304":2,"314":1,"318":1,"320":3,"323":1,"324":1,"325":2,"326":1,"327":1,"331":2,"332":1,"333":2,"334":1,"339":1,"340":1,"341":1,"355":3,"356":1,"357":2,"359":1,"362":4,"363":3,"368":1,"370":2,"371":3,"373":1,"376":1,"377":4,"379":1,"383":1,"405":2,"410":1,"413":1,"418":3,"419":1,"421":2,"422":1,"424":4,"427":1,"430":1,"433":1,"437":2,"441":2,"446":1,"448":2,"449":2,"453":2,"454":1,"455":2,"456":1,"457":3,"458":1,"460":1,"461":1,"463":2,"464":2,"471":1,"474":2,"475":1,"476":1,"479":2,"482":3,"483":1,"490":1,"491":1,"492":8,"501":2,"508":2,"535":1,"537":1,"538":1,"541":1,"542":3,"545":1,"547":1,"550":1,"579":1,"580":1,"582":1,"589":1,"590":1}}],["чрезвычайно",{"2":{"304":1,"323":1}}],["чрезмерного",{"2":{"292":1,"433":1}}],["чрезмерная",{"2":{"96":1}}],["члену",{"2":{"319":1}}],["членов",{"2":{"226":1}}],["член",{"2":{"226":1,"414":1}}],["члены",{"2":{"130":1,"412":1,"414":1}}],["членами",{"2":{"378":1,"405":1,"414":2}}],["членам",{"2":{"226":1,"412":1,"475":1}}],["члена",{"2":{"111":1,"347":1}}],["чаще",{"2":{"168":1,"195":1,"228":1,"233":1,"283":1,"291":1,"293":1,"295":1,"368":1,"457":1,"476":1,"483":1}}],["чате",{"2":{"502":1}}],["чата",{"2":{"173":1}}],["чат",{"0":{"99":1},"2":{"99":1}}],["частях",{"2":{"178":1,"283":1,"327":2,"337":1,"342":1}}],["частями",{"2":{"183":1,"249":1,"316":1}}],["частям",{"2":{"26":1}}],["частным",{"2":{"419":1}}],["частных",{"2":{"148":1}}],["частной",{"2":{"145":1}}],["частности",{"2":{"14":1,"163":1,"243":1,"270":1,"344":1,"403":1,"411":1,"466":1,"570":1}}],["части",{"2":{"123":1,"142":1,"160":1,"169":1,"178":1,"179":1,"181":2,"182":1,"189":1,"190":1,"191":1,"209":1,"214":1,"247":1,"257":1,"277":2,"283":1,"286":4,"292":1,"305":1,"320":2,"330":1,"371":1,"410":1,"431":4,"448":4,"472":1,"491":1,"545":1}}],["частичной",{"2":{"318":1}}],["частичном",{"2":{"318":1}}],["частичного",{"2":{"243":1}}],["частично",{"2":{"39":1,"189":1,"212":1,"268":1,"450":3,"482":2}}],["частота",{"2":{"483":1}}],["часто",{"2":{"43":1,"101":1,"142":5,"157":1,"167":1,"170":3,"174":1,"181":2,"182":1,"185":1,"186":1,"193":2,"195":2,"196":2,"199":2,"202":1,"203":1,"207":1,"209":1,"211":1,"217":1,"222":2,"226":1,"227":1,"230":2,"234":1,"242":1,"272":1,"273":1,"283":1,"289":1,"294":5,"302":1,"304":2,"314":1,"316":1,"318":1,"365":1,"368":3,"369":1,"376":1,"383":1,"407":1,"437":1,"446":1,"451":1,"453":1,"491":1,"502":2,"570":1}}],["частей",{"2":{"28":1,"292":1,"323":1,"331":1,"349":1,"350":1,"414":1,"579":1}}],["частью",{"2":{"105":1,"135":1,"145":1,"160":1,"174":1,"191":1,"223":1,"229":1,"251":1,"263":1,"272":1,"290":1,"293":1,"294":1,"323":1,"325":1,"338":1,"377":1,"420":1,"450":1,"472":1,"491":1}}],["часть",{"2":{"2":1,"6":1,"89":1,"126":2,"133":1,"159":1,"191":1,"216":1,"217":2,"222":1,"225":1,"283":1,"290":1,"347":1,"354":1,"371":1,"374":1,"406":1,"431":1,"441":1,"446":1,"448":1,"453":1,"464":1,"476":1,"576":2}}],["чужих",{"2":{"490":1}}],["чужим",{"2":{"475":1}}],["чужие",{"2":{"323":1}}],["чужой",{"2":{"96":1}}],["чужого",{"2":{"96":1}}],["чувствительный",{"2":{"375":1}}],["чувствительна",{"2":{"165":1}}],["чувствует",{"2":{"167":1}}],["чувствовать",{"2":{"166":1,"167":1}}],["чувство",{"2":{"166":1,"176":1}}],["чуть",{"2":{"12":1,"492":1}}],["чёткого",{"2":{"68":1}}],["чтения",{"2":{"226":2,"290":1,"341":1,"418":1,"420":1}}],["чтению",{"2":{"169":1}}],["чтение",{"2":{"59":1}}],["что",{"0":{"64":1,"141":1,"294":1,"354":1,"388":1,"453":1,"454":1,"466":1},"1":{"142":1,"389":1,"390":1,"391":1,"392":1,"393":1,"394":1,"395":1,"396":1,"397":1,"398":1,"399":1,"400":1},"2":{"3":3,"6":1,"11":2,"12":1,"17":1,"23":3,"25":1,"26":2,"32":1,"33":2,"35":1,"41":2,"46":1,"47":1,"51":1,"56":1,"62":2,"63":1,"68":1,"85":1,"88":1,"96":10,"98":1,"102":1,"104":2,"105":1,"106":1,"111":2,"114":1,"121":1,"122":2,"123":9,"124":2,"125":1,"126":2,"130":1,"132":1,"133":3,"139":1,"142":4,"143":2,"144":2,"145":3,"151":1,"152":1,"154":5,"155":3,"157":3,"158":3,"159":4,"160":4,"161":2,"162":1,"164":2,"165":1,"166":1,"167":4,"172":2,"173":3,"174":1,"175":2,"176":4,"178":1,"179":2,"184":2,"185":1,"186":1,"189":2,"190":3,"191":1,"193":1,"194":1,"195":1,"196":2,"197":2,"198":1,"202":1,"203":1,"205":1,"206":3,"208":3,"209":6,"210":7,"211":2,"212":1,"213":6,"214":4,"216":3,"217":9,"218":5,"222":14,"223":3,"224":5,"225":6,"226":12,"229":2,"230":2,"231":1,"232":1,"233":2,"234":1,"242":2,"245":1,"247":3,"248":1,"252":2,"253":2,"254":3,"255":1,"257":4,"258":1,"259":1,"263":2,"264":3,"267":2,"268":2,"270":5,"272":3,"276":2,"277":5,"278":1,"280":1,"282":2,"283":1,"286":2,"287":1,"288":3,"289":1,"290":4,"291":2,"293":3,"294":2,"299":1,"300":1,"301":1,"303":2,"304":2,"305":3,"307":2,"309":1,"310":4,"312":3,"313":1,"314":1,"315":1,"317":1,"318":8,"319":4,"320":10,"322":2,"323":2,"324":2,"325":3,"326":10,"327":1,"328":1,"331":10,"332":2,"333":1,"336":3,"337":2,"338":1,"339":1,"340":1,"342":4,"343":2,"344":2,"345":2,"349":4,"351":2,"352":1,"354":6,"355":2,"356":1,"359":7,"362":4,"364":1,"365":5,"367":1,"368":1,"369":1,"370":5,"371":4,"373":1,"374":2,"375":3,"376":4,"377":2,"384":1,"389":1,"401":1,"405":4,"407":3,"408":1,"410":1,"411":1,"412":1,"413":2,"414":2,"418":6,"419":1,"420":1,"421":1,"423":3,"424":3,"431":6,"437":1,"440":2,"446":1,"448":3,"449":2,"450":16,"451":2,"453":6,"454":2,"455":2,"456":3,"457":8,"458":2,"459":1,"460":2,"461":1,"462":7,"463":2,"464":1,"466":3,"467":2,"471":2,"472":4,"474":4,"475":4,"478":4,"479":3,"482":3,"483":4,"484":1,"490":3,"491":4,"492":4,"541":3,"561":1,"573":1,"591":1}}],["чтобы",{"0":{"162":1,"384":1},"2":{"2":1,"7":1,"16":1,"22":1,"56":1,"68":1,"83":1,"89":1,"95":1,"96":1,"98":1,"112":2,"113":1,"123":1,"134":1,"142":1,"144":1,"146":1,"156":1,"159":2,"160":1,"165":2,"166":1,"170":1,"172":2,"173":2,"177":1,"179":1,"183":1,"186":2,"189":1,"191":3,"194":1,"196":2,"202":1,"208":1,"209":5,"210":1,"211":1,"212":1,"213":2,"214":3,"215":2,"216":1,"217":4,"218":3,"219":1,"223":1,"225":2,"226":4,"229":1,"233":1,"234":1,"240":2,"242":2,"243":1,"244":1,"245":2,"246":1,"249":3,"251":1,"252":1,"254":1,"255":1,"257":1,"259":1,"261":1,"263":6,"265":1,"266":1,"267":1,"268":2,"269":1,"270":3,"276":1,"277":2,"278":2,"280":1,"282":1,"287":1,"293":1,"303":1,"304":3,"306":1,"311":2,"315":3,"316":1,"318":1,"319":1,"320":1,"321":1,"323":2,"325":3,"327":1,"330":2,"331":4,"335":2,"336":1,"337":1,"338":1,"339":1,"342":1,"343":1,"345":2,"349":3,"351":1,"352":2,"353":1,"354":1,"356":1,"357":1,"358":1,"359":1,"361":1,"362":3,"363":3,"365":1,"368":1,"370":1,"371":1,"373":1,"375":1,"377":3,"379":1,"399":1,"404":1,"405":2,"406":1,"407":2,"411":1,"413":2,"417":1,"418":2,"419":2,"420":1,"424":1,"425":2,"427":1,"430":1,"433":1,"437":1,"440":2,"448":2,"450":1,"452":1,"456":2,"457":1,"458":3,"459":2,"460":2,"462":1,"463":2,"465":2,"467":1,"471":3,"474":1,"477":1,"481":1,"482":2,"491":2,"492":5,"538":1,"541":2,"549":1,"562":1}}],["чипом",{"2":{"376":1}}],["чипы",{"0":{"171":1}}],["читать",{"2":{"491":1}}],["читателя",{"2":{"375":2}}],["читателю",{"2":{"4":1,"279":1}}],["читаемая",{"2":{"491":1}}],["читаем",{"2":{"457":1}}],["читаемом",{"2":{"446":1}}],["читаемым",{"2":{"240":1,"293":1}}],["читает",{"2":{"194":1}}],["читается",{"2":{"122":1,"214":1}}],["читают",{"2":{"197":1}}],["читабельней",{"2":{"114":1}}],["чище",{"2":{"83":1}}],["чисел",{"2":{"142":2,"169":1,"179":1,"326":2,"446":1,"458":1,"570":1}}],["чистого",{"2":{"538":1}}],["чисто",{"2":{"354":1,"483":1}}],["чистоте",{"2":{"293":1}}],["чистоту",{"2":{"185":1,"211":1}}],["чистом",{"2":{"264":1,"331":1,"332":1,"377":1,"490":1,"538":1}}],["чистая",{"2":{"232":1,"405":1,"571":1}}],["чистым",{"2":{"283":1,"293":1,"405":1}}],["чистые",{"2":{"168":1}}],["чистый",{"2":{"78":1,"89":1,"287":1,"309":1,"487":1}}],["чистую",{"2":{"141":1}}],["чистим",{"2":{"105":1}}],["числовом",{"2":{"457":1}}],["число",{"2":{"111":1,"117":1,"368":1,"418":1,"455":1,"483":1}}],["числом",{"2":{"50":1,"114":1,"325":1}}],["числа",{"2":{"106":1,"176":1,"179":1,"223":1,"232":1,"324":1,"368":1,"455":1,"579":1}}],["числе",{"2":{"7":1,"13":1,"23":1,"25":1,"133":1,"325":1,"365":1,"542":1}}],["честь",{"2":{"197":1}}],["чекбокс",{"2":{"170":1,"171":1}}],["чекбоксы",{"0":{"170":1},"2":{"170":1}}],["человеческий",{"2":{"286":1}}],["человеческой",{"2":{"142":1}}],["человеку",{"2":{"142":1}}],["человекоемкая",{"2":{"466":1}}],["человекоемкой",{"2":{"283":1}}],["человеком",{"2":{"157":1,"453":1}}],["человеко",{"2":{"106":1,"155":1}}],["человека",{"2":{"77":1}}],["человек",{"2":{"26":1,"285":1,"293":1,"441":1,"491":2}}],["черной",{"2":{"331":1}}],["черные",{"2":{"289":1}}],["чередоваться",{"2":{"483":1}}],["черед",{"2":{"323":1}}],["через",{"0":{"535":1},"1":{"536":1},"2":{"2":1,"23":1,"34":2,"35":1,"36":1,"40":1,"41":1,"53":1,"56":2,"59":2,"85":1,"89":1,"96":3,"113":1,"114":1,"122":1,"123":5,"124":1,"126":1,"127":1,"142":1,"143":1,"144":1,"145":2,"146":1,"151":1,"152":1,"160":2,"187":1,"208":1,"248":1,"254":1,"255":1,"263":1,"264":2,"270":1,"277":3,"278":1,"279":1,"280":1,"291":1,"293":1,"300":1,"301":1,"303":1,"305":1,"313":2,"315":1,"333":1,"335":1,"340":2,"341":1,"344":1,"364":1,"368":1,"375":2,"377":1,"409":1,"412":1,"413":1,"414":2,"424":1,"432":1,"433":2,"437":1,"440":1,"441":1,"446":2,"450":1,"455":1,"468":1,"469":1,"483":1,"490":1,"508":1,"515":1,"517":1,"531":3,"538":1,"543":1,"549":1,"581":1,"591":2}}],["черты",{"2":{"287":1,"364":1}}],["чертой",{"2":{"143":1}}],["чертежа",{"2":{"69":1}}],["чего",{"0":{"65":1},"2":{"40":1,"96":1,"123":1,"167":1,"179":1,"198":1,"202":1,"356":1,"371":1,"446":1,"449":1,"450":1,"482":1,"570":1}}],["четкая",{"2":{"433":1}}],["четких",{"2":{"183":1}}],["четкий",{"2":{"169":1}}],["четкую",{"2":{"138":1}}],["четкого",{"2":{"331":1}}],["четкое",{"2":{"210":1,"221":1,"431":1,"448":1}}],["четкость",{"2":{"126":1}}],["четко",{"2":{"9":1,"158":1,"159":2,"225":1,"245":1,"278":1,"289":1,"371":1,"413":1}}],["четырех",{"2":{"28":1,"142":1}}],["четыре",{"2":{"20":1,"114":1,"123":1,"142":1,"543":1}}],["чему",{"2":{"186":1,"254":1,"266":1,"410":1}}],["чем",{"2":{"2":1,"50":1,"96":1,"114":1,"122":1,"154":1,"155":1,"158":1,"164":1,"166":3,"187":1,"200":1,"209":1,"210":1,"218":1,"222":1,"226":1,"233":1,"242":1,"247":1,"252":1,"255":1,"266":1,"270":3,"277":1,"282":1,"292":2,"294":1,"310":1,"325":2,"326":1,"328":1,"331":4,"343":1,"345":1,"347":1,"352":1,"354":2,"360":1,"361":1,"362":1,"363":1,"365":1,"371":1,"376":1,"377":1,"415":1,"423":1,"425":1,"440":2,"446":1,"450":1,"453":2,"454":1,"466":1,"472":1,"474":1,"478":1,"482":1,"483":1,"487":1,"490":1}}],["кб",{"2":{"574":1}}],["киты",{"2":{"541":1}}],["кстати",{"2":{"308":1}}],["квадрат",{"2":{"286":1}}],["квадратов",{"2":{"184":1}}],["кэша",{"2":{"589":1}}],["кэширующий",{"2":{"450":1}}],["кэшированный",{"2":{"278":1}}],["кэширования",{"2":{"270":1,"277":1,"278":1,"424":1,"589":1}}],["кэшированием",{"2":{"277":1}}],["кэширование",{"2":{"121":1,"354":1,"492":1,"589":1}}],["кэшировать",{"2":{"270":1,"277":1,"278":2}}],["кэшу",{"2":{"278":1}}],["кэш",{"2":{"278":8,"318":1,"589":1}}],["кэшем",{"2":{"579":1}}],["кэше",{"2":{"234":1,"278":1}}],["кем",{"2":{"222":1}}],["кебаба",{"2":{"184":1}}],["книжка",{"2":{"491":1}}],["книга",{"0":{"383":1,"388":1},"1":{"389":1,"390":1,"391":1,"392":1,"393":1,"394":1,"395":1,"396":1,"397":1,"398":1,"399":1,"400":1},"2":{"377":1,"382":2,"383":1,"384":1,"385":1,"491":2,"502":1}}],["книгами",{"2":{"160":1}}],["книгу",{"0":{"385":1},"2":{"166":1}}],["книг",{"2":{"160":1}}],["книги",{"0":{"381":1,"384":1},"2":{"140":1,"151":1,"156":1,"157":1,"160":1,"186":1,"189":1,"209":1,"211":1,"213":1,"224":1,"227":1,"243":1,"245":1,"263":1,"264":1,"279":1,"283":2,"290":1,"294":2,"327":2,"330":1,"368":1,"370":1,"374":1,"377":2,"384":1,"386":1,"387":2,"452":1,"475":1,"491":2}}],["книге",{"0":{"235":1},"1":{"236":1,"237":1,"238":1,"239":1,"240":1},"2":{"132":1,"153":1,"156":1,"208":2,"213":1,"221":3,"222":1,"226":2,"233":1,"235":2,"241":1,"255":1,"257":2,"258":1,"289":1,"291":1,"295":1,"313":1,"315":1,"320":2,"362":1,"384":3,"404":1}}],["кнопок",{"2":{"159":1,"202":1,"203":2,"263":1}}],["кнопкой",{"2":{"225":1,"275":1,"410":1}}],["кнопку",{"2":{"187":1,"209":1,"217":1,"234":1,"277":2,"278":1,"340":1,"405":1,"462":3,"483":1}}],["кнопке",{"2":{"182":1,"233":1,"406":1}}],["кнопкам",{"2":{"483":1}}],["кнопками",{"2":{"263":1}}],["кнопка",{"2":{"158":1,"164":2,"201":1,"218":1,"233":1,"277":4}}],["кнопки",{"2":{"88":2,"159":2,"164":1,"170":1,"172":1,"203":2,"263":1,"375":1,"428":1,"448":1}}],["кусочки",{"2":{"483":1}}],["кучу",{"2":{"482":1}}],["куча",{"2":{"450":1}}],["кучи",{"2":{"446":1,"570":1}}],["кулер",{"2":{"441":1}}],["кулисами",{"2":{"319":1}}],["куда",{"2":{"160":1,"264":1,"371":1,"372":1,"441":1,"482":1}}],["купить",{"0":{"385":1},"2":{"152":2,"425":1}}],["куку",{"2":{"123":1}}],["курсы",{"2":{"155":1,"491":1}}],["курсор",{"2":{"100":1,"164":1}}],["курсов",{"2":{"64":1,"491":1}}],["курс",{"2":{"2":1,"483":1,"491":1}}],["кто",{"2":{"39":1,"68":1,"157":1,"287":1,"318":1,"466":1,"479":1,"482":1,"492":1}}],["креативности",{"2":{"187":1,"466":1}}],["креативность",{"2":{"167":1}}],["крутятся",{"2":{"441":1}}],["крутится",{"2":{"176":1}}],["кругозор",{"2":{"491":1}}],["круговой",{"2":{"264":2}}],["круга",{"2":{"204":1,"541":1}}],["круглой",{"2":{"171":1}}],["кружок",{"2":{"173":1,"176":1}}],["крупнейший",{"2":{"377":1}}],["крупные",{"2":{"193":1}}],["крупных",{"2":{"124":1,"207":1,"431":1,"448":1,"453":1}}],["крупномасштабного",{"2":{"396":1}}],["крупного",{"2":{"173":1,"223":1}}],["крупной",{"2":{"145":1}}],["криптовалюты",{"2":{"377":3}}],["криптографическими",{"2":{"377":1}}],["криптографические",{"2":{"377":1}}],["криптографическую",{"2":{"371":1}}],["криптографии",{"2":{"376":1}}],["криптография",{"2":{"123":1}}],["критериям",{"2":{"277":1,"280":1}}],["критериями",{"2":{"39":1}}],["критике",{"2":{"218":1}}],["критика",{"0":{"218":1,"265":1},"2":{"218":1}}],["критически",{"2":{"219":1,"264":1}}],["критической",{"2":{"174":1}}],["критичных",{"2":{"123":1}}],["кроулером",{"2":{"492":1}}],["кровеносной",{"2":{"286":1}}],["кровлю",{"2":{"26":1}}],["кроссплатформенными",{"2":{"208":1}}],["крошкам",{"2":{"182":1}}],["крошки",{"0":{"182":1},"2":{"182":2}}],["кроче",{"2":{"160":1}}],["кроме",{"2":{"69":1,"96":1,"111":1,"126":1,"178":1,"186":1,"195":1,"209":1,"214":1,"226":3,"233":1,"266":1,"270":3,"275":1,"277":1,"292":1,"293":1,"309":1,"320":1,"329":1,"334":1,"340":1,"349":1,"364":1,"369":1,"424":3,"431":1,"440":1,"449":1,"450":2,"468":1,"482":1,"484":1,"491":1,"492":2}}],["кроется",{"2":{"68":1}}],["крайний",{"2":{"259":1}}],["крайние",{"2":{"257":1,"345":1}}],["крайних",{"2":{"243":1,"315":2,"454":1}}],["крайними",{"2":{"214":1,"368":1}}],["крайней",{"2":{"207":1,"307":1,"319":1,"324":1,"384":1}}],["края",{"2":{"164":1}}],["кражей",{"2":{"123":1}}],["краткий",{"0":{"295":1},"1":{"296":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"326":1},"2":{"171":1,"320":1,"417":1}}],["кратким",{"2":{"127":1,"168":1,"275":1}}],["краткосрочной",{"2":{"294":1}}],["краткости",{"2":{"247":1,"254":1,"263":2,"374":1}}],["кратко",{"2":{"223":1,"242":1,"408":1}}],["кратковременной",{"2":{"166":1}}],["кратковременную",{"2":{"166":1}}],["краткого",{"2":{"142":1}}],["краткое",{"0":{"540":1},"2":{"118":1,"215":1,"301":1}}],["краткая",{"0":{"218":1},"2":{"50":1}}],["красное",{"2":{"456":1}}],["красным",{"2":{"280":1,"457":1}}],["красе",{"2":{"371":1}}],["красивую",{"2":{"490":1}}],["красиво",{"2":{"349":1,"492":1}}],["красивые",{"2":{"62":1}}],["красивый",{"2":{"26":1,"96":1}}],["красочный",{"2":{"191":1}}],["красоты",{"2":{"85":1}}],["клонирования",{"2":{"467":1}}],["клонируемого",{"2":{"342":1}}],["клонируем",{"2":{"120":1,"342":1}}],["клон",{"2":{"342":1}}],["клетки",{"2":{"286":1}}],["класть",{"2":{"437":1,"450":1}}],["классе",{"2":{"309":1}}],["классу",{"2":{"226":1,"310":1}}],["классом",{"2":{"216":1,"334":1,"590":1}}],["классов",{"0":{"238":1},"2":{"23":1,"211":1,"212":1,"222":2,"234":1,"258":1,"264":1,"287":1,"289":1,"296":1,"450":1,"460":1,"483":1,"490":1,"542":1}}],["классы",{"2":{"211":1,"212":1,"213":1,"217":1,"257":2,"263":1,"320":1,"450":1}}],["классифицируются",{"2":{"295":1}}],["классификаций",{"2":{"299":1}}],["классификация",{"2":{"272":1,"273":1,"274":1,"275":1}}],["классификаторов",{"2":{"171":1}}],["классической",{"2":{"166":1}}],["классический",{"2":{"201":1,"226":1,"258":1,"491":1}}],["классически",{"2":{"67":1}}],["классических",{"2":{"50":1}}],["классическим",{"2":{"6":1}}],["класс",{"2":{"96":1,"177":1,"217":1,"288":1,"291":1,"304":2,"305":2,"307":1,"310":2,"437":1,"506":1}}],["классами",{"2":{"411":1,"483":1}}],["классах",{"2":{"291":1}}],["класса",{"2":{"20":1,"264":1,"304":3,"305":1,"313":1,"316":1,"342":1,"450":1,"543":1}}],["кладем",{"2":{"315":1}}],["кладет",{"2":{"123":1}}],["кладется",{"2":{"111":1}}],["клавиатуры",{"2":{"441":1}}],["клавиатуру",{"2":{"441":1}}],["клавиатурой",{"2":{"178":1}}],["клавиатура",{"2":{"166":1}}],["клавишу",{"2":{"215":1,"217":1}}],["клавиши",{"2":{"170":1,"209":1}}],["клавиш",{"2":{"98":1,"166":1,"209":1}}],["клавишей",{"2":{"98":1}}],["ключу",{"2":{"255":1,"446":1,"570":1}}],["ключ",{"2":{"59":2,"319":1,"341":1,"362":1,"371":4,"424":1}}],["ключом",{"2":{"59":1,"255":1,"319":1,"418":1}}],["ключей",{"2":{"253":1,"377":2}}],["ключевая",{"2":{"376":1,"393":1}}],["ключевую",{"2":{"354":1}}],["ключевое",{"2":{"226":2,"326":1,"414":1}}],["ключевой",{"2":{"222":1}}],["ключевые",{"2":{"337":1,"352":1,"389":1,"454":1}}],["ключевыми",{"2":{"395":1}}],["ключевым",{"2":{"145":1,"318":1,"326":1,"336":1,"405":1}}],["ключевых",{"2":{"64":1,"141":1,"354":1,"418":1,"453":1,"454":1}}],["ключе",{"2":{"58":1}}],["ключа",{"2":{"58":1,"59":1,"255":1,"371":1}}],["климов",{"2":{"491":1}}],["клише",{"2":{"291":1}}],["клиентской",{"2":{"338":1}}],["клиентское",{"2":{"337":1}}],["клиентского",{"2":{"320":1}}],["клиентском",{"2":{"317":1}}],["клиенту",{"2":{"316":1,"339":1,"346":1,"349":1,"370":1}}],["клиенты",{"2":{"316":1,"354":1}}],["клиентов",{"2":{"157":1,"316":2}}],["клиентом",{"2":{"152":1,"319":1,"323":1,"349":1,"492":1}}],["клиентами",{"2":{"338":1}}],["клиентам",{"2":{"125":1,"476":1}}],["клиента",{"2":{"125":3,"318":3,"323":1,"335":2,"338":1,"372":1,"492":1,"545":1,"589":2}}],["клиент",{"0":{"6":1},"2":{"9":1,"68":1,"126":2,"318":2,"320":1,"339":1,"371":1,"441":2}}],["клику",{"2":{"552":1}}],["клике",{"2":{"111":1}}],["клик",{"2":{"3":1,"217":1}}],["казаться",{"2":{"492":1}}],["казалось",{"2":{"176":1}}],["капот",{"2":{"491":1}}],["капотом",{"2":{"127":1,"279":1,"457":1,"482":1}}],["калькулятором",{"2":{"455":1}}],["калькулятор",{"2":{"455":1}}],["кадров",{"2":{"331":2}}],["кадрами",{"2":{"331":1}}],["камне",{"2":{"222":1}}],["каркас",{"2":{"538":1,"540":1,"541":1,"542":1,"579":1}}],["каркаса",{"2":{"207":1,"209":2,"219":1,"542":2}}],["карьере",{"2":{"387":1}}],["кардинально",{"2":{"350":1}}],["кардинальность",{"2":{"314":1}}],["каруселей",{"2":{"175":1}}],["карусели",{"2":{"175":2}}],["каруселью",{"2":{"191":1}}],["карусель",{"0":{"175":1,"444":1},"2":{"175":3}}],["карты",{"2":{"376":1}}],["карточкой",{"2":{"390":1}}],["карточка",{"2":{"160":1}}],["карточках",{"2":{"118":1}}],["карточками",{"2":{"111":1}}],["карточке",{"0":{"111":1},"2":{"111":1}}],["карточки",{"2":{"85":1,"117":3,"160":2,"161":1,"264":1}}],["картинка",{"2":{"439":1}}],["картинками",{"2":{"85":1,"492":1}}],["картинки",{"2":{"437":6,"492":2}}],["картинке",{"2":{"228":1,"492":1}}],["картинок",{"2":{"86":1,"118":1,"439":1}}],["картины",{"2":{"26":1,"286":1}}],["картину",{"2":{"26":1}}],["канал",{"0":{"503":1}}],["канала",{"2":{"122":1,"362":1}}],["кандидатов",{"2":{"482":1}}],["кануть",{"2":{"157":1}}],["каскадно",{"2":{"376":1}}],["каскадные",{"2":{"221":1}}],["касались",{"2":{"403":1}}],["касается",{"2":{"343":1,"362":1,"450":1}}],["касающиеся",{"2":{"477":1}}],["касающимися",{"2":{"255":1}}],["касаются",{"2":{"68":1,"296":1,"297":1}}],["кастомные",{"2":{"490":1}}],["кастомных",{"2":{"483":1}}],["кастомными",{"2":{"440":1}}],["кастомный",{"2":{"425":1,"562":2}}],["кастомную",{"2":{"124":1}}],["кастомизированный",{"2":{"109":1}}],["кастомизировать",{"2":{"63":1}}],["кастомизацию",{"2":{"108":1,"114":1}}],["кастомизация",{"0":{"103":1},"1":{"104":1,"105":1,"106":1,"107":1,"108":1,"109":1},"2":{"538":1,"542":1,"591":1}}],["кастомизации",{"2":{"77":1,"538":1,"540":1,"579":1}}],["качество",{"2":{"69":1,"350":1,"490":1,"501":2}}],["качества",{"2":{"65":1,"69":1,"439":1,"451":1,"453":1,"491":1}}],["качественные",{"2":{"491":2}}],["качественный",{"2":{"441":1}}],["качественно",{"2":{"491":1}}],["качественного",{"2":{"451":1}}],["качественное",{"2":{"157":1}}],["качестве",{"2":{"17":1,"39":1,"130":1,"131":1,"135":1,"140":1,"142":1,"159":1,"179":1,"189":1,"208":1,"209":3,"215":1,"216":1,"217":1,"218":1,"223":1,"226":1,"252":2,"253":3,"257":1,"258":1,"260":1,"270":1,"282":1,"286":1,"288":1,"290":2,"300":1,"305":1,"307":1,"311":3,"312":1,"315":2,"319":2,"324":1,"325":1,"332":1,"333":1,"335":3,"337":1,"338":1,"339":1,"340":1,"342":1,"343":2,"344":1,"347":2,"349":1,"356":1,"359":3,"362":2,"363":1,"364":1,"368":1,"373":1,"374":1,"376":1,"377":2,"378":1,"391":1,"406":1,"414":2,"418":1,"432":1,"450":1,"455":2,"456":1,"457":2,"461":2,"477":1,"492":1,"502":1,"538":2,"545":1,"562":1}}],["кабинетом",{"2":{"59":1}}],["кабинета",{"2":{"36":1,"431":1,"449":1}}],["кабинет",{"2":{"29":1,"33":1,"80":1}}],["катастрофы",{"2":{"167":1}}],["каталоги",{"2":{"356":1,"472":1}}],["каталогов",{"0":{"134":1},"2":{"127":1,"134":1,"143":3,"209":1,"210":3,"356":1,"471":1}}],["каталогом",{"2":{"11":1,"29":1,"107":1}}],["каталогу",{"2":{"104":1}}],["каталогах",{"2":{"261":1}}],["каталога",{"2":{"16":1,"80":1,"431":1,"449":1}}],["каталоге",{"2":{"11":1,"117":1,"145":1,"146":1,"148":1,"209":2,"212":1,"216":1,"261":1,"338":1,"356":1,"358":1,"413":1,"460":1,"461":1,"471":1}}],["каталог",{"2":{"11":3,"33":2,"83":1,"104":2,"148":1,"149":1,"209":3,"210":2,"278":1,"356":1,"456":1,"471":1}}],["категорией",{"2":{"450":1}}],["категорически",{"2":{"258":1}}],["категоризации",{"2":{"186":1}}],["категорию",{"2":{"23":1,"46":1,"106":1,"176":1}}],["категорий",{"2":{"3":2,"4":1,"11":3,"23":1,"38":1,"44":1,"80":1,"108":1,"171":1}}],["категории",{"2":{"3":2,"4":1,"7":1,"11":2,"16":2,"23":1,"30":1,"31":1,"44":1,"50":1,"82":1,"83":1,"106":1,"117":3,"145":1,"193":1,"280":1,"354":1,"369":1}}],["категориям",{"2":{"104":1,"145":1,"180":1,"290":1}}],["категориями",{"2":{"46":1,"107":1,"483":1}}],["категориях",{"2":{"46":1,"281":1}}],["категория",{"0":{"16":1,"116":1},"1":{"117":1,"118":1},"2":{"3":1,"16":1,"83":1,"111":1,"280":1}}],["каждым",{"2":{"209":1,"218":1,"339":1,"371":1,"377":1,"492":1}}],["каждый",{"2":{"9":2,"41":1,"89":1,"123":2,"127":1,"131":2,"141":1,"142":2,"147":1,"152":1,"158":2,"168":1,"178":1,"179":1,"210":1,"217":1,"222":1,"226":2,"234":1,"264":1,"273":2,"275":1,"280":1,"286":1,"288":1,"291":1,"304":1,"315":2,"318":1,"320":2,"331":4,"339":1,"344":1,"345":1,"354":1,"359":1,"362":1,"369":1,"371":1,"376":1,"377":1,"405":1,"406":1,"408":2,"409":1,"410":2,"413":3,"414":1,"417":1,"418":3,"430":1,"431":3,"440":1,"448":3,"449":1,"450":3,"456":1,"466":1,"482":1,"545":1}}],["каждая",{"2":{"95":1,"151":1,"159":1,"160":1,"182":1,"216":1,"231":1,"258":1,"263":1,"277":1,"278":1,"320":1,"326":2,"349":1,"371":2,"431":2,"448":2,"450":1,"457":1,"466":1}}],["каждую",{"2":{"67":1,"225":1,"310":1,"311":1,"315":1,"362":1,"403":1,"429":1,"448":1,"457":1}}],["каждой",{"2":{"96":1,"100":1,"111":1,"145":1,"148":1,"152":1,"157":1,"160":1,"178":1,"182":1,"207":1,"215":1,"216":1,"217":1,"270":1,"279":1,"280":1,"320":1,"326":1,"338":1,"342":1,"343":1,"371":1,"377":1,"451":1,"457":2,"472":1}}],["каждому",{"2":{"51":1,"123":1,"207":1,"257":2,"359":1,"362":1,"364":1,"369":1,"406":1,"424":1}}],["каждом",{"2":{"41":1,"89":2,"123":1,"170":1,"211":1,"222":1,"264":1,"283":2,"284":1,"291":1,"331":1,"345":1,"357":1,"365":1,"371":1,"412":1,"418":2,"431":2,"449":1,"482":1}}],["каждого",{"2":{"13":1,"23":1,"79":1,"80":1,"127":1,"148":1,"152":3,"155":1,"160":1,"178":1,"179":1,"186":1,"191":1,"214":1,"217":3,"222":1,"225":1,"234":1,"247":3,"251":2,"264":1,"275":1,"278":1,"279":1,"304":1,"344":1,"362":2,"365":1,"366":1,"382":1,"406":1,"410":1,"418":3,"422":1,"424":2,"440":1,"449":1,"456":1,"463":1,"467":1,"543":1,"589":1}}],["каждое",{"2":{"3":1,"69":1,"226":1,"228":1,"238":1,"264":1,"314":1,"318":1,"337":1,"344":1,"418":1,"462":3}}],["кажется",{"2":{"3":1,"96":1,"195":1,"226":1,"331":1,"412":1}}],["какая",{"2":{"423":1,"441":1,"464":2}}],["какими",{"2":{"267":1}}],["каким",{"2":{"176":1,"204":1,"282":1,"317":2,"460":1}}],["каких",{"2":{"155":1,"205":1,"222":1,"325":1,"351":1,"356":1,"414":1,"492":1,"538":1,"571":1}}],["какие",{"0":{"448":1},"2":{"4":1,"16":2,"23":1,"68":2,"154":3,"155":1,"221":1,"224":1,"242":1,"245":3,"247":1,"248":2,"249":2,"259":1,"267":1,"268":2,"278":1,"282":1,"314":1,"316":1,"328":1,"351":2,"360":1,"371":1,"423":1,"426":1,"433":1,"443":1,"446":1,"482":1,"491":2,"535":1}}],["какую",{"2":{"20":1,"96":1,"206":1,"223":1,"247":1,"331":1,"478":1,"541":1}}],["каковы",{"0":{"284":1},"2":{"155":1,"220":2,"282":2,"351":1,"379":3}}],["каком",{"2":{"124":1,"143":1,"176":1}}],["какого",{"2":{"61":1,"172":1,"184":1,"208":1,"331":1}}],["какое",{"2":{"12":1,"221":1,"412":1}}],["какой",{"2":{"3":1,"20":1,"96":1,"131":1,"176":1,"214":1,"222":1,"223":1,"246":1,"252":1,"264":1,"286":1,"309":1,"310":1,"319":1,"376":1,"439":1,"441":1,"471":2,"484":1,"485":1}}],["как",{"0":{"513":1},"2":{"2":1,"3":1,"9":2,"10":1,"12":1,"22":1,"23":2,"25":1,"26":1,"39":1,"43":2,"46":1,"47":1,"63":1,"68":5,"69":1,"79":1,"82":1,"83":1,"88":1,"96":2,"111":1,"112":1,"114":1,"117":1,"118":1,"123":5,"124":3,"125":1,"126":4,"127":1,"129":2,"130":1,"132":3,"135":1,"136":1,"142":4,"143":1,"145":1,"148":1,"149":1,"150":1,"151":2,"153":1,"155":3,"157":7,"158":4,"160":1,"161":2,"162":1,"163":2,"164":2,"165":1,"166":2,"169":1,"171":1,"172":1,"175":4,"176":1,"179":4,"180":1,"184":1,"186":4,"187":1,"189":3,"190":4,"191":2,"192":1,"193":1,"194":1,"195":3,"197":1,"202":1,"204":1,"207":2,"208":1,"209":5,"210":4,"211":6,"212":1,"213":5,"214":1,"215":1,"216":1,"217":9,"218":5,"219":2,"220":1,"221":1,"222":8,"223":2,"224":6,"225":4,"226":13,"229":1,"230":2,"232":2,"234":1,"240":1,"243":3,"244":1,"245":3,"246":3,"247":2,"248":2,"250":1,"251":1,"252":4,"253":4,"254":3,"255":5,"256":1,"257":5,"258":1,"259":1,"262":1,"263":4,"264":9,"265":1,"266":1,"267":3,"268":4,"270":5,"271":2,"272":2,"273":2,"274":1,"275":2,"276":2,"277":6,"278":5,"279":1,"280":1,"281":2,"283":2,"284":1,"286":3,"287":2,"288":3,"289":2,"290":4,"291":3,"293":2,"294":2,"304":1,"307":1,"308":1,"309":1,"310":2,"311":2,"312":2,"314":1,"315":3,"316":1,"318":5,"319":6,"320":3,"321":1,"323":1,"324":2,"325":7,"326":6,"327":2,"328":1,"329":4,"331":9,"333":4,"335":6,"337":2,"338":5,"339":2,"340":4,"342":2,"343":2,"344":5,"345":2,"347":3,"349":3,"350":1,"351":2,"352":4,"354":8,"355":1,"356":3,"357":3,"359":9,"361":1,"362":8,"363":1,"364":2,"365":2,"368":4,"369":2,"370":2,"371":10,"374":2,"375":2,"376":5,"377":8,"378":3,"379":2,"382":1,"383":1,"384":4,"391":1,"395":1,"397":1,"398":2,"403":2,"404":1,"405":4,"406":2,"407":1,"410":1,"411":3,"412":9,"413":7,"414":3,"415":2,"417":5,"418":3,"419":1,"420":3,"421":3,"423":2,"424":2,"427":1,"430":3,"431":4,"433":3,"437":3,"439":1,"440":3,"441":3,"446":5,"448":4,"450":8,"451":2,"453":6,"454":1,"455":2,"456":1,"457":4,"458":1,"459":3,"461":1,"462":8,"466":3,"467":1,"471":1,"472":4,"474":2,"475":4,"476":1,"477":2,"479":1,"481":3,"482":1,"483":1,"489":2,"490":4,"491":6,"492":10,"502":2,"508":2,"513":1,"515":2,"520":1,"521":1,"531":1,"532":1,"541":2,"542":2,"543":1,"547":1,"568":1,"579":1}}],["коврике",{"2":{"492":1}}],["кошелек",{"2":{"377":3}}],["кошельки",{"2":{"377":2}}],["кошелька",{"2":{"377":6}}],["кошельками",{"2":{"377":1}}],["кошельках",{"2":{"377":1}}],["кошельков",{"2":{"377":2}}],["кошельком",{"2":{"377":2}}],["кошмар",{"2":{"20":1}}],["коем",{"2":{"299":1,"370":1,"418":1}}],["кого",{"0":{"383":1},"2":{"293":3,"318":1}}],["когда",{"0":{"301":1},"2":{"3":1,"30":1,"41":1,"62":1,"111":1,"123":4,"124":1,"125":1,"131":4,"134":1,"142":1,"145":1,"151":1,"153":1,"160":1,"166":1,"167":1,"168":1,"169":1,"170":4,"172":1,"178":2,"179":3,"186":1,"187":1,"190":1,"191":1,"201":1,"210":2,"214":1,"217":2,"220":2,"221":1,"222":7,"223":1,"226":3,"229":1,"230":1,"232":2,"233":1,"234":4,"243":1,"246":1,"248":2,"249":1,"254":4,"255":1,"256":1,"259":2,"262":1,"263":1,"265":1,"270":1,"273":1,"275":1,"276":1,"277":6,"283":1,"287":2,"288":3,"290":4,"293":2,"301":4,"306":1,"309":1,"314":1,"315":1,"319":4,"320":1,"324":1,"325":2,"326":1,"327":2,"331":5,"332":1,"337":1,"339":1,"340":1,"342":2,"345":1,"347":1,"354":3,"359":1,"361":1,"362":2,"368":1,"369":1,"374":1,"375":2,"379":1,"403":1,"405":1,"410":1,"412":2,"415":2,"417":1,"418":1,"420":1,"423":1,"431":1,"433":1,"437":1,"446":2,"450":3,"453":1,"454":1,"458":1,"462":1,"463":1,"466":2,"471":1,"475":1,"478":1,"483":2,"490":1,"491":1,"492":3}}],["координирует",{"2":{"247":1}}],["координировать",{"2":{"222":1}}],["координация",{"2":{"222":1,"431":1,"448":1}}],["координации",{"2":{"222":1}}],["ко",{"2":{"145":2,"165":1,"210":1,"284":1,"293":1,"413":1,"450":1,"459":1,"483":1}}],["косой",{"2":{"143":1,"364":1}}],["коридоре",{"2":{"492":1}}],["коричневый",{"2":{"159":1}}],["корпоративном",{"2":{"467":1}}],["корпоративных",{"2":{"142":1,"155":1}}],["корня",{"2":{"364":1}}],["корневую",{"2":{"134":1}}],["корневом",{"2":{"146":1,"255":2,"333":1,"413":1,"432":2}}],["корневому",{"2":{"129":1}}],["корневого",{"2":{"130":1,"136":1,"246":1}}],["корневой",{"2":{"130":1,"143":1,"210":1,"255":1,"456":1,"471":2}}],["корне",{"2":{"122":1,"128":1,"143":1,"147":1,"149":1,"210":1,"212":1,"272":1,"278":1,"464":1}}],["корень",{"2":{"210":1,"264":1,"278":1,"424":1}}],["коренится",{"2":{"158":1}}],["коробкой",{"2":{"491":1}}],["коробки",{"2":{"211":1,"279":1,"456":1,"460":1}}],["короче",{"2":{"175":1,"339":1}}],["коротким",{"0":{"292":1}}],["короткий",{"2":{"171":1,"174":1,"214":1,"339":1,"461":1,"491":1}}],["короткое",{"2":{"174":1,"273":1}}],["короткоживущий",{"2":{"123":1}}],["корректировку",{"2":{"500":1}}],["корректировки",{"2":{"67":1}}],["корректно",{"2":{"457":1}}],["корректном",{"2":{"210":1}}],["корректный",{"2":{"149":1,"309":1,"508":1}}],["корректные",{"2":{"83":1}}],["корзину",{"0":{"195":1},"2":{"195":3,"430":1,"448":1}}],["корзины",{"2":{"12":1,"95":1,"107":1,"192":1,"199":1,"202":1}}],["корзина",{"2":{"4":1,"29":1,"33":1,"80":1}}],["коллеги",{"2":{"491":1}}],["коллекцию",{"2":{"343":2}}],["коллекций",{"2":{"213":1,"231":1,"343":1}}],["коллекция",{"2":{"211":1,"222":1,"258":1}}],["коллекции",{"2":{"16":1,"305":1,"343":1}}],["коллизий",{"2":{"255":1}}],["коллизия",{"2":{"251":1}}],["коллизии",{"2":{"179":1}}],["коллоцированный",{"2":{"145":1}}],["количеством",{"2":{"138":1,"145":1,"354":1,"377":1,"446":1,"479":1}}],["количество",{"2":{"131":1,"154":1,"158":1,"159":1,"165":2,"166":1,"179":1,"186":2,"197":1,"211":1,"214":1,"217":2,"221":1,"246":1,"252":1,"292":1,"315":1,"331":1,"365":1,"370":1,"371":1,"374":2,"378":1,"418":2,"457":2,"462":1}}],["количества",{"2":{"123":1,"165":1,"291":1,"374":1}}],["колоночным",{"2":{"487":1}}],["колоночной",{"2":{"189":1,"490":1}}],["колонок",{"2":{"50":1,"117":1,"189":1}}],["колонки",{"2":{"189":2,"246":1}}],["колонка",{"2":{"117":1}}],["колонками",{"2":{"117":1}}],["колонтитуле",{"2":{"191":1}}],["колонтитул",{"2":{"161":1,"263":1}}],["комфорту",{"2":{"492":1}}],["комфортней",{"2":{"441":1}}],["комфортное",{"2":{"246":1}}],["комфортно",{"2":{"43":1,"69":1,"431":1,"450":1}}],["комиксах",{"2":{"172":1}}],["комбинацию",{"2":{"542":1}}],["комбинация",{"2":{"145":1,"418":1}}],["комбинаций",{"2":{"98":1}}],["коммитов",{"0":{"507":1},"1":{"508":1}}],["коммитах",{"2":{"515":1}}],["коммита",{"2":{"472":1}}],["коммит",{"2":{"471":1,"474":1,"475":1,"476":1}}],["коммиты",{"2":{"151":1}}],["коммуникациях",{"2":{"369":1}}],["коммуникация",{"2":{"331":1}}],["коммуникациями",{"2":{"270":1}}],["коммуникации",{"2":{"326":1,"329":1,"354":1,"370":1,"376":1}}],["коммуникационного",{"2":{"291":1,"337":1}}],["коммуникаций",{"2":{"126":1,"329":1,"371":1}}],["комментирование",{"2":{"501":1}}],["комментарию",{"2":{"311":1}}],["комментарием",{"2":{"264":1}}],["комментариев",{"2":{"182":1,"290":1,"430":1,"448":1}}],["комментариями",{"2":{"123":1,"538":1}}],["комментариях",{"2":{"64":1}}],["комментарий",{"2":{"98":1,"462":1}}],["комментарии",{"2":{"89":2,"278":1,"293":2}}],["коммерческий",{"2":{"491":1}}],["коммерческих",{"2":{"142":1,"424":1}}],["коммерческого",{"2":{"152":1}}],["кому",{"2":{"123":1}}],["командную",{"2":{"469":1}}],["командного",{"2":{"316":1}}],["командной",{"2":{"207":1,"209":1,"210":1,"219":1,"348":1,"440":1,"456":1,"465":1,"467":1,"468":1}}],["командах",{"2":{"453":1}}],["командами",{"2":{"431":2,"448":2,"456":1}}],["командам",{"2":{"431":1,"448":1}}],["команда",{"0":{"316":1},"1":{"317":1},"2":{"240":1,"255":1,"283":1,"316":1,"356":1,"417":1,"431":1,"448":1,"467":1,"535":1}}],["команд",{"2":{"210":2,"316":1,"317":1,"424":1,"469":1,"482":1}}],["командой",{"2":{"162":1,"304":1,"397":1,"451":1,"453":1,"454":1,"460":1,"474":1,"475":1,"492":1}}],["команде",{"2":{"157":1,"162":1,"222":1,"240":1,"255":1,"316":1,"337":1}}],["команды",{"2":{"111":1,"210":1,"212":1,"222":1,"251":1,"253":1,"279":1,"285":1,"316":2,"317":1,"339":1,"347":1,"369":1,"378":1,"408":1,"413":1,"431":1,"448":1,"456":2,"460":1,"464":2,"469":2,"471":2,"472":2,"473":2,"474":1,"475":1,"478":1}}],["команду",{"2":{"34":1,"100":1,"144":1,"209":3,"217":1,"317":1,"340":1,"344":1,"348":2,"356":1,"417":1,"455":1,"460":1,"464":2,"470":2,"471":2,"474":1}}],["компетентные",{"2":{"491":1}}],["компилирует",{"2":{"476":1}}],["компиляции",{"2":{"475":1,"476":1}}],["компиляция",{"2":{"223":1}}],["комплект",{"2":{"470":1}}],["комплексное",{"2":{"123":1}}],["компромиссов",{"0":{"249":1},"2":{"249":1}}],["компромиссы",{"2":{"222":1,"245":1,"354":2,"382":1,"463":1,"466":1}}],["компромиссами",{"2":{"222":1}}],["компромисс",{"2":{"213":1,"222":2}}],["компаниях",{"2":{"453":1,"491":1}}],["компания",{"2":{"197":1}}],["компаниям",{"2":{"197":1}}],["компанией",{"2":{"162":1}}],["компании",{"2":{"123":1,"157":2,"190":1,"193":1,"194":1,"196":1,"197":1,"199":1}}],["компьютере",{"2":{"384":1,"440":1,"492":1}}],["компьютера",{"2":{"441":1}}],["компьютерам",{"2":{"292":1}}],["компьютерах",{"2":{"270":1,"277":1}}],["компьютером",{"2":{"157":1,"291":1}}],["компьютеров",{"2":{"142":3,"181":1,"189":1,"377":1,"384":1}}],["компьютеры",{"2":{"155":1}}],["компьютерного",{"2":{"155":1}}],["компьютерное",{"2":{"155":1}}],["компьютеру",{"2":{"142":1}}],["компьютер",{"2":{"142":1,"176":1,"208":1}}],["компьютеды",{"2":{"96":1}}],["композитных",{"2":{"403":1,"412":1}}],["композитные",{"2":{"287":1}}],["композиции",{"2":{"287":1}}],["композицию",{"2":{"243":1}}],["композиция",{"0":{"243":1,"287":1,"392":1},"1":{"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"262":1,"263":1,"264":1,"265":1,"266":1,"267":1},"2":{"132":1,"162":1,"215":1,"224":1,"225":2,"232":1,"283":1,"287":1,"288":1,"290":1,"312":1,"320":1,"321":1,"355":1,"407":1}}],["композаблом",{"2":{"450":1}}],["композабл",{"0":{"112":1,"258":1},"1":{"259":1},"2":{"258":9,"431":1,"446":1,"450":4,"483":1}}],["композаблы",{"2":{"104":1,"483":1}}],["композабле",{"2":{"95":1,"112":1,"450":1}}],["компонуемый",{"2":{"290":1}}],["компоновкой",{"2":{"188":1}}],["компоновки",{"2":{"134":1,"379":1}}],["компоновка",{"2":{"26":1}}],["компонентно",{"2":{"482":1}}],["компонентного",{"2":{"341":1}}],["компонентом",{"2":{"247":1,"248":1,"257":1,"262":1,"263":1,"264":1,"355":1,"359":1,"405":1,"418":1,"450":2,"461":1,"462":2}}],["компонентов",{"0":{"129":1,"225":1,"238":1,"243":1,"245":1,"392":1,"405":1},"1":{"244":1,"245":1,"246":2,"247":2,"248":2,"249":2,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"262":1,"263":1,"264":1,"265":1,"266":1,"267":1,"406":1,"407":1},"2":{"127":1,"129":2,"130":1,"136":1,"153":1,"162":1,"211":1,"214":2,"215":2,"218":2,"219":1,"221":1,"223":1,"224":2,"225":2,"226":2,"233":2,"234":5,"241":1,"243":4,"245":1,"246":5,"247":1,"249":2,"251":2,"252":1,"255":2,"256":1,"259":1,"260":1,"264":1,"267":1,"279":1,"287":2,"288":4,"289":1,"290":1,"338":1,"350":1,"355":1,"365":1,"392":1,"397":1,"403":1,"405":1,"407":2,"408":1,"410":2,"411":2,"412":1,"419":1,"428":1,"431":1,"442":1,"448":2,"449":1,"450":1,"451":1,"454":1,"455":1,"460":2,"462":1,"478":1,"579":1}}],["компоненту",{"2":{"128":1,"218":1,"226":1,"247":1,"254":1,"257":1,"259":1,"263":1,"322":1,"359":1,"366":1,"406":1,"461":1}}],["компоненте",{"0":{"528":1},"2":{"41":1,"122":2,"132":1,"177":1,"215":1,"217":1,"218":1,"251":1,"253":2,"254":1,"255":5,"257":3,"258":1,"263":1,"264":2,"291":1,"321":1,"340":1,"343":1,"347":1,"362":2,"364":3,"365":1,"369":1,"375":1,"406":1,"412":1,"421":1,"450":3,"462":1,"511":1,"572":1}}],["компонентам",{"2":{"135":1,"214":1,"246":1,"247":1,"254":1,"264":1,"288":1,"355":1,"365":1,"405":1,"428":1,"432":1,"448":1}}],["компонентами",{"0":{"485":1},"2":{"132":1,"162":1,"216":1,"225":1,"226":2,"232":1,"243":1,"247":1,"250":1,"251":2,"254":1,"255":1,"258":2,"259":1,"297":1,"298":1,"312":2,"320":1,"321":1,"338":1,"355":2,"356":1,"357":1,"362":1,"404":1,"408":1,"411":1,"413":2,"415":2,"417":1,"422":1,"423":1,"433":1,"456":1,"465":1,"535":1}}],["компонента",{"2":{"23":1,"122":1,"130":1,"176":1,"178":1,"210":1,"211":2,"212":1,"216":2,"217":3,"220":1,"224":1,"225":4,"226":7,"234":4,"243":1,"246":1,"247":1,"249":1,"251":4,"252":1,"253":3,"254":7,"256":1,"257":3,"258":1,"259":4,"263":7,"264":1,"277":4,"286":1,"288":1,"290":4,"312":1,"318":1,"321":3,"322":1,"361":1,"362":2,"365":3,"368":1,"370":1,"405":1,"406":1,"410":2,"414":1,"432":1,"450":4,"455":1,"456":2,"460":1,"461":3,"462":3,"483":1,"490":2,"532":1,"547":1,"553":1}}],["компонентах",{"2":{"20":1,"41":1,"122":1,"130":1,"136":1,"162":1,"206":1,"225":1,"226":1,"248":2,"251":1,"258":1,"259":1,"266":1,"267":1,"291":1,"320":1,"333":1,"362":2,"416":1,"419":1,"420":1,"454":1,"463":1,"477":1}}],["компоненты",{"0":{"28":1,"136":1,"234":1,"250":1,"251":1,"256":1,"259":1,"361":1},"1":{"29":1,"30":1,"31":1,"32":1,"251":1,"252":1,"253":1,"254":1,"255":1,"257":1},"2":{"20":2,"26":1,"41":1,"69":1,"104":1,"128":1,"129":1,"130":2,"136":2,"210":3,"213":1,"221":1,"224":2,"225":3,"226":2,"232":1,"234":2,"242":1,"243":2,"245":2,"246":4,"247":3,"250":1,"251":2,"252":2,"254":1,"257":1,"260":1,"262":2,"264":1,"266":2,"267":1,"287":1,"288":2,"289":3,"320":2,"322":1,"334":1,"355":1,"356":4,"357":1,"360":2,"361":2,"365":4,"403":1,"405":4,"407":1,"408":1,"409":1,"412":1,"428":2,"430":1,"431":2,"432":2,"433":2,"448":4,"450":2,"453":1,"454":3,"455":1,"459":3,"460":1,"482":2,"483":1,"485":2,"486":1,"490":3,"542":1,"577":1,"591":1}}],["компонент",{"2":{"20":1,"36":1,"85":1,"88":2,"96":2,"98":1,"107":1,"109":1,"114":4,"117":1,"122":1,"129":1,"130":1,"136":1,"170":1,"179":2,"210":3,"215":2,"216":5,"218":1,"223":2,"224":1,"225":3,"226":4,"234":7,"246":2,"247":2,"248":4,"251":5,"252":7,"253":2,"255":2,"257":10,"258":1,"259":5,"262":1,"263":6,"264":4,"288":9,"290":2,"291":1,"320":1,"321":1,"346":3,"357":1,"359":4,"361":2,"362":6,"365":4,"367":1,"373":1,"375":1,"405":7,"407":2,"408":3,"409":1,"410":2,"412":2,"421":1,"432":2,"437":1,"439":1,"446":1,"450":7,"453":1,"455":2,"461":3,"481":2,"482":3,"485":1,"490":2,"521":1,"537":1,"542":1,"577":2,"579":1,"591":1}}],["коп",{"2":{"482":1}}],["копейкой",{"2":{"195":1}}],["копейку",{"2":{"195":1}}],["копии",{"2":{"405":1,"467":1}}],["копируются",{"2":{"331":1}}],["копирование",{"2":{"410":1}}],["копирования",{"2":{"153":1,"440":1}}],["копировать",{"2":{"23":1}}],["копий",{"2":{"231":1,"411":1}}],["копия",{"2":{"171":1,"264":1}}],["копию",{"2":{"171":1,"217":1,"248":2,"342":1,"410":2,"467":1,"472":1}}],["копонент",{"2":{"32":1}}],["кот",{"2":{"18":1}}],["которое",{"2":{"130":1,"131":1,"132":1,"151":1,"152":1,"158":1,"159":2,"165":1,"179":1,"183":1,"208":1,"216":1,"217":1,"218":1,"233":1,"247":1,"252":1,"255":1,"257":1,"263":1,"319":1,"326":1,"331":1,"332":2,"356":2,"362":1,"371":1,"375":1,"410":1,"412":1,"417":1,"418":2,"454":2,"455":1,"461":1,"462":2,"464":1,"474":1,"475":1,"479":1}}],["которой",{"2":{"101":1,"148":1,"157":1,"160":1,"166":1,"179":1,"189":1,"205":1,"210":1,"223":1,"279":1,"285":1,"318":1,"323":1,"332":1,"335":1,"357":2,"359":1,"374":1,"393":1,"457":2,"476":1,"483":1,"542":1}}],["которого",{"2":{"85":1,"130":1,"226":4,"253":2,"259":1,"263":1,"273":1,"290":1,"331":1,"414":2,"456":1}}],["котором",{"2":{"59":1,"96":1,"142":1,"209":1,"210":1,"217":1,"221":2,"225":1,"252":2,"259":1,"264":1,"271":1,"278":1,"279":1,"288":1,"317":1,"319":1,"331":1,"344":1,"346":1,"362":2,"370":1,"371":1,"377":1,"425":1,"446":1,"450":1,"451":1,"459":1,"460":1}}],["которому",{"2":{"51":1,"231":1,"349":1,"368":1,"415":1,"419":1,"432":1,"458":1,"461":1}}],["которая",{"2":{"46":1,"62":1,"69":1,"96":1,"111":1,"126":1,"133":2,"142":1,"145":1,"151":1,"176":1,"191":1,"210":1,"217":4,"222":1,"223":1,"226":1,"229":1,"247":1,"252":1,"258":3,"259":1,"264":2,"286":1,"310":1,"313":1,"318":1,"324":2,"326":1,"335":1,"339":1,"344":1,"348":1,"359":1,"362":1,"369":2,"377":1,"410":1,"415":1,"418":5,"420":1,"450":2,"453":1,"456":2,"457":1,"461":1,"462":2,"464":1,"472":1,"482":1,"490":1,"491":1,"492":1}}],["которым",{"2":{"16":1,"17":1,"125":1,"158":1,"210":1,"226":1,"240":1,"252":1,"258":1,"262":1,"341":1,"359":1,"362":1,"418":1,"432":3,"490":1}}],["которыми",{"2":{"3":1,"4":1,"140":1,"165":1,"210":1,"240":1,"264":1,"318":1,"329":1,"450":1}}],["которые",{"2":{"16":1,"23":1,"36":1,"50":1,"96":1,"123":1,"125":1,"127":1,"131":1,"138":1,"149":1,"150":2,"153":1,"154":1,"157":2,"158":1,"162":2,"163":1,"167":3,"170":1,"176":1,"178":1,"179":1,"184":3,"186":1,"192":1,"195":1,"199":1,"205":2,"206":1,"207":1,"210":4,"211":3,"212":1,"213":3,"215":1,"218":1,"221":5,"223":2,"224":3,"225":1,"226":4,"227":1,"230":1,"233":3,"234":3,"235":1,"246":1,"247":1,"248":1,"251":2,"252":3,"253":1,"254":3,"255":1,"257":2,"258":1,"268":2,"270":2,"272":2,"275":1,"277":1,"278":1,"280":1,"283":2,"284":2,"286":2,"289":1,"290":3,"291":2,"292":1,"294":3,"295":2,"298":1,"315":2,"320":1,"323":1,"327":1,"329":3,"331":2,"335":1,"337":1,"343":1,"347":1,"348":1,"354":1,"357":1,"360":1,"364":1,"365":2,"368":1,"370":1,"371":1,"372":1,"373":1,"374":1,"377":2,"378":1,"382":2,"383":1,"405":1,"408":1,"410":1,"412":1,"414":1,"417":2,"418":2,"419":1,"425":1,"430":1,"431":3,"433":1,"437":1,"448":2,"453":1,"454":2,"457":2,"461":1,"462":3,"472":1,"474":1,"490":1,"491":1,"492":2,"541":1,"542":1,"591":1}}],["которых",{"2":{"12":1,"40":1,"69":1,"95":1,"127":1,"138":1,"213":1,"221":1,"222":1,"224":1,"226":1,"231":1,"258":1,"263":1,"273":1,"294":1,"314":1,"320":2,"356":1,"360":1,"363":1,"365":1,"369":1,"370":1,"374":1,"376":1,"420":1,"430":1,"448":1,"450":1,"451":1,"475":1,"482":1,"492":1}}],["который",{"2":{"3":1,"10":1,"13":1,"35":1,"41":1,"51":1,"63":1,"96":1,"100":1,"124":2,"125":2,"127":1,"142":4,"145":1,"152":3,"158":1,"161":1,"176":2,"178":1,"179":1,"181":1,"185":1,"189":2,"190":1,"194":2,"197":1,"199":1,"207":1,"208":1,"209":1,"210":3,"215":2,"216":1,"217":2,"218":1,"221":1,"222":2,"223":2,"224":1,"225":4,"226":4,"234":2,"235":1,"245":1,"247":1,"249":1,"252":5,"256":1,"257":1,"258":1,"259":2,"262":1,"263":3,"264":2,"266":1,"270":1,"272":1,"276":1,"278":3,"279":1,"288":2,"293":1,"303":1,"305":1,"313":1,"316":1,"318":2,"319":3,"320":3,"321":1,"322":2,"325":1,"326":1,"332":2,"334":1,"335":1,"336":1,"337":1,"338":2,"343":1,"344":1,"348":1,"349":1,"354":1,"355":2,"359":5,"362":2,"364":1,"365":3,"370":1,"371":1,"372":1,"373":1,"375":1,"376":1,"377":3,"391":1,"403":1,"408":3,"413":3,"415":1,"416":1,"420":2,"431":1,"432":1,"436":1,"437":1,"440":1,"448":1,"450":3,"453":1,"457":2,"459":1,"461":1,"462":1,"463":2,"467":1,"472":1,"479":1,"482":1,"483":2,"492":2}}],["которую",{"2":{"2":1,"23":1,"96":1,"98":1,"162":1,"172":1,"178":1,"200":1,"201":1,"210":1,"214":1,"223":1,"264":1,"274":1,"276":1,"295":1,"331":1,"340":1,"342":2,"359":1,"365":1,"369":1,"371":1,"373":1,"374":1,"375":1,"410":1,"424":1,"450":1,"457":1,"491":1}}],["конвейера",{"0":{"337":1},"1":{"338":1,"339":1,"340":1}}],["конвейеров",{"2":{"323":1}}],["конгруэнтным",{"2":{"266":1}}],["конфликта",{"2":{"474":1}}],["конфликт",{"2":{"474":1}}],["конфликты",{"0":{"474":1},"2":{"475":1}}],["конфликтуют",{"2":{"441":1}}],["конфликтов",{"2":{"216":1,"475":1}}],["конфигом",{"2":{"441":1}}],["конфиге",{"0":{"562":1},"2":{"440":1}}],["конфигурирование",{"2":{"207":1,"576":1}}],["конфигурацией",{"2":{"279":1}}],["конфигурационного",{"2":{"424":1,"535":1}}],["конфигурационному",{"2":{"214":1}}],["конфигурационные",{"2":{"543":1}}],["конфигурационный",{"2":{"210":1,"214":1,"460":2,"549":1}}],["конфигурационных",{"2":{"140":1}}],["конфигураций",{"2":{"150":1}}],["конфигурации",{"0":{"145":1,"214":1},"1":{"146":1,"147":1,"148":1,"149":1,"150":1},"2":{"135":1,"143":1,"145":2,"148":1,"209":1,"210":1,"214":2,"279":1,"288":1,"359":1,"432":2,"463":2}}],["конфигурацию",{"2":{"135":1,"144":1,"145":2,"146":1,"149":1,"153":1,"213":1,"214":2,"456":1}}],["конфигурациях",{"2":{"492":1}}],["конфигурация",{"0":{"146":1,"504":1,"531":1},"1":{"147":1,"505":1,"506":1},"2":{"20":1,"151":1,"441":1}}],["конфиденциальности",{"2":{"205":1,"369":1}}],["конец",{"2":{"209":1,"463":2}}],["конечную",{"2":{"370":1,"372":1,"373":1,"376":1}}],["конечная",{"2":{"345":1,"349":1}}],["конечным",{"2":{"371":1}}],["конечными",{"2":{"344":1}}],["конечных",{"2":{"348":1,"371":1,"418":1}}],["конечные",{"2":{"210":1,"264":1,"349":1}}],["конечный",{"2":{"139":1,"210":1,"215":1,"226":1,"257":2,"264":2,"361":1}}],["конечном",{"2":{"240":1,"252":1,"476":1}}],["конечному",{"2":{"158":1,"277":1,"376":1}}],["конечной",{"2":{"195":1,"344":1}}],["конечного",{"2":{"69":1,"77":1,"142":1,"354":1,"476":2}}],["конечно",{"2":{"17":1,"126":1,"144":1,"215":1,"268":1,"280":1,"320":1,"326":1,"374":1,"377":1,"405":1,"410":1,"453":1,"483":1,"492":1}}],["консистентности",{"2":{"450":1}}],["консоли",{"2":{"446":1}}],["консоль",{"2":{"208":1,"319":2,"325":1,"333":1,"483":1}}],["константные",{"2":{"237":1}}],["константе",{"2":{"226":1}}],["константа",{"2":{"226":2}}],["константу",{"2":{"226":2,"258":2,"264":1,"412":2}}],["константы",{"0":{"237":1},"2":{"217":1,"226":2}}],["конструкция",{"0":{"262":1},"2":{"264":1}}],["конструкциями",{"2":{"39":1}}],["конструкции",{"2":{"246":1,"450":1}}],["конструктором",{"2":{"359":1}}],["конструкторов",{"2":{"217":1,"359":1,"415":1}}],["конструктору",{"2":{"332":1,"359":1}}],["конструкторе",{"2":{"304":1,"309":1,"310":1,"315":1}}],["конструктора",{"2":{"226":1,"258":1,"263":1,"326":1,"338":1,"365":1,"414":1,"420":2,"542":2}}],["конструкторы",{"2":{"135":1,"237":1,"365":1,"368":1}}],["конструктор",{"2":{"122":1,"128":2,"135":1,"144":1,"223":1,"226":3,"264":1,"318":1,"319":1,"326":1,"332":2,"334":1,"343":1,"349":1,"359":1,"411":1,"412":1,"414":2,"415":1,"417":1}}],["кончается",{"2":{"123":2}}],["кончился",{"2":{"123":1}}],["контакты",{"2":{"500":1}}],["контактов",{"2":{"204":1}}],["контактам",{"2":{"204":1}}],["контейнер",{"2":{"361":1,"531":1}}],["контейнера",{"2":{"179":1}}],["контенту",{"2":{"191":1}}],["контент",{"2":{"189":2,"203":1,"270":1,"492":1}}],["контентом",{"2":{"175":1,"186":1,"191":1,"265":1,"492":2,"540":1,"542":1}}],["контента",{"0":{"188":1},"1":{"189":1,"190":1,"191":1,"192":1},"2":{"159":1,"175":1,"182":1,"221":1,"223":1,"234":1,"246":1,"492":1}}],["контекстов",{"2":{"279":1}}],["контексту",{"2":{"246":1,"369":1}}],["контекст",{"2":{"214":1,"255":1,"460":1}}],["контексте",{"2":{"214":1,"283":1,"354":1}}],["контекстном",{"2":{"275":1}}],["контекстного",{"2":{"172":1,"404":1}}],["контекстные",{"2":{"172":1}}],["контекстным",{"2":{"172":1}}],["контекстных",{"2":{"172":1}}],["контекстах",{"2":{"273":1,"354":1}}],["контекста",{"2":{"98":1,"122":1,"226":1,"251":1,"268":1,"275":1,"285":1,"295":1,"299":1,"317":1,"370":1,"403":1,"541":1}}],["контрагентами",{"2":{"482":1}}],["контрастно",{"2":{"191":1}}],["контрастах",{"2":{"191":1}}],["контраста",{"2":{"161":1}}],["контраст",{"0":{"159":1},"2":{"159":3}}],["контролируется",{"2":{"590":1}}],["контролирует",{"2":{"446":1,"482":1}}],["контролировать",{"2":{"2":1,"210":1,"312":1,"361":1}}],["контроллер",{"2":{"431":1,"448":1}}],["контроллеров",{"2":{"254":1}}],["контроллеры",{"0":{"254":1}}],["контроля",{"0":{"451":1},"1":{"452":1,"453":1,"454":1,"455":1,"456":1,"457":1,"458":1,"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1,"467":1,"468":1,"469":1,"470":1,"471":1,"472":1,"473":1,"474":1,"475":1,"476":1,"477":1,"478":1},"2":{"166":2,"167":1,"176":1,"208":2,"210":1,"218":1,"288":1,"359":1,"397":1,"467":1}}],["контроль",{"0":{"397":1},"2":{"151":1,"167":1,"208":1,"210":1,"214":1,"226":2,"252":1,"279":1,"325":1,"354":1,"465":1}}],["концом",{"2":{"320":1}}],["концов",{"2":{"278":1,"323":1}}],["концу",{"2":{"155":1,"221":1,"268":2,"329":1,"331":1,"352":1,"403":1}}],["концептуального",{"2":{"392":1}}],["концептуально",{"2":{"334":1}}],["концептуальной",{"2":{"249":1}}],["концептуальный",{"2":{"377":1}}],["концептуальных",{"2":{"329":1}}],["концептуальные",{"2":{"284":1}}],["концепций",{"2":{"221":1,"323":1,"350":1,"382":1}}],["концепцией",{"2":{"178":1,"222":1,"392":1,"413":1}}],["концепция",{"2":{"155":1,"161":1,"172":1,"173":1,"178":1,"186":1,"187":2,"189":1,"196":1,"208":1,"213":1,"221":1,"222":1,"226":1,"257":1,"288":1,"289":1,"300":1,"316":1,"319":1,"376":1,"378":1,"451":1,"464":1}}],["концепциями",{"2":{"153":1,"243":1,"336":1,"395":1}}],["концепции",{"2":{"143":1,"158":1,"160":1,"207":1,"224":1,"283":1,"329":1,"337":1,"350":1,"382":1,"398":1,"403":1,"404":1,"418":1,"431":1,"448":1,"451":1,"476":1,"477":1,"483":1}}],["концепцию",{"2":{"142":1,"162":1,"187":1,"191":1,"226":1,"249":1,"268":1,"354":1,"371":1,"408":1}}],["конце",{"2":{"191":1,"194":1,"210":1,"223":1,"264":1,"278":1,"323":1,"331":1,"453":1}}],["концентрируемся",{"2":{"41":1}}],["конца",{"2":{"61":1,"178":1,"179":1,"349":1,"370":1}}],["конкатенируются",{"2":{"371":1}}],["конкатенированы",{"2":{"364":1}}],["конкатенировать",{"2":{"129":1}}],["конкатенации",{"2":{"371":1}}],["конкретика",{"2":{"288":1}}],["конкретную",{"2":{"288":1,"542":1}}],["конкретным",{"2":{"294":1}}],["конкретных",{"2":{"264":1,"270":1,"279":1,"420":1,"431":1,"448":1,"542":1}}],["конкретные",{"2":{"222":1}}],["конкретный",{"2":{"46":1,"345":1,"538":1}}],["конкретная",{"2":{"187":1}}],["конкретной",{"2":{"430":1,"448":1}}],["конкретное",{"2":{"125":1,"226":1}}],["конкретного",{"2":{"96":1,"127":1,"165":1,"249":1,"376":1,"433":1,"457":1}}],["конкретно",{"2":{"41":1,"96":2}}],["конкретном",{"2":{"11":1,"222":1,"335":1,"365":1}}],["конкурентностью",{"2":{"483":1}}],["конкурентов",{"0":{"22":1},"2":{"23":1,"157":1}}],["конкурировать",{"2":{"221":1}}],["конкурировали",{"2":{"221":1}}],["конкурируют",{"2":{"171":1}}],["кодироваться",{"2":{"437":1}}],["кодирования",{"2":{"277":1,"326":1,"371":2,"382":1,"453":1}}],["кодирование",{"2":{"266":1,"307":1}}],["кодированию",{"2":{"189":1}}],["кодировке",{"2":{"371":1}}],["кодирует",{"2":{"371":1}}],["кодов",{"2":{"376":1}}],["кодовой",{"2":{"310":1,"472":1,"475":1}}],["кодовая",{"2":{"264":1,"270":1}}],["кодовых",{"2":{"235":1,"241":1,"290":1}}],["кодовые",{"0":{"235":1},"1":{"236":1,"237":1,"238":1,"239":1,"240":1},"2":{"240":1}}],["кодом",{"2":{"77":1,"124":1,"208":1,"217":2,"241":1,"258":1,"263":1,"323":1,"337":1,"348":1,"360":1,"375":1,"376":1,"377":1,"404":1,"451":1,"456":1,"460":1,"463":1,"466":1,"467":1,"472":1,"474":1,"483":1}}],["кодера",{"2":{"441":1}}],["коде",{"0":{"511":1},"2":{"82":1,"214":1,"217":2,"226":3,"240":1,"242":1,"249":1,"255":1,"258":1,"277":3,"278":1,"290":2,"306":1,"317":1,"320":1,"322":1,"326":2,"342":1,"351":1,"355":1,"362":1,"365":1,"375":1,"453":1,"456":1,"457":1,"462":1,"463":1,"466":1,"477":2,"482":1,"483":1,"490":1,"538":1,"543":1,"545":1,"546":1,"573":1}}],["коду",{"2":{"41":1,"215":1,"263":1,"293":1,"337":1,"343":1,"362":1,"371":1,"408":1,"466":1}}],["кода",{"0":{"386":1,"549":1},"2":{"40":1,"64":1,"96":1,"101":1,"122":2,"124":1,"132":1,"133":1,"151":2,"208":3,"213":1,"214":1,"217":2,"218":1,"222":2,"223":1,"224":1,"225":2,"226":6,"240":1,"243":3,"244":1,"256":1,"258":1,"259":1,"262":1,"263":1,"264":2,"269":3,"272":2,"277":2,"280":2,"284":1,"288":1,"290":2,"291":2,"292":1,"293":1,"294":1,"309":1,"320":1,"324":2,"330":2,"331":5,"335":1,"337":1,"339":1,"340":1,"341":1,"342":1,"347":1,"349":1,"350":1,"352":1,"354":1,"355":1,"364":1,"365":2,"368":1,"369":1,"370":1,"371":2,"373":1,"374":1,"375":3,"376":2,"384":2,"386":1,"397":1,"401":2,"403":1,"413":1,"414":1,"418":1,"421":1,"424":1,"441":1,"450":1,"451":3,"452":1,"453":1,"457":2,"464":2,"465":2,"466":2,"467":2,"468":1,"472":3,"474":2,"477":1,"482":3,"483":1,"484":1,"486":2,"490":2,"491":1,"492":2,"501":1,"541":1,"542":2,"545":1,"549":2}}],["код",{"0":{"293":1,"387":1,"459":1},"1":{"296":1,"297":1,"298":1,"299":1},"2":{"9":1,"23":1,"78":1,"83":1,"89":1,"96":10,"98":1,"112":1,"114":1,"122":2,"125":1,"126":1,"144":1,"145":1,"149":1,"154":1,"156":2,"170":1,"178":1,"183":1,"189":1,"208":1,"209":1,"210":5,"211":1,"213":1,"217":4,"218":1,"219":1,"222":1,"223":2,"224":2,"226":5,"235":1,"240":1,"243":1,"244":1,"252":2,"254":1,"258":1,"263":3,"267":1,"269":1,"277":1,"278":2,"283":1,"290":3,"291":2,"293":6,"294":2,"303":1,"304":2,"306":2,"309":2,"319":1,"320":1,"325":1,"326":2,"330":1,"331":1,"332":1,"337":1,"339":1,"340":1,"353":2,"361":1,"362":3,"365":1,"370":1,"372":1,"373":1,"374":2,"375":5,"376":3,"377":3,"404":2,"410":1,"411":1,"412":1,"422":1,"424":1,"441":1,"446":1,"452":2,"453":5,"455":1,"456":2,"459":1,"461":1,"463":3,"466":2,"472":1,"474":1,"475":2,"476":1,"483":2,"486":1,"491":2,"521":1,"532":1,"563":1,"576":1,"590":1}}],["к",{"0":{"191":1,"277":1,"341":1},"1":{"342":1,"343":1,"344":1,"345":1,"346":1,"347":1},"2":{"2":1,"11":1,"16":1,"20":1,"26":1,"38":1,"40":2,"41":4,"44":1,"53":2,"58":1,"59":2,"63":1,"68":1,"69":1,"83":1,"96":2,"104":1,"117":1,"121":1,"122":1,"123":4,"124":7,"125":6,"127":1,"128":1,"129":1,"131":6,"132":1,"135":3,"136":1,"139":2,"142":7,"143":1,"144":1,"145":4,"147":1,"149":1,"151":1,"152":4,"153":1,"155":1,"157":2,"158":1,"159":1,"160":2,"161":3,"162":1,"164":1,"165":1,"166":1,"167":2,"169":1,"170":1,"174":1,"175":2,"178":1,"179":2,"180":1,"181":1,"182":2,"189":6,"190":1,"191":5,"193":3,"195":1,"203":1,"204":1,"207":1,"208":1,"210":4,"211":2,"212":1,"213":1,"214":1,"215":1,"217":3,"218":1,"219":1,"220":1,"221":3,"222":1,"226":19,"228":1,"232":1,"234":3,"242":1,"243":1,"244":1,"245":4,"246":2,"247":1,"249":2,"251":2,"252":2,"253":1,"254":1,"257":4,"258":2,"260":3,"263":2,"264":1,"266":1,"267":1,"268":3,"270":5,"272":2,"273":1,"275":1,"277":5,"278":6,"279":1,"280":1,"281":1,"282":1,"283":1,"287":1,"288":2,"290":3,"291":1,"293":1,"294":1,"296":1,"300":1,"301":3,"305":1,"312":2,"316":1,"318":1,"319":1,"320":2,"323":5,"324":2,"326":5,"327":1,"329":3,"330":2,"331":7,"332":2,"333":1,"334":1,"335":5,"337":2,"338":2,"339":2,"340":2,"341":1,"342":1,"343":1,"344":1,"345":1,"349":3,"350":3,"352":2,"354":3,"355":3,"356":1,"357":1,"359":2,"360":1,"361":1,"362":4,"363":1,"364":1,"365":1,"366":1,"368":3,"369":1,"370":1,"371":1,"375":3,"376":1,"377":8,"379":1,"382":4,"384":2,"392":1,"403":2,"404":1,"405":4,"407":2,"408":1,"410":2,"412":2,"413":1,"414":3,"415":1,"417":3,"418":7,"419":1,"420":2,"421":1,"425":2,"428":2,"429":1,"431":1,"432":1,"437":1,"441":5,"446":1,"448":4,"450":2,"451":3,"453":1,"454":1,"455":1,"456":1,"457":3,"458":1,"459":2,"461":6,"462":5,"466":3,"467":1,"471":1,"473":1,"475":1,"483":1,"487":1,"491":3,"492":3,"503":1,"508":3,"522":1,"525":1,"533":1,"541":1,"545":2,"546":1,"547":1,"576":1}}],["вкратце",{"2":{"403":1}}],["включенные",{"2":{"285":1}}],["включенное",{"2":{"170":1}}],["включением",{"2":{"346":1,"359":1}}],["включение",{"2":{"213":1,"377":1,"456":1}}],["включения",{"2":{"211":1,"334":1,"339":1,"356":1,"364":1,"416":1,"446":1,"451":1,"471":1,"472":1}}],["включен",{"2":{"210":1,"251":1,"359":1,"471":1}}],["включено",{"2":{"170":2}}],["включены",{"2":{"158":1,"365":1}}],["включена",{"2":{"152":1,"189":1}}],["включив",{"2":{"460":1,"463":1}}],["включите",{"2":{"211":1,"415":1}}],["включить",{"2":{"145":1,"146":1,"210":1,"213":3,"288":1,"345":1,"349":1,"356":1,"413":1,"464":1}}],["включили",{"2":{"213":1,"343":1,"349":1,"359":1,"365":1}}],["включил",{"2":{"146":1,"538":1}}],["включим",{"2":{"121":1,"211":1,"339":1,"341":1}}],["включать",{"2":{"211":1,"213":1,"221":1,"254":1,"277":1,"336":1,"337":1,"365":1,"441":1,"463":1,"475":1,"476":1}}],["включающий",{"2":{"133":1}}],["включают",{"2":{"69":1,"252":1,"354":1,"475":1,"579":1}}],["включаем",{"2":{"361":1,"362":1}}],["включаемые",{"2":{"132":1}}],["включается",{"2":{"123":1,"324":1,"441":1}}],["включает",{"0":{"141":1,"388":1},"1":{"142":1,"389":1,"390":1,"391":1,"392":1,"393":1,"394":1,"395":1,"396":1,"397":1,"398":1,"399":1,"400":1},"2":{"69":1,"70":1,"74":1,"133":1,"139":1,"145":1,"157":3,"171":1,"174":1,"184":1,"290":1,"291":1,"314":1,"335":1,"344":1,"453":2,"471":1,"475":1}}],["включая",{"2":{"50":1,"221":1,"287":1,"411":1,"440":1,"441":1,"446":1,"483":1,"490":1,"522":1,"579":1}}],["вкладок",{"2":{"418":1}}],["вкладка",{"2":{"201":1}}],["вкладках",{"2":{"95":1}}],["вкладки",{"2":{"161":1,"162":1,"418":2}}],["вклад",{"2":{"96":1,"155":1,"293":1}}],["вкладывание",{"2":{"89":1}}],["вмешательства",{"2":{"278":1}}],["вместе",{"2":{"126":1,"131":1,"155":1,"181":1,"202":1,"207":1,"234":1,"280":1,"283":1,"292":1,"329":1,"349":1,"354":1,"361":1,"365":1,"376":1,"431":1,"448":1,"453":1,"474":1,"483":1,"484":1}}],["вместо",{"2":{"20":1,"125":1,"129":1,"132":1,"144":2,"191":1,"213":1,"224":1,"225":1,"226":1,"251":1,"257":1,"258":1,"270":1,"278":1,"283":1,"287":1,"315":1,"316":1,"320":1,"325":1,"334":1,"336":1,"362":1,"365":1,"379":1,"407":1,"411":1,"415":1,"417":1,"418":2,"440":1,"446":1,"454":1,"456":1,"459":1,"470":1,"492":1,"546":2,"590":1}}],["втянуть",{"2":{"193":1}}],["вторых",{"2":{"491":1}}],["вторым",{"2":{"457":1}}],["вторично",{"2":{"441":1}}],["вторичным",{"2":{"172":1}}],["вторичный",{"2":{"159":1,"376":1}}],["вторую",{"2":{"349":1}}],["вторая",{"2":{"131":1,"290":1,"331":1}}],["второго",{"2":{"378":1,"461":1}}],["втором",{"2":{"123":2,"318":1,"359":1}}],["второе",{"2":{"96":1,"217":1,"375":1,"376":1}}],["второстепенных",{"2":{"17":1}}],["второй",{"2":{"17":1,"44":1,"56":1,"58":1,"67":1,"253":1,"277":1,"304":1,"345":1,"359":1,"376":1,"441":3,"451":1,"457":2,"483":1,"508":2,"568":1}}],["впрочем",{"2":{"573":1}}],["впредь",{"2":{"281":1}}],["вплоть",{"2":{"222":1,"257":1,"286":1,"460":1,"465":1}}],["впервые",{"2":{"475":1}}],["вперёд",{"2":{"354":1}}],["вперед",{"2":{"218":1,"233":1,"273":1,"278":1,"327":1,"368":1,"374":1,"412":1,"473":1}}],["впечатляющее",{"2":{"365":1}}],["впечатляющей",{"2":{"341":1}}],["впечатление",{"2":{"176":1,"178":1,"501":1,"541":1}}],["вполне",{"2":{"4":1,"59":1,"96":2,"123":1,"138":1,"209":1,"344":1,"369":1,"370":1,"371":1,"410":1,"450":1,"475":1,"482":1,"491":1,"541":1}}],["входе",{"2":{"492":1}}],["входы",{"2":{"321":1,"454":1}}],["вход",{"2":{"320":1,"373":2}}],["входящего",{"2":{"335":1,"455":1}}],["входящий",{"2":{"147":1}}],["входящие",{"2":{"146":1,"289":1}}],["входящих",{"2":{"96":1,"338":1,"339":1,"457":1}}],["входят",{"2":{"275":1}}],["входной",{"2":{"321":1}}],["входного",{"2":{"252":1,"455":1}}],["входных",{"2":{"305":1,"313":1,"453":1}}],["входные",{"2":{"247":1,"318":1}}],["входными",{"2":{"218":1}}],["входным",{"2":{"132":1}}],["входов",{"0":{"248":1},"2":{"453":1}}],["входить",{"2":{"245":1,"320":1}}],["входит",{"2":{"125":1,"151":1,"162":1,"374":1,"470":1,"501":1}}],["входа",{"2":{"29":1,"145":1,"225":1,"288":4,"316":1,"335":1,"337":1,"374":1,"482":1,"492":1}}],["вузах",{"2":{"65":1}}],["владельцем",{"2":{"405":1}}],["власть",{"2":{"96":1}}],["властвуй",{"2":{"2":1}}],["вложенных",{"0":{"364":1},"2":{"365":1,"433":1}}],["вложенные",{"0":{"363":1},"1":{"364":1,"365":1},"2":{"368":1}}],["вложенном",{"2":{"255":1}}],["вложенному",{"2":{"254":1}}],["вложенного",{"2":{"182":1}}],["вложены",{"2":{"193":1}}],["вложений",{"2":{"62":1}}],["влияя",{"2":{"431":1,"448":1}}],["влиять",{"2":{"284":1}}],["влияющий",{"2":{"325":1}}],["влияющее",{"2":{"173":1}}],["влияют",{"2":{"157":1,"290":1,"298":1}}],["влияет",{"2":{"96":1,"170":1,"227":1,"331":1,"484":1}}],["влияние",{"2":{"69":1,"192":1}}],["вязала",{"2":{"62":1}}],["вновь",{"2":{"332":1,"490":1}}],["вносит",{"2":{"490":1}}],["вносится",{"2":{"451":1}}],["вносите",{"2":{"293":1}}],["вносить",{"2":{"214":1}}],["вносят",{"2":{"221":1}}],["внуку",{"2":{"407":1}}],["внушительная",{"2":{"258":1}}],["внушительное",{"2":{"186":1}}],["внучатому",{"2":{"254":1}}],["внутрь",{"2":{"365":1,"441":1}}],["внутренняя",{"2":{"320":1}}],["внутреннюю",{"2":{"258":1,"410":1}}],["внутренне",{"2":{"320":1}}],["внутреннего",{"2":{"310":1,"315":1,"420":1,"491":1}}],["внутреннее",{"2":{"262":1,"263":2,"417":1}}],["внутреннему",{"2":{"307":1,"310":1,"371":1}}],["внутреннем",{"2":{"226":1,"420":1}}],["внутренней",{"2":{"209":1,"234":1,"281":1,"318":1,"410":1}}],["внутренний",{"2":{"290":1,"375":1,"420":1,"433":1}}],["внутренним",{"2":{"289":1,"320":1,"377":1,"419":1}}],["внутренними",{"2":{"131":1}}],["внутренних",{"2":{"155":1,"234":1,"253":1,"342":1,"454":1}}],["внутренние",{"2":{"133":1,"412":1,"482":1}}],["внутри",{"2":{"51":1,"136":1,"143":1,"170":1,"171":1,"184":1,"189":2,"210":2,"214":2,"216":1,"217":4,"220":1,"222":3,"223":2,"231":1,"252":1,"254":1,"257":2,"261":1,"270":1,"277":1,"286":1,"312":1,"321":1,"325":1,"326":2,"329":1,"333":1,"370":1,"373":1,"374":1,"414":1,"415":1,"420":1,"432":1,"437":1,"446":3,"449":1,"450":1,"457":3,"576":1,"583":1}}],["вниз",{"2":{"178":1,"191":1,"324":1,"407":1,"502":1,"568":1}}],["внизу",{"2":{"33":1,"174":1,"179":1}}],["внимательно",{"0":{"161":1}}],["вниманию",{"2":{"174":1}}],["внимания",{"2":{"139":2,"173":1,"174":1,"203":1,"310":1}}],["внимание",{"2":{"114":1,"130":1,"131":1,"144":1,"147":1,"159":2,"161":1,"162":1,"173":1,"186":1,"189":1,"191":2,"194":1,"210":1,"216":2,"217":3,"221":1,"222":1,"223":3,"225":1,"226":1,"254":1,"263":1,"264":3,"270":1,"281":1,"304":1,"314":1,"319":2,"324":1,"326":1,"331":2,"333":1,"342":1,"345":1,"359":2,"362":1,"365":1,"371":1,"375":1,"384":1,"405":1,"407":1,"410":1,"414":1,"417":1,"431":1,"457":1,"459":1,"462":3,"472":1}}],["внешней",{"2":{"450":1}}],["внешнего",{"2":{"211":1,"221":1,"320":1}}],["внешним",{"2":{"483":1}}],["внешние",{"2":{"288":1}}],["внешний",{"2":{"212":1,"221":1,"270":1,"361":1,"375":1,"433":1}}],["внешних",{"2":{"122":1,"454":1,"483":1}}],["внедрить",{"2":{"278":1,"359":1,"432":1}}],["внедрена",{"2":{"255":1}}],["внедрения",{"2":{"207":1,"268":1,"279":1,"332":1}}],["внедрении",{"2":{"203":1}}],["внедряйте",{"2":{"432":1}}],["внедряют",{"2":{"210":1,"377":1}}],["внедрять",{"2":{"56":1,"179":1,"211":1}}],["внесите",{"0":{"500":1}}],["внесения",{"2":{"500":1}}],["внесение",{"2":{"466":1}}],["внесенных",{"2":{"222":1}}],["внесем",{"2":{"209":1}}],["внесли",{"2":{"155":1,"412":1}}],["внести",{"2":{"40":1,"154":1,"292":1,"451":1}}],["вне",{"2":{"136":1,"208":1,"256":1,"270":1,"324":1}}],["вредными",{"2":{"491":1}}],["вредоносные",{"2":{"193":1}}],["времена",{"2":{"490":1}}],["временами",{"2":{"221":1}}],["временем",{"2":{"226":1,"314":1,"424":1}}],["временных",{"2":{"454":1}}],["временным",{"2":{"190":1}}],["временная",{"2":{"371":1}}],["временно",{"2":{"446":1,"450":1}}],["временной",{"2":{"331":1,"515":1}}],["временное",{"2":{"125":1}}],["времени",{"2":{"62":1,"96":1,"102":1,"133":1,"142":1,"165":2,"169":1,"176":2,"215":1,"226":1,"258":1,"319":1,"323":1,"324":1,"325":1,"331":4,"354":3,"375":6,"376":1,"418":1,"465":1,"479":1,"486":1,"490":1,"491":1,"508":1}}],["время",{"0":{"446":1},"2":{"86":1,"92":1,"114":1,"121":1,"130":1,"135":1,"142":3,"145":1,"151":1,"164":1,"165":3,"166":1,"169":1,"174":1,"182":1,"185":1,"191":1,"197":1,"209":1,"210":3,"213":1,"217":1,"218":1,"222":2,"223":2,"224":1,"226":1,"234":1,"246":1,"249":1,"252":3,"257":1,"263":2,"264":1,"266":1,"277":3,"293":1,"307":1,"318":1,"320":1,"321":1,"325":1,"326":2,"337":1,"338":1,"340":1,"343":1,"359":1,"362":2,"368":1,"375":1,"377":1,"378":1,"382":1,"408":1,"419":1,"422":2,"441":1,"446":1,"449":1,"450":1,"451":2,"453":1,"455":1,"456":1,"457":1,"465":1,"466":1,"475":1,"479":5,"483":2,"484":1,"486":1,"491":1,"508":2,"541":1,"570":1,"576":1}}],["вращение",{"2":{"177":1}}],["вращающихся",{"2":{"177":1,"441":1}}],["вроде",{"2":{"62":1,"118":1,"450":1,"492":1}}],["вручную",{"2":{"38":1,"152":1,"268":1,"278":1,"281":1,"290":2,"453":1,"460":1}}],["вряд",{"2":{"26":1,"451":1,"491":1}}],["взяли",{"2":{"483":1}}],["взяв",{"2":{"482":1}}],["взята",{"2":{"213":1}}],["взять",{"2":{"4":1,"151":1,"222":1,"246":1,"354":1,"439":1,"455":1,"541":1}}],["взлетевших",{"2":{"482":1}}],["взлететь",{"2":{"441":1}}],["взломают",{"2":{"376":1}}],["взвесить",{"2":{"222":1}}],["взглянув",{"2":{"266":1}}],["взглянуть",{"2":{"27":1,"126":1,"264":1}}],["взгляд",{"2":{"157":1,"186":1,"190":1,"226":1,"294":1,"320":1,"326":1,"364":1}}],["взгляда",{"2":{"155":1,"158":1,"168":1,"184":1}}],["взаимоотношения",{"2":{"298":1}}],["взаимозаменяемые",{"2":{"222":1,"325":1}}],["взаимопониманием",{"2":{"205":1}}],["взаимодействуем",{"2":{"354":1}}],["взаимодействует",{"2":{"34":1,"157":1,"167":1}}],["взаимодействуют",{"2":{"329":1,"403":1,"433":1}}],["взаимодействовать",{"2":{"183":1,"245":1,"247":2,"249":1,"263":1,"266":1,"267":1,"281":1,"351":1,"377":1,"462":1}}],["взаимодействии",{"2":{"405":1,"453":1}}],["взаимодействию",{"2":{"323":1}}],["взаимодействий",{"0":{"247":1},"2":{"167":1,"221":1,"323":1,"348":1,"354":1,"369":2,"454":2}}],["взаимодействие",{"0":{"405":1},"1":{"406":1,"407":1},"2":{"157":1,"217":2,"247":1,"248":2,"252":1,"262":1,"263":1,"301":1,"323":3,"329":1,"336":1,"344":1,"377":1,"453":2,"462":1}}],["взаимодействием",{"2":{"69":1,"180":1,"218":1,"247":1,"248":1,"278":1}}],["взаимодействия",{"0":{"180":1,"337":1},"1":{"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"338":1,"339":1,"340":1},"2":{"69":1,"155":2,"157":2,"167":1,"184":1,"190":1,"193":1,"243":1,"247":1,"258":1,"291":1,"294":1,"297":1,"332":1,"336":1,"337":1,"346":1,"352":1,"369":1,"376":1,"377":1,"405":2,"430":1,"448":1,"451":1,"462":1,"464":1,"465":1,"483":1}}],["взаимосвязаны",{"2":{"328":1}}],["взаимосвязь",{"2":{"318":1}}],["взаимосвязи",{"2":{"69":1,"451":1}}],["взаимосвязей",{"2":{"68":1,"465":1}}],["вентиляторов",{"2":{"441":1}}],["вело",{"2":{"268":1}}],["велосипед",{"2":{"211":1,"283":1,"315":1,"323":1}}],["великолепным",{"2":{"225":1}}],["ведение",{"2":{"370":1}}],["ведет",{"2":{"233":1,"318":1,"359":1,"382":1}}],["ведется",{"2":{"197":1,"377":1}}],["ведь",{"2":{"362":1,"456":1}}],["ведома",{"2":{"197":1}}],["ведут",{"2":{"171":1,"230":1,"231":1,"257":1,"368":1}}],["ведущие",{"2":{"142":1,"224":1}}],["веток",{"2":{"474":1}}],["ветвью",{"2":{"492":1}}],["ветвей",{"2":{"473":1}}],["ветвями",{"0":{"473":1},"2":{"473":1,"474":1}}],["ветвление",{"2":{"472":1}}],["ветви",{"2":{"138":1}}],["веткой",{"2":{"472":1,"474":1}}],["ветке",{"2":{"472":2,"473":1,"474":1,"478":1,"561":1}}],["ветки",{"2":{"424":2,"472":1,"473":4,"474":1,"561":1}}],["ветку",{"2":{"151":1,"424":2,"473":3,"474":2,"475":2,"561":2}}],["ветках",{"2":{"450":1,"478":1}}],["ветка",{"2":{"121":1,"472":2}}],["вещах",{"2":{"223":1,"331":1}}],["вещи",{"2":{"124":1,"158":1,"446":1,"461":1,"483":1,"570":1}}],["вещь",{"2":{"25":1,"211":1,"213":1}}],["везде",{"2":{"104":1}}],["веса",{"2":{"490":1}}],["вести",{"2":{"419":1,"492":1}}],["вестись",{"2":{"61":1,"80":1}}],["веских",{"2":{"318":1}}],["весомых",{"2":{"181":1}}],["вес",{"2":{"118":1,"161":1}}],["весьма",{"2":{"107":1,"202":1,"222":1,"350":1,"377":1,"410":1,"573":1}}],["весь",{"2":{"43":1,"96":1,"131":1,"178":1,"204":1,"224":1,"226":1,"258":1,"278":1,"291":1,"323":1,"337":1,"354":2,"474":1,"589":1}}],["верен",{"2":{"492":1}}],["вероятно",{"2":{"474":1}}],["вероятность",{"2":{"80":1,"222":1,"270":1,"431":1,"449":1,"479":1}}],["верстать",{"2":{"487":1,"490":1}}],["верстку",{"2":{"490":1}}],["версткой",{"2":{"431":1,"448":1}}],["верстки",{"2":{"264":1,"538":1}}],["версией",{"2":{"471":1}}],["версионность",{"2":{"431":1,"589":1}}],["версионности",{"2":{"71":1}}],["версию",{"2":{"208":1,"210":1,"343":1,"352":1,"424":1,"468":1,"471":1,"491":1,"492":1,"579":1}}],["версий",{"0":{"451":1},"1":{"452":1,"453":1,"454":1,"455":1,"456":1,"457":1,"458":1,"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1,"467":1,"468":1,"469":1,"470":1,"471":1,"472":1,"473":1,"474":1,"475":1,"476":1,"477":1,"478":1},"2":{"35":1,"142":1,"208":2,"397":1,"436":1,"476":2}}],["версиях",{"2":{"210":1}}],["версиями",{"2":{"89":1,"127":1}}],["версия",{"0":{"33":1},"2":{"75":1,"95":1,"135":1,"208":3,"221":1,"265":1,"382":1,"469":1,"545":1}}],["версии",{"2":{"29":1,"30":1,"33":2,"50":1,"96":1,"210":1,"259":1,"318":1,"417":1,"424":2,"459":1,"589":1}}],["вертикали",{"2":{"247":1}}],["вертикальный",{"2":{"258":1}}],["вертикальные",{"2":{"160":1,"184":1}}],["вертикального",{"2":{"189":1}}],["вертикальной",{"2":{"189":1,"258":1}}],["верхняя",{"2":{"576":1}}],["верхний",{"2":{"543":1}}],["верхнее",{"2":{"189":1}}],["верхней",{"2":{"160":1,"178":1,"181":1,"182":1,"189":1,"190":1}}],["верхнем",{"2":{"158":2,"186":1,"190":1,"280":2,"517":1}}],["верхнего",{"2":{"128":1,"142":3,"154":1,"238":1,"246":1,"257":1,"356":1,"357":1}}],["верха",{"2":{"191":1,"210":1,"359":1}}],["вернулся",{"2":{"490":1}}],["вернуть",{"2":{"226":1,"325":1,"326":1,"343":1,"377":1}}],["вернуться",{"2":{"67":1,"182":1,"278":2,"357":1,"466":2}}],["верное",{"2":{"222":1}}],["верно",{"2":{"217":1}}],["вернемся",{"2":{"263":2,"320":1}}],["вернетесь",{"2":{"293":1}}],["вернет",{"2":{"125":1,"264":1,"415":1,"461":1}}],["вернее",{"2":{"25":1}}],["вебприложения",{"2":{"541":1,"542":1}}],["вебприложение",{"2":{"538":1}}],["веба",{"2":{"490":1}}],["вебсервер",{"2":{"425":1,"441":1,"492":1}}],["вебсервере",{"2":{"425":1}}],["вебсервера",{"2":{"125":1,"441":1}}],["вебсайта",{"2":{"424":1,"501":1,"541":1,"542":1}}],["вебсайт",{"2":{"424":1,"540":1}}],["вебсайты",{"2":{"22":1}}],["веб",{"0":{"141":1,"145":1,"152":1,"223":1,"268":1,"337":1,"394":1,"536":1},"1":{"142":1,"146":1,"147":1,"148":1,"149":1,"150":1,"224":1,"269":1,"270":1,"271":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"338":1,"339":1,"340":1},"2":{"3":1,"11":2,"125":2,"139":5,"141":2,"142":3,"143":3,"144":2,"145":10,"146":1,"147":1,"151":1,"152":5,"153":1,"154":4,"155":2,"157":1,"158":1,"174":1,"176":1,"178":1,"179":1,"182":1,"186":1,"205":1,"207":2,"208":2,"209":1,"210":5,"211":1,"213":3,"218":2,"221":4,"222":2,"223":2,"224":2,"225":1,"228":1,"231":1,"243":3,"245":1,"264":1,"268":3,"270":13,"275":1,"276":1,"277":1,"279":3,"280":1,"281":1,"282":2,"286":2,"288":1,"290":1,"291":2,"292":2,"299":1,"317":1,"323":3,"329":3,"331":5,"336":1,"340":1,"344":2,"348":1,"350":2,"351":1,"354":8,"359":1,"366":1,"369":2,"375":1,"377":2,"378":2,"383":1,"384":3,"392":1,"393":1,"403":1,"417":1,"418":2,"431":2,"441":1,"448":2,"464":1,"465":1,"475":1,"476":1,"479":1,"481":1,"483":1,"492":3,"521":1,"532":1,"538":1,"540":1,"541":1,"542":2}}],["вдохновения",{"2":{"23":1}}],["вводе",{"2":{"482":1}}],["вводя",{"2":{"462":1}}],["вводом",{"2":{"254":1}}],["вводились",{"2":{"482":1}}],["вводился",{"2":{"407":1}}],["вводим",{"2":{"354":1}}],["вводимых",{"2":{"217":1}}],["вводит",{"2":{"232":1,"375":1}}],["вводить",{"2":{"2":1,"169":1,"213":1,"215":1,"484":1}}],["ввод",{"2":{"217":1,"247":2,"462":1}}],["вводы",{"2":{"171":1}}],["ввода",{"0":{"169":1,"254":1},"1":{"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1},"2":{"169":1,"171":1,"215":2,"217":7,"218":1,"232":1,"249":1,"254":3,"259":1,"264":1,"357":1,"375":6,"421":1,"535":1}}],["вверх",{"2":{"255":1,"307":1,"405":1,"407":1}}],["вверху",{"2":{"174":1}}],["ввели",{"2":{"209":2,"249":1,"379":1,"462":1}}],["введи",{"2":{"483":1}}],["введите",{"2":{"209":5,"456":1,"500":1}}],["введём",{"2":{"474":1}}],["введет",{"2":{"375":1}}],["введем",{"2":{"223":1,"348":1}}],["введенный",{"2":{"446":1}}],["введенных",{"2":{"419":1}}],["введенная",{"2":{"162":1}}],["введен",{"2":{"292":1}}],["введении",{"2":{"453":1}}],["введением",{"2":{"451":1}}],["введение",{"0":{"331":1},"1":{"332":1,"333":1,"334":1},"2":{"289":1,"475":1}}],["введения",{"2":{"142":1,"166":1}}],["ввести",{"2":{"16":1,"169":1,"209":1,"215":1,"375":1,"456":1}}],["ввиду",{"2":{"4":1}}],["валидаций",{"2":{"457":1}}],["валидацией",{"2":{"377":1}}],["валидация",{"2":{"318":1,"375":2,"450":1}}],["валиден",{"2":{"123":1}}],["ванильному",{"2":{"226":1}}],["важен",{"2":{"167":1,"210":1,"289":1,"292":1,"293":1,"312":1,"328":1}}],["важнейших",{"2":{"454":1}}],["важнее",{"2":{"187":1,"354":1}}],["важна",{"2":{"157":1}}],["важная",{"2":{"40":1,"138":1,"343":1,"378":1}}],["важный",{"2":{"263":1,"286":1,"300":1,"326":1,"366":1,"403":1}}],["важны",{"2":{"176":1,"242":1,"479":1}}],["важные",{"2":{"153":1,"205":1,"222":1,"327":1,"329":1,"368":1,"389":1,"451":1,"477":1,"489":1}}],["важными",{"2":{"153":1,"164":1,"205":1,"370":1}}],["важных",{"2":{"69":1,"210":1,"223":1,"300":1,"324":1,"350":1,"365":1}}],["важной",{"2":{"178":1,"191":1,"209":1,"466":1,"472":1}}],["важного",{"2":{"174":1}}],["важное",{"2":{"170":1,"263":1}}],["важность",{"2":{"161":1}}],["важно",{"2":{"152":1,"160":2,"179":1,"181":1,"185":1,"191":1,"217":1,"224":1,"225":1,"226":1,"229":1,"240":2,"258":1,"270":1,"277":1,"290":1,"293":1,"314":1,"317":1,"324":1,"328":1,"343":1,"349":1,"354":1,"370":1,"371":1,"466":1,"475":1,"478":1}}],["варьироваться",{"2":{"202":1}}],["варьируются",{"2":{"142":1}}],["вариаций",{"2":{"314":1}}],["вариациями",{"2":{"294":1}}],["вариации",{"2":{"171":1}}],["вариантом",{"2":{"151":1,"182":1,"186":1,"220":1,"369":1}}],["вариантов",{"2":{"123":1,"145":2,"151":2,"165":2,"169":1,"170":1,"182":1,"183":1,"184":1,"186":1,"208":1,"214":1,"222":1,"223":1,"440":1,"542":2,"578":1,"579":2}}],["варианте",{"2":{"117":1,"216":1,"385":1}}],["варианту",{"2":{"114":1}}],["вариантам",{"2":{"400":1}}],["вариантами",{"2":{"209":1,"213":1,"419":1}}],["вариантах",{"2":{"153":1,"170":1,"181":1,"374":1}}],["варианта",{"2":{"59":1,"114":1,"131":1,"152":2,"243":1,"491":1,"508":2,"542":2}}],["варианты",{"0":{"124":1,"226":1},"2":{"16":1,"123":1,"127":1,"145":1,"154":1,"180":1,"199":1,"221":1,"277":1,"318":1,"341":1,"412":1,"418":1,"425":1,"462":1,"579":1}}],["вариант",{"2":{"4":2,"17":1,"126":1,"170":2,"198":2,"199":1,"208":2,"209":1,"210":1,"222":2,"251":1,"277":1,"304":1,"335":1,"359":1,"446":1,"481":1,"491":1,"508":3}}],["вас",{"2":{"127":1,"166":1,"190":1,"225":1,"242":1,"259":1,"261":1,"290":1,"293":1,"326":1,"345":1,"446":1,"450":1,"456":1,"457":1,"470":2,"475":1,"562":2}}],["васи",{"2":{"123":1}}],["вася",{"2":{"123":1}}],["вами",{"2":{"209":2,"217":1}}],["вам",{"2":{"96":1,"127":2,"131":1,"133":3,"139":1,"143":1,"153":1,"158":1,"162":1,"192":1,"205":1,"206":1,"208":1,"209":1,"222":4,"223":1,"225":1,"226":2,"235":1,"242":2,"257":1,"264":2,"269":1,"283":3,"290":2,"293":2,"318":4,"327":2,"341":1,"352":1,"382":3,"387":2,"404":1,"407":1,"418":1,"425":1,"433":1,"437":1,"440":1,"468":1,"469":1,"471":1,"481":1,"484":1,"490":1,"491":1,"492":1}}],["ваши",{"2":{"356":1,"450":1}}],["ваших",{"2":{"162":1,"341":1}}],["ваша",{"2":{"240":1}}],["вашу",{"2":{"122":1,"222":1,"468":1,"469":1}}],["ваше",{"2":{"222":1,"293":1,"331":1,"382":1,"437":1,"484":1,"500":1,"563":1}}],["вашей",{"2":{"142":1,"209":1,"222":1,"304":1,"310":1,"410":1,"472":1}}],["вашем",{"2":{"122":1,"294":1,"384":1,"437":1,"475":1,"492":1}}],["вашему",{"2":{"96":1,"122":1,"209":1,"351":1,"377":1,"425":2,"450":1}}],["вашего",{"2":{"96":1,"125":1,"127":2,"132":1,"142":2,"209":2,"210":1,"211":1,"222":1,"234":1,"278":1,"294":1,"298":1,"327":1,"331":1,"403":2,"418":1,"424":2,"425":1,"432":1,"433":1,"483":1,"484":2,"486":1,"492":1,"561":1,"562":1,"588":1,"590":2}}],["ваш",{"2":{"4":1,"124":1,"142":1,"210":1,"211":1,"222":1,"223":1,"240":1,"424":2,"437":1,"446":1,"471":1,"481":1,"489":1,"491":1,"492":2,"561":1}}],["всплывающем",{"2":{"184":1,"201":1}}],["всплывающего",{"2":{"184":2}}],["всплывающей",{"2":{"172":2}}],["всплывающее",{"2":{"172":1}}],["всплывающая",{"2":{"172":1}}],["вспомним",{"2":{"324":1}}],["вспомнить",{"2":{"211":1}}],["вспомните",{"2":{"157":1,"376":1}}],["вспоминать",{"2":{"304":1}}],["вспомогательный",{"2":{"411":1}}],["вспомогательные",{"2":{"4":1,"319":1}}],["вспомогательная",{"2":{"217":1,"247":1,"264":2}}],["вскоре",{"2":{"162":1,"209":1,"221":1,"331":1,"355":1}}],["встающих",{"2":{"541":1}}],["вставке",{"2":{"234":1}}],["вставать",{"2":{"4":1}}],["вступает",{"2":{"224":1}}],["встраивается",{"2":{"515":1}}],["встроенную",{"2":{"341":1}}],["встроенная",{"2":{"329":1}}],["встроенным",{"2":{"251":1}}],["встроенные",{"0":{"234":1}}],["встроенных",{"0":{"227":1},"1":{"228":1,"229":1,"230":1,"231":1,"232":1,"233":1},"2":{"233":1,"234":1,"371":1}}],["встроенный",{"2":{"208":1,"318":1}}],["встроенного",{"2":{"221":1}}],["встретит",{"2":{"456":1}}],["встретить",{"2":{"184":1,"203":1,"235":1,"240":1,"288":1,"413":1}}],["встречал",{"2":{"491":1}}],["встречали",{"2":{"363":1}}],["встречающихся",{"2":{"383":1}}],["встречающиеся",{"2":{"142":1,"294":1}}],["встречаются",{"2":{"283":1,"294":1,"295":1}}],["встречается",{"2":{"182":1,"195":1,"196":1,"207":1,"288":1,"323":1}}],["встречавшейся",{"2":{"156":1}}],["всячески",{"2":{"500":1}}],["всяких",{"2":{"492":1}}],["вся",{"2":{"122":1,"144":1,"152":1,"359":1,"376":1,"456":1,"490":1,"537":1,"582":1}}],["всю",{"2":{"96":1,"151":1,"181":1,"202":1,"213":1,"217":1,"243":1,"263":1,"294":1,"331":1,"370":1,"377":1,"454":1,"456":1}}],["всевозможных",{"2":{"491":1}}],["всей",{"2":{"145":1,"202":1,"209":1,"224":1,"255":2,"310":1,"354":1,"371":1,"377":1,"459":1,"590":1}}],["всемирная",{"2":{"221":1}}],["всеми",{"2":{"210":1,"213":1,"217":1,"357":1,"371":1,"413":1,"417":1,"475":1,"481":1,"492":3}}],["всем",{"2":{"69":1,"125":2,"145":1,"255":1,"278":1,"291":1,"300":1,"311":1,"384":1,"411":1,"446":1,"483":1}}],["всему",{"2":{"41":1,"112":1,"210":1,"225":1,"264":1,"284":1,"290":1,"359":1,"412":1,"413":1,"417":1,"431":1,"449":1,"450":2,"466":1}}],["всех",{"2":{"38":1,"44":1,"89":1,"125":1,"127":2,"130":1,"160":1,"217":2,"240":1,"251":1,"253":1,"270":1,"278":1,"310":1,"323":1,"325":1,"331":2,"345":1,"349":1,"371":1,"374":1,"376":1,"384":1,"411":1,"418":1,"439":1,"456":1,"457":2,"467":1,"469":1,"478":2,"482":2,"492":1,"533":1,"537":1}}],["все",{"2":{"36":1,"50":1,"59":1,"83":1,"95":1,"96":2,"104":1,"109":1,"111":1,"121":1,"123":1,"130":2,"133":1,"139":1,"141":1,"142":2,"143":1,"145":3,"152":2,"158":2,"160":1,"162":1,"164":1,"166":1,"175":1,"179":1,"186":1,"191":1,"193":1,"205":1,"208":3,"213":4,"215":1,"217":6,"218":3,"221":3,"222":1,"223":1,"224":1,"225":2,"226":5,"229":1,"233":1,"234":1,"235":1,"240":2,"241":1,"252":3,"254":1,"264":1,"265":1,"270":3,"272":2,"273":1,"277":2,"278":1,"280":1,"288":1,"292":1,"300":1,"310":1,"312":2,"320":1,"326":1,"331":3,"335":1,"340":1,"341":1,"343":1,"354":2,"359":1,"365":1,"370":4,"377":4,"378":1,"382":1,"405":2,"406":1,"410":1,"413":1,"417":1,"418":4,"420":1,"422":1,"431":2,"446":1,"448":1,"450":2,"453":1,"454":1,"456":1,"457":2,"458":1,"459":1,"460":1,"462":1,"471":4,"473":1,"474":1,"475":1,"477":2,"482":1,"490":1,"491":1,"492":1,"547":1,"564":1,"577":1,"591":1}}],["всего",{"2":{"29":1,"34":1,"80":1,"82":1,"96":2,"122":1,"123":1,"124":1,"129":1,"142":1,"144":1,"145":1,"157":1,"167":2,"168":1,"175":1,"195":1,"217":1,"228":1,"246":1,"263":1,"264":1,"270":1,"283":1,"290":2,"291":2,"293":2,"295":1,"330":1,"331":2,"338":1,"345":1,"368":1,"370":1,"416":1,"431":1,"446":2,"448":1,"450":1,"455":1,"457":1,"491":1,"570":2}}],["всегда",{"0":{"130":1},"2":{"25":1,"96":1,"130":1,"152":1,"189":2,"213":1,"216":1,"222":2,"225":1,"236":1,"240":1,"270":1,"303":1,"338":1,"343":1,"345":1,"375":1,"421":1,"432":2,"437":1,"450":1,"484":1,"552":1}}],["всём",{"2":{"450":1}}],["всё",{"2":{"2":1,"35":1,"40":1,"43":1,"59":1,"89":1,"104":1,"125":1,"153":1,"418":1,"441":1,"482":2,"483":2,"491":1,"492":1,"501":1,"537":1}}],["выезжает",{"2":{"580":1,"582":1}}],["выезжающий",{"2":{"33":1}}],["выучить",{"2":{"491":1}}],["выложить",{"2":{"475":1}}],["вылиться",{"2":{"47":1}}],["выясним",{"2":{"339":1}}],["выявлении",{"2":{"492":1}}],["выявления",{"2":{"451":1,"453":1}}],["выявление",{"0":{"249":1}}],["выявить",{"2":{"246":1,"248":1,"286":1}}],["выигрывает",{"2":{"286":1}}],["выигрыш",{"2":{"222":1,"344":1,"350":1}}],["вытекает",{"2":{"318":1}}],["вытеснены",{"2":{"221":1}}],["выталкивая",{"2":{"179":1}}],["вытащить",{"2":{"59":1}}],["вычисление",{"2":{"457":1,"458":1}}],["вычислений",{"2":{"354":1}}],["вычисления",{"2":{"324":1,"325":1,"455":1,"482":1,"483":2}}],["вычислять",{"2":{"324":1}}],["вычисляем",{"2":{"319":1}}],["вычисляемыми",{"2":{"412":1,"414":1}}],["вычисляемые",{"2":{"217":1,"218":1,"226":1,"413":2,"415":2}}],["вычисляемых",{"2":{"217":2,"264":1,"414":1}}],["вычисляемое",{"2":{"217":1}}],["вычислительных",{"2":{"331":1}}],["вычислительные",{"2":{"268":1}}],["вычислительноемкие",{"2":{"335":1}}],["вычислительной",{"2":{"324":1,"329":1,"340":1,"354":1}}],["вычислительном",{"2":{"230":1}}],["вычислительная",{"2":{"145":1,"377":1}}],["выгоде",{"2":{"492":1}}],["выгодно",{"2":{"463":1}}],["выгодные",{"2":{"199":1}}],["выгоды",{"2":{"270":1}}],["выглядело",{"2":{"345":1}}],["выглядел",{"2":{"263":1,"307":1,"460":1}}],["выглядела",{"2":{"214":1,"456":1}}],["выглядеть",{"2":{"14":1,"122":1,"178":2,"212":1,"215":1,"216":1,"246":2,"257":1,"280":1,"308":1,"310":1,"311":1,"320":1,"332":1,"341":1,"346":1,"357":1,"359":1,"363":1,"365":1,"370":1,"375":1,"408":1,"409":1,"413":1,"464":1,"472":1}}],["выглядящий",{"2":{"209":1}}],["выглядят",{"2":{"22":1,"142":2,"165":1,"442":1,"450":1,"545":1}}],["выглядит",{"2":{"106":1,"114":1,"117":1,"129":1,"226":1,"231":1,"263":1,"277":1,"325":1,"377":1,"421":1,"450":1,"464":1,"465":1,"474":1,"492":2}}],["выключен",{"2":{"170":1}}],["выключено",{"2":{"170":2}}],["выключенное",{"2":{"170":1}}],["выходе",{"2":{"508":1,"538":1}}],["выходов",{"2":{"453":1}}],["выходом",{"2":{"170":1,"457":1}}],["выходных",{"2":{"453":1}}],["выходные",{"2":{"318":1,"467":1}}],["выходным",{"2":{"132":1}}],["выходят",{"2":{"290":1,"293":1}}],["выходящие",{"2":{"221":1}}],["выход",{"2":{"247":1}}],["выходы",{"2":{"226":1,"321":1,"454":1}}],["выходить",{"2":{"245":1,"248":1,"288":1}}],["выходит",{"2":{"189":1,"211":1,"245":1,"279":1,"288":1,"291":1,"370":1,"374":1,"377":2,"475":2}}],["выхода",{"2":{"186":1}}],["вырожденная",{"2":{"449":1}}],["выровнены",{"2":{"161":1}}],["вырастает",{"2":{"418":1}}],["выражаю",{"2":{"387":1}}],["выраженных",{"2":{"371":1}}],["выражения",{"2":{"259":2}}],["выражение",{"2":{"233":1}}],["выражением",{"2":{"230":1}}],["выработайте",{"2":{"226":1}}],["выработаете",{"2":{"155":1}}],["выработки",{"2":{"222":1}}],["выравнивания",{"2":{"161":2}}],["выравниванию",{"2":{"161":1,"162":1}}],["выравнивание",{"2":{"161":2,"162":1}}],["выравниванием",{"0":{"161":1},"2":{"161":1}}],["выведет",{"2":{"325":1}}],["выведена",{"2":{"325":1}}],["выведено",{"2":{"325":3,"326":1}}],["выведены",{"2":{"163":1}}],["выведенных",{"2":{"125":1}}],["вывести",{"2":{"234":1,"268":1,"451":1}}],["выводимый",{"2":{"461":1}}],["выводим",{"2":{"264":1,"319":1}}],["выводить",{"2":{"483":1}}],["выводится",{"2":{"257":1,"319":1}}],["выводит",{"2":{"190":1,"325":1,"326":1,"483":1}}],["выводе",{"2":{"259":1,"362":1,"483":1}}],["вывода",{"2":{"234":1,"325":1}}],["вывод",{"0":{"36":1,"102":1},"2":{"247":1,"441":1,"454":1,"462":2,"492":1}}],["выдать",{"2":{"462":1}}],["выдан",{"2":{"464":1}}],["выдана",{"2":{"377":1}}],["выданный",{"2":{"372":1}}],["выдаст",{"2":{"342":1}}],["выдавать",{"2":{"309":1,"457":1,"458":1}}],["выдает",{"2":{"254":1,"314":2,"457":1}}],["выдачи",{"2":{"4":1}}],["выделяет",{"2":{"482":1}}],["выделять",{"2":{"341":1}}],["выделяют",{"2":{"320":1}}],["выделяются",{"2":{"163":1}}],["выделена",{"2":{"457":1}}],["выделенная",{"2":{"377":1}}],["выделенные",{"2":{"217":1,"415":1}}],["выделенный",{"2":{"194":1,"331":1}}],["выделениями",{"2":{"365":1}}],["выделение",{"2":{"172":1}}],["выделении",{"2":{"171":1,"172":1}}],["выделим",{"2":{"107":1}}],["выделить",{"2":{"88":1,"122":1,"431":1,"483":1}}],["выдвигающемся",{"2":{"108":1}}],["вышедшая",{"2":{"491":1}}],["вышеперечисленные",{"2":{"418":2}}],["вышеперечисленных",{"2":{"374":1}}],["вышеизложенными",{"2":{"217":1}}],["вышеуказанного",{"2":{"571":1}}],["вышеуказанной",{"2":{"562":1}}],["вышеуказанных",{"2":{"112":1}}],["вышеупомянутой",{"2":{"272":1}}],["вышеупомянутого",{"2":{"253":1}}],["вышеупомянутые",{"2":{"249":1}}],["вышеупомянутымипротоколами",{"2":{"151":1}}],["выше",{"2":{"80":1,"96":1,"200":1,"280":1,"342":1,"372":1,"417":1,"492":1,"531":1}}],["выйти",{"2":{"63":1}}],["выпуске",{"2":{"589":1}}],["выпуска",{"2":{"476":1}}],["выпущенного",{"2":{"476":1}}],["выписан",{"2":{"123":2}}],["выпадающих",{"2":{"187":1}}],["выпадающие",{"0":{"187":1},"2":{"187":1}}],["выпадающим",{"2":{"107":1}}],["выпадающее",{"2":{"178":1}}],["выпало",{"2":{"23":1}}],["выполниться",{"2":{"483":1}}],["выполнить",{"2":{"252":1,"263":1,"271":1,"310":1,"319":1,"324":1,"326":1,"340":1,"344":1,"356":1,"371":1,"404":1,"417":1,"455":2,"464":1,"483":1}}],["выполнит",{"2":{"224":2}}],["выполните",{"2":{"209":1,"280":1,"348":1,"356":1,"460":1,"469":1,"470":2,"471":3,"474":3}}],["выполним",{"2":{"212":1,"325":1}}],["выполнив",{"2":{"144":1,"217":1,"322":1,"464":1}}],["выполнено",{"2":{"218":1}}],["выполненные",{"2":{"215":1}}],["выполненных",{"2":{"215":1,"217":3,"457":1}}],["выполнена",{"2":{"171":1,"215":1,"217":2,"233":1,"324":1}}],["выполнение",{"2":{"316":1,"317":1,"324":1,"325":2,"326":2,"331":1,"335":1,"336":1,"343":1,"374":1,"453":1,"457":2,"458":3}}],["выполнением",{"2":{"166":1,"176":1,"224":1}}],["выполнении",{"2":{"270":1,"326":1,"341":1,"377":1,"461":1,"464":1}}],["выполнению",{"2":{"244":1}}],["выполнения",{"2":{"69":1,"152":1,"166":1,"174":1,"176":6,"208":1,"223":1,"224":3,"233":1,"234":1,"243":1,"249":1,"252":1,"257":1,"259":1,"264":1,"270":1,"277":1,"294":1,"316":2,"317":1,"320":2,"321":1,"325":1,"326":1,"331":4,"336":1,"341":1,"347":1,"350":1,"362":1,"372":1,"377":1,"424":1,"446":1,"451":1,"454":2,"456":2,"457":1,"461":1,"464":1,"468":1,"471":2,"475":2,"477":1}}],["выполняют",{"2":{"377":1,"450":1,"454":1,"482":1,"491":1}}],["выполняются",{"2":{"223":1,"324":2,"418":1,"453":1,"459":1,"461":1,"483":1}}],["выполняющих",{"2":{"454":1}}],["выполняющимся",{"2":{"418":1}}],["выполняющиеся",{"2":{"331":1}}],["выполняющий",{"2":{"288":2,"291":1}}],["выполняемых",{"2":{"453":1}}],["выполняемой",{"2":{"331":1}}],["выполняемая",{"2":{"160":1}}],["выполняем",{"2":{"145":1,"315":1,"319":1,"339":1,"417":1,"457":1}}],["выполняется",{"2":{"124":1,"130":1,"176":1,"214":1,"226":2,"231":1,"252":1,"278":1,"326":1,"362":1,"370":1}}],["выполняет",{"2":{"69":1,"258":1,"314":1,"317":1,"320":2,"331":1,"339":1,"344":1,"370":1,"405":1,"457":1,"492":1}}],["выполняться",{"2":{"331":2,"341":1,"344":1,"433":1,"459":1,"463":1,"483":1}}],["выполнять",{"2":{"59":1,"68":1,"148":1,"166":1,"208":1,"230":1,"260":1,"263":2,"288":1,"316":2,"325":2,"331":2,"335":1,"344":2,"405":1,"473":1,"483":1,"542":1}}],["вынужден",{"2":{"198":1}}],["выносить",{"2":{"314":1}}],["вынос",{"2":{"83":1}}],["выносятся",{"2":{"41":1}}],["вынести",{"2":{"3":1,"114":1,"288":1}}],["высмеять",{"2":{"202":1}}],["высоту",{"2":{"181":1}}],["высоким",{"2":{"538":1}}],["высокий",{"2":{"78":1,"159":2}}],["высокая",{"2":{"354":1,"431":2,"448":2,"538":1}}],["высокой",{"2":{"221":1,"329":1}}],["высокого",{"2":{"65":1,"284":1,"454":1}}],["высокоуровневыми",{"2":{"39":1}}],["выступать",{"2":{"300":1,"420":1}}],["выступает",{"2":{"257":1,"335":1}}],["выстроить",{"2":{"311":1,"326":1}}],["выстроив",{"2":{"167":1}}],["выстраиваем",{"2":{"326":1}}],["выстраиваемой",{"2":{"40":1}}],["выстраивать",{"2":{"325":1}}],["выстраивания",{"2":{"159":1}}],["выставочную",{"2":{"62":1}}],["вызван",{"2":{"320":1}}],["вызвало",{"2":{"226":1}}],["вызвать",{"2":{"34":1,"124":1,"175":1,"203":2,"277":1,"319":1}}],["вызывая",{"2":{"264":1}}],["вызываем",{"2":{"223":1,"317":3,"362":1,"462":1}}],["вызывается",{"2":{"410":1}}],["вызывает",{"2":{"3":1,"166":1,"201":1,"233":1,"248":1}}],["вызывающих",{"2":{"264":1}}],["вызывающим",{"2":{"181":1}}],["вызывающего",{"2":{"178":1}}],["вызываются",{"2":{"290":1}}],["вызывают",{"2":{"155":1,"472":1}}],["вызывать",{"2":{"160":1,"176":1,"214":1,"245":1,"247":1,"248":1,"304":1,"337":1,"359":1,"475":1}}],["вызываться",{"2":{"124":1}}],["вызову",{"2":{"326":2}}],["вызове",{"2":{"325":1,"345":1}}],["вызовет",{"2":{"126":1,"179":1,"217":2,"365":1,"373":1}}],["вызовом",{"2":{"308":1,"326":1}}],["вызовов",{"2":{"122":1,"278":1,"311":1,"325":1,"326":1,"344":1,"345":1,"454":1}}],["вызовами",{"2":{"326":1,"344":1}}],["вызовах",{"2":{"304":1}}],["вызова",{"2":{"253":1,"320":2,"324":5,"325":2,"326":4,"333":1,"349":1}}],["вызов",{"0":{"324":1},"1":{"325":1},"2":{"41":1,"96":1,"223":1,"318":1,"320":1,"324":3,"326":3,"344":2,"370":1,"420":1,"545":1}}],["вызовы",{"2":{"41":1,"278":1,"283":1,"300":1,"320":1,"321":1,"326":1,"335":1,"344":1,"349":2,"354":1,"459":1,"545":1,"546":1}}],["вы",{"2":{"26":2,"68":1,"96":1,"131":2,"133":2,"142":2,"151":2,"155":2,"160":3,"162":3,"166":2,"170":1,"183":1,"189":4,"192":1,"194":1,"206":2,"208":1,"209":9,"210":5,"211":2,"213":1,"217":1,"220":1,"221":1,"222":7,"223":1,"224":2,"225":4,"226":3,"235":1,"240":3,"242":3,"255":1,"267":1,"268":1,"270":3,"276":2,"283":1,"286":1,"288":2,"289":1,"290":5,"291":2,"293":5,"294":1,"303":1,"309":1,"310":3,"318":3,"320":1,"323":3,"325":1,"328":2,"329":1,"331":7,"334":1,"340":1,"342":1,"352":1,"356":2,"357":1,"362":1,"363":1,"365":2,"369":1,"376":1,"382":1,"383":1,"384":1,"391":1,"403":2,"404":2,"418":1,"421":1,"423":1,"425":2,"427":1,"432":3,"433":1,"437":1,"439":1,"440":1,"448":1,"450":4,"457":5,"467":1,"468":1,"470":1,"471":4,"472":2,"473":1,"474":2,"475":2,"476":1,"478":1,"485":1,"487":1,"491":1,"500":1,"506":1}}],["выброшенной",{"2":{"458":1}}],["выбрасывать",{"2":{"457":1}}],["выбрасывает",{"2":{"326":1}}],["выбрасываем",{"2":{"310":1}}],["выбрав",{"2":{"456":1}}],["выбрано",{"2":{"270":1}}],["выбранная",{"2":{"591":1}}],["выбранными",{"2":{"535":1}}],["выбранных",{"2":{"209":1}}],["выбранные",{"2":{"199":1}}],["выбранного",{"2":{"151":1,"347":1,"359":1,"377":1}}],["выбранному",{"2":{"142":1}}],["выбранной",{"2":{"11":1,"31":1}}],["выбрали",{"2":{"356":1}}],["выбрал",{"2":{"195":1}}],["выбрать",{"2":{"142":1,"170":2,"198":1,"199":1,"209":1,"346":1,"347":1,"363":1,"417":1,"441":1,"456":1,"535":1,"551":1,"583":1}}],["выбирает",{"2":{"223":1}}],["выбираешь",{"2":{"98":1}}],["выбирая",{"2":{"222":2}}],["выбирать",{"2":{"198":1}}],["выберите",{"2":{"152":2,"209":3,"280":2,"468":1,"561":2}}],["выбором",{"2":{"278":1}}],["выбору",{"2":{"131":1,"209":1,"424":1}}],["выбор",{"0":{"37":1,"39":1},"1":{"38":1,"39":1,"40":1,"41":1},"2":{"39":1,"69":1,"145":1,"165":1,"169":1,"312":1,"347":1,"517":1,"545":1}}],["выборе",{"2":{"23":1,"39":1,"172":2,"185":1,"200":1,"208":1,"357":1,"363":3,"491":1}}],["выборка",{"2":{"13":1,"363":1}}],["выбора",{"2":{"4":1,"171":1,"184":1,"186":1,"187":2,"540":1,"542":1}}],["визитку",{"2":{"541":1}}],["визитной",{"2":{"390":1}}],["визуализацию",{"2":{"450":1,"482":1}}],["визуализация",{"0":{"515":1},"2":{"376":1,"515":1}}],["визуализации",{"2":{"171":1,"490":1}}],["визуальные",{"2":{"475":1}}],["визуальный",{"2":{"157":1,"321":1}}],["визуальным",{"2":{"157":1}}],["визуальных",{"2":{"157":1,"158":1,"159":1,"160":2,"482":1}}],["визуальной",{"2":{"501":1}}],["визуальное",{"2":{"321":1,"375":1}}],["визуально",{"2":{"11":1,"186":1,"255":1,"408":1}}],["визуального",{"2":{"3":1,"25":1,"157":1,"160":1,"267":1,"392":1}}],["википедии",{"2":{"164":1,"165":1,"166":1,"292":1}}],["виртуальных",{"2":{"146":1}}],["виртуальный",{"2":{"124":1,"425":1,"491":1}}],["виртуального",{"2":{"148":1}}],["виртуальном",{"2":{"145":1,"154":1}}],["виртуальное",{"2":{"51":1}}],["виртуальная",{"2":{"145":1}}],["витрины",{"2":{"39":1,"77":1,"542":1}}],["витрину",{"2":{"23":1,"62":1,"63":1}}],["витрина",{"0":{"11":1},"2":{"9":1,"12":1,"59":1,"61":1,"80":1,"579":1}}],["видов",{"2":{"551":1,"583":1}}],["виды",{"2":{"453":1,"454":1}}],["видны",{"2":{"376":1}}],["видно",{"2":{"83":1,"123":1,"176":1,"189":1,"194":1,"312":1,"314":1,"322":1,"325":1,"331":1,"357":1,"363":1,"376":1,"408":1,"411":1}}],["видимые",{"2":{"331":1}}],["видимое",{"2":{"331":1}}],["видимости",{"2":{"278":2,"361":1,"377":1}}],["видимостью",{"2":{"263":1}}],["видимость",{"2":{"247":1}}],["видимой",{"2":{"191":1,"439":1}}],["видим",{"2":{"191":1,"214":1,"254":1,"276":1,"278":1,"294":1,"319":1,"344":1,"364":1,"466":1}}],["видит",{"2":{"123":1}}],["видите",{"2":{"26":1,"186":1,"252":1,"253":1,"255":1,"257":1,"263":1,"275":1,"277":1,"291":1,"307":1,"312":1,"318":1,"323":1,"325":1,"326":1,"354":1,"362":1,"370":1,"371":1,"374":1}}],["виджеты",{"2":{"169":1}}],["виджетов",{"2":{"26":1,"430":1,"448":1,"450":1}}],["виду",{"2":{"159":1,"162":1,"186":1,"189":1,"229":1,"294":1,"369":1,"370":1}}],["видели",{"2":{"162":1,"233":1,"256":1,"323":2,"336":1,"405":1,"407":1}}],["виден",{"2":{"161":1,"217":1,"580":1}}],["видение",{"2":{"68":1}}],["видеть",{"2":{"158":1,"189":1,"309":1}}],["видеоролики",{"2":{"387":1}}],["видеоигры",{"2":{"181":1}}],["видео",{"2":{"86":1,"156":1,"186":1,"208":1,"244":1,"269":1,"330":1,"353":1,"404":1,"437":1,"452":1,"491":4,"492":1}}],["виде",{"2":{"17":1,"61":1,"88":1,"111":1,"124":2,"172":1,"185":1,"190":1,"191":1,"209":1,"221":1,"222":2,"225":1,"249":1,"253":2,"255":1,"260":1,"264":1,"289":1,"294":1,"305":1,"319":1,"335":1,"342":1,"343":2,"347":1,"349":2,"354":1,"357":1,"369":1,"370":1,"405":1,"414":1,"446":1,"460":1,"464":2,"515":1,"531":1}}],["вид",{"2":{"5":1,"18":1,"212":1,"221":1,"270":1,"286":1,"321":1,"331":1,"361":1,"376":1,"408":1}}],["вида",{"2":{"3":1,"4":1,"211":1,"221":1,"320":1,"454":1,"455":1,"459":1}}],["воды",{"2":{"491":1}}],["водителем",{"2":{"491":2}}],["вождению",{"2":{"491":1}}],["вождения",{"2":{"491":3}}],["вовлеченности",{"2":{"466":1}}],["вовсе",{"2":{"286":1}}],["военно",{"2":{"292":1}}],["военного",{"2":{"142":1}}],["воркер",{"2":{"501":1}}],["воркером",{"2":{"340":1}}],["воркеры",{"2":{"278":1}}],["воровство",{"2":{"26":1}}],["воровством",{"2":{"26":1}}],["воплотить",{"2":{"245":1}}],["вопросом",{"2":{"479":1}}],["вопросов",{"2":{"206":1,"210":1,"348":1,"371":1,"491":1,"502":1}}],["вопросительный",{"2":{"472":1}}],["вопроса",{"2":{"249":1,"454":1}}],["вопросами",{"2":{"242":1}}],["вопросах",{"2":{"211":1,"352":1,"502":1}}],["вопросе",{"2":{"182":1,"491":1}}],["вопросу",{"2":{"142":1,"299":1}}],["вопрос",{"2":{"4":2,"194":1,"202":1,"222":2,"246":1,"247":1,"248":1,"249":1,"259":1,"453":1,"464":2,"491":1,"500":1}}],["вопросы",{"0":{"154":1,"194":1,"206":1,"220":1,"242":1,"267":1,"282":1,"328":1,"351":1,"379":1,"423":1,"478":1},"2":{"4":1,"64":1,"139":1,"158":1,"185":1,"242":1,"245":2,"267":1,"282":1,"379":1,"423":1,"502":1}}],["волнуйтесь",{"2":{"224":1}}],["волшебству",{"2":{"323":1}}],["волшебства",{"2":{"222":1}}],["волшебство",{"2":{"179":1,"263":1}}],["войдите",{"2":{"209":1}}],["восстановления",{"2":{"376":1,"377":1}}],["восстановлено",{"2":{"234":1}}],["воссоздающих",{"2":{"341":1}}],["восклицательных",{"2":{"322":1}}],["восемь",{"0":{"166":1},"2":{"166":1}}],["восьми",{"2":{"142":1}}],["воспользуйтесь",{"2":{"561":1}}],["воспользуемся",{"2":{"336":1}}],["воспользоваться",{"2":{"16":1,"242":1,"287":1,"371":1,"441":1,"465":1,"492":1}}],["воспринимается",{"2":{"408":1}}],["воспринимаются",{"2":{"270":1}}],["воспринимайте",{"2":{"222":1}}],["восприятия",{"2":{"326":1,"327":1,"331":1}}],["восприятие",{"2":{"157":1,"167":1,"590":1}}],["восприятии",{"2":{"68":1}}],["воспроизведенные",{"2":{"193":1}}],["вокруг",{"2":{"122":1,"450":1,"462":1}}],["вот",{"2":{"14":1,"16":1,"62":1,"125":1,"126":1,"128":1,"129":2,"131":2,"148":1,"162":1,"166":1,"170":1,"172":1,"174":1,"175":1,"176":2,"178":2,"182":1,"183":1,"184":2,"185":1,"189":1,"194":1,"195":1,"196":1,"202":1,"203":1,"208":1,"213":1,"217":1,"218":1,"225":1,"226":2,"231":1,"232":1,"252":1,"253":2,"257":1,"259":1,"263":1,"272":1,"295":1,"301":1,"304":1,"308":1,"311":1,"314":1,"316":1,"319":1,"320":1,"323":1,"326":2,"331":1,"337":1,"339":1,"362":1,"363":1,"368":1,"376":1,"377":1,"417":1,"421":1,"431":1,"441":1,"442":1,"448":1,"450":2,"457":1,"483":1,"491":1,"525":1,"571":1,"573":1}}],["возлагает",{"2":{"453":1}}],["вознаграждения",{"2":{"377":1}}],["возникшая",{"2":{"462":1}}],["возникла",{"2":{"457":1}}],["возникли",{"2":{"62":1}}],["возникновения",{"2":{"457":1}}],["возникновении",{"2":{"166":1,"332":1,"458":1}}],["возникнет",{"2":{"457":1}}],["возникнуть",{"2":{"125":1,"172":1,"194":1,"259":1,"331":1,"541":1}}],["возникающими",{"2":{"368":1}}],["возникают",{"2":{"68":1}}],["возникает",{"2":{"160":1,"222":1,"254":1,"369":1,"453":1,"466":1}}],["воздействия",{"2":{"323":1}}],["возврата",{"2":{"316":1,"324":1,"326":2}}],["возврат",{"2":{"278":1}}],["возвращайтесь",{"2":{"491":1}}],["возвращают",{"2":{"454":1}}],["возвращающая",{"2":{"414":1,"446":1}}],["возвращающие",{"2":{"326":1}}],["возвращающей",{"2":{"130":1,"226":1,"253":1}}],["возвращающую",{"2":{"130":1,"252":2,"545":1}}],["возвращаемый",{"2":{"462":1}}],["возвращаемся",{"2":{"278":1}}],["возвращаем",{"2":{"258":1,"304":1,"311":2,"319":1,"326":1,"412":1,"420":2}}],["возвращаемое",{"2":{"232":1,"319":1}}],["возвращается",{"2":{"190":1,"368":1,"370":1,"437":1}}],["возвращает",{"2":{"96":1,"123":2,"124":1,"131":2,"223":2,"226":1,"252":1,"253":1,"258":1,"263":1,"313":1,"316":1,"326":2,"338":1,"340":1,"343":1,"362":1,"368":4,"369":1,"420":1,"458":1}}],["возвращать",{"2":{"190":1,"262":1,"339":1,"354":1,"458":1}}],["возвращаться",{"2":{"178":1,"327":1}}],["возвращения",{"2":{"41":1}}],["возрасти",{"2":{"222":1}}],["возрастающей",{"2":{"189":1}}],["возьмет",{"2":{"151":1,"223":1}}],["возьмем",{"2":{"12":1,"215":1,"222":1,"246":1,"290":1,"305":1,"355":1,"455":1}}],["возможную",{"2":{"376":1}}],["возможна",{"2":{"251":1,"591":1}}],["возможны",{"2":{"253":1}}],["возможными",{"2":{"419":1}}],["возможным",{"2":{"189":1,"354":2,"450":1}}],["возможные",{"2":{"152":1}}],["возможных",{"2":{"56":1,"150":1,"249":1,"255":1,"264":1,"331":1,"359":1,"453":1,"457":1}}],["возможное",{"2":{"375":1,"431":1,"448":1}}],["возможной",{"2":{"328":1}}],["возможного",{"2":{"152":1}}],["возможностях",{"2":{"454":1,"492":1}}],["возможностям",{"2":{"169":1,"418":1}}],["возможностями",{"2":{"139":2,"417":1,"475":1}}],["возможности",{"0":{"488":1},"2":{"170":1,"195":1,"210":1,"218":2,"221":3,"250":1,"253":1,"256":1,"257":1,"260":1,"265":1,"266":1,"277":1,"288":1,"331":1,"341":1,"369":1,"377":1,"418":1,"424":1,"440":1,"446":1,"454":1,"465":2,"467":1,"482":1,"542":2}}],["возможностей",{"0":{"131":1},"2":{"162":1,"211":1,"221":1,"305":1,"326":1,"365":1,"369":1,"441":1,"442":1,"446":2,"454":1,"492":1,"570":1}}],["возможностью",{"2":{"12":1,"88":1,"124":1,"425":1,"439":1,"465":1,"540":1,"542":3,"577":1}}],["возможность",{"2":{"2":1,"11":2,"12":1,"17":1,"39":1,"65":1,"112":1,"114":1,"123":2,"124":3,"132":1,"142":2,"167":1,"175":1,"181":1,"184":1,"195":1,"211":2,"214":1,"222":1,"226":1,"249":1,"270":1,"277":1,"278":1,"284":1,"291":1,"349":1,"354":1,"356":1,"357":1,"371":1,"376":1,"408":1,"419":1,"429":1,"433":1,"479":1,"482":1,"484":1,"508":1,"542":2,"579":1}}],["возможно",{"2":{"40":1,"51":1,"59":1,"113":1,"117":1,"124":1,"189":1,"220":1,"226":1,"242":1,"255":1,"300":1,"323":1,"363":1,"410":1,"424":1,"431":1,"449":1,"450":1,"457":1,"464":1,"474":1,"482":3,"535":1}}],["возможен",{"2":{"16":1}}],["во",{"0":{"450":1,"528":1},"2":{"3":1,"17":1,"96":1,"121":1,"123":2,"130":1,"155":1,"165":2,"174":1,"184":1,"187":1,"193":1,"195":1,"201":1,"210":1,"212":1,"213":1,"216":1,"223":3,"224":1,"226":1,"234":1,"240":1,"247":1,"252":2,"255":1,"257":2,"258":1,"283":1,"288":1,"291":1,"300":1,"310":1,"311":1,"318":1,"320":1,"321":1,"325":1,"326":1,"329":1,"331":1,"335":1,"359":2,"362":1,"365":1,"371":1,"375":1,"436":1,"441":2,"446":5,"450":7,"451":1,"453":2,"457":2,"471":1,"475":1,"478":1,"479":1,"481":1,"482":3,"490":1,"491":2,"492":1,"508":2,"511":1,"576":1}}],["вообще",{"2":{"3":1,"35":1,"114":1,"197":1,"278":1,"437":1,"439":1,"441":2,"492":1}}],["в",{"0":{"45":1,"132":1,"134":1,"135":1,"141":1,"195":1,"223":1,"227":1,"235":1,"250":1,"331":1,"341":1,"387":1,"388":1,"468":1,"469":1,"470":1,"500":1,"511":1,"512":1,"533":1,"549":1,"562":1,"574":1,"578":1,"579":1},"1":{"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"142":1,"224":1,"228":1,"229":1,"230":1,"231":1,"232":1,"233":1,"236":1,"237":1,"238":1,"239":1,"240":1,"251":1,"252":1,"253":1,"254":1,"255":1,"332":1,"333":1,"334":1,"342":1,"343":1,"344":1,"345":1,"346":1,"347":1,"389":1,"390":1,"391":1,"392":1,"393":1,"394":1,"395":1,"396":1,"397":1,"398":1,"399":1,"400":1},"2":{"2":1,"3":4,"4":1,"5":1,"6":1,"7":1,"9":2,"10":1,"11":3,"12":4,"13":2,"14":1,"16":6,"17":9,"18":1,"20":7,"23":7,"25":4,"26":1,"27":1,"29":6,"30":1,"31":1,"32":1,"33":2,"34":3,"39":2,"40":1,"41":7,"43":1,"44":2,"46":2,"47":3,"50":7,"51":4,"58":1,"59":5,"61":1,"62":1,"64":3,"65":1,"68":4,"69":5,"70":2,"74":1,"77":2,"82":2,"83":6,"88":5,"89":9,"90":1,"92":1,"93":2,"95":9,"96":19,"98":1,"99":1,"100":1,"101":1,"104":11,"105":1,"106":3,"107":2,"108":2,"109":2,"111":6,"112":3,"113":5,"114":6,"115":1,"117":2,"118":2,"121":7,"122":16,"123":20,"124":9,"125":8,"126":1,"127":8,"128":5,"129":5,"130":7,"131":5,"132":7,"133":4,"134":5,"135":9,"136":3,"137":1,"139":4,"140":3,"141":2,"142":20,"143":11,"144":8,"145":9,"146":3,"147":2,"148":6,"149":8,"150":1,"151":5,"152":8,"153":5,"154":4,"155":5,"156":6,"157":7,"158":7,"159":5,"160":3,"161":1,"162":7,"163":3,"164":9,"165":5,"166":7,"167":3,"168":2,"169":4,"170":7,"171":8,"172":8,"173":6,"174":6,"175":4,"176":10,"177":1,"178":6,"179":14,"181":8,"182":7,"183":2,"184":5,"185":4,"186":6,"189":9,"190":5,"191":9,"193":2,"194":1,"195":7,"196":3,"197":5,"198":2,"199":2,"200":2,"201":1,"202":2,"203":1,"204":2,"205":3,"206":2,"207":8,"208":13,"209":27,"210":32,"211":26,"212":7,"213":17,"214":10,"215":13,"216":10,"217":40,"218":12,"219":3,"220":1,"221":13,"222":34,"223":13,"224":12,"225":13,"226":37,"227":4,"228":1,"229":1,"230":6,"231":4,"232":5,"233":6,"234":12,"235":3,"236":1,"237":1,"238":1,"239":1,"240":5,"241":2,"242":3,"243":9,"244":2,"245":1,"246":5,"247":5,"248":6,"249":6,"250":2,"251":7,"252":13,"253":14,"254":9,"255":16,"257":16,"258":14,"259":6,"260":4,"261":3,"262":1,"263":31,"264":23,"266":4,"267":2,"268":5,"269":3,"270":15,"271":1,"272":8,"273":5,"274":3,"275":2,"276":4,"277":20,"278":18,"279":11,"280":8,"281":6,"282":3,"283":4,"284":2,"285":4,"286":8,"287":3,"288":9,"289":6,"290":13,"291":17,"292":5,"293":6,"294":12,"295":4,"299":5,"300":2,"301":1,"302":4,"303":3,"304":6,"305":3,"306":2,"307":3,"308":1,"309":4,"310":10,"311":5,"312":9,"313":2,"314":4,"315":13,"316":5,"317":14,"318":6,"319":14,"320":21,"321":5,"322":5,"323":13,"324":7,"325":7,"326":20,"327":5,"328":1,"329":7,"330":2,"331":24,"332":5,"333":6,"334":4,"335":13,"336":2,"337":6,"338":14,"339":8,"340":4,"341":7,"342":11,"343":14,"344":17,"345":7,"346":1,"347":10,"348":1,"349":12,"350":3,"351":2,"352":4,"353":1,"354":19,"355":2,"356":13,"357":5,"358":2,"359":22,"361":5,"362":28,"363":6,"364":7,"365":17,"366":1,"368":16,"369":11,"370":16,"371":22,"372":1,"373":6,"374":11,"375":18,"376":13,"377":19,"378":5,"379":4,"382":1,"384":4,"385":1,"387":2,"389":1,"390":1,"391":3,"393":1,"394":1,"395":2,"396":3,"397":2,"398":1,"399":1,"400":1,"401":2,"403":5,"404":6,"405":4,"406":4,"407":7,"408":5,"409":1,"410":11,"411":6,"412":4,"413":7,"414":8,"415":7,"416":3,"417":12,"418":24,"419":8,"420":10,"421":6,"422":2,"423":3,"424":15,"425":3,"428":1,"429":1,"430":2,"431":11,"432":3,"433":4,"437":15,"439":2,"440":14,"441":13,"442":2,"446":17,"448":6,"449":6,"450":39,"451":10,"452":2,"453":13,"454":6,"455":10,"456":15,"457":18,"458":5,"459":5,"460":5,"461":13,"462":28,"463":13,"464":13,"465":4,"466":9,"467":8,"468":1,"469":6,"470":5,"471":11,"472":9,"473":2,"474":12,"475":9,"476":6,"477":5,"478":3,"479":5,"481":2,"482":16,"483":18,"484":2,"490":11,"491":11,"492":22,"502":3,"503":1,"508":3,"511":1,"515":6,"517":1,"520":1,"524":1,"525":1,"528":1,"530":1,"531":3,"535":1,"536":1,"537":1,"538":7,"541":5,"542":1,"543":4,"545":4,"546":1,"547":1,"549":2,"550":1,"561":6,"562":2,"566":1,"567":1,"570":4,"571":1,"572":3,"573":3,"576":2,"579":1,"580":4,"582":4,"587":1,"588":2,"589":2,"590":2,"591":4}}],["риквестах",{"2":{"515":1}}],["риквестов",{"0":{"507":1},"1":{"508":1},"2":{"508":1}}],["рисованиями",{"2":{"331":1}}],["рисуйте",{"2":{"489":1}}],["рисует",{"2":{"313":1,"331":1}}],["рисунки",{"2":{"190":1}}],["рисунка",{"2":{"161":1,"189":2,"314":1}}],["рисунке",{"2":{"142":1,"164":1,"178":1,"179":1,"190":1,"264":1,"357":1,"370":1,"405":1}}],["рисунок",{"2":{"142":1,"152":1,"159":1,"160":1,"161":1,"162":1,"170":2,"171":1,"172":2,"174":1,"175":2,"176":2,"178":3,"183":1,"184":1,"185":1,"186":2,"189":1,"190":2,"191":1,"194":1,"195":1,"202":1,"203":1,"209":2,"210":1,"212":1,"213":1,"215":1,"224":1,"246":2,"247":1,"248":1,"255":1,"257":1,"262":1,"264":2,"276":1,"277":4,"278":1,"280":2,"286":1,"288":1,"314":2,"316":1,"318":1,"320":1,"323":1,"331":3,"335":1,"337":1,"340":1,"341":1,"346":1,"357":2,"363":1,"365":1,"370":1,"371":1,"375":1,"376":1,"405":1,"408":1,"411":1,"413":1,"421":2,"455":2,"464":3,"465":1,"468":1,"471":1,"472":2,"474":1}}],["риски",{"2":{"290":1}}],["рывка",{"2":{"222":1}}],["рынке",{"2":{"155":1}}],["рынка",{"0":{"21":1},"1":{"22":1,"23":1},"2":{"39":1,"133":1}}],["ряду",{"2":{"453":1,"457":1}}],["ряда",{"2":{"224":1,"320":1,"324":1}}],["рядами",{"2":{"117":1}}],["ряде",{"2":{"163":1}}],["ряд",{"2":{"152":1,"178":1,"184":1,"226":2,"252":1,"258":1,"270":1,"280":1,"370":1,"417":1,"458":1}}],["рядом",{"2":{"147":1,"162":1,"164":1,"184":1,"217":1,"270":2,"277":1,"290":1,"326":1,"403":1,"456":2,"463":1}}],["рядового",{"2":{"111":1}}],["родился",{"2":{"492":1}}],["родители",{"2":{"405":1}}],["родителей",{"2":{"364":2,"506":1}}],["родителем",{"2":{"263":1}}],["родителю",{"2":{"253":1,"257":1,"365":1,"407":1}}],["родительским",{"2":{"257":1,"262":1,"331":1,"405":1}}],["родительскими",{"2":{"254":1}}],["родительские",{"2":{"255":1}}],["родительский",{"2":{"248":2,"255":1,"257":5,"264":1,"288":1,"311":1,"331":2,"335":1,"336":1,"343":1,"405":5,"421":1}}],["родительской",{"2":{"254":1,"406":1}}],["родительском",{"2":{"253":2,"255":3,"257":3,"335":1,"344":1,"364":1}}],["родительскому",{"2":{"226":1,"253":1,"257":1,"333":1,"339":1}}],["родительского",{"2":{"225":1,"226":1,"254":5,"263":1,"331":1,"332":2,"365":2}}],["родитель",{"2":{"247":1,"248":1,"254":2,"337":2,"407":1}}],["родителями",{"2":{"403":1}}],["родителя",{"2":{"247":1,"362":1,"405":3,"407":1}}],["родственными",{"2":{"423":1}}],["родного",{"2":{"334":1}}],["родное",{"2":{"174":1,"270":1}}],["родными",{"2":{"270":1,"281":1}}],["рода",{"2":{"184":1,"194":1,"319":1,"405":1}}],["робот",{"2":{"152":1}}],["ростом",{"2":{"467":1}}],["роста",{"2":{"226":1,"431":1,"448":1,"451":1,"486":1}}],["рост",{"2":{"138":1}}],["росте",{"2":{"106":1}}],["роли",{"2":{"420":1,"482":1}}],["ролям",{"2":{"123":1}}],["ролью",{"2":{"123":1}}],["роль",{"2":{"69":1,"157":1,"339":1,"430":1,"448":1,"450":1,"482":1,"491":1,"542":1}}],["роутами",{"2":{"433":1}}],["роутера",{"2":{"143":1,"355":1,"361":1}}],["роутере",{"0":{"135":1},"2":{"144":1}}],["роутер",{"0":{"355":1},"1":{"356":1,"357":1,"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1,"365":1,"366":1,"367":1,"368":1},"2":{"127":1,"143":1,"356":1,"361":1}}],["роуты",{"2":{"106":1}}],["роутинг",{"2":{"7":1}}],["русском",{"2":{"491":2}}],["русский",{"0":{"381":1},"2":{"491":1}}],["рутинного",{"2":{"482":1}}],["рутовский",{"2":{"58":1}}],["рука",{"2":{"441":1}}],["руководящие",{"2":{"283":1}}],["руководству",{"2":{"222":1}}],["руководствуясь",{"2":{"208":1}}],["руководствами",{"2":{"155":1}}],["руководство",{"2":{"69":1,"73":1,"131":1,"155":1,"400":1,"417":1}}],["рублей",{"2":{"425":1}}],["ручная",{"2":{"278":1}}],["ручную",{"2":{"270":1}}],["ручном",{"2":{"424":1,"441":1}}],["ручной",{"2":{"278":1}}],["ручного",{"2":{"152":1,"478":1,"535":1}}],["ручное",{"2":{"72":1,"453":1}}],["рефы",{"2":{"450":2}}],["рефакторите",{"2":{"293":1}}],["рефакторить",{"2":{"23":1}}],["рефакторинга",{"2":{"453":1,"457":1,"466":1}}],["рефакторингуйте",{"2":{"453":1}}],["рефакторинг",{"0":{"109":1,"486":1},"2":{"266":1,"486":1}}],["ребенок",{"2":{"405":1,"406":1}}],["ребенку",{"2":{"405":1}}],["ребенка",{"2":{"376":1}}],["репликацию",{"2":{"341":1}}],["репозиторием",{"2":{"467":1,"475":6}}],["репозиториев",{"2":{"451":1,"467":1,"515":1}}],["репозиториями",{"0":{"475":1},"2":{"477":1}}],["репозиториях",{"2":{"211":1}}],["репозитория",{"0":{"537":1},"2":{"151":1,"264":1,"269":1,"337":1,"362":1,"424":4,"467":1,"471":1,"475":1,"515":2,"561":2,"562":1}}],["репозитории",{"2":{"64":1,"151":1,"156":1,"170":1,"217":1,"243":1,"263":1,"269":1,"277":1,"330":1,"362":1,"368":1,"401":1,"404":1,"421":1,"452":1,"455":1,"475":2,"476":1,"515":1,"561":1}}],["репозиторий",{"0":{"75":1,"120":1,"516":1},"2":{"61":1,"75":1,"90":1,"109":1,"115":1,"120":1,"140":1,"416":1,"431":1,"441":1,"467":1,"469":1,"471":2,"474":1,"475":5,"476":1,"517":1,"561":1}}],["рендер",{"2":{"257":1}}],["рендерится",{"2":{"256":1}}],["рендеринга",{"2":{"324":1,"331":4,"359":1,"361":1,"418":1}}],["рендеринг",{"2":{"257":1,"331":3,"368":1,"483":1}}],["рендерингу",{"2":{"234":1}}],["рендеринге",{"2":{"228":1,"331":1}}],["реорганизация",{"2":{"214":1}}],["редакция",{"2":{"474":1}}],["редактировать",{"2":{"473":1,"474":1}}],["редактирование",{"2":{"247":2,"248":1}}],["редактирования",{"2":{"218":1,"264":1}}],["редактируемых",{"2":{"264":1}}],["редактируем",{"2":{"213":1}}],["редакторы",{"2":{"354":1}}],["редактор",{"2":{"208":2,"441":1,"468":1}}],["редакторе",{"2":{"172":1,"441":1}}],["редких",{"2":{"289":1}}],["редкая",{"2":{"259":1}}],["редко",{"2":{"123":1,"252":2,"288":1,"304":1,"418":1}}],["речевого",{"2":{"172":1}}],["речь",{"2":{"10":1,"96":1,"166":1,"270":1,"454":1,"466":1}}],["резюме",{"2":{"491":1}}],["резервировать",{"2":{"290":1}}],["резервировании",{"2":{"153":1}}],["резервируем",{"2":{"263":1}}],["результирующее",{"2":{"222":1}}],["результатом",{"2":{"264":1,"377":1,"457":1}}],["результатов",{"2":{"217":1,"265":1}}],["результаты",{"2":{"138":1,"190":1,"193":1,"209":1,"249":1,"331":1,"413":1,"472":2}}],["результат",{"2":{"124":1,"164":1,"167":1,"190":1,"209":1,"215":1,"226":1,"326":1,"339":1,"340":1,"342":1,"343":1,"369":1,"370":2,"462":1,"536":1}}],["результате",{"2":{"123":1,"152":1,"164":1,"174":1,"179":1,"198":1,"246":1,"270":1,"320":1,"349":1,"357":1,"371":2,"462":1,"463":1,"464":1,"541":1}}],["результата",{"2":{"68":1,"259":1,"325":2,"338":1,"343":1,"357":1,"373":1}}],["рейтинг",{"2":{"118":1,"280":2}}],["рейтинги",{"2":{"80":1}}],["релевантные",{"2":{"124":1}}],["релизам",{"2":{"515":1}}],["релиза",{"2":{"508":1}}],["релизов",{"0":{"507":1,"515":1},"1":{"508":1},"2":{"508":1,"515":1}}],["релиз",{"2":{"104":1,"469":1}}],["реляционных",{"2":{"46":1,"47":1,"50":1,"51":2}}],["реляционные",{"2":{"17":2}}],["реляционную",{"2":{"39":1}}],["ресурсе",{"2":{"503":1}}],["ресурсоемкие",{"2":{"483":1}}],["ресурсом",{"2":{"318":1,"331":1}}],["ресурсов",{"2":{"125":2,"205":1,"213":1,"260":1,"334":1,"431":1,"437":1,"492":1,"589":1,"590":1}}],["ресурсу",{"2":{"123":1,"125":2,"301":1}}],["ресурса",{"0":{"500":1},"2":{"437":1}}],["ресурсами",{"2":{"124":1,"331":1,"371":1,"437":1,"492":2}}],["ресурсам",{"2":{"123":1,"145":2,"300":1,"437":1}}],["ресурсах",{"0":{"0":1}}],["ресурс",{"2":{"123":2,"125":2,"255":1,"260":1,"263":3,"491":1}}],["ресурсы",{"0":{"437":1},"1":{"438":1,"439":1},"2":{"104":1,"145":2,"210":2,"290":1,"324":1,"331":1,"431":5,"437":4,"440":1,"448":1,"449":1,"454":1,"460":1,"491":1,"573":1}}],["режимы",{"2":{"270":1}}],["режим",{"2":{"135":2,"144":3,"145":1,"149":1,"359":1}}],["режимов",{"2":{"135":1}}],["режима",{"2":{"125":1,"143":1,"144":1,"153":1,"214":1,"543":1}}],["режимах",{"2":{"104":1,"580":3,"582":2}}],["режиме",{"2":{"12":1,"104":1,"135":1,"143":1,"144":2,"147":1,"154":1,"172":1,"176":1,"210":1,"273":1,"279":1,"326":1,"424":1,"441":2,"450":2,"479":1,"531":1,"588":1}}],["реагировать",{"2":{"336":1,"362":1,"408":1,"410":1}}],["реагирования",{"2":{"278":1}}],["реакции",{"2":{"131":1}}],["реактивная",{"2":{"131":1,"226":1,"228":2,"263":1,"264":2,"412":1,"446":1,"482":1}}],["реактивно",{"2":{"363":1,"413":1}}],["реактивного",{"0":{"411":1,"413":1},"1":{"412":1,"414":1,"415":1,"416":1,"417":1},"2":{"258":1,"314":1,"403":1,"410":1,"420":1,"421":1,"422":1,"542":1}}],["реактивное",{"2":{"247":1,"262":1,"263":1,"342":1,"413":1,"420":1}}],["реактивному",{"2":{"257":1}}],["реактивном",{"2":{"222":2,"263":1,"413":1,"482":1}}],["реактивностью",{"2":{"342":1,"403":1,"482":2}}],["реактивность",{"2":{"209":1,"222":1,"248":1,"260":1,"264":1,"319":2,"320":1,"328":1,"405":2,"410":1,"482":2}}],["реактивности",{"2":{"127":1,"131":1,"133":1,"221":1,"318":2,"319":1,"411":1,"482":2,"570":1}}],["реактивной",{"2":{"95":1,"111":1,"131":1,"179":2,"226":1,"228":1,"359":1,"414":1}}],["реактивные",{"2":{"136":1,"217":2,"223":1,"226":2,"237":1,"250":1,"255":1,"258":1,"264":1,"347":1,"362":1,"412":1,"413":1,"415":3,"446":1,"450":3,"482":2}}],["реактивных",{"0":{"131":1},"2":{"131":2,"217":1,"226":1,"277":1,"342":1,"382":1,"413":1,"417":1,"446":1,"482":1}}],["реактивным",{"2":{"130":1,"131":1,"226":2,"411":1,"419":1}}],["реактивными",{"2":{"112":1,"130":1,"131":2,"215":1,"226":1,"318":1,"342":1,"415":1,"418":1}}],["реактивный",{"2":{"96":1,"131":1,"217":1,"405":1,"411":2,"413":1,"414":1,"417":1,"419":1,"421":1,"450":2,"482":2}}],["реактивную",{"2":{"95":1,"96":1,"217":2,"221":1,"226":2,"258":3,"341":1,"405":2,"406":2,"410":1,"412":3,"450":1,"482":1}}],["реально",{"2":{"415":1,"484":1}}],["реальности",{"2":{"294":1,"376":1}}],["реальном",{"2":{"215":1,"319":1,"320":1,"354":1,"365":1,"455":1,"465":1}}],["реальному",{"2":{"207":1}}],["реальное",{"2":{"145":1,"181":1,"194":1}}],["реальным",{"2":{"241":1}}],["реальными",{"2":{"124":1,"428":1,"448":1}}],["реальных",{"2":{"222":1,"453":2,"454":1,"467":1}}],["реальный",{"0":{"260":1},"1":{"261":1,"262":1,"263":1},"2":{"203":1,"453":1,"491":2}}],["реальные",{"2":{"96":1,"219":1,"428":1,"448":1,"479":1}}],["реализовывать",{"2":{"262":1,"266":1,"327":1,"335":1,"377":1,"508":1}}],["реализовывали",{"2":{"183":1}}],["реализовали",{"2":{"264":1,"317":1,"421":2}}],["реализовано",{"2":{"319":1,"345":1,"405":1,"591":1}}],["реализованного",{"2":{"268":1}}],["реализованный",{"2":{"183":1}}],["реализованные",{"2":{"156":1}}],["реализованы",{"2":{"221":1,"222":1,"268":1,"292":1,"377":1,"378":1,"412":1,"508":1}}],["реализован",{"2":{"135":1,"307":1,"312":1,"317":1,"318":1,"347":1,"420":1}}],["реализована",{"2":{"95":1,"370":1,"483":1,"543":1,"545":1,"553":1}}],["реализовать",{"2":{"12":1,"35":1,"36":1,"40":1,"82":1,"114":1,"174":1,"185":1,"249":1,"252":1,"268":2,"310":2,"314":1,"315":1,"317":1,"318":1,"326":1,"329":2,"331":1,"332":1,"334":1,"348":1,"352":1,"354":1,"363":1,"371":2,"374":1,"415":1,"423":1,"433":1}}],["реализуя",{"2":{"403":1}}],["реализуется",{"2":{"483":1}}],["реализует",{"2":{"254":1,"316":1,"320":1,"406":1,"413":1,"546":1}}],["реализуемая",{"2":{"476":1}}],["реализуемого",{"2":{"339":1}}],["реализуемые",{"2":{"320":1}}],["реализуем",{"2":{"178":1,"258":1,"329":2,"344":1,"346":1,"407":1}}],["реализующая",{"2":{"341":2}}],["реализующих",{"2":{"211":1,"337":1,"342":1}}],["реализующий",{"2":{"170":1,"260":1,"319":1,"538":1}}],["реализуют",{"2":{"313":1,"377":1,"417":1}}],["реализуются",{"2":{"175":1}}],["реализацией",{"2":{"166":1,"264":1,"316":1,"319":1,"370":1,"374":1,"375":1,"376":2,"421":1,"573":1}}],["реализациями",{"2":{"452":1}}],["реализациях",{"2":{"362":1}}],["реализация",{"0":{"263":1,"264":1,"302":1,"332":1,"408":1,"411":1,"413":1},"1":{"303":1,"304":1,"333":1,"334":1,"338":1,"339":1,"340":1,"342":1,"343":1,"344":1,"345":1,"346":1,"347":1,"349":1,"409":1,"410":1,"412":1,"414":1,"415":1,"416":1,"417":1},"2":{"133":1,"151":1,"171":1,"176":1,"178":1,"187":1,"264":1,"277":1,"292":1,"294":1,"302":1,"303":1,"314":1,"315":3,"316":1,"317":1,"318":1,"326":1,"336":1,"337":1,"338":1,"341":2,"342":1,"344":1,"346":1,"355":1,"365":1,"370":1,"376":1,"403":3,"407":1,"408":1,"410":1,"411":1,"418":1,"446":1,"571":1}}],["реализаций",{"2":{"131":1,"178":1,"279":1,"304":1,"305":1,"323":2}}],["реализации",{"0":{"548":1},"1":{"549":1,"550":1},"2":{"39":1,"77":1,"96":1,"126":1,"128":1,"133":1,"162":1,"175":1,"179":1,"187":1,"205":1,"207":1,"234":1,"241":1,"243":1,"245":1,"246":1,"248":1,"249":1,"255":1,"264":3,"267":1,"272":1,"278":2,"283":2,"294":1,"299":1,"302":1,"303":1,"307":1,"309":2,"310":1,"311":1,"312":1,"313":1,"314":2,"316":1,"318":1,"331":1,"335":2,"337":1,"344":2,"348":1,"350":1,"363":1,"368":1,"370":1,"371":2,"374":1,"377":1,"390":1,"392":1,"396":1,"403":2,"405":1,"408":1,"410":1,"412":1,"413":1,"418":2,"422":1,"431":1,"446":2,"448":1,"454":1,"466":1,"476":2,"489":1,"589":1}}],["реализацию",{"2":{"16":1,"41":1,"70":1,"96":1,"131":1,"175":1,"213":1,"255":1,"263":1,"267":1,"291":1,"294":1,"304":1,"310":2,"315":1,"317":1,"327":1,"334":1,"350":1,"370":1,"374":1,"406":1,"418":1,"420":1,"484":1}}],["регулярный",{"0":{"486":1}}],["регулярных",{"2":{"368":1}}],["регулировать",{"2":{"433":1}}],["регулирования",{"2":{"377":1}}],["регулируется",{"2":{"59":1,"142":1}}],["регистрируя",{"2":{"314":1}}],["регистрирует",{"2":{"482":1}}],["регистрируется",{"2":{"315":1}}],["регистрируете",{"2":{"290":1}}],["регистрируем",{"2":{"129":1,"263":1,"277":2,"278":2,"290":1,"362":1,"410":1}}],["регистрировать",{"2":{"251":1,"260":2,"320":1}}],["регистре",{"2":{"216":1,"236":1,"237":1}}],["регистра",{"2":{"238":1}}],["регистраторе",{"2":{"142":1}}],["регистратора",{"2":{"142":3}}],["регистраторы",{"2":{"142":2}}],["регистратором",{"2":{"142":1}}],["регистрацию",{"2":{"290":1}}],["регистрация",{"0":{"129":1},"2":{"251":1}}],["регистрации",{"2":{"58":1,"127":1,"139":1,"192":2,"251":1,"263":1,"264":1,"278":1,"288":4,"290":1,"310":2,"312":1,"314":1,"315":1,"362":1,"579":1}}],["регистр",{"2":{"47":1,"216":3}}],["решетку",{"2":{"362":1}}],["решетки",{"2":{"359":1}}],["решен",{"2":{"331":1}}],["решена",{"2":{"12":1,"130":1,"183":1}}],["решении",{"2":{"541":1}}],["решению",{"2":{"382":1,"412":1}}],["решением",{"2":{"77":1,"80":1,"124":1,"375":1,"417":1,"433":1,"441":1,"451":1,"459":1,"466":1}}],["решение",{"2":{"12":2,"13":1,"59":1,"62":1,"69":1,"96":2,"98":1,"124":1,"125":2,"126":1,"135":1,"158":1,"187":1,"198":1,"222":1,"249":5,"258":1,"294":1,"320":1,"336":1,"362":1,"375":1,"377":1,"382":1,"405":1,"454":1,"482":1,"491":1,"541":1}}],["решений",{"2":{"10":1,"12":1,"23":1,"39":1,"41":1,"64":1,"69":3,"249":1,"424":1,"492":1}}],["решениями",{"2":{"178":1}}],["решениях",{"2":{"16":1}}],["решения",{"0":{"10":1,"426":1},"1":{"427":1,"428":1,"429":1,"430":1,"431":1,"432":1,"433":1,"434":1,"435":1,"436":1},"2":{"9":1,"10":1,"14":1,"39":1,"62":2,"69":1,"165":2,"167":1,"179":1,"183":1,"184":1,"234":1,"247":1,"255":1,"256":1,"283":4,"288":1,"294":1,"315":1,"325":1,"338":1,"339":1,"371":1,"377":2,"453":1,"466":1,"467":1,"492":1,"541":2}}],["решил",{"2":{"467":1}}],["решили",{"2":{"252":1,"338":1,"483":3}}],["решит",{"2":{"331":1}}],["решить",{"2":{"143":1,"172":1,"331":1,"354":1,"368":1,"377":1,"403":1,"424":1,"437":1}}],["решётки",{"2":{"223":1}}],["решат",{"2":{"331":1}}],["решать",{"2":{"309":1,"345":1}}],["решают",{"2":{"295":1,"450":1}}],["решали",{"2":{"221":1}}],["решает",{"2":{"123":1,"179":1,"222":1,"274":1,"288":1,"450":1}}],["решаем",{"2":{"12":1,"247":1}}],["реквизите",{"2":{"365":1}}],["реквизиты",{"2":{"132":1}}],["рекламных",{"2":{"484":1}}],["рекламные",{"2":{"4":1,"203":1}}],["рекламодателям",{"2":{"204":1}}],["рекламодателями",{"2":{"201":1}}],["рекламы",{"2":{"203":2}}],["реклама",{"0":{"203":1}}],["рекламируемым",{"2":{"201":1}}],["реконнект",{"2":{"126":1}}],["рекомендовал",{"2":{"275":1}}],["рекомендацией",{"2":{"454":1}}],["рекомендациям",{"2":{"212":1,"263":1}}],["рекомендациях",{"2":{"153":1}}],["рекомендации",{"2":{"150":1,"211":1,"219":1,"283":1,"284":1}}],["рекомендаций",{"2":{"4":1,"235":1}}],["рекомендует",{"2":{"441":1}}],["рекомендуется",{"0":{"274":1},"2":{"131":1,"151":1,"152":1,"175":1,"176":1,"208":1,"210":1,"216":1,"251":1,"258":1,"277":1,"289":1,"309":3,"331":3,"341":1,"344":1,"371":1,"384":1,"418":1,"425":1,"440":1,"471":1,"546":1,"591":1}}],["рекомендуемые",{"2":{"275":1}}],["рекомендуемым",{"2":{"272":1,"468":1}}],["рекомендуемой",{"2":{"208":1}}],["рекомендуются",{"2":{"446":1}}],["рекомендую",{"2":{"96":1,"192":1,"208":2,"257":1,"368":1,"407":1,"417":1,"420":1,"573":1}}],["райнтаймом",{"2":{"483":1}}],["равенства",{"2":{"457":1}}],["равным",{"2":{"365":1}}],["равных",{"2":{"205":1}}],["равна",{"2":{"229":1}}],["равно",{"2":{"164":1,"226":1,"229":1,"273":1,"310":1,"324":1,"491":1}}],["рамок",{"2":{"270":1}}],["рамками",{"2":{"225":1,"246":1}}],["рамках",{"2":{"215":1,"222":1,"227":1,"255":1,"260":1,"266":1,"278":1,"344":1,"454":1}}],["рамки",{"2":{"151":1,"171":1,"189":1,"211":1,"221":1,"222":1,"245":1,"279":1,"288":1,"290":1,"291":1,"293":1,"370":1,"374":1,"377":2,"475":2}}],["радужно",{"2":{"213":1,"354":1}}],["радует",{"2":{"186":1}}],["ради",{"2":{"208":1}}],["радиус",{"2":{"177":1}}],["радиокнопки",{"0":{"170":1},"2":{"170":2}}],["рантайма",{"2":{"483":1}}],["ранней",{"2":{"466":1}}],["ранних",{"2":{"436":1,"453":1}}],["рано",{"2":{"164":1,"484":1}}],["ранее",{"2":{"83":1,"149":1,"212":1,"217":1,"225":1,"264":1,"266":1,"270":1,"315":1,"320":1,"329":1,"336":1,"337":2,"341":1,"345":1,"362":1,"374":1,"376":2,"403":2,"405":1,"424":1,"461":1,"476":1}}],["раньше",{"2":{"12":1,"209":1,"325":3,"326":1,"331":1,"357":1,"411":1,"441":1,"453":1}}],["рабочая",{"2":{"405":1}}],["рабочим",{"0":{"337":1},"1":{"338":1,"339":1,"340":1},"2":{"344":1,"405":1}}],["рабочие",{"2":{"286":1}}],["рабочих",{"2":{"199":1,"205":1,"278":1,"371":1}}],["рабочий",{"2":{"96":1,"134":1,"144":1,"153":1,"224":1,"263":1,"277":1,"278":2,"336":1,"337":1,"376":1,"377":2,"391":1,"401":2,"476":1,"478":1}}],["рабочей",{"2":{"207":1}}],["рабочему",{"2":{"291":1,"340":1,"347":1}}],["рабочем",{"2":{"174":1,"176":1,"273":1,"370":1,"371":1,"398":1,"453":1,"454":1}}],["рабочего",{"0":{"207":1,"391":1},"1":{"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1},"2":{"127":1,"128":1,"134":1,"174":1,"176":1,"223":1,"224":1,"225":1,"226":1,"243":1,"244":1,"251":1,"261":1,"278":1,"279":3,"315":1,"325":1,"371":2,"374":1,"375":1,"376":1,"403":1,"404":1,"454":1,"476":2}}],["рабочее",{"2":{"80":1}}],["работоспособного",{"2":{"541":1}}],["работоспособный",{"2":{"371":1}}],["работоспособен",{"2":{"209":1}}],["работник",{"2":{"337":2}}],["работнику",{"2":{"278":1}}],["работника",{"2":{"278":3}}],["работе",{"2":{"41":2,"111":1,"114":1,"131":1,"161":1,"208":1,"213":1,"234":1,"242":1,"264":1,"278":1,"282":1,"294":1,"360":1,"371":1,"410":1,"441":2,"482":2,"541":1}}],["работающую",{"2":{"538":1}}],["работающее",{"2":{"455":1}}],["работающего",{"2":{"269":1,"542":1}}],["работающей",{"2":{"197":1,"220":1}}],["работающими",{"2":{"281":1}}],["работающий",{"2":{"208":1,"211":1,"305":1}}],["работающих",{"2":{"204":1,"292":1,"354":1,"362":1}}],["работающие",{"2":{"96":1}}],["работают",{"2":{"124":1,"158":1,"208":1,"225":1,"290":1,"292":1,"299":1,"320":1,"324":1,"329":1,"331":1,"338":1,"361":1,"377":1,"378":1,"431":1,"450":1,"462":1,"587":1}}],["работала",{"2":{"315":1}}],["работали",{"2":{"226":1,"288":1,"290":1}}],["работало",{"2":{"218":1,"304":1}}],["работал",{"2":{"122":2}}],["работаем",{"2":{"112":1,"475":1}}],["работаете",{"2":{"162":2,"471":1}}],["работает",{"2":{"43":1,"68":1,"89":1,"101":1,"121":1,"123":2,"138":1,"151":1,"176":1,"209":2,"217":2,"218":1,"259":1,"264":1,"285":1,"303":1,"313":1,"317":1,"318":1,"319":2,"339":1,"340":2,"359":1,"371":1,"377":1,"405":2,"408":1,"410":1,"431":1,"441":1,"446":3,"448":1,"456":1,"457":2,"475":1,"482":1,"484":1,"491":1,"492":2,"573":1}}],["работа",{"0":{"43":1,"81":1,"475":1},"1":{"82":1,"83":1},"2":{"38":1,"139":1,"312":1,"344":1,"471":1,"474":1,"475":2}}],["работать",{"2":{"2":1,"25":1,"43":1,"59":1,"111":1,"124":1,"126":1,"210":2,"213":1,"215":1,"222":1,"224":1,"234":1,"250":1,"259":1,"266":1,"270":3,"277":1,"278":1,"313":1,"318":1,"327":1,"331":1,"341":2,"349":1,"357":1,"368":1,"384":1,"412":1,"418":1,"431":2,"441":2,"448":1,"450":1,"475":2,"492":1}}],["работу",{"2":{"20":1,"50":1,"69":1,"83":1,"208":1,"263":1,"264":1,"329":1,"330":1,"331":1,"334":2,"377":2,"378":1,"391":1,"410":2,"412":1,"418":1,"431":1,"433":1,"448":1,"466":1,"472":1,"479":1,"521":1,"532":1}}],["работы",{"0":{"66":1,"168":1},"1":{"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1},"2":{"12":1,"17":1,"20":1,"43":1,"63":1,"68":1,"111":1,"123":1,"124":1,"125":1,"151":1,"179":1,"205":1,"208":2,"209":2,"212":1,"215":2,"217":1,"222":1,"225":1,"233":1,"241":1,"242":1,"263":1,"264":1,"265":1,"269":1,"270":1,"278":4,"291":1,"293":1,"323":1,"326":2,"329":1,"331":3,"332":1,"336":1,"342":3,"351":1,"352":1,"370":1,"375":1,"376":1,"406":1,"418":1,"437":1,"442":1,"443":1,"456":1,"457":1,"471":1,"475":1,"492":2,"501":3,"515":1,"590":1}}],["расхождения",{"2":{"474":1}}],["расходов",{"2":{"200":1}}],["расходы",{"0":{"200":1},"2":{"411":1,"431":1,"448":1}}],["расшаривать",{"2":{"450":1}}],["расшифровывается",{"2":{"248":1,"369":1}}],["расширим",{"2":{"335":1,"341":1}}],["расширили",{"2":{"266":1}}],["расширить",{"2":{"23":1,"265":1,"491":1}}],["расширено",{"2":{"418":1}}],["расширенные",{"2":{"257":1}}],["расширенными",{"2":{"243":1}}],["расширений",{"2":{"441":1}}],["расширении",{"2":{"384":1,"482":1}}],["расширением",{"2":{"210":1,"225":1}}],["расширение",{"2":{"98":1,"114":1,"272":1,"418":2,"456":1,"573":2,"579":1}}],["расширениями",{"2":{"547":1}}],["расширения",{"0":{"573":1},"2":{"88":1,"125":1,"204":1,"287":1,"320":1,"417":1,"441":2,"446":1,"573":1}}],["расширяет",{"2":{"320":1,"399":1}}],["расширяемость",{"2":{"78":1,"490":1}}],["расширять",{"2":{"18":1,"222":1,"260":1,"440":1,"477":1}}],["расчеты",{"2":{"418":1}}],["расчетом",{"2":{"12":1}}],["растут",{"2":{"466":1}}],["растущая",{"2":{"211":1}}],["растущим",{"2":{"142":1}}],["растет",{"2":{"264":1}}],["раскрывающимся",{"2":{"561":1}}],["раскрывая",{"2":{"461":1}}],["раскрывает",{"2":{"223":1,"318":1,"344":1}}],["раскрывается",{"2":{"200":1,"317":1,"371":1}}],["раскадровки",{"2":{"162":1}}],["рассказывается",{"2":{"390":1}}],["рассказывали",{"2":{"345":1}}],["рассказано",{"2":{"232":1}}],["рассказать",{"2":{"211":1,"222":1}}],["рассуждений",{"2":{"294":1}}],["рассчитывал",{"2":{"200":1}}],["рассчитать",{"2":{"176":1}}],["рассылку",{"2":{"194":3}}],["расстояния",{"2":{"164":1}}],["расстояние",{"0":{"162":1},"2":{"164":2}}],["рассматривали",{"2":{"191":1,"215":1,"336":1,"408":1,"419":1}}],["рассматриваемое",{"2":{"384":1}}],["рассматриваем",{"2":{"310":1,"374":1}}],["рассматриваемый",{"2":{"179":1}}],["рассматривается",{"2":{"347":1,"382":1}}],["рассматривает",{"2":{"286":1,"492":1}}],["рассматриваете",{"2":{"26":1}}],["рассматриваются",{"2":{"130":1,"132":1,"150":1,"156":1,"221":1,"341":1}}],["рассматриваться",{"2":{"223":1}}],["рассматривать",{"2":{"46":1,"148":1,"158":1,"186":1,"187":1,"224":1,"226":1,"246":1,"257":1,"258":1,"264":1,"286":1,"287":1,"289":1,"320":1,"331":1,"335":2,"336":1,"354":1,"368":1,"412":1}}],["рассмотрите",{"2":{"211":1,"429":1,"433":1}}],["рассмотрим",{"2":{"10":1,"67":1,"127":1,"141":1,"142":1,"143":1,"149":1,"155":1,"158":1,"159":1,"161":1,"167":1,"186":1,"189":1,"193":1,"209":1,"210":2,"214":1,"218":1,"219":1,"221":1,"222":1,"223":1,"225":2,"226":1,"227":1,"232":1,"234":2,"243":2,"247":1,"250":1,"252":1,"254":3,"257":4,"259":1,"264":1,"271":1,"276":1,"277":3,"278":1,"283":1,"286":1,"290":1,"291":1,"294":2,"299":1,"302":1,"311":1,"312":1,"313":1,"314":1,"315":2,"318":2,"319":1,"320":2,"321":1,"324":1,"325":2,"329":2,"344":1,"347":1,"350":1,"352":1,"354":2,"356":1,"359":1,"362":2,"365":2,"370":1,"371":4,"375":1,"376":1,"377":2,"403":1,"404":1,"411":1,"417":1,"418":1,"422":1,"451":1,"453":1,"454":2,"461":1,"462":1,"463":1,"464":1,"475":1}}],["рассмотренные",{"2":{"337":1,"412":1}}],["рассмотренными",{"2":{"326":1}}],["рассмотренных",{"2":{"186":1,"211":1,"335":1,"476":1}}],["рассмотрении",{"2":{"278":1,"314":1}}],["рассмотрению",{"2":{"208":1,"377":1}}],["рассмотрение",{"2":{"158":1,"279":1,"281":1}}],["рассмотрены",{"2":{"39":1,"320":1}}],["рассмотрели",{"2":{"153":2,"205":2,"250":1,"253":1,"260":1,"264":1,"266":2,"278":1,"281":2,"315":1,"318":1,"327":1,"337":1,"350":1,"379":1,"417":1,"422":1,"459":1,"477":1}}],["рассмотреть",{"2":{"150":1,"210":1,"264":1,"276":1,"277":1,"335":1,"368":1,"369":1,"377":1,"465":1}}],["распакованном",{"2":{"515":1}}],["распараллеливания",{"2":{"483":1}}],["распознаваемых",{"2":{"364":1}}],["расползлись",{"2":{"450":1}}],["располнела",{"2":{"446":1,"570":1}}],["распологаются",{"2":{"210":1}}],["расположены",{"2":{"549":1}}],["расположенные",{"2":{"269":1}}],["расположенных",{"2":{"255":1}}],["расположенное",{"2":{"191":1}}],["расположена",{"2":{"158":1}}],["расположению",{"2":{"181":1}}],["расположении",{"2":{"166":1}}],["расположения",{"2":{"148":1,"149":1,"160":1,"189":1}}],["расположение",{"2":{"36":1,"148":1,"190":1,"212":1}}],["расположить",{"2":{"36":1}}],["располагались",{"2":{"490":1}}],["располагать",{"2":{"463":1}}],["располагаться",{"2":{"143":1,"145":1,"164":1,"272":1}}],["располагает",{"2":{"213":1}}],["располагается",{"2":{"128":1,"148":1,"164":1,"323":1}}],["располагаются",{"2":{"189":1,"264":1}}],["распределение",{"2":{"492":1}}],["распределения",{"2":{"210":1,"311":1}}],["распределенная",{"2":{"467":1,"474":1}}],["распределенности",{"2":{"467":1}}],["распределенными",{"2":{"377":1}}],["распределенные",{"2":{"377":1}}],["распределенных",{"2":{"292":1,"354":1,"377":2}}],["распределяются",{"2":{"123":1}}],["распространяемы",{"2":{"542":1}}],["распространяется",{"2":{"289":1,"412":1}}],["распространяться",{"2":{"413":1}}],["распространять",{"2":{"270":1}}],["распространяющихся",{"2":{"225":1}}],["распространяются",{"2":{"167":1}}],["распространены",{"2":{"491":1}}],["распространенного",{"2":{"490":1}}],["распространенность",{"2":{"482":1}}],["распространенной",{"2":{"375":1,"397":1}}],["распространенными",{"2":{"155":1,"221":1,"270":1,"278":1,"370":1,"374":1}}],["распространенных",{"2":{"145":1,"205":1,"210":1,"272":1,"344":2,"455":1,"542":1}}],["распространенные",{"2":{"142":1,"145":1,"154":1,"155":1,"171":1,"417":1,"473":1,"482":1}}],["распространенный",{"2":{"9":1,"123":1,"300":1,"475":1}}],["распространение",{"2":{"270":1,"354":1,"410":1}}],["распространения",{"2":{"223":1,"405":1}}],["распространен",{"2":{"190":2,"223":1,"322":1}}],["раза",{"2":{"450":1,"483":1}}],["разочаровавшись",{"2":{"467":1}}],["разочарованию",{"2":{"376":1}}],["разобщенности",{"2":{"329":1}}],["разобрались",{"2":{"338":1}}],["разобраться",{"2":{"352":1}}],["разобрать",{"2":{"252":1,"343":1}}],["разобран",{"2":{"210":1}}],["разобьем",{"2":{"106":1,"217":1}}],["разумеется",{"2":{"336":1}}],["разумными",{"2":{"279":1}}],["разумным",{"2":{"189":1}}],["разграничению",{"2":{"422":1}}],["разгрузки",{"2":{"317":1}}],["разговаривать",{"2":{"205":1}}],["разблокировав",{"2":{"370":1}}],["разбора",{"2":{"339":1}}],["разбрасывать",{"2":{"290":1}}],["разбросаны",{"2":{"264":1}}],["разберет",{"2":{"209":1}}],["разбиения",{"2":{"482":2}}],["разбиение",{"0":{"4":1},"2":{"2":1,"41":1,"80":1,"252":1}}],["разбираться",{"2":{"361":1,"362":1,"492":1}}],["разбили",{"2":{"264":1}}],["разбивается",{"2":{"430":1,"431":1,"448":1,"449":1}}],["разбивает",{"2":{"286":1}}],["разбивайте",{"2":{"165":1}}],["разбивать",{"2":{"2":1,"3":1}}],["разбивка",{"2":{"14":1,"246":1}}],["разбитым",{"2":{"491":1}}],["разбить",{"2":{"4":1}}],["разбита",{"2":{"2":1}}],["размонтированием",{"2":{"290":1,"362":1}}],["размонтировании",{"2":{"234":1}}],["размышления",{"0":{"143":1},"1":{"144":1},"2":{"293":1}}],["разметки",{"2":{"221":1}}],["разместим",{"2":{"216":1,"217":1,"225":1,"456":2}}],["разместили",{"2":{"160":1}}],["разместить",{"2":{"117":1,"290":1,"362":1,"425":3,"463":1}}],["размер",{"2":{"164":1,"213":1,"226":1,"252":1,"355":1,"359":1,"418":1,"437":2,"484":1}}],["размеров",{"2":{"157":1,"258":1}}],["размеру",{"2":{"142":1,"189":1}}],["размерам",{"2":{"270":1}}],["размерами",{"2":{"189":1,"273":1,"275":1}}],["размера",{"2":{"133":1,"138":1,"159":1,"164":1,"178":1,"184":1,"189":1,"222":3,"252":1,"290":2,"417":1,"437":1,"508":1}}],["размещали",{"2":{"210":1}}],["размещает",{"2":{"203":1}}],["размещается",{"2":{"189":1,"190":1,"191":2,"272":1,"277":1}}],["размещаем",{"2":{"149":2,"217":1,"264":1}}],["размещаемый",{"2":{"145":1}}],["размещаются",{"2":{"181":1,"210":1}}],["размещайте",{"2":{"162":1}}],["размещать",{"2":{"59":1,"136":1,"142":1,"178":1,"182":1,"210":2,"217":1,"261":1,"456":1}}],["размещена",{"2":{"456":1}}],["размещенный",{"2":{"278":1,"464":1}}],["размещенное",{"2":{"181":1}}],["размещены",{"2":{"211":1,"247":1,"356":1}}],["размещению",{"2":{"456":1}}],["размещение",{"0":{"181":1},"2":{"160":1,"181":1,"190":1,"191":1,"203":1,"462":1}}],["размещении",{"2":{"149":1,"191":1}}],["размещения",{"2":{"124":1,"139":1,"146":1,"191":1,"209":1,"223":1,"425":1,"475":1,"476":1,"492":1,"561":1}}],["размещен",{"2":{"144":1,"209":1,"210":1,"277":2,"420":1,"474":1}}],["размещено",{"2":{"142":2,"143":2,"147":1,"223":1}}],["разная",{"2":{"349":1}}],["разнообразные",{"2":{"354":1}}],["разному",{"2":{"252":1,"492":1}}],["разного",{"2":{"184":1,"482":1}}],["разным",{"2":{"467":1,"474":1}}],["разными",{"2":{"317":1,"431":1,"448":1,"466":1}}],["разных",{"2":{"125":1,"178":1,"208":1,"270":1,"291":1,"299":1,"431":1,"432":1,"448":1,"450":1,"463":1,"483":1,"568":1,"589":1}}],["разный",{"2":{"123":1}}],["разные",{"0":{"226":1},"2":{"123":1,"160":1,"190":1,"249":1,"279":1,"365":1,"410":1,"431":1,"440":1,"448":1,"466":2,"467":1,"483":2,"492":1,"579":1}}],["разницей",{"2":{"230":1,"320":1}}],["разницу",{"2":{"131":1,"325":1}}],["разницы",{"2":{"123":1}}],["разница",{"2":{"23":1,"96":1,"222":1,"242":1,"282":1,"328":1,"349":1,"423":1,"461":1,"491":1}}],["раздувать",{"2":{"549":1}}],["раздутому",{"2":{"68":1}}],["раздаются",{"2":{"492":1}}],["раздражения",{"2":{"202":1}}],["разделу",{"2":{"365":1}}],["разделить",{"2":{"252":1,"286":2,"288":1}}],["разделив",{"2":{"222":1}}],["разделяемые",{"2":{"413":1}}],["разделяется",{"2":{"371":1,"413":1}}],["разделяет",{"2":{"248":1,"320":1,"405":1}}],["разделять",{"2":{"266":1,"450":1}}],["разделяй",{"2":{"2":1}}],["разделом",{"2":{"189":1,"264":1}}],["разделов",{"2":{"175":1,"186":1}}],["разделах",{"2":{"193":1,"225":1,"359":1}}],["разделами",{"2":{"417":1,"431":1,"448":1}}],["разделам",{"2":{"181":1}}],["раздела",{"2":{"159":1,"191":2,"225":1,"263":1,"413":1}}],["раздел",{"2":{"144":1,"189":1,"191":4,"211":1,"213":1,"217":1,"263":1,"272":1,"421":1,"431":1,"448":1,"561":1}}],["разделенной",{"2":{"343":1}}],["разделенные",{"2":{"142":1,"216":1,"371":1}}],["разделенных",{"2":{"125":1,"142":2,"143":1}}],["разделена",{"2":{"286":1}}],["разделению",{"2":{"355":1}}],["разделения",{"2":{"182":1,"225":1,"286":2,"292":1}}],["разделение",{"0":{"286":1},"2":{"34":1,"178":1,"283":1,"286":2,"288":1,"314":1,"335":1,"431":1,"448":1,"490":1}}],["разделе",{"2":{"125":1,"209":1,"216":1,"223":1,"233":1,"250":1,"254":1,"260":1,"269":1,"278":1,"290":1,"362":1,"368":1,"446":1,"454":1,"464":1,"561":3}}],["разделы",{"2":{"123":1,"175":1,"189":1,"246":1}}],["различающихся",{"2":{"450":1}}],["различаются",{"2":{"285":1}}],["различают",{"2":{"47":1}}],["различать",{"2":{"324":1}}],["различается",{"2":{"257":1}}],["различие",{"0":{"159":1},"2":{"170":1,"221":1,"222":1}}],["различия",{"2":{"155":1,"368":1,"474":1}}],["различный",{"2":{"225":1}}],["различные",{"2":{"178":1,"214":1,"221":2,"270":3,"325":1,"345":1,"352":1,"368":1,"377":1,"422":1,"430":1,"448":1,"451":1,"470":1,"579":2}}],["различных",{"2":{"153":1,"175":1,"214":1,"221":1,"249":1,"253":1,"270":3,"273":1,"279":1,"304":1,"318":1,"331":1,"352":1,"357":1,"370":1,"371":1,"379":1,"418":1,"453":2,"457":1,"466":1,"491":1,"578":1,"579":1}}],["различным",{"2":{"35":1,"41":1,"181":1,"270":1,"293":1}}],["различными",{"2":{"30":1,"124":1,"184":1,"189":1,"213":1,"243":1,"264":1,"286":1,"317":1,"352":1,"371":1,"457":1,"482":1}}],["различного",{"2":{"80":1}}],["разветвление",{"2":{"467":1}}],["разветвлять",{"2":{"467":1}}],["развертываемого",{"2":{"542":1}}],["развертывается",{"2":{"431":1,"448":1}}],["развертывании",{"2":{"212":1}}],["развертыванию",{"2":{"144":1}}],["развертывания",{"0":{"143":1,"560":1},"1":{"144":1,"561":1,"562":1},"2":{"77":1,"135":1,"139":1,"153":1,"214":1,"268":1,"401":1,"424":1,"431":1,"448":1}}],["развертыванием",{"2":{"210":1,"424":1}}],["развертывание",{"0":{"71":1,"139":1,"398":1},"1":{"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1,"151":1,"152":1,"153":1,"154":1},"2":{"67":1,"71":1,"214":1,"271":1,"359":1,"476":1}}],["разве",{"2":{"331":1}}],["разворачивать",{"2":{"290":1}}],["разворачивание",{"2":{"40":1}}],["развитый",{"2":{"354":1}}],["развитии",{"2":{"354":1}}],["развитием",{"2":{"354":1}}],["развитие",{"0":{"500":1},"2":{"96":1,"293":1,"335":1}}],["развития",{"0":{"80":1},"2":{"10":1,"63":1,"221":1,"270":1,"541":1}}],["развивается",{"2":{"482":1}}],["развивать",{"2":{"430":1,"448":1}}],["развиваться",{"2":{"246":1,"288":1}}],["развиваются",{"2":{"207":1}}],["развивавшихся",{"2":{"96":1}}],["раз",{"0":{"257":1},"2":{"27":1,"123":3,"153":1,"179":1,"200":1,"213":1,"222":1,"226":1,"228":1,"251":1,"277":1,"292":1,"300":1,"303":1,"304":1,"309":1,"362":1,"403":1,"415":1,"440":2,"450":1,"457":2,"462":1,"492":1}}],["разряда",{"2":{"487":1}}],["разрядной",{"2":{"208":1}}],["разрывные",{"2":{"451":1}}],["разрушить",{"2":{"403":1}}],["разрешив",{"2":{"339":1}}],["разрешили",{"2":{"492":1}}],["разрешил",{"2":{"146":1}}],["разрешить",{"2":{"59":1,"338":1,"349":1,"370":1}}],["разрешающийся",{"2":{"369":1}}],["разрешается",{"2":{"252":1,"262":1,"347":1}}],["разрешает",{"2":{"125":1,"364":1}}],["разрешаться",{"2":{"343":1}}],["разрешать",{"2":{"123":1,"475":1}}],["разрешено",{"2":{"326":1,"474":1}}],["разрешен",{"2":{"125":3}}],["разрешений",{"2":{"483":1,"552":1}}],["разрешение",{"2":{"123":2,"174":1,"263":1,"324":1,"340":1,"377":1,"474":1}}],["разрешениях",{"2":{"550":1}}],["разрешениям",{"2":{"189":1}}],["разрешения",{"2":{"20":1,"123":1,"263":2,"338":1,"343":1,"377":1,"459":1,"475":1}}],["разрабатываешь",{"2":{"483":1}}],["разрабатывается",{"2":{"189":1}}],["разрабатываемые",{"2":{"431":1}}],["разрабатываемого",{"2":{"401":1}}],["разрабатываем",{"2":{"6":1}}],["разрабатывать",{"2":{"69":1,"157":1,"431":1,"449":1,"482":1,"492":1}}],["разработанный",{"2":{"456":1}}],["разработанной",{"2":{"451":1}}],["разработаны",{"2":{"431":1,"448":1}}],["разработан",{"2":{"222":1}}],["разработана",{"2":{"135":1}}],["разработаем",{"2":{"215":1}}],["разработать",{"2":{"215":1}}],["разработчику",{"2":{"466":1,"490":1,"491":1,"538":1,"541":1}}],["разработчики",{"2":{"293":1,"323":1,"384":1,"476":1,"490":2}}],["разработчиком",{"2":{"273":1,"399":1,"491":3}}],["разработчиков",{"2":{"2":1,"96":1,"208":1,"213":1,"214":1,"235":1,"255":1,"304":1,"377":1,"378":1,"383":1,"400":1,"431":1,"448":1,"466":3,"467":1,"479":1,"491":1,"502":1}}],["разработчик",{"2":{"68":1,"96":1,"124":1,"192":1,"205":1,"222":1,"283":1,"450":1,"541":1}}],["разработчиками",{"2":{"155":1}}],["разработчикам",{"2":{"68":1,"96":1,"433":1,"453":3,"542":2}}],["разработчика",{"2":{"20":1,"209":1,"210":1,"223":1,"276":2,"279":1,"280":3,"323":1,"331":2,"377":1,"384":1,"412":1,"417":2,"421":1,"450":2,"451":2,"457":2,"466":1,"477":1,"489":1,"491":1,"501":1,"545":1}}],["разработкой",{"2":{"69":1,"453":1,"473":1,"479":1}}],["разработка",{"0":{"70":1},"2":{"61":1,"67":2,"70":1,"80":1,"214":1,"220":1,"270":1,"283":1,"370":1,"466":1,"479":1}}],["разработки",{"0":{"67":1},"2":{"17":1,"61":1,"69":2,"121":1,"134":1,"207":1,"208":1,"209":4,"210":3,"212":1,"213":1,"214":3,"217":1,"222":2,"226":1,"251":1,"278":1,"283":1,"289":1,"290":1,"292":1,"293":1,"294":1,"323":1,"327":1,"392":1,"425":1,"431":1,"441":3,"446":1,"450":1,"451":2,"453":1,"454":1,"456":1,"465":2,"467":1,"479":1,"482":1,"483":1,"491":1,"541":1}}],["разработку",{"2":{"3":1,"69":1,"157":1,"222":1,"283":1,"378":1,"431":1,"448":1,"482":1,"490":2}}],["разработке",{"0":{"578":1},"2":{"3":1,"63":1,"77":3,"125":1,"162":1,"208":1,"209":1,"213":1,"220":1,"242":1,"283":1,"284":1,"292":1,"294":1,"344":1,"354":1,"383":1,"422":1,"441":1,"454":1,"492":1}}],["гигантский",{"2":{"412":1}}],["гибче",{"2":{"450":1}}],["гибки",{"2":{"482":1}}],["гибкая",{"2":{"412":1,"418":1}}],["гибкой",{"2":{"408":1}}],["гибкости",{"2":{"148":1,"256":1}}],["гибкость",{"2":{"40":1,"126":1,"214":1,"222":1,"325":1,"450":1}}],["гибридных",{"2":{"359":1,"371":1,"418":1}}],["гибридные",{"2":{"354":1}}],["гипертекста",{"2":{"221":1}}],["геттеров",{"2":{"450":1}}],["геттерами",{"2":{"415":1,"450":1}}],["геймификации",{"2":{"192":1}}],["героической",{"2":{"191":1}}],["героический",{"2":{"191":1}}],["герой",{"2":{"191":1}}],["генерации",{"2":{"179":1,"279":1,"354":1,"436":1,"492":1}}],["генерация",{"2":{"101":1,"440":1,"492":1}}],["генерируемые",{"2":{"354":1}}],["генерируемыми",{"2":{"354":1}}],["генерируется",{"2":{"343":1,"375":1,"492":1}}],["генерируют",{"2":{"210":1}}],["генерировать",{"2":{"178":1,"279":1,"424":1}}],["генерить",{"2":{"492":1}}],["генерит",{"2":{"53":1,"98":2,"123":2}}],["гениальное",{"2":{"2":1}}],["гуглить",{"2":{"124":2,"491":1}}],["греется",{"2":{"441":1}}],["грязно",{"2":{"407":1}}],["громоздка",{"2":{"344":1}}],["громоздким",{"2":{"234":1,"278":1,"418":1}}],["грубый",{"2":{"245":1}}],["грубое",{"2":{"286":1}}],["грубого",{"2":{"266":1}}],["грубо",{"2":{"123":1,"125":1,"483":1}}],["групповой",{"2":{"293":1}}],["группу",{"2":{"215":1,"457":1}}],["группах",{"2":{"293":1}}],["группами",{"2":{"217":1}}],["группа",{"2":{"185":1,"186":1,"217":1}}],["группировки",{"2":{"185":1,"246":2,"290":1}}],["группе",{"2":{"161":2,"215":1,"268":1,"457":1}}],["группы",{"0":{"162":1},"2":{"142":1,"165":1,"170":1,"217":1,"369":1,"428":1,"448":1,"453":1,"457":1,"461":1}}],["групп",{"2":{"142":1,"161":1,"457":1}}],["грузить",{"2":{"124":1,"492":1}}],["грамотная",{"2":{"501":1}}],["грамотно",{"2":{"491":1}}],["грамотному",{"2":{"168":1}}],["грамотной",{"2":{"77":1}}],["градусов",{"2":{"319":1}}],["градусах",{"2":{"319":1}}],["градусы",{"2":{"318":2,"320":1}}],["графическая",{"2":{"316":1}}],["графические",{"2":{"475":1}}],["графически",{"2":{"318":1,"320":1,"370":1}}],["графический",{"2":{"245":1,"468":1}}],["графических",{"2":{"211":1}}],["графическим",{"2":{"161":1}}],["графического",{"2":{"211":1,"354":1,"465":1}}],["графическое",{"2":{"178":1,"286":1,"288":1,"314":1,"316":1}}],["графики",{"2":{"161":1,"270":1}}],["грань",{"2":{"270":1}}],["гранулировано",{"2":{"123":1}}],["границах",{"2":{"222":1,"331":1}}],["границу",{"2":{"178":1,"179":1}}],["границы",{"0":{"9":1},"2":{"68":1,"320":1,"418":1}}],["границ",{"2":{"3":1,"177":1}}],["где",{"2":{"104":1,"122":1,"123":1,"124":1,"142":1,"144":1,"145":1,"160":1,"165":1,"167":1,"175":1,"181":1,"189":1,"191":2,"203":1,"209":1,"217":1,"222":1,"223":1,"225":1,"226":1,"263":1,"264":3,"292":1,"317":1,"329":1,"331":1,"343":1,"346":1,"357":1,"361":1,"369":1,"371":2,"377":1,"413":1,"425":1,"439":1,"450":1,"459":1,"462":2,"466":1,"467":1,"476":1,"479":1,"482":2,"486":1}}],["гарагусо",{"2":{"387":1}}],["гарантирует",{"2":{"190":1,"420":1}}],["гарантий",{"2":{"96":1}}],["гамбургера",{"2":{"184":1,"552":1}}],["гамбургер",{"2":{"181":1,"580":1,"582":1}}],["гамму",{"2":{"506":1}}],["гамме",{"2":{"170":1}}],["гаммы",{"2":{"26":1}}],["галочка",{"2":{"173":1}}],["галереи",{"2":{"86":1}}],["гаснет",{"2":{"111":1}}],["готовя",{"2":{"429":1,"448":1}}],["готового",{"2":{"541":1,"542":1}}],["готовое",{"2":{"538":1}}],["готовом",{"2":{"357":1}}],["готово",{"2":{"340":1}}],["готовой",{"2":{"210":1}}],["готова",{"2":{"309":1}}],["готовности",{"2":{"280":1}}],["готовность",{"2":{"268":1}}],["готов",{"2":{"217":1,"277":1,"278":1,"346":1,"420":1,"455":1}}],["готовую",{"2":{"210":1}}],["готовый",{"2":{"541":1}}],["готовым",{"2":{"441":1}}],["готовых",{"2":{"153":1,"207":1,"233":1,"542":1}}],["готовы",{"2":{"144":1,"169":1,"208":2,"212":1,"213":1,"234":1,"241":1,"242":1,"249":1,"356":1,"369":1,"370":1,"460":1,"463":1}}],["готовые",{"2":{"62":1,"144":1,"315":1}}],["гостинице",{"2":{"492":1}}],["гостиниц",{"2":{"199":1}}],["гостей",{"2":{"123":1}}],["государство",{"2":{"2":1,"365":1}}],["городов",{"2":{"363":1}}],["город",{"2":{"363":1}}],["города",{"2":{"186":2,"363":1}}],["горизонтальную",{"2":{"189":1}}],["горизонтальному",{"2":{"189":1}}],["горизонтальные",{"2":{"181":2,"184":2,"189":1}}],["гораздо",{"2":{"122":1,"145":1,"175":1,"207":1,"270":2,"286":1,"299":1,"325":1,"418":1,"446":1,"475":1}}],["гордо",{"2":{"111":1}}],["говорю",{"2":{"319":1,"325":1}}],["говорит",{"2":{"483":1}}],["говорить",{"2":{"58":1,"418":1}}],["говорилось",{"2":{"240":1,"248":1,"271":1,"368":1,"374":1,"453":1,"472":1}}],["говорил",{"2":{"226":1,"315":1}}],["говорили",{"2":{"191":1,"279":1,"362":2}}],["говоря",{"2":{"96":1,"123":1,"125":1,"160":1,"165":1,"193":1,"288":1,"357":1,"482":1,"483":1,"492":1}}],["года",{"2":{"491":1,"502":1}}],["годах",{"2":{"292":1}}],["годами",{"2":{"283":1}}],["году",{"2":{"166":1}}],["год",{"2":{"89":1,"293":1,"425":1}}],["годы",{"2":{"43":1,"142":1,"168":1,"446":1,"570":1}}],["глоссарий",{"0":{"501":1}}],["глобален",{"2":{"450":1}}],["глобального",{"2":{"542":1}}],["глобальное",{"2":{"450":1}}],["глобальному",{"2":{"301":1}}],["глобально",{"2":{"249":1,"251":1,"262":1}}],["глобальная",{"2":{"223":1,"251":1}}],["глобальную",{"2":{"210":1,"339":1,"361":1}}],["глобальные",{"0":{"251":1},"2":{"210":1,"211":1,"260":1,"430":1,"432":1,"448":1}}],["глобальный",{"2":{"129":1,"251":1,"263":1,"433":1,"450":1,"578":1}}],["глобальными",{"2":{"450":1}}],["глобальным",{"2":{"34":1,"418":1,"450":2,"483":1}}],["глобальных",{"0":{"129":1},"2":{"20":1,"127":1,"251":1,"260":1}}],["глючит",{"2":{"441":1}}],["глубокий",{"2":{"417":1}}],["глубоких",{"2":{"363":1}}],["глубоким",{"2":{"193":1}}],["глубокой",{"2":{"579":1}}],["глубокое",{"2":{"259":1}}],["глубоко",{"2":{"79":1,"254":1,"255":1,"403":1}}],["глубокого",{"2":{"65":1,"326":1}}],["глубины",{"2":{"186":1}}],["глазах",{"2":{"319":1}}],["глаза",{"2":{"190":1}}],["глаз",{"2":{"186":1}}],["гласит",{"2":{"159":1,"165":1,"287":1,"288":1,"293":1,"467":1}}],["главой",{"2":{"269":1,"283":1}}],["глав",{"2":{"207":1,"268":1}}],["главу",{"2":{"143":1,"242":1,"251":1,"285":1,"347":1}}],["главах",{"2":{"207":1,"222":1,"323":1,"352":1,"403":1}}],["глава",{"0":{"155":1,"389":1,"390":1,"391":1,"392":1,"393":1,"394":1,"395":1,"396":1,"397":1,"398":1,"399":1},"1":{"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":1,"203":1,"204":1,"205":1,"206":1},"2":{"140":1,"156":1,"205":1,"207":1,"275":1,"279":1,"283":1,"294":1,"327":1,"330":1,"352":1,"368":1,"375":1,"392":1,"393":1,"395":1,"396":1,"399":1,"452":1}}],["главы",{"2":{"139":1,"155":1,"156":1,"183":1,"208":1,"209":1,"221":1,"242":1,"243":1,"244":2,"258":1,"264":1,"268":1,"280":1,"329":1,"330":1,"335":1,"352":1,"353":1,"355":1,"403":1,"404":1,"418":2,"464":1,"467":1,"475":1}}],["главе",{"2":{"98":1,"128":1,"132":1,"134":1,"135":2,"139":1,"141":1,"143":1,"151":1,"153":1,"155":1,"162":1,"167":1,"170":1,"181":1,"190":1,"191":1,"205":1,"206":1,"208":2,"210":3,"211":1,"214":1,"215":2,"218":1,"219":2,"221":1,"224":1,"225":3,"226":2,"232":1,"241":2,"243":4,"244":1,"247":3,"250":1,"252":1,"255":1,"257":1,"259":1,"261":1,"266":2,"267":1,"268":3,"271":1,"277":1,"279":1,"281":2,"282":1,"283":1,"286":1,"287":1,"290":1,"291":1,"305":1,"312":2,"315":2,"317":1,"318":1,"320":1,"321":1,"323":1,"327":2,"329":3,"335":1,"336":1,"345":1,"350":2,"352":1,"354":2,"359":1,"362":1,"369":1,"378":2,"379":1,"389":1,"390":1,"391":1,"394":1,"397":2,"398":1,"403":1,"404":2,"407":1,"408":1,"418":1,"419":2,"422":2,"423":1,"451":3,"455":2,"461":1,"477":1}}],["главным",{"2":{"290":1,"431":1,"449":1,"491":1}}],["главных",{"2":{"225":1,"411":1,"454":1}}],["главный",{"2":{"26":1,"190":2,"210":1,"215":1,"251":1}}],["главной",{"2":{"186":1,"191":3}}],["главного",{"2":{"184":1,"191":1,"210":1,"224":1,"277":1,"317":1,"550":1}}],["главном",{"2":{"88":1,"106":1,"111":1,"186":1,"277":2,"335":1}}],["главное",{"2":{"2":1,"182":1,"191":1,"255":1,"371":1}}],["главную",{"2":{"7":1,"85":1,"105":1,"190":1}}],["главная",{"0":{"191":1},"2":{"7":1,"33":1,"159":1,"190":2,"191":1,"258":1}}],["бюджетных",{"2":{"454":1}}],["бюджету",{"2":{"68":1}}],["бумажном",{"2":{"385":1}}],["бухгалтерская",{"2":{"377":1}}],["булевские",{"2":{"277":1}}],["булево",{"2":{"217":1,"229":2,"263":1}}],["буквы",{"2":{"238":1}}],["буквами",{"2":{"237":1,"240":1}}],["буква",{"2":{"152":1}}],["будто",{"2":{"293":2,"490":1}}],["будь",{"2":{"166":1,"245":1,"270":1}}],["будем",{"2":{"18":1,"23":1,"25":1,"41":1,"56":1,"58":1,"65":1,"89":1,"104":1,"118":1,"148":1,"152":1,"158":1,"179":1,"207":3,"208":2,"209":1,"210":1,"212":1,"213":3,"217":1,"218":1,"221":1,"222":1,"223":1,"224":2,"225":2,"226":3,"233":1,"235":1,"240":1,"241":1,"245":1,"257":1,"258":2,"259":1,"260":1,"262":1,"263":1,"272":4,"278":2,"281":1,"286":1,"294":1,"295":1,"304":1,"315":1,"320":1,"323":3,"324":1,"326":2,"327":3,"334":2,"335":3,"336":1,"337":1,"338":1,"341":1,"342":1,"356":1,"357":1,"368":2,"369":1,"377":1,"403":1,"407":3,"409":1,"414":1,"418":2,"420":2,"424":2,"456":1,"457":2,"462":2}}],["будете",{"2":{"96":1,"211":1,"221":1,"268":1,"323":1,"329":1,"352":1,"440":1,"491":1}}],["будет",{"0":{"64":1},"2":{"2":1,"3":2,"6":3,"11":2,"12":3,"16":1,"17":2,"23":1,"25":1,"29":5,"34":1,"36":1,"39":1,"40":2,"41":5,"50":1,"59":1,"61":2,"63":1,"64":1,"65":1,"68":1,"73":1,"80":1,"85":1,"89":1,"92":1,"95":1,"96":2,"101":1,"104":1,"106":1,"113":1,"114":1,"121":1,"122":2,"124":2,"125":1,"126":1,"131":1,"142":5,"143":4,"144":2,"145":4,"147":1,"151":2,"153":1,"158":2,"178":3,"179":3,"183":1,"186":1,"190":1,"196":1,"207":1,"208":1,"209":5,"210":6,"212":1,"213":2,"214":1,"215":2,"216":3,"217":8,"222":2,"223":3,"224":2,"226":2,"228":2,"229":3,"230":1,"231":1,"232":1,"233":1,"234":1,"246":1,"247":5,"251":2,"252":3,"253":1,"254":2,"255":1,"257":3,"259":1,"262":4,"263":3,"270":4,"277":5,"278":2,"279":1,"280":2,"288":1,"303":1,"304":1,"308":1,"313":2,"314":1,"316":1,"319":2,"320":2,"324":2,"325":4,"326":3,"327":1,"329":1,"331":6,"332":1,"334":1,"335":2,"337":2,"338":3,"339":1,"341":1,"342":2,"343":1,"344":2,"345":1,"346":3,"347":1,"349":3,"356":1,"357":4,"359":9,"362":4,"363":1,"364":1,"365":1,"369":1,"370":2,"371":5,"372":1,"375":3,"376":2,"377":4,"391":1,"404":1,"405":2,"408":1,"409":1,"410":1,"412":1,"413":5,"417":1,"418":1,"419":1,"420":3,"421":1,"424":1,"437":1,"441":1,"450":2,"454":1,"455":1,"456":1,"457":2,"461":1,"463":1,"464":2,"471":7,"472":1,"474":1,"475":2,"479":3,"483":1,"490":1,"491":2,"537":2,"573":1}}],["будучи",{"2":{"318":1,"324":1,"325":1}}],["будущего",{"2":{"540":1}}],["будущее",{"2":{"234":1}}],["будущем",{"2":{"23":1,"89":1,"173":1,"222":1}}],["будущим",{"2":{"382":1}}],["будущими",{"2":{"216":1}}],["будущих",{"2":{"5":1,"391":1}}],["буду",{"2":{"4":1,"208":1,"431":1}}],["будут",{"2":{"2":1,"4":1,"11":1,"16":2,"47":1,"50":1,"64":1,"95":1,"104":1,"118":1,"130":1,"144":1,"149":1,"160":1,"165":1,"184":1,"207":1,"210":2,"211":1,"213":2,"217":2,"223":1,"226":1,"230":1,"234":1,"237":1,"240":1,"245":3,"247":2,"248":2,"252":1,"257":1,"259":1,"262":1,"263":1,"270":2,"273":1,"277":1,"278":2,"279":1,"284":1,"291":1,"317":1,"320":1,"341":2,"343":2,"356":2,"357":2,"359":1,"361":1,"363":1,"364":2,"365":3,"370":1,"373":1,"383":1,"409":1,"410":1,"418":1,"424":1,"446":1,"451":1,"454":2,"459":1,"460":1,"461":1,"468":1,"472":1,"474":2,"483":1,"535":1}}],["бэджем",{"2":{"114":1}}],["бэдж",{"2":{"114":1}}],["бэджик",{"0":{"114":1},"2":{"114":1}}],["бэджиком",{"2":{"111":1}}],["бэкэнд",{"2":{"377":2}}],["бэке",{"2":{"126":1,"482":2}}],["бэкендов",{"2":{"41":1}}],["бэкендом",{"2":{"41":1,"77":1,"122":3,"125":1,"375":1,"546":1}}],["бэкенду",{"2":{"11":1,"38":1,"122":1,"545":2}}],["бэкенде",{"2":{"10":1,"47":1,"118":1,"126":1,"375":1,"376":1,"491":2}}],["бэкенд",{"0":{"124":1},"2":{"6":2,"11":1,"12":2,"17":1,"41":2,"50":1,"59":1,"80":1,"122":1,"123":5,"124":5,"125":2,"329":1,"370":1,"374":1,"375":1,"376":1,"425":1,"479":1,"482":1,"541":1,"546":1,"576":1}}],["бэкенда",{"2":{"3":1,"13":1,"40":1,"41":1,"59":1,"83":1,"124":1,"125":2,"371":1,"376":1,"433":1,"492":1}}],["бэком",{"2":{"126":1}}],["бэкапов",{"2":{"424":1}}],["бэкапить",{"2":{"424":1}}],["бэкапа",{"2":{"71":1}}],["бэка",{"2":{"123":1,"124":1,"482":1}}],["бэк",{"2":{"122":1,"123":2,"124":1,"441":1}}],["боялся",{"2":{"491":1}}],["бояться",{"2":{"133":1}}],["бо",{"2":{"482":1}}],["бойскаута",{"2":{"293":1}}],["бойлерплейтов",{"2":{"541":1}}],["бойлерплейта",{"2":{"482":1}}],["бойлерплейт",{"2":{"47":1}}],["боковую",{"2":{"189":1,"357":1,"365":1}}],["боковым",{"2":{"431":1,"433":2,"449":1}}],["боковых",{"2":{"184":1,"185":1}}],["боковые",{"2":{"181":1}}],["боковой",{"2":{"184":1,"186":2,"191":1,"357":1,"362":1,"561":1}}],["бонусная",{"0":{"155":1},"1":{"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":1,"203":1,"204":1,"205":1,"206":1},"2":{"399":1}}],["бонусами",{"2":{"123":1}}],["бороться",{"2":{"123":1}}],["борьба",{"2":{"96":1}}],["бота",{"2":{"492":2}}],["ботов",{"2":{"492":1}}],["ботом",{"2":{"96":1}}],["бот",{"0":{"99":1},"2":{"99":1}}],["богатым",{"2":{"56":1}}],["большом",{"2":{"214":1,"325":1}}],["большому",{"2":{"142":1}}],["большого",{"2":{"208":1,"222":1,"246":1,"374":1}}],["большое",{"2":{"131":1,"132":1,"158":1,"165":1,"166":1,"186":2,"197":1,"287":1,"292":1,"315":1,"374":2,"378":1,"418":1}}],["большой",{"2":{"80":1,"155":1,"213":2,"226":1,"286":1,"294":1,"354":1}}],["большая",{"2":{"96":1,"145":1,"159":1,"222":1,"491":1}}],["большую",{"2":{"69":1,"133":1,"214":1,"292":1,"323":1,"325":1,"354":1,"482":1}}],["больших",{"2":{"226":1,"230":2,"331":1,"403":1,"424":1,"428":1,"430":1,"448":2,"464":1,"479":1,"482":3,"550":1}}],["большинстве",{"2":{"211":1,"222":1,"252":1,"270":1,"325":2,"369":1,"370":1,"377":1,"446":1,"492":1,"570":1}}],["большинства",{"2":{"189":1,"310":1,"323":1}}],["большинством",{"2":{"96":1,"466":1}}],["большинство",{"2":{"39":1,"50":1,"124":2,"158":2,"160":2,"186":2,"191":1,"194":1,"208":1,"221":1,"259":1,"291":1,"354":1,"368":1,"370":1,"377":1,"459":1,"491":1}}],["больший",{"2":{"152":1,"252":1}}],["большим",{"2":{"145":1,"186":1,"189":1,"225":1,"377":1,"446":1,"479":2}}],["большими",{"2":{"124":1,"175":1,"191":1,"301":1,"482":1}}],["большие",{"2":{"40":1,"123":1}}],["большей",{"2":{"169":1,"222":1,"226":1,"247":1,"283":1}}],["большее",{"2":{"142":1,"371":1}}],["больше",{"0":{"131":1},"2":{"10":1,"50":1,"96":1,"132":1,"151":1,"157":1,"164":2,"165":1,"166":1,"179":1,"182":1,"184":1,"223":1,"230":1,"234":1,"235":1,"256":1,"270":3,"277":1,"286":1,"290":1,"294":1,"299":1,"315":1,"325":2,"331":2,"334":1,"336":1,"352":1,"363":1,"371":1,"376":1,"384":1,"403":1,"418":2,"441":2,"446":1,"482":2,"483":1,"491":2,"492":2}}],["более",{"2":{"2":2,"13":1,"14":1,"39":1,"41":1,"65":1,"68":1,"108":1,"114":2,"123":1,"125":2,"126":1,"127":1,"128":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":2,"145":1,"157":2,"160":2,"164":1,"165":2,"169":1,"171":1,"173":1,"186":2,"199":1,"205":1,"207":2,"209":2,"210":2,"212":1,"213":1,"214":1,"218":4,"222":1,"223":2,"225":1,"226":3,"231":1,"232":1,"240":1,"249":2,"250":1,"252":1,"253":1,"254":1,"255":1,"257":1,"259":1,"266":2,"270":2,"278":2,"279":2,"283":1,"286":1,"291":1,"302":1,"304":1,"312":1,"317":1,"318":1,"319":1,"320":2,"323":2,"326":5,"334":2,"335":1,"340":1,"354":4,"362":2,"363":2,"369":2,"376":2,"378":1,"382":2,"407":1,"412":1,"415":1,"417":1,"418":3,"424":1,"431":2,"433":1,"436":1,"437":1,"440":1,"446":2,"448":1,"450":1,"451":3,"454":2,"457":2,"461":1,"474":1,"475":1,"482":3,"483":2,"491":2,"561":1}}],["бета",{"2":{"476":1}}],["бешено",{"2":{"441":1}}],["берутся",{"2":{"515":1}}],["берут",{"2":{"431":1,"448":1}}],["берем",{"2":{"420":1}}],["берет",{"2":{"355":1}}],["берешь",{"2":{"96":1}}],["бегло",{"2":{"224":1}}],["беглый",{"2":{"190":1}}],["бене",{"2":{"166":1}}],["бен",{"2":{"166":1}}],["бена",{"0":{"166":1}}],["белое",{"2":{"159":1}}],["белого",{"2":{"159":1}}],["бесконечном",{"2":{"483":1}}],["бесконечного",{"2":{"178":3}}],["бесконечна",{"2":{"178":1}}],["бесконечный",{"0":{"178":1},"1":{"179":1},"2":{"178":2,"179":1}}],["бесконечными",{"2":{"164":1}}],["бесконечных",{"2":{"96":1}}],["бесполезное",{"2":{"573":1}}],["бесполезно",{"2":{"491":1}}],["бесполезными",{"2":{"491":1}}],["беспорядок",{"2":{"431":1,"448":1}}],["беспокоиться",{"2":{"210":1,"321":1,"349":1,"471":1}}],["беспокойство",{"2":{"176":1}}],["беспарольными",{"2":{"376":1}}],["беспарольный",{"2":{"375":1}}],["беспарольная",{"0":{"375":1},"2":{"375":1}}],["бесплатными",{"2":{"425":1}}],["бесплатных",{"2":{"197":1,"203":1,"374":1}}],["бесплатный",{"2":{"152":1,"208":1,"212":1,"213":1,"271":1}}],["бесплатные",{"2":{"124":3,"425":1,"491":2}}],["бесплатная",{"2":{"98":1,"152":1,"208":2}}],["бесплатной",{"2":{"223":1}}],["бесплатно",{"2":{"208":2,"324":1,"491":1}}],["бесплатное",{"2":{"203":1}}],["бесплатного",{"2":{"40":1,"153":1,"196":1}}],["бесплатность",{"2":{"39":1}}],["безвозвратно",{"2":{"442":1,"446":1}}],["безусловно",{"2":{"326":1}}],["безымянном",{"2":{"257":1}}],["безопасен",{"2":{"167":1}}],["безопасны",{"2":{"323":1}}],["безопасные",{"2":{"270":1}}],["безопасным",{"2":{"152":1,"354":1,"376":1}}],["безопасного",{"2":{"371":1}}],["безопасной",{"2":{"252":1}}],["безопасности",{"2":{"59":1,"68":1,"123":2,"141":1,"152":3,"265":1,"290":1,"344":1,"349":1,"371":1,"375":1,"376":2,"378":1,"379":1,"483":1}}],["безопасностью",{"2":{"291":1}}],["безопасность",{"0":{"59":1},"2":{"69":1,"78":1,"123":3,"370":1,"375":1}}],["безопасную",{"2":{"151":1}}],["безболезненного",{"2":{"20":1}}],["без",{"2":{"12":1,"20":2,"62":1,"96":1,"124":2,"133":1,"142":1,"157":1,"160":1,"166":1,"176":1,"197":1,"208":3,"212":1,"214":1,"217":1,"222":1,"264":1,"269":1,"273":1,"277":1,"278":1,"279":1,"286":1,"305":1,"313":1,"320":1,"323":1,"325":1,"354":2,"355":1,"359":1,"365":1,"371":3,"373":1,"401":1,"418":1,"432":1,"433":2,"439":1,"441":1,"450":1,"474":1,"475":1,"479":1,"482":2,"490":1,"491":2,"492":1,"535":1,"538":2,"541":1,"545":1,"571":1,"582":1,"587":1,"588":1}}],["брейкпойнт",{"2":{"543":1}}],["бремя",{"2":{"279":1,"453":1}}],["брендом",{"2":{"167":1}}],["бренда",{"2":{"157":1,"590":1}}],["бренды",{"2":{"16":1}}],["брали",{"2":{"424":1}}],["брату",{"2":{"407":1}}],["брать",{"2":{"278":1,"482":1}}],["братьями",{"2":{"362":1,"403":1}}],["братья",{"2":{"247":1}}],["браузеру",{"2":{"252":1,"272":1,"331":1,"440":1}}],["браузеры",{"2":{"133":2,"138":1,"169":1,"303":1,"331":1,"418":3,"425":1,"446":1,"492":1}}],["браузерные",{"2":{"268":1,"354":1}}],["браузерных",{"2":{"133":1,"329":1,"377":1}}],["браузерными",{"2":{"113":1}}],["браузере",{"2":{"131":1,"133":1,"191":1,"209":4,"217":1,"223":1,"224":1,"273":1,"276":2,"277":1,"278":1,"280":1,"323":1,"331":1,"344":1,"354":1,"357":2,"359":1,"371":1,"377":1,"418":3,"437":1,"455":1,"459":1,"465":1,"492":3,"536":1,"589":1}}],["браузером",{"2":{"123":1,"350":1,"424":1,"492":1}}],["браузеров",{"2":{"89":1,"133":1,"369":1,"377":1}}],["браузер",{"2":{"123":1,"125":3,"208":1,"214":1,"224":4,"225":1,"252":1,"265":1,"270":1,"325":1,"331":3,"354":1,"384":1,"418":2,"479":1}}],["браузерах",{"2":{"133":1,"209":1,"280":1,"417":1,"418":1}}],["браузерами",{"0":{"133":1},"2":{"89":1,"127":1,"133":2,"169":1,"178":1,"221":1,"270":1,"403":1,"422":1,"481":1}}],["браузера",{"0":{"418":1},"2":{"43":1,"125":2,"174":1,"182":1,"208":1,"221":1,"224":1,"268":1,"270":2,"273":2,"277":1,"278":1,"280":1,"305":1,"323":1,"324":2,"329":1,"331":1,"368":1,"377":1,"418":2,"421":1,"459":1,"460":1,"461":1,"462":1,"483":1,"492":1,"579":1,"588":1}}],["бросают",{"2":{"190":1}}],["бригаду",{"2":{"26":1}}],["бинарные",{"2":{"472":1}}],["битная",{"2":{"468":1}}],["билдом",{"2":{"479":1}}],["билдер",{"0":{"539":1},"1":{"540":1,"541":1},"2":{"540":1}}],["билде",{"2":{"437":1}}],["билда",{"2":{"71":1,"401":1,"424":2,"425":1,"440":1,"508":1,"542":1,"574":1,"576":1}}],["библиотекой",{"2":{"96":1,"211":1,"242":1,"450":1,"484":1}}],["библиотеке",{"2":{"96":1}}],["библиотеками",{"2":{"541":1}}],["библиотекам",{"2":{"300":1}}],["библиотеках",{"2":{"169":1,"413":1}}],["библиотека",{"0":{"96":1},"2":{"96":1,"222":4,"299":1,"341":1,"344":2,"369":2,"446":1,"450":4,"484":1,"506":1,"515":1,"570":1}}],["библиотеку",{"0":{"442":1},"2":{"20":1,"56":2,"96":1,"122":1,"211":1,"222":2,"278":1,"341":1,"344":1,"369":3,"377":1,"383":1,"450":1,"481":1,"483":1,"485":1,"490":1,"538":1}}],["библиотеки",{"0":{"490":1},"2":{"20":1,"96":1,"210":1,"211":1,"213":1,"217":1,"219":1,"220":2,"221":1,"222":3,"224":1,"225":1,"270":1,"323":2,"329":1,"341":1,"344":1,"345":1,"377":1,"430":1,"431":1,"440":1,"443":1,"448":1,"454":2,"461":1,"482":1,"485":1,"490":4,"538":2,"589":1}}],["библиотек",{"0":{"485":1},"2":{"20":2,"96":1,"211":4,"215":1,"219":1,"221":1,"222":2,"241":1,"289":1,"323":1,"341":2,"373":1,"374":1,"377":1,"382":1,"418":3,"439":1,"442":1,"487":1,"490":7,"538":1,"542":1,"578":1}}],["бизнесом",{"2":{"541":1}}],["бизнеса",{"2":{"68":2}}],["бизнес",{"0":{"8":1,"68":1},"1":{"9":1,"10":1,"11":1,"12":1,"13":1,"14":1},"2":{"6":1,"14":1,"16":1,"67":1,"69":1,"93":1,"96":1,"124":1,"218":1,"258":1,"264":3,"291":1,"331":1,"335":3,"413":1,"430":2,"431":1,"448":3,"450":5,"454":1,"482":1,"540":1,"541":1,"542":1,"545":1}}],["бд",{"2":{"17":2,"39":1,"47":1,"56":1,"450":1}}],["бывают",{"0":{"448":1},"2":{"96":1,"268":1,"288":1,"290":1,"426":1,"479":1,"483":1}}],["бывает",{"2":{"43":1,"126":1,"180":1,"193":1,"288":1,"294":1,"450":1}}],["быстрей",{"2":{"440":1,"441":1,"482":1,"487":1}}],["быстрее",{"2":{"133":1,"270":1,"440":1}}],["быстр",{"2":{"341":1}}],["быстрая",{"2":{"178":1,"341":1,"354":1,"418":1}}],["быстрые",{"2":{"270":1}}],["быстрым",{"2":{"186":1,"209":1,"354":1}}],["быстрых",{"2":{"166":1}}],["быстрый",{"2":{"51":1,"145":2,"225":1,"331":1,"441":1}}],["быстрой",{"2":{"174":1,"331":1}}],["быстро",{"2":{"138":2,"166":1,"178":1,"209":1,"222":1,"242":1,"288":2,"290":1,"464":1,"466":1,"483":1,"490":1,"541":3,"542":1}}],["быстрого",{"2":{"17":1,"20":1,"479":1}}],["была",{"2":{"95":2,"130":1,"133":1,"135":1,"159":1,"210":2,"212":1,"217":1,"261":1,"319":1,"325":1,"352":1,"446":1,"474":1,"490":1,"492":1}}],["были",{"2":{"39":2,"62":1,"122":1,"134":1,"136":1,"158":1,"163":1,"175":1,"221":3,"248":1,"252":1,"263":1,"277":1,"365":1,"368":1,"374":1,"417":1,"457":1,"458":1}}],["было",{"2":{"9":1,"10":2,"12":2,"50":2,"89":1,"96":1,"140":1,"142":1,"155":1,"173":1,"177":1,"234":1,"255":1,"277":1,"286":1,"311":1,"318":1,"319":1,"320":1,"324":4,"327":1,"354":2,"363":1,"376":1,"377":1,"412":1,"430":1,"433":1,"446":2,"448":1,"450":1,"456":1,"459":2,"462":1,"464":1,"465":1,"466":1,"467":1,"472":1,"474":2,"475":1,"481":1,"482":3,"538":1}}],["был",{"2":{"9":1,"12":1,"62":1,"96":4,"98":1,"112":1,"133":1,"135":1,"142":1,"195":1,"209":1,"210":1,"214":1,"222":1,"240":1,"292":1,"303":1,"307":1,"340":1,"342":1,"365":1,"375":1,"407":1,"420":1,"425":2,"450":2,"467":1,"474":1,"492":1,"562":1}}],["бы",{"2":{"9":2,"12":3,"23":1,"83":1,"96":3,"114":1,"123":1,"139":2,"142":1,"149":1,"153":1,"160":2,"176":1,"204":1,"208":2,"218":1,"243":1,"259":1,"265":1,"267":1,"275":1,"286":1,"291":3,"307":2,"310":3,"318":1,"319":3,"323":1,"324":4,"331":1,"332":1,"340":1,"355":1,"368":1,"369":1,"376":1,"413":1,"417":1,"419":1,"450":1,"451":1,"455":1,"457":1,"459":3,"462":1,"464":1,"475":1,"491":2}}],["быть",{"0":{"160":1},"2":{"2":2,"3":1,"17":1,"47":1,"50":1,"51":1,"67":1,"77":2,"85":1,"89":1,"96":2,"104":1,"105":1,"107":1,"114":1,"118":1,"123":1,"127":1,"130":1,"131":2,"132":1,"133":2,"142":3,"152":1,"159":1,"162":1,"164":1,"167":2,"171":1,"173":1,"174":1,"175":2,"176":1,"180":1,"186":2,"187":1,"193":1,"204":1,"213":1,"214":1,"222":3,"224":1,"225":1,"226":3,"229":1,"230":1,"233":1,"234":3,"243":1,"247":1,"249":1,"252":1,"253":2,"254":1,"255":3,"259":1,"264":2,"268":1,"269":1,"272":4,"276":1,"277":6,"278":1,"286":3,"289":2,"291":1,"292":1,"304":1,"312":1,"316":1,"317":2,"318":2,"320":2,"324":1,"326":1,"327":1,"331":5,"332":4,"335":1,"342":1,"347":2,"349":1,"354":1,"356":1,"365":1,"370":1,"371":3,"375":1,"376":1,"377":1,"378":1,"382":1,"404":1,"408":1,"412":2,"414":1,"415":1,"418":4,"419":1,"420":1,"424":4,"431":2,"433":4,"437":1,"446":1,"448":1,"449":1,"453":2,"454":1,"456":3,"457":1,"463":1,"466":1,"469":1,"474":1,"479":1,"486":1,"491":3,"492":3,"502":1,"508":1,"515":2,"531":1,"541":1,"542":1,"588":1}}],["блестящих",{"2":{"387":1}}],["ближе",{"2":{"226":1}}],["близка",{"2":{"323":1}}],["близко",{"2":{"162":1,"492":1}}],["близость",{"0":{"162":1}}],["близости",{"2":{"161":1,"162":1}}],["блогов",{"2":{"354":2}}],["блог",{"2":{"123":1,"540":1,"541":1,"542":1}}],["блокчейне",{"2":{"377":1}}],["блокчейном",{"2":{"377":3}}],["блокчейнов",{"2":{"354":1,"377":1}}],["блокчейнами",{"2":{"377":1}}],["блокчейна",{"2":{"377":2}}],["блокчейну",{"2":{"377":2}}],["блокчейны",{"2":{"377":2}}],["блокчейн",{"2":{"377":3}}],["блоков",{"2":{"217":1,"542":1}}],["блоком",{"2":{"149":1}}],["блока",{"2":{"89":1,"217":2,"365":1,"441":1,"453":1,"458":1}}],["блок",{"2":{"89":1,"326":1}}],["блоке",{"2":{"23":1,"217":1,"376":1}}],["блокировка",{"2":{"418":1}}],["блокировать",{"2":{"418":1}}],["блокирующими",{"2":{"331":1}}],["блокируют",{"2":{"324":1}}],["блоки",{"2":{"4":1,"224":1,"250":1,"430":1,"448":1,"542":1}}],["благоприятно",{"2":{"483":1}}],["благополучия",{"2":{"387":1}}],["благодарю",{"2":{"387":1}}],["благодаря",{"2":{"142":1,"148":1,"166":1,"168":1,"169":1,"184":1,"186":1,"217":1,"254":1,"323":1,"343":1,"354":1,"492":1}}],["благо",{"2":{"111":1}}],["благозвучно",{"2":{"2":1}}],["байт",{"2":{"418":1}}],["бара",{"2":{"176":1}}],["бары",{"2":{"176":1}}],["балансировщика",{"2":{"148":1}}],["багов",{"2":{"453":2}}],["баг",{"2":{"96":1}}],["баги",{"2":{"2":1,"483":1}}],["банк",{"2":{"376":1}}],["баннер",{"2":{"277":2}}],["баннеры",{"2":{"4":1}}],["бандла",{"2":{"437":1,"484":1}}],["бандл",{"2":{"124":1,"437":1,"446":1,"490":1,"574":1}}],["бандлер",{"2":{"303":1}}],["бандлеры",{"2":{"303":1}}],["бандле",{"2":{"59":1,"440":1}}],["базой",{"2":{"305":1,"329":1,"343":1,"475":1}}],["базовая",{"2":{"405":1}}],["базовую",{"2":{"211":1,"314":1,"483":1}}],["базовом",{"2":{"222":1,"369":1,"405":1,"413":1,"491":1}}],["базовое",{"2":{"221":1}}],["базового",{"0":{"411":1},"1":{"412":1},"2":{"207":1,"215":1,"403":1,"410":1,"461":1}}],["базовой",{"2":{"169":1,"247":1,"273":1,"391":1,"431":1,"448":1}}],["базовые",{"2":{"259":1,"383":1,"428":1,"448":1,"455":1}}],["базовым",{"2":{"210":1,"339":1,"455":1}}],["базовый",{"0":{"455":1},"2":{"143":1,"144":1,"209":1,"279":1,"411":1,"431":1,"448":1}}],["базовых",{"2":{"88":1,"208":1,"224":1,"254":1,"278":1,"382":1}}],["базе",{"0":{"45":1},"1":{"46":1,"47":1,"48":1,"49":1,"50":1,"51":1},"2":{"40":1,"59":1,"83":1,"124":3,"133":2,"310":1,"323":1,"340":1,"350":1,"370":2,"450":1}}],["базы",{"2":{"17":2,"39":1,"124":1,"190":1,"341":2,"342":1,"343":1,"365":1,"370":1,"418":3,"472":1}}],["базу",{"2":{"17":2,"40":2,"56":1,"59":1,"124":1,"270":1,"341":1,"343":1,"418":2}}],["баз",{"0":{"17":1},"1":{"18":1,"19":1},"2":{"17":1,"51":2,"418":1,"454":1}}],["базам",{"2":{"441":1}}],["базами",{"2":{"329":1,"453":1}}],["базах",{"2":{"46":1,"47":1,"50":1}}],["база",{"2":{"6":2,"41":1,"80":1,"264":1,"270":1,"329":1,"337":1,"341":3,"418":1,"441":1,"450":1}}],["system",{"2":{"466":2}}],["synctex",{"2":{"441":1}}],["syncref",{"2":{"96":1}}],["sftp",{"2":{"441":1}}],["sfc",{"2":{"89":2,"210":1,"225":3,"233":1,"234":1,"441":2,"459":1,"482":1}}],["s3",{"2":{"425":1}}],["snickerbockers",{"2":{"424":2}}],["snake",{"2":{"47":1,"237":1}}],["smoothscrolling",{"2":{"441":1}}],["smart",{"2":{"377":1}}],["sms",{"2":{"376":2}}],["smith",{"2":{"131":1}}],["svelte",{"2":{"354":1,"441":3,"482":2}}],["svgo",{"2":{"441":10}}],["svgresources",{"2":{"439":4}}],["svg",{"2":{"210":1,"279":1,"438":2,"439":3,"440":1,"441":2,"547":1}}],["square",{"2":{"313":4}}],["sql",{"2":{"17":3,"39":1,"59":1,"126":1,"341":1,"424":1,"441":1,"450":2,"491":1}}],["sln",{"2":{"472":1}}],["slidingheader",{"0":{"568":1}}],["slider",{"2":{"444":1}}],["sliced",{"0":{"430":1},"2":{"430":1,"448":2}}],["slots",{"2":{"257":1}}],["slot=",{"2":{"257":4}}],["slot",{"2":{"257":8}}],["slot>",{"2":{"257":5,"263":2}}],["slug",{"2":{"106":1}}],["skeuomorphism",{"2":{"211":1}}],["s",{"0":{"152":1},"2":{"139":1,"151":1,"152":4,"153":1,"164":1,"271":1,"398":1,"424":1,"437":1,"440":1,"450":1,"545":1}}],["ssg",{"0":{"492":1},"2":{"492":3}}],["ssd",{"2":{"441":1}}],["ss06",{"2":{"441":1}}],["ss03",{"2":{"441":1}}],["ss02",{"2":{"441":1}}],["ss01",{"2":{"441":1}}],["ssl",{"2":{"271":1,"370":1,"425":2}}],["ssh",{"2":{"151":1,"152":2,"424":14,"441":2}}],["sso",{"2":{"123":2}}],["ssr",{"0":{"492":1},"2":{"96":1,"359":1,"441":1,"450":2,"472":1,"492":9}}],["swagger",{"2":{"491":1}}],["swiper",{"2":{"444":1}}],["switch",{"2":{"170":1,"264":2,"313":1,"317":1,"319":1}}],["sw",{"2":{"121":2,"472":1,"492":1,"501":1}}],["scs",{"2":{"466":1,"467":2}}],["scss",{"0":{"89":1},"2":{"20":1,"89":5,"429":1,"430":1,"438":1,"441":1,"448":2,"538":1,"543":2,"591":1}}],["sc",{"2":{"466":1}}],["scope",{"2":{"372":2,"588":1}}],["scoped",{"2":{"225":2}}],["scoped>",{"2":{"177":1,"216":1,"225":1,"321":1,"417":1,"438":1}}],["scms",{"2":{"466":1}}],["scmitem",{"2":{"441":1}}],["scmgroupinline",{"2":{"441":1}}],["scmgroup",{"2":{"441":1}}],["scm",{"2":{"208":1,"441":2}}],["scaffolding",{"2":{"121":1,"210":1,"535":1}}],["scrollbehavior",{"2":{"359":1}}],["scrolly",{"2":{"258":2}}],["scroll",{"2":{"179":6,"258":2,"446":1}}],["scroller",{"2":{"178":1}}],["screenwidthfactor",{"2":{"543":1}}],["screenshots",{"2":{"275":1}}],["screen",{"0":{"590":1},"2":{"121":2,"189":1,"535":1,"540":2,"542":1,"549":1,"576":1}}],["scripts",{"2":{"210":1,"424":1,"456":2}}],["script>",{"2":{"112":1,"131":1,"177":1,"179":1,"216":1,"223":3,"225":1,"226":5,"234":1,"259":1,"263":1,"290":1,"321":1,"322":1,"342":1,"347":1,"362":1,"406":1,"407":1,"410":1,"412":1,"417":1,"421":1,"434":1,"438":1,"511":1,"513":2,"520":1,"524":1,"528":1,"530":2,"531":4,"543":1,"547":1,"563":3,"572":1}}],["script",{"0":{"226":1},"2":{"112":1,"122":4,"130":1,"131":1,"133":1,"138":1,"177":1,"179":1,"210":1,"211":3,"215":1,"216":3,"217":2,"223":3,"225":2,"226":4,"234":1,"251":1,"253":2,"254":1,"258":1,"259":1,"263":2,"277":1,"290":2,"321":1,"322":1,"342":1,"347":1,"362":3,"368":1,"406":1,"407":1,"410":1,"412":1,"415":1,"417":1,"421":1,"424":2,"434":1,"438":1,"441":1,"446":1,"474":1,"511":1,"513":2,"520":1,"524":1,"528":1,"530":2,"531":2,"538":1,"543":1,"547":1,"563":1,"572":1}}],["src=",{"2":{"223":1,"228":1,"437":3,"438":1,"513":2,"530":2,"531":2,"563":1}}],["src",{"0":{"144":1,"179":1,"342":1,"343":1,"344":1,"347":1,"359":1,"360":1,"365":1,"457":1,"461":1,"462":1},"2":{"104":1,"112":1,"144":1,"210":2,"214":2,"216":1,"228":1,"261":1,"263":5,"264":2,"273":1,"275":1,"279":3,"356":1,"362":1,"427":1,"428":1,"429":1,"430":1,"437":1,"440":2,"448":4,"455":1,"456":5,"463":1,"549":1,"572":1}}],["srs",{"2":{"9":1,"69":1}}],["sans",{"2":{"506":1,"591":1}}],["savedposition",{"2":{"359":1}}],["savenote",{"2":{"342":3}}],["save",{"2":{"279":1,"441":1}}],["saveprompt",{"2":{"277":2}}],["safe",{"2":{"96":1}}],["sass",{"2":{"89":1,"441":1}}],["sb",{"2":{"83":3,"93":1}}],["sdlc",{"2":{"67":1}}],["sdk",{"0":{"53":1},"1":{"54":1,"55":1},"2":{"53":1,"377":1}}],["sonner",{"2":{"445":1}}],["social",{"2":{"437":1}}],["sockets",{"2":{"370":1}}],["solvery",{"2":{"491":1}}],["solana",{"2":{"377":1}}],["solid",{"2":{"177":1,"213":2,"217":3,"543":1}}],["software",{"0":{"78":1},"2":{"67":1,"69":1}}],["somearr",{"2":{"482":4}}],["someimage",{"2":{"437":1}}],["someid",{"2":{"179":1}}],["somecomponent",{"0":{"436":1},"2":{"258":1}}],["somefunc",{"2":{"124":1}}],["somevalue",{"2":{"55":2,"56":2}}],["some",{"2":{"55":2,"56":2,"252":1,"253":2,"257":2}}],["source",{"0":{"463":1,"466":1},"2":{"12":1,"39":1,"62":1,"323":1,"424":1,"441":3,"448":1,"456":1,"466":3,"478":1,"533":1,"561":1}}],["seed",{"2":{"546":1}}],["segoe",{"2":{"506":1}}],["serif",{"2":{"506":1,"591":1}}],["series",{"2":{"457":3}}],["servers",{"2":{"384":1}}],["server",{"0":{"349":1},"2":{"125":3,"145":1,"149":1,"349":1,"370":1,"424":3,"441":5,"492":1}}],["serviceworker",{"2":{"278":2}}],["services",{"0":{"338":1,"340":1,"343":1,"345":1,"409":1,"420":1},"2":{"122":1,"264":1,"335":1,"339":4,"340":1,"342":1,"344":2,"345":1,"346":2,"347":1,"410":1,"412":1,"421":1,"429":3,"448":3,"455":1,"457":1,"545":1}}],["service",{"0":{"278":1,"412":1,"589":1},"2":{"39":1,"80":1,"121":2,"124":1,"240":1,"255":2,"268":1,"270":1,"277":1,"278":5,"279":1,"282":1,"338":8,"339":3,"340":2,"343":2,"345":2,"371":1,"420":1,"441":1,"492":3,"501":1,"535":1,"540":1,"549":1,"576":1,"587":1,"589":2}}],["sentry",{"2":{"441":2}}],["sendmessage",{"2":{"410":2}}],["sendtoserver",{"2":{"373":1,"374":2}}],["senddata",{"2":{"347":2}}],["send",{"2":{"340":1,"347":3}}],["sendrequest",{"2":{"339":4}}],["semi",{"2":{"441":1}}],["separate",{"2":{"441":1}}],["separation",{"0":{"286":1},"2":{"283":1}}],["session",{"0":{"421":1}}],["sessionstorage",{"0":{"420":1},"2":{"418":6,"419":2,"420":4,"421":3,"423":2}}],["sessionstore",{"2":{"418":1}}],["searchtests",{"2":{"429":1,"448":1}}],["searchstore",{"2":{"429":1,"448":1}}],["searchinput",{"2":{"429":1,"448":1}}],["search",{"2":{"362":1,"429":1,"441":1,"448":1}}],["self",{"2":{"278":1,"333":4,"334":1,"339":2}}],["selected",{"2":{"342":4,"365":1}}],["selected=ref",{"2":{"342":1}}],["select",{"2":{"55":2,"59":1,"121":5,"187":1,"232":1,"490":2,"535":5}}],["select=id",{"2":{"44":2,"83":3,"93":1}}],["select=",{"2":{"44":1,"56":1}}],["second",{"2":{"568":1}}],["seconds",{"2":{"375":3}}],["seconds=ref",{"2":{"375":1}}],["security",{"2":{"441":1}}],["secure",{"2":{"151":1,"152":1,"370":1}}],["section>",{"2":{"257":2,"342":6,"347":4,"406":2}}],["section",{"2":{"189":2,"488":1}}],["secrets",{"2":{"424":2}}],["secret",{"2":{"58":1,"371":3}}],["setlocale",{"2":{"572":2}}],["setlogoutcallback",{"2":{"122":1}}],["setoptions",{"2":{"546":1}}],["setsomearr",{"2":{"482":1}}],["setvalue",{"2":{"462":2}}],["setting",{"2":{"424":1,"441":1}}],["settings",{"2":{"424":1,"441":1,"561":1}}],["settimeout",{"2":{"333":2,"340":1,"483":1}}],["settokencallback",{"2":{"122":1}}],["setimmediate",{"2":{"325":3,"326":1}}],["setitem",{"2":{"113":1,"418":2,"420":1,"424":1}}],["setdbmanager",{"2":{"310":1}}],["setbaseurl",{"2":{"122":1}}],["setup>",{"2":{"131":1,"177":1,"179":1,"216":1,"225":1,"226":1,"234":1,"259":1,"263":1,"290":1,"321":1,"322":1,"342":1,"347":1,"362":1,"406":1,"407":1,"410":1,"412":1,"417":1,"421":1,"434":1,"438":1,"511":1,"524":1,"528":1}}],["setup",{"0":{"226":1},"2":{"112":1,"122":4,"130":1,"133":1,"138":1,"215":1,"225":1,"226":5,"253":2,"254":1,"258":1,"263":1,"290":1,"362":1,"368":1,"415":1,"424":4,"441":1,"446":1,"450":1,"538":1,"543":1,"547":1,"572":1}}],["set",{"2":{"112":2,"113":2,"122":1,"319":2,"320":1,"420":2,"435":1,"439":2,"475":1}}],["seo",{"0":{"492":1},"2":{"80":1,"106":1,"492":1}}],["sponsors",{"2":{"441":1}}],["sp",{"2":{"371":1}}],["spec",{"2":{"429":2,"430":1,"441":1,"448":3,"456":1}}],["specs",{"2":{"371":1}}],["specific",{"2":{"505":1}}],["specification",{"2":{"69":1}}],["special",{"2":{"234":1,"259":1}}],["splide",{"2":{"444":1}}],["splice",{"2":{"315":1}}],["splashscreen",{"2":{"535":1}}],["splash",{"0":{"590":1},"2":{"121":2,"535":1,"540":2,"542":1,"549":1,"576":1,"590":1}}],["spinnercomponent",{"2":{"252":2}}],["spinner",{"0":{"177":1},"2":{"177":2}}],["spree",{"2":{"41":1}}],["span>post",{"2":{"347":1}}],["span>get",{"2":{"347":1}}],["span>",{"2":{"112":1,"177":1,"217":2,"231":1,"347":2,"406":2,"407":1}}],["span",{"2":{"112":1,"171":1,"177":1,"217":4,"231":2,"407":1,"505":1}}],["spa",{"0":{"144":1,"270":1,"271":1,"354":1,"492":1},"1":{"272":1,"273":1,"274":1,"275":1,"276":1,"277":1},"2":{"6":1,"123":1,"139":2,"143":1,"266":1,"268":3,"270":5,"275":1,"277":1,"278":3,"281":1,"282":1,"352":3,"354":12,"355":1,"368":1,"369":1,"370":3,"371":2,"374":1,"376":4,"377":2,"378":1,"379":3,"394":1,"431":1,"448":1,"492":11,"542":1}}],["suo",{"2":{"472":1}}],["sum",{"2":{"441":2}}],["summary",{"2":{"83":4,"92":2,"93":1}}],["suggestselection",{"2":{"441":1}}],["sudo",{"2":{"424":3,"469":4,"470":1}}],["success=false",{"2":{"339":1}}],["success",{"2":{"338":3,"339":2}}],["subversion",{"2":{"466":1}}],["substring",{"2":{"439":2}}],["submodules",{"2":{"424":4,"431":1}}],["submit",{"2":{"375":1}}],["sub",{"2":{"314":1,"318":1,"362":2,"363":1,"371":2}}],["sublime",{"2":{"208":1}}],["subtitle",{"2":{"17":1,"18":1}}],["sue",{"2":{"131":1}}],["surname",{"2":{"131":6}}],["suspense",{"2":{"122":1,"234":1,"433":1}}],["supabase",{"0":{"40":1,"52":1,"53":1,"56":1,"57":1,"82":1},"1":{"53":1,"54":2,"55":2,"56":1,"58":1,"59":1,"83":1},"2":{"39":2,"40":2,"41":4,"44":4,"53":2,"54":2,"55":8,"56":10,"58":1,"59":2,"124":2,"491":1}}],["side",{"2":{"492":1}}],["sidebarlayout",{"2":{"433":2}}],["sidebar>",{"2":{"257":1,"362":2}}],["sidebars",{"2":{"181":1}}],["sidebar",{"0":{"30":1,"108":1},"2":{"28":1,"257":2,"362":8,"365":2}}],["siblings",{"2":{"403":1}}],["size",{"2":{"435":1,"438":5,"505":3}}],["sizes",{"2":{"273":1,"275":1,"279":3}}],["size=",{"2":{"114":1,"437":1}}],["siri",{"2":{"157":1}}],["sites",{"0":{"149":1},"2":{"148":1}}],["site",{"2":{"125":3,"424":14,"492":1}}],["signinuser",{"2":{"375":2}}],["signature",{"2":{"371":2}}],["sign",{"2":{"123":1}}],["singlequote",{"2":{"441":1}}],["singleclick",{"2":{"441":1}}],["singleton",{"0":{"300":1,"408":1},"1":{"301":1,"302":1,"303":1,"304":1,"409":1,"410":1},"2":{"112":1,"283":1,"296":1,"303":2,"304":6,"310":1,"315":2,"328":1,"403":1,"408":1,"411":1}}],["single",{"0":{"288":1},"2":{"55":1,"123":1,"283":1,"492":1}}],["simplenavbar",{"0":{"584":1}}],["simpleheader",{"0":{"565":1}}],["simplefooter",{"0":{"555":1}}],["simpledrawer",{"0":{"552":1},"2":{"535":2,"553":1}}],["simpledialog",{"2":{"441":1}}],["simplestate",{"0":{"412":1},"2":{"412":1}}],["simple",{"0":{"292":1},"2":{"2":1,"283":1,"412":1,"441":4}}],["shims",{"2":{"441":1}}],["shift+f12",{"2":{"89":1}}],["shrinkwrap",{"2":{"441":2}}],["shnpx",{"2":{"440":1}}],["shpnpm",{"2":{"440":1}}],["shortcuts",{"2":{"275":1}}],["short",{"0":{"292":1},"2":{"273":1,"275":1,"279":1,"588":1}}],["showdocumentation",{"2":{"441":1}}],["showsuggestionsassnippets",{"2":{"441":1}}],["showmessage",{"2":{"410":3}}],["showmodal",{"2":{"264":1}}],["show=",{"2":{"217":2,"229":1,"277":2}}],["show",{"0":{"229":1},"2":{"164":1,"229":1,"230":3,"234":1,"259":1,"263":6,"375":2}}],["shoppingcart",{"2":{"95":1,"96":2}}],["shopping",{"2":{"12":1}}],["shell",{"2":{"151":1,"431":1,"441":1,"449":1}}],["sheet",{"0":{"493":1},"1":{"494":1,"495":1,"496":1,"497":1,"498":1,"499":1},"2":{"17":1,"494":1,"495":1,"496":1,"497":4}}],["shallowref",{"2":{"446":2}}],["shape2",{"2":{"313":2}}],["shape1",{"2":{"313":2}}],["sha",{"2":{"222":1}}],["shaming",{"0":{"202":1}}],["shared",{"2":{"145":1,"430":2,"448":2}}],["sharing",{"2":{"125":1,"349":1}}],["shaking",{"2":{"96":1,"439":1,"484":1}}],["sh$",{"2":{"120":1,"121":2,"144":1,"209":3,"217":1,"279":1,"341":1,"344":1,"348":2,"356":1,"455":2,"456":2,"457":1,"460":2,"464":1,"465":2,"469":2,"471":4,"472":2,"475":4,"535":1,"536":1,"537":1,"540":1}}],["sh",{"2":{"54":1,"408":1,"413":1,"441":2,"520":2}}],["shcurl",{"2":{"44":1,"56":1}}],["stylus",{"2":{"446":1}}],["stylelint",{"2":{"441":4}}],["styleci",{"2":{"441":2}}],["style=",{"2":{"322":1,"438":2}}],["stylesheet",{"2":{"212":1,"213":3,"513":1,"520":2,"530":1,"531":1}}],["styles",{"2":{"210":1,"212":1,"360":2,"427":1,"428":1,"429":1,"430":1,"448":4}}],["style>",{"2":{"177":1,"216":1,"225":1,"321":1,"417":1,"438":1,"506":2,"530":2,"531":2}}],["style",{"2":{"69":1,"177":1,"216":2,"217":1,"225":2,"321":1,"417":1,"438":1,"441":1,"491":2,"511":1,"520":1,"524":1,"528":1}}],["stoploading",{"2":{"435":2,"436":2}}],["storage",{"0":{"421":1},"2":{"421":1}}],["story",{"2":{"247":1,"441":1}}],["stores",{"0":{"415":1},"2":{"343":1,"417":1}}],["store",{"0":{"414":1},"2":{"14":1,"143":1,"208":1,"270":4,"403":1,"427":1,"428":1,"429":4,"430":1,"448":7,"450":4,"472":1}}],["storefront",{"2":{"10":1,"41":1,"541":1}}],["steps",{"2":{"424":2}}],["study",{"2":{"270":1}}],["studio",{"2":{"208":1,"384":1,"468":1,"475":1}}],["stupid",{"2":{"2":1,"283":1}}],["stickyscroll",{"2":{"441":1}}],["sticky",{"2":{"181":1,"441":1,"565":1,"566":1,"567":1}}],["stage",{"2":{"471":1,"472":1,"474":2}}],["staged",{"2":{"441":2}}],["staging",{"2":{"424":5,"472":1}}],["stackblitz",{"2":{"441":3}}],["stackable",{"2":{"320":1}}],["stash",{"2":{"441":3}}],["standalone",{"2":{"273":2,"275":1,"279":1,"588":1}}],["star",{"2":{"518":1}}],["starbucks",{"2":{"270":1}}],["startloading",{"2":{"435":2,"436":2}}],["startotptimer",{"2":{"375":2}}],["started",{"2":{"264":2}}],["start",{"2":{"158":1,"159":1,"164":1,"273":1,"275":1,"279":1,"455":1,"456":1,"588":1}}],["static",{"2":{"359":1,"437":1,"492":1}}],["status>200",{"2":{"375":1}}],["status>=200",{"2":{"345":2}}],["status",{"2":{"264":2,"345":2,"370":1,"375":1,"472":1}}],["states",{"2":{"363":1,"365":2}}],["stateful",{"2":{"258":1,"450":1}}],["state",{"0":{"135":1,"450":1},"2":{"111":2,"127":1,"344":1,"363":2,"365":3,"369":1,"372":1,"373":1,"412":2,"414":7,"419":1,"441":1,"450":5}}],["strategies",{"2":{"166":1}}],["strong>child",{"2":{"421":1}}],["strong>counter",{"2":{"406":1}}],["strong>state",{"2":{"412":1}}],["strong>received",{"2":{"410":1}}],["strong>",{"2":{"131":4,"342":2,"406":1,"410":1,"412":1,"421":1}}],["strongly",{"2":{"100":1}}],["string>",{"2":{"435":1}}],["stringhelpers",{"2":{"431":1,"449":1}}],["strings",{"2":{"366":1}}],["stringify",{"2":{"113":1,"342":3,"418":1}}],["string",{"2":{"92":2,"251":1,"253":3,"263":2,"372":2,"437":1,"438":6,"457":2}}],["known",{"2":{"457":1}}],["karma",{"2":{"441":10}}],["komodo",{"2":{"208":1}}],["kobold",{"2":{"191":2}}],["keen",{"2":{"444":1}}],["keepalive",{"2":{"234":2}}],["keep",{"0":{"290":1,"292":1},"2":{"2":1,"283":2,"290":1,"315":1}}],["kebab",{"2":{"216":2}}],["keys",{"2":{"450":1}}],["keyup",{"2":{"217":2}}],["key=",{"2":{"179":1,"217":2,"231":1,"342":1,"362":1,"365":1}}],["keyframes",{"2":{"177":1}}],["key",{"0":{"231":1},"2":{"55":1,"56":6,"217":1,"231":1,"234":1,"255":3,"319":5,"366":2,"371":4,"424":9}}],["kic",{"0":{"290":1},"2":{"283":1,"290":1}}],["kit",{"2":{"20":1}}],["kiss",{"0":{"292":1},"2":{"2":1,"283":1,"292":2}}],["сэкономит",{"2":{"484":1}}],["сэкономить",{"2":{"382":1,"490":1}}],["сжатие",{"2":{"439":1}}],["сша",{"2":{"292":1}}],["сформировать",{"2":{"362":1}}],["сформулировал",{"2":{"166":1}}],["сферы",{"2":{"292":1}}],["сцену",{"2":{"248":1}}],["сцены",{"2":{"245":1}}],["сценарием",{"2":{"338":1}}],["сценариев",{"2":{"214":1,"378":1,"382":1}}],["сценариям",{"2":{"293":1}}],["сценариях",{"2":{"270":1,"362":1,"365":1}}],["сценария",{"2":{"129":1,"220":1,"223":1,"245":1,"332":1,"433":1,"458":1}}],["сценарий",{"0":{"560":1},"1":{"561":1,"562":1},"2":{"123":1,"278":1,"576":1}}],["сценарии",{"2":{"68":1,"220":1,"270":2,"375":1,"453":1,"579":1}}],["сюда",{"2":{"210":1,"501":1}}],["сбить",{"2":{"456":1}}],["сбивать",{"2":{"325":1}}],["сбивают",{"2":{"199":1}}],["сброса",{"2":{"217":1}}],["сбоя",{"2":{"278":1}}],["сбоку",{"2":{"172":1}}],["сбор",{"2":{"542":1}}],["сборник",{"2":{"439":1}}],["сборок",{"2":{"213":1,"440":1,"476":1}}],["сбора",{"2":{"157":1,"171":1,"357":1}}],["сборку",{"2":{"251":1,"476":1}}],["сборке",{"2":{"210":1,"211":1,"279":1,"418":1}}],["сборки",{"2":{"143":1,"208":1,"214":1,"219":1,"223":1,"279":1,"463":1}}],["сборка",{"0":{"440":1},"2":{"133":1,"214":1,"223":1,"424":1,"440":1}}],["сборщики",{"2":{"224":1,"252":1}}],["сборщиков",{"2":{"210":1,"252":1}}],["сборщиком",{"2":{"132":1,"210":1,"214":1,"224":1,"225":1}}],["сборщика",{"0":{"224":1},"2":{"135":1,"207":2,"209":1,"224":2,"225":1,"226":1,"279":1,"440":3,"538":1}}],["сборщик",{"2":{"127":1,"134":1,"210":2,"223":1,"224":2,"225":1,"226":1,"290":1,"383":1,"440":3}}],["схожих",{"2":{"454":1}}],["схожи",{"2":{"454":1,"482":1}}],["схожести",{"2":{"162":1}}],["схеме",{"2":{"316":1}}],["схема",{"2":{"118":1,"197":1,"201":1,"202":1,"203":1}}],["схемы",{"2":{"38":1,"191":1,"352":1,"365":1,"418":1}}],["схему",{"2":{"17":1,"148":1,"343":1}}],["снэпшот",{"2":{"508":1}}],["сне",{"2":{"446":1}}],["снять",{"2":{"278":1,"290":1,"315":1,"492":1}}],["снятие",{"2":{"310":1}}],["снятии",{"2":{"217":1}}],["снятия",{"2":{"192":1}}],["сняты",{"2":{"136":1}}],["сначала",{"2":{"189":1,"209":1,"218":1,"221":1,"223":1,"224":1,"225":1,"226":1,"278":6,"320":1,"324":1,"343":1,"354":1,"358":1,"372":1,"375":1,"411":1,"413":1,"455":1}}],["снова",{"2":{"179":2,"234":1,"316":1,"319":1,"371":1,"375":1,"460":1}}],["сниппетов",{"2":{"576":1}}],["сниппет",{"2":{"325":2}}],["снизить",{"2":{"323":1,"371":1,"490":1}}],["снизу",{"2":{"29":1,"107":1}}],["снижает",{"2":{"483":1,"492":1}}],["снижают",{"2":{"479":1}}],["снижаться",{"2":{"133":1}}],["снижением",{"2":{"222":1}}],["снимку",{"2":{"472":1}}],["снимке",{"2":{"159":1,"411":1}}],["снимок",{"2":{"365":1}}],["снимаем",{"2":{"279":1,"290":1,"362":1}}],["снимать",{"2":{"123":1}}],["снимаются",{"2":{"123":1}}],["считывать",{"2":{"450":1}}],["считывателем",{"2":{"376":1}}],["считывает",{"2":{"258":1,"547":1}}],["считая",{"2":{"326":1}}],["считаются",{"2":{"272":1}}],["считает",{"2":{"450":1}}],["считается",{"2":{"125":1,"152":1,"189":1,"191":1,"365":1,"371":1,"376":1,"377":1,"418":1,"491":1}}],["считаем",{"2":{"254":1,"349":1}}],["считаться",{"2":{"282":1}}],["считать",{"2":{"245":1,"272":1,"329":1,"336":1,"483":1}}],["счастливо",{"2":{"213":1}}],["счастью",{"2":{"152":1,"326":1}}],["счетчики",{"2":{"247":1}}],["счетчика",{"2":{"218":1,"405":1}}],["счетчик",{"2":{"209":1,"405":1,"407":1}}],["счет",{"2":{"131":1,"161":1,"222":1,"268":1}}],["сгенеренные",{"2":{"492":1}}],["сгенерировавшего",{"2":{"332":1}}],["сгенерировать",{"2":{"278":1,"425":1}}],["сгенерированные",{"2":{"279":1}}],["сгенерированный",{"2":{"210":1}}],["сгенерирована",{"2":{"96":1}}],["сгенерился",{"2":{"100":1}}],["сгенерить",{"2":{"98":1}}],["сгорания",{"2":{"491":1}}],["сгруппированы",{"2":{"316":1}}],["сгруппированные",{"2":{"286":1}}],["сгруппированных",{"2":{"286":1}}],["сгруппировать",{"2":{"131":1}}],["сгиба",{"2":{"191":1}}],["ссылаясь",{"2":{"462":1}}],["ссылаемся",{"2":{"362":1}}],["ссылаемой",{"2":{"232":1}}],["ссылается",{"2":{"333":1,"420":1}}],["ссылаются",{"2":{"319":1}}],["ссылающийся",{"2":{"211":1}}],["ссылаться",{"2":{"129":1,"210":2,"214":1,"217":1,"226":2,"231":1,"254":1,"315":1,"327":1,"462":1}}],["ссылок",{"2":{"182":1,"191":2,"290":2,"310":1,"362":1,"365":1}}],["ссылкой",{"2":{"190":1,"191":1}}],["ссылки",{"2":{"190":1,"191":1,"207":1,"237":3,"253":1,"255":1,"263":1,"270":1,"287":1,"300":1,"331":1,"338":2,"362":1,"365":1,"368":1,"414":1,"440":1}}],["ссылке",{"2":{"150":1,"226":1,"331":1,"405":1,"562":1}}],["ссылку",{"2":{"106":1,"144":1,"150":1,"179":3,"212":1,"277":1,"304":2,"315":1,"338":1,"362":1,"418":1}}],["ссылками",{"2":{"29":1,"33":1,"191":1,"255":1}}],["ссылка",{"0":{"190":1},"2":{"23":1,"106":1,"111":1,"131":1,"182":1,"190":2,"191":2,"253":1,"338":1,"357":1}}],["сдерживающим",{"2":{"370":1}}],["сделки",{"2":{"202":1}}],["сделав",{"2":{"344":1,"484":1}}],["сделанный",{"2":{"492":1}}],["сделана",{"2":{"474":1}}],["сделаны",{"2":{"458":1}}],["сделан",{"2":{"342":1}}],["сделано",{"2":{"218":1,"277":1,"472":1,"474":1}}],["сделал",{"2":{"293":1,"487":1}}],["сделали",{"2":{"218":2,"243":1,"354":1,"356":1,"471":1,"492":1}}],["сделает",{"2":{"225":1,"240":1,"462":1}}],["сделаем",{"2":{"65":1,"106":1,"155":2,"243":1}}],["сделайте",{"2":{"211":1,"373":1,"485":1,"491":2}}],["сделать",{"2":{"7":1,"11":1,"12":1,"25":1,"35":1,"62":1,"63":1,"82":1,"88":1,"123":2,"124":3,"143":1,"151":1,"153":1,"165":1,"194":1,"202":1,"209":1,"211":1,"213":2,"214":1,"218":3,"249":1,"263":1,"264":1,"265":1,"266":1,"271":1,"278":1,"293":2,"323":1,"331":3,"340":1,"355":1,"359":1,"362":1,"373":1,"374":1,"377":1,"382":1,"403":1,"418":1,"425":1,"431":1,"433":1,"446":2,"448":1,"450":1,"472":1,"474":2,"475":1,"482":1,"483":1,"492":1,"589":1}}],["сдвигает",{"2":{"331":1}}],["сдвиге",{"2":{"96":1}}],["смартфоне",{"2":{"492":1}}],["смартфона",{"2":{"492":1}}],["смарт",{"2":{"377":1}}],["смахивает",{"2":{"96":1}}],["смог",{"2":{"463":1}}],["смогли",{"2":{"139":1,"160":1,"166":1}}],["смогло",{"2":{"62":1}}],["смонтирован",{"2":{"226":1}}],["смонтировать",{"2":{"223":1,"461":1}}],["смонтируем",{"2":{"211":1}}],["сможет",{"2":{"326":1,"331":1,"542":1}}],["сможете",{"2":{"208":1,"403":2,"487":1}}],["сможем",{"2":{"213":1,"286":1,"326":1,"343":1,"415":1,"468":1}}],["см",{"2":{"133":1,"181":1,"234":1,"247":1,"251":1,"264":1,"272":1,"315":1,"372":1,"408":1,"418":1,"474":1}}],["смесь",{"2":{"354":1}}],["смена",{"2":{"570":1,"581":1}}],["смену",{"2":{"258":1,"482":1,"522":1}}],["смене",{"2":{"41":1}}],["смешивает",{"2":{"294":1,"482":1}}],["смешиваясь",{"2":{"162":1}}],["смешно",{"2":{"96":1}}],["смысле",{"2":{"230":1,"292":1,"376":1,"450":1}}],["смысл",{"2":{"132":1,"176":1,"362":1,"492":1}}],["смысла",{"2":{"38":1,"195":1}}],["смыслом",{"2":{"16":1}}],["сродни",{"2":{"336":1}}],["срочным",{"2":{"173":2}}],["срока",{"2":{"142":1,"152":1}}],["срок",{"2":{"123":3,"152":1}}],["сроком",{"2":{"123":1}}],["сроков",{"2":{"68":1}}],["средних",{"2":{"412":1}}],["средним",{"2":{"314":1}}],["средний",{"2":{"314":3}}],["среднем",{"2":{"491":1}}],["средней",{"2":{"292":1}}],["среднего",{"2":{"222":2,"417":1,"491":1}}],["среда",{"2":{"209":1,"441":1}}],["средам",{"2":{"157":1,"292":1}}],["среде",{"2":{"205":1,"461":1}}],["среды",{"2":{"170":1,"184":1,"207":2,"258":1,"290":1,"324":1}}],["средствах",{"2":{"475":1}}],["средствами",{"2":{"446":1,"490":1}}],["средства",{"2":{"407":1,"446":1,"475":3,"479":1,"490":1}}],["средство",{"2":{"371":1,"440":1,"541":1}}],["средством",{"2":{"204":1}}],["средств",{"2":{"62":1,"145":1,"158":1,"196":1,"253":1,"376":1,"453":1}}],["среди",{"2":{"39":1,"208":2,"270":1,"341":1,"414":1,"479":1}}],["сработает",{"2":{"458":2}}],["срабатывание",{"2":{"457":1}}],["срабатывания",{"2":{"277":1}}],["срабатывают",{"2":{"359":1}}],["срабатывает",{"2":{"263":1,"277":1,"326":1,"332":2}}],["сравнится",{"2":{"492":1}}],["сравнительная",{"2":{"431":1,"448":1}}],["сравниваются",{"2":{"490":1}}],["сравним",{"2":{"128":1,"226":2}}],["сравнений",{"2":{"457":1}}],["сравнении",{"2":{"222":1}}],["сравнения",{"0":{"198":1},"2":{"263":1}}],["сравнению",{"2":{"132":1,"195":1,"210":1,"221":1,"264":1,"265":1,"281":1,"354":1,"417":1,"452":1,"574":1}}],["сравнение",{"2":{"4":1,"131":1,"198":1}}],["сразу",{"2":{"33":1,"62":1,"65":1,"82":1,"95":1,"107":1,"123":1,"232":1,"233":1,"316":1,"326":1,"329":1,"408":1,"437":1,"492":2,"515":1,"542":1,"587":1}}],["скилл",{"2":{"491":1}}],["скидка",{"2":{"118":1}}],["сквозные",{"2":{"462":1}}],["сквозном",{"2":{"462":1}}],["склонений",{"2":{"446":1,"570":1}}],["сказывается",{"2":{"483":1}}],["сказать",{"2":{"160":1,"247":1,"331":1,"368":1,"482":1}}],["сказано",{"2":{"142":1,"377":1,"412":1}}],["скажется",{"2":{"213":1}}],["скажем",{"2":{"59":1}}],["скачивает",{"2":{"424":1}}],["скачивания",{"2":{"203":1}}],["скачок",{"2":{"412":1}}],["скачайте",{"2":{"212":1,"213":1}}],["скачает",{"2":{"209":1}}],["скачать",{"0":{"386":1},"2":{"203":2,"213":1,"491":1}}],["сканируют",{"2":{"190":1}}],["скриншота",{"2":{"363":1}}],["скриншот",{"2":{"357":1,"421":1}}],["скриншоты",{"2":{"331":1}}],["скриншоте",{"2":{"203":1,"331":1}}],["скриптов",{"2":{"464":1}}],["скриптом",{"2":{"418":1}}],["скрипту",{"2":{"418":1}}],["скрипты",{"2":{"331":1,"333":1,"334":1,"354":1}}],["скрипте",{"2":{"263":2}}],["скриптами",{"2":{"492":1}}],["скриптам",{"2":{"479":1}}],["скрипта",{"2":{"210":1,"217":1,"263":1,"279":2,"332":1,"333":1,"373":1,"457":1,"492":1}}],["скрипт",{"2":{"124":2,"279":1,"332":1,"333":1}}],["скрываем",{"2":{"375":1}}],["скрывается",{"2":{"580":1}}],["скрывает",{"2":{"198":1,"229":1,"405":1}}],["скрывать",{"2":{"288":1}}],["скрываться",{"2":{"230":1}}],["скрывая",{"2":{"230":1}}],["скрывают",{"2":{"199":1,"230":1}}],["скрываются",{"2":{"184":1}}],["скрытых",{"2":{"471":1}}],["скрытый",{"2":{"471":1}}],["скрытым",{"2":{"405":1}}],["скрытые",{"0":{"200":1},"2":{"471":1}}],["скрытие",{"2":{"323":1}}],["скрытия",{"2":{"187":1,"230":1}}],["скрыто",{"2":{"230":1}}],["скрыта",{"2":{"198":1}}],["скрыть",{"2":{"186":1,"323":1,"335":1}}],["скролбара",{"2":{"550":1}}],["скролл",{"2":{"258":1}}],["скроллера",{"2":{"178":3}}],["скроллер",{"0":{"178":1},"1":{"179":1},"2":{"178":2,"179":1}}],["скромный",{"2":{"320":1}}],["скромного",{"2":{"320":1}}],["скромное",{"2":{"223":1,"467":1}}],["скроем",{"2":{"104":1}}],["скобки",{"2":{"223":1}}],["скобок",{"2":{"217":1}}],["скомпрометирован",{"2":{"371":1}}],["скомпоновать",{"2":{"218":1}}],["скомпилированным",{"2":{"151":1}}],["скомпилировать",{"2":{"151":1}}],["скопировано",{"2":{"254":1}}],["скопированы",{"2":{"210":1}}],["скопировать",{"2":{"213":1,"362":1}}],["скопируйте",{"2":{"213":1,"484":1}}],["сколько",{"2":{"142":1,"176":2,"215":1,"231":1,"324":1,"365":1,"375":1,"376":1,"418":1,"440":1,"457":2}}],["скорее",{"2":{"142":1,"145":1,"331":1}}],["скорей",{"2":{"34":1,"450":1}}],["скоро",{"2":{"466":1}}],["скоростью",{"2":{"222":1,"341":1}}],["скорость",{"2":{"133":1,"437":1}}],["скорости",{"2":{"133":2,"354":1,"492":1}}],["скорое",{"2":{"96":1}}],["скоуп",{"2":{"68":1}}],["скелета",{"2":{"121":1}}],["скелет",{"2":{"11":1,"209":1,"541":1}}],["супротив",{"2":{"571":1}}],["субд",{"2":{"467":1,"474":1}}],["субъективное",{"2":{"502":1}}],["субъекту",{"2":{"315":1}}],["субъекта",{"2":{"314":1,"371":1}}],["субъект",{"2":{"314":5,"315":2}}],["суффиксальной",{"2":{"334":1}}],["суффикса",{"2":{"333":1,"338":1}}],["суть",{"2":{"320":1,"413":1}}],["сути",{"2":{"13":1,"114":1,"123":1,"124":1,"189":1,"283":1,"287":1,"310":1,"354":1,"446":1,"450":1}}],["сумме",{"2":{"195":1}}],["суммарный",{"2":{"247":1}}],["сумма",{"2":{"195":1,"200":1}}],["сумму",{"2":{"195":1}}],["существенные",{"2":{"482":1}}],["существенный",{"2":{"293":1,"410":1}}],["существенное",{"2":{"340":1}}],["существенно",{"2":{"325":1}}],["существовало",{"2":{"466":1}}],["существовать",{"2":{"291":1,"300":1,"453":1,"466":1}}],["существование",{"2":{"247":1}}],["существовавшие",{"2":{"136":1}}],["существует",{"2":{"130":1,"133":2,"142":3,"150":1,"151":1,"152":1,"154":1,"158":1,"182":1,"184":1,"211":1,"218":1,"221":1,"222":2,"223":1,"226":2,"247":1,"249":1,"257":1,"264":1,"277":1,"278":1,"287":1,"295":1,"299":2,"302":1,"304":2,"315":1,"320":1,"325":1,"331":1,"332":1,"344":1,"356":1,"363":1,"371":3,"374":2,"377":3,"418":3,"442":1,"453":1,"456":1,"541":1}}],["существующей",{"2":{"535":1}}],["существующего",{"2":{"491":1}}],["существующем",{"2":{"451":1}}],["существующих",{"2":{"12":1,"243":1}}],["существующие",{"0":{"10":1},"2":{"311":1}}],["существуют",{"2":{"68":1,"138":1,"142":1,"154":1,"175":1,"189":2,"213":1,"222":2,"234":1,"247":1,"257":1,"302":1,"323":1,"325":1,"374":1,"377":2,"418":1,"453":1,"454":1,"470":1,"472":1,"482":1}}],["сущность",{"2":{"318":2,"335":2,"450":1}}],["сущностей",{"2":{"16":1,"68":1,"96":1,"430":1,"448":1}}],["сущности",{"0":{"46":1},"2":{"16":1,"20":1,"46":1,"92":1,"318":2,"323":1,"335":1,"371":1,"411":1,"430":1,"448":1,"482":1}}],["сущностями",{"2":{"3":1,"68":2}}],["сабмодулями",{"2":{"431":1}}],["сабхедер",{"2":{"29":1}}],["сахара",{"2":{"415":1}}],["санитизации",{"2":{"218":1}}],["сайд",{"2":{"63":1}}],["сайдбара",{"2":{"582":1}}],["сайдбаром",{"2":{"580":1}}],["сайдбаре",{"2":{"108":1}}],["сайдбар",{"2":{"30":1,"33":2,"35":1,"104":1,"580":1,"582":1}}],["сайтом",{"2":{"201":1,"491":1,"501":1}}],["сайтов",{"2":{"142":3,"191":1,"352":1,"354":1,"492":1}}],["сайту",{"2":{"123":1,"142":1,"278":1,"355":1,"377":1,"425":2}}],["сайте",{"2":{"51":1,"56":1,"123":1,"124":1,"148":1,"181":1,"186":1,"203":2,"212":2,"213":2,"258":1,"334":1,"371":1,"385":1,"387":1,"417":1,"440":1,"446":1,"450":1,"491":1,"492":1,"508":1,"570":1}}],["сайт",{"0":{"75":1},"2":{"26":1,"75":1,"121":2,"123":1,"152":1,"186":1,"198":1,"203":1,"208":5,"209":6,"210":2,"213":2,"215":1,"331":1,"354":3,"371":1,"401":1,"424":1,"425":4,"431":1,"464":2,"475":1,"483":1,"491":2,"492":2,"541":1,"561":1,"562":1}}],["сайты",{"0":{"23":1},"2":{"23":1,"124":1,"175":1,"329":1,"418":1}}],["сайтами",{"2":{"371":1,"492":1}}],["сайтах",{"2":{"88":1,"107":1,"184":1,"186":1,"203":1,"288":1}}],["сайта",{"0":{"25":1},"2":{"9":1,"25":2,"26":1,"27":1,"39":1,"123":4,"139":1,"141":2,"148":1,"153":1,"155":1,"160":1,"161":1,"175":1,"182":1,"184":1,"185":1,"188":1,"189":1,"191":1,"203":1,"208":1,"212":2,"213":1,"371":1,"424":2,"431":1,"446":1,"448":1,"455":1,"468":1,"479":1,"482":1,"483":1,"492":3,"540":1,"542":2,"561":1,"570":2}}],["сама",{"2":{"166":1,"176":1,"274":1,"451":1}}],["самая",{"2":{"138":1,"331":1,"431":1,"449":1,"469":1}}],["самых",{"2":{"178":1,"264":1,"300":1,"378":1}}],["самыми",{"2":{"278":1}}],["самым",{"2":{"176":1,"189":1,"193":1,"222":1,"225":1,"232":1,"450":1,"460":1,"468":1,"474":1,"492":1}}],["самые",{"2":{"162":1,"326":1,"341":1,"440":1,"482":1}}],["самый",{"2":{"17":1,"23":1,"32":1,"123":1,"252":1,"286":1,"300":1,"303":1,"315":1,"326":1,"359":1,"366":1,"370":1,"372":1,"407":1,"424":1,"479":1,"491":1}}],["сами",{"2":{"145":1,"155":1,"293":1,"425":1,"431":1,"440":1,"491":1,"549":1}}],["самим",{"2":{"11":1,"104":1,"492":1}}],["самую",{"2":{"25":1}}],["самоучитель",{"2":{"491":1}}],["самоуправляемые",{"2":{"377":1}}],["самописный",{"2":{"490":1}}],["само",{"2":{"466":1}}],["самообновляющийся",{"2":{"209":1}}],["самостоятельные",{"2":{"454":1}}],["самостоятельный",{"2":{"124":1,"258":1}}],["самостоятельной",{"2":{"457":1}}],["самостоятельно",{"2":{"141":1,"145":1,"288":1,"375":1,"425":2}}],["самой",{"2":{"34":1,"56":1,"117":1,"209":1,"467":1,"479":1,"492":1}}],["самого",{"2":{"3":1,"158":1,"191":1,"210":1,"235":1,"246":2,"257":1,"359":1,"424":1,"428":1,"448":1,"462":1,"541":1}}],["самому",{"2":{"4":1,"26":1,"293":1,"309":1,"428":1,"448":1,"482":1,"490":1}}],["самом",{"2":{"3":1,"83":1,"141":1,"145":1,"151":1,"152":1,"222":1,"240":1,"294":1,"331":1,"354":1,"365":1,"369":1,"405":1,"431":1,"446":1}}],["самое",{"2":{"2":1,"3":1,"33":1,"35":1,"51":1,"88":1,"106":1,"114":1,"123":2,"157":1,"160":1,"210":1,"217":1,"218":1,"255":1,"270":1,"310":2,"319":1,"371":1,"431":1,"441":1,"482":1,"485":1}}],["сам",{"2":{"3":1,"112":1,"121":1,"222":1,"270":1,"304":1,"314":1,"333":1,"382":1,"431":1,"446":1,"448":1,"450":2,"453":1,"486":1}}],["сенсорных",{"2":{"553":1}}],["сенсорное",{"2":{"158":1,"175":1}}],["сеансов",{"2":{"418":1}}],["сессий",{"2":{"422":1}}],["сессионного",{"2":{"421":1}}],["сессионное",{"2":{"421":1}}],["сессионные",{"0":{"418":1}}],["сессиях",{"2":{"178":1}}],["сессиями",{"0":{"113":1},"2":{"113":1}}],["сестры",{"2":{"247":1}}],["секретного",{"2":{"371":1}}],["секретный",{"2":{"371":4}}],["секундах",{"2":{"375":1}}],["секунды",{"2":{"333":1,"340":2}}],["секунду",{"2":{"331":2}}],["секунд",{"2":{"175":1,"375":1,"376":1,"441":1}}],["секцию",{"2":{"216":1,"421":1}}],["секцией",{"2":{"191":1}}],["секций",{"2":{"175":1}}],["секции",{"2":{"161":1,"186":1,"189":2,"211":2,"216":2,"217":4,"225":1,"226":1,"251":1,"272":1,"277":1,"371":1,"456":1}}],["секция",{"0":{"191":1},"2":{"4":1,"11":1,"210":1,"331":1,"371":2,"456":1}}],["сегодняшний",{"2":{"155":1,"465":1,"467":1}}],["сегодня",{"2":{"155":1,"166":1,"169":1,"184":2,"221":2,"278":1,"288":1,"344":1,"354":2,"378":1,"466":1}}],["сегментировать",{"2":{"378":1}}],["сегмент",{"2":{"247":1}}],["сегмента",{"2":{"217":1}}],["сегментах",{"2":{"143":1}}],["сегментом",{"2":{"142":1}}],["сегменты",{"2":{"142":1,"217":1}}],["сеттерами",{"2":{"450":1}}],["сетью",{"2":{"377":1}}],["сеть",{"2":{"278":4,"377":2}}],["сетям",{"2":{"377":2}}],["сетями",{"2":{"222":1}}],["сетях",{"2":{"197":1,"272":1}}],["сетке",{"2":{"184":1}}],["сетей",{"0":{"191":1},"2":{"142":1,"191":2}}],["сетевую",{"2":{"483":1}}],["сетевое",{"2":{"329":1}}],["сетевой",{"2":{"122":1,"324":1,"344":2,"349":1,"370":1}}],["сетевым",{"2":{"350":1}}],["сетевыми",{"2":{"270":1}}],["сетевые",{"2":{"326":1,"329":1,"344":1,"349":1,"453":1,"459":1}}],["сетевых",{"2":{"142":1,"278":1,"329":1,"344":2,"345":1,"348":1,"354":1,"369":3,"454":1}}],["сетапа",{"2":{"122":1}}],["сети",{"2":{"11":1,"118":1,"142":5,"204":1,"223":1,"278":4,"331":1,"340":1,"344":1,"354":1,"377":6,"475":1}}],["семантические",{"2":{"488":1}}],["семантически",{"2":{"105":1}}],["селекторы",{"2":{"223":1}}],["селектору",{"2":{"89":1}}],["селекторов",{"2":{"89":1}}],["сейчас",{"2":{"40":1,"89":1,"96":1,"167":1,"224":1,"241":1,"320":1,"342":1,"360":1,"374":1,"375":1,"425":1,"474":1,"491":1}}],["себя",{"0":{"141":1,"388":1},"1":{"142":1,"389":1,"390":1,"391":1,"392":1,"393":1,"394":1,"395":1,"396":1,"397":1,"398":1,"399":1,"400":1},"2":{"39":1,"69":2,"70":1,"74":1,"77":1,"139":1,"145":1,"151":1,"157":2,"171":2,"173":1,"174":1,"214":1,"221":2,"222":1,"224":1,"230":1,"231":1,"233":1,"257":1,"268":1,"278":1,"290":1,"291":1,"293":1,"314":1,"318":1,"335":1,"344":1,"354":1,"355":1,"359":1,"419":1,"437":1,"450":1,"453":2,"471":1,"475":2,"476":1,"481":1,"482":2,"491":1,"541":1,"545":1,"579":1}}],["себе",{"2":{"26":2,"145":1,"155":1,"176":1,"208":1,"224":1,"288":1,"294":1,"354":1,"431":1,"448":1,"451":1,"466":1,"482":1}}],["серию",{"2":{"455":1}}],["серия",{"2":{"371":1}}],["сериализуя",{"2":{"343":1}}],["сериализуемой",{"2":{"342":1}}],["сериализуемыми",{"2":{"331":1}}],["сериализуемые",{"2":{"331":1,"335":1}}],["сериализовать",{"2":{"418":1}}],["сериализованном",{"2":{"531":1}}],["сериализован",{"2":{"332":1}}],["сериализованы",{"2":{"316":1}}],["сериализовываться",{"2":{"317":1}}],["серьезная",{"2":{"418":1}}],["серьезной",{"2":{"331":1}}],["серьезных",{"2":{"10":1,"96":1,"118":1,"166":1}}],["серебряной",{"2":{"249":1,"270":1}}],["середине",{"2":{"29":1}}],["серая",{"2":{"222":1}}],["серой",{"2":{"170":1}}],["сертификация",{"2":{"491":1}}],["сертификации",{"2":{"152":1,"491":1}}],["сертификатов",{"2":{"152":1}}],["сертификат",{"2":{"152":5,"271":1,"425":3}}],["сертификата",{"2":{"141":1,"152":7,"153":1}}],["сертификаты",{"2":{"4":1,"425":1}}],["сертифицированных",{"2":{"152":1}}],["сертифицирующим",{"2":{"152":1}}],["сердечка",{"2":{"111":1,"112":1}}],["сервиcа",{"2":{"124":1}}],["сервисе",{"2":{"340":1,"369":1,"375":1,"457":1}}],["сервисом",{"2":{"339":1,"371":1}}],["сервисов",{"2":{"39":1,"124":3,"151":1,"197":2,"339":2,"345":1,"350":1,"354":1,"369":1,"371":1,"374":1,"475":1}}],["сервису",{"2":{"335":1}}],["сервисный",{"2":{"545":1}}],["сервисных",{"2":{"258":1,"264":1}}],["сервисного",{"2":{"278":3}}],["сервисах",{"2":{"195":1,"333":1,"454":1}}],["сервиса",{"2":{"124":2,"126":1,"255":2,"264":2,"278":1,"279":2,"337":1,"338":1,"342":1,"370":1,"408":1,"419":1,"456":2,"457":1,"476":1,"492":1}}],["сервисами",{"2":{"142":1,"294":1,"335":1,"338":1,"417":1,"422":1,"456":1,"465":1,"542":1}}],["сервисам",{"2":{"41":1,"331":1,"335":2,"350":1}}],["сервисы",{"0":{"40":1},"2":{"123":1,"124":1,"145":1,"240":1,"329":1,"335":1,"369":1,"431":1,"441":1,"450":1,"454":1,"475":2,"477":1,"491":1,"579":1}}],["сервис",{"0":{"122":1},"2":{"10":1,"39":1,"40":2,"41":1,"59":1,"83":1,"93":1,"122":1,"124":1,"255":1,"278":4,"311":1,"312":1,"338":1,"340":2,"345":2,"347":1,"375":2,"377":1,"408":2,"411":1,"455":2,"456":1,"463":1,"482":1,"491":1,"501":1,"579":1}}],["серверу",{"2":{"152":2,"349":2,"354":1,"371":3,"374":1}}],["серверов",{"2":{"145":1,"148":1,"150":2}}],["сервером",{"2":{"11":1,"124":1,"145":1,"152":1,"210":1,"291":3,"319":1,"323":1,"335":1,"344":1,"349":2,"354":1,"369":1,"370":1,"372":2,"377":1,"457":1,"492":1}}],["серверы",{"0":{"142":1,"150":1},"1":{"144":1},"2":{"142":2,"154":1,"377":1}}],["серверами",{"2":{"341":1,"349":1}}],["серверам",{"2":{"292":1}}],["серверах",{"2":{"152":1,"208":1,"377":1}}],["сервера",{"0":{"145":1,"146":1,"148":1},"1":{"146":1,"147":2,"148":1,"149":2,"150":1},"2":{"125":1,"139":2,"141":1,"142":2,"143":1,"145":3,"148":4,"152":2,"209":1,"270":2,"291":1,"318":1,"324":1,"347":1,"348":1,"349":1,"359":1,"370":2,"374":1,"376":2,"437":1,"446":1,"465":1,"475":1,"492":6,"570":1}}],["сервере",{"2":{"40":1,"71":1,"124":1,"125":2,"142":1,"145":2,"151":3,"152":1,"271":1,"278":1,"317":1,"344":2,"354":2,"370":3,"371":1,"372":1,"398":1,"401":1,"424":2,"425":1,"492":1}}],["серверному",{"2":{"492":1}}],["серверного",{"2":{"349":1,"359":1}}],["серверной",{"2":{"145":1,"459":1}}],["серверный",{"2":{"370":1}}],["серверным",{"2":{"149":1}}],["серверных",{"2":{"126":1}}],["серверные",{"2":{"40":1,"270":1,"354":1}}],["серверная",{"0":{"6":1}}],["сервер",{"0":{"151":1,"348":1},"1":{"349":1},"2":{"39":1,"56":1,"122":1,"124":2,"125":2,"126":2,"142":1,"143":2,"144":1,"145":9,"146":1,"148":1,"150":1,"151":3,"153":2,"154":1,"209":3,"210":1,"212":1,"217":1,"329":2,"344":2,"346":2,"347":3,"348":1,"349":4,"354":1,"369":1,"370":1,"371":2,"373":2,"374":1,"375":2,"376":3,"418":1,"424":2,"425":1,"441":1,"455":1,"465":2,"476":1,"491":1,"492":3}}],["сплоченность",{"2":{"431":1,"448":1}}],["спланировать",{"2":{"267":1}}],["спуститься",{"2":{"363":1}}],["спальни",{"2":{"492":1}}],["спать",{"2":{"492":1}}],["спагетти",{"2":{"293":2}}],["спам",{"0":{"204":1}}],["спиннера",{"2":{"176":3}}],["спиннер",{"2":{"176":1}}],["спиннеры",{"0":{"176":1},"1":{"177":1},"2":{"176":1}}],["списание",{"2":{"196":1}}],["список",{"0":{"285":1,"295":1},"1":{"286":1,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"296":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"326":1},"2":{"31":1,"44":2,"113":2,"125":2,"127":3,"137":1,"145":1,"152":1,"168":1,"169":1,"171":3,"175":1,"178":2,"179":1,"182":1,"187":2,"204":1,"214":1,"215":1,"217":7,"218":2,"226":1,"233":1,"243":1,"247":5,"248":1,"265":1,"272":1,"280":1,"283":1,"294":1,"295":1,"299":1,"354":1,"357":2,"359":1,"362":1,"363":2,"368":3,"417":1,"418":1,"457":1,"461":1,"469":1}}],["списков",{"2":{"178":1,"187":1,"230":1,"357":1,"570":1}}],["списком",{"2":{"11":1,"41":1,"142":1,"218":1,"264":2,"357":1,"362":1}}],["списках",{"2":{"171":1,"215":1}}],["спискам",{"2":{"162":1}}],["списка",{"2":{"160":1,"170":1,"171":1,"178":2,"179":3,"184":1,"207":1,"217":4,"234":1,"247":1,"264":4,"268":1,"331":1,"342":1,"357":1}}],["списке",{"2":{"3":1,"179":1,"184":1,"264":1,"309":1,"323":1,"342":1}}],["спросить",{"2":{"362":1}}],["спроектированного",{"2":{"350":1}}],["спровоцировать",{"2":{"175":1}}],["спрайтовых",{"2":{"213":1}}],["справедливо",{"2":{"418":1}}],["справочную",{"2":{"491":1}}],["справочник",{"2":{"327":1,"491":1}}],["справочником",{"2":{"127":1}}],["справочного",{"2":{"312":1}}],["справочный",{"0":{"295":1},"1":{"296":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"326":1}}],["справку",{"2":{"214":1}}],["справки",{"2":{"172":1}}],["справиться",{"2":{"155":1,"176":1,"368":1}}],["справа",{"2":{"29":1,"107":1,"142":1,"170":2,"174":2}}],["спрятана",{"2":{"122":1}}],["спектру",{"2":{"413":1}}],["спектр",{"2":{"211":1,"305":1}}],["сперва",{"2":{"65":1,"98":1,"439":1,"450":1,"491":1,"492":1}}],["специфичных",{"2":{"541":1}}],["специфичной",{"2":{"151":1}}],["специфичное",{"2":{"126":1}}],["специфической",{"2":{"376":1}}],["специфического",{"2":{"251":1}}],["специфические",{"2":{"214":1,"345":1}}],["спецификаций",{"2":{"492":1}}],["спецификацию",{"2":{"275":1,"546":1}}],["спецификациях",{"2":{"418":1}}],["спецификация",{"2":{"272":1,"491":1,"531":1}}],["спецификациями",{"2":{"350":1}}],["спецификациям",{"2":{"211":1}}],["спецификации",{"2":{"69":1,"70":1,"222":1,"272":3,"369":1}}],["специализированном",{"2":{"155":1}}],["специализированным",{"2":{"125":1,"155":1}}],["специальную",{"2":{"227":1}}],["специальным",{"2":{"259":1}}],["специальные",{"0":{"256":1},"1":{"257":1},"2":{"142":1,"227":1,"243":1,"257":1,"377":1}}],["специальный",{"0":{"458":1,"459":1},"2":{"136":1,"146":1,"234":1,"258":1,"259":2,"326":1,"471":1}}],["специальных",{"2":{"125":1,"255":1,"266":1,"270":1,"453":1}}],["специальная",{"2":{"132":1,"133":1,"472":1}}],["специальной",{"2":{"359":2,"412":1}}],["специально",{"2":{"176":1,"218":1,"245":1,"270":1,"280":1,"354":1,"474":1}}],["специального",{"2":{"126":1,"338":1}}],["специальному",{"2":{"13":1,"254":1}}],["спецпредложений",{"2":{"4":1}}],["спорным",{"2":{"541":1}}],["спонсировать",{"2":{"417":1}}],["спокойно",{"2":{"122":1}}],["способе",{"2":{"226":1,"535":1,"537":1}}],["способами",{"2":{"243":1,"267":1,"317":1}}],["способа",{"2":{"217":1,"405":1,"492":1}}],["способов",{"2":{"213":1,"247":1,"264":1,"302":1,"307":1,"323":1,"363":1,"370":1,"377":1}}],["способом",{"2":{"175":1,"178":1,"218":1,"223":1,"225":1,"292":1,"307":1,"326":2,"405":2,"412":1,"461":1,"464":1,"468":1}}],["способный",{"2":{"145":1}}],["способности",{"0":{"26":1}}],["способы",{"2":{"69":1,"189":1,"302":1,"325":1,"370":1,"470":1}}],["способ",{"0":{"128":1},"2":{"56":1,"123":1,"127":1,"128":1,"226":3,"257":1,"267":1,"273":1,"278":1,"303":1,"313":1,"315":1,"325":1,"331":1,"333":1,"342":1,"361":1,"362":1,"363":1,"370":2,"374":1,"405":1,"407":1,"410":1,"414":1,"424":2,"430":1,"440":1,"448":1,"464":1,"473":1,"476":1,"492":1}}],["спойлер",{"2":{"4":1}}],["симулированный",{"2":{"459":1}}],["симуляции",{"2":{"451":1}}],["символов",{"2":{"213":1,"418":1}}],["символом",{"2":{"171":1}}],["символ",{"2":{"158":1,"182":1,"418":1}}],["сигнатура",{"2":{"345":1}}],["сигнал",{"2":{"457":1}}],["сигнализирует",{"2":{"326":1}}],["сигналы",{"2":{"253":1}}],["сигнальные",{"2":{"247":1}}],["сиблингу",{"2":{"247":1}}],["ситуацией",{"2":{"450":1}}],["ситуаций",{"2":{"359":1,"370":1}}],["ситуациях",{"2":{"483":1}}],["ситуация",{"2":{"259":1,"362":1,"482":1}}],["ситуациями",{"2":{"176":1}}],["ситуации",{"2":{"165":1,"222":1,"412":1,"466":1}}],["ситуацию",{"2":{"155":1,"255":1}}],["сих",{"2":{"156":1,"186":1,"207":1,"224":1,"233":1,"252":1,"323":1,"354":1,"363":1,"365":2,"412":1}}],["синтез",{"2":{"450":1}}],["синтаксического",{"2":{"415":1}}],["синтаксисов",{"2":{"253":1}}],["синтаксисом",{"2":{"56":1,"226":1,"234":1,"252":1,"326":2,"462":1}}],["синтаксису",{"2":{"252":1,"326":1}}],["синтаксисы",{"2":{"225":1}}],["синтаксис",{"2":{"133":1,"225":2,"226":6,"252":3,"254":2,"255":1,"257":3,"326":3,"334":2,"417":1,"457":1,"459":1,"538":1}}],["синтаксисе",{"2":{"131":1,"215":1,"253":2,"321":1,"415":1}}],["синтаксиса",{"2":{"129":1,"130":1,"138":1,"221":1,"225":1,"252":1,"257":2,"326":1,"414":1}}],["синдицированных",{"2":{"374":1}}],["синхронного",{"2":{"451":1}}],["синхронность",{"2":{"325":1}}],["синхронной",{"2":{"324":3,"325":1}}],["синхронный",{"0":{"325":1}}],["синхронные",{"2":{"324":1,"454":1}}],["синхронизирует",{"2":{"467":2}}],["синхронизируется",{"2":{"421":1}}],["синхронизированном",{"2":{"475":1}}],["синхронизирован",{"2":{"420":2}}],["синхронизировано",{"2":{"417":1,"421":1}}],["синхронизироваться",{"2":{"475":1}}],["синхронизировать",{"2":{"320":1,"412":1,"419":1,"475":2}}],["синхронизации",{"2":{"362":1}}],["синхронизация",{"2":{"344":1}}],["синхронизацию",{"2":{"151":1,"232":1,"341":1,"475":1}}],["синхронизацией",{"2":{"96":1}}],["синглтоном",{"2":{"338":1}}],["синглтоны",{"2":{"304":1}}],["синглтонами",{"2":{"303":1}}],["синглтона",{"2":{"302":1,"308":1,"310":1}}],["синглтон",{"2":{"211":1,"264":1,"283":1,"294":1,"300":1,"304":2,"311":2,"315":1,"362":1,"409":1,"413":1,"419":1,"420":1,"450":1}}],["синоним",{"2":{"142":1}}],["силами",{"2":{"292":1}}],["сила",{"2":{"259":1,"369":1}}],["сильный",{"2":{"257":1}}],["сильные",{"2":{"253":1}}],["сильное",{"2":{"439":1}}],["сильно",{"2":{"3":1,"23":1,"26":1,"29":1,"43":1,"50":1,"80":1,"83":1,"88":1,"121":1,"126":1,"141":1,"142":1,"226":2,"290":1,"440":1,"446":1,"461":1,"479":1,"482":2,"485":1,"490":1,"491":2,"492":1,"570":1,"589":1}}],["силы",{"2":{"96":1}}],["силу",{"2":{"12":1}}],["системные",{"2":{"469":1}}],["системным",{"2":{"174":1}}],["системой",{"2":{"270":2,"275":1,"323":1,"397":1,"418":1,"468":1}}],["системе",{"2":{"69":1,"148":1,"270":2,"272":1,"384":1,"421":1,"451":1,"467":1,"471":2,"482":1}}],["систему",{"2":{"3":1,"123":1,"145":1,"183":1,"286":2,"288":1,"292":1,"331":1,"373":2,"374":1,"375":1,"405":1,"418":1,"451":1,"468":1,"469":1}}],["систематическое",{"2":{"270":1}}],["системах",{"0":{"468":1,"469":1,"470":1},"2":{"208":1,"270":1,"277":1,"469":2,"470":1}}],["система",{"2":{"2":1,"69":1,"77":1,"123":2,"145":1,"157":1,"176":2,"199":1,"215":1,"270":1,"286":2,"291":1,"292":1,"323":1,"332":1,"412":1,"545":1}}],["системами",{"2":{"2":1,"268":1,"270":2,"354":1,"482":1}}],["системы",{"0":{"451":1},"1":{"452":1,"453":1,"454":1,"455":1,"456":1,"457":1,"458":1,"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1,"467":1,"468":1,"469":1,"470":1,"471":1,"472":1,"473":1,"474":1,"475":1,"476":1,"477":1,"478":1},"2":{"2":1,"12":1,"41":2,"69":3,"122":1,"123":2,"152":1,"157":1,"170":1,"255":1,"260":1,"270":2,"286":1,"295":1,"318":1,"349":1,"370":1,"375":1,"451":1,"453":1,"468":1,"482":1,"483":1,"490":1}}],["систем",{"2":{"2":1,"350":1,"382":1,"466":1,"482":1}}],["слышат",{"2":{"475":1}}],["слышали",{"2":{"189":1}}],["слияний",{"2":{"474":1,"475":1}}],["слияния",{"2":{"474":1,"476":1}}],["слияниями",{"0":{"473":1}}],["слиянии",{"0":{"474":1},"2":{"474":1}}],["слияние",{"2":{"467":1,"473":1,"474":4}}],["слишком",{"2":{"165":1,"166":1,"167":1,"214":1,"226":1,"288":1,"292":1,"331":3,"377":1}}],["сладко",{"2":{"354":1}}],["слайдеров",{"2":{"175":1}}],["слайдеры",{"0":{"175":1},"2":{"175":3}}],["слайдер",{"0":{"84":1,"444":1},"1":{"85":1,"86":1},"2":{"85":1}}],["слабо",{"2":{"288":1,"431":1,"449":1}}],["слабом",{"2":{"123":1}}],["слабосвязные",{"2":{"41":1}}],["слабосвязанными",{"2":{"7":1}}],["слабосвязанные",{"2":{"3":1,"4":1}}],["слабую",{"2":{"34":1}}],["слабая",{"0":{"34":1},"2":{"431":1,"449":1}}],["слушателей",{"2":{"418":1,"482":1}}],["слушатель",{"2":{"336":1}}],["слушателями",{"2":{"314":1}}],["слушателя",{"2":{"258":1,"277":2}}],["служат",{"2":{"482":1}}],["служебный",{"2":{"455":1}}],["службе",{"2":{"349":1,"371":1}}],["службу",{"2":{"196":1,"343":1,"344":1,"376":1}}],["службы",{"2":{"143":1,"335":1}}],["служб",{"2":{"142":1,"278":1}}],["служит",{"2":{"125":1,"349":1}}],["служить",{"2":{"73":1,"454":1}}],["случаи",{"2":{"256":1,"257":1,"288":1,"290":1,"345":1,"410":1}}],["случаям",{"2":{"368":1}}],["случаями",{"2":{"214":1,"368":1}}],["случая",{"2":{"223":1,"249":1,"251":1,"293":1,"331":1,"410":1,"453":2,"457":1}}],["случаях",{"2":{"4":1,"131":1,"155":1,"157":1,"169":1,"171":1,"176":1,"186":1,"195":1,"203":1,"209":1,"211":1,"234":1,"249":1,"273":1,"302":1,"304":1,"324":1,"331":1,"351":1,"354":1,"371":1,"377":1,"405":1,"433":1,"450":2,"458":1,"463":1,"582":1}}],["случалось",{"2":{"96":1}}],["случается",{"2":{"371":1}}],["случаен",{"2":{"312":1}}],["случаев",{"2":{"123":1,"211":1,"217":2,"243":1,"270":1,"279":1,"289":1,"315":3,"324":1,"325":2,"326":1,"433":1,"442":1,"446":2,"454":1,"455":1,"492":2,"570":1}}],["случае",{"2":{"12":1,"23":1,"41":1,"50":1,"88":1,"89":1,"123":3,"124":1,"125":1,"141":1,"143":1,"145":2,"148":2,"151":1,"152":2,"158":1,"163":1,"167":1,"171":1,"172":1,"178":2,"191":1,"198":1,"200":1,"211":1,"217":3,"218":1,"222":2,"223":1,"225":1,"226":1,"240":1,"252":1,"253":1,"254":2,"257":1,"258":1,"264":2,"277":1,"278":1,"279":1,"286":1,"293":1,"299":1,"308":1,"310":2,"314":1,"316":1,"317":1,"318":1,"320":1,"326":5,"331":1,"332":1,"335":2,"340":1,"343":1,"349":1,"355":1,"362":3,"363":2,"365":2,"369":2,"370":3,"375":1,"376":2,"377":3,"408":1,"410":1,"411":1,"412":1,"414":1,"415":1,"418":2,"424":1,"425":1,"431":1,"440":1,"446":2,"450":1,"453":1,"454":2,"456":1,"457":4,"459":1,"461":2,"462":2,"464":1,"469":1,"472":1,"474":1,"482":1,"483":1,"508":1,"531":1}}],["случайно",{"2":{"190":1}}],["случай",{"0":{"458":1,"459":1},"2":{"9":1,"111":1,"259":1,"424":1,"457":1,"459":1,"475":1,"491":1}}],["слои",{"2":{"430":1,"448":1}}],["слою",{"2":{"335":1}}],["сложен",{"2":{"323":2}}],["сложнее",{"2":{"286":1,"292":1,"326":1,"453":2}}],["сложную",{"2":{"194":1,"292":1}}],["сложны",{"2":{"327":1}}],["сложный",{"2":{"319":1,"450":1}}],["сложные",{"2":{"165":1,"232":1,"253":1,"255":1,"354":1,"365":1,"405":1,"428":1,"448":1}}],["сложных",{"2":{"131":1,"169":1,"186":1,"221":1,"253":1,"278":1,"318":1,"329":1,"363":1,"382":1,"403":1,"431":1,"448":1,"490":1}}],["сложным",{"2":{"3":1,"145":1,"323":1,"418":1,"420":1,"428":1,"431":2,"448":3,"453":1,"492":1}}],["сложными",{"2":{"2":1,"131":1,"482":1}}],["сложная",{"2":{"126":1,"431":1,"448":1}}],["сложно",{"2":{"341":1,"491":1}}],["сложному",{"2":{"323":1,"428":1,"448":1,"461":1}}],["сложное",{"2":{"287":1}}],["сложностей",{"2":{"350":1,"427":1,"448":1}}],["сложностям",{"2":{"287":1}}],["сложность",{"2":{"122":1,"186":2,"292":1,"323":2,"335":1,"403":1,"431":2,"448":2,"449":1,"466":1}}],["сложности",{"2":{"2":1,"165":1,"221":1,"226":1,"270":1,"286":1,"323":1,"354":1,"376":1,"431":1,"448":1,"451":2,"467":1,"482":2,"502":1}}],["сложной",{"2":{"41":1,"278":1,"332":1,"355":1}}],["сложного",{"0":{"2":1}}],["слоев",{"2":{"320":1,"331":1}}],["слоте",{"2":{"257":1}}],["слотом",{"2":{"257":2}}],["слотов",{"2":{"257":4,"262":1}}],["слотам",{"2":{"461":1}}],["слотами",{"2":{"257":1}}],["слота",{"2":{"257":3,"432":1}}],["слоту",{"2":{"257":1}}],["слот",{"2":{"257":4,"263":1}}],["слоты",{"0":{"257":3},"2":{"257":5}}],["сломает",{"2":{"218":1}}],["сломать",{"2":{"123":1}}],["слово",{"2":{"223":1,"226":3,"238":1,"240":1,"318":1,"326":1,"333":1,"414":1,"500":1}}],["словом",{"2":{"138":1,"326":1}}],["слов",{"2":{"194":1,"216":1,"475":1}}],["словарь",{"2":{"338":1}}],["словаря",{"2":{"311":1,"315":1}}],["слова",{"2":{"172":1,"216":1}}],["словами",{"2":{"96":1,"401":1,"450":1,"492":1,"541":1}}],["слой",{"2":{"59":1,"314":1,"490":1,"545":1,"576":1}}],["слоям",{"2":{"431":1,"448":1}}],["слоями",{"2":{"335":1,"431":1,"448":1}}],["слоя",{"2":{"40":1,"335":3}}],["слежение",{"2":{"515":1}}],["следам",{"2":{"466":1}}],["следит",{"2":{"482":1}}],["следить",{"2":{"315":1,"362":1,"472":1,"482":1}}],["следите",{"0":{"161":1}}],["следовало",{"2":{"412":1,"415":1,"417":1}}],["следовательно",{"2":{"223":1}}],["следовать",{"2":{"212":1,"289":1,"359":1,"384":1}}],["следование",{"2":{"181":1}}],["следствие",{"2":{"449":1}}],["следствием",{"2":{"164":1}}],["следствия",{"2":{"165":1}}],["следуйте",{"2":{"261":1,"404":1}}],["следуя",{"2":{"211":2,"263":2,"275":1,"286":1,"302":1,"337":1,"357":1,"375":1,"468":1}}],["следуют",{"2":{"158":1,"193":1,"254":1,"405":1}}],["следующую",{"2":{"144":1,"209":3,"217":1,"222":1,"325":1,"344":1,"348":1,"356":1,"455":1,"457":1,"460":1,"464":1,"465":1,"471":2,"491":1}}],["следующем",{"2":{"209":2,"215":1,"217":1,"233":1,"254":2,"255":1,"263":1,"278":1,"373":1,"454":1,"463":1}}],["следующему",{"2":{"142":1,"160":1,"246":1,"312":1,"323":1,"365":1,"407":1}}],["следующего",{"0":{"293":1},"1":{"296":1,"297":1,"298":1,"299":1},"2":{"161":1,"189":1,"211":1,"217":1,"254":1,"257":1,"263":1,"278":1,"283":1,"325":1,"365":1,"369":1,"373":1,"453":1,"455":1,"459":1}}],["следующее",{"2":{"100":1,"130":1,"141":1,"155":1,"156":1,"208":2,"209":1,"213":1,"215":1,"216":1,"217":1,"233":1,"243":1,"244":1,"257":2,"263":2,"264":1,"268":1,"269":1,"278":1,"310":1,"330":1,"333":1,"352":1,"353":1,"355":1,"370":1,"371":1,"384":1,"404":1,"418":2,"452":1,"454":1,"463":2,"471":3,"474":3,"483":1}}],["следующей",{"2":{"98":1,"151":1,"218":1,"219":1,"241":1,"251":1,"266":1,"279":1,"315":1,"327":1,"335":1,"350":1,"354":1,"362":1,"369":1,"371":1,"377":1,"378":1,"408":1,"413":1,"422":1,"456":1,"460":1,"466":1,"471":1,"472":1,"475":1}}],["следующий",{"2":{"214":1,"217":1,"218":1,"233":1,"254":1,"257":1,"264":1,"290":1,"331":1,"338":1,"340":1,"368":1,"460":1,"461":1}}],["следующим",{"2":{"139":1,"142":2,"143":1,"165":1,"178":2,"191":1,"209":1,"212":3,"214":2,"215":1,"216":2,"217":1,"224":1,"231":1,"246":2,"248":1,"255":2,"257":1,"262":1,"263":3,"264":1,"268":1,"270":1,"277":1,"279":1,"307":1,"310":1,"312":1,"318":1,"320":1,"323":1,"325":1,"326":1,"332":2,"341":1,"345":1,"346":1,"348":1,"357":1,"358":1,"359":1,"363":1,"365":2,"372":1,"375":1,"377":1,"408":1,"409":1,"456":1,"460":1,"464":1,"465":2,"469":1,"471":1,"474":1,"545":1}}],["следующими",{"2":{"121":1,"167":1,"217":1,"242":1,"278":1,"315":1,"319":1,"414":1}}],["следующие",{"2":{"68":1,"133":1,"142":1,"163":1,"188":1,"192":1,"207":1,"209":1,"212":1,"217":2,"221":1,"225":1,"226":1,"245":1,"258":1,"260":1,"263":3,"267":1,"275":1,"277":1,"278":1,"280":1,"282":1,"303":1,"318":1,"320":1,"321":1,"324":1,"329":1,"332":1,"335":1,"341":1,"343":1,"356":2,"359":1,"361":1,"372":1,"379":1,"403":1,"412":1,"413":1,"415":1,"453":2,"455":1,"456":2,"457":1,"467":1,"469":1,"471":1,"472":1,"474":1,"475":1,"554":1}}],["следующих",{"2":{"67":1,"152":1,"222":1,"253":1,"294":1,"323":1,"359":1,"576":1}}],["следующая",{"2":{"17":1,"217":1,"343":1}}],["следует",{"2":{"127":1,"131":1,"138":1,"143":1,"147":1,"168":1,"170":1,"172":1,"181":1,"184":1,"186":1,"205":1,"206":1,"213":2,"222":1,"240":1,"246":1,"249":1,"258":1,"259":1,"264":2,"270":1,"275":1,"278":1,"279":1,"283":1,"288":1,"294":1,"301":1,"330":1,"331":1,"345":1,"354":1,"359":1,"362":1,"370":2,"377":1,"405":1,"450":1,"459":1,"465":1,"492":1}}],["слева",{"2":{"28":1,"29":1,"30":2,"33":1,"35":1,"108":1,"170":2,"191":1,"580":1}}],["студенты",{"2":{"384":1}}],["ступенькой",{"2":{"339":1}}],["стирают",{"2":{"270":1}}],["стимулировать",{"0":{"160":1}}],["стиль",{"2":{"216":1,"229":1,"230":1,"240":1,"490":1}}],["стилям",{"2":{"522":1}}],["стилями",{"2":{"215":1,"217":2,"277":1}}],["стиля",{"2":{"263":1,"501":1,"542":1}}],["стилях",{"2":{"20":1,"243":1}}],["стиле",{"2":{"566":1,"567":1}}],["стилем",{"2":{"169":1,"221":1}}],["стилей",{"2":{"89":1,"157":1,"160":1,"171":1,"210":2,"211":1,"212":2,"213":2,"215":1,"216":1,"217":1,"221":1,"225":2,"243":1,"274":1,"342":1,"361":1,"362":1}}],["стилизованной",{"2":{"490":1}}],["стилизовать",{"2":{"170":1}}],["стилизация",{"0":{"506":1}}],["стилизации",{"2":{"168":1,"176":1,"542":2}}],["стилизацию",{"2":{"107":1,"170":1,"482":1,"485":1}}],["стилизацией",{"2":{"25":1}}],["стили",{"2":{"85":1,"114":1,"203":1,"217":1,"225":2,"243":1,"257":1,"263":1,"289":1,"361":1,"430":1,"448":1,"490":4}}],["стилю",{"2":{"69":1,"161":1}}],["стоящих",{"2":{"541":1}}],["сторы",{"2":{"450":2}}],["стором",{"2":{"450":1}}],["сторов",{"2":{"414":1,"450":1}}],["сторону",{"2":{"429":1,"448":1}}],["стороной",{"2":{"371":1}}],["сторонами",{"2":{"371":1}}],["сторона",{"2":{"192":1,"196":1}}],["стороне",{"2":{"155":1,"338":1,"342":1,"451":1,"492":2,"589":1}}],["стороны",{"2":{"125":1,"166":1,"176":1,"222":1,"247":1,"283":1,"541":1}}],["стороннюю",{"2":{"538":1}}],["сторонняя",{"0":{"371":1},"2":{"484":1}}],["сторонние",{"2":{"210":2,"219":1,"220":1,"538":1,"589":1}}],["сторонних",{"0":{"485":1},"2":{"125":1,"126":1,"215":1,"323":1,"373":1,"377":1}}],["сторонний",{"2":{"123":1,"203":1}}],["сторонним",{"2":{"12":1,"77":1,"125":3,"197":1,"204":1}}],["стороннего",{"2":{"125":1,"492":1}}],["сторонней",{"2":{"96":1,"450":1}}],["стороннее",{"2":{"13":1}}],["сторон",{"2":{"9":1}}],["сторе",{"2":{"414":1,"420":1,"450":1}}],["стор",{"2":{"413":6,"414":1,"415":3,"416":1,"417":2,"450":4}}],["сторами",{"2":{"450":1}}],["сторам",{"2":{"417":1}}],["стора",{"0":{"413":1},"1":{"414":1,"415":1,"416":1,"417":1},"2":{"414":6,"417":1,"418":1,"420":1}}],["стола",{"2":{"476":1}}],["столбце",{"2":{"363":1}}],["столкнулась",{"2":{"467":1}}],["столкнуться",{"2":{"222":1,"318":1,"359":1}}],["столкнетесь",{"2":{"331":1}}],["столько",{"2":{"231":1,"365":1,"376":1,"418":1,"457":2}}],["столе",{"2":{"174":1,"273":1}}],["стоимость",{"2":{"118":1}}],["стоит",{"2":{"114":1,"133":1,"138":1,"151":1,"166":1,"175":1,"242":1,"255":1,"258":1,"264":1,"293":1,"299":1,"321":1,"325":1,"369":1,"411":1,"433":1}}],["степенью",{"2":{"329":1}}],["степени",{"2":{"134":1,"158":1,"162":1,"221":1,"226":1,"283":1,"324":1,"457":1,"462":1,"466":1}}],["стейты",{"2":{"450":1}}],["стейт",{"2":{"450":2,"482":1}}],["стейта",{"2":{"258":2,"446":1,"450":3}}],["стейтом",{"2":{"34":1,"450":5}}],["стековые",{"2":{"184":1}}],["стек",{"0":{"20":1}}],["стрелку",{"2":{"415":1}}],["стрелками",{"2":{"209":2}}],["стрелочную",{"2":{"325":1}}],["стремитесь",{"2":{"166":1}}],["стремимся",{"2":{"145":1,"408":1}}],["стремящихся",{"2":{"138":1}}],["стремление",{"2":{"96":1}}],["страшном",{"2":{"446":1}}],["стратегия",{"2":{"431":1,"448":1,"589":1}}],["стратегиями",{"2":{"278":1,"352":1}}],["стратегию",{"2":{"278":2,"359":1}}],["стратегий",{"2":{"278":2,"279":1,"491":1}}],["стратегией",{"2":{"278":1,"279":2}}],["стратегии",{"2":{"65":1,"278":1,"282":1}}],["страдает",{"2":{"226":1}}],["страну",{"2":{"365":1}}],["страны",{"2":{"363":1,"365":1}}],["страна",{"2":{"363":1}}],["странным",{"2":{"225":1,"359":1}}],["странно",{"2":{"224":1}}],["странички",{"2":{"492":1}}],["страничной",{"2":{"259":1}}],["страничным",{"2":{"178":1}}],["страничный",{"2":{"166":1}}],["страниц",{"2":{"36":1,"166":1,"178":2,"189":1,"221":2,"278":1,"280":1,"354":4,"377":1,"418":1,"430":1,"448":1,"490":1}}],["страницей",{"2":{"178":1,"181":1}}],["странице",{"2":{"23":1,"36":1,"50":1,"125":1,"175":1,"190":1,"203":1,"221":1,"222":1,"223":2,"231":1,"234":2,"265":1,"331":2,"362":1,"418":2,"437":1,"479":1,"481":1,"515":1,"520":1,"530":1}}],["страницах",{"2":{"185":1,"294":1}}],["страницами",{"2":{"178":1,"355":1,"357":1,"359":1}}],["страницам",{"2":{"125":3}}],["страница",{"2":{"4":1,"7":2,"30":1,"111":1,"117":1,"125":2,"159":1,"175":1,"190":2,"213":1,"221":1,"224":1,"225":1,"357":7,"492":1,"521":1,"532":1}}],["страницы",{"0":{"28":1,"245":1},"1":{"29":1,"30":1,"31":1,"32":1,"246":1,"247":1,"248":1,"249":1},"2":{"4":1,"23":1,"30":1,"36":1,"86":1,"117":1,"125":2,"144":1,"159":2,"178":2,"182":3,"186":1,"190":2,"191":3,"210":1,"218":1,"223":2,"224":2,"246":1,"280":1,"323":1,"331":5,"354":3,"371":1,"377":1,"382":1,"418":3,"428":1,"433":1,"448":1,"492":4,"508":1}}],["страницу",{"2":{"3":1,"7":1,"85":1,"105":1,"142":1,"152":1,"159":1,"178":1,"179":2,"190":2,"191":1,"203":2,"210":1,"224":2,"243":1,"246":1,"277":2,"331":2,"354":2,"357":1,"362":3,"418":1,"421":1,"492":3,"568":1}}],["строчек",{"2":{"571":1}}],["строчкой",{"2":{"293":1}}],["строчками",{"2":{"113":1}}],["строя",{"2":{"451":1}}],["строятся",{"2":{"233":1}}],["строим",{"2":{"413":1}}],["строится",{"2":{"476":1}}],["строить",{"2":{"243":2,"403":1}}],["строительные",{"2":{"224":1,"250":1}}],["строительную",{"2":{"26":1}}],["строгость",{"2":{"126":1}}],["строковый",{"2":{"481":1}}],["строковые",{"2":{"418":2,"531":1}}],["строковых",{"2":{"371":1}}],["строковому",{"2":{"311":1}}],["строкой",{"2":{"50":1,"107":1,"340":1,"362":1,"368":1,"410":1,"418":1}}],["строки",{"2":{"207":1,"209":1,"210":1,"217":1,"219":1,"223":1,"226":1,"232":1,"264":1,"315":1,"326":2,"332":1,"339":1,"340":1,"342":1,"343":3,"348":1,"349":1,"362":2,"364":1,"371":2,"372":1,"410":2,"414":1,"415":1,"418":1,"428":1,"440":1,"448":1,"456":3,"457":2,"462":1,"465":1,"467":1,"468":1,"474":1,"483":1}}],["строке",{"2":{"98":1,"149":4,"179":2,"217":9,"263":12,"274":1,"315":2,"319":4,"321":2,"322":4,"326":3,"331":1,"338":7,"339":3,"342":2,"343":4,"347":1,"349":1,"359":7,"377":1,"379":1,"406":1,"407":4,"410":3,"412":1,"414":1,"415":3,"417":4,"420":2,"457":2,"461":4,"462":9,"472":1}}],["строк",{"2":{"96":2,"253":2,"288":1,"349":1,"362":1,"377":1,"472":1,"484":1,"492":1}}],["строку",{"2":{"82":1,"123":1,"125":1,"147":1,"247":1,"259":1,"311":1,"320":1,"326":1,"333":1,"342":1,"343":1,"366":1,"368":1,"371":1,"373":1,"374":2,"446":1,"462":1,"464":1,"465":1,"469":1,"474":2}}],["строках",{"2":{"214":1,"217":2,"278":1,"462":1}}],["строками",{"2":{"125":1,"278":1,"315":1,"368":1}}],["строка",{"2":{"29":1,"107":1,"125":1,"213":1,"217":1,"247":2,"257":1,"259":1,"273":2,"274":3,"275":2,"317":1,"326":2,"331":1,"332":1,"338":3,"339":3,"343":1,"349":9,"359":2,"371":2,"372":1,"377":1,"406":3,"412":5,"414":4,"415":3,"418":1,"420":4,"474":1}}],["стройматериалы",{"2":{"26":1}}],["структурируя",{"2":{"486":1}}],["структурированное",{"2":{"69":1}}],["структурированность",{"2":{"17":1}}],["структур",{"2":{"296":1,"318":1}}],["структурные",{"0":{"298":1},"2":{"221":1}}],["структурных",{"2":{"69":2}}],["структура",{"0":{"210":1,"447":1,"449":1},"1":{"448":1,"449":1},"2":{"182":1,"210":1,"222":1,"310":1,"363":1,"429":1,"431":4,"448":4,"449":2}}],["структурой",{"2":{"143":1,"204":1,"221":1}}],["структуры",{"0":{"448":1},"2":{"134":1,"182":1,"207":1,"210":1,"222":1,"316":1,"338":1,"408":1,"426":1}}],["структуре",{"2":{"128":1,"143":1,"182":1,"210":1,"211":1,"492":1}}],["структуру",{"2":{"17":1,"23":1,"26":1,"209":2,"210":4,"211":1,"294":1,"408":1,"427":1,"428":1,"448":2}}],["стакан",{"2":{"491":1}}],["стабильного",{"2":{"472":1}}],["стабильной",{"2":{"471":1}}],["стабильный",{"2":{"469":1}}],["стабильных",{"2":{"454":1}}],["стабилен",{"2":{"145":1}}],["стационарности",{"2":{"350":1}}],["ставшее",{"2":{"475":1}}],["ставший",{"2":{"184":1}}],["ставится",{"2":{"359":1}}],["ставиться",{"2":{"317":1}}],["ставить",{"2":{"96":1,"123":1,"208":1}}],["ставим",{"2":{"90":1,"104":1,"109":1,"115":1,"121":1}}],["сталкивались",{"2":{"264":1}}],["сталкиваемся",{"2":{"145":1}}],["стал",{"2":{"170":1,"181":1,"184":1,"196":1,"208":1,"264":1,"339":1,"453":1,"467":1}}],["стала",{"2":{"162":1,"189":1,"320":1,"355":1,"450":1}}],["стало",{"2":{"160":1,"354":1,"356":1,"450":1,"482":1}}],["стали",{"2":{"2":1,"168":1,"221":1,"446":1,"450":1,"490":1}}],["станут",{"2":{"226":1,"293":1,"414":1,"415":2}}],["становиться",{"2":{"270":1}}],["становится",{"2":{"133":1,"191":1,"226":1,"251":1,"259":1,"278":1,"362":1,"369":1,"450":1}}],["становились",{"2":{"157":1}}],["становятся",{"2":{"125":1}}],["стандартизации",{"2":{"221":1}}],["стандартизирован",{"2":{"181":1}}],["стандартов",{"2":{"205":1,"344":1,"371":1,"378":1}}],["стандартом",{"2":{"162":1,"170":1,"189":1,"208":1,"255":1,"278":1,"356":1,"371":1,"375":1,"399":1,"546":1}}],["стандарты",{"0":{"488":1},"2":{"181":1,"221":1,"222":1,"369":1,"490":1}}],["стандартного",{"2":{"418":1,"442":1,"446":2}}],["стандартной",{"2":{"369":1}}],["стандартному",{"2":{"181":1}}],["стандартная",{"2":{"349":1}}],["стандартную",{"2":{"275":1}}],["стандартный",{"2":{"261":1,"313":1,"374":1,"580":1}}],["стандартных",{"2":{"184":1,"206":1,"270":2,"281":1,"329":1,"378":1}}],["стандартные",{"2":{"169":1,"378":1,"379":1}}],["стандартными",{"2":{"168":1}}],["стандартным",{"2":{"160":1,"181":1,"420":1}}],["стандарту",{"2":{"144":1,"145":1}}],["стандарте",{"2":{"125":1,"176":1,"371":1}}],["стандартами",{"2":{"158":1,"221":1,"240":1}}],["стандарта",{"2":{"123":1}}],["стандарт",{"2":{"123":1,"125":1,"126":1,"158":1,"481":1}}],["станет",{"2":{"95":1,"223":1,"342":1,"359":1,"466":1}}],["старайтесь",{"2":{"487":1,"491":1}}],["старается",{"2":{"331":1}}],["старой",{"2":{"424":1}}],["старого",{"2":{"133":1,"211":1,"483":1}}],["старте",{"2":{"579":1,"590":1}}],["стартер",{"2":{"541":1}}],["старт",{"2":{"455":1}}],["стартовый",{"2":{"277":1}}],["стартовать",{"2":{"273":1}}],["стартовом",{"2":{"216":1}}],["стартового",{"2":{"209":1,"222":1}}],["стартапе",{"2":{"479":1}}],["старта",{"2":{"83":1,"576":1}}],["старых",{"2":{"133":2}}],["старыми",{"0":{"133":1},"2":{"133":2}}],["старый",{"2":{"62":1}}],["старший",{"2":{"123":1}}],["стадию",{"2":{"67":1}}],["стадии",{"0":{"67":1},"2":{"68":1,"80":1,"234":1}}],["статистика",{"2":{"466":1}}],["статистики",{"2":{"344":1,"440":1,"576":1}}],["статичен",{"2":{"362":1}}],["статическое",{"2":{"210":1}}],["статических",{"2":{"354":1,"365":1}}],["статическими",{"2":{"354":1}}],["статическим",{"2":{"303":1}}],["статически",{"2":{"252":1}}],["статический",{"0":{"252":1},"2":{"145":1,"354":1,"359":1,"464":1}}],["статические",{"2":{"145":1,"211":1,"354":1,"363":1}}],["статичной",{"2":{"221":1}}],["статичный",{"2":{"492":2}}],["статичных",{"2":{"425":1}}],["статичным",{"2":{"77":1,"483":1}}],["статичные",{"2":{"6":1}}],["статуса",{"2":{"369":1}}],["статус",{"2":{"264":1,"370":1}}],["статей",{"2":{"191":1,"490":1}}],["стать",{"2":{"186":1,"260":1,"294":1,"331":1,"339":1,"431":1,"448":1,"491":2}}],["статья",{"2":{"125":1,"479":1}}],["статье",{"2":{"123":1,"431":1,"442":1,"446":1,"490":1}}],["статьи",{"0":{"0":1},"2":{"126":1,"191":1,"234":1,"270":1,"471":1}}],["сваливает",{"2":{"482":1}}],["светлой",{"2":{"515":1,"522":1,"591":1}}],["светлый",{"2":{"270":1}}],["свете",{"2":{"419":1}}],["сведем",{"2":{"329":1,"408":1}}],["сведите",{"2":{"165":1}}],["сверху",{"2":{"29":2,"35":1,"117":1,"277":1,"324":1,"502":1}}],["свидетельства",{"2":{"122":1}}],["свыше",{"2":{"50":1}}],["связать",{"2":{"356":1}}],["связали",{"2":{"276":1}}],["связана",{"2":{"290":1,"319":1}}],["связан",{"2":{"166":1,"204":1,"272":1}}],["связано",{"2":{"144":1,"190":1,"209":1,"342":1,"343":1,"454":1,"474":1}}],["связанную",{"2":{"336":1,"371":1}}],["связанная",{"2":{"192":1,"276":1}}],["связанными",{"2":{"226":1}}],["связанные",{"2":{"139":1,"166":1,"430":1,"431":1,"432":1,"448":1,"449":1}}],["связанный",{"2":{"122":1,"359":1}}],["связанных",{"2":{"69":1,"217":1,"221":1,"462":1}}],["связанного",{"2":{"291":1}}],["связанное",{"2":{"43":1,"257":1}}],["связанность",{"0":{"34":1},"2":{"34":1,"431":1,"449":1}}],["связаны",{"2":{"2":1,"3":2,"123":1,"149":1,"162":1,"188":1,"245":1,"248":1,"454":1,"483":1}}],["связываем",{"2":{"406":1}}],["связывает",{"2":{"228":1,"233":1}}],["связывание",{"2":{"338":1}}],["связыванием",{"2":{"232":1}}],["связью",{"2":{"404":1}}],["связь",{"2":{"95":1,"126":1,"166":1,"167":1,"291":2,"312":1,"335":1,"342":1,"405":1,"408":1}}],["связей",{"0":{"247":1},"2":{"68":1}}],["связями",{"2":{"17":1}}],["связи",{"2":{"6":1,"46":1,"74":1,"122":3,"127":1,"152":1,"159":1,"176":1,"217":1,"226":1,"243":1,"246":1,"264":1,"270":1,"321":1,"329":1,"331":1,"352":1,"354":1,"425":1,"433":1,"451":1,"453":2,"466":1,"546":1,"576":1}}],["сворачивать",{"2":{"290":1}}],["сводка",{"2":{"264":1}}],["сводки",{"2":{"264":1}}],["сводные",{"2":{"264":1}}],["свою",{"2":{"159":1,"166":1,"223":1,"225":1,"278":1,"286":2,"326":1,"354":1,"364":1,"377":1,"406":1,"431":1,"450":2,"457":1,"467":1,"483":1,"484":1,"506":1,"579":1}}],["свободный",{"2":{"371":1}}],["свободного",{"2":{"371":1}}],["свободно",{"2":{"170":1,"210":1,"341":1}}],["свободна",{"2":{"63":1}}],["свободу",{"2":{"145":1,"226":1}}],["своя",{"2":{"95":1,"424":1,"446":1}}],["свое",{"2":{"197":1,"210":1,"230":1,"326":1,"369":1,"376":1,"382":1,"412":1,"491":1}}],["своей",{"2":{"96":1,"111":1,"124":1,"148":1,"166":1,"240":1,"283":1,"287":1,"326":1,"492":1}}],["своего",{"2":{"40":1,"124":2,"126":1,"142":1,"194":1,"280":1,"314":1,"319":1,"349":1,"384":1,"405":1,"492":1}}],["своему",{"2":{"210":1,"331":1,"350":1,"418":1,"440":2,"474":1}}],["своем",{"2":{"40":1,"95":1,"211":1,"331":1,"369":1,"377":1,"490":1}}],["своё",{"2":{"26":1,"50":2,"96":1}}],["свойству",{"2":{"307":1,"319":1}}],["свойств",{"2":{"131":2,"217":2,"264":1,"305":1,"319":1,"368":1,"414":1,"453":1}}],["свойством",{"2":{"131":1,"419":1}}],["свойство",{"0":{"130":1},"2":{"130":1,"217":2,"263":2,"288":1,"309":1,"319":1,"420":1,"461":1}}],["свойстве",{"2":{"127":1,"263":1,"308":1}}],["свойствах",{"2":{"307":1}}],["свойствами",{"2":{"130":1,"131":1,"217":1,"318":1,"414":1,"415":1,"461":1,"492":1}}],["свойствам",{"2":{"83":1,"461":1,"462":1}}],["свойства",{"2":{"16":1,"130":1,"132":1,"217":5,"218":1,"226":1,"260":1,"319":1,"338":1,"362":1,"413":1,"415":5,"420":1}}],["свой",{"0":{"124":1},"2":{"4":1,"12":1,"20":1,"39":1,"41":1,"59":2,"96":3,"124":2,"151":1,"158":1,"211":1,"225":1,"226":2,"277":1,"290":1,"293":4,"424":1,"425":2,"453":1,"475":1,"483":1,"491":3}}],["своих",{"2":{"96":1,"152":1,"157":1,"162":1,"212":1,"308":1,"329":1,"331":1,"364":1,"407":1,"408":1,"492":1}}],["своими",{"2":{"210":1,"331":1,"424":1,"483":1}}],["своим",{"2":{"41":1,"59":1,"121":1,"169":1,"247":1,"405":1,"441":1,"450":1,"466":1,"472":1}}],["свои",{"2":{"3":1,"20":2,"96":1,"131":1,"167":1,"219":1,"240":1,"256":1,"267":1,"281":1,"315":1,"316":1,"323":1,"352":1,"354":1,"370":1,"410":1,"431":1,"440":2,"449":1,"450":2,"456":1,"466":1,"476":1,"477":1,"482":1,"485":1,"490":2}}],["соцсетями",{"2":{"576":1}}],["социальными",{"2":{"222":1}}],["социальных",{"0":{"191":1},"2":{"96":1,"191":3,"197":1,"272":1}}],["социально",{"2":{"96":1}}],["сорс",{"2":{"491":1}}],["сортировки",{"2":{"184":1}}],["соединяет",{"2":{"431":1,"448":1}}],["соединяться",{"2":{"377":1}}],["соединению",{"2":{"271":1}}],["соединений",{"2":{"145":1}}],["соединение",{"2":{"145":1,"270":1,"334":1}}],["соединения",{"2":{"126":1,"145":1,"418":1}}],["солидно",{"2":{"442":1}}],["солидных",{"2":{"106":1}}],["соли",{"2":{"222":1}}],["сопутствующей",{"2":{"450":2}}],["сопутствующие",{"2":{"450":1}}],["сопутствующих",{"2":{"200":1}}],["сопоставимое",{"2":{"479":1}}],["сопоставимости",{"2":{"405":1}}],["сопоставить",{"2":{"419":1}}],["сопоставлены",{"2":{"368":1}}],["сопоставленный",{"2":{"214":1}}],["сопоставляет",{"2":{"355":1}}],["сопровождение",{"2":{"378":1}}],["сопровождения",{"2":{"240":1}}],["сопровождаемым",{"2":{"196":1}}],["сопровождаемость",{"2":{"69":1,"284":1}}],["сопровождать",{"2":{"176":1}}],["сопровождаться",{"2":{"171":1}}],["соглашению",{"2":{"254":1,"258":1}}],["соглашений",{"2":{"211":1,"235":1,"240":1,"241":1,"290":1}}],["соглашениям",{"2":{"362":1}}],["соглашения",{"0":{"235":1},"1":{"236":1,"237":1,"238":1,"239":1,"240":1},"2":{"210":1,"240":3,"242":1,"255":1,"293":1}}],["соглашением",{"2":{"255":1}}],["соглашение",{"2":{"197":1,"226":1,"255":1,"356":1,"456":2}}],["соглашается",{"2":{"204":1,"270":1,"277":1}}],["согласовать",{"2":{"304":1}}],["согласования",{"2":{"270":1}}],["согласование",{"2":{"69":1}}],["согласованность",{"2":{"213":1}}],["согласованности",{"2":{"160":1}}],["согласия",{"2":{"277":2}}],["согласиться",{"2":{"277":1}}],["согласие",{"2":{"197":1,"418":2}}],["согласны",{"2":{"240":1}}],["согласно",{"2":{"142":1,"144":1,"160":1,"189":1,"272":1,"292":1,"458":1}}],["сотен",{"2":{"292":1}}],["сотрудничества",{"2":{"205":1}}],["сотрудничестве",{"2":{"157":1}}],["сотни",{"2":{"192":1,"453":1}}],["сослаться",{"2":{"363":1}}],["сосредоточен",{"2":{"217":1}}],["сосредоточились",{"2":{"310":1,"403":1}}],["сосредоточимся",{"2":{"214":1,"223":1,"258":1,"264":1,"268":1,"352":1,"377":1,"403":1,"418":1,"451":1}}],["сосредоточиться",{"2":{"185":1,"331":1,"342":1,"431":1,"448":1,"453":1,"454":2}}],["составному",{"2":{"570":1}}],["составной",{"2":{"258":1}}],["составными",{"2":{"403":1}}],["состав",{"2":{"374":1}}],["составление",{"0":{"245":1},"1":{"246":1,"247":1,"248":1,"249":1}}],["составлять",{"2":{"247":1}}],["составляющая",{"2":{"354":1}}],["составляющие",{"2":{"142":1,"376":1,"415":1}}],["составляют",{"2":{"157":1,"354":1}}],["составляет",{"2":{"142":1,"418":1}}],["составителя",{"2":{"502":1}}],["составит",{"2":{"59":1}}],["состоящую",{"2":{"286":1}}],["состоящее",{"2":{"142":1}}],["состоящая",{"2":{"96":1}}],["состоять",{"2":{"450":1}}],["состоят",{"2":{"142":1,"286":1,"292":1,"338":2}}],["состоянию",{"2":{"247":1,"301":1,"414":2}}],["состояний",{"2":{"218":1,"240":1,"264":4,"419":1}}],["состояние",{"2":{"171":1,"176":1,"181":1,"230":2,"234":1,"247":3,"262":1,"263":1,"264":3,"372":1,"411":2,"412":2,"413":2,"414":1,"417":1,"450":2}}],["состоянием",{"2":{"127":1,"135":2,"247":1,"257":1,"362":1,"383":1,"411":2,"412":1,"413":3,"423":1,"483":1}}],["состоянии",{"2":{"170":2,"176":1,"263":1,"264":1,"290":1,"326":2,"370":1,"404":1,"475":1}}],["состояния",{"0":{"411":1},"1":{"412":1},"2":{"170":2,"217":1,"218":1,"232":1,"234":1,"245":1,"247":2,"248":2,"262":1,"263":1,"264":2,"278":1,"403":1,"410":2,"412":1,"417":1,"422":1,"472":1}}],["состояниями",{"2":{"127":1,"264":2,"266":1,"395":1,"417":1}}],["состоит",{"2":{"28":1,"67":1,"69":1,"86":1,"152":1,"221":1,"224":1,"225":1,"323":1,"335":1,"414":1,"547":1}}],["сочетании",{"2":{"174":1,"231":1,"301":1,"313":1}}],["сокращения",{"0":{"501":1}}],["сокращение",{"0":{"228":1,"233":1},"2":{"233":1,"453":1}}],["сокращенное",{"2":{"257":1}}],["сокращенный",{"2":{"228":1}}],["сокращенайте",{"2":{"166":1}}],["сокращайте",{"2":{"166":1}}],["сократить",{"2":{"142":1}}],["содержатся",{"2":{"349":1}}],["содержат",{"2":{"290":1,"336":1,"349":1,"449":1,"490":1}}],["содержать",{"2":{"217":2,"224":1,"226":1,"252":1,"275":1,"332":1,"362":1,"371":2,"372":1,"375":1,"377":1,"413":2,"418":1,"508":1,"568":1}}],["содержащая",{"2":{"332":1,"371":1,"450":1}}],["содержащиеся",{"2":{"457":1}}],["содержащим",{"2":{"359":1}}],["содержащимся",{"2":{"317":1}}],["содержащий",{"2":{"225":1,"226":1,"264":1,"275":1,"414":1}}],["содержащих",{"2":{"152":1,"475":1}}],["содержащее",{"2":{"186":1}}],["содержанием",{"2":{"182":1}}],["содержание",{"2":{"157":1,"242":1,"263":1}}],["содержимым",{"2":{"234":1,"263":1,"358":1}}],["содержимого",{"2":{"166":2,"175":1,"178":1,"179":1,"185":1,"257":1,"535":1,"581":1}}],["содержимое",{"2":{"92":1,"161":1,"189":1,"191":1,"209":1,"210":1,"216":1,"223":2,"225":1,"257":6,"262":1,"331":1,"492":1,"525":1}}],["содержите",{"2":{"293":1}}],["содержит",{"2":{"125":2,"210":1,"225":1,"226":1,"228":1,"247":1,"258":1,"264":2,"318":1,"332":1,"371":2,"374":1,"461":1,"462":1}}],["содержится",{"2":{"96":1,"332":1,"371":1}}],["собеседованию",{"2":{"491":1}}],["собеседник",{"2":{"173":1}}],["соберет",{"2":{"223":1}}],["событии",{"2":{"290":1}}],["событиях",{"2":{"336":1}}],["событиям",{"2":{"258":1,"461":1}}],["событиями",{"2":{"255":1,"299":1,"314":1}}],["события",{"0":{"239":1,"253":1},"2":{"226":1,"245":1,"247":2,"248":2,"253":2,"254":3,"258":1,"264":1,"277":2,"278":1,"290":3,"314":1,"315":1,"336":1,"339":1,"359":1,"362":2,"365":1,"405":2,"407":1,"408":2,"410":3,"462":5,"472":1,"481":1}}],["событий",{"0":{"247":1,"408":1},"1":{"409":1,"410":1},"2":{"217":1,"252":1,"253":1,"254":2,"258":1,"314":4,"315":2,"323":1,"336":1,"355":1,"362":2,"409":1,"411":1,"423":1,"460":1,"462":1,"475":1}}],["событию",{"2":{"217":1,"263":1,"290":1,"406":1}}],["событием",{"2":{"290":2,"336":1,"406":1}}],["событие",{"2":{"132":1,"171":1,"173":1,"178":1,"233":4,"248":2,"254":2,"277":5,"278":1,"290":1,"314":4,"315":3,"319":1,"332":3,"337":1,"362":1,"365":1,"408":2,"410":2,"455":1,"462":8,"471":1}}],["соблюсти",{"2":{"287":1}}],["соблюдения",{"2":{"270":1}}],["соблюдение",{"2":{"255":1}}],["соблюдаем",{"2":{"407":1}}],["соблюдаться",{"2":{"284":1}}],["соблюдали",{"2":{"240":1}}],["соблюдая",{"2":{"211":1}}],["соблазн",{"2":{"194":1}}],["собирать",{"2":{"376":2}}],["собирают",{"2":{"342":1}}],["собираются",{"2":{"197":1,"234":1,"293":1}}],["собирались",{"2":{"291":1}}],["собирает",{"2":{"247":1,"370":1,"440":1,"467":1}}],["собираемся",{"2":{"209":1}}],["собираемого",{"2":{"135":1}}],["собственную",{"2":{"418":1,"420":1,"457":2,"467":1}}],["собственная",{"2":{"341":1}}],["собственными",{"2":{"331":1}}],["собственные",{"2":{"169":1,"217":1,"227":1,"240":1,"323":1,"454":1}}],["собственный",{"2":{"158":1,"225":1,"277":1,"338":1,"371":1,"453":1,"463":1}}],["собственных",{"2":{"145":1,"477":1}}],["собственной",{"2":{"344":1,"370":2,"374":1,"456":1,"457":1}}],["собственно",{"2":{"193":1,"357":1}}],["собственного",{"2":{"178":1,"349":1,"379":1,"420":1}}],["собственное",{"2":{"174":1,"187":1,"210":1,"323":1,"377":1}}],["собственном",{"2":{"153":1,"270":1,"331":1,"358":1}}],["собственному",{"2":{"142":1}}],["собственности",{"2":{"142":1}}],["собрана",{"2":{"258":1}}],["собрано",{"2":{"225":1}}],["собранных",{"2":{"370":1}}],["собранные",{"2":{"144":1}}],["собранной",{"2":{"247":1}}],["собранную",{"2":{"210":1}}],["собрать",{"2":{"144":1,"210":1,"375":1,"440":1}}],["собой",{"2":{"3":1,"6":1,"17":1,"142":1,"163":1,"169":1,"181":1,"189":1,"194":1,"205":1,"210":2,"217":1,"221":2,"222":1,"224":1,"225":1,"245":1,"246":1,"251":1,"264":1,"273":1,"274":1,"290":1,"320":1,"328":1,"338":1,"344":1,"348":1,"354":1,"371":1,"389":1,"405":1,"418":2,"441":1,"462":1}}],["соображения",{"0":{"433":1},"1":{"434":1,"435":1,"436":1},"2":{"310":1,"379":1}}],["сообщает",{"2":{"472":1}}],["сообществе",{"2":{"467":1}}],["сообщество",{"2":{"214":1}}],["сообщением",{"2":{"474":1}}],["сообщение",{"2":{"173":1,"278":1,"318":1,"332":4,"333":1,"336":1,"337":1,"338":2,"339":1,"340":1,"344":1,"456":1,"474":2,"500":1}}],["сообщений",{"2":{"126":2,"331":1,"338":1,"339":1,"375":1,"403":1,"407":1,"408":4,"409":1,"411":1,"423":1,"457":1}}],["сообщениями",{"2":{"332":1,"338":1,"475":1}}],["сообщения",{"2":{"126":1,"174":1,"331":1,"336":2,"338":2,"349":1,"375":1,"409":1,"483":1}}],["сообщить",{"2":{"176":1,"252":1,"375":1}}],["соотношения",{"2":{"466":1}}],["соотноситься",{"2":{"247":1}}],["соответствовал",{"2":{"209":1}}],["соответствовать",{"2":{"143":1,"270":1,"282":1,"326":1,"359":1}}],["соответствует",{"2":{"145":1,"217":1,"222":1,"280":2,"307":1,"355":1,"365":1,"424":1}}],["соответствуют",{"2":{"143":1,"168":1,"344":1,"457":1}}],["соответствующую",{"2":{"144":1,"215":1,"413":1,"424":1,"456":1,"465":1}}],["соответствующим",{"2":{"290":1,"370":1,"461":1}}],["соответствующих",{"2":{"211":1,"286":1,"345":1,"392":1,"541":1}}],["соответствующий",{"2":{"96":1,"121":1,"257":1,"264":1,"317":1,"336":1,"339":1,"344":1,"362":1,"371":1,"446":1}}],["соответствующие",{"2":{"44":1,"330":1,"356":1,"362":1,"365":1,"369":1,"453":1}}],["соответствующему",{"2":{"316":2,"335":1,"366":1}}],["соответствующем",{"2":{"290":1}}],["соответствующее",{"2":{"231":1}}],["соответствующей",{"2":{"59":1,"344":1,"538":1}}],["соответствующего",{"2":{"17":1,"376":1,"403":1,"455":1}}],["соответствия",{"2":{"263":1,"369":1,"451":1,"453":1}}],["соответствии",{"2":{"143":1,"170":1,"210":1,"217":2,"222":1,"246":1,"270":1,"278":1,"279":1,"291":1,"316":1,"317":2,"350":1,"370":1,"375":1,"453":1,"468":1,"491":1,"588":1}}],["соответствие",{"2":{"69":1,"350":1,"365":1,"453":1,"462":1}}],["соответственно",{"2":{"50":1,"59":2,"125":1,"135":1,"139":1,"214":1,"263":1,"331":1,"370":1,"490":1,"492":1}}],["сохраненные",{"2":{"341":1}}],["сохранения",{"2":{"226":1,"234":1,"457":1}}],["сохранением",{"2":{"258":2,"570":1}}],["сохранение",{"0":{"113":1},"2":{"418":1,"419":1,"508":2}}],["сохранил",{"2":{"424":1}}],["сохранили",{"2":{"322":1}}],["сохранив",{"2":{"323":1}}],["сохранится",{"2":{"421":1}}],["сохраните",{"2":{"217":1,"474":2}}],["сохранить",{"2":{"34":1,"123":1,"185":1,"277":1,"318":1,"331":1,"370":1,"377":1,"474":1,"492":1}}],["сохраним",{"2":{"209":1,"263":1,"290":1}}],["сохраняющий",{"2":{"320":1}}],["сохраняются",{"2":{"258":1,"418":1}}],["сохраняем",{"2":{"277":1,"304":1,"322":1,"338":1,"347":2}}],["сохраняется",{"2":{"222":1,"418":1}}],["сохраняет",{"2":{"123":1,"234":1,"304":1,"319":1,"424":1,"440":1}}],["сохраняя",{"2":{"213":1,"320":1}}],["сохранялся",{"2":{"113":1}}],["сохраняться",{"2":{"357":1}}],["сохранять",{"2":{"95":1,"96":1,"113":2,"124":1,"211":1,"466":1}}],["софт",{"2":{"63":1}}],["сожалению",{"2":{"44":1,"167":1,"193":1,"291":1,"441":1,"491":1}}],["создаётся",{"2":{"589":1}}],["создателем",{"2":{"467":1}}],["создать",{"2":{"26":1,"58":1,"63":1,"65":1,"96":2,"104":1,"142":2,"154":1,"157":2,"162":1,"167":1,"205":1,"210":1,"214":1,"215":1,"217":1,"219":1,"243":2,"249":2,"263":1,"267":1,"286":1,"292":1,"321":2,"332":1,"336":1,"342":1,"347":1,"355":1,"356":1,"358":1,"359":1,"360":1,"362":1,"365":1,"375":1,"408":1,"413":1,"419":1,"437":1,"441":1,"450":1,"457":3,"467":1,"471":1,"473":1,"475":1,"483":3,"540":1,"541":1}}],["создающим",{"2":{"541":1}}],["создающий",{"2":{"451":1}}],["создающего",{"2":{"541":1}}],["создают",{"2":{"211":1,"231":1,"268":1,"294":1,"344":1,"418":1}}],["создаются",{"2":{"142":1,"205":1,"323":1,"394":1}}],["создайте",{"2":{"261":1,"263":1,"338":1,"348":1,"356":1,"358":1,"456":1,"460":1,"461":1,"473":1,"474":1,"561":1}}],["создав",{"2":{"246":1,"411":1,"420":1,"474":1}}],["создаваемый",{"2":{"418":1}}],["создаваемой",{"2":{"279":1}}],["создавали",{"2":{"363":1}}],["создавалось",{"2":{"407":1}}],["создавало",{"2":{"130":1}}],["создавая",{"2":{"176":1,"178":1,"213":1,"331":1,"354":1,"433":1}}],["создаваться",{"2":{"96":1}}],["создавать",{"2":{"59":2,"217":1,"219":1,"221":2,"227":1,"254":2,"260":1,"268":1,"287":1,"292":1,"320":1,"327":1,"337":1,"341":1,"352":1,"355":1,"357":2,"363":1,"365":1,"397":1,"418":1,"460":1,"462":1,"490":1,"541":1,"542":1}}],["создаст",{"2":{"209":1,"226":1,"359":1,"535":2}}],["создастся",{"2":{"121":1}}],["созданы",{"2":{"471":1,"492":1}}],["создано",{"2":{"341":1,"455":1}}],["созданном",{"2":{"453":1,"492":1}}],["созданному",{"2":{"226":1}}],["созданного",{"2":{"278":1,"456":1}}],["созданными",{"2":{"420":1}}],["созданные",{"2":{"331":1}}],["созданных",{"2":{"217":1}}],["созданный",{"2":{"209":1,"332":1,"467":1,"481":1}}],["создана",{"2":{"210":2,"424":1}}],["создан",{"2":{"133":1,"179":1,"245":1,"464":1,"471":1,"502":1}}],["созданию",{"2":{"210":1,"226":1,"258":1,"296":1}}],["создания",{"2":{"61":1,"121":1,"128":1,"129":1,"131":1,"142":2,"153":1,"158":1,"165":1,"166":1,"189":1,"207":1,"209":2,"210":2,"217":1,"218":1,"219":2,"222":4,"223":2,"224":2,"226":1,"234":1,"243":1,"245":2,"255":1,"257":1,"259":1,"260":1,"264":1,"268":1,"269":1,"270":1,"279":1,"281":1,"289":1,"290":1,"313":2,"318":1,"323":2,"333":2,"337":1,"338":1,"340":1,"341":1,"342":3,"348":2,"349":4,"354":1,"355":1,"356":1,"357":1,"362":1,"363":1,"365":1,"371":2,"372":1,"382":1,"383":1,"393":1,"396":1,"403":1,"408":1,"411":1,"414":1,"419":1,"422":1,"429":1,"455":1,"456":1,"457":1,"461":1,"462":1,"465":1,"471":2,"479":1,"482":1,"541":2}}],["созданием",{"2":{"59":1,"139":1}}],["создание",{"0":{"58":1,"119":1,"391":1,"440":1},"1":{"120":1,"121":1},"2":{"207":1,"210":1,"220":1,"254":1,"270":1,"275":1,"301":1,"332":1,"355":1,"370":1,"430":1,"440":2,"441":1,"448":1,"451":2,"466":1,"476":1,"492":1,"538":1,"541":1,"542":2,"591":1}}],["создании",{"0":{"143":1,"575":1},"1":{"144":1,"576":1,"577":1,"578":1,"579":1},"2":{"41":1,"88":1,"125":1,"130":1,"222":3,"316":1,"320":1,"362":1,"403":1,"419":1,"456":1,"542":2}}],["создаем",{"2":{"114":1,"117":1,"120":1,"179":1,"217":2,"223":1,"233":1,"254":1,"255":1,"258":2,"263":2,"311":1,"315":1,"332":1,"338":1,"343":1,"349":1,"359":2,"362":1,"372":1,"391":1,"407":1,"412":1,"417":1,"420":2}}],["создается",{"2":{"223":1,"249":1,"277":1,"371":1,"472":1}}],["создает",{"2":{"51":1,"123":1,"142":1,"161":1,"210":1,"217":1,"218":1,"248":1,"270":1,"304":1,"312":1,"376":1,"412":1,"446":1,"467":1,"545":1}}],["создадим",{"2":{"44":1,"118":1,"141":1,"207":1,"209":2,"216":2,"260":1,"266":1,"290":1,"310":1,"323":1,"337":1,"339":1,"341":2,"342":1,"344":1,"352":1,"420":1,"455":1,"457":1,"472":1}}],["создали",{"2":{"17":1,"218":1,"219":1,"246":1,"263":1,"264":1,"266":1,"276":1,"343":1,"357":1,"362":1,"378":1}}],["совпадении",{"2":{"492":1}}],["совпадения",{"2":{"472":1}}],["совпадать",{"2":{"365":1}}],["совпадают",{"2":{"312":1,"371":1,"424":1}}],["совпадает",{"2":{"257":1}}],["совокупность",{"2":{"418":1,"454":1}}],["совместим",{"2":{"457":1}}],["совместимости",{"2":{"226":1,"258":1}}],["совместимость",{"0":{"133":1},"2":{"127":1,"133":3,"318":1}}],["совместимых",{"2":{"152":1}}],["совместимым",{"2":{"127":1}}],["совместному",{"2":{"260":1}}],["совместного",{"2":{"254":1,"256":1,"410":1,"419":1}}],["совместно",{"2":{"145":1,"226":1,"331":1,"411":1,"463":1,"467":1,"475":1}}],["совместное",{"2":{"125":1,"258":1}}],["совместную",{"2":{"69":1}}],["совершенно",{"2":{"225":1,"234":1,"418":1}}],["совершенствования",{"2":{"220":1}}],["совершенствование",{"2":{"218":1}}],["совершенствовать",{"2":{"218":1,"337":1,"352":1}}],["совершается",{"2":{"196":1}}],["совершать",{"2":{"100":1}}],["совершить",{"2":{"193":1,"263":1}}],["советуется",{"2":{"424":1,"446":1}}],["советы",{"0":{"443":1},"1":{"444":1,"445":1,"446":1},"2":{"64":1,"96":1,"483":1}}],["совет",{"2":{"23":1,"226":1,"230":1,"240":1,"288":1,"293":1,"310":1,"325":1,"377":1,"491":1,"546":1}}],["совсем",{"2":{"96":1,"322":1,"357":1,"482":1,"492":1}}],["современная",{"2":{"221":1}}],["современным",{"2":{"225":1,"538":1}}],["современными",{"2":{"169":1,"422":1}}],["современный",{"2":{"208":1,"384":1,"439":1,"440":1,"446":1,"483":1,"491":1}}],["современных",{"2":{"208":1,"323":1,"350":2,"378":1,"384":1,"417":1,"422":1}}],["современные",{"0":{"488":1},"2":{"47":1,"62":1,"268":1,"292":1,"369":1,"425":1,"440":1,"475":1}}],["современном",{"2":{"224":1,"331":1}}],["современной",{"2":{"208":1,"289":1,"477":1}}],["современного",{"2":{"89":1,"133":1,"542":1}}],["современное",{"2":{"2":1}}],["со",{"0":{"133":1},"2":{"11":1,"12":1,"17":1,"25":1,"41":1,"59":1,"77":1,"88":1,"121":2,"125":2,"131":2,"133":2,"139":1,"143":1,"155":1,"161":1,"166":1,"176":1,"181":1,"191":2,"209":2,"210":2,"213":1,"217":4,"226":1,"228":1,"237":1,"253":1,"259":1,"263":1,"264":1,"268":1,"277":1,"278":1,"279":1,"310":1,"314":1,"319":1,"323":1,"326":1,"331":1,"339":1,"340":1,"348":1,"350":1,"357":2,"358":1,"359":1,"362":2,"365":1,"371":2,"405":1,"410":2,"414":1,"417":1,"420":1,"424":1,"439":1,"446":1,"450":1,"461":2,"492":4,"511":1,"528":1}}],["с",{"0":{"43":1,"81":1,"127":1,"152":1,"168":1,"194":1,"211":1,"243":1,"245":1,"255":1,"259":1,"280":1,"329":1,"337":1,"341":1,"392":1,"396":1,"400":1,"408":1,"413":1,"419":1,"467":1,"475":1},"1":{"82":1,"83":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"212":1,"244":1,"245":1,"246":2,"247":2,"248":2,"249":2,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"262":1,"263":1,"264":1,"265":1,"266":1,"267":1,"330":1,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"338":2,"339":2,"340":2,"341":1,"342":2,"343":2,"344":2,"345":2,"346":2,"347":2,"348":1,"349":1,"350":1,"351":1,"409":1,"410":1,"414":1,"415":1,"416":1,"417":1,"420":1,"421":1},"2":{"2":2,"3":5,"6":1,"9":3,"11":3,"12":2,"17":3,"20":1,"23":1,"29":2,"30":1,"33":1,"34":2,"35":4,"38":2,"39":2,"40":1,"41":3,"43":3,"46":1,"50":1,"51":1,"56":1,"59":1,"62":1,"63":1,"67":1,"68":1,"69":3,"74":1,"77":4,"80":1,"88":2,"89":4,"96":5,"98":2,"100":1,"101":1,"104":1,"106":1,"107":4,"111":4,"112":3,"113":1,"114":3,"117":1,"122":5,"123":13,"124":10,"125":3,"126":4,"127":4,"128":1,"131":3,"132":4,"133":1,"138":2,"139":5,"140":1,"142":5,"143":1,"144":1,"145":7,"147":1,"148":4,"149":2,"151":4,"152":4,"153":4,"155":7,"157":5,"158":4,"159":3,"160":2,"161":1,"162":4,"163":1,"164":1,"165":1,"166":4,"167":3,"168":2,"169":1,"170":3,"171":2,"172":3,"173":1,"174":3,"175":4,"176":2,"178":2,"179":3,"181":2,"183":1,"184":4,"185":1,"186":2,"188":1,"189":5,"190":2,"191":2,"192":2,"193":2,"194":1,"195":1,"196":2,"199":2,"201":1,"202":1,"203":2,"204":3,"205":4,"207":6,"208":6,"209":10,"210":11,"212":4,"213":7,"214":2,"215":5,"216":4,"217":20,"218":4,"220":3,"221":4,"222":9,"223":3,"224":3,"225":8,"226":5,"227":1,"230":2,"231":1,"232":1,"233":4,"234":1,"235":1,"237":2,"238":1,"240":1,"241":1,"243":9,"245":3,"246":5,"247":6,"248":3,"249":2,"250":1,"251":3,"252":5,"253":3,"254":2,"255":8,"257":10,"258":7,"259":3,"260":1,"261":1,"262":2,"263":14,"264":8,"265":1,"266":2,"267":3,"268":3,"269":1,"270":14,"271":1,"272":2,"273":4,"275":3,"276":2,"277":5,"278":7,"279":4,"280":2,"281":6,"283":3,"284":1,"286":3,"287":2,"288":2,"289":2,"290":8,"291":6,"293":1,"294":3,"299":3,"301":1,"302":1,"304":2,"305":2,"307":1,"310":1,"312":3,"313":1,"315":3,"316":3,"317":3,"318":6,"319":1,"320":7,"321":3,"323":9,"324":1,"325":5,"326":15,"327":3,"329":5,"330":1,"331":6,"333":3,"334":3,"335":7,"336":3,"337":5,"338":5,"339":3,"340":2,"341":5,"342":8,"343":5,"344":3,"345":2,"346":1,"347":3,"349":7,"350":3,"351":2,"352":8,"354":8,"355":5,"356":3,"357":4,"359":8,"360":1,"361":3,"362":8,"363":4,"364":3,"365":7,"366":2,"368":8,"369":4,"370":2,"371":3,"372":1,"373":1,"374":4,"375":4,"376":9,"377":11,"378":3,"382":3,"384":1,"386":1,"392":2,"395":1,"396":2,"397":2,"398":1,"403":6,"404":1,"405":3,"406":2,"407":3,"408":3,"410":6,"411":2,"412":5,"413":2,"414":3,"415":3,"417":3,"418":8,"419":4,"420":7,"421":3,"422":2,"424":4,"425":4,"428":1,"430":2,"431":6,"433":4,"437":3,"439":2,"440":3,"441":4,"442":1,"443":1,"446":4,"448":6,"449":3,"450":11,"451":4,"452":1,"453":11,"454":4,"455":3,"456":8,"457":10,"458":1,"459":1,"460":4,"461":2,"462":14,"463":1,"464":2,"465":4,"466":3,"467":5,"468":2,"469":1,"471":4,"472":4,"473":1,"474":9,"475":10,"476":1,"479":4,"481":1,"482":3,"483":10,"484":1,"485":1,"487":1,"491":12,"492":11,"501":3,"508":2,"515":2,"520":1,"535":3,"538":2,"540":1,"541":5,"542":6,"543":1,"545":1,"546":1,"547":3,"553":2,"561":1,"567":1,"570":3,"573":1,"574":1,"576":1,"577":1,"578":1,"579":2,"580":1,"588":1}}],["дня",{"2":{"491":1}}],["дней",{"2":{"487":1,"491":1}}],["дни",{"2":{"287":1,"374":1}}],["дюймов",{"2":{"441":1}}],["дэвиду",{"2":{"291":1}}],["думать",{"2":{"382":1}}],["думаю",{"2":{"288":1}}],["дубликаты",{"2":{"315":1}}],["дубликата",{"2":{"264":1}}],["дублированию",{"2":{"418":1}}],["дублирование",{"2":{"218":1,"291":1,"299":1,"418":1,"431":1,"448":1}}],["дублировать",{"2":{"123":1,"463":1}}],["дыхательной",{"2":{"286":1}}],["длительных",{"2":{"326":1,"418":1}}],["длительному",{"2":{"451":1}}],["длительное",{"2":{"176":1}}],["длительного",{"2":{"176":2}}],["длиной",{"2":{"288":1}}],["длину",{"2":{"217":1}}],["длинных",{"2":{"243":1,"326":1}}],["длинными",{"2":{"214":1}}],["длинный",{"2":{"178":1}}],["для",{"0":{"65":1,"124":1,"143":1,"154":1,"168":1,"180":1,"188":1,"196":1,"206":1,"220":1,"242":1,"267":1,"282":1,"293":1,"328":1,"348":1,"351":1,"379":1,"383":1,"423":1,"448":1,"449":1,"478":1,"560":1},"1":{"144":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"189":1,"190":1,"191":1,"192":1,"296":1,"297":1,"298":1,"299":1,"349":1,"561":1,"562":1},"2":{"2":1,"3":1,"4":1,"7":2,"9":2,"10":1,"12":2,"13":1,"17":5,"18":1,"20":3,"23":4,"27":2,"35":1,"36":1,"39":2,"40":2,"41":3,"43":1,"50":3,"51":1,"53":1,"56":1,"58":1,"59":4,"62":1,"63":3,"67":1,"68":2,"69":2,"71":1,"77":3,"79":1,"80":2,"82":1,"85":1,"89":1,"95":2,"96":3,"98":2,"99":1,"104":3,"106":3,"107":1,"111":1,"112":1,"113":2,"117":1,"118":1,"121":1,"122":1,"123":4,"124":3,"125":3,"126":6,"127":2,"128":1,"129":5,"130":1,"131":5,"133":5,"135":2,"136":1,"138":3,"139":4,"141":3,"142":20,"143":1,"144":2,"145":5,"148":2,"149":2,"150":2,"151":3,"152":10,"153":1,"154":1,"155":3,"157":4,"158":4,"159":2,"160":3,"161":2,"162":2,"163":1,"164":1,"165":3,"166":3,"167":5,"169":2,"170":2,"171":6,"172":4,"173":1,"174":3,"175":4,"176":3,"177":3,"178":3,"179":2,"181":4,"182":2,"183":1,"184":5,"185":3,"186":5,"187":1,"189":6,"191":1,"194":1,"195":1,"196":1,"199":2,"202":1,"203":1,"205":3,"207":3,"208":7,"209":8,"210":8,"211":2,"213":8,"214":13,"215":2,"216":3,"217":22,"219":2,"221":4,"222":8,"223":5,"224":5,"225":9,"226":11,"230":2,"231":2,"233":3,"234":6,"235":1,"237":1,"240":4,"241":1,"242":2,"243":2,"245":2,"246":1,"247":7,"249":7,"251":3,"252":3,"253":2,"254":3,"255":5,"256":2,"257":5,"258":3,"259":2,"260":3,"262":1,"263":14,"264":11,"266":1,"268":5,"269":2,"270":12,"272":3,"273":3,"274":1,"275":2,"277":6,"278":12,"279":4,"280":1,"281":2,"282":2,"283":4,"286":2,"287":3,"288":1,"289":1,"290":4,"291":1,"292":1,"293":3,"294":7,"300":1,"302":1,"304":3,"305":2,"307":1,"309":3,"310":6,"311":5,"312":2,"314":1,"315":5,"316":5,"317":2,"318":6,"319":7,"320":4,"321":1,"322":1,"323":10,"324":7,"326":15,"327":2,"329":4,"330":1,"331":7,"332":2,"333":1,"334":4,"335":3,"336":2,"337":3,"338":2,"339":1,"340":3,"341":3,"342":7,"343":3,"344":7,"345":4,"346":1,"347":5,"348":5,"349":10,"350":2,"351":1,"352":1,"354":6,"355":2,"356":4,"357":3,"358":1,"359":3,"362":6,"363":1,"364":2,"365":5,"366":2,"368":3,"369":8,"370":3,"371":13,"372":3,"373":1,"374":3,"375":9,"376":6,"377":14,"378":2,"379":2,"382":3,"383":3,"384":2,"385":1,"387":1,"390":1,"391":1,"393":1,"394":1,"395":1,"396":1,"397":1,"398":1,"400":1,"401":1,"403":6,"404":3,"405":4,"406":1,"407":3,"409":1,"410":5,"411":4,"412":4,"414":2,"415":1,"416":2,"417":7,"418":15,"419":1,"420":4,"421":2,"422":2,"423":2,"424":12,"425":3,"426":1,"428":1,"431":7,"433":2,"436":2,"437":2,"438":1,"439":2,"440":8,"441":9,"442":2,"443":1,"444":1,"446":8,"448":4,"449":4,"450":6,"451":5,"453":5,"454":5,"455":6,"456":7,"457":5,"458":1,"459":3,"460":3,"461":4,"462":3,"463":2,"464":6,"465":6,"466":4,"467":5,"468":2,"469":1,"471":1,"472":3,"473":2,"474":1,"475":6,"476":2,"477":4,"478":2,"479":3,"481":2,"482":8,"483":2,"485":1,"486":2,"487":1,"489":1,"490":2,"491":6,"492":18,"502":1,"506":2,"508":2,"515":3,"531":2,"537":1,"538":5,"540":1,"541":6,"543":2,"545":1,"546":3,"547":1,"550":1,"552":2,"561":1,"563":1,"570":4,"573":2,"576":6,"579":5,"586":1,"589":4,"590":1}}],["дриллинг",{"2":{"450":1}}],["др",{"2":{"208":1,"270":1,"579":1}}],["драйверами",{"2":{"184":1}}],["древовидной",{"2":{"182":1,"408":1}}],["древней",{"2":{"155":1}}],["дружелюбие",{"2":{"163":1}}],["дружественный",{"0":{"204":1}}],["дружественные",{"2":{"142":1}}],["дружественного",{"2":{"142":1}}],["другую",{"2":{"201":1,"252":1,"320":1,"362":1,"370":1,"412":1,"418":1,"420":1,"458":1,"473":1,"485":1}}],["другу",{"2":{"162":1,"247":1,"336":1,"431":1,"448":1}}],["другая",{"2":{"318":1,"320":1,"503":1}}],["друга",{"2":{"89":1,"159":1,"186":1,"193":1,"247":1,"320":1,"377":1,"405":1,"456":1,"463":1}}],["другого",{"2":{"105":1,"136":1,"141":1,"186":1,"195":2,"226":1,"243":1,"291":1,"293":2,"310":1,"318":1,"319":1,"323":1,"349":1,"356":1,"450":2,"454":1}}],["другой",{"0":{"128":1},"2":{"34":1,"39":1,"41":2,"95":1,"125":1,"161":1,"217":1,"222":1,"224":1,"252":1,"264":1,"267":1,"277":2,"283":1,"310":1,"314":1,"317":1,"325":1,"354":1,"362":1,"369":1,"375":1,"410":1,"417":1,"424":1,"433":1,"450":4,"483":1,"491":1,"541":1,"545":1}}],["другое",{"2":{"26":1,"36":1,"98":1,"148":1,"209":1,"222":1,"226":1,"234":1,"247":1,"250":1,"263":1,"277":1,"326":1,"377":1,"450":1,"475":1}}],["другому",{"2":{"254":1,"264":1,"293":1,"316":1}}],["другом",{"2":{"2":1,"3":1,"69":1,"124":1,"162":2,"164":1,"189":1,"211":1,"226":1,"243":1,"245":1,"247":1,"251":1,"267":1,"290":1,"324":1,"403":2,"414":1,"418":1,"431":1,"439":1,"449":1,"542":1}}],["другими",{"2":{"96":1,"114":1,"145":2,"155":1,"157":1,"159":1,"178":1,"202":1,"210":1,"249":1,"270":1,"277":1,"286":1,"290":1,"297":1,"301":1,"313":1,"323":1,"326":1,"329":1,"331":1,"338":1,"354":1,"355":1,"362":1,"401":1,"450":1,"457":1,"483":1,"492":1,"541":1}}],["другим",{"2":{"65":1,"114":1,"142":1,"157":1,"164":1,"180":1,"182":1,"210":1,"222":1,"226":1,"247":1,"334":1,"375":1,"377":1,"412":1,"418":1,"464":1,"474":1}}],["другие",{"0":{"136":1,"137":1,"150":1,"192":1},"2":{"4":1,"59":1,"113":1,"118":1,"124":1,"126":1,"127":3,"134":1,"145":1,"158":1,"168":1,"176":1,"192":1,"213":1,"216":1,"221":3,"222":1,"224":1,"225":3,"226":2,"233":1,"247":1,"251":1,"252":1,"256":1,"257":1,"266":1,"270":1,"271":1,"289":1,"303":1,"310":1,"314":1,"318":1,"319":1,"326":1,"333":1,"341":1,"342":1,"356":1,"359":1,"362":1,"363":1,"364":1,"377":1,"383":1,"389":1,"399":1,"403":1,"412":1,"418":2,"425":1,"433":1,"437":1,"441":1,"454":2,"457":1,"463":2,"465":1,"470":1,"473":1,"475":1,"482":1,"489":1,"492":1,"579":2}}],["других",{"0":{"0":1},"2":{"16":1,"22":1,"41":1,"98":1,"104":1,"138":1,"142":3,"150":2,"159":1,"171":1,"186":4,"198":1,"207":1,"210":1,"211":1,"213":1,"219":1,"222":2,"234":2,"246":1,"258":1,"259":1,"272":1,"287":1,"288":1,"293":1,"302":1,"304":2,"305":1,"331":1,"333":1,"342":1,"344":1,"345":1,"349":2,"369":1,"382":1,"410":2,"413":1,"425":1,"431":1,"448":1,"475":1,"482":2,"541":1,"579":1}}],["друг",{"2":{"2":1,"3":1,"69":1,"89":1,"159":1,"162":3,"164":1,"186":1,"189":1,"193":1,"243":1,"245":1,"247":3,"267":1,"290":1,"320":1,"324":1,"336":1,"377":1,"403":2,"405":1,"431":2,"448":1,"449":1,"456":1,"463":1,"542":1}}],["д",{"0":{"248":1},"2":{"68":2,"124":1,"127":1,"128":1,"132":1,"157":5,"161":2,"166":2,"170":1,"172":1,"173":1,"174":1,"178":2,"208":1,"210":3,"213":1,"222":1,"223":1,"225":1,"226":2,"232":1,"234":1,"257":1,"258":1,"265":2,"270":3,"272":1,"273":1,"274":1,"286":1,"311":1,"314":1,"318":1,"321":1,"326":1,"331":1,"332":1,"344":1,"354":3,"359":1,"368":1,"369":1,"370":1,"374":1,"375":1,"376":2,"405":1,"451":1,"453":3,"454":1,"457":3,"459":1,"460":1,"473":1,"476":1,"488":1,"492":1,"540":2,"542":4}}],["динамическая",{"2":{"355":1}}],["динамической",{"2":{"492":1}}],["динамическому",{"2":{"259":1}}],["динамического",{"2":{"252":2,"259":1,"359":1}}],["динамическое",{"2":{"227":1,"252":1,"368":1,"508":1}}],["динамических",{"2":{"354":1,"365":1,"370":1}}],["динамически",{"2":{"259":1,"354":1,"362":1,"492":1}}],["динамические",{"0":{"259":1},"2":{"245":1,"248":1,"355":1,"363":1,"417":1}}],["динамический",{"0":{"252":1},"2":{"210":1,"252":1}}],["динамичным",{"2":{"288":1,"547":1}}],["динамичными",{"2":{"38":1}}],["динамичных",{"2":{"245":1}}],["динамичного",{"2":{"577":1,"579":1}}],["динамично",{"2":{"95":1,"437":1,"482":1,"542":1,"543":1}}],["диспетчере",{"2":{"315":1}}],["диспетчером",{"2":{"314":1}}],["диспетчера",{"2":{"314":2,"315":1,"339":1,"409":1}}],["дисплее",{"2":{"158":1}}],["дистрибутивов",{"2":{"469":1}}],["дистрибутивах",{"2":{"469":2}}],["дистрибутива",{"2":{"144":1,"151":1,"153":1,"469":1}}],["дистрибуция",{"2":{"157":1}}],["дисциплину",{"2":{"453":1,"455":1}}],["дисциплине",{"2":{"387":1}}],["дисциплина",{"2":{"453":1,"466":2}}],["дисциплинах",{"2":{"288":1}}],["дисциплинами",{"2":{"157":2}}],["дисциплиной",{"2":{"283":1}}],["дисциплины",{"2":{"155":1,"157":1,"453":1,"455":1}}],["дисковое",{"2":{"418":1,"440":1}}],["диске",{"2":{"384":1}}],["дискуссия",{"2":{"172":1}}],["диска",{"2":{"149":1}}],["диск",{"2":{"123":1,"441":1}}],["диалога",{"2":{"262":2,"263":2,"264":1}}],["диалоге",{"2":{"183":1,"184":1}}],["диалог",{"2":{"183":2,"202":1,"248":2,"249":3,"262":2,"263":4}}],["диалоги",{"0":{"183":1},"2":{"166":1,"183":1,"247":1,"249":1,"260":1,"357":1}}],["диалоговые",{"2":{"246":1}}],["диалоговое",{"2":{"201":1}}],["диалогов",{"0":{"248":1},"2":{"166":1,"183":1,"247":1,"248":1,"249":1,"255":1,"266":1}}],["диапазоны",{"2":{"178":1}}],["диапазон",{"2":{"142":1}}],["диаграмме",{"2":{"248":2,"286":1}}],["диаграмму",{"2":{"224":1}}],["диаграмма",{"0":{"14":1},"2":{"14":2}}],["диаграммы",{"2":{"5":1,"14":2,"68":1,"247":1,"331":1,"335":1,"408":1,"489":1}}],["директивой",{"2":{"257":1}}],["директиве",{"2":{"217":1,"254":1}}],["директивы",{"2":{"210":1,"217":2,"225":1,"227":2,"230":1,"233":2,"242":1,"254":1,"257":1,"260":1}}],["директиву",{"2":{"179":1,"254":2,"257":1}}],["директив",{"0":{"227":1},"1":{"228":1,"229":1,"230":1,"231":1,"232":1,"233":1},"2":{"129":1,"233":1,"234":2,"241":1,"259":1}}],["директивами",{"2":{"227":1}}],["директива",{"0":{"253":1},"2":{"114":2,"227":1,"228":1,"229":1,"232":1,"233":1,"257":1}}],["директорий",{"2":{"438":1}}],["директория",{"2":{"424":2}}],["директориях",{"2":{"356":1}}],["директории",{"2":{"118":1,"143":2,"213":1,"264":1,"348":1,"456":1,"464":1,"472":1,"535":2,"547":1,"549":1}}],["директорию",{"2":{"105":1,"424":1}}],["дирректорию",{"2":{"104":1}}],["диктует",{"2":{"96":1}}],["дизайна",{"0":{"157":1},"2":{"122":1,"158":2,"159":1,"160":1,"163":1,"164":1,"185":1,"189":1,"191":1,"211":1,"246":1,"267":1,"354":1,"370":1,"392":1,"449":1,"482":1,"540":1,"542":1}}],["дизайну",{"2":{"23":1,"277":1}}],["дизайнерское",{"2":{"362":1}}],["дизайнером",{"2":{"211":1,"399":1}}],["дизайнер",{"2":{"158":2,"159":1,"160":1,"162":1}}],["дизайнеру",{"2":{"158":1}}],["дизайнерами",{"2":{"155":1,"205":1}}],["дизайне",{"2":{"23":2,"158":1,"264":1,"453":1}}],["дизайн",{"0":{"1":1,"24":1,"25":1,"69":1,"157":1,"428":1,"429":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"25":1,"26":1},"2":{"25":2,"26":1,"67":1,"69":2,"157":4,"166":1,"167":1,"189":1,"218":1,"245":3,"246":3,"263":1,"264":1,"298":1,"431":2,"448":3,"449":1,"453":2,"501":1}}],["дойти",{"2":{"492":1}}],["дойдем",{"2":{"179":1}}],["дожидаясь",{"2":{"431":1,"448":1}}],["дождаться",{"2":{"277":1}}],["доскролил",{"2":{"446":1}}],["дословно",{"2":{"278":1}}],["достойны",{"2":{"491":1}}],["достоинствами",{"2":{"287":1}}],["достигнем",{"2":{"286":1}}],["достигнет",{"2":{"164":1}}],["достигается",{"2":{"268":1,"371":1}}],["достижений",{"2":{"225":1}}],["достижению",{"2":{"164":1}}],["достижения",{"2":{"77":1,"186":1,"217":1,"286":1,"357":1}}],["достичь",{"2":{"65":1,"189":1}}],["доступе",{"2":{"491":1}}],["доступен",{"2":{"142":1,"418":1,"425":1,"467":1,"562":1}}],["доступной",{"2":{"450":1}}],["доступное",{"2":{"418":1}}],["доступном",{"2":{"418":1}}],["доступно",{"0":{"577":1},"2":{"263":1,"418":1,"576":1}}],["доступный",{"2":{"418":1,"561":1}}],["доступные",{"0":{"576":1},"2":{"213":1,"270":1,"335":1,"359":1,"417":1,"542":1}}],["доступными",{"2":{"417":1}}],["доступным",{"2":{"178":1,"218":1,"251":1,"257":1,"404":1,"411":1}}],["доступных",{"2":{"165":1,"169":1,"278":1,"341":1,"368":1,"382":1,"537":1}}],["доступны",{"2":{"158":1,"226":1,"254":1,"255":1,"259":1,"368":2,"423":1,"437":1,"515":1,"554":1}}],["доступна",{"2":{"151":1,"385":1,"418":1,"450":1}}],["доступом",{"2":{"145":1}}],["доступ",{"0":{"59":1},"2":{"56":1,"59":1,"122":1,"123":3,"124":3,"125":8,"145":1,"152":3,"178":1,"186":1,"191":1,"204":1,"217":1,"226":4,"257":1,"280":1,"301":1,"318":1,"331":2,"340":1,"344":1,"352":1,"370":1,"375":1,"379":1,"413":1,"414":2,"418":2,"425":1,"432":1,"437":1,"450":2,"461":1,"462":1}}],["доступа",{"0":{"341":1},"1":{"342":1,"343":1,"344":1,"345":1,"346":1,"347":1},"2":{"17":1,"40":1,"53":1,"58":1,"123":5,"124":1,"125":1,"131":1,"142":2,"145":1,"226":1,"249":1,"257":1,"300":1,"301":1,"304":1,"329":1,"331":1,"335":3,"337":1,"349":1,"350":1,"371":1,"405":1,"424":1,"441":1}}],["доставка",{"0":{"476":1},"2":{"401":1,"475":1,"476":2}}],["доставки",{"2":{"4":1,"71":1,"80":1,"151":1,"223":1,"476":1}}],["достаточным",{"2":{"455":1}}],["достаточный",{"0":{"159":1}}],["достаточную",{"2":{"183":1}}],["достаточная",{"2":{"89":1}}],["достаточное",{"2":{"211":1,"214":1}}],["достаточно",{"2":{"40":1,"58":1,"59":1,"96":1,"98":1,"148":2,"171":1,"176":1,"210":1,"214":1,"217":1,"247":1,"257":1,"258":1,"263":1,"270":1,"277":2,"291":1,"303":1,"312":1,"320":1,"325":1,"332":1,"334":1,"337":1,"345":1,"346":1,"356":1,"360":1,"370":1,"374":2,"405":1,"406":1,"407":1,"410":1,"418":2,"420":1,"431":1,"441":1,"442":1,"446":1,"449":1,"464":1,"465":1,"474":1,"477":1,"482":1,"492":1,"541":1}}],["допускает",{"2":{"462":1}}],["допускают",{"2":{"270":1}}],["допустимы",{"2":{"369":1}}],["допустим",{"2":{"257":1,"370":1,"483":1}}],["дополненного",{"2":{"349":1}}],["дополнение",{"2":{"312":1}}],["дополнением",{"2":{"275":1}}],["дополнениями",{"2":{"214":1}}],["дополнили",{"2":{"323":1}}],["дополнительную",{"2":{"371":1}}],["дополнительная",{"2":{"118":1}}],["дополнительным",{"2":{"224":1,"265":1,"410":1}}],["дополнительными",{"2":{"184":1,"210":1,"335":1,"354":1}}],["дополнительные",{"2":{"214":1,"221":1,"222":1,"316":1,"320":1,"335":1,"369":1,"396":1,"460":1,"475":1,"492":1}}],["дополнительных",{"2":{"85":1,"209":1,"213":1,"217":1,"226":1,"248":1,"275":2,"330":1,"350":1,"369":1,"377":1,"401":1,"452":1,"453":1,"456":1}}],["дополнительный",{"2":{"29":1,"195":1,"211":1,"326":1}}],["дополнительного",{"2":{"269":1,"378":1,"466":1}}],["дополнительной",{"2":{"222":2,"320":1}}],["дополнительное",{"2":{"51":1,"209":1,"359":1,"371":1}}],["дополнительно",{"2":{"16":1}}],["дополняем",{"2":{"322":1}}],["дополнять",{"2":{"321":1}}],["дополняющего",{"2":{"320":1}}],["дорогой",{"2":{"454":1}}],["дорогостоящим",{"2":{"451":1}}],["дорогостоящей",{"2":{"376":1}}],["дорогим",{"2":{"318":1}}],["дороги",{"2":{"230":1}}],["доработаем",{"2":{"263":1}}],["доработки",{"2":{"218":1}}],["дорабатывать",{"2":{"207":1}}],["дочерняя",{"2":{"254":1,"407":1}}],["дочернему",{"2":{"254":1,"406":1}}],["дочернем",{"2":{"253":1,"255":2,"365":1,"421":1}}],["дочернего",{"2":{"226":1,"254":2,"406":1}}],["дочерний",{"2":{"248":1,"253":1,"288":2,"407":1}}],["дочерними",{"2":{"254":1}}],["дочерним",{"2":{"247":1,"254":1,"264":1,"405":2}}],["дочерние",{"2":{"234":1,"364":2,"365":1,"405":3}}],["дочерних",{"2":{"217":1,"248":1,"255":1,"257":1,"405":1,"407":1,"411":1}}],["договаривается",{"2":{"418":1}}],["договоре",{"2":{"197":1}}],["догадались",{"2":{"209":1,"225":1,"310":1}}],["доходит",{"2":{"178":1,"374":1}}],["додо",{"2":{"157":1}}],["доводить",{"2":{"241":1}}],["довольно",{"2":{"3":1,"9":1,"25":1,"39":1,"98":1,"124":2,"126":1,"139":1,"145":1,"185":1,"195":1,"196":1,"197":1,"209":1,"213":2,"214":1,"263":1,"277":1,"294":1,"304":1,"313":1,"318":2,"319":1,"326":1,"331":1,"332":1,"336":1,"341":1,"355":1,"374":1,"405":1,"407":1,"441":1,"471":1,"474":1,"491":2,"492":1,"541":3,"573":1}}],["доведем",{"2":{"215":1}}],["доверенных",{"2":{"125":2}}],["доверие",{"2":{"96":1}}],["довериться",{"2":{"96":1}}],["документ",{"2":{"490":1}}],["документируйте",{"0":{"489":1},"2":{"433":1}}],["документирован",{"2":{"341":1}}],["документированная",{"2":{"341":1}}],["документирования",{"2":{"247":1,"489":1}}],["документирование",{"0":{"73":1},"2":{"67":1}}],["документов",{"2":{"341":2}}],["документом",{"2":{"196":1}}],["документной",{"2":{"331":1}}],["документа",{"2":{"128":1,"229":1,"258":2}}],["документаций",{"2":{"492":1}}],["документацию",{"2":{"148":1,"207":1,"222":1,"234":1,"293":1,"417":1,"508":1,"541":1}}],["документации",{"2":{"127":1,"136":1,"137":1,"145":1,"146":1,"150":1,"158":1,"208":1,"233":1,"234":1,"257":1,"259":1,"278":1,"279":1,"326":1,"334":1,"345":1,"359":1,"368":2,"418":1,"424":1,"433":1,"437":1,"457":2,"461":1,"469":1,"470":1,"491":1,"501":1,"515":1}}],["документацией",{"2":{"73":1,"208":1,"377":1,"420":1,"475":1}}],["документация",{"2":{"44":1,"68":1,"247":1,"433":1,"450":1,"491":4,"502":1}}],["доброжелательные",{"2":{"491":1}}],["добрый",{"2":{"62":1}}],["добились",{"2":{"265":1,"266":1}}],["добиться",{"2":{"189":1,"280":1,"356":1}}],["добавятся",{"2":{"474":1}}],["добавьте",{"2":{"214":1,"217":1,"333":1,"343":1,"424":1,"474":1}}],["добавили",{"2":{"226":1,"264":1}}],["добавились",{"2":{"100":1}}],["добавив",{"2":{"212":1,"457":1,"474":1}}],["добавит",{"2":{"125":1,"456":1,"471":1}}],["добавить",{"2":{"29":1,"92":1,"213":1,"270":1,"320":1,"441":1,"463":1,"465":1,"469":1,"471":2,"483":2,"490":1}}],["добавим",{"2":{"36":1,"88":1,"217":1,"340":1,"345":1,"456":1}}],["добавленные",{"2":{"474":1}}],["добавления",{"2":{"217":1,"222":1,"287":1,"317":1,"318":1,"320":3}}],["добавление",{"2":{"12":1,"80":1,"212":1,"272":1,"339":1,"368":1,"430":1,"446":1,"448":1,"482":1,"500":1,"538":1,"576":1}}],["добавлен",{"2":{"195":2}}],["добавляются",{"2":{"492":1}}],["добавляют",{"2":{"430":1,"478":1}}],["добавляя",{"2":{"314":1,"322":1}}],["добавлялись",{"2":{"221":1}}],["добавляется",{"2":{"437":1}}],["добавляет",{"2":{"125":1,"132":1,"320":1,"330":1,"343":1,"483":1,"490":1,"553":1,"563":1,"586":1}}],["добавляем",{"2":{"89":1,"93":1,"106":1,"107":1,"258":1,"264":1,"362":1,"475":1}}],["добавлять",{"2":{"18":1,"195":1,"265":1,"323":1,"412":1}}],["долларов",{"2":{"142":1}}],["доля",{"2":{"133":1}}],["дольше",{"2":{"123":1,"331":1}}],["долгосрочных",{"2":{"430":1,"448":1}}],["долгосрочной",{"2":{"69":1}}],["долгого",{"2":{"39":1}}],["должна",{"2":{"77":1,"89":1,"96":1,"160":1,"176":1,"205":1,"222":1,"225":1,"226":1,"234":1,"255":1,"286":3,"324":1,"347":1,"372":1,"377":1,"405":1,"424":1,"462":1,"491":1}}],["должны",{"2":{"23":1,"41":1,"77":1,"130":1,"131":1,"159":2,"162":1,"164":2,"166":1,"167":1,"174":1,"179":1,"183":1,"192":1,"211":1,"213":1,"217":2,"218":1,"222":1,"224":2,"247":1,"254":1,"255":1,"257":1,"263":1,"270":1,"276":1,"280":1,"283":1,"284":2,"288":1,"289":3,"291":1,"292":1,"293":1,"294":1,"315":1,"326":1,"331":1,"336":1,"344":1,"356":1,"365":1,"370":3,"371":1,"375":1,"404":1,"407":1,"410":1,"412":1,"414":1,"431":1,"437":1,"446":1,"457":1,"463":1,"483":1,"486":1}}],["должном",{"2":{"490":1}}],["должно",{"2":{"11":1,"47":1,"80":1,"123":1,"124":1,"167":1,"190":1,"215":1,"233":1,"254":2,"270":3,"272":1,"273":1,"274":1,"282":1,"331":1,"365":1,"414":1,"453":1,"455":1,"456":1,"457":1,"458":4,"479":1,"542":1}}],["должен",{"2":{"11":1,"20":2,"51":1,"77":1,"104":1,"123":1,"130":1,"142":1,"152":1,"167":2,"170":1,"190":1,"197":1,"205":1,"209":1,"212":1,"215":1,"222":2,"231":1,"252":1,"253":1,"254":1,"263":2,"270":1,"272":2,"275":1,"277":1,"278":1,"287":1,"288":1,"290":1,"291":1,"300":1,"308":1,"310":2,"314":1,"317":1,"318":1,"321":3,"331":2,"332":1,"339":1,"370":1,"371":2,"374":1,"375":1,"377":1,"384":1,"405":1,"410":1,"424":2,"450":1,"453":1,"456":1,"463":1,"464":1,"483":1,"492":1,"508":1,"531":1,"588":1}}],["домашний",{"2":{"191":1,"492":1,"588":1}}],["домашняя",{"0":{"190":1},"2":{"190":1}}],["домашнюю",{"2":{"159":1}}],["домашнего",{"2":{"142":1}}],["домашней",{"2":{"142":1}}],["домене",{"2":{"142":2}}],["домену",{"2":{"142":1}}],["доменным",{"2":{"148":1}}],["доменные",{"2":{"142":1}}],["доменных",{"0":{"142":1},"1":{"144":1},"2":{"142":1}}],["доменное",{"2":{"141":1,"142":2}}],["домены",{"0":{"142":1},"1":{"144":1},"2":{"142":3,"149":1,"152":1}}],["доменов",{"2":{"125":1,"142":1,"286":1}}],["доменом",{"2":{"121":1,"125":1,"143":1}}],["домен",{"2":{"125":1,"142":9,"143":1,"151":1,"152":1,"154":1,"195":1,"345":1,"425":3,"429":1,"491":1,"562":2}}],["доменами",{"2":{"142":1}}],["домена",{"2":{"125":4,"139":1,"142":4,"143":1,"147":1,"152":1,"153":1,"154":2,"341":1,"349":2,"418":1,"425":1}}],["дом",{"2":{"26":1}}],["до",{"0":{"271":1},"1":{"272":1,"273":1,"274":1,"275":1,"276":1,"277":1},"2":{"23":1,"61":1,"111":1,"129":1,"133":1,"142":2,"152":1,"156":1,"164":1,"169":1,"178":1,"179":1,"183":1,"186":1,"191":1,"195":1,"196":1,"202":1,"207":1,"211":4,"215":1,"219":1,"221":2,"222":2,"224":1,"226":1,"233":1,"234":1,"241":2,"246":1,"249":1,"252":2,"257":1,"274":1,"278":1,"286":1,"293":1,"307":1,"318":1,"320":1,"321":1,"323":1,"326":1,"331":4,"354":1,"355":1,"359":2,"362":1,"363":1,"365":2,"370":1,"374":1,"375":2,"392":1,"412":2,"420":1,"437":1,"446":1,"453":2,"460":1,"465":1,"475":1,"476":1,"492":3,"542":1}}],["декларируемое",{"2":{"450":1}}],["декомпозиции",{"2":{"482":1}}],["декомпозированные",{"2":{"431":1,"448":1}}],["декодирован",{"2":{"371":1}}],["декодированной",{"2":{"368":1}}],["декодирует",{"2":{"371":1}}],["декораторов",{"2":{"320":2}}],["декораторы",{"2":{"320":3,"322":1}}],["декораторами",{"2":{"323":1}}],["декораторам",{"2":{"320":1}}],["декоратора",{"2":{"294":1,"320":2,"322":1,"323":1,"420":1}}],["декоратор",{"0":{"320":1},"1":{"321":1,"322":1},"2":{"211":1,"283":1,"319":1,"320":3,"321":2,"420":2}}],["дебаге",{"2":{"446":1}}],["дебажить",{"2":{"56":1}}],["детей",{"2":{"491":1}}],["детьми",{"2":{"403":1}}],["детали",{"0":{"548":1},"1":{"549":1,"550":1},"2":{"362":1,"431":1,"489":1}}],["детализирована",{"2":{"286":1}}],["детализации",{"2":{"186":1}}],["деталей",{"2":{"292":1}}],["деталях",{"0":{"250":1},"1":{"251":1,"252":1,"253":1,"254":1,"255":1},"2":{"232":1,"371":1}}],["деталям",{"2":{"139":2,"363":1}}],["детальную",{"2":{"483":1}}],["детального",{"2":{"266":1}}],["детально",{"2":{"44":1,"158":1}}],["детальный",{"2":{"14":1}}],["девопс",{"2":{"401":1}}],["девичестве",{"2":{"43":1}}],["децентрализованные",{"2":{"377":2}}],["децентрализованных",{"2":{"354":1,"377":1}}],["дефисами",{"2":{"216":1}}],["деятельность",{"2":{"173":1}}],["деятельностью",{"2":{"65":1}}],["деактивации",{"2":{"170":2}}],["демонстрации",{"2":{"162":1,"382":1}}],["демонстрирующий",{"2":{"286":1,"413":1}}],["демонстрируют",{"2":{"156":1}}],["демонстрирует",{"2":{"161":1,"179":1,"306":1,"450":1,"466":1}}],["деньги",{"2":{"441":1}}],["день",{"2":{"142":1,"155":1,"166":1,"465":1,"467":1}}],["денег",{"2":{"63":1}}],["деревьев",{"2":{"363":1}}],["дереву",{"2":{"255":1,"307":1,"405":1,"407":2,"450":1}}],["дереве",{"2":{"247":1,"254":1,"410":1}}],["дерево",{"2":{"224":1,"287":1}}],["дерева",{"2":{"136":1,"211":1,"234":1,"247":1,"407":1}}],["держи",{"0":{"292":1},"2":{"283":2}}],["держим",{"2":{"23":1}}],["держателем",{"2":{"259":1}}],["держать",{"2":{"209":1,"491":1}}],["де",{"2":{"126":1,"356":1,"546":1}}],["деплое",{"2":{"424":1}}],["деплоится",{"2":{"424":1}}],["деплоить",{"2":{"424":1}}],["деплой",{"2":{"424":1}}],["деплоя",{"2":{"71":1,"424":4,"475":1,"491":1,"542":1,"576":1,"579":1}}],["депозитами",{"2":{"123":1}}],["действовать",{"2":{"321":1,"370":1}}],["действовало",{"2":{"268":1}}],["действительному",{"2":{"374":1}}],["действительно",{"2":{"203":1,"312":1,"320":1,"433":1,"439":1,"479":1}}],["действительная",{"2":{"123":1}}],["действию",{"0":{"191":1},"2":{"159":1,"191":3,"203":1}}],["действии",{"0":{"387":1},"2":{"156":1,"183":1,"208":1,"209":1,"217":1,"224":1,"244":1,"269":1,"289":2,"323":1,"330":1,"353":1,"387":1,"403":1,"404":1,"452":1}}],["действием",{"2":{"171":1,"172":1}}],["действие",{"2":{"123":2,"171":1,"172":1,"194":1,"203":1,"224":1,"249":1,"251":1,"317":1,"320":1,"473":1}}],["действиями",{"2":{"184":1}}],["действиях",{"2":{"159":1,"166":1}}],["действия",{"2":{"100":1,"123":1,"152":1,"166":2,"172":1,"176":1,"184":1,"193":2,"254":1,"258":1,"260":1,"263":2,"280":1,"314":1,"331":2,"344":1,"356":1,"455":1,"475":2,"479":1}}],["действий",{"2":{"64":1,"160":1,"166":1,"176":2,"202":2,"203":1,"337":1,"401":1,"410":1}}],["действующего",{"2":{"323":1}}],["действуют",{"2":{"3":1}}],["действуя",{"2":{"278":1}}],["действует",{"2":{"20":1,"152":1,"278":1,"294":1,"318":1,"371":1,"377":1}}],["дестабилизируют",{"2":{"294":1}}],["десктоп",{"2":{"492":1}}],["десктопные",{"2":{"483":1}}],["десктопными",{"2":{"354":1}}],["десктопных",{"2":{"213":1}}],["десктопе",{"2":{"33":1}}],["десятилетнем",{"2":{"439":1}}],["десятилетиям",{"2":{"17":1}}],["десяток",{"2":{"96":1,"166":1}}],["десятками",{"2":{"51":1}}],["десятки",{"2":{"50":1,"440":1,"441":1}}],["делятся",{"2":{"483":1}}],["делиться",{"2":{"258":1,"323":1,"450":1}}],["делится",{"2":{"178":1}}],["делсостояние",{"2":{"247":1}}],["делсобытия",{"2":{"247":1}}],["дело",{"2":{"246":1,"288":1,"318":1,"374":2}}],["дел",{"2":{"207":1,"215":1,"217":7,"218":1,"243":2,"247":5,"248":1,"264":2,"357":2,"362":1}}],["делайте",{"2":{"484":1,"486":1}}],["делающее",{"2":{"450":1}}],["делаются",{"2":{"46":1,"549":1}}],["делают",{"2":{"41":1,"96":1,"213":1,"328":1,"418":1,"454":2}}],["делая",{"2":{"268":1,"320":1,"515":1}}],["делали",{"2":{"217":1,"345":1,"354":1,"403":1,"437":1,"461":1}}],["дела",{"2":{"142":1,"363":1,"483":1}}],["делать",{"2":{"35":1,"38":1,"41":1,"43":1,"50":1,"88":1,"104":1,"112":1,"114":1,"124":1,"125":1,"149":1,"167":2,"172":1,"175":1,"215":1,"270":1,"286":1,"288":1,"294":1,"331":1,"363":1,"414":1,"441":1,"446":1,"450":1,"453":1,"457":1,"472":1,"492":2,"591":1}}],["делаться",{"2":{"34":1,"190":1}}],["делается",{"2":{"59":1,"113":1,"123":1,"142":1,"226":1,"289":1,"319":1,"370":1,"382":1,"433":1,"538":1}}],["делает",{"2":{"51":1,"83":1,"96":1,"122":1,"123":1,"126":1,"131":1,"154":1,"166":1,"167":1,"186":1,"208":1,"216":1,"223":1,"225":1,"252":1,"263":1,"307":1,"310":1,"326":1,"334":1,"340":1,"354":2,"375":1,"378":1,"408":1,"410":1,"415":1,"440":1,"441":1,"450":1,"453":1,"457":1,"474":1,"475":1,"482":1,"508":1,"561":1}}],["делаете",{"2":{"26":1}}],["делаем",{"2":{"23":1,"59":1,"65":1,"107":1,"226":1,"290":1,"326":1,"333":1,"349":1,"374":1}}],["делегатора",{"2":{"339":1}}],["делегировать",{"2":{"291":1,"310":1}}],["делегируется",{"2":{"316":1}}],["делегирует",{"2":{"264":1}}],["деле",{"2":{"3":1,"145":1,"240":1,"294":1,"331":1,"431":1}}],["даны",{"2":{"207":1}}],["даннах",{"2":{"508":1}}],["данная",{"2":{"179":1,"207":1,"315":1,"343":1,"474":1,"482":1,"492":1}}],["данную",{"2":{"285":1}}],["данном",{"2":{"129":1,"143":1,"149":1,"152":2,"159":2,"167":1,"178":1,"195":1,"198":1,"200":1,"209":1,"217":2,"218":1,"222":1,"223":1,"225":1,"226":1,"249":1,"252":1,"255":1,"257":1,"264":1,"310":2,"339":1,"341":2,"343":1,"345":1,"349":1,"354":1,"363":1,"365":1,"374":1,"375":1,"377":1,"405":1,"410":1,"411":1,"424":1,"431":1,"450":1,"457":1,"461":2,"462":2,"482":1,"503":1,"508":1,"535":1,"537":1}}],["данное",{"2":{"73":1,"455":1,"542":1}}],["данной",{"2":{"68":1,"123":1,"151":1,"165":1,"189":1,"190":1,"211":1,"227":1,"245":1,"248":1,"279":1,"283":1,"288":1,"290":1,"294":1,"370":1,"374":1,"377":2,"475":1,"483":2,"491":1,"589":1}}],["данного",{"0":{"77":1,"500":1},"2":{"65":1,"171":1,"184":1,"215":1,"245":1,"278":1,"318":1,"331":1,"332":1,"340":1,"411":2,"424":1,"446":1,"450":1,"483":1}}],["данным",{"2":{"125":1,"178":1,"300":1,"329":1,"376":1,"405":1,"491":1}}],["данными",{"0":{"168":1},"1":{"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1},"2":{"17":1,"38":1,"39":1,"41":1,"50":1,"112":1,"122":1,"124":3,"152":1,"218":1,"247":1,"254":1,"255":1,"258":1,"320":1,"336":1,"349":1,"354":1,"370":1,"371":1,"405":1,"410":1,"411":1,"412":1,"423":1,"428":1,"433":1,"448":1,"588":1}}],["данный",{"2":{"11":1,"16":1,"36":1,"46":1,"56":1,"142":1,"186":1,"210":1,"214":1,"226":1,"263":1,"285":1,"288":1,"307":1,"314":1,"317":1,"319":1,"362":1,"436":1,"460":1,"490":1,"502":1,"508":1,"535":1,"538":1,"551":1,"554":1,"570":1,"576":1,"583":1}}],["данные",{"0":{"47":1,"118":1,"507":1},"1":{"48":1,"49":1,"50":1,"508":1},"2":{"3":1,"11":2,"17":2,"50":2,"96":1,"112":1,"118":1,"122":1,"123":2,"124":3,"125":1,"197":1,"216":1,"237":1,"247":2,"252":1,"254":2,"255":4,"257":1,"264":1,"289":2,"315":3,"316":2,"318":1,"320":1,"322":1,"331":3,"332":1,"333":1,"335":1,"336":1,"337":1,"338":2,"343":1,"344":5,"345":1,"346":2,"347":2,"349":2,"365":2,"370":4,"371":1,"372":1,"373":1,"376":2,"377":2,"405":2,"407":3,"408":1,"410":1,"418":7,"419":1,"432":4,"433":1,"446":2,"450":3,"482":4,"483":1,"491":1,"492":3,"515":1,"531":1}}],["данных",{"0":{"15":1,"17":1,"45":2,"247":1,"395":1,"403":1,"418":1,"508":1},"1":{"16":1,"17":1,"18":2,"19":2,"46":2,"47":2,"48":2,"49":2,"50":2,"51":2,"404":1,"405":1,"406":1,"407":1,"408":1,"409":1,"410":1,"411":1,"412":1,"413":1,"414":1,"415":1,"416":1,"417":1,"418":1,"419":1,"420":1,"421":1,"422":1,"423":1},"2":{"3":1,"6":2,"11":1,"16":1,"17":8,"39":3,"40":2,"41":1,"46":1,"47":1,"50":1,"51":3,"56":1,"59":2,"62":1,"68":1,"80":1,"83":1,"124":7,"125":1,"126":1,"131":2,"135":1,"157":1,"171":1,"178":5,"217":1,"222":2,"226":3,"231":1,"232":1,"247":1,"248":1,"253":3,"255":1,"257":1,"260":1,"268":1,"277":1,"278":1,"290":1,"296":1,"299":1,"305":3,"312":1,"313":1,"316":1,"323":1,"329":3,"332":2,"340":1,"341":6,"342":2,"343":3,"344":1,"347":1,"349":1,"350":1,"354":2,"359":1,"362":1,"363":1,"365":2,"370":8,"371":2,"375":1,"376":2,"395":1,"403":1,"405":3,"410":4,"411":1,"412":1,"417":1,"418":13,"419":2,"422":1,"433":1,"441":2,"450":4,"453":2,"454":1,"482":2,"483":1,"491":1,"492":1,"508":5}}],["дат",{"2":{"446":1,"570":1}}],["дата",{"0":{"446":1}}],["датами",{"2":{"442":1}}],["дату",{"2":{"424":1,"476":2}}],["датой",{"2":{"424":1,"446":1}}],["датчики",{"2":{"258":1}}],["даты",{"2":{"169":2}}],["дать",{"2":{"123":1,"139":1,"166":1,"205":1,"249":1,"418":1,"464":1,"542":2}}],["даст",{"2":{"127":1,"409":1,"413":1,"482":1,"483":1}}],["дал",{"2":{"197":1,"210":1,"450":1}}],["далеко",{"2":{"124":1,"187":1,"208":1,"209":1,"291":1,"377":1,"479":1,"484":1}}],["далее",{"0":{"129":1},"2":{"104":2,"121":1,"123":1,"151":1,"164":1,"167":1,"181":1,"209":2,"210":1,"216":2,"217":1,"222":1,"226":1,"240":1,"258":1,"268":1,"270":2,"276":1,"286":2,"302":1,"325":1,"344":1,"349":1,"362":1,"370":1,"373":1,"376":1,"377":1,"417":1,"419":1,"453":1,"462":1,"464":1,"475":1}}],["дальше",{"2":{"123":1,"172":1,"209":1,"214":1,"222":1,"472":1,"487":1}}],["дальнейшего",{"2":{"167":1,"377":1,"475":1,"541":1}}],["дальнейшей",{"2":{"69":1,"186":1,"234":1,"242":1,"540":1,"542":1}}],["дальнейшем",{"2":{"11":1,"16":1,"18":1,"29":1,"34":1,"40":1,"58":1,"59":1,"106":1,"113":1,"179":1,"224":1,"233":1,"294":1,"373":1,"490":1,"543":1,"545":1}}],["дальнейшая",{"2":{"38":1,"475":1}}],["дальнейших",{"2":{"9":1,"12":1,"387":1}}],["дальнейшую",{"2":{"3":1}}],["дала",{"2":{"112":1}}],["дает",{"2":{"96":1,"100":1,"123":1,"126":2,"176":1,"214":1,"226":1,"229":1,"283":1,"294":1,"319":1,"331":1,"351":1,"355":1,"405":1,"413":1,"446":1,"455":1,"461":1}}],["даёт",{"2":{"65":1,"100":1,"441":1,"482":1,"491":1}}],["давид",{"2":{"387":1}}],["давным",{"2":{"155":1}}],["давно",{"2":{"39":1,"155":1,"176":1,"481":1}}],["давайте",{"2":{"127":1,"128":1,"141":1,"150":1,"158":1,"167":1,"193":1,"207":1,"211":1,"212":1,"213":1,"222":2,"223":1,"225":1,"226":2,"235":1,"245":1,"252":1,"254":1,"257":1,"259":1,"263":4,"270":1,"271":1,"294":1,"299":1,"306":1,"312":1,"314":1,"315":1,"318":1,"319":1,"324":1,"331":1,"339":2,"340":1,"341":1,"347":1,"354":1,"355":1,"356":1,"357":1,"360":1,"361":1,"371":3,"405":1,"406":1,"407":1,"408":1,"411":1,"414":1,"454":1,"456":1,"463":1,"467":1,"472":1,"474":1}}],["давать",{"2":{"123":1}}],["давая",{"2":{"2":1,"270":1}}],["дают",{"2":{"17":2,"141":1,"477":1}}],["даже",{"2":{"12":1,"40":1,"51":1,"68":1,"96":3,"123":1,"125":1,"152":1,"157":2,"160":1,"162":1,"175":1,"190":1,"193":2,"213":2,"218":1,"221":2,"222":2,"234":1,"241":1,"251":1,"255":1,"256":1,"257":1,"270":1,"278":1,"281":1,"285":1,"291":1,"294":1,"309":1,"317":1,"318":1,"323":1,"331":2,"341":1,"354":2,"362":1,"363":2,"365":1,"371":1,"376":2,"377":1,"407":1,"412":1,"421":1,"446":1,"450":2,"451":1,"453":1,"454":1,"456":1,"462":1,"465":1,"466":1,"475":1,"482":1,"490":1,"491":3,"570":1}}],["да",{"2":{"10":1,"209":1,"214":1,"220":1,"226":2,"304":1,"320":1,"326":1,"420":1}}],["двоеточия",{"2":{"233":1,"365":1}}],["двоеточие",{"2":{"228":1,"359":1}}],["двойной",{"2":{"343":1}}],["двойные",{"2":{"223":1}}],["двойных",{"2":{"217":1}}],["двойная",{"2":{"173":1}}],["двинемся",{"2":{"472":1}}],["двигателя",{"2":{"491":1}}],["двигаться",{"2":{"214":1,"473":1}}],["двигаясь",{"2":{"354":1}}],["движок",{"2":{"341":1}}],["движущихся",{"2":{"323":1,"331":1}}],["движению",{"2":{"323":1}}],["движение",{"2":{"258":1}}],["движения",{"2":{"164":1}}],["движки",{"2":{"268":1}}],["движке",{"2":{"208":1,"270":1,"418":1}}],["движка",{"2":{"133":1,"343":1,"416":1}}],["двусмысленное",{"2":{"450":1}}],["двусторонним",{"2":{"232":1}}],["двуслешные",{"2":{"89":1}}],["двум",{"2":{"214":1,"290":1}}],["двумя",{"2":{"113":1,"210":1,"213":1,"319":1,"343":1,"350":1,"357":1,"483":1}}],["двунаправленную",{"2":{"126":1}}],["двухдневный",{"2":{"491":1}}],["двухядерный",{"2":{"483":1}}],["двухфакторная",{"0":{"376":1},"2":{"375":1}}],["двух",{"2":{"114":1,"145":1,"151":1,"159":1,"222":1,"255":1,"259":1,"270":1,"349":1,"359":1,"376":1,"462":1,"551":1,"583":1}}],["двадцатилетней",{"2":{"491":1}}],["дважды",{"2":{"291":1}}],["два",{"2":{"3":2,"17":2,"50":1,"58":1,"123":1,"131":1,"133":1,"142":1,"152":1,"157":1,"170":2,"178":1,"217":4,"218":1,"226":1,"231":1,"234":1,"251":1,"252":1,"263":3,"273":1,"277":3,"293":1,"313":1,"314":1,"319":1,"324":1,"326":1,"329":1,"334":1,"344":1,"345":1,"361":1,"365":1,"371":1,"376":1,"414":1,"420":1,"431":1,"433":1,"457":1,"463":1,"483":3,"491":2,"492":2,"568":1}}],["двери",{"2":{"291":1}}],["две",{"2":{"2":1,"16":1,"92":1,"96":2,"123":1,"126":1,"143":1,"159":1,"217":1,"226":1,"264":1,"326":2,"329":1,"349":1,"365":1,"375":1,"420":1,"457":1}}],["иллюстрации",{"2":{"538":1}}],["илья",{"2":{"491":1}}],["или",{"0":{"37":1,"126":1,"159":1,"171":1,"173":1,"175":1,"270":1,"375":1,"444":1},"1":{"38":1,"39":1,"40":1,"41":1},"2":{"3":1,"16":1,"17":1,"23":1,"40":1,"41":2,"43":1,"51":1,"62":1,"63":1,"64":1,"67":1,"95":1,"96":2,"107":1,"111":2,"113":1,"114":1,"118":1,"122":4,"123":2,"124":1,"125":4,"126":2,"129":1,"131":2,"132":1,"133":1,"139":2,"142":7,"143":2,"145":2,"146":1,"148":1,"151":3,"155":1,"157":6,"158":4,"159":2,"160":2,"161":3,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"169":1,"170":7,"171":4,"172":3,"174":1,"175":1,"176":2,"178":3,"180":1,"181":2,"184":2,"186":3,"187":2,"188":1,"189":5,"190":1,"191":3,"193":3,"194":1,"195":1,"196":1,"197":2,"198":3,"199":1,"200":2,"201":1,"202":1,"203":1,"204":3,"207":1,"208":5,"209":4,"210":1,"211":7,"213":1,"214":2,"215":2,"216":2,"217":5,"218":5,"220":1,"222":9,"223":2,"224":1,"225":1,"226":6,"227":1,"229":4,"230":3,"231":1,"232":1,"233":1,"234":3,"243":1,"245":2,"246":2,"247":1,"248":2,"249":3,"251":2,"252":2,"253":2,"254":1,"255":3,"256":3,"257":3,"258":2,"260":2,"263":2,"264":3,"265":2,"266":1,"267":1,"268":1,"270":5,"272":4,"277":6,"278":3,"280":3,"286":2,"287":3,"288":3,"289":1,"290":1,"291":4,"292":2,"293":3,"294":3,"295":1,"301":2,"303":1,"305":3,"310":3,"311":1,"312":1,"313":1,"314":2,"316":2,"317":2,"318":6,"319":2,"320":4,"321":2,"323":5,"324":3,"325":2,"326":5,"327":1,"331":6,"333":2,"335":6,"336":2,"337":1,"338":1,"339":1,"341":2,"342":1,"346":1,"347":1,"354":1,"356":3,"357":1,"359":2,"362":2,"363":1,"364":1,"365":1,"369":4,"370":5,"371":2,"372":1,"375":2,"376":7,"377":4,"384":2,"403":1,"407":1,"408":2,"410":2,"411":1,"412":1,"415":1,"417":2,"418":4,"420":4,"421":1,"423":1,"425":1,"429":1,"430":2,"431":3,"432":3,"437":1,"439":1,"440":2,"446":3,"448":5,"450":11,"451":4,"453":3,"454":6,"456":3,"457":4,"459":1,"462":1,"463":1,"464":2,"466":2,"468":1,"469":1,"471":2,"474":1,"475":1,"476":1,"478":1,"481":1,"482":2,"483":3,"484":1,"485":2,"490":3,"491":5,"492":3,"500":3,"515":1,"531":1,"538":1,"541":4,"545":1,"570":1}}],["иерарxичную",{"2":{"490":1}}],["иерархия",{"2":{"246":1,"256":1}}],["иерархии",{"2":{"210":1,"225":1,"243":1,"246":2,"247":1,"254":1,"256":1,"310":1,"312":1,"450":2}}],["иерархическая",{"2":{"431":1,"448":1}}],["иерархические",{"2":{"264":1}}],["иерархический",{"2":{"182":1}}],["иерархическому",{"2":{"255":1}}],["иерархичных",{"2":{"17":1}}],["иерархичного",{"2":{"17":1,"482":1}}],["иерархичное",{"2":{"2":1}}],["иерархию",{"2":{"159":1,"219":1,"246":1,"428":1,"448":1,"449":1}}],["ищутся",{"2":{"453":1}}],["ивент",{"2":{"450":1}}],["ивенты",{"2":{"450":1}}],["ивентов",{"2":{"450":1}}],["играет",{"2":{"430":1,"448":1,"482":1}}],["играй",{"2":{"377":1}}],["игры",{"2":{"377":1}}],["игру",{"2":{"194":1}}],["игрушек",{"2":{"63":1}}],["игрушки",{"2":{"19":1,"62":2}}],["игрушка",{"2":{"18":1}}],["игнорировать",{"2":{"303":1}}],["игнорируют",{"2":{"247":1}}],["игнорируйте",{"2":{"210":1}}],["иконографическое",{"2":{"247":1}}],["иконографических",{"2":{"215":1}}],["иконографию",{"2":{"211":1}}],["иконография",{"2":{"162":1}}],["иконок",{"2":{"184":1,"191":1,"211":1,"213":7,"219":1,"243":1,"270":1,"275":1,"547":1}}],["иконке",{"2":{"114":1}}],["иконкой",{"2":{"114":2,"217":1,"277":1}}],["иконкам",{"2":{"121":1}}],["иконками",{"2":{"88":1,"107":1,"213":1,"437":1}}],["иконка",{"0":{"111":1},"2":{"111":2,"176":1,"184":5,"492":1}}],["иконки",{"0":{"184":1,"191":1},"2":{"107":1,"184":1,"191":1,"210":1,"213":1,"243":1,"428":1,"437":2,"439":1,"440":1,"448":1,"547":1,"577":1}}],["иконку",{"2":{"104":1,"112":1,"114":1,"273":1,"437":2,"552":1,"580":1,"582":1}}],["идущими",{"2":{"255":1}}],["идущие",{"2":{"117":1}}],["идеально",{"2":{"344":1,"431":2,"448":1,"456":1,"482":1}}],["идеале",{"2":{"20":1,"450":1}}],["идею",{"2":{"335":1,"431":1,"448":1,"492":1}}],["идентифицирует",{"2":{"418":1}}],["идентифицирующее",{"2":{"263":1}}],["идентифицировать",{"2":{"355":1,"377":1}}],["идентифицировал",{"2":{"349":1}}],["идентификаторы",{"2":{"547":1}}],["идентификатору",{"2":{"377":1}}],["идентификатора",{"2":{"338":1,"377":1,"414":1}}],["идентификатор",{"2":{"226":1,"359":1,"362":2,"371":1,"372":1,"377":2}}],["идентификатором",{"2":{"223":1,"338":1}}],["идентификаторов",{"2":{"179":1}}],["идентификацией",{"2":{"377":1}}],["идентификационных",{"2":{"376":1}}],["идентификационный",{"2":{"142":1}}],["идентификационная",{"2":{"371":1}}],["идентификацию",{"2":{"365":1,"377":1}}],["идентификации",{"2":{"209":1,"263":1,"338":1,"369":1,"377":1,"456":1}}],["идея",{"2":{"234":1,"268":1,"291":1,"292":1,"320":1,"375":1,"450":1,"541":1}}],["идеями",{"2":{"96":1}}],["идеей",{"2":{"220":1,"463":1}}],["идее",{"2":{"96":1,"286":1}}],["идет",{"2":{"96":1,"166":1,"191":1,"270":1,"441":1,"454":1,"502":1}}],["идете",{"2":{"26":1}}],["итерируйте",{"2":{"246":1}}],["итерацией",{"2":{"377":1}}],["итераций",{"2":{"67":1}}],["итераторе",{"2":{"231":1}}],["итеративный",{"2":{"218":1,"220":1}}],["итак",{"2":{"89":1,"222":1,"245":1,"309":1,"318":1,"323":1,"371":1,"413":1,"456":1,"483":1}}],["итог",{"0":{"138":1}}],["итоговый",{"2":{"490":1}}],["итогов",{"0":{"153":1,"205":1,"219":1,"241":1,"266":1,"281":1,"327":1,"350":1,"378":1,"422":1,"477":1}}],["итогового",{"2":{"80":1}}],["итого",{"2":{"123":1}}],["итоге",{"0":{"574":1},"2":{"50":1,"96":2,"108":1,"113":1,"240":1,"252":1,"288":1,"291":1,"376":1,"441":1,"450":1}}],["импорты",{"2":{"375":1}}],["импорта",{"2":{"217":1,"222":1,"252":1,"258":1,"263":2,"303":1,"315":1,"333":1,"334":1,"338":1,"339":2,"342":1,"359":2,"412":1,"414":1,"415":1,"420":1,"438":1,"462":1}}],["импорт",{"0":{"252":1},"2":{"211":1,"214":2,"252":1,"450":1}}],["импортирую",{"2":{"450":1}}],["импортируя",{"2":{"234":1,"410":1}}],["импортируется",{"2":{"226":1}}],["импортирует",{"2":{"224":1}}],["импортируем",{"2":{"128":1,"215":1,"223":1,"226":2,"255":2,"264":3,"306":1,"340":1,"343":1,"345":1,"347":1,"349":1,"359":2,"365":1,"377":1,"410":1,"412":1,"417":1,"457":2,"461":2}}],["импортировав",{"2":{"258":1}}],["импортировали",{"2":{"216":1,"252":1,"322":1}}],["импортированы",{"2":{"437":1}}],["импортированными",{"2":{"251":1}}],["импортированным",{"2":{"251":1}}],["импортированных",{"2":{"216":1}}],["импортирование",{"2":{"214":1}}],["импортирован",{"2":{"210":1,"222":1,"303":1}}],["импортировать",{"2":{"128":1,"210":1,"214":1,"216":1,"222":1,"223":1,"224":1,"226":2,"251":2,"258":1,"263":1,"303":1,"311":1,"312":1,"333":1,"359":1,"369":1,"416":1,"437":2,"439":1,"457":1}}],["импорте",{"2":{"62":1,"210":1,"214":1}}],["имя",{"2":{"104":1,"141":1,"142":3,"209":6,"210":1,"216":2,"226":2,"240":1,"254":2,"257":6,"263":2,"272":3,"273":2,"275":1,"311":2,"315":1,"332":1,"362":2,"365":2,"368":1,"376":1,"414":1,"420":1,"424":1,"456":1,"469":1,"500":1}}],["им",{"2":{"96":1,"98":1,"123":1,"255":1,"258":1,"365":1,"453":1,"490":1,"492":1,"531":1,"541":1}}],["имитировать",{"2":{"462":1}}],["имитирует",{"2":{"479":1}}],["имитирующей",{"2":{"461":1}}],["имитирующих",{"2":{"453":1}}],["имитирующую",{"2":{"453":1}}],["имитирующая",{"2":{"341":1}}],["имитируют",{"2":{"341":1}}],["имитируя",{"2":{"203":1}}],["имитацией",{"2":{"454":1}}],["имитации",{"2":{"259":1}}],["ими",{"2":{"96":1,"142":1,"247":1,"254":1,"260":1,"270":1,"335":1,"355":1,"430":1,"433":1,"448":1,"477":1,"573":1}}],["имейте",{"2":{"369":1}}],["имели",{"2":{"157":1,"224":1}}],["имея",{"2":{"157":1,"208":1,"270":1}}],["имеющую",{"2":{"349":1}}],["имеющих",{"2":{"142":1}}],["имеются",{"2":{"368":1}}],["имеют",{"2":{"132":1,"158":1,"159":1,"161":1,"181":1,"195":1,"225":1,"226":2,"227":1,"264":1,"270":1,"278":1,"288":2,"291":1,"320":1,"326":1,"331":2,"338":1,"405":3,"418":1,"446":1,"450":1,"477":1,"490":1}}],["именованного",{"2":{"359":1}}],["именованных",{"2":{"363":1}}],["именованными",{"2":{"257":1}}],["именованные",{"0":{"363":1},"1":{"364":1,"365":1},"2":{"257":2,"363":2}}],["именование",{"2":{"255":1}}],["именовании",{"2":{"254":1,"255":2,"258":1,"293":1}}],["именования",{"2":{"184":1}}],["именовать",{"2":{"47":1}}],["имени",{"0":{"370":1},"2":{"142":1,"209":1,"253":1,"255":2,"257":1,"263":4,"273":1,"310":1,"311":2,"312":1,"315":1,"318":1,"321":1,"323":1,"340":1,"355":1,"365":1,"370":3,"376":1,"378":1,"418":1,"437":1,"547":1,"577":1}}],["именам",{"2":{"311":1,"343":1,"362":1}}],["именами",{"2":{"217":1,"326":2,"365":1,"370":1,"371":1,"437":1,"466":1}}],["имена",{"0":{"238":1,"239":1},"2":{"125":1,"142":2,"223":1,"279":1,"311":1,"326":1,"365":1,"547":1}}],["именем",{"2":{"125":1,"132":1,"212":1,"216":1,"217":1,"255":2,"257":2,"259":1,"263":2,"277":1,"320":1,"321":1,"333":1,"343":1,"359":3,"365":1,"418":1,"420":1,"439":1,"462":1}}],["имен",{"0":{"142":1},"1":{"144":1},"2":{"47":1,"142":1,"246":1,"251":1,"253":1,"312":1,"319":1,"364":1,"371":1}}],["именно",{"2":{"2":1,"39":1,"96":4,"123":1,"142":1,"144":1,"147":1,"152":1,"193":1,"207":1,"210":2,"213":1,"221":2,"224":1,"225":1,"226":1,"248":1,"254":1,"270":1,"314":1,"319":1,"324":1,"333":1,"334":2,"357":1,"362":1,"365":1,"376":1,"405":1,"410":1,"414":1,"450":1,"453":1,"461":1,"482":1,"491":2}}],["имеем",{"2":{"41":1,"145":1,"152":1,"210":1,"226":1,"264":1,"374":1}}],["имеет",{"2":{"38":1,"41":1,"43":1,"123":4,"124":1,"126":1,"130":1,"131":2,"133":1,"138":1,"144":1,"145":1,"148":1,"158":1,"167":1,"169":1,"170":1,"195":1,"199":1,"213":1,"223":1,"226":1,"229":1,"231":1,"246":1,"247":1,"252":3,"253":1,"256":1,"263":1,"270":1,"272":1,"273":1,"277":2,"286":1,"290":1,"304":1,"312":1,"315":1,"318":1,"319":1,"332":1,"335":1,"344":1,"359":1,"370":1,"371":2,"405":1,"408":1,"410":2,"412":1,"418":1,"452":1,"454":1,"456":1,"462":1,"466":1,"482":2,"515":1}}],["имеется",{"2":{"4":1,"181":1,"211":1,"410":1}}],["иметь",{"2":{"11":1,"18":1,"20":1,"132":1,"136":1,"142":3,"145":1,"159":2,"162":1,"167":1,"179":1,"186":1,"214":1,"217":1,"218":1,"221":1,"226":1,"229":1,"240":1,"245":1,"249":1,"254":2,"265":1,"272":1,"278":1,"288":1,"294":1,"303":1,"310":1,"314":1,"329":1,"364":1,"368":1,"370":2,"376":1,"384":1,"410":1,"432":1,"441":1,"450":1,"456":2,"467":1,"474":1}}],["изнутри",{"2":{"333":1}}],["изначально",{"2":{"29":1,"341":1,"431":1,"449":1,"492":1}}],["изложенные",{"2":{"329":1}}],["излишняя",{"2":{"288":1}}],["издателя",{"2":{"314":1}}],["издревле",{"2":{"2":1}}],["изощренных",{"2":{"441":1}}],["изоляции",{"2":{"304":1,"376":1}}],["изолированные",{"2":{"224":1}}],["изобретено",{"2":{"482":1}}],["изобретались",{"2":{"449":1}}],["изобретайте",{"2":{"323":1}}],["изобретать",{"2":{"211":1,"283":1,"315":1}}],["изобразить",{"2":{"224":1}}],["изображению",{"2":{"273":1}}],["изображение",{"2":{"246":1}}],["изображений",{"0":{"175":1},"2":{"169":1,"175":4,"265":1}}],["изображениями",{"2":{"175":1,"191":1}}],["изображения",{"2":{"16":1,"159":1,"161":1,"210":1,"273":1,"275":3,"437":2,"472":1}}],["извлекать",{"2":{"462":1}}],["извлекает",{"2":{"462":1}}],["извлекаем",{"2":{"223":1,"343":1}}],["извлеченного",{"2":{"342":1}}],["извлечения",{"2":{"341":1,"342":1,"418":1}}],["известен",{"2":{"291":1}}],["известно",{"2":{"371":1}}],["известной",{"2":{"197":1,"208":1}}],["известную",{"2":{"344":1}}],["известны",{"2":{"375":1}}],["известных",{"2":{"277":1,"355":1,"377":1}}],["известный",{"2":{"145":1,"359":1,"371":1,"444":1,"446":1}}],["известными",{"2":{"272":1,"377":1}}],["известным",{"2":{"142":1}}],["известные",{"2":{"9":1,"413":2}}],["измерения",{"2":{"453":1}}],["измерить",{"2":{"281":1}}],["измеримые",{"2":{"163":1}}],["изменено",{"2":{"222":1}}],["изменений",{"2":{"127":3,"131":2,"137":1,"138":1,"208":1,"222":1,"231":1,"248":1,"344":1,"354":1,"362":2,"401":1,"417":1,"446":1,"451":1,"457":1,"460":1,"463":1,"465":1,"466":2,"467":1,"471":2,"500":1,"515":1}}],["изменении",{"2":{"96":2,"189":1,"217":1,"222":1,"419":1,"421":1,"482":2}}],["изменениям",{"2":{"382":1,"400":1}}],["изменениями",{"2":{"314":1,"341":1,"362":1,"421":1,"441":1,"460":1,"482":2}}],["изменениях",{"2":{"174":1,"264":1,"314":1,"450":1}}],["изменения",{"0":{"132":1,"134":1,"135":1,"136":1,"137":1},"2":{"40":1,"41":1,"127":7,"128":1,"134":1,"138":1,"149":1,"154":1,"189":1,"209":1,"214":1,"217":1,"221":3,"253":1,"264":1,"290":2,"294":1,"320":1,"323":1,"362":1,"412":1,"418":1,"446":2,"451":2,"467":3,"471":1,"474":1,"475":3,"476":2,"477":1,"545":1}}],["изменение",{"2":{"38":2,"95":1,"132":1,"135":1,"143":1,"144":1,"248":1,"253":1,"258":1,"264":2,"326":1,"410":1,"411":1,"412":1,"413":1,"414":1,"417":1,"466":1,"474":1}}],["изменяя",{"2":{"367":1}}],["изменяет",{"2":{"321":1,"359":1,"405":1,"407":1,"412":2}}],["изменяете",{"2":{"320":1,"478":1}}],["изменяется",{"2":{"222":1,"314":1,"326":1,"478":1}}],["изменяем",{"2":{"264":1,"322":2}}],["изменяются",{"2":{"258":1}}],["изменяющие",{"2":{"162":1,"221":1}}],["изменяться",{"2":{"278":2,"431":1,"448":1,"482":1}}],["изменять",{"2":{"146":1,"213":1,"221":1,"226":1,"247":1,"365":1,"414":1,"482":1,"589":1}}],["изменит",{"2":{"456":1}}],["изменится",{"2":{"234":1,"340":1,"441":1,"455":1}}],["измените",{"2":{"214":1,"279":1}}],["изменить",{"2":{"143":2,"157":1,"210":1,"216":1,"226":1,"230":1,"318":2,"325":1,"343":1,"351":1,"376":1,"411":1,"463":1,"482":1,"483":1,"490":1}}],["измениться",{"2":{"96":1}}],["изменил",{"2":{"466":1}}],["изменилась",{"2":{"326":1}}],["изменили",{"2":{"267":1}}],["изменилось",{"2":{"128":1,"226":1,"364":1,"466":1}}],["изменился",{"2":{"123":1,"128":1,"212":1}}],["изменим",{"2":{"104":1,"306":1,"345":1,"362":1,"460":1}}],["изучили",{"2":{"378":1}}],["изучим",{"2":{"221":1,"352":1}}],["изучите",{"2":{"155":1}}],["изучить",{"2":{"22":1,"68":1,"151":1,"167":1,"211":1,"222":1,"257":1,"275":1,"334":1,"424":1,"542":1}}],["изучайте",{"2":{"491":1}}],["изучаемые",{"2":{"342":1}}],["изучающей",{"2":{"158":1}}],["изучать",{"2":{"23":1,"160":1,"222":1}}],["изученных",{"2":{"282":1}}],["изученный",{"2":{"9":1}}],["изучению",{"2":{"249":1,"457":1}}],["изучения",{"2":{"241":1,"283":1,"294":1,"326":1,"455":1,"491":2}}],["изучении",{"2":{"211":1,"268":1,"541":1}}],["изучение",{"0":{"22":1,"227":1,"491":1},"1":{"228":1,"229":1,"230":1,"231":1,"232":1,"233":1},"2":{"192":1,"382":1,"487":1,"491":1}}],["из",{"0":{"537":1},"2":{"14":1,"20":1,"28":1,"34":1,"39":1,"41":2,"43":2,"51":1,"67":1,"69":2,"77":1,"80":1,"85":1,"86":1,"89":3,"96":5,"98":1,"104":1,"111":1,"114":1,"121":1,"122":1,"123":1,"124":1,"126":1,"127":1,"128":2,"131":3,"134":1,"142":4,"143":1,"145":1,"151":1,"152":1,"155":1,"158":1,"160":1,"161":1,"164":2,"165":1,"168":1,"170":2,"171":1,"172":1,"175":3,"176":1,"177":1,"178":1,"180":1,"181":1,"182":1,"183":1,"184":1,"189":3,"190":2,"191":2,"192":1,"193":1,"194":1,"202":1,"203":2,"205":1,"207":1,"208":3,"209":1,"210":3,"211":3,"213":6,"215":1,"216":3,"217":5,"221":3,"222":5,"223":2,"224":2,"225":2,"226":7,"227":1,"229":1,"230":2,"231":1,"234":1,"243":1,"245":1,"246":1,"247":1,"249":2,"252":1,"253":3,"254":2,"255":2,"256":1,"257":2,"258":2,"259":1,"263":3,"264":2,"268":2,"269":1,"270":2,"272":1,"273":1,"275":1,"277":3,"278":1,"279":1,"284":1,"286":3,"287":1,"288":2,"290":1,"292":1,"293":2,"299":1,"300":1,"302":1,"304":2,"308":1,"310":1,"314":3,"315":1,"318":1,"320":4,"323":3,"324":2,"325":4,"326":3,"331":6,"336":1,"337":1,"338":4,"339":2,"342":1,"343":1,"344":4,"347":1,"349":3,"354":3,"355":1,"357":1,"359":3,"362":5,"363":2,"364":1,"365":6,"368":1,"369":2,"370":1,"371":3,"376":2,"377":1,"379":1,"403":3,"405":1,"407":1,"408":1,"410":1,"411":3,"412":1,"413":2,"414":2,"415":1,"417":1,"418":5,"420":4,"421":1,"424":4,"430":1,"437":5,"438":1,"440":2,"446":1,"448":1,"450":5,"451":2,"454":2,"455":1,"456":2,"457":5,"460":2,"461":2,"462":1,"463":1,"466":3,"467":3,"471":1,"474":1,"475":3,"479":1,"482":1,"483":1,"487":1,"491":2,"492":2,"506":1,"541":1,"545":1,"547":2,"551":1,"583":1}}],["избыточную",{"2":{"449":1}}],["избыточности",{"2":{"291":1}}],["избыточная",{"2":{"96":1}}],["избавляет",{"2":{"179":1}}],["избегаемы",{"2":{"446":1}}],["избегаем",{"2":{"345":1}}],["избегания",{"2":{"291":1}}],["избегание",{"2":{"175":1}}],["избегая",{"2":{"258":1}}],["избегать",{"2":{"181":1,"192":1,"204":1,"206":1,"251":1,"288":1}}],["избегайте",{"0":{"484":1},"2":{"165":1,"288":1,"433":1}}],["избежание",{"2":{"216":1}}],["избежания",{"2":{"9":1,"579":1}}],["избежать",{"2":{"47":1,"166":1,"191":1,"212":1,"243":1,"255":1,"290":1,"303":1,"304":1,"427":1,"448":1,"482":1}}],["избранном",{"2":{"111":1}}],["избранного",{"2":{"107":1}}],["избранное",{"0":{"110":1},"1":{"111":1,"112":1,"113":1,"114":1,"115":1},"2":{"4":1,"29":1,"33":1,"111":3,"113":2,"114":1}}],["исчезновении",{"2":{"550":1}}],["исчезают",{"2":{"265":1}}],["исчезла",{"2":{"155":1,"474":1}}],["исчерпывающий",{"2":{"283":1}}],["исчерпывающим",{"2":{"127":1,"226":1}}],["исчерпывающее",{"2":{"200":1}}],["истинным",{"2":{"461":1}}],["истины",{"2":{"291":1,"412":1,"413":1}}],["истечения",{"2":{"152":1,"375":1}}],["истечении",{"2":{"142":1,"152":1,"252":1}}],["историю",{"2":{"366":1,"467":1}}],["история",{"2":{"157":1,"320":1,"467":1}}],["истории",{"2":{"135":2,"143":1,"144":1,"145":1,"147":1,"153":1,"154":1,"368":2}}],["историческим",{"2":{"466":1}}],["исторически",{"2":{"47":1,"450":1}}],["источники",{"2":{"491":1,"502":1}}],["источнику",{"2":{"125":1,"491":1}}],["источник",{"2":{"125":1,"255":1,"412":1,"413":1,"467":1}}],["источников",{"2":{"122":1,"125":3,"349":2}}],["искренне",{"2":{"387":1}}],["искренней",{"2":{"218":1}}],["исключительных",{"2":{"492":1}}],["исключительным",{"2":{"292":1}}],["исключить",{"2":{"463":1}}],["исключают",{"2":{"463":1}}],["исключается",{"2":{"210":1}}],["исключена",{"2":{"418":1}}],["исключение",{"2":{"190":2}}],["исключением",{"2":{"141":1,"174":1,"190":1,"210":1,"243":1,"289":2,"342":1,"450":1,"454":1}}],["исключения",{"2":{"190":1,"222":1,"471":1}}],["искусственной",{"2":{"340":1}}],["искусственного",{"2":{"157":1}}],["искушению",{"2":{"287":1}}],["искушение",{"2":{"88":1}}],["искать",{"2":{"51":1,"160":2,"382":1,"439":1}}],["исходящие",{"2":{"289":1}}],["исходящими",{"2":{"204":1}}],["исходя",{"2":{"216":1,"275":1,"362":1,"403":1,"405":1}}],["исходному",{"2":{"290":1,"420":1}}],["исходном",{"2":{"255":1,"457":1,"462":1,"463":1,"477":1}}],["исходного",{"2":{"151":2,"264":1,"320":1,"347":1,"418":1,"441":1,"453":1,"466":1,"467":1}}],["исходные",{"2":{"467":1}}],["исходными",{"0":{"467":1}}],["исходным",{"2":{"337":1,"451":1,"456":1,"463":1,"466":1,"472":1}}],["исходных",{"0":{"397":1},"2":{"208":1,"210":2,"465":1,"466":1}}],["исходный",{"2":{"156":1,"178":1,"202":1,"217":1,"248":1,"278":1,"311":1,"319":1,"420":1,"452":1,"456":1,"472":1,"474":1}}],["исходники",{"2":{"96":1}}],["исходная",{"2":{"12":1}}],["исхода",{"2":{"80":1}}],["исследование",{"0":{"369":1},"1":{"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1,"377":1}}],["исследований",{"2":{"163":1,"453":1}}],["исследования",{"2":{"39":1,"155":1}}],["исследовать",{"2":{"4":1,"210":1}}],["исследуем",{"2":{"22":1,"326":1}}],["испытываем",{"2":{"374":1}}],["испортит",{"2":{"479":1}}],["испорчен",{"2":{"371":1}}],["исполнение",{"2":{"316":1,"483":1}}],["исполнения",{"2":{"223":1,"483":2}}],["используйте",{"0":{"162":1,"485":1,"487":1,"488":1},"2":{"131":2,"169":1,"209":1,"211":1,"225":2,"230":2,"240":1,"379":1,"423":1,"446":2,"457":1,"485":1,"490":1}}],["используя",{"2":{"100":1,"124":1,"142":1,"145":1,"160":1,"209":1,"211":3,"216":1,"217":1,"219":1,"222":1,"224":1,"226":1,"243":1,"255":1,"257":2,"264":1,"278":1,"279":1,"287":1,"293":1,"319":1,"323":1,"324":1,"337":1,"338":1,"342":1,"359":3,"363":1,"365":1,"371":1,"377":1,"384":1,"391":1,"407":1,"415":1,"417":1,"418":1,"420":1,"424":1,"440":2,"457":2,"462":1,"476":1,"500":1}}],["использующей",{"2":{"538":1}}],["использующем",{"2":{"375":1}}],["использующего",{"2":{"125":1,"408":1}}],["использующим",{"2":{"377":1}}],["использующими",{"2":{"331":1,"415":1}}],["использующие",{"2":{"376":1}}],["использующий",{"2":{"161":1}}],["использующая",{"2":{"258":1}}],["используют",{"2":{"133":1,"175":1,"187":1,"208":1,"221":1,"235":1,"255":1,"268":1,"377":1,"407":1,"483":1}}],["используются",{"2":{"23":1,"68":1,"88":1,"123":1,"135":1,"145":1,"154":1,"157":1,"169":1,"171":1,"210":1,"217":1,"222":1,"234":1,"242":1,"249":1,"252":2,"253":1,"268":1,"272":1,"299":1,"312":1,"318":1,"326":2,"371":1,"374":1,"422":1,"424":1,"440":1,"482":1,"589":1}}],["использую",{"2":{"96":1,"117":1,"223":1,"450":1}}],["используешь",{"2":{"96":1}}],["используете",{"2":{"133":1,"293":1,"468":1,"485":1}}],["использует",{"2":{"56":1,"131":2,"144":1,"159":1,"162":1,"175":1,"211":1,"214":1,"259":1,"270":1,"279":1,"318":1,"342":1,"359":1,"370":1,"424":1,"436":1,"438":1,"440":1,"446":2,"450":1,"455":1,"456":1,"457":1,"465":1,"506":1,"547":1,"561":1}}],["используется",{"2":{"7":1,"20":1,"43":1,"123":1,"125":1,"142":3,"144":1,"145":1,"146":1,"159":2,"170":1,"172":1,"174":1,"176":1,"178":1,"182":1,"184":2,"185":2,"186":2,"199":1,"201":1,"202":1,"210":1,"217":1,"221":1,"226":1,"231":1,"233":1,"251":1,"257":1,"264":1,"273":1,"274":1,"290":1,"301":1,"315":1,"318":1,"323":1,"335":1,"359":1,"368":1,"371":2,"412":1,"414":1,"417":1,"424":1,"440":1,"446":1,"463":1,"466":1,"472":1,"474":1,"482":2,"491":1,"502":1,"508":2,"538":4,"546":1,"589":1}}],["используемую",{"2":{"273":1,"371":1}}],["используемая",{"2":{"222":1}}],["используемом",{"2":{"212":1}}],["используемое",{"2":{"185":1,"273":1}}],["используемого",{"2":{"125":1,"129":1,"152":1,"178":1,"222":1,"476":1}}],["используемым",{"2":{"249":1}}],["используемыми",{"2":{"243":1,"368":1}}],["используемых",{"2":{"150":1,"341":1,"344":1,"368":1,"378":1}}],["используемые",{"2":{"133":1,"169":1,"210":1,"224":1,"226":1,"227":1,"365":1,"368":1,"430":1,"431":1,"448":1,"449":1}}],["используемый",{"2":{"123":1,"172":1,"199":1,"217":1,"234":1,"254":1,"270":1,"344":1,"369":1,"371":1}}],["используем",{"2":{"17":1,"20":3,"56":1,"89":1,"107":2,"121":1,"130":1,"142":1,"143":1,"145":1,"149":1,"179":3,"213":2,"216":3,"217":1,"218":1,"223":2,"225":2,"226":2,"228":1,"232":1,"254":1,"255":1,"257":4,"258":1,"264":2,"304":2,"306":1,"311":1,"317":1,"319":1,"325":1,"333":2,"338":1,"343":1,"344":1,"347":1,"349":1,"357":1,"359":1,"362":3,"364":1,"371":2,"372":1,"374":1,"375":1,"410":1,"412":1,"414":1,"415":2,"417":1,"418":2,"419":1,"457":1,"461":1,"462":1,"474":1}}],["использовалось",{"2":{"413":1}}],["использовал",{"2":{"160":1,"467":1}}],["использовались",{"2":{"446":1,"451":1}}],["использовали",{"2":{"89":1,"112":1,"254":1,"266":1,"291":1,"310":1,"354":1,"362":1,"365":2,"368":1,"417":1,"459":1}}],["использована",{"2":{"226":1,"234":1}}],["использован",{"2":{"222":1,"226":1}}],["использованы",{"2":{"162":1,"371":2}}],["использовано",{"2":{"142":1,"326":1}}],["использованию",{"2":{"96":1,"168":1,"212":1,"217":1,"219":1,"260":1,"270":1,"343":1,"446":1,"458":1,"471":1,"483":1}}],["использованием",{"2":{"143":1,"159":1,"192":1,"197":1,"207":1,"248":1,"257":1,"259":1,"266":2,"270":1,"281":1,"288":1,"302":1,"307":1,"310":1,"326":1,"338":2,"350":1,"352":1,"363":1,"377":1,"403":1,"418":1,"419":1,"430":1,"431":1,"437":1,"448":2,"453":1,"454":1,"457":1,"458":1,"469":1,"492":1,"515":1}}],["использование",{"0":{"55":1,"223":1,"456":1,"471":1,"511":1,"512":1,"513":1,"528":1,"572":1},"1":{"224":1,"457":1,"472":1},"2":{"40":1,"59":1,"78":1,"96":1,"125":1,"142":1,"151":1,"152":1,"156":1,"161":1,"166":1,"172":1,"175":1,"178":2,"182":1,"186":1,"189":1,"202":1,"206":1,"207":1,"211":1,"213":2,"214":1,"222":1,"226":2,"234":1,"252":1,"254":1,"258":2,"259":1,"263":1,"264":2,"270":1,"278":2,"290":1,"313":1,"323":1,"326":1,"350":1,"351":1,"354":3,"362":1,"364":1,"368":1,"370":1,"371":1,"374":1,"376":1,"382":1,"412":1,"414":1,"415":1,"417":2,"420":1,"428":1,"448":1,"450":2,"453":1,"454":2,"457":2,"458":1,"459":1,"473":1,"482":1,"490":1,"492":1,"501":1,"538":1}}],["использовании",{"2":{"39":1,"96":1,"126":1,"130":1,"131":1,"138":1,"144":1,"151":1,"153":1,"154":1,"157":1,"161":1,"176":1,"186":1,"189":1,"197":1,"199":1,"213":1,"216":1,"217":1,"224":2,"226":1,"230":1,"254":1,"331":2,"333":1,"334":1,"354":1,"355":1,"368":1,"377":1,"383":1,"413":1,"433":1,"467":1}}],["использования",{"2":{"20":1,"77":1,"96":1,"100":1,"112":1,"131":1,"132":1,"133":2,"142":2,"151":1,"167":2,"176":1,"186":1,"192":1,"206":1,"213":1,"217":1,"222":1,"223":2,"226":2,"245":1,"249":1,"251":2,"253":1,"256":2,"257":1,"258":1,"268":1,"270":2,"279":1,"282":1,"284":1,"290":1,"294":1,"304":1,"305":1,"307":1,"310":1,"311":1,"315":1,"318":1,"323":1,"328":1,"329":1,"341":1,"343":1,"352":1,"355":1,"362":1,"365":1,"366":1,"369":1,"371":1,"373":1,"375":2,"376":1,"377":1,"379":1,"410":1,"411":1,"413":1,"418":2,"419":2,"433":1,"446":1,"450":1,"463":1,"472":1,"475":1,"491":1,"492":1,"538":1,"546":1,"572":1}}],["использоваться",{"2":{"77":1,"144":1,"171":1,"175":1,"176":1,"209":2,"213":1,"228":1,"251":1,"284":1,"338":1,"357":1,"359":1,"371":1,"391":1,"413":1,"545":1}}],["использовать",{"0":{"301":1},"2":{"10":1,"17":1,"39":1,"56":1,"59":2,"68":1,"89":1,"96":3,"98":1,"105":1,"111":1,"122":2,"124":1,"126":1,"131":5,"133":1,"144":1,"145":1,"149":1,"151":2,"155":1,"168":1,"170":1,"173":1,"176":1,"178":1,"182":1,"184":1,"207":1,"208":4,"209":2,"210":1,"211":1,"213":5,"214":1,"216":2,"222":7,"223":2,"224":2,"225":7,"226":4,"229":1,"232":1,"233":3,"234":2,"235":1,"240":2,"246":1,"249":3,"251":2,"252":1,"257":2,"258":2,"259":1,"260":1,"263":4,"267":1,"268":1,"270":2,"272":2,"274":2,"275":1,"276":1,"278":11,"279":1,"282":1,"283":1,"287":1,"291":2,"294":1,"295":1,"303":1,"304":1,"306":1,"309":1,"311":1,"315":3,"320":1,"321":1,"323":3,"325":2,"326":5,"327":1,"329":1,"331":2,"334":5,"335":1,"337":1,"338":1,"341":2,"342":1,"344":2,"350":2,"355":1,"356":2,"362":1,"364":2,"365":2,"368":2,"369":4,"370":1,"371":1,"372":1,"373":2,"377":4,"378":1,"379":2,"383":1,"405":1,"407":1,"408":1,"410":2,"411":2,"413":1,"414":1,"415":1,"416":1,"417":2,"418":3,"419":1,"420":3,"421":1,"431":4,"436":1,"437":3,"440":1,"448":1,"450":1,"456":1,"457":1,"459":1,"462":2,"463":1,"466":1,"467":2,"471":2,"472":1,"482":2,"483":3,"487":1,"515":1,"538":1,"542":1,"543":1,"547":1}}],["исправить",{"2":{"280":1,"462":1,"474":1}}],["исправление",{"2":{"74":1}}],["исправлять",{"2":{"2":1}}],["испускать",{"2":{"481":1}}],["испускающую",{"2":{"408":1}}],["испускает",{"2":{"315":1}}],["испускаемые",{"2":{"462":1}}],["испускаем",{"2":{"132":1}}],["испуская",{"2":{"248":1}}],["иная",{"2":{"482":1}}],["иначе",{"2":{"158":1,"197":1,"208":1,"225":1,"233":1,"370":1,"450":1,"457":1,"461":1}}],["ингридиент",{"2":{"479":1}}],["инкремента",{"2":{"405":1,"406":1,"407":1}}],["инкапсулировав",{"2":{"458":1}}],["инкапсулированные",{"2":{"431":1,"448":1}}],["инкапсулировать",{"2":{"301":1}}],["инкапсулировали",{"2":{"112":1,"482":1}}],["инкапсулирующая",{"2":{"431":1,"448":1}}],["инкапсулируют",{"2":{"213":1}}],["инкапсулируя",{"2":{"335":1}}],["инкапсулирует",{"2":{"225":1,"338":1,"429":1,"448":1,"482":1}}],["инкапсуляций",{"2":{"258":1}}],["инкапсуляции",{"2":{"211":1,"240":1,"258":1,"309":1,"323":1,"362":1}}],["инкапсуляция",{"0":{"3":1,"289":1},"2":{"283":1,"289":1}}],["иным",{"2":{"464":1}}],["иные",{"2":{"327":1}}],["иных",{"2":{"64":1,"492":1}}],["инвокер",{"2":{"304":1,"308":1,"310":1,"316":2,"317":2}}],["инвокеру",{"2":{"304":1,"316":1}}],["инвертирует",{"2":{"222":1}}],["инициировать",{"2":{"336":1}}],["инициируя",{"2":{"278":1}}],["инициирует",{"2":{"277":1}}],["инициирующей",{"2":{"125":1}}],["инициализация",{"0":{"536":1},"2":{"546":1,"572":1}}],["инициализации",{"2":{"412":1,"547":1,"563":1}}],["инициализируя",{"2":{"420":1}}],["инициализируем",{"2":{"258":1,"319":1}}],["инициализирован",{"2":{"471":1}}],["инициализированную",{"2":{"410":1}}],["инициализировано",{"2":{"315":1}}],["инициализировать",{"2":{"368":1}}],["инициативе",{"2":{"277":1}}],["инъекцией",{"2":{"307":1}}],["инъекцию",{"2":{"260":1,"306":1,"407":1}}],["инъекция",{"0":{"255":1,"305":1},"1":{"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1},"2":{"254":1,"283":1}}],["инъекциях",{"2":{"121":1}}],["инъекции",{"0":{"549":1},"2":{"249":1,"255":1,"256":1,"266":1,"279":1,"305":1,"307":1,"310":1,"549":1}}],["инжектируете",{"2":{"433":1}}],["инжектируется",{"2":{"377":1}}],["инжектирует",{"2":{"361":1}}],["инжектируемого",{"2":{"542":1}}],["инжектируем",{"2":{"263":2}}],["инжектируемый",{"2":{"255":1,"260":1,"263":1}}],["инжектируемых",{"2":{"237":1}}],["инжектируемые",{"2":{"237":1}}],["инжектируйте",{"2":{"263":1}}],["инжектировать",{"2":{"432":1}}],["инжектироваться",{"2":{"262":1,"279":1}}],["инжектированный",{"2":{"264":1,"377":1}}],["инжектированы",{"2":{"255":1}}],["инженеру",{"2":{"401":1}}],["инженерии",{"2":{"221":1,"222":1,"286":1,"294":1}}],["инженерные",{"2":{"218":1}}],["инженерной",{"2":{"158":1}}],["инженер",{"2":{"205":1}}],["инноваций",{"2":{"186":1}}],["интрасетей",{"2":{"142":1}}],["интеллектуальные",{"2":{"377":1}}],["интеллекта",{"2":{"157":1}}],["интегрирует",{"2":{"468":1}}],["интегрируется",{"2":{"456":1}}],["интегрирующие",{"2":{"286":1}}],["интегрируются",{"2":{"270":1,"460":1,"587":1}}],["интегрированные",{"2":{"290":1}}],["интегрированной",{"2":{"207":1}}],["интегрировать",{"2":{"210":1,"219":1,"220":1,"464":1}}],["интеграцию",{"2":{"538":1}}],["интеграционное",{"2":{"453":1}}],["интеграционные",{"2":{"72":1,"479":1}}],["интеграция",{"0":{"211":1,"476":1},"1":{"212":1},"2":{"80":1,"207":1,"401":1,"450":1,"475":1,"476":1,"579":1}}],["интеграции",{"2":{"41":1,"151":1,"220":1,"268":1,"275":1,"326":1,"422":1,"453":1,"542":2}}],["интерактивные",{"2":{"354":1}}],["интерактивных",{"2":{"245":1,"354":1}}],["интерактивность",{"2":{"354":2,"462":1}}],["интерактивности",{"0":{"248":1},"2":{"246":1,"354":2,"482":1}}],["интерполируем",{"2":{"321":1}}],["интерполируя",{"2":{"217":1}}],["интерполированное",{"2":{"231":1}}],["интерполяцией",{"2":{"223":1,"231":1}}],["интерполяции",{"2":{"217":1}}],["интерпретатору",{"2":{"326":1}}],["интерпретатора",{"2":{"68":1}}],["интерпретации",{"2":{"226":1}}],["интерпретировано",{"2":{"229":1}}],["интерпретировать",{"2":{"224":1,"225":1}}],["интерпретируются",{"2":{"223":1}}],["интерпретируют",{"2":{"197":1}}],["интерпретируется",{"2":{"191":1}}],["интересная",{"2":{"503":1}}],["интересными",{"2":{"502":1}}],["интересный",{"2":{"424":1}}],["интересное",{"2":{"207":1,"450":1}}],["интересного",{"2":{"142":1,"334":1}}],["интересующих",{"2":{"319":1}}],["интерес",{"2":{"210":1}}],["интересам",{"2":{"199":1}}],["интервал",{"2":{"162":1}}],["интервалам",{"2":{"162":1}}],["интервалом",{"2":{"161":1,"175":1}}],["интернационализационным",{"2":{"446":1,"570":1}}],["интернационализации",{"2":{"446":1,"570":1}}],["интернационализация",{"2":{"79":1,"432":1,"446":1,"578":1}}],["интернету",{"2":{"145":1,"281":1}}],["интернет",{"2":{"125":4,"145":1,"152":1,"191":1,"221":1,"323":1,"491":1}}],["интернета",{"2":{"124":1,"193":1,"354":1,"377":1,"476":1,"491":1}}],["интернете",{"2":{"27":1,"62":1,"104":1,"107":1,"124":1,"126":1,"139":2,"142":3,"153":1,"154":1,"175":1,"201":1,"211":2,"281":1,"344":1,"371":1,"466":1,"476":1,"490":1,"491":1}}],["интерфейсе",{"2":{"465":1}}],["интерфейсной",{"2":{"264":1}}],["интерфейсом",{"2":{"264":1,"284":1,"323":1,"335":1}}],["интерфейсов",{"2":{"69":1,"158":2,"162":1,"165":1,"166":1,"209":1,"219":1,"222":2,"243":1,"245":1,"270":2,"323":1,"365":1,"382":1,"392":1}}],["интерфейс",{"0":{"465":1},"2":{"68":1,"151":1,"157":1,"160":1,"162":1,"211":1,"225":1,"255":1,"260":1,"277":3,"278":1,"289":1,"313":1,"320":1,"322":1,"323":1,"325":1,"331":1,"335":1,"354":1,"363":1,"376":1,"413":1,"418":3,"464":1,"468":1}}],["интерфейсами",{"2":{"158":1}}],["интерфейса",{"0":{"158":1,"163":1,"243":1,"246":1,"392":1},"1":{"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"262":1,"263":1,"264":1,"265":1,"266":1,"267":1},"2":{"68":1,"124":1,"132":1,"155":1,"157":2,"158":6,"159":2,"162":3,"164":1,"171":2,"175":1,"186":1,"191":1,"215":1,"225":2,"232":1,"245":1,"257":1,"258":1,"270":1,"273":1,"287":1,"288":2,"290":1,"312":2,"320":2,"321":1,"324":1,"339":1,"342":1,"354":1,"355":1,"399":1,"407":1,"418":1,"428":1,"430":1,"448":2,"465":1,"479":1}}],["интерфейсы",{"2":{"20":1,"157":1,"160":1,"193":1,"243":2,"354":1,"431":1,"448":1}}],["интерьерные",{"2":{"62":1}}],["информирования",{"2":{"174":1}}],["информатике",{"2":{"466":1}}],["информативную",{"2":{"166":1}}],["информативен",{"2":{"158":1}}],["информационной",{"2":{"424":1}}],["информационного",{"2":{"403":1}}],["информационный",{"2":{"140":1,"156":1,"205":1}}],["информацией",{"2":{"172":1,"174":1,"209":1,"225":1,"316":1,"362":1,"371":2,"403":1,"407":1,"424":1,"515":1}}],["информации",{"2":{"82":1,"83":1,"123":1,"136":1,"157":1,"166":1,"169":1,"175":1,"204":2,"247":1,"347":1,"371":1,"395":1,"403":2,"404":1,"405":1,"410":1,"418":1,"475":1,"491":1,"502":2}}],["информация",{"2":{"31":1,"44":1,"50":1,"118":1,"123":1,"172":1,"342":1,"363":1,"405":1,"423":1,"456":1,"477":1,"502":1,"503":1}}],["информацию",{"2":{"11":1,"135":1,"164":1,"165":1,"167":1,"169":1,"171":1,"172":1,"183":1,"209":1,"212":1,"234":1,"247":1,"336":1,"337":1,"342":1,"346":1,"349":1,"365":1,"368":1,"370":1,"371":3,"432":1,"464":1,"491":1}}],["инфраструктуры",{"2":{"145":1}}],["инфраструктуре",{"2":{"142":1}}],["инсталляторов",{"2":{"468":1}}],["инсталляторах",{"2":{"165":1}}],["инсталируемым",{"2":{"382":1}}],["инстанцированный",{"2":{"313":1}}],["инстанцировании",{"2":{"304":2}}],["инстанцирования",{"2":{"287":1,"301":1,"304":1,"309":1,"334":1}}],["инстанцирование",{"2":{"128":2}}],["инстанцировать",{"2":{"211":1,"331":1,"333":1}}],["инстанцию",{"2":{"129":1}}],["инструкцию",{"2":{"325":1}}],["инструкций",{"2":{"153":1}}],["инструкциями",{"2":{"264":1}}],["инструкциям",{"2":{"211":1,"261":1,"404":1,"468":1}}],["инструкция",{"2":{"152":1,"512":1}}],["инструкции",{"2":{"152":2,"211":1,"424":1}}],["инструменту",{"2":{"280":1}}],["инструментах",{"2":{"417":1,"451":1,"453":1,"472":1}}],["инструментария",{"2":{"294":1}}],["инструментам",{"2":{"214":1,"331":1}}],["инструментами",{"2":{"151":1,"280":1,"397":1,"455":1}}],["инструмента",{"2":{"208":2,"210":1,"280":1,"462":1,"476":1,"541":1}}],["инструментов",{"2":{"207":2,"219":1,"278":1,"287":1,"312":1,"331":1,"382":1,"384":1,"412":1,"413":1,"417":1,"422":1,"451":2,"453":1,"454":1,"456":1,"459":1,"475":1}}],["инструменты",{"0":{"209":1},"2":{"139":1,"207":1,"208":3,"219":1,"243":1,"276":2,"280":2,"282":1,"331":1,"350":1,"377":1,"391":1,"394":1,"401":1,"421":1,"454":2,"457":1,"459":1,"460":1,"468":2,"475":1,"477":2,"492":1}}],["инструмент",{"2":{"43":1,"210":2,"214":1,"223":1,"256":1,"257":1,"279":1,"413":1,"464":1,"465":1,"489":1}}],["инета",{"2":{"124":1}}],["индустрии",{"2":{"378":1,"477":1}}],["индивидуальных",{"2":{"270":1}}],["индивидуальные",{"2":{"198":1}}],["индивидуально",{"2":{"123":1}}],["индикатором",{"2":{"176":2}}],["индикаторов",{"2":{"176":1}}],["индикаторы",{"2":{"176":1}}],["индикатора",{"2":{"176":1}}],["индексу",{"2":{"462":1}}],["индексный",{"2":{"343":1}}],["индексировать",{"2":{"492":1}}],["индексироваться",{"2":{"270":1,"343":1}}],["индексированные",{"2":{"343":1}}],["индексируемыми",{"2":{"343":1}}],["индексируется",{"2":{"492":1}}],["индексирует",{"2":{"51":1}}],["индексы",{"2":{"231":1}}],["индекс",{"2":{"231":1}}],["индексация",{"2":{"51":1}}],["индексации",{"2":{"17":1,"354":1,"492":2}}],["индекса",{"2":{"17":1}}],["ином",{"2":{"294":1,"446":1}}],["иной",{"2":{"96":1,"127":1,"135":1,"161":1,"222":2,"352":1,"424":1,"541":1}}],["иное",{"2":{"59":1,"131":1,"272":1,"541":1}}],["иного",{"2":{"23":1,"490":1}}],["иногда",{"2":{"4":1,"157":1,"218":1,"314":1,"325":1,"354":1,"431":2,"449":1,"450":1,"476":1,"490":1,"492":2}}],["их",{"2":{"2":1,"12":1,"20":1,"26":1,"38":1,"62":1,"69":3,"88":1,"92":2,"96":2,"106":1,"107":1,"124":1,"131":3,"132":1,"142":4,"144":1,"153":1,"161":1,"165":1,"166":2,"170":1,"176":1,"184":1,"187":1,"192":1,"193":1,"204":1,"205":1,"206":1,"207":1,"209":1,"210":7,"211":3,"213":4,"214":1,"215":1,"222":3,"224":2,"225":2,"226":1,"234":4,"240":1,"241":1,"245":1,"247":1,"248":1,"252":2,"253":3,"254":1,"255":2,"257":2,"258":1,"260":2,"264":1,"268":2,"270":3,"272":1,"278":2,"283":1,"286":2,"289":1,"290":1,"293":1,"294":1,"299":1,"302":1,"306":1,"311":1,"312":1,"314":1,"316":2,"320":1,"323":1,"324":2,"326":2,"327":2,"329":2,"331":2,"336":1,"339":2,"341":1,"343":1,"344":1,"346":1,"349":1,"350":1,"351":1,"352":2,"354":4,"357":1,"358":1,"359":1,"362":2,"364":2,"368":4,"369":2,"370":2,"371":1,"374":1,"375":1,"376":1,"377":1,"378":1,"394":1,"403":1,"407":1,"409":1,"410":2,"412":1,"415":1,"417":4,"418":4,"424":1,"431":1,"432":4,"433":3,"437":4,"442":1,"446":1,"448":1,"450":6,"451":1,"453":2,"454":1,"455":1,"456":3,"457":1,"460":1,"462":2,"463":1,"467":1,"468":1,"471":1,"472":1,"474":1,"477":2,"479":1,"482":3,"485":1,"486":1,"491":1,"506":1,"538":1,"542":1,"547":1}}],["и",{"0":{"1":1,"3":1,"16":1,"59":1,"69":1,"72":1,"75":1,"76":1,"90":1,"115":1,"118":1,"123":1,"128":1,"129":1,"132":1,"134":1,"135":1,"136":1,"142":1,"145":1,"160":1,"161":1,"162":1,"170":1,"176":1,"178":1,"180":1,"191":1,"201":1,"209":1,"210":1,"226":1,"230":1,"231":1,"233":1,"236":1,"238":1,"239":1,"246":1,"247":1,"248":1,"249":1,"251":1,"252":1,"253":1,"255":1,"257":1,"258":1,"283":1,"292":1,"358":1,"363":1,"370":1,"371":1,"380":1,"390":1,"397":1,"408":1,"418":1,"419":1,"433":1,"440":1,"446":1,"451":1,"453":1,"456":1,"466":1,"473":1,"476":1,"485":1,"488":1,"490":1,"492":1,"501":1,"507":1,"536":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"77":1,"78":1,"79":1,"80":1,"144":1,"146":1,"147":1,"148":1,"149":1,"150":1,"177":1,"179":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"259":1,"284":1,"285":1,"286":1,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"326":1,"327":1,"328":1,"359":1,"360":1,"364":1,"365":1,"381":1,"382":1,"383":1,"384":1,"385":1,"386":1,"387":1,"409":1,"410":1,"420":1,"421":1,"434":1,"435":1,"436":1,"452":1,"453":1,"454":1,"455":1,"456":1,"457":2,"458":1,"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1,"467":1,"468":1,"469":1,"470":1,"471":1,"472":1,"473":1,"474":1,"475":1,"476":1,"477":1,"478":1,"508":1},"2":{"2":2,"3":6,"4":5,"6":1,"7":1,"9":4,"10":1,"11":4,"12":2,"13":1,"16":2,"17":5,"18":1,"20":3,"22":2,"23":5,"26":5,"28":1,"34":1,"35":1,"36":2,"38":2,"39":3,"40":2,"41":2,"43":4,"44":1,"46":2,"47":1,"50":3,"51":2,"56":1,"58":2,"59":4,"61":1,"62":3,"63":3,"64":1,"65":1,"67":4,"68":8,"69":10,"71":2,"74":2,"77":4,"79":1,"80":5,"82":1,"83":4,"85":1,"89":3,"90":1,"92":2,"93":1,"95":2,"96":30,"98":5,"100":1,"101":1,"104":7,"105":1,"106":3,"107":4,"109":2,"111":2,"112":4,"113":4,"114":6,"115":1,"117":3,"118":1,"121":3,"122":6,"123":23,"124":16,"125":3,"126":4,"127":10,"128":4,"129":3,"130":1,"131":8,"132":7,"133":8,"134":2,"135":6,"138":2,"139":8,"141":1,"142":10,"143":2,"144":2,"145":11,"146":2,"147":1,"148":4,"149":4,"150":2,"151":6,"152":15,"153":8,"154":4,"155":13,"157":17,"158":5,"159":6,"160":8,"161":9,"162":8,"163":2,"164":4,"165":2,"166":11,"167":7,"168":1,"169":6,"170":10,"171":3,"172":4,"173":3,"174":4,"175":11,"176":8,"177":2,"178":13,"179":7,"180":2,"181":4,"182":2,"183":1,"184":8,"185":2,"186":6,"187":5,"188":1,"189":4,"190":4,"191":13,"192":4,"193":2,"194":1,"195":2,"196":2,"197":3,"198":2,"199":2,"201":1,"202":2,"203":1,"204":1,"205":7,"206":2,"207":7,"208":14,"209":21,"210":22,"211":13,"212":2,"213":17,"214":10,"215":8,"216":3,"217":26,"218":11,"219":5,"220":1,"221":24,"222":29,"223":15,"224":9,"225":15,"226":33,"227":1,"230":3,"231":1,"232":4,"233":4,"234":9,"235":2,"236":1,"237":4,"238":1,"239":1,"240":5,"241":4,"242":1,"243":8,"244":1,"245":4,"246":5,"247":10,"248":2,"249":6,"250":2,"251":4,"252":8,"253":5,"254":7,"255":12,"256":1,"257":6,"258":11,"259":2,"260":6,"262":1,"263":23,"264":15,"265":2,"266":5,"267":2,"268":9,"270":35,"272":5,"273":2,"274":3,"275":4,"276":2,"277":11,"278":11,"279":8,"280":4,"281":7,"282":3,"283":13,"284":5,"285":1,"286":6,"287":2,"288":13,"289":7,"290":14,"291":9,"292":5,"293":6,"294":9,"295":2,"296":1,"297":1,"298":1,"299":6,"300":4,"303":3,"304":4,"306":1,"307":1,"308":1,"309":1,"310":3,"311":3,"312":4,"313":2,"314":8,"315":10,"316":6,"317":1,"318":11,"319":13,"320":13,"321":2,"322":2,"323":10,"324":5,"325":6,"326":23,"327":5,"328":2,"329":6,"331":22,"332":2,"333":2,"334":4,"335":8,"336":6,"337":4,"338":12,"339":7,"340":9,"341":10,"342":6,"343":7,"344":6,"345":4,"346":2,"347":5,"348":1,"349":9,"350":9,"352":2,"354":33,"355":10,"356":4,"357":5,"359":18,"360":1,"361":4,"362":14,"363":8,"364":2,"365":9,"366":1,"367":1,"368":13,"369":5,"370":19,"371":20,"372":1,"373":3,"374":8,"375":11,"376":16,"377":24,"378":8,"379":3,"382":11,"383":5,"384":6,"387":3,"389":1,"390":2,"392":1,"394":1,"395":2,"396":1,"398":1,"399":3,"400":1,"401":3,"403":9,"404":3,"405":15,"406":2,"407":6,"408":5,"409":1,"410":11,"411":8,"412":10,"413":8,"414":7,"415":5,"417":13,"418":31,"419":5,"420":6,"421":5,"422":4,"423":3,"424":18,"425":5,"428":1,"429":1,"430":8,"431":18,"432":2,"433":6,"437":7,"440":8,"441":20,"442":3,"446":19,"448":17,"449":5,"450":34,"451":15,"453":22,"454":15,"455":9,"456":17,"457":20,"458":1,"459":3,"460":6,"461":2,"462":20,"463":4,"464":5,"465":5,"466":11,"467":10,"468":3,"469":3,"471":3,"472":10,"473":3,"474":11,"475":12,"476":10,"477":6,"478":4,"479":6,"481":2,"482":24,"483":22,"484":1,"486":5,"487":4,"488":2,"489":2,"490":22,"491":37,"492":31,"500":1,"501":3,"502":7,"503":1,"504":1,"508":5,"515":3,"522":2,"531":1,"533":1,"535":2,"537":2,"538":5,"540":4,"541":10,"542":14,"543":2,"546":1,"547":3,"552":2,"553":1,"561":2,"570":2,"572":1,"573":1,"576":2,"579":8,"580":6,"582":2,"587":2,"588":1,"589":3,"590":1,"591":2}}]],"serializationVersion":2}';export{t as default}; diff --git a/assets/chunks/@localSearchIndexru.jA8buYU-.js b/assets/chunks/@localSearchIndexru.jA8buYU-.js deleted file mode 100644 index 9c88e4b46..000000000 --- a/assets/chunks/@localSearchIndexru.jA8buYU-.js +++ /dev/null @@ -1 +0,0 @@ -const t='{"documentCount":592,"nextId":592,"documentIds":{"0":"/ru/articles/#наши-статьи-на-других-ресурсах","1":"/ru/arty-crafty/analysis/architecture-and-design.html#архитектура-и-дизаин","2":"/ru/arty-crafty/analysis/architecture-and-design.html#упрощение-сложного","3":"/ru/arty-crafty/analysis/architecture-and-design.html#абстракция-и-инкапсуляция","4":"/ru/arty-crafty/analysis/architecture-and-design.html#разбиение-проекта-на-подсистемы","5":"/ru/arty-crafty/analysis/architecture-and-design.html#package-diagram","6":"/ru/arty-crafty/analysis/architecture-and-design.html#клиент-серверная-архитектура","7":"/ru/arty-crafty/analysis/architecture-and-design.html#routing","8":"/ru/arty-crafty/analysis/business-analysis.html#бизнес-анализ","9":"/ru/arty-crafty/analysis/business-analysis.html#границы-проекта","10":"/ru/arty-crafty/analysis/business-analysis.html#существующие-решения","11":"/ru/arty-crafty/analysis/business-analysis.html#витрина","12":"/ru/arty-crafty/analysis/business-analysis.html#магазин","13":"/ru/arty-crafty/analysis/business-analysis.html#маркетплеис","14":"/ru/arty-crafty/analysis/business-analysis.html#use-case-диаграмма","15":"/ru/arty-crafty/analysis/data-model.html#модель-данных","16":"/ru/arty-crafty/analysis/data-model.html#категория-и-товар","17":"/ru/arty-crafty/analysis/data-model.html#типы-баз-данных","18":"/ru/arty-crafty/analysis/data-model.html#_1-json","19":"/ru/arty-crafty/analysis/data-model.html#_1-json-1","20":"/ru/arty-crafty/analysis/research.html#анализ-рынка","21":"/ru/arty-crafty/analysis/research.html#изучение-конкурентов","22":"/ru/arty-crafty/analysis/research.html#саиты-аналоги","23":"/ru/arty-crafty/analysis/tech-stack.html#техническии-стек-проекта","24":"/ru/arty-crafty/analysis/ui-design.html#ui-дизаин","25":"/ru/arty-crafty/analysis/ui-design.html#дизаин-саита","26":"/ru/arty-crafty/analysis/ui-design.html#творческие-способности","27":"/ru/arty-crafty/analysis/ui-layout.html#ui-макет","28":"/ru/arty-crafty/analysis/ui-layout.html#основные-компоненты-страницы","29":"/ru/arty-crafty/analysis/ui-layout.html#header","30":"/ru/arty-crafty/analysis/ui-layout.html#sidebar","31":"/ru/arty-crafty/analysis/ui-layout.html#main-panel","32":"/ru/arty-crafty/analysis/ui-layout.html#footer","33":"/ru/arty-crafty/analysis/ui-layout.html#мобильная-версия","34":"/ru/arty-crafty/analysis/ui-layout.html#слабая-связанность","35":"/ru/arty-crafty/analysis/ui-layout.html#адаптивность","36":"/ru/arty-crafty/analysis/ui-layout.html#вывод","37":"/ru/arty-crafty/backend/baas-choosing.html#выбор-baas-или-cms","38":"/ru/arty-crafty/backend/baas-choosing.html#json-фаилы-товаров","39":"/ru/arty-crafty/backend/baas-choosing.html#выбор-cms","40":"/ru/arty-crafty/backend/baas-choosing.html#сервисы-supabase","41":"/ru/arty-crafty/backend/baas-choosing.html#адаптеры","42":"/ru/arty-crafty/backend/db-data-model.html#модель-данных-в-базе-данных","43":"/ru/arty-crafty/backend/db-data-model.html#сущности","44":"/ru/arty-crafty/backend/db-data-model.html#данные","45":"/ru/arty-crafty/backend/db-data-model.html#categories-table","46":"/ru/arty-crafty/backend/db-data-model.html#products-table","47":"/ru/arty-crafty/backend/db-data-model.html#category-product-join-table","48":"/ru/arty-crafty/backend/db-data-model.html#поиск-по-json-полям","49":"/ru/arty-crafty/backend/hoppscotch.html#hoppscotch","50":"/ru/arty-crafty/backend/hoppscotch.html#работа-с-api","51":"/ru/arty-crafty/backend/hoppscotch.html#endpoints","52":"/ru/arty-crafty/backend/supabase-api.html#supabase-rest-api","53":"/ru/arty-crafty/backend/supabase-api.html#supabase-sdk","54":"/ru/arty-crafty/backend/supabase-api.html#установка","55":"/ru/arty-crafty/backend/supabase-api.html#использование","56":"/ru/arty-crafty/backend/supabase-api.html#supabase-rest-api-1","57":"/ru/arty-crafty/backend/supabase.html#supabase","58":"/ru/arty-crafty/backend/supabase.html#создание-проекта","59":"/ru/arty-crafty/backend/supabase.html#безопасность-и-доступ","60":"/ru/arty-crafty/#онлаин-маркетплеис","61":"/ru/arty-crafty/#проект-arty-crafty","62":"/ru/arty-crafty/#причины","63":"/ru/arty-crafty/#цель","64":"/ru/arty-crafty/#что-здесь-будет","65":"/ru/arty-crafty/#для-чего","66":"/ru/arty-crafty/introduction/goals.html#цели-и-задачи-проекта","67":"/ru/arty-crafty/introduction/goals.html#цели-данного-проекта","68":"/ru/arty-crafty/introduction/goals.html#нефункциональные-требования-software-quality-attributes","69":"/ru/arty-crafty/introduction/goals.html#общие-функциональные-требования","70":"/ru/arty-crafty/introduction/goals.html#этапы-развития-приложения-приблизительно","71":"/ru/arty-crafty/introduction/development-stages.html#план-работы","72":"/ru/arty-crafty/introduction/development-stages.html#стадии-разработки-по","73":"/ru/arty-crafty/introduction/development-stages.html#бизнес-анализ","74":"/ru/arty-crafty/introduction/development-stages.html#архитектура-и-дизаин","75":"/ru/arty-crafty/introduction/development-stages.html#разработка","76":"/ru/arty-crafty/introduction/development-stages.html#развертывание","77":"/ru/arty-crafty/introduction/development-stages.html#тестирование-и-qa","78":"/ru/arty-crafty/introduction/development-stages.html#документирование","79":"/ru/arty-crafty/introduction/development-stages.html#поддержка","80":"/ru/arty-crafty/introduction/repository.html#репозитории-и-саит-проекта","81":"/ru/arty-crafty/showcase-data/api-service-adapter.html#работа-с-api-на-фронтенде","82":"/ru/arty-crafty/showcase-data/api-service-adapter.html#supabase-адаптер","83":"/ru/arty-crafty/showcase-data/api-service-adapter.html#api-products-ts","84":"/ru/arty-crafty/showcase-data/product-page.html#слаидер-productview","85":"/ru/arty-crafty/showcase-data/product-page.html#embla-carousel","86":"/ru/arty-crafty/showcase-data/product-page.html#productview","87":"/ru/arty-crafty/showcase-data/mobile-menu.html#мобильное-меню-css","88":"/ru/arty-crafty/showcase-data/mobile-menu.html#iconbutton","89":"/ru/arty-crafty/showcase-data/mobile-menu.html#scss-css","90":"/ru/arty-crafty/showcase-data/mobile-menu.html#tag-и-cmv","91":"/ru/arty-crafty/showcase-data/typescript.html#typescript","92":"/ru/arty-crafty/showcase-data/typescript.html#index-d-ts","93":"/ru/arty-crafty/showcase-data/typescript.html#типизация","94":"/ru/arty-crafty/showcase-data/vueuse.html#vueuse","95":"/ru/arty-crafty/showcase-data/vueuse.html#uselocalstorage","96":"/ru/arty-crafty/showcase-data/vueuse.html#библиотека-vueuse","97":"/ru/arty-crafty/showcase/codeium.html#codeium","98":"/ru/arty-crafty/showcase/codeium.html#автокомплит","99":"/ru/arty-crafty/showcase/codeium.html#чат-бот","100":"/ru/arty-crafty/showcase/codeium.html#explain-refactor-jsdoc","101":"/ru/arty-crafty/showcase/codeium.html#explain-problem","102":"/ru/arty-crafty/showcase/codeium.html#вывод","103":"/ru/arty-crafty/showcase/customization.html#кастомизация","104":"/ru/arty-crafty/showcase/customization.html#персонализация","105":"/ru/arty-crafty/showcase/customization.html#views","106":"/ru/arty-crafty/showcase/customization.html#routes","107":"/ru/arty-crafty/showcase/customization.html#header","108":"/ru/arty-crafty/showcase/customization.html#sidebar","109":"/ru/arty-crafty/showcase/customization.html#небольшои-рефакторинг","110":"/ru/arty-crafty/showcase/favourites.html#избранное","111":"/ru/arty-crafty/showcase/favourites.html#иконка-на-карточке-товара","112":"/ru/arty-crafty/showcase/favourites.html#композабл-usefavourites","113":"/ru/arty-crafty/showcase/favourites.html#сохранение-между-сессиями","114":"/ru/arty-crafty/showcase/favourites.html#бэджик","115":"/ru/arty-crafty/showcase/favourites.html#tag-и-cmv","116":"/ru/arty-crafty/showcase/product-category.html#категория-товаров","117":"/ru/arty-crafty/showcase/product-category.html#layout","118":"/ru/arty-crafty/showcase/product-category.html#данные-и-api","119":"/ru/arty-crafty/showcase/project-setup.html#создание-проекта","120":"/ru/arty-crafty/showcase/project-setup.html#репозитории-на-github","121":"/ru/arty-crafty/showcase/project-setup.html#vue-webapp","122":"/ru/backend/api.html#api-сервис","123":"/ru/backend/auth.html#аутентификация-и-авторизация","124":"/ru/backend/backend.html#варианты-задеиствовать-свои-бэкенд-для-фронтендера","125":"/ru/backend/cors.html#cors","126":"/ru/book/Appendix__Migrating_from_Vue_2.html#приложение-миграция-с-vue-2","127":"/ru/book/Appendix__Migrating_from_Vue_2.html#другои-способ-загрузки-и-запуска-приложения","128":"/ru/book/Appendix__Migrating_from_Vue_2.html#регистрация-глобальных-компонентов-плагинов-и-так-далее","129":"/ru/book/Appendix__Migrating_from_Vue_2.html#своиство-data-теперь-всегда-является-функциеи","130":"/ru/book/Appendix__Migrating_from_Vue_2.html#больше-реактивных-возможностеи","131":"/ru/book/Appendix__Migrating_from_Vue_2.html#изменения-в-v-model-props-и-events","132":"/ru/book/Appendix__Migrating_from_Vue_2.html#удалена-совместимость-со-старыми-браузерами","133":"/ru/book/Appendix__Migrating_from_Vue_2.html#изменения-в-организации-каталогов-и-фаилов","134":"/ru/book/Appendix__Migrating_from_Vue_2.html#изменения-в-роутере-и-state-manager","135":"/ru/book/Appendix__Migrating_from_Vue_2.html#новые-компоненты-и-другие-изменения","136":"/ru/book/Appendix__Migrating_from_Vue_2.html#другие-изменения","137":"/ru/book/Appendix__Migrating_from_Vue_2.html#итог","138":"/ru/backend/protocols.html#протоколы-to-rest-или-не-rest","139":"/ru/book/Chapter_10__Deploying_Your_Application.html#развертывание-приложения","140":"/ru/book/Chapter_10__Deploying_Your_Application.html#технические-требования","141":"/ru/book/Chapter_10__Deploying_Your_Application.html#что-включает-в-себя-публикация-веб-приложения","142":"/ru/book/Chapter_10__Deploying_Your_Application.html#домены-серверы-доменных-имен-dns-и-записи-dns","143":"/ru/book/Chapter_10__Deploying_Your_Application.html#размышления-о-создании-приложения-для-развертывания","144":"/ru/book/Chapter_10__Deploying_Your_Application.html#chapter-5-to-do-spa-src-router-index-js","145":"/ru/book/Chapter_10__Deploying_Your_Application.html#опции-и-конфигурации-веб-сервера","146":"/ru/book/Chapter_10__Deploying_Your_Application.html#конфигурация-http-сервера-apache","147":"/ru/book/Chapter_10__Deploying_Your_Application.html#htaccess","148":"/ru/book/Chapter_10__Deploying_Your_Application.html#настроика-сервера-nginx","149":"/ru/book/Chapter_10__Deploying_Your_Application.html#etc-nginx-sites-available-default","150":"/ru/book/Chapter_10__Deploying_Your_Application.html#другие-серверы","151":"/ru/book/Chapter_10__Deploying_Your_Application.html#перенос-фаилов-на-сервер","152":"/ru/book/Chapter_10__Deploying_Your_Application.html#защита-веб-приложения-с-помощью-let-s-encrypt","153":"/ru/book/Chapter_10__Deploying_Your_Application.html#подведение-итогов","154":"/ru/book/Chapter_10__Deploying_Your_Application.html#вопросы-для-проверки","155":"/ru/book/Chapter_1__The_Vue_3_Framework.html#фреимворк-vue-3","156":"/ru/book/Chapter_1__The_Vue_3_Framework.html#прогрессивныи-фреимворк","157":"/ru/book/Chapter_1__The_Vue_3_Framework.html#использование-vue-в-веб-приложении","158":"/ru/book/Chapter_1__The_Vue_3_Framework.html#путь-сборщика-лучшии-путь","159":"/ru/book/Chapter_1__The_Vue_3_Framework.html#понимание-однофаиловых-компонентов","160":"/ru/book/Chapter_1__The_Vue_3_Framework.html#разные-варианты-options-composition-и-script-setup-api","161":"/ru/book/Chapter_1__The_Vue_3_Framework.html#изучение-встроенных-директив-в-vue-3","162":"/ru/book/Chapter_1__The_Vue_3_Framework.html#v-bind-сокращение","163":"/ru/book/Chapter_1__The_Vue_3_Framework.html#v-show","164":"/ru/book/Chapter_1__The_Vue_3_Framework.html#v-if-v-else-и-v-else-if","165":"/ru/book/Chapter_1__The_Vue_3_Framework.html#v-for-и-key","166":"/ru/book/Chapter_1__The_Vue_3_Framework.html#v-model","167":"/ru/book/Chapter_1__The_Vue_3_Framework.html#v-on-и-сокращение","168":"/ru/book/Chapter_1__The_Vue_3_Framework.html#встроенные-компоненты","169":"/ru/book/Chapter_1__The_Vue_3_Framework.html#кодовые-соглашения-code-conventions-в-книге","170":"/ru/book/Chapter_1__The_Vue_3_Framework.html#переменные-и-пропсы","171":"/ru/book/Chapter_1__The_Vue_3_Framework.html#константы","172":"/ru/book/Chapter_1__The_Vue_3_Framework.html#имена-классов-и-компонентов","173":"/ru/book/Chapter_1__The_Vue_3_Framework.html#функции-методы-события-и-имена-фаилов","174":"/ru/book/Chapter_1__The_Vue_3_Framework.html#экземпляры","175":"/ru/book/Chapter_1__The_Vue_3_Framework.html#подведение-итогов","176":"/ru/book/Chapter_1__The_Vue_3_Framework.html#вопросы-для-проверки","177":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#установка-рабочего-проекта","178":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#технические-требования","179":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#настроика-проекта-и-инструменты","180":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#структура-папок-и-ее-модификации","181":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#интеграция-с-css-фреимворками","182":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#фреимворк-w3-css","183":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#fontawesome-это-просто-замечательно","184":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#опции-конфигурации-vite","185":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#приложение-to-do","186":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#app-vue","187":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#todos-vue","188":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#краткая-критика-нашего-приложения-to-do","189":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#подведение-итогов","190":"/ru/book/Chapter_3__Setting_Up_a_Working_Project.html#вопросы-для-проверки","191":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#принципы-и-шаблоны-проектирования-программного-обеспечения","192":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#каковы-принципы-проектирования-программного-обеспечения","193":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#неполныи-список-принципов-проектирования","194":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#separation-of-concerns-разделение-ответственности","195":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#composition-over-inheritance-композиция-над-наследованием","196":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#single-responsibility-principle-принцип-единои-ответственности","197":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#encapsulation-инкапсуляция","198":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#kic-keep-it-clean","199":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#dry-–-don-t-repeat-yourself-не-повторяися","200":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#kiss-keep-it-simple-and-short-держи-это-простым-и-коротким","201":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#code-for-the-next-пиши-код-для-следующего","202":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#что-такое-шаблон-проектирования-программного-обеспечения","203":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#краткии-справочныи-список-шаблонов","204":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#порождающие-шаблоны","205":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#поведенческие-шаблоны","206":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#структурные-шаблоны","207":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#асинхронные-шаблоны","208":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#шаблон-singleton","209":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#когда-его-использовать","210":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#реализация","211":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#метод-1","212":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#метод-2","213":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#шаблон-dependency-injection-инъекция-зависимостеи","214":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-dependency-injection-1-js","215":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-dependency-injection-2-js","216":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-dependency-injection-3-js","217":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-dependency-injection-4-js","218":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-dependency-injection-5-js","219":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-dependency-injection-6-js","220":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-dependency-injection-7-js","221":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#шаблон-factory-фабрика","222":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#шаблон-observer-наблюдатель","223":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-observer-1-js","224":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#шаблон-command-команда","225":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-command-1-js","226":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#шаблон-proxy","227":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-proxy-1-js","228":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#шаблон-decorator-декоратор","229":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-decorator-1-vue","230":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-decorator-2-vue","231":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#шаблон-facade-фасад","232":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#шаблон-callback-обратныи-вызов","233":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#chapter-2-callback-1-js-синхронныи-фибоначчи","234":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#шаблон-promise-обещаниe","235":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#подведение-итогов","236":"/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html#вопросы-для-проверки","237":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#бонусная-глава-шаблоны-ux","238":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#технические-требования","239":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#ui-дизаин-против-ux-дизаина","240":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#принципы-проектирования-пользовательского-интерфеиса","241":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#достаточныи-контраст-или-различие-между-элементами","242":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#стимулировать-повторение-и-быть-последовательным","243":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#внимательно-следите-за-выравниванием-и-направлением","244":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#используите-близость-и-расстояние-чтобы-показать-естественные-группы","245":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#законы-проектирования-пользовательского-интерфеиса","246":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#закон-фитта","247":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#закон-хика","248":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#восемь-правил-бена-шнаидермана","249":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#принципы-проектирования-ux","250":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#общие-шаблоны-для-работы-с-данными","251":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#элементы-ввода-html","252":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#чекбоксы-радиокнопки-и-тумблеры","253":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#чипы-таблетки-или-теги","254":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#подсказки-tooltips","255":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#уведомляющие-точки-пузырьки-метки-или-значки","256":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#тостовые-уведомления","257":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#карусель-или-слаидеры-изображении","258":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#панели-прогресса-progress-bars-и-спиннеры","259":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#components-spinner-vue","260":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#пагинация-пеиджер-и-бесконечныи-скроллер","261":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#src-components-infinitescroller-vue","262":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#общие-шаблоны-для-взаимодеиствия-и-навигации","263":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#размещение-меню","264":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#хлебные-крошки-breadcrumbs","265":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#модальные-диалоги","266":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#иконки-меню","267":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#аккордеонные-меню","268":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#мегаменю","269":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#выпадающие-меню","270":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#общие-шаблоны-для-организации-контента","271":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#отзывчивые-responsive-приложения","272":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#домашняя-ссылка","273":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#главная-hero-секция-призыв-к-деиствию-call-to-action-и-иконки-социальных-сетеи","274":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#другие-шаблоны","275":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#темные-шаблоны","276":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#вопросы-с-подвохом","277":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#проникновение-в-корзину","278":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#приманка-для-тараканов-roach-motels","279":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#privacy-zuckering","280":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#предотвращение-сравнения-цен","281":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#ненаправленность","282":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#скрытые-расходы","283":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#приманка-и-подмена","284":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#подтверждение-позора-confirm-shaming","285":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#замаскированная-реклама","286":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#дружественныи-спам","287":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#подведение-итогов","288":"/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html#вопросы-для-проверки","289":"/ru/book/Chapter_6__Progressive_Web_Applications.html#прогрессивные-веб-приложения","290":"/ru/book/Chapter_6__Progressive_Web_Applications.html#технические-требования","291":"/ru/book/Chapter_6__Progressive_Web_Applications.html#pwa-или-устанавливаемые-spa","292":"/ru/book/Chapter_6__Progressive_Web_Applications.html#увеличение-spa-до-уровня-pwa","293":"/ru/book/Chapter_6__Progressive_Web_Applications.html#фаил-манифеста","294":"/ru/book/Chapter_6__Progressive_Web_Applications.html#необходимо","295":"/ru/book/Chapter_6__Progressive_Web_Applications.html#рекомендуется","296":"/ru/book/Chapter_6__Progressive_Web_Applications.html#описательные","297":"/ru/book/Chapter_6__Progressive_Web_Applications.html#тестирование-манифеста","298":"/ru/book/Chapter_6__Progressive_Web_Applications.html#подсказка-к-установке-install-prompt","299":"/ru/book/Chapter_6__Progressive_Web_Applications.html#service-workers","300":"/ru/book/Chapter_6__Progressive_Web_Applications.html#плагин-vite-pwa","301":"/ru/book/Chapter_6__Progressive_Web_Applications.html#тестирование-показателеи-pwa-с-помощью-google-lighthouse","302":"/ru/book/Chapter_6__Progressive_Web_Applications.html#подведение-итогов","303":"/ru/book/Chapter_6__Progressive_Web_Applications.html#вопросы-для-проверки","304":"/ru/book/Chapter_7__Data_Flow_Management.html#управление-потоками-данных","305":"/ru/book/Chapter_7__Data_Flow_Management.html#технические-требования","306":"/ru/book/Chapter_7__Data_Flow_Management.html#основное-взаимодеиствие-компонентов","307":"/ru/book/Chapter_7__Data_Flow_Management.html#basic-parentbasic-vue","308":"/ru/book/Chapter_7__Data_Flow_Management.html#basic-child-vue","309":"/ru/book/Chapter_7__Data_Flow_Management.html#реализация-шины-событии-с-помощью-шаблонов-singleton-и-observer","310":"/ru/book/Chapter_7__Data_Flow_Management.html#services-messagebus-js","311":"/ru/book/Chapter_7__Data_Flow_Management.html#bus-child-vue","312":"/ru/book/Chapter_7__Data_Flow_Management.html#реализация-базового-реактивного-состояния","313":"/ru/book/Chapter_7__Data_Flow_Management.html#service-simplestate-js","314":"/ru/book/Chapter_7__Data_Flow_Management.html#реализация-мощного-реактивного-стора-с-помощью-pinia","315":"/ru/book/Chapter_7__Data_Flow_Management.html#options-api-basic-store","316":"/ru/book/Chapter_7__Data_Flow_Management.html#stores-counter-js","317":"/ru/book/Chapter_7__Data_Flow_Management.html#main-js","318":"/ru/book/Chapter_7__Data_Flow_Management.html#pinia-childpinia-vue","319":"/ru/book/Chapter_7__Data_Flow_Management.html#хранилища-данных-браузера-сессионные-локальные-и-indexeddb","320":"/ru/book/Chapter_7__Data_Flow_Management.html#экспериментируем-с-шаблонами-reactivity-и-proxies","321":"/ru/book/Chapter_7__Data_Flow_Management.html#services-sessionstorage-js","322":"/ru/book/Chapter_7__Data_Flow_Management.html#session-storage-childsession-vue","323":"/ru/book/Chapter_7__Data_Flow_Management.html#подведение-итогов","324":"/ru/book/Chapter_7__Data_Flow_Management.html#вопросы-для-проверки","325":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#многопоточность-с-web-workers","326":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#технические-требования","327":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#введение-в-web-workers","328":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#реализация-web-worker","329":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#my-worker-js","330":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#main-js","331":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#шаблон-business-delegate","332":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#шаблон-dispatcher","333":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#установка-конвеиера-взаимодеиствия-с-веб-рабочим","334":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#services-webworker-js","335":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#webworker-index-js","336":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#webworker-services-test-js","337":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#получение-доступа-к-indexeddb-с-помощью-dexiejs-в-web-worker","338":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#src-components-dbnotes-vue","339":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#src-webworker-services-dbservice-js","340":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#src-webworker-index-js","341":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#webworker-services-network-js","342":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#webworker-index-js-1","343":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#src-components-networkcommunication-vue","344":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#простои-nodejs-сервер-для-тестирования","345":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#server-index-js","346":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#подведение-итогов","347":"/ru/book/Chapter_8__Multithreading_with_Web_Workers.html#вопросы-для-проверки","348":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#композиция-пользовательского-интерфеиса-с-помощью-компонентов","349":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#технические-требования","350":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#составление-страницы-с-помощью-компонентов","351":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#этап-1-определение-макетов-и-элементов-пользовательского-интерфеиса","352":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#шаг-2-определение-связеи-потока-данных-взаимодеиствии-и-событии","353":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#шаг-3-определение-элементов-пользовательскои-интерактивности-входов-диалогов-уведомлении-и-т-д","354":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#шаг-4-выявление-шаблонов-проектирования-и-компромиссов","355":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#компоненты-в-деталях","356":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#локальные-и-глобальные-компоненты","357":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#статическии-асинхронныи-и-динамическии-импорт","358":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#пропсы-события-и-директива-v-model","359":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#настраиваемые-контроллеры-ввода","360":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#инъекция-зависимости-с-помощью-provide-и-inject","361":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#специальные-компоненты","362":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#слоты-слоты-и-еще-раз-слоты","363":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#композабл-функции-composables-и-миксины","364":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#динамические-компоненты-с-помощью-component-is","365":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#реальныи-пример-плагин-модалов","366":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#настроика-нашего-проекта","367":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#конструкция","368":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#реализация","369":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#реализация-нашего-нового-приложения-to-do","370":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#небольшая-критика-нашего-нового-приложения-to-do","371":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#подведение-итогов","372":"/ru/book/Chapter_4__User_Interface_Composition_with_Components.html#вопросы-для-проверки","373":"/ru/book/#vue-js-3-шаблоны-проектирования-и-лучшие-практики","374":"/ru/book/#здесь-представлен-перевод-книги-vue-js-3-design-patterns-and-best-practices-на-русскии-язык","375":"/ru/book/#предисловие","376":"/ru/book/#для-кого-эта-книга","377":"/ru/book/#чтобы-получить-максимальную-пользу-от-этои-книги","378":"/ru/book/#купить-книгу","379":"/ru/book/#скачать-фаилы-кода-примеров","380":"/ru/book/#код-в-деиствии","381":"/ru/book/summary.html#что-включает-в-себя-эта-книга","382":"/ru/book/summary.html#глава-1-фреимворк-vue-3","383":"/ru/book/summary.html#глава-2-принципы-и-шаблоны-проектирования-программного-обеспечения","384":"/ru/book/summary.html#глава-3-создание-рабочего-проекта","385":"/ru/book/summary.html#глава-4-композиция-пользовательского-интерфеиса-с-помощью-компонентов","386":"/ru/book/summary.html#глава-5-одностраничные-приложения","387":"/ru/book/summary.html#глава-6-прогрессивные-веб-приложения","388":"/ru/book/summary.html#глава-7-управление-потоками-данных","389":"/ru/book/summary.html#глава-8-многопоточность-с-помощью-web-workers","390":"/ru/book/summary.html#глава-9-тестирование-и-контроль-исходных-текстов","391":"/ru/book/summary.html#глава-10-развертывание-приложения","392":"/ru/book/summary.html#глава-11-ux-patterns","393":"/ru/book/summary.html#приложение-миграция-с-vue-2-на-vue-3","394":"/ru/deployment/ci-cd.html#ci-cd","395":"/ru/deployment/docker.html#docker","396":"/ru/deployment/github-actions.html#github-actions","397":"/ru/book/Chapter_5__Single-Page_Applications.html#одностраничные-приложения","398":"/ru/book/Chapter_5__Single-Page_Applications.html#технические-требования","399":"/ru/book/Chapter_5__Single-Page_Applications.html#что-такое-spa","400":"/ru/book/Chapter_5__Single-Page_Applications.html#vue-3-роутер","401":"/ru/book/Chapter_5__Single-Page_Applications.html#установка","402":"/ru/book/Chapter_5__Single-Page_Applications.html#новое-приложение-to-do","403":"/ru/book/Chapter_5__Single-Page_Applications.html#определение-маршрутов-и-объект-router","404":"/ru/book/Chapter_5__Single-Page_Applications.html#src-router-index-js","405":"/ru/book/Chapter_5__Single-Page_Applications.html#src-main-js","406":"/ru/book/Chapter_5__Single-Page_Applications.html#шаблонные-компоненты-маршрутизатора","407":"/ru/book/Chapter_5__Single-Page_Applications.html#app-vue","408":"/ru/book/Chapter_5__Single-Page_Applications.html#вложенные-маршруты-именованные-представления-и-программная-навигация","409":"/ru/book/Chapter_5__Single-Page_Applications.html#определение-вложенных-маршрутов","410":"/ru/book/Chapter_5__Single-Page_Applications.html#src-views-directory-vue-component-lines-13-18","411":"/ru/book/Chapter_5__Single-Page_Applications.html#push","412":"/ru/book/Chapter_5__Single-Page_Applications.html#replace","413":"/ru/book/Chapter_5__Single-Page_Applications.html#go","414":"/ru/book/Chapter_5__Single-Page_Applications.html#исследование-шаблонов-аутентификации","415":"/ru/book/Chapter_5__Single-Page_Applications.html#простая-аутентификация-по-имени-пользователя-и-паролю","416":"/ru/book/Chapter_5__Single-Page_Applications.html#openid-и-сторонняя-аутентификация","417":"/ru/book/Chapter_5__Single-Page_Applications.html#_1","418":"/ru/book/Chapter_5__Single-Page_Applications.html#_2","419":"/ru/book/Chapter_5__Single-Page_Applications.html#_3","420":"/ru/book/Chapter_5__Single-Page_Applications.html#беспарольная-аутентификация-или-аутентификация-по-одноразовому-паролю-otp","421":"/ru/book/Chapter_5__Single-Page_Applications.html#_2fa-двухфакторная-аутентификация","422":"/ru/book/Chapter_5__Single-Page_Applications.html#web3-аутентификация","423":"/ru/book/Chapter_5__Single-Page_Applications.html#подведение-итогов","424":"/ru/book/Chapter_5__Single-Page_Applications.html#вопросы-для-проверки","425":"/ru/deployment/hosting.html#хостинг","426":"/ru/development/assets.html#ресурсы-приложения","427":"/ru/development/assets.html#baseicon","428":"/ru/development/assets.html#icons-js","429":"/ru/development/building.html#создание-и-сборка-приложения","430":"/ru/development/ide.html#настроика-ide","431":"/ru/development/architectural-patterns.html#архитектурные-решения","432":"/ru/development/architectural-patterns.html#плоская","433":"/ru/development/architectural-patterns.html#атомарныи-дизаин","434":"/ru/development/architectural-patterns.html#модульныи-дизаин","435":"/ru/development/architectural-patterns.html#feature-sliced-design","436":"/ru/development/architectural-patterns.html#микрофронтенды","437":"/ru/development/architectural-patterns.html#use-cases","438":"/ru/development/architectural-patterns.html#лучшие-практики-и-соображения","439":"/ru/development/architectural-patterns.html#apploader-vue","440":"/ru/development/architectural-patterns.html#useapploader-ts","441":"/ru/development/architectural-patterns.html#somecomponent","442":"/ru/book/Chapter_9__Testing_and_Source_Control.html#тестирование-и-системы-контроля-версии","443":"/ru/book/Chapter_9__Testing_and_Source_Control.html#технические-требования","444":"/ru/book/Chapter_9__Testing_and_Source_Control.html#что-такое-тестирование-и-tdd","445":"/ru/book/Chapter_9__Testing_and_Source_Control.html#что-тестировать","446":"/ru/book/Chapter_9__Testing_and_Source_Control.html#наш-базовыи-пример-приложения","447":"/ru/book/Chapter_9__Testing_and_Source_Control.html#установка-и-использование-vitest","448":"/ru/book/Chapter_9__Testing_and_Source_Control.html#src-tests-fibonacci-test-js","449":"/ru/book/Chapter_9__Testing_and_Source_Control.html#специальныи-случаи-утверждения-намеренная-ошибка","450":"/ru/book/Chapter_9__Testing_and_Source_Control.html#специальныи-случаи-утверждения-асинхронныи-код","451":"/ru/book/Chapter_9__Testing_and_Source_Control.html#установка-vue-test-utils","452":"/ru/book/Chapter_9__Testing_and_Source_Control.html#src-tests-fibonaccioutput-test-js","453":"/ru/book/Chapter_9__Testing_and_Source_Control.html#src-tests-fibonacciinput-test-js","454":"/ru/book/Chapter_9__Testing_and_Source_Control.html#in-source-тестирование","455":"/ru/book/Chapter_9__Testing_and_Source_Control.html#покрытие","456":"/ru/book/Chapter_9__Testing_and_Source_Control.html#интерфеис-vitest","457":"/ru/book/Chapter_9__Testing_and_Source_Control.html#что-такое-source-control-и-зачем-он-нужен","458":"/ru/book/Chapter_9__Testing_and_Source_Control.html#управление-исходными-текстами-с-помощью-git","459":"/ru/book/Chapter_9__Testing_and_Source_Control.html#установка-в-системах-windows","460":"/ru/book/Chapter_9__Testing_and_Source_Control.html#установка-в-системах-linux","461":"/ru/book/Chapter_9__Testing_and_Source_Control.html#установка-в-системах-macos","462":"/ru/book/Chapter_9__Testing_and_Source_Control.html#использование-git","463":"/ru/book/Chapter_9__Testing_and_Source_Control.html#chapter-10-gitignore","464":"/ru/book/Chapter_9__Testing_and_Source_Control.html#управление-ветвями-и-слияниями","465":"/ru/book/Chapter_9__Testing_and_Source_Control.html#конфликты-при-слиянии","466":"/ru/book/Chapter_9__Testing_and_Source_Control.html#работа-с-удаленными-репозиториями","467":"/ru/book/Chapter_9__Testing_and_Source_Control.html#непрерывная-интеграция-и-доставка","468":"/ru/book/Chapter_9__Testing_and_Source_Control.html#подведение-итогов","469":"/ru/book/Chapter_9__Testing_and_Source_Control.html#вопросы-для-проверки","470":"/ru/development/libraries.html#подскажите-удобную-библиотеку","471":"/ru/development/misc.html#полезные-советы","472":"/ru/development/misc.html#карусель-или-слаидер","473":"/ru/development/misc.html#toaster","474":"/ru/development/misc.html#дата-и-время","475":"/ru/development/project-structure.html#структура-vue-3-проекта","476":"/ru/development/project-structure.html#какие-бывают-структуры-фаилов-для-vue-3-проектов","477":"/ru/development/project-structure.html#подходящая-структура-для-vue-3-проекта","478":"/ru/development/stores.html#state-management-во-vue-3","479":"/ru/development/testing.html#тестирование","480":"/ru/development/web-components.html#web-components","481":"/ru/development/web-components.html#custom-elements","482":"/ru/frontend/about-frameworks.html#о-фронтенд-фреимворках","483":"/ru/frontend/architecture.html#архитектура-фронтэнд-приложении","484":"/ru/frontend/architecture.html#избегаите-зависимостеи","485":"/ru/frontend/architecture.html#используите-обертки-над-компонентами-ui-библиотек-и-сторонних-утилит","486":"/ru/frontend/architecture.html#регулярныи-рефакторинг","487":"/ru/frontend/architecture.html#используите-css3","488":"/ru/frontend/architecture.html#используите-современные-стандарты-и-возможности-языков","489":"/ru/frontend/architecture.html#документируите-проект","490":"/ru/frontend/css-ui-libs.html#css-и-ui-библиотеки","491":"/ru/frontend/learning.html#изучение-vue","492":"/ru/frontend/spa-pwa-ssr-ssg.html#spa-pwa-ssg-ssr-и-seo","493":"/ru/misc/cheat-sheets.html#шпаргалки-cheat-sheet","494":"/ru/misc/cheat-sheets.html#vue","495":"/ru/misc/cheat-sheets.html#javascript","496":"/ru/misc/cheat-sheets.html#html","497":"/ru/misc/cheat-sheets.html#css","498":"/ru/misc/cheat-sheets.html#typescript","499":"/ru/misc/cheat-sheets.html#markdown","500":"/ru/misc/contribute.html#внесите-лепту-в-развитие-данного-ресурса","501":"/ru/misc/glossary.html#глоссарии-и-сокращения","502":"/ru/misc/introduction.html#предисловие","503":"/ru/misc/introduction.html#у-нас-есть-телеграм-канал","504":"/ru/release-timeline/config.html#конфигурация","505":"/ru/release-timeline/config.html#опции","506":"/ru/release-timeline/config.html#стилизация","507":"/ru/release-timeline/getting-data.html#данные-релизов-коммитов-и-пул-риквестов","508":"/ru/release-timeline/getting-data.html#получение-данных","509":"/ru/release-timeline/getting-started.html#установка","510":"/ru/release-timeline/getting-started.html#установка-пакета","511":"/ru/release-timeline/getting-started.html#использование-в-коде-vue-проекта","512":"/ru/release-timeline/getting-started.html#использование-в-vitepress","513":"/ru/release-timeline/getting-started.html#использование-как-web-component","514":"/ru/release-timeline/#release-timeline","515":"/ru/release-timeline/#визуализация-релизов","516":"/ru/release-timeline/#репозитории","517":"/ru/release-timeline/#demo","518":"/ru/release-timeline/#credits","519":"/ru/release-timeline/microfrontend.html#микрофронтенд","520":"/ru/release-timeline/microfrontend.html#подключение","521":"/ru/release-timeline/microfrontend.html#demo","522":"/ru/release-timeline/vitepress.html#vitepress","523":"/ru/release-timeline/vitepress.html#установка-пакета","524":"/ru/release-timeline/vitepress.html#подключение","525":"/ru/release-timeline/vitepress.html#css-переменные","526":"/ru/release-timeline/vue-3.html#vue-3-проект","527":"/ru/release-timeline/vue-3.html#установка-пакета","528":"/ru/release-timeline/vue-3.html#использование-во-vue-компоненте","529":"/ru/release-timeline/web-component.html#web-component","530":"/ru/release-timeline/web-component.html#подключение","531":"/ru/release-timeline/web-component.html#конфигурация","532":"/ru/release-timeline/web-component.html#demo","533":"/ru/vue-webapp/contribution.html#участие-в-проекте","534":"/ru/vue-webapp/getting-started.html#установка","535":"/ru/vue-webapp/getting-started.html#установка-через-create-vue-webapp","536":"/ru/vue-webapp/getting-started.html#инициализация-и-запуск-веб-приложения","537":"/ru/vue-webapp/getting-started.html#установка-из-репозитория","538":"/ru/vue-webapp/guidelines.html#принципы","539":"/ru/vue-webapp/#vue-3-webapp-билдер","540":"/ru/vue-webapp/#краткое-описание","541":"/ru/vue-webapp/#обоснование","542":"/ru/vue-webapp/objectives.html#цели","543":"/ru/vue-webapp/options/adaptability.html#адаптивность","544":"/ru/vue-webapp/options/api.html#api-модуль","545":"/ru/vue-webapp/options/api.html#api-rest","546":"/ru/vue-webapp/options/api.html#json-rpc","547":"/ru/vue-webapp/options/baseIcon.html#baseicon","548":"/ru/vue-webapp/options/description.html#детали-реализации","549":"/ru/vue-webapp/options/description.html#инъекции-кода-в-index-html","550":"/ru/vue-webapp/options/description.html#css-tricks","551":"/ru/vue-webapp/options/drawer.html#navigation-drawers","552":"/ru/vue-webapp/options/drawer.html#simpledrawer","553":"/ru/vue-webapp/options/drawer.html#touchslideoutdrawer","554":"/ru/vue-webapp/options/footer.html#footers","555":"/ru/vue-webapp/options/footer.html#simplefooter","556":"/ru/vue-webapp/options/footer.html#richfooter","557":"/ru/vue-webapp/options/footer.html#mantinesimplefooter","558":"/ru/vue-webapp/options/footer.html#mantinerichfooter","559":"/ru/vue-webapp/options/footer.html#distributedfooter","560":"/ru/vue-webapp/options/ga-gp.html#github-actions-сценарии-для-развертывания-на-github-pages","561":"/ru/vue-webapp/options/ga-gp.html#deployment","562":"/ru/vue-webapp/options/ga-gp.html#настроика-base-в-vite-конфиге","563":"/ru/vue-webapp/options/google-analytics.html#google-analytics","564":"/ru/vue-webapp/options/header.html#headers","565":"/ru/vue-webapp/options/header.html#simpleheader","566":"/ru/vue-webapp/options/header.html#mantinesimpleheader","567":"/ru/vue-webapp/options/header.html#mantinelayeredheader","568":"/ru/vue-webapp/options/header.html#slidingheader","569":"/ru/vue-webapp/options/#опции-при-создании-приложения","570":"/ru/vue-webapp/options/#доступные-опции","571":"/ru/vue-webapp/options/#доступно-по-умолчанию","572":"/ru/vue-webapp/options/#в-разработке","573":"/ru/vue-webapp/options/#в-планах","574":"/ru/vue-webapp/options/i18n.html#i18n","575":"/ru/vue-webapp/options/i18n.html#i18next","576":"/ru/vue-webapp/options/i18n.html#usei18nlight","577":"/ru/vue-webapp/options/i18n.html#использование","578":"/ru/vue-webapp/options/i18n.html#i18next-расширения","579":"/ru/vue-webapp/options/i18n.html#в-итоге","580":"/ru/vue-webapp/options/layout-main.html#mainlayout","581":"/ru/vue-webapp/options/layout-main.html#routing","582":"/ru/vue-webapp/options/layout-one-column.html#onecolumnlayout","583":"/ru/vue-webapp/options/navbar.html#navbar","584":"/ru/vue-webapp/options/navbar.html#simplenavbar","585":"/ru/vue-webapp/options/navbar.html#mantinesimplenavbar","586":"/ru/vue-webapp/options/pwa.html#pwa","587":"/ru/vue-webapp/options/pwa.html#manifest-json","588":"/ru/vue-webapp/options/pwa.html#service-worker","589":"/ru/vue-webapp/options/open-graph.html#google-analytics","590":"/ru/vue-webapp/options/splash-screen.html#splash-screen","591":"/ru/vue-webapp/options/themes.html#темы"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[5,1,6],"1":[3,1,1],"2":[2,3,97],"3":[3,3,119],"4":[4,3,99],"5":[2,3,13],"6":[3,3,40],"7":[1,3,34],"8":[2,1,1],"9":[2,2,62],"10":[2,2,41],"11":[1,2,95],"12":[1,2,119],"13":[1,2,36],"14":[3,2,36],"15":[2,1,1],"16":[3,2,78],"17":[3,2,132],"18":[2,4,33],"19":[2,4,10],"20":[2,1,1],"21":[2,2,13],"22":[2,2,136],"23":[3,1,119],"24":[2,1,1],"25":[2,2,36],"26":[2,2,81],"27":[2,1,21],"28":[3,2,16],"29":[1,5,47],"30":[1,5,25],"31":[2,5,13],"32":[1,5,16],"33":[2,2,34],"34":[2,2,44],"35":[1,2,31],"36":[1,2,43],"37":[4,1,1],"38":[3,4,33],"39":[2,4,107],"40":[2,4,79],"41":[1,4,149],"42":[4,1,1],"43":[1,4,49],"44":[1,4,46],"45":[2,5,1],"46":[2,5,1],"47":[4,5,92],"48":[4,4,81],"49":[1,1,1],"50":[3,1,58],"51":[1,1,70],"52":[3,1,1],"53":[2,3,16],"54":[2,4,6],"55":[2,4,37],"56":[3,3,99],"57":[1,1,1],"58":[2,1,32],"59":[3,1,116],"60":[2,1,1],"61":[3,2,32],"62":[1,2,81],"63":[1,2,47],"64":[4,2,44],"65":[3,2,53],"66":[4,1,1],"67":[4,4,68],"68":[6,4,14],"69":[3,4,15],"70":[5,4,86],"71":[2,1,1],"72":[3,2,46],"73":[2,2,116],"74":[3,2,130],"75":[1,2,9],"76":[1,2,18],"77":[3,2,10],"78":[1,2,10],"79":[1,2,23],"80":[4,1,13],"81":[5,1,1],"82":[2,5,29],"83":[3,7,91],"84":[2,1,1],"85":[2,2,46],"86":[1,2,11],"87":[3,1,1],"88":[1,3,59],"89":[4,3,114],"90":[3,3,12],"91":[1,1,1],"92":[3,1,39],"93":[1,1,41],"94":[1,1,1],"95":[1,1,87],"96":[2,1,423],"97":[1,1,1],"98":[1,1,89],"99":[2,1,10],"100":[3,1,95],"101":[2,1,30],"102":[1,1,13],"103":[1,1,1],"104":[1,1,94],"105":[1,1,38],"106":[1,1,73],"107":[1,1,66],"108":[1,1,16],"109":[2,1,18],"110":[1,1,1],"111":[4,1,96],"112":[2,1,105],"113":[3,1,75],"114":[1,1,126],"115":[3,1,12],"116":[2,1,1],"117":[1,2,58],"118":[3,2,62],"119":[2,1,1],"120":[3,2,16],"121":[2,2,174],"122":[2,1,201],"123":[3,1,399],"124":[6,1,258],"125":[1,1,228],"126":[5,1,148],"127":[6,5,82],"128":[7,5,81],"129":[6,5,97],"130":[3,5,187],"131":[7,5,121],"132":[5,5,175],"133":[6,5,58],"134":[6,5,86],"135":[6,5,50],"136":[2,5,21],"137":[1,5,73],"138":[6,1,153],"139":[2,1,85],"140":[2,2,23],"141":[8,2,73],"142":[7,9,463],"143":[6,2,151],"144":[10,14,143],"145":[5,2,276],"146":[4,7,51],"147":[2,10,69],"148":[3,7,92],"149":[6,9,98],"150":[2,7,44],"151":[4,2,167],"152":[8,2,253],"153":[2,2,112],"154":[3,2,55],"155":[3,1,278],"156":[2,3,474],"157":[5,3,269],"158":[5,7,231],"159":[3,3,292],"160":[8,3,542],"161":[6,3,48],"162":[5,7,58],"163":[2,7,67],"164":[4,7,97],"165":[4,7,95],"166":[2,7,91],"167":[5,7,134],"168":[2,3,267],"169":[6,3,46],"170":[3,9,18],"171":[1,9,44],"172":[4,9,17],"173":[6,9,9],"174":[1,9,119],"175":[2,3,49],"176":[3,3,68],"177":[3,1,164],"178":[2,3,292],"179":[4,3,363],"180":[5,3,470],"181":[4,3,278],"182":[3,7,153],"183":[4,3,323],"184":[3,3,255],"185":[3,3,165],"186":[2,9,187],"187":[2,9,583],"188":[6,9,207],"189":[2,3,75],"190":[3,3,59],"191":[6,1,198],"192":[6,6,64],"193":[4,6,25],"194":[6,9,195],"195":[7,9,123],"196":[7,9,210],"197":[3,9,104],"198":[4,9,274],"199":[8,9,182],"200":[12,9,128],"201":[9,9,167],"202":[7,6,185],"203":[4,6,39],"204":[2,19,16],"205":[2,19,14],"206":[2,19,18],"207":[2,19,70],"208":[2,10,50],"209":[3,12,52],"210":[1,12,37],"211":[2,13,78],"212":[2,13,151],"213":[6,10,78],"214":[7,16,39],"215":[6,16,93],"216":[7,16,38],"217":[7,16,101],"218":[7,16,193],"219":[7,16,115],"220":[7,16,137],"221":[4,10,83],"222":[4,10,175],"223":[6,14,232],"224":[4,10,129],"225":[6,14,133],"226":[2,10,267],"227":[6,12,258],"228":[4,10,303],"229":[6,14,112],"230":[5,14,91],"231":[4,10,274],"232":[5,10,210],"233":[8,15,248],"234":[4,10,421],"235":[2,6,92],"236":[3,6,42],"237":[4,1,168],"238":[2,4,59],"239":[5,4,223],"240":[4,4,172],"241":[6,8,150],"242":[6,8,180],"243":[6,8,116],"244":[8,8,145],"245":[4,8,35],"246":[2,8,139],"247":[2,8,120],"248":[4,8,211],"249":[3,8,118],"250":[6,4,45],"251":[3,10,101],"252":[4,13,145],"253":[4,13,122],"254":[3,13,141],"255":[6,13,96],"256":[2,13,117],"257":[4,13,159],"258":[6,13,211],"259":[4,19,79],"260":[5,13,243],"261":[5,18,240],"262":[6,4,29],"263":[2,13,118],"264":[4,13,103],"265":[2,13,81],"266":[2,13,152],"267":[2,13,76],"268":[1,13,194],"269":[2,13,77],"270":[5,4,12],"271":[3,9,236],"272":[2,9,136],"273":[13,9,205],"274":[2,9,56],"275":[2,4,78],"276":[3,6,88],"277":[3,6,106],"278":[6,6,74],"279":[2,6,82],"280":[3,6,50],"281":[1,6,57],"282":[2,6,39],"283":[3,6,53],"284":[5,6,82],"285":[2,6,108],"286":[2,6,72],"287":[2,4,97],"288":[3,4,42],"289":[3,1,167],"290":[2,3,52],"291":[4,3,459],"292":[5,3,39],"293":[2,8,172],"294":[2,10,112],"295":[2,10,56],"296":[2,10,140],"297":[2,8,69],"298":[6,8,391],"299":[2,3,360],"300":[3,3,230],"301":[7,3,138],"302":[2,3,79],"303":[3,3,55],"304":[3,1,150],"305":[2,3,79],"306":[3,3,235],"307":[4,6,94],"308":[4,6,188],"309":[9,3,153],"310":[4,12,46],"311":[4,12,259],"312":[4,3,127],"313":[4,7,253],"314":[7,3,178],"315":[4,10,174],"316":[4,10,163],"317":[3,10,45],"318":[4,10,260],"319":[7,3,476],"320":[6,3,110],"321":[4,9,215],"322":[5,9,127],"323":[2,3,71],"324":[3,3,52],"325":[4,1,149],"326":[2,4,57],"327":[4,4,516],"328":[3,7,162],"329":[4,10,133],"330":[3,10,121],"331":[3,4,216],"332":[2,4,113],"333":[6,4,142],"334":[4,12,234],"335":[4,12,174],"336":[5,12,153],"337":[11,4,197],"338":[5,14,251],"339":[6,14,216],"340":[5,14,241],"341":[5,14,178],"342":[4,14,69],"343":[5,14,158],"344":[5,4,75],"345":[4,12,280],"346":[2,4,115],"347":[3,4,50],"348":[6,1,160],"349":[2,6,30],"350":[5,6,114],"351":[8,8,172],"352":[9,8,233],"353":[13,8,131],"354":[7,8,168],"355":[3,6,31],"356":[4,9,159],"357":[5,9,305],"358":[6,9,170],"359":[3,9,239],"360":[7,9,274],"361":[2,6,48],"362":[6,8,367],"363":[5,6,283],"364":[8,11,203],"365":[4,6,99],"366":[3,10,36],"367":[1,10,80],"368":[1,10,456],"369":[6,6,422],"370":[7,6,88],"371":[2,6,95],"372":[3,6,61],"373":[8,1,4],"374":[16,8,1],"375":[1,8,124],"376":[4,8,50],"377":[7,8,144],"378":[2,8,14],"379":[4,8,24],"380":[3,8,41],"381":[6,1,1],"382":[5,6,20],"383":[8,6,26],"384":[5,6,32],"385":[8,6,22],"386":[4,6,15],"387":[5,6,19],"388":[5,6,26],"389":[7,6,28],"390":[7,6,32],"391":[4,6,27],"392":[4,6,29],"393":[7,6,16],"394":[2,1,64],"395":[1,1,1],"396":[2,1,450],"397":[2,1,108],"398":[2,2,33],"399":[4,2,397],"400":[3,2,124],"401":[1,5,150],"402":[4,5,158],"403":[5,5,24],"404":[5,10,345],"405":[4,10,46],"406":[3,5,81],"407":[2,5,439],"408":[7,5,170],"409":[3,12,101],"410":[9,12,354],"411":[2,5,57],"412":[2,5,15],"413":[2,5,258],"414":[3,2,222],"415":[7,5,315],"416":[4,5,469],"417":[2,5,106],"418":[2,5,118],"419":[2,5,207],"420":[8,5,321],"421":[3,5,288],"422":[2,5,459],"423":[2,2,109],"424":[3,2,64],"425":[1,1,137],"426":[2,1,201],"427":[1,2,71],"428":[2,2,118],"429":[4,1,216],"430":[2,1,863],"431":[2,1,8],"432":[1,2,51],"433":[2,2,102],"434":[2,2,69],"435":[3,2,138],"436":[1,2,359],"437":[2,2,78],"438":[4,2,184],"439":[2,6,22],"440":[2,6,28],"441":[1,6,40],"442":[5,1,191],"443":[2,5,46],"444":[5,5,296],"445":[2,5,232],"446":[4,5,183],"447":[4,5,266],"448":[6,8,392],"449":[5,5,107],"450":[5,5,149],"451":[4,5,150],"452":[6,9,182],"453":[6,9,331],"454":[3,5,154],"455":[1,5,194],"456":[2,5,127],"457":[9,5,203],"458":[6,5,163],"459":[4,5,75],"460":[4,5,86],"461":[4,5,39],"462":[2,5,191],"463":[4,7,215],"464":[4,5,65],"465":[3,5,231],"466":[4,5,267],"467":[4,5,141],"468":[2,5,87],"469":[3,5,63],"470":[3,1,42],"471":[2,1,8],"472":[3,2,15],"473":[1,2,3],"474":[3,2,347],"475":[4,1,1],"476":[9,4,453],"477":[6,4,131],"478":[5,1,587],"479":[1,1,162],"480":[2,1,1],"481":[2,2,74],"482":[3,1,416],"483":[3,1,404],"484":[2,3,78],"485":[9,3,41],"486":[2,3,29],"487":[2,3,47],"488":[6,3,18],"489":[2,3,30],"490":[4,1,223],"491":[2,1,501],"492":[6,1,538],"493":[4,1,1],"494":[1,4,5],"495":[1,4,4],"496":[1,4,4],"497":[1,4,6],"498":[1,4,8],"499":[1,4,2],"500":[6,1,36],"501":[3,1,66],"502":[1,1,80],"503":[5,1,23],"504":[1,1,6],"505":[1,1,84],"506":[1,1,82],"507":[6,1,1],"508":[2,6,108],"509":[1,1,1],"510":[2,1,8],"511":[5,1,45],"512":[3,1,2],"513":[4,1,37],"514":[2,1,1],"515":[2,2,86],"516":[1,2,2],"517":[1,2,12],"518":[1,2,6],"519":[1,1,1],"520":[1,1,51],"521":[1,1,19],"522":[1,1,16],"523":[2,1,8],"524":[1,1,32],"525":[2,1,33],"526":[3,1,1],"527":[2,3,8],"528":[4,3,42],"529":[2,1,1],"530":[1,2,68],"531":[1,2,115],"532":[1,2,19],"533":[3,1,17],"534":[1,1,1],"535":[5,1,128],"536":[5,5,13],"537":[3,1,38],"538":[1,1,144],"539":[4,1,1],"540":[2,4,70],"541":[1,4,175],"542":[1,1,171],"543":[1,1,81],"544":[2,1,1],"545":[3,2,103],"546":[2,2,89],"547":[1,1,67],"548":[2,1,1],"549":[5,2,41],"550":[2,2,27],"551":[2,1,11],"552":[1,2,21],"553":[1,2,22],"554":[1,1,9],"555":[1,1,1],"556":[1,1,1],"557":[1,1,1],"558":[1,1,1],"559":[1,1,1],"560":[7,1,1],"561":[1,7,78],"562":[5,7,38],"563":[2,1,41],"564":[1,1,4],"565":[1,1,4],"566":[1,1,8],"567":[1,1,9],"568":[1,1,32],"569":[4,1,1],"570":[2,4,77],"571":[3,4,21],"572":[2,4,11],"573":[2,4,80],"574":[1,1,1],"575":[1,1,97],"576":[1,1,16],"577":[1,1,54],"578":[2,1,52],"579":[2,1,16],"580":[1,1,27],"581":[1,1,10],"582":[1,1,43],"583":[1,1,13],"584":[1,1,1],"585":[1,1,1],"586":[1,1,13],"587":[2,1,54],"588":[2,1,60],"589":[2,1,34],"590":[2,1,44],"591":[1,1,80]},"averageFieldLength":[3.3361486486486496,4.805743243243243,111.12837837837833],"storedFields":{"0":{"title":"Наши статьи на других ресурсах","titles":[]},"1":{"title":"Архитектура и дизайн","titles":[]},"2":{"title":"Упрощение сложного","titles":["Архитектура и дизайн"]},"3":{"title":"Абстракция и инкапсуляция","titles":["Архитектура и дизайн"]},"4":{"title":"Разбиение проекта на подсистемы","titles":["Архитектура и дизайн"]},"5":{"title":"Package Diagram","titles":["Архитектура и дизайн"]},"6":{"title":"Клиент-серверная архитектура","titles":["Архитектура и дизайн"]},"7":{"title":"Routing","titles":["Архитектура и дизайн"]},"8":{"title":"Бизнес-анализ","titles":[]},"9":{"title":"Границы проекта","titles":["Бизнес-анализ"]},"10":{"title":"Существующие решения","titles":["Бизнес-анализ"]},"11":{"title":"Витрина","titles":["Бизнес-анализ"]},"12":{"title":"Магазин","titles":["Бизнес-анализ"]},"13":{"title":"Маркетплейс","titles":["Бизнес-анализ"]},"14":{"title":"Use case диаграмма","titles":["Бизнес-анализ"]},"15":{"title":"Модель данных","titles":[]},"16":{"title":"Категория и товар","titles":["Модель данных"]},"17":{"title":"Типы баз данных","titles":["Модель данных"]},"18":{"title":"1.json","titles":["Модель данных","Типы баз данных"]},"19":{"title":"1.json","titles":["Модель данных","Типы баз данных"]},"20":{"title":"Анализ рынка","titles":[]},"21":{"title":"Изучение конкурентов","titles":["Анализ рынка"]},"22":{"title":"Сайты-аналоги","titles":["Анализ рынка"]},"23":{"title":"Технический стек проекта","titles":[]},"24":{"title":"UI дизайн","titles":[]},"25":{"title":"Дизайн сайта","titles":["UI дизайн"]},"26":{"title":"Творческие способности","titles":["UI дизайн"]},"27":{"title":"UI макет","titles":[]},"28":{"title":"Основные компоненты страницы","titles":["UI макет"]},"29":{"title":"Header","titles":["UI макет","Основные компоненты страницы"]},"30":{"title":"Sidebar","titles":["UI макет","Основные компоненты страницы"]},"31":{"title":"Main panel","titles":["UI макет","Основные компоненты страницы"]},"32":{"title":"Footer","titles":["UI макет","Основные компоненты страницы"]},"33":{"title":"Мобильная версия","titles":["UI макет"]},"34":{"title":"Слабая связанность","titles":["UI макет"]},"35":{"title":"Адаптивность","titles":["UI макет"]},"36":{"title":"Вывод","titles":["UI макет"]},"37":{"title":"Выбор BaaS или CMS","titles":[]},"38":{"title":"JSON файлы товаров","titles":["Выбор BaaS или CMS"]},"39":{"title":"Выбор CMS","titles":["Выбор BaaS или CMS"]},"40":{"title":"Сервисы Supabase","titles":["Выбор BaaS или CMS"]},"41":{"title":"Адаптеры","titles":["Выбор BaaS или CMS"]},"42":{"title":"Модель данных в базе данных","titles":[]},"43":{"title":"Сущности","titles":["Модель данных в базе данных"]},"44":{"title":"Данные","titles":["Модель данных в базе данных"]},"45":{"title":"Categories table","titles":["Модель данных в базе данных","Данные"]},"46":{"title":"Products table","titles":["Модель данных в базе данных","Данные"]},"47":{"title":"Category-product join table","titles":["Модель данных в базе данных","Данные"]},"48":{"title":"Поиск по json полям","titles":["Модель данных в базе данных"]},"49":{"title":"Hoppscotch","titles":[]},"50":{"title":"Работа с API","titles":["Hoppscotch"]},"51":{"title":"Endpoints","titles":["Hoppscotch"]},"52":{"title":"Supabase REST API","titles":[]},"53":{"title":"Supabase SDK","titles":["Supabase REST API"]},"54":{"title":"Установка:","titles":["Supabase REST API","Supabase SDK"]},"55":{"title":"Использование:","titles":["Supabase REST API","Supabase SDK"]},"56":{"title":"Supabase REST API","titles":["Supabase REST API"]},"57":{"title":"Supabase","titles":[]},"58":{"title":"Создание проекта","titles":["Supabase"]},"59":{"title":"Безопасность и доступ","titles":["Supabase"]},"60":{"title":"Онлайн маркетплейс","titles":[]},"61":{"title":"Проект Arty-Crafty","titles":["Онлайн маркетплейс"]},"62":{"title":"Причины","titles":["Онлайн маркетплейс"]},"63":{"title":"Цель","titles":["Онлайн маркетплейс"]},"64":{"title":"Что здесь будет?","titles":["Онлайн маркетплейс"]},"65":{"title":"Для чего?","titles":["Онлайн маркетплейс"]},"66":{"title":"Цели и задачи проекта","titles":[]},"67":{"title":"Цели данного проекта:","titles":["Цели и задачи проекта"]},"68":{"title":"Нефункциональные требования (software quality attributes)","titles":["Цели и задачи проекта"]},"69":{"title":"Общие функциональные требования","titles":["Цели и задачи проекта"]},"70":{"title":"Этапы развития приложения (приблизительно)","titles":["Цели и задачи проекта"]},"71":{"title":"План работы","titles":[]},"72":{"title":"Стадии разработки ПО","titles":["План работы"]},"73":{"title":"Бизнес-анализ","titles":["План работы"]},"74":{"title":"Архитектура и дизайн","titles":["План работы"]},"75":{"title":"Разработка","titles":["План работы"]},"76":{"title":"Развертывание","titles":["План работы"]},"77":{"title":"Тестирование и QA","titles":["План работы"]},"78":{"title":"Документирование","titles":["План работы"]},"79":{"title":"Поддержка","titles":["План работы"]},"80":{"title":"Репозиторий и сайт проекта","titles":[]},"81":{"title":"Работа с API на фронтенде","titles":[]},"82":{"title":"Supabase адаптер","titles":["Работа с API на фронтенде"]},"83":{"title":"api/products.ts","titles":["Работа с API на фронтенде","Supabase адаптер"]},"84":{"title":"Слайдер, ProductView","titles":[]},"85":{"title":"embla-carousel","titles":["Слайдер, ProductView"]},"86":{"title":"ProductView","titles":["Слайдер, ProductView"]},"87":{"title":"Мобильное меню, CSS","titles":[]},"88":{"title":"IconButton","titles":["Мобильное меню, CSS"]},"89":{"title":"SCSS => CSS","titles":["Мобильное меню, CSS"]},"90":{"title":"Tag и CMV","titles":["Мобильное меню, CSS"]},"91":{"title":"TypeScript","titles":[]},"92":{"title":"index.d.ts","titles":["TypeScript"]},"93":{"title":"Типизация","titles":["TypeScript"]},"94":{"title":"VueUse","titles":[]},"95":{"title":"useLocalStorage","titles":["VueUse"]},"96":{"title":"Библиотека VueUse","titles":["VueUse"]},"97":{"title":"Codeium","titles":[]},"98":{"title":"Автокомплит","titles":["Codeium"]},"99":{"title":"Чат-бот","titles":["Codeium"]},"100":{"title":"Explain, Refactor, JSDoc","titles":["Codeium"]},"101":{"title":"Explain problem","titles":["Codeium"]},"102":{"title":"Вывод","titles":["Codeium"]},"103":{"title":"Кастомизация","titles":[]},"104":{"title":"Персонализация","titles":["Кастомизация"]},"105":{"title":"Views","titles":["Кастомизация"]},"106":{"title":"Routes","titles":["Кастомизация"]},"107":{"title":"Header","titles":["Кастомизация"]},"108":{"title":"Sidebar","titles":["Кастомизация"]},"109":{"title":"Небольшой рефакторинг","titles":["Кастомизация"]},"110":{"title":"Избранное","titles":[]},"111":{"title":"Иконка на карточке товара","titles":["Избранное"]},"112":{"title":"Композабл useFavourites","titles":["Избранное"]},"113":{"title":"Сохранение между сессиями","titles":["Избранное"]},"114":{"title":"Бэджик","titles":["Избранное"]},"115":{"title":"Tag и CMV","titles":["Избранное"]},"116":{"title":"Категория товаров","titles":[]},"117":{"title":"Layout","titles":["Категория товаров"]},"118":{"title":"Данные и API","titles":["Категория товаров"]},"119":{"title":"Создание проекта","titles":[]},"120":{"title":"Репозиторий на GitHub","titles":["Создание проекта"]},"121":{"title":"vue-webapp","titles":["Создание проекта"]},"122":{"title":"API сервис","titles":[]},"123":{"title":"Аутентификация и авторизация","titles":[]},"124":{"title":"Варианты задействовать свой бэкенд для фронтендера","titles":[]},"125":{"title":"CORS","titles":[]},"126":{"title":"Приложение: Миграция с Vue 2","titles":[]},"127":{"title":"Другой способ загрузки и запуска приложения","titles":["Приложение: Миграция с Vue 2"]},"128":{"title":"Регистрация глобальных компонентов, плагинов и так далее","titles":["Приложение: Миграция с Vue 2"]},"129":{"title":"Свойство data теперь всегда является функцией","titles":["Приложение: Миграция с Vue 2"]},"130":{"title":"Больше реактивных возможностей","titles":["Приложение: Миграция с Vue 2"]},"131":{"title":"Изменения в v-model, props и events","titles":["Приложение: Миграция с Vue 2"]},"132":{"title":"Удалена совместимость со старыми браузерами","titles":["Приложение: Миграция с Vue 2"]},"133":{"title":"Изменения в организации каталогов и файлов","titles":["Приложение: Миграция с Vue 2"]},"134":{"title":"Изменения в роутере и state manager","titles":["Приложение: Миграция с Vue 2"]},"135":{"title":"Новые компоненты и другие изменения.","titles":["Приложение: Миграция с Vue 2"]},"136":{"title":"Другие изменения","titles":["Приложение: Миграция с Vue 2"]},"137":{"title":"Итог","titles":["Приложение: Миграция с Vue 2"]},"138":{"title":"Протоколы. To REST или не REST?","titles":[]},"139":{"title":"Развертывание приложения","titles":[]},"140":{"title":"Технические требования","titles":["Развертывание приложения"]},"141":{"title":"Что включает в себя публикация веб-приложения?","titles":["Развертывание приложения"]},"142":{"title":"Домены, серверы доменных имен (DNS) и записи DNS","titles":["Развертывание приложения","Что включает в себя публикация веб-приложения?"]},"143":{"title":"Размышления о создании приложения для развертывания","titles":["Развертывание приложения"]},"144":{"title":"/chapter 5/to-do SPA/src/router/index.js","titles":["Развертывание приложения","Размышления о создании приложения для развертывания","Домены, серверы доменных имен (DNS) и записи DNS"]},"145":{"title":"Опции и конфигурации веб-сервера","titles":["Развертывание приложения"]},"146":{"title":"Конфигурация HTTP-сервера Apache","titles":["Развертывание приложения","Опции и конфигурации веб-сервера"]},"147":{"title":"/.htaccess","titles":["Развертывание приложения","Опции и конфигурации веб-сервера","Конфигурация HTTP-сервера Apache"]},"148":{"title":"Настройка сервера Nginx","titles":["Развертывание приложения","Опции и конфигурации веб-сервера"]},"149":{"title":"/etc/nginx/sites-available/default","titles":["Развертывание приложения","Опции и конфигурации веб-сервера","Настройка сервера Nginx"]},"150":{"title":"Другие серверы","titles":["Развертывание приложения","Опции и конфигурации веб-сервера"]},"151":{"title":"Перенос файлов на сервер","titles":["Развертывание приложения"]},"152":{"title":"Защита веб-приложения с помощью Let\'s Encrypt","titles":["Развертывание приложения"]},"153":{"title":"Подведение итогов","titles":["Развертывание приложения"]},"154":{"title":"Вопросы для проверки","titles":["Развертывание приложения"]},"155":{"title":"Фреймворк Vue 3","titles":[]},"156":{"title":"Прогрессивный фреймворк","titles":["Фреймворк Vue 3"]},"157":{"title":"Использование Vue в веб-приложении","titles":["Фреймворк Vue 3"]},"158":{"title":"Путь сборщика, лучший путь...","titles":["Фреймворк Vue 3","Использование Vue в веб-приложении"]},"159":{"title":"Понимание однофайловых компонентов","titles":["Фреймворк Vue 3"]},"160":{"title":"Разные варианты - options, composition, и script setup API","titles":["Фреймворк Vue 3"]},"161":{"title":"Изучение встроенных директив в Vue 3","titles":["Фреймворк Vue 3"]},"162":{"title":"v-bind: (сокращение ":")","titles":["Фреймворк Vue 3","Изучение встроенных директив в Vue 3"]},"163":{"title":"v-show","titles":["Фреймворк Vue 3","Изучение встроенных директив в Vue 3"]},"164":{"title":"v-if, v-else и v-else-if","titles":["Фреймворк Vue 3","Изучение встроенных директив в Vue 3"]},"165":{"title":"v-for и :key","titles":["Фреймворк Vue 3","Изучение встроенных директив в Vue 3"]},"166":{"title":"v-model","titles":["Фреймворк Vue 3","Изучение встроенных директив в Vue 3"]},"167":{"title":"v-on: (и сокращение @)","titles":["Фреймворк Vue 3","Изучение встроенных директив в Vue 3"]},"168":{"title":"Встроенные компоненты","titles":["Фреймворк Vue 3"]},"169":{"title":"Кодовые соглашения (code conventions) в книге","titles":["Фреймворк Vue 3"]},"170":{"title":"Переменные и пропсы","titles":["Фреймворк Vue 3","Кодовые соглашения (code conventions) в книге"]},"171":{"title":"Константы","titles":["Фреймворк Vue 3","Кодовые соглашения (code conventions) в книге"]},"172":{"title":"Имена классов и компонентов","titles":["Фреймворк Vue 3","Кодовые соглашения (code conventions) в книге"]},"173":{"title":"Функции, методы, события и имена файлов","titles":["Фреймворк Vue 3","Кодовые соглашения (code conventions) в книге"]},"174":{"title":"Экземпляры","titles":["Фреймворк Vue 3","Кодовые соглашения (code conventions) в книге"]},"175":{"title":"Подведение итогов","titles":["Фреймворк Vue 3"]},"176":{"title":"Вопросы для проверки","titles":["Фреймворк Vue 3"]},"177":{"title":"Установка рабочего проекта","titles":[]},"178":{"title":"Технические требования","titles":["Установка рабочего проекта"]},"179":{"title":"Настройка проекта и инструменты","titles":["Установка рабочего проекта"]},"180":{"title":"Структура папок и её модификации","titles":["Установка рабочего проекта"]},"181":{"title":"Интеграция с CSS-фреймворками","titles":["Установка рабочего проекта"]},"182":{"title":"Фреймворк w3.css","titles":["Установка рабочего проекта","Интеграция с CSS-фреймворками"]},"183":{"title":"FontAwesome - это просто замечательно","titles":["Установка рабочего проекта"]},"184":{"title":"Опции конфигурации Vite","titles":["Установка рабочего проекта"]},"185":{"title":"Приложение To-Do","titles":["Установка рабочего проекта"]},"186":{"title":"App.vue","titles":["Установка рабочего проекта","Приложение To-Do","Фреймворк w3.css"]},"187":{"title":"ToDos.vue","titles":["Установка рабочего проекта","Приложение To-Do","Фреймворк w3.css"]},"188":{"title":"Краткая критика нашего приложения To-Do","titles":["Установка рабочего проекта","Приложение To-Do","Фреймворк w3.css"]},"189":{"title":"Подведение итогов","titles":["Установка рабочего проекта"]},"190":{"title":"Вопросы для проверки","titles":["Установка рабочего проекта"]},"191":{"title":"Принципы и шаблоны проектирования программного обеспечения","titles":[]},"192":{"title":"Каковы принципы проектирования программного обеспечения?","titles":["Принципы и шаблоны проектирования программного обеспечения"]},"193":{"title":"Неполный список принципов проектирования","titles":["Принципы и шаблоны проектирования программного обеспечения"]},"194":{"title":"Separation of concerns (Разделение ответственности)","titles":["Принципы и шаблоны проектирования программного обеспечения","Неполный список принципов проектирования"]},"195":{"title":"Composition over inheritance (Композиция над наследованием)","titles":["Принципы и шаблоны проектирования программного обеспечения","Неполный список принципов проектирования"]},"196":{"title":"Single responsibility principle (Принцип единой ответственности)","titles":["Принципы и шаблоны проектирования программного обеспечения","Неполный список принципов проектирования"]},"197":{"title":"Encapsulation (Инкапсуляция)","titles":["Принципы и шаблоны проектирования программного обеспечения","Неполный список принципов проектирования"]},"198":{"title":"KIC - keep it clean","titles":["Принципы и шаблоны проектирования программного обеспечения","Неполный список принципов проектирования"]},"199":{"title":"DRY – don’t repeat yourself (не повторяйся)","titles":["Принципы и шаблоны проектирования программного обеспечения","Неполный список принципов проектирования"]},"200":{"title":"KISS - keep it simple and short (держи это простым и коротким)","titles":["Принципы и шаблоны проектирования программного обеспечения","Неполный список принципов проектирования"]},"201":{"title":"Code for the next (Пиши код для следующего)","titles":["Принципы и шаблоны проектирования программного обеспечения","Неполный список принципов проектирования"]},"202":{"title":"Что такое шаблон проектирования программного обеспечения?","titles":["Принципы и шаблоны проектирования программного обеспечения"]},"203":{"title":"Краткий справочный список шаблонов","titles":["Принципы и шаблоны проектирования программного обеспечения"]},"204":{"title":"Порождающие шаблоны","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Code for the next (Пиши код для следующего)"]},"205":{"title":"Поведенческие шаблоны","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Code for the next (Пиши код для следующего)"]},"206":{"title":"Структурные шаблоны","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Code for the next (Пиши код для следующего)"]},"207":{"title":"Асинхронные шаблоны","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Code for the next (Пиши код для следующего)"]},"208":{"title":"Шаблон Singleton","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов"]},"209":{"title":"Когда его использовать","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Singleton"]},"210":{"title":"Реализация","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Singleton"]},"211":{"title":"Метод 1","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Singleton","Реализация"]},"212":{"title":"Метод 2","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Singleton","Реализация"]},"213":{"title":"Шаблон Dependency injection (инъекция зависимостей)","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов"]},"214":{"title":"./chapter 2/dependency-injection-1.js","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Dependency injection (инъекция зависимостей)"]},"215":{"title":"./chapter 2/dependency-injection-2.js","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Dependency injection (инъекция зависимостей)"]},"216":{"title":"./chapter 2/dependency-injection-3.js","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Dependency injection (инъекция зависимостей)"]},"217":{"title":"./chapter 2/dependency-injection-4.js","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Dependency injection (инъекция зависимостей)"]},"218":{"title":"./chapter 2/dependency-injection-5.js","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Dependency injection (инъекция зависимостей)"]},"219":{"title":"./chapter 2/dependency-injection-6.js","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Dependency injection (инъекция зависимостей)"]},"220":{"title":"./chapter 2/dependency-injection-7.js","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Dependency injection (инъекция зависимостей)"]},"221":{"title":"Шаблон factory (фабрика)","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов"]},"222":{"title":"Шаблон Observer (наблюдатель)","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов"]},"223":{"title":"./chapter 2/Observer-1.js","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Observer (наблюдатель)"]},"224":{"title":"Шаблон Command (команда)","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов"]},"225":{"title":"./chapter 2/Command-1.js","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Command (команда)"]},"226":{"title":"Шаблон Proxy","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов"]},"227":{"title":"./chapter 2/proxy-1.js","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Proxy"]},"228":{"title":"Шаблон Decorator (декоратор)","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов"]},"229":{"title":"./chapter 2/decorator-1.vue","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Decorator (декоратор)"]},"230":{"title":"./chapter 2/decorator-2.vue","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Decorator (декоратор)"]},"231":{"title":"Шаблон Façade (фасад)","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов"]},"232":{"title":"Шаблон Callback (обратный вызов)","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов"]},"233":{"title":"./chapter 2/callback-1.js - Синхронный Фибоначчи","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов","Шаблон Callback (обратный вызов)"]},"234":{"title":"Шаблон Promise (обещаниe)","titles":["Принципы и шаблоны проектирования программного обеспечения","Краткий справочный список шаблонов"]},"235":{"title":"Подведение итогов","titles":["Принципы и шаблоны проектирования программного обеспечения"]},"236":{"title":"Вопросы для проверки","titles":["Принципы и шаблоны проектирования программного обеспечения"]},"237":{"title":"Бонусная глава - Шаблоны UX","titles":[]},"238":{"title":"Технические требования","titles":["Бонусная глава - Шаблоны UX"]},"239":{"title":"UI-дизайн против UX-дизайна","titles":["Бонусная глава - Шаблоны UX"]},"240":{"title":"Принципы проектирования пользовательского интерфейса","titles":["Бонусная глава - Шаблоны UX"]},"241":{"title":"Достаточный контраст или различие между элементами","titles":["Бонусная глава - Шаблоны UX","Принципы проектирования пользовательского интерфейса"]},"242":{"title":"Стимулировать повторение и быть последовательным.","titles":["Бонусная глава - Шаблоны UX","Принципы проектирования пользовательского интерфейса"]},"243":{"title":"Внимательно следите за выравниванием и направлением","titles":["Бонусная глава - Шаблоны UX","Принципы проектирования пользовательского интерфейса"]},"244":{"title":"Используйте близость и расстояние, чтобы показать естественные группы","titles":["Бонусная глава - Шаблоны UX","Принципы проектирования пользовательского интерфейса"]},"245":{"title":"Законы проектирования пользовательского интерфейса","titles":["Бонусная глава - Шаблоны UX","Принципы проектирования пользовательского интерфейса"]},"246":{"title":"Закон Фитта","titles":["Бонусная глава - Шаблоны UX","Принципы проектирования пользовательского интерфейса"]},"247":{"title":"Закон Хика","titles":["Бонусная глава - Шаблоны UX","Принципы проектирования пользовательского интерфейса"]},"248":{"title":"Восемь правил Бена Шнайдермана","titles":["Бонусная глава - Шаблоны UX","Принципы проектирования пользовательского интерфейса"]},"249":{"title":"Принципы проектирования UX","titles":["Бонусная глава - Шаблоны UX","Принципы проектирования пользовательского интерфейса"]},"250":{"title":"Общие шаблоны для работы с данными","titles":["Бонусная глава - Шаблоны UX"]},"251":{"title":"Элементы ввода HTML","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для работы с данными"]},"252":{"title":"Чекбоксы, радиокнопки и тумблеры","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для работы с данными","Элементы ввода HTML"]},"253":{"title":"Чипы, таблетки или теги","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для работы с данными","Элементы ввода HTML"]},"254":{"title":"Подсказки (tooltips)","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для работы с данными","Элементы ввода HTML"]},"255":{"title":"Уведомляющие точки, пузырьки, метки или значки","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для работы с данными","Элементы ввода HTML"]},"256":{"title":"Тостовые уведомления","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для работы с данными","Элементы ввода HTML"]},"257":{"title":"Карусель или слайдеры изображений","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для работы с данными","Элементы ввода HTML"]},"258":{"title":"Панели прогресса (progress bars) и спиннеры","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для работы с данными","Элементы ввода HTML"]},"259":{"title":"./components/Spinner.vue","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для работы с данными","Элементы ввода HTML","Панели прогресса (progress bars) и спиннеры"]},"260":{"title":"Пагинация (пейджер) и бесконечный скроллер","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для работы с данными","Элементы ввода HTML"]},"261":{"title":"./src/components/InfiniteScroller.vue","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для работы с данными","Элементы ввода HTML","Пагинация (пейджер) и бесконечный скроллер"]},"262":{"title":"Общие шаблоны для взаимодействия и навигации","titles":["Бонусная глава - Шаблоны UX"]},"263":{"title":"Размещение меню","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для взаимодействия и навигации","Элементы ввода HTML"]},"264":{"title":"Хлебные крошки (breadcrumbs)","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для взаимодействия и навигации","Элементы ввода HTML"]},"265":{"title":"Модальные диалоги","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для взаимодействия и навигации","Элементы ввода HTML"]},"266":{"title":"Иконки меню","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для взаимодействия и навигации","Элементы ввода HTML"]},"267":{"title":"Аккордеонные меню","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для взаимодействия и навигации","Элементы ввода HTML"]},"268":{"title":"Мегаменю","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для взаимодействия и навигации","Элементы ввода HTML"]},"269":{"title":"Выпадающие меню","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для взаимодействия и навигации","Элементы ввода HTML"]},"270":{"title":"Общие шаблоны для организации контента","titles":["Бонусная глава - Шаблоны UX"]},"271":{"title":"Отзывчивые (responsive) приложения","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для организации контента"]},"272":{"title":"Домашняя ссылка","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для организации контента"]},"273":{"title":"Главная (hero) секция, призыв к действию (call to action) и иконки социальных сетей","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для организации контента"]},"274":{"title":"Другие шаблоны","titles":["Бонусная глава - Шаблоны UX","Общие шаблоны для организации контента"]},"275":{"title":"Темные шаблоны","titles":["Бонусная глава - Шаблоны UX"]},"276":{"title":"Вопросы с подвохом","titles":["Бонусная глава - Шаблоны UX","Темные шаблоны"]},"277":{"title":"Проникновение в корзину","titles":["Бонусная глава - Шаблоны UX","Темные шаблоны"]},"278":{"title":"Приманка для тараканов (Roach motels)","titles":["Бонусная глава - Шаблоны UX","Темные шаблоны"]},"279":{"title":"Privacy Zuckering","titles":["Бонусная глава - Шаблоны UX","Темные шаблоны"]},"280":{"title":"Предотвращение сравнения цен","titles":["Бонусная глава - Шаблоны UX","Темные шаблоны"]},"281":{"title":"Ненаправленность","titles":["Бонусная глава - Шаблоны UX","Темные шаблоны"]},"282":{"title":"Скрытые расходы","titles":["Бонусная глава - Шаблоны UX","Темные шаблоны"]},"283":{"title":"Приманка и подмена","titles":["Бонусная глава - Шаблоны UX","Темные шаблоны"]},"284":{"title":"Подтверждение позора (Confirm shaming)","titles":["Бонусная глава - Шаблоны UX","Темные шаблоны"]},"285":{"title":"Замаскированная реклама","titles":["Бонусная глава - Шаблоны UX","Темные шаблоны"]},"286":{"title":"Дружественный спам","titles":["Бонусная глава - Шаблоны UX","Темные шаблоны"]},"287":{"title":"Подведение итогов","titles":["Бонусная глава - Шаблоны UX"]},"288":{"title":"Вопросы для проверки","titles":["Бонусная глава - Шаблоны UX"]},"289":{"title":"Прогрессивные веб-приложения","titles":[]},"290":{"title":"Технические требования","titles":["Прогрессивные веб-приложения"]},"291":{"title":"PWA или устанавливаемые SPA","titles":["Прогрессивные веб-приложения"]},"292":{"title":"Увеличение SPA до уровня PWA","titles":["Прогрессивные веб-приложения"]},"293":{"title":"Файл манифеста","titles":["Прогрессивные веб-приложения","Увеличение SPA до уровня PWA"]},"294":{"title":"Необходимо:","titles":["Прогрессивные веб-приложения","Увеличение SPA до уровня PWA","Файл манифеста"]},"295":{"title":"Рекомендуется:","titles":["Прогрессивные веб-приложения","Увеличение SPA до уровня PWA","Файл манифеста"]},"296":{"title":"Описательные:","titles":["Прогрессивные веб-приложения","Увеличение SPA до уровня PWA","Файл манифеста"]},"297":{"title":"Тестирование манифеста","titles":["Прогрессивные веб-приложения","Увеличение SPA до уровня PWA"]},"298":{"title":"Подсказка к установке (Install prompt)","titles":["Прогрессивные веб-приложения","Увеличение SPA до уровня PWA"]},"299":{"title":"Service workers","titles":["Прогрессивные веб-приложения"]},"300":{"title":"Плагин Vite-PWA","titles":["Прогрессивные веб-приложения"]},"301":{"title":"Тестирование показателей PWA с помощью Google Lighthouse","titles":["Прогрессивные веб-приложения"]},"302":{"title":"Подведение итогов","titles":["Прогрессивные веб-приложения"]},"303":{"title":"Вопросы для проверки","titles":["Прогрессивные веб-приложения"]},"304":{"title":"Управление потоками данных","titles":[]},"305":{"title":"Технические требования","titles":["Управление потоками данных"]},"306":{"title":"Основное взаимодействие компонентов","titles":["Управление потоками данных"]},"307":{"title":"/basic/ParentBasic.vue","titles":["Управление потоками данных","Основное взаимодействие компонентов"]},"308":{"title":"/basic/Child.vue","titles":["Управление потоками данных","Основное взаимодействие компонентов"]},"309":{"title":"Реализация шины событий с помощью шаблонов Singleton и Observer","titles":["Управление потоками данных"]},"310":{"title":"/services/MessageBus.js","titles":["Управление потоками данных","Реализация шины событий с помощью шаблонов Singleton и Observer"]},"311":{"title":"/bus/Child.vue","titles":["Управление потоками данных","Реализация шины событий с помощью шаблонов Singleton и Observer"]},"312":{"title":"Реализация базового реактивного состояния","titles":["Управление потоками данных"]},"313":{"title":"/service/SimpleState.js","titles":["Управление потоками данных","Реализация базового реактивного состояния"]},"314":{"title":"Реализация мощного реактивного стора с помощью Pinia","titles":["Управление потоками данных"]},"315":{"title":"Options API basic store","titles":["Управление потоками данных","Реализация мощного реактивного стора с помощью Pinia"]},"316":{"title":"/stores/counter.js","titles":["Управление потоками данных","Реализация мощного реактивного стора с помощью Pinia"]},"317":{"title":"./main.js","titles":["Управление потоками данных","Реализация мощного реактивного стора с помощью Pinia"]},"318":{"title":"/pinia/ChildPinia.vue","titles":["Управление потоками данных","Реализация мощного реактивного стора с помощью Pinia"]},"319":{"title":"Хранилища данных браузера - сессионные, локальные и IndexedDB","titles":["Управление потоками данных"]},"320":{"title":"Экспериментируем с шаблонами reactivity и Proxies","titles":["Управление потоками данных"]},"321":{"title":"/services/sessionStorage.js","titles":["Управление потоками данных","Экспериментируем с шаблонами reactivity и Proxies"]},"322":{"title":"/session_storage/ChildSession.vue","titles":["Управление потоками данных","Экспериментируем с шаблонами reactivity и Proxies"]},"323":{"title":"Подведение итогов","titles":["Управление потоками данных"]},"324":{"title":"Вопросы для проверки","titles":["Управление потоками данных"]},"325":{"title":"Многопоточность с Web Workers","titles":[]},"326":{"title":"Технические требования","titles":["Многопоточность с Web Workers"]},"327":{"title":"Введение в Web workers","titles":["Многопоточность с Web Workers"]},"328":{"title":"Реализация web worker","titles":["Многопоточность с Web Workers","Введение в Web workers"]},"329":{"title":"./my_worker.js","titles":["Многопоточность с Web Workers","Введение в Web workers","Реализация web worker"]},"330":{"title":"./main.js","titles":["Многопоточность с Web Workers","Введение в Web workers","Реализация web worker"]},"331":{"title":"Шаблон Business delegate","titles":["Многопоточность с Web Workers"]},"332":{"title":"Шаблон Dispatcher","titles":["Многопоточность с Web Workers"]},"333":{"title":"Установка конвейера взаимодействия с веб-рабочим","titles":["Многопоточность с Web Workers"]},"334":{"title":"./services/WebWorker.js","titles":["Многопоточность с Web Workers","Установка конвейера взаимодействия с веб-рабочим","Реализация web worker"]},"335":{"title":"./webworker/index.js","titles":["Многопоточность с Web Workers","Установка конвейера взаимодействия с веб-рабочим","Реализация web worker"]},"336":{"title":"./webworker/services/test.js","titles":["Многопоточность с Web Workers","Установка конвейера взаимодействия с веб-рабочим","Реализация web worker"]},"337":{"title":"Получение доступа к IndexedDB с помощью DexieJS в web worker.","titles":["Многопоточность с Web Workers"]},"338":{"title":"/src/components/DbNotes.vue","titles":["Многопоточность с Web Workers","Получение доступа к IndexedDB с помощью DexieJS в web worker.","Реализация web worker"]},"339":{"title":"./src/webworker/services/dbService.js","titles":["Многопоточность с Web Workers","Получение доступа к IndexedDB с помощью DexieJS в web worker.","Реализация web worker"]},"340":{"title":"./src/webworker/index.js","titles":["Многопоточность с Web Workers","Получение доступа к IndexedDB с помощью DexieJS в web worker.","Реализация web worker"]},"341":{"title":"./webworker/services/network.js","titles":["Многопоточность с Web Workers","Получение доступа к IndexedDB с помощью DexieJS в web worker.","Реализация web worker"]},"342":{"title":"./webworker/index.js","titles":["Многопоточность с Web Workers","Получение доступа к IndexedDB с помощью DexieJS в web worker.","Реализация web worker"]},"343":{"title":"./src/components/NetworkCommunication.vue","titles":["Многопоточность с Web Workers","Получение доступа к IndexedDB с помощью DexieJS в web worker.","Реализация web worker"]},"344":{"title":"Простой NodeJS-сервер для тестирования","titles":["Многопоточность с Web Workers"]},"345":{"title":"./server/index.js","titles":["Многопоточность с Web Workers","Простой NodeJS-сервер для тестирования","Реализация web worker"]},"346":{"title":"Подведение итогов","titles":["Многопоточность с Web Workers"]},"347":{"title":"Вопросы для проверки","titles":["Многопоточность с Web Workers"]},"348":{"title":"Композиция пользовательского интерфейса с помощью компонентов","titles":[]},"349":{"title":"Технические требования","titles":["Композиция пользовательского интерфейса с помощью компонентов"]},"350":{"title":"Составление страницы с помощью компонентов","titles":["Композиция пользовательского интерфейса с помощью компонентов"]},"351":{"title":"Этап 1 - определение макетов и элементов пользовательского интерфейса","titles":["Композиция пользовательского интерфейса с помощью компонентов","Составление страницы с помощью компонентов"]},"352":{"title":"Шаг 2 - определение связей, потока данных, взаимодействий и событий","titles":["Композиция пользовательского интерфейса с помощью компонентов","Составление страницы с помощью компонентов"]},"353":{"title":"Шаг 3 - определение элементов пользовательской интерактивности (входов, диалогов, уведомлений и т.д.)","titles":["Композиция пользовательского интерфейса с помощью компонентов","Составление страницы с помощью компонентов"]},"354":{"title":"Шаг 4 - выявление шаблонов проектирования и компромиссов","titles":["Композиция пользовательского интерфейса с помощью компонентов","Составление страницы с помощью компонентов"]},"355":{"title":"Компоненты в деталях","titles":["Композиция пользовательского интерфейса с помощью компонентов"]},"356":{"title":"Локальные и глобальные компоненты","titles":["Композиция пользовательского интерфейса с помощью компонентов","Компоненты в деталях"]},"357":{"title":"Статический, асинхронный и динамический импорт","titles":["Композиция пользовательского интерфейса с помощью компонентов","Компоненты в деталях"]},"358":{"title":"Пропсы, события и директива v-model","titles":["Композиция пользовательского интерфейса с помощью компонентов","Компоненты в деталях"]},"359":{"title":"Настраиваемые контроллеры ввода","titles":["Композиция пользовательского интерфейса с помощью компонентов","Компоненты в деталях"]},"360":{"title":"Инъекция зависимости с помощью Provide и Inject","titles":["Композиция пользовательского интерфейса с помощью компонентов","Компоненты в деталях"]},"361":{"title":"Специальные компоненты","titles":["Композиция пользовательского интерфейса с помощью компонентов"]},"362":{"title":"Слоты, слоты и еще раз слоты...","titles":["Композиция пользовательского интерфейса с помощью компонентов","Специальные компоненты"]},"363":{"title":"Композабл функции (composables) и миксины","titles":["Композиция пользовательского интерфейса с помощью компонентов"]},"364":{"title":"Динамические компоненты с помощью "component :is"","titles":["Композиция пользовательского интерфейса с помощью компонентов","Композабл функции (composables) и миксины"]},"365":{"title":"Реальный пример - плагин модалов","titles":["Композиция пользовательского интерфейса с помощью компонентов"]},"366":{"title":"Настройка нашего проекта","titles":["Композиция пользовательского интерфейса с помощью компонентов","Реальный пример - плагин модалов"]},"367":{"title":"Конструкция","titles":["Композиция пользовательского интерфейса с помощью компонентов","Реальный пример - плагин модалов"]},"368":{"title":"Реализация","titles":["Композиция пользовательского интерфейса с помощью компонентов","Реальный пример - плагин модалов"]},"369":{"title":"Реализация нашего нового приложения To-Do","titles":["Композиция пользовательского интерфейса с помощью компонентов"]},"370":{"title":"Небольшая критика нашего нового приложения To-Do","titles":["Композиция пользовательского интерфейса с помощью компонентов"]},"371":{"title":"Подведение итогов","titles":["Композиция пользовательского интерфейса с помощью компонентов"]},"372":{"title":"Вопросы для проверки","titles":["Композиция пользовательского интерфейса с помощью компонентов"]},"373":{"title":"Vue.js 3 - Шаблоны проектирования и лучшие практики","titles":[]},"374":{"title":"Здесь представлен перевод книги "Vue.js 3 - Design Patterns and Best Practices" на русский язык","titles":["Vue.js 3 - Шаблоны проектирования и лучшие практики"]},"375":{"title":"Предисловие","titles":["Vue.js 3 - Шаблоны проектирования и лучшие практики"]},"376":{"title":"Для кого эта книга","titles":["Vue.js 3 - Шаблоны проектирования и лучшие практики"]},"377":{"title":"Чтобы получить максимальную пользу от этой книги","titles":["Vue.js 3 - Шаблоны проектирования и лучшие практики"]},"378":{"title":"Купить книгу","titles":["Vue.js 3 - Шаблоны проектирования и лучшие практики"]},"379":{"title":"Скачать файлы кода примеров","titles":["Vue.js 3 - Шаблоны проектирования и лучшие практики"]},"380":{"title":"Код в действии","titles":["Vue.js 3 - Шаблоны проектирования и лучшие практики"]},"381":{"title":"Что включает в себя эта книга","titles":[]},"382":{"title":"Глава 1, Фреймворк Vue 3","titles":["Что включает в себя эта книга"]},"383":{"title":"Глава 2, Принципы и шаблоны проектирования программного обеспечения","titles":["Что включает в себя эта книга"]},"384":{"title":"Глава 3, Создание рабочего проекта","titles":["Что включает в себя эта книга"]},"385":{"title":"Глава 4, Композиция пользовательского интерфейса с помощью компонентов","titles":["Что включает в себя эта книга"]},"386":{"title":"Глава 5, Одностраничные приложения","titles":["Что включает в себя эта книга"]},"387":{"title":"Глава 6, Прогрессивные веб-приложения","titles":["Что включает в себя эта книга"]},"388":{"title":"Глава 7, Управление потоками данных","titles":["Что включает в себя эта книга"]},"389":{"title":"Глава 8, Многопоточность с помощью web-workers","titles":["Что включает в себя эта книга"]},"390":{"title":"Глава 9, Тестирование и контроль исходных текстов","titles":["Что включает в себя эта книга"]},"391":{"title":"Глава 10, Развертывание приложения","titles":["Что включает в себя эта книга"]},"392":{"title":"Глава 11, UX Patterns","titles":["Что включает в себя эта книга"]},"393":{"title":"Приложение: Миграция с Vue 2 на Vue 3","titles":["Что включает в себя эта книга"]},"394":{"title":"CI/CD","titles":[]},"395":{"title":"Docker","titles":[]},"396":{"title":"Github Actions","titles":[]},"397":{"title":"Одностраничные приложения","titles":[]},"398":{"title":"Технические требования","titles":["Одностраничные приложения"]},"399":{"title":"Что такое SPA?","titles":["Одностраничные приложения"]},"400":{"title":"Vue 3 роутер","titles":["Одностраничные приложения"]},"401":{"title":"Установка","titles":["Одностраничные приложения","Vue 3 роутер"]},"402":{"title":"Новое приложение To-Do","titles":["Одностраничные приложения","Vue 3 роутер"]},"403":{"title":"Определение маршрутов и объект Router","titles":["Одностраничные приложения","Vue 3 роутер"]},"404":{"title":"/src/router/index.js","titles":["Одностраничные приложения","Vue 3 роутер","Определение маршрутов и объект Router"]},"405":{"title":"/src/main.js","titles":["Одностраничные приложения","Vue 3 роутер","Определение маршрутов и объект Router"]},"406":{"title":"Шаблонные компоненты маршрутизатора","titles":["Одностраничные приложения","Vue 3 роутер"]},"407":{"title":"App.vue","titles":["Одностраничные приложения","Vue 3 роутер"]},"408":{"title":"Вложенные маршруты, именованные представления и программная навигация","titles":["Одностраничные приложения","Vue 3 роутер"]},"409":{"title":"Определение вложенных маршрутов","titles":["Одностраничные приложения","Vue 3 роутер","Вложенные маршруты, именованные представления и программная навигация"]},"410":{"title":"/src/views/Directory.vue component, lines 13-18","titles":["Одностраничные приложения","Vue 3 роутер","Вложенные маршруты, именованные представления и программная навигация"]},"411":{"title":".push()","titles":["Одностраничные приложения","Vue 3 роутер"]},"412":{"title":".replace()","titles":["Одностраничные приложения","Vue 3 роутер"]},"413":{"title":".go()","titles":["Одностраничные приложения","Vue 3 роутер"]},"414":{"title":"Исследование шаблонов аутентификации","titles":["Одностраничные приложения"]},"415":{"title":"Простая аутентификация по имени пользователя и паролю","titles":["Одностраничные приложения","Исследование шаблонов аутентификации"]},"416":{"title":"OpenID и сторонняя аутентификация","titles":["Одностраничные приложения","Исследование шаблонов аутентификации"]},"417":{"title":"1.","titles":["Одностраничные приложения","Исследование шаблонов аутентификации"]},"418":{"title":"2.","titles":["Одностраничные приложения","Исследование шаблонов аутентификации"]},"419":{"title":"3.","titles":["Одностраничные приложения","Исследование шаблонов аутентификации"]},"420":{"title":"Беспарольная аутентификация или аутентификация по одноразовому паролю (OTP)","titles":["Одностраничные приложения","Исследование шаблонов аутентификации"]},"421":{"title":"2FA - двухфакторная аутентификация","titles":["Одностраничные приложения","Исследование шаблонов аутентификации"]},"422":{"title":"Web3-аутентификация","titles":["Одностраничные приложения","Исследование шаблонов аутентификации"]},"423":{"title":"Подведение итогов","titles":["Одностраничные приложения"]},"424":{"title":"Вопросы для проверки","titles":["Одностраничные приложения"]},"425":{"title":"Хостинг","titles":[]},"426":{"title":"Ресурсы приложения","titles":[]},"427":{"title":"BaseIcon","titles":["Ресурсы приложения"]},"428":{"title":"icons.js","titles":["Ресурсы приложения"]},"429":{"title":"Создание и сборка приложения","titles":[]},"430":{"title":"Настройка IDE","titles":[]},"431":{"title":"Архитектурные решения","titles":[]},"432":{"title":"Плоская","titles":["Архитектурные решения"]},"433":{"title":"Атомарный дизайн","titles":["Архитектурные решения"]},"434":{"title":"Модульный дизайн","titles":["Архитектурные решения"]},"435":{"title":"Feature Sliced Design","titles":["Архитектурные решения"]},"436":{"title":"Микрофронтенды","titles":["Архитектурные решения"]},"437":{"title":"Use cases","titles":["Архитектурные решения"]},"438":{"title":"Лучшие практики и соображения","titles":["Архитектурные решения"]},"439":{"title":"AppLoader.vue","titles":["Архитектурные решения","Лучшие практики и соображения"]},"440":{"title":"useAppLoader.ts","titles":["Архитектурные решения","Лучшие практики и соображения"]},"441":{"title":"SomeComponent","titles":["Архитектурные решения","Лучшие практики и соображения"]},"442":{"title":"Тестирование и системы контроля версий","titles":[]},"443":{"title":"Технические требования","titles":["Тестирование и системы контроля версий"]},"444":{"title":"Что такое тестирование и TDD","titles":["Тестирование и системы контроля версий"]},"445":{"title":"Что тестировать","titles":["Тестирование и системы контроля версий"]},"446":{"title":"Наш базовый пример приложения","titles":["Тестирование и системы контроля версий"]},"447":{"title":"Установка и использование Vitest","titles":["Тестирование и системы контроля версий"]},"448":{"title":"/src/tests/Fibonacci.test.js","titles":["Тестирование и системы контроля версий","Установка и использование Vitest"]},"449":{"title":"Специальный случай утверждения - намеренная ошибка","titles":["Тестирование и системы контроля версий"]},"450":{"title":"Специальный случай утверждения - асинхронный код","titles":["Тестирование и системы контроля версий"]},"451":{"title":"Установка Vue Test Utils","titles":["Тестирование и системы контроля версий"]},"452":{"title":"/src/tests/FibonacciOutput.test.js","titles":["Тестирование и системы контроля версий","Установка Vue Test Utils"]},"453":{"title":"/src/tests/FibonacciInput.test.js","titles":["Тестирование и системы контроля версий","Установка Vue Test Utils"]},"454":{"title":"In-source тестирование","titles":["Тестирование и системы контроля версий"]},"455":{"title":"Покрытие","titles":["Тестирование и системы контроля версий"]},"456":{"title":"Интерфейс Vitest","titles":["Тестирование и системы контроля версий"]},"457":{"title":"Что такое source control и зачем он нужен?","titles":["Тестирование и системы контроля версий"]},"458":{"title":"Управление исходными текстами с помощью Git","titles":["Тестирование и системы контроля версий"]},"459":{"title":"Установка в системах Windows","titles":["Тестирование и системы контроля версий"]},"460":{"title":"Установка в системах Linux","titles":["Тестирование и системы контроля версий"]},"461":{"title":"Установка в системах macOS","titles":["Тестирование и системы контроля версий"]},"462":{"title":"Использование Git","titles":["Тестирование и системы контроля версий"]},"463":{"title":"/chapter 10/.gitignore","titles":["Тестирование и системы контроля версий","Использование Git"]},"464":{"title":"Управление ветвями и слияниями","titles":["Тестирование и системы контроля версий"]},"465":{"title":"Конфликты при слиянии","titles":["Тестирование и системы контроля версий"]},"466":{"title":"Работа с удаленными репозиториями","titles":["Тестирование и системы контроля версий"]},"467":{"title":"Непрерывная интеграция и доставка","titles":["Тестирование и системы контроля версий"]},"468":{"title":"Подведение итогов","titles":["Тестирование и системы контроля версий"]},"469":{"title":"Вопросы для проверки","titles":["Тестирование и системы контроля версий"]},"470":{"title":"Подскажите удобную библиотеку","titles":[]},"471":{"title":"Полезные советы","titles":[]},"472":{"title":"Карусель или слайдер","titles":["Полезные советы"]},"473":{"title":"Toaster","titles":["Полезные советы"]},"474":{"title":"Дата и время","titles":["Полезные советы"]},"475":{"title":"Структура Vue 3 проекта","titles":[]},"476":{"title":"Какие бывают структуры файлов для Vue 3 проектов?","titles":["Структура Vue 3 проекта"]},"477":{"title":"Подходящая структура для Vue 3 проекта","titles":["Структура Vue 3 проекта"]},"478":{"title":"State management во Vue 3","titles":[]},"479":{"title":"Тестирование","titles":[]},"480":{"title":"Web components","titles":[]},"481":{"title":"Custom elements","titles":["Web components"]},"482":{"title":"О фронтенд фреймворках","titles":[]},"483":{"title":"Архитектура фронтэнд приложений","titles":[]},"484":{"title":"Избегайте зависимостей","titles":["Архитектура фронтэнд приложений"]},"485":{"title":"Используйте обертки над компонентами UI библиотек и сторонних утилит","titles":["Архитектура фронтэнд приложений"]},"486":{"title":"Регулярный рефакторинг","titles":["Архитектура фронтэнд приложений"]},"487":{"title":"Используйте CSS3","titles":["Архитектура фронтэнд приложений"]},"488":{"title":"Используйте современные стандарты и возможности языков","titles":["Архитектура фронтэнд приложений"]},"489":{"title":"Документируйте проект","titles":["Архитектура фронтэнд приложений"]},"490":{"title":"CSS и UI библиотеки","titles":[]},"491":{"title":"Изучение Vue","titles":[]},"492":{"title":"SPA, PWA, SSG, SSR и SEO","titles":[]},"493":{"title":"Шпаргалки (Cheat Sheet)","titles":[]},"494":{"title":"Vue","titles":["Шпаргалки (Cheat Sheet)"]},"495":{"title":"JavaScript","titles":["Шпаргалки (Cheat Sheet)"]},"496":{"title":"HTML","titles":["Шпаргалки (Cheat Sheet)"]},"497":{"title":"CSS","titles":["Шпаргалки (Cheat Sheet)"]},"498":{"title":"Typescript","titles":["Шпаргалки (Cheat Sheet)"]},"499":{"title":"Markdown","titles":["Шпаргалки (Cheat Sheet)"]},"500":{"title":"Внесите лепту в развитие данного ресурса","titles":[]},"501":{"title":"Глоссарий и сокращения","titles":[]},"502":{"title":"Предисловие","titles":[]},"503":{"title":"У нас есть Телеграм канал","titles":["Предисловие"]},"504":{"title":"Конфигурация","titles":[]},"505":{"title":"Опции","titles":["Конфигурация"]},"506":{"title":"Стилизация","titles":["Конфигурация"]},"507":{"title":"Данные релизов, коммитов и пул риквестов","titles":[]},"508":{"title":"Получение данных","titles":["Данные релизов, коммитов и пул риквестов"]},"509":{"title":"Установка","titles":[]},"510":{"title":"Установка пакета","titles":["Установка"]},"511":{"title":"Использование в коде Vue проекта","titles":["Установка"]},"512":{"title":"Использование в VitePress","titles":["Установка"]},"513":{"title":"Использование как web component","titles":["Установка"]},"514":{"title":"Release Timeline","titles":[]},"515":{"title":"Визуализация релизов","titles":["Release Timeline"]},"516":{"title":"Репозиторий","titles":["Release Timeline"]},"517":{"title":"Demo","titles":["Release Timeline"]},"518":{"title":"Credits","titles":["Release Timeline"]},"519":{"title":"Микрофронтенд","titles":[]},"520":{"title":"Подключение","titles":["Микрофронтенд"]},"521":{"title":"Demo","titles":["Микрофронтенд"]},"522":{"title":"VitePress","titles":[]},"523":{"title":"Установка пакета","titles":["VitePress"]},"524":{"title":"Подключение","titles":["VitePress"]},"525":{"title":"CSS переменные","titles":["VitePress"]},"526":{"title":"Vue 3 проект","titles":[]},"527":{"title":"Установка пакета","titles":["Vue 3 проект"]},"528":{"title":"Использование во Vue компоненте","titles":["Vue 3 проект"]},"529":{"title":"Web component","titles":[]},"530":{"title":"Подключение","titles":["Web component"]},"531":{"title":"Конфигурация","titles":["Web component"]},"532":{"title":"Demo","titles":["Web component"]},"533":{"title":"Участие в проекте","titles":[]},"534":{"title":"Установка","titles":[]},"535":{"title":"Установка через create vue-webapp","titles":["Установка"]},"536":{"title":"Инициализация и запуск веб приложения","titles":["Установка","Установка через create vue-webapp"]},"537":{"title":"Установка из репозитория","titles":["Установка"]},"538":{"title":"Принципы","titles":[]},"539":{"title":"Vue 3 webapp билдер","titles":[]},"540":{"title":"Краткое описание","titles":["Vue 3 webapp билдер"]},"541":{"title":"Обоснование","titles":["Vue 3 webapp билдер"]},"542":{"title":"Цели","titles":[]},"543":{"title":"Адаптивность","titles":[]},"544":{"title":"API модуль","titles":[]},"545":{"title":"API (REST)","titles":["API модуль"]},"546":{"title":"JSON-RPC","titles":["API модуль"]},"547":{"title":"BaseIcon","titles":[]},"548":{"title":"Детали реализации","titles":[]},"549":{"title":"Инъекции кода в index.html","titles":["Детали реализации"]},"550":{"title":"CSS tricks","titles":["Детали реализации"]},"551":{"title":"Navigation drawers","titles":[]},"552":{"title":"SimpleDrawer","titles":["Navigation drawers"]},"553":{"title":"TouchSlideoutDrawer","titles":["Navigation drawers"]},"554":{"title":"Footers","titles":[]},"555":{"title":"SimpleFooter","titles":["Footers"]},"556":{"title":"RichFooter","titles":["Footers"]},"557":{"title":"MantineSimpleFooter","titles":["Footers"]},"558":{"title":"MantineRichFooter","titles":["Footers"]},"559":{"title":"DistributedFooter","titles":["Footers"]},"560":{"title":"Github Actions сценарий для развертывания на Github Pages","titles":[]},"561":{"title":"Deployment","titles":["Github Actions сценарий для развертывания на Github Pages"]},"562":{"title":"Настройка base в Vite конфиге","titles":["Github Actions сценарий для развертывания на Github Pages"]},"563":{"title":"Google analytics","titles":[]},"564":{"title":"Headers","titles":[]},"565":{"title":"SimpleHeader","titles":["Headers"]},"566":{"title":"MantineSimpleHeader","titles":["Headers"]},"567":{"title":"MantineLayeredHeader","titles":["Headers"]},"568":{"title":"SlidingHeader","titles":["Headers"]},"569":{"title":"Опции при создании приложения","titles":[]},"570":{"title":"Доступные опции","titles":["Опции при создании приложения"]},"571":{"title":"Доступно по умолчанию","titles":["Опции при создании приложения"]},"572":{"title":"В разработке","titles":["Опции при создании приложения"]},"573":{"title":"В планах","titles":["Опции при создании приложения"]},"574":{"title":"i18n","titles":[]},"575":{"title":"i18next","titles":["i18n"]},"576":{"title":"useI18nLight","titles":["i18n"]},"577":{"title":"Использование","titles":["i18n"]},"578":{"title":"i18next расширения","titles":["i18n"]},"579":{"title":"В итоге","titles":["i18n"]},"580":{"title":"MainLayout","titles":[]},"581":{"title":"Routing","titles":["MainLayout"]},"582":{"title":"OneColumnLayout","titles":[]},"583":{"title":"Navbar","titles":[]},"584":{"title":"SimpleNavbar","titles":["Navbar"]},"585":{"title":"MantineSimpleNavbar","titles":["Navbar"]},"586":{"title":"PWA","titles":[]},"587":{"title":"manifest.json","titles":["PWA"]},"588":{"title":"Service worker","titles":["PWA"]},"589":{"title":"Google analytics","titles":[]},"590":{"title":"Splash screen","titles":[]},"591":{"title":"Темы","titles":[]}},"dirtCount":0,"index":[["^",{"2":{"430":1}}],["^20",{"2":{"429":1}}],["^index",{"2":{"147":1}}],["ютюбе",{"2":{"491":1}}],["ютюба",{"2":{"491":1}}],["ю",{"2":{"482":1}}],["юнит",{"2":{"450":1,"452":1}}],["юридическую",{"2":{"415":1}}],["юзер",{"2":{"123":1}}],["||",{"2":{"563":1}}],["|",{"2":{"396":4,"430":1,"432":44,"433":68,"434":125,"435":86,"476":323}}],["🚀",{"2":{"396":1}}],["🛎️",{"2":{"396":1}}],["└────",{"2":{"264":1}}],["└──",{"2":{"264":3}}],["№",{"2":{"253":1}}],["zero",{"2":{"430":1}}],["zuckering",{"0":{"279":1}}],["z",{"2":{"248":1,"272":1}}],["zip",{"2":{"183":2}}],["щелчку",{"2":{"420":1}}],["щелчке",{"2":{"369":1,"402":1}}],["щелчком",{"2":{"268":1,"269":1,"369":1}}],["щелчок",{"2":{"254":1,"338":1,"369":1}}],["щелкает",{"2":{"296":1}}],["щелкать",{"2":{"185":1}}],["щелкнуть",{"2":{"185":1}}],["щепоткой",{"2":{"156":1}}],["86",{"2":{"506":1,"530":1,"531":1,"591":1}}],["888",{"2":{"506":2,"525":1,"530":1,"531":1}}],["8",{"0":{"389":1},"2":{"178":1,"199":1,"202":1,"225":1,"227":3,"231":2,"233":2,"254":1,"289":1,"301":1,"319":2,"326":1,"327":3,"331":1,"333":1,"334":2,"336":1,"337":1,"342":2,"345":2,"396":2,"414":1,"421":1,"462":1}}],["800",{"2":{"248":1}}],["80",{"2":{"96":1,"98":1,"149":1}}],["56",{"2":{"591":1}}],["5c73e7",{"2":{"506":1,"530":1,"531":1}}],["55",{"2":{"448":3,"450":1,"452":2}}],["58",{"2":{"430":1}}],["512x512",{"2":{"300":2}}],["5rem",{"2":{"186":1}}],["5",{"0":{"144":1,"218":1,"386":1},"2":{"134":1,"143":2,"165":2,"183":1,"187":4,"219":1,"223":1,"224":1,"227":1,"234":1,"248":1,"252":1,"261":2,"265":1,"298":1,"311":2,"314":1,"315":2,"316":2,"319":1,"321":2,"333":1,"334":2,"335":2,"338":1,"339":2,"341":1,"345":2,"357":1,"362":1,"363":2,"364":2,"368":2,"392":1,"396":3,"399":1,"402":3,"404":2,"408":1,"410":1,"413":1,"415":4,"416":1,"419":1,"420":2,"421":1,"441":1,"449":2,"453":2,"455":1,"466":1}}],["50кб",{"2":{"474":1}}],["50",{"2":{"96":1,"259":1,"311":1,"319":1,"448":1,"579":1}}],["67",{"2":{"327":1,"591":3}}],["60000",{"2":{"357":1}}],["600",{"2":{"271":1}}],["600px",{"2":{"271":1}}],["60",{"2":{"200":1,"241":2,"327":1,"420":1,"421":1,"591":6}}],["64",{"2":{"178":1,"459":1}}],["6",{"0":{"219":1,"387":1},"2":{"132":1,"142":1,"185":1,"187":4,"219":1,"220":2,"226":1,"227":1,"252":1,"296":2,"297":1,"298":4,"299":2,"300":4,"301":3,"311":2,"316":2,"321":2,"322":1,"334":2,"335":2,"336":1,"338":2,"339":2,"345":2,"363":2,"367":1,"399":1,"416":1,"453":2,"456":1,"506":1,"511":1,"513":2,"528":1,"530":1,"531":1,"591":1}}],["78",{"2":{"591":1}}],["78919d98ece0",{"2":{"291":1}}],["767",{"2":{"543":1}}],["70kb",{"2":{"511":1,"528":1}}],["70",{"2":{"491":2,"576":1}}],["77",{"2":{"227":1}}],["7",{"0":{"220":1,"388":1},"2":{"132":2,"134":1,"160":1,"213":1,"219":1,"220":1,"227":2,"228":1,"253":1,"289":1,"298":1,"301":1,"306":2,"309":1,"311":1,"312":1,"314":1,"322":3,"334":2,"335":2,"337":1,"345":2,"352":1,"362":1,"369":1,"407":1,"420":1,"459":1}}],["7542",{"2":{"106":1}}],["9",{"0":{"390":1},"2":{"151":1,"178":1,"180":1,"227":1,"233":2,"234":1,"254":1,"266":1,"334":2,"345":2,"446":2,"455":3,"456":1,"459":1,"462":1,"463":3,"465":1}}],["99",{"2":{"138":1,"478":3}}],["95",{"2":{"123":1,"470":1,"474":1,"508":1}}],["90",{"2":{"89":1,"301":1}}],["ждать",{"2":{"420":2,"421":1,"448":1}}],["жирным",{"2":{"276":1}}],["жирный",{"2":{"243":1}}],["жив",{"2":{"336":2}}],["живом",{"2":{"391":1}}],["живой",{"2":{"180":1,"454":1}}],["живого",{"2":{"179":1,"452":1,"456":1}}],["живущий",{"2":{"123":1}}],["жизненно",{"2":{"201":1}}],["жизненного",{"2":{"160":1,"198":2,"218":1,"311":1,"363":1,"407":1}}],["жизненный",{"2":{"198":1,"299":1}}],["жизнь",{"2":{"180":1,"396":1,"482":1}}],["жизни",{"2":{"123":4,"319":1}}],["жить",{"2":{"156":1}}],["железу",{"2":{"492":1}}],["железо",{"2":{"492":1}}],["желаемым",{"2":{"442":1}}],["желаемых",{"2":{"187":1}}],["желающих",{"2":{"533":1}}],["желаю",{"2":{"380":1}}],["желательно",{"2":{"113":1,"178":1,"311":1,"491":1}}],["желании",{"2":{"40":1,"538":1,"542":1,"545":1}}],["желание",{"2":{"25":1}}],["жесткие",{"2":{"429":1}}],["жестким",{"2":{"152":1}}],["жестко",{"2":{"220":1,"482":1}}],["жесткое",{"2":{"215":1,"319":1}}],["же",{"2":{"3":1,"11":1,"12":1,"16":1,"23":1,"26":2,"33":1,"35":1,"41":1,"44":1,"48":1,"56":1,"62":1,"82":1,"106":1,"111":2,"112":1,"123":2,"130":1,"131":1,"132":2,"139":1,"142":3,"143":1,"144":1,"145":1,"156":4,"158":1,"160":3,"164":1,"166":1,"180":1,"183":1,"186":1,"187":3,"192":1,"194":2,"196":1,"199":2,"201":2,"211":1,"212":1,"214":1,"215":1,"217":1,"218":2,"221":1,"223":3,"226":5,"227":2,"228":4,"229":1,"230":1,"231":1,"233":1,"234":1,"237":2,"239":1,"242":2,"243":1,"244":1,"246":2,"248":1,"250":1,"253":1,"257":1,"266":1,"269":1,"271":1,"276":1,"289":1,"291":2,"293":1,"298":1,"306":1,"308":1,"309":2,"311":2,"312":1,"313":2,"315":1,"316":3,"319":5,"321":1,"322":1,"325":1,"327":2,"330":1,"345":2,"349":1,"360":1,"362":1,"365":1,"396":1,"399":1,"400":1,"404":1,"412":1,"414":1,"415":1,"416":1,"422":3,"425":1,"430":1,"436":2,"444":1,"445":1,"447":2,"448":1,"450":1,"451":1,"453":3,"455":1,"457":2,"458":1,"466":2,"474":1,"477":1,"478":3,"479":2,"482":1,"483":2,"485":1,"491":1,"492":1,"541":1,"545":1,"546":1,"549":1,"561":1,"575":1}}],["yandex",{"2":{"492":1}}],["yarnrc",{"2":{"430":2}}],["yarn",{"2":{"429":1,"430":4,"463":2}}],["yamllint",{"2":{"430":2}}],["yaml",{"2":{"396":7,"430":7}}],["yellow",{"2":{"407":1}}],["yes",{"2":{"121":6,"535":8,"540":4}}],["y=ref",{"2":{"363":1}}],["y",{"2":{"179":1,"363":4,"396":1}}],["yougithubusername",{"2":{"561":1}}],["youtube",{"2":{"64":1,"327":2,"399":1}}],["yourname",{"2":{"562":1}}],["yourself",{"0":{"199":1},"2":{"191":1,"363":1,"430":1}}],["your",{"2":{"55":1,"187":1,"396":13,"478":2}}],["√",{"2":{"121":15,"535":13,"540":5}}],[">home",{"2":{"407":1}}],[">cancel",{"2":{"368":1}}],[">completed",{"2":{"187":1}}],[">accept",{"2":{"368":1}}],[">search",{"2":{"407":1}}],[">send",{"2":{"311":1,"343":1}}],[">save",{"2":{"338":1}}],[">decrement",{"2":{"313":1,"318":1}}],[">increment",{"2":{"313":1}}],[">install",{"2":{"298":1}}],[">no",{"2":{"187":1}}],[">pending",{"2":{"187":1}}],[">print",{"2":{"167":2}}],[">edit",{"2":{"168":1}}],[">",{"2":{"112":2,"114":3,"157":2,"162":1,"163":1,"165":1,"166":1,"168":1,"182":1,"183":4,"186":2,"187":20,"223":1,"230":2,"259":1,"261":2,"264":4,"293":1,"298":2,"307":4,"308":2,"318":2,"338":5,"343":3,"359":2,"362":12,"364":2,"368":3,"396":1,"407":3,"410":4,"426":4,"427":2,"430":1,"438":8,"439":2,"440":1,"481":1,"490":2,"500":2,"511":1,"513":4,"520":5,"524":1,"528":1,"530":4,"531":4,"543":5,"547":3,"563":2,"568":3,"577":2,"589":15}}],[">>",{"2":{"112":1,"113":1,"396":5}}],["⌥",{"2":{"98":2}}],["+page",{"2":{"430":6}}],["+layout",{"2":{"430":7}}],["+$backups",{"2":{"396":1}}],["++id",{"2":{"339":1}}],["+=",{"2":{"261":1}}],["+f",{"2":{"232":1}}],["+",{"2":{"98":4,"156":1,"179":1,"227":1,"233":2,"234":7,"248":1,"301":1,"345":1,"377":1,"396":1,"416":2,"417":2,"419":1,"428":2}}],["400",{"2":{"568":1}}],["401",{"2":{"123":2}}],["480",{"2":{"543":1}}],["4",{"0":{"217":1,"354":1,"385":1},"2":{"90":1,"96":1,"131":1,"142":1,"149":2,"159":2,"165":1,"166":1,"182":1,"185":1,"187":6,"195":1,"198":1,"219":1,"220":1,"222":1,"223":1,"227":1,"228":1,"229":1,"234":3,"244":2,"246":1,"248":1,"261":2,"298":1,"307":2,"308":3,"311":2,"312":1,"315":2,"316":2,"318":2,"321":2,"331":1,"334":2,"335":2,"338":1,"339":2,"345":2,"351":2,"352":1,"353":1,"360":2,"362":1,"363":2,"367":1,"368":6,"369":3,"376":1,"377":1,"400":1,"401":1,"404":2,"410":1,"419":1,"428":2,"430":1,"452":2,"453":2,"455":1,"466":1,"483":1,"491":1}}],["0deg",{"2":{"259":1}}],["06c9c9",{"2":{"259":1}}],["04",{"2":{"178":1,"430":1}}],["000",{"2":{"296":1}}],["0001",{"2":{"142":1}}],["000000",{"2":{"300":1}}],["0000",{"2":{"142":7}}],["0",{"2":{"83":2,"93":1,"138":1,"142":12,"178":1,"187":4,"222":1,"223":1,"227":1,"232":2,"233":2,"234":1,"259":1,"307":1,"313":1,"315":2,"316":2,"364":1,"396":5,"399":3,"404":1,"416":2,"420":1,"422":1,"440":1,"448":2,"453":6,"492":2,"505":1,"506":3,"513":2,"530":3,"531":3,"546":2,"591":5}}],["$dirs",{"2":{"396":1}}],["$backup",{"2":{"396":6}}],["$env",{"2":{"396":1}}],["$emit=defineemits",{"2":{"308":1}}],["$emit",{"2":{"131":1,"308":1,"358":1,"359":2}}],["$project",{"2":{"396":3}}],["$props=defineprops",{"2":{"308":1,"311":1}}],["$props",{"2":{"131":1,"229":2,"230":2,"259":2,"308":2,"311":2,"358":3,"359":2,"368":3,"407":1}}],["$github",{"2":{"396":5}}],["$target",{"2":{"396":8}}],["$route",{"2":{"410":2,"413":3,"418":3}}],["$router",{"2":{"171":1,"410":3,"411":4,"413":4}}],["$root",{"2":{"396":3}}],["$received",{"2":{"360":1}}],["$service",{"2":{"360":2}}],["$sessionstorage",{"2":{"322":3}}],["$store",{"2":{"318":5}}],["$store=usecounterstore",{"2":{"318":1}}],["$store=usestore",{"2":{"171":1}}],["$state",{"2":{"313":4}}],["$notifications",{"2":{"171":1}}],["$modals",{"2":{"171":1,"368":11,"369":1}}],["$uri",{"2":{"149":2}}],["$",{"2":{"83":3,"93":1,"121":2,"171":1,"309":1,"311":1,"314":1,"396":15,"426":1,"430":96,"460":2,"461":2,"464":6,"465":5,"536":2,"537":3}}],["$apikey$",{"2":{"51":6}}],["`dark`",{"2":{"506":1}}],["`desc`",{"2":{"505":1}}],["``",{"2":{"505":1}}],["`commits`",{"2":{"505":1}}],["`pulls`",{"2":{"505":1}}],["`~",{"2":{"430":1}}],["`sent",{"2":{"311":1}}],["`$",{"2":{"83":3,"93":1,"230":1,"427":4}}],["`",{"2":{"83":3,"93":1,"230":1,"311":1,"396":3,"426":1}}],["qbutton",{"2":{"490":1}}],["qa",{"0":{"77":1},"2":{"72":1}}],["quasar",{"2":{"430":2,"470":1}}],["quality",{"0":{"68":1}}],["quiet",{"2":{"430":1}}],["quicktime",{"2":{"155":1}}],["questions",{"2":{"502":1}}],["queue",{"2":{"334":9}}],["queuebuilder",{"2":{"172":1}}],["queryselector",{"2":{"453":1}}],["query",{"2":{"23":1,"345":2,"411":2,"413":2,"417":4,"418":2,"488":1}}],["quot",{"0":{"162":2,"364":2,"374":2},"2":{"2":4,"4":2,"9":2,"11":2,"22":2,"41":6,"59":2,"64":2,"65":4,"89":4,"96":2,"101":2,"104":2,"111":10,"112":2,"113":4,"114":4,"121":2,"123":2,"124":4,"131":6,"132":2,"142":6,"143":4,"145":4,"156":6,"157":6,"158":2,"159":4,"160":8,"168":4,"176":2,"178":2,"180":2,"183":8,"185":4,"187":2,"188":6,"191":2,"197":2,"201":2,"202":2,"214":2,"222":4,"224":4,"226":2,"227":2,"228":2,"231":2,"233":6,"234":2,"237":2,"240":2,"241":6,"242":8,"244":6,"245":2,"246":2,"247":2,"248":4,"249":4,"252":6,"253":4,"254":2,"256":2,"257":2,"258":12,"260":2,"261":2,"263":4,"264":2,"268":2,"269":2,"271":4,"272":4,"273":4,"277":6,"278":2,"286":2,"287":2,"291":8,"299":2,"300":4,"301":2,"306":4,"325":2,"327":14,"332":2,"334":4,"337":2,"345":2,"354":2,"357":2,"360":8,"362":2,"363":2,"368":4,"369":2,"375":2,"399":4,"404":8,"407":2,"408":6,"410":4,"413":2,"416":30,"420":4,"421":4,"422":8,"444":4,"445":4,"448":4,"449":4,"452":2,"454":2,"457":4,"462":2,"465":2,"474":6,"478":8,"482":4,"483":12,"487":2,"491":5,"492":6,"530":10,"535":8,"538":2,"541":2,"552":2,"561":14,"575":8,"580":2,"582":2}}],["x301",{"2":{"482":1}}],["x3c",{"2":{"93":2,"100":2,"112":8,"113":2,"114":4,"130":9,"147":4,"157":12,"159":8,"160":8,"162":1,"163":2,"165":2,"166":1,"167":4,"168":8,"182":1,"183":5,"186":9,"187":46,"198":2,"223":1,"229":8,"230":7,"233":4,"234":3,"259":10,"261":8,"293":1,"298":6,"307":20,"308":10,"311":12,"313":15,"318":14,"322":6,"338":33,"341":2,"343":29,"359":4,"362":54,"364":6,"368":22,"407":20,"410":12,"420":1,"426":4,"427":8,"430":1,"438":20,"439":7,"440":1,"481":2,"490":4,"506":2,"511":3,"513":7,"520":9,"524":3,"528":3,"530":10,"531":12,"543":10,"547":7,"563":5,"568":8,"577":8,"589":15}}],["xcode",{"2":{"461":1}}],["xshell",{"2":{"430":1}}],["xss",{"2":{"123":1}}],["xo",{"2":{"430":4}}],["xaml",{"2":{"430":2}}],["xdv",{"2":{"430":1}}],["xyz",{"2":{"357":1}}],["xmlhttprequest",{"2":{"414":1,"492":1}}],["xml",{"2":{"147":1,"231":1,"414":1,"430":4}}],["xhr",{"2":{"122":1,"545":1}}],["x",{"2":{"56":2,"137":1,"240":1,"246":1,"253":1,"283":1,"338":1,"474":2,"550":1}}],["x26",{"2":{"51":2,"83":2,"93":1,"187":2,"298":2,"338":2,"341":4,"396":4,"420":2,"430":1,"530":10,"543":2}}],["=+",{"2":{"430":1}}],["==",{"2":{"187":3,"368":1,"396":3}}],["=>return",{"2":{"316":1}}],["=>",{"2":{"187":4,"198":2,"223":1,"233":1,"234":16,"261":1,"298":1,"299":2,"311":2,"315":3,"316":2,"321":1,"328":2,"329":2,"330":1,"334":2,"335":4,"336":4,"338":5,"339":3,"341":4,"343":1,"345":3,"357":5,"363":2,"368":6,"396":2,"404":1,"407":3,"408":3,"410":3,"419":1,"420":1,"422":2,"427":2,"440":1,"448":2,"449":2,"450":1,"452":2,"453":2,"577":1}}],["=",{"0":{"89":1},"2":{"55":4,"61":2,"83":3,"93":4,"95":1,"106":1,"112":2,"113":2,"122":5,"127":2,"128":2,"130":6,"131":2,"144":1,"156":1,"157":1,"160":3,"168":2,"187":5,"211":1,"212":1,"214":1,"215":1,"216":1,"217":1,"218":3,"219":2,"220":1,"221":2,"223":6,"227":7,"229":1,"230":1,"232":3,"233":12,"234":14,"259":1,"261":3,"298":7,"299":4,"307":1,"310":1,"313":2,"315":1,"316":4,"317":1,"321":5,"322":1,"328":4,"329":1,"330":2,"334":7,"335":2,"336":1,"339":2,"340":1,"341":1,"342":1,"343":3,"345":6,"357":4,"358":4,"359":4,"360":4,"363":1,"364":1,"368":18,"396":1,"404":2,"407":1,"410":2,"415":2,"417":2,"418":1,"419":1,"427":3,"428":6,"438":3,"439":1,"440":2,"441":2,"448":2,"452":1,"454":1,"474":6,"478":1,"482":1,"505":1,"511":2,"520":1,"524":2,"528":2,"531":1,"543":1,"545":3,"546":2,"547":2,"563":1,"577":3}}],["ы",{"2":{"51":1}}],["jl65gwrnqq",{"2":{"563":2}}],["j",{"2":{"429":1}}],["jpg",{"2":{"428":1}}],["jpeg",{"2":{"425":1}}],["jest",{"2":{"430":10,"448":1,"479":1}}],["jenkins",{"2":{"394":1,"430":2}}],["jetbrains",{"2":{"178":1}}],["justify",{"2":{"186":1}}],["jasmine",{"2":{"430":10}}],["jamesives",{"2":{"396":3,"561":1}}],["javascirpt",{"2":{"376":1}}],["javascript",{"0":{"495":1},"2":{"44":1,"124":1,"130":1,"132":1,"155":3,"156":2,"157":3,"158":4,"159":5,"160":4,"162":1,"164":1,"165":1,"166":2,"167":2,"174":1,"177":1,"178":1,"179":2,"180":2,"181":4,"184":2,"187":1,"195":3,"196":1,"197":1,"198":2,"199":1,"208":1,"210":3,"211":2,"219":1,"222":1,"226":1,"228":1,"231":1,"232":2,"233":1,"234":1,"235":1,"260":1,"261":1,"271":1,"299":1,"312":1,"313":1,"319":1,"321":3,"323":1,"325":1,"327":9,"328":1,"334":1,"339":1,"340":1,"347":1,"357":3,"362":1,"377":1,"383":1,"390":1,"399":2,"401":1,"410":1,"414":1,"416":1,"422":2,"424":1,"426":1,"429":2,"430":2,"447":1,"448":2,"449":1,"450":2,"451":1,"454":2,"470":1,"474":4,"478":2,"481":1,"482":1,"483":3,"490":3,"491":7,"492":4,"495":1,"538":1,"543":1,"579":1}}],["java",{"2":{"155":1,"160":1,"210":1,"430":1}}],["jane",{"2":{"130":1}}],["jo",{"2":{"416":1}}],["jobs",{"2":{"396":2}}],["john",{"2":{"130":1,"358":1,"575":1}}],["join",{"0":{"47":1},"2":{"48":1,"51":2}}],["jwts",{"2":{"416":1}}],["jwt",{"2":{"123":4,"416":8,"501":2,"573":1}}],["jsscripts",{"2":{"456":1}}],["jsself",{"2":{"329":1}}],["jstest",{"2":{"449":1,"450":1,"455":1}}],["jsethereum",{"2":{"422":1}}],["jseventbus",{"2":{"407":1}}],["jsexport",{"2":{"129":1,"184":1,"438":1,"451":1,"454":2,"505":1,"562":1}}],["js$",{"2":{"414":1}}],["js$props",{"2":{"407":1}}],["js$modals",{"2":{"368":1}}],["js$emit",{"2":{"358":1}}],["jsx",{"2":{"362":1,"430":3}}],["jslint",{"2":{"430":2}}],["jslocation",{"2":{"417":1}}],["jslocalstorage",{"2":{"319":1}}],["jslet",{"2":{"234":2,"319":1,"328":1}}],["jsif",{"2":{"299":1,"328":1,"454":1}}],["jsimport",{"2":{"55":1,"122":3,"127":2,"128":3,"144":1,"184":2,"187":1,"212":1,"214":1,"217":1,"218":1,"220":2,"223":2,"298":1,"300":1,"310":1,"313":1,"315":1,"317":1,"321":1,"330":1,"334":1,"335":1,"336":1,"339":1,"340":1,"341":1,"342":1,"356":2,"357":1,"360":4,"363":2,"368":3,"404":1,"405":1,"407":1,"410":1,"414":1,"415":1,"418":1,"419":1,"426":1,"429":1,"441":1,"448":1,"452":1,"453":1,"545":1,"577":1}}],["jsmyfunction",{"2":{"234":1}}],["jsfibonaccisync",{"2":{"233":1}}],["jsf",{"2":{"232":1}}],["jsfunction",{"2":{"221":1,"233":2,"234":1}}],["jsdom",{"2":{"451":3}}],["jsdoc",{"0":{"100":1},"2":{"100":2}}],["jsdescribe",{"2":{"448":1}}],["jsdispatcher",{"2":{"223":1}}],["jspending",{"2":{"187":1}}],["jsconfig",{"2":{"430":11}}],["jsconsole",{"2":{"228":1,"233":2,"234":1}}],["jsconst",{"2":{"83":1,"106":1,"113":1,"131":1,"211":1,"215":1,"216":1,"219":1,"227":1,"234":1,"336":1,"345":1,"357":3,"358":4,"359":2,"360":1,"368":1,"396":1,"417":1,"420":1,"428":1,"474":2}}],["jsclass",{"2":{"212":1,"218":1,"223":1,"225":1}}],["jscreateapp",{"2":{"129":1}}],["jsasync",{"2":{"83":2,"234":1}}],["js",{"0":{"144":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"223":1,"225":1,"227":1,"233":1,"310":1,"313":1,"316":1,"317":1,"321":1,"329":1,"330":1,"334":1,"335":1,"336":1,"339":1,"340":1,"341":1,"342":1,"345":1,"373":1,"374":1,"404":1,"405":1,"428":1,"448":1,"452":1,"453":1},"1":{"374":1,"375":1,"376":1,"377":1,"378":1,"379":1,"380":1},"2":{"12":1,"54":1,"55":1,"67":1,"85":1,"95":1,"96":1,"100":1,"107":1,"112":1,"121":3,"122":4,"123":1,"124":3,"127":1,"129":1,"158":2,"160":1,"178":5,"179":1,"180":4,"181":2,"184":5,"187":2,"213":1,"215":1,"217":2,"218":5,"223":2,"238":1,"290":1,"299":3,"300":2,"305":1,"316":2,"319":1,"325":2,"326":1,"328":4,"329":1,"330":1,"334":2,"336":1,"338":1,"343":2,"344":4,"348":1,"356":3,"363":3,"368":8,"369":6,"375":1,"377":1,"379":1,"398":1,"403":1,"404":2,"408":1,"410":1,"411":1,"413":1,"425":1,"426":4,"428":1,"429":3,"430":21,"432":6,"433":6,"434":6,"435":10,"437":1,"443":1,"446":2,"447":5,"448":2,"450":2,"451":1,"454":2,"455":1,"470":2,"472":1,"474":3,"476":28,"478":1,"482":3,"483":2,"491":4,"492":1,"502":1,"503":1,"513":2,"530":2,"531":2,"542":1,"543":1,"545":1,"546":2,"563":3,"588":3}}],["jsonrpc",{"2":{"535":1,"546":6}}],["json5",{"2":{"430":1}}],["jsonc",{"2":{"430":1}}],["jsonmounted",{"2":{"407":1}}],["jsonp",{"2":{"345":3}}],["jsonplaceholder",{"2":{"124":1,"545":1}}],["json`",{"2":{"83":1}}],["json",{"0":{"18":1,"19":1,"38":1,"48":1,"546":1,"587":1},"2":{"6":1,"11":1,"17":5,"18":2,"19":1,"38":1,"47":2,"48":2,"56":1,"67":1,"104":1,"113":2,"118":2,"121":2,"122":1,"124":1,"138":9,"180":3,"211":1,"212":1,"217":1,"293":4,"296":2,"319":2,"335":1,"338":4,"339":1,"340":1,"341":1,"344":1,"345":5,"396":4,"415":1,"416":2,"426":1,"428":4,"429":4,"430":50,"447":3,"455":4,"456":1,"463":1,"491":1,"492":2,"505":1,"531":1,"535":5,"538":1,"545":1,"546":6,"570":1,"577":1,"578":1,"587":2}}],["richfooter",{"0":{"556":1}}],["right",{"2":{"550":1}}],["rip",{"2":{"478":1}}],["rgba",{"2":{"506":3,"530":3,"531":3,"591":6}}],["rspack",{"2":{"430":12}}],["rc",{"2":{"430":1}}],["r",{"2":{"396":2,"478":1,"502":2}}],["rf",{"2":{"396":4}}],["rm",{"2":{"396":3}}],["rxdb",{"2":{"337":1}}],["raw",{"2":{"426":2,"428":1,"429":1}}],["ram",{"2":{"377":1}}],["random",{"2":{"364":1}}],["randomuuid",{"2":{"334":1}}],["range=ref",{"2":{"316":1}}],["range",{"2":{"315":1,"318":3,"449":1}}],["radius",{"2":{"259":1}}],["radio",{"2":{"252":1,"343":2}}],["rush",{"2":{"430":1}}],["rust",{"2":{"430":1}}],["rustfmt",{"2":{"430":2}}],["ruby",{"2":{"430":1}}],["ru",{"2":{"430":3,"491":1,"502":2}}],["rules",{"2":{"430":2}}],["rule",{"2":{"241":1}}],["runs",{"2":{"396":2}}],["runlog",{"2":{"360":2}}],["runcommand",{"2":{"225":1}}],["run",{"2":{"144":1,"179":1,"180":4,"182":1,"187":1,"396":9,"446":1,"447":3,"448":4,"455":1,"456":1}}],["roboto",{"2":{"591":1}}],["robots",{"2":{"180":1}}],["roach",{"0":{"278":1}}],["row",{"2":{"271":1,"543":1}}],["rotate",{"2":{"259":4}}],["rollupjs",{"2":{"184":1}}],["rollup",{"2":{"184":1,"429":2,"430":2}}],["role",{"2":{"123":1}}],["root",{"2":{"149":1,"396":1,"428":1,"506":1,"525":1,"591":1}}],["route",{"2":{"411":6}}],["routeview",{"2":{"409":3,"410":1}}],["routes",{"0":{"106":1},"2":{"106":2,"144":1,"401":1,"404":3,"436":1,"438":1,"477":1}}],["routerlink>",{"2":{"407":3,"410":1}}],["routerlink",{"2":{"406":1,"407":4,"409":1,"410":2,"411":1}}],["routerview>",{"2":{"410":4}}],["routerview",{"2":{"406":1,"410":3}}],["routerecordraw",{"2":{"106":1}}],["router",{"0":{"144":1,"403":1,"404":1},"1":{"404":1,"405":1},"2":{"3":1,"23":1,"34":1,"126":1,"143":2,"144":2,"145":1,"147":1,"150":1,"153":1,"154":1,"331":1,"357":3,"364":1,"376":1,"377":1,"386":1,"397":2,"400":1,"401":2,"403":1,"404":7,"405":3,"407":4,"410":2,"413":2,"418":1,"432":1,"433":1,"434":1,"435":1,"438":4,"476":4,"538":1,"581":1}}],["routing",{"0":{"7":1,"581":1},"2":{"11":1}}],["rbac",{"2":{"123":1}}],["rtl",{"2":{"474":1,"575":1}}],["rt",{"2":{"123":4,"501":1,"506":21,"525":10,"530":10,"531":13}}],["rpc",{"0":{"546":1},"2":{"121":1,"122":1,"138":9,"491":1,"535":1,"545":1,"546":5,"570":1}}],["rehydration",{"2":{"492":1}}],["remix",{"2":{"430":2}}],["remote",{"2":{"396":7,"430":5,"466":1}}],["removeroute",{"2":{"413":1}}],["removed",{"2":{"396":1}}],["removed=`ls",{"2":{"396":1}}],["remove",{"2":{"396":2}}],["removeitem",{"2":{"319":1}}],["removeeventlistener",{"2":{"198":1,"363":1}}],["renovate",{"2":{"430":2}}],["rendering",{"2":{"492":1}}],["renderwhitespace",{"2":{"430":1}}],["render",{"2":{"425":1}}],["renderer",{"2":{"327":1}}],["recentchange",{"2":{"430":1}}],["received",{"2":{"343":5}}],["receiver",{"2":{"321":1}}],["recursive",{"2":{"396":1}}],["reilly",{"2":{"378":1}}],["req",{"2":{"345":5}}],["requiresauth",{"2":{"438":1}}],["required",{"2":{"396":1,"418":1}}],["require",{"2":{"345":2}}],["requirements",{"2":{"74":1}}],["requests",{"2":{"508":2}}],["requestaccounts",{"2":{"422":1}}],["requestotp",{"2":{"420":1}}],["request",{"2":{"51":3,"122":1,"147":2,"299":3,"334":2,"336":2,"338":3,"343":1,"345":2,"418":1,"422":1}}],["reddit",{"2":{"478":1,"502":1}}],["redis",{"2":{"478":1}}],["redirect",{"2":{"417":1}}],["red",{"2":{"318":3}}],["registertype",{"2":{"300":1}}],["register",{"2":{"299":1,"435":1,"476":1,"478":1}}],["readdir",{"2":{"483":1}}],["readme",{"2":{"430":2}}],["read",{"2":{"353":1,"478":1}}],["ready",{"2":{"298":4}}],["reactivity",{"0":{"320":1},"1":{"321":1,"322":1},"2":{"478":1,"482":2}}],["reactive",{"2":{"130":7,"226":1,"304":1,"312":1,"313":3,"321":3,"368":6,"440":2,"474":6,"478":6,"482":2}}],["react",{"2":{"156":1,"399":1,"482":6,"491":2}}],["rejects",{"2":{"450":1}}],["reject",{"2":{"234":7,"334":6,"336":1,"339":6,"341":6,"354":1,"357":1,"368":6}}],["re",{"2":{"192":1}}],["repositories",{"2":{"505":1}}],["repository",{"2":{"460":1,"505":1,"511":1,"528":1}}],["reporter",{"2":{"455":1}}],["repo",{"2":{"430":1,"504":1,"505":2,"511":1,"520":1,"524":1,"528":1,"530":1,"531":1}}],["representation",{"2":{"426":1}}],["representational",{"2":{"340":1,"414":1}}],["replit",{"2":{"430":1}}],["replace",{"0":{"412":1}}],["replacement",{"2":{"179":1}}],["reply=>",{"2":{"343":1}}],["repeat",{"0":{"199":1},"2":{"191":1,"225":1}}],["releasetimeline",{"2":{"511":2,"524":2,"528":2}}],["releases",{"2":{"505":6,"508":2}}],["release",{"0":{"514":1},"1":{"515":1,"516":1,"517":1,"518":1},"2":{"430":4,"481":2,"505":3,"510":3,"511":4,"513":4,"520":6,"521":1,"522":1,"523":3,"524":5,"525":1,"527":3,"528":4,"530":3,"531":4,"532":1}}],["releaserc",{"2":{"430":2}}],["related",{"2":{"300":1}}],["relative",{"2":{"114":1}}],["rel",{"2":{"293":1}}],["rel=",{"2":{"182":1,"183":3,"293":1,"513":1,"520":2,"530":1,"531":1}}],["reload",{"2":{"180":1,"396":1}}],["rewritecond",{"2":{"147":2}}],["rewriterule",{"2":{"147":2}}],["rewritebase",{"2":{"147":2}}],["rewriteengine",{"2":{"147":1}}],["rewrite",{"2":{"147":1}}],["resx",{"2":{"430":2}}],["res",{"2":{"345":6}}],["response=>",{"2":{"415":1}}],["response",{"2":{"299":3,"396":2,"415":2,"417":1}}],["responsive",{"0":{"271":1},"2":{"291":1}}],["responsibility",{"0":{"196":1},"2":{"191":1}}],["respondwith",{"2":{"299":1}}],["results",{"2":{"448":2}}],["result=>",{"2":{"341":2,"419":1,"420":2}}],["result=await",{"2":{"339":1}}],["result",{"2":{"234":8,"335":2,"339":3,"341":6,"419":1,"420":2,"422":2,"448":2}}],["resize",{"2":{"198":3}}],["resolves",{"2":{"450":3}}],["resolver",{"2":{"429":1,"430":1}}],["resolve",{"2":{"184":2,"234":9,"334":6,"336":2,"339":6,"341":4,"354":1,"357":3,"368":6,"429":2,"450":1}}],["resource",{"2":{"125":1,"426":2}}],["restful",{"2":{"340":2,"414":1}}],["rest",{"0":{"52":1,"56":1,"138":2,"545":1},"1":{"53":1,"54":1,"55":1,"56":1},"2":{"40":1,"50":1,"51":3,"56":4,"58":1,"59":2,"118":1,"121":1,"122":1,"138":2,"414":1,"508":3,"515":1,"535":1,"545":1,"546":2}}],["ref=",{"2":{"261":1}}],["refresh",{"2":{"123":1,"501":1}}],["refactor",{"0":{"100":1},"2":{"100":1}}],["ref",{"2":{"93":1,"112":2,"113":1,"130":6,"160":7,"168":2,"187":5,"226":1,"261":3,"298":4,"307":2,"311":1,"316":2,"338":1,"343":4,"363":1,"415":3,"440":1,"474":7,"478":5,"482":2,"545":1}}],["returns",{"2":{"100":4}}],["return",{"2":{"83":4,"93":1,"100":2,"112":3,"122":1,"129":2,"157":1,"160":2,"187":2,"212":2,"214":1,"215":1,"216":1,"219":2,"221":2,"223":1,"227":3,"233":1,"234":7,"299":2,"313":1,"315":3,"316":4,"321":5,"334":1,"336":1,"339":3,"341":2,"357":1,"363":1,"364":1,"368":3,"369":3,"404":1,"427":2,"428":2,"440":1,"545":1,"546":1}}],["return=minimal",{"2":{"56":1}}],["rdbms",{"2":{"39":1}}],["f6f6f7",{"2":{"506":1}}],["ffffff",{"2":{"506":2}}],["fcp",{"2":{"492":1}}],["fs",{"2":{"483":1}}],["fsd",{"2":{"476":1,"477":1}}],["feedtype",{"2":{"505":5}}],["fetish",{"2":{"479":1}}],["fetch",{"2":{"41":1,"122":1,"299":2,"396":1,"414":1,"483":1,"541":1,"545":1}}],["ferferga",{"2":{"478":1}}],["featuretests",{"2":{"435":1,"476":1}}],["features",{"2":{"435":1,"476":2}}],["feature",{"0":{"435":1},"2":{"435":1,"476":2}}],["fdb",{"2":{"430":1}}],["ftcms",{"2":{"380":1}}],["ftp",{"2":{"151":2}}],["fps",{"2":{"327":2}}],["f12",{"2":{"301":2}}],["frequently",{"2":{"502":1}}],["freezed",{"2":{"430":1}}],["free",{"2":{"241":1}}],["framework",{"2":{"226":1,"377":1}}],["frontend",{"2":{"436":1,"476":1}}],["frontends",{"2":{"436":1,"476":1}}],["frontier",{"2":{"152":1}}],["from",{"2":{"55":4,"95":1,"100":2,"112":3,"122":9,"127":2,"128":6,"130":1,"144":1,"160":2,"168":3,"184":2,"186":1,"187":1,"198":1,"212":2,"214":1,"217":2,"218":4,"220":5,"223":2,"230":1,"261":1,"298":1,"300":3,"307":2,"310":1,"311":2,"313":2,"315":1,"316":2,"317":3,"318":1,"321":1,"322":1,"330":2,"334":1,"335":1,"336":1,"338":2,"339":1,"340":1,"341":1,"342":1,"343":2,"356":4,"357":4,"360":4,"363":2,"364":2,"368":8,"404":3,"405":5,"407":2,"410":1,"414":1,"415":2,"418":1,"419":1,"426":3,"427":2,"428":2,"429":2,"439":1,"440":1,"441":2,"448":3,"452":3,"453":3,"505":2,"511":1,"520":1,"524":1,"528":1,"543":1,"545":2,"546":5,"547":2,"561":1,"577":2}}],["fnc",{"2":{"470":1,"474":1}}],["fn",{"2":{"223":4,"301":1}}],["flow",{"2":{"498":1}}],["flowconfig",{"2":{"430":2}}],["flake",{"2":{"430":2}}],["flash",{"2":{"155":1}}],["fls",{"2":{"430":1}}],["flipcoin",{"2":{"364":3}}],["flex",{"2":{"117":1,"186":2,"187":3,"271":4,"543":3}}],["flexbox",{"2":{"35":1,"117":1,"271":1,"488":1,"497":2}}],["f",{"2":{"147":1,"232":3}}],["family",{"2":{"506":1,"525":2,"591":1}}],["fail",{"2":{"449":1}}],["fallback",{"2":{"428":1}}],["false",{"2":{"122":1,"187":2,"252":2,"298":2,"300":1,"315":1,"335":1,"368":2,"396":2,"420":1,"430":27,"478":1,"505":1,"535":4}}],["faq",{"2":{"267":1,"396":1,"502":1}}],["fahrenheit",{"2":{"227":7}}],["factory",{"0":{"221":1},"2":{"204":1}}],["facebook",{"2":{"156":1,"419":1,"589":1}}],["façade",{"0":{"231":1},"2":{"191":1,"206":1,"231":1,"234":1,"319":1}}],["fa",{"2":{"183":2,"187":6}}],["favicon",{"2":{"180":1}}],["favorite",{"2":{"100":3}}],["favourites",{"2":{"95":3,"100":2,"106":3,"112":7,"113":3,"114":1}}],["fix",{"2":{"430":1}}],["fixall",{"2":{"430":2}}],["field",{"2":{"428":2}}],["fi",{"2":{"268":1,"396":2}}],["fitts",{"2":{"246":1}}],["finance",{"2":{"575":1}}],["finally",{"2":{"234":2,"338":2}}],["find",{"2":{"430":1,"453":4,"577":1}}],["fingerprint",{"2":{"123":1}}],["fibonaccioutput",{"0":{"452":1},"2":{"446":2,"451":1,"452":3}}],["fibonacciinput",{"0":{"453":1},"2":{"446":2,"453":3}}],["fibonacci",{"0":{"448":1},"2":{"446":2,"447":3,"448":12,"449":2}}],["fibonaccipromise",{"2":{"234":2,"448":2,"450":2}}],["fibonacciasync",{"2":{"233":2}}],["fibonaccisync",{"2":{"233":3}}],["fill",{"2":{"427":1}}],["filter",{"2":{"187":2,"369":1}}],["filenesting",{"2":{"430":3}}],["filename2",{"2":{"462":1}}],["filename1",{"2":{"462":1}}],["filename",{"2":{"147":2,"328":1,"357":1,"428":10}}],["filelistlayout",{"2":{"430":1}}],["file=",{"2":{"396":1}}],["filehippo",{"2":{"285":2}}],["filezilla",{"2":{"151":1}}],["file",{"2":{"151":1,"242":1,"396":2,"430":2,"462":1}}],["files",{"2":{"121":1,"149":1,"180":1,"396":1,"430":3}}],["fira",{"2":{"430":1}}],["first",{"2":{"171":1,"271":1,"430":1,"568":1,"588":1}}],["firstname",{"2":{"47":1}}],["firesbase",{"2":{"573":1}}],["firestore",{"2":{"491":1}}],["firefox",{"2":{"132":1,"178":1,"327":1,"377":1}}],["firebase",{"2":{"39":2,"41":1,"124":2,"425":2,"430":4,"573":1}}],["fowler",{"2":{"436":1,"476":1}}],["font",{"2":{"506":1,"525":2,"591":1}}],["fontweight",{"2":{"430":1}}],["fontligatures",{"2":{"430":1}}],["fontfamily",{"2":{"430":1}}],["fontaliasing",{"2":{"430":1}}],["fontawesome",{"0":{"183":1},"2":{"183":6}}],["fonts",{"2":{"300":1,"588":1}}],["found",{"2":{"299":3}}],["foundation",{"2":{"152":1}}],["foot",{"2":{"291":1}}],["footers",{"0":{"554":1},"1":{"555":1,"556":1,"557":1,"558":1,"559":1}}],["footer>",{"2":{"368":2}}],["footer",{"0":{"32":1},"2":{"28":1,"121":1,"535":2,"542":2,"570":1,"573":1}}],["folder",{"2":{"396":1}}],["fold",{"2":{"273":1}}],["fork",{"2":{"500":1}}],["foreign",{"2":{"478":1}}],["foreach",{"2":{"335":1}}],["formulate",{"2":{"430":10}}],["formkit",{"2":{"430":10}}],["formatters",{"2":{"474":2}}],["formatter",{"2":{"430":1}}],["formatting",{"2":{"430":1,"474":1}}],["formatonsave",{"2":{"430":1}}],["format",{"2":{"396":3,"430":2}}],["forward",{"2":{"413":1}}],["for=",{"2":{"165":1,"187":2,"261":1,"338":1,"407":1,"410":1}}],["for",{"0":{"165":1,"201":1},"1":{"204":1,"205":1,"206":1,"207":1},"2":{"55":1,"121":1,"142":1,"165":1,"168":1,"187":2,"191":1,"223":1,"233":2,"234":1,"241":1,"248":1,"261":1,"271":2,"396":1,"428":2,"430":1,"492":1,"505":1,"535":1}}],["fullpath",{"2":{"413":1}}],["fullscreen",{"2":{"294":2}}],["function",{"2":{"95":1,"100":4,"112":4,"187":2,"198":1,"227":2,"234":1,"261":1,"298":3,"307":1,"308":1,"311":2,"313":1,"316":2,"321":2,"335":1,"338":4,"343":1,"360":1,"363":2,"364":1,"368":1,"369":1,"415":1,"419":1,"420":3,"428":3,"440":3,"448":2,"563":1,"577":1}}],["functions",{"2":{"40":1,"124":2,"435":1,"478":1}}],["fu",{"2":{"23":1,"96":1,"430":1,"538":1}}],["l",{"2":{"147":2,"223":2,"272":1,"577":2}}],["learn",{"2":{"491":1}}],["learning",{"2":{"241":1}}],["lerna",{"2":{"430":2,"463":1}}],["leex",{"2":{"430":1}}],["less",{"2":{"430":1}}],["level",{"2":{"264":6}}],["let",{"0":{"152":1},"2":{"139":1,"152":3,"153":1,"223":1,"233":8,"234":4,"292":1,"321":2,"328":1,"334":2,"339":2,"391":1,"420":1,"428":1,"448":1,"453":2}}],["lengths",{"2":{"505":1}}],["length==0",{"2":{"187":1}}],["length",{"2":{"112":1,"114":1,"187":6,"223":1,"428":2}}],["left",{"2":{"51":1,"187":2}}],["live",{"2":{"454":1}}],["license",{"2":{"430":1}}],["limit",{"2":{"430":3}}],["lib",{"2":{"430":1,"435":1,"476":1}}],["lintstagedrc",{"2":{"430":2}}],["lint",{"2":{"430":4}}],["line",{"2":{"430":1,"505":1}}],["linenumbers",{"2":{"430":1}}],["lineno",{"2":{"328":1}}],["lines",{"0":{"410":1}}],["linear",{"2":{"259":1}}],["link",{"2":{"182":2,"183":3,"293":1,"380":1,"513":1,"520":2,"530":1,"531":1}}],["linux",{"0":{"460":1},"2":{"145":2,"148":3,"151":1,"178":2,"254":1,"291":1,"301":1,"327":1,"377":5,"430":1,"458":2,"460":1}}],["life",{"2":{"160":1}}],["lifecycle",{"2":{"72":1}}],["lighthouserc",{"2":{"430":20}}],["lighthouse",{"0":{"301":1},"2":{"289":1,"301":3,"302":1}}],["light",{"2":{"121":1,"187":1,"362":1}}],["like",{"2":{"100":1,"478":2}}],["listening",{"2":{"345":1}}],["listen",{"2":{"149":1,"345":1}}],["list",{"2":{"100":3,"185":1,"187":8,"429":1,"430":1}}],["listfavourites",{"2":{"100":3,"112":5,"113":1,"114":1}}],["lts",{"2":{"178":1,"377":1}}],["lt",{"2":{"96":1,"100":1,"129":1,"180":1,"186":1,"316":1,"364":1,"407":3,"430":1,"465":4}}],["ls",{"2":{"95":4}}],["large",{"2":{"505":1}}],["latexmk",{"2":{"430":1}}],["latest",{"2":{"179":1,"396":2}}],["landing",{"2":{"404":5,"407":1}}],["lang",{"2":{"295":1}}],["language",{"2":{"171":1,"352":1,"430":1}}],["lang=",{"2":{"89":1,"112":1,"159":1,"427":1,"543":1,"547":1,"577":1}}],["lastindexof",{"2":{"428":2}}],["last",{"2":{"358":2,"430":1}}],["lastname",{"2":{"47":1}}],["law",{"2":{"246":1}}],["label",{"2":{"187":3,"229":4,"230":2}}],["label>",{"2":{"187":4,"343":4}}],["lamda",{"2":{"124":1}}],["lambda",{"2":{"124":1}}],["layer",{"2":{"121":1,"415":1,"535":1}}],["layouts",{"2":{"436":1,"477":1}}],["layoutadmin",{"2":{"433":1,"476":1}}],["layoutdefault",{"2":{"433":1,"476":1}}],["layout",{"0":{"117":1},"2":{"27":1,"36":1,"121":1,"362":1,"410":1,"432":1,"433":1,"476":2,"535":2,"570":1,"573":1,"582":1,"591":1}}],["lot",{"2":{"430":1}}],["lof",{"2":{"430":1}}],["loadicons",{"2":{"428":2}}],["loadingerror",{"2":{"357":2}}],["loadingcomponent",{"2":{"357":3}}],["loading",{"2":{"122":2,"163":3,"439":2,"440":2}}],["loadproject",{"2":{"407":2}}],["loaderset",{"2":{"440":4}}],["loaderbar",{"2":{"439":1}}],["loader",{"2":{"357":2,"435":1,"439":1,"476":1}}],["loadnotes",{"2":{"338":4}}],["lock",{"2":{"180":1,"430":13}}],["location",{"2":{"149":2,"396":1,"417":1}}],["locale",{"2":{"577":3}}],["locales",{"2":{"577":3}}],["local",{"2":{"463":1}}],["localstore",{"2":{"319":1}}],["localstoragename",{"2":{"396":3}}],["localstorage",{"2":{"95":3,"96":2,"113":4,"123":2,"298":1,"319":4,"324":2,"396":3,"402":1,"407":1,"591":1}}],["localhost",{"2":{"142":1,"179":1,"299":1,"341":1,"345":2}}],["loop",{"2":{"483":1}}],["loopback",{"2":{"142":3}}],["lookup",{"2":{"331":1}}],["loosely",{"2":{"2":1}}],["logic",{"2":{"478":2}}],["login",{"2":{"106":1,"435":1,"476":1,"478":1}}],["logs",{"2":{"396":1,"430":1}}],["logmessage",{"2":{"360":2}}],["log",{"2":{"212":1,"227":1,"228":1,"233":7,"234":8,"328":1,"329":1,"345":1,"360":1,"396":1,"415":2,"422":2,"430":1,"463":6,"474":1}}],["logout",{"2":{"122":1,"478":1}}],["lodash",{"2":{"96":1}}],["low",{"2":{"39":1}}],["шпаргалки",{"0":{"493":1},"1":{"494":1,"495":1,"496":1,"497":1,"498":1,"499":1}}],["шкалы",{"2":{"327":1}}],["шкале",{"2":{"228":1,"515":1}}],["шнайдермане",{"2":{"248":1}}],["шнайдерман",{"2":{"248":1}}],["шнайдермана",{"0":{"248":1}}],["шлюз",{"2":{"209":1}}],["шлюза",{"2":{"208":1}}],["шестнадцатеричных",{"2":{"142":1}}],["шифрующая",{"2":{"416":1}}],["шифрованного",{"2":{"415":1}}],["шифрования",{"2":{"152":2,"416":1}}],["шиной",{"2":{"309":1,"407":1}}],["шину",{"2":{"308":1,"309":1}}],["шины",{"0":{"309":1},"1":{"310":1,"311":1},"2":{"304":1,"309":1,"310":1,"312":1}}],["шина",{"2":{"138":1,"309":1,"324":1}}],["широкие",{"2":{"414":1}}],["широкий",{"2":{"213":1,"239":2}}],["широким",{"2":{"96":1}}],["широком",{"2":{"225":1,"331":1}}],["широкое",{"2":{"183":1,"237":1}}],["широко",{"2":{"145":1,"146":1,"207":1,"234":1,"267":1,"272":1,"283":1,"415":1}}],["широкого",{"2":{"41":1,"266":1,"541":1}}],["ширина",{"2":{"582":1}}],["ширине",{"2":{"271":1}}],["ширину",{"2":{"117":1,"187":1,"263":1}}],["шириной",{"2":{"96":1}}],["ширины",{"2":{"96":1,"117":1}}],["шторки",{"2":{"570":1}}],["шторка",{"2":{"570":1}}],["шторок",{"2":{"551":1}}],["штраф",{"2":{"340":1}}],["штатном",{"2":{"430":1}}],["штатную",{"2":{"104":1}}],["штата",{"2":{"408":1}}],["штатов",{"2":{"408":1}}],["штат",{"2":{"408":1}}],["штабелируемыми",{"2":{"228":1}}],["штука",{"2":{"138":1}}],["штукатурки",{"2":{"26":1}}],["шагу",{"2":{"351":1}}],["шаге",{"2":{"228":1,"353":1,"416":1,"418":1,"419":1}}],["шагом",{"2":{"179":1,"182":1,"186":1,"289":1,"334":1,"337":1,"350":1,"353":1,"384":1,"417":1,"420":1,"462":1}}],["шагов",{"2":{"72":1,"139":1,"152":1,"178":1,"258":1,"415":1,"419":1,"422":1,"466":1}}],["шаги",{"2":{"177":1,"178":2,"179":1,"182":1,"190":1,"368":1,"416":1,"465":1,"466":2}}],["шаг",{"0":{"352":1,"353":1,"354":1},"2":{"142":1,"179":1,"188":1,"228":1,"237":1,"272":1,"317":1,"327":1,"350":1,"351":1,"352":1,"353":1,"354":1,"369":1,"384":1,"419":1,"421":2,"465":1,"492":1}}],["шагах",{"2":{"248":1}}],["шагами",{"2":{"152":1}}],["шага",{"2":{"72":1}}],["шаблонная",{"2":{"447":1}}],["шаблонные",{"0":{"406":1}}],["шаблонным",{"2":{"273":1}}],["шаблону",{"2":{"231":1,"272":1,"298":1,"332":1,"333":1,"367":1,"369":1,"478":1}}],["шаблоном",{"2":{"222":1,"226":1,"236":1,"257":1,"323":1,"368":1,"410":1}}],["шаблонов",{"0":{"203":1,"309":1,"354":1,"414":1},"1":{"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"232":1,"233":1,"234":1,"310":1,"311":1,"415":1,"416":1,"417":1,"418":1,"419":1,"420":1,"421":1,"422":1},"2":{"177":1,"191":3,"201":1,"202":2,"203":2,"207":2,"212":1,"220":1,"237":3,"240":1,"253":2,"262":1,"268":2,"273":1,"274":1,"286":1,"287":1,"288":2,"289":1,"298":1,"304":1,"319":1,"320":1,"331":1,"348":1,"351":1,"353":1,"354":1,"360":1,"361":1,"375":1,"399":1,"421":1}}],["шаблонам",{"2":{"240":1,"250":1,"302":1,"306":1,"492":1}}],["шаблонами",{"0":{"320":1},"1":{"321":1,"322":1},"2":{"207":1,"209":1,"221":1,"227":1,"234":1,"237":1,"249":1,"275":1,"284":1,"304":1,"325":1,"346":1}}],["шаблонах",{"2":{"182":1,"186":1,"231":1,"240":1,"348":1,"375":1}}],["шаблона",{"2":{"160":1,"177":1,"181":1,"187":1,"202":1,"210":2,"222":1,"224":2,"225":1,"226":2,"228":2,"230":1,"231":2,"233":2,"254":1,"255":1,"258":1,"260":3,"261":1,"272":2,"307":1,"309":1,"311":1,"312":1,"319":1,"320":1,"325":1,"330":1,"331":2,"332":1,"347":1,"360":2,"362":5,"364":2,"368":1,"407":1,"420":1,"463":1,"540":1,"542":1,"573":1}}],["шаблоны",{"0":{"191":1,"204":1,"205":1,"206":1,"207":1,"237":1,"250":1,"262":1,"270":1,"274":1,"275":1,"373":1,"383":1},"1":{"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":1,"203":1,"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"232":1,"233":1,"234":1,"235":1,"236":1,"238":1,"239":1,"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":2,"252":2,"253":2,"254":2,"255":2,"256":2,"257":2,"258":2,"259":2,"260":2,"261":2,"262":1,"263":2,"264":2,"265":2,"266":2,"267":2,"268":2,"269":2,"270":1,"271":2,"272":2,"273":2,"274":2,"275":1,"276":2,"277":2,"278":2,"279":2,"280":2,"281":2,"282":2,"283":2,"284":2,"285":2,"286":2,"287":1,"288":1,"374":1,"375":1,"376":1,"377":1,"378":1,"379":1,"380":1},"2":{"135":1,"155":1,"168":1,"191":1,"202":2,"203":1,"206":1,"227":1,"235":4,"236":2,"237":1,"240":1,"244":1,"249":2,"253":2,"258":1,"262":1,"270":1,"274":4,"275":1,"288":2,"304":1,"305":1,"309":1,"318":1,"320":1,"330":1,"331":1,"332":1,"333":1,"334":1,"348":1,"350":1,"354":4,"356":1,"362":1,"363":1,"369":1,"371":2,"372":1,"375":1,"383":1,"392":1,"401":1,"413":1,"414":1,"424":1,"433":1,"476":1}}],["шаблоне",{"2":{"89":1,"160":5,"188":1,"228":3,"231":1,"261":1,"286":1,"298":1,"308":1,"311":1,"313":1,"332":1,"333":1,"343":1,"363":1,"368":1,"369":1,"406":1,"413":1,"426":1,"538":1}}],["шаблон",{"0":{"202":1,"208":1,"213":1,"221":1,"222":1,"224":1,"226":1,"228":1,"231":1,"232":1,"234":1,"331":1,"332":1},"1":{"209":1,"210":1,"211":1,"212":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"223":1,"225":1,"227":1,"229":1,"230":1,"233":1},"2":{"41":1,"112":1,"160":1,"177":1,"183":1,"186":1,"187":2,"202":2,"204":3,"205":2,"206":3,"207":2,"208":1,"209":1,"212":2,"213":1,"218":1,"220":1,"221":1,"222":2,"223":1,"224":1,"225":2,"226":3,"227":2,"228":3,"230":2,"231":4,"232":3,"233":1,"234":2,"236":1,"251":1,"253":1,"254":3,"255":1,"256":1,"257":2,"263":1,"267":2,"268":5,"271":1,"272":4,"276":1,"277":1,"278":1,"281":2,"284":1,"308":2,"309":2,"311":2,"312":1,"314":1,"322":1,"325":1,"331":7,"332":1,"343":1,"354":2,"359":3,"361":1,"365":1,"420":3,"436":1,"452":1,"477":1,"478":1,"482":2,"490":1}}],["шрифтом",{"2":{"187":1,"276":1}}],["шрифтовых",{"2":{"183":1}}],["шрифтов",{"2":{"181":3,"183":3,"185":1,"243":1}}],["шрифтами",{"2":{"183":1,"243":1}}],["шрифта",{"2":{"182":1}}],["шрифты",{"2":{"180":1,"183":5,"189":1}}],["шрифт",{"2":{"26":1,"243":1}}],["цукерберг",{"2":{"482":1}}],["цветом",{"2":{"301":1,"448":1}}],["цветовую",{"2":{"506":1}}],["цветов",{"2":{"239":1,"241":1,"251":1,"291":1}}],["цветовой",{"2":{"95":1,"241":1}}],["цветовые",{"2":{"26":1,"573":1}}],["цветах",{"2":{"252":1}}],["цвета",{"2":{"241":2,"242":1,"251":1,"291":1,"448":1}}],["цветами",{"2":{"183":1,"298":1}}],["цвет",{"2":{"183":1,"186":1,"241":2,"252":1,"259":1,"295":2}}],["цитата",{"2":{"490":1}}],["цифровыми",{"2":{"422":1}}],["цифрой",{"2":{"255":1,"260":1}}],["цифра",{"2":{"255":1}}],["цифры",{"2":{"142":1}}],["цикле",{"2":{"327":1,"483":1}}],["цикл",{"2":{"165":1,"198":1,"299":1}}],["циклу",{"2":{"165":1}}],["цикла",{"2":{"160":1,"165":1,"198":2,"218":1,"311":1,"363":1,"407":1,"410":1}}],["циклов",{"2":{"96":1}}],["царька",{"2":{"111":1}}],["цепляемыми",{"2":{"228":1}}],["цепочечный",{"2":{"448":1}}],["цепочечными",{"2":{"128":1,"448":1}}],["цепочку",{"2":{"219":1,"233":1,"234":2}}],["цепочке",{"2":{"157":1,"234":1}}],["ценность",{"2":{"435":1,"468":1,"469":1,"476":1}}],["цене",{"2":{"422":1}}],["ценовые",{"2":{"281":1}}],["цена",{"2":{"280":1}}],["цен",{"0":{"280":1}}],["центов",{"2":{"142":1}}],["централизованному",{"2":{"362":1,"407":1}}],["централизованное",{"2":{"324":1}}],["централизованного",{"2":{"304":1,"313":2}}],["централизованным",{"2":{"313":1}}],["центральный",{"2":{"314":1,"320":1,"467":1}}],["центральном",{"2":{"467":1}}],["центрального",{"2":{"318":1,"323":1}}],["центральное",{"2":{"314":2,"318":1,"348":1}}],["центральной",{"2":{"31":1,"581":1}}],["центральную",{"2":{"241":1}}],["центральная",{"2":{"28":1}}],["центру",{"2":{"186":1,"256":1}}],["центрирования",{"2":{"186":1}}],["центре",{"2":{"179":1}}],["центр",{"2":{"123":1}}],["цены",{"2":{"142":1,"280":1,"281":1}}],["цену",{"2":{"96":1}}],["целях",{"2":{"340":1}}],["целями",{"2":{"74":1,"246":1}}],["целям",{"2":{"73":1,"179":1}}],["целый",{"2":{"291":1,"466":1,"467":1}}],["целые",{"2":{"202":1,"444":1}}],["целая",{"2":{"207":1}}],["целостного",{"2":{"457":1}}],["целостные",{"2":{"435":1,"476":1}}],["целого",{"2":{"261":1}}],["целое",{"2":{"158":1,"197":1,"413":1,"444":1,"446":1}}],["целом",{"2":{"73":1,"152":1,"188":1,"201":1,"231":1,"291":1,"331":1,"351":1,"368":1,"421":1,"430":1,"477":1,"490":1,"491":1,"492":2}}],["целесообразность",{"2":{"479":1}}],["целесообразно",{"2":{"347":1,"436":1,"477":1}}],["целесообразным",{"2":{"344":1}}],["целевую",{"2":{"407":1}}],["целевые",{"2":{"296":1}}],["целевых",{"2":{"271":1,"291":1}}],["целевым",{"2":{"226":1}}],["целевая",{"2":{"226":1,"402":2}}],["целевом",{"2":{"254":1}}],["целевому",{"2":{"226":1,"228":1,"230":1,"254":1,"422":1,"483":1}}],["целевого",{"2":{"228":1,"229":2,"230":1}}],["целевое",{"2":{"144":1}}],["целевой",{"2":{"142":1,"226":4,"227":2,"228":1,"422":1,"465":1}}],["целей",{"2":{"155":1,"183":2,"202":1,"239":2,"240":1,"318":1,"319":1,"330":1,"331":1,"414":1,"422":1}}],["цели",{"0":{"66":1,"67":1,"542":1},"1":{"67":1,"68":1,"69":1,"70":1},"2":{"96":1,"194":1,"246":5,"249":1,"396":1,"478":1}}],["целиком",{"2":{"26":1}}],["цельсия",{"2":{"226":1}}],["целью",{"2":{"79":1,"227":1,"275":1,"277":1,"281":1,"285":1,"286":1,"311":1,"410":1,"444":1,"446":1}}],["цель",{"0":{"63":1},"2":{"65":1,"73":1,"139":1,"157":1,"185":1,"226":2,"228":3,"239":2,"249":1,"258":1,"268":1,"407":1,"453":1}}],["bg",{"2":{"506":7,"525":5,"530":4,"531":5}}],["bit",{"2":{"478":1}}],["bitkeeper",{"2":{"457":1,"458":1}}],["binance",{"2":{"422":1}}],["bind",{"0":{"162":1},"2":{"162":1}}],["bzl",{"2":{"430":1}}],["bbl",{"2":{"430":1}}],["by",{"2":{"311":1,"396":1,"448":2}}],["blg",{"2":{"430":1}}],["blame",{"2":{"430":3}}],["black",{"2":{"187":1}}],["bloc",{"2":{"430":1}}],["blockchain",{"2":{"422":1}}],["block",{"2":{"259":1}}],["blog",{"2":{"132":1}}],["blue",{"2":{"186":1,"187":4}}],["b",{"2":{"156":3,"234":7,"464":1,"465":1,"474":2}}],["built",{"2":{"167":1,"168":2,"364":1}}],["builddata",{"2":{"396":4}}],["build",{"2":{"132":1,"144":1,"180":1,"396":10,"429":1,"430":4,"447":2,"561":2}}],["button>вариант",{"2":{"362":2}}],["button>option",{"2":{"362":2}}],["button>",{"2":{"167":2,"168":1,"187":2,"298":1,"307":1,"308":1,"311":1,"313":2,"318":2,"338":1,"343":1,"362":4,"368":2,"577":1}}],["button",{"2":{"167":2,"168":1,"187":4,"252":1,"298":1,"307":1,"308":1,"311":1,"313":2,"318":2,"338":1,"343":1,"368":2,"453":2,"490":1,"577":2}}],["bundleconfig",{"2":{"430":2}}],["bundle",{"2":{"158":1,"429":3}}],["bundler",{"2":{"158":1}}],["business",{"0":{"331":1},"2":{"325":1,"330":1,"331":5,"333":1,"347":1,"478":2}}],["bus",{"0":{"311":1},"2":{"138":1,"308":2}}],["brew",{"2":{"461":1}}],["break",{"2":{"225":3,"227":2}}],["breaking",{"2":{"136":1}}],["breadcrumbs",{"0":{"264":1},"2":{"117":1}}],["bracketpairs",{"2":{"430":1}}],["brand",{"2":{"506":4,"525":4,"530":2,"531":2}}],["brands",{"2":{"183":3}}],["branching",{"2":{"463":1}}],["branch",{"2":{"396":1,"458":1,"463":1,"464":8,"465":1,"561":2}}],["branches",{"2":{"396":2}}],["brave",{"2":{"178":1}}],["br>",{"2":{"130":1,"313":1}}],["browserslist",{"2":{"430":2}}],["browser",{"2":{"123":1,"294":1,"377":1,"430":1}}],["box",{"2":{"543":4}}],["boilerplate",{"2":{"542":1}}],["both",{"2":{"505":1}}],["bottombar",{"2":{"187":1}}],["bound",{"2":{"478":2}}],["boundary",{"2":{"430":1}}],["bower",{"2":{"430":3}}],["border",{"2":{"187":2,"259":3,"362":1,"506":2,"525":2,"530":1,"531":1,"543":1,"591":1}}],["bootstrap",{"2":{"181":1}}],["boolean",{"2":{"112":1,"187":1,"334":1}}],["body>",{"2":{"157":2,"520":1,"530":2,"531":2}}],["body",{"2":{"23":1,"96":1,"157":2,"180":1,"181":1,"345":1,"520":1,"530":1,"531":2,"543":1,"590":1}}],["between",{"2":{"505":1}}],["be",{"2":{"396":2,"430":1,"505":1,"543":1}}],["below",{"2":{"273":1,"505":1}}],["bento",{"2":{"266":1}}],["beforeinstallprompt",{"2":{"298":3}}],["before",{"2":{"233":4,"234":2}}],["bearer",{"2":{"51":3,"56":3,"419":2}}],["best",{"0":{"374":1},"2":{"22":1,"238":1,"290":1,"305":1,"326":1,"348":1,"368":1,"369":1,"379":1,"398":1,"443":1,"491":2,"502":1}}],["babel",{"2":{"430":10}}],["babelrc",{"2":{"430":10}}],["bazelproject",{"2":{"430":1}}],["bazelignore",{"2":{"430":1}}],["bazelrc",{"2":{"430":1}}],["bazel",{"2":{"430":3}}],["banner",{"2":{"426":1}}],["band",{"2":{"244":1}}],["bar",{"2":{"362":1}}],["bars",{"0":{"258":1},"1":{"259":1},"2":{"263":2}}],["bash$",{"2":{"535":1}}],["bashnpm",{"2":{"510":1,"523":1,"527":1}}],["bashpnpm",{"2":{"510":2,"523":2,"527":2,"535":1}}],["basic",{"0":{"307":1,"308":1,"315":1}}],["basetoggle",{"2":{"571":1}}],["baseurl",{"2":{"546":1}}],["baseurl=",{"2":{"341":1}}],["baseinput",{"2":{"435":1,"476":1,"485":1}}],["baseicon",{"0":{"427":1,"547":1},"2":{"107":1,"114":3,"426":2,"429":2,"434":1,"476":1,"547":5,"571":1}}],["baseiconbutton",{"2":{"88":2}}],["basecard",{"2":{"432":1,"476":1}}],["basebutton",{"2":{"432":1,"434":1,"435":1,"436":1,"476":3,"477":1,"485":1,"490":2}}],["base64urlencode",{"2":{"416":2}}],["base64",{"2":{"416":3,"426":1}}],["based",{"2":{"123":3,"337":1}}],["base",{"0":{"562":1},"2":{"121":1,"427":1,"506":1,"525":2,"562":2,"591":1}}],["backroute",{"2":{"438":1}}],["backers",{"2":{"430":1}}],["backend",{"2":{"39":1,"122":1,"124":1,"416":1}}],["backups",{"2":{"396":1}}],["backup",{"2":{"396":8}}],["background",{"2":{"295":1,"296":1,"300":1,"511":2,"513":1,"518":1,"520":1,"524":1,"528":2,"530":2,"531":3}}],["back",{"2":{"264":1,"413":1}}],["badge",{"2":{"88":1,"112":1,"255":1,"308":1}}],["baas",{"0":{"37":1},"1":{"38":1,"39":1,"40":1,"41":1},"2":{"39":1,"124":5}}],["two",{"2":{"492":1}}],["twitter",{"2":{"419":1,"589":8}}],["tdd",{"0":{"444":1},"2":{"442":1,"444":2,"446":1}}],["turbo",{"2":{"430":2}}],["tmp",{"2":{"430":1}}],["ttf",{"2":{"300":1}}],["t",{"0":{"199":1},"2":{"191":1,"272":1,"429":3,"478":2,"503":1,"538":1,"575":2,"577":2}}],["txtlogs",{"2":{"463":1}}],["txthome",{"2":{"264":2}}],["txtserver",{"2":{"149":1}}],["txt",{"2":{"142":1,"180":1,"430":1,"432":1,"433":1,"434":1,"435":1,"476":4}}],["typ",{"2":{"416":1}}],["typicode",{"2":{"124":1,"545":1}}],["types",{"2":{"429":1,"498":1}}],["typescript",{"0":{"91":1,"498":1},"1":{"92":1,"93":1},"2":{"23":2,"101":1,"138":1,"159":1,"179":1,"318":1,"429":3,"430":6,"478":2,"498":4,"538":1}}],["type=",{"2":{"166":1,"187":3,"338":1,"343":3,"520":1,"577":1}}],["typedoc",{"2":{"430":2}}],["typed",{"2":{"100":1}}],["type",{"2":{"56":1,"100":1,"187":1,"221":2,"251":1,"296":1,"300":3,"358":2,"368":2,"396":1,"417":1,"427":7,"546":1,"589":1}}],["trevis",{"2":{"394":1}}],["tree",{"2":{"96":1,"238":1,"290":1,"305":1,"326":1,"398":1,"428":1,"430":3,"443":1,"478":2,"484":1}}],["tr",{"2":{"293":1}}],["travis",{"2":{"430":2}}],["traffic",{"2":{"291":1}}],["transactions",{"2":{"575":1}}],["transport",{"2":{"545":1}}],["transparent",{"2":{"530":1,"531":2}}],["translate",{"2":{"432":1,"433":1,"434":1,"476":3,"491":1}}],["transformer",{"2":{"430":1}}],["transform",{"2":{"259":2,"482":1}}],["transfer",{"2":{"151":1,"152":1,"340":1,"396":1,"414":1}}],["transitiongroup",{"2":{"168":1}}],["transition",{"2":{"168":1}}],["tricks",{"0":{"550":1}}],["trigger",{"2":{"453":1}}],["triggerexpansionontab",{"2":{"430":1}}],["triggerevent",{"2":{"261":4}}],["trivago",{"2":{"291":1}}],["try",{"2":{"149":1,"218":1,"234":2,"241":1,"339":3,"449":1}}],["true",{"2":{"122":1,"163":2,"187":1,"252":1,"298":2,"300":1,"316":1,"321":1,"335":1,"357":1,"368":1,"396":1,"404":2,"408":2,"428":2,"430":61,"438":1,"505":7,"535":4}}],["terserrc",{"2":{"430":10}}],["terminal",{"2":{"178":1,"430":5}}],["tex",{"2":{"430":1}}],["textlint",{"2":{"430":2}}],["text=abc",{"2":{"407":1}}],["text",{"2":{"166":1,"178":1,"187":12,"338":5,"343":1,"362":2,"407":1,"452":1,"455":2,"506":6,"525":6,"530":3,"531":3,"591":6}}],["textarea>",{"2":{"338":1}}],["textarea",{"2":{"166":1,"251":1,"338":1}}],["testnet",{"2":{"546":1}}],["testjsonrpc",{"2":{"546":1}}],["testrest",{"2":{"545":2}}],["tests",{"0":{"448":1,"452":1,"453":1},"2":{"432":1,"433":1,"434":3,"435":1,"447":4,"476":6}}],["testservice",{"2":{"335":4,"340":1,"342":1}}],["testing",{"2":{"377":1,"442":1,"444":2,"446":1}}],["test",{"0":{"336":1,"448":1,"451":1,"452":1,"453":1},"1":{"452":1,"453":1},"2":{"335":1,"336":2,"343":1,"345":2,"430":1,"442":1,"445":1,"447":7,"448":10,"450":2,"451":5,"452":5,"453":3,"454":2,"455":1,"456":2,"479":1,"577":1}}],["team",{"2":{"244":1}}],["temperature",{"2":{"227":5}}],["templatepokemondetail",{"2":{"433":1,"476":1}}],["templatepokemonlist",{"2":{"433":1,"476":1}}],["templates",{"2":{"433":1,"476":1}}],["template",{"2":{"114":1,"159":1,"362":8,"568":3}}],["template>",{"2":{"112":2,"130":2,"159":2,"168":2,"186":2,"229":2,"230":2,"259":2,"261":2,"307":2,"308":2,"311":2,"313":2,"318":2,"322":2,"338":2,"343":2,"362":9,"364":2,"368":2,"407":2,"427":2,"438":6,"439":2,"490":2,"547":2,"568":2,"577":2}}],["teleport",{"2":{"135":1,"168":1}}],["telegram",{"2":{"64":1,"399":1}}],["threshold",{"2":{"568":2}}],["threads",{"2":{"483":1}}],["throw",{"2":{"218":1,"396":1,"448":1,"449":1}}],["that",{"2":{"100":2,"478":4}}],["there",{"2":{"330":1,"478":1,"505":1}}],["themetoggle",{"2":{"591":1}}],["themes",{"2":{"542":1,"573":1}}],["theme",{"2":{"295":1,"296":1,"300":1,"571":1}}],["thenable",{"2":{"234":1}}],["then",{"2":{"122":1,"234":13,"335":1,"336":1,"338":2,"341":2,"343":1,"368":1,"396":4,"415":1,"419":1,"420":2,"422":1}}],["the",{"0":{"201":1},"1":{"204":1,"205":1,"206":1,"207":1},"2":{"100":5,"191":1,"226":1,"248":1,"273":1,"396":2,"426":2,"428":1,"430":1,"448":4,"492":1,"505":3}}],["this",{"2":{"100":2,"159":1,"160":6,"212":2,"216":1,"218":1,"219":3,"223":9,"315":4,"321":3,"413":2,"430":3}}],["tahoma",{"2":{"506":1}}],["tazerc",{"2":{"430":2}}],["tauri",{"2":{"404":1}}],["tail",{"2":{"396":1}}],["tails",{"2":{"364":4}}],["tailwind",{"2":{"181":2,"430":10,"490":2}}],["target",{"2":{"227":6,"321":7,"396":15,"429":1}}],["tasks",{"2":{"187":2,"430":2}}],["task",{"2":{"172":1,"187":1}}],["tabs",{"2":{"430":1}}],["tabsize",{"2":{"430":1}}],["tab",{"2":{"98":1}}],["table",{"0":{"45":1,"46":1,"47":1}}],["tablet",{"2":{"23":1,"104":1,"543":4,"580":2,"582":1}}],["tags",{"2":{"121":1,"535":1,"540":1,"589":2}}],["tag",{"0":{"90":1,"115":1},"2":{"563":2}}],["tsimport",{"2":{"440":1}}],["tsinterface",{"2":{"92":1}}],["tsup",{"2":{"430":2}}],["tslint",{"2":{"430":2}}],["tsdoc",{"2":{"430":11}}],["tsdk",{"2":{"430":1}}],["tsx",{"2":{"430":3}}],["tsconfig",{"2":{"429":2,"430":11}}],["tsconst",{"2":{"93":1}}],["tsc",{"2":{"429":1}}],["ts",{"0":{"83":1,"92":1,"440":1},"2":{"92":1,"95":1,"112":2,"113":1,"121":1,"159":1,"430":33,"434":3,"454":1,"476":3,"478":1,"543":1,"545":1,"546":2,"547":3,"549":1,"562":1,"577":2}}],["tip",{"2":{"474":1,"482":1}}],["tidy",{"2":{"430":1}}],["timeline>",{"2":{"481":1,"513":1}}],["timeline",{"0":{"514":1},"1":{"515":1,"516":1,"517":1,"518":1},"2":{"481":1,"505":2,"510":3,"511":4,"513":3,"520":6,"521":1,"522":1,"523":3,"524":5,"525":1,"527":3,"528":4,"530":3,"531":4,"532":1}}],["time",{"2":{"416":1,"420":1}}],["timeout",{"2":{"357":3}}],["times",{"2":{"187":1}}],["timestamp",{"2":{"47":1}}],["tinder",{"2":{"291":2}}],["titlebarstyle",{"2":{"430":1}}],["title=",{"2":{"230":1,"307":3,"359":1,"368":1,"481":1}}],["title",{"2":{"0":1,"17":1,"18":1,"19":1,"51":3,"83":4,"92":2,"93":1,"308":2,"311":3,"338":5,"339":2,"359":2,"368":4,"505":2,"589":4}}],["toaster",{"0":{"473":1}}],["toarray",{"2":{"339":2}}],["tothrow",{"2":{"449":1}}],["total",{"2":{"170":1,"171":1}}],["toequal",{"2":{"448":1,"453":1}}],["tobegreaterthan",{"2":{"448":1}}],["tobe",{"2":{"448":8,"450":1,"453":2}}],["toml",{"2":{"430":10}}],["tocontain",{"2":{"452":1}}],["toc",{"2":{"430":1}}],["tostring",{"2":{"417":1}}],["to=",{"2":{"407":3,"410":1}}],["tool",{"2":{"430":3}}],["toolchain",{"2":{"430":1}}],["tools",{"2":{"377":1}}],["tooltips",{"0":{"254":1}}],["top",{"2":{"259":1,"404":1}}],["togglestatus",{"2":{"369":2}}],["toggle",{"2":{"252":2,"547":1}}],["togglefavourite",{"2":{"112":3}}],["todolist",{"2":{"352":1,"353":1}}],["todofilter",{"2":{"352":1}}],["todoproject",{"2":{"351":1,"352":2,"353":2,"369":3,"402":1,"404":1,"407":3}}],["todo",{"2":{"187":26,"369":3}}],["todoservice",{"2":{"369":1}}],["todosummary",{"2":{"352":1,"369":1}}],["todos",{"0":{"187":1},"2":{"186":7,"545":1}}],["tokens",{"2":{"341":1,"416":1}}],["token",{"2":{"122":1,"123":5,"418":2,"419":3,"501":2,"505":2}}],["touchslideoutdrawer",{"0":{"553":1},"2":{"121":1,"553":1}}],["to",{"0":{"138":1,"144":1,"185":1,"188":1,"273":1,"369":1,"370":1,"402":1},"1":{"186":1,"187":1,"188":1},"2":{"43":1,"100":1,"121":1,"122":1,"177":1,"179":1,"184":1,"185":2,"186":1,"187":2,"188":1,"189":1,"273":1,"343":3,"351":1,"364":1,"368":1,"369":3,"370":1,"372":1,"396":2,"397":2,"402":1,"404":1,"407":2,"411":4,"426":1,"430":2,"436":1,"444":1,"445":1,"448":1,"476":1,"478":3,"479":1,"505":4,"511":1,"528":1}}],["agnostic",{"2":{"545":1}}],["age",{"2":{"358":1}}],["a8b1ff",{"2":{"506":1,"530":1,"531":1}}],["affects",{"2":{"505":1}}],["after",{"2":{"233":5,"234":2,"363":1,"396":1}}],["azure",{"2":{"430":2}}],["ava",{"2":{"430":10}}],["available",{"0":{"149":1},"2":{"148":1}}],["aux",{"2":{"430":1}}],["automation",{"2":{"561":1}}],["autocompleterefs",{"2":{"430":1}}],["autodetection",{"2":{"430":1}}],["autodetectcolorscheme",{"2":{"430":1}}],["autofetch",{"2":{"430":1}}],["autofocus",{"2":{"187":1}}],["auto",{"2":{"300":1,"427":1,"430":1,"587":1}}],["autoupdate",{"2":{"300":1,"430":1}}],["authors",{"2":{"430":3}}],["authorization",{"2":{"51":3,"56":3,"123":2,"419":2}}],["authenticator",{"2":{"421":1}}],["auth0",{"2":{"419":1}}],["authinterceptor",{"2":{"122":2}}],["auth",{"2":{"122":3,"417":1,"540":1,"542":1,"573":2}}],["abc",{"2":{"407":1}}],["a>",{"2":{"338":2}}],["ajax",{"2":{"231":1,"399":1,"414":2}}],["aaaa",{"2":{"142":2}}],["awesome",{"2":{"184":1}}],["aws",{"2":{"124":1}}],["await",{"2":{"55":3,"83":2,"93":2,"122":3,"234":8,"299":3,"339":1,"441":1,"450":3,"483":2,"545":1}}],["amd",{"2":{"377":1}}],["amazon",{"2":{"124":2,"257":5,"291":1,"425":2}}],["amplify",{"2":{"39":1}}],["atombutton",{"2":{"433":1,"476":1}}],["atoms",{"2":{"433":1,"476":1}}],["atomicon",{"2":{"433":1,"476":1}}],["atomic",{"2":{"433":1,"476":1}}],["at",{"2":{"123":6,"416":1,"430":1,"501":1}}],["attributes",{"0":{"68":1}}],["ad",{"2":{"261":1}}],["adminlayout",{"2":{"432":1,"434":1,"476":2}}],["admin",{"2":{"142":1,"360":1}}],["adapter",{"2":{"121":1,"535":1}}],["added",{"2":{"465":1}}],["addextraspaceontop",{"2":{"430":1}}],["addeventlistener",{"2":{"198":1,"298":2,"299":1,"363":1}}],["addroute",{"2":{"413":1}}],["addresponseinterceptor",{"2":{"122":2,"546":1}}],["addnote",{"2":{"338":1,"339":2}}],["addyosmani",{"2":{"291":1}}],["addcommand",{"2":{"225":1}}],["addtodo",{"2":{"187":6}}],["adds",{"2":{"121":1,"535":1,"540":1}}],["add",{"2":{"54":1,"112":1,"121":7,"339":1,"440":1,"460":1,"462":2,"465":1,"466":1,"510":2,"523":2,"527":2,"535":6,"540":3}}],["acme",{"2":{"587":3}}],["acr",{"2":{"430":1}}],["acn",{"2":{"430":1}}],["activitybar",{"2":{"430":1}}],["active",{"2":{"368":3,"407":1,"410":1,"430":1,"439":1}}],["actions",{"0":{"396":1,"560":1},"1":{"561":1,"562":1},"2":{"121":1,"314":1,"315":4,"316":1,"394":1,"396":12,"430":1,"491":1,"542":1,"561":1,"570":1,"573":1}}],["action",{"0":{"273":1},"2":{"121":1,"168":4,"225":2,"273":1,"396":9,"430":1,"453":1,"535":1,"561":2}}],["according",{"2":{"448":1}}],["accordian",{"2":{"437":1}}],["accordianpanel",{"2":{"437":1}}],["accountroutes",{"2":{"438":2}}],["account",{"2":{"122":1,"426":1,"428":1,"438":2}}],["accept",{"2":{"368":5}}],["accessing",{"2":{"505":1}}],["accessibility",{"2":{"490":1}}],["accessibilitysupport",{"2":{"430":1}}],["access",{"2":{"123":5,"125":4,"501":1}}],["ac",{"2":{"113":2}}],["arguments",{"2":{"563":1}}],["args",{"2":{"321":2}}],["article",{"2":{"488":1}}],["artisan",{"2":{"430":1}}],["arty",{"0":{"61":1},"2":{"80":2,"83":1,"104":1,"120":1,"121":5}}],["array",{"2":{"100":8,"112":1,"358":1}}],["always",{"2":{"478":1}}],["alg",{"2":{"416":1,"430":1}}],["alexa",{"2":{"239":1}}],["alert",{"2":{"233":1}}],["ally",{"2":{"430":3,"578":2}}],["all",{"2":{"234":1,"430":1}}],["allowcompoundwords",{"2":{"430":1}}],["allows",{"2":{"430":1}}],["allow",{"2":{"125":4}}],["align",{"2":{"259":1}}],["alias",{"2":{"184":1,"429":1}}],["alibris",{"2":{"22":1}}],["alt",{"2":{"98":2,"506":2,"525":2,"530":1,"531":1}}],["air",{"2":{"430":1}}],["ai",{"2":{"96":1,"98":1}}],["animated",{"2":{"511":2,"513":1,"520":1,"524":1,"528":2,"530":1,"531":1}}],["animation",{"2":{"259":1}}],["analysis",{"2":{"430":1,"498":1}}],["analytics",{"0":{"563":1,"589":1},"2":{"121":1,"535":1,"540":1,"549":1,"570":1}}],["angular",{"2":{"399":1,"482":2}}],["anothercomponent",{"2":{"357":3}}],["anon",{"2":{"55":1,"56":6}}],["android",{"2":{"291":2,"298":1}}],["and",{"0":{"200":1,"374":1},"2":{"121":2,"142":1,"238":1,"271":1,"290":1,"305":1,"326":1,"348":1,"368":1,"369":1,"379":1,"396":4,"398":1,"414":1,"443":1,"449":1,"452":2,"453":2,"478":4,"491":2,"502":1,"535":1,"540":1,"561":3}}],["an",{"2":{"100":1,"411":1,"449":1,"478":2}}],["annotations",{"2":{"430":1}}],["annotation",{"2":{"100":1}}],["antfu",{"2":{"430":3}}],["antialiased",{"2":{"430":1}}],["anthony",{"2":{"96":1}}],["antony",{"2":{"23":1,"430":1,"538":1}}],["any",{"2":{"92":4,"377":1,"587":1}}],["axios",{"2":{"41":1,"122":1,"231":1,"340":4,"341":5,"345":2,"414":4,"415":4,"419":5,"420":3,"541":1,"545":1}}],["apt",{"2":{"460":4}}],["apollo",{"2":{"430":2}}],["apache",{"0":{"146":1},"1":{"147":1},"2":{"145":1,"146":1,"148":1,"337":1,"377":1,"425":1}}],["appsidebar",{"2":{"438":1,"580":1}}],["appsettings",{"2":{"430":2}}],["appsearchbar",{"2":{"107":1}}],["appfooter",{"2":{"438":2}}],["appveyor",{"2":{"430":2}}],["appinstalled",{"2":{"298":2}}],["appmanifest",{"2":{"293":1}}],["apploader",{"0":{"439":1}}],["appleboy",{"2":{"396":3}}],["apple",{"2":{"291":2}}],["applications",{"2":{"300":1}}],["application",{"2":{"56":1,"121":1,"293":1,"297":1,"375":1,"492":2,"535":1,"546":1}}],["approach",{"2":{"271":1}}],["app",{"0":{"186":1,"407":1},"2":{"95":1,"104":2,"107":1,"114":1,"127":5,"128":5,"142":1,"143":1,"144":3,"149":2,"157":6,"158":1,"159":2,"180":2,"185":1,"186":3,"291":2,"293":1,"298":5,"301":1,"317":7,"336":1,"345":6,"351":2,"356":6,"360":2,"368":8,"369":1,"405":4,"406":1,"407":2,"427":2,"432":1,"433":1,"434":1,"435":4,"436":1,"438":1,"439":1,"441":1,"446":2,"476":7,"477":1,"492":1,"543":1,"590":1}}],["appheader>",{"2":{"568":1}}],["appheadersecond",{"2":{"568":1}}],["appheaderfirst",{"2":{"568":1}}],["appheader",{"2":{"88":1,"109":1,"111":1,"114":1,"438":2,"568":1}}],["appwrite",{"2":{"39":1}}],["apidata",{"2":{"545":2}}],["apikey",{"2":{"51":3,"56":3}}],["api",{"0":{"50":1,"52":1,"56":1,"81":1,"83":1,"118":1,"122":1,"160":1,"315":1,"544":1,"545":1},"1":{"53":1,"54":1,"55":1,"56":1,"82":1,"83":1,"545":1,"546":1},"2":{"23":1,"40":2,"41":9,"50":1,"56":1,"58":2,"59":1,"83":1,"93":2,"111":1,"118":2,"121":1,"122":12,"124":5,"126":3,"128":2,"129":1,"130":1,"132":4,"137":1,"138":2,"160":16,"167":1,"168":2,"197":2,"199":2,"209":1,"213":2,"215":1,"226":8,"227":1,"228":5,"229":2,"231":7,"233":1,"234":1,"289":1,"291":2,"299":1,"312":1,"314":3,"315":2,"316":3,"318":3,"319":2,"320":1,"321":1,"325":3,"327":2,"328":1,"329":1,"337":2,"340":5,"343":1,"345":2,"360":1,"363":2,"364":1,"367":1,"368":9,"369":1,"413":4,"414":2,"415":4,"417":1,"425":2,"430":14,"435":2,"436":2,"441":1,"452":1,"474":4,"476":2,"477":2,"478":3,"482":1,"491":3,"492":1,"505":1,"508":3,"515":2,"535":2,"538":1,"540":1,"542":2,"545":4,"546":7,"570":3}}],["a",{"2":{"39":1,"55":1,"100":5,"121":1,"124":1,"142":2,"156":2,"223":2,"234":10,"291":1,"338":2,"407":2,"411":4,"428":1,"430":1,"448":1,"465":1,"474":2,"478":3,"483":1,"491":1,"492":1,"505":1,"535":1,"540":1,"561":1}}],["asked",{"2":{"502":1}}],["aside",{"2":{"488":1}}],["astro",{"2":{"430":1,"541":1}}],["ashx",{"2":{"430":1}}],["ascx",{"2":{"430":1}}],["asax",{"2":{"430":1}}],["aspx",{"2":{"430":1}}],["asp",{"2":{"182":1}}],["assign",{"2":{"417":1}}],["assigned",{"2":{"142":1}}],["assets",{"2":{"180":2,"405":1,"426":5,"428":2,"432":1,"433":1,"434":1,"435":1,"436":1,"476":4,"477":1,"547":1,"588":1}}],["asynchronous",{"2":{"414":1}}],["async",{"2":{"83":1,"93":1,"122":1,"234":3,"299":1,"339":3,"354":1,"367":1,"450":3,"483":2,"545":1,"546":1,"563":1}}],["as",{"2":{"39":1,"124":1,"428":3,"448":1,"511":1,"524":1,"528":1}}],["38",{"2":{"506":1,"530":1,"531":1,"591":1}}],["3a5ccc",{"2":{"506":1}}],["3c3c438f",{"2":{"506":1}}],["3c3c43c7",{"2":{"506":1}}],["3c3c43",{"2":{"506":1}}],["39",{"2":{"462":1}}],["365",{"2":{"399":1}}],["360deg",{"2":{"259":1}}],["333333",{"2":{"300":1}}],["3x3",{"2":{"266":1}}],["300",{"2":{"341":2,"420":1,"430":1}}],["3000",{"2":{"329":1,"336":1,"341":1,"345":3}}],["30",{"2":{"241":2,"261":1,"285":1,"430":1}}],["30rem",{"2":{"187":1}}],["3451b2",{"2":{"506":1}}],["34",{"2":{"233":3,"234":1}}],["32",{"2":{"227":3,"459":1}}],["3",{"0":{"155":1,"161":1,"216":1,"353":1,"373":1,"374":1,"382":1,"384":1,"393":1,"400":1,"419":1,"475":1,"476":1,"477":1,"478":1,"526":1,"539":1},"1":{"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":2,"163":2,"164":2,"165":2,"166":2,"167":2,"168":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"374":1,"375":1,"376":1,"377":1,"378":1,"379":1,"380":1,"401":1,"402":1,"403":1,"404":1,"405":1,"406":1,"407":1,"408":1,"409":1,"410":1,"411":1,"412":1,"413":1,"476":1,"477":1,"527":1,"528":1,"540":1,"541":1},"2":{"23":1,"96":3,"107":1,"111":1,"112":1,"115":1,"118":1,"125":1,"126":3,"127":4,"128":2,"129":1,"131":2,"132":2,"133":2,"134":1,"135":2,"137":5,"138":1,"141":1,"145":3,"149":2,"152":2,"153":1,"155":3,"156":1,"157":2,"158":3,"159":2,"160":4,"165":1,"167":1,"168":2,"169":1,"175":1,"177":2,"178":2,"179":4,"180":5,"182":1,"183":1,"184":1,"185":1,"187":4,"190":2,"191":1,"195":1,"196":1,"197":1,"198":2,"202":2,"219":1,"220":2,"222":1,"223":2,"225":2,"226":2,"227":2,"228":1,"230":3,"231":1,"234":4,"235":1,"238":2,"243":1,"261":2,"264":2,"265":1,"288":1,"290":1,"298":2,"304":1,"305":2,"307":3,"308":2,"311":3,"312":1,"313":4,"315":2,"316":2,"318":3,"321":3,"323":1,"326":1,"327":2,"329":1,"334":2,"335":2,"336":2,"338":2,"339":1,"345":2,"348":2,"349":1,"350":1,"353":1,"355":1,"356":1,"357":3,"359":1,"362":1,"363":3,"364":1,"365":1,"366":1,"368":8,"369":1,"375":2,"377":2,"379":1,"382":1,"383":1,"388":1,"390":1,"391":1,"397":2,"398":1,"399":2,"400":1,"404":3,"408":1,"415":1,"416":3,"419":1,"422":1,"429":1,"430":2,"431":1,"436":2,"441":1,"443":1,"448":1,"452":3,"453":4,"455":1,"465":1,"466":1,"474":3,"477":1,"478":9,"482":3,"483":2,"490":1,"491":6,"494":1,"502":2,"506":2,"513":3,"515":1,"525":2,"530":2,"531":2,"538":2,"540":1,"542":1,"546":1,"591":2}}],["huskyrc",{"2":{"430":2}}],["human",{"2":{"248":1}}],["hxx",{"2":{"430":3}}],["hpp",{"2":{"430":3}}],["hmacsha256",{"2":{"416":1}}],["hmr",{"2":{"179":1,"429":1}}],["hs256",{"2":{"416":3}}],["href",{"2":{"407":1}}],["href=",{"2":{"182":1,"183":3,"293":1,"513":1,"520":2,"530":1,"531":1}}],["hidden",{"2":{"550":1}}],["hide=",{"2":{"568":1}}],["hidemergecommits",{"2":{"505":1}}],["hidecommitusername",{"2":{"505":1}}],["hidepullusername",{"2":{"505":1}}],["histoire",{"2":{"430":10}}],["history",{"2":{"143":1,"144":1,"404":7,"430":5}}],["highlightmodifiedtabs",{"2":{"430":1}}],["hi",{"2":{"330":1,"360":1}}],["h4>данные",{"2":{"343":1}}],["h4>текст",{"2":{"343":1}}],["h4>child",{"2":{"318":1}}],["h4>",{"2":{"311":2,"318":1,"343":2}}],["h3>selected",{"2":{"338":1}}],["h3>notes",{"2":{"338":1}}],["h3>new",{"2":{"338":1}}],["h3>",{"2":{"308":2,"338":3}}],["hyvinkaa",{"2":{"268":1}}],["hypertext",{"2":{"152":1}}],["hamburger",{"2":{"547":1}}],["have",{"2":{"505":1}}],["handleappinstalled",{"2":{"298":2}}],["handler",{"2":{"227":3,"321":3}}],["hasroute",{"2":{"413":1}}],["hash",{"2":{"149":1,"404":2,"413":1}}],["has",{"2":{"100":1,"112":2}}],["haskell",{"2":{"56":1}}],["h1",{"2":{"159":1,"228":1,"229":1}}],["h1>",{"2":{"159":1,"187":2,"229":2}}],["h1>hello",{"2":{"159":1}}],["hola",{"2":{"481":1}}],["holding",{"2":{"478":2}}],["houdini",{"2":{"430":1}}],["hover",{"2":{"430":1}}],["hot",{"2":{"179":1,"180":1}}],["hooks",{"2":{"160":1,"430":4}}],["homebrew",{"2":{"461":1}}],["home",{"2":{"149":1,"244":1,"402":1,"432":1,"435":1,"476":2,"535":1}}],["homeview",{"2":{"105":1}}],["hosts",{"2":{"478":1}}],["host",{"2":{"125":1,"396":7}}],["how",{"2":{"121":1}}],["hopscotch",{"2":{"50":1}}],["hoppscotch",{"0":{"49":1},"1":{"50":1,"51":1},"2":{"51":1,"82":1,"430":1}}],["h",{"2":{"56":8,"396":1,"430":4}}],["htaccess",{"0":{"147":1},"2":{"148":1}}],["httponly",{"2":{"123":3}}],["http",{"0":{"146":1},"1":{"147":1},"2":{"56":2,"83":4,"93":1,"122":11,"124":1,"125":3,"145":1,"146":1,"152":1,"325":1,"340":2,"341":3,"342":1,"345":2,"414":2,"426":1,"545":5,"546":4}}],["https",{"2":{"51":3,"55":1,"56":3,"80":2,"120":1,"121":1,"125":6,"132":3,"136":1,"152":3,"153":1,"157":1,"167":1,"168":2,"178":2,"182":2,"183":1,"184":5,"200":1,"223":1,"238":1,"246":1,"267":1,"290":1,"291":2,"293":1,"305":1,"309":1,"318":1,"319":1,"326":1,"348":1,"362":1,"363":1,"364":1,"368":1,"369":1,"379":1,"380":1,"398":1,"413":1,"415":1,"416":3,"417":2,"420":2,"425":1,"430":2,"443":1,"492":1,"503":1,"513":3,"520":3,"530":3,"531":3,"537":1,"545":1,"546":1,"561":1,"563":1}}],["htmlnanorc",{"2":{"430":20}}],["html=",{"2":{"427":1}}],["html>",{"2":{"157":2}}],["html5",{"2":{"153":1,"155":1,"404":1,"481":1,"488":1,"496":1,"538":1}}],["html$",{"2":{"147":1}}],["html",{"0":{"251":1,"496":1,"549":1},"1":{"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"263":1,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1},"2":{"22":1,"121":1,"125":1,"127":1,"132":2,"133":1,"143":2,"144":2,"145":1,"147":2,"149":3,"155":5,"156":1,"157":3,"158":2,"159":6,"160":1,"161":2,"162":4,"166":2,"167":4,"168":4,"180":3,"181":3,"182":2,"183":3,"186":3,"187":5,"197":1,"227":1,"240":1,"250":1,"251":1,"252":2,"253":2,"258":1,"261":1,"269":1,"293":2,"297":1,"300":1,"356":2,"359":1,"362":5,"364":1,"371":1,"377":1,"392":1,"396":2,"413":1,"416":1,"425":1,"426":2,"430":6,"445":2,"450":1,"452":3,"455":3,"465":5,"481":1,"482":3,"491":1,"492":10,"513":1,"515":1,"520":2,"521":1,"530":2,"531":1,"532":1,"543":1,"549":2,"563":2,"589":2,"590":1}}],["heidisql",{"2":{"430":1}}],["height",{"2":{"18":1,"186":1,"259":1,"427":7}}],["heex",{"2":{"430":1}}],["hexcolorlength",{"2":{"430":1}}],["helpers",{"2":{"435":1,"476":1}}],["helps",{"2":{"428":1}}],["helloworld",{"2":{"180":1}}],["hello=",{"2":{"160":1}}],["hello",{"2":{"157":1,"160":10,"177":1,"188":1,"575":1}}],["heavycomponent",{"2":{"357":2}}],["heads",{"2":{"364":4}}],["head",{"2":{"157":1,"181":1,"293":1}}],["head>",{"2":{"157":2,"520":2}}],["headers",{"0":{"564":1},"1":{"565":1,"566":1,"567":1,"568":1},"2":{"419":1,"546":1}}],["header=",{"2":{"362":1}}],["header>",{"2":{"362":3,"368":2,"547":1,"568":2}}],["headerh1",{"2":{"230":2}}],["header",{"0":{"29":1,"107":1},"2":{"28":1,"51":6,"121":1,"362":3,"368":1,"410":2,"416":4,"488":1,"535":2,"542":2,"547":2,"565":1,"566":1,"567":1,"568":1,"570":1,"573":1}}],["headless",{"2":{"6":1,"12":2,"62":1,"67":1,"70":1,"479":1,"490":1,"542":1}}],["heroku",{"2":{"425":1,"573":1}}],["hero",{"0":{"273":1},"2":{"273":2}}],["here",{"2":{"159":1,"187":1}}],["wc",{"2":{"532":1}}],["when",{"2":{"505":1}}],["white",{"2":{"187":1}}],["w3css",{"2":{"182":3}}],["w3schools",{"2":{"182":3}}],["w3",{"0":{"182":1},"1":{"186":1,"187":1,"188":1},"2":{"182":4,"186":2,"187":28,"293":1,"362":4,"399":1,"407":2}}],["write",{"2":{"159":1,"396":1,"478":1}}],["wrap",{"2":{"117":1}}],["wrapper=mount",{"2":{"453":1}}],["wrapper",{"2":{"114":1,"362":1,"368":2,"452":2,"453":2}}],["words",{"2":{"478":1}}],["wordseparators",{"2":{"430":1}}],["world",{"2":{"142":1,"155":1,"157":1,"159":1,"160":4,"177":1,"188":1,"399":1}}],["workspace",{"2":{"430":3}}],["workingissueformatscm",{"2":{"430":1}}],["workbench",{"2":{"430":11}}],["workbox",{"2":{"299":1,"300":4,"492":2,"588":1}}],["work",{"2":{"396":1,"430":2}}],["workflows",{"2":{"396":3}}],["workflow",{"2":{"121":2,"396":2,"535":1,"570":1}}],["workerу",{"2":{"334":1}}],["workers",{"0":{"299":1,"325":1,"327":1,"389":1},"1":{"326":1,"327":1,"328":2,"329":2,"330":2,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"338":1,"339":1,"340":1,"341":1,"342":1,"343":1,"344":1,"345":1,"346":1,"347":1},"2":{"199":1,"202":1,"209":1,"225":1,"231":2,"289":3,"298":1,"299":1,"319":2,"323":1,"325":2,"326":1,"327":10,"329":2,"330":3,"331":1,"332":1,"333":1,"334":1,"346":4,"347":4,"376":1,"389":1,"414":1,"483":2}}],["worker",{"0":{"328":1,"329":1,"337":1,"588":1},"1":{"329":1,"330":1,"334":1,"335":1,"336":1,"338":2,"339":2,"340":2,"341":2,"342":2,"343":2,"345":1},"2":{"121":2,"291":1,"299":4,"300":1,"303":1,"325":1,"327":2,"328":21,"329":4,"330":5,"331":2,"333":2,"334":11,"335":1,"336":4,"337":1,"338":5,"339":2,"340":3,"341":1,"342":1,"483":1,"492":3,"501":1,"535":1,"540":1,"549":1,"570":1,"586":1,"588":2}}],["www",{"2":{"125":1,"132":1,"142":1,"149":2,"182":2,"184":1,"223":1,"257":1,"267":1,"268":1,"293":1,"380":1,"396":6,"399":1,"563":1}}],["we",{"2":{"159":1}}],["webdriverio",{"2":{"479":1}}],["webhooks",{"2":{"466":1}}],["webp",{"2":{"428":1}}],["webpack",{"2":{"126":1,"133":1,"134":1,"429":4,"430":13}}],["web3js",{"2":{"422":1}}],["web3",{"0":{"422":1},"2":{"421":1,"422":2,"423":1}}],["webworker",{"0":{"334":1,"335":1,"336":1,"339":1,"340":1,"341":1,"342":1},"2":{"334":4,"336":3,"338":5,"343":4}}],["webmanifest",{"2":{"293":2}}],["webfonts",{"2":{"183":2}}],["website",{"2":{"396":1,"425":5,"589":1}}],["webstorm",{"2":{"178":1,"430":2}}],["websocket",{"2":{"138":1}}],["websockets",{"2":{"122":1,"138":3,"491":1,"545":1}}],["web",{"0":{"325":1,"327":1,"328":1,"337":1,"389":1,"480":1,"513":1,"529":1},"1":{"326":1,"327":1,"328":2,"329":3,"330":3,"331":1,"332":1,"333":1,"334":2,"335":2,"336":2,"337":1,"338":3,"339":3,"340":3,"341":3,"342":3,"343":3,"344":1,"345":2,"346":1,"347":1,"481":1,"530":1,"531":1,"532":1},"2":{"138":1,"142":1,"143":1,"149":1,"155":1,"183":1,"199":1,"202":1,"209":1,"225":1,"231":2,"233":1,"289":2,"291":1,"301":1,"319":2,"322":1,"323":1,"325":3,"326":1,"327":12,"328":8,"329":6,"330":5,"331":3,"332":1,"333":3,"334":8,"335":1,"336":4,"337":1,"338":5,"339":2,"340":3,"341":2,"342":1,"346":4,"347":4,"375":1,"376":1,"377":1,"389":1,"399":5,"404":4,"414":1,"416":1,"417":1,"454":1,"481":3,"483":2,"492":4,"513":1,"515":2,"531":2,"546":1,"587":1}}],["webapp",{"0":{"121":1,"535":1,"539":1},"1":{"536":1,"540":1,"541":1},"2":{"121":5,"533":2,"535":7,"537":2,"540":1,"561":2,"562":1,"587":1}}],["webapi",{"2":{"118":1}}],["weight",{"2":{"18":1}}],["will",{"2":{"474":1}}],["wild",{"2":{"152":1}}],["windi",{"2":{"430":10}}],["window",{"2":{"181":1,"198":2,"298":2,"319":3,"321":2,"327":1,"328":3,"363":1,"396":1,"422":1,"430":4,"474":3,"531":2,"563":2}}],["windows",{"0":{"459":1},"2":{"145":1,"148":1,"151":1,"178":3,"254":1,"291":1,"294":1,"301":1,"377":5,"422":1,"450":1,"459":2}}],["wiki",{"2":{"200":1,"246":1,"319":1}}],["wikipedia",{"2":{"96":1,"200":1,"246":1,"319":1}}],["widgets",{"2":{"435":2,"476":2}}],["width",{"2":{"186":1,"187":2,"259":1,"271":1,"427":7,"582":1,"591":1}}],["wide",{"2":{"142":1,"155":1,"399":1}}],["without",{"2":{"474":1}}],["with",{"2":{"55":1,"345":1,"396":8,"411":2,"428":1,"430":1}}],["way",{"2":{"500":1}}],["wait",{"2":{"420":5}}],["watchman",{"2":{"430":2}}],["watcher",{"2":{"261":6}}],["watch",{"2":{"96":1,"407":4,"482":1}}],["walmart",{"2":{"22":1}}],["msg",{"2":{"577":1}}],["mjs",{"2":{"430":4}}],["mpr551xpscgmizp8ezuscoy7t7iqnpp",{"2":{"416":1}}],["mpa",{"2":{"291":1,"399":5,"400":2,"424":1}}],["m",{"2":{"396":2,"463":1,"465":1}}],["mdsvex",{"2":{"430":1}}],["md",{"2":{"396":1,"430":3}}],["mdn",{"2":{"321":1}}],["mkdir",{"2":{"396":2}}],["mvp",{"2":{"479":1}}],["mvc",{"2":{"478":1,"482":1}}],["mv",{"2":{"396":1}}],["mit",{"2":{"533":1}}],["mitt",{"2":{"138":1,"223":2,"231":1,"309":4,"310":3}}],["microfrontends",{"2":{"436":1,"476":1}}],["microservice",{"2":{"436":1,"476":1}}],["microsoft",{"2":{"124":1,"178":3,"244":1,"291":1,"377":1,"419":1,"425":1,"430":1}}],["micro",{"2":{"436":1,"476":1}}],["mix",{"2":{"430":3}}],["mixin",{"2":{"363":1}}],["might",{"2":{"430":1}}],["migration",{"2":{"132":2,"136":1}}],["mime",{"2":{"293":1,"296":1}}],["middle",{"2":{"259":1}}],["middleware",{"2":{"228":1}}],["missing",{"2":{"218":1}}],["minheight",{"2":{"427":1}}],["minwidth",{"2":{"427":1}}],["minimal",{"2":{"294":1}}],["min",{"2":{"183":3,"186":1,"187":1}}],["mil",{"2":{"142":1}}],["mymodal",{"2":{"368":2}}],["mymenubar>",{"2":{"362":2}}],["mymenubar",{"2":{"362":3}}],["mymethod",{"2":{"160":1}}],["mylayout>",{"2":{"362":2}}],["mylayout",{"2":{"362":2}}],["myworker",{"2":{"330":5}}],["myprocessfunction",{"2":{"234":3}}],["myfuncc",{"2":{"234":3}}],["myfuncb",{"2":{"234":3}}],["myfunca",{"2":{"234":5}}],["myfunction",{"2":{"198":3,"212":3,"223":2}}],["myfile2",{"2":{"220":1}}],["myfile1",{"2":{"220":1}}],["mydata",{"2":{"319":2}}],["mydependency2",{"2":{"220":2}}],["mydependency1",{"2":{"220":2}}],["mydomain",{"2":{"142":1,"143":2,"144":2,"149":3}}],["mycache",{"2":{"299":1}}],["myclass",{"2":{"212":5}}],["mycomponent>",{"2":{"359":1}}],["mycomponent",{"2":{"128":12,"184":2,"356":7,"357":4,"359":3}}],["my",{"0":{"329":1},"2":{"162":3,"211":2,"212":4,"328":9,"330":1,"411":2,"415":1,"535":3,"536":1,"540":1,"561":2,"562":1}}],["mysql",{"2":{"40":1,"48":1,"430":1,"491":1}}],["moment",{"2":{"470":1,"474":1}}],["moleculepokemonthumbnail",{"2":{"433":1,"476":1}}],["moleculesearchinput",{"2":{"433":1,"476":1}}],["molecules",{"2":{"433":1,"476":1}}],["mocha",{"2":{"430":10}}],["monospace",{"2":{"430":1}}],["mono",{"2":{"430":1}}],["motels",{"0":{"278":1}}],["modern",{"2":{"430":1}}],["mode",{"2":{"404":1,"430":1}}],["models",{"2":{"434":3,"476":3}}],["modeling",{"2":{"352":1}}],["model=",{"2":{"166":1,"187":3,"338":2,"343":3,"359":2}}],["modelperson",{"2":{"131":4}}],["modelvalue",{"2":{"131":4,"359":9}}],["model",{"0":{"131":1,"166":1,"358":1},"2":{"126":1,"131":3,"163":1,"174":1,"187":2,"198":1,"359":6,"364":1,"478":1,"482":1}}],["modal>",{"2":{"368":1}}],["modal",{"2":{"368":14}}],["modals",{"2":{"366":1,"368":6,"369":3,"405":3}}],["module",{"2":{"179":1,"430":1,"520":2}}],["modules",{"2":{"179":1,"180":2,"401":1,"428":6,"429":1,"430":2,"434":1,"463":1,"476":1}}],["mod",{"2":{"147":2,"430":1}}],["mozilla",{"2":{"132":1,"178":1,"299":1,"319":1,"330":1,"377":1,"417":1}}],["mountrt",{"2":{"520":2}}],["mount",{"2":{"127":1,"128":2,"157":2,"317":1,"356":1,"368":1,"405":1,"452":4,"453":1}}],["mobile",{"2":{"23":1,"271":2,"301":1,"543":4,"580":2,"582":1}}],["must",{"2":{"449":1}}],["music",{"2":{"64":1,"90":1,"115":1}}],["multicursormodifier",{"2":{"430":1}}],["multipurpose",{"2":{"293":1}}],["multiviews",{"2":{"147":1}}],["muzhskaya",{"2":{"106":1}}],["map",{"2":{"428":2,"430":7}}],["mastery",{"2":{"491":1}}],["master",{"2":{"396":3,"430":1,"463":3,"465":4,"466":5}}],["math",{"2":{"364":1}}],["match",{"2":{"299":1}}],["material",{"2":{"18":1,"181":3,"182":1,"266":1}}],["max",{"2":{"187":1,"261":3,"271":1,"582":1,"591":1}}],["macports",{"2":{"461":1}}],["mac",{"2":{"301":1}}],["macromedia",{"2":{"155":1}}],["macos",{"0":{"461":1},"2":{"151":1,"178":3,"291":1,"377":4,"430":1,"461":1}}],["mailmap",{"2":{"430":1}}],["mail",{"2":{"142":1,"293":1}}],["maintenanceview",{"2":{"438":1}}],["maintenance",{"2":{"438":2}}],["maintainers",{"2":{"430":1}}],["maintainability",{"2":{"192":1}}],["mainheader",{"2":{"369":1}}],["main>",{"2":{"362":2,"368":2,"407":2}}],["mainlayout",{"0":{"580":1},"1":{"581":1},"2":{"36":1,"121":1,"438":2,"535":2,"582":1}}],["main",{"0":{"31":1,"317":1,"330":1,"405":1},"2":{"127":1,"129":1,"158":1,"180":3,"181":2,"238":1,"290":1,"299":1,"305":1,"316":1,"326":1,"329":1,"356":3,"368":2,"369":1,"396":6,"398":1,"404":1,"410":1,"432":1,"433":1,"434":1,"435":1,"443":1,"476":4,"505":1,"577":1}}],["martin",{"2":{"436":1,"476":1}}],["markdownlint",{"2":{"430":2}}],["markdown",{"0":{"499":1},"2":{"430":1,"499":1,"524":1}}],["marketplace",{"2":{"22":1}}],["margin",{"2":{"187":3,"550":1}}],["mary",{"2":{"130":1}}],["mantinelayeredheader",{"0":{"567":1}}],["mantine",{"2":{"566":1,"567":1}}],["mantinerichfooter",{"0":{"558":1},"2":{"535":2}}],["mantinesimplefooter",{"0":{"557":1},"2":{"121":1}}],["mantinesimplenavbar",{"0":{"585":1},"2":{"121":1,"535":2}}],["mantinesimpleheader",{"0":{"566":1},"2":{"109":1,"121":1,"535":2}}],["management",{"0":{"478":1},"2":{"457":1,"478":2}}],["manager",{"0":{"134":1},"2":{"111":1,"126":1,"178":1,"320":1}}],["manually",{"2":{"430":1}}],["man",{"2":{"244":1}}],["manifest+json",{"2":{"293":1}}],["manifest",{"0":{"587":1},"2":{"121":2,"180":1,"293":5,"296":1,"300":1,"535":1,"540":1,"586":1,"587":1}}],["many",{"2":{"43":2}}],["make",{"2":{"100":1,"121":1,"535":1,"540":1}}],["magento",{"2":{"41":1,"47":1,"118":1}}],["me",{"2":{"503":1}}],["merge",{"2":{"458":1,"464":1,"465":2}}],["mercurial",{"2":{"457":1}}],["merchants",{"2":{"12":1}}],["memory",{"2":{"404":2}}],["meatball",{"2":{"266":1}}],["menus",{"2":{"430":1}}],["menu",{"2":{"263":1}}],["message=ref",{"2":{"311":1}}],["messagebus",{"0":{"310":1},"2":{"310":2,"311":6}}],["message",{"2":{"157":4,"308":1,"311":8,"328":2,"334":3,"575":1}}],["metadata",{"2":{"430":1}}],["metamask",{"2":{"422":5}}],["meta",{"2":{"121":1,"122":1,"427":1,"428":2,"438":1,"454":3,"535":1,"540":1,"546":1,"547":1,"589":13}}],["method2",{"2":{"212":2}}],["method1",{"2":{"212":2}}],["methods",{"2":{"160":1}}],["method",{"2":{"100":1,"343":9,"422":1,"546":1}}],["medium",{"2":{"291":1}}],["media",{"2":{"23":1,"271":1,"285":1}}],["medusajs",{"2":{"62":1}}],["medusa",{"2":{"12":1}}],["gql",{"2":{"430":2}}],["gzip",{"2":{"511":1,"528":1}}],["gz",{"2":{"430":1}}],["gls",{"2":{"430":1}}],["glo",{"2":{"430":1}}],["global",{"2":{"478":1,"513":1,"530":1,"531":1}}],["glob",{"2":{"427":1,"428":2,"547":1}}],["globpatterns",{"2":{"300":1}}],["glg",{"2":{"430":1}}],["g",{"2":{"430":1,"563":1}}],["gutter",{"2":{"591":1}}],["gui",{"2":{"482":1}}],["guides",{"2":{"430":1}}],["guide",{"2":{"74":1,"362":1,"491":2}}],["gulp",{"2":{"430":2}}],["guards",{"2":{"404":3,"415":1}}],["gb",{"2":{"377":2}}],["go",{"0":{"413":1},"2":{"413":4,"430":6}}],["governance",{"2":{"430":1}}],["gov",{"2":{"142":1}}],["googletagmanager",{"2":{"563":1}}],["googleanalytics",{"2":{"535":1}}],["google",{"0":{"301":1,"563":1,"589":1},"2":{"17":1,"121":1,"123":8,"124":2,"178":1,"181":1,"182":1,"266":1,"272":4,"289":1,"297":2,"299":1,"399":1,"419":1,"421":1,"425":1,"474":1,"491":1,"492":4,"535":1,"540":1,"549":1,"563":2,"570":1}}],["gap",{"2":{"505":1}}],["gatsby",{"2":{"430":5}}],["gateway",{"2":{"124":1}}],["garaguso",{"2":{"373":1,"416":1}}],["garfield",{"2":{"18":2}}],["gmail",{"2":{"123":1,"414":1}}],["ghz",{"2":{"377":1}}],["gh",{"2":{"121":1,"396":2,"561":3}}],["grpc",{"2":{"545":1}}],["grunt",{"2":{"430":2}}],["great",{"2":{"430":1}}],["grey",{"2":{"362":1}}],["gray",{"2":{"186":1,"187":2,"543":1}}],["graphql",{"2":{"138":1,"545":1}}],["graph",{"2":{"121":1,"535":1,"540":1,"549":1,"570":1,"589":1}}],["grid",{"2":{"117":1,"488":1,"497":2}}],["gitpod",{"2":{"430":2}}],["gitmessage",{"2":{"430":1}}],["gitmodules",{"2":{"430":1}}],["gitattributes",{"2":{"430":1}}],["gitlens",{"2":{"430":4}}],["gitlab",{"2":{"151":1,"394":1,"430":2,"442":1,"463":1,"466":2,"467":1,"469":1}}],["gitignore",{"0":{"463":1},"2":{"180":1,"396":1,"430":1,"462":1}}],["git",{"0":{"458":1,"462":1},"1":{"463":1},"2":{"120":2,"151":2,"178":3,"180":2,"390":1,"394":1,"396":3,"430":10,"436":1,"442":1,"456":1,"457":3,"458":4,"459":3,"460":6,"461":4,"462":9,"463":7,"464":7,"465":9,"466":12,"467":1,"468":1,"469":2,"537":2}}],["githubactionsgithubpagesworkflow",{"2":{"535":1}}],["githubpullrequests",{"2":{"430":1}}],["githubissues",{"2":{"430":1}}],["github",{"0":{"120":1,"396":1,"560":2},"1":{"561":2,"562":2},"2":{"80":2,"104":1,"120":2,"121":6,"132":1,"151":1,"178":1,"184":2,"238":1,"290":1,"298":1,"305":1,"309":1,"322":1,"326":2,"333":1,"348":2,"349":1,"368":2,"369":2,"379":2,"394":2,"396":23,"398":2,"407":1,"413":1,"419":1,"425":3,"430":7,"442":1,"443":1,"463":1,"466":6,"467":1,"469":1,"491":2,"500":1,"505":7,"508":6,"511":2,"515":3,"516":1,"520":1,"524":2,"528":2,"530":1,"531":1,"535":2,"537":1,"540":1,"542":1,"561":5,"570":3,"573":1}}],["geneva",{"2":{"506":1}}],["generation",{"2":{"492":1}}],["generate",{"2":{"100":1}}],["generalroutes",{"2":{"438":2}}],["gemfile",{"2":{"430":2}}],["getbestblockhash",{"2":{"546":1}}],["getsvgicon",{"2":{"427":3,"428":2}}],["gets",{"2":{"426":2}}],["getroutes",{"2":{"413":1}}],["getnotes",{"2":{"338":1,"339":2}}],["getelementbyid",{"2":{"261":1}}],["gettimestamp",{"2":{"228":2}}],["getters",{"2":{"314":1,"315":4}}],["getter",{"2":{"227":1}}],["gettoken",{"2":{"122":1}}],["getall",{"2":{"214":1,"215":1,"216":1}}],["getallprojects",{"2":{"214":1,"215":1,"216":1,"217":1}}],["getimageurl",{"2":{"427":2,"428":2}}],["getinstance",{"2":{"210":1}}],["getitem",{"2":{"113":1,"319":2,"321":1,"396":1}}],["getuserdata",{"2":{"122":2}}],["get",{"2":{"51":3,"83":4,"93":1,"122":1,"125":1,"227":2,"321":2,"340":3,"341":2,"342":1,"343":3,"345":3,"414":2,"428":2,"505":3,"545":1}}],["gtag",{"2":{"563":5}}],["gt",{"0":{"89":1},"2":{"61":2,"96":1,"100":2,"129":1,"180":1,"186":1,"264":1,"268":2,"316":1,"364":1,"396":1,"407":3,"430":1,"465":4,"492":2}}],["1px",{"2":{"543":1}}],["1кб",{"2":{"511":1,"528":1}}],["1b1b1f",{"2":{"506":2,"530":2,"531":2}}],["192x192",{"2":{"300":2}}],["19",{"2":{"266":1}}],["1986",{"2":{"248":1}}],["18",{"0":{"410":1},"2":{"265":1}}],["17",{"2":{"260":1,"261":1}}],["15кб",{"2":{"515":1}}],["1516239022",{"2":{"416":1}}],["15",{"2":{"260":1,"484":1}}],["1s",{"2":{"259":1}}],["1rem",{"2":{"259":2}}],["1443",{"2":{"546":1}}],["14",{"2":{"258":1}}],["13",{"0":{"410":1},"2":{"258":1}}],["1280px",{"2":{"591":1}}],["1234567890",{"2":{"416":1}}],["12",{"2":{"257":1,"491":1}}],["127",{"2":{"142":2}}],["1199",{"2":{"543":1}}],["11",{"0":{"392":1},"2":{"241":1,"242":1,"243":1,"244":1,"246":1,"252":2,"253":1,"254":2,"256":1,"257":3,"258":2,"260":3,"261":1,"265":1,"266":1,"267":1,"268":2,"271":1,"272":4,"273":1,"276":1,"277":1,"284":1,"285":1,"465":3}}],["161618",{"2":{"506":1,"530":1,"531":1}}],["16гб",{"2":{"430":1}}],["16",{"2":{"178":2,"260":1,"319":2,"327":1}}],["10000",{"2":{"543":1}}],["1000",{"2":{"311":1,"420":1,"478":1}}],["100",{"2":{"187":1,"259":1,"311":1,"427":2,"445":1,"455":1,"492":1,"505":1,"550":1}}],["100vh",{"2":{"186":1}}],["100vw",{"2":{"186":1,"550":1}}],["10",{"0":{"391":1,"463":1},"2":{"96":1,"142":2,"145":1,"152":1,"184":1,"241":2,"256":1,"292":1,"334":2,"345":2,"377":1,"404":1,"430":1,"448":3,"450":1,"452":2,"453":6,"463":1,"474":1,"483":1,"490":1,"491":2}}],["1",{"0":{"18":1,"19":1,"211":1,"214":1,"223":1,"225":1,"227":1,"229":1,"233":1,"351":1,"382":1,"417":1},"2":{"18":2,"19":1,"104":1,"125":6,"130":1,"138":1,"142":6,"147":2,"149":2,"158":2,"165":1,"179":1,"180":1,"187":4,"194":1,"212":1,"219":1,"222":1,"223":3,"225":1,"226":1,"227":3,"229":2,"230":3,"232":3,"233":10,"234":9,"241":1,"261":2,"264":2,"293":2,"296":1,"297":1,"306":2,"307":3,"308":2,"311":2,"313":4,"315":2,"316":2,"318":2,"321":2,"327":4,"334":2,"335":2,"338":2,"339":3,"343":2,"345":2,"351":1,"353":1,"355":1,"357":1,"362":2,"363":2,"368":6,"369":1,"377":1,"399":2,"402":2,"404":2,"413":2,"415":1,"416":2,"428":2,"429":1,"446":1,"448":3,"452":2,"453":2,"466":1,"474":2,"478":1,"483":1,"491":2,"492":1,"505":1,"506":4,"525":4,"530":2,"531":2,"545":1,"546":1,"550":1,"591":2}}],["хватает",{"2":{"294":1,"457":1,"470":1}}],["хвастовство",{"2":{"179":1}}],["хювинкяя",{"2":{"268":1}}],["хювинкяа",{"2":{"268":1}}],["хлебным",{"2":{"264":1}}],["хлебные",{"0":{"264":1},"2":{"264":2}}],["хика",{"0":{"247":1},"2":{"248":1}}],["х",{"2":{"200":1}}],["хак",{"2":{"550":1}}],["хау",{"2":{"457":1}}],["ханту",{"2":{"199":1}}],["характеристик",{"2":{"280":1}}],["характеристики",{"2":{"280":1,"397":1}}],["характер",{"2":{"140":1,"238":1,"284":1,"287":1,"468":1}}],["хеша",{"2":{"144":1}}],["хеш",{"2":{"144":1}}],["хеши",{"2":{"144":1}}],["хеширования",{"2":{"144":2}}],["хедеры",{"2":{"564":1}}],["хедере",{"2":{"88":1,"104":1,"112":1}}],["хедером",{"2":{"35":1,"436":1,"477":1,"580":1}}],["хедера",{"2":{"29":2}}],["хедер",{"2":{"29":2,"107":1,"582":1}}],["хэш",{"2":{"144":1,"404":1,"426":1}}],["хэша",{"2":{"134":1,"144":1,"413":1}}],["художественных",{"2":{"264":1}}],["хука",{"2":{"122":1}}],["хуке",{"2":{"122":1}}],["хуже",{"2":{"122":1,"248":1}}],["хранят",{"2":{"422":1}}],["хранятся",{"2":{"17":1,"319":3,"415":1,"491":1}}],["хранящуюся",{"2":{"415":1}}],["хранящиеся",{"2":{"319":1}}],["хранящей",{"2":{"312":1}}],["хранению",{"2":{"319":2}}],["хранения",{"2":{"218":1,"219":1,"304":1,"319":4,"334":1,"337":1,"338":1,"343":1,"399":1,"463":1}}],["хранением",{"2":{"323":1}}],["хранение",{"2":{"48":1,"462":1}}],["храним",{"2":{"321":1}}],["хранилищу",{"2":{"322":1,"337":1}}],["хранилищ",{"2":{"319":3}}],["хранилищами",{"2":{"323":1}}],["хранилищах",{"2":{"319":1}}],["хранилища",{"0":{"319":1},"2":{"145":1,"149":1,"298":1,"304":2,"318":3,"319":6,"322":1,"422":1}}],["хранилищем",{"2":{"313":1,"321":1}}],["хранилище",{"2":{"143":1,"148":1,"289":1,"319":1,"320":1,"322":2,"462":1}}],["храните",{"2":{"437":1}}],["хранится",{"2":{"324":1,"368":1}}],["хранить",{"2":{"123":1,"187":1,"291":1,"352":1,"396":1,"478":1}}],["храниться",{"2":{"47":1,"95":1,"306":1,"334":1}}],["хранит",{"2":{"43":1,"311":1,"319":1,"474":1}}],["хочу",{"2":{"483":2,"491":1}}],["хочется",{"2":{"201":1}}],["хочет",{"2":{"73":1,"124":2,"258":1,"276":1}}],["ходе",{"2":{"258":2,"457":1}}],["ходу",{"2":{"17":1}}],["холсте",{"2":{"221":1}}],["хостите",{"2":{"425":1}}],["хостингом",{"2":{"152":1}}],["хостинговым",{"2":{"145":1}}],["хостинг",{"0":{"425":1},"2":{"145":1,"146":2,"152":2,"277":1,"425":1}}],["хостинги",{"2":{"142":1,"542":1}}],["хостинга",{"2":{"139":2,"141":1,"145":3,"151":1,"153":1}}],["хостинге",{"2":{"121":1,"145":1,"154":1}}],["хост",{"2":{"396":2}}],["хостеры",{"2":{"425":1}}],["хосте",{"2":{"142":1,"396":1}}],["хотел",{"2":{"284":1}}],["хотим",{"2":{"188":1,"228":1,"298":1,"311":1,"317":1,"320":1,"331":1,"333":1,"336":1,"345":1,"354":2,"362":1,"401":1,"408":3,"416":1,"417":1,"418":1,"448":1,"455":1,"462":1}}],["хотите",{"2":{"151":2,"156":1,"159":2,"179":2,"276":1,"330":1,"437":1,"448":1,"462":1,"474":1}}],["хоть",{"2":{"114":1,"482":2}}],["хотя",{"2":{"96":1,"126":1,"139":1,"142":1,"152":1,"153":1,"178":2,"179":1,"184":1,"187":1,"195":1,"212":1,"232":1,"243":1,"258":1,"271":1,"284":1,"287":1,"293":1,"298":2,"327":2,"348":1,"364":1,"399":1,"413":1,"414":1,"415":1,"438":1,"448":1,"468":1,"491":1}}],["хорош",{"2":{"484":1}}],["хороша",{"2":{"291":1}}],["хорошая",{"2":{"74":1,"159":1,"184":1,"479":1,"483":2}}],["хорошему",{"2":{"240":1,"249":1}}],["хорошее",{"2":{"227":1,"249":1,"318":1}}],["хорошего",{"2":{"198":1,"327":1,"445":1}}],["хорошей",{"2":{"169":1,"190":1,"306":1,"348":1,"360":1,"383":1,"407":1,"409":1,"454":1,"478":1,"483":1,"515":1}}],["хорошими",{"2":{"399":1}}],["хорошим",{"2":{"257":1,"272":2,"420":1,"491":2}}],["хороших",{"2":{"183":1,"370":1}}],["хорошие",{"2":{"150":1,"249":1,"471":1,"482":1,"490":2,"491":1}}],["хороший",{"2":{"25":1,"156":1,"195":1,"198":1,"287":1,"311":1,"315":1,"368":1,"430":1,"464":1}}],["хорошую",{"2":{"26":1,"178":1,"183":1}}],["хорошо",{"2":{"3":1,"39":2,"44":1,"63":1,"65":1,"96":1,"145":1,"155":1,"160":1,"231":2,"243":1,"249":1,"250":1,"260":1,"267":1,"268":1,"271":1,"311":1,"331":1,"334":1,"337":2,"346":1,"369":1,"416":1,"419":1,"422":1,"430":1,"472":1,"490":1}}],["njsproj",{"2":{"463":1}}],["ntvs",{"2":{"463":1}}],["nls",{"2":{"430":2}}],["nx",{"2":{"430":2}}],["nvmrc",{"2":{"430":2}}],["nix",{"2":{"430":3}}],["npx",{"2":{"429":2}}],["npmjs",{"2":{"223":1}}],["npm",{"2":{"144":1,"178":1,"179":4,"180":6,"181":1,"182":1,"187":1,"300":1,"309":1,"314":1,"337":2,"340":1,"344":2,"401":1,"414":1,"429":1,"430":4,"436":1,"446":2,"447":3,"448":3,"451":2,"455":1,"456":3,"463":1,"474":1,"484":1,"542":1,"575":1}}],["nw",{"2":{"319":1,"404":1}}],["n>=2",{"2":{"232":1}}],["n",{"2":{"222":1,"232":3,"233":9,"234":5,"338":5,"396":1,"430":1}}],["nginx",{"0":{"148":1,"149":1},"1":{"149":1},"2":{"124":1,"145":1,"148":2,"149":1,"152":1,"377":1,"425":1}}],["nativetabs",{"2":{"430":1}}],["naruto",{"2":{"132":1}}],["navigate",{"2":{"411":4}}],["navigator",{"2":{"299":2}}],["navigationdrawer",{"2":{"535":1,"583":1}}],["navigation",{"0":{"551":1},"1":{"552":1,"553":1},"2":{"121":1,"263":1,"404":2,"535":1,"542":1}}],["navbar",{"0":{"583":1},"1":{"584":1,"585":1},"2":{"121":1,"535":2,"570":1,"583":1}}],["named",{"2":{"428":1}}],["names",{"2":{"142":1}}],["name=",{"2":{"114":1,"343":2,"362":3,"368":1,"410":2,"426":1,"547":1,"589":4}}],["name",{"2":{"106":3,"121":1,"130":6,"149":1,"160":3,"166":2,"219":4,"223":13,"294":2,"296":2,"299":2,"300":2,"319":5,"358":5,"359":1,"360":5,"362":1,"368":10,"396":12,"404":3,"407":4,"408":3,"410":4,"411":4,"413":2,"416":1,"426":2,"427":4,"428":8,"438":2,"464":5,"505":1,"535":1,"540":1,"587":2}}],["neighboring",{"2":{"505":1}}],["nest",{"2":{"430":2}}],["nesting",{"2":{"89":5,"430":2}}],["never",{"2":{"430":1}}],["nexttick",{"2":{"483":1}}],["next",{"0":{"201":1},"1":{"204":1,"205":1,"206":1,"207":1},"2":{"191":1,"430":2}}],["negotiation",{"2":{"147":1}}],["netlify",{"2":{"425":1,"430":2}}],["netflix",{"2":{"399":1}}],["netservice",{"2":{"342":2}}],["netbeans",{"2":{"178":1}}],["net",{"2":{"142":1,"416":1}}],["networks",{"2":{"546":1}}],["networkcommunication",{"0":{"343":1}}],["network",{"0":{"341":1},"2":{"124":1,"299":1,"319":1,"330":1,"342":1}}],["newitem",{"2":{"482":3}}],["new",{"2":{"112":1,"113":1,"127":1,"128":1,"187":1,"212":1,"218":1,"221":2,"227":1,"234":6,"261":1,"321":1,"328":2,"330":1,"334":2,"336":1,"339":4,"341":2,"357":1,"368":1,"396":2,"417":1,"428":2,"440":1,"543":1,"563":1}}],["num=",{"2":{"114":1}}],["numbers",{"2":{"100":1,"142":1}}],["number>",{"2":{"100":2}}],["number",{"2":{"83":1,"92":2,"93":1,"100":1,"112":3,"113":1,"358":1,"452":2,"505":1}}],["null",{"2":{"83":1,"93":1,"218":1,"219":2,"261":3,"298":2,"319":1,"368":2,"430":1}}],["nuxt",{"2":{"10":1,"156":1,"430":2,"541":1}}],["nodе",{"2":{"430":1}}],["nodemon",{"2":{"430":4}}],["nodes",{"2":{"422":1}}],["nodejs",{"0":{"344":1},"1":{"345":1},"2":{"178":1}}],["node",{"2":{"124":2,"178":6,"179":2,"180":2,"184":2,"325":2,"343":2,"344":2,"377":1,"396":2,"401":1,"429":3,"430":6,"450":2,"463":1,"491":1,"492":1}}],["now",{"2":{"241":1}}],["note=",{"2":{"339":1}}],["note=ref",{"2":{"338":1}}],["notes",{"2":{"338":4,"339":8}}],["notes=ref",{"2":{"338":1}}],["note",{"2":{"338":13,"339":1}}],["notebook",{"2":{"23":1,"543":3,"552":1,"580":2,"582":1}}],["notation",{"2":{"211":1}}],["notificationinterceptor",{"2":{"122":2,"546":2}}],["not",{"2":{"121":1,"369":2,"430":1,"448":1,"474":1,"505":1}}],["no",{"2":{"121":2,"187":1,"535":8,"540":4}}],["nosql",{"2":{"17":2,"39":1,"124":1,"337":1,"478":1}}],["umd",{"2":{"513":1,"530":1,"531":1}}],["uml",{"2":{"14":1,"352":2}}],["u",{"2":{"438":1}}],["upstream",{"2":{"466":1}}],["up",{"2":{"396":1,"430":1}}],["updating",{"2":{"396":1}}],["updateprojects",{"2":{"407":5}}],["update",{"2":{"131":5,"353":1,"359":6,"363":4,"396":1,"430":1,"460":1}}],["upwardprop",{"2":{"362":5}}],["undefined",{"2":{"454":1}}],["unlighthouse",{"2":{"430":2}}],["unocss",{"2":{"430":10}}],["uno",{"2":{"430":10}}],["untrackedchanges",{"2":{"430":1}}],["unique",{"2":{"478":1}}],["unit",{"2":{"442":1,"444":1,"479":6}}],["unicodehighlight",{"2":{"430":1}}],["universal",{"2":{"352":1}}],["unpkg",{"2":{"157":1,"513":3,"520":2,"530":3,"531":3}}],["uri",{"2":{"341":1,"407":1,"417":1,"418":1,"546":1}}],["urlsearchparams",{"2":{"417":3}}],["urls",{"2":{"404":1}}],["url",{"2":{"0":1,"51":3,"122":1,"180":1,"251":1,"273":1,"294":2,"296":3,"298":1,"299":1,"300":1,"341":2,"343":1,"345":2,"400":1,"402":1,"404":5,"407":3,"408":2,"409":1,"410":1,"411":4,"412":1,"413":4,"415":1,"416":1,"417":1,"419":1,"420":2,"426":2,"428":1,"466":2,"505":6,"508":2,"546":1,"587":1,"589":2}}],["us",{"2":{"417":1,"430":1}}],["using",{"2":{"411":1}}],["usage",{"2":{"309":1}}],["usability",{"2":{"192":1}}],["usb",{"2":{"291":1,"421":1}}],["usetouchswipe",{"2":{"553":1}}],["usenewswidget",{"2":{"482":1}}],["useid",{"2":{"441":3}}],["usei18nlight",{"0":{"576":1},"2":{"577":2}}],["usei18n",{"2":{"436":1,"477":1,"482":1,"577":4}}],["usepokemon",{"2":{"432":1,"433":1,"476":2}}],["usedocumentscroll",{"2":{"363":5}}],["usewindowsevents",{"2":{"363":1}}],["useappconfig",{"2":{"547":3}}],["useapploader",{"0":{"440":1},"2":{"439":3,"440":1,"441":3}}],["useadmin",{"2":{"363":1}}],["useauthservice",{"2":{"478":1}}],["useauthstore",{"2":{"478":1}}],["useauth",{"2":{"122":4,"478":1}}],["usecounterstore",{"2":{"315":2,"316":1,"318":1}}],["userloggedin",{"2":{"478":1}}],["useraccountview",{"2":{"438":1}}],["usermodel",{"2":{"435":1,"476":1}}],["userprofile",{"2":{"435":2,"476":2}}],["userouter",{"2":{"410":3,"413":1}}],["useroute",{"2":{"410":3,"413":1,"418":2}}],["username",{"2":{"396":2,"415":3,"478":1,"505":1}}],["user",{"2":{"122":2,"149":1,"239":2,"248":1,"352":1,"360":1,"396":6,"420":2,"430":3,"435":2,"476":2,"501":2}}],["userid",{"2":{"122":1}}],["userservice",{"2":{"435":1,"476":1}}],["users",{"2":{"122":7,"360":1}}],["userdata",{"2":{"122":1}}],["usescreenwidth",{"2":{"543":6}}],["usescreensize",{"2":{"482":1}}],["useshoppingcart",{"2":{"482":1}}],["usestore",{"2":{"363":1}}],["usestate",{"2":{"313":6}}],["usesessionstorage",{"2":{"321":3,"322":2}}],["uses",{"2":{"100":1,"396":10}}],["usefavourites",{"0":{"112":1},"2":{"98":1,"112":6,"113":1}}],["usebreakponts",{"2":{"96":2}}],["uselocalstorage",{"0":{"95":1},"2":{"95":4,"96":3}}],["use",{"0":{"14":1,"437":1},"2":{"14":4,"128":1,"171":1,"317":1,"345":2,"352":1,"363":1,"368":2,"369":1,"405":2,"430":1,"489":1}}],["utf",{"2":{"178":1,"319":2}}],["utils",{"0":{"451":1},"1":{"452":1,"453":1},"2":{"122":3,"427":2,"432":1,"433":1,"434":1,"436":1,"442":1,"445":1,"446":1,"450":1,"451":3,"452":2,"453":1,"476":3,"477":1,"545":3,"546":5,"547":2,"549":1,"577":1}}],["ubuntu",{"2":{"152":1,"178":1,"322":1,"396":3,"460":1,"535":1}}],["ux",{"0":{"237":1,"239":1,"249":1,"392":1},"1":{"238":1,"239":1,"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"262":1,"263":1,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1,"270":1,"271":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"286":1,"287":1,"288":1},"2":{"68":1,"70":1,"95":1,"106":1,"237":6,"239":2,"240":2,"249":2,"261":1,"288":2,"492":2,"501":1,"538":1,"553":1,"570":1,"590":1}}],["uikit",{"2":{"435":1,"476":1}}],["ui",{"0":{"24":1,"27":1,"239":1,"485":1,"490":1},"1":{"25":1,"26":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1},"2":{"23":2,"26":1,"70":1,"73":1,"88":1,"96":1,"114":1,"192":1,"197":1,"237":3,"239":2,"288":1,"294":1,"327":1,"429":1,"435":1,"454":1,"456":4,"470":2,"476":1,"479":1,"482":3,"483":3,"485":1,"487":1,"490":10,"501":1,"506":1,"538":1,"542":1,"547":1,"566":1,"567":1}}],["og",{"2":{"589":6}}],["owner",{"2":{"504":1,"505":2,"511":1,"520":1,"524":1,"528":1,"530":1,"531":1}}],["os",{"2":{"483":1}}],["old",{"2":{"474":2}}],["ok",{"2":{"474":2}}],["okta",{"2":{"419":1}}],["otp",{"0":{"420":1},"2":{"420":5,"421":2,"423":1}}],["othervalue",{"2":{"55":1,"56":1}}],["other",{"2":{"55":1,"56":1,"478":1}}],["out",{"2":{"430":2,"449":1,"474":1}}],["output",{"2":{"430":1,"452":1}}],["outlook",{"2":{"414":1}}],["our",{"2":{"159":1}}],["o",{"2":{"378":1}}],["overflow",{"2":{"550":1}}],["overwrite",{"2":{"535":2}}],["overrides",{"2":{"430":1}}],["over",{"0":{"195":1},"2":{"191":1}}],["opera",{"2":{"178":1}}],["open=",{"2":{"568":1}}],["opengraph",{"2":{"535":1}}],["openclose",{"2":{"430":1}}],["opencart",{"2":{"16":2,"62":1}}],["openid",{"0":{"416":1},"2":{"416":6,"417":2,"421":1}}],["opennote",{"2":{"338":2}}],["open",{"2":{"12":1,"39":1,"62":1,"121":1,"231":1,"299":1,"533":1,"535":1,"540":1,"549":1,"570":1,"589":1}}],["option",{"2":{"171":1}}],["options=",{"2":{"511":1,"513":1,"524":1,"528":1,"530":1,"531":1}}],["options",{"0":{"160":1,"315":1},"2":{"126":1,"128":1,"129":1,"147":1,"160":6,"314":2,"315":1,"318":1,"368":1,"396":1,"404":1,"413":1,"414":1,"430":1,"474":1,"511":4,"520":2,"524":4,"528":4,"531":4}}],["oreilly",{"2":{"491":1}}],["or",{"2":{"360":1,"377":5,"505":4,"535":1,"543":1}}],["orientation",{"2":{"295":1,"296":1,"300":1,"587":1}}],["origins",{"2":{"345":1}}],["origin",{"2":{"125":7,"319":2,"345":2,"466":5}}],["oracle",{"2":{"124":1,"425":1}}],["organismheader",{"2":{"433":1,"476":1}}],["organismpokemoncard",{"2":{"433":1,"476":1}}],["organisms",{"2":{"433":1,"476":1}}],["organizeimports",{"2":{"430":1}}],["org",{"2":{"107":1,"132":2,"136":1,"142":1,"167":1,"168":2,"178":1,"184":1,"200":1,"246":1,"293":1,"318":1,"319":1,"362":1,"363":1,"364":1,"413":1,"417":1,"546":1}}],["orders",{"2":{"12":1}}],["odezhda",{"2":{"106":1}}],["obj",{"2":{"474":1}}],["object",{"2":{"100":1,"163":1,"198":1,"211":1,"358":1,"411":1,"428":1}}],["observerclass",{"2":{"223":3}}],["observerpattern",{"2":{"223":1}}],["observer",{"0":{"222":1,"223":1,"309":1},"1":{"223":1,"310":1,"311":1},"2":{"191":1,"205":1,"227":2,"231":1,"260":1,"261":2,"304":1,"309":1,"311":1,"474":1}}],["observe",{"2":{"95":2,"261":1}}],["official",{"2":{"377":1}}],["office",{"2":{"244":1,"399":1}}],["off",{"2":{"223":4,"311":1,"407":1,"430":1,"478":1}}],["of",{"0":{"194":1},"2":{"100":5,"121":1,"191":1,"359":1,"426":1,"430":1,"432":1,"448":1,"449":1,"476":1,"492":1,"505":3}}],["once",{"2":{"447":1,"448":1}}],["onclickoutside",{"2":{"96":1}}],["ontaskerrors",{"2":{"430":1}}],["onunmounted",{"2":{"363":2}}],["onmesssage",{"2":{"329":1}}],["onmessage=",{"2":{"335":1}}],["onmessage",{"2":{"328":2,"329":2,"330":1,"332":1,"334":1,"335":1}}],["onmounted",{"2":{"122":3,"198":3,"261":2,"298":2,"311":3,"363":2,"590":1}}],["onboarding",{"2":{"274":1}}],["onbeforeunmount",{"2":{"198":3,"298":1,"311":3,"407":1}}],["onlyenabledextensions",{"2":{"430":1}}],["only",{"2":{"271":1,"430":2}}],["online",{"2":{"14":1,"399":1}}],["onecolumnlayout",{"0":{"582":1}}],["onecomponent",{"2":{"357":3}}],["onerror",{"2":{"328":2}}],["one",{"2":{"244":1,"413":2,"492":1}}],["on",{"0":{"167":1},"2":{"121":1,"123":1,"147":1,"167":2,"223":3,"311":1,"345":1,"396":5,"407":1,"430":2,"436":1,"453":1,"476":1,"535":1}}],["oauth",{"2":{"40":1,"123":2,"416":1,"423":1}}],["ozon",{"2":{"22":1}}],["eex",{"2":{"430":1}}],["eol",{"2":{"430":1}}],["e88a22df",{"2":{"426":1}}],["eyjzdwiioiixmjm0nty3odkwiiwibmftzsi6ilbhymxviequiedhcmfndxnviiwiawf0ijoxnte2mjm5mdiyfq",{"2":{"416":1}}],["eyjhbgcioijiuzi1niisinr5cci6ikpxvcj9",{"2":{"416":1}}],["echo",{"2":{"396":8}}],["ecosystem",{"2":{"377":1}}],["ecommerce",{"2":{"41":1}}],["eager",{"2":{"428":2}}],["easingthemes",{"2":{"396":2}}],["eat",{"2":{"225":1}}],["err=>",{"2":{"338":1,"415":1,"420":2}}],["err",{"2":{"234":1,"328":1,"335":2,"336":1,"339":1,"422":2}}],["errorcomponent",{"2":{"357":3}}],["error",{"2":{"55":3,"234":1,"343":1,"396":1,"418":2,"448":1,"449":1,"463":1}}],["es",{"2":{"520":1}}],["esm",{"2":{"520":2,"521":1}}],["esbenp",{"2":{"430":4}}],["esbuild",{"2":{"184":2,"429":1}}],["esnext",{"2":{"429":1}}],["es6",{"2":{"211":1,"474":1,"482":1}}],["eslint",{"2":{"23":1,"101":1,"429":3,"430":17,"491":1,"538":2}}],["education",{"2":{"587":1}}],["editorconfig",{"2":{"430":2}}],["editortab",{"2":{"430":1}}],["editorgroup",{"2":{"430":1}}],["editor",{"2":{"430":29}}],["edit",{"2":{"168":1,"353":1,"500":1}}],["edititem",{"2":{"168":4}}],["edge",{"2":{"40":1,"124":2,"178":1,"377":1}}],["effective",{"2":{"248":1}}],["eff",{"2":{"152":2}}],["eth",{"2":{"422":1}}],["ethjs",{"2":{"422":1}}],["ethereum",{"2":{"422":4}}],["etc",{"0":{"149":1},"2":{"148":1,"591":1}}],["etsy",{"2":{"22":1}}],["eventbus",{"2":{"407":3}}],["eventname",{"2":{"358":2}}],["event",{"2":{"223":13,"298":3,"299":5,"308":1,"328":4,"329":2,"330":1,"334":2,"335":2,"430":1,"453":2,"483":1}}],["events",{"0":{"131":1},"2":{"223":9,"358":1,"445":2}}],["everybody",{"2":{"478":1}}],["every",{"2":{"122":1}}],["electron",{"2":{"404":1}}],["electronic",{"2":{"152":1}}],["element",{"2":{"261":1,"481":1}}],["elements",{"0":{"481":1},"2":{"168":1,"364":1,"481":1}}],["elem",{"2":{"261":3}}],["el",{"2":{"127":1}}],["else",{"0":{"164":2},"2":{"112":1,"218":1,"233":2,"234":2,"299":1,"315":1,"316":1,"321":1,"334":1,"341":2,"357":1,"418":1,"420":2,"427":1}}],["engine",{"2":{"474":1}}],["end",{"2":{"444":2,"445":2,"479":2}}],["endpoint",{"2":{"415":1,"417":1}}],["endpoints",{"0":{"51":1},"2":{"416":1}}],["enablesmartcommit",{"2":{"430":1}}],["enable",{"2":{"430":3,"474":1}}],["enabled",{"2":{"300":1,"430":9}}],["entity",{"2":{"478":2}}],["entities",{"2":{"435":2,"476":2}}],["entire",{"2":{"428":1}}],["entry",{"2":{"413":2}}],["enter=",{"2":{"187":2}}],["enter",{"2":{"179":2,"185":1,"187":1,"453":1}}],["en",{"2":{"200":1,"246":1,"319":1,"417":1,"430":3}}],["encapsulation",{"0":{"197":1},"2":{"191":1}}],["encryption",{"2":{"416":1}}],["encrypt",{"0":{"152":1},"2":{"139":1,"152":3,"153":1,"292":1,"391":1}}],["envrc",{"2":{"430":12}}],["envs",{"2":{"396":2}}],["environments",{"2":{"425":1}}],["environment",{"2":{"396":1,"451":1}}],["env",{"2":{"122":1,"396":26,"430":38,"546":1}}],["emmet",{"2":{"430":2}}],["emma",{"2":{"130":1}}],["email",{"2":{"420":3}}],["email=ref",{"2":{"420":1}}],["emitted",{"2":{"453":1}}],["emit",{"2":{"131":1,"223":3,"311":1,"407":1,"453":1}}],["emits",{"2":{"126":1,"131":1,"160":1,"306":2,"359":1}}],["empty",{"2":{"121":1}}],["embla",{"0":{"85":1},"2":{"85":1,"472":1}}],["e2e2e3",{"2":{"506":1,"591":2}}],["e2e",{"2":{"77":1,"444":1,"479":5}}],["eq",{"2":{"55":1}}],["exs",{"2":{"430":5}}],["ex",{"2":{"430":1}}],["exclude",{"2":{"396":1,"430":1}}],["exiting",{"2":{"396":1}}],["extent",{"2":{"505":1}}],["extending",{"2":{"436":1,"476":1}}],["extension",{"2":{"430":1}}],["extensions",{"2":{"293":1,"430":3,"463":1}}],["extractor",{"2":{"430":11}}],["extractdomain",{"2":{"0":1}}],["experimentally",{"2":{"505":1}}],["experience",{"2":{"239":1,"445":1,"501":2}}],["expected",{"2":{"448":1}}],["expect",{"2":{"448":12,"449":1,"450":3,"452":2,"453":4,"454":1}}],["expand",{"2":{"430":1}}],["expandmode",{"2":{"430":1}}],["express",{"2":{"344":2,"345":7,"492":1}}],["explorer",{"2":{"180":1,"430":6,"462":1}}],["explain",{"0":{"100":1,"101":1},"2":{"100":1,"101":1}}],["exports",{"2":{"428":1}}],["export",{"2":{"95":1,"112":1,"122":2,"160":2,"211":1,"212":1,"214":1,"215":1,"216":1,"219":1,"300":1,"310":1,"313":1,"315":1,"316":1,"321":1,"334":1,"336":1,"339":1,"341":1,"363":1,"368":2,"404":1,"428":1,"429":1,"438":1,"440":1,"478":1,"546":2}}],["examplecomponent",{"2":{"357":1}}],["example",{"2":{"14":1,"428":2}}],["e",{"2":{"12":2,"16":1,"62":1,"63":1,"67":1,"70":1}}],["2e2e32",{"2":{"506":1,"530":1,"531":1}}],["2fa",{"0":{"421":1},"2":{"420":1,"421":4}}],["299",{"2":{"415":1}}],["2979ff",{"2":{"296":1}}],["29",{"2":{"284":1,"430":1}}],["28",{"2":{"277":1}}],["27",{"2":{"276":1}}],["26",{"2":{"273":1,"426":1}}],["245",{"2":{"506":3,"530":3,"531":3,"591":3}}],["24",{"2":{"272":1,"427":2}}],["235",{"2":{"506":4,"530":4,"531":4,"591":4}}],["23",{"2":{"271":1}}],["2px",{"2":{"259":1}}],["21",{"2":{"233":2,"268":1,"272":1}}],["25",{"2":{"227":2,"272":1}}],["255",{"2":{"142":1,"506":2,"530":2,"531":2,"591":2}}],["22+",{"2":{"430":1}}],["22",{"2":{"178":1,"268":1,"272":1}}],["2022",{"2":{"502":1}}],["2023",{"2":{"430":1,"491":1,"502":1}}],["2016",{"2":{"491":1}}],["20~30",{"2":{"429":1}}],["20",{"2":{"96":1,"114":1,"152":1,"261":1,"267":1,"396":1,"478":1,"491":1,"505":1}}],["200",{"2":{"47":1,"357":1,"415":1,"425":1,"430":1,"492":1,"505":2,"568":1}}],["2",{"0":{"126":1,"212":1,"214":1,"215":2,"216":1,"217":1,"218":1,"219":1,"220":1,"223":1,"225":1,"227":1,"229":1,"230":2,"233":1,"352":1,"383":1,"393":1,"418":1},"1":{"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1},"2":{"10":1,"51":2,"96":2,"107":1,"109":1,"125":1,"126":2,"127":2,"128":1,"129":1,"131":2,"132":6,"133":1,"135":1,"137":2,"138":1,"145":1,"149":2,"152":1,"155":1,"160":4,"165":1,"179":1,"181":1,"185":1,"187":4,"194":1,"196":2,"219":1,"222":2,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":2,"230":2,"231":1,"232":1,"233":10,"234":10,"242":1,"261":1,"264":2,"293":1,"298":1,"307":3,"308":2,"309":2,"311":1,"313":4,"315":3,"316":3,"318":3,"319":1,"320":1,"321":2,"327":2,"331":1,"332":1,"334":2,"335":2,"338":2,"339":2,"345":2,"348":1,"351":1,"352":1,"356":1,"362":2,"363":4,"368":6,"369":1,"393":1,"399":1,"402":1,"404":3,"416":2,"430":3,"446":2,"448":4,"452":2,"453":4,"462":2,"474":5,"478":2,"482":1,"490":1,"491":3,"492":1,"497":2,"506":4,"525":4,"530":2,"531":2,"546":1,"591":2}}],["c2c2c4",{"2":{"591":1}}],["cтановиться",{"2":{"483":1}}],["czrc",{"2":{"430":2}}],["cz",{"2":{"430":2}}],["cypress",{"2":{"430":10,"453":1,"479":1}}],["cycle",{"2":{"160":1}}],["cxx",{"2":{"430":1}}],["cjs",{"2":{"430":4}}],["cc",{"2":{"430":1}}],["csproj",{"2":{"430":1}}],["cspell",{"2":{"430":2}}],["cshtml",{"2":{"430":2}}],["cs",{"2":{"430":12}}],["csshtml",{"2":{"550":1}}],["cssnano",{"2":{"430":10}}],["cssnanorc",{"2":{"430":10}}],["css",{"0":{"87":1,"89":1,"181":1,"182":1,"490":1,"497":1,"525":1,"550":1},"1":{"88":1,"89":1,"90":1,"182":1,"186":1,"187":1,"188":1},"2":{"23":2,"35":3,"85":1,"89":6,"96":1,"155":4,"157":1,"158":1,"159":4,"163":1,"168":1,"177":1,"180":4,"181":5,"182":9,"183":9,"186":2,"187":4,"189":1,"190":1,"197":1,"251":1,"252":1,"253":1,"258":1,"271":3,"291":1,"295":1,"300":3,"338":1,"362":1,"377":1,"405":1,"425":1,"430":5,"470":1,"482":1,"487":1,"490":9,"491":1,"492":1,"506":2,"511":4,"513":1,"518":1,"520":2,"524":3,"525":4,"528":4,"530":1,"531":1,"538":1,"542":1,"573":1,"582":1,"588":1,"590":1,"591":4}}],["css3",{"0":{"487":1},"2":{"23":1,"487":1,"488":1,"490":1,"538":1}}],["cpp",{"2":{"430":1}}],["cp",{"2":{"396":1}}],["cpu",{"2":{"377":1,"483":2}}],["ctrlcmd",{"2":{"430":1}}],["ctrl",{"2":{"248":1}}],["c++",{"2":{"198":1}}],["certification",{"2":{"491":1}}],["certbot",{"2":{"152":6,"154":1,"425":1}}],["central",{"2":{"320":1}}],["center",{"2":{"186":1}}],["celsius",{"2":{"227":9}}],["c>",{"2":{"147":2}}],["cname",{"2":{"142":1}}],["cheat",{"0":{"493":1},"1":{"494":1,"495":1,"496":1,"497":1,"498":1,"499":1},"2":{"494":1,"495":1,"496":1,"497":4}}],["check",{"2":{"430":1,"452":1,"453":1}}],["checkotp",{"2":{"420":3}}],["checkout",{"2":{"396":4,"464":2,"465":2}}],["checkbox",{"2":{"187":2}}],["checked",{"2":{"187":6}}],["chia",{"2":{"448":1}}],["children",{"2":{"408":2,"409":1,"438":2}}],["childsession",{"0":{"322":1}}],["childsimple",{"2":{"313":1}}],["childpinia",{"0":{"318":1}}],["child",{"0":{"308":1,"311":1},"2":{"307":4,"359":1}}],["childcomponent>",{"2":{"307":3,"359":1}}],["childcomponent",{"2":{"307":4,"359":1}}],["chgrp",{"2":{"396":2}}],["chosen",{"2":{"505":1}}],["choice",{"2":{"396":1}}],["choose",{"2":{"121":1}}],["chrome",{"2":{"178":1,"297":2,"301":1,"319":1,"322":1,"377":2,"474":2,"492":1}}],["chromium",{"2":{"132":1,"178":1,"377":1,"474":1}}],["changelocale",{"2":{"577":2}}],["changelog",{"2":{"430":1,"515":1}}],["changes",{"2":{"136":1}}],["chain",{"2":{"422":1}}],["chainable",{"2":{"228":1}}],["chapter09",{"2":{"443":1}}],["chapter05",{"2":{"398":1}}],["chapter08",{"2":{"326":1}}],["chapter07",{"2":{"305":1}}],["chapter06",{"2":{"290":1}}],["chapter11",{"2":{"238":1}}],["chapter",{"0":{"144":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"223":1,"225":1,"227":1,"229":1,"230":1,"233":1,"463":1},"2":{"179":1,"300":3}}],["clangd",{"2":{"430":1}}],["clang",{"2":{"430":2}}],["classes",{"2":{"498":1}}],["classpath",{"2":{"430":1}}],["class",{"2":{"212":1,"430":1}}],["class=",{"2":{"112":1,"114":2,"183":1,"186":1,"187":17,"259":1,"308":1,"318":1,"362":3,"368":2,"407":3,"410":1,"427":1,"439":3,"520":1,"543":4,"547":2}}],["clearcase",{"2":{"457":1}}],["clearinterval",{"2":{"420":1}}],["clear",{"2":{"319":1}}],["cleartodo",{"2":{"187":3}}],["clean",{"0":{"198":1},"2":{"191":1,"198":1,"223":1,"363":1,"396":1}}],["clippy",{"2":{"430":2}}],["clipboard",{"2":{"187":1,"430":4}}],["click=",{"2":{"167":2,"168":1,"187":3,"298":1,"307":1,"308":1,"311":1,"313":2,"318":2,"338":3,"343":1,"368":2,"547":1,"577":1}}],["click",{"2":{"167":2,"307":1,"368":1,"453":3}}],["cli",{"2":{"133":1,"429":1,"430":2}}],["client",{"2":{"51":3,"55":2,"56":9,"125":6,"416":1,"417":1,"545":1}}],["closeonfiledelete",{"2":{"430":1}}],["closemodal",{"2":{"368":3}}],["cloud",{"2":{"124":2,"491":1}}],["clone",{"2":{"120":1,"299":1,"537":1}}],["cdn",{"2":{"157":1}}],["cd",{"0":{"394":1},"2":{"76":1,"121":1,"394":5,"396":4,"467":2,"468":1,"469":1,"479":1,"491":1,"536":1,"537":1,"573":1}}],["citation",{"2":{"430":1}}],["city",{"2":{"408":1,"410":1}}],["cities",{"2":{"408":1}}],["circleci",{"2":{"430":2}}],["circle",{"2":{"221":4,"506":2,"525":1,"530":1,"531":1}}],["ci",{"0":{"394":1},"2":{"76":1,"394":5,"396":1,"467":3,"468":1,"469":1,"479":1,"491":1,"573":1}}],["customevent",{"2":{"481":1}}],["customer",{"2":{"70":1}}],["custom",{"0":{"481":1},"2":{"430":2,"474":3,"481":2,"591":1}}],["cursorstyle",{"2":{"430":1}}],["cursorsmoothcaretanimation",{"2":{"430":1}}],["cursorblinking",{"2":{"430":1}}],["cursor",{"2":{"187":1}}],["currentcolor",{"2":{"427":2}}],["current",{"2":{"121":1,"264":2,"368":11}}],["curl",{"2":{"51":2,"56":2}}],["cmakepresets",{"2":{"430":1}}],["cmake",{"2":{"430":3}}],["cmakelists",{"2":{"430":1}}],["cmv",{"0":{"90":1,"115":1},"2":{"64":1}}],["cms",{"0":{"37":1,"39":1},"1":{"38":1,"39":1,"40":1,"41":1},"2":{"6":1,"12":2,"39":1,"63":1}}],["crm",{"2":{"542":1}}],["crowdin",{"2":{"430":2}}],["crossorigin",{"2":{"520":2}}],["cross",{"2":{"125":1,"345":1,"430":1}}],["credits",{"0":{"518":1},"2":{"430":1}}],["credo",{"2":{"430":1}}],["creator",{"2":{"143":1}}],["created",{"2":{"465":1}}],["createpinia",{"2":{"317":2}}],["createshape",{"2":{"221":3}}],["createrouter",{"2":{"144":1,"404":3}}],["creatememoryhistory",{"2":{"134":1}}],["createwebhistory",{"2":{"134":1,"144":3}}],["createwebhashhistory",{"2":{"134":1,"144":1,"404":3}}],["createapp",{"2":{"127":2,"128":4,"157":4,"317":2,"356":2,"360":1,"368":2,"405":2}}],["create",{"0":{"535":1},"1":{"536":1},"2":{"55":1,"121":1,"179":1,"353":1,"429":1,"500":1,"533":1,"535":4,"540":1,"541":1}}],["createclient",{"2":{"55":2}}],["crypto",{"2":{"334":1}}],["crafty",{"0":{"61":1},"2":{"80":2,"83":1,"104":1,"120":1,"121":5}}],["crud",{"2":{"59":1,"124":1,"198":1,"213":1,"337":2,"338":1,"340":2,"353":2}}],["c",{"2":{"17":1,"156":3,"160":1,"198":1,"234":7,"410":4,"430":1,"506":20,"525":17,"530":10,"531":11,"535":1,"542":1,"591":9}}],["capture",{"2":{"430":95}}],["caption",{"2":{"259":2}}],["capacitor",{"2":{"404":1}}],["can",{"2":{"478":1,"543":1}}],["cancel",{"2":{"368":3}}],["caniuse",{"2":{"132":1}}],["caches",{"2":{"299":2}}],["cache",{"2":{"299":4,"430":1,"588":1}}],["calc",{"2":{"550":1}}],["calculation",{"2":{"448":1}}],["calculatecelsius",{"2":{"227":2}}],["calculatefahrenheit",{"2":{"227":2}}],["call",{"0":{"273":1},"2":{"273":1}}],["callback",{"0":{"232":1,"233":1},"1":{"233":1},"2":{"232":1,"233":7,"234":1,"328":2,"483":1}}],["callbacks",{"2":{"191":1,"207":1}}],["called",{"2":{"100":1}}],["catchpokemon",{"2":{"435":1,"476":1}}],["catch",{"2":{"218":1,"234":5,"339":3,"341":2,"415":1,"419":1,"420":2,"449":1}}],["categories",{"0":{"45":1},"2":{"43":1,"51":3,"83":3,"587":1}}],["categoryproducts",{"2":{"83":1}}],["category",{"0":{"47":1},"2":{"18":1,"83":1,"106":4,"118":1}}],["categoryid",{"2":{"18":1,"83":3,"106":2}}],["camelcase",{"2":{"173":1,"363":1}}],["cargo",{"2":{"430":2}}],["card",{"2":{"187":1,"589":1}}],["carousel",{"0":{"85":1},"2":{"85":1,"472":1}}],["cart",{"2":{"12":1,"106":1}}],["cases",{"0":{"437":1}}],["case",{"0":{"14":1},"2":{"14":4,"44":1,"171":1,"221":2,"225":3,"227":2,"291":1,"352":1,"369":3,"489":1}}],["coefficients",{"2":{"505":1}}],["coolcosmos",{"2":{"478":1}}],["cookies",{"2":{"319":2}}],["cookie",{"2":{"123":3,"298":1}}],["coverage",{"2":{"447":2,"455":4}}],["copying",{"2":{"430":1}}],["copilot",{"2":{"98":1}}],["coinflip",{"2":{"364":1}}],["couchdb",{"2":{"337":2}}],["countries",{"2":{"410":1}}],["country",{"2":{"408":1,"410":3}}],["count`",{"2":{"396":1}}],["count=5",{"2":{"396":1}}],["count++",{"2":{"315":1}}],["count>=0",{"2":{"315":2}}],["counter++",{"2":{"313":1}}],["counter=",{"2":{"307":3}}],["counter",{"0":{"316":1},"2":{"307":8,"308":3,"313":2,"315":1,"316":1,"318":1,"322":2}}],["count",{"2":{"170":1,"315":3,"316":7}}],["coupled",{"2":{"2":1}}],["colortheme",{"2":{"430":1}}],["color",{"2":{"159":1,"230":2,"241":1,"259":1,"295":2,"296":2,"300":2,"318":1,"427":3,"530":1,"531":2}}],["column=eq",{"2":{"56":1}}],["column",{"2":{"55":3,"56":2,"271":1,"543":1}}],["core",{"2":{"416":1,"434":1,"460":1,"476":1}}],["cordova",{"2":{"404":1}}],["corporation",{"2":{"142":1,"587":1}}],["cors",{"0":{"125":1},"2":{"125":10,"344":1,"345":5}}],["coding",{"2":{"64":1,"90":1,"115":1}}],["codesandbox",{"2":{"430":1}}],["codeowners",{"2":{"430":1}}],["codecov",{"2":{"430":10}}],["codelens",{"2":{"430":4}}],["codeaction",{"2":{"430":1}}],["codeactions",{"2":{"430":1}}],["codeactionsonsave",{"2":{"430":2}}],["code=ref",{"2":{"420":2}}],["code>",{"2":{"318":1}}],["codeium",{"0":{"97":1},"1":{"98":1,"99":1,"100":1,"101":1,"102":1},"2":{"98":3,"99":1,"100":1,"101":1,"102":1,"430":1}}],["code",{"0":{"169":1,"201":1},"1":{"170":1,"171":1,"172":1,"173":1,"174":1,"204":1,"205":1,"206":1,"207":1},"2":{"39":1,"89":1,"98":1,"100":2,"121":1,"160":1,"171":1,"178":2,"180":1,"191":1,"225":1,"318":1,"377":1,"410":2,"418":3,"419":2,"420":3,"430":9,"436":1,"459":1,"466":1,"482":1,"535":1,"540":1,"561":1,"577":4,"578":1}}],["concept",{"2":{"432":1,"476":1}}],["concerns",{"0":{"194":1},"2":{"191":1}}],["conduct",{"2":{"430":1}}],["conf",{"2":{"430":1}}],["confirmsync",{"2":{"430":1}}],["confirmdraganddrop",{"2":{"430":1}}],["confirmdelete",{"2":{"430":1}}],["confirm",{"0":{"284":1}}],["configs",{"2":{"430":1}}],["config",{"2":{"121":1,"180":1,"184":3,"300":1,"429":2,"430":225,"451":1,"454":1,"455":1,"535":4,"538":1,"549":1,"562":1,"563":1}}],["connection",{"2":{"430":1}}],["connect",{"2":{"416":1}}],["console",{"2":{"212":1,"227":1,"233":5,"234":7,"328":1,"329":1,"345":1,"360":1,"396":1,"415":2,"422":2,"474":2}}],["constructor",{"2":{"212":1,"218":1,"223":1}}],["constant",{"2":{"160":2}}],["const",{"2":{"55":4,"83":2,"93":2,"95":1,"112":2,"113":1,"122":3,"127":2,"128":2,"130":1,"157":1,"160":2,"168":1,"171":1,"174":1,"187":1,"214":1,"218":1,"220":1,"221":2,"223":1,"227":1,"229":1,"230":1,"234":3,"259":1,"261":1,"298":1,"299":4,"307":1,"308":1,"310":1,"311":1,"313":2,"315":1,"316":2,"317":1,"318":1,"321":1,"322":1,"330":1,"334":2,"335":2,"338":1,"339":2,"340":1,"341":1,"342":1,"343":1,"345":5,"357":1,"360":3,"363":2,"368":3,"404":1,"410":1,"415":1,"418":1,"427":3,"428":5,"438":2,"439":1,"440":2,"441":1,"452":1,"454":1,"474":1,"478":1,"505":1,"520":1,"543":1,"545":2,"546":2,"547":1,"577":2}}],["conventions",{"0":{"169":1},"1":{"170":1,"171":1,"172":1,"173":1,"174":1}}],["convention",{"2":{"160":1}}],["convert",{"2":{"100":1}}],["contributors",{"2":{"430":1}}],["contributing",{"2":{"430":1}}],["controller",{"2":{"430":1,"478":3,"482":2}}],["control",{"0":{"457":1},"2":{"123":1,"125":4,"457":3,"469":1,"498":1}}],["continuous",{"2":{"394":2,"467":3}}],["continue",{"2":{"121":1}}],["container",{"2":{"187":6,"488":1,"543":2}}],["content=",{"2":{"589":11}}],["contentlayer",{"2":{"430":10}}],["contents",{"2":{"396":1}}],["content>",{"2":{"362":1}}],["content",{"2":{"56":1,"186":1,"362":2,"546":1}}],["co",{"2":{"51":3,"55":1,"56":3}}],["common",{"2":{"419":1}}],["commits",{"2":{"505":2,"508":2}}],["commitlint",{"2":{"430":4}}],["commit",{"2":{"394":1,"462":1,"463":3,"465":1}}],["commands",{"2":{"430":1}}],["commandinvoker",{"2":{"225":1}}],["command",{"0":{"224":1,"225":1},"1":{"225":1},"2":{"178":1,"191":1,"205":1,"225":4,"331":1,"332":1,"334":4,"335":2,"336":1}}],["commerce",{"2":{"12":2,"16":1,"62":1,"63":1,"67":1,"70":1}}],["compile",{"2":{"430":1}}],["compileroptions",{"2":{"429":1}}],["compare",{"2":{"430":6}}],["completed",{"2":{"369":2}}],["completion",{"2":{"178":1,"430":1}}],["computer",{"2":{"248":1}}],["computed",{"2":{"96":1,"160":1,"187":7,"313":1,"316":3,"368":4,"427":3,"440":2}}],["component>",{"2":{"168":1,"364":1}}],["components",{"0":{"259":1,"261":1,"338":1,"343":1,"480":1},"1":{"481":1},"2":{"114":1,"160":1,"168":1,"180":1,"184":5,"186":3,"362":1,"407":2,"410":2,"429":1,"430":1,"432":1,"433":1,"434":3,"436":1,"447":1,"452":1,"453":1,"476":5,"477":2,"481":1,"531":2,"547":1}}],["component",{"0":{"364":1,"410":1,"513":1,"529":1},"1":{"530":1,"531":1,"532":1},"2":{"106":3,"128":4,"168":2,"307":3,"318":1,"322":1,"356":3,"364":3,"368":1,"404":3,"408":3,"410":1,"430":7,"438":4,"452":1,"453":1,"478":3,"481":2,"513":1,"515":2}}],["compose",{"2":{"430":1}}],["composer",{"2":{"430":2}}],["composables",{"0":{"363":1},"1":{"364":1},"2":{"95":1,"112":2,"122":1,"160":1,"363":1,"432":1,"433":1,"436":1,"439":1,"441":1,"476":2,"477":1,"478":1,"543":1,"547":1,"577":2}}],["composable",{"2":{"34":1,"438":1,"478":9,"482":2,"538":1,"543":1,"553":1,"575":1}}],["composition",{"0":{"160":1,"195":1},"2":{"23":1,"111":1,"126":2,"128":1,"130":1,"132":2,"137":1,"160":10,"191":1,"312":1,"314":1,"315":1,"316":2,"318":1,"363":2,"413":2,"474":3,"478":2,"491":1,"538":1}}],["com",{"2":{"22":3,"80":1,"120":1,"124":1,"125":9,"132":2,"142":1,"143":2,"144":2,"149":3,"157":1,"178":1,"182":3,"183":1,"184":1,"223":1,"238":1,"267":1,"285":2,"290":1,"291":1,"305":1,"309":1,"326":1,"348":1,"368":1,"369":1,"379":1,"380":1,"396":10,"398":1,"416":1,"425":5,"430":2,"443":1,"513":3,"520":2,"530":3,"531":3,"537":1,"545":1,"562":1,"563":1}}],["ds",{"2":{"463":1}}],["dx",{"2":{"445":1,"453":1,"490":1,"501":1}}],["dprint",{"2":{"430":4}}],["dlint",{"2":{"430":4}}],["dynamic",{"2":{"426":1}}],["dash",{"2":{"546":1}}],["day",{"2":{"470":2,"474":2}}],["dangerfile",{"2":{"430":2}}],["dart",{"2":{"430":6}}],["dark",{"2":{"430":1,"506":1,"520":1,"571":1,"591":1}}],["dapp",{"2":{"422":2}}],["dapps",{"2":{"422":1,"423":1}}],["datalayer",{"2":{"563":3}}],["data>",{"2":{"362":1}}],["data=",{"2":{"362":1}}],["data=json",{"2":{"319":1}}],["data=localstorage",{"2":{"319":1}}],["data`",{"2":{"83":1}}],["database",{"2":{"55":1}}],["data",{"0":{"129":1},"2":{"17":1,"18":2,"19":1,"47":3,"48":1,"51":1,"55":2,"83":5,"92":3,"93":3,"126":1,"129":6,"130":5,"157":2,"160":6,"223":3,"225":4,"314":1,"319":4,"328":2,"329":1,"334":6,"335":7,"336":1,"338":1,"341":6,"343":9,"345":4,"360":6,"362":3,"396":2,"415":1,"417":2,"419":1,"420":1,"429":1,"474":1}}],["dates",{"2":{"505":2}}],["date=`date",{"2":{"396":1}}],["date",{"2":{"0":1,"187":1,"396":7,"430":1,"563":1}}],["dt",{"2":{"396":1}}],["db",{"2":{"339":5}}],["dbservice",{"0":{"339":1},"2":{"338":1,"340":3,"342":1}}],["dbnotes",{"0":{"338":1}}],["dbmanager",{"2":{"213":1,"214":3,"215":3,"216":2,"217":4,"218":10,"220":6}}],["döner",{"2":{"266":1}}],["dns",{"0":{"142":2},"1":{"144":2},"2":{"142":6,"153":1,"154":2}}],["doublecount",{"2":{"315":1,"316":2}}],["don",{"0":{"199":1},"2":{"191":1}}],["done",{"2":{"187":5,"188":1}}],["dosignin",{"2":{"415":1}}],["dos",{"2":{"186":1}}],["dosubscribe",{"2":{"173":1}}],["download",{"2":{"183":1}}],["downloads",{"2":{"182":1}}],["docs",{"2":{"396":1,"399":1,"417":1,"425":1}}],["documentscroll",{"2":{"363":2}}],["document",{"2":{"163":1,"198":1,"261":1,"337":1,"363":2,"491":1}}],["dockerignore",{"2":{"430":1}}],["dockerfile",{"2":{"430":2}}],["docker",{"0":{"395":1},"2":{"40":1,"430":2}}],["do",{"0":{"144":1,"185":1,"188":1,"369":1,"370":1,"402":1},"1":{"186":1,"187":1,"188":1},"2":{"177":1,"179":1,"184":1,"185":2,"187":2,"188":1,"189":1,"351":1,"364":1,"368":1,"369":3,"370":1,"372":1,"397":2,"402":1,"407":2}}],["domain",{"2":{"589":1}}],["dom",{"2":{"135":1,"163":1,"164":2,"166":1,"198":1,"261":2,"327":1,"450":2}}],["doe",{"2":{"130":2,"358":1}}],["dropdown",{"2":{"490":1}}],["drilling",{"2":{"360":1,"438":2}}],["drive",{"2":{"123":3}}],["draw",{"2":{"221":3}}],["drawers",{"0":{"551":1},"1":{"552":1,"553":1}}],["drawer",{"2":{"121":1,"535":1,"542":1,"547":1,"570":1}}],["dry",{"0":{"199":1},"2":{"191":1,"356":1,"363":1}}],["diffeditor",{"2":{"430":1}}],["diffdecorationsgutterwidth",{"2":{"430":1}}],["dialyzer",{"2":{"430":1}}],["dialogstyle",{"2":{"430":1}}],["dialog",{"2":{"368":1}}],["diagram",{"0":{"5":1}}],["di",{"2":{"308":1}}],["dirs",{"2":{"396":1}}],["dir=`echo",{"2":{"396":2}}],["dir=your",{"2":{"396":1}}],["dir=dev",{"2":{"396":1}}],["dir=",{"2":{"396":2}}],["dir",{"2":{"396":24,"587":1}}],["dirname",{"2":{"184":1,"429":1}}],["direction",{"2":{"271":2,"543":2}}],["directives",{"2":{"167":1}}],["directive",{"2":{"128":1}}],["directory",{"0":{"410":1},"2":{"121":1,"408":3,"409":1}}],["discord",{"2":{"399":1}}],["disabled=",{"2":{"318":1}}],["dispatch",{"2":{"396":2}}],["dispatcher",{"0":{"332":1},"2":{"223":4,"330":1,"331":1,"332":1,"333":1}}],["displaylanguage",{"2":{"430":1}}],["display",{"2":{"163":1,"186":1,"187":1,"259":1,"271":2,"294":1,"296":1,"300":1,"505":2,"543":1,"587":1}}],["distributedfooter",{"0":{"559":1}}],["dist",{"2":{"144":1,"151":1,"396":2,"426":1,"430":1,"463":2,"511":2,"513":3,"520":2,"524":3,"528":2,"530":3,"531":3}}],["divider",{"2":{"591":1}}],["div>",{"2":{"114":1,"157":1,"160":2,"163":1,"186":1,"187":10,"230":1,"259":2,"261":2,"307":2,"311":2,"313":2,"338":3,"343":4,"362":5,"368":2,"407":2,"410":3,"438":6,"439":1,"543":4,"577":2}}],["div",{"2":{"114":2,"157":3,"163":2,"186":3,"187":12,"230":1,"260":1,"261":4,"338":1,"362":4,"368":2,"407":2,"410":1,"427":1,"439":2,"465":5,"520":1,"543":4}}],["d",{"0":{"92":1},"2":{"56":1,"92":1,"147":1,"396":1,"416":1,"430":16,"447":1,"451":2,"456":1,"464":1}}],["demo",{"0":{"517":1,"521":1,"532":1},"2":{"517":1,"521":1,"532":1}}],["details",{"2":{"488":1}}],["debounce",{"2":{"484":1}}],["debian",{"2":{"460":1}}],["debuganyway",{"2":{"430":1}}],["debug",{"2":{"430":1,"463":4}}],["deno",{"2":{"430":2}}],["deep",{"2":{"427":1}}],["delivery",{"2":{"394":1,"467":1}}],["delay",{"2":{"357":2}}],["delegate",{"0":{"331":1},"2":{"325":1,"330":1,"331":3,"333":1,"347":1}}],["deletenote",{"2":{"338":3,"339":2}}],["delete",{"2":{"55":1,"56":1,"112":1,"334":1,"339":1,"340":1,"353":1,"414":1,"440":1,"474":1}}],["dexie",{"2":{"337":2,"339":5}}],["dexiejs",{"0":{"337":1},"1":{"338":1,"339":1,"340":1,"341":1,"342":1,"343":1},"2":{"337":2}}],["dexiedb",{"2":{"231":1}}],["decoder",{"2":{"416":1}}],["decorator=",{"2":{"321":1}}],["decorator",{"0":{"228":1,"229":1,"230":1},"1":{"229":1,"230":1},"2":{"191":1,"206":1,"230":1,"234":1,"320":1,"321":2,"323":1,"331":1}}],["decrement",{"2":{"315":1,"316":2,"318":1}}],["de",{"2":{"257":1}}],["deposit",{"2":{"575":1}}],["deployment",{"0":{"561":1},"2":{"467":1,"561":2}}],["deploy",{"2":{"396":16,"561":2,"570":1}}],["deprecated",{"2":{"233":1,"478":1}}],["dependencies",{"2":{"219":3,"396":2,"578":1}}],["dependency2",{"2":{"220":1}}],["dependency1",{"2":{"220":1}}],["dependencyservice",{"2":{"219":2,"220":6}}],["dependency",{"0":{"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1},"1":{"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1},"2":{"191":1,"204":1,"218":1,"219":2,"220":2}}],["degrees",{"2":{"227":6}}],["definition",{"2":{"448":1}}],["define",{"2":{"454":1}}],["defined",{"2":{"448":2}}],["defineasynccomponent",{"2":{"357":7}}],["defineconfig",{"2":{"184":1,"300":2,"429":1,"451":1,"454":2,"562":1}}],["defineemits",{"2":{"131":1,"358":3,"359":2}}],["defineprops",{"2":{"131":1,"229":1,"230":1,"259":1,"358":4,"359":2,"368":1,"407":1,"427":1}}],["definestore",{"2":{"315":3,"316":3}}],["defines",{"2":{"100":1}}],["defaultopentab",{"2":{"505":1}}],["defaultoptions",{"2":{"505":1,"511":1,"524":1,"528":1}}],["defaultlayout",{"2":{"432":1,"434":1,"476":2}}],["defaultformatter",{"2":{"430":4}}],["defaults",{"2":{"341":1,"419":1}}],["default",{"0":{"149":1},"2":{"122":1,"129":1,"160":2,"184":1,"211":1,"212":1,"214":1,"215":1,"216":1,"219":1,"300":1,"310":1,"313":1,"334":1,"336":1,"339":1,"341":1,"358":3,"362":1,"368":4,"396":2,"404":1,"410":2,"427":6,"429":1,"430":2,"451":1,"454":2,"546":1,"562":1}}],["devdependencies",{"2":{"429":1,"430":1}}],["devoptions",{"2":{"300":1}}],["developit",{"2":{"309":1}}],["developer",{"2":{"299":1,"319":1,"330":1,"417":1,"445":1,"501":1}}],["development",{"2":{"72":1,"436":1,"476":1,"587":1}}],["dev",{"2":{"80":1,"121":1,"125":1,"179":1,"180":1,"182":1,"184":2,"187":1,"300":1,"396":10,"425":2,"429":1,"465":5,"492":1,"536":1,"537":1,"587":1}}],["devtoolsformatters",{"2":{"474":3}}],["devtools",{"2":{"22":1,"124":1,"474":2,"478":4,"578":1}}],["designer",{"2":{"430":2}}],["designing",{"2":{"248":1}}],["design",{"0":{"374":1,"435":1},"2":{"181":2,"182":1,"238":1,"266":1,"290":1,"305":1,"326":1,"348":1,"368":1,"369":1,"375":1,"379":1,"398":1,"428":1,"433":1,"435":1,"443":1,"476":3,"491":2,"502":1}}],["describe",{"2":{"448":3,"452":2,"453":2,"454":1}}],["description",{"2":{"18":1,"19":1,"144":3,"296":1,"396":1,"587":1,"589":3}}],["desc",{"2":{"47":2,"51":2,"83":1,"505":1}}],["desktop",{"2":{"23":1,"104":1,"246":1,"271":2,"301":1,"543":3,"552":1,"580":2,"582":1}}],["ppa",{"2":{"460":3}}],["python",{"2":{"491":1,"492":1}}],["pyproject",{"2":{"430":2}}],["pyrightconfig",{"2":{"430":2}}],["psalm",{"2":{"430":1}}],["pm2",{"2":{"430":4}}],["pm",{"2":{"430":1}}],["px`",{"2":{"427":4}}],["pdm",{"2":{"430":2}}],["pdf",{"2":{"426":1,"430":1}}],["pdgaraguso",{"2":{"380":1}}],["pwd",{"2":{"396":1}}],["pwas",{"2":{"423":1}}],["pwa",{"0":{"291":1,"292":1,"300":1,"301":1,"492":1,"586":1},"1":{"293":1,"294":1,"295":1,"296":1,"297":1,"298":1,"587":1,"588":1},"2":{"50":1,"69":1,"121":1,"139":2,"152":1,"155":1,"289":5,"291":15,"293":1,"296":2,"298":8,"299":5,"300":5,"301":3,"302":3,"303":4,"375":1,"387":1,"492":12,"501":1,"535":2,"540":2,"542":1,"570":1}}],["pnp",{"2":{"430":2}}],["pnpmyarnnpm",{"2":{"510":1,"523":1,"527":1}}],["pnpm",{"2":{"54":1,"121":3,"396":12,"429":2,"430":6,"463":1,"535":3,"536":2,"537":2,"540":1}}],["png`",{"2":{"426":1}}],["png",{"2":{"300":8,"426":3,"428":3,"547":1}}],["p>",{"2":{"298":2,"338":2}}],["p",{"2":{"298":2,"396":1,"407":4,"465":2}}],["pending",{"2":{"187":10,"188":1}}],["persistentsessionreviveprocess",{"2":{"430":1}}],["person=",{"2":{"131":1}}],["person",{"2":{"130":5,"131":1,"170":1,"172":1}}],["pereditorgroup",{"2":{"430":1}}],["performance",{"2":{"291":1}}],["permissions",{"2":{"396":1}}],["permission",{"2":{"123":1}}],["pipelines",{"2":{"430":2}}],["picture",{"2":{"162":3}}],["pinia",{"0":{"314":1,"318":1},"1":{"315":1,"316":1,"317":1,"318":1},"2":{"23":1,"113":1,"126":1,"134":2,"304":1,"313":1,"314":6,"315":3,"316":2,"317":2,"318":12,"322":1,"376":1,"377":1,"388":1,"478":14}}],["pug",{"2":{"474":1}}],["pugtools",{"2":{"430":1}}],["puppeteer",{"2":{"430":10}}],["put",{"2":{"299":1,"340":1,"414":2}}],["pubspec",{"2":{"430":3}}],["pubxml",{"2":{"430":2}}],["pub",{"2":{"222":1,"226":1,"407":2}}],["publishing",{"2":{"121":1,"242":1,"535":1}}],["public",{"2":{"55":1,"58":2,"118":1,"124":1,"133":1,"180":1,"181":1,"182":1,"183":1,"426":4,"515":1}}],["push",{"0":{"411":1},"2":{"187":1,"223":1,"291":3,"394":1,"396":3,"411":4,"412":1,"458":1,"466":2,"467":1,"482":1,"563":1}}],["purple",{"2":{"159":1,"230":1}}],["pure",{"2":{"159":1}}],["pulls",{"2":{"505":3}}],["pullapprove",{"2":{"430":2}}],["pull",{"2":{"151":1,"458":1,"466":1,"508":2}}],["playground",{"2":{"430":1}}],["playwright",{"2":{"430":10}}],["player",{"2":{"285":1}}],["placeholder=",{"2":{"187":1,"338":2}}],["placeholder",{"2":{"124":1}}],["plugin",{"2":{"300":3,"368":4,"429":2,"430":1,"492":2,"549":1}}],["plugins",{"2":{"184":3,"300":1,"366":2,"368":5,"369":1,"405":1,"429":1,"432":1,"433":1,"434":1,"451":1,"476":3}}],["plus",{"2":{"187":1}}],["please",{"2":{"121":1,"430":1}}],["pba",{"2":{"123":1}}],["phantom",{"2":{"422":1}}],["photoshop",{"2":{"399":1}}],["photo",{"2":{"123":1}}],["phpcs",{"2":{"430":2}}],["phpunit",{"2":{"430":1}}],["php",{"2":{"62":1,"124":1,"430":2,"491":1,"492":2}}],["pokemonmodel",{"2":{"435":1,"476":1}}],["pokemonservice",{"2":{"435":1,"476":1}}],["pokemonstatswidget",{"2":{"435":1,"476":1}}],["pokemonstore",{"2":{"434":1,"476":1}}],["pokemontests",{"2":{"434":1,"476":1}}],["pokemonthumbnail",{"2":{"434":1,"476":1}}],["pokemon",{"2":{"434":1,"435":2,"476":3}}],["pokemondetailpage",{"2":{"434":1,"435":1,"476":2}}],["pokemondetailtemplate",{"2":{"434":1,"476":1}}],["pokemondetail",{"2":{"432":1,"476":1}}],["pokemoncard",{"2":{"432":1,"434":1,"476":2}}],["pokemonlisttemplate",{"2":{"434":1,"476":1}}],["pokemonlist",{"2":{"432":1,"435":1,"476":2}}],["polygon",{"2":{"422":1}}],["policy",{"2":{"123":1}}],["policies",{"2":{"59":1}}],["port",{"2":{"345":4,"461":1}}],["portrait",{"2":{"296":1}}],["pouchdb",{"2":{"337":1}}],["pointer",{"2":{"187":1}}],["position",{"2":{"114":1}}],["postmessage",{"2":{"328":2,"329":1,"330":1,"334":1,"335":1}}],["postman",{"2":{"50":2,"125":1,"430":1}}],["posts",{"2":{"132":1}}],["postcssrc",{"2":{"430":10}}],["postcss",{"2":{"89":2,"430":10}}],["postwoman",{"2":{"50":1}}],["postgresql",{"2":{"124":1}}],["postgrest",{"2":{"56":2}}],["postgres",{"2":{"40":2,"48":1,"56":1}}],["post",{"2":{"0":3,"56":1,"340":3,"341":2,"342":1,"343":2,"345":3,"414":2,"415":1,"419":1,"420":2}}],["populus",{"2":{"96":1}}],["pablo",{"2":{"373":1,"416":1}}],["pascal",{"2":{"430":1}}],["pascalcase",{"2":{"172":1,"186":2}}],["password",{"2":{"415":3}}],["passingpropsupward>",{"2":{"362":1}}],["passingpropsupward",{"2":{"362":2}}],["payload=",{"2":{"335":1,"341":2}}],["payload",{"2":{"334":7,"335":3,"341":4,"416":4}}],["patterns",{"0":{"374":1,"392":1},"2":{"238":1,"290":1,"305":1,"326":1,"348":1,"368":1,"369":1,"375":1,"379":1,"398":1,"430":1,"443":1,"491":2,"502":1}}],["paths",{"2":{"429":1}}],["path",{"2":{"106":3,"184":4,"404":3,"408":3,"410":1,"411":1,"427":1,"429":3,"438":4}}],["packtpub",{"2":{"267":1}}],["packtpublishing",{"2":{"238":1,"290":1,"305":1,"326":1,"348":1,"368":1,"369":1,"379":1,"398":1,"443":1}}],["packt",{"2":{"241":2,"242":1,"243":1,"267":1,"268":2,"380":1}}],["packages",{"2":{"430":1}}],["package",{"0":{"5":1},"2":{"104":1,"178":1,"180":2,"223":1,"344":1,"429":1,"430":7,"447":2,"455":1,"456":1,"538":1,"578":1}}],["paddingtop",{"2":{"505":1}}],["padding",{"2":{"186":1,"187":7,"345":1,"407":1}}],["parallax",{"2":{"518":1}}],["parameters",{"2":{"411":1}}],["params",{"2":{"122":2,"341":1,"407":4,"410":1,"411":1,"413":2,"546":1}}],["parts",{"2":{"505":1}}],["parent",{"2":{"327":1,"359":1}}],["parentbasic",{"0":{"307":1}}],["parse",{"2":{"113":1,"319":1,"338":1,"339":1}}],["pagepokemondetail",{"2":{"433":1,"476":1}}],["pagehome",{"2":{"433":1,"476":1}}],["pagespeed",{"2":{"492":2}}],["pages",{"0":{"560":1},"1":{"561":1,"562":1},"2":{"121":3,"394":1,"396":11,"425":3,"433":1,"435":2,"476":3,"491":1,"535":1,"561":6,"570":2}}],["page",{"2":{"105":2,"125":1,"264":2,"492":1,"505":1}}],["panel",{"0":{"31":1}}],["pr",{"2":{"500":1}}],["practices",{"0":{"374":1},"2":{"238":1,"290":1,"305":1,"326":1,"348":1,"368":1,"369":1,"379":1,"398":1,"443":1,"491":2,"502":1}}],["primevue",{"2":{"470":1}}],["privacy",{"0":{"279":1}}],["private",{"2":{"145":1,"396":5,"436":1,"478":1,"505":1,"515":1}}],["print",{"2":{"474":1}}],["printwidth",{"2":{"430":1}}],["printf",{"2":{"396":1}}],["printpage",{"2":{"167":3}}],["principle",{"0":{"196":1},"2":{"200":1}}],["price",{"2":{"18":1,"83":1,"492":1}}],["proof",{"2":{"432":1,"476":1}}],["procfile",{"2":{"430":2}}],["processes",{"2":{"435":1,"476":1}}],["processmessage",{"2":{"334":4}}],["process",{"2":{"327":1}}],["processqueue",{"2":{"173":1}}],["proceed",{"2":{"121":1}}],["proj",{"2":{"430":2}}],["projectname",{"2":{"535":1}}],["projects",{"2":{"213":2,"214":3,"215":4,"216":3,"217":4,"218":9,"407":1}}],["projectservice",{"2":{"174":1}}],["projectservice=new",{"2":{"174":1}}],["project",{"2":{"121":2,"396":5,"404":4,"407":1,"430":1,"535":5,"536":1,"540":2}}],["prod",{"2":{"396":5,"513":1,"530":1,"531":1}}],["production",{"2":{"429":1}}],["productid",{"2":{"93":1,"106":1,"112":6,"441":1}}],["product>",{"2":{"93":2}}],["productcategoryview",{"2":{"105":2,"106":2}}],["productcategory",{"2":{"92":2}}],["productcard",{"2":{"83":1,"117":1}}],["productview",{"0":{"84":1,"86":1},"1":{"85":1,"86":1},"2":{"105":2,"106":1}}],["products",{"0":{"46":1,"83":1},"2":{"41":2,"43":1,"47":1,"48":1,"51":2,"55":3,"56":3,"83":5,"93":3,"100":1,"104":1,"105":1,"112":2,"118":1,"122":3,"441":1}}],["product",{"0":{"47":1},"2":{"16":1,"17":1,"51":1,"55":1,"59":1,"83":4,"92":2,"93":4,"100":2,"106":3,"143":1,"441":2}}],["provision",{"2":{"360":5}}],["provider",{"2":{"416":1}}],["provide",{"0":{"360":1},"2":{"219":3,"220":4,"308":2,"359":1,"360":8,"368":1,"436":1,"438":3,"478":2}}],["proxies",{"0":{"320":1},"1":{"321":1,"322":1}}],["proxy",{"0":{"226":1,"227":1},"1":{"227":1},"2":{"125":1,"130":1,"132":1,"191":1,"206":1,"226":1,"227":3,"228":2,"320":1,"321":3,"331":1,"474":2,"482":1}}],["progressive",{"2":{"291":1,"301":1,"375":1,"492":1}}],["progress",{"0":{"258":1},"1":{"259":1},"2":{"258":1,"369":2}}],["prompt",{"0":{"298":1},"2":{"178":1,"297":1,"298":6}}],["promised",{"2":{"236":1}}],["promises",{"2":{"191":1,"207":1,"233":1}}],["promise",{"0":{"234":1},"2":{"93":1,"234":9,"334":3,"335":2,"336":2,"339":3,"341":2,"354":1,"357":1,"368":1,"450":2,"545":1}}],["profile",{"2":{"162":3,"360":1}}],["protocol",{"2":{"142":1,"151":2,"152":1}}],["problem",{"0":{"101":1},"2":{"101":1,"492":1}}],["prop",{"2":{"131":2,"307":1,"321":12,"359":1,"368":1,"407":2,"438":2}}],["property=",{"2":{"589":7}}],["properties",{"2":{"413":1}}],["proper",{"2":{"100":1}}],["props",{"0":{"131":1},"2":{"93":1,"126":1,"131":3,"160":1,"306":2,"321":6,"358":1,"359":2,"360":2,"362":1,"368":1,"404":2,"407":1,"408":2,"410":1,"427":11,"441":1,"445":2,"446":1,"452":3}}],["prerenderer",{"2":{"492":1}}],["prettier",{"2":{"430":14}}],["pretty",{"2":{"404":1}}],["pre>",{"2":{"313":2}}],["preventdefault",{"2":{"298":1}}],["preview",{"2":{"180":1,"430":1,"447":2}}],["press",{"2":{"273":2}}],["prestashop",{"2":{"41":1}}],["pre",{"2":{"233":14,"234":7}}],["preferredtagnamecase",{"2":{"430":1}}],["prefer",{"2":{"56":1,"300":1}}],["ядро",{"2":{"483":2}}],["ядра",{"2":{"132":1,"458":2}}],["ярлыков",{"2":{"268":1}}],["ярлыка",{"2":{"254":1,"296":1}}],["ярким",{"2":{"319":1,"414":1}}],["ярких",{"2":{"252":1}}],["яркий",{"2":{"197":1}}],["ящики",{"2":{"197":1}}],["ячеек",{"2":{"194":1}}],["языком",{"2":{"195":1,"327":1}}],["языков",{"0":{"488":1},"2":{"156":1,"181":1,"210":1,"212":1,"474":1,"483":1,"575":1}}],["языке",{"2":{"124":2,"160":1,"182":1,"191":1,"239":1,"246":1,"253":1,"378":1,"491":1}}],["языках",{"2":{"196":2,"437":1,"482":1,"483":1}}],["языками",{"2":{"159":1,"198":1}}],["языка",{"2":{"73":1,"125":1,"181":1,"195":1,"203":1,"239":1,"448":1,"474":1,"491":1,"575":1}}],["язык",{"0":{"374":1},"2":{"73":2,"138":1,"155":2,"174":1,"195":1,"237":1,"295":1,"392":1,"478":1,"491":2}}],["явная",{"2":{"199":1}}],["явным",{"2":{"122":1}}],["явные",{"2":{"56":1}}],["явное",{"2":{"370":1}}],["явного",{"2":{"217":1}}],["явном",{"2":{"159":1}}],["явно",{"2":{"114":1,"160":1,"168":1,"180":1,"278":1,"538":1}}],["явен",{"2":{"114":1}}],["являющееся",{"2":{"255":2}}],["являются",{"2":{"14":1,"124":1,"128":1,"131":1,"169":1,"174":1,"178":1,"181":1,"193":1,"198":1,"201":1,"209":1,"211":1,"227":1,"233":1,"242":1,"246":2,"248":1,"260":1,"272":1,"277":1,"291":1,"299":1,"306":1,"315":2,"319":2,"327":1,"356":1,"383":1,"399":2,"413":1,"414":1,"415":3,"419":1,"422":3,"438":1,"442":1,"448":1,"474":1,"533":1}}],["является",{"0":{"129":1},"2":{"41":1,"50":1,"124":1,"126":1,"129":1,"130":1,"132":1,"142":1,"145":1,"151":1,"152":2,"156":1,"157":1,"159":3,"160":4,"162":1,"176":1,"177":1,"179":1,"180":3,"183":2,"184":2,"188":1,"190":2,"191":1,"195":1,"196":1,"197":1,"199":1,"200":1,"207":1,"211":1,"215":1,"222":1,"223":1,"226":2,"227":2,"231":3,"232":2,"233":1,"234":1,"240":1,"246":1,"247":1,"254":1,"257":1,"260":2,"261":1,"264":1,"268":1,"271":1,"272":3,"276":1,"284":2,"287":1,"289":1,"293":1,"296":1,"298":1,"299":2,"301":1,"306":2,"312":2,"313":2,"314":1,"318":2,"319":4,"321":4,"327":3,"332":1,"334":1,"336":1,"338":1,"340":2,"341":1,"348":1,"351":1,"353":1,"354":1,"357":1,"358":1,"359":3,"360":3,"369":3,"399":1,"402":1,"404":1,"407":1,"409":1,"410":1,"414":2,"415":1,"416":3,"420":4,"422":3,"438":1,"442":1,"445":2,"446":1,"448":3,"450":1,"451":1,"457":2,"458":2,"459":1,"462":2,"463":2,"478":2,"482":2,"483":1,"492":1,"546":1}}],["являться",{"2":{"6":1,"341":1}}],["я",{"2":{"4":1,"62":2,"96":3,"126":1,"157":1,"160":2,"168":1,"178":4,"196":1,"198":1,"223":2,"226":1,"227":1,"233":1,"234":2,"274":1,"296":1,"308":1,"318":1,"321":1,"341":1,"352":1,"362":1,"368":1,"380":1,"407":1,"436":1,"478":2,"483":2,"491":2}}],["едят",{"2":{"578":1}}],["единицы",{"2":{"444":1}}],["единицей",{"2":{"351":1}}],["единиц",{"2":{"231":1}}],["единую",{"2":{"212":1,"224":1,"331":1}}],["единый",{"2":{"199":1,"313":1,"314":1,"490":1}}],["единая",{"2":{"191":1,"194":1,"222":1,"291":1}}],["единственному",{"2":{"448":1}}],["единственной",{"2":{"275":1}}],["единственное",{"2":{"62":1,"234":1,"448":1}}],["единственная",{"2":{"260":1,"538":1}}],["единственные",{"2":{"244":1,"318":1,"319":1}}],["единственным",{"2":{"215":1,"345":1}}],["единственный",{"2":{"160":2,"318":1,"407":1}}],["единой",{"0":{"196":1},"2":{"196":1,"312":1,"331":1,"333":1}}],["единое",{"2":{"158":1,"197":1,"444":1}}],["единовременно",{"2":{"152":1}}],["ежедневно",{"2":{"323":1}}],["ею",{"2":{"233":1,"306":2}}],["е",{"2":{"141":1,"273":1}}],["еvent",{"2":{"138":1}}],["ему",{"2":{"123":1,"223":1,"234":1,"242":1,"254":1,"336":1,"352":1,"353":1,"394":1,"407":1,"420":1,"478":1,"492":1}}],["ей",{"2":{"62":1,"202":1,"490":1}}],["ее",{"2":{"23":1,"74":1,"96":1,"148":1,"156":1,"157":1,"159":2,"160":2,"178":2,"181":2,"185":1,"187":1,"188":1,"194":1,"198":2,"200":1,"215":1,"217":1,"218":2,"223":1,"232":1,"239":1,"249":1,"253":2,"261":1,"283":1,"298":1,"306":1,"307":1,"309":1,"313":1,"315":1,"319":3,"327":2,"328":1,"335":1,"337":1,"339":2,"346":1,"353":1,"357":1,"359":1,"363":3,"364":2,"370":1,"399":1,"408":1,"418":1,"422":1,"436":1,"449":1,"452":1,"453":1,"455":1,"457":1,"465":1,"476":1,"483":1}}],["её",{"0":{"180":1},"2":{"23":1,"41":1,"56":1,"95":1,"96":2,"98":1,"106":1,"107":2,"117":1,"122":1,"123":2,"162":1,"426":1,"436":1,"474":1,"482":2,"483":2,"484":2,"521":1,"532":1}}],["еще",{"0":{"362":1},"2":{"10":1,"27":1,"41":1,"92":1,"96":2,"142":1,"151":1,"156":1,"158":1,"167":1,"168":1,"175":1,"178":1,"179":2,"180":1,"183":2,"184":1,"194":2,"200":1,"201":1,"220":1,"230":1,"237":1,"239":1,"242":1,"244":1,"257":1,"281":1,"297":1,"327":1,"330":2,"331":1,"335":1,"345":1,"346":1,"352":1,"356":1,"359":1,"360":1,"362":1,"368":1,"369":3,"370":1,"371":1,"399":2,"419":1,"421":3,"430":4,"444":1,"447":2,"448":2,"450":1,"454":1,"455":1,"456":1,"463":1,"465":1,"466":1,"474":1,"482":1,"491":1,"492":3,"575":1}}],["ещё",{"2":{"4":1,"399":1}}],["естественный",{"2":{"400":1}}],["естественным",{"2":{"244":1,"359":1}}],["естественные",{"0":{"244":1}}],["естественных",{"2":{"243":1,"448":1}}],["естественной",{"2":{"243":1}}],["естественном",{"2":{"239":1}}],["естественно",{"2":{"48":1,"121":1,"137":1,"196":1,"396":1,"478":1}}],["есть",{"0":{"503":1},"2":{"9":1,"10":1,"12":1,"13":1,"16":3,"17":2,"22":2,"43":1,"47":1,"48":1,"59":1,"67":1,"88":2,"89":2,"92":1,"95":1,"96":3,"98":1,"99":1,"106":1,"111":3,"114":1,"121":1,"123":3,"124":4,"126":1,"129":1,"130":1,"132":1,"142":2,"144":1,"150":1,"152":1,"155":1,"156":4,"159":2,"160":3,"168":1,"176":1,"179":2,"183":1,"187":4,"188":3,"195":2,"198":1,"200":1,"223":1,"224":1,"226":2,"228":3,"230":1,"233":1,"234":4,"248":1,"255":1,"257":1,"258":3,"261":1,"263":1,"272":1,"274":2,"277":1,"291":2,"297":1,"298":2,"299":3,"300":1,"306":3,"308":2,"310":1,"311":1,"313":3,"314":1,"316":1,"318":1,"319":1,"327":4,"329":1,"333":1,"351":1,"356":1,"357":1,"359":1,"361":1,"362":1,"364":1,"368":1,"369":1,"371":1,"372":1,"396":3,"399":1,"401":1,"404":1,"405":1,"407":2,"408":1,"410":3,"416":3,"420":1,"422":1,"428":1,"430":1,"436":2,"447":3,"448":1,"451":2,"453":1,"454":1,"455":1,"457":1,"463":1,"466":1,"470":2,"471":1,"477":1,"478":4,"482":3,"483":3,"484":1,"490":1,"491":6,"492":3,"508":2,"541":1,"578":2,"579":1}}],["если",{"2":{"3":1,"9":1,"12":2,"23":1,"26":1,"34":1,"36":1,"40":1,"41":1,"59":2,"73":1,"96":3,"100":1,"102":2,"114":2,"118":1,"122":1,"123":5,"124":2,"125":5,"128":1,"132":4,"139":1,"142":1,"143":4,"144":2,"145":1,"147":1,"149":2,"151":1,"152":4,"153":1,"155":1,"156":1,"158":1,"159":4,"160":2,"162":2,"164":2,"165":1,"168":1,"174":1,"176":2,"178":1,"179":8,"180":2,"181":3,"182":1,"183":2,"187":2,"188":1,"194":2,"196":1,"198":3,"199":2,"201":2,"208":1,"211":2,"212":1,"215":1,"217":2,"218":2,"219":1,"223":2,"224":1,"225":1,"226":1,"227":1,"228":1,"232":1,"237":1,"240":1,"242":3,"244":2,"246":1,"247":1,"248":1,"249":1,"255":1,"258":1,"260":1,"263":1,"268":1,"274":1,"276":2,"281":1,"285":1,"286":1,"291":3,"293":1,"298":2,"299":3,"300":1,"301":1,"302":1,"305":1,"308":2,"311":5,"313":3,"314":1,"315":1,"317":1,"318":1,"319":2,"321":2,"322":2,"327":8,"328":2,"330":1,"332":1,"336":1,"338":1,"339":1,"340":1,"351":1,"352":1,"356":2,"357":2,"359":1,"360":1,"362":6,"363":1,"368":1,"377":1,"396":1,"397":1,"399":1,"401":1,"404":1,"407":3,"409":1,"410":1,"413":2,"415":1,"416":1,"421":3,"422":1,"425":1,"426":2,"428":1,"429":3,"430":1,"436":1,"438":1,"447":1,"448":3,"450":2,"451":1,"454":1,"455":2,"457":1,"459":1,"460":1,"461":3,"462":4,"466":1,"474":1,"478":5,"483":2,"484":2,"485":1,"487":1,"490":1,"491":4,"492":2,"538":1,"561":1,"562":2,"578":1,"582":1}}],["его",{"0":{"209":1},"2":{"3":1,"4":1,"16":1,"22":2,"23":1,"25":1,"41":1,"48":1,"59":1,"64":1,"65":1,"73":1,"74":1,"85":1,"88":1,"98":2,"113":1,"114":2,"117":1,"121":1,"123":10,"124":2,"125":1,"128":3,"130":2,"132":1,"142":1,"143":1,"145":1,"148":1,"149":1,"152":2,"156":2,"157":2,"159":1,"160":5,"163":2,"167":1,"168":1,"169":1,"177":1,"178":2,"179":2,"180":6,"182":1,"183":1,"185":2,"186":2,"187":3,"188":3,"189":1,"196":1,"198":1,"199":4,"201":1,"212":1,"216":1,"219":1,"220":2,"223":2,"224":1,"226":4,"227":1,"228":4,"229":1,"231":3,"233":2,"234":1,"237":1,"239":3,"242":2,"247":1,"252":2,"255":1,"256":1,"258":4,"260":1,"261":1,"263":1,"265":1,"267":1,"268":1,"271":1,"273":1,"275":2,"276":1,"277":1,"281":1,"284":1,"286":2,"289":1,"291":2,"295":1,"297":1,"298":2,"299":6,"300":1,"302":1,"303":1,"306":2,"308":1,"309":1,"312":2,"314":4,"315":3,"316":1,"318":2,"319":2,"320":3,"321":5,"322":2,"324":1,"328":1,"330":1,"331":2,"332":1,"334":1,"335":2,"336":1,"337":2,"338":1,"339":1,"341":2,"345":1,"346":1,"356":2,"357":2,"358":1,"359":1,"360":1,"368":4,"369":2,"371":1,"372":1,"391":1,"396":1,"400":1,"401":1,"402":1,"404":1,"406":1,"407":3,"408":1,"410":1,"414":1,"415":2,"416":4,"417":1,"420":2,"421":1,"422":6,"429":1,"430":2,"436":1,"438":1,"442":1,"444":1,"445":2,"446":1,"447":1,"451":1,"453":2,"456":1,"457":1,"458":2,"462":3,"465":3,"466":1,"467":1,"478":1,"482":1,"483":3,"489":1,"490":1,"491":1,"492":7,"501":2,"522":1,"525":1,"542":2,"578":1,"587":1}}],["ie6",{"2":{"490":1}}],["iex",{"2":{"430":1}}],["ie11",{"2":{"428":1}}],["ie",{"2":{"428":1}}],["igzir14e",{"2":{"416":1}}],["ignoredlocales",{"2":{"430":1}}],["ignoretrimwhitespace",{"2":{"430":1}}],["ignorerecommendations",{"2":{"430":1}}],["ignore",{"2":{"121":1,"430":2,"535":1}}],["iat",{"2":{"416":2}}],["i++",{"2":{"223":1,"233":2,"234":1}}],["i>",{"2":{"183":1,"187":3}}],["ico",{"2":{"180":1,"300":1}}],["iconify",{"2":{"428":1,"430":2}}],["icons",{"0":{"428":1},"2":{"294":1,"300":1,"427":2,"428":1,"587":1}}],["iconwithbadge",{"2":{"114":3}}],["iconbadge",{"2":{"114":3}}],["iconbuddy",{"2":{"107":1}}],["iconbutton",{"0":{"88":1}}],["icones",{"2":{"107":1}}],["icon",{"2":{"19":1,"114":2,"182":1,"300":3,"427":1}}],["icann",{"2":{"142":2}}],["ipc",{"2":{"234":1,"328":1}}],["ipv6",{"2":{"142":4}}],["ipv4",{"2":{"142":3}}],["ip",{"2":{"123":1,"142":7}}],["iphone",{"2":{"123":1,"252":1}}],["ipo",{"2":{"63":1}}],["iife",{"2":{"122":1}}],["i",{"2":{"121":1,"165":4,"183":2,"187":3,"223":6,"233":4,"234":2,"430":1,"536":1,"537":1}}],["if=",{"2":{"368":1,"427":1}}],["ifmodule>",{"2":{"147":2}}],["ifmodule",{"2":{"147":2}}],["if",{"0":{"164":2},"2":{"112":1,"164":1,"168":1,"187":1,"212":1,"218":1,"223":3,"233":2,"234":2,"298":1,"299":1,"315":1,"316":1,"319":1,"321":3,"334":1,"335":1,"338":1,"341":2,"357":1,"364":1,"396":3,"418":1,"420":2,"448":1}}],["isdraweropen",{"2":{"547":3}}],["isdarktheme",{"2":{"95":2}}],["isdarkmode",{"2":{"95":1}}],["isn",{"2":{"478":2}}],["isauthenticated",{"2":{"478":1}}],["ist",{"2":{"430":1}}],["issues",{"2":{"506":2,"530":1,"531":1}}],["issuelist",{"2":{"435":1,"476":1}}],["issuenumberlabel",{"2":{"430":1}}],["issued",{"2":{"416":1}}],["is=",{"2":{"168":1}}],["is",{"0":{"364":1},"2":{"121":1,"159":1,"168":1,"357":1,"364":2,"430":1,"474":2,"478":2,"505":1}}],["isinfavourites",{"2":{"112":3}}],["imageresources",{"2":{"428":3}}],["imageraw",{"2":{"426":1}}],["imagenameinvariable",{"2":{"426":1}}],["imageurl",{"2":{"426":1}}],["image",{"2":{"300":3,"426":4,"589":4}}],["images",{"2":{"18":1,"300":4,"396":1,"426":3,"428":2,"432":1,"433":1,"434":1,"435":1,"476":4,"547":1,"588":1,"589":1}}],["imgurl",{"2":{"426":2}}],["img",{"2":{"162":1,"426":6,"427":1}}],["importscript",{"2":{"329":2,"330":1}}],["important",{"2":{"230":1}}],["import",{"2":{"95":1,"112":2,"122":7,"128":3,"130":1,"160":2,"168":3,"186":1,"198":1,"212":1,"217":1,"218":3,"220":3,"230":1,"261":1,"300":2,"307":2,"311":2,"313":1,"316":2,"317":2,"318":1,"322":1,"329":1,"330":1,"338":2,"343":2,"356":2,"357":7,"364":2,"368":5,"404":2,"405":4,"407":1,"408":3,"410":3,"415":1,"426":3,"427":3,"428":6,"429":3,"430":2,"439":1,"441":1,"448":1,"452":2,"453":2,"454":3,"511":3,"520":1,"524":4,"528":3,"543":1,"545":1,"546":6,"547":3,"577":1}}],["ios",{"2":{"291":1}}],["io",{"2":{"80":1,"121":1,"184":1,"416":1,"561":1}}],["i18next",{"0":{"575":1,"578":1},"2":{"474":1,"575":1,"578":3,"579":1}}],["i18n",{"0":{"574":1},"1":{"575":1,"576":1,"577":1,"578":1,"579":1},"2":{"69":1,"105":1,"121":1,"430":3,"437":1,"474":3,"538":1,"540":1,"542":1,"572":2,"575":2,"577":1,"578":1}}],["inplace",{"2":{"430":1}}],["inputevents",{"2":{"453":4}}],["inputevents=wrapper",{"2":{"453":1}}],["inputs",{"2":{"396":5}}],["input",{"2":{"107":1,"166":2,"171":1,"187":6,"251":2,"338":1,"343":3,"357":1,"420":2,"430":1,"452":2,"453":6,"482":1}}],["invisiblecharacters",{"2":{"430":1}}],["invalid",{"2":{"418":1}}],["invoker",{"2":{"224":1,"225":2}}],["inrange",{"2":{"315":1,"316":2}}],["inc",{"2":{"587":1}}],["includesource",{"2":{"454":1}}],["includeassets",{"2":{"300":1}}],["increment=",{"2":{"307":3}}],["increment",{"2":{"307":1,"308":4,"315":1,"316":2,"318":3}}],["incrementcounter",{"2":{"307":7,"308":2}}],["infinitum",{"2":{"261":1}}],["infinitescroller",{"0":{"261":1}}],["infinite",{"2":{"259":1,"260":1}}],["information",{"2":{"505":2}}],["info",{"2":{"125":3}}],["inlinesuggest",{"2":{"430":1}}],["inline",{"2":{"259":1}}],["injectregister",{"2":{"300":1}}],["inject",{"0":{"360":1},"2":{"219":2,"220":2,"308":2,"359":1,"360":7,"368":4,"436":1,"438":3,"478":2}}],["injections",{"2":{"549":1}}],["injection",{"0":{"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1},"1":{"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1},"2":{"191":1,"204":1,"220":2,"549":2}}],["inheritance",{"0":{"195":1},"2":{"191":1}}],["instanceof",{"2":{"321":1}}],["instance",{"2":{"212":5}}],["installpwa",{"2":{"298":3}}],["installed",{"2":{"298":5}}],["install",{"0":{"298":1},"2":{"179":1,"297":1,"298":10,"299":1,"300":1,"309":1,"314":1,"337":1,"340":1,"344":1,"365":1,"368":2,"396":10,"401":1,"414":1,"446":1,"447":1,"451":2,"456":1,"460":2,"461":2,"510":1,"523":1,"527":1}}],["insertfinalnewline",{"2":{"430":1}}],["insert",{"2":{"55":1}}],["in",{"0":{"454":1},"2":{"121":1,"165":1,"167":1,"168":2,"187":2,"261":1,"315":1,"316":1,"318":3,"338":1,"364":1,"369":2,"407":1,"410":1,"428":2,"430":1,"447":1,"465":2,"478":1,"505":1,"518":1,"535":1}}],["ind",{"2":{"430":1}}],["indent",{"2":{"430":1}}],["indexedb",{"2":{"298":1}}],["indexeddb",{"0":{"319":1,"337":1},"1":{"338":1,"339":1,"340":1,"341":1,"342":1,"343":1},"2":{"213":2,"231":2,"319":5,"325":2,"327":1,"331":1,"337":2,"346":1}}],["indexof",{"2":{"223":1}}],["index",{"0":{"92":1,"144":1,"335":1,"340":1,"342":1,"345":1,"404":1,"549":1},"2":{"92":1,"127":1,"133":1,"143":1,"144":1,"145":1,"147":2,"149":4,"158":1,"180":3,"181":2,"182":1,"183":1,"293":1,"297":1,"334":2,"344":1,"368":5,"396":2,"403":1,"432":2,"433":2,"435":2,"465":5,"476":6,"492":2,"513":1,"530":1,"531":1,"546":1,"549":1,"563":1,"589":1,"590":1}}],["individual",{"2":{"360":1}}],["indicating",{"2":{"100":1}}],["intl",{"2":{"470":1,"474":1}}],["integrated",{"2":{"430":5}}],["integration",{"2":{"394":1,"467":1}}],["intel",{"2":{"377":1}}],["intellisense",{"2":{"178":1}}],["inteface",{"2":{"239":1}}],["interval",{"2":{"420":2,"430":1}}],["intersectionobserver",{"2":{"261":3}}],["intersection",{"2":{"260":1,"474":1}}],["interaction",{"2":{"248":1,"418":1}}],["interacting",{"2":{"55":1}}],["internet",{"2":{"142":2,"293":1}}],["interceptors",{"2":{"122":1,"545":1,"546":1}}],["interfaces",{"2":{"413":1,"498":1}}],["interface",{"2":{"92":1,"248":1,"501":1}}],["into",{"2":{"100":1,"122":1}}],["initi18n",{"2":{"577":2}}],["initialset",{"2":{"113":2}}],["init",{"2":{"95":3,"122":1,"344":1,"396":2,"462":1,"546":1}}],["idx",{"2":{"430":1}}],["idb",{"2":{"337":1}}],["id=g",{"2":{"563":1}}],["id=setinterval",{"2":{"420":1}}],["id=await",{"2":{"339":1}}],["id=",{"2":{"157":3,"520":1}}],["id=eq",{"2":{"51":2,"83":2,"93":1}}],["ids",{"2":{"100":2}}],["idea",{"2":{"463":1}}],["ideas",{"2":{"436":1,"476":1}}],["identity",{"2":{"418":1,"419":2}}],["ide",{"0":{"430":1},"2":{"98":1,"177":1,"178":6,"180":2,"189":1,"198":1,"318":1,"430":1,"466":1,"483":1,"501":1}}],["id",{"2":{"3":2,"18":1,"19":1,"51":4,"55":1,"56":3,"83":3,"92":2,"93":2,"106":1,"157":1,"165":1,"170":1,"187":4,"334":9,"335":5,"338":5,"339":6,"396":2,"404":2,"407":5,"416":1,"417":1,"420":1,"440":3,"441":1,"563":1}}],["items",{"2":{"369":1}}],["item",{"2":{"187":5,"319":7,"369":1}}],["it",{"0":{"198":1,"200":1},"2":{"2":1,"73":1,"100":1,"121":2,"191":2,"198":1,"223":1,"478":2,"535":2,"540":1,"587":1}}],["льшая",{"2":{"482":1}}],["лэндинг",{"2":{"402":2,"407":1}}],["лэйаута",{"2":{"542":1,"582":1}}],["лэйаутами",{"2":{"438":1}}],["лэйауте",{"2":{"438":1}}],["лэйаутов",{"2":{"438":1}}],["лэйаут",{"2":{"26":1,"28":1,"186":1,"438":1,"490":1}}],["лёгкое",{"2":{"96":1,"538":1}}],["лайфхак",{"2":{"478":1}}],["лаконичен",{"2":{"357":1,"448":1}}],["лаконичный",{"2":{"96":1}}],["ландшафтная",{"2":{"295":1}}],["ландшафте",{"2":{"155":1}}],["лазить",{"2":{"123":1}}],["лат",{"2":{"96":1}}],["лепту",{"0":{"500":1}}],["лепить",{"2":{"96":1}}],["лечь",{"2":{"492":1}}],["лень",{"2":{"492":1}}],["ленивую",{"2":{"357":1}}],["ленивой",{"2":{"300":1}}],["ленточная",{"2":{"244":1}}],["левой",{"2":{"242":1,"272":1}}],["левом",{"2":{"240":1,"246":1,"272":1,"517":1}}],["лету",{"2":{"239":1,"399":1}}],["лет",{"2":{"183":1,"257":1,"474":1}}],["легче",{"2":{"132":1,"301":1,"435":1,"476":1,"491":1}}],["легким",{"2":{"445":1}}],["легкий",{"2":{"85":1,"491":1}}],["легкая",{"2":{"156":1,"337":1}}],["легкого",{"2":{"284":1}}],["легкой",{"2":{"160":1,"482":1}}],["легко",{"2":{"35":1,"63":1,"122":1,"156":1,"181":1,"183":1,"199":1,"200":1,"233":1,"234":1,"248":2,"252":1,"260":1,"263":1,"278":1,"340":1,"341":1,"407":1,"416":1,"438":1,"447":1,"448":2,"451":1,"453":1,"481":1,"491":1,"538":1,"545":1}}],["лежат",{"2":{"448":1}}],["лежать",{"2":{"118":1}}],["лежащую",{"2":{"399":1}}],["лежащего",{"2":{"394":1}}],["лежит",{"2":{"96":1,"124":1,"240":1,"244":1}}],["лучшем",{"2":{"327":1,"445":1}}],["лучшее",{"2":{"239":1,"291":1,"430":1}}],["лучшего",{"2":{"157":1,"305":1}}],["лучшей",{"2":{"59":1,"196":1,"198":1,"401":1,"541":1}}],["лучше",{"2":{"23":1,"35":1,"59":1,"88":1,"122":1,"132":1,"133":1,"160":1,"168":1,"179":1,"188":1,"189":1,"194":1,"196":1,"198":2,"200":1,"217":1,"218":1,"235":1,"271":1,"299":1,"304":1,"311":1,"351":1,"357":1,"377":1,"399":1,"406":1,"414":1,"416":1,"424":1,"428":1,"430":1,"436":1,"438":1,"446":1,"476":1,"482":1,"487":1,"491":2,"492":1,"578":1}}],["лучшими",{"2":{"491":1}}],["лучшим",{"2":{"414":1,"438":1}}],["лучших",{"2":{"68":1,"177":1,"183":1,"196":1,"201":1,"218":1,"438":1,"491":1,"501":1,"541":2,"542":1}}],["лучший",{"0":{"158":1},"2":{"17":1,"308":1}}],["лучшие",{"0":{"373":1,"438":1},"1":{"374":1,"375":1,"376":1,"377":1,"378":1,"379":1,"380":1,"439":1,"440":1,"441":1},"2":{"9":1,"67":1,"123":1,"155":1,"188":1,"202":1,"453":1,"491":1,"542":1}}],["линтинга",{"2":{"538":1}}],["линтингом",{"2":{"479":1}}],["линтер",{"2":{"174":1,"430":1}}],["линус",{"2":{"458":1}}],["линусом",{"2":{"458":1}}],["линии",{"2":{"266":2}}],["литерал",{"2":{"211":1,"219":1}}],["литературах",{"2":{"207":1}}],["листов",{"2":{"183":1}}],["лицензией",{"2":{"533":1}}],["лицензии",{"2":{"182":1}}],["лица",{"2":{"421":1}}],["лицом",{"2":{"142":1}}],["лишен",{"2":{"421":1}}],["лишающие",{"2":{"287":1}}],["лишь",{"2":{"123":1,"155":1,"158":1,"183":1,"248":1,"272":1,"291":1,"327":1,"360":1,"368":1,"444":1,"452":1}}],["лишние",{"2":{"123":1,"465":1}}],["лимиты",{"2":{"40":1}}],["личное",{"2":{"407":1}}],["личность",{"2":{"278":1,"422":1}}],["личного",{"2":{"36":1,"436":1,"477":1}}],["личным",{"2":{"59":1}}],["личный",{"2":{"29":1,"33":1,"70":1,"123":1}}],["ли",{"2":{"10":1,"26":1,"123":3,"124":1,"142":1,"143":1,"145":1,"154":1,"190":3,"212":1,"232":1,"236":3,"254":1,"288":1,"297":1,"299":1,"308":1,"311":1,"321":2,"351":2,"362":1,"372":1,"438":1,"442":1,"455":1,"469":3,"478":1,"479":1,"491":4,"492":1}}],["либо",{"2":{"3":1,"31":1,"40":1,"47":3,"53":1,"56":1,"59":1,"98":1,"124":1,"178":1,"180":4,"184":1,"224":1,"233":1,"242":2,"253":2,"254":1,"256":2,"258":2,"272":2,"280":2,"282":2,"286":1,"298":4,"313":1,"327":1,"331":2,"334":2,"341":2,"357":1,"364":4,"369":1,"411":2,"421":1,"422":2,"426":3,"429":1,"447":2,"455":1,"484":1,"490":2,"491":1,"492":1,"531":2,"538":1,"541":1,"576":1}}],["ложное",{"2":{"448":1}}],["ложится",{"2":{"39":1}}],["ломают",{"2":{"445":1}}],["ловушки",{"2":{"321":1}}],["ловушку",{"2":{"278":1}}],["лотком",{"2":{"256":1}}],["локали",{"2":{"474":1}}],["локализации",{"2":{"474":3,"575":3}}],["локалей",{"2":{"474":1,"538":1,"575":1,"577":1}}],["локальную",{"2":{"458":1}}],["локальных",{"2":{"430":1,"478":1}}],["локальные",{"0":{"319":1,"356":1},"2":{"458":2}}],["локальными",{"2":{"291":2}}],["локальным",{"2":{"180":1,"291":1,"331":1,"466":1,"483":1}}],["локальный",{"2":{"179":1,"462":2,"466":3,"478":1}}],["локальное",{"2":{"362":1,"399":1}}],["локального",{"2":{"149":1,"152":1,"319":1,"356":1,"399":1}}],["локальной",{"2":{"143":1,"231":1,"252":1,"256":1,"291":3,"319":1,"336":1,"346":1,"466":1}}],["локальному",{"2":{"322":1,"337":1}}],["локальном",{"2":{"143":1,"148":1,"151":1}}],["локально",{"2":{"120":1,"155":1,"180":2,"319":1,"356":1,"466":2,"492":1,"508":1}}],["локация",{"2":{"4":1}}],["логарифмической",{"2":{"247":1}}],["лого",{"2":{"107":1}}],["логотипа",{"2":{"104":1,"272":1}}],["логотип",{"2":{"29":1,"272":2}}],["логирования",{"2":{"228":1}}],["логично",{"2":{"478":1}}],["логичный",{"2":{"400":1,"474":1}}],["логичней",{"2":{"114":1}}],["логическому",{"2":{"492":1}}],["логическом",{"2":{"331":1}}],["логической",{"2":{"198":1}}],["логические",{"2":{"436":1,"445":1,"477":1}}],["логически",{"2":{"422":1,"486":1}}],["логический",{"2":{"201":1}}],["логических",{"2":{"73":1}}],["логикe",{"2":{"363":1}}],["логикой",{"2":{"168":1,"196":1,"198":1,"224":1,"225":1,"369":2,"420":1,"435":1,"476":1,"483":1}}],["логике",{"2":{"98":1,"187":1,"199":1,"234":1,"298":1}}],["логику",{"2":{"40":1,"93":1,"124":2,"160":1,"187":2,"199":2,"201":1,"225":1,"226":1,"227":1,"228":1,"233":1,"299":1,"314":1,"357":1,"368":1,"369":2,"448":2,"453":1,"478":2,"482":3,"490":2,"508":1}}],["логика",{"2":{"34":1,"96":1,"124":1,"188":1,"362":1,"422":1,"478":4,"482":1}}],["логики",{"2":{"6":1,"83":1,"96":1,"199":1,"363":4,"368":1,"369":3,"415":3,"445":1,"448":1,"478":3,"545":1}}],["логине",{"2":{"123":1}}],["логинится",{"2":{"123":1}}],["логина",{"2":{"107":1,"123":1,"479":1,"573":1}}],["логин",{"2":{"33":1,"123":4}}],["люксовый",{"2":{"492":1}}],["людям",{"2":{"481":1}}],["людей",{"2":{"286":1}}],["люди",{"2":{"2":1,"242":1,"466":1}}],["любезно",{"2":{"447":1}}],["любимую",{"2":{"122":1}}],["любая",{"2":{"111":1,"295":1,"453":1,"478":1,"490":1}}],["любую",{"2":{"95":1,"181":1,"194":1,"313":1,"357":1,"416":1,"441":1}}],["любые",{"2":{"331":1,"339":1,"417":1,"418":1}}],["любым",{"2":{"142":1,"260":1,"313":1,"319":2,"321":1,"327":1,"330":1,"396":1}}],["любыми",{"2":{"63":1}}],["любых",{"2":{"2":1,"218":1,"274":1}}],["любого",{"2":{"23":1,"125":1,"141":1,"227":1,"333":1,"345":2,"354":1,"358":1,"368":2,"401":1,"409":1,"421":1,"422":1,"462":1,"500":1,"515":1}}],["любом",{"2":{"12":1,"123":1,"181":1,"183":1,"228":2,"234":1,"246":1,"254":1,"289":1,"293":1,"308":1,"407":1,"478":1,"487":1,"492":1,"524":1}}],["любому",{"2":{"2":1,"130":1,"142":1,"257":1,"308":1,"319":1}}],["любой",{"2":{"2":1,"96":1,"125":1,"131":1,"145":1,"156":1,"158":1,"185":1,"216":1,"258":2,"309":1,"312":1,"328":1,"332":1,"360":2,"365":1,"399":1,"409":1,"414":1,"422":1,"426":1,"437":1,"466":1,"478":1,"481":1,"490":1,"515":1,"517":1}}],["любое",{"2":{"2":1,"123":1,"179":1,"272":1,"312":1,"318":1,"449":1}}],["vwa",{"2":{"582":1,"591":11}}],["vp",{"2":{"525":9}}],["vps",{"2":{"145":4,"148":2,"151":1,"154":1}}],["vetur",{"2":{"430":2}}],["verdana",{"2":{"506":1}}],["vercel",{"2":{"425":1,"430":2,"573":1}}],["vertical",{"2":{"259":1,"505":1}}],["versionrc",{"2":{"430":2}}],["versions",{"2":{"430":3}}],["version",{"2":{"121":1,"339":1,"377":1,"396":5,"430":3,"462":1,"588":1}}],["vbproj",{"2":{"430":1}}],["vb",{"2":{"430":6}}],["v4значительно",{"2":{"396":1}}],["v4",{"2":{"396":4}}],["v2",{"2":{"396":3}}],["vlc",{"2":{"285":1}}],["volar",{"2":{"178":1,"430":4}}],["validators",{"2":{"432":1,"433":1,"434":1,"476":3}}],["validate",{"2":{"430":1}}],["validateotp",{"2":{"420":1}}],["values",{"2":{"448":1}}],["value>0",{"2":{"420":1}}],["value>=0",{"2":{"316":2}}],["value=true",{"2":{"420":1}}],["value=result",{"2":{"420":1}}],["value=reply",{"2":{"343":1}}],["value=window",{"2":{"363":1}}],["value=data",{"2":{"338":1}}],["value=note",{"2":{"338":1}}],["value=",{"2":{"338":2,"343":3}}],["value=value",{"2":{"311":1}}],["value++",{"2":{"307":1,"316":1}}],["valueof",{"2":{"187":1}}],["value",{"2":{"93":1,"100":2,"112":5,"122":2,"130":3,"160":2,"187":9,"227":4,"233":8,"234":6,"261":5,"298":6,"311":1,"316":2,"321":8,"338":5,"343":2,"357":1,"358":2,"360":1,"411":2,"415":2,"416":1,"420":3,"430":1,"441":1,"448":2,"453":1,"474":1,"478":1,"482":2,"545":1,"577":1}}],["vars",{"2":{"591":1}}],["var",{"2":{"396":4,"525":9}}],["varb",{"2":{"359":1}}],["vara",{"2":{"359":1}}],["variable",{"2":{"160":1,"359":1}}],["variablename",{"2":{"160":1}}],["v3",{"2":{"132":1,"136":1,"396":4}}],["v",{"0":{"131":1,"162":1,"163":1,"164":3,"165":1,"166":1,"167":1,"358":1},"2":{"126":1,"131":5,"161":1,"162":1,"163":2,"164":4,"165":1,"166":1,"167":2,"168":3,"187":11,"252":1,"261":2,"298":2,"338":3,"343":3,"359":9,"362":8,"364":3,"368":1,"407":1,"410":1,"427":3,"481":1}}],["v0",{"2":{"90":1,"104":1,"109":1,"115":1}}],["vscode",{"2":{"180":1,"396":1,"430":9,"463":2}}],["vs",{"2":{"89":1,"98":1,"430":7,"436":1,"482":1,"578":1}}],["v16",{"2":{"377":1}}],["v1",{"2":{"51":3,"56":3}}],["visible",{"2":{"430":1}}],["visualize",{"2":{"511":1,"528":1}}],["visualizer",{"2":{"429":4}}],["visuals",{"2":{"430":1}}],["visual",{"2":{"178":1,"180":1,"377":1,"459":1,"466":1}}],["vivaldi",{"2":{"178":1}}],["virtual",{"2":{"145":1,"474":1}}],["video",{"2":{"64":1,"90":1,"115":1}}],["vitepress",{"0":{"512":1,"522":1},"1":{"523":1,"524":1,"525":1},"2":{"396":1,"489":1,"491":1,"515":2,"522":1,"524":1,"525":2,"541":1}}],["vitepwa",{"2":{"300":3}}],["vitest",{"0":{"447":1,"456":1},"1":{"448":1},"2":{"377":1,"430":10,"442":1,"445":1,"446":1,"447":12,"448":6,"450":1,"451":3,"452":1,"453":3,"454":6,"455":5,"456":4,"479":1}}],["vitejs",{"2":{"184":3,"300":1}}],["vite",{"0":{"184":1,"300":1,"562":1},"2":{"23":1,"121":1,"122":1,"125":1,"126":1,"133":1,"144":1,"158":1,"159":1,"160":1,"177":2,"178":1,"179":8,"180":6,"183":1,"184":10,"187":2,"190":1,"289":1,"299":2,"300":9,"302":1,"327":1,"329":1,"330":2,"334":1,"357":1,"376":1,"377":1,"426":1,"427":1,"429":13,"430":3,"447":5,"451":2,"454":1,"455":1,"456":1,"492":3,"502":1,"530":1,"538":1,"546":1,"549":2,"562":1}}],["view>",{"2":{"407":2}}],["viewport",{"2":{"368":1}}],["viewitem",{"2":{"168":3}}],["view",{"2":{"11":1,"105":4,"407":1,"408":2,"410":1,"438":4,"478":2,"482":1}}],["views",{"0":{"105":1,"410":1},"2":{"3":1,"105":1,"401":1,"404":2,"408":3,"432":1,"434":3,"436":1,"476":4,"477":1}}],["vuefaq",{"2":{"503":1}}],["vuetify",{"2":{"490":1}}],["vuejs",{"2":{"132":3,"136":1,"167":1,"168":2,"183":1,"318":1,"362":1,"364":1,"413":1,"478":1,"502":4,"530":1}}],["vuex",{"2":{"126":1,"134":1,"318":4,"478":6}}],["vuesence",{"2":{"80":2,"120":1,"121":2,"505":1,"511":1,"520":1,"524":1,"528":1,"531":1,"537":1}}],["vuestorefront",{"2":{"62":1}}],["vueuse",{"0":{"94":1,"96":1},"1":{"95":1,"96":1},"2":{"23":1,"96":8,"113":1,"363":1}}],["vue",{"0":{"121":1,"126":1,"155":1,"157":1,"161":1,"186":1,"187":1,"229":1,"230":1,"259":1,"261":1,"307":1,"308":1,"311":1,"318":1,"322":1,"338":1,"343":1,"373":1,"374":1,"382":1,"393":2,"400":1,"407":1,"410":1,"439":1,"451":1,"475":1,"476":1,"477":1,"478":1,"491":1,"494":1,"511":1,"526":1,"528":1,"535":1,"539":1},"1":{"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"156":1,"157":1,"158":2,"159":1,"160":1,"161":1,"162":2,"163":2,"164":2,"165":2,"166":2,"167":2,"168":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"374":1,"375":1,"376":1,"377":1,"378":1,"379":1,"380":1,"401":1,"402":1,"403":1,"404":1,"405":1,"406":1,"407":1,"408":1,"409":1,"410":1,"411":1,"412":1,"413":1,"452":1,"453":1,"476":1,"477":1,"527":1,"528":1,"536":1,"540":1,"541":1},"2":{"3":2,"10":2,"11":1,"23":2,"41":1,"50":1,"67":2,"85":1,"96":4,"111":1,"112":3,"121":2,"126":6,"127":11,"128":13,"129":2,"130":2,"131":4,"132":9,"133":3,"134":1,"135":4,"137":7,"141":1,"143":2,"144":2,"145":5,"147":1,"150":1,"153":3,"154":1,"155":4,"156":9,"157":11,"158":7,"159":8,"160":16,"161":3,"163":1,"165":1,"166":1,"167":3,"168":6,"169":1,"175":1,"176":2,"177":2,"178":3,"179":4,"180":9,"181":2,"183":3,"184":5,"185":1,"186":5,"187":4,"190":3,"191":1,"195":1,"196":1,"197":1,"198":4,"202":2,"203":1,"220":2,"225":1,"226":3,"227":1,"228":1,"229":1,"230":3,"231":1,"235":1,"238":2,"244":1,"258":1,"259":1,"261":6,"265":1,"273":3,"288":1,"290":1,"291":1,"298":3,"300":3,"304":1,"305":1,"306":2,"307":3,"308":1,"311":3,"312":2,"313":6,"314":2,"316":2,"317":2,"318":5,"321":3,"322":1,"323":1,"326":1,"327":1,"329":1,"331":1,"333":2,"336":1,"338":4,"343":2,"344":1,"347":1,"348":2,"350":1,"351":2,"352":6,"353":2,"354":1,"355":1,"356":7,"357":11,"359":6,"360":6,"362":9,"363":4,"364":5,"365":2,"368":16,"369":4,"375":3,"376":3,"377":4,"379":1,"382":1,"383":1,"386":1,"388":1,"390":2,"391":1,"393":1,"396":1,"397":4,"398":1,"399":1,"400":4,"401":2,"402":1,"404":4,"405":2,"406":1,"407":12,"408":3,"409":1,"410":7,"415":2,"416":2,"418":1,"419":1,"422":1,"423":1,"426":1,"427":2,"429":4,"430":15,"431":1,"432":10,"433":14,"434":11,"435":12,"436":2,"437":1,"438":2,"439":1,"440":1,"441":2,"442":2,"443":1,"444":2,"445":3,"446":7,"447":2,"450":2,"451":6,"452":4,"453":2,"469":1,"472":1,"473":1,"474":7,"476":47,"477":2,"478":12,"479":1,"481":3,"482":16,"490":3,"491":22,"492":1,"494":1,"500":1,"502":2,"503":1,"506":1,"511":2,"513":2,"515":2,"524":1,"528":1,"530":2,"531":2,"533":2,"535":7,"536":1,"537":2,"538":3,"540":3,"541":4,"542":2,"543":2,"547":2,"561":2,"562":1,"577":1,"578":2,"581":1,"590":1}}],["эстетики",{"2":{"501":1}}],["эскиза",{"2":{"371":1}}],["эван",{"2":{"482":1}}],["эволюция",{"2":{"490":1}}],["эволюцией",{"2":{"422":1}}],["эволюции",{"2":{"289":1,"434":1,"476":1}}],["эра",{"2":{"399":1}}],["эфемерны",{"2":{"256":1,"370":1}}],["эффектом",{"2":{"404":1}}],["эффектов",{"2":{"107":1,"199":1,"363":1}}],["эффектам",{"2":{"306":1}}],["эффективен",{"2":{"240":1,"311":1,"453":1}}],["эффективная",{"2":{"399":1,"458":1}}],["эффективна",{"2":{"334":1}}],["эффективны",{"2":{"239":1,"408":1}}],["эффективные",{"2":{"210":1,"308":1}}],["эффективным",{"2":{"200":1}}],["эффективный",{"2":{"96":1,"261":1,"327":1}}],["эффективней",{"2":{"85":1,"96":1,"474":1,"482":2,"492":1}}],["эффективной",{"2":{"327":1}}],["эффективное",{"2":{"318":1,"371":1,"399":1,"538":1}}],["эффективности",{"2":{"302":1,"325":1,"474":1}}],["эффективного",{"2":{"165":1,"538":1}}],["эффективно",{"2":{"47":1,"96":1,"145":1,"191":1,"289":1,"483":2,"541":1,"542":1}}],["эффекты",{"2":{"26":1,"237":1,"257":1}}],["эмитент",{"2":{"416":1}}],["эмиттера",{"2":{"310":1}}],["эмиты",{"2":{"131":1}}],["эмпирическое",{"2":{"209":1}}],["эмулятор",{"2":{"178":1}}],["элегантен",{"2":{"448":1}}],["элегантно",{"2":{"201":1}}],["электронных",{"2":{"420":1}}],["электронные",{"2":{"399":1}}],["электронная",{"2":{"420":1}}],["электронной",{"2":{"142":1,"255":1,"420":2,"421":1,"422":1}}],["элементе",{"2":{"183":1,"187":3,"253":2,"254":1}}],["элементом",{"2":{"166":1,"260":1,"261":1,"266":1,"272":1,"322":1,"368":1}}],["элементов",{"0":{"351":1,"353":1},"2":{"74":2,"96":1,"123":1,"145":1,"155":1,"164":2,"165":2,"168":5,"187":3,"188":1,"194":1,"199":1,"223":1,"241":1,"242":1,"243":1,"248":2,"250":1,"253":2,"258":1,"259":1,"260":2,"261":2,"268":1,"294":1,"301":1,"308":1,"334":1,"338":1,"350":1,"351":1,"352":1,"359":1,"369":4,"399":1,"474":4,"479":1,"540":1}}],["элементу",{"2":{"166":1,"177":1,"261":1,"356":1,"362":1}}],["элементарное",{"2":{"491":1}}],["элементарно",{"2":{"426":1}}],["элементах",{"2":{"364":1}}],["элементам",{"2":{"243":1}}],["элементами",{"0":{"241":1},"2":{"74":1,"130":1,"164":1,"167":1,"185":1,"187":1,"205":1,"257":1,"260":1,"304":1,"338":1}}],["элемента",{"2":{"135":2,"159":1,"161":2,"165":2,"186":1,"187":5,"194":1,"253":1,"254":1,"260":2,"261":1,"266":2,"298":1,"319":1,"352":3,"353":2,"369":4,"371":1,"453":2,"482":1,"492":1}}],["элементы",{"0":{"251":1},"1":{"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"263":1,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1},"2":{"29":1,"74":1,"141":1,"155":1,"159":1,"168":1,"187":1,"188":1,"194":1,"239":1,"241":1,"243":1,"244":1,"250":1,"251":2,"260":5,"261":1,"277":1,"291":1,"294":1,"298":1,"314":1,"327":1,"339":1,"350":1,"352":1,"353":1,"359":1,"362":1,"370":1,"392":1,"394":1,"433":1,"445":1,"453":2,"476":1,"482":1,"488":1,"492":1}}],["элемент",{"2":{"9":1,"157":3,"163":2,"164":4,"168":1,"185":1,"186":1,"187":7,"229":1,"251":1,"254":1,"258":4,"260":1,"261":1,"269":1,"298":2,"314":1,"321":1,"322":1,"353":1,"362":1,"367":1,"406":1,"409":1,"442":1,"453":1,"501":1}}],["эндрю",{"2":{"199":1}}],["эндпойнтов",{"2":{"124":1}}],["эндпойнты",{"2":{"53":1}}],["эндпойнтам",{"2":{"124":1}}],["эндпойнта",{"2":{"51":1}}],["эндпойнту",{"2":{"41":1,"124":2}}],["энергосбережения",{"2":{"123":1}}],["экстремального",{"2":{"491":1}}],["экстраполированного",{"2":{"230":1}}],["экспериментов",{"2":{"492":1}}],["экспериментировал",{"2":{"482":1}}],["экспериментируя",{"2":{"323":1}}],["экспериментируем",{"0":{"320":1},"1":{"321":1,"322":1}}],["экспериментального",{"2":{"320":1}}],["экспериментальной",{"2":{"168":1}}],["эксперименты",{"2":{"304":1}}],["экспозиции",{"2":{"291":1}}],["экспортировать",{"2":{"321":1,"363":1}}],["экспортируем",{"2":{"212":1,"334":1}}],["экспортируете",{"2":{"478":1}}],["экспортирует",{"2":{"159":1,"184":1,"213":1,"363":1}}],["экспортирующий",{"2":{"211":1,"365":1}}],["экспортом",{"2":{"313":1}}],["экспорта",{"2":{"184":1}}],["экспорт",{"2":{"160":1,"455":1}}],["эксплуатационным",{"2":{"74":1}}],["эквивалент",{"2":{"177":1,"186":1,"411":1}}],["эквивалентны",{"2":{"448":1}}],["эквивалентный",{"2":{"142":1}}],["эквивалентно",{"2":{"449":1}}],["эквивалентное",{"2":{"410":1}}],["эквивалентности",{"2":{"234":1}}],["эквивалентная",{"2":{"453":1}}],["эквивалентна",{"2":{"163":1}}],["экземпляре",{"2":{"368":1}}],["экземпляров",{"2":{"358":1,"478":1}}],["экземпляром",{"2":{"218":1}}],["экземпляры",{"0":{"174":1},"2":{"168":1,"174":1,"407":1}}],["экземпляр",{"2":{"157":1,"208":1,"212":2,"334":1,"368":1}}],["экземпляру",{"2":{"128":1,"160":1,"261":1,"365":1}}],["экономии",{"2":{"183":1}}],["экономичным",{"2":{"124":1}}],["экономит",{"2":{"102":1}}],["экосистемой",{"2":{"542":1}}],["экосистеме",{"2":{"300":1,"430":1,"474":1}}],["экосистему",{"2":{"96":1,"126":1}}],["экосистемы",{"2":{"67":1,"177":1,"400":1}}],["экраны",{"2":{"433":1,"476":1}}],["экранов",{"2":{"271":2}}],["экран",{"2":{"196":1,"240":1,"272":1,"273":1,"369":1,"492":1,"570":1,"587":1}}],["экранах",{"2":{"553":1}}],["экрана",{"2":{"9":1,"23":1,"96":3,"117":1,"179":1,"186":1,"240":1,"241":1,"242":1,"246":4,"256":1,"263":4,"271":3,"273":1,"312":1,"410":1,"463":1,"550":1,"552":1,"590":1}}],["экране",{"2":{"3":1,"168":1,"248":1,"298":1,"327":5,"342":1,"343":1}}],["эту",{"2":{"138":1,"142":1,"143":1,"151":1,"160":1,"180":1,"181":1,"183":1,"186":1,"199":2,"222":1,"228":1,"233":1,"237":1,"244":1,"258":1,"261":1,"263":1,"269":1,"273":1,"276":1,"307":1,"309":1,"313":1,"327":1,"333":1,"343":1,"344":1,"351":1,"353":1,"360":1,"362":2,"363":2,"369":2,"399":1,"401":1,"416":1,"422":1,"426":1,"444":3,"455":2,"465":1,"478":1,"479":1,"491":1}}],["эталонный",{"2":{"325":1}}],["эта",{"0":{"376":1,"381":1},"1":{"382":1,"383":1,"384":1,"385":1,"386":1,"387":1,"388":1,"389":1,"390":1,"391":1,"392":1,"393":1},"2":{"89":1,"95":1,"129":1,"140":1,"145":1,"156":1,"160":1,"163":1,"166":1,"167":1,"177":1,"178":1,"179":2,"180":2,"181":1,"183":1,"191":1,"196":1,"197":1,"198":1,"225":1,"226":1,"227":1,"232":1,"235":1,"238":1,"243":1,"261":1,"271":1,"279":1,"283":1,"287":1,"293":1,"311":1,"313":1,"326":1,"328":1,"334":1,"336":1,"339":1,"351":1,"357":1,"360":1,"364":1,"368":1,"369":2,"375":1,"376":1,"377":1,"385":1,"388":1,"389":1,"392":1,"399":1,"400":1,"421":1,"430":1,"436":1,"443":1,"447":2,"448":1,"467":1,"476":1}}],["этап",{"0":{"351":1},"2":{"351":1}}],["этапов",{"2":{"64":1}}],["этапах",{"2":{"444":1}}],["этапами",{"2":{"350":1}}],["этапам",{"2":{"14":1,"70":1}}],["этапа",{"2":{"11":1,"17":1,"70":1}}],["этапы",{"0":{"70":1},"2":{"10":1,"153":1,"444":1,"462":2}}],["этапе",{"2":{"6":1,"7":1,"11":2,"12":1,"17":1,"22":1,"39":1,"51":1,"77":1,"191":1,"258":1,"261":1,"352":1,"354":1,"364":1,"407":1,"420":1,"447":1,"483":1}}],["этическая",{"2":{"286":1}}],["этичный",{"2":{"274":1}}],["этим",{"2":{"126":1,"149":1,"152":1,"156":1,"159":1,"183":1,"184":1,"199":1,"229":1,"239":1,"241":1,"250":1,"257":1,"327":1,"330":1,"342":1,"351":1,"353":1,"359":1,"360":1,"368":2,"369":2,"397":1,"399":1,"402":1,"415":1,"444":1,"457":1,"541":1}}],["этими",{"2":{"74":1,"226":1,"239":1,"368":1,"451":1,"466":1}}],["этих",{"2":{"74":2,"125":1,"126":1,"129":1,"155":1,"156":4,"166":1,"181":1,"184":1,"187":1,"191":2,"192":1,"194":1,"201":1,"222":1,"223":1,"231":1,"233":1,"241":1,"246":1,"248":1,"262":1,"268":1,"274":1,"275":1,"289":1,"291":2,"299":1,"319":4,"327":1,"345":1,"401":1,"407":1,"414":1,"416":3,"422":3,"442":1,"447":1,"451":1,"453":2,"454":1,"460":1,"462":1,"463":1,"466":1,"479":1,"491":1,"492":2}}],["эти",{"2":{"3":1,"74":1,"133":1,"142":3,"143":2,"149":1,"158":2,"159":1,"160":2,"164":1,"165":1,"174":1,"175":1,"176":1,"178":1,"181":2,"183":3,"222":1,"230":1,"233":1,"235":2,"239":1,"240":1,"243":1,"244":1,"246":2,"248":2,"251":2,"252":1,"253":1,"256":2,"257":2,"262":1,"263":1,"279":1,"291":1,"306":1,"309":1,"313":1,"319":2,"323":1,"324":1,"327":2,"330":1,"332":2,"334":1,"336":1,"337":1,"339":1,"340":1,"345":1,"350":2,"352":2,"354":2,"357":1,"364":1,"399":1,"402":1,"406":1,"410":2,"413":1,"414":1,"415":1,"416":2,"422":2,"423":1,"442":2,"445":1,"447":1,"448":1,"450":1,"454":1,"463":1,"466":1,"467":1,"468":1,"478":2,"483":1}}],["этой",{"0":{"377":1},"2":{"22":1,"48":1,"123":1,"131":1,"139":2,"141":1,"150":1,"152":1,"153":2,"155":4,"156":1,"160":3,"167":2,"168":1,"169":2,"175":1,"176":1,"178":4,"179":1,"180":2,"183":2,"189":1,"191":1,"194":3,"196":1,"197":1,"202":1,"203":1,"219":1,"221":1,"223":3,"227":3,"228":2,"233":1,"235":1,"237":2,"241":1,"249":1,"252":1,"261":1,"263":1,"273":2,"275":1,"286":2,"287":1,"288":1,"289":2,"290":1,"302":2,"303":1,"304":3,"305":3,"316":1,"319":1,"320":1,"322":1,"323":1,"324":1,"325":4,"327":1,"328":1,"331":1,"341":1,"346":1,"348":4,"349":2,"352":2,"353":1,"357":1,"359":1,"360":3,"362":3,"363":2,"368":1,"369":3,"371":1,"372":1,"377":3,"379":1,"380":3,"382":1,"383":1,"384":1,"387":1,"390":1,"391":1,"396":1,"397":2,"398":1,"399":1,"401":1,"407":1,"410":1,"413":1,"416":1,"422":2,"423":1,"424":1,"436":1,"442":4,"443":1,"444":2,"446":1,"447":2,"452":1,"456":1,"457":2,"458":1,"462":1,"463":1,"465":1,"466":1,"468":1,"470":1,"474":1,"478":1,"490":1,"538":1}}],["этого",{"2":{"12":1,"27":1,"41":1,"59":1,"62":1,"95":1,"96":1,"104":1,"111":1,"128":1,"131":1,"142":3,"148":1,"158":1,"159":3,"160":1,"161":1,"164":1,"178":1,"185":1,"186":1,"187":3,"194":1,"196":2,"198":2,"199":1,"201":1,"210":2,"211":1,"219":1,"222":1,"223":1,"224":1,"225":1,"226":1,"228":2,"229":1,"231":1,"232":1,"246":2,"247":2,"254":2,"255":1,"258":1,"260":3,"263":2,"271":2,"272":2,"273":1,"291":1,"298":2,"299":1,"301":1,"306":1,"307":1,"308":2,"312":1,"313":2,"316":1,"318":1,"319":3,"320":1,"327":1,"330":1,"332":2,"336":1,"341":1,"344":1,"345":1,"352":1,"353":1,"354":1,"356":2,"362":3,"363":1,"364":2,"368":1,"369":2,"402":1,"404":1,"407":2,"410":1,"414":2,"416":2,"419":2,"420":1,"421":2,"422":1,"425":1,"429":1,"445":1,"446":1,"447":1,"448":1,"452":1,"453":1,"454":1,"455":1,"457":1,"461":1,"462":1,"463":1,"467":1,"474":1,"478":1,"482":1,"483":1,"491":2,"492":1}}],["этом",{"2":{"12":1,"39":1,"41":1,"62":1,"74":1,"95":1,"96":1,"142":2,"144":1,"145":1,"151":1,"156":2,"157":2,"158":1,"160":2,"166":1,"168":1,"180":1,"183":2,"185":1,"187":1,"197":1,"198":1,"201":1,"216":2,"222":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":2,"232":1,"234":2,"246":1,"247":1,"253":1,"255":1,"257":1,"258":1,"259":1,"260":1,"261":1,"264":1,"285":1,"286":1,"289":1,"290":1,"293":1,"298":1,"300":1,"305":1,"306":1,"307":1,"311":1,"314":1,"315":2,"316":1,"321":1,"322":1,"334":1,"340":1,"343":1,"345":1,"352":1,"355":1,"359":1,"364":1,"365":1,"368":1,"393":1,"407":3,"408":1,"410":1,"414":1,"415":2,"416":1,"419":1,"425":1,"426":1,"429":1,"438":1,"444":2,"446":1,"447":1,"450":1,"454":1,"460":1,"462":1,"465":2,"478":2,"479":2,"482":3,"491":2,"508":1,"531":1,"541":1}}],["этому",{"2":{"2":1,"16":1,"177":1,"197":1,"198":1,"207":1,"213":1,"248":1,"272":1,"301":1,"314":1,"339":2,"345":1,"350":1,"357":2,"402":1,"404":1,"413":1,"448":1,"491":1}}],["этот",{"2":{"9":1,"13":1,"89":1,"112":1,"121":2,"123":1,"126":1,"130":1,"142":3,"145":2,"152":1,"156":2,"157":3,"158":1,"160":3,"163":1,"178":1,"179":2,"180":4,"184":1,"185":1,"186":1,"187":1,"194":2,"195":2,"196":2,"197":2,"198":1,"199":1,"200":2,"201":2,"207":1,"208":1,"209":1,"211":2,"212":3,"213":1,"214":1,"217":1,"218":1,"220":2,"221":1,"222":1,"224":2,"225":1,"226":2,"228":1,"231":3,"234":3,"241":1,"242":1,"243":1,"244":1,"246":1,"247":1,"248":1,"253":1,"254":2,"255":2,"256":1,"257":1,"258":1,"261":2,"266":2,"267":1,"268":3,"271":3,"272":2,"276":2,"277":2,"278":1,"281":1,"284":1,"289":1,"293":1,"300":1,"308":1,"309":1,"311":3,"312":1,"313":4,"315":2,"316":1,"317":2,"319":1,"321":2,"322":2,"329":1,"330":1,"331":3,"332":1,"334":1,"335":2,"336":1,"341":2,"343":2,"351":2,"352":2,"353":2,"354":1,"356":1,"357":2,"360":1,"362":1,"363":1,"364":1,"368":1,"369":1,"396":1,"404":1,"406":1,"407":1,"409":1,"410":3,"413":1,"415":1,"416":4,"420":1,"421":4,"430":1,"433":2,"436":1,"444":1,"446":1,"447":1,"452":1,"453":2,"454":1,"455":3,"462":1,"463":1,"467":1,"476":2,"477":1,"483":1,"491":2,"562":1}}],["это",{"0":{"183":1,"200":1},"2":{"2":1,"3":1,"11":1,"12":2,"13":1,"23":1,"26":1,"29":1,"33":1,"34":1,"39":1,"40":1,"47":1,"48":1,"50":1,"51":1,"59":2,"73":1,"82":1,"85":1,"89":2,"96":7,"98":1,"106":1,"111":1,"112":1,"113":1,"114":1,"122":2,"123":3,"124":3,"125":3,"129":1,"131":2,"132":1,"134":1,"137":2,"139":1,"142":6,"143":2,"144":1,"145":1,"146":1,"149":1,"151":1,"153":2,"155":1,"156":9,"157":4,"158":1,"159":7,"160":16,"164":1,"165":1,"166":1,"167":1,"168":4,"174":2,"178":4,"179":6,"180":9,"181":5,"183":2,"184":4,"186":2,"187":7,"188":2,"190":2,"191":4,"192":2,"194":1,"195":2,"196":3,"197":2,"198":2,"199":3,"202":3,"208":1,"211":1,"212":1,"213":1,"215":3,"216":1,"217":3,"218":5,"219":1,"220":4,"222":2,"223":2,"224":1,"225":1,"226":5,"227":6,"228":6,"229":1,"231":2,"232":6,"233":4,"234":7,"235":2,"237":1,"239":1,"240":1,"241":2,"242":2,"244":3,"249":3,"252":1,"253":1,"257":1,"258":4,"260":3,"261":1,"262":1,"263":1,"264":1,"265":1,"267":1,"268":4,"269":1,"273":1,"275":2,"277":1,"281":1,"285":1,"287":1,"289":1,"291":4,"292":3,"293":2,"295":1,"296":1,"298":5,"299":2,"300":1,"301":1,"306":6,"308":2,"309":2,"310":1,"311":5,"312":2,"313":5,"314":3,"315":5,"316":2,"318":3,"319":8,"321":4,"322":2,"327":15,"328":3,"329":2,"330":1,"331":1,"335":2,"337":3,"338":2,"339":2,"340":1,"341":2,"343":1,"345":5,"346":1,"347":1,"348":1,"351":2,"352":1,"354":1,"355":1,"356":1,"357":2,"358":2,"359":2,"362":2,"363":3,"365":1,"366":1,"367":1,"368":4,"369":7,"370":1,"371":1,"375":2,"386":1,"394":1,"399":4,"400":2,"404":5,"407":4,"408":2,"410":3,"411":1,"413":1,"415":2,"416":4,"418":2,"419":1,"420":2,"421":1,"422":3,"423":1,"425":1,"426":2,"429":1,"435":1,"436":3,"438":1,"444":4,"445":1,"446":1,"447":2,"448":4,"449":2,"450":2,"453":1,"455":1,"456":1,"457":2,"458":3,"462":4,"463":5,"465":6,"466":6,"467":2,"469":1,"474":1,"476":3,"477":1,"478":8,"479":1,"481":1,"482":10,"483":12,"484":2,"485":1,"486":1,"487":1,"489":1,"490":1,"491":4,"492":4,"521":1,"531":1,"532":1,"541":1,"588":1}}],["ухудшает",{"2":{"490":1}}],["уязвимости",{"2":{"478":1}}],["уязвимость",{"2":{"96":1,"484":1}}],["ушли",{"2":{"458":1}}],["ушло",{"2":{"248":1}}],["укрепить",{"2":{"590":1}}],["украдут",{"2":{"421":1}}],["укоряет",{"2":{"490":1}}],["укоренилась",{"2":{"399":1}}],["укажет",{"2":{"453":1}}],["укажу",{"2":{"178":1}}],["указателя",{"2":{"246":1}}],["указателями",{"2":{"160":1}}],["указателей",{"2":{"160":1}}],["указать",{"2":{"143":2,"319":1,"448":1,"454":1,"466":1,"482":1,"483":1,"508":2}}],["указано",{"2":{"301":1,"362":2}}],["указаны",{"2":{"179":1}}],["указаниям",{"2":{"368":1}}],["указания",{"2":{"187":1,"450":1,"571":1}}],["указанием",{"2":{"420":1,"444":1,"448":1,"535":1}}],["указание",{"2":{"151":1}}],["указании",{"2":{"144":1}}],["указана",{"2":{"125":1}}],["указанные",{"2":{"463":1}}],["указанных",{"2":{"358":1}}],["указанный",{"2":{"345":1,"358":1,"418":1}}],["указанными",{"2":{"298":1,"413":1,"417":1}}],["указанным",{"2":{"182":1}}],["указанную",{"2":{"125":1,"417":1}}],["указанная",{"2":{"96":1}}],["указывали",{"2":{"273":1}}],["указывают",{"2":{"293":1}}],["указываются",{"2":{"152":1}}],["указывающие",{"2":{"465":1}}],["указывающих",{"2":{"448":1}}],["указывающий",{"2":{"258":1}}],["указывающей",{"2":{"261":1}}],["указывающее",{"2":{"187":1,"255":1}}],["указывающая",{"2":{"142":1,"255":1}}],["указываем",{"2":{"148":1,"149":1,"184":1}}],["указывает",{"2":{"142":1,"144":1,"151":1,"157":1,"160":2,"242":1,"254":1,"258":1,"266":3,"401":1,"404":3,"407":1,"462":1,"463":1}}],["указывать",{"2":{"142":2,"404":1}}],["узлов",{"2":{"422":1}}],["узлами",{"2":{"422":1}}],["узких",{"2":{"271":1}}],["узнаваемость",{"2":{"239":1,"249":1,"590":1}}],["узнает",{"2":{"261":1,"297":1}}],["узнаете",{"2":{"160":1,"376":1,"384":1}}],["узнаем",{"2":{"213":1,"237":1,"289":1,"325":1,"348":1,"357":1,"397":1}}],["узнали",{"2":{"153":1,"189":1,"242":1,"288":1,"320":1,"324":1,"371":2,"468":1}}],["узнать",{"2":{"143":1,"157":1,"330":2,"402":1,"422":1}}],["угрозой",{"2":{"319":1}}],["уголкам",{"2":{"275":1}}],["угодно",{"2":{"142":1}}],["угла",{"2":{"246":1}}],["углов",{"2":{"246":1}}],["углу",{"2":{"240":2,"242":1,"246":2,"272":1,"301":2,"517":1}}],["углубление",{"2":{"455":1}}],["углубляясь",{"2":{"264":1}}],["углубляться",{"2":{"194":1,"436":1}}],["углубиться",{"2":{"180":1}}],["унаследован",{"2":{"160":1}}],["уникален",{"2":{"422":1,"478":1}}],["уникальному",{"2":{"422":1}}],["уникального",{"2":{"334":1,"422":1,"441":1,"448":1}}],["уникальная",{"2":{"416":1}}],["уникальным",{"2":{"315":1,"319":1,"334":1}}],["уникальный",{"2":{"142":1,"165":1,"187":1,"404":1,"407":1,"416":1}}],["унификации",{"2":{"138":1}}],["универсального",{"2":{"96":1}}],["универсальный",{"2":{"96":2,"426":2}}],["универсальней",{"2":{"88":1}}],["утвердить",{"2":{"453":1}}],["утверждаем",{"2":{"448":1}}],["утверждает",{"2":{"213":1,"279":1}}],["утверждениях",{"2":{"453":1}}],["утверждения",{"0":{"449":1,"450":1},"2":{"448":3,"449":1}}],["утверждений",{"2":{"448":4,"452":1}}],["утверждение",{"2":{"213":1,"448":1,"449":2,"450":1,"453":2}}],["утерянных",{"2":{"422":1}}],["утеряны",{"2":{"416":1}}],["утечек",{"2":{"198":1}}],["утечку",{"2":{"159":1}}],["уточняет",{"2":{"293":1}}],["утилиту",{"2":{"113":1}}],["утилитами",{"2":{"485":1}}],["утилита",{"2":{"301":3}}],["утилитарных",{"2":{"181":1}}],["утилитарные",{"2":{"96":1}}],["утилитах",{"2":{"96":1}}],["утилиты",{"2":{"96":5,"104":1,"335":1,"435":1,"436":2,"446":1,"476":1,"477":1,"478":1,"547":1}}],["утилит",{"0":{"485":1},"2":{"96":2}}],["уж",{"2":{"157":1,"174":1,"199":1,"269":1,"340":1,"368":1}}],["уже",{"2":{"3":1,"16":1,"27":1,"36":1,"38":1,"39":1,"47":1,"89":3,"92":1,"96":1,"121":1,"124":1,"138":1,"142":1,"151":2,"159":1,"160":2,"174":1,"179":1,"180":1,"181":1,"183":1,"186":1,"187":1,"218":1,"219":1,"223":1,"228":2,"231":2,"240":1,"243":1,"258":1,"261":1,"265":1,"273":1,"291":1,"292":1,"300":2,"304":2,"312":1,"313":1,"325":1,"350":1,"353":1,"360":1,"369":2,"375":1,"396":1,"407":1,"408":1,"413":1,"422":2,"444":1,"447":1,"455":1,"463":1,"466":1,"474":1,"479":1,"482":1,"483":1,"491":1,"492":3,"535":1,"575":1}}],["уважает",{"2":{"447":1}}],["уведомить",{"2":{"258":1,"298":1,"308":1}}],["уведомлений",{"0":{"353":1}}],["уведомление",{"2":{"256":3,"298":1}}],["уведомления",{"0":{"256":1},"2":{"256":2,"291":3}}],["уведомлении",{"2":{"255":1}}],["уведомлять",{"2":{"357":1}}],["уведомляет",{"2":{"353":1}}],["уведомляется",{"2":{"222":1}}],["уведомляющие",{"0":{"255":1}}],["уверенным",{"2":{"491":1}}],["уверенный",{"2":{"446":1}}],["уверенную",{"2":{"248":1}}],["уверены",{"2":{"234":1,"345":1}}],["увесистыми",{"2":{"237":1}}],["увеличили",{"2":{"327":1}}],["увеличивая",{"2":{"304":1}}],["увеличивает",{"2":{"357":1,"426":1,"484":1}}],["увеличивается",{"2":{"179":1,"339":1,"426":1}}],["увеличиваем",{"2":{"261":1}}],["увеличивать",{"2":{"261":1}}],["увеличения",{"2":{"155":1}}],["увеличение",{"0":{"292":1},"1":{"293":1,"294":1,"295":1,"296":1,"297":1,"298":1},"2":{"132":1,"399":3}}],["увидели",{"2":{"346":1,"492":1}}],["увидеть",{"2":{"96":1,"142":2,"178":1,"179":1,"180":1,"187":2,"202":1,"227":1,"238":1,"257":1,"265":1,"273":1,"290":1,"305":1,"307":1,"313":1,"316":1,"322":1,"324":1,"326":2,"333":1,"335":1,"336":1,"349":1,"398":1,"407":1,"443":1}}],["увидит",{"2":{"327":1}}],["увидите",{"2":{"156":1,"179":3,"194":1,"197":1,"304":1,"322":1,"410":1}}],["увидим",{"2":{"158":1,"160":1,"167":2,"182":1,"187":1,"195":1,"221":1,"225":1,"299":1,"311":1,"315":1,"326":1,"338":1,"352":1,"364":1,"399":1,"402":1,"404":1,"415":1,"421":1,"463":1}}],["упаковывает",{"2":{"345":1}}],["упакованных",{"2":{"419":1}}],["упакованные",{"2":{"223":1}}],["упакован",{"2":{"158":1}}],["упакует",{"2":{"158":1}}],["упала",{"2":{"132":1}}],["упорядоченной",{"2":{"447":1}}],["упорядочиваете",{"2":{"198":1}}],["упоминалось",{"2":{"187":1,"312":1,"360":1}}],["упоминали",{"2":{"151":1,"180":1,"228":1,"231":1,"300":1,"341":1}}],["упомянутую",{"2":{"333":1}}],["упомянуть",{"2":{"201":1,"248":1,"369":1}}],["упомянутый",{"2":{"159":1}}],["упомянутых",{"2":{"136":1,"256":1,"377":1,"467":1}}],["упомянутого",{"2":{"152":1,"217":1}}],["уполномоченной",{"2":{"142":1}}],["упражнением",{"2":{"420":1}}],["упражнение",{"2":{"218":1}}],["упражнения",{"2":{"185":2,"188":1,"340":1,"408":1,"446":1}}],["управлению",{"2":{"156":1,"200":1,"304":1,"311":1,"362":1,"407":1}}],["управлении",{"2":{"126":1,"145":1,"436":1,"476":1}}],["управлением",{"2":{"178":1}}],["управление",{"0":{"304":1,"388":1,"458":1,"464":1},"1":{"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1},"2":{"70":1,"126":1,"134":2,"156":1,"160":1,"196":1,"213":1,"220":1,"239":1,"289":1,"298":1,"299":1,"314":2,"324":1,"352":3,"359":1,"362":1,"364":1,"371":1,"407":1,"436":1,"442":1,"457":1,"466":1,"476":1}}],["управления",{"2":{"56":1,"134":1,"144":1,"145":3,"180":1,"186":1,"215":1,"223":1,"262":1,"294":2,"298":1,"305":1,"312":1,"313":1,"314":1,"318":2,"323":1,"336":1,"357":1,"359":1,"365":1,"369":1,"376":1,"388":2,"464":2,"469":1,"478":3}}],["управляло",{"2":{"370":1}}],["управляемое",{"2":{"492":1}}],["управляемым",{"2":{"588":1}}],["управляемые",{"2":{"194":2}}],["управляемый",{"2":{"145":1}}],["управляет",{"2":{"145":1,"180":1,"196":1,"298":1,"353":1,"363":1,"368":1,"369":1,"436":1,"458":1,"476":1}}],["управляется",{"2":{"2":1,"142":1,"553":1}}],["управляют",{"2":{"142":1,"262":1}}],["управляются",{"2":{"85":1,"591":1}}],["управляющему",{"2":{"2":1}}],["управляться",{"2":{"462":1}}],["управлять",{"2":{"2":1,"157":1,"159":1,"188":1,"236":1,"247":1,"271":1,"291":1,"306":1,"347":1,"400":2,"404":1,"435":1,"468":1,"476":1,"482":2}}],["упростит",{"2":{"485":1}}],["упростить",{"2":{"142":1,"209":1,"231":1,"362":1,"422":1}}],["упрощенную",{"2":{"492":1}}],["упрощенно",{"2":{"482":1}}],["упрощенного",{"2":{"421":1}}],["упрощенное",{"2":{"158":1,"231":1,"416":1}}],["упрощенным",{"2":{"298":1}}],["упрощенный",{"2":{"231":1,"234":1,"309":1,"421":1}}],["упрощения",{"2":{"200":1,"202":1,"231":2,"298":1}}],["упрощение",{"0":{"2":1}}],["упрощать",{"2":{"231":1}}],["упрощающий",{"2":{"231":1}}],["упрощают",{"2":{"47":1}}],["упрощает",{"2":{"70":1,"138":1,"396":1,"423":1}}],["уровень",{"2":{"123":2,"152":2,"183":1,"408":1,"421":1,"483":1,"489":1,"502":1}}],["уровни",{"2":{"231":1}}],["уровней",{"2":{"264":1,"268":1}}],["уровне",{"2":{"144":1,"226":1,"271":1,"291":1,"329":1,"359":1,"360":1,"365":1,"368":1,"437":2,"474":1,"479":1,"483":1,"491":2}}],["уровнем",{"2":{"122":1}}],["уровнями",{"2":{"408":1,"567":1}}],["уровнях",{"2":{"191":1,"226":1,"331":1}}],["уровня",{"0":{"292":1},"1":{"293":1,"294":1,"295":1,"296":1,"297":1,"298":1},"2":{"65":1,"123":1,"127":1,"132":1,"142":3,"154":1,"192":1,"401":1,"402":1,"423":1,"445":1,"446":1,"482":1,"491":1}}],["удивительная",{"2":{"346":1}}],["удивительных",{"2":{"231":1}}],["удивительные",{"2":{"143":1}}],["уделяя",{"2":{"377":1}}],["уделять",{"2":{"302":1}}],["уделите",{"2":{"448":1}}],["уделить",{"2":{"291":1,"354":1}}],["уделили",{"2":{"323":2,"423":1}}],["удерживать",{"2":{"248":1}}],["удержание",{"2":{"240":1}}],["удастся",{"2":{"357":1,"465":1}}],["удачные",{"2":{"234":1}}],["удается",{"2":{"149":1}}],["удалась",{"2":{"418":1}}],["удалось",{"2":{"258":1,"448":1}}],["удалить",{"2":{"181":1,"183":1,"186":1,"277":1,"465":1}}],["удаляем",{"2":{"334":1,"363":1,"407":1}}],["удаляет",{"2":{"319":2}}],["удаляют",{"2":{"164":1,"340":1}}],["удаляя",{"2":{"142":1,"163":1}}],["удалять",{"2":{"132":1,"337":1,"464":1}}],["удаление",{"2":{"248":1,"352":2,"413":1,"464":1,"474":1}}],["удалением",{"2":{"198":1,"248":1}}],["удалении",{"2":{"168":1,"284":1}}],["удаления",{"2":{"123":1,"132":1,"188":1,"198":1,"253":1,"337":2}}],["удаленно",{"2":{"466":1}}],["удаленном",{"2":{"396":1,"467":1}}],["удаленного",{"2":{"151":1,"458":1,"466":1}}],["удаленные",{"2":{"466":1}}],["удаленных",{"2":{"458":1}}],["удаленный",{"2":{"151":1,"152":1,"340":1,"396":4,"458":1,"465":1,"466":3}}],["удаленными",{"0":{"466":1},"2":{"337":1}}],["удаленным",{"2":{"145":1,"199":1,"331":1,"340":1,"466":5}}],["удалена",{"0":{"132":1},"2":{"132":1}}],["удовлетворения",{"2":{"442":1}}],["удовлетворение",{"2":{"240":1}}],["удовлетворить",{"2":{"350":1,"354":1}}],["удовлетворительный",{"2":{"287":1}}],["удовлетворяющее",{"2":{"74":1,"298":1}}],["удостоверяющим",{"2":{"278":1}}],["удостоверяется",{"2":{"123":2}}],["удостовериться",{"2":{"123":1}}],["удобен",{"2":{"138":1,"230":1,"234":1,"240":1,"455":1,"546":1}}],["удобство",{"2":{"245":1,"249":1,"466":1,"501":2}}],["удобством",{"2":{"17":1}}],["удобства",{"2":{"123":1,"142":1,"168":1,"178":1,"183":1,"187":2,"219":1,"266":1,"287":1,"337":1,"447":1,"456":1,"501":1}}],["удобную",{"0":{"470":1},"2":{"260":1,"430":1,"490":1}}],["удобнее",{"2":{"138":1,"299":1}}],["удобней",{"2":{"23":1,"478":1,"490":1}}],["удобна",{"2":{"67":1,"430":1}}],["удобная",{"2":{"56":1,"89":1,"183":1,"436":1,"453":1,"477":1}}],["удобны",{"2":{"369":1,"425":1}}],["удобным",{"2":{"96":1,"174":1,"215":1,"515":1}}],["удобные",{"2":{"62":1,"340":1,"483":1}}],["удобных",{"2":{"50":1,"167":1,"231":1,"406":1,"410":1}}],["удобный",{"2":{"17":1,"22":1,"396":1,"422":1,"430":1,"474":1,"489":1,"491":1}}],["удобного",{"2":{"414":1}}],["удобное",{"2":{"330":1,"436":1}}],["удобной",{"2":{"178":1,"389":1,"414":1}}],["удобно",{"2":{"44":1,"74":1,"98":1,"112":1,"122":3,"130":1,"146":1,"160":1,"165":1,"179":1,"217":2,"220":1,"232":1,"241":1,"340":1,"430":1,"438":1,"478":2,"490":1,"537":1,"541":1}}],["умирает",{"2":{"478":1}}],["ум",{"2":{"260":1}}],["умными",{"2":{"422":1}}],["умных",{"2":{"399":1}}],["умны",{"2":{"211":1}}],["умные",{"2":{"201":1}}],["умён",{"2":{"187":1}}],["ума",{"2":{"185":1}}],["умаляя",{"2":{"96":1}}],["умолчанию",{"0":{"571":1},"2":{"130":1,"131":3,"132":1,"144":1,"149":1,"152":1,"179":1,"218":1,"261":1,"294":1,"318":1,"341":1,"345":1,"358":2,"359":1,"362":6,"368":1,"407":1,"410":3,"419":1,"463":1,"506":1,"508":1,"577":1}}],["умеет",{"2":{"492":1}}],["умеешь",{"2":{"102":2}}],["умел",{"2":{"491":1}}],["умело",{"2":{"155":1}}],["уместен",{"2":{"311":1}}],["уместно",{"2":{"235":1}}],["умеют",{"2":{"231":1}}],["умеющий",{"2":{"50":1}}],["умение",{"2":{"491":1}}],["умении",{"2":{"490":1}}],["умения",{"2":{"191":1}}],["уменьшения",{"2":{"508":1}}],["уменьшение",{"2":{"132":1,"137":1}}],["уменьшить",{"2":{"400":1,"404":1}}],["уме",{"2":{"22":1,"142":1,"176":1}}],["убить",{"2":{"491":1}}],["убирать",{"2":{"198":1}}],["убирается",{"2":{"111":1,"590":1}}],["убираем",{"2":{"89":2,"105":2}}],["убывающей",{"2":{"455":1}}],["убедились",{"2":{"422":1}}],["убедимся",{"2":{"327":1}}],["убедитесь",{"2":{"181":1,"231":1,"301":1,"463":1}}],["убедиться",{"2":{"176":1,"187":1,"209":1,"234":1,"338":1,"404":1,"419":1,"449":1}}],["убрать",{"2":{"89":1,"121":1}}],["улицам",{"2":{"491":1}}],["улице",{"2":{"26":1}}],["уложенные",{"2":{"271":1}}],["улучшайте",{"2":{"491":1}}],["улучшая",{"2":{"486":1}}],["улучшать",{"2":{"65":1}}],["улучшила",{"2":{"444":1}}],["улучшили",{"2":{"423":1}}],["улучшить",{"2":{"188":1,"189":1,"311":1,"346":1,"404":1,"444":1,"492":1,"588":1}}],["улучшит",{"2":{"164":1}}],["улучшению",{"2":{"448":1}}],["улучшение",{"2":{"370":1,"474":1}}],["улучшения",{"2":{"79":1,"156":1,"337":1,"570":1}}],["улучшена",{"2":{"318":2}}],["учреждения",{"2":{"273":1}}],["участию",{"2":{"533":1}}],["участие",{"0":{"533":1}}],["участника",{"2":{"416":2}}],["участниками",{"2":{"416":2}}],["участки",{"2":{"143":1,"187":1,"198":1,"351":1}}],["учатся",{"2":{"242":1}}],["учит",{"2":{"491":2}}],["учителем",{"2":{"491":1}}],["учите",{"2":{"201":2}}],["учиться",{"2":{"483":1}}],["учить",{"2":{"201":1}}],["учитывают",{"2":{"492":1}}],["учитывать",{"2":{"180":1,"240":1,"291":1,"299":1,"415":1,"429":1}}],["учитывал",{"2":{"96":1}}],["учитывая",{"2":{"96":1,"292":1,"315":1,"350":1,"351":1,"354":1,"362":1,"369":1,"420":2}}],["ученика",{"2":{"491":1}}],["учебники",{"2":{"491":1}}],["учебник",{"2":{"491":3}}],["учебного",{"2":{"340":1,"408":1,"446":1}}],["учетной",{"2":{"422":1}}],["учетным",{"2":{"421":1}}],["учетными",{"2":{"416":1}}],["учетные",{"2":{"415":2,"416":1,"422":1}}],["учетных",{"2":{"415":3,"416":1,"420":1}}],["учетом",{"2":{"43":1,"126":1,"177":1,"353":1,"354":1,"445":1}}],["учесть",{"2":{"141":1,"328":1}}],["учтем",{"2":{"40":1}}],["усовершенствовать",{"2":{"370":1}}],["усовершенствование",{"2":{"291":1}}],["усвоить",{"2":{"249":1}}],["усваивать",{"2":{"201":1}}],["усилий",{"2":{"291":1,"296":1,"300":1,"346":1,"444":1}}],["усиливает",{"2":{"239":1}}],["усилия",{"2":{"156":1,"327":1,"340":1,"455":1}}],["ускоряет",{"2":{"436":1,"476":1,"490":1}}],["ускорение",{"2":{"291":1}}],["ускорению",{"2":{"160":1}}],["ускорить",{"2":{"191":1,"247":1,"483":1,"490":1}}],["усмотрению",{"2":{"180":1,"327":1,"465":1}}],["услышать",{"2":{"239":1}}],["услуг",{"2":{"278":2,"279":1,"414":1,"483":1}}],["услугу",{"2":{"152":1}}],["услуги",{"2":{"142":1,"280":1,"282":1,"284":2,"286":1,"467":1}}],["услугам",{"2":{"194":1}}],["услуга",{"2":{"141":1,"239":1}}],["усложнение",{"2":{"278":1}}],["усложнению",{"2":{"196":1}}],["усложняет",{"2":{"122":1}}],["усложняться",{"2":{"492":1}}],["усложнять",{"2":{"114":1}}],["условию",{"2":{"447":1,"448":1}}],["условий",{"2":{"234":1,"256":1,"291":2,"369":1,"426":1}}],["условием",{"2":{"278":1,"287":1,"318":1}}],["условие",{"2":{"234":1}}],["условии",{"2":{"212":1,"228":1,"362":1,"415":1,"416":1,"448":1}}],["условия",{"2":{"230":1,"239":1,"354":1}}],["условиям",{"2":{"202":1}}],["условиями",{"2":{"139":1}}],["условиях",{"2":{"156":1,"279":1,"444":1}}],["условно",{"2":{"483":1}}],["условные",{"2":{"164":1,"368":1}}],["условна",{"2":{"14":1}}],["уступают",{"2":{"251":1}}],["устоявшихся",{"2":{"237":1,"541":1}}],["устойчивым",{"2":{"188":1}}],["устраняет",{"2":{"469":1}}],["устраняя",{"2":{"202":1}}],["устранения",{"2":{"465":1}}],["устранению",{"2":{"444":1}}],["устранить",{"2":{"465":1}}],["устроить",{"2":{"477":1}}],["устройстве",{"2":{"293":1}}],["устройств",{"2":{"263":1,"289":1,"552":1}}],["устройство",{"2":{"240":1,"421":2}}],["устройством",{"2":{"197":1}}],["устройствами",{"2":{"291":1}}],["устройствам",{"2":{"291":2}}],["устройствах",{"2":{"291":3,"294":1,"295":1,"298":1,"327":1,"399":1}}],["устройства",{"2":{"117":1,"239":1,"289":1,"291":2,"421":1,"491":1}}],["устроена",{"2":{"118":1}}],["устареет",{"2":{"484":1}}],["устаревающих",{"2":{"541":1}}],["устаревает",{"2":{"478":1}}],["устаревший",{"2":{"429":1}}],["устаревшими",{"2":{"399":1}}],["устаревшие",{"2":{"137":1,"430":1}}],["устаревшем",{"2":{"132":1,"291":1}}],["устарели",{"2":{"491":1}}],["устарел",{"2":{"470":1,"474":1,"478":1}}],["устареть",{"2":{"96":1,"490":1}}],["устанавливающихся",{"2":{"543":1}}],["устанавливаются",{"2":{"179":1,"299":1,"543":1}}],["устанавливается",{"2":{"429":1,"582":1}}],["устанавливает",{"2":{"271":1,"298":1,"336":1,"546":1}}],["устанавливаемые",{"0":{"291":1}}],["устанавливаем",{"2":{"23":1,"299":1,"300":1,"419":2}}],["устанавливать",{"2":{"223":1,"302":1,"367":1,"468":1,"587":1}}],["устанавливаться",{"2":{"155":1,"291":1,"399":1}}],["установят",{"2":{"460":1}}],["установливаем",{"2":{"407":1}}],["установлены",{"2":{"459":1,"535":1}}],["установленную",{"2":{"396":1}}],["установленный",{"2":{"298":1}}],["установленным",{"2":{"178":1}}],["установлена",{"2":{"340":1,"492":1}}],["установлено",{"2":{"293":1,"297":1,"298":7,"537":1}}],["установлен",{"2":{"179":1,"261":1,"309":1,"461":2,"462":1}}],["установим",{"2":{"446":1,"447":1}}],["установил",{"2":{"241":1,"299":1}}],["установили",{"2":{"180":1,"455":1,"461":1}}],["установив",{"2":{"178":1,"292":1}}],["установит",{"2":{"179":1,"401":1}}],["установите",{"2":{"152":1,"298":1,"401":1,"447":1,"491":1}}],["установить",{"2":{"124":1,"152":3,"178":3,"179":1,"184":1,"291":2,"298":1,"299":1,"401":1,"414":1,"425":1,"446":1,"450":1,"451":3,"453":1,"455":2,"456":1,"506":1,"531":1}}],["установкой",{"2":{"153":1,"160":1,"297":1}}],["установке",{"0":{"298":1},"2":{"152":1,"178":1,"179":1,"187":1,"298":6,"299":2,"492":2}}],["установку",{"2":{"141":1,"152":1,"179":1,"180":1,"298":8,"460":1,"462":1}}],["установки",{"2":{"125":1,"130":1,"152":2,"179":1,"182":1,"186":1,"247":1,"291":2,"298":10,"300":1,"314":1,"321":1,"340":1,"344":1,"368":1,"377":1,"396":1,"401":1,"430":1,"446":1,"451":1,"453":1,"458":1,"459":4,"460":1,"461":1,"462":1,"474":1,"575":1}}],["установка",{"0":{"54":1,"177":1,"333":1,"401":1,"447":1,"451":1,"459":1,"460":1,"461":1,"509":1,"510":1,"523":1,"527":1,"534":1,"535":1,"537":1},"1":{"178":1,"179":1,"180":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"334":1,"335":1,"336":1,"448":1,"452":1,"453":1,"510":1,"511":1,"512":1,"513":1,"535":1,"536":2,"537":1},"2":{"127":1,"133":1,"148":1,"158":1,"159":1,"160":1,"179":1,"223":1,"291":1,"305":1,"348":1,"349":1,"366":1,"401":1,"442":2,"451":1,"460":1,"535":2}}],["успевает",{"2":{"430":1}}],["успешный",{"2":{"239":1,"418":1}}],["успешными",{"2":{"291":1}}],["успешным",{"2":{"232":1}}],["успешности",{"2":{"436":1,"477":1}}],["успешностью",{"2":{"22":1}}],["успешной",{"2":{"417":1,"418":1}}],["успешном",{"2":{"234":1}}],["успешного",{"2":{"234":1,"450":1}}],["успешно",{"2":{"182":1,"301":1,"418":1}}],["успехом",{"2":{"415":1}}],["успехов",{"2":{"380":1}}],["успех",{"2":{"74":1,"232":1,"256":1,"442":1}}],["успеха",{"2":{"41":1,"234":3,"415":1,"420":1,"445":1}}],["у",{"0":{"503":1},"2":{"3":1,"12":1,"13":1,"16":3,"17":2,"22":1,"28":1,"29":1,"36":1,"41":1,"43":1,"47":3,"48":1,"59":1,"92":1,"95":1,"98":1,"104":1,"106":1,"111":2,"121":1,"123":3,"124":4,"130":1,"138":1,"142":2,"145":1,"152":2,"159":2,"160":1,"174":1,"176":1,"179":1,"187":4,"195":1,"198":1,"222":1,"230":1,"232":1,"233":1,"234":2,"237":1,"239":1,"242":1,"246":1,"248":3,"256":1,"261":1,"274":1,"276":1,"283":1,"298":1,"299":1,"306":1,"308":2,"311":1,"316":1,"318":1,"319":2,"329":1,"333":1,"334":2,"352":1,"356":1,"357":1,"359":1,"362":1,"364":1,"366":1,"370":1,"396":1,"407":1,"408":1,"410":3,"416":2,"420":1,"422":3,"438":1,"447":2,"450":1,"451":1,"458":2,"461":2,"462":1,"463":1,"466":1,"474":1,"478":5,"481":1,"483":2,"490":1,"491":1,"492":2,"508":1,"541":1,"562":2,"578":1}}],["флексбокса",{"2":{"487":1}}],["флагманом",{"2":{"482":1}}],["флаг",{"2":{"298":1,"319":2}}],["флажок",{"2":{"252":1,"276":1}}],["флажка",{"2":{"187":2,"252":1,"276":1}}],["форсирует",{"2":{"396":1}}],["форумах",{"2":{"264":1}}],["форм",{"2":{"573":1}}],["формочки",{"2":{"492":1}}],["формой",{"2":{"328":1}}],["формы",{"2":{"247":1,"319":1,"478":1}}],["формируя",{"2":{"158":1}}],["формируется",{"2":{"273":1}}],["формирует",{"2":{"124":1,"179":1,"492":1}}],["формирование",{"2":{"122":1}}],["формуле",{"2":{"416":1}}],["формулы",{"2":{"271":1}}],["формулу",{"2":{"141":1,"156":1,"232":2}}],["формулировки",{"2":{"284":1}}],["формулировок",{"2":{"284":1}}],["формулировать",{"2":{"4":1}}],["формулируется",{"2":{"2":1}}],["форму",{"2":{"123":1,"276":1,"415":1,"420":1,"500":1}}],["форме",{"2":{"67":1,"253":1,"481":1}}],["формальная",{"2":{"352":1}}],["формальный",{"2":{"160":1}}],["формах",{"2":{"251":1}}],["форма",{"2":{"48":1,"260":1,"477":1}}],["форматов",{"2":{"358":1}}],["форматом",{"2":{"252":1,"455":1}}],["форматирует",{"2":{"430":1}}],["форматируете",{"2":{"198":1}}],["форматировании",{"2":{"492":1}}],["форматирование",{"2":{"430":1}}],["форматирования",{"2":{"340":1,"538":1}}],["форматированию",{"2":{"251":1}}],["формата",{"2":{"138":1,"492":1}}],["формате",{"2":{"124":1,"160":1,"178":1,"319":1,"345":1,"352":1,"363":1,"415":1,"428":2,"454":1,"492":1,"511":1,"528":1}}],["формат",{"2":{"17":1,"160":1,"234":1,"242":1,"340":1,"416":1,"428":1,"508":1,"535":1}}],["фокусируется",{"2":{"436":1,"476":1}}],["фокусироваться",{"2":{"252":1,"265":1}}],["фокусировки",{"2":{"241":1}}],["фокус",{"2":{"265":1}}],["фокусной",{"2":{"241":1}}],["фоне",{"2":{"482":1}}],["фон",{"2":{"428":1}}],["фонт",{"2":{"299":1}}],["фоновые",{"2":{"340":1}}],["фоновыми",{"2":{"327":1}}],["фоновый",{"2":{"299":1,"531":1}}],["фоновом",{"2":{"258":1}}],["фона",{"2":{"186":1,"295":1,"298":1,"531":1}}],["фонд",{"2":{"152":1}}],["фондом",{"2":{"152":1}}],["ферме",{"2":{"145":1}}],["физически",{"2":{"483":1}}],["физических",{"2":{"145":1}}],["финальном",{"2":{"483":1}}],["финальную",{"2":{"356":1}}],["финансы",{"2":{"422":1}}],["финляндия",{"2":{"268":1}}],["философию",{"2":{"271":1}}],["фильтрасобытия",{"2":{"352":1}}],["фильтрасостояние",{"2":{"352":1}}],["фильтрации",{"2":{"187":1,"227":1,"268":1,"352":1,"369":1}}],["фильтрация",{"2":{"16":1,"22":1,"508":1}}],["фильтрами",{"2":{"30":1,"35":1}}],["фильтры",{"2":{"4":1,"33":1}}],["фишек",{"2":{"253":1}}],["фитта",{"0":{"246":1}}],["фибоначчи",{"0":{"233":1},"2":{"232":1,"234":1,"446":3,"449":1}}],["фигура",{"2":{"311":1}}],["фигуру",{"2":{"221":1}}],["фигурных",{"2":{"187":1}}],["фигурные",{"2":{"157":1}}],["фиксит",{"2":{"483":1}}],["фиксируют",{"2":{"467":1}}],["фиксируются",{"2":{"453":1}}],["фиксируем",{"2":{"187":1}}],["фиксированного",{"2":{"260":1}}],["фиксацию",{"2":{"515":1}}],["фиксация",{"2":{"463":1}}],["фиксации",{"2":{"174":1,"462":2,"463":2}}],["фидбеки",{"2":{"64":1}}],["фулстек",{"2":{"138":1,"430":1}}],["фулстеков",{"2":{"138":1}}],["футеров",{"2":{"554":1}}],["футером",{"2":{"436":1,"477":1,"580":1}}],["футер",{"2":{"32":1}}],["фунциональность",{"2":{"89":1}}],["функций",{"2":{"156":2,"160":1,"198":2,"202":1,"208":1,"216":1,"220":1,"222":1,"228":1,"229":1,"231":1,"234":1,"236":1,"243":1,"252":1,"315":1,"331":1,"359":1,"360":1,"363":1,"368":1,"435":1,"436":1,"438":1,"446":1,"450":1,"451":1,"453":1,"476":2,"478":3}}],["функциях",{"2":{"234":1,"306":1,"453":1,"482":1}}],["функциям",{"2":{"194":1,"362":1}}],["функциями",{"2":{"180":1,"306":1,"312":1,"360":1,"478":1}}],["функция",{"2":{"131":1,"152":1,"160":1,"167":1,"183":1,"187":3,"196":1,"198":1,"219":2,"221":1,"227":1,"228":1,"232":3,"233":2,"241":1,"247":1,"311":3,"313":3,"315":1,"321":3,"327":1,"331":1,"339":1,"352":1,"357":2,"363":4,"368":1,"369":2,"416":1,"420":1,"448":4,"449":2,"452":1,"474":1,"478":1,"483":3,"484":1}}],["функцией",{"0":{"129":1},"2":{"100":1,"129":1,"160":1,"167":1,"179":1,"187":1,"194":1,"228":1,"233":1,"247":1,"260":1,"321":1,"358":1,"442":1,"448":1,"575":1}}],["функцию",{"2":{"96":1,"129":1,"132":1,"143":1,"157":1,"167":1,"187":1,"196":2,"198":3,"212":1,"217":1,"218":2,"221":1,"222":1,"223":3,"224":1,"227":1,"233":3,"234":3,"241":1,"261":2,"263":1,"307":3,"308":2,"313":1,"316":2,"318":1,"321":2,"327":1,"334":1,"335":2,"345":1,"354":1,"357":3,"358":1,"360":2,"363":5,"365":1,"368":1,"369":1,"407":2,"414":1,"427":1,"434":1,"438":1,"441":1,"444":1,"448":3,"449":1,"450":1,"452":2,"453":1,"462":1,"476":1,"478":1,"484":1,"545":1}}],["функции",{"0":{"173":1,"363":1},"1":{"364":1},"2":{"40":1,"41":1,"98":2,"100":2,"112":2,"113":1,"124":2,"132":1,"148":1,"156":1,"157":1,"160":6,"171":1,"174":1,"181":1,"194":1,"196":2,"198":2,"203":1,"213":1,"215":1,"217":1,"219":1,"220":1,"223":1,"227":2,"232":5,"233":3,"234":8,"239":1,"240":1,"245":1,"246":1,"252":1,"261":1,"298":1,"306":1,"313":1,"315":1,"316":3,"321":1,"327":2,"329":1,"331":1,"332":1,"336":1,"337":1,"338":2,"339":1,"357":2,"363":4,"364":1,"368":1,"369":1,"419":1,"420":2,"435":1,"436":3,"445":3,"447":1,"448":6,"449":1,"450":3,"454":1,"476":3,"478":6,"482":1,"483":1,"538":1,"543":1,"553":1}}],["функционируют",{"2":{"21":1}}],["функционалом",{"2":{"25":1,"331":1,"535":1,"541":1}}],["функциональную",{"2":{"194":1}}],["функциональным",{"2":{"195":1,"228":1,"436":1,"476":1}}],["функциональный",{"2":{"184":1}}],["функциональные",{"0":{"69":1},"2":{"194":1,"200":1,"414":1,"542":1}}],["функциональных",{"2":{"3":1,"244":1,"542":1}}],["функциональному",{"2":{"369":1}}],["функциональном",{"2":{"196":1}}],["функциональности",{"2":{"156":3,"174":1,"181":1,"195":1,"226":1,"228":3,"348":1,"351":1,"352":1,"354":1,"365":1,"369":1,"399":1,"468":1,"538":2}}],["функциональностью",{"2":{"160":1,"196":2,"228":1,"251":1,"365":1}}],["функциональность",{"2":{"11":1,"68":1,"156":1,"160":1,"161":1,"186":1,"189":1,"195":2,"199":1,"222":3,"228":2,"229":1,"291":1,"300":1,"308":1,"309":1,"318":1,"337":1,"356":1,"360":1,"371":1,"537":1,"553":1}}],["функциональной",{"2":{"96":1,"478":1}}],["функционально",{"2":{"22":1}}],["функционал",{"2":{"9":1,"13":1,"26":1,"48":1,"50":1,"308":1,"483":1,"489":1,"538":1,"542":1,"575":1,"579":1}}],["функционала",{"2":{"9":1,"32":1,"70":1,"114":1,"474":2,"490":1,"537":1,"538":1,"540":1,"542":1,"573":1,"575":1,"576":1}}],["фундаментальное",{"2":{"456":1,"482":1}}],["фундаментальной",{"2":{"156":1}}],["фундаментальными",{"2":{"397":1}}],["фундаментальный",{"2":{"233":1}}],["фундаментальная",{"2":{"362":1}}],["фундаментальную",{"2":{"191":1}}],["фундамента",{"2":{"26":1}}],["фракционирование",{"2":{"423":1}}],["фрагментов",{"2":{"549":1}}],["фрагментом",{"2":{"192":1,"260":1}}],["фрагменты",{"2":{"362":1,"542":1,"549":1}}],["фрагменте",{"2":{"202":1,"409":1}}],["фрагмент",{"2":{"198":1,"244":1,"256":1,"260":1,"335":1,"363":1,"369":1,"408":1}}],["фрагментах",{"2":{"369":1}}],["фрагментам",{"2":{"325":1,"436":1,"476":1}}],["фрагмента",{"2":{"157":1,"233":1,"410":1,"448":1}}],["фреймворку",{"2":{"164":1,"291":1}}],["фреймворке",{"2":{"156":1,"474":1,"482":1}}],["фреймворков",{"2":{"155":1,"156":2,"175":1,"177":1,"181":1,"184":1,"319":1,"375":1,"482":1,"538":1,"541":1}}],["фреймворком",{"2":{"131":1,"153":1,"155":1,"159":1,"161":1,"174":1,"176":2,"181":1,"187":1,"474":1,"575":1}}],["фреймворки",{"2":{"155":1,"156":2,"158":1,"168":1,"180":2,"181":2,"190":1,"291":1,"482":2}}],["фреймворк",{"0":{"155":1,"156":1,"182":1,"382":1},"1":{"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"186":1,"187":1,"188":1},"2":{"126":2,"155":1,"156":6,"157":1,"158":1,"167":2,"168":1,"179":1,"180":1,"181":2,"182":1,"191":1,"197":1,"299":1,"325":1,"337":1,"344":1,"355":1,"364":1,"375":1,"382":1,"388":1,"400":1,"422":1,"447":1,"478":1,"541":1}}],["фреймворках",{"0":{"482":1},"2":{"314":1,"319":1,"404":1}}],["фреймворками",{"0":{"181":1},"1":{"182":1},"2":{"180":1,"444":1}}],["фреймворка",{"2":{"23":1,"125":1,"126":1,"155":1,"156":3,"157":1,"177":1,"181":1,"187":2,"198":1,"222":1,"304":1,"355":1,"371":2,"375":2,"376":1,"382":1,"401":1,"445":1,"474":2,"541":1}}],["фронте",{"2":{"123":3,"138":2,"479":2,"482":1,"483":2,"491":1}}],["фронтендом",{"2":{"125":1}}],["фронтенды",{"2":{"62":1}}],["фронтенда",{"2":{"10":1,"11":1,"22":1,"41":2,"59":1,"82":1,"477":1,"478":3,"491":1,"542":2}}],["фронтенд",{"0":{"482":1},"2":{"4":1,"6":1,"23":1,"41":1,"47":1,"124":1,"325":1,"421":1,"422":1,"425":1,"430":1,"436":1,"476":1,"479":1,"481":1,"482":1,"483":1,"492":1,"541":1}}],["фронтендеру",{"2":{"394":1}}],["фронтендера",{"0":{"124":1}}],["фронтенде",{"0":{"81":1},"1":{"82":1,"83":1},"2":{"3":1,"6":1,"13":1,"44":1,"111":1,"420":1,"478":2,"479":1,"482":2,"483":1,"491":1}}],["фронту",{"2":{"123":1,"124":1}}],["фронт",{"2":{"123":3,"124":2,"430":1}}],["фронта",{"2":{"123":1,"124":1,"482":1}}],["фронтэнде",{"2":{"482":1}}],["фронтэндер",{"2":{"124":1}}],["фронтэнд",{"0":{"483":1},"1":{"484":1,"485":1,"486":1,"487":1,"488":1,"489":1},"2":{"123":1,"124":1,"138":1,"502":1}}],["фантазийный",{"2":{"350":1}}],["фабричной",{"2":{"313":1}}],["фабрики",{"2":{"221":2}}],["фабрика",{"0":{"221":1}}],["фактического",{"2":{"396":1,"444":1,"492":1}}],["фактически",{"2":{"337":1,"360":1}}],["фактические",{"2":{"306":1}}],["факт",{"2":{"254":1,"478":1}}],["факто",{"2":{"138":1,"401":1,"546":1}}],["фактора",{"2":{"423":1}}],["фактор",{"2":{"228":1,"421":1,"482":1}}],["фактором",{"2":{"226":1,"332":1,"369":1,"415":1}}],["факторов",{"2":{"41":1,"232":1,"442":1,"445":2}}],["факторизация",{"2":{"13":1}}],["фаренгейта",{"2":{"226":1,"227":2}}],["фасадов",{"2":{"231":1}}],["фасадный",{"2":{"231":1}}],["фасада",{"2":{"230":1,"231":1}}],["фасад",{"0":{"231":1},"2":{"191":1,"227":1,"231":1}}],["файлом",{"2":{"147":1,"180":1,"297":1}}],["файловой",{"2":{"291":1}}],["файловый",{"2":{"145":1}}],["файлов",{"0":{"133":1,"151":1,"173":1,"476":1},"2":{"11":2,"38":1,"67":1,"118":1,"126":1,"140":1,"143":2,"149":1,"153":2,"158":1,"179":1,"181":1,"185":1,"285":1,"300":1,"357":2,"369":1,"396":1,"410":1,"425":1,"427":1,"429":1,"447":2,"454":1,"462":3}}],["файлу",{"2":{"143":1,"184":1,"198":1,"328":1}}],["файл",{"0":{"293":1},"1":{"294":1,"295":1,"296":1},"2":{"121":1,"143":1,"144":1,"145":1,"147":1,"148":2,"149":2,"158":3,"159":3,"180":12,"181":2,"182":3,"183":2,"184":5,"186":1,"213":1,"215":1,"242":2,"248":1,"285":2,"289":1,"291":1,"293":4,"297":3,"299":2,"300":2,"313":1,"316":1,"317":1,"334":1,"338":1,"339":1,"344":1,"357":2,"368":2,"369":2,"396":4,"399":1,"403":1,"404":4,"407":1,"427":1,"430":1,"446":1,"447":5,"451":5,"452":1,"454":1,"455":2,"456":1,"462":4,"463":2,"465":6,"469":1,"492":2,"549":1}}],["файле",{"2":{"89":1,"92":1,"121":1,"159":1,"182":1,"293":1,"299":1,"314":1,"328":1,"334":1,"340":1,"356":2,"369":1,"407":2,"410":1,"454":1,"455":1,"465":1,"524":1,"587":1,"591":2}}],["файлам",{"2":{"143":1,"180":1}}],["файлами",{"2":{"11":1,"38":1,"148":1,"368":1,"462":1}}],["файлах",{"2":{"118":1,"430":1,"447":2,"448":1,"453":2,"454":3}}],["файла",{"2":{"17":1,"125":1,"127":1,"144":1,"146":1,"148":1,"180":1,"182":1,"183":1,"214":1,"291":1,"293":2,"296":2,"328":1,"329":1,"341":2,"344":1,"357":1,"368":2,"396":3,"448":2,"454":1,"462":1,"492":1,"508":1,"535":2}}],["файлы",{"0":{"38":1,"379":1},"2":{"6":1,"11":1,"17":1,"133":1,"144":2,"145":1,"150":1,"151":2,"152":1,"158":1,"178":1,"179":2,"180":4,"183":2,"291":1,"299":1,"300":1,"340":1,"349":1,"368":1,"379":1,"396":1,"399":1,"401":1,"426":1,"429":1,"447":1,"457":2,"458":1,"462":5,"463":3,"464":1,"465":1,"492":1,"547":1,"577":1}}],["зря",{"2":{"490":1}}],["зрения",{"2":{"11":1,"22":1,"96":1,"112":1,"122":1,"130":1,"232":1,"239":1,"331":2,"346":1,"407":1,"478":3,"501":1}}],["зерна",{"2":{"491":1}}],["зеркально",{"2":{"342":2,"343":1}}],["зеркальное",{"2":{"143":1}}],["зеленого",{"2":{"448":1}}],["звездного",{"2":{"531":1}}],["звездным",{"2":{"511":1,"528":1}}],["звездочка",{"2":{"463":1}}],["звеном",{"2":{"341":1}}],["звучало",{"2":{"446":1}}],["звучит",{"2":{"158":1}}],["звуков",{"2":{"239":1}}],["злоупотреблять",{"2":{"327":1,"438":1}}],["злоупотребление",{"2":{"257":1}}],["злой",{"2":{"237":1}}],["зону",{"2":{"194":1}}],["зона",{"2":{"156":1}}],["змеином",{"2":{"171":1}}],["знал",{"2":{"491":1}}],["знатоков",{"2":{"430":1}}],["знать",{"2":{"126":1,"137":1,"143":1,"156":1,"158":1,"160":1,"179":1,"216":1,"226":1,"287":1,"289":1,"298":1,"364":1,"397":1,"413":1,"429":1,"491":2}}],["знаменитая",{"2":{"244":1}}],["знающих",{"2":{"491":1}}],["знают",{"2":{"306":1,"490":1}}],["знаю",{"2":{"234":1}}],["знанию",{"2":{"491":1}}],["знаний",{"2":{"323":1,"491":1}}],["знание",{"2":{"191":1,"376":1}}],["знаниями",{"2":{"397":1}}],["знания",{"2":{"155":1,"191":1,"287":1,"325":1,"348":1,"364":1,"372":1,"376":1,"397":1,"424":1,"491":2}}],["знаем",{"2":{"160":1,"232":1,"327":1,"364":1,"413":1,"453":1,"455":1}}],["знает",{"2":{"158":1,"160":2,"226":1,"340":1}}],["знаете",{"2":{"124":1,"421":1}}],["знаки",{"2":{"463":1}}],["знаку",{"2":{"404":1}}],["знаке",{"2":{"185":1}}],["знаками",{"2":{"422":1}}],["знака",{"2":{"171":1,"230":1}}],["знак",{"2":{"157":1,"339":1,"404":1,"463":1}}],["знакомясь",{"2":{"397":1}}],["знакомимся",{"2":{"390":1}}],["знакомиться",{"2":{"446":1}}],["знакомит",{"2":{"385":1,"388":1}}],["знакомо",{"2":{"240":1}}],["знакомой",{"2":{"198":1}}],["знакомого",{"2":{"67":1}}],["знакомы",{"2":{"197":1,"243":1,"377":1}}],["знакомым",{"2":{"159":1,"481":1}}],["знакома",{"2":{"178":1,"369":1}}],["знаком",{"2":{"170":1,"362":1,"413":1}}],["знакомстве",{"2":{"235":1}}],["знакомство",{"2":{"139":1}}],["знакомства",{"2":{"139":2,"153":1,"207":1}}],["значок",{"2":{"183":2,"240":1,"242":1,"255":1,"263":1,"266":2}}],["значке",{"2":{"255":1,"296":1}}],["значка",{"2":{"255":2,"294":1}}],["значками",{"2":{"183":2}}],["значком",{"2":{"253":1,"255":1,"263":1}}],["значков",{"2":{"183":2,"273":1}}],["значки",{"0":{"255":1},"2":{"181":1,"183":5,"244":1,"291":1,"419":1}}],["значимых",{"2":{"183":1}}],["значимое",{"2":{"180":1}}],["значителен",{"2":{"340":1}}],["значительную",{"2":{"156":1,"399":1}}],["значительный",{"2":{"156":1,"336":1,"492":1}}],["значительные",{"2":{"155":1,"228":1,"327":1}}],["значительными",{"2":{"220":1}}],["значительным",{"2":{"132":1}}],["значительных",{"2":{"62":1}}],["значительной",{"2":{"155":1,"232":1,"240":1,"244":1,"399":1,"457":1}}],["значительно",{"2":{"142":1,"156":1,"157":1,"234":1,"291":1,"325":1,"346":1,"423":1,"430":1,"436":1,"477":1,"490":1,"492":1,"541":1}}],["значительного",{"2":{"132":1,"371":1}}],["значительное",{"2":{"74":1,"444":1,"474":1}}],["значит",{"2":{"12":1,"88":1,"420":1}}],["значению",{"2":{"160":2,"187":1,"318":1,"358":1,"448":2,"453":2}}],["значений",{"2":{"160":1,"312":1,"314":1,"318":1,"319":1,"327":1,"338":1,"358":1,"453":1}}],["значении",{"2":{"124":1,"188":1}}],["значением",{"2":{"162":1,"187":1,"218":1,"227":1,"306":1,"307":1,"358":1,"359":1,"363":1,"448":1,"452":1,"453":1,"482":1}}],["значение",{"2":{"95":1,"131":1,"142":2,"156":4,"157":1,"160":6,"162":2,"163":2,"165":1,"166":2,"168":1,"187":2,"212":1,"227":5,"229":1,"232":1,"233":1,"234":2,"261":1,"281":1,"295":1,"306":1,"311":1,"313":2,"321":2,"322":1,"337":1,"338":1,"343":2,"358":3,"359":3,"363":1,"364":1,"368":1,"396":1,"407":2,"416":1,"448":1,"449":1,"452":1,"453":4,"563":1,"588":1}}],["значениями",{"2":{"321":1,"358":1,"368":1,"417":1}}],["значениям",{"2":{"130":1}}],["значения",{"2":{"95":1,"130":1,"131":1,"144":1,"145":1,"156":1,"157":1,"160":1,"162":1,"164":1,"166":1,"168":1,"171":1,"187":3,"232":1,"234":4,"261":1,"293":1,"298":1,"314":1,"318":1,"319":2,"320":1,"322":1,"339":1,"357":1,"358":2,"360":1,"413":1,"415":1,"445":1,"450":1,"453":1,"482":1,"506":1,"531":1,"535":1,"589":1}}],["зная",{"2":{"59":1,"185":1,"291":1}}],["здравом",{"2":{"200":1}}],["здравым",{"2":{"16":1}}],["здесь",{"0":{"64":1,"374":1},"2":{"3":1,"5":1,"12":1,"61":1,"64":1,"126":2,"132":1,"136":1,"138":1,"140":1,"142":2,"143":1,"145":2,"147":1,"148":1,"150":1,"152":2,"155":1,"158":1,"159":2,"160":2,"167":1,"168":2,"177":1,"178":1,"179":3,"180":5,"181":1,"184":1,"196":1,"198":4,"211":1,"218":1,"219":2,"220":1,"223":2,"225":4,"227":3,"228":1,"232":1,"241":2,"243":1,"246":1,"248":1,"251":1,"269":1,"273":1,"278":1,"291":2,"297":1,"298":1,"306":1,"308":1,"313":1,"314":1,"318":1,"319":2,"328":2,"333":1,"334":2,"337":1,"349":1,"362":3,"368":1,"369":1,"401":1,"407":1,"410":1,"413":2,"416":1,"420":1,"421":1,"422":1,"445":1,"450":1,"453":1,"454":2,"465":1,"468":1,"478":2}}],["зазываниях",{"2":{"484":1}}],["зажимает",{"2":{"482":1}}],["зафиксирован",{"2":{"465":1}}],["зафиксированное",{"2":{"33":1}}],["зашифрованных",{"2":{"416":1}}],["зашифрованном",{"2":{"415":1}}],["заинтересованные",{"2":{"377":1}}],["заимствован",{"2":{"195":1}}],["займет",{"2":{"233":1}}],["застывший",{"2":{"327":1}}],["застыть",{"2":{"327":1}}],["заставки",{"2":{"590":1}}],["заставка",{"2":{"298":1,"570":1,"590":2}}],["заставляя",{"2":{"261":1}}],["заставляет",{"2":{"247":1,"327":1}}],["заставлять",{"2":{"123":1}}],["заставив",{"2":{"284":1}}],["заставить",{"2":{"275":1,"276":1,"281":1,"285":1,"306":1,"320":1}}],["заставим",{"2":{"226":1}}],["заставили",{"2":{"22":1,"318":1}}],["заслуживает",{"2":{"218":1}}],["заумной",{"2":{"201":1}}],["заодно",{"2":{"189":1}}],["занят",{"2":{"327":1}}],["занятость",{"2":{"258":1}}],["занято",{"2":{"258":1}}],["занять",{"2":{"258":1,"479":1}}],["занята",{"2":{"258":2}}],["заняв",{"2":{"180":1}}],["заново",{"2":{"242":1}}],["занимающие",{"2":{"474":1,"575":1}}],["занимающиеся",{"2":{"444":1}}],["занимаются",{"2":{"479":1}}],["занимают",{"2":{"132":1,"263":1,"348":1,"429":1}}],["занимать",{"2":{"319":2}}],["заниматься",{"2":{"65":1}}],["занимается",{"2":{"183":1,"239":1}}],["занимает",{"2":{"96":1,"133":1,"155":1,"226":1,"327":2,"511":1,"515":1,"528":1}}],["залог",{"2":{"249":1}}],["залогинился",{"2":{"123":1,"478":1}}],["заложим",{"2":{"235":1}}],["заложили",{"2":{"177":1}}],["заблокировать",{"2":{"368":1}}],["забрасывается",{"2":{"286":1}}],["заботу",{"2":{"482":1}}],["заботы",{"2":{"468":1}}],["заботитесь",{"2":{"428":1}}],["забот",{"2":{"222":1}}],["заботятся",{"2":{"145":1,"376":1}}],["забыл",{"2":{"487":1}}],["забывает",{"2":{"268":1}}],["забывать",{"2":{"152":1}}],["забыть",{"2":{"199":1,"218":1,"474":1}}],["забудьте",{"2":{"182":1}}],["защищенную",{"2":{"420":1}}],["защищенному",{"2":{"292":1,"420":1}}],["защищенное",{"2":{"291":1}}],["защищать",{"2":{"152":1}}],["защит",{"2":{"404":1,"415":1}}],["защитить",{"2":{"391":1}}],["защите",{"2":{"153":1}}],["защита",{"0":{"152":1},"2":{"139":1,"415":1}}],["защиты",{"2":{"125":1,"139":1,"416":1}}],["зачем",{"0":{"457":1},"2":{"132":1,"226":1,"303":1,"407":1,"478":1,"481":1}}],["зачастую",{"2":{"44":1,"279":1,"286":1,"287":1,"353":1,"445":1,"479":1}}],["загуглите",{"2":{"484":1}}],["заглянуть",{"2":{"317":1,"430":1}}],["заглавными",{"2":{"171":1,"174":1}}],["загрязнять",{"2":{"407":1}}],["загромождает",{"2":{"160":1}}],["загружен",{"2":{"183":1,"260":1,"404":1}}],["загружено",{"2":{"140":1}}],["загружают",{"2":{"407":1}}],["загружаются",{"2":{"260":1}}],["загружаясь",{"2":{"426":1}}],["загружая",{"2":{"407":1}}],["загружает",{"2":{"179":1,"285":1,"357":1}}],["загружаемого",{"2":{"508":1}}],["загружаем",{"2":{"90":1,"104":1,"109":1,"115":1,"121":1}}],["загружать",{"2":{"145":1,"158":1,"168":1,"183":1}}],["загружаться",{"2":{"132":1,"180":1,"357":1}}],["загрузчик",{"2":{"357":1}}],["загрузился",{"2":{"297":2}}],["загрузит",{"2":{"158":2,"401":1}}],["загрузить",{"2":{"83":1,"144":1,"151":1,"285":1,"357":2,"379":1,"399":1,"451":1,"455":1}}],["загрузке",{"2":{"220":1,"261":1,"272":1,"273":2,"396":1,"407":1,"430":1,"446":1,"492":1}}],["загрузку",{"2":{"180":1,"218":1,"301":1,"357":1,"404":1,"418":1,"483":1}}],["загрузка",{"2":{"128":1,"357":2,"396":1,"399":1,"400":1,"407":1,"438":1,"459":1}}],["загрузки",{"0":{"127":1},"2":{"126":1,"127":1,"180":1,"181":1,"260":2,"285":3,"300":1,"327":2,"357":2,"396":2,"399":2,"404":1,"426":1,"446":1,"474":1,"575":1,"590":1}}],["заголовки",{"2":{"341":1,"419":2}}],["заголовках",{"2":{"419":1}}],["заголовка",{"2":{"295":1,"368":1,"416":1}}],["заголовком",{"2":{"228":1,"267":1,"276":1,"298":1,"561":1}}],["заголовков",{"2":{"125":1}}],["заголовок",{"2":{"187":3,"311":1,"368":1,"369":1,"410":1,"419":1}}],["загорается",{"2":{"111":1}}],["захваченного",{"2":{"453":1}}],["захват",{"2":{"453":1}}],["захватывая",{"2":{"265":1}}],["захвата",{"2":{"187":1,"246":1}}],["захостите",{"2":{"491":1}}],["захостить",{"2":{"124":1,"425":1}}],["захотеть",{"2":{"156":1}}],["захотим",{"2":{"48":1,"114":1}}],["захардкодим",{"2":{"108":1}}],["замаскированная",{"0":{"285":1}}],["замаскирована",{"2":{"280":1}}],["замаскировать",{"2":{"252":1}}],["заманить",{"2":{"278":1}}],["заморозить",{"2":{"233":1}}],["заморожено",{"2":{"232":1}}],["заморочки",{"2":{"123":1}}],["заморочится",{"2":{"96":1}}],["заморачиваться",{"2":{"124":1}}],["замедление",{"2":{"399":1}}],["заметка",{"2":{"491":1}}],["заметку",{"2":{"338":1}}],["заметки",{"2":{"337":1,"338":1,"352":1,"492":1}}],["заметок",{"2":{"337":1,"338":2}}],["заметным",{"2":{"259":1}}],["заметное",{"2":{"133":1}}],["заметьте",{"2":{"219":1,"233":1,"284":1,"322":1,"351":1,"465":1}}],["заметите",{"2":{"338":1}}],["заметить",{"2":{"160":1,"228":1,"234":1,"340":1,"401":1,"410":2,"448":1,"462":1}}],["заметим",{"2":{"293":1}}],["заметили",{"2":{"218":1,"448":1}}],["замечаниями",{"2":{"362":1}}],["замечание",{"2":{"4":1,"65":1,"105":1,"319":1,"339":1}}],["замечаем",{"2":{"227":1}}],["замечательную",{"2":{"414":1}}],["замечательно",{"0":{"183":1}}],["замечательным",{"2":{"157":1}}],["замену",{"2":{"474":2,"482":1,"485":1}}],["замены",{"2":{"195":1,"474":1}}],["заменяет",{"2":{"412":1}}],["заменяем",{"2":{"88":1,"89":1}}],["заменяются",{"2":{"170":1}}],["заменяющий",{"2":{"126":1}}],["заменяя",{"2":{"142":1}}],["замена",{"2":{"126":2,"234":1,"474":1}}],["заменой",{"2":{"104":1,"515":1}}],["заменится",{"2":{"168":1}}],["замените",{"2":{"167":1}}],["заменить",{"2":{"122":1,"130":1,"483":1,"490":2,"563":1}}],["заменим",{"2":{"104":2}}],["заменив",{"2":{"82":1,"233":1,"318":1}}],["заменено",{"2":{"157":1}}],["заменен",{"2":{"130":2,"362":1}}],["замене",{"2":{"41":1,"83":1}}],["заранее",{"2":{"492":1}}],["заработать",{"2":{"62":1,"63":1}}],["зародились",{"2":{"155":1}}],["заряде",{"2":{"123":1}}],["зарегистрируйте",{"2":{"491":1}}],["зарегистрирует",{"2":{"272":1}}],["зарегистрировали",{"2":{"417":1,"418":1}}],["зарегистрировано",{"2":{"416":1}}],["зарегистрированной",{"2":{"421":1}}],["зарегистрированное",{"2":{"219":1}}],["зарегистрированным",{"2":{"368":1}}],["зарегистрированных",{"2":{"59":1,"413":1}}],["зарегистрирован",{"2":{"142":1,"299":1,"420":1}}],["зарегистрировать",{"2":{"95":1,"219":1,"223":1,"300":1,"368":1}}],["зарегистрироваться",{"2":{"58":1,"416":1,"491":1}}],["зарекомендовавшие",{"2":{"155":1}}],["зарекомендовавшую",{"2":{"39":1}}],["зарезервированный",{"2":{"266":1}}],["зарезервированных",{"2":{"142":1}}],["зарезервированное",{"2":{"142":1,"160":1,"329":1}}],["запишем",{"2":{"352":1}}],["записывается",{"2":{"422":1}}],["записываются",{"2":{"172":1}}],["записью",{"2":{"339":1}}],["запись",{"2":{"142":2,"339":1}}],["записать",{"2":{"142":1,"319":1}}],["записанный",{"2":{"123":1}}],["записи",{"0":{"142":1},"1":{"144":1},"2":{"59":1,"123":1,"142":4,"154":1,"160":1,"321":1,"334":1,"422":1}}],["записей",{"2":{"48":1,"142":2,"153":1,"266":1,"447":1}}],["запятыми",{"2":{"339":1}}],["запятой",{"2":{"142":1}}],["запланированных",{"2":{"334":1}}],["запланированы",{"2":{"224":1}}],["запущен",{"2":{"327":1,"479":1}}],["запутывающее",{"2":{"478":1}}],["запутывает",{"2":{"247":1}}],["запутанным",{"2":{"453":1}}],["запутать",{"2":{"315":1}}],["запустили",{"2":{"453":1}}],["запустив",{"2":{"410":2}}],["запустим",{"2":{"158":1,"299":1}}],["запустится",{"2":{"456":1}}],["запустит",{"2":{"179":1,"180":1}}],["запустите",{"2":{"152":1,"187":1,"444":1,"459":1}}],["запустить",{"2":{"59":1,"124":2,"151":1,"179":3,"182":1,"298":1,"311":1,"336":1,"345":1,"430":1,"448":2,"450":1,"456":2,"460":1,"462":1,"466":1,"483":1}}],["запуском",{"2":{"467":1}}],["запуске",{"2":{"291":1,"295":1,"322":1,"356":1,"357":1,"401":1,"432":1,"451":1,"476":1,"492":2}}],["запуск",{"0":{"536":1},"2":{"180":1,"298":1,"314":1,"442":1,"444":1,"448":1}}],["запуску",{"2":{"152":1}}],["запускалось",{"2":{"492":1}}],["запускают",{"2":{"467":1}}],["запускаются",{"2":{"160":1,"430":1}}],["запускаться",{"2":{"327":1}}],["запускать",{"2":{"180":3,"261":1,"327":1,"410":2,"422":1,"448":1,"451":1,"459":1,"587":1}}],["запускается",{"2":{"327":1,"421":1,"429":1}}],["запускает",{"2":{"158":1,"298":2,"407":1,"413":1,"467":1}}],["запускаем",{"2":{"121":1,"307":1,"308":1,"368":1}}],["запуска",{"0":{"127":1},"2":{"126":1,"127":1,"130":2,"298":1,"306":1,"311":1,"340":1,"377":1,"420":2,"446":1,"447":2,"456":1}}],["запасного",{"2":{"168":1}}],["заполнено",{"2":{"478":1}}],["заполнен",{"2":{"410":1}}],["заполнения",{"2":{"247":1,"368":1}}],["заполняется",{"2":{"408":1}}],["заполнял",{"2":{"362":1}}],["заполнять",{"2":{"296":1}}],["заполняющего",{"2":{"276":1}}],["заполнителя",{"2":{"338":1}}],["заполнить",{"2":{"219":1}}],["заполним",{"2":{"187":1}}],["заполнили",{"2":{"85":1}}],["запоминается",{"2":{"591":1}}],["запоминаемость",{"2":{"249":1}}],["запоминанием",{"2":{"416":1}}],["запоминать",{"2":{"177":1}}],["запомнить",{"2":{"226":1,"254":1}}],["запомните",{"2":{"159":1}}],["запрограммировать",{"2":{"467":1}}],["запрограммированной",{"2":{"299":1}}],["запрошенное",{"2":{"227":1}}],["запрошен",{"2":{"125":1}}],["запросом",{"2":{"492":1}}],["запросов",{"2":{"11":1,"40":1,"56":1,"59":1,"122":1,"125":1,"138":2,"145":1,"146":1,"345":3,"413":1,"414":1,"508":1,"546":1}}],["запросу",{"2":{"269":1,"414":1,"458":1}}],["запросить",{"2":{"256":1,"422":1}}],["запросами",{"2":{"207":1}}],["запросам",{"2":{"125":1}}],["запроса",{"2":{"122":1,"125":4,"298":1,"331":1,"334":1,"338":1,"341":1,"342":1,"343":2,"345":3,"407":2,"409":1,"413":1,"414":1,"416":1,"417":2,"418":2,"421":1,"424":1,"492":1}}],["запросы",{"2":{"47":1,"50":1,"51":1,"56":2,"59":2,"82":1,"138":1,"143":1,"145":1,"146":1,"211":1,"345":2,"430":2,"492":2}}],["запросе",{"2":{"47":1,"122":1,"123":2,"345":1}}],["запрос",{"2":{"41":1,"51":1,"59":1,"83":1,"122":1,"125":3,"143":1,"145":1,"147":1,"179":1,"298":3,"299":1,"336":1,"340":2,"341":1,"343":1,"345":1,"415":1,"421":1,"455":1,"508":3}}],["запрещены",{"2":{"123":1}}],["запрашивают",{"2":{"319":1}}],["запрашивающий",{"2":{"123":1,"422":1}}],["запрашиваем",{"2":{"422":1}}],["запрашиваемая",{"2":{"419":1}}],["запрашиваемого",{"2":{"125":1,"321":1}}],["запрашиваемому",{"2":{"123":1}}],["запрашивает",{"2":{"125":1,"286":1}}],["запрашивать",{"2":{"122":1,"124":1}}],["завернуть",{"2":{"233":1}}],["завершится",{"2":{"465":1}}],["завершиться",{"2":{"444":1}}],["завершить",{"2":{"368":3}}],["завершая",{"2":{"465":1}}],["завершаться",{"2":{"327":1}}],["завершают",{"2":{"319":1}}],["завершает",{"2":{"191":1,"448":1}}],["завершена",{"2":{"327":1}}],["завершенного",{"2":{"299":1}}],["завершенные",{"2":{"187":2}}],["завершенных",{"2":{"187":1}}],["завершению",{"2":{"368":1}}],["завершение",{"2":{"312":1}}],["завершении",{"2":{"232":1}}],["завершения",{"2":{"185":1,"232":1,"327":1,"328":1,"344":1,"451":1,"459":1}}],["завис",{"2":{"258":1}}],["зависеть",{"2":{"232":1,"418":1}}],["зависанию",{"2":{"232":1}}],["зависящая",{"2":{"483":1}}],["зависящей",{"2":{"247":1}}],["зависящих",{"2":{"232":1}}],["зависящие",{"2":{"187":1,"482":1}}],["зависят",{"2":{"191":1,"240":1,"291":1}}],["зависимой",{"2":{"213":1,"220":1}}],["зависимое",{"2":{"156":1}}],["зависимостями",{"2":{"180":1,"215":1,"236":1}}],["зависимость",{"2":{"96":1,"215":1,"217":1,"218":3,"219":3,"220":1,"300":1,"367":1,"368":2,"455":1,"456":1,"478":1,"484":1,"490":2,"538":1}}],["зависимостей",{"0":{"213":1,"484":1},"1":{"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1},"2":{"89":1,"156":1,"171":1,"179":1,"180":2,"191":1,"213":1,"214":1,"215":1,"217":2,"218":3,"219":2,"221":1,"227":1,"308":1,"354":1,"359":1,"360":1,"361":1,"365":1,"371":1,"446":1,"447":1,"474":1,"482":2,"515":1,"538":1,"576":1}}],["зависимости",{"0":{"360":1},"2":{"23":2,"56":1,"96":2,"123":1,"126":1,"142":1,"151":1,"156":2,"159":1,"160":1,"164":1,"179":3,"180":1,"181":1,"187":1,"193":1,"203":2,"207":1,"213":1,"214":1,"215":1,"217":2,"218":4,"220":2,"223":1,"225":1,"235":1,"256":1,"271":1,"298":1,"319":1,"327":2,"337":2,"340":1,"344":1,"356":1,"357":1,"362":1,"364":1,"401":1,"415":1,"426":1,"442":1,"447":1,"451":1,"455":2,"460":1,"463":1,"491":1,"492":1,"541":1}}],["зависит",{"2":{"117":1,"122":1,"125":1,"128":1,"156":1,"157":1,"191":1,"217":1,"246":1,"415":2,"416":1,"421":1,"442":1,"457":1,"467":1,"541":1}}],["завоевать",{"2":{"96":1}}],["завязанные",{"2":{"39":1}}],["закэшировать",{"2":{"492":1}}],["закладывающих",{"2":{"289":1}}],["заключаться",{"2":{"320":1}}],["заключает",{"2":{"202":1}}],["заключается",{"2":{"156":4,"160":1,"168":1,"183":1,"185":1,"198":1,"199":1,"201":1,"215":1,"220":2,"224":1,"228":1,"234":1,"254":1,"255":2,"256":1,"261":1,"268":1,"271":1,"277":1,"278":1,"279":1,"281":1,"289":1,"319":2,"345":1,"351":1,"364":1,"369":1,"407":2,"420":1,"421":1,"436":1,"449":1,"450":1,"452":1,"453":1,"454":1,"476":1}}],["заключенного",{"2":{"158":1}}],["заключена",{"2":{"34":1}}],["закрываем",{"2":{"370":1}}],["закрывать",{"2":{"368":1}}],["закрытых",{"2":{"422":1}}],["закрытым",{"2":{"415":1}}],["закрытый",{"2":{"396":1}}],["закрытие",{"2":{"368":1}}],["закрытия",{"2":{"240":1,"246":1}}],["закрыть",{"2":{"283":2}}],["закрепления",{"2":{"303":1}}],["закрепить",{"2":{"176":1,"235":1,"424":1}}],["закомитьте",{"2":{"465":1}}],["закоммичен",{"2":{"465":1}}],["закоммитьте",{"2":{"465":1}}],["закоммитили",{"2":{"463":1}}],["закомментируем",{"2":{"121":1}}],["закодированное",{"2":{"335":1}}],["закодированные",{"2":{"220":1,"416":1}}],["законченный",{"2":{"491":1}}],["закончите",{"2":{"375":1}}],["закончить",{"2":{"343":1}}],["закончила",{"2":{"313":1}}],["закончилась",{"2":{"139":1}}],["закончили",{"2":{"302":1,"368":1}}],["законодательством",{"2":{"415":1}}],["закономерности",{"2":{"287":1}}],["законом",{"2":{"248":1}}],["законе",{"2":{"246":1,"247":1}}],["закона",{"2":{"246":2,"247":2}}],["законы",{"0":{"245":1},"2":{"245":1,"248":1}}],["закон",{"0":{"246":1,"247":1},"2":{"156":1,"246":1,"247":1,"455":1}}],["заканчивается",{"2":{"319":1}}],["заканчивая",{"2":{"67":2,"153":1,"159":1,"192":1,"194":1,"273":1,"351":1,"423":1}}],["заказа",{"2":{"277":2}}],["заказами",{"2":{"59":1}}],["заказчик",{"2":{"483":1,"487":1}}],["заказчика",{"2":{"73":1}}],["заказчиком",{"2":{"9":1,"12":1}}],["заказ",{"2":{"12":1,"435":1,"476":1}}],["заказов",{"2":{"12":1,"36":1,"70":1}}],["заказываете",{"2":{"26":1}}],["заказы",{"2":{"4":1,"59":1,"114":1}}],["закупаете",{"2":{"26":1}}],["затушевывает",{"2":{"356":1}}],["зато",{"2":{"232":1}}],["затронуть",{"2":{"410":1}}],["затронуты",{"2":{"339":1}}],["затронуло",{"2":{"134":1}}],["затруднение",{"2":{"399":1}}],["затруднена",{"2":{"313":1}}],["затрудняет",{"2":{"268":1,"306":1,"318":1,"319":1}}],["затраченные",{"2":{"340":1}}],["затрагиваемым",{"2":{"502":1}}],["затрагивает",{"2":{"134":1}}],["затрагивая",{"2":{"463":1,"464":1}}],["затрагивают",{"2":{"126":1}}],["затраты",{"2":{"209":1}}],["затратно",{"2":{"41":1}}],["затратами",{"2":{"40":1,"483":1}}],["затрат",{"2":{"12":1,"291":1,"327":1}}],["затем",{"2":{"6":1,"96":1,"98":1,"123":1,"124":1,"127":1,"129":1,"130":1,"142":1,"151":1,"158":2,"180":1,"187":1,"194":1,"212":2,"214":1,"220":1,"224":2,"230":1,"234":1,"240":1,"271":2,"279":1,"299":4,"313":1,"316":1,"319":1,"321":2,"325":1,"327":2,"335":2,"338":1,"353":1,"363":3,"368":2,"371":1,"375":1,"407":2,"408":1,"414":1,"416":2,"418":1,"419":1,"420":3,"421":1,"422":1,"428":1,"448":2,"452":1,"453":2,"456":1,"459":1,"465":2,"467":1,"492":3}}],["задумываемся",{"2":{"272":1}}],["задумал",{"2":{"249":1,"276":1,"283":1}}],["задуман",{"2":{"184":1}}],["задуматься",{"2":{"130":1}}],["задает",{"2":{"474":1}}],["задаем",{"2":{"259":1,"341":1}}],["зададим",{"2":{"407":1}}],["задаст",{"2":{"344":1}}],["заданными",{"2":{"410":1}}],["заданный",{"2":{"294":1}}],["заданное",{"2":{"448":1}}],["заданного",{"2":{"232":1,"420":1}}],["заданном",{"2":{"158":1}}],["заданному",{"2":{"124":1,"368":1}}],["задание",{"2":{"227":1,"258":2}}],["заданиями",{"2":{"370":1}}],["задания",{"2":{"217":1}}],["заданий",{"2":{"187":1}}],["задаются",{"2":{"180":1}}],["задавать",{"2":{"341":1}}],["задаваемые",{"2":{"267":1,"502":1}}],["задав",{"2":{"144":1}}],["задать",{"2":{"123":1,"482":2,"483":1,"517":1}}],["задачу",{"2":{"187":1,"444":1,"542":1}}],["задачей",{"2":{"407":1,"457":1,"482":1}}],["задаче",{"2":{"185":1,"188":1}}],["задач",{"2":{"14":1,"73":1,"75":1,"112":1,"180":1,"185":1,"187":6,"194":1,"202":1,"224":1,"225":1,"248":2,"255":1,"258":1,"271":1,"331":1,"334":1,"370":1,"413":1,"422":1,"541":3}}],["задачи",{"0":{"66":1},"1":{"67":1,"68":1,"69":1,"70":1},"2":{"12":1,"70":1,"73":1,"185":2,"187":3,"188":1,"196":1,"202":1,"230":1,"247":1,"327":2,"332":1,"422":1,"442":1,"444":1,"457":1}}],["задачами",{"2":{"237":1}}],["задача",{"2":{"11":1,"12":1,"187":1,"231":1,"240":1,"241":1,"242":1,"265":1,"364":1,"400":1,"421":1,"430":1,"445":1,"447":2}}],["задержкам",{"2":{"357":1}}],["задержка",{"2":{"336":1}}],["задеплоится",{"2":{"121":1}}],["задействовано",{"2":{"442":1}}],["задействовать",{"0":{"124":1},"2":{"23":1,"492":1}}],["задействуем",{"2":{"17":1}}],["задокументированный",{"2":{"68":1}}],["задокументировать",{"2":{"9":1}}],["за",{"0":{"243":1},"2":{"2":1,"6":1,"41":1,"50":1,"96":4,"114":1,"121":1,"122":1,"123":1,"130":1,"138":1,"141":1,"143":1,"155":1,"156":1,"160":1,"164":1,"168":3,"174":1,"178":1,"180":1,"181":1,"183":1,"196":1,"197":1,"198":3,"199":1,"200":1,"201":1,"217":1,"218":1,"222":1,"223":1,"227":1,"231":2,"232":1,"239":1,"243":1,"256":1,"260":1,"261":3,"271":3,"277":1,"289":1,"299":1,"300":1,"304":1,"308":1,"319":2,"327":4,"331":1,"338":1,"340":1,"348":1,"350":2,"352":1,"362":1,"371":1,"380":2,"384":1,"404":1,"407":2,"413":1,"414":1,"415":7,"419":1,"422":2,"430":1,"436":1,"438":2,"445":1,"448":1,"457":1,"463":1,"466":3,"474":2,"476":1,"478":4,"482":6,"483":1,"491":1,"515":1,"542":1,"575":1,"591":1}}],["тёмной",{"2":{"591":1}}],["тише",{"2":{"430":1}}],["типом",{"2":{"293":1,"358":1}}],["типографика",{"2":{"244":1}}],["типографики",{"2":{"239":1,"241":1,"243":1}}],["типов",{"2":{"130":1,"213":1,"251":2,"253":1,"327":1,"362":1,"444":1,"478":1,"479":1,"588":1}}],["типичного",{"2":{"260":2}}],["типичный",{"2":{"260":1}}],["типичными",{"2":{"181":1}}],["типизировать",{"2":{"438":1}}],["типизированным",{"2":{"196":1}}],["типизируем",{"2":{"23":1}}],["типизация",{"0":{"93":1}}],["типе",{"2":{"145":1,"289":1}}],["тип",{"2":{"142":1,"145":2,"152":1,"244":1,"296":1,"328":1,"340":2,"343":1,"345":1,"358":1,"407":1,"410":1,"414":1,"416":3,"462":1,"490":1}}],["типу",{"2":{"130":1}}],["типыref",{"2":{"478":1}}],["типы",{"0":{"17":1},"1":{"18":1,"19":1},"2":{"16":1,"26":1,"92":1,"93":1,"100":1,"131":1,"142":1,"166":1,"253":1,"266":1,"306":1,"328":1,"358":1,"360":1,"448":1,"478":1,"554":1}}],["типам",{"2":{"239":1}}],["типами",{"2":{"130":1}}],["типах",{"2":{"153":1,"358":1}}],["типа",{"2":{"11":1,"17":2,"50":1,"62":1,"125":1,"152":1,"159":1,"203":1,"232":1,"337":1,"340":1,"358":1,"360":1,"399":1,"422":1,"425":1,"426":1,"429":1,"483":1,"490":3,"491":2,"492":1,"562":1,"588":1}}],["твердые",{"2":{"325":1}}],["творчества",{"2":{"202":1}}],["творческим",{"2":{"354":1}}],["творчески",{"2":{"26":1,"447":1}}],["творческие",{"0":{"26":1}}],["твой",{"2":{"123":1,"124":1,"430":1}}],["твоего",{"2":{"123":1}}],["твоему",{"2":{"123":1,"124":1}}],["твоем",{"2":{"123":1,"430":1}}],["тяжеловеса",{"2":{"474":1,"575":1}}],["тяжеловесности",{"2":{"470":1}}],["тяжелые",{"2":{"327":1}}],["тяжелыми",{"2":{"327":1}}],["тяжелым",{"2":{"251":1}}],["тяжесть",{"2":{"151":1}}],["тщательного",{"2":{"436":1,"476":1}}],["тщательно",{"2":{"249":1,"275":1,"445":1}}],["тщательную",{"2":{"108":1}}],["тканей",{"2":{"194":1}}],["тысячи",{"2":{"231":1,"274":1}}],["тысяч",{"2":{"142":1,"196":1}}],["ты",{"2":{"96":1,"98":2,"123":1,"483":1}}],["тупиковой",{"2":{"492":1}}],["тумблер",{"2":{"252":4}}],["тумблеры",{"0":{"252":1},"2":{"252":1}}],["ту",{"2":{"187":1,"223":1,"311":1,"447":1}}],["туда",{"2":{"44":1,"124":1,"159":1,"486":1}}],["туториал",{"2":{"61":1}}],["тут",{"2":{"41":1,"65":1,"88":1,"114":1,"124":1,"521":1,"532":1}}],["тэгов",{"2":{"490":1}}],["тэг",{"2":{"23":1,"90":1,"104":1,"109":1,"115":1,"543":1}}],["тэги",{"2":{"16":1,"253":1,"570":1,"589":1}}],["тайлвинде",{"2":{"487":1}}],["таймстемпа",{"2":{"396":1}}],["таймер",{"2":{"336":1}}],["таймера",{"2":{"257":1,"420":1}}],["тайм",{"2":{"242":1,"334":1}}],["тарифы",{"2":{"425":1}}],["тарифных",{"2":{"280":1}}],["тараканов",{"0":{"278":1}}],["таблетками",{"2":{"253":1}}],["таблетки",{"0":{"253":1}}],["таблицу",{"2":{"180":1,"183":1}}],["таблицы",{"2":{"48":1,"59":1,"155":1,"180":1,"183":1,"213":1,"352":1,"399":1}}],["таблиц",{"2":{"47":3,"181":1,"260":1,"339":1}}],["таблицам",{"2":{"53":1,"59":1}}],["таблицами",{"2":{"47":1}}],["таблица",{"2":{"17":1,"130":1,"142":1,"145":1,"182":1,"296":1,"399":1,"436":1,"476":1}}],["таблицах",{"2":{"17":2,"47":1,"51":1}}],["таблицей",{"2":{"43":1}}],["таблице",{"2":{"16":1,"48":2,"59":1,"296":1,"399":1}}],["та",{"2":{"242":1,"269":1,"282":1,"419":1}}],["там",{"2":{"29":1,"124":1,"308":1,"369":1,"396":2,"430":1,"478":1,"479":1,"549":1}}],["такая",{"2":{"199":1,"237":1,"264":1,"279":1,"407":1,"415":1,"416":1,"434":1,"436":1,"476":1}}],["такую",{"2":{"106":1,"158":1,"309":1,"414":1,"416":1,"457":1}}],["таком",{"2":{"357":1,"435":1,"476":1}}],["такому",{"2":{"142":1}}],["такого",{"2":{"160":1,"194":1,"207":1,"218":1,"260":1,"275":1,"291":1,"319":1,"340":1,"347":1,"399":2,"432":1,"476":1}}],["такова",{"2":{"285":1}}],["таковые",{"2":{"368":1,"413":1}}],["таковыми",{"2":{"490":1}}],["таковым",{"2":{"284":1}}],["таковы",{"2":{"156":1}}],["такового",{"2":{"123":1}}],["такое",{"0":{"202":1,"399":1,"444":1,"457":1},"2":{"96":2,"123":2,"124":1,"125":1,"138":1,"154":4,"155":1,"156":2,"158":1,"168":1,"176":1,"233":1,"236":1,"237":1,"242":1,"272":1,"279":1,"288":2,"289":1,"291":1,"303":2,"324":2,"327":2,"331":1,"332":1,"347":1,"353":2,"372":1,"394":1,"396":1,"399":2,"422":1,"469":2,"478":1,"479":1,"482":1,"483":1,"490":1,"492":1}}],["такой",{"2":{"17":1,"96":1,"146":1,"152":1,"160":1,"195":1,"196":1,"217":1,"221":1,"234":1,"237":1,"257":1,"264":2,"273":1,"275":1,"277":1,"291":1,"311":1,"330":1,"348":1,"359":1,"363":1,"408":1,"416":1,"450":1,"453":1,"454":1,"481":1,"492":1}}],["также",{"2":{"63":1,"95":1,"108":1,"109":1,"114":1,"121":1,"123":3,"124":1,"126":3,"127":1,"134":2,"135":2,"141":1,"142":3,"147":1,"151":1,"152":4,"153":2,"155":2,"156":3,"159":3,"160":1,"161":2,"167":2,"168":2,"174":1,"178":2,"180":5,"182":1,"184":2,"186":1,"187":8,"188":1,"189":3,"192":1,"195":1,"196":2,"198":1,"201":1,"202":1,"207":1,"211":1,"212":1,"217":2,"220":1,"222":2,"224":3,"226":1,"227":2,"228":1,"229":1,"230":2,"231":1,"233":1,"234":2,"237":1,"243":2,"244":1,"246":1,"248":1,"249":2,"252":1,"255":1,"267":1,"273":1,"286":1,"287":2,"289":1,"291":1,"293":1,"296":1,"298":1,"299":2,"300":1,"301":3,"302":1,"306":1,"308":3,"309":1,"311":2,"313":1,"314":2,"316":1,"319":5,"322":2,"323":1,"325":4,"327":2,"329":1,"331":1,"333":1,"334":2,"335":1,"337":2,"338":1,"339":1,"340":2,"345":3,"346":2,"348":1,"358":1,"360":2,"362":2,"364":1,"367":1,"368":1,"369":2,"371":1,"375":2,"377":1,"387":1,"389":1,"390":2,"397":1,"399":1,"402":3,"404":5,"407":2,"408":2,"410":7,"413":1,"415":1,"416":4,"417":1,"419":1,"420":2,"422":5,"423":3,"425":1,"429":1,"430":1,"438":1,"445":2,"447":1,"448":1,"450":1,"453":2,"454":1,"455":2,"456":1,"457":1,"458":1,"463":3,"465":1,"466":3,"467":1,"468":3,"478":2,"479":1,"482":2,"483":1,"485":1,"490":2,"491":5,"492":1,"500":1,"508":2,"515":1,"535":1,"542":1,"582":1}}],["таки",{"2":{"59":1,"491":1,"492":1}}],["такие",{"2":{"43":1,"62":1,"74":1,"82":1,"135":1,"142":2,"156":1,"166":2,"181":1,"192":1,"231":1,"239":1,"240":1,"257":1,"266":1,"277":2,"340":1,"349":1,"357":2,"358":1,"360":1,"362":2,"414":1,"422":2,"423":1,"435":3,"448":1,"453":1,"463":1,"466":1,"476":3,"542":1}}],["такими",{"2":{"183":1,"194":1,"198":1,"239":1,"257":1,"362":1,"377":1,"399":1,"546":1}}],["таким",{"2":{"17":1,"36":1,"48":1,"56":1,"96":1,"123":2,"124":1,"133":1,"157":1,"158":1,"165":1,"182":1,"184":1,"187":1,"212":2,"218":1,"226":1,"229":1,"234":1,"239":1,"241":1,"243":1,"266":1,"279":1,"280":1,"299":1,"306":1,"328":1,"339":1,"341":1,"356":1,"359":1,"360":1,"363":1,"400":1,"404":1,"408":1,"413":1,"416":1,"447":1,"450":1,"451":1,"453":1,"466":1,"483":1,"490":1}}],["таких",{"2":{"2":1,"4":1,"22":1,"72":1,"151":1,"181":2,"196":1,"234":2,"239":1,"240":1,"245":1,"248":1,"250":1,"251":1,"258":1,"261":2,"273":1,"277":1,"291":1,"298":1,"313":1,"319":1,"364":1,"399":1,"404":1,"407":1,"414":2,"416":2,"442":1,"448":1,"449":1,"457":1,"463":1}}],["так",{"0":{"128":1},"2":{"9":2,"11":1,"14":1,"16":1,"22":1,"26":2,"32":1,"44":1,"62":1,"63":1,"69":1,"104":1,"106":1,"111":1,"112":1,"113":1,"122":1,"123":1,"126":1,"133":1,"138":1,"143":1,"151":1,"155":1,"156":1,"157":2,"160":3,"164":2,"174":1,"177":2,"178":2,"179":1,"180":3,"181":1,"182":1,"183":3,"184":2,"186":1,"187":4,"188":1,"190":1,"194":1,"196":1,"199":2,"201":1,"202":1,"220":1,"221":1,"223":1,"228":3,"232":1,"234":1,"235":1,"236":2,"237":1,"239":2,"242":1,"246":1,"247":1,"248":1,"253":1,"257":1,"264":1,"269":1,"272":2,"279":1,"284":1,"289":1,"291":3,"301":1,"302":1,"309":1,"312":1,"313":3,"315":1,"318":1,"319":2,"320":1,"322":1,"327":2,"329":1,"331":1,"334":1,"337":1,"340":2,"341":1,"343":1,"345":2,"357":1,"362":4,"363":1,"368":2,"396":3,"399":3,"415":2,"416":2,"418":1,"419":1,"420":2,"422":1,"429":1,"430":1,"444":1,"445":1,"447":2,"448":2,"449":1,"450":1,"451":1,"453":2,"455":1,"458":2,"462":1,"463":1,"465":1,"474":1,"478":3,"479":1,"483":1,"491":4,"492":3,"502":2,"508":1,"541":1,"543":1,"545":1,"573":1,"578":2}}],["теcты",{"2":{"479":1}}],["тень",{"2":{"483":1}}],["тенденции",{"2":{"490":1}}],["тенденция",{"2":{"276":1}}],["тенденцию",{"2":{"196":1,"457":1}}],["теневым",{"2":{"275":1}}],["теоретическая",{"2":{"333":1}}],["теоретические",{"2":{"177":1,"483":1}}],["теоретически",{"2":{"156":1,"178":1,"319":1,"453":1}}],["теории",{"2":{"232":2}}],["тесно",{"2":{"437":1}}],["тесной",{"2":{"296":1,"438":1}}],["тесную",{"2":{"220":1}}],["тестам",{"2":{"478":1}}],["тестами",{"2":{"455":2}}],["теста",{"2":{"444":1,"447":1,"452":2}}],["тестироваться",{"2":{"451":1}}],["тестировать",{"0":{"445":1},"2":{"444":1,"445":2,"450":1}}],["тестированию",{"2":{"442":1,"450":1}}],["тестировании",{"2":{"399":1,"449":1,"453":1,"454":1}}],["тестированием",{"2":{"153":1,"479":2}}],["тестирование",{"0":{"77":1,"297":1,"301":1,"390":1,"442":1,"444":1,"454":1,"479":1},"1":{"443":1,"444":1,"445":1,"446":1,"447":1,"448":1,"449":1,"450":1,"451":1,"452":1,"453":1,"454":1,"455":1,"456":1,"457":1,"458":1,"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1,"467":1,"468":1,"469":1},"2":{"72":1,"77":1,"151":1,"178":1,"180":1,"345":1,"442":1,"444":4,"445":1,"453":1,"467":1,"469":1,"479":2}}],["тестирования",{"0":{"344":1},"1":{"345":1},"2":{"50":1,"76":1,"124":1,"301":1,"325":2,"342":1,"344":1,"346":1,"354":1,"375":1,"390":1,"394":1,"396":1,"422":1,"442":1,"444":5,"445":4,"446":2,"447":2,"448":1,"449":1,"450":1,"451":3,"452":1,"456":1,"457":1,"469":2,"479":2,"537":1,"573":1}}],["тестирующее",{"2":{"444":1}}],["тестируемый",{"2":{"447":1}}],["тестируем",{"2":{"344":1}}],["тест",{"2":{"301":1,"342":1,"444":1,"448":3,"450":1,"453":1,"491":1}}],["тестовая",{"2":{"448":1}}],["тестовую",{"2":{"448":1}}],["тестового",{"2":{"442":1,"444":2,"445":1,"448":1,"456":1}}],["тестовой",{"2":{"442":1,"452":2}}],["тестовое",{"2":{"336":1}}],["тестовыми",{"2":{"448":1,"456":1}}],["тестовые",{"2":{"390":1,"447":1,"454":1}}],["тестовый",{"2":{"336":1,"342":1,"343":2,"446":2,"447":4,"449":1,"451":1,"454":2,"456":1}}],["тестовых",{"2":{"152":1,"445":1,"447":1,"448":2}}],["тестов",{"2":{"301":1,"442":2,"444":2,"445":1,"446":1,"447":3,"448":10,"452":1,"453":2,"456":1,"468":1,"479":3}}],["тесты",{"2":{"77":1,"301":1,"444":1,"447":1,"448":3,"450":2,"451":1,"453":1,"454":4,"456":1,"467":1,"479":7,"492":1}}],["тегом",{"2":{"407":1,"465":1}}],["тегов",{"2":{"229":1,"253":1,"362":1}}],["теги",{"0":{"253":1},"2":{"362":1}}],["теге",{"2":{"161":1,"181":1}}],["тег",{"2":{"157":1,"159":3,"160":1,"180":1,"181":2,"183":1,"228":1,"316":1,"356":1,"407":1}}],["тегами",{"2":{"362":1}}],["тега",{"2":{"157":2,"180":1,"182":1}}],["течение",{"2":{"142":1,"160":1,"319":2,"327":1,"420":1,"421":1}}],["течением",{"2":{"132":1,"363":1}}],["телеграм",{"0":{"503":1},"2":{"502":1}}],["телефонную",{"2":{"421":1}}],["телефона",{"2":{"420":1,"421":1}}],["телефон",{"2":{"420":1}}],["телефоны",{"2":{"291":1}}],["теле",{"2":{"122":1,"345":1}}],["телодвижения",{"2":{"123":1}}],["тело",{"2":{"98":1,"316":1}}],["тексты",{"2":{"420":1}}],["тексте",{"2":{"305":1,"465":1}}],["текстами",{"0":{"458":1}}],["текста",{"2":{"184":1,"187":3,"234":1,"241":1,"251":1,"259":1,"337":1,"370":1,"448":1,"575":1}}],["текстом",{"2":{"178":1,"183":1,"263":1}}],["текстовые",{"2":{"310":1,"399":1}}],["текстовых",{"2":{"290":1,"420":1}}],["текстовым",{"2":{"258":1}}],["текстовый",{"2":{"159":1,"178":1,"242":1,"256":1,"463":1,"492":1}}],["текстового",{"2":{"266":1,"420":1}}],["текстовом",{"2":{"254":1}}],["текстовое",{"2":{"100":1,"492":1}}],["текстовую",{"2":{"251":1}}],["текстов",{"0":{"390":1},"2":{"178":1,"180":2,"348":1,"456":1,"457":1}}],["текстовая",{"2":{"142":1}}],["текст",{"2":{"166":1,"251":1,"253":1,"254":1,"269":1,"276":1,"370":1,"408":1,"416":1,"437":1,"452":1,"492":2}}],["текущим",{"2":{"363":1}}],["текущий",{"2":{"179":1,"188":1,"369":1,"412":1}}],["текущей",{"2":{"396":1,"422":1,"462":1,"464":3,"465":2,"474":1,"535":1}}],["текущего",{"2":{"266":1,"367":1,"368":2,"422":1}}],["текущее",{"2":{"258":1,"264":1,"413":1}}],["текущему",{"2":{"160":1,"368":1,"413":1,"458":1}}],["текущем",{"2":{"51":1,"179":1,"299":1,"410":1,"413":1}}],["текущую",{"2":{"179":1,"255":1}}],["текущая",{"2":{"80":1}}],["тебе",{"2":{"96":2,"98":1,"483":1}}],["теряете",{"2":{"478":1}}],["термины",{"2":{"469":1}}],["терминологией",{"2":{"156":1}}],["терминов",{"2":{"156":1,"416":1}}],["термина",{"2":{"239":1}}],["терминала",{"2":{"178":1,"179":1,"344":1,"462":2}}],["терминал",{"2":{"151":1,"178":1,"459":1}}],["терминалом",{"2":{"145":1}}],["терминале",{"2":{"144":1,"179":3,"187":1,"300":1,"309":1,"340":1,"401":1,"461":2,"465":1}}],["терминами",{"2":{"139":2,"156":1,"287":1}}],["терминах",{"2":{"73":1}}],["термин",{"2":{"105":1,"141":1,"271":1,"289":1,"291":1}}],["терпимая",{"2":{"89":1}}],["те",{"2":{"88":1,"145":1,"161":1,"183":1,"192":1,"223":1,"228":1,"235":1,"306":1,"356":1,"365":1,"367":1,"399":1,"405":1,"412":1,"436":2,"455":1,"457":1}}],["техноологии",{"2":{"474":1}}],["технологиям",{"2":{"399":1}}],["технологиями",{"2":{"377":1}}],["технология",{"2":{"231":1,"291":1,"327":1,"346":1,"394":1,"399":1}}],["технологии",{"2":{"155":1,"191":1,"289":1,"291":2,"363":1,"376":1,"399":2,"422":1,"429":1,"436":1,"476":1,"491":2}}],["технологий",{"2":{"155":1,"231":2,"289":2,"291":4,"302":1,"399":3,"414":1,"422":3,"436":1,"467":1,"476":1,"541":1}}],["технической",{"2":{"515":1}}],["технического",{"2":{"489":1,"491":1}}],["техническим",{"2":{"74":1}}],["технический",{"0":{"23":1}}],["технически",{"2":{"12":1,"36":1}}],["технические",{"0":{"140":1,"178":1,"238":1,"290":1,"305":1,"326":1,"349":1,"398":1,"443":1},"2":{"9":1}}],["техник",{"2":{"542":1}}],["техника",{"2":{"261":2}}],["технику",{"2":{"261":1}}],["техники",{"2":{"191":1,"238":1,"338":1}}],["тех",{"2":{"64":1,"150":1,"156":1,"168":1,"180":1,"195":1,"201":1,"215":1,"232":1,"234":1,"251":1,"265":1,"278":1,"294":1,"312":1,"327":1,"351":1,"354":2,"356":1,"399":1,"407":2,"420":1,"422":1,"451":1,"458":1,"492":1}}],["теперь",{"0":{"129":1},"2":{"41":1,"82":1,"83":1,"89":1,"100":1,"104":1,"111":1,"121":2,"126":1,"127":2,"129":1,"131":1,"132":1,"133":2,"134":1,"135":1,"144":2,"151":2,"156":1,"160":3,"168":1,"178":1,"180":2,"181":1,"182":2,"183":1,"186":1,"187":3,"214":1,"215":1,"226":1,"228":2,"231":3,"233":2,"234":3,"261":1,"291":1,"298":2,"304":1,"307":1,"317":1,"321":1,"322":1,"327":1,"333":2,"334":1,"336":1,"342":1,"345":1,"351":1,"357":1,"359":2,"362":2,"364":1,"368":1,"369":1,"397":1,"399":3,"404":1,"405":1,"407":2,"410":1,"413":1,"419":1,"444":1,"446":1,"451":2,"452":1,"454":1,"463":1,"465":2}}],["темой",{"2":{"298":1,"362":1}}],["темную",{"2":{"506":1}}],["темная",{"2":{"274":1,"278":1,"279":1,"571":1}}],["темный",{"2":{"277":1,"291":1}}],["темные",{"0":{"275":1},"1":{"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"286":1},"2":{"275":1,"288":1}}],["темными",{"2":{"284":1}}],["темным",{"2":{"249":1}}],["темных",{"2":{"237":1,"274":1,"286":1,"287":1}}],["темной",{"2":{"515":1,"522":1}}],["темном",{"2":{"286":1}}],["темно",{"2":{"241":1}}],["темам",{"2":{"502":1}}],["тема",{"2":{"181":1,"297":1,"318":1,"571":1,"591":1}}],["теми",{"2":{"155":1,"220":1,"239":1,"345":1}}],["тему",{"2":{"138":1,"143":1,"151":1,"248":1,"362":1,"399":1,"444":1,"479":1,"506":1}}],["теме",{"2":{"123":1,"125":1,"151":1,"202":1,"457":1,"466":1,"478":1}}],["темы",{"0":{"591":1},"2":{"69":1,"95":1,"153":1,"155":1,"304":1,"325":2,"422":1,"437":2,"483":1,"540":1,"542":1,"573":1,"591":2}}],["тем",{"2":{"2":1,"6":1,"39":1,"122":1,"138":2,"144":1,"145":1,"156":2,"158":1,"159":1,"160":2,"166":1,"179":1,"180":1,"183":1,"186":1,"200":1,"222":1,"227":1,"231":1,"232":1,"233":1,"234":1,"246":1,"258":1,"272":1,"299":1,"319":1,"331":1,"338":1,"339":1,"345":1,"410":2,"416":1,"422":1,"424":1,"444":1,"453":1,"465":2,"478":1,"506":1,"515":1,"522":1,"541":1,"571":1,"591":3}}],["трагедия",{"2":{"490":1}}],["трафика",{"2":{"291":1}}],["тратить",{"2":{"201":1,"247":1}}],["традиционными",{"2":{"399":1}}],["традиционным",{"2":{"234":1}}],["традиционно",{"2":{"159":1,"212":1,"234":1,"254":1,"415":1}}],["традиционном",{"2":{"156":1,"291":1}}],["традиции",{"2":{"183":1}}],["траекторию",{"2":{"137":1}}],["транзакционной",{"2":{"319":1}}],["транзакционность",{"2":{"17":1}}],["транспорт",{"2":{"545":1}}],["транспортного",{"2":{"545":1}}],["транспортной",{"2":{"83":1}}],["транспортные",{"2":{"138":1,"491":1}}],["транспортным",{"2":{"122":1}}],["транспиляции",{"2":{"429":1}}],["трансформация",{"2":{"271":1}}],["трансформацию",{"2":{"155":1}}],["труднее",{"2":{"200":1}}],["трудночитаемый",{"2":{"201":1}}],["трудно",{"2":{"160":1,"178":1,"196":1,"240":1,"455":1}}],["трудности",{"2":{"184":1}}],["трудностями",{"2":{"156":1}}],["трудностей",{"2":{"138":1}}],["трудозатратней",{"2":{"492":1}}],["трудозатратам",{"2":{"492":1}}],["трудов",{"2":{"179":1}}],["трудоемко",{"2":{"12":1}}],["труда",{"2":{"59":1}}],["трем",{"2":{"303":1}}],["тремя",{"2":{"234":1,"257":1,"335":1}}],["трехуровневая",{"2":{"408":1}}],["трехуровневых",{"2":{"6":1}}],["трех",{"2":{"263":1,"268":1,"334":2,"424":1}}],["трехмесячные",{"2":{"237":1}}],["третьего",{"2":{"421":1,"508":1}}],["третьей",{"2":{"352":1,"416":1}}],["третье",{"2":{"188":1}}],["третьему",{"2":{"114":1}}],["третий",{"2":{"72":1,"357":1,"481":1,"508":1}}],["требоваться",{"2":{"260":1}}],["требовать",{"2":{"217":1}}],["требование",{"2":{"292":1}}],["требованием",{"2":{"152":1}}],["требований",{"2":{"72":1,"74":1,"96":1,"123":1,"326":1,"337":1,"377":1,"442":1,"443":1}}],["требованиях",{"2":{"436":1,"444":2,"476":1}}],["требованиями",{"2":{"145":1,"187":1,"346":1,"444":1}}],["требованиям",{"2":{"74":1,"291":1,"301":1,"303":1,"350":1,"354":1,"377":1,"444":1}}],["требования",{"0":{"68":1,"69":1,"140":1,"178":1,"238":1,"290":1,"305":1,"326":1,"349":1,"398":1,"443":1},"2":{"73":1,"145":1,"190":1,"292":1,"349":1,"377":1,"442":1,"445":1,"490":1,"492":1}}],["требуемого",{"2":{"340":1,"538":1}}],["требуемой",{"2":{"181":1,"340":1}}],["требуеться",{"2":{"429":1}}],["требуется",{"2":{"124":1,"127":1,"129":1,"145":1,"247":1,"340":2,"354":1,"361":1,"437":1,"515":1}}],["требует",{"2":{"122":1,"137":1,"138":1,"139":2,"146":1,"180":1,"191":1,"291":1,"293":1,"296":1,"299":1,"346":1,"399":1,"404":1,"421":1,"429":1,"436":1,"444":1,"462":1,"476":1}}],["требующее",{"2":{"255":1}}],["требующий",{"2":{"111":1,"404":1}}],["требующих",{"2":{"17":1,"256":1,"258":1}}],["требуются",{"2":{"474":1,"575":1}}],["требуют",{"2":{"168":1,"278":1,"327":1,"425":1}}],["тривиален",{"2":{"419":1}}],["тривиальными",{"2":{"420":1}}],["тривиальность",{"2":{"420":1,"448":1}}],["тривиально",{"2":{"407":1}}],["тривиального",{"2":{"160":1,"306":1}}],["тривиальную",{"2":{"257":1}}],["тривиальна",{"2":{"148":1,"253":1,"258":1,"298":1,"332":1,"343":1,"410":1,"421":1}}],["триггерного",{"2":{"298":1}}],["триггерную",{"2":{"269":1}}],["три",{"2":{"7":1,"11":1,"51":1,"112":2,"159":1,"180":1,"181":1,"196":1,"226":1,"227":1,"230":1,"234":1,"266":4,"306":1,"321":1,"334":1,"343":1,"396":2,"416":2,"422":1,"446":1,"448":1,"508":1,"588":1}}],["т",{"0":{"353":1},"2":{"4":1,"38":1,"73":2,"118":1,"124":1,"126":1,"127":1,"131":1,"141":1,"156":1,"157":1,"159":1,"160":2,"166":1,"168":1,"178":1,"180":3,"183":1,"194":1,"219":1,"222":1,"226":1,"229":1,"234":1,"239":5,"243":2,"248":2,"252":1,"254":1,"255":1,"256":2,"260":2,"273":1,"291":3,"293":1,"294":1,"295":1,"306":1,"327":1,"328":1,"340":1,"362":1,"363":1,"370":2,"399":3,"404":1,"413":1,"414":1,"415":1,"419":1,"420":1,"421":2,"442":1,"444":3,"445":1,"448":3,"450":1,"451":1,"463":1,"464":1,"467":1,"479":1,"483":1,"488":1,"492":1,"501":1,"540":2,"541":1,"542":4}}],["тостах",{"2":{"256":1}}],["тостер",{"2":{"538":1}}],["тосте",{"2":{"256":1}}],["тостовое",{"2":{"256":2}}],["тостовые",{"0":{"256":1}}],["тонкая",{"2":{"542":1}}],["тонкую",{"2":{"430":1}}],["тонкостей",{"2":{"237":1}}],["тонкий",{"2":{"160":2,"184":1,"300":1}}],["толку",{"2":{"233":1,"281":1,"447":1}}],["только",{"2":{"4":1,"16":1,"22":1,"23":2,"34":1,"39":1,"41":3,"56":1,"58":1,"59":1,"76":1,"79":1,"88":1,"89":1,"96":1,"100":1,"101":1,"104":1,"106":1,"111":1,"112":1,"114":1,"117":1,"123":2,"124":1,"125":2,"126":1,"130":2,"134":1,"142":3,"152":1,"156":1,"157":1,"158":1,"159":1,"160":2,"162":2,"164":1,"169":1,"179":4,"181":1,"183":4,"184":3,"186":2,"187":4,"188":4,"190":1,"191":1,"196":1,"197":2,"199":2,"201":1,"208":1,"209":1,"225":1,"234":2,"239":1,"242":1,"243":2,"246":1,"251":1,"252":1,"256":1,"259":1,"265":1,"267":3,"271":2,"285":1,"291":1,"298":4,"299":2,"302":1,"306":2,"313":1,"314":2,"319":5,"321":1,"326":1,"327":1,"331":2,"339":1,"340":1,"341":1,"352":2,"356":1,"357":1,"358":1,"360":1,"368":1,"369":2,"370":2,"394":1,"399":1,"404":1,"407":4,"409":1,"410":4,"416":3,"420":1,"422":1,"428":1,"430":3,"437":1,"448":1,"453":1,"455":1,"456":1,"465":1,"474":2,"478":4,"482":1,"483":1,"487":1,"490":2,"491":1,"508":1,"531":2,"535":1,"538":2}}],["торопитесь",{"2":{"484":1}}],["торвальдс",{"2":{"458":1}}],["торвальдсом",{"2":{"458":1}}],["тормозит",{"2":{"483":1}}],["тормозить",{"2":{"96":1}}],["тормозящим",{"2":{"327":1}}],["торговые",{"2":{"156":1,"257":1}}],["тобой",{"2":{"124":1}}],["токены",{"2":{"419":1,"437":1}}],["токенов",{"2":{"416":1,"419":1}}],["токеном",{"2":{"123":1}}],["токенами",{"2":{"416":2}}],["токена",{"2":{"123":2,"416":5}}],["токенах",{"2":{"123":2,"573":1}}],["токену",{"2":{"123":1}}],["токен",{"2":{"123":7,"416":3,"419":1,"501":2,"515":1}}],["той",{"2":{"96":1,"142":1,"143":1,"164":1,"187":1,"194":1,"200":1,"201":1,"228":1,"243":1,"283":1,"298":1,"319":2,"327":1,"396":1,"400":1,"445":1,"457":1,"466":1,"478":1,"541":1}}],["тот",{"2":{"41":1,"130":1,"131":1,"132":1,"156":2,"160":1,"199":1,"211":1,"221":1,"226":3,"227":1,"228":2,"229":1,"230":1,"231":1,"233":1,"234":1,"254":1,"281":1,"291":1,"316":3,"319":1,"321":1,"330":1,"416":1,"417":1,"422":2,"451":1,"482":1,"491":1}}],["тоже",{"2":{"16":1,"43":1,"48":1,"121":1,"263":1,"482":1,"483":1,"492":1}}],["точек",{"2":{"319":1,"344":1,"416":1}}],["точечной",{"2":{"257":1}}],["точка",{"2":{"179":1,"180":1,"271":1,"293":1,"341":1,"345":1,"366":1,"492":1}}],["точками",{"2":{"142":1,"271":1,"340":1}}],["точке",{"2":{"145":1,"200":1,"340":1}}],["точкой",{"2":{"142":2,"180":1,"255":1,"289":1,"333":2,"351":1,"416":2}}],["точку",{"2":{"126":1,"157":1,"179":2,"212":1,"224":1,"241":2,"331":1,"350":1,"415":1,"417":1,"418":1,"421":2}}],["точки",{"0":{"255":1},"2":{"11":1,"22":1,"96":1,"112":1,"122":1,"130":1,"159":1,"180":1,"232":1,"239":1,"241":1,"266":2,"318":1,"331":3,"345":1,"346":1,"466":1,"478":3,"501":1}}],["точное",{"2":{"260":1,"483":1}}],["точностью",{"2":{"240":1}}],["точно",{"2":{"98":1,"114":1,"125":1,"174":1,"228":1,"313":1,"442":1,"448":1}}],["точней",{"2":{"4":1,"492":1}}],["томасу",{"2":{"199":1}}],["тому",{"2":{"96":1,"198":1,"201":1,"271":1,"276":1,"329":1,"399":1,"422":1,"423":1,"466":1}}],["том",{"2":{"7":1,"13":1,"22":1,"25":2,"73":2,"96":1,"111":1,"132":1,"144":1,"152":1,"153":1,"155":1,"156":4,"157":1,"158":1,"160":1,"164":1,"180":2,"183":1,"187":1,"188":1,"197":1,"199":1,"201":2,"202":1,"215":1,"220":1,"225":1,"227":2,"231":1,"234":1,"237":1,"239":1,"246":2,"254":1,"255":1,"258":1,"267":1,"268":1,"271":1,"277":1,"278":1,"279":1,"287":1,"289":1,"291":1,"298":2,"304":1,"319":3,"325":1,"327":1,"331":1,"333":1,"338":2,"341":1,"345":1,"351":1,"354":1,"359":1,"364":1,"369":1,"407":1,"420":1,"421":1,"422":1,"436":1,"445":1,"447":1,"449":1,"450":1,"453":1,"454":1,"455":2,"465":1,"476":1,"478":1,"492":1,"542":1}}],["тогдашний",{"2":{"133":1}}],["тогда",{"2":{"3":1,"44":1,"95":1,"113":1,"122":1,"147":1,"167":1,"221":1,"228":1,"234":1,"309":1,"327":1,"416":1,"483":2}}],["того",{"2":{"2":1,"7":1,"22":1,"43":1,"74":1,"96":3,"111":1,"121":1,"123":1,"130":1,"137":1,"138":1,"142":1,"143":1,"144":1,"156":2,"157":1,"160":7,"167":1,"176":1,"179":2,"181":1,"183":1,"184":1,"187":2,"191":2,"194":1,"195":1,"197":1,"200":1,"212":1,"216":1,"217":1,"219":1,"223":3,"224":1,"225":1,"227":1,"228":1,"233":1,"234":1,"239":1,"240":1,"247":1,"250":1,"254":1,"259":1,"260":1,"266":1,"284":1,"291":5,"296":1,"297":1,"298":5,"299":1,"306":1,"308":1,"313":1,"316":1,"321":1,"322":1,"324":1,"325":1,"327":3,"330":1,"331":1,"334":1,"339":1,"345":1,"351":1,"354":2,"360":1,"362":2,"368":1,"369":1,"371":2,"375":1,"391":1,"396":3,"400":1,"401":1,"404":1,"407":2,"413":1,"421":1,"422":1,"429":2,"436":2,"442":1,"444":1,"445":1,"446":1,"451":1,"454":1,"458":1,"459":1,"462":2,"463":1,"468":1,"477":1,"478":1,"482":1,"484":1,"492":3,"561":1,"568":1}}],["то",{"2":{"3":2,"9":1,"12":2,"17":1,"23":3,"26":2,"30":1,"33":1,"35":3,"40":2,"41":2,"48":1,"59":3,"61":1,"62":1,"67":1,"96":7,"102":1,"104":1,"106":2,"111":1,"118":1,"122":1,"123":4,"124":3,"129":2,"130":1,"132":1,"134":1,"142":2,"143":3,"144":2,"145":1,"149":1,"152":2,"156":7,"158":1,"159":2,"160":3,"162":2,"163":1,"168":1,"176":2,"178":1,"179":5,"180":1,"181":1,"182":1,"183":3,"184":1,"186":1,"187":2,"188":1,"194":1,"196":1,"198":4,"199":3,"201":4,"202":1,"211":1,"212":1,"213":1,"215":3,"217":1,"218":2,"225":1,"226":5,"227":3,"228":3,"232":1,"234":1,"237":2,"240":2,"242":3,"243":1,"244":1,"246":2,"248":1,"249":4,"255":1,"257":2,"258":1,"260":1,"263":1,"266":1,"273":2,"276":1,"278":1,"279":1,"284":1,"286":1,"288":1,"291":3,"299":3,"300":1,"301":1,"306":4,"309":1,"310":1,"311":6,"313":3,"314":1,"315":1,"317":1,"318":1,"320":1,"321":2,"322":1,"327":10,"328":3,"332":2,"335":1,"336":2,"340":2,"350":1,"351":1,"352":2,"356":1,"359":1,"360":1,"362":2,"368":1,"369":1,"377":1,"396":1,"397":1,"399":2,"401":1,"404":2,"407":2,"410":1,"413":2,"415":1,"416":5,"421":1,"422":1,"425":1,"429":1,"430":1,"436":1,"438":2,"444":1,"445":1,"447":4,"448":1,"449":1,"451":2,"454":2,"457":1,"462":2,"474":2,"477":2,"478":5,"479":4,"482":1,"483":3,"485":2,"491":4,"492":6,"541":1,"562":2,"575":1}}],["товару",{"2":{"273":1}}],["товаров",{"0":{"38":1,"116":1},"1":{"117":1,"118":1},"2":{"4":1,"22":1,"30":1,"31":1,"41":1,"47":1,"51":1,"70":2,"82":1,"83":1,"85":2,"104":1,"111":1,"117":2,"257":1,"436":1,"477":1}}],["товаре",{"2":{"4":1,"31":1,"51":1,"82":1,"83":1}}],["товары",{"2":{"4":1,"7":1,"16":1,"111":1,"277":2}}],["товар",{"0":{"16":1},"2":{"3":2,"16":2,"111":1,"273":1,"277":2}}],["товарам",{"2":{"47":1,"70":1,"104":1}}],["товарами",{"2":{"3":1,"43":1}}],["товара",{"0":{"111":1},"2":{"3":3,"4":2,"7":1,"16":2,"17":1,"22":1,"30":1,"47":2,"48":1,"83":1,"86":1,"111":1,"117":1,"118":1,"123":1,"282":1,"436":1,"477":1,"492":1}}],["мгновенную",{"2":{"463":1}}],["мгновений",{"2":{"340":1}}],["мб",{"2":{"319":2}}],["мучается",{"2":{"487":1}}],["мутировать",{"2":{"196":1}}],["мутный",{"2":{"10":1}}],["мусора",{"2":{"198":1}}],["мусор",{"2":{"168":1}}],["множественного",{"2":{"474":1}}],["множественном",{"2":{"410":1}}],["множественность",{"2":{"312":1}}],["множестве",{"2":{"404":1}}],["множество",{"2":{"96":2,"142":1,"150":1,"151":1,"182":1,"195":1,"203":1,"210":1,"215":1,"251":1,"257":1,"264":1,"331":1,"337":1,"340":1,"350":1,"351":1,"352":1,"365":1,"369":1,"408":1,"416":2,"422":2,"424":1,"430":2,"444":1,"445":1,"448":1,"457":1,"482":1,"492":1}}],["множеством",{"2":{"88":1,"145":1,"179":1,"183":1,"302":1,"415":1,"458":1}}],["множества",{"2":{"16":1,"194":1,"271":1}}],["многим",{"2":{"201":1}}],["многих",{"2":{"174":1,"182":1,"184":1,"196":1,"237":1,"247":1,"256":1,"269":1,"277":1,"327":1,"413":1,"442":1,"541":1}}],["многие",{"2":{"85":1,"132":1,"198":1,"275":1,"401":1,"425":1,"430":1,"483":1,"491":1}}],["многолетним",{"2":{"492":1}}],["многолетние",{"2":{"237":1}}],["многоядерный",{"2":{"483":1}}],["многоядерные",{"2":{"483":1}}],["многофункциональный",{"2":{"436":1}}],["многоразовые",{"2":{"436":1,"476":1}}],["многопоточной",{"2":{"482":1}}],["многопоточности",{"2":{"389":1}}],["многопоточность",{"0":{"325":1,"389":1},"1":{"326":1,"327":1,"328":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"338":1,"339":1,"340":1,"341":1,"342":1,"343":1,"344":1,"345":1,"346":1,"347":1},"2":{"199":1,"202":1,"225":1,"231":1,"289":1,"319":2,"325":1,"326":1,"346":1,"414":1,"483":4}}],["многопоточным",{"2":{"375":1}}],["многоплатформенностью",{"2":{"291":1}}],["многостраничные",{"2":{"399":1}}],["многостраничное",{"2":{"291":1}}],["многословны",{"2":{"318":1}}],["многословным",{"2":{"234":1,"299":1,"462":1}}],["многословно",{"2":{"226":1,"234":1,"308":1}}],["многословность",{"2":{"160":1}}],["многословной",{"2":{"160":1}}],["многословен",{"2":{"160":1,"234":1}}],["многочисленные",{"2":{"209":1}}],["многочисленных",{"2":{"185":1}}],["многого",{"2":{"199":1}}],["многоцелевые",{"2":{"196":1}}],["многом",{"2":{"157":1,"191":1}}],["многократно",{"2":{"156":1,"158":1,"333":1,"348":1,"354":1,"435":1,"476":1}}],["много",{"2":{"63":1,"72":1,"96":1,"102":1,"123":1,"124":1,"125":1,"132":1,"142":1,"183":1,"184":1,"194":1,"196":1,"226":1,"313":1,"316":1,"327":3,"330":1,"340":1,"368":1,"426":1,"430":1,"470":1,"474":1,"482":1,"541":1,"575":1}}],["многое",{"2":{"26":1,"148":1,"156":1,"352":1,"355":1,"370":1,"422":1,"466":1}}],["мнению",{"2":{"347":1}}],["мнения",{"2":{"257":1}}],["мнение",{"2":{"179":1,"502":1}}],["мне",{"2":{"22":1,"96":3,"117":1}}],["мягкое",{"2":{"319":1}}],["мягкие",{"2":{"19":1}}],["мягкая",{"2":{"18":1}}],["м",{"2":{"16":1}}],["мидл",{"2":{"483":1}}],["микрософт",{"2":{"492":1}}],["микросервиса",{"2":{"482":1}}],["микросервисов",{"2":{"434":1,"436":1,"476":1,"483":1}}],["микроинтерфейсы",{"2":{"436":1}}],["микрофронтендов",{"2":{"476":1}}],["микрофронтенд",{"0":{"519":1},"1":{"520":1,"521":1},"2":{"436":2,"476":2,"515":1}}],["микрофронтенды",{"0":{"436":1},"2":{"436":4,"476":5,"477":1}}],["микро",{"2":{"430":1}}],["миксинов",{"2":{"160":1,"363":1}}],["миксины",{"0":{"363":1},"1":{"364":1},"2":{"160":2,"363":1,"474":4}}],["миллисекундах",{"2":{"357":1}}],["миллисекунд",{"2":{"357":1}}],["миллисекунды",{"2":{"179":1,"327":1}}],["миллионами",{"2":{"142":1}}],["миллионов",{"2":{"48":1,"63":1}}],["мир",{"2":{"490":1}}],["мира",{"2":{"466":1}}],["миру",{"2":{"457":1,"492":1}}],["миров",{"2":{"291":1}}],["миром",{"2":{"3":1,"34":1,"483":1}}],["мире",{"2":{"132":1,"158":1,"228":1,"377":1,"458":1,"483":1}}],["миграции",{"2":{"126":2,"132":1,"160":1,"318":1,"393":1}}],["миграция",{"0":{"126":1,"393":1},"1":{"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1},"2":{"160":1}}],["минут",{"2":{"491":1,"542":1}}],["минуты",{"2":{"357":1}}],["минуточку",{"2":{"327":1}}],["минуя",{"2":{"156":1}}],["минусов",{"2":{"478":1}}],["минусы",{"2":{"436":1,"476":1,"490":2}}],["минус",{"2":{"114":1,"478":1}}],["минисервере",{"2":{"430":1}}],["мини",{"2":{"337":1,"430":2}}],["миниатюр",{"2":{"257":1}}],["миниатюре",{"2":{"124":1}}],["минималистичным",{"2":{"541":1}}],["минимален",{"2":{"261":1}}],["минимальную",{"2":{"187":1,"538":1}}],["минимальным",{"2":{"311":1}}],["минимальный",{"2":{"260":1,"293":1}}],["минимальны",{"2":{"180":1}}],["минимальной",{"2":{"47":1,"219":1}}],["минимальная",{"2":{"436":1,"476":1}}],["минимальна",{"2":{"22":1}}],["минимуму",{"2":{"247":1}}],["минимум",{"2":{"12":1,"196":1,"226":1,"291":1,"294":1,"296":1,"331":1,"340":1,"377":2,"404":1,"420":1,"430":1,"478":1,"489":1,"491":2}}],["мае",{"2":{"491":1}}],["маяк",{"2":{"301":1}}],["манифест",{"2":{"303":1,"492":3}}],["манифестом",{"2":{"300":1}}],["манифесте",{"2":{"298":1}}],["манифеста",{"0":{"293":1,"297":1},"1":{"294":1,"295":1,"296":1},"2":{"289":1,"291":2,"293":2,"296":2,"297":2,"299":1,"300":2,"570":1,"587":1}}],["манипулирование",{"2":{"287":1}}],["манипулирования",{"2":{"155":1,"164":1,"281":1}}],["манипулироваться",{"2":{"306":1}}],["манипулировать",{"2":{"275":1,"306":2,"453":1}}],["манипулятивный",{"2":{"284":1}}],["манипулятивных",{"2":{"274":1}}],["манипулятивная",{"2":{"284":1}}],["манипуляций",{"2":{"261":1}}],["манипуляции",{"2":{"123":1,"306":1}}],["манере",{"2":{"174":1}}],["магические",{"2":{"474":1}}],["магия",{"2":{"166":1}}],["магию",{"2":{"159":1,"183":1,"448":1}}],["магазине",{"2":{"492":1}}],["магазины",{"2":{"22":1,"27":1,"70":1,"118":1,"291":2}}],["магазином",{"2":{"22":1}}],["магазинов",{"2":{"21":1,"28":1,"70":1,"118":1,"291":1}}],["магазинах",{"2":{"106":1,"293":1}}],["магазинами",{"2":{"114":1}}],["магазинам",{"2":{"22":1}}],["магазина",{"2":{"14":1,"22":1,"39":2,"69":1,"257":1,"273":1,"291":1,"436":1,"477":1}}],["магазин",{"0":{"12":1},"2":{"9":1,"12":1,"22":2,"43":1,"61":1,"63":1,"123":1,"540":1,"541":1,"542":1}}],["машине",{"2":{"179":1,"225":1,"491":1}}],["машин",{"2":{"155":1}}],["машиной",{"2":{"145":1}}],["машина",{"2":{"145":1,"248":1}}],["машины",{"2":{"145":1,"369":1,"430":1}}],["материал",{"2":{"118":1}}],["материалах",{"2":{"503":1}}],["материала",{"2":{"65":1,"220":1,"500":1}}],["максимизации",{"2":{"246":1}}],["максимальная",{"2":{"582":1}}],["максимальную",{"0":{"377":1},"2":{"187":1,"377":1}}],["максимального",{"2":{"442":1}}],["максимально",{"2":{"96":1,"191":1,"287":1,"289":1,"483":1,"490":1,"492":1,"546":1}}],["максимум",{"2":{"183":1,"273":1}}],["макрос",{"2":{"131":1}}],["макросами",{"2":{"131":1}}],["макете",{"2":{"570":2}}],["макетов",{"0":{"351":1},"2":{"408":1}}],["макетом",{"2":{"186":1,"351":1}}],["макеты",{"2":{"244":1,"298":1,"410":1,"433":1,"476":1,"542":1}}],["макетами",{"2":{"438":1}}],["макета",{"2":{"187":1,"362":1,"406":1,"540":1}}],["макет",{"0":{"27":1},"1":{"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1},"2":{"27":1,"242":1,"271":1,"350":1,"351":2,"570":1,"580":1}}],["масштабируемых",{"2":{"482":1}}],["масштабируемые",{"2":{"436":1,"476":1}}],["масштабируемость",{"2":{"433":1,"436":2,"476":3}}],["масштабируемой",{"2":{"346":1}}],["масштабируется",{"2":{"436":1,"476":1}}],["масштабирования",{"2":{"156":1,"325":1,"434":1}}],["масштаб",{"2":{"327":1}}],["масштабе",{"2":{"225":1,"331":1}}],["масштабах",{"2":{"164":1}}],["мастере",{"2":{"447":1}}],["мастер",{"2":{"152":1,"344":1}}],["мастером",{"2":{"62":1}}],["маске",{"2":{"427":1}}],["маскируемый",{"2":{"300":1}}],["маскирует",{"2":{"280":1,"283":1}}],["маскируются",{"2":{"285":1}}],["маскировка",{"2":{"285":1}}],["маскироваться",{"2":{"285":1}}],["маску",{"2":{"142":1}}],["маска",{"2":{"125":2}}],["массовый",{"2":{"463":1}}],["массовых",{"2":{"337":1}}],["массовой",{"2":{"286":1,"466":1}}],["массу",{"2":{"183":1}}],["масс",{"2":{"96":1}}],["массам",{"2":{"96":1}}],["массиву",{"2":{"223":1,"335":1,"453":1}}],["массива",{"2":{"187":2,"358":1,"408":1,"453":1,"474":3,"482":1,"491":1}}],["массивам",{"2":{"130":2}}],["массиве",{"2":{"165":1,"187":1,"358":1,"453":1}}],["массивы",{"2":{"131":1,"166":1,"306":1,"328":1,"358":1,"360":1,"575":1}}],["массивов",{"2":{"130":1}}],["массив",{"2":{"41":1,"187":5,"223":2,"224":1,"294":1,"296":3,"335":2,"339":1,"341":1,"358":3,"359":1,"369":1,"404":1,"409":1,"422":1,"453":3,"474":3,"482":1}}],["малая",{"2":{"444":1}}],["маленьком",{"2":{"410":1}}],["маленькой",{"2":{"277":1}}],["маленького",{"2":{"255":1,"426":1}}],["маленьких",{"2":{"158":1,"194":1}}],["маленький",{"2":{"123":1,"255":2}}],["маленькая",{"2":{"22":1,"255":1}}],["маломощных",{"2":{"327":1}}],["малого",{"2":{"156":2}}],["мало",{"2":{"38":1,"188":1,"299":1,"407":1,"409":1}}],["маркерами",{"2":{"465":1}}],["маркером",{"2":{"419":1}}],["маркетинговые",{"2":{"240":1}}],["маркетинг",{"2":{"239":1}}],["маркетплейсом",{"2":{"22":1,"67":1}}],["маркетплейсов",{"2":{"21":1}}],["маркетплейс",{"0":{"13":1,"60":1},"1":{"61":1,"62":1,"63":1,"64":1,"65":1},"2":{"9":1,"22":2,"61":1,"70":1}}],["маркетплейса",{"2":{"4":1,"12":1,"22":2,"43":1,"61":1,"69":1,"70":1}}],["маршруте",{"2":{"404":2,"410":3}}],["маршруту",{"2":{"401":1,"404":1,"409":2,"420":1,"424":1}}],["маршрутов",{"0":{"403":1,"409":1},"1":{"404":1,"405":1},"2":{"357":1,"402":1,"406":1,"408":2,"409":1,"410":2,"413":2,"415":1,"416":1}}],["маршрут",{"2":{"144":1,"402":1,"404":5,"407":1,"409":1,"420":1,"421":2}}],["маршрутизацией",{"2":{"436":1,"476":1}}],["маршрутизации",{"2":{"144":1,"225":1,"397":1}}],["маршрутизацию",{"2":{"11":1}}],["маршрутизатору",{"2":{"410":1}}],["маршрутизатором",{"2":{"134":1,"409":1,"410":1}}],["маршрутизатора",{"0":{"406":1},"2":{"134":1,"397":1,"400":4,"401":1,"407":1,"423":1,"424":1}}],["маршрутизатор",{"2":{"134":1,"386":1,"399":1,"401":3,"404":1,"405":1,"407":1,"408":1,"409":1,"410":1,"418":1}}],["маршрутизаторе",{"2":{"126":1,"134":2,"145":1}}],["маршруты",{"0":{"408":1},"1":{"409":1,"410":1},"2":{"106":1,"299":1,"400":2,"401":3,"403":1,"404":3,"408":2,"409":2,"413":1,"581":1}}],["маршрутам",{"2":{"406":1,"407":1,"410":1,"415":1}}],["маршрутами",{"2":{"144":1,"401":1,"404":1,"413":1}}],["маршрута",{"2":{"7":1,"404":1,"406":1,"407":3,"410":4,"413":3}}],["мыслить",{"2":{"483":1}}],["мыслит",{"2":{"191":1}}],["мышление",{"2":{"444":1}}],["мышления",{"2":{"156":1}}],["мышку",{"2":{"430":1}}],["мышки",{"2":{"96":1}}],["мышью",{"2":{"246":1,"260":1}}],["мышь",{"2":{"242":1,"246":1,"327":1}}],["мыши",{"2":{"167":1,"254":1,"268":1,"269":1,"296":1,"363":1,"369":2}}],["мы",{"2":{"6":1,"9":1,"12":3,"13":1,"17":2,"18":1,"22":4,"23":2,"36":2,"40":1,"41":4,"48":1,"56":2,"59":1,"89":2,"100":1,"104":1,"106":1,"112":1,"114":1,"127":2,"128":3,"129":1,"131":2,"139":2,"141":2,"142":5,"143":4,"144":3,"145":7,"147":1,"148":2,"149":8,"151":3,"152":1,"153":5,"154":1,"155":3,"156":2,"157":10,"158":4,"159":13,"160":14,"161":1,"162":1,"166":3,"167":8,"168":3,"169":1,"174":1,"175":3,"177":5,"178":4,"179":7,"180":10,"181":4,"182":2,"183":12,"184":8,"185":4,"186":11,"187":22,"188":10,"189":4,"191":1,"194":4,"195":1,"197":1,"198":4,"199":2,"202":3,"203":1,"212":5,"213":1,"214":1,"217":1,"218":7,"219":6,"220":2,"221":1,"223":8,"225":3,"226":2,"227":15,"228":5,"229":4,"230":5,"231":6,"232":2,"233":6,"234":11,"235":5,"237":2,"240":2,"242":1,"243":2,"244":2,"247":1,"249":1,"259":1,"260":1,"261":10,"265":1,"271":1,"272":1,"273":2,"287":3,"289":3,"291":1,"292":1,"293":4,"297":3,"298":8,"299":13,"300":6,"302":3,"304":7,"305":1,"306":4,"307":3,"308":8,"309":4,"310":1,"311":7,"312":3,"313":7,"314":3,"315":4,"316":8,"317":1,"318":5,"319":8,"320":6,"321":10,"322":5,"323":4,"324":1,"325":8,"326":1,"327":4,"328":1,"329":3,"330":6,"331":5,"332":4,"333":6,"334":7,"335":7,"336":2,"337":2,"338":6,"339":8,"340":3,"341":6,"342":1,"343":7,"344":1,"345":13,"346":4,"348":7,"350":4,"351":4,"352":4,"354":6,"355":2,"356":3,"357":6,"358":1,"359":7,"360":8,"361":1,"362":11,"363":10,"364":5,"365":3,"367":1,"368":19,"369":18,"370":4,"371":8,"372":3,"384":1,"390":1,"396":2,"397":5,"399":9,"400":1,"401":4,"402":9,"404":15,"406":2,"407":20,"408":5,"409":3,"410":11,"413":4,"414":4,"415":7,"416":4,"417":5,"418":3,"419":8,"420":6,"421":2,"422":8,"423":4,"424":1,"442":2,"444":2,"445":3,"446":3,"447":7,"448":10,"449":1,"450":5,"451":1,"452":10,"453":21,"454":3,"455":5,"456":1,"457":2,"459":1,"462":1,"463":5,"465":3,"466":2,"468":2,"483":5}}],["молчаливая",{"2":{"535":1}}],["молекулы",{"2":{"433":1,"476":1}}],["морган",{"2":{"491":1}}],["морскими",{"2":{"200":1}}],["мотивации",{"2":{"491":1}}],["мощь",{"2":{"478":1,"483":1}}],["мощную",{"2":{"319":1}}],["мощного",{"0":{"314":1},"1":{"315":1,"316":1,"317":1,"318":1},"2":{"304":1}}],["мощной",{"2":{"178":1}}],["мощности",{"2":{"155":1,"289":1,"325":1,"336":1,"361":1,"399":1}}],["мощность",{"2":{"145":1,"422":1}}],["мощная",{"2":{"156":1,"337":1}}],["мощный",{"2":{"361":1}}],["мощные",{"2":{"291":1,"359":1}}],["мощным",{"2":{"233":1,"268":1}}],["мощными",{"2":{"151":1,"438":1}}],["мощных",{"2":{"155":1}}],["мошенническими",{"2":{"277":1}}],["мой",{"2":{"202":1}}],["мои",{"2":{"138":1}}],["моем",{"2":{"429":1}}],["моему",{"2":{"196":1,"203":1,"327":1}}],["мое",{"2":{"179":1}}],["моего",{"2":{"96":1}}],["моей",{"2":{"22":1}}],["могущие",{"2":{"502":1}}],["могу",{"2":{"413":1}}],["могут",{"2":{"17":1,"47":1,"125":2,"135":1,"142":1,"155":1,"156":2,"160":1,"164":1,"168":1,"178":1,"180":1,"181":1,"184":1,"192":2,"220":1,"224":1,"228":1,"235":1,"244":1,"253":1,"256":1,"257":3,"258":1,"262":1,"275":1,"289":1,"291":4,"293":1,"302":1,"309":2,"315":1,"319":2,"320":1,"327":3,"329":1,"332":1,"347":2,"351":2,"352":1,"354":1,"358":2,"360":1,"371":1,"372":1,"375":1,"377":1,"399":1,"404":1,"409":1,"413":1,"416":2,"421":1,"422":1,"423":1,"426":1,"430":1,"436":3,"438":1,"442":1,"444":1,"445":1,"476":2,"477":1,"482":2,"483":1,"484":1,"491":2,"542":1}}],["могла",{"2":{"338":1}}],["могло",{"2":{"328":1}}],["могли",{"2":{"188":1,"218":2,"227":1,"308":1,"320":2,"321":1,"345":1,"348":1,"368":1,"370":1,"399":1,"401":1,"402":1,"414":1,"421":1,"453":1}}],["мог",{"2":{"96":1,"159":1,"248":1,"314":1,"399":1,"408":1,"422":1,"492":1,"541":1}}],["монитора",{"2":{"430":1}}],["монитор",{"2":{"430":1}}],["мониторинг",{"2":{"279":1}}],["мониторингом",{"2":{"123":1}}],["монолитных",{"2":{"196":1}}],["монополистом",{"2":{"50":1}}],["монтируется",{"2":{"198":1}}],["монтируем",{"2":{"127":1,"356":1}}],["монтирования",{"2":{"128":1,"198":1,"407":1,"453":1}}],["монетизация",{"2":{"64":1}}],["мобильную",{"2":{"298":1}}],["мобильный",{"2":{"421":1}}],["мобильные",{"2":{"239":1,"291":1,"420":1,"422":1}}],["мобильных",{"2":{"182":1,"263":3,"266":1,"271":1,"289":1,"291":1,"294":1,"295":1,"298":2,"399":1,"416":1,"552":1}}],["мобильного",{"2":{"271":1}}],["мобильном",{"2":{"88":1,"104":1,"117":1,"271":1,"293":1}}],["мобильное",{"0":{"87":1},"1":{"88":1,"89":1,"90":1},"2":{"492":1}}],["мобильной",{"2":{"29":1,"30":1,"33":2,"35":1}}],["мобильная",{"0":{"33":1},"2":{"298":1}}],["модал",{"2":{"368":2,"369":1}}],["модала",{"2":{"368":4}}],["модалы",{"2":{"353":1}}],["модалов",{"0":{"365":1},"1":{"366":1,"367":1,"368":1},"2":{"352":1}}],["модальное",{"2":{"367":1,"538":1}}],["модального",{"2":{"367":4,"368":3}}],["модальной",{"2":{"354":1}}],["модальном",{"2":{"266":1}}],["модальных",{"2":{"265":1,"352":1,"353":1,"354":1,"360":1,"371":1}}],["модальный",{"2":{"265":1,"353":1,"354":2,"367":2,"368":6}}],["модальные",{"0":{"265":1},"2":{"265":1,"351":1,"354":1,"365":1,"369":1,"402":1}}],["модернизируем",{"2":{"291":1}}],["моделям",{"2":{"302":1,"487":1}}],["модели",{"2":{"156":1,"188":1,"252":1,"271":1,"313":1,"327":1,"359":1,"407":1,"435":1,"476":1}}],["моделей",{"2":{"131":1,"174":1,"318":1,"359":1}}],["моделью",{"2":{"131":2}}],["модель",{"0":{"15":1,"42":1},"1":{"16":1,"17":1,"18":1,"19":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1},"2":{"39":2,"156":2,"333":2,"337":1,"407":1,"478":2,"482":1,"490":1}}],["модифицировали",{"2":{"407":1}}],["модифицировать",{"2":{"74":1,"148":1,"311":1,"406":1}}],["модифицирует",{"2":{"229":1,"353":1}}],["модифицируем",{"2":{"179":1,"182":1,"187":1,"400":1}}],["модификаций",{"2":{"233":1,"402":1}}],["модификация",{"2":{"177":1,"407":1}}],["модификации",{"0":{"180":1},"2":{"143":1,"163":1,"313":1,"401":1}}],["модификатор",{"2":{"159":1,"359":1}}],["модули",{"2":{"196":1,"211":2,"231":1,"369":1,"436":2,"476":1,"477":1,"478":2,"483":1,"486":1}}],["модулях",{"2":{"318":1}}],["модуля",{"2":{"105":1,"313":1,"477":1,"478":1,"546":1,"570":1,"573":1}}],["модулем",{"2":{"477":1}}],["модуле",{"2":{"104":1,"106":1,"181":1,"321":1,"403":1,"436":1,"477":1,"478":1,"482":1}}],["модулей",{"2":{"5":1,"98":1,"197":1}}],["модульная",{"2":{"436":2,"476":2,"477":2}}],["модульный",{"0":{"434":1},"2":{"476":1}}],["модульными",{"2":{"156":1}}],["модульности",{"2":{"134":1}}],["модульной",{"2":{"104":1,"434":1,"477":1}}],["модуль",{"0":{"544":1},"1":{"545":1,"546":1},"2":{"4":2,"41":1,"122":2,"146":1,"159":1,"199":2,"211":2,"220":1,"314":1,"318":1,"363":1,"365":1,"436":6,"477":6,"483":1,"540":2,"542":2,"570":1}}],["моменты",{"2":{"491":1,"502":1}}],["моментов",{"2":{"479":1}}],["моментом",{"2":{"145":1,"306":1,"369":1,"541":1}}],["моментами",{"2":{"415":1}}],["момента",{"2":{"187":1,"327":1,"419":1}}],["момент",{"2":{"9":1,"16":1,"36":1,"43":1,"56":1,"130":1,"142":1,"168":1,"180":1,"184":1,"193":1,"217":1,"218":1,"261":1,"291":1,"298":1,"364":1,"368":1,"369":1,"407":1,"451":1,"462":1,"474":1,"492":1,"508":2,"551":1,"554":1,"570":1,"583":1}}],["можем",{"2":{"22":1,"23":2,"36":1,"128":1,"131":1,"142":1,"143":1,"144":1,"149":1,"151":1,"153":1,"154":1,"157":1,"159":5,"160":3,"161":1,"166":1,"167":2,"168":1,"180":3,"181":1,"183":4,"184":3,"186":1,"187":2,"188":2,"194":1,"219":1,"220":1,"227":1,"228":1,"229":1,"233":3,"247":1,"261":1,"298":2,"299":3,"300":1,"306":3,"309":1,"312":2,"313":3,"319":2,"321":1,"322":2,"324":1,"327":1,"330":4,"331":2,"338":1,"341":1,"345":4,"350":3,"351":1,"354":2,"356":2,"357":2,"359":2,"360":3,"363":1,"368":2,"369":2,"370":1,"372":2,"400":1,"402":3,"404":5,"406":1,"407":2,"408":1,"409":1,"410":3,"417":1,"418":1,"419":1,"420":1,"422":1,"445":1,"447":2,"448":3,"450":1,"452":1,"453":3,"454":3,"455":1,"456":1}}],["можете",{"2":{"130":2,"132":1,"142":2,"151":1,"156":5,"158":1,"160":2,"169":1,"174":2,"176":2,"179":1,"180":3,"181":1,"190":1,"202":1,"211":1,"217":1,"226":2,"233":1,"236":2,"244":1,"252":1,"265":1,"271":1,"288":1,"291":3,"297":1,"319":1,"327":2,"336":1,"338":1,"402":1,"407":1,"414":1,"426":1,"432":1,"437":2,"448":1,"458":1,"462":1,"463":2,"464":1,"466":1,"467":1,"476":1,"500":1,"506":1}}],["может",{"2":{"2":2,"3":1,"4":1,"14":1,"16":1,"17":1,"18":1,"26":1,"43":1,"44":1,"72":1,"73":1,"74":1,"85":1,"96":3,"105":1,"107":1,"114":2,"118":1,"123":2,"124":2,"125":1,"126":1,"130":2,"131":2,"132":1,"138":1,"142":2,"145":1,"148":1,"155":1,"156":4,"158":1,"159":3,"160":3,"163":1,"168":2,"179":3,"180":1,"184":1,"185":1,"188":1,"194":1,"195":1,"196":1,"198":2,"199":1,"200":1,"207":1,"208":1,"212":2,"219":1,"222":1,"225":2,"226":4,"228":3,"233":1,"234":2,"237":1,"239":1,"247":1,"248":1,"252":1,"253":2,"254":2,"255":1,"256":1,"257":1,"258":4,"260":4,"267":1,"268":3,"269":2,"276":1,"280":2,"284":2,"285":2,"286":1,"288":1,"289":1,"290":1,"291":3,"293":2,"297":1,"298":7,"299":1,"304":1,"306":1,"308":1,"309":2,"312":1,"313":1,"315":1,"316":1,"319":7,"321":1,"327":9,"328":3,"331":1,"332":2,"335":1,"337":1,"343":2,"348":1,"351":2,"352":1,"354":3,"357":3,"360":1,"362":3,"364":2,"365":2,"369":2,"377":1,"396":1,"408":1,"415":1,"416":2,"421":1,"422":3,"426":1,"429":1,"430":1,"433":1,"436":4,"438":4,"442":1,"444":4,"447":3,"453":2,"455":2,"460":1,"465":2,"466":1,"467":1,"474":1,"476":5,"478":6,"479":1,"481":1,"482":3,"483":2,"484":1,"490":3,"491":1,"492":6,"508":2,"515":3,"535":1,"541":2,"545":1,"568":1,"582":1,"590":1}}],["можно",{"2":{"3":1,"4":1,"9":1,"10":1,"12":1,"16":2,"22":1,"25":1,"26":1,"27":1,"29":2,"35":1,"36":1,"40":4,"43":1,"44":1,"53":1,"56":1,"59":1,"63":2,"64":1,"72":1,"82":1,"88":1,"89":1,"95":1,"96":3,"98":1,"100":1,"107":1,"111":1,"113":2,"114":1,"117":1,"118":1,"122":1,"123":4,"124":2,"131":1,"134":1,"136":1,"138":1,"140":1,"142":4,"148":1,"150":1,"151":1,"152":2,"156":2,"157":1,"158":3,"167":1,"168":3,"174":1,"178":5,"181":4,"182":2,"183":3,"184":3,"188":1,"189":1,"194":2,"196":3,"199":1,"202":2,"215":1,"219":1,"223":1,"225":1,"226":1,"228":3,"231":1,"233":2,"234":2,"236":1,"238":1,"239":1,"242":1,"243":1,"246":1,"247":1,"248":1,"251":1,"252":1,"257":1,"258":1,"266":1,"268":2,"269":1,"271":1,"275":1,"285":1,"291":1,"298":1,"299":2,"300":1,"302":1,"303":1,"308":1,"314":1,"316":1,"317":1,"318":1,"319":3,"322":1,"324":1,"325":2,"327":2,"328":1,"329":1,"330":1,"331":2,"332":1,"333":1,"336":1,"337":2,"338":1,"340":2,"347":1,"348":1,"349":1,"357":1,"359":3,"361":1,"362":3,"364":1,"367":1,"368":1,"369":2,"370":1,"379":1,"380":1,"398":1,"399":1,"407":3,"408":1,"410":3,"413":4,"414":1,"416":4,"418":1,"420":1,"421":2,"422":1,"423":1,"424":2,"425":3,"426":1,"430":2,"436":1,"438":2,"441":1,"442":2,"443":1,"444":3,"445":1,"446":1,"447":1,"448":3,"451":2,"452":1,"453":1,"455":1,"456":1,"460":2,"461":1,"462":3,"466":1,"467":2,"474":2,"477":1,"478":3,"481":2,"482":3,"483":4,"490":1,"491":5,"492":3,"517":1,"520":1,"521":2,"531":1,"532":2,"535":1,"538":1,"543":1,"551":1,"554":1,"575":1,"583":1,"588":1}}],["механической",{"2":{"491":1}}],["механизмом",{"2":{"483":1}}],["механизмы",{"2":{"478":1}}],["механизм",{"2":{"312":1}}],["медленней",{"2":{"478":1}}],["медиазапросов",{"2":{"271":1}}],["медиазапросами",{"2":{"271":1}}],["мешая",{"2":{"436":1,"476":1}}],["мешает",{"2":{"121":1}}],["мечом",{"2":{"284":1}}],["мегабайт",{"2":{"576":1}}],["мега",{"2":{"268":4}}],["мегаменю",{"0":{"268":1},"2":{"29":1,"268":2,"269":1}}],["мета",{"2":{"570":1,"589":1}}],["метасервисы",{"2":{"419":1}}],["метрике",{"2":{"492":1}}],["метрики",{"2":{"492":1}}],["метка",{"2":{"416":1}}],["метку",{"2":{"306":1}}],["метки",{"0":{"255":1},"2":{"465":1}}],["методом",{"2":{"421":1,"492":1}}],["методологии",{"2":{"399":1,"400":1,"433":1,"476":1}}],["методов",{"2":{"14":1,"218":1,"220":1,"309":1,"315":1,"318":1,"335":1,"409":1,"410":1,"413":2,"416":1,"421":1,"448":3,"474":1}}],["методу",{"2":{"234":1}}],["методе",{"2":{"160":1,"212":1,"345":1,"404":1}}],["метод",{"0":{"211":1,"212":1},"2":{"123":1,"130":1,"157":3,"160":1,"196":1,"212":3,"218":2,"221":2,"223":3,"225":1,"234":3,"271":3,"298":2,"329":1,"334":3,"339":1,"340":1,"342":1,"345":1,"356":2,"360":1,"365":1,"368":2,"369":1,"404":1,"411":1,"413":1,"416":2,"421":3,"433":1,"453":2,"476":1,"535":1}}],["методы",{"0":{"173":1},"2":{"70":1,"125":1,"128":1,"130":1,"155":1,"157":1,"158":1,"197":1,"198":1,"212":1,"223":1,"226":1,"234":1,"311":1,"314":1,"316":2,"318":1,"319":1,"323":1,"324":1,"334":2,"340":2,"341":1,"345":2,"346":1,"360":1,"365":1,"368":1,"397":1,"404":1,"413":1,"414":2,"453":2,"478":1}}],["методах",{"2":{"319":1}}],["методами",{"2":{"234":1,"421":1,"478":1,"491":1}}],["методам",{"2":{"160":1,"341":1,"414":1,"452":1}}],["метода",{"2":{"3":1,"210":1,"223":1,"228":1,"321":1,"323":1,"329":1,"339":1,"340":2,"341":2,"343":1,"345":2,"368":1,"404":1,"421":1,"492":1}}],["межпроцессное",{"2":{"340":1}}],["межпроцессного",{"2":{"328":1}}],["межпроцессные",{"2":{"234":1}}],["межстрочные",{"2":{"201":1}}],["между",{"0":{"113":1,"241":1},"2":{"3":1,"17":1,"22":1,"34":1,"43":2,"73":2,"74":1,"96":1,"113":1,"125":1,"126":1,"130":1,"152":1,"155":3,"156":3,"159":1,"160":2,"176":1,"180":1,"187":2,"199":1,"202":1,"205":1,"206":1,"220":1,"222":1,"225":1,"226":1,"227":1,"228":1,"231":1,"236":2,"237":1,"239":1,"246":1,"257":1,"260":1,"266":1,"291":1,"303":1,"304":1,"305":1,"306":1,"314":1,"315":1,"318":1,"323":1,"324":2,"327":2,"331":2,"332":2,"340":1,"350":1,"351":1,"356":1,"359":1,"360":1,"362":1,"363":2,"365":1,"369":1,"392":1,"400":1,"404":1,"407":1,"415":1,"416":3,"421":1,"423":1,"430":1,"436":1,"438":2,"456":1,"458":1,"476":1,"478":2,"491":2,"492":1}}],["мелких",{"2":{"200":1,"478":1}}],["мелкие",{"2":{"194":1,"247":1}}],["мельчайшей",{"2":{"194":1}}],["месяцев",{"2":{"152":1}}],["месяца",{"2":{"152":1}}],["местным",{"2":{"415":1}}],["места",{"2":{"294":1,"311":1,"319":2,"377":1,"463":1,"474":1}}],["местах",{"2":{"247":1,"321":1}}],["мест",{"2":{"114":1,"492":1}}],["месте",{"2":{"100":1,"114":1,"159":1,"184":1,"199":1,"220":1,"298":1,"308":1,"340":1,"407":1,"467":1,"482":1}}],["местом",{"2":{"268":1,"273":1,"402":1}}],["местоположение",{"2":{"260":1}}],["место",{"2":{"89":1,"133":1,"155":1,"168":1,"180":1,"268":1,"319":2,"348":1,"406":1,"482":1}}],["мер",{"2":{"345":1,"444":1}}],["меры",{"2":{"123":1,"248":1,"418":1}}],["меру",{"2":{"23":1}}],["мере",{"2":{"12":2,"141":1,"155":2,"158":1,"160":2,"167":1,"175":1,"177":2,"188":1,"197":1,"215":1,"219":1,"227":1,"232":1,"235":1,"260":1,"266":1,"291":1,"296":1,"327":1,"333":1,"351":1,"357":1,"377":1,"399":1,"416":1,"434":1,"436":1,"442":1,"476":1}}],["ментор",{"2":{"491":2}}],["менталитета",{"2":{"137":1}}],["меньшим",{"2":{"399":1,"422":1}}],["меньших",{"2":{"291":1}}],["меньший",{"2":{"160":1,"482":1}}],["меньшего",{"2":{"357":1}}],["меньше",{"2":{"201":1,"257":1,"327":1,"482":1,"579":1}}],["менеджера",{"2":{"396":1,"460":1}}],["менеджер",{"2":{"123":3,"179":1,"320":1,"447":1}}],["менее",{"2":{"2":1,"122":2,"186":1,"227":1,"231":1,"232":1,"234":1,"242":1,"318":1,"319":1,"345":1,"410":1,"424":1,"444":1,"492":1,"541":1}}],["меня",{"2":{"478":1}}],["меняющими",{"2":{"164":1}}],["меняются",{"2":{"165":1,"177":1,"474":1}}],["меняют",{"2":{"156":1}}],["меняете",{"2":{"478":1}}],["меняет",{"2":{"160":1}}],["меняется",{"2":{"122":1,"341":1,"407":1,"410":1}}],["меняем",{"2":{"147":1,"483":1}}],["менялась",{"2":{"96":1}}],["меняя",{"2":{"17":1,"89":1,"542":1}}],["меняться",{"2":{"92":1,"404":1,"442":1,"474":1}}],["менять",{"2":{"17":1,"41":1,"114":1,"421":1,"426":1,"573":1}}],["меню",{"0":{"87":1,"263":1,"266":1,"267":1,"269":1},"1":{"88":1,"89":1,"90":1},"2":{"3":2,"4":1,"29":1,"30":1,"33":1,"88":1,"104":1,"107":2,"179":1,"240":1,"241":1,"242":2,"243":1,"248":1,"254":5,"260":1,"263":4,"264":1,"266":7,"267":3,"268":8,"269":3,"271":2,"273":2,"296":2,"297":1,"298":3,"301":2,"351":1,"362":2,"401":1,"407":1,"436":1,"438":2,"477":1,"561":1,"570":1}}],["ах",{"2":{"474":1}}],["аудио",{"2":{"426":1}}],["аутентифицирует",{"2":{"421":1}}],["аутентифицирующему",{"2":{"416":1}}],["аутентификаторы",{"2":{"420":1}}],["аутентификацию",{"2":{"124":1,"416":2,"417":1}}],["аутентификацией",{"2":{"123":1}}],["аутентификация",{"0":{"123":1,"415":1,"416":1,"420":2,"421":1,"422":1},"2":{"70":1,"123":5,"414":1,"415":1,"418":2,"420":2,"421":1}}],["аутентификации",{"0":{"414":1},"1":{"415":1,"416":1,"417":1,"418":1,"419":1,"420":1,"421":1,"422":1},"2":{"59":1,"123":1,"341":2,"397":2,"404":1,"413":1,"414":1,"415":4,"416":5,"417":4,"418":2,"419":1,"421":5,"422":1,"423":2,"424":2,"437":3,"478":1,"501":2,"573":1}}],["аутентификаций",{"2":{"40":1}}],["аута",{"2":{"334":1}}],["ами",{"2":{"334":1}}],["аварийно",{"2":{"319":1}}],["авиабилетов",{"2":{"281":1}}],["авиабилеты",{"2":{"277":1}}],["автошколе",{"2":{"491":1}}],["автономным",{"2":{"375":1}}],["автономной",{"2":{"299":1}}],["автономности",{"2":{"298":1}}],["автономное",{"2":{"289":1,"291":1}}],["автономного",{"2":{"157":1,"291":2,"298":1}}],["автоматы",{"2":{"369":1}}],["автомат",{"2":{"369":2}}],["автоматического",{"2":{"152":1,"156":1,"300":1,"346":1,"396":1}}],["автоматические",{"2":{"467":1}}],["автоматически",{"2":{"53":1,"121":2,"142":1,"155":1,"160":1,"179":1,"180":1,"183":1,"187":1,"226":1,"227":1,"228":1,"277":1,"298":2,"318":1,"322":1,"339":2,"357":2,"396":1,"400":1,"404":1,"407":2,"410":1,"413":2,"422":1,"448":1,"451":1,"482":1,"561":1}}],["автоматизацией",{"2":{"491":1}}],["автоматизацию",{"2":{"180":1}}],["автоматизации",{"2":{"76":1,"289":1,"394":1,"396":2}}],["автоматизируя",{"2":{"515":1}}],["автоматизирует",{"2":{"152":1}}],["автоматизированный",{"2":{"467":1}}],["автоматизированными",{"2":{"455":1}}],["автоматизированных",{"2":{"444":1,"468":1}}],["автоматизированное",{"2":{"444":1,"469":1}}],["автоматизировано",{"2":{"444":1}}],["автоматизировать",{"2":{"151":1}}],["автозаполнения",{"2":{"318":1}}],["автор",{"2":{"373":1}}],["авторство",{"2":{"199":1}}],["авторизации",{"2":{"416":2}}],["авторизационный",{"2":{"123":1}}],["авторизация",{"0":{"123":1},"2":{"70":1,"123":4}}],["автообновление",{"2":{"152":1}}],["автокомплита",{"2":{"98":1}}],["автокомплит",{"0":{"98":1},"2":{"98":1}}],["азы",{"2":{"156":1}}],["абзаца",{"2":{"244":1,"254":1,"276":1}}],["абзацев",{"2":{"244":1}}],["абы",{"2":{"138":1}}],["абсолютный",{"2":{"149":1}}],["абсолютном",{"2":{"124":1}}],["абсолютно",{"2":{"96":1,"483":1,"491":2}}],["абстрагированный",{"2":{"202":1}}],["абстрагирование",{"2":{"122":1,"199":1}}],["абстрагировать",{"2":{"199":1}}],["абстракции",{"2":{"191":1,"213":1}}],["абстракция",{"0":{"3":1},"2":{"122":1,"194":1,"545":1}}],["абстрактный",{"2":{"570":1}}],["абстрактны",{"2":{"175":1}}],["абстрактное",{"2":{"174":1}}],["анонсы",{"2":{"503":1}}],["аномалией",{"2":{"457":1}}],["антипаттерн",{"2":{"306":1}}],["антипаттерны",{"2":{"202":1}}],["антипаттерном",{"2":{"202":1,"438":1}}],["анимационный",{"2":{"438":1}}],["анимация",{"2":{"363":1}}],["анимации",{"2":{"168":3,"239":1,"400":1}}],["анимацию",{"2":{"155":1,"492":1}}],["английского",{"2":{"491":1}}],["английском",{"2":{"378":1,"491":2}}],["англ",{"2":{"125":1,"422":1}}],["аналогу",{"2":{"492":1}}],["аналогов",{"2":{"482":1}}],["аналогом",{"2":{"478":1}}],["аналогами",{"2":{"315":1}}],["аналог",{"2":{"96":1,"131":1,"438":1,"447":1,"478":1}}],["аналогию",{"2":{"491":1}}],["аналогией",{"2":{"483":1}}],["аналогии",{"2":{"362":1}}],["аналогичен",{"2":{"201":1,"362":1,"553":1,"582":1}}],["аналогичную",{"2":{"453":1}}],["аналогичные",{"2":{"478":1}}],["аналогичным",{"2":{"187":1,"445":1}}],["аналогичных",{"2":{"107":1,"291":1}}],["аналогичный",{"2":{"96":1,"98":1,"242":1,"314":1,"362":1,"422":1,"491":1}}],["аналогичного",{"2":{"541":1}}],["аналогичном",{"2":{"22":1}}],["аналогично",{"2":{"2":1,"18":1,"294":1,"329":1}}],["аналоги",{"0":{"22":1},"2":{"5":1,"478":1}}],["аналитика",{"2":{"73":1}}],["анализировать",{"2":{"301":1}}],["анализа",{"2":{"14":1,"327":1,"424":1}}],["анализ",{"0":{"8":1,"20":1,"73":1},"1":{"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"21":1,"22":1},"2":{"12":1,"72":1,"241":1,"271":1}}],["ассоциируют",{"2":{"466":1}}],["ассоциируются",{"2":{"239":1}}],["асинхронная",{"2":{"233":1,"327":1}}],["асинхронности",{"2":{"483":1}}],["асинхронность",{"2":{"483":4}}],["асинхронно",{"2":{"319":1}}],["асинхронное",{"2":{"236":1}}],["асинхронном",{"2":{"234":1}}],["асинхронной",{"2":{"232":1,"233":1,"256":1,"339":1}}],["асинхронного",{"2":{"224":1,"327":1,"357":1,"414":1,"442":1}}],["асинхронную",{"2":{"199":1,"232":1,"233":1,"327":1,"450":1,"545":1}}],["асинхронный",{"0":{"357":1,"450":1},"2":{"327":1,"450":1}}],["асинхронных",{"2":{"231":1,"232":2,"233":1,"414":1,"438":1}}],["асинхронные",{"0":{"207":1},"2":{"168":1,"232":2,"327":1,"399":1,"445":1}}],["асинхронными",{"2":{"207":1,"234":1,"327":1,"340":1}}],["асинхронным",{"2":{"122":1,"234":1,"313":1}}],["аспекте",{"2":{"479":1,"482":1}}],["аспекты",{"2":{"239":1,"382":1}}],["аспект",{"2":{"65":1,"240":1}}],["аспиранты",{"2":{"65":1}}],["апгрейд",{"2":{"483":1,"492":1}}],["апдейта",{"2":{"396":1}}],["апплеты",{"2":{"155":1}}],["аппаратных",{"2":{"346":1}}],["аппаратные",{"2":{"239":1}}],["аппаратным",{"2":{"239":1}}],["аппаратное",{"2":{"291":1,"377":1}}],["аппаратного",{"2":{"232":1}}],["аппаратному",{"2":{"145":1,"377":1}}],["аппарате",{"2":{"73":1}}],["апеллирующая",{"2":{"96":1}}],["аккуратней",{"2":{"479":1}}],["аккуратно",{"2":{"447":1}}],["аккордеона",{"2":{"267":1,"268":1}}],["аккордеонное",{"2":{"267":1,"269":2}}],["аккордеонные",{"0":{"267":1}}],["аккаунт",{"2":{"123":1}}],["аккаунтом",{"2":{"123":1}}],["аккаунта",{"2":{"107":1,"436":1,"477":1}}],["академическое",{"2":{"218":1}}],["академических",{"2":{"155":1}}],["акт",{"2":{"462":1}}],["актуальность",{"2":{"399":1,"502":1}}],["актуальных",{"2":{"333":1,"399":1}}],["актуальные",{"2":{"318":1}}],["актуальны",{"2":{"248":1,"423":1}}],["актуален",{"2":{"160":1}}],["активен",{"2":{"407":1}}],["активных",{"2":{"338":1}}],["активными",{"2":{"327":1}}],["активного",{"2":{"368":1}}],["активности",{"2":{"279":1}}],["активно",{"2":{"96":1,"152":1,"352":1,"482":1}}],["активизируется",{"2":{"420":1}}],["активизируются",{"2":{"269":1}}],["активировать",{"2":{"298":1,"462":1}}],["активированным",{"2":{"299":1}}],["активирован",{"2":{"252":1,"319":1}}],["активирует",{"2":{"254":1}}],["активации",{"2":{"252":2,"254":1,"299":1,"329":1}}],["активы",{"2":{"181":1,"299":1}}],["акции",{"2":{"4":1}}],["атомный",{"2":{"436":1,"476":1}}],["атомов",{"2":{"433":1,"476":1}}],["атомы",{"2":{"433":1,"476":1}}],["атомарный",{"0":{"433":1},"2":{"476":1,"477":1}}],["атомарного",{"2":{"181":1,"194":1,"477":1}}],["аттрибуты",{"2":{"531":1}}],["аттрибутах",{"2":{"490":1}}],["аттрибута",{"2":{"357":1}}],["аттрибут",{"2":{"157":1,"531":2}}],["аттрибуту",{"2":{"13":1}}],["атрибутом",{"2":{"364":1}}],["атрибутов",{"2":{"245":1,"253":1,"280":1,"293":3,"364":1,"368":1,"413":1,"444":1}}],["атрибутами",{"2":{"357":1,"411":1}}],["атрибутам",{"2":{"187":1,"442":1}}],["атрибута",{"2":{"162":1,"163":1,"165":1,"187":2,"218":1,"294":1,"321":1,"362":1,"407":1,"409":1,"410":2}}],["атрибуту",{"2":{"160":1,"218":2,"251":1}}],["атрибут",{"2":{"129":2,"131":1,"156":2,"159":3,"160":1,"162":1,"165":2,"229":1,"230":1,"293":1,"294":1,"295":1,"296":1,"358":1,"407":4,"409":2,"410":1}}],["атрибуте",{"2":{"129":1,"334":1}}],["атрибуты",{"2":{"74":1,"130":2,"160":1,"161":1,"192":1,"293":2,"357":2,"358":2,"413":1}}],["ат",{"2":{"123":2}}],["алиаса",{"2":{"429":1}}],["алиасы",{"2":{"429":1}}],["алиас",{"2":{"429":2}}],["алгоритму",{"2":{"416":1}}],["алгоритмы",{"2":{"200":1}}],["алгоритм",{"2":{"198":1,"416":2}}],["алгоритмов",{"2":{"73":1}}],["альтернативной",{"2":{"218":1}}],["альтернативный",{"2":{"160":1,"329":1,"356":1,"362":1}}],["альтернативные",{"2":{"73":1,"281":1}}],["альтернативой",{"2":{"196":1,"260":1,"268":1,"357":2}}],["альтернативы",{"2":{"183":1,"454":1,"461":1}}],["альтернативах",{"2":{"252":1}}],["альтернатива",{"2":{"98":1,"124":1,"152":1,"226":1,"306":1,"453":1,"455":1}}],["альтернатив",{"2":{"50":1,"271":1,"304":1,"306":1,"327":1}}],["аргумент",{"2":{"315":1,"358":1,"362":1}}],["аргументов",{"2":{"306":1,"358":1,"453":2}}],["аргументы",{"2":{"184":1,"321":1}}],["аргументами",{"2":{"448":1,"453":1}}],["аргумента",{"2":{"130":1,"157":1,"219":1,"227":1,"291":1,"315":2,"321":1,"345":1,"356":1,"357":1,"358":1,"448":2,"452":1}}],["арендовать",{"2":{"153":1}}],["арендуем",{"2":{"145":1}}],["артефакты",{"2":{"73":1}}],["архитектур",{"2":{"346":1,"375":1}}],["архитектуру",{"2":{"346":1}}],["архитектурой",{"2":{"156":1,"178":1}}],["архитектуре",{"2":{"104":1,"325":1,"335":1}}],["архитектурные",{"0":{"431":1},"1":{"432":1,"433":1,"434":1,"435":1,"436":1,"437":1,"438":1,"439":1,"440":1,"441":1}}],["архитектурный",{"2":{"194":1}}],["архитектурными",{"2":{"156":1,"331":1}}],["архитектурных",{"2":{"74":1,"177":1,"331":1}}],["архитектурная",{"2":{"156":1}}],["архитектурной",{"2":{"474":1}}],["архитектурное",{"2":{"74":1}}],["архитектурно",{"2":{"6":1,"478":1}}],["архитектуры",{"2":{"40":1,"67":1,"96":1,"145":1,"192":1,"194":1,"203":1,"237":1,"327":1,"346":1,"377":1,"383":1,"389":1,"414":1,"434":1,"542":1}}],["архитектура",{"0":{"1":1,"6":1,"74":1,"483":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1},"2":{"72":1,"74":2,"318":1,"333":1,"351":1,"436":1,"476":1,"477":1,"483":2,"501":1}}],["адресом",{"2":{"179":1}}],["адресов",{"2":{"142":2}}],["адресе",{"2":{"142":1,"144":1,"408":2}}],["адресное",{"2":{"142":1}}],["адресата",{"2":{"142":1}}],["адресату",{"2":{"142":1}}],["адресах",{"2":{"142":1,"144":1}}],["адреса",{"2":{"142":5,"152":1,"180":1,"273":1,"400":1}}],["адрес",{"2":{"142":8,"144":1,"162":1,"179":1,"187":1,"294":1,"296":1,"345":1,"399":1,"407":1,"417":1,"422":2,"456":1}}],["адресу",{"2":{"121":1,"125":1,"136":1,"142":1,"178":1,"238":1,"246":1,"290":1,"318":1,"345":2,"348":1,"362":1,"364":1,"368":1,"379":1,"398":1,"413":2,"422":1,"443":1,"561":1}}],["администратора",{"2":{"462":1}}],["административного",{"2":{"142":1}}],["административная",{"2":{"70":1}}],["администрирования",{"2":{"146":1}}],["админ",{"2":{"123":1,"436":1}}],["админке",{"2":{"13":1,"123":1}}],["админка",{"2":{"12":1,"56":1}}],["адаптация",{"2":{"299":1}}],["адаптации",{"2":{"202":1,"291":1}}],["адаптацию",{"2":{"196":1,"522":1}}],["адаптируется",{"2":{"271":2}}],["адаптирована",{"2":{"515":1}}],["адаптированная",{"2":{"178":1}}],["адаптировать",{"2":{"85":1,"200":1,"405":1}}],["адаптивны",{"2":{"564":1}}],["адаптивный",{"2":{"289":1}}],["адаптивного",{"2":{"541":1}}],["адаптивноcти",{"2":{"487":1}}],["адаптивность",{"0":{"35":1,"543":1},"2":{"483":1,"490":1,"543":2}}],["адаптивностью",{"2":{"25":1}}],["адаптивности",{"2":{"23":1,"96":1,"107":1}}],["адаптивная",{"2":{"36":1}}],["адаптеров",{"2":{"96":1}}],["адаптер",{"0":{"82":1},"1":{"83":1},"2":{"41":2,"546":2,"570":1}}],["адаптеры",{"0":{"41":1},"2":{"41":1}}],["а",{"2":{"4":1,"11":1,"12":2,"16":1,"23":1,"25":1,"39":1,"65":1,"95":1,"96":2,"105":2,"111":1,"113":1,"114":1,"122":1,"123":2,"124":1,"125":2,"126":2,"127":1,"129":1,"130":2,"131":1,"135":1,"142":3,"151":2,"152":2,"156":4,"157":1,"158":1,"159":1,"160":4,"167":1,"168":1,"170":1,"177":1,"179":2,"180":6,"181":2,"184":6,"187":5,"188":1,"189":2,"190":1,"194":2,"195":1,"198":3,"201":1,"202":2,"207":1,"212":3,"213":2,"217":1,"222":1,"224":1,"225":1,"226":3,"228":1,"229":1,"230":1,"231":1,"233":1,"237":1,"239":1,"240":2,"241":2,"242":1,"243":2,"248":1,"249":1,"260":2,"264":1,"266":1,"267":1,"271":2,"273":1,"277":1,"279":1,"281":1,"285":1,"289":1,"291":3,"293":1,"296":2,"298":3,"299":4,"300":1,"301":3,"304":1,"306":3,"308":1,"310":1,"314":1,"315":1,"316":4,"318":2,"319":3,"321":2,"322":1,"325":3,"327":2,"329":2,"331":2,"333":1,"334":1,"335":1,"337":2,"340":1,"345":2,"346":2,"347":1,"348":1,"358":1,"359":2,"360":2,"362":1,"363":1,"367":2,"368":2,"369":1,"370":1,"375":2,"387":1,"390":2,"402":1,"404":3,"407":4,"408":1,"409":1,"410":3,"413":1,"415":2,"416":3,"417":1,"420":5,"421":1,"422":3,"423":1,"438":2,"445":1,"448":3,"449":1,"450":3,"452":2,"453":2,"454":2,"457":3,"459":1,"463":1,"465":3,"466":2,"467":1,"468":2,"474":2,"477":1,"478":5,"482":1,"483":5,"485":1,"491":4,"492":5,"508":1,"515":1,"538":1,"542":1,"552":1,"568":1}}],["ощущениям",{"2":{"492":1}}],["ощущение",{"2":{"243":1}}],["ощутим",{"2":{"346":1}}],["ощутить",{"2":{"327":1}}],["оцените",{"2":{"438":1}}],["оценить",{"2":{"302":1,"336":1}}],["оценки",{"2":{"301":2,"387":1,"444":1}}],["охватывают",{"2":{"362":1,"423":1}}],["охватывает",{"2":{"152":1,"239":1,"253":1,"502":1}}],["охватить",{"2":{"291":2,"445":1}}],["оживают",{"2":{"291":1}}],["ожидать",{"2":{"266":1,"313":1,"316":1,"318":1}}],["ожиданий",{"2":{"457":1}}],["ожидание",{"2":{"336":1}}],["ожидания",{"2":{"234":1,"357":1,"420":1}}],["ожидании",{"2":{"188":1}}],["ожидая",{"2":{"232":1,"420":1}}],["ожидалось",{"2":{"187":1,"229":1,"233":1,"336":1,"449":1,"453":1}}],["ожидающие",{"2":{"185":1,"187":1}}],["ожидаемую",{"2":{"453":1}}],["ожидаемых",{"2":{"444":1}}],["ожидаемым",{"2":{"359":1}}],["ожидаемый",{"2":{"218":1}}],["ожидаемые",{"2":{"160":1}}],["ожидаемому",{"2":{"215":1,"448":1}}],["ожидает",{"2":{"163":1,"167":1,"233":1,"335":1,"410":1,"420":1}}],["ожидается",{"2":{"132":1,"444":1,"449":1}}],["оговорками",{"2":{"160":1}}],["огромен",{"2":{"181":1}}],["огромный",{"2":{"428":1,"465":1}}],["огромные",{"2":{"156":1}}],["огромного",{"2":{"199":1}}],["огромном",{"2":{"142":1}}],["огромная",{"2":{"156":1}}],["ограничивают",{"2":{"291":1}}],["ограничивает",{"2":{"48":1,"159":1,"187":1}}],["ограничимся",{"2":{"422":1}}],["ограничим",{"2":{"240":1}}],["ограничить",{"2":{"183":1}}],["ограничен",{"2":{"319":1}}],["ограничено",{"2":{"234":1}}],["ограниченным",{"2":{"415":1}}],["ограниченный",{"2":{"227":1}}],["ограниченного",{"2":{"142":1,"258":1,"260":1}}],["ограниченное",{"2":{"142":1,"241":1}}],["ограничены",{"2":{"181":1}}],["ограничений",{"2":{"160":1,"319":2,"445":1,"478":1,"492":1}}],["ограничением",{"2":{"261":1,"359":1}}],["ограничение",{"2":{"154":1,"319":2,"399":1}}],["ограничения",{"2":{"135":1,"156":1,"231":1,"308":1,"311":1,"319":3,"347":2,"361":1,"490":1}}],["оффлайн",{"2":{"492":2}}],["оффлайном",{"2":{"291":1}}],["оформить",{"2":{"436":1,"481":1}}],["оформлении",{"2":{"277":1}}],["оформлением",{"2":{"311":1}}],["оформление",{"2":{"70":1}}],["оформления",{"2":{"25":1,"277":1,"338":1}}],["официальная",{"2":{"293":1,"478":1,"502":1}}],["официальную",{"2":{"177":1,"318":1}}],["официальные",{"2":{"430":1,"445":1,"459":1,"468":1}}],["официальными",{"2":{"390":1}}],["официальным",{"2":{"158":1,"184":1,"318":1}}],["официальных",{"2":{"142":1,"184":1,"444":1}}],["официальный",{"2":{"126":1,"132":1,"178":5,"268":1,"364":1,"388":1,"400":1,"460":1}}],["официально",{"2":{"314":1,"478":1}}],["официальному",{"2":{"313":1}}],["официальном",{"2":{"182":1,"268":1,"318":1,"443":1}}],["официального",{"2":{"178":1,"459":1}}],["официальное",{"2":{"134":1}}],["официальной",{"2":{"126":1,"135":1,"136":1,"145":1,"146":1,"150":1,"167":1,"168":1,"178":1,"341":1,"362":1,"364":1,"404":1,"413":2,"438":1,"448":1,"451":1,"452":1,"460":1,"461":1}}],["очищен",{"2":{"338":1}}],["очищаются",{"2":{"168":1}}],["очищаться",{"2":{"123":1}}],["очистит",{"2":{"588":1}}],["очистить",{"2":{"182":1,"188":1,"223":1}}],["очистки",{"2":{"456":1}}],["очистке",{"2":{"222":1}}],["очереди",{"2":{"188":1,"225":1,"275":1,"483":1}}],["очередь",{"2":{"25":1,"157":1,"194":2,"224":2,"225":1,"234":2,"327":1,"331":1,"369":1,"399":1,"409":1,"436":1,"478":2,"483":1}}],["очевидны",{"2":{"353":1}}],["очевидным",{"2":{"157":1,"159":1,"240":1,"338":1,"404":1}}],["очевидной",{"2":{"364":1,"414":1,"445":1}}],["очевидно",{"2":{"16":1,"22":1,"158":1,"241":1,"404":1}}],["очень",{"2":{"3":1,"12":1,"14":1,"39":1,"40":1,"41":1,"44":1,"50":1,"51":1,"62":1,"96":1,"101":1,"123":3,"124":2,"137":1,"145":4,"146":1,"150":1,"156":1,"157":1,"158":2,"160":1,"165":1,"178":3,"179":3,"180":1,"188":1,"196":3,"198":1,"200":1,"208":1,"213":1,"215":1,"218":1,"220":2,"222":1,"224":1,"228":2,"230":2,"231":1,"232":2,"233":1,"239":1,"244":1,"249":1,"252":1,"257":1,"258":1,"266":1,"268":1,"272":1,"278":1,"279":1,"309":1,"313":2,"319":1,"328":1,"329":1,"337":3,"338":1,"340":1,"341":1,"346":1,"354":1,"357":1,"359":1,"360":1,"361":1,"362":1,"365":1,"369":1,"399":1,"402":1,"407":1,"420":1,"422":1,"425":1,"429":1,"430":4,"438":1,"446":1,"447":1,"453":2,"455":2,"457":2,"463":1,"464":1,"468":1,"472":1,"474":3,"478":1,"479":1,"482":1,"489":1,"490":1,"491":4,"492":3,"546":1,"575":2}}],["ооп",{"2":{"112":1,"195":4,"196":1,"478":1,"482":1,"483":3}}],["ом",{"2":{"101":1,"180":1,"462":1,"465":1,"468":1,"469":1,"482":1,"492":1}}],["ошибетесь",{"2":{"159":1}}],["ошибемся",{"2":{"40":1}}],["ошибке",{"2":{"232":1,"248":1,"449":1,"465":1}}],["ошибку",{"2":{"217":1,"218":1,"234":1,"328":2,"338":1,"448":2,"449":1}}],["ошибкам",{"2":{"315":1,"442":2}}],["ошибками",{"2":{"101":1}}],["ошибка",{"0":{"449":1},"2":{"122":1,"160":1,"234":1,"256":1,"328":1,"339":1,"422":1,"453":1,"483":1}}],["ошибки",{"2":{"101":2,"125":1,"233":1,"328":2,"339":1,"414":1,"418":1,"419":1,"430":1,"444":1,"448":1,"449":2}}],["ошибок",{"2":{"79":1,"218":2,"223":1,"226":1,"248":3,"419":1,"420":1,"444":2,"448":1}}],["оранжевого",{"2":{"241":1}}],["оригинал",{"2":{"463":1}}],["оригинального",{"2":{"252":1}}],["оригинальный",{"2":{"226":1}}],["ориентацию",{"2":{"295":1}}],["ориентации",{"2":{"271":1}}],["ориентация",{"2":{"156":1}}],["ориентированных",{"2":{"483":1}}],["ориентированными",{"2":{"159":1}}],["ориентированное",{"2":{"331":1,"482":1}}],["ориентированного",{"2":{"3":1,"195":1,"482":1}}],["ориентироваться",{"2":{"22":1,"263":1}}],["ориентируемся",{"2":{"12":1,"13":1}}],["органично",{"2":{"477":1}}],["организует",{"2":{"433":1,"436":1,"476":2}}],["организмы",{"2":{"433":1,"476":1}}],["организм",{"2":{"194":1}}],["организовываться",{"2":{"369":1}}],["организовывать",{"2":{"160":1}}],["организован",{"2":{"447":1}}],["организованные",{"2":{"436":1,"476":1}}],["организованными",{"2":{"423":1}}],["организованности",{"2":{"243":1}}],["организованы",{"2":{"133":1,"268":1}}],["организовать",{"2":{"138":1,"158":1,"160":1,"189":1,"333":1,"397":1,"406":1,"423":1,"438":1,"467":1}}],["организациям",{"2":{"286":1}}],["организациях",{"2":{"268":1,"401":1}}],["организация",{"2":{"160":1}}],["организаций",{"2":{"142":2}}],["организацией",{"2":{"142":1,"270":1}}],["организацию",{"2":{"133":1,"179":1,"447":1}}],["организации",{"0":{"133":1,"270":1},"1":{"271":1,"272":1,"273":1,"274":1},"2":{"64":1,"126":1,"142":1,"157":1,"198":1,"311":1,"421":1,"422":1,"425":1,"435":1,"442":1,"447":1,"476":1,"482":1}}],["органами",{"2":{"194":1}}],["органом",{"2":{"152":1}}],["ов",{"2":{"48":1,"64":1}}],["одинаковую",{"2":{"318":1}}],["одинаковый",{"2":{"243":1,"319":1}}],["одинаковым",{"2":{"227":1}}],["одинаковыми",{"2":{"188":1,"429":1}}],["одинаковы",{"2":{"188":1,"345":1,"469":1}}],["одинаковых",{"2":{"187":1}}],["одинакового",{"2":{"260":1}}],["одинаковое",{"2":{"242":1}}],["одинаково",{"2":{"129":1,"187":1,"309":1}}],["один",{"2":{"36":1,"41":1,"43":1,"58":1,"112":1,"113":1,"123":2,"130":1,"142":1,"158":1,"159":1,"162":1,"168":1,"178":1,"179":1,"186":1,"187":2,"196":1,"199":1,"200":1,"208":2,"209":1,"211":1,"221":1,"222":2,"228":1,"229":1,"230":1,"242":1,"252":1,"257":1,"264":1,"281":1,"285":1,"298":3,"309":1,"316":1,"318":1,"331":1,"342":1,"345":1,"352":1,"356":1,"357":3,"362":1,"364":1,"368":2,"369":2,"370":1,"399":1,"404":1,"408":1,"410":2,"415":1,"419":1,"421":2,"422":1,"429":1,"438":3,"446":1,"448":2,"450":1,"451":1,"456":1,"478":4,"479":1,"483":1,"492":1}}],["одаренный",{"2":{"26":1}}],["одних",{"2":{"312":1}}],["одни",{"2":{"192":1,"399":1,"408":1,"436":2,"457":1,"458":1}}],["одним",{"2":{"14":1,"41":1,"137":1,"159":1,"160":1,"183":3,"188":1,"231":1,"268":1,"286":1,"327":1,"340":2,"347":1,"354":1,"359":1,"362":1,"369":2,"414":1,"416":1,"445":1,"477":1}}],["одними",{"2":{"3":1,"183":1}}],["одну",{"2":{"82":1,"183":1,"196":1,"223":1,"228":1,"239":1,"271":1,"283":1,"311":1,"319":1,"321":1,"343":1,"345":1,"404":1,"421":1,"447":1,"482":1,"483":1}}],["одна",{"2":{"96":3,"117":1,"118":1,"242":2,"260":1,"267":1,"285":1,"297":1,"327":1,"369":1,"410":1,"455":1,"483":1}}],["однажды",{"2":{"62":1}}],["однако",{"2":{"12":1,"13":1,"23":1,"50":1,"62":2,"137":1,"140":1,"150":1,"152":1,"156":2,"159":1,"160":5,"174":1,"175":1,"177":1,"178":1,"179":1,"181":1,"183":1,"188":1,"196":1,"198":1,"200":1,"210":1,"227":1,"228":2,"233":2,"234":1,"238":1,"240":1,"257":1,"260":1,"264":1,"266":1,"268":2,"272":1,"274":1,"291":2,"293":1,"298":1,"299":2,"306":1,"311":1,"313":1,"315":2,"318":1,"326":1,"327":2,"337":1,"338":1,"354":1,"356":1,"357":2,"358":2,"364":1,"368":1,"399":1,"401":1,"404":1,"407":1,"409":1,"410":1,"415":1,"416":3,"436":1,"442":1,"444":1,"445":2,"448":1,"450":1,"453":2,"460":1,"462":1,"470":1,"474":1,"476":1,"478":2,"490":1,"491":2,"492":2,"537":1,"538":1,"575":1}}],["однократный",{"2":{"448":1}}],["однокомпонентного",{"2":{"337":1}}],["однокомпонентное",{"2":{"190":1,"337":1}}],["одноразового",{"2":{"420":1}}],["одноразовому",{"0":{"420":1}}],["одноименный",{"2":{"407":1}}],["однозначных",{"2":{"327":1}}],["однозначно",{"2":{"319":1,"430":1,"482":1}}],["однопоточным",{"2":{"327":1}}],["однопоточными",{"2":{"232":1}}],["однопоточных",{"2":{"207":1}}],["однофайловыми",{"2":{"447":1}}],["однофайловый",{"2":{"159":1}}],["однофайловых",{"0":{"159":1},"2":{"157":1,"197":1,"451":1,"469":1}}],["однофайловые",{"2":{"155":1,"176":1,"180":1,"450":1}}],["одновременно",{"2":{"145":1,"179":1,"188":1,"226":1,"248":1,"267":1,"365":1,"436":1,"438":1,"448":1,"454":1,"483":1}}],["одновременного",{"2":{"131":1,"311":1}}],["одновременных",{"2":{"145":1,"483":1}}],["одностраничными",{"2":{"397":1}}],["одностраничных",{"2":{"325":1,"386":1}}],["одностраничные",{"0":{"386":1,"397":1},"1":{"398":1,"399":1,"400":1,"401":1,"402":1,"403":1,"404":1,"405":1,"406":1,"407":1,"408":1,"409":1,"410":1,"411":1,"412":1,"413":1,"414":1,"415":1,"416":1,"417":1,"418":1,"419":1,"420":1,"421":1,"422":1,"423":1,"424":1},"2":{"134":1,"143":2,"265":1,"341":1,"357":1,"364":1,"399":1}}],["одностраничное",{"2":{"289":1,"371":1}}],["одностраничного",{"2":{"139":1}}],["одного",{"2":{"135":1,"146":1,"190":1,"208":1,"232":1,"266":1,"314":1,"319":1,"335":1,"348":1,"369":1,"422":1,"442":1,"447":1,"458":1,"463":1,"478":2}}],["одномоментное",{"2":{"318":1}}],["одному",{"2":{"142":1,"218":1,"447":1}}],["одном",{"2":{"95":1,"112":1,"114":1,"142":1,"159":1,"184":1,"185":1,"188":1,"199":1,"202":1,"220":1,"232":1,"246":1,"253":1,"257":1,"265":1,"271":1,"315":1,"319":1,"327":1,"446":1,"454":1,"482":1,"483":1,"506":1}}],["одно",{"2":{"48":1,"156":1,"160":1,"195":1,"199":1,"200":1,"223":1,"226":1,"228":1,"234":2,"258":1,"311":1,"312":1,"358":1,"362":1,"369":1,"396":1,"407":1,"415":1,"445":1,"447":1,"448":1,"453":1,"466":1,"482":1,"483":1}}],["одной",{"2":{"16":1,"34":1,"50":1,"95":1,"156":3,"187":1,"196":1,"217":1,"222":1,"231":1,"232":1,"243":1,"259":1,"271":1,"291":1,"298":1,"304":1,"319":1,"327":1,"361":1,"370":1,"399":1,"422":1,"426":1,"453":1,"457":1,"466":1,"478":1,"541":1}}],["означают",{"2":{"399":1,"469":1}}],["означает",{"2":{"11":2,"152":1,"156":2,"160":1,"181":1,"184":1,"191":1,"200":2,"222":1,"226":1,"228":1,"240":1,"241":1,"268":1,"311":1,"314":1,"327":2,"352":1,"358":1,"359":1,"363":1,"404":1,"414":1,"419":1,"436":1,"448":1,"458":1,"476":1,"535":1,"538":1}}],["ознакомьтесь",{"2":{"322":1,"333":1,"422":1,"491":1}}],["ознакомления",{"2":{"318":1,"537":1}}],["ознакомительный",{"2":{"468":1}}],["ознакомиться",{"2":{"56":1,"123":1,"140":1,"142":1,"241":1,"305":1,"321":1,"360":1,"363":1,"413":1,"541":1,"542":1}}],["ознакомились",{"2":{"158":1}}],["озон",{"2":{"4":1}}],["осущестляется",{"2":{"426":1}}],["осуществляет",{"2":{"411":1}}],["осуществляется",{"2":{"145":1,"152":2,"209":1,"315":1,"319":1}}],["осуществлять",{"2":{"328":1,"359":1}}],["осуществляться",{"2":{"221":1,"359":1,"415":1,"416":1,"422":1}}],["осуществляются",{"2":{"208":1}}],["осуществления",{"2":{"122":1,"414":1}}],["оскорбления",{"2":{"284":1}}],["ос",{"2":{"178":1,"180":1,"252":1,"256":3,"258":1,"295":1,"430":1}}],["освоения",{"2":{"468":1}}],["освоении",{"2":{"291":1}}],["освобождаем",{"2":{"198":1}}],["освобождать",{"2":{"198":1}}],["освобождения",{"2":{"198":1}}],["освободить",{"2":{"198":1}}],["осведомлен",{"2":{"279":1}}],["освежить",{"2":{"143":1}}],["осваивать",{"2":{"177":1}}],["особый",{"2":{"450":1}}],["особых",{"2":{"296":1,"300":1,"346":1,"359":1,"377":1}}],["особенного",{"2":{"336":1}}],["особенностей",{"2":{"228":1,"232":1,"327":1}}],["особенностью",{"2":{"227":1}}],["особенность",{"2":{"137":1,"482":1}}],["особенно",{"2":{"138":1,"145":1,"178":1,"196":1,"201":1,"221":1,"224":1,"232":1,"234":1,"248":1,"325":1,"340":1,"479":1,"542":1}}],["особому",{"2":{"291":1}}],["особого",{"2":{"218":1,"293":1}}],["особое",{"2":{"142":1,"291":1}}],["особо",{"2":{"64":1}}],["основополагающих",{"2":{"231":1}}],["основополагающим",{"2":{"152":1}}],["основу",{"2":{"191":1,"289":1,"436":1,"468":1,"476":1}}],["основательным",{"2":{"478":1}}],["основателя",{"2":{"279":1}}],["основа",{"2":{"176":1,"466":1}}],["основано",{"2":{"466":1}}],["основан",{"2":{"242":1,"299":1,"416":1,"456":1}}],["основанное",{"2":{"446":1}}],["основанного",{"2":{"215":1,"444":1}}],["основанная",{"2":{"436":1,"476":1}}],["основанные",{"2":{"474":1}}],["основанным",{"2":{"188":1}}],["основанный",{"2":{"178":1,"182":1}}],["основанных",{"2":{"145":1}}],["основана",{"2":{"200":1}}],["основаны",{"2":{"156":1,"237":1,"298":1,"468":1}}],["основании",{"2":{"98":1,"225":1,"334":1}}],["основ",{"2":{"175":1,"222":1,"375":1,"446":1,"491":1}}],["основываясь",{"2":{"221":1,"368":1}}],["основы",{"2":{"153":1,"177":1,"223":1,"235":1,"384":1}}],["основе",{"2":{"96":1,"155":1,"156":1,"168":1,"179":1,"185":1,"240":1,"280":1,"301":1,"319":1,"337":3,"357":1,"387":1,"399":1,"410":1,"414":1,"420":1,"448":1,"464":1,"467":1,"478":1}}],["основную",{"2":{"309":1,"407":1}}],["основная",{"2":{"34":1,"65":1,"139":1,"142":1,"168":1,"187":1,"199":1,"208":1,"224":1,"239":1,"241":1,"249":1,"255":1,"258":1,"268":1,"271":1,"278":1,"289":1,"420":1,"421":1}}],["основное",{"0":{"306":1},"1":{"307":1,"308":1},"2":{"215":1,"231":1,"302":1,"319":1,"363":1,"436":1,"476":1,"478":1}}],["основной",{"2":{"35":1,"126":1,"180":1,"183":1,"186":2,"232":2,"241":1,"264":1,"271":2,"277":1,"295":1,"298":2,"319":1,"327":1,"357":1,"404":1,"416":1,"422":1,"430":1,"436":1,"463":1,"476":1,"478":1,"483":1,"489":1}}],["основного",{"2":{"29":2,"122":1,"186":1,"222":1,"320":1}}],["основном",{"2":{"10":1,"83":1,"140":1,"168":1,"177":1,"218":1,"219":1,"228":1,"238":1,"243":1,"254":1,"257":1,"258":1,"263":1,"267":1,"287":1,"295":1,"311":1,"329":1,"343":1,"399":1,"404":1,"415":1,"416":1,"541":1}}],["основным",{"2":{"157":1,"264":1,"303":1,"351":1,"483":1}}],["основными",{"2":{"39":1,"237":1,"348":1,"481":1}}],["основные",{"0":{"28":1},"1":{"29":1,"30":1,"31":1,"32":1},"2":{"23":1,"59":1,"74":1,"105":1,"123":1,"153":1,"244":1,"328":1,"337":1,"353":1,"358":1,"394":1,"435":1,"476":1,"479":1,"483":1,"502":1}}],["основных",{"2":{"17":1,"64":1,"74":1,"92":1,"96":1,"126":1,"263":1,"369":1,"459":1,"479":1}}],["острова",{"2":{"351":1}}],["острых",{"2":{"96":1}}],["осторожность",{"2":{"327":1}}],["осторожно",{"2":{"272":1}}],["остаться",{"2":{"464":1,"478":1}}],["останемся",{"2":{"335":1}}],["останова",{"2":{"271":2}}],["остановится",{"2":{"260":1}}],["остановиться",{"2":{"132":1}}],["остановимся",{"2":{"12":1,"187":1,"213":1,"333":1,"352":1,"404":1,"444":1}}],["осталось",{"2":{"183":1,"317":1}}],["остальной",{"2":{"368":1}}],["остальное",{"2":{"50":1,"159":1,"316":1,"430":1}}],["остальная",{"2":{"343":1}}],["остальными",{"2":{"265":1}}],["остальным",{"2":{"183":1}}],["остальных",{"2":{"129":1,"191":1,"235":2,"242":1,"341":1,"436":1,"469":1,"476":1}}],["остальные",{"2":{"17":1,"109":1,"129":1,"266":1,"285":1,"407":1}}],["остается",{"2":{"105":1,"122":1,"126":1,"179":1,"407":1}}],["оставьте",{"2":{"438":1}}],["оставались",{"2":{"327":1}}],["оставаться",{"2":{"200":1,"218":1}}],["оставить",{"2":{"276":1}}],["оставим",{"2":{"7":1,"108":1}}],["оставшихся",{"2":{"198":1}}],["оставшиеся",{"2":{"96":1}}],["оставшейся",{"2":{"179":1}}],["оставляем",{"2":{"92":1,"106":1}}],["оставлять",{"2":{"64":1,"258":1}}],["остаются",{"2":{"17":1,"442":1,"546":1}}],["о",{"0":{"143":1,"482":1},"1":{"144":1},"2":{"4":1,"10":1,"11":3,"31":1,"51":1,"58":1,"73":1,"82":1,"83":1,"96":1,"98":1,"126":1,"134":1,"135":1,"137":1,"142":2,"145":1,"153":4,"155":1,"156":1,"157":2,"158":1,"159":1,"160":1,"179":1,"180":1,"181":1,"187":1,"188":1,"197":1,"201":2,"227":1,"228":1,"229":1,"237":2,"239":1,"248":1,"254":1,"256":3,"258":3,"268":1,"271":1,"272":1,"273":1,"287":2,"291":4,"292":1,"298":2,"300":2,"319":3,"325":1,"327":1,"330":1,"332":1,"333":2,"338":1,"341":2,"345":1,"348":2,"354":1,"358":1,"364":2,"369":2,"371":1,"376":1,"383":1,"407":1,"410":1,"413":2,"419":1,"428":1,"438":1,"445":2,"447":1,"448":1,"450":1,"455":6,"457":1,"463":1,"465":1,"466":2,"468":1,"474":2,"482":2,"492":2,"503":1,"513":1,"515":1,"587":1}}],["окажется",{"2":{"421":1}}],["оказывается",{"2":{"282":1}}],["оказывают",{"2":{"274":1}}],["оказание",{"2":{"79":1}}],["оказать",{"2":{"74":1}}],["оказаться",{"2":{"4":1,"179":1,"299":1,"433":1,"476":1}}],["оказалось",{"2":{"62":1}}],["окне",{"2":{"256":1,"266":1,"283":1,"291":1,"453":1}}],["окна",{"2":{"198":2,"240":1,"242":1,"246":2,"247":1,"256":1,"295":1,"298":1,"319":1,"351":1,"363":2,"367":1,"462":1,"587":1}}],["окном",{"2":{"436":1,"477":1}}],["окно",{"2":{"179":1,"254":1,"265":1,"283":1,"344":1,"367":1,"404":1,"422":1,"450":1,"452":1,"462":1,"538":1}}],["окружности",{"2":{"259":1}}],["окружению",{"2":{"396":1}}],["окружения",{"2":{"396":1,"425":1,"541":1}}],["окружений",{"2":{"396":1}}],["окружении",{"2":{"256":1,"327":1}}],["окружение",{"2":{"168":1,"451":1}}],["окружающей",{"2":{"363":1}}],["окружающим",{"2":{"3":1,"34":1}}],["окружает",{"2":{"159":2}}],["окошко",{"2":{"233":1}}],["окончания",{"2":{"448":1}}],["окончанием",{"2":{"248":1}}],["окончании",{"2":{"182":1,"369":1}}],["окончательный",{"2":{"443":1}}],["окончательные",{"2":{"144":1}}],["окончательном",{"2":{"186":1}}],["около",{"2":{"89":1}}],["опен",{"2":{"491":1}}],["оперативной",{"2":{"430":1}}],["оператор",{"2":{"329":1,"369":1}}],["оператора",{"2":{"321":1}}],["операцией",{"2":{"357":1}}],["операциям",{"2":{"340":1}}],["операциями",{"2":{"198":1,"234":1}}],["операциях",{"2":{"319":1}}],["операция",{"2":{"227":2,"233":1,"339":2,"357":1,"419":1,"421":1}}],["операции",{"2":{"213":2,"228":2,"232":3,"233":1,"234":1,"256":1,"319":1,"327":1,"334":1,"337":2,"338":2,"339":2,"340":5,"352":1,"353":1,"354":1,"357":1,"415":1,"418":1,"445":1,"464":1}}],["операцию",{"2":{"196":1,"232":1,"234":2,"248":1,"284":1}}],["операций",{"2":{"164":1,"226":2,"232":2,"233":1,"234":2,"321":2,"337":1,"340":1,"407":1,"422":2,"459":1,"466":1,"474":1}}],["операционные",{"2":{"291":1}}],["операционных",{"2":{"291":1,"298":1,"346":1}}],["операционными",{"2":{"289":1,"291":1}}],["операционной",{"2":{"152":1,"291":3,"293":1,"296":1,"319":1,"377":1,"459":1}}],["операционная",{"2":{"145":1,"291":1}}],["операционную",{"2":{"145":1}}],["оперировать",{"2":{"227":1,"334":1}}],["оперирующие",{"2":{"39":1}}],["оперируют",{"2":{"3":1}}],["оповестить",{"2":{"482":1}}],["оповещение",{"2":{"320":1}}],["оповещения",{"2":{"222":1,"311":2}}],["оповещает",{"2":{"222":1}}],["опору",{"2":{"248":1}}],["опытным",{"2":{"542":1}}],["опытный",{"2":{"491":1}}],["опытных",{"2":{"96":1,"138":1,"242":1,"393":1,"502":2}}],["опытному",{"2":{"491":1,"541":1}}],["опытом",{"2":{"239":1}}],["опыту",{"2":{"196":1,"203":1,"249":1,"327":1}}],["опыт",{"2":{"153":1,"159":1,"233":1,"239":1,"258":1,"274":1,"287":1,"491":3,"492":1,"501":2,"588":1}}],["опыта",{"2":{"138":1,"157":1,"237":1,"274":1,"287":1,"305":1,"331":1,"392":1,"447":1}}],["опускаю",{"2":{"368":1}}],["опустили",{"2":{"420":1}}],["опустил",{"2":{"352":1}}],["опустим",{"2":{"348":1}}],["опустить",{"2":{"9":1,"319":1}}],["опущено",{"2":{"368":1}}],["опущены",{"2":{"298":1,"406":1,"419":1}}],["опубликовала",{"2":{"318":1}}],["опубликовал",{"2":{"248":1}}],["опубликовать",{"2":{"104":1,"139":1,"223":1,"309":1,"391":1}}],["опубликовывать",{"2":{"222":1}}],["опираться",{"2":{"453":1}}],["опираясь",{"2":{"228":1}}],["опишу",{"2":{"96":1}}],["описательная",{"2":{"352":1}}],["описательные",{"0":{"296":1},"2":{"296":1}}],["описательным",{"2":{"289":1,"293":1,"360":1}}],["описать",{"2":{"159":1}}],["описан",{"2":{"396":1}}],["описанная",{"2":{"333":1}}],["описанных",{"2":{"178":1,"197":1,"273":1}}],["описанным",{"2":{"70":1}}],["описаны",{"2":{"127":1,"133":1,"155":1}}],["описании",{"2":{"273":1}}],["описаний",{"2":{"187":1}}],["описания",{"2":{"73":1,"128":1,"160":1,"187":1,"266":1,"293":1,"448":1,"453":1}}],["описанию",{"2":{"48":1}}],["описание",{"0":{"540":1},"2":{"47":1,"64":1,"73":3,"100":1,"104":1,"117":1,"118":1,"142":1,"159":1,"168":1,"185":1,"187":2,"207":1,"282":1,"296":1,"328":1,"413":1,"436":1,"448":2,"476":1,"492":1}}],["описанием",{"2":{"11":1,"250":1,"296":1}}],["описываются",{"2":{"502":1}}],["описывающий",{"2":{"338":1}}],["описывающие",{"2":{"160":1}}],["описывайте",{"2":{"489":1}}],["описываться",{"2":{"61":1}}],["описывает",{"2":{"51":1,"74":2}}],["опционально",{"2":{"296":1,"500":1,"511":1,"528":1}}],["опциональными",{"2":{"293":1}}],["опциональный",{"2":{"96":1}}],["опция",{"2":{"179":2,"180":1,"196":1,"462":1}}],["опциями",{"2":{"121":1,"127":1,"152":1,"247":2,"300":1,"341":1,"368":1,"535":1}}],["опцию",{"2":{"101":1,"276":1,"283":1,"401":1,"447":1,"455":1}}],["опций",{"2":{"88":1,"152":1,"180":1,"183":1,"247":1,"268":3,"269":2,"281":1,"453":1,"570":1}}],["опции",{"0":{"145":1,"184":1,"505":1,"569":1,"570":1},"1":{"146":1,"147":1,"148":1,"149":1,"150":1,"570":1,"571":1,"572":1,"573":1},"2":{"16":1,"85":1,"152":1,"159":1,"160":1,"184":1,"266":1,"341":1,"362":1,"474":1,"504":1,"535":1}}],["оптимизируют",{"2":{"445":1}}],["оптимизируя",{"2":{"74":1}}],["оптимизирован",{"2":{"357":1}}],["оптимизировать",{"2":{"158":1,"180":1,"444":1,"508":1}}],["оптимизаций",{"2":{"158":1,"327":1}}],["оптимизация",{"2":{"70":1,"492":1,"508":1}}],["оптимизации",{"2":{"48":1,"261":1,"327":1}}],["опять",{"2":{"56":1,"145":1,"223":1,"306":1,"308":1,"315":1,"453":1,"466":1}}],["оправдали",{"2":{"457":1}}],["оправдан",{"2":{"137":1}}],["оправдывает",{"2":{"340":1}}],["опробованы",{"2":{"62":1}}],["опрятностью",{"2":{"17":1}}],["определённых",{"2":{"483":1}}],["определил",{"2":{"404":1,"407":1}}],["определились",{"2":{"360":1,"368":1}}],["определили",{"2":{"174":1,"189":1,"351":1}}],["определите",{"2":{"368":1}}],["определиться",{"2":{"156":1}}],["определить",{"2":{"16":1,"73":1,"131":1,"187":1,"191":1,"243":1,"259":1,"299":1,"339":1,"360":1,"368":2,"375":1,"403":1,"407":1,"410":1,"422":1,"442":1}}],["определим",{"2":{"186":2,"350":1}}],["определяя",{"2":{"314":1}}],["определяю",{"2":{"160":1}}],["определяют",{"2":{"157":2,"160":2,"358":1}}],["определяются",{"2":{"73":1}}],["определяющая",{"2":{"295":1}}],["определяющим",{"2":{"332":1,"369":1}}],["определяющих",{"2":{"296":1}}],["определяющий",{"2":{"180":1,"340":1}}],["определяющие",{"2":{"156":1,"159":2}}],["определяющую",{"2":{"142":1}}],["определять",{"2":{"131":1,"160":1,"181":1,"319":1,"360":1,"407":1}}],["определяемой",{"2":{"357":1}}],["определяемого",{"2":{"164":1}}],["определяемое",{"2":{"74":1}}],["определяем",{"2":{"92":1,"157":2,"187":1,"259":1,"298":1,"314":1,"335":2,"339":1,"368":1,"404":1,"407":1,"410":1}}],["определяете",{"2":{"159":1,"478":1}}],["определяется",{"2":{"123":1,"160":1,"299":1,"334":1}}],["определяет",{"2":{"74":1,"123":1,"155":1,"156":1,"157":1,"159":1,"180":1,"208":1,"211":1,"222":2,"246":1,"295":1,"298":1}}],["определены",{"2":{"245":1,"357":1,"358":1,"404":1,"591":1}}],["определено",{"2":{"168":1,"448":1}}],["определен",{"2":{"160":1,"332":1,"410":1,"449":1}}],["определений",{"2":{"358":1}}],["определении",{"2":{"261":1,"357":1,"358":1,"410":2,"422":1}}],["определение",{"0":{"351":1,"352":1,"353":1,"403":1,"409":1},"1":{"404":1,"405":1},"2":{"143":1,"226":1,"239":1,"315":1,"359":1,"362":1,"407":1,"410":2,"478":1,"541":1}}],["определением",{"2":{"129":1,"239":1,"356":1,"364":1,"368":1,"406":1}}],["определению",{"2":{"134":1,"156":1,"354":1,"410":2}}],["определения",{"2":{"3":1,"156":1,"187":1,"260":1,"275":1,"298":2,"308":1,"315":1,"327":1,"355":1,"358":3,"359":1,"362":1,"408":2,"410":1,"424":1,"483":1}}],["определенную",{"2":{"180":1,"291":1,"415":1,"421":1,"435":1,"467":1,"476":1}}],["определенных",{"2":{"245":1,"291":1,"399":1,"416":1,"478":1,"541":1}}],["определенный",{"2":{"197":1,"218":1,"299":1,"314":1,"334":1,"418":1,"420":1,"483":1,"508":1}}],["определенными",{"2":{"144":1,"159":1,"160":2,"240":1,"350":1,"541":1,"542":1}}],["определенным",{"2":{"123":1,"124":1,"228":1,"331":1}}],["определенные",{"2":{"100":1,"156":1,"157":1,"160":1,"182":1,"196":1,"202":1,"271":1,"353":1,"362":1,"410":1,"454":1,"463":1,"466":1}}],["определенном",{"2":{"298":1}}],["определенному",{"2":{"41":1,"124":1,"156":1,"448":1}}],["определенное",{"2":{"298":1,"309":1}}],["определенного",{"2":{"7":1,"184":1,"228":1,"421":1,"474":1,"515":1}}],["определенной",{"2":{"7":1,"11":1,"51":1,"269":1,"436":1,"464":1,"476":1,"538":2}}],["оплаты",{"2":{"4":1,"12":1,"70":1,"282":1}}],["обёртку",{"2":{"538":1}}],["обзора",{"2":{"324":1}}],["обзор",{"2":{"304":1,"318":1,"436":1,"470":1,"476":1}}],["обман",{"2":{"492":1}}],["обмануть",{"2":{"275":1,"276":1}}],["обманных",{"2":{"274":1}}],["обменять",{"2":{"418":1}}],["обмена",{"2":{"294":1,"304":1,"312":1,"324":1,"328":1,"334":1,"407":1,"415":1,"416":3,"466":1}}],["обмену",{"2":{"160":1,"308":1}}],["обмен",{"2":{"152":1,"359":1,"415":1,"416":1}}],["обмениваются",{"2":{"304":1}}],["обмениваться",{"2":{"41":1,"363":1,"365":1}}],["обменивается",{"2":{"3":1}}],["обхода",{"2":{"202":1,"345":1}}],["обходимся",{"2":{"23":1}}],["обиход",{"2":{"200":1}}],["обучающие",{"2":{"491":2}}],["обучающего",{"2":{"188":1}}],["обучением",{"2":{"237":1}}],["обучение",{"2":{"188":1,"490":1,"491":1}}],["обучения",{"2":{"63":1,"237":1}}],["обсуждение",{"2":{"478":1}}],["обсуждать",{"2":{"364":1}}],["обсуждали",{"2":{"291":1}}],["обсуждается",{"2":{"240":1}}],["обсервер",{"2":{"191":1}}],["обслуживается",{"2":{"179":1}}],["обслуживании",{"2":{"184":1,"220":1,"389":1}}],["обслуживанием",{"2":{"228":1}}],["обслуживание",{"2":{"152":1,"239":1,"292":1}}],["обслуживания",{"2":{"143":1,"145":1,"149":1,"153":1,"226":1,"299":1,"341":1,"345":1}}],["обслуживать",{"2":{"145":1,"200":1}}],["обслуживаться",{"2":{"143":1,"291":1}}],["обстоятельствах",{"2":{"269":1}}],["обстоятельств",{"2":{"12":1,"96":1,"483":1}}],["оба",{"2":{"124":1,"221":1,"233":1,"327":1,"345":1,"357":1,"413":1,"429":1,"467":1,"578":1}}],["обновят",{"2":{"460":2}}],["обновим",{"2":{"322":1}}],["обновить",{"2":{"299":1,"451":1}}],["обновится",{"2":{"179":1,"482":1}}],["обновилось",{"2":{"227":1}}],["обновлено",{"2":{"359":1}}],["обновлении",{"2":{"226":1,"319":1,"320":1,"482":1}}],["обновлением",{"2":{"185":1}}],["обновление",{"2":{"162":1,"188":1,"227":1,"318":1,"396":1,"482":1}}],["обновления",{"2":{"152":2,"179":1,"198":1,"291":1,"337":1,"407":1}}],["обновляться",{"2":{"402":2,"436":1,"476":1,"479":1}}],["обновлять",{"2":{"369":1,"421":1,"436":1,"476":1}}],["обновляют",{"2":{"340":1}}],["обновляется",{"2":{"369":1,"408":2}}],["обновляет",{"2":{"123":1,"187":1,"228":1,"363":1,"407":1}}],["обновляем",{"2":{"106":1,"370":1}}],["обнаружении",{"2":{"466":1}}],["обнаружения",{"2":{"130":2,"198":1,"399":1,"407":2}}],["обнаружить",{"2":{"362":1,"484":1}}],["обнаружите",{"2":{"180":1}}],["обнаруживает",{"2":{"298":1,"467":1}}],["обнаруживаем",{"2":{"179":1}}],["обнаружились",{"2":{"492":1}}],["обнаружили",{"2":{"201":1,"327":1}}],["обнуляет",{"2":{"123":1}}],["обвесы",{"2":{"96":1}}],["общую",{"2":{"160":1,"239":1,"289":1,"352":1,"356":1}}],["общепризнанная",{"2":{"502":1}}],["общедоступным",{"2":{"422":1}}],["общения",{"2":{"286":1,"483":1}}],["общение",{"2":{"138":1,"304":1}}],["общего",{"2":{"194":1,"228":1,"242":1,"333":1,"542":2}}],["общее",{"2":{"187":1,"306":1,"333":1,"501":1}}],["общей",{"2":{"156":1,"194":1,"264":1,"270":1,"319":1,"327":1,"352":1,"358":1,"474":1}}],["общем",{"2":{"141":1,"156":1,"194":1,"363":1,"399":1}}],["общая",{"2":{"89":1,"195":1,"282":1}}],["общим",{"2":{"312":1}}],["общих",{"2":{"156":2,"248":1,"375":1}}],["общий",{"2":{"74":1,"152":1,"174":1,"221":1,"237":1,"312":1,"331":1,"350":1,"392":1,"420":1}}],["общие",{"0":{"69":1,"250":1,"262":1,"270":1},"1":{"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"263":1,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1,"271":1,"272":1,"273":1,"274":1},"2":{"69":1,"74":1,"104":1,"189":1,"253":1,"392":2,"413":1,"414":1,"424":1,"437":1}}],["обязанность",{"2":{"286":1}}],["обязанности",{"2":{"239":1}}],["обязаны",{"2":{"65":1}}],["обязательная",{"2":{"538":1}}],["обязательно",{"2":{"357":1,"491":2}}],["обязательной",{"2":{"179":1}}],["обязательные",{"2":{"192":1,"417":1,"504":1}}],["обязательными",{"2":{"174":1}}],["обязательным",{"2":{"160":1,"318":1}}],["обязательных",{"2":{"23":1}}],["объявим",{"2":{"313":1}}],["объявивший",{"2":{"306":1}}],["объявили",{"2":{"186":1,"187":1}}],["объявить",{"2":{"159":1,"356":1}}],["объявляя",{"2":{"311":1}}],["объявляют",{"2":{"160":2}}],["объявлять",{"2":{"129":1,"160":1,"187":1,"355":1}}],["объявляете",{"2":{"327":1}}],["объявляется",{"2":{"125":1,"160":1,"161":1}}],["объявляем",{"2":{"128":1,"149":2,"157":1,"160":1,"187":1,"218":1,"219":1,"223":1,"227":3,"229":1,"307":1,"313":1,"315":1,"316":1,"321":1,"343":1,"369":1,"416":1}}],["объявлены",{"2":{"478":1}}],["объявления",{"2":{"234":1,"285":1}}],["объявление",{"2":{"125":1,"234":1,"357":1,"359":2}}],["объявлено",{"2":{"167":1}}],["объявленным",{"2":{"160":1}}],["объявленного",{"2":{"125":1}}],["объяснить",{"2":{"399":2,"491":1}}],["объяснимо",{"2":{"466":1}}],["объясним",{"2":{"186":1,"446":1}}],["объяснению",{"2":{"492":1}}],["объяснения",{"2":{"277":1}}],["объяснение",{"2":{"64":1,"100":1,"101":1}}],["объясняющие",{"2":{"201":1}}],["объясняя",{"2":{"141":1}}],["объясняет",{"2":{"73":1,"491":1}}],["объемном",{"2":{"279":1}}],["объем",{"2":{"187":1,"202":1}}],["объему",{"2":{"47":1}}],["объединению",{"2":{"457":1}}],["объединением",{"2":{"457":1}}],["объединение",{"2":{"17":1,"74":1,"420":1,"421":1}}],["объединены",{"2":{"194":1}}],["объединен",{"2":{"180":1}}],["объединяющие",{"2":{"445":1}}],["объединяют",{"2":{"435":1,"476":1}}],["объединяются",{"2":{"142":1,"239":1}}],["объединяет",{"2":{"421":1,"448":1}}],["объединять",{"2":{"16":1,"458":3}}],["объединить",{"2":{"113":1,"465":1}}],["объективная",{"2":{"502":1}}],["объективных",{"2":{"12":1}}],["объекту",{"2":{"160":1,"181":1,"217":2,"218":1,"220":1,"224":1,"226":1,"228":1,"254":1,"319":1,"362":1,"404":1,"410":1}}],["объектах",{"2":{"218":1,"474":1}}],["объекта",{"2":{"160":2,"163":1,"165":1,"198":1,"208":1,"215":1,"216":1,"217":1,"218":1,"220":1,"224":1,"226":2,"227":4,"228":4,"229":1,"231":2,"313":1,"316":1,"319":1,"321":2,"322":1,"338":2,"343":1,"345":1,"358":2,"360":1,"369":2,"410":1,"450":1,"452":1,"474":2,"478":1,"482":1,"483":1}}],["объектами",{"2":{"205":1,"222":1,"226":1,"312":1,"474":1}}],["объектам",{"2":{"125":2,"130":2,"327":1}}],["объектом",{"2":{"160":1,"211":1,"222":1,"223":1,"226":1,"227":1,"231":1,"313":2,"319":1,"321":1,"345":1,"404":1}}],["объектов",{"2":{"17":1,"130":1,"174":1,"195":1,"204":1,"221":1,"226":1,"294":1,"296":2,"319":1,"321":1,"345":1,"369":1,"474":1}}],["объекты",{"2":{"131":1,"160":2,"166":1,"171":1,"181":1,"187":1,"306":1,"318":1,"319":1,"328":1,"345":1,"358":1,"360":1,"413":2,"448":1,"474":1,"478":1,"482":1}}],["объект",{"0":{"403":1},"1":{"404":1,"405":1},"2":{"112":1,"113":1,"127":1,"129":2,"130":6,"157":3,"159":1,"160":9,"195":1,"208":1,"209":1,"211":2,"213":2,"219":3,"220":1,"221":1,"222":2,"223":1,"225":1,"226":5,"227":6,"228":2,"231":2,"234":3,"294":1,"296":1,"300":1,"306":1,"309":1,"311":1,"312":2,"314":1,"315":5,"316":1,"318":1,"319":3,"321":5,"322":2,"328":1,"334":1,"338":2,"339":2,"341":1,"345":1,"356":1,"357":1,"358":3,"360":2,"362":1,"363":1,"365":1,"368":2,"369":2,"404":3,"407":2,"409":1,"410":3,"411":1,"413":3,"414":1,"416":3,"417":2,"422":4,"448":1,"452":2,"453":1,"474":2}}],["объекте",{"2":{"95":1,"112":1,"157":1,"217":1,"298":1,"328":1,"410":1,"474":1,"491":1}}],["объектным",{"2":{"483":1}}],["объектный",{"2":{"211":1,"219":1}}],["объектные",{"2":{"17":1}}],["объектной",{"2":{"327":1}}],["объектного",{"2":{"226":1}}],["объектно",{"2":{"3":1,"159":1,"195":1,"482":1,"483":1}}],["об",{"2":{"62":1,"142":1,"156":1,"158":1,"160":2,"166":1,"180":1,"201":1,"212":1,"213":1,"216":1,"222":1,"231":1,"246":1,"247":1,"248":1,"256":1,"279":1,"298":1,"315":1,"320":1,"333":1,"345":1,"359":1,"360":1,"363":1,"414":1,"416":1,"437":1,"462":1,"465":1,"482":2,"491":1}}],["образец",{"2":{"396":1}}],["образу",{"2":{"156":1}}],["образованную",{"2":{"416":1}}],["образовательный",{"2":{"65":1}}],["образом",{"2":{"17":1,"36":1,"48":1,"56":1,"96":1,"123":2,"124":1,"133":1,"142":2,"143":1,"158":2,"165":2,"181":1,"182":3,"184":3,"185":1,"186":1,"187":2,"198":1,"212":1,"215":1,"218":2,"220":1,"225":1,"226":2,"228":1,"229":1,"231":1,"233":1,"234":2,"241":1,"244":1,"247":1,"260":2,"273":1,"279":1,"280":1,"298":1,"299":1,"300":1,"306":1,"309":1,"310":1,"328":2,"339":1,"341":2,"342":1,"350":1,"351":2,"354":1,"356":1,"359":2,"360":3,"362":1,"363":1,"367":1,"368":2,"369":1,"400":1,"402":1,"404":1,"408":2,"410":1,"415":1,"422":1,"445":1,"447":2,"450":1,"451":1,"453":1,"455":1,"456":2,"460":1,"465":1,"466":1,"483":1,"490":1,"545":1}}],["обрабатывающий",{"2":{"416":1}}],["обрабатывают",{"2":{"357":1,"435":1,"476":1}}],["обрабатываются",{"2":{"73":1,"345":1,"491":1}}],["обрабатываем",{"2":{"328":2}}],["обрабатывает",{"2":{"213":2,"363":1,"415":1}}],["обрабатывается",{"2":{"134":1}}],["обрабатывать",{"2":{"180":1,"186":1,"226":1,"233":1,"311":1,"330":1,"341":1,"399":1,"419":1,"426":1,"492":2}}],["обрабатываться",{"2":{"180":1,"225":1}}],["обработчика",{"2":{"320":1}}],["обработчиком",{"2":{"227":1}}],["обработчиков",{"2":{"130":1}}],["обработчике",{"2":{"227":1}}],["обработчики",{"2":{"226":1}}],["обработчик",{"2":{"218":1,"321":1,"335":1}}],["обработка",{"2":{"327":2,"345":1,"419":1,"483":1}}],["обработке",{"2":{"327":1,"483":1}}],["обработку",{"2":{"248":1,"291":1,"312":1,"327":1,"415":1}}],["обработкой",{"2":{"198":1}}],["обработки",{"2":{"149":1,"156":1,"184":1,"218":1,"223":1,"224":2,"225":1,"231":1,"233":1,"327":1,"335":1,"369":1,"414":1,"415":1}}],["обработана",{"2":{"168":1,"338":1}}],["обработать",{"2":{"122":1,"340":1}}],["обратимся",{"2":{"313":1}}],["обратился",{"2":{"278":1}}],["обратит",{"2":{"285":1}}],["обратитесь",{"2":{"135":1,"330":1}}],["обратите",{"2":{"129":1,"130":1,"144":1,"147":1,"157":3,"159":1,"160":1,"180":1,"186":2,"187":3,"212":1,"227":2,"232":1,"234":1,"243":1,"244":1,"268":1,"271":1,"273":1,"308":1,"311":1,"315":1,"318":1,"327":1,"329":1,"338":1,"341":1,"359":1,"368":1,"369":3,"404":2,"410":1,"416":1,"420":1,"436":1,"448":1,"450":1,"453":3,"463":1}}],["обратиться",{"2":{"168":1,"300":1,"326":1}}],["обратить",{"2":{"114":1,"155":1,"156":1,"222":1,"255":1,"273":1,"276":1,"327":1,"407":1}}],["обратных",{"2":{"234":1}}],["обратными",{"2":{"234":1}}],["обратный",{"0":{"232":1},"1":{"233":1},"2":{"232":1}}],["обратные",{"2":{"191":1}}],["обратную",{"2":{"142":1,"226":1,"248":1}}],["обратная",{"2":{"132":1}}],["обратном",{"2":{"360":1}}],["обратное",{"2":{"227":1}}],["обратного",{"2":{"148":1,"232":3,"233":1,"234":3,"329":1,"345":1}}],["обратной",{"2":{"79":1,"160":1,"258":1,"325":1,"363":1,"399":1,"409":1,"444":1}}],["обратно",{"2":{"44":1,"95":1,"123":1,"226":1,"253":1,"319":1,"327":1,"342":1,"418":1}}],["обращаясь",{"2":{"452":1}}],["обращающегося",{"2":{"328":1}}],["обращаются",{"2":{"319":1,"357":1}}],["обращались",{"2":{"327":1}}],["обращаемся",{"2":{"318":1,"334":1,"335":1,"452":1}}],["обращается",{"2":{"125":1,"180":1,"399":1}}],["обращаешься",{"2":{"124":1}}],["обращаться",{"2":{"53":1,"122":2,"124":1,"155":1,"180":1,"181":1,"187":1,"291":1,"306":1,"313":1,"319":2,"320":1,"345":2,"404":1,"453":1,"491":1}}],["обращений",{"2":{"212":1,"321":2,"334":1,"545":1}}],["обращения",{"2":{"160":1,"299":1,"345":1,"492":1,"545":1}}],["обращении",{"2":{"124":1,"329":1,"492":2}}],["обращением",{"2":{"547":1}}],["обращение",{"2":{"41":1,"407":1}}],["обложка",{"2":{"239":1}}],["обладают",{"2":{"302":1}}],["обладает",{"2":{"156":1}}],["область",{"2":{"263":1,"269":1,"299":2,"368":2,"406":1,"420":1,"442":1,"476":1}}],["областью",{"2":{"260":1}}],["области",{"2":{"145":1,"160":2,"193":1,"202":1,"237":1,"261":2,"271":1,"298":1,"447":1,"478":1}}],["облачные",{"2":{"422":1,"425":1}}],["облачных",{"2":{"39":1,"124":1}}],["облачном",{"2":{"394":1,"425":1}}],["облачное",{"2":{"124":1}}],["облегчили",{"2":{"482":1}}],["облегчит",{"2":{"335":1,"485":1}}],["облегчения",{"2":{"325":1,"538":1}}],["облегчен",{"2":{"29":1}}],["облегчающего",{"2":{"457":1}}],["облегчают",{"2":{"445":1}}],["облегчая",{"2":{"433":1,"476":1}}],["облегчат",{"2":{"180":1,"325":1}}],["облегчать",{"2":{"23":1}}],["облегчает",{"2":{"3":1,"83":1,"196":1,"244":1}}],["обычная",{"2":{"142":1,"276":1,"293":1,"465":1}}],["обычное",{"2":{"291":2,"492":1}}],["обычном",{"2":{"160":1,"181":1,"217":1,"222":1,"234":1,"235":1,"448":1,"449":1}}],["обычной",{"2":{"111":1,"123":1,"445":1,"482":1}}],["обычного",{"2":{"39":1,"58":1,"156":1,"159":1,"232":1,"233":2,"234":1,"241":1,"243":1,"253":1,"266":1,"291":1,"338":1}}],["обычно",{"2":{"28":1,"30":1,"50":1,"88":1,"96":1,"118":1,"123":1,"138":1,"142":1,"145":3,"148":1,"152":1,"156":1,"158":1,"168":1,"177":1,"224":1,"227":1,"240":1,"253":1,"254":1,"260":3,"262":1,"263":1,"264":1,"266":1,"273":1,"277":1,"283":1,"295":1,"296":1,"327":1,"331":2,"334":1,"351":2,"352":1,"354":1,"363":1,"369":1,"416":1,"421":1,"438":1,"462":1,"466":1,"474":1,"478":2,"479":1,"482":1,"483":1,"491":1,"492":1,"541":1,"575":1}}],["обычным",{"2":{"178":1,"181":1,"452":1,"492":1}}],["обычными",{"2":{"112":1,"183":1,"312":1,"426":1}}],["обычный",{"2":{"159":2,"179":1,"211":1,"251":1,"306":1,"331":1,"370":1,"429":1,"452":1,"463":1}}],["обычных",{"2":{"22":1,"174":1,"291":1,"397":1,"451":1,"492":1}}],["обычные",{"2":{"17":1,"228":1,"318":1,"362":1,"464":1,"482":1,"483":1}}],["обещанных",{"2":{"234":1}}],["обещанной",{"2":{"234":2}}],["обещание",{"2":{"234":2,"334":1,"343":1,"357":1,"367":2,"368":1}}],["обещаний",{"2":{"234":2}}],["обещаниe",{"0":{"234":1}}],["обещаниями",{"2":{"234":1}}],["обещания",{"2":{"233":1,"234":4,"334":1,"339":1,"368":2}}],["обещающая",{"2":{"96":1}}],["оберток",{"2":{"492":1}}],["обертывания",{"2":{"234":1}}],["обертку",{"2":{"452":1,"453":1,"545":1}}],["обертка",{"2":{"122":1,"168":1,"482":1}}],["обертки",{"0":{"485":1},"2":{"23":1,"186":1,"187":1,"337":1,"452":1,"453":2,"483":1,"485":1,"492":1}}],["обернутую",{"2":{"363":1}}],["обернуть",{"2":{"212":1,"233":1,"234":1,"312":1,"449":1,"483":1}}],["обернутых",{"2":{"453":1}}],["обернуты",{"2":{"197":1}}],["обернутый",{"2":{"168":1}}],["обернем",{"2":{"187":1,"309":1,"320":1}}],["обеспечат",{"2":{"354":1,"425":1}}],["обеспечьте",{"2":{"248":1}}],["обеспечит",{"2":{"444":1}}],["обеспечить",{"2":{"156":1,"212":1,"223":1,"249":1,"260":1,"392":1}}],["обеспечим",{"2":{"336":1}}],["обеспечивая",{"2":{"258":1,"291":1}}],["обеспечивает",{"2":{"155":1,"160":1,"178":2,"188":1,"224":1,"233":1,"306":1,"357":1,"399":1,"406":1,"416":1,"433":1,"455":1,"476":1}}],["обеспечивается",{"2":{"152":1,"483":1,"581":1}}],["обеспечивающая",{"2":{"337":1}}],["обеспечивающие",{"2":{"142":2,"346":1,"442":1}}],["обеспечивают",{"2":{"137":1,"319":1,"336":1,"356":1}}],["обеспечении",{"2":{"194":1,"247":1}}],["обеспечению",{"2":{"145":1,"346":1,"377":1,"444":1}}],["обеспечением",{"2":{"239":1,"444":1,"455":1}}],["обеспечение",{"2":{"141":1,"145":2,"237":1,"239":2,"285":1,"331":1,"375":1,"377":1,"442":1,"444":2,"457":1}}],["обеспечения",{"0":{"191":1,"192":1,"202":1,"383":1},"1":{"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":1,"203":1,"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"232":1,"233":1,"234":1,"235":1,"236":1},"2":{"67":1,"72":1,"74":1,"132":1,"138":1,"155":1,"156":1,"168":1,"181":1,"185":1,"190":1,"191":1,"192":2,"200":1,"201":1,"202":1,"232":1,"235":1,"237":1,"239":1,"245":1,"247":1,"285":1,"309":1,"320":1,"325":1,"332":1,"348":1,"352":1,"356":1,"363":2,"383":2,"442":4,"444":2,"446":1,"457":2,"467":1,"479":1}}],["обе",{"2":{"127":1,"239":1,"298":1,"319":1,"454":1,"465":1}}],["обеих",{"2":{"9":1,"465":1}}],["обобщение",{"2":{"542":1}}],["обобщить",{"2":{"288":1}}],["обоснование",{"0":{"541":1}}],["обоснования",{"2":{"483":1}}],["обоснованное",{"2":{"280":1}}],["оболочку",{"2":{"492":1}}],["оболочки",{"2":{"436":1,"477":1}}],["оболочка",{"2":{"436":1,"476":1}}],["обоими",{"2":{"352":1}}],["обоих",{"2":{"212":1,"319":2,"321":1,"447":1,"582":1}}],["обоюдоострым",{"2":{"284":1}}],["обоюдная",{"2":{"65":1}}],["обо",{"2":{"242":1}}],["обороты",{"2":{"421":1}}],["оборудовании",{"2":{"237":1,"291":1}}],["оборудование",{"2":{"145":1}}],["оборачивайте",{"2":{"490":1}}],["оборачивает",{"2":{"330":1}}],["оборачивать",{"2":{"114":1,"234":1}}],["оборачивая",{"2":{"23":1}}],["обозначение",{"2":{"362":1,"404":1}}],["обозначениях",{"2":{"413":1}}],["обозначения",{"2":{"142":1,"266":1,"368":1,"410":1}}],["обозначить",{"2":{"298":1,"351":1}}],["обозначающий",{"2":{"242":1}}],["обозначают",{"2":{"187":1}}],["обозначаются",{"2":{"171":1,"252":1}}],["обозначается",{"2":{"260":1}}],["обозначает",{"2":{"142":1,"194":1}}],["обогащение",{"2":{"96":1}}],["обойтись",{"2":{"23":1,"178":1,"184":1}}],["обширен",{"2":{"13":1}}],["оно",{"2":{"147":1,"156":1,"160":1,"179":1,"185":1,"188":1,"223":1,"234":2,"236":1,"242":1,"249":1,"254":1,"256":2,"267":1,"268":2,"272":1,"289":1,"291":3,"295":1,"314":1,"315":1,"322":1,"329":2,"341":1,"357":1,"360":1,"370":1,"404":1,"410":1,"416":1,"444":3,"446":2,"453":1,"469":1,"492":1}}],["она",{"2":{"34":1,"36":1,"74":2,"86":1,"96":1,"132":1,"151":1,"156":1,"159":1,"162":1,"163":2,"166":1,"167":1,"168":2,"183":1,"184":1,"185":1,"191":1,"194":1,"198":2,"218":1,"219":1,"223":1,"228":1,"279":1,"285":1,"286":1,"287":1,"291":1,"298":1,"311":1,"313":2,"319":1,"324":1,"334":1,"337":1,"338":1,"363":1,"369":1,"396":1,"422":1,"444":2,"448":3,"457":1,"474":2,"478":2,"482":1,"484":1,"575":2}}],["онлайновыми",{"2":{"468":1}}],["онлайном",{"2":{"291":1}}],["онлайн",{"0":{"60":1},"1":{"61":1,"62":1,"63":1,"64":1,"65":1},"2":{"12":1,"14":1,"27":1,"61":1,"123":1,"150":1,"153":1,"254":1,"429":1,"430":1,"436":1,"442":1,"466":1,"477":1,"492":1,"541":1,"542":1,"573":1}}],["они",{"2":{"3":3,"21":1,"44":1,"96":1,"118":1,"142":1,"143":1,"145":1,"155":1,"156":2,"164":3,"165":1,"168":3,"169":1,"170":1,"172":1,"173":1,"174":1,"177":1,"180":1,"181":1,"191":1,"192":1,"194":1,"196":1,"201":1,"202":1,"203":1,"204":1,"205":1,"206":1,"207":1,"217":1,"220":1,"227":1,"231":1,"232":1,"233":1,"234":2,"237":2,"238":1,"240":2,"242":1,"246":1,"247":1,"250":1,"251":1,"253":2,"256":1,"257":1,"263":1,"266":1,"268":1,"269":1,"273":1,"289":1,"291":4,"293":1,"296":1,"298":2,"299":1,"302":1,"311":1,"318":2,"327":4,"334":1,"337":1,"338":2,"340":1,"341":1,"345":1,"360":1,"362":1,"370":1,"371":1,"396":1,"404":1,"406":1,"409":1,"413":4,"420":2,"422":1,"423":2,"426":3,"429":1,"436":1,"437":2,"444":1,"445":2,"448":3,"451":1,"453":2,"465":1,"466":2,"468":2,"469":1,"476":1,"478":1,"482":2,"483":2,"486":1,"491":2,"492":1}}],["он",{"0":{"457":1},"2":{"2":1,"30":1,"32":1,"50":1,"73":1,"96":1,"98":1,"114":1,"123":3,"126":1,"127":1,"130":2,"131":1,"133":1,"138":1,"142":4,"148":2,"154":2,"155":1,"156":2,"159":2,"160":1,"168":2,"178":1,"179":3,"180":4,"181":1,"182":2,"183":1,"184":2,"187":1,"195":1,"196":2,"197":1,"199":2,"200":1,"201":1,"202":1,"211":1,"212":1,"215":1,"217":1,"218":1,"220":1,"221":1,"222":4,"224":1,"226":2,"228":1,"229":3,"231":1,"232":2,"239":3,"241":2,"242":2,"246":1,"248":1,"249":1,"252":3,"253":1,"256":1,"258":1,"260":1,"261":2,"265":1,"266":1,"267":1,"268":1,"271":1,"272":1,"276":2,"277":1,"278":1,"281":1,"283":1,"284":2,"289":1,"291":1,"293":1,"297":1,"298":3,"299":3,"300":1,"303":1,"306":2,"313":1,"314":1,"315":1,"319":3,"321":1,"327":5,"328":1,"329":2,"331":1,"332":1,"334":3,"335":1,"337":2,"341":1,"342":1,"350":1,"352":2,"356":1,"357":2,"364":2,"367":2,"369":3,"377":1,"396":2,"404":1,"406":1,"407":5,"408":1,"410":3,"411":2,"413":1,"415":1,"416":2,"421":1,"429":1,"430":2,"436":1,"444":2,"447":3,"448":2,"451":2,"453":1,"454":1,"455":1,"456":1,"458":3,"459":1,"462":2,"467":1,"469":3,"474":1,"476":1,"478":1,"479":1,"482":1,"483":1,"492":3}}],["отчетности",{"2":{"455":1}}],["отчета",{"2":{"455":1}}],["отчет",{"2":{"448":1,"455":3}}],["отходят",{"2":{"442":1}}],["отец",{"2":{"308":1}}],["отнимают",{"2":{"479":1}}],["отнести",{"2":{"413":1}}],["отнесены",{"2":{"262":1}}],["относящаяся",{"2":{"503":1}}],["относящейся",{"2":{"414":1}}],["относятся",{"2":{"275":2,"399":1}}],["относительно",{"2":{"334":1,"335":1,"492":1}}],["относительные",{"2":{"184":1}}],["относиться",{"2":{"352":1}}],["относить",{"2":{"293":2}}],["относится",{"2":{"2":1,"23":1,"104":1,"160":4,"196":1,"198":2,"234":1,"239":1,"243":1,"271":1,"289":1,"327":1,"362":1}}],["отношений",{"2":{"309":1,"352":1}}],["отношении",{"2":{"164":1}}],["отношению",{"2":{"160":1}}],["отношения",{"2":{"43":1,"222":1,"298":1,"306":1,"356":1}}],["отношение",{"2":{"43":1}}],["оттенок",{"2":{"291":1}}],["отторжение",{"2":{"248":1}}],["оттуда",{"2":{"96":1,"111":1}}],["отовсюду",{"2":{"478":1}}],["отодвигает",{"2":{"215":1}}],["отобрав",{"2":{"445":1}}],["отобразим",{"2":{"368":1}}],["отобразится",{"2":{"254":1}}],["отобразит",{"2":{"179":1,"185":2}}],["отобразить",{"2":{"163":1,"168":1,"183":1,"256":1,"260":1}}],["отображен",{"2":{"407":1}}],["отображено",{"2":{"165":1}}],["отображении",{"2":{"164":1,"168":2,"180":1,"187":1,"242":1,"255":1,"256":1,"327":1}}],["отображения",{"2":{"107":1,"156":1,"157":1,"164":2,"165":1,"187":4,"242":1,"243":1,"253":1,"254":3,"257":4,"265":1,"267":1,"269":1,"294":1,"311":1,"338":1,"357":1,"360":1,"364":1,"368":2,"369":1,"402":1,"456":1,"492":1}}],["отображением",{"2":{"294":1,"357":1}}],["отображение",{"2":{"22":1,"143":1,"266":1,"327":1,"478":1}}],["отображая",{"2":{"400":1}}],["отображать",{"2":{"260":1,"310":1,"342":1,"401":1,"402":1,"404":1,"407":1,"426":1,"437":1}}],["отображаться",{"2":{"95":1,"179":1,"256":1,"266":1,"267":1,"294":1,"298":2,"301":1,"357":2,"406":1,"409":2,"410":1}}],["отображают",{"2":{"253":1,"269":1,"273":1,"306":1}}],["отображаются",{"2":{"160":1,"183":2,"263":1,"266":1,"273":1,"318":1}}],["отображающего",{"2":{"456":1}}],["отображающие",{"2":{"433":1,"476":1}}],["отображающий",{"2":{"228":1,"258":1,"478":1}}],["отображающая",{"2":{"187":1,"254":1}}],["отображаемому",{"2":{"452":1}}],["отображаемый",{"2":{"327":1,"368":1}}],["отображаемые",{"2":{"160":1}}],["отображаем",{"2":{"308":1,"357":1,"368":1}}],["отображает",{"2":{"187":1,"242":1,"257":1,"314":1,"352":2,"402":1}}],["отображается",{"2":{"168":1,"196":1,"254":1,"266":1,"273":1,"283":1,"357":1,"362":1,"402":1,"410":1}}],["отбрасывании",{"2":{"198":1}}],["отладка",{"2":{"313":1}}],["отложено",{"2":{"188":1,"327":1}}],["отложенных",{"2":{"187":2}}],["отличную",{"2":{"300":1}}],["отличный",{"2":{"178":1,"300":1,"400":1,"453":1,"491":1}}],["отличным",{"2":{"151":1,"301":1}}],["отличного",{"2":{"331":1}}],["отличной",{"2":{"327":1}}],["отличное",{"2":{"220":1,"285":1,"429":1}}],["отлично",{"2":{"142":1,"234":1,"482":1}}],["отличает",{"2":{"397":1}}],["отличается",{"2":{"22":1,"125":1,"141":1,"154":1,"407":1,"452":1,"469":1,"479":1}}],["отличать",{"2":{"363":1}}],["отличаться",{"2":{"178":1,"180":1,"207":1}}],["отличалась",{"2":{"241":1}}],["отличающим",{"2":{"369":1}}],["отличающий",{"2":{"142":1}}],["отличаются",{"2":{"152":1,"474":1}}],["отличия",{"2":{"482":1}}],["отличить",{"2":{"285":1}}],["отличительных",{"2":{"228":1}}],["отличительной",{"2":{"227":1}}],["отличимы",{"2":{"241":1}}],["отличий",{"2":{"141":1}}],["отличием",{"2":{"188":1,"345":1}}],["отличие",{"2":{"26":1,"39":1,"122":1,"148":1,"152":1,"164":1,"177":1,"180":1,"183":1,"187":1,"215":1,"247":1,"252":1,"312":1,"318":1,"319":2,"358":1,"444":1,"467":1,"474":1,"478":2,"482":1}}],["отредактирован",{"2":{"587":1}}],["отредактированы",{"2":{"462":1,"465":1}}],["отредактировать",{"2":{"465":1}}],["отредактируйте",{"2":{"465":1}}],["отрендерит",{"2":{"418":1}}],["отреагировать",{"2":{"167":1}}],["отрисовкой",{"2":{"492":1}}],["отрисовку",{"2":{"483":1}}],["отрисованные",{"2":{"453":1}}],["отрисовываться",{"2":{"404":1}}],["отрицательные",{"2":{"237":1,"413":1}}],["отрицательных",{"2":{"234":2,"449":1}}],["отрицательного",{"2":{"234":1,"449":1}}],["отразятся",{"2":{"358":1}}],["отражение",{"2":{"322":1}}],["отражалось",{"2":{"408":1}}],["отражается",{"2":{"312":1,"322":1}}],["отражает",{"2":{"241":1,"342":1,"353":1}}],["отражаются",{"2":{"155":1}}],["отражать",{"2":{"133":1,"241":1,"342":1,"343":1}}],["отражаться",{"2":{"95":1,"162":1}}],["отрасли",{"2":{"250":1,"286":1,"302":1,"401":1}}],["отраслевыми",{"2":{"240":1}}],["отраслевым",{"2":{"178":1}}],["отзывами",{"2":{"492":1}}],["отзывчивости",{"2":{"483":1}}],["отзывчивой",{"2":{"327":1}}],["отзывчивого",{"2":{"271":1,"291":1}}],["отзывчивых",{"2":{"375":1}}],["отзывчивый",{"2":{"271":1}}],["отзывчивые",{"0":{"271":1},"2":{"291":2}}],["отзывчивыми",{"2":{"132":1,"289":1}}],["отзывы",{"2":{"4":1,"47":1,"70":1}}],["отследить",{"2":{"457":1}}],["отслеживать",{"2":{"462":1,"463":2,"468":1}}],["отслеживаться",{"2":{"462":1}}],["отслеживаются",{"2":{"318":1}}],["отслеживание",{"2":{"442":1,"457":1}}],["отслеживании",{"2":{"333":1}}],["отслеживанию",{"2":{"222":1,"227":1}}],["отслеживания",{"2":{"165":1,"178":1,"224":1,"319":1,"367":1,"456":1,"462":1,"474":2}}],["отслеживает",{"2":{"180":1,"474":3}}],["отсутствует",{"2":{"455":1}}],["отсутствие",{"2":{"442":1}}],["отсутствий",{"2":{"59":1}}],["отсутствовавшие",{"2":{"337":1}}],["отсылается",{"2":{"319":1}}],["отсылаю",{"2":{"126":1,"234":1,"341":1,"407":1}}],["отстоит",{"2":{"422":1}}],["отстает",{"2":{"491":1}}],["отстают",{"2":{"291":1}}],["отставать",{"2":{"291":1}}],["отступам",{"2":{"244":1}}],["отступов",{"2":{"198":1}}],["отсюда",{"2":{"183":1,"345":1}}],["отписки",{"2":{"311":1}}],["отпечаток",{"2":{"123":1,"201":1}}],["отправили",{"2":{"418":1,"419":1}}],["отправитель",{"2":{"345":1}}],["отправить",{"2":{"151":1,"328":1,"342":1,"420":1,"422":1}}],["отправленные",{"2":{"415":1}}],["отправленную",{"2":{"342":1,"399":1}}],["отправляя",{"2":{"332":1}}],["отправлять",{"2":{"291":1,"310":1,"335":1,"421":1,"492":1}}],["отправляли",{"2":{"248":1}}],["отправляемого",{"2":{"343":1}}],["отправляем",{"2":{"336":1,"343":1,"419":1,"466":1}}],["отправляемые",{"2":{"160":1}}],["отправляет",{"2":{"123":1,"329":1,"336":1,"399":1,"458":1}}],["отправляется",{"2":{"3":1,"420":1}}],["отправки",{"2":{"343":2,"345":1,"421":2}}],["отправке",{"2":{"222":1}}],["отправка",{"2":{"122":1,"420":1,"435":1,"476":1}}],["отправной",{"2":{"289":1,"351":1}}],["отправная",{"2":{"179":1,"180":1,"293":1,"366":1}}],["отправную",{"2":{"126":1,"350":1}}],["отката",{"2":{"396":1}}],["отказа",{"2":{"421":1,"422":1}}],["отказаться",{"2":{"420":1}}],["отказывается",{"2":{"298":1}}],["отказ",{"2":{"152":1,"278":1,"284":1,"367":1,"450":1}}],["отключить",{"2":{"474":1}}],["отключена",{"2":{"462":1}}],["откладывается",{"2":{"327":1}}],["отклоняется",{"2":{"416":1}}],["отклоняем",{"2":{"234":1}}],["отклоняющий",{"2":{"414":1}}],["отклонив",{"2":{"335":1}}],["отклонить",{"2":{"298":1,"334":1,"354":1}}],["отклонения",{"2":{"368":2}}],["отклонение",{"2":{"255":1,"368":1}}],["отклонено",{"2":{"234":1,"357":1}}],["откровенного",{"2":{"284":1}}],["откроем",{"2":{"183":1,"344":1}}],["откройте",{"2":{"179":2,"184":1,"187":1,"301":1,"462":1}}],["открыла",{"2":{"199":1}}],["открыв",{"2":{"184":1}}],["открывать",{"2":{"319":1,"367":1}}],["открываться",{"2":{"291":1}}],["открываемость",{"2":{"318":1}}],["открываем",{"2":{"299":1}}],["открывается",{"2":{"254":1,"265":1,"283":1,"552":1}}],["открывает",{"2":{"157":1,"213":1,"215":1,"353":1,"368":1,"369":1,"448":1,"453":1}}],["открывающих",{"2":{"273":1}}],["открывающем",{"2":{"161":1}}],["открываются",{"2":{"254":1}}],["открыт",{"2":{"552":1}}],["открытии",{"2":{"367":1}}],["открытие",{"2":{"352":1}}],["открытия",{"2":{"301":1,"456":1,"508":1}}],["открытого",{"2":{"458":1}}],["открыто",{"2":{"255":1,"294":1}}],["открытом",{"2":{"153":1,"491":1}}],["открытый",{"2":{"201":1}}],["открытыми",{"2":{"491":1}}],["открытым",{"2":{"179":1}}],["открытые",{"2":{"124":1}}],["открытых",{"2":{"95":1,"319":1,"422":1}}],["открыть",{"2":{"96":1,"151":1,"180":1,"242":3,"322":1,"327":1,"354":1,"367":1,"421":1,"422":2,"447":1,"462":1}}],["откуда",{"2":{"122":1,"482":1}}],["отяжелел",{"2":{"50":1}}],["отмечают",{"2":{"444":1}}],["отмечаем",{"2":{"22":1,"106":1}}],["отмеченных",{"2":{"301":1}}],["отмеченным",{"2":{"276":1}}],["отмечена",{"2":{"301":1}}],["отметьте",{"2":{"276":1}}],["отметка",{"2":{"255":1}}],["отметить",{"2":{"185":1,"187":1,"207":1,"225":1,"231":1,"291":1,"306":1,"312":1,"341":1,"360":1,"369":2,"399":1,"490":1,"491":1}}],["отметим",{"2":{"33":1}}],["отменяет",{"2":{"399":1}}],["отменять",{"2":{"248":1}}],["отмене",{"2":{"367":1}}],["отменен",{"2":{"368":1}}],["отменены",{"2":{"224":1}}],["отменена",{"2":{"185":1,"421":1}}],["отмены",{"2":{"278":1}}],["отменит",{"2":{"278":1}}],["отменить",{"2":{"248":1,"284":1,"354":1,"368":1}}],["отдавать",{"2":{"492":1}}],["отдаваемыми",{"2":{"11":1}}],["отдачи",{"2":{"455":1}}],["отделены",{"2":{"268":1}}],["отделяет",{"2":{"224":1}}],["отделить",{"2":{"482":1,"491":1}}],["отделит",{"2":{"159":1}}],["отделку",{"2":{"26":1}}],["отдельная",{"2":{"78":1,"111":1,"125":1,"291":1}}],["отдельного",{"2":{"404":1,"436":1,"477":1,"482":1,"542":1}}],["отдельности",{"2":{"202":1}}],["отдельном",{"2":{"199":1,"299":1,"314":1,"478":1}}],["отдельно",{"2":{"72":1,"96":2,"436":2,"476":2,"542":1}}],["отдельной",{"2":{"43":1,"99":1,"260":1,"344":1}}],["отдельное",{"2":{"33":1,"481":1}}],["отдельным",{"2":{"327":1}}],["отдельными",{"2":{"125":1}}],["отдельных",{"2":{"153":1,"185":1,"327":1,"346":1,"366":1,"453":1,"454":2,"588":1}}],["отдельный",{"2":{"9":1,"41":1,"83":1,"88":1,"107":1,"111":1,"114":2,"122":2,"159":1,"199":1,"318":1,"436":1,"467":1,"483":1,"490":1}}],["отдельные",{"2":{"2":1,"11":1,"70":1,"436":1,"476":1,"483":1}}],["отдельную",{"2":{"3":1,"22":1,"194":1,"294":1,"466":1,"478":1}}],["от",{"0":{"377":1},"2":{"3":1,"22":1,"23":2,"26":1,"39":1,"56":1,"61":1,"64":1,"79":1,"89":1,"96":4,"117":1,"122":3,"123":1,"125":4,"128":1,"134":1,"137":1,"141":1,"142":4,"148":1,"151":1,"152":2,"154":1,"155":2,"156":3,"157":1,"159":1,"160":3,"164":2,"175":1,"177":1,"178":1,"180":2,"181":3,"183":1,"187":4,"189":1,"191":2,"193":1,"194":1,"199":1,"202":1,"203":2,"207":1,"217":1,"222":1,"224":1,"225":1,"226":3,"228":1,"229":1,"231":1,"232":3,"235":1,"237":1,"240":1,"241":2,"246":1,"247":2,"251":2,"252":1,"254":1,"255":1,"256":2,"261":1,"266":1,"268":2,"269":1,"271":3,"273":2,"276":1,"278":1,"284":2,"285":2,"286":1,"291":3,"298":3,"306":1,"309":1,"311":3,"312":1,"313":1,"318":2,"319":3,"327":2,"328":2,"329":1,"331":1,"333":1,"337":3,"338":1,"344":1,"346":1,"351":1,"352":1,"358":2,"359":1,"362":1,"363":1,"364":1,"369":3,"371":1,"377":1,"397":1,"415":4,"416":2,"418":1,"419":1,"420":1,"421":5,"422":1,"423":1,"425":1,"426":1,"433":2,"442":1,"444":1,"446":1,"452":1,"455":1,"457":4,"462":1,"466":1,"467":3,"469":1,"474":1,"476":2,"478":3,"479":2,"482":3,"483":1,"486":1,"490":1,"491":4,"501":1,"538":1,"541":1,"542":1,"575":1}}],["отводится",{"2":{"241":1}}],["отвечающие",{"2":{"478":1,"482":1}}],["отвечающий",{"2":{"327":1,"345":1}}],["отвечающего",{"2":{"457":1}}],["отвечаем",{"2":{"345":1,"415":2}}],["отвечает",{"2":{"123":1,"180":1,"239":1,"281":1,"299":1,"308":1,"350":1,"351":1,"352":2,"353":1,"354":1,"438":1,"455":1,"483":1,"591":1}}],["отвечал",{"2":{"345":1}}],["отвечать",{"2":{"6":1,"331":1,"377":1}}],["ответы",{"2":{"334":1}}],["ответьте",{"2":{"303":1,"372":1}}],["ответов",{"2":{"264":1,"502":2}}],["ответственная",{"2":{"478":1}}],["ответственностью",{"2":{"196":2}}],["ответственность",{"2":{"191":1,"194":1,"218":1,"222":1,"415":2}}],["ответственности",{"0":{"194":1,"196":1},"2":{"191":1,"194":4}}],["ответственным",{"2":{"2":1}}],["ответить",{"2":{"156":1,"176":1,"455":1}}],["ответе",{"2":{"125":2}}],["ответах",{"2":{"502":1,"508":1}}],["ответа",{"2":{"4":2,"232":1,"299":1,"334":1,"343":1,"345":3,"415":1,"419":1,"420":2}}],["ответ",{"2":{"4":1,"125":2,"253":1,"299":1,"327":1,"336":1,"345":2,"353":1,"399":1,"407":1,"415":2,"417":1,"450":1,"453":1,"491":1,"500":1}}],["отвлечься",{"2":{"3":1}}],["н",{"2":{"491":1}}],["нынешними",{"2":{"186":1}}],["ный",{"2":{"62":1}}],["нюансов",{"2":{"125":1,"126":1}}],["нулевой",{"2":{"300":1}}],["нулевые",{"2":{"142":1}}],["нулей",{"2":{"231":1}}],["нуля",{"2":{"156":1,"177":2,"235":1}}],["нули",{"2":{"142":1}}],["ну",{"2":{"83":1,"231":1,"368":1}}],["нуждаются",{"2":{"360":1}}],["нуждающихся",{"2":{"317":1}}],["нужд",{"2":{"313":1,"414":1}}],["нужды",{"2":{"177":1}}],["нужен",{"0":{"457":1},"2":{"17":1,"219":1,"300":1,"303":1,"396":1,"407":3,"429":1,"460":1,"478":2,"481":1,"491":2,"492":1,"508":1,"562":1}}],["нужную",{"2":{"220":1,"459":1,"561":1}}],["нужна",{"2":{"12":1,"132":1,"138":1,"156":1,"195":1,"198":1,"428":1,"436":1,"474":1,"483":1,"484":1}}],["нужное",{"2":{"89":1,"396":1}}],["нужно",{"2":{"12":1,"39":1,"41":2,"59":1,"73":1,"82":1,"83":1,"96":5,"104":2,"111":1,"121":1,"123":2,"128":1,"130":1,"142":2,"149":1,"156":1,"157":1,"158":1,"160":2,"164":1,"168":1,"177":1,"180":1,"183":2,"186":1,"187":1,"188":1,"196":1,"218":1,"223":1,"226":1,"234":1,"237":1,"259":1,"260":1,"311":1,"316":1,"338":1,"345":1,"352":1,"357":1,"362":1,"363":1,"368":1,"396":1,"407":2,"416":1,"420":1,"426":2,"429":2,"438":1,"444":1,"447":1,"450":1,"462":1,"463":1,"465":1,"474":1,"478":2,"479":2,"483":1,"490":1,"491":1,"492":2,"508":1,"531":1}}],["нужного",{"2":{"9":1,"273":1}}],["нужный",{"2":{"142":1,"183":1,"285":1,"479":1,"531":2,"579":1}}],["нужные",{"2":{"124":1,"384":1,"508":1,"589":1}}],["нужных",{"2":{"96":1,"474":1,"575":1}}],["нужны",{"2":{"7":1,"51":1,"112":1,"437":1,"451":1,"453":1,"474":1,"483":1,"492":1,"575":1}}],["нужным",{"2":{"3":1}}],["нём",{"2":{"41":1,"111":1,"487":1}}],["нежелаемые",{"2":{"541":1}}],["нежелательные",{"2":{"257":1}}],["нежелательных",{"2":{"182":1}}],["нежелательная",{"2":{"181":1}}],["неба",{"2":{"531":1}}],["небом",{"2":{"511":1,"528":1}}],["небольшом",{"2":{"407":1}}],["небольшого",{"2":{"123":1,"124":1,"157":1,"306":1,"320":1,"432":1,"476":1}}],["небольшой",{"0":{"109":1},"2":{"114":1,"145":1,"187":1,"254":1,"340":1,"344":1,"345":1,"363":1,"470":1,"492":1}}],["небольшое",{"2":{"38":1,"130":1,"144":1,"157":1,"168":1,"255":1,"265":1}}],["небольшим",{"2":{"137":1,"156":1,"188":1}}],["небольшими",{"2":{"100":1,"301":1,"322":1}}],["небольших",{"2":{"96":1,"160":1,"271":1,"304":1,"313":1,"357":1,"436":1,"455":1,"476":1,"490":1,"542":1}}],["небольшие",{"2":{"70":1,"96":2,"200":1,"238":1,"260":1}}],["небольшая",{"0":{"370":1},"2":{"89":1}}],["небольшую",{"2":{"2":1,"277":1,"492":1}}],["неблокирующая",{"2":{"483":1}}],["неуклюжим",{"2":{"453":1}}],["неудачей",{"2":{"444":1,"465":1}}],["неудачи",{"2":{"234":2,"444":1}}],["неудачное",{"2":{"478":1}}],["неудачной",{"2":{"357":1,"448":2}}],["неудачного",{"2":{"234":1}}],["неудачный",{"2":{"418":1}}],["неудачные",{"2":{"233":1}}],["неудачным",{"2":{"232":1,"421":1}}],["неудача",{"2":{"232":1}}],["неудобства",{"2":{"477":1}}],["неудобно",{"2":{"426":1}}],["неудобными",{"2":{"96":1}}],["неудобен",{"2":{"96":1}}],["неэффективным",{"2":{"492":1}}],["неэффективной",{"2":{"311":1}}],["неэтичной",{"2":{"275":1}}],["ненависть",{"2":{"283":1}}],["ненаправленность",{"0":{"281":1}}],["ненужную",{"2":{"200":1}}],["ненужным",{"2":{"195":1}}],["ненужной",{"2":{"478":1}}],["ненужного",{"2":{"200":1}}],["ненужному",{"2":{"196":1}}],["ненужное",{"2":{"138":1}}],["ненужно",{"2":{"122":1}}],["неяркой",{"2":{"252":1}}],["неявно",{"2":{"112":1}}],["негативный",{"2":{"258":1}}],["негативных",{"2":{"199":1,"258":1}}],["него",{"2":{"9":1,"11":1,"85":1,"89":1,"96":1,"98":1,"111":1,"113":1,"125":1,"137":2,"152":1,"168":1,"178":1,"181":1,"184":1,"187":1,"201":1,"212":1,"267":1,"269":1,"272":1,"286":1,"308":1,"321":1,"410":1,"419":1,"420":1,"428":1,"430":1,"447":1,"451":1,"453":1,"454":1,"458":1,"478":2,"549":1}}],["нередко",{"2":{"421":1}}],["нереактивных",{"2":{"407":1}}],["нереактивные",{"2":{"160":1}}],["неразличенно",{"2":{"239":1}}],["нерационального",{"2":{"198":1}}],["недействительным",{"2":{"453":1}}],["неделимого",{"2":{"194":1}}],["недопущения",{"2":{"550":1}}],["недопонимание",{"2":{"73":1}}],["недочеты",{"2":{"444":1}}],["недорого",{"2":{"425":1}}],["недоумении",{"2":{"258":1}}],["недостающие",{"2":{"451":1,"455":1}}],["недостаточно",{"2":{"289":1,"290":1,"421":1}}],["недостаток",{"2":{"96":1,"233":1,"311":1}}],["недостатков",{"2":{"356":1,"399":1,"415":1,"421":1}}],["недостатком",{"2":{"312":1,"327":2}}],["недостатка",{"2":{"178":1,"419":1}}],["недостатки",{"2":{"160":1,"291":2,"313":1,"399":1,"415":1,"447":1}}],["недоступна",{"2":{"132":1}}],["независимы",{"2":{"478":1}}],["независимых",{"2":{"447":2}}],["независимые",{"2":{"436":1,"476":1}}],["независимость",{"2":{"436":1}}],["независимое",{"2":{"371":1}}],["независимо",{"2":{"202":1,"298":1,"309":1,"311":2,"436":2,"462":1,"476":1,"477":1}}],["незавершенных",{"2":{"187":1}}],["незаслужено",{"2":{"123":1}}],["неизвестно",{"2":{"483":1}}],["неизбежным",{"2":{"268":1}}],["неизменяемым",{"2":{"422":1}}],["неизменяемое",{"2":{"160":1}}],["неизменным",{"2":{"218":1}}],["неиспользуемых",{"2":{"198":1}}],["неиспользуемые",{"2":{"181":1}}],["неисчерпывающими",{"2":{"193":1}}],["нечто",{"2":{"177":1,"314":1,"402":1,"410":1,"478":1}}],["невероятно",{"2":{"445":1}}],["невелика",{"2":{"407":1}}],["невелик",{"2":{"187":1}}],["невелики",{"2":{"145":1}}],["невозможен",{"2":{"400":1}}],["невозможна",{"2":{"340":1}}],["невозможным",{"2":{"278":1}}],["невозможной",{"2":{"445":1}}],["невозможность",{"2":{"278":1}}],["невозможности",{"2":{"12":1}}],["невозможно",{"2":{"142":1,"150":1,"181":1,"194":1,"285":1,"369":1,"445":1,"478":1,"491":1}}],["невыполненных",{"2":{"185":1}}],["неочевидные",{"2":{"502":1}}],["неотзывчивым",{"2":{"319":1,"327":1}}],["неотъемлемой",{"2":{"231":1,"356":1}}],["неоптимизированных",{"2":{"492":1}}],["неопределено",{"2":{"234":1}}],["неопределенное",{"2":{"453":1}}],["неопределенном",{"2":{"234":1,"258":1}}],["неопределенных",{"2":{"234":1}}],["неопределенна",{"2":{"232":1}}],["неопытный",{"2":{"201":1}}],["неоднократно",{"2":{"221":1,"231":1,"413":1}}],["неоднократные",{"2":{"122":1}}],["необычными",{"2":{"375":1}}],["необычно",{"2":{"362":1}}],["необязательными",{"2":{"411":1}}],["необязательным",{"2":{"358":1}}],["необязательные",{"2":{"56":1}}],["необязателен",{"2":{"329":1}}],["необходимую",{"2":{"338":1,"492":1}}],["необходима",{"2":{"311":1,"436":1,"476":1}}],["необходим",{"2":{"152":1,"223":1,"317":1,"425":1,"469":1}}],["необходимы",{"2":{"413":1,"416":1,"423":1,"437":1,"468":1}}],["необходимым",{"2":{"287":1,"293":1,"541":1}}],["необходимыми",{"2":{"183":1,"224":1,"538":1}}],["необходимые",{"2":{"141":1,"178":1,"291":1,"296":1,"299":1,"345":1,"362":1,"391":1,"430":1}}],["необходимых",{"2":{"126":1,"139":1,"316":1,"447":1,"590":1}}],["необходимый",{"2":{"50":1,"141":1,"277":1,"491":1}}],["необходимому",{"2":{"247":1}}],["необходимость",{"2":{"111":1,"202":1,"241":1,"255":1,"353":1,"414":1,"457":1,"462":1,"469":1}}],["необходимости",{"2":{"59":1,"126":1,"152":1,"156":2,"160":1,"183":1,"219":1,"228":2,"296":1,"313":1,"327":1,"333":1,"357":2,"396":1,"399":1,"400":2,"404":1,"407":1,"413":1,"416":3,"426":1,"437":1,"455":1,"477":2,"538":2}}],["необходимое",{"2":{"88":1,"246":1,"354":1,"448":1}}],["необходимой",{"2":{"12":1,"223":1,"224":1}}],["необходимо",{"0":{"294":1},"2":{"9":1,"12":1,"59":1,"123":1,"132":2,"141":1,"142":2,"143":6,"145":1,"148":1,"152":1,"153":1,"154":1,"155":1,"156":3,"160":3,"168":1,"180":1,"181":1,"183":1,"186":1,"195":1,"196":1,"198":2,"209":2,"212":1,"223":1,"225":1,"226":6,"229":1,"231":1,"232":2,"234":1,"240":1,"251":1,"273":2,"291":2,"298":1,"299":2,"300":2,"311":1,"314":2,"318":1,"328":1,"329":2,"330":1,"331":1,"338":1,"339":2,"340":1,"345":1,"350":1,"351":1,"352":2,"356":1,"357":1,"358":1,"360":1,"362":1,"367":1,"368":2,"369":1,"399":1,"401":1,"403":1,"405":1,"407":2,"409":1,"410":1,"413":1,"415":1,"416":2,"417":1,"418":2,"420":1,"421":1,"422":1,"438":1,"445":4,"446":2,"447":1,"448":2,"449":1,"450":1,"451":1,"454":2,"455":1,"460":1,"462":1,"466":1,"469":1,"506":1,"508":1,"531":1,"541":1,"562":1,"563":1,"589":1}}],["нелегкая",{"2":{"445":1}}],["нелогично",{"2":{"122":1,"478":1}}],["нельзя",{"2":{"89":1,"122":1,"319":1,"482":1,"483":1}}],["неё",{"2":{"100":1,"104":1,"123":1,"180":1,"422":1,"545":1}}],["нецелесообразно",{"2":{"96":1,"413":1}}],["нефункциональные",{"0":{"68":1},"2":{"73":1}}],["некая",{"2":{"483":2}}],["некую",{"2":{"224":1}}],["некоего",{"2":{"478":1}}],["некое",{"2":{"255":1}}],["некой",{"2":{"123":1}}],["некоторая",{"2":{"422":1}}],["некоторый",{"2":{"188":1}}],["некоторыми",{"2":{"139":2,"184":1,"187":1,"202":1,"300":1,"337":1,"408":1,"444":1}}],["некоторым",{"2":{"139":2,"251":1,"327":1}}],["некоторые",{"2":{"135":1,"137":1,"142":2,"155":1,"156":3,"160":2,"177":1,"178":2,"180":3,"181":4,"184":1,"185":1,"189":1,"192":1,"198":1,"201":1,"222":1,"223":1,"231":1,"237":1,"240":2,"247":1,"258":1,"262":1,"263":1,"266":1,"278":1,"285":1,"287":1,"291":3,"293":2,"298":1,"303":1,"304":2,"308":1,"319":2,"334":1,"335":1,"337":1,"362":1,"364":1,"399":1,"413":1,"414":1,"419":1,"422":1,"424":2,"442":1,"452":2,"456":1,"465":1,"466":1,"474":1,"492":1}}],["некоторых",{"2":{"47":1,"130":1,"168":1,"179":1,"180":1,"181":1,"183":1,"197":1,"207":1,"210":1,"220":1,"239":1,"253":1,"277":1,"285":1,"291":2,"306":1,"327":1,"341":1,"348":1,"364":1,"416":1,"422":1,"438":1,"444":1,"445":1,"454":1}}],["некоторое",{"2":{"160":1,"207":1,"447":1,"448":1}}],["некоторой",{"2":{"133":1,"224":1,"225":1,"299":1,"332":1,"370":1,"448":1,"453":1}}],["некотором",{"2":{"61":1,"421":1,"478":1}}],["некоторую",{"2":{"124":1}}],["некритичными",{"2":{"40":1}}],["некий",{"2":{"9":1,"226":1,"492":1}}],["ней",{"2":{"34":1,"40":1,"96":2,"124":2,"177":1,"223":1,"238":1,"306":1,"319":2,"343":1,"363":1,"384":1,"388":1,"389":1,"392":1,"448":1,"474":1,"478":1,"484":1,"492":1,"575":1}}],["нетривиальные",{"2":{"445":1,"483":1}}],["нетривиальных",{"2":{"442":1,"457":1}}],["нетривиальная",{"2":{"430":1}}],["нетерпеливые",{"2":{"257":1}}],["нет",{"2":{"30":1,"32":1,"62":1,"96":1,"105":1,"123":2,"126":1,"142":1,"152":1,"160":2,"163":1,"176":1,"178":1,"179":1,"187":1,"190":1,"212":1,"223":1,"228":1,"248":1,"263":1,"268":1,"277":1,"313":2,"316":1,"327":3,"370":2,"377":1,"405":1,"410":1,"413":1,"447":2,"448":1,"450":2,"491":2,"492":1}}],["немножко",{"2":{"492":1}}],["немногие",{"2":{"279":1}}],["немного",{"2":{"89":1,"107":1,"157":1,"175":1,"182":1,"188":1,"229":1,"234":1,"291":3,"315":1,"339":1,"361":1,"402":1,"410":1,"416":1,"482":1,"484":1,"490":1}}],["немедленным",{"2":{"336":1}}],["немедленное",{"2":{"332":1}}],["немедленно",{"2":{"312":1,"369":1}}],["немодифицированный",{"2":{"226":1}}],["нему",{"2":{"123":1,"125":1,"147":1,"362":1,"407":1,"413":1,"430":1,"453":1,"466":1,"478":1}}],["немаленький",{"2":{"44":1}}],["нем",{"2":{"29":1,"32":1,"104":1,"122":1,"123":2,"125":1,"155":1,"156":1,"228":1,"231":1,"272":1,"317":1,"319":1,"327":1,"339":1,"396":2,"425":1,"448":1,"452":1,"483":1,"491":1,"503":1}}],["непустое",{"2":{"163":1}}],["неплохим",{"2":{"124":1}}],["неплохой",{"2":{"483":1}}],["неплохо",{"2":{"101":1,"114":1,"230":1,"491":1,"578":1}}],["непрямой",{"2":{"478":1}}],["непрактичным",{"2":{"457":1}}],["неправильно",{"2":{"416":1}}],["неправильном",{"2":{"164":1,"421":1}}],["непрерывно",{"2":{"467":1}}],["непрерывной",{"2":{"151":1}}],["непрерывная",{"0":{"467":1},"2":{"394":1,"466":1,"467":3}}],["непредусмотренные",{"2":{"275":1}}],["непроизвольным",{"2":{"315":1}}],["непроизвольных",{"2":{"258":1}}],["непростой",{"2":{"107":1}}],["непростая",{"2":{"25":1}}],["неприятных",{"2":{"363":1}}],["неприемлимо",{"2":{"96":1}}],["неприемлимым",{"2":{"96":1}}],["непривычно",{"2":{"85":1}}],["неполным",{"2":{"466":1}}],["неполный",{"0":{"193":1},"1":{"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1},"2":{"126":1,"191":1,"203":1,"250":1,"253":1}}],["непосредственный",{"2":{"273":1}}],["непосредственное",{"2":{"274":1}}],["непосредственно",{"2":{"40":1,"129":1,"145":1,"151":1,"158":1,"179":1,"180":2,"181":2,"187":1,"195":1,"198":2,"212":1,"226":1,"229":1,"273":1,"299":1,"300":1,"329":1,"334":1,"338":1,"339":1,"356":1,"410":1,"422":2,"453":2,"474":1,"508":1,"537":1,"541":1}}],["непостоянен",{"2":{"188":1}}],["непонятным",{"2":{"180":1}}],["непойманная",{"2":{"122":1}}],["неподкованых",{"2":{"12":1}}],["нее",{"2":{"23":1,"160":1,"263":1,"310":1,"312":1,"463":1,"464":1,"478":1,"482":1}}],["нестандартные",{"2":{"491":1}}],["нестандартных",{"2":{"415":1}}],["нести",{"2":{"415":1}}],["несем",{"2":{"415":1}}],["несомненно",{"2":{"237":1}}],["несовместимости",{"2":{"155":2}}],["несоответствия",{"2":{"465":1}}],["несоответствие",{"2":{"129":2,"465":1}}],["несоответствию",{"2":{"73":1}}],["несложен",{"2":{"152":1}}],["несложных",{"2":{"492":1}}],["несложный",{"2":{"12":1}}],["несложно",{"2":{"22":1,"39":1,"58":1,"123":1,"438":1}}],["несмотря",{"2":{"96":1,"202":1,"257":2,"306":1,"340":1,"447":1,"448":1,"491":1}}],["несколькими",{"2":{"184":1,"347":1,"360":1,"370":1,"422":1,"436":1,"476":1}}],["нескольким",{"2":{"125":1,"200":1,"359":1}}],["нескольких",{"2":{"43":1,"95":1,"131":1,"141":1,"142":2,"160":1,"179":1,"186":1,"191":1,"196":1,"202":1,"289":1,"302":1,"311":1,"319":1,"331":1,"338":1,"345":1,"354":1,"356":1,"363":1,"372":1,"402":1,"408":1,"421":1,"429":1,"436":1,"438":1,"457":2,"465":1,"478":1,"479":1,"482":1,"538":1}}],["несколько",{"2":{"11":1,"29":1,"38":1,"95":1,"108":1,"118":2,"140":1,"142":3,"145":1,"156":1,"157":1,"158":3,"160":1,"167":2,"168":1,"180":1,"183":2,"187":1,"193":1,"196":2,"199":1,"202":1,"222":1,"228":1,"231":1,"233":1,"248":1,"252":1,"257":2,"271":1,"273":1,"280":1,"285":2,"288":1,"291":1,"298":1,"299":1,"306":1,"309":1,"311":1,"319":2,"327":1,"340":1,"344":1,"346":1,"354":2,"356":1,"357":2,"359":2,"362":3,"369":1,"370":1,"396":1,"397":1,"410":2,"413":1,"414":1,"416":2,"423":1,"438":3,"447":3,"448":3,"452":1,"453":1,"478":2,"483":1,"492":1}}],["несвязанные",{"2":{"3":1}}],["не",{"0":{"138":1,"199":1},"2":{"3":1,"10":2,"17":1,"22":2,"23":1,"26":1,"32":1,"33":1,"39":3,"40":1,"41":1,"48":1,"50":1,"51":1,"56":1,"59":2,"64":3,"65":1,"67":1,"76":1,"78":1,"79":1,"89":1,"95":1,"96":15,"101":1,"102":2,"105":1,"113":1,"114":2,"122":4,"123":4,"124":4,"125":3,"126":4,"128":2,"129":1,"130":4,"131":2,"132":1,"136":1,"138":2,"139":1,"141":1,"142":4,"144":1,"145":4,"147":1,"148":1,"149":2,"150":1,"151":2,"152":2,"155":2,"156":3,"157":2,"158":2,"159":2,"160":9,"162":1,"163":1,"164":1,"165":1,"167":2,"168":4,"169":1,"174":2,"177":3,"178":1,"179":6,"180":5,"181":3,"182":1,"183":5,"184":8,"186":2,"188":3,"190":1,"191":4,"192":2,"194":1,"195":3,"196":1,"197":3,"198":4,"199":3,"200":2,"201":2,"202":1,"207":1,"208":1,"211":1,"212":2,"215":1,"217":5,"218":4,"219":2,"220":2,"223":5,"225":1,"226":4,"227":1,"228":2,"229":1,"231":3,"232":7,"233":5,"234":5,"238":1,"239":1,"240":2,"242":3,"244":3,"246":1,"251":2,"252":1,"255":3,"256":1,"257":1,"258":4,"260":5,"261":1,"263":1,"264":3,"265":2,"266":1,"268":5,"269":1,"272":3,"274":1,"276":4,"277":3,"278":1,"280":2,"282":1,"284":2,"285":1,"286":1,"291":6,"293":3,"294":1,"296":2,"298":1,"299":7,"301":2,"302":1,"306":3,"308":4,"311":1,"313":1,"314":2,"315":1,"318":2,"319":11,"320":1,"321":1,"326":1,"327":11,"331":2,"332":1,"334":1,"336":1,"337":1,"338":3,"339":5,"340":4,"345":2,"346":1,"347":1,"348":2,"351":1,"353":1,"354":3,"356":1,"357":1,"358":1,"359":2,"360":3,"362":5,"363":2,"364":4,"368":2,"369":3,"394":1,"396":1,"399":6,"401":2,"404":4,"407":6,"409":1,"410":3,"412":1,"413":1,"415":2,"416":3,"418":1,"419":2,"420":4,"421":6,"422":4,"424":1,"426":1,"428":1,"430":7,"435":1,"436":5,"437":1,"438":2,"442":1,"443":1,"444":3,"445":1,"447":2,"448":4,"449":5,"450":2,"451":1,"452":1,"453":3,"454":3,"456":1,"457":3,"460":1,"462":6,"463":4,"464":1,"465":3,"466":1,"469":1,"472":1,"474":7,"476":5,"477":1,"478":11,"479":1,"481":1,"482":6,"483":4,"484":5,"485":1,"487":2,"490":1,"491":5,"492":10,"502":1,"508":1,"515":2,"537":1,"538":3,"541":2,"542":1,"549":1,"562":2,"578":1,"588":1}}],["низкоуровневый",{"2":{"541":1}}],["низком",{"2":{"226":1}}],["низкие",{"2":{"145":1}}],["низвело",{"2":{"111":1}}],["никогда",{"2":{"138":1,"142":1,"180":1,"184":1,"260":1,"299":1,"356":1,"421":1,"491":1}}],["никакого",{"2":{"277":1}}],["никакой",{"2":{"261":1,"369":1,"370":1,"478":1,"492":1}}],["никаким",{"2":{"407":1}}],["никакие",{"2":{"186":1}}],["никаких",{"2":{"96":1,"138":1,"453":1,"478":1}}],["никак",{"2":{"3":1,"407":1}}],["ни",{"2":{"96":2,"160":1,"207":1,"218":1,"314":1,"319":3,"362":1,"415":1,"446":1,"447":1,"448":1,"463":1}}],["нисколько",{"2":{"96":1}}],["нижняя",{"2":{"570":1}}],["нижний",{"2":{"243":1,"368":1}}],["нижней",{"2":{"260":1,"261":1,"263":1,"271":1,"273":1,"298":1}}],["нижнем",{"2":{"170":1,"186":1,"240":1,"242":1,"246":2,"273":1}}],["нижнее",{"2":{"88":1}}],["ниже",{"2":{"10":1,"125":1,"132":1,"145":1,"250":1,"253":1,"255":1,"273":2,"360":1,"410":1,"411":1,"422":1,"464":1,"500":1,"506":1}}],["ниша",{"2":{"63":1}}],["нивелирования",{"2":{"41":1}}],["ничем",{"2":{"32":1}}],["ничего",{"2":{"10":1,"96":1,"158":1,"160":1,"248":1,"319":1,"336":1,"483":1,"491":1}}],["нибудь",{"2":{"12":1,"248":1,"418":1}}],["ним",{"2":{"9":1,"17":1,"48":1,"50":2,"53":1,"111":1,"142":1,"181":1,"231":1,"235":1,"260":1,"327":1,"337":1,"345":1,"402":1,"421":1,"453":2,"487":1,"491":1,"492":1,"547":1}}],["ними",{"2":{"2":1,"34":1,"43":1,"113":1,"123":1,"142":1,"156":2,"159":1,"180":1,"187":1,"228":1,"235":1,"287":1,"299":1,"302":1,"306":1,"319":1,"321":1,"327":1,"351":1,"397":1,"406":1,"413":1,"414":1,"421":1,"438":1,"458":1,"515":1}}],["них",{"2":{"6":1,"39":1,"41":1,"70":1,"79":1,"96":1,"130":2,"142":2,"155":1,"156":1,"160":2,"161":1,"168":1,"181":2,"183":1,"187":1,"194":1,"195":1,"201":1,"207":1,"212":1,"222":1,"223":1,"224":1,"228":1,"231":1,"234":1,"242":1,"250":1,"252":1,"257":1,"263":1,"271":1,"275":1,"285":2,"298":1,"299":1,"304":2,"319":1,"321":1,"327":1,"332":2,"335":1,"352":1,"359":1,"360":1,"361":1,"362":2,"364":1,"369":1,"383":1,"399":2,"402":1,"407":3,"413":2,"429":1,"445":1,"448":2,"451":1,"452":1,"457":3,"458":1,"463":1,"474":1,"479":1,"483":1,"485":1}}],["ночных",{"2":{"467":1}}],["ноу",{"2":{"457":1}}],["ноут",{"2":{"430":1}}],["ное",{"2":{"455":1}}],["носят",{"2":{"284":1,"468":1}}],["носит",{"2":{"140":1,"238":1,"287":1}}],["номера",{"2":{"420":1,"421":1}}],["номер",{"2":{"328":1,"492":1}}],["номеров",{"2":{"260":1}}],["номером",{"2":{"260":1}}],["номеру",{"2":{"260":1}}],["нормальный",{"2":{"214":1}}],["нормально",{"2":{"62":1,"492":1}}],["нормальному",{"2":{"38":1}}],["нотация",{"2":{"453":1}}],["нотацией",{"2":{"413":1}}],["нотаций",{"2":{"352":1}}],["нотации",{"2":{"330":1}}],["нотацию",{"2":{"161":1,"186":1,"318":1,"404":3}}],["нотированной",{"2":{"131":1}}],["новички",{"2":{"377":1}}],["новичка",{"2":{"138":1}}],["новейшим",{"2":{"357":1}}],["нова",{"2":{"183":1}}],["новая",{"2":{"134":1,"182":1,"233":1,"260":1,"283":1,"369":1,"370":1,"399":1,"492":1}}],["новую",{"2":{"182":1,"338":1,"339":1,"366":1,"397":1,"399":1,"455":1,"465":1,"484":1,"573":1}}],["нововведением",{"2":{"478":1}}],["новостных",{"2":{"399":1,"478":1}}],["новостные",{"2":{"257":1}}],["новостей",{"2":{"276":1,"478":1}}],["новой",{"2":{"177":1,"179":1,"226":1,"339":1,"364":1,"369":1,"396":1,"410":1,"455":1,"490":1,"578":1,"588":1}}],["новое",{"0":{"402":1},"2":{"156":1,"234":1,"396":1,"422":1}}],["новому",{"2":{"372":1}}],["новом",{"2":{"134":2,"354":1,"368":1,"402":1}}],["нового",{"0":{"369":1,"370":1},"2":{"126":1,"132":1,"160":1,"177":2,"312":1,"328":1,"369":1,"401":1,"409":1,"420":1,"421":1,"444":1,"482":1,"483":1,"500":1,"508":1}}],["новыми",{"2":{"423":1}}],["новым",{"2":{"160":1,"234":1,"237":1,"342":1}}],["новые",{"0":{"135":1},"2":{"135":1,"142":1,"155":3,"260":2,"261":1,"269":1,"313":1,"323":1,"337":1,"340":1,"351":1,"364":1,"365":1,"369":1,"375":1,"399":1,"402":2,"405":1,"406":1,"410":1,"414":1,"424":1,"430":1,"442":1,"456":1,"465":1,"482":1,"491":1}}],["новый",{"2":{"114":1,"126":3,"134":1,"137":1,"159":1,"160":1,"168":2,"179":2,"212":1,"252":1,"261":1,"277":2,"305":1,"351":2,"359":1,"376":1,"407":2,"411":1,"420":1,"422":1,"429":1,"462":1,"466":1,"484":1}}],["новых",{"2":{"2":1,"135":1,"177":1,"255":1,"289":1,"318":1,"319":1,"325":1,"335":1,"338":1,"352":1,"369":2,"375":1,"396":1,"399":2,"503":1,"591":1}}],["но",{"2":{"3":1,"9":1,"17":1,"22":3,"23":1,"26":3,"29":1,"39":1,"41":1,"44":1,"59":1,"76":1,"79":1,"85":1,"88":1,"89":2,"96":4,"101":1,"102":1,"106":1,"113":1,"114":2,"122":1,"123":3,"124":3,"126":3,"130":1,"132":1,"137":3,"138":1,"139":1,"142":2,"145":4,"146":1,"148":1,"155":1,"156":6,"157":1,"158":1,"159":3,"160":9,"163":1,"164":1,"166":1,"167":1,"168":2,"169":1,"174":1,"178":2,"179":2,"180":3,"181":2,"183":3,"184":2,"191":1,"196":2,"197":1,"199":2,"201":2,"217":1,"218":3,"220":2,"223":1,"226":5,"228":3,"230":1,"231":2,"232":2,"233":3,"234":3,"235":1,"239":2,"243":1,"244":2,"249":1,"252":1,"253":2,"254":2,"255":2,"257":1,"258":2,"261":2,"263":1,"268":3,"269":1,"271":2,"272":1,"277":1,"280":1,"283":1,"285":1,"286":1,"289":1,"291":6,"293":2,"294":3,"297":1,"298":1,"299":1,"300":1,"304":1,"305":1,"306":2,"308":2,"311":3,"314":1,"315":1,"316":1,"318":3,"319":3,"325":1,"327":3,"331":2,"334":1,"335":1,"340":1,"352":1,"359":1,"360":1,"361":2,"362":2,"363":1,"364":1,"368":1,"369":3,"370":2,"371":1,"377":1,"394":1,"396":1,"399":1,"400":1,"401":1,"402":1,"404":1,"407":1,"408":1,"410":2,"414":1,"415":2,"416":2,"421":4,"422":2,"426":1,"430":1,"438":1,"444":1,"445":2,"446":1,"447":4,"448":2,"452":3,"453":2,"456":1,"457":1,"458":1,"462":1,"464":1,"465":1,"466":2,"474":2,"478":4,"479":1,"482":5,"483":4,"484":2,"491":4,"492":5,"508":2,"541":1,"546":1,"553":1,"582":1}}],["нахождение",{"2":{"575":1}}],["находят",{"2":{"478":1}}],["находятся",{"2":{"151":1,"244":1,"273":1,"436":1,"491":1,"577":1}}],["находимся",{"2":{"463":1}}],["находим",{"2":{"107":1,"335":1,"453":1}}],["находить",{"2":{"198":1,"239":1}}],["находиться",{"2":{"17":1,"43":1,"225":1,"331":1,"401":2}}],["находит",{"2":{"183":1}}],["находится",{"2":{"48":1,"152":1,"168":1,"183":1,"234":1,"240":1,"252":2,"258":1,"276":1,"299":1,"311":2,"368":1,"415":1,"462":1,"478":1,"491":1,"549":1,"583":1,"590":1}}],["находились",{"2":{"47":1}}],["научимся",{"2":{"445":1,"458":1}}],["научиться",{"2":{"375":1,"457":1}}],["научились",{"2":{"302":1,"371":1,"453":1}}],["научных",{"2":{"155":1}}],["накладные",{"2":{"312":1,"436":1,"476":1}}],["накладывает",{"2":{"201":1,"202":1}}],["наконец",{"2":{"149":1,"155":2,"157":1,"184":1,"187":2,"223":1,"227":1,"293":1,"321":1,"334":2,"335":1,"345":1,"363":2,"368":1,"404":1,"408":1,"416":1,"454":1,"465":1}}],["нажали",{"2":{"453":1}}],["нажав",{"2":{"301":1}}],["нажатию",{"2":{"552":1}}],["нажатии",{"2":{"336":1,"368":1,"580":1,"582":1}}],["нажатием",{"2":{"179":1,"254":1}}],["нажать",{"2":{"183":1,"242":1}}],["нажимая",{"2":{"453":1}}],["нажимает",{"2":{"283":1,"420":1}}],["нажимать",{"2":{"185":1}}],["нажмите",{"2":{"179":3,"301":1,"561":1}}],["нажмет",{"2":{"168":1}}],["наоборот",{"2":{"160":1,"319":1,"424":1}}],["нагружает",{"2":{"492":1}}],["нагружающие",{"2":{"483":1}}],["нагрузку",{"2":{"335":1,"416":1,"483":1}}],["нагрузке",{"2":{"333":1,"416":1}}],["нагрузки",{"2":{"148":1,"343":1,"416":1}}],["наглядные",{"2":{"304":1}}],["наглядно",{"2":{"261":1}}],["наглядность",{"2":{"258":1}}],["наглядности",{"2":{"129":1}}],["наглядной",{"2":{"253":1}}],["наглядного",{"2":{"73":1}}],["нанимаемой",{"2":{"142":1}}],["наименьшими",{"2":{"483":1}}],["наименьшей",{"2":{"351":1}}],["наименования",{"2":{"22":1,"542":1}}],["наилучшим",{"2":{"350":1,"354":1}}],["наибольшую",{"2":{"283":1}}],["наиболее",{"2":{"142":2,"145":1,"155":1,"160":1,"161":1,"176":1,"178":2,"180":1,"183":1,"200":1,"202":1,"237":1,"253":1,"271":1,"273":1,"280":1,"287":1,"289":1,"293":1,"318":1,"324":1,"333":1,"340":2,"354":1,"375":1,"382":1,"390":1,"399":2,"410":1,"413":3,"415":1,"419":1,"422":2,"429":1,"446":1,"457":1,"464":1,"466":1,"483":1,"502":1}}],["наивная",{"2":{"223":1}}],["наивной",{"2":{"222":1,"223":1,"224":1,"226":1}}],["наивную",{"2":{"218":1}}],["налету",{"2":{"492":1,"575":1}}],["налево",{"2":{"142":1}}],["наложенный",{"2":{"298":1}}],["налогов",{"2":{"282":1}}],["наличии",{"2":{"413":1}}],["наличия",{"2":{"122":1,"198":1,"293":1,"296":1,"413":1,"482":1}}],["наличие",{"2":{"12":1,"152":1,"184":1,"187":1,"217":1,"234":1,"266":1,"421":1,"447":1,"449":1,"479":1}}],["натянуть",{"2":{"483":1}}],["нативного",{"2":{"291":1,"482":1,"492":1}}],["нативное",{"2":{"256":1,"289":1}}],["нативно",{"2":{"252":1}}],["нативная",{"2":{"226":1}}],["нативный",{"2":{"587":1}}],["нативным",{"2":{"492":1}}],["нативными",{"2":{"155":1,"298":1}}],["нативные",{"2":{"132":1,"226":1}}],["нативных",{"2":{"130":1,"231":2,"364":1,"492":1}}],["нативную",{"2":{"130":1}}],["натуры",{"2":{"9":1}}],["набросать",{"2":{"368":1}}],["набросок",{"2":{"350":1}}],["набрать",{"2":{"422":1}}],["набранный",{"2":{"187":1}}],["набрав",{"2":{"180":1}}],["наблюдающий",{"2":{"261":1}}],["наблюдать",{"2":{"222":1,"247":1}}],["наблюдателю",{"2":{"223":1}}],["наблюдателям",{"2":{"222":1,"223":1}}],["наблюдателя",{"2":{"222":1,"226":1,"260":1}}],["наблюдателей",{"2":{"222":4}}],["наблюдатели",{"2":{"222":3}}],["наблюдатель",{"0":{"222":1},"1":{"223":1},"2":{"222":2,"223":2}}],["наблюдает",{"2":{"222":1}}],["наблюдении",{"2":{"114":1}}],["набирает",{"2":{"187":1,"421":1}}],["набирать",{"2":{"184":1}}],["набирают",{"2":{"174":1}}],["набираются",{"2":{"171":1}}],["наберите",{"2":{"179":1}}],["набором",{"2":{"453":1}}],["наборов",{"2":{"445":1}}],["наборе",{"2":{"260":1}}],["набору",{"2":{"220":1}}],["наборами",{"2":{"448":1}}],["набора",{"2":{"177":1,"242":1,"260":1,"415":1}}],["наборы",{"2":{"156":1,"158":1}}],["набор",{"2":{"74":1,"155":1,"169":1,"195":1,"234":1,"240":1,"260":2,"293":1,"399":1,"425":1,"447":2,"451":1,"466":1}}],["назовите",{"2":{"424":1}}],["назвать",{"2":{"190":1,"288":1,"337":1}}],["названную",{"2":{"313":1}}],["названный",{"2":{"160":1,"328":1,"404":1}}],["названа",{"2":{"279":1}}],["названий",{"2":{"281":1}}],["названиемстор",{"2":{"478":1}}],["названием",{"2":{"186":1,"212":1,"223":1,"248":1,"298":1,"364":1,"445":1,"561":1}}],["название",{"2":{"44":1,"98":1,"117":1,"118":1,"160":1,"254":1,"258":1,"293":1,"341":1,"399":1,"491":1,"562":1}}],["названиями",{"2":{"402":1}}],["названия",{"2":{"22":1,"106":1,"226":1,"258":1,"291":1,"294":1}}],["назад",{"2":{"188":1,"237":1,"257":1,"294":1,"369":1,"413":2,"474":1}}],["назначению",{"2":{"346":1,"483":1}}],["назначение",{"2":{"144":1,"231":1,"300":1,"363":1,"413":1}}],["назначения",{"2":{"141":1,"222":1,"340":1}}],["называют",{"2":{"202":1,"222":1,"255":1,"399":2,"414":1}}],["называются",{"2":{"142":2,"143":1,"222":1,"266":1,"362":1,"422":2}}],["называть",{"2":{"180":1,"478":2}}],["называет",{"2":{"436":1,"477":1}}],["называется",{"2":{"111":1,"131":1,"145":1,"157":1,"166":1,"215":1,"260":2,"273":1,"279":1,"360":1,"399":1,"457":1,"458":2,"463":1,"467":1,"474":1,"478":1,"483":1,"561":1,"575":1}}],["называемому",{"2":{"422":1}}],["называемой",{"2":{"142":1,"159":1}}],["называемая",{"2":{"226":1}}],["называемую",{"2":{"212":1,"308":1}}],["называемых",{"2":{"399":1}}],["называемыми",{"2":{"327":1}}],["называемые",{"2":{"161":1,"234":1,"291":1,"362":1,"422":1,"478":1}}],["называемый",{"2":{"160":1,"222":1,"331":1,"362":1}}],["навязывающим",{"2":{"541":1}}],["навязывание",{"2":{"96":1}}],["навык",{"2":{"304":1}}],["навыков",{"2":{"177":1}}],["навыки",{"2":{"153":1,"189":1,"323":1,"397":1,"423":1,"442":1,"468":1}}],["навигационная",{"2":{"570":1}}],["навигационное",{"2":{"570":1}}],["навигационного",{"2":{"404":1}}],["навигационной",{"2":{"264":1}}],["навигационных",{"2":{"404":1,"408":1,"415":1,"551":1}}],["навигационные",{"2":{"351":1,"404":1,"410":1}}],["навигационный",{"2":{"273":1}}],["навигацией",{"2":{"262":1,"294":1,"400":1,"423":1}}],["навигацию",{"2":{"260":1,"400":2,"402":1,"406":1,"407":1,"410":1,"413":1,"415":1,"455":1}}],["навигации",{"0":{"262":1},"1":{"263":1,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1},"2":{"142":1,"257":1,"263":1,"264":2,"266":1,"268":1,"271":2,"298":1,"364":1,"400":1,"401":2,"408":1,"409":1,"412":1,"413":1,"423":1,"433":1,"476":1}}],["навигация",{"0":{"408":1},"1":{"409":1,"410":1},"2":{"134":1,"144":1,"152":1,"260":1,"400":1,"404":1,"410":1,"582":1}}],["наведение",{"2":{"254":1}}],["наведем",{"2":{"100":1}}],["наверное",{"2":{"218":1,"334":1,"482":1,"492":1}}],["наверняка",{"2":{"48":1}}],["наверх",{"2":{"30":1}}],["нарезку",{"2":{"351":1}}],["наряду",{"2":{"302":1,"399":1,"479":1}}],["нарушена",{"2":{"338":1}}],["нарушению",{"2":{"73":1}}],["нарушать",{"2":{"327":1}}],["нарушают",{"2":{"263":1}}],["нарушаются",{"2":{"185":1}}],["нарушает",{"2":{"217":1,"222":1,"268":2,"356":1}}],["нарушить",{"2":{"442":1}}],["нарушит",{"2":{"196":1}}],["народу",{"2":{"96":1}}],["народ",{"2":{"96":1}}],["наращивать",{"2":{"11":1,"155":1}}],["начнут",{"2":{"462":1}}],["начните",{"2":{"444":1}}],["начнете",{"2":{"271":1,"375":1}}],["начнется",{"2":{"158":1}}],["начнем",{"2":{"169":1,"177":1,"187":1,"234":1,"235":1,"308":1,"309":1,"313":1,"320":1,"321":1,"333":1,"334":1,"335":1,"362":1,"368":1,"402":1,"404":1,"406":1,"407":1,"408":2,"447":2,"448":2,"451":1,"458":1}}],["начаться",{"2":{"327":1}}],["начать",{"2":{"124":1,"156":1,"178":1,"237":1,"372":1,"384":1,"451":1,"462":1,"465":1}}],["началу",{"2":{"448":1}}],["начали",{"2":{"189":1,"231":1,"463":1}}],["началось",{"2":{"258":1}}],["началом",{"2":{"247":1,"491":1}}],["начало",{"2":{"177":1,"341":1,"458":1}}],["начальная",{"2":{"351":1,"436":1,"476":1}}],["начальный",{"2":{"351":1}}],["начальных",{"2":{"180":1,"289":1}}],["начальным",{"2":{"177":1,"261":1,"313":1,"348":1}}],["начального",{"2":{"466":1,"491":1}}],["начальной",{"2":{"180":1}}],["начальное",{"2":{"164":1}}],["начальном",{"2":{"11":1,"182":1}}],["начале",{"2":{"83":1,"152":1,"157":1,"214":1,"273":1,"284":1,"327":1,"341":1,"369":1}}],["начала",{"2":{"22":1,"61":1,"169":1,"240":1,"299":1,"327":1,"369":1,"415":1,"444":1,"447":1,"450":1,"492":1,"541":1,"590":1}}],["начинаниях",{"2":{"380":1}}],["начинает",{"2":{"345":1,"369":1}}],["начинаете",{"2":{"305":1}}],["начинается",{"2":{"172":1,"187":2,"194":1,"375":1,"410":1,"453":1}}],["начинаем",{"2":{"187":1,"228":1,"234":1,"311":1,"315":1,"316":1,"338":1,"363":1,"368":2,"453":1}}],["начинаешь",{"2":{"98":1}}],["начинающим",{"2":{"542":1}}],["начинающий",{"2":{"541":1}}],["начинающих",{"2":{"430":1,"502":1}}],["начинающихся",{"2":{"187":1}}],["начинающему",{"2":{"491":1}}],["начинающемся",{"2":{"187":1}}],["начинающуюся",{"2":{"161":1}}],["начинаются",{"2":{"171":2,"409":1}}],["начинаться",{"2":{"171":1}}],["начинать",{"2":{"138":1,"156":1}}],["начиная",{"2":{"67":2,"153":1,"159":1,"180":2,"192":1,"194":1,"234":1,"273":1,"311":1,"351":1,"385":1,"423":1}}],["найдете",{"2":{"183":1}}],["найдем",{"2":{"104":1,"198":1}}],["найдена",{"2":{"219":1}}],["найдены",{"2":{"217":1}}],["найденные",{"2":{"27":1,"152":1}}],["найдено",{"2":{"10":2,"319":1}}],["найти",{"2":{"62":1,"132":1,"134":1,"136":1,"149":1,"150":1,"152":1,"167":1,"168":1,"178":2,"181":1,"182":1,"183":1,"184":1,"194":1,"238":1,"240":1,"242":1,"246":1,"247":1,"248":1,"251":1,"252":1,"298":1,"299":1,"317":1,"318":1,"319":1,"338":1,"348":1,"349":1,"364":1,"368":1,"398":1,"413":3,"416":1,"420":1,"443":1,"446":1,"448":1,"452":1,"453":1,"454":1,"455":1,"460":1,"461":1}}],["наполнения",{"2":{"540":1,"542":1}}],["наподобие",{"2":{"477":1}}],["напомним",{"2":{"232":1,"309":1}}],["напишем",{"2":{"167":1,"449":1,"450":1}}],["напишите",{"2":{"96":1,"444":1}}],["написали",{"2":{"149":1}}],["написана",{"2":{"515":1}}],["написание",{"2":{"444":1,"479":1}}],["написанию",{"2":{"183":1,"452":1}}],["написании",{"2":{"174":1,"491":1,"492":1}}],["написания",{"2":{"124":1,"155":1,"159":3,"168":1,"261":1,"291":1,"452":1,"462":1}}],["написаны",{"2":{"158":1,"448":1}}],["написано",{"2":{"156":1}}],["написанным",{"2":{"479":1}}],["написанный",{"2":{"10":1,"124":1,"156":1}}],["написанную",{"2":{"56":1}}],["написан",{"2":{"50":1,"98":1,"444":1}}],["написать",{"2":{"12":1,"26":1,"41":1,"96":2,"98":1,"113":1,"124":2,"187":1,"199":1,"329":1,"368":1,"445":1,"448":1,"491":1,"492":1}}],["напротив",{"2":{"413":1}}],["направленные",{"2":{"287":1}}],["направленную",{"2":{"276":1}}],["направление",{"2":{"453":1}}],["направлением",{"0":{"243":1}}],["направлению",{"2":{"271":1}}],["направлении",{"2":{"246":2,"272":1,"360":1}}],["направлений",{"2":{"246":1}}],["направляя",{"2":{"272":1}}],["направляют",{"2":{"239":1}}],["направляться",{"2":{"147":1}}],["направлять",{"2":{"142":1,"143":1,"145":1}}],["направляется",{"2":{"123":1}}],["направляет",{"2":{"123":1,"224":1,"225":1}}],["направить",{"2":{"241":1,"331":1}}],["напрямую",{"2":{"23":1,"56":1,"96":1,"157":1,"160":1,"187":1,"196":1,"212":1,"217":1,"226":1,"286":1,"299":1,"313":1,"318":1,"319":1,"327":1,"328":1,"331":1,"407":1,"429":1,"448":1,"474":1,"484":1,"485":1,"492":1}}],["например",{"2":{"3":1,"12":1,"16":1,"18":1,"22":1,"41":2,"47":2,"48":1,"59":1,"95":1,"96":1,"100":1,"107":1,"112":1,"123":6,"124":6,"125":1,"131":2,"132":1,"133":1,"135":1,"142":4,"143":1,"144":1,"151":1,"156":3,"160":4,"162":1,"163":1,"165":1,"167":1,"168":1,"170":1,"171":4,"172":1,"173":1,"174":1,"180":2,"181":1,"183":2,"184":1,"187":1,"188":1,"194":2,"198":1,"199":1,"202":1,"209":3,"213":1,"215":2,"221":1,"223":1,"224":1,"225":1,"226":3,"227":1,"228":1,"231":1,"232":1,"234":1,"240":2,"242":1,"244":1,"246":1,"247":1,"253":2,"254":2,"257":1,"258":2,"260":2,"263":1,"264":2,"268":3,"269":2,"272":1,"273":1,"274":1,"278":1,"281":1,"291":3,"295":1,"296":1,"297":1,"298":2,"308":1,"309":1,"317":1,"319":2,"327":1,"328":1,"329":1,"332":1,"340":2,"341":1,"352":1,"353":1,"358":3,"360":2,"362":4,"363":1,"394":2,"404":1,"410":1,"414":1,"416":2,"418":1,"419":2,"420":1,"421":4,"422":1,"426":1,"430":2,"433":3,"435":1,"436":3,"437":2,"438":2,"444":1,"445":1,"448":2,"449":2,"450":1,"454":1,"459":1,"463":1,"466":2,"467":1,"476":4,"477":2,"478":5,"482":4,"483":2,"484":1,"485":1,"488":1,"492":2,"538":2,"582":1}}],["намекает",{"2":{"369":1}}],["намекнули",{"2":{"235":1}}],["намеренная",{"0":{"449":1}}],["намеренное",{"2":{"284":1}}],["намеренно",{"2":{"185":1,"280":1}}],["намереваясь",{"2":{"283":1}}],["намечены",{"2":{"36":1}}],["намеченные",{"2":{"10":1}}],["нами",{"2":{"142":1,"186":1,"234":1,"268":1,"404":1,"418":1,"467":1}}],["намного",{"2":{"13":1,"23":1,"47":1,"56":1,"85":1,"96":1,"399":1,"430":1,"478":1,"482":2,"485":1,"490":2,"491":1,"492":3}}],["нам",{"2":{"7":1,"39":2,"41":1,"50":1,"51":1,"128":1,"141":2,"142":1,"143":5,"145":4,"148":1,"149":1,"155":1,"156":1,"157":1,"158":2,"160":3,"167":1,"168":2,"179":1,"180":3,"183":1,"184":1,"185":1,"186":2,"187":5,"195":1,"218":1,"219":2,"221":1,"226":2,"227":1,"228":1,"229":1,"234":3,"239":1,"248":1,"259":1,"260":1,"291":1,"298":1,"299":1,"300":2,"309":2,"310":1,"311":2,"313":1,"314":5,"316":2,"318":1,"324":1,"325":1,"327":1,"328":2,"330":1,"331":1,"334":1,"344":2,"345":1,"352":1,"353":1,"354":3,"356":1,"357":1,"360":2,"361":1,"362":1,"363":1,"368":3,"370":1,"371":1,"400":1,"407":4,"410":3,"413":1,"414":2,"416":2,"417":1,"418":2,"422":1,"445":3,"446":3,"447":3,"448":1,"450":3,"451":4,"452":2,"453":3,"455":3,"456":1,"457":1,"462":1,"463":1}}],["нашли",{"2":{"375":1}}],["нашу",{"2":{"183":1,"186":1,"187":1,"198":1,"261":1,"276":1,"299":1,"307":2,"308":1,"338":1,"363":1,"369":1,"463":1,"466":1}}],["наша",{"2":{"179":1,"188":2,"233":1,"308":1,"363":1,"369":1,"402":1,"453":1}}],["нашей",{"2":{"179":1,"180":1,"183":1,"187":4,"188":1,"223":1,"227":1,"234":3,"300":1,"308":1,"310":1,"311":1,"325":1,"333":2,"336":1,"345":1,"369":1,"415":2,"419":1,"457":2,"458":1,"462":1,"466":1}}],["наше",{"2":{"127":1,"142":1,"143":2,"145":3,"157":2,"177":1,"180":1,"181":1,"184":1,"188":2,"189":1,"232":1,"298":1,"301":1,"302":1,"309":1,"313":1,"330":1,"331":1,"332":1,"337":1,"340":1,"348":1,"368":1,"370":1,"371":1,"397":1,"401":1,"402":1,"404":1,"416":1,"420":1,"421":1,"422":1,"423":1}}],["нашего",{"0":{"188":1,"366":1,"369":1,"370":1},"2":{"14":1,"27":1,"82":1,"113":1,"127":2,"139":2,"141":2,"142":1,"143":2,"144":1,"145":3,"147":1,"148":1,"153":4,"154":1,"157":1,"158":2,"159":5,"160":1,"177":1,"179":3,"180":5,"181":2,"182":2,"183":1,"186":1,"187":4,"218":1,"261":1,"293":3,"298":4,"299":1,"300":1,"304":1,"308":1,"311":1,"312":1,"319":1,"320":1,"321":2,"322":1,"323":1,"329":1,"330":2,"333":1,"338":1,"344":1,"346":3,"356":2,"357":1,"360":1,"364":1,"368":2,"369":4,"371":1,"401":3,"403":1,"407":3,"410":1,"413":1,"415":3,"416":1,"418":3,"419":2,"420":1,"421":4,"422":1,"442":2,"447":2,"451":1,"452":2,"453":2,"454":1,"455":3,"456":1,"462":1,"463":3,"468":1}}],["нашему",{"2":{"142":1,"145":1,"149":1,"180":1,"186":1,"188":1,"189":1,"220":1,"261":1,"296":1,"299":1,"314":1,"318":1,"326":1,"331":1,"356":1,"365":1,"404":2,"405":1,"416":1,"419":1,"422":1,"458":1}}],["нашем",{"2":{"5":1,"11":1,"47":1,"88":1,"131":1,"142":1,"144":1,"145":1,"160":2,"167":1,"179":1,"183":1,"187":1,"188":1,"218":1,"223":1,"231":1,"234":1,"240":1,"261":1,"293":1,"298":1,"299":1,"308":1,"309":1,"310":1,"313":1,"314":2,"315":1,"316":1,"320":1,"321":1,"327":1,"329":1,"330":1,"331":1,"333":1,"338":1,"339":1,"353":1,"354":3,"357":1,"368":8,"369":4,"401":2,"402":1,"406":2,"407":1,"414":1,"416":3,"419":1,"422":3,"444":1,"445":2,"447":2,"451":1,"453":1,"455":3,"465":1,"468":1}}],["наш",{"0":{"446":1},"2":{"4":1,"9":1,"12":1,"39":1,"41":2,"109":1,"113":1,"121":1,"144":2,"149":1,"150":1,"151":1,"158":1,"159":1,"160":2,"178":1,"179":1,"180":2,"181":1,"183":3,"184":1,"185":2,"186":4,"187":4,"188":3,"189":1,"234":1,"261":1,"298":3,"299":2,"301":1,"308":2,"309":1,"311":1,"313":1,"314":2,"316":1,"318":1,"320":1,"321":3,"328":2,"329":2,"336":1,"337":2,"340":1,"341":1,"342":2,"343":1,"348":1,"351":1,"354":1,"357":1,"362":1,"367":1,"368":4,"369":3,"396":1,"400":1,"402":1,"404":2,"406":2,"407":2,"410":2,"415":1,"416":2,"419":1,"420":1,"421":2,"446":2,"447":5,"449":1,"452":3,"455":2,"463":1,"466":1}}],["наших",{"2":{"153":1,"158":1,"179":1,"183":3,"186":1,"187":1,"212":1,"227":1,"231":1,"234":1,"240":1,"244":1,"293":1,"318":1,"319":1,"320":1,"321":1,"323":1,"329":1,"330":2,"331":1,"363":1,"369":1,"408":1,"410":2,"414":1,"416":2,"422":2,"423":1,"442":1,"445":1,"447":1,"448":1,"450":1,"452":2,"453":2,"454":3,"455":1,"458":1,"463":1,"469":1}}],["нашими",{"2":{"187":1,"316":1,"323":1,"330":1,"401":1,"402":1,"404":1}}],["нашим",{"2":{"53":1,"132":1,"147":1,"157":1,"179":1,"180":1,"187":1,"227":1,"261":1,"312":1,"313":1,"331":1,"336":1,"348":1,"368":2,"370":1,"410":2,"415":1,"442":1,"453":1}}],["наши",{"0":{"0":1},"2":{"7":1,"145":1,"150":1,"151":2,"158":2,"159":1,"160":2,"177":1,"180":1,"181":1,"188":1,"195":1,"291":1,"304":1,"309":1,"310":1,"316":1,"325":1,"348":1,"366":1,"369":1,"370":1,"401":4,"404":1,"410":1,"415":1,"419":2,"445":1,"447":1,"450":3,"451":1,"453":1}}],["надстройку",{"2":{"541":1}}],["надёжней",{"2":{"430":1}}],["наделение",{"2":{"260":1}}],["наделите",{"2":{"196":1}}],["надеюсь",{"2":{"226":1,"239":1,"291":1}}],["надежное",{"2":{"330":1,"354":1,"396":1}}],["надежного",{"2":{"313":1,"492":1}}],["надежность",{"2":{"17":1}}],["надежные",{"2":{"375":1}}],["надежных",{"2":{"348":1,"376":1,"482":1}}],["надежными",{"2":{"289":1}}],["надежный",{"2":{"123":1,"145":1}}],["надежная",{"2":{"152":1}}],["надобности",{"2":{"578":1}}],["надо",{"2":{"39":1,"41":2,"47":1,"85":1,"89":1,"95":1,"96":4,"98":2,"104":1,"114":1,"121":1,"396":1,"425":1,"438":1,"478":2,"482":3,"483":3,"491":2,"578":1}}],["над",{"0":{"195":1,"485":1},"2":{"4":1,"25":1,"100":1,"114":4,"139":1,"160":2,"178":1,"184":1,"195":1,"224":1,"249":1,"254":1,"256":1,"300":2,"334":1,"357":1,"368":2,"369":1,"371":1,"384":1,"436":1,"448":1,"466":2,"476":1,"482":1,"483":1,"492":1,"501":1}}],["насыщенные",{"2":{"399":1}}],["насыщенного",{"2":{"370":1}}],["наследуют",{"2":{"410":1}}],["наследуемая",{"2":{"195":1}}],["наследованием",{"0":{"195":1},"2":{"195":1,"483":2}}],["наследования",{"2":{"191":1,"195":3,"228":1,"474":1}}],["насколько",{"2":{"156":1,"179":1,"197":1}}],["насчет",{"2":{"23":1,"190":1,"370":1}}],["настал",{"2":{"231":1}}],["настало",{"2":{"179":1,"180":1,"298":1,"320":1,"368":1,"446":1}}],["настоятельно",{"2":{"178":1,"197":1}}],["настоящий",{"2":{"298":1}}],["настоящему",{"2":{"231":1,"291":1}}],["настоящее",{"2":{"142":2,"251":1,"264":1,"267":1,"273":1,"420":1,"422":1,"442":1}}],["настоящую",{"2":{"17":1}}],["настольная",{"2":{"298":1}}],["настольном",{"2":{"293":1}}],["настольному",{"2":{"271":1}}],["настольные",{"2":{"291":1}}],["настольных",{"2":{"263":2,"271":1,"289":1,"291":1,"298":1,"399":1}}],["настольными",{"2":{"155":1,"291":2}}],["настолько",{"2":{"145":1,"156":1,"271":1,"272":2,"319":1,"364":1,"492":1}}],["настройте",{"2":{"491":1}}],["настройку",{"2":{"368":1,"430":1,"474":2}}],["настройкой",{"2":{"368":1}}],["настройке",{"2":{"153":1,"466":1}}],["настройках",{"2":{"418":1}}],["настройками",{"2":{"261":1,"291":1}}],["настройка",{"0":{"148":1,"179":1,"366":1,"430":1,"562":1},"1":{"149":1},"2":{"128":1,"139":1,"177":1,"277":1,"291":1,"429":2,"430":1,"436":3,"466":1,"476":3,"541":1}}],["настройки",{"2":{"113":1,"404":1,"429":1,"435":1,"437":2,"456":1,"476":1,"586":1}}],["настроили",{"2":{"345":1}}],["настроить",{"2":{"11":1,"142":2,"143":1,"151":1,"429":2,"430":1,"467":1}}],["настроен",{"2":{"396":1}}],["настроена",{"2":{"151":2}}],["настроек",{"2":{"187":1,"252":1,"430":2,"474":1}}],["настраивает",{"2":{"152":1}}],["настраивается",{"2":{"125":1,"291":1}}],["настраиваемой",{"2":{"159":1}}],["настраиваемым",{"2":{"368":1}}],["настраиваемыми",{"2":{"152":1}}],["настраиваемые",{"0":{"359":1},"2":{"69":1}}],["настраиваем",{"2":{"121":1,"466":1}}],["настраивать",{"2":{"63":1,"300":1,"376":1}}],["нас",{"0":{"503":1},"2":{"3":1,"12":1,"16":1,"17":1,"29":1,"36":1,"41":1,"43":1,"48":1,"92":1,"95":1,"104":1,"106":1,"111":2,"121":1,"123":1,"130":1,"152":1,"159":1,"160":2,"174":1,"179":1,"180":1,"187":4,"195":1,"227":1,"232":1,"234":2,"248":1,"261":3,"298":1,"299":1,"306":1,"308":1,"311":1,"316":1,"329":1,"333":1,"350":1,"357":1,"359":2,"362":1,"370":1,"396":1,"408":1,"410":3,"415":1,"416":3,"447":2,"450":1,"483":1}}],["на",{"0":{"0":1,"4":1,"81":1,"111":1,"120":1,"151":1,"374":1,"393":1,"560":1},"1":{"82":1,"83":1,"561":1,"562":1},"2":{"2":2,"3":6,"4":1,"6":2,"7":1,"10":2,"11":3,"12":3,"13":2,"16":1,"17":1,"22":5,"23":3,"27":1,"33":1,"34":1,"36":2,"39":5,"40":3,"41":4,"43":1,"44":2,"47":3,"48":1,"50":1,"51":2,"56":3,"58":1,"59":1,"63":1,"70":1,"72":1,"73":2,"74":1,"76":1,"77":1,"85":1,"88":3,"89":2,"96":6,"98":3,"100":2,"104":2,"105":1,"106":1,"107":2,"108":1,"111":2,"117":1,"118":3,"120":1,"121":1,"122":6,"123":14,"124":8,"125":5,"126":3,"128":1,"130":2,"132":6,"133":2,"137":3,"138":11,"142":13,"143":4,"144":6,"145":5,"147":1,"148":3,"150":1,"151":9,"152":5,"153":2,"154":1,"155":3,"156":10,"157":8,"158":2,"159":3,"160":8,"161":1,"164":1,"165":4,"167":3,"168":6,"171":3,"174":1,"176":1,"177":2,"178":6,"179":7,"180":5,"181":3,"182":4,"183":3,"184":6,"185":3,"186":1,"187":9,"188":1,"191":3,"192":2,"194":6,"195":2,"196":5,"197":2,"198":2,"199":1,"200":1,"201":2,"202":6,"203":1,"206":1,"207":1,"209":1,"212":2,"213":1,"215":1,"217":2,"218":4,"221":2,"222":5,"223":1,"224":1,"225":3,"226":3,"227":3,"228":5,"230":1,"231":2,"232":1,"233":2,"234":2,"235":3,"237":3,"238":1,"239":4,"240":1,"241":3,"242":2,"243":1,"244":1,"246":4,"247":2,"248":3,"249":2,"252":2,"253":3,"254":1,"255":5,"256":2,"257":4,"258":4,"260":5,"261":8,"263":2,"264":1,"265":1,"266":4,"267":2,"268":3,"271":4,"272":4,"273":5,"274":1,"276":3,"277":2,"280":2,"282":1,"285":9,"287":2,"289":3,"291":7,"292":1,"293":1,"294":1,"296":3,"297":1,"298":14,"299":3,"301":2,"302":1,"303":1,"304":2,"306":4,"309":3,"311":4,"312":3,"314":1,"315":1,"316":2,"318":2,"319":12,"320":1,"321":2,"322":1,"327":17,"328":3,"329":2,"330":2,"331":2,"332":1,"333":1,"334":5,"335":1,"336":3,"337":3,"338":3,"339":2,"340":6,"342":1,"343":1,"344":1,"345":2,"346":1,"347":1,"349":1,"350":1,"351":2,"352":3,"353":5,"354":2,"357":3,"358":2,"359":3,"360":2,"362":3,"363":3,"364":3,"365":1,"368":7,"369":6,"370":1,"371":1,"372":1,"377":3,"378":2,"380":1,"383":1,"387":1,"390":1,"391":1,"394":2,"396":12,"397":3,"398":1,"399":6,"400":1,"402":6,"404":5,"407":10,"408":1,"409":1,"410":3,"414":1,"415":5,"416":6,"417":2,"418":3,"419":5,"420":8,"421":5,"422":6,"425":4,"426":2,"429":3,"430":5,"435":1,"436":8,"437":3,"442":3,"444":7,"445":3,"446":2,"447":4,"448":5,"449":1,"450":3,"451":1,"453":6,"454":1,"455":2,"456":2,"458":2,"459":2,"460":1,"462":4,"464":2,"465":2,"466":5,"467":4,"468":1,"469":1,"474":7,"476":6,"477":1,"478":11,"479":8,"482":11,"483":15,"484":1,"485":2,"487":3,"490":5,"491":23,"492":16,"501":1,"503":1,"506":2,"508":3,"531":1,"538":2,"542":3,"543":1,"545":2,"550":1,"551":1,"552":1,"553":1,"554":1,"561":2,"563":1,"570":2,"573":3,"575":1,"579":1,"580":1,"582":1,"583":1,"587":2,"588":1,"590":1}}],["пдд",{"2":{"491":1}}],["псевдопараллельное",{"2":{"483":1}}],["псевдонима",{"2":{"184":1}}],["псевдонимов",{"2":{"184":1}}],["псевдонимы",{"2":{"180":1}}],["псевдоним",{"2":{"142":1,"184":1,"186":1}}],["пк",{"2":{"430":2}}],["птицы",{"2":{"239":1}}],["пытается",{"2":{"299":1,"430":1,"454":1}}],["пытаются",{"2":{"227":1,"483":1}}],["пытаться",{"2":{"195":1,"196":1,"200":1,"483":1}}],["пытался",{"2":{"96":1}}],["пятого",{"2":{"72":1}}],["пятью",{"2":{"257":1}}],["пять",{"2":{"36":1,"96":1,"165":1}}],["песочницы",{"2":{"430":1}}],["песочнице",{"2":{"429":1}}],["пешеходного",{"2":{"291":1}}],["пейджера",{"2":{"260":2}}],["пейджером",{"2":{"260":1}}],["пейджер",{"0":{"260":1},"1":{"261":1},"2":{"260":2}}],["печатает",{"2":{"329":1}}],["печати",{"2":{"294":1}}],["печать",{"2":{"248":2}}],["печатными",{"2":{"237":1}}],["печально",{"2":{"139":1}}],["петлю",{"2":{"142":1}}],["пет",{"2":{"63":1,"396":1}}],["периода",{"2":{"278":1}}],["периодическая",{"2":{"184":1}}],["периодически",{"2":{"177":1}}],["первые",{"2":{"327":1,"451":1}}],["первых",{"2":{"325":1,"399":1,"491":1,"502":1}}],["первым",{"2":{"272":1,"341":1,"368":1,"370":1}}],["первый",{"2":{"111":1,"117":1,"142":1,"160":1,"178":1,"188":1,"198":1,"211":1,"228":1,"234":1,"268":1,"272":1,"282":1,"345":1,"404":1,"407":2,"409":1,"448":2,"463":1,"508":2}}],["первичный",{"2":{"241":1}}],["первую",{"2":{"234":1,"327":1,"331":1,"369":1}}],["первая",{"2":{"130":1,"273":1,"277":1,"298":1,"327":1,"420":1,"463":2}}],["первоначальной",{"2":{"282":1}}],["первоначальном",{"2":{"162":1}}],["первоначальный",{"2":{"273":1,"351":1,"415":1}}],["первое",{"2":{"187":1,"254":1,"292":1,"420":1}}],["первоклассные",{"2":{"155":1}}],["первой",{"2":{"17":1,"191":1,"261":1,"273":1,"327":3,"404":1,"407":1,"422":1,"448":1,"462":1,"463":1,"491":1,"492":1}}],["первого",{"2":{"11":1,"17":1,"157":1,"217":1,"237":1,"240":1,"250":1,"266":1,"271":1,"315":1,"318":1,"327":1,"358":1,"448":1,"452":1,"453":2,"478":1}}],["первом",{"2":{"6":1,"7":1,"11":1,"17":2,"22":1,"47":1,"77":1,"123":2,"187":2,"212":1,"226":1,"235":1,"451":1,"492":1}}],["персонализация",{"0":{"104":1}}],["перспективе",{"2":{"74":1,"202":1}}],["переопределение",{"2":{"591":1}}],["переопределить",{"2":{"506":1}}],["перерастает",{"2":{"477":1}}],["перерасти",{"2":{"156":1}}],["переутомлению",{"2":{"442":1}}],["переупаковывать",{"2":{"291":1}}],["переиспользуемые",{"2":{"542":1}}],["переиспользовать",{"2":{"436":1}}],["переименуем",{"2":{"109":1}}],["переименовывая",{"2":{"486":1}}],["переименовываются",{"2":{"426":1}}],["переименовываем",{"2":{"105":1}}],["переименован",{"2":{"83":1}}],["переадресация",{"2":{"418":1}}],["перезаписывание",{"2":{"535":1}}],["перезаписываем",{"2":{"457":1}}],["перезаписью",{"2":{"404":1}}],["перезагружается",{"2":{"407":1}}],["перезагрузка",{"2":{"573":1}}],["перезагрузку",{"2":{"396":1}}],["перезагрузкой",{"2":{"180":1,"399":1}}],["перечисленные",{"2":{"444":1}}],["перечисленных",{"2":{"421":1}}],["перечислены",{"2":{"410":1}}],["перечислим",{"2":{"399":1}}],["перечень",{"2":{"286":1}}],["перепишите",{"2":{"348":1}}],["переписывание",{"2":{"479":1}}],["переписываете",{"2":{"478":1}}],["переписывать",{"2":{"146":1,"228":1,"457":1}}],["переписать",{"2":{"315":1}}],["переписанный",{"2":{"127":1}}],["переполнение",{"2":{"261":1}}],["перегружена",{"2":{"397":1}}],["перегруженности",{"2":{"257":1}}],["перегруженных",{"2":{"247":1}}],["перегружать",{"2":{"247":1,"268":1}}],["перебирать",{"2":{"187":1}}],["перевыполняет",{"2":{"448":1}}],["перевычеслены",{"2":{"187":1}}],["перевода",{"2":{"437":1,"575":1}}],["перевод",{"0":{"374":1},"2":{"491":1,"575":1}}],["переводчика",{"2":{"178":1}}],["перевешивают",{"2":{"234":1,"291":1}}],["перевести",{"2":{"73":1,"138":1}}],["перекомпоновать",{"2":{"339":1}}],["перекрывают",{"2":{"291":1}}],["перекрестного",{"2":{"125":1}}],["переключитесь",{"2":{"464":1}}],["переключения",{"2":{"253":1,"271":1}}],["переключение",{"2":{"252":1,"352":1,"515":1,"571":1,"591":3}}],["переключателя",{"2":{"571":1}}],["переключатель",{"2":{"227":1}}],["переключать",{"2":{"263":1}}],["переключаться",{"2":{"164":1,"458":1}}],["перехвачен",{"2":{"416":1}}],["перехваченные",{"2":{"228":1}}],["перехвачена",{"2":{"227":1}}],["перехватчиков",{"2":{"545":1}}],["перехватчики",{"2":{"321":1}}],["перехватить",{"2":{"359":1,"418":1}}],["перехвата",{"2":{"321":2}}],["перехвате",{"2":{"298":1}}],["перехватываем",{"2":{"339":1,"453":1}}],["перехватывает",{"2":{"229":1,"299":1}}],["перехватывается",{"2":{"227":1}}],["перехватывать",{"2":{"226":1}}],["перехватываться",{"2":{"147":1}}],["перехватывая",{"2":{"226":1,"299":1,"453":1}}],["перехвату",{"2":{"187":1}}],["переходом",{"2":{"413":1}}],["переходов",{"2":{"168":1}}],["переходят",{"2":{"271":1}}],["переходит",{"2":{"195":1,"271":1}}],["переходить",{"2":{"126":1,"351":1,"369":1}}],["переходим",{"2":{"142":1,"420":1}}],["переход",{"2":{"126":1,"137":3,"138":1,"318":1,"369":1,"411":1,"433":1,"464":1,"476":1,"485":1}}],["переходе",{"2":{"89":1,"285":1}}],["перехода",{"2":{"23":1,"168":1,"263":1,"266":1,"394":1,"400":1,"404":1,"409":1,"411":1,"506":1}}],["перешло",{"2":{"134":1}}],["перешел",{"2":{"133":1}}],["перемещения",{"2":{"294":1,"361":1,"462":1}}],["перемещая",{"2":{"486":1}}],["перемещает",{"2":{"246":1}}],["перемещается",{"2":{"187":1,"271":1}}],["перемещаться",{"2":{"260":1}}],["перемещать",{"2":{"187":1}}],["переместившись",{"2":{"464":1}}],["переместит",{"2":{"185":1}}],["переместился",{"2":{"133":1,"180":1}}],["переменной",{"2":{"96":1,"111":1,"123":1,"156":2,"157":1,"160":3,"162":2,"166":2,"168":2,"187":1,"188":1,"261":2,"308":1,"311":1,"343":2,"359":2,"368":1,"404":1,"474":2,"478":1,"482":2,"582":1}}],["переменная",{"2":{"96":1,"156":1,"157":1,"160":1,"162":3,"163":2,"187":1,"234":1,"261":1,"352":1,"359":1,"368":1,"369":2,"482":2}}],["переменным",{"2":{"160":2,"525":1}}],["переменными",{"2":{"160":1}}],["переменные",{"0":{"170":1,"525":1},"2":{"95":1,"157":1,"159":1,"160":4,"187":2,"198":1,"234":1,"313":1,"343":1,"355":1,"360":1,"363":1,"369":1,"478":1,"482":2,"506":1,"525":1,"591":1}}],["переменных",{"2":{"95":1,"96":1,"130":1,"156":1,"160":1,"168":1,"187":1,"298":1,"338":1,"474":1,"591":1}}],["переменную",{"2":{"95":1,"96":2,"156":1,"160":2,"163":1,"167":1,"187":2,"212":1,"263":1,"306":2,"307":2,"311":1,"313":1,"362":1,"363":1,"364":1,"478":2,"482":1,"531":1}}],["перелогиниваться",{"2":{"123":1}}],["перелогин",{"2":{"123":1}}],["пересобрать",{"2":{"508":1}}],["пересылает",{"2":{"492":1}}],["пересылаемый",{"2":{"123":1}}],["перестанет",{"2":{"484":1}}],["перестает",{"2":{"222":1,"478":1}}],["пересмотреть",{"2":{"308":1}}],["пересмотрите",{"2":{"143":1}}],["пересекаться",{"2":{"413":1}}],["пересекаются",{"2":{"275":1}}],["пересечении",{"2":{"260":1}}],["пересчитали",{"2":{"482":1}}],["пересчитывались",{"2":{"96":1}}],["пересчет",{"2":{"187":1}}],["пересчете",{"2":{"142":1}}],["пересчетов",{"2":{"96":1}}],["переделать",{"2":{"397":1}}],["передаст",{"2":{"420":1}}],["передадим",{"2":{"404":1}}],["переданы",{"2":{"368":1}}],["передан",{"2":{"362":1,"404":1,"410":1}}],["переданной",{"2":{"448":1}}],["переданного",{"2":{"334":1}}],["переданное",{"2":{"321":1,"453":1}}],["переданному",{"2":{"233":1}}],["переданную",{"2":{"219":1,"418":1}}],["переданные",{"2":{"328":1,"334":1}}],["переданными",{"2":{"453":1}}],["переданным",{"2":{"164":1,"424":1}}],["переданный",{"2":{"130":1}}],["передаю",{"2":{"478":1}}],["передающих",{"2":{"334":1}}],["передаются",{"2":{"339":1,"345":1,"358":2}}],["передают",{"2":{"224":1,"306":1}}],["передач",{"2":{"491":1}}],["передача",{"2":{"217":1,"218":2,"409":1,"438":1}}],["передаче",{"2":{"180":1}}],["передачи",{"2":{"160":1,"217":1,"306":1,"358":1,"360":1,"362":1,"416":1}}],["передачу",{"2":{"151":1}}],["передаваемому",{"2":{"362":1}}],["передаваемой",{"2":{"343":1}}],["передаваемое",{"2":{"334":1}}],["передаваемых",{"2":{"340":1}}],["передаваемые",{"2":{"230":1,"327":1,"418":1}}],["передавать",{"2":{"184":2,"234":1,"308":2,"309":1,"327":1,"331":1,"352":1,"358":1,"360":1,"362":1,"410":1,"421":1,"437":1,"482":1,"531":1}}],["передаваться",{"2":{"144":1,"306":1,"338":1,"364":1}}],["передавая",{"2":{"157":1,"184":1,"223":1,"226":1,"335":1,"353":1,"404":1,"437":1,"452":1}}],["передав",{"2":{"143":1,"407":1}}],["передает",{"2":{"223":1,"362":1,"415":1,"446":1}}],["передается",{"2":{"134":1,"215":1,"286":1}}],["передаем",{"2":{"127":1,"144":1,"157":1,"233":1,"234":1,"261":1,"300":1,"307":1,"311":1,"316":1,"335":1,"339":1,"343":1,"345":2,"404":2,"410":2,"420":1,"452":2,"453":3}}],["передаёт",{"2":{"123":1}}],["передать",{"2":{"47":1,"149":1,"159":1,"201":1,"223":1,"261":1,"306":2,"338":1,"357":2,"359":1,"407":2,"416":1,"453":1,"478":2,"483":1,"531":1}}],["перед",{"2":{"121":1,"156":2,"160":1,"179":1,"180":1,"198":2,"216":1,"218":1,"228":1,"234":1,"247":1,"248":1,"261":1,"264":1,"265":1,"279":1,"298":1,"330":1,"331":1,"357":1,"360":1,"404":1,"407":1,"413":1,"422":1,"426":1,"465":1,"467":1,"491":1,"541":1}}],["перейдите",{"2":{"561":1}}],["перейдем",{"2":{"89":1,"151":1,"185":1,"220":1,"240":1,"242":1,"308":1,"452":1,"465":1}}],["перейти",{"2":{"38":1,"231":1,"257":1,"322":1,"333":1,"410":1,"422":1,"545":1}}],["переехать",{"2":{"39":1}}],["перенаправить",{"2":{"420":1}}],["перенаправит",{"2":{"418":1}}],["перенаправлен",{"2":{"417":1}}],["перенаправления",{"2":{"417":2,"418":1}}],["перенаправлениях",{"2":{"416":1}}],["перенаправление",{"2":{"285":1,"420":1}}],["перенаправляющие",{"2":{"419":1}}],["перенаправляют",{"2":{"285":1}}],["перенаправляем",{"2":{"417":1}}],["перенаправляться",{"2":{"416":1}}],["перенасыщенности",{"2":{"257":1}}],["перенесенного",{"2":{"327":1}}],["перенесена",{"2":{"218":1}}],["перенести",{"2":{"104":1,"150":1}}],["переноса",{"2":{"348":1}}],["переносить",{"2":{"168":1,"399":1}}],["переносится",{"2":{"30":1,"210":1,"430":1}}],["перенос",{"0":{"151":1},"2":{"422":1}}],["переносе",{"2":{"122":1,"155":1}}],["перенять",{"2":{"26":1}}],["плевел",{"2":{"491":1}}],["плечах",{"2":{"244":1}}],["плоский",{"2":{"436":1,"476":1}}],["плоская",{"0":{"432":1},"2":{"476":1,"477":1}}],["плохая",{"2":{"478":2}}],["плохие",{"2":{"202":1,"490":1}}],["плохую",{"2":{"202":1}}],["плохой",{"2":{"199":1,"239":1,"474":1}}],["плохо",{"2":{"65":1,"96":1,"474":1,"490":1}}],["плавный",{"2":{"433":1,"476":1}}],["плавность",{"2":{"327":1}}],["плавающее",{"2":{"281":1}}],["плавающей",{"2":{"273":1}}],["плавающего",{"2":{"256":1}}],["плавающий",{"2":{"254":1}}],["платежей",{"2":{"483":1}}],["плату",{"2":{"466":1}}],["платформах",{"2":{"469":1}}],["платформа",{"2":{"298":3,"466":1}}],["платформы",{"2":{"291":1,"293":1,"296":1,"298":1,"302":1}}],["платных",{"2":{"419":1}}],["платные",{"2":{"39":1,"491":1}}],["платная",{"2":{"178":2}}],["платить",{"2":{"160":1}}],["плагине",{"2":{"364":1,"368":1}}],["плагину",{"2":{"300":1}}],["плагинами",{"2":{"429":1}}],["плагина",{"2":{"299":1,"302":1,"348":1,"360":1,"367":1,"368":3,"369":1,"404":1,"492":1,"549":1}}],["плагином",{"2":{"184":1,"365":1,"368":1}}],["плагинов",{"0":{"128":1},"2":{"126":1,"128":1,"132":1,"155":1,"159":1,"184":2,"300":1,"318":1,"335":1,"365":1,"429":1,"430":1}}],["плагин",{"0":{"300":1,"365":1},"1":{"366":1,"367":1,"368":1},"2":{"132":2,"178":1,"299":1,"300":6,"345":3,"348":1,"354":1,"365":1,"367":1,"368":4,"369":2,"371":1,"372":1,"400":1,"549":1}}],["плагины",{"2":{"113":1,"126":1,"127":1,"128":1,"137":1,"155":1,"180":1,"289":1,"365":1,"366":1,"422":1,"429":1,"478":1}}],["планшетов",{"2":{"552":1}}],["планшеты",{"2":{"291":1}}],["планирования",{"2":{"332":1,"333":1,"436":1,"476":1}}],["планирование",{"2":{"332":1}}],["планироваться",{"2":{"332":1}}],["планируется",{"2":{"64":1,"542":1}}],["планов",{"2":{"280":1}}],["планы",{"2":{"124":2}}],["план",{"0":{"71":1},"1":{"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1},"2":{"442":1,"444":2}}],["планах",{"0":{"573":1}}],["планами",{"2":{"425":1}}],["плана",{"2":{"40":1,"72":1,"333":1,"445":1}}],["плане",{"2":{"9":1,"25":1,"188":1,"474":1,"478":1,"490":1}}],["плюсы",{"2":{"436":1,"476":1,"478":1,"490":2}}],["плюсом",{"2":{"187":1}}],["плюс",{"2":{"25":1,"56":1,"89":1,"123":1,"160":1,"185":1,"339":1,"396":1,"447":1,"478":1}}],["пикселей",{"2":{"271":1}}],["пиктограмму",{"2":{"269":1}}],["пиктограмм",{"2":{"266":1}}],["пиктограммами",{"2":{"263":2}}],["пиктограммой",{"2":{"256":1}}],["пиктограммы",{"2":{"243":1,"244":1,"248":1,"254":1,"255":1}}],["письмо",{"2":{"420":2}}],["письмом",{"2":{"278":1}}],["письмами",{"2":{"286":1}}],["писем",{"2":{"255":1,"420":1}}],["писать",{"2":{"98":1,"160":1,"174":1,"184":1,"447":1,"457":1,"478":1,"482":1,"538":1}}],["писаться",{"2":{"23":1}}],["пищеварительной",{"2":{"194":1}}],["пишут",{"2":{"201":1}}],["пишутся",{"2":{"170":1,"173":1}}],["пишет",{"2":{"492":1}}],["пишете",{"2":{"198":1,"199":1}}],["пишем",{"2":{"9":1,"159":1}}],["пиши",{"0":{"201":1},"1":{"204":1,"205":1,"206":1,"207":1},"2":{"191":1,"199":1}}],["пуша",{"2":{"396":1}}],["пул",{"0":{"507":1},"1":{"508":1},"2":{"508":1,"515":1}}],["пули",{"2":{"354":1}}],["пулей",{"2":{"291":1}}],["пузырьком",{"2":{"255":1}}],["пузырьки",{"0":{"255":1}}],["пузыря",{"2":{"254":1}}],["публичным",{"2":{"422":1}}],["публичный",{"2":{"142":2,"180":1}}],["публикуются",{"2":{"503":1}}],["публикуем",{"2":{"311":1,"334":1}}],["публиковаться",{"2":{"332":1}}],["публикацию",{"2":{"467":1}}],["публикации",{"2":{"139":1,"141":1,"153":1,"154":1,"222":2,"311":1}}],["публикация",{"0":{"141":1},"1":{"142":1},"2":{"139":1,"141":1}}],["пупкина",{"2":{"123":1}}],["пупкин",{"2":{"123":1}}],["путаница",{"2":{"422":1}}],["путаницу",{"2":{"239":1,"257":1}}],["путешествии",{"2":{"179":1}}],["путешествовать",{"2":{"130":1}}],["путем",{"2":{"125":1,"146":1,"148":1,"184":1,"195":1,"228":1,"242":1,"265":1,"335":1,"368":1,"410":1,"413":1,"415":1,"416":2,"458":1}}],["путей",{"2":{"104":1,"184":1}}],["путях",{"2":{"121":1,"429":1}}],["путями",{"2":{"121":1,"143":1,"409":1}}],["путь",{"0":{"158":2},"2":{"117":1,"134":2,"141":1,"143":3,"144":2,"147":1,"148":1,"149":2,"159":1,"175":1,"239":1,"294":1,"299":1,"328":1,"360":1,"407":1,"410":1,"413":1,"462":1}}],["пути",{"2":{"83":1,"143":2,"184":2,"186":1,"264":1,"311":1,"404":1,"407":1,"409":1,"413":4,"423":1}}],["пункте",{"2":{"561":1}}],["пунктирными",{"2":{"351":1}}],["пункту",{"2":{"308":1}}],["пункт",{"2":{"198":1,"277":2}}],["пункты",{"2":{"141":1,"185":1,"296":1,"369":2,"407":1}}],["пунктов",{"2":{"29":1,"126":1,"185":1,"266":1,"407":1}}],["пунктах",{"2":{"301":1,"333":1}}],["пункта",{"2":{"4":1,"217":1}}],["пуст",{"2":{"187":1}}],["пуста",{"2":{"187":1}}],["пустого",{"2":{"541":1,"590":1}}],["пустом",{"2":{"183":1}}],["пустой",{"2":{"7":1,"219":1,"223":1,"311":1}}],["пустым",{"2":{"142":1,"321":1,"531":1}}],["пусть",{"2":{"16":1,"409":1,"483":1,"487":1}}],["пабло",{"2":{"380":1}}],["падает",{"2":{"327":1}}],["пагинации",{"2":{"260":2}}],["пагинация",{"0":{"260":1},"1":{"261":1},"2":{"260":1}}],["памятью",{"2":{"311":2}}],["память",{"2":{"198":1,"248":1}}],["памяти",{"2":{"134":1,"142":1,"198":3,"248":1,"327":1,"430":1,"457":1}}],["паттерн",{"2":{"187":1,"407":1,"474":1}}],["паттернов",{"2":{"175":1,"191":1,"376":1,"377":1,"392":1,"397":1,"423":1,"442":1}}],["паттерны",{"2":{"155":2,"181":2,"185":1,"188":2,"389":1,"397":1,"446":1,"490":1}}],["паутина",{"2":{"155":1}}],["папок",{"0":{"180":1},"2":{"145":1,"177":1,"432":1,"476":1}}],["папкоподобная",{"2":{"264":1}}],["папке",{"2":{"180":1,"183":1,"238":1,"368":1,"401":2,"420":1,"426":1,"462":3}}],["папка",{"2":{"143":1,"144":1,"148":1,"151":1,"180":4}}],["папки",{"2":{"133":1,"179":1,"183":1,"366":1,"426":2}}],["папку",{"2":{"133":1,"144":1,"151":1,"179":1,"180":1,"181":1,"182":1,"183":1,"366":1,"426":3,"447":2}}],["панацея",{"2":{"102":1}}],["панелей",{"2":{"266":1}}],["панели",{"0":{"258":1},"1":{"259":1},"2":{"31":1,"99":1,"255":1,"263":3,"266":1,"268":1,"273":1,"402":1,"407":1,"433":1,"455":1,"476":1,"561":1,"581":1}}],["панелью",{"2":{"268":1}}],["панель",{"2":{"28":1,"70":1,"145":2,"146":1,"244":1,"258":1,"271":3,"273":1,"402":1,"410":1,"436":1,"456":1}}],["палитры",{"2":{"573":1}}],["палитру",{"2":{"241":1}}],["пал",{"2":{"39":1}}],["пару",{"2":{"416":1,"430":1,"474":1,"487":1,"542":1,"575":1}}],["паролей",{"2":{"416":2,"421":1}}],["паролями",{"2":{"415":1,"416":1}}],["пароля",{"2":{"415":2,"421":1,"423":1}}],["паролю",{"0":{"415":1,"420":1},"2":{"415":1}}],["пароль",{"2":{"123":1,"416":1,"421":1,"478":1}}],["парольной",{"2":{"40":1}}],["параграфов",{"2":{"575":1}}],["параграфы",{"2":{"491":1}}],["параграфа",{"2":{"298":1}}],["параллельно",{"2":{"444":1}}],["парами",{"2":{"407":1}}],["параметром",{"2":{"341":1,"357":1,"448":1,"575":1}}],["параметров",{"2":{"179":1,"213":1,"232":1,"306":1,"334":1,"341":1,"345":1,"453":1,"535":1}}],["параметре",{"2":{"225":1}}],["параметр",{"2":{"218":1,"234":1,"341":1,"345":1,"404":1,"410":3,"448":2,"535":1,"562":1}}],["параметрам",{"2":{"424":1}}],["параметрами",{"2":{"396":1,"408":1,"413":2}}],["параметра",{"2":{"134":1,"215":1,"218":1,"223":1,"233":1,"328":1,"329":1,"335":1,"357":2,"368":1,"404":1,"409":1,"411":1,"413":1,"448":1}}],["параметры",{"2":{"113":1,"160":2,"197":1,"222":1,"365":1,"400":1,"404":1,"407":1,"410":2,"412":1,"418":1,"437":1,"542":1,"543":1,"573":1}}],["параметру",{"2":{"48":1,"233":1}}],["парадигм",{"2":{"195":1}}],["парадигму",{"2":{"155":1}}],["парадигмы",{"2":{"155":2,"195":1}}],["пара",{"2":{"11":1,"187":1}}],["паре",{"2":{"3":1}}],["пакетных",{"2":{"178":1}}],["пакетами",{"2":{"429":1}}],["пакета",{"0":{"510":1,"523":1,"527":1},"2":{"127":1,"132":1,"134":1,"153":1,"160":1,"179":2,"315":1,"357":3,"400":1,"401":1,"404":3,"442":1,"445":1,"460":1,"470":1,"474":1,"508":1}}],["пакет",{"2":{"89":3,"180":2,"224":1,"309":2,"357":1,"404":1,"430":1,"436":1,"446":2,"447":1,"484":1,"538":1,"578":1}}],["пакеты",{"2":{"5":1,"96":1,"399":1,"542":1}}],["пакетов",{"2":{"5":1,"179":2,"430":1,"447":1,"460":1,"538":1}}],["п",{"2":{"4":1,"38":1,"118":1,"256":1,"463":1,"479":1,"483":1,"501":1,"541":1}}],["поиграйте",{"2":{"491":1}}],["поизучайте",{"2":{"491":1}}],["поисковых",{"2":{"492":1}}],["поисковыми",{"2":{"291":1,"399":1}}],["поисковиков",{"2":{"492":1}}],["поисковик",{"2":{"492":1}}],["поисковиками",{"2":{"492":2}}],["поисковая",{"2":{"107":1}}],["поисковой",{"2":{"107":1}}],["поиск",{"0":{"48":1},"2":{"16":1,"17":2,"48":2,"70":1,"183":1,"244":1,"268":1,"435":1,"476":1}}],["поисках",{"2":{"335":1}}],["поискать",{"2":{"107":1,"428":1}}],["поиска",{"2":{"4":1,"29":1,"48":2,"272":2,"415":1,"433":1,"476":1}}],["побуждает",{"2":{"422":1}}],["побочным",{"2":{"306":1,"404":1}}],["побочные",{"2":{"257":1}}],["побочных",{"2":{"199":1,"363":1}}],["пошагово",{"2":{"368":1}}],["пояснить",{"2":{"228":1}}],["появятся",{"2":{"168":1}}],["появляются",{"2":{"180":1,"296":1,"327":1,"430":1}}],["появляется",{"2":{"33":1,"291":1,"369":1,"408":1,"410":1,"437":1,"568":1}}],["появлении",{"2":{"465":1,"550":1}}],["появление",{"2":{"399":2}}],["появлением",{"2":{"155":1,"399":1}}],["появления",{"2":{"180":1,"399":1,"492":1}}],["появлению",{"2":{"160":1,"453":1}}],["появившаяся",{"2":{"457":1}}],["появиться",{"2":{"179":1,"261":1,"351":1,"368":1,"446":1}}],["появится",{"2":{"125":1,"152":1,"163":1,"179":1,"183":1,"261":1,"298":1,"465":1}}],["появились",{"2":{"135":1,"155":1,"191":1,"250":1,"456":1,"478":1}}],["появился",{"2":{"126":1,"351":1,"359":1,"441":1,"478":1,"492":1}}],["появилась",{"2":{"111":1,"131":1,"226":1,"399":1,"482":1,"541":1}}],["появилось",{"2":{"62":1,"474":1,"478":1}}],["пожалуйста",{"2":{"218":1,"333":1,"415":1}}],["пожалуй",{"2":{"194":1,"291":1,"357":1,"445":1}}],["пограничная",{"2":{"483":1}}],["погрузимся",{"2":{"304":1,"312":1}}],["поговорим",{"2":{"159":1,"414":1,"463":1}}],["погуглим",{"2":{"22":1}}],["поймать",{"2":{"474":1}}],["поймете",{"2":{"196":1,"242":1,"271":1}}],["поймем",{"2":{"156":1,"237":1}}],["пойдем",{"2":{"141":1,"415":1}}],["пойдет",{"2":{"124":1,"457":1}}],["почувствовать",{"2":{"284":1}}],["почву",{"2":{"239":1}}],["почта",{"2":{"420":1}}],["почтовые",{"2":{"399":1}}],["почти",{"2":{"183":1,"199":1,"299":1,"448":1,"460":1,"483":1,"491":1}}],["почты",{"2":{"142":1,"255":1,"414":1,"420":2,"421":1,"422":1}}],["почему",{"2":{"39":1,"96":1,"138":1,"154":1,"176":2,"190":2,"236":3,"240":3,"242":1,"288":1,"301":1,"327":1,"335":1,"364":1,"453":1,"469":3,"482":1,"490":1,"491":1}}],["похудеет",{"2":{"474":1}}],["похвастаться",{"2":{"337":1}}],["похож",{"2":{"319":1}}],["похожем",{"2":{"587":1}}],["похожее",{"2":{"410":1}}],["похоже",{"2":{"217":1,"289":1,"421":1}}],["похожей",{"2":{"198":1,"330":1}}],["похожий",{"2":{"357":1}}],["похожим",{"2":{"228":1,"316":1}}],["похожи",{"2":{"88":1,"164":1,"338":1,"341":1}}],["похожие",{"2":{"4":1,"22":1,"246":1}}],["похакать",{"2":{"124":1}}],["порой",{"2":{"491":1}}],["порог",{"2":{"482":1}}],["породили",{"2":{"399":1}}],["породить",{"2":{"269":1}}],["порождал",{"2":{"363":1}}],["порождать",{"2":{"327":1}}],["порождающие",{"0":{"204":1}}],["порождают",{"2":{"202":1}}],["порождает",{"2":{"158":1}}],["порекомендовать",{"2":{"174":1}}],["пор",{"2":{"156":1,"158":1,"167":1,"168":1,"177":1,"201":1,"215":1,"231":1,"234":1,"238":1,"265":1,"268":1,"278":1,"313":1,"327":1,"351":1,"354":1,"357":1,"399":1,"407":1,"408":1,"410":2,"420":1,"458":1}}],["порядки",{"2":{"492":1}}],["порядковому",{"2":{"453":1}}],["порядковым",{"2":{"260":1}}],["порядке",{"2":{"158":1,"179":1,"180":2,"187":1,"260":1,"271":1,"293":1,"335":1,"368":1,"369":1}}],["порядка",{"2":{"158":1,"243":1,"260":1,"266":1}}],["порядку",{"2":{"141":1,"460":1}}],["порядок",{"2":{"138":1,"369":1}}],["портфолио",{"2":{"540":1,"541":1,"542":1}}],["порта",{"2":{"319":1}}],["порталов",{"2":{"142":1}}],["портал",{"2":{"123":1}}],["портрет",{"2":{"300":1}}],["портретная",{"2":{"295":1}}],["портретных",{"2":{"271":1}}],["порт",{"2":{"179":1,"345":1}}],["портом",{"2":{"125":1}}],["поработайте",{"2":{"491":2}}],["поработать",{"2":{"334":1}}],["поработаем",{"2":{"224":1,"368":1}}],["пора",{"2":{"88":1,"231":1,"351":1}}],["пофиксила",{"2":{"96":1}}],["повысит",{"2":{"489":1}}],["повысить",{"2":{"325":1,"483":1,"590":1}}],["повышая",{"2":{"434":1,"476":1}}],["повышается",{"2":{"483":1,"492":1}}],["повышает",{"2":{"70":1,"346":1,"436":1,"466":1,"477":1}}],["повышению",{"2":{"389":1}}],["повышение",{"2":{"323":1,"502":1}}],["повышения",{"2":{"226":1,"302":1,"325":1,"399":1}}],["повсюду",{"2":{"271":1}}],["повседневном",{"2":{"247":1}}],["повсеместно",{"2":{"231":1}}],["поводу",{"2":{"254":1,"258":1}}],["повлиять",{"2":{"347":1}}],["повлияют",{"2":{"339":1}}],["повлияет",{"2":{"246":1,"327":1,"358":1,"407":1}}],["повлияли",{"2":{"133":1}}],["повторение",{"0":{"242":1},"2":{"242":4}}],["повторения",{"2":{"211":1,"242":2,"243":1,"341":1,"363":1}}],["повторяемому",{"2":{"350":1}}],["повторяется",{"2":{"261":1,"444":1}}],["повторяет",{"2":{"242":1}}],["повторяющегося",{"2":{"482":1}}],["повторяющееся",{"2":{"242":1,"356":1}}],["повторяющихся",{"2":{"191":1}}],["повторяйтесь",{"2":{"231":1}}],["повторяйся",{"0":{"199":1}}],["повторять",{"2":{"184":1,"308":1}}],["повторяться",{"2":{"181":1,"184":1,"191":1,"308":1}}],["повторно",{"2":{"160":1,"372":1,"402":1}}],["повторного",{"2":{"160":1,"192":1,"202":1,"215":1,"298":1,"361":1,"363":1,"455":1}}],["поверх",{"2":{"156":2,"178":1,"255":1,"337":1,"414":1,"415":1,"466":1}}],["поведенческие",{"0":{"205":1}}],["поведенческих",{"2":{"74":1}}],["поведением",{"2":{"155":1}}],["поведение",{"2":{"74":1,"112":1,"155":1,"161":1,"180":1,"187":1,"196":1,"209":1,"242":1,"482":1}}],["поведения",{"2":{"73":1,"260":1,"272":1,"279":1,"327":1}}],["покрывается",{"2":{"455":1}}],["покрытии",{"2":{"455":3}}],["покрытия",{"2":{"455":2}}],["покрытие",{"0":{"455":1},"2":{"454":1,"455":1}}],["покидают",{"2":{"421":1}}],["покидать",{"2":{"353":1}}],["покупку",{"2":{"278":1}}],["покупках",{"2":{"282":1}}],["покупка",{"2":{"278":1}}],["покупке",{"2":{"153":1,"282":1}}],["покупки",{"2":{"142":1,"277":2,"378":1}}],["покупать",{"2":{"142":1}}],["покупателей",{"2":{"70":1,"492":1}}],["покупателя",{"2":{"70":1}}],["покупаем",{"2":{"142":1}}],["покупок",{"2":{"70":1,"277":1}}],["показывали",{"2":{"491":1,"492":1}}],["показываем",{"2":{"420":1}}],["показывает",{"2":{"126":1,"163":1,"254":1,"327":1,"336":1,"457":1,"478":1}}],["показывается",{"2":{"30":2,"31":1,"83":1}}],["показывания",{"2":{"396":1}}],["показывать",{"2":{"196":1,"254":1,"438":1,"482":1,"492":1}}],["показываться",{"2":{"164":1,"474":1}}],["показываются",{"2":{"438":1}}],["показывают",{"2":{"164":1,"266":1}}],["показывающее",{"2":{"322":1}}],["показывающие",{"2":{"297":1}}],["показывающих",{"2":{"264":1}}],["показывающим",{"2":{"111":1}}],["показывающая",{"2":{"111":1,"255":1}}],["показывая",{"2":{"164":1,"185":1,"243":1,"252":1}}],["показ",{"2":{"70":1,"483":1}}],["показав",{"2":{"327":1}}],["показателей",{"0":{"301":1}}],["показать",{"0":{"244":1},"2":{"255":1,"258":1,"268":1,"462":1}}],["показаться",{"2":{"26":1,"145":1,"159":3,"180":1,"198":1,"228":1,"234":1,"289":1,"291":1,"327":1,"453":1}}],["показана",{"2":{"453":1}}],["показанном",{"2":{"369":1}}],["показанное",{"2":{"272":1}}],["показаны",{"2":{"260":1,"362":1}}],["показано",{"2":{"142":1,"160":1,"224":1,"233":1,"305":1,"306":1,"307":1,"311":1,"313":1,"333":1,"359":1,"390":1,"415":1,"531":1}}],["показа",{"2":{"47":1,"164":2,"426":1}}],["показе",{"2":{"30":1,"298":1}}],["пока",{"2":{"25":1,"34":1,"41":1,"56":1,"78":1,"85":1,"92":1,"105":1,"106":2,"113":1,"114":1,"142":1,"155":1,"156":1,"159":1,"168":2,"184":1,"194":1,"198":1,"201":1,"213":1,"215":1,"229":1,"232":1,"234":1,"260":1,"265":1,"278":1,"316":1,"327":1,"335":1,"351":1,"354":1,"357":1,"368":2,"402":1,"404":1,"407":1,"414":1,"420":1,"463":1}}],["поняли",{"2":{"179":1,"298":1}}],["поняв",{"2":{"168":1}}],["понятен",{"2":{"272":1,"345":1}}],["понять",{"2":{"169":1,"188":1,"209":1,"235":1,"249":1,"271":1,"299":1,"314":1,"315":1,"334":1,"352":1,"416":1,"438":1,"447":1,"478":1,"491":1}}],["понятий",{"2":{"158":1,"303":1}}],["понятийном",{"2":{"73":1}}],["понятиями",{"2":{"246":1,"360":1}}],["понятия",{"2":{"156":1,"158":1,"175":1,"199":1,"222":1,"309":1,"382":1,"392":1,"424":1,"468":1,"483":1}}],["понятии",{"2":{"156":1}}],["понятие",{"2":{"123":1,"157":1,"199":1,"362":1,"456":1,"466":1,"482":1}}],["понятно",{"2":{"334":1,"360":1,"541":1}}],["понятное",{"2":{"328":1}}],["понятной",{"2":{"256":1}}],["понятна",{"2":{"271":1,"312":1}}],["понятные",{"2":{"429":1}}],["понятными",{"2":{"260":1}}],["понятным",{"2":{"138":1,"201":1,"325":1}}],["понятный",{"2":{"68":1,"73":1,"267":1,"306":1}}],["понятную",{"2":{"106":1,"490":1}}],["понятней",{"2":{"83":1}}],["понадобятся",{"2":{"187":1,"226":1,"290":1}}],["понадобится",{"2":{"36":1,"78":1,"113":1,"114":1,"157":1,"187":2,"218":1,"368":1,"369":1,"429":1}}],["понадобиться",{"2":{"34":1}}],["поначалу",{"2":{"159":1}}],["понимаете",{"2":{"410":1,"466":1}}],["понимается",{"2":{"200":1}}],["понимаются",{"2":{"250":1,"426":1}}],["понимают",{"2":{"188":1,"199":1,"258":1}}],["понимании",{"2":{"304":1,"319":1}}],["пониманием",{"2":{"272":1}}],["понимание",{"0":{"159":1},"2":{"191":1,"239":1,"244":1,"306":1,"375":1,"491":1}}],["понимания",{"2":{"65":1,"73":1,"96":1,"139":1,"153":1,"191":1,"224":1,"232":1,"234":1,"239":1,"268":1,"305":1,"313":1,"343":1,"377":1,"391":1}}],["понимать",{"2":{"123":1,"156":1,"202":1,"416":1,"446":1,"491":1}}],["понравиться",{"2":{"96":1}}],["попробуем",{"2":{"465":1}}],["попробует",{"2":{"428":1}}],["попробуйте",{"2":{"96":1,"428":1,"430":1,"491":2}}],["попросите",{"2":{"242":1}}],["попап",{"2":{"474":1}}],["попадают",{"2":{"455":1}}],["попадает",{"2":{"258":1,"420":1}}],["попадет",{"2":{"184":1,"246":1}}],["попасть",{"2":{"89":1,"308":1}}],["попытаемся",{"2":{"465":1}}],["попытается",{"2":{"242":1,"451":1}}],["попытаться",{"2":{"149":1,"299":2,"455":1}}],["попытался",{"2":{"62":1}}],["попытка",{"2":{"138":1,"227":1,"445":1}}],["популистов",{"2":{"96":1}}],["популизма",{"2":{"96":1}}],["популизмом",{"2":{"96":1}}],["попули́зм",{"2":{"96":1}}],["популярен",{"2":{"145":1,"148":1,"157":1,"221":1,"252":1,"458":1,"466":1}}],["популяризация",{"2":{"138":2}}],["популяризацией",{"2":{"96":1}}],["популярна",{"2":{"285":1,"474":1,"575":1}}],["популярная",{"2":{"96":1}}],["популярной",{"2":{"458":1}}],["популярности",{"2":{"430":1}}],["популярность",{"2":{"174":1}}],["популярном",{"2":{"182":1}}],["популярного",{"2":{"181":1}}],["популярными",{"2":{"289":1,"422":1,"573":1}}],["популярным",{"2":{"266":2,"444":1,"492":1}}],["популярные",{"2":{"263":1,"429":1,"542":1}}],["популярны",{"2":{"257":1,"266":1}}],["популярных",{"2":{"155":1,"178":1,"457":1}}],["популярный",{"2":{"124":1,"178":2,"396":1}}],["попутный",{"2":{"65":1}}],["попутно",{"2":{"63":1,"155":1}}],["познавательные",{"2":{"468":1}}],["познакомившись",{"2":{"237":1}}],["познакомились",{"2":{"153":1,"287":1,"325":1,"346":1}}],["познакомился",{"2":{"62":1}}],["познакомимся",{"2":{"139":1,"155":1,"180":1,"237":1,"289":1,"348":2,"423":1}}],["позитивного",{"2":{"449":1}}],["позиционируют",{"2":{"541":1}}],["позицией",{"2":{"422":1}}],["позиции",{"2":{"263":1}}],["позора",{"0":{"284":1}}],["поздно",{"2":{"246":1,"484":1}}],["позаботится",{"2":{"160":1,"180":1,"187":1,"315":1}}],["позже",{"2":{"88":1,"114":1,"142":2,"157":1,"168":1,"178":1,"183":1,"195":1,"199":1,"298":2,"318":1,"334":1,"335":1,"343":1,"352":1,"360":1,"362":1,"363":1,"368":1,"402":1,"404":1,"446":1,"463":1,"492":1}}],["позволили",{"2":{"399":1}}],["позволить",{"2":{"59":1,"217":1}}],["позволит",{"2":{"11":1,"47":1,"89":1,"180":1,"191":1,"198":1,"235":1,"263":1,"360":1,"375":1,"446":1,"447":1}}],["позволял",{"2":{"363":1}}],["позволят",{"2":{"325":1,"357":1,"466":1}}],["позволяют",{"2":{"252":1,"291":1,"340":1,"359":1,"406":1,"413":1,"425":1,"429":1,"436":1,"476":1}}],["позволяющую",{"2":{"404":1}}],["позволяющего",{"2":{"457":1}}],["позволяющему",{"2":{"251":1}}],["позволяющее",{"2":{"209":1}}],["позволяющая",{"2":{"228":1,"346":1,"423":1}}],["позволяющим",{"2":{"420":1}}],["позволяющими",{"2":{"287":1}}],["позволяющих",{"2":{"346":1,"416":1}}],["позволяющие",{"2":{"155":1,"198":1,"287":1,"422":1,"466":1,"541":1}}],["позволяющий",{"2":{"125":1,"135":1,"146":1,"260":1,"298":1,"319":1,"365":1}}],["позволяйте",{"2":{"248":2}}],["позволяя",{"2":{"184":1,"232":1,"394":1}}],["позволяет",{"2":{"34":1,"73":1,"74":1,"100":1,"114":1,"132":1,"142":2,"146":1,"156":1,"159":1,"168":1,"180":3,"194":1,"202":1,"219":1,"223":2,"234":1,"258":1,"260":2,"264":1,"265":1,"267":1,"313":1,"327":1,"328":1,"333":1,"342":1,"357":1,"359":1,"396":1,"400":1,"407":1,"410":3,"413":1,"430":1,"436":2,"447":1,"452":1,"458":2,"463":1,"466":1,"477":1,"478":1,"482":2,"483":2,"492":2,"531":1,"540":1,"545":1,"547":1,"587":1,"588":1}}],["поэкспериментируйте",{"2":{"491":1}}],["поэкспериментировать",{"2":{"51":1}}],["поэтапного",{"2":{"302":1}}],["поэтапно",{"2":{"61":1}}],["поэтому",{"2":{"13":1,"23":1,"44":1,"65":2,"92":1,"96":1,"104":1,"107":1,"117":1,"122":1,"131":2,"142":1,"145":1,"151":1,"152":1,"156":1,"157":1,"158":1,"160":2,"168":2,"174":1,"175":1,"179":1,"181":1,"182":1,"183":2,"188":1,"193":1,"195":1,"198":1,"211":1,"218":2,"222":1,"226":1,"240":2,"248":1,"256":1,"258":2,"265":1,"271":1,"293":1,"298":2,"299":1,"308":1,"309":1,"319":3,"321":1,"326":1,"327":4,"329":2,"330":1,"332":1,"334":1,"337":1,"338":2,"340":1,"345":1,"350":1,"358":1,"369":1,"408":1,"413":1,"416":2,"417":1,"421":1,"422":3,"430":2,"446":1,"447":1,"449":2,"450":1,"453":2,"454":1,"455":1,"460":1,"462":1,"466":1,"474":1,"478":1,"482":1,"483":2,"492":1,"531":1}}],["помечает",{"2":{"465":1}}],["помечаем",{"2":{"261":1}}],["помеченный",{"2":{"369":1}}],["помеченных",{"2":{"187":1}}],["помечена",{"2":{"233":1}}],["поместили",{"2":{"299":1,"369":1}}],["поместим",{"2":{"180":1,"447":1}}],["поместите",{"2":{"181":1,"182":1,"465":1}}],["поместит",{"2":{"159":1,"179":1}}],["поместить",{"2":{"147":1,"299":1,"436":1,"477":1}}],["помещен",{"2":{"454":1}}],["помещены",{"2":{"144":1,"463":1}}],["помещаться",{"2":{"426":1}}],["помещаем",{"2":{"407":1}}],["помещается",{"2":{"362":1,"582":1}}],["помещаются",{"2":{"180":1,"277":1,"426":1}}],["поменять",{"2":{"40":1,"41":1,"538":1}}],["помните",{"2":{"218":1,"319":1,"448":1,"465":1}}],["помнить",{"2":{"142":1,"158":1,"159":1,"183":1,"198":1,"338":1,"339":1,"358":1,"415":2,"416":1,"438":1,"450":1,"466":1,"478":1}}],["помним",{"2":{"41":1}}],["помимо",{"2":{"126":1,"180":1,"222":1,"231":1,"258":1,"261":1,"266":1,"282":1,"327":1,"375":1,"416":1,"442":1}}],["помогает",{"2":{"168":1,"198":1,"267":1,"334":1,"353":1,"491":1,"541":1}}],["помогают",{"2":{"158":1,"490":1,"491":1}}],["помогающая",{"2":{"156":1}}],["помогут",{"2":{"155":1,"169":1,"244":1,"288":1,"299":1}}],["поможет",{"2":{"126":1,"191":2,"226":1,"239":1,"375":2,"444":2,"491":1}}],["помочь",{"2":{"125":1,"176":1,"235":1,"254":1,"491":1}}],["помощь",{"2":{"297":1,"359":1,"362":1,"450":1}}],["помощью",{"0":{"152":1,"301":1,"309":1,"314":1,"337":1,"348":1,"350":1,"360":1,"364":1,"385":1,"389":1,"458":1},"1":{"310":1,"311":1,"315":1,"316":1,"317":1,"318":1,"338":1,"339":1,"340":1,"341":1,"342":1,"343":1,"349":1,"350":1,"351":2,"352":2,"353":2,"354":2,"355":1,"356":1,"357":1,"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1,"365":1,"366":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1},"2":{"35":2,"98":2,"117":1,"124":1,"139":1,"145":1,"151":1,"152":2,"153":1,"159":2,"160":1,"167":2,"168":1,"177":1,"179":2,"180":1,"182":2,"183":1,"185":2,"187":7,"188":1,"190":1,"195":1,"198":1,"220":1,"223":2,"226":2,"231":3,"233":2,"234":1,"235":1,"237":1,"240":1,"252":1,"253":1,"254":1,"256":1,"257":2,"266":1,"271":2,"289":1,"291":4,"292":1,"298":1,"299":1,"300":1,"302":2,"304":2,"308":1,"309":1,"311":1,"313":1,"314":2,"315":2,"318":1,"319":2,"320":1,"321":2,"323":1,"325":1,"327":1,"329":2,"335":1,"337":1,"338":1,"340":1,"341":1,"343":2,"345":3,"348":3,"350":1,"351":1,"352":2,"356":1,"357":3,"358":2,"359":1,"360":2,"362":2,"365":1,"367":2,"368":2,"369":2,"372":1,"375":1,"389":1,"391":1,"397":1,"399":1,"400":2,"401":1,"402":1,"406":1,"407":2,"410":2,"414":2,"416":1,"418":1,"419":1,"420":1,"421":2,"422":2,"423":1,"425":1,"430":1,"442":2,"444":1,"447":1,"448":2,"450":1,"451":1,"452":1,"453":3,"456":3,"462":1,"463":3,"465":2,"467":1,"478":1,"520":1,"542":1,"543":1,"545":1,"547":1,"553":2,"572":1}}],["помощников",{"2":{"239":1}}],["помощник",{"2":{"98":1,"179":2}}],["помощи",{"2":{"79":1,"178":1}}],["посещении",{"2":{"422":1}}],["послано",{"2":{"453":1}}],["послойное",{"2":{"327":1}}],["после",{"2":{"39":1,"58":1,"70":1,"77":1,"85":1,"127":1,"128":1,"132":1,"138":1,"143":1,"144":1,"153":1,"164":1,"167":1,"179":1,"185":1,"186":1,"187":1,"188":1,"207":1,"211":1,"217":1,"219":1,"223":2,"228":1,"229":1,"232":3,"258":1,"268":1,"275":1,"277":1,"278":1,"286":1,"297":1,"298":2,"299":2,"300":1,"301":1,"313":2,"314":1,"327":3,"328":1,"329":1,"334":1,"335":1,"339":1,"344":2,"345":2,"351":1,"353":1,"356":2,"359":1,"360":1,"368":1,"369":2,"370":1,"394":1,"396":2,"400":1,"401":1,"404":3,"414":1,"417":2,"421":1,"422":1,"425":1,"442":1,"444":1,"446":2,"447":1,"448":2,"451":2,"456":1,"457":1,"459":1,"462":5,"463":2,"466":1,"474":1,"478":1,"483":1,"492":3,"568":1,"579":1,"590":1}}],["последовательный",{"2":{"260":1}}],["последовательным",{"0":{"242":1},"2":{"360":1}}],["последовательную",{"2":{"234":1}}],["последовательном",{"2":{"260":1}}],["последовательного",{"2":{"257":1,"327":3}}],["последовательности",{"2":{"243":1,"248":1,"353":1,"436":1,"476":1}}],["последовательно",{"2":{"232":1,"233":1,"247":1,"319":1,"327":1}}],["последовательной",{"2":{"174":1}}],["последующим",{"2":{"448":1}}],["последующих",{"2":{"212":2,"282":1}}],["последующая",{"2":{"401":1}}],["последующей",{"2":{"421":1}}],["последующего",{"2":{"23":1,"289":1,"334":1,"538":1}}],["последующему",{"2":{"152":1}}],["последующем",{"2":{"17":1,"298":1}}],["последствия",{"2":{"202":1}}],["последнем",{"2":{"408":1,"483":1}}],["последнего",{"2":{"345":1}}],["последнее",{"2":{"254":1,"339":1}}],["последней",{"2":{"159":1,"194":1}}],["последняя",{"2":{"155":1,"375":1,"460":1,"467":1}}],["последний",{"2":{"217":1,"249":1,"298":1,"402":1,"453":1,"460":1,"466":1}}],["последним",{"2":{"192":1,"234":1,"334":1,"369":1}}],["последними",{"2":{"89":1}}],["последних",{"2":{"151":1,"181":1,"396":1}}],["последние",{"2":{"50":1,"67":1,"250":1,"474":1,"575":1}}],["последнюю",{"2":{"25":1,"178":1}}],["посадочная",{"2":{"257":1}}],["посадочной",{"2":{"257":1}}],["посвященный",{"2":{"244":1}}],["посвящены",{"2":{"187":1,"202":1}}],["посвящена",{"2":{"177":1,"207":1,"327":1,"389":1}}],["поскольку",{"2":{"142":1,"143":2,"145":1,"156":1,"157":2,"160":1,"168":1,"169":1,"177":1,"183":2,"187":3,"188":2,"196":1,"198":1,"217":1,"222":1,"226":1,"227":3,"228":1,"229":1,"231":1,"232":1,"234":1,"238":1,"239":1,"246":1,"252":1,"257":2,"260":1,"261":2,"268":1,"299":1,"300":1,"306":1,"308":1,"309":1,"311":1,"313":2,"315":1,"316":1,"319":3,"320":1,"321":2,"327":2,"330":1,"331":1,"336":1,"337":1,"339":1,"340":1,"345":2,"357":1,"369":2,"402":1,"407":1,"410":2,"413":2,"415":1,"419":2,"420":1,"422":2,"444":3,"445":1,"448":1,"451":1,"453":1,"455":1,"456":1,"462":1,"463":1,"465":1,"466":1,"468":1}}],["посылать",{"2":{"138":1}}],["посредником",{"2":{"125":1}}],["посредством",{"2":{"40":1}}],["поступившие",{"2":{"467":1}}],["поступления",{"2":{"12":1}}],["пострадать",{"2":{"291":1}}],["построим",{"2":{"314":1,"333":1}}],["построить",{"2":{"83":1,"156":1,"181":1,"188":2,"325":1,"375":1}}],["построчно",{"2":{"223":1,"225":1,"227":1}}],["построено",{"2":{"188":1,"466":1}}],["построен",{"2":{"156":1,"158":1,"185":1}}],["построенные",{"2":{"156":1,"414":1,"466":1,"478":1}}],["построены",{"2":{"143":1,"156":1}}],["построению",{"2":{"348":1,"375":1}}],["построение",{"2":{"67":1}}],["построения",{"2":{"39":1,"156":3,"230":1,"542":1,"570":1}}],["постов",{"2":{"273":1}}],["постоянный",{"2":{"298":1}}],["постоянных",{"2":{"248":1}}],["постоянными",{"2":{"337":1}}],["постоянным",{"2":{"123":1}}],["постоянной",{"2":{"325":1,"346":1}}],["постоянного",{"2":{"298":1,"323":1}}],["постоянно",{"2":{"123":1,"181":1,"356":1,"457":1,"468":1}}],["постсервисное",{"2":{"239":1}}],["постановка",{"2":{"462":1,"463":1}}],["поставки",{"2":{"461":1}}],["поставляется",{"2":{"301":1}}],["поставляемых",{"2":{"177":1}}],["поставлен",{"2":{"462":1}}],["поставлены",{"2":{"224":1}}],["поставленных",{"2":{"75":1}}],["поставщиков",{"2":{"138":1}}],["поставив",{"2":{"124":1}}],["поставить",{"2":{"121":1,"124":1,"430":1,"465":1,"491":1}}],["поставили",{"2":{"85":1}}],["постараемся",{"2":{"23":1}}],["постепенной",{"2":{"303":1}}],["постепенно",{"2":{"70":1,"155":1,"156":1,"289":1,"375":1}}],["постепенное",{"2":{"67":1,"291":1}}],["посмотрели",{"2":{"323":1}}],["посмотреть",{"2":{"16":1,"118":2,"148":1,"156":1,"179":1,"298":1,"380":1,"407":2,"421":1,"429":1,"430":1,"491":1,"492":1,"521":2,"532":2,"542":1}}],["посмотрим",{"2":{"150":1,"234":1,"249":1,"292":1,"306":2,"307":1,"315":2,"327":1,"335":2,"343":1,"359":1,"405":1,"406":1,"409":1,"416":1}}],["посмотрите",{"2":{"22":1,"178":1,"233":1,"238":1,"290":1,"305":1,"326":1,"349":1,"362":1,"398":1,"430":1,"443":1,"491":1}}],["потратит",{"2":{"447":1}}],["потратьте",{"2":{"430":1,"487":1}}],["потребуются",{"2":{"445":1}}],["потребует",{"2":{"38":1,"156":1}}],["потребуется",{"2":{"12":1,"178":1,"184":1,"187":1,"232":1,"397":1,"402":1,"416":1,"448":1,"508":1}}],["потребительском",{"2":{"237":1}}],["потребностей",{"2":{"235":1,"304":1,"455":1}}],["потребностями",{"2":{"180":1,"187":1}}],["потребностях",{"2":{"145":1}}],["потребляют",{"2":{"232":1}}],["потери",{"2":{"428":1}}],["потеряете",{"2":{"421":1}}],["потеряло",{"2":{"249":1}}],["потерять",{"2":{"123":1}}],["потенциал",{"2":{"399":1,"465":2}}],["потенциальной",{"2":{"434":1,"476":1}}],["потенциально",{"2":{"327":1,"436":1,"476":1}}],["потоки",{"2":{"483":3,"508":1}}],["потокам",{"2":{"483":1}}],["потоками",{"0":{"304":1,"388":1},"1":{"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1},"2":{"213":1,"225":1,"289":1,"298":1,"332":2,"352":1,"362":1,"388":1,"483":1}}],["потоках",{"2":{"327":1}}],["потока",{"0":{"352":1},"2":{"225":1,"232":2,"233":1,"234":1,"306":1,"416":1,"483":2}}],["потоке",{"2":{"199":1,"232":1,"299":1,"319":1,"327":2,"482":1,"483":1}}],["поток",{"2":{"156":1,"201":1,"232":2,"249":1,"416":1,"474":1,"483":6}}],["потоком",{"2":{"134":1,"159":1,"160":1,"207":1,"220":1,"304":1,"305":1,"311":1,"318":1,"323":1,"407":1,"482":1}}],["потоков",{"2":{"11":1,"73":1,"483":2}}],["поточнее",{"2":{"98":1}}],["потомок",{"2":{"478":1}}],["потомком",{"2":{"478":1}}],["потом",{"2":{"22":1,"26":1,"36":1,"39":1,"40":1,"63":1,"65":1,"108":1,"242":1,"299":1,"478":2,"492":2,"538":1}}],["потому",{"2":{"3":1,"17":1,"48":1,"104":1,"105":1,"123":1,"184":1,"211":1,"233":1,"242":1,"345":1,"396":1,"410":1,"478":1,"483":1,"492":1}}],["по",{"0":{"48":1,"72":1,"415":1,"420":1,"571":1},"2":{"11":1,"12":1,"13":3,"14":1,"16":1,"17":3,"22":2,"26":2,"41":1,"47":2,"48":4,"67":2,"70":2,"74":1,"89":2,"96":2,"98":1,"112":1,"114":2,"118":1,"121":1,"123":4,"124":3,"125":3,"130":2,"131":4,"132":1,"136":1,"141":2,"142":2,"143":1,"144":1,"145":2,"148":1,"149":1,"150":1,"151":1,"152":5,"153":2,"155":4,"156":3,"157":1,"158":1,"160":3,"165":1,"167":1,"175":2,"177":3,"178":2,"179":2,"180":2,"182":1,"183":2,"184":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":2,"194":2,"195":1,"196":2,"197":1,"198":1,"200":1,"202":1,"203":1,"215":2,"217":1,"218":3,"219":4,"220":1,"222":3,"223":2,"227":1,"232":2,"234":2,"235":1,"238":1,"243":1,"246":1,"248":1,"251":2,"254":2,"256":1,"258":2,"260":4,"261":1,"262":1,"266":1,"268":1,"269":1,"271":2,"272":1,"275":1,"277":1,"290":1,"291":4,"292":1,"294":1,"296":1,"298":1,"300":1,"302":1,"304":1,"306":3,"307":1,"308":3,"313":2,"318":5,"319":3,"325":1,"327":4,"331":1,"332":1,"333":1,"338":1,"339":2,"341":1,"345":4,"347":1,"348":1,"351":2,"352":3,"354":1,"357":4,"358":3,"359":1,"360":2,"362":9,"363":1,"364":1,"367":1,"368":4,"369":6,"370":3,"372":1,"377":1,"379":1,"393":1,"396":2,"398":1,"399":4,"400":3,"401":1,"404":1,"407":4,"409":1,"410":3,"413":5,"415":2,"416":3,"419":1,"420":1,"421":2,"422":5,"423":1,"425":1,"426":4,"427":1,"429":2,"430":2,"434":1,"436":4,"442":2,"443":2,"444":1,"447":2,"451":1,"453":1,"457":3,"458":1,"460":1,"463":1,"465":1,"466":2,"474":2,"476":3,"477":1,"478":6,"479":1,"483":4,"489":1,"490":1,"491":8,"492":8,"502":1,"506":1,"508":1,"515":2,"538":1,"545":1,"547":1,"552":1,"561":1,"562":1,"575":1,"577":1,"578":1,"579":1}}],["полиморфизмом",{"2":{"483":1}}],["политической",{"2":{"96":1}}],["политиков",{"2":{"96":1}}],["политика",{"2":{"96":1,"123":1}}],["политиками",{"2":{"59":1}}],["политики",{"2":{"59":2}}],["политик",{"2":{"59":1,"445":1}}],["полтора",{"2":{"478":1}}],["полагаясь",{"2":{"410":1}}],["полагаться",{"2":{"152":1,"420":1}}],["полос",{"2":{"421":1}}],["полосой",{"2":{"327":1}}],["полоса",{"2":{"261":1}}],["полосу",{"2":{"258":1}}],["поломке",{"2":{"131":1}}],["положено",{"2":{"458":1}}],["положение",{"2":{"127":1,"226":1,"264":1}}],["положить",{"2":{"426":1}}],["положительное",{"2":{"446":1}}],["положительного",{"2":{"70":1,"287":1}}],["положительный",{"2":{"239":1}}],["положительные",{"2":{"137":1,"237":1,"413":1}}],["половину",{"2":{"96":1,"327":1}}],["полгода",{"2":{"89":1}}],["пользуется",{"2":{"478":1}}],["пользу",{"0":{"377":1},"2":{"288":1,"377":1}}],["польза",{"2":{"65":1}}],["пользоваться",{"2":{"98":1,"233":1,"478":1,"482":1,"490":1,"578":1}}],["пользователем",{"2":{"187":1,"239":1,"267":1,"268":1,"281":1,"282":1,"320":1,"352":1,"357":1,"363":1,"408":1,"416":1,"420":1,"442":1,"482":1,"483":1,"591":1}}],["пользователей",{"2":{"47":1,"59":2,"155":1,"178":1,"199":1,"240":1,"242":1,"276":1,"283":1,"291":2,"311":1,"370":1,"414":2,"415":5,"416":2,"419":1,"421":2,"422":1,"424":2,"435":1,"444":1,"476":1,"479":1,"483":1,"492":2,"515":1}}],["пользователи",{"2":{"123":1,"178":1,"242":1,"257":1,"258":1,"272":2,"279":1,"302":1,"415":1}}],["пользователю",{"2":{"73":1,"123":1,"146":1,"240":1,"242":1,"244":1,"246":1,"247":2,"249":1,"251":1,"252":2,"253":1,"254":2,"257":2,"258":2,"260":3,"262":1,"263":1,"264":1,"265":2,"266":1,"267":1,"269":1,"273":1,"279":1,"280":1,"287":1,"291":1,"298":2,"319":1,"353":1,"357":1,"396":1,"408":1,"415":1,"416":1,"417":1,"419":1,"420":2,"421":2,"446":1,"465":1,"482":1,"508":1}}],["пользователями",{"2":{"250":1,"287":1,"590":1}}],["пользователям",{"2":{"79":1,"123":1,"178":1,"267":1,"272":1,"453":1}}],["пользователя",{"0":{"415":1},"2":{"47":1,"67":1,"113":1,"123":7,"187":1,"232":1,"237":1,"239":2,"240":1,"241":2,"242":2,"247":2,"248":3,"249":4,"251":1,"253":1,"255":2,"256":3,"257":1,"258":4,"260":1,"268":1,"269":1,"275":1,"276":2,"278":1,"279":2,"281":1,"284":1,"285":2,"286":1,"287":1,"291":3,"298":3,"299":1,"319":2,"327":1,"353":1,"354":1,"369":1,"396":1,"399":2,"415":3,"416":2,"418":2,"420":4,"421":5,"422":9,"423":1,"436":1,"437":2,"453":1,"477":1,"478":2,"492":3,"501":1}}],["пользовательской",{"0":{"353":1},"2":{"272":1}}],["пользовательского",{"0":{"240":1,"245":1,"348":1,"351":1,"385":1},"1":{"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"349":1,"350":1,"351":1,"352":1,"353":1,"354":1,"355":1,"356":1,"357":1,"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1,"365":1,"366":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1},"2":{"131":1,"159":2,"166":1,"185":1,"187":1,"195":1,"196":1,"198":1,"220":2,"228":2,"229":1,"232":1,"237":2,"239":2,"240":5,"241":1,"244":3,"246":1,"253":3,"268":1,"273":1,"274":1,"291":1,"294":1,"308":2,"331":1,"338":1,"350":1,"354":1,"362":1,"363":1,"392":2,"399":1,"400":1,"402":1,"433":1,"435":1,"456":1,"476":2}}],["пользовательские",{"2":{"348":3,"352":1,"399":1,"435":1,"436":1,"476":2}}],["пользовательским",{"2":{"192":1,"239":1,"369":1}}],["пользовательский",{"2":{"181":1,"187":1,"233":1,"244":1,"274":2,"287":1,"298":3,"299":1,"327":1,"408":1,"492":1,"588":1}}],["пользовательских",{"2":{"156":2,"179":1,"189":1,"231":1,"239":1,"240":2,"359":1,"375":1,"385":1,"410":1}}],["пользовательская",{"2":{"73":1}}],["пользователь",{"2":{"11":1,"123":6,"166":1,"168":1,"185":2,"187":1,"237":1,"246":1,"247":1,"248":2,"249":4,"254":1,"258":1,"260":2,"261":1,"272":1,"277":1,"278":2,"279":2,"280":2,"282":1,"283":2,"284":1,"285":1,"286":1,"291":2,"296":1,"297":1,"298":4,"299":1,"327":1,"343":1,"352":1,"353":1,"354":1,"367":1,"410":1,"415":1,"416":2,"417":1,"420":4,"421":1,"422":1,"435":1,"465":1,"474":1,"476":1,"478":1,"482":2,"538":1,"542":1,"568":1}}],["пользования",{"2":{"41":1}}],["полутора",{"2":{"576":1}}],["полупрозрачным",{"2":{"368":1}}],["полуготовые",{"2":{"62":1}}],["получены",{"2":{"343":1,"410":1}}],["полученном",{"2":{"345":1}}],["полученное",{"2":{"328":1}}],["полученный",{"2":{"419":1}}],["полученными",{"2":{"345":1}}],["полученных",{"2":{"255":1}}],["полученные",{"2":{"223":1,"329":1,"334":1,"340":1,"342":1,"345":1,"397":1,"416":1,"424":1}}],["полученная",{"2":{"132":1}}],["получению",{"2":{"222":1,"319":1}}],["получения",{"2":{"130":1,"135":1,"160":1,"187":1,"210":1,"218":1,"232":1,"251":1,"308":1,"321":1,"343":1,"354":1,"368":2,"457":1,"508":1}}],["получении",{"2":{"123":1,"335":1}}],["получение",{"0":{"337":1,"508":1},"1":{"338":1,"339":1,"340":1,"341":1,"342":1,"343":1},"2":{"79":1,"141":1,"151":1,"413":1,"508":1}}],["получила",{"2":{"234":1}}],["получилось",{"2":{"179":1}}],["получил",{"2":{"160":1,"255":1}}],["получили",{"2":{"143":1,"199":1,"345":1,"364":1,"399":1,"419":1}}],["получившуюся",{"2":{"309":1}}],["получив",{"2":{"144":2,"183":1,"219":1,"330":1,"416":1,"422":1}}],["получим",{"2":{"100":1,"185":1,"299":1,"348":1,"402":1}}],["получите",{"2":{"237":1,"351":1,"448":1,"465":1}}],["получит",{"2":{"162":1,"234":1,"291":1}}],["получить",{"0":{"377":1},"2":{"73":1,"96":1,"100":1,"123":1,"137":1,"153":1,"160":3,"187":1,"220":1,"226":1,"234":1,"244":1,"268":1,"301":1,"319":2,"327":1,"340":1,"362":1,"394":1,"417":1,"418":1,"424":1,"425":1,"448":1,"452":1,"455":1,"492":1,"575":1}}],["получится",{"2":{"26":1,"96":1,"213":1,"462":1,"491":1}}],["получай",{"2":{"422":1}}],["получат",{"2":{"377":1}}],["получателе",{"2":{"360":1}}],["получателей",{"2":{"224":1}}],["получатель",{"2":{"345":1}}],["получателя",{"2":{"225":3,"418":1}}],["получаться",{"2":{"70":1}}],["получать",{"2":{"11":1,"118":1,"124":1,"276":2,"291":3,"315":1,"332":1,"340":1,"343":1,"345":1,"357":1,"362":1,"399":1,"453":1,"491":1,"492":1}}],["получаем",{"2":{"107":1,"121":1,"131":1,"187":1,"227":1,"234":1,"261":1,"321":1,"334":1,"360":1,"399":1,"416":1,"422":1,"453":1,"466":1}}],["получаете",{"2":{"327":1,"425":1}}],["получается",{"2":{"17":1,"160":1,"196":1,"234":1,"237":1,"396":1,"426":1,"474":1,"483":1,"492":4,"538":1}}],["получает",{"2":{"3":1,"123":1,"125":1,"142":1,"227":1,"228":1,"232":1,"234":4,"311":1,"315":2,"319":1,"328":2,"329":1,"345":1,"356":1,"357":1,"368":1,"369":1,"407":1,"409":1,"410":1,"413":1,"421":1,"446":1,"448":1,"492":1}}],["получают",{"2":{"96":1,"306":2}}],["получая",{"2":{"11":1,"218":1,"454":1}}],["полем",{"2":{"187":1,"225":1}}],["полезную",{"2":{"335":1}}],["полезная",{"2":{"465":1}}],["полезна",{"2":{"293":1,"324":1}}],["полезные",{"0":{"471":1},"1":{"472":1,"473":1,"474":1},"2":{"430":1,"436":1,"476":1,"483":1,"491":1,"573":1}}],["полезный",{"2":{"244":1,"357":1}}],["полезны",{"2":{"228":1,"230":1,"239":1,"256":1,"327":1,"376":1,"394":1,"479":1,"492":1}}],["полезным",{"2":{"188":1,"233":1,"234":1,"404":1,"433":1,"476":1}}],["полезных",{"2":{"182":1,"293":1,"430":1}}],["полезного",{"2":{"339":1,"430":1}}],["полезной",{"2":{"333":1,"343":1,"396":1,"416":2}}],["полезность",{"2":{"249":1,"479":1}}],["полезное",{"2":{"177":1,"578":1}}],["полезно",{"2":{"3":1,"4":1,"22":1,"95":1,"106":1,"153":1,"226":1,"233":1,"305":1,"420":1,"463":1,"486":1}}],["полезен",{"2":{"142":1,"212":1,"222":1,"224":1,"232":1,"313":1,"399":1,"491":1,"492":1}}],["поле",{"2":{"47":1,"48":2,"160":2,"165":1,"187":1,"300":1,"328":1,"339":1,"345":1,"404":2,"407":1,"416":2,"420":3,"453":1,"478":1,"482":1}}],["полей",{"2":{"44":1,"47":2,"48":1,"157":1,"241":1,"293":1,"296":1,"339":1,"416":1}}],["полях",{"2":{"48":1}}],["полям",{"0":{"48":1},"2":{"293":1,"313":1}}],["полями",{"2":{"17":1,"159":1,"160":1,"187":1,"293":1,"335":1,"339":2,"417":1}}],["поля",{"2":{"16":1,"17":1,"18":1,"44":1,"47":2,"48":1,"157":1,"160":3,"219":1,"225":1,"251":1,"269":1,"296":4,"314":1,"328":1,"339":2,"404":1,"410":1,"417":1,"482":1,"508":1}}],["полна",{"2":{"239":1}}],["полную",{"2":{"145":1,"184":1,"444":1}}],["полные",{"2":{"184":1}}],["полным",{"2":{"145":1,"207":1,"305":1,"308":1,"333":1,"413":1}}],["полный",{"2":{"136":1,"167":1,"202":1,"238":1,"251":1,"298":1,"348":1,"368":1,"404":1,"408":1,"413":3,"448":1,"452":1,"453":1,"460":1,"478":1}}],["полноты",{"2":{"387":1}}],["полноэкранном",{"2":{"294":1}}],["полного",{"2":{"294":1,"318":1,"322":1,"338":1}}],["полно",{"2":{"124":1,"490":1,"546":1}}],["полному",{"2":{"48":1,"187":1}}],["полное",{"2":{"47":1,"100":1,"142":1,"282":1,"287":1,"291":1,"294":1,"345":1}}],["полностью",{"2":{"26":1,"126":1,"134":1,"156":1,"160":1,"164":1,"181":1,"237":1,"265":1,"271":1,"301":1,"327":1,"345":1,"399":1,"442":1,"445":1,"522":1,"590":1}}],["полноценную",{"2":{"538":1}}],["полноценного",{"2":{"226":1}}],["полноценное",{"2":{"124":1}}],["полноценной",{"2":{"124":1}}],["полноценных",{"2":{"435":1,"476":1}}],["полноценным",{"2":{"67":1}}],["полноценный",{"2":{"12":1,"350":1}}],["полноценная",{"2":{"12":1,"319":1}}],["полней",{"2":{"4":1}}],["подтвердили",{"2":{"453":1}}],["подтверждающих",{"2":{"444":1}}],["подтверждать",{"2":{"422":1}}],["подтверждается",{"2":{"22":1,"152":1}}],["подтвержден",{"2":{"420":1}}],["подтверждение",{"0":{"284":1}}],["подтверждения",{"2":{"248":1,"265":1,"277":1,"284":1,"420":1}}],["подтверждении",{"2":{"142":1}}],["поделился",{"2":{"430":1}}],["поделиться",{"2":{"273":1,"291":1,"352":2,"408":1,"438":1}}],["подмаршрутов",{"2":{"408":1}}],["подмаршруты",{"2":{"408":1,"410":1}}],["подмена",{"0":{"283":1}}],["подниматься",{"2":{"360":1}}],["поднимают",{"2":{"306":1}}],["поднабор",{"2":{"260":1}}],["подгружается",{"2":{"492":1}}],["подгруппа",{"2":{"268":2}}],["подгруппе",{"2":{"260":1}}],["подготовиться",{"2":{"304":1}}],["подготовились",{"2":{"184":1}}],["подготовим",{"2":{"177":1}}],["подготовлены",{"2":{"168":1,"180":1}}],["подготовки",{"2":{"141":1,"303":1,"417":1,"491":1}}],["подготовка",{"2":{"65":1}}],["подводит",{"2":{"385":1}}],["подвохом",{"0":{"276":1},"2":{"276":1}}],["подвижные",{"2":{"228":1}}],["подведут",{"2":{"242":1}}],["подведение",{"0":{"153":1,"175":1,"189":1,"235":1,"287":1,"302":1,"323":1,"346":1,"371":1,"423":1,"468":1}}],["подвесить",{"2":{"233":1}}],["подвергнуть",{"2":{"188":1}}],["подумайте",{"2":{"453":1}}],["подумаем",{"2":{"351":1}}],["подумав",{"2":{"188":1}}],["подумать",{"2":{"4":1,"258":1,"275":1}}],["подпапкой",{"2":{"366":1}}],["подпапка",{"2":{"143":1}}],["подписи",{"2":{"416":3}}],["подпись",{"2":{"416":1}}],["подписанных",{"2":{"311":1}}],["подписанным",{"2":{"278":1}}],["подписок",{"2":{"278":1}}],["подписки",{"2":{"276":1,"278":1,"311":1}}],["подписчиков",{"2":{"222":1}}],["подписывает",{"2":{"309":1}}],["подписываться",{"2":{"309":1}}],["подписываются",{"2":{"222":1}}],["подписывания",{"2":{"123":1}}],["поддиректории",{"2":{"426":1,"436":1}}],["поддиректориями",{"2":{"396":1}}],["подделки",{"2":{"416":1}}],["поддержании",{"2":{"436":1,"476":1}}],["поддерживоемость",{"2":{"434":1}}],["поддерживаются",{"2":{"474":1}}],["поддерживают",{"2":{"291":1,"571":1,"591":1}}],["поддерживающих",{"2":{"137":1,"422":1}}],["поддерживаемость",{"2":{"433":1,"476":2,"490":1}}],["поддерживаемый",{"2":{"314":1}}],["поддерживаемых",{"2":{"251":1,"296":1,"416":1}}],["поддерживает",{"2":{"195":1,"337":1,"522":1}}],["поддерживается",{"2":{"89":1,"159":1,"160":2,"363":1,"428":1,"481":1,"588":1}}],["поддерживайте",{"2":{"248":1}}],["поддерживая",{"2":{"166":1}}],["поддерживаться",{"2":{"478":1,"484":1}}],["поддерживать",{"2":{"74":1,"132":1,"196":1,"226":1,"327":1,"367":1,"466":1,"483":1}}],["поддержкой",{"2":{"429":1,"478":1,"483":1}}],["поддержки",{"2":{"278":1,"313":1,"420":1,"474":2,"491":1,"506":1,"575":1}}],["поддержку",{"2":{"96":1,"178":1,"196":1}}],["поддержка",{"0":{"79":1},"2":{"72":1,"79":1,"89":2,"239":2,"318":3,"478":2}}],["поддается",{"2":{"200":1,"492":1}}],["поддавайтесь",{"2":{"195":1}}],["поддомена",{"2":{"152":1}}],["поддомен",{"2":{"142":2,"143":1}}],["поддомены",{"2":{"142":3,"149":1,"152":1,"425":1}}],["поддоменов",{"2":{"142":2,"154":1}}],["подарила",{"2":{"492":1}}],["подарочные",{"2":{"4":1}}],["подавляющее",{"2":{"413":1}}],["подавление",{"2":{"257":1}}],["подает",{"2":{"358":1}}],["податлив",{"2":{"337":1}}],["подальше",{"2":{"105":1}}],["подчиняется",{"2":{"407":1}}],["подчинение",{"2":{"2":1}}],["подчеркнуть",{"2":{"198":1}}],["подчеркивающим",{"2":{"253":1}}],["подчеркивания",{"2":{"170":1}}],["подчеркивании",{"2":{"101":1}}],["подчеркивает",{"2":{"156":1}}],["подразумевается",{"2":{"239":1,"492":1,"541":1}}],["подразумевает",{"2":{"156":1,"181":1,"194":1,"442":1,"457":1}}],["подразумеваю",{"2":{"96":1}}],["подробней",{"2":{"587":1}}],["подробнее",{"2":{"123":1,"142":1,"166":1,"207":1,"213":1,"414":1,"416":1,"429":1,"513":1}}],["подробны",{"2":{"468":1}}],["подробные",{"2":{"407":1}}],["подробный",{"2":{"301":1}}],["подробную",{"2":{"134":1,"182":1,"246":1,"247":1}}],["подробности",{"2":{"422":1,"438":1}}],["подробностями",{"2":{"407":1}}],["подробностей",{"2":{"202":1}}],["подробному",{"2":{"354":1}}],["подробное",{"2":{"300":1}}],["подробной",{"2":{"135":1}}],["подробно",{"2":{"126":1,"127":1,"131":1,"159":2,"160":1,"179":1,"220":1,"228":1,"229":1,"289":1,"319":1,"323":1,"348":1,"352":1,"359":1,"362":1,"364":1,"369":1,"371":1,"399":1,"413":1,"426":1,"561":1}}],["подробная",{"2":{"51":1,"82":1,"125":1}}],["подзадачи",{"2":{"70":1}}],["подключить",{"2":{"404":1,"425":1,"520":1}}],["подключена",{"2":{"537":1}}],["подключено",{"2":{"515":1}}],["подключении",{"2":{"422":1,"513":1}}],["подключения",{"2":{"341":1,"365":1,"422":1,"436":1,"466":1,"481":2,"531":1,"542":1,"570":1}}],["подключение",{"0":{"520":1,"524":1,"530":1},"2":{"41":1,"121":1,"422":2,"511":1,"524":1,"528":1,"538":3,"577":1}}],["подключены",{"2":{"302":1}}],["подключенными",{"2":{"436":1}}],["подключенных",{"2":{"142":1}}],["подключенный",{"2":{"142":1}}],["подключаются",{"2":{"426":1,"525":1}}],["подключаемые",{"2":{"422":1,"571":1}}],["подключаемый",{"2":{"365":1}}],["подключаем",{"2":{"127":1,"145":1}}],["подключаться",{"2":{"515":1}}],["подключать",{"2":{"12":1,"96":1,"426":1,"478":1,"481":1,"484":2,"578":1}}],["подскажите",{"0":{"470":1}}],["подсказку",{"2":{"298":2}}],["подсказкой",{"2":{"254":1}}],["подсказка",{"0":{"298":1},"2":{"254":1}}],["подсказками",{"2":{"107":1}}],["подсказки",{"0":{"254":1},"2":{"254":1,"298":1}}],["подсказок",{"2":{"242":1}}],["подсказать",{"2":{"98":1}}],["подстановочные",{"2":{"463":1}}],["подсоединение",{"2":{"430":1}}],["подсоединяться",{"2":{"40":1}}],["подсчет",{"2":{"352":1}}],["подсегмент",{"2":{"142":1}}],["подсвечивать",{"2":{"112":1}}],["подсветкой",{"2":{"89":1}}],["подсистему",{"2":{"3":1,"74":1}}],["подсистем",{"2":{"3":1,"194":1,"231":1,"311":1}}],["подсистемы",{"0":{"4":1},"2":{"2":2,"3":1,"4":1,"7":1,"34":3,"41":2,"194":1}}],["подобие",{"2":{"483":1}}],["подобранных",{"2":{"430":1}}],["подобная",{"2":{"285":1}}],["подобную",{"2":{"180":1,"322":1}}],["подобной",{"2":{"407":1}}],["подобно",{"2":{"165":1,"306":1,"463":1,"466":1}}],["подобному",{"2":{"311":1}}],["подобном",{"2":{"160":1}}],["подобное",{"2":{"34":1,"96":1,"198":1,"213":1,"314":1,"402":1}}],["подобными",{"2":{"258":1}}],["подобный",{"2":{"124":1,"125":1,"230":1,"490":1}}],["подобные",{"2":{"96":1,"275":1,"338":1,"467":1,"492":1}}],["подобных",{"2":{"88":1,"96":1,"98":1,"187":1,"202":1}}],["подождать",{"2":{"357":1}}],["подождите",{"2":{"160":1}}],["подойти",{"2":{"350":1,"421":1,"447":1}}],["подойдут",{"2":{"337":1}}],["подойдет",{"2":{"145":1}}],["подошли",{"2":{"189":1}}],["подошел",{"2":{"39":1}}],["подозрительные",{"2":{"123":1}}],["подходе",{"2":{"271":1,"348":1,"357":1,"421":1,"435":1,"446":1,"476":1}}],["подходом",{"2":{"199":1,"261":1,"271":1,"370":1,"438":1,"541":1}}],["подходов",{"2":{"156":1,"231":1,"319":1,"323":1,"354":1,"365":1,"420":1,"444":1,"450":1}}],["подходы",{"2":{"160":1,"237":1,"304":1,"323":1,"375":1,"407":1,"442":1,"457":1,"482":1}}],["подходу",{"2":{"156":1,"350":1,"420":1}}],["подходят",{"2":{"142":2,"304":1,"436":1,"476":1,"478":1}}],["подходящая",{"0":{"477":1},"2":{"436":2,"476":1}}],["подходящее",{"2":{"351":1,"354":1}}],["подходящей",{"2":{"335":1}}],["подходящем",{"2":{"124":1}}],["подходящую",{"2":{"104":1,"107":1}}],["подходящим",{"2":{"190":1,"268":1}}],["подходящие",{"2":{"107":1}}],["подходящий",{"2":{"27":1,"96":1,"280":1}}],["подходящих",{"2":{"12":1}}],["подход",{"2":{"134":2,"183":1,"196":1,"202":1,"214":1,"217":3,"218":2,"220":1,"227":2,"231":1,"234":1,"258":1,"265":1,"271":1,"311":2,"313":3,"316":2,"318":1,"320":2,"321":1,"330":2,"348":1,"351":2,"363":1,"366":1,"371":1,"375":1,"400":1,"415":1,"433":1,"436":2,"448":1,"453":1,"457":1,"476":3,"490":1,"492":1}}],["подходах",{"2":{"447":1}}],["подхода",{"2":{"114":1,"156":1,"160":1,"204":1,"215":1,"291":1,"313":1,"320":1,"357":2,"375":1,"399":1,"421":1,"449":2}}],["подходите",{"2":{"191":1}}],["подходит",{"2":{"63":1,"234":1,"313":2,"340":1,"350":1,"351":1,"422":1,"430":1,"436":1,"472":1,"476":1,"482":1,"483":1,"492":2}}],["подхедер",{"2":{"29":1}}],["подберем",{"2":{"27":1}}],["подбора",{"2":{"9":1}}],["под",{"2":{"4":1,"85":1,"96":1,"126":1,"177":1,"178":1,"196":1,"223":1,"239":1,"241":1,"248":1,"254":1,"267":1,"283":1,"285":2,"291":1,"298":1,"300":1,"319":2,"364":1,"368":1,"399":1,"426":1,"445":1,"448":1,"455":1,"479":1,"482":1,"506":1,"533":1,"541":1,"542":1,"561":1}}],["прыгания",{"2":{"550":1}}],["пр",{"2":{"429":1}}],["прямую",{"2":{"414":1}}],["прямая",{"2":{"306":1}}],["прямым",{"2":{"271":1,"478":1}}],["прямых",{"2":{"221":1,"261":1,"306":1}}],["прямоугольниками",{"2":{"351":1}}],["прямого",{"2":{"296":1,"306":1}}],["прямое",{"2":{"145":1,"218":1,"280":1}}],["прямолинейна",{"2":{"96":1}}],["прямо",{"2":{"40":1,"145":1,"283":1,"430":1,"541":1}}],["прямой",{"2":{"23":1,"143":1,"183":1,"273":1,"359":1,"508":1}}],["прятать",{"2":{"4":1}}],["препроцессора",{"2":{"538":1}}],["преподавательской",{"2":{"65":1}}],["презентационный",{"2":{"490":1}}],["презентационного",{"2":{"331":2}}],["прекрасный",{"2":{"491":1}}],["прекрасно",{"2":{"453":1,"466":1}}],["прекратит",{"2":{"260":1}}],["прелоадер",{"2":{"438":2,"572":1}}],["преобладающим",{"2":{"273":1}}],["преобразуется",{"2":{"364":1,"407":1}}],["преобразует",{"2":{"130":1,"339":1}}],["преобразовать",{"2":{"338":1}}],["преобразованным",{"2":{"227":1}}],["преобразованы",{"2":{"224":1}}],["преобразовано",{"2":{"186":1}}],["преобразованию",{"2":{"371":1}}],["преобразование",{"2":{"142":2,"415":1}}],["преобразования",{"2":{"44":1,"89":1,"158":1,"227":1}}],["преобразовывать",{"2":{"41":1,"96":1,"226":1,"227":1}}],["преследовали",{"2":{"268":1}}],["преследуете",{"2":{"157":1}}],["прервет",{"2":{"339":1}}],["прервана",{"2":{"258":1}}],["прерывая",{"2":{"449":1}}],["прерывать",{"2":{"449":1}}],["прерывается",{"2":{"234":1}}],["прерывании",{"2":{"228":1}}],["пренебрегали",{"2":{"239":1}}],["превзошла",{"2":{"363":1}}],["превзойти",{"2":{"160":1}}],["превышает",{"2":{"327":1}}],["превосходящие",{"2":{"239":1}}],["превращения",{"2":{"293":1,"299":1}}],["превращает",{"2":{"289":1}}],["превращается",{"2":{"159":1}}],["превращая",{"2":{"177":1}}],["превращать",{"2":{"23":1,"302":1}}],["превратим",{"2":{"232":1}}],["превратилось",{"2":{"228":1}}],["превратился",{"2":{"199":1}}],["превратится",{"2":{"96":1,"167":1}}],["превратить",{"2":{"29":1,"233":1,"291":1,"298":1,"406":1}}],["превратятся",{"2":{"160":1}}],["прежнему",{"2":{"268":1,"291":1,"363":1,"370":2,"399":1}}],["прежним",{"2":{"138":1,"155":1}}],["прежде",{"2":{"156":1,"180":1,"234":1,"237":1,"239":1,"248":1,"249":2,"316":1,"327":1,"339":1,"343":1,"357":1,"401":1,"405":1,"406":1,"410":1,"422":1,"452":1,"453":1,"463":1}}],["претенциозной",{"2":{"474":1}}],["претензий",{"2":{"9":1}}],["претерпела",{"2":{"155":1}}],["префиксом",{"2":{"363":1}}],["префиксируем",{"2":{"362":1}}],["префикса",{"2":{"339":1}}],["префикс",{"2":{"121":2,"162":1,"359":1}}],["преимущественно",{"2":{"138":1,"478":1,"482":1}}],["преимуществами",{"2":{"156":2,"478":1}}],["преимущества",{"2":{"130":1,"137":1,"196":1,"220":1,"234":1,"288":1,"291":2,"303":1,"346":1,"347":1,"399":2,"400":1,"424":1,"447":1,"454":2}}],["преимуществ",{"2":{"48":1,"156":1,"160":2,"180":1,"183":1,"291":2,"302":1,"312":1,"313":1,"318":2,"331":1,"357":1,"399":1,"445":2}}],["преимуществом",{"2":{"158":1,"159":1}}],["преимущество",{"2":{"17":1,"220":1,"327":1,"436":1,"476":1}}],["предназначались",{"2":{"491":1}}],["предназначена",{"2":{"376":1}}],["предназначенная",{"2":{"301":1}}],["предназначенный",{"2":{"258":1}}],["предназначенных",{"2":{"155":1}}],["предназначено",{"2":{"249":1}}],["предназначен",{"2":{"234":1,"399":1}}],["предшествующий",{"2":{"407":1}}],["преданность",{"2":{"380":1}}],["предисловие",{"0":{"375":1,"502":1},"1":{"503":1}}],["пределами",{"2":{"319":2,"478":1,"482":1}}],["пределы",{"2":{"168":2,"261":1,"319":1}}],["предсказания",{"2":{"245":1}}],["предстоит",{"2":{"156":1,"370":1}}],["представительное",{"2":{"368":1}}],["представить",{"2":{"158":1,"178":1,"226":1,"231":1,"268":1,"309":1,"331":1,"350":1,"351":1,"360":1,"367":1,"369":1,"408":1,"421":1,"442":1}}],["представим",{"2":{"26":1,"196":1,"228":1,"234":1,"325":2}}],["представьте",{"2":{"142":1,"237":1,"478":1}}],["представлен",{"0":{"374":1},"2":{"386":1,"404":1,"446":1}}],["представлены",{"2":{"285":1,"382":1,"387":1,"389":1,"391":1,"392":1,"506":1}}],["представлена",{"2":{"232":1,"241":1,"388":1}}],["представленную",{"2":{"249":1}}],["представленные",{"2":{"442":1}}],["представленных",{"2":{"240":1,"416":1,"446":1}}],["представленный",{"2":{"147":1,"261":1,"305":1}}],["представленная",{"2":{"223":1,"265":1}}],["представлено",{"2":{"196":1,"327":1,"393":1,"420":1}}],["представлений",{"2":{"404":1,"408":1,"410":1,"416":1}}],["представлении",{"2":{"266":1,"410":1}}],["представлением",{"2":{"410":1}}],["представление",{"2":{"4":2,"11":2,"73":1,"139":1,"155":1,"158":2,"180":1,"194":1,"196":1,"197":1,"222":1,"224":1,"227":1,"229":1,"233":1,"237":1,"239":1,"258":1,"260":1,"287":1,"291":1,"327":3,"331":1,"333":1,"343":1,"352":1,"360":1,"364":1,"367":1,"410":1,"416":1,"420":1,"455":1}}],["представления",{"0":{"408":1},"1":{"409":1,"410":1},"2":{"3":2,"17":1,"187":1,"239":1,"264":1,"293":1,"294":1,"298":1,"327":1,"369":1,"424":1,"446":1,"482":1}}],["представляем",{"2":{"399":1}}],["представляемых",{"2":{"353":1}}],["представляется",{"2":{"277":1,"344":1}}],["представляет",{"2":{"142":1,"156":1,"159":1,"180":2,"271":1,"276":1,"280":1,"294":1,"319":1,"334":1,"340":1,"344":1,"369":1,"375":1,"382":1,"399":1,"416":1,"453":1,"545":1}}],["представляющая",{"2":{"294":1,"295":2,"404":1}}],["представляющий",{"2":{"180":1,"356":1,"452":1}}],["представляются",{"2":{"247":1,"252":1,"257":1,"260":1}}],["представляют",{"2":{"6":1,"158":1,"245":1,"251":1,"252":1,"263":1,"287":1,"319":1,"435":1,"476":2}}],["представлял",{"2":{"155":1}}],["представлять",{"2":{"22":1,"67":1,"187":1,"228":1,"351":1,"478":1}}],["предупредить",{"2":{"196":1,"257":1}}],["предусмотреть",{"2":{"415":1}}],["предусмотренный",{"2":{"357":2}}],["предусмотренные",{"2":{"251":1,"392":1}}],["предусмотрены",{"2":{"161":1}}],["предусмотрен",{"2":{"152":1,"252":1,"258":1,"319":1,"362":1}}],["предусмотрена",{"2":{"64":1,"357":1,"402":1}}],["предусматривает",{"2":{"74":1,"188":1}}],["предусматривают",{"2":{"41":1}}],["предвидеть",{"2":{"188":1}}],["предварительных",{"2":{"467":1}}],["предварительный",{"2":{"180":1,"491":1}}],["предварительное",{"2":{"376":1}}],["предварительно",{"2":{"281":1,"491":2,"492":1}}],["предварительной",{"2":{"254":1,"260":1,"404":1}}],["предварительного",{"2":{"179":1,"189":1}}],["предприятий",{"2":{"399":1}}],["предписаны",{"2":{"174":1}}],["предписано",{"2":{"168":1}}],["предписанный",{"2":{"159":1}}],["предписывает",{"2":{"156":1,"158":1,"160":1,"202":1,"233":1}}],["предписывается",{"2":{"156":1}}],["предписывают",{"2":{"156":1,"180":1}}],["предпочесть",{"2":{"432":1,"476":1}}],["предпочтение",{"2":{"407":1}}],["предпочтительнее",{"2":{"234":1}}],["предпочтительно",{"2":{"105":1,"164":1}}],["предпосылкам",{"2":{"402":1}}],["предполагают",{"2":{"293":1}}],["предполагающая",{"2":{"284":1}}],["предполагает",{"2":{"377":1,"444":1,"467":1}}],["предполагается",{"2":{"291":2,"420":1,"444":1}}],["предполагаемой",{"2":{"285":1}}],["предполагалось",{"2":{"227":1}}],["предполагая",{"2":{"151":1}}],["предположим",{"2":{"213":1,"408":1,"421":1}}],["предыдущую",{"2":{"491":1}}],["предыдущее",{"2":{"449":1}}],["предыдущего",{"2":{"243":1,"271":1,"289":1,"293":1,"314":1,"410":1}}],["предыдущей",{"2":{"230":1,"296":1,"300":1,"327":1,"369":1,"455":1}}],["предыдущему",{"2":{"457":1}}],["предыдущем",{"2":{"142":1,"217":1,"225":1,"242":1,"260":1,"272":1,"273":1,"298":2,"300":1,"312":1,"327":1,"362":2,"407":1,"409":1,"410":1,"413":1,"419":1,"420":2}}],["предыдущая",{"2":{"183":1,"397":1}}],["предыдущих",{"2":{"159":1,"177":2,"180":1,"304":1,"312":1,"318":1,"333":1,"359":1,"397":1,"407":1,"420":1,"421":1}}],["предыдущими",{"2":{"180":1,"443":1}}],["предыдущим",{"2":{"142":1}}],["предыдущие",{"2":{"141":1,"167":1,"449":1,"460":1}}],["предыдущий",{"2":{"128":1,"149":1,"167":1,"214":1,"222":1,"228":1,"234":1,"298":1,"299":1,"328":1,"337":1,"453":1}}],["предметную",{"2":{"476":1}}],["предмет",{"2":{"124":1,"296":1}}],["предмета",{"2":{"65":1,"242":1}}],["предотвратить",{"2":{"198":1,"298":1}}],["предотвращает",{"2":{"298":1}}],["предотвращать",{"2":{"286":1}}],["предотвращая",{"2":{"159":1}}],["предотвращение",{"0":{"280":1}}],["предотвращением",{"2":{"96":1}}],["предотвращения",{"2":{"258":1,"345":1}}],["предостережений",{"2":{"319":1}}],["предостережение",{"2":{"195":1,"200":1,"258":1}}],["предоставили",{"2":{"360":1}}],["предоставило",{"2":{"184":1}}],["предоставить",{"2":{"217":1,"291":1,"300":1,"360":1,"437":1,"450":1}}],["предоставит",{"2":{"185":1,"298":1,"309":1,"344":1,"354":1,"367":1,"456":1,"459":1}}],["предоставленные",{"2":{"377":1}}],["предоставленного",{"2":{"368":1}}],["предоставленное",{"2":{"362":1}}],["предоставление",{"2":{"249":1,"331":1}}],["предоставления",{"2":{"125":1,"265":1,"279":1,"286":1,"287":1,"360":1,"365":1,"414":1,"444":1}}],["предоставлена",{"2":{"218":1}}],["предоставляйте",{"2":{"437":1}}],["предоставляющая",{"2":{"466":1}}],["предоставляющую",{"2":{"414":1}}],["предоставляющие",{"2":{"419":1}}],["предоставляющий",{"2":{"414":1}}],["предоставляющих",{"2":{"174":1,"231":1}}],["предоставляются",{"2":{"161":1,"213":1,"252":1,"451":1,"466":1}}],["предоставляют",{"2":{"124":1,"142":1,"152":1,"155":1,"156":1,"181":1,"197":1,"206":1,"319":3,"331":1,"414":2,"421":1,"425":1,"466":1,"490":1}}],["предоставляя",{"2":{"145":1,"331":1,"453":1}}],["предоставляемое",{"2":{"357":1}}],["предоставляемой",{"2":{"346":1,"468":1}}],["предоставляемого",{"2":{"260":1,"360":1}}],["предоставляемым",{"2":{"331":1}}],["предоставляемыми",{"2":{"323":1,"390":1}}],["предоставляемых",{"2":{"304":1,"314":1,"319":1,"442":1,"444":1}}],["предоставляемый",{"2":{"182":1,"298":1,"339":1}}],["предоставляемые",{"2":{"181":1,"318":1,"410":1,"445":1,"468":1}}],["предоставляемую",{"2":{"152":1}}],["предоставляем",{"2":{"145":1,"321":1,"360":1,"368":1}}],["предоставляемая",{"2":{"131":1,"152":1}}],["предоставляет",{"2":{"124":4,"125":1,"142":1,"152":1,"155":1,"160":1,"167":2,"168":1,"180":1,"183":1,"221":1,"226":3,"234":2,"300":1,"309":1,"314":2,"319":1,"320":1,"327":1,"328":2,"337":1,"340":1,"360":1,"364":1,"365":1,"405":1,"406":1,"410":3,"413":1,"414":2,"415":1,"435":1,"447":1,"451":1,"455":1,"466":1,"476":1}}],["предоставляется",{"2":{"58":1,"125":1,"145":2,"168":1,"319":1,"338":1}}],["предоставляться",{"2":{"367":1}}],["предоставлять",{"2":{"125":1,"129":1,"197":1,"265":1,"291":2,"298":1,"357":1,"360":1,"478":1}}],["предъявляемых",{"2":{"74":1}}],["предложений",{"2":{"482":1}}],["предложением",{"2":{"286":1,"319":1,"360":1}}],["предложение",{"2":{"277":1}}],["предложения",{"2":{"164":1,"257":1,"281":1}}],["предложенное",{"2":{"179":1}}],["предложенных",{"2":{"98":1}}],["предложено",{"2":{"179":1,"465":1}}],["предложит",{"2":{"298":1}}],["предложите",{"2":{"242":1}}],["предложить",{"2":{"156":1,"231":1,"291":1,"406":1,"500":1}}],["предложил",{"2":{"62":1,"491":1,"492":1}}],["предлагайте",{"2":{"248":2}}],["предлагаемого",{"2":{"156":1}}],["предлагаемый",{"2":{"10":1}}],["предлагается",{"2":{"182":1,"279":1,"319":1}}],["предлагает",{"2":{"39":1,"40":1,"101":1,"156":1,"158":1,"179":1,"182":1,"184":1,"269":1,"293":1,"319":1,"331":1,"360":1,"455":2,"458":1}}],["предлагающий",{"2":{"183":1}}],["предлагающих",{"2":{"124":1,"285":1}}],["предлагают",{"2":{"152":1,"251":1,"262":1,"467":1,"490":1,"491":1}}],["предлагаю",{"2":{"4":1,"138":1,"223":1}}],["прайм",{"2":{"242":1}}],["прагматичный",{"2":{"199":1}}],["практичности",{"2":{"340":1}}],["практическое",{"2":{"491":1}}],["практического",{"2":{"248":1}}],["практической",{"2":{"177":1,"191":1}}],["практическим",{"2":{"397":1}}],["практических",{"2":{"177":1,"178":1,"397":1}}],["практически",{"2":{"32":1,"132":1,"145":1,"187":2,"237":2,"257":1,"278":1,"318":1,"354":1,"445":1}}],["практикующие",{"2":{"444":1}}],["практику",{"2":{"183":1,"202":1}}],["практикой",{"2":{"169":1,"348":1,"360":1,"407":1,"409":1,"474":1,"478":1}}],["практиками",{"2":{"491":1}}],["практиках",{"2":{"438":1}}],["практика",{"2":{"159":1,"279":1,"293":1,"345":1,"465":1,"467":1,"478":1}}],["практике",{"2":{"132":1,"156":1,"159":1,"179":1,"192":1,"196":1,"199":1,"202":1,"218":1,"231":1,"232":1,"257":1,"258":1,"275":1,"296":1,"301":1,"306":2,"318":1,"319":1,"320":1,"397":1,"444":1,"446":1,"466":1}}],["практик",{"2":{"68":1,"177":1,"196":1,"201":1,"218":1,"491":1,"501":1,"541":2,"542":1}}],["практики",{"0":{"373":1,"438":1},"1":{"374":1,"375":1,"376":1,"377":1,"378":1,"379":1,"380":1,"439":1,"440":1,"441":1},"2":{"9":1,"67":1,"123":1,"155":1,"188":2,"198":1,"201":1,"202":1,"401":1,"467":1,"490":1,"491":1,"541":1,"542":1}}],["прав",{"2":{"414":1,"462":1}}],["правая",{"2":{"430":1}}],["права",{"2":{"123":1,"142":1,"420":1}}],["правой",{"2":{"254":1,"296":1}}],["правом",{"2":{"240":1,"242":1,"246":1,"301":2}}],["право",{"2":{"123":3}}],["правками",{"2":{"100":1}}],["правительственных",{"2":{"142":1,"268":1}}],["править",{"2":{"89":1}}],["правил",{"0":{"248":1},"2":{"240":1,"248":2,"291":1}}],["правильных",{"2":{"491":1}}],["правильным",{"2":{"186":1,"199":1,"261":1,"306":1,"453":1}}],["правильное",{"2":{"453":1}}],["правильность",{"2":{"311":1}}],["правильном",{"2":{"268":1,"327":1}}],["правильно",{"2":{"122":1,"159":1,"188":1,"232":1,"279":1,"293":1,"297":2,"328":1,"338":1,"448":1}}],["правильного",{"2":{"101":1}}],["правилах",{"2":{"248":1,"268":1}}],["правила",{"2":{"73":1,"155":1,"156":1,"159":1,"181":1,"192":1,"229":1,"248":2,"482":1}}],["правило",{"2":{"2":1,"23":1,"73":1,"96":1,"147":1,"180":1,"199":1,"209":1,"241":1,"257":1,"268":2,"306":1,"377":1,"413":1,"444":1}}],["правда",{"2":{"22":1,"232":1,"444":1}}],["проехать",{"2":{"491":1}}],["проекты",{"2":{"377":1,"402":3,"458":2,"491":1}}],["проекту",{"2":{"96":1,"177":1,"445":1,"458":1}}],["проектов",{"0":{"476":1},"2":{"96":1,"137":2,"178":1,"202":1,"318":1,"363":1,"384":1,"402":2,"429":1,"431":1,"435":1,"436":2,"455":1,"457":2,"458":1,"466":1,"476":3,"482":1,"490":1}}],["проектом",{"2":{"70":1,"177":1,"178":1,"384":1,"436":1,"466":1}}],["проекте",{"0":{"533":1},"2":{"62":1,"95":1,"96":1,"121":1,"179":1,"183":1,"184":1,"192":2,"396":1,"410":1,"429":1,"436":1,"442":1,"444":1,"445":1,"446":1,"455":1,"458":1,"478":1,"490":1,"501":1,"537":1}}],["проектированию",{"2":{"375":1}}],["проектирование",{"2":{"228":1,"240":1,"244":1}}],["проектирования",{"0":{"191":1,"192":1,"193":1,"202":1,"240":1,"245":1,"249":1,"354":1,"373":1,"383":1},"1":{"192":1,"193":1,"194":2,"195":2,"196":2,"197":2,"198":2,"199":2,"200":2,"201":2,"202":1,"203":1,"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"232":1,"233":1,"234":1,"235":1,"236":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"374":1,"375":1,"376":1,"377":1,"378":1,"379":1,"380":1},"2":{"41":1,"112":1,"155":2,"175":1,"177":1,"181":2,"185":2,"191":1,"192":1,"193":1,"201":2,"202":2,"207":1,"220":1,"222":1,"235":1,"236":1,"237":1,"240":1,"241":1,"244":1,"248":1,"268":1,"275":1,"306":1,"309":1,"320":1,"325":2,"330":1,"331":2,"332":2,"333":1,"346":1,"347":1,"348":3,"350":1,"351":1,"353":1,"354":1,"356":1,"359":1,"362":1,"363":1,"365":1,"371":1,"375":3,"376":2,"377":1,"383":1,"388":1,"446":1}}],["проектировании",{"2":{"2":1}}],["проект",{"0":{"61":1,"489":1,"526":1},"1":{"527":1,"528":1},"2":{"4":1,"39":1,"58":1,"63":2,"67":1,"74":1,"96":1,"177":1,"178":1,"179":8,"180":2,"181":1,"183":2,"222":1,"235":1,"305":1,"314":2,"340":1,"369":1,"384":1,"396":2,"400":1,"407":1,"429":2,"436":2,"442":1,"446":1,"455":1,"458":2,"476":1,"483":1,"487":1,"535":2,"561":1}}],["проектами",{"2":{"365":1,"370":1,"402":1,"533":1}}],["проектах",{"2":{"96":1,"174":1,"177":2,"183":1,"202":1,"354":1,"364":1,"396":1,"436":1,"454":1,"468":1,"479":1,"481":1,"515":1}}],["проекта",{"0":{"4":1,"9":1,"23":1,"58":1,"66":1,"67":1,"80":1,"119":1,"177":1,"179":1,"366":1,"384":1,"475":1,"477":1,"511":1},"1":{"67":1,"68":1,"69":1,"70":1,"120":1,"121":1,"178":1,"179":1,"180":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"476":1,"477":1},"2":{"10":1,"14":1,"61":1,"64":1,"65":1,"67":1,"73":3,"89":1,"95":1,"96":4,"121":1,"124":1,"126":1,"127":1,"133":1,"158":1,"159":1,"160":1,"177":1,"179":8,"180":3,"181":1,"182":1,"183":1,"184":1,"223":1,"238":1,"305":1,"313":1,"314":1,"320":1,"348":1,"349":1,"365":1,"366":1,"371":1,"394":1,"396":2,"401":2,"402":2,"403":1,"407":5,"425":1,"432":1,"434":1,"436":4,"442":1,"444":2,"447":3,"454":1,"455":1,"458":1,"462":1,"463":1,"476":2,"477":1,"479":1,"489":1,"491":1,"501":1,"508":1,"515":1,"541":1}}],["проапгрейдиться",{"2":{"490":1}}],["проанализировав",{"2":{"410":1}}],["проанализировать",{"2":{"362":1}}],["пройден",{"2":{"448":1}}],["пройти",{"2":{"237":1,"417":1,"491":1}}],["процентов",{"2":{"474":1,"575":1}}],["процентные",{"2":{"457":1}}],["процедур",{"2":{"466":1}}],["процедуры",{"2":{"445":1}}],["процессы",{"2":{"202":1,"327":1,"340":1}}],["процессу",{"2":{"191":1,"192":1,"329":1,"335":1,"350":1}}],["процессом",{"2":{"262":1,"306":1,"327":2,"354":1,"357":1}}],["процессоры",{"2":{"483":1}}],["процессор",{"2":{"174":1,"242":1,"430":1,"483":1}}],["процессора",{"2":{"145":1,"483":1}}],["процессов",{"2":{"73":1,"207":1,"287":1,"416":1}}],["процессе",{"2":{"73":1,"74":1,"133":1,"143":1,"156":1,"158":1,"180":1,"188":1,"199":1,"249":1,"300":1,"327":1,"331":1,"340":1,"368":1,"415":1,"416":1,"420":1,"436":1,"444":1,"445":1}}],["процессах",{"2":{"281":1}}],["процессами",{"2":{"139":1,"327":2,"331":1}}],["процесса",{"2":{"70":1,"152":1,"157":1,"160":1,"191":1,"233":1,"256":1,"258":1,"272":1,"299":1,"304":1,"327":2,"328":2,"333":2,"344":1,"356":1,"396":1,"416":3,"419":1,"420":1,"421":2,"445":1,"449":1,"457":1,"467":1}}],["процесс",{"2":{"61":1,"133":1,"151":1,"152":1,"158":1,"188":1,"190":1,"199":1,"234":1,"258":1,"261":1,"298":2,"299":1,"319":1,"327":9,"331":2,"332":2,"333":1,"339":1,"350":1,"353":1,"360":1,"368":1,"394":1,"415":1,"416":1,"420":1,"421":4,"422":2,"444":2,"445":1,"457":1,"467":3,"469":1,"479":1}}],["проходит",{"2":{"301":1}}],["проникновение",{"0":{"277":1}}],["прокручивается",{"2":{"404":1}}],["прокручиваются",{"2":{"263":1}}],["прокрутить",{"2":{"260":1,"273":1}}],["прокруткой",{"2":{"261":1}}],["прокрутка",{"2":{"260":1,"404":1}}],["прокрутку",{"2":{"260":1}}],["прокрутки",{"2":{"246":1,"260":1,"261":1,"363":2}}],["проксирования",{"2":{"226":1,"227":2}}],["прокси",{"2":{"125":1,"138":1,"148":1,"181":1,"191":1,"202":1,"226":8,"227":6,"228":6,"230":1,"231":2,"299":1,"304":1,"321":2,"331":1,"338":1,"482":1,"508":1}}],["прозрачным",{"2":{"438":1}}],["прозрачны",{"2":{"291":1}}],["прозрачный",{"2":{"123":1,"428":1}}],["прозрачное",{"2":{"396":1}}],["прозрачно",{"2":{"228":1,"291":1,"436":1}}],["профессор",{"2":{"248":1}}],["профессиональную",{"2":{"468":1}}],["профессиональные",{"2":{"442":1}}],["профессиональный",{"2":{"244":1}}],["профессионального",{"2":{"486":1}}],["профессиональной",{"2":{"380":1}}],["профессиональное",{"2":{"201":1}}],["профилем",{"2":{"59":1}}],["профиля",{"2":{"4":1}}],["прочную",{"2":{"468":1}}],["прочная",{"2":{"466":1}}],["прочтение",{"2":{"380":1}}],["прочим",{"2":{"483":1}}],["прочие",{"2":{"426":1,"436":1}}],["прочитаны",{"2":{"319":1}}],["прочитал",{"2":{"255":1}}],["прочитать",{"2":{"237":1,"318":1}}],["прочих",{"2":{"180":1,"492":1}}],["прочесть",{"2":{"492":1}}],["прочей",{"2":{"96":1}}],["прочее",{"2":{"59":1,"96":2}}],["прочего",{"2":{"36":1}}],["прояснить",{"2":{"226":1}}],["проясняться",{"2":{"160":1}}],["проявлять",{"2":{"327":1}}],["проявляться",{"2":{"192":1}}],["проявляются",{"2":{"291":1}}],["проявляется",{"2":{"227":1,"278":1,"479":1}}],["проявившиеся",{"2":{"160":1}}],["прошла",{"2":{"418":1,"420":1}}],["прошлый",{"2":{"201":1}}],["прошли",{"2":{"175":1,"301":2,"447":1,"448":1}}],["прошлой",{"2":{"98":1}}],["прошел",{"2":{"126":1}}],["пробовать",{"2":{"457":1}}],["пробного",{"2":{"278":1}}],["пробная",{"2":{"178":2}}],["пробегаемся",{"2":{"223":1}}],["пробелы",{"2":{"170":1}}],["пробелами",{"2":{"125":1}}],["проблемой",{"2":{"327":2,"416":1}}],["проблему",{"2":{"141":1,"142":1,"202":1,"261":1,"327":2,"396":1,"426":1,"478":1}}],["проблемам",{"2":{"194":1}}],["проблема",{"2":{"73":1,"89":1,"96":1,"129":1,"160":1,"198":1,"234":1,"319":1,"359":1,"360":1}}],["проблемы",{"2":{"62":1,"125":2,"155":1,"168":1,"191":1,"202":2,"203":1,"360":1,"416":1,"422":1,"442":1,"457":1,"478":1,"491":1,"492":1}}],["проблем",{"2":{"9":1,"96":1,"124":1,"156":1,"191":1,"194":1,"199":1,"233":1,"261":1,"363":1,"375":1,"415":1,"442":1,"458":2,"573":1}}],["провайдите",{"2":{"438":1}}],["провайдеры",{"2":{"152":1,"425":2,"435":1,"476":1}}],["провайдерами",{"2":{"491":1,"573":1}}],["провайдерах",{"2":{"146":1}}],["провайдера",{"2":{"124":1,"145":1,"483":1}}],["провайдер",{"2":{"124":1,"146":1}}],["провайдеров",{"2":{"124":1,"152":1,"419":1}}],["провизия",{"2":{"360":1}}],["провизию",{"2":{"360":1}}],["проводить",{"2":{"482":1}}],["проводиться",{"2":{"444":2}}],["проводилось",{"2":{"444":1}}],["проводил",{"2":{"261":1}}],["проводнике",{"2":{"180":1}}],["проведения",{"2":{"469":1}}],["проведение",{"2":{"442":1}}],["проведет",{"2":{"301":1}}],["провели",{"2":{"371":1}}],["проверено",{"2":{"492":1}}],["проверена",{"2":{"420":1}}],["проверенная",{"2":{"502":1}}],["проверенное",{"2":{"156":1,"202":1}}],["проверенным",{"2":{"541":1}}],["проверенных",{"2":{"501":1}}],["проверенные",{"2":{"67":1}}],["проверенный",{"2":{"9":1}}],["проверенную",{"2":{"17":1}}],["проверке",{"2":{"448":2}}],["проверка",{"2":{"226":1,"368":1,"413":1,"415":1,"421":1,"464":1,"478":3,"573":1}}],["проверку",{"2":{"218":1,"227":1,"416":1,"444":1}}],["проверки",{"0":{"154":1,"176":1,"190":1,"236":1,"288":1,"303":1,"324":1,"347":1,"372":1,"424":1,"469":1},"2":{"251":1,"415":4,"416":3,"419":2,"421":4,"436":1,"444":1,"448":1,"450":1,"476":1}}],["проверит",{"2":{"447":1}}],["проверить",{"2":{"142":1,"179":1,"233":1,"289":1,"297":1,"372":1,"416":1,"419":1,"449":1,"450":1,"453":1,"454":1,"462":1,"463":1,"491":1}}],["проверили",{"2":{"346":1}}],["проверив",{"2":{"123":1}}],["проверьте",{"2":{"132":1,"187":1,"311":1,"492":1}}],["проверяются",{"2":{"444":2}}],["проверяем",{"2":{"212":1,"219":1,"223":1,"227":1,"234":1,"299":1,"321":2,"452":1}}],["проверяет",{"2":{"123":2,"187":1,"396":1,"416":1,"421":1,"430":1}}],["проверять",{"2":{"123":1,"415":1,"448":1,"479":1}}],["проверок",{"2":{"96":1,"132":1}}],["провести",{"2":{"12":1,"156":1,"280":1,"345":1,"491":1}}],["промежутках",{"2":{"421":1}}],["промежутка",{"2":{"421":1}}],["промежуток",{"2":{"420":1}}],["промежуточного",{"2":{"369":1,"482":1}}],["промежуточное",{"2":{"226":1}}],["промежуточным",{"2":{"341":1}}],["промежуточных",{"2":{"228":1}}],["промежуточный",{"2":{"180":1}}],["промптировании",{"2":{"298":1}}],["промптов",{"2":{"99":1}}],["промышленном",{"2":{"341":1}}],["промышленной",{"2":{"181":1,"300":1}}],["промышленный",{"2":{"240":1}}],["промисная",{"2":{"545":1}}],["промисный",{"2":{"122":1}}],["промисов",{"2":{"365":1,"491":1}}],["промис",{"2":{"357":2,"414":1,"422":1}}],["промиса",{"2":{"354":1,"368":1}}],["промисы",{"2":{"191":1,"450":1,"483":2}}],["про",{"2":{"96":1}}],["проталкивает",{"2":{"411":1}}],["протестировали",{"2":{"453":1}}],["протестированы",{"2":{"231":1,"445":1}}],["протестировать",{"2":{"124":1,"445":3,"447":1,"448":1,"450":1,"542":1}}],["противоположное",{"2":{"276":1}}],["противоположные",{"2":{"257":1}}],["противоположную",{"2":{"202":1,"283":1}}],["против",{"0":{"239":1},"2":{"243":1}}],["противном",{"2":{"89":1,"187":1,"218":1,"328":1,"336":1,"358":1}}],["протяжении",{"2":{"158":1,"179":1}}],["прототипа",{"2":{"372":1}}],["прототипов",{"2":{"354":1}}],["прототип",{"2":{"188":1}}],["прототипирования",{"2":{"23":1}}],["протоколе",{"2":{"416":1}}],["протоколирования",{"2":{"228":1}}],["протоколам",{"2":{"155":1}}],["протокола",{"2":{"152":2,"319":1,"416":2}}],["протоколу",{"2":{"151":1,"152":1,"153":1,"325":1,"425":1,"426":1}}],["протокол",{"2":{"142":3,"340":2,"416":3,"546":1}}],["протоколы",{"0":{"138":1},"2":{"138":1,"423":1,"491":1}}],["протоколом",{"2":{"125":1,"416":1,"418":1}}],["прогон",{"2":{"479":1}}],["проговаривание",{"2":{"65":1}}],["програмную",{"2":{"492":1}}],["програмных",{"2":{"375":1}}],["программе",{"2":{"508":1}}],["программой",{"2":{"182":1}}],["программ",{"2":{"178":1,"377":1}}],["программистов",{"2":{"482":1,"502":1}}],["программистские",{"2":{"482":1}}],["программистам",{"2":{"482":1}}],["программиста",{"2":{"191":1,"483":1}}],["программист",{"2":{"156":2,"199":1,"474":1,"482":1,"483":2}}],["программировали",{"2":{"231":1}}],["программированию",{"2":{"491":2}}],["программирование",{"2":{"191":1,"236":1,"380":1,"482":1}}],["программировании",{"2":{"156":3,"196":1}}],["программирования",{"2":{"3":1,"17":1,"124":2,"155":2,"156":1,"195":1,"197":1,"299":1,"360":1,"482":2}}],["программировать",{"2":{"102":1,"483":1}}],["программы",{"2":{"143":1,"156":1,"159":1,"308":1,"362":1,"401":1,"425":1,"430":1,"459":1,"474":1,"482":2}}],["программа",{"2":{"125":1,"156":1}}],["программу",{"2":{"73":1,"156":1,"200":1,"459":1}}],["программный",{"2":{"411":1}}],["программные",{"2":{"239":1}}],["программными",{"2":{"482":1}}],["программным",{"2":{"239":1,"455":1}}],["программном",{"2":{"194":1,"247":1}}],["программному",{"2":{"145":1,"346":1,"444":1}}],["программно",{"2":{"156":1,"404":2,"421":1,"453":2,"474":1}}],["программное",{"2":{"141":1,"145":2,"237":1,"239":2,"285":1,"375":1,"377":1,"442":1,"444":2,"457":1}}],["программной",{"2":{"74":1,"155":1,"156":1,"194":1,"202":1}}],["программного",{"0":{"191":1,"192":1,"202":1,"383":1},"1":{"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":1,"203":1,"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"232":1,"233":1,"234":1,"235":1,"236":1},"2":{"61":1,"67":1,"72":1,"74":1,"138":1,"155":1,"181":1,"185":1,"190":1,"191":1,"192":2,"200":1,"201":1,"202":1,"235":1,"237":1,"239":1,"245":1,"247":1,"285":1,"309":1,"320":1,"332":1,"348":1,"352":1,"356":1,"363":1,"383":2,"442":3,"444":2,"446":1,"457":2,"467":1,"479":1}}],["программная",{"0":{"408":1},"1":{"409":1,"410":1},"2":{"2":1,"67":1,"410":1}}],["прогресса",{"0":{"258":1},"1":{"259":1},"2":{"258":1,"371":1}}],["прогресс",{"2":{"237":1,"258":3}}],["прогрессивному",{"2":{"420":1}}],["прогрессивное",{"2":{"298":1}}],["прогрессивность",{"2":{"156":1}}],["прогрессивного",{"2":{"139":1,"155":1,"296":1,"300":1,"375":1}}],["прогрессивные",{"0":{"289":1,"387":1},"1":{"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1},"2":{"289":1,"399":1}}],["прогрессивными",{"2":{"423":1}}],["прогрессивным",{"2":{"176":1}}],["прогрессивный",{"0":{"156":1},"2":{"155":1,"156":2,"231":1,"291":1,"382":1}}],["прогрессивных",{"2":{"155":1}}],["проп",{"2":{"478":1}}],["проприетарных",{"2":{"291":1}}],["пропорционально",{"2":{"233":1}}],["пропустили",{"2":{"227":1}}],["пропустить",{"2":{"183":1}}],["пропускать",{"2":{"59":1}}],["прописать",{"2":{"396":1,"562":1}}],["прописан",{"2":{"578":1}}],["прописано",{"2":{"165":1}}],["прописаны",{"2":{"156":1}}],["прописывать",{"2":{"41":1}}],["пропсом",{"2":{"368":1}}],["пропсов",{"2":{"85":1,"308":1,"358":2,"359":2,"362":1,"406":1,"437":1,"478":1}}],["пропсу",{"2":{"362":1}}],["пропсами",{"2":{"407":1,"413":1}}],["пропсам",{"2":{"400":1}}],["пропса",{"2":{"359":1,"368":1,"404":1,"410":1}}],["пропс",{"2":{"259":1,"308":1,"362":1,"368":2,"404":1,"407":1,"410":1}}],["пропсы",{"0":{"170":1,"358":1},"2":{"114":1,"358":1,"359":2,"362":2,"369":1,"437":1,"438":1,"478":1,"481":1,"531":1}}],["проиграет",{"2":{"492":1}}],["проигнорируем",{"2":{"180":1}}],["проиндексировать",{"2":{"492":1}}],["проиллюстрирован",{"2":{"353":1}}],["проиллюстрировать",{"2":{"271":1}}],["происхождения",{"2":{"319":1}}],["происхождением",{"2":{"319":1}}],["происходят",{"2":{"291":1}}],["происходящего",{"2":{"258":1}}],["происходящим",{"2":{"249":1}}],["происходить",{"2":{"17":1,"396":1,"442":1,"478":1}}],["происходит",{"2":{"3":1,"137":1,"187":1,"227":2,"233":1,"249":1,"261":1,"313":1,"319":1,"327":4,"335":1,"339":1,"360":1,"364":1,"367":1,"370":1,"410":1,"413":1,"415":1,"420":2,"442":1,"453":1,"467":1,"469":2,"492":1}}],["произвольные",{"2":{"342":1}}],["произвольный",{"2":{"260":1}}],["произвольное",{"2":{"293":1}}],["производственной",{"2":{"454":1}}],["производственных",{"2":{"183":1}}],["производственные",{"2":{"180":1}}],["производстве",{"2":{"180":1,"223":1}}],["производства",{"2":{"180":2,"184":1}}],["производству",{"2":{"153":1,"180":1}}],["производилась",{"2":{"179":1}}],["производится",{"2":{"421":1,"460":1}}],["производителен",{"2":{"179":1}}],["производительней",{"2":{"430":1}}],["производительнее",{"2":{"132":1}}],["производительных",{"2":{"376":1}}],["производительными",{"2":{"289":1}}],["производительным",{"2":{"130":1}}],["производительная",{"2":{"375":1}}],["производительное",{"2":{"482":1}}],["производительной",{"2":{"327":1}}],["производительности",{"2":{"73":1,"137":1,"148":1,"156":2,"183":1,"226":1,"302":1,"323":1,"327":3,"331":1,"336":1,"340":1,"387":1,"389":1,"399":1,"474":1,"478":1,"492":1}}],["производительностью",{"2":{"327":1}}],["производительность",{"2":{"17":1,"68":1,"74":2,"96":1,"164":1,"291":2,"325":1,"327":2,"346":2,"347":1,"399":1,"484":1}}],["производиться",{"2":{"96":1}}],["произошла",{"2":{"328":1,"400":1,"451":1}}],["произошло",{"2":{"255":1,"478":1}}],["произойти",{"2":{"291":1,"449":1}}],["произойдет",{"2":{"179":1,"187":1,"232":1,"261":1,"308":1,"357":1,"421":1}}],["продуманный",{"2":{"423":1}}],["продуманных",{"2":{"421":1}}],["продуманные",{"2":{"275":1}}],["продуманного",{"2":{"271":1}}],["продуктом",{"2":{"239":1,"249":1}}],["продуктовый",{"2":{"491":1}}],["продуктовое",{"2":{"70":1}}],["продуктов",{"2":{"11":4,"38":1,"39":1}}],["продукте",{"2":{"11":1}}],["продуктами",{"2":{"106":1}}],["продуктах",{"2":{"11":1}}],["продукта",{"2":{"11":1,"13":1,"61":1,"67":1,"74":1,"79":1,"240":1,"273":1,"467":2}}],["продукты",{"2":{"11":1,"239":1}}],["продукт",{"2":{"10":1,"43":1,"65":1,"67":1,"139":1,"185":1,"239":1,"394":1,"435":1,"476":1}}],["продолжения",{"2":{"369":1}}],["продолжение",{"2":{"246":2}}],["продолжать",{"2":{"538":1}}],["продолжаться",{"2":{"278":1}}],["продолжаем",{"2":{"397":1}}],["продолжает",{"2":{"233":1,"448":1,"457":1}}],["продолжим",{"2":{"241":1}}],["продолжить",{"2":{"232":1,"274":1,"463":1}}],["продолжительность",{"2":{"232":1}}],["продолжит",{"2":{"132":1}}],["продвижение",{"2":{"239":1}}],["продвижения",{"2":{"141":1,"155":1,"167":1,"175":1,"188":1,"235":1,"298":1}}],["продвигает",{"2":{"197":1}}],["продвинулись",{"2":{"179":1}}],["продвинутые",{"2":{"355":1}}],["продвинутыми",{"2":{"325":1}}],["продвинутым",{"2":{"188":1}}],["продвинутых",{"2":{"177":1,"407":1}}],["продвинуться",{"2":{"178":1}}],["продлевать",{"2":{"152":1}}],["продлить",{"2":{"142":1}}],["продакшен",{"2":{"180":1}}],["продакшне",{"2":{"121":1,"479":1}}],["продает",{"2":{"142":1}}],["продаются",{"2":{"142":1,"279":1}}],["продавалось",{"2":{"237":1}}],["продавать",{"2":{"142":1}}],["продавцам",{"2":{"13":1}}],["продавцов",{"2":{"12":1}}],["проскроллит",{"2":{"568":1}}],["прослойка",{"2":{"492":1}}],["прослойки",{"2":{"85":1}}],["прослушивание",{"2":{"407":1}}],["прослушивания",{"2":{"198":1}}],["прослушивать",{"2":{"345":2}}],["проследим",{"2":{"183":1}}],["просмотр",{"2":{"180":1,"422":1}}],["просмотреть",{"2":{"176":1,"183":1,"265":1,"462":1}}],["просмотра",{"2":{"160":1,"179":1,"189":1,"260":1,"261":2,"263":1,"298":1,"322":1,"337":2,"368":1,"455":1,"462":1}}],["просматривать",{"2":{"11":2,"198":1,"337":1}}],["просишь",{"2":{"123":1}}],["простейший",{"2":{"228":1}}],["пространства",{"2":{"241":1}}],["пространстве",{"2":{"153":1,"257":1,"319":1}}],["пространство",{"2":{"142":1,"319":1,"429":1}}],["простую",{"2":{"141":1,"148":1,"156":1,"233":1,"248":1,"276":1,"339":1,"340":1,"363":1,"402":1,"432":1,"476":1}}],["прост",{"2":{"126":1,"145":1,"224":1,"232":2,"244":1,"298":1,"329":1,"341":1,"360":1,"421":1}}],["проставить",{"2":{"589":1}}],["проставляем",{"2":{"83":1}}],["простая",{"0":{"415":1},"2":{"126":1,"187":1,"283":1,"298":2,"311":1,"333":1,"415":1,"436":1,"458":1,"476":1}}],["проста",{"2":{"96":1,"271":1,"308":1,"312":1,"334":1,"342":1,"362":1,"400":1,"401":1,"415":1,"419":1,"455":1}}],["просты",{"2":{"239":1,"492":1}}],["простых",{"2":{"98":1,"130":1,"152":1,"155":2,"180":1,"260":1,"288":1,"313":1,"346":1,"348":1,"369":1,"414":1,"423":1,"433":1,"450":1,"463":1,"476":1,"492":1}}],["простым",{"0":{"200":1},"2":{"67":1,"122":1,"191":1,"200":1,"228":1,"231":1,"249":1,"296":1,"313":1,"328":1,"331":1,"371":1,"402":1,"420":1,"438":1,"451":1,"459":1}}],["простыми",{"2":{"11":1,"152":1,"183":1,"335":1}}],["простые",{"2":{"2":1,"22":1,"41":1,"180":1,"181":1,"200":1,"229":1,"230":1,"233":1,"306":1,"336":1,"474":1,"575":1,"586":1}}],["простор",{"2":{"202":1}}],["простому",{"2":{"189":1,"394":1}}],["простом",{"2":{"168":1,"226":1,"229":1,"259":1,"482":1}}],["простого",{"2":{"155":1,"187":1,"226":1,"319":1,"362":1,"421":1,"433":1,"476":1,"542":1}}],["простое",{"2":{"130":1,"158":1,"179":1,"184":1,"188":1,"189":1,"213":1,"306":1,"328":1,"359":1,"492":1}}],["простота",{"2":{"39":1,"200":1,"313":1,"436":1,"476":1}}],["простоты",{"2":{"7":1,"268":1,"293":1,"340":1,"352":1,"410":1}}],["простой",{"0":{"344":1},"1":{"345":1},"2":{"32":1,"89":1,"96":2,"123":1,"157":1,"185":1,"187":2,"194":1,"211":1,"219":1,"222":1,"223":1,"227":1,"228":1,"231":1,"234":1,"243":1,"261":1,"271":1,"298":1,"299":1,"302":1,"306":1,"313":1,"319":1,"321":1,"322":1,"325":2,"327":1,"328":1,"338":1,"342":1,"343":2,"351":1,"364":2,"365":1,"375":1,"389":1,"404":1,"406":1,"415":1,"448":1,"455":2,"467":1,"491":1,"565":1,"566":1,"575":1}}],["просто",{"0":{"183":1},"2":{"2":1,"12":1,"89":1,"96":1,"112":1,"123":1,"128":1,"139":1,"142":2,"145":1,"146":1,"149":1,"160":1,"167":1,"179":1,"184":1,"201":1,"213":1,"218":2,"219":1,"223":1,"227":1,"228":1,"233":1,"248":1,"261":1,"267":1,"283":1,"305":1,"306":1,"307":2,"309":1,"313":1,"316":1,"319":2,"321":1,"327":1,"328":2,"329":1,"338":1,"339":1,"342":1,"343":1,"345":1,"348":1,"362":1,"368":2,"401":1,"405":1,"407":1,"414":1,"419":1,"425":1,"446":1,"460":1,"474":1,"478":3,"481":1,"483":2,"490":1,"491":1,"521":1,"532":1,"538":1,"541":1}}],["проще",{"2":{"2":1,"38":1,"56":1,"124":1,"196":1,"247":1,"268":1,"291":1,"314":1,"318":1,"321":1,"399":1,"474":1,"490":1,"492":1}}],["приоритетом",{"2":{"483":2}}],["приоритеты",{"2":{"483":1}}],["приобрела",{"2":{"399":1}}],["приобрести",{"2":{"178":1}}],["приобретают",{"2":{"444":1}}],["приобретаются",{"2":{"142":1}}],["приобретен",{"2":{"142":1,"152":1}}],["приглашаем",{"2":{"533":1}}],["приглашение",{"2":{"299":1}}],["приглашения",{"2":{"298":2}}],["пригодится",{"2":{"462":1,"491":1}}],["пригодиться",{"2":{"430":1,"455":1}}],["приписываются",{"2":{"422":1}}],["пришли",{"2":{"399":1}}],["пришла",{"2":{"363":1}}],["пришло",{"2":{"86":1,"92":1,"151":1,"187":1,"298":1,"333":1,"334":1,"336":1,"339":1,"368":1,"369":1,"404":1,"407":1,"413":1,"456":1}}],["пришлось",{"2":{"51":1,"242":1}}],["признательность",{"2":{"380":1}}],["признаку",{"2":{"369":1}}],["признания",{"2":{"357":1}}],["призывом",{"2":{"273":2}}],["призыв",{"0":{"273":1},"2":{"273":1,"285":1}}],["призывы",{"2":{"256":1}}],["призыва",{"2":{"241":1}}],["природа",{"2":{"442":1}}],["природе",{"2":{"169":1,"234":1}}],["прирост",{"2":{"327":1,"336":1}}],["приборная",{"2":{"456":1}}],["приборной",{"2":{"455":1}}],["прибегая",{"2":{"264":1}}],["приблизить",{"2":{"492":1}}],["приблизительно",{"0":{"70":1}}],["приближении",{"2":{"17":1}}],["приятен",{"2":{"240":1}}],["приятный",{"2":{"553":1}}],["приятные",{"2":{"180":1}}],["приятней",{"2":{"490":1}}],["приятно",{"2":{"160":1}}],["приемы",{"2":{"287":1}}],["приемник",{"2":{"225":1}}],["приемники",{"2":{"224":1}}],["приемнику",{"2":{"224":1}}],["приемов",{"2":{"183":1,"260":1,"274":1}}],["придумали",{"2":{"492":1}}],["придумать",{"2":{"236":1}}],["придать",{"2":{"186":1}}],["придерживаются",{"2":{"273":1,"490":1}}],["придерживаться",{"2":{"156":1,"232":1,"287":1,"447":1,"491":1}}],["придется",{"2":{"38":1,"59":1,"156":1,"201":1,"212":1,"327":1,"360":1}}],["причем",{"2":{"226":1,"232":1,"267":1,"319":1,"331":1,"450":1,"453":1,"491":2}}],["причудливо",{"2":{"156":1}}],["причина",{"2":{"454":1}}],["причинам",{"2":{"451":1}}],["причине",{"2":{"357":1}}],["причин",{"2":{"64":1,"132":1,"226":1,"263":1,"327":1}}],["причины",{"0":{"62":1},"2":{"226":1,"490":1}}],["приспособленным",{"2":{"375":1}}],["приспособить",{"2":{"153":1}}],["присутствует",{"2":{"478":1}}],["присутствию",{"2":{"142":1}}],["присущей",{"2":{"314":1}}],["приступать",{"2":{"462":1}}],["приступаем",{"2":{"452":1}}],["приступить",{"2":{"180":1,"183":1,"331":1,"339":1,"354":1,"401":1,"405":1}}],["приступили",{"2":{"177":1}}],["пристыдить",{"2":{"284":1}}],["пристальное",{"2":{"273":1,"377":1}}],["присваивать",{"2":{"404":1}}],["присваивание",{"2":{"227":1}}],["присваивая",{"2":{"218":1,"227":1,"410":1}}],["присваиваем",{"2":{"217":1,"218":1,"219":1,"227":1,"362":1,"410":1}}],["присваивает",{"2":{"166":1,"359":1}}],["присваивается",{"2":{"156":1,"166":1,"407":1}}],["присвоено",{"2":{"407":1}}],["присвоения",{"2":{"351":1}}],["присвоение",{"2":{"218":2}}],["присвоении",{"2":{"187":1}}],["присвоили",{"2":{"362":1}}],["присвоил",{"2":{"261":1}}],["присвоить",{"2":{"215":1,"216":1,"227":1}}],["присоединить",{"2":{"359":1}}],["присоединять",{"2":{"365":1}}],["присоединяться",{"2":{"63":1}}],["присоединяет",{"2":{"224":1}}],["присоединяем",{"2":{"187":1}}],["присоединении",{"2":{"166":1}}],["приходила",{"2":{"492":1}}],["приходит",{"2":{"145":1,"297":1,"359":1,"362":1}}],["приходится",{"2":{"96":1,"122":1,"152":1,"160":2,"164":1,"179":1,"360":1,"430":1,"453":1}}],["приходите",{"2":{"26":1}}],["приходу",{"2":{"332":1}}],["приходя",{"2":{"483":1}}],["приходятся",{"2":{"478":1,"482":1}}],["приходят",{"2":{"260":1,"450":1}}],["приходящих",{"2":{"138":1}}],["приманка",{"0":{"278":1,"283":1}}],["прим",{"2":{"178":1}}],["примитивах",{"2":{"474":1}}],["примитивам",{"2":{"130":2}}],["примитивов",{"2":{"474":1}}],["примитивные",{"2":{"166":1,"358":1,"478":1}}],["примите",{"2":{"160":1,"418":1}}],["примет",{"2":{"156":1,"354":1}}],["примечание",{"2":{"142":1,"348":1,"358":1}}],["примечателен",{"2":{"32":1}}],["применены",{"2":{"452":1}}],["применен",{"2":{"331":1,"550":1}}],["применено",{"2":{"241":1}}],["примененными",{"2":{"185":1}}],["применена",{"2":{"182":1,"269":1}}],["применений",{"2":{"340":1,"359":1}}],["применению",{"2":{"156":1}}],["применения",{"2":{"153":1,"198":1,"210":1,"246":1,"248":1,"271":1,"295":1,"346":1,"354":1,"357":1,"396":1,"442":1}}],["применением",{"2":{"348":1,"397":1}}],["применение",{"2":{"138":1,"181":1,"183":1,"185":1,"194":1,"201":1,"202":1,"207":1,"235":1,"247":1,"291":2,"304":1,"538":1}}],["применении",{"2":{"96":1,"130":1,"181":1,"446":1}}],["применив",{"2":{"458":1}}],["применительно",{"2":{"291":1}}],["применить",{"2":{"96":1,"188":1,"229":1,"320":1,"322":1,"331":1,"333":1,"350":1,"354":1,"361":1,"397":1,"444":1}}],["применили",{"2":{"186":1,"188":1,"273":1,"362":1,"371":1,"372":1}}],["применима",{"2":{"243":1}}],["применимо",{"2":{"237":1}}],["применимы",{"2":{"201":1}}],["применим",{"2":{"181":1,"195":1,"218":1,"305":1,"338":1,"348":1,"364":1,"368":1,"422":1}}],["применяют",{"2":{"338":1,"436":1,"476":1}}],["применяются",{"2":{"291":1}}],["применяя",{"2":{"187":1,"271":1,"330":1,"446":1}}],["применяться",{"2":{"180":1,"191":1,"192":1,"254":1,"582":1}}],["применять",{"2":{"156":1,"182":1,"188":1,"191":1,"200":1,"209":1,"235":1,"304":1,"445":1,"468":1}}],["применяет",{"2":{"232":1,"272":1}}],["применяется",{"2":{"123":1,"130":2,"160":1,"201":1,"227":1,"232":1,"271":1,"295":1,"415":1}}],["применяемая",{"2":{"362":1}}],["применяемых",{"2":{"181":1,"345":1}}],["применяем",{"2":{"41":1,"316":1,"450":1}}],["примеры",{"2":{"145":1,"150":1,"169":1,"181":1,"233":1,"235":1,"236":1,"238":1,"255":1,"258":1,"275":1,"290":1,"304":2,"348":1,"383":1,"390":1,"407":1,"411":1,"446":1,"468":1,"491":1}}],["примеров",{"0":{"379":1},"2":{"130":1,"140":1,"156":1,"158":1,"160":1,"178":1,"191":1,"197":1,"239":1,"257":1,"285":1,"290":1,"312":1,"317":1,"375":1,"379":1,"413":1,"422":1,"443":1,"446":1,"447":1}}],["примером",{"2":{"67":1,"272":1,"319":1,"351":1,"414":1,"462":1}}],["примеру",{"2":{"96":1,"156":1,"187":1,"213":1,"452":1}}],["примере",{"2":{"17":1,"118":1,"128":1,"149":1,"156":1,"157":1,"160":1,"168":1,"179":1,"181":1,"198":1,"218":1,"222":1,"223":1,"226":2,"227":1,"228":1,"241":1,"242":1,"273":1,"277":1,"284":1,"298":1,"299":1,"300":1,"306":1,"309":1,"310":1,"311":2,"314":2,"315":1,"322":1,"325":1,"329":1,"337":2,"341":1,"346":1,"359":1,"360":2,"362":1,"369":1,"401":1,"413":1,"419":2,"422":1,"445":1,"455":1,"465":1}}],["примерное",{"2":{"327":1}}],["примерно",{"2":{"14":1,"17":1,"26":2,"48":1,"96":1,"106":1,"122":1,"179":2,"221":1,"301":1,"312":1,"327":1,"337":1,"362":2,"369":1,"415":1,"420":1,"455":1,"462":1,"463":1,"478":1,"481":1,"483":1,"492":1}}],["примерный",{"2":{"5":1}}],["примерами",{"2":{"168":1,"181":1,"291":1,"399":1,"404":1,"456":1}}],["примерам",{"2":{"142":1,"210":1,"326":1,"377":1,"397":1}}],["примерах",{"2":{"129":1,"166":1,"207":1,"212":1,"231":1,"246":1,"293":1,"319":1,"330":1,"348":1,"359":1,"397":1,"399":1,"404":1,"413":1,"420":1,"542":1}}],["примера",{"2":{"4":1,"143":1,"160":1,"180":1,"185":1,"194":1,"196":1,"227":1,"233":1,"234":1,"241":1,"271":1,"276":1,"290":1,"297":1,"299":1,"301":1,"312":1,"314":1,"322":3,"328":1,"336":1,"337":1,"347":1,"404":1,"408":1,"409":1,"422":1,"448":1,"455":1,"463":1}}],["пример",{"0":{"365":1,"446":1},"1":{"366":1,"367":1,"368":1},"2":{"3":1,"14":1,"17":1,"112":1,"122":2,"125":1,"127":1,"128":2,"129":1,"131":1,"146":1,"148":1,"157":1,"160":1,"165":1,"166":1,"167":1,"168":1,"185":1,"197":1,"198":1,"215":1,"216":1,"217":1,"219":1,"225":1,"226":1,"227":1,"228":3,"232":2,"234":2,"236":1,"242":2,"243":2,"252":1,"254":1,"256":1,"257":1,"258":2,"260":1,"264":1,"265":1,"267":1,"271":1,"276":1,"277":1,"283":1,"284":1,"296":3,"298":1,"299":1,"300":2,"301":1,"308":1,"311":1,"314":1,"322":1,"329":1,"336":1,"337":3,"348":1,"357":3,"358":2,"362":2,"363":1,"364":1,"368":1,"396":2,"407":1,"410":2,"413":1,"416":1,"438":1,"441":1,"446":1,"449":1,"452":1,"453":1,"454":1,"455":1,"464":1,"478":1,"577":1}}],["привыкли",{"2":{"316":1}}],["привычный",{"2":{"330":1}}],["привычным",{"2":{"212":1,"466":1}}],["привычными",{"2":{"201":1}}],["привычнее",{"2":{"117":1}}],["привлечь",{"2":{"306":1}}],["привлекает",{"2":{"241":1}}],["привлекательными",{"2":{"96":1}}],["приводящую",{"2":{"448":1}}],["приводятся",{"2":{"383":1}}],["приводят",{"2":{"232":1,"249":1,"350":1}}],["приводит",{"2":{"421":1,"448":1,"453":1}}],["приводится",{"2":{"202":1,"250":1}}],["приватные",{"2":{"313":1}}],["приватный",{"2":{"145":1}}],["приватному",{"2":{"218":2}}],["привяжем",{"2":{"187":1}}],["привязывайтесь",{"2":{"487":1}}],["привязывание",{"2":{"363":1}}],["привязывается",{"2":{"142":1,"319":1}}],["привязки",{"2":{"406":1}}],["привязку",{"2":{"359":1}}],["привязке",{"2":{"261":1}}],["привязанной",{"2":{"413":1}}],["привязанный",{"2":{"362":1}}],["привязанные",{"2":{"181":1}}],["привязана",{"2":{"188":1,"478":1}}],["приветствуется",{"2":{"500":1}}],["привет",{"2":{"328":1,"329":1}}],["привел",{"2":{"168":1}}],["привели",{"2":{"160":2,"235":1}}],["привело",{"2":{"155":1,"363":1}}],["приведет",{"2":{"152":1,"232":1,"246":1,"311":1,"319":1,"453":1}}],["приведем",{"2":{"129":1,"131":1,"194":1,"217":1,"242":1,"288":1,"296":1,"357":2}}],["приведена",{"2":{"369":1}}],["приведенной",{"2":{"309":1}}],["приведенном",{"2":{"299":1}}],["приведенного",{"2":{"276":1}}],["приведенным",{"2":{"366":1}}],["приведенные",{"2":{"169":1,"468":1}}],["приведенный",{"2":{"126":1,"215":1,"223":1,"308":1,"422":1,"452":1}}],["приведены",{"2":{"145":1,"181":1,"255":1,"411":1,"464":1}}],["приведен",{"2":{"125":1,"126":1,"145":1,"146":1,"198":1,"220":1,"253":1,"404":1,"413":1,"422":1}}],["привести",{"2":{"73":1,"131":1,"160":1,"195":1,"196":1,"236":1,"257":1,"291":1,"306":1,"315":1,"357":1,"442":2,"449":1}}],["прикосновений",{"2":{"553":1}}],["прикосновением",{"2":{"269":1}}],["прикладном",{"2":{"546":1}}],["прикладного",{"2":{"17":1,"197":1,"360":1}}],["прикладную",{"2":{"369":1}}],["прикрыть",{"2":{"368":1}}],["прикрываются",{"2":{"96":1}}],["прикрепив",{"2":{"356":1}}],["прикрепить",{"2":{"314":1}}],["прикрепляем",{"2":{"198":1}}],["прикрепляя",{"2":{"128":1}}],["прилагает",{"2":{"327":1}}],["приложить",{"2":{"291":1}}],["приложений",{"0":{"483":1},"1":{"484":1,"485":1,"486":1,"487":1,"488":1,"489":1},"2":{"123":1,"142":1,"152":1,"153":1,"155":2,"156":5,"158":2,"177":1,"191":2,"197":1,"199":1,"235":1,"240":1,"279":1,"289":1,"291":7,"293":1,"302":1,"304":2,"313":1,"318":1,"323":1,"325":1,"348":2,"376":2,"377":1,"386":1,"399":2,"414":1,"415":2,"416":1,"419":1,"421":2,"423":1,"433":1,"436":1,"442":1,"455":1,"463":1,"467":1,"476":2,"492":1}}],["приложению",{"2":{"112":1,"142":1,"149":1,"159":1,"180":2,"186":1,"189":1,"262":1,"299":1,"313":1,"314":1,"318":1,"326":1,"331":1,"333":1,"336":1,"356":1,"365":1,"372":1,"400":1,"404":1,"405":1,"416":1,"422":1,"436":1,"477":1,"478":1,"570":1}}],["приложениями",{"2":{"145":2,"155":1,"202":1,"266":1,"291":3,"298":1,"301":1,"302":2,"397":1,"399":1,"422":2,"423":1}}],["приложениям",{"2":{"132":1,"346":1,"397":1}}],["приложениях",{"2":{"129":1,"182":2,"183":1,"203":1,"207":2,"234":1,"237":2,"244":1,"256":1,"258":1,"263":1,"266":1,"277":1,"325":1,"348":1,"414":1,"416":1,"423":1,"445":1}}],["приложения",{"0":{"70":1,"127":1,"139":1,"141":1,"143":1,"152":1,"188":1,"271":1,"289":1,"369":1,"370":1,"386":1,"387":1,"391":1,"397":1,"426":1,"429":1,"446":1,"536":1,"569":1},"1":{"140":1,"141":1,"142":2,"143":1,"144":2,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1,"151":1,"152":1,"153":1,"154":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"398":1,"399":1,"400":1,"401":1,"402":1,"403":1,"404":1,"405":1,"406":1,"407":1,"408":1,"409":1,"410":1,"411":1,"412":1,"413":1,"414":1,"415":1,"416":1,"417":1,"418":1,"419":1,"420":1,"421":1,"422":1,"423":1,"424":1,"427":1,"428":1,"570":1,"571":1,"572":1,"573":1},"2":{"11":1,"59":1,"83":1,"113":1,"122":1,"126":4,"127":5,"128":3,"134":1,"138":1,"139":6,"141":3,"142":1,"143":4,"144":2,"145":3,"146":1,"147":1,"151":2,"152":1,"153":3,"154":1,"155":2,"156":6,"157":5,"158":4,"159":1,"167":1,"168":1,"177":2,"179":1,"180":7,"181":2,"182":1,"184":1,"185":3,"186":1,"187":1,"189":3,"190":2,"194":2,"196":1,"198":2,"199":2,"200":1,"205":1,"206":1,"209":1,"218":1,"226":2,"231":1,"235":1,"253":1,"256":1,"258":1,"263":2,"265":2,"268":1,"270":1,"271":1,"273":3,"287":1,"289":2,"291":8,"292":2,"293":3,"294":3,"295":4,"296":4,"297":1,"298":5,"299":3,"300":1,"301":2,"303":1,"304":3,"305":1,"306":1,"311":5,"312":1,"313":2,"314":1,"317":1,"319":5,"323":1,"325":2,"326":1,"327":3,"329":1,"331":1,"333":3,"336":1,"337":1,"341":1,"344":1,"345":1,"346":3,"347":2,"350":2,"351":2,"353":1,"354":1,"356":2,"357":2,"360":2,"364":2,"365":2,"368":4,"369":3,"370":1,"371":1,"375":1,"385":1,"389":1,"396":1,"397":1,"399":8,"401":3,"404":2,"407":2,"414":2,"415":1,"416":1,"417":1,"418":2,"419":2,"420":2,"421":2,"422":6,"423":1,"424":1,"426":2,"429":3,"436":7,"437":1,"438":1,"442":2,"444":2,"445":3,"446":5,"456":1,"467":1,"474":1,"476":6,"477":1,"479":1,"482":1,"483":3,"484":1,"492":5,"501":1,"538":1,"540":1,"541":3,"542":4,"545":1,"570":5,"572":1,"573":3,"587":1,"588":1,"590":3}}],["приложением",{"2":{"6":1,"139":1,"151":1,"157":1,"237":1,"239":1,"249":1,"265":1,"299":1,"348":1,"375":1,"492":1,"501":2}}],["приложение",{"0":{"126":1,"185":1,"393":1,"402":1},"1":{"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"186":1,"187":1,"188":1},"2":{"6":1,"11":1,"50":1,"70":1,"104":1,"122":1,"124":2,"127":1,"128":1,"132":1,"142":2,"143":4,"144":1,"145":3,"149":1,"151":3,"152":1,"155":1,"156":4,"157":2,"158":2,"159":2,"177":2,"179":1,"180":4,"181":1,"184":1,"185":4,"187":1,"188":4,"189":2,"190":2,"194":1,"228":1,"232":1,"249":2,"255":1,"258":2,"273":1,"286":1,"289":3,"291":9,"293":1,"294":2,"295":1,"297":1,"298":6,"301":1,"302":1,"303":1,"304":1,"309":1,"314":1,"316":1,"319":1,"327":2,"330":1,"331":1,"333":1,"336":1,"337":2,"340":1,"344":1,"348":1,"354":1,"369":1,"370":1,"371":1,"391":1,"397":2,"399":1,"401":1,"402":1,"404":1,"406":1,"410":1,"414":1,"416":1,"420":3,"421":1,"422":1,"423":2,"426":1,"435":2,"436":2,"446":4,"456":1,"476":3,"477":1,"481":1,"490":1,"491":1,"492":3,"538":2,"542":1,"586":1,"587":1}}],["приложении",{"0":{"157":1},"1":{"158":1},"2":{"5":1,"11":1,"83":1,"111":1,"128":1,"156":1,"157":1,"160":1,"181":1,"183":1,"185":1,"186":1,"187":1,"199":2,"202":1,"208":1,"218":1,"219":1,"225":1,"255":1,"291":1,"306":1,"311":1,"312":1,"314":1,"316":1,"320":1,"327":1,"329":1,"330":1,"333":1,"341":1,"353":1,"354":2,"357":1,"368":3,"369":2,"388":1,"393":1,"401":1,"402":1,"406":1,"413":1,"416":2,"419":1,"420":1,"426":2,"438":1,"451":1,"478":3,"481":1,"492":1,"547":1,"550":1,"591":1}}],["приличных",{"2":{"65":1}}],["принести",{"2":{"288":1,"478":1}}],["приняли",{"2":{"179":2,"334":1,"335":1}}],["принят",{"2":{"353":1,"368":1}}],["принятие",{"2":{"247":1}}],["принятия",{"2":{"64":1,"247":1,"265":1,"444":1}}],["принять",{"2":{"228":1,"248":1,"279":1,"280":1,"298":1,"354":2,"368":1}}],["принято",{"2":{"158":1,"180":1,"222":1,"260":1,"264":2,"293":1,"457":1}}],["приняты",{"2":{"155":1}}],["принадлежность",{"2":{"420":1}}],["принадлежат",{"2":{"243":1,"478":1}}],["принадлежать",{"2":{"16":1}}],["принадлежит",{"2":{"199":1,"419":1}}],["принадлежт",{"2":{"114":1}}],["принимающей",{"2":{"338":1}}],["принимающую",{"2":{"309":1,"358":1,"365":1}}],["принимающий",{"2":{"125":1,"310":1,"345":1,"407":1}}],["принимают",{"2":{"197":1,"359":1,"362":1}}],["принимаемого",{"2":{"411":1}}],["принимает",{"2":{"219":1,"321":2,"357":1,"358":1,"362":1,"364":1,"367":1,"368":1,"369":1,"411":1,"412":1,"415":1}}],["принимается",{"2":{"131":1,"293":1}}],["принимаешь",{"2":{"98":1}}],["принимать",{"2":{"22":1,"191":1,"260":1,"364":1,"481":1,"535":1}}],["принципом",{"2":{"199":1,"236":1,"241":1}}],["принципов",{"0":{"193":1},"1":{"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1},"2":{"175":1,"191":2,"192":1,"201":1,"239":1,"375":1}}],["принципу",{"2":{"197":1,"422":1}}],["принципы",{"0":{"191":1,"192":1,"240":1,"249":1,"383":1,"538":1},"1":{"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":1,"203":1,"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"232":1,"233":1,"234":1,"235":1,"236":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1},"2":{"181":1,"185":2,"188":1,"191":2,"192":2,"193":2,"201":1,"235":1,"240":2,"244":2,"248":1,"249":1,"309":1,"320":1,"331":1,"332":1,"348":1,"356":1,"363":1,"383":1,"445":1,"446":1}}],["принципах",{"2":{"237":1,"268":1,"273":1,"376":1}}],["принципами",{"2":{"194":1,"241":1,"245":1}}],["принципа",{"2":{"181":1,"194":1,"196":1,"198":2,"201":1,"222":1,"243":1}}],["принципе",{"2":{"114":1,"188":1,"201":1,"482":1}}],["принцип",{"0":{"196":1},"2":{"2":1,"125":1,"184":1,"194":3,"195":3,"196":2,"197":2,"198":1,"199":1,"200":3,"201":2,"217":1,"223":1,"241":1,"242":1,"244":1,"248":1,"249":1,"306":1,"356":1,"363":2}}],["при",{"0":{"465":1,"569":1},"1":{"570":1,"571":1,"572":1,"573":1},"2":{"2":1,"22":1,"30":1,"39":2,"40":1,"41":5,"47":1,"59":2,"62":1,"67":1,"74":1,"83":1,"88":1,"89":1,"95":1,"96":5,"101":1,"106":1,"111":2,"114":2,"121":1,"122":1,"123":4,"124":1,"125":2,"129":2,"130":3,"137":1,"138":1,"142":1,"144":2,"149":1,"151":1,"153":2,"154":1,"155":1,"156":6,"157":1,"158":2,"160":1,"162":1,"164":2,"166":1,"168":3,"174":1,"176":1,"179":2,"180":4,"182":1,"183":4,"184":1,"185":1,"186":1,"187":3,"191":1,"192":1,"197":1,"202":2,"212":2,"222":1,"226":1,"228":3,"231":1,"232":1,"233":2,"234":1,"235":1,"239":1,"242":1,"243":2,"244":1,"246":1,"248":1,"253":1,"254":3,"255":1,"257":1,"258":2,"260":2,"261":1,"266":1,"267":1,"268":1,"269":1,"272":1,"273":3,"277":1,"279":1,"282":3,"284":1,"285":2,"289":1,"291":2,"293":2,"295":1,"298":3,"299":1,"300":1,"306":2,"311":1,"314":1,"319":3,"320":1,"322":2,"323":1,"327":2,"328":1,"329":2,"330":1,"335":1,"336":1,"337":1,"348":1,"356":1,"357":4,"358":1,"359":1,"360":1,"362":1,"364":1,"367":2,"369":1,"376":1,"396":4,"400":3,"401":1,"402":2,"404":1,"407":4,"408":3,"413":1,"415":2,"416":3,"418":1,"421":1,"422":4,"424":1,"426":2,"430":2,"432":1,"435":1,"438":1,"444":2,"445":1,"446":2,"447":1,"448":3,"449":1,"451":1,"452":1,"454":2,"455":2,"462":1,"465":2,"466":1,"467":1,"474":1,"476":2,"477":2,"479":2,"482":3,"483":1,"490":1,"491":1,"492":8,"501":2,"508":2,"535":1,"537":1,"538":1,"541":1,"542":3,"545":1,"547":1,"550":1,"573":1,"580":1,"582":1,"588":1,"590":1}}],["чрезвычайно",{"2":{"212":1,"231":1}}],["чрезмерного",{"2":{"200":1,"438":1}}],["чрезмерная",{"2":{"96":1}}],["члену",{"2":{"227":1}}],["членов",{"2":{"160":1}}],["член",{"2":{"160":1,"315":1}}],["члены",{"2":{"129":1,"313":1,"315":1}}],["членами",{"2":{"306":1,"315":2,"423":1}}],["членам",{"2":{"160":1,"313":1,"466":1}}],["члена",{"2":{"111":1,"343":1}}],["чаще",{"2":{"162":1,"167":1,"191":1,"199":1,"201":1,"203":1,"250":1,"277":1,"413":1,"448":1,"467":1,"483":1}}],["чате",{"2":{"502":1}}],["чата",{"2":{"255":1}}],["чат",{"0":{"99":1},"2":{"99":1}}],["частях",{"2":{"191":1,"235":2,"260":1,"333":1,"338":1}}],["частями",{"2":{"224":1,"265":1,"354":1}}],["частям",{"2":{"26":1}}],["частным",{"2":{"320":1}}],["частных",{"2":{"148":1}}],["частной",{"2":{"145":1}}],["частности",{"2":{"14":1,"245":1,"291":1,"304":1,"312":1,"340":1,"348":1,"457":1,"575":1}}],["части",{"2":{"123":1,"142":1,"179":1,"184":1,"191":1,"194":4,"200":1,"213":1,"228":2,"242":1,"251":1,"260":1,"261":1,"263":2,"264":1,"271":1,"272":1,"273":1,"298":2,"311":1,"326":1,"352":1,"362":1,"416":1,"436":4,"463":1,"476":4,"491":1,"545":1}}],["частичного",{"2":{"348":1}}],["частичной",{"2":{"226":1}}],["частичном",{"2":{"226":1}}],["частично",{"2":{"39":1,"182":1,"271":1,"289":1,"478":3,"482":2}}],["частота",{"2":{"483":1}}],["часто",{"2":{"50":1,"101":1,"142":5,"156":2,"160":1,"161":1,"164":2,"168":1,"176":1,"177":1,"179":1,"181":1,"187":1,"191":1,"197":1,"202":5,"210":1,"212":2,"222":1,"224":1,"226":1,"239":1,"249":1,"252":3,"256":1,"263":2,"264":1,"267":1,"268":1,"275":2,"277":2,"278":2,"281":2,"284":1,"285":1,"293":1,"294":1,"308":1,"376":1,"410":1,"413":3,"414":1,"421":1,"426":1,"442":1,"444":1,"474":1,"491":1,"502":2,"575":1}}],["частей",{"2":{"28":1,"200":1,"231":1,"315":1,"327":1,"345":1,"346":1,"573":1}}],["частью",{"2":{"105":1,"134":1,"145":1,"157":1,"163":1,"198":1,"201":1,"202":1,"231":1,"233":1,"242":1,"256":1,"273":1,"293":1,"321":1,"334":1,"356":1,"368":1,"422":1,"463":1,"478":1,"491":1}}],["часть",{"2":{"2":1,"6":1,"89":1,"132":1,"138":2,"156":1,"159":1,"186":1,"187":2,"191":1,"198":1,"241":1,"273":1,"307":1,"343":1,"399":1,"416":1,"419":1,"430":1,"436":1,"444":1,"455":1,"467":1,"474":1,"476":1,"570":2}}],["чувствительный",{"2":{"420":1}}],["чувствительна",{"2":{"247":1}}],["чувствует",{"2":{"249":1}}],["чувствовать",{"2":{"248":1,"249":1}}],["чувство",{"2":{"248":1,"258":1}}],["чужих",{"2":{"490":1}}],["чужим",{"2":{"466":1}}],["чужие",{"2":{"231":1}}],["чужой",{"2":{"96":1}}],["чужого",{"2":{"96":1}}],["чуть",{"2":{"12":1,"492":1}}],["чёткого",{"2":{"73":1}}],["чтению",{"2":{"251":1}}],["чтения",{"2":{"160":2,"198":1,"319":1,"321":1,"337":1}}],["чтение",{"2":{"59":1}}],["что",{"0":{"64":1,"141":1,"202":1,"381":1,"399":1,"444":1,"445":1,"457":1},"1":{"142":1,"382":1,"383":1,"384":1,"385":1,"386":1,"387":1,"388":1,"389":1,"390":1,"391":1,"392":1,"393":1},"2":{"3":3,"6":1,"11":2,"12":1,"17":1,"22":3,"25":1,"26":2,"32":1,"33":2,"35":1,"41":2,"43":1,"44":1,"48":1,"56":1,"62":2,"63":1,"73":1,"85":1,"88":1,"96":10,"98":1,"102":1,"104":2,"105":1,"106":1,"111":2,"114":1,"121":1,"122":2,"123":9,"124":2,"125":1,"129":1,"131":1,"132":3,"138":2,"139":1,"142":4,"143":2,"144":2,"145":3,"151":1,"152":1,"154":5,"156":14,"157":3,"158":5,"159":6,"160":12,"163":2,"164":2,"165":1,"166":1,"167":2,"168":1,"176":2,"178":3,"179":6,"180":7,"181":2,"182":1,"183":6,"184":4,"186":3,"187":9,"188":5,"191":1,"194":2,"195":1,"196":3,"197":1,"198":4,"199":2,"201":3,"202":2,"207":1,"208":1,"209":1,"211":2,"212":2,"213":3,"215":2,"217":1,"218":4,"220":3,"221":1,"222":1,"223":1,"225":1,"226":8,"227":4,"228":10,"230":2,"231":2,"232":2,"233":3,"234":10,"235":1,"236":1,"237":3,"239":3,"240":3,"241":4,"242":4,"243":2,"244":1,"246":2,"247":1,"248":1,"249":4,"254":2,"255":3,"256":1,"257":2,"258":4,"260":1,"261":2,"266":2,"267":1,"268":1,"271":2,"272":3,"273":1,"275":1,"276":1,"277":1,"278":2,"279":2,"280":1,"284":1,"285":1,"287":1,"288":3,"289":2,"291":5,"293":3,"297":2,"298":5,"299":1,"301":1,"303":2,"306":4,"308":3,"309":1,"311":1,"312":1,"313":1,"314":2,"315":2,"319":6,"320":1,"321":1,"322":1,"324":3,"327":10,"328":2,"329":1,"332":3,"333":2,"334":1,"335":1,"336":1,"338":4,"339":2,"340":2,"341":2,"345":4,"347":2,"350":1,"352":3,"353":1,"357":2,"358":2,"359":3,"360":1,"362":4,"363":1,"364":1,"368":2,"369":3,"372":2,"377":1,"382":1,"394":1,"396":3,"397":1,"399":6,"400":2,"401":1,"404":7,"407":4,"409":1,"410":5,"412":1,"413":1,"414":1,"415":5,"416":4,"418":1,"419":2,"420":3,"421":4,"422":2,"426":1,"429":2,"436":6,"442":2,"444":6,"445":2,"446":2,"447":3,"448":8,"449":2,"450":1,"451":2,"452":1,"453":7,"454":2,"455":1,"457":3,"458":2,"462":2,"463":4,"465":4,"466":4,"469":4,"474":1,"476":3,"477":2,"478":16,"479":3,"482":3,"483":4,"484":1,"490":3,"491":4,"492":4,"541":3,"561":1,"578":1,"591":1}}],["чтобы",{"0":{"244":1,"377":1},"2":{"2":1,"7":1,"16":1,"21":1,"56":1,"73":1,"83":1,"89":1,"95":1,"96":1,"98":1,"112":2,"113":1,"123":1,"133":1,"142":1,"144":1,"146":1,"157":1,"159":2,"160":4,"163":1,"167":1,"168":1,"174":2,"176":2,"178":1,"179":5,"180":1,"181":1,"182":1,"183":2,"184":3,"185":2,"186":1,"187":4,"188":3,"189":1,"195":1,"201":1,"211":1,"212":3,"214":1,"219":2,"223":3,"224":1,"226":1,"227":1,"228":1,"229":1,"231":2,"233":3,"235":1,"238":1,"241":2,"242":1,"247":2,"248":1,"252":1,"254":2,"255":2,"259":1,"261":1,"265":1,"268":2,"271":1,"273":3,"276":1,"278":2,"284":1,"289":2,"290":1,"291":3,"297":1,"298":2,"299":2,"301":1,"303":1,"305":1,"306":2,"307":1,"308":2,"312":1,"314":2,"318":1,"319":2,"320":2,"321":1,"326":2,"327":4,"331":2,"332":1,"333":1,"334":1,"335":1,"338":1,"339":1,"341":2,"345":3,"347":1,"348":1,"349":1,"350":2,"351":1,"354":3,"356":1,"357":1,"359":1,"360":1,"362":1,"364":1,"366":1,"368":6,"370":1,"371":1,"372":1,"392":1,"396":1,"397":2,"398":1,"399":1,"401":1,"402":1,"403":1,"404":1,"406":1,"407":3,"408":3,"410":1,"413":1,"415":1,"416":1,"418":1,"420":1,"422":3,"424":1,"425":2,"426":1,"429":2,"432":1,"435":1,"438":1,"443":1,"447":2,"448":1,"449":3,"450":2,"451":2,"453":1,"454":2,"456":2,"458":1,"462":3,"465":1,"468":1,"476":2,"478":1,"481":1,"482":2,"491":2,"492":5,"538":1,"541":2,"549":1,"562":1}}],["чипом",{"2":{"421":1}}],["чипы",{"0":{"253":1}}],["читать",{"2":{"491":1}}],["читателя",{"2":{"420":2}}],["читателю",{"2":{"4":1,"300":1}}],["читают",{"2":{"279":1}}],["читаемая",{"2":{"491":1}}],["читаемом",{"2":{"474":1}}],["читаем",{"2":{"448":1}}],["читаемым",{"2":{"174":1,"201":1}}],["читает",{"2":{"276":1}}],["читается",{"2":{"122":1,"184":1}}],["читабельней",{"2":{"114":1}}],["чище",{"2":{"83":1}}],["чисел",{"2":{"142":2,"234":2,"251":1,"261":1,"449":1,"474":1,"575":1}}],["чистого",{"2":{"538":1}}],["чисто",{"2":{"399":1,"483":1}}],["чистом",{"2":{"327":1,"328":1,"369":1,"422":1,"490":1,"538":1}}],["чистоте",{"2":{"201":1}}],["чистоту",{"2":{"181":1,"267":1}}],["чистые",{"2":{"250":1}}],["чистым",{"2":{"191":1,"201":1,"306":1}}],["чистый",{"2":{"68":1,"89":1,"195":1,"217":1,"487":1}}],["чистая",{"2":{"166":1,"306":1,"576":1}}],["чистую",{"2":{"141":1}}],["чистим",{"2":{"105":1}}],["числовом",{"2":{"448":1}}],["число",{"2":{"111":1,"117":1,"319":1,"413":1,"446":1,"483":1}}],["числом",{"2":{"47":1,"114":1,"233":1}}],["числа",{"2":{"106":1,"157":1,"166":1,"232":1,"258":1,"261":1,"413":1,"446":1,"573":1}}],["числе",{"2":{"7":1,"13":1,"22":1,"25":1,"132":1,"233":1,"410":1,"542":1}}],["честь",{"2":{"279":1}}],["чекбокс",{"2":{"252":1,"253":1}}],["чекбоксы",{"0":{"252":1},"2":{"252":1}}],["человеческий",{"2":{"194":1}}],["человеческой",{"2":{"142":1}}],["человеку",{"2":{"142":1}}],["человекоемкая",{"2":{"457":1}}],["человекоемкой",{"2":{"191":1}}],["человеком",{"2":{"239":1,"444":1}}],["человеко",{"2":{"106":1,"237":1}}],["человека",{"2":{"67":1}}],["человек",{"2":{"26":1,"193":1,"201":1,"430":1,"491":2}}],["черной",{"2":{"327":1}}],["черные",{"2":{"197":1}}],["чередоваться",{"2":{"483":1}}],["черед",{"2":{"231":1}}],["через",{"0":{"535":1},"1":{"536":1},"2":{"2":1,"22":1,"34":2,"35":1,"36":1,"40":1,"41":1,"53":1,"56":2,"59":2,"85":1,"89":1,"96":3,"113":1,"114":1,"122":1,"123":5,"124":1,"126":1,"138":1,"142":1,"143":1,"144":1,"145":2,"146":1,"151":1,"152":1,"178":1,"199":1,"201":1,"208":1,"209":1,"211":1,"213":1,"221":2,"223":1,"242":2,"269":1,"291":1,"298":3,"299":1,"300":1,"301":1,"310":1,"313":1,"314":1,"315":2,"329":1,"331":1,"336":2,"337":1,"340":1,"353":1,"359":1,"360":1,"368":1,"369":2,"396":1,"409":1,"413":1,"420":2,"422":1,"426":1,"429":1,"430":1,"437":1,"438":2,"446":1,"459":1,"460":1,"474":2,"478":1,"483":1,"490":1,"508":1,"515":1,"517":1,"531":3,"538":1,"543":1,"549":1,"581":1,"591":2}}],["черты",{"2":{"195":1,"409":1}}],["чертой",{"2":{"143":1}}],["чертежа",{"2":{"74":1}}],["чего",{"0":{"65":1},"2":{"40":1,"96":1,"123":1,"249":1,"261":1,"280":1,"284":1,"401":1,"416":1,"474":1,"477":1,"478":1,"482":1,"575":1}}],["четкая",{"2":{"438":1}}],["четких",{"2":{"265":1}}],["четкий",{"2":{"251":1}}],["четкую",{"2":{"137":1}}],["четкого",{"2":{"327":1}}],["четкое",{"2":{"155":1,"180":1,"436":1,"476":1}}],["четкость",{"2":{"138":1}}],["четко",{"2":{"9":1,"159":1,"197":1,"240":1,"241":2,"299":1,"314":1,"350":1,"416":1}}],["четырех",{"2":{"28":1,"142":1}}],["четыре",{"2":{"23":1,"114":1,"123":1,"142":1,"543":1}}],["чему",{"2":{"268":1,"311":1,"359":1,"371":1}}],["чем",{"2":{"2":1,"47":1,"96":1,"114":1,"122":1,"154":1,"156":1,"160":1,"167":1,"176":1,"179":1,"180":1,"188":1,"200":2,"202":1,"218":1,"233":2,"234":1,"236":1,"237":1,"240":1,"246":1,"248":3,"269":1,"282":1,"291":3,"298":1,"303":1,"316":1,"324":1,"327":4,"339":1,"341":1,"343":1,"352":1,"357":1,"360":1,"371":1,"397":1,"399":2,"405":1,"406":1,"407":1,"408":1,"410":1,"416":1,"421":1,"422":1,"425":1,"429":2,"444":2,"445":1,"457":1,"463":1,"465":1,"469":1,"474":1,"478":1,"482":1,"483":1,"487":1,"490":1}}],["кб",{"2":{"579":1}}],["киты",{"2":{"541":1}}],["кебаба",{"2":{"266":1}}],["кем",{"2":{"156":1}}],["кстати",{"2":{"216":1}}],["квадратов",{"2":{"266":1}}],["квадрат",{"2":{"194":1}}],["кэша",{"2":{"588":1}}],["кэширующий",{"2":{"478":1}}],["кэшированный",{"2":{"299":1}}],["кэширования",{"2":{"291":1,"298":1,"299":1,"396":1,"588":1}}],["кэшированием",{"2":{"298":1}}],["кэширование",{"2":{"121":1,"399":1,"492":1,"588":1}}],["кэшировать",{"2":{"291":1,"298":1,"299":2}}],["кэшу",{"2":{"299":1}}],["кэш",{"2":{"226":1,"299":8,"588":1}}],["кэшем",{"2":{"573":1}}],["кэше",{"2":{"168":1,"299":1}}],["книжка",{"2":{"491":1}}],["книга",{"0":{"376":1,"381":1},"1":{"382":1,"383":1,"384":1,"385":1,"386":1,"387":1,"388":1,"389":1,"390":1,"391":1,"392":1,"393":1},"2":{"375":2,"376":1,"377":1,"378":1,"422":1,"491":2,"502":1}}],["книгами",{"2":{"242":1}}],["книгу",{"0":{"378":1},"2":{"248":1}}],["книг",{"2":{"242":1}}],["книги",{"0":{"374":1,"377":1},"2":{"140":1,"151":1,"158":1,"161":1,"179":1,"181":1,"183":1,"191":2,"198":1,"202":2,"235":2,"238":1,"239":1,"242":1,"268":1,"271":1,"300":1,"326":1,"348":1,"350":1,"368":1,"369":1,"377":1,"379":1,"380":2,"413":1,"415":1,"419":1,"422":2,"443":1,"466":1,"491":2}}],["книге",{"0":{"169":1},"1":{"170":1,"171":1,"172":1,"173":1,"174":1},"2":{"131":1,"153":1,"155":3,"156":1,"160":2,"167":1,"169":2,"175":1,"178":2,"183":1,"197":1,"199":1,"203":1,"221":1,"223":1,"228":2,"238":1,"305":1,"360":1,"362":2,"363":1,"377":3,"407":1}}],["кнопок",{"2":{"241":1,"284":1,"285":2,"368":1}}],["кнопку",{"2":{"168":1,"179":1,"187":1,"269":1,"298":2,"299":1,"306":1,"336":1,"453":3,"483":1}}],["кнопкам",{"2":{"483":1}}],["кнопками",{"2":{"368":1}}],["кнопка",{"2":{"167":1,"188":1,"240":1,"246":2,"283":1,"298":4}}],["кнопке",{"2":{"167":1,"264":1,"307":1}}],["кнопкой",{"2":{"159":1,"296":1,"311":1}}],["кнопки",{"2":{"88":2,"241":2,"246":1,"252":1,"254":1,"285":2,"368":1,"420":1,"433":1,"476":1}}],["кусочки",{"2":{"483":1}}],["кучу",{"2":{"482":1}}],["куча",{"2":{"478":1}}],["кучи",{"2":{"474":1,"575":1}}],["кулер",{"2":{"430":1}}],["кулисами",{"2":{"227":1}}],["куда",{"2":{"242":1,"369":1,"416":1,"417":1,"430":1,"482":1}}],["купить",{"0":{"378":1},"2":{"152":2,"425":1}}],["куку",{"2":{"123":1}}],["курсы",{"2":{"237":1,"491":1}}],["курсор",{"2":{"100":1,"246":1}}],["курсов",{"2":{"64":1,"491":1}}],["курс",{"2":{"2":1,"483":1,"491":1}}],["кто",{"2":{"39":1,"73":1,"195":1,"226":1,"239":1,"457":1,"479":1,"482":1,"492":1}}],["креативности",{"2":{"269":1,"457":1}}],["креативность",{"2":{"249":1}}],["крутятся",{"2":{"430":1}}],["крутится",{"2":{"258":1}}],["кругозор",{"2":{"491":1}}],["круговой",{"2":{"369":2}}],["круга",{"2":{"286":1,"541":1}}],["круглой",{"2":{"253":1}}],["кружок",{"2":{"255":1,"258":1}}],["крупнейший",{"2":{"422":1}}],["крупные",{"2":{"275":1}}],["крупных",{"2":{"124":1,"177":1,"436":1,"444":1,"476":1}}],["крупномасштабного",{"2":{"389":1}}],["крупного",{"2":{"157":1,"255":1}}],["крупной",{"2":{"145":1}}],["криптовалюты",{"2":{"422":3}}],["криптографическими",{"2":{"422":1}}],["криптографические",{"2":{"422":1}}],["криптографическую",{"2":{"416":1}}],["криптографии",{"2":{"421":1}}],["криптография",{"2":{"123":1}}],["критериям",{"2":{"298":1,"301":1}}],["критериями",{"2":{"39":1}}],["критической",{"2":{"256":1}}],["критически",{"2":{"189":1,"369":1}}],["критичных",{"2":{"123":1}}],["критике",{"2":{"188":1}}],["критика",{"0":{"188":1,"370":1},"2":{"188":1}}],["кроулером",{"2":{"492":1}}],["крошкам",{"2":{"264":1}}],["крошки",{"0":{"264":1},"2":{"264":2}}],["кроче",{"2":{"242":1}}],["кровеносной",{"2":{"194":1}}],["кровлю",{"2":{"26":1}}],["кроссплатформенными",{"2":{"178":1}}],["кроме",{"2":{"74":1,"96":1,"111":1,"138":1,"160":3,"167":1,"179":1,"184":1,"200":1,"201":1,"217":1,"228":1,"260":1,"268":1,"277":1,"291":3,"296":1,"298":1,"325":1,"330":1,"336":1,"345":1,"371":1,"396":3,"409":1,"414":1,"429":1,"436":1,"459":1,"477":1,"478":2,"482":1,"484":1,"491":1,"492":2}}],["кроется",{"2":{"73":1}}],["края",{"2":{"246":1}}],["крайний",{"2":{"364":1}}],["крайние",{"2":{"341":1,"362":1}}],["крайних",{"2":{"223":2,"348":1,"445":1}}],["крайними",{"2":{"184":1,"413":1}}],["крайней",{"2":{"177":1,"215":1,"227":1,"232":1,"377":1}}],["кражей",{"2":{"123":1}}],["краткий",{"0":{"203":1},"1":{"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"232":1,"233":1,"234":1},"2":{"228":1,"253":1,"318":1}}],["кратким",{"2":{"126":1,"250":1,"296":1}}],["краткости",{"2":{"352":1,"359":1,"368":2,"419":1}}],["краткосрочной",{"2":{"202":1}}],["кратковременной",{"2":{"248":1}}],["кратковременную",{"2":{"248":1}}],["кратко",{"2":{"157":1,"176":1,"309":1}}],["краткого",{"2":{"142":1}}],["краткое",{"0":{"540":1},"2":{"118":1,"185":1,"209":1}}],["краткая",{"0":{"188":1},"2":{"47":1}}],["красное",{"2":{"447":1}}],["красным",{"2":{"301":1,"448":1}}],["красе",{"2":{"416":1}}],["красивую",{"2":{"490":1}}],["красиво",{"2":{"345":1,"492":1}}],["красивые",{"2":{"62":1}}],["красивый",{"2":{"26":1,"96":1}}],["красочный",{"2":{"273":1}}],["красоты",{"2":{"85":1}}],["клонирования",{"2":{"458":1}}],["клонируемого",{"2":{"338":1}}],["клонируем",{"2":{"120":1,"338":1}}],["клон",{"2":{"338":1}}],["клетки",{"2":{"194":1}}],["класть",{"2":{"426":1,"478":1}}],["классе",{"2":{"217":1}}],["классической",{"2":{"248":1}}],["классический",{"2":{"160":1,"283":1,"363":1,"491":1}}],["классически",{"2":{"72":1}}],["классических",{"2":{"47":1}}],["классическим",{"2":{"6":1}}],["классификация",{"2":{"293":1,"294":1,"295":1,"296":1}}],["классификаций",{"2":{"207":1}}],["классификаторов",{"2":{"253":1}}],["классифицируются",{"2":{"203":1}}],["классом",{"2":{"186":1,"330":1,"590":1}}],["классов",{"0":{"172":1},"2":{"22":1,"156":2,"168":1,"181":1,"182":1,"195":1,"197":1,"204":1,"363":1,"369":1,"451":1,"478":1,"483":1,"490":1,"542":1}}],["классы",{"2":{"181":1,"182":1,"183":1,"187":1,"228":1,"362":2,"368":1,"478":1}}],["классу",{"2":{"160":1,"218":1}}],["класс",{"2":{"96":1,"187":1,"196":1,"199":1,"212":2,"213":2,"215":1,"218":2,"259":1,"426":1,"506":1}}],["классами",{"2":{"312":1,"483":1}}],["классах",{"2":{"199":1}}],["класса",{"2":{"23":1,"212":3,"213":1,"221":1,"224":1,"338":1,"369":1,"478":1,"543":1}}],["клавиатуры",{"2":{"430":1}}],["клавиатуру",{"2":{"430":1}}],["клавиатурой",{"2":{"260":1}}],["клавиатура",{"2":{"248":1}}],["клавишу",{"2":{"185":1,"187":1}}],["клавиши",{"2":{"179":1,"252":1}}],["клавиш",{"2":{"98":1,"179":1,"248":1}}],["клавишей",{"2":{"98":1}}],["кладем",{"2":{"223":1}}],["кладет",{"2":{"123":1}}],["кладется",{"2":{"111":1}}],["ключу",{"2":{"360":1,"474":1,"575":1}}],["ключ",{"2":{"59":2,"227":1,"337":1,"396":1,"407":1,"416":4}}],["ключом",{"2":{"59":1,"227":1,"319":1,"360":1}}],["ключей",{"2":{"358":1,"422":2}}],["ключевую",{"2":{"399":1}}],["ключевая",{"2":{"386":1,"421":1}}],["ключевое",{"2":{"160":2,"234":1,"315":1}}],["ключевой",{"2":{"156":1}}],["ключевые",{"2":{"333":1,"382":1,"397":1,"445":1}}],["ключевыми",{"2":{"388":1}}],["ключевым",{"2":{"145":1,"226":1,"234":1,"306":1,"332":1}}],["ключевых",{"2":{"64":1,"141":1,"319":1,"399":1,"444":1,"445":1}}],["ключе",{"2":{"58":1}}],["ключа",{"2":{"58":1,"59":1,"360":1,"416":1}}],["климов",{"2":{"491":1}}],["клише",{"2":{"199":1}}],["клиентской",{"2":{"334":1}}],["клиентское",{"2":{"333":1}}],["клиентского",{"2":{"228":1}}],["клиентском",{"2":{"225":1}}],["клиентов",{"2":{"224":2,"239":1}}],["клиентом",{"2":{"152":1,"227":1,"231":1,"345":1,"492":1}}],["клиенту",{"2":{"224":1,"335":1,"342":1,"345":1,"415":1}}],["клиенты",{"2":{"224":1,"399":1}}],["клиентами",{"2":{"334":1}}],["клиентам",{"2":{"125":1,"467":1}}],["клиента",{"2":{"125":3,"226":3,"231":1,"331":2,"334":1,"417":1,"492":1,"545":1,"588":2}}],["клиент",{"0":{"6":1},"2":{"9":1,"73":1,"138":2,"226":2,"228":1,"335":1,"416":1,"430":2}}],["клику",{"2":{"552":1}}],["клике",{"2":{"111":1}}],["клик",{"2":{"3":1,"187":1}}],["казаться",{"2":{"492":1}}],["казалось",{"2":{"258":1}}],["капот",{"2":{"491":1}}],["капотом",{"2":{"126":1,"300":1,"448":1,"482":1}}],["калькулятором",{"2":{"446":1}}],["калькулятор",{"2":{"446":1}}],["кадров",{"2":{"327":2}}],["кадрами",{"2":{"327":1}}],["канал",{"0":{"503":1}}],["канала",{"2":{"122":1,"407":1}}],["кандидатов",{"2":{"482":1}}],["кануть",{"2":{"239":1}}],["каркас",{"2":{"538":1,"540":1,"541":1,"542":1,"573":1}}],["каркаса",{"2":{"177":1,"179":2,"189":1,"542":2}}],["карьере",{"2":{"380":1}}],["кардинально",{"2":{"346":1}}],["кардинальность",{"2":{"222":1}}],["каруселей",{"2":{"257":1}}],["карусели",{"2":{"257":2}}],["каруселью",{"2":{"273":1}}],["карусель",{"0":{"257":1,"472":1},"2":{"257":3}}],["карты",{"2":{"421":1}}],["карточкой",{"2":{"383":1}}],["карточка",{"2":{"242":1}}],["карточках",{"2":{"118":1}}],["карточками",{"2":{"111":1}}],["карточке",{"0":{"111":1},"2":{"111":1}}],["карточки",{"2":{"85":1,"117":3,"242":2,"243":1,"369":1}}],["картинка",{"2":{"428":1}}],["картинками",{"2":{"85":1,"492":1}}],["картинки",{"2":{"426":6,"492":2}}],["картинке",{"2":{"162":1,"492":1}}],["картинок",{"2":{"86":1,"118":1,"428":1}}],["картины",{"2":{"26":1,"194":1}}],["картину",{"2":{"26":1}}],["камне",{"2":{"156":1}}],["каскадно",{"2":{"421":1}}],["каскадные",{"2":{"155":1}}],["касающиеся",{"2":{"468":1}}],["касающимися",{"2":{"360":1}}],["касаются",{"2":{"73":1,"204":1,"205":1}}],["касается",{"2":{"339":1,"407":1,"478":1}}],["касались",{"2":{"304":1}}],["кастомные",{"2":{"490":1}}],["кастомных",{"2":{"483":1}}],["кастомными",{"2":{"429":1}}],["кастомный",{"2":{"425":1,"562":2}}],["кастомную",{"2":{"124":1}}],["кастомизированный",{"2":{"109":1}}],["кастомизировать",{"2":{"63":1}}],["кастомизацию",{"2":{"108":1,"114":1}}],["кастомизация",{"0":{"103":1},"1":{"104":1,"105":1,"106":1,"107":1,"108":1,"109":1},"2":{"538":1,"542":1,"591":1}}],["кастомизации",{"2":{"67":1,"538":1,"540":1,"573":1}}],["качество",{"2":{"74":1,"346":1,"490":1,"501":2}}],["качества",{"2":{"65":1,"74":1,"428":1,"442":1,"444":1,"491":1}}],["качественные",{"2":{"491":2}}],["качественный",{"2":{"430":1}}],["качественно",{"2":{"491":1}}],["качественного",{"2":{"442":1}}],["качественное",{"2":{"239":1}}],["качестве",{"2":{"17":1,"39":1,"129":1,"130":1,"134":1,"140":1,"142":1,"157":1,"160":1,"178":1,"179":3,"185":1,"186":1,"187":1,"188":1,"194":1,"196":1,"198":2,"208":1,"213":1,"215":1,"219":3,"220":1,"223":2,"227":2,"232":1,"233":1,"241":1,"261":1,"271":1,"291":1,"303":1,"307":1,"315":2,"319":1,"328":1,"329":1,"331":3,"333":1,"334":1,"335":1,"336":1,"338":1,"339":2,"340":1,"343":2,"345":1,"357":2,"358":3,"362":1,"363":1,"365":1,"384":1,"401":1,"404":3,"407":2,"408":1,"409":1,"413":1,"418":1,"419":1,"421":1,"422":2,"423":1,"437":1,"446":2,"447":1,"448":2,"452":2,"468":1,"478":1,"492":1,"502":1,"538":2,"545":1,"562":1}}],["кабинетом",{"2":{"59":1}}],["кабинета",{"2":{"36":1,"436":1,"477":1}}],["кабинет",{"2":{"29":1,"33":1,"70":1}}],["катастрофы",{"2":{"249":1}}],["каталоги",{"2":{"401":1,"463":1}}],["каталогов",{"0":{"133":1},"2":{"126":1,"133":1,"143":3,"179":1,"180":3,"401":1,"462":1}}],["каталогом",{"2":{"11":1,"29":1,"107":1}}],["каталогу",{"2":{"104":1}}],["каталогах",{"2":{"366":1}}],["каталога",{"2":{"16":1,"70":1,"436":1,"477":1}}],["каталоге",{"2":{"11":1,"117":1,"145":1,"146":1,"148":1,"179":2,"182":1,"186":1,"314":1,"334":1,"366":1,"401":1,"403":1,"451":1,"452":1,"462":1}}],["каталог",{"2":{"11":3,"33":2,"83":1,"104":2,"148":1,"149":1,"179":3,"180":2,"299":1,"401":1,"447":1,"462":1}}],["категорией",{"2":{"478":1}}],["категорически",{"2":{"363":1}}],["категоризации",{"2":{"268":1}}],["категорию",{"2":{"22":1,"43":1,"106":1,"258":1}}],["категорий",{"2":{"3":2,"4":1,"11":3,"22":1,"38":1,"51":1,"70":1,"108":1,"253":1}}],["категории",{"2":{"3":2,"4":1,"7":1,"11":2,"16":2,"22":1,"30":1,"31":1,"47":1,"51":1,"82":1,"83":1,"106":1,"117":3,"145":1,"275":1,"301":1,"399":1,"414":1}}],["категориям",{"2":{"104":1,"145":1,"198":1,"262":1}}],["категориями",{"2":{"43":1,"107":1,"483":1}}],["категориях",{"2":{"43":1,"302":1}}],["категория",{"0":{"16":1,"116":1},"1":{"117":1,"118":1},"2":{"3":1,"16":1,"83":1,"111":1,"301":1}}],["каждым",{"2":{"179":1,"188":1,"335":1,"416":1,"422":1,"492":1}}],["каждый",{"2":{"9":2,"41":1,"89":1,"123":2,"126":1,"130":2,"141":1,"142":2,"147":1,"152":1,"156":1,"160":2,"168":1,"180":1,"187":1,"194":1,"196":1,"199":1,"212":1,"223":2,"226":1,"228":2,"240":2,"250":1,"260":1,"261":1,"294":2,"296":1,"301":1,"306":1,"307":1,"309":2,"310":1,"311":2,"314":3,"315":1,"318":1,"319":3,"327":4,"335":1,"340":1,"341":1,"369":1,"399":1,"404":1,"407":1,"414":1,"416":1,"421":1,"422":1,"429":1,"435":1,"436":3,"447":1,"457":1,"476":3,"477":1,"478":3,"482":1,"545":1}}],["каждая",{"2":{"95":1,"151":1,"165":1,"186":1,"228":1,"234":2,"241":1,"242":1,"264":1,"298":1,"299":1,"345":1,"363":1,"368":1,"416":2,"436":2,"448":1,"457":1,"476":2,"478":1}}],["каждую",{"2":{"72":1,"159":1,"218":1,"219":1,"223":1,"304":1,"407":1,"434":1,"448":1,"476":1}}],["каждой",{"2":{"96":1,"100":1,"111":1,"145":1,"148":1,"152":1,"177":1,"185":1,"186":1,"187":1,"228":1,"234":1,"239":1,"242":1,"260":1,"264":1,"291":1,"300":1,"301":1,"334":1,"338":1,"339":1,"416":1,"422":1,"442":1,"448":2,"463":1}}],["каждому",{"2":{"48":1,"123":1,"177":1,"307":1,"362":2,"396":1,"404":1,"407":1,"409":1,"414":1}}],["каждом",{"2":{"41":1,"89":2,"123":1,"156":1,"181":1,"191":2,"192":1,"199":1,"252":1,"313":1,"319":2,"327":1,"341":1,"369":1,"402":1,"410":1,"416":1,"436":2,"477":1,"482":1}}],["каждого",{"2":{"13":1,"22":1,"69":1,"70":1,"126":1,"148":1,"152":3,"156":1,"159":1,"168":1,"184":1,"187":3,"212":1,"237":1,"242":1,"260":1,"261":1,"268":1,"273":1,"296":1,"299":1,"300":1,"307":1,"311":1,"319":3,"323":1,"340":1,"352":3,"356":2,"369":1,"375":1,"396":2,"407":2,"410":1,"411":1,"429":1,"447":1,"454":1,"458":1,"477":1,"543":1,"588":1}}],["каждое",{"2":{"3":1,"74":1,"160":1,"162":1,"172":1,"222":1,"226":1,"319":1,"333":1,"340":1,"369":1,"453":3}}],["кажется",{"2":{"3":1,"96":1,"160":1,"277":1,"313":1,"327":1}}],["какая",{"2":{"324":1,"430":1,"455":2}}],["какими",{"2":{"372":1}}],["каким",{"2":{"225":2,"258":1,"286":1,"303":1,"451":1}}],["каких",{"2":{"156":1,"233":1,"237":1,"287":1,"315":1,"347":1,"401":1,"492":1,"538":1,"576":1}}],["какие",{"0":{"476":1},"2":{"4":1,"16":2,"22":1,"73":2,"154":3,"155":1,"158":1,"176":1,"222":1,"224":1,"236":1,"237":1,"289":2,"299":1,"303":1,"324":1,"347":2,"350":3,"352":1,"353":2,"354":2,"364":1,"372":1,"405":1,"416":1,"431":1,"438":1,"471":1,"474":1,"482":1,"491":2,"535":1}}],["какую",{"2":{"23":1,"96":1,"157":1,"288":1,"327":1,"352":1,"469":1,"541":1}}],["каковы",{"0":{"192":1},"2":{"190":2,"237":1,"303":2,"347":1,"424":3}}],["каком",{"2":{"124":1,"143":1,"258":1}}],["какого",{"2":{"61":1,"178":1,"254":1,"266":1,"327":1}}],["какое",{"2":{"12":1,"155":1,"313":1}}],["какой",{"2":{"3":1,"23":1,"96":1,"130":1,"156":1,"157":1,"184":1,"194":1,"217":1,"218":1,"227":1,"258":1,"351":1,"357":1,"369":1,"421":1,"428":1,"430":1,"462":2,"484":1,"485":1}}],["как",{"0":{"513":1},"2":{"2":1,"3":1,"9":2,"10":1,"12":1,"21":1,"22":2,"25":1,"26":1,"39":1,"43":1,"44":1,"50":2,"63":1,"69":1,"73":5,"74":1,"82":1,"83":1,"88":1,"96":2,"111":1,"112":1,"114":1,"117":1,"118":1,"123":5,"124":3,"125":1,"126":1,"128":2,"129":1,"131":3,"134":1,"135":1,"138":4,"142":4,"143":1,"145":1,"148":1,"149":1,"150":1,"151":2,"153":1,"155":1,"156":8,"157":2,"158":6,"159":4,"160":13,"163":1,"164":2,"166":2,"168":1,"174":1,"177":2,"178":1,"179":5,"180":4,"181":6,"182":1,"183":5,"184":1,"185":1,"186":1,"187":9,"188":5,"189":2,"190":1,"191":2,"192":1,"194":3,"195":2,"196":3,"197":2,"198":4,"199":3,"201":2,"202":2,"212":1,"215":1,"216":1,"217":1,"218":2,"219":2,"220":2,"222":1,"223":3,"224":1,"226":5,"227":6,"228":3,"229":1,"231":1,"232":2,"233":7,"234":6,"235":2,"236":1,"237":3,"239":7,"240":4,"242":1,"243":2,"244":1,"245":2,"246":2,"247":1,"248":2,"251":1,"253":1,"254":1,"257":4,"258":1,"261":4,"262":1,"266":1,"268":4,"269":1,"271":3,"272":4,"273":2,"274":1,"275":1,"276":1,"277":3,"279":1,"284":1,"286":1,"289":4,"291":5,"292":2,"293":2,"294":2,"295":1,"296":2,"297":2,"298":6,"299":5,"300":1,"301":1,"302":2,"304":2,"305":1,"306":4,"307":2,"308":1,"311":1,"312":3,"313":9,"314":7,"315":3,"316":2,"318":5,"319":3,"320":1,"321":3,"322":3,"324":2,"325":4,"327":9,"329":4,"331":6,"333":2,"334":5,"335":2,"336":4,"338":2,"339":2,"340":5,"341":2,"343":3,"345":3,"346":1,"347":2,"348":3,"349":1,"350":3,"351":3,"352":2,"353":2,"355":1,"356":1,"357":4,"358":4,"359":3,"360":5,"361":1,"362":5,"363":1,"364":1,"367":1,"368":4,"369":9,"370":1,"371":1,"372":3,"375":1,"376":1,"377":4,"384":1,"388":1,"390":1,"391":2,"396":2,"397":4,"399":8,"400":1,"401":3,"402":3,"404":9,"406":1,"407":8,"408":1,"409":2,"410":2,"413":4,"414":2,"415":2,"416":10,"419":2,"420":2,"421":5,"422":8,"423":3,"424":2,"426":3,"428":1,"429":3,"430":3,"432":1,"435":3,"436":4,"438":3,"442":2,"444":6,"445":1,"446":2,"447":1,"448":4,"449":1,"450":3,"452":1,"453":8,"457":3,"458":1,"462":1,"463":4,"465":2,"466":4,"467":1,"468":2,"474":5,"476":4,"478":8,"479":1,"481":3,"482":1,"483":1,"489":2,"490":4,"491":6,"492":10,"502":2,"508":2,"513":1,"515":2,"520":1,"521":1,"531":1,"532":1,"541":2,"542":2,"543":1,"547":1,"568":1,"573":1}}],["коврике",{"2":{"492":1}}],["кошелек",{"2":{"422":3}}],["кошельки",{"2":{"422":2}}],["кошелька",{"2":{"422":6}}],["кошельками",{"2":{"422":1}}],["кошельках",{"2":{"422":1}}],["кошельков",{"2":{"422":2}}],["кошельком",{"2":{"422":2}}],["кошмар",{"2":{"23":1}}],["коем",{"2":{"207":1,"319":1,"415":1}}],["кого",{"0":{"376":1},"2":{"201":3,"226":1}}],["когда",{"0":{"209":1},"2":{"3":1,"30":1,"41":1,"62":1,"111":1,"123":4,"124":1,"125":1,"130":4,"133":1,"142":1,"145":1,"151":1,"153":1,"155":1,"156":7,"157":1,"160":3,"163":1,"164":1,"166":2,"167":1,"168":4,"180":2,"184":1,"187":2,"190":2,"191":1,"195":2,"196":3,"198":4,"201":2,"209":4,"214":1,"217":1,"222":1,"223":1,"227":4,"228":1,"232":1,"233":2,"234":1,"235":2,"242":1,"248":1,"249":1,"250":1,"251":1,"252":4,"254":1,"260":2,"261":3,"268":1,"269":1,"272":1,"273":1,"283":1,"291":1,"294":1,"296":1,"297":1,"298":6,"304":1,"306":1,"311":1,"313":2,"316":2,"318":1,"319":1,"321":1,"324":1,"327":5,"328":1,"333":1,"335":1,"336":1,"338":2,"341":1,"343":1,"348":1,"351":1,"353":2,"354":1,"359":4,"360":1,"361":1,"364":2,"367":1,"368":1,"370":1,"399":3,"404":1,"406":1,"407":2,"413":1,"414":1,"419":1,"420":2,"424":1,"426":1,"436":1,"438":1,"444":1,"445":1,"449":1,"453":1,"454":1,"457":2,"462":1,"466":1,"469":1,"474":2,"478":3,"483":2,"490":1,"491":1,"492":3}}],["координирует",{"2":{"352":1}}],["координировать",{"2":{"156":1}}],["координация",{"2":{"156":1,"436":1,"476":1}}],["координации",{"2":{"156":1}}],["ко",{"2":{"145":2,"180":1,"192":1,"201":1,"247":1,"314":1,"450":1,"478":1,"483":1}}],["косой",{"2":{"143":1,"409":1}}],["коридоре",{"2":{"492":1}}],["коричневый",{"2":{"241":1}}],["корпоративном",{"2":{"458":1}}],["корпоративных",{"2":{"142":1,"237":1}}],["корня",{"2":{"409":1}}],["корневую",{"2":{"133":1}}],["корневом",{"2":{"146":1,"314":1,"329":1,"360":2,"437":2}}],["корневому",{"2":{"128":1}}],["корневого",{"2":{"129":1,"135":1,"351":1}}],["корневой",{"2":{"129":1,"143":1,"180":1,"360":1,"447":1,"462":2}}],["корне",{"2":{"122":1,"127":1,"143":1,"147":1,"149":1,"180":1,"182":1,"293":1,"299":1,"455":1}}],["коренится",{"2":{"240":1}}],["корень",{"2":{"180":1,"299":1,"369":1,"396":1}}],["коробкой",{"2":{"491":1}}],["коробки",{"2":{"181":1,"300":1,"447":1,"451":1}}],["короче",{"2":{"257":1,"335":1}}],["короткое",{"2":{"256":1,"294":1}}],["короткоживущий",{"2":{"123":1}}],["коротким",{"0":{"200":1}}],["короткий",{"2":{"184":1,"253":1,"256":1,"335":1,"452":1,"491":1}}],["корректировку",{"2":{"500":1}}],["корректировки",{"2":{"72":1}}],["корректно",{"2":{"448":1}}],["корректном",{"2":{"180":1}}],["корректный",{"2":{"149":1,"217":1,"508":1}}],["корректные",{"2":{"83":1}}],["корзину",{"0":{"277":1},"2":{"277":3,"435":1,"476":1}}],["корзины",{"2":{"12":1,"95":1,"107":1,"274":1,"281":1,"284":1}}],["корзина",{"2":{"4":1,"29":1,"33":1,"70":1}}],["коллеги",{"2":{"491":1}}],["коллекцию",{"2":{"339":2}}],["коллекций",{"2":{"165":1,"183":1,"339":1}}],["коллекция",{"2":{"156":1,"181":1,"363":1}}],["коллекции",{"2":{"16":1,"213":1,"339":1}}],["коллизий",{"2":{"360":1}}],["коллизия",{"2":{"356":1}}],["коллизии",{"2":{"261":1}}],["коллоцированный",{"2":{"145":1}}],["количеством",{"2":{"137":1,"145":1,"399":1,"422":1,"474":1,"479":1}}],["количество",{"2":{"130":1,"154":1,"155":1,"181":1,"184":1,"187":2,"200":1,"223":1,"240":1,"241":1,"247":2,"248":1,"261":1,"268":2,"279":1,"319":2,"327":1,"351":1,"357":1,"410":1,"415":1,"416":1,"419":2,"423":1,"448":2,"453":1}}],["количества",{"2":{"123":1,"199":1,"247":1,"419":1}}],["колоночным",{"2":{"487":1}}],["колоночной",{"2":{"271":1,"490":1}}],["колонок",{"2":{"47":1,"117":1,"271":1}}],["колонки",{"2":{"271":2,"351":1}}],["колонка",{"2":{"117":1}}],["колонками",{"2":{"117":1}}],["колонтитуле",{"2":{"273":1}}],["колонтитул",{"2":{"243":1,"368":1}}],["комфорту",{"2":{"492":1}}],["комфортней",{"2":{"430":1}}],["комфортное",{"2":{"351":1}}],["комфортно",{"2":{"50":1,"74":1,"436":1,"478":1}}],["комиксах",{"2":{"254":1}}],["комбинацию",{"2":{"542":1}}],["комбинация",{"2":{"145":1,"319":1}}],["комбинаций",{"2":{"98":1}}],["коммитов",{"0":{"507":1},"1":{"508":1}}],["коммитах",{"2":{"515":1}}],["коммита",{"2":{"463":1}}],["коммит",{"2":{"462":1,"465":1,"466":1,"467":1}}],["коммиты",{"2":{"151":1}}],["коммуникациях",{"2":{"414":1}}],["коммуникация",{"2":{"327":1}}],["коммуникациями",{"2":{"291":1}}],["коммуникации",{"2":{"234":1,"325":1,"399":1,"415":1,"421":1}}],["коммуникационного",{"2":{"199":1,"333":1}}],["коммуникаций",{"2":{"138":1,"325":1,"416":1}}],["комментирование",{"2":{"501":1}}],["комментарием",{"2":{"369":1}}],["комментариев",{"2":{"198":1,"264":1,"435":1,"476":1}}],["комментарию",{"2":{"219":1}}],["комментариями",{"2":{"123":1,"538":1}}],["комментариях",{"2":{"64":1}}],["комментарий",{"2":{"98":1,"453":1}}],["комментарии",{"2":{"89":2,"201":2,"299":1}}],["коммерческий",{"2":{"491":1}}],["коммерческих",{"2":{"142":1,"396":1}}],["коммерческого",{"2":{"152":1}}],["кому",{"2":{"123":1}}],["командную",{"2":{"460":1}}],["командного",{"2":{"224":1}}],["командной",{"2":{"177":1,"179":1,"180":1,"189":1,"344":1,"429":1,"447":1,"456":1,"458":1,"459":1}}],["командой",{"2":{"212":1,"244":1,"390":1,"442":1,"444":1,"445":1,"451":1,"465":1,"466":1,"492":1}}],["команд",{"2":{"180":2,"224":1,"225":1,"396":1,"460":1,"482":1}}],["командах",{"2":{"444":1}}],["командами",{"2":{"436":2,"447":1,"476":2}}],["командам",{"2":{"436":1,"476":1}}],["команда",{"0":{"224":1},"1":{"225":1},"2":{"174":1,"191":1,"224":1,"318":1,"360":1,"401":1,"436":1,"458":1,"476":1,"535":1}}],["команде",{"2":{"156":1,"174":1,"224":1,"239":1,"244":1,"333":1,"360":1}}],["команды",{"2":{"111":1,"156":1,"180":1,"182":1,"193":1,"224":2,"225":1,"300":1,"309":1,"314":1,"335":1,"343":1,"356":1,"358":1,"414":1,"423":1,"436":1,"447":2,"451":1,"455":2,"460":2,"462":2,"463":2,"464":2,"465":1,"466":1,"469":1,"476":1}}],["команду",{"2":{"34":1,"100":1,"144":1,"179":3,"187":1,"225":1,"318":1,"336":1,"340":1,"344":2,"401":1,"446":1,"451":1,"455":2,"461":2,"462":2,"465":1}}],["компетентные",{"2":{"491":1}}],["компилирует",{"2":{"467":1}}],["компиляции",{"2":{"466":1,"467":1}}],["компиляция",{"2":{"157":1}}],["комплект",{"2":{"461":1}}],["комплексное",{"2":{"123":1}}],["компаниях",{"2":{"444":1,"491":1}}],["компания",{"2":{"279":1}}],["компаниям",{"2":{"279":1}}],["компанией",{"2":{"244":1}}],["компании",{"2":{"123":1,"239":2,"272":1,"275":1,"276":1,"278":1,"279":1,"281":1}}],["компромиссов",{"0":{"354":1},"2":{"354":1}}],["компромиссы",{"2":{"156":1,"350":1,"375":1,"399":2,"454":1,"457":1}}],["компромисс",{"2":{"156":2,"183":1}}],["компромиссами",{"2":{"156":1}}],["компьютере",{"2":{"377":1,"429":1,"492":1}}],["компьютера",{"2":{"430":1}}],["компьютерах",{"2":{"291":1,"298":1}}],["компьютерам",{"2":{"200":1}}],["компьютеры",{"2":{"237":1}}],["компьютерного",{"2":{"237":1}}],["компьютерное",{"2":{"237":1}}],["компьютером",{"2":{"199":1,"239":1}}],["компьютеров",{"2":{"142":3,"263":1,"271":1,"377":1,"422":1}}],["компьютеру",{"2":{"142":1}}],["компьютер",{"2":{"142":1,"178":1,"258":1}}],["компьютеды",{"2":{"96":1}}],["композитных",{"2":{"304":1,"313":1}}],["композитные",{"2":{"195":1}}],["композицию",{"2":{"348":1}}],["композиции",{"2":{"195":1}}],["композиция",{"0":{"195":1,"348":1,"385":1},"1":{"349":1,"350":1,"351":1,"352":1,"353":1,"354":1,"355":1,"356":1,"357":1,"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1,"365":1,"366":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1},"2":{"131":1,"158":1,"159":2,"166":1,"185":1,"191":1,"195":1,"196":1,"198":1,"220":1,"228":1,"229":1,"244":1,"308":1,"400":1}}],["композаблом",{"2":{"478":1}}],["композабл",{"0":{"112":1,"363":1},"1":{"364":1},"2":{"363":9,"436":1,"474":1,"478":4,"483":1}}],["композаблы",{"2":{"104":1,"483":1}}],["композабле",{"2":{"95":1,"112":1,"478":1}}],["компонуемый",{"2":{"198":1}}],["компоновкой",{"2":{"270":1}}],["компоновки",{"2":{"133":1,"424":1}}],["компоновка",{"2":{"26":1}}],["компонентно",{"2":{"482":1}}],["компонентного",{"2":{"337":1}}],["компонентом",{"2":{"306":1,"319":1,"352":1,"353":1,"362":1,"367":1,"368":1,"369":1,"400":1,"404":1,"452":1,"453":2,"478":2}}],["компонентов",{"0":{"128":1,"159":1,"172":1,"306":1,"348":1,"350":1,"385":1},"1":{"307":1,"308":1,"349":1,"350":1,"351":2,"352":2,"353":2,"354":2,"355":1,"356":1,"357":1,"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1,"365":1,"366":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1},"2":{"126":1,"128":2,"129":1,"135":1,"153":1,"155":1,"157":1,"158":2,"159":2,"160":2,"167":2,"168":5,"175":1,"181":1,"184":2,"185":2,"188":2,"189":1,"195":2,"196":4,"197":1,"198":1,"244":1,"300":1,"304":1,"306":1,"308":2,"309":1,"311":2,"312":2,"313":1,"320":1,"334":1,"346":1,"348":4,"350":1,"351":5,"352":1,"354":2,"356":2,"357":1,"360":2,"361":1,"364":1,"365":1,"369":1,"372":1,"385":1,"390":1,"400":1,"410":1,"433":1,"436":1,"442":1,"445":1,"446":1,"451":2,"453":1,"469":1,"470":1,"476":2,"477":1,"478":1,"573":1}}],["компоненту",{"2":{"127":1,"160":1,"188":1,"230":1,"307":1,"352":1,"359":1,"362":1,"364":1,"368":1,"404":1,"411":1,"452":1}}],["компоненте",{"0":{"528":1},"2":{"41":1,"122":2,"131":1,"185":1,"187":1,"188":1,"199":1,"229":1,"259":1,"307":1,"313":1,"322":1,"336":1,"339":1,"343":1,"356":1,"358":2,"359":1,"360":5,"362":3,"363":1,"368":1,"369":2,"407":2,"409":3,"410":1,"414":1,"420":1,"453":1,"478":3,"511":1,"577":1}}],["компоненты",{"0":{"28":1,"135":1,"168":1,"355":1,"356":1,"361":1,"364":1,"406":1},"1":{"29":1,"30":1,"31":1,"32":1,"356":1,"357":1,"358":1,"359":1,"360":1,"362":1},"2":{"23":2,"26":1,"41":1,"74":1,"104":1,"127":1,"128":1,"129":2,"135":2,"155":1,"158":2,"159":3,"160":2,"166":1,"168":2,"176":1,"180":3,"183":1,"195":1,"196":2,"197":3,"228":2,"230":1,"304":1,"306":4,"308":1,"309":1,"310":1,"313":1,"330":1,"348":2,"350":2,"351":4,"352":3,"355":1,"356":2,"357":2,"359":1,"362":1,"365":1,"367":2,"369":1,"371":2,"372":1,"400":1,"401":4,"402":1,"405":2,"406":2,"410":4,"433":2,"435":1,"436":2,"437":2,"438":2,"444":1,"445":3,"446":1,"450":3,"451":1,"476":4,"478":2,"482":2,"483":1,"485":2,"486":1,"490":3,"542":1,"571":1,"591":1}}],["компонент",{"2":{"23":1,"36":1,"85":1,"88":2,"96":2,"98":1,"107":1,"109":1,"114":4,"117":1,"122":1,"128":1,"129":1,"135":1,"157":2,"158":1,"159":3,"160":4,"168":7,"180":3,"185":2,"186":5,"188":1,"196":9,"198":2,"199":1,"228":1,"229":1,"252":1,"261":2,"306":7,"308":2,"309":3,"310":1,"311":2,"313":2,"322":1,"342":3,"351":2,"352":2,"353":4,"356":5,"357":7,"358":2,"360":2,"362":10,"363":1,"364":5,"367":1,"368":6,"369":4,"402":1,"404":4,"406":2,"407":6,"410":4,"412":1,"418":1,"420":1,"426":1,"428":1,"437":2,"444":1,"446":2,"452":3,"474":1,"478":7,"481":2,"482":3,"485":1,"490":2,"521":1,"537":1,"542":1,"571":2,"573":1,"591":1}}],["компонентам",{"2":{"134":1,"184":1,"196":1,"306":1,"351":1,"352":1,"359":1,"369":1,"400":1,"410":1,"433":1,"437":1,"476":1}}],["компонентами",{"0":{"485":1},"2":{"131":1,"159":1,"160":2,"166":1,"186":1,"205":1,"206":1,"220":2,"228":1,"229":1,"244":1,"305":1,"309":1,"312":1,"314":2,"316":2,"318":1,"323":1,"324":1,"334":1,"348":1,"352":1,"355":1,"356":2,"359":1,"360":1,"363":2,"364":1,"400":2,"401":1,"402":1,"407":1,"438":1,"447":1,"456":1,"535":1}}],["компонентах",{"2":{"23":1,"41":1,"122":1,"129":1,"135":1,"159":1,"160":1,"199":1,"228":1,"244":1,"288":1,"317":1,"320":1,"321":1,"329":1,"353":2,"356":1,"363":1,"364":1,"371":1,"372":1,"407":2,"445":1,"454":1,"468":1}}],["компонента",{"2":{"22":1,"122":1,"129":1,"158":1,"159":4,"160":7,"168":4,"180":1,"181":2,"182":1,"186":2,"187":3,"190":1,"194":1,"196":1,"198":4,"220":1,"226":1,"229":3,"230":1,"258":1,"260":1,"298":4,"306":1,"307":1,"311":2,"315":1,"348":1,"351":1,"352":1,"354":1,"356":4,"357":1,"358":3,"359":7,"361":1,"362":3,"363":1,"364":4,"368":7,"369":1,"406":1,"407":2,"410":3,"413":1,"415":1,"437":1,"446":1,"447":2,"451":1,"452":3,"453":3,"478":4,"483":1,"490":2,"532":1,"547":1,"553":1}}],["коп",{"2":{"482":1}}],["копейкой",{"2":{"277":1}}],["копейку",{"2":{"277":1}}],["копируются",{"2":{"327":1}}],["копирование",{"2":{"311":1}}],["копирования",{"2":{"153":1,"429":1}}],["копировать",{"2":{"22":1}}],["копии",{"2":{"306":1,"458":1}}],["копия",{"2":{"253":1,"369":1}}],["копию",{"2":{"187":1,"253":1,"311":2,"338":1,"353":2,"458":1,"463":1}}],["копий",{"2":{"165":1,"312":1}}],["копонент",{"2":{"32":1}}],["кот",{"2":{"18":1}}],["которое",{"2":{"129":1,"130":1,"131":1,"151":1,"152":1,"167":1,"178":1,"186":1,"187":1,"188":1,"227":1,"234":1,"240":1,"241":2,"247":1,"261":1,"265":1,"311":1,"313":1,"318":1,"319":2,"327":1,"328":2,"352":1,"357":1,"360":1,"362":1,"368":1,"401":2,"407":1,"416":1,"420":1,"445":2,"446":1,"452":1,"453":2,"455":1,"465":1,"466":1,"479":1}}],["которой",{"2":{"101":1,"148":1,"157":1,"180":1,"193":1,"226":1,"231":1,"239":1,"242":1,"248":1,"261":1,"271":1,"287":1,"300":1,"328":1,"331":1,"386":1,"402":2,"404":1,"419":1,"448":2,"467":1,"483":1,"542":1}}],["которого",{"2":{"85":1,"129":1,"160":4,"198":1,"294":1,"315":2,"327":1,"358":2,"364":1,"368":1,"447":1}}],["котором",{"2":{"59":1,"96":1,"142":1,"155":2,"159":1,"179":1,"180":1,"187":1,"196":1,"225":1,"227":1,"292":1,"299":1,"300":1,"327":1,"340":1,"342":1,"357":2,"364":1,"369":1,"407":2,"415":1,"416":1,"422":1,"425":1,"442":1,"450":1,"451":1,"474":1,"478":1}}],["которому",{"2":{"48":1,"165":1,"316":1,"320":1,"345":1,"413":1,"437":1,"449":1,"452":1}}],["которая",{"2":{"43":1,"62":1,"74":1,"96":1,"111":1,"132":2,"138":1,"142":1,"145":1,"151":1,"156":1,"157":1,"160":1,"163":1,"180":1,"187":4,"194":1,"218":1,"221":1,"226":1,"232":2,"234":1,"258":1,"273":1,"311":1,"316":1,"319":5,"321":1,"331":1,"335":1,"340":1,"344":1,"352":1,"357":1,"363":3,"364":1,"369":2,"404":1,"407":1,"414":2,"422":1,"444":1,"447":2,"448":1,"452":1,"453":2,"455":1,"463":1,"478":2,"482":1,"490":1,"491":1,"492":1}}],["которым",{"2":{"16":1,"17":1,"125":1,"160":1,"174":1,"180":1,"240":1,"319":1,"337":1,"357":1,"363":1,"367":1,"404":1,"407":1,"437":3,"490":1}}],["которыми",{"2":{"3":1,"4":1,"140":1,"174":1,"180":1,"226":1,"247":1,"325":1,"369":1,"478":1}}],["которые",{"2":{"16":1,"22":1,"36":1,"47":1,"96":1,"123":1,"125":1,"126":1,"130":1,"137":1,"149":1,"150":2,"153":1,"154":1,"155":5,"157":2,"158":3,"159":1,"160":4,"161":1,"164":1,"167":3,"168":3,"169":1,"177":1,"180":4,"181":3,"182":1,"183":3,"185":1,"188":1,"191":2,"192":2,"194":2,"197":1,"198":3,"199":2,"200":1,"202":3,"203":2,"206":1,"223":2,"228":1,"231":1,"235":1,"239":2,"240":1,"244":2,"245":1,"249":3,"252":1,"258":1,"260":1,"261":1,"266":3,"268":1,"274":1,"277":1,"281":1,"287":2,"288":1,"289":2,"291":2,"293":2,"296":1,"298":1,"299":1,"301":1,"306":1,"309":1,"311":1,"313":1,"315":1,"318":2,"319":2,"320":1,"325":3,"327":2,"331":1,"333":1,"339":1,"343":1,"344":1,"351":1,"352":1,"353":1,"356":2,"357":3,"358":1,"359":3,"360":1,"362":2,"363":1,"375":2,"376":1,"399":1,"402":1,"405":1,"409":1,"410":2,"413":1,"415":1,"416":1,"417":1,"418":1,"419":1,"422":2,"423":1,"425":1,"426":1,"435":1,"436":3,"438":1,"444":1,"445":2,"448":2,"452":1,"453":3,"463":1,"465":1,"476":2,"490":1,"491":1,"492":2,"541":1,"542":1,"591":1}}],["которых",{"2":{"12":1,"40":1,"74":1,"95":1,"126":1,"137":1,"155":1,"156":1,"158":1,"160":1,"165":1,"183":1,"202":1,"222":1,"228":2,"294":1,"321":1,"363":1,"368":1,"401":1,"405":1,"408":1,"410":1,"414":1,"415":1,"419":1,"421":1,"435":1,"442":1,"466":1,"476":1,"478":1,"482":1,"492":1}}],["который",{"2":{"3":1,"10":1,"13":1,"35":1,"41":1,"48":1,"63":1,"96":1,"100":1,"124":2,"125":2,"126":1,"142":4,"145":1,"152":3,"155":1,"156":2,"157":2,"158":1,"159":4,"160":4,"168":2,"169":1,"177":1,"178":1,"179":1,"180":3,"185":2,"186":1,"187":2,"188":1,"196":2,"201":1,"211":1,"213":1,"221":1,"224":1,"226":2,"227":3,"228":3,"229":1,"230":2,"233":1,"234":1,"240":1,"243":1,"258":2,"260":1,"261":1,"263":1,"267":1,"271":2,"272":1,"276":2,"279":1,"281":1,"291":1,"293":1,"297":1,"299":3,"300":1,"304":1,"309":3,"314":3,"316":1,"317":1,"321":2,"328":2,"330":1,"331":1,"332":1,"333":1,"334":2,"339":1,"340":1,"344":1,"345":1,"350":1,"352":1,"354":1,"357":5,"361":1,"362":1,"363":1,"364":2,"367":1,"368":3,"369":2,"371":1,"384":1,"399":1,"400":2,"404":5,"407":2,"409":1,"410":3,"415":1,"416":1,"417":1,"418":1,"420":1,"421":1,"422":3,"426":1,"429":1,"436":1,"437":1,"441":1,"444":1,"448":2,"450":1,"452":1,"453":1,"454":2,"458":1,"463":1,"476":1,"478":3,"479":1,"482":1,"483":2,"492":2}}],["которую",{"2":{"2":1,"22":1,"96":1,"98":1,"157":1,"180":1,"184":1,"203":1,"244":1,"254":1,"260":1,"282":1,"283":1,"295":1,"297":1,"311":1,"327":1,"336":1,"338":2,"369":1,"396":1,"404":1,"410":1,"414":1,"416":1,"418":1,"419":1,"420":1,"448":1,"478":1,"491":1}}],["конгруэнтным",{"2":{"371":1}}],["конвейера",{"0":{"333":1},"1":{"334":1,"335":1,"336":1}}],["конвейеров",{"2":{"231":1}}],["конфликта",{"2":{"465":1}}],["конфликт",{"2":{"465":1}}],["конфликты",{"0":{"465":1},"2":{"466":1}}],["конфликтуют",{"2":{"430":1}}],["конфликтов",{"2":{"186":1,"466":1}}],["конфигом",{"2":{"430":1}}],["конфиге",{"0":{"562":1},"2":{"429":1}}],["конфигурирование",{"2":{"177":1,"570":1}}],["конфигурацией",{"2":{"300":1}}],["конфигурационного",{"2":{"396":1,"535":1}}],["конфигурационному",{"2":{"184":1}}],["конфигурационные",{"2":{"543":1}}],["конфигурационный",{"2":{"180":1,"184":1,"451":2,"549":1}}],["конфигурационных",{"2":{"140":1}}],["конфигураций",{"2":{"150":1}}],["конфигурации",{"0":{"145":1,"184":1},"1":{"146":1,"147":1,"148":1,"149":1,"150":1},"2":{"134":1,"143":1,"145":2,"148":1,"179":1,"180":1,"184":2,"196":1,"300":1,"404":1,"437":2,"454":2}}],["конфигурацию",{"2":{"134":1,"144":1,"145":2,"146":1,"149":1,"153":1,"183":1,"184":2,"447":1}}],["конфигурациях",{"2":{"492":1}}],["конфигурация",{"0":{"146":1,"504":1,"531":1},"1":{"147":1,"505":1,"506":1},"2":{"23":1,"151":1,"430":1}}],["конфиденциальности",{"2":{"287":1,"414":1}}],["конец",{"2":{"179":1,"454":2}}],["конечную",{"2":{"415":1,"417":1,"418":1,"421":1}}],["конечная",{"2":{"341":1,"345":1}}],["конечным",{"2":{"416":1}}],["конечными",{"2":{"340":1}}],["конечных",{"2":{"319":1,"344":1,"416":1}}],["конечные",{"2":{"180":1,"345":1,"369":1}}],["конечный",{"2":{"139":1,"160":1,"180":1,"185":1,"362":2,"369":2,"406":1}}],["конечной",{"2":{"277":1,"340":1}}],["конечному",{"2":{"240":1,"298":1,"421":1}}],["конечном",{"2":{"174":1,"357":1,"467":1}}],["конечного",{"2":{"67":1,"74":1,"142":1,"399":1,"467":2}}],["конечно",{"2":{"17":1,"138":1,"144":1,"185":1,"228":1,"234":1,"289":1,"301":1,"306":1,"311":1,"419":1,"422":1,"444":1,"483":1,"492":1}}],["консистентности",{"2":{"478":1}}],["консоли",{"2":{"474":1}}],["консоль",{"2":{"178":1,"227":2,"233":1,"329":1,"483":1}}],["константные",{"2":{"171":1}}],["константе",{"2":{"160":1}}],["константа",{"2":{"160":2}}],["константы",{"0":{"171":1},"2":{"160":2,"187":1}}],["константу",{"2":{"160":2,"313":2,"363":2,"369":1}}],["конструкция",{"0":{"367":1},"2":{"369":1}}],["конструкциями",{"2":{"39":1}}],["конструкции",{"2":{"351":1,"478":1}}],["конструктором",{"2":{"404":1}}],["конструкторов",{"2":{"187":1,"316":1,"404":1}}],["конструктору",{"2":{"328":1,"404":1}}],["конструкторе",{"2":{"212":1,"217":1,"218":1,"223":1}}],["конструктора",{"2":{"160":1,"234":1,"315":1,"321":2,"334":1,"363":1,"368":1,"410":1,"542":2}}],["конструкторы",{"2":{"134":1,"171":1,"410":1,"413":1}}],["конструктор",{"2":{"122":1,"127":2,"134":1,"144":1,"157":1,"160":3,"226":1,"227":1,"234":1,"312":1,"313":1,"315":2,"316":1,"318":1,"328":2,"330":1,"339":1,"345":1,"369":1,"404":1}}],["кончается",{"2":{"123":2}}],["кончился",{"2":{"123":1}}],["контакты",{"2":{"500":1}}],["контактов",{"2":{"286":1}}],["контактам",{"2":{"286":1}}],["контрагентами",{"2":{"482":1}}],["контрастно",{"2":{"273":1}}],["контрастах",{"2":{"273":1}}],["контраста",{"2":{"243":1}}],["контраст",{"0":{"241":1},"2":{"241":3}}],["контролируется",{"2":{"590":1}}],["контролирует",{"2":{"474":1,"482":1}}],["контролировать",{"2":{"2":1,"180":1,"220":1,"406":1}}],["контроллер",{"2":{"436":1,"476":1}}],["контроллеров",{"2":{"359":1}}],["контроллеры",{"0":{"359":1}}],["контроля",{"0":{"442":1},"1":{"443":1,"444":1,"445":1,"446":1,"447":1,"448":1,"449":1,"450":1,"451":1,"452":1,"453":1,"454":1,"455":1,"456":1,"457":1,"458":1,"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1,"467":1,"468":1,"469":1},"2":{"178":2,"180":1,"188":1,"196":1,"248":2,"249":1,"258":1,"390":1,"404":1,"458":1}}],["контроль",{"0":{"390":1},"2":{"151":1,"160":2,"178":1,"180":1,"184":1,"233":1,"249":1,"300":1,"357":1,"399":1,"456":1}}],["контейнер",{"2":{"406":1,"531":1}}],["контейнера",{"2":{"261":1}}],["контенту",{"2":{"273":1}}],["контент",{"2":{"271":2,"285":1,"291":1,"492":1}}],["контентом",{"2":{"257":1,"268":1,"273":1,"370":1,"492":2,"540":1,"542":1}}],["контента",{"0":{"270":1},"1":{"271":1,"272":1,"273":1,"274":1},"2":{"155":1,"157":1,"168":1,"241":1,"257":1,"264":1,"351":1,"492":1}}],["контексту",{"2":{"351":1,"414":1}}],["контекстов",{"2":{"300":1}}],["контекстном",{"2":{"296":1}}],["контекстного",{"2":{"254":1,"305":1}}],["контекстные",{"2":{"254":1}}],["контекстным",{"2":{"254":1}}],["контекстных",{"2":{"254":1}}],["контекст",{"2":{"184":1,"360":1,"451":1}}],["контексте",{"2":{"184":1,"191":1,"399":1}}],["контекстах",{"2":{"294":1,"399":1}}],["контекста",{"2":{"98":1,"122":1,"160":1,"193":1,"203":1,"207":1,"225":1,"289":1,"296":1,"304":1,"356":1,"415":1,"541":1}}],["концов",{"2":{"231":1,"299":1}}],["концом",{"2":{"228":1}}],["концу",{"2":{"155":1,"237":1,"289":2,"304":1,"325":1,"327":1,"397":1}}],["концептуального",{"2":{"385":1}}],["концептуальной",{"2":{"354":1}}],["концептуально",{"2":{"330":1}}],["концептуальный",{"2":{"422":1}}],["концептуальных",{"2":{"325":1}}],["концептуальные",{"2":{"192":1}}],["концепцией",{"2":{"156":1,"260":1,"314":1,"385":1}}],["концепций",{"2":{"155":1,"231":1,"346":1,"375":1}}],["концепция",{"2":{"155":1,"156":1,"160":1,"178":1,"183":1,"196":1,"197":1,"208":1,"224":1,"227":1,"237":1,"243":1,"254":1,"255":1,"260":1,"268":1,"269":2,"271":1,"278":1,"362":1,"421":1,"423":1,"442":1,"455":1}}],["концепциями",{"2":{"153":1,"332":1,"348":1,"388":1}}],["концепции",{"2":{"143":1,"158":1,"177":1,"191":1,"240":1,"242":1,"304":1,"305":1,"319":1,"325":1,"333":1,"346":1,"375":1,"391":1,"436":1,"442":1,"467":1,"468":1,"476":1,"483":1}}],["концепцию",{"2":{"142":1,"160":1,"244":1,"269":1,"273":1,"289":1,"309":1,"354":1,"399":1,"416":1}}],["конце",{"2":{"157":1,"180":1,"231":1,"273":1,"276":1,"299":1,"327":1,"369":1,"444":1}}],["концентрируемся",{"2":{"41":1}}],["конца",{"2":{"61":1,"260":1,"261":1,"345":1,"415":1}}],["конкатенируются",{"2":{"416":1}}],["конкатенированы",{"2":{"409":1}}],["конкатенировать",{"2":{"128":1}}],["конкатенации",{"2":{"416":1}}],["конкретика",{"2":{"196":1}}],["конкретная",{"2":{"269":1}}],["конкретную",{"2":{"196":1,"542":1}}],["конкретных",{"2":{"291":1,"300":1,"321":1,"369":1,"436":1,"476":1,"542":1}}],["конкретным",{"2":{"202":1}}],["конкретные",{"2":{"156":1}}],["конкретный",{"2":{"43":1,"341":1,"538":1}}],["конкретной",{"2":{"435":1,"476":1}}],["конкретное",{"2":{"125":1,"160":1}}],["конкретного",{"2":{"96":1,"126":1,"247":1,"354":1,"421":1,"438":1,"448":1}}],["конкретно",{"2":{"41":1,"96":2}}],["конкретном",{"2":{"11":1,"156":1,"331":1,"410":1}}],["конкурентностью",{"2":{"483":1}}],["конкурентов",{"0":{"21":1},"2":{"22":1,"239":1}}],["конкурируют",{"2":{"253":1}}],["конкурировать",{"2":{"155":1}}],["конкурировали",{"2":{"155":1}}],["кодироваться",{"2":{"426":1}}],["кодированию",{"2":{"271":1}}],["кодирования",{"2":{"234":1,"298":1,"375":1,"416":2,"444":1}}],["кодирование",{"2":{"215":1,"371":1}}],["кодировке",{"2":{"416":1}}],["кодирует",{"2":{"416":1}}],["кодов",{"2":{"421":1}}],["кодовая",{"2":{"291":1,"369":1}}],["кодовой",{"2":{"218":1,"463":1,"466":1}}],["кодовых",{"2":{"169":1,"175":1,"198":1}}],["кодовые",{"0":{"169":1},"1":{"170":1,"171":1,"172":1,"173":1,"174":1},"2":{"174":1}}],["кодом",{"2":{"67":1,"124":1,"175":1,"178":1,"187":2,"231":1,"305":1,"333":1,"344":1,"363":1,"368":1,"405":1,"420":1,"421":1,"422":1,"442":1,"447":1,"451":1,"454":1,"457":1,"458":1,"463":1,"465":1,"483":1}}],["кодера",{"2":{"430":1}}],["коде",{"0":{"511":1},"2":{"82":1,"160":3,"174":1,"176":1,"184":1,"187":2,"198":2,"214":1,"225":1,"228":1,"230":1,"234":2,"298":3,"299":1,"338":1,"347":1,"354":1,"360":1,"363":1,"400":1,"407":1,"410":1,"420":1,"444":1,"447":1,"448":1,"453":1,"454":1,"457":1,"468":2,"482":1,"483":1,"490":1,"538":1,"543":1,"545":1,"546":1,"578":1}}],["коду",{"2":{"41":1,"185":1,"201":1,"309":1,"333":1,"339":1,"368":1,"407":1,"416":1,"457":1}}],["кода",{"0":{"379":1,"549":1},"2":{"40":1,"64":1,"96":1,"101":1,"122":2,"124":1,"131":1,"132":1,"151":2,"156":2,"157":1,"158":1,"159":2,"160":6,"174":1,"178":3,"183":1,"184":1,"187":2,"188":1,"192":1,"196":1,"198":2,"199":2,"200":1,"201":1,"202":1,"217":1,"228":1,"232":2,"290":3,"293":2,"298":2,"301":2,"304":1,"314":1,"315":1,"319":1,"322":1,"326":2,"327":5,"331":1,"333":1,"335":1,"336":1,"337":1,"338":1,"343":1,"345":1,"346":1,"348":3,"349":1,"361":1,"363":1,"364":1,"367":1,"368":1,"369":2,"377":2,"379":1,"390":1,"394":2,"396":1,"397":1,"399":1,"400":1,"409":1,"410":2,"413":1,"414":1,"415":1,"416":2,"418":1,"419":1,"420":3,"421":2,"430":1,"442":3,"443":1,"444":1,"448":2,"455":2,"456":2,"457":2,"458":2,"459":1,"463":3,"465":2,"468":1,"478":1,"482":3,"483":1,"484":1,"486":2,"490":2,"491":1,"492":2,"501":1,"541":1,"542":2,"545":1,"549":2}}],["код",{"0":{"201":1,"380":1,"450":1},"1":{"204":1,"205":1,"206":1,"207":1},"2":{"9":1,"22":1,"68":1,"83":1,"89":1,"96":10,"98":1,"112":1,"114":1,"122":2,"125":1,"138":1,"144":1,"145":1,"149":1,"154":1,"156":1,"157":2,"158":2,"160":5,"169":1,"174":1,"178":1,"179":1,"180":5,"181":1,"183":1,"187":4,"188":1,"189":1,"191":1,"198":3,"199":2,"201":6,"202":2,"211":1,"212":2,"214":2,"217":2,"227":1,"228":1,"233":1,"234":2,"238":2,"252":1,"260":1,"265":1,"271":1,"290":1,"298":1,"299":2,"305":2,"311":1,"312":1,"313":1,"323":1,"326":1,"327":1,"328":1,"333":1,"335":1,"336":1,"348":1,"349":1,"357":2,"359":1,"363":1,"368":3,"372":1,"396":1,"398":2,"406":1,"407":3,"410":1,"415":1,"417":1,"418":1,"419":2,"420":5,"421":3,"422":3,"430":1,"443":2,"444":5,"446":1,"447":2,"450":1,"452":1,"454":3,"457":2,"463":1,"465":1,"466":2,"467":1,"474":1,"483":2,"486":1,"491":2,"521":1,"532":1,"563":1,"570":1,"590":1}}],["к",{"0":{"273":1,"298":1,"337":1},"1":{"338":1,"339":1,"340":1,"341":1,"342":1,"343":1},"2":{"2":1,"11":1,"16":1,"23":1,"26":1,"38":1,"40":2,"41":4,"51":1,"53":2,"58":1,"59":2,"63":1,"73":1,"74":1,"83":1,"96":2,"104":1,"117":1,"121":1,"122":1,"123":4,"124":7,"125":6,"126":1,"127":1,"128":1,"130":6,"131":1,"134":3,"135":1,"139":2,"142":7,"143":1,"144":1,"145":4,"147":1,"149":1,"151":1,"152":4,"153":1,"155":3,"156":1,"160":19,"162":1,"166":1,"168":3,"176":1,"177":1,"178":1,"180":4,"181":2,"182":1,"183":1,"184":1,"185":1,"187":3,"188":1,"189":1,"190":1,"191":1,"195":1,"196":2,"198":3,"199":1,"201":1,"202":1,"204":1,"208":1,"209":3,"213":1,"220":2,"224":1,"226":1,"227":1,"228":2,"231":5,"232":2,"234":5,"235":1,"237":1,"239":2,"240":1,"241":1,"242":2,"243":3,"244":1,"246":1,"247":1,"248":1,"249":2,"251":1,"252":1,"256":1,"257":2,"260":1,"261":2,"262":1,"263":1,"264":2,"271":6,"272":1,"273":5,"275":3,"277":1,"285":1,"286":1,"289":3,"291":5,"293":2,"294":1,"296":1,"298":5,"299":6,"300":1,"301":1,"302":1,"303":1,"304":2,"305":1,"306":4,"308":2,"309":1,"311":2,"313":2,"314":1,"315":3,"316":1,"318":3,"319":7,"320":1,"321":2,"322":1,"325":3,"326":2,"327":7,"328":2,"329":1,"330":1,"331":5,"333":2,"334":2,"335":2,"336":2,"337":1,"338":1,"339":1,"340":1,"341":1,"345":3,"346":3,"348":1,"349":1,"350":4,"351":2,"352":1,"354":2,"356":2,"357":2,"358":1,"359":1,"362":4,"363":2,"365":3,"368":2,"369":1,"371":1,"372":1,"375":4,"377":2,"385":1,"397":2,"399":3,"400":3,"401":1,"402":1,"404":2,"405":1,"406":1,"407":4,"408":1,"409":1,"410":1,"411":1,"413":3,"414":1,"415":1,"416":1,"420":3,"421":1,"422":8,"424":1,"425":2,"426":1,"430":5,"433":2,"434":1,"436":1,"437":1,"442":3,"444":1,"445":1,"446":1,"447":1,"448":3,"449":1,"450":2,"452":6,"453":5,"457":3,"458":1,"462":1,"464":1,"466":1,"474":1,"476":4,"478":2,"483":1,"487":1,"491":3,"492":3,"503":1,"508":3,"522":1,"525":1,"533":1,"541":1,"545":2,"546":1,"547":1,"570":1}}],["вкратце",{"2":{"304":1}}],["включено",{"2":{"252":2}}],["включенное",{"2":{"252":1}}],["включенные",{"2":{"193":1}}],["включены",{"2":{"240":1,"410":1}}],["включением",{"2":{"342":1,"404":1}}],["включение",{"2":{"183":1,"422":1,"447":1}}],["включения",{"2":{"181":1,"317":1,"330":1,"335":1,"401":1,"409":1,"442":1,"462":1,"463":1,"474":1}}],["включен",{"2":{"180":1,"356":1,"404":1,"462":1}}],["включена",{"2":{"152":1,"271":1}}],["включив",{"2":{"451":1,"454":1}}],["включите",{"2":{"181":1,"316":1}}],["включить",{"2":{"145":1,"146":1,"180":1,"183":3,"196":1,"314":1,"341":1,"345":1,"401":1,"455":1}}],["включили",{"2":{"183":1,"339":1,"345":1,"404":1,"410":1}}],["включил",{"2":{"146":1,"538":1}}],["включим",{"2":{"121":1,"181":1,"335":1,"337":1}}],["включать",{"2":{"155":1,"181":1,"183":1,"298":1,"332":1,"333":1,"359":1,"410":1,"430":1,"454":1,"466":1,"467":1}}],["включающий",{"2":{"132":1}}],["включают",{"2":{"74":1,"357":1,"399":1,"466":1,"573":1}}],["включаем",{"2":{"406":1,"407":1}}],["включаемые",{"2":{"131":1}}],["включается",{"2":{"123":1,"232":1,"430":1}}],["включает",{"0":{"141":1,"381":1},"1":{"142":1,"382":1,"383":1,"384":1,"385":1,"386":1,"387":1,"388":1,"389":1,"390":1,"391":1,"392":1,"393":1},"2":{"74":1,"75":1,"79":1,"132":1,"139":1,"145":1,"198":1,"199":1,"222":1,"239":3,"253":1,"256":1,"266":1,"331":1,"340":1,"444":2,"462":1,"466":1}}],["включая",{"2":{"47":1,"155":1,"195":1,"312":1,"429":1,"430":1,"474":1,"483":1,"490":1,"522":1,"573":1}}],["вкладок",{"2":{"319":1}}],["вкладка",{"2":{"283":1}}],["вкладках",{"2":{"95":1}}],["вкладки",{"2":{"243":1,"244":1,"319":2}}],["вклад",{"2":{"96":1,"201":1,"237":1}}],["вкладывание",{"2":{"89":1}}],["вмешательства",{"2":{"299":1}}],["вместе",{"2":{"130":1,"138":1,"168":1,"177":1,"191":1,"200":1,"237":1,"263":1,"284":1,"301":1,"325":1,"345":1,"399":1,"406":1,"410":1,"421":1,"436":1,"444":1,"465":1,"476":1,"483":1,"484":1}}],["вместо",{"2":{"23":1,"125":1,"128":1,"131":1,"144":2,"158":1,"159":1,"160":1,"183":1,"191":1,"195":1,"223":1,"224":1,"228":1,"233":1,"273":1,"291":1,"299":1,"308":1,"312":1,"316":1,"318":1,"319":2,"330":1,"332":1,"356":1,"362":1,"363":1,"407":1,"410":1,"424":1,"429":1,"445":1,"447":1,"450":1,"461":1,"474":1,"492":1,"546":2,"590":1}}],["втянуть",{"2":{"275":1}}],["вторых",{"2":{"491":1}}],["вторым",{"2":{"448":1}}],["вторично",{"2":{"430":1}}],["вторичным",{"2":{"254":1}}],["вторичный",{"2":{"241":1,"421":1}}],["вторую",{"2":{"345":1}}],["вторая",{"2":{"130":1,"198":1,"327":1}}],["второго",{"2":{"423":1,"452":1}}],["втором",{"2":{"123":2,"226":1,"404":1}}],["второе",{"2":{"96":1,"187":1,"420":1,"421":1}}],["второстепенных",{"2":{"17":1}}],["второй",{"2":{"17":1,"51":1,"56":1,"58":1,"72":1,"212":1,"298":1,"341":1,"358":1,"404":1,"421":1,"430":3,"442":1,"448":2,"483":1,"508":2,"568":1}}],["впрочем",{"2":{"578":1}}],["впредь",{"2":{"302":1}}],["впервые",{"2":{"466":1}}],["вперёд",{"2":{"399":1}}],["вперед",{"2":{"167":1,"188":1,"235":1,"294":1,"299":1,"313":1,"413":1,"419":1,"464":1}}],["впечатляющее",{"2":{"410":1}}],["впечатляющей",{"2":{"337":1}}],["впечатление",{"2":{"258":1,"260":1,"501":1,"541":1}}],["вплоть",{"2":{"156":1,"194":1,"362":1,"451":1,"456":1}}],["вполне",{"2":{"4":1,"59":1,"96":2,"123":1,"137":1,"179":1,"311":1,"340":1,"414":1,"415":1,"416":1,"466":1,"478":1,"482":1,"491":1,"541":1}}],["входе",{"2":{"492":1}}],["входов",{"0":{"353":1},"2":{"444":1}}],["входящего",{"2":{"331":1,"446":1}}],["входящий",{"2":{"147":1}}],["входящие",{"2":{"146":1,"197":1}}],["входящих",{"2":{"96":1,"334":1,"335":1,"448":1}}],["входят",{"2":{"296":1}}],["входы",{"2":{"229":1,"445":1}}],["входного",{"2":{"357":1,"446":1}}],["входной",{"2":{"229":1}}],["входные",{"2":{"226":1,"352":1}}],["входных",{"2":{"213":1,"221":1,"444":1}}],["входными",{"2":{"188":1}}],["входным",{"2":{"131":1}}],["вход",{"2":{"228":1,"418":2}}],["входить",{"2":{"228":1,"350":1}}],["входит",{"2":{"125":1,"151":1,"244":1,"419":1,"461":1,"501":1}}],["входа",{"2":{"29":1,"145":1,"159":1,"196":4,"224":1,"331":1,"333":1,"419":1,"482":1,"492":1}}],["вузах",{"2":{"65":1}}],["владельцем",{"2":{"306":1}}],["власть",{"2":{"96":1}}],["властвуй",{"2":{"2":1}}],["вложенных",{"0":{"409":1},"2":{"410":1,"438":1}}],["вложенные",{"0":{"408":1},"1":{"409":1,"410":1},"2":{"413":1}}],["вложенном",{"2":{"360":1}}],["вложенному",{"2":{"359":1}}],["вложенного",{"2":{"264":1}}],["вложены",{"2":{"275":1}}],["вложений",{"2":{"62":1}}],["влияя",{"2":{"436":1,"476":1}}],["влияющее",{"2":{"255":1}}],["влияющий",{"2":{"233":1}}],["влияют",{"2":{"198":1,"206":1,"239":1}}],["влиять",{"2":{"192":1}}],["влияет",{"2":{"96":1,"161":1,"252":1,"327":1,"484":1}}],["влияние",{"2":{"74":1,"274":1}}],["вязала",{"2":{"62":1}}],["вновь",{"2":{"328":1,"490":1}}],["вносит",{"2":{"490":1}}],["вносится",{"2":{"442":1}}],["вносите",{"2":{"201":1}}],["вносить",{"2":{"184":1}}],["вносят",{"2":{"155":1}}],["внушительная",{"2":{"363":1}}],["внушительное",{"2":{"268":1}}],["внучатому",{"2":{"359":1}}],["внуку",{"2":{"308":1}}],["внутрь",{"2":{"410":1,"430":1}}],["внутреннюю",{"2":{"311":1,"363":1}}],["внутренняя",{"2":{"228":1}}],["внутреннее",{"2":{"318":1,"367":1,"368":2}}],["внутренне",{"2":{"228":1}}],["внутреннего",{"2":{"218":1,"223":1,"321":1,"491":1}}],["внутренней",{"2":{"168":1,"179":1,"226":1,"302":1,"311":1}}],["внутреннему",{"2":{"215":1,"218":1,"416":1}}],["внутреннем",{"2":{"160":1,"321":1}}],["внутренний",{"2":{"198":1,"321":1,"420":1,"438":1}}],["внутренним",{"2":{"197":1,"228":1,"320":1,"422":1}}],["внутренними",{"2":{"130":1}}],["внутренних",{"2":{"168":1,"237":1,"338":1,"358":1,"445":1}}],["внутренние",{"2":{"132":1,"313":1,"482":1}}],["внутри",{"2":{"48":1,"135":1,"143":1,"156":3,"157":2,"165":1,"180":2,"184":2,"186":1,"187":4,"190":1,"194":1,"220":1,"229":1,"233":1,"234":2,"252":1,"253":1,"266":1,"271":2,"291":1,"298":1,"315":1,"316":1,"321":1,"325":1,"329":1,"357":1,"359":1,"362":2,"366":1,"415":1,"418":1,"419":1,"426":1,"437":1,"448":3,"474":3,"477":1,"478":1,"570":1,"583":1}}],["внимательно",{"0":{"243":1}}],["вниманию",{"2":{"256":1}}],["внимания",{"2":{"139":2,"218":1,"255":1,"256":1,"285":1}}],["внимание",{"2":{"114":1,"129":1,"130":1,"144":1,"147":1,"155":1,"156":1,"157":3,"159":1,"160":1,"180":1,"186":2,"187":3,"212":1,"222":1,"227":2,"232":1,"234":1,"241":2,"243":1,"244":1,"255":1,"268":1,"271":1,"273":2,"276":1,"291":1,"302":1,"306":1,"308":1,"311":1,"315":1,"318":1,"327":2,"329":1,"338":1,"341":1,"359":1,"368":1,"369":3,"377":1,"404":2,"407":1,"410":1,"416":1,"420":1,"436":1,"448":1,"450":1,"453":3,"463":1}}],["вниз",{"2":{"232":1,"260":1,"273":1,"308":1,"502":1,"568":1}}],["внизу",{"2":{"33":1,"256":1,"261":1}}],["внедрена",{"2":{"360":1}}],["внедрении",{"2":{"285":1}}],["внедрения",{"2":{"177":1,"289":1,"300":1,"328":1}}],["внедрить",{"2":{"299":1,"404":1,"437":1}}],["внедряйте",{"2":{"437":1}}],["внедряют",{"2":{"180":1,"422":1}}],["внедрять",{"2":{"56":1,"181":1,"261":1}}],["внесите",{"0":{"500":1}}],["внесли",{"2":{"237":1,"313":1}}],["внесения",{"2":{"500":1}}],["внесение",{"2":{"457":1}}],["внесенных",{"2":{"156":1}}],["внесем",{"2":{"179":1}}],["внести",{"2":{"40":1,"154":1,"200":1,"442":1}}],["внешней",{"2":{"478":1}}],["внешнего",{"2":{"155":1,"181":1,"228":1}}],["внешним",{"2":{"483":1}}],["внешние",{"2":{"196":1}}],["внешний",{"2":{"155":1,"182":1,"291":1,"406":1,"420":1,"438":1}}],["внешних",{"2":{"122":1,"445":1,"483":1}}],["вне",{"2":{"135":1,"178":1,"232":1,"291":1,"361":1}}],["вредными",{"2":{"491":1}}],["вредоносные",{"2":{"275":1}}],["времена",{"2":{"490":1}}],["временами",{"2":{"155":1}}],["временных",{"2":{"445":1}}],["временным",{"2":{"272":1}}],["временная",{"2":{"416":1}}],["временно",{"2":{"474":1,"478":1}}],["временной",{"2":{"327":1,"515":1}}],["временное",{"2":{"125":1}}],["временем",{"2":{"160":1,"222":1,"396":1}}],["времени",{"2":{"62":1,"96":1,"102":1,"132":1,"142":1,"160":1,"185":1,"227":1,"231":1,"232":1,"233":1,"247":2,"251":1,"258":2,"319":1,"327":4,"363":1,"399":3,"420":6,"421":1,"456":1,"479":1,"486":1,"490":1,"491":1,"508":1}}],["время",{"0":{"474":1},"2":{"86":1,"92":1,"114":1,"121":1,"129":1,"134":1,"142":3,"145":1,"151":1,"156":2,"157":2,"158":1,"160":1,"168":1,"179":1,"180":3,"183":1,"187":1,"188":1,"201":1,"215":1,"226":1,"228":1,"229":1,"233":1,"234":2,"246":1,"247":3,"248":1,"251":1,"256":1,"264":1,"267":1,"273":1,"279":1,"298":3,"309":1,"320":1,"323":2,"333":1,"334":1,"336":1,"339":1,"351":1,"354":1,"357":3,"362":1,"368":2,"369":1,"371":1,"375":1,"404":1,"407":2,"413":1,"420":1,"422":1,"423":1,"430":1,"442":2,"444":1,"446":1,"447":1,"448":1,"456":1,"457":1,"466":1,"474":1,"477":1,"478":1,"479":5,"483":2,"484":1,"486":1,"491":1,"508":2,"541":1,"570":1,"575":1}}],["вращение",{"2":{"259":1}}],["вращающихся",{"2":{"259":1,"430":1}}],["вроде",{"2":{"62":1,"118":1,"478":1,"492":1}}],["вручную",{"2":{"38":1,"152":1,"198":2,"289":1,"299":1,"302":1,"444":1,"451":1}}],["вряд",{"2":{"26":1,"442":1,"491":1}}],["взяли",{"2":{"483":1}}],["взяв",{"2":{"482":1}}],["взята",{"2":{"183":1}}],["взять",{"2":{"4":1,"151":1,"156":1,"351":1,"399":1,"428":1,"446":1,"541":1}}],["взлетевших",{"2":{"482":1}}],["взлететь",{"2":{"430":1}}],["взломают",{"2":{"421":1}}],["взглянув",{"2":{"371":1}}],["взглянуть",{"2":{"27":1,"138":1,"369":1}}],["взгляда",{"2":{"237":1,"240":1,"250":1,"266":1}}],["взгляд",{"2":{"160":1,"202":1,"228":1,"234":1,"239":1,"268":1,"272":1,"409":1}}],["взвесить",{"2":{"156":1}}],["взаимопониманием",{"2":{"287":1}}],["взаимоотношения",{"2":{"206":1}}],["взаимозаменяемые",{"2":{"156":1,"233":1}}],["взаимодействуем",{"2":{"399":1}}],["взаимодействует",{"2":{"34":1,"239":1,"249":1}}],["взаимодействуют",{"2":{"304":1,"325":1,"438":1}}],["взаимодействовать",{"2":{"265":1,"302":1,"347":1,"350":1,"352":2,"354":1,"368":1,"371":1,"372":1,"422":1,"453":1}}],["взаимодействии",{"2":{"306":1,"444":1}}],["взаимодействию",{"2":{"231":1}}],["взаимодействие",{"0":{"306":1},"1":{"307":1,"308":1},"2":{"187":2,"209":1,"231":3,"239":1,"325":1,"332":1,"340":1,"352":1,"353":2,"357":1,"367":1,"368":1,"422":1,"444":2,"453":1}}],["взаимодействием",{"2":{"74":1,"188":1,"262":1,"299":1,"352":1,"353":1}}],["взаимодействий",{"0":{"352":1},"2":{"155":1,"231":1,"249":1,"344":1,"399":1,"414":2,"445":2}}],["взаимодействия",{"0":{"262":1,"333":1},"1":{"263":1,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1,"334":1,"335":1,"336":1},"2":{"74":1,"199":1,"202":1,"205":1,"237":2,"239":2,"249":1,"266":1,"272":1,"275":1,"306":2,"328":1,"332":1,"333":1,"342":1,"348":1,"352":1,"363":1,"397":1,"414":1,"421":1,"422":1,"435":1,"442":1,"453":1,"455":1,"456":1,"476":1,"483":1}}],["взаимосвязаны",{"2":{"236":1}}],["взаимосвязь",{"2":{"226":1}}],["взаимосвязи",{"2":{"74":1,"442":1}}],["взаимосвязей",{"2":{"73":1,"456":1}}],["вентиляторов",{"2":{"430":1}}],["вело",{"2":{"289":1}}],["велосипед",{"2":{"181":1,"191":1,"223":1,"231":1}}],["великолепным",{"2":{"159":1}}],["ведение",{"2":{"415":1}}],["ведется",{"2":{"279":1,"422":1}}],["ведет",{"2":{"167":1,"226":1,"375":1,"404":1}}],["ведь",{"2":{"407":1,"447":1}}],["ведома",{"2":{"279":1}}],["ведут",{"2":{"164":1,"165":1,"253":1,"362":1,"413":1}}],["ведущие",{"2":{"142":1,"158":1}}],["веток",{"2":{"465":1}}],["ветвью",{"2":{"492":1}}],["ветвей",{"2":{"464":1}}],["ветвями",{"0":{"464":1},"2":{"464":1,"465":1}}],["ветвление",{"2":{"463":1}}],["ветви",{"2":{"137":1}}],["веткой",{"2":{"463":1,"465":1}}],["ветке",{"2":{"463":2,"464":1,"465":1,"469":1,"561":1}}],["ветки",{"2":{"396":2,"463":1,"464":4,"465":1,"561":1}}],["ветку",{"2":{"151":1,"396":2,"464":3,"465":2,"466":2,"561":2}}],["ветках",{"2":{"469":1,"478":1}}],["ветка",{"2":{"121":1,"463":2}}],["вещах",{"2":{"157":1,"327":1}}],["вещи",{"2":{"124":1,"240":1,"452":1,"474":1,"483":1,"575":1}}],["вещь",{"2":{"25":1,"181":1,"183":1}}],["везде",{"2":{"104":1}}],["веса",{"2":{"490":1}}],["вести",{"2":{"320":1,"492":1}}],["вестись",{"2":{"61":1,"70":1}}],["весомых",{"2":{"263":1}}],["веских",{"2":{"226":1}}],["вес",{"2":{"118":1,"243":1}}],["весьма",{"2":{"107":1,"156":1,"284":1,"311":1,"346":1,"422":1,"578":1}}],["весь",{"2":{"50":1,"96":1,"130":1,"158":1,"160":1,"199":1,"231":1,"260":1,"286":1,"299":1,"333":1,"363":1,"399":2,"465":1,"588":1}}],["верен",{"2":{"492":1}}],["вероятно",{"2":{"465":1}}],["вероятность",{"2":{"70":1,"156":1,"291":1,"436":1,"477":1,"479":1}}],["верстать",{"2":{"487":1,"490":1}}],["верстку",{"2":{"490":1}}],["версткой",{"2":{"436":1,"476":1}}],["верстки",{"2":{"369":1,"538":1}}],["версией",{"2":{"462":1}}],["версионность",{"2":{"436":1,"588":1}}],["версионности",{"2":{"76":1}}],["версию",{"2":{"178":1,"180":1,"339":1,"396":1,"397":1,"459":1,"462":1,"491":1,"492":1,"573":1}}],["версий",{"0":{"442":1},"1":{"443":1,"444":1,"445":1,"446":1,"447":1,"448":1,"449":1,"450":1,"451":1,"452":1,"453":1,"454":1,"455":1,"456":1,"457":1,"458":1,"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1,"467":1,"468":1,"469":1},"2":{"35":1,"142":1,"178":2,"390":1,"441":1,"467":2}}],["версиях",{"2":{"180":1}}],["версиями",{"2":{"89":1,"126":1}}],["версия",{"0":{"33":1},"2":{"80":1,"95":1,"134":1,"155":1,"178":3,"370":1,"375":1,"460":1,"545":1}}],["версии",{"2":{"29":1,"30":1,"33":2,"47":1,"96":1,"180":1,"226":1,"318":1,"364":1,"396":2,"450":1,"588":1}}],["вертикали",{"2":{"352":1}}],["вертикальный",{"2":{"363":1}}],["вертикальные",{"2":{"242":1,"266":1}}],["вертикального",{"2":{"271":1}}],["вертикальной",{"2":{"271":1,"363":1}}],["верхняя",{"2":{"570":1}}],["верхний",{"2":{"543":1}}],["верхнее",{"2":{"271":1}}],["верхней",{"2":{"242":1,"260":1,"263":1,"264":1,"271":1,"272":1}}],["верхнем",{"2":{"240":2,"268":1,"272":1,"301":2,"517":1}}],["верхнего",{"2":{"127":1,"142":3,"154":1,"172":1,"351":1,"362":1,"401":1,"402":1}}],["верха",{"2":{"180":1,"273":1,"404":1}}],["вернулся",{"2":{"490":1}}],["вернуть",{"2":{"160":1,"233":1,"234":1,"339":1,"422":1}}],["вернуться",{"2":{"72":1,"264":1,"299":2,"402":1,"457":2}}],["верно",{"2":{"187":1}}],["верное",{"2":{"156":1}}],["вернемся",{"2":{"228":1,"368":2}}],["вернетесь",{"2":{"201":1}}],["вернет",{"2":{"125":1,"316":1,"369":1,"452":1}}],["вернее",{"2":{"25":1}}],["вебприложения",{"2":{"541":1,"542":1}}],["вебприложение",{"2":{"538":1}}],["веба",{"2":{"490":1}}],["вебсервер",{"2":{"425":1,"430":1,"492":1}}],["вебсервере",{"2":{"425":1}}],["вебсервера",{"2":{"125":1,"430":1}}],["вебсайта",{"2":{"396":1,"501":1,"541":1,"542":1}}],["вебсайт",{"2":{"396":1,"540":1}}],["вебсайты",{"2":{"21":1}}],["веб",{"0":{"141":1,"145":1,"152":1,"157":1,"289":1,"333":1,"387":1,"536":1},"1":{"142":1,"146":1,"147":1,"148":1,"149":1,"150":1,"158":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"334":1,"335":1,"336":1},"2":{"3":1,"11":2,"125":2,"139":5,"141":2,"142":3,"143":3,"144":2,"145":10,"146":1,"147":1,"151":1,"152":5,"153":1,"154":4,"155":4,"156":2,"157":2,"158":2,"159":1,"162":1,"165":1,"177":2,"178":2,"179":1,"180":5,"181":1,"183":3,"188":2,"194":2,"196":1,"198":1,"199":2,"200":2,"207":1,"225":1,"231":3,"237":2,"239":1,"240":1,"256":1,"258":1,"260":1,"261":1,"264":1,"268":1,"287":1,"289":3,"291":13,"296":1,"297":1,"298":1,"300":3,"301":1,"302":1,"303":2,"304":1,"318":1,"319":2,"325":3,"327":5,"332":1,"336":1,"340":2,"344":1,"346":2,"347":1,"348":3,"350":1,"369":1,"376":1,"377":3,"385":1,"386":1,"399":8,"404":1,"411":1,"414":2,"420":1,"422":2,"423":2,"430":1,"436":2,"455":1,"456":1,"466":1,"467":1,"476":2,"479":1,"481":1,"483":1,"492":3,"521":1,"532":1,"538":1,"540":1,"541":1,"542":2}}],["вдохновения",{"2":{"22":1}}],["вводе",{"2":{"482":1}}],["вводя",{"2":{"453":1}}],["вводом",{"2":{"359":1}}],["вводы",{"2":{"253":1}}],["вводились",{"2":{"482":1}}],["вводился",{"2":{"308":1}}],["вводим",{"2":{"399":1}}],["вводимых",{"2":{"187":1}}],["вводит",{"2":{"166":1,"420":1}}],["вводить",{"2":{"2":1,"183":1,"185":1,"251":1,"484":1}}],["ввод",{"2":{"187":1,"352":2,"453":1}}],["ввода",{"0":{"251":1,"359":1},"1":{"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"263":1,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1},"2":{"166":1,"185":2,"187":7,"188":1,"251":1,"253":1,"322":1,"354":1,"359":3,"364":1,"369":1,"402":1,"420":6,"535":1}}],["вверху",{"2":{"256":1}}],["вверх",{"2":{"215":1,"306":1,"308":1,"360":1}}],["ввели",{"2":{"179":2,"354":1,"424":1,"453":1}}],["введи",{"2":{"483":1}}],["введите",{"2":{"179":5,"447":1,"500":1}}],["введём",{"2":{"465":1}}],["введет",{"2":{"420":1}}],["введенный",{"2":{"474":1}}],["введенных",{"2":{"320":1}}],["введенная",{"2":{"244":1}}],["введен",{"2":{"200":1}}],["введении",{"2":{"444":1}}],["введением",{"2":{"442":1}}],["введение",{"0":{"327":1},"1":{"328":1,"329":1,"330":1},"2":{"197":1,"466":1}}],["введения",{"2":{"142":1,"248":1}}],["введем",{"2":{"157":1,"344":1}}],["ввести",{"2":{"16":1,"179":1,"185":1,"251":1,"420":1,"447":1}}],["ввиду",{"2":{"4":1}}],["валидаций",{"2":{"448":1}}],["валидацией",{"2":{"422":1}}],["валидация",{"2":{"226":1,"420":2,"478":1}}],["валиден",{"2":{"123":1}}],["важен",{"2":{"180":1,"197":1,"200":1,"201":1,"220":1,"236":1,"249":1}}],["важнейших",{"2":{"445":1}}],["важнее",{"2":{"269":1,"399":1}}],["важна",{"2":{"239":1}}],["важная",{"2":{"40":1,"137":1,"339":1,"423":1}}],["важный",{"2":{"194":1,"208":1,"234":1,"304":1,"368":1,"411":1}}],["важны",{"2":{"176":1,"258":1,"479":1}}],["важные",{"2":{"153":1,"156":1,"235":1,"287":1,"325":1,"382":1,"413":1,"442":1,"468":1,"489":1}}],["важными",{"2":{"153":1,"246":1,"287":1,"415":1}}],["важных",{"2":{"74":1,"157":1,"180":1,"208":1,"232":1,"346":1,"410":1}}],["важного",{"2":{"256":1}}],["важное",{"2":{"252":1,"368":1}}],["важность",{"2":{"243":1}}],["важной",{"2":{"179":1,"260":1,"273":1,"457":1,"463":1}}],["важно",{"2":{"152":1,"158":1,"159":1,"160":1,"163":1,"174":2,"187":1,"198":1,"201":1,"222":1,"225":1,"232":1,"236":1,"242":2,"261":1,"263":1,"267":1,"273":1,"291":1,"298":1,"339":1,"345":1,"363":1,"399":1,"415":1,"416":1,"457":1,"466":1,"469":1}}],["ванильному",{"2":{"160":1}}],["варьироваться",{"2":{"284":1}}],["варьируются",{"2":{"142":1}}],["вариации",{"2":{"253":1}}],["вариаций",{"2":{"222":1}}],["вариациями",{"2":{"202":1}}],["вариантом",{"2":{"151":1,"190":1,"264":1,"268":1,"414":1}}],["вариантов",{"2":{"123":1,"145":2,"151":2,"156":1,"157":1,"178":1,"184":1,"247":2,"251":1,"252":1,"264":1,"265":1,"266":1,"268":1,"429":1,"542":2,"572":1,"573":2}}],["варианте",{"2":{"117":1,"186":1,"378":1}}],["варианту",{"2":{"114":1}}],["вариантам",{"2":{"393":1}}],["вариантами",{"2":{"179":1,"183":1,"320":1}}],["вариантах",{"2":{"153":1,"252":1,"263":1,"419":1}}],["варианта",{"2":{"59":1,"114":1,"130":1,"152":2,"348":1,"491":1,"508":2,"542":2}}],["варианты",{"0":{"124":1,"160":1},"2":{"16":1,"123":1,"126":1,"145":1,"154":1,"155":1,"226":1,"262":1,"281":1,"298":1,"313":1,"319":1,"337":1,"425":1,"453":1,"573":1}}],["вариант",{"2":{"4":2,"17":1,"138":1,"156":2,"178":2,"179":1,"180":1,"212":1,"252":2,"280":2,"281":1,"298":1,"331":1,"356":1,"404":1,"474":1,"481":1,"491":1,"508":3}}],["вас",{"2":{"126":1,"159":1,"176":1,"198":1,"201":1,"234":1,"248":1,"272":1,"341":1,"364":1,"366":1,"447":1,"448":1,"461":2,"466":1,"474":1,"478":1,"562":2}}],["васи",{"2":{"123":1}}],["вася",{"2":{"123":1}}],["вами",{"2":{"179":2,"187":1}}],["вам",{"2":{"96":1,"126":2,"130":1,"132":3,"139":1,"143":1,"153":1,"156":4,"157":1,"159":1,"160":2,"169":1,"176":2,"178":1,"179":1,"191":3,"198":2,"201":2,"226":4,"235":2,"240":1,"244":1,"274":1,"287":1,"288":1,"290":1,"305":1,"308":1,"319":1,"337":1,"362":1,"369":2,"375":3,"380":2,"397":1,"425":1,"426":1,"429":1,"438":1,"459":1,"460":1,"462":1,"481":1,"484":1,"490":1,"491":1,"492":1}}],["ваши",{"2":{"401":1,"478":1}}],["ваших",{"2":{"244":1,"337":1}}],["ваша",{"2":{"174":1}}],["вашу",{"2":{"122":1,"156":1,"459":1,"460":1}}],["ваше",{"2":{"156":1,"201":1,"327":1,"375":1,"426":1,"484":1,"500":1,"563":1}}],["вашей",{"2":{"142":1,"156":1,"179":1,"212":1,"218":1,"311":1,"463":1}}],["вашем",{"2":{"122":1,"202":1,"377":1,"426":1,"466":1,"492":1}}],["вашему",{"2":{"96":1,"122":1,"179":1,"347":1,"422":1,"425":2,"478":1}}],["вашего",{"2":{"96":1,"125":1,"126":2,"131":1,"142":2,"156":1,"168":1,"179":2,"180":1,"181":1,"202":1,"206":1,"235":1,"299":1,"304":2,"319":1,"327":1,"396":2,"425":1,"437":1,"438":1,"483":1,"484":2,"486":1,"492":1,"561":1,"562":1,"587":1,"590":2}}],["ваш",{"2":{"4":1,"124":1,"142":1,"156":1,"157":1,"174":1,"180":1,"181":1,"396":2,"426":1,"462":1,"474":1,"481":1,"489":1,"491":1,"492":2,"561":1}}],["всплывающем",{"2":{"266":1,"283":1}}],["всплывающего",{"2":{"266":2}}],["всплывающей",{"2":{"254":2}}],["всплывающее",{"2":{"254":1}}],["всплывающая",{"2":{"254":1}}],["вспомните",{"2":{"239":1,"421":1}}],["вспомнить",{"2":{"181":1}}],["вспомним",{"2":{"232":1}}],["вспоминать",{"2":{"212":1}}],["вспомогательный",{"2":{"312":1}}],["вспомогательные",{"2":{"4":1,"227":1}}],["вспомогательная",{"2":{"187":1,"352":1,"369":2}}],["вскоре",{"2":{"155":1,"179":1,"244":1,"327":1,"400":1}}],["встающих",{"2":{"541":1}}],["вставке",{"2":{"168":1}}],["вставать",{"2":{"4":1}}],["вступает",{"2":{"158":1}}],["встраивается",{"2":{"515":1}}],["встретит",{"2":{"447":1}}],["встретить",{"2":{"169":1,"174":1,"196":1,"266":1,"285":1,"314":1}}],["встречал",{"2":{"491":1}}],["встречали",{"2":{"408":1}}],["встречавшейся",{"2":{"238":1}}],["встречающихся",{"2":{"376":1}}],["встречающиеся",{"2":{"142":1,"202":1}}],["встречаются",{"2":{"191":1,"202":1,"203":1}}],["встречается",{"2":{"177":1,"196":1,"231":1,"264":1,"277":1,"278":1}}],["встроенную",{"2":{"337":1}}],["встроенная",{"2":{"325":1}}],["встроенным",{"2":{"356":1}}],["встроенный",{"2":{"178":1,"226":1}}],["встроенные",{"0":{"168":1}}],["встроенных",{"0":{"161":1},"1":{"162":1,"163":1,"164":1,"165":1,"166":1,"167":1},"2":{"167":1,"168":1,"416":1}}],["встроенного",{"2":{"155":1}}],["всячески",{"2":{"500":1}}],["всяких",{"2":{"492":1}}],["вся",{"2":{"122":1,"144":1,"152":1,"404":1,"421":1,"447":1,"490":1,"537":1,"582":1}}],["всю",{"2":{"96":1,"151":1,"183":1,"187":1,"202":1,"263":1,"284":1,"327":1,"348":1,"368":1,"415":1,"422":1,"445":1,"447":1}}],["всевозможных",{"2":{"491":1}}],["всей",{"2":{"145":1,"158":1,"179":1,"218":1,"284":1,"360":2,"399":1,"416":1,"422":1,"450":1,"590":1}}],["всеми",{"2":{"180":1,"183":1,"187":1,"314":1,"318":1,"402":1,"416":1,"466":1,"481":1,"492":3}}],["всемирная",{"2":{"155":1}}],["всем",{"2":{"74":1,"125":2,"145":1,"199":1,"208":1,"219":1,"299":1,"312":1,"360":1,"377":1,"474":1,"483":1}}],["всему",{"2":{"41":1,"112":1,"159":1,"180":1,"192":1,"198":1,"313":1,"314":1,"318":1,"369":1,"404":1,"436":1,"457":1,"477":1,"478":2}}],["всех",{"2":{"38":1,"51":1,"89":1,"125":1,"126":2,"129":1,"174":1,"187":2,"218":1,"231":1,"233":1,"242":1,"291":1,"299":1,"312":1,"319":1,"327":2,"341":1,"345":1,"356":1,"358":1,"377":1,"416":1,"419":1,"421":1,"428":1,"447":1,"448":2,"458":1,"460":1,"469":2,"482":2,"492":1,"533":1,"537":1}}],["все",{"2":{"36":1,"47":1,"59":1,"83":1,"95":1,"96":2,"104":1,"109":1,"111":1,"121":1,"123":1,"129":2,"132":1,"139":1,"141":1,"142":2,"143":1,"145":3,"152":2,"155":3,"156":1,"157":1,"158":1,"159":2,"160":5,"163":1,"167":1,"168":1,"169":1,"174":2,"175":1,"178":3,"183":4,"185":1,"187":6,"188":3,"196":1,"200":1,"208":1,"218":1,"220":2,"228":1,"234":1,"240":2,"242":1,"244":1,"246":1,"248":1,"257":1,"261":1,"268":1,"273":1,"275":1,"287":1,"291":3,"293":2,"294":1,"298":2,"299":1,"301":1,"306":2,"307":1,"311":1,"314":1,"318":1,"319":4,"321":1,"323":1,"327":3,"331":1,"336":1,"337":1,"339":1,"357":3,"359":1,"369":1,"370":1,"375":1,"399":2,"404":1,"410":1,"415":4,"422":4,"423":1,"436":2,"444":1,"445":1,"447":1,"448":2,"449":1,"450":1,"451":1,"453":1,"462":4,"464":1,"465":1,"466":1,"468":2,"474":1,"476":1,"478":2,"482":1,"490":1,"491":1,"492":1,"547":1,"564":1,"571":1,"591":1}}],["всего",{"2":{"29":1,"34":1,"70":1,"82":1,"96":2,"122":1,"123":1,"124":1,"128":1,"142":1,"144":1,"145":1,"162":1,"187":1,"191":1,"198":2,"199":2,"201":2,"203":1,"239":1,"249":2,"250":1,"257":1,"277":1,"291":1,"317":1,"326":1,"327":2,"334":1,"341":1,"351":1,"368":1,"369":1,"413":1,"415":1,"436":1,"446":1,"448":1,"474":2,"476":1,"478":1,"491":1,"575":2}}],["всегда",{"0":{"129":1},"2":{"25":1,"96":1,"129":1,"152":1,"156":2,"159":1,"170":1,"174":1,"183":1,"186":1,"211":1,"271":2,"291":1,"322":1,"334":1,"339":1,"341":1,"420":1,"426":1,"437":2,"478":1,"484":1,"552":1}}],["всём",{"2":{"478":1}}],["всё",{"2":{"2":1,"35":1,"40":1,"50":1,"59":1,"89":1,"104":1,"125":1,"153":1,"319":1,"430":1,"482":2,"483":2,"491":1,"492":1,"501":1,"537":1}}],["выезжает",{"2":{"580":1,"582":1}}],["выезжающий",{"2":{"33":1}}],["выучить",{"2":{"491":1}}],["выложить",{"2":{"466":1}}],["вылиться",{"2":{"44":1}}],["выявлении",{"2":{"492":1}}],["выявления",{"2":{"442":1,"444":1}}],["выявление",{"0":{"354":1}}],["выявить",{"2":{"194":1,"351":1,"353":1}}],["выясним",{"2":{"335":1}}],["выгоде",{"2":{"492":1}}],["выгодно",{"2":{"454":1}}],["выгодные",{"2":{"281":1}}],["выгоды",{"2":{"291":1}}],["выглядело",{"2":{"341":1}}],["выглядел",{"2":{"215":1,"368":1,"451":1}}],["выглядела",{"2":{"184":1,"447":1}}],["выглядеть",{"2":{"14":1,"122":1,"182":1,"185":1,"186":1,"216":1,"218":1,"219":1,"228":1,"260":2,"301":1,"309":1,"310":1,"314":1,"328":1,"337":1,"342":1,"351":2,"362":1,"402":1,"404":1,"408":1,"410":1,"415":1,"420":1,"455":1,"463":1}}],["выглядящий",{"2":{"179":1}}],["выглядят",{"2":{"21":1,"142":2,"247":1,"470":1,"478":1,"545":1}}],["выглядит",{"2":{"106":1,"114":1,"117":1,"128":1,"160":1,"165":1,"233":1,"298":1,"322":1,"368":1,"422":1,"455":1,"456":1,"465":1,"478":1,"492":2}}],["выключен",{"2":{"252":1}}],["выключено",{"2":{"252":2}}],["выключенное",{"2":{"252":1}}],["вырожденная",{"2":{"477":1}}],["выровнены",{"2":{"243":1}}],["выраженных",{"2":{"416":1}}],["выражения",{"2":{"364":2}}],["выражение",{"2":{"167":1}}],["выражением",{"2":{"164":1}}],["выражаю",{"2":{"380":1}}],["вырастает",{"2":{"319":1}}],["выравнивания",{"2":{"243":2}}],["выравниванию",{"2":{"243":1,"244":1}}],["выравнивание",{"2":{"243":2,"244":1}}],["выравниванием",{"0":{"243":1},"2":{"243":1}}],["выработаете",{"2":{"237":1}}],["выработайте",{"2":{"160":1}}],["выработки",{"2":{"156":1}}],["выигрывает",{"2":{"194":1}}],["выигрыш",{"2":{"156":1,"340":1,"346":1}}],["вычисление",{"2":{"448":1,"449":1}}],["вычислений",{"2":{"399":1}}],["вычисления",{"2":{"232":1,"233":1,"446":1,"482":1,"483":2}}],["вычислять",{"2":{"232":1}}],["вычисляем",{"2":{"227":1}}],["вычисляемыми",{"2":{"313":1,"315":1}}],["вычисляемых",{"2":{"187":2,"315":1,"369":1}}],["вычисляемые",{"2":{"160":1,"187":1,"188":1,"314":2,"316":2}}],["вычисляемое",{"2":{"187":1}}],["вычислительных",{"2":{"327":1}}],["вычислительные",{"2":{"289":1}}],["вычислительноемкие",{"2":{"331":1}}],["вычислительной",{"2":{"232":1,"325":1,"336":1,"399":1}}],["вычислительном",{"2":{"164":1}}],["вычислительная",{"2":{"145":1,"422":1}}],["выходе",{"2":{"508":1,"538":1}}],["выходов",{"2":{"444":1}}],["выходом",{"2":{"252":1,"448":1}}],["выход",{"2":{"352":1}}],["выхода",{"2":{"268":1}}],["выходных",{"2":{"444":1}}],["выходные",{"2":{"226":1,"458":1}}],["выходным",{"2":{"131":1}}],["выходят",{"2":{"198":1,"201":1}}],["выходящие",{"2":{"155":1}}],["выходить",{"2":{"196":1,"350":1,"353":1}}],["выходит",{"2":{"181":1,"196":1,"199":1,"271":1,"300":1,"350":1,"415":1,"419":1,"422":2,"466":2}}],["выходы",{"2":{"160":1,"229":1,"445":1}}],["выталкивая",{"2":{"261":1}}],["вытащить",{"2":{"59":1}}],["вытекает",{"2":{"226":1}}],["вытеснены",{"2":{"155":1}}],["выведет",{"2":{"233":1}}],["выведены",{"2":{"245":1}}],["выведена",{"2":{"233":1}}],["выведено",{"2":{"233":3,"234":1}}],["выведенных",{"2":{"125":1}}],["вывести",{"2":{"168":1,"289":1,"442":1}}],["выводе",{"2":{"364":1,"407":1,"483":1}}],["выводить",{"2":{"483":1}}],["выводит",{"2":{"233":1,"234":1,"272":1,"483":1}}],["выводится",{"2":{"227":1,"362":1}}],["выводимый",{"2":{"452":1}}],["выводим",{"2":{"227":1,"369":1}}],["вывода",{"2":{"168":1,"233":1}}],["вывод",{"0":{"36":1,"102":1},"2":{"352":1,"430":1,"445":1,"453":2,"492":1}}],["выдать",{"2":{"453":1}}],["выдан",{"2":{"455":1}}],["выдана",{"2":{"422":1}}],["выданный",{"2":{"417":1}}],["выдаст",{"2":{"338":1}}],["выдает",{"2":{"222":2,"359":1,"448":1}}],["выдавать",{"2":{"217":1,"448":1,"449":1}}],["выдачи",{"2":{"4":1}}],["выделяет",{"2":{"482":1}}],["выделять",{"2":{"337":1}}],["выделяются",{"2":{"245":1}}],["выделяют",{"2":{"228":1}}],["выделена",{"2":{"448":1}}],["выделенная",{"2":{"422":1}}],["выделенный",{"2":{"276":1,"327":1}}],["выделенные",{"2":{"187":1,"316":1}}],["выделениями",{"2":{"410":1}}],["выделение",{"2":{"254":1}}],["выделении",{"2":{"253":1,"254":1}}],["выделим",{"2":{"107":1}}],["выделить",{"2":{"88":1,"122":1,"436":1,"483":1}}],["выдвигающемся",{"2":{"108":1}}],["вышедшая",{"2":{"491":1}}],["вышеперечисленных",{"2":{"419":1}}],["вышеперечисленные",{"2":{"319":2}}],["вышеизложенными",{"2":{"187":1}}],["вышеуказанного",{"2":{"576":1}}],["вышеуказанной",{"2":{"562":1}}],["вышеуказанных",{"2":{"112":1}}],["вышеупомянутого",{"2":{"358":1}}],["вышеупомянутой",{"2":{"293":1}}],["вышеупомянутые",{"2":{"354":1}}],["вышеупомянутымипротоколами",{"2":{"151":1}}],["выше",{"2":{"70":1,"96":1,"282":1,"301":1,"318":1,"338":1,"417":1,"492":1,"531":1}}],["выйти",{"2":{"63":1}}],["выпуске",{"2":{"588":1}}],["выпуска",{"2":{"467":1}}],["выпущенного",{"2":{"467":1}}],["выписан",{"2":{"123":2}}],["выпадающих",{"2":{"269":1}}],["выпадающие",{"0":{"269":1},"2":{"269":1}}],["выпадающим",{"2":{"107":1}}],["выпадающее",{"2":{"260":1}}],["выпало",{"2":{"22":1}}],["выполнено",{"2":{"188":1}}],["выполненные",{"2":{"185":1}}],["выполненных",{"2":{"185":1,"187":3,"448":1}}],["выполнена",{"2":{"167":1,"185":1,"187":2,"232":1,"253":1}}],["выполнению",{"2":{"349":1}}],["выполнении",{"2":{"234":1,"291":1,"337":1,"422":1,"452":1,"455":1}}],["выполнение",{"2":{"224":1,"225":1,"232":1,"233":2,"234":2,"327":1,"331":1,"332":1,"339":1,"419":1,"444":1,"448":2,"449":3}}],["выполнением",{"2":{"158":1,"248":1,"258":1}}],["выполнения",{"2":{"74":1,"152":1,"157":1,"158":3,"167":1,"168":1,"178":1,"202":1,"224":2,"225":1,"228":2,"229":1,"233":1,"234":1,"248":1,"256":1,"258":6,"291":1,"298":1,"327":4,"332":1,"337":1,"343":1,"346":1,"348":1,"354":1,"357":1,"362":1,"364":1,"369":1,"396":1,"407":1,"417":1,"422":1,"442":1,"445":2,"447":2,"448":1,"452":1,"455":1,"459":1,"462":2,"466":2,"468":1,"474":1}}],["выполним",{"2":{"182":1,"233":1}}],["выполниться",{"2":{"483":1}}],["выполнить",{"2":{"218":1,"227":1,"232":1,"234":1,"292":1,"305":1,"318":1,"336":1,"340":1,"357":1,"368":1,"401":1,"416":1,"446":2,"455":1,"483":1}}],["выполните",{"2":{"179":1,"301":1,"344":1,"401":1,"451":1,"460":1,"461":2,"462":3,"465":3}}],["выполнит",{"2":{"158":2}}],["выполнив",{"2":{"144":1,"187":1,"230":1,"455":1}}],["выполняют",{"2":{"422":1,"445":1,"478":1,"482":1,"491":1}}],["выполняются",{"2":{"157":1,"232":2,"319":1,"444":1,"450":1,"452":1,"483":1}}],["выполняющих",{"2":{"445":1}}],["выполняющиеся",{"2":{"327":1}}],["выполняющимся",{"2":{"319":1}}],["выполняющий",{"2":{"196":2,"199":1}}],["выполняемых",{"2":{"444":1}}],["выполняемой",{"2":{"327":1}}],["выполняемая",{"2":{"242":1}}],["выполняем",{"2":{"145":1,"223":1,"227":1,"318":1,"335":1,"448":1}}],["выполняется",{"2":{"124":1,"129":1,"160":2,"165":1,"184":1,"234":1,"258":1,"299":1,"357":1,"407":1,"415":1}}],["выполняет",{"2":{"74":1,"222":1,"225":1,"228":2,"306":1,"327":1,"335":1,"340":1,"363":1,"415":1,"448":1,"492":1}}],["выполняться",{"2":{"327":2,"337":1,"340":1,"438":1,"450":1,"454":1,"483":1}}],["выполнять",{"2":{"59":1,"73":1,"148":1,"164":1,"178":1,"196":1,"224":2,"233":2,"248":1,"306":1,"327":2,"331":1,"340":2,"365":1,"368":2,"464":1,"483":1,"542":1}}],["вынужден",{"2":{"280":1}}],["выносить",{"2":{"222":1}}],["вынос",{"2":{"83":1}}],["выносятся",{"2":{"41":1}}],["вынести",{"2":{"3":1,"114":1,"196":1}}],["высмеять",{"2":{"284":1}}],["высоту",{"2":{"263":1}}],["высоким",{"2":{"538":1}}],["высокий",{"2":{"68":1,"241":2}}],["высокая",{"2":{"399":1,"436":2,"476":2,"538":1}}],["высокой",{"2":{"155":1,"325":1}}],["высокого",{"2":{"65":1,"192":1,"445":1}}],["высокоуровневыми",{"2":{"39":1}}],["выступает",{"2":{"331":1,"362":1}}],["выступать",{"2":{"208":1,"321":1}}],["выстроив",{"2":{"249":1}}],["выстроить",{"2":{"219":1,"234":1}}],["выстраивания",{"2":{"241":1}}],["выстраиваем",{"2":{"234":1}}],["выстраиваемой",{"2":{"40":1}}],["выстраивать",{"2":{"233":1}}],["выставочную",{"2":{"62":1}}],["вызван",{"2":{"228":1}}],["вызвало",{"2":{"160":1}}],["вызвать",{"2":{"34":1,"124":1,"227":1,"257":1,"285":2,"298":1}}],["вызывая",{"2":{"369":1}}],["вызывающих",{"2":{"369":1}}],["вызывающим",{"2":{"263":1}}],["вызывающего",{"2":{"260":1}}],["вызывают",{"2":{"237":1,"463":1}}],["вызываются",{"2":{"198":1}}],["вызывать",{"2":{"184":1,"212":1,"242":1,"258":1,"333":1,"350":1,"352":1,"353":1,"404":1,"466":1}}],["вызываться",{"2":{"124":1}}],["вызываем",{"2":{"157":1,"225":3,"407":1,"453":1}}],["вызывается",{"2":{"311":1}}],["вызывает",{"2":{"3":1,"167":1,"248":1,"283":1,"353":1}}],["вызову",{"2":{"234":2}}],["вызове",{"2":{"233":1,"341":1}}],["вызовет",{"2":{"138":1,"187":2,"261":1,"410":1,"418":1}}],["вызовами",{"2":{"234":1,"340":1}}],["вызова",{"2":{"228":2,"232":5,"233":2,"234":4,"329":1,"345":1,"358":1}}],["вызовах",{"2":{"212":1}}],["вызовом",{"2":{"216":1,"234":1}}],["вызовов",{"2":{"122":1,"219":1,"233":1,"234":1,"299":1,"340":1,"341":1,"445":1}}],["вызов",{"0":{"232":1},"1":{"233":1},"2":{"41":1,"96":1,"157":1,"226":1,"228":1,"232":3,"234":3,"321":1,"340":2,"415":1,"545":1}}],["вызовы",{"2":{"41":1,"191":1,"208":1,"228":1,"229":1,"234":1,"299":1,"331":1,"340":1,"345":2,"399":1,"450":1,"545":1,"546":1}}],["вы",{"2":{"26":2,"73":1,"96":1,"130":2,"132":2,"142":2,"151":2,"155":1,"156":7,"157":1,"158":2,"159":4,"160":3,"169":1,"174":3,"176":3,"178":1,"179":9,"180":5,"181":2,"183":1,"187":1,"190":1,"191":1,"194":1,"196":2,"197":1,"198":5,"199":2,"201":5,"202":1,"211":1,"217":1,"218":3,"226":3,"228":1,"231":3,"233":1,"236":2,"237":2,"242":3,"244":3,"248":2,"252":1,"265":1,"271":4,"274":1,"276":1,"288":2,"289":1,"291":3,"297":2,"304":2,"305":2,"319":1,"322":1,"324":1,"325":1,"327":7,"330":1,"336":1,"338":1,"360":1,"372":1,"375":1,"376":1,"377":1,"384":1,"397":1,"401":2,"402":1,"407":1,"408":1,"410":2,"414":1,"421":1,"425":2,"426":1,"428":1,"429":1,"432":1,"437":3,"438":1,"448":5,"458":1,"459":1,"461":1,"462":4,"463":2,"464":1,"465":2,"466":2,"467":1,"469":1,"476":1,"478":4,"485":1,"487":1,"491":1,"500":1,"506":1}}],["выброшенной",{"2":{"449":1}}],["выбрасывать",{"2":{"448":1}}],["выбрасывает",{"2":{"234":1}}],["выбрасываем",{"2":{"218":1}}],["выбрав",{"2":{"447":1}}],["выбрано",{"2":{"291":1}}],["выбранная",{"2":{"591":1}}],["выбранными",{"2":{"535":1}}],["выбранные",{"2":{"281":1}}],["выбранных",{"2":{"179":1}}],["выбранного",{"2":{"151":1,"343":1,"404":1,"422":1}}],["выбранному",{"2":{"142":1}}],["выбранной",{"2":{"11":1,"31":1}}],["выбрали",{"2":{"401":1}}],["выбрал",{"2":{"277":1}}],["выбрать",{"2":{"142":1,"179":1,"252":2,"280":1,"281":1,"318":1,"342":1,"343":1,"408":1,"430":1,"447":1,"535":1,"551":1,"583":1}}],["выбирать",{"2":{"280":1}}],["выбирает",{"2":{"157":1}}],["выбираешь",{"2":{"98":1}}],["выбирая",{"2":{"156":2}}],["выберите",{"2":{"152":2,"179":3,"301":2,"459":1,"561":2}}],["выбором",{"2":{"299":1}}],["выбору",{"2":{"130":1,"179":1,"396":1}}],["выбор",{"0":{"37":1,"39":1},"1":{"38":1,"39":1,"40":1,"41":1},"2":{"39":1,"74":1,"145":1,"220":1,"247":1,"251":1,"343":1,"517":1,"545":1}}],["выборе",{"2":{"22":1,"39":1,"178":1,"254":2,"267":1,"282":1,"402":1,"408":3,"491":1}}],["выборка",{"2":{"13":1,"408":1}}],["выбора",{"2":{"4":1,"253":1,"266":1,"268":1,"269":2,"540":1,"542":1}}],["визитку",{"2":{"541":1}}],["визитной",{"2":{"383":1}}],["визуализацию",{"2":{"478":1,"482":1}}],["визуализация",{"0":{"515":1},"2":{"421":1,"515":1}}],["визуализации",{"2":{"253":1,"490":1}}],["визуальные",{"2":{"466":1}}],["визуальным",{"2":{"239":1}}],["визуальных",{"2":{"239":1,"240":1,"241":1,"242":2,"482":1}}],["визуальный",{"2":{"229":1,"239":1}}],["визуальной",{"2":{"501":1}}],["визуальное",{"2":{"229":1,"420":1}}],["визуально",{"2":{"11":1,"268":1,"309":1,"360":1}}],["визуального",{"2":{"3":1,"25":1,"239":1,"242":1,"372":1,"385":1}}],["википедии",{"2":{"200":1,"246":1,"247":1,"248":1}}],["виртуальных",{"2":{"146":1}}],["виртуальный",{"2":{"124":1,"425":1,"491":1}}],["виртуального",{"2":{"148":1}}],["виртуальном",{"2":{"145":1,"154":1}}],["виртуальное",{"2":{"48":1}}],["виртуальная",{"2":{"145":1}}],["витрины",{"2":{"39":1,"67":1,"542":1}}],["витрину",{"2":{"22":1,"62":1,"63":1}}],["витрина",{"0":{"11":1},"2":{"9":1,"12":1,"59":1,"61":1,"70":1,"573":1}}],["видов",{"2":{"551":1,"583":1}}],["виды",{"2":{"444":1,"445":1}}],["видны",{"2":{"421":1}}],["видно",{"2":{"83":1,"123":1,"220":1,"222":1,"230":1,"233":1,"258":1,"271":1,"276":1,"309":1,"312":1,"327":1,"402":1,"408":1,"421":1}}],["виджеты",{"2":{"251":1}}],["виджетов",{"2":{"26":1,"435":1,"476":1,"478":1}}],["видимые",{"2":{"327":1}}],["видимостью",{"2":{"368":1}}],["видимость",{"2":{"352":1}}],["видимости",{"2":{"299":2,"406":1,"422":1}}],["видимое",{"2":{"327":1}}],["видимой",{"2":{"273":1,"428":1}}],["видим",{"2":{"184":1,"202":1,"227":1,"273":1,"297":1,"299":1,"340":1,"359":1,"409":1,"457":1}}],["видит",{"2":{"123":1}}],["видите",{"2":{"26":1,"199":1,"215":1,"220":1,"226":1,"231":1,"233":1,"234":1,"268":1,"296":1,"298":1,"357":1,"358":1,"360":1,"362":1,"368":1,"399":1,"407":1,"415":1,"416":1,"419":1}}],["виду",{"2":{"163":1,"202":1,"241":1,"244":1,"268":1,"271":1,"414":1,"415":1}}],["видеть",{"2":{"217":1,"240":1,"271":1}}],["виден",{"2":{"187":1,"243":1,"580":1}}],["видение",{"2":{"73":1}}],["видели",{"2":{"167":1,"231":2,"244":1,"306":1,"308":1,"332":1,"361":1}}],["видеоролики",{"2":{"380":1}}],["видеоигры",{"2":{"263":1}}],["видео",{"2":{"86":1,"178":1,"238":1,"268":1,"290":1,"305":1,"326":1,"349":1,"398":1,"426":1,"443":1,"491":4,"492":1}}],["виде",{"2":{"17":1,"61":1,"88":1,"111":1,"124":2,"155":1,"156":2,"159":1,"179":1,"197":1,"202":1,"213":1,"227":1,"254":1,"267":1,"272":1,"273":1,"306":1,"315":1,"331":1,"338":1,"339":2,"343":1,"345":2,"354":1,"358":2,"360":1,"365":1,"369":1,"399":1,"402":1,"414":1,"415":1,"451":1,"455":2,"474":1,"515":1,"531":1}}],["вид",{"2":{"5":1,"18":1,"155":1,"182":1,"194":1,"229":1,"291":1,"309":1,"327":1,"406":1,"421":1}}],["вида",{"2":{"3":1,"4":1,"155":1,"181":1,"228":1,"445":1,"446":1,"450":1}}],["воды",{"2":{"491":1}}],["водителем",{"2":{"491":2}}],["вождению",{"2":{"491":1}}],["вождения",{"2":{"491":3}}],["вовлеченности",{"2":{"457":1}}],["вовсе",{"2":{"194":1}}],["воплотить",{"2":{"350":1}}],["вопросом",{"2":{"479":1}}],["вопросов",{"2":{"180":1,"288":1,"344":1,"416":1,"491":1,"502":1}}],["вопросительный",{"2":{"463":1}}],["вопросе",{"2":{"264":1,"491":1}}],["вопроса",{"2":{"354":1,"445":1}}],["вопросах",{"2":{"181":1,"397":1,"502":1}}],["вопросами",{"2":{"176":1}}],["вопросу",{"2":{"142":1,"207":1}}],["вопрос",{"2":{"4":2,"156":2,"276":1,"284":1,"351":1,"352":1,"353":1,"354":1,"364":1,"444":1,"455":2,"491":1,"500":1}}],["вопросы",{"0":{"154":1,"176":1,"190":1,"236":1,"276":1,"288":1,"303":1,"324":1,"347":1,"372":1,"424":1,"469":1},"2":{"4":1,"64":1,"139":1,"176":1,"240":1,"267":1,"303":1,"324":1,"350":2,"372":1,"424":1,"502":1}}],["воркер",{"2":{"501":1}}],["воркером",{"2":{"336":1}}],["воркеры",{"2":{"299":1}}],["воровство",{"2":{"26":1}}],["воровством",{"2":{"26":1}}],["военно",{"2":{"200":1}}],["военного",{"2":{"142":1}}],["войдите",{"2":{"179":1}}],["волшебство",{"2":{"261":1,"368":1}}],["волшебству",{"2":{"231":1}}],["волшебства",{"2":{"156":1}}],["волнуйтесь",{"2":{"158":1}}],["восстановления",{"2":{"421":1,"422":1}}],["восстановлено",{"2":{"168":1}}],["воссоздающих",{"2":{"337":1}}],["восемь",{"0":{"248":1},"2":{"248":1}}],["восклицательных",{"2":{"230":1}}],["восьми",{"2":{"142":1}}],["воспользуйтесь",{"2":{"561":1}}],["воспользуемся",{"2":{"332":1}}],["воспользоваться",{"2":{"16":1,"176":1,"195":1,"416":1,"430":1,"456":1,"492":1}}],["воспроизведенные",{"2":{"275":1}}],["воспринимается",{"2":{"309":1}}],["воспринимаются",{"2":{"291":1}}],["воспринимайте",{"2":{"156":1}}],["восприятие",{"2":{"239":1,"249":1,"590":1}}],["восприятия",{"2":{"234":1,"235":1,"327":1}}],["восприятии",{"2":{"73":1}}],["вокруг",{"2":{"122":1,"453":1,"478":1}}],["вот",{"2":{"14":1,"16":1,"62":1,"125":1,"127":1,"128":2,"130":2,"138":1,"148":1,"159":1,"160":2,"165":1,"166":1,"178":1,"183":1,"187":1,"188":1,"203":1,"209":1,"212":1,"216":1,"219":1,"222":1,"224":1,"227":1,"228":1,"231":1,"234":2,"244":1,"248":1,"252":1,"254":1,"256":1,"257":1,"258":2,"260":2,"264":1,"265":1,"266":2,"267":1,"271":1,"276":1,"277":1,"278":1,"284":1,"285":1,"293":1,"318":1,"322":1,"327":1,"333":1,"335":1,"357":1,"358":2,"362":1,"364":1,"368":1,"407":1,"408":1,"413":1,"421":1,"422":1,"430":1,"436":1,"448":1,"470":1,"476":1,"478":2,"483":1,"491":1,"525":1,"576":1,"578":1}}],["возлагает",{"2":{"444":1}}],["вознаграждения",{"2":{"422":1}}],["возникшая",{"2":{"453":1}}],["возникла",{"2":{"448":1}}],["возникли",{"2":{"62":1}}],["возникновения",{"2":{"448":1}}],["возникновении",{"2":{"248":1,"328":1,"449":1}}],["возникнет",{"2":{"448":1}}],["возникнуть",{"2":{"125":1,"254":1,"276":1,"327":1,"364":1,"541":1}}],["возникающими",{"2":{"413":1}}],["возникают",{"2":{"73":1}}],["возникает",{"2":{"156":1,"242":1,"359":1,"414":1,"444":1,"457":1}}],["возрастающей",{"2":{"271":1}}],["возрасти",{"2":{"156":1}}],["воздействия",{"2":{"231":1}}],["возврат",{"2":{"299":1}}],["возврата",{"2":{"224":1,"232":1,"234":2}}],["возвращайтесь",{"2":{"491":1}}],["возвращают",{"2":{"445":1}}],["возвращающая",{"2":{"315":1,"474":1}}],["возвращающие",{"2":{"234":1}}],["возвращающей",{"2":{"129":1,"160":1,"358":1}}],["возвращающую",{"2":{"129":1,"357":2,"545":1}}],["возвращать",{"2":{"272":1,"335":1,"367":1,"399":1,"449":1}}],["возвращаться",{"2":{"235":1,"260":1}}],["возвращаемый",{"2":{"453":1}}],["возвращаемся",{"2":{"299":1}}],["возвращаем",{"2":{"212":1,"219":2,"227":1,"234":1,"313":1,"321":2,"363":1}}],["возвращаемое",{"2":{"166":1,"227":1}}],["возвращается",{"2":{"272":1,"413":1,"415":1,"426":1}}],["возвращает",{"2":{"96":1,"123":2,"124":1,"130":2,"157":2,"160":1,"221":1,"224":1,"234":2,"321":1,"334":1,"336":1,"339":1,"357":1,"358":1,"363":1,"368":1,"407":1,"413":4,"414":1,"449":1}}],["возвращения",{"2":{"41":1}}],["возьмет",{"2":{"151":1,"157":1}}],["возьмем",{"2":{"12":1,"156":1,"185":1,"198":1,"213":1,"351":1,"400":1,"446":1}}],["возможную",{"2":{"421":1}}],["возможна",{"2":{"356":1,"591":1}}],["возможны",{"2":{"358":1}}],["возможными",{"2":{"320":1}}],["возможным",{"2":{"271":1,"399":2,"478":1}}],["возможные",{"2":{"152":1}}],["возможных",{"2":{"56":1,"150":1,"327":1,"354":1,"360":1,"369":1,"404":1,"444":1,"448":1}}],["возможное",{"2":{"420":1,"436":1,"476":1}}],["возможной",{"2":{"236":1}}],["возможного",{"2":{"152":1}}],["возможностях",{"2":{"445":1,"492":1}}],["возможностям",{"2":{"251":1,"319":1}}],["возможностями",{"2":{"139":2,"318":1,"466":1}}],["возможности",{"0":{"488":1},"2":{"155":3,"180":1,"188":2,"196":1,"252":1,"277":1,"298":1,"319":1,"327":1,"337":1,"355":1,"358":1,"361":1,"362":1,"365":1,"370":1,"371":1,"396":1,"414":1,"422":1,"429":1,"445":1,"456":2,"458":1,"474":1,"482":1,"542":2}}],["возможностей",{"0":{"130":1},"2":{"155":1,"181":1,"213":1,"234":1,"244":1,"410":1,"414":1,"430":1,"445":1,"470":1,"474":2,"492":1,"575":1}}],["возможностью",{"2":{"12":1,"88":1,"124":1,"425":1,"428":1,"456":1,"540":1,"542":3,"571":1}}],["возможность",{"2":{"2":1,"11":2,"12":1,"17":1,"39":1,"65":1,"112":1,"114":1,"123":2,"124":3,"131":1,"142":2,"156":1,"160":1,"181":2,"184":1,"192":1,"199":1,"249":1,"257":1,"263":1,"266":1,"277":1,"291":1,"298":1,"299":1,"309":1,"320":1,"345":1,"354":1,"399":1,"401":1,"402":1,"416":1,"421":1,"434":1,"438":1,"479":1,"482":1,"484":1,"508":1,"542":2,"573":1}}],["возможно",{"2":{"40":1,"48":1,"59":1,"113":1,"117":1,"124":1,"160":1,"176":1,"190":1,"208":1,"231":1,"271":1,"311":1,"360":1,"396":1,"408":1,"436":1,"448":1,"455":1,"465":1,"477":1,"478":1,"482":3,"535":1}}],["возможен",{"2":{"16":1}}],["во",{"0":{"478":1,"528":1},"2":{"3":1,"17":1,"96":1,"121":1,"123":2,"129":1,"157":3,"158":1,"160":1,"168":1,"174":1,"180":1,"182":1,"183":1,"186":1,"191":1,"196":1,"199":1,"208":1,"218":1,"219":1,"226":1,"228":1,"229":1,"233":1,"234":1,"237":1,"247":2,"256":1,"266":1,"269":1,"275":1,"277":1,"283":1,"325":1,"327":1,"331":1,"352":1,"357":2,"360":1,"362":2,"363":1,"404":2,"407":1,"410":1,"416":1,"420":1,"430":2,"441":1,"442":1,"444":2,"448":2,"462":1,"466":1,"469":1,"474":5,"478":7,"479":1,"481":1,"482":3,"490":1,"491":2,"492":1,"508":2,"511":1,"570":1}}],["вообще",{"2":{"3":1,"35":1,"114":1,"279":1,"299":1,"426":1,"428":1,"430":2,"492":1}}],["в",{"0":{"42":1,"131":1,"133":1,"134":1,"141":1,"157":1,"161":1,"169":1,"277":1,"327":1,"337":1,"355":1,"380":1,"381":1,"459":1,"460":1,"461":1,"500":1,"511":1,"512":1,"533":1,"549":1,"562":1,"572":1,"573":1,"579":1},"1":{"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"142":1,"158":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"170":1,"171":1,"172":1,"173":1,"174":1,"328":1,"329":1,"330":1,"338":1,"339":1,"340":1,"341":1,"342":1,"343":1,"356":1,"357":1,"358":1,"359":1,"360":1,"382":1,"383":1,"384":1,"385":1,"386":1,"387":1,"388":1,"389":1,"390":1,"391":1,"392":1,"393":1},"2":{"2":1,"3":4,"4":1,"5":1,"6":1,"7":1,"9":2,"10":1,"11":3,"12":4,"13":2,"14":1,"16":6,"17":9,"18":1,"22":7,"23":7,"25":4,"26":1,"27":1,"29":6,"30":1,"31":1,"32":1,"33":2,"34":3,"39":2,"40":1,"41":7,"43":2,"44":3,"47":7,"48":4,"50":1,"51":2,"58":1,"59":5,"61":1,"62":1,"64":3,"65":1,"67":2,"73":4,"74":5,"75":2,"79":1,"82":2,"83":6,"88":5,"89":9,"90":1,"92":1,"93":2,"95":9,"96":19,"98":1,"99":1,"100":1,"101":1,"104":11,"105":1,"106":3,"107":2,"108":2,"109":2,"111":6,"112":3,"113":5,"114":6,"115":1,"117":2,"118":2,"121":7,"122":16,"123":20,"124":9,"125":8,"126":8,"127":5,"128":5,"129":7,"130":5,"131":7,"132":4,"133":5,"134":9,"135":3,"136":1,"138":1,"139":4,"140":3,"141":2,"142":20,"143":11,"144":8,"145":9,"146":3,"147":2,"148":6,"149":8,"150":1,"151":5,"152":8,"153":5,"154":4,"155":13,"156":34,"157":13,"158":12,"159":13,"160":37,"161":4,"162":1,"163":1,"164":6,"165":4,"166":5,"167":6,"168":12,"169":3,"170":1,"171":1,"172":1,"173":1,"174":5,"175":2,"176":3,"177":8,"178":13,"179":27,"180":32,"181":26,"182":7,"183":17,"184":10,"185":13,"186":10,"187":40,"188":12,"189":3,"190":1,"191":4,"192":2,"193":4,"194":8,"195":3,"196":9,"197":6,"198":13,"199":17,"200":5,"201":6,"202":12,"203":4,"207":5,"208":2,"209":1,"210":4,"211":3,"212":6,"213":3,"214":2,"215":3,"216":1,"217":4,"218":10,"219":5,"220":9,"221":2,"222":4,"223":13,"224":5,"225":14,"226":6,"227":14,"228":21,"229":5,"230":5,"231":13,"232":7,"233":7,"234":20,"235":5,"236":1,"237":5,"238":6,"239":7,"240":7,"241":5,"242":3,"243":1,"244":7,"245":3,"246":9,"247":5,"248":7,"249":3,"250":2,"251":4,"252":7,"253":8,"254":8,"255":6,"256":6,"257":4,"258":10,"259":1,"260":6,"261":14,"263":8,"264":7,"265":2,"266":5,"267":4,"268":6,"271":9,"272":5,"273":9,"275":2,"276":1,"277":7,"278":3,"279":5,"280":2,"281":2,"282":2,"283":1,"284":2,"285":1,"286":2,"287":3,"288":2,"289":5,"290":3,"291":15,"292":1,"293":8,"294":5,"295":3,"296":2,"297":4,"298":20,"299":18,"300":11,"301":8,"302":6,"303":3,"304":5,"305":6,"306":4,"307":4,"308":7,"309":5,"310":1,"311":11,"312":6,"313":4,"314":7,"315":8,"316":7,"317":3,"318":12,"319":24,"320":8,"321":10,"322":6,"323":2,"324":3,"325":7,"326":2,"327":24,"328":5,"329":6,"330":4,"331":13,"332":2,"333":6,"334":14,"335":8,"336":4,"337":7,"338":11,"339":14,"340":17,"341":7,"342":1,"343":10,"344":1,"345":12,"346":3,"347":2,"348":9,"349":2,"350":1,"351":5,"352":5,"353":6,"354":6,"355":2,"356":7,"357":13,"358":14,"359":9,"360":16,"362":16,"363":14,"364":6,"365":4,"366":3,"367":1,"368":31,"369":23,"371":4,"372":2,"375":1,"377":4,"378":1,"380":2,"382":1,"383":1,"384":3,"386":1,"387":1,"388":2,"389":3,"390":2,"391":1,"392":1,"393":1,"394":2,"396":15,"397":4,"398":1,"399":19,"400":2,"401":13,"402":5,"403":2,"404":22,"406":5,"407":28,"408":6,"409":7,"410":17,"411":1,"413":16,"414":11,"415":16,"416":22,"417":1,"418":6,"419":11,"420":18,"421":13,"422":19,"423":5,"424":4,"425":3,"426":15,"428":2,"429":14,"430":13,"433":1,"434":1,"435":2,"436":11,"437":3,"438":4,"442":10,"443":2,"444":13,"445":6,"446":10,"447":15,"448":18,"449":5,"450":5,"451":5,"452":13,"453":28,"454":13,"455":13,"456":4,"457":9,"458":8,"459":1,"460":6,"461":5,"462":11,"463":9,"464":2,"465":12,"466":9,"467":6,"468":5,"469":3,"470":2,"474":17,"476":6,"477":6,"478":39,"479":5,"481":2,"482":16,"483":18,"484":2,"490":11,"491":11,"492":22,"502":3,"503":1,"508":3,"511":1,"515":6,"517":1,"520":1,"524":1,"525":1,"528":1,"530":1,"531":3,"535":1,"536":1,"537":1,"538":7,"541":5,"542":1,"543":4,"545":4,"546":1,"547":1,"549":2,"550":1,"561":6,"562":2,"566":1,"567":1,"570":2,"573":1,"575":4,"576":1,"577":3,"578":3,"580":4,"582":4,"586":1,"587":2,"588":2,"590":2,"591":4}}],["риквестах",{"2":{"515":1}}],["риквестов",{"0":{"507":1},"1":{"508":1},"2":{"508":1}}],["рисованиями",{"2":{"327":1}}],["рисуйте",{"2":{"489":1}}],["рисует",{"2":{"221":1,"327":1}}],["рисунки",{"2":{"272":1}}],["рисунка",{"2":{"222":1,"243":1,"271":2}}],["рисунке",{"2":{"142":1,"246":1,"260":1,"261":1,"272":1,"306":1,"369":1,"402":1,"415":1}}],["рисунок",{"2":{"142":1,"152":1,"158":1,"179":2,"180":1,"182":1,"183":1,"185":1,"194":1,"196":1,"222":2,"224":1,"226":1,"228":1,"231":1,"241":1,"242":1,"243":1,"244":1,"252":2,"253":1,"254":2,"256":1,"257":2,"258":2,"260":3,"265":1,"266":1,"267":1,"268":2,"271":1,"272":2,"273":1,"276":1,"277":1,"284":1,"285":1,"297":1,"298":4,"299":1,"301":2,"306":1,"309":1,"312":1,"314":1,"322":2,"327":3,"331":1,"333":1,"336":1,"337":1,"342":1,"351":2,"352":1,"353":1,"360":1,"362":1,"367":1,"369":2,"402":2,"408":1,"410":1,"415":1,"416":1,"420":1,"421":1,"446":2,"455":3,"456":1,"459":1,"462":1,"463":2,"465":1}}],["риски",{"2":{"198":1}}],["рынке",{"2":{"237":1}}],["рынка",{"0":{"20":1},"1":{"21":1,"22":1},"2":{"39":1,"132":1}}],["рывка",{"2":{"156":1}}],["ряду",{"2":{"444":1,"448":1}}],["ряде",{"2":{"245":1}}],["ряда",{"2":{"158":1,"228":1,"232":1}}],["рядами",{"2":{"117":1}}],["ряд",{"2":{"152":1,"160":2,"260":1,"266":1,"291":1,"301":1,"318":1,"357":1,"363":1,"415":1,"449":1}}],["рядом",{"2":{"147":1,"187":1,"198":1,"234":1,"244":1,"246":1,"266":1,"291":2,"298":1,"304":1,"447":2,"454":1}}],["рядового",{"2":{"111":1}}],["родился",{"2":{"492":1}}],["родителей",{"2":{"409":2,"506":1}}],["родителем",{"2":{"368":1}}],["родитель",{"2":{"308":1,"333":2,"352":1,"353":1,"359":2}}],["родительские",{"2":{"360":1}}],["родительскими",{"2":{"359":1}}],["родительским",{"2":{"306":1,"327":1,"362":1,"367":1}}],["родительский",{"2":{"196":1,"219":1,"306":5,"322":1,"327":2,"331":1,"332":1,"339":1,"353":2,"360":1,"362":5,"369":1}}],["родительском",{"2":{"331":1,"340":1,"358":2,"360":3,"362":3,"409":1}}],["родительскому",{"2":{"160":1,"329":1,"335":1,"358":1,"362":1}}],["родительской",{"2":{"307":1,"359":1}}],["родительского",{"2":{"159":1,"160":1,"327":1,"328":2,"359":5,"368":1,"410":2}}],["родителю",{"2":{"308":1,"358":1,"362":1,"410":1}}],["родителя",{"2":{"306":3,"308":1,"352":1,"407":1}}],["родителями",{"2":{"304":1}}],["родители",{"2":{"306":1}}],["родственными",{"2":{"324":1}}],["родного",{"2":{"330":1}}],["родное",{"2":{"256":1,"291":1}}],["родными",{"2":{"291":1,"302":1}}],["рода",{"2":{"227":1,"266":1,"276":1,"306":1}}],["робот",{"2":{"152":1}}],["ростом",{"2":{"458":1}}],["роста",{"2":{"160":1,"436":1,"442":1,"476":1,"486":1}}],["рост",{"2":{"137":1}}],["росте",{"2":{"106":1}}],["роли",{"2":{"321":1,"482":1}}],["ролям",{"2":{"123":1}}],["ролью",{"2":{"123":1}}],["роль",{"2":{"74":1,"239":1,"335":1,"435":1,"476":1,"478":1,"482":1,"491":1,"542":1}}],["роутами",{"2":{"438":1}}],["роутера",{"2":{"143":1,"400":1,"406":1}}],["роутере",{"0":{"134":1},"2":{"144":1}}],["роутер",{"0":{"400":1},"1":{"401":1,"402":1,"403":1,"404":1,"405":1,"406":1,"407":1,"408":1,"409":1,"410":1,"411":1,"412":1,"413":1},"2":{"126":1,"143":1,"401":1,"406":1}}],["роуты",{"2":{"106":1}}],["роутинг",{"2":{"7":1}}],["русском",{"2":{"491":2}}],["русский",{"0":{"374":1},"2":{"491":1}}],["рутинного",{"2":{"482":1}}],["рутовский",{"2":{"58":1}}],["рука",{"2":{"430":1}}],["руководящие",{"2":{"191":1}}],["руководствами",{"2":{"237":1}}],["руководствуясь",{"2":{"178":1}}],["руководству",{"2":{"156":1}}],["руководство",{"2":{"74":1,"78":1,"130":1,"237":1,"318":1,"393":1}}],["рублей",{"2":{"425":1}}],["ручная",{"2":{"299":1}}],["ручную",{"2":{"291":1}}],["ручном",{"2":{"396":1,"430":1}}],["ручной",{"2":{"299":1}}],["ручного",{"2":{"152":1,"469":1,"535":1}}],["ручное",{"2":{"77":1,"444":1}}],["рефы",{"2":{"478":2}}],["рефакторите",{"2":{"201":1}}],["рефакторить",{"2":{"22":1}}],["рефакторинга",{"2":{"444":1,"448":1,"457":1}}],["рефакторингуйте",{"2":{"444":1}}],["рефакторинг",{"0":{"109":1,"486":1},"2":{"371":1,"486":1}}],["рендер",{"2":{"362":1}}],["рендерится",{"2":{"361":1}}],["рендеринг",{"2":{"327":3,"362":1,"413":1,"483":1}}],["рендеринга",{"2":{"232":1,"319":1,"327":4,"404":1,"406":1}}],["рендерингу",{"2":{"168":1}}],["рендеринге",{"2":{"162":1,"327":1}}],["репликацию",{"2":{"337":1}}],["репозиторием",{"2":{"458":1,"466":6}}],["репозиториев",{"2":{"442":1,"458":1,"515":1}}],["репозиториями",{"0":{"466":1},"2":{"468":1}}],["репозиториях",{"2":{"181":1}}],["репозитория",{"0":{"537":1},"2":{"151":1,"290":1,"333":1,"369":1,"396":4,"407":1,"458":1,"462":1,"466":1,"515":2,"561":2,"562":1}}],["репозитории",{"2":{"64":1,"151":1,"187":1,"238":1,"252":1,"290":1,"298":1,"305":1,"322":1,"326":1,"348":1,"368":1,"394":1,"407":1,"413":1,"443":1,"446":1,"466":2,"467":1,"515":1,"561":1}}],["репозиторий",{"0":{"80":1,"120":1,"516":1},"2":{"61":1,"80":1,"90":1,"109":1,"115":1,"120":1,"140":1,"317":1,"430":1,"436":1,"458":1,"460":1,"462":2,"465":1,"466":5,"467":1,"517":1,"561":1}}],["ребенка",{"2":{"421":1}}],["ребенку",{"2":{"306":1}}],["ребенок",{"2":{"306":1,"307":1}}],["речевого",{"2":{"254":1}}],["речь",{"2":{"10":1,"96":1,"248":1,"291":1,"445":1,"457":1}}],["реорганизация",{"2":{"184":1}}],["редакция",{"2":{"465":1}}],["редактировать",{"2":{"464":1,"465":1}}],["редактирование",{"2":{"352":2,"353":1}}],["редактирования",{"2":{"188":1,"369":1}}],["редактируемых",{"2":{"369":1}}],["редактируем",{"2":{"183":1}}],["редакторы",{"2":{"399":1}}],["редакторе",{"2":{"254":1,"430":1}}],["редактор",{"2":{"178":2,"430":1,"459":1}}],["редкая",{"2":{"364":1}}],["редких",{"2":{"197":1}}],["редко",{"2":{"123":1,"196":1,"212":1,"319":1,"357":2}}],["резюме",{"2":{"491":1}}],["резервируем",{"2":{"368":1}}],["резервировать",{"2":{"198":1}}],["резервировании",{"2":{"153":1}}],["результирующее",{"2":{"156":1}}],["результатом",{"2":{"369":1,"422":1,"448":1}}],["результатов",{"2":{"187":1,"370":1}}],["результаты",{"2":{"137":1,"179":1,"272":1,"275":1,"314":1,"327":1,"354":1,"463":2}}],["результат",{"2":{"124":1,"160":1,"179":1,"185":1,"234":1,"246":1,"249":1,"272":1,"335":1,"336":1,"338":1,"339":1,"414":1,"415":2,"453":1,"536":1}}],["результате",{"2":{"123":1,"152":1,"228":1,"246":1,"256":1,"261":1,"280":1,"291":1,"345":1,"351":1,"402":1,"416":2,"453":1,"454":1,"455":1,"541":1}}],["результата",{"2":{"73":1,"233":2,"334":1,"339":1,"364":1,"402":1,"418":1}}],["рейтинг",{"2":{"118":1,"301":2}}],["рейтинги",{"2":{"70":1}}],["релевантные",{"2":{"124":1}}],["релизам",{"2":{"515":1}}],["релиза",{"2":{"508":1}}],["релизов",{"0":{"507":1,"515":1},"1":{"508":1},"2":{"508":1,"515":1}}],["релиз",{"2":{"104":1,"460":1}}],["реляционных",{"2":{"43":1,"44":1,"47":1,"48":2}}],["реляционные",{"2":{"17":2}}],["реляционную",{"2":{"39":1}}],["ресурсе",{"2":{"503":1}}],["ресурсоемкие",{"2":{"483":1}}],["ресурсом",{"2":{"226":1,"327":1}}],["ресурсов",{"2":{"125":2,"183":1,"287":1,"330":1,"365":1,"426":1,"436":1,"492":1,"588":1,"590":1}}],["ресурсу",{"2":{"123":1,"125":2,"209":1}}],["ресурса",{"0":{"500":1},"2":{"426":1}}],["ресурсами",{"2":{"124":1,"327":1,"416":1,"426":1,"492":2}}],["ресурсам",{"2":{"123":1,"145":2,"208":1,"426":1}}],["ресурсах",{"0":{"0":1}}],["ресурс",{"2":{"123":2,"125":2,"360":1,"365":1,"368":3,"491":1}}],["ресурсы",{"0":{"426":1},"1":{"427":1,"428":1},"2":{"104":1,"145":2,"180":2,"198":1,"232":1,"327":1,"426":4,"429":1,"436":5,"445":1,"451":1,"476":1,"477":1,"491":1,"578":1}}],["режимы",{"2":{"291":1}}],["режим",{"2":{"134":2,"144":3,"145":1,"149":1,"404":1}}],["режимов",{"2":{"134":1}}],["режима",{"2":{"125":1,"143":1,"144":1,"153":1,"184":1,"543":1}}],["режимах",{"2":{"104":1,"580":3,"582":2}}],["режиме",{"2":{"12":1,"104":1,"134":1,"143":1,"144":2,"147":1,"154":1,"180":1,"234":1,"254":1,"258":1,"294":1,"300":1,"396":1,"430":2,"478":2,"479":1,"531":1,"587":1}}],["реагировать",{"2":{"309":1,"311":1,"332":1,"407":1}}],["реагирования",{"2":{"299":1}}],["реакции",{"2":{"130":1}}],["реактивная",{"2":{"130":1,"160":1,"162":2,"313":1,"368":1,"369":2,"474":1,"482":1}}],["реактивное",{"2":{"314":1,"321":1,"338":1,"352":1,"367":1,"368":1}}],["реактивно",{"2":{"314":1,"408":1}}],["реактивного",{"0":{"312":1,"314":1},"1":{"313":1,"315":1,"316":1,"317":1,"318":1},"2":{"222":1,"304":1,"311":1,"321":1,"322":1,"323":1,"363":1,"542":1}}],["реактивному",{"2":{"362":1}}],["реактивном",{"2":{"156":2,"314":1,"368":1,"482":1}}],["реактивностью",{"2":{"304":1,"338":1,"482":2}}],["реактивность",{"2":{"156":1,"179":1,"227":2,"228":1,"236":1,"306":2,"311":1,"353":1,"365":1,"369":1,"482":2}}],["реактивности",{"2":{"126":1,"130":1,"132":1,"155":1,"226":2,"227":1,"312":1,"482":2,"575":1}}],["реактивной",{"2":{"95":1,"111":1,"130":1,"160":1,"162":1,"261":2,"315":1,"404":1}}],["реактивные",{"2":{"135":1,"157":1,"160":2,"171":1,"187":2,"313":1,"314":1,"316":3,"343":1,"355":1,"360":1,"363":1,"369":1,"407":1,"474":1,"478":3,"482":2}}],["реактивных",{"0":{"130":1},"2":{"130":2,"160":1,"187":1,"298":1,"314":1,"318":1,"338":1,"375":1,"474":1,"482":1}}],["реактивным",{"2":{"129":1,"130":1,"160":2,"312":1,"320":1}}],["реактивными",{"2":{"112":1,"129":1,"130":2,"160":1,"185":1,"226":1,"316":1,"319":1,"338":1}}],["реактивный",{"2":{"96":1,"130":1,"187":1,"306":1,"312":2,"314":1,"315":1,"318":1,"320":1,"322":1,"478":2,"482":2}}],["реактивную",{"2":{"95":1,"96":1,"155":1,"160":2,"187":2,"306":2,"307":2,"311":1,"313":3,"337":1,"363":3,"478":1,"482":1}}],["реально",{"2":{"316":1,"484":1}}],["реальности",{"2":{"202":1,"421":1}}],["реальном",{"2":{"185":1,"227":1,"228":1,"399":1,"410":1,"446":1,"456":1}}],["реальному",{"2":{"177":1}}],["реальное",{"2":{"145":1,"263":1,"276":1}}],["реальный",{"0":{"365":1},"1":{"366":1,"367":1,"368":1},"2":{"285":1,"444":1,"491":2}}],["реальным",{"2":{"175":1}}],["реальными",{"2":{"124":1,"433":1,"476":1}}],["реальных",{"2":{"156":1,"444":2,"445":1,"458":1}}],["реальные",{"2":{"96":1,"189":1,"433":1,"476":1,"479":1}}],["реализовывали",{"2":{"265":1}}],["реализовывать",{"2":{"235":1,"331":1,"367":1,"371":1,"422":1,"508":1}}],["реализовали",{"2":{"225":1,"322":2,"369":1}}],["реализованного",{"2":{"289":1}}],["реализованный",{"2":{"265":1}}],["реализованные",{"2":{"238":1}}],["реализовано",{"2":{"227":1,"306":1,"341":1,"591":1}}],["реализованы",{"2":{"155":1,"156":1,"200":1,"289":1,"313":1,"422":1,"423":1,"508":1}}],["реализован",{"2":{"134":1,"215":1,"220":1,"225":1,"226":1,"321":1,"343":1}}],["реализована",{"2":{"95":1,"415":1,"483":1,"543":1,"545":1,"553":1}}],["реализовать",{"2":{"12":1,"35":1,"36":1,"40":1,"82":1,"114":1,"218":2,"222":1,"223":1,"225":1,"226":1,"234":1,"256":1,"267":1,"289":2,"316":1,"324":1,"325":2,"327":1,"328":1,"330":1,"344":1,"354":1,"357":1,"397":1,"399":1,"408":1,"416":2,"419":1,"438":1}}],["реализуя",{"2":{"304":1}}],["реализуемая",{"2":{"467":1}}],["реализуемого",{"2":{"335":1}}],["реализуем",{"2":{"260":1,"308":1,"325":2,"340":1,"342":1,"363":1}}],["реализуемые",{"2":{"228":1}}],["реализуется",{"2":{"483":1}}],["реализует",{"2":{"224":1,"228":1,"307":1,"314":1,"359":1,"546":1}}],["реализующая",{"2":{"337":2}}],["реализующий",{"2":{"227":1,"252":1,"365":1,"538":1}}],["реализующих",{"2":{"181":1,"333":1,"338":1}}],["реализуются",{"2":{"257":1}}],["реализуют",{"2":{"221":1,"318":1,"422":1}}],["реализацией",{"2":{"224":1,"227":1,"248":1,"322":1,"369":1,"415":1,"419":1,"420":1,"421":2,"578":1}}],["реализациями",{"2":{"443":1}}],["реализациях",{"2":{"407":1}}],["реализация",{"0":{"210":1,"309":1,"312":1,"314":1,"328":1,"368":1,"369":1},"1":{"211":1,"212":1,"310":1,"311":1,"313":1,"315":1,"316":1,"317":1,"318":1,"329":1,"330":1,"334":1,"335":1,"336":1,"338":1,"339":1,"340":1,"341":1,"342":1,"343":1,"345":1},"2":{"132":1,"151":1,"200":1,"202":1,"210":1,"211":1,"222":1,"223":3,"224":1,"225":1,"226":1,"234":1,"253":1,"258":1,"260":1,"269":1,"298":1,"304":3,"308":1,"309":1,"311":1,"312":1,"319":1,"332":1,"333":1,"334":1,"337":2,"338":1,"340":1,"342":1,"369":1,"400":1,"410":1,"415":1,"421":1,"474":1,"576":1}}],["реализаций",{"2":{"130":1,"212":1,"213":1,"231":2,"260":1,"300":1}}],["реализации",{"0":{"548":1},"1":{"549":1,"550":1},"2":{"39":1,"67":1,"96":1,"127":1,"132":1,"138":1,"168":1,"175":1,"177":1,"191":2,"202":1,"207":1,"210":1,"211":1,"215":1,"217":2,"218":1,"219":1,"220":1,"221":1,"222":2,"224":1,"226":1,"244":1,"257":1,"261":1,"269":1,"287":1,"293":1,"299":2,"304":2,"306":1,"309":1,"311":1,"313":1,"314":1,"319":2,"323":1,"327":1,"331":2,"333":1,"340":2,"344":1,"346":1,"348":1,"350":1,"351":1,"353":1,"354":1,"360":1,"369":3,"372":1,"383":1,"385":1,"389":1,"408":1,"413":1,"415":1,"416":2,"419":1,"422":1,"436":1,"445":1,"457":1,"467":2,"474":2,"476":1,"489":1,"588":1}}],["реализацию",{"2":{"16":1,"41":1,"75":1,"96":1,"130":1,"183":1,"199":1,"202":1,"212":1,"218":2,"223":1,"225":1,"235":1,"257":1,"307":1,"319":1,"321":1,"330":1,"346":1,"360":1,"368":1,"372":1,"415":1,"419":1,"484":1}}],["регулярный",{"0":{"486":1}}],["регулярных",{"2":{"413":1}}],["регулировать",{"2":{"438":1}}],["регулирования",{"2":{"422":1}}],["регулируется",{"2":{"59":1,"142":1}}],["регистрировать",{"2":{"228":1,"356":1,"365":2}}],["регистрируя",{"2":{"222":1}}],["регистрирует",{"2":{"482":1}}],["регистрируется",{"2":{"223":1}}],["регистрируете",{"2":{"198":1}}],["регистрируем",{"2":{"128":1,"198":1,"298":2,"299":2,"311":1,"368":1,"407":1}}],["регистре",{"2":{"170":1,"171":1,"186":1}}],["регистра",{"2":{"172":1}}],["регистраторе",{"2":{"142":1}}],["регистратора",{"2":{"142":3}}],["регистраторы",{"2":{"142":2}}],["регистратором",{"2":{"142":1}}],["регистрацию",{"2":{"198":1}}],["регистрация",{"0":{"128":1},"2":{"356":1}}],["регистрации",{"2":{"58":1,"126":1,"139":1,"196":4,"198":1,"218":2,"220":1,"222":1,"223":1,"274":2,"299":1,"356":1,"368":1,"369":1,"407":1,"573":1}}],["регистр",{"2":{"44":1,"186":3}}],["решетку",{"2":{"407":1}}],["решетки",{"2":{"404":1}}],["решен",{"2":{"327":1}}],["решена",{"2":{"12":1,"129":1,"265":1}}],["решении",{"2":{"541":1}}],["решению",{"2":{"313":1,"375":1}}],["решением",{"2":{"67":1,"70":1,"124":1,"318":1,"420":1,"430":1,"438":1,"442":1,"450":1,"457":1}}],["решение",{"2":{"12":2,"13":1,"59":1,"62":1,"74":1,"96":2,"98":1,"124":1,"125":2,"134":1,"138":1,"156":1,"202":1,"228":1,"240":1,"269":1,"280":1,"306":1,"332":1,"354":5,"363":1,"375":1,"407":1,"420":1,"422":1,"445":1,"482":1,"491":1,"541":1}}],["решений",{"2":{"10":1,"12":1,"22":1,"39":1,"41":1,"64":1,"74":3,"354":1,"396":1,"492":1}}],["решениями",{"2":{"260":1}}],["решениях",{"2":{"16":1}}],["решения",{"0":{"10":1,"431":1},"1":{"432":1,"433":1,"434":1,"435":1,"436":1,"437":1,"438":1,"439":1,"440":1,"441":1},"2":{"9":1,"10":1,"14":1,"39":1,"62":2,"74":1,"168":1,"191":4,"196":1,"202":1,"223":1,"233":1,"247":2,"249":1,"261":1,"265":1,"266":1,"334":1,"335":1,"352":1,"360":1,"361":1,"416":1,"422":2,"444":1,"457":1,"458":1,"492":1,"541":2}}],["решил",{"2":{"458":1}}],["решили",{"2":{"334":1,"357":1,"483":3}}],["решит",{"2":{"327":1}}],["решить",{"2":{"143":1,"254":1,"304":1,"327":1,"396":1,"399":1,"413":1,"422":1,"426":1}}],["решётки",{"2":{"157":1}}],["решат",{"2":{"327":1}}],["решать",{"2":{"217":1,"341":1}}],["решают",{"2":{"203":1,"478":1}}],["решали",{"2":{"155":1}}],["решает",{"2":{"123":1,"156":1,"196":1,"261":1,"295":1,"478":1}}],["решаем",{"2":{"12":1,"352":1}}],["реквизите",{"2":{"410":1}}],["реквизиты",{"2":{"131":1}}],["рекламных",{"2":{"484":1}}],["рекламные",{"2":{"4":1,"285":1}}],["рекламодателям",{"2":{"286":1}}],["рекламодателями",{"2":{"283":1}}],["рекламы",{"2":{"285":2}}],["реклама",{"0":{"285":1}}],["рекламируемым",{"2":{"283":1}}],["реконнект",{"2":{"138":1}}],["рекомендовал",{"2":{"296":1}}],["рекомендацией",{"2":{"445":1}}],["рекомендациям",{"2":{"182":1,"368":1}}],["рекомендациях",{"2":{"153":1}}],["рекомендации",{"2":{"150":1,"181":1,"189":1,"191":1,"192":1}}],["рекомендаций",{"2":{"4":1,"169":1}}],["рекомендует",{"2":{"430":1}}],["рекомендуется",{"0":{"295":1},"2":{"130":1,"151":1,"152":1,"178":1,"180":1,"186":1,"197":1,"217":3,"257":1,"258":1,"298":1,"319":1,"327":3,"337":1,"340":1,"356":1,"363":1,"377":1,"416":1,"425":1,"429":1,"462":1,"546":1,"591":1}}],["рекомендуемые",{"2":{"296":1}}],["рекомендуемым",{"2":{"293":1,"459":1}}],["рекомендуемой",{"2":{"178":1}}],["рекомендуются",{"2":{"474":1}}],["рекомендую",{"2":{"96":1,"178":2,"274":1,"308":1,"318":1,"321":1,"362":1,"413":1,"578":1}}],["райнтаймом",{"2":{"483":1}}],["равенства",{"2":{"448":1}}],["равным",{"2":{"410":1}}],["равных",{"2":{"287":1}}],["равна",{"2":{"163":1}}],["равно",{"2":{"160":1,"163":1,"218":1,"232":1,"246":1,"294":1,"491":1}}],["рамок",{"2":{"291":1}}],["рамками",{"2":{"159":1,"351":1}}],["рамках",{"2":{"156":1,"161":1,"185":1,"299":1,"340":1,"360":1,"365":1,"371":1,"445":1}}],["рамки",{"2":{"151":1,"155":1,"156":1,"181":1,"196":1,"198":1,"199":1,"201":1,"253":1,"271":1,"300":1,"350":1,"415":1,"419":1,"422":2,"466":2}}],["радует",{"2":{"268":1}}],["радужно",{"2":{"183":1,"399":1}}],["радиус",{"2":{"259":1}}],["радиокнопки",{"0":{"252":1},"2":{"252":2}}],["ради",{"2":{"178":1}}],["рантайма",{"2":{"483":1}}],["ранней",{"2":{"457":1}}],["ранних",{"2":{"441":1,"444":1}}],["рано",{"2":{"246":1,"484":1}}],["ранее",{"2":{"83":1,"149":1,"159":1,"182":1,"187":1,"223":1,"228":1,"291":1,"304":2,"306":1,"325":1,"332":1,"333":2,"337":1,"341":1,"369":1,"371":1,"396":1,"407":1,"419":1,"421":2,"452":1,"467":1}}],["раньше",{"2":{"12":1,"179":1,"233":3,"234":1,"312":1,"327":1,"402":1,"430":1,"444":1}}],["рабочая",{"2":{"306":1}}],["рабочим",{"0":{"333":1},"1":{"334":1,"335":1,"336":1},"2":{"306":1,"340":1}}],["рабочих",{"2":{"281":1,"287":1,"299":1,"416":1}}],["рабочие",{"2":{"194":1}}],["рабочий",{"2":{"96":1,"133":1,"144":1,"153":1,"158":1,"298":1,"299":2,"332":1,"333":1,"368":1,"384":1,"394":2,"421":1,"422":2,"467":1,"469":1}}],["рабочем",{"2":{"256":1,"258":1,"294":1,"391":1,"415":1,"416":1,"444":1,"445":1}}],["рабочему",{"2":{"199":1,"336":1,"343":1}}],["рабочей",{"2":{"177":1}}],["рабочего",{"0":{"177":1,"384":1},"1":{"178":1,"179":1,"180":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1},"2":{"126":1,"127":1,"133":1,"157":1,"158":1,"159":1,"160":1,"223":1,"233":1,"256":1,"258":1,"299":1,"300":3,"304":1,"305":1,"348":1,"349":1,"356":1,"366":1,"416":2,"419":1,"420":1,"421":1,"445":1,"467":2}}],["рабочее",{"2":{"70":1}}],["работоспособного",{"2":{"541":1}}],["работоспособный",{"2":{"416":1}}],["работоспособен",{"2":{"179":1}}],["работник",{"2":{"333":2}}],["работнику",{"2":{"299":1}}],["работника",{"2":{"299":3}}],["работе",{"2":{"41":2,"111":1,"114":1,"130":1,"168":1,"176":1,"178":1,"183":1,"202":1,"243":1,"299":1,"303":1,"311":1,"369":1,"405":1,"416":1,"430":2,"482":2,"541":1}}],["работающую",{"2":{"538":1}}],["работающее",{"2":{"446":1}}],["работающего",{"2":{"290":1,"542":1}}],["работающей",{"2":{"190":1,"279":1}}],["работающими",{"2":{"302":1}}],["работающих",{"2":{"200":1,"286":1,"399":1,"407":1}}],["работающий",{"2":{"178":1,"181":1,"213":1}}],["работающие",{"2":{"96":1}}],["работают",{"2":{"124":1,"159":1,"178":1,"198":1,"200":1,"207":1,"228":1,"232":1,"240":1,"325":1,"327":1,"334":1,"406":1,"422":1,"423":1,"436":1,"453":1,"478":1,"586":1}}],["работала",{"2":{"223":1}}],["работало",{"2":{"188":1,"212":1}}],["работали",{"2":{"160":1,"196":1,"198":1}}],["работал",{"2":{"122":2}}],["работаем",{"2":{"112":1,"466":1}}],["работаете",{"2":{"244":2,"462":1}}],["работает",{"2":{"50":1,"73":1,"89":1,"101":1,"121":1,"123":2,"137":1,"151":1,"179":2,"187":2,"188":1,"193":1,"211":1,"221":1,"225":1,"226":1,"227":2,"258":1,"306":2,"309":1,"311":1,"335":1,"336":2,"364":1,"369":1,"404":1,"416":1,"422":1,"430":1,"436":1,"447":1,"448":2,"466":1,"474":3,"476":1,"482":1,"484":1,"491":1,"492":2,"578":1}}],["работа",{"0":{"50":1,"81":1,"466":1},"1":{"82":1,"83":1},"2":{"38":1,"139":1,"220":1,"340":1,"462":1,"465":1,"466":2}}],["работать",{"2":{"2":1,"25":1,"50":1,"59":1,"111":1,"124":1,"138":1,"156":1,"158":1,"168":1,"180":2,"183":1,"185":1,"221":1,"226":1,"235":1,"291":3,"298":1,"299":1,"313":1,"319":1,"327":1,"337":2,"345":1,"355":1,"364":1,"371":1,"377":1,"402":1,"413":1,"430":2,"436":2,"466":2,"476":1,"478":1,"492":1}}],["работу",{"2":{"23":1,"47":1,"74":1,"83":1,"178":1,"311":2,"313":1,"319":1,"325":1,"326":1,"327":1,"330":2,"368":1,"369":1,"384":1,"422":2,"423":1,"436":1,"438":1,"457":1,"463":1,"476":1,"479":1,"521":1,"532":1}}],["работы",{"0":{"71":1,"250":1},"1":{"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1},"2":{"12":1,"17":1,"23":1,"50":1,"63":1,"73":1,"111":1,"123":1,"124":1,"125":1,"151":1,"156":1,"159":1,"167":1,"175":1,"176":1,"178":2,"179":2,"182":1,"185":2,"187":1,"199":1,"201":1,"231":1,"234":2,"261":1,"287":1,"290":1,"291":1,"299":4,"307":1,"319":1,"325":1,"327":3,"328":1,"332":1,"338":3,"347":1,"368":1,"369":1,"370":1,"397":1,"415":1,"420":1,"421":1,"426":1,"447":1,"448":1,"462":1,"466":1,"470":1,"471":1,"492":2,"501":3,"515":1,"590":1}}],["расшаривать",{"2":{"478":1}}],["расшифровывается",{"2":{"353":1,"414":1}}],["расширили",{"2":{"371":1}}],["расширим",{"2":{"331":1,"337":1}}],["расширить",{"2":{"22":1,"370":1,"491":1}}],["расширенные",{"2":{"362":1}}],["расширенными",{"2":{"348":1}}],["расширено",{"2":{"319":1}}],["расширений",{"2":{"430":1}}],["расширении",{"2":{"377":1,"482":1}}],["расширением",{"2":{"159":1,"180":1}}],["расширение",{"2":{"98":1,"114":1,"293":1,"319":2,"447":1,"573":1,"578":2}}],["расширениями",{"2":{"547":1}}],["расширения",{"0":{"578":1},"2":{"88":1,"125":1,"195":1,"228":1,"286":1,"318":1,"430":2,"474":1,"578":1}}],["расширяет",{"2":{"228":1,"392":1}}],["расширяемость",{"2":{"68":1,"490":1}}],["расширять",{"2":{"18":1,"156":1,"365":1,"429":1,"468":1}}],["расхождения",{"2":{"465":1}}],["расходов",{"2":{"282":1}}],["расходы",{"0":{"282":1},"2":{"312":1,"436":1,"476":1}}],["растут",{"2":{"457":1}}],["растущая",{"2":{"181":1}}],["растущим",{"2":{"142":1}}],["растет",{"2":{"369":1}}],["расчеты",{"2":{"319":1}}],["расчетом",{"2":{"12":1}}],["раскрывающимся",{"2":{"561":1}}],["раскрывая",{"2":{"452":1}}],["раскрывается",{"2":{"225":1,"282":1,"416":1}}],["раскрывает",{"2":{"157":1,"226":1,"340":1}}],["раскадровки",{"2":{"244":1}}],["рассказывается",{"2":{"383":1}}],["рассказывали",{"2":{"341":1}}],["рассказано",{"2":{"166":1}}],["рассказать",{"2":{"156":1,"181":1}}],["рассчитывал",{"2":{"282":1}}],["рассчитать",{"2":{"258":1}}],["рассылку",{"2":{"276":3}}],["расстояния",{"2":{"246":1}}],["расстояние",{"0":{"244":1},"2":{"246":2}}],["рассуждений",{"2":{"202":1}}],["рассматриваемое",{"2":{"377":1}}],["рассматриваемый",{"2":{"261":1}}],["рассматриваем",{"2":{"218":1,"419":1}}],["рассматривается",{"2":{"343":1,"375":1}}],["рассматривает",{"2":{"194":1,"492":1}}],["рассматриваете",{"2":{"26":1}}],["рассматривали",{"2":{"185":1,"273":1,"309":1,"320":1,"332":1}}],["рассматриваются",{"2":{"129":1,"131":1,"150":1,"155":1,"238":1,"337":1}}],["рассматриваться",{"2":{"157":1}}],["рассматривать",{"2":{"43":1,"148":1,"158":1,"160":1,"194":1,"195":1,"197":1,"228":1,"240":1,"268":1,"269":1,"313":1,"327":1,"331":2,"332":1,"351":1,"362":1,"363":1,"369":1,"399":1,"413":1}}],["рассмотрите",{"2":{"181":1,"434":1,"438":1}}],["рассмотрим",{"2":{"10":1,"72":1,"126":1,"141":1,"142":1,"143":1,"149":1,"155":1,"156":1,"157":1,"159":2,"160":1,"161":1,"166":1,"168":2,"179":1,"180":2,"184":1,"188":1,"189":1,"191":1,"194":1,"198":1,"199":1,"202":2,"207":1,"210":1,"219":1,"220":1,"221":1,"222":1,"223":2,"226":2,"227":1,"228":2,"229":1,"232":1,"233":2,"237":1,"240":1,"241":1,"243":1,"249":1,"268":1,"271":1,"275":1,"292":1,"297":1,"298":3,"299":1,"304":1,"305":1,"312":1,"318":1,"319":1,"323":1,"325":2,"340":1,"343":1,"346":1,"348":2,"352":1,"355":1,"357":1,"359":3,"362":4,"364":1,"369":1,"397":1,"399":2,"401":1,"404":1,"407":2,"410":2,"415":1,"416":4,"420":1,"421":1,"422":2,"442":1,"444":1,"445":2,"452":1,"453":1,"454":1,"455":1,"466":1}}],["рассмотренные",{"2":{"313":1,"333":1}}],["рассмотренными",{"2":{"234":1}}],["рассмотренных",{"2":{"181":1,"268":1,"331":1,"467":1}}],["рассмотрение",{"2":{"240":1,"300":1,"302":1}}],["рассмотрении",{"2":{"222":1,"299":1}}],["рассмотрению",{"2":{"178":1,"422":1}}],["рассмотрены",{"2":{"39":1,"228":1}}],["рассмотрели",{"2":{"153":2,"223":1,"226":1,"235":1,"287":2,"299":1,"302":2,"318":1,"323":1,"333":1,"346":1,"355":1,"358":1,"365":1,"369":1,"371":2,"424":1,"450":1,"468":1}}],["рассмотреть",{"2":{"150":1,"180":1,"297":1,"298":1,"331":1,"369":1,"413":1,"414":1,"422":1,"456":1}}],["распакованном",{"2":{"515":1}}],["распараллеливания",{"2":{"483":1}}],["распознаваемых",{"2":{"409":1}}],["расползлись",{"2":{"478":1}}],["располнела",{"2":{"474":1,"575":1}}],["распологаются",{"2":{"180":1}}],["расположены",{"2":{"549":1}}],["расположенных",{"2":{"360":1}}],["расположенные",{"2":{"290":1}}],["расположенное",{"2":{"273":1}}],["расположена",{"2":{"240":1}}],["расположению",{"2":{"263":1}}],["расположении",{"2":{"248":1}}],["расположения",{"2":{"148":1,"149":1,"242":1,"271":1}}],["расположение",{"2":{"36":1,"148":1,"182":1,"272":1}}],["расположить",{"2":{"36":1}}],["располагались",{"2":{"490":1}}],["располагать",{"2":{"454":1}}],["располагаться",{"2":{"143":1,"145":1,"246":1,"293":1}}],["располагаются",{"2":{"271":1,"369":1}}],["располагает",{"2":{"183":1}}],["располагается",{"2":{"127":1,"148":1,"231":1,"246":1}}],["распределение",{"2":{"492":1}}],["распределения",{"2":{"180":1,"219":1}}],["распределенная",{"2":{"458":1,"465":1}}],["распределенности",{"2":{"458":1}}],["распределенными",{"2":{"422":1}}],["распределенные",{"2":{"422":1}}],["распределенных",{"2":{"200":1,"399":1,"422":2}}],["распределяются",{"2":{"123":1}}],["распространяемы",{"2":{"542":1}}],["распространяется",{"2":{"197":1,"313":1}}],["распространяться",{"2":{"314":1}}],["распространять",{"2":{"291":1}}],["распространяются",{"2":{"249":1}}],["распространяющихся",{"2":{"159":1}}],["распространены",{"2":{"491":1}}],["распространенного",{"2":{"490":1}}],["распространенность",{"2":{"482":1}}],["распространенной",{"2":{"390":1,"420":1}}],["распространенными",{"2":{"155":1,"237":1,"291":1,"299":1,"415":1,"419":1}}],["распространенных",{"2":{"145":1,"180":1,"287":1,"293":1,"340":2,"446":1,"542":1}}],["распространенные",{"2":{"142":1,"145":1,"154":1,"237":1,"253":1,"318":1,"464":1,"482":1}}],["распространенный",{"2":{"9":1,"123":1,"208":1,"466":1}}],["распространение",{"2":{"291":1,"311":1,"399":1}}],["распространения",{"2":{"157":1,"306":1}}],["распространен",{"2":{"157":1,"230":1,"272":2}}],["раза",{"2":{"478":1,"483":1}}],["разочаровавшись",{"2":{"458":1}}],["разочарованию",{"2":{"421":1}}],["разобраться",{"2":{"397":1}}],["разобрать",{"2":{"339":1,"357":1}}],["разобрались",{"2":{"334":1}}],["разобран",{"2":{"180":1}}],["разобщенности",{"2":{"325":1}}],["разобьем",{"2":{"106":1,"187":1}}],["разумеется",{"2":{"332":1}}],["разумными",{"2":{"300":1}}],["разумным",{"2":{"271":1}}],["разграничению",{"2":{"323":1}}],["разгрузки",{"2":{"225":1}}],["разговаривать",{"2":{"287":1}}],["разблокировав",{"2":{"415":1}}],["разбросаны",{"2":{"369":1}}],["разбрасывать",{"2":{"198":1}}],["разбора",{"2":{"335":1}}],["разберет",{"2":{"179":1}}],["разбиения",{"2":{"482":2}}],["разбиение",{"0":{"4":1},"2":{"2":1,"41":1,"70":1,"357":1}}],["разбираться",{"2":{"406":1,"407":1,"492":1}}],["разбили",{"2":{"369":1}}],["разбивайте",{"2":{"247":1}}],["разбивается",{"2":{"435":1,"436":1,"476":1,"477":1}}],["разбивает",{"2":{"194":1}}],["разбивать",{"2":{"2":1,"3":1}}],["разбивка",{"2":{"14":1,"351":1}}],["разбитым",{"2":{"491":1}}],["разбить",{"2":{"4":1}}],["разбита",{"2":{"2":1}}],["размонтированием",{"2":{"198":1,"407":1}}],["размонтировании",{"2":{"168":1}}],["размышления",{"0":{"143":1},"1":{"144":1},"2":{"201":1}}],["разместили",{"2":{"242":1}}],["разместим",{"2":{"159":1,"186":1,"187":1,"447":2}}],["разместить",{"2":{"117":1,"198":1,"407":1,"425":3,"454":1}}],["разметки",{"2":{"155":1}}],["размеров",{"2":{"239":1,"363":1}}],["размер",{"2":{"160":1,"183":1,"246":1,"319":1,"357":1,"400":1,"404":1,"426":2,"484":1}}],["размеру",{"2":{"142":1,"271":1}}],["размерам",{"2":{"291":1}}],["размерами",{"2":{"271":1,"294":1,"296":1}}],["размера",{"2":{"132":1,"137":1,"156":3,"198":2,"241":1,"246":1,"260":1,"266":1,"271":1,"318":1,"357":1,"426":1,"508":1}}],["размещает",{"2":{"285":1}}],["размещается",{"2":{"271":1,"272":1,"273":2,"293":1,"298":1}}],["размещаем",{"2":{"149":2,"187":1,"369":1}}],["размещаемый",{"2":{"145":1}}],["размещайте",{"2":{"244":1}}],["размещали",{"2":{"180":1}}],["размещаются",{"2":{"180":1,"263":1}}],["размещать",{"2":{"59":1,"135":1,"142":1,"180":2,"187":1,"260":1,"264":1,"366":1,"447":1}}],["размещена",{"2":{"447":1}}],["размещенный",{"2":{"299":1,"455":1}}],["размещенное",{"2":{"263":1}}],["размещены",{"2":{"181":1,"352":1,"401":1}}],["размещению",{"2":{"447":1}}],["размещение",{"0":{"263":1},"2":{"242":1,"263":1,"272":1,"273":1,"285":1,"453":1}}],["размещении",{"2":{"149":1,"273":1}}],["размещения",{"2":{"124":1,"139":1,"146":1,"157":1,"179":1,"273":1,"425":1,"466":1,"467":1,"492":1,"561":1}}],["размещен",{"2":{"144":1,"179":1,"180":1,"298":2,"321":1,"465":1}}],["размещено",{"2":{"142":2,"143":2,"147":1,"157":1}}],["разнообразные",{"2":{"399":1}}],["разному",{"2":{"357":1,"492":1}}],["разного",{"2":{"266":1,"482":1}}],["разная",{"2":{"345":1}}],["разным",{"2":{"458":1,"465":1}}],["разными",{"2":{"225":1,"436":1,"457":1,"476":1}}],["разных",{"2":{"125":1,"178":1,"199":1,"207":1,"260":1,"291":1,"436":1,"437":1,"454":1,"476":1,"478":1,"483":1,"568":1,"588":1}}],["разный",{"2":{"123":1}}],["разные",{"0":{"160":1},"2":{"123":1,"242":1,"272":1,"300":1,"311":1,"354":1,"410":1,"429":1,"436":1,"457":2,"458":1,"476":1,"483":2,"492":1,"573":1}}],["разницей",{"2":{"164":1,"228":1}}],["разницу",{"2":{"130":1,"233":1}}],["разницы",{"2":{"123":1}}],["разница",{"2":{"22":1,"96":1,"156":1,"176":1,"236":1,"303":1,"324":1,"345":1,"452":1,"491":1}}],["раздувать",{"2":{"549":1}}],["раздутому",{"2":{"73":1}}],["раздаются",{"2":{"492":1}}],["раздражения",{"2":{"284":1}}],["разделу",{"2":{"410":1}}],["разделом",{"2":{"271":1,"369":1}}],["разделов",{"2":{"257":1,"268":1}}],["разделять",{"2":{"371":1,"478":1}}],["разделяемые",{"2":{"314":1}}],["разделяется",{"2":{"314":1,"416":1}}],["разделяет",{"2":{"228":1,"306":1,"353":1}}],["разделяй",{"2":{"2":1}}],["разделить",{"2":{"194":2,"196":1,"357":1}}],["разделив",{"2":{"156":1}}],["разделами",{"2":{"318":1,"436":1,"476":1}}],["разделам",{"2":{"263":1}}],["разделах",{"2":{"159":1,"275":1,"404":1}}],["раздела",{"2":{"159":1,"241":1,"273":2,"314":1,"368":1}}],["раздел",{"2":{"144":1,"181":1,"183":1,"187":1,"271":1,"273":4,"293":1,"322":1,"368":1,"436":1,"476":1,"561":1}}],["разделенной",{"2":{"339":1}}],["разделенные",{"2":{"142":1,"186":1,"416":1}}],["разделенных",{"2":{"125":1,"142":2,"143":1}}],["разделена",{"2":{"194":1}}],["разделению",{"2":{"400":1}}],["разделения",{"2":{"159":1,"194":2,"200":1,"264":1}}],["разделение",{"0":{"194":1},"2":{"34":1,"191":1,"194":2,"196":1,"222":1,"260":1,"331":1,"436":1,"476":1,"490":1}}],["разделе",{"2":{"125":1,"157":1,"167":1,"179":1,"186":1,"198":1,"290":1,"299":1,"355":1,"359":1,"365":1,"407":1,"413":1,"445":1,"455":1,"474":1,"561":3}}],["разделы",{"2":{"123":1,"257":1,"271":1,"351":1}}],["различия",{"2":{"237":1,"413":1,"465":1}}],["различие",{"0":{"241":1},"2":{"155":1,"156":1,"252":1}}],["различающихся",{"2":{"478":1}}],["различаются",{"2":{"193":1}}],["различают",{"2":{"44":1}}],["различается",{"2":{"362":1}}],["различать",{"2":{"232":1}}],["различный",{"2":{"159":1}}],["различные",{"2":{"155":2,"184":1,"233":1,"260":1,"291":3,"323":1,"341":1,"397":1,"413":1,"422":1,"435":1,"442":1,"461":1,"476":1,"573":2}}],["различных",{"2":{"153":1,"155":1,"184":1,"212":1,"226":1,"257":1,"291":3,"294":1,"300":1,"319":1,"327":1,"354":1,"358":1,"397":1,"402":1,"415":1,"416":1,"424":1,"444":2,"448":1,"457":1,"491":1,"572":1,"573":1}}],["различным",{"2":{"35":1,"41":1,"201":1,"263":1,"291":1}}],["различными",{"2":{"30":1,"124":1,"183":1,"194":1,"225":1,"266":1,"271":1,"348":1,"369":1,"397":1,"416":1,"448":1,"482":1}}],["различного",{"2":{"70":1}}],["разветвление",{"2":{"458":1}}],["разветвлять",{"2":{"458":1}}],["развертываемого",{"2":{"542":1}}],["развертывается",{"2":{"436":1,"476":1}}],["развертывании",{"2":{"182":1}}],["развертыванию",{"2":{"144":1}}],["развертыванием",{"2":{"180":1,"396":1}}],["развертывание",{"0":{"76":1,"139":1,"391":1},"1":{"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1,"151":1,"152":1,"153":1,"154":1},"2":{"72":1,"76":1,"184":1,"292":1,"404":1,"467":1}}],["развертывания",{"0":{"143":1,"560":1},"1":{"144":1,"561":1,"562":1},"2":{"67":1,"134":1,"139":1,"153":1,"184":1,"289":1,"394":1,"396":1,"436":1,"476":1}}],["разве",{"2":{"327":1}}],["разворачивать",{"2":{"198":1}}],["разворачивание",{"2":{"40":1}}],["развитый",{"2":{"399":1}}],["развитии",{"2":{"399":1}}],["развитием",{"2":{"399":1}}],["развитие",{"0":{"500":1},"2":{"96":1,"201":1,"331":1}}],["развития",{"0":{"70":1},"2":{"10":1,"63":1,"155":1,"291":1,"541":1}}],["развивается",{"2":{"482":1}}],["развивать",{"2":{"435":1,"476":1}}],["развиваться",{"2":{"196":1,"351":1}}],["развиваются",{"2":{"177":1}}],["развивавшихся",{"2":{"96":1}}],["раз",{"0":{"362":1},"2":{"27":1,"123":3,"153":1,"156":1,"160":1,"162":1,"183":1,"200":1,"208":1,"211":1,"212":1,"217":1,"261":1,"282":1,"298":1,"304":1,"316":1,"356":1,"407":1,"429":2,"448":2,"453":1,"478":1,"492":1}}],["разряда",{"2":{"487":1}}],["разрядной",{"2":{"178":1}}],["разрывные",{"2":{"442":1}}],["разрушить",{"2":{"304":1}}],["разрешив",{"2":{"335":1}}],["разрешили",{"2":{"492":1}}],["разрешил",{"2":{"146":1}}],["разрешить",{"2":{"59":1,"334":1,"345":1,"415":1}}],["разрешающийся",{"2":{"414":1}}],["разрешается",{"2":{"343":1,"357":1,"367":1}}],["разрешает",{"2":{"125":1,"409":1}}],["разрешаться",{"2":{"339":1}}],["разрешать",{"2":{"123":1,"466":1}}],["разрешено",{"2":{"234":1,"465":1}}],["разрешен",{"2":{"125":3}}],["разрешений",{"2":{"483":1,"552":1}}],["разрешение",{"2":{"123":2,"232":1,"256":1,"336":1,"368":1,"422":1,"465":1}}],["разрешениях",{"2":{"550":1}}],["разрешениям",{"2":{"271":1}}],["разрешения",{"2":{"23":1,"123":1,"334":1,"339":1,"368":2,"422":1,"450":1,"466":1}}],["разрабатываешь",{"2":{"483":1}}],["разрабатывается",{"2":{"271":1}}],["разрабатываемые",{"2":{"436":1}}],["разрабатываемого",{"2":{"394":1}}],["разрабатываем",{"2":{"6":1}}],["разрабатывать",{"2":{"74":1,"239":1,"436":1,"477":1,"482":1,"492":1}}],["разработаем",{"2":{"185":1}}],["разработать",{"2":{"185":1}}],["разработанный",{"2":{"447":1}}],["разработанной",{"2":{"442":1}}],["разработаны",{"2":{"436":1,"476":1}}],["разработан",{"2":{"156":1}}],["разработана",{"2":{"134":1}}],["разработчику",{"2":{"457":1,"490":1,"491":1,"538":1,"541":1}}],["разработчиком",{"2":{"294":1,"392":1,"491":3}}],["разработчиков",{"2":{"2":1,"96":1,"169":1,"178":1,"183":1,"184":1,"212":1,"360":1,"376":1,"393":1,"422":1,"423":1,"436":1,"457":3,"458":1,"476":1,"479":1,"491":1,"502":1}}],["разработчики",{"2":{"201":1,"231":1,"377":1,"467":1,"490":2}}],["разработчик",{"2":{"73":1,"96":1,"124":1,"156":1,"191":1,"274":1,"287":1,"478":1,"541":1}}],["разработчиками",{"2":{"237":1}}],["разработчикам",{"2":{"73":1,"96":1,"438":1,"444":3,"542":2}}],["разработчика",{"2":{"23":1,"157":1,"179":1,"180":1,"231":1,"297":2,"300":1,"301":3,"313":1,"318":2,"322":1,"327":2,"377":1,"422":1,"442":2,"448":2,"457":1,"468":1,"478":2,"489":1,"491":1,"501":1,"545":1}}],["разработкой",{"2":{"74":1,"444":1,"464":1,"479":1}}],["разработка",{"0":{"75":1},"2":{"61":1,"70":1,"72":2,"75":1,"184":1,"190":1,"191":1,"291":1,"415":1,"457":1,"479":1}}],["разработки",{"0":{"72":1},"2":{"17":1,"61":1,"74":2,"121":1,"133":1,"156":2,"160":1,"177":1,"178":1,"179":4,"180":3,"182":1,"183":1,"184":3,"187":1,"191":1,"197":1,"198":1,"200":1,"201":1,"202":1,"231":1,"235":1,"299":1,"356":1,"385":1,"425":1,"430":3,"436":1,"442":2,"444":1,"445":1,"447":1,"456":2,"458":1,"474":1,"478":1,"479":1,"482":1,"483":1,"491":1,"541":1}}],["разработку",{"2":{"3":1,"74":1,"156":1,"191":1,"239":1,"423":1,"436":1,"476":1,"482":1,"490":2}}],["разработке",{"0":{"572":1},"2":{"3":1,"63":1,"67":3,"125":1,"176":1,"178":1,"179":1,"183":1,"190":1,"191":1,"192":1,"200":1,"202":1,"244":1,"323":1,"340":1,"376":1,"399":1,"430":1,"445":1,"492":1}}],["геттеров",{"2":{"478":1}}],["геттерами",{"2":{"316":1,"478":1}}],["геймификации",{"2":{"274":1}}],["героической",{"2":{"273":1}}],["героический",{"2":{"273":1}}],["герой",{"2":{"273":1}}],["генерации",{"2":{"261":1,"300":1,"399":1,"441":1,"492":1}}],["генерация",{"2":{"101":1,"429":1,"492":1}}],["генерируемые",{"2":{"399":1}}],["генерируемыми",{"2":{"399":1}}],["генерируется",{"2":{"339":1,"420":1,"492":1}}],["генерируют",{"2":{"180":1}}],["генерировать",{"2":{"260":1,"300":1,"396":1}}],["генерить",{"2":{"492":1}}],["генерит",{"2":{"53":1,"98":2,"123":2}}],["гениальное",{"2":{"2":1}}],["гибче",{"2":{"478":1}}],["гибридные",{"2":{"399":1}}],["гибридных",{"2":{"319":1,"404":1,"416":1}}],["гибки",{"2":{"482":1}}],["гибкая",{"2":{"313":1,"319":1}}],["гибкой",{"2":{"309":1}}],["гибкости",{"2":{"148":1,"361":1}}],["гибкость",{"2":{"40":1,"138":1,"156":1,"184":1,"233":1,"478":1}}],["гигантский",{"2":{"313":1}}],["гипертекста",{"2":{"155":1}}],["гуглить",{"2":{"124":2,"491":1}}],["греется",{"2":{"430":1}}],["громоздка",{"2":{"340":1}}],["громоздким",{"2":{"168":1,"299":1,"319":1}}],["грязно",{"2":{"308":1}}],["грубый",{"2":{"350":1}}],["грубого",{"2":{"371":1}}],["грубое",{"2":{"194":1}}],["грубо",{"2":{"123":1,"125":1,"483":1}}],["групповой",{"2":{"201":1}}],["группировки",{"2":{"198":1,"267":1,"351":2}}],["группах",{"2":{"201":1}}],["группа",{"2":{"187":1,"267":1,"268":1}}],["группами",{"2":{"187":1}}],["группу",{"2":{"185":1,"448":1}}],["группе",{"2":{"185":1,"243":2,"289":1,"448":1}}],["группы",{"0":{"244":1},"2":{"142":1,"187":1,"247":1,"252":1,"414":1,"433":1,"444":1,"448":1,"452":1,"476":1}}],["групп",{"2":{"142":1,"243":1,"448":1}}],["грузить",{"2":{"124":1,"492":1}}],["грамотная",{"2":{"501":1}}],["грамотно",{"2":{"491":1}}],["грамотному",{"2":{"250":1}}],["грамотной",{"2":{"67":1}}],["графики",{"2":{"243":1,"291":1}}],["графические",{"2":{"466":1}}],["графический",{"2":{"350":1,"459":1}}],["графическим",{"2":{"243":1}}],["графически",{"2":{"226":1,"228":1,"415":1}}],["графических",{"2":{"181":1}}],["графическая",{"2":{"224":1}}],["графическое",{"2":{"194":1,"196":1,"222":1,"224":1,"260":1}}],["графического",{"2":{"181":1,"399":1,"456":1}}],["градусов",{"2":{"227":1}}],["градусах",{"2":{"227":1}}],["градусы",{"2":{"226":2,"228":1}}],["грань",{"2":{"291":1}}],["гранулировано",{"2":{"123":1}}],["границу",{"2":{"260":1,"261":1}}],["границах",{"2":{"156":1,"327":1}}],["границы",{"0":{"9":1},"2":{"73":1,"228":1,"319":1}}],["границ",{"2":{"3":1,"259":1}}],["где",{"2":{"104":1,"122":1,"123":1,"124":1,"142":1,"144":1,"145":1,"156":1,"157":1,"159":1,"160":1,"179":1,"187":1,"200":1,"225":1,"242":1,"247":1,"249":1,"257":1,"263":1,"271":1,"273":2,"285":1,"314":1,"325":1,"327":1,"339":1,"342":1,"368":1,"369":3,"402":1,"406":1,"414":1,"416":2,"422":1,"425":1,"428":1,"450":1,"453":2,"457":1,"458":1,"467":1,"478":1,"479":1,"482":2,"486":1}}],["гарагусо",{"2":{"380":1}}],["гарантирует",{"2":{"272":1,"321":1}}],["гарантий",{"2":{"96":1}}],["гамбургера",{"2":{"266":1,"552":1}}],["гамбургер",{"2":{"263":1,"580":1,"582":1}}],["гамму",{"2":{"506":1}}],["гамме",{"2":{"252":1}}],["гаммы",{"2":{"26":1}}],["галочка",{"2":{"255":1}}],["галереи",{"2":{"86":1}}],["гаснет",{"2":{"111":1}}],["готовя",{"2":{"434":1,"476":1}}],["готового",{"2":{"541":1,"542":1}}],["готовое",{"2":{"538":1}}],["готовом",{"2":{"402":1}}],["готово",{"2":{"336":1}}],["готовой",{"2":{"180":1}}],["готовности",{"2":{"301":1}}],["готовность",{"2":{"289":1}}],["готова",{"2":{"217":1}}],["готов",{"2":{"187":1,"298":1,"299":1,"321":1,"342":1,"446":1}}],["готовую",{"2":{"180":1}}],["готовый",{"2":{"541":1}}],["готовым",{"2":{"430":1}}],["готовых",{"2":{"153":1,"167":1,"177":1,"542":1}}],["готовы",{"2":{"144":1,"168":1,"175":1,"176":1,"178":2,"182":1,"183":1,"251":1,"354":1,"401":1,"414":1,"415":1,"451":1,"454":1}}],["готовые",{"2":{"62":1,"144":1,"223":1}}],["гостинице",{"2":{"492":1}}],["гостиниц",{"2":{"281":1}}],["гостей",{"2":{"123":1}}],["государство",{"2":{"2":1,"410":1}}],["городов",{"2":{"408":1}}],["город",{"2":{"408":1}}],["города",{"2":{"268":2,"408":1}}],["горизонтальную",{"2":{"271":1}}],["горизонтальному",{"2":{"271":1}}],["горизонтальные",{"2":{"263":2,"266":2,"271":1}}],["гораздо",{"2":{"122":1,"145":1,"177":1,"194":1,"207":1,"233":1,"257":1,"291":2,"319":1,"466":1,"474":1}}],["гордо",{"2":{"111":1}}],["говорю",{"2":{"227":1,"233":1}}],["говорит",{"2":{"483":1}}],["говорить",{"2":{"58":1,"319":1}}],["говорили",{"2":{"273":1,"300":1,"407":2}}],["говорилось",{"2":{"174":1,"292":1,"353":1,"413":1,"419":1,"444":1,"463":1}}],["говорил",{"2":{"160":1,"223":1}}],["говоря",{"2":{"96":1,"123":1,"125":1,"196":1,"242":1,"247":1,"275":1,"402":1,"482":1,"483":1,"492":1}}],["году",{"2":{"248":1}}],["года",{"2":{"491":1,"502":1}}],["годах",{"2":{"200":1}}],["годами",{"2":{"191":1}}],["год",{"2":{"89":1,"201":1,"425":1}}],["годы",{"2":{"50":1,"142":1,"250":1,"474":1,"575":1}}],["глоссарий",{"0":{"501":1}}],["глобален",{"2":{"478":1}}],["глобального",{"2":{"542":1}}],["глобальное",{"2":{"478":1}}],["глобально",{"2":{"354":1,"356":1,"367":1}}],["глобальному",{"2":{"209":1}}],["глобальную",{"2":{"180":1,"335":1,"406":1}}],["глобальная",{"2":{"157":1,"356":1}}],["глобальные",{"0":{"356":1},"2":{"180":1,"181":1,"365":1,"435":1,"437":1,"476":1}}],["глобальный",{"2":{"128":1,"356":1,"368":1,"438":1,"478":1,"572":1}}],["глобальными",{"2":{"478":1}}],["глобальным",{"2":{"34":1,"319":1,"478":2,"483":1}}],["глобальных",{"0":{"128":1},"2":{"23":1,"126":1,"356":1,"365":1}}],["глючит",{"2":{"430":1}}],["глубоких",{"2":{"408":1}}],["глубокий",{"2":{"318":1}}],["глубоким",{"2":{"275":1}}],["глубокой",{"2":{"573":1}}],["глубокое",{"2":{"364":1}}],["глубоко",{"2":{"69":1,"304":1,"359":1,"360":1}}],["глубокого",{"2":{"65":1,"234":1}}],["глубины",{"2":{"268":1}}],["глаза",{"2":{"272":1}}],["глазах",{"2":{"227":1}}],["глаз",{"2":{"268":1}}],["гласит",{"2":{"195":1,"196":1,"201":1,"241":1,"247":1,"458":1}}],["главой",{"2":{"191":1,"290":1}}],["глав",{"2":{"177":1,"289":1}}],["главу",{"2":{"143":1,"176":1,"193":1,"343":1,"356":1}}],["главах",{"2":{"156":1,"177":1,"231":1,"304":1,"397":1}}],["глава",{"0":{"237":1,"382":1,"383":1,"384":1,"385":1,"386":1,"387":1,"388":1,"389":1,"390":1,"391":1,"392":1},"1":{"238":1,"239":1,"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"262":1,"263":1,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1,"270":1,"271":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"286":1,"287":1,"288":1},"2":{"140":1,"177":1,"191":1,"202":1,"235":1,"238":1,"287":1,"296":1,"300":1,"326":1,"385":1,"386":1,"388":1,"389":1,"392":1,"397":1,"413":1,"420":1,"443":1}}],["главы",{"2":{"139":1,"155":1,"176":1,"178":1,"179":1,"237":1,"238":1,"265":1,"289":1,"301":1,"304":1,"305":1,"319":2,"325":1,"326":1,"331":1,"348":1,"349":2,"363":1,"369":1,"397":1,"398":1,"400":1,"455":1,"458":1,"466":1}}],["главе",{"2":{"98":1,"127":1,"131":1,"133":1,"134":2,"139":1,"141":1,"143":1,"151":1,"153":1,"155":1,"158":1,"159":3,"160":2,"166":1,"175":2,"178":2,"180":3,"181":1,"184":1,"185":2,"188":1,"189":2,"191":1,"194":1,"195":1,"198":1,"199":1,"213":1,"220":2,"223":2,"225":1,"226":1,"228":1,"229":1,"231":1,"235":2,"237":1,"244":1,"249":1,"252":1,"263":1,"272":1,"273":1,"287":1,"288":1,"289":3,"292":1,"298":1,"300":1,"302":2,"303":1,"304":1,"305":2,"308":1,"309":1,"319":1,"320":2,"323":2,"324":1,"325":3,"331":1,"332":1,"341":1,"346":2,"348":4,"349":1,"352":3,"355":1,"357":1,"360":1,"362":1,"364":1,"366":1,"371":2,"372":1,"382":1,"383":1,"384":1,"387":1,"390":2,"391":1,"397":1,"399":2,"404":1,"407":1,"414":1,"423":2,"424":1,"442":3,"446":2,"452":1,"468":1}}],["главным",{"2":{"198":1,"436":1,"477":1,"491":1}}],["главных",{"2":{"159":1,"312":1,"445":1}}],["главный",{"2":{"26":1,"180":1,"185":1,"272":2,"356":1}}],["главной",{"2":{"268":1,"273":3}}],["главного",{"2":{"158":1,"180":1,"225":1,"266":1,"273":1,"298":1,"550":1}}],["главном",{"2":{"88":1,"106":1,"111":1,"268":1,"298":2,"331":1}}],["главное",{"2":{"2":1,"264":1,"273":1,"360":1,"416":1}}],["главную",{"2":{"7":1,"85":1,"105":1,"272":1}}],["главная",{"0":{"273":1},"2":{"7":1,"33":1,"241":1,"272":2,"273":1,"363":1}}],["бюджетных",{"2":{"445":1}}],["бюджету",{"2":{"73":1}}],["бухгалтерская",{"2":{"422":1}}],["бумажном",{"2":{"378":1}}],["булевские",{"2":{"298":1}}],["булево",{"2":{"163":2,"187":1,"368":1}}],["буквы",{"2":{"172":1}}],["буквами",{"2":{"171":1,"174":1}}],["буква",{"2":{"152":1}}],["будь",{"2":{"248":1,"291":1,"350":1}}],["будто",{"2":{"201":2,"490":1}}],["будем",{"2":{"18":1,"22":1,"25":1,"41":1,"56":1,"58":1,"65":1,"89":1,"104":1,"118":1,"148":1,"152":1,"155":1,"156":1,"157":1,"158":2,"159":2,"160":3,"167":1,"169":1,"174":1,"175":1,"177":3,"178":2,"179":1,"180":1,"182":1,"183":3,"187":1,"188":1,"194":1,"202":1,"203":1,"212":1,"223":1,"228":1,"231":3,"232":1,"234":2,"235":3,"240":1,"261":1,"293":4,"299":2,"302":1,"304":1,"308":3,"310":1,"315":1,"319":2,"321":2,"330":2,"331":3,"332":1,"333":1,"334":1,"337":1,"338":1,"350":1,"362":1,"363":2,"364":1,"365":1,"367":1,"368":1,"396":2,"401":1,"402":1,"413":2,"414":1,"422":1,"447":1,"448":2,"453":2}}],["будете",{"2":{"96":1,"155":1,"181":1,"231":1,"289":1,"325":1,"397":1,"429":1,"491":1}}],["будет",{"0":{"64":1},"2":{"2":1,"3":2,"6":3,"11":2,"12":3,"16":1,"17":2,"22":1,"25":1,"29":5,"34":1,"36":1,"39":1,"40":2,"41":5,"47":1,"59":1,"61":2,"63":1,"64":1,"65":1,"70":1,"73":1,"78":1,"85":1,"89":1,"92":1,"95":1,"96":2,"101":1,"104":1,"106":1,"113":1,"114":1,"121":1,"122":2,"124":2,"125":1,"130":1,"138":1,"142":5,"143":4,"144":2,"145":4,"147":1,"151":2,"153":1,"156":2,"157":3,"158":2,"160":2,"162":2,"163":3,"164":1,"165":1,"166":1,"167":1,"168":1,"177":1,"178":1,"179":5,"180":6,"182":1,"183":2,"184":1,"185":2,"186":3,"187":8,"196":1,"211":1,"212":1,"216":1,"221":2,"222":1,"224":1,"227":2,"228":2,"232":2,"233":4,"234":3,"235":1,"240":2,"260":3,"261":3,"265":1,"268":1,"272":1,"278":1,"291":4,"298":5,"299":2,"300":1,"301":2,"305":1,"306":2,"309":1,"310":1,"311":1,"313":1,"314":5,"318":1,"319":1,"320":1,"321":3,"322":1,"325":1,"327":6,"328":1,"330":1,"331":2,"333":2,"334":3,"335":1,"337":1,"338":2,"339":1,"340":2,"341":1,"342":3,"343":1,"345":3,"351":1,"352":5,"356":2,"357":3,"358":1,"359":2,"360":1,"362":3,"364":1,"367":4,"368":3,"384":1,"396":1,"401":1,"402":4,"404":9,"407":4,"408":1,"409":1,"410":1,"414":1,"415":2,"416":5,"417":1,"420":3,"421":2,"422":4,"426":1,"430":1,"445":1,"446":1,"447":1,"448":2,"452":1,"454":1,"455":2,"462":7,"463":1,"465":1,"466":2,"478":2,"479":3,"483":1,"490":1,"491":2,"537":2,"578":1}}],["будучи",{"2":{"226":1,"232":1,"233":1}}],["будущим",{"2":{"375":1}}],["будущими",{"2":{"186":1}}],["будущих",{"2":{"5":1,"384":1}}],["будущего",{"2":{"540":1}}],["будущее",{"2":{"168":1}}],["будущем",{"2":{"22":1,"89":1,"156":1,"255":1}}],["буду",{"2":{"4":1,"178":1,"436":1}}],["будут",{"2":{"2":1,"4":1,"11":1,"16":2,"44":1,"47":1,"64":1,"95":1,"104":1,"118":1,"129":1,"144":1,"149":1,"157":1,"160":1,"164":1,"168":1,"171":1,"174":1,"177":1,"180":2,"181":1,"183":2,"187":2,"192":1,"199":1,"225":1,"228":1,"242":1,"247":1,"266":1,"291":2,"294":1,"298":1,"299":2,"300":1,"310":1,"311":1,"319":1,"337":2,"339":2,"350":3,"352":2,"353":2,"357":1,"362":1,"364":1,"367":1,"368":1,"376":1,"396":1,"401":2,"402":2,"404":1,"406":1,"408":1,"409":2,"410":3,"415":1,"418":1,"442":1,"445":2,"450":1,"451":1,"452":1,"459":1,"463":1,"465":2,"474":1,"483":1,"535":1}}],["бэджем",{"2":{"114":1}}],["бэдж",{"2":{"114":1}}],["бэджик",{"0":{"114":1},"2":{"114":1}}],["бэджиком",{"2":{"111":1}}],["бэкэнд",{"2":{"422":2}}],["бэке",{"2":{"138":1,"482":2}}],["бэкендов",{"2":{"41":1}}],["бэкендом",{"2":{"41":1,"67":1,"122":3,"125":1,"420":1,"546":1}}],["бэкенду",{"2":{"11":1,"38":1,"122":1,"545":2}}],["бэкенде",{"2":{"10":1,"44":1,"118":1,"138":1,"420":1,"421":1,"491":2}}],["бэкенд",{"0":{"124":1},"2":{"6":2,"11":1,"12":2,"17":1,"41":2,"47":1,"59":1,"70":1,"122":1,"123":5,"124":5,"125":2,"325":1,"415":1,"419":1,"420":1,"421":1,"425":1,"479":1,"482":1,"541":1,"546":1,"570":1}}],["бэкенда",{"2":{"3":1,"13":1,"40":1,"41":1,"59":1,"83":1,"124":1,"125":2,"416":1,"421":1,"438":1,"492":1}}],["бэком",{"2":{"138":1}}],["бэкапов",{"2":{"396":1}}],["бэкапить",{"2":{"396":1}}],["бэкапа",{"2":{"76":1}}],["бэка",{"2":{"123":1,"124":1,"482":1}}],["бэк",{"2":{"122":1,"123":2,"124":1,"430":1}}],["боялся",{"2":{"491":1}}],["бояться",{"2":{"132":1}}],["бо",{"2":{"482":1}}],["боковую",{"2":{"271":1,"402":1,"410":1}}],["боковым",{"2":{"436":1,"438":2,"477":1}}],["боковых",{"2":{"266":1,"267":1}}],["боковые",{"2":{"263":1}}],["боковой",{"2":{"266":1,"268":2,"273":1,"402":1,"407":1,"561":1}}],["бонусная",{"0":{"237":1},"1":{"238":1,"239":1,"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"262":1,"263":1,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1,"270":1,"271":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"286":1,"287":1,"288":1},"2":{"392":1}}],["бонусами",{"2":{"123":1}}],["бойскаута",{"2":{"201":1}}],["бойлерплейтов",{"2":{"541":1}}],["бойлерплейта",{"2":{"482":1}}],["бойлерплейт",{"2":{"44":1}}],["бороться",{"2":{"123":1}}],["борьба",{"2":{"96":1}}],["бота",{"2":{"492":2}}],["ботов",{"2":{"492":1}}],["ботом",{"2":{"96":1}}],["бот",{"0":{"99":1},"2":{"99":1}}],["богатым",{"2":{"56":1}}],["большом",{"2":{"184":1,"233":1}}],["большому",{"2":{"142":1}}],["большого",{"2":{"156":1,"178":1,"351":1,"419":1}}],["большое",{"2":{"130":1,"131":1,"195":1,"200":1,"223":1,"240":1,"247":1,"248":1,"268":2,"279":1,"319":1,"419":2,"423":1}}],["большой",{"2":{"70":1,"160":1,"183":2,"194":1,"202":1,"237":1,"399":1}}],["большая",{"2":{"96":1,"145":1,"156":1,"241":1,"491":1}}],["большую",{"2":{"74":1,"132":1,"184":1,"200":1,"231":1,"233":1,"399":1,"482":1}}],["больших",{"2":{"160":1,"164":2,"304":1,"327":1,"396":1,"433":1,"435":1,"455":1,"476":2,"479":1,"482":3,"550":1}}],["большинства",{"2":{"218":1,"231":1,"271":1}}],["большинстве",{"2":{"156":1,"181":1,"233":2,"291":1,"357":1,"414":1,"415":1,"422":1,"474":1,"492":1,"575":1}}],["большинством",{"2":{"96":1,"457":1}}],["большинство",{"2":{"39":1,"47":1,"124":2,"155":1,"178":1,"199":1,"240":2,"242":2,"268":2,"273":1,"276":1,"364":1,"399":1,"413":1,"415":1,"422":1,"450":1,"491":1}}],["больший",{"2":{"152":1,"357":1}}],["большим",{"2":{"145":1,"159":1,"268":1,"271":1,"422":1,"474":1,"479":2}}],["большими",{"2":{"124":1,"209":1,"257":1,"273":1,"482":1}}],["большие",{"2":{"40":1,"123":1}}],["большей",{"2":{"156":1,"160":1,"191":1,"251":1,"352":1}}],["большее",{"2":{"142":1,"416":1}}],["больше",{"0":{"130":1},"2":{"10":1,"47":1,"96":1,"131":1,"151":1,"157":1,"164":1,"168":1,"169":1,"194":1,"198":1,"202":1,"207":1,"223":1,"233":2,"239":1,"246":2,"247":1,"248":1,"261":1,"264":1,"266":1,"291":3,"298":1,"304":1,"319":2,"327":2,"330":1,"332":1,"361":1,"377":1,"397":1,"408":1,"416":1,"421":1,"430":2,"474":1,"482":2,"483":1,"491":2,"492":2}}],["более",{"2":{"2":2,"13":1,"14":1,"39":1,"41":1,"65":1,"73":1,"108":1,"114":2,"123":1,"125":2,"126":1,"127":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":2,"138":1,"145":1,"156":1,"157":2,"159":1,"160":3,"165":1,"166":1,"174":1,"177":2,"179":2,"180":2,"182":1,"183":1,"184":1,"188":4,"191":1,"194":1,"199":1,"210":1,"212":1,"220":1,"225":1,"226":1,"227":1,"228":2,"231":2,"234":5,"239":2,"242":2,"246":1,"247":2,"251":1,"253":1,"255":1,"268":2,"281":1,"287":1,"291":2,"299":2,"300":2,"308":1,"313":1,"316":1,"318":1,"319":3,"330":2,"331":1,"336":1,"354":2,"355":1,"357":1,"358":1,"359":1,"360":1,"362":1,"364":1,"371":2,"375":2,"396":1,"399":4,"407":2,"408":2,"414":2,"421":2,"423":1,"426":1,"429":1,"436":2,"438":1,"441":1,"442":3,"445":2,"448":2,"452":1,"465":1,"466":1,"474":2,"476":1,"478":1,"482":3,"483":2,"491":2,"561":1}}],["бета",{"2":{"467":1}}],["берутся",{"2":{"515":1}}],["берут",{"2":{"436":1,"476":1}}],["берет",{"2":{"400":1}}],["берем",{"2":{"321":1}}],["берешь",{"2":{"96":1}}],["бешено",{"2":{"430":1}}],["беглый",{"2":{"272":1}}],["бегло",{"2":{"158":1}}],["бене",{"2":{"248":1}}],["бен",{"2":{"248":1}}],["бена",{"0":{"248":1}}],["белое",{"2":{"241":1}}],["белого",{"2":{"241":1}}],["бесконечном",{"2":{"483":1}}],["бесконечного",{"2":{"260":3}}],["бесконечна",{"2":{"260":1}}],["бесконечный",{"0":{"260":1},"1":{"261":1},"2":{"260":2,"261":1}}],["бесконечными",{"2":{"246":1}}],["бесконечных",{"2":{"96":1}}],["бесполезное",{"2":{"578":1}}],["бесполезно",{"2":{"491":1}}],["бесполезными",{"2":{"491":1}}],["беспорядок",{"2":{"436":1,"476":1}}],["беспокойство",{"2":{"258":1}}],["беспокоиться",{"2":{"180":1,"229":1,"345":1,"462":1}}],["беспарольными",{"2":{"421":1}}],["беспарольный",{"2":{"420":1}}],["беспарольная",{"0":{"420":1},"2":{"420":1}}],["бесплатными",{"2":{"425":1}}],["бесплатных",{"2":{"279":1,"285":1,"419":1}}],["бесплатный",{"2":{"152":1,"178":1,"182":1,"183":1,"292":1}}],["бесплатные",{"2":{"124":3,"425":1,"491":2}}],["бесплатная",{"2":{"98":1,"152":1,"178":2}}],["бесплатное",{"2":{"285":1}}],["бесплатно",{"2":{"178":2,"232":1,"491":1}}],["бесплатной",{"2":{"157":1}}],["бесплатного",{"2":{"40":1,"153":1,"278":1}}],["бесплатность",{"2":{"39":1}}],["безвозвратно",{"2":{"470":1,"474":1}}],["безымянном",{"2":{"362":1}}],["безопасен",{"2":{"249":1}}],["безопасного",{"2":{"416":1}}],["безопасной",{"2":{"357":1}}],["безопасности",{"2":{"59":1,"73":1,"123":2,"141":1,"152":3,"198":1,"340":1,"345":1,"370":1,"416":1,"420":1,"421":2,"423":1,"424":1,"483":1}}],["безопасностью",{"2":{"199":1}}],["безопасность",{"0":{"59":1},"2":{"68":1,"74":1,"123":3,"415":1,"420":1}}],["безопасные",{"2":{"291":1}}],["безопасны",{"2":{"231":1}}],["безопасным",{"2":{"152":1,"399":1,"421":1}}],["безопасную",{"2":{"151":1}}],["безусловно",{"2":{"234":1}}],["безболезненного",{"2":{"23":1}}],["без",{"2":{"12":1,"23":2,"62":1,"96":1,"124":2,"132":1,"142":1,"156":1,"178":3,"182":1,"184":1,"187":1,"194":1,"213":1,"221":1,"228":1,"231":1,"233":1,"239":1,"242":1,"248":1,"258":1,"279":1,"290":1,"294":1,"298":1,"299":1,"300":1,"319":1,"369":1,"394":1,"399":2,"400":1,"404":1,"410":1,"416":3,"418":1,"428":1,"430":1,"437":1,"438":2,"465":1,"466":1,"478":1,"479":1,"482":2,"490":1,"491":2,"492":1,"535":1,"538":2,"541":1,"545":1,"576":1,"582":1,"586":1,"587":1}}],["брейкпойнт",{"2":{"543":1}}],["бремя",{"2":{"300":1,"444":1}}],["брендом",{"2":{"249":1}}],["бренда",{"2":{"239":1,"590":1}}],["бренды",{"2":{"16":1}}],["брали",{"2":{"396":1}}],["брату",{"2":{"308":1}}],["братья",{"2":{"352":1}}],["братьями",{"2":{"304":1,"407":1}}],["брать",{"2":{"299":1,"482":1}}],["браузеру",{"2":{"293":1,"327":1,"357":1,"429":1}}],["браузеры",{"2":{"132":2,"137":1,"211":1,"251":1,"319":3,"327":1,"425":1,"474":1,"492":1}}],["браузерные",{"2":{"289":1,"399":1}}],["браузерных",{"2":{"132":1,"325":1,"422":1}}],["браузерными",{"2":{"113":1}}],["браузере",{"2":{"130":1,"132":1,"157":1,"158":1,"179":4,"187":1,"231":1,"273":1,"294":1,"297":2,"298":1,"299":1,"301":1,"319":3,"327":1,"340":1,"399":1,"402":2,"404":1,"416":1,"422":1,"426":1,"446":1,"450":1,"456":1,"492":3,"536":1,"588":1}}],["браузером",{"2":{"123":1,"346":1,"396":1,"492":1}}],["браузеров",{"2":{"89":1,"132":1,"414":1,"422":1}}],["браузер",{"2":{"123":1,"125":3,"158":4,"159":1,"178":1,"184":1,"233":1,"291":1,"319":2,"327":3,"357":1,"370":1,"377":1,"399":1,"479":1}}],["браузерах",{"2":{"132":1,"179":1,"301":1,"318":1,"319":1}}],["браузерами",{"0":{"132":1},"2":{"89":1,"126":1,"132":2,"155":1,"251":1,"260":1,"291":1,"304":1,"323":1,"481":1}}],["браузера",{"0":{"319":1},"2":{"50":1,"125":2,"155":1,"158":1,"178":1,"213":1,"231":1,"232":2,"256":1,"264":1,"289":1,"291":2,"294":2,"298":1,"299":1,"301":1,"319":2,"322":1,"325":1,"327":1,"413":1,"422":1,"450":1,"451":1,"452":1,"453":1,"483":1,"492":1,"573":1,"587":1}}],["бросают",{"2":{"272":1}}],["бригаду",{"2":{"26":1}}],["бинарные",{"2":{"463":1}}],["битная",{"2":{"459":1}}],["билдом",{"2":{"479":1}}],["билдер",{"0":{"539":1},"1":{"540":1,"541":1},"2":{"540":1}}],["билде",{"2":{"426":1}}],["билда",{"2":{"76":1,"394":1,"396":2,"425":1,"429":1,"508":1,"542":1,"570":1,"579":1}}],["библиотекой",{"2":{"96":1,"176":1,"181":1,"478":1,"484":1}}],["библиотеке",{"2":{"96":1}}],["библиотеках",{"2":{"251":1,"314":1}}],["библиотеками",{"2":{"541":1}}],["библиотекам",{"2":{"208":1}}],["библиотека",{"0":{"96":1},"2":{"96":1,"156":4,"207":1,"337":1,"340":2,"414":2,"474":1,"478":4,"484":1,"506":1,"515":1,"575":1}}],["библиотеку",{"0":{"470":1},"2":{"23":1,"56":2,"96":1,"122":1,"156":2,"181":1,"299":1,"337":1,"340":1,"376":1,"414":3,"422":1,"478":1,"481":1,"483":1,"485":1,"490":1,"538":1}}],["библиотеки",{"0":{"490":1},"2":{"23":1,"96":1,"155":1,"156":3,"158":1,"159":1,"180":1,"181":1,"183":1,"187":1,"189":1,"190":2,"231":2,"291":1,"325":1,"337":1,"340":1,"341":1,"422":1,"429":1,"435":1,"436":1,"445":2,"452":1,"471":1,"476":1,"482":1,"485":1,"490":4,"538":2,"588":1}}],["библиотек",{"0":{"485":1},"2":{"23":2,"96":1,"155":1,"156":2,"175":1,"181":4,"185":1,"189":1,"197":1,"231":1,"319":3,"337":2,"375":1,"418":1,"419":1,"422":1,"428":1,"470":1,"487":1,"490":7,"538":1,"542":1,"572":1}}],["бизнесом",{"2":{"541":1}}],["бизнеса",{"2":{"73":2}}],["бизнес",{"0":{"8":1,"73":1},"1":{"9":1,"10":1,"11":1,"12":1,"13":1,"14":1},"2":{"6":1,"14":1,"16":1,"72":1,"74":1,"93":1,"96":1,"124":1,"188":1,"199":1,"314":1,"327":1,"331":3,"363":1,"369":3,"435":2,"436":1,"445":1,"476":3,"478":5,"482":1,"540":1,"541":1,"542":1,"545":1}}],["бд",{"2":{"17":2,"39":1,"44":1,"56":1,"478":1}}],["бывают",{"0":{"476":1},"2":{"96":1,"196":1,"198":1,"289":1,"431":1,"479":1,"483":1}}],["бывает",{"2":{"50":1,"138":1,"196":1,"202":1,"262":1,"275":1,"478":1}}],["быстрей",{"2":{"429":1,"430":1,"482":1,"487":1}}],["быстрее",{"2":{"132":1,"291":1,"429":1}}],["быстр",{"2":{"337":1}}],["быстрая",{"2":{"260":1,"319":1,"337":1,"399":1}}],["быстрые",{"2":{"291":1}}],["быстрых",{"2":{"248":1}}],["быстрым",{"2":{"179":1,"268":1,"399":1}}],["быстрый",{"2":{"48":1,"145":2,"159":1,"327":1,"430":1}}],["быстрой",{"2":{"256":1,"327":1}}],["быстро",{"2":{"137":2,"156":1,"176":1,"179":1,"196":2,"198":1,"248":1,"260":1,"455":1,"457":1,"483":1,"490":1,"541":3,"542":1}}],["быстрого",{"2":{"17":1,"23":1,"479":1}}],["была",{"2":{"95":2,"129":1,"132":1,"134":1,"180":2,"182":1,"187":1,"227":1,"233":1,"241":1,"366":1,"397":1,"465":1,"474":1,"490":1,"492":1}}],["были",{"2":{"39":2,"62":1,"122":1,"133":1,"135":1,"155":3,"240":1,"245":1,"257":1,"298":1,"318":1,"353":1,"357":1,"368":1,"410":1,"413":1,"419":1,"448":1,"449":1}}],["было",{"2":{"9":1,"10":2,"12":2,"47":2,"89":1,"96":1,"140":1,"142":1,"168":1,"194":1,"219":1,"226":1,"227":1,"228":1,"232":4,"235":1,"237":1,"255":1,"259":1,"298":1,"313":1,"360":1,"399":2,"408":1,"421":1,"422":1,"435":1,"438":1,"447":1,"450":2,"453":1,"455":1,"456":1,"457":1,"458":1,"463":1,"465":2,"466":1,"474":2,"476":1,"478":1,"481":1,"482":3,"538":1}}],["был",{"2":{"9":1,"12":1,"62":1,"96":4,"98":1,"112":1,"132":1,"134":1,"142":1,"156":1,"174":1,"179":1,"180":1,"184":1,"200":1,"211":1,"215":1,"277":1,"308":1,"321":1,"336":1,"338":1,"410":1,"420":1,"425":2,"458":1,"465":1,"478":2,"492":1,"562":1}}],["бы",{"2":{"9":2,"12":3,"22":1,"83":1,"96":3,"114":1,"123":1,"139":2,"142":1,"149":1,"153":1,"178":2,"188":1,"194":1,"199":3,"215":2,"218":3,"226":1,"227":3,"231":1,"232":4,"242":2,"258":1,"286":1,"296":1,"314":1,"318":1,"320":1,"327":1,"328":1,"336":1,"348":1,"364":1,"370":1,"372":1,"400":1,"413":1,"414":1,"421":1,"442":1,"446":1,"448":1,"450":3,"453":1,"455":1,"466":1,"478":1,"491":2}}],["быть",{"0":{"242":1},"2":{"2":2,"3":1,"17":1,"44":1,"47":1,"48":1,"67":2,"72":1,"85":1,"89":1,"96":2,"104":1,"105":1,"107":1,"114":1,"118":1,"123":1,"126":1,"129":1,"130":2,"131":1,"132":2,"142":3,"152":1,"156":3,"158":1,"159":1,"160":3,"163":1,"164":1,"167":1,"168":3,"183":1,"184":1,"194":3,"197":2,"199":1,"200":1,"212":1,"220":1,"224":1,"225":2,"226":2,"228":2,"232":1,"234":1,"235":1,"241":1,"244":1,"246":1,"249":2,"253":1,"255":1,"256":1,"257":2,"258":1,"262":1,"268":2,"269":1,"275":1,"286":1,"289":1,"290":1,"293":4,"297":1,"298":6,"299":1,"305":1,"309":1,"313":2,"315":1,"316":1,"319":4,"320":1,"321":1,"327":5,"328":4,"331":1,"338":1,"343":2,"345":1,"348":1,"352":1,"354":1,"357":1,"358":2,"359":1,"360":3,"364":1,"369":2,"375":1,"396":4,"399":1,"401":1,"410":1,"415":1,"416":3,"420":1,"421":1,"422":1,"423":1,"426":1,"436":2,"438":4,"444":2,"445":1,"447":3,"448":1,"454":1,"457":1,"460":1,"465":1,"474":1,"476":1,"477":1,"479":1,"486":1,"491":3,"492":3,"502":1,"508":1,"515":2,"531":1,"541":1,"542":1,"587":1}}],["блестящих",{"2":{"380":1}}],["близко",{"2":{"244":1,"492":1}}],["близка",{"2":{"231":1}}],["близость",{"0":{"244":1}}],["близости",{"2":{"243":1,"244":1}}],["ближе",{"2":{"160":1}}],["блогов",{"2":{"399":2}}],["блог",{"2":{"123":1,"540":1,"541":1,"542":1}}],["блокчейне",{"2":{"422":1}}],["блокчейном",{"2":{"422":3}}],["блокчейнов",{"2":{"399":1,"422":1}}],["блокчейнами",{"2":{"422":1}}],["блокчейна",{"2":{"422":2}}],["блокчейну",{"2":{"422":2}}],["блокчейны",{"2":{"422":2}}],["блокчейн",{"2":{"422":3}}],["блоков",{"2":{"187":1,"542":1}}],["блоком",{"2":{"149":1}}],["блока",{"2":{"89":1,"187":2,"410":1,"430":1,"444":1,"449":1}}],["блок",{"2":{"89":1,"234":1}}],["блоке",{"2":{"22":1,"187":1,"421":1}}],["блокирующими",{"2":{"327":1}}],["блокируют",{"2":{"232":1}}],["блокировка",{"2":{"319":1}}],["блокировать",{"2":{"319":1}}],["блоки",{"2":{"4":1,"158":1,"355":1,"435":1,"476":1,"542":1}}],["благоприятно",{"2":{"483":1}}],["благополучия",{"2":{"380":1}}],["благодарю",{"2":{"380":1}}],["благодаря",{"2":{"142":1,"148":1,"187":1,"231":1,"248":1,"250":1,"251":1,"266":1,"268":1,"339":1,"359":1,"399":1,"492":1}}],["благо",{"2":{"111":1}}],["благозвучно",{"2":{"2":1}}],["байт",{"2":{"319":1}}],["бара",{"2":{"258":1}}],["бары",{"2":{"258":1}}],["балансировщика",{"2":{"148":1}}],["багов",{"2":{"444":2}}],["баг",{"2":{"96":1}}],["баги",{"2":{"2":1,"483":1}}],["банк",{"2":{"421":1}}],["баннер",{"2":{"298":2}}],["баннеры",{"2":{"4":1}}],["бандла",{"2":{"426":1,"484":1}}],["бандл",{"2":{"124":1,"426":1,"474":1,"490":1,"579":1}}],["бандлер",{"2":{"211":1}}],["бандлеры",{"2":{"211":1}}],["бандле",{"2":{"59":1,"429":1}}],["базой",{"2":{"213":1,"325":1,"339":1,"466":1}}],["базовая",{"2":{"306":1}}],["базовую",{"2":{"181":1,"222":1,"483":1}}],["базовой",{"2":{"251":1,"294":1,"352":1,"384":1,"436":1,"476":1}}],["базового",{"0":{"312":1},"1":{"313":1},"2":{"177":1,"185":1,"304":1,"311":1,"452":1}}],["базовом",{"2":{"156":1,"306":1,"314":1,"414":1,"491":1}}],["базовое",{"2":{"155":1}}],["базовые",{"2":{"364":1,"376":1,"433":1,"446":1,"476":1}}],["базовым",{"2":{"180":1,"335":1,"446":1}}],["базовый",{"0":{"446":1},"2":{"143":1,"144":1,"179":1,"300":1,"312":1,"436":1,"476":1}}],["базовых",{"2":{"88":1,"158":1,"178":1,"299":1,"359":1,"375":1}}],["базе",{"0":{"42":1},"1":{"43":1,"44":1,"45":1,"46":1,"47":1,"48":1},"2":{"40":1,"59":1,"83":1,"124":3,"132":2,"218":1,"231":1,"336":1,"346":1,"415":2,"478":1}}],["базы",{"2":{"17":2,"39":1,"124":1,"272":1,"319":3,"337":2,"338":1,"339":1,"410":1,"415":1,"463":1}}],["базу",{"2":{"17":2,"40":2,"56":1,"59":1,"124":1,"291":1,"319":2,"337":1,"339":1}}],["баз",{"0":{"17":1},"1":{"18":1,"19":1},"2":{"17":1,"48":2,"319":1,"445":1}}],["базам",{"2":{"430":1}}],["базами",{"2":{"325":1,"444":1}}],["базах",{"2":{"43":1,"44":1,"47":1}}],["база",{"2":{"6":2,"41":1,"70":1,"291":1,"319":1,"325":1,"333":1,"337":3,"369":1,"430":1,"478":1}}],["system",{"2":{"457":2}}],["synctex",{"2":{"430":1}}],["syncref",{"2":{"96":1}}],["sftp",{"2":{"430":1}}],["sfc",{"2":{"89":2,"159":3,"167":1,"168":1,"180":1,"430":2,"450":1,"482":1}}],["s3",{"2":{"425":1}}],["smoothscrolling",{"2":{"430":1}}],["smart",{"2":{"422":1}}],["sms",{"2":{"421":2}}],["smith",{"2":{"130":1}}],["svelte",{"2":{"399":1,"430":3,"482":2}}],["svgo",{"2":{"430":10}}],["svgresources",{"2":{"428":4}}],["svg",{"2":{"180":1,"300":1,"427":2,"428":3,"429":1,"430":2,"547":1}}],["snickerbockers",{"2":{"396":2}}],["snake",{"2":{"44":1,"171":1}}],["slidingheader",{"0":{"568":1}}],["slider",{"2":{"472":1}}],["sliced",{"0":{"435":1},"2":{"435":1,"476":2}}],["sln",{"2":{"463":1}}],["slots",{"2":{"362":1}}],["slot=",{"2":{"362":4}}],["slot",{"2":{"362":8}}],["slot>",{"2":{"362":5,"368":2}}],["slug",{"2":{"106":1}}],["square",{"2":{"221":4}}],["sql",{"2":{"17":3,"39":1,"59":1,"138":1,"337":1,"396":1,"430":1,"478":2,"491":1}}],["skeuomorphism",{"2":{"181":1}}],["s",{"0":{"152":1},"2":{"139":1,"151":1,"152":4,"153":1,"246":1,"292":1,"391":1,"396":1,"426":1,"429":1,"478":1,"545":1}}],["ssg",{"0":{"492":1},"2":{"492":3}}],["ssd",{"2":{"430":1}}],["ss06",{"2":{"430":1}}],["ss03",{"2":{"430":1}}],["ss02",{"2":{"430":1}}],["ss01",{"2":{"430":1}}],["ssl",{"2":{"292":1,"415":1,"425":2}}],["ssh",{"2":{"151":1,"152":2,"396":14,"430":2}}],["sso",{"2":{"123":2}}],["ssr",{"0":{"492":1},"2":{"96":1,"404":1,"430":1,"463":1,"478":2,"492":9}}],["swagger",{"2":{"491":1}}],["swiper",{"2":{"472":1}}],["switch",{"2":{"221":1,"225":1,"227":1,"252":1,"369":2}}],["sw",{"2":{"121":2,"463":1,"492":1,"501":1}}],["scs",{"2":{"457":1,"458":2}}],["scss",{"0":{"89":1},"2":{"23":1,"89":5,"427":1,"430":1,"434":1,"435":1,"476":2,"538":1,"543":2,"591":1}}],["sc",{"2":{"457":1}}],["scope",{"2":{"417":2,"587":1}}],["scoped",{"2":{"159":2}}],["scoped>",{"2":{"159":1,"186":1,"229":1,"259":1,"318":1,"427":1}}],["scms",{"2":{"457":1}}],["scmitem",{"2":{"430":1}}],["scmgroupinline",{"2":{"430":1}}],["scmgroup",{"2":{"430":1}}],["scm",{"2":{"178":1,"430":2}}],["scaffolding",{"2":{"121":1,"180":1,"535":1}}],["scrollbehavior",{"2":{"404":1}}],["scrolly",{"2":{"363":2}}],["scroll",{"2":{"261":6,"363":2,"474":1}}],["scroller",{"2":{"260":1}}],["screenwidthfactor",{"2":{"543":1}}],["screenshots",{"2":{"296":1}}],["screen",{"0":{"590":1},"2":{"121":2,"271":1,"535":1,"540":2,"542":1,"549":1,"570":1}}],["scripts",{"2":{"180":1,"396":1,"447":2}}],["script>",{"2":{"112":1,"130":1,"157":3,"159":1,"160":5,"168":1,"186":1,"198":1,"229":1,"230":1,"259":1,"261":1,"307":1,"308":1,"311":1,"313":1,"318":1,"322":1,"338":1,"343":1,"364":1,"368":1,"407":1,"427":1,"439":1,"511":1,"513":2,"520":1,"524":1,"528":1,"530":2,"531":4,"543":1,"547":1,"563":3,"577":1}}],["script",{"0":{"160":1},"2":{"112":1,"122":4,"129":1,"130":1,"132":1,"137":1,"157":3,"159":2,"160":4,"168":1,"180":1,"181":3,"185":1,"186":3,"187":2,"198":2,"229":1,"230":1,"259":1,"261":1,"298":1,"307":1,"308":1,"311":1,"313":1,"316":1,"318":1,"322":1,"338":1,"343":1,"356":1,"358":2,"359":1,"363":1,"364":1,"368":2,"396":2,"407":3,"413":1,"427":1,"430":1,"439":1,"465":1,"474":1,"511":1,"513":2,"520":1,"524":1,"528":1,"530":2,"531":2,"538":1,"543":1,"547":1,"563":1,"577":1}}],["src=",{"2":{"157":1,"162":1,"426":3,"427":1,"513":2,"530":2,"531":2,"563":1}}],["src",{"0":{"144":1,"261":1,"338":1,"339":1,"340":1,"343":1,"404":1,"405":1,"410":1,"448":1,"452":1,"453":1},"2":{"104":1,"112":1,"144":1,"162":1,"180":2,"184":2,"186":1,"294":1,"296":1,"300":3,"366":1,"368":5,"369":2,"401":1,"407":1,"426":1,"429":2,"432":1,"433":1,"434":1,"435":1,"446":1,"447":5,"454":1,"476":4,"549":1,"577":1}}],["srs",{"2":{"9":1,"74":1}}],["sans",{"2":{"506":1,"591":1}}],["savedposition",{"2":{"404":1}}],["savenote",{"2":{"338":3}}],["save",{"2":{"300":1,"430":1}}],["saveprompt",{"2":{"298":2}}],["safe",{"2":{"96":1}}],["sass",{"2":{"89":1,"430":1}}],["sb",{"2":{"83":3,"93":1}}],["sdlc",{"2":{"72":1}}],["sdk",{"0":{"53":1},"1":{"54":1,"55":1},"2":{"53":1,"422":1}}],["sonner",{"2":{"473":1}}],["social",{"2":{"426":1}}],["sockets",{"2":{"415":1}}],["solvery",{"2":{"491":1}}],["solana",{"2":{"422":1}}],["solid",{"2":{"183":2,"187":3,"259":1,"543":1}}],["software",{"0":{"68":1},"2":{"72":1,"74":1}}],["somearr",{"2":{"482":4}}],["someimage",{"2":{"426":1}}],["someid",{"2":{"261":1}}],["somecomponent",{"0":{"441":1},"2":{"363":1}}],["somefunc",{"2":{"124":1}}],["somevalue",{"2":{"55":2,"56":2}}],["some",{"2":{"55":2,"56":2,"357":1,"358":2,"362":2}}],["source",{"0":{"454":1,"457":1},"2":{"12":1,"39":1,"62":1,"231":1,"396":1,"430":3,"447":1,"457":3,"469":1,"476":1,"533":1,"561":1}}],["seed",{"2":{"546":1}}],["segoe",{"2":{"506":1}}],["serif",{"2":{"506":1,"591":1}}],["series",{"2":{"448":3}}],["servers",{"2":{"377":1}}],["server",{"0":{"345":1},"2":{"125":3,"145":1,"149":1,"345":1,"396":3,"415":1,"430":5,"492":1}}],["serviceworker",{"2":{"299":2}}],["services",{"0":{"310":1,"321":1,"334":1,"336":1,"339":1,"341":1},"2":{"122":1,"311":1,"313":1,"322":1,"331":1,"335":4,"336":1,"338":1,"340":2,"341":1,"342":2,"343":1,"369":1,"434":3,"446":1,"448":1,"476":3,"545":1}}],["service",{"0":{"299":1,"313":1,"588":1},"2":{"39":1,"70":1,"121":2,"124":1,"174":1,"289":1,"291":1,"298":1,"299":5,"300":1,"303":1,"321":1,"334":8,"335":3,"336":2,"339":2,"341":2,"360":2,"416":1,"430":1,"492":3,"501":1,"535":1,"540":1,"549":1,"570":1,"586":1,"588":2}}],["sentry",{"2":{"430":2}}],["sendtoserver",{"2":{"418":1,"419":2}}],["senddata",{"2":{"343":2}}],["send",{"2":{"336":1,"343":3}}],["sendrequest",{"2":{"335":4}}],["sendmessage",{"2":{"311":2}}],["semi",{"2":{"430":1}}],["separate",{"2":{"430":1}}],["separation",{"0":{"194":1},"2":{"191":1}}],["searchtests",{"2":{"434":1,"476":1}}],["searchstore",{"2":{"434":1,"476":1}}],["searchinput",{"2":{"434":1,"476":1}}],["search",{"2":{"407":1,"430":1,"434":1,"476":1}}],["session",{"0":{"322":1}}],["sessionstorage",{"0":{"321":1},"2":{"319":6,"320":2,"321":4,"322":3,"324":2}}],["sessionstore",{"2":{"319":1}}],["self",{"2":{"299":1,"329":4,"330":1,"335":2}}],["selected",{"2":{"338":4,"410":1}}],["selected=ref",{"2":{"338":1}}],["select",{"2":{"55":2,"59":1,"121":5,"166":1,"269":1,"490":2,"535":5}}],["select=id",{"2":{"51":2,"83":3,"93":1}}],["select=",{"2":{"51":1,"56":1}}],["second",{"2":{"568":1}}],["seconds",{"2":{"420":3}}],["seconds=ref",{"2":{"420":1}}],["security",{"2":{"430":1}}],["secure",{"2":{"151":1,"152":1,"415":1}}],["section>",{"2":{"307":2,"338":6,"343":4,"362":2}}],["section",{"2":{"271":2,"488":1}}],["secrets",{"2":{"396":2}}],["secret",{"2":{"58":1,"416":3}}],["setlocale",{"2":{"577":2}}],["setlogoutcallback",{"2":{"122":1}}],["setoptions",{"2":{"546":1}}],["setsomearr",{"2":{"482":1}}],["setvalue",{"2":{"453":2}}],["setting",{"2":{"396":1,"430":1}}],["settings",{"2":{"396":1,"430":1,"561":1}}],["settimeout",{"2":{"329":2,"336":1,"483":1}}],["settokencallback",{"2":{"122":1}}],["setimmediate",{"2":{"233":3,"234":1}}],["setitem",{"2":{"113":1,"319":2,"321":1,"396":1}}],["setdbmanager",{"2":{"218":1}}],["setbaseurl",{"2":{"122":1}}],["setup>",{"2":{"130":1,"159":1,"160":1,"168":1,"186":1,"198":1,"229":1,"230":1,"259":1,"261":1,"307":1,"308":1,"311":1,"313":1,"318":1,"322":1,"338":1,"343":1,"364":1,"368":1,"407":1,"427":1,"439":1,"511":1,"524":1,"528":1}}],["setup",{"0":{"160":1},"2":{"112":1,"122":4,"129":1,"132":1,"137":1,"159":1,"160":5,"185":1,"198":1,"316":1,"358":2,"359":1,"363":1,"368":1,"396":4,"407":1,"413":1,"430":1,"474":1,"478":1,"538":1,"543":1,"547":1,"577":1}}],["set",{"2":{"112":2,"113":2,"122":1,"227":2,"228":1,"321":2,"428":2,"440":1,"466":1}}],["seo",{"0":{"492":1},"2":{"70":1,"106":1,"492":1}}],["sponsors",{"2":{"430":1}}],["sp",{"2":{"416":1}}],["spec",{"2":{"430":1,"434":2,"435":1,"447":1,"476":3}}],["specs",{"2":{"416":1}}],["specific",{"2":{"505":1}}],["specification",{"2":{"74":1}}],["special",{"2":{"168":1,"364":1}}],["spinnercomponent",{"2":{"357":2}}],["spinner",{"0":{"259":1},"2":{"259":2}}],["splide",{"2":{"472":1}}],["splice",{"2":{"223":1}}],["splashscreen",{"2":{"535":1}}],["splash",{"0":{"590":1},"2":{"121":2,"535":1,"540":2,"542":1,"549":1,"570":1,"590":1}}],["spree",{"2":{"41":1}}],["span>post",{"2":{"343":1}}],["span>get",{"2":{"343":1}}],["span>",{"2":{"112":1,"165":1,"187":2,"259":1,"307":2,"308":1,"343":2}}],["span",{"2":{"112":1,"165":2,"187":4,"253":1,"259":1,"308":1,"505":1}}],["spa",{"0":{"144":1,"291":1,"292":1,"399":1,"492":1},"1":{"293":1,"294":1,"295":1,"296":1,"297":1,"298":1},"2":{"6":1,"123":1,"139":2,"143":1,"289":3,"291":5,"296":1,"298":1,"299":3,"302":1,"303":1,"371":1,"387":1,"397":3,"399":12,"400":1,"413":1,"414":1,"415":3,"416":2,"419":1,"421":4,"422":2,"423":1,"424":3,"436":1,"476":1,"492":11,"542":1}}],["suo",{"2":{"463":1}}],["sum",{"2":{"430":2}}],["summary",{"2":{"83":4,"92":2,"93":1}}],["suggestselection",{"2":{"430":1}}],["sudo",{"2":{"396":3,"460":4,"461":1}}],["success=false",{"2":{"335":1}}],["success",{"2":{"334":3,"335":2}}],["subversion",{"2":{"457":1}}],["substring",{"2":{"428":2}}],["submit",{"2":{"420":1}}],["submodules",{"2":{"396":4,"436":1}}],["sub",{"2":{"222":1,"226":1,"407":2,"408":1,"416":2}}],["sublime",{"2":{"178":1}}],["subtitle",{"2":{"17":1,"18":1}}],["sue",{"2":{"130":1}}],["surname",{"2":{"130":6}}],["suspense",{"2":{"122":1,"168":1,"438":1}}],["supabase",{"0":{"40":1,"52":1,"53":1,"56":1,"57":1,"82":1},"1":{"53":1,"54":2,"55":2,"56":1,"58":1,"59":1,"83":1},"2":{"39":2,"40":2,"41":4,"51":4,"53":2,"54":2,"55":8,"56":10,"58":1,"59":2,"124":2,"491":1}}],["side",{"2":{"492":1}}],["sidebarlayout",{"2":{"438":2}}],["sidebar>",{"2":{"362":1,"407":2}}],["sidebars",{"2":{"263":1}}],["sidebar",{"0":{"30":1,"108":1},"2":{"28":1,"362":2,"407":8,"410":2}}],["siblings",{"2":{"304":1}}],["size",{"2":{"427":5,"440":1,"505":3}}],["sizes",{"2":{"294":1,"296":1,"300":3}}],["size=",{"2":{"114":1,"426":1}}],["siri",{"2":{"239":1}}],["sites",{"0":{"149":1},"2":{"148":1}}],["site",{"2":{"125":3,"396":14,"492":1}}],["signinuser",{"2":{"420":2}}],["signature",{"2":{"416":2}}],["sign",{"2":{"123":1}}],["singlequote",{"2":{"430":1}}],["singleclick",{"2":{"430":1}}],["singleton",{"0":{"208":1,"309":1},"1":{"209":1,"210":1,"211":1,"212":1,"310":1,"311":1},"2":{"112":1,"191":1,"204":1,"211":2,"212":6,"218":1,"223":2,"236":1,"304":1,"309":1,"312":1}}],["single",{"0":{"196":1},"2":{"55":1,"123":1,"191":1,"492":1}}],["simplenavbar",{"0":{"584":1}}],["simpleheader",{"0":{"565":1}}],["simplefooter",{"0":{"555":1}}],["simpledrawer",{"0":{"552":1},"2":{"535":2,"553":1}}],["simpledialog",{"2":{"430":1}}],["simplestate",{"0":{"313":1},"2":{"313":1}}],["simple",{"0":{"200":1},"2":{"2":1,"191":1,"313":1,"430":4}}],["shims",{"2":{"430":1}}],["shift+f12",{"2":{"89":1}}],["shrinkwrap",{"2":{"430":2}}],["shnpx",{"2":{"429":1}}],["shpnpm",{"2":{"429":1}}],["shortcuts",{"2":{"296":1}}],["short",{"0":{"200":1},"2":{"294":1,"296":1,"300":1,"587":1}}],["showdocumentation",{"2":{"430":1}}],["showsuggestionsassnippets",{"2":{"430":1}}],["showmodal",{"2":{"369":1}}],["showmessage",{"2":{"311":3}}],["show=",{"2":{"163":1,"187":2,"298":2}}],["show",{"0":{"163":1},"2":{"163":1,"164":3,"168":1,"246":1,"364":1,"368":6,"420":2}}],["shoppingcart",{"2":{"95":1,"96":2}}],["shopping",{"2":{"12":1}}],["shell",{"2":{"151":1,"430":1,"436":1,"477":1}}],["sheet",{"0":{"493":1},"1":{"494":1,"495":1,"496":1,"497":1,"498":1,"499":1},"2":{"17":1,"494":1,"495":1,"496":1,"497":4}}],["shallowref",{"2":{"474":2}}],["shaming",{"0":{"284":1}}],["shape2",{"2":{"221":2}}],["shape1",{"2":{"221":2}}],["sha",{"2":{"156":1}}],["shared",{"2":{"145":1,"435":2,"476":2}}],["sharing",{"2":{"125":1,"345":1}}],["shaking",{"2":{"96":1,"428":1,"484":1}}],["sh$",{"2":{"120":1,"121":2,"144":1,"179":3,"187":1,"300":1,"337":1,"340":1,"344":2,"401":1,"446":2,"447":2,"448":1,"451":2,"455":1,"456":2,"460":2,"462":4,"463":2,"466":4,"535":1,"536":1,"537":1,"540":1}}],["sh",{"2":{"54":1,"309":1,"314":1,"430":2,"520":2}}],["shcurl",{"2":{"51":1,"56":1}}],["stylus",{"2":{"474":1}}],["stylelint",{"2":{"430":4}}],["styleci",{"2":{"430":2}}],["style=",{"2":{"230":1,"427":2}}],["stylesheet",{"2":{"182":1,"183":3,"513":1,"520":2,"530":1,"531":1}}],["styles",{"2":{"180":1,"182":1,"405":2,"432":1,"433":1,"434":1,"435":1,"476":4}}],["style>",{"2":{"159":1,"186":1,"229":1,"259":1,"318":1,"427":1,"506":2,"530":2,"531":2}}],["style",{"2":{"74":1,"159":2,"186":2,"187":1,"229":1,"259":1,"318":1,"427":1,"430":1,"491":2,"511":1,"520":1,"524":1,"528":1}}],["stoploading",{"2":{"440":2,"441":2}}],["story",{"2":{"352":1,"430":1}}],["storage",{"0":{"322":1},"2":{"322":1}}],["stores",{"0":{"316":1},"2":{"318":1,"339":1}}],["store",{"0":{"315":1},"2":{"14":1,"143":1,"178":1,"291":4,"304":1,"432":1,"433":1,"434":4,"435":1,"463":1,"476":7,"478":4}}],["storefront",{"2":{"10":1,"41":1,"541":1}}],["steps",{"2":{"396":2}}],["stickyscroll",{"2":{"430":1}}],["sticky",{"2":{"263":1,"430":1,"565":1,"566":1,"567":1}}],["stage",{"2":{"462":1,"463":1,"465":2}}],["staged",{"2":{"430":2}}],["staging",{"2":{"396":5,"463":1}}],["stackblitz",{"2":{"430":3}}],["stackable",{"2":{"228":1}}],["stash",{"2":{"430":3}}],["static",{"2":{"404":1,"426":1,"492":1}}],["status>200",{"2":{"420":1}}],["status>=200",{"2":{"341":2}}],["status",{"2":{"341":2,"369":2,"415":1,"420":1,"463":1}}],["states",{"2":{"408":1,"410":2}}],["stateful",{"2":{"363":1,"478":1}}],["state",{"0":{"134":1,"478":1},"2":{"111":2,"126":1,"313":2,"315":7,"320":1,"340":1,"408":2,"410":3,"414":1,"417":1,"418":1,"430":1,"478":5}}],["standalone",{"2":{"294":2,"296":1,"300":1,"587":1}}],["star",{"2":{"518":1}}],["starbucks",{"2":{"291":1}}],["startloading",{"2":{"440":2,"441":2}}],["startotptimer",{"2":{"420":2}}],["started",{"2":{"369":2}}],["start",{"2":{"240":1,"241":1,"246":1,"294":1,"296":1,"300":1,"446":1,"447":1,"587":1}}],["study",{"2":{"291":1}}],["studio",{"2":{"178":1,"377":1,"459":1,"466":1}}],["stupid",{"2":{"2":1,"191":1}}],["strategies",{"2":{"248":1}}],["strong>child",{"2":{"322":1}}],["strong>counter",{"2":{"307":1}}],["strong>state",{"2":{"313":1}}],["strong>received",{"2":{"311":1}}],["strong>",{"2":{"130":4,"307":1,"311":1,"313":1,"322":1,"338":2}}],["strongly",{"2":{"100":1}}],["string>",{"2":{"440":1}}],["stringhelpers",{"2":{"436":1,"477":1}}],["strings",{"2":{"411":1}}],["stringify",{"2":{"113":1,"319":1,"338":3}}],["string",{"2":{"92":2,"356":1,"358":3,"368":2,"417":2,"426":1,"427":6,"448":2}}],["known",{"2":{"448":1}}],["karma",{"2":{"430":10}}],["kobold",{"2":{"273":2}}],["komodo",{"2":{"178":1}}],["keen",{"2":{"472":1}}],["keepalive",{"2":{"168":2}}],["keep",{"0":{"198":1,"200":1},"2":{"2":1,"191":2,"198":1,"223":1}}],["kebab",{"2":{"186":2}}],["keys",{"2":{"478":1}}],["keyframes",{"2":{"259":1}}],["keyup",{"2":{"187":2}}],["key=",{"2":{"165":1,"187":2,"261":1,"338":1,"407":1,"410":1}}],["key",{"0":{"165":1},"2":{"55":1,"56":6,"165":1,"168":1,"187":1,"227":5,"360":3,"396":9,"411":2,"416":4}}],["kic",{"0":{"198":1},"2":{"191":1,"198":1}}],["kit",{"2":{"23":1}}],["kiss",{"0":{"200":1},"2":{"2":1,"191":1,"200":2}}],["сэкономит",{"2":{"484":1}}],["сэкономить",{"2":{"375":1,"490":1}}],["сжатие",{"2":{"428":1}}],["сцену",{"2":{"353":1}}],["сцены",{"2":{"350":1}}],["сценарием",{"2":{"334":1}}],["сценариев",{"2":{"184":1,"375":1,"423":1}}],["сценариях",{"2":{"291":1,"407":1,"410":1}}],["сценариям",{"2":{"201":1}}],["сценария",{"2":{"128":1,"157":1,"190":1,"328":1,"350":1,"438":1,"449":1}}],["сценарий",{"0":{"560":1},"1":{"561":1,"562":1},"2":{"123":1,"299":1,"570":1}}],["сценарии",{"2":{"73":1,"190":1,"291":2,"420":1,"444":1,"573":1}}],["сформировать",{"2":{"407":1}}],["сформулировал",{"2":{"248":1}}],["сферы",{"2":{"200":1}}],["схожих",{"2":{"445":1}}],["схожи",{"2":{"445":1,"482":1}}],["схожести",{"2":{"244":1}}],["схеме",{"2":{"224":1}}],["схема",{"2":{"118":1,"279":1,"283":1,"284":1,"285":1}}],["схемы",{"2":{"38":1,"273":1,"319":1,"397":1,"410":1}}],["схему",{"2":{"17":1,"148":1,"339":1}}],["сша",{"2":{"200":1}}],["сбить",{"2":{"447":1}}],["сбивают",{"2":{"281":1}}],["сбивать",{"2":{"233":1}}],["сбоя",{"2":{"299":1}}],["сбоку",{"2":{"254":1}}],["сбор",{"2":{"542":1}}],["сборник",{"2":{"428":1}}],["сбора",{"2":{"239":1,"253":1,"402":1}}],["сборок",{"2":{"183":1,"429":1,"467":1}}],["сборку",{"2":{"356":1,"467":1}}],["сборке",{"2":{"180":1,"181":1,"300":1,"319":1}}],["сборки",{"2":{"143":1,"157":1,"178":1,"184":1,"189":1,"300":1,"454":1}}],["сборка",{"0":{"429":1},"2":{"132":1,"157":1,"184":1,"396":1,"429":1}}],["сборщиков",{"2":{"180":1,"357":1}}],["сборщиком",{"2":{"131":1,"158":1,"159":1,"180":1,"184":1}}],["сборщики",{"2":{"158":1,"357":1}}],["сборщика",{"0":{"158":1},"2":{"134":1,"158":2,"159":1,"160":1,"177":2,"179":1,"300":1,"429":3,"538":1}}],["сборщик",{"2":{"126":1,"133":1,"157":1,"158":2,"159":1,"160":1,"180":2,"198":1,"376":1,"429":3}}],["сброса",{"2":{"187":1}}],["сюда",{"2":{"180":1,"501":1}}],["снэпшот",{"2":{"508":1}}],["сне",{"2":{"474":1}}],["снятия",{"2":{"274":1}}],["снятие",{"2":{"218":1}}],["снятии",{"2":{"187":1}}],["снять",{"2":{"198":1,"223":1,"299":1,"492":1}}],["сняты",{"2":{"135":1}}],["снова",{"2":{"168":1,"224":1,"227":1,"261":2,"416":1,"420":1,"451":1}}],["сначала",{"2":{"155":1,"157":1,"158":1,"159":1,"160":1,"179":1,"188":1,"228":1,"232":1,"271":1,"299":6,"312":1,"314":1,"339":1,"399":1,"403":1,"417":1,"420":1,"446":1}}],["снимку",{"2":{"463":1}}],["снимке",{"2":{"241":1,"312":1}}],["снимок",{"2":{"410":1}}],["снимаем",{"2":{"198":1,"300":1,"407":1}}],["снимать",{"2":{"123":1}}],["снимаются",{"2":{"123":1}}],["сниппетов",{"2":{"570":1}}],["сниппет",{"2":{"233":2}}],["снизить",{"2":{"231":1,"416":1,"490":1}}],["снизу",{"2":{"29":1,"107":1}}],["снижает",{"2":{"483":1,"492":1}}],["снижают",{"2":{"479":1}}],["снижаться",{"2":{"132":1}}],["снижением",{"2":{"156":1}}],["считывать",{"2":{"478":1}}],["считывателем",{"2":{"421":1}}],["считывает",{"2":{"363":1,"547":1}}],["считает",{"2":{"478":1}}],["считается",{"2":{"125":1,"152":1,"271":1,"273":1,"319":1,"410":1,"416":1,"421":1,"422":1,"491":1}}],["считаем",{"2":{"345":1,"359":1}}],["считаться",{"2":{"303":1}}],["считать",{"2":{"293":1,"325":1,"332":1,"350":1,"483":1}}],["считаются",{"2":{"293":1}}],["считая",{"2":{"234":1}}],["счастливо",{"2":{"183":1}}],["счастью",{"2":{"152":1,"234":1}}],["счетчики",{"2":{"352":1}}],["счетчика",{"2":{"188":1,"306":1}}],["счетчик",{"2":{"179":1,"306":1,"308":1}}],["счет",{"2":{"130":1,"156":1,"243":1,"289":1}}],["сгенеренные",{"2":{"492":1}}],["сгенерировавшего",{"2":{"328":1}}],["сгенерировать",{"2":{"299":1,"425":1}}],["сгенерированные",{"2":{"300":1}}],["сгенерированный",{"2":{"180":1}}],["сгенерирована",{"2":{"96":1}}],["сгенерился",{"2":{"100":1}}],["сгенерить",{"2":{"98":1}}],["сгорания",{"2":{"491":1}}],["сгиба",{"2":{"273":1}}],["сгруппированы",{"2":{"224":1}}],["сгруппированные",{"2":{"194":1}}],["сгруппированных",{"2":{"194":1}}],["сгруппировать",{"2":{"130":1}}],["ссылок",{"2":{"198":2,"218":1,"264":1,"273":2,"407":1,"410":1}}],["ссылаясь",{"2":{"453":1}}],["ссылаемся",{"2":{"407":1}}],["ссылаемой",{"2":{"166":1}}],["ссылается",{"2":{"321":1,"329":1}}],["ссылаются",{"2":{"227":1}}],["ссылающийся",{"2":{"181":1}}],["ссылаться",{"2":{"128":1,"160":2,"165":1,"180":2,"184":1,"187":1,"223":1,"235":1,"359":1,"453":1}}],["ссылкой",{"2":{"272":1,"273":1}}],["ссылки",{"2":{"171":3,"177":1,"195":1,"208":1,"272":1,"273":1,"291":1,"315":1,"327":1,"334":2,"358":1,"360":1,"368":1,"407":1,"410":1,"413":1,"429":1}}],["ссылке",{"2":{"150":1,"160":1,"306":1,"327":1,"562":1}}],["ссылку",{"2":{"106":1,"144":1,"150":1,"182":1,"212":2,"223":1,"261":3,"298":1,"319":1,"334":1,"407":1}}],["ссылками",{"2":{"29":1,"33":1,"273":1,"360":1}}],["ссылка",{"0":{"272":1},"2":{"22":1,"106":1,"111":1,"130":1,"264":1,"272":2,"273":2,"334":1,"358":1,"402":1}}],["сдерживающим",{"2":{"415":1}}],["сделки",{"2":{"284":1}}],["сделав",{"2":{"340":1,"484":1}}],["сделанный",{"2":{"492":1}}],["сделана",{"2":{"465":1}}],["сделаны",{"2":{"449":1}}],["сделан",{"2":{"338":1}}],["сделано",{"2":{"188":1,"298":1,"463":1,"465":1}}],["сделал",{"2":{"201":1,"487":1}}],["сделали",{"2":{"188":2,"348":1,"399":1,"401":1,"462":1,"492":1}}],["сделайте",{"2":{"181":1,"418":1,"485":1,"491":2}}],["сделает",{"2":{"159":1,"174":1,"453":1}}],["сделаем",{"2":{"65":1,"106":1,"237":2,"348":1}}],["сделать",{"2":{"7":1,"11":1,"12":1,"25":1,"35":1,"62":1,"63":1,"82":1,"88":1,"123":2,"124":3,"143":1,"151":1,"153":1,"179":1,"181":1,"183":2,"184":1,"188":3,"201":2,"231":1,"247":1,"276":1,"284":1,"292":1,"299":1,"304":1,"319":1,"327":3,"336":1,"354":1,"368":1,"369":1,"370":1,"371":1,"375":1,"400":1,"404":1,"407":1,"418":1,"419":1,"422":1,"425":1,"436":1,"438":1,"463":1,"465":2,"466":1,"474":2,"476":1,"478":1,"482":1,"483":1,"492":1,"588":1}}],["сдвигает",{"2":{"327":1}}],["сдвиге",{"2":{"96":1}}],["смартфоне",{"2":{"492":1}}],["смартфона",{"2":{"492":1}}],["смарт",{"2":{"422":1}}],["смахивает",{"2":{"96":1}}],["смог",{"2":{"454":1}}],["смогли",{"2":{"139":1,"242":1,"248":1}}],["смогло",{"2":{"62":1}}],["сможет",{"2":{"234":1,"327":1,"542":1}}],["сможете",{"2":{"178":1,"304":2,"487":1}}],["сможем",{"2":{"183":1,"194":1,"234":1,"316":1,"339":1,"459":1}}],["смонтируем",{"2":{"181":1}}],["смонтирован",{"2":{"160":1}}],["смонтировать",{"2":{"157":1,"452":1}}],["см",{"2":{"132":1,"168":1,"223":1,"263":1,"293":1,"309":1,"319":1,"352":1,"356":1,"369":1,"417":1,"465":1}}],["смесь",{"2":{"399":1}}],["смена",{"2":{"575":1,"581":1}}],["смену",{"2":{"363":1,"482":1,"522":1}}],["смене",{"2":{"41":1}}],["смешиваясь",{"2":{"244":1}}],["смешивает",{"2":{"202":1,"482":1}}],["смешно",{"2":{"96":1}}],["смысле",{"2":{"164":1,"200":1,"421":1,"478":1}}],["смысл",{"2":{"131":1,"258":1,"407":1,"492":1}}],["смысла",{"2":{"38":1,"277":1}}],["смыслом",{"2":{"16":1}}],["сродни",{"2":{"332":1}}],["срочным",{"2":{"255":2}}],["срока",{"2":{"142":1,"152":1}}],["срок",{"2":{"123":3,"152":1}}],["сроком",{"2":{"123":1}}],["сроков",{"2":{"73":1}}],["среде",{"2":{"287":1,"452":1}}],["средних",{"2":{"313":1}}],["средним",{"2":{"222":1}}],["средний",{"2":{"222":3}}],["среднем",{"2":{"491":1}}],["средней",{"2":{"200":1}}],["среднего",{"2":{"156":2,"318":1,"491":1}}],["средам",{"2":{"200":1,"239":1}}],["среда",{"2":{"179":1,"430":1}}],["среды",{"2":{"177":2,"198":1,"232":1,"252":1,"266":1,"363":1}}],["средство",{"2":{"416":1,"429":1,"541":1}}],["средством",{"2":{"286":1}}],["средствами",{"2":{"474":1,"490":1}}],["средствах",{"2":{"466":1}}],["средства",{"2":{"308":1,"466":3,"474":1,"479":1,"490":1}}],["средств",{"2":{"62":1,"145":1,"240":1,"278":1,"358":1,"421":1,"444":1}}],["среди",{"2":{"39":1,"178":2,"291":1,"315":1,"337":1,"479":1}}],["сработает",{"2":{"449":2}}],["срабатывание",{"2":{"448":1}}],["срабатывания",{"2":{"298":1}}],["срабатывают",{"2":{"404":1}}],["срабатывает",{"2":{"234":1,"298":1,"328":2,"368":1}}],["сравнится",{"2":{"492":1}}],["сравнительная",{"2":{"436":1,"476":1}}],["сравниваются",{"2":{"490":1}}],["сравним",{"2":{"127":1,"160":2}}],["сравнений",{"2":{"448":1}}],["сравнения",{"0":{"280":1},"2":{"368":1}}],["сравнении",{"2":{"156":1}}],["сравнению",{"2":{"131":1,"155":1,"180":1,"277":1,"302":1,"318":1,"369":1,"370":1,"399":1,"443":1,"579":1}}],["сравнение",{"2":{"4":1,"130":1,"280":1}}],["сразу",{"2":{"33":1,"62":1,"65":1,"82":1,"95":1,"107":1,"123":1,"166":1,"167":1,"224":1,"234":1,"309":1,"325":1,"426":1,"492":2,"515":1,"542":1,"586":1}}],["скилл",{"2":{"491":1}}],["скидка",{"2":{"118":1}}],["склонений",{"2":{"474":1,"575":1}}],["сквозные",{"2":{"453":1}}],["сквозном",{"2":{"453":1}}],["сказывается",{"2":{"483":1}}],["сказать",{"2":{"242":1,"327":1,"352":1,"413":1,"482":1}}],["сказано",{"2":{"142":1,"313":1,"422":1}}],["скачивает",{"2":{"396":1}}],["скачивания",{"2":{"285":1}}],["скачок",{"2":{"313":1}}],["скачать",{"0":{"379":1},"2":{"183":1,"285":2,"491":1}}],["скачайте",{"2":{"182":1,"183":1}}],["скачает",{"2":{"179":1}}],["сканируют",{"2":{"272":1}}],["скажется",{"2":{"183":1}}],["скажем",{"2":{"59":1}}],["скриншота",{"2":{"408":1}}],["скриншоты",{"2":{"327":1}}],["скриншот",{"2":{"322":1,"402":1}}],["скриншоте",{"2":{"285":1,"327":1}}],["скриптов",{"2":{"455":1}}],["скриптом",{"2":{"319":1}}],["скрипте",{"2":{"368":2}}],["скрипты",{"2":{"327":1,"329":1,"330":1,"399":1}}],["скрипту",{"2":{"319":1}}],["скриптами",{"2":{"492":1}}],["скриптам",{"2":{"479":1}}],["скрипта",{"2":{"180":1,"187":1,"300":2,"328":1,"329":1,"368":1,"418":1,"448":1,"492":1}}],["скрипт",{"2":{"124":2,"300":1,"328":1,"329":1}}],["скрытых",{"2":{"462":1}}],["скрытый",{"2":{"462":1}}],["скрытым",{"2":{"306":1}}],["скрытые",{"0":{"282":1},"2":{"462":1}}],["скрыта",{"2":{"280":1}}],["скрытие",{"2":{"231":1}}],["скрытия",{"2":{"164":1,"269":1}}],["скрыть",{"2":{"231":1,"268":1,"331":1}}],["скрыто",{"2":{"164":1}}],["скрываем",{"2":{"420":1}}],["скрывается",{"2":{"580":1}}],["скрывает",{"2":{"163":1,"280":1,"306":1}}],["скрывать",{"2":{"196":1}}],["скрываться",{"2":{"164":1}}],["скрываются",{"2":{"266":1}}],["скрывают",{"2":{"164":1,"281":1}}],["скрывая",{"2":{"164":1}}],["скролбара",{"2":{"550":1}}],["скролл",{"2":{"363":1}}],["скроллера",{"2":{"260":3}}],["скроллер",{"0":{"260":1},"1":{"261":1},"2":{"260":2,"261":1}}],["скромный",{"2":{"228":1}}],["скромного",{"2":{"228":1}}],["скромное",{"2":{"157":1,"458":1}}],["скроем",{"2":{"104":1}}],["скомпрометирован",{"2":{"416":1}}],["скомпоновать",{"2":{"188":1}}],["скомпилированным",{"2":{"151":1}}],["скомпилировать",{"2":{"151":1}}],["скобок",{"2":{"187":1}}],["скобки",{"2":{"157":1}}],["скопировано",{"2":{"359":1}}],["скопированы",{"2":{"180":1}}],["скопировать",{"2":{"183":1,"407":1}}],["скопируйте",{"2":{"183":1,"484":1}}],["сколько",{"2":{"142":1,"165":1,"185":1,"232":1,"258":2,"319":1,"410":1,"420":1,"421":1,"429":1,"448":2}}],["скорее",{"2":{"142":1,"145":1,"327":1}}],["скорей",{"2":{"34":1,"478":1}}],["скоро",{"2":{"457":1}}],["скоростью",{"2":{"156":1,"337":1}}],["скорость",{"2":{"132":1,"426":1}}],["скорости",{"2":{"132":2,"399":1,"492":1}}],["скорое",{"2":{"96":1}}],["скоуп",{"2":{"73":1}}],["скелета",{"2":{"121":1}}],["скелет",{"2":{"11":1,"179":1,"541":1}}],["супротив",{"2":{"576":1}}],["субд",{"2":{"458":1,"465":1}}],["субъективное",{"2":{"502":1}}],["субъекту",{"2":{"223":1}}],["субъекта",{"2":{"222":1,"416":1}}],["субъект",{"2":{"222":5,"223":2}}],["суффиксальной",{"2":{"330":1}}],["суффикса",{"2":{"329":1,"334":1}}],["сумме",{"2":{"277":1}}],["суммарный",{"2":{"352":1}}],["сумма",{"2":{"277":1,"282":1}}],["сумму",{"2":{"277":1}}],["суть",{"2":{"228":1,"314":1}}],["сути",{"2":{"13":1,"114":1,"123":1,"124":1,"191":1,"195":1,"218":1,"271":1,"399":1,"474":1,"478":1}}],["существенные",{"2":{"482":1}}],["существенный",{"2":{"201":1,"311":1}}],["существенное",{"2":{"336":1}}],["существенно",{"2":{"233":1}}],["существовало",{"2":{"457":1}}],["существование",{"2":{"352":1}}],["существовать",{"2":{"199":1,"208":1,"444":1,"457":1}}],["существовавшие",{"2":{"135":1}}],["существует",{"2":{"129":1,"132":2,"142":3,"150":1,"151":1,"152":1,"154":1,"155":1,"156":2,"157":1,"160":2,"181":1,"188":1,"195":1,"203":1,"207":2,"210":1,"212":2,"223":1,"228":1,"233":1,"240":1,"264":1,"266":1,"298":1,"299":1,"319":3,"327":1,"328":1,"340":1,"352":1,"354":1,"362":1,"369":1,"401":1,"408":1,"416":3,"419":2,"422":3,"444":1,"447":1,"470":1,"541":1}}],["существующей",{"2":{"535":1}}],["существующего",{"2":{"491":1}}],["существующем",{"2":{"442":1}}],["существующих",{"2":{"12":1,"348":1}}],["существующие",{"0":{"10":1},"2":{"219":1}}],["существуют",{"2":{"73":1,"137":1,"142":1,"154":1,"156":2,"168":1,"183":1,"210":1,"231":1,"233":1,"257":1,"271":2,"319":1,"352":1,"362":1,"419":1,"422":2,"444":1,"445":1,"461":1,"463":1,"482":1}}],["сущность",{"2":{"226":2,"331":2,"478":1}}],["сущностей",{"2":{"16":1,"73":1,"96":1,"435":1,"476":1}}],["сущности",{"0":{"43":1},"2":{"16":1,"23":1,"43":1,"92":1,"226":2,"231":1,"312":1,"331":1,"416":1,"435":1,"476":1,"482":1}}],["сущностями",{"2":{"3":1,"73":2}}],["сабмодулями",{"2":{"436":1}}],["сабхедер",{"2":{"29":1}}],["сахара",{"2":{"316":1}}],["санитизации",{"2":{"188":1}}],["сайд",{"2":{"63":1}}],["сайдбара",{"2":{"582":1}}],["сайдбаром",{"2":{"580":1}}],["сайдбаре",{"2":{"108":1}}],["сайдбар",{"2":{"30":1,"33":2,"35":1,"104":1,"580":1,"582":1}}],["сайтом",{"2":{"283":1,"491":1,"501":1}}],["сайтов",{"2":{"142":3,"273":1,"397":1,"399":1,"492":1}}],["сайту",{"2":{"123":1,"142":1,"299":1,"400":1,"422":1,"425":2}}],["сайте",{"2":{"48":1,"56":1,"123":1,"124":1,"148":1,"182":2,"183":2,"263":1,"268":1,"285":2,"318":1,"330":1,"363":1,"378":1,"380":1,"416":1,"429":1,"474":1,"478":1,"491":1,"492":1,"508":1,"575":1}}],["сайт",{"0":{"80":1},"2":{"26":1,"80":1,"121":2,"123":1,"152":1,"178":5,"179":6,"180":2,"183":2,"185":1,"268":1,"280":1,"285":1,"327":1,"394":1,"396":1,"399":3,"416":1,"425":4,"436":1,"455":2,"466":1,"483":1,"491":2,"492":2,"541":1,"561":1,"562":1}}],["сайты",{"0":{"22":1},"2":{"22":1,"124":1,"257":1,"319":1,"325":1}}],["сайтами",{"2":{"416":1,"492":1}}],["сайтах",{"2":{"88":1,"107":1,"196":1,"266":1,"268":1,"285":1}}],["сайта",{"0":{"25":1},"2":{"9":1,"25":2,"26":1,"27":1,"39":1,"123":4,"139":1,"141":2,"148":1,"153":1,"178":1,"182":2,"183":1,"237":1,"242":1,"243":1,"257":1,"264":1,"266":1,"267":1,"270":1,"271":1,"273":1,"285":1,"396":2,"416":1,"436":1,"446":1,"459":1,"474":1,"476":1,"479":1,"482":1,"483":1,"492":3,"540":1,"542":2,"561":1,"575":2}}],["сама",{"2":{"248":1,"258":1,"295":1,"442":1}}],["самая",{"2":{"137":1,"327":1,"436":1,"460":1,"477":1}}],["самые",{"2":{"234":1,"244":1,"337":1,"429":1,"482":1}}],["самых",{"2":{"208":1,"260":1,"369":1,"423":1}}],["самыми",{"2":{"299":1}}],["самым",{"2":{"156":1,"159":1,"166":1,"258":1,"271":1,"275":1,"451":1,"459":1,"465":1,"478":1,"492":1}}],["самый",{"2":{"17":1,"22":1,"32":1,"123":1,"194":1,"208":1,"211":1,"223":1,"234":1,"308":1,"357":1,"396":1,"404":1,"411":1,"415":1,"417":1,"479":1,"491":1}}],["сами",{"2":{"145":1,"201":1,"237":1,"425":1,"429":1,"436":1,"491":1,"549":1}}],["самим",{"2":{"11":1,"104":1,"492":1}}],["самую",{"2":{"25":1}}],["самоучитель",{"2":{"491":1}}],["самоуправляемые",{"2":{"422":1}}],["самописный",{"2":{"490":1}}],["само",{"2":{"457":1}}],["самообновляющийся",{"2":{"179":1}}],["самостоятельные",{"2":{"445":1}}],["самостоятельный",{"2":{"124":1,"363":1}}],["самостоятельной",{"2":{"448":1}}],["самостоятельно",{"2":{"141":1,"145":1,"196":1,"420":1,"425":2}}],["самой",{"2":{"34":1,"56":1,"117":1,"179":1,"458":1,"479":1,"492":1}}],["самого",{"2":{"3":1,"169":1,"180":1,"240":1,"273":1,"351":2,"362":1,"396":1,"404":1,"433":1,"453":1,"476":1,"541":1}}],["самому",{"2":{"4":1,"26":1,"201":1,"217":1,"433":1,"476":1,"482":1,"490":1}}],["самом",{"2":{"3":1,"83":1,"141":1,"145":1,"151":1,"152":1,"156":1,"174":1,"202":1,"306":1,"327":1,"399":1,"410":1,"414":1,"436":1,"474":1}}],["самое",{"2":{"2":1,"3":1,"33":1,"35":1,"48":1,"88":1,"106":1,"114":1,"123":2,"180":1,"187":1,"188":1,"218":2,"227":1,"239":1,"242":1,"291":1,"360":1,"416":1,"430":1,"436":1,"482":1,"485":1}}],["сам",{"2":{"3":1,"112":1,"121":1,"156":1,"212":1,"222":1,"291":1,"329":1,"375":1,"436":1,"444":1,"474":1,"476":1,"478":2,"486":1}}],["сенсорных",{"2":{"553":1}}],["сенсорное",{"2":{"240":1,"257":1}}],["сестры",{"2":{"352":1}}],["сессий",{"2":{"323":1}}],["сессионного",{"2":{"322":1}}],["сессионное",{"2":{"322":1}}],["сессионные",{"0":{"319":1}}],["сессиях",{"2":{"260":1}}],["сессиями",{"0":{"113":1},"2":{"113":1}}],["сеансов",{"2":{"319":1}}],["секретного",{"2":{"416":1}}],["секретный",{"2":{"416":4}}],["секундах",{"2":{"420":1}}],["секунды",{"2":{"329":1,"336":2}}],["секунду",{"2":{"327":2}}],["секунд",{"2":{"257":1,"420":1,"421":1,"430":1}}],["секцией",{"2":{"273":1}}],["секций",{"2":{"257":1}}],["секцию",{"2":{"186":1,"322":1}}],["секции",{"2":{"159":1,"160":1,"181":2,"186":2,"187":4,"243":1,"268":1,"271":2,"293":1,"298":1,"356":1,"416":1,"447":1}}],["секция",{"0":{"273":1},"2":{"4":1,"11":1,"180":1,"327":1,"416":2,"447":1}}],["сегодняшний",{"2":{"237":1,"456":1,"458":1}}],["сегодня",{"2":{"155":2,"196":1,"237":1,"248":1,"251":1,"266":2,"299":1,"340":1,"399":2,"423":1,"457":1}}],["сегментировать",{"2":{"423":1}}],["сегмент",{"2":{"352":1}}],["сегмента",{"2":{"187":1}}],["сегментах",{"2":{"143":1}}],["сегментом",{"2":{"142":1}}],["сегменты",{"2":{"142":1,"187":1}}],["сеттерами",{"2":{"478":1}}],["сетью",{"2":{"422":1}}],["сеть",{"2":{"299":4,"422":2}}],["сетям",{"2":{"422":2}}],["сетями",{"2":{"156":1}}],["сетях",{"2":{"279":1,"293":1}}],["сетке",{"2":{"266":1}}],["сетей",{"0":{"273":1},"2":{"142":1,"273":2}}],["сетевую",{"2":{"483":1}}],["сетевое",{"2":{"325":1}}],["сетевой",{"2":{"122":1,"232":1,"340":2,"345":1,"415":1}}],["сетевым",{"2":{"346":1}}],["сетевыми",{"2":{"291":1}}],["сетевые",{"2":{"234":1,"325":1,"340":1,"345":1,"444":1,"450":1}}],["сетевых",{"2":{"142":1,"299":1,"325":1,"340":2,"341":1,"344":1,"399":1,"414":3,"445":1}}],["сетапа",{"2":{"122":1}}],["сети",{"2":{"11":1,"118":1,"142":5,"157":1,"286":1,"299":4,"327":1,"336":1,"340":1,"399":1,"422":6,"466":1}}],["семантические",{"2":{"488":1}}],["семантически",{"2":{"105":1}}],["селекторы",{"2":{"157":1}}],["селектору",{"2":{"89":1}}],["селекторов",{"2":{"89":1}}],["сейчас",{"2":{"40":1,"89":1,"96":1,"158":1,"175":1,"228":1,"249":1,"338":1,"405":1,"419":1,"420":1,"425":1,"465":1,"491":1}}],["себя",{"0":{"141":1,"381":1},"1":{"142":1,"382":1,"383":1,"384":1,"385":1,"386":1,"387":1,"388":1,"389":1,"390":1,"391":1,"392":1,"393":1},"2":{"39":1,"67":1,"74":2,"75":1,"79":1,"139":1,"145":1,"151":1,"155":2,"156":1,"158":1,"164":1,"165":1,"167":1,"184":1,"198":1,"199":1,"201":1,"222":1,"226":1,"239":2,"253":2,"255":1,"256":1,"289":1,"299":1,"320":1,"331":1,"340":1,"362":1,"399":1,"400":1,"404":1,"426":1,"444":2,"462":1,"466":2,"467":1,"478":1,"481":1,"482":2,"491":1,"541":1,"545":1,"573":1}}],["себе",{"2":{"26":2,"145":1,"158":1,"178":1,"196":1,"202":1,"237":1,"258":1,"399":1,"436":1,"442":1,"457":1,"476":1,"482":1}}],["серию",{"2":{"446":1}}],["серия",{"2":{"416":1}}],["сериализуя",{"2":{"339":1}}],["сериализуемой",{"2":{"338":1}}],["сериализуемыми",{"2":{"327":1}}],["сериализуемые",{"2":{"327":1,"331":1}}],["сериализованном",{"2":{"531":1}}],["сериализован",{"2":{"328":1}}],["сериализованы",{"2":{"224":1}}],["сериализовать",{"2":{"319":1}}],["сериализовываться",{"2":{"225":1}}],["серьезной",{"2":{"327":1}}],["серьезная",{"2":{"319":1}}],["серьезных",{"2":{"10":1,"96":1,"118":1,"248":1}}],["серебряной",{"2":{"291":1,"354":1}}],["середине",{"2":{"29":1}}],["серой",{"2":{"252":1}}],["серая",{"2":{"156":1}}],["сертификация",{"2":{"491":1}}],["сертификации",{"2":{"152":1,"491":1}}],["сертификатов",{"2":{"152":1}}],["сертификат",{"2":{"152":5,"292":1,"425":3}}],["сертификата",{"2":{"141":1,"152":7,"153":1}}],["сертификаты",{"2":{"4":1,"425":1}}],["сертифицированных",{"2":{"152":1}}],["сертифицирующим",{"2":{"152":1}}],["сердечка",{"2":{"111":1,"112":1}}],["сервиcа",{"2":{"124":1}}],["сервисный",{"2":{"545":1}}],["сервисных",{"2":{"363":1,"369":1}}],["сервисного",{"2":{"299":3}}],["сервисе",{"2":{"336":1,"414":1,"420":1,"448":1}}],["сервисом",{"2":{"335":1,"416":1}}],["сервисов",{"2":{"39":1,"124":3,"151":1,"279":2,"335":2,"341":1,"346":1,"399":1,"414":1,"416":1,"419":1,"466":1}}],["сервису",{"2":{"331":1}}],["сервисах",{"2":{"277":1,"329":1,"445":1}}],["сервиса",{"2":{"124":2,"138":1,"299":1,"300":2,"309":1,"320":1,"333":1,"334":1,"338":1,"360":2,"369":2,"415":1,"447":2,"448":1,"467":1,"492":1}}],["сервисами",{"2":{"142":1,"202":1,"318":1,"323":1,"331":1,"334":1,"447":1,"456":1,"542":1}}],["сервисам",{"2":{"41":1,"327":1,"331":2,"346":1}}],["сервисы",{"0":{"40":1},"2":{"123":1,"124":1,"145":1,"174":1,"325":1,"331":1,"414":1,"430":1,"436":1,"445":1,"466":2,"468":1,"478":1,"491":1,"573":1}}],["сервис",{"0":{"122":1},"2":{"10":1,"39":1,"40":2,"41":1,"59":1,"83":1,"93":1,"122":1,"124":1,"219":1,"220":1,"299":4,"309":2,"312":1,"334":1,"336":2,"341":2,"343":1,"360":1,"420":2,"422":1,"446":2,"447":1,"454":1,"482":1,"491":1,"501":1,"573":1}}],["серверу",{"2":{"152":2,"345":2,"399":1,"416":3,"419":1}}],["серверов",{"2":{"145":1,"148":1,"150":2}}],["сервером",{"2":{"11":1,"124":1,"145":1,"152":1,"180":1,"199":3,"227":1,"231":1,"331":1,"340":1,"345":2,"399":1,"414":1,"415":1,"417":2,"422":1,"448":1,"492":1}}],["серверы",{"0":{"142":1,"150":1},"1":{"144":1},"2":{"142":2,"154":1,"422":1}}],["серверами",{"2":{"337":1,"345":1}}],["серверам",{"2":{"200":1}}],["серверах",{"2":{"152":1,"178":1,"422":1}}],["сервера",{"0":{"145":1,"146":1,"148":1},"1":{"146":1,"147":2,"148":1,"149":2,"150":1},"2":{"125":1,"139":2,"141":1,"142":2,"143":1,"145":3,"148":4,"152":2,"179":1,"199":1,"226":1,"232":1,"291":2,"343":1,"344":1,"345":1,"404":1,"415":2,"419":1,"421":2,"426":1,"456":1,"466":1,"474":1,"492":6,"575":1}}],["сервере",{"2":{"40":1,"76":1,"124":1,"125":2,"142":1,"145":2,"151":3,"152":1,"225":1,"292":1,"299":1,"340":2,"391":1,"394":1,"396":2,"399":2,"415":3,"416":1,"417":1,"425":1,"492":1}}],["серверному",{"2":{"492":1}}],["серверного",{"2":{"345":1,"404":1}}],["серверной",{"2":{"145":1,"450":1}}],["серверный",{"2":{"415":1}}],["серверным",{"2":{"149":1}}],["серверных",{"2":{"138":1}}],["серверные",{"2":{"40":1,"291":1,"399":1}}],["серверная",{"0":{"6":1}}],["сервер",{"0":{"151":1,"344":1},"1":{"345":1},"2":{"39":1,"56":1,"122":1,"124":2,"125":2,"138":2,"142":1,"143":2,"144":1,"145":9,"146":1,"148":1,"150":1,"151":3,"153":2,"154":1,"179":3,"180":1,"182":1,"187":1,"319":1,"325":2,"340":2,"342":2,"343":3,"344":1,"345":4,"396":2,"399":1,"414":1,"415":1,"416":2,"418":2,"419":1,"420":2,"421":3,"425":1,"430":1,"446":1,"456":2,"467":1,"491":1,"492":3}}],["сплоченность",{"2":{"436":1,"476":1}}],["спланировать",{"2":{"372":1}}],["спуститься",{"2":{"408":1}}],["спальни",{"2":{"492":1}}],["спать",{"2":{"492":1}}],["спам",{"0":{"286":1}}],["спагетти",{"2":{"201":2}}],["спиннера",{"2":{"258":3}}],["спиннер",{"2":{"258":1}}],["спиннеры",{"0":{"258":1},"1":{"259":1},"2":{"258":1}}],["списание",{"2":{"278":1}}],["список",{"0":{"193":1,"203":1},"1":{"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"232":1,"233":1,"234":1},"2":{"31":1,"51":2,"113":2,"125":2,"126":3,"136":1,"145":1,"152":1,"160":1,"167":1,"184":1,"185":1,"187":7,"188":2,"191":1,"202":1,"203":1,"207":1,"250":1,"251":1,"253":3,"257":1,"260":2,"261":1,"264":1,"269":2,"286":1,"293":1,"301":1,"318":1,"319":1,"348":1,"352":5,"353":1,"370":1,"399":1,"402":2,"404":1,"407":1,"408":2,"413":3,"448":1,"452":1,"460":1}}],["спискам",{"2":{"244":1}}],["списках",{"2":{"185":1,"253":1}}],["списка",{"2":{"168":1,"177":1,"187":4,"242":1,"252":1,"253":1,"260":2,"261":3,"266":1,"289":1,"327":1,"338":1,"352":1,"369":4,"402":1}}],["списков",{"2":{"164":1,"260":1,"269":1,"402":1,"575":1}}],["списком",{"2":{"11":1,"41":1,"142":1,"188":1,"369":2,"402":1,"407":1}}],["списке",{"2":{"3":1,"217":1,"231":1,"261":1,"266":1,"338":1,"369":1}}],["спросить",{"2":{"407":1}}],["спроектированного",{"2":{"346":1}}],["спровоцировать",{"2":{"257":1}}],["спрайтовых",{"2":{"183":1}}],["справедливо",{"2":{"319":1}}],["справки",{"2":{"254":1}}],["справку",{"2":{"184":1}}],["справиться",{"2":{"237":1,"258":1,"413":1}}],["справочную",{"2":{"491":1}}],["справочник",{"2":{"235":1,"491":1}}],["справочником",{"2":{"126":1}}],["справочного",{"2":{"220":1}}],["справочный",{"0":{"203":1},"1":{"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"232":1,"233":1,"234":1}}],["справа",{"2":{"29":1,"107":1,"142":1,"252":2,"256":2}}],["спрятана",{"2":{"122":1}}],["спектру",{"2":{"314":1}}],["спектр",{"2":{"181":1,"213":1}}],["сперва",{"2":{"65":1,"98":1,"428":1,"478":1,"491":1,"492":1}}],["специфичных",{"2":{"541":1}}],["специфичной",{"2":{"151":1}}],["специфичное",{"2":{"138":1}}],["специфической",{"2":{"421":1}}],["специфического",{"2":{"356":1}}],["специфические",{"2":{"184":1,"341":1}}],["спецификаций",{"2":{"492":1}}],["спецификацию",{"2":{"296":1,"546":1}}],["спецификациях",{"2":{"319":1}}],["спецификация",{"2":{"293":1,"491":1,"531":1}}],["спецификациями",{"2":{"346":1}}],["спецификациям",{"2":{"181":1}}],["спецификации",{"2":{"74":1,"75":1,"156":1,"293":3,"414":1}}],["специализированном",{"2":{"237":1}}],["специализированным",{"2":{"125":1,"237":1}}],["специальную",{"2":{"161":1}}],["специальной",{"2":{"313":1,"404":2}}],["специально",{"2":{"188":1,"258":1,"291":1,"301":1,"350":1,"399":1,"465":1}}],["специального",{"2":{"138":1,"334":1}}],["специальному",{"2":{"13":1,"359":1}}],["специальным",{"2":{"364":1}}],["специальные",{"0":{"361":1},"1":{"362":1},"2":{"142":1,"161":1,"348":1,"362":1,"422":1}}],["специальный",{"0":{"449":1,"450":1},"2":{"135":1,"146":1,"168":1,"234":1,"363":1,"364":2,"462":1}}],["специальных",{"2":{"125":1,"291":1,"360":1,"371":1,"444":1}}],["специальная",{"2":{"131":1,"132":1,"463":1}}],["спецпредложений",{"2":{"4":1}}],["спорным",{"2":{"541":1}}],["спонсировать",{"2":{"318":1}}],["спокойно",{"2":{"122":1}}],["способами",{"2":{"225":1,"348":1,"372":1}}],["способа",{"2":{"187":1,"306":1,"492":1}}],["способов",{"2":{"183":1,"210":1,"215":1,"231":1,"352":1,"369":1,"408":1,"415":1,"422":1}}],["способом",{"2":{"157":1,"159":1,"188":1,"200":1,"215":1,"234":2,"257":1,"260":1,"306":2,"313":1,"452":1,"455":1,"459":1}}],["способе",{"2":{"160":1,"535":1,"537":1}}],["способный",{"2":{"145":1}}],["способности",{"0":{"26":1}}],["способы",{"2":{"74":1,"210":1,"233":1,"271":1,"415":1,"461":1}}],["способ",{"0":{"127":1},"2":{"56":1,"123":1,"126":1,"127":1,"160":3,"211":1,"221":1,"223":1,"233":1,"294":1,"299":1,"306":1,"308":1,"311":1,"315":1,"327":1,"329":1,"338":1,"362":1,"372":1,"396":2,"406":1,"407":1,"408":1,"415":2,"419":1,"429":1,"435":1,"455":1,"464":1,"467":1,"476":1,"492":1}}],["спойлер",{"2":{"4":1}}],["симулированный",{"2":{"450":1}}],["симуляции",{"2":{"442":1}}],["символом",{"2":{"253":1}}],["символов",{"2":{"183":1,"319":1}}],["символ",{"2":{"240":1,"264":1,"319":1}}],["сиблингу",{"2":{"352":1}}],["сигнал",{"2":{"448":1}}],["сигналы",{"2":{"358":1}}],["сигнальные",{"2":{"352":1}}],["сигнализирует",{"2":{"234":1}}],["сигнатура",{"2":{"341":1}}],["ситуацией",{"2":{"478":1}}],["ситуаций",{"2":{"404":1,"415":1}}],["ситуациях",{"2":{"483":1}}],["ситуация",{"2":{"364":1,"407":1,"482":1}}],["ситуациями",{"2":{"258":1}}],["ситуацию",{"2":{"237":1,"360":1}}],["ситуации",{"2":{"156":1,"247":1,"313":1,"457":1}}],["сих",{"2":{"158":1,"167":1,"177":1,"231":1,"238":1,"268":1,"313":1,"357":1,"399":1,"408":1,"410":2}}],["синтез",{"2":{"478":1}}],["синтаксического",{"2":{"316":1}}],["синтаксисов",{"2":{"358":1}}],["синтаксисом",{"2":{"56":1,"160":1,"168":1,"234":2,"357":1,"453":1}}],["синтаксису",{"2":{"234":1,"357":1}}],["синтаксисы",{"2":{"159":1}}],["синтаксис",{"2":{"132":1,"159":2,"160":6,"234":3,"318":1,"330":2,"357":3,"359":2,"360":1,"362":3,"448":1,"450":1,"538":1}}],["синтаксисе",{"2":{"130":1,"185":1,"229":1,"316":1,"358":2}}],["синтаксиса",{"2":{"128":1,"129":1,"137":1,"155":1,"159":1,"234":1,"315":1,"357":1,"362":2}}],["синдицированных",{"2":{"419":1}}],["синхронного",{"2":{"442":1}}],["синхронность",{"2":{"233":1}}],["синхронной",{"2":{"232":3,"233":1}}],["синхронный",{"0":{"233":1}}],["синхронные",{"2":{"232":1,"445":1}}],["синхронизирует",{"2":{"458":2}}],["синхронизируется",{"2":{"322":1}}],["синхронизированном",{"2":{"466":1}}],["синхронизирован",{"2":{"321":2}}],["синхронизировано",{"2":{"318":1,"322":1}}],["синхронизироваться",{"2":{"466":1}}],["синхронизировать",{"2":{"228":1,"313":1,"320":1,"466":2}}],["синхронизации",{"2":{"407":1}}],["синхронизация",{"2":{"340":1}}],["синхронизацию",{"2":{"151":1,"166":1,"337":1,"466":1}}],["синхронизацией",{"2":{"96":1}}],["синглтоном",{"2":{"334":1}}],["синглтоны",{"2":{"212":1}}],["синглтонами",{"2":{"211":1}}],["синглтона",{"2":{"210":1,"216":1,"218":1}}],["синглтон",{"2":{"181":1,"191":1,"202":1,"208":1,"212":2,"219":2,"223":1,"310":1,"314":1,"320":1,"321":1,"369":1,"407":1,"478":1}}],["синоним",{"2":{"142":1}}],["сила",{"2":{"364":1,"414":1}}],["силами",{"2":{"200":1}}],["сильный",{"2":{"362":1}}],["сильные",{"2":{"358":1}}],["сильное",{"2":{"428":1}}],["сильно",{"2":{"3":1,"22":1,"26":1,"29":1,"47":1,"50":1,"70":1,"83":1,"88":1,"121":1,"138":1,"141":1,"142":1,"160":2,"198":1,"429":1,"452":1,"474":1,"479":1,"482":2,"485":1,"490":1,"491":2,"492":1,"575":1,"588":1}}],["силы",{"2":{"96":1}}],["силу",{"2":{"12":1}}],["системные",{"2":{"460":1}}],["системным",{"2":{"256":1}}],["системой",{"2":{"231":1,"291":2,"296":1,"319":1,"390":1,"459":1}}],["системе",{"2":{"74":1,"148":1,"291":2,"293":1,"322":1,"377":1,"442":1,"458":1,"462":2,"482":1}}],["систему",{"2":{"3":1,"123":1,"145":1,"194":2,"196":1,"200":1,"265":1,"306":1,"319":1,"327":1,"418":2,"419":1,"420":1,"442":1,"459":1,"460":1}}],["систематическое",{"2":{"291":1}}],["системах",{"0":{"459":1,"460":1,"461":1},"2":{"178":1,"291":1,"298":1,"460":2,"461":1}}],["система",{"2":{"2":1,"67":1,"74":1,"123":2,"145":1,"185":1,"194":2,"199":1,"200":1,"231":1,"239":1,"258":2,"281":1,"291":1,"313":1,"328":1,"545":1}}],["системами",{"2":{"2":1,"289":1,"291":2,"399":1,"482":1}}],["системы",{"0":{"442":1},"1":{"443":1,"444":1,"445":1,"446":1,"447":1,"448":1,"449":1,"450":1,"451":1,"452":1,"453":1,"454":1,"455":1,"456":1,"457":1,"458":1,"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1,"467":1,"468":1,"469":1},"2":{"2":1,"12":1,"41":2,"74":3,"122":1,"123":2,"152":1,"194":1,"203":1,"226":1,"239":1,"252":1,"291":2,"345":1,"360":1,"365":1,"415":1,"420":1,"442":1,"444":1,"459":1,"482":1,"483":1,"490":1}}],["систем",{"2":{"2":1,"346":1,"375":1,"457":1,"482":1}}],["слышат",{"2":{"466":1}}],["слышали",{"2":{"271":1}}],["слияний",{"2":{"465":1,"466":1}}],["слияния",{"2":{"465":1,"467":1}}],["слияниями",{"0":{"464":1}}],["слиянии",{"0":{"465":1},"2":{"465":1}}],["слияние",{"2":{"458":1,"464":1,"465":4}}],["слишком",{"2":{"160":1,"184":1,"196":1,"200":1,"247":1,"248":1,"249":1,"327":3,"422":1}}],["сладко",{"2":{"399":1}}],["слайдеров",{"2":{"257":1}}],["слайдеры",{"0":{"257":1},"2":{"257":3}}],["слайдер",{"0":{"84":1,"472":1},"1":{"85":1,"86":1},"2":{"85":1}}],["слабо",{"2":{"196":1,"436":1,"477":1}}],["слабом",{"2":{"123":1}}],["слабосвязные",{"2":{"41":1}}],["слабосвязанными",{"2":{"7":1}}],["слабосвязанные",{"2":{"3":1,"4":1}}],["слабую",{"2":{"34":1}}],["слабая",{"0":{"34":1},"2":{"436":1,"477":1}}],["слушатель",{"2":{"332":1}}],["слушателей",{"2":{"319":1,"482":1}}],["слушателя",{"2":{"298":2,"363":1}}],["слушателями",{"2":{"222":1}}],["служат",{"2":{"482":1}}],["служебный",{"2":{"446":1}}],["службе",{"2":{"345":1,"416":1}}],["службу",{"2":{"278":1,"339":1,"340":1,"421":1}}],["службы",{"2":{"143":1,"331":1}}],["служб",{"2":{"142":1,"299":1}}],["служит",{"2":{"125":1,"345":1}}],["служить",{"2":{"78":1,"445":1}}],["случаи",{"2":{"196":1,"198":1,"311":1,"341":1,"361":1,"362":1}}],["случаям",{"2":{"413":1}}],["случаями",{"2":{"184":1,"413":1}}],["случая",{"2":{"157":1,"201":1,"311":1,"327":1,"354":1,"356":1,"444":2,"448":1}}],["случаях",{"2":{"4":1,"130":1,"168":1,"179":1,"181":1,"210":1,"212":1,"232":1,"237":1,"239":1,"251":1,"253":1,"258":1,"268":1,"277":1,"285":1,"294":1,"306":1,"327":1,"347":1,"354":1,"399":1,"416":1,"422":1,"438":1,"449":1,"454":1,"478":2,"582":1}}],["случалось",{"2":{"96":1}}],["случается",{"2":{"416":1}}],["случаен",{"2":{"220":1}}],["случаев",{"2":{"123":1,"181":1,"187":2,"197":1,"223":3,"232":1,"233":2,"234":1,"291":1,"300":1,"348":1,"438":1,"445":1,"446":1,"470":1,"474":2,"492":2,"575":1}}],["случае",{"2":{"12":1,"22":1,"41":1,"47":1,"88":1,"89":1,"123":3,"124":1,"125":1,"141":1,"143":1,"145":2,"148":2,"151":1,"152":2,"156":2,"157":1,"159":1,"160":1,"174":1,"181":1,"187":3,"188":1,"194":1,"201":1,"207":1,"216":1,"218":2,"222":1,"224":1,"225":1,"226":1,"228":1,"234":5,"240":1,"245":1,"249":1,"253":1,"254":1,"260":2,"273":1,"280":1,"282":1,"298":1,"299":1,"300":1,"309":1,"311":1,"312":1,"313":1,"315":1,"316":1,"319":2,"327":1,"328":1,"331":2,"336":1,"339":1,"345":1,"357":1,"358":1,"359":2,"362":1,"363":1,"369":2,"396":1,"400":1,"407":3,"408":2,"410":2,"414":2,"415":3,"420":1,"421":2,"422":3,"425":1,"429":1,"436":1,"444":1,"445":2,"447":1,"448":4,"450":1,"452":2,"453":2,"455":1,"460":1,"463":1,"465":1,"474":2,"478":1,"482":1,"483":1,"508":1,"531":1}}],["случайно",{"2":{"272":1}}],["случай",{"0":{"449":1,"450":1},"2":{"9":1,"111":1,"364":1,"396":1,"448":1,"450":1,"466":1,"491":1}}],["слои",{"2":{"435":1,"476":1}}],["слоте",{"2":{"362":1}}],["слотом",{"2":{"362":2}}],["слотов",{"2":{"362":4,"367":1}}],["слотам",{"2":{"452":1}}],["слотами",{"2":{"362":1}}],["слота",{"2":{"362":3,"437":1}}],["слоту",{"2":{"362":1}}],["слот",{"2":{"362":4,"368":1}}],["слоты",{"0":{"362":3},"2":{"362":5}}],["слою",{"2":{"331":1}}],["сложен",{"2":{"231":2}}],["сложную",{"2":{"200":1,"276":1}}],["сложнее",{"2":{"194":1,"200":1,"234":1,"444":2}}],["сложная",{"2":{"138":1,"436":1,"476":1}}],["сложны",{"2":{"235":1}}],["сложный",{"2":{"227":1,"478":1}}],["сложные",{"2":{"166":1,"247":1,"306":1,"358":1,"360":1,"399":1,"410":1,"433":1,"476":1}}],["сложных",{"2":{"130":1,"155":1,"226":1,"251":1,"268":1,"299":1,"304":1,"325":1,"358":1,"375":1,"408":1,"436":1,"476":1,"490":1}}],["сложным",{"2":{"3":1,"145":1,"231":1,"319":1,"321":1,"433":1,"436":2,"444":1,"476":3,"492":1}}],["сложными",{"2":{"2":1,"130":1,"482":1}}],["сложно",{"2":{"337":1,"491":1}}],["сложному",{"2":{"231":1,"433":1,"452":1,"476":1}}],["сложное",{"2":{"195":1}}],["сложностей",{"2":{"346":1,"432":1,"476":1}}],["сложностям",{"2":{"195":1}}],["сложность",{"2":{"122":1,"200":1,"231":2,"268":2,"304":1,"331":1,"436":2,"457":1,"476":2,"477":1}}],["сложности",{"2":{"2":1,"155":1,"160":1,"194":1,"231":1,"247":1,"291":1,"399":1,"421":1,"436":1,"442":2,"458":1,"476":1,"482":2,"502":1}}],["сложной",{"2":{"41":1,"299":1,"328":1,"400":1}}],["сложного",{"0":{"2":1}}],["слоев",{"2":{"228":1,"327":1}}],["сломает",{"2":{"188":1}}],["сломать",{"2":{"123":1}}],["слов",{"2":{"186":1,"276":1,"466":1}}],["словарь",{"2":{"334":1}}],["словаря",{"2":{"219":1,"223":1}}],["слова",{"2":{"186":1,"254":1}}],["словами",{"2":{"96":1,"394":1,"478":1,"492":1,"541":1}}],["слово",{"2":{"157":1,"160":3,"172":1,"174":1,"226":1,"234":1,"315":1,"329":1,"500":1}}],["словом",{"2":{"137":1,"234":1}}],["слой",{"2":{"59":1,"222":1,"490":1,"545":1,"570":1}}],["слоям",{"2":{"436":1,"476":1}}],["слоями",{"2":{"331":1,"436":1,"476":1}}],["слоя",{"2":{"40":1,"331":3}}],["слежение",{"2":{"515":1}}],["следам",{"2":{"457":1}}],["следовало",{"2":{"313":1,"316":1,"318":1}}],["следование",{"2":{"263":1}}],["следовать",{"2":{"182":1,"197":1,"377":1,"404":1}}],["следовательно",{"2":{"157":1}}],["следствие",{"2":{"477":1}}],["следствием",{"2":{"246":1}}],["следствия",{"2":{"247":1}}],["следит",{"2":{"482":1}}],["следите",{"0":{"243":1}}],["следить",{"2":{"223":1,"407":1,"463":1,"482":1}}],["следуйте",{"2":{"305":1,"366":1}}],["следуют",{"2":{"240":1,"275":1,"306":1,"359":1}}],["следующую",{"2":{"144":1,"156":1,"179":3,"187":1,"233":1,"340":1,"344":1,"401":1,"446":1,"448":1,"451":1,"455":1,"456":1,"462":2,"491":1}}],["следующего",{"0":{"201":1},"1":{"204":1,"205":1,"206":1,"207":1},"2":{"181":1,"187":1,"191":1,"233":1,"243":1,"271":1,"299":1,"359":1,"362":1,"368":1,"410":1,"414":1,"418":1,"444":1,"446":1,"450":1}}],["следующем",{"2":{"167":1,"179":2,"185":1,"187":1,"299":1,"359":2,"360":1,"368":1,"418":1,"445":1,"454":1}}],["следующему",{"2":{"142":1,"220":1,"231":1,"242":1,"308":1,"351":1,"410":1}}],["следующее",{"2":{"100":1,"129":1,"141":1,"167":1,"178":2,"179":1,"183":1,"185":1,"186":1,"187":1,"218":1,"237":1,"238":1,"289":1,"290":1,"299":1,"305":1,"319":2,"326":1,"329":1,"348":1,"349":1,"362":2,"368":2,"369":1,"377":1,"397":1,"398":1,"400":1,"415":1,"416":1,"443":1,"445":1,"454":2,"462":3,"465":3,"483":1}}],["следующей",{"2":{"98":1,"151":1,"175":1,"188":1,"189":1,"223":1,"235":1,"300":1,"309":1,"314":1,"323":1,"331":1,"346":1,"356":1,"371":1,"399":1,"407":1,"414":1,"416":1,"422":1,"423":1,"447":1,"451":1,"457":1,"462":1,"463":1,"466":1}}],["следующий",{"2":{"167":1,"184":1,"187":1,"188":1,"198":1,"327":1,"334":1,"336":1,"359":1,"362":1,"369":1,"413":1,"451":1,"452":1}}],["следующим",{"2":{"139":1,"142":2,"143":1,"158":1,"165":1,"179":1,"182":3,"184":2,"185":1,"186":2,"187":1,"215":1,"218":1,"220":1,"226":1,"228":1,"231":1,"233":1,"234":1,"247":1,"260":2,"273":1,"289":1,"291":1,"298":1,"300":1,"309":1,"310":1,"328":2,"337":1,"341":1,"342":1,"344":1,"351":2,"353":1,"360":2,"362":1,"367":1,"368":3,"369":1,"402":1,"403":1,"404":1,"408":1,"410":2,"417":1,"420":1,"422":1,"447":1,"451":1,"455":1,"456":2,"460":1,"462":1,"465":1,"545":1}}],["следующими",{"2":{"121":1,"176":1,"187":1,"223":1,"227":1,"249":1,"299":1,"315":1}}],["следующие",{"2":{"73":1,"132":1,"142":1,"155":1,"159":1,"160":1,"177":1,"179":1,"182":1,"187":2,"211":1,"226":1,"228":1,"229":1,"232":1,"245":1,"270":1,"274":1,"296":1,"298":1,"299":1,"301":1,"303":1,"304":1,"313":1,"314":1,"316":1,"325":1,"328":1,"331":1,"337":1,"339":1,"350":1,"363":1,"365":1,"368":3,"372":1,"401":2,"404":1,"406":1,"417":1,"424":1,"444":2,"446":1,"447":2,"448":1,"458":1,"460":1,"462":1,"463":1,"465":1,"466":1,"554":1}}],["следующих",{"2":{"72":1,"152":1,"156":1,"202":1,"231":1,"358":1,"404":1,"570":1}}],["следующая",{"2":{"17":1,"187":1,"339":1}}],["следуя",{"2":{"181":2,"194":1,"210":1,"296":1,"333":1,"368":2,"402":1,"420":1,"459":1}}],["следует",{"2":{"126":1,"130":1,"137":1,"143":1,"147":1,"156":1,"174":1,"183":2,"191":1,"196":1,"202":1,"209":1,"250":1,"252":1,"254":1,"263":1,"266":1,"268":1,"287":1,"288":1,"291":1,"296":1,"299":1,"300":1,"306":1,"326":1,"327":1,"341":1,"351":1,"354":1,"363":1,"364":1,"369":2,"399":1,"404":1,"407":1,"415":2,"422":1,"450":1,"456":1,"478":1,"492":1}}],["слева",{"2":{"28":1,"29":1,"30":2,"33":1,"35":1,"108":1,"252":2,"273":1,"580":1}}],["студенты",{"2":{"377":1}}],["ступенькой",{"2":{"335":1}}],["стирают",{"2":{"291":1}}],["стимулировать",{"0":{"242":1}}],["стилям",{"2":{"522":1}}],["стилями",{"2":{"185":1,"187":2,"298":1}}],["стиля",{"2":{"368":1,"501":1,"542":1}}],["стилях",{"2":{"23":1,"348":1}}],["стиль",{"2":{"163":1,"164":1,"174":1,"186":1,"490":1}}],["стиле",{"2":{"566":1,"567":1}}],["стилем",{"2":{"155":1,"251":1}}],["стилей",{"2":{"89":1,"155":1,"159":2,"180":2,"181":1,"182":2,"183":2,"185":1,"186":1,"187":1,"239":1,"242":1,"253":1,"295":1,"338":1,"348":1,"406":1,"407":1}}],["стилизованной",{"2":{"490":1}}],["стилизовать",{"2":{"252":1}}],["стилизация",{"0":{"506":1}}],["стилизации",{"2":{"250":1,"258":1,"542":2}}],["стилизацию",{"2":{"107":1,"252":1,"482":1,"485":1}}],["стилизацией",{"2":{"25":1}}],["стили",{"2":{"85":1,"114":1,"159":2,"187":1,"197":1,"285":1,"348":1,"362":1,"368":1,"406":1,"435":1,"476":1,"490":4}}],["стилю",{"2":{"74":1,"243":1}}],["стоящих",{"2":{"541":1}}],["сторы",{"2":{"478":2}}],["стором",{"2":{"478":1}}],["сторов",{"2":{"315":1,"478":1}}],["сторону",{"2":{"434":1,"476":1}}],["стороной",{"2":{"416":1}}],["сторонами",{"2":{"416":1}}],["сторона",{"2":{"274":1,"278":1}}],["стороне",{"2":{"237":1,"334":1,"338":1,"442":1,"492":2,"588":1}}],["стороны",{"2":{"125":1,"156":1,"191":1,"248":1,"258":1,"352":1,"541":1}}],["стороннюю",{"2":{"538":1}}],["сторонняя",{"0":{"416":1},"2":{"484":1}}],["сторонние",{"2":{"180":2,"189":1,"190":1,"538":1,"588":1}}],["сторонних",{"0":{"485":1},"2":{"125":1,"138":1,"185":1,"231":1,"418":1,"422":1}}],["сторонний",{"2":{"123":1,"285":1}}],["сторонним",{"2":{"12":1,"67":1,"125":3,"279":1,"286":1}}],["стороннего",{"2":{"125":1,"492":1}}],["сторонней",{"2":{"96":1,"478":1}}],["стороннее",{"2":{"13":1}}],["сторон",{"2":{"9":1}}],["сторе",{"2":{"315":1,"321":1,"478":1}}],["стор",{"2":{"314":6,"315":1,"316":3,"317":1,"318":2,"478":4}}],["сторами",{"2":{"478":1}}],["сторам",{"2":{"318":1}}],["стора",{"0":{"314":1},"1":{"315":1,"316":1,"317":1,"318":1},"2":{"315":6,"318":1,"319":1,"321":1}}],["стола",{"2":{"467":1}}],["столбце",{"2":{"408":1}}],["столкнулась",{"2":{"458":1}}],["столкнуться",{"2":{"156":1,"226":1,"404":1}}],["столкнетесь",{"2":{"327":1}}],["столе",{"2":{"256":1,"294":1}}],["столько",{"2":{"165":1,"319":1,"410":1,"421":1,"448":2}}],["стоимость",{"2":{"118":1}}],["стоит",{"2":{"114":1,"132":1,"137":1,"151":1,"176":1,"201":1,"207":1,"229":1,"233":1,"248":1,"257":1,"312":1,"360":1,"363":1,"369":1,"414":1,"438":1}}],["стейты",{"2":{"478":1}}],["стейт",{"2":{"478":2,"482":1}}],["стейта",{"2":{"363":2,"474":1,"478":3}}],["стейтом",{"2":{"34":1,"478":5}}],["степенью",{"2":{"325":1}}],["степени",{"2":{"133":1,"155":1,"160":1,"191":1,"232":1,"240":1,"244":1,"448":1,"453":1,"457":1}}],["стековые",{"2":{"266":1}}],["стек",{"0":{"23":1}}],["стрелку",{"2":{"316":1}}],["стрелками",{"2":{"179":2}}],["стрелочную",{"2":{"233":1}}],["стремитесь",{"2":{"248":1}}],["стремимся",{"2":{"145":1,"309":1}}],["стремящихся",{"2":{"137":1}}],["стремление",{"2":{"96":1}}],["страшном",{"2":{"474":1}}],["стратегия",{"2":{"436":1,"476":1,"588":1}}],["стратегиями",{"2":{"299":1,"397":1}}],["стратегию",{"2":{"299":2,"404":1}}],["стратегий",{"2":{"299":2,"300":1,"491":1}}],["стратегией",{"2":{"299":1,"300":2}}],["стратегии",{"2":{"65":1,"299":1,"303":1}}],["страдает",{"2":{"160":1}}],["страну",{"2":{"410":1}}],["страны",{"2":{"408":1,"410":1}}],["страна",{"2":{"408":1}}],["странички",{"2":{"492":1}}],["страничной",{"2":{"364":1}}],["страничным",{"2":{"260":1}}],["страничный",{"2":{"248":1}}],["страниц",{"2":{"36":1,"155":2,"248":1,"260":2,"271":1,"299":1,"301":1,"319":1,"399":4,"422":1,"435":1,"476":1,"490":1}}],["страницей",{"2":{"260":1,"263":1}}],["странице",{"2":{"22":1,"36":1,"47":1,"125":1,"155":1,"156":1,"157":2,"165":1,"168":2,"257":1,"272":1,"285":1,"319":2,"327":2,"370":1,"407":1,"426":1,"479":1,"481":1,"515":1,"520":1,"530":1}}],["страницах",{"2":{"202":1,"267":1}}],["страницами",{"2":{"260":1,"400":1,"402":1,"404":1}}],["страницам",{"2":{"125":3}}],["страница",{"2":{"4":1,"7":2,"30":1,"111":1,"117":1,"125":2,"155":1,"158":1,"159":1,"183":1,"241":1,"257":1,"272":2,"402":7,"492":1,"521":1,"532":1}}],["страницы",{"0":{"28":1,"350":1},"1":{"29":1,"30":1,"31":1,"32":1,"351":1,"352":1,"353":1,"354":1},"2":{"4":1,"22":1,"30":1,"36":1,"86":1,"117":1,"125":2,"144":1,"157":2,"158":2,"180":1,"188":1,"231":1,"241":2,"260":2,"264":3,"268":1,"272":2,"273":3,"301":1,"319":3,"327":5,"351":1,"375":1,"399":3,"416":1,"422":1,"433":1,"438":1,"476":1,"492":4,"508":1}}],["страницу",{"2":{"3":1,"7":1,"85":1,"105":1,"142":1,"152":1,"158":2,"180":1,"241":1,"260":1,"261":2,"272":2,"273":1,"285":2,"298":2,"319":1,"322":1,"327":2,"348":1,"351":1,"399":2,"402":1,"407":3,"492":3,"568":1}}],["странным",{"2":{"159":1,"404":1}}],["странно",{"2":{"158":1}}],["строчек",{"2":{"576":1}}],["строчкой",{"2":{"201":1}}],["строчками",{"2":{"113":1}}],["строя",{"2":{"442":1}}],["строятся",{"2":{"167":1}}],["строим",{"2":{"314":1}}],["строится",{"2":{"467":1}}],["строить",{"2":{"304":1,"348":2}}],["строительные",{"2":{"158":1,"355":1}}],["строительную",{"2":{"26":1}}],["строгость",{"2":{"138":1}}],["строковый",{"2":{"481":1}}],["строковых",{"2":{"416":1}}],["строковые",{"2":{"319":2,"531":1}}],["строковому",{"2":{"219":1}}],["строкой",{"2":{"47":1,"107":1,"311":1,"319":1,"336":1,"407":1,"413":1}}],["строки",{"2":{"157":1,"160":1,"166":1,"177":1,"179":1,"180":1,"187":1,"189":1,"223":1,"234":2,"311":2,"315":1,"316":1,"319":1,"328":1,"335":1,"336":1,"338":1,"339":3,"344":1,"345":1,"369":1,"407":2,"409":1,"416":2,"417":1,"429":1,"433":1,"447":3,"448":2,"453":1,"456":1,"458":1,"459":1,"465":1,"476":1,"483":1}}],["строке",{"2":{"98":1,"149":4,"187":9,"223":2,"227":4,"229":2,"230":4,"234":3,"261":2,"295":1,"307":1,"308":4,"311":3,"313":1,"315":1,"316":3,"318":4,"321":2,"327":1,"334":7,"335":3,"338":2,"339":4,"343":1,"345":1,"368":12,"404":7,"422":1,"424":1,"448":2,"452":4,"453":9,"463":1}}],["строк",{"2":{"96":2,"196":1,"345":1,"358":2,"407":1,"422":1,"463":1,"484":1,"492":1}}],["строку",{"2":{"82":1,"123":1,"125":1,"147":1,"219":1,"228":1,"234":1,"329":1,"338":1,"339":1,"352":1,"364":1,"411":1,"413":1,"416":1,"418":1,"419":2,"453":1,"455":1,"456":1,"460":1,"465":2,"474":1}}],["строках",{"2":{"184":1,"187":2,"299":1,"453":1}}],["строками",{"2":{"125":1,"223":1,"299":1,"413":1}}],["строка",{"2":{"29":1,"107":1,"125":1,"183":1,"187":1,"225":1,"234":2,"294":2,"295":3,"296":2,"307":3,"313":5,"315":4,"316":3,"319":1,"321":4,"327":1,"328":1,"334":3,"335":3,"339":1,"345":9,"352":2,"362":1,"364":1,"404":2,"416":2,"417":1,"422":1,"465":1}}],["стройматериалы",{"2":{"26":1}}],["структурируя",{"2":{"486":1}}],["структурированное",{"2":{"74":1}}],["структурированность",{"2":{"17":1}}],["структур",{"2":{"204":1,"226":1}}],["структура",{"0":{"180":1,"475":1,"477":1},"1":{"476":1,"477":1},"2":{"156":1,"180":1,"218":1,"264":1,"408":1,"434":1,"436":4,"476":4,"477":2}}],["структурные",{"0":{"206":1},"2":{"155":1}}],["структурных",{"2":{"74":2}}],["структурой",{"2":{"143":1,"155":1,"286":1}}],["структуры",{"0":{"476":1},"2":{"133":1,"156":1,"177":1,"180":1,"224":1,"264":1,"309":1,"334":1,"431":1}}],["структуре",{"2":{"127":1,"143":1,"180":1,"181":1,"264":1,"492":1}}],["структуру",{"2":{"17":1,"22":1,"26":1,"179":2,"180":4,"181":1,"202":1,"309":1,"432":1,"433":1,"476":2}}],["стакан",{"2":{"491":1}}],["стабильного",{"2":{"463":1}}],["стабильной",{"2":{"462":1}}],["стабильный",{"2":{"460":1}}],["стабильных",{"2":{"445":1}}],["стабилен",{"2":{"145":1}}],["стационарности",{"2":{"346":1}}],["ставшее",{"2":{"466":1}}],["ставший",{"2":{"266":1}}],["ставится",{"2":{"404":1}}],["ставиться",{"2":{"225":1}}],["ставить",{"2":{"96":1,"123":1,"178":1}}],["ставим",{"2":{"90":1,"104":1,"109":1,"115":1,"121":1}}],["сталкивались",{"2":{"369":1}}],["сталкиваемся",{"2":{"145":1}}],["стало",{"2":{"242":1,"399":1,"401":1,"478":1,"482":1}}],["стала",{"2":{"228":1,"244":1,"271":1,"400":1,"478":1}}],["стал",{"2":{"178":1,"252":1,"263":1,"266":1,"278":1,"335":1,"369":1,"444":1,"458":1}}],["стали",{"2":{"2":1,"155":1,"250":1,"474":1,"478":1,"490":1}}],["станут",{"2":{"160":1,"201":1,"315":1,"316":2}}],["становиться",{"2":{"291":1}}],["становится",{"2":{"132":1,"160":1,"273":1,"299":1,"356":1,"364":1,"407":1,"414":1,"478":1}}],["становились",{"2":{"239":1}}],["становятся",{"2":{"125":1}}],["стандартов",{"2":{"287":1,"340":1,"416":1,"423":1}}],["стандартом",{"2":{"178":1,"244":1,"252":1,"271":1,"299":1,"360":1,"392":1,"401":1,"416":1,"420":1,"546":1}}],["стандартная",{"2":{"345":1}}],["стандартной",{"2":{"414":1}}],["стандартного",{"2":{"319":1,"470":1,"474":2}}],["стандартному",{"2":{"263":1}}],["стандартную",{"2":{"296":1}}],["стандартных",{"2":{"266":1,"288":1,"291":2,"302":1,"325":1,"423":1}}],["стандартные",{"2":{"251":1,"423":1,"424":1}}],["стандартными",{"2":{"250":1}}],["стандартным",{"2":{"242":1,"263":1,"321":1}}],["стандартный",{"2":{"221":1,"366":1,"419":1,"580":1}}],["стандартизирован",{"2":{"263":1}}],["стандартизации",{"2":{"155":1}}],["стандарты",{"0":{"488":1},"2":{"155":1,"156":1,"263":1,"414":1,"490":1}}],["стандарту",{"2":{"144":1,"145":1}}],["стандарте",{"2":{"125":1,"258":1,"416":1}}],["стандартами",{"2":{"155":1,"174":1,"240":1}}],["стандарта",{"2":{"123":1}}],["стандарт",{"2":{"123":1,"125":1,"138":1,"240":1,"481":1}}],["станет",{"2":{"95":1,"157":1,"338":1,"404":1,"457":1}}],["старайтесь",{"2":{"487":1,"491":1}}],["старается",{"2":{"327":1}}],["старой",{"2":{"396":1}}],["старого",{"2":{"132":1,"181":1,"483":1}}],["старте",{"2":{"573":1,"590":1}}],["стартер",{"2":{"541":1}}],["старт",{"2":{"446":1}}],["стартовый",{"2":{"298":1}}],["стартовать",{"2":{"294":1}}],["стартовом",{"2":{"186":1}}],["стартового",{"2":{"156":1,"179":1}}],["стартапе",{"2":{"479":1}}],["старта",{"2":{"83":1,"570":1}}],["старых",{"2":{"132":2}}],["старыми",{"0":{"132":1},"2":{"132":2}}],["старый",{"2":{"62":1}}],["старший",{"2":{"123":1}}],["стадию",{"2":{"72":1}}],["стадии",{"0":{"72":1},"2":{"70":1,"73":1,"168":1}}],["статуса",{"2":{"414":1}}],["статус",{"2":{"369":1,"415":1}}],["статистика",{"2":{"457":1}}],["статистики",{"2":{"340":1,"429":1,"570":1}}],["статичен",{"2":{"407":1}}],["статическое",{"2":{"180":1}}],["статических",{"2":{"399":1,"410":1}}],["статически",{"2":{"357":1}}],["статическими",{"2":{"399":1}}],["статическим",{"2":{"211":1}}],["статический",{"0":{"357":1},"2":{"145":1,"399":1,"404":1,"455":1}}],["статические",{"2":{"145":1,"181":1,"399":1,"408":1}}],["статичной",{"2":{"155":1}}],["статичный",{"2":{"492":2}}],["статичных",{"2":{"425":1}}],["статичным",{"2":{"67":1,"483":1}}],["статичные",{"2":{"6":1}}],["статей",{"2":{"273":1,"490":1}}],["стать",{"2":{"202":1,"268":1,"327":1,"335":1,"365":1,"436":1,"476":1,"491":2}}],["статья",{"2":{"125":1,"479":1}}],["статье",{"2":{"123":1,"436":1,"470":1,"474":1,"490":1}}],["статьи",{"0":{"0":1},"2":{"138":1,"168":1,"273":1,"291":1,"462":1}}],["сваливает",{"2":{"482":1}}],["светлой",{"2":{"515":1,"522":1,"591":1}}],["светлый",{"2":{"291":1}}],["свете",{"2":{"320":1}}],["сведем",{"2":{"309":1,"325":1}}],["сведите",{"2":{"247":1}}],["сверху",{"2":{"29":2,"35":1,"117":1,"232":1,"298":1,"502":1}}],["свидетельства",{"2":{"122":1}}],["свыше",{"2":{"47":1}}],["связать",{"2":{"401":1}}],["связали",{"2":{"297":1}}],["связан",{"2":{"248":1,"286":1,"293":1}}],["связана",{"2":{"198":1,"227":1}}],["связано",{"2":{"144":1,"179":1,"272":1,"338":1,"339":1,"445":1,"465":1}}],["связанную",{"2":{"332":1,"416":1}}],["связанная",{"2":{"274":1,"297":1}}],["связанными",{"2":{"160":1}}],["связанные",{"2":{"139":1,"248":1,"435":1,"436":1,"437":1,"476":1,"477":1}}],["связанный",{"2":{"122":1,"404":1}}],["связанных",{"2":{"74":1,"155":1,"187":1,"453":1}}],["связанного",{"2":{"199":1}}],["связанное",{"2":{"50":1,"362":1}}],["связанность",{"0":{"34":1},"2":{"34":1,"436":1,"477":1}}],["связаны",{"2":{"2":1,"3":2,"123":1,"149":1,"244":1,"270":1,"350":1,"353":1,"445":1,"483":1}}],["связывание",{"2":{"334":1}}],["связыванием",{"2":{"166":1}}],["связываем",{"2":{"307":1}}],["связывает",{"2":{"162":1,"167":1}}],["связью",{"2":{"305":1}}],["связь",{"2":{"95":1,"138":1,"199":2,"220":1,"248":1,"249":1,"306":1,"309":1,"331":1,"338":1}}],["связей",{"0":{"352":1},"2":{"73":1}}],["связями",{"2":{"17":1}}],["связи",{"2":{"6":1,"43":1,"79":1,"122":3,"126":1,"152":1,"160":1,"187":1,"229":1,"241":1,"258":1,"291":1,"325":1,"327":1,"348":1,"351":1,"369":1,"397":1,"399":1,"425":1,"438":1,"442":1,"444":2,"457":1,"546":1,"570":1}}],["сводка",{"2":{"369":1}}],["сводки",{"2":{"369":1}}],["сводные",{"2":{"369":1}}],["сворачивать",{"2":{"198":1}}],["свою",{"2":{"157":1,"159":1,"194":2,"234":1,"241":1,"248":1,"299":1,"307":1,"399":1,"409":1,"422":1,"436":1,"448":1,"458":1,"478":2,"483":1,"484":1,"506":1,"573":1}}],["свободный",{"2":{"416":1}}],["свободного",{"2":{"416":1}}],["свободно",{"2":{"180":1,"252":1,"337":1}}],["свободна",{"2":{"63":1}}],["свободу",{"2":{"145":1,"160":1}}],["своя",{"2":{"95":1,"396":1,"474":1}}],["свое",{"2":{"164":1,"180":1,"234":1,"279":1,"313":1,"375":1,"414":1,"421":1,"491":1}}],["своей",{"2":{"96":1,"111":1,"124":1,"148":1,"174":1,"191":1,"195":1,"234":1,"248":1,"492":1}}],["своего",{"2":{"40":1,"124":2,"138":1,"142":1,"222":1,"227":1,"276":1,"301":1,"306":1,"345":1,"377":1,"492":1}}],["своему",{"2":{"180":1,"319":1,"327":1,"346":1,"429":2,"465":1}}],["своем",{"2":{"40":1,"95":1,"181":1,"327":1,"414":1,"422":1,"490":1}}],["своё",{"2":{"26":1,"47":2,"96":1}}],["свойству",{"2":{"215":1,"227":1}}],["свойств",{"2":{"130":2,"187":2,"213":1,"227":1,"315":1,"369":1,"413":1,"444":1}}],["свойством",{"2":{"130":1,"320":1}}],["свойство",{"0":{"129":1},"2":{"129":1,"187":2,"196":1,"217":1,"227":1,"321":1,"368":2,"452":1}}],["свойстве",{"2":{"126":1,"216":1,"368":1}}],["свойствах",{"2":{"215":1}}],["свойствами",{"2":{"129":1,"130":1,"187":1,"226":1,"315":1,"316":1,"452":1,"492":1}}],["свойствам",{"2":{"83":1,"452":1,"453":1}}],["свойства",{"2":{"16":1,"129":1,"131":1,"160":1,"187":5,"188":1,"227":1,"314":1,"316":5,"321":1,"334":1,"365":1,"407":1}}],["свой",{"0":{"124":1},"2":{"4":1,"12":1,"23":1,"39":1,"41":1,"59":2,"96":3,"124":2,"151":1,"159":1,"160":2,"181":1,"198":1,"201":4,"240":1,"298":1,"396":1,"425":2,"444":1,"466":1,"483":1,"491":3}}],["своих",{"2":{"96":1,"152":1,"182":1,"216":1,"239":1,"244":1,"308":1,"309":1,"325":1,"327":1,"409":1,"492":1}}],["своими",{"2":{"180":1,"327":1,"396":1,"483":1}}],["своим",{"2":{"41":1,"59":1,"121":1,"251":1,"306":1,"352":1,"430":1,"457":1,"463":1,"478":1}}],["свои",{"2":{"3":1,"23":2,"96":1,"130":1,"174":1,"189":1,"223":1,"224":1,"231":1,"249":1,"302":1,"311":1,"361":1,"372":1,"397":1,"399":1,"415":1,"429":2,"436":1,"447":1,"457":1,"467":1,"468":1,"477":1,"478":2,"482":1,"485":1,"490":2}}],["соцсетями",{"2":{"570":1}}],["социальными",{"2":{"156":1}}],["социальных",{"0":{"273":1},"2":{"96":1,"273":3,"279":1,"293":1}}],["социально",{"2":{"96":1}}],["сорс",{"2":{"491":1}}],["сортировки",{"2":{"266":1}}],["соединяет",{"2":{"436":1,"476":1}}],["соединяться",{"2":{"422":1}}],["соединению",{"2":{"292":1}}],["соединений",{"2":{"145":1}}],["соединение",{"2":{"145":1,"291":1,"330":1}}],["соединения",{"2":{"138":1,"145":1,"319":1}}],["сотрудничества",{"2":{"287":1}}],["сотрудничестве",{"2":{"239":1}}],["сотни",{"2":{"274":1,"444":1}}],["сотен",{"2":{"200":1}}],["сопутствующей",{"2":{"478":2}}],["сопутствующие",{"2":{"478":1}}],["сопутствующих",{"2":{"282":1}}],["сопоставлены",{"2":{"413":1}}],["сопоставленный",{"2":{"184":1}}],["сопоставляет",{"2":{"400":1}}],["сопоставимое",{"2":{"479":1}}],["сопоставимости",{"2":{"306":1}}],["сопоставить",{"2":{"320":1}}],["сопровождение",{"2":{"423":1}}],["сопровождения",{"2":{"174":1}}],["сопровождаемым",{"2":{"278":1}}],["сопровождаемость",{"2":{"74":1,"192":1}}],["сопровождать",{"2":{"258":1}}],["сопровождаться",{"2":{"253":1}}],["сочетании",{"2":{"165":1,"209":1,"221":1,"256":1}}],["сокращайте",{"2":{"248":1}}],["сокращения",{"0":{"501":1}}],["сокращение",{"0":{"162":1,"167":1},"2":{"167":1,"444":1}}],["сокращенное",{"2":{"362":1}}],["сокращенный",{"2":{"162":1}}],["сокращенайте",{"2":{"248":1}}],["сократить",{"2":{"142":1}}],["соглашается",{"2":{"286":1,"291":1,"298":1}}],["соглашению",{"2":{"359":1,"363":1}}],["соглашений",{"2":{"169":1,"174":1,"175":1,"181":1,"198":1}}],["соглашениям",{"2":{"407":1}}],["соглашения",{"0":{"169":1},"1":{"170":1,"171":1,"172":1,"173":1,"174":1},"2":{"174":3,"176":1,"180":1,"201":1,"360":1}}],["соглашением",{"2":{"360":1}}],["соглашение",{"2":{"160":1,"279":1,"360":1,"401":1,"447":2}}],["согласия",{"2":{"298":2}}],["согласиться",{"2":{"298":1}}],["согласие",{"2":{"279":1,"319":2}}],["согласовать",{"2":{"212":1}}],["согласования",{"2":{"291":1}}],["согласование",{"2":{"74":1}}],["согласованности",{"2":{"242":1}}],["согласованность",{"2":{"183":1}}],["согласны",{"2":{"174":1}}],["согласно",{"2":{"142":1,"144":1,"200":1,"242":1,"271":1,"293":1,"449":1}}],["сослаться",{"2":{"408":1}}],["сосредоточиться",{"2":{"267":1,"327":1,"338":1,"436":1,"444":1,"445":2,"476":1}}],["сосредоточились",{"2":{"218":1,"304":1}}],["сосредоточимся",{"2":{"157":1,"184":1,"289":1,"304":1,"319":1,"363":1,"369":1,"397":1,"422":1,"442":1}}],["сосредоточен",{"2":{"187":1}}],["состав",{"2":{"419":1}}],["составному",{"2":{"575":1}}],["составной",{"2":{"363":1}}],["составными",{"2":{"304":1}}],["составление",{"0":{"350":1},"1":{"351":1,"352":1,"353":1,"354":1}}],["составлять",{"2":{"352":1}}],["составляющая",{"2":{"399":1}}],["составляющие",{"2":{"142":1,"316":1,"421":1}}],["составляют",{"2":{"239":1,"399":1}}],["составляет",{"2":{"142":1,"319":1}}],["составителя",{"2":{"502":1}}],["составит",{"2":{"59":1}}],["состоящую",{"2":{"194":1}}],["состоящее",{"2":{"142":1}}],["состоящая",{"2":{"96":1}}],["состоять",{"2":{"478":1}}],["состоят",{"2":{"142":1,"194":1,"200":1,"334":2}}],["состоянию",{"2":{"209":1,"315":2,"352":1}}],["состоянии",{"2":{"198":1,"234":2,"252":2,"258":1,"305":1,"368":1,"369":1,"415":1,"466":1}}],["состояний",{"2":{"174":1,"188":1,"320":1,"369":4}}],["состояния",{"0":{"312":1},"1":{"313":1},"2":{"166":1,"168":1,"187":1,"188":1,"252":2,"299":1,"304":1,"311":2,"313":1,"318":1,"323":1,"350":1,"352":2,"353":2,"367":1,"368":1,"369":2,"463":1}}],["состояниями",{"2":{"126":1,"318":1,"369":2,"371":1,"388":1}}],["состояние",{"2":{"164":2,"168":1,"253":1,"258":1,"263":1,"312":2,"313":2,"314":2,"315":1,"318":1,"352":3,"367":1,"368":1,"369":3,"417":1,"478":2}}],["состоянием",{"2":{"126":1,"134":2,"312":2,"313":1,"314":3,"324":1,"352":1,"362":1,"376":1,"407":1,"483":1}}],["состоит",{"2":{"28":1,"72":1,"74":1,"86":1,"152":1,"155":1,"158":1,"159":1,"231":1,"315":1,"331":1,"547":1}}],["солидно",{"2":{"470":1}}],["солидных",{"2":{"106":1}}],["соли",{"2":{"156":1}}],["содержащая",{"2":{"328":1,"416":1,"478":1}}],["содержащее",{"2":{"268":1}}],["содержащиеся",{"2":{"448":1}}],["содержащим",{"2":{"404":1}}],["содержащимся",{"2":{"225":1}}],["содержащий",{"2":{"159":1,"160":1,"296":1,"315":1,"369":1}}],["содержащих",{"2":{"152":1,"466":1}}],["содержатся",{"2":{"345":1}}],["содержат",{"2":{"198":1,"332":1,"345":1,"477":1,"490":1}}],["содержать",{"2":{"158":1,"160":1,"187":2,"296":1,"314":2,"319":1,"328":1,"357":1,"407":1,"416":2,"417":1,"420":1,"422":1,"508":1,"568":1}}],["содержанием",{"2":{"264":1}}],["содержание",{"2":{"176":1,"239":1,"368":1}}],["содержимого",{"2":{"248":2,"257":1,"260":1,"261":1,"267":1,"362":1,"535":1,"581":1}}],["содержимое",{"2":{"92":1,"157":2,"159":1,"179":1,"180":1,"186":1,"243":1,"271":1,"273":1,"327":1,"362":6,"367":1,"492":1,"525":1}}],["содержимым",{"2":{"168":1,"368":1,"403":1}}],["содержите",{"2":{"201":1}}],["содержит",{"2":{"125":2,"159":1,"160":1,"162":1,"180":1,"226":1,"328":1,"352":1,"363":1,"369":2,"416":2,"419":1,"452":1,"453":1}}],["содержится",{"2":{"96":1,"328":1,"416":1}}],["соотношения",{"2":{"457":1}}],["соотноситься",{"2":{"352":1}}],["соответствовал",{"2":{"179":1}}],["соответствовать",{"2":{"143":1,"234":1,"291":1,"303":1,"404":1}}],["соответствует",{"2":{"145":1,"156":1,"187":1,"215":1,"301":2,"396":1,"400":1,"410":1}}],["соответствуют",{"2":{"143":1,"250":1,"340":1,"448":1}}],["соответствующую",{"2":{"144":1,"185":1,"314":1,"396":1,"447":1,"456":1}}],["соответствующим",{"2":{"198":1,"415":1,"452":1}}],["соответствующих",{"2":{"181":1,"194":1,"341":1,"385":1,"541":1}}],["соответствующий",{"2":{"96":1,"121":1,"225":1,"332":1,"335":1,"340":1,"362":1,"369":1,"407":1,"416":1,"474":1}}],["соответствующие",{"2":{"51":1,"326":1,"401":1,"407":1,"410":1,"414":1,"444":1}}],["соответствующему",{"2":{"224":2,"331":1,"411":1}}],["соответствующем",{"2":{"198":1}}],["соответствующее",{"2":{"165":1}}],["соответствующей",{"2":{"59":1,"340":1,"538":1}}],["соответствующего",{"2":{"17":1,"304":1,"421":1,"446":1}}],["соответствия",{"2":{"368":1,"414":1,"442":1,"444":1}}],["соответствии",{"2":{"143":1,"156":1,"180":1,"187":2,"199":1,"224":1,"225":2,"252":1,"291":1,"299":1,"300":1,"346":1,"351":1,"415":1,"420":1,"444":1,"459":1,"491":1,"587":1}}],["соответствие",{"2":{"74":1,"346":1,"410":1,"444":1,"453":1}}],["соответственно",{"2":{"47":1,"59":2,"125":1,"134":1,"139":1,"184":1,"327":1,"368":1,"415":1,"490":1,"492":1}}],["сообщает",{"2":{"463":1}}],["сообщить",{"2":{"258":1,"357":1,"420":1}}],["сообществе",{"2":{"458":1}}],["сообщество",{"2":{"184":1}}],["сообщением",{"2":{"465":1}}],["сообщение",{"2":{"226":1,"255":1,"299":1,"328":4,"329":1,"332":1,"333":1,"334":2,"335":1,"336":1,"340":1,"447":1,"465":2,"500":1}}],["сообщений",{"2":{"138":2,"304":1,"308":1,"309":4,"310":1,"312":1,"324":1,"327":1,"334":1,"335":1,"420":1,"448":1}}],["сообщениями",{"2":{"328":1,"334":1,"466":1}}],["сообщения",{"2":{"138":1,"256":1,"310":1,"327":1,"332":2,"334":2,"345":1,"420":1,"483":1}}],["соображения",{"0":{"438":1},"1":{"439":1,"440":1,"441":1},"2":{"218":1,"424":1}}],["соблазн",{"2":{"276":1}}],["соблюдение",{"2":{"360":1}}],["соблюдения",{"2":{"291":1}}],["соблюдаем",{"2":{"308":1}}],["соблюдаться",{"2":{"192":1}}],["соблюдая",{"2":{"181":1}}],["соблюдали",{"2":{"174":1}}],["соблюсти",{"2":{"195":1}}],["собеседованию",{"2":{"491":1}}],["собеседник",{"2":{"255":1}}],["соберет",{"2":{"157":1}}],["собирать",{"2":{"421":2}}],["собирает",{"2":{"352":1,"415":1,"429":1,"458":1}}],["собираемся",{"2":{"179":1}}],["собираемого",{"2":{"134":1}}],["собирают",{"2":{"338":1}}],["собираются",{"2":{"168":1,"201":1,"279":1}}],["собирались",{"2":{"199":1}}],["событии",{"2":{"198":1}}],["событий",{"0":{"309":1,"352":1},"1":{"310":1,"311":1},"2":{"187":1,"222":4,"223":2,"231":1,"310":1,"312":1,"324":1,"332":1,"357":1,"358":1,"359":2,"363":1,"400":1,"407":2,"451":1,"453":1,"466":1}}],["событию",{"2":{"187":1,"198":1,"307":1,"368":1}}],["событиям",{"2":{"363":1,"452":1}}],["событиями",{"2":{"207":1,"222":1,"360":1}}],["событиях",{"2":{"332":1}}],["события",{"0":{"173":1,"358":1},"2":{"160":1,"198":3,"222":1,"223":1,"298":2,"299":1,"306":2,"308":1,"309":2,"311":3,"332":1,"335":1,"350":1,"352":2,"353":2,"358":2,"359":3,"363":1,"369":1,"404":1,"407":2,"410":1,"453":5,"463":1,"481":1}}],["событием",{"2":{"198":2,"307":1,"332":1}}],["событие",{"2":{"131":1,"167":4,"198":1,"222":4,"223":3,"227":1,"253":1,"255":1,"260":1,"298":5,"299":1,"309":2,"311":2,"328":3,"333":1,"353":2,"359":2,"407":1,"410":1,"446":1,"453":8,"462":1}}],["собственная",{"2":{"337":1}}],["собственную",{"2":{"319":1,"321":1,"448":2,"458":1}}],["собственными",{"2":{"327":1}}],["собственные",{"2":{"161":1,"174":1,"187":1,"231":1,"251":1,"445":1}}],["собственный",{"2":{"159":1,"240":1,"298":1,"334":1,"416":1,"444":1,"454":1}}],["собственных",{"2":{"145":1,"468":1}}],["собственной",{"2":{"340":1,"415":2,"419":1,"447":1,"448":1}}],["собственно",{"2":{"275":1,"402":1}}],["собственного",{"2":{"260":1,"321":1,"345":1,"424":1}}],["собственное",{"2":{"180":1,"231":1,"256":1,"269":1,"422":1}}],["собственном",{"2":{"153":1,"291":1,"327":1,"403":1}}],["собственному",{"2":{"142":1}}],["собственности",{"2":{"142":1}}],["собрана",{"2":{"363":1}}],["собранных",{"2":{"415":1}}],["собранные",{"2":{"144":1}}],["собранной",{"2":{"352":1}}],["собранную",{"2":{"180":1}}],["собрано",{"2":{"159":1}}],["собрать",{"2":{"144":1,"180":1,"420":1,"429":1}}],["собой",{"2":{"3":1,"6":1,"17":1,"142":1,"155":2,"156":1,"158":1,"159":1,"180":2,"187":1,"198":1,"228":1,"236":1,"245":1,"251":1,"263":1,"271":1,"276":1,"287":1,"294":1,"295":1,"306":1,"319":2,"334":1,"340":1,"344":1,"350":1,"351":1,"356":1,"369":1,"382":1,"399":1,"416":1,"430":1,"453":1}}],["сохраненные",{"2":{"337":1}}],["сохранения",{"2":{"160":1,"168":1,"448":1}}],["сохранением",{"2":{"363":2,"575":1}}],["сохранение",{"0":{"113":1},"2":{"319":1,"320":1,"508":2}}],["сохранил",{"2":{"396":1}}],["сохранили",{"2":{"230":1}}],["сохранив",{"2":{"231":1}}],["сохранится",{"2":{"322":1}}],["сохраните",{"2":{"187":1,"465":2}}],["сохранить",{"2":{"34":1,"123":1,"226":1,"267":1,"298":1,"327":1,"415":1,"422":1,"465":1,"492":1}}],["сохраним",{"2":{"179":1,"198":1,"368":1}}],["сохраняются",{"2":{"319":1,"363":1}}],["сохраняющий",{"2":{"228":1}}],["сохраняем",{"2":{"212":1,"230":1,"298":1,"334":1,"343":2}}],["сохраняется",{"2":{"156":1,"319":1}}],["сохраняет",{"2":{"123":1,"168":1,"212":1,"227":1,"396":1,"429":1}}],["сохраняя",{"2":{"183":1,"228":1}}],["сохранялся",{"2":{"113":1}}],["сохраняться",{"2":{"402":1}}],["сохранять",{"2":{"95":1,"96":1,"113":2,"124":1,"181":1,"457":1}}],["софт",{"2":{"63":1}}],["сожалению",{"2":{"51":1,"199":1,"249":1,"275":1,"430":1,"491":1}}],["создаётся",{"2":{"588":1}}],["создателем",{"2":{"458":1}}],["создать",{"2":{"26":1,"58":1,"63":1,"65":1,"96":2,"104":1,"142":2,"154":1,"180":1,"184":1,"185":1,"187":1,"189":1,"194":1,"200":1,"229":2,"239":2,"244":1,"249":1,"287":1,"309":1,"314":1,"320":1,"328":1,"332":1,"338":1,"343":1,"348":2,"354":2,"368":1,"372":1,"400":1,"401":1,"403":1,"404":1,"405":1,"407":1,"410":1,"420":1,"426":1,"430":1,"448":3,"458":1,"462":1,"464":1,"466":1,"478":1,"483":3,"540":1,"541":1}}],["создающим",{"2":{"541":1}}],["создающий",{"2":{"442":1}}],["создающего",{"2":{"541":1}}],["создают",{"2":{"165":1,"181":1,"202":1,"289":1,"319":1,"340":1}}],["создаются",{"2":{"142":1,"231":1,"287":1,"387":1}}],["создайте",{"2":{"334":1,"344":1,"366":1,"368":1,"401":1,"403":1,"447":1,"451":1,"452":1,"464":1,"465":1,"561":1}}],["создав",{"2":{"312":1,"321":1,"351":1,"465":1}}],["создавали",{"2":{"408":1}}],["создавалось",{"2":{"308":1}}],["создавало",{"2":{"129":1}}],["создаваемый",{"2":{"319":1}}],["создаваемой",{"2":{"300":1}}],["создавая",{"2":{"183":1,"258":1,"260":1,"327":1,"399":1,"438":1}}],["создаваться",{"2":{"96":1}}],["создавать",{"2":{"59":2,"155":2,"161":1,"187":1,"189":1,"195":1,"200":1,"228":1,"235":1,"289":1,"319":1,"333":1,"337":1,"359":2,"365":1,"390":1,"397":1,"400":1,"402":2,"408":1,"410":1,"451":1,"453":1,"490":1,"541":1,"542":1}}],["создаст",{"2":{"160":1,"179":1,"404":1,"535":2}}],["создастся",{"2":{"121":1}}],["созданы",{"2":{"462":1,"492":1}}],["создано",{"2":{"337":1,"446":1}}],["создана",{"2":{"180":2,"396":1}}],["созданном",{"2":{"444":1,"492":1}}],["созданному",{"2":{"160":1}}],["созданного",{"2":{"299":1,"447":1}}],["созданные",{"2":{"327":1}}],["созданными",{"2":{"321":1}}],["созданных",{"2":{"187":1}}],["созданный",{"2":{"179":1,"328":1,"458":1,"481":1}}],["создан",{"2":{"132":1,"261":1,"350":1,"455":1,"462":1,"502":1}}],["созданию",{"2":{"160":1,"180":1,"204":1,"363":1}}],["создания",{"2":{"61":1,"121":1,"127":1,"128":1,"130":1,"142":2,"153":1,"156":4,"157":2,"158":2,"160":1,"168":1,"177":1,"179":2,"180":2,"187":1,"188":1,"189":2,"197":1,"198":1,"221":2,"226":1,"231":2,"240":1,"247":1,"248":1,"271":1,"289":1,"290":1,"291":1,"300":1,"302":1,"304":1,"309":1,"312":1,"315":1,"320":1,"323":1,"329":2,"333":1,"334":1,"336":1,"337":1,"338":3,"344":2,"345":4,"348":1,"350":2,"360":1,"362":1,"364":1,"365":1,"369":1,"375":1,"376":1,"386":1,"389":1,"399":1,"400":1,"401":1,"402":1,"407":1,"408":1,"410":1,"416":2,"417":1,"434":1,"446":1,"447":1,"448":1,"452":1,"453":1,"456":1,"462":2,"479":1,"482":1,"541":2}}],["созданием",{"2":{"59":1,"139":1}}],["создание",{"0":{"58":1,"119":1,"384":1,"429":1},"1":{"120":1,"121":1},"2":{"177":1,"180":1,"190":1,"209":1,"291":1,"296":1,"328":1,"359":1,"400":1,"415":1,"429":2,"430":1,"435":1,"442":2,"457":1,"467":1,"476":1,"492":1,"538":1,"541":1,"542":2,"591":1}}],["создании",{"0":{"143":1,"569":1},"1":{"144":1,"570":1,"571":1,"572":1,"573":1},"2":{"41":1,"88":1,"125":1,"129":1,"156":3,"224":1,"228":1,"304":1,"320":1,"407":1,"447":1,"542":2}}],["создаем",{"2":{"114":1,"117":1,"120":1,"157":1,"167":1,"187":2,"219":1,"223":1,"261":1,"308":1,"313":1,"318":1,"321":2,"328":1,"334":1,"339":1,"345":1,"359":1,"360":1,"363":2,"368":2,"384":1,"404":2,"407":1,"417":1}}],["создается",{"2":{"157":1,"298":1,"354":1,"416":1,"463":1}}],["создает",{"2":{"48":1,"123":1,"142":1,"180":1,"187":1,"188":1,"212":1,"220":1,"243":1,"291":1,"313":1,"353":1,"421":1,"458":1,"474":1,"545":1}}],["создадим",{"2":{"51":1,"118":1,"141":1,"177":1,"179":2,"186":2,"198":1,"218":1,"231":1,"321":1,"333":1,"335":1,"337":2,"338":1,"340":1,"365":1,"371":1,"397":1,"446":1,"448":1,"463":1}}],["создали",{"2":{"17":1,"188":1,"189":1,"297":1,"339":1,"351":1,"368":1,"369":1,"371":1,"402":1,"407":1,"423":1}}],["совпадении",{"2":{"492":1}}],["совпадения",{"2":{"463":1}}],["совпадать",{"2":{"410":1}}],["совпадает",{"2":{"362":1}}],["совпадают",{"2":{"220":1,"396":1,"416":1}}],["совокупность",{"2":{"319":1,"445":1}}],["совместим",{"2":{"448":1}}],["совместимости",{"2":{"160":1,"363":1}}],["совместимость",{"0":{"132":1},"2":{"126":1,"132":3,"226":1}}],["совместимых",{"2":{"152":1}}],["совместимым",{"2":{"126":1}}],["совместному",{"2":{"365":1}}],["совместного",{"2":{"311":1,"320":1,"359":1,"361":1}}],["совместно",{"2":{"145":1,"160":1,"312":1,"327":1,"454":1,"458":1,"466":1}}],["совместное",{"2":{"125":1,"363":1}}],["совместную",{"2":{"74":1}}],["совершается",{"2":{"278":1}}],["совершать",{"2":{"100":1}}],["совершить",{"2":{"275":1,"368":1}}],["совершенствования",{"2":{"190":1}}],["совершенствование",{"2":{"188":1}}],["совершенствовать",{"2":{"188":1,"333":1,"397":1}}],["совершенно",{"2":{"159":1,"168":1,"319":1}}],["советуется",{"2":{"396":1,"474":1}}],["советы",{"0":{"471":1},"1":{"472":1,"473":1,"474":1},"2":{"64":1,"96":1,"483":1}}],["совет",{"2":{"22":1,"160":1,"164":1,"174":1,"196":1,"201":1,"218":1,"233":1,"422":1,"491":1,"546":1}}],["совсем",{"2":{"96":1,"230":1,"402":1,"482":1,"492":1}}],["современный",{"2":{"178":1,"377":1,"428":1,"429":1,"474":1,"483":1,"491":1}}],["современных",{"2":{"178":1,"231":1,"318":1,"323":1,"346":2,"377":1,"423":1}}],["современными",{"2":{"251":1,"323":1}}],["современным",{"2":{"159":1,"538":1}}],["современные",{"0":{"488":1},"2":{"44":1,"62":1,"200":1,"289":1,"414":1,"425":1,"429":1,"466":1}}],["современная",{"2":{"155":1}}],["современной",{"2":{"178":1,"197":1,"468":1}}],["современном",{"2":{"158":1,"327":1}}],["современного",{"2":{"89":1,"132":1,"542":1}}],["современное",{"2":{"2":1}}],["со",{"0":{"132":1},"2":{"11":1,"12":1,"17":1,"25":1,"41":1,"59":1,"67":1,"88":1,"121":2,"125":2,"130":2,"132":2,"139":1,"143":1,"160":1,"162":1,"171":1,"179":2,"180":2,"183":1,"187":4,"218":1,"222":1,"227":1,"231":1,"234":1,"237":1,"243":1,"248":1,"258":1,"263":1,"273":2,"289":1,"298":1,"299":1,"300":1,"306":1,"311":2,"315":1,"318":1,"321":1,"327":1,"335":1,"336":1,"344":1,"346":1,"358":1,"364":1,"368":1,"369":1,"396":1,"402":2,"403":1,"404":1,"407":2,"410":1,"416":2,"428":1,"452":2,"474":1,"478":1,"492":4,"511":1,"528":1}}],["с",{"0":{"50":1,"81":1,"126":1,"152":1,"181":1,"250":1,"276":1,"301":1,"309":1,"314":1,"320":1,"325":1,"333":1,"337":1,"348":1,"350":1,"360":1,"364":1,"385":1,"389":1,"393":1,"458":1,"466":1},"1":{"82":1,"83":1,"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"182":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"310":1,"311":1,"315":1,"316":1,"317":1,"318":1,"321":1,"322":1,"326":1,"327":1,"328":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":2,"335":2,"336":2,"337":1,"338":2,"339":2,"340":2,"341":2,"342":2,"343":2,"344":1,"345":1,"346":1,"347":1,"349":1,"350":1,"351":2,"352":2,"353":2,"354":2,"355":1,"356":1,"357":1,"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1,"365":1,"366":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1},"2":{"2":2,"3":5,"6":1,"9":3,"11":3,"12":2,"17":3,"22":1,"23":1,"29":2,"30":1,"33":1,"34":2,"35":4,"38":2,"39":2,"40":1,"41":3,"43":1,"47":1,"48":1,"50":3,"56":1,"59":1,"62":1,"63":1,"67":4,"70":1,"72":1,"73":1,"74":3,"79":1,"88":2,"89":4,"96":5,"98":2,"100":1,"101":1,"104":1,"106":1,"107":4,"111":4,"112":3,"113":1,"114":3,"117":1,"122":5,"123":13,"124":10,"125":3,"126":4,"127":1,"130":3,"131":4,"132":1,"137":2,"138":4,"139":5,"140":1,"142":5,"143":1,"144":1,"145":7,"147":1,"148":4,"149":2,"151":4,"152":4,"153":4,"155":4,"156":9,"157":3,"158":3,"159":8,"160":5,"161":1,"164":2,"165":1,"166":1,"167":4,"168":1,"169":1,"171":2,"172":1,"174":1,"175":1,"177":6,"178":6,"179":10,"180":11,"182":4,"183":7,"184":2,"185":5,"186":4,"187":20,"188":4,"190":3,"191":3,"192":1,"194":3,"195":2,"196":2,"197":2,"198":8,"199":6,"201":1,"202":3,"207":3,"209":1,"210":1,"212":2,"213":2,"215":1,"218":1,"220":3,"221":1,"223":3,"224":3,"225":3,"226":6,"227":1,"228":7,"229":3,"231":9,"232":1,"233":5,"234":15,"235":3,"237":7,"239":5,"240":4,"241":3,"242":2,"243":1,"244":4,"245":1,"246":1,"247":1,"248":4,"249":3,"250":2,"251":1,"252":3,"253":2,"254":3,"255":1,"256":3,"257":4,"258":2,"260":2,"261":3,"263":2,"265":1,"266":4,"267":1,"268":2,"270":1,"271":5,"272":2,"273":2,"274":2,"275":2,"276":1,"277":1,"278":2,"281":2,"283":1,"284":1,"285":2,"286":3,"287":4,"289":3,"290":1,"291":14,"292":1,"293":2,"294":4,"296":3,"297":2,"298":5,"299":7,"300":4,"301":2,"302":6,"304":6,"305":1,"306":3,"307":2,"308":3,"309":3,"311":6,"312":2,"313":5,"314":2,"315":3,"316":3,"318":3,"319":8,"320":4,"321":7,"322":3,"323":2,"325":5,"326":1,"327":6,"329":3,"330":3,"331":7,"332":3,"333":5,"334":5,"335":3,"336":2,"337":5,"338":8,"339":5,"340":3,"341":2,"342":1,"343":3,"345":7,"346":3,"347":2,"348":9,"350":3,"351":5,"352":6,"353":3,"354":2,"355":1,"356":3,"357":5,"358":3,"359":2,"360":8,"362":10,"363":7,"364":3,"365":1,"366":1,"367":2,"368":14,"369":8,"370":1,"371":2,"372":3,"375":3,"377":1,"379":1,"385":2,"388":1,"389":2,"390":2,"391":1,"396":4,"397":8,"399":8,"400":5,"401":3,"402":4,"404":8,"405":1,"406":3,"407":8,"408":4,"409":3,"410":7,"411":2,"413":8,"414":4,"415":2,"416":3,"417":1,"418":1,"419":4,"420":4,"421":9,"422":11,"423":3,"425":4,"426":3,"428":2,"429":3,"430":4,"433":1,"435":2,"436":6,"438":4,"442":4,"443":1,"444":11,"445":4,"446":3,"447":8,"448":10,"449":1,"450":1,"451":4,"452":2,"453":14,"454":1,"455":2,"456":4,"457":3,"458":5,"459":2,"460":1,"462":4,"463":4,"464":1,"465":9,"466":10,"467":1,"470":1,"471":1,"474":4,"476":6,"477":3,"478":11,"479":4,"481":1,"482":3,"483":10,"484":1,"485":1,"487":1,"491":12,"492":11,"501":3,"508":2,"515":2,"520":1,"535":3,"538":2,"540":1,"541":5,"542":6,"543":1,"545":1,"546":1,"547":3,"553":2,"561":1,"567":1,"570":1,"571":1,"572":1,"573":2,"575":3,"578":1,"579":1,"580":1,"587":1}}],["дня",{"2":{"491":1}}],["дней",{"2":{"487":1,"491":1}}],["дни",{"2":{"195":1,"419":1}}],["дюймов",{"2":{"430":1}}],["дэвиду",{"2":{"199":1}}],["думать",{"2":{"375":1}}],["думаю",{"2":{"196":1}}],["дубликата",{"2":{"369":1}}],["дубликаты",{"2":{"223":1}}],["дублированию",{"2":{"319":1}}],["дублирование",{"2":{"188":1,"199":1,"207":1,"319":1,"436":1,"476":1}}],["дублировать",{"2":{"123":1,"454":1}}],["дыхательной",{"2":{"194":1}}],["длительному",{"2":{"442":1}}],["длительное",{"2":{"258":1}}],["длительного",{"2":{"258":2}}],["длительных",{"2":{"234":1,"319":1}}],["длинный",{"2":{"260":1}}],["длинных",{"2":{"234":1,"348":1}}],["длинными",{"2":{"184":1}}],["длиной",{"2":{"196":1}}],["длину",{"2":{"187":1}}],["для",{"0":{"65":1,"124":1,"143":1,"154":1,"176":1,"190":1,"201":1,"236":1,"250":1,"262":1,"270":1,"278":1,"288":1,"303":1,"324":1,"344":1,"347":1,"372":1,"376":1,"424":1,"469":1,"476":1,"477":1,"560":1},"1":{"144":1,"204":1,"205":1,"206":1,"207":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"263":1,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1,"271":1,"272":1,"273":1,"274":1,"345":1,"561":1,"562":1},"2":{"2":1,"3":1,"4":1,"7":2,"9":2,"10":1,"12":2,"13":1,"17":5,"18":1,"22":4,"23":3,"27":2,"35":1,"36":1,"39":2,"40":2,"41":3,"47":3,"48":1,"50":1,"53":1,"56":1,"58":1,"59":4,"62":1,"63":3,"67":3,"69":1,"70":2,"72":1,"73":2,"74":2,"76":1,"82":1,"85":1,"89":1,"95":2,"96":3,"98":2,"99":1,"104":3,"106":3,"107":1,"111":1,"112":1,"113":2,"117":1,"118":1,"121":1,"122":1,"123":4,"124":3,"125":3,"126":2,"127":1,"128":5,"129":1,"130":5,"132":5,"134":2,"135":1,"137":3,"138":6,"139":4,"141":3,"142":20,"143":1,"144":2,"145":5,"148":2,"149":2,"150":2,"151":3,"152":10,"153":1,"154":1,"155":4,"156":8,"157":5,"158":5,"159":9,"160":11,"164":2,"165":2,"167":3,"168":6,"169":1,"171":1,"174":4,"175":1,"176":2,"177":3,"178":7,"179":8,"180":8,"181":2,"183":8,"184":13,"185":2,"186":3,"187":22,"189":2,"191":4,"194":2,"195":3,"196":1,"197":1,"198":4,"199":1,"200":1,"201":3,"202":7,"208":1,"210":1,"212":3,"213":2,"215":1,"217":3,"218":6,"219":5,"220":2,"222":1,"223":5,"224":5,"225":2,"226":6,"227":7,"228":4,"229":1,"230":1,"231":10,"232":7,"234":15,"235":2,"237":3,"239":4,"240":4,"241":2,"242":3,"243":2,"244":2,"245":1,"246":1,"247":3,"248":3,"249":5,"251":2,"252":2,"253":6,"254":4,"255":1,"256":3,"257":4,"258":3,"259":3,"260":3,"261":2,"263":4,"264":2,"265":1,"266":5,"267":3,"268":5,"269":1,"271":6,"273":1,"276":1,"277":1,"278":1,"281":2,"284":1,"285":1,"287":3,"289":5,"290":2,"291":12,"293":3,"294":3,"295":1,"296":2,"298":6,"299":12,"300":4,"301":1,"302":2,"303":2,"304":6,"305":3,"306":4,"307":1,"308":3,"310":1,"311":5,"312":4,"313":4,"315":2,"316":1,"317":2,"318":7,"319":15,"320":1,"321":4,"322":2,"323":2,"324":2,"325":4,"326":1,"327":7,"328":2,"329":1,"330":4,"331":3,"332":2,"333":3,"334":2,"335":1,"336":3,"337":3,"338":7,"339":3,"340":7,"341":4,"342":1,"343":5,"344":5,"345":10,"346":2,"347":1,"348":2,"350":2,"351":1,"352":7,"354":7,"356":3,"357":3,"358":2,"359":3,"360":5,"361":2,"362":5,"363":3,"364":2,"365":3,"367":1,"368":14,"369":11,"371":1,"375":3,"376":3,"377":2,"378":1,"380":1,"383":1,"384":1,"386":1,"387":1,"388":1,"389":1,"390":1,"391":1,"393":1,"394":1,"396":12,"397":1,"399":6,"400":2,"401":4,"402":3,"403":1,"404":3,"407":6,"408":1,"409":2,"410":5,"411":2,"413":3,"414":8,"415":3,"416":13,"417":3,"418":1,"419":3,"420":9,"421":6,"422":14,"423":2,"424":2,"425":3,"426":2,"427":1,"428":2,"429":8,"430":9,"431":1,"433":1,"436":7,"438":2,"441":2,"442":5,"444":5,"445":5,"446":6,"447":7,"448":5,"449":1,"450":3,"451":3,"452":4,"453":3,"454":2,"455":6,"456":6,"457":4,"458":5,"459":2,"460":1,"462":1,"463":3,"464":2,"465":1,"466":6,"467":2,"468":4,"469":2,"470":2,"471":1,"472":1,"474":8,"476":4,"477":4,"478":6,"479":3,"481":2,"482":8,"483":2,"485":1,"486":2,"487":1,"489":1,"490":2,"491":6,"492":18,"502":1,"506":2,"508":2,"515":3,"531":2,"537":1,"538":5,"540":1,"541":6,"543":2,"545":1,"546":3,"547":1,"550":1,"552":2,"561":1,"563":1,"570":6,"573":5,"575":4,"578":2,"588":4,"589":1,"590":1}}],["дриллинг",{"2":{"478":1}}],["драйверами",{"2":{"266":1}}],["древовидной",{"2":{"264":1,"309":1}}],["древней",{"2":{"237":1}}],["др",{"2":{"178":1,"291":1,"573":1}}],["дружелюбие",{"2":{"245":1}}],["дружественный",{"0":{"286":1}}],["дружественные",{"2":{"142":1}}],["дружественного",{"2":{"142":1}}],["другу",{"2":{"244":1,"332":1,"352":1,"436":1,"476":1}}],["другую",{"2":{"228":1,"283":1,"313":1,"319":1,"321":1,"357":1,"407":1,"415":1,"449":1,"464":1,"485":1}}],["другая",{"2":{"226":1,"228":1,"503":1}}],["друга",{"2":{"89":1,"228":1,"241":1,"268":1,"275":1,"306":1,"352":1,"422":1,"447":1,"454":1}}],["другого",{"2":{"105":1,"135":1,"141":1,"160":1,"199":1,"201":2,"218":1,"226":1,"227":1,"231":1,"268":1,"277":2,"345":1,"348":1,"401":1,"445":1,"478":2}}],["другой",{"0":{"127":1},"2":{"34":1,"39":1,"41":2,"95":1,"125":1,"156":1,"158":1,"187":1,"191":1,"218":1,"222":1,"225":1,"233":1,"243":1,"298":2,"311":1,"318":1,"357":1,"369":1,"372":1,"396":1,"399":1,"407":1,"414":1,"420":1,"438":1,"478":4,"483":1,"491":1,"541":1,"545":1}}],["другое",{"2":{"26":1,"36":1,"98":1,"148":1,"156":1,"160":1,"168":1,"179":1,"234":1,"298":1,"352":1,"355":1,"368":1,"422":1,"466":1,"478":1}}],["другому",{"2":{"201":1,"224":1,"359":1,"369":1}}],["другом",{"2":{"2":1,"3":1,"74":1,"124":1,"160":1,"181":1,"198":1,"232":1,"244":2,"246":1,"271":1,"304":2,"315":1,"319":1,"348":1,"350":1,"352":1,"356":1,"372":1,"428":1,"436":1,"477":1,"542":1}}],["другими",{"2":{"96":1,"114":1,"145":2,"180":1,"194":1,"198":1,"205":1,"209":1,"221":1,"231":1,"234":1,"237":1,"239":1,"241":1,"260":1,"284":1,"291":1,"298":1,"325":1,"327":1,"334":1,"354":1,"394":1,"399":1,"400":1,"407":1,"448":1,"478":1,"483":1,"492":1,"541":1}}],["другим",{"2":{"65":1,"114":1,"142":1,"156":1,"160":1,"180":1,"239":1,"246":1,"262":1,"264":1,"313":1,"319":1,"330":1,"352":1,"420":1,"422":1,"455":1,"465":1}}],["другие",{"0":{"135":1,"136":1,"150":1,"274":1},"2":{"4":1,"59":1,"113":1,"118":1,"124":1,"126":3,"133":1,"138":1,"145":1,"155":3,"156":1,"158":1,"159":3,"160":2,"167":1,"183":1,"186":1,"197":1,"211":1,"218":1,"222":1,"226":1,"227":1,"234":1,"240":1,"250":1,"258":1,"274":1,"291":1,"292":1,"304":1,"313":1,"319":2,"329":1,"337":1,"338":1,"352":1,"356":1,"357":1,"361":1,"362":1,"371":1,"376":1,"382":1,"392":1,"401":1,"404":1,"407":1,"408":1,"409":1,"422":1,"425":1,"426":1,"430":1,"438":1,"445":2,"448":1,"454":2,"456":1,"461":1,"464":1,"466":1,"482":1,"489":1,"492":1,"573":2}}],["других",{"0":{"0":1},"2":{"16":1,"21":1,"41":1,"98":1,"104":1,"137":1,"142":3,"150":2,"156":2,"168":2,"177":1,"180":1,"181":1,"183":1,"189":1,"195":1,"196":1,"201":1,"210":1,"212":2,"213":1,"241":1,"253":1,"268":4,"280":1,"293":1,"311":2,"314":1,"327":1,"329":1,"338":1,"340":1,"341":1,"345":2,"351":1,"363":1,"364":1,"375":1,"414":1,"425":1,"436":1,"466":1,"476":1,"482":2,"541":1,"573":1}}],["друг",{"2":{"2":1,"3":1,"74":1,"89":1,"198":1,"228":1,"232":1,"241":1,"244":3,"246":1,"268":1,"271":1,"275":1,"304":2,"306":1,"332":1,"348":1,"350":1,"352":3,"372":1,"422":1,"436":2,"447":1,"454":1,"476":1,"477":1,"542":1}}],["д",{"0":{"353":1},"2":{"73":2,"124":1,"126":1,"127":1,"131":1,"156":1,"157":1,"159":1,"160":2,"166":1,"168":1,"178":1,"180":3,"183":1,"194":1,"219":1,"222":1,"226":1,"229":1,"234":1,"239":5,"243":2,"248":2,"252":1,"254":1,"255":1,"256":1,"260":2,"291":3,"293":1,"294":1,"295":1,"306":1,"327":1,"328":1,"340":1,"362":1,"363":1,"370":2,"399":3,"404":1,"413":1,"414":1,"415":1,"419":1,"420":1,"421":2,"442":1,"444":3,"445":1,"448":3,"450":1,"451":1,"464":1,"467":1,"488":1,"492":1,"540":2,"542":4}}],["динамическая",{"2":{"400":1}}],["динамической",{"2":{"492":1}}],["динамическому",{"2":{"364":1}}],["динамического",{"2":{"357":2,"364":1,"404":1}}],["динамическое",{"2":{"161":1,"357":1,"413":1,"508":1}}],["динамических",{"2":{"399":1,"410":1,"415":1}}],["динамически",{"2":{"364":1,"399":1,"407":1,"492":1}}],["динамические",{"0":{"364":1},"2":{"318":1,"350":1,"353":1,"400":1,"408":1}}],["динамический",{"0":{"357":1},"2":{"180":1,"357":1}}],["динамичных",{"2":{"350":1}}],["динамичным",{"2":{"196":1,"547":1}}],["динамичными",{"2":{"38":1}}],["динамичного",{"2":{"571":1,"573":1}}],["динамично",{"2":{"95":1,"426":1,"482":1,"542":1,"543":1}}],["дисплее",{"2":{"240":1}}],["диспетчере",{"2":{"223":1}}],["диспетчером",{"2":{"222":1}}],["диспетчера",{"2":{"222":2,"223":1,"310":1,"335":1}}],["дистрибутивов",{"2":{"460":1}}],["дистрибутивах",{"2":{"460":2}}],["дистрибутива",{"2":{"144":1,"151":1,"153":1,"460":1}}],["дистрибуция",{"2":{"239":1}}],["дисциплину",{"2":{"444":1,"446":1}}],["дисциплине",{"2":{"380":1}}],["дисциплина",{"2":{"444":1,"457":2}}],["дисциплинами",{"2":{"239":2}}],["дисциплинах",{"2":{"196":1}}],["дисциплины",{"2":{"237":1,"239":1,"444":1,"446":1}}],["дисциплиной",{"2":{"191":1}}],["диске",{"2":{"377":1}}],["дисковое",{"2":{"319":1,"429":1}}],["дискуссия",{"2":{"254":1}}],["диска",{"2":{"149":1}}],["диск",{"2":{"123":1,"430":1}}],["диалога",{"2":{"367":2,"368":2,"369":1}}],["диалоге",{"2":{"265":1,"266":1}}],["диалог",{"2":{"265":2,"284":1,"353":2,"354":3,"367":2,"368":4}}],["диалоги",{"0":{"265":1},"2":{"248":1,"265":1,"352":1,"354":1,"365":1,"402":1}}],["диалоговые",{"2":{"351":1}}],["диалоговое",{"2":{"283":1}}],["диалогов",{"0":{"353":1},"2":{"248":1,"265":1,"352":1,"353":1,"354":1,"360":1,"371":1}}],["диапазоны",{"2":{"260":1}}],["диапазон",{"2":{"142":1}}],["диаграмме",{"2":{"194":1,"353":2}}],["диаграмму",{"2":{"158":1}}],["диаграмма",{"0":{"14":1},"2":{"14":2}}],["диаграммы",{"2":{"5":1,"14":2,"73":1,"309":1,"327":1,"331":1,"352":1,"489":1}}],["директивой",{"2":{"362":1}}],["директиву",{"2":{"261":1,"359":2,"362":1}}],["директиве",{"2":{"187":1,"359":1}}],["директивы",{"2":{"159":1,"161":2,"164":1,"167":2,"176":1,"180":1,"187":2,"359":1,"362":1,"365":1}}],["директив",{"0":{"161":1},"1":{"162":1,"163":1,"164":1,"165":1,"166":1,"167":1},"2":{"128":1,"167":1,"168":2,"175":1,"364":1}}],["директивами",{"2":{"161":1}}],["директива",{"0":{"358":1},"2":{"114":2,"161":1,"162":1,"163":1,"166":1,"167":1,"362":1}}],["директорий",{"2":{"427":1}}],["директориях",{"2":{"401":1}}],["директория",{"2":{"396":2}}],["директории",{"2":{"118":1,"143":2,"183":1,"344":1,"369":1,"447":1,"455":1,"463":1,"535":2,"547":1,"549":1}}],["директорию",{"2":{"105":1,"396":1}}],["дирректорию",{"2":{"104":1}}],["диктует",{"2":{"96":1}}],["дизайна",{"0":{"239":1},"2":{"122":1,"181":1,"240":2,"241":1,"242":1,"245":1,"246":1,"267":1,"271":1,"273":1,"351":1,"372":1,"385":1,"399":1,"415":1,"477":1,"482":1,"540":1,"542":1}}],["дизайну",{"2":{"22":1,"298":1}}],["дизайнерское",{"2":{"407":1}}],["дизайнер",{"2":{"240":2,"241":1,"242":1,"244":1}}],["дизайнеру",{"2":{"240":1}}],["дизайнерами",{"2":{"237":1,"287":1}}],["дизайнером",{"2":{"181":1,"392":1}}],["дизайне",{"2":{"22":2,"240":1,"369":1,"444":1}}],["дизайн",{"0":{"1":1,"24":1,"25":1,"74":1,"239":1,"433":1,"434":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"25":1,"26":1},"2":{"25":2,"26":1,"72":1,"74":2,"188":1,"206":1,"239":4,"248":1,"249":1,"271":1,"350":3,"351":3,"368":1,"369":1,"436":2,"444":2,"476":3,"477":1,"501":1}}],["дойти",{"2":{"492":1}}],["дойдем",{"2":{"261":1}}],["дожидаясь",{"2":{"436":1,"476":1}}],["дождаться",{"2":{"298":1}}],["доскролил",{"2":{"474":1}}],["дословно",{"2":{"299":1}}],["достойны",{"2":{"491":1}}],["достоинствами",{"2":{"195":1}}],["достигается",{"2":{"289":1,"416":1}}],["достигнет",{"2":{"246":1}}],["достигнем",{"2":{"194":1}}],["достижению",{"2":{"246":1}}],["достижений",{"2":{"159":1}}],["достижения",{"2":{"67":1,"187":1,"194":1,"268":1,"402":1}}],["достичь",{"2":{"65":1,"271":1}}],["доступе",{"2":{"491":1}}],["доступен",{"2":{"142":1,"319":1,"425":1,"458":1,"562":1}}],["доступной",{"2":{"478":1}}],["доступное",{"2":{"319":1}}],["доступном",{"2":{"319":1}}],["доступно",{"0":{"571":1},"2":{"319":1,"368":1,"570":1}}],["доступный",{"2":{"319":1,"561":1}}],["доступных",{"2":{"247":1,"251":1,"299":1,"337":1,"375":1,"413":1,"537":1}}],["доступными",{"2":{"318":1}}],["доступным",{"2":{"188":1,"260":1,"305":1,"312":1,"356":1,"362":1}}],["доступные",{"0":{"570":1},"2":{"183":1,"291":1,"318":1,"331":1,"404":1,"542":1}}],["доступны",{"2":{"160":1,"240":1,"324":1,"359":1,"360":1,"364":1,"413":2,"426":1,"515":1,"554":1}}],["доступна",{"2":{"151":1,"319":1,"378":1,"478":1}}],["доступом",{"2":{"145":1}}],["доступ",{"0":{"59":1},"2":{"56":1,"59":1,"122":1,"123":3,"124":3,"125":8,"145":1,"152":3,"160":4,"187":1,"209":1,"226":1,"260":1,"268":1,"273":1,"286":1,"301":1,"314":1,"315":2,"319":2,"327":2,"336":1,"340":1,"362":1,"397":1,"415":1,"420":1,"424":1,"425":1,"426":1,"437":1,"452":1,"453":1,"478":2}}],["доступа",{"0":{"337":1},"1":{"338":1,"339":1,"340":1,"341":1,"342":1,"343":1},"2":{"17":1,"40":1,"53":1,"58":1,"123":5,"124":1,"125":1,"130":1,"142":2,"145":1,"160":1,"208":1,"209":1,"212":1,"306":1,"325":1,"327":1,"331":3,"333":1,"345":1,"346":1,"354":1,"362":1,"396":1,"416":1,"430":1}}],["доставка",{"0":{"467":1},"2":{"394":1,"466":1,"467":2}}],["доставки",{"2":{"4":1,"70":1,"76":1,"151":1,"157":1,"467":1}}],["достаточным",{"2":{"446":1}}],["достаточный",{"0":{"241":1}}],["достаточную",{"2":{"265":1}}],["достаточная",{"2":{"89":1}}],["достаточное",{"2":{"181":1,"184":1}}],["достаточно",{"2":{"40":1,"58":1,"59":1,"96":1,"98":1,"148":2,"180":1,"184":1,"187":1,"199":1,"211":1,"220":1,"228":1,"233":1,"253":1,"258":1,"291":1,"298":2,"306":1,"307":1,"308":1,"311":1,"319":2,"321":1,"328":1,"330":1,"333":1,"341":1,"342":1,"352":1,"362":1,"363":1,"368":1,"401":1,"405":1,"415":1,"419":2,"430":1,"436":1,"455":1,"456":1,"465":1,"468":1,"470":1,"474":1,"477":1,"482":1,"492":1,"541":1}}],["допускает",{"2":{"453":1}}],["допускают",{"2":{"291":1}}],["допустимы",{"2":{"414":1}}],["допустим",{"2":{"362":1,"415":1,"483":1}}],["дополненного",{"2":{"345":1}}],["дополнением",{"2":{"296":1}}],["дополнение",{"2":{"220":1}}],["дополнениями",{"2":{"184":1}}],["дополнили",{"2":{"231":1}}],["дополнительную",{"2":{"416":1}}],["дополнительная",{"2":{"118":1}}],["дополнительными",{"2":{"180":1,"266":1,"331":1,"399":1}}],["дополнительным",{"2":{"158":1,"311":1,"370":1}}],["дополнительные",{"2":{"155":1,"156":1,"184":1,"224":1,"228":1,"331":1,"389":1,"414":1,"451":1,"466":1,"492":1}}],["дополнительных",{"2":{"85":1,"160":1,"179":1,"183":1,"187":1,"296":2,"326":1,"346":1,"353":1,"394":1,"414":1,"422":1,"443":1,"444":1,"447":1}}],["дополнительный",{"2":{"29":1,"181":1,"234":1,"277":1}}],["дополнительного",{"2":{"290":1,"423":1,"457":1}}],["дополнительной",{"2":{"156":2,"228":1}}],["дополнительное",{"2":{"48":1,"179":1,"404":1,"416":1}}],["дополнительно",{"2":{"16":1}}],["дополняем",{"2":{"230":1}}],["дополнять",{"2":{"229":1}}],["дополняющего",{"2":{"228":1}}],["договаривается",{"2":{"319":1}}],["договоре",{"2":{"279":1}}],["догадались",{"2":{"159":1,"179":1,"218":1}}],["доходит",{"2":{"260":1,"419":1}}],["додо",{"2":{"239":1}}],["дорогой",{"2":{"445":1}}],["дорогостоящим",{"2":{"442":1}}],["дорогостоящей",{"2":{"421":1}}],["дорогим",{"2":{"226":1}}],["дороги",{"2":{"164":1}}],["доработаем",{"2":{"368":1}}],["доработки",{"2":{"188":1}}],["дорабатывать",{"2":{"177":1}}],["дочерняя",{"2":{"308":1,"359":1}}],["дочернем",{"2":{"322":1,"358":1,"360":2,"410":1}}],["дочернему",{"2":{"307":1,"359":1}}],["дочернего",{"2":{"160":1,"307":1,"359":2}}],["дочерними",{"2":{"359":1}}],["дочерним",{"2":{"306":2,"352":1,"359":1,"369":1}}],["дочерний",{"2":{"196":2,"308":1,"353":1,"358":1}}],["дочерних",{"2":{"187":1,"306":1,"308":1,"312":1,"353":1,"360":1,"362":1}}],["дочерние",{"2":{"168":1,"306":3,"409":2,"410":1}}],["доведем",{"2":{"185":1}}],["доверенных",{"2":{"125":2}}],["доверие",{"2":{"96":1}}],["довериться",{"2":{"96":1}}],["доводить",{"2":{"175":1}}],["довольно",{"2":{"3":1,"9":1,"25":1,"39":1,"98":1,"124":2,"138":1,"139":1,"145":1,"179":1,"183":2,"184":1,"202":1,"212":1,"221":1,"226":2,"227":1,"234":1,"267":1,"277":1,"278":1,"279":1,"298":1,"306":1,"308":1,"327":1,"328":1,"332":1,"337":1,"368":1,"400":1,"419":1,"430":1,"462":1,"465":1,"491":2,"492":1,"541":3,"578":1}}],["документ",{"2":{"490":1}}],["документируйте",{"0":{"489":1},"2":{"438":1}}],["документирования",{"2":{"352":1,"489":1}}],["документирование",{"0":{"78":1},"2":{"72":1}}],["документирован",{"2":{"337":1}}],["документированная",{"2":{"337":1}}],["документов",{"2":{"337":2}}],["документом",{"2":{"278":1}}],["документной",{"2":{"327":1}}],["документа",{"2":{"127":1,"163":1,"363":2}}],["документаций",{"2":{"492":1}}],["документацию",{"2":{"148":1,"156":1,"168":1,"177":1,"201":1,"318":1,"508":1,"541":1}}],["документации",{"2":{"126":1,"135":1,"136":1,"145":1,"146":1,"150":1,"167":1,"168":1,"178":1,"234":1,"240":1,"299":1,"300":1,"319":1,"330":1,"341":1,"362":1,"364":1,"396":1,"404":1,"413":2,"426":1,"438":1,"448":2,"452":1,"460":1,"461":1,"491":1,"501":1,"515":1}}],["документацией",{"2":{"78":1,"178":1,"321":1,"422":1,"466":1}}],["документация",{"2":{"51":1,"73":1,"352":1,"438":1,"478":1,"491":4,"502":1}}],["доброжелательные",{"2":{"491":1}}],["добрый",{"2":{"62":1}}],["добились",{"2":{"370":1,"371":1}}],["добиться",{"2":{"271":1,"301":1,"401":1}}],["добавятся",{"2":{"465":1}}],["добавьте",{"2":{"184":1,"187":1,"329":1,"339":1,"396":1,"465":1}}],["добавив",{"2":{"182":1,"448":1,"465":1}}],["добавили",{"2":{"160":1,"369":1}}],["добавились",{"2":{"100":1}}],["добавит",{"2":{"125":1,"447":1,"462":1}}],["добавить",{"2":{"29":1,"92":1,"183":1,"228":1,"291":1,"430":1,"454":1,"456":1,"460":1,"462":2,"483":2,"490":1}}],["добавим",{"2":{"36":1,"88":1,"187":1,"336":1,"341":1,"447":1}}],["добавленные",{"2":{"465":1}}],["добавлен",{"2":{"277":2}}],["добавления",{"2":{"156":1,"187":1,"195":1,"225":1,"226":1,"228":3}}],["добавление",{"2":{"12":1,"70":1,"182":1,"293":1,"335":1,"413":1,"435":1,"474":1,"476":1,"482":1,"500":1,"538":1,"570":1}}],["добавляются",{"2":{"492":1}}],["добавляют",{"2":{"435":1,"469":1}}],["добавляя",{"2":{"222":1,"230":1}}],["добавлялись",{"2":{"155":1}}],["добавляется",{"2":{"426":1}}],["добавляет",{"2":{"125":1,"131":1,"228":1,"326":1,"339":1,"483":1,"490":1,"553":1,"563":1,"589":1}}],["добавляем",{"2":{"89":1,"93":1,"106":1,"107":1,"363":1,"369":1,"407":1,"466":1}}],["добавлять",{"2":{"18":1,"231":1,"277":1,"313":1,"370":1}}],["долларов",{"2":{"142":1}}],["доля",{"2":{"132":1}}],["дольше",{"2":{"123":1,"327":1}}],["долгосрочных",{"2":{"435":1,"476":1}}],["долгосрочной",{"2":{"74":1}}],["долгого",{"2":{"39":1}}],["должна",{"2":{"67":1,"89":1,"96":1,"156":1,"159":1,"160":1,"168":1,"194":3,"232":1,"242":1,"258":1,"287":1,"306":1,"343":1,"360":1,"396":1,"417":1,"422":1,"453":1,"491":1}}],["должны",{"2":{"22":1,"41":1,"67":1,"129":1,"130":1,"156":1,"158":2,"181":1,"183":1,"187":2,"188":1,"191":1,"192":2,"196":1,"197":3,"199":1,"200":1,"201":1,"202":1,"223":1,"234":1,"241":2,"244":1,"246":2,"248":1,"249":1,"256":1,"261":1,"265":1,"274":1,"291":1,"297":1,"301":1,"305":1,"308":1,"311":1,"313":1,"315":1,"327":1,"332":1,"340":1,"352":1,"359":1,"360":1,"362":1,"368":1,"401":1,"410":1,"415":3,"416":1,"420":1,"426":1,"436":1,"448":1,"454":1,"474":1,"483":1,"486":1}}],["должном",{"2":{"490":1}}],["должно",{"2":{"11":1,"44":1,"70":1,"123":1,"124":1,"167":1,"185":1,"249":1,"272":1,"291":3,"293":1,"294":1,"295":1,"303":1,"315":1,"327":1,"359":2,"410":1,"444":1,"446":1,"447":1,"448":1,"449":4,"479":1,"542":1}}],["должен",{"2":{"11":1,"23":2,"48":1,"67":1,"104":1,"123":1,"129":1,"142":1,"152":1,"156":2,"165":1,"179":1,"182":1,"185":1,"195":1,"196":1,"198":1,"199":1,"208":1,"216":1,"218":2,"222":1,"225":1,"226":1,"229":3,"249":2,"252":1,"272":1,"279":1,"287":1,"291":1,"293":2,"296":1,"298":1,"299":1,"306":1,"311":1,"327":2,"328":1,"335":1,"357":1,"358":1,"359":1,"368":2,"377":1,"396":2,"415":1,"416":2,"419":1,"420":1,"422":1,"444":1,"447":1,"454":1,"455":1,"478":1,"483":1,"492":1,"508":1,"531":1,"587":1}}],["домашний",{"2":{"273":1,"492":1,"587":1}}],["домашняя",{"0":{"272":1},"2":{"272":1}}],["домашнюю",{"2":{"241":1}}],["домашнего",{"2":{"142":1}}],["домашней",{"2":{"142":1}}],["домене",{"2":{"142":2}}],["домену",{"2":{"142":1}}],["доменным",{"2":{"148":1}}],["доменные",{"2":{"142":1}}],["доменных",{"0":{"142":1},"1":{"144":1},"2":{"142":1}}],["доменное",{"2":{"141":1,"142":2}}],["домены",{"0":{"142":1},"1":{"144":1},"2":{"142":3,"149":1,"152":1}}],["доменов",{"2":{"125":1,"142":1,"194":1}}],["доменом",{"2":{"121":1,"125":1,"143":1}}],["домен",{"2":{"125":1,"142":9,"143":1,"151":1,"152":1,"154":1,"277":1,"341":1,"425":3,"434":1,"491":1,"562":2}}],["доменами",{"2":{"142":1}}],["домена",{"2":{"125":4,"139":1,"142":4,"143":1,"147":1,"152":1,"153":1,"154":2,"319":1,"337":1,"345":2,"425":1}}],["дом",{"2":{"26":1}}],["до",{"0":{"292":1},"1":{"293":1,"294":1,"295":1,"296":1,"297":1,"298":1},"2":{"22":1,"61":1,"111":1,"128":1,"132":1,"142":2,"152":1,"155":2,"156":2,"158":1,"160":1,"167":1,"168":1,"175":2,"177":1,"181":4,"185":1,"189":1,"194":1,"201":1,"215":1,"226":1,"228":1,"229":1,"231":1,"234":1,"238":1,"246":1,"251":1,"260":1,"261":1,"265":1,"268":1,"273":1,"277":1,"278":1,"284":1,"295":1,"299":1,"313":2,"321":1,"327":4,"351":1,"354":1,"357":2,"362":1,"385":1,"399":1,"400":1,"404":2,"407":1,"408":1,"410":2,"415":1,"419":1,"420":2,"426":1,"444":2,"451":1,"456":1,"466":1,"467":1,"474":1,"492":3,"542":1}}],["декларируемое",{"2":{"478":1}}],["декомпозиции",{"2":{"482":1}}],["декомпозированные",{"2":{"436":1,"476":1}}],["декодирован",{"2":{"416":1}}],["декодированной",{"2":{"413":1}}],["декодирует",{"2":{"416":1}}],["декораторов",{"2":{"228":2}}],["декораторы",{"2":{"228":3,"230":1}}],["декораторами",{"2":{"231":1}}],["декораторам",{"2":{"228":1}}],["декоратора",{"2":{"202":1,"228":2,"230":1,"231":1,"321":1}}],["декоратор",{"0":{"228":1},"1":{"229":1,"230":1},"2":{"181":1,"191":1,"227":1,"228":3,"229":2,"321":2}}],["дебаге",{"2":{"474":1}}],["дебажить",{"2":{"56":1}}],["децентрализованные",{"2":{"422":2}}],["децентрализованных",{"2":{"399":1,"422":1}}],["девопс",{"2":{"394":1}}],["девичестве",{"2":{"50":1}}],["детей",{"2":{"491":1}}],["детьми",{"2":{"304":1}}],["детали",{"0":{"548":1},"1":{"549":1,"550":1},"2":{"407":1,"436":1,"489":1}}],["детализации",{"2":{"268":1}}],["детализирована",{"2":{"194":1}}],["деталей",{"2":{"200":1}}],["деталях",{"0":{"355":1},"1":{"356":1,"357":1,"358":1,"359":1,"360":1},"2":{"166":1,"416":1}}],["деталям",{"2":{"139":2,"408":1}}],["детальную",{"2":{"483":1}}],["детального",{"2":{"371":1}}],["детально",{"2":{"51":1,"240":1}}],["детальный",{"2":{"14":1}}],["деятельность",{"2":{"255":1}}],["деятельностью",{"2":{"65":1}}],["деактивации",{"2":{"252":2}}],["демонстрации",{"2":{"244":1,"375":1}}],["демонстрируют",{"2":{"238":1}}],["демонстрирующий",{"2":{"194":1,"314":1}}],["демонстрирует",{"2":{"214":1,"243":1,"261":1,"457":1,"478":1}}],["дефисами",{"2":{"186":1}}],["деньги",{"2":{"430":1}}],["день",{"2":{"142":1,"237":1,"248":1,"456":1,"458":1}}],["денег",{"2":{"63":1}}],["де",{"2":{"138":1,"401":1,"546":1}}],["держателем",{"2":{"364":1}}],["держать",{"2":{"179":1,"491":1}}],["держи",{"0":{"200":1},"2":{"191":2}}],["держим",{"2":{"22":1}}],["деревьев",{"2":{"408":1}}],["дереве",{"2":{"311":1,"352":1,"359":1}}],["дереву",{"2":{"215":1,"306":1,"308":2,"360":1,"478":1}}],["дерево",{"2":{"158":1,"195":1}}],["дерева",{"2":{"135":1,"168":1,"181":1,"308":1,"352":1}}],["деплое",{"2":{"396":1}}],["деплоится",{"2":{"396":1}}],["деплоить",{"2":{"396":1}}],["деплой",{"2":{"396":1}}],["деплоя",{"2":{"76":1,"396":4,"466":1,"491":1,"542":1,"570":1,"573":1}}],["депозитами",{"2":{"123":1}}],["действовало",{"2":{"289":1}}],["действовать",{"2":{"229":1,"415":1}}],["действию",{"0":{"273":1},"2":{"241":1,"273":3,"285":1}}],["действительному",{"2":{"419":1}}],["действительно",{"2":{"220":1,"228":1,"285":1,"428":1,"438":1,"479":1}}],["действительная",{"2":{"123":1}}],["действии",{"0":{"380":1},"2":{"158":1,"178":1,"179":1,"187":1,"197":2,"231":1,"238":1,"265":1,"290":1,"304":1,"305":1,"326":1,"349":1,"380":1,"398":1,"443":1}}],["действием",{"2":{"253":1,"254":1}}],["действие",{"2":{"123":2,"158":1,"225":1,"228":1,"253":1,"254":1,"276":1,"285":1,"354":1,"356":1,"464":1}}],["действиями",{"2":{"266":1}}],["действиях",{"2":{"241":1,"248":1}}],["действия",{"2":{"100":1,"123":1,"152":1,"222":1,"248":2,"254":1,"258":1,"266":1,"275":2,"301":1,"327":2,"340":1,"359":1,"363":1,"365":1,"368":2,"401":1,"446":1,"466":2,"479":1}}],["действий",{"2":{"64":1,"242":1,"248":1,"258":2,"284":2,"285":1,"311":1,"333":1,"394":1}}],["действуя",{"2":{"299":1}}],["действующего",{"2":{"231":1}}],["действуют",{"2":{"3":1}}],["действует",{"2":{"23":1,"152":1,"202":1,"226":1,"299":1,"416":1,"422":1}}],["дестабилизируют",{"2":{"202":1}}],["десктоп",{"2":{"492":1}}],["десктопные",{"2":{"483":1}}],["десктопными",{"2":{"399":1}}],["десктопных",{"2":{"183":1}}],["десктопе",{"2":{"33":1}}],["десятилетнем",{"2":{"428":1}}],["десятилетиям",{"2":{"17":1}}],["десяток",{"2":{"96":1,"248":1}}],["десятками",{"2":{"48":1}}],["десятки",{"2":{"47":1,"429":1,"430":1}}],["делятся",{"2":{"483":1}}],["делсостояние",{"2":{"352":1}}],["делсобытия",{"2":{"352":1}}],["делится",{"2":{"260":1}}],["делиться",{"2":{"231":1,"363":1,"478":1}}],["дело",{"2":{"196":1,"226":1,"351":1,"419":2}}],["дел",{"2":{"177":1,"185":1,"187":7,"188":1,"348":2,"352":5,"353":1,"369":2,"402":2,"407":1}}],["делайте",{"2":{"484":1,"486":1}}],["делающее",{"2":{"478":1}}],["делаются",{"2":{"43":1,"549":1}}],["делают",{"2":{"41":1,"96":1,"183":1,"236":1,"319":1,"445":2}}],["делая",{"2":{"228":1,"289":1,"515":1}}],["делали",{"2":{"187":1,"304":1,"341":1,"399":1,"426":1,"452":1}}],["дела",{"2":{"142":1,"408":1,"483":1}}],["делать",{"2":{"35":1,"38":1,"41":1,"47":1,"50":1,"88":1,"104":1,"112":1,"114":1,"124":1,"125":1,"149":1,"185":1,"194":1,"196":1,"202":1,"249":2,"254":1,"257":1,"291":1,"315":1,"327":1,"408":1,"430":1,"444":1,"448":1,"463":1,"474":1,"478":1,"492":2,"591":1}}],["делаться",{"2":{"34":1,"272":1}}],["делается",{"2":{"59":1,"113":1,"123":1,"142":1,"160":1,"197":1,"227":1,"375":1,"415":1,"438":1,"538":1}}],["делает",{"2":{"48":1,"83":1,"96":1,"122":1,"123":1,"130":1,"138":1,"154":1,"157":1,"159":1,"178":1,"186":1,"215":1,"218":1,"234":1,"248":1,"249":1,"268":1,"309":1,"311":1,"316":1,"330":1,"336":1,"357":1,"368":1,"399":2,"420":1,"423":1,"429":1,"430":1,"444":1,"448":1,"465":1,"466":1,"478":1,"482":1,"508":1,"561":1}}],["делаете",{"2":{"26":1}}],["делаем",{"2":{"22":1,"59":1,"65":1,"107":1,"160":1,"198":1,"234":1,"329":1,"345":1,"419":1}}],["делегатора",{"2":{"335":1}}],["делегирует",{"2":{"369":1}}],["делегируется",{"2":{"224":1}}],["делегировать",{"2":{"199":1,"218":1}}],["деле",{"2":{"3":1,"145":1,"174":1,"202":1,"327":1,"436":1}}],["дат",{"2":{"474":1,"575":1}}],["дата",{"0":{"474":1}}],["датами",{"2":{"470":1}}],["дату",{"2":{"396":1,"467":2}}],["датой",{"2":{"396":1,"474":1}}],["датчики",{"2":{"363":1}}],["даты",{"2":{"251":2}}],["дать",{"2":{"123":1,"139":1,"248":1,"287":1,"319":1,"354":1,"455":1,"542":2}}],["даны",{"2":{"177":1}}],["даннах",{"2":{"508":1}}],["данная",{"2":{"177":1,"223":1,"261":1,"339":1,"465":1,"482":1,"492":1}}],["данную",{"2":{"193":1}}],["данном",{"2":{"128":1,"143":1,"149":1,"152":2,"156":1,"157":1,"159":1,"160":1,"179":1,"187":2,"188":1,"218":2,"241":2,"249":1,"260":1,"277":1,"280":1,"282":1,"306":1,"311":1,"312":1,"335":1,"337":2,"339":1,"341":1,"345":1,"354":1,"357":1,"360":1,"362":1,"369":1,"396":1,"399":1,"408":1,"410":1,"419":1,"420":1,"422":1,"436":1,"448":1,"452":2,"453":2,"478":1,"482":1,"503":1,"508":1,"535":1,"537":1}}],["данное",{"2":{"78":1,"446":1,"542":1}}],["данной",{"2":{"73":1,"123":1,"151":1,"161":1,"181":1,"191":1,"196":1,"198":1,"202":1,"247":1,"271":1,"272":1,"300":1,"350":1,"353":1,"415":1,"419":1,"422":2,"466":1,"483":2,"491":1,"588":1}}],["данного",{"0":{"67":1,"500":1},"2":{"65":1,"185":1,"226":1,"253":1,"266":1,"299":1,"312":2,"327":1,"328":1,"336":1,"350":1,"396":1,"474":1,"478":1,"483":1}}],["данным",{"2":{"125":1,"208":1,"260":1,"306":1,"325":1,"421":1,"491":1}}],["данными",{"0":{"250":1},"1":{"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1},"2":{"17":1,"38":1,"39":1,"41":1,"47":1,"112":1,"122":1,"124":3,"152":1,"188":1,"228":1,"306":1,"311":1,"312":1,"313":1,"324":1,"332":1,"345":1,"352":1,"359":1,"360":1,"363":1,"399":1,"415":1,"416":1,"433":1,"438":1,"476":1,"587":1}}],["данный",{"2":{"11":1,"16":1,"36":1,"43":1,"56":1,"142":1,"160":1,"180":1,"184":1,"193":1,"196":1,"215":1,"222":1,"225":1,"227":1,"268":1,"368":1,"407":1,"441":1,"451":1,"490":1,"502":1,"508":1,"535":1,"538":1,"551":1,"554":1,"570":1,"575":1,"583":1}}],["данные",{"0":{"44":1,"118":1,"507":1},"1":{"45":1,"46":1,"47":1,"508":1},"2":{"3":1,"11":2,"17":2,"47":2,"96":1,"112":1,"118":1,"122":1,"123":2,"124":3,"125":1,"171":1,"186":1,"197":2,"223":3,"224":2,"226":1,"228":1,"230":1,"279":1,"306":2,"308":3,"309":1,"311":1,"319":7,"320":1,"327":3,"328":1,"329":1,"331":1,"332":1,"333":1,"334":2,"339":1,"340":5,"341":1,"342":2,"343":2,"345":2,"352":2,"357":1,"359":2,"360":4,"362":1,"369":1,"410":2,"415":4,"416":1,"417":1,"418":1,"421":2,"422":2,"437":4,"438":1,"474":2,"478":3,"482":4,"483":1,"491":1,"492":3,"515":1,"531":1}}],["данных",{"0":{"15":1,"17":1,"42":2,"304":1,"319":1,"352":1,"388":1,"508":1},"1":{"16":1,"17":1,"18":2,"19":2,"43":2,"44":2,"45":2,"46":2,"47":2,"48":2,"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1},"2":{"3":1,"6":2,"11":1,"16":1,"17":8,"39":3,"40":2,"41":1,"43":1,"44":1,"47":1,"48":3,"56":1,"59":2,"62":1,"70":1,"73":1,"83":1,"124":7,"125":1,"130":2,"134":1,"138":1,"156":2,"160":3,"165":1,"166":1,"187":1,"198":1,"204":1,"207":1,"213":3,"220":1,"221":1,"224":1,"231":1,"239":1,"253":1,"260":5,"289":1,"298":1,"299":1,"304":1,"306":3,"311":4,"312":1,"313":1,"318":1,"319":13,"320":2,"323":1,"325":3,"328":2,"336":1,"337":6,"338":2,"339":3,"340":1,"343":1,"345":1,"346":1,"352":1,"353":1,"358":3,"360":1,"362":1,"365":1,"388":1,"399":2,"404":1,"407":1,"408":1,"410":2,"415":8,"416":2,"420":1,"421":2,"430":2,"438":1,"444":2,"445":1,"478":4,"482":2,"483":1,"491":1,"492":1,"508":5}}],["даст",{"2":{"126":1,"310":1,"314":1,"482":1,"483":1}}],["дал",{"2":{"180":1,"279":1,"478":1}}],["далеко",{"2":{"124":1,"178":1,"179":1,"199":1,"269":1,"422":1,"479":1,"484":1}}],["далее",{"0":{"128":1},"2":{"104":2,"121":1,"123":1,"151":1,"156":1,"160":1,"174":1,"179":2,"180":1,"186":2,"187":1,"194":2,"210":1,"233":1,"246":1,"249":1,"263":1,"289":1,"291":2,"297":1,"318":1,"320":1,"340":1,"345":1,"363":1,"407":1,"415":1,"418":1,"421":1,"422":1,"444":1,"453":1,"455":1,"466":1}}],["дальше",{"2":{"123":1,"156":1,"179":1,"184":1,"254":1,"463":1,"487":1}}],["дальнейшего",{"2":{"249":1,"422":1,"466":1,"541":1}}],["дальнейшей",{"2":{"74":1,"168":1,"176":1,"268":1,"540":1,"542":1}}],["дальнейшем",{"2":{"11":1,"16":1,"18":1,"29":1,"34":1,"40":1,"58":1,"59":1,"106":1,"113":1,"158":1,"167":1,"202":1,"261":1,"418":1,"490":1,"543":1,"545":1}}],["дальнейшая",{"2":{"38":1,"466":1}}],["дальнейших",{"2":{"9":1,"12":1,"380":1}}],["дальнейшую",{"2":{"3":1}}],["дала",{"2":{"112":1}}],["дает",{"2":{"96":1,"100":1,"123":1,"138":2,"160":1,"163":1,"184":1,"191":1,"202":1,"227":1,"258":1,"306":1,"314":1,"327":1,"347":1,"400":1,"446":1,"452":1,"474":1}}],["даёт",{"2":{"65":1,"100":1,"430":1,"482":1,"491":1}}],["давид",{"2":{"380":1}}],["давным",{"2":{"237":1}}],["давно",{"2":{"39":1,"237":1,"258":1,"481":1}}],["давайте",{"2":{"126":1,"127":1,"141":1,"150":1,"156":2,"157":1,"159":1,"160":2,"169":1,"177":1,"181":1,"182":1,"183":1,"202":1,"207":1,"214":1,"220":1,"222":1,"223":1,"226":1,"227":1,"232":1,"240":1,"249":1,"275":1,"291":1,"292":1,"306":1,"307":1,"308":1,"309":1,"312":1,"315":1,"327":1,"335":2,"336":1,"337":1,"343":1,"350":1,"357":1,"359":1,"362":1,"364":1,"368":4,"399":1,"400":1,"401":1,"402":1,"405":1,"406":1,"416":3,"445":1,"447":1,"454":1,"458":1,"463":1,"465":1}}],["давать",{"2":{"123":1}}],["давая",{"2":{"2":1,"291":1}}],["дают",{"2":{"17":2,"141":1,"468":1}}],["даже",{"2":{"12":1,"40":1,"48":1,"73":1,"96":3,"123":1,"125":1,"152":1,"155":2,"156":2,"168":1,"175":1,"183":2,"188":1,"193":1,"199":1,"202":1,"217":1,"225":1,"226":1,"231":1,"239":2,"242":1,"244":1,"257":1,"272":1,"275":2,"291":1,"299":1,"302":1,"308":1,"313":1,"322":1,"327":2,"337":1,"356":1,"360":1,"361":1,"362":1,"399":2,"407":1,"408":2,"410":1,"416":1,"421":2,"422":1,"442":1,"444":1,"445":1,"447":1,"453":1,"456":1,"457":1,"466":1,"474":1,"478":2,"482":1,"490":1,"491":3,"575":1}}],["да",{"2":{"10":1,"160":2,"179":1,"184":1,"190":1,"212":1,"228":1,"234":1,"321":1}}],["двинемся",{"2":{"463":1}}],["двигателя",{"2":{"491":1}}],["двигаться",{"2":{"184":1,"464":1}}],["двигаясь",{"2":{"399":1}}],["движок",{"2":{"337":1}}],["движение",{"2":{"363":1}}],["движения",{"2":{"246":1}}],["движению",{"2":{"231":1}}],["движущихся",{"2":{"231":1,"327":1}}],["движки",{"2":{"289":1}}],["движке",{"2":{"178":1,"291":1,"319":1}}],["движка",{"2":{"132":1,"317":1,"339":1}}],["двойной",{"2":{"339":1}}],["двойная",{"2":{"255":1}}],["двойных",{"2":{"187":1}}],["двойные",{"2":{"157":1}}],["двоеточия",{"2":{"167":1,"410":1}}],["двоеточие",{"2":{"162":1,"404":1}}],["двум",{"2":{"184":1,"198":1}}],["двумя",{"2":{"113":1,"180":1,"183":1,"227":1,"339":1,"346":1,"402":1,"483":1}}],["двусмысленное",{"2":{"478":1}}],["двусторонним",{"2":{"166":1}}],["двуслешные",{"2":{"89":1}}],["двунаправленную",{"2":{"138":1}}],["двухдневный",{"2":{"491":1}}],["двухядерный",{"2":{"483":1}}],["двухфакторная",{"0":{"421":1},"2":{"420":1}}],["двух",{"2":{"114":1,"145":1,"151":1,"156":1,"241":1,"291":1,"345":1,"360":1,"364":1,"404":1,"421":1,"453":1,"551":1,"583":1}}],["двадцатилетней",{"2":{"491":1}}],["дважды",{"2":{"199":1}}],["два",{"2":{"3":2,"17":2,"47":1,"58":1,"123":1,"130":1,"132":1,"142":1,"152":1,"160":1,"165":1,"168":1,"187":4,"188":1,"201":1,"221":1,"222":1,"227":1,"232":1,"234":1,"239":1,"252":2,"260":1,"294":1,"298":3,"315":1,"321":1,"325":1,"330":1,"340":1,"341":1,"356":1,"357":1,"368":3,"406":1,"410":1,"416":1,"421":1,"436":1,"438":1,"448":1,"454":1,"483":3,"491":2,"492":2,"568":1}}],["двери",{"2":{"199":1}}],["две",{"2":{"2":1,"16":1,"92":1,"96":2,"123":1,"138":1,"143":1,"160":1,"187":1,"234":2,"241":1,"321":1,"325":1,"345":1,"369":1,"410":1,"420":1,"448":1}}],["иллюстрации",{"2":{"538":1}}],["илья",{"2":{"491":1}}],["или",{"0":{"37":1,"138":1,"241":1,"253":1,"255":1,"257":1,"291":1,"420":1,"472":1},"1":{"38":1,"39":1,"40":1,"41":1},"2":{"3":1,"16":1,"17":1,"22":1,"40":1,"41":2,"48":1,"50":1,"62":1,"63":1,"64":1,"72":1,"95":1,"96":2,"107":1,"111":2,"113":1,"114":1,"118":1,"122":4,"123":2,"124":1,"125":4,"128":1,"130":2,"131":1,"132":1,"138":2,"139":2,"142":7,"143":2,"145":2,"146":1,"148":1,"151":3,"156":9,"157":2,"158":1,"159":1,"160":6,"161":1,"163":4,"164":3,"165":1,"166":1,"167":1,"168":3,"177":1,"178":5,"179":4,"180":1,"181":7,"183":1,"184":2,"185":2,"186":2,"187":5,"188":5,"190":1,"194":2,"195":3,"196":3,"197":1,"198":1,"199":4,"200":2,"201":3,"202":3,"203":1,"209":2,"211":1,"213":3,"218":3,"219":1,"220":1,"221":1,"222":2,"224":2,"225":2,"226":6,"227":2,"228":4,"229":2,"231":5,"232":3,"233":2,"234":5,"235":1,"237":1,"239":6,"240":4,"241":2,"242":2,"243":3,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"251":1,"252":7,"253":4,"254":3,"256":1,"257":1,"258":2,"260":3,"262":1,"263":2,"266":2,"268":3,"269":2,"270":1,"271":5,"272":1,"273":3,"275":3,"276":1,"277":1,"278":1,"279":2,"280":3,"281":1,"282":2,"283":1,"284":1,"285":1,"286":3,"289":1,"291":5,"293":4,"298":6,"299":3,"301":3,"304":1,"308":1,"309":2,"311":2,"312":1,"313":1,"316":1,"318":2,"319":4,"321":4,"322":1,"324":1,"327":6,"329":2,"331":6,"332":2,"333":1,"334":1,"335":1,"337":2,"338":1,"342":1,"343":1,"348":1,"350":2,"351":2,"352":1,"353":2,"354":3,"356":2,"357":2,"358":2,"359":1,"360":3,"361":3,"362":3,"363":2,"365":2,"368":2,"369":3,"370":2,"371":1,"372":1,"377":2,"399":1,"401":3,"402":1,"404":2,"407":2,"408":1,"409":1,"410":1,"414":4,"415":5,"416":2,"417":1,"420":2,"421":7,"422":4,"425":1,"426":1,"428":1,"429":2,"434":1,"435":2,"436":3,"437":3,"442":4,"444":3,"445":6,"447":3,"448":4,"450":1,"453":1,"454":1,"455":2,"457":2,"459":1,"460":1,"462":2,"465":1,"466":1,"467":1,"469":1,"474":3,"476":5,"478":11,"481":1,"482":2,"483":3,"484":1,"485":2,"490":3,"491":5,"492":3,"500":3,"515":1,"531":1,"538":1,"541":4,"545":1,"575":1}}],["иерарxичную",{"2":{"490":1}}],["иерархия",{"2":{"351":1,"361":1}}],["иерархическая",{"2":{"436":1,"476":1}}],["иерархические",{"2":{"369":1}}],["иерархический",{"2":{"264":1}}],["иерархическому",{"2":{"360":1}}],["иерархичных",{"2":{"17":1}}],["иерархичного",{"2":{"17":1,"482":1}}],["иерархичное",{"2":{"2":1}}],["иерархию",{"2":{"189":1,"241":1,"351":1,"433":1,"476":1,"477":1}}],["иерархии",{"2":{"159":1,"180":1,"218":1,"220":1,"348":1,"351":2,"352":1,"359":1,"361":1,"478":2}}],["ивент",{"2":{"478":1}}],["ивенты",{"2":{"478":1}}],["ивентов",{"2":{"478":1}}],["ищутся",{"2":{"444":1}}],["иконографическое",{"2":{"352":1}}],["иконографических",{"2":{"185":1}}],["иконография",{"2":{"244":1}}],["иконографию",{"2":{"181":1}}],["иконок",{"2":{"181":1,"183":7,"189":1,"266":1,"273":1,"291":1,"296":1,"348":1,"547":1}}],["иконке",{"2":{"114":1}}],["иконкой",{"2":{"114":2,"187":1,"298":1}}],["иконкам",{"2":{"121":1}}],["иконками",{"2":{"88":1,"107":1,"183":1,"426":1}}],["иконка",{"0":{"111":1},"2":{"111":2,"258":1,"266":5,"492":1}}],["иконки",{"0":{"266":1,"273":1},"2":{"107":1,"180":1,"183":1,"266":1,"273":1,"348":1,"426":2,"428":1,"429":1,"433":1,"476":1,"547":1,"571":1}}],["иконку",{"2":{"104":1,"112":1,"114":1,"294":1,"426":2,"552":1,"580":1,"582":1}}],["играет",{"2":{"435":1,"476":1,"482":1}}],["играй",{"2":{"422":1}}],["игры",{"2":{"422":1}}],["игру",{"2":{"276":1}}],["игрушек",{"2":{"63":1}}],["игрушки",{"2":{"19":1,"62":2}}],["игрушка",{"2":{"18":1}}],["игнорируют",{"2":{"352":1}}],["игнорируйте",{"2":{"180":1}}],["игнорировать",{"2":{"211":1}}],["идущими",{"2":{"360":1}}],["идущие",{"2":{"117":1}}],["идеально",{"2":{"340":1,"436":2,"447":1,"476":1,"482":1}}],["идеале",{"2":{"23":1,"478":1}}],["идею",{"2":{"331":1,"436":1,"476":1,"492":1}}],["идентифицировать",{"2":{"400":1,"422":1}}],["идентифицировал",{"2":{"345":1}}],["идентифицирующее",{"2":{"368":1}}],["идентифицирует",{"2":{"319":1}}],["идентификацией",{"2":{"422":1}}],["идентификационных",{"2":{"421":1}}],["идентификационный",{"2":{"142":1}}],["идентификационная",{"2":{"416":1}}],["идентификацию",{"2":{"410":1,"422":1}}],["идентификации",{"2":{"179":1,"334":1,"368":1,"414":1,"422":1,"447":1}}],["идентификаторы",{"2":{"547":1}}],["идентификатору",{"2":{"422":1}}],["идентификатора",{"2":{"315":1,"334":1,"422":1}}],["идентификаторов",{"2":{"261":1}}],["идентификатором",{"2":{"157":1,"334":1}}],["идентификатор",{"2":{"160":1,"404":1,"407":2,"416":1,"417":1,"422":2}}],["идея",{"2":{"168":1,"199":1,"200":1,"228":1,"289":1,"420":1,"478":1,"541":1}}],["идеями",{"2":{"96":1}}],["идеей",{"2":{"190":1,"454":1}}],["идее",{"2":{"96":1,"194":1}}],["идет",{"2":{"96":1,"248":1,"273":1,"291":1,"430":1,"445":1,"502":1}}],["идете",{"2":{"26":1}}],["итерируйте",{"2":{"351":1}}],["итерацией",{"2":{"422":1}}],["итераций",{"2":{"72":1}}],["итеративный",{"2":{"188":1,"190":1}}],["итераторе",{"2":{"165":1}}],["итак",{"2":{"89":1,"156":1,"217":1,"226":1,"231":1,"314":1,"350":1,"416":1,"447":1,"483":1}}],["итог",{"0":{"137":1}}],["итоговый",{"2":{"490":1}}],["итогов",{"0":{"153":1,"175":1,"189":1,"235":1,"287":1,"302":1,"323":1,"346":1,"371":1,"423":1,"468":1}}],["итогового",{"2":{"70":1}}],["итого",{"2":{"123":1}}],["итоге",{"0":{"579":1},"2":{"47":1,"96":2,"108":1,"113":1,"174":1,"196":1,"199":1,"357":1,"421":1,"430":1,"478":1}}],["импорты",{"2":{"420":1}}],["импорт",{"0":{"357":1},"2":{"181":1,"184":2,"357":1,"478":1}}],["импорта",{"2":{"156":1,"187":1,"211":1,"223":1,"313":1,"315":1,"316":1,"321":1,"329":1,"330":1,"334":1,"335":2,"338":1,"357":1,"363":1,"368":2,"404":2,"427":1,"453":1}}],["импортирую",{"2":{"478":1}}],["импортируя",{"2":{"168":1,"311":1}}],["импортируется",{"2":{"160":1}}],["импортирует",{"2":{"158":1}}],["импортируем",{"2":{"127":1,"157":1,"160":2,"185":1,"214":1,"311":1,"313":1,"318":1,"336":1,"339":1,"341":1,"343":1,"345":1,"360":2,"369":3,"404":2,"410":1,"422":1,"448":2,"452":2}}],["импортировав",{"2":{"363":1}}],["импортировали",{"2":{"186":1,"230":1,"357":1}}],["импортированы",{"2":{"426":1}}],["импортированными",{"2":{"356":1}}],["импортированным",{"2":{"356":1}}],["импортированных",{"2":{"186":1}}],["импортирование",{"2":{"184":1}}],["импортирован",{"2":{"156":1,"180":1,"211":1}}],["импортировать",{"2":{"127":1,"156":1,"157":1,"158":1,"160":2,"180":1,"184":1,"186":1,"211":1,"219":1,"220":1,"317":1,"329":1,"356":2,"363":1,"368":1,"404":1,"414":1,"426":2,"428":1,"448":1}}],["импорте",{"2":{"62":1,"180":1,"184":1}}],["имя",{"2":{"104":1,"141":1,"142":3,"160":2,"174":1,"179":6,"180":1,"186":2,"219":2,"223":1,"293":3,"294":2,"296":1,"315":1,"321":1,"328":1,"359":2,"362":6,"368":2,"396":1,"407":2,"410":2,"413":1,"421":1,"447":1,"460":1,"500":1}}],["им",{"2":{"96":1,"98":1,"123":1,"360":1,"363":1,"410":1,"444":1,"490":1,"492":1,"531":1,"541":1}}],["имитировать",{"2":{"453":1}}],["имитирует",{"2":{"479":1}}],["имитирующей",{"2":{"452":1}}],["имитирующих",{"2":{"444":1}}],["имитирующую",{"2":{"444":1}}],["имитирующая",{"2":{"337":1}}],["имитируют",{"2":{"337":1}}],["имитируя",{"2":{"285":1}}],["имитацией",{"2":{"445":1}}],["имитации",{"2":{"364":1}}],["ими",{"2":{"96":1,"142":1,"291":1,"331":1,"352":1,"359":1,"365":1,"400":1,"435":1,"438":1,"468":1,"476":1,"578":1}}],["имейте",{"2":{"414":1}}],["имея",{"2":{"178":1,"239":1,"291":1}}],["имели",{"2":{"158":1,"239":1}}],["имеющую",{"2":{"345":1}}],["имеющих",{"2":{"142":1}}],["имеются",{"2":{"413":1}}],["имеют",{"2":{"131":1,"159":1,"160":2,"161":1,"196":2,"199":1,"228":1,"234":1,"240":1,"241":1,"243":1,"263":1,"277":1,"291":1,"299":1,"306":3,"319":1,"327":2,"334":1,"369":1,"468":1,"474":1,"478":1,"490":1}}],["именованного",{"2":{"404":1}}],["именованных",{"2":{"408":1}}],["именованными",{"2":{"362":1}}],["именованные",{"0":{"408":1},"1":{"409":1,"410":1},"2":{"362":2,"408":2}}],["именование",{"2":{"360":1}}],["именования",{"2":{"266":1}}],["именовании",{"2":{"201":1,"359":1,"360":2,"363":1}}],["именовать",{"2":{"44":1}}],["имени",{"0":{"415":1},"2":{"142":1,"179":1,"218":1,"219":2,"220":1,"223":1,"226":1,"229":1,"231":1,"294":1,"319":1,"336":1,"358":1,"360":2,"362":1,"368":4,"400":1,"410":1,"415":3,"421":1,"423":1,"426":1,"547":1,"571":1}}],["именам",{"2":{"219":1,"339":1,"407":1}}],["именами",{"2":{"187":1,"234":2,"410":1,"415":1,"416":1,"426":1,"457":1}}],["имена",{"0":{"172":1,"173":1},"2":{"125":1,"142":2,"157":1,"219":1,"234":1,"300":1,"410":1,"547":1}}],["именем",{"2":{"125":1,"131":1,"182":1,"186":1,"187":1,"228":1,"229":1,"298":1,"319":1,"321":1,"329":1,"339":1,"360":2,"362":2,"364":1,"368":2,"404":3,"410":1,"428":1,"453":1}}],["имен",{"0":{"142":1},"1":{"144":1},"2":{"44":1,"142":1,"220":1,"227":1,"351":1,"356":1,"358":1,"409":1,"416":1}}],["именно",{"2":{"2":1,"39":1,"96":4,"123":1,"142":1,"144":1,"147":1,"152":1,"155":2,"158":1,"159":1,"160":1,"177":1,"180":2,"183":1,"222":1,"227":1,"232":1,"275":1,"291":1,"306":1,"311":1,"315":1,"329":1,"330":2,"353":1,"359":1,"402":1,"407":1,"410":1,"421":1,"444":1,"452":1,"478":1,"482":1,"491":2}}],["имеем",{"2":{"41":1,"145":1,"152":1,"160":1,"180":1,"369":1,"419":1}}],["имеет",{"2":{"38":1,"41":1,"50":1,"123":4,"124":1,"129":1,"130":2,"132":1,"137":1,"138":1,"144":1,"145":1,"148":1,"157":1,"160":1,"163":1,"165":1,"183":1,"194":1,"198":1,"212":1,"220":1,"223":1,"226":1,"227":1,"240":1,"249":1,"251":1,"252":1,"277":1,"281":1,"291":1,"293":1,"294":1,"298":2,"306":1,"309":1,"311":2,"313":1,"319":1,"328":1,"331":1,"340":1,"351":1,"352":1,"357":3,"358":1,"361":1,"368":1,"404":1,"415":1,"416":2,"443":1,"445":1,"447":1,"453":1,"457":1,"482":2,"515":1}}],["имеется",{"2":{"4":1,"181":1,"263":1,"311":1}}],["иметь",{"2":{"11":1,"18":1,"23":1,"131":1,"135":1,"142":3,"145":1,"155":1,"160":1,"163":1,"174":1,"184":1,"187":1,"188":1,"196":1,"202":1,"211":1,"218":1,"222":1,"241":2,"244":1,"249":1,"261":1,"268":1,"293":1,"299":1,"311":1,"325":1,"350":1,"354":1,"359":2,"370":1,"377":1,"409":1,"413":1,"415":2,"421":1,"430":1,"437":1,"447":2,"458":1,"465":1,"478":1}}],["изнутри",{"2":{"329":1}}],["изначально",{"2":{"29":1,"337":1,"436":1,"477":1,"492":1}}],["изложенные",{"2":{"325":1}}],["излишняя",{"2":{"196":1}}],["измерения",{"2":{"444":1}}],["измерить",{"2":{"302":1}}],["измеримые",{"2":{"245":1}}],["изменено",{"2":{"156":1}}],["изменений",{"2":{"126":3,"130":2,"136":1,"137":1,"156":1,"165":1,"178":1,"318":1,"340":1,"353":1,"394":1,"399":1,"407":2,"442":1,"448":1,"451":1,"454":1,"456":1,"457":2,"458":1,"462":2,"474":1,"500":1,"515":1}}],["изменении",{"2":{"96":2,"156":1,"187":1,"271":1,"320":1,"322":1,"482":2}}],["изменениям",{"2":{"375":1,"393":1}}],["изменениями",{"2":{"222":1,"322":1,"337":1,"407":1,"430":1,"451":1,"482":2}}],["изменениях",{"2":{"222":1,"256":1,"369":1,"478":1}}],["изменения",{"0":{"131":1,"133":1,"134":1,"135":1,"136":1},"2":{"40":1,"41":1,"126":7,"127":1,"133":1,"137":1,"149":1,"154":1,"155":3,"179":1,"184":1,"187":1,"198":2,"202":1,"228":1,"231":1,"271":1,"313":1,"319":1,"358":1,"369":1,"407":1,"442":2,"458":3,"462":1,"465":1,"466":3,"467":2,"468":1,"474":2,"545":1}}],["изменение",{"2":{"38":2,"95":1,"131":1,"134":1,"143":1,"144":1,"234":1,"311":1,"312":1,"313":1,"314":1,"315":1,"318":1,"353":1,"358":1,"363":1,"369":2,"457":1,"465":1}}],["изменяя",{"2":{"412":1}}],["изменяются",{"2":{"363":1}}],["изменяющие",{"2":{"155":1,"244":1}}],["изменяем",{"2":{"230":2,"369":1}}],["изменяет",{"2":{"229":1,"306":1,"308":1,"313":2,"404":1}}],["изменяете",{"2":{"228":1,"469":1}}],["изменяется",{"2":{"156":1,"222":1,"234":1,"469":1}}],["изменяться",{"2":{"299":2,"436":1,"476":1,"482":1}}],["изменять",{"2":{"146":1,"155":1,"160":1,"183":1,"315":1,"352":1,"410":1,"482":1,"588":1}}],["изменит",{"2":{"447":1}}],["измените",{"2":{"184":1,"300":1}}],["изменится",{"2":{"168":1,"336":1,"430":1,"446":1}}],["изменить",{"2":{"143":2,"160":1,"164":1,"180":1,"186":1,"226":2,"233":1,"239":1,"312":1,"339":1,"347":1,"421":1,"454":1,"482":1,"483":1,"490":1}}],["измениться",{"2":{"96":1}}],["изменил",{"2":{"457":1}}],["изменили",{"2":{"372":1}}],["изменилась",{"2":{"234":1}}],["изменилось",{"2":{"127":1,"160":1,"409":1,"457":1}}],["изменился",{"2":{"123":1,"127":1,"182":1}}],["изменим",{"2":{"104":1,"214":1,"341":1,"407":1,"451":1}}],["издателя",{"2":{"222":1}}],["издревле",{"2":{"2":1}}],["изощренных",{"2":{"430":1}}],["изоляции",{"2":{"212":1,"421":1}}],["изолированные",{"2":{"158":1}}],["изобретено",{"2":{"482":1}}],["изобретались",{"2":{"477":1}}],["изобретайте",{"2":{"231":1}}],["изобретать",{"2":{"181":1,"191":1,"223":1}}],["изображение",{"2":{"351":1}}],["изображению",{"2":{"294":1}}],["изображений",{"0":{"257":1},"2":{"251":1,"257":4,"370":1}}],["изображениями",{"2":{"257":1,"273":1}}],["изображения",{"2":{"16":1,"180":1,"241":1,"243":1,"294":1,"296":3,"426":2,"463":1}}],["изобразить",{"2":{"158":1}}],["извлекать",{"2":{"453":1}}],["извлекает",{"2":{"453":1}}],["извлекаем",{"2":{"157":1,"339":1}}],["извлеченного",{"2":{"338":1}}],["извлечения",{"2":{"319":1,"337":1,"338":1}}],["известен",{"2":{"199":1}}],["известно",{"2":{"416":1}}],["известной",{"2":{"178":1,"279":1}}],["известную",{"2":{"340":1}}],["известны",{"2":{"420":1}}],["известных",{"2":{"298":1,"400":1,"422":1}}],["известный",{"2":{"145":1,"404":1,"416":1,"472":1,"474":1}}],["известными",{"2":{"293":1,"422":1}}],["известным",{"2":{"142":1}}],["известные",{"2":{"9":1,"314":2}}],["изучайте",{"2":{"491":1}}],["изучаемые",{"2":{"338":1}}],["изучающей",{"2":{"240":1}}],["изучать",{"2":{"22":1,"156":1,"242":1}}],["изучили",{"2":{"423":1}}],["изучите",{"2":{"237":1}}],["изучить",{"2":{"21":1,"73":1,"151":1,"156":1,"181":1,"249":1,"296":1,"330":1,"362":1,"396":1,"542":1}}],["изучим",{"2":{"155":1,"397":1}}],["изученных",{"2":{"303":1}}],["изученный",{"2":{"9":1}}],["изучению",{"2":{"354":1,"448":1}}],["изучении",{"2":{"181":1,"289":1,"541":1}}],["изучения",{"2":{"175":1,"191":1,"202":1,"234":1,"446":1,"491":2}}],["изучение",{"0":{"21":1,"161":1,"491":1},"1":{"162":1,"163":1,"164":1,"165":1,"166":1,"167":1},"2":{"274":1,"375":1,"487":1,"491":1}}],["из",{"0":{"537":1},"2":{"14":1,"23":1,"28":1,"34":1,"39":1,"41":2,"48":1,"50":2,"67":1,"70":1,"72":1,"74":2,"85":1,"86":1,"89":3,"96":5,"98":1,"104":1,"111":1,"114":1,"121":1,"122":1,"123":1,"124":1,"126":1,"127":2,"130":3,"133":1,"138":1,"142":4,"143":1,"145":1,"151":1,"152":1,"155":3,"156":5,"157":2,"158":2,"159":2,"160":7,"161":1,"163":1,"164":2,"165":1,"168":1,"177":1,"178":3,"179":1,"180":3,"181":3,"183":6,"185":1,"186":3,"187":5,"192":1,"194":3,"195":1,"196":2,"198":1,"200":1,"201":2,"207":1,"208":1,"210":1,"212":2,"216":1,"218":1,"222":3,"223":1,"226":1,"228":4,"231":3,"232":2,"233":4,"234":3,"237":1,"240":1,"242":1,"243":1,"246":2,"247":1,"250":1,"252":2,"253":1,"254":1,"257":3,"258":1,"259":1,"260":1,"262":1,"263":1,"264":1,"265":1,"266":1,"271":3,"272":2,"273":2,"274":1,"275":1,"276":1,"284":1,"285":2,"287":1,"289":2,"290":1,"291":2,"293":1,"294":1,"296":1,"298":3,"299":1,"300":1,"304":3,"306":1,"308":1,"309":1,"311":1,"312":3,"313":1,"314":2,"315":2,"316":1,"318":1,"319":5,"321":4,"322":1,"327":6,"332":1,"333":1,"334":4,"335":2,"338":1,"339":1,"340":4,"343":1,"345":3,"348":1,"350":1,"351":1,"352":1,"354":2,"357":1,"358":3,"359":2,"360":2,"361":1,"362":2,"363":2,"364":1,"368":3,"369":2,"396":4,"399":3,"400":1,"402":1,"404":3,"407":5,"408":2,"409":1,"410":6,"413":1,"414":2,"415":1,"416":3,"421":2,"422":1,"424":1,"426":5,"427":1,"429":2,"435":1,"442":2,"445":2,"446":1,"447":2,"448":5,"451":2,"452":2,"453":1,"454":1,"457":3,"458":3,"462":1,"465":1,"466":3,"474":1,"476":1,"478":5,"479":1,"482":1,"483":1,"487":1,"491":2,"492":2,"506":1,"541":1,"545":1,"547":2,"551":1,"583":1}}],["избавляет",{"2":{"261":1}}],["избыточную",{"2":{"477":1}}],["избыточности",{"2":{"199":1}}],["избыточная",{"2":{"96":1}}],["избегая",{"2":{"363":1}}],["избегаемы",{"2":{"474":1}}],["избегаем",{"2":{"341":1}}],["избегание",{"2":{"257":1}}],["избегания",{"2":{"199":1}}],["избегайте",{"0":{"484":1},"2":{"196":1,"247":1,"438":1}}],["избегать",{"2":{"196":1,"263":1,"274":1,"286":1,"288":1,"356":1}}],["избежание",{"2":{"186":1}}],["избежания",{"2":{"9":1,"573":1}}],["избежать",{"2":{"44":1,"182":1,"198":1,"211":1,"212":1,"248":1,"273":1,"348":1,"360":1,"432":1,"476":1,"482":1}}],["избранном",{"2":{"111":1}}],["избранного",{"2":{"107":1}}],["избранное",{"0":{"110":1},"1":{"111":1,"112":1,"113":1,"114":1,"115":1},"2":{"4":1,"29":1,"33":1,"111":3,"113":2,"114":1}}],["исчезновении",{"2":{"550":1}}],["исчезают",{"2":{"370":1}}],["исчезла",{"2":{"237":1,"465":1}}],["исчерпывающее",{"2":{"282":1}}],["исчерпывающий",{"2":{"191":1}}],["исчерпывающим",{"2":{"126":1,"160":1}}],["истинным",{"2":{"452":1}}],["истины",{"2":{"199":1,"313":1,"314":1}}],["истечения",{"2":{"152":1,"420":1}}],["истечении",{"2":{"142":1,"152":1,"357":1}}],["историю",{"2":{"411":1,"458":1}}],["история",{"2":{"228":1,"239":1,"458":1}}],["истории",{"2":{"134":2,"143":1,"144":1,"145":1,"147":1,"153":1,"154":1,"413":2}}],["историческим",{"2":{"457":1}}],["исторически",{"2":{"44":1,"478":1}}],["источники",{"2":{"491":1,"502":1}}],["источнику",{"2":{"125":1,"491":1}}],["источник",{"2":{"125":1,"313":1,"314":1,"360":1,"458":1}}],["источников",{"2":{"122":1,"125":3,"345":2}}],["искренне",{"2":{"380":1}}],["искренней",{"2":{"188":1}}],["искусственной",{"2":{"336":1}}],["искусственного",{"2":{"239":1}}],["искушению",{"2":{"195":1}}],["искушение",{"2":{"88":1}}],["исключительных",{"2":{"492":1}}],["исключительным",{"2":{"200":1}}],["исключить",{"2":{"454":1}}],["исключают",{"2":{"454":1}}],["исключается",{"2":{"180":1}}],["исключена",{"2":{"319":1}}],["исключение",{"2":{"272":2}}],["исключением",{"2":{"141":1,"180":1,"197":2,"256":1,"272":1,"338":1,"348":1,"445":1,"478":1}}],["исключения",{"2":{"156":1,"272":1,"462":1}}],["искать",{"2":{"48":1,"242":2,"375":1,"428":1}}],["исходящими",{"2":{"286":1}}],["исходящие",{"2":{"197":1}}],["исходя",{"2":{"186":1,"296":1,"304":1,"306":1,"407":1}}],["исходном",{"2":{"360":1,"448":1,"453":1,"454":1,"468":1}}],["исходному",{"2":{"198":1,"321":1}}],["исходного",{"2":{"151":2,"228":1,"319":1,"343":1,"369":1,"430":1,"444":1,"457":1,"458":1}}],["исходные",{"2":{"458":1}}],["исходными",{"0":{"458":1}}],["исходным",{"2":{"333":1,"442":1,"447":1,"454":1,"457":1,"463":1}}],["исходный",{"2":{"187":1,"219":1,"227":1,"238":1,"260":1,"284":1,"299":1,"321":1,"353":1,"443":1,"447":1,"463":1,"465":1}}],["исходных",{"0":{"390":1},"2":{"178":1,"180":2,"456":1,"457":1}}],["исходники",{"2":{"96":1}}],["исходная",{"2":{"12":1}}],["исхода",{"2":{"70":1}}],["исследование",{"0":{"414":1},"1":{"415":1,"416":1,"417":1,"418":1,"419":1,"420":1,"421":1,"422":1}}],["исследований",{"2":{"245":1,"444":1}}],["исследования",{"2":{"39":1,"237":1}}],["исследовать",{"2":{"4":1,"180":1}}],["исследуем",{"2":{"21":1,"234":1}}],["испытываем",{"2":{"419":1}}],["испортит",{"2":{"479":1}}],["испорчен",{"2":{"416":1}}],["исполнение",{"2":{"224":1,"483":1}}],["исполнения",{"2":{"157":1,"483":2}}],["использовалось",{"2":{"314":1}}],["использовал",{"2":{"242":1,"458":1}}],["использовались",{"2":{"442":1,"474":1}}],["использовали",{"2":{"89":1,"112":1,"199":1,"218":1,"318":1,"359":1,"371":1,"399":1,"407":1,"410":2,"413":1,"450":1}}],["использованы",{"2":{"244":1,"416":2}}],["использована",{"2":{"160":1,"168":1}}],["использован",{"2":{"156":1,"160":1}}],["использовано",{"2":{"142":1,"234":1}}],["использованию",{"2":{"96":1,"182":1,"187":1,"189":1,"250":1,"291":1,"339":1,"365":1,"449":1,"462":1,"474":1,"483":1}}],["использованием",{"2":{"143":1,"177":1,"196":1,"210":1,"215":1,"218":1,"234":1,"241":1,"274":1,"279":1,"291":1,"302":1,"304":1,"319":1,"320":1,"334":2,"346":1,"353":1,"362":1,"364":1,"371":2,"397":1,"408":1,"422":1,"426":1,"435":1,"436":1,"444":1,"445":1,"448":1,"449":1,"460":1,"476":2,"492":1,"515":1}}],["использование",{"0":{"55":1,"157":1,"447":1,"462":1,"511":1,"512":1,"513":1,"528":1,"577":1},"1":{"158":1,"448":1,"463":1},"2":{"40":1,"59":1,"68":1,"96":1,"125":1,"142":1,"151":1,"152":1,"156":1,"160":2,"168":1,"177":1,"181":1,"183":2,"184":1,"198":1,"221":1,"231":1,"234":1,"238":1,"243":1,"248":1,"254":1,"257":1,"260":2,"264":1,"268":1,"271":1,"284":1,"288":1,"291":1,"299":2,"313":1,"315":1,"316":1,"318":2,"321":1,"346":1,"347":1,"357":1,"359":1,"363":2,"364":1,"368":1,"369":2,"375":1,"399":3,"407":1,"409":1,"413":1,"415":1,"416":1,"419":1,"421":1,"433":1,"444":1,"445":2,"448":2,"449":1,"450":1,"464":1,"476":1,"478":2,"482":1,"490":1,"492":1,"501":1,"538":1}}],["использовании",{"2":{"39":1,"96":1,"129":1,"130":1,"137":1,"138":1,"144":1,"151":1,"153":1,"154":1,"158":2,"160":1,"164":1,"183":1,"186":1,"187":1,"239":1,"243":1,"258":1,"268":1,"271":1,"279":1,"281":1,"314":1,"327":2,"329":1,"330":1,"359":1,"376":1,"399":1,"400":1,"413":1,"422":1,"438":1,"458":1}}],["использования",{"2":{"23":1,"67":1,"96":1,"100":1,"112":1,"130":1,"131":1,"132":2,"142":2,"151":1,"156":1,"157":2,"160":2,"183":1,"187":1,"192":1,"198":1,"202":1,"212":1,"213":1,"215":1,"218":1,"219":1,"223":1,"226":1,"231":1,"236":1,"249":2,"258":1,"268":1,"274":1,"288":1,"289":1,"291":2,"300":1,"303":1,"311":1,"312":1,"314":1,"319":2,"320":2,"325":1,"337":1,"339":1,"350":1,"354":1,"356":2,"358":1,"361":2,"362":1,"363":1,"397":1,"400":1,"407":1,"410":1,"411":1,"414":1,"416":1,"418":1,"420":2,"421":1,"422":1,"424":1,"438":1,"454":1,"463":1,"466":1,"474":1,"478":1,"491":1,"492":1,"538":1,"546":1,"577":1}}],["использоваться",{"2":{"67":1,"144":1,"162":1,"179":2,"183":1,"192":1,"253":1,"257":1,"258":1,"314":1,"334":1,"356":1,"384":1,"402":1,"404":1,"416":1,"545":1}}],["использовать",{"0":{"209":1},"2":{"10":1,"17":1,"39":1,"56":1,"59":2,"73":1,"89":1,"96":3,"98":1,"105":1,"111":1,"122":2,"124":1,"130":5,"132":1,"138":1,"144":1,"145":1,"149":1,"151":2,"156":7,"157":2,"158":2,"159":7,"160":4,"163":1,"166":1,"167":3,"168":2,"169":1,"174":2,"177":1,"178":4,"179":2,"180":1,"181":1,"183":5,"184":1,"186":2,"191":1,"195":1,"199":2,"202":1,"203":1,"211":1,"212":1,"214":1,"217":1,"219":1,"223":3,"228":1,"229":1,"231":3,"233":2,"234":5,"235":1,"237":1,"250":1,"252":1,"255":1,"258":1,"260":1,"264":1,"266":1,"289":1,"291":2,"293":2,"295":2,"296":1,"297":1,"299":11,"300":1,"303":1,"306":1,"308":1,"309":1,"311":2,"312":2,"314":1,"315":1,"316":1,"317":1,"318":2,"319":3,"320":1,"321":3,"322":1,"325":1,"327":2,"330":5,"331":1,"333":1,"334":1,"337":2,"338":1,"340":2,"346":2,"351":1,"354":3,"356":2,"357":1,"362":2,"363":2,"364":1,"365":1,"368":4,"372":1,"376":1,"400":1,"401":2,"407":1,"409":2,"410":2,"413":2,"414":4,"415":1,"416":1,"417":1,"418":2,"422":4,"423":1,"424":2,"426":3,"429":1,"436":4,"441":1,"447":1,"448":1,"450":1,"453":2,"454":1,"457":1,"458":2,"462":2,"463":1,"476":1,"478":1,"482":2,"483":3,"487":1,"515":1,"538":1,"542":1,"543":1,"547":1}}],["используйте",{"0":{"244":1,"485":1,"487":1,"488":1},"2":{"130":2,"159":2,"164":2,"174":1,"179":1,"181":1,"251":1,"324":1,"424":1,"448":1,"474":2,"485":1,"490":1}}],["используя",{"2":{"100":1,"124":1,"142":1,"145":1,"156":1,"158":1,"160":1,"179":1,"181":3,"186":1,"187":1,"189":1,"195":1,"201":1,"227":1,"231":1,"232":1,"242":1,"299":1,"300":1,"308":1,"316":1,"318":1,"319":1,"321":1,"333":1,"334":1,"338":1,"348":1,"360":1,"362":2,"369":1,"377":1,"384":1,"396":1,"404":3,"408":1,"410":1,"416":1,"422":1,"429":2,"448":2,"453":1,"467":1,"500":1}}],["использующей",{"2":{"538":1}}],["использующем",{"2":{"420":1}}],["использующего",{"2":{"125":1,"309":1}}],["использующая",{"2":{"363":1}}],["использующим",{"2":{"422":1}}],["использующими",{"2":{"316":1,"327":1}}],["использующие",{"2":{"421":1}}],["использующий",{"2":{"243":1}}],["используют",{"2":{"132":1,"155":1,"169":1,"178":1,"257":1,"269":1,"289":1,"308":1,"360":1,"422":1,"483":1}}],["используются",{"2":{"22":1,"73":1,"88":1,"123":1,"134":1,"145":1,"154":1,"156":1,"168":1,"176":1,"180":1,"187":1,"207":1,"220":1,"226":1,"234":2,"239":1,"251":1,"253":1,"289":1,"293":1,"323":1,"354":1,"357":2,"358":1,"396":1,"416":1,"419":1,"429":1,"482":1,"588":1}}],["использую",{"2":{"96":1,"117":1,"157":1,"478":1}}],["используешь",{"2":{"96":1}}],["используете",{"2":{"132":1,"201":1,"459":1,"485":1}}],["использует",{"2":{"56":1,"130":2,"144":1,"181":1,"184":1,"226":1,"241":1,"244":1,"257":1,"291":1,"300":1,"338":1,"364":1,"396":1,"404":1,"415":1,"427":1,"429":1,"441":1,"446":1,"447":1,"448":1,"456":1,"474":2,"478":1,"506":1,"547":1,"561":1}}],["используется",{"2":{"7":1,"23":1,"50":1,"123":1,"125":1,"142":3,"144":1,"145":1,"146":1,"155":1,"160":1,"165":1,"167":1,"180":1,"187":1,"198":1,"209":1,"223":1,"226":1,"231":1,"241":2,"252":1,"254":1,"256":1,"258":1,"260":1,"264":1,"266":2,"267":2,"268":2,"281":1,"283":1,"284":1,"294":1,"295":1,"313":1,"315":1,"318":1,"331":1,"356":1,"362":1,"369":1,"396":1,"404":1,"413":1,"416":2,"429":1,"454":1,"457":1,"463":1,"465":1,"474":1,"482":2,"491":1,"502":1,"508":2,"538":4,"546":1,"588":1}}],["используемую",{"2":{"294":1,"416":1}}],["используемое",{"2":{"267":1,"294":1}}],["используемом",{"2":{"182":1}}],["используемого",{"2":{"125":1,"128":1,"152":1,"156":1,"260":1,"467":1}}],["используемая",{"2":{"156":1}}],["используемым",{"2":{"354":1}}],["используемыми",{"2":{"348":1,"413":1}}],["используемых",{"2":{"150":1,"337":1,"340":1,"413":1,"423":1}}],["используемые",{"2":{"132":1,"158":1,"160":1,"161":1,"180":1,"251":1,"410":1,"413":1,"435":1,"436":1,"476":1,"477":1}}],["используемый",{"2":{"123":1,"168":1,"187":1,"254":1,"281":1,"291":1,"340":1,"359":1,"414":1,"416":1}}],["используем",{"2":{"17":1,"23":3,"56":1,"89":1,"107":2,"121":1,"129":1,"142":1,"143":1,"145":1,"149":1,"157":2,"159":2,"160":2,"162":1,"166":1,"183":2,"186":3,"187":1,"188":1,"212":2,"214":1,"219":1,"225":1,"227":1,"233":1,"261":3,"311":1,"313":1,"315":1,"316":2,"318":1,"319":2,"320":1,"329":2,"334":1,"339":1,"340":1,"343":1,"345":1,"359":1,"360":1,"362":4,"363":1,"369":2,"402":1,"404":1,"407":3,"409":1,"416":2,"417":1,"419":1,"420":1,"448":1,"452":1,"453":1,"465":1}}],["испускать",{"2":{"481":1}}],["испуская",{"2":{"353":1}}],["испускающую",{"2":{"309":1}}],["испускает",{"2":{"223":1}}],["испускаемые",{"2":{"453":1}}],["испускаем",{"2":{"131":1}}],["исправить",{"2":{"301":1,"453":1,"465":1}}],["исправление",{"2":{"79":1}}],["исправлять",{"2":{"2":1}}],["иная",{"2":{"482":1}}],["иначе",{"2":{"159":1,"167":1,"178":1,"240":1,"279":1,"415":1,"448":1,"452":1,"478":1}}],["ингридиент",{"2":{"479":1}}],["инкремента",{"2":{"306":1,"307":1,"308":1}}],["инкапсуляций",{"2":{"363":1}}],["инкапсуляции",{"2":{"174":1,"181":1,"217":1,"231":1,"363":1,"407":1}}],["инкапсуляция",{"0":{"3":1,"197":1},"2":{"191":1,"197":1}}],["инкапсулировав",{"2":{"449":1}}],["инкапсулированные",{"2":{"436":1,"476":1}}],["инкапсулировать",{"2":{"209":1}}],["инкапсулировали",{"2":{"112":1,"482":1}}],["инкапсулирующая",{"2":{"436":1,"476":1}}],["инкапсулируют",{"2":{"183":1}}],["инкапсулируя",{"2":{"331":1}}],["инкапсулирует",{"2":{"159":1,"334":1,"434":1,"476":1,"482":1}}],["инноваций",{"2":{"268":1}}],["иным",{"2":{"455":1}}],["иные",{"2":{"235":1}}],["иных",{"2":{"64":1,"492":1}}],["инициировать",{"2":{"332":1}}],["инициируя",{"2":{"299":1}}],["инициирует",{"2":{"298":1}}],["инициирующей",{"2":{"125":1}}],["инициализация",{"0":{"536":1},"2":{"546":1,"577":1}}],["инициализации",{"2":{"313":1,"547":1,"563":1}}],["инициализировать",{"2":{"413":1}}],["инициализирован",{"2":{"462":1}}],["инициализированную",{"2":{"311":1}}],["инициализировано",{"2":{"223":1}}],["инициализируя",{"2":{"321":1}}],["инициализируем",{"2":{"227":1,"363":1}}],["инициативе",{"2":{"298":1}}],["инъекцией",{"2":{"215":1}}],["инъекцию",{"2":{"214":1,"308":1,"365":1}}],["инъекции",{"0":{"549":1},"2":{"213":1,"215":1,"218":1,"300":1,"354":1,"360":1,"361":1,"371":1,"549":1}}],["инъекция",{"0":{"213":1,"360":1},"1":{"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1},"2":{"191":1,"359":1}}],["инъекциях",{"2":{"121":1}}],["инвокер",{"2":{"212":1,"216":1,"218":1,"224":2,"225":2}}],["инвокеру",{"2":{"212":1,"224":1}}],["инвертирует",{"2":{"156":1}}],["инжектируете",{"2":{"438":1}}],["инжектируется",{"2":{"422":1}}],["инжектирует",{"2":{"406":1}}],["инжектируемого",{"2":{"542":1}}],["инжектируем",{"2":{"368":2}}],["инжектируемый",{"2":{"360":1,"365":1,"368":1}}],["инжектируемых",{"2":{"171":1}}],["инжектируемые",{"2":{"171":1}}],["инжектируйте",{"2":{"368":1}}],["инжектировать",{"2":{"437":1}}],["инжектироваться",{"2":{"300":1,"367":1}}],["инжектированный",{"2":{"369":1,"422":1}}],["инжектированы",{"2":{"360":1}}],["инженеру",{"2":{"394":1}}],["инженер",{"2":{"287":1}}],["инженерной",{"2":{"240":1}}],["инженерные",{"2":{"188":1}}],["инженерии",{"2":{"155":1,"156":1,"194":1,"202":1}}],["интрасетей",{"2":{"142":1}}],["интеллектуальные",{"2":{"422":1}}],["интеллекта",{"2":{"239":1}}],["интегрирует",{"2":{"459":1}}],["интегрируется",{"2":{"447":1}}],["интегрируются",{"2":{"291":1,"451":1,"586":1}}],["интегрирующие",{"2":{"194":1}}],["интегрированные",{"2":{"198":1}}],["интегрированной",{"2":{"177":1}}],["интегрировать",{"2":{"180":1,"189":1,"190":1,"455":1}}],["интеграцию",{"2":{"538":1}}],["интеграционное",{"2":{"444":1}}],["интеграционные",{"2":{"77":1,"479":1}}],["интеграция",{"0":{"181":1,"467":1},"1":{"182":1},"2":{"70":1,"177":1,"394":1,"466":1,"467":1,"478":1,"573":1}}],["интеграции",{"2":{"41":1,"151":1,"190":1,"234":1,"289":1,"296":1,"323":1,"444":1,"542":2}}],["интерактивные",{"2":{"399":1}}],["интерактивных",{"2":{"350":1,"399":1}}],["интерактивность",{"2":{"399":2,"453":1}}],["интерактивности",{"0":{"353":1},"2":{"351":1,"399":2,"482":1}}],["интервал",{"2":{"244":1}}],["интервалам",{"2":{"244":1}}],["интервалом",{"2":{"243":1,"257":1}}],["интересная",{"2":{"503":1}}],["интересными",{"2":{"502":1}}],["интересный",{"2":{"396":1}}],["интересное",{"2":{"177":1,"478":1}}],["интересного",{"2":{"142":1,"330":1}}],["интересам",{"2":{"281":1}}],["интересующих",{"2":{"227":1}}],["интерес",{"2":{"180":1}}],["интерполяции",{"2":{"187":1}}],["интерполяцией",{"2":{"157":1,"165":1}}],["интерполируем",{"2":{"229":1}}],["интерполируя",{"2":{"187":1}}],["интерполированное",{"2":{"165":1}}],["интерпретатору",{"2":{"234":1}}],["интерпретатора",{"2":{"73":1}}],["интерпретации",{"2":{"160":1}}],["интерпретируют",{"2":{"279":1}}],["интерпретируются",{"2":{"157":1}}],["интерпретируется",{"2":{"273":1}}],["интерпретировано",{"2":{"163":1}}],["интерпретировать",{"2":{"158":1,"159":1}}],["интерфейсе",{"2":{"456":1}}],["интерфейсной",{"2":{"369":1}}],["интерфейсом",{"2":{"192":1,"231":1,"331":1,"369":1}}],["интерфейсов",{"2":{"74":1,"156":2,"179":1,"189":1,"231":1,"240":2,"244":1,"247":1,"248":1,"291":2,"348":1,"350":1,"375":1,"385":1,"410":1}}],["интерфейс",{"0":{"456":1},"2":{"73":1,"151":1,"159":1,"181":1,"197":1,"221":1,"228":1,"230":1,"231":1,"233":1,"239":1,"242":1,"244":1,"298":3,"299":1,"314":1,"319":3,"327":1,"331":1,"360":1,"365":1,"399":1,"408":1,"421":1,"455":1,"459":1}}],["интерфейсами",{"2":{"240":1}}],["интерфейса",{"0":{"240":1,"245":1,"348":1,"351":1,"385":1},"1":{"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"349":1,"350":1,"351":1,"352":1,"353":1,"354":1,"355":1,"356":1,"357":1,"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1,"365":1,"366":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1},"2":{"73":1,"124":1,"131":1,"159":2,"166":1,"185":1,"195":1,"196":2,"198":1,"220":2,"228":2,"229":1,"232":1,"237":1,"239":2,"240":6,"241":2,"244":3,"246":1,"253":2,"257":1,"268":1,"273":1,"291":1,"294":1,"308":1,"319":1,"335":1,"338":1,"350":1,"362":1,"363":1,"392":1,"399":1,"400":1,"433":1,"435":1,"456":1,"476":2,"479":1}}],["интерфейсы",{"2":{"23":1,"239":1,"242":1,"275":1,"348":2,"399":1,"436":1,"476":1}}],["интернационализационным",{"2":{"474":1,"575":1}}],["интернационализации",{"2":{"474":1,"575":1}}],["интернационализация",{"2":{"69":1,"437":1,"474":1,"572":1}}],["интернету",{"2":{"145":1,"302":1}}],["интернет",{"2":{"125":4,"145":1,"152":1,"155":1,"231":1,"273":1,"491":1}}],["интернета",{"2":{"124":1,"275":1,"399":1,"422":1,"467":1,"491":1}}],["интернете",{"2":{"27":1,"62":1,"104":1,"107":1,"124":1,"138":1,"139":2,"142":3,"153":1,"154":1,"181":2,"257":1,"283":1,"302":1,"340":1,"416":1,"457":1,"467":1,"490":1,"491":1}}],["интерьерные",{"2":{"62":1}}],["информирования",{"2":{"256":1}}],["информатике",{"2":{"457":1}}],["информативную",{"2":{"248":1}}],["информативен",{"2":{"240":1}}],["информационной",{"2":{"396":1}}],["информационного",{"2":{"304":1}}],["информационный",{"2":{"140":1,"238":1,"287":1}}],["информацией",{"2":{"159":1,"179":1,"224":1,"254":1,"256":1,"304":1,"308":1,"396":1,"407":1,"416":2,"515":1}}],["информации",{"2":{"82":1,"83":1,"123":1,"135":1,"239":1,"248":1,"251":1,"257":1,"286":2,"304":2,"305":1,"306":1,"311":1,"319":1,"343":1,"352":1,"388":1,"416":1,"466":1,"491":1,"502":2}}],["информация",{"2":{"31":1,"47":1,"51":1,"118":1,"123":1,"254":1,"306":1,"324":1,"338":1,"408":1,"447":1,"468":1,"502":1,"503":1}}],["информацию",{"2":{"11":1,"134":1,"168":1,"179":1,"182":1,"246":1,"247":1,"249":1,"251":1,"253":1,"254":1,"265":1,"332":1,"333":1,"338":1,"342":1,"345":1,"352":1,"410":1,"413":1,"415":1,"416":3,"437":1,"455":1,"491":1}}],["инфраструктуры",{"2":{"145":1}}],["инфраструктуре",{"2":{"142":1}}],["инсталляторов",{"2":{"459":1}}],["инсталляторах",{"2":{"247":1}}],["инсталируемым",{"2":{"375":1}}],["инстанцированный",{"2":{"221":1}}],["инстанцировании",{"2":{"212":2}}],["инстанцирования",{"2":{"195":1,"209":1,"212":1,"217":1,"330":1}}],["инстанцирование",{"2":{"127":2}}],["инстанцировать",{"2":{"181":1,"327":1,"329":1}}],["инстанцию",{"2":{"128":1}}],["инструкцию",{"2":{"233":1}}],["инструкций",{"2":{"153":1}}],["инструкциями",{"2":{"369":1}}],["инструкциям",{"2":{"181":1,"305":1,"366":1,"459":1}}],["инструкция",{"2":{"152":1,"512":1}}],["инструкции",{"2":{"152":2,"181":1,"396":1}}],["инструменту",{"2":{"301":1}}],["инструментах",{"2":{"318":1,"442":1,"444":1,"463":1}}],["инструментария",{"2":{"202":1}}],["инструментам",{"2":{"184":1,"327":1}}],["инструментами",{"2":{"151":1,"301":1,"390":1,"446":1}}],["инструмента",{"2":{"178":2,"180":1,"301":1,"453":1,"467":1,"541":1}}],["инструментов",{"2":{"177":2,"189":1,"195":1,"220":1,"299":1,"313":1,"314":1,"318":1,"323":1,"327":1,"375":1,"377":1,"442":2,"444":1,"445":1,"447":1,"450":1,"466":1}}],["инструменты",{"0":{"179":1},"2":{"139":1,"177":1,"178":3,"189":1,"297":2,"301":2,"303":1,"322":1,"327":1,"346":1,"348":1,"384":1,"387":1,"394":1,"422":1,"445":2,"448":1,"450":1,"451":1,"459":2,"466":1,"468":2,"492":1}}],["инструмент",{"2":{"50":1,"157":1,"180":2,"184":1,"300":1,"314":1,"361":1,"362":1,"455":1,"456":1,"489":1}}],["инета",{"2":{"124":1}}],["индустрии",{"2":{"423":1,"468":1}}],["индивидуальных",{"2":{"291":1}}],["индивидуальные",{"2":{"280":1}}],["индивидуально",{"2":{"123":1}}],["индикатором",{"2":{"258":2}}],["индикаторов",{"2":{"258":1}}],["индикаторы",{"2":{"258":1}}],["индикатора",{"2":{"258":1}}],["индексу",{"2":{"453":1}}],["индексный",{"2":{"339":1}}],["индексировать",{"2":{"492":1}}],["индексироваться",{"2":{"291":1,"339":1}}],["индексированные",{"2":{"339":1}}],["индексируемыми",{"2":{"339":1}}],["индексируется",{"2":{"492":1}}],["индексирует",{"2":{"48":1}}],["индексы",{"2":{"165":1}}],["индекс",{"2":{"165":1}}],["индексация",{"2":{"48":1}}],["индексации",{"2":{"17":1,"399":1,"492":2}}],["индекса",{"2":{"17":1}}],["ином",{"2":{"202":1,"474":1}}],["иной",{"2":{"96":1,"126":1,"134":1,"156":2,"243":1,"396":1,"397":1,"541":1}}],["иное",{"2":{"59":1,"130":1,"293":1,"541":1}}],["иного",{"2":{"22":1,"490":1}}],["иногда",{"2":{"4":1,"188":1,"222":1,"233":1,"239":1,"399":1,"436":2,"467":1,"477":1,"478":1,"490":1,"492":2}}],["их",{"2":{"2":1,"12":1,"23":1,"26":1,"38":1,"62":1,"74":3,"88":1,"92":2,"96":2,"106":1,"107":1,"124":1,"130":3,"131":1,"142":4,"144":1,"153":1,"156":3,"158":2,"159":2,"160":1,"168":4,"174":1,"175":1,"177":1,"179":1,"180":7,"181":3,"183":4,"184":1,"185":1,"191":1,"194":2,"197":1,"198":1,"201":1,"202":1,"207":1,"210":1,"214":1,"219":1,"220":1,"222":1,"224":2,"228":1,"231":1,"232":2,"234":2,"235":2,"243":1,"247":1,"248":2,"252":1,"258":1,"266":1,"269":1,"274":1,"275":1,"286":1,"287":1,"288":1,"289":2,"291":3,"293":1,"299":2,"304":1,"308":1,"310":1,"311":2,"313":1,"316":1,"318":4,"319":4,"325":2,"327":2,"332":1,"335":2,"337":1,"339":1,"340":1,"342":1,"345":1,"346":1,"347":1,"350":1,"352":1,"353":1,"357":2,"358":3,"359":1,"360":2,"362":2,"363":1,"365":2,"369":1,"387":1,"396":1,"397":2,"399":4,"402":1,"403":1,"404":1,"407":2,"409":2,"413":4,"414":2,"415":2,"416":1,"419":1,"420":1,"421":1,"422":1,"423":1,"426":4,"436":1,"437":4,"438":3,"442":1,"444":2,"445":1,"446":1,"447":3,"448":1,"451":1,"453":2,"454":1,"458":1,"459":1,"462":1,"463":1,"465":1,"468":2,"470":1,"474":1,"476":1,"478":6,"479":1,"482":3,"485":1,"486":1,"491":1,"506":1,"538":1,"542":1,"547":1}}],["и",{"0":{"1":1,"3":1,"16":1,"59":1,"66":1,"74":1,"77":1,"80":1,"90":1,"115":1,"118":1,"123":1,"127":1,"128":1,"131":1,"133":1,"134":1,"135":1,"142":1,"145":1,"160":1,"164":1,"165":1,"167":1,"170":1,"172":1,"173":1,"179":1,"180":1,"191":1,"200":1,"242":1,"243":1,"244":1,"252":1,"258":1,"260":1,"262":1,"273":1,"283":1,"309":1,"319":1,"320":1,"351":1,"352":1,"353":1,"354":1,"356":1,"357":1,"358":1,"360":1,"362":1,"363":1,"373":1,"383":1,"390":1,"403":1,"408":1,"415":1,"416":1,"429":1,"438":1,"442":1,"444":1,"447":1,"457":1,"464":1,"467":1,"474":1,"485":1,"488":1,"490":1,"492":1,"501":1,"507":1,"536":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"67":1,"68":1,"69":1,"70":1,"144":1,"146":1,"147":1,"148":1,"149":1,"150":1,"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":1,"203":1,"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"232":1,"233":1,"234":1,"235":1,"236":1,"259":1,"261":1,"263":1,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1,"310":1,"311":1,"321":1,"322":1,"364":1,"374":1,"375":1,"376":1,"377":1,"378":1,"379":1,"380":1,"404":1,"405":1,"409":1,"410":1,"439":1,"440":1,"441":1,"443":1,"444":1,"445":1,"446":1,"447":1,"448":2,"449":1,"450":1,"451":1,"452":1,"453":1,"454":1,"455":1,"456":1,"457":1,"458":1,"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1,"467":1,"468":1,"469":1,"508":1},"2":{"2":2,"3":6,"4":5,"6":1,"7":1,"9":4,"10":1,"11":4,"12":2,"13":1,"16":2,"17":5,"18":1,"21":2,"22":5,"23":3,"26":5,"28":1,"34":1,"35":1,"36":2,"38":2,"39":3,"40":2,"41":2,"43":2,"44":1,"47":3,"48":2,"50":4,"51":1,"56":1,"58":2,"59":4,"61":1,"62":3,"63":3,"64":1,"65":1,"67":4,"69":1,"70":5,"72":4,"73":8,"74":10,"76":2,"79":2,"82":1,"83":4,"85":1,"89":3,"90":1,"92":2,"93":1,"95":2,"96":30,"98":5,"100":1,"101":1,"104":7,"105":1,"106":3,"107":4,"109":2,"111":2,"112":4,"113":4,"114":6,"115":1,"117":3,"118":1,"121":3,"122":6,"123":23,"124":16,"125":3,"126":10,"127":4,"128":3,"129":1,"130":8,"131":7,"132":8,"133":2,"134":6,"137":2,"138":4,"139":8,"141":1,"142":10,"143":2,"144":2,"145":11,"146":2,"147":1,"148":4,"149":4,"150":2,"151":6,"152":15,"153":8,"154":4,"155":24,"156":29,"157":15,"158":9,"159":15,"160":33,"161":1,"164":3,"165":1,"166":4,"167":4,"168":9,"169":2,"170":1,"171":4,"172":1,"173":1,"174":5,"175":4,"176":1,"177":7,"178":14,"179":21,"180":22,"181":13,"182":2,"183":17,"184":10,"185":8,"186":3,"187":26,"188":11,"189":5,"190":1,"191":13,"192":5,"193":1,"194":6,"195":2,"196":13,"197":7,"198":14,"199":9,"200":5,"201":6,"202":9,"203":2,"204":1,"205":1,"206":1,"207":6,"208":4,"211":3,"212":4,"214":1,"215":1,"216":1,"217":1,"218":3,"219":3,"220":4,"221":2,"222":8,"223":10,"224":6,"225":1,"226":11,"227":13,"228":13,"229":2,"230":2,"231":10,"232":5,"233":6,"234":23,"235":5,"236":2,"237":13,"239":17,"240":5,"241":6,"242":8,"243":9,"244":8,"245":2,"246":4,"247":2,"248":11,"249":7,"250":1,"251":6,"252":10,"253":3,"254":4,"255":3,"256":4,"257":11,"258":8,"259":2,"260":13,"261":7,"262":2,"263":4,"264":2,"265":1,"266":8,"267":2,"268":6,"269":5,"270":1,"271":4,"272":4,"273":13,"274":4,"275":2,"276":1,"277":2,"278":2,"279":3,"280":2,"281":2,"283":1,"284":2,"285":1,"286":1,"287":7,"288":2,"289":9,"291":35,"293":5,"294":2,"295":3,"296":4,"297":2,"298":11,"299":11,"300":8,"301":4,"302":7,"303":3,"304":9,"305":3,"306":15,"307":2,"308":6,"309":5,"310":1,"311":11,"312":8,"313":10,"314":8,"315":7,"316":5,"318":13,"319":31,"320":5,"321":6,"322":5,"323":4,"324":3,"325":6,"327":22,"328":2,"329":2,"330":4,"331":8,"332":6,"333":4,"334":12,"335":7,"336":9,"337":10,"338":6,"339":7,"340":6,"341":4,"342":2,"343":5,"344":1,"345":9,"346":9,"348":8,"349":1,"350":4,"351":5,"352":10,"353":2,"354":6,"355":2,"356":4,"357":8,"358":5,"359":7,"360":12,"361":1,"362":6,"363":11,"364":2,"365":6,"367":1,"368":23,"369":15,"370":2,"371":5,"372":2,"375":11,"376":5,"377":6,"380":3,"382":1,"383":2,"385":1,"387":1,"388":2,"389":1,"391":1,"392":3,"393":1,"394":3,"396":18,"397":2,"399":33,"400":10,"401":4,"402":5,"404":18,"405":1,"406":4,"407":14,"408":8,"409":2,"410":9,"411":1,"412":1,"413":13,"414":5,"415":19,"416":20,"417":1,"418":3,"419":8,"420":11,"421":16,"422":24,"423":8,"424":3,"425":5,"426":7,"429":8,"430":20,"433":1,"434":1,"435":8,"436":18,"437":2,"438":6,"442":15,"444":22,"445":15,"446":9,"447":17,"448":20,"449":1,"450":3,"451":6,"452":2,"453":20,"454":4,"455":5,"456":5,"457":11,"458":10,"459":3,"460":3,"462":3,"463":10,"464":3,"465":11,"466":12,"467":10,"468":6,"469":4,"470":3,"474":19,"476":17,"477":5,"478":34,"479":6,"481":2,"482":24,"483":22,"484":1,"486":5,"487":4,"488":2,"489":2,"490":22,"491":37,"492":31,"500":1,"501":3,"502":7,"503":1,"504":1,"508":5,"515":3,"522":2,"531":1,"533":1,"535":2,"537":2,"538":5,"540":4,"541":10,"542":14,"543":2,"546":1,"547":3,"552":2,"553":1,"561":2,"570":2,"573":8,"575":2,"577":1,"578":1,"580":6,"582":2,"586":2,"587":1,"588":3,"590":1,"591":2}}]],"serializationVersion":2}';export{t as default}; diff --git a/assets/chunks/VPLocalSearchBox.DTbzgQ3t.js b/assets/chunks/VPLocalSearchBox.Cdzee7la.js similarity index 99% rename from assets/chunks/VPLocalSearchBox.DTbzgQ3t.js rename to assets/chunks/VPLocalSearchBox.Cdzee7la.js index 72333a8ac..266a9a838 100644 --- a/assets/chunks/VPLocalSearchBox.DTbzgQ3t.js +++ b/assets/chunks/VPLocalSearchBox.Cdzee7la.js @@ -1,4 +1,4 @@ -var It=Object.defineProperty;var Dt=(o,e,t)=>e in o?It(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var _e=(o,e,t)=>(Dt(o,typeof e!="symbol"?e+"":e,t),t);import{X as Oe,j as oe,x as We,aJ as kt,aK as _t,d as Ot,G as xe,aL as rt,h as Fe,aM as Rt,aN as Mt,y as Lt,aO as Pt,k as Re,R as de,Q as Ee,aP as zt,aQ as Vt,Y as Bt,U as $t,aR as Wt,o as ee,b as Kt,l as k,a1 as Jt,m as j,aa as Ut,ab as jt,aS as Gt,c as re,n as at,e as Se,D as nt,F as it,a as ve,t as pe,aT as Qt,p as qt,q as Ht,aU as ot,aV as Yt,ay as Zt,aE as Xt,aW as er,_ as tr}from"./framework.B8KxSsRZ.js";import{u as rr,c as ar}from"./theme.DZmaZJwY.js";const nr={en:()=>Oe(()=>import("./@localSearchIndexen.Bkd2CT2K.js"),[]),root:()=>Oe(()=>import("./@localSearchIndexroot.cVud1dAQ.js"),[]),ru:()=>Oe(()=>import("./@localSearchIndexru.jA8buYU-.js"),[])};/*! +var It=Object.defineProperty;var Dt=(o,e,t)=>e in o?It(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var _e=(o,e,t)=>(Dt(o,typeof e!="symbol"?e+"":e,t),t);import{X as Oe,j as oe,x as We,aJ as kt,aK as _t,d as Ot,G as xe,aL as rt,h as Fe,aM as Rt,aN as Mt,y as Lt,aO as Pt,k as Re,R as de,Q as Ee,aP as zt,aQ as Vt,Y as Bt,U as $t,aR as Wt,o as ee,b as Kt,l as k,a1 as Jt,m as j,aa as Ut,ab as jt,aS as Gt,c as re,n as at,e as Se,D as nt,F as it,a as ve,t as pe,aT as Qt,p as qt,q as Ht,aU as ot,aV as Yt,ay as Zt,aE as Xt,aW as er,_ as tr}from"./framework.B8KxSsRZ.js";import{u as rr,c as ar}from"./theme.C42NH7fS.js";const nr={en:()=>Oe(()=>import("./@localSearchIndexen.DqmUO0wv.js"),[]),root:()=>Oe(()=>import("./@localSearchIndexroot.cVud1dAQ.js"),[]),ru:()=>Oe(()=>import("./@localSearchIndexru.0ouXapIQ.js"),[])};/*! * tabbable 6.2.0 * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE */var yt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Ne=yt.join(","),gt=typeof Element>"u",ue=gt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Ce=!gt&&Element.prototype.getRootNode?function(o){var e;return o==null||(e=o.getRootNode)===null||e===void 0?void 0:e.call(o)}:function(o){return o==null?void 0:o.ownerDocument},Ie=function o(e,t){var r;t===void 0&&(t=!0);var n=e==null||(r=e.getAttribute)===null||r===void 0?void 0:r.call(e,"inert"),a=n===""||n==="true",i=a||t&&e&&o(e.parentNode);return i},ir=function(e){var t,r=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return r===""||r==="true"},bt=function(e,t,r){if(Ie(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Ne));return t&&ue.call(e,Ne)&&n.unshift(e),n=n.filter(r),n},wt=function o(e,t,r){for(var n=[],a=Array.from(e);a.length;){var i=a.shift();if(!Ie(i,!1))if(i.tagName==="SLOT"){var s=i.assignedElements(),u=s.length?s:i.children,l=o(u,!0,r);r.flatten?n.push.apply(n,l):n.push({scopeParent:i,candidates:l})}else{var h=ue.call(i,Ne);h&&r.filter(i)&&(t||!e.includes(i))&&n.push(i);var d=i.shadowRoot||typeof r.getShadowRoot=="function"&&r.getShadowRoot(i),v=!Ie(d,!1)&&(!r.shadowRootFilter||r.shadowRootFilter(i));if(d&&v){var m=o(d===!0?i.children:d.children,!0,r);r.flatten?n.push.apply(n,m):n.push({scopeParent:i,candidates:m})}else a.unshift.apply(a,i.children)}}return n},xt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},se=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||ir(e))&&!xt(e)?0:e.tabIndex},or=function(e,t){var r=se(e);return r<0&&t&&!xt(e)?0:r},sr=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},Ft=function(e){return e.tagName==="INPUT"},ur=function(e){return Ft(e)&&e.type==="hidden"},lr=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(r){return r.tagName==="SUMMARY"});return t},cr=function(e,t){for(var r=0;rsummary:first-of-type"),i=a?e.parentElement:e;if(ue.call(i,"details:not([open]) *"))return!0;if(!r||r==="full"||r==="legacy-full"){if(typeof n=="function"){for(var s=e;e;){var u=e.parentElement,l=Ce(e);if(u&&!u.shadowRoot&&n(u)===!0)return st(e);e.assignedSlot?e=e.assignedSlot:!u&&l!==e.ownerDocument?e=l.host:e=u}e=s}if(vr(e))return!e.getClientRects().length;if(r!=="legacy-full")return!0}else if(r==="non-zero-area")return st(e);return!1},mr=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var r=0;r=0)},gr=function o(e){var t=[],r=[];return e.forEach(function(n,a){var i=!!n.scopeParent,s=i?n.scopeParent:n,u=or(s,i),l=i?o(n.candidates):s;u===0?i?t.push.apply(t,l):t.push(s):r.push({documentOrder:a,tabIndex:u,item:n,isScope:i,content:l})}),r.sort(sr).reduce(function(n,a){return a.isScope?n.push.apply(n,a.content):n.push(a.content),n},[]).concat(t)},br=function(e,t){t=t||{};var r;return t.getShadowRoot?r=wt([e],t.includeContainer,{filter:Ke.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:yr}):r=bt(e,t.includeContainer,Ke.bind(null,t)),gr(r)},wr=function(e,t){t=t||{};var r;return t.getShadowRoot?r=wt([e],t.includeContainer,{filter:De.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):r=bt(e,t.includeContainer,De.bind(null,t)),r},le=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ue.call(e,Ne)===!1?!1:Ke(t,e)},xr=yt.concat("iframe").join(","),Me=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ue.call(e,xr)===!1?!1:De(t,e)};/*! diff --git a/assets/chunks/theme.DZmaZJwY.js b/assets/chunks/theme.C42NH7fS.js similarity index 99% rename from assets/chunks/theme.DZmaZJwY.js rename to assets/chunks/theme.C42NH7fS.js index 342be8366..9028a6a13 100644 --- a/assets/chunks/theme.DZmaZJwY.js +++ b/assets/chunks/theme.C42NH7fS.js @@ -1,2 +1,2 @@ -const __vite__fileDeps=["assets/chunks/VPLocalSearchBox.DTbzgQ3t.js","assets/chunks/framework.B8KxSsRZ.js"],__vite__mapDeps=i=>i.map(i=>__vite__fileDeps[i]); -import{d as m,o as a,c as u,r as c,a as F,t as N,n as w,b as k,w as d,T as he,e as h,_ as $,u as Ve,i as Je,f as Ye,g as me,h as y,j as I,k as j,l as v,m as i,p as B,q as E,s as G,v as ue,x as R,y as te,z as _e,A as Te,B as Xe,C as Qe,F as C,D as O,E as z,G as Ne,H as oe,I as _,J as W,K as Ie,L as ne,M as J,N as se,O as Ze,P as we,Q as de,R as xe,S as Ce,U as ae,V as et,W as tt,X as ot,Y as Ae,Z as Me,$ as nt,a0 as st,a1 as at,a2 as rt,a3 as Y}from"./framework.B8KxSsRZ.js";const it=m({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(o){return(e,t)=>(a(),u("span",{class:w(["VPBadge",e.type])},[c(e.$slots,"default",{},()=>[F(N(e.text),1)])],2))}}),lt={key:0,class:"VPBackdrop"},ct=m({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(a(),k(he,{name:"fade"},{default:d(()=>[e.show?(a(),u("div",lt)):h("",!0)]),_:1}))}}),ut=$(ct,[["__scopeId","data-v-f7e6a420"]]),S=Ve;function dt(o,e){let t,n=!1;return()=>{t&&clearTimeout(t),n?t=setTimeout(o,e):(o(),(n=!0)&&setTimeout(()=>n=!1,e))}}function ve(o){return/^\//.test(o)?o:`/${o}`}function ge(o){const{pathname:e,search:t,hash:n,protocol:s}=new URL(o,"http://a.com");if(Je(o)||o.startsWith("#")||!s.startsWith("http")||!Ye(e))return o;const{site:r}=S(),l=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${t}${n}`);return me(l)}function X({removeCurrent:o=!0,correspondingLink:e=!1}={}){const{site:t,localeIndex:n,page:s,theme:r,hash:l}=S(),f=y(()=>{var b,P;return{index:n.value,label:(b=t.value.locales[n.value])==null?void 0:b.label,link:((P=t.value.locales[n.value])==null?void 0:P.link)||(n.value==="root"?"/":`/${n.value}/`)}});return{localeLinks:y(()=>Object.entries(t.value.locales).flatMap(([b,P])=>o&&f.value.label===P.label?[]:{index:b,text:P.label,link:vt(P.link||(b==="root"?"/":`/${b}/`),r.value.i18nRouting!==!1&&e,s.value.relativePath.slice(f.value.link.length-1),!t.value.cleanUrls)+l.value})),currentLang:f}}function vt(o,e,t,n){return e?o.replace(/\/$/,"")+ve(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,n?".html":"")):o}const pt=o=>(B("data-v-220621b2"),o=o(),E(),o),ft={class:"NotFound"},ht={class:"code"},mt={class:"title"},_t=pt(()=>v("div",{class:"divider"},null,-1)),gt={class:"quote"},bt={class:"action"},kt=["href","aria-label"],$t=m({__name:"NotFound",setup(o){const{site:e}=S(),{localeLinks:t}=X({removeCurrent:!1}),n=I({link:"/",index:"root"});j(()=>{const r=window.location.pathname.replace(e.value.base,"").replace(/(^.*?\/).*$/,"/$1");t.value.length&&(n.value=t.value.find(({link:l})=>l.startsWith(r))||t.value[0])});const s=y(()=>{var r,l,f,p;return{code:404,title:"PAGE NOT FOUND",quote:"But if you don't change your direction, and if you keep looking, you may end up where you are heading.",linkLabel:"go to home",linkText:"Take me home",...n.value.index==="root"?(r=e.value.themeConfig)==null?void 0:r.notFound:(p=(f=(l=e.value.locales)==null?void 0:l[n.value.index])==null?void 0:f.themeConfig)==null?void 0:p.notFound}});return(r,l)=>(a(),u("div",ft,[v("p",ht,N(s.value.code),1),v("h1",mt,N(s.value.title),1),_t,v("blockquote",gt,N(s.value.quote),1),v("div",bt,[v("a",{class:"link",href:i(me)(n.value.link),"aria-label":s.value.linkLabel},N(s.value.linkText),9,kt)])]))}}),yt=$($t,[["__scopeId","data-v-220621b2"]]);function Be(o,e){if(Array.isArray(o))return Q(o);if(o==null)return[];e=ve(e);const t=Object.keys(o).sort((s,r)=>r.split("/").length-s.split("/").length).find(s=>e.startsWith(ve(s))),n=t?o[t]:[];return Array.isArray(n)?Q(n):Q(n.items,n.base)}function Pt(o){const e=[];let t=0;for(const n in o){const s=o[n];if(s.items){t=e.push(s);continue}e[t]||e.push({items:[]}),e[t].items.push(s)}return e}function St(o){const e=[];function t(n){for(const s of n)s.text&&s.link&&e.push({text:s.text,link:s.link,docFooterText:s.docFooterText}),s.items&&t(s.items)}return t(o),e}function pe(o,e){return Array.isArray(e)?e.some(t=>pe(o,t)):G(o,e.link)?!0:e.items?pe(o,e.items):!1}function Q(o,e){return[...o].map(t=>{const n={...t},s=n.base||e;return s&&n.link&&(n.link=s+n.link),n.items&&(n.items=Q(n.items,s)),n})}function q(){const{frontmatter:o,page:e,theme:t}=S(),n=ue("(min-width: 960px)"),s=I(!1),r=y(()=>{const M=t.value.sidebar,V=e.value.relativePath;return M?Be(M,V):[]}),l=I(r.value);R(r,(M,V)=>{JSON.stringify(M)!==JSON.stringify(V)&&(l.value=r.value)});const f=y(()=>o.value.sidebar!==!1&&l.value.length>0&&o.value.layout!=="home"),p=y(()=>b?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),b=y(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),P=y(()=>f.value&&n.value),g=y(()=>f.value?Pt(l.value):[]);function L(){s.value=!0}function T(){s.value=!1}function A(){s.value?T():L()}return{isOpen:s,sidebar:l,sidebarGroups:g,hasSidebar:f,hasAside:b,leftAside:p,isSidebarEnabled:P,open:L,close:T,toggle:A}}function Lt(o,e){let t;te(()=>{t=o.value?document.activeElement:void 0}),j(()=>{window.addEventListener("keyup",n)}),_e(()=>{window.removeEventListener("keyup",n)});function n(s){s.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function Vt(o){const{page:e,hash:t}=S(),n=I(!1),s=y(()=>o.value.collapsed!=null),r=y(()=>!!o.value.link),l=I(!1),f=()=>{l.value=G(e.value.relativePath,o.value.link)};R([e,o,t],f),j(f);const p=y(()=>l.value?!0:o.value.items?pe(e.value.relativePath,o.value.items):!1),b=y(()=>!!(o.value.items&&o.value.items.length));te(()=>{n.value=!!(s.value&&o.value.collapsed)}),Te(()=>{(l.value||p.value)&&(n.value=!1)});function P(){s.value&&(n.value=!n.value)}return{collapsed:n,collapsible:s,isLink:r,isActiveLink:l,hasActiveLink:p,hasChildren:b,toggle:P}}function Tt(){const{hasSidebar:o}=q(),e=ue("(min-width: 960px)"),t=ue("(min-width: 1280px)");return{isAsideEnabled:y(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const fe=[];function Ee(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function be(o){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const n=Number(t.tagName[1]);return{element:t,title:Nt(t),link:"#"+t.id,level:n}});return It(e,o)}function Nt(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function It(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[n,s]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;o=o.filter(l=>l.level>=n&&l.level<=s),fe.length=0;for(const{element:l,link:f}of o)fe.push({element:l,link:f});const r=[];e:for(let l=0;l=0;p--){const b=o[p];if(b.level{requestAnimationFrame(r),window.addEventListener("scroll",n)}),Xe(()=>{l(location.hash)}),_e(()=>{window.removeEventListener("scroll",n)});function r(){if(!t.value)return;const f=window.scrollY,p=window.innerHeight,b=document.body.offsetHeight,P=Math.abs(f+p-b)<1,g=fe.map(({element:T,link:A})=>({link:A,top:Ct(T)})).filter(({top:T})=>!Number.isNaN(T)).sort((T,A)=>T.top-A.top);if(!g.length){l(null);return}if(f<1){l(null);return}if(P){l(g[g.length-1].link);return}let L=null;for(const{link:T,top:A}of g){if(A>f+Qe()+4)break;L=T}l(L)}function l(f){s&&s.classList.remove("active"),f==null?s=null:s=o.value.querySelector(`a[href="${decodeURIComponent(f)}"]`);const p=s;p?(p.classList.add("active"),e.value.style.top=p.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Ct(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}const At=["href","title"],Mt=m({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(o){function e({target:t}){const n=t.href.split("#")[1],s=document.getElementById(decodeURIComponent(n));s==null||s.focus({preventScroll:!0})}return(t,n)=>{const s=z("VPDocOutlineItem",!0);return a(),u("ul",{class:w(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),u(C,null,O(t.headers,({children:r,link:l,title:f})=>(a(),u("li",null,[v("a",{class:"outline-link",href:l,onClick:e,title:f},N(f),9,At),r!=null&&r.length?(a(),k(s,{key:0,headers:r},null,8,["headers"])):h("",!0)]))),256))],2)}}}),Oe=$(Mt,[["__scopeId","data-v-20b2d660"]]),Bt={class:"content"},Et={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Ot=m({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=S(),n=Ne([]);oe(()=>{n.value=be(e.value.outline??t.value.outline)});const s=I(),r=I();return wt(s,r),(l,f)=>(a(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:w(["VPDocAsideOutline",{"has-outline":n.value.length>0}]),ref_key:"container",ref:s,role:"navigation"},[v("div",Bt,[v("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),v("div",Et,N(i(Ee)(i(t))),1),_(Oe,{headers:n.value,root:!0},null,8,["headers"])])],2))}}),Ht=$(Ot,[["__scopeId","data-v-82f7ebc9"]]),Ft={class:"VPDocAsideCarbonAds"},qt=m({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,n)=>(a(),u("div",Ft,[_(i(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Dt=o=>(B("data-v-8a1c0c90"),o=o(),E(),o),Ut={class:"VPDocAside"},jt=Dt(()=>v("div",{class:"spacer"},null,-1)),Rt=m({__name:"VPDocAside",setup(o){const{theme:e}=S();return(t,n)=>(a(),u("div",Ut,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),_(Ht),c(t.$slots,"aside-outline-after",{},void 0,!0),jt,c(t.$slots,"aside-ads-before",{},void 0,!0),i(e).carbonAds?(a(),k(qt,{key:0,"carbon-ads":i(e).carbonAds},null,8,["carbon-ads"])):h("",!0),c(t.$slots,"aside-ads-after",{},void 0,!0),c(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Gt=$(Rt,[["__scopeId","data-v-8a1c0c90"]]);function zt(){const{theme:o,page:e}=S();return y(()=>{const{text:t="Edit this page",pattern:n=""}=o.value.editLink||{};let s;return typeof n=="function"?s=n(e.value):s=n.replace(/:path/g,e.value.filePath),{url:s,text:t}})}function Kt(){const{page:o,theme:e,frontmatter:t}=S();return y(()=>{var b,P,g,L,T,A,M,V;const n=Be(e.value.sidebar,o.value.relativePath),s=St(n),r=Wt(s,D=>D.link.replace(/[?#].*$/,"")),l=r.findIndex(D=>G(o.value.relativePath,D.link)),f=((b=e.value.docFooter)==null?void 0:b.prev)===!1&&!t.value.prev||t.value.prev===!1,p=((P=e.value.docFooter)==null?void 0:P.next)===!1&&!t.value.next||t.value.next===!1;return{prev:f?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((g=r[l-1])==null?void 0:g.docFooterText)??((L=r[l-1])==null?void 0:L.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((T=r[l-1])==null?void 0:T.link)},next:p?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=r[l+1])==null?void 0:A.docFooterText)??((M=r[l+1])==null?void 0:M.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((V=r[l+1])==null?void 0:V.link)}}})}function Wt(o,e){const t=new Set;return o.filter(n=>{const s=e(n);return t.has(s)?!1:t.add(s)})}const H=m({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.tag??(e.href?"a":"span")),n=y(()=>e.href&&Ie.test(e.href));return(s,r)=>(a(),k(W(t.value),{class:w(["VPLink",{link:s.href,"vp-external-link-icon":n.value,"no-icon":s.noIcon}]),href:s.href?i(ge)(s.href):void 0,target:s.target??(n.value?"_blank":void 0),rel:s.rel??(n.value?"noreferrer":void 0)},{default:d(()=>[c(s.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Jt={class:"VPLastUpdated"},Yt=["datetime"],Xt=m({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,frontmatter:n,lang:s}=S(),r=y(()=>new Date(n.value.lastUpdated??t.value.lastUpdated)),l=y(()=>r.value.toISOString()),f=I("");return j(()=>{te(()=>{var p,b,P;f.value=new Intl.DateTimeFormat((b=(p=e.value.lastUpdated)==null?void 0:p.formatOptions)!=null&&b.forceLocale?s.value:void 0,((P=e.value.lastUpdated)==null?void 0:P.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(r.value)})}),(p,b)=>{var P;return a(),u("p",Jt,[F(N(((P=i(e).lastUpdated)==null?void 0:P.text)||i(e).lastUpdatedText||"Last updated")+": ",1),v("time",{datetime:l.value},N(f.value),9,Yt)])}}}),Qt=$(Xt,[["__scopeId","data-v-d04b7ca3"]]),He=o=>(B("data-v-f9b7cb1b"),o=o(),E(),o),Zt={key:0,class:"VPDocFooter"},xt={key:0,class:"edit-info"},eo={key:0,class:"edit-link"},to=He(()=>v("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),oo={key:1,class:"last-updated"},no={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},so=He(()=>v("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),ao={class:"pager"},ro=["innerHTML"],io=["innerHTML"],lo={class:"pager"},co=["innerHTML"],uo=["innerHTML"],vo=m({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:n}=S(),s=zt(),r=Kt(),l=y(()=>e.value.editLink&&n.value.editLink!==!1),f=y(()=>t.value.lastUpdated&&n.value.lastUpdated!==!1),p=y(()=>l.value||f.value||r.value.prev||r.value.next);return(b,P)=>{var g,L,T,A;return p.value?(a(),u("footer",Zt,[c(b.$slots,"doc-footer-before",{},void 0,!0),l.value||f.value?(a(),u("div",xt,[l.value?(a(),u("div",eo,[_(H,{class:"edit-link-button",href:i(s).url,"no-icon":!0},{default:d(()=>[to,F(" "+N(i(s).text),1)]),_:1},8,["href"])])):h("",!0),f.value?(a(),u("div",oo,[_(Qt)])):h("",!0)])):h("",!0),(g=i(r).prev)!=null&&g.link||(L=i(r).next)!=null&&L.link?(a(),u("nav",no,[so,v("div",ao,[(T=i(r).prev)!=null&&T.link?(a(),k(H,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:d(()=>{var M;return[v("span",{class:"desc",innerHTML:((M=i(e).docFooter)==null?void 0:M.prev)||"Previous page"},null,8,ro),v("span",{class:"title",innerHTML:i(r).prev.text},null,8,io)]}),_:1},8,["href"])):h("",!0)]),v("div",lo,[(A=i(r).next)!=null&&A.link?(a(),k(H,{key:0,class:"pager-link next",href:i(r).next.link},{default:d(()=>{var M;return[v("span",{class:"desc",innerHTML:((M=i(e).docFooter)==null?void 0:M.next)||"Next page"},null,8,co),v("span",{class:"title",innerHTML:i(r).next.text},null,8,uo)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),po=$(vo,[["__scopeId","data-v-f9b7cb1b"]]),fo=o=>(B("data-v-bd65f111"),o=o(),E(),o),ho={class:"container"},mo=fo(()=>v("div",{class:"aside-curtain"},null,-1)),_o={class:"aside-container"},go={class:"aside-content"},bo={class:"content"},ko={class:"content-container"},$o={class:"main"},yo=m({__name:"VPDoc",setup(o){const{theme:e}=S(),t=ne(),{hasSidebar:n,hasAside:s,leftAside:r}=q(),l=y(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(f,p)=>{const b=z("Content");return a(),u("div",{class:w(["VPDoc",{"has-sidebar":i(n),"has-aside":i(s)}])},[c(f.$slots,"doc-top",{},void 0,!0),v("div",ho,[i(s)?(a(),u("div",{key:0,class:w(["aside",{"left-aside":i(r)}])},[mo,v("div",_o,[v("div",go,[_(Gt,null,{"aside-top":d(()=>[c(f.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":d(()=>[c(f.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":d(()=>[c(f.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[c(f.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[c(f.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[c(f.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),v("div",bo,[v("div",ko,[c(f.$slots,"doc-before",{},void 0,!0),v("main",$o,[_(b,{class:w(["vp-doc",[l.value,i(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),_(po,null,{"doc-footer-before":d(()=>[c(f.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(f.$slots,"doc-after",{},void 0,!0)])])]),c(f.$slots,"doc-bottom",{},void 0,!0)],2)}}}),Po=$(yo,[["__scopeId","data-v-bd65f111"]]),So=m({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.href&&Ie.test(e.href)),n=y(()=>e.tag||e.href?"a":"button");return(s,r)=>(a(),k(W(n.value),{class:w(["VPButton",[s.size,s.theme]]),href:s.href?i(ge)(s.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:d(()=>[F(N(s.text),1)]),_:1},8,["class","href","target","rel"]))}}),Lo=$(So,[["__scopeId","data-v-5a1289ff"]]),Vo=["src","alt"],To=m({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const n=z("VPImage",!0);return e.image?(a(),u(C,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),u("img",J({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:i(me)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,Vo)):(a(),u(C,{key:1},[_(n,J({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),_(n,J({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),Z=$(To,[["__scopeId","data-v-b2acdd16"]]),No=o=>(B("data-v-a6a4ce63"),o=o(),E(),o),Io={class:"container"},wo={class:"main"},Co={key:0,class:"name"},Ao=["innerHTML"],Mo=["innerHTML"],Bo=["innerHTML"],Eo={key:0,class:"actions"},Oo={key:0,class:"image"},Ho={class:"image-container"},Fo=No(()=>v("div",{class:"image-bg"},null,-1)),qo=m({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=se("hero-image-slot-exists");return(t,n)=>(a(),u("div",{class:w(["VPHero",{"has-image":t.image||i(e)}])},[v("div",Io,[v("div",wo,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[t.name?(a(),u("h1",Co,[v("span",{innerHTML:t.name,class:"clip"},null,8,Ao)])):h("",!0),t.text?(a(),u("p",{key:1,innerHTML:t.text,class:"text"},null,8,Mo)):h("",!0),t.tagline?(a(),u("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,Bo)):h("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),u("div",Eo,[(a(!0),u(C,null,O(t.actions,s=>(a(),u("div",{key:s.link,class:"action"},[_(Lo,{tag:"a",size:"medium",theme:s.theme,text:s.text,href:s.link,target:s.target,rel:s.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||i(e)?(a(),u("div",Oo,[v("div",Ho,[Fo,c(t.$slots,"home-hero-image",{},()=>[t.image?(a(),k(Z,{key:0,class:"image-src",image:t.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),Do=$(qo,[["__scopeId","data-v-a6a4ce63"]]),Uo=m({__name:"VPHomeHero",setup(o){const{frontmatter:e}=S();return(t,n)=>i(e).hero?(a(),k(Do,{key:0,class:"VPHomeHero",name:i(e).hero.name,text:i(e).hero.text,tagline:i(e).hero.tagline,image:i(e).hero.image,actions:i(e).hero.actions},{"home-hero-info-before":d(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":d(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":d(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":d(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":d(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),jo=o=>(B("data-v-8391275c"),o=o(),E(),o),Ro={class:"box"},Go={key:0,class:"icon"},zo=["innerHTML"],Ko=["innerHTML"],Wo=["innerHTML"],Jo={key:4,class:"link-text"},Yo={class:"link-text-value"},Xo=jo(()=>v("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),Qo=m({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(a(),k(H,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:d(()=>[v("article",Ro,[typeof e.icon=="object"&&e.icon.wrap?(a(),u("div",Go,[_(Z,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),k(Z,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,zo)):h("",!0),v("h2",{class:"title",innerHTML:e.title},null,8,Ko),e.details?(a(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,Wo)):h("",!0),e.linkText?(a(),u("div",Jo,[v("p",Yo,[F(N(e.linkText)+" ",1),Xo])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Zo=$(Qo,[["__scopeId","data-v-8391275c"]]),xo={key:0,class:"VPFeatures"},en={class:"container"},tn={class:"items"},on=m({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=y(()=>{const n=e.features.length;if(n){if(n===2)return"grid-2";if(n===3)return"grid-3";if(n%3===0)return"grid-6";if(n>3)return"grid-4"}else return});return(n,s)=>n.features?(a(),u("div",xo,[v("div",en,[v("div",tn,[(a(!0),u(C,null,O(n.features,r=>(a(),u("div",{key:r.title,class:w(["item",[t.value]])},[_(Zo,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):h("",!0)}}),nn=$(on,[["__scopeId","data-v-3c1373ab"]]),sn=m({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=S();return(t,n)=>i(e).features?(a(),k(nn,{key:0,class:"VPHomeFeatures",features:i(e).features},null,8,["features"])):h("",!0)}}),an=m({__name:"VPHomeContent",setup(o){const{width:e}=Ze({includeScrollbar:!1});return(t,n)=>(a(),u("div",{class:"vp-doc container",style:we(i(e)?{"--vp-offset":`calc(50% - ${i(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),rn=$(an,[["__scopeId","data-v-672f3595"]]),ln={class:"VPHome"},cn=m({__name:"VPHome",setup(o){const{frontmatter:e}=S();return(t,n)=>{const s=z("Content");return a(),u("div",ln,[c(t.$slots,"home-hero-before",{},void 0,!0),_(Uo,null,{"home-hero-info-before":d(()=>[c(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[c(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[c(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[c(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(t.$slots,"home-hero-after",{},void 0,!0),c(t.$slots,"home-features-before",{},void 0,!0),_(sn),c(t.$slots,"home-features-after",{},void 0,!0),i(e).markdownStyles!==!1?(a(),k(rn,{key:0},{default:d(()=>[_(s)]),_:1})):(a(),k(s,{key:1}))])}}}),un=$(cn,[["__scopeId","data-v-a0ef0bc1"]]),dn={},vn={class:"VPPage"};function pn(o,e){const t=z("Content");return a(),u("div",vn,[c(o.$slots,"page-top"),_(t),c(o.$slots,"page-bottom")])}const fn=$(dn,[["render",pn]]),hn=m({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=S(),{hasSidebar:n}=q();return(s,r)=>(a(),u("div",{class:w(["VPContent",{"has-sidebar":i(n),"is-home":i(t).layout==="home"}]),id:"VPContent"},[i(e).isNotFound?c(s.$slots,"not-found",{key:0},()=>[_(yt)],!0):i(t).layout==="page"?(a(),k(fn,{key:1},{"page-top":d(()=>[c(s.$slots,"page-top",{},void 0,!0)]),"page-bottom":d(()=>[c(s.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(t).layout==="home"?(a(),k(un,{key:2},{"home-hero-before":d(()=>[c(s.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":d(()=>[c(s.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[c(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[c(s.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[c(s.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[c(s.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":d(()=>[c(s.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":d(()=>[c(s.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":d(()=>[c(s.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(t).layout&&i(t).layout!=="doc"?(a(),k(W(i(t).layout),{key:3})):(a(),k(Po,{key:4},{"doc-top":d(()=>[c(s.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":d(()=>[c(s.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":d(()=>[c(s.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":d(()=>[c(s.$slots,"doc-before",{},void 0,!0)]),"doc-after":d(()=>[c(s.$slots,"doc-after",{},void 0,!0)]),"aside-top":d(()=>[c(s.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":d(()=>[c(s.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[c(s.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[c(s.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[c(s.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":d(()=>[c(s.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),mn=$(hn,[["__scopeId","data-v-69cb45dd"]]),_n={class:"container"},gn=["innerHTML"],bn=["innerHTML"],kn=m({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=S(),{hasSidebar:n}=q();return(s,r)=>i(e).footer&&i(t).footer!==!1?(a(),u("footer",{key:0,class:w(["VPFooter",{"has-sidebar":i(n)}])},[v("div",_n,[i(e).footer.message?(a(),u("p",{key:0,class:"message",innerHTML:i(e).footer.message},null,8,gn)):h("",!0),i(e).footer.copyright?(a(),u("p",{key:1,class:"copyright",innerHTML:i(e).footer.copyright},null,8,bn)):h("",!0)])],2)):h("",!0)}}),$n=$(kn,[["__scopeId","data-v-63f649a4"]]);function yn(){const{theme:o,frontmatter:e}=S(),t=Ne([]),n=y(()=>t.value.length>0);return oe(()=>{t.value=be(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:n}}const Pn=o=>(B("data-v-1ec6ac20"),o=o(),E(),o),Sn={class:"menu-text"},Ln=Pn(()=>v("span",{class:"vpi-chevron-right icon"},null,-1)),Vn={class:"header"},Tn={class:"outline"},Nn=m({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=S(),n=I(!1),s=I(0),r=I(),l=I();function f(g){var L;(L=r.value)!=null&&L.contains(g.target)||(n.value=!1)}R(n,g=>{if(g){document.addEventListener("click",f);return}document.removeEventListener("click",f)}),de("Escape",()=>{n.value=!1}),oe(()=>{n.value=!1});function p(){n.value=!n.value,s.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function b(g){g.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),xe(()=>{n.value=!1}))}function P(){n.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(g,L)=>(a(),u("div",{class:"VPLocalNavOutlineDropdown",style:we({"--vp-vh":s.value+"px"}),ref_key:"main",ref:r},[g.headers.length>0?(a(),u("button",{key:0,onClick:p,class:w({open:n.value})},[v("span",Sn,N(i(Ee)(i(t))),1),Ln],2)):(a(),u("button",{key:1,onClick:P},N(i(t).returnToTopLabel||"Return to top"),1)),_(he,{name:"flyout"},{default:d(()=>[n.value?(a(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:b},[v("div",Vn,[v("a",{class:"top-link",href:"#",onClick:P},N(i(t).returnToTopLabel||"Return to top"),1)]),v("div",Tn,[_(Oe,{headers:g.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),In=$(Nn,[["__scopeId","data-v-1ec6ac20"]]),wn=o=>(B("data-v-cd52d3f7"),o=o(),E(),o),Cn={class:"container"},An=["aria-expanded"],Mn=wn(()=>v("span",{class:"vpi-align-left menu-icon"},null,-1)),Bn={class:"menu-text"},En=m({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=S(),{hasSidebar:n}=q(),{headers:s}=yn(),{y:r}=Ce(),l=I(0);j(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),oe(()=>{s.value=be(t.value.outline??e.value.outline)});const f=y(()=>s.value.length===0),p=y(()=>f.value&&!n.value),b=y(()=>({VPLocalNav:!0,"has-sidebar":n.value,empty:f.value,fixed:p.value}));return(P,g)=>i(t).layout!=="home"&&(!p.value||i(r)>=l.value)?(a(),u("div",{key:0,class:w(b.value)},[v("div",Cn,[i(n)?(a(),u("button",{key:0,class:"menu","aria-expanded":P.open,"aria-controls":"VPSidebarNav",onClick:g[0]||(g[0]=L=>P.$emit("open-menu"))},[Mn,v("span",Bn,N(i(e).sidebarMenuLabel||"Menu"),1)],8,An)):h("",!0),_(In,{headers:i(s),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),On=$(En,[["__scopeId","data-v-cd52d3f7"]]);function Hn(){const o=I(!1);function e(){o.value=!0,window.addEventListener("resize",s)}function t(){o.value=!1,window.removeEventListener("resize",s)}function n(){o.value?t():e()}function s(){window.outerWidth>=768&&t()}const r=ne();return R(()=>r.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:n}}const Fn={},qn={class:"VPSwitch",type:"button",role:"switch"},Dn={class:"check"},Un={key:0,class:"icon"};function jn(o,e){return a(),u("button",qn,[v("span",Dn,[o.$slots.default?(a(),u("span",Un,[c(o.$slots,"default",{},void 0,!0)])):h("",!0)])])}const Rn=$(Fn,[["render",jn],["__scopeId","data-v-79f406f6"]]),Fe=o=>(B("data-v-e51d7bc4"),o=o(),E(),o),Gn=Fe(()=>v("span",{class:"vpi-sun sun"},null,-1)),zn=Fe(()=>v("span",{class:"vpi-moon moon"},null,-1)),Kn=m({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=S(),n=se("toggle-appearance",()=>{e.value=!e.value}),s=y(()=>e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme");return(r,l)=>(a(),k(Rn,{title:s.value,class:"VPSwitchAppearance","aria-checked":i(e),onClick:i(n)},{default:d(()=>[Gn,zn]),_:1},8,["title","aria-checked","onClick"]))}}),ke=$(Kn,[["__scopeId","data-v-e51d7bc4"]]),Wn={key:0,class:"VPNavBarAppearance"},Jn=m({__name:"VPNavBarAppearance",setup(o){const{site:e}=S();return(t,n)=>i(e).appearance&&i(e).appearance!=="force-dark"?(a(),u("div",Wn,[_(ke)])):h("",!0)}}),Yn=$(Jn,[["__scopeId","data-v-0e630b14"]]),$e=I();let qe=!1,ce=0;function Xn(o){const e=I(!1);if(ae){!qe&&Qn(),ce++;const t=R($e,n=>{var s,r,l;n===o.el.value||(s=o.el.value)!=null&&s.contains(n)?(e.value=!0,(r=o.onFocus)==null||r.call(o)):(e.value=!1,(l=o.onBlur)==null||l.call(o))});_e(()=>{t(),ce--,ce||Zn()})}return et(e)}function Qn(){document.addEventListener("focusin",De),qe=!0,$e.value=document.activeElement}function Zn(){document.removeEventListener("focusin",De)}function De(){$e.value=document.activeElement}const xn={class:"VPMenuLink"},es=m({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=S();return(t,n)=>(a(),u("div",xn,[_(H,{class:w({active:i(G)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:d(()=>[F(N(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),re=$(es,[["__scopeId","data-v-fb6e9438"]]),ts={class:"VPMenuGroup"},os={key:0,class:"title"},ns=m({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),u("div",ts,[e.text?(a(),u("p",os,N(e.text),1)):h("",!0),(a(!0),u(C,null,O(e.items,n=>(a(),u(C,null,["link"in n?(a(),k(re,{key:0,item:n},null,8,["item"])):h("",!0)],64))),256))]))}}),ss=$(ns,[["__scopeId","data-v-6aa4cfc1"]]),as={class:"VPMenu"},rs={key:0,class:"items"},is=m({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(a(),u("div",as,[e.items?(a(),u("div",rs,[(a(!0),u(C,null,O(e.items,n=>(a(),u(C,{key:n.text},["link"in n?(a(),k(re,{key:0,item:n},null,8,["item"])):(a(),k(ss,{key:1,text:n.text,items:n.items},null,8,["text","items"]))],64))),128))])):h("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),ls=$(is,[["__scopeId","data-v-5251f9c9"]]),cs=o=>(B("data-v-0fe5f390"),o=o(),E(),o),us=["aria-expanded","aria-label"],ds={key:0,class:"text"},vs=["innerHTML"],ps=cs(()=>v("span",{class:"vpi-chevron-down text-icon"},null,-1)),fs={key:1,class:"vpi-more-horizontal icon"},hs={class:"menu"},ms=m({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=I(!1),t=I();Xn({el:t,onBlur:n});function n(){e.value=!1}return(s,r)=>(a(),u("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:r[1]||(r[1]=l=>e.value=!0),onMouseleave:r[2]||(r[2]=l=>e.value=!1)},[v("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":s.label,onClick:r[0]||(r[0]=l=>e.value=!e.value)},[s.button||s.icon?(a(),u("span",ds,[s.icon?(a(),u("span",{key:0,class:w([s.icon,"option-icon"])},null,2)):h("",!0),s.button?(a(),u("span",{key:1,innerHTML:s.button},null,8,vs)):h("",!0),ps])):(a(),u("span",fs))],8,us),v("div",hs,[_(ls,{items:s.items},{default:d(()=>[c(s.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),ye=$(ms,[["__scopeId","data-v-0fe5f390"]]),_s=["href","aria-label","innerHTML"],gs=m({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=y(()=>typeof e.icon=="object"?e.icon.svg:``);return(n,s)=>(a(),u("a",{class:"VPSocialLink no-icon",href:n.link,"aria-label":n.ariaLabel??(typeof n.icon=="string"?n.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,_s))}}),bs=$(gs,[["__scopeId","data-v-9146a764"]]),ks={class:"VPSocialLinks"},$s=m({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(a(),u("div",ks,[(a(!0),u(C,null,O(e.links,({link:n,icon:s,ariaLabel:r})=>(a(),k(bs,{key:n,icon:s,link:n,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),Pe=$($s,[["__scopeId","data-v-cb91b013"]]),ys={key:0,class:"group translations"},Ps={class:"trans-title"},Ss={key:1,class:"group"},Ls={class:"item appearance"},Vs={class:"label"},Ts={class:"appearance-action"},Ns={key:2,class:"group"},Is={class:"item social-links"},ws=m({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=S(),{localeLinks:n,currentLang:s}=X({correspondingLink:!0}),r=y(()=>n.value.length&&s.value.label||e.value.appearance||t.value.socialLinks);return(l,f)=>r.value?(a(),k(ye,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:d(()=>[i(n).length&&i(s).label?(a(),u("div",ys,[v("p",Ps,N(i(s).label),1),(a(!0),u(C,null,O(i(n),p=>(a(),k(re,{key:p.link,item:p},null,8,["item"]))),128))])):h("",!0),i(e).appearance&&i(e).appearance!=="force-dark"?(a(),u("div",Ss,[v("div",Ls,[v("p",Vs,N(i(t).darkModeSwitchLabel||"Appearance"),1),v("div",Ts,[_(ke)])])])):h("",!0),i(t).socialLinks?(a(),u("div",Ns,[v("div",Is,[_(Pe,{class:"social-links-list",links:i(t).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),Cs=$(ws,[["__scopeId","data-v-1cde8183"]]),As=o=>(B("data-v-f393de22"),o=o(),E(),o),Ms=["aria-expanded"],Bs=As(()=>v("span",{class:"container"},[v("span",{class:"top"}),v("span",{class:"middle"}),v("span",{class:"bottom"})],-1)),Es=[Bs],Os=m({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(a(),u("button",{type:"button",class:w(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=n=>e.$emit("click"))},Es,10,Ms))}}),Hs=$(Os,[["__scopeId","data-v-f393de22"]]),Fs=["innerHTML"],qs=m({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=S();return(t,n)=>(a(),k(H,{class:w({VPNavBarMenuLink:!0,active:i(G)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,noIcon:t.item.noIcon,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:d(()=>[v("span",{innerHTML:t.item.text},null,8,Fs)]),_:1},8,["class","href","noIcon","target","rel"]))}}),Ds=$(qs,[["__scopeId","data-v-4feaec24"]]),Us=m({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=S(),n=r=>"link"in r?G(t.value.relativePath,r.link,!!e.item.activeMatch):r.items.some(n),s=y(()=>n(e.item));return(r,l)=>(a(),k(ye,{class:w({VPNavBarMenuGroup:!0,active:i(G)(i(t).relativePath,r.item.activeMatch,!!r.item.activeMatch)||s.value}),button:r.item.text,items:r.item.items},null,8,["class","button","items"]))}}),js=o=>(B("data-v-cc0a843c"),o=o(),E(),o),Rs={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Gs=js(()=>v("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),zs=m({__name:"VPNavBarMenu",setup(o){const{theme:e}=S();return(t,n)=>i(e).nav?(a(),u("nav",Rs,[Gs,(a(!0),u(C,null,O(i(e).nav,s=>(a(),u(C,{key:s.text},["link"in s?(a(),k(Ds,{key:0,item:s},null,8,["item"])):(a(),k(Us,{key:1,item:s},null,8,["item"]))],64))),128))])):h("",!0)}}),Ks=$(zs,[["__scopeId","data-v-cc0a843c"]]);function Ws(o){const{localeIndex:e,theme:t}=S();function n(s){var A,M,V;const r=s.split("."),l=(A=t.value.search)==null?void 0:A.options,f=l&&typeof l=="object",p=f&&((V=(M=l.locales)==null?void 0:M[e.value])==null?void 0:V.translations)||null,b=f&&l.translations||null;let P=p,g=b,L=o;const T=r.pop();for(const D of r){let U=null;const K=L==null?void 0:L[D];K&&(U=L=K);const ie=g==null?void 0:g[D];ie&&(U=g=ie);const le=P==null?void 0:P[D];le&&(U=P=le),K||(L=U),ie||(g=U),le||(P=U)}return(P==null?void 0:P[T])??(g==null?void 0:g[T])??(L==null?void 0:L[T])??""}return n}const Js=["aria-label"],Ys={class:"DocSearch-Button-Container"},Xs=v("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),Qs={class:"DocSearch-Button-Placeholder"},Zs=v("span",{class:"DocSearch-Button-Keys"},[v("kbd",{class:"DocSearch-Button-Key"}),v("kbd",{class:"DocSearch-Button-Key"},"K")],-1),Le=m({__name:"VPNavBarSearchButton",setup(o){const t=Ws({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(n,s)=>(a(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":i(t)("button.buttonAriaLabel")},[v("span",Ys,[Xs,v("span",Qs,N(i(t)("button.buttonText")),1)]),Zs],8,Js))}}),xs={class:"VPNavBarSearch"},ea={id:"local-search"},ta={key:1,id:"docsearch"},oa=m({__name:"VPNavBarSearch",setup(o){const e=tt(()=>ot(()=>import("./VPLocalSearchBox.DTbzgQ3t.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:n}=S(),s=I(!1),r=I(!1);j(()=>{});function l(){s.value||(s.value=!0,setTimeout(f,16))}function f(){const g=new Event("keydown");g.key="k",g.metaKey=!0,window.dispatchEvent(g),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||f()},16)}function p(g){const L=g.target,T=L.tagName;return L.isContentEditable||T==="INPUT"||T==="SELECT"||T==="TEXTAREA"}const b=I(!1);de("k",g=>{(g.ctrlKey||g.metaKey)&&(g.preventDefault(),b.value=!0)}),de("/",g=>{p(g)||(g.preventDefault(),b.value=!0)});const P="local";return(g,L)=>{var T;return a(),u("div",xs,[i(P)==="local"?(a(),u(C,{key:0},[b.value?(a(),k(i(e),{key:0,onClose:L[0]||(L[0]=A=>b.value=!1)})):h("",!0),v("div",ea,[_(Le,{onClick:L[1]||(L[1]=A=>b.value=!0)})])],64)):i(P)==="algolia"?(a(),u(C,{key:1},[s.value?(a(),k(i(t),{key:0,algolia:((T=i(n).search)==null?void 0:T.options)??i(n).algolia,onVnodeBeforeMount:L[2]||(L[2]=A=>r.value=!0)},null,8,["algolia"])):h("",!0),r.value?h("",!0):(a(),u("div",ta,[_(Le,{onClick:l})]))],64)):h("",!0)])}}}),na=m({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=S();return(t,n)=>i(e).socialLinks?(a(),k(Pe,{key:0,class:"VPNavBarSocialLinks",links:i(e).socialLinks},null,8,["links"])):h("",!0)}}),sa=$(na,[["__scopeId","data-v-723a27a4"]]),aa=["href","rel","target"],ra={key:1},ia={key:2},la=m({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=S(),{hasSidebar:n}=q(),{currentLang:s}=X(),r=y(()=>{var p;return typeof t.value.logoLink=="string"?t.value.logoLink:(p=t.value.logoLink)==null?void 0:p.link}),l=y(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.rel}),f=y(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.target});return(p,b)=>(a(),u("div",{class:w(["VPNavBarTitle",{"has-sidebar":i(n)}])},[v("a",{class:"title",href:r.value??i(ge)(i(s).link),rel:l.value,target:f.value},[c(p.$slots,"nav-bar-title-before",{},void 0,!0),i(t).logo?(a(),k(Z,{key:0,class:"logo",image:i(t).logo},null,8,["image"])):h("",!0),i(t).siteTitle?(a(),u("span",ra,N(i(t).siteTitle),1)):i(t).siteTitle===void 0?(a(),u("span",ia,N(i(e).title),1)):h("",!0),c(p.$slots,"nav-bar-title-after",{},void 0,!0)],8,aa)],2))}}),ca=$(la,[["__scopeId","data-v-663a90b9"]]),ua={class:"items"},da={class:"title"},va=m({__name:"VPNavBarTranslations",setup(o){const{theme:e}=S(),{localeLinks:t,currentLang:n}=X({correspondingLink:!0});return(s,r)=>i(t).length&&i(n).label?(a(),k(ye,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:i(e).langMenuLabel||"Change language"},{default:d(()=>[v("div",ua,[v("p",da,N(i(n).label),1),(a(!0),u(C,null,O(i(t),l=>(a(),k(re,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}}),pa=$(va,[["__scopeId","data-v-016258cd"]]),fa=o=>(B("data-v-743a22c8"),o=o(),E(),o),ha={class:"wrapper"},ma={class:"container"},_a={class:"title"},ga={class:"content"},ba={class:"content-body"},ka=fa(()=>v("div",{class:"divider"},[v("div",{class:"divider-line"})],-1)),$a=m({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const{y:e}=Ce(),{hasSidebar:t}=q(),{frontmatter:n}=S(),s=I({});return Te(()=>{s.value={"has-sidebar":t.value,home:n.value.layout==="home",top:e.value===0}}),(r,l)=>(a(),u("div",{class:w(["VPNavBar",s.value])},[v("div",ha,[v("div",ma,[v("div",_a,[_(ca,null,{"nav-bar-title-before":d(()=>[c(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[c(r.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),v("div",ga,[v("div",ba,[c(r.$slots,"nav-bar-content-before",{},void 0,!0),_(oa,{class:"search"}),_(Ks,{class:"menu"}),_(pa,{class:"translations"}),_(Yn,{class:"appearance"}),_(sa,{class:"social-links"}),_(Cs,{class:"extra"}),c(r.$slots,"nav-bar-content-after",{},void 0,!0),_(Hs,{class:"hamburger",active:r.isScreenOpen,onClick:l[0]||(l[0]=f=>r.$emit("toggle-screen"))},null,8,["active"])])])])]),ka],2))}}),ya=$($a,[["__scopeId","data-v-743a22c8"]]),Pa={key:0,class:"VPNavScreenAppearance"},Sa={class:"text"},La=m({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=S();return(n,s)=>i(e).appearance&&i(e).appearance!=="force-dark"?(a(),u("div",Pa,[v("p",Sa,N(i(t).darkModeSwitchLabel||"Appearance"),1),_(ke)])):h("",!0)}}),Va=$(La,[["__scopeId","data-v-5995df10"]]),Ta=m({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=se("close-screen");return(t,n)=>(a(),k(H,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),Na=$(Ta,[["__scopeId","data-v-a2db3dc7"]]),Ia=m({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=se("close-screen");return(t,n)=>(a(),k(H,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e)},{default:d(()=>[F(N(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),Ue=$(Ia,[["__scopeId","data-v-afa013c3"]]),wa={class:"VPNavScreenMenuGroupSection"},Ca={key:0,class:"title"},Aa=m({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),u("div",wa,[e.text?(a(),u("p",Ca,N(e.text),1)):h("",!0),(a(!0),u(C,null,O(e.items,n=>(a(),k(Ue,{key:n.text,item:n},null,8,["item"]))),128))]))}}),Ma=$(Aa,[["__scopeId","data-v-6eb8a2e5"]]),Ba=o=>(B("data-v-7853c142"),o=o(),E(),o),Ea=["aria-controls","aria-expanded"],Oa=["innerHTML"],Ha=Ba(()=>v("span",{class:"vpi-plus button-icon"},null,-1)),Fa=["id"],qa={key:1,class:"group"},Da=m({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=I(!1),n=y(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function s(){t.value=!t.value}return(r,l)=>(a(),u("div",{class:w(["VPNavScreenMenuGroup",{open:t.value}])},[v("button",{class:"button","aria-controls":n.value,"aria-expanded":t.value,onClick:s},[v("span",{class:"button-text",innerHTML:r.text},null,8,Oa),Ha],8,Ea),v("div",{id:n.value,class:"items"},[(a(!0),u(C,null,O(r.items,f=>(a(),u(C,{key:f.text},["link"in f?(a(),u("div",{key:f.text,class:"item"},[_(Ue,{item:f},null,8,["item"])])):(a(),u("div",qa,[_(Ma,{text:f.text,items:f.items},null,8,["text","items"])]))],64))),128))],8,Fa)],2))}}),Ua=$(Da,[["__scopeId","data-v-7853c142"]]),ja={key:0,class:"VPNavScreenMenu"},Ra=m({__name:"VPNavScreenMenu",setup(o){const{theme:e}=S();return(t,n)=>i(e).nav?(a(),u("nav",ja,[(a(!0),u(C,null,O(i(e).nav,s=>(a(),u(C,{key:s.text},["link"in s?(a(),k(Na,{key:0,item:s},null,8,["item"])):(a(),k(Ua,{key:1,text:s.text||"",items:s.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),Ga=m({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=S();return(t,n)=>i(e).socialLinks?(a(),k(Pe,{key:0,class:"VPNavScreenSocialLinks",links:i(e).socialLinks},null,8,["links"])):h("",!0)}}),je=o=>(B("data-v-0dc36c90"),o=o(),E(),o),za=je(()=>v("span",{class:"vpi-languages icon lang"},null,-1)),Ka=je(()=>v("span",{class:"vpi-chevron-down icon chevron"},null,-1)),Wa={class:"list"},Ja=m({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=X({correspondingLink:!0}),n=I(!1);function s(){n.value=!n.value}return(r,l)=>i(e).length&&i(t).label?(a(),u("div",{key:0,class:w(["VPNavScreenTranslations",{open:n.value}])},[v("button",{class:"title",onClick:s},[za,F(" "+N(i(t).label)+" ",1),Ka]),v("ul",Wa,[(a(!0),u(C,null,O(i(e),f=>(a(),u("li",{key:f.link,class:"item"},[_(H,{class:"link",href:f.link},{default:d(()=>[F(N(f.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),Ya=$(Ja,[["__scopeId","data-v-0dc36c90"]]),Xa={class:"container"},Qa=m({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=I(null),t=Ae(ae?document.body:null);return(n,s)=>(a(),k(he,{name:"fade",onEnter:s[0]||(s[0]=r=>t.value=!0),onAfterLeave:s[1]||(s[1]=r=>t.value=!1)},{default:d(()=>[n.open?(a(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[v("div",Xa,[c(n.$slots,"nav-screen-content-before",{},void 0,!0),_(Ra,{class:"menu"}),_(Ya,{class:"translations"}),_(Va,{class:"appearance"}),_(Ga,{class:"social-links"}),c(n.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),Za=$(Qa,[["__scopeId","data-v-391d6e9c"]]),xa={key:0,class:"VPNav"},er=m({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:n}=Hn(),{frontmatter:s}=S(),r=y(()=>s.value.navbar!==!1);return Me("close-screen",t),te(()=>{ae&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(l,f)=>r.value?(a(),u("header",xa,[_(ya,{"is-screen-open":i(e),onToggleScreen:i(n)},{"nav-bar-title-before":d(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":d(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":d(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),_(Za,{open:i(e)},{"nav-screen-content-before":d(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":d(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),tr=$(er,[["__scopeId","data-v-1186b740"]]),Re=o=>(B("data-v-28370b85"),o=o(),E(),o),or=["role","tabindex"],nr=Re(()=>v("div",{class:"indicator"},null,-1)),sr=Re(()=>v("span",{class:"vpi-chevron-right caret-icon"},null,-1)),ar=[sr],rr={key:1,class:"items"},ir=m({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:n,isLink:s,isActiveLink:r,hasActiveLink:l,hasChildren:f,toggle:p}=Vt(y(()=>e.item)),b=y(()=>f.value?"section":"div"),P=y(()=>s.value?"a":"div"),g=y(()=>f.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),L=y(()=>s.value?void 0:"button"),T=y(()=>[[`level-${e.depth}`],{collapsible:n.value},{collapsed:t.value},{"is-link":s.value},{"is-active":r.value},{"has-active":l.value}]);function A(V){"key"in V&&V.key!=="Enter"||!e.item.link&&p()}function M(){e.item.link&&p()}return(V,D)=>{const U=z("VPSidebarItem",!0);return a(),k(W(b.value),{class:w(["VPSidebarItem",T.value])},{default:d(()=>[V.item.text?(a(),u("div",J({key:0,class:"item",role:L.value},st(V.item.items?{click:A,keydown:A}:{},!0),{tabindex:V.item.items&&0}),[nr,V.item.link?(a(),k(H,{key:0,tag:P.value,class:"link",href:V.item.link,rel:V.item.rel,target:V.item.target},{default:d(()=>[(a(),k(W(g.value),{class:"text",innerHTML:V.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),k(W(g.value),{key:1,class:"text",innerHTML:V.item.text},null,8,["innerHTML"])),V.item.collapsed!=null&&V.item.items&&V.item.items.length?(a(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:M,onKeydown:nt(M,["enter"]),tabindex:"0"},ar,32)):h("",!0)],16,or)):h("",!0),V.item.items&&V.item.items.length?(a(),u("div",rr,[V.depth<5?(a(!0),u(C,{key:0},O(V.item.items,K=>(a(),k(U,{key:K.text,item:K,depth:V.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),lr=$(ir,[["__scopeId","data-v-28370b85"]]),Ge=o=>(B("data-v-dfb98cb2"),o=o(),E(),o),cr=Ge(()=>v("div",{class:"curtain"},null,-1)),ur={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},dr=Ge(()=>v("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),vr=m({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const{sidebarGroups:e,hasSidebar:t}=q(),n=o,s=I(null),r=Ae(ae?document.body:null);return R([n,s],()=>{var l;n.open?(r.value=!0,(l=s.value)==null||l.focus()):r.value=!1},{immediate:!0,flush:"post"}),(l,f)=>i(t)?(a(),u("aside",{key:0,class:w(["VPSidebar",{open:l.open}]),ref_key:"navEl",ref:s,onClick:f[0]||(f[0]=at(()=>{},["stop"]))},[cr,v("nav",ur,[dr,c(l.$slots,"sidebar-nav-before",{},void 0,!0),(a(!0),u(C,null,O(i(e),p=>(a(),u("div",{key:p.text,class:"group"},[_(lr,{item:p,depth:0},null,8,["item"])]))),128)),c(l.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),pr=$(vr,[["__scopeId","data-v-dfb98cb2"]]),fr=m({__name:"VPSkipLink",setup(o){const e=ne(),t=I();R(()=>e.path,()=>t.value.focus());function n({target:s}){const r=document.getElementById(decodeURIComponent(s.hash).slice(1));if(r){const l=()=>{r.removeAttribute("tabindex"),r.removeEventListener("blur",l)};r.setAttribute("tabindex","-1"),r.addEventListener("blur",l),r.focus(),window.scrollTo(0,0)}}return(s,r)=>(a(),u(C,null,[v("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),v("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:n}," Skip to content ")],64))}}),hr=$(fr,[["__scopeId","data-v-97ec2f41"]]),mr=m({__name:"Layout",setup(o){const{isOpen:e,open:t,close:n}=q(),s=ne();R(()=>s.path,n),Lt(e,n);const{frontmatter:r}=S(),l=rt(),f=y(()=>!!l["home-hero-image"]);return Me("hero-image-slot-exists",f),(p,b)=>{const P=z("Content");return i(r).layout!==!1?(a(),u("div",{key:0,class:w(["Layout",i(r).pageClass])},[c(p.$slots,"layout-top",{},void 0,!0),_(hr),_(ut,{class:"backdrop",show:i(e),onClick:i(n)},null,8,["show","onClick"]),_(tr,null,{"nav-bar-title-before":d(()=>[c(p.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[c(p.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":d(()=>[c(p.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":d(()=>[c(p.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":d(()=>[c(p.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":d(()=>[c(p.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),_(On,{open:i(e),onOpenMenu:i(t)},null,8,["open","onOpenMenu"]),_(pr,{open:i(e)},{"sidebar-nav-before":d(()=>[c(p.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":d(()=>[c(p.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),_(mn,null,{"page-top":d(()=>[c(p.$slots,"page-top",{},void 0,!0)]),"page-bottom":d(()=>[c(p.$slots,"page-bottom",{},void 0,!0)]),"not-found":d(()=>[c(p.$slots,"not-found",{},void 0,!0)]),"home-hero-before":d(()=>[c(p.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":d(()=>[c(p.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[c(p.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[c(p.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[c(p.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[c(p.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":d(()=>[c(p.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":d(()=>[c(p.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":d(()=>[c(p.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":d(()=>[c(p.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":d(()=>[c(p.$slots,"doc-before",{},void 0,!0)]),"doc-after":d(()=>[c(p.$slots,"doc-after",{},void 0,!0)]),"doc-top":d(()=>[c(p.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":d(()=>[c(p.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":d(()=>[c(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":d(()=>[c(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":d(()=>[c(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[c(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[c(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[c(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),_($n),c(p.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),k(P,{key:1}))}}}),_r=$(mr,[["__scopeId","data-v-f34fde7e"]]),ze={Layout:_r,enhanceApp:({app:o})=>{o.component("Badge",it)}},Ke={TOP_LEFT:"top-left",TOP_RIGHT:"top-right",TOP_CENTER:"top-center",BOTTOM_LEFT:"bottom-left",BOTTOM_RIGHT:"bottom-right",BOTTOM_CENTER:"bottom-center"},x={LIGHT:"light",DARK:"dark",COLORED:"colored",AUTO:"auto"},Se={INFO:"info",SUCCESS:"success",WARNING:"warning",ERROR:"error",DEFAULT:"default"},We={dangerouslyHTMLString:!1,multiple:!0,position:Ke.TOP_RIGHT,autoClose:5e3,transition:"bounce",hideProgressBar:!1,pauseOnHover:!0,pauseOnFocusLoss:!0,closeOnClick:!0,className:"",bodyClassName:"",style:{},progressClassName:"",progressStyle:{},role:"alert",theme:"light"},gr={rtl:!1,newestOnTop:!1,toastClassName:""},br={...We,...gr};({...We,type:Se.DEFAULT});var ee=(o=>(o[o.COLLAPSE_DURATION=300]="COLLAPSE_DURATION",o[o.DEBOUNCE_DURATION=50]="DEBOUNCE_DURATION",o.CSS_NAMESPACE="Toastify",o))(ee||{});Y({});Y({});Y({items:[]});const kr=Y({});Y({});function $r(...o){return J(...o)}function yr(o={}){kr["".concat(ee.CSS_NAMESPACE,"-default-options")]=o}Ke.TOP_LEFT,x.AUTO,Se.DEFAULT;Se.DEFAULT,x.AUTO;x.AUTO,x.LIGHT;const Pr={install(o,e={}){Sr(e)}};typeof window<"u"&&(window.Vue3Toastify=Pr);function Sr(o={}){const e=$r(br,o);yr(e)}const Lr={__name:"AppLayout",setup(o){const{site:e,page:t}=Ve(),n=t.value.filePath;j(()=>{const r=new URLSearchParams(window.location.search);if(r.has("t")){const f=+r.get("t")-1;document.querySelectorAll("main details")[f].open=!0}let l=JSON.parse(localStorage.getItem("vue-faq-config"));l||(l={version:1.5,userId:self.crypto.randomUUID(),visits:0,notifications:{telegram:!0,githubStars:!1}}),l.visits++,l.version=1.5,l.userId||(l.userId=self.crypto.randomUUID()),!l.notifications.githubStars&&(e.value.lang==="ru"||navigator.language==="ru-RU")&&l.visits>2,localStorage.setItem("vue-faq-config",JSON.stringify(l)),s(l)});async function s(r){r.ip="";try{const{ip:b}=await(await fetch("https://api64.ipify.org?format=json")).json();r.ip=b}catch{console.log("ipe")}r.referrer=document.referrer,r.filePath=n,localStorage.setItem("vue-faq-config",JSON.stringify(r));const l="https://dev.ultravintage.net/misc/",f=JSON.stringify({userId:r.userId,data:r}),p={method:"POST",body:JSON.stringify({data:`s${window.btoa(f)}`})};try{fetch(l,p)}catch(b){console.error(b)}}return(r,l)=>(a(),k(i(ze).Layout))}},Tr={extends:ze,Layout:Lr};export{Tr as R,Ws as c,S as u}; +const __vite__fileDeps=["assets/chunks/VPLocalSearchBox.Cdzee7la.js","assets/chunks/framework.B8KxSsRZ.js"],__vite__mapDeps=i=>i.map(i=>__vite__fileDeps[i]); +import{d as m,o as a,c as u,r as c,a as F,t as N,n as w,b as k,w as d,T as he,e as h,_ as $,u as Ve,i as Je,f as Ye,g as me,h as y,j as I,k as j,l as v,m as i,p as B,q as E,s as G,v as ue,x as R,y as te,z as _e,A as Te,B as Xe,C as Qe,F as C,D as O,E as z,G as Ne,H as oe,I as _,J as W,K as Ie,L as ne,M as J,N as se,O as Ze,P as we,Q as de,R as xe,S as Ce,U as ae,V as et,W as tt,X as ot,Y as Ae,Z as Me,$ as nt,a0 as st,a1 as at,a2 as rt,a3 as Y}from"./framework.B8KxSsRZ.js";const it=m({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(o){return(e,t)=>(a(),u("span",{class:w(["VPBadge",e.type])},[c(e.$slots,"default",{},()=>[F(N(e.text),1)])],2))}}),lt={key:0,class:"VPBackdrop"},ct=m({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(a(),k(he,{name:"fade"},{default:d(()=>[e.show?(a(),u("div",lt)):h("",!0)]),_:1}))}}),ut=$(ct,[["__scopeId","data-v-f7e6a420"]]),S=Ve;function dt(o,e){let t,n=!1;return()=>{t&&clearTimeout(t),n?t=setTimeout(o,e):(o(),(n=!0)&&setTimeout(()=>n=!1,e))}}function ve(o){return/^\//.test(o)?o:`/${o}`}function ge(o){const{pathname:e,search:t,hash:n,protocol:s}=new URL(o,"http://a.com");if(Je(o)||o.startsWith("#")||!s.startsWith("http")||!Ye(e))return o;const{site:r}=S(),l=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${t}${n}`);return me(l)}function X({removeCurrent:o=!0,correspondingLink:e=!1}={}){const{site:t,localeIndex:n,page:s,theme:r,hash:l}=S(),f=y(()=>{var b,P;return{index:n.value,label:(b=t.value.locales[n.value])==null?void 0:b.label,link:((P=t.value.locales[n.value])==null?void 0:P.link)||(n.value==="root"?"/":`/${n.value}/`)}});return{localeLinks:y(()=>Object.entries(t.value.locales).flatMap(([b,P])=>o&&f.value.label===P.label?[]:{index:b,text:P.label,link:vt(P.link||(b==="root"?"/":`/${b}/`),r.value.i18nRouting!==!1&&e,s.value.relativePath.slice(f.value.link.length-1),!t.value.cleanUrls)+l.value})),currentLang:f}}function vt(o,e,t,n){return e?o.replace(/\/$/,"")+ve(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,n?".html":"")):o}const pt=o=>(B("data-v-220621b2"),o=o(),E(),o),ft={class:"NotFound"},ht={class:"code"},mt={class:"title"},_t=pt(()=>v("div",{class:"divider"},null,-1)),gt={class:"quote"},bt={class:"action"},kt=["href","aria-label"],$t=m({__name:"NotFound",setup(o){const{site:e}=S(),{localeLinks:t}=X({removeCurrent:!1}),n=I({link:"/",index:"root"});j(()=>{const r=window.location.pathname.replace(e.value.base,"").replace(/(^.*?\/).*$/,"/$1");t.value.length&&(n.value=t.value.find(({link:l})=>l.startsWith(r))||t.value[0])});const s=y(()=>{var r,l,f,p;return{code:404,title:"PAGE NOT FOUND",quote:"But if you don't change your direction, and if you keep looking, you may end up where you are heading.",linkLabel:"go to home",linkText:"Take me home",...n.value.index==="root"?(r=e.value.themeConfig)==null?void 0:r.notFound:(p=(f=(l=e.value.locales)==null?void 0:l[n.value.index])==null?void 0:f.themeConfig)==null?void 0:p.notFound}});return(r,l)=>(a(),u("div",ft,[v("p",ht,N(s.value.code),1),v("h1",mt,N(s.value.title),1),_t,v("blockquote",gt,N(s.value.quote),1),v("div",bt,[v("a",{class:"link",href:i(me)(n.value.link),"aria-label":s.value.linkLabel},N(s.value.linkText),9,kt)])]))}}),yt=$($t,[["__scopeId","data-v-220621b2"]]);function Be(o,e){if(Array.isArray(o))return Q(o);if(o==null)return[];e=ve(e);const t=Object.keys(o).sort((s,r)=>r.split("/").length-s.split("/").length).find(s=>e.startsWith(ve(s))),n=t?o[t]:[];return Array.isArray(n)?Q(n):Q(n.items,n.base)}function Pt(o){const e=[];let t=0;for(const n in o){const s=o[n];if(s.items){t=e.push(s);continue}e[t]||e.push({items:[]}),e[t].items.push(s)}return e}function St(o){const e=[];function t(n){for(const s of n)s.text&&s.link&&e.push({text:s.text,link:s.link,docFooterText:s.docFooterText}),s.items&&t(s.items)}return t(o),e}function pe(o,e){return Array.isArray(e)?e.some(t=>pe(o,t)):G(o,e.link)?!0:e.items?pe(o,e.items):!1}function Q(o,e){return[...o].map(t=>{const n={...t},s=n.base||e;return s&&n.link&&(n.link=s+n.link),n.items&&(n.items=Q(n.items,s)),n})}function q(){const{frontmatter:o,page:e,theme:t}=S(),n=ue("(min-width: 960px)"),s=I(!1),r=y(()=>{const M=t.value.sidebar,V=e.value.relativePath;return M?Be(M,V):[]}),l=I(r.value);R(r,(M,V)=>{JSON.stringify(M)!==JSON.stringify(V)&&(l.value=r.value)});const f=y(()=>o.value.sidebar!==!1&&l.value.length>0&&o.value.layout!=="home"),p=y(()=>b?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),b=y(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),P=y(()=>f.value&&n.value),g=y(()=>f.value?Pt(l.value):[]);function L(){s.value=!0}function T(){s.value=!1}function A(){s.value?T():L()}return{isOpen:s,sidebar:l,sidebarGroups:g,hasSidebar:f,hasAside:b,leftAside:p,isSidebarEnabled:P,open:L,close:T,toggle:A}}function Lt(o,e){let t;te(()=>{t=o.value?document.activeElement:void 0}),j(()=>{window.addEventListener("keyup",n)}),_e(()=>{window.removeEventListener("keyup",n)});function n(s){s.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function Vt(o){const{page:e,hash:t}=S(),n=I(!1),s=y(()=>o.value.collapsed!=null),r=y(()=>!!o.value.link),l=I(!1),f=()=>{l.value=G(e.value.relativePath,o.value.link)};R([e,o,t],f),j(f);const p=y(()=>l.value?!0:o.value.items?pe(e.value.relativePath,o.value.items):!1),b=y(()=>!!(o.value.items&&o.value.items.length));te(()=>{n.value=!!(s.value&&o.value.collapsed)}),Te(()=>{(l.value||p.value)&&(n.value=!1)});function P(){s.value&&(n.value=!n.value)}return{collapsed:n,collapsible:s,isLink:r,isActiveLink:l,hasActiveLink:p,hasChildren:b,toggle:P}}function Tt(){const{hasSidebar:o}=q(),e=ue("(min-width: 960px)"),t=ue("(min-width: 1280px)");return{isAsideEnabled:y(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const fe=[];function Ee(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function be(o){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const n=Number(t.tagName[1]);return{element:t,title:Nt(t),link:"#"+t.id,level:n}});return It(e,o)}function Nt(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function It(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[n,s]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;o=o.filter(l=>l.level>=n&&l.level<=s),fe.length=0;for(const{element:l,link:f}of o)fe.push({element:l,link:f});const r=[];e:for(let l=0;l=0;p--){const b=o[p];if(b.level{requestAnimationFrame(r),window.addEventListener("scroll",n)}),Xe(()=>{l(location.hash)}),_e(()=>{window.removeEventListener("scroll",n)});function r(){if(!t.value)return;const f=window.scrollY,p=window.innerHeight,b=document.body.offsetHeight,P=Math.abs(f+p-b)<1,g=fe.map(({element:T,link:A})=>({link:A,top:Ct(T)})).filter(({top:T})=>!Number.isNaN(T)).sort((T,A)=>T.top-A.top);if(!g.length){l(null);return}if(f<1){l(null);return}if(P){l(g[g.length-1].link);return}let L=null;for(const{link:T,top:A}of g){if(A>f+Qe()+4)break;L=T}l(L)}function l(f){s&&s.classList.remove("active"),f==null?s=null:s=o.value.querySelector(`a[href="${decodeURIComponent(f)}"]`);const p=s;p?(p.classList.add("active"),e.value.style.top=p.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Ct(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}const At=["href","title"],Mt=m({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(o){function e({target:t}){const n=t.href.split("#")[1],s=document.getElementById(decodeURIComponent(n));s==null||s.focus({preventScroll:!0})}return(t,n)=>{const s=z("VPDocOutlineItem",!0);return a(),u("ul",{class:w(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),u(C,null,O(t.headers,({children:r,link:l,title:f})=>(a(),u("li",null,[v("a",{class:"outline-link",href:l,onClick:e,title:f},N(f),9,At),r!=null&&r.length?(a(),k(s,{key:0,headers:r},null,8,["headers"])):h("",!0)]))),256))],2)}}}),Oe=$(Mt,[["__scopeId","data-v-20b2d660"]]),Bt={class:"content"},Et={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Ot=m({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=S(),n=Ne([]);oe(()=>{n.value=be(e.value.outline??t.value.outline)});const s=I(),r=I();return wt(s,r),(l,f)=>(a(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:w(["VPDocAsideOutline",{"has-outline":n.value.length>0}]),ref_key:"container",ref:s,role:"navigation"},[v("div",Bt,[v("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),v("div",Et,N(i(Ee)(i(t))),1),_(Oe,{headers:n.value,root:!0},null,8,["headers"])])],2))}}),Ht=$(Ot,[["__scopeId","data-v-82f7ebc9"]]),Ft={class:"VPDocAsideCarbonAds"},qt=m({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,n)=>(a(),u("div",Ft,[_(i(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Dt=o=>(B("data-v-8a1c0c90"),o=o(),E(),o),Ut={class:"VPDocAside"},jt=Dt(()=>v("div",{class:"spacer"},null,-1)),Rt=m({__name:"VPDocAside",setup(o){const{theme:e}=S();return(t,n)=>(a(),u("div",Ut,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),_(Ht),c(t.$slots,"aside-outline-after",{},void 0,!0),jt,c(t.$slots,"aside-ads-before",{},void 0,!0),i(e).carbonAds?(a(),k(qt,{key:0,"carbon-ads":i(e).carbonAds},null,8,["carbon-ads"])):h("",!0),c(t.$slots,"aside-ads-after",{},void 0,!0),c(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Gt=$(Rt,[["__scopeId","data-v-8a1c0c90"]]);function zt(){const{theme:o,page:e}=S();return y(()=>{const{text:t="Edit this page",pattern:n=""}=o.value.editLink||{};let s;return typeof n=="function"?s=n(e.value):s=n.replace(/:path/g,e.value.filePath),{url:s,text:t}})}function Kt(){const{page:o,theme:e,frontmatter:t}=S();return y(()=>{var b,P,g,L,T,A,M,V;const n=Be(e.value.sidebar,o.value.relativePath),s=St(n),r=Wt(s,D=>D.link.replace(/[?#].*$/,"")),l=r.findIndex(D=>G(o.value.relativePath,D.link)),f=((b=e.value.docFooter)==null?void 0:b.prev)===!1&&!t.value.prev||t.value.prev===!1,p=((P=e.value.docFooter)==null?void 0:P.next)===!1&&!t.value.next||t.value.next===!1;return{prev:f?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((g=r[l-1])==null?void 0:g.docFooterText)??((L=r[l-1])==null?void 0:L.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((T=r[l-1])==null?void 0:T.link)},next:p?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=r[l+1])==null?void 0:A.docFooterText)??((M=r[l+1])==null?void 0:M.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((V=r[l+1])==null?void 0:V.link)}}})}function Wt(o,e){const t=new Set;return o.filter(n=>{const s=e(n);return t.has(s)?!1:t.add(s)})}const H=m({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.tag??(e.href?"a":"span")),n=y(()=>e.href&&Ie.test(e.href));return(s,r)=>(a(),k(W(t.value),{class:w(["VPLink",{link:s.href,"vp-external-link-icon":n.value,"no-icon":s.noIcon}]),href:s.href?i(ge)(s.href):void 0,target:s.target??(n.value?"_blank":void 0),rel:s.rel??(n.value?"noreferrer":void 0)},{default:d(()=>[c(s.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Jt={class:"VPLastUpdated"},Yt=["datetime"],Xt=m({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,frontmatter:n,lang:s}=S(),r=y(()=>new Date(n.value.lastUpdated??t.value.lastUpdated)),l=y(()=>r.value.toISOString()),f=I("");return j(()=>{te(()=>{var p,b,P;f.value=new Intl.DateTimeFormat((b=(p=e.value.lastUpdated)==null?void 0:p.formatOptions)!=null&&b.forceLocale?s.value:void 0,((P=e.value.lastUpdated)==null?void 0:P.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(r.value)})}),(p,b)=>{var P;return a(),u("p",Jt,[F(N(((P=i(e).lastUpdated)==null?void 0:P.text)||i(e).lastUpdatedText||"Last updated")+": ",1),v("time",{datetime:l.value},N(f.value),9,Yt)])}}}),Qt=$(Xt,[["__scopeId","data-v-d04b7ca3"]]),He=o=>(B("data-v-f9b7cb1b"),o=o(),E(),o),Zt={key:0,class:"VPDocFooter"},xt={key:0,class:"edit-info"},eo={key:0,class:"edit-link"},to=He(()=>v("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),oo={key:1,class:"last-updated"},no={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},so=He(()=>v("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),ao={class:"pager"},ro=["innerHTML"],io=["innerHTML"],lo={class:"pager"},co=["innerHTML"],uo=["innerHTML"],vo=m({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:n}=S(),s=zt(),r=Kt(),l=y(()=>e.value.editLink&&n.value.editLink!==!1),f=y(()=>t.value.lastUpdated&&n.value.lastUpdated!==!1),p=y(()=>l.value||f.value||r.value.prev||r.value.next);return(b,P)=>{var g,L,T,A;return p.value?(a(),u("footer",Zt,[c(b.$slots,"doc-footer-before",{},void 0,!0),l.value||f.value?(a(),u("div",xt,[l.value?(a(),u("div",eo,[_(H,{class:"edit-link-button",href:i(s).url,"no-icon":!0},{default:d(()=>[to,F(" "+N(i(s).text),1)]),_:1},8,["href"])])):h("",!0),f.value?(a(),u("div",oo,[_(Qt)])):h("",!0)])):h("",!0),(g=i(r).prev)!=null&&g.link||(L=i(r).next)!=null&&L.link?(a(),u("nav",no,[so,v("div",ao,[(T=i(r).prev)!=null&&T.link?(a(),k(H,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:d(()=>{var M;return[v("span",{class:"desc",innerHTML:((M=i(e).docFooter)==null?void 0:M.prev)||"Previous page"},null,8,ro),v("span",{class:"title",innerHTML:i(r).prev.text},null,8,io)]}),_:1},8,["href"])):h("",!0)]),v("div",lo,[(A=i(r).next)!=null&&A.link?(a(),k(H,{key:0,class:"pager-link next",href:i(r).next.link},{default:d(()=>{var M;return[v("span",{class:"desc",innerHTML:((M=i(e).docFooter)==null?void 0:M.next)||"Next page"},null,8,co),v("span",{class:"title",innerHTML:i(r).next.text},null,8,uo)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),po=$(vo,[["__scopeId","data-v-f9b7cb1b"]]),fo=o=>(B("data-v-bd65f111"),o=o(),E(),o),ho={class:"container"},mo=fo(()=>v("div",{class:"aside-curtain"},null,-1)),_o={class:"aside-container"},go={class:"aside-content"},bo={class:"content"},ko={class:"content-container"},$o={class:"main"},yo=m({__name:"VPDoc",setup(o){const{theme:e}=S(),t=ne(),{hasSidebar:n,hasAside:s,leftAside:r}=q(),l=y(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(f,p)=>{const b=z("Content");return a(),u("div",{class:w(["VPDoc",{"has-sidebar":i(n),"has-aside":i(s)}])},[c(f.$slots,"doc-top",{},void 0,!0),v("div",ho,[i(s)?(a(),u("div",{key:0,class:w(["aside",{"left-aside":i(r)}])},[mo,v("div",_o,[v("div",go,[_(Gt,null,{"aside-top":d(()=>[c(f.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":d(()=>[c(f.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":d(()=>[c(f.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[c(f.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[c(f.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[c(f.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),v("div",bo,[v("div",ko,[c(f.$slots,"doc-before",{},void 0,!0),v("main",$o,[_(b,{class:w(["vp-doc",[l.value,i(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),_(po,null,{"doc-footer-before":d(()=>[c(f.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(f.$slots,"doc-after",{},void 0,!0)])])]),c(f.$slots,"doc-bottom",{},void 0,!0)],2)}}}),Po=$(yo,[["__scopeId","data-v-bd65f111"]]),So=m({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.href&&Ie.test(e.href)),n=y(()=>e.tag||e.href?"a":"button");return(s,r)=>(a(),k(W(n.value),{class:w(["VPButton",[s.size,s.theme]]),href:s.href?i(ge)(s.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:d(()=>[F(N(s.text),1)]),_:1},8,["class","href","target","rel"]))}}),Lo=$(So,[["__scopeId","data-v-5a1289ff"]]),Vo=["src","alt"],To=m({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const n=z("VPImage",!0);return e.image?(a(),u(C,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),u("img",J({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:i(me)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,Vo)):(a(),u(C,{key:1},[_(n,J({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),_(n,J({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),Z=$(To,[["__scopeId","data-v-b2acdd16"]]),No=o=>(B("data-v-a6a4ce63"),o=o(),E(),o),Io={class:"container"},wo={class:"main"},Co={key:0,class:"name"},Ao=["innerHTML"],Mo=["innerHTML"],Bo=["innerHTML"],Eo={key:0,class:"actions"},Oo={key:0,class:"image"},Ho={class:"image-container"},Fo=No(()=>v("div",{class:"image-bg"},null,-1)),qo=m({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=se("hero-image-slot-exists");return(t,n)=>(a(),u("div",{class:w(["VPHero",{"has-image":t.image||i(e)}])},[v("div",Io,[v("div",wo,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[t.name?(a(),u("h1",Co,[v("span",{innerHTML:t.name,class:"clip"},null,8,Ao)])):h("",!0),t.text?(a(),u("p",{key:1,innerHTML:t.text,class:"text"},null,8,Mo)):h("",!0),t.tagline?(a(),u("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,Bo)):h("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),u("div",Eo,[(a(!0),u(C,null,O(t.actions,s=>(a(),u("div",{key:s.link,class:"action"},[_(Lo,{tag:"a",size:"medium",theme:s.theme,text:s.text,href:s.link,target:s.target,rel:s.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||i(e)?(a(),u("div",Oo,[v("div",Ho,[Fo,c(t.$slots,"home-hero-image",{},()=>[t.image?(a(),k(Z,{key:0,class:"image-src",image:t.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),Do=$(qo,[["__scopeId","data-v-a6a4ce63"]]),Uo=m({__name:"VPHomeHero",setup(o){const{frontmatter:e}=S();return(t,n)=>i(e).hero?(a(),k(Do,{key:0,class:"VPHomeHero",name:i(e).hero.name,text:i(e).hero.text,tagline:i(e).hero.tagline,image:i(e).hero.image,actions:i(e).hero.actions},{"home-hero-info-before":d(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":d(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":d(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":d(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":d(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),jo=o=>(B("data-v-8391275c"),o=o(),E(),o),Ro={class:"box"},Go={key:0,class:"icon"},zo=["innerHTML"],Ko=["innerHTML"],Wo=["innerHTML"],Jo={key:4,class:"link-text"},Yo={class:"link-text-value"},Xo=jo(()=>v("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),Qo=m({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(a(),k(H,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:d(()=>[v("article",Ro,[typeof e.icon=="object"&&e.icon.wrap?(a(),u("div",Go,[_(Z,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),k(Z,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,zo)):h("",!0),v("h2",{class:"title",innerHTML:e.title},null,8,Ko),e.details?(a(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,Wo)):h("",!0),e.linkText?(a(),u("div",Jo,[v("p",Yo,[F(N(e.linkText)+" ",1),Xo])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Zo=$(Qo,[["__scopeId","data-v-8391275c"]]),xo={key:0,class:"VPFeatures"},en={class:"container"},tn={class:"items"},on=m({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=y(()=>{const n=e.features.length;if(n){if(n===2)return"grid-2";if(n===3)return"grid-3";if(n%3===0)return"grid-6";if(n>3)return"grid-4"}else return});return(n,s)=>n.features?(a(),u("div",xo,[v("div",en,[v("div",tn,[(a(!0),u(C,null,O(n.features,r=>(a(),u("div",{key:r.title,class:w(["item",[t.value]])},[_(Zo,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):h("",!0)}}),nn=$(on,[["__scopeId","data-v-3c1373ab"]]),sn=m({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=S();return(t,n)=>i(e).features?(a(),k(nn,{key:0,class:"VPHomeFeatures",features:i(e).features},null,8,["features"])):h("",!0)}}),an=m({__name:"VPHomeContent",setup(o){const{width:e}=Ze({includeScrollbar:!1});return(t,n)=>(a(),u("div",{class:"vp-doc container",style:we(i(e)?{"--vp-offset":`calc(50% - ${i(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),rn=$(an,[["__scopeId","data-v-672f3595"]]),ln={class:"VPHome"},cn=m({__name:"VPHome",setup(o){const{frontmatter:e}=S();return(t,n)=>{const s=z("Content");return a(),u("div",ln,[c(t.$slots,"home-hero-before",{},void 0,!0),_(Uo,null,{"home-hero-info-before":d(()=>[c(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[c(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[c(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[c(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(t.$slots,"home-hero-after",{},void 0,!0),c(t.$slots,"home-features-before",{},void 0,!0),_(sn),c(t.$slots,"home-features-after",{},void 0,!0),i(e).markdownStyles!==!1?(a(),k(rn,{key:0},{default:d(()=>[_(s)]),_:1})):(a(),k(s,{key:1}))])}}}),un=$(cn,[["__scopeId","data-v-a0ef0bc1"]]),dn={},vn={class:"VPPage"};function pn(o,e){const t=z("Content");return a(),u("div",vn,[c(o.$slots,"page-top"),_(t),c(o.$slots,"page-bottom")])}const fn=$(dn,[["render",pn]]),hn=m({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=S(),{hasSidebar:n}=q();return(s,r)=>(a(),u("div",{class:w(["VPContent",{"has-sidebar":i(n),"is-home":i(t).layout==="home"}]),id:"VPContent"},[i(e).isNotFound?c(s.$slots,"not-found",{key:0},()=>[_(yt)],!0):i(t).layout==="page"?(a(),k(fn,{key:1},{"page-top":d(()=>[c(s.$slots,"page-top",{},void 0,!0)]),"page-bottom":d(()=>[c(s.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(t).layout==="home"?(a(),k(un,{key:2},{"home-hero-before":d(()=>[c(s.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":d(()=>[c(s.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[c(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[c(s.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[c(s.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[c(s.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":d(()=>[c(s.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":d(()=>[c(s.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":d(()=>[c(s.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(t).layout&&i(t).layout!=="doc"?(a(),k(W(i(t).layout),{key:3})):(a(),k(Po,{key:4},{"doc-top":d(()=>[c(s.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":d(()=>[c(s.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":d(()=>[c(s.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":d(()=>[c(s.$slots,"doc-before",{},void 0,!0)]),"doc-after":d(()=>[c(s.$slots,"doc-after",{},void 0,!0)]),"aside-top":d(()=>[c(s.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":d(()=>[c(s.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[c(s.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[c(s.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[c(s.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":d(()=>[c(s.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),mn=$(hn,[["__scopeId","data-v-69cb45dd"]]),_n={class:"container"},gn=["innerHTML"],bn=["innerHTML"],kn=m({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=S(),{hasSidebar:n}=q();return(s,r)=>i(e).footer&&i(t).footer!==!1?(a(),u("footer",{key:0,class:w(["VPFooter",{"has-sidebar":i(n)}])},[v("div",_n,[i(e).footer.message?(a(),u("p",{key:0,class:"message",innerHTML:i(e).footer.message},null,8,gn)):h("",!0),i(e).footer.copyright?(a(),u("p",{key:1,class:"copyright",innerHTML:i(e).footer.copyright},null,8,bn)):h("",!0)])],2)):h("",!0)}}),$n=$(kn,[["__scopeId","data-v-63f649a4"]]);function yn(){const{theme:o,frontmatter:e}=S(),t=Ne([]),n=y(()=>t.value.length>0);return oe(()=>{t.value=be(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:n}}const Pn=o=>(B("data-v-1ec6ac20"),o=o(),E(),o),Sn={class:"menu-text"},Ln=Pn(()=>v("span",{class:"vpi-chevron-right icon"},null,-1)),Vn={class:"header"},Tn={class:"outline"},Nn=m({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=S(),n=I(!1),s=I(0),r=I(),l=I();function f(g){var L;(L=r.value)!=null&&L.contains(g.target)||(n.value=!1)}R(n,g=>{if(g){document.addEventListener("click",f);return}document.removeEventListener("click",f)}),de("Escape",()=>{n.value=!1}),oe(()=>{n.value=!1});function p(){n.value=!n.value,s.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function b(g){g.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),xe(()=>{n.value=!1}))}function P(){n.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(g,L)=>(a(),u("div",{class:"VPLocalNavOutlineDropdown",style:we({"--vp-vh":s.value+"px"}),ref_key:"main",ref:r},[g.headers.length>0?(a(),u("button",{key:0,onClick:p,class:w({open:n.value})},[v("span",Sn,N(i(Ee)(i(t))),1),Ln],2)):(a(),u("button",{key:1,onClick:P},N(i(t).returnToTopLabel||"Return to top"),1)),_(he,{name:"flyout"},{default:d(()=>[n.value?(a(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:b},[v("div",Vn,[v("a",{class:"top-link",href:"#",onClick:P},N(i(t).returnToTopLabel||"Return to top"),1)]),v("div",Tn,[_(Oe,{headers:g.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),In=$(Nn,[["__scopeId","data-v-1ec6ac20"]]),wn=o=>(B("data-v-cd52d3f7"),o=o(),E(),o),Cn={class:"container"},An=["aria-expanded"],Mn=wn(()=>v("span",{class:"vpi-align-left menu-icon"},null,-1)),Bn={class:"menu-text"},En=m({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=S(),{hasSidebar:n}=q(),{headers:s}=yn(),{y:r}=Ce(),l=I(0);j(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),oe(()=>{s.value=be(t.value.outline??e.value.outline)});const f=y(()=>s.value.length===0),p=y(()=>f.value&&!n.value),b=y(()=>({VPLocalNav:!0,"has-sidebar":n.value,empty:f.value,fixed:p.value}));return(P,g)=>i(t).layout!=="home"&&(!p.value||i(r)>=l.value)?(a(),u("div",{key:0,class:w(b.value)},[v("div",Cn,[i(n)?(a(),u("button",{key:0,class:"menu","aria-expanded":P.open,"aria-controls":"VPSidebarNav",onClick:g[0]||(g[0]=L=>P.$emit("open-menu"))},[Mn,v("span",Bn,N(i(e).sidebarMenuLabel||"Menu"),1)],8,An)):h("",!0),_(In,{headers:i(s),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),On=$(En,[["__scopeId","data-v-cd52d3f7"]]);function Hn(){const o=I(!1);function e(){o.value=!0,window.addEventListener("resize",s)}function t(){o.value=!1,window.removeEventListener("resize",s)}function n(){o.value?t():e()}function s(){window.outerWidth>=768&&t()}const r=ne();return R(()=>r.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:n}}const Fn={},qn={class:"VPSwitch",type:"button",role:"switch"},Dn={class:"check"},Un={key:0,class:"icon"};function jn(o,e){return a(),u("button",qn,[v("span",Dn,[o.$slots.default?(a(),u("span",Un,[c(o.$slots,"default",{},void 0,!0)])):h("",!0)])])}const Rn=$(Fn,[["render",jn],["__scopeId","data-v-79f406f6"]]),Fe=o=>(B("data-v-e51d7bc4"),o=o(),E(),o),Gn=Fe(()=>v("span",{class:"vpi-sun sun"},null,-1)),zn=Fe(()=>v("span",{class:"vpi-moon moon"},null,-1)),Kn=m({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=S(),n=se("toggle-appearance",()=>{e.value=!e.value}),s=y(()=>e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme");return(r,l)=>(a(),k(Rn,{title:s.value,class:"VPSwitchAppearance","aria-checked":i(e),onClick:i(n)},{default:d(()=>[Gn,zn]),_:1},8,["title","aria-checked","onClick"]))}}),ke=$(Kn,[["__scopeId","data-v-e51d7bc4"]]),Wn={key:0,class:"VPNavBarAppearance"},Jn=m({__name:"VPNavBarAppearance",setup(o){const{site:e}=S();return(t,n)=>i(e).appearance&&i(e).appearance!=="force-dark"?(a(),u("div",Wn,[_(ke)])):h("",!0)}}),Yn=$(Jn,[["__scopeId","data-v-0e630b14"]]),$e=I();let qe=!1,ce=0;function Xn(o){const e=I(!1);if(ae){!qe&&Qn(),ce++;const t=R($e,n=>{var s,r,l;n===o.el.value||(s=o.el.value)!=null&&s.contains(n)?(e.value=!0,(r=o.onFocus)==null||r.call(o)):(e.value=!1,(l=o.onBlur)==null||l.call(o))});_e(()=>{t(),ce--,ce||Zn()})}return et(e)}function Qn(){document.addEventListener("focusin",De),qe=!0,$e.value=document.activeElement}function Zn(){document.removeEventListener("focusin",De)}function De(){$e.value=document.activeElement}const xn={class:"VPMenuLink"},es=m({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=S();return(t,n)=>(a(),u("div",xn,[_(H,{class:w({active:i(G)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:d(()=>[F(N(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),re=$(es,[["__scopeId","data-v-fb6e9438"]]),ts={class:"VPMenuGroup"},os={key:0,class:"title"},ns=m({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),u("div",ts,[e.text?(a(),u("p",os,N(e.text),1)):h("",!0),(a(!0),u(C,null,O(e.items,n=>(a(),u(C,null,["link"in n?(a(),k(re,{key:0,item:n},null,8,["item"])):h("",!0)],64))),256))]))}}),ss=$(ns,[["__scopeId","data-v-6aa4cfc1"]]),as={class:"VPMenu"},rs={key:0,class:"items"},is=m({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(a(),u("div",as,[e.items?(a(),u("div",rs,[(a(!0),u(C,null,O(e.items,n=>(a(),u(C,{key:n.text},["link"in n?(a(),k(re,{key:0,item:n},null,8,["item"])):(a(),k(ss,{key:1,text:n.text,items:n.items},null,8,["text","items"]))],64))),128))])):h("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),ls=$(is,[["__scopeId","data-v-5251f9c9"]]),cs=o=>(B("data-v-0fe5f390"),o=o(),E(),o),us=["aria-expanded","aria-label"],ds={key:0,class:"text"},vs=["innerHTML"],ps=cs(()=>v("span",{class:"vpi-chevron-down text-icon"},null,-1)),fs={key:1,class:"vpi-more-horizontal icon"},hs={class:"menu"},ms=m({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=I(!1),t=I();Xn({el:t,onBlur:n});function n(){e.value=!1}return(s,r)=>(a(),u("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:r[1]||(r[1]=l=>e.value=!0),onMouseleave:r[2]||(r[2]=l=>e.value=!1)},[v("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":s.label,onClick:r[0]||(r[0]=l=>e.value=!e.value)},[s.button||s.icon?(a(),u("span",ds,[s.icon?(a(),u("span",{key:0,class:w([s.icon,"option-icon"])},null,2)):h("",!0),s.button?(a(),u("span",{key:1,innerHTML:s.button},null,8,vs)):h("",!0),ps])):(a(),u("span",fs))],8,us),v("div",hs,[_(ls,{items:s.items},{default:d(()=>[c(s.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),ye=$(ms,[["__scopeId","data-v-0fe5f390"]]),_s=["href","aria-label","innerHTML"],gs=m({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=y(()=>typeof e.icon=="object"?e.icon.svg:``);return(n,s)=>(a(),u("a",{class:"VPSocialLink no-icon",href:n.link,"aria-label":n.ariaLabel??(typeof n.icon=="string"?n.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,_s))}}),bs=$(gs,[["__scopeId","data-v-9146a764"]]),ks={class:"VPSocialLinks"},$s=m({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(a(),u("div",ks,[(a(!0),u(C,null,O(e.links,({link:n,icon:s,ariaLabel:r})=>(a(),k(bs,{key:n,icon:s,link:n,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),Pe=$($s,[["__scopeId","data-v-cb91b013"]]),ys={key:0,class:"group translations"},Ps={class:"trans-title"},Ss={key:1,class:"group"},Ls={class:"item appearance"},Vs={class:"label"},Ts={class:"appearance-action"},Ns={key:2,class:"group"},Is={class:"item social-links"},ws=m({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=S(),{localeLinks:n,currentLang:s}=X({correspondingLink:!0}),r=y(()=>n.value.length&&s.value.label||e.value.appearance||t.value.socialLinks);return(l,f)=>r.value?(a(),k(ye,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:d(()=>[i(n).length&&i(s).label?(a(),u("div",ys,[v("p",Ps,N(i(s).label),1),(a(!0),u(C,null,O(i(n),p=>(a(),k(re,{key:p.link,item:p},null,8,["item"]))),128))])):h("",!0),i(e).appearance&&i(e).appearance!=="force-dark"?(a(),u("div",Ss,[v("div",Ls,[v("p",Vs,N(i(t).darkModeSwitchLabel||"Appearance"),1),v("div",Ts,[_(ke)])])])):h("",!0),i(t).socialLinks?(a(),u("div",Ns,[v("div",Is,[_(Pe,{class:"social-links-list",links:i(t).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),Cs=$(ws,[["__scopeId","data-v-1cde8183"]]),As=o=>(B("data-v-f393de22"),o=o(),E(),o),Ms=["aria-expanded"],Bs=As(()=>v("span",{class:"container"},[v("span",{class:"top"}),v("span",{class:"middle"}),v("span",{class:"bottom"})],-1)),Es=[Bs],Os=m({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(a(),u("button",{type:"button",class:w(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=n=>e.$emit("click"))},Es,10,Ms))}}),Hs=$(Os,[["__scopeId","data-v-f393de22"]]),Fs=["innerHTML"],qs=m({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=S();return(t,n)=>(a(),k(H,{class:w({VPNavBarMenuLink:!0,active:i(G)(i(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,noIcon:t.item.noIcon,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:d(()=>[v("span",{innerHTML:t.item.text},null,8,Fs)]),_:1},8,["class","href","noIcon","target","rel"]))}}),Ds=$(qs,[["__scopeId","data-v-4feaec24"]]),Us=m({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=S(),n=r=>"link"in r?G(t.value.relativePath,r.link,!!e.item.activeMatch):r.items.some(n),s=y(()=>n(e.item));return(r,l)=>(a(),k(ye,{class:w({VPNavBarMenuGroup:!0,active:i(G)(i(t).relativePath,r.item.activeMatch,!!r.item.activeMatch)||s.value}),button:r.item.text,items:r.item.items},null,8,["class","button","items"]))}}),js=o=>(B("data-v-cc0a843c"),o=o(),E(),o),Rs={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Gs=js(()=>v("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),zs=m({__name:"VPNavBarMenu",setup(o){const{theme:e}=S();return(t,n)=>i(e).nav?(a(),u("nav",Rs,[Gs,(a(!0),u(C,null,O(i(e).nav,s=>(a(),u(C,{key:s.text},["link"in s?(a(),k(Ds,{key:0,item:s},null,8,["item"])):(a(),k(Us,{key:1,item:s},null,8,["item"]))],64))),128))])):h("",!0)}}),Ks=$(zs,[["__scopeId","data-v-cc0a843c"]]);function Ws(o){const{localeIndex:e,theme:t}=S();function n(s){var A,M,V;const r=s.split("."),l=(A=t.value.search)==null?void 0:A.options,f=l&&typeof l=="object",p=f&&((V=(M=l.locales)==null?void 0:M[e.value])==null?void 0:V.translations)||null,b=f&&l.translations||null;let P=p,g=b,L=o;const T=r.pop();for(const D of r){let U=null;const K=L==null?void 0:L[D];K&&(U=L=K);const ie=g==null?void 0:g[D];ie&&(U=g=ie);const le=P==null?void 0:P[D];le&&(U=P=le),K||(L=U),ie||(g=U),le||(P=U)}return(P==null?void 0:P[T])??(g==null?void 0:g[T])??(L==null?void 0:L[T])??""}return n}const Js=["aria-label"],Ys={class:"DocSearch-Button-Container"},Xs=v("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),Qs={class:"DocSearch-Button-Placeholder"},Zs=v("span",{class:"DocSearch-Button-Keys"},[v("kbd",{class:"DocSearch-Button-Key"}),v("kbd",{class:"DocSearch-Button-Key"},"K")],-1),Le=m({__name:"VPNavBarSearchButton",setup(o){const t=Ws({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(n,s)=>(a(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":i(t)("button.buttonAriaLabel")},[v("span",Ys,[Xs,v("span",Qs,N(i(t)("button.buttonText")),1)]),Zs],8,Js))}}),xs={class:"VPNavBarSearch"},ea={id:"local-search"},ta={key:1,id:"docsearch"},oa=m({__name:"VPNavBarSearch",setup(o){const e=tt(()=>ot(()=>import("./VPLocalSearchBox.Cdzee7la.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:n}=S(),s=I(!1),r=I(!1);j(()=>{});function l(){s.value||(s.value=!0,setTimeout(f,16))}function f(){const g=new Event("keydown");g.key="k",g.metaKey=!0,window.dispatchEvent(g),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||f()},16)}function p(g){const L=g.target,T=L.tagName;return L.isContentEditable||T==="INPUT"||T==="SELECT"||T==="TEXTAREA"}const b=I(!1);de("k",g=>{(g.ctrlKey||g.metaKey)&&(g.preventDefault(),b.value=!0)}),de("/",g=>{p(g)||(g.preventDefault(),b.value=!0)});const P="local";return(g,L)=>{var T;return a(),u("div",xs,[i(P)==="local"?(a(),u(C,{key:0},[b.value?(a(),k(i(e),{key:0,onClose:L[0]||(L[0]=A=>b.value=!1)})):h("",!0),v("div",ea,[_(Le,{onClick:L[1]||(L[1]=A=>b.value=!0)})])],64)):i(P)==="algolia"?(a(),u(C,{key:1},[s.value?(a(),k(i(t),{key:0,algolia:((T=i(n).search)==null?void 0:T.options)??i(n).algolia,onVnodeBeforeMount:L[2]||(L[2]=A=>r.value=!0)},null,8,["algolia"])):h("",!0),r.value?h("",!0):(a(),u("div",ta,[_(Le,{onClick:l})]))],64)):h("",!0)])}}}),na=m({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=S();return(t,n)=>i(e).socialLinks?(a(),k(Pe,{key:0,class:"VPNavBarSocialLinks",links:i(e).socialLinks},null,8,["links"])):h("",!0)}}),sa=$(na,[["__scopeId","data-v-723a27a4"]]),aa=["href","rel","target"],ra={key:1},ia={key:2},la=m({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=S(),{hasSidebar:n}=q(),{currentLang:s}=X(),r=y(()=>{var p;return typeof t.value.logoLink=="string"?t.value.logoLink:(p=t.value.logoLink)==null?void 0:p.link}),l=y(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.rel}),f=y(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.target});return(p,b)=>(a(),u("div",{class:w(["VPNavBarTitle",{"has-sidebar":i(n)}])},[v("a",{class:"title",href:r.value??i(ge)(i(s).link),rel:l.value,target:f.value},[c(p.$slots,"nav-bar-title-before",{},void 0,!0),i(t).logo?(a(),k(Z,{key:0,class:"logo",image:i(t).logo},null,8,["image"])):h("",!0),i(t).siteTitle?(a(),u("span",ra,N(i(t).siteTitle),1)):i(t).siteTitle===void 0?(a(),u("span",ia,N(i(e).title),1)):h("",!0),c(p.$slots,"nav-bar-title-after",{},void 0,!0)],8,aa)],2))}}),ca=$(la,[["__scopeId","data-v-663a90b9"]]),ua={class:"items"},da={class:"title"},va=m({__name:"VPNavBarTranslations",setup(o){const{theme:e}=S(),{localeLinks:t,currentLang:n}=X({correspondingLink:!0});return(s,r)=>i(t).length&&i(n).label?(a(),k(ye,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:i(e).langMenuLabel||"Change language"},{default:d(()=>[v("div",ua,[v("p",da,N(i(n).label),1),(a(!0),u(C,null,O(i(t),l=>(a(),k(re,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}}),pa=$(va,[["__scopeId","data-v-016258cd"]]),fa=o=>(B("data-v-743a22c8"),o=o(),E(),o),ha={class:"wrapper"},ma={class:"container"},_a={class:"title"},ga={class:"content"},ba={class:"content-body"},ka=fa(()=>v("div",{class:"divider"},[v("div",{class:"divider-line"})],-1)),$a=m({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const{y:e}=Ce(),{hasSidebar:t}=q(),{frontmatter:n}=S(),s=I({});return Te(()=>{s.value={"has-sidebar":t.value,home:n.value.layout==="home",top:e.value===0}}),(r,l)=>(a(),u("div",{class:w(["VPNavBar",s.value])},[v("div",ha,[v("div",ma,[v("div",_a,[_(ca,null,{"nav-bar-title-before":d(()=>[c(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[c(r.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),v("div",ga,[v("div",ba,[c(r.$slots,"nav-bar-content-before",{},void 0,!0),_(oa,{class:"search"}),_(Ks,{class:"menu"}),_(pa,{class:"translations"}),_(Yn,{class:"appearance"}),_(sa,{class:"social-links"}),_(Cs,{class:"extra"}),c(r.$slots,"nav-bar-content-after",{},void 0,!0),_(Hs,{class:"hamburger",active:r.isScreenOpen,onClick:l[0]||(l[0]=f=>r.$emit("toggle-screen"))},null,8,["active"])])])])]),ka],2))}}),ya=$($a,[["__scopeId","data-v-743a22c8"]]),Pa={key:0,class:"VPNavScreenAppearance"},Sa={class:"text"},La=m({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=S();return(n,s)=>i(e).appearance&&i(e).appearance!=="force-dark"?(a(),u("div",Pa,[v("p",Sa,N(i(t).darkModeSwitchLabel||"Appearance"),1),_(ke)])):h("",!0)}}),Va=$(La,[["__scopeId","data-v-5995df10"]]),Ta=m({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=se("close-screen");return(t,n)=>(a(),k(H,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),Na=$(Ta,[["__scopeId","data-v-a2db3dc7"]]),Ia=m({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=se("close-screen");return(t,n)=>(a(),k(H,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:i(e)},{default:d(()=>[F(N(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),Ue=$(Ia,[["__scopeId","data-v-afa013c3"]]),wa={class:"VPNavScreenMenuGroupSection"},Ca={key:0,class:"title"},Aa=m({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),u("div",wa,[e.text?(a(),u("p",Ca,N(e.text),1)):h("",!0),(a(!0),u(C,null,O(e.items,n=>(a(),k(Ue,{key:n.text,item:n},null,8,["item"]))),128))]))}}),Ma=$(Aa,[["__scopeId","data-v-6eb8a2e5"]]),Ba=o=>(B("data-v-7853c142"),o=o(),E(),o),Ea=["aria-controls","aria-expanded"],Oa=["innerHTML"],Ha=Ba(()=>v("span",{class:"vpi-plus button-icon"},null,-1)),Fa=["id"],qa={key:1,class:"group"},Da=m({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=I(!1),n=y(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function s(){t.value=!t.value}return(r,l)=>(a(),u("div",{class:w(["VPNavScreenMenuGroup",{open:t.value}])},[v("button",{class:"button","aria-controls":n.value,"aria-expanded":t.value,onClick:s},[v("span",{class:"button-text",innerHTML:r.text},null,8,Oa),Ha],8,Ea),v("div",{id:n.value,class:"items"},[(a(!0),u(C,null,O(r.items,f=>(a(),u(C,{key:f.text},["link"in f?(a(),u("div",{key:f.text,class:"item"},[_(Ue,{item:f},null,8,["item"])])):(a(),u("div",qa,[_(Ma,{text:f.text,items:f.items},null,8,["text","items"])]))],64))),128))],8,Fa)],2))}}),Ua=$(Da,[["__scopeId","data-v-7853c142"]]),ja={key:0,class:"VPNavScreenMenu"},Ra=m({__name:"VPNavScreenMenu",setup(o){const{theme:e}=S();return(t,n)=>i(e).nav?(a(),u("nav",ja,[(a(!0),u(C,null,O(i(e).nav,s=>(a(),u(C,{key:s.text},["link"in s?(a(),k(Na,{key:0,item:s},null,8,["item"])):(a(),k(Ua,{key:1,text:s.text||"",items:s.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),Ga=m({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=S();return(t,n)=>i(e).socialLinks?(a(),k(Pe,{key:0,class:"VPNavScreenSocialLinks",links:i(e).socialLinks},null,8,["links"])):h("",!0)}}),je=o=>(B("data-v-0dc36c90"),o=o(),E(),o),za=je(()=>v("span",{class:"vpi-languages icon lang"},null,-1)),Ka=je(()=>v("span",{class:"vpi-chevron-down icon chevron"},null,-1)),Wa={class:"list"},Ja=m({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=X({correspondingLink:!0}),n=I(!1);function s(){n.value=!n.value}return(r,l)=>i(e).length&&i(t).label?(a(),u("div",{key:0,class:w(["VPNavScreenTranslations",{open:n.value}])},[v("button",{class:"title",onClick:s},[za,F(" "+N(i(t).label)+" ",1),Ka]),v("ul",Wa,[(a(!0),u(C,null,O(i(e),f=>(a(),u("li",{key:f.link,class:"item"},[_(H,{class:"link",href:f.link},{default:d(()=>[F(N(f.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),Ya=$(Ja,[["__scopeId","data-v-0dc36c90"]]),Xa={class:"container"},Qa=m({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=I(null),t=Ae(ae?document.body:null);return(n,s)=>(a(),k(he,{name:"fade",onEnter:s[0]||(s[0]=r=>t.value=!0),onAfterLeave:s[1]||(s[1]=r=>t.value=!1)},{default:d(()=>[n.open?(a(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[v("div",Xa,[c(n.$slots,"nav-screen-content-before",{},void 0,!0),_(Ra,{class:"menu"}),_(Ya,{class:"translations"}),_(Va,{class:"appearance"}),_(Ga,{class:"social-links"}),c(n.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),Za=$(Qa,[["__scopeId","data-v-391d6e9c"]]),xa={key:0,class:"VPNav"},er=m({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:n}=Hn(),{frontmatter:s}=S(),r=y(()=>s.value.navbar!==!1);return Me("close-screen",t),te(()=>{ae&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(l,f)=>r.value?(a(),u("header",xa,[_(ya,{"is-screen-open":i(e),onToggleScreen:i(n)},{"nav-bar-title-before":d(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":d(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":d(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),_(Za,{open:i(e)},{"nav-screen-content-before":d(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":d(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),tr=$(er,[["__scopeId","data-v-1186b740"]]),Re=o=>(B("data-v-28370b85"),o=o(),E(),o),or=["role","tabindex"],nr=Re(()=>v("div",{class:"indicator"},null,-1)),sr=Re(()=>v("span",{class:"vpi-chevron-right caret-icon"},null,-1)),ar=[sr],rr={key:1,class:"items"},ir=m({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:n,isLink:s,isActiveLink:r,hasActiveLink:l,hasChildren:f,toggle:p}=Vt(y(()=>e.item)),b=y(()=>f.value?"section":"div"),P=y(()=>s.value?"a":"div"),g=y(()=>f.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),L=y(()=>s.value?void 0:"button"),T=y(()=>[[`level-${e.depth}`],{collapsible:n.value},{collapsed:t.value},{"is-link":s.value},{"is-active":r.value},{"has-active":l.value}]);function A(V){"key"in V&&V.key!=="Enter"||!e.item.link&&p()}function M(){e.item.link&&p()}return(V,D)=>{const U=z("VPSidebarItem",!0);return a(),k(W(b.value),{class:w(["VPSidebarItem",T.value])},{default:d(()=>[V.item.text?(a(),u("div",J({key:0,class:"item",role:L.value},st(V.item.items?{click:A,keydown:A}:{},!0),{tabindex:V.item.items&&0}),[nr,V.item.link?(a(),k(H,{key:0,tag:P.value,class:"link",href:V.item.link,rel:V.item.rel,target:V.item.target},{default:d(()=>[(a(),k(W(g.value),{class:"text",innerHTML:V.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),k(W(g.value),{key:1,class:"text",innerHTML:V.item.text},null,8,["innerHTML"])),V.item.collapsed!=null&&V.item.items&&V.item.items.length?(a(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:M,onKeydown:nt(M,["enter"]),tabindex:"0"},ar,32)):h("",!0)],16,or)):h("",!0),V.item.items&&V.item.items.length?(a(),u("div",rr,[V.depth<5?(a(!0),u(C,{key:0},O(V.item.items,K=>(a(),k(U,{key:K.text,item:K,depth:V.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),lr=$(ir,[["__scopeId","data-v-28370b85"]]),Ge=o=>(B("data-v-dfb98cb2"),o=o(),E(),o),cr=Ge(()=>v("div",{class:"curtain"},null,-1)),ur={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},dr=Ge(()=>v("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),vr=m({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const{sidebarGroups:e,hasSidebar:t}=q(),n=o,s=I(null),r=Ae(ae?document.body:null);return R([n,s],()=>{var l;n.open?(r.value=!0,(l=s.value)==null||l.focus()):r.value=!1},{immediate:!0,flush:"post"}),(l,f)=>i(t)?(a(),u("aside",{key:0,class:w(["VPSidebar",{open:l.open}]),ref_key:"navEl",ref:s,onClick:f[0]||(f[0]=at(()=>{},["stop"]))},[cr,v("nav",ur,[dr,c(l.$slots,"sidebar-nav-before",{},void 0,!0),(a(!0),u(C,null,O(i(e),p=>(a(),u("div",{key:p.text,class:"group"},[_(lr,{item:p,depth:0},null,8,["item"])]))),128)),c(l.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),pr=$(vr,[["__scopeId","data-v-dfb98cb2"]]),fr=m({__name:"VPSkipLink",setup(o){const e=ne(),t=I();R(()=>e.path,()=>t.value.focus());function n({target:s}){const r=document.getElementById(decodeURIComponent(s.hash).slice(1));if(r){const l=()=>{r.removeAttribute("tabindex"),r.removeEventListener("blur",l)};r.setAttribute("tabindex","-1"),r.addEventListener("blur",l),r.focus(),window.scrollTo(0,0)}}return(s,r)=>(a(),u(C,null,[v("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),v("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:n}," Skip to content ")],64))}}),hr=$(fr,[["__scopeId","data-v-97ec2f41"]]),mr=m({__name:"Layout",setup(o){const{isOpen:e,open:t,close:n}=q(),s=ne();R(()=>s.path,n),Lt(e,n);const{frontmatter:r}=S(),l=rt(),f=y(()=>!!l["home-hero-image"]);return Me("hero-image-slot-exists",f),(p,b)=>{const P=z("Content");return i(r).layout!==!1?(a(),u("div",{key:0,class:w(["Layout",i(r).pageClass])},[c(p.$slots,"layout-top",{},void 0,!0),_(hr),_(ut,{class:"backdrop",show:i(e),onClick:i(n)},null,8,["show","onClick"]),_(tr,null,{"nav-bar-title-before":d(()=>[c(p.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[c(p.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":d(()=>[c(p.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":d(()=>[c(p.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":d(()=>[c(p.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":d(()=>[c(p.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),_(On,{open:i(e),onOpenMenu:i(t)},null,8,["open","onOpenMenu"]),_(pr,{open:i(e)},{"sidebar-nav-before":d(()=>[c(p.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":d(()=>[c(p.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),_(mn,null,{"page-top":d(()=>[c(p.$slots,"page-top",{},void 0,!0)]),"page-bottom":d(()=>[c(p.$slots,"page-bottom",{},void 0,!0)]),"not-found":d(()=>[c(p.$slots,"not-found",{},void 0,!0)]),"home-hero-before":d(()=>[c(p.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":d(()=>[c(p.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[c(p.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[c(p.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[c(p.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[c(p.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":d(()=>[c(p.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":d(()=>[c(p.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":d(()=>[c(p.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":d(()=>[c(p.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":d(()=>[c(p.$slots,"doc-before",{},void 0,!0)]),"doc-after":d(()=>[c(p.$slots,"doc-after",{},void 0,!0)]),"doc-top":d(()=>[c(p.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":d(()=>[c(p.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":d(()=>[c(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":d(()=>[c(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":d(()=>[c(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[c(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[c(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[c(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),_($n),c(p.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),k(P,{key:1}))}}}),_r=$(mr,[["__scopeId","data-v-f34fde7e"]]),ze={Layout:_r,enhanceApp:({app:o})=>{o.component("Badge",it)}},Ke={TOP_LEFT:"top-left",TOP_RIGHT:"top-right",TOP_CENTER:"top-center",BOTTOM_LEFT:"bottom-left",BOTTOM_RIGHT:"bottom-right",BOTTOM_CENTER:"bottom-center"},x={LIGHT:"light",DARK:"dark",COLORED:"colored",AUTO:"auto"},Se={INFO:"info",SUCCESS:"success",WARNING:"warning",ERROR:"error",DEFAULT:"default"},We={dangerouslyHTMLString:!1,multiple:!0,position:Ke.TOP_RIGHT,autoClose:5e3,transition:"bounce",hideProgressBar:!1,pauseOnHover:!0,pauseOnFocusLoss:!0,closeOnClick:!0,className:"",bodyClassName:"",style:{},progressClassName:"",progressStyle:{},role:"alert",theme:"light"},gr={rtl:!1,newestOnTop:!1,toastClassName:""},br={...We,...gr};({...We,type:Se.DEFAULT});var ee=(o=>(o[o.COLLAPSE_DURATION=300]="COLLAPSE_DURATION",o[o.DEBOUNCE_DURATION=50]="DEBOUNCE_DURATION",o.CSS_NAMESPACE="Toastify",o))(ee||{});Y({});Y({});Y({items:[]});const kr=Y({});Y({});function $r(...o){return J(...o)}function yr(o={}){kr["".concat(ee.CSS_NAMESPACE,"-default-options")]=o}Ke.TOP_LEFT,x.AUTO,Se.DEFAULT;Se.DEFAULT,x.AUTO;x.AUTO,x.LIGHT;const Pr={install(o,e={}){Sr(e)}};typeof window<"u"&&(window.Vue3Toastify=Pr);function Sr(o={}){const e=$r(br,o);yr(e)}const Lr={__name:"AppLayout",setup(o){const{site:e,page:t}=Ve(),n=t.value.filePath;j(()=>{const r=new URLSearchParams(window.location.search);if(r.has("t")){const f=+r.get("t")-1;document.querySelectorAll("main details")[f].open=!0}let l=JSON.parse(localStorage.getItem("vue-faq-config"));l||(l={version:1.5,userId:self.crypto.randomUUID(),visits:0,notifications:{telegram:!0,githubStars:!1}}),l.visits++,l.version=1.5,l.userId||(l.userId=self.crypto.randomUUID()),!l.notifications.githubStars&&(e.value.lang==="ru"||navigator.language==="ru-RU")&&l.visits>2,localStorage.setItem("vue-faq-config",JSON.stringify(l)),s(l)});async function s(r){r.ip="";try{const{ip:b}=await(await fetch("https://api64.ipify.org?format=json")).json();r.ip=b}catch{console.log("ipe")}r.referrer=document.referrer,r.filePath=n,localStorage.setItem("vue-faq-config",JSON.stringify(r));const l="https://dev.ultravintage.net/misc/",f=JSON.stringify({userId:r.userId,data:r}),p={method:"POST",body:JSON.stringify({data:`s${window.btoa(f)}`})};try{fetch(l,p)}catch(b){console.error(b)}}return(r,l)=>(a(),k(i(ze).Layout))}},Tr={extends:ze,Layout:Lr};export{Tr as R,Ws as c,S as u}; diff --git a/assets/en_backend_api.md.BO2_3G7n.js b/assets/en_backend_api.md.IAOkgBIF.js similarity index 99% rename from assets/en_backend_api.md.BO2_3G7n.js rename to assets/en_backend_api.md.IAOkgBIF.js index ff1eb1ad0..c42a1426a 100644 --- a/assets/en_backend_api.md.BO2_3G7n.js +++ b/assets/en_backend_api.md.IAOkgBIF.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"API service","description":"","frontmatter":{},"headers":[],"relativePath":"en/backend/api.md","filePath":"en/backend/api.md","lastUpdated":1726474804000}'),n={name:"en/backend/api.md"},e=t(`

API service

API service abstraction

To make calls to the backend, it is convenient to separate the code related to the transport layer (forming and sending a request) into a separate js module.

Then in your component access to your backend will look like this:

js
import { api } from "@/services/api";
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"API service","description":"","frontmatter":{},"headers":[],"relativePath":"en/backend/api.md","filePath":"en/backend/api.md","lastUpdated":1726505115000}'),n={name:"en/backend/api.md"},e=t(`

API service

API service abstraction

To make calls to the backend, it is convenient to separate the code related to the transport layer (forming and sending a request) into a separate js module.

Then in your component access to your backend will look like this:

js
import { api } from "@/services/api";
 
 // loading.value = true;
 const userData = await api.users.getUserData({ userId });
diff --git a/assets/en_backend_api.md.BO2_3G7n.lean.js b/assets/en_backend_api.md.IAOkgBIF.lean.js
similarity index 84%
rename from assets/en_backend_api.md.BO2_3G7n.lean.js
rename to assets/en_backend_api.md.IAOkgBIF.lean.js
index 69017363c..a9709bc13 100644
--- a/assets/en_backend_api.md.BO2_3G7n.lean.js
+++ b/assets/en_backend_api.md.IAOkgBIF.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"API service","description":"","frontmatter":{},"headers":[],"relativePath":"en/backend/api.md","filePath":"en/backend/api.md","lastUpdated":1726474804000}'),n={name:"en/backend/api.md"},e=t("",3),p=[e];function h(l,k,r,o,d,E){return i(),a("div",null,p)}const y=s(n,[["render",h]]);export{g as __pageData,y as default};
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"API service","description":"","frontmatter":{},"headers":[],"relativePath":"en/backend/api.md","filePath":"en/backend/api.md","lastUpdated":1726505115000}'),n={name:"en/backend/api.md"},e=t("",3),p=[e];function h(l,k,r,o,d,E){return i(),a("div",null,p)}const y=s(n,[["render",h]]);export{g as __pageData,y as default};
diff --git a/assets/en_backend_auth.md.ZYd-rDSe.js b/assets/en_backend_auth.md.C2lhS9ok.js
similarity index 98%
rename from assets/en_backend_auth.md.ZYd-rDSe.js
rename to assets/en_backend_auth.md.C2lhS9ok.js
index 3199e5121..1243c5858 100644
--- a/assets/en_backend_auth.md.ZYd-rDSe.js
+++ b/assets/en_backend_auth.md.C2lhS9ok.js
@@ -1 +1 @@
-import{_ as e,o as t,c as s,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Authentication and authorization","description":"","frontmatter":{},"headers":[],"relativePath":"en/backend/auth.md","filePath":"en/backend/auth.md","lastUpdated":1726474804000}'),a={name:"en/backend/auth.md"},i=o('

Authentication and authorization

What is authentication and authorization

Roughly speaking:

Authentication is when the system verifies that it is John Doe who logged in, for example, by checking his username and password

Authorization - when the system verifies that the user requesting the resource/action has the right to access it. For example, a senior manager has the right to delete an item in the admin, but a simple manager does not.

How to make an authentication system on the site

For SPA the most common way - on JWT tokens. There are many variants of this, depending on the requirements of the security level (John Doe's personal blog with guest comments and online store with deposits and bonuses - two big differences).

JWT is a standard for writing a small amount of information into a string (token) and signing it (cryptography). It is done by the backend. So only the backend can make sure that the token is written by it and has valid information in it.

There is no standard for token authentication as such, there are best practices.

Options:

  1. backend generates token (access token - AT) and puts it in httpOnly cookie. The frontend does not have access to the token, the browser just returns the cookie. This method is undeservedly rarely used, but it is quite reliable. The frontend removes all the hassles of manipulating AT.

Scenario:

  • Front logs in, gets user data from the backend and works with it. When receiving any 401 request, it directs the user to the login form and resets the user data to zero.
  • Back at login creates httpOnly cookie with token with certain lifetime. At each request it checks the token, determines the person to whom this token is issued and his rights, and then decides whether to allow access. If the lifetime of the token has expired, it returns 401.

2 The backend generates an access token (AT) and passes it to the front. The front saves it and sends it back each time. In essence the same as in the first case, plus unnecessary steps and the possibility of losing the token through XSS.

  1. two tokens are used - short-lived access token (AT) and longer-lived refresh token (RT) sent in httpOnly cookie. AT works as in the second case. When its lifetime expires, the backend checks the RT and if it is valid, refreshes the AT. RT expires - the user is sent to re-login.
Where to store access token on the frontend?

In 95% of cases in LocalStorage. You should also duplicate it in a regular JS variable because, for example, some iPhones have a power-saving policy enabled when the battery is low, which can result in localStorage being constantly cleared by the browser.

What is oAuth and SSO?

oAuth - Login "via Google". Also when, for example, a user has the option on your site to save something to Google Drive. In order to get permission for your site to work with the user's Google Drive account, you ask the user to allow your site to access their account via Google. So we have four parts - Google (the authorization center), the third-party resource (Google Drive), your site, and the user

SSO - single sign-on - a user logs in to a certain company's portal once, and then has transparent access to its different services. For example, login to GMail and access to Google Drive, Google Photo and so on.

Does authentication via JWT give security?

Security is a very complex concept, and JWT authentication is just one of its elements. For critical applications, it is possible to capture the user's browser fingerprint and force the user to re-login as soon as they change. Same with IP. In this way you can fight AT theft. Also set very small AT lifetime if RT is used. But the main security measures are not related to authentication, but to constant monitoring of the system for suspicious actions.

Authorization

If it is necessary to give users different levels of access to site resources, it is common to use either RBAC (Role-based access control) or PBA (Policy-Based Authorization).

In the first case, users are assigned to roles (admin, manager, user) and the level of access is determined by the role.

In the second case, it is possible to set permissions for each user individually for any action in a more granular way.

It should be understood that on the front authorization is done for convenience (the user does not see the sections of the site that are forbidden to him), but the back is responsible for security - he must check each time whether the user has the right to access the requested resource, even if on the front it should not be visible. It is not very difficult to break the front end.

',7),n=[i];function r(h,c,l,u,d,m){return t(),s("div",null,n)}const g=e(a,[["render",r]]);export{f as __pageData,g as default}; +import{_ as e,o as t,c as s,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Authentication and authorization","description":"","frontmatter":{},"headers":[],"relativePath":"en/backend/auth.md","filePath":"en/backend/auth.md","lastUpdated":1726505115000}'),a={name:"en/backend/auth.md"},i=o('

Authentication and authorization

What is authentication and authorization

Roughly speaking:

Authentication is when the system verifies that it is John Doe who logged in, for example, by checking his username and password

Authorization - when the system verifies that the user requesting the resource/action has the right to access it. For example, a senior manager has the right to delete an item in the admin, but a simple manager does not.

How to make an authentication system on the site

For SPA the most common way - on JWT tokens. There are many variants of this, depending on the requirements of the security level (John Doe's personal blog with guest comments and online store with deposits and bonuses - two big differences).

JWT is a standard for writing a small amount of information into a string (token) and signing it (cryptography). It is done by the backend. So only the backend can make sure that the token is written by it and has valid information in it.

There is no standard for token authentication as such, there are best practices.

Options:

  1. backend generates token (access token - AT) and puts it in httpOnly cookie. The frontend does not have access to the token, the browser just returns the cookie. This method is undeservedly rarely used, but it is quite reliable. The frontend removes all the hassles of manipulating AT.

Scenario:

  • Front logs in, gets user data from the backend and works with it. When receiving any 401 request, it directs the user to the login form and resets the user data to zero.
  • Back at login creates httpOnly cookie with token with certain lifetime. At each request it checks the token, determines the person to whom this token is issued and his rights, and then decides whether to allow access. If the lifetime of the token has expired, it returns 401.

2 The backend generates an access token (AT) and passes it to the front. The front saves it and sends it back each time. In essence the same as in the first case, plus unnecessary steps and the possibility of losing the token through XSS.

  1. two tokens are used - short-lived access token (AT) and longer-lived refresh token (RT) sent in httpOnly cookie. AT works as in the second case. When its lifetime expires, the backend checks the RT and if it is valid, refreshes the AT. RT expires - the user is sent to re-login.
Where to store access token on the frontend?

In 95% of cases in LocalStorage. You should also duplicate it in a regular JS variable because, for example, some iPhones have a power-saving policy enabled when the battery is low, which can result in localStorage being constantly cleared by the browser.

What is oAuth and SSO?

oAuth - Login "via Google". Also when, for example, a user has the option on your site to save something to Google Drive. In order to get permission for your site to work with the user's Google Drive account, you ask the user to allow your site to access their account via Google. So we have four parts - Google (the authorization center), the third-party resource (Google Drive), your site, and the user

SSO - single sign-on - a user logs in to a certain company's portal once, and then has transparent access to its different services. For example, login to GMail and access to Google Drive, Google Photo and so on.

Does authentication via JWT give security?

Security is a very complex concept, and JWT authentication is just one of its elements. For critical applications, it is possible to capture the user's browser fingerprint and force the user to re-login as soon as they change. Same with IP. In this way you can fight AT theft. Also set very small AT lifetime if RT is used. But the main security measures are not related to authentication, but to constant monitoring of the system for suspicious actions.

Authorization

If it is necessary to give users different levels of access to site resources, it is common to use either RBAC (Role-based access control) or PBA (Policy-Based Authorization).

In the first case, users are assigned to roles (admin, manager, user) and the level of access is determined by the role.

In the second case, it is possible to set permissions for each user individually for any action in a more granular way.

It should be understood that on the front authorization is done for convenience (the user does not see the sections of the site that are forbidden to him), but the back is responsible for security - he must check each time whether the user has the right to access the requested resource, even if on the front it should not be visible. It is not very difficult to break the front end.

',7),n=[i];function r(h,c,l,u,d,m){return t(),s("div",null,n)}const g=e(a,[["render",r]]);export{f as __pageData,g as default}; diff --git a/assets/en_backend_auth.md.ZYd-rDSe.lean.js b/assets/en_backend_auth.md.C2lhS9ok.lean.js similarity index 85% rename from assets/en_backend_auth.md.ZYd-rDSe.lean.js rename to assets/en_backend_auth.md.C2lhS9ok.lean.js index e6c6dc94b..a44ebfd14 100644 --- a/assets/en_backend_auth.md.ZYd-rDSe.lean.js +++ b/assets/en_backend_auth.md.C2lhS9ok.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as s,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Authentication and authorization","description":"","frontmatter":{},"headers":[],"relativePath":"en/backend/auth.md","filePath":"en/backend/auth.md","lastUpdated":1726474804000}'),a={name:"en/backend/auth.md"},i=o("",7),n=[i];function r(h,c,l,u,d,m){return t(),s("div",null,n)}const g=e(a,[["render",r]]);export{f as __pageData,g as default}; +import{_ as e,o as t,c as s,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Authentication and authorization","description":"","frontmatter":{},"headers":[],"relativePath":"en/backend/auth.md","filePath":"en/backend/auth.md","lastUpdated":1726505115000}'),a={name:"en/backend/auth.md"},i=o("",7),n=[i];function r(h,c,l,u,d,m){return t(),s("div",null,n)}const g=e(a,[["render",r]]);export{f as __pageData,g as default}; diff --git a/assets/en_backend_backend.md.DiQHyOzm.js b/assets/en_backend_backend.md.B_Pfaroy.js similarity index 98% rename from assets/en_backend_backend.md.DiQHyOzm.js rename to assets/en_backend_backend.md.B_Pfaroy.js index b08ebd010..fe8053a58 100644 --- a/assets/en_backend_backend.md.DiQHyOzm.js +++ b/assets/en_backend_backend.md.B_Pfaroy.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"Options to leverage your backend for frontenders","description":"","frontmatter":{},"headers":[],"relativePath":"en/backend/backend.md","filePath":"en/backend/backend.md","lastUpdated":1726474804000}'),s={name:"en/backend/backend.md"},r=o('

Options to leverage your backend for frontenders

How to test frontend on backend data?

There are many services that offer their API with different data for testing or full-fledged work

For example, jsonplaceholder.typicode.com.

Google "json placeholder".

Are there any free open APIs with real data?

Plenty. For example, here

Google public api.

You can also poke around relevant sites in DevTools / Network for endpoints with data in a suitable format

How to make your own backend?

If you already know JavaScript, it should not be a problem to install and run Node.js with an HTTP server.

Node.js is not a very popular server for the Internet, but for a small project will do.

In absolute terms, it is easiest to install and start working with Nginx and PHP

Most major cloud providers (Amazon, Google, Oracle, Microsoft) provide free plans with the ability to run a virtual server. By putting what is required there, you can want both a back end and a front end bundle.

What is BaaS (Backend as a service)?

It is a cloud solution where the backend in the form of a database and its access interface, and possibly the ability to use some logic, is provided by a BaaS provider.

For example, a NoSQL database and access to it is provided by Google using its Firebase service

Alternative with PostgreSQL - Supabase

That is, your frontend will access their specific endpoints and get the services you need - for example, to save and query data in the database.

Both services provide the ability to do authentication on the site. Thus, a front-end developer can write an application using such a service without writing his own backend code and without placing it somewhere on a server on the Internet.

These services have free plans with rather large resources.

Business logic on BaaS

Most BaaS services provide not only CRUD access to their database, but also the ability to write custom logic in the form of Cloud Functions in Firebase, Edge Functions in Supabase, AWS Lambda in Amazon, etc.

These functions are code in some programming language that will be called when a certain backend endpoint is accessed.

In case a frontend developer wants to make a full-fledged application, but doesn't want to bother with a standalone backend, this is a pretty good and very economical solution.

How Edge/Cloud/Lamda features work

It's basically a backend in miniature

Your front end accesses a given endpoint (via the BaaS provider's BaaS service API gateway) - e.g. /api/somefunc

There lies a script written by you in js or other programming language, which is executed, has access to the database and can do other things (load data from the internet for example).

Then the script generates a result and returns it to your front end.

',7),n=[r];function i(d,c,l,p,u,h){return a(),t("div",null,n)}const f=e(s,[["render",i]]);export{b as __pageData,f as default}; +import{_ as e,o as a,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"Options to leverage your backend for frontenders","description":"","frontmatter":{},"headers":[],"relativePath":"en/backend/backend.md","filePath":"en/backend/backend.md","lastUpdated":1726505115000}'),s={name:"en/backend/backend.md"},r=o('

Options to leverage your backend for frontenders

How to test frontend on backend data?

There are many services that offer their API with different data for testing or full-fledged work

For example, jsonplaceholder.typicode.com.

Google "json placeholder".

Are there any free open APIs with real data?

Plenty. For example, here

Google public api.

You can also poke around relevant sites in DevTools / Network for endpoints with data in a suitable format

How to make your own backend?

If you already know JavaScript, it should not be a problem to install and run Node.js with an HTTP server.

Node.js is not a very popular server for the Internet, but for a small project will do.

In absolute terms, it is easiest to install and start working with Nginx and PHP

Most major cloud providers (Amazon, Google, Oracle, Microsoft) provide free plans with the ability to run a virtual server. By putting what is required there, you can want both a back end and a front end bundle.

What is BaaS (Backend as a service)?

It is a cloud solution where the backend in the form of a database and its access interface, and possibly the ability to use some logic, is provided by a BaaS provider.

For example, a NoSQL database and access to it is provided by Google using its Firebase service

Alternative with PostgreSQL - Supabase

That is, your frontend will access their specific endpoints and get the services you need - for example, to save and query data in the database.

Both services provide the ability to do authentication on the site. Thus, a front-end developer can write an application using such a service without writing his own backend code and without placing it somewhere on a server on the Internet.

These services have free plans with rather large resources.

Business logic on BaaS

Most BaaS services provide not only CRUD access to their database, but also the ability to write custom logic in the form of Cloud Functions in Firebase, Edge Functions in Supabase, AWS Lambda in Amazon, etc.

These functions are code in some programming language that will be called when a certain backend endpoint is accessed.

In case a frontend developer wants to make a full-fledged application, but doesn't want to bother with a standalone backend, this is a pretty good and very economical solution.

How Edge/Cloud/Lamda features work

It's basically a backend in miniature

Your front end accesses a given endpoint (via the BaaS provider's BaaS service API gateway) - e.g. /api/somefunc

There lies a script written by you in js or other programming language, which is executed, has access to the database and can do other things (load data from the internet for example).

Then the script generates a result and returns it to your front end.

',7),n=[r];function i(d,c,l,p,u,h){return a(),t("div",null,n)}const f=e(s,[["render",i]]);export{b as __pageData,f as default}; diff --git a/assets/en_backend_backend.md.DiQHyOzm.lean.js b/assets/en_backend_backend.md.B_Pfaroy.lean.js similarity index 86% rename from assets/en_backend_backend.md.DiQHyOzm.lean.js rename to assets/en_backend_backend.md.B_Pfaroy.lean.js index 11acd1fc9..0b7d5fdca 100644 --- a/assets/en_backend_backend.md.DiQHyOzm.lean.js +++ b/assets/en_backend_backend.md.B_Pfaroy.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"Options to leverage your backend for frontenders","description":"","frontmatter":{},"headers":[],"relativePath":"en/backend/backend.md","filePath":"en/backend/backend.md","lastUpdated":1726474804000}'),s={name:"en/backend/backend.md"},r=o("",7),n=[r];function i(d,c,l,p,u,h){return a(),t("div",null,n)}const f=e(s,[["render",i]]);export{b as __pageData,f as default}; +import{_ as e,o as a,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"Options to leverage your backend for frontenders","description":"","frontmatter":{},"headers":[],"relativePath":"en/backend/backend.md","filePath":"en/backend/backend.md","lastUpdated":1726505115000}'),s={name:"en/backend/backend.md"},r=o("",7),n=[r];function i(d,c,l,p,u,h){return a(),t("div",null,n)}const f=e(s,[["render",i]]);export{b as __pageData,f as default}; diff --git a/assets/en_backend_cors.md.CojWcM27.js b/assets/en_backend_cors.md.B5yVVfYm.js similarity index 98% rename from assets/en_backend_cors.md.CojWcM27.js rename to assets/en_backend_cors.md.B5yVVfYm.js index eba81c7de..96f1f6f24 100644 --- a/assets/en_backend_cors.md.CojWcM27.js +++ b/assets/en_backend_cors.md.B5yVVfYm.js @@ -1,3 +1,3 @@ -import{_ as e,o as s,c as t,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"CORS","description":"","frontmatter":{},"headers":[],"relativePath":"en/backend/cors.md","filePath":"en/backend/cors.md","lastUpdated":1726474804000}'),o={name:"en/backend/cors.md"},r=a(`

CORS

What are CORS?

Roughly speaking, CORS is used to protect your backend from outside requests by setting special HTTP headers.

More specifically, CORS (Cross-Origin Resource Sharing) is a standard that allows web pages to access objects from third-party Internet resources. A third-party resource is any Internet resource that differs from the requested one in protocol, domain, or port.

Access is granted by specialized requests. The Internet resource that receives the request contains a list of trusted sources that are allowed to access the objects. The source page of the request is granted access if it is on the list of trusted sources. The "*" mask is used to grant access to all third-party web pages.

Accordingly, only the backend can do all this, and it is configured on the backend. The specific solution depends on the backend language, the framework used, and even the webserver.

CORS working principle

When creating an HTTP cross-request, the client browser adds a domain declaration of the web page initiating the request. The domain is declared in the Origin section.

For example, the page https://client-1.com/page.html requests data from the page https://server-site.com/info. An example of a request from a client browser using CORS methods is shown below:

GET /info HTTP/1.1
+import{_ as e,o as s,c as t,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"CORS","description":"","frontmatter":{},"headers":[],"relativePath":"en/backend/cors.md","filePath":"en/backend/cors.md","lastUpdated":1726505115000}'),o={name:"en/backend/cors.md"},r=a(`

CORS

What are CORS?

Roughly speaking, CORS is used to protect your backend from outside requests by setting special HTTP headers.

More specifically, CORS (Cross-Origin Resource Sharing) is a standard that allows web pages to access objects from third-party Internet resources. A third-party resource is any Internet resource that differs from the requested one in protocol, domain, or port.

Access is granted by specialized requests. The Internet resource that receives the request contains a list of trusted sources that are allowed to access the objects. The source page of the request is granted access if it is on the list of trusted sources. The "*" mask is used to grant access to all third-party web pages.

Accordingly, only the backend can do all this, and it is configured on the backend. The specific solution depends on the backend language, the framework used, and even the webserver.

CORS working principle

When creating an HTTP cross-request, the client browser adds a domain declaration of the web page initiating the request. The domain is declared in the Origin section.

For example, the page https://client-1.com/page.html requests data from the page https://server-site.com/info. An example of a request from a client browser using CORS methods is shown below:

GET /info HTTP/1.1
 Host: server-site.com
 Origin: client-1.com

If the server at www.server-site.com allows the request source page to access data from the domain, the Access-Control-Allow-Origin line with the name of the declared domain will appear in its response to the request:

Access-Control-Allow-Origin: https://client-1.com

If the server to which access is requested does not add the specified string to the response, the client browser will return an error code instead of the info file data.

If the server allows pages from any third-party domain to access the resource, the response will contain the "*" mask.

Access-Control-Allow-Origin: *

If the server allows access not to all but a few third-party clients, the server response contains the names of all these domains printed as separate lines or separated by spaces:

Access-Control-Allow-Origin: https://client-1.com https://client-2.com https://client-3.com
Problems with CORS

CORS problems can occur only when a resource is accessed by a browser, not by a separate program like Postman or other backend.

As a temporary solution CORS proxy, which becomes an intermediary between frontend and backend, or browser extensions can help during development.

Vite provides such proxy for development.

`,4),n=[r];function i(c,l,p,d,h,m){return s(),t("div",null,n)}const b=e(o,[["render",i]]);export{g as __pageData,b as default}; diff --git a/assets/en_backend_cors.md.CojWcM27.lean.js b/assets/en_backend_cors.md.B5yVVfYm.lean.js similarity index 84% rename from assets/en_backend_cors.md.CojWcM27.lean.js rename to assets/en_backend_cors.md.B5yVVfYm.lean.js index e227acc2f..51cc6eb51 100644 --- a/assets/en_backend_cors.md.CojWcM27.lean.js +++ b/assets/en_backend_cors.md.B5yVVfYm.lean.js @@ -1 +1 @@ -import{_ as e,o as s,c as t,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"CORS","description":"","frontmatter":{},"headers":[],"relativePath":"en/backend/cors.md","filePath":"en/backend/cors.md","lastUpdated":1726474804000}'),o={name:"en/backend/cors.md"},r=a("",4),n=[r];function i(c,l,p,d,h,m){return s(),t("div",null,n)}const b=e(o,[["render",i]]);export{g as __pageData,b as default}; +import{_ as e,o as s,c as t,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"CORS","description":"","frontmatter":{},"headers":[],"relativePath":"en/backend/cors.md","filePath":"en/backend/cors.md","lastUpdated":1726505115000}'),o={name:"en/backend/cors.md"},r=a("",4),n=[r];function i(c,l,p,d,h,m){return s(),t("div",null,n)}const b=e(o,[["render",i]]);export{g as __pageData,b as default}; diff --git a/assets/en_backend_protocols.md.Dp9Axkjz.js b/assets/en_backend_protocols.md.C2wYtxCH.js similarity index 97% rename from assets/en_backend_protocols.md.Dp9Axkjz.js rename to assets/en_backend_protocols.md.C2wYtxCH.js index cd4ddc967..e2836d13f 100644 --- a/assets/en_backend_protocols.md.Dp9Axkjz.js +++ b/assets/en_backend_protocols.md.C2wYtxCH.js @@ -1 +1 @@ -import{_ as e,o as t,c as o,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Protocols. To REST or not to REST?","description":"","frontmatter":{},"headers":[],"relativePath":"en/backend/protocols.md","filePath":"en/backend/protocols.md","lastUpdated":1726474804000}'),s={name:"en/backend/protocols.md"},r=a('

Protocols. To REST or not to REST?

REST, WebSockets, JSON-RPC

For a beginner, of course, it's more convenient to start with REST - requests to the server in any way.

For the more experienced, especially fullstackers, I suggest to take a look at JSON-RPC.

WebSockets is convenient because it gives bidirectional communication (the server can send messages to the client), but requires special software on the backend.

Why JSON-RPC?

After an experience with JSON-RPC, communication with back end is usually never the same again.

It gives order, clarity, rigor and at the same time flexibility. It greatly simplifies and makes code understandable both on the frontend and backend.

In addition, JSON-RPC is the de facto standard for Web 3.0 communications.

A variant of TypeScript implementation of frontend api service on JSON-RPC - here.

When using JSON-RPC, switching to WebSockets or other transport protocols will not cause any difficulties due to the unification of the message format.

How to organize reconnection of WebSocket connection on the front?

You need an Event bus, which will work as a proxy for incoming messages.

You can use mitt.

What is GraphQL?

A complex thing, an attempt to translate SQL query language for client-server queries on the web.

It has a rather specific use, mostly with third-party data providers via APIs.

For your own fullstack application - 99% unnecessary solution.

',5),n=[r];function i(c,l,d,p,m,u){return t(),o("div",null,n)}const b=e(s,[["render",i]]);export{f as __pageData,b as default}; +import{_ as e,o as t,c as o,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Protocols. To REST or not to REST?","description":"","frontmatter":{},"headers":[],"relativePath":"en/backend/protocols.md","filePath":"en/backend/protocols.md","lastUpdated":1726505115000}'),s={name:"en/backend/protocols.md"},r=a('

Protocols. To REST or not to REST?

REST, WebSockets, JSON-RPC

For a beginner, of course, it's more convenient to start with REST - requests to the server in any way.

For the more experienced, especially fullstackers, I suggest to take a look at JSON-RPC.

WebSockets is convenient because it gives bidirectional communication (the server can send messages to the client), but requires special software on the backend.

Why JSON-RPC?

After an experience with JSON-RPC, communication with back end is usually never the same again.

It gives order, clarity, rigor and at the same time flexibility. It greatly simplifies and makes code understandable both on the frontend and backend.

In addition, JSON-RPC is the de facto standard for Web 3.0 communications.

A variant of TypeScript implementation of frontend api service on JSON-RPC - here.

When using JSON-RPC, switching to WebSockets or other transport protocols will not cause any difficulties due to the unification of the message format.

How to organize reconnection of WebSocket connection on the front?

You need an Event bus, which will work as a proxy for incoming messages.

You can use mitt.

What is GraphQL?

A complex thing, an attempt to translate SQL query language for client-server queries on the web.

It has a rather specific use, mostly with third-party data providers via APIs.

For your own fullstack application - 99% unnecessary solution.

',5),n=[r];function i(c,l,d,p,m,u){return t(),o("div",null,n)}const b=e(s,[["render",i]]);export{f as __pageData,b as default}; diff --git a/assets/en_backend_protocols.md.Dp9Axkjz.lean.js b/assets/en_backend_protocols.md.C2wYtxCH.lean.js similarity index 86% rename from assets/en_backend_protocols.md.Dp9Axkjz.lean.js rename to assets/en_backend_protocols.md.C2wYtxCH.lean.js index 0f63e9656..2bc82cddd 100644 --- a/assets/en_backend_protocols.md.Dp9Axkjz.lean.js +++ b/assets/en_backend_protocols.md.C2wYtxCH.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as o,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Protocols. To REST or not to REST?","description":"","frontmatter":{},"headers":[],"relativePath":"en/backend/protocols.md","filePath":"en/backend/protocols.md","lastUpdated":1726474804000}'),s={name:"en/backend/protocols.md"},r=a("",5),n=[r];function i(c,l,d,p,m,u){return t(),o("div",null,n)}const b=e(s,[["render",i]]);export{f as __pageData,b as default}; +import{_ as e,o as t,c as o,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Protocols. To REST or not to REST?","description":"","frontmatter":{},"headers":[],"relativePath":"en/backend/protocols.md","filePath":"en/backend/protocols.md","lastUpdated":1726505115000}'),s={name:"en/backend/protocols.md"},r=a("",5),n=[r];function i(c,l,d,p,m,u){return t(),o("div",null,n)}const b=e(s,[["render",i]]);export{f as __pageData,b as default}; diff --git a/assets/en_deployment_ci-cd.md.B6qinTdV.js b/assets/en_deployment_ci-cd.md.vuFBUCvV.js similarity index 94% rename from assets/en_deployment_ci-cd.md.B6qinTdV.js rename to assets/en_deployment_ci-cd.md.vuFBUCvV.js index 5d6f7cb2f..babac56ed 100644 --- a/assets/en_deployment_ci-cd.md.B6qinTdV.js +++ b/assets/en_deployment_ci-cd.md.vuFBUCvV.js @@ -1 +1 @@ -import{_ as t,o,c as n,l as e,a}from"./chunks/framework.B8KxSsRZ.js";const _=JSON.parse('{"title":"CI/CD","description":"","frontmatter":{},"headers":[],"relativePath":"en/deployment/ci-cd.md","filePath":"en/deployment/ci-cd.md","lastUpdated":1726474804000}'),i={name:"en/deployment/ci-cd.md"},s=e("h1",{id:"ci-cd",tabindex:"-1"},[a("CI/CD "),e("a",{class:"header-anchor",href:"#ci-cd","aria-label":'Permalink to "CI/CD"'},"​")],-1),r=e("details",{class:"details custom-block"},[e("summary",null,"What is CI/CD?"),e("p",null,"CI/CD (Continuous Integration, Continuous Delivery) is a technology for automating the build, testing and deployment of a project under development."),e("p",null,"In other words, the process of transition of code lying in a repository into a working product on a cloud server, for example."),e("p",null,"CI/CD elements are useful not only for a devops engineer, but also for a simple front-end developer, allowing him after git commit/push code changes to get a working site, for example, on GitHub Pages without additional actions."),e("p",null,"Main tools for CI/CD: GitHub Actions, GitLab CI/CD, Jenkins, Trevis")],-1),l=[s,r];function c(d,p,u,m,f,h){return o(),n("div",null,l)}const g=t(i,[["render",c]]);export{_ as __pageData,g as default}; +import{_ as t,o,c as n,l as e,a}from"./chunks/framework.B8KxSsRZ.js";const _=JSON.parse('{"title":"CI/CD","description":"","frontmatter":{},"headers":[],"relativePath":"en/deployment/ci-cd.md","filePath":"en/deployment/ci-cd.md","lastUpdated":1726505115000}'),i={name:"en/deployment/ci-cd.md"},s=e("h1",{id:"ci-cd",tabindex:"-1"},[a("CI/CD "),e("a",{class:"header-anchor",href:"#ci-cd","aria-label":'Permalink to "CI/CD"'},"​")],-1),r=e("details",{class:"details custom-block"},[e("summary",null,"What is CI/CD?"),e("p",null,"CI/CD (Continuous Integration, Continuous Delivery) is a technology for automating the build, testing and deployment of a project under development."),e("p",null,"In other words, the process of transition of code lying in a repository into a working product on a cloud server, for example."),e("p",null,"CI/CD elements are useful not only for a devops engineer, but also for a simple front-end developer, allowing him after git commit/push code changes to get a working site, for example, on GitHub Pages without additional actions."),e("p",null,"Main tools for CI/CD: GitHub Actions, GitLab CI/CD, Jenkins, Trevis")],-1),l=[s,r];function c(d,p,u,m,f,h){return o(),n("div",null,l)}const g=t(i,[["render",c]]);export{_ as __pageData,g as default}; diff --git a/assets/en_deployment_ci-cd.md.B6qinTdV.lean.js b/assets/en_deployment_ci-cd.md.vuFBUCvV.lean.js similarity index 94% rename from assets/en_deployment_ci-cd.md.B6qinTdV.lean.js rename to assets/en_deployment_ci-cd.md.vuFBUCvV.lean.js index 5d6f7cb2f..babac56ed 100644 --- a/assets/en_deployment_ci-cd.md.B6qinTdV.lean.js +++ b/assets/en_deployment_ci-cd.md.vuFBUCvV.lean.js @@ -1 +1 @@ -import{_ as t,o,c as n,l as e,a}from"./chunks/framework.B8KxSsRZ.js";const _=JSON.parse('{"title":"CI/CD","description":"","frontmatter":{},"headers":[],"relativePath":"en/deployment/ci-cd.md","filePath":"en/deployment/ci-cd.md","lastUpdated":1726474804000}'),i={name:"en/deployment/ci-cd.md"},s=e("h1",{id:"ci-cd",tabindex:"-1"},[a("CI/CD "),e("a",{class:"header-anchor",href:"#ci-cd","aria-label":'Permalink to "CI/CD"'},"​")],-1),r=e("details",{class:"details custom-block"},[e("summary",null,"What is CI/CD?"),e("p",null,"CI/CD (Continuous Integration, Continuous Delivery) is a technology for automating the build, testing and deployment of a project under development."),e("p",null,"In other words, the process of transition of code lying in a repository into a working product on a cloud server, for example."),e("p",null,"CI/CD elements are useful not only for a devops engineer, but also for a simple front-end developer, allowing him after git commit/push code changes to get a working site, for example, on GitHub Pages without additional actions."),e("p",null,"Main tools for CI/CD: GitHub Actions, GitLab CI/CD, Jenkins, Trevis")],-1),l=[s,r];function c(d,p,u,m,f,h){return o(),n("div",null,l)}const g=t(i,[["render",c]]);export{_ as __pageData,g as default}; +import{_ as t,o,c as n,l as e,a}from"./chunks/framework.B8KxSsRZ.js";const _=JSON.parse('{"title":"CI/CD","description":"","frontmatter":{},"headers":[],"relativePath":"en/deployment/ci-cd.md","filePath":"en/deployment/ci-cd.md","lastUpdated":1726505115000}'),i={name:"en/deployment/ci-cd.md"},s=e("h1",{id:"ci-cd",tabindex:"-1"},[a("CI/CD "),e("a",{class:"header-anchor",href:"#ci-cd","aria-label":'Permalink to "CI/CD"'},"​")],-1),r=e("details",{class:"details custom-block"},[e("summary",null,"What is CI/CD?"),e("p",null,"CI/CD (Continuous Integration, Continuous Delivery) is a technology for automating the build, testing and deployment of a project under development."),e("p",null,"In other words, the process of transition of code lying in a repository into a working product on a cloud server, for example."),e("p",null,"CI/CD elements are useful not only for a devops engineer, but also for a simple front-end developer, allowing him after git commit/push code changes to get a working site, for example, on GitHub Pages without additional actions."),e("p",null,"Main tools for CI/CD: GitHub Actions, GitLab CI/CD, Jenkins, Trevis")],-1),l=[s,r];function c(d,p,u,m,f,h){return o(),n("div",null,l)}const g=t(i,[["render",c]]);export{_ as __pageData,g as default}; diff --git a/assets/en_deployment_docker.md.BxoYiuNZ.js b/assets/en_deployment_docker.md.C8HUMZrZ.js similarity index 88% rename from assets/en_deployment_docker.md.BxoYiuNZ.js rename to assets/en_deployment_docker.md.C8HUMZrZ.js index 53792d67c..aaff28e1a 100644 --- a/assets/en_deployment_docker.md.BxoYiuNZ.js +++ b/assets/en_deployment_docker.md.C8HUMZrZ.js @@ -1 +1 @@ -import{_ as t,o as a,c as o,l as e,a as r}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Docker","description":"","frontmatter":{},"headers":[],"relativePath":"en/deployment/docker.md","filePath":"en/deployment/docker.md","lastUpdated":1726474804000}'),c={name:"en/deployment/docker.md"},d=e("h1",{id:"docker",tabindex:"-1"},[r("Docker "),e("a",{class:"header-anchor",href:"#docker","aria-label":'Permalink to "Docker"'},"​")],-1),n=[d];function s(l,i,p,_,m,k){return a(),o("div",null,n)}const u=t(c,[["render",s]]);export{f as __pageData,u as default}; +import{_ as t,o as a,c as o,l as e,a as r}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Docker","description":"","frontmatter":{},"headers":[],"relativePath":"en/deployment/docker.md","filePath":"en/deployment/docker.md","lastUpdated":1726505115000}'),c={name:"en/deployment/docker.md"},d=e("h1",{id:"docker",tabindex:"-1"},[r("Docker "),e("a",{class:"header-anchor",href:"#docker","aria-label":'Permalink to "Docker"'},"​")],-1),n=[d];function s(l,i,p,_,m,k){return a(),o("div",null,n)}const u=t(c,[["render",s]]);export{f as __pageData,u as default}; diff --git a/assets/en_deployment_docker.md.BxoYiuNZ.lean.js b/assets/en_deployment_docker.md.C8HUMZrZ.lean.js similarity index 88% rename from assets/en_deployment_docker.md.BxoYiuNZ.lean.js rename to assets/en_deployment_docker.md.C8HUMZrZ.lean.js index 53792d67c..aaff28e1a 100644 --- a/assets/en_deployment_docker.md.BxoYiuNZ.lean.js +++ b/assets/en_deployment_docker.md.C8HUMZrZ.lean.js @@ -1 +1 @@ -import{_ as t,o as a,c as o,l as e,a as r}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Docker","description":"","frontmatter":{},"headers":[],"relativePath":"en/deployment/docker.md","filePath":"en/deployment/docker.md","lastUpdated":1726474804000}'),c={name:"en/deployment/docker.md"},d=e("h1",{id:"docker",tabindex:"-1"},[r("Docker "),e("a",{class:"header-anchor",href:"#docker","aria-label":'Permalink to "Docker"'},"​")],-1),n=[d];function s(l,i,p,_,m,k){return a(),o("div",null,n)}const u=t(c,[["render",s]]);export{f as __pageData,u as default}; +import{_ as t,o as a,c as o,l as e,a as r}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Docker","description":"","frontmatter":{},"headers":[],"relativePath":"en/deployment/docker.md","filePath":"en/deployment/docker.md","lastUpdated":1726505115000}'),c={name:"en/deployment/docker.md"},d=e("h1",{id:"docker",tabindex:"-1"},[r("Docker "),e("a",{class:"header-anchor",href:"#docker","aria-label":'Permalink to "Docker"'},"​")],-1),n=[d];function s(l,i,p,_,m,k){return a(),o("div",null,n)}const u=t(c,[["render",s]]);export{f as __pageData,u as default}; diff --git a/assets/en_deployment_github-actions.md.D2EnH7vC.js b/assets/en_deployment_github-actions.md.BGcqw4C7.js similarity index 99% rename from assets/en_deployment_github-actions.md.D2EnH7vC.js rename to assets/en_deployment_github-actions.md.BGcqw4C7.js index 54fb8490b..4480c8e3c 100644 --- a/assets/en_deployment_github-actions.md.D2EnH7vC.js +++ b/assets/en_deployment_github-actions.md.BGcqw4C7.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Github Actions","description":"","frontmatter":{},"headers":[],"relativePath":"en/deployment/github-actions.md","filePath":"en/deployment/github-actions.md","lastUpdated":1726474804000}'),t={name:"en/deployment/github-actions.md"},h=n(`

Github Actions

What are GitHub Actions?

GitHub Actions are the most popular and convenient way to automate build, test and deployment, so it is recommended to learn them for both pet and large commercial projects.

Your code should be on GitHub, naturally.

Add a file .github/workflows/deploy.yaml (the name of the file itself can be anything) to the root of your repository

It will contain the GitHub Actions instructions.

GitHub Actions - sample deploy on GitHub Pages

Sample configuration file of this project (Vue-Faq) with deployment to Github Pages

yaml
# .github/workflows/deploy.yaml
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Github Actions","description":"","frontmatter":{},"headers":[],"relativePath":"en/deployment/github-actions.md","filePath":"en/deployment/github-actions.md","lastUpdated":1726505115000}'),t={name:"en/deployment/github-actions.md"},h=n(`

Github Actions

What are GitHub Actions?

GitHub Actions are the most popular and convenient way to automate build, test and deployment, so it is recommended to learn them for both pet and large commercial projects.

Your code should be on GitHub, naturally.

Add a file .github/workflows/deploy.yaml (the name of the file itself can be anything) to the root of your repository

It will contain the GitHub Actions instructions.

GitHub Actions - sample deploy on GitHub Pages

Sample configuration file of this project (Vue-Faq) with deployment to Github Pages

yaml
# .github/workflows/deploy.yaml
 
 name: Build and Deploy
 on:
diff --git a/assets/en_deployment_github-actions.md.D2EnH7vC.lean.js b/assets/en_deployment_github-actions.md.BGcqw4C7.lean.js
similarity index 86%
rename from assets/en_deployment_github-actions.md.D2EnH7vC.lean.js
rename to assets/en_deployment_github-actions.md.BGcqw4C7.lean.js
index ab41b9381..70358a370 100644
--- a/assets/en_deployment_github-actions.md.D2EnH7vC.lean.js
+++ b/assets/en_deployment_github-actions.md.BGcqw4C7.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Github Actions","description":"","frontmatter":{},"headers":[],"relativePath":"en/deployment/github-actions.md","filePath":"en/deployment/github-actions.md","lastUpdated":1726474804000}'),t={name:"en/deployment/github-actions.md"},h=n("",4),l=[h];function p(e,k,E,d,r,o){return i(),a("div",null,l)}const c=s(t,[["render",p]]);export{y as __pageData,c as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Github Actions","description":"","frontmatter":{},"headers":[],"relativePath":"en/deployment/github-actions.md","filePath":"en/deployment/github-actions.md","lastUpdated":1726505115000}'),t={name:"en/deployment/github-actions.md"},h=n("",4),l=[h];function p(e,k,E,d,r,o){return i(),a("div",null,l)}const c=s(t,[["render",p]]);export{y as __pageData,c as default};
diff --git a/assets/en_deployment_hosting.md.DZHIgjmE.js b/assets/en_deployment_hosting.md.CJMmisy1.js
similarity index 97%
rename from assets/en_deployment_hosting.md.DZHIgjmE.js
rename to assets/en_deployment_hosting.md.CJMmisy1.js
index 966bd00e2..a6e2f5209 100644
--- a/assets/en_deployment_hosting.md.DZHIgjmE.js
+++ b/assets/en_deployment_hosting.md.CJMmisy1.js
@@ -1 +1 @@
-import{_ as e,o as t,c as o,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Hosting","description":"","frontmatter":{},"headers":[],"relativePath":"en/deployment/hosting.md","filePath":"en/deployment/hosting.md","lastUpdated":1726474804000}'),a={name:"en/deployment/hosting.md"},i=r('

Hosting

Where to host a website?

After building a frontend project, you get a set of html/css/js/jpeg and other static files that need to be hosted on some webserver for your website to be online.

Hosting options with free plans:

Also, many cloud providers (Amazon, Google, Oracle, Microsoft) provide free plans with the ability to get a virtual server on which you can install a webserver (Nginx, Apache) and your website yourself. In this case, the backend can also be placed on it.

Domain

Buying a domain is now very easy and inexpensive (from $1 per year), so it is recommended to do so. GitHub Pages and other hosting providers allow you to connect a custom domain to your site. Subdomains are convenient for organizing development environments:

  • dev.website.com
  • dev-api.website.com
  • website.com
  • api.website.com
  • docs.website.com
SSL certificates

Modern browsers require a website to be accessible via HTTPS protocol. This requires an SSL certificate for your domain. Hosting providers like Firebase or Github Pages will provide you with the certificate themselves. If you host your site yourself on a cloud server, you can generate the certificate using CertBot software.

',4),s=[i];function n(l,c,d,m,h,p){return t(),o("div",null,s)}const b=e(a,[["render",n]]);export{f as __pageData,b as default}; +import{_ as e,o as t,c as o,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Hosting","description":"","frontmatter":{},"headers":[],"relativePath":"en/deployment/hosting.md","filePath":"en/deployment/hosting.md","lastUpdated":1726505115000}'),a={name:"en/deployment/hosting.md"},i=r('

Hosting

Where to host a website?

After building a frontend project, you get a set of html/css/js/jpeg and other static files that need to be hosted on some webserver for your website to be online.

Hosting options with free plans:

Also, many cloud providers (Amazon, Google, Oracle, Microsoft) provide free plans with the ability to get a virtual server on which you can install a webserver (Nginx, Apache) and your website yourself. In this case, the backend can also be placed on it.

Domain

Buying a domain is now very easy and inexpensive (from $1 per year), so it is recommended to do so. GitHub Pages and other hosting providers allow you to connect a custom domain to your site. Subdomains are convenient for organizing development environments:

  • dev.website.com
  • dev-api.website.com
  • website.com
  • api.website.com
  • docs.website.com
SSL certificates

Modern browsers require a website to be accessible via HTTPS protocol. This requires an SSL certificate for your domain. Hosting providers like Firebase or Github Pages will provide you with the certificate themselves. If you host your site yourself on a cloud server, you can generate the certificate using CertBot software.

',4),s=[i];function n(l,c,d,m,h,p){return t(),o("div",null,s)}const b=e(a,[["render",n]]);export{f as __pageData,b as default}; diff --git a/assets/en_deployment_hosting.md.DZHIgjmE.lean.js b/assets/en_deployment_hosting.md.CJMmisy1.lean.js similarity index 85% rename from assets/en_deployment_hosting.md.DZHIgjmE.lean.js rename to assets/en_deployment_hosting.md.CJMmisy1.lean.js index da339fec8..26bbe3874 100644 --- a/assets/en_deployment_hosting.md.DZHIgjmE.lean.js +++ b/assets/en_deployment_hosting.md.CJMmisy1.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as o,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Hosting","description":"","frontmatter":{},"headers":[],"relativePath":"en/deployment/hosting.md","filePath":"en/deployment/hosting.md","lastUpdated":1726474804000}'),a={name:"en/deployment/hosting.md"},i=r("",4),s=[i];function n(l,c,d,m,h,p){return t(),o("div",null,s)}const b=e(a,[["render",n]]);export{f as __pageData,b as default}; +import{_ as e,o as t,c as o,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Hosting","description":"","frontmatter":{},"headers":[],"relativePath":"en/deployment/hosting.md","filePath":"en/deployment/hosting.md","lastUpdated":1726505115000}'),a={name:"en/deployment/hosting.md"},i=r("",4),s=[i];function n(l,c,d,m,h,p){return t(),o("div",null,s)}const b=e(a,[["render",n]]);export{f as __pageData,b as default}; diff --git a/assets/en_development_architectural-patterns.md.-IeD3IjQ.js b/assets/en_development_architectural-patterns.md.BOHBw-S8.js similarity index 99% rename from assets/en_development_architectural-patterns.md.-IeD3IjQ.js rename to assets/en_development_architectural-patterns.md.BOHBw-S8.js index 1249b0880..24529103c 100644 --- a/assets/en_development_architectural-patterns.md.-IeD3IjQ.js +++ b/assets/en_development_architectural-patterns.md.BOHBw-S8.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Architectural patterns","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/architectural-patterns.md","filePath":"en/development/architectural-patterns.md","lastUpdated":1726474804000}'),t={name:"en/development/architectural-patterns.md"},e=n(`

Architectural patterns

How to reuse the same developed resources on several projects?

Sometimes there are two or more projects (admin panel and website, for example) that need to use the same components, utilities, services, composite functions and other resources that are in the process of development.

The most convenient in this case is to separate such resources into a separate project/repository, and use Git submodules to connect it as a subdirectory in each project. VS Code allows you to work transparently and comfortably with both the project and connected submodules at the same time.

If you need versioning and independence of the resource library, you can make it as a private NPM package.

Use cases for using Provide/Inject

Use cases

  • Theme or Configuration Settings: You can provide global settings, themes, or configuration options at the root level of your Vue.js application and inject them into any component that needs them.
  • Authentication Data: Share user authentication information, such as user details or authentication tokens, with components that require them without passing them down through props.
  • Internationalization (i18n): Store translation data at the root level and inject it into components that need to display text in different languages.
  • Tightly coupled components: Like i.e. AccordianPanel that only ever appears inside of an Accordian component slot. You can inject shared data that you always want to have access to it without the need to pass it in as a prop.

Best Practices and Considerations

  • Avoid Overuse: While provide and inject can be powerful, don't overuse them. Reserve them for cases where you genuinely need to share data across components without creating tight coupling between them.
  • Clear Documentation: Document the data you are providing and injecting to make it easy for developers to understand how components communicate. You can also type them with TypeScript see the official documentation for details.
  • Consider Prop Drilling: Prop drilling is usually an anti-pattern, but in some cases, passing data through props might still be a more straightforward and more transparent approach. Evaluate whether provide and inject are the best solution for your specific scenario.
What is the best way to organise work with app layouts?

An application can have several layouts - one with a side menu, for example, and one without. Some pages are shown with side menu, others - without.

It is convenient to regulate this by routes. Just create two nested router-views - the outer one is responsible for the app layout, and the inner one (there can be several) is responsible for the components in that layout.

An example:

vue
// MainLayout
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Architectural patterns","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/architectural-patterns.md","filePath":"en/development/architectural-patterns.md","lastUpdated":1726505115000}'),t={name:"en/development/architectural-patterns.md"},e=n(`

Architectural patterns

How to reuse the same developed resources on several projects?

Sometimes there are two or more projects (admin panel and website, for example) that need to use the same components, utilities, services, composite functions and other resources that are in the process of development.

The most convenient in this case is to separate such resources into a separate project/repository, and use Git submodules to connect it as a subdirectory in each project. VS Code allows you to work transparently and comfortably with both the project and connected submodules at the same time.

If you need versioning and independence of the resource library, you can make it as a private NPM package.

Use cases for using Provide/Inject

Use cases

  • Theme or Configuration Settings: You can provide global settings, themes, or configuration options at the root level of your Vue.js application and inject them into any component that needs them.
  • Authentication Data: Share user authentication information, such as user details or authentication tokens, with components that require them without passing them down through props.
  • Internationalization (i18n): Store translation data at the root level and inject it into components that need to display text in different languages.
  • Tightly coupled components: Like i.e. AccordianPanel that only ever appears inside of an Accordian component slot. You can inject shared data that you always want to have access to it without the need to pass it in as a prop.

Best Practices and Considerations

  • Avoid Overuse: While provide and inject can be powerful, don't overuse them. Reserve them for cases where you genuinely need to share data across components without creating tight coupling between them.
  • Clear Documentation: Document the data you are providing and injecting to make it easy for developers to understand how components communicate. You can also type them with TypeScript see the official documentation for details.
  • Consider Prop Drilling: Prop drilling is usually an anti-pattern, but in some cases, passing data through props might still be a more straightforward and more transparent approach. Evaluate whether provide and inject are the best solution for your specific scenario.
What is the best way to organise work with app layouts?

An application can have several layouts - one with a side menu, for example, and one without. Some pages are shown with side menu, others - without.

It is convenient to regulate this by routes. Just create two nested router-views - the outer one is responsible for the app layout, and the inner one (there can be several) is responsible for the components in that layout.

An example:

vue
// MainLayout
 <template>
   <div>
     <AppHeader />
diff --git a/assets/en_development_architectural-patterns.md.-IeD3IjQ.lean.js b/assets/en_development_architectural-patterns.md.BOHBw-S8.lean.js
similarity index 87%
rename from assets/en_development_architectural-patterns.md.-IeD3IjQ.lean.js
rename to assets/en_development_architectural-patterns.md.BOHBw-S8.lean.js
index 781e39860..fd5db1158 100644
--- a/assets/en_development_architectural-patterns.md.-IeD3IjQ.lean.js
+++ b/assets/en_development_architectural-patterns.md.BOHBw-S8.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Architectural patterns","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/architectural-patterns.md","filePath":"en/development/architectural-patterns.md","lastUpdated":1726474804000}'),t={name:"en/development/architectural-patterns.md"},e=n("",5),l=[e];function p(h,k,E,r,d,o){return i(),a("div",null,l)}const y=s(t,[["render",p]]);export{g as __pageData,y as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Architectural patterns","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/architectural-patterns.md","filePath":"en/development/architectural-patterns.md","lastUpdated":1726505115000}'),t={name:"en/development/architectural-patterns.md"},e=n("",5),l=[e];function p(h,k,E,r,d,o){return i(),a("div",null,l)}const y=s(t,[["render",p]]);export{g as __pageData,y as default};
diff --git a/assets/en_development_assets.md.vVQhwtSH.js b/assets/en_development_assets.md.DSpdOfK9.js
similarity index 99%
rename from assets/en_development_assets.md.vVQhwtSH.js
rename to assets/en_development_assets.md.DSpdOfK9.js
index 84770d3cd..8e71f7289 100644
--- a/assets/en_development_assets.md.vVQhwtSH.js
+++ b/assets/en_development_assets.md.DSpdOfK9.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Application Resources","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/assets.md","filePath":"en/development/assets.md","lastUpdated":1726474804000}'),h={name:"en/development/assets.md"},t=n(`

Application Resources

Application Resources

Resources refer to images, icons, audio, video, json, pdf and other files that your application can use either internally or to display on a page.

Should I put images in the public or assets folder?

From the public folder, resources (e.g. images) are connected in your application via HTTP(S), downloaded as needed from the server - as they have always been.

Resources in the assets folder (and in general from any subdirectory in src/) are renamed (a hash is added - like social-banner-e88a22df.png) and placed in the dist/assets folder, or, if they are small images, they can be Base64 encoded and placed in your js bandle. In the browser application they are available immediately, but the size of the js bandle is increased by the size of the resources, which increases the loading speed.

The resources are accessed via import:

js
// gets url to the resource
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Application Resources","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/assets.md","filePath":"en/development/assets.md","lastUpdated":1726505115000}'),h={name:"en/development/assets.md"},t=n(`

Application Resources

Application Resources

Resources refer to images, icons, audio, video, json, pdf and other files that your application can use either internally or to display on a page.

Should I put images in the public or assets folder?

From the public folder, resources (e.g. images) are connected in your application via HTTP(S), downloaded as needed from the server - as they have always been.

Resources in the assets folder (and in general from any subdirectory in src/) are renamed (a hash is added - like social-banner-e88a22df.png) and placed in the dist/assets folder, or, if they are small images, they can be Base64 encoded and placed in your js bandle. In the browser application they are available immediately, but the size of the js bandle is increased by the size of the resources, which increases the loading speed.

The resources are accessed via import:

js
// gets url to the resource
 import imageUrl from "./image.img";
 
 // gets raw (string) representation of the resource
diff --git a/assets/en_development_assets.md.vVQhwtSH.lean.js b/assets/en_development_assets.md.DSpdOfK9.lean.js
similarity index 85%
rename from assets/en_development_assets.md.vVQhwtSH.lean.js
rename to assets/en_development_assets.md.DSpdOfK9.lean.js
index 0623fad53..39b4e338c 100644
--- a/assets/en_development_assets.md.vVQhwtSH.lean.js
+++ b/assets/en_development_assets.md.DSpdOfK9.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Application Resources","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/assets.md","filePath":"en/development/assets.md","lastUpdated":1726474804000}'),h={name:"en/development/assets.md"},t=n("",9),l=[t];function p(e,k,E,r,d,g){return i(),a("div",null,l)}const c=s(h,[["render",p]]);export{y as __pageData,c as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Application Resources","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/assets.md","filePath":"en/development/assets.md","lastUpdated":1726505115000}'),h={name:"en/development/assets.md"},t=n("",9),l=[t];function p(e,k,E,r,d,g){return i(),a("div",null,l)}const c=s(h,[["render",p]]);export{y as __pageData,c as default};
diff --git a/assets/en_development_building.md.BhaZM9HL.js b/assets/en_development_building.md.CVLIlvhx.js
similarity index 99%
rename from assets/en_development_building.md.BhaZM9HL.js
rename to assets/en_development_building.md.CVLIlvhx.js
index d52dfd221..3aa1620eb 100644
--- a/assets/en_development_building.md.BhaZM9HL.js
+++ b/assets/en_development_building.md.CVLIlvhx.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Create and build an application","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/building.md","filePath":"en/development/building.md","lastUpdated":1726474804000}'),n={name:"en/development/building.md"},t=e(`

Create and build an application

Building an application

To build a Vue project into browser-friendly files, you need a builder. The most popular ones are Vite and Webpack.

Vite is newer and uses modern technologies including esbuild for dev builds to transpile TypeScript to JavaScript, which is 20~30 times faster than regular tsc, making HMR dozens of times faster than on Webpack. The Rollup builder is used to build JavaScript for production.

Note that each builder collects application resources (icons, SVGs, etc.) in its own way, using its own plugins, and requires customization.

Both builders allow you to extend their capabilities with custom plugins.

Vite or Webpack?

Vite.

If you need Webpack, you'll know it yourself.

npm, yarn or pnpm?

It is recommended to use pnpm as the most up-to-date one

Also, by using hard links instead of copying files, it saves a lot of disk space on your computer in case of multiple projects with node_modules and the same packages in them.

Creating a Vue application

Vue-cli is an obsolete method

Create directly through Vite:

sh
pnpm create vite

Or in an online sandbox.

See Vite's website for more information.

How to configure the @ alias?

Alias is a builder setting, and is set differently for each builder.

To use the @ alias in paths in a project with Vite

js
import BaseIcon from "@/components/ui/BaseIcon.vue";

you need to configure it in vite.config.j(t)s:

js
// vite.config.js
+import{_ as s,o as i,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Create and build an application","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/building.md","filePath":"en/development/building.md","lastUpdated":1726505115000}'),n={name:"en/development/building.md"},t=e(`

Create and build an application

Building an application

To build a Vue project into browser-friendly files, you need a builder. The most popular ones are Vite and Webpack.

Vite is newer and uses modern technologies including esbuild for dev builds to transpile TypeScript to JavaScript, which is 20~30 times faster than regular tsc, making HMR dozens of times faster than on Webpack. The Rollup builder is used to build JavaScript for production.

Note that each builder collects application resources (icons, SVGs, etc.) in its own way, using its own plugins, and requires customization.

Both builders allow you to extend their capabilities with custom plugins.

Vite or Webpack?

Vite.

If you need Webpack, you'll know it yourself.

npm, yarn or pnpm?

It is recommended to use pnpm as the most up-to-date one

Also, by using hard links instead of copying files, it saves a lot of disk space on your computer in case of multiple projects with node_modules and the same packages in them.

Creating a Vue application

Vue-cli is an obsolete method

Create directly through Vite:

sh
pnpm create vite

Or in an online sandbox.

See Vite's website for more information.

How to configure the @ alias?

Alias is a builder setting, and is set differently for each builder.

To use the @ alias in paths in a project with Vite

js
import BaseIcon from "@/components/ui/BaseIcon.vue";

you need to configure it in vite.config.j(t)s:

js
// vite.config.js
 import path from "node:path";
 
 export default defineConfig({
diff --git a/assets/en_development_building.md.BhaZM9HL.lean.js b/assets/en_development_building.md.CVLIlvhx.lean.js
similarity index 86%
rename from assets/en_development_building.md.BhaZM9HL.lean.js
rename to assets/en_development_building.md.CVLIlvhx.lean.js
index 57bdae8c7..fb88d6872 100644
--- a/assets/en_development_building.md.BhaZM9HL.lean.js
+++ b/assets/en_development_building.md.CVLIlvhx.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Create and build an application","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/building.md","filePath":"en/development/building.md","lastUpdated":1726474804000}'),n={name:"en/development/building.md"},t=e("",7),l=[t];function p(h,o,d,k,r,c){return i(),a("div",null,l)}const E=s(n,[["render",p]]);export{g as __pageData,E as default};
+import{_ as s,o as i,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Create and build an application","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/building.md","filePath":"en/development/building.md","lastUpdated":1726505115000}'),n={name:"en/development/building.md"},t=e("",7),l=[t];function p(h,o,d,k,r,c){return i(),a("div",null,l)}const E=s(n,[["render",p]]);export{g as __pageData,E as default};
diff --git a/assets/en_development_ide.md.DwF2bx8m.js b/assets/en_development_ide.md.B3seQbTc.js
similarity index 99%
rename from assets/en_development_ide.md.DwF2bx8m.js
rename to assets/en_development_ide.md.B3seQbTc.js
index cb20aac15..faf6ab7bb 100644
--- a/assets/en_development_ide.md.DwF2bx8m.js
+++ b/assets/en_development_ide.md.B3seQbTc.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const d=JSON.parse('{"title":"Configuring the IDE","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/ide.md","filePath":"en/development/ide.md","lastUpdated":1726474804000}'),t={name:"en/development/ide.md"},l=n(`

Configuring the IDE

Which IDE should I choose?

Vue is recommended by Microsoft VS Code. The second most popular is WebStorm

In VS Code, new official extensions for Vue appear much earlier, and in general this environment is very convenient for development in general, there are a lot of useful extensions - for example, you can run a GitHub Action and see its output right in the editor.

WebStorm gives more possibilities to work in js, html, but it glitches with TypeScript and not only in SFC script setup, and in general it doesn't keep up with changes in Vue.

For beginners VS Code is the best choice

Necessary VS Code extensions

When working with Vite and Vue 3:

  • ESlint
  • Volar

Could be useful:

  • Typescript Vue Plugin
  • Codeium
  • SFTP
  • GitHub Actions
VS Code Customization

VS Code allows you to do very fine customization. For example, try creating this local customization file .vscode/setting.json and see how the editor changes.

settings.json
json
{
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const d=JSON.parse('{"title":"Configuring the IDE","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/ide.md","filePath":"en/development/ide.md","lastUpdated":1726505115000}'),t={name:"en/development/ide.md"},l=n(`

Configuring the IDE

Which IDE should I choose?

Vue is recommended by Microsoft VS Code. The second most popular is WebStorm

In VS Code, new official extensions for Vue appear much earlier, and in general this environment is very convenient for development in general, there are a lot of useful extensions - for example, you can run a GitHub Action and see its output right in the editor.

WebStorm gives more possibilities to work in js, html, but it glitches with TypeScript and not only in SFC script setup, and in general it doesn't keep up with changes in Vue.

For beginners VS Code is the best choice

Necessary VS Code extensions

When working with Vite and Vue 3:

  • ESlint
  • Volar

Could be useful:

  • Typescript Vue Plugin
  • Codeium
  • SFTP
  • GitHub Actions
VS Code Customization

VS Code allows you to do very fine customization. For example, try creating this local customization file .vscode/setting.json and see how the editor changes.

settings.json
json
{
     "editor.formatOnSave": false,
     "editor.defaultFormatter": "esbenp.prettier-vscode",
     "[vue]": {
diff --git a/assets/en_development_ide.md.DwF2bx8m.lean.js b/assets/en_development_ide.md.B3seQbTc.lean.js
similarity index 85%
rename from assets/en_development_ide.md.DwF2bx8m.lean.js
rename to assets/en_development_ide.md.B3seQbTc.lean.js
index 9bf4fc2e0..73a56fcb9 100644
--- a/assets/en_development_ide.md.DwF2bx8m.lean.js
+++ b/assets/en_development_ide.md.B3seQbTc.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const d=JSON.parse('{"title":"Configuring the IDE","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/ide.md","filePath":"en/development/ide.md","lastUpdated":1726474804000}'),t={name:"en/development/ide.md"},l=n("",8),h=[l];function p(k,e,o,r,E,g){return i(),a("div",null,h)}const u=s(t,[["render",p]]);export{d as __pageData,u as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const d=JSON.parse('{"title":"Configuring the IDE","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/ide.md","filePath":"en/development/ide.md","lastUpdated":1726505115000}'),t={name:"en/development/ide.md"},l=n("",8),h=[l];function p(k,e,o,r,E,g){return i(),a("div",null,h)}const u=s(t,[["render",p]]);export{d as __pageData,u as default};
diff --git a/assets/en_development_libraries.md.Dz7ibVZG.js b/assets/en_development_libraries.md.BPJIgMKF.js
similarity index 95%
rename from assets/en_development_libraries.md.Dz7ibVZG.js
rename to assets/en_development_libraries.md.BPJIgMKF.js
index 606ec62bf..219386ab5 100644
--- a/assets/en_development_libraries.md.Dz7ibVZG.js
+++ b/assets/en_development_libraries.md.BPJIgMKF.js
@@ -1 +1 @@
-import{_ as e,o as a,c as r,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Tell me a handy library","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/libraries.md","filePath":"en/development/libraries.md","lastUpdated":1726474804000}'),s={name:"en/development/libraries.md"},i=t('

Tell me a handy library

For working with dates

moment is irretrievably obsolete. There's day.js and day-fnc.js.

However, in 95% of cases the capabilities of the standard JavaScript Intl package are sufficient

For UI components

There are quite a few CSS and UI libraries out there

Here in this article is a small overview of their heavyweight nature

Quasar and PrimeVue look solid.

',3),l=[i];function o(n,d,c,m,p,h){return a(),r("div",null,l)}const b=e(s,[["render",o]]);export{u as __pageData,b as default}; +import{_ as e,o as a,c as r,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Tell me a handy library","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/libraries.md","filePath":"en/development/libraries.md","lastUpdated":1726505115000}'),s={name:"en/development/libraries.md"},i=t('

Tell me a handy library

For working with dates

moment is irretrievably obsolete. There's day.js and day-fnc.js.

However, in 95% of cases the capabilities of the standard JavaScript Intl package are sufficient

For UI components

There are quite a few CSS and UI libraries out there

Here in this article is a small overview of their heavyweight nature

Quasar and PrimeVue look solid.

',3),l=[i];function o(n,d,c,m,p,h){return a(),r("div",null,l)}const b=e(s,[["render",o]]);export{u as __pageData,b as default}; diff --git a/assets/en_development_libraries.md.Dz7ibVZG.lean.js b/assets/en_development_libraries.md.BPJIgMKF.lean.js similarity index 86% rename from assets/en_development_libraries.md.Dz7ibVZG.lean.js rename to assets/en_development_libraries.md.BPJIgMKF.lean.js index d99dda88d..f7569ceba 100644 --- a/assets/en_development_libraries.md.Dz7ibVZG.lean.js +++ b/assets/en_development_libraries.md.BPJIgMKF.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as r,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Tell me a handy library","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/libraries.md","filePath":"en/development/libraries.md","lastUpdated":1726474804000}'),s={name:"en/development/libraries.md"},i=t("",3),l=[i];function o(n,d,c,m,p,h){return a(),r("div",null,l)}const b=e(s,[["render",o]]);export{u as __pageData,b as default}; +import{_ as e,o as a,c as r,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Tell me a handy library","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/libraries.md","filePath":"en/development/libraries.md","lastUpdated":1726505115000}'),s={name:"en/development/libraries.md"},i=t("",3),l=[i];function o(n,d,c,m,p,h){return a(),r("div",null,l)}const b=e(s,[["render",o]]);export{u as __pageData,b as default}; diff --git a/assets/en_development_misc.md.Bflvua0Q.js b/assets/en_development_misc.md.CAe-X9Ta.js similarity index 99% rename from assets/en_development_misc.md.Bflvua0Q.js rename to assets/en_development_misc.md.CAe-X9Ta.js index accf4efaf..85a8cde60 100644 --- a/assets/en_development_misc.md.Bflvua0Q.js +++ b/assets/en_development_misc.md.CAe-X9Ta.js @@ -1,4 +1,4 @@ -import{_ as e,o as s,c as a,a4 as i,a5 as t,a6 as n}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Helpful hints","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/misc.md","filePath":"en/development/misc.md","lastUpdated":1726474804000}'),r={name:"en/development/misc.md"},o=i(`

Helpful hints

What are some good libraries for working with ...?

Keen-Slider, Embla Carousel, Splide

Well known Swiper is not so good for the Vue.js

Toaster

vue-sonner

Date and time

day.js, day-fnc.js

Well known moment.js is irretrievably obsolete.

TIP

Modern JavaScript is much more than it was 10 years ago. In 95% of cases the capabilities of the standard JavaScript Intl package are sufficient for date-time operations

How to catch the moment when the user scrolls to a certain place or to make a virtual scroll?

Intersection Observer

i18n - application internationalization

The NPM library for internationalization and localization i18n is very popular, but it has grown very large in recent years. It has a lot of features for localizing dates, numbers, setting the right declensions, RTL language support, downloading locales from the server and a bunch of other things. The i18next site even calls it an "internationalization framework".

At the same time, localization of a site often requires very simple things that take up only a couple of percent of the entire functionality of the i18n heavyweight.

In fact, you usually need a reactive function that returns a string based on the key and the current locale.

A variant of implementation via composable is in this article.

Your bundle will be "thinner" by 50Kb.

Options API or Composition API?

We recommend Composition API (script setup) as more logical and convenient, in which the programmer controls the flow of program execution by means of JavaScript, and not just by setting some magic options.

Ref or Reactive?

Difference in terms of usage - Reactive only works with objects and does not track object replacement. Ref works with everything and tracks variable replacement:

js
const a = Ref(1);
+import{_ as e,o as s,c as a,a4 as i,a5 as t,a6 as n}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Helpful hints","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/misc.md","filePath":"en/development/misc.md","lastUpdated":1726505115000}'),r={name:"en/development/misc.md"},o=i(`

Helpful hints

What are some good libraries for working with ...?

Keen-Slider, Embla Carousel, Splide

Well known Swiper is not so good for the Vue.js

Toaster

vue-sonner

Date and time

day.js, day-fnc.js

Well known moment.js is irretrievably obsolete.

TIP

Modern JavaScript is much more than it was 10 years ago. In 95% of cases the capabilities of the standard JavaScript Intl package are sufficient for date-time operations

How to catch the moment when the user scrolls to a certain place or to make a virtual scroll?

Intersection Observer

i18n - application internationalization

The NPM library for internationalization and localization i18n is very popular, but it has grown very large in recent years. It has a lot of features for localizing dates, numbers, setting the right declensions, RTL language support, downloading locales from the server and a bunch of other things. The i18next site even calls it an "internationalization framework".

At the same time, localization of a site often requires very simple things that take up only a couple of percent of the entire functionality of the i18n heavyweight.

In fact, you usually need a reactive function that returns a string based on the key and the current locale.

A variant of implementation via composable is in this article.

Your bundle will be "thinner" by 50Kb.

Options API or Composition API?

We recommend Composition API (script setup) as more logical and convenient, in which the programmer controls the flow of program execution by means of JavaScript, and not just by setting some magic options.

Ref or Reactive?

Difference in terms of usage - Reactive only works with objects and does not track object replacement. Ref works with everything and tracks variable replacement:

js
const a = Ref(1);
 const b = Reactive({ x: 1 });
 
 // is OK
diff --git a/assets/en_development_misc.md.Bflvua0Q.lean.js b/assets/en_development_misc.md.CAe-X9Ta.lean.js
similarity index 85%
rename from assets/en_development_misc.md.Bflvua0Q.lean.js
rename to assets/en_development_misc.md.CAe-X9Ta.lean.js
index b0942785c..4016c9d7e 100644
--- a/assets/en_development_misc.md.Bflvua0Q.lean.js
+++ b/assets/en_development_misc.md.CAe-X9Ta.lean.js
@@ -1 +1 @@
-import{_ as e,o as s,c as a,a4 as i,a5 as t,a6 as n}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Helpful hints","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/misc.md","filePath":"en/development/misc.md","lastUpdated":1726474804000}'),r={name:"en/development/misc.md"},o=i("",10),l=[o];function p(h,d,c,m,k,u){return s(),a("div",null,l)}const y=e(r,[["render",p]]);export{f as __pageData,y as default};
+import{_ as e,o as s,c as a,a4 as i,a5 as t,a6 as n}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Helpful hints","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/misc.md","filePath":"en/development/misc.md","lastUpdated":1726505115000}'),r={name:"en/development/misc.md"},o=i("",10),l=[o];function p(h,d,c,m,k,u){return s(),a("div",null,l)}const y=e(r,[["render",p]]);export{f as __pageData,y as default};
diff --git a/assets/en_development_project-structure.md.BrWyQfy8.js b/assets/en_development_project-structure.md.r-OstJVv.js
similarity index 99%
rename from assets/en_development_project-structure.md.BrWyQfy8.js
rename to assets/en_development_project-structure.md.r-OstJVv.js
index 45f0f0fc4..1bdd823dd 100644
--- a/assets/en_development_project-structure.md.BrWyQfy8.js
+++ b/assets/en_development_project-structure.md.r-OstJVv.js
@@ -1,4 +1,4 @@
-import{_ as s,o as a,c as n,a4 as e,a7 as p,a8 as t,a9 as l}from"./chunks/framework.B8KxSsRZ.js";import{_ as i}from"./chunks/modular-architecture.C9UloQkF.js";const k=JSON.parse('{"title":"Vue 3 project structure","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/project-structure.md","filePath":"en/development/project-structure.md","lastUpdated":1726474804000}'),o={name:"en/development/project-structure.md"},c=e(`

Vue 3 project structure

Possible file structures for Vue 3 projects

Flat Approach

When launching a small-scale Vue project such as a Proof of Concept, you might prefer a straightforward folder structure to avoid complexity: /src

txt
/src
+import{_ as s,o as a,c as n,a4 as e,a7 as p,a8 as t,a9 as l}from"./chunks/framework.B8KxSsRZ.js";import{_ as i}from"./chunks/modular-architecture.C9UloQkF.js";const k=JSON.parse('{"title":"Vue 3 project structure","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/project-structure.md","filePath":"en/development/project-structure.md","lastUpdated":1726505115000}'),o={name:"en/development/project-structure.md"},c=e(`

Vue 3 project structure

Possible file structures for Vue 3 projects

Flat Approach

When launching a small-scale Vue project such as a Proof of Concept, you might prefer a straightforward folder structure to avoid complexity: /src

txt
/src
 |-- /components
 |   |-- BaseButton.vue
 |   |-- BaseCard.vue
diff --git a/assets/en_development_project-structure.md.BrWyQfy8.lean.js b/assets/en_development_project-structure.md.r-OstJVv.lean.js
similarity index 77%
rename from assets/en_development_project-structure.md.BrWyQfy8.lean.js
rename to assets/en_development_project-structure.md.r-OstJVv.lean.js
index d130d731e..3156256d4 100644
--- a/assets/en_development_project-structure.md.BrWyQfy8.lean.js
+++ b/assets/en_development_project-structure.md.r-OstJVv.lean.js
@@ -1 +1 @@
-import{_ as s,o as a,c as n,a4 as e,a7 as p,a8 as t,a9 as l}from"./chunks/framework.B8KxSsRZ.js";import{_ as i}from"./chunks/modular-architecture.C9UloQkF.js";const k=JSON.parse('{"title":"Vue 3 project structure","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/project-structure.md","filePath":"en/development/project-structure.md","lastUpdated":1726474804000}'),o={name:"en/development/project-structure.md"},c=e("",17),r=[c];function d(u,m,h,g,v,f){return a(),n("div",null,r)}const w=s(o,[["render",d]]);export{k as __pageData,w as default};
+import{_ as s,o as a,c as n,a4 as e,a7 as p,a8 as t,a9 as l}from"./chunks/framework.B8KxSsRZ.js";import{_ as i}from"./chunks/modular-architecture.C9UloQkF.js";const k=JSON.parse('{"title":"Vue 3 project structure","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/project-structure.md","filePath":"en/development/project-structure.md","lastUpdated":1726505115000}'),o={name:"en/development/project-structure.md"},c=e("",17),r=[c];function d(u,m,h,g,v,f){return a(),n("div",null,r)}const w=s(o,[["render",d]]);export{k as __pageData,w as default};
diff --git a/assets/en_development_stores.md.BKuyvw_V.js b/assets/en_development_stores.md.CFBfDpyJ.js
similarity index 97%
rename from assets/en_development_stores.md.BKuyvw_V.js
rename to assets/en_development_stores.md.CFBfDpyJ.js
index fd3340762..388b61feb 100644
--- a/assets/en_development_stores.md.BKuyvw_V.js
+++ b/assets/en_development_stores.md.CFBfDpyJ.js
@@ -1 +1 @@
-import{_ as e,o as t,c as o,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"State management in Vue 3","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/stores.md","filePath":"en/development/stores.md","lastUpdated":1726474804000}'),s={name:"en/development/stores.md"},n=a('

State management in Vue 3

Why State management?

Sometimes in an application you need to pass reactive data or a function from one component to another, and these components do not belong to the same hierarchy. Props/emits or provide/inject mechanisms are not suitable for this. That's why Vue 2 introduced Vuex, a state management library that allows you to store a reactive state and provide access to it from anywhere.

A frontend state management library is usually called a "store".

How can I pass reactive data from one component to another in Vue 3?
  • If one component is a direct descendant of another - props and events
  • If one component is an indirect descendant of another - provide/inject or prop/event dribbling (bad practice).
  • If they are in different branches of the hierarchy - store or Vue 3 ref/reactive

Vue 3 ref/reactive is when you define and export a reactive variable in a separate js module:

export const userLoggedIn = ref(false);

It is then available throughout the application via the import of this module.

However, it is architecturally a bad idea to just share a variable. Usually there is business logic around this variable, which should be made available.

For example, authentication requires not only the fact that the user is logged in, but also the associated methods - login(), logout(), register(), isAuthenticated(). Synthesizing some kind of state and the accompanying business logic yielded the so-called composable functions in Vue 3.

In some sense, it is an analog of an object in OOP.

What is a store on the frontend?

A Store (like Pinia) is an entity holding state and business logic that isn't bound to your Component tree. In other words, it hosts global state. It's a bit like a component that is always there and that everybody can read off and write to.

Store (such as Pinia) is an entity that contains state and business logic that is not bound to your Component tree. In other words, this is where the global state resides. It's sort of like a component that is always present, and that anyone can read and write to.

_ Official Pinia documentation.

Looks like a very unfortunate, ambiguous and confusing definition.

From the perspective of a non-frontend developer (basically any language other than JavaScript, plus partially JavaScript), the analog of a construct called store would be a database - SQL, NoSQL or caching Redis. There are analogs of state and getters (View in SQL database). But in 99.99% of cases, there will be no business logic in the database except for data consistency constraints (e.g., unique or foreign keys).

From a non-frontend developer's perspective, frontend stores are just objects / stateful services built on a singleton pattern. Calling them "global stores" is at least illogical.

It's likely that this happened historically. First there was one Vuex, it was one store and global. Then it had modules. Then Pinia modules became independent and spread all over the application. As a result, the application has a bunch of small local (by area of use) storages, each of which considers itself global, even if it is used by 2-3 components out of 1000 on the project, and even if this storage has 1% of state and 99% of business and related logic.

In this respect, using composable functions for the same purpose (an entity holding state and business logic that isn't bound to your Component tree) - is much more logical. And they should be called useAuth or useAuthService instead of useAuthStore.

Vuex or Pinia?

In Vue 3, Pinia has become the main external library for managing the stack. Unlike Vuex, it has TypeScript support, is more convenient, and naturally takes advantage of Vue 3.

Vuex is officially deprecated

Pinia or Composables functions?

In Vue 3 there is something that makes a separate library for managing the state unnecessary. Namely, reactive types Ref and Reactive that can be used outside of a component. It became possible to make your own storages on the basis of composable functions and connect them in any component.

The main declared difference of Pinia is integration with Vue DevTools, plugins and SSR support. However, whether he needs one or the other, each developer decides for himself. It is quite comfortable to work with composables in DevTools.

Composable function, in its turn, can have both global and local (variables are declared inside the function) states. This can be useful in certain cases - you can create several instances of composable functions, each with its own state. For example, when you have several news widgets on your site, differing only by news category.

Also, from a functional point of view, composable functions have full access to the entire Vue Reactivity API, which makes them more flexible than Pinia.

Composable functions with global states do not work in SSR mode.

As for performance, according to tests Pinia is about 1.5 times slower on Reactive changes than Vue 3, and 20 times slower on Ref. This is because Ref (primitive types) in Pinia becomes a part of Reactive. Setup stores does not solve this problem.

You should also keep in mind that any dependency (in this case the Pinia library) can bring problems similar to the "RIP Vuex" situation when the library dies, becomes obsolete, is no longer supported, or vulnerabilities are found in it. Composable features, on the other hand, look like a thorough innovation to the Vue framework.

Here is an interesting discussion about it on /r/vuejs. Code example from Reddit user @ferferga shows how to use TypeScript classes with private modifiers, getters, setters (no .value) and first class type support as composable stores (which would be impossible with Pinia). Using TS classes here might not be a good practice but demonstrates flexibility and power of the Composition API.

Also here is a lifehack for Devtools from user @coolcosmos: I just use refs. The cons is you lose the Devtools but in dev mode I import all my refs and pass them to pinia so I have all the pros and no cons.

How to split logic between component and composable functions?

It is convenient to think of it as MVC pattern, where the role of View (and partially Controller) is played by components, which are mainly responsible for visualization, and the logic and model (Model and partially Controller) fall on composable functions and their reactive state.

To understand what to put in a composable and what to put in a component (which may consist of several components), imagine that you change the component to another one - displaying your data in some other way. Ideally, the model (composite) should remain the same, you are only rewriting the component that has logic responsible for displaying it.

At the same time, the logic (Controller) can be shared between the component and the composable. For example, validation of form data can happen in the component (checking that the field is populated), in the component using a third-party utility (checking that the password is "complex"), and in the composable (checking that username is unique)

',7),i=[n];function r(l,c,d,h,p,m){return t(),o("div",null,i)}const b=e(s,[["render",r]]);export{f as __pageData,b as default}; +import{_ as e,o as t,c as o,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"State management in Vue 3","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/stores.md","filePath":"en/development/stores.md","lastUpdated":1726505115000}'),s={name:"en/development/stores.md"},n=a('

State management in Vue 3

Why State management?

Sometimes in an application you need to pass reactive data or a function from one component to another, and these components do not belong to the same hierarchy. Props/emits or provide/inject mechanisms are not suitable for this. That's why Vue 2 introduced Vuex, a state management library that allows you to store a reactive state and provide access to it from anywhere.

A frontend state management library is usually called a "store".

How can I pass reactive data from one component to another in Vue 3?
  • If one component is a direct descendant of another - props and events
  • If one component is an indirect descendant of another - provide/inject or prop/event dribbling (bad practice).
  • If they are in different branches of the hierarchy - store or Vue 3 ref/reactive

Vue 3 ref/reactive is when you define and export a reactive variable in a separate js module:

export const userLoggedIn = ref(false);

It is then available throughout the application via the import of this module.

However, it is architecturally a bad idea to just share a variable. Usually there is business logic around this variable, which should be made available.

For example, authentication requires not only the fact that the user is logged in, but also the associated methods - login(), logout(), register(), isAuthenticated(). Synthesizing some kind of state and the accompanying business logic yielded the so-called composable functions in Vue 3.

In some sense, it is an analog of an object in OOP.

What is a store on the frontend?

A Store (like Pinia) is an entity holding state and business logic that isn't bound to your Component tree. In other words, it hosts global state. It's a bit like a component that is always there and that everybody can read off and write to.

Store (such as Pinia) is an entity that contains state and business logic that is not bound to your Component tree. In other words, this is where the global state resides. It's sort of like a component that is always present, and that anyone can read and write to.

_ Official Pinia documentation.

Looks like a very unfortunate, ambiguous and confusing definition.

From the perspective of a non-frontend developer (basically any language other than JavaScript, plus partially JavaScript), the analog of a construct called store would be a database - SQL, NoSQL or caching Redis. There are analogs of state and getters (View in SQL database). But in 99.99% of cases, there will be no business logic in the database except for data consistency constraints (e.g., unique or foreign keys).

From a non-frontend developer's perspective, frontend stores are just objects / stateful services built on a singleton pattern. Calling them "global stores" is at least illogical.

It's likely that this happened historically. First there was one Vuex, it was one store and global. Then it had modules. Then Pinia modules became independent and spread all over the application. As a result, the application has a bunch of small local (by area of use) storages, each of which considers itself global, even if it is used by 2-3 components out of 1000 on the project, and even if this storage has 1% of state and 99% of business and related logic.

In this respect, using composable functions for the same purpose (an entity holding state and business logic that isn't bound to your Component tree) - is much more logical. And they should be called useAuth or useAuthService instead of useAuthStore.

Vuex or Pinia?

In Vue 3, Pinia has become the main external library for managing the stack. Unlike Vuex, it has TypeScript support, is more convenient, and naturally takes advantage of Vue 3.

Vuex is officially deprecated

Pinia or Composables functions?

In Vue 3 there is something that makes a separate library for managing the state unnecessary. Namely, reactive types Ref and Reactive that can be used outside of a component. It became possible to make your own storages on the basis of composable functions and connect them in any component.

The main declared difference of Pinia is integration with Vue DevTools, plugins and SSR support. However, whether he needs one or the other, each developer decides for himself. It is quite comfortable to work with composables in DevTools.

Composable function, in its turn, can have both global and local (variables are declared inside the function) states. This can be useful in certain cases - you can create several instances of composable functions, each with its own state. For example, when you have several news widgets on your site, differing only by news category.

Also, from a functional point of view, composable functions have full access to the entire Vue Reactivity API, which makes them more flexible than Pinia.

Composable functions with global states do not work in SSR mode.

As for performance, according to tests Pinia is about 1.5 times slower on Reactive changes than Vue 3, and 20 times slower on Ref. This is because Ref (primitive types) in Pinia becomes a part of Reactive. Setup stores does not solve this problem.

You should also keep in mind that any dependency (in this case the Pinia library) can bring problems similar to the "RIP Vuex" situation when the library dies, becomes obsolete, is no longer supported, or vulnerabilities are found in it. Composable features, on the other hand, look like a thorough innovation to the Vue framework.

Here is an interesting discussion about it on /r/vuejs. Code example from Reddit user @ferferga shows how to use TypeScript classes with private modifiers, getters, setters (no .value) and first class type support as composable stores (which would be impossible with Pinia). Using TS classes here might not be a good practice but demonstrates flexibility and power of the Composition API.

Also here is a lifehack for Devtools from user @coolcosmos: I just use refs. The cons is you lose the Devtools but in dev mode I import all my refs and pass them to pinia so I have all the pros and no cons.

How to split logic between component and composable functions?

It is convenient to think of it as MVC pattern, where the role of View (and partially Controller) is played by components, which are mainly responsible for visualization, and the logic and model (Model and partially Controller) fall on composable functions and their reactive state.

To understand what to put in a composable and what to put in a component (which may consist of several components), imagine that you change the component to another one - displaying your data in some other way. Ideally, the model (composite) should remain the same, you are only rewriting the component that has logic responsible for displaying it.

At the same time, the logic (Controller) can be shared between the component and the composable. For example, validation of form data can happen in the component (checking that the field is populated), in the component using a third-party utility (checking that the password is "complex"), and in the composable (checking that username is unique)

',7),i=[n];function r(l,c,d,h,p,m){return t(),o("div",null,i)}const b=e(s,[["render",r]]);export{f as __pageData,b as default}; diff --git a/assets/en_development_stores.md.BKuyvw_V.lean.js b/assets/en_development_stores.md.CFBfDpyJ.lean.js similarity index 85% rename from assets/en_development_stores.md.BKuyvw_V.lean.js rename to assets/en_development_stores.md.CFBfDpyJ.lean.js index 20c8131ca..fab4a8235 100644 --- a/assets/en_development_stores.md.BKuyvw_V.lean.js +++ b/assets/en_development_stores.md.CFBfDpyJ.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as o,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"State management in Vue 3","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/stores.md","filePath":"en/development/stores.md","lastUpdated":1726474804000}'),s={name:"en/development/stores.md"},n=a("",7),i=[n];function r(l,c,d,h,p,m){return t(),o("div",null,i)}const b=e(s,[["render",r]]);export{f as __pageData,b as default}; +import{_ as e,o as t,c as o,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"State management in Vue 3","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/stores.md","filePath":"en/development/stores.md","lastUpdated":1726505115000}'),s={name:"en/development/stores.md"},n=a("",7),i=[n];function r(l,c,d,h,p,m){return t(),o("div",null,i)}const b=e(s,[["render",r]]);export{f as __pageData,b as default}; diff --git a/assets/en_development_testing.md.TnLw7eh5.js b/assets/en_development_testing.md.DUS-xi7M.js similarity index 97% rename from assets/en_development_testing.md.TnLw7eh5.js rename to assets/en_development_testing.md.DUS-xi7M.js index 859e1455e..f1b0c93c7 100644 --- a/assets/en_development_testing.md.TnLw7eh5.js +++ b/assets/en_development_testing.md.DUS-xi7M.js @@ -1 +1 @@ -import{_ as e,o as t,c as s,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Testing","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/testing.md","filePath":"en/development/testing.md","lastUpdated":1726474804000}'),n={name:"en/development/testing.md"},r=a('

Testing

Do I need testing on the frontend?

There are several types of tests, among them are unit tests and integration (e2e) tests

Unit testing in Vue is done by Vitest, Jest.

You should be more careful with front-end testing, as writing and rewriting tests can often take time comparable to the development itself. At the same time, the usefulness of these tests will be highly questionable. Their expediency appears on large projects with a large number of developers. There unit tests also take time but reduce the probability that someone will mess something up. At the same time, unit tests are not the most necessary ingredient for quick MVP creation at a startup.

Frontend development in this aspect is very different from backend development, where unit tests are really useful.

Good article on this topic - Unit Test Fetish

What are e2e tests?

On the front end, especially for a web application that is already in production and needs to be updated from time to time, e2e tests are important.

e2e (end-to-end) testing is a software testing process that simulates real user actions at the interface level.

In this case, a browser will be launched (usually in headless mode - without UI), and it will use the scripts written to check the work of the site - the presence of elements on the page, the possibility of login, etc.

The main tools for e2e testing are Cypress, WebdriverIO.

In CI/CD projects, running tests is one of the main moments along with linting and build.

',3),i=[r];function o(l,p,d,h,c,m){return t(),s("div",null,i)}const g=e(n,[["render",o]]);export{u as __pageData,g as default}; +import{_ as e,o as t,c as s,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Testing","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/testing.md","filePath":"en/development/testing.md","lastUpdated":1726505115000}'),n={name:"en/development/testing.md"},r=a('

Testing

Do I need testing on the frontend?

There are several types of tests, among them are unit tests and integration (e2e) tests

Unit testing in Vue is done by Vitest, Jest.

You should be more careful with front-end testing, as writing and rewriting tests can often take time comparable to the development itself. At the same time, the usefulness of these tests will be highly questionable. Their expediency appears on large projects with a large number of developers. There unit tests also take time but reduce the probability that someone will mess something up. At the same time, unit tests are not the most necessary ingredient for quick MVP creation at a startup.

Frontend development in this aspect is very different from backend development, where unit tests are really useful.

Good article on this topic - Unit Test Fetish

What are e2e tests?

On the front end, especially for a web application that is already in production and needs to be updated from time to time, e2e tests are important.

e2e (end-to-end) testing is a software testing process that simulates real user actions at the interface level.

In this case, a browser will be launched (usually in headless mode - without UI), and it will use the scripts written to check the work of the site - the presence of elements on the page, the possibility of login, etc.

The main tools for e2e testing are Cypress, WebdriverIO.

In CI/CD projects, running tests is one of the main moments along with linting and build.

',3),i=[r];function o(l,p,d,h,c,m){return t(),s("div",null,i)}const g=e(n,[["render",o]]);export{u as __pageData,g as default}; diff --git a/assets/en_development_testing.md.TnLw7eh5.lean.js b/assets/en_development_testing.md.DUS-xi7M.lean.js similarity index 85% rename from assets/en_development_testing.md.TnLw7eh5.lean.js rename to assets/en_development_testing.md.DUS-xi7M.lean.js index f752cbbea..a518110e2 100644 --- a/assets/en_development_testing.md.TnLw7eh5.lean.js +++ b/assets/en_development_testing.md.DUS-xi7M.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as s,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Testing","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/testing.md","filePath":"en/development/testing.md","lastUpdated":1726474804000}'),n={name:"en/development/testing.md"},r=a("",3),i=[r];function o(l,p,d,h,c,m){return t(),s("div",null,i)}const g=e(n,[["render",o]]);export{u as __pageData,g as default}; +import{_ as e,o as t,c as s,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Testing","description":"","frontmatter":{},"headers":[],"relativePath":"en/development/testing.md","filePath":"en/development/testing.md","lastUpdated":1726505115000}'),n={name:"en/development/testing.md"},r=a("",3),i=[r];function o(l,p,d,h,c,m){return t(),s("div",null,i)}const g=e(n,[["render",o]]);export{u as __pageData,g as default}; diff --git a/assets/en_frontend_about-frameworks.md.DWKg76I_.js b/assets/en_frontend_about-frameworks.md.CEU8jffD.js similarity index 99% rename from assets/en_frontend_about-frameworks.md.DWKg76I_.js rename to assets/en_frontend_about-frameworks.md.CEU8jffD.js index 67bace317..3e69788fc 100644 --- a/assets/en_frontend_about-frameworks.md.DWKg76I_.js +++ b/assets/en_frontend_about-frameworks.md.CEU8jffD.js @@ -1,4 +1,4 @@ -import{_ as e,o as a,c as t,a4 as s}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"About frontend frameworks","description":"","frontmatter":{},"headers":[],"relativePath":"en/frontend/about-frameworks.md","filePath":"en/frontend/about-frameworks.md","lastUpdated":1726474804000}'),i={name:"en/frontend/about-frameworks.md"},o=s(`

About frontend frameworks

What is "reactivity"?

Probably the most fundamental difference between a frontend program and a backend program, a microservice or even a standalone GUI application is the concept of "reactivity".

When working on a back end, the programmer is in a good position to control the flow of data. He controls where to get it from, where to send it to, who can change it, all this in a single thread or in a multithreaded system.

On the front, the UI interactivity factor plays a big role - data should be dynamically shown to the user, the user can change the data, data can be changed by different counterparties (user, backend, internal calculations). In principle, it is possible to use the usual programmer approaches as on the backend - i.e., self-monitor the data changes in each place, and perform updates of all dependencies. This will give a lot of boilerplate - routine repetitive code. Reactive frameworks have made programmers' lives a lot easier by taking care of this updating of a variable's dependencies when it changes.

In a reactive framework, all you need to do is define a reactive variable and specify that it is, for example, the value of an input field. When the user enters a value into this field, the variable will be automatically updated, and all other variables that depend on it will be updated as well. You don't need to write any code for this.

Simplistically speaking, under the hood, a reactive variable is a proxy wrapper over an ordinary variable, which keeps track of its changes and registers all the listeners who need to be notified of the variable's change so that they can recalculate themselves.

What reactive frontend frameworks exist

React, Vue, Angular are the most common. There are many others that have not taken off.

Angular is usually used for large projects (large teams of different levels of programmers) and tightly clamps development into its rules.

React and Vue are more flexible and similar, but there are significant differences.

Vue is faster, smaller, more efficient, doesn't mix HTML and JS, has a lower threshold of entry. Actively evolving.

Behind React- Zuckerberg and a greateŕl prevalence. More job offers, but also more applicants per job.

Why Vue?

To be able to develop and manage large complex software systems, OOP - object-oriented programming - was invented, where new entities - objects - were introduced to hierarchize complexity. They encapsulated data and behavior (logic).

On the frontend, the situation is a bit different due to the presence of code in several programming languages - HTML, CSS, JavaScript. And in this case, the SFC components in Vue serve perfectly to break down the complexity of the system. Each component encapsulates the HTML template, its styling and logic.

Vue does this much better than the same React, which lumps everything together. In this aspect, Vue is unequivocally the flagship of component-oriented programming (COP) on the frontend.

In addition, Vue 3 introduced reactivity beyond components - ref and reactive variables can be set in a simple js module. This is used in composable functions. It has become possible to separate not only the reactive service (useI18n, useScreenSize for example) but also the business logic (useShoppingCart, useNewsWidget) from the view. This allows to use MVC pattern on the frontend, where the roles of View and partially Controller are performed by components responsible mainly for visualization, and the logic and model (Model and partially Controller) fall on composable functions and their reactive state.

This makes it possible to make, for example, changing the site design or replacing the UI library a much easier task.

This feature also makes Vue stand out from other reactive frameworks.

The Reactivity API in Vue 3 may not be perfect yet (which is why creator of the Vue.js Evan You has been experimenting with Reactivity Transform), but it's already quite suitable for developing large, robust, scalable systems, which was not the case with Vue 2.

TIP

Vue's reactivity can be used without UIs at all. For example, this VS Code extension uses the Vue 3 elements reactive, ref, and watch to organize reactivity in code without visual components.

What can Vue do that React or Svelte can't?

Vue handles reactive data more efficiently.

Adding a new element to an array:

js
// React
+import{_ as e,o as a,c as t,a4 as s}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"About frontend frameworks","description":"","frontmatter":{},"headers":[],"relativePath":"en/frontend/about-frameworks.md","filePath":"en/frontend/about-frameworks.md","lastUpdated":1726505115000}'),i={name:"en/frontend/about-frameworks.md"},o=s(`

About frontend frameworks

What is "reactivity"?

Probably the most fundamental difference between a frontend program and a backend program, a microservice or even a standalone GUI application is the concept of "reactivity".

When working on a back end, the programmer is in a good position to control the flow of data. He controls where to get it from, where to send it to, who can change it, all this in a single thread or in a multithreaded system.

On the front, the UI interactivity factor plays a big role - data should be dynamically shown to the user, the user can change the data, data can be changed by different counterparties (user, backend, internal calculations). In principle, it is possible to use the usual programmer approaches as on the backend - i.e., self-monitor the data changes in each place, and perform updates of all dependencies. This will give a lot of boilerplate - routine repetitive code. Reactive frameworks have made programmers' lives a lot easier by taking care of this updating of a variable's dependencies when it changes.

In a reactive framework, all you need to do is define a reactive variable and specify that it is, for example, the value of an input field. When the user enters a value into this field, the variable will be automatically updated, and all other variables that depend on it will be updated as well. You don't need to write any code for this.

Simplistically speaking, under the hood, a reactive variable is a proxy wrapper over an ordinary variable, which keeps track of its changes and registers all the listeners who need to be notified of the variable's change so that they can recalculate themselves.

What reactive frontend frameworks exist

React, Vue, Angular are the most common. There are many others that have not taken off.

Angular is usually used for large projects (large teams of different levels of programmers) and tightly clamps development into its rules.

React and Vue are more flexible and similar, but there are significant differences.

Vue is faster, smaller, more efficient, doesn't mix HTML and JS, has a lower threshold of entry. Actively evolving.

Behind React- Zuckerberg and a greateŕl prevalence. More job offers, but also more applicants per job.

Why Vue?

To be able to develop and manage large complex software systems, OOP - object-oriented programming - was invented, where new entities - objects - were introduced to hierarchize complexity. They encapsulated data and behavior (logic).

On the frontend, the situation is a bit different due to the presence of code in several programming languages - HTML, CSS, JavaScript. And in this case, the SFC components in Vue serve perfectly to break down the complexity of the system. Each component encapsulates the HTML template, its styling and logic.

Vue does this much better than the same React, which lumps everything together. In this aspect, Vue is unequivocally the flagship of component-oriented programming (COP) on the frontend.

In addition, Vue 3 introduced reactivity beyond components - ref and reactive variables can be set in a simple js module. This is used in composable functions. It has become possible to separate not only the reactive service (useI18n, useScreenSize for example) but also the business logic (useShoppingCart, useNewsWidget) from the view. This allows to use MVC pattern on the frontend, where the roles of View and partially Controller are performed by components responsible mainly for visualization, and the logic and model (Model and partially Controller) fall on composable functions and their reactive state.

This makes it possible to make, for example, changing the site design or replacing the UI library a much easier task.

This feature also makes Vue stand out from other reactive frameworks.

The Reactivity API in Vue 3 may not be perfect yet (which is why creator of the Vue.js Evan You has been experimenting with Reactivity Transform), but it's already quite suitable for developing large, robust, scalable systems, which was not the case with Vue 2.

TIP

Vue's reactivity can be used without UIs at all. For example, this VS Code extension uses the Vue 3 elements reactive, ref, and watch to organize reactivity in code without visual components.

What can Vue do that React or Svelte can't?

Vue handles reactive data more efficiently.

Adding a new element to an array:

js
// React
 setSomeArr([...someArr, newItem]);
 
 // Svelte
diff --git a/assets/en_frontend_about-frameworks.md.DWKg76I_.lean.js b/assets/en_frontend_about-frameworks.md.CEU8jffD.lean.js
similarity index 86%
rename from assets/en_frontend_about-frameworks.md.DWKg76I_.lean.js
rename to assets/en_frontend_about-frameworks.md.CEU8jffD.lean.js
index 5bf0f778c..e7c7ecc01 100644
--- a/assets/en_frontend_about-frameworks.md.DWKg76I_.lean.js
+++ b/assets/en_frontend_about-frameworks.md.CEU8jffD.lean.js
@@ -1 +1 @@
-import{_ as e,o as a,c as t,a4 as s}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"About frontend frameworks","description":"","frontmatter":{},"headers":[],"relativePath":"en/frontend/about-frameworks.md","filePath":"en/frontend/about-frameworks.md","lastUpdated":1726474804000}'),i={name:"en/frontend/about-frameworks.md"},o=s("",5),n=[o];function r(l,c,d,p,h,m){return a(),t("div",null,n)}const g=e(i,[["render",r]]);export{f as __pageData,g as default};
+import{_ as e,o as a,c as t,a4 as s}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"About frontend frameworks","description":"","frontmatter":{},"headers":[],"relativePath":"en/frontend/about-frameworks.md","filePath":"en/frontend/about-frameworks.md","lastUpdated":1726505115000}'),i={name:"en/frontend/about-frameworks.md"},o=s("",5),n=[o];function r(l,c,d,p,h,m){return a(),t("div",null,n)}const g=e(i,[["render",r]]);export{f as __pageData,g as default};
diff --git a/assets/en_frontend_architecture.md.CkpLyRNO.js b/assets/en_frontend_architecture.md.BkhCoTK6.js
similarity index 99%
rename from assets/en_frontend_architecture.md.CkpLyRNO.js
rename to assets/en_frontend_architecture.md.BkhCoTK6.js
index 19f700b79..2a4b5e20a 100644
--- a/assets/en_frontend_architecture.md.CkpLyRNO.js
+++ b/assets/en_frontend_architecture.md.BkhCoTK6.js
@@ -1 +1 @@
-import{_ as e,o as t,c as a,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Frontend application architecture","description":"","frontmatter":{},"headers":[],"relativePath":"en/frontend/architecture.md","filePath":"en/frontend/architecture.md","lastUpdated":1726474804000}'),i={name:"en/frontend/architecture.md"},n=o('

Frontend application architecture

What is a good web application architecture

There are different theoretical definitions and justifications for this concept, but roughly speaking it is the following.

Let's say you are developing a project, already at the final stage. A customer comes to you and says something like: I want to add a shadow to all buttons, I want to change the UI library, we decided to support multiple languages, we decided to replace this module with another, we need to make more detailed adaptability for different resolutions, we decided to add themes, we are changing the provider of payment processing services, we have an increasing number of users / the site is slowing down / need to speed it up, need to increase the level of security of the site, we took a middle programmer, bring him up to speed quickly, and let him add functionality or fix the b

A good frontend application architecture allows you to accomplish all of this most efficiently with the least amount of effort.

OOP on the frontend

Many people coming from development in object-oriented languages try to use OOP concepts on the frontend and program with classes, inheritance, polymorphism and other things.

This is a mistake. The main computations on the front end are related to UI - displaying data, handling user interaction. Class systems and microservices are simply not needed on them. Of course, you can create a basic button, wrap it in two custom components and consider it inheritance, but you can't do it in code. That's why you have to learn to think in other categories - components, composable functions, js modules. And use your JavaScript power, not trying to stretch it on OOP.

At the same time, a good analogy of an object with a global ("static") and local ("object") state is a composable function. It can be used in certain situations.

Multithreading and asynchronicity

Multithreading is when a programmer can create a separate thread and run his specific code in it. For example, you can create two threads, one in an infinite loop outputs "Thread A" to the console and the other "Thread B". These strings will alternate in the output. You can prioritize the threads, and then the thread with priority 3 will output messages 3 times more often than the thread with priority 1.

These two threads should be executed simultaneously, but this is conditional. Because if there are 10 threads and the processor is dual-core with two threads per core, it is physically impossible to execute more than 4 simultaneous threads. That's why threads are divided into pieces of code and they are executed one by one - this is called concurrency.

In the JavaScript world, threads can become queued at the JS runtime, OS, CPU level. Common desktop applications (for example, IDEs) can also have good support for parallelization on multi-core processors - and then they use CPUs as efficiently as possible, or load only one core. In the latter case, upgrading to a newer multi-core CPU will do almost nothing if the old and the new one have approximately the same frequency.

Asynchronicity is when there is some non-blocking function whose exact execution time is unknown. And the programmer can specify the code to be executed after this function is executed (pass a callback). Promises and async/await are non-trivial but still just convenient wrappers over this logic.

So, with asynchronicity, there is usually some border function that depends on external circumstances (fetch, nextTick, fs.readdir, setTimeout). Its "pseudo-parallel" execution in one thread together with the main code is provided by the Event Loop mechanism.

Thus, these are completely different things both in purpose and usage. asynchronicity in JavaScript is realized through promises and async/await, multithreading or its similarity is realized by rantime (Web workers, worker_threads).

Asynchronicity is needed to communicate with the "outside world", including browser rendering. Multithreading allows to separate resource-intensive computations (as well as network requests) into separate threads (Web workers), which reduces the load on the main thread, which is responsible for rendering. This has a favorable effect on the responsiveness of your UI.

Useful tips
Avoid dependencies

If there is a possibility not to introduce a new dependency (not to plug in a new npm package) - don't do it. It may save you a bit of time, but a third-party library will sooner or later become obsolete, no longer supported, and may have a vulnerability. Besides, it increases the size of your bundle, which directly affects the performance of your application. Tree shaking is good in advertising, but it doesn't always work in reality.

If you need, for example, the debounce function, don't hurry to plug it together with some library. Google its implementation and copy 15 lines of code and make your own function.


Use wrappers over components of UI libraries and third-party utilities

If you use components of some UI library, don't use them directly - make wrappers for them. For example, BaseButton or BaseInput. This will make styling the components much easier, and will also make it much easier to switch to another library, or replace them with your own components.

The same goes for utilities.


Regular refactoring

Do code refactoring from time to time, moving components and modules to where they should logically be, renaming them, and structuring and improving the code itself. This is good for both the code and your professional growth.


Use CSS3

Try to use pure CSS3 for adaptability. Do not be tied to columnar models of CSS and UI libraries, unless it is a "done and forgotten, let the customer continue to suffer with it" project.

Spend a couple of days to learn Flexbox and you will be able to layout on it faster and better than on any Tailwind.


Use modern standards and language features

For example, HTML5 semantic elements - aside, header, section, article, details, etc.

CSS3 - Flexbox and Grid, Container query


Document the project

Draw use-case and other diagrams, describe the main functionality of the project and important details of its implementation - this will at least raise your level as a software developer.

VitePress is a very handy tool for technical documentation.

',5),r=[n];function s(d,c,l,h,u,p){return t(),a("div",null,r)}const y=e(i,[["render",s]]);export{f as __pageData,y as default}; +import{_ as e,o as t,c as a,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Frontend application architecture","description":"","frontmatter":{},"headers":[],"relativePath":"en/frontend/architecture.md","filePath":"en/frontend/architecture.md","lastUpdated":1726505115000}'),i={name:"en/frontend/architecture.md"},n=o('

Frontend application architecture

What is a good web application architecture

There are different theoretical definitions and justifications for this concept, but roughly speaking it is the following.

Let's say you are developing a project, already at the final stage. A customer comes to you and says something like: I want to add a shadow to all buttons, I want to change the UI library, we decided to support multiple languages, we decided to replace this module with another, we need to make more detailed adaptability for different resolutions, we decided to add themes, we are changing the provider of payment processing services, we have an increasing number of users / the site is slowing down / need to speed it up, need to increase the level of security of the site, we took a middle programmer, bring him up to speed quickly, and let him add functionality or fix the b

A good frontend application architecture allows you to accomplish all of this most efficiently with the least amount of effort.

OOP on the frontend

Many people coming from development in object-oriented languages try to use OOP concepts on the frontend and program with classes, inheritance, polymorphism and other things.

This is a mistake. The main computations on the front end are related to UI - displaying data, handling user interaction. Class systems and microservices are simply not needed on them. Of course, you can create a basic button, wrap it in two custom components and consider it inheritance, but you can't do it in code. That's why you have to learn to think in other categories - components, composable functions, js modules. And use your JavaScript power, not trying to stretch it on OOP.

At the same time, a good analogy of an object with a global ("static") and local ("object") state is a composable function. It can be used in certain situations.

Multithreading and asynchronicity

Multithreading is when a programmer can create a separate thread and run his specific code in it. For example, you can create two threads, one in an infinite loop outputs "Thread A" to the console and the other "Thread B". These strings will alternate in the output. You can prioritize the threads, and then the thread with priority 3 will output messages 3 times more often than the thread with priority 1.

These two threads should be executed simultaneously, but this is conditional. Because if there are 10 threads and the processor is dual-core with two threads per core, it is physically impossible to execute more than 4 simultaneous threads. That's why threads are divided into pieces of code and they are executed one by one - this is called concurrency.

In the JavaScript world, threads can become queued at the JS runtime, OS, CPU level. Common desktop applications (for example, IDEs) can also have good support for parallelization on multi-core processors - and then they use CPUs as efficiently as possible, or load only one core. In the latter case, upgrading to a newer multi-core CPU will do almost nothing if the old and the new one have approximately the same frequency.

Asynchronicity is when there is some non-blocking function whose exact execution time is unknown. And the programmer can specify the code to be executed after this function is executed (pass a callback). Promises and async/await are non-trivial but still just convenient wrappers over this logic.

So, with asynchronicity, there is usually some border function that depends on external circumstances (fetch, nextTick, fs.readdir, setTimeout). Its "pseudo-parallel" execution in one thread together with the main code is provided by the Event Loop mechanism.

Thus, these are completely different things both in purpose and usage. asynchronicity in JavaScript is realized through promises and async/await, multithreading or its similarity is realized by rantime (Web workers, worker_threads).

Asynchronicity is needed to communicate with the "outside world", including browser rendering. Multithreading allows to separate resource-intensive computations (as well as network requests) into separate threads (Web workers), which reduces the load on the main thread, which is responsible for rendering. This has a favorable effect on the responsiveness of your UI.

Useful tips
Avoid dependencies

If there is a possibility not to introduce a new dependency (not to plug in a new npm package) - don't do it. It may save you a bit of time, but a third-party library will sooner or later become obsolete, no longer supported, and may have a vulnerability. Besides, it increases the size of your bundle, which directly affects the performance of your application. Tree shaking is good in advertising, but it doesn't always work in reality.

If you need, for example, the debounce function, don't hurry to plug it together with some library. Google its implementation and copy 15 lines of code and make your own function.


Use wrappers over components of UI libraries and third-party utilities

If you use components of some UI library, don't use them directly - make wrappers for them. For example, BaseButton or BaseInput. This will make styling the components much easier, and will also make it much easier to switch to another library, or replace them with your own components.

The same goes for utilities.


Regular refactoring

Do code refactoring from time to time, moving components and modules to where they should logically be, renaming them, and structuring and improving the code itself. This is good for both the code and your professional growth.


Use CSS3

Try to use pure CSS3 for adaptability. Do not be tied to columnar models of CSS and UI libraries, unless it is a "done and forgotten, let the customer continue to suffer with it" project.

Spend a couple of days to learn Flexbox and you will be able to layout on it faster and better than on any Tailwind.


Use modern standards and language features

For example, HTML5 semantic elements - aside, header, section, article, details, etc.

CSS3 - Flexbox and Grid, Container query


Document the project

Draw use-case and other diagrams, describe the main functionality of the project and important details of its implementation - this will at least raise your level as a software developer.

VitePress is a very handy tool for technical documentation.

',5),r=[n];function s(d,c,l,h,u,p){return t(),a("div",null,r)}const y=e(i,[["render",s]]);export{f as __pageData,y as default}; diff --git a/assets/en_frontend_architecture.md.CkpLyRNO.lean.js b/assets/en_frontend_architecture.md.BkhCoTK6.lean.js similarity index 86% rename from assets/en_frontend_architecture.md.CkpLyRNO.lean.js rename to assets/en_frontend_architecture.md.BkhCoTK6.lean.js index 4ab7c9afb..a3b644384 100644 --- a/assets/en_frontend_architecture.md.CkpLyRNO.lean.js +++ b/assets/en_frontend_architecture.md.BkhCoTK6.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as a,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Frontend application architecture","description":"","frontmatter":{},"headers":[],"relativePath":"en/frontend/architecture.md","filePath":"en/frontend/architecture.md","lastUpdated":1726474804000}'),i={name:"en/frontend/architecture.md"},n=o("",5),r=[n];function s(d,c,l,h,u,p){return t(),a("div",null,r)}const y=e(i,[["render",s]]);export{f as __pageData,y as default}; +import{_ as e,o as t,c as a,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Frontend application architecture","description":"","frontmatter":{},"headers":[],"relativePath":"en/frontend/architecture.md","filePath":"en/frontend/architecture.md","lastUpdated":1726505115000}'),i={name:"en/frontend/architecture.md"},n=o("",5),r=[n];function s(d,c,l,h,u,p){return t(),a("div",null,r)}const y=e(i,[["render",s]]);export{f as __pageData,y as default}; diff --git a/assets/en_frontend_css-ui-libs.md.Bpi44fbh.js b/assets/en_frontend_css-ui-libs.md.Bb3-p9Xo.js similarity index 98% rename from assets/en_frontend_css-ui-libs.md.Bpi44fbh.js rename to assets/en_frontend_css-ui-libs.md.Bb3-p9Xo.js index e83069225..b70c0a87d 100644 --- a/assets/en_frontend_css-ui-libs.md.Bpi44fbh.js +++ b/assets/en_frontend_css-ui-libs.md.Bb3-p9Xo.js @@ -1,4 +1,4 @@ -import{_ as e,o as s,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"CSS and UI libraries","description":"","frontmatter":{},"headers":[],"relativePath":"en/frontend/css-ui-libs.md","filePath":"en/frontend/css-ui-libs.md","lastUpdated":1726474804000}'),i={name:"en/frontend/css-ui-libs.md"},n=t(`

CSS and UI libraries

What are CSS and UI libraries?

CSS and UI libraries either provide their own or help you create custom UI components like Button or Select? which can speed up your development.

CSS libraries do not contain JavaScript code and therefore have limitations for complex components like Select or Dropdown.

There is a separate type of Headless-UI libraries that offer components without stylized visualization - only component logic and Accessibility requirements. The developer needs to add CSS styles himself.

Pros and cons of UI libraries?

Pros: shortens the development, if you use it on the project as much as possible, brings a unified style to the application

Cons: as any dependency can become obsolete (Vuetify 2 tragedy), adds weight to the final bundle.

How to reduce dependency on foreign libraries?

Wrap up UI library components in your own custom components.

vue
<!-- BaseButton.vue -->
+import{_ as e,o as s,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"CSS and UI libraries","description":"","frontmatter":{},"headers":[],"relativePath":"en/frontend/css-ui-libs.md","filePath":"en/frontend/css-ui-libs.md","lastUpdated":1726505115000}'),i={name:"en/frontend/css-ui-libs.md"},n=t(`

CSS and UI libraries

What are CSS and UI libraries?

CSS and UI libraries either provide their own or help you create custom UI components like Button or Select? which can speed up your development.

CSS libraries do not contain JavaScript code and therefore have limitations for complex components like Select or Dropdown.

There is a separate type of Headless-UI libraries that offer components without stylized visualization - only component logic and Accessibility requirements. The developer needs to add CSS styles himself.

Pros and cons of UI libraries?

Pros: shortens the development, if you use it on the project as much as possible, brings a unified style to the application

Cons: as any dependency can become obsolete (Vuetify 2 tragedy), adds weight to the final bundle.

How to reduce dependency on foreign libraries?

Wrap up UI library components in your own custom components.

vue
<!-- BaseButton.vue -->
 <template>
   <QButton ... />
 </template>

and use BaseButton in your code. This way it will be much easier for you to upgrade, replace the library or replace this component with a self-designed one. And even just change the styles of the component.

Layout and adaptability of pages by means of CSS and UI libraries

Using the column system and other functionality of CSS and UI libraries like the popular Tailwind is convenient for small projects and sometimes speeds up layout, but very much worsens the quality of the code as a whole, including its maintainability and extensibility. It's as if the world went back to the days of IE6, when all styles and JavaScript were also located in tag attributes, and the whole evolution of CSS into a clear, convenient, beautiful hierarchical class model was for nothing, just like the division of the web into document (template), presentation layer (CSS styles) and logic (JavaScript).

The web is full of articles why an approach like Tailwind is a bad thing. We can only note that with proper skill, layout on pure CSS3 is also fast and much more convenient and pleasant in terms of DX than through CSS and UI libraries.

Quote

Good developers know the reasons why standards, patterns and good practices have become the way they are.

Bad developers stick to whatever new trend that might save them some learning curve.

`,5),o=[n];function l(r,d,p,c,h,u){return s(),a("div",null,o)}const b=e(i,[["render",l]]);export{y as __pageData,b as default}; diff --git a/assets/en_frontend_css-ui-libs.md.Bpi44fbh.lean.js b/assets/en_frontend_css-ui-libs.md.Bb3-p9Xo.lean.js similarity index 86% rename from assets/en_frontend_css-ui-libs.md.Bpi44fbh.lean.js rename to assets/en_frontend_css-ui-libs.md.Bb3-p9Xo.lean.js index e455b7c49..1f1d39ae0 100644 --- a/assets/en_frontend_css-ui-libs.md.Bpi44fbh.lean.js +++ b/assets/en_frontend_css-ui-libs.md.Bb3-p9Xo.lean.js @@ -1 +1 @@ -import{_ as e,o as s,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"CSS and UI libraries","description":"","frontmatter":{},"headers":[],"relativePath":"en/frontend/css-ui-libs.md","filePath":"en/frontend/css-ui-libs.md","lastUpdated":1726474804000}'),i={name:"en/frontend/css-ui-libs.md"},n=t("",5),o=[n];function l(r,d,p,c,h,u){return s(),a("div",null,o)}const b=e(i,[["render",l]]);export{y as __pageData,b as default}; +import{_ as e,o as s,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"CSS and UI libraries","description":"","frontmatter":{},"headers":[],"relativePath":"en/frontend/css-ui-libs.md","filePath":"en/frontend/css-ui-libs.md","lastUpdated":1726505115000}'),i={name:"en/frontend/css-ui-libs.md"},n=t("",5),o=[n];function l(r,d,p,c,h,u){return s(),a("div",null,o)}const b=e(i,[["render",l]]);export{y as __pageData,b as default}; diff --git a/assets/en_frontend_learning.md.2TwiugwY.js b/assets/en_frontend_learning.md.soE0AxXc.js similarity index 99% rename from assets/en_frontend_learning.md.2TwiugwY.js rename to assets/en_frontend_learning.md.soE0AxXc.js index 148f48b03..082020335 100644 --- a/assets/en_frontend_learning.md.2TwiugwY.js +++ b/assets/en_frontend_learning.md.soE0AxXc.js @@ -1 +1 @@ -import{_ as e,o as t,c as a,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Learning Vue","description":"","frontmatter":{},"headers":[],"relativePath":"en/frontend/learning.md","filePath":"en/frontend/learning.md","lastUpdated":1726474804000}'),r={name:"en/frontend/learning.md"},s=o('

Learning Vue

Sources of information on Vue

For some reason, it is believed that there are only two ways to get knowledge on frontend - Vue documentation and tutorial videos from YouTube and all kinds of courses.

But documentation is not a textbook, but a reference book, and it is very difficult to separate grains from chaff on YouTube. I met some useful videos, but all of them were intended for developers who already know Vue quite well and showed some new or non-standard moments.


The main teacher should be a book that teaches, not a reference book.

An excellent Vue tutorial in English is the May 2023 Vue.js 3 Design Patterns and Best Practices. You can register on oReilly and read for 10 days for free. Even download it. In spite of the title, the book teaches programming, and from a fairly basic level.

Code examples from the book are in the public repository and well worth studying.

Note

We can draw an analogy between a good developer and a driver:

  1. learning the basics of driving, traffic rules and the internal combustion engine - Vue documentation and JavaScript specification
  2. Practical driving training at a driving school - good textbooks like "Vue.js 3 Design Patterns and Best Practices"
  3. Real driving experience - commercial development experience
  4. Extreme driving courses, put a glass of water on the hood and drive a twenty year old car with a manual transmission through broken streets - quality open source projects and certifications

It is impossible to become a good developer/driver both without 1. and only with 1. Training videos from the internet (both paid and free) can both be part of 4. and be completely useless and even harmful (very often), depending on their quality and the motivation of the student.

Vue 2 or Vue 3?

Vue 3.
Composition API.

If you need Vue 2 to support an existing project, you'll know the answer to that question yourself.

The difference between Vue 2 and Vue 3 is big. It's not a case of learning the previous version beforehand to better and more easily understand the next one.

Do I need to know JavaScript beforehand?

Absolutely, at least an intermediate level. If not, I would suggest taking a short javascript course first, so that the person knows about the document object, knows how to handle array methods and is not too afraid of promises. Also, HTML and CSS at least at a basic level.

Here is an easy to read book - "Morgan N. - JavaScript for Kids. A Programming Self-Tutorial - 2016. Before you start learning Vue, it is advisable to understand 70% of the first part as well as paragraphs 10 and 12.


tip

Also an absolutely necessary pre-skill is the ability to google.

Is there a certification for Vue?

Vue.js Certification

Vue Style Guide

Be sure to check out the Vue Style Guide and try to follow its best practices when writing code.

Go back to this source from time to time and improve your code.

ESlint also helps you keep your code in line with best practices.

Do I need a mentor?

A mentor is useful for both a beginner and an experienced developer. You can uselessly kill two days to solve a problem that can be explained in 20 minutes by a more experienced person. And this two-day "experience" will never be useful again.

In companies, this role is usually played by more competent and friendly colleagues.

There are services like Solvery on the Internet that can help in this matter.

I still want video

There are quality ones from Vue Mastery, but most are outdated.

What else to look at besides Vue? React?

You can do React if you have a real option to use that knowledge, but it's much better to expand your developer horizons. Try to write a simple API on the backend. The easiest and most convenient language for this is PHP, but you can also use Node.js or Python. Try JSON-RPC and WebSockets transport protocols. Upload your application to GitHub Pages or another similar service, experiment with GitHub Actions - they help a lot with deploy automation and CI/CD in general. Work with Cloud providers (many offer free resources), set up a virtual server. Register a domain, make a product finished site - even if it's just your resume site or something basic on VitePress (used by this site). Work with FireStore and open APIs for various data. Check out Swagger. Learn SQL, install MySQL and play around with it, or do it on SupaBase. Understanding how data is stored and processed on the backend will help a lot in choosing the right strategies on the frontend.

Study how the modern internet works and what technologies and best practices are prevalent on it now.

',9),n=[s];function i(l,d,u,c,p,h){return t(),a("div",null,n)}const b=e(r,[["render",i]]);export{f as __pageData,b as default}; +import{_ as e,o as t,c as a,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Learning Vue","description":"","frontmatter":{},"headers":[],"relativePath":"en/frontend/learning.md","filePath":"en/frontend/learning.md","lastUpdated":1726505115000}'),r={name:"en/frontend/learning.md"},s=o('

Learning Vue

Sources of information on Vue

For some reason, it is believed that there are only two ways to get knowledge on frontend - Vue documentation and tutorial videos from YouTube and all kinds of courses.

But documentation is not a textbook, but a reference book, and it is very difficult to separate grains from chaff on YouTube. I met some useful videos, but all of them were intended for developers who already know Vue quite well and showed some new or non-standard moments.


The main teacher should be a book that teaches, not a reference book.

An excellent Vue tutorial in English is the May 2023 Vue.js 3 Design Patterns and Best Practices. You can register on oReilly and read for 10 days for free. Even download it. In spite of the title, the book teaches programming, and from a fairly basic level.

Code examples from the book are in the public repository and well worth studying.

Note

We can draw an analogy between a good developer and a driver:

  1. learning the basics of driving, traffic rules and the internal combustion engine - Vue documentation and JavaScript specification
  2. Practical driving training at a driving school - good textbooks like "Vue.js 3 Design Patterns and Best Practices"
  3. Real driving experience - commercial development experience
  4. Extreme driving courses, put a glass of water on the hood and drive a twenty year old car with a manual transmission through broken streets - quality open source projects and certifications

It is impossible to become a good developer/driver both without 1. and only with 1. Training videos from the internet (both paid and free) can both be part of 4. and be completely useless and even harmful (very often), depending on their quality and the motivation of the student.

Vue 2 or Vue 3?

Vue 3.
Composition API.

If you need Vue 2 to support an existing project, you'll know the answer to that question yourself.

The difference between Vue 2 and Vue 3 is big. It's not a case of learning the previous version beforehand to better and more easily understand the next one.

Do I need to know JavaScript beforehand?

Absolutely, at least an intermediate level. If not, I would suggest taking a short javascript course first, so that the person knows about the document object, knows how to handle array methods and is not too afraid of promises. Also, HTML and CSS at least at a basic level.

Here is an easy to read book - "Morgan N. - JavaScript for Kids. A Programming Self-Tutorial - 2016. Before you start learning Vue, it is advisable to understand 70% of the first part as well as paragraphs 10 and 12.


tip

Also an absolutely necessary pre-skill is the ability to google.

Is there a certification for Vue?

Vue.js Certification

Vue Style Guide

Be sure to check out the Vue Style Guide and try to follow its best practices when writing code.

Go back to this source from time to time and improve your code.

ESlint also helps you keep your code in line with best practices.

Do I need a mentor?

A mentor is useful for both a beginner and an experienced developer. You can uselessly kill two days to solve a problem that can be explained in 20 minutes by a more experienced person. And this two-day "experience" will never be useful again.

In companies, this role is usually played by more competent and friendly colleagues.

There are services like Solvery on the Internet that can help in this matter.

I still want video

There are quality ones from Vue Mastery, but most are outdated.

What else to look at besides Vue? React?

You can do React if you have a real option to use that knowledge, but it's much better to expand your developer horizons. Try to write a simple API on the backend. The easiest and most convenient language for this is PHP, but you can also use Node.js or Python. Try JSON-RPC and WebSockets transport protocols. Upload your application to GitHub Pages or another similar service, experiment with GitHub Actions - they help a lot with deploy automation and CI/CD in general. Work with Cloud providers (many offer free resources), set up a virtual server. Register a domain, make a product finished site - even if it's just your resume site or something basic on VitePress (used by this site). Work with FireStore and open APIs for various data. Check out Swagger. Learn SQL, install MySQL and play around with it, or do it on SupaBase. Understanding how data is stored and processed on the backend will help a lot in choosing the right strategies on the frontend.

Study how the modern internet works and what technologies and best practices are prevalent on it now.

',9),n=[s];function i(l,d,u,c,p,h){return t(),a("div",null,n)}const b=e(r,[["render",i]]);export{f as __pageData,b as default}; diff --git a/assets/en_frontend_learning.md.2TwiugwY.lean.js b/assets/en_frontend_learning.md.soE0AxXc.lean.js similarity index 85% rename from assets/en_frontend_learning.md.2TwiugwY.lean.js rename to assets/en_frontend_learning.md.soE0AxXc.lean.js index 414c67b47..78ac01a39 100644 --- a/assets/en_frontend_learning.md.2TwiugwY.lean.js +++ b/assets/en_frontend_learning.md.soE0AxXc.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as a,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Learning Vue","description":"","frontmatter":{},"headers":[],"relativePath":"en/frontend/learning.md","filePath":"en/frontend/learning.md","lastUpdated":1726474804000}'),r={name:"en/frontend/learning.md"},s=o("",9),n=[s];function i(l,d,u,c,p,h){return t(),a("div",null,n)}const b=e(r,[["render",i]]);export{f as __pageData,b as default}; +import{_ as e,o as t,c as a,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Learning Vue","description":"","frontmatter":{},"headers":[],"relativePath":"en/frontend/learning.md","filePath":"en/frontend/learning.md","lastUpdated":1726505115000}'),r={name:"en/frontend/learning.md"},s=o("",9),n=[s];function i(l,d,u,c,p,h){return t(),a("div",null,n)}const b=e(r,[["render",i]]);export{f as __pageData,b as default}; diff --git a/assets/en_frontend_spa-pwa-ssr-ssg.md.Cj1747nN.js b/assets/en_frontend_spa-pwa-ssr-ssg.md.DJ7VYHMy.js similarity index 99% rename from assets/en_frontend_spa-pwa-ssr-ssg.md.Cj1747nN.js rename to assets/en_frontend_spa-pwa-ssr-ssg.md.DJ7VYHMy.js index c1f2b7161..32195210d 100644 --- a/assets/en_frontend_spa-pwa-ssr-ssg.md.Cj1747nN.js +++ b/assets/en_frontend_spa-pwa-ssr-ssg.md.DJ7VYHMy.js @@ -1 +1 @@ -import{_ as e,a as t}from"./chunks/dynamic-rendering.0iLK77IQ.js";import{_ as a,o as s,c as o,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"SPA, PWA, SSG, SSR and SEO","description":"","frontmatter":{},"headers":[],"relativePath":"en/frontend/spa-pwa-ssr-ssg.md","filePath":"en/frontend/spa-pwa-ssr-ssg.md","lastUpdated":1726474804000}'),r={name:"en/frontend/spa-pwa-ssr-ssg.md"},n=i('

SPA, PWA, SSG, SSR and SEO

Web 1.0 -> Web 2.0

First there was static HTML and browsers showed it. A little bit later a little bit of JavaScript was invented to process forms and do a little animation. Then CSS came along and everyone saw that it was beautiful. Then someone proposed the idea of JSON for data format, and then Microsoft gave the world XMLHttpRequest, and JavaScript was allowed to send and receive data from the server.

That's how SPA was born.

SPA

SPA (Single Page Application) works like a regular desktop/mobile application - when first accessing the server, it receives the shell necessary to display the site, and then sends data to/from the server, usually in JSON format. This is much more efficient than the way when with each request from the server came a new HTML page with all the resources.

For the user UX increases significantly.

spa-vs-mpa

PWA

PWA (Progressive Web Application) is another step to improve user experience and make web applications as close as possible to native web applications.

With PWA, two elements are added to the SPA:

  1. Manifest. A text file with the properties of the application. With this, the icon of the web application can be set as well as native applications to the home screen of the smartphone. In addition, when PWA is launched, it may not show browser elements and appear to be a normal application.

  2. Service worker. This is a layer in the browser between the server and the browser itself that allows you to do managed caching. In other words, store the app with all the resources on the smartphone/computer so that when you start it, it will run immediately. If you don't need data from the server, the app can run offline (e.g. Notes).

You can read more about PWA on the website created by the Chrome team - https://web.dev/

Upgrading SPA to PWA is very small in labor cost, but very significant in benefit. Developing SPA and not making it a PWA is like renting a luxury hotel room but sleeping on a mat at its entrance in the corridor because it's too lazy to walk to the bedroom.

PWA -> Workbox and vite-plugin-pwa

Manifest and Service worker are so simple that creating a wrapper over SW - Workbox, and a plugin for Vite - vite-plugin-pwa is not logical. You get several times more code, need to load additional dependencies and understand wrapper configurations. Simple things have been made complex.

It is better to use Manifest and Service worker as they were created originally, and write these two simple files using templates from the specifications.

SSG

SSG (Static Site Generation) is an approach where the content of a website is pre-generated into html files, which are then distributed from the server.

Immediately suitable for indexing by search engines.

SSR

SSR (Server Side Rendering), a way of generating html on the server side, when generation occurs at the moment of request. After the client requests a page, the server executes API requests on its side and then generates the html page. Accordingly, the server needs a Node.js server, which is quite a heavy load on the hardware.

In addition, there are a lot of restrictions when writing code and using certain JavaScript and Vue features. As Google writes regarding SSR - "A rehydration problem: one app for the price of two".

SEO optimization

In order for a search engine to index a page on your site, it must receive HTML with content (text, images, video) when accessing it. With SPA sites, where content is loaded dynamically by JavaScript, this is often not possible.

The most popular and inefficient method to bypass this is to use SSR (SSG is suitable for simple structured sites without backend, like documentation).

Google allows you to see how your site looks/indexed by its crawler, which somehow still works with scripts, so first check if you need to get complicated at all.

If you find problems, you can use dynamic rendering

dynamic-rendering

The point is to handle requests from normal users and search bots differently and give them different pages. For users - SPA, for search bots - pages generated on the fly or in advance. Distribution can be handled by a webserver or an entry point to your site (index.php instead of index.html).

The above picture implies some kind of Prerenderer (which are also available as a third-party service or their own solution), but in most cases it is much easier to generate HTML page for the bot directly.

That is, for example, for a product page in an online store it can be its text description with pictures and customer reviews in any HTML formatting. For this purpose it is enough a script on PHP/Express/Python, etc. in 100-200 lines, which is much less labor-intensive than SSR solutions, and also reduces the requirements in the server "hardware" by orders of magnitude (the output can be cached in a static HTML file).

When the actual content (text, images) of such a page coincides with the content of SPA in the browser, Google does not consider the simplified version for its bot as a deception. This method has been around since before the advent of SSRs. Verified by many years of use.

PageSpeed and other performance tests

PageSpeed and similar tools are very useful in identifying unoptimized places in your web application, but it is not quite right for SPA and PWA.

More precisely, some of its metrics don't take into account UX as a whole. A well-built PWA, when first downloaded and installed, will of course lose by FCP metrics to its SSR counterpart, but after placing all its resources locally on the client's browser, no SSR will come close to it in terms of speed and user comfort, not to mention other features like offline operation and installation as a native application.

SSR can probably be useful for some exceptional cases, but in general it looks like a dead-end branch in frontend development.

',9),l=[n];function d(c,p,h,m,u,f){return s(),o("div",null,l)}const S=a(r,[["render",d]]);export{b as __pageData,S as default}; +import{_ as e,a as t}from"./chunks/dynamic-rendering.0iLK77IQ.js";import{_ as a,o as s,c as o,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"SPA, PWA, SSG, SSR and SEO","description":"","frontmatter":{},"headers":[],"relativePath":"en/frontend/spa-pwa-ssr-ssg.md","filePath":"en/frontend/spa-pwa-ssr-ssg.md","lastUpdated":1726505115000}'),r={name:"en/frontend/spa-pwa-ssr-ssg.md"},n=i('

SPA, PWA, SSG, SSR and SEO

Web 1.0 -> Web 2.0

First there was static HTML and browsers showed it. A little bit later a little bit of JavaScript was invented to process forms and do a little animation. Then CSS came along and everyone saw that it was beautiful. Then someone proposed the idea of JSON for data format, and then Microsoft gave the world XMLHttpRequest, and JavaScript was allowed to send and receive data from the server.

That's how SPA was born.

SPA

SPA (Single Page Application) works like a regular desktop/mobile application - when first accessing the server, it receives the shell necessary to display the site, and then sends data to/from the server, usually in JSON format. This is much more efficient than the way when with each request from the server came a new HTML page with all the resources.

For the user UX increases significantly.

spa-vs-mpa

PWA

PWA (Progressive Web Application) is another step to improve user experience and make web applications as close as possible to native web applications.

With PWA, two elements are added to the SPA:

  1. Manifest. A text file with the properties of the application. With this, the icon of the web application can be set as well as native applications to the home screen of the smartphone. In addition, when PWA is launched, it may not show browser elements and appear to be a normal application.

  2. Service worker. This is a layer in the browser between the server and the browser itself that allows you to do managed caching. In other words, store the app with all the resources on the smartphone/computer so that when you start it, it will run immediately. If you don't need data from the server, the app can run offline (e.g. Notes).

You can read more about PWA on the website created by the Chrome team - https://web.dev/

Upgrading SPA to PWA is very small in labor cost, but very significant in benefit. Developing SPA and not making it a PWA is like renting a luxury hotel room but sleeping on a mat at its entrance in the corridor because it's too lazy to walk to the bedroom.

PWA -> Workbox and vite-plugin-pwa

Manifest and Service worker are so simple that creating a wrapper over SW - Workbox, and a plugin for Vite - vite-plugin-pwa is not logical. You get several times more code, need to load additional dependencies and understand wrapper configurations. Simple things have been made complex.

It is better to use Manifest and Service worker as they were created originally, and write these two simple files using templates from the specifications.

SSG

SSG (Static Site Generation) is an approach where the content of a website is pre-generated into html files, which are then distributed from the server.

Immediately suitable for indexing by search engines.

SSR

SSR (Server Side Rendering), a way of generating html on the server side, when generation occurs at the moment of request. After the client requests a page, the server executes API requests on its side and then generates the html page. Accordingly, the server needs a Node.js server, which is quite a heavy load on the hardware.

In addition, there are a lot of restrictions when writing code and using certain JavaScript and Vue features. As Google writes regarding SSR - "A rehydration problem: one app for the price of two".

SEO optimization

In order for a search engine to index a page on your site, it must receive HTML with content (text, images, video) when accessing it. With SPA sites, where content is loaded dynamically by JavaScript, this is often not possible.

The most popular and inefficient method to bypass this is to use SSR (SSG is suitable for simple structured sites without backend, like documentation).

Google allows you to see how your site looks/indexed by its crawler, which somehow still works with scripts, so first check if you need to get complicated at all.

If you find problems, you can use dynamic rendering

dynamic-rendering

The point is to handle requests from normal users and search bots differently and give them different pages. For users - SPA, for search bots - pages generated on the fly or in advance. Distribution can be handled by a webserver or an entry point to your site (index.php instead of index.html).

The above picture implies some kind of Prerenderer (which are also available as a third-party service or their own solution), but in most cases it is much easier to generate HTML page for the bot directly.

That is, for example, for a product page in an online store it can be its text description with pictures and customer reviews in any HTML formatting. For this purpose it is enough a script on PHP/Express/Python, etc. in 100-200 lines, which is much less labor-intensive than SSR solutions, and also reduces the requirements in the server "hardware" by orders of magnitude (the output can be cached in a static HTML file).

When the actual content (text, images) of such a page coincides with the content of SPA in the browser, Google does not consider the simplified version for its bot as a deception. This method has been around since before the advent of SSRs. Verified by many years of use.

PageSpeed and other performance tests

PageSpeed and similar tools are very useful in identifying unoptimized places in your web application, but it is not quite right for SPA and PWA.

More precisely, some of its metrics don't take into account UX as a whole. A well-built PWA, when first downloaded and installed, will of course lose by FCP metrics to its SSR counterpart, but after placing all its resources locally on the client's browser, no SSR will come close to it in terms of speed and user comfort, not to mention other features like offline operation and installation as a native application.

SSR can probably be useful for some exceptional cases, but in general it looks like a dead-end branch in frontend development.

',9),l=[n];function d(c,p,h,m,u,f){return s(),o("div",null,l)}const S=a(r,[["render",d]]);export{b as __pageData,S as default}; diff --git a/assets/en_frontend_spa-pwa-ssr-ssg.md.Cj1747nN.lean.js b/assets/en_frontend_spa-pwa-ssr-ssg.md.DJ7VYHMy.lean.js similarity index 88% rename from assets/en_frontend_spa-pwa-ssr-ssg.md.Cj1747nN.lean.js rename to assets/en_frontend_spa-pwa-ssr-ssg.md.DJ7VYHMy.lean.js index bf6e2882f..0499167cc 100644 --- a/assets/en_frontend_spa-pwa-ssr-ssg.md.Cj1747nN.lean.js +++ b/assets/en_frontend_spa-pwa-ssr-ssg.md.DJ7VYHMy.lean.js @@ -1 +1 @@ -import{_ as e,a as t}from"./chunks/dynamic-rendering.0iLK77IQ.js";import{_ as a,o as s,c as o,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"SPA, PWA, SSG, SSR and SEO","description":"","frontmatter":{},"headers":[],"relativePath":"en/frontend/spa-pwa-ssr-ssg.md","filePath":"en/frontend/spa-pwa-ssr-ssg.md","lastUpdated":1726474804000}'),r={name:"en/frontend/spa-pwa-ssr-ssg.md"},n=i("",9),l=[n];function d(c,p,h,m,u,f){return s(),o("div",null,l)}const S=a(r,[["render",d]]);export{b as __pageData,S as default}; +import{_ as e,a as t}from"./chunks/dynamic-rendering.0iLK77IQ.js";import{_ as a,o as s,c as o,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"SPA, PWA, SSG, SSR and SEO","description":"","frontmatter":{},"headers":[],"relativePath":"en/frontend/spa-pwa-ssr-ssg.md","filePath":"en/frontend/spa-pwa-ssr-ssg.md","lastUpdated":1726505115000}'),r={name:"en/frontend/spa-pwa-ssr-ssg.md"},n=i("",9),l=[n];function d(c,p,h,m,u,f){return s(),o("div",null,l)}const S=a(r,[["render",d]]);export{b as __pageData,S as default}; diff --git a/assets/en_index.md.BirJ33FR.js b/assets/en_index.md.C8cIpYZJ.js similarity index 94% rename from assets/en_index.md.BirJ33FR.js rename to assets/en_index.md.C8cIpYZJ.js index 56ddf4240..0c98a7410 100644 --- a/assets/en_index.md.BirJ33FR.js +++ b/assets/en_index.md.C8cIpYZJ.js @@ -1 +1 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.B8KxSsRZ.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Vue FAQ","text":"Vue JavaScript framework FAQ","tagline":"Most frequently asked questions about Vue.js","actions":[{"theme":"brand","text":"Get Started","link":"/en/misc/introduction"},{"theme":"alt","text":"Why Vue?","link":"/en/frontend/about-frameworks"}],"image":{"src":"/images/vue-faq-logo.webp","alt":"Vue FAQ"}},"features":[{"title":"Frontend","details":"General issues of frontend development - architecture, design patterns, best practices are discussed"},{"title":"Vue 3","details":"Focuses on Vue 3, Composition API and the Vue ecosystem of recent years."},{"title":"vue-webapp","details":"Scaffold your Vue 3 project with many prebuilt options"},{"title":"Nuxt-free","details":"Nuxt is a separate standalone framework that deserves its own FAQ"}]},"headers":[],"relativePath":"en/index.md","filePath":"en/index.md","lastUpdated":1726474804000}'),s={name:"en/index.md"};function n(o,r,i,d,c,u){return t(),a("div")}const m=e(s,[["render",n]]);export{p as __pageData,m as default}; +import{_ as e,o as t,c as a}from"./chunks/framework.B8KxSsRZ.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Vue FAQ","text":"Vue JavaScript framework FAQ","tagline":"Most frequently asked questions about Vue.js","actions":[{"theme":"brand","text":"Get Started","link":"/en/misc/introduction"},{"theme":"alt","text":"Why Vue?","link":"/en/frontend/about-frameworks"}],"image":{"src":"/images/vue-faq-logo.webp","alt":"Vue FAQ"}},"features":[{"title":"Frontend","details":"General issues of frontend development - architecture, design patterns, best practices are discussed"},{"title":"Vue 3","details":"Focuses on Vue 3, Composition API and the Vue ecosystem of recent years."},{"title":"vue-webapp","details":"Scaffold your Vue 3 project with many prebuilt options"},{"title":"Nuxt-free","details":"Nuxt is a separate standalone framework that deserves its own FAQ"}]},"headers":[],"relativePath":"en/index.md","filePath":"en/index.md","lastUpdated":1726505115000}'),s={name:"en/index.md"};function n(o,r,i,d,c,u){return t(),a("div")}const m=e(s,[["render",n]]);export{p as __pageData,m as default}; diff --git a/assets/en_index.md.BirJ33FR.lean.js b/assets/en_index.md.C8cIpYZJ.lean.js similarity index 94% rename from assets/en_index.md.BirJ33FR.lean.js rename to assets/en_index.md.C8cIpYZJ.lean.js index 56ddf4240..0c98a7410 100644 --- a/assets/en_index.md.BirJ33FR.lean.js +++ b/assets/en_index.md.C8cIpYZJ.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.B8KxSsRZ.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Vue FAQ","text":"Vue JavaScript framework FAQ","tagline":"Most frequently asked questions about Vue.js","actions":[{"theme":"brand","text":"Get Started","link":"/en/misc/introduction"},{"theme":"alt","text":"Why Vue?","link":"/en/frontend/about-frameworks"}],"image":{"src":"/images/vue-faq-logo.webp","alt":"Vue FAQ"}},"features":[{"title":"Frontend","details":"General issues of frontend development - architecture, design patterns, best practices are discussed"},{"title":"Vue 3","details":"Focuses on Vue 3, Composition API and the Vue ecosystem of recent years."},{"title":"vue-webapp","details":"Scaffold your Vue 3 project with many prebuilt options"},{"title":"Nuxt-free","details":"Nuxt is a separate standalone framework that deserves its own FAQ"}]},"headers":[],"relativePath":"en/index.md","filePath":"en/index.md","lastUpdated":1726474804000}'),s={name:"en/index.md"};function n(o,r,i,d,c,u){return t(),a("div")}const m=e(s,[["render",n]]);export{p as __pageData,m as default}; +import{_ as e,o as t,c as a}from"./chunks/framework.B8KxSsRZ.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Vue FAQ","text":"Vue JavaScript framework FAQ","tagline":"Most frequently asked questions about Vue.js","actions":[{"theme":"brand","text":"Get Started","link":"/en/misc/introduction"},{"theme":"alt","text":"Why Vue?","link":"/en/frontend/about-frameworks"}],"image":{"src":"/images/vue-faq-logo.webp","alt":"Vue FAQ"}},"features":[{"title":"Frontend","details":"General issues of frontend development - architecture, design patterns, best practices are discussed"},{"title":"Vue 3","details":"Focuses on Vue 3, Composition API and the Vue ecosystem of recent years."},{"title":"vue-webapp","details":"Scaffold your Vue 3 project with many prebuilt options"},{"title":"Nuxt-free","details":"Nuxt is a separate standalone framework that deserves its own FAQ"}]},"headers":[],"relativePath":"en/index.md","filePath":"en/index.md","lastUpdated":1726505115000}'),s={name:"en/index.md"};function n(o,r,i,d,c,u){return t(),a("div")}const m=e(s,[["render",n]]);export{p as __pageData,m as default}; diff --git a/assets/en_misc_CHANGELOG.md.Bjx8raX0.js b/assets/en_misc_CHANGELOG.md.D96wCHFE.js similarity index 88% rename from assets/en_misc_CHANGELOG.md.Bjx8raX0.js rename to assets/en_misc_CHANGELOG.md.D96wCHFE.js index 0a43ca36e..fbd8b3bf4 100644 --- a/assets/en_misc_CHANGELOG.md.Bjx8raX0.js +++ b/assets/en_misc_CHANGELOG.md.D96wCHFE.js @@ -1 +1 @@ -import{j as e,H as a}from"./chunks/animated-background.Dg_OWvFO.js";import{o as s,c as n,I as o,m as t}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/misc/CHANGELOG.md","filePath":"en/misc/CHANGELOG.md","lastUpdated":1726474804000}'),r={name:"en/misc/CHANGELOG.md"},_=Object.assign(r,{setup(c){return e.github.owner="vuesence",e.github.repo="vue-faq",(i,m)=>(s(),n("div",null,[o(t(a),{options:t(e)},null,8,["options"])]))}});export{u as __pageData,_ as default}; +import{j as e,H as a}from"./chunks/animated-background.Dg_OWvFO.js";import{o as s,c as n,I as o,m as t}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/misc/CHANGELOG.md","filePath":"en/misc/CHANGELOG.md","lastUpdated":1726505115000}'),r={name:"en/misc/CHANGELOG.md"},_=Object.assign(r,{setup(c){return e.github.owner="vuesence",e.github.repo="vue-faq",(i,m)=>(s(),n("div",null,[o(t(a),{options:t(e)},null,8,["options"])]))}});export{u as __pageData,_ as default}; diff --git a/assets/en_misc_CHANGELOG.md.Bjx8raX0.lean.js b/assets/en_misc_CHANGELOG.md.D96wCHFE.lean.js similarity index 88% rename from assets/en_misc_CHANGELOG.md.Bjx8raX0.lean.js rename to assets/en_misc_CHANGELOG.md.D96wCHFE.lean.js index 0a43ca36e..fbd8b3bf4 100644 --- a/assets/en_misc_CHANGELOG.md.Bjx8raX0.lean.js +++ b/assets/en_misc_CHANGELOG.md.D96wCHFE.lean.js @@ -1 +1 @@ -import{j as e,H as a}from"./chunks/animated-background.Dg_OWvFO.js";import{o as s,c as n,I as o,m as t}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/misc/CHANGELOG.md","filePath":"en/misc/CHANGELOG.md","lastUpdated":1726474804000}'),r={name:"en/misc/CHANGELOG.md"},_=Object.assign(r,{setup(c){return e.github.owner="vuesence",e.github.repo="vue-faq",(i,m)=>(s(),n("div",null,[o(t(a),{options:t(e)},null,8,["options"])]))}});export{u as __pageData,_ as default}; +import{j as e,H as a}from"./chunks/animated-background.Dg_OWvFO.js";import{o as s,c as n,I as o,m as t}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/misc/CHANGELOG.md","filePath":"en/misc/CHANGELOG.md","lastUpdated":1726505115000}'),r={name:"en/misc/CHANGELOG.md"},_=Object.assign(r,{setup(c){return e.github.owner="vuesence",e.github.repo="vue-faq",(i,m)=>(s(),n("div",null,[o(t(a),{options:t(e)},null,8,["options"])]))}});export{u as __pageData,_ as default}; diff --git a/assets/en_misc_cheat-sheets.md.DhGBK1mL.js b/assets/en_misc_cheat-sheets.md.Cjw0pSK9.js similarity index 97% rename from assets/en_misc_cheat-sheets.md.DhGBK1mL.js rename to assets/en_misc_cheat-sheets.md.Cjw0pSK9.js index cda41a2cc..19017c804 100644 --- a/assets/en_misc_cheat-sheets.md.DhGBK1mL.js +++ b/assets/en_misc_cheat-sheets.md.Cjw0pSK9.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,a4 as l}from"./chunks/framework.B8KxSsRZ.js";const S=JSON.parse('{"title":"Cheat Sheet","description":"","frontmatter":{},"headers":[],"relativePath":"en/misc/cheat-sheets.md","filePath":"en/misc/cheat-sheets.md","lastUpdated":1726474804000}'),r={name:"en/misc/cheat-sheets.md"},i=l('

Cheat Sheet

Vue

JavaScript

HTML

CSS

Typescript

Markdown

',13),h=[i];function s(n,o,c,d,p,f){return a(),t("div",null,h)}const _=e(r,[["render",s]]);export{S as __pageData,_ as default}; +import{_ as e,o as a,c as t,a4 as l}from"./chunks/framework.B8KxSsRZ.js";const S=JSON.parse('{"title":"Cheat Sheet","description":"","frontmatter":{},"headers":[],"relativePath":"en/misc/cheat-sheets.md","filePath":"en/misc/cheat-sheets.md","lastUpdated":1726505115000}'),r={name:"en/misc/cheat-sheets.md"},i=l('

Cheat Sheet

Vue

JavaScript

HTML

CSS

Typescript

Markdown

',13),h=[i];function s(n,o,c,d,p,f){return a(),t("div",null,h)}const _=e(r,[["render",s]]);export{S as __pageData,_ as default}; diff --git a/assets/en_misc_cheat-sheets.md.DhGBK1mL.lean.js b/assets/en_misc_cheat-sheets.md.Cjw0pSK9.lean.js similarity index 85% rename from assets/en_misc_cheat-sheets.md.DhGBK1mL.lean.js rename to assets/en_misc_cheat-sheets.md.Cjw0pSK9.lean.js index 57ff2d1bb..0f973359e 100644 --- a/assets/en_misc_cheat-sheets.md.DhGBK1mL.lean.js +++ b/assets/en_misc_cheat-sheets.md.Cjw0pSK9.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,a4 as l}from"./chunks/framework.B8KxSsRZ.js";const S=JSON.parse('{"title":"Cheat Sheet","description":"","frontmatter":{},"headers":[],"relativePath":"en/misc/cheat-sheets.md","filePath":"en/misc/cheat-sheets.md","lastUpdated":1726474804000}'),r={name:"en/misc/cheat-sheets.md"},i=l("",13),h=[i];function s(n,o,c,d,p,f){return a(),t("div",null,h)}const _=e(r,[["render",s]]);export{S as __pageData,_ as default}; +import{_ as e,o as a,c as t,a4 as l}from"./chunks/framework.B8KxSsRZ.js";const S=JSON.parse('{"title":"Cheat Sheet","description":"","frontmatter":{},"headers":[],"relativePath":"en/misc/cheat-sheets.md","filePath":"en/misc/cheat-sheets.md","lastUpdated":1726505115000}'),r={name:"en/misc/cheat-sheets.md"},i=l("",13),h=[i];function s(n,o,c,d,p,f){return a(),t("div",null,h)}const _=e(r,[["render",s]]);export{S as __pageData,_ as default}; diff --git a/assets/en_misc_contribute.md.CjU3ztux.js b/assets/en_misc_contribute.md.VgInPm-R.js similarity index 97% rename from assets/en_misc_contribute.md.CjU3ztux.js rename to assets/en_misc_contribute.md.VgInPm-R.js index daff3e4c2..49dea4d4b 100644 --- a/assets/en_misc_contribute.md.CjU3ztux.js +++ b/assets/en_misc_contribute.md.VgInPm-R.js @@ -1,4 +1,4 @@ -import{j as c,o as m,c as d,l as e,aa as n,ab as r,a as i}from"./chunks/framework.B8KxSsRZ.js";const h=e("h1",{id:"contribute-to-the-development-of-this-resource",tabindex:"-1"},[i("Contribute to the development of this resource "),e("a",{class:"header-anchor",href:"#contribute-to-the-development-of-this-resource","aria-label":'Permalink to "Contribute to the development of this resource"'},"​")],-1),p=e("p",null,"You can suggest corrections to any or add a new Q/A using the form below.",-1),f=e("p",null,[i("GitHub way of making changes ("),e("i",null,"fork -> edit -> create PR"),i(") is also very welcome.")],-1),b={class:"form-container",action:"action_page.php"},v=e("label",{for:"fname"},"Your name and/or contacts (optional)",-1),_=e("label",{for:"subject"},"Question/answer or message",-1),g=e("label",{for:"check"},'Enter the word "vue"',-1),x=JSON.parse('{"title":"Contribute to the development of this resource","description":"","frontmatter":{},"headers":[],"relativePath":"en/misc/contribute.md","filePath":"en/misc/contribute.md","lastUpdated":1726474804000}'),k={name:"en/misc/contribute.md"},j=Object.assign(k,{setup(y){const s=c(),t=c({name:"",email:"",message:"",check:""});async function u(){if(s.value.setAttribute("disabled",!0),t.value.check==="vue"){const l=`Message from Vue FAQ: +import{j as c,o as m,c as d,l as e,aa as n,ab as r,a as i}from"./chunks/framework.B8KxSsRZ.js";const h=e("h1",{id:"contribute-to-the-development-of-this-resource",tabindex:"-1"},[i("Contribute to the development of this resource "),e("a",{class:"header-anchor",href:"#contribute-to-the-development-of-this-resource","aria-label":'Permalink to "Contribute to the development of this resource"'},"​")],-1),p=e("p",null,"You can suggest corrections to any or add a new Q/A using the form below.",-1),f=e("p",null,[i("GitHub way of making changes ("),e("i",null,"fork -> edit -> create PR"),i(") is also very welcome.")],-1),b={class:"form-container",action:"action_page.php"},v=e("label",{for:"fname"},"Your name and/or contacts (optional)",-1),_=e("label",{for:"subject"},"Question/answer or message",-1),g=e("label",{for:"check"},'Enter the word "vue"',-1),x=JSON.parse('{"title":"Contribute to the development of this resource","description":"","frontmatter":{},"headers":[],"relativePath":"en/misc/contribute.md","filePath":"en/misc/contribute.md","lastUpdated":1726505115000}'),k={name:"en/misc/contribute.md"},j=Object.assign(k,{setup(y){const s=c(),t=c({name:"",email:"",message:"",check:""});async function u(){if(s.value.setAttribute("disabled",!0),t.value.check==="vue"){const l=`Message from Vue FAQ: diff --git a/assets/en_misc_contribute.md.CjU3ztux.lean.js b/assets/en_misc_contribute.md.VgInPm-R.lean.js similarity index 97% rename from assets/en_misc_contribute.md.CjU3ztux.lean.js rename to assets/en_misc_contribute.md.VgInPm-R.lean.js index daff3e4c2..49dea4d4b 100644 --- a/assets/en_misc_contribute.md.CjU3ztux.lean.js +++ b/assets/en_misc_contribute.md.VgInPm-R.lean.js @@ -1,4 +1,4 @@ -import{j as c,o as m,c as d,l as e,aa as n,ab as r,a as i}from"./chunks/framework.B8KxSsRZ.js";const h=e("h1",{id:"contribute-to-the-development-of-this-resource",tabindex:"-1"},[i("Contribute to the development of this resource "),e("a",{class:"header-anchor",href:"#contribute-to-the-development-of-this-resource","aria-label":'Permalink to "Contribute to the development of this resource"'},"​")],-1),p=e("p",null,"You can suggest corrections to any or add a new Q/A using the form below.",-1),f=e("p",null,[i("GitHub way of making changes ("),e("i",null,"fork -> edit -> create PR"),i(") is also very welcome.")],-1),b={class:"form-container",action:"action_page.php"},v=e("label",{for:"fname"},"Your name and/or contacts (optional)",-1),_=e("label",{for:"subject"},"Question/answer or message",-1),g=e("label",{for:"check"},'Enter the word "vue"',-1),x=JSON.parse('{"title":"Contribute to the development of this resource","description":"","frontmatter":{},"headers":[],"relativePath":"en/misc/contribute.md","filePath":"en/misc/contribute.md","lastUpdated":1726474804000}'),k={name:"en/misc/contribute.md"},j=Object.assign(k,{setup(y){const s=c(),t=c({name:"",email:"",message:"",check:""});async function u(){if(s.value.setAttribute("disabled",!0),t.value.check==="vue"){const l=`Message from Vue FAQ: +import{j as c,o as m,c as d,l as e,aa as n,ab as r,a as i}from"./chunks/framework.B8KxSsRZ.js";const h=e("h1",{id:"contribute-to-the-development-of-this-resource",tabindex:"-1"},[i("Contribute to the development of this resource "),e("a",{class:"header-anchor",href:"#contribute-to-the-development-of-this-resource","aria-label":'Permalink to "Contribute to the development of this resource"'},"​")],-1),p=e("p",null,"You can suggest corrections to any or add a new Q/A using the form below.",-1),f=e("p",null,[i("GitHub way of making changes ("),e("i",null,"fork -> edit -> create PR"),i(") is also very welcome.")],-1),b={class:"form-container",action:"action_page.php"},v=e("label",{for:"fname"},"Your name and/or contacts (optional)",-1),_=e("label",{for:"subject"},"Question/answer or message",-1),g=e("label",{for:"check"},'Enter the word "vue"',-1),x=JSON.parse('{"title":"Contribute to the development of this resource","description":"","frontmatter":{},"headers":[],"relativePath":"en/misc/contribute.md","filePath":"en/misc/contribute.md","lastUpdated":1726505115000}'),k={name:"en/misc/contribute.md"},j=Object.assign(k,{setup(y){const s=c(),t=c({name:"",email:"",message:"",check:""});async function u(){if(s.value.setAttribute("disabled",!0),t.value.check==="vue"){const l=`Message from Vue FAQ: diff --git a/assets/en_misc_glossary.md.CxGxNBaS.js b/assets/en_misc_glossary.md.eTkSCk0f.js similarity index 95% rename from assets/en_misc_glossary.md.CxGxNBaS.js rename to assets/en_misc_glossary.md.eTkSCk0f.js index 59c933511..9df02d210 100644 --- a/assets/en_misc_glossary.md.CxGxNBaS.js +++ b/assets/en_misc_glossary.md.eTkSCk0f.js @@ -1 +1 @@ -import{_ as t,o as n,c as a,l as e,a as s}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Glossary and abbreviations","description":"","frontmatter":{},"headers":[],"relativePath":"en/misc/glossary.md","filePath":"en/misc/glossary.md","lastUpdated":1726474804000}'),i={name:"en/misc/glossary.md"},o=e("h1",{id:"glossary-and-abbreviations",tabindex:"-1"},[s("Glossary and abbreviations "),e("a",{class:"header-anchor",href:"#glossary-and-abbreviations","aria-label":'Permalink to "Glossary and abbreviations"'},"​")],-1),r=e("ul",null,[e("li",null,"DX (developer experience) - developer's experience, the convenience of working on the application. This includes everything - code quality, IDE usability, competent project architecture, commenting, documentation quality, using proven and best practices on the project, etc."),e("li",null,"UX (user experience) - user's experience. Its general impression of the user's convenience in working with the site/application."),e("li",null,"UI (user interface) - website/application design from the point of view of visual aesthetics and style."),e("li",null,"SW (service worker) - Service Worker (PWA element)"),e("li",null,"AT (access token) - JWT authentication token"),e("li",null,"RT (refresh token) - JWT authentication token")],-1),l=[o,r];function c(d,p,u,h,m,v){return n(),a("div",null,l)}const b=t(i,[["render",c]]);export{f as __pageData,b as default}; +import{_ as t,o as n,c as a,l as e,a as s}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Glossary and abbreviations","description":"","frontmatter":{},"headers":[],"relativePath":"en/misc/glossary.md","filePath":"en/misc/glossary.md","lastUpdated":1726505115000}'),i={name:"en/misc/glossary.md"},o=e("h1",{id:"glossary-and-abbreviations",tabindex:"-1"},[s("Glossary and abbreviations "),e("a",{class:"header-anchor",href:"#glossary-and-abbreviations","aria-label":'Permalink to "Glossary and abbreviations"'},"​")],-1),r=e("ul",null,[e("li",null,"DX (developer experience) - developer's experience, the convenience of working on the application. This includes everything - code quality, IDE usability, competent project architecture, commenting, documentation quality, using proven and best practices on the project, etc."),e("li",null,"UX (user experience) - user's experience. Its general impression of the user's convenience in working with the site/application."),e("li",null,"UI (user interface) - website/application design from the point of view of visual aesthetics and style."),e("li",null,"SW (service worker) - Service Worker (PWA element)"),e("li",null,"AT (access token) - JWT authentication token"),e("li",null,"RT (refresh token) - JWT authentication token")],-1),l=[o,r];function c(d,p,u,h,m,v){return n(),a("div",null,l)}const b=t(i,[["render",c]]);export{f as __pageData,b as default}; diff --git a/assets/en_misc_glossary.md.CxGxNBaS.lean.js b/assets/en_misc_glossary.md.eTkSCk0f.lean.js similarity index 95% rename from assets/en_misc_glossary.md.CxGxNBaS.lean.js rename to assets/en_misc_glossary.md.eTkSCk0f.lean.js index 59c933511..9df02d210 100644 --- a/assets/en_misc_glossary.md.CxGxNBaS.lean.js +++ b/assets/en_misc_glossary.md.eTkSCk0f.lean.js @@ -1 +1 @@ -import{_ as t,o as n,c as a,l as e,a as s}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Glossary and abbreviations","description":"","frontmatter":{},"headers":[],"relativePath":"en/misc/glossary.md","filePath":"en/misc/glossary.md","lastUpdated":1726474804000}'),i={name:"en/misc/glossary.md"},o=e("h1",{id:"glossary-and-abbreviations",tabindex:"-1"},[s("Glossary and abbreviations "),e("a",{class:"header-anchor",href:"#glossary-and-abbreviations","aria-label":'Permalink to "Glossary and abbreviations"'},"​")],-1),r=e("ul",null,[e("li",null,"DX (developer experience) - developer's experience, the convenience of working on the application. This includes everything - code quality, IDE usability, competent project architecture, commenting, documentation quality, using proven and best practices on the project, etc."),e("li",null,"UX (user experience) - user's experience. Its general impression of the user's convenience in working with the site/application."),e("li",null,"UI (user interface) - website/application design from the point of view of visual aesthetics and style."),e("li",null,"SW (service worker) - Service Worker (PWA element)"),e("li",null,"AT (access token) - JWT authentication token"),e("li",null,"RT (refresh token) - JWT authentication token")],-1),l=[o,r];function c(d,p,u,h,m,v){return n(),a("div",null,l)}const b=t(i,[["render",c]]);export{f as __pageData,b as default}; +import{_ as t,o as n,c as a,l as e,a as s}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Glossary and abbreviations","description":"","frontmatter":{},"headers":[],"relativePath":"en/misc/glossary.md","filePath":"en/misc/glossary.md","lastUpdated":1726505115000}'),i={name:"en/misc/glossary.md"},o=e("h1",{id:"glossary-and-abbreviations",tabindex:"-1"},[s("Glossary and abbreviations "),e("a",{class:"header-anchor",href:"#glossary-and-abbreviations","aria-label":'Permalink to "Glossary and abbreviations"'},"​")],-1),r=e("ul",null,[e("li",null,"DX (developer experience) - developer's experience, the convenience of working on the application. This includes everything - code quality, IDE usability, competent project architecture, commenting, documentation quality, using proven and best practices on the project, etc."),e("li",null,"UX (user experience) - user's experience. Its general impression of the user's convenience in working with the site/application."),e("li",null,"UI (user interface) - website/application design from the point of view of visual aesthetics and style."),e("li",null,"SW (service worker) - Service Worker (PWA element)"),e("li",null,"AT (access token) - JWT authentication token"),e("li",null,"RT (refresh token) - JWT authentication token")],-1),l=[o,r];function c(d,p,u,h,m,v){return n(),a("div",null,l)}const b=t(i,[["render",c]]);export{f as __pageData,b as default}; diff --git a/assets/en_misc_introduction.md.D8fUQast.js b/assets/en_misc_introduction.md.CiBBbkF0.js similarity index 97% rename from assets/en_misc_introduction.md.D8fUQast.js rename to assets/en_misc_introduction.md.CiBBbkF0.js index 199a062df..cb42a3684 100644 --- a/assets/en_misc_introduction.md.D8fUQast.js +++ b/assets/en_misc_introduction.md.CiBBbkF0.js @@ -1 +1 @@ -import{_ as e,o as t,c as r,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"en/misc/introduction.md","filePath":"en/misc/introduction.md","lastUpdated":1726474804000}'),o={name:"en/misc/introduction.md"},n=a('

Introduction

This FAQ (Frequently Asked Questions) is created on the most frequently touched topics in Reddit r/vuejs/ and Telegram chat @vuejs_ru.

The level of questions and answers covers both beginners and experienced frontend developers.

As answers are used both generally recognized, verified and objective information, and subjective opinion of the author.

The increase in complexity does not come from the top down. The first questions and answers describe non-obvious points that may be interesting for experienced programmers.

The main sources of information - official documentation of Vue 3 and Vite, the book Vue.js 3 Design Patterns and Best Practices, r/vuejs/, @vuejs_ru.

Relevance of the information - 2022-2023 years.


About the author:

Ruslan Makarov - independent consultant, full-stack engineer with 20+ years of experience in SD, AWS Certified Solutions Architect, Sun Certified Java Developer.

',11),i=[n];function s(c,l,u,d,h,f){return t(),r("div",null,i)}const _=e(o,[["render",s]]);export{m as __pageData,_ as default}; +import{_ as e,o as t,c as r,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"en/misc/introduction.md","filePath":"en/misc/introduction.md","lastUpdated":1726505115000}'),o={name:"en/misc/introduction.md"},n=a('

Introduction

This FAQ (Frequently Asked Questions) is created on the most frequently touched topics in Reddit r/vuejs/ and Telegram chat @vuejs_ru.

The level of questions and answers covers both beginners and experienced frontend developers.

As answers are used both generally recognized, verified and objective information, and subjective opinion of the author.

The increase in complexity does not come from the top down. The first questions and answers describe non-obvious points that may be interesting for experienced programmers.

The main sources of information - official documentation of Vue 3 and Vite, the book Vue.js 3 Design Patterns and Best Practices, r/vuejs/, @vuejs_ru.

Relevance of the information - 2022-2023 years.


About the author:

Ruslan Makarov - independent consultant, full-stack engineer with 20+ years of experience in SD, AWS Certified Solutions Architect, Sun Certified Java Developer.

',11),i=[n];function s(c,l,u,d,h,f){return t(),r("div",null,i)}const _=e(o,[["render",s]]);export{m as __pageData,_ as default}; diff --git a/assets/en_misc_introduction.md.D8fUQast.lean.js b/assets/en_misc_introduction.md.CiBBbkF0.lean.js similarity index 85% rename from assets/en_misc_introduction.md.D8fUQast.lean.js rename to assets/en_misc_introduction.md.CiBBbkF0.lean.js index 090e1cb3c..692048397 100644 --- a/assets/en_misc_introduction.md.D8fUQast.lean.js +++ b/assets/en_misc_introduction.md.CiBBbkF0.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as r,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"en/misc/introduction.md","filePath":"en/misc/introduction.md","lastUpdated":1726474804000}'),o={name:"en/misc/introduction.md"},n=a("",11),i=[n];function s(c,l,u,d,h,f){return t(),r("div",null,i)}const _=e(o,[["render",s]]);export{m as __pageData,_ as default}; +import{_ as e,o as t,c as r,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"en/misc/introduction.md","filePath":"en/misc/introduction.md","lastUpdated":1726505115000}'),o={name:"en/misc/introduction.md"},n=a("",11),i=[n];function s(c,l,u,d,h,f){return t(),r("div",null,i)}const _=e(o,[["render",s]]);export{m as __pageData,_ as default}; diff --git a/assets/en_release-timeline_config.md.BNKRZ0z2.js b/assets/en_release-timeline_config.md.Cxd93gCa.js similarity index 99% rename from assets/en_release-timeline_config.md.BNKRZ0z2.js rename to assets/en_release-timeline_config.md.Cxd93gCa.js index 5506ab258..5e530a6a0 100644 --- a/assets/en_release-timeline_config.md.BNKRZ0z2.js +++ b/assets/en_release-timeline_config.md.Cxd93gCa.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Configuration","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/config.md","filePath":"en/release-timeline/config.md","lastUpdated":1726474804000}'),h={name:"en/release-timeline/config.md"},l=n(`

Configuration

Required Options: owner и repo

Options

js
export const DefaultOptions = {
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Configuration","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/config.md","filePath":"en/release-timeline/config.md","lastUpdated":1726505115000}'),h={name:"en/release-timeline/config.md"},l=n(`

Configuration

Required Options: owner и repo

Options

js
export const DefaultOptions = {
   // Main page title
   title: "Releases",
   github: {
diff --git a/assets/en_release-timeline_config.md.BNKRZ0z2.lean.js b/assets/en_release-timeline_config.md.Cxd93gCa.lean.js
similarity index 91%
rename from assets/en_release-timeline_config.md.BNKRZ0z2.lean.js
rename to assets/en_release-timeline_config.md.Cxd93gCa.lean.js
index f509949da..707cc3f92 100644
--- a/assets/en_release-timeline_config.md.BNKRZ0z2.lean.js
+++ b/assets/en_release-timeline_config.md.Cxd93gCa.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Configuration","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/config.md","filePath":"en/release-timeline/config.md","lastUpdated":1726474804000}'),h={name:"en/release-timeline/config.md"},l=n("",8),k=[l];function t(p,e,E,r,d,g){return i(),a("div",null,k)}const F=s(h,[["render",t]]);export{c as __pageData,F as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Configuration","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/config.md","filePath":"en/release-timeline/config.md","lastUpdated":1726505115000}'),h={name:"en/release-timeline/config.md"},l=n("",8),k=[l];function t(p,e,E,r,d,g){return i(),a("div",null,k)}const F=s(h,[["render",t]]);export{c as __pageData,F as default};
diff --git a/assets/en_release-timeline_getting-data.md.wADUmsoK.js b/assets/en_release-timeline_getting-data.md.D86QUoDa.js
similarity index 97%
rename from assets/en_release-timeline_getting-data.md.wADUmsoK.js
rename to assets/en_release-timeline_getting-data.md.D86QUoDa.js
index 013461499..9c73d4a6e 100644
--- a/assets/en_release-timeline_getting-data.md.wADUmsoK.js
+++ b/assets/en_release-timeline_getting-data.md.D86QUoDa.js
@@ -1 +1 @@
-import{_ as e,o as t,c as a,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Getting release, commit and pull requests data","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/getting-data.md","filePath":"en/release-timeline/getting-data.md","lastUpdated":1726474804000}'),n={name:"en/release-timeline/getting-data.md"},o=i('

Getting release, commit and pull requests data

Retrieving data

There are three ways to get data from releases, pull request and commits from GitHub

  1. Dynamic. Direct request to GitHub REST API during page opening.
  2. Request to GitHub REST API through a proxy
  3. Request to GitHub REST API during project build, optimise and save data locally on the site.

Currently the first and second option are directly implemented, there is an option to specify url for release requests, pull requests and commits.

The first option is used by default.

The second option is needed to reduce the size of the downloaded file, as 95% of the data in GitHub responses is not used in the application.

The data format should be the same as GitHub's, but may contain only the required fields.

The third option can also optimise data flows, but it makes a snapshot of releases and a pull requests at a certain point in time. When a new release comes out, the documentation will need to be rebuilt. In this case you also need to provide the correct url. The logic of the third option (receiving, filtering, saving data) should be implemented by the package user.

',9),s=[o];function r(l,d,u,m,p,c){return t(),a("div",null,s)}const f=e(n,[["render",r]]);export{g as __pageData,f as default}; +import{_ as e,o as t,c as a,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Getting release, commit and pull requests data","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/getting-data.md","filePath":"en/release-timeline/getting-data.md","lastUpdated":1726505115000}'),n={name:"en/release-timeline/getting-data.md"},o=i('

Getting release, commit and pull requests data

Retrieving data

There are three ways to get data from releases, pull request and commits from GitHub

  1. Dynamic. Direct request to GitHub REST API during page opening.
  2. Request to GitHub REST API through a proxy
  3. Request to GitHub REST API during project build, optimise and save data locally on the site.

Currently the first and second option are directly implemented, there is an option to specify url for release requests, pull requests and commits.

The first option is used by default.

The second option is needed to reduce the size of the downloaded file, as 95% of the data in GitHub responses is not used in the application.

The data format should be the same as GitHub's, but may contain only the required fields.

The third option can also optimise data flows, but it makes a snapshot of releases and a pull requests at a certain point in time. When a new release comes out, the documentation will need to be rebuilt. In this case you also need to provide the correct url. The logic of the third option (receiving, filtering, saving data) should be implemented by the package user.

',9),s=[o];function r(l,d,u,m,p,c){return t(),a("div",null,s)}const f=e(n,[["render",r]]);export{g as __pageData,f as default}; diff --git a/assets/en_release-timeline_getting-data.md.wADUmsoK.lean.js b/assets/en_release-timeline_getting-data.md.D86QUoDa.lean.js similarity index 92% rename from assets/en_release-timeline_getting-data.md.wADUmsoK.lean.js rename to assets/en_release-timeline_getting-data.md.D86QUoDa.lean.js index bcfede6a8..16dc7fad2 100644 --- a/assets/en_release-timeline_getting-data.md.wADUmsoK.lean.js +++ b/assets/en_release-timeline_getting-data.md.D86QUoDa.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as a,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Getting release, commit and pull requests data","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/getting-data.md","filePath":"en/release-timeline/getting-data.md","lastUpdated":1726474804000}'),n={name:"en/release-timeline/getting-data.md"},o=i("",9),s=[o];function r(l,d,u,m,p,c){return t(),a("div",null,s)}const f=e(n,[["render",r]]);export{g as __pageData,f as default}; +import{_ as e,o as t,c as a,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Getting release, commit and pull requests data","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/getting-data.md","filePath":"en/release-timeline/getting-data.md","lastUpdated":1726505115000}'),n={name:"en/release-timeline/getting-data.md"},o=i("",9),s=[o];function r(l,d,u,m,p,c){return t(),a("div",null,s)}const f=e(n,[["render",r]]);export{g as __pageData,f as default}; diff --git a/assets/en_release-timeline_getting-started.md.BNlpoJ_U.js b/assets/en_release-timeline_getting-started.md.DyiMZMl8.js similarity index 95% rename from assets/en_release-timeline_getting-started.md.BNlpoJ_U.js rename to assets/en_release-timeline_getting-started.md.DyiMZMl8.js index 2cfb47bac..3fa1780c9 100644 --- a/assets/en_release-timeline_getting-started.md.BNlpoJ_U.js +++ b/assets/en_release-timeline_getting-started.md.DyiMZMl8.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Installation","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/getting-started.md","filePath":"en/release-timeline/getting-started.md","lastUpdated":1726474804000}'),e={name:"en/release-timeline/getting-started.md"},n=t(`

Installation

Installation of the npm package

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Usage in Vue project code

In a Vue component:

vue
<script setup>
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Installation","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/getting-started.md","filePath":"en/release-timeline/getting-started.md","lastUpdated":1726505115000}'),e={name:"en/release-timeline/getting-started.md"},n=t(`

Installation

Installation of the npm package

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Usage in Vue project code

In a Vue component:

vue
<script setup>
 import { ReleaseTimeline, DefaultOptions as options } from "release-timeline";
 import "release-timeline/dist/style.css";
 // import "release-timeline/dist/animated-background.css";
@@ -12,4 +12,4 @@ import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c
 <script src="https://unpkg.com/release-timeline@0.3.6/dist/index.umd.js"></script>
 <link href="https://unpkg.com/release-timeline@0.3.6/dist/animated-background.css" rel="stylesheet" />
 
-<release-timeline options=""></release-timeline>

Read more about connecting as web component usage

`,12),l=[n];function p(h,k,r,o,d,g){return i(),a("div",null,l)}const u=s(e,[["render",p]]);export{c as __pageData,u as default}; +<release-timeline options=""></release-timeline>

Read more about connecting as web component usage

`,12),l=[n];function p(h,k,r,o,d,E){return i(),a("div",null,l)}const u=s(e,[["render",p]]);export{c as __pageData,u as default}; diff --git a/assets/en_release-timeline_getting-started.md.BNlpoJ_U.lean.js b/assets/en_release-timeline_getting-started.md.DyiMZMl8.lean.js similarity index 83% rename from assets/en_release-timeline_getting-started.md.BNlpoJ_U.lean.js rename to assets/en_release-timeline_getting-started.md.DyiMZMl8.lean.js index d50d2d479..06aaa920a 100644 --- a/assets/en_release-timeline_getting-started.md.BNlpoJ_U.lean.js +++ b/assets/en_release-timeline_getting-started.md.DyiMZMl8.lean.js @@ -1 +1 @@ -import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Installation","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/getting-started.md","filePath":"en/release-timeline/getting-started.md","lastUpdated":1726474804000}'),e={name:"en/release-timeline/getting-started.md"},n=t("",12),l=[n];function p(h,k,r,o,d,g){return i(),a("div",null,l)}const u=s(e,[["render",p]]);export{c as __pageData,u as default}; +import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Installation","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/getting-started.md","filePath":"en/release-timeline/getting-started.md","lastUpdated":1726505115000}'),e={name:"en/release-timeline/getting-started.md"},n=t("",12),l=[n];function p(h,k,r,o,d,E){return i(),a("div",null,l)}const u=s(e,[["render",p]]);export{c as __pageData,u as default}; diff --git a/assets/en_release-timeline_index.md.DGXsyiv-.js b/assets/en_release-timeline_index.md.BPI3ISXr.js similarity index 97% rename from assets/en_release-timeline_index.md.DGXsyiv-.js rename to assets/en_release-timeline_index.md.BPI3ISXr.js index 3bb403a79..ae86603d3 100644 --- a/assets/en_release-timeline_index.md.DGXsyiv-.js +++ b/assets/en_release-timeline_index.md.BPI3ISXr.js @@ -1 +1 @@ -import{_ as e,o as a,c as i,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/rt.Ctjj4VhI.jpg",b=JSON.parse('{"title":"Release Timeline","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/index.md","filePath":"en/release-timeline/index.md","lastUpdated":1726474804000}'),r={name:"en/release-timeline/index.md"},o=t('

Release Timeline

Release timeline visualization

Visualize releases of any GitHub repository on a timeline, with information about commits and pull requests.

Embeds in VitePress, can be a good replacement for changelog in the project's technical documentation, automating description of changes and making tracking them convenient for users.

It can also be plugged into any HTML page as a Web component or micro-frontend.

image

The library is written using Vue 3, has no dependencies, takes 15Kb unpacked. Adapted to work in VitePress (switching between light and dark themes). Can be plugged in as a web component in non-Vue projects.

Data on releases of a particular repository is taken via GitHub REST API.

Public repositories are available immediately, private repositories require GitHub API token.

GitHub

Demo

  • Demo (you can specify any repository via the selection in the upper left corner)

Credits

Parallax Star background in CSS

',15),s=[o];function l(c,m,d,p,u,h){return a(),i("div",null,s)}const _=e(r,[["render",l]]);export{b as __pageData,_ as default}; +import{_ as e,o as a,c as i,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/rt.Ctjj4VhI.jpg",b=JSON.parse('{"title":"Release Timeline","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/index.md","filePath":"en/release-timeline/index.md","lastUpdated":1726505115000}'),r={name:"en/release-timeline/index.md"},o=t('

Release Timeline

Release timeline visualization

Visualize releases of any GitHub repository on a timeline, with information about commits and pull requests.

Embeds in VitePress, can be a good replacement for changelog in the project's technical documentation, automating description of changes and making tracking them convenient for users.

It can also be plugged into any HTML page as a Web component or micro-frontend.

image

The library is written using Vue 3, has no dependencies, takes 15Kb unpacked. Adapted to work in VitePress (switching between light and dark themes). Can be plugged in as a web component in non-Vue projects.

Data on releases of a particular repository is taken via GitHub REST API.

Public repositories are available immediately, private repositories require GitHub API token.

GitHub

Demo

  • Demo (you can specify any repository via the selection in the upper left corner)

Credits

Parallax Star background in CSS

',15),s=[o];function l(c,m,d,p,u,h){return a(),i("div",null,s)}const _=e(r,[["render",l]]);export{b as __pageData,_ as default}; diff --git a/assets/en_release-timeline_index.md.DGXsyiv-.lean.js b/assets/en_release-timeline_index.md.BPI3ISXr.lean.js similarity index 91% rename from assets/en_release-timeline_index.md.DGXsyiv-.lean.js rename to assets/en_release-timeline_index.md.BPI3ISXr.lean.js index 52541512c..c587ab34d 100644 --- a/assets/en_release-timeline_index.md.DGXsyiv-.lean.js +++ b/assets/en_release-timeline_index.md.BPI3ISXr.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as i,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/rt.Ctjj4VhI.jpg",b=JSON.parse('{"title":"Release Timeline","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/index.md","filePath":"en/release-timeline/index.md","lastUpdated":1726474804000}'),r={name:"en/release-timeline/index.md"},o=t("",15),s=[o];function l(c,m,d,p,u,h){return a(),i("div",null,s)}const _=e(r,[["render",l]]);export{b as __pageData,_ as default}; +import{_ as e,o as a,c as i,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/rt.Ctjj4VhI.jpg",b=JSON.parse('{"title":"Release Timeline","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/index.md","filePath":"en/release-timeline/index.md","lastUpdated":1726505115000}'),r={name:"en/release-timeline/index.md"},o=t("",15),s=[o];function l(c,m,d,p,u,h){return a(),i("div",null,s)}const _=e(r,[["render",l]]);export{b as __pageData,_ as default}; diff --git a/assets/en_release-timeline_microfrontend.md.D15-3eWf.js b/assets/en_release-timeline_microfrontend.md.Dvv6FXJJ.js similarity index 99% rename from assets/en_release-timeline_microfrontend.md.D15-3eWf.js rename to assets/en_release-timeline_microfrontend.md.Dvv6FXJJ.js index 2f41ef3a9..67b7add54 100644 --- a/assets/en_release-timeline_microfrontend.md.D15-3eWf.js +++ b/assets/en_release-timeline_microfrontend.md.Dvv6FXJJ.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Micro-frontend","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/microfrontend.md","filePath":"en/release-timeline/microfrontend.md","lastUpdated":1726474804000}'),n={name:"en/release-timeline/microfrontend.md"},e=t(`

Micro-frontend

Usage

Using esm.sh you can connect release-timeline as an ES module

In the HTML page:

html
<head>
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Micro-frontend","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/microfrontend.md","filePath":"en/release-timeline/microfrontend.md","lastUpdated":1726505115000}'),n={name:"en/release-timeline/microfrontend.md"},e=t(`

Micro-frontend

Usage

Using esm.sh you can connect release-timeline as an ES module

In the HTML page:

html
<head>
   <link rel="stylesheet" crossorigin href="https://unpkg.com/release-timeline/dist/style.css">
   <link rel="stylesheet" crossorigin href="https://unpkg.com/release-timeline/dist/animated-background.css">
   <script type="module">
diff --git a/assets/en_release-timeline_microfrontend.md.D15-3eWf.lean.js b/assets/en_release-timeline_microfrontend.md.Dvv6FXJJ.lean.js
similarity index 91%
rename from assets/en_release-timeline_microfrontend.md.D15-3eWf.lean.js
rename to assets/en_release-timeline_microfrontend.md.Dvv6FXJJ.lean.js
index 60a5f738c..d2be1b3c7 100644
--- a/assets/en_release-timeline_microfrontend.md.D15-3eWf.lean.js
+++ b/assets/en_release-timeline_microfrontend.md.Dvv6FXJJ.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Micro-frontend","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/microfrontend.md","filePath":"en/release-timeline/microfrontend.md","lastUpdated":1726474804000}'),n={name:"en/release-timeline/microfrontend.md"},e=t("",8),l=[e];function h(k,p,E,r,d,o){return i(),a("div",null,l)}const y=s(n,[["render",h]]);export{c as __pageData,y as default};
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Micro-frontend","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/microfrontend.md","filePath":"en/release-timeline/microfrontend.md","lastUpdated":1726505115000}'),n={name:"en/release-timeline/microfrontend.md"},e=t("",8),l=[e];function h(k,p,E,r,d,o){return i(),a("div",null,l)}const y=s(n,[["render",h]]);export{c as __pageData,y as default};
diff --git a/assets/en_release-timeline_release-history.md.BCFRO9Zd.lean.js b/assets/en_release-timeline_release-history.md.DxzOgiH8.js
similarity index 85%
rename from assets/en_release-timeline_release-history.md.BCFRO9Zd.lean.js
rename to assets/en_release-timeline_release-history.md.DxzOgiH8.js
index a34c9287c..5b0903018 100644
--- a/assets/en_release-timeline_release-history.md.BCFRO9Zd.lean.js
+++ b/assets/en_release-timeline_release-history.md.DxzOgiH8.js
@@ -1 +1 @@
-import{j as e,H as a}from"./chunks/animated-background.Dg_OWvFO.js";import{o as n,c as i,I as s,m as t}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/release-history.md","filePath":"en/release-timeline/release-history.md","lastUpdated":1726474804000}'),o={name:"en/release-timeline/release-history.md"},u=Object.assign(o,{setup(l){return e.github.owner="vuesence",e.github.repo="release-timeline",(r,m)=>(n(),i("div",null,[s(t(a),{options:t(e)},null,8,["options"])]))}});export{g as __pageData,u as default};
+import{j as e,H as a}from"./chunks/animated-background.Dg_OWvFO.js";import{o as n,c as i,I as s,m as t}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/release-history.md","filePath":"en/release-timeline/release-history.md","lastUpdated":1726505115000}'),o={name:"en/release-timeline/release-history.md"},u=Object.assign(o,{setup(l){return e.github.owner="vuesence",e.github.repo="release-timeline",(r,m)=>(n(),i("div",null,[s(t(a),{options:t(e)},null,8,["options"])]))}});export{g as __pageData,u as default};
diff --git a/assets/en_release-timeline_release-history.md.BCFRO9Zd.js b/assets/en_release-timeline_release-history.md.DxzOgiH8.lean.js
similarity index 85%
rename from assets/en_release-timeline_release-history.md.BCFRO9Zd.js
rename to assets/en_release-timeline_release-history.md.DxzOgiH8.lean.js
index a34c9287c..5b0903018 100644
--- a/assets/en_release-timeline_release-history.md.BCFRO9Zd.js
+++ b/assets/en_release-timeline_release-history.md.DxzOgiH8.lean.js
@@ -1 +1 @@
-import{j as e,H as a}from"./chunks/animated-background.Dg_OWvFO.js";import{o as n,c as i,I as s,m as t}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/release-history.md","filePath":"en/release-timeline/release-history.md","lastUpdated":1726474804000}'),o={name:"en/release-timeline/release-history.md"},u=Object.assign(o,{setup(l){return e.github.owner="vuesence",e.github.repo="release-timeline",(r,m)=>(n(),i("div",null,[s(t(a),{options:t(e)},null,8,["options"])]))}});export{g as __pageData,u as default};
+import{j as e,H as a}from"./chunks/animated-background.Dg_OWvFO.js";import{o as n,c as i,I as s,m as t}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/release-history.md","filePath":"en/release-timeline/release-history.md","lastUpdated":1726505115000}'),o={name:"en/release-timeline/release-history.md"},u=Object.assign(o,{setup(l){return e.github.owner="vuesence",e.github.repo="release-timeline",(r,m)=>(n(),i("div",null,[s(t(a),{options:t(e)},null,8,["options"])]))}});export{g as __pageData,u as default};
diff --git a/assets/en_release-timeline_vitepress.md.DsB_-5R9.js b/assets/en_release-timeline_vitepress.md.D7id4Puo.js
similarity index 96%
rename from assets/en_release-timeline_vitepress.md.DsB_-5R9.js
rename to assets/en_release-timeline_vitepress.md.D7id4Puo.js
index d7f23b4df..2de01b493 100644
--- a/assets/en_release-timeline_vitepress.md.DsB_-5R9.js
+++ b/assets/en_release-timeline_vitepress.md.D7id4Puo.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"VitePress","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/vitepress.md","filePath":"en/release-timeline/vitepress.md","lastUpdated":1726474804000}'),e={name:"en/release-timeline/vitepress.md"},n=t(`

VitePress

release-timeline fully supports VitePress, including changing light and dark themes and adapting to its styles.

Installation

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Usage

In any markdown file:

vue
<script setup>
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"VitePress","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/vitepress.md","filePath":"en/release-timeline/vitepress.md","lastUpdated":1726505115000}'),e={name:"en/release-timeline/vitepress.md"},n=t(`

VitePress

release-timeline fully supports VitePress, including changing light and dark themes and adapting to its styles.

Installation

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Usage

In any markdown file:

vue
<script setup>
 import { ReleaseTimeline, DefaultOptions as options } from "release-timeline";
 import "release-timeline/dist/style.css";
 import "release-timeline/dist/vitepress.css";
diff --git a/assets/en_release-timeline_vitepress.md.DsB_-5R9.lean.js b/assets/en_release-timeline_vitepress.md.D7id4Puo.lean.js
similarity index 91%
rename from assets/en_release-timeline_vitepress.md.DsB_-5R9.lean.js
rename to assets/en_release-timeline_vitepress.md.D7id4Puo.lean.js
index 467339c82..ed0e7fa5e 100644
--- a/assets/en_release-timeline_vitepress.md.DsB_-5R9.lean.js
+++ b/assets/en_release-timeline_vitepress.md.D7id4Puo.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"VitePress","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/vitepress.md","filePath":"en/release-timeline/vitepress.md","lastUpdated":1726474804000}'),e={name:"en/release-timeline/vitepress.md"},n=t("",10),l=[n];function h(p,k,r,E,d,g){return i(),a("div",null,l)}const y=s(e,[["render",h]]);export{c as __pageData,y as default};
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"VitePress","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/vitepress.md","filePath":"en/release-timeline/vitepress.md","lastUpdated":1726505115000}'),e={name:"en/release-timeline/vitepress.md"},n=t("",10),l=[n];function h(p,k,r,E,d,g){return i(),a("div",null,l)}const y=s(e,[["render",h]]);export{c as __pageData,y as default};
diff --git a/assets/en_release-timeline_vue-3.md.DQPQ-Nff.js b/assets/en_release-timeline_vue-3.md.Bx7kFYOP.js
similarity index 94%
rename from assets/en_release-timeline_vue-3.md.DQPQ-Nff.js
rename to assets/en_release-timeline_vue-3.md.Bx7kFYOP.js
index ff2a155ee..144b037eb 100644
--- a/assets/en_release-timeline_vue-3.md.DQPQ-Nff.js
+++ b/assets/en_release-timeline_vue-3.md.Bx7kFYOP.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const E=JSON.parse('{"title":"Vue 3 project","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/vue-3.md","filePath":"en/release-timeline/vue-3.md","lastUpdated":1726474804000}'),t={name:"en/release-timeline/vue-3.md"},n=e(`

Vue 3 project

Installation

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Use in Vue component

vue
<script setup>
+import{_ as s,o as i,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const E=JSON.parse('{"title":"Vue 3 project","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/vue-3.md","filePath":"en/release-timeline/vue-3.md","lastUpdated":1726505115000}'),t={name:"en/release-timeline/vue-3.md"},n=e(`

Vue 3 project

Installation

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Use in Vue component

vue
<script setup>
 import { ReleaseTimeline, DefaultOptions as options } from "release-timeline";
 import "release-timeline/dist/style.css";
 // import "release-timeline/dist/animated-background.css";
diff --git a/assets/en_release-timeline_vue-3.md.DQPQ-Nff.lean.js b/assets/en_release-timeline_vue-3.md.Bx7kFYOP.lean.js
similarity index 91%
rename from assets/en_release-timeline_vue-3.md.DQPQ-Nff.lean.js
rename to assets/en_release-timeline_vue-3.md.Bx7kFYOP.lean.js
index 0a5848852..415576f2a 100644
--- a/assets/en_release-timeline_vue-3.md.DQPQ-Nff.lean.js
+++ b/assets/en_release-timeline_vue-3.md.Bx7kFYOP.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const E=JSON.parse('{"title":"Vue 3 project","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/vue-3.md","filePath":"en/release-timeline/vue-3.md","lastUpdated":1726474804000}'),t={name:"en/release-timeline/vue-3.md"},n=e("",6),l=[n];function p(h,k,o,r,d,c){return i(),a("div",null,l)}const u=s(t,[["render",p]]);export{E as __pageData,u as default};
+import{_ as s,o as i,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const E=JSON.parse('{"title":"Vue 3 project","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/vue-3.md","filePath":"en/release-timeline/vue-3.md","lastUpdated":1726505115000}'),t={name:"en/release-timeline/vue-3.md"},n=e("",6),l=[n];function p(h,k,o,r,d,c){return i(),a("div",null,l)}const u=s(t,[["render",p]]);export{E as __pageData,u as default};
diff --git a/assets/en_release-timeline_web-component.md.C5sM46KZ.js b/assets/en_release-timeline_web-component.md.D4g_u0D4.js
similarity index 99%
rename from assets/en_release-timeline_web-component.md.C5sM46KZ.js
rename to assets/en_release-timeline_web-component.md.D4g_u0D4.js
index 8f42e5089..73d92a207 100644
--- a/assets/en_release-timeline_web-component.md.C5sM46KZ.js
+++ b/assets/en_release-timeline_web-component.md.D4g_u0D4.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Web component","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/web-component.md","filePath":"en/release-timeline/web-component.md","lastUpdated":1726474804000}'),h={name:"en/release-timeline/web-component.md"},t=n(`

Web component

Usage

In HTML page:

html
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Web component","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/web-component.md","filePath":"en/release-timeline/web-component.md","lastUpdated":1726505115000}'),h={name:"en/release-timeline/web-component.md"},t=n(`

Web component

Usage

In HTML page:

html
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
 <script src="https://unpkg.com/release-timeline/dist/index.umd.js"></script>
 <link href="https://unpkg.com/release-timeline/dist/animated-background.css" rel="stylesheet" />
 
diff --git a/assets/en_release-timeline_web-component.md.C5sM46KZ.lean.js b/assets/en_release-timeline_web-component.md.D4g_u0D4.lean.js
similarity index 91%
rename from assets/en_release-timeline_web-component.md.C5sM46KZ.lean.js
rename to assets/en_release-timeline_web-component.md.D4g_u0D4.lean.js
index 68d426e4c..1ecbb94cc 100644
--- a/assets/en_release-timeline_web-component.md.C5sM46KZ.lean.js
+++ b/assets/en_release-timeline_web-component.md.D4g_u0D4.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Web component","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/web-component.md","filePath":"en/release-timeline/web-component.md","lastUpdated":1726474804000}'),h={name:"en/release-timeline/web-component.md"},t=n("",12),k=[t];function l(p,e,E,r,d,g){return i(),a("div",null,k)}const o=s(h,[["render",l]]);export{F as __pageData,o as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Web component","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"en/release-timeline/web-component.md","filePath":"en/release-timeline/web-component.md","lastUpdated":1726505115000}'),h={name:"en/release-timeline/web-component.md"},t=n("",12),k=[t];function l(p,e,E,r,d,g){return i(),a("div",null,k)}const o=s(h,[["render",l]]);export{F as __pageData,o as default};
diff --git a/assets/en_vue-webapp_contribution.md.IdeTsIfi.js b/assets/en_vue-webapp_contribution.md.CS8SkHr3.js
similarity index 94%
rename from assets/en_vue-webapp_contribution.md.IdeTsIfi.js
rename to assets/en_vue-webapp_contribution.md.CS8SkHr3.js
index 2a1b12303..63395f1d6 100644
--- a/assets/en_vue-webapp_contribution.md.IdeTsIfi.js
+++ b/assets/en_vue-webapp_contribution.md.CS8SkHr3.js
@@ -1 +1 @@
-import{_ as a,o,c as n,l as e,a as t}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Project participation","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/contribution.md","filePath":"en/vue-webapp/contribution.md","lastUpdated":1726474804000}'),r={name:"en/vue-webapp/contribution.md"},i=e("h1",{id:"project-participation",tabindex:"-1"},[t("Project participation "),e("a",{class:"header-anchor",href:"#project-participation","aria-label":'Permalink to "Project participation"'},"​")],-1),p=e("p",null,[e("a",{href:"https://github.com/vuesence/create-vue-webapp",target:"_blank",rel:"noreferrer"},"create-vue-webapp"),t(" and "),e("a",{href:"https://github.com/vuesence/vue-webapp",target:"_blank",rel:"noreferrer"},"vue-webapp"),t(" are open source projects under the MIT license.")],-1),c=e("p",null,"Contributions are welcome.",-1),s=[i,p,c];function u(l,d,m,b,_,h){return o(),n("div",null,s)}const v=a(r,[["render",u]]);export{f as __pageData,v as default};
+import{_ as a,o,c as n,l as e,a as t}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Project participation","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/contribution.md","filePath":"en/vue-webapp/contribution.md","lastUpdated":1726505115000}'),r={name:"en/vue-webapp/contribution.md"},i=e("h1",{id:"project-participation",tabindex:"-1"},[t("Project participation "),e("a",{class:"header-anchor",href:"#project-participation","aria-label":'Permalink to "Project participation"'},"​")],-1),p=e("p",null,[e("a",{href:"https://github.com/vuesence/create-vue-webapp",target:"_blank",rel:"noreferrer"},"create-vue-webapp"),t(" and "),e("a",{href:"https://github.com/vuesence/vue-webapp",target:"_blank",rel:"noreferrer"},"vue-webapp"),t(" are open source projects under the MIT license.")],-1),c=e("p",null,"Contributions are welcome.",-1),s=[i,p,c];function u(l,d,m,b,_,h){return o(),n("div",null,s)}const v=a(r,[["render",u]]);export{f as __pageData,v as default};
diff --git a/assets/en_vue-webapp_contribution.md.IdeTsIfi.lean.js b/assets/en_vue-webapp_contribution.md.CS8SkHr3.lean.js
similarity index 94%
rename from assets/en_vue-webapp_contribution.md.IdeTsIfi.lean.js
rename to assets/en_vue-webapp_contribution.md.CS8SkHr3.lean.js
index 2a1b12303..63395f1d6 100644
--- a/assets/en_vue-webapp_contribution.md.IdeTsIfi.lean.js
+++ b/assets/en_vue-webapp_contribution.md.CS8SkHr3.lean.js
@@ -1 +1 @@
-import{_ as a,o,c as n,l as e,a as t}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Project participation","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/contribution.md","filePath":"en/vue-webapp/contribution.md","lastUpdated":1726474804000}'),r={name:"en/vue-webapp/contribution.md"},i=e("h1",{id:"project-participation",tabindex:"-1"},[t("Project participation "),e("a",{class:"header-anchor",href:"#project-participation","aria-label":'Permalink to "Project participation"'},"​")],-1),p=e("p",null,[e("a",{href:"https://github.com/vuesence/create-vue-webapp",target:"_blank",rel:"noreferrer"},"create-vue-webapp"),t(" and "),e("a",{href:"https://github.com/vuesence/vue-webapp",target:"_blank",rel:"noreferrer"},"vue-webapp"),t(" are open source projects under the MIT license.")],-1),c=e("p",null,"Contributions are welcome.",-1),s=[i,p,c];function u(l,d,m,b,_,h){return o(),n("div",null,s)}const v=a(r,[["render",u]]);export{f as __pageData,v as default};
+import{_ as a,o,c as n,l as e,a as t}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Project participation","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/contribution.md","filePath":"en/vue-webapp/contribution.md","lastUpdated":1726505115000}'),r={name:"en/vue-webapp/contribution.md"},i=e("h1",{id:"project-participation",tabindex:"-1"},[t("Project participation "),e("a",{class:"header-anchor",href:"#project-participation","aria-label":'Permalink to "Project participation"'},"​")],-1),p=e("p",null,[e("a",{href:"https://github.com/vuesence/create-vue-webapp",target:"_blank",rel:"noreferrer"},"create-vue-webapp"),t(" and "),e("a",{href:"https://github.com/vuesence/vue-webapp",target:"_blank",rel:"noreferrer"},"vue-webapp"),t(" are open source projects under the MIT license.")],-1),c=e("p",null,"Contributions are welcome.",-1),s=[i,p,c];function u(l,d,m,b,_,h){return o(),n("div",null,s)}const v=a(r,[["render",u]]);export{f as __pageData,v as default};
diff --git a/assets/en_vue-webapp_getting-started.md.PWklTDjS.js b/assets/en_vue-webapp_getting-started.md.PWklTDjS.js
new file mode 100644
index 000000000..95cefb1aa
--- /dev/null
+++ b/assets/en_vue-webapp_getting-started.md.PWklTDjS.js
@@ -0,0 +1,39 @@
+import{_ as a,o as s,c as i,a4 as t,ad as f}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Getting started","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"vue-webapp"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/getting-started.md","filePath":"en/vue-webapp/getting-started.md","lastUpdated":1726505115000}'),n={name:"en/vue-webapp/getting-started.md"},h=t(`

Getting started

Installation via create vue-webapp

With this method, you can select which options will be installed:

sh
$ pnpm create vue-webapp
+
+ Project name: ... my-vue-project
+ Add a Splash screen? ... no / yes
+ Make it PWA (adds service worker and manifest)? ... no / yes
+ Add Open Graph meta tags? ... no / yes
+ Add Google Analytics code? ... no / yes
+ Add Github Action Workflow for publishing it on GitHub Pages? ... no / yes
+ Select application layout » MainLayout
+ Select navigation drawer » SimpleDrawer
+ Select webapp navbar » MantineSimpleNavbar
+ Select webapp header » MantineSimpleHeader
+ Select webapp footer » MantineRichFooter
+ Add API layer (REST)? ... no / yes
+ Add JSON-RPC adapter? ... no / yes
+
+Scaffolding project in /home/ubuntu/my-vue-project...
Silent installation

It is possible to scaffold the app without manually entering parameters by specifying a configuration file with options:

bash
pnpm create vue-webapp -c config.json
+// or
+pnpm create vue-webapp --config config.json

The format of the config.json file should be like this:

json
{
+  "projectName": "my-vue-project",
+  "splashScreen": false,
+  "pwa": true,
+  "openGraph": false,
+  "googleAnalytics": false,
+  "githubActionsGithubPagesWorkflow": true,
+  "layout": "mainLayout",
+  "navigationDrawer": "SimpleDrawer",
+  "navbar": "MantineSimpleNavbar",
+  "header": "MantineSimpleHeader",
+  "footer": "MantineRichFooter",
+  "api": true,
+  "jsonRpc": false,
+  "overwrite": true
+}

The overwrite parameter tells whether to overwrite the content in case of existing directory. It accepts values: "yes", "no" and "ignore".

Also, the command

bash
$ pnpm create vue-webapp .

will create the project in the current directory.

This method will only install the selected components and functionality

Initializing and launching a web application

sh
$ cd my-vue-project
+$ pnpm i
+$ pnpm dev

Result in a browser:

image

Installation from the repository

With this method everything will be installed, but a minimum of functionality will be enabled. It is useful for testing all available components and functionality.

sh
$ git clone https://github.com/vuesence/vue-webapp.git
+$ cd vue-webapp
+$ pnpm i
+$ pnpm dev
`,13),p=[h];function l(d,e,k,c,F,v){return s(),i("div",null,p)}const o=a(n,[["render",l],["__scopeId","data-v-cf4ff237"]]);export{g as __pageData,o as default}; diff --git a/assets/en_vue-webapp_getting-started.md.PWklTDjS.lean.js b/assets/en_vue-webapp_getting-started.md.PWklTDjS.lean.js new file mode 100644 index 000000000..41b71cccd --- /dev/null +++ b/assets/en_vue-webapp_getting-started.md.PWklTDjS.lean.js @@ -0,0 +1 @@ +import{_ as a,o as s,c as i,a4 as t,ad as f}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Getting started","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"vue-webapp"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/getting-started.md","filePath":"en/vue-webapp/getting-started.md","lastUpdated":1726505115000}'),n={name:"en/vue-webapp/getting-started.md"},h=t("",13),p=[h];function l(d,e,k,c,F,v){return s(),i("div",null,p)}const o=a(n,[["render",l],["__scopeId","data-v-cf4ff237"]]);export{g as __pageData,o as default}; diff --git a/assets/en_vue-webapp_getting-started.md.c6z4VCXj.js b/assets/en_vue-webapp_getting-started.md.c6z4VCXj.js deleted file mode 100644 index 1f8f6aff0..000000000 --- a/assets/en_vue-webapp_getting-started.md.c6z4VCXj.js +++ /dev/null @@ -1,39 +0,0 @@ -import{_ as a,o as e,c as s,a4 as i,ad as t}from"./chunks/framework.B8KxSsRZ.js";const o=JSON.parse('{"title":"Getting started","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"vue-webapp"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/getting-started.md","filePath":"en/vue-webapp/getting-started.md","lastUpdated":1726474804000}'),n={name:"en/vue-webapp/getting-started.md"},h=i(`

Getting started

Installation via create vue-webapp

With this method, you can select which options will be installed:

sh
$ pnpm create vue-webapp
-
- Project name: ... my-vue-project
- Add a Splash screen? ... no / yes
- Make it PWA (adds service worker and manifest)? ... no / yes
- Add Open Graph meta tags? ... no / yes
- Add Google Analytics code? ... no / yes
- Add Github Action Workflow for publishing it on GitHub Pages? ... no / yes
- Select application layout » MainLayout
- Select navigation drawer » SimpleDrawer
- Select webapp navbar » MantineSimpleNavbar
- Select webapp header » MantineSimpleHeader
- Select webapp footer » MantineRichFooter
- Add API layer (REST)? ... no / yes
- Add JSON-RPC adapter? ... no / yes
-
-Scaffolding project in /home/ubuntu/my-vue-project...
Silent installation

It is possible to scaffold the app without manually entering parameters by specifying a configuration file with options:

bash
pnpm create vue-webapp -c config.json
-// or
-pnpm create vue-webapp --config config.json

The format of the config.json file should be like this:

json
{
-  "projectName": "my-vue-project",
-  "splashScreen": false,
-  "pwa": true,
-  "openGraph": false,
-  "googleAnalytics": false,
-  "githubActionsGithubPagesWorkflow": true,
-  "layout": "mainLayout",
-  "navigationDrawer": "SimpleDrawer",
-  "navbar": "MantineSimpleNavbar",
-  "header": "MantineSimpleHeader",
-  "footer": "MantineRichFooter",
-  "api": true,
-  "jsonRpc": false,
-  "overwrite": true
-}

The overwrite parameter tells whether to overwrite the content in case of existing directory. It accepts values: "yes", "no" and "ignore".

Also, the command

bash
$ pnpm create vue-webapp .

will create the project in the current directory.

This method will only install the selected components and functionality

Initializing and launching a web application

sh
$ cd my-vue-project
-$ pnpm i
-$ pnpm dev

Result in a browser:

image

Installation from the repository

With this method everything will be installed, but a minimum of functionality will be enabled. It is useful for testing all available components and functionality.

sh
$ git clone https://github.com/vuesence/vue-webapp.git
-$ cd vue-webapp
-$ pnpm i
-$ pnpm dev
`,13),p=[h];function l(d,k,F,v,r,f){return e(),s("div",null,p)}const E=a(n,[["render",l],["__scopeId","data-v-7f085eee"]]);export{o as __pageData,E as default}; diff --git a/assets/en_vue-webapp_getting-started.md.c6z4VCXj.lean.js b/assets/en_vue-webapp_getting-started.md.c6z4VCXj.lean.js deleted file mode 100644 index ebdc031e1..000000000 --- a/assets/en_vue-webapp_getting-started.md.c6z4VCXj.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,o as e,c as s,a4 as i,ad as t}from"./chunks/framework.B8KxSsRZ.js";const o=JSON.parse('{"title":"Getting started","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"vue-webapp"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/getting-started.md","filePath":"en/vue-webapp/getting-started.md","lastUpdated":1726474804000}'),n={name:"en/vue-webapp/getting-started.md"},h=i("",13),p=[h];function l(d,k,F,v,r,f){return e(),s("div",null,p)}const E=a(n,[["render",l],["__scopeId","data-v-7f085eee"]]);export{o as __pageData,E as default}; diff --git a/assets/en_vue-webapp_guidelines.md.C_gT1gTi.js b/assets/en_vue-webapp_guidelines.md.BR4TLb_e.js similarity index 97% rename from assets/en_vue-webapp_guidelines.md.C_gT1gTi.js rename to assets/en_vue-webapp_guidelines.md.BR4TLb_e.js index aafd69d51..1c4516f57 100644 --- a/assets/en_vue-webapp_guidelines.md.C_gT1gTi.js +++ b/assets/en_vue-webapp_guidelines.md.BR4TLb_e.js @@ -1 +1 @@ -import{_ as e,o as i,c as t,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"Guidelines","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"vue-webapp"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/guidelines.md","filePath":"en/vue-webapp/guidelines.md","lastUpdated":1726474804000}'),a={name:"en/vue-webapp/guidelines.md"},o=n('

Guidelines

  • Lightweight, efficient web application with modern UI/UX
  • Vue 3, Composition API, script setup syntax
  • Do not use third party libraries unnecessarily. The only necessary dependency is vue-router.
  • Use clean and efficient HTML5 and CSS3 for layout
  • Include specific functionality only when needed
  • High degree of customization

  • Plugging in specific functionality, such as i18n, means not just adding that library to package.json, but a full-fledged minimal working integration - creating a corresponding composable function, multiple locales, and applying t() in a template for illustration with necessary comments in the code to facilitate later use and customization.

  • Integrating certain functionality that uses a third-party library (e.g. toaster or modal window) should be done through a wrapper, so that it would be easy for the developer to change the specific package that implements the functionality if desired.

  • The scaffolded web application uses TypeScript, but it is possible to continue developing the application in pure JavaScript.

  • Vite is used as the builder.

  • SCSS is used as the CSS preprocessor.

  • Antony Fu's eslint-config is used for linting and formatting in ESlint.

  • The result should be a Vue 3 application without not-needed dependencies, unless the user explicitly includes them in the framework.

',4),l=[o];function s(r,c,p,d,u,h){return i(),t("div",null,l)}const f=e(a,[["render",s]]);export{m as __pageData,f as default}; +import{_ as e,o as i,c as t,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"Guidelines","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"vue-webapp"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/guidelines.md","filePath":"en/vue-webapp/guidelines.md","lastUpdated":1726505115000}'),a={name:"en/vue-webapp/guidelines.md"},o=n('

Guidelines

  • Lightweight, efficient web application with modern UI/UX
  • Vue 3, Composition API, script setup syntax
  • Do not use third party libraries unnecessarily. The only necessary dependency is vue-router.
  • Use clean and efficient HTML5 and CSS3 for layout
  • Include specific functionality only when needed
  • High degree of customization

  • Plugging in specific functionality, such as i18n, means not just adding that library to package.json, but a full-fledged minimal working integration - creating a corresponding composable function, multiple locales, and applying t() in a template for illustration with necessary comments in the code to facilitate later use and customization.

  • Integrating certain functionality that uses a third-party library (e.g. toaster or modal window) should be done through a wrapper, so that it would be easy for the developer to change the specific package that implements the functionality if desired.

  • The scaffolded web application uses TypeScript, but it is possible to continue developing the application in pure JavaScript.

  • Vite is used as the builder.

  • SCSS is used as the CSS preprocessor.

  • Antony Fu's eslint-config is used for linting and formatting in ESlint.

  • The result should be a Vue 3 application without not-needed dependencies, unless the user explicitly includes them in the framework.

',4),l=[o];function s(r,c,p,d,u,h){return i(),t("div",null,l)}const f=e(a,[["render",s]]);export{m as __pageData,f as default}; diff --git a/assets/en_vue-webapp_guidelines.md.C_gT1gTi.lean.js b/assets/en_vue-webapp_guidelines.md.BR4TLb_e.lean.js similarity index 90% rename from assets/en_vue-webapp_guidelines.md.C_gT1gTi.lean.js rename to assets/en_vue-webapp_guidelines.md.BR4TLb_e.lean.js index 95aebb529..708916dc6 100644 --- a/assets/en_vue-webapp_guidelines.md.C_gT1gTi.lean.js +++ b/assets/en_vue-webapp_guidelines.md.BR4TLb_e.lean.js @@ -1 +1 @@ -import{_ as e,o as i,c as t,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"Guidelines","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"vue-webapp"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/guidelines.md","filePath":"en/vue-webapp/guidelines.md","lastUpdated":1726474804000}'),a={name:"en/vue-webapp/guidelines.md"},o=n("",4),l=[o];function s(r,c,p,d,u,h){return i(),t("div",null,l)}const f=e(a,[["render",s]]);export{m as __pageData,f as default}; +import{_ as e,o as i,c as t,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"Guidelines","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"vue-webapp"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/guidelines.md","filePath":"en/vue-webapp/guidelines.md","lastUpdated":1726505115000}'),a={name:"en/vue-webapp/guidelines.md"},o=n("",4),l=[o];function s(r,c,p,d,u,h){return i(),t("div",null,l)}const f=e(a,[["render",s]]);export{m as __pageData,f as default}; diff --git a/assets/en_vue-webapp_index.md.DCbMZLDS.js b/assets/en_vue-webapp_index.md.DCbMZLDS.js deleted file mode 100644 index 356b54a38..000000000 --- a/assets/en_vue-webapp_index.md.DCbMZLDS.js +++ /dev/null @@ -1,8 +0,0 @@ -import{_ as a,o as s,c as i,a4 as t,ae as e}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"Scaffolding a Vue webapp","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"vue-webapp"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/index.md","filePath":"en/vue-webapp/index.md","lastUpdated":1726474804000}'),d={name:"en/vue-webapp/index.md"},n=t(`

Scaffolding a Vue webapp

Summary

Vue 3 website builder/scaffolder (GitHub) for developers, with a choice of business template (portfolio, blog, store, etc.), layout template, design and functionality (API module, i18n, PWA, splash screen, auth module, themes, etc.), for further convenient customization and content filling.

sh
$ pnpm create vue-webapp
-
- Project name: ... my-vue-project
- Add a Splash screen? ... no / yes
- Make it PWA (adds service worker and manifest)? ... no / yes
- Add Open Graph meta tags? ... no / yes
- Add Google Analytics code? ... no / yes
-...

Justification

There are quite a few (mostly specific and quickly becoming obsolete) boilerplate templates for creating a Vue application. Usually it means creating an empty project with certain libraries. In other words, it's just setting up an environment to start development without, actually, code.

At the same time, many other frontend and backend frameworks have starter-kits that allow you to quickly create a ready-made blog, online store, business card site, portfolio, documentation, etc., which greatly helps in learning the framework itself, relevant technologies and best practices, as well as for solving business tasks.

As a result, it may seem that Vue is a rather low-level framework, and to create web applications quickly, efficiently and conveniently, you need to take some "metaframwork" or other solution - like Nuxt, Astro, VitePress, Vue Storefront - which explicitly position themselves as tools for solving certain (or a wide range of) business tasks.

There is a need for a tool similar to create-vue, for scaffolding a ready-to-go web application. On the one hand, a quite workable, adaptive website with the necessary functionality so that a novice developer could familiarize himself with a proven approach to solving the tasks involved. On the other hand, it should be minimalistic enough not to impose unwanted technologies and libraries on an experienced developer and create a skeleton of established best practices for further development of the application.

It is clear that defining one or another "best practice" (fetch or axios?) can be quite controversial, but nevertheless.

image

',11),l=[n];function h(p,c,o,r,k,f){return s(),i("div",null,l)}const v=a(d,[["render",h],["__scopeId","data-v-7dca3bf8"]]);export{b as __pageData,v as default}; diff --git a/assets/en_vue-webapp_index.md.DIWxE5Bz.js b/assets/en_vue-webapp_index.md.DIWxE5Bz.js new file mode 100644 index 000000000..9a77a8057 --- /dev/null +++ b/assets/en_vue-webapp_index.md.DIWxE5Bz.js @@ -0,0 +1,8 @@ +import{_ as a,o as s,c as i,a4 as t,ae as e}from"./chunks/framework.B8KxSsRZ.js";const v=JSON.parse('{"title":"Scaffolding a Vue webapp","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"vue-webapp"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/index.md","filePath":"en/vue-webapp/index.md","lastUpdated":1726505115000}'),d={name:"en/vue-webapp/index.md"},n=t(`

Scaffolding a Vue webapp

Summary

Vue 3 website builder/scaffolder (GitHub) for developers, with a choice of business template (portfolio, blog, store, etc.), layout template, design and functionality (API module, i18n, PWA, splash screen, auth module, themes, etc.), for further convenient customization and content filling.

sh
$ pnpm create vue-webapp
+
+ Project name: ... my-vue-project
+ Add a Splash screen? ... no / yes
+ Make it PWA (adds service worker and manifest)? ... no / yes
+ Add Open Graph meta tags? ... no / yes
+ Add Google Analytics code? ... no / yes
+...

Justification

There are quite a few (mostly specific and quickly becoming obsolete) boilerplate templates for creating a Vue application. Usually it means creating an empty project with certain libraries. In other words, it's just setting up an environment to start development without, actually, code.

At the same time, many other frontend and backend frameworks have starter-kits that allow you to quickly create a ready-made blog, online store, business card site, portfolio, documentation, etc., which greatly helps in learning the framework itself, relevant technologies and best practices, as well as for solving business tasks.

As a result, it may seem that Vue is a rather low-level framework, and to create web applications quickly, efficiently and conveniently, you need to take some "metaframwork" or other solution - like Nuxt, Astro, VitePress, Vue Storefront - which explicitly position themselves as tools for solving certain (or a wide range of) business tasks.

There is a need for a tool similar to create-vue, for scaffolding a ready-to-go web application. On the one hand, a quite workable, adaptive website with the necessary functionality so that a novice developer could familiarize himself with a proven approach to solving the tasks involved. On the other hand, it should be minimalistic enough not to impose unwanted technologies and libraries on an experienced developer and create a skeleton of established best practices for further development of the application.

It is clear that defining one or another "best practice" (fetch or axios?) can be quite controversial, but nevertheless.

image

',11),l=[n];function h(p,o,r,k,F,b){return s(),i("div",null,l)}const g=a(d,[["render",h],["__scopeId","data-v-59253abd"]]);export{v as __pageData,g as default}; diff --git a/assets/en_vue-webapp_index.md.DCbMZLDS.lean.js b/assets/en_vue-webapp_index.md.DIWxE5Bz.lean.js similarity index 55% rename from assets/en_vue-webapp_index.md.DCbMZLDS.lean.js rename to assets/en_vue-webapp_index.md.DIWxE5Bz.lean.js index e94652d2d..5f1b0cc99 100644 --- a/assets/en_vue-webapp_index.md.DCbMZLDS.lean.js +++ b/assets/en_vue-webapp_index.md.DIWxE5Bz.lean.js @@ -1 +1 @@ -import{_ as a,o as s,c as i,a4 as t,ae as e}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"Scaffolding a Vue webapp","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"vue-webapp"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/index.md","filePath":"en/vue-webapp/index.md","lastUpdated":1726474804000}'),d={name:"en/vue-webapp/index.md"},n=t("",11),l=[n];function h(p,c,o,r,k,f){return s(),i("div",null,l)}const v=a(d,[["render",h],["__scopeId","data-v-7dca3bf8"]]);export{b as __pageData,v as default}; +import{_ as a,o as s,c as i,a4 as t,ae as e}from"./chunks/framework.B8KxSsRZ.js";const v=JSON.parse('{"title":"Scaffolding a Vue webapp","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"vue-webapp"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/index.md","filePath":"en/vue-webapp/index.md","lastUpdated":1726505115000}'),d={name:"en/vue-webapp/index.md"},n=t("",11),l=[n];function h(p,o,r,k,F,b){return s(),i("div",null,l)}const g=a(d,[["render",h],["__scopeId","data-v-59253abd"]]);export{v as __pageData,g as default}; diff --git a/assets/en_vue-webapp_objectives.md.C6uRcCsz.js b/assets/en_vue-webapp_objectives.md.BrJDbKsB.js similarity index 97% rename from assets/en_vue-webapp_objectives.md.C6uRcCsz.js rename to assets/en_vue-webapp_objectives.md.BrJDbKsB.js index 46d109363..881c14683 100644 --- a/assets/en_vue-webapp_objectives.md.C6uRcCsz.js +++ b/assets/en_vue-webapp_objectives.md.BrJDbKsB.js @@ -1 +1 @@ -import{_ as e,o as t,c as i,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Objectives","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"vue-webapp"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/objectives.md","filePath":"en/vue-webapp/objectives.md","lastUpdated":1726474804000}'),o={name:"en/vue-webapp/objectives.md"},n=a('

Objectives

  1. Create a scaffolder of simple out-of-the-box SPA applications for a specific task in a few minutes, with the possibility of further customization and filling it with content.
  2. Fine-tune the application using effective functional code blocks.
  3. Collect and generalize the best techniques and practices for creating a modern reactive Vue application.
  4. Enable novice developers to familiarize themselves with the Vue.js ecosystem with ready-made examples, learn front-end and Vue 3 best practices, from building application architecture to naming CSS classes.
  5. Enable experienced developers to quickly and efficiently scaffold a ready to use web application and leverage reusable code blocks (boilerplates), especially those that cannot be distributed as NPM packages.

This application should act as a website wireframe builder, with the ability to choose when scaffolding:

  • A global business website template (portfolio, blog, online store, etc.)
  • Variations of the general layout of the web application
  • Specific component options (header, footer, navigation drawer, etc.)
  • General style/design options
  • Specific functionality injected as functional fragments (API module, i18n, PWA, splash screen, Auth module, themes, etc.)
  • GitHub actions options with the ability to build and deploy to popular hosting solutions
  • Ability to connect/integrate popular libraries (including UI) if needed
  • Possibility to integrate with certain headless CRM and API services

Separately, it is planned to create a web showcase, where the user, dynamically changing the parameters, will be able to view and test the available site layouts, themes/styling, components (header, footer, etc.) and functionality of future application, as well as their combination with each other.

',5),l=[n];function s(c,r,p,d,h,u){return t(),i("div",null,l)}const m=e(o,[["render",s]]);export{f as __pageData,m as default}; +import{_ as e,o as t,c as i,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Objectives","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"vue-webapp"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/objectives.md","filePath":"en/vue-webapp/objectives.md","lastUpdated":1726505115000}'),o={name:"en/vue-webapp/objectives.md"},n=a('

Objectives

  1. Create a scaffolder of simple out-of-the-box SPA applications for a specific task in a few minutes, with the possibility of further customization and filling it with content.
  2. Fine-tune the application using effective functional code blocks.
  3. Collect and generalize the best techniques and practices for creating a modern reactive Vue application.
  4. Enable novice developers to familiarize themselves with the Vue.js ecosystem with ready-made examples, learn front-end and Vue 3 best practices, from building application architecture to naming CSS classes.
  5. Enable experienced developers to quickly and efficiently scaffold a ready to use web application and leverage reusable code blocks (boilerplates), especially those that cannot be distributed as NPM packages.

This application should act as a website wireframe builder, with the ability to choose when scaffolding:

  • A global business website template (portfolio, blog, online store, etc.)
  • Variations of the general layout of the web application
  • Specific component options (header, footer, navigation drawer, etc.)
  • General style/design options
  • Specific functionality injected as functional fragments (API module, i18n, PWA, splash screen, Auth module, themes, etc.)
  • GitHub actions options with the ability to build and deploy to popular hosting solutions
  • Ability to connect/integrate popular libraries (including UI) if needed
  • Possibility to integrate with certain headless CRM and API services

Separately, it is planned to create a web showcase, where the user, dynamically changing the parameters, will be able to view and test the available site layouts, themes/styling, components (header, footer, etc.) and functionality of future application, as well as their combination with each other.

',5),l=[n];function s(c,r,p,d,h,u){return t(),i("div",null,l)}const m=e(o,[["render",s]]);export{f as __pageData,m as default}; diff --git a/assets/en_vue-webapp_objectives.md.C6uRcCsz.lean.js b/assets/en_vue-webapp_objectives.md.BrJDbKsB.lean.js similarity index 90% rename from assets/en_vue-webapp_objectives.md.C6uRcCsz.lean.js rename to assets/en_vue-webapp_objectives.md.BrJDbKsB.lean.js index 9a4cac47b..54655bf2c 100644 --- a/assets/en_vue-webapp_objectives.md.C6uRcCsz.lean.js +++ b/assets/en_vue-webapp_objectives.md.BrJDbKsB.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as i,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Objectives","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"vue-webapp"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/objectives.md","filePath":"en/vue-webapp/objectives.md","lastUpdated":1726474804000}'),o={name:"en/vue-webapp/objectives.md"},n=a("",5),l=[n];function s(c,r,p,d,h,u){return t(),i("div",null,l)}const m=e(o,[["render",s]]);export{f as __pageData,m as default}; +import{_ as e,o as t,c as i,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Objectives","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"vue-webapp"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/objectives.md","filePath":"en/vue-webapp/objectives.md","lastUpdated":1726505115000}'),o={name:"en/vue-webapp/objectives.md"},n=a("",5),l=[n];function s(c,r,p,d,h,u){return t(),i("div",null,l)}const m=e(o,[["render",s]]);export{f as __pageData,m as default}; diff --git a/assets/en_vue-webapp_options_adaptability.md.DNOVsT2_.js b/assets/en_vue-webapp_options_adaptability.md.juDTEdCm.js similarity index 99% rename from assets/en_vue-webapp_options_adaptability.md.DNOVsT2_.js rename to assets/en_vue-webapp_options_adaptability.md.juDTEdCm.js index aede55ee8..36548374e 100644 --- a/assets/en_vue-webapp_options_adaptability.md.DNOVsT2_.js +++ b/assets/en_vue-webapp_options_adaptability.md.juDTEdCm.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Adaptability","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/adaptability.md","filePath":"en/vue-webapp/options/adaptability.md","lastUpdated":1726474804000}'),t={name:"en/vue-webapp/options/adaptability.md"},p=n(`

Adaptability

Adaptability is implemented with useScreenWidth composable function via four CSS classes (mobile, tablet, notebook and desktop) dynamically set on the body element.

The configuration parameters (upper breakpoint for each mode) for useScreenWidth are set in App.vue:

vue
<script setup lang="ts">
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Adaptability","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/adaptability.md","filePath":"en/vue-webapp/options/adaptability.md","lastUpdated":1726505115000}'),t={name:"en/vue-webapp/options/adaptability.md"},p=n(`

Adaptability

Adaptability is implemented with useScreenWidth composable function via four CSS classes (mobile, tablet, notebook and desktop) dynamically set on the body element.

The configuration parameters (upper breakpoint for each mode) for useScreenWidth are set in App.vue:

vue
<script setup lang="ts">
 import { useScreenWidth } from "@/composables/useScreenWidth";
 
 useScreenWidth({
diff --git a/assets/en_vue-webapp_options_adaptability.md.DNOVsT2_.lean.js b/assets/en_vue-webapp_options_adaptability.md.juDTEdCm.lean.js
similarity index 90%
rename from assets/en_vue-webapp_options_adaptability.md.DNOVsT2_.lean.js
rename to assets/en_vue-webapp_options_adaptability.md.juDTEdCm.lean.js
index db09c6daf..c4ad2f0c0 100644
--- a/assets/en_vue-webapp_options_adaptability.md.DNOVsT2_.lean.js
+++ b/assets/en_vue-webapp_options_adaptability.md.juDTEdCm.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Adaptability","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/adaptability.md","filePath":"en/vue-webapp/options/adaptability.md","lastUpdated":1726474804000}'),t={name:"en/vue-webapp/options/adaptability.md"},p=n("",9),h=[p];function l(e,k,E,d,r,o){return i(),a("div",null,h)}const y=s(t,[["render",l]]);export{c as __pageData,y as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Adaptability","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/adaptability.md","filePath":"en/vue-webapp/options/adaptability.md","lastUpdated":1726505115000}'),t={name:"en/vue-webapp/options/adaptability.md"},p=n("",9),h=[p];function l(e,k,E,d,r,o){return i(),a("div",null,h)}const y=s(t,[["render",l]]);export{c as __pageData,y as default};
diff --git a/assets/en_vue-webapp_options_api.md.BkpXLhVW.js b/assets/en_vue-webapp_options_api.md.D-qfidGc.js
similarity index 99%
rename from assets/en_vue-webapp_options_api.md.BkpXLhVW.js
rename to assets/en_vue-webapp_options_api.md.D-qfidGc.js
index 8604f967d..8f06938fd 100644
--- a/assets/en_vue-webapp_options_api.md.BkpXLhVW.js
+++ b/assets/en_vue-webapp_options_api.md.D-qfidGc.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"API module","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/api.md","filePath":"en/vue-webapp/options/api.md","lastUpdated":1726474804000}'),t={name:"en/vue-webapp/options/api.md"},p=n(`

API module

API (REST)

Creates a transport client agnostic service layer for REST calls to the backend over HTTP(S).

The HTTP transport client can be fetch, axios or a promise version of XHR, at the developer's choice. API calls in the application code will look as follows:

js
import { api } from "@/services/api";
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"API module","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/api.md","filePath":"en/vue-webapp/options/api.md","lastUpdated":1726505115000}'),t={name:"en/vue-webapp/options/api.md"},p=n(`

API module

API (REST)

Creates a transport client agnostic service layer for REST calls to the backend over HTTP(S).

The HTTP transport client can be fetch, axios or a promise version of XHR, at the developer's choice. API calls in the application code will look as follows:

js
import { api } from "@/services/api";
 
 const apiData = ref();
 apiData.value = await api.utils.testRest();

Each call is an asynchronous function that returns Promise.

js
// utils.ts
diff --git a/assets/en_vue-webapp_options_api.md.BkpXLhVW.lean.js b/assets/en_vue-webapp_options_api.md.D-qfidGc.lean.js
similarity index 90%
rename from assets/en_vue-webapp_options_api.md.BkpXLhVW.lean.js
rename to assets/en_vue-webapp_options_api.md.D-qfidGc.lean.js
index 3b0076847..532a0cbb3 100644
--- a/assets/en_vue-webapp_options_api.md.BkpXLhVW.lean.js
+++ b/assets/en_vue-webapp_options_api.md.D-qfidGc.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"API module","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/api.md","filePath":"en/vue-webapp/options/api.md","lastUpdated":1726474804000}'),t={name:"en/vue-webapp/options/api.md"},p=n("",17),h=[p];function e(l,k,r,E,o,d){return i(),a("div",null,h)}const y=s(t,[["render",e]]);export{g as __pageData,y as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"API module","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/api.md","filePath":"en/vue-webapp/options/api.md","lastUpdated":1726505115000}'),t={name:"en/vue-webapp/options/api.md"},p=n("",17),h=[p];function e(l,k,r,E,o,d){return i(),a("div",null,h)}const y=s(t,[["render",e]]);export{g as __pageData,y as default};
diff --git a/assets/en_vue-webapp_options_baseIcon.md.tU1fqwaY.js b/assets/en_vue-webapp_options_baseIcon.md.B2NPbipB.js
similarity index 98%
rename from assets/en_vue-webapp_options_baseIcon.md.tU1fqwaY.js
rename to assets/en_vue-webapp_options_baseIcon.md.B2NPbipB.js
index b9c003135..d50280a52 100644
--- a/assets/en_vue-webapp_options_baseIcon.md.tU1fqwaY.js
+++ b/assets/en_vue-webapp_options_baseIcon.md.B2NPbipB.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"BaseIcon","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/baseIcon.md","filePath":"en/vue-webapp/options/baseIcon.md","lastUpdated":1726474804000}'),t={name:"en/vue-webapp/options/baseIcon.md"},e=n(`

BaseIcon

Consists of the BaseIcon component and the utils.ts utility.

Allows to use an icon component in the application with dynamic name attribute:

vue
<script setup lang="ts">
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"BaseIcon","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/baseIcon.md","filePath":"en/vue-webapp/options/baseIcon.md","lastUpdated":1726505115000}'),t={name:"en/vue-webapp/options/baseIcon.md"},e=n(`

BaseIcon

Consists of the BaseIcon component and the utils.ts utility.

Allows to use an icon component in the application with dynamic name attribute:

vue
<script setup lang="ts">
 import BaseIcon from "@/components/ui/BaseIcon.vue";
 import { useAppConfig } from "@/composables/useAppConfig";
 
diff --git a/assets/en_vue-webapp_options_baseIcon.md.tU1fqwaY.lean.js b/assets/en_vue-webapp_options_baseIcon.md.B2NPbipB.lean.js
similarity index 90%
rename from assets/en_vue-webapp_options_baseIcon.md.tU1fqwaY.lean.js
rename to assets/en_vue-webapp_options_baseIcon.md.B2NPbipB.lean.js
index 5f5b2f22c..7fbe7968c 100644
--- a/assets/en_vue-webapp_options_baseIcon.md.tU1fqwaY.lean.js
+++ b/assets/en_vue-webapp_options_baseIcon.md.B2NPbipB.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"BaseIcon","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/baseIcon.md","filePath":"en/vue-webapp/options/baseIcon.md","lastUpdated":1726474804000}'),t={name:"en/vue-webapp/options/baseIcon.md"},e=n("",5),p=[e];function h(l,k,r,E,o,d){return i(),a("div",null,p)}const y=s(t,[["render",h]]);export{c as __pageData,y as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"BaseIcon","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/baseIcon.md","filePath":"en/vue-webapp/options/baseIcon.md","lastUpdated":1726505115000}'),t={name:"en/vue-webapp/options/baseIcon.md"},e=n("",5),p=[e];function h(l,k,r,E,o,d){return i(),a("div",null,p)}const y=s(t,[["render",h]]);export{c as __pageData,y as default};
diff --git a/assets/en_vue-webapp_options_description.md.X5jbHujp.js b/assets/en_vue-webapp_options_description.md.D8k7Cuos.js
similarity index 96%
rename from assets/en_vue-webapp_options_description.md.X5jbHujp.js
rename to assets/en_vue-webapp_options_description.md.D8k7Cuos.js
index 1fc8dd4fd..6396c3c38 100644
--- a/assets/en_vue-webapp_options_description.md.X5jbHujp.js
+++ b/assets/en_vue-webapp_options_description.md.D8k7Cuos.js
@@ -1,4 +1,4 @@
-import{_ as i,o as e,c as s,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"Implementation details","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/description.md","filePath":"en/vue-webapp/options/description.md","lastUpdated":1726474804000}'),t={name:"en/vue-webapp/options/description.md"},n=a(`

Implementation details

Code injections in the index.html

To avoid bloating index.html injections of code fragments into it (Open graph, Google analytics, Splash screen, Service worker etc.) are done via vite-plugin-html-injection Vite plugin.

The code snippets themselves are located in the ./src/utils/injections/ directory. The plugin configuration file injection-config.ts is also located there.

CSS tricks

A hack is applied in the application on large screen resolutions to prevent screen jumping when the main scrollbar appears/disappears

css
html {
+import{_ as i,o as e,c as s,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"Implementation details","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/description.md","filePath":"en/vue-webapp/options/description.md","lastUpdated":1726505115000}'),t={name:"en/vue-webapp/options/description.md"},n=a(`

Implementation details

Code injections in the index.html

To avoid bloating index.html injections of code fragments into it (Open graph, Google analytics, Splash screen, Service worker etc.) are done via vite-plugin-html-injection Vite plugin.

The code snippets themselves are located in the ./src/utils/injections/ directory. The plugin configuration file injection-config.ts is also located there.

CSS tricks

A hack is applied in the application on large screen resolutions to prevent screen jumping when the main scrollbar appears/disappears

css
html {
   overflow-x: hidden;
   margin-right: calc(-1 * (100vw - 100%))
 }
`,7),l=[n];function p(h,o,r,c,d,k){return e(),s("div",null,l)}const E=i(t,[["render",p]]);export{m as __pageData,E as default}; diff --git a/assets/en_vue-webapp_options_description.md.X5jbHujp.lean.js b/assets/en_vue-webapp_options_description.md.D8k7Cuos.lean.js similarity index 81% rename from assets/en_vue-webapp_options_description.md.X5jbHujp.lean.js rename to assets/en_vue-webapp_options_description.md.D8k7Cuos.lean.js index 69f1be902..2bc7cf83f 100644 --- a/assets/en_vue-webapp_options_description.md.X5jbHujp.lean.js +++ b/assets/en_vue-webapp_options_description.md.D8k7Cuos.lean.js @@ -1 +1 @@ -import{_ as i,o as e,c as s,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"Implementation details","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/description.md","filePath":"en/vue-webapp/options/description.md","lastUpdated":1726474804000}'),t={name:"en/vue-webapp/options/description.md"},n=a("",7),l=[n];function p(h,o,r,c,d,k){return e(),s("div",null,l)}const E=i(t,[["render",p]]);export{m as __pageData,E as default}; +import{_ as i,o as e,c as s,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"Implementation details","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/description.md","filePath":"en/vue-webapp/options/description.md","lastUpdated":1726505115000}'),t={name:"en/vue-webapp/options/description.md"},n=a("",7),l=[n];function p(h,o,r,c,d,k){return e(),s("div",null,l)}const E=i(t,[["render",p]]);export{m as __pageData,E as default}; diff --git a/assets/en_vue-webapp_options_drawer.md.CueX4w1O.js b/assets/en_vue-webapp_options_drawer.md.CueX4w1O.js deleted file mode 100644 index 1453231d8..000000000 --- a/assets/en_vue-webapp_options_drawer.md.CueX4w1O.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as a,c as t,a4 as o,af as r,ag as n}from"./chunks/framework.B8KxSsRZ.js";const _=JSON.parse('{"title":"Navigation drawers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/drawer.md","filePath":"en/vue-webapp/options/drawer.md","lastUpdated":1726474804000}'),d={name:"en/vue-webapp/options/drawer.md"},i=o('

Navigation drawers

There are currently two types of navigation drawers to choose from.

SimpleDrawer

image

It is always on for notebook and desktop screen resolutions, and can be opened for mobile and tablet by clicking/tapping on the "hamburger" icon.

TouchSlideoutDrawer

image

Similar to SimpleDrawer, but is controlled by touch on touch screens. Adds a nice UX.

Functionality is implemented with useTouchSwipe composable function and TouchSlideoutDrawer component.

',9),s=[i];function c(p,l,u,m,h,v){return a(),t("div",null,s)}const b=e(d,[["render",c],["__scopeId","data-v-9192108e"]]);export{_ as __pageData,b as default}; diff --git a/assets/en_vue-webapp_options_drawer.md.bda6xC_f.js b/assets/en_vue-webapp_options_drawer.md.bda6xC_f.js new file mode 100644 index 000000000..505d2c4a1 --- /dev/null +++ b/assets/en_vue-webapp_options_drawer.md.bda6xC_f.js @@ -0,0 +1 @@ +import{_ as a,o as e,c as t,a4 as o,af as r,ag as c}from"./chunks/framework.B8KxSsRZ.js";const w=JSON.parse('{"title":"Navigation drawers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/drawer.md","filePath":"en/vue-webapp/options/drawer.md","lastUpdated":1726505115000}'),n={name:"en/vue-webapp/options/drawer.md"},d=o('

Navigation drawers

There are currently two types of navigation drawers to choose from.

SimpleDrawer

image

It is always on for notebook and desktop screen resolutions, and can be opened for mobile and tablet by clicking/tapping on the "hamburger" icon.

TouchSlideoutDrawer

image

Similar to SimpleDrawer, but is controlled by touch on touch screens. Adds a nice UX.

Functionality is implemented with useTouchSwipe composable function and TouchSlideoutDrawer component.

',9),i=[d];function s(p,l,b,u,m,h){return e(),t("div",null,i)}const _=a(n,[["render",s],["__scopeId","data-v-28b9466c"]]);export{w as __pageData,_ as default}; diff --git a/assets/en_vue-webapp_options_drawer.md.CueX4w1O.lean.js b/assets/en_vue-webapp_options_drawer.md.bda6xC_f.lean.js similarity index 52% rename from assets/en_vue-webapp_options_drawer.md.CueX4w1O.lean.js rename to assets/en_vue-webapp_options_drawer.md.bda6xC_f.lean.js index bd1f41827..374bc207c 100644 --- a/assets/en_vue-webapp_options_drawer.md.CueX4w1O.lean.js +++ b/assets/en_vue-webapp_options_drawer.md.bda6xC_f.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,a4 as o,af as r,ag as n}from"./chunks/framework.B8KxSsRZ.js";const _=JSON.parse('{"title":"Navigation drawers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/drawer.md","filePath":"en/vue-webapp/options/drawer.md","lastUpdated":1726474804000}'),d={name:"en/vue-webapp/options/drawer.md"},i=o("",9),s=[i];function c(p,l,u,m,h,v){return a(),t("div",null,s)}const b=e(d,[["render",c],["__scopeId","data-v-9192108e"]]);export{_ as __pageData,b as default}; +import{_ as a,o as e,c as t,a4 as o,af as r,ag as c}from"./chunks/framework.B8KxSsRZ.js";const w=JSON.parse('{"title":"Navigation drawers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/drawer.md","filePath":"en/vue-webapp/options/drawer.md","lastUpdated":1726505115000}'),n={name:"en/vue-webapp/options/drawer.md"},d=o("",9),i=[d];function s(p,l,b,u,m,h){return e(),t("div",null,i)}const _=a(n,[["render",s],["__scopeId","data-v-28b9466c"]]);export{w as __pageData,_ as default}; diff --git a/assets/en_vue-webapp_options_footer.md.4oGX9Zm-.js b/assets/en_vue-webapp_options_footer.md.4oGX9Zm-.js new file mode 100644 index 000000000..a2638c116 --- /dev/null +++ b/assets/en_vue-webapp_options_footer.md.4oGX9Zm-.js @@ -0,0 +1 @@ +import{_ as a,o as e,c as t,a4 as o,ah as r,ai as i,aj as d,ak as b,al as n}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Footers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/footer.md","filePath":"en/vue-webapp/options/footer.md","lastUpdated":1726505115000}'),s={name:"en/vue-webapp/options/footer.md"},f=o('

Footers

The following types of footers are currently available:

SimpleFooter

image

RichFooter

image

MantineSimpleFooter

image

MantineRichFooter

image

DistributedFooter

image

',12),l=[f];function p(m,c,h,_,v,u){return e(),t("div",null,l)}const q=a(s,[["render",p],["__scopeId","data-v-abd8f7b8"]]);export{F as __pageData,q as default}; diff --git a/assets/en_vue-webapp_options_footer.md.BhQS9DbB.lean.js b/assets/en_vue-webapp_options_footer.md.4oGX9Zm-.lean.js similarity index 51% rename from assets/en_vue-webapp_options_footer.md.BhQS9DbB.lean.js rename to assets/en_vue-webapp_options_footer.md.4oGX9Zm-.lean.js index 67dcd118f..3fe144a0a 100644 --- a/assets/en_vue-webapp_options_footer.md.BhQS9DbB.lean.js +++ b/assets/en_vue-webapp_options_footer.md.4oGX9Zm-.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as o,ah as r,ai as i,aj as n,ak as s,al as d}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Footers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/footer.md","filePath":"en/vue-webapp/options/footer.md","lastUpdated":1726474804000}'),l={name:"en/vue-webapp/options/footer.md"},p=o("",12),m=[p];function c(h,_,f,v,u,b){return e(),t("div",null,m)}const q=a(l,[["render",c],["__scopeId","data-v-55e4a3a5"]]);export{F as __pageData,q as default}; +import{_ as a,o as e,c as t,a4 as o,ah as r,ai as i,aj as d,ak as b,al as n}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Footers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/footer.md","filePath":"en/vue-webapp/options/footer.md","lastUpdated":1726505115000}'),s={name:"en/vue-webapp/options/footer.md"},f=o("",12),l=[f];function p(m,c,h,_,v,u){return e(),t("div",null,l)}const q=a(s,[["render",p],["__scopeId","data-v-abd8f7b8"]]);export{F as __pageData,q as default}; diff --git a/assets/en_vue-webapp_options_footer.md.BhQS9DbB.js b/assets/en_vue-webapp_options_footer.md.BhQS9DbB.js deleted file mode 100644 index e8c59b401..000000000 --- a/assets/en_vue-webapp_options_footer.md.BhQS9DbB.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,o as e,c as t,a4 as o,ah as r,ai as i,aj as n,ak as s,al as d}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Footers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/footer.md","filePath":"en/vue-webapp/options/footer.md","lastUpdated":1726474804000}'),l={name:"en/vue-webapp/options/footer.md"},p=o('

Footers

The following types of footers are currently available:

SimpleFooter

image

RichFooter

image

MantineSimpleFooter

image

MantineRichFooter

image

DistributedFooter

image

',12),m=[p];function c(h,_,f,v,u,b){return e(),t("div",null,m)}const q=a(l,[["render",c],["__scopeId","data-v-55e4a3a5"]]);export{F as __pageData,q as default}; diff --git a/assets/en_vue-webapp_options_ga-gp.md.DGVsPqx7.js b/assets/en_vue-webapp_options_ga-gp.md.BRPRkPJ9.js similarity index 98% rename from assets/en_vue-webapp_options_ga-gp.md.DGVsPqx7.js rename to assets/en_vue-webapp_options_ga-gp.md.BRPRkPJ9.js index 45d4386da..bb0473577 100644 --- a/assets/en_vue-webapp_options_ga-gp.md.DGVsPqx7.js +++ b/assets/en_vue-webapp_options_ga-gp.md.BRPRkPJ9.js @@ -1 +1 @@ -import{_ as e,o as t,c as a,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"GitHub Actions script to deploy to GitHub Pages","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/ga-gp.md","filePath":"en/vue-webapp/options/ga-gp.md","lastUpdated":1726474804000}'),i={name:"en/vue-webapp/options/ga-gp.md"},s=o('

GitHub Actions script to deploy to GitHub Pages

Deployment

Uses JamesIves/github-pages-deploy-action GitHub Action to deploy a site to the gh-pages branch of the same GitHub repository, which automatically makes the website available at https://youGitHubUsername.github.io/my-vue-webapp (if your project and repository has name my-vue-webapp).

  • Create a branch in the repository called gh-pages
  • Go to the "Settings" section of your repository
  • Under "Code and automation" in the sidebar, click Pages.
  • Under "Build and deployment" under the "Source", select "Deploy from a branch".
  • Under "Build and deployment" under the "Branch" heading, use the branch drop-down menu and select the branch you want - gh-pages.

More details:

Setting base in Vite config

If you don't have a custom domain, you need to put the name of your repository as base in vite.config.ts so that the site can be accessed from the above link:

js
export default defineConfig({\n  base:"/my-vue-webapp/"\n});

If you have a custom domain (like yourname.com), this parameter is not needed.

',10),n=[s];function p(r,l,c,d,h,u){return t(),a("div",null,n)}const m=e(i,[["render",p]]);export{b as __pageData,m as default}; +import{_ as e,o as t,c as a,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"GitHub Actions script to deploy to GitHub Pages","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/ga-gp.md","filePath":"en/vue-webapp/options/ga-gp.md","lastUpdated":1726505115000}'),i={name:"en/vue-webapp/options/ga-gp.md"},s=o('

GitHub Actions script to deploy to GitHub Pages

Deployment

Uses JamesIves/github-pages-deploy-action GitHub Action to deploy a site to the gh-pages branch of the same GitHub repository, which automatically makes the website available at https://youGitHubUsername.github.io/my-vue-webapp (if your project and repository has name my-vue-webapp).

  • Create a branch in the repository called gh-pages
  • Go to the "Settings" section of your repository
  • Under "Code and automation" in the sidebar, click Pages.
  • Under "Build and deployment" under the "Source", select "Deploy from a branch".
  • Under "Build and deployment" under the "Branch" heading, use the branch drop-down menu and select the branch you want - gh-pages.

More details:

Setting base in Vite config

If you don't have a custom domain, you need to put the name of your repository as base in vite.config.ts so that the site can be accessed from the above link:

js
export default defineConfig({\n  base:"/my-vue-webapp/"\n});

If you have a custom domain (like yourname.com), this parameter is not needed.

',10),n=[s];function p(r,l,c,d,h,u){return t(),a("div",null,n)}const m=e(i,[["render",p]]);export{b as __pageData,m as default}; diff --git a/assets/en_vue-webapp_options_ga-gp.md.DGVsPqx7.lean.js b/assets/en_vue-webapp_options_ga-gp.md.BRPRkPJ9.lean.js similarity index 91% rename from assets/en_vue-webapp_options_ga-gp.md.DGVsPqx7.lean.js rename to assets/en_vue-webapp_options_ga-gp.md.BRPRkPJ9.lean.js index 76f4fc6f5..2b92839ef 100644 --- a/assets/en_vue-webapp_options_ga-gp.md.DGVsPqx7.lean.js +++ b/assets/en_vue-webapp_options_ga-gp.md.BRPRkPJ9.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as a,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"GitHub Actions script to deploy to GitHub Pages","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/ga-gp.md","filePath":"en/vue-webapp/options/ga-gp.md","lastUpdated":1726474804000}'),i={name:"en/vue-webapp/options/ga-gp.md"},s=o("",10),n=[s];function p(r,l,c,d,h,u){return t(),a("div",null,n)}const m=e(i,[["render",p]]);export{b as __pageData,m as default}; +import{_ as e,o as t,c as a,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"GitHub Actions script to deploy to GitHub Pages","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/ga-gp.md","filePath":"en/vue-webapp/options/ga-gp.md","lastUpdated":1726505115000}'),i={name:"en/vue-webapp/options/ga-gp.md"},s=o("",10),n=[s];function p(r,l,c,d,h,u){return t(),a("div",null,n)}const m=e(i,[["render",p]]);export{b as __pageData,m as default}; diff --git a/assets/en_vue-webapp_options_google-analytics.md.5tvsJqoB.js b/assets/en_vue-webapp_options_google-analytics.md.DW6FRpgo.js similarity index 98% rename from assets/en_vue-webapp_options_google-analytics.md.5tvsJqoB.js rename to assets/en_vue-webapp_options_google-analytics.md.DW6FRpgo.js index 99113a0d0..1ae3737dd 100644 --- a/assets/en_vue-webapp_options_google-analytics.md.5tvsJqoB.js +++ b/assets/en_vue-webapp_options_google-analytics.md.DW6FRpgo.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Google analytics","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/google-analytics.md","filePath":"en/vue-webapp/options/google-analytics.md","lastUpdated":1726474804000}'),n={name:"en/vue-webapp/options/google-analytics.md"},e=t(`

Google analytics

Adds Google Tag initialization code for index.html.

html
<!-- Google tag (gtag.js) -->
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Google analytics","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/google-analytics.md","filePath":"en/vue-webapp/options/google-analytics.md","lastUpdated":1726505115000}'),n={name:"en/vue-webapp/options/google-analytics.md"},e=t(`

Google analytics

Adds Google Tag initialization code for index.html.

html
<!-- Google tag (gtag.js) -->
 <script async src="https://www.googletagmanager.com/gtag/js?id=G-JL65GWRNQQ"></script>
 <script>
   window.dataLayer = window.dataLayer || [];
diff --git a/assets/en_vue-webapp_options_google-analytics.md.5tvsJqoB.lean.js b/assets/en_vue-webapp_options_google-analytics.md.DW6FRpgo.lean.js
similarity index 91%
rename from assets/en_vue-webapp_options_google-analytics.md.5tvsJqoB.lean.js
rename to assets/en_vue-webapp_options_google-analytics.md.DW6FRpgo.lean.js
index 2f64e38bd..4cd7b1eda 100644
--- a/assets/en_vue-webapp_options_google-analytics.md.5tvsJqoB.lean.js
+++ b/assets/en_vue-webapp_options_google-analytics.md.DW6FRpgo.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Google analytics","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/google-analytics.md","filePath":"en/vue-webapp/options/google-analytics.md","lastUpdated":1726474804000}'),n={name:"en/vue-webapp/options/google-analytics.md"},e=t("",4),l=[e];function h(p,k,g,o,E,d){return i(),a("div",null,l)}const y=s(n,[["render",h]]);export{c as __pageData,y as default};
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Google analytics","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/google-analytics.md","filePath":"en/vue-webapp/options/google-analytics.md","lastUpdated":1726505115000}'),n={name:"en/vue-webapp/options/google-analytics.md"},e=t("",4),l=[e];function h(p,k,g,o,E,d){return i(),a("div",null,l)}const y=s(n,[["render",h]]);export{c as __pageData,y as default};
diff --git a/assets/en_vue-webapp_options_header.md.Yn2Fi6aA.js b/assets/en_vue-webapp_options_header.md.Yn2Fi6aA.js
new file mode 100644
index 000000000..583958266
--- /dev/null
+++ b/assets/en_vue-webapp_options_header.md.Yn2Fi6aA.js
@@ -0,0 +1,9 @@
+import{_ as a,o as s,c as i,a4 as t,am as e,an as d,ao as n,ap as p}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Headers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/header.md","filePath":"en/vue-webapp/options/header.md","lastUpdated":1726505115000}'),h={name:"en/vue-webapp/options/header.md"},l=t('

Headers

All headers are adaptive.

SimpleHeader

image

Simple sticky header

MantineSimpleHeader

image

Simple sticky header in Mantine UI style

MantineLayeredHeader

image

Layered sticky header in Mantine UI style

SlidingHeader

image

Can contain two different headers, the second one appears after the user scrolls down the page

template
<AppHeader :threshold-hide="200" :threshold-open="400">
+    <template #first-header>
+        <AppHeaderFirst />
+    </template>
+
+    <template #second-header>
+        <AppHeaderSecond />
+    </template>
+<AppHeader>
`,15),c=[l];function r(k,b,E,v,o,g){return s(),i("div",null,c)}const _=a(h,[["render",r],["__scopeId","data-v-55bc7173"]]);export{y as __pageData,_ as default}; diff --git a/assets/en_vue-webapp_options_header.md.eyyb3Azb.lean.js b/assets/en_vue-webapp_options_header.md.Yn2Fi6aA.lean.js similarity index 51% rename from assets/en_vue-webapp_options_header.md.eyyb3Azb.lean.js rename to assets/en_vue-webapp_options_header.md.Yn2Fi6aA.lean.js index c377f1eef..c2a08df0c 100644 --- a/assets/en_vue-webapp_options_header.md.eyyb3Azb.lean.js +++ b/assets/en_vue-webapp_options_header.md.Yn2Fi6aA.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as s,a4 as i,am as t,an as d,ao as n,ap as p}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"Headers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/header.md","filePath":"en/vue-webapp/options/header.md","lastUpdated":1726474804000}'),h={name:"en/vue-webapp/options/header.md"},b=i("",15),l=[b];function r(k,f,E,v,o,g){return e(),s("div",null,l)}const y=a(h,[["render",r],["__scopeId","data-v-2bf4bed6"]]);export{m as __pageData,y as default}; +import{_ as a,o as s,c as i,a4 as t,am as e,an as d,ao as n,ap as p}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Headers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/header.md","filePath":"en/vue-webapp/options/header.md","lastUpdated":1726505115000}'),h={name:"en/vue-webapp/options/header.md"},l=t("",15),c=[l];function r(k,b,E,v,o,g){return s(),i("div",null,c)}const _=a(h,[["render",r],["__scopeId","data-v-55bc7173"]]);export{y as __pageData,_ as default}; diff --git a/assets/en_vue-webapp_options_header.md.eyyb3Azb.js b/assets/en_vue-webapp_options_header.md.eyyb3Azb.js deleted file mode 100644 index 856247e1f..000000000 --- a/assets/en_vue-webapp_options_header.md.eyyb3Azb.js +++ /dev/null @@ -1,9 +0,0 @@ -import{_ as a,o as e,c as s,a4 as i,am as t,an as d,ao as n,ap as p}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"Headers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/header.md","filePath":"en/vue-webapp/options/header.md","lastUpdated":1726474804000}'),h={name:"en/vue-webapp/options/header.md"},b=i('

Headers

All headers are adaptive.

SimpleHeader

image

Simple sticky header

MantineSimpleHeader

image

Simple sticky header in Mantine UI style

MantineLayeredHeader

image

Layered sticky header in Mantine UI style

SlidingHeader

image

Can contain two different headers, the second one appears after the user scrolls down the page

template
<AppHeader :threshold-hide="200" :threshold-open="400">
-    <template #first-header>
-        <AppHeaderFirst />
-    </template>
-
-    <template #second-header>
-        <AppHeaderSecond />
-    </template>
-<AppHeader>
`,15),l=[b];function r(k,f,E,v,o,g){return e(),s("div",null,l)}const y=a(h,[["render",r],["__scopeId","data-v-2bf4bed6"]]);export{m as __pageData,y as default}; diff --git a/assets/en_vue-webapp_options_i18n.md.B7-QOI3n.js b/assets/en_vue-webapp_options_i18n.md.Bcbj9_T9.js similarity index 99% rename from assets/en_vue-webapp_options_i18n.md.B7-QOI3n.js rename to assets/en_vue-webapp_options_i18n.md.Bcbj9_T9.js index 2f66f62fe..73c2bbed6 100644 --- a/assets/en_vue-webapp_options_i18n.md.B7-QOI3n.js +++ b/assets/en_vue-webapp_options_i18n.md.Bcbj9_T9.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"i18n","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/i18n.md","filePath":"en/vue-webapp/options/i18n.md","lastUpdated":1726474804000}'),e={name:"en/vue-webapp/options/i18n.md"},t=n(`

i18n

i18next

The NPM library for internationalization and localization i18n is very popular, but it has grown very large in recent years. It has a lot of features for localizing dates, numbers, setting the right declensions, RTL language support, downloading locales from the server and a bunch of other things. The i18next site even calls it an "internationalization framework".

At the same time, localization of a site often requires very simple things that take up only a couple of percent of the entire functionality of the i18n heavyweight.

In particular, usually needed:

  • Finding translation by the compound key - t("finance.transactions.deposit")
  • Translation with a parameter - t("hello-message", "John")
  • Arrays for lists or paragraphs of text

This functionality with preserving reactivity (changing the site language on the fly) can be obtained by a simple composable function.

useI18nLight

Here is a clean implementation of the above functionality without any dependencies in 70 lines against of one and a half megabytes of i18next.

Usage

Connection and initialization in main.ts:

js
import { useI18n } from "@/composables/useI18nLight";
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"i18n","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/i18n.md","filePath":"en/vue-webapp/options/i18n.md","lastUpdated":1726505115000}'),e={name:"en/vue-webapp/options/i18n.md"},t=n(`

i18n

i18next

The NPM library for internationalization and localization i18n is very popular, but it has grown very large in recent years. It has a lot of features for localizing dates, numbers, setting the right declensions, RTL language support, downloading locales from the server and a bunch of other things. The i18next site even calls it an "internationalization framework".

At the same time, localization of a site often requires very simple things that take up only a couple of percent of the entire functionality of the i18n heavyweight.

In particular, usually needed:

  • Finding translation by the compound key - t("finance.transactions.deposit")
  • Translation with a parameter - t("hello-message", "John")
  • Arrays for lists or paragraphs of text

This functionality with preserving reactivity (changing the site language on the fly) can be obtained by a simple composable function.

useI18nLight

Here is a clean implementation of the above functionality without any dependencies in 70 lines against of one and a half megabytes of i18next.

Usage

Connection and initialization in main.ts:

js
import { useI18n } from "@/composables/useI18nLight";
 
 const { initI18n } = useI18n();
 
diff --git a/assets/en_vue-webapp_options_i18n.md.B7-QOI3n.lean.js b/assets/en_vue-webapp_options_i18n.md.Bcbj9_T9.lean.js
similarity index 90%
rename from assets/en_vue-webapp_options_i18n.md.B7-QOI3n.lean.js
rename to assets/en_vue-webapp_options_i18n.md.Bcbj9_T9.lean.js
index 5e225e38c..4dcdac64c 100644
--- a/assets/en_vue-webapp_options_i18n.md.B7-QOI3n.lean.js
+++ b/assets/en_vue-webapp_options_i18n.md.Bcbj9_T9.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"i18n","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/i18n.md","filePath":"en/vue-webapp/options/i18n.md","lastUpdated":1726474804000}'),e={name:"en/vue-webapp/options/i18n.md"},t=n("",19),l=[t];function h(p,k,o,r,E,d){return i(),a("div",null,l)}const y=s(e,[["render",h]]);export{g as __pageData,y as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"i18n","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/i18n.md","filePath":"en/vue-webapp/options/i18n.md","lastUpdated":1726505115000}'),e={name:"en/vue-webapp/options/i18n.md"},t=n("",19),l=[t];function h(p,k,o,r,E,d){return i(),a("div",null,l)}const y=s(e,[["render",h]]);export{g as __pageData,y as default};
diff --git a/assets/en_vue-webapp_options_index.md.CzwdqGQO.js b/assets/en_vue-webapp_options_index.md.BLTMJvPr.js
similarity index 98%
rename from assets/en_vue-webapp_options_index.md.CzwdqGQO.js
rename to assets/en_vue-webapp_options_index.md.BLTMJvPr.js
index c2d380bf0..9a6e86ec0 100644
--- a/assets/en_vue-webapp_options_index.md.CzwdqGQO.js
+++ b/assets/en_vue-webapp_options_index.md.BLTMJvPr.js
@@ -1 +1 @@
-import{_ as e,o as a,c as i,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Options when creating an application","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/index.md","filePath":"en/vue-webapp/options/index.md","lastUpdated":1726474804000}'),o={name:"en/vue-webapp/options/index.md"},n=t('

Options when creating an application

Available options

The following options are currently available for configuration:

  • Layout - application layout
  • Header - top part in the application template
  • Footer - bottom part of the application template
  • Drawer - navigation bar
  • Navbar - navigation menu (inside the drawer).
  • Github Pages deploy Workflow - GitHub Actions script for build and deploy application to GitHub Pages
  • PWA - addition of Service worker and Manifest to the application
  • API module - abstraction layer for communication with backend API
  • JSON-RPC - adapter for API module
  • Splash screen - splash screen during application startup to improve UX
  • Google analytics - code for integration of Google analytics
  • Open graph - meta tags for building snippets by social networks

Available by default

  • Dark theme. All plugins support theme switching
  • BaseIcon - icon component with the ability to dynamically specify a name
  • BaseToggle - toggle component

In development

  • Global Preloader
  • i18n - internationalization of the application using different variants of i18n libraries.

Planned

  • Online showcase for dynamic testing of different variants of application parts and functionality
  • Expanding the number of variants of layout, header, footer and other components
  • Auth - module framework for authentication on JWT tokens, including different variants of registration and login forms.
  • Auth integration with popular service providers (Firebase and others).
  • GitHub Actions for application deployment to various services (Vercel, Heroku, Firesbase) and other useful CI/CD scripts.
  • Check on startup for application new version and reload to avoid browser cache issues
  • Themes - application themes (include both different color palettes and the ability to change other CSS parameters for deep customization of the templates and components)
',10),l=[n];function r(p,s,c,d,h,u){return a(),i("div",null,l)}const b=e(o,[["render",r]]);export{f as __pageData,b as default}; +import{_ as e,o as a,c as i,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Options when creating an application","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/index.md","filePath":"en/vue-webapp/options/index.md","lastUpdated":1726505115000}'),o={name:"en/vue-webapp/options/index.md"},n=t('

Options when creating an application

Available options

The following options are currently available for configuration:

  • Layout - application layout
  • Header - top part in the application template
  • Footer - bottom part of the application template
  • Drawer - navigation bar
  • Navbar - navigation menu (inside the drawer).
  • Github Pages deploy Workflow - GitHub Actions script for build and deploy application to GitHub Pages
  • PWA - addition of Service worker and Manifest to the application
  • API module - abstraction layer for communication with backend API
  • JSON-RPC - adapter for API module
  • Splash screen - splash screen during application startup to improve UX
  • Google analytics - code for integration of Google analytics
  • Open graph - meta tags for building snippets by social networks

Available by default

  • Dark theme. All plugins support theme switching
  • BaseIcon - icon component with the ability to dynamically specify a name
  • BaseToggle - toggle component

In development

  • Global Preloader
  • i18n - internationalization of the application using different variants of i18n libraries.

Planned

  • Online showcase for dynamic testing of different variants of application parts and functionality
  • Expanding the number of variants of layout, header, footer and other components
  • Auth - module framework for authentication on JWT tokens, including different variants of registration and login forms.
  • Auth integration with popular service providers (Firebase and others).
  • GitHub Actions for application deployment to various services (Vercel, Heroku, Firesbase) and other useful CI/CD scripts.
  • Check on startup for application new version and reload to avoid browser cache issues
  • Themes - application themes (include both different color palettes and the ability to change other CSS parameters for deep customization of the templates and components)
',10),l=[n];function r(p,s,c,d,h,u){return a(),i("div",null,l)}const b=e(o,[["render",r]]);export{f as __pageData,b as default}; diff --git a/assets/en_vue-webapp_options_index.md.CzwdqGQO.lean.js b/assets/en_vue-webapp_options_index.md.BLTMJvPr.lean.js similarity index 90% rename from assets/en_vue-webapp_options_index.md.CzwdqGQO.lean.js rename to assets/en_vue-webapp_options_index.md.BLTMJvPr.lean.js index 9834c06e9..e93de16cf 100644 --- a/assets/en_vue-webapp_options_index.md.CzwdqGQO.lean.js +++ b/assets/en_vue-webapp_options_index.md.BLTMJvPr.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as i,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Options when creating an application","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/index.md","filePath":"en/vue-webapp/options/index.md","lastUpdated":1726474804000}'),o={name:"en/vue-webapp/options/index.md"},n=t("",10),l=[n];function r(p,s,c,d,h,u){return a(),i("div",null,l)}const b=e(o,[["render",r]]);export{f as __pageData,b as default}; +import{_ as e,o as a,c as i,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Options when creating an application","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/index.md","filePath":"en/vue-webapp/options/index.md","lastUpdated":1726505115000}'),o={name:"en/vue-webapp/options/index.md"},n=t("",10),l=[n];function r(p,s,c,d,h,u){return a(),i("div",null,l)}const b=e(o,[["render",r]]);export{f as __pageData,b as default}; diff --git a/assets/en_vue-webapp_options_layout-main.md.CDtTtVC1.js b/assets/en_vue-webapp_options_layout-main.md.Bmum1sW4.js similarity index 91% rename from assets/en_vue-webapp_options_layout-main.md.CDtTtVC1.js rename to assets/en_vue-webapp_options_layout-main.md.Bmum1sW4.js index c63b2627b..8189af99a 100644 --- a/assets/en_vue-webapp_options_layout-main.md.CDtTtVC1.js +++ b/assets/en_vue-webapp_options_layout-main.md.Bmum1sW4.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,a4 as o,aq as n}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"MainLayout","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/layout-main.md","filePath":"en/vue-webapp/options/layout-main.md","lastUpdated":1726474804000}'),i={name:"en/vue-webapp/options/layout-main.md"},r=o('

MainLayout

Standard layout with header, footer and sidebar in notebook and desktop modes. In tablet and mobile modes the sidebar is hidden and moves in from the left when user clicks on the "hamburger" icon.

image

Routing

Changing the content of the main panel is provided via vue-router routes.

',5),s=[r];function d(c,p,u,m,l,h){return a(),t("div",null,s)}const g=e(i,[["render",d]]);export{b as __pageData,g as default}; +import{_ as e,o as a,c as t,a4 as o,aq as n}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"MainLayout","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/layout-main.md","filePath":"en/vue-webapp/options/layout-main.md","lastUpdated":1726505115000}'),i={name:"en/vue-webapp/options/layout-main.md"},r=o('

MainLayout

Standard layout with header, footer and sidebar in notebook and desktop modes. In tablet and mobile modes the sidebar is hidden and moves in from the left when user clicks on the "hamburger" icon.

image

Routing

Changing the content of the main panel is provided via vue-router routes.

',5),s=[r];function d(c,p,u,m,l,h){return a(),t("div",null,s)}const g=e(i,[["render",d]]);export{b as __pageData,g as default}; diff --git a/assets/en_vue-webapp_options_layout-main.md.CDtTtVC1.lean.js b/assets/en_vue-webapp_options_layout-main.md.Bmum1sW4.lean.js similarity index 81% rename from assets/en_vue-webapp_options_layout-main.md.CDtTtVC1.lean.js rename to assets/en_vue-webapp_options_layout-main.md.Bmum1sW4.lean.js index e189ac56a..d456057ce 100644 --- a/assets/en_vue-webapp_options_layout-main.md.CDtTtVC1.lean.js +++ b/assets/en_vue-webapp_options_layout-main.md.Bmum1sW4.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,a4 as o,aq as n}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"MainLayout","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/layout-main.md","filePath":"en/vue-webapp/options/layout-main.md","lastUpdated":1726474804000}'),i={name:"en/vue-webapp/options/layout-main.md"},r=o("",5),s=[r];function d(c,p,u,m,l,h){return a(),t("div",null,s)}const g=e(i,[["render",d]]);export{b as __pageData,g as default}; +import{_ as e,o as a,c as t,a4 as o,aq as n}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"MainLayout","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/layout-main.md","filePath":"en/vue-webapp/options/layout-main.md","lastUpdated":1726505115000}'),i={name:"en/vue-webapp/options/layout-main.md"},r=o("",5),s=[r];function d(c,p,u,m,l,h){return a(),t("div",null,s)}const g=e(i,[["render",d]]);export{b as __pageData,g as default}; diff --git a/assets/en_vue-webapp_options_layout-one-column.md.eFdna01B.js b/assets/en_vue-webapp_options_layout-one-column.md.DcfZdt4n.js similarity index 95% rename from assets/en_vue-webapp_options_layout-one-column.md.eFdna01B.js rename to assets/en_vue-webapp_options_layout-one-column.md.DcfZdt4n.js index 39459d9cd..059c74e0f 100644 --- a/assets/en_vue-webapp_options_layout-one-column.md.eFdna01B.js +++ b/assets/en_vue-webapp_options_layout-one-column.md.DcfZdt4n.js @@ -1 +1 @@ -import{_ as e,o,c as a,a4 as t,ar as n}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"OneColumnLayout","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/layout-one-column.md","filePath":"en/vue-webapp/options/layout-one-column.md","lastUpdated":1726474804000}'),i={name:"en/vue-webapp/options/layout-one-column.md"},l=t('

OneColumnLayout

Similar to MainLayout, but without the sidebar in notebook and desktop modes. Can be used, for example, if all navigation is located in the header. In tablet and mobile modes, the sidebar also pops out when the "hamburger" icon is clicked.

image

In all layout cases, the maximum width of the layout is set by the CSS variable --vwa-layout-max-width.

',4),c=[l];function s(d,u,m,p,r,_){return o(),a("div",null,c)}const g=e(i,[["render",s]]);export{b as __pageData,g as default}; +import{_ as e,o,c as a,a4 as t,ar as n}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"OneColumnLayout","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/layout-one-column.md","filePath":"en/vue-webapp/options/layout-one-column.md","lastUpdated":1726505115000}'),i={name:"en/vue-webapp/options/layout-one-column.md"},l=t('

OneColumnLayout

Similar to MainLayout, but without the sidebar in notebook and desktop modes. Can be used, for example, if all navigation is located in the header. In tablet and mobile modes, the sidebar also pops out when the "hamburger" icon is clicked.

image

In all layout cases, the maximum width of the layout is set by the CSS variable --vwa-layout-max-width.

',4),c=[l];function s(d,u,m,p,r,_){return o(),a("div",null,c)}const g=e(i,[["render",s]]);export{b as __pageData,g as default}; diff --git a/assets/en_vue-webapp_options_layout-one-column.md.eFdna01B.lean.js b/assets/en_vue-webapp_options_layout-one-column.md.DcfZdt4n.lean.js similarity index 91% rename from assets/en_vue-webapp_options_layout-one-column.md.eFdna01B.lean.js rename to assets/en_vue-webapp_options_layout-one-column.md.DcfZdt4n.lean.js index 51156f7a5..3e92d1663 100644 --- a/assets/en_vue-webapp_options_layout-one-column.md.eFdna01B.lean.js +++ b/assets/en_vue-webapp_options_layout-one-column.md.DcfZdt4n.lean.js @@ -1 +1 @@ -import{_ as e,o,c as a,a4 as t,ar as n}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"OneColumnLayout","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/layout-one-column.md","filePath":"en/vue-webapp/options/layout-one-column.md","lastUpdated":1726474804000}'),i={name:"en/vue-webapp/options/layout-one-column.md"},l=t("",4),c=[l];function s(d,u,m,p,r,_){return o(),a("div",null,c)}const g=e(i,[["render",s]]);export{b as __pageData,g as default}; +import{_ as e,o,c as a,a4 as t,ar as n}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"OneColumnLayout","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/layout-one-column.md","filePath":"en/vue-webapp/options/layout-one-column.md","lastUpdated":1726505115000}'),i={name:"en/vue-webapp/options/layout-one-column.md"},l=t("",4),c=[l];function s(d,u,m,p,r,_){return o(),a("div",null,c)}const g=e(i,[["render",s]]);export{b as __pageData,g as default}; diff --git a/assets/en_vue-webapp_options_navbar.md.DdsRieV-.js b/assets/en_vue-webapp_options_navbar.md.DdsRieV-.js deleted file mode 100644 index 7adafae6b..000000000 --- a/assets/en_vue-webapp_options_navbar.md.DdsRieV-.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,o as e,c as t,a4 as n,as as o,at as i}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"Navbar","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/navbar.md","filePath":"en/vue-webapp/options/navbar.md","lastUpdated":1726474804000}'),r={name:"en/vue-webapp/options/navbar.md"},s=n('

Navbar

The Navbar is located inside the NavigationDrawer

At the moment it is possible to choose from two variants:

SimpleNavbar

image

MantineSimpleNavbar

image

',7),p=[s];function d(m,v,c,l,_,b){return e(),t("div",null,p)}const u=a(r,[["render",d],["__scopeId","data-v-098f6603"]]);export{h as __pageData,u as default}; diff --git a/assets/en_vue-webapp_options_navbar.md.DjlJL_NG.js b/assets/en_vue-webapp_options_navbar.md.DjlJL_NG.js new file mode 100644 index 000000000..236f6c479 --- /dev/null +++ b/assets/en_vue-webapp_options_navbar.md.DjlJL_NG.js @@ -0,0 +1 @@ +import{_ as a,o as e,c as t,a4 as n,as as o,at as d}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"Navbar","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/navbar.md","filePath":"en/vue-webapp/options/navbar.md","lastUpdated":1726505115000}'),i={name:"en/vue-webapp/options/navbar.md"},r=n('

Navbar

The Navbar is located inside the NavigationDrawer

At the moment it is possible to choose from two variants:

SimpleNavbar

image

MantineSimpleNavbar

image

',7),s=[r];function p(b,f,m,v,c,l){return e(),t("div",null,s)}const u=a(i,[["render",p],["__scopeId","data-v-34d8afbf"]]);export{h as __pageData,u as default}; diff --git a/assets/en_vue-webapp_options_navbar.md.DdsRieV-.lean.js b/assets/en_vue-webapp_options_navbar.md.DjlJL_NG.lean.js similarity index 55% rename from assets/en_vue-webapp_options_navbar.md.DdsRieV-.lean.js rename to assets/en_vue-webapp_options_navbar.md.DjlJL_NG.lean.js index bc3eeb9f7..14d1193e3 100644 --- a/assets/en_vue-webapp_options_navbar.md.DdsRieV-.lean.js +++ b/assets/en_vue-webapp_options_navbar.md.DjlJL_NG.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as n,as as o,at as i}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"Navbar","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/navbar.md","filePath":"en/vue-webapp/options/navbar.md","lastUpdated":1726474804000}'),r={name:"en/vue-webapp/options/navbar.md"},s=n("",7),p=[s];function d(m,v,c,l,_,b){return e(),t("div",null,p)}const u=a(r,[["render",d],["__scopeId","data-v-098f6603"]]);export{h as __pageData,u as default}; +import{_ as a,o as e,c as t,a4 as n,as as o,at as d}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"Navbar","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/navbar.md","filePath":"en/vue-webapp/options/navbar.md","lastUpdated":1726505115000}'),i={name:"en/vue-webapp/options/navbar.md"},r=n("",7),s=[r];function p(b,f,m,v,c,l){return e(),t("div",null,s)}const u=a(i,[["render",p],["__scopeId","data-v-34d8afbf"]]);export{h as __pageData,u as default}; diff --git a/assets/en_vue-webapp_options_open-graph.md.DVqE57YF.js b/assets/en_vue-webapp_options_open-graph.md.DR8xA9bD.js similarity index 99% rename from assets/en_vue-webapp_options_open-graph.md.DVqE57YF.js rename to assets/en_vue-webapp_options_open-graph.md.DR8xA9bD.js index ebc45a147..9e0a5313e 100644 --- a/assets/en_vue-webapp_options_open-graph.md.DVqE57YF.js +++ b/assets/en_vue-webapp_options_open-graph.md.DR8xA9bD.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Google analytics","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/open-graph.md","filePath":"en/vue-webapp/options/open-graph.md","lastUpdated":1726474804000}'),n={name:"en/vue-webapp/options/open-graph.md"},h=t(`

Google analytics

Adds Open graph meta tags for index.html.

html
<!-- Facebook Meta Tags -->
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Google analytics","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/open-graph.md","filePath":"en/vue-webapp/options/open-graph.md","lastUpdated":1726505115000}'),n={name:"en/vue-webapp/options/open-graph.md"},h=t(`

Google analytics

Adds Open graph meta tags for index.html.

html
<!-- Facebook Meta Tags -->
 <!-- <meta property="og:url" content="" /> -->
 <meta property="og:type" content="website" />
 <meta property="og:title" content="-og:title-" />
diff --git a/assets/en_vue-webapp_options_open-graph.md.DVqE57YF.lean.js b/assets/en_vue-webapp_options_open-graph.md.DR8xA9bD.lean.js
similarity index 90%
rename from assets/en_vue-webapp_options_open-graph.md.DVqE57YF.lean.js
rename to assets/en_vue-webapp_options_open-graph.md.DR8xA9bD.lean.js
index 2ecc2802e..80b7d96df 100644
--- a/assets/en_vue-webapp_options_open-graph.md.DVqE57YF.lean.js
+++ b/assets/en_vue-webapp_options_open-graph.md.DR8xA9bD.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Google analytics","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/open-graph.md","filePath":"en/vue-webapp/options/open-graph.md","lastUpdated":1726474804000}'),n={name:"en/vue-webapp/options/open-graph.md"},h=t("",4),p=[h];function k(e,l,E,r,g,o){return i(),a("div",null,p)}const F=s(n,[["render",k]]);export{y as __pageData,F as default};
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Google analytics","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/open-graph.md","filePath":"en/vue-webapp/options/open-graph.md","lastUpdated":1726505115000}'),n={name:"en/vue-webapp/options/open-graph.md"},h=t("",4),p=[h];function k(e,l,E,r,g,o){return i(),a("div",null,p)}const F=s(n,[["render",k]]);export{y as __pageData,F as default};
diff --git a/assets/en_vue-webapp_options_pwa.md.CAIfsVDr.js b/assets/en_vue-webapp_options_pwa.md.C1ePh5yl.js
similarity index 99%
rename from assets/en_vue-webapp_options_pwa.md.CAIfsVDr.js
rename to assets/en_vue-webapp_options_pwa.md.C1ePh5yl.js
index 69c7456d2..05ac37d03 100644
--- a/assets/en_vue-webapp_options_pwa.md.CAIfsVDr.js
+++ b/assets/en_vue-webapp_options_pwa.md.C1ePh5yl.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"PWA","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/pwa.md","filePath":"en/vue-webapp/options/pwa.md","lastUpdated":1726474804000}'),t={name:"en/vue-webapp/options/pwa.md"},n=e(`

PWA

Simple Manifest and Service worker are integrated into the application and work right away, without customization.

Manifest.json

Allows to install the application on user home screen and run it in native mode (without a browser window).

manifest.json must be edited to match your application data. For more information about the manifest file, see web.dev.

json
{
+import{_ as s,o as i,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"PWA","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/pwa.md","filePath":"en/vue-webapp/options/pwa.md","lastUpdated":1726505115000}'),t={name:"en/vue-webapp/options/pwa.md"},n=e(`

PWA

Simple Manifest and Service worker are integrated into the application and work right away, without customization.

Manifest.json

Allows to install the application on user home screen and run it in native mode (without a browser window).

manifest.json must be edited to match your application data. For more information about the manifest file, see web.dev.

json
{
   "description": "Acme Corporation webapp",
   "dir": "auto",
   "display": "standalone",
diff --git a/assets/en_vue-webapp_options_pwa.md.CAIfsVDr.lean.js b/assets/en_vue-webapp_options_pwa.md.C1ePh5yl.lean.js
similarity index 90%
rename from assets/en_vue-webapp_options_pwa.md.CAIfsVDr.lean.js
rename to assets/en_vue-webapp_options_pwa.md.C1ePh5yl.lean.js
index d9bdcc911..dbc1e3f78 100644
--- a/assets/en_vue-webapp_options_pwa.md.CAIfsVDr.lean.js
+++ b/assets/en_vue-webapp_options_pwa.md.C1ePh5yl.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"PWA","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/pwa.md","filePath":"en/vue-webapp/options/pwa.md","lastUpdated":1726474804000}'),t={name:"en/vue-webapp/options/pwa.md"},n=e("",11),p=[n];function h(o,l,r,k,d,c){return i(),a("div",null,p)}const g=s(t,[["render",h]]);export{u as __pageData,g as default};
+import{_ as s,o as i,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"PWA","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/pwa.md","filePath":"en/vue-webapp/options/pwa.md","lastUpdated":1726505115000}'),t={name:"en/vue-webapp/options/pwa.md"},n=e("",11),p=[n];function h(o,l,r,k,d,c){return i(),a("div",null,p)}const g=s(t,[["render",h]]);export{u as __pageData,g as default};
diff --git a/assets/en_vue-webapp_options_splash-screen.md.2Xwwwa_c.js b/assets/en_vue-webapp_options_splash-screen.md.2Xwwwa_c.js
deleted file mode 100644
index 81f46f5e0..000000000
--- a/assets/en_vue-webapp_options_splash-screen.md.2Xwwwa_c.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as e,o as a,c as t,a4 as d,au as s}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Splash screen","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/splash-screen.md","filePath":"en/vue-webapp/options/splash-screen.md","lastUpdated":1726474804000}'),n={name:"en/vue-webapp/options/splash-screen.md"},c=d('

Splash screen

A splash screen during application startup instead of a blank screen can enhance application user experience and strengthen brand recognition.

image

The splash screen code is located entirely in the index.html. It is controlled by the CSS class splash on the body tag.

The splash screen is removed in App.vue / onMounted() after all the resources needed to ignite the application have been loaded.

',5),o=[c];function p(r,i,l,h,_,m){return a(),t("div",null,o)}const g=e(n,[["render",p],["__scopeId","data-v-03d675cd"]]);export{u as __pageData,g as default}; diff --git a/assets/en_vue-webapp_options_splash-screen.md.bqSZuB6L.js b/assets/en_vue-webapp_options_splash-screen.md.bqSZuB6L.js new file mode 100644 index 000000000..3fbbae68a --- /dev/null +++ b/assets/en_vue-webapp_options_splash-screen.md.bqSZuB6L.js @@ -0,0 +1 @@ +import{_ as e,o as a,c as t,a4 as s,au as n}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Splash screen","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/splash-screen.md","filePath":"en/vue-webapp/options/splash-screen.md","lastUpdated":1726505115000}'),c={name:"en/vue-webapp/options/splash-screen.md"},o=s('

Splash screen

A splash screen during application startup instead of a blank screen can enhance application user experience and strengthen brand recognition.

image

The splash screen code is located entirely in the index.html. It is controlled by the CSS class splash on the body tag.

The splash screen is removed in App.vue / onMounted() after all the resources needed to ignite the application have been loaded.

',5),p=[o];function d(r,i,l,h,_,m){return a(),t("div",null,p)}const g=e(c,[["render",d],["__scopeId","data-v-7503ec2a"]]);export{u as __pageData,g as default}; diff --git a/assets/en_vue-webapp_options_splash-screen.md.2Xwwwa_c.lean.js b/assets/en_vue-webapp_options_splash-screen.md.bqSZuB6L.lean.js similarity index 65% rename from assets/en_vue-webapp_options_splash-screen.md.2Xwwwa_c.lean.js rename to assets/en_vue-webapp_options_splash-screen.md.bqSZuB6L.lean.js index 9b587af65..cd0e4282c 100644 --- a/assets/en_vue-webapp_options_splash-screen.md.2Xwwwa_c.lean.js +++ b/assets/en_vue-webapp_options_splash-screen.md.bqSZuB6L.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,a4 as d,au as s}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Splash screen","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/splash-screen.md","filePath":"en/vue-webapp/options/splash-screen.md","lastUpdated":1726474804000}'),n={name:"en/vue-webapp/options/splash-screen.md"},c=d("",5),o=[c];function p(r,i,l,h,_,m){return a(),t("div",null,o)}const g=e(n,[["render",p],["__scopeId","data-v-03d675cd"]]);export{u as __pageData,g as default}; +import{_ as e,o as a,c as t,a4 as s,au as n}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Splash screen","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/splash-screen.md","filePath":"en/vue-webapp/options/splash-screen.md","lastUpdated":1726505115000}'),c={name:"en/vue-webapp/options/splash-screen.md"},o=s("",5),p=[o];function d(r,i,l,h,_,m){return a(),t("div",null,p)}const g=e(c,[["render",d],["__scopeId","data-v-7503ec2a"]]);export{u as __pageData,g as default}; diff --git a/assets/en_vue-webapp_options_themes.md.ezkK1uou.js b/assets/en_vue-webapp_options_themes.md.CWBex3PO.js similarity index 99% rename from assets/en_vue-webapp_options_themes.md.ezkK1uou.js rename to assets/en_vue-webapp_options_themes.md.CWBex3PO.js index bf6ee5532..a45518c1c 100644 --- a/assets/en_vue-webapp_options_themes.md.ezkK1uou.js +++ b/assets/en_vue-webapp_options_themes.md.CWBex3PO.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as h}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Themes","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/themes.md","filePath":"en/vue-webapp/options/themes.md","lastUpdated":1726474804000}'),n={name:"en/vue-webapp/options/themes.md"},t=h(`

Themes

The application implements light and dark themes. All components support switching themes.

Themes are controlled via CSS variables, which are defined in the vars.css file. The theme selected by the user is stored in localStorage. The ThemeToggle component is responsible for theme switching.

It is possible to customize themes and create new ones by overriding CSS variables, which is recommended to do in the custom.scss file:

css
:root {
+import{_ as s,o as i,c as a,a4 as h}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Themes","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/themes.md","filePath":"en/vue-webapp/options/themes.md","lastUpdated":1726505115000}'),n={name:"en/vue-webapp/options/themes.md"},t=h(`

Themes

The application implements light and dark themes. All components support switching themes.

Themes are controlled via CSS variables, which are defined in the vars.css file. The theme selected by the user is stored in localStorage. The ThemeToggle component is responsible for theme switching.

It is possible to customize themes and create new ones by overriding CSS variables, which is recommended to do in the custom.scss file:

css
:root {
   --vwa-font-family-base: 'Roboto', sans-serif;
   --vwa-layout-max-width: 1280px;
 
diff --git a/assets/en_vue-webapp_options_themes.md.ezkK1uou.lean.js b/assets/en_vue-webapp_options_themes.md.CWBex3PO.lean.js
similarity index 90%
rename from assets/en_vue-webapp_options_themes.md.ezkK1uou.lean.js
rename to assets/en_vue-webapp_options_themes.md.CWBex3PO.lean.js
index 44caf9a91..30ccfb5bb 100644
--- a/assets/en_vue-webapp_options_themes.md.ezkK1uou.lean.js
+++ b/assets/en_vue-webapp_options_themes.md.CWBex3PO.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as h}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Themes","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/themes.md","filePath":"en/vue-webapp/options/themes.md","lastUpdated":1726474804000}'),n={name:"en/vue-webapp/options/themes.md"},t=h("",5),e=[t];function k(p,l,E,r,d,g){return i(),a("div",null,e)}const c=s(n,[["render",k]]);export{F as __pageData,c as default};
+import{_ as s,o as i,c as a,a4 as h}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Themes","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"en/vue-webapp/options/themes.md","filePath":"en/vue-webapp/options/themes.md","lastUpdated":1726505115000}'),n={name:"en/vue-webapp/options/themes.md"},t=h("",5),e=[t];function k(p,l,E,r,d,g){return i(),a("div",null,e)}const c=s(n,[["render",k]]);export{F as __pageData,c as default};
diff --git a/assets/index.md.D70_Euwr.js b/assets/index.md.D4Iu-XBW.js
similarity index 94%
rename from assets/index.md.D70_Euwr.js
rename to assets/index.md.D4Iu-XBW.js
index ca59dd6cc..d0efc6a0b 100644
--- a/assets/index.md.D70_Euwr.js
+++ b/assets/index.md.D4Iu-XBW.js
@@ -1 +1 @@
-import{k as e,o as t,c as a}from"./chunks/framework.B8KxSsRZ.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Vue FAQ","text":"Vue JavaScript framework FAQ","tagline":"Most frequently asked questions about Vue.js","actions":[{"theme":"brand","text":"Get Started","link":"/en/misc/introduction"},{"theme":"alt","text":"Why Vue?","link":"/en/frontend/about-frameworks"},{"theme":"alt alt-border","text":"Версия на русском языке","link":"/ru/"}],"image":{"src":"/images/vue-faq-logo.webp","alt":"Vue FAQ"}},"features":[{"title":"Frontend","details":"General issues of frontend development - architecture, design patterns, best practices are discussed"},{"title":"Vue 3","details":"Focuses on Vue 3, Composition API and the Vue ecosystem of recent years."},{"title":"Nuxt-free","details":"Nuxt is a separate standalone framework that deserves its own FAQ"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1726474804000}'),n={name:"index.md"},l=Object.assign(n,{setup(s){return e(()=>{"ru-RU".includes(navigator.language)||(document.querySelector(".actions .action:nth-child(3)").style.display="none")}),(o,r)=>(t(),a("div"))}});export{d as __pageData,l as default};
+import{k as e,o as t,c as a}from"./chunks/framework.B8KxSsRZ.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Vue FAQ","text":"Vue JavaScript framework FAQ","tagline":"Most frequently asked questions about Vue.js","actions":[{"theme":"brand","text":"Get Started","link":"/en/misc/introduction"},{"theme":"alt","text":"Why Vue?","link":"/en/frontend/about-frameworks"},{"theme":"alt alt-border","text":"Версия на русском языке","link":"/ru/"}],"image":{"src":"/images/vue-faq-logo.webp","alt":"Vue FAQ"}},"features":[{"title":"Frontend","details":"General issues of frontend development - architecture, design patterns, best practices are discussed"},{"title":"Vue 3","details":"Focuses on Vue 3, Composition API and the Vue ecosystem of recent years."},{"title":"Nuxt-free","details":"Nuxt is a separate standalone framework that deserves its own FAQ"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1726505115000}'),n={name:"index.md"},l=Object.assign(n,{setup(s){return e(()=>{"ru-RU".includes(navigator.language)||(document.querySelector(".actions .action:nth-child(3)").style.display="none")}),(o,r)=>(t(),a("div"))}});export{d as __pageData,l as default};
diff --git a/assets/index.md.D70_Euwr.lean.js b/assets/index.md.D4Iu-XBW.lean.js
similarity index 94%
rename from assets/index.md.D70_Euwr.lean.js
rename to assets/index.md.D4Iu-XBW.lean.js
index ca59dd6cc..d0efc6a0b 100644
--- a/assets/index.md.D70_Euwr.lean.js
+++ b/assets/index.md.D4Iu-XBW.lean.js
@@ -1 +1 @@
-import{k as e,o as t,c as a}from"./chunks/framework.B8KxSsRZ.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Vue FAQ","text":"Vue JavaScript framework FAQ","tagline":"Most frequently asked questions about Vue.js","actions":[{"theme":"brand","text":"Get Started","link":"/en/misc/introduction"},{"theme":"alt","text":"Why Vue?","link":"/en/frontend/about-frameworks"},{"theme":"alt alt-border","text":"Версия на русском языке","link":"/ru/"}],"image":{"src":"/images/vue-faq-logo.webp","alt":"Vue FAQ"}},"features":[{"title":"Frontend","details":"General issues of frontend development - architecture, design patterns, best practices are discussed"},{"title":"Vue 3","details":"Focuses on Vue 3, Composition API and the Vue ecosystem of recent years."},{"title":"Nuxt-free","details":"Nuxt is a separate standalone framework that deserves its own FAQ"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1726474804000}'),n={name:"index.md"},l=Object.assign(n,{setup(s){return e(()=>{"ru-RU".includes(navigator.language)||(document.querySelector(".actions .action:nth-child(3)").style.display="none")}),(o,r)=>(t(),a("div"))}});export{d as __pageData,l as default};
+import{k as e,o as t,c as a}from"./chunks/framework.B8KxSsRZ.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Vue FAQ","text":"Vue JavaScript framework FAQ","tagline":"Most frequently asked questions about Vue.js","actions":[{"theme":"brand","text":"Get Started","link":"/en/misc/introduction"},{"theme":"alt","text":"Why Vue?","link":"/en/frontend/about-frameworks"},{"theme":"alt alt-border","text":"Версия на русском языке","link":"/ru/"}],"image":{"src":"/images/vue-faq-logo.webp","alt":"Vue FAQ"}},"features":[{"title":"Frontend","details":"General issues of frontend development - architecture, design patterns, best practices are discussed"},{"title":"Vue 3","details":"Focuses on Vue 3, Composition API and the Vue ecosystem of recent years."},{"title":"Nuxt-free","details":"Nuxt is a separate standalone framework that deserves its own FAQ"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1726505115000}'),n={name:"index.md"},l=Object.assign(n,{setup(s){return e(()=>{"ru-RU".includes(navigator.language)||(document.querySelector(".actions .action:nth-child(3)").style.display="none")}),(o,r)=>(t(),a("div"))}});export{d as __pageData,l as default};
diff --git a/assets/ru_articles_index.md.C4K2USxl.js b/assets/ru_articles_index.md.BmPszDpy.js
similarity index 97%
rename from assets/ru_articles_index.md.C4K2USxl.js
rename to assets/ru_articles_index.md.BmPszDpy.js
index 5ff6e0a09..a3e68cd35 100644
--- a/assets/ru_articles_index.md.C4K2USxl.js
+++ b/assets/ru_articles_index.md.BmPszDpy.js
@@ -1 +1 @@
-import{_ as h,j as p,o,c as i,F as g,D as f,m as b,l as e,t as l,p as u,q as _,a as m}from"./chunks/framework.B8KxSsRZ.js";const S=JSON.parse('[{"title":"Facebook выпустил новую CSS-in-JS библиотеку — StyleX","date":"15/12/2023","desc":"Верней оформил 5 декабря 2023 года оформил для всех то, чем его разработчики пользуются уже давно. Позиционируется данный помощник для js-подобных фреймворков типа React, Preact, Solid, lit-html и Angular, однако оперирующие html шаблонами Vue и Svelte тоже могут задействовать StyleX, но после предварительной специальной её кастомизации.","url":"https://habr.com/ru/articles/781000/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/fee/1f5/45b/fee1f545b00f9ceb6db27c5068e0c251.png"},{"title":"Vue state management: Pinia stores или composables с глобальными рефами?","date":"13/12/2023","desc":"На Reddit прошла интересная дискуссия с 25К+ просмотрами по вопросу предпочтений разработчиков при необходимости управлять глобальным состоянием во Vue 3. Ниже её итоги.","url":"https://habr.com/ru/articles/780274/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/d45/a4f/9c8/d45a4f9c83bde005ad5b08a4e9b9770c.png"},{"title":"Google и Yandex SEO оптимизация для SPA приложений","date":"04/12/2023","desc":"Google и Yandex утверждают, что что-то уже могут по индексированию SPA приложений. В статье показаны результаты проведенного эксперимента по индексации чистого SPA вебсайта.
Результат: Google - хорошо, Yandex - не очень","url":"https://habr.com/ru/articles/778236/","imageUrl":"https://habrastorage.org/r/w780/getpro/habr/upload_files/f49/faa/1fb/f49faa1fbce62f757e17f6e3a0f15d3a.jpg"},{"title":"Atomic CSS здорового человека. UnoCSS","date":"04/12/2023","desc":"Продолжение перевода статьи «Reimagine Atomic CSS» двухлетней давности одного из членов команды Vue core Anthony Fu, автора UnoCSS, в которой рассматривается уже сам UnoCSS.","url":"https://habr.com/ru/articles/777738/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/8bf/b40/575/8bfb405752bcb5dc61c1328716c235d3.png"},{"title":"План «Барбаросса» от Vue.js","date":"28/11/2023","desc":"После выхода крайней и достаточно революционной в плане добавления Composition API версии Vue 3.0 более чем три года назад, каких-либо серьезных изменений от команды Evan You в самом фреймворке больше не было. Только стандартные багфиксы, оптимизация и робкие попытки стать с TypeScript ближе. Основное внимание переключилось на экосистему - Vite, Nuxt, VitePress, Pinia и другие.
В то же время, отчетливо заметно масштабирование работы не вглубь, а вширь. Интересы команды уже давно явно выходят за пределы фреймворка.","url":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/94f/12a/fcd/94f12afcd0683614a23e2d4d263db10e.png","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/94f/12a/fcd/94f12afcd0683614a23e2d4d263db10e.png"},{"title":"Билдер Vue 3 веб приложений","date":"22/11/2023","desc":"Vue 3 вебсайт билдер (npm пакет vue-webapp) позволяет создать каркас будущего веб приложения, с возможностью выбора бизнес-шаблона (портфолио, блог, магазин и .т.д.), макета сайта, дизайна и элементов функционала (API модуль, i18n, PWA, splash screen, auth модуль, темы и т.д.), для дальнейшей кастомизации и наполнения контентом.","url":"https://habr.com/ru/articles/775550/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/9e6/718/132/9e6718132859157ff9d2767d92f67a9f.png"},{"title":"Vue.js 3 — шаблоны проектирования и лучшие практики","date":"17/11/2023","desc":"Предлагается перевод книги Vue.js 3 Design Patterns and Best Practices автора Pablo Garaguso.
Книга вышла в мае 2023 года, написана очень компетентно, оперирует современными технологиями и стандартами. Материал книги будет полезен разработчикам не только Vue, но и других фронтенд фреймворков.","url":"https://habr.com/ru/articles/768080/","imageUrl":"https://habrastorage.org/r/w780/getpro/habr/upload_files/017/712/bc7/017712bc7dd8f14465a6aea3506f1c55.jpg"},{"title":"Vue-faq.org — FAQ о фронтенде в целом и Vue в частности","date":"18/09/2023","desc":"https://vue-faq.org - попытка охватить наиболее часто задаваемые в профильных чатах и конференциях вопросы о фронтенде в целом и Vue.js фреймворке в частности.","url":"https://habr.com/ru/articles/760636/","imageUrl":"https://habrastorage.org/r/w780/getpro/habr/upload_files/aa5/19e/294/aa519e294552841118a9339da87473f6.jpg"},{"title":"Написание Vite плагина","date":"10/08/2023","desc":"Сборщик Vite предоставляет не только хороший функционал, но и удобный API для создания плагинов, позволяющих кастомизировать его практически под любую задачу. То есть, плагины можно писать не только для публикации их в npmjs.com репозитории, но и для автоматизации исключительно своих задач.","url":"https://habr.com/ru/articles/753788/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/6ff/e5d/0af/6ffe5d0af3d94c11d2809ad8c54c16b4.png"},{"title":"Сравнение тяжеловесности популярных библиотек UI компонент для Vue 3","date":"30/06/2023","desc":"Библиотеки UI компонент популярны и удобны в некоторых случаях, но у них тоже есть обратные стороны. Одно дело, когда делаешь админку и используешь десятки компонент, другое - когда тебе надо всего пару компонент.
Было проведено исследование - взяты три HTML элемента: Button, Input и Select, и проверено, насколько увеличатся js и css бандлы если использовать для них одну из 10 распространенных UI библиотек для Vue 3.","url":"https://habr.com/ru/articles/745012/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/052/901/1e7/0529011e799ff6bfa59e4f3c14ff784b.png"},{"title":"Детокс для i18n","date":"22/05/2023","desc":"NPM библиотека для интернационализации и локализации i18n очень популярна, однако за последние годы она сильно располнела. В ней много возможностей для локализации дат, чисел, установки нужных склонений, поддержки RTL языков, загрузки локалей с сервера и кучи еще чего. На сайте i18next она называется уже даже \\"интернационализационным фреймворком\\".\\n
\\n В то же время часто для локализации сайта нужны очень простые вещи, занимающие всего пару процентов от всего функционала тяжеловеса i18n. Ниже будет описана несложная процедура избавления от i18next-ной зависимости в данном случае.","url":"https://habr.com/ru/articles/736530/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/77e/179/4ac/77e1794ac13bf456ba7e50ea26087b33.png"},{"title":"Работа с i18n — автоматизация Google Translate и другие полезные советы","date":"26/02/2023","desc":"NPM-пакет для интернационализации i18n используется на фронтэнде для создания мультиязычных вебсайтов очень часто. Перевод текста в нем содержится обычно в json или в js файлах, и требует дальнейшей обработки, чтобы с ним с комфортом могли работать контент-редакторы. В статье описывается как максимально упростить и сделать удобным хранение и внесение изменений в перевод.","url":"https://habr.com/ru/articles/718990/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/235/82f/7b7/23582f7b78c7584d7c849bd57c41f8d2.png"},{"title":"Популяризация JSON-RPC","date":"08/01/2023","desc":"\\n Для передачи данных по сети есть хорошо зарекомендовавшие себя стандарты - например, SOAP, gRPC, AMQP, REST, GraphQL.\\n
\\nПри создании вебсайтов малой, средней и большой сложности с потоками данных к бэкенду и обратно в JSON формате обычно используются последние два с их вариантами. Верней, только варианты, потому что REST и GraphQL - ресурсо-ориентированные стандарты. Это как бы просто перенос элементарной работы с базой данных на клиента (хотя под \\"ресурсом\\" может пониматься и абстракция). Обычно таких запросов не больше трети от всего бэкенд API.","url":"https://habr.com/ru/articles/709362/","imageUrl":"https://habrastorage.org/r/w780/getpro/habr/upload_files/873/589/686/8735896860eb3723baa8eda674c69968.jpg"}]'),d=r=>(u("data-v-adae98ee"),r=r(),_(),r),P=d(()=>e("h1",{id:"наши-статьи-на-других-ресурсах",tabindex:"-1"},[m("Наши статьи на других ресурсах "),e("a",{class:"header-anchor",href:"#наши-статьи-на-других-ресурсах","aria-label":'Permalink to "Наши статьи на других ресурсах"'},"​")],-1)),x=d(()=>e("hr",null,null,-1)),V={class:"title"},U=["href"],v={class:"content"},j={class:"image"},w=["src"],A=["innerHTML"],I={class:"footer"},C={class:"source"},k=["href"],N={class:"date"},G=JSON.parse('{"title":"Наши статьи на других ресурсах","description":"","frontmatter":{"pageClass":"articles"},"headers":[],"relativePath":"ru/articles/index.md","filePath":"ru/articles/index.md","lastUpdated":1726474804000}'),O={name:"ru/articles/index.md"},T=Object.assign(O,{setup(r){p("some");function n(t){if(!t)return"";const s=t.indexOf("://");s!==-1&&(t=t.slice(s+3));const a=t.indexOf("/");return a!==-1&&(t=t.slice(0,a)),t.split(".").slice(-2).join(".")}return(t,s)=>(o(),i("div",null,[P,x,(o(!0),i(g,null,f(b(S),(a,c)=>(o(),i("div",{key:c,class:"post"},[e("h3",V,[e("a",{href:a.url,target:"_blank",class:"vp-external-link-icon"},l(a.title),9,U)]),e("div",v,[e("div",j,[e("img",{src:a.imageUrl},null,8,w)]),e("div",{class:"desc",innerHTML:a.desc},null,8,A)]),e("div",I,[e("div",C,[e("a",{href:a.url,target:"_blank",class:"vp-external-link-icon"},l(n(a.url)),9,k)]),e("div",N,l(a.date),1)])]))),128))]))}}),L=h(T,[["__scopeId","data-v-adae98ee"]]);export{G as __pageData,L as default}; +import{_ as h,j as p,o,c as i,F as g,D as b,m as f,l as e,t as l,p as u,q as _,a as m}from"./chunks/framework.B8KxSsRZ.js";const S=JSON.parse('[{"title":"Facebook выпустил новую CSS-in-JS библиотеку — StyleX","date":"15/12/2023","desc":"Верней оформил 5 декабря 2023 года оформил для всех то, чем его разработчики пользуются уже давно. Позиционируется данный помощник для js-подобных фреймворков типа React, Preact, Solid, lit-html и Angular, однако оперирующие html шаблонами Vue и Svelte тоже могут задействовать StyleX, но после предварительной специальной её кастомизации.","url":"https://habr.com/ru/articles/781000/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/fee/1f5/45b/fee1f545b00f9ceb6db27c5068e0c251.png"},{"title":"Vue state management: Pinia stores или composables с глобальными рефами?","date":"13/12/2023","desc":"На Reddit прошла интересная дискуссия с 25К+ просмотрами по вопросу предпочтений разработчиков при необходимости управлять глобальным состоянием во Vue 3. Ниже её итоги.","url":"https://habr.com/ru/articles/780274/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/d45/a4f/9c8/d45a4f9c83bde005ad5b08a4e9b9770c.png"},{"title":"Google и Yandex SEO оптимизация для SPA приложений","date":"04/12/2023","desc":"Google и Yandex утверждают, что что-то уже могут по индексированию SPA приложений. В статье показаны результаты проведенного эксперимента по индексации чистого SPA вебсайта.
Результат: Google - хорошо, Yandex - не очень","url":"https://habr.com/ru/articles/778236/","imageUrl":"https://habrastorage.org/r/w780/getpro/habr/upload_files/f49/faa/1fb/f49faa1fbce62f757e17f6e3a0f15d3a.jpg"},{"title":"Atomic CSS здорового человека. UnoCSS","date":"04/12/2023","desc":"Продолжение перевода статьи «Reimagine Atomic CSS» двухлетней давности одного из членов команды Vue core Anthony Fu, автора UnoCSS, в которой рассматривается уже сам UnoCSS.","url":"https://habr.com/ru/articles/777738/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/8bf/b40/575/8bfb405752bcb5dc61c1328716c235d3.png"},{"title":"План «Барбаросса» от Vue.js","date":"28/11/2023","desc":"После выхода крайней и достаточно революционной в плане добавления Composition API версии Vue 3.0 более чем три года назад, каких-либо серьезных изменений от команды Evan You в самом фреймворке больше не было. Только стандартные багфиксы, оптимизация и робкие попытки стать с TypeScript ближе. Основное внимание переключилось на экосистему - Vite, Nuxt, VitePress, Pinia и другие.
В то же время, отчетливо заметно масштабирование работы не вглубь, а вширь. Интересы команды уже давно явно выходят за пределы фреймворка.","url":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/94f/12a/fcd/94f12afcd0683614a23e2d4d263db10e.png","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/94f/12a/fcd/94f12afcd0683614a23e2d4d263db10e.png"},{"title":"Билдер Vue 3 веб приложений","date":"22/11/2023","desc":"Vue 3 вебсайт билдер (npm пакет vue-webapp) позволяет создать каркас будущего веб приложения, с возможностью выбора бизнес-шаблона (портфолио, блог, магазин и .т.д.), макета сайта, дизайна и элементов функционала (API модуль, i18n, PWA, splash screen, auth модуль, темы и т.д.), для дальнейшей кастомизации и наполнения контентом.","url":"https://habr.com/ru/articles/775550/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/9e6/718/132/9e6718132859157ff9d2767d92f67a9f.png"},{"title":"Vue.js 3 — шаблоны проектирования и лучшие практики","date":"17/11/2023","desc":"Предлагается перевод книги Vue.js 3 Design Patterns and Best Practices автора Pablo Garaguso.
Книга вышла в мае 2023 года, написана очень компетентно, оперирует современными технологиями и стандартами. Материал книги будет полезен разработчикам не только Vue, но и других фронтенд фреймворков.","url":"https://habr.com/ru/articles/768080/","imageUrl":"https://habrastorage.org/r/w780/getpro/habr/upload_files/017/712/bc7/017712bc7dd8f14465a6aea3506f1c55.jpg"},{"title":"Vue-faq.org — FAQ о фронтенде в целом и Vue в частности","date":"18/09/2023","desc":"https://vue-faq.org - попытка охватить наиболее часто задаваемые в профильных чатах и конференциях вопросы о фронтенде в целом и Vue.js фреймворке в частности.","url":"https://habr.com/ru/articles/760636/","imageUrl":"https://habrastorage.org/r/w780/getpro/habr/upload_files/aa5/19e/294/aa519e294552841118a9339da87473f6.jpg"},{"title":"Написание Vite плагина","date":"10/08/2023","desc":"Сборщик Vite предоставляет не только хороший функционал, но и удобный API для создания плагинов, позволяющих кастомизировать его практически под любую задачу. То есть, плагины можно писать не только для публикации их в npmjs.com репозитории, но и для автоматизации исключительно своих задач.","url":"https://habr.com/ru/articles/753788/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/6ff/e5d/0af/6ffe5d0af3d94c11d2809ad8c54c16b4.png"},{"title":"Сравнение тяжеловесности популярных библиотек UI компонент для Vue 3","date":"30/06/2023","desc":"Библиотеки UI компонент популярны и удобны в некоторых случаях, но у них тоже есть обратные стороны. Одно дело, когда делаешь админку и используешь десятки компонент, другое - когда тебе надо всего пару компонент.
Было проведено исследование - взяты три HTML элемента: Button, Input и Select, и проверено, насколько увеличатся js и css бандлы если использовать для них одну из 10 распространенных UI библиотек для Vue 3.","url":"https://habr.com/ru/articles/745012/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/052/901/1e7/0529011e799ff6bfa59e4f3c14ff784b.png"},{"title":"Детокс для i18n","date":"22/05/2023","desc":"NPM библиотека для интернационализации и локализации i18n очень популярна, однако за последние годы она сильно располнела. В ней много возможностей для локализации дат, чисел, установки нужных склонений, поддержки RTL языков, загрузки локалей с сервера и кучи еще чего. На сайте i18next она называется уже даже \\"интернационализационным фреймворком\\".\\n
\\n В то же время часто для локализации сайта нужны очень простые вещи, занимающие всего пару процентов от всего функционала тяжеловеса i18n. Ниже будет описана несложная процедура избавления от i18next-ной зависимости в данном случае.","url":"https://habr.com/ru/articles/736530/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/77e/179/4ac/77e1794ac13bf456ba7e50ea26087b33.png"},{"title":"Работа с i18n — автоматизация Google Translate и другие полезные советы","date":"26/02/2023","desc":"NPM-пакет для интернационализации i18n используется на фронтэнде для создания мультиязычных вебсайтов очень часто. Перевод текста в нем содержится обычно в json или в js файлах, и требует дальнейшей обработки, чтобы с ним с комфортом могли работать контент-редакторы. В статье описывается как максимально упростить и сделать удобным хранение и внесение изменений в перевод.","url":"https://habr.com/ru/articles/718990/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/235/82f/7b7/23582f7b78c7584d7c849bd57c41f8d2.png"},{"title":"Популяризация JSON-RPC","date":"08/01/2023","desc":"\\n Для передачи данных по сети есть хорошо зарекомендовавшие себя стандарты - например, SOAP, gRPC, AMQP, REST, GraphQL.\\n
\\nПри создании вебсайтов малой, средней и большой сложности с потоками данных к бэкенду и обратно в JSON формате обычно используются последние два с их вариантами. Верней, только варианты, потому что REST и GraphQL - ресурсо-ориентированные стандарты. Это как бы просто перенос элементарной работы с базой данных на клиента (хотя под \\"ресурсом\\" может пониматься и абстракция). Обычно таких запросов не больше трети от всего бэкенд API.","url":"https://habr.com/ru/articles/709362/","imageUrl":"https://habrastorage.org/r/w780/getpro/habr/upload_files/873/589/686/8735896860eb3723baa8eda674c69968.jpg"}]'),d=r=>(u("data-v-d33440b1"),r=r(),_(),r),P=d(()=>e("h1",{id:"наши-статьи-на-других-ресурсах",tabindex:"-1"},[m("Наши статьи на других ресурсах "),e("a",{class:"header-anchor",href:"#наши-статьи-на-других-ресурсах","aria-label":'Permalink to "Наши статьи на других ресурсах"'},"​")],-1)),x=d(()=>e("hr",null,null,-1)),V={class:"title"},U=["href"],v={class:"content"},j={class:"image"},w=["src"],A=["innerHTML"],I={class:"footer"},C={class:"source"},k=["href"],N={class:"date"},G=JSON.parse('{"title":"Наши статьи на других ресурсах","description":"","frontmatter":{"pageClass":"articles"},"headers":[],"relativePath":"ru/articles/index.md","filePath":"ru/articles/index.md","lastUpdated":1726505115000}'),O={name:"ru/articles/index.md"},T=Object.assign(O,{setup(r){p("some");function n(t){if(!t)return"";const s=t.indexOf("://");s!==-1&&(t=t.slice(s+3));const a=t.indexOf("/");return a!==-1&&(t=t.slice(0,a)),t.split(".").slice(-2).join(".")}return(t,s)=>(o(),i("div",null,[P,x,(o(!0),i(g,null,b(f(S),(a,c)=>(o(),i("div",{key:c,class:"post"},[e("h3",V,[e("a",{href:a.url,target:"_blank",class:"vp-external-link-icon"},l(a.title),9,U)]),e("div",v,[e("div",j,[e("img",{src:a.imageUrl},null,8,w)]),e("div",{class:"desc",innerHTML:a.desc},null,8,A)]),e("div",I,[e("div",C,[e("a",{href:a.url,target:"_blank",class:"vp-external-link-icon"},l(n(a.url)),9,k)]),e("div",N,l(a.date),1)])]))),128))]))}}),L=h(T,[["__scopeId","data-v-d33440b1"]]);export{G as __pageData,L as default}; diff --git a/assets/ru_articles_index.md.C4K2USxl.lean.js b/assets/ru_articles_index.md.BmPszDpy.lean.js similarity index 97% rename from assets/ru_articles_index.md.C4K2USxl.lean.js rename to assets/ru_articles_index.md.BmPszDpy.lean.js index 5ff6e0a09..a3e68cd35 100644 --- a/assets/ru_articles_index.md.C4K2USxl.lean.js +++ b/assets/ru_articles_index.md.BmPszDpy.lean.js @@ -1 +1 @@ -import{_ as h,j as p,o,c as i,F as g,D as f,m as b,l as e,t as l,p as u,q as _,a as m}from"./chunks/framework.B8KxSsRZ.js";const S=JSON.parse('[{"title":"Facebook выпустил новую CSS-in-JS библиотеку — StyleX","date":"15/12/2023","desc":"Верней оформил 5 декабря 2023 года оформил для всех то, чем его разработчики пользуются уже давно. Позиционируется данный помощник для js-подобных фреймворков типа React, Preact, Solid, lit-html и Angular, однако оперирующие html шаблонами Vue и Svelte тоже могут задействовать StyleX, но после предварительной специальной её кастомизации.","url":"https://habr.com/ru/articles/781000/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/fee/1f5/45b/fee1f545b00f9ceb6db27c5068e0c251.png"},{"title":"Vue state management: Pinia stores или composables с глобальными рефами?","date":"13/12/2023","desc":"На Reddit прошла интересная дискуссия с 25К+ просмотрами по вопросу предпочтений разработчиков при необходимости управлять глобальным состоянием во Vue 3. Ниже её итоги.","url":"https://habr.com/ru/articles/780274/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/d45/a4f/9c8/d45a4f9c83bde005ad5b08a4e9b9770c.png"},{"title":"Google и Yandex SEO оптимизация для SPA приложений","date":"04/12/2023","desc":"Google и Yandex утверждают, что что-то уже могут по индексированию SPA приложений. В статье показаны результаты проведенного эксперимента по индексации чистого SPA вебсайта.
Результат: Google - хорошо, Yandex - не очень","url":"https://habr.com/ru/articles/778236/","imageUrl":"https://habrastorage.org/r/w780/getpro/habr/upload_files/f49/faa/1fb/f49faa1fbce62f757e17f6e3a0f15d3a.jpg"},{"title":"Atomic CSS здорового человека. UnoCSS","date":"04/12/2023","desc":"Продолжение перевода статьи «Reimagine Atomic CSS» двухлетней давности одного из членов команды Vue core Anthony Fu, автора UnoCSS, в которой рассматривается уже сам UnoCSS.","url":"https://habr.com/ru/articles/777738/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/8bf/b40/575/8bfb405752bcb5dc61c1328716c235d3.png"},{"title":"План «Барбаросса» от Vue.js","date":"28/11/2023","desc":"После выхода крайней и достаточно революционной в плане добавления Composition API версии Vue 3.0 более чем три года назад, каких-либо серьезных изменений от команды Evan You в самом фреймворке больше не было. Только стандартные багфиксы, оптимизация и робкие попытки стать с TypeScript ближе. Основное внимание переключилось на экосистему - Vite, Nuxt, VitePress, Pinia и другие.
В то же время, отчетливо заметно масштабирование работы не вглубь, а вширь. Интересы команды уже давно явно выходят за пределы фреймворка.","url":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/94f/12a/fcd/94f12afcd0683614a23e2d4d263db10e.png","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/94f/12a/fcd/94f12afcd0683614a23e2d4d263db10e.png"},{"title":"Билдер Vue 3 веб приложений","date":"22/11/2023","desc":"Vue 3 вебсайт билдер (npm пакет vue-webapp) позволяет создать каркас будущего веб приложения, с возможностью выбора бизнес-шаблона (портфолио, блог, магазин и .т.д.), макета сайта, дизайна и элементов функционала (API модуль, i18n, PWA, splash screen, auth модуль, темы и т.д.), для дальнейшей кастомизации и наполнения контентом.","url":"https://habr.com/ru/articles/775550/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/9e6/718/132/9e6718132859157ff9d2767d92f67a9f.png"},{"title":"Vue.js 3 — шаблоны проектирования и лучшие практики","date":"17/11/2023","desc":"Предлагается перевод книги Vue.js 3 Design Patterns and Best Practices автора Pablo Garaguso.
Книга вышла в мае 2023 года, написана очень компетентно, оперирует современными технологиями и стандартами. Материал книги будет полезен разработчикам не только Vue, но и других фронтенд фреймворков.","url":"https://habr.com/ru/articles/768080/","imageUrl":"https://habrastorage.org/r/w780/getpro/habr/upload_files/017/712/bc7/017712bc7dd8f14465a6aea3506f1c55.jpg"},{"title":"Vue-faq.org — FAQ о фронтенде в целом и Vue в частности","date":"18/09/2023","desc":"https://vue-faq.org - попытка охватить наиболее часто задаваемые в профильных чатах и конференциях вопросы о фронтенде в целом и Vue.js фреймворке в частности.","url":"https://habr.com/ru/articles/760636/","imageUrl":"https://habrastorage.org/r/w780/getpro/habr/upload_files/aa5/19e/294/aa519e294552841118a9339da87473f6.jpg"},{"title":"Написание Vite плагина","date":"10/08/2023","desc":"Сборщик Vite предоставляет не только хороший функционал, но и удобный API для создания плагинов, позволяющих кастомизировать его практически под любую задачу. То есть, плагины можно писать не только для публикации их в npmjs.com репозитории, но и для автоматизации исключительно своих задач.","url":"https://habr.com/ru/articles/753788/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/6ff/e5d/0af/6ffe5d0af3d94c11d2809ad8c54c16b4.png"},{"title":"Сравнение тяжеловесности популярных библиотек UI компонент для Vue 3","date":"30/06/2023","desc":"Библиотеки UI компонент популярны и удобны в некоторых случаях, но у них тоже есть обратные стороны. Одно дело, когда делаешь админку и используешь десятки компонент, другое - когда тебе надо всего пару компонент.
Было проведено исследование - взяты три HTML элемента: Button, Input и Select, и проверено, насколько увеличатся js и css бандлы если использовать для них одну из 10 распространенных UI библиотек для Vue 3.","url":"https://habr.com/ru/articles/745012/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/052/901/1e7/0529011e799ff6bfa59e4f3c14ff784b.png"},{"title":"Детокс для i18n","date":"22/05/2023","desc":"NPM библиотека для интернационализации и локализации i18n очень популярна, однако за последние годы она сильно располнела. В ней много возможностей для локализации дат, чисел, установки нужных склонений, поддержки RTL языков, загрузки локалей с сервера и кучи еще чего. На сайте i18next она называется уже даже \\"интернационализационным фреймворком\\".\\n
\\n В то же время часто для локализации сайта нужны очень простые вещи, занимающие всего пару процентов от всего функционала тяжеловеса i18n. Ниже будет описана несложная процедура избавления от i18next-ной зависимости в данном случае.","url":"https://habr.com/ru/articles/736530/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/77e/179/4ac/77e1794ac13bf456ba7e50ea26087b33.png"},{"title":"Работа с i18n — автоматизация Google Translate и другие полезные советы","date":"26/02/2023","desc":"NPM-пакет для интернационализации i18n используется на фронтэнде для создания мультиязычных вебсайтов очень часто. Перевод текста в нем содержится обычно в json или в js файлах, и требует дальнейшей обработки, чтобы с ним с комфортом могли работать контент-редакторы. В статье описывается как максимально упростить и сделать удобным хранение и внесение изменений в перевод.","url":"https://habr.com/ru/articles/718990/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/235/82f/7b7/23582f7b78c7584d7c849bd57c41f8d2.png"},{"title":"Популяризация JSON-RPC","date":"08/01/2023","desc":"\\n Для передачи данных по сети есть хорошо зарекомендовавшие себя стандарты - например, SOAP, gRPC, AMQP, REST, GraphQL.\\n
\\nПри создании вебсайтов малой, средней и большой сложности с потоками данных к бэкенду и обратно в JSON формате обычно используются последние два с их вариантами. Верней, только варианты, потому что REST и GraphQL - ресурсо-ориентированные стандарты. Это как бы просто перенос элементарной работы с базой данных на клиента (хотя под \\"ресурсом\\" может пониматься и абстракция). Обычно таких запросов не больше трети от всего бэкенд API.","url":"https://habr.com/ru/articles/709362/","imageUrl":"https://habrastorage.org/r/w780/getpro/habr/upload_files/873/589/686/8735896860eb3723baa8eda674c69968.jpg"}]'),d=r=>(u("data-v-adae98ee"),r=r(),_(),r),P=d(()=>e("h1",{id:"наши-статьи-на-других-ресурсах",tabindex:"-1"},[m("Наши статьи на других ресурсах "),e("a",{class:"header-anchor",href:"#наши-статьи-на-других-ресурсах","aria-label":'Permalink to "Наши статьи на других ресурсах"'},"​")],-1)),x=d(()=>e("hr",null,null,-1)),V={class:"title"},U=["href"],v={class:"content"},j={class:"image"},w=["src"],A=["innerHTML"],I={class:"footer"},C={class:"source"},k=["href"],N={class:"date"},G=JSON.parse('{"title":"Наши статьи на других ресурсах","description":"","frontmatter":{"pageClass":"articles"},"headers":[],"relativePath":"ru/articles/index.md","filePath":"ru/articles/index.md","lastUpdated":1726474804000}'),O={name:"ru/articles/index.md"},T=Object.assign(O,{setup(r){p("some");function n(t){if(!t)return"";const s=t.indexOf("://");s!==-1&&(t=t.slice(s+3));const a=t.indexOf("/");return a!==-1&&(t=t.slice(0,a)),t.split(".").slice(-2).join(".")}return(t,s)=>(o(),i("div",null,[P,x,(o(!0),i(g,null,f(b(S),(a,c)=>(o(),i("div",{key:c,class:"post"},[e("h3",V,[e("a",{href:a.url,target:"_blank",class:"vp-external-link-icon"},l(a.title),9,U)]),e("div",v,[e("div",j,[e("img",{src:a.imageUrl},null,8,w)]),e("div",{class:"desc",innerHTML:a.desc},null,8,A)]),e("div",I,[e("div",C,[e("a",{href:a.url,target:"_blank",class:"vp-external-link-icon"},l(n(a.url)),9,k)]),e("div",N,l(a.date),1)])]))),128))]))}}),L=h(T,[["__scopeId","data-v-adae98ee"]]);export{G as __pageData,L as default}; +import{_ as h,j as p,o,c as i,F as g,D as b,m as f,l as e,t as l,p as u,q as _,a as m}from"./chunks/framework.B8KxSsRZ.js";const S=JSON.parse('[{"title":"Facebook выпустил новую CSS-in-JS библиотеку — StyleX","date":"15/12/2023","desc":"Верней оформил 5 декабря 2023 года оформил для всех то, чем его разработчики пользуются уже давно. Позиционируется данный помощник для js-подобных фреймворков типа React, Preact, Solid, lit-html и Angular, однако оперирующие html шаблонами Vue и Svelte тоже могут задействовать StyleX, но после предварительной специальной её кастомизации.","url":"https://habr.com/ru/articles/781000/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/fee/1f5/45b/fee1f545b00f9ceb6db27c5068e0c251.png"},{"title":"Vue state management: Pinia stores или composables с глобальными рефами?","date":"13/12/2023","desc":"На Reddit прошла интересная дискуссия с 25К+ просмотрами по вопросу предпочтений разработчиков при необходимости управлять глобальным состоянием во Vue 3. Ниже её итоги.","url":"https://habr.com/ru/articles/780274/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/d45/a4f/9c8/d45a4f9c83bde005ad5b08a4e9b9770c.png"},{"title":"Google и Yandex SEO оптимизация для SPA приложений","date":"04/12/2023","desc":"Google и Yandex утверждают, что что-то уже могут по индексированию SPA приложений. В статье показаны результаты проведенного эксперимента по индексации чистого SPA вебсайта.
Результат: Google - хорошо, Yandex - не очень","url":"https://habr.com/ru/articles/778236/","imageUrl":"https://habrastorage.org/r/w780/getpro/habr/upload_files/f49/faa/1fb/f49faa1fbce62f757e17f6e3a0f15d3a.jpg"},{"title":"Atomic CSS здорового человека. UnoCSS","date":"04/12/2023","desc":"Продолжение перевода статьи «Reimagine Atomic CSS» двухлетней давности одного из членов команды Vue core Anthony Fu, автора UnoCSS, в которой рассматривается уже сам UnoCSS.","url":"https://habr.com/ru/articles/777738/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/8bf/b40/575/8bfb405752bcb5dc61c1328716c235d3.png"},{"title":"План «Барбаросса» от Vue.js","date":"28/11/2023","desc":"После выхода крайней и достаточно революционной в плане добавления Composition API версии Vue 3.0 более чем три года назад, каких-либо серьезных изменений от команды Evan You в самом фреймворке больше не было. Только стандартные багфиксы, оптимизация и робкие попытки стать с TypeScript ближе. Основное внимание переключилось на экосистему - Vite, Nuxt, VitePress, Pinia и другие.
В то же время, отчетливо заметно масштабирование работы не вглубь, а вширь. Интересы команды уже давно явно выходят за пределы фреймворка.","url":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/94f/12a/fcd/94f12afcd0683614a23e2d4d263db10e.png","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/94f/12a/fcd/94f12afcd0683614a23e2d4d263db10e.png"},{"title":"Билдер Vue 3 веб приложений","date":"22/11/2023","desc":"Vue 3 вебсайт билдер (npm пакет vue-webapp) позволяет создать каркас будущего веб приложения, с возможностью выбора бизнес-шаблона (портфолио, блог, магазин и .т.д.), макета сайта, дизайна и элементов функционала (API модуль, i18n, PWA, splash screen, auth модуль, темы и т.д.), для дальнейшей кастомизации и наполнения контентом.","url":"https://habr.com/ru/articles/775550/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/9e6/718/132/9e6718132859157ff9d2767d92f67a9f.png"},{"title":"Vue.js 3 — шаблоны проектирования и лучшие практики","date":"17/11/2023","desc":"Предлагается перевод книги Vue.js 3 Design Patterns and Best Practices автора Pablo Garaguso.
Книга вышла в мае 2023 года, написана очень компетентно, оперирует современными технологиями и стандартами. Материал книги будет полезен разработчикам не только Vue, но и других фронтенд фреймворков.","url":"https://habr.com/ru/articles/768080/","imageUrl":"https://habrastorage.org/r/w780/getpro/habr/upload_files/017/712/bc7/017712bc7dd8f14465a6aea3506f1c55.jpg"},{"title":"Vue-faq.org — FAQ о фронтенде в целом и Vue в частности","date":"18/09/2023","desc":"https://vue-faq.org - попытка охватить наиболее часто задаваемые в профильных чатах и конференциях вопросы о фронтенде в целом и Vue.js фреймворке в частности.","url":"https://habr.com/ru/articles/760636/","imageUrl":"https://habrastorage.org/r/w780/getpro/habr/upload_files/aa5/19e/294/aa519e294552841118a9339da87473f6.jpg"},{"title":"Написание Vite плагина","date":"10/08/2023","desc":"Сборщик Vite предоставляет не только хороший функционал, но и удобный API для создания плагинов, позволяющих кастомизировать его практически под любую задачу. То есть, плагины можно писать не только для публикации их в npmjs.com репозитории, но и для автоматизации исключительно своих задач.","url":"https://habr.com/ru/articles/753788/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/6ff/e5d/0af/6ffe5d0af3d94c11d2809ad8c54c16b4.png"},{"title":"Сравнение тяжеловесности популярных библиотек UI компонент для Vue 3","date":"30/06/2023","desc":"Библиотеки UI компонент популярны и удобны в некоторых случаях, но у них тоже есть обратные стороны. Одно дело, когда делаешь админку и используешь десятки компонент, другое - когда тебе надо всего пару компонент.
Было проведено исследование - взяты три HTML элемента: Button, Input и Select, и проверено, насколько увеличатся js и css бандлы если использовать для них одну из 10 распространенных UI библиотек для Vue 3.","url":"https://habr.com/ru/articles/745012/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/052/901/1e7/0529011e799ff6bfa59e4f3c14ff784b.png"},{"title":"Детокс для i18n","date":"22/05/2023","desc":"NPM библиотека для интернационализации и локализации i18n очень популярна, однако за последние годы она сильно располнела. В ней много возможностей для локализации дат, чисел, установки нужных склонений, поддержки RTL языков, загрузки локалей с сервера и кучи еще чего. На сайте i18next она называется уже даже \\"интернационализационным фреймворком\\".\\n
\\n В то же время часто для локализации сайта нужны очень простые вещи, занимающие всего пару процентов от всего функционала тяжеловеса i18n. Ниже будет описана несложная процедура избавления от i18next-ной зависимости в данном случае.","url":"https://habr.com/ru/articles/736530/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/77e/179/4ac/77e1794ac13bf456ba7e50ea26087b33.png"},{"title":"Работа с i18n — автоматизация Google Translate и другие полезные советы","date":"26/02/2023","desc":"NPM-пакет для интернационализации i18n используется на фронтэнде для создания мультиязычных вебсайтов очень часто. Перевод текста в нем содержится обычно в json или в js файлах, и требует дальнейшей обработки, чтобы с ним с комфортом могли работать контент-редакторы. В статье описывается как максимально упростить и сделать удобным хранение и внесение изменений в перевод.","url":"https://habr.com/ru/articles/718990/","imageUrl":"https://habrastorage.org/r/w1560/getpro/habr/upload_files/235/82f/7b7/23582f7b78c7584d7c849bd57c41f8d2.png"},{"title":"Популяризация JSON-RPC","date":"08/01/2023","desc":"\\n Для передачи данных по сети есть хорошо зарекомендовавшие себя стандарты - например, SOAP, gRPC, AMQP, REST, GraphQL.\\n
\\nПри создании вебсайтов малой, средней и большой сложности с потоками данных к бэкенду и обратно в JSON формате обычно используются последние два с их вариантами. Верней, только варианты, потому что REST и GraphQL - ресурсо-ориентированные стандарты. Это как бы просто перенос элементарной работы с базой данных на клиента (хотя под \\"ресурсом\\" может пониматься и абстракция). Обычно таких запросов не больше трети от всего бэкенд API.","url":"https://habr.com/ru/articles/709362/","imageUrl":"https://habrastorage.org/r/w780/getpro/habr/upload_files/873/589/686/8735896860eb3723baa8eda674c69968.jpg"}]'),d=r=>(u("data-v-d33440b1"),r=r(),_(),r),P=d(()=>e("h1",{id:"наши-статьи-на-других-ресурсах",tabindex:"-1"},[m("Наши статьи на других ресурсах "),e("a",{class:"header-anchor",href:"#наши-статьи-на-других-ресурсах","aria-label":'Permalink to "Наши статьи на других ресурсах"'},"​")],-1)),x=d(()=>e("hr",null,null,-1)),V={class:"title"},U=["href"],v={class:"content"},j={class:"image"},w=["src"],A=["innerHTML"],I={class:"footer"},C={class:"source"},k=["href"],N={class:"date"},G=JSON.parse('{"title":"Наши статьи на других ресурсах","description":"","frontmatter":{"pageClass":"articles"},"headers":[],"relativePath":"ru/articles/index.md","filePath":"ru/articles/index.md","lastUpdated":1726505115000}'),O={name:"ru/articles/index.md"},T=Object.assign(O,{setup(r){p("some");function n(t){if(!t)return"";const s=t.indexOf("://");s!==-1&&(t=t.slice(s+3));const a=t.indexOf("/");return a!==-1&&(t=t.slice(0,a)),t.split(".").slice(-2).join(".")}return(t,s)=>(o(),i("div",null,[P,x,(o(!0),i(g,null,b(f(S),(a,c)=>(o(),i("div",{key:c,class:"post"},[e("h3",V,[e("a",{href:a.url,target:"_blank",class:"vp-external-link-icon"},l(a.title),9,U)]),e("div",v,[e("div",j,[e("img",{src:a.imageUrl},null,8,w)]),e("div",{class:"desc",innerHTML:a.desc},null,8,A)]),e("div",I,[e("div",C,[e("a",{href:a.url,target:"_blank",class:"vp-external-link-icon"},l(n(a.url)),9,k)]),e("div",N,l(a.date),1)])]))),128))]))}}),L=h(T,[["__scopeId","data-v-d33440b1"]]);export{G as __pageData,L as default}; diff --git a/assets/ru_arty-crafty_analysis_architecture-and-design.md.mhu5grx2.js b/assets/ru_arty-crafty_analysis_architecture-and-design.md.av5YbhuF.js similarity index 99% rename from assets/ru_arty-crafty_analysis_architecture-and-design.md.mhu5grx2.js rename to assets/ru_arty-crafty_analysis_architecture-and-design.md.av5YbhuF.js index 2282d5f98..c3c1f3fe9 100644 --- a/assets/ru_arty-crafty_analysis_architecture-and-design.md.mhu5grx2.js +++ b/assets/ru_arty-crafty_analysis_architecture-and-design.md.av5YbhuF.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const l="/assets/divide-et-impera.CvdcY0Gi.webp",r="/assets/package-diagram.kylqtaRs.jpg",o="/assets/three-tier-architecture.BOGJQRyn.png",y=JSON.parse('{"title":"Архитектура и дизайн","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/architecture-and-design.md","filePath":"ru/arty-crafty/analysis/architecture-and-design.md","lastUpdated":1726474804000}'),s={name:"ru/arty-crafty/analysis/architecture-and-design.md"},c=i('

Архитектура и дизайн

Упрощение сложного

Самое главное правило при проектировании любых систем - KISS (keep it simple, stupid). Более благозвучно это формулируется как: "Всё гениальное просто".

Для того, чтобы управлять сложными системами, издревле люди стали разбивать их на более простые. Принцип: "Разделяй и властвуй", относится именно к этому.

image

Любое современное государство управляется через иерархичное разбиение и подчинение, давая возможность любому управляющему быть ответственным за небольшую часть системы, которую он может контролировать.

Аналогично программная система любой сложности может быть разбита на отдельные подсистемы. Чем менее две таких подсистемы будут связаны друг с другом (loosely coupled), тем проще с ними будет работать, исправлять баги, вводить в курс новых разработчиков.

Абстракция и инкапсуляция

Эти два метода объектно-ориентированного программирования хорошо действуют и здесь в веб разработке на Vue, для определения функциональных границ подсистем, и данных, которыми они обменивается между собой и с окружающим миром.

Например, у нас на фронтенде будет два представления на экране (views) - категория товара и сам товар. Кажется, что они связаны друг с другом, потому что оперируют одними сущностями, но на самом деле они вообще никак не связаны (если отвлечься от визуального вида). Каждое получает свои данные с бэкенда. Когда происходит клик на какой-либо товар в списке категории, то id товара отправляется во vue-router, который уже вызывает страницу товара с нужным id.

То же самое в паре меню категорий и самого представления категории с товарами. Меню категорий может быть довольно сложным, и вынести его в отдельную подсистему тогда будет полезно.

Это пример, как можно разбивать систему на несвязанные (или слабосвязанные) подсистемы, что очень сильно облегчает дальнейшую разработку.

Разбиение проекта на подсистемы

Замечание

Иногда будут вставать вопросы, над которыми читателю полезно подумать самому. В таких случаях, я буду формулировать вопрос, а свой ответ прятать под спойлер. Ваш вариант ответа вполне может оказаться полней и точней.

Вопрос: на какие слабосвязанные подсистемы можно разбить наш проект маркетплейса? Имеется ввиду только фронтенд. Предлагаю взять для примера Озон и исследовать его.

Вариант ответа
  • Меню категорий
  • Фильтры поиска
  • Представление категории товара
  • Представление товара
  • Секция "Похожие товары"
  • Отзывы о товаре
  • Рекламные баннеры
  • Блоки спецпредложений и рекомендаций
  • Вспомогательные страницы (подарочные сертификаты, акции и т.п.)
  • Сравнение товаров
  • Избранное
  • Заказы
  • Страница профиля
  • Корзина
  • Модуль оплаты
  • Модуль выбора вида доставки
  • Локация пункта выдачи
  • и ещё другие

Package Diagram

Примерный вид диаграммы пакетов:

image

Пакеты здесь аналоги будущих модулей в нашем приложении.

Клиент-серверная архитектура

Архитектурно приложение будет являться классическим трехуровневых приложением - фронтенд, бэкенд, база данных. На первом этапе бэкенд и база данных представляют собой статичные json файлы. Затем за них будет отвечать Headless CMS

В связи с тем, что мы разрабатываем SPA, часть бизнес логики будет на фронтенде.

image

Routing

Роутинг используется в том числе и для того, чтобы сделать наши подсистемы слабосвязанными.

На первом этапе нам нужны три маршрута:

  • главная страница
  • товары определенной категории
  • страница определенного товара

Для простоты главную страницу оставим пустой.

',29),n=[c];function p(d,m,u,h,g,_){return e(),t("div",null,n)}const q=a(s,[["render",p]]);export{y as __pageData,q as default}; +import{_ as a,o as e,c as t,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const l="/assets/divide-et-impera.CvdcY0Gi.webp",r="/assets/package-diagram.kylqtaRs.jpg",o="/assets/three-tier-architecture.BOGJQRyn.png",y=JSON.parse('{"title":"Архитектура и дизайн","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/architecture-and-design.md","filePath":"ru/arty-crafty/analysis/architecture-and-design.md","lastUpdated":1726505115000}'),s={name:"ru/arty-crafty/analysis/architecture-and-design.md"},c=i('

Архитектура и дизайн

Упрощение сложного

Самое главное правило при проектировании любых систем - KISS (keep it simple, stupid). Более благозвучно это формулируется как: "Всё гениальное просто".

Для того, чтобы управлять сложными системами, издревле люди стали разбивать их на более простые. Принцип: "Разделяй и властвуй", относится именно к этому.

image

Любое современное государство управляется через иерархичное разбиение и подчинение, давая возможность любому управляющему быть ответственным за небольшую часть системы, которую он может контролировать.

Аналогично программная система любой сложности может быть разбита на отдельные подсистемы. Чем менее две таких подсистемы будут связаны друг с другом (loosely coupled), тем проще с ними будет работать, исправлять баги, вводить в курс новых разработчиков.

Абстракция и инкапсуляция

Эти два метода объектно-ориентированного программирования хорошо действуют и здесь в веб разработке на Vue, для определения функциональных границ подсистем, и данных, которыми они обменивается между собой и с окружающим миром.

Например, у нас на фронтенде будет два представления на экране (views) - категория товара и сам товар. Кажется, что они связаны друг с другом, потому что оперируют одними сущностями, но на самом деле они вообще никак не связаны (если отвлечься от визуального вида). Каждое получает свои данные с бэкенда. Когда происходит клик на какой-либо товар в списке категории, то id товара отправляется во vue-router, который уже вызывает страницу товара с нужным id.

То же самое в паре меню категорий и самого представления категории с товарами. Меню категорий может быть довольно сложным, и вынести его в отдельную подсистему тогда будет полезно.

Это пример, как можно разбивать систему на несвязанные (или слабосвязанные) подсистемы, что очень сильно облегчает дальнейшую разработку.

Разбиение проекта на подсистемы

Замечание

Иногда будут вставать вопросы, над которыми читателю полезно подумать самому. В таких случаях, я буду формулировать вопрос, а свой ответ прятать под спойлер. Ваш вариант ответа вполне может оказаться полней и точней.

Вопрос: на какие слабосвязанные подсистемы можно разбить наш проект маркетплейса? Имеется ввиду только фронтенд. Предлагаю взять для примера Озон и исследовать его.

Вариант ответа
  • Меню категорий
  • Фильтры поиска
  • Представление категории товара
  • Представление товара
  • Секция "Похожие товары"
  • Отзывы о товаре
  • Рекламные баннеры
  • Блоки спецпредложений и рекомендаций
  • Вспомогательные страницы (подарочные сертификаты, акции и т.п.)
  • Сравнение товаров
  • Избранное
  • Заказы
  • Страница профиля
  • Корзина
  • Модуль оплаты
  • Модуль выбора вида доставки
  • Локация пункта выдачи
  • и ещё другие

Package Diagram

Примерный вид диаграммы пакетов:

image

Пакеты здесь аналоги будущих модулей в нашем приложении.

Клиент-серверная архитектура

Архитектурно приложение будет являться классическим трехуровневых приложением - фронтенд, бэкенд, база данных. На первом этапе бэкенд и база данных представляют собой статичные json файлы. Затем за них будет отвечать Headless CMS

В связи с тем, что мы разрабатываем SPA, часть бизнес логики будет на фронтенде.

image

Routing

Роутинг используется в том числе и для того, чтобы сделать наши подсистемы слабосвязанными.

На первом этапе нам нужны три маршрута:

  • главная страница
  • товары определенной категории
  • страница определенного товара

Для простоты главную страницу оставим пустой.

',29),n=[c];function p(d,m,u,h,g,_){return e(),t("div",null,n)}const q=a(s,[["render",p]]);export{y as __pageData,q as default}; diff --git a/assets/ru_arty-crafty_analysis_architecture-and-design.md.mhu5grx2.lean.js b/assets/ru_arty-crafty_analysis_architecture-and-design.md.av5YbhuF.lean.js similarity index 93% rename from assets/ru_arty-crafty_analysis_architecture-and-design.md.mhu5grx2.lean.js rename to assets/ru_arty-crafty_analysis_architecture-and-design.md.av5YbhuF.lean.js index 7dece385d..429100193 100644 --- a/assets/ru_arty-crafty_analysis_architecture-and-design.md.mhu5grx2.lean.js +++ b/assets/ru_arty-crafty_analysis_architecture-and-design.md.av5YbhuF.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const l="/assets/divide-et-impera.CvdcY0Gi.webp",r="/assets/package-diagram.kylqtaRs.jpg",o="/assets/three-tier-architecture.BOGJQRyn.png",y=JSON.parse('{"title":"Архитектура и дизайн","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/architecture-and-design.md","filePath":"ru/arty-crafty/analysis/architecture-and-design.md","lastUpdated":1726474804000}'),s={name:"ru/arty-crafty/analysis/architecture-and-design.md"},c=i("",29),n=[c];function p(d,m,u,h,g,_){return e(),t("div",null,n)}const q=a(s,[["render",p]]);export{y as __pageData,q as default}; +import{_ as a,o as e,c as t,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const l="/assets/divide-et-impera.CvdcY0Gi.webp",r="/assets/package-diagram.kylqtaRs.jpg",o="/assets/three-tier-architecture.BOGJQRyn.png",y=JSON.parse('{"title":"Архитектура и дизайн","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/architecture-and-design.md","filePath":"ru/arty-crafty/analysis/architecture-and-design.md","lastUpdated":1726505115000}'),s={name:"ru/arty-crafty/analysis/architecture-and-design.md"},c=i("",29),n=[c];function p(d,m,u,h,g,_){return e(),t("div",null,n)}const q=a(s,[["render",p]]);export{y as __pageData,q as default}; diff --git a/assets/ru_arty-crafty_analysis_business-analysis.md.CUOmDCH9.js b/assets/ru_arty-crafty_analysis_business-analysis.md.Vrk4tSvF.js similarity index 99% rename from assets/ru_arty-crafty_analysis_business-analysis.md.CUOmDCH9.js rename to assets/ru_arty-crafty_analysis_business-analysis.md.Vrk4tSvF.js index 502975adf..94ce85bc5 100644 --- a/assets/ru_arty-crafty_analysis_business-analysis.md.CUOmDCH9.js +++ b/assets/ru_arty-crafty_analysis_business-analysis.md.Vrk4tSvF.js @@ -1 +1 @@ -import{_ as a,o as e,c as s,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const r="/assets/use-case.vCRX5OZ8.png",o="/assets/use-case-online-shopping-example.BK4JZDPi.jpg",g=JSON.parse('{"title":"Бизнес-анализ","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/business-analysis.md","filePath":"ru/arty-crafty/analysis/business-analysis.md","lastUpdated":1726474804000}'),n={name:"ru/arty-crafty/analysis/business-analysis.md"},c=t('

Бизнес-анализ

Границы проекта

Наш случай (витрина-магазин-маркетплейс) - довольно распространенный, изученный и проверенный. Есть известные решения и лучшие практики для него - как технические (код), так и в плане подбора нужного функционала.

Если бы заказчиком был некий отдельный клиент, необходимо было бы четко задокументировать с ним в SRS каждый функционал, каждый элемент экрана сайта для избежания дальнейших проблем и претензий с обеих сторон, но так как мы "пишем с натуры", то этот момент можно опустить.

Существующие решения

Есть ли решения, который можно использовать? О бэкенде речь ниже, для фронтенда не было найдено ничего. Vue Storefront мутный продукт, предлагаемый в основном как сервис, да еще и написанный на Nuxt 2. Больше серьезных решений на Vue найдено не было.

Рассмотрим намеченные этапы развития проекта.

Витрина

На начальном этапе пользователь должен иметь возможность просматривать каталог и отдельные продукты. Визуально это означает, что в нашем веб приложении будет секция с каталогом категорий, а так же представление (view) со списком продуктов выбранной категории, и представление с описанием продукта.

С точки зрения потоков данных, веб приложение должно получать информацию о каталоге, о продуктах в определенной категории и о конкретном продукте, что означает три типа запросов к бэкенду.

На первом этапе "бэкенд" будет простыми json файлами, отдаваемыми самим сервером фронтенда.

Данные файлы будут: каталог категорий, пара файлов категорий продуктов, несколько файлов продуктов.

Задача первого этапа - настроить маршрутизацию (vue routing) и сделать возможность просматривать каталог продуктов, получая данные по сети. Данный скелет приложения позволит в дальнейшем наращивать на него функциональность.

Магазин

Здесь потребуется добавление Корзины (Shopping cart) и системы заказов (Orders). На этом этапе (и даже чуть раньше) нужно будет подключать полноценный бэкенд. Мы возьмем какое-нибудь Headless CMS e-commerce решение. Если бы это был просто наш магазин, можно было бы написать свой несложный бэкенд, однако нужна полноценная админка для технически неподкованых продавцов (merchants), а это очень трудоемко.

Со сторонним заказчиком необходимо бы было провести анализ существующих подходящих Headless CMS e-commerce решение с расчетом дальнейших затрат. Мы же ориентируемся на наличие open source решений для этого, например medusa.js, в которых есть возможность работы режиме маркетплейса.

В любом случае, решаем задачи по мере их поступления. Если мы остановимся на невозможности что-то реализовать в силу объективных обстоятельств, то как минимум витрина с возможностью сделать заказ (без онлайн оплаты) у нас будет, а значит исходная задача в необходимой мере будет решена.

Маркетплейс

На фронтенде факторизация по продавцам - это, по сути, выборка по специальному аттрибуту, который есть у каждого продукта. Однако в админке этот функционал намного более обширен. В том числе и поэтому мы ориентируемся на стороннее решение для бэкенда.

Use case диаграмма

Одним из методов решения задач бизнес анализа являются UML диаграммы, в частности, Use case диаграмма.

Use case диаграмма нашего проекта может выглядеть примерно так:

image

Разбивка по этапам очень условна.

Вот более детальный пример Use case диаграммы онлайн магазина:

Use case online store example

image

',26),i=[c];function l(p,d,h,m,u,_){return e(),s("div",null,i)}const y=a(n,[["render",l]]);export{g as __pageData,y as default}; +import{_ as a,o as e,c as s,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const r="/assets/use-case.vCRX5OZ8.png",o="/assets/use-case-online-shopping-example.BK4JZDPi.jpg",g=JSON.parse('{"title":"Бизнес-анализ","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/business-analysis.md","filePath":"ru/arty-crafty/analysis/business-analysis.md","lastUpdated":1726505115000}'),n={name:"ru/arty-crafty/analysis/business-analysis.md"},c=t('

Бизнес-анализ

Границы проекта

Наш случай (витрина-магазин-маркетплейс) - довольно распространенный, изученный и проверенный. Есть известные решения и лучшие практики для него - как технические (код), так и в плане подбора нужного функционала.

Если бы заказчиком был некий отдельный клиент, необходимо было бы четко задокументировать с ним в SRS каждый функционал, каждый элемент экрана сайта для избежания дальнейших проблем и претензий с обеих сторон, но так как мы "пишем с натуры", то этот момент можно опустить.

Существующие решения

Есть ли решения, который можно использовать? О бэкенде речь ниже, для фронтенда не было найдено ничего. Vue Storefront мутный продукт, предлагаемый в основном как сервис, да еще и написанный на Nuxt 2. Больше серьезных решений на Vue найдено не было.

Рассмотрим намеченные этапы развития проекта.

Витрина

На начальном этапе пользователь должен иметь возможность просматривать каталог и отдельные продукты. Визуально это означает, что в нашем веб приложении будет секция с каталогом категорий, а так же представление (view) со списком продуктов выбранной категории, и представление с описанием продукта.

С точки зрения потоков данных, веб приложение должно получать информацию о каталоге, о продуктах в определенной категории и о конкретном продукте, что означает три типа запросов к бэкенду.

На первом этапе "бэкенд" будет простыми json файлами, отдаваемыми самим сервером фронтенда.

Данные файлы будут: каталог категорий, пара файлов категорий продуктов, несколько файлов продуктов.

Задача первого этапа - настроить маршрутизацию (vue routing) и сделать возможность просматривать каталог продуктов, получая данные по сети. Данный скелет приложения позволит в дальнейшем наращивать на него функциональность.

Магазин

Здесь потребуется добавление Корзины (Shopping cart) и системы заказов (Orders). На этом этапе (и даже чуть раньше) нужно будет подключать полноценный бэкенд. Мы возьмем какое-нибудь Headless CMS e-commerce решение. Если бы это был просто наш магазин, можно было бы написать свой несложный бэкенд, однако нужна полноценная админка для технически неподкованых продавцов (merchants), а это очень трудоемко.

Со сторонним заказчиком необходимо бы было провести анализ существующих подходящих Headless CMS e-commerce решение с расчетом дальнейших затрат. Мы же ориентируемся на наличие open source решений для этого, например medusa.js, в которых есть возможность работы режиме маркетплейса.

В любом случае, решаем задачи по мере их поступления. Если мы остановимся на невозможности что-то реализовать в силу объективных обстоятельств, то как минимум витрина с возможностью сделать заказ (без онлайн оплаты) у нас будет, а значит исходная задача в необходимой мере будет решена.

Маркетплейс

На фронтенде факторизация по продавцам - это, по сути, выборка по специальному аттрибуту, который есть у каждого продукта. Однако в админке этот функционал намного более обширен. В том числе и поэтому мы ориентируемся на стороннее решение для бэкенда.

Use case диаграмма

Одним из методов решения задач бизнес анализа являются UML диаграммы, в частности, Use case диаграмма.

Use case диаграмма нашего проекта может выглядеть примерно так:

image

Разбивка по этапам очень условна.

Вот более детальный пример Use case диаграммы онлайн магазина:

Use case online store example

image

',26),i=[c];function l(p,d,h,m,u,_){return e(),s("div",null,i)}const y=a(n,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/ru_arty-crafty_analysis_business-analysis.md.CUOmDCH9.lean.js b/assets/ru_arty-crafty_analysis_business-analysis.md.Vrk4tSvF.lean.js similarity index 92% rename from assets/ru_arty-crafty_analysis_business-analysis.md.CUOmDCH9.lean.js rename to assets/ru_arty-crafty_analysis_business-analysis.md.Vrk4tSvF.lean.js index 0dff0898b..681495c0f 100644 --- a/assets/ru_arty-crafty_analysis_business-analysis.md.CUOmDCH9.lean.js +++ b/assets/ru_arty-crafty_analysis_business-analysis.md.Vrk4tSvF.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as s,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const r="/assets/use-case.vCRX5OZ8.png",o="/assets/use-case-online-shopping-example.BK4JZDPi.jpg",g=JSON.parse('{"title":"Бизнес-анализ","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/business-analysis.md","filePath":"ru/arty-crafty/analysis/business-analysis.md","lastUpdated":1726474804000}'),n={name:"ru/arty-crafty/analysis/business-analysis.md"},c=t("",26),i=[c];function l(p,d,h,m,u,_){return e(),s("div",null,i)}const y=a(n,[["render",l]]);export{g as __pageData,y as default}; +import{_ as a,o as e,c as s,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const r="/assets/use-case.vCRX5OZ8.png",o="/assets/use-case-online-shopping-example.BK4JZDPi.jpg",g=JSON.parse('{"title":"Бизнес-анализ","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/business-analysis.md","filePath":"ru/arty-crafty/analysis/business-analysis.md","lastUpdated":1726505115000}'),n={name:"ru/arty-crafty/analysis/business-analysis.md"},c=t("",26),i=[c];function l(p,d,h,m,u,_){return e(),s("div",null,i)}const y=a(n,[["render",l]]);export{g as __pageData,y as default}; diff --git a/assets/ru_arty-crafty_analysis_data-model.md.D9ne2sg2.js b/assets/ru_arty-crafty_analysis_data-model.md.CS1KTjmq.js similarity index 99% rename from assets/ru_arty-crafty_analysis_data-model.md.D9ne2sg2.js rename to assets/ru_arty-crafty_analysis_data-model.md.CS1KTjmq.js index 8e2ddc1d0..1b1de80cd 100644 --- a/assets/ru_arty-crafty_analysis_data-model.md.D9ne2sg2.js +++ b/assets/ru_arty-crafty_analysis_data-model.md.CS1KTjmq.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/oc-product-table.QyuBxbHm.png",e="/assets/product-table-1.DLhGV0ro.png",y=JSON.parse('{"title":"Модель данных","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/data-model.md","filePath":"ru/arty-crafty/analysis/data-model.md","lastUpdated":1726474804000}'),p={name:"ru/arty-crafty/analysis/data-model.md"},h=t('

Модель данных

Категория и товар

У нас, очевидно, есть уже две бизнес сущности - категория каталога и товар. На данный момент пусть товар может принадлежать только одной категории. В дальнейшем можно ввести тэги, коллекции, бренды, которые тоже будут объединять товары в множества и по которым будет возможен поиск м фильтрация.

Чтобы определить, какие свойства будут у категории или товара, можно воспользоваться здравым смыслом, а так же посмотреть реализацию данных сущностей в других e-commerce решениях.

Вот, например, какие поля есть в таблице product в OpenCart:

image

Дополнительно к этому в OpenCart у товара есть изображения, его варианты, опции, типы.

Типы баз данных

На первом этапе мы используем JSON файлы в качестве бэкенд данных, но в последующем задействуем настоящую базу данных, конечно.

Для прикладного программирования есть два основных типа баз данных - реляционные (SQL) и объектные (NoSQL). В первой данные хранятся в таблицах, типа Google sheet, со связями между собой, во второй - в виде JSON объектов. Реляционные БД дают структурированность, транзакционность, надежность и производительность, проверенную десятилетиям, NoSQL базы дают удобный формат иерархичного представления данных и возможность по ходу разработки менять структуру второстепенных данных не меняя схему БД.

Самый лучший вариант - использовать SQL базу c JSON полями в таблицах для иерархичных данных. Обычные поля остаются для данных, требующих индексации для быстрого доступа, - по которым нужен поиск или объединение. Таким образом получается преимущество SQL базы данных с опрятностью и удобством работы с JSON данными.

В примере с product у нас в первом приближении будет примерно следующая таблица:

image

Мы создали два индекса - у title и subtitle, потому что по ним будет происходить поиск. Остальные данные могут находиться в data.

То есть, пример соответствующего json файла товара для первого этапа может быть такой:

1.json
json
{
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/oc-product-table.QyuBxbHm.png",e="/assets/product-table-1.DLhGV0ro.png",y=JSON.parse('{"title":"Модель данных","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/data-model.md","filePath":"ru/arty-crafty/analysis/data-model.md","lastUpdated":1726505115000}'),p={name:"ru/arty-crafty/analysis/data-model.md"},h=t('

Модель данных

Категория и товар

У нас, очевидно, есть уже две бизнес сущности - категория каталога и товар. На данный момент пусть товар может принадлежать только одной категории. В дальнейшем можно ввести тэги, коллекции, бренды, которые тоже будут объединять товары в множества и по которым будет возможен поиск м фильтрация.

Чтобы определить, какие свойства будут у категории или товара, можно воспользоваться здравым смыслом, а так же посмотреть реализацию данных сущностей в других e-commerce решениях.

Вот, например, какие поля есть в таблице product в OpenCart:

image

Дополнительно к этому в OpenCart у товара есть изображения, его варианты, опции, типы.

Типы баз данных

На первом этапе мы используем JSON файлы в качестве бэкенд данных, но в последующем задействуем настоящую базу данных, конечно.

Для прикладного программирования есть два основных типа баз данных - реляционные (SQL) и объектные (NoSQL). В первой данные хранятся в таблицах, типа Google sheet, со связями между собой, во второй - в виде JSON объектов. Реляционные БД дают структурированность, транзакционность, надежность и производительность, проверенную десятилетиям, NoSQL базы дают удобный формат иерархичного представления данных и возможность по ходу разработки менять структуру второстепенных данных не меняя схему БД.

Самый лучший вариант - использовать SQL базу c JSON полями в таблицах для иерархичных данных. Обычные поля остаются для данных, требующих индексации для быстрого доступа, - по которым нужен поиск или объединение. Таким образом получается преимущество SQL базы данных с опрятностью и удобством работы с JSON данными.

В примере с product у нас в первом приближении будет примерно следующая таблица:

image

Мы создали два индекса - у title и subtitle, потому что по ним будет происходить поиск. Остальные данные могут находиться в data.

То есть, пример соответствующего json файла товара для первого этапа может быть такой:

1.json
json
{
   "id": 1,
   "title": "Garfield",
   "subtitle": "Мягкая игрушка кот Garfield",
diff --git a/assets/ru_arty-crafty_analysis_data-model.md.D9ne2sg2.lean.js b/assets/ru_arty-crafty_analysis_data-model.md.CS1KTjmq.lean.js
similarity index 92%
rename from assets/ru_arty-crafty_analysis_data-model.md.D9ne2sg2.lean.js
rename to assets/ru_arty-crafty_analysis_data-model.md.CS1KTjmq.lean.js
index 5c004df7c..fea87a9a3 100644
--- a/assets/ru_arty-crafty_analysis_data-model.md.D9ne2sg2.lean.js
+++ b/assets/ru_arty-crafty_analysis_data-model.md.CS1KTjmq.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/oc-product-table.QyuBxbHm.png",e="/assets/product-table-1.DLhGV0ro.png",y=JSON.parse('{"title":"Модель данных","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/data-model.md","filePath":"ru/arty-crafty/analysis/data-model.md","lastUpdated":1726474804000}'),p={name:"ru/arty-crafty/analysis/data-model.md"},h=t("",21),l=[h];function k(o,r,d,E,c,g){return i(),a("div",null,l)}const F=s(p,[["render",k]]);export{y as __pageData,F as default};
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/oc-product-table.QyuBxbHm.png",e="/assets/product-table-1.DLhGV0ro.png",y=JSON.parse('{"title":"Модель данных","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/data-model.md","filePath":"ru/arty-crafty/analysis/data-model.md","lastUpdated":1726505115000}'),p={name:"ru/arty-crafty/analysis/data-model.md"},h=t("",21),l=[h];function k(o,r,d,E,c,g){return i(),a("div",null,l)}const F=s(p,[["render",k]]);export{y as __pageData,F as default};
diff --git a/assets/ru_arty-crafty_analysis_research.md.aceCiBDK.js b/assets/ru_arty-crafty_analysis_research.md.CzReGJl_.js
similarity index 98%
rename from assets/ru_arty-crafty_analysis_research.md.aceCiBDK.js
rename to assets/ru_arty-crafty_analysis_research.md.CzReGJl_.js
index 6334b3a87..1f95d3e57 100644
--- a/assets/ru_arty-crafty_analysis_research.md.aceCiBDK.js
+++ b/assets/ru_arty-crafty_analysis_research.md.CzReGJl_.js
@@ -1 +1 @@
-import{_ as a,o as e,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Анализ рынка","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/research.md","filePath":"ru/arty-crafty/analysis/research.md","lastUpdated":1726474804000}'),o={name:"ru/arty-crafty/analysis/research.md"},s=r('

Анализ рынка

Изучение конкурентов

Исследуем вебсайты других магазинов и маркетплейсов, чтобы изучить, как они выглядят и функционируют.

Сайты-аналоги

Погуглим "best marketplace". Мне выпало в том числе:

Для начала отмечаем, что для фронтенда разница между маркетплейсом и магазином - минимальна. Как функционально, так и в дизайне страницы. В случае маркетплейса на странице товара есть маленькая ссылка на магазин, и есть фильтрация по магазинам, которую можно представлять, как отдельную категорию для каждого магазина. Правда отображение товаров в этой категории отличается от обычных категорий.

Делаем мы на первом этапе витрину, но в уме держим маркетплейс. Мы не должны принимать таких решений, которые бы в будущем заставили сильно рефакторить код. Но, очевидно, что мы можем ориентироваться в дизайне на простые магазины. Расширить потом до маркетплейса будет несложно.

Самый удобный магазин/маркетплейс, с моей точки зрения, Ozon, что подтверждается его успешностью. Его структуру мы и будем копировать.

Совет

Изучать похожие сайты полезно не только для вдохновения по дизайну, но и, например, при выборе наименования того или иного компонента - посмотрите через DevTools какие названия классов используются на аналогичном html блоке у конкурентов.

',10),l=[s];function c(n,i,h,m,p,_){return e(),t("div",null,l)}const u=a(o,[["render",c]]);export{f as __pageData,u as default}; +import{_ as a,o as e,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Анализ рынка","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/research.md","filePath":"ru/arty-crafty/analysis/research.md","lastUpdated":1726505115000}'),o={name:"ru/arty-crafty/analysis/research.md"},s=r('

Анализ рынка

Изучение конкурентов

Исследуем вебсайты других магазинов и маркетплейсов, чтобы изучить, как они выглядят и функционируют.

Сайты-аналоги

Погуглим "best marketplace". Мне выпало в том числе:

Для начала отмечаем, что для фронтенда разница между маркетплейсом и магазином - минимальна. Как функционально, так и в дизайне страницы. В случае маркетплейса на странице товара есть маленькая ссылка на магазин, и есть фильтрация по магазинам, которую можно представлять, как отдельную категорию для каждого магазина. Правда отображение товаров в этой категории отличается от обычных категорий.

Делаем мы на первом этапе витрину, но в уме держим маркетплейс. Мы не должны принимать таких решений, которые бы в будущем заставили сильно рефакторить код. Но, очевидно, что мы можем ориентироваться в дизайне на простые магазины. Расширить потом до маркетплейса будет несложно.

Самый удобный магазин/маркетплейс, с моей точки зрения, Ozon, что подтверждается его успешностью. Его структуру мы и будем копировать.

Совет

Изучать похожие сайты полезно не только для вдохновения по дизайну, но и, например, при выборе наименования того или иного компонента - посмотрите через DevTools какие названия классов используются на аналогичном html блоке у конкурентов.

',10),l=[s];function c(n,i,h,m,p,_){return e(),t("div",null,l)}const u=a(o,[["render",c]]);export{f as __pageData,u as default}; diff --git a/assets/ru_arty-crafty_analysis_research.md.aceCiBDK.lean.js b/assets/ru_arty-crafty_analysis_research.md.CzReGJl_.lean.js similarity index 91% rename from assets/ru_arty-crafty_analysis_research.md.aceCiBDK.lean.js rename to assets/ru_arty-crafty_analysis_research.md.CzReGJl_.lean.js index c07f30141..7ad2b3f70 100644 --- a/assets/ru_arty-crafty_analysis_research.md.aceCiBDK.lean.js +++ b/assets/ru_arty-crafty_analysis_research.md.CzReGJl_.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Анализ рынка","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/research.md","filePath":"ru/arty-crafty/analysis/research.md","lastUpdated":1726474804000}'),o={name:"ru/arty-crafty/analysis/research.md"},s=r("",10),l=[s];function c(n,i,h,m,p,_){return e(),t("div",null,l)}const u=a(o,[["render",c]]);export{f as __pageData,u as default}; +import{_ as a,o as e,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Анализ рынка","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/research.md","filePath":"ru/arty-crafty/analysis/research.md","lastUpdated":1726505115000}'),o={name:"ru/arty-crafty/analysis/research.md"},s=r("",10),l=[s];function c(n,i,h,m,p,_){return e(),t("div",null,l)}const u=a(o,[["render",c]]);export{f as __pageData,u as default}; diff --git a/assets/ru_arty-crafty_analysis_tech-stack.md.CNQa_xDJ.js b/assets/ru_arty-crafty_analysis_tech-stack.md.K9eVW2Vt.js similarity index 97% rename from assets/ru_arty-crafty_analysis_tech-stack.md.CNQa_xDJ.js rename to assets/ru_arty-crafty_analysis_tech-stack.md.K9eVW2Vt.js index 4a13f394f..6a5576356 100644 --- a/assets/ru_arty-crafty_analysis_tech-stack.md.CNQa_xDJ.js +++ b/assets/ru_arty-crafty_analysis_tech-stack.md.K9eVW2Vt.js @@ -1 +1 @@ -import{_ as e,o as t,c as a,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Технический стек проекта","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/tech-stack.md","filePath":"ru/arty-crafty/analysis/tech-stack.md","lastUpdated":1726474804000}'),c={name:"ru/arty-crafty/analysis/tech-stack.md"},r=o('

Технический стек проекта

Фронтенд должен писаться на Vue 3, Vite. Из обязательных библиотек - vue-router. Действует правило: если можем обойтись без какой-то зависимости - обходимся без нее. Вместо Pinia используется Composition API напрямую.

Используем TypeScript, но в меру. Типизируем только основные сущности и интерфейсы. TypeScript должен облегчать работу разработчика, а не превращать её в кошмар.

CSS3 лучше любого CSS фреймворка/библиотеки, поэтому используем его (SCSS).

ESlint конфигурация от Antony Fu.

Насчет использования библиотек UI компонент - в идеале постараемся иметь только свои компоненты, однако для быстрого прототипирования мы можем задействовать какую-то библиотеку, оборачивая ее компоненты в свои обертки для последующего безболезненного перехода на свой UI kit. То же относится к VueUse.

Для адаптивности мы устанавливаем на тэг body четыре глобальных класса - mobile, tablet, notebook и desktop, в зависимости от разрешения экрана, и используем их в стилях в компонентах. Это намного удобней прямой работы с CSS media query.

',7),n=[r];function s(d,i,p,_,l,m){return t(),a("div",null,n)}const h=e(c,[["render",s]]);export{f as __pageData,h as default}; +import{_ as e,o as t,c as a,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Технический стек проекта","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/tech-stack.md","filePath":"ru/arty-crafty/analysis/tech-stack.md","lastUpdated":1726505115000}'),c={name:"ru/arty-crafty/analysis/tech-stack.md"},r=o('

Технический стек проекта

Фронтенд должен писаться на Vue 3, Vite. Из обязательных библиотек - vue-router. Действует правило: если можем обойтись без какой-то зависимости - обходимся без нее. Вместо Pinia используется Composition API напрямую.

Используем TypeScript, но в меру. Типизируем только основные сущности и интерфейсы. TypeScript должен облегчать работу разработчика, а не превращать её в кошмар.

CSS3 лучше любого CSS фреймворка/библиотеки, поэтому используем его (SCSS).

ESlint конфигурация от Antony Fu.

Насчет использования библиотек UI компонент - в идеале постараемся иметь только свои компоненты, однако для быстрого прототипирования мы можем задействовать какую-то библиотеку, оборачивая ее компоненты в свои обертки для последующего безболезненного перехода на свой UI kit. То же относится к VueUse.

Для адаптивности мы устанавливаем на тэг body четыре глобальных класса - mobile, tablet, notebook и desktop, в зависимости от разрешения экрана, и используем их в стилях в компонентах. Это намного удобней прямой работы с CSS media query.

',7),n=[r];function s(d,i,p,_,l,m){return t(),a("div",null,n)}const h=e(c,[["render",s]]);export{f as __pageData,h as default}; diff --git a/assets/ru_arty-crafty_analysis_tech-stack.md.CNQa_xDJ.lean.js b/assets/ru_arty-crafty_analysis_tech-stack.md.K9eVW2Vt.lean.js similarity index 91% rename from assets/ru_arty-crafty_analysis_tech-stack.md.CNQa_xDJ.lean.js rename to assets/ru_arty-crafty_analysis_tech-stack.md.K9eVW2Vt.lean.js index 6a14a455d..5c0e1e4aa 100644 --- a/assets/ru_arty-crafty_analysis_tech-stack.md.CNQa_xDJ.lean.js +++ b/assets/ru_arty-crafty_analysis_tech-stack.md.K9eVW2Vt.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as a,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Технический стек проекта","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/tech-stack.md","filePath":"ru/arty-crafty/analysis/tech-stack.md","lastUpdated":1726474804000}'),c={name:"ru/arty-crafty/analysis/tech-stack.md"},r=o("",7),n=[r];function s(d,i,p,_,l,m){return t(),a("div",null,n)}const h=e(c,[["render",s]]);export{f as __pageData,h as default}; +import{_ as e,o as t,c as a,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Технический стек проекта","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/tech-stack.md","filePath":"ru/arty-crafty/analysis/tech-stack.md","lastUpdated":1726505115000}'),c={name:"ru/arty-crafty/analysis/tech-stack.md"},r=o("",7),n=[r];function s(d,i,p,_,l,m){return t(),a("div",null,n)}const h=e(c,[["render",s]]);export{f as __pageData,h as default}; diff --git a/assets/ru_arty-crafty_analysis_ui-design.md.DGoNa5Zt.js b/assets/ru_arty-crafty_analysis_ui-design.md.BRembBsz.js similarity index 97% rename from assets/ru_arty-crafty_analysis_ui-design.md.DGoNa5Zt.js rename to assets/ru_arty-crafty_analysis_ui-design.md.BRembBsz.js index 51c662ac3..f5364c0d2 100644 --- a/assets/ru_arty-crafty_analysis_ui-design.md.DGoNa5Zt.js +++ b/assets/ru_arty-crafty_analysis_ui-design.md.BRembBsz.js @@ -1 +1 @@ -import{_ as a,o as t,c as e,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"UI дизайн","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/ui-design.md","filePath":"ru/arty-crafty/analysis/ui-design.md","lastUpdated":1726474804000}'),n={name:"ru/arty-crafty/analysis/ui-design.md"},i=r('

UI дизайн

Дизайн сайта

Дизайн в плане визуального оформления сайта - довольно непростая вещь. Вернее, хороший дизайн. Плюс в том, что его всегда можно сделать в самую последнюю очередь.

Пока будем работать над функционалом сайта (в том числе, адаптивностью), а со стилизацией - как будет желание.

Творческие способности

Если вы не сильно творчески одаренный человек, то создать сайт полностью самому вряд ли получится. Это примерно то же, что и написать хорошую картину.

Но в отличие от картины, дизайн сайта можно перенять. Как целиком, так и по частям - главный лэйаут, функционал, типы виджетов, их компоновка, цветовые гаммы, UI компоненты, шрифт, эффекты и многое другое. Может показаться воровством, но представим, что идете вы по улице, и видите дом. Красивый. Рассматриваете кровлю, структуру штукатурки, отделку фундамента. Потом приходите к себе, закупаете стройматериалы, заказываете строительную бригаду, и делаете себе примерно так же, но своё. Воровство?

',7),o=[i];function s(c,d,l,_,m,p){return t(),e("div",null,o)}const f=a(n,[["render",s]]);export{u as __pageData,f as default}; +import{_ as a,o as t,c as e,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"UI дизайн","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/ui-design.md","filePath":"ru/arty-crafty/analysis/ui-design.md","lastUpdated":1726505115000}'),n={name:"ru/arty-crafty/analysis/ui-design.md"},i=r('

UI дизайн

Дизайн сайта

Дизайн в плане визуального оформления сайта - довольно непростая вещь. Вернее, хороший дизайн. Плюс в том, что его всегда можно сделать в самую последнюю очередь.

Пока будем работать над функционалом сайта (в том числе, адаптивностью), а со стилизацией - как будет желание.

Творческие способности

Если вы не сильно творчески одаренный человек, то создать сайт полностью самому вряд ли получится. Это примерно то же, что и написать хорошую картину.

Но в отличие от картины, дизайн сайта можно перенять. Как целиком, так и по частям - главный лэйаут, функционал, типы виджетов, их компоновка, цветовые гаммы, UI компоненты, шрифт, эффекты и многое другое. Может показаться воровством, но представим, что идете вы по улице, и видите дом. Красивый. Рассматриваете кровлю, структуру штукатурки, отделку фундамента. Потом приходите к себе, закупаете стройматериалы, заказываете строительную бригаду, и делаете себе примерно так же, но своё. Воровство?

',7),o=[i];function s(c,d,l,_,m,p){return t(),e("div",null,o)}const f=a(n,[["render",s]]);export{u as __pageData,f as default}; diff --git a/assets/ru_arty-crafty_analysis_ui-design.md.DGoNa5Zt.lean.js b/assets/ru_arty-crafty_analysis_ui-design.md.BRembBsz.lean.js similarity index 91% rename from assets/ru_arty-crafty_analysis_ui-design.md.DGoNa5Zt.lean.js rename to assets/ru_arty-crafty_analysis_ui-design.md.BRembBsz.lean.js index 9924ac58b..53cfd1bcb 100644 --- a/assets/ru_arty-crafty_analysis_ui-design.md.DGoNa5Zt.lean.js +++ b/assets/ru_arty-crafty_analysis_ui-design.md.BRembBsz.lean.js @@ -1 +1 @@ -import{_ as a,o as t,c as e,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"UI дизайн","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/ui-design.md","filePath":"ru/arty-crafty/analysis/ui-design.md","lastUpdated":1726474804000}'),n={name:"ru/arty-crafty/analysis/ui-design.md"},i=r("",7),o=[i];function s(c,d,l,_,m,p){return t(),e("div",null,o)}const f=a(n,[["render",s]]);export{u as __pageData,f as default}; +import{_ as a,o as t,c as e,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"UI дизайн","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/ui-design.md","filePath":"ru/arty-crafty/analysis/ui-design.md","lastUpdated":1726505115000}'),n={name:"ru/arty-crafty/analysis/ui-design.md"},i=r("",7),o=[i];function s(c,d,l,_,m,p){return t(),e("div",null,o)}const f=a(n,[["render",s]]);export{u as __pageData,f as default}; diff --git a/assets/ru_arty-crafty_analysis_ui-layout.md.D2HxkDYi.js b/assets/ru_arty-crafty_analysis_ui-layout.md.DqpAXdQf.js similarity index 99% rename from assets/ru_arty-crafty_analysis_ui-layout.md.D2HxkDYi.js rename to assets/ru_arty-crafty_analysis_ui-layout.md.DqpAXdQf.js index 8a16a0b3e..804dc36b7 100644 --- a/assets/ru_arty-crafty_analysis_ui-layout.md.D2HxkDYi.js +++ b/assets/ru_arty-crafty_analysis_ui-layout.md.DqpAXdQf.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as r,aq as o}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"UI макет","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/ui-layout.md","filePath":"ru/arty-crafty/analysis/ui-layout.md","lastUpdated":1726474804000}'),i={name:"ru/arty-crafty/analysis/ui-layout.md"},l=r('

UI макет

Подберем подходящий макет (layout) для нашего сайта. Для этого можно еще раз взглянуть на уже найденные онлайн магазины в интернете.

Основные компоненты страницы

У магазинов обычно лэйаут состоит из четырех частей - header, footer, sidebar слева и центральная панель

image

Сверху будет хедер. Слева в нем будет логотип, в середине - строка поиска, справа элементы входа в личный кабинет, корзина, избранное. Сверху основного хедера можно будет добавить дополнительный сабхедер, с ссылками Снизу основного хедера будет подхедер с меню-каталогом. У нас изначально будет всего несколько пунктов там, но в дальнейшем это можно превратить в мегаменю.

В мобильной версии хедер сильно облегчен.

При показе страницы категории товаров, слева показывается сайдбар с различными фильтрами. В мобильной версии он переносится наверх. Когда показывается страница товара, то меню слева обычно нет.

Main panel

В центральной панели показывается список товаров выбранной категории либо информация о товаре.

Футер - самый простой копонент, в нем функционала практически нет, так что ничем он не примечателен.

Мобильная версия

В мобильной версии внизу появляется отдельное зафиксированное меню с ссылками:

  • Главная
  • Каталог
  • Корзина
  • Избранное
  • Логин/личный кабинет

Сразу отметим, что сайдбар, выезжающий слева в мобильной версии (каталог), это не то же самое, что сайдбар на десктопе (фильтры).

Слабая связанность

Подобное разделение на подсистемы позволяет сохранить между ними слабую связанность. Основная логика подсистемы заключена в ней самой, и с окружающим миром она взаимодействует пока только через router.

В дальнейшем, если понадобиться из одной подсистемы вызвать команду в другой, это, скорей всего, будет делаться через Composable с глобальным стейтом.

Адаптивность

Сайдбар с фильтрами, который то слева, то сверху, легко реализовать через CSS Flexbox. То же самое с различным хедером для основной и мобильной версий. Вообще, всё что можно сделать с помощью CSS, лучше делать с помощью CSS.

Вывод

Таким образом, у нас уже намечены пять компонент, которые мы можем расположить на странице, и она будет адаптивная.

На данный момент все страницы можно технически реализовать через один Layout - MainLayout. Если потом понадобится другое расположение (для страниц заказов, личного кабинета и прочего), мы добавим.

',26),n=[l];function h(s,d,p,c,u,m){return e(),t("div",null,n)}const b=a(i,[["render",h]]);export{f as __pageData,b as default}; +import{_ as a,o as e,c as t,a4 as r,aq as o}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"UI макет","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/ui-layout.md","filePath":"ru/arty-crafty/analysis/ui-layout.md","lastUpdated":1726505115000}'),i={name:"ru/arty-crafty/analysis/ui-layout.md"},l=r('

UI макет

Подберем подходящий макет (layout) для нашего сайта. Для этого можно еще раз взглянуть на уже найденные онлайн магазины в интернете.

Основные компоненты страницы

У магазинов обычно лэйаут состоит из четырех частей - header, footer, sidebar слева и центральная панель

image

Сверху будет хедер. Слева в нем будет логотип, в середине - строка поиска, справа элементы входа в личный кабинет, корзина, избранное. Сверху основного хедера можно будет добавить дополнительный сабхедер, с ссылками Снизу основного хедера будет подхедер с меню-каталогом. У нас изначально будет всего несколько пунктов там, но в дальнейшем это можно превратить в мегаменю.

В мобильной версии хедер сильно облегчен.

При показе страницы категории товаров, слева показывается сайдбар с различными фильтрами. В мобильной версии он переносится наверх. Когда показывается страница товара, то меню слева обычно нет.

Main panel

В центральной панели показывается список товаров выбранной категории либо информация о товаре.

Футер - самый простой копонент, в нем функционала практически нет, так что ничем он не примечателен.

Мобильная версия

В мобильной версии внизу появляется отдельное зафиксированное меню с ссылками:

  • Главная
  • Каталог
  • Корзина
  • Избранное
  • Логин/личный кабинет

Сразу отметим, что сайдбар, выезжающий слева в мобильной версии (каталог), это не то же самое, что сайдбар на десктопе (фильтры).

Слабая связанность

Подобное разделение на подсистемы позволяет сохранить между ними слабую связанность. Основная логика подсистемы заключена в ней самой, и с окружающим миром она взаимодействует пока только через router.

В дальнейшем, если понадобиться из одной подсистемы вызвать команду в другой, это, скорей всего, будет делаться через Composable с глобальным стейтом.

Адаптивность

Сайдбар с фильтрами, который то слева, то сверху, легко реализовать через CSS Flexbox. То же самое с различным хедером для основной и мобильной версий. Вообще, всё что можно сделать с помощью CSS, лучше делать с помощью CSS.

Вывод

Таким образом, у нас уже намечены пять компонент, которые мы можем расположить на странице, и она будет адаптивная.

На данный момент все страницы можно технически реализовать через один Layout - MainLayout. Если потом понадобится другое расположение (для страниц заказов, личного кабинета и прочего), мы добавим.

',26),n=[l];function h(s,d,p,c,u,m){return e(),t("div",null,n)}const b=a(i,[["render",h]]);export{f as __pageData,b as default}; diff --git a/assets/ru_arty-crafty_analysis_ui-layout.md.D2HxkDYi.lean.js b/assets/ru_arty-crafty_analysis_ui-layout.md.DqpAXdQf.lean.js similarity index 91% rename from assets/ru_arty-crafty_analysis_ui-layout.md.D2HxkDYi.lean.js rename to assets/ru_arty-crafty_analysis_ui-layout.md.DqpAXdQf.lean.js index 016104667..2e3d06925 100644 --- a/assets/ru_arty-crafty_analysis_ui-layout.md.D2HxkDYi.lean.js +++ b/assets/ru_arty-crafty_analysis_ui-layout.md.DqpAXdQf.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as r,aq as o}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"UI макет","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/ui-layout.md","filePath":"ru/arty-crafty/analysis/ui-layout.md","lastUpdated":1726474804000}'),i={name:"ru/arty-crafty/analysis/ui-layout.md"},l=r("",26),n=[l];function h(s,d,p,c,u,m){return e(),t("div",null,n)}const b=a(i,[["render",h]]);export{f as __pageData,b as default}; +import{_ as a,o as e,c as t,a4 as r,aq as o}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"UI макет","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/analysis/ui-layout.md","filePath":"ru/arty-crafty/analysis/ui-layout.md","lastUpdated":1726505115000}'),i={name:"ru/arty-crafty/analysis/ui-layout.md"},l=r("",26),n=[l];function h(s,d,p,c,u,m){return e(),t("div",null,n)}const b=a(i,[["render",h]]);export{f as __pageData,b as default}; diff --git a/assets/ru_arty-crafty_backend_baas-choosing.md.Bc2_TihF.js b/assets/ru_arty-crafty_backend_baas-choosing.md.CDt27be6.js similarity index 99% rename from assets/ru_arty-crafty_backend_baas-choosing.md.Bc2_TihF.js rename to assets/ru_arty-crafty_backend_baas-choosing.md.CDt27be6.js index dceebf437..1dd2ba0c9 100644 --- a/assets/ru_arty-crafty_backend_baas-choosing.md.Bc2_TihF.js +++ b/assets/ru_arty-crafty_backend_baas-choosing.md.CDt27be6.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const s="/assets/baas-adapters.CVuECzFb.webp",S=JSON.parse('{"title":"Выбор BaaS или CMS","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/backend/baas-choosing.md","filePath":"ru/arty-crafty/backend/baas-choosing.md","lastUpdated":1726474804000}'),r={name:"ru/arty-crafty/backend/baas-choosing.md"},c=o('

Выбор BaaS или CMS

JSON файлы товаров

Дальнейшая работа с json файлами продуктов и категорий имеет мало смысла - их придется делать несколько, небольшое изменение схемы потребует изменение всех файлов вручную и т.п.

Проще перейти уже к нормальному бэкенду, с динамичными данными.

Выбор CMS

После довольно долгого исследования рынка для реализации витрины и, частично, магазина, выбор пал на Supabase.

Основными критериями при выборе на этом этапе были:

  • Простота
  • Open source
  • Бесплатность при использовании из облачных сервисов (это нужно не только нам, но и тем, кто будет использовать наш проект)
  • RDBMS (SQL) в качестве базы данных (почему не подошел Firebase)
  • Возможность потом несложно переехать на другой сервис/БД/свой сервер.

Большинство CMS продуктов предлагает платные low-code решения, завязанные на них и оперирующие не с данными, как нам надо, а с более высокоуровневыми конструкциями для построения сайта.

Среди Baas (Backend as a Service) решений были рассмотрены Firebase, Appwrite, Supabase, Amplify.

Модель данных обычного магазина очень хорошо ложится именно на реляционную модель данных, уже давно хорошо зарекомендовавшую себя, в отличие от NoSQL.

Сервисы Supabase

Supabase предлагает непосредственно Postgres базу данных (можно подсоединяться прямо к ней), API сервис для доступа к базе данных посредством REST запросов, сервис для парольной и OAuth аутентификаций, Edge Functions (серверные функции), на которых можно реализовать логику бэкенда. Лимиты бесплатного плана достаточно большие.

В дальнейшем возможно разворачивание Postgres на своем сервере и использование Supabase кода через Docker, либо своего API слоя. При желании можно будет даже поменять базу на MySQL. Всё это очень важная гибкость выстраиваемой архитектуры. Если мы чего-то не учтем сейчас, или ошибемся, то потом можно будет внести изменения с некритичными затратами.

Адаптеры

Мы помним, что одним из факторов успеха при создании сложной системы является её разбиение на слабосвязные более простые подсистемы. Конкретно тут мы имеем подсистемы "База данных", "Бэкенд (API сервис Supabase)", наш фронтенд.

Компоненты фронтенда должны обмениваться данными с API Supabase. Если мы в каждом компоненте будем прописывать обращение к API через Fetch или Axios, то при замене Supabase на другой бэкенд, или на наш свой, по всему коду фронтенда надо будет делать изменения, что очень затратно. Для нивелирования этого вызовы к API выносятся в отдельный модуль - api, и теперь в компонентах будет только вызов api.products(), который при смене бэкенда менять не надо, нужно будет поменять только его реализацию в api.

В этом случае, мы применяем шаблон проектирования "Адаптер". При работе, например, с Firebase нам нужно будет написать другой адаптер, при работе со своим бэкендом - еще один. Каждый из них будет преобразовывать запрос к определенному эндпойнту за списком товаров в массив для возвращения в функции api.products().

Когда делают системы широкого пользования, то предусматривают подключение к различным сервисам. Например, тот же Vue Storefront имеет адаптеры для интеграции с API бэкендов Magento, PrestaShop, Spree и других ecommerce решений.

image

Но у нас пока только Supabase, концентрируемся на нём.

',21),p=[c];function i(n,d,l,u,h,b){return e(),t("div",null,p)}const D=a(r,[["render",i]]);export{S as __pageData,D as default}; +import{_ as a,o as e,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const s="/assets/baas-adapters.CVuECzFb.webp",S=JSON.parse('{"title":"Выбор BaaS или CMS","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/backend/baas-choosing.md","filePath":"ru/arty-crafty/backend/baas-choosing.md","lastUpdated":1726505115000}'),r={name:"ru/arty-crafty/backend/baas-choosing.md"},c=o('

Выбор BaaS или CMS

JSON файлы товаров

Дальнейшая работа с json файлами продуктов и категорий имеет мало смысла - их придется делать несколько, небольшое изменение схемы потребует изменение всех файлов вручную и т.п.

Проще перейти уже к нормальному бэкенду, с динамичными данными.

Выбор CMS

После довольно долгого исследования рынка для реализации витрины и, частично, магазина, выбор пал на Supabase.

Основными критериями при выборе на этом этапе были:

  • Простота
  • Open source
  • Бесплатность при использовании из облачных сервисов (это нужно не только нам, но и тем, кто будет использовать наш проект)
  • RDBMS (SQL) в качестве базы данных (почему не подошел Firebase)
  • Возможность потом несложно переехать на другой сервис/БД/свой сервер.

Большинство CMS продуктов предлагает платные low-code решения, завязанные на них и оперирующие не с данными, как нам надо, а с более высокоуровневыми конструкциями для построения сайта.

Среди Baas (Backend as a Service) решений были рассмотрены Firebase, Appwrite, Supabase, Amplify.

Модель данных обычного магазина очень хорошо ложится именно на реляционную модель данных, уже давно хорошо зарекомендовавшую себя, в отличие от NoSQL.

Сервисы Supabase

Supabase предлагает непосредственно Postgres базу данных (можно подсоединяться прямо к ней), API сервис для доступа к базе данных посредством REST запросов, сервис для парольной и OAuth аутентификаций, Edge Functions (серверные функции), на которых можно реализовать логику бэкенда. Лимиты бесплатного плана достаточно большие.

В дальнейшем возможно разворачивание Postgres на своем сервере и использование Supabase кода через Docker, либо своего API слоя. При желании можно будет даже поменять базу на MySQL. Всё это очень важная гибкость выстраиваемой архитектуры. Если мы чего-то не учтем сейчас, или ошибемся, то потом можно будет внести изменения с некритичными затратами.

Адаптеры

Мы помним, что одним из факторов успеха при создании сложной системы является её разбиение на слабосвязные более простые подсистемы. Конкретно тут мы имеем подсистемы "База данных", "Бэкенд (API сервис Supabase)", наш фронтенд.

Компоненты фронтенда должны обмениваться данными с API Supabase. Если мы в каждом компоненте будем прописывать обращение к API через Fetch или Axios, то при замене Supabase на другой бэкенд, или на наш свой, по всему коду фронтенда надо будет делать изменения, что очень затратно. Для нивелирования этого вызовы к API выносятся в отдельный модуль - api, и теперь в компонентах будет только вызов api.products(), который при смене бэкенда менять не надо, нужно будет поменять только его реализацию в api.

В этом случае, мы применяем шаблон проектирования "Адаптер". При работе, например, с Firebase нам нужно будет написать другой адаптер, при работе со своим бэкендом - еще один. Каждый из них будет преобразовывать запрос к определенному эндпойнту за списком товаров в массив для возвращения в функции api.products().

Когда делают системы широкого пользования, то предусматривают подключение к различным сервисам. Например, тот же Vue Storefront имеет адаптеры для интеграции с API бэкендов Magento, PrestaShop, Spree и других ecommerce решений.

image

Но у нас пока только Supabase, концентрируемся на нём.

',21),p=[c];function i(n,d,l,u,h,b){return e(),t("div",null,p)}const D=a(r,[["render",i]]);export{S as __pageData,D as default}; diff --git a/assets/ru_arty-crafty_backend_baas-choosing.md.Bc2_TihF.lean.js b/assets/ru_arty-crafty_backend_baas-choosing.md.CDt27be6.lean.js similarity index 92% rename from assets/ru_arty-crafty_backend_baas-choosing.md.Bc2_TihF.lean.js rename to assets/ru_arty-crafty_backend_baas-choosing.md.CDt27be6.lean.js index 14bbe811e..6650752d1 100644 --- a/assets/ru_arty-crafty_backend_baas-choosing.md.Bc2_TihF.lean.js +++ b/assets/ru_arty-crafty_backend_baas-choosing.md.CDt27be6.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const s="/assets/baas-adapters.CVuECzFb.webp",S=JSON.parse('{"title":"Выбор BaaS или CMS","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/backend/baas-choosing.md","filePath":"ru/arty-crafty/backend/baas-choosing.md","lastUpdated":1726474804000}'),r={name:"ru/arty-crafty/backend/baas-choosing.md"},c=o("",21),p=[c];function i(n,d,l,u,h,b){return e(),t("div",null,p)}const D=a(r,[["render",i]]);export{S as __pageData,D as default}; +import{_ as a,o as e,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const s="/assets/baas-adapters.CVuECzFb.webp",S=JSON.parse('{"title":"Выбор BaaS или CMS","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/backend/baas-choosing.md","filePath":"ru/arty-crafty/backend/baas-choosing.md","lastUpdated":1726505115000}'),r={name:"ru/arty-crafty/backend/baas-choosing.md"},c=o("",21),p=[c];function i(n,d,l,u,h,b){return e(),t("div",null,p)}const D=a(r,[["render",i]]);export{S as __pageData,D as default}; diff --git a/assets/ru_arty-crafty_backend_db-data-model.md.C-d48SDl.js b/assets/ru_arty-crafty_backend_db-data-model.md.FkSYia5s.js similarity index 99% rename from assets/ru_arty-crafty_backend_db-data-model.md.C-d48SDl.js rename to assets/ru_arty-crafty_backend_db-data-model.md.FkSYia5s.js index 3808ee55a..58fc43976 100644 --- a/assets/ru_arty-crafty_backend_db-data-model.md.C-d48SDl.js +++ b/assets/ru_arty-crafty_backend_db-data-model.md.FkSYia5s.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const s="/assets/db-schema-1.AjgYUqH2.webp",c="/assets/db-categories-data.DOkuO0-m.webp",d="/assets/db-products-data.C3C6uKkU.webp",r="data:image/webp;base64,UklGRmwHAABXRUJQVlA4IGAHAACwNQCdASp1AbwAPtFosVGoJiojolc44UAaCWlu8n1eEWp5F0FNti5o9DH+w6ffoY55zz0elc9T3owfVo/5mTSMZ59QGOgbGbctcgE8+4sUAfjP9E71v939CtJBjg/4Xsuf33j9+vPYKDeJSDHn7O8VHqWwx4ivVtufzJcqmuCs2YMK2Tug6ktu/YJYt1QZ2eggHRrcomRWtsJFAOKqoRB3YjOrsWeElb6I9bQOGQHJ0+FRHGG4LjxaPSffvcPPR0lg6s4l+YLJTEEh/mY7EYvK3+fOQbfDOUVX3D+mFSrNit5uTctcRffg7ABDqgkj5AWtLp5V+6KfYYPaRKMcqEWWwpA1VcedoES9bwy0lN8fYDU9sJkfx5zyHdjkpzeWSbkO7GP7AWN6WG2Dywl/doI/Sw1MWudwraKlV1WRHkO9hz7Y+oiHdjKtBdj3PLF390TT9LDbB5VCYIpfCC7ObngjyHevVinlfEUWdMEeRdKKz0iwWzyxd/dm0/Sw2weWLCGjHDi3xHkParmWVLkOmCP0LNpZqht9r7OG2Dyxc9jKuZ+Sw2weWLtahuX0sNr/7S7+7QR98sAA/v6dLf+r2fogTVtjsZ7chExWxUeC+uvAwsY0j/9+ziMRC4pXy2ccZ++iNXGYvarlYxQSFm21ed+0l1lKcWrquu3yatuGRg0/T79B/KltmtU2DQzQEQdUBF5dy8XHQqUGX7hDNEdTOzW2qOii9adnH6nRfSbltJfvLi3ztxfZH4eZMPp7P+RyFMT0kFCcKsg+Huev69bGkN6zEkRb55y4gKXALZJ9SZgp6oQj61Iomnv2jZ/jOF3BMW6+/BxjyKDstFkQwUeo/CKFKu82bKxlhP96OwXarpWQ1s5UqWfKooaVpKEVX6Eyw8j8x9Nkjb7dtDq5NJudS0qxMcYaAduQ/m1uaU2MvoP0X9avZWbPvEoCP/45S8HFnZROjU9S7cSzKbojkajQaOMeQPF9AO9+NNtTqgJwBw9pPcthi4LWT9ZHafGeT3hlDoCTfH7FPUB43tYwPG0FwX1glJ8k1pG1dsSDnM49DVQXtiHp1fJaYbiv2y94vns8Zo6CXCGWu7uzP072U5Cik/xOUKBxNKyMHbUwkKVcYiTz2ah8Xh0ts8f+Wf8POXl67ZeDSZlvz6U0+WXRE4jvvLPJLpakNwnFOkTeHyFVAMY3//b4fK6loLKXefXxPy0+sBtzTF+/t8Sy3sBSUjkR/4sIUYuZbzNOu26hmUfPxBxZssVNW81/cm68ppsARj9GNKdsg+BlStgGzpn7/jPTaxtn6+hi+FH2Pxin5jKneWLb1fT+fH9tqAbW03UhWY4smQbi5Kqx6+oG589IJZmbO/3s9T+/vn6OEPkQ7e41OjT2Ab86brpKDX344aUy6yLvvT1DoK2YVJQQ8X2rwO4X58jXBfV95PUDtDDlnZ0svL40trqT0oFIuRIk9Fw5crqesQCif5xzS7TpTa+c2J0doLou2OT4jdbqJeTpEtButzSae58b+34fEq/LyFdD3ZRvxSIA7SfiACmSC76eFLoyrW0ENLNXi7i0CU89AMoKtSVf2vYRYt9Qx2oxC84ZMxdJo4c/sndM8XLQ1Z/0EPlpYirgBW4rXXcDg+8HRiO0UqvPAGqDoGDE7Hn8Wr0Acspx7sqddf9EBcTFKyU8NFIgmmH/ks74RSndQFDoEjKF788vURmrGjB7N4SYy9ECN0dzC0gL55Icy3EUtjCrZa0MeChXeV/Nwt3UPZe5npFqTJFk2SUb5IERMh5pEnNGpI/84xYYenY4WqusUMU7RzCNtry/iMOYTFxe0yeyM+dTeKEchdXO0gn7khd4XdpK/SGtQabK1p6mF6kdqzC803RQDVsWbfZukyXecHfEZ+ljw/235imjPDmsOVHSvNYURPMaDNKNrLZqDyQe1I7kXJO0JkKqNyQ3TsrDgcgKCAkmbYUI7ChnNkitCETfUkQToOSwRB+VHiknsr28cObCDw9YU+NAqFeEA5XsYE6lGCWN9/IyXxPfgALH3SZpo20y6Y52KU5mfsfcpa88rxTtUfeDzshNDsCvkAHBaEf08AhhNHl8bOwDzt1Kxt5Q1nnZWJwOGqQTzt8L/NzxDnIFUg/jDFEVVxl31N84I2WqhuttHBs7ARe33jIOxe87OI+/MQxyi66p9WJHXvQPz3SJIeKp1xHP8gGHKExhTGvcAMLYY2auXNayjdPngY8FbFbkBeUvWHDcVz8O8YTtZrN5GN49MSo8QxcUhyYT6RN2xJ8G94+MMVdv4Gc7LtaxlGHlEw64zMxna6hnibc+sfEJB7lNe0+VYrgdVe8ECiv7fNLHC56HPoOgAS7ILczvYWG59FbcvpfmBrZKv4X1Zd5F+08QHRhsTJXSssvt0CE+9gpfATb494f+uvAF1XAC+cnro2T0iFVQ1Ln3lJzAaBlLiCL0FDjMeVSiROOwOXzRkFpAWIXtIGKRAwwzgsZ3L32GIHnzPtiyJPqw5FB6DJ1DjoYAAAAA",A=JSON.parse('{"title":"Модель данных в базе данных","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/backend/db-data-model.md","filePath":"ru/arty-crafty/backend/db-data-model.md","lastUpdated":1726474804000}'),i={name:"ru/arty-crafty/backend/db-data-model.md"},n=o('

Модель данных в базе данных

Сущности

На данный момент у нас есть сущности products и categories. Отношение между ними - many-to-many. Один продукт может находиться в нескольких категориях (с учетом того, что конкретный магазин маркетплейса тоже можно рассматривать как категорию).

В реляционных базах данных такие отношения делаются отдельной таблицей, которая хранит связи между товарами и категориями.

image

Данные

Исторически название полей в реляционных базах данных должно быть snake_case, но современные БД хорошо различают регистр, и поэтому удобно именовать поля так же, как они будут в JavaScript на фронтенде - тогда можно избежать преобразования имен туда-обратно, что зачастую может вылиться в очень немаленький бойлерплейт на бэкенде.

Categories table

image

Products table

image

Category-product join table

image

В классических реляционных базах данных все данные находились в таблицах, большинство полей (колонок таблиц) было либо числом, либо строкой, либо timestamp. Соответственно, для firstName пользователя было своё поле, для lastName - своё. В итоге у Magento, например, свыше 200 таблиц в минимальной версии, и у некоторых таблиц могут быть десятки полей.

JSON поля сильно упрощают работу с данными и таблицами. В нашем случае у products есть два json поля - desc и data. В первом будут храниться данные, которые надо передать на фронтенд при запросе категории товаров (краткая информация по товарам), в data - уже полное описание товара для показа на странице товара, включая, например, отзывы пользователей. data будет намного больше по объему, чем desc. Это позволит делать запросы на бэкенд эффективно.

Поиск по json полям

Одно из преимуществ реляционных баз данных - индексация полей и быстрый поиск по ним даже с десятками миллионов записей в таблице.

У нас есть форма поиска на сайте, мы, естественно, захотим искать по полному описанию товара, который находится в поле data таблицы products. Это тоже возможно, потому что MySQL, например, по каждому параметру внутри json поля, по которому должен быть поиск, создает дополнительное виртуальное поле в этой таблице, и индексирует его для оптимизации поиска или join-ов. Postgres наверняка делает примерно то же самое. Таким образом, хранение данных в json полях не ограничивает функционал реляционных баз данных.

',18),l=[n];function p(b,m,f,g,h,u){return e(),t("div",null,l)}const P=a(i,[["render",p]]);export{A as __pageData,P as default}; +import{_ as a,o as e,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const s="/assets/db-schema-1.AjgYUqH2.webp",c="/assets/db-categories-data.DOkuO0-m.webp",d="/assets/db-products-data.C3C6uKkU.webp",r="data:image/webp;base64,UklGRmwHAABXRUJQVlA4IGAHAACwNQCdASp1AbwAPtFosVGoJiojolc44UAaCWlu8n1eEWp5F0FNti5o9DH+w6ffoY55zz0elc9T3owfVo/5mTSMZ59QGOgbGbctcgE8+4sUAfjP9E71v939CtJBjg/4Xsuf33j9+vPYKDeJSDHn7O8VHqWwx4ivVtufzJcqmuCs2YMK2Tug6ktu/YJYt1QZ2eggHRrcomRWtsJFAOKqoRB3YjOrsWeElb6I9bQOGQHJ0+FRHGG4LjxaPSffvcPPR0lg6s4l+YLJTEEh/mY7EYvK3+fOQbfDOUVX3D+mFSrNit5uTctcRffg7ABDqgkj5AWtLp5V+6KfYYPaRKMcqEWWwpA1VcedoES9bwy0lN8fYDU9sJkfx5zyHdjkpzeWSbkO7GP7AWN6WG2Dywl/doI/Sw1MWudwraKlV1WRHkO9hz7Y+oiHdjKtBdj3PLF390TT9LDbB5VCYIpfCC7ObngjyHevVinlfEUWdMEeRdKKz0iwWzyxd/dm0/Sw2weWLCGjHDi3xHkParmWVLkOmCP0LNpZqht9r7OG2Dyxc9jKuZ+Sw2weWLtahuX0sNr/7S7+7QR98sAA/v6dLf+r2fogTVtjsZ7chExWxUeC+uvAwsY0j/9+ziMRC4pXy2ccZ++iNXGYvarlYxQSFm21ed+0l1lKcWrquu3yatuGRg0/T79B/KltmtU2DQzQEQdUBF5dy8XHQqUGX7hDNEdTOzW2qOii9adnH6nRfSbltJfvLi3ztxfZH4eZMPp7P+RyFMT0kFCcKsg+Huev69bGkN6zEkRb55y4gKXALZJ9SZgp6oQj61Iomnv2jZ/jOF3BMW6+/BxjyKDstFkQwUeo/CKFKu82bKxlhP96OwXarpWQ1s5UqWfKooaVpKEVX6Eyw8j8x9Nkjb7dtDq5NJudS0qxMcYaAduQ/m1uaU2MvoP0X9avZWbPvEoCP/45S8HFnZROjU9S7cSzKbojkajQaOMeQPF9AO9+NNtTqgJwBw9pPcthi4LWT9ZHafGeT3hlDoCTfH7FPUB43tYwPG0FwX1glJ8k1pG1dsSDnM49DVQXtiHp1fJaYbiv2y94vns8Zo6CXCGWu7uzP072U5Cik/xOUKBxNKyMHbUwkKVcYiTz2ah8Xh0ts8f+Wf8POXl67ZeDSZlvz6U0+WXRE4jvvLPJLpakNwnFOkTeHyFVAMY3//b4fK6loLKXefXxPy0+sBtzTF+/t8Sy3sBSUjkR/4sIUYuZbzNOu26hmUfPxBxZssVNW81/cm68ppsARj9GNKdsg+BlStgGzpn7/jPTaxtn6+hi+FH2Pxin5jKneWLb1fT+fH9tqAbW03UhWY4smQbi5Kqx6+oG589IJZmbO/3s9T+/vn6OEPkQ7e41OjT2Ab86brpKDX344aUy6yLvvT1DoK2YVJQQ8X2rwO4X58jXBfV95PUDtDDlnZ0svL40trqT0oFIuRIk9Fw5crqesQCif5xzS7TpTa+c2J0doLou2OT4jdbqJeTpEtButzSae58b+34fEq/LyFdD3ZRvxSIA7SfiACmSC76eFLoyrW0ENLNXi7i0CU89AMoKtSVf2vYRYt9Qx2oxC84ZMxdJo4c/sndM8XLQ1Z/0EPlpYirgBW4rXXcDg+8HRiO0UqvPAGqDoGDE7Hn8Wr0Acspx7sqddf9EBcTFKyU8NFIgmmH/ks74RSndQFDoEjKF788vURmrGjB7N4SYy9ECN0dzC0gL55Icy3EUtjCrZa0MeChXeV/Nwt3UPZe5npFqTJFk2SUb5IERMh5pEnNGpI/84xYYenY4WqusUMU7RzCNtry/iMOYTFxe0yeyM+dTeKEchdXO0gn7khd4XdpK/SGtQabK1p6mF6kdqzC803RQDVsWbfZukyXecHfEZ+ljw/235imjPDmsOVHSvNYURPMaDNKNrLZqDyQe1I7kXJO0JkKqNyQ3TsrDgcgKCAkmbYUI7ChnNkitCETfUkQToOSwRB+VHiknsr28cObCDw9YU+NAqFeEA5XsYE6lGCWN9/IyXxPfgALH3SZpo20y6Y52KU5mfsfcpa88rxTtUfeDzshNDsCvkAHBaEf08AhhNHl8bOwDzt1Kxt5Q1nnZWJwOGqQTzt8L/NzxDnIFUg/jDFEVVxl31N84I2WqhuttHBs7ARe33jIOxe87OI+/MQxyi66p9WJHXvQPz3SJIeKp1xHP8gGHKExhTGvcAMLYY2auXNayjdPngY8FbFbkBeUvWHDcVz8O8YTtZrN5GN49MSo8QxcUhyYT6RN2xJ8G94+MMVdv4Gc7LtaxlGHlEw64zMxna6hnibc+sfEJB7lNe0+VYrgdVe8ECiv7fNLHC56HPoOgAS7ILczvYWG59FbcvpfmBrZKv4X1Zd5F+08QHRhsTJXSssvt0CE+9gpfATb494f+uvAF1XAC+cnro2T0iFVQ1Ln3lJzAaBlLiCL0FDjMeVSiROOwOXzRkFpAWIXtIGKRAwwzgsZ3L32GIHnzPtiyJPqw5FB6DJ1DjoYAAAAA",A=JSON.parse('{"title":"Модель данных в базе данных","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/backend/db-data-model.md","filePath":"ru/arty-crafty/backend/db-data-model.md","lastUpdated":1726505115000}'),i={name:"ru/arty-crafty/backend/db-data-model.md"},n=o('

Модель данных в базе данных

Сущности

На данный момент у нас есть сущности products и categories. Отношение между ними - many-to-many. Один продукт может находиться в нескольких категориях (с учетом того, что конкретный магазин маркетплейса тоже можно рассматривать как категорию).

В реляционных базах данных такие отношения делаются отдельной таблицей, которая хранит связи между товарами и категориями.

image

Данные

Исторически название полей в реляционных базах данных должно быть snake_case, но современные БД хорошо различают регистр, и поэтому удобно именовать поля так же, как они будут в JavaScript на фронтенде - тогда можно избежать преобразования имен туда-обратно, что зачастую может вылиться в очень немаленький бойлерплейт на бэкенде.

Categories table

image

Products table

image

Category-product join table

image

В классических реляционных базах данных все данные находились в таблицах, большинство полей (колонок таблиц) было либо числом, либо строкой, либо timestamp. Соответственно, для firstName пользователя было своё поле, для lastName - своё. В итоге у Magento, например, свыше 200 таблиц в минимальной версии, и у некоторых таблиц могут быть десятки полей.

JSON поля сильно упрощают работу с данными и таблицами. В нашем случае у products есть два json поля - desc и data. В первом будут храниться данные, которые надо передать на фронтенд при запросе категории товаров (краткая информация по товарам), в data - уже полное описание товара для показа на странице товара, включая, например, отзывы пользователей. data будет намного больше по объему, чем desc. Это позволит делать запросы на бэкенд эффективно.

Поиск по json полям

Одно из преимуществ реляционных баз данных - индексация полей и быстрый поиск по ним даже с десятками миллионов записей в таблице.

У нас есть форма поиска на сайте, мы, естественно, захотим искать по полному описанию товара, который находится в поле data таблицы products. Это тоже возможно, потому что MySQL, например, по каждому параметру внутри json поля, по которому должен быть поиск, создает дополнительное виртуальное поле в этой таблице, и индексирует его для оптимизации поиска или join-ов. Postgres наверняка делает примерно то же самое. Таким образом, хранение данных в json полях не ограничивает функционал реляционных баз данных.

',18),l=[n];function p(b,m,f,g,h,u){return e(),t("div",null,l)}const P=a(i,[["render",p]]);export{A as __pageData,P as default}; diff --git a/assets/ru_arty-crafty_backend_db-data-model.md.C-d48SDl.lean.js b/assets/ru_arty-crafty_backend_db-data-model.md.FkSYia5s.lean.js similarity index 98% rename from assets/ru_arty-crafty_backend_db-data-model.md.C-d48SDl.lean.js rename to assets/ru_arty-crafty_backend_db-data-model.md.FkSYia5s.lean.js index 8ef5e0418..a3c0d6c31 100644 --- a/assets/ru_arty-crafty_backend_db-data-model.md.C-d48SDl.lean.js +++ b/assets/ru_arty-crafty_backend_db-data-model.md.FkSYia5s.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const s="/assets/db-schema-1.AjgYUqH2.webp",c="/assets/db-categories-data.DOkuO0-m.webp",d="/assets/db-products-data.C3C6uKkU.webp",r="data:image/webp;base64,UklGRmwHAABXRUJQVlA4IGAHAACwNQCdASp1AbwAPtFosVGoJiojolc44UAaCWlu8n1eEWp5F0FNti5o9DH+w6ffoY55zz0elc9T3owfVo/5mTSMZ59QGOgbGbctcgE8+4sUAfjP9E71v939CtJBjg/4Xsuf33j9+vPYKDeJSDHn7O8VHqWwx4ivVtufzJcqmuCs2YMK2Tug6ktu/YJYt1QZ2eggHRrcomRWtsJFAOKqoRB3YjOrsWeElb6I9bQOGQHJ0+FRHGG4LjxaPSffvcPPR0lg6s4l+YLJTEEh/mY7EYvK3+fOQbfDOUVX3D+mFSrNit5uTctcRffg7ABDqgkj5AWtLp5V+6KfYYPaRKMcqEWWwpA1VcedoES9bwy0lN8fYDU9sJkfx5zyHdjkpzeWSbkO7GP7AWN6WG2Dywl/doI/Sw1MWudwraKlV1WRHkO9hz7Y+oiHdjKtBdj3PLF390TT9LDbB5VCYIpfCC7ObngjyHevVinlfEUWdMEeRdKKz0iwWzyxd/dm0/Sw2weWLCGjHDi3xHkParmWVLkOmCP0LNpZqht9r7OG2Dyxc9jKuZ+Sw2weWLtahuX0sNr/7S7+7QR98sAA/v6dLf+r2fogTVtjsZ7chExWxUeC+uvAwsY0j/9+ziMRC4pXy2ccZ++iNXGYvarlYxQSFm21ed+0l1lKcWrquu3yatuGRg0/T79B/KltmtU2DQzQEQdUBF5dy8XHQqUGX7hDNEdTOzW2qOii9adnH6nRfSbltJfvLi3ztxfZH4eZMPp7P+RyFMT0kFCcKsg+Huev69bGkN6zEkRb55y4gKXALZJ9SZgp6oQj61Iomnv2jZ/jOF3BMW6+/BxjyKDstFkQwUeo/CKFKu82bKxlhP96OwXarpWQ1s5UqWfKooaVpKEVX6Eyw8j8x9Nkjb7dtDq5NJudS0qxMcYaAduQ/m1uaU2MvoP0X9avZWbPvEoCP/45S8HFnZROjU9S7cSzKbojkajQaOMeQPF9AO9+NNtTqgJwBw9pPcthi4LWT9ZHafGeT3hlDoCTfH7FPUB43tYwPG0FwX1glJ8k1pG1dsSDnM49DVQXtiHp1fJaYbiv2y94vns8Zo6CXCGWu7uzP072U5Cik/xOUKBxNKyMHbUwkKVcYiTz2ah8Xh0ts8f+Wf8POXl67ZeDSZlvz6U0+WXRE4jvvLPJLpakNwnFOkTeHyFVAMY3//b4fK6loLKXefXxPy0+sBtzTF+/t8Sy3sBSUjkR/4sIUYuZbzNOu26hmUfPxBxZssVNW81/cm68ppsARj9GNKdsg+BlStgGzpn7/jPTaxtn6+hi+FH2Pxin5jKneWLb1fT+fH9tqAbW03UhWY4smQbi5Kqx6+oG589IJZmbO/3s9T+/vn6OEPkQ7e41OjT2Ab86brpKDX344aUy6yLvvT1DoK2YVJQQ8X2rwO4X58jXBfV95PUDtDDlnZ0svL40trqT0oFIuRIk9Fw5crqesQCif5xzS7TpTa+c2J0doLou2OT4jdbqJeTpEtButzSae58b+34fEq/LyFdD3ZRvxSIA7SfiACmSC76eFLoyrW0ENLNXi7i0CU89AMoKtSVf2vYRYt9Qx2oxC84ZMxdJo4c/sndM8XLQ1Z/0EPlpYirgBW4rXXcDg+8HRiO0UqvPAGqDoGDE7Hn8Wr0Acspx7sqddf9EBcTFKyU8NFIgmmH/ks74RSndQFDoEjKF788vURmrGjB7N4SYy9ECN0dzC0gL55Icy3EUtjCrZa0MeChXeV/Nwt3UPZe5npFqTJFk2SUb5IERMh5pEnNGpI/84xYYenY4WqusUMU7RzCNtry/iMOYTFxe0yeyM+dTeKEchdXO0gn7khd4XdpK/SGtQabK1p6mF6kdqzC803RQDVsWbfZukyXecHfEZ+ljw/235imjPDmsOVHSvNYURPMaDNKNrLZqDyQe1I7kXJO0JkKqNyQ3TsrDgcgKCAkmbYUI7ChnNkitCETfUkQToOSwRB+VHiknsr28cObCDw9YU+NAqFeEA5XsYE6lGCWN9/IyXxPfgALH3SZpo20y6Y52KU5mfsfcpa88rxTtUfeDzshNDsCvkAHBaEf08AhhNHl8bOwDzt1Kxt5Q1nnZWJwOGqQTzt8L/NzxDnIFUg/jDFEVVxl31N84I2WqhuttHBs7ARe33jIOxe87OI+/MQxyi66p9WJHXvQPz3SJIeKp1xHP8gGHKExhTGvcAMLYY2auXNayjdPngY8FbFbkBeUvWHDcVz8O8YTtZrN5GN49MSo8QxcUhyYT6RN2xJ8G94+MMVdv4Gc7LtaxlGHlEw64zMxna6hnibc+sfEJB7lNe0+VYrgdVe8ECiv7fNLHC56HPoOgAS7ILczvYWG59FbcvpfmBrZKv4X1Zd5F+08QHRhsTJXSssvt0CE+9gpfATb494f+uvAF1XAC+cnro2T0iFVQ1Ln3lJzAaBlLiCL0FDjMeVSiROOwOXzRkFpAWIXtIGKRAwwzgsZ3L32GIHnzPtiyJPqw5FB6DJ1DjoYAAAAA",A=JSON.parse('{"title":"Модель данных в базе данных","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/backend/db-data-model.md","filePath":"ru/arty-crafty/backend/db-data-model.md","lastUpdated":1726474804000}'),i={name:"ru/arty-crafty/backend/db-data-model.md"},n=o("",18),l=[n];function p(b,m,f,g,h,u){return e(),t("div",null,l)}const P=a(i,[["render",p]]);export{A as __pageData,P as default}; +import{_ as a,o as e,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const s="/assets/db-schema-1.AjgYUqH2.webp",c="/assets/db-categories-data.DOkuO0-m.webp",d="/assets/db-products-data.C3C6uKkU.webp",r="data:image/webp;base64,UklGRmwHAABXRUJQVlA4IGAHAACwNQCdASp1AbwAPtFosVGoJiojolc44UAaCWlu8n1eEWp5F0FNti5o9DH+w6ffoY55zz0elc9T3owfVo/5mTSMZ59QGOgbGbctcgE8+4sUAfjP9E71v939CtJBjg/4Xsuf33j9+vPYKDeJSDHn7O8VHqWwx4ivVtufzJcqmuCs2YMK2Tug6ktu/YJYt1QZ2eggHRrcomRWtsJFAOKqoRB3YjOrsWeElb6I9bQOGQHJ0+FRHGG4LjxaPSffvcPPR0lg6s4l+YLJTEEh/mY7EYvK3+fOQbfDOUVX3D+mFSrNit5uTctcRffg7ABDqgkj5AWtLp5V+6KfYYPaRKMcqEWWwpA1VcedoES9bwy0lN8fYDU9sJkfx5zyHdjkpzeWSbkO7GP7AWN6WG2Dywl/doI/Sw1MWudwraKlV1WRHkO9hz7Y+oiHdjKtBdj3PLF390TT9LDbB5VCYIpfCC7ObngjyHevVinlfEUWdMEeRdKKz0iwWzyxd/dm0/Sw2weWLCGjHDi3xHkParmWVLkOmCP0LNpZqht9r7OG2Dyxc9jKuZ+Sw2weWLtahuX0sNr/7S7+7QR98sAA/v6dLf+r2fogTVtjsZ7chExWxUeC+uvAwsY0j/9+ziMRC4pXy2ccZ++iNXGYvarlYxQSFm21ed+0l1lKcWrquu3yatuGRg0/T79B/KltmtU2DQzQEQdUBF5dy8XHQqUGX7hDNEdTOzW2qOii9adnH6nRfSbltJfvLi3ztxfZH4eZMPp7P+RyFMT0kFCcKsg+Huev69bGkN6zEkRb55y4gKXALZJ9SZgp6oQj61Iomnv2jZ/jOF3BMW6+/BxjyKDstFkQwUeo/CKFKu82bKxlhP96OwXarpWQ1s5UqWfKooaVpKEVX6Eyw8j8x9Nkjb7dtDq5NJudS0qxMcYaAduQ/m1uaU2MvoP0X9avZWbPvEoCP/45S8HFnZROjU9S7cSzKbojkajQaOMeQPF9AO9+NNtTqgJwBw9pPcthi4LWT9ZHafGeT3hlDoCTfH7FPUB43tYwPG0FwX1glJ8k1pG1dsSDnM49DVQXtiHp1fJaYbiv2y94vns8Zo6CXCGWu7uzP072U5Cik/xOUKBxNKyMHbUwkKVcYiTz2ah8Xh0ts8f+Wf8POXl67ZeDSZlvz6U0+WXRE4jvvLPJLpakNwnFOkTeHyFVAMY3//b4fK6loLKXefXxPy0+sBtzTF+/t8Sy3sBSUjkR/4sIUYuZbzNOu26hmUfPxBxZssVNW81/cm68ppsARj9GNKdsg+BlStgGzpn7/jPTaxtn6+hi+FH2Pxin5jKneWLb1fT+fH9tqAbW03UhWY4smQbi5Kqx6+oG589IJZmbO/3s9T+/vn6OEPkQ7e41OjT2Ab86brpKDX344aUy6yLvvT1DoK2YVJQQ8X2rwO4X58jXBfV95PUDtDDlnZ0svL40trqT0oFIuRIk9Fw5crqesQCif5xzS7TpTa+c2J0doLou2OT4jdbqJeTpEtButzSae58b+34fEq/LyFdD3ZRvxSIA7SfiACmSC76eFLoyrW0ENLNXi7i0CU89AMoKtSVf2vYRYt9Qx2oxC84ZMxdJo4c/sndM8XLQ1Z/0EPlpYirgBW4rXXcDg+8HRiO0UqvPAGqDoGDE7Hn8Wr0Acspx7sqddf9EBcTFKyU8NFIgmmH/ks74RSndQFDoEjKF788vURmrGjB7N4SYy9ECN0dzC0gL55Icy3EUtjCrZa0MeChXeV/Nwt3UPZe5npFqTJFk2SUb5IERMh5pEnNGpI/84xYYenY4WqusUMU7RzCNtry/iMOYTFxe0yeyM+dTeKEchdXO0gn7khd4XdpK/SGtQabK1p6mF6kdqzC803RQDVsWbfZukyXecHfEZ+ljw/235imjPDmsOVHSvNYURPMaDNKNrLZqDyQe1I7kXJO0JkKqNyQ3TsrDgcgKCAkmbYUI7ChnNkitCETfUkQToOSwRB+VHiknsr28cObCDw9YU+NAqFeEA5XsYE6lGCWN9/IyXxPfgALH3SZpo20y6Y52KU5mfsfcpa88rxTtUfeDzshNDsCvkAHBaEf08AhhNHl8bOwDzt1Kxt5Q1nnZWJwOGqQTzt8L/NzxDnIFUg/jDFEVVxl31N84I2WqhuttHBs7ARe33jIOxe87OI+/MQxyi66p9WJHXvQPz3SJIeKp1xHP8gGHKExhTGvcAMLYY2auXNayjdPngY8FbFbkBeUvWHDcVz8O8YTtZrN5GN49MSo8QxcUhyYT6RN2xJ8G94+MMVdv4Gc7LtaxlGHlEw64zMxna6hnibc+sfEJB7lNe0+VYrgdVe8ECiv7fNLHC56HPoOgAS7ILczvYWG59FbcvpfmBrZKv4X1Zd5F+08QHRhsTJXSssvt0CE+9gpfATb494f+uvAF1XAC+cnro2T0iFVQ1Ln3lJzAaBlLiCL0FDjMeVSiROOwOXzRkFpAWIXtIGKRAwwzgsZ3L32GIHnzPtiyJPqw5FB6DJ1DjoYAAAAA",A=JSON.parse('{"title":"Модель данных в базе данных","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/backend/db-data-model.md","filePath":"ru/arty-crafty/backend/db-data-model.md","lastUpdated":1726505115000}'),i={name:"ru/arty-crafty/backend/db-data-model.md"},n=o("",18),l=[n];function p(b,m,f,g,h,u){return e(),t("div",null,l)}const P=a(i,[["render",p]]);export{A as __pageData,P as default}; diff --git a/assets/ru_arty-crafty_backend_hoppscotch.md.D4WuAYcj.js b/assets/ru_arty-crafty_backend_hoppscotch.md.CtrWv_Sj.js similarity index 98% rename from assets/ru_arty-crafty_backend_hoppscotch.md.D4WuAYcj.js rename to assets/ru_arty-crafty_backend_hoppscotch.md.CtrWv_Sj.js index 7369d89c6..eb1659c98 100644 --- a/assets/ru_arty-crafty_backend_hoppscotch.md.D4WuAYcj.js +++ b/assets/ru_arty-crafty_backend_hoppscotch.md.CtrWv_Sj.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as i,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const e="/assets/hoppscotch.C1usRc-g.webp",y=JSON.parse('{"title":"Hoppscotch","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/backend/hoppscotch.md","filePath":"ru/arty-crafty/backend/hoppscotch.md","lastUpdated":1726474804000}'),n={name:"ru/arty-crafty/backend/hoppscotch.md"},p=t('

Hoppscotch

Работа с API

Для работы и тестирования API обычно используется инструмент типа Postman, умеющий делать REST запросы и всё остальное, с ним связанное. Однако, как это часто бывает с монополистом, Postman сильно отяжелел за последние годы и работать с ним не очень комфортно.

Одной из удобных альтернатив является Hopscotch, в девичестве - Postwoman. Он работает из браузера или как PWA приложение, имеет весь необходимый нам функционал и написан на Vue.

image

Endpoints

Нам нужны три эндпойнта на текущем этапе:

  • список всех категорий
  • список товаров в определенной категории
  • подробная информация о товаре

Создадим соответствующие запросы в Hoppscotch:

sh
curl --request GET \\
+import{_ as s,o as a,c as i,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const e="/assets/hoppscotch.C1usRc-g.webp",y=JSON.parse('{"title":"Hoppscotch","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/backend/hoppscotch.md","filePath":"ru/arty-crafty/backend/hoppscotch.md","lastUpdated":1726505115000}'),n={name:"ru/arty-crafty/backend/hoppscotch.md"},p=t('

Hoppscotch

Работа с API

Для работы и тестирования API обычно используется инструмент типа Postman, умеющий делать REST запросы и всё остальное, с ним связанное. Однако, как это часто бывает с монополистом, Postman сильно отяжелел за последние годы и работать с ним не очень комфортно.

Одной из удобных альтернатив является Hopscotch, в девичестве - Postwoman. Он работает из браузера или как PWA приложение, имеет весь необходимый нам функционал и написан на Vue.

image

Endpoints

Нам нужны три эндпойнта на текущем этапе:

  • список всех категорий
  • список товаров в определенной категории
  • подробная информация о товаре

Создадим соответствующие запросы в Hoppscotch:

sh
curl --request GET \\
   --url 'https://client_id.supabase.co/rest/v1/categories?select=*' \\
   --header 'Authorization: Bearer $apiKey$' \\
   --header 'apikey: $apiKey$'
diff --git a/assets/ru_arty-crafty_backend_hoppscotch.md.D4WuAYcj.lean.js b/assets/ru_arty-crafty_backend_hoppscotch.md.CtrWv_Sj.lean.js
similarity index 91%
rename from assets/ru_arty-crafty_backend_hoppscotch.md.D4WuAYcj.lean.js
rename to assets/ru_arty-crafty_backend_hoppscotch.md.CtrWv_Sj.lean.js
index ad084c483..41447e3d5 100644
--- a/assets/ru_arty-crafty_backend_hoppscotch.md.D4WuAYcj.lean.js
+++ b/assets/ru_arty-crafty_backend_hoppscotch.md.CtrWv_Sj.lean.js
@@ -1 +1 @@
-import{_ as s,o as a,c as i,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const e="/assets/hoppscotch.C1usRc-g.webp",y=JSON.parse('{"title":"Hoppscotch","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/backend/hoppscotch.md","filePath":"ru/arty-crafty/backend/hoppscotch.md","lastUpdated":1726474804000}'),n={name:"ru/arty-crafty/backend/hoppscotch.md"},p=t("",11),h=[p];function l(r,k,c,o,d,F){return a(),i("div",null,h)}const g=s(n,[["render",l]]);export{y as __pageData,g as default};
+import{_ as s,o as a,c as i,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const e="/assets/hoppscotch.C1usRc-g.webp",y=JSON.parse('{"title":"Hoppscotch","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/backend/hoppscotch.md","filePath":"ru/arty-crafty/backend/hoppscotch.md","lastUpdated":1726505115000}'),n={name:"ru/arty-crafty/backend/hoppscotch.md"},p=t("",11),h=[p];function l(r,k,c,o,d,F){return a(),i("div",null,h)}const g=s(n,[["render",l]]);export{y as __pageData,g as default};
diff --git a/assets/ru_arty-crafty_backend_supabase-api.md.C0NqY1Xx.js b/assets/ru_arty-crafty_backend_supabase-api.md.Dn3IJ3-Q.js
similarity index 99%
rename from assets/ru_arty-crafty_backend_supabase-api.md.C0NqY1Xx.js
rename to assets/ru_arty-crafty_backend_supabase-api.md.Dn3IJ3-Q.js
index 39a17597c..3729904b2 100644
--- a/assets/ru_arty-crafty_backend_supabase-api.md.C0NqY1Xx.js
+++ b/assets/ru_arty-crafty_backend_supabase-api.md.Dn3IJ3-Q.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Supabase REST API","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/backend/supabase-api.md","filePath":"ru/arty-crafty/backend/supabase-api.md","lastUpdated":1726474804000}'),t={name:"ru/arty-crafty/backend/supabase-api.md"},h=n(`

Supabase REST API

Supabase SDK

Supabase автоматически генерит эндпойнты для доступа к нашим таблицам. Обращаться к ним можно либо через Supabase SDK.

Установка:

sh
 pnpm add @supabase/supabase-js

Использование:

js
import { createClient } from "@supabase/supabase-js";
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Supabase REST API","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/backend/supabase-api.md","filePath":"ru/arty-crafty/backend/supabase-api.md","lastUpdated":1726505115000}'),t={name:"ru/arty-crafty/backend/supabase-api.md"},h=n(`

Supabase REST API

Supabase SDK

Supabase автоматически генерит эндпойнты для доступа к нашим таблицам. Обращаться к ним можно либо через Supabase SDK.

Установка:

sh
 pnpm add @supabase/supabase-js

Использование:

js
import { createClient } from "@supabase/supabase-js";
 
 // Create a single supabase client for interacting with your database
 const supabase = createClient("https://client_id.supabase.co", "public-anon-key");
diff --git a/assets/ru_arty-crafty_backend_supabase-api.md.C0NqY1Xx.lean.js b/assets/ru_arty-crafty_backend_supabase-api.md.Dn3IJ3-Q.lean.js
similarity index 91%
rename from assets/ru_arty-crafty_backend_supabase-api.md.C0NqY1Xx.lean.js
rename to assets/ru_arty-crafty_backend_supabase-api.md.Dn3IJ3-Q.lean.js
index 33050524d..4743d03e0 100644
--- a/assets/ru_arty-crafty_backend_supabase-api.md.C0NqY1Xx.lean.js
+++ b/assets/ru_arty-crafty_backend_supabase-api.md.Dn3IJ3-Q.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Supabase REST API","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/backend/supabase-api.md","filePath":"ru/arty-crafty/backend/supabase-api.md","lastUpdated":1726474804000}'),t={name:"ru/arty-crafty/backend/supabase-api.md"},h=n("",13),p=[h];function l(k,e,E,r,d,o){return i(),a("div",null,p)}const y=s(t,[["render",l]]);export{F as __pageData,y as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Supabase REST API","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/backend/supabase-api.md","filePath":"ru/arty-crafty/backend/supabase-api.md","lastUpdated":1726505115000}'),t={name:"ru/arty-crafty/backend/supabase-api.md"},h=n("",13),p=[h];function l(k,e,E,r,d,o){return i(),a("div",null,p)}const y=s(t,[["render",l]]);export{F as __pageData,y as default};
diff --git a/assets/ru_arty-crafty_backend_supabase.md.DFZiFIZ1.js b/assets/ru_arty-crafty_backend_supabase.md.DlW4qju1.js
similarity index 98%
rename from assets/ru_arty-crafty_backend_supabase.md.DFZiFIZ1.js
rename to assets/ru_arty-crafty_backend_supabase.md.DlW4qju1.js
index 11f014312..4b571c138 100644
--- a/assets/ru_arty-crafty_backend_supabase.md.DFZiFIZ1.js
+++ b/assets/ru_arty-crafty_backend_supabase.md.DlW4qju1.js
@@ -1 +1 @@
-import{_ as a,o as e,c as t,a4 as s}from"./chunks/framework.B8KxSsRZ.js";const o="/assets/supabase-api-keys.DlD8SP1a.jpg",r="/assets/supabase-policies.5Z57pF61.jpg",f=JSON.parse('{"title":"Supabase","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/backend/supabase.md","filePath":"ru/arty-crafty/backend/supabase.md","lastUpdated":1726474804000}'),c={name:"ru/arty-crafty/backend/supabase.md"},p=s('

Supabase

Создание проекта

Зарегистрироваться и создать проект на Supabase достаточно несложно. После регистрации предоставляется два API ключа. Один - рутовский secret, и второй - public, для обычного доступа к REST API. В дальнейшем будем говорить только о ключе public.

image

Безопасность и доступ

Доступ к таблицам в базе данных Supabase регулируется ключом и политиками (policies). При отсутствий политик, зная ключ через REST API можно выполнять основные CRUD SQL запросы. Соответственно, если мы делаем запрос, скажем, к таблице product с фронтенда, то ключ будет в бандле приложения, и вытащить его и запустить другие запросы не составит труда.

Соответственно, необходимо разрешить использование ключа для REST запросов только на чтение (select). Делается это созданием соответствующей политики у таблицы.

image

Этого вполне достаточно для варианта "Витрина", в котором не нужно размещать заказы, создавать пользователей и прочее. В дальнейшем, при необходимости записи в базу данных, придется использовать свой слой бэкенда либо иное решение.

Если использовать сервис аутентификации Supabase, то возможно создавать политики для зарегистрированных пользователей - то есть, например, позволить работать со своим профилем, личным кабинетом, заказами. Но для лучшей безопасности лучше все-таки, всё это пропускать через свой бэкенд.

',10),i=[p];function n(d,l,u,_,m,b){return e(),t("div",null,i)}const g=a(c,[["render",n]]);export{f as __pageData,g as default}; +import{_ as a,o as e,c as t,a4 as s}from"./chunks/framework.B8KxSsRZ.js";const o="/assets/supabase-api-keys.DlD8SP1a.jpg",r="/assets/supabase-policies.5Z57pF61.jpg",f=JSON.parse('{"title":"Supabase","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/backend/supabase.md","filePath":"ru/arty-crafty/backend/supabase.md","lastUpdated":1726505115000}'),c={name:"ru/arty-crafty/backend/supabase.md"},p=s('

Supabase

Создание проекта

Зарегистрироваться и создать проект на Supabase достаточно несложно. После регистрации предоставляется два API ключа. Один - рутовский secret, и второй - public, для обычного доступа к REST API. В дальнейшем будем говорить только о ключе public.

image

Безопасность и доступ

Доступ к таблицам в базе данных Supabase регулируется ключом и политиками (policies). При отсутствий политик, зная ключ через REST API можно выполнять основные CRUD SQL запросы. Соответственно, если мы делаем запрос, скажем, к таблице product с фронтенда, то ключ будет в бандле приложения, и вытащить его и запустить другие запросы не составит труда.

Соответственно, необходимо разрешить использование ключа для REST запросов только на чтение (select). Делается это созданием соответствующей политики у таблицы.

image

Этого вполне достаточно для варианта "Витрина", в котором не нужно размещать заказы, создавать пользователей и прочее. В дальнейшем, при необходимости записи в базу данных, придется использовать свой слой бэкенда либо иное решение.

Если использовать сервис аутентификации Supabase, то возможно создавать политики для зарегистрированных пользователей - то есть, например, позволить работать со своим профилем, личным кабинетом, заказами. Но для лучшей безопасности лучше все-таки, всё это пропускать через свой бэкенд.

',10),i=[p];function n(d,l,u,_,m,b){return e(),t("div",null,i)}const g=a(c,[["render",n]]);export{f as __pageData,g as default}; diff --git a/assets/ru_arty-crafty_backend_supabase.md.DFZiFIZ1.lean.js b/assets/ru_arty-crafty_backend_supabase.md.DlW4qju1.lean.js similarity index 92% rename from assets/ru_arty-crafty_backend_supabase.md.DFZiFIZ1.lean.js rename to assets/ru_arty-crafty_backend_supabase.md.DlW4qju1.lean.js index b85f8a382..3f9a78f8c 100644 --- a/assets/ru_arty-crafty_backend_supabase.md.DFZiFIZ1.lean.js +++ b/assets/ru_arty-crafty_backend_supabase.md.DlW4qju1.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as s}from"./chunks/framework.B8KxSsRZ.js";const o="/assets/supabase-api-keys.DlD8SP1a.jpg",r="/assets/supabase-policies.5Z57pF61.jpg",f=JSON.parse('{"title":"Supabase","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/backend/supabase.md","filePath":"ru/arty-crafty/backend/supabase.md","lastUpdated":1726474804000}'),c={name:"ru/arty-crafty/backend/supabase.md"},p=s("",10),i=[p];function n(d,l,u,_,m,b){return e(),t("div",null,i)}const g=a(c,[["render",n]]);export{f as __pageData,g as default}; +import{_ as a,o as e,c as t,a4 as s}from"./chunks/framework.B8KxSsRZ.js";const o="/assets/supabase-api-keys.DlD8SP1a.jpg",r="/assets/supabase-policies.5Z57pF61.jpg",f=JSON.parse('{"title":"Supabase","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/backend/supabase.md","filePath":"ru/arty-crafty/backend/supabase.md","lastUpdated":1726505115000}'),c={name:"ru/arty-crafty/backend/supabase.md"},p=s("",10),i=[p];function n(d,l,u,_,m,b){return e(),t("div",null,i)}const g=a(c,[["render",n]]);export{f as __pageData,g as default}; diff --git a/assets/ru_arty-crafty_index.md.7XJVn5xi.js b/assets/ru_arty-crafty_index.md.B2UoK8Dy.js similarity index 98% rename from assets/ru_arty-crafty_index.md.7XJVn5xi.js rename to assets/ru_arty-crafty_index.md.B2UoK8Dy.js index a3e0e57f8..ca211eaec 100644 --- a/assets/ru_arty-crafty_index.md.7XJVn5xi.js +++ b/assets/ru_arty-crafty_index.md.B2UoK8Dy.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const o="/assets/toys.BSRdi6ck.jpg",s="/assets/path-1000-li.0bh3Pgbf.jpg",y=JSON.parse('{"title":"Онлайн маркетплейс","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/index.md","filePath":"ru/arty-crafty/index.md","lastUpdated":1726474804000}'),c={name:"ru/arty-crafty/index.md"},i=r('

Онлайн маркетплейс

Проект Arty-Crafty

Здесь будет описываться процесс разработки онлайн маркетплейса. Разработка будет вестись поэтапно: витрина => магазин => маркетплейс. В некотором виде, туториал создания программного продукта от начала и до конца (какого-то). Репозиторий проекта.

Причины

Однажды я познакомился с мастером, которая вязала вот такие очень красивые интерьерные игрушки:

игрушки

image

Предложил ей сделать в интернете выставочную витрину. Однако когда я попытался найти готовые или полуготовые удобные современные open source решения для этого, оказалось, что их нет. Были опробованы headless e-commerce решения, вроде medusajs, и фронтенды типа VueStorefront, однако единственное, что нормально смогло заработать без значительных вложений времени и средств, был старый добрый php-ный OpenCart. И то, сразу же возникли проблемы при импорте данных.

Так появилось решение об этом проекте.

Цель

Создать e-commerce софт, который можно потом будет легко кастомизировать и настраивать для работы с любыми CMS, выйти на IPO и заработать много миллионов денег. Ниша свободна. Попутно сделать витрину/магазин для игрушек.

Также проект хорошо подходит как сайд или пет-проект, для обучения и развития, так что можно присоединяться к разработке.

Что здесь будет?

Описание организации проекта, его основных этапов, ключевых действий, объяснение причин принятия тех или иных решений. Здесь кода особо не будет (в репозитории). Будут CMV (coding music video).

Youtube-ов не планируется, монетизация от "курсов" не предусмотрена. Фидбеки, вопросы и советы можно оставлять в Telegram в комментариях.

Для чего?

В приличных вузах аспиранты обязаны заниматься преподавательской деятельностью. Подготовка материала и "проговаривание" его другим даёт возможность достичь более глубокого уровня понимания предмета. Поэтому польза тут обоюдная.


Замечание

Основная цель данного проекта - создать продукт высокого качества. Образовательный аспект - попутный. Поэтому стратегии: "Сперва сделаем плохо, а потом будем улучшать", не будет. Сразу делаем хорошо.


image

',20),n=[i];function l(d,p,m,h,u,_){return e(),t("div",null,n)}const g=a(c,[["render",l]]);export{y as __pageData,g as default}; +import{_ as a,o as e,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const o="/assets/toys.BSRdi6ck.jpg",s="/assets/path-1000-li.0bh3Pgbf.jpg",y=JSON.parse('{"title":"Онлайн маркетплейс","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/index.md","filePath":"ru/arty-crafty/index.md","lastUpdated":1726505115000}'),c={name:"ru/arty-crafty/index.md"},i=r('

Онлайн маркетплейс

Проект Arty-Crafty

Здесь будет описываться процесс разработки онлайн маркетплейса. Разработка будет вестись поэтапно: витрина => магазин => маркетплейс. В некотором виде, туториал создания программного продукта от начала и до конца (какого-то). Репозиторий проекта.

Причины

Однажды я познакомился с мастером, которая вязала вот такие очень красивые интерьерные игрушки:

игрушки

image

Предложил ей сделать в интернете выставочную витрину. Однако когда я попытался найти готовые или полуготовые удобные современные open source решения для этого, оказалось, что их нет. Были опробованы headless e-commerce решения, вроде medusajs, и фронтенды типа VueStorefront, однако единственное, что нормально смогло заработать без значительных вложений времени и средств, был старый добрый php-ный OpenCart. И то, сразу же возникли проблемы при импорте данных.

Так появилось решение об этом проекте.

Цель

Создать e-commerce софт, который можно потом будет легко кастомизировать и настраивать для работы с любыми CMS, выйти на IPO и заработать много миллионов денег. Ниша свободна. Попутно сделать витрину/магазин для игрушек.

Также проект хорошо подходит как сайд или пет-проект, для обучения и развития, так что можно присоединяться к разработке.

Что здесь будет?

Описание организации проекта, его основных этапов, ключевых действий, объяснение причин принятия тех или иных решений. Здесь кода особо не будет (в репозитории). Будут CMV (coding music video).

Youtube-ов не планируется, монетизация от "курсов" не предусмотрена. Фидбеки, вопросы и советы можно оставлять в Telegram в комментариях.

Для чего?

В приличных вузах аспиранты обязаны заниматься преподавательской деятельностью. Подготовка материала и "проговаривание" его другим даёт возможность достичь более глубокого уровня понимания предмета. Поэтому польза тут обоюдная.


Замечание

Основная цель данного проекта - создать продукт высокого качества. Образовательный аспект - попутный. Поэтому стратегии: "Сперва сделаем плохо, а потом будем улучшать", не будет. Сразу делаем хорошо.


image

',20),n=[i];function l(d,p,m,h,u,_){return e(),t("div",null,n)}const g=a(c,[["render",l]]);export{y as __pageData,g as default}; diff --git a/assets/ru_arty-crafty_index.md.7XJVn5xi.lean.js b/assets/ru_arty-crafty_index.md.B2UoK8Dy.lean.js similarity index 92% rename from assets/ru_arty-crafty_index.md.7XJVn5xi.lean.js rename to assets/ru_arty-crafty_index.md.B2UoK8Dy.lean.js index 0c09ddae2..8369e418d 100644 --- a/assets/ru_arty-crafty_index.md.7XJVn5xi.lean.js +++ b/assets/ru_arty-crafty_index.md.B2UoK8Dy.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const o="/assets/toys.BSRdi6ck.jpg",s="/assets/path-1000-li.0bh3Pgbf.jpg",y=JSON.parse('{"title":"Онлайн маркетплейс","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/index.md","filePath":"ru/arty-crafty/index.md","lastUpdated":1726474804000}'),c={name:"ru/arty-crafty/index.md"},i=r("",20),n=[i];function l(d,p,m,h,u,_){return e(),t("div",null,n)}const g=a(c,[["render",l]]);export{y as __pageData,g as default}; +import{_ as a,o as e,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const o="/assets/toys.BSRdi6ck.jpg",s="/assets/path-1000-li.0bh3Pgbf.jpg",y=JSON.parse('{"title":"Онлайн маркетплейс","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/index.md","filePath":"ru/arty-crafty/index.md","lastUpdated":1726505115000}'),c={name:"ru/arty-crafty/index.md"},i=r("",20),n=[i];function l(d,p,m,h,u,_){return e(),t("div",null,n)}const g=a(c,[["render",l]]);export{y as __pageData,g as default}; diff --git a/assets/ru_arty-crafty_introduction_development-stages.md.DVii8hxe.js b/assets/ru_arty-crafty_introduction_development-stages.md.B3j8VJCg.js similarity index 99% rename from assets/ru_arty-crafty_introduction_development-stages.md.DVii8hxe.js rename to assets/ru_arty-crafty_introduction_development-stages.md.B3j8VJCg.js index efaead697..6ac219510 100644 --- a/assets/ru_arty-crafty_introduction_development-stages.md.DVii8hxe.js +++ b/assets/ru_arty-crafty_introduction_development-stages.md.B3j8VJCg.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"План работы","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/introduction/development-stages.md","filePath":"ru/arty-crafty/introduction/development-stages.md","lastUpdated":1726474804000}'),l={name:"ru/arty-crafty/introduction/development-stages.md"},r=i('

План работы

Стадии разработки ПО

Классически разработка программного обеспечения состоит из следующих шагов (software development lifecycle - SDLC):

  1. Бизнес-анализ
  2. Архитектура и дизайн
  3. Разработка
  4. Развертывание
  5. Тестирование и QA
  6. Документирование
  7. Поддержка

С пятого шага можно вернуться на второй или третий для корректировки требований и плана, и таких итераций может быть много.

Рассмотрим каждую стадию отдельно.

Бизнес-анализ

Цель данной стадии в том, чтобы изучить представление заказчика о том, что он хочет получить, и перевести его на язык, понятный разработчикам. Даже если клиент и разработчик - это вы. Проблема кроется в восприятии, терминах и понятийном аппарате в целом. Недопонимание может привести к нарушению сроков, «раздутому» бюджету проекта и несоответствию результата целям бизнеса.

В процессе работы аналитика, как интерпретатора с языка бизнеса на язык IT, как правило, возникают следующие артефакты:

  • Видение проекта. Определяются границы проекта.
  • Скоуп задач. Позволяет определить, кто и какие задачи будет выполнять.
  • Описание сущностей. Описание логических связей между сущностями, потоков данных.
  • Диаграммы. Используются для наглядного описания процессов, алгоритмов, взаимосвязей между сущностями и т.д.
  • Описание поведения UI интерфейса. Нужно для более чёткого понимания, как работает интерфейс, какие существуют правила и как обрабатываются альтернативные сценарии.
  • Нефункциональные требования. Касаются производительности, безопасности и т.д.
  • Пользовательская документация. Объясняет, как пользователю использовать программу.

Архитектура и дизайн

Архитектура системы описывает ее основные компоненты, их взаимосвязи и способы взаимодействия друг с другом.

Она определяет структурированное решение, удовлетворяющее всем техническим и эксплуатационным требованиям, оптимизируя при этом общие атрибуты качества, такие как производительность и безопасность.

Кроме того, она включает в себя набор важных решений, связанных с разработкой программного обеспечения, и каждое из этих решений может оказать значительное влияние на качество, сопровождаемость, производительность и общий успех конечного продукта. Эти решения включают в себя:

  • Выбор основных структурных элементов и их интерфейсов, из которых состоит система.
  • Поведение, определяемое взаимодействием между этими элементами.
  • Объединение этих структурных и поведенческих элементов в бОльшую подсистему.
  • Согласование архитектурных решений с бизнес-целями.
  • Архитектурное руководство по стилю (style guide) для дальнейшей разработки.

Хорошая архитектура позволяет комфортно разрабатывать проект и удобно поддерживать и модифицировать его в долгосрочной перспективе.

Дизайн программной системы предусматривает разработку спецификации (software requirements specification - SRS), которая описывает элементы системы, их соответствие и совместную работу для выполнения требований, предъявляемых к системе. Дизайн выполняет роль чертежа в процессе разработки.

Разработка

Разработка включает в себя реализацию поставленных в спецификации задач.

Развертывание

Развертывание на сервере. CI/CD для автоматизации не только доставки, билда и деплоя, но и тестирования, бэкапа, версионности.

Тестирование и QA

Тестирование на первом этапе ручное, после - интеграционные (e2e) тесты.

Документирование

Данное руководство будет служить документацией, пока не понадобится отдельная.

Поддержка

Поддержка включает в себя не только оказание помощи пользователям и исправление ошибок, но и получение обратной связи от них с целью улучшения продукта.

',27),o=[r];function n(s,c,d,h,p,m){return e(),t("div",null,o)}const _=a(l,[["render",n]]);export{f as __pageData,_ as default}; +import{_ as a,o as e,c as t,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"План работы","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/introduction/development-stages.md","filePath":"ru/arty-crafty/introduction/development-stages.md","lastUpdated":1726505115000}'),l={name:"ru/arty-crafty/introduction/development-stages.md"},r=i('

План работы

Стадии разработки ПО

Классически разработка программного обеспечения состоит из следующих шагов (software development lifecycle - SDLC):

  1. Бизнес-анализ
  2. Архитектура и дизайн
  3. Разработка
  4. Развертывание
  5. Тестирование и QA
  6. Документирование
  7. Поддержка

С пятого шага можно вернуться на второй или третий для корректировки требований и плана, и таких итераций может быть много.

Рассмотрим каждую стадию отдельно.

Бизнес-анализ

Цель данной стадии в том, чтобы изучить представление заказчика о том, что он хочет получить, и перевести его на язык, понятный разработчикам. Даже если клиент и разработчик - это вы. Проблема кроется в восприятии, терминах и понятийном аппарате в целом. Недопонимание может привести к нарушению сроков, «раздутому» бюджету проекта и несоответствию результата целям бизнеса.

В процессе работы аналитика, как интерпретатора с языка бизнеса на язык IT, как правило, возникают следующие артефакты:

  • Видение проекта. Определяются границы проекта.
  • Скоуп задач. Позволяет определить, кто и какие задачи будет выполнять.
  • Описание сущностей. Описание логических связей между сущностями, потоков данных.
  • Диаграммы. Используются для наглядного описания процессов, алгоритмов, взаимосвязей между сущностями и т.д.
  • Описание поведения UI интерфейса. Нужно для более чёткого понимания, как работает интерфейс, какие существуют правила и как обрабатываются альтернативные сценарии.
  • Нефункциональные требования. Касаются производительности, безопасности и т.д.
  • Пользовательская документация. Объясняет, как пользователю использовать программу.

Архитектура и дизайн

Архитектура системы описывает ее основные компоненты, их взаимосвязи и способы взаимодействия друг с другом.

Она определяет структурированное решение, удовлетворяющее всем техническим и эксплуатационным требованиям, оптимизируя при этом общие атрибуты качества, такие как производительность и безопасность.

Кроме того, она включает в себя набор важных решений, связанных с разработкой программного обеспечения, и каждое из этих решений может оказать значительное влияние на качество, сопровождаемость, производительность и общий успех конечного продукта. Эти решения включают в себя:

  • Выбор основных структурных элементов и их интерфейсов, из которых состоит система.
  • Поведение, определяемое взаимодействием между этими элементами.
  • Объединение этих структурных и поведенческих элементов в бОльшую подсистему.
  • Согласование архитектурных решений с бизнес-целями.
  • Архитектурное руководство по стилю (style guide) для дальнейшей разработки.

Хорошая архитектура позволяет комфортно разрабатывать проект и удобно поддерживать и модифицировать его в долгосрочной перспективе.

Дизайн программной системы предусматривает разработку спецификации (software requirements specification - SRS), которая описывает элементы системы, их соответствие и совместную работу для выполнения требований, предъявляемых к системе. Дизайн выполняет роль чертежа в процессе разработки.

Разработка

Разработка включает в себя реализацию поставленных в спецификации задач.

Развертывание

Развертывание на сервере. CI/CD для автоматизации не только доставки, билда и деплоя, но и тестирования, бэкапа, версионности.

Тестирование и QA

Тестирование на первом этапе ручное, после - интеграционные (e2e) тесты.

Документирование

Данное руководство будет служить документацией, пока не понадобится отдельная.

Поддержка

Поддержка включает в себя не только оказание помощи пользователям и исправление ошибок, но и получение обратной связи от них с целью улучшения продукта.

',27),o=[r];function n(s,c,d,h,p,m){return e(),t("div",null,o)}const _=a(l,[["render",n]]);export{f as __pageData,_ as default}; diff --git a/assets/ru_arty-crafty_introduction_development-stages.md.DVii8hxe.lean.js b/assets/ru_arty-crafty_introduction_development-stages.md.B3j8VJCg.lean.js similarity index 92% rename from assets/ru_arty-crafty_introduction_development-stages.md.DVii8hxe.lean.js rename to assets/ru_arty-crafty_introduction_development-stages.md.B3j8VJCg.lean.js index 526cbda56..4969e4ba1 100644 --- a/assets/ru_arty-crafty_introduction_development-stages.md.DVii8hxe.lean.js +++ b/assets/ru_arty-crafty_introduction_development-stages.md.B3j8VJCg.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"План работы","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/introduction/development-stages.md","filePath":"ru/arty-crafty/introduction/development-stages.md","lastUpdated":1726474804000}'),l={name:"ru/arty-crafty/introduction/development-stages.md"},r=i("",27),o=[r];function n(s,c,d,h,p,m){return e(),t("div",null,o)}const _=a(l,[["render",n]]);export{f as __pageData,_ as default}; +import{_ as a,o as e,c as t,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"План работы","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/introduction/development-stages.md","filePath":"ru/arty-crafty/introduction/development-stages.md","lastUpdated":1726505115000}'),l={name:"ru/arty-crafty/introduction/development-stages.md"},r=i("",27),o=[r];function n(s,c,d,h,p,m){return e(),t("div",null,o)}const _=a(l,[["render",n]]);export{f as __pageData,_ as default}; diff --git a/assets/ru_arty-crafty_introduction_goals.md.BOzwpDbg.js b/assets/ru_arty-crafty_introduction_goals.md.D8pcQ5_e.js similarity index 98% rename from assets/ru_arty-crafty_introduction_goals.md.BOzwpDbg.js rename to assets/ru_arty-crafty_introduction_goals.md.D8pcQ5_e.js index 82eb9f9eb..a3d1b7bcb 100644 --- a/assets/ru_arty-crafty_introduction_goals.md.BOzwpDbg.js +++ b/assets/ru_arty-crafty_introduction_goals.md.D8pcQ5_e.js @@ -1 +1 @@ -import{_ as a,o as t,c as e,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Цели и задачи проекта","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/introduction/goals.md","filePath":"ru/arty-crafty/introduction/goals.md","lastUpdated":1726474804000}'),l={name:"ru/arty-crafty/introduction/goals.md"},o=i('

Цели и задачи проекта

Цели данного проекта:

  1. Постепенное построение продукта: начиная с витрины с простым статичным бэкендом в форме json файлов и заканчивая полноценным маркетплейсом со сторонним headless e-commerce решением.
  2. При разработке должны использоваться последние проверенные достижения Vue.js экосистемы и лучшие практики в разработке программного обеспечения.
  3. Проект должен быть примером грамотной реализации проекта по разработке ПО, начиная с архитектуры и заканчивая кодом.
  4. Программная система должна быть удобна для использования, кастомизации и развертывания для человека, не знакомого с Vue, - то есть, представлять из себя продукт для конечного пользователя.

Нефункциональные требования (software quality attributes)

  1. Высокий UX
  2. Производительность
  3. Безопасность
  4. Функциональность
  5. Расширяемость
  6. Понятный задокументированный чистый код, использование лучших практик

Общие функциональные требования

  1. PWA
  2. Глубоко настраиваемые темы. Как общие, так и для каждого магазина маркетплейса.
  3. i18n (интернационализация)

Этапы развития приложения (приблизительно)

  1. Витрина (показ каталога категорий и товаров из них)
  2. Бэкенд и база данных
  3. Поиск по товарам, маркетплейс (отдельные магазины)
  4. UI/UX
  5. Интеграция с E-commerce headless решением
  6. Аутентификация и авторизация
  7. Корзина для покупок, оформление заказов, личный кабинет покупателя
  8. Добавление различного функционала: методы оплаты, доставки, рейтинги товаров, отзывы покупателей, customer service
  9. SEO оптимизация
  10. Административная панель для магазинов маркетплейса

Разработка будет вестись постепенно, по этапам, описанным выше. После каждого этапа должно получаться рабочее (продуктовое) приложение. Разбиение большой задачи на небольшие подзадачи и всего процесса стадии сильно упрощает управление проектом и повышает вероятность итогового положительного исхода.

',10),r=[o];function s(n,c,d,h,u,m){return t(),e("div",null,r)}const y=a(l,[["render",s]]);export{f as __pageData,y as default}; +import{_ as a,o as t,c as e,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Цели и задачи проекта","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/introduction/goals.md","filePath":"ru/arty-crafty/introduction/goals.md","lastUpdated":1726505115000}'),l={name:"ru/arty-crafty/introduction/goals.md"},o=i('

Цели и задачи проекта

Цели данного проекта:

  1. Постепенное построение продукта: начиная с витрины с простым статичным бэкендом в форме json файлов и заканчивая полноценным маркетплейсом со сторонним headless e-commerce решением.
  2. При разработке должны использоваться последние проверенные достижения Vue.js экосистемы и лучшие практики в разработке программного обеспечения.
  3. Проект должен быть примером грамотной реализации проекта по разработке ПО, начиная с архитектуры и заканчивая кодом.
  4. Программная система должна быть удобна для использования, кастомизации и развертывания для человека, не знакомого с Vue, - то есть, представлять из себя продукт для конечного пользователя.

Нефункциональные требования (software quality attributes)

  1. Высокий UX
  2. Производительность
  3. Безопасность
  4. Функциональность
  5. Расширяемость
  6. Понятный задокументированный чистый код, использование лучших практик

Общие функциональные требования

  1. PWA
  2. Глубоко настраиваемые темы. Как общие, так и для каждого магазина маркетплейса.
  3. i18n (интернационализация)

Этапы развития приложения (приблизительно)

  1. Витрина (показ каталога категорий и товаров из них)
  2. Бэкенд и база данных
  3. Поиск по товарам, маркетплейс (отдельные магазины)
  4. UI/UX
  5. Интеграция с E-commerce headless решением
  6. Аутентификация и авторизация
  7. Корзина для покупок, оформление заказов, личный кабинет покупателя
  8. Добавление различного функционала: методы оплаты, доставки, рейтинги товаров, отзывы покупателей, customer service
  9. SEO оптимизация
  10. Административная панель для магазинов маркетплейса

Разработка будет вестись постепенно, по этапам, описанным выше. После каждого этапа должно получаться рабочее (продуктовое) приложение. Разбиение большой задачи на небольшие подзадачи и всего процесса стадии сильно упрощает управление проектом и повышает вероятность итогового положительного исхода.

',10),r=[o];function s(n,c,d,h,u,m){return t(),e("div",null,r)}const y=a(l,[["render",s]]);export{f as __pageData,y as default}; diff --git a/assets/ru_arty-crafty_introduction_goals.md.BOzwpDbg.lean.js b/assets/ru_arty-crafty_introduction_goals.md.D8pcQ5_e.lean.js similarity index 91% rename from assets/ru_arty-crafty_introduction_goals.md.BOzwpDbg.lean.js rename to assets/ru_arty-crafty_introduction_goals.md.D8pcQ5_e.lean.js index a8e85d01c..361ca3633 100644 --- a/assets/ru_arty-crafty_introduction_goals.md.BOzwpDbg.lean.js +++ b/assets/ru_arty-crafty_introduction_goals.md.D8pcQ5_e.lean.js @@ -1 +1 @@ -import{_ as a,o as t,c as e,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Цели и задачи проекта","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/introduction/goals.md","filePath":"ru/arty-crafty/introduction/goals.md","lastUpdated":1726474804000}'),l={name:"ru/arty-crafty/introduction/goals.md"},o=i("",10),r=[o];function s(n,c,d,h,u,m){return t(),e("div",null,r)}const y=a(l,[["render",s]]);export{f as __pageData,y as default}; +import{_ as a,o as t,c as e,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Цели и задачи проекта","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/introduction/goals.md","filePath":"ru/arty-crafty/introduction/goals.md","lastUpdated":1726505115000}'),l={name:"ru/arty-crafty/introduction/goals.md"},o=i("",10),r=[o];function s(n,c,d,h,u,m){return t(),e("div",null,r)}const y=a(l,[["render",s]]);export{f as __pageData,y as default}; diff --git a/assets/ru_arty-crafty_introduction_repository.md.CbOAPMvi.js b/assets/ru_arty-crafty_introduction_repository.md.DmInW47E.js similarity index 95% rename from assets/ru_arty-crafty_introduction_repository.md.CbOAPMvi.js rename to assets/ru_arty-crafty_introduction_repository.md.DmInW47E.js index 9bb5fe36f..be71bf6a2 100644 --- a/assets/ru_arty-crafty_introduction_repository.md.CbOAPMvi.js +++ b/assets/ru_arty-crafty_introduction_repository.md.DmInW47E.js @@ -1 +1 @@ -import{_ as a,o as r,c as o,l as t,a as e}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Репозиторий и сайт проекта","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/introduction/repository.md","filePath":"ru/arty-crafty/introduction/repository.md","lastUpdated":1726474804000}'),n={name:"ru/arty-crafty/introduction/repository.md"},s=t("h1",{id:"репозитории-и-саит-проекта",tabindex:"-1"},[e("Репозиторий и сайт проекта "),t("a",{class:"header-anchor",href:"#репозитории-и-саит-проекта","aria-label":'Permalink to "Репозиторий и сайт проекта"'},"​")],-1),c=t("p",null,[e("Репозиторий - "),t("a",{href:"https://github.com/vuesence/arty-crafty",target:"_blank",rel:"noreferrer"},"https://github.com/vuesence/arty-crafty")],-1),i=t("p",null,[e("Сайт (текущая dev версия) - "),t("a",{href:"https://vuesence.github.io/arty-crafty/",target:"_blank",rel:"noreferrer"},"https://vuesence.github.io/arty-crafty/")],-1),d=[s,c,i];function l(y,p,f,h,m,_){return r(),o("div",null,d)}const b=a(n,[["render",l]]);export{g as __pageData,b as default}; +import{_ as a,o as r,c as o,l as t,a as e}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Репозиторий и сайт проекта","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/introduction/repository.md","filePath":"ru/arty-crafty/introduction/repository.md","lastUpdated":1726505115000}'),n={name:"ru/arty-crafty/introduction/repository.md"},s=t("h1",{id:"репозитории-и-саит-проекта",tabindex:"-1"},[e("Репозиторий и сайт проекта "),t("a",{class:"header-anchor",href:"#репозитории-и-саит-проекта","aria-label":'Permalink to "Репозиторий и сайт проекта"'},"​")],-1),c=t("p",null,[e("Репозиторий - "),t("a",{href:"https://github.com/vuesence/arty-crafty",target:"_blank",rel:"noreferrer"},"https://github.com/vuesence/arty-crafty")],-1),i=t("p",null,[e("Сайт (текущая dev версия) - "),t("a",{href:"https://vuesence.github.io/arty-crafty/",target:"_blank",rel:"noreferrer"},"https://vuesence.github.io/arty-crafty/")],-1),d=[s,c,i];function l(y,p,f,h,m,_){return r(),o("div",null,d)}const b=a(n,[["render",l]]);export{g as __pageData,b as default}; diff --git a/assets/ru_arty-crafty_introduction_repository.md.CbOAPMvi.lean.js b/assets/ru_arty-crafty_introduction_repository.md.DmInW47E.lean.js similarity index 95% rename from assets/ru_arty-crafty_introduction_repository.md.CbOAPMvi.lean.js rename to assets/ru_arty-crafty_introduction_repository.md.DmInW47E.lean.js index 9bb5fe36f..be71bf6a2 100644 --- a/assets/ru_arty-crafty_introduction_repository.md.CbOAPMvi.lean.js +++ b/assets/ru_arty-crafty_introduction_repository.md.DmInW47E.lean.js @@ -1 +1 @@ -import{_ as a,o as r,c as o,l as t,a as e}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Репозиторий и сайт проекта","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/introduction/repository.md","filePath":"ru/arty-crafty/introduction/repository.md","lastUpdated":1726474804000}'),n={name:"ru/arty-crafty/introduction/repository.md"},s=t("h1",{id:"репозитории-и-саит-проекта",tabindex:"-1"},[e("Репозиторий и сайт проекта "),t("a",{class:"header-anchor",href:"#репозитории-и-саит-проекта","aria-label":'Permalink to "Репозиторий и сайт проекта"'},"​")],-1),c=t("p",null,[e("Репозиторий - "),t("a",{href:"https://github.com/vuesence/arty-crafty",target:"_blank",rel:"noreferrer"},"https://github.com/vuesence/arty-crafty")],-1),i=t("p",null,[e("Сайт (текущая dev версия) - "),t("a",{href:"https://vuesence.github.io/arty-crafty/",target:"_blank",rel:"noreferrer"},"https://vuesence.github.io/arty-crafty/")],-1),d=[s,c,i];function l(y,p,f,h,m,_){return r(),o("div",null,d)}const b=a(n,[["render",l]]);export{g as __pageData,b as default}; +import{_ as a,o as r,c as o,l as t,a as e}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Репозиторий и сайт проекта","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/introduction/repository.md","filePath":"ru/arty-crafty/introduction/repository.md","lastUpdated":1726505115000}'),n={name:"ru/arty-crafty/introduction/repository.md"},s=t("h1",{id:"репозитории-и-саит-проекта",tabindex:"-1"},[e("Репозиторий и сайт проекта "),t("a",{class:"header-anchor",href:"#репозитории-и-саит-проекта","aria-label":'Permalink to "Репозиторий и сайт проекта"'},"​")],-1),c=t("p",null,[e("Репозиторий - "),t("a",{href:"https://github.com/vuesence/arty-crafty",target:"_blank",rel:"noreferrer"},"https://github.com/vuesence/arty-crafty")],-1),i=t("p",null,[e("Сайт (текущая dev версия) - "),t("a",{href:"https://vuesence.github.io/arty-crafty/",target:"_blank",rel:"noreferrer"},"https://vuesence.github.io/arty-crafty/")],-1),d=[s,c,i];function l(y,p,f,h,m,_){return r(),o("div",null,d)}const b=a(n,[["render",l]]);export{g as __pageData,b as default}; diff --git a/assets/ru_arty-crafty_showcase-data_api-service-adapter.md.CaUHHfn1.js b/assets/ru_arty-crafty_showcase-data_api-service-adapter.md.DElYrd-f.js similarity index 99% rename from assets/ru_arty-crafty_showcase-data_api-service-adapter.md.CaUHHfn1.js rename to assets/ru_arty-crafty_showcase-data_api-service-adapter.md.DElYrd-f.js index 200ff714d..3d5e3432d 100644 --- a/assets/ru_arty-crafty_showcase-data_api-service-adapter.md.CaUHHfn1.js +++ b/assets/ru_arty-crafty_showcase-data_api-service-adapter.md.DElYrd-f.js @@ -1 +1 @@ -import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const o=JSON.parse('{"title":"Работа с API на фронтенде","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase-data/api-service-adapter.md","filePath":"ru/arty-crafty/showcase-data/api-service-adapter.md","lastUpdated":1726474804000}'),n={name:"ru/arty-crafty/showcase-data/api-service-adapter.md"},p=t('

Работа с API на фронтенде

Supabase адаптер

Теперь нужно реализовать такие же как в Hoppscotch запросы в коде нашего фронтенда. Для товаров категории и подробная информации о товаре это можно сделать сразу, заменив всего одну строку:

api/products.ts
js
const products = {\n  async categoryProducts(categoryId) {\n    // return http.get(`/arty-crafty/api/category-products-${categoryId}.json`);\n    const data = await http.get(`${SB}/categories?select=id,title,products(id,title,summary)&id=eq.${categoryId}`);\n    return data[0].products;\n  },\n};

В ProductCard проставляем корректные пути к свойствам товара (product.summary.price) и категория показывается. Ранее product.desc бы переименован в базе данных в product.summary.

Теперь нужно загрузить в самом начале старта приложения все категории товаров, чтобы построить каталог.

js
async categories() {\n  return http.get(`${SB}/categories?select=id,title,data`);\n},

Ну и запрос информации о товаре:

js
async product(id: number) {\n  const data = await http.get(`${SB}/products?select=id,title,summary,data&id=eq.${id}`);\n  return data[0] ?? null;\n},

Как видно, вынос транспортной логики в отдельный сервис сильно облегчает работу при замене бэкенда и делает код в основном приложении чище и понятней.

',11),e=[p];function h(l,k,r,d,c,E){return i(),a("div",null,e)}const y=s(n,[["render",h]]);export{o as __pageData,y as default}; +import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const o=JSON.parse('{"title":"Работа с API на фронтенде","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase-data/api-service-adapter.md","filePath":"ru/arty-crafty/showcase-data/api-service-adapter.md","lastUpdated":1726505115000}'),n={name:"ru/arty-crafty/showcase-data/api-service-adapter.md"},p=t('

Работа с API на фронтенде

Supabase адаптер

Теперь нужно реализовать такие же как в Hoppscotch запросы в коде нашего фронтенда. Для товаров категории и подробная информации о товаре это можно сделать сразу, заменив всего одну строку:

api/products.ts
js
const products = {\n  async categoryProducts(categoryId) {\n    // return http.get(`/arty-crafty/api/category-products-${categoryId}.json`);\n    const data = await http.get(`${SB}/categories?select=id,title,products(id,title,summary)&id=eq.${categoryId}`);\n    return data[0].products;\n  },\n};

В ProductCard проставляем корректные пути к свойствам товара (product.summary.price) и категория показывается. Ранее product.desc бы переименован в базе данных в product.summary.

Теперь нужно загрузить в самом начале старта приложения все категории товаров, чтобы построить каталог.

js
async categories() {\n  return http.get(`${SB}/categories?select=id,title,data`);\n},

Ну и запрос информации о товаре:

js
async product(id: number) {\n  const data = await http.get(`${SB}/products?select=id,title,summary,data&id=eq.${id}`);\n  return data[0] ?? null;\n},

Как видно, вынос транспортной логики в отдельный сервис сильно облегчает работу при замене бэкенда и делает код в основном приложении чище и понятней.

',11),e=[p];function h(l,k,r,d,c,E){return i(),a("div",null,e)}const y=s(n,[["render",h]]);export{o as __pageData,y as default}; diff --git a/assets/ru_arty-crafty_showcase-data_api-service-adapter.md.CaUHHfn1.lean.js b/assets/ru_arty-crafty_showcase-data_api-service-adapter.md.DElYrd-f.lean.js similarity index 92% rename from assets/ru_arty-crafty_showcase-data_api-service-adapter.md.CaUHHfn1.lean.js rename to assets/ru_arty-crafty_showcase-data_api-service-adapter.md.DElYrd-f.lean.js index 68d040d9c..3702ec3d4 100644 --- a/assets/ru_arty-crafty_showcase-data_api-service-adapter.md.CaUHHfn1.lean.js +++ b/assets/ru_arty-crafty_showcase-data_api-service-adapter.md.DElYrd-f.lean.js @@ -1 +1 @@ -import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const o=JSON.parse('{"title":"Работа с API на фронтенде","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase-data/api-service-adapter.md","filePath":"ru/arty-crafty/showcase-data/api-service-adapter.md","lastUpdated":1726474804000}'),n={name:"ru/arty-crafty/showcase-data/api-service-adapter.md"},p=t("",11),e=[p];function h(l,k,r,d,c,E){return i(),a("div",null,e)}const y=s(n,[["render",h]]);export{o as __pageData,y as default}; +import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const o=JSON.parse('{"title":"Работа с API на фронтенде","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase-data/api-service-adapter.md","filePath":"ru/arty-crafty/showcase-data/api-service-adapter.md","lastUpdated":1726505115000}'),n={name:"ru/arty-crafty/showcase-data/api-service-adapter.md"},p=t("",11),e=[p];function h(l,k,r,d,c,E){return i(),a("div",null,e)}const y=s(n,[["render",h]]);export{o as __pageData,y as default}; diff --git a/assets/ru_arty-crafty_showcase-data_mobile-menu.md.Bqv-U9L1.js b/assets/ru_arty-crafty_showcase-data_mobile-menu.md.y-a-1Piz.js similarity index 99% rename from assets/ru_arty-crafty_showcase-data_mobile-menu.md.Bqv-U9L1.js rename to assets/ru_arty-crafty_showcase-data_mobile-menu.md.y-a-1Piz.js index 92002c1cf..f5b4dad1b 100644 --- a/assets/ru_arty-crafty_showcase-data_mobile-menu.md.Bqv-U9L1.js +++ b/assets/ru_arty-crafty_showcase-data_mobile-menu.md.y-a-1Piz.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const n="data:image/webp;base64,UklGRsoGAABXRUJQVlA4IL4GAACQKgCdASqkAUgAPp1Inkylo6KiIfQLYLATiWlu3V9w1VZIHAAeVV7Hvk3arYz3/Z+FPk2ELtM+y+Nfka8T01pwFYyaikn7kd+c+gj0eNBbMgHvqqVJB3+5KqOLIr7MlVHFbVnJd+72uBEzsqWz0D342wKV42LpSJhbxacDp2OwmI+fiHrx/5Q6/WI64gklOFU3sXTuNWX5EgNOIwSHrhtvnGmOAGdYbvuyg1pspMhN0jPkzAXwJqqGC8YqabnBChmZd/qmSOFUDvT90ZJTJiHWX3vNLcDszvU5sJIUdFQfvgcnVaj8iPR2y9by46D3nYqx7AOS1blDll2X0vhzBJl4zPXGgBwWC/e8TbxiVfncRp24UoIgVoX1KeQAJ81k1/d0eX33M7C3O9q3eGQxMQkfgTeCsudTZQxhw0Ektmp2p2w37bp1AOaJ6LMFnWmFShlituF1N2a9arPoURXIAP7+zD3PmfHZPmUKEB/rCyvpz5ROQFLMCLZ0Yjt5ODHcS0m82laTXHdURxu9AhIafUlcSsIH8k2zbc5yJghUvP3C0bv/9neSP8TOwQ7pAk/5QPN31ZH448xZMcu1ugpPv3P723k7/ubHYPmPpCxvcU9w7P4yyM40PNTj9WrAdUVPfzdh/lK6x3+/1D7Tr2W8Fg8bBpHewMFVo9s3PxShBSUzsFnC6vAuSGLyHqa3rVtxVmEvbA/vhJqnNaJMHxlSVwn7kh0yQnNGZJ+EHepQRM1cttwk+8dxadnKDzZCVKXEyrbfAg7J0p/gdN4yjwZD5VvOYWDwNvTCyt/MeW3Xr9sa7CnqGsN+ElVf+WQ0V0vjQ52vwHK+FsTifF7DPzUcYgHJZxltGln8iyU3ZmKZl3ZFscSWu/lN9F9U+HDwvFDpLpve/MnogNgUdri0PCAWXSzWQfcKellrzIq+0ugxdBjgSplKjCDBpBIoxklZLroClWS7dbLhz6G4BNd7ZTxVyuzXgF9wgJ8PiDr247Zg3D3QIIL2VObzdQyrfUMF7glt44A70NTO/ScaRn41Qu4b/4rUhD+HS6fz1e38c8AxKRu04Ix7cK2cVp5qe9pLXMSIMSB6lLsX+WlOypun4fg2XZZi6HT5651q/QG0KVCfEw1cd7vVJ0Uq7kUKUMFkxHjV/y2MI5TGUXZt8iGKRw43ol6NsWOFQ7n85Iyt5nDjlQmK4ndQ4ni2GkuOQO5lMBSmqadffTQAZgW0RsW0NI0p0m9j1lEWPxPQSLUyhAQP+np3twIDHF5Gtlvuw6QzC3TfQdCS3ZyH4PEFl3Ww2z0rtZgPMO0gQe6lSY28UGCu/g0p7eSSAtuy4Y53Jd/uzzhmB+oVMEiBWoLb3bOky0jU89OTXR/jXDvBI1jtZvBnd7w1DZvu+z5AVriy2qyOw9B0GyThZl/S1oKX542Q92TkNEbkEnaBriPBZRISjndHme0vlomXMX45uYeWJQpfZMlhPSRxMfvFh98NXUSTfCp2+KGaCWjfeSRY3KDge8tpG9FvOhzDPr6jz2FlawJuqdvi8xoDxWLooQ5DlqwiCOU6TkleBjnoAQ49g10yVIoH3MWKN9UiQ5pUHATYAzlr2e7qbfIHMv4FtlRbgWNNs3ikpgCx9/h0vUiK5z9dBTiuqPAGiabcUp9Rdexe/cF7qrwBZsjP4nOyzj8t1Z21hA0znJNYj1ykRWluixc3gA3FmqsrFJtWQcu3ouh0FQPTylFNf8OjV0OMaLKVVrJh+0bholj1SKVElpMT3YYVp/Hsk1zQRcv7rhiMocG9sdr1HgmNxOmP2yISfxXwhHUjNU3I5t2S2z1FMKnzOprTLEB7A8AR72GIyDZ30BlW4dzek6g5RESGX8lYfOpWDZjs9l/tw1a6vDybV4ohrtjs8zJXkIrII53QTyLBf6qzVkeBd4rn9PwBndU/UPvionxr08eSyyfLq7g74cEQBUa+KmiatXku19nh5ZyTsdXFby73GKlAG1eZwsqbe65EnNa8F3QEWcxJXu12sgSeHF2/lwfVI0Isew3JeG9FlnJA2WUTJVKaDH2mTq9vfYuCXvnNlB+FYcYcCaN9U1U4JXFEctdPZd6trJz48yhaRBrFF9Nl7MyvExLDbM2ymyE98+hhOIZ6HU1XRM2wa5vHg0R9IFsUBylpEaafGT7paRL9Jz8HiKn51acUDnvtbPp6cEl6L0PkJN4cYkeS9tJI79cSCqGvVwOTUnHJBAW1kjotpqImwg4MvOYdDgAAqfeyv7drP9waO7ogNwsXu4w2Kg1XBcF165xRdgBBqovH/mptykUqx6wA",m=JSON.parse('{"title":"Мобильное меню, CSS","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase-data/mobile-menu.md","filePath":"ru/arty-crafty/showcase-data/mobile-menu.md","lastUpdated":1726474804000}'),c={name:"ru/arty-crafty/showcase-data/mobile-menu.md"},r=o('

Мобильное меню, CSS

IconButton

В мобильном виде обычно на подобных сайтах есть нижнее меню. Кнопки с иконками тут сильно похожи на те, что используются в главном хедере, значит пора выделить их в отдельный компонент BaseIconButton. При создании базовых UI компонент есть искушение сделать его как можно универсальней, со множеством опций, но лучше делать самое необходимое с возможностью расширения позже. В нашем случае добавим только badge.

image

Заменяем в AppHeader кнопки на BaseIconButton.

SCSS => CSS

От SCSS мы используем только nesting (вкладывание селекторов друг в друга). Эта удобная фунциональность уже часть современного CSS, поддерживается последними версиями всех браузеров, но общая поддержка около 90%. Через полгода-год уже должна быть достаточная поддержка браузерами, чтобы мы использовали чистый CSS.

Перейдем на него уже сейчас, и будем использовать postcss-nesting пакет для преобразования CSS с nesting в простой CSS. Это позволит в будущем просто убрать этот пакет из проекта, не меняя код. В противном случае при переходе надо будет немного править каждый блок SCSS в каждом SFC.

Итак, убираем из зависимостей пакет sass, добавляем postcss-nesting, в каждом SFC файле убираем lang="scss", и заменяем двуслешные // ... комментарии SCSS на /* ... */ комментарии CSS. Всё работает.

Есть небольшая терпимая проблема с подсветкой CSS с nesting в VS Code, но есть и "плюс" - теперь по селектору из блока стилей можно по SHIFT+F12 попасть в нужное место в шаблоне. С SCSS это было нельзя.

Tag и CMV

Загружаем в репозиторий и ставим тэг - v0.4

Coding music video

',13),s=[r];function d(l,S,i,p,g,u){return a(),t("div",null,s)}const y=e(c,[["render",d]]);export{m as __pageData,y as default}; +import{_ as e,o as a,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const n="data:image/webp;base64,UklGRsoGAABXRUJQVlA4IL4GAACQKgCdASqkAUgAPp1Inkylo6KiIfQLYLATiWlu3V9w1VZIHAAeVV7Hvk3arYz3/Z+FPk2ELtM+y+Nfka8T01pwFYyaikn7kd+c+gj0eNBbMgHvqqVJB3+5KqOLIr7MlVHFbVnJd+72uBEzsqWz0D342wKV42LpSJhbxacDp2OwmI+fiHrx/5Q6/WI64gklOFU3sXTuNWX5EgNOIwSHrhtvnGmOAGdYbvuyg1pspMhN0jPkzAXwJqqGC8YqabnBChmZd/qmSOFUDvT90ZJTJiHWX3vNLcDszvU5sJIUdFQfvgcnVaj8iPR2y9by46D3nYqx7AOS1blDll2X0vhzBJl4zPXGgBwWC/e8TbxiVfncRp24UoIgVoX1KeQAJ81k1/d0eX33M7C3O9q3eGQxMQkfgTeCsudTZQxhw0Ektmp2p2w37bp1AOaJ6LMFnWmFShlituF1N2a9arPoURXIAP7+zD3PmfHZPmUKEB/rCyvpz5ROQFLMCLZ0Yjt5ODHcS0m82laTXHdURxu9AhIafUlcSsIH8k2zbc5yJghUvP3C0bv/9neSP8TOwQ7pAk/5QPN31ZH448xZMcu1ugpPv3P723k7/ubHYPmPpCxvcU9w7P4yyM40PNTj9WrAdUVPfzdh/lK6x3+/1D7Tr2W8Fg8bBpHewMFVo9s3PxShBSUzsFnC6vAuSGLyHqa3rVtxVmEvbA/vhJqnNaJMHxlSVwn7kh0yQnNGZJ+EHepQRM1cttwk+8dxadnKDzZCVKXEyrbfAg7J0p/gdN4yjwZD5VvOYWDwNvTCyt/MeW3Xr9sa7CnqGsN+ElVf+WQ0V0vjQ52vwHK+FsTifF7DPzUcYgHJZxltGln8iyU3ZmKZl3ZFscSWu/lN9F9U+HDwvFDpLpve/MnogNgUdri0PCAWXSzWQfcKellrzIq+0ugxdBjgSplKjCDBpBIoxklZLroClWS7dbLhz6G4BNd7ZTxVyuzXgF9wgJ8PiDr247Zg3D3QIIL2VObzdQyrfUMF7glt44A70NTO/ScaRn41Qu4b/4rUhD+HS6fz1e38c8AxKRu04Ix7cK2cVp5qe9pLXMSIMSB6lLsX+WlOypun4fg2XZZi6HT5651q/QG0KVCfEw1cd7vVJ0Uq7kUKUMFkxHjV/y2MI5TGUXZt8iGKRw43ol6NsWOFQ7n85Iyt5nDjlQmK4ndQ4ni2GkuOQO5lMBSmqadffTQAZgW0RsW0NI0p0m9j1lEWPxPQSLUyhAQP+np3twIDHF5Gtlvuw6QzC3TfQdCS3ZyH4PEFl3Ww2z0rtZgPMO0gQe6lSY28UGCu/g0p7eSSAtuy4Y53Jd/uzzhmB+oVMEiBWoLb3bOky0jU89OTXR/jXDvBI1jtZvBnd7w1DZvu+z5AVriy2qyOw9B0GyThZl/S1oKX542Q92TkNEbkEnaBriPBZRISjndHme0vlomXMX45uYeWJQpfZMlhPSRxMfvFh98NXUSTfCp2+KGaCWjfeSRY3KDge8tpG9FvOhzDPr6jz2FlawJuqdvi8xoDxWLooQ5DlqwiCOU6TkleBjnoAQ49g10yVIoH3MWKN9UiQ5pUHATYAzlr2e7qbfIHMv4FtlRbgWNNs3ikpgCx9/h0vUiK5z9dBTiuqPAGiabcUp9Rdexe/cF7qrwBZsjP4nOyzj8t1Z21hA0znJNYj1ykRWluixc3gA3FmqsrFJtWQcu3ouh0FQPTylFNf8OjV0OMaLKVVrJh+0bholj1SKVElpMT3YYVp/Hsk1zQRcv7rhiMocG9sdr1HgmNxOmP2yISfxXwhHUjNU3I5t2S2z1FMKnzOprTLEB7A8AR72GIyDZ30BlW4dzek6g5RESGX8lYfOpWDZjs9l/tw1a6vDybV4ohrtjs8zJXkIrII53QTyLBf6qzVkeBd4rn9PwBndU/UPvionxr08eSyyfLq7g74cEQBUa+KmiatXku19nh5ZyTsdXFby73GKlAG1eZwsqbe65EnNa8F3QEWcxJXu12sgSeHF2/lwfVI0Isew3JeG9FlnJA2WUTJVKaDH2mTq9vfYuCXvnNlB+FYcYcCaN9U1U4JXFEctdPZd6trJz48yhaRBrFF9Nl7MyvExLDbM2ymyE98+hhOIZ6HU1XRM2wa5vHg0R9IFsUBylpEaafGT7paRL9Jz8HiKn51acUDnvtbPp6cEl6L0PkJN4cYkeS9tJI79cSCqGvVwOTUnHJBAW1kjotpqImwg4MvOYdDgAAqfeyv7drP9waO7ogNwsXu4w2Kg1XBcF165xRdgBBqovH/mptykUqx6wA",m=JSON.parse('{"title":"Мобильное меню, CSS","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase-data/mobile-menu.md","filePath":"ru/arty-crafty/showcase-data/mobile-menu.md","lastUpdated":1726505115000}'),c={name:"ru/arty-crafty/showcase-data/mobile-menu.md"},r=o('

Мобильное меню, CSS

IconButton

В мобильном виде обычно на подобных сайтах есть нижнее меню. Кнопки с иконками тут сильно похожи на те, что используются в главном хедере, значит пора выделить их в отдельный компонент BaseIconButton. При создании базовых UI компонент есть искушение сделать его как можно универсальней, со множеством опций, но лучше делать самое необходимое с возможностью расширения позже. В нашем случае добавим только badge.

image

Заменяем в AppHeader кнопки на BaseIconButton.

SCSS => CSS

От SCSS мы используем только nesting (вкладывание селекторов друг в друга). Эта удобная фунциональность уже часть современного CSS, поддерживается последними версиями всех браузеров, но общая поддержка около 90%. Через полгода-год уже должна быть достаточная поддержка браузерами, чтобы мы использовали чистый CSS.

Перейдем на него уже сейчас, и будем использовать postcss-nesting пакет для преобразования CSS с nesting в простой CSS. Это позволит в будущем просто убрать этот пакет из проекта, не меняя код. В противном случае при переходе надо будет немного править каждый блок SCSS в каждом SFC.

Итак, убираем из зависимостей пакет sass, добавляем postcss-nesting, в каждом SFC файле убираем lang="scss", и заменяем двуслешные // ... комментарии SCSS на /* ... */ комментарии CSS. Всё работает.

Есть небольшая терпимая проблема с подсветкой CSS с nesting в VS Code, но есть и "плюс" - теперь по селектору из блока стилей можно по SHIFT+F12 попасть в нужное место в шаблоне. С SCSS это было нельзя.

Tag и CMV

Загружаем в репозиторий и ставим тэг - v0.4

Coding music video

',13),s=[r];function d(l,S,i,p,g,u){return a(),t("div",null,s)}const y=e(c,[["render",d]]);export{m as __pageData,y as default}; diff --git a/assets/ru_arty-crafty_showcase-data_mobile-menu.md.Bqv-U9L1.lean.js b/assets/ru_arty-crafty_showcase-data_mobile-menu.md.y-a-1Piz.lean.js similarity index 97% rename from assets/ru_arty-crafty_showcase-data_mobile-menu.md.Bqv-U9L1.lean.js rename to assets/ru_arty-crafty_showcase-data_mobile-menu.md.y-a-1Piz.lean.js index b6b678420..6f1e00354 100644 --- a/assets/ru_arty-crafty_showcase-data_mobile-menu.md.Bqv-U9L1.lean.js +++ b/assets/ru_arty-crafty_showcase-data_mobile-menu.md.y-a-1Piz.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const n="data:image/webp;base64,UklGRsoGAABXRUJQVlA4IL4GAACQKgCdASqkAUgAPp1Inkylo6KiIfQLYLATiWlu3V9w1VZIHAAeVV7Hvk3arYz3/Z+FPk2ELtM+y+Nfka8T01pwFYyaikn7kd+c+gj0eNBbMgHvqqVJB3+5KqOLIr7MlVHFbVnJd+72uBEzsqWz0D342wKV42LpSJhbxacDp2OwmI+fiHrx/5Q6/WI64gklOFU3sXTuNWX5EgNOIwSHrhtvnGmOAGdYbvuyg1pspMhN0jPkzAXwJqqGC8YqabnBChmZd/qmSOFUDvT90ZJTJiHWX3vNLcDszvU5sJIUdFQfvgcnVaj8iPR2y9by46D3nYqx7AOS1blDll2X0vhzBJl4zPXGgBwWC/e8TbxiVfncRp24UoIgVoX1KeQAJ81k1/d0eX33M7C3O9q3eGQxMQkfgTeCsudTZQxhw0Ektmp2p2w37bp1AOaJ6LMFnWmFShlituF1N2a9arPoURXIAP7+zD3PmfHZPmUKEB/rCyvpz5ROQFLMCLZ0Yjt5ODHcS0m82laTXHdURxu9AhIafUlcSsIH8k2zbc5yJghUvP3C0bv/9neSP8TOwQ7pAk/5QPN31ZH448xZMcu1ugpPv3P723k7/ubHYPmPpCxvcU9w7P4yyM40PNTj9WrAdUVPfzdh/lK6x3+/1D7Tr2W8Fg8bBpHewMFVo9s3PxShBSUzsFnC6vAuSGLyHqa3rVtxVmEvbA/vhJqnNaJMHxlSVwn7kh0yQnNGZJ+EHepQRM1cttwk+8dxadnKDzZCVKXEyrbfAg7J0p/gdN4yjwZD5VvOYWDwNvTCyt/MeW3Xr9sa7CnqGsN+ElVf+WQ0V0vjQ52vwHK+FsTifF7DPzUcYgHJZxltGln8iyU3ZmKZl3ZFscSWu/lN9F9U+HDwvFDpLpve/MnogNgUdri0PCAWXSzWQfcKellrzIq+0ugxdBjgSplKjCDBpBIoxklZLroClWS7dbLhz6G4BNd7ZTxVyuzXgF9wgJ8PiDr247Zg3D3QIIL2VObzdQyrfUMF7glt44A70NTO/ScaRn41Qu4b/4rUhD+HS6fz1e38c8AxKRu04Ix7cK2cVp5qe9pLXMSIMSB6lLsX+WlOypun4fg2XZZi6HT5651q/QG0KVCfEw1cd7vVJ0Uq7kUKUMFkxHjV/y2MI5TGUXZt8iGKRw43ol6NsWOFQ7n85Iyt5nDjlQmK4ndQ4ni2GkuOQO5lMBSmqadffTQAZgW0RsW0NI0p0m9j1lEWPxPQSLUyhAQP+np3twIDHF5Gtlvuw6QzC3TfQdCS3ZyH4PEFl3Ww2z0rtZgPMO0gQe6lSY28UGCu/g0p7eSSAtuy4Y53Jd/uzzhmB+oVMEiBWoLb3bOky0jU89OTXR/jXDvBI1jtZvBnd7w1DZvu+z5AVriy2qyOw9B0GyThZl/S1oKX542Q92TkNEbkEnaBriPBZRISjndHme0vlomXMX45uYeWJQpfZMlhPSRxMfvFh98NXUSTfCp2+KGaCWjfeSRY3KDge8tpG9FvOhzDPr6jz2FlawJuqdvi8xoDxWLooQ5DlqwiCOU6TkleBjnoAQ49g10yVIoH3MWKN9UiQ5pUHATYAzlr2e7qbfIHMv4FtlRbgWNNs3ikpgCx9/h0vUiK5z9dBTiuqPAGiabcUp9Rdexe/cF7qrwBZsjP4nOyzj8t1Z21hA0znJNYj1ykRWluixc3gA3FmqsrFJtWQcu3ouh0FQPTylFNf8OjV0OMaLKVVrJh+0bholj1SKVElpMT3YYVp/Hsk1zQRcv7rhiMocG9sdr1HgmNxOmP2yISfxXwhHUjNU3I5t2S2z1FMKnzOprTLEB7A8AR72GIyDZ30BlW4dzek6g5RESGX8lYfOpWDZjs9l/tw1a6vDybV4ohrtjs8zJXkIrII53QTyLBf6qzVkeBd4rn9PwBndU/UPvionxr08eSyyfLq7g74cEQBUa+KmiatXku19nh5ZyTsdXFby73GKlAG1eZwsqbe65EnNa8F3QEWcxJXu12sgSeHF2/lwfVI0Isew3JeG9FlnJA2WUTJVKaDH2mTq9vfYuCXvnNlB+FYcYcCaN9U1U4JXFEctdPZd6trJz48yhaRBrFF9Nl7MyvExLDbM2ymyE98+hhOIZ6HU1XRM2wa5vHg0R9IFsUBylpEaafGT7paRL9Jz8HiKn51acUDnvtbPp6cEl6L0PkJN4cYkeS9tJI79cSCqGvVwOTUnHJBAW1kjotpqImwg4MvOYdDgAAqfeyv7drP9waO7ogNwsXu4w2Kg1XBcF165xRdgBBqovH/mptykUqx6wA",m=JSON.parse('{"title":"Мобильное меню, CSS","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase-data/mobile-menu.md","filePath":"ru/arty-crafty/showcase-data/mobile-menu.md","lastUpdated":1726474804000}'),c={name:"ru/arty-crafty/showcase-data/mobile-menu.md"},r=o("",13),s=[r];function d(l,S,i,p,g,u){return a(),t("div",null,s)}const y=e(c,[["render",d]]);export{m as __pageData,y as default}; +import{_ as e,o as a,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const n="data:image/webp;base64,UklGRsoGAABXRUJQVlA4IL4GAACQKgCdASqkAUgAPp1Inkylo6KiIfQLYLATiWlu3V9w1VZIHAAeVV7Hvk3arYz3/Z+FPk2ELtM+y+Nfka8T01pwFYyaikn7kd+c+gj0eNBbMgHvqqVJB3+5KqOLIr7MlVHFbVnJd+72uBEzsqWz0D342wKV42LpSJhbxacDp2OwmI+fiHrx/5Q6/WI64gklOFU3sXTuNWX5EgNOIwSHrhtvnGmOAGdYbvuyg1pspMhN0jPkzAXwJqqGC8YqabnBChmZd/qmSOFUDvT90ZJTJiHWX3vNLcDszvU5sJIUdFQfvgcnVaj8iPR2y9by46D3nYqx7AOS1blDll2X0vhzBJl4zPXGgBwWC/e8TbxiVfncRp24UoIgVoX1KeQAJ81k1/d0eX33M7C3O9q3eGQxMQkfgTeCsudTZQxhw0Ektmp2p2w37bp1AOaJ6LMFnWmFShlituF1N2a9arPoURXIAP7+zD3PmfHZPmUKEB/rCyvpz5ROQFLMCLZ0Yjt5ODHcS0m82laTXHdURxu9AhIafUlcSsIH8k2zbc5yJghUvP3C0bv/9neSP8TOwQ7pAk/5QPN31ZH448xZMcu1ugpPv3P723k7/ubHYPmPpCxvcU9w7P4yyM40PNTj9WrAdUVPfzdh/lK6x3+/1D7Tr2W8Fg8bBpHewMFVo9s3PxShBSUzsFnC6vAuSGLyHqa3rVtxVmEvbA/vhJqnNaJMHxlSVwn7kh0yQnNGZJ+EHepQRM1cttwk+8dxadnKDzZCVKXEyrbfAg7J0p/gdN4yjwZD5VvOYWDwNvTCyt/MeW3Xr9sa7CnqGsN+ElVf+WQ0V0vjQ52vwHK+FsTifF7DPzUcYgHJZxltGln8iyU3ZmKZl3ZFscSWu/lN9F9U+HDwvFDpLpve/MnogNgUdri0PCAWXSzWQfcKellrzIq+0ugxdBjgSplKjCDBpBIoxklZLroClWS7dbLhz6G4BNd7ZTxVyuzXgF9wgJ8PiDr247Zg3D3QIIL2VObzdQyrfUMF7glt44A70NTO/ScaRn41Qu4b/4rUhD+HS6fz1e38c8AxKRu04Ix7cK2cVp5qe9pLXMSIMSB6lLsX+WlOypun4fg2XZZi6HT5651q/QG0KVCfEw1cd7vVJ0Uq7kUKUMFkxHjV/y2MI5TGUXZt8iGKRw43ol6NsWOFQ7n85Iyt5nDjlQmK4ndQ4ni2GkuOQO5lMBSmqadffTQAZgW0RsW0NI0p0m9j1lEWPxPQSLUyhAQP+np3twIDHF5Gtlvuw6QzC3TfQdCS3ZyH4PEFl3Ww2z0rtZgPMO0gQe6lSY28UGCu/g0p7eSSAtuy4Y53Jd/uzzhmB+oVMEiBWoLb3bOky0jU89OTXR/jXDvBI1jtZvBnd7w1DZvu+z5AVriy2qyOw9B0GyThZl/S1oKX542Q92TkNEbkEnaBriPBZRISjndHme0vlomXMX45uYeWJQpfZMlhPSRxMfvFh98NXUSTfCp2+KGaCWjfeSRY3KDge8tpG9FvOhzDPr6jz2FlawJuqdvi8xoDxWLooQ5DlqwiCOU6TkleBjnoAQ49g10yVIoH3MWKN9UiQ5pUHATYAzlr2e7qbfIHMv4FtlRbgWNNs3ikpgCx9/h0vUiK5z9dBTiuqPAGiabcUp9Rdexe/cF7qrwBZsjP4nOyzj8t1Z21hA0znJNYj1ykRWluixc3gA3FmqsrFJtWQcu3ouh0FQPTylFNf8OjV0OMaLKVVrJh+0bholj1SKVElpMT3YYVp/Hsk1zQRcv7rhiMocG9sdr1HgmNxOmP2yISfxXwhHUjNU3I5t2S2z1FMKnzOprTLEB7A8AR72GIyDZ30BlW4dzek6g5RESGX8lYfOpWDZjs9l/tw1a6vDybV4ohrtjs8zJXkIrII53QTyLBf6qzVkeBd4rn9PwBndU/UPvionxr08eSyyfLq7g74cEQBUa+KmiatXku19nh5ZyTsdXFby73GKlAG1eZwsqbe65EnNa8F3QEWcxJXu12sgSeHF2/lwfVI0Isew3JeG9FlnJA2WUTJVKaDH2mTq9vfYuCXvnNlB+FYcYcCaN9U1U4JXFEctdPZd6trJz48yhaRBrFF9Nl7MyvExLDbM2ymyE98+hhOIZ6HU1XRM2wa5vHg0R9IFsUBylpEaafGT7paRL9Jz8HiKn51acUDnvtbPp6cEl6L0PkJN4cYkeS9tJI79cSCqGvVwOTUnHJBAW1kjotpqImwg4MvOYdDgAAqfeyv7drP9waO7ogNwsXu4w2Kg1XBcF165xRdgBBqovH/mptykUqx6wA",m=JSON.parse('{"title":"Мобильное меню, CSS","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase-data/mobile-menu.md","filePath":"ru/arty-crafty/showcase-data/mobile-menu.md","lastUpdated":1726505115000}'),c={name:"ru/arty-crafty/showcase-data/mobile-menu.md"},r=o("",13),s=[r];function d(l,S,i,p,g,u){return a(),t("div",null,s)}const y=e(c,[["render",d]]);export{m as __pageData,y as default}; diff --git a/assets/ru_arty-crafty_showcase-data_product-page.md.COQ7fGLF.js b/assets/ru_arty-crafty_showcase-data_product-page.md.DW3X4VqI.js similarity index 96% rename from assets/ru_arty-crafty_showcase-data_product-page.md.COQ7fGLF.js rename to assets/ru_arty-crafty_showcase-data_product-page.md.DW3X4VqI.js index 6e6ac05ef..506990508 100644 --- a/assets/ru_arty-crafty_showcase-data_product-page.md.COQ7fGLF.js +++ b/assets/ru_arty-crafty_showcase-data_product-page.md.DW3X4VqI.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"Слайдер, ProductView","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase-data/product-page.md","filePath":"ru/arty-crafty/showcase-data/product-page.md","lastUpdated":1726474804000}'),o={name:"ru/arty-crafty/showcase-data/product-page.md"},c=r('

Слайдер, ProductView

На главную страницу для красоты поставили embla-carousel - это легкий js слайдер, многие опции которого управляются через CSS стили, что может быть непривычно, но намного эффективней прослойки из пропсов и дополнительных Vue компонент. Пока заполнили его картинками товаров, после надо будет адаптировать под него карточки товаров.

ProductView

Пришло время страницы товара. Она состоит из галереи картинок/видео.

',5),s=[c];function d(i,n,l,u,p,m){return e(),t("div",null,s)}const f=a(o,[["render",d]]);export{h as __pageData,f as default}; +import{_ as a,o as e,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"Слайдер, ProductView","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase-data/product-page.md","filePath":"ru/arty-crafty/showcase-data/product-page.md","lastUpdated":1726505115000}'),o={name:"ru/arty-crafty/showcase-data/product-page.md"},c=r('

Слайдер, ProductView

На главную страницу для красоты поставили embla-carousel - это легкий js слайдер, многие опции которого управляются через CSS стили, что может быть непривычно, но намного эффективней прослойки из пропсов и дополнительных Vue компонент. Пока заполнили его картинками товаров, после надо будет адаптировать под него карточки товаров.

ProductView

Пришло время страницы товара. Она состоит из галереи картинок/видео.

',5),s=[c];function d(i,n,l,u,p,m){return e(),t("div",null,s)}const f=a(o,[["render",d]]);export{h as __pageData,f as default}; diff --git a/assets/ru_arty-crafty_showcase-data_product-page.md.COQ7fGLF.lean.js b/assets/ru_arty-crafty_showcase-data_product-page.md.DW3X4VqI.lean.js similarity index 92% rename from assets/ru_arty-crafty_showcase-data_product-page.md.COQ7fGLF.lean.js rename to assets/ru_arty-crafty_showcase-data_product-page.md.DW3X4VqI.lean.js index 2c009298c..62e8610b8 100644 --- a/assets/ru_arty-crafty_showcase-data_product-page.md.COQ7fGLF.lean.js +++ b/assets/ru_arty-crafty_showcase-data_product-page.md.DW3X4VqI.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"Слайдер, ProductView","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase-data/product-page.md","filePath":"ru/arty-crafty/showcase-data/product-page.md","lastUpdated":1726474804000}'),o={name:"ru/arty-crafty/showcase-data/product-page.md"},c=r("",5),s=[c];function d(i,n,l,u,p,m){return e(),t("div",null,s)}const f=a(o,[["render",d]]);export{h as __pageData,f as default}; +import{_ as a,o as e,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"Слайдер, ProductView","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase-data/product-page.md","filePath":"ru/arty-crafty/showcase-data/product-page.md","lastUpdated":1726505115000}'),o={name:"ru/arty-crafty/showcase-data/product-page.md"},c=r("",5),s=[c];function d(i,n,l,u,p,m){return e(),t("div",null,s)}const f=a(o,[["render",d]]);export{h as __pageData,f as default}; diff --git a/assets/ru_arty-crafty_showcase-data_typescript.md.CEmSWr9D.js b/assets/ru_arty-crafty_showcase-data_typescript.md.BIS5zPOZ.js similarity index 99% rename from assets/ru_arty-crafty_showcase-data_typescript.md.CEmSWr9D.js rename to assets/ru_arty-crafty_showcase-data_typescript.md.BIS5zPOZ.js index 8ee63d76e..2f2d4c7dc 100644 --- a/assets/ru_arty-crafty_showcase-data_typescript.md.CEmSWr9D.js +++ b/assets/ru_arty-crafty_showcase-data_typescript.md.BIS5zPOZ.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const E=JSON.parse('{"title":"TypeScript","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase-data/typescript.md","filePath":"ru/arty-crafty/showcase-data/typescript.md","lastUpdated":1726474804000}'),n={name:"ru/arty-crafty/showcase-data/typescript.md"},h=t(`

TypeScript

index.d.ts

Пришло время добавить типы. У нас уже есть две основных сущности - Product и ProductCategory. Их определяем в index.d.ts файле:

ts
interface Product {
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const E=JSON.parse('{"title":"TypeScript","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase-data/typescript.md","filePath":"ru/arty-crafty/showcase-data/typescript.md","lastUpdated":1726505115000}'),n={name:"ru/arty-crafty/showcase-data/typescript.md"},h=t(`

TypeScript

index.d.ts

Пришло время добавить типы. У нас уже есть две основных сущности - Product и ProductCategory. Их определяем в index.d.ts файле:

ts
interface Product {
   id: number
   title: string
   summary?: any
diff --git a/assets/ru_arty-crafty_showcase-data_typescript.md.CEmSWr9D.lean.js b/assets/ru_arty-crafty_showcase-data_typescript.md.BIS5zPOZ.lean.js
similarity index 91%
rename from assets/ru_arty-crafty_showcase-data_typescript.md.CEmSWr9D.lean.js
rename to assets/ru_arty-crafty_showcase-data_typescript.md.BIS5zPOZ.lean.js
index 8e23aa327..55c44dba4 100644
--- a/assets/ru_arty-crafty_showcase-data_typescript.md.CEmSWr9D.lean.js
+++ b/assets/ru_arty-crafty_showcase-data_typescript.md.BIS5zPOZ.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const E=JSON.parse('{"title":"TypeScript","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase-data/typescript.md","filePath":"ru/arty-crafty/showcase-data/typescript.md","lastUpdated":1726474804000}'),n={name:"ru/arty-crafty/showcase-data/typescript.md"},h=t("",8),p=[h];function k(l,e,r,d,y,c){return i(),a("div",null,p)}const o=s(n,[["render",k]]);export{E as __pageData,o as default};
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const E=JSON.parse('{"title":"TypeScript","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase-data/typescript.md","filePath":"ru/arty-crafty/showcase-data/typescript.md","lastUpdated":1726505115000}'),n={name:"ru/arty-crafty/showcase-data/typescript.md"},h=t("",8),p=[h];function k(l,e,r,d,y,c){return i(),a("div",null,p)}const o=s(n,[["render",k]]);export{E as __pageData,o as default};
diff --git a/assets/ru_arty-crafty_showcase-data_vueuse.md.BuVpv0qo.js b/assets/ru_arty-crafty_showcase-data_vueuse.md.DwWJLsbv.js
similarity index 99%
rename from assets/ru_arty-crafty_showcase-data_vueuse.md.BuVpv0qo.js
rename to assets/ru_arty-crafty_showcase-data_vueuse.md.DwWJLsbv.js
index 53db8f5bf..df94958ce 100644
--- a/assets/ru_arty-crafty_showcase-data_vueuse.md.BuVpv0qo.js
+++ b/assets/ru_arty-crafty_showcase-data_vueuse.md.DwWJLsbv.js
@@ -1,4 +1,4 @@
-import{_ as s,o as a,c as e,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"VueUse","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase-data/vueuse.md","filePath":"ru/arty-crafty/showcase-data/vueuse.md","lastUpdated":1726474804000}'),t={name:"ru/arty-crafty/showcase-data/vueuse.md"},o=i(`

VueUse

useLocalStorage

В проекте у нас есть несколько переменных, значения которых надо сохранять в LocalStorage - например, isDarkMode, favourites, shoppingCart. Также, для UX полезно, чтобы эта связь была реактивной - тогда при нескольких открытых вкладках изменение корзины или цветовой темы в одной сразу будет отражаться в другой.

Для этого была реализована своя версия useLocalStorage.

Любую реактивную переменную проекта можно зарегистрировать в этом композабле, и её значение станет динамично отображаться в LocalStorage и обратно:

js
// init.ts
+import{_ as s,o as a,c as e,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"VueUse","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase-data/vueuse.md","filePath":"ru/arty-crafty/showcase-data/vueuse.md","lastUpdated":1726505115000}'),t={name:"ru/arty-crafty/showcase-data/vueuse.md"},o=i(`

VueUse

useLocalStorage

В проекте у нас есть несколько переменных, значения которых надо сохранять в LocalStorage - например, isDarkMode, favourites, shoppingCart. Также, для UX полезно, чтобы эта связь была реактивной - тогда при нескольких открытых вкладках изменение корзины или цветовой темы в одной сразу будет отражаться в другой.

Для этого была реализована своя версия useLocalStorage.

Любую реактивную переменную проекта можно зарегистрировать в этом композабле, и её значение станет динамично отображаться в LocalStorage и обратно:

js
// init.ts
 import { useLocalStorage } from "@/app/composables/useLocalStorage";
 
 const ls = useLocalStorage();
diff --git a/assets/ru_arty-crafty_showcase-data_vueuse.md.BuVpv0qo.lean.js b/assets/ru_arty-crafty_showcase-data_vueuse.md.DwWJLsbv.lean.js
similarity index 91%
rename from assets/ru_arty-crafty_showcase-data_vueuse.md.BuVpv0qo.lean.js
rename to assets/ru_arty-crafty_showcase-data_vueuse.md.DwWJLsbv.lean.js
index 482777d4a..b35ff9518 100644
--- a/assets/ru_arty-crafty_showcase-data_vueuse.md.BuVpv0qo.lean.js
+++ b/assets/ru_arty-crafty_showcase-data_vueuse.md.DwWJLsbv.lean.js
@@ -1 +1 @@
-import{_ as s,o as a,c as e,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"VueUse","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase-data/vueuse.md","filePath":"ru/arty-crafty/showcase-data/vueuse.md","lastUpdated":1726474804000}'),t={name:"ru/arty-crafty/showcase-data/vueuse.md"},o=i("",11),n=[o];function l(p,r,c,h,d,k){return a(),e("div",null,n)}const E=s(t,[["render",l]]);export{u as __pageData,E as default};
+import{_ as s,o as a,c as e,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"VueUse","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase-data/vueuse.md","filePath":"ru/arty-crafty/showcase-data/vueuse.md","lastUpdated":1726505115000}'),t={name:"ru/arty-crafty/showcase-data/vueuse.md"},o=i("",11),n=[o];function l(p,r,c,h,d,k){return a(),e("div",null,n)}const E=s(t,[["render",l]]);export{u as __pageData,E as default};
diff --git a/assets/ru_arty-crafty_showcase_codeium.md.DKDqibQO.js b/assets/ru_arty-crafty_showcase_codeium.md.CYYRwnGw.js
similarity index 99%
rename from assets/ru_arty-crafty_showcase_codeium.md.DKDqibQO.js
rename to assets/ru_arty-crafty_showcase_codeium.md.CYYRwnGw.js
index 1f2829fc1..112e8f1e9 100644
--- a/assets/ru_arty-crafty_showcase_codeium.md.DKDqibQO.js
+++ b/assets/ru_arty-crafty_showcase_codeium.md.CYYRwnGw.js
@@ -1,4 +1,4 @@
-import{_ as a,o as s,c as e,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const t="/assets/codeium-1.CAoLM-Ra.jpg",o="/assets/codeium-2.6cftlopa.jpg",n="/assets/codeium-3.CA7MW0fv.jpg",f=JSON.parse('{"title":"Codeium","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase/codeium.md","filePath":"ru/arty-crafty/showcase/codeium.md","lastUpdated":1726474804000}'),r={name:"ru/arty-crafty/showcase/codeium.md"},p=i('

Codeium

Автокомплит

Codeium - это AI помощник, аналогичный Copilot, его бесплатная альтернатива. У него есть расширение для VS Code и других IDE.

В прошлой главе useFavourites был на 80% написан им с помощью автокомплита. Ты начинаешь писать название функции, он генерит её тело на основании контекста, ты клавишей Tab принимаешь его решение, либо выбираешь другое из предложенных с помощью комбинаций клавиш Alt + ] и Alt + [ (⌥ + ] и ⌥ + [ ):

image

Для подобных довольно простых по логике модулей и компонент Codeium генерит код достаточно точно. Удобно пользоваться.

Чтобы поточнее подсказать Codeium, что тебе надо, можно сперва написать комментарий о функции, которую надо сгенерить, и затем на следующей строке использовать автокомплит.

Чат-бот

Чат-бот для промптов есть в отдельной Codeium панели

Explain, Refactor, JSDoc

Над каждой функцией Codeium позволяет совершать определенные действия:

image

Например, Refactor -> Make this code strongly typed с небольшими правками дает следующее на listFavourites():

js
/**
+import{_ as a,o as s,c as e,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const t="/assets/codeium-1.CAoLM-Ra.jpg",o="/assets/codeium-2.6cftlopa.jpg",n="/assets/codeium-3.CA7MW0fv.jpg",f=JSON.parse('{"title":"Codeium","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase/codeium.md","filePath":"ru/arty-crafty/showcase/codeium.md","lastUpdated":1726505115000}'),r={name:"ru/arty-crafty/showcase/codeium.md"},p=i('

Codeium

Автокомплит

Codeium - это AI помощник, аналогичный Copilot, его бесплатная альтернатива. У него есть расширение для VS Code и других IDE.

В прошлой главе useFavourites был на 80% написан им с помощью автокомплита. Ты начинаешь писать название функции, он генерит её тело на основании контекста, ты клавишей Tab принимаешь его решение, либо выбираешь другое из предложенных с помощью комбинаций клавиш Alt + ] и Alt + [ (⌥ + ] и ⌥ + [ ):

image

Для подобных довольно простых по логике модулей и компонент Codeium генерит код достаточно точно. Удобно пользоваться.

Чтобы поточнее подсказать Codeium, что тебе надо, можно сперва написать комментарий о функции, которую надо сгенерить, и затем на следующей строке использовать автокомплит.

Чат-бот

Чат-бот для промптов есть в отдельной Codeium панели

Explain, Refactor, JSDoc

Над каждой функцией Codeium позволяет совершать определенные действия:

image

Например, Refactor -> Make this code strongly typed с небольшими правками дает следующее на listFavourites():

js
/**
  * Returns a list of favorite products.
  *
  * @returns {Array<number>} - The list of favorite product IDs.
diff --git a/assets/ru_arty-crafty_showcase_codeium.md.DKDqibQO.lean.js b/assets/ru_arty-crafty_showcase_codeium.md.CYYRwnGw.lean.js
similarity index 92%
rename from assets/ru_arty-crafty_showcase_codeium.md.DKDqibQO.lean.js
rename to assets/ru_arty-crafty_showcase_codeium.md.CYYRwnGw.lean.js
index 58054adb0..451abca20 100644
--- a/assets/ru_arty-crafty_showcase_codeium.md.DKDqibQO.lean.js
+++ b/assets/ru_arty-crafty_showcase_codeium.md.CYYRwnGw.lean.js
@@ -1 +1 @@
-import{_ as a,o as s,c as e,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const t="/assets/codeium-1.CAoLM-Ra.jpg",o="/assets/codeium-2.6cftlopa.jpg",n="/assets/codeium-3.CA7MW0fv.jpg",f=JSON.parse('{"title":"Codeium","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase/codeium.md","filePath":"ru/arty-crafty/showcase/codeium.md","lastUpdated":1726474804000}'),r={name:"ru/arty-crafty/showcase/codeium.md"},p=i("",23),l=[p];function c(h,d,k,u,m,g){return s(),e("div",null,l)}const E=a(r,[["render",c]]);export{f as __pageData,E as default};
+import{_ as a,o as s,c as e,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const t="/assets/codeium-1.CAoLM-Ra.jpg",o="/assets/codeium-2.6cftlopa.jpg",n="/assets/codeium-3.CA7MW0fv.jpg",f=JSON.parse('{"title":"Codeium","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase/codeium.md","filePath":"ru/arty-crafty/showcase/codeium.md","lastUpdated":1726505115000}'),r={name:"ru/arty-crafty/showcase/codeium.md"},p=i("",23),l=[p];function c(h,d,k,u,m,g){return s(),e("div",null,l)}const E=a(r,[["render",c]]);export{f as __pageData,E as default};
diff --git a/assets/ru_arty-crafty_showcase_customization.md.DAz-pzTc.js b/assets/ru_arty-crafty_showcase_customization.md.DAz-pzTc.js
deleted file mode 100644
index 85c4b40db..000000000
--- a/assets/ru_arty-crafty_showcase_customization.md.DAz-pzTc.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import{_ as a,o as b,c as t,a4 as s}from"./chunks/framework.B8KxSsRZ.js";const e="/assets/header-1.DYnB8MuV.gif",i="/assets/website-1.ChpdKS0X.gif",u=JSON.parse('{"title":"Кастомизация","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase/customization.md","filePath":"ru/arty-crafty/showcase/customization.md","lastUpdated":1726474804000}'),c={name:"ru/arty-crafty/showcase/customization.md"},d=s(`

Кастомизация

Персонализация

Заменим везде имя на "Arty-Crafty", изменим описание в package.json. Найдем в интернете подходящую иконку для логотипа, и заменим штатную.

Теперь скроем сайдбар в tablet и desktop режимах, потому что в нем должен быть каталог только в мобильном режиме. Для других каталог будет из меню в хедере.

Далее, мы будем делать приложение в модульной архитектуре. Общие компоненты, утилиты, композаблы и ресурсы у нас будут в модуле app, то, что относится к каталогу, категориям товаров и самим товарам - в products, и так далее. Поэтому нужно в src создать дирректорию app и перенести всё в неё, с заменой путей, где надо.

Загружаем все на GitHub и ставим тэг - v0.1. Для этого нужно опубликовать релиз.

Views

Чистим главную страницу, i18n убираем пока подальше. Переименовываем основные view на:

  • HomeView (остается)
  • ProductCategoryView
  • ProductView

Замечание

Предпочтительно использовать термин View, а не Page потому, что View может быть частью другого View, а Page - нет (семантически).

ProductCategoryView и ProductView убираем в директорию views модуля products.

Routes

Обновляем routes. Добавляем роуты для product, category, favourites, cart и login

js
const routes: RouteRecordRaw[] = [
-  // ...
-  {
-    path: "/product/:productId",
-    name: "product",
-    component: ProductView,
-  },
-  {
-    path: "/category/:categoryId",
-    name: "category",
-    component: ProductCategoryView,
-  },
-  {
-    path: "/favourites",
-    name: "favourites",
-    component: ProductCategoryView,
-  },
-  // ...
-];

Маршруты пока оставляем в главном модуле, при росте их числа - разобьем.

Отмечаем, что в солидных магазинах ссылка на категорию выглядит примерно так: /category/muzhskaya-odezhda-7542/. То есть, slug названия категории и её id. У нас будет пока только categoryId, но в дальнейшем мы сделаем такую человеко-понятную ссылку - это полезно для UX и для SEO. То же самое с продуктами.

Делаем хедер - с лого, поисковой строкой, иконками корзины, логина/аккаунта, избранного справа, и снизу меню с 2-3 категориями.

На аналогичных сайтах поисковая строка может быть весьма непростой - с выпадающим меню с подсказками, например, или каталогом. Поэтому сразу выделим её в отдельный компонент - AppSearchBar. Находим в интернете подходящую стилизацию input и используем её.

Подходящие иконки можно поискать на iconbuddy.app и icones.js.org. Для их отображения используем BaseIcon.

Добавляем немного эффектов, адаптивности, и получаем:

image

В выдвигающемся слева сайдбаре также захардкодим несколько категорий. Более тщательную кастомизацию оставим на потом.

В итоге:

image

Небольшой рефакторинг

Переименуем наш кастомизированный компонент MantineSimpleHeader в AppHeader и все остальные также.

Загружаем в репозиторий и ставим тэг - v0.2.

',29),n=[d];function o(p,r,l,h,v,k){return b(),t("div",null,n)}const g=a(c,[["render",o],["__scopeId","data-v-c60bbba4"]]);export{u as __pageData,g as default}; diff --git a/assets/ru_arty-crafty_showcase_customization.md.LAUIQLeS.js b/assets/ru_arty-crafty_showcase_customization.md.LAUIQLeS.js new file mode 100644 index 000000000..640061ef6 --- /dev/null +++ b/assets/ru_arty-crafty_showcase_customization.md.LAUIQLeS.js @@ -0,0 +1,19 @@ +import{_ as a,o as d,c as t,a4 as s}from"./chunks/framework.B8KxSsRZ.js";const e="/assets/header-1.DYnB8MuV.gif",i="/assets/website-1.ChpdKS0X.gif",g=JSON.parse('{"title":"Кастомизация","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase/customization.md","filePath":"ru/arty-crafty/showcase/customization.md","lastUpdated":1726505115000}'),c={name:"ru/arty-crafty/showcase/customization.md"},n=s(`

Кастомизация

Персонализация

Заменим везде имя на "Arty-Crafty", изменим описание в package.json. Найдем в интернете подходящую иконку для логотипа, и заменим штатную.

Теперь скроем сайдбар в tablet и desktop режимах, потому что в нем должен быть каталог только в мобильном режиме. Для других каталог будет из меню в хедере.

Далее, мы будем делать приложение в модульной архитектуре. Общие компоненты, утилиты, композаблы и ресурсы у нас будут в модуле app, то, что относится к каталогу, категориям товаров и самим товарам - в products, и так далее. Поэтому нужно в src создать дирректорию app и перенести всё в неё, с заменой путей, где надо.

Загружаем все на GitHub и ставим тэг - v0.1. Для этого нужно опубликовать релиз.

Views

Чистим главную страницу, i18n убираем пока подальше. Переименовываем основные view на:

  • HomeView (остается)
  • ProductCategoryView
  • ProductView

Замечание

Предпочтительно использовать термин View, а не Page потому, что View может быть частью другого View, а Page - нет (семантически).

ProductCategoryView и ProductView убираем в директорию views модуля products.

Routes

Обновляем routes. Добавляем роуты для product, category, favourites, cart и login

js
const routes: RouteRecordRaw[] = [
+  // ...
+  {
+    path: "/product/:productId",
+    name: "product",
+    component: ProductView,
+  },
+  {
+    path: "/category/:categoryId",
+    name: "category",
+    component: ProductCategoryView,
+  },
+  {
+    path: "/favourites",
+    name: "favourites",
+    component: ProductCategoryView,
+  },
+  // ...
+];

Маршруты пока оставляем в главном модуле, при росте их числа - разобьем.

Отмечаем, что в солидных магазинах ссылка на категорию выглядит примерно так: /category/muzhskaya-odezhda-7542/. То есть, slug названия категории и её id. У нас будет пока только categoryId, но в дальнейшем мы сделаем такую человеко-понятную ссылку - это полезно для UX и для SEO. То же самое с продуктами.

Делаем хедер - с лого, поисковой строкой, иконками корзины, логина/аккаунта, избранного справа, и снизу меню с 2-3 категориями.

На аналогичных сайтах поисковая строка может быть весьма непростой - с выпадающим меню с подсказками, например, или каталогом. Поэтому сразу выделим её в отдельный компонент - AppSearchBar. Находим в интернете подходящую стилизацию input и используем её.

Подходящие иконки можно поискать на iconbuddy.app и icones.js.org. Для их отображения используем BaseIcon.

Добавляем немного эффектов, адаптивности, и получаем:

image

В выдвигающемся слева сайдбаре также захардкодим несколько категорий. Более тщательную кастомизацию оставим на потом.

В итоге:

image

Небольшой рефакторинг

Переименуем наш кастомизированный компонент MantineSimpleHeader в AppHeader и все остальные также.

Загружаем в репозиторий и ставим тэг - v0.2.

',29),o=[n];function p(r,l,h,v,k,E){return d(),t("div",null,o)}const y=a(c,[["render",p],["__scopeId","data-v-c1115a6d"]]);export{g as __pageData,y as default}; diff --git a/assets/ru_arty-crafty_showcase_customization.md.DAz-pzTc.lean.js b/assets/ru_arty-crafty_showcase_customization.md.LAUIQLeS.lean.js similarity index 57% rename from assets/ru_arty-crafty_showcase_customization.md.DAz-pzTc.lean.js rename to assets/ru_arty-crafty_showcase_customization.md.LAUIQLeS.lean.js index c8d971eed..f39368036 100644 --- a/assets/ru_arty-crafty_showcase_customization.md.DAz-pzTc.lean.js +++ b/assets/ru_arty-crafty_showcase_customization.md.LAUIQLeS.lean.js @@ -1 +1 @@ -import{_ as a,o as b,c as t,a4 as s}from"./chunks/framework.B8KxSsRZ.js";const e="/assets/header-1.DYnB8MuV.gif",i="/assets/website-1.ChpdKS0X.gif",u=JSON.parse('{"title":"Кастомизация","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase/customization.md","filePath":"ru/arty-crafty/showcase/customization.md","lastUpdated":1726474804000}'),c={name:"ru/arty-crafty/showcase/customization.md"},d=s("",29),n=[d];function o(p,r,l,h,v,k){return b(),t("div",null,n)}const g=a(c,[["render",o],["__scopeId","data-v-c60bbba4"]]);export{u as __pageData,g as default}; +import{_ as a,o as d,c as t,a4 as s}from"./chunks/framework.B8KxSsRZ.js";const e="/assets/header-1.DYnB8MuV.gif",i="/assets/website-1.ChpdKS0X.gif",g=JSON.parse('{"title":"Кастомизация","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase/customization.md","filePath":"ru/arty-crafty/showcase/customization.md","lastUpdated":1726505115000}'),c={name:"ru/arty-crafty/showcase/customization.md"},n=s("",29),o=[n];function p(r,l,h,v,k,E){return d(),t("div",null,o)}const y=a(c,[["render",p],["__scopeId","data-v-c1115a6d"]]);export{g as __pageData,y as default}; diff --git a/assets/ru_arty-crafty_showcase_favourites.md.Bq85uXVz.js b/assets/ru_arty-crafty_showcase_favourites.md.BtFw6vgv.js similarity index 99% rename from assets/ru_arty-crafty_showcase_favourites.md.Bq85uXVz.js rename to assets/ru_arty-crafty_showcase_favourites.md.BtFw6vgv.js index 109819614..96bcc9ebe 100644 --- a/assets/ru_arty-crafty_showcase_favourites.md.Bq85uXVz.js +++ b/assets/ru_arty-crafty_showcase_favourites.md.BtFw6vgv.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Избранное","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase/favourites.md","filePath":"ru/arty-crafty/showcase/favourites.md","lastUpdated":1726474804000}'),n={name:"ru/arty-crafty/showcase/favourites.md"},h=t(`

Избранное

Иконка на карточке товара

При работе с карточками товара у нас появилась необходимость в "Избранном". На каждой карточке есть иконка "сердечка", которая при клике загорается или гаснет, - товар кладется в "Избранное" или убирается оттуда. Кроме того, есть отдельная страница "Избранное", показывающая все товары из него в том же виде, что и любая категория. А так же в главном AppHeader у нас есть иконка/ссылка "Избранное" с бэджиком, показывающим число товаров в нём.

Это первый случай, когда в приложении нужно использовать то, что на фронтенде гордо называется state, для своей работы требующий отдельный state manager. Благо, Vue 3 Composition API низвело этого царька до рядового члена команды, и с ним теперь можно работать как с обычной переменной, только реактивной.

Композабл useFavourites

В композабле useFavourites для вышеуказанных задач нужны три функции: toggleFavourite, listFavourites, isInFavourites (чтобы подсвечивать иконку "сердечка").

Сам код
js
// src/products/composables/useFavourites.ts
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Избранное","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase/favourites.md","filePath":"ru/arty-crafty/showcase/favourites.md","lastUpdated":1726505115000}'),n={name:"ru/arty-crafty/showcase/favourites.md"},h=t(`

Избранное

Иконка на карточке товара

При работе с карточками товара у нас появилась необходимость в "Избранном". На каждой карточке есть иконка "сердечка", которая при клике загорается или гаснет, - товар кладется в "Избранное" или убирается оттуда. Кроме того, есть отдельная страница "Избранное", показывающая все товары из него в том же виде, что и любая категория. А так же в главном AppHeader у нас есть иконка/ссылка "Избранное" с бэджиком, показывающим число товаров в нём.

Это первый случай, когда в приложении нужно использовать то, что на фронтенде гордо называется state, для своей работы требующий отдельный state manager. Благо, Vue 3 Composition API низвело этого царька до рядового члена команды, и с ним теперь можно работать как с обычной переменной, только реактивной.

Композабл useFavourites

В композабле useFavourites для вышеуказанных задач нужны три функции: toggleFavourite, listFavourites, isInFavourites (чтобы подсвечивать иконку "сердечка").

Сам код
js
// src/products/composables/useFavourites.ts
 import { ref } from "vue";
 
 const favourites = ref < Set < number >> (new Set());
diff --git a/assets/ru_arty-crafty_showcase_favourites.md.Bq85uXVz.lean.js b/assets/ru_arty-crafty_showcase_favourites.md.BtFw6vgv.lean.js
similarity index 83%
rename from assets/ru_arty-crafty_showcase_favourites.md.Bq85uXVz.lean.js
rename to assets/ru_arty-crafty_showcase_favourites.md.BtFw6vgv.lean.js
index a1e8e7460..e3e7e6d95 100644
--- a/assets/ru_arty-crafty_showcase_favourites.md.Bq85uXVz.lean.js
+++ b/assets/ru_arty-crafty_showcase_favourites.md.BtFw6vgv.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Избранное","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase/favourites.md","filePath":"ru/arty-crafty/showcase/favourites.md","lastUpdated":1726474804000}'),n={name:"ru/arty-crafty/showcase/favourites.md"},h=t("",25),e=[h];function l(k,p,r,E,d,o){return i(),a("div",null,e)}const y=s(n,[["render",l]]);export{c as __pageData,y as default};
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Избранное","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase/favourites.md","filePath":"ru/arty-crafty/showcase/favourites.md","lastUpdated":1726505115000}'),n={name:"ru/arty-crafty/showcase/favourites.md"},h=t("",25),e=[h];function l(k,p,r,E,d,o){return i(),a("div",null,e)}const y=s(n,[["render",l]]);export{c as __pageData,y as default};
diff --git a/assets/ru_arty-crafty_showcase_product-category.md.C9TCZUZi.js b/assets/ru_arty-crafty_showcase_product-category.md.B11D00h1.js
similarity index 98%
rename from assets/ru_arty-crafty_showcase_product-category.md.C9TCZUZi.js
rename to assets/ru_arty-crafty_showcase_product-category.md.B11D00h1.js
index fd2d2e788..6ea39442c 100644
--- a/assets/ru_arty-crafty_showcase_product-category.md.C9TCZUZi.js
+++ b/assets/ru_arty-crafty_showcase_product-category.md.B11D00h1.js
@@ -1 +1 @@
-import{_ as a,o as e,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const r="/assets/product-category.rnPvQoyT.jpg",y=JSON.parse('{"title":"Категория товаров","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase/product-category.md","filePath":"ru/arty-crafty/showcase/product-category.md","lastUpdated":1726474804000}'),c={name:"ru/arty-crafty/showcase/product-category.md"},s=o('

Категория товаров

Layout

Страница категории товаров выглядит как идущие рядами и колонками карточки товаров. Число колонок зависит от ширины экрана. В мобильном варианте - только одна колонка на ширину устройства.

Сверху страницы название категории, возможно её описание и breadcrumbs (путь к категории в каталоге).

Карточки разместить можно с помощью flexbox (flex-wrap) и grid. Мне привычнее первый, поэтому использую его. Для самой карточки товара создаем компонент ProductCard.

image

Данные и API

Если посмотреть другие магазины, то на карточках товара обычно одна или несколько картинок, название, краткое описание, стоимость, дополнительная информация (рейтинг, скидка, вес, материал и т.п.)

Данные будем получать по сети. Лежать они будут в json файлах в директории public/api. Создадим несколько файлов вроде category-products-3.json.

Как может быть устроена схема REST API на бэкенде для серьезных магазинов можно посмотреть на примере Magento WebAPI.

',10),d=[s];function n(p,i,l,_,m,u){return e(),t("div",null,d)}const g=a(c,[["render",n]]);export{y as __pageData,g as default}; +import{_ as a,o as e,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const r="/assets/product-category.rnPvQoyT.jpg",y=JSON.parse('{"title":"Категория товаров","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase/product-category.md","filePath":"ru/arty-crafty/showcase/product-category.md","lastUpdated":1726505115000}'),c={name:"ru/arty-crafty/showcase/product-category.md"},s=o('

Категория товаров

Layout

Страница категории товаров выглядит как идущие рядами и колонками карточки товаров. Число колонок зависит от ширины экрана. В мобильном варианте - только одна колонка на ширину устройства.

Сверху страницы название категории, возможно её описание и breadcrumbs (путь к категории в каталоге).

Карточки разместить можно с помощью flexbox (flex-wrap) и grid. Мне привычнее первый, поэтому использую его. Для самой карточки товара создаем компонент ProductCard.

image

Данные и API

Если посмотреть другие магазины, то на карточках товара обычно одна или несколько картинок, название, краткое описание, стоимость, дополнительная информация (рейтинг, скидка, вес, материал и т.п.)

Данные будем получать по сети. Лежать они будут в json файлах в директории public/api. Создадим несколько файлов вроде category-products-3.json.

Как может быть устроена схема REST API на бэкенде для серьезных магазинов можно посмотреть на примере Magento WebAPI.

',10),d=[s];function n(p,i,l,_,m,u){return e(),t("div",null,d)}const g=a(c,[["render",n]]);export{y as __pageData,g as default}; diff --git a/assets/ru_arty-crafty_showcase_product-category.md.C9TCZUZi.lean.js b/assets/ru_arty-crafty_showcase_product-category.md.B11D00h1.lean.js similarity index 92% rename from assets/ru_arty-crafty_showcase_product-category.md.C9TCZUZi.lean.js rename to assets/ru_arty-crafty_showcase_product-category.md.B11D00h1.lean.js index 323c7d460..3d85bc3aa 100644 --- a/assets/ru_arty-crafty_showcase_product-category.md.C9TCZUZi.lean.js +++ b/assets/ru_arty-crafty_showcase_product-category.md.B11D00h1.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const r="/assets/product-category.rnPvQoyT.jpg",y=JSON.parse('{"title":"Категория товаров","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase/product-category.md","filePath":"ru/arty-crafty/showcase/product-category.md","lastUpdated":1726474804000}'),c={name:"ru/arty-crafty/showcase/product-category.md"},s=o("",10),d=[s];function n(p,i,l,_,m,u){return e(),t("div",null,d)}const g=a(c,[["render",n]]);export{y as __pageData,g as default}; +import{_ as a,o as e,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const r="/assets/product-category.rnPvQoyT.jpg",y=JSON.parse('{"title":"Категория товаров","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase/product-category.md","filePath":"ru/arty-crafty/showcase/product-category.md","lastUpdated":1726505115000}'),c={name:"ru/arty-crafty/showcase/product-category.md"},s=o("",10),d=[s];function n(p,i,l,_,m,u){return e(),t("div",null,d)}const g=a(c,[["render",n]]);export{y as __pageData,g as default}; diff --git a/assets/ru_arty-crafty_showcase_project-setup.md.CqsBv_eq.js b/assets/ru_arty-crafty_showcase_project-setup.md.CqsBv_eq.js new file mode 100644 index 000000000..cd0b0ed71 --- /dev/null +++ b/assets/ru_arty-crafty_showcase_project-setup.md.CqsBv_eq.js @@ -0,0 +1,21 @@ +import{_ as a,o as s,c as d,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const t="/assets/project-setup.CGzfUXkQ.png",y=JSON.parse('{"title":"Создание проекта","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase/project-setup.md","filePath":"ru/arty-crafty/showcase/project-setup.md","lastUpdated":1726505115000}'),h={name:"ru/arty-crafty/showcase/project-setup.md"},n=i(`

Создание проекта

Репозиторий на GitHub

Создаем репозиторий на GitHub, клонируем локально

sh
$ git clone https://github.com/vuesence/arty-crafty.git

vue-webapp

Используем, естественно, vue-webapp для создания скелета проекта со следующими опциями:

sh
$ cd arty-crafty
+$ pnpm create vue-webapp .
+
+ Project name: ... arty-crafty
+ Add a Splash screen? ... yes
+ Make it PWA (adds service worker and manifest)? ... yes
+ Add Open Graph meta tags? ... yes
+ Add Google Analytics code? ... no
+ Add Github Action Workflow for publishing it on GitHub Pages? ... yes
+ Select application layout » MainLayout
+ Select navigation drawer » TouchSlideoutDrawer
+ Select webapp navbar » MantineSimpleNavbar
+ Select webapp header » MantineSimpleHeader
+ Select webapp footer » MantineSimpleFooter
+ Add light version of i18n? ... yes
+ Add API layer (REST)? ... yes
+ Add JSON-RPC adapter? ... no
+ Current directory is not empty. Please choose how to proceed: » Ignore files and continue
+
+Scaffolding project in \\Vuesence\\arty-crafty...

Запускаем:

sh
$ pnpm i
+$ pnpm dev

Работает:

image

Теперь ставим base: "/arty-crafty/" в vite.config.ts. Также надо поставить этот префикс перед путями в инъекциях sw.js и splash-screen.html, и в путях к иконкам в manifest.json. При хостинге со своим доменом нужно будет этот префикс убрать.

Загружаем все на GitHub.

Далее настраиваем GitHub Pages и получаем наш сайт по адресу: https://vuesence.github.io/arty-crafty/

Сайт задеплоится сам автоматически из-за того, что у нас есть соответствующий GitHub Actions Workflow файл в проекте. Ветка gh-pages тоже создастся автоматически.

Теперь закомментируем подключение service-worker.js в файле sw.js - во время разработки кэширование сильно мешает. Включим его уже в продакшне.

',16),f=[n];function k(p,e,l,F,r,v){return s(),d("div",null,f)}const C=a(h,[["render",k],["__scopeId","data-v-2df6d70f"]]);export{y as __pageData,C as default}; diff --git a/assets/ru_arty-crafty_showcase_project-setup.md.KcerT95-.lean.js b/assets/ru_arty-crafty_showcase_project-setup.md.CqsBv_eq.lean.js similarity index 55% rename from assets/ru_arty-crafty_showcase_project-setup.md.KcerT95-.lean.js rename to assets/ru_arty-crafty_showcase_project-setup.md.CqsBv_eq.lean.js index 9a510c25e..008d61084 100644 --- a/assets/ru_arty-crafty_showcase_project-setup.md.KcerT95-.lean.js +++ b/assets/ru_arty-crafty_showcase_project-setup.md.CqsBv_eq.lean.js @@ -1 +1 @@ -import{_ as a,o as s,c as i,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const h="/assets/project-setup.CGzfUXkQ.png",y=JSON.parse('{"title":"Создание проекта","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase/project-setup.md","filePath":"ru/arty-crafty/showcase/project-setup.md","lastUpdated":1726474804000}'),n={name:"ru/arty-crafty/showcase/project-setup.md"},k=t("",16),p=[k];function d(e,l,F,r,b,v){return s(),i("div",null,p)}const C=a(n,[["render",d],["__scopeId","data-v-4813b339"]]);export{y as __pageData,C as default}; +import{_ as a,o as s,c as d,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const t="/assets/project-setup.CGzfUXkQ.png",y=JSON.parse('{"title":"Создание проекта","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase/project-setup.md","filePath":"ru/arty-crafty/showcase/project-setup.md","lastUpdated":1726505115000}'),h={name:"ru/arty-crafty/showcase/project-setup.md"},n=i("",16),f=[n];function k(p,e,l,F,r,v){return s(),d("div",null,f)}const C=a(h,[["render",k],["__scopeId","data-v-2df6d70f"]]);export{y as __pageData,C as default}; diff --git a/assets/ru_arty-crafty_showcase_project-setup.md.KcerT95-.js b/assets/ru_arty-crafty_showcase_project-setup.md.KcerT95-.js deleted file mode 100644 index 5b30f074a..000000000 --- a/assets/ru_arty-crafty_showcase_project-setup.md.KcerT95-.js +++ /dev/null @@ -1,21 +0,0 @@ -import{_ as a,o as s,c as i,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const h="/assets/project-setup.CGzfUXkQ.png",y=JSON.parse('{"title":"Создание проекта","description":"","frontmatter":{"pageClass":"arty-crafty","head":[["meta",{"name":"og:site_name","content":"Arty-Crafty - проект онлайн магазина"}],["meta",{"name":"og:image","content":"/images/arty-crafty-logo.png"}],["meta",{"name":"twitter:image","content":"/images/arty-crafty-logo.png"}]]},"headers":[],"relativePath":"ru/arty-crafty/showcase/project-setup.md","filePath":"ru/arty-crafty/showcase/project-setup.md","lastUpdated":1726474804000}'),n={name:"ru/arty-crafty/showcase/project-setup.md"},k=t(`

Создание проекта

Репозиторий на GitHub

Создаем репозиторий на GitHub, клонируем локально

sh
$ git clone https://github.com/vuesence/arty-crafty.git

vue-webapp

Используем, естественно, vue-webapp для создания скелета проекта со следующими опциями:

sh
$ cd arty-crafty
-$ pnpm create vue-webapp .
-
- Project name: ... arty-crafty
- Add a Splash screen? ... yes
- Make it PWA (adds service worker and manifest)? ... yes
- Add Open Graph meta tags? ... yes
- Add Google Analytics code? ... no
- Add Github Action Workflow for publishing it on GitHub Pages? ... yes
- Select application layout » MainLayout
- Select navigation drawer » TouchSlideoutDrawer
- Select webapp navbar » MantineSimpleNavbar
- Select webapp header » MantineSimpleHeader
- Select webapp footer » MantineSimpleFooter
- Add light version of i18n? ... yes
- Add API layer (REST)? ... yes
- Add JSON-RPC adapter? ... no
- Current directory is not empty. Please choose how to proceed: » Ignore files and continue
-
-Scaffolding project in \\Vuesence\\arty-crafty...

Запускаем:

sh
$ pnpm i
-$ pnpm dev

Работает:

image

Теперь ставим base: "/arty-crafty/" в vite.config.ts. Также надо поставить этот префикс перед путями в инъекциях sw.js и splash-screen.html, и в путях к иконкам в manifest.json. При хостинге со своим доменом нужно будет этот префикс убрать.

Загружаем все на GitHub.

Далее настраиваем GitHub Pages и получаем наш сайт по адресу: https://vuesence.github.io/arty-crafty/

Сайт задеплоится сам автоматически из-за того, что у нас есть соответствующий GitHub Actions Workflow файл в проекте. Ветка gh-pages тоже создастся автоматически.

Теперь закомментируем подключение service-worker.js в файле sw.js - во время разработки кэширование сильно мешает. Включим его уже в продакшне.

',16),p=[k];function d(e,l,F,r,b,v){return s(),i("div",null,p)}const C=a(n,[["render",d],["__scopeId","data-v-4813b339"]]);export{y as __pageData,C as default}; diff --git a/assets/ru_backend_api.md.leaO0awA.js b/assets/ru_backend_api.md.BtrGgvwp.js similarity index 99% rename from assets/ru_backend_api.md.leaO0awA.js rename to assets/ru_backend_api.md.BtrGgvwp.js index 6578dc4ce..d12822cf9 100644 --- a/assets/ru_backend_api.md.leaO0awA.js +++ b/assets/ru_backend_api.md.BtrGgvwp.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"API сервис","description":"","frontmatter":{},"headers":[],"relativePath":"ru/backend/api.md","filePath":"ru/backend/api.md","lastUpdated":1726474804000}'),t={name:"ru/backend/api.md"},p=n(`

API сервис

Абстракция канала связи с бэкендом

Для осуществления вызовов на бэк удобно выделить код, связанный с транспортным уровнем (формирование и отправка запроса) в отдельный js модуль.

Тогда в вашем компоненте доступ к вашему бэкенду будет выглядеть примерно так:

js
import { api } from "@/services/api";
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"API сервис","description":"","frontmatter":{},"headers":[],"relativePath":"ru/backend/api.md","filePath":"ru/backend/api.md","lastUpdated":1726505115000}'),t={name:"ru/backend/api.md"},p=n(`

API сервис

Абстракция канала связи с бэкендом

Для осуществления вызовов на бэк удобно выделить код, связанный с транспортным уровнем (формирование и отправка запроса) в отдельный js модуль.

Тогда в вашем компоненте доступ к вашему бэкенду будет выглядеть примерно так:

js
import { api } from "@/services/api";
 
 // loading.value = true;
 const userData = await api.users.getUserData({ userId });
diff --git a/assets/ru_backend_api.md.leaO0awA.lean.js b/assets/ru_backend_api.md.BtrGgvwp.lean.js
similarity index 70%
rename from assets/ru_backend_api.md.leaO0awA.lean.js
rename to assets/ru_backend_api.md.BtrGgvwp.lean.js
index f4071a3d9..c1508199e 100644
--- a/assets/ru_backend_api.md.leaO0awA.lean.js
+++ b/assets/ru_backend_api.md.BtrGgvwp.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"API сервис","description":"","frontmatter":{},"headers":[],"relativePath":"ru/backend/api.md","filePath":"ru/backend/api.md","lastUpdated":1726474804000}'),t={name:"ru/backend/api.md"},p=n("",3),h=[p];function l(k,e,E,d,r,o){return i(),a("div",null,h)}const y=s(t,[["render",l]]);export{g as __pageData,y as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"API сервис","description":"","frontmatter":{},"headers":[],"relativePath":"ru/backend/api.md","filePath":"ru/backend/api.md","lastUpdated":1726505115000}'),t={name:"ru/backend/api.md"},p=n("",3),h=[p];function l(k,e,E,d,r,o){return i(),a("div",null,h)}const y=s(t,[["render",l]]);export{g as __pageData,y as default};
diff --git a/assets/ru_backend_auth.md.DbXqwW1t.js b/assets/ru_backend_auth.md.C2-c5KZI.js
similarity index 99%
rename from assets/ru_backend_auth.md.DbXqwW1t.js
rename to assets/ru_backend_auth.md.C2-c5KZI.js
index e3380d99f..b3941a7d9 100644
--- a/assets/ru_backend_auth.md.DbXqwW1t.js
+++ b/assets/ru_backend_auth.md.C2-c5KZI.js
@@ -1 +1 @@
-import{_ as e,o as a,c as t,a4 as s}from"./chunks/framework.B8KxSsRZ.js";const _=JSON.parse('{"title":"Аутентификация и авторизация","description":"","frontmatter":{},"headers":[],"relativePath":"ru/backend/auth.md","filePath":"ru/backend/auth.md","lastUpdated":1726474804000}'),o={name:"ru/backend/auth.md"},l=s('

Аутентификация и авторизация

Что такое аутентификация и авторизация

Грубо говоря:

Аутентификация - когда система удостоверяется, что в неё залогинился именно Вася Пупкин, например, проверив его логин и пароль

Авторизация - когда система удостоверяется, что запрашивающий ресурс/действие пользователь имеет право доступа к нему. Например, старший менеджер имеет право удаления товара в админке, а простой менеджер - нет.

Как сделать систему аутентификации на сайта

Для SPA самый распространенный способ - на JWT токенах. Вариантов это сделать много, в зависимости от требований уровня безопасности (личный блог Васи Пупкина с комментариями гостей и онлайн магазин с депозитами и бонусами - две большие разницы).

JWT - это стандарт записи небольшого количества информации в строку (токен) и подписывания её (криптография). Делает это бэкенд. Таким образом только бэкенд может удостовериться, что токен выписан им, и в нем действительная информация.

Стандарта аутентификация на токенах как такового нет, есть лучшие практики.

Варианты:

  1. Бэкенд генерит токен (access token - AT) и кладет в httpOnly cookie. Фронтэнд доступа к токену не имеет, браузер просто возвращает куку. Метод незаслужено редко используемый, но вполне надежный. С фронта снимаются все заморочки по манипуляции с АТ.

Сценарий:

  • Фронт логинится, получает данные пользователя с бэка и работает с ними. При получении при любом запросе 401 - направляет пользователя на форму логина, обнуляет данные пользователя.
  • Бэк при логине создает httpOnly cookie с токеном с определенным сроком жизни. На каждом запросе проверяет токен, определяет того, кому выписан этот токен и его права, и дальше решает разрешать ли доступ. Если срок жизни токена кончился - возвращает 401.
  1. Бэкенд генерит токен (access token - AT) и передаёт фронту. Фронт сохраняет его и каждый раз отправляет его обратно. По сути то же самое, что и в первом случае, плюс лишние телодвижения и возможность потерять токен через XSS.

  2. Используются два токена - короткоживущий access token (AT) и дольше живущий refresh token (RT) пересылаемый в httpOnly cookie. AT работает как во втором случае. Когда записанный в нем срок его жизни кончается, бэкенд проверяет RT, и если он валиден, обновляет AT. Кончается RT - пользователь направляется на перелогин.

Подробнее по данной теме можно ознакомиться в, например, этой статье

Где хранить access token на фронте?

В 95% случаев в LocalStorage. Необходимо также дублировать его в обычной JS переменной, потому что, например, у iPhone при слабом заряде включается политика энергосбережения, в результате чего localStorage может постоянно очищаться браузером.

Что такое oAuth и SSO?

oAuth - Логин "через Google". Также когда, например, у пользователь есть возможность на твоем сайте сохранить что-то в Google Drive. Чтобы получить разрешение для твоего сайта работы с Google Drive аккаунтом пользователя, ты просишь его дать через Google разрешения твоему сайту лазить в его аккаунт. Итого у нас есть четыре части - Google (авторизационный центр), сторонний ресурс (Google Drive), твой сайт и пользователь

SSO - single sign-on - логин пользователя на портал некой компании один раз, и затем прозрачный доступ на разные его сервисы. Например, логин в GMail и доступ в сразу в Google Диск, Google Photo и так далее.

Дает ли аутентификация через JWT безопасность?

Безопасность - очень комплексное понятие, аутентификация через JWT - всего лишь один из её элементов. Для критичных приложений можно снимать отпечаток системы пользователя (browser fingerprint) и заставлять пользователя перелогиниваться как только он изменился. То же самое с IP. Таким образом можно бороться с кражей АТ. Также ставить очень маленький срок жизни AT, если используется RT. Но основные меры безопасности связаны не с аутентификацией, а с постоянным мониторингом системы на подозрительные действия.

Авторизация

Если нужно давать пользователям разный уровень доступа к ресурсам сайта, то обычно применяется или RBAC (Role-based access control) или PBA - Policy-Based Authorization (Permission-Based Authorization).

В первом случае пользователи распределяются по ролям (админ, менеджер, юзер) и уровень доступа определяется ролью.

Во-втором можно более гранулировано задать разрешение каждому пользователю индивидуально на любое действие.

Нужно понимать, что на фронте авторизация делается для удобства (пользователь не видит разделы сайта, которые ему запрещены), но за безопасность отвечает бэк - он должен проверять каждый раз, имеет ли пользователь право доступа к запрашиваемому ресурсу, даже если на фронте его как бы видно не должно быть. Сломать фронт - очень несложно.

',7),i=[l];function r(c,p,n,d,m,u){return a(),t("div",null,i)}const k=e(o,[["render",r]]);export{_ as __pageData,k as default}; +import{_ as e,o as a,c as t,a4 as s}from"./chunks/framework.B8KxSsRZ.js";const _=JSON.parse('{"title":"Аутентификация и авторизация","description":"","frontmatter":{},"headers":[],"relativePath":"ru/backend/auth.md","filePath":"ru/backend/auth.md","lastUpdated":1726505115000}'),o={name:"ru/backend/auth.md"},l=s('

Аутентификация и авторизация

Что такое аутентификация и авторизация

Грубо говоря:

Аутентификация - когда система удостоверяется, что в неё залогинился именно Вася Пупкин, например, проверив его логин и пароль

Авторизация - когда система удостоверяется, что запрашивающий ресурс/действие пользователь имеет право доступа к нему. Например, старший менеджер имеет право удаления товара в админке, а простой менеджер - нет.

Как сделать систему аутентификации на сайта

Для SPA самый распространенный способ - на JWT токенах. Вариантов это сделать много, в зависимости от требований уровня безопасности (личный блог Васи Пупкина с комментариями гостей и онлайн магазин с депозитами и бонусами - две большие разницы).

JWT - это стандарт записи небольшого количества информации в строку (токен) и подписывания её (криптография). Делает это бэкенд. Таким образом только бэкенд может удостовериться, что токен выписан им, и в нем действительная информация.

Стандарта аутентификация на токенах как такового нет, есть лучшие практики.

Варианты:

  1. Бэкенд генерит токен (access token - AT) и кладет в httpOnly cookie. Фронтэнд доступа к токену не имеет, браузер просто возвращает куку. Метод незаслужено редко используемый, но вполне надежный. С фронта снимаются все заморочки по манипуляции с АТ.

Сценарий:

  • Фронт логинится, получает данные пользователя с бэка и работает с ними. При получении при любом запросе 401 - направляет пользователя на форму логина, обнуляет данные пользователя.
  • Бэк при логине создает httpOnly cookie с токеном с определенным сроком жизни. На каждом запросе проверяет токен, определяет того, кому выписан этот токен и его права, и дальше решает разрешать ли доступ. Если срок жизни токена кончился - возвращает 401.
  1. Бэкенд генерит токен (access token - AT) и передаёт фронту. Фронт сохраняет его и каждый раз отправляет его обратно. По сути то же самое, что и в первом случае, плюс лишние телодвижения и возможность потерять токен через XSS.

  2. Используются два токена - короткоживущий access token (AT) и дольше живущий refresh token (RT) пересылаемый в httpOnly cookie. AT работает как во втором случае. Когда записанный в нем срок его жизни кончается, бэкенд проверяет RT, и если он валиден, обновляет AT. Кончается RT - пользователь направляется на перелогин.

Подробнее по данной теме можно ознакомиться в, например, этой статье

Где хранить access token на фронте?

В 95% случаев в LocalStorage. Необходимо также дублировать его в обычной JS переменной, потому что, например, у iPhone при слабом заряде включается политика энергосбережения, в результате чего localStorage может постоянно очищаться браузером.

Что такое oAuth и SSO?

oAuth - Логин "через Google". Также когда, например, у пользователь есть возможность на твоем сайте сохранить что-то в Google Drive. Чтобы получить разрешение для твоего сайта работы с Google Drive аккаунтом пользователя, ты просишь его дать через Google разрешения твоему сайту лазить в его аккаунт. Итого у нас есть четыре части - Google (авторизационный центр), сторонний ресурс (Google Drive), твой сайт и пользователь

SSO - single sign-on - логин пользователя на портал некой компании один раз, и затем прозрачный доступ на разные его сервисы. Например, логин в GMail и доступ в сразу в Google Диск, Google Photo и так далее.

Дает ли аутентификация через JWT безопасность?

Безопасность - очень комплексное понятие, аутентификация через JWT - всего лишь один из её элементов. Для критичных приложений можно снимать отпечаток системы пользователя (browser fingerprint) и заставлять пользователя перелогиниваться как только он изменился. То же самое с IP. Таким образом можно бороться с кражей АТ. Также ставить очень маленький срок жизни AT, если используется RT. Но основные меры безопасности связаны не с аутентификацией, а с постоянным мониторингом системы на подозрительные действия.

Авторизация

Если нужно давать пользователям разный уровень доступа к ресурсам сайта, то обычно применяется или RBAC (Role-based access control) или PBA - Policy-Based Authorization (Permission-Based Authorization).

В первом случае пользователи распределяются по ролям (админ, менеджер, юзер) и уровень доступа определяется ролью.

Во-втором можно более гранулировано задать разрешение каждому пользователю индивидуально на любое действие.

Нужно понимать, что на фронте авторизация делается для удобства (пользователь не видит разделы сайта, которые ему запрещены), но за безопасность отвечает бэк - он должен проверять каждый раз, имеет ли пользователь право доступа к запрашиваемому ресурсу, даже если на фронте его как бы видно не должно быть. Сломать фронт - очень несложно.

',7),i=[l];function r(c,p,n,d,m,u){return a(),t("div",null,i)}const k=e(o,[["render",r]]);export{_ as __pageData,k as default}; diff --git a/assets/ru_backend_auth.md.DbXqwW1t.lean.js b/assets/ru_backend_auth.md.C2-c5KZI.lean.js similarity index 86% rename from assets/ru_backend_auth.md.DbXqwW1t.lean.js rename to assets/ru_backend_auth.md.C2-c5KZI.lean.js index fba516d96..d62aa541d 100644 --- a/assets/ru_backend_auth.md.DbXqwW1t.lean.js +++ b/assets/ru_backend_auth.md.C2-c5KZI.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,a4 as s}from"./chunks/framework.B8KxSsRZ.js";const _=JSON.parse('{"title":"Аутентификация и авторизация","description":"","frontmatter":{},"headers":[],"relativePath":"ru/backend/auth.md","filePath":"ru/backend/auth.md","lastUpdated":1726474804000}'),o={name:"ru/backend/auth.md"},l=s("",7),i=[l];function r(c,p,n,d,m,u){return a(),t("div",null,i)}const k=e(o,[["render",r]]);export{_ as __pageData,k as default}; +import{_ as e,o as a,c as t,a4 as s}from"./chunks/framework.B8KxSsRZ.js";const _=JSON.parse('{"title":"Аутентификация и авторизация","description":"","frontmatter":{},"headers":[],"relativePath":"ru/backend/auth.md","filePath":"ru/backend/auth.md","lastUpdated":1726505115000}'),o={name:"ru/backend/auth.md"},l=s("",7),i=[l];function r(c,p,n,d,m,u){return a(),t("div",null,i)}const k=e(o,[["render",r]]);export{_ as __pageData,k as default}; diff --git a/assets/ru_backend_backend.md.CYR0vQBQ.js b/assets/ru_backend_backend.md.Bk6rQrGJ.js similarity index 99% rename from assets/ru_backend_backend.md.CYR0vQBQ.js rename to assets/ru_backend_backend.md.Bk6rQrGJ.js index 11d56b42f..291308fdd 100644 --- a/assets/ru_backend_backend.md.CYR0vQBQ.js +++ b/assets/ru_backend_backend.md.Bk6rQrGJ.js @@ -1 +1 @@ -import{_ as a,o as e,c as s,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"Варианты задействовать свой бэкенд для фронтендера","description":"","frontmatter":{},"headers":[],"relativePath":"ru/backend/backend.md","filePath":"ru/backend/backend.md","lastUpdated":1726474804000}'),o={name:"ru/backend/backend.md"},p=t('

Варианты задействовать свой бэкенд для фронтендера

Как протестировать фронт на данных с бэка?

Есть много сервисов, предлагающих свой API с различными данными для тестирования либо полноценной работы

Например, jsonplaceholder.typicode.com

Гуглить по "json placeholder"

Есть ли бесплатные открытые API с реальными данными?

Полно. Например, тут

Гуглить по "public api"

Также можно похакать релевантные сайты в DevTools / Network на предмет эндпойнтов с данными в подходящем формате

Как сделать свой бэкенд?

Если уже знаете JavaScript, поставить и запустить Node.js с HTTP сервером проблем вызвать не должно.

Node.js далеко не очень популярный сервер для интернета, но для небольшого проекта пойдет.

В абсолютном значении проще всего установить и начать работать с Nginx и PHP

Большинство крупных облачных провайдеров (Amazon, Google, Oracle, Microsoft) предоставляет бесплатные планы с возможностью запустить виртуальный сервер. Поставив туда что требуется, можно захостить и бэк, и бандл фронта.

Что такое BaaS (Backend as a service)?

Это облачное решение, когда бэкенд в виде базы данных и интерфейса доступа к ней, а возможно и возможность использовать некоторую логику, предоставляет BaaS провайдер.

Например, NoSQL базу данных и доступ к ней предоставляет Google с помощью своего сервиcа Firebase

Альтернатива с PostgreSQL - Supabase

То есть, ваш фронтэнд будет обращаться к их определенным эндпойнтам и получать нужные сервисы - например, сохранять и запрашивать данные в базе данных.

Оба сервиса предоставляют возможность сделать аутентификацию на сайте. Таким образом, фронтэндер может написать приложение используя подобный сервис без написания своего бэкенд кода и без размещения его где-то на сервере в интернете.

У данных сервисов есть бесплатные планы с довольно большими ресурсами.

Бизнес логика на BaaS

Большинство BaaS сервисов предоставляет не только CRUD доступ к своей базе данных, но и возможность написать кастомную логику в виде Cloud Functions у Firebase, Edge Functions у Supabase, AWS Lambda у Amazon и т.д.

Данные функции являются кодом на каком-то языке программирования, который будет вызываться при обращении к определенному эндпойнту бэкенда.

В случае, если фронтенд разработчик хочет сделать полноценное приложение, но заморачиваться на самостоятельный бэкенд не хочет, это является довольно неплохим и очень экономичным решением.

Как работают Edge/Cloud/Lamda функции

По сути, это бэкенд в миниатюре

Твой фронт обращаешься к заданному эндпойнту (через API gateway сервиса BaaS провайдера) - например, /api/somefunc

Там лежит написанный тобой скрипт на js или другом языке программирования который выполняется, имеет доступ к базе данных и может делать другие вещи (грузить данные из инета например)

Затем скрипт формирует результат и возвращает его твоему фронту

',7),c=[p];function r(d,l,i,m,n,u){return e(),s("div",null,c)}const k=a(o,[["render",r]]);export{b as __pageData,k as default}; +import{_ as a,o as e,c as s,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"Варианты задействовать свой бэкенд для фронтендера","description":"","frontmatter":{},"headers":[],"relativePath":"ru/backend/backend.md","filePath":"ru/backend/backend.md","lastUpdated":1726505115000}'),o={name:"ru/backend/backend.md"},p=t('

Варианты задействовать свой бэкенд для фронтендера

Как протестировать фронт на данных с бэка?

Есть много сервисов, предлагающих свой API с различными данными для тестирования либо полноценной работы

Например, jsonplaceholder.typicode.com

Гуглить по "json placeholder"

Есть ли бесплатные открытые API с реальными данными?

Полно. Например, тут

Гуглить по "public api"

Также можно похакать релевантные сайты в DevTools / Network на предмет эндпойнтов с данными в подходящем формате

Как сделать свой бэкенд?

Если уже знаете JavaScript, поставить и запустить Node.js с HTTP сервером проблем вызвать не должно.

Node.js далеко не очень популярный сервер для интернета, но для небольшого проекта пойдет.

В абсолютном значении проще всего установить и начать работать с Nginx и PHP

Большинство крупных облачных провайдеров (Amazon, Google, Oracle, Microsoft) предоставляет бесплатные планы с возможностью запустить виртуальный сервер. Поставив туда что требуется, можно захостить и бэк, и бандл фронта.

Что такое BaaS (Backend as a service)?

Это облачное решение, когда бэкенд в виде базы данных и интерфейса доступа к ней, а возможно и возможность использовать некоторую логику, предоставляет BaaS провайдер.

Например, NoSQL базу данных и доступ к ней предоставляет Google с помощью своего сервиcа Firebase

Альтернатива с PostgreSQL - Supabase

То есть, ваш фронтэнд будет обращаться к их определенным эндпойнтам и получать нужные сервисы - например, сохранять и запрашивать данные в базе данных.

Оба сервиса предоставляют возможность сделать аутентификацию на сайте. Таким образом, фронтэндер может написать приложение используя подобный сервис без написания своего бэкенд кода и без размещения его где-то на сервере в интернете.

У данных сервисов есть бесплатные планы с довольно большими ресурсами.

Бизнес логика на BaaS

Большинство BaaS сервисов предоставляет не только CRUD доступ к своей базе данных, но и возможность написать кастомную логику в виде Cloud Functions у Firebase, Edge Functions у Supabase, AWS Lambda у Amazon и т.д.

Данные функции являются кодом на каком-то языке программирования, который будет вызываться при обращении к определенному эндпойнту бэкенда.

В случае, если фронтенд разработчик хочет сделать полноценное приложение, но заморачиваться на самостоятельный бэкенд не хочет, это является довольно неплохим и очень экономичным решением.

Как работают Edge/Cloud/Lamda функции

По сути, это бэкенд в миниатюре

Твой фронт обращаешься к заданному эндпойнту (через API gateway сервиса BaaS провайдера) - например, /api/somefunc

Там лежит написанный тобой скрипт на js или другом языке программирования который выполняется, имеет доступ к базе данных и может делать другие вещи (грузить данные из инета например)

Затем скрипт формирует результат и возвращает его твоему фронту

',7),c=[p];function r(d,l,i,m,n,u){return e(),s("div",null,c)}const k=a(o,[["render",r]]);export{b as __pageData,k as default}; diff --git a/assets/ru_backend_backend.md.CYR0vQBQ.lean.js b/assets/ru_backend_backend.md.Bk6rQrGJ.lean.js similarity index 87% rename from assets/ru_backend_backend.md.CYR0vQBQ.lean.js rename to assets/ru_backend_backend.md.Bk6rQrGJ.lean.js index 3aedbde74..6892098f9 100644 --- a/assets/ru_backend_backend.md.CYR0vQBQ.lean.js +++ b/assets/ru_backend_backend.md.Bk6rQrGJ.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as s,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"Варианты задействовать свой бэкенд для фронтендера","description":"","frontmatter":{},"headers":[],"relativePath":"ru/backend/backend.md","filePath":"ru/backend/backend.md","lastUpdated":1726474804000}'),o={name:"ru/backend/backend.md"},p=t("",7),c=[p];function r(d,l,i,m,n,u){return e(),s("div",null,c)}const k=a(o,[["render",r]]);export{b as __pageData,k as default}; +import{_ as a,o as e,c as s,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"Варианты задействовать свой бэкенд для фронтендера","description":"","frontmatter":{},"headers":[],"relativePath":"ru/backend/backend.md","filePath":"ru/backend/backend.md","lastUpdated":1726505115000}'),o={name:"ru/backend/backend.md"},p=t("",7),c=[p];function r(d,l,i,m,n,u){return e(),s("div",null,c)}const k=a(o,[["render",r]]);export{b as __pageData,k as default}; diff --git a/assets/ru_backend_cors.md.BnICOSYk.js b/assets/ru_backend_cors.md.DglEEZrI.js similarity index 99% rename from assets/ru_backend_cors.md.BnICOSYk.js rename to assets/ru_backend_cors.md.DglEEZrI.js index 05e3ed898..45560f54f 100644 --- a/assets/ru_backend_cors.md.BnICOSYk.js +++ b/assets/ru_backend_cors.md.DglEEZrI.js @@ -1,3 +1,3 @@ -import{_ as e,o as s,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"CORS","description":"","frontmatter":{},"headers":[],"relativePath":"ru/backend/cors.md","filePath":"ru/backend/cors.md","lastUpdated":1726474804000}'),o={name:"ru/backend/cors.md"},r=t(`

CORS

Что такое CORS?

Грубо говоря, CORS служит для защиты вашего бэкенда от запросов к нему со стороны путем установки специальных HTTP заголовков.

Более точно, CORS (Cross-Origin Resource Sharing, англ.  «совместное использование ресурсов разных источников») — это стандарт, позволяющий предоставлять веб-страницам доступ к объектам сторонних интернет-ресурсов. Сторонним считается любой интернет-ресурс, который отличается от запрашиваемого протоколом, доменом или портом.

Доступ предоставляется по специализированным запросам. Интернет-ресурс, принимающий запрос, содержит список доверенных источников, которым разрешен доступ к объектам. Страница-источник запроса получает доступ, если входит в список доверенных источников. Для предоставления доступа всем сторонним интернет-страницам используется маска «*».

Соответственно, делать всё это может только бэкенд, и настраивается это на нем. Конкретное решение зависит от языка бэкенда, используемого фреймворка и даже вебсервера.

Принцип работы CORS

При создании перекрестного HTTP-запроса браузер клиента добавляет в него объявление домена веб-страницы, инициирующей запрос. Домен объявляется в разделе Origin.

Например, страница https://client-1.com/page.html запрашивает данные со страницы https://server-site.com/info. Пример запроса от браузера клиента, использующего методы CORS, приведен ниже:

GET /info HTTP/1.1
+import{_ as e,o as s,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"CORS","description":"","frontmatter":{},"headers":[],"relativePath":"ru/backend/cors.md","filePath":"ru/backend/cors.md","lastUpdated":1726505115000}'),o={name:"ru/backend/cors.md"},r=t(`

CORS

Что такое CORS?

Грубо говоря, CORS служит для защиты вашего бэкенда от запросов к нему со стороны путем установки специальных HTTP заголовков.

Более точно, CORS (Cross-Origin Resource Sharing, англ.  «совместное использование ресурсов разных источников») — это стандарт, позволяющий предоставлять веб-страницам доступ к объектам сторонних интернет-ресурсов. Сторонним считается любой интернет-ресурс, который отличается от запрашиваемого протоколом, доменом или портом.

Доступ предоставляется по специализированным запросам. Интернет-ресурс, принимающий запрос, содержит список доверенных источников, которым разрешен доступ к объектам. Страница-источник запроса получает доступ, если входит в список доверенных источников. Для предоставления доступа всем сторонним интернет-страницам используется маска «*».

Соответственно, делать всё это может только бэкенд, и настраивается это на нем. Конкретное решение зависит от языка бэкенда, используемого фреймворка и даже вебсервера.

Принцип работы CORS

При создании перекрестного HTTP-запроса браузер клиента добавляет в него объявление домена веб-страницы, инициирующей запрос. Домен объявляется в разделе Origin.

Например, страница https://client-1.com/page.html запрашивает данные со страницы https://server-site.com/info. Пример запроса от браузера клиента, использующего методы CORS, приведен ниже:

GET /info HTTP/1.1
 Host: server-site.com
 Origin: client-1.com

В случае, если сервер по адресу www.server-site.com разрешает странице-источнику запроса доступ к данным с домена, в его ответе на запрос появится строка Access-Control-Allow-Origin с именем объявленного домена:

Access-Control-Allow-Origin: https://client-1.com

Если сервер, на который запрошен доступ, не добавит в ответ указанную строку, браузер клиента вместо данных файла info вернет код ошибки.

Если на сервере разрешен доступ к ресурсу страницам любого стороннего домена, в ответе будет указана маска «*».

Access-Control-Allow-Origin: *

Если на сервере разрешен доступ не всем, а нескольким сторонним клиентам, ответ сервера содержит имена всех этих доменов, выведенных отдельными строками или разделенных пробелами:

Access-Control-Allow-Origin: https://client-1.com https://client-2.com https://client-3.com

В стандарте CORS много нюансов. Вот более подробная статья по теме CORS

Проблемы с CORS

CORS проблемы могут возникнуть только когда к ресурсу обращается браузер, а не отдельная программа типа Postman или другой бэкенд.

Как временное решение при разработке могут помочь CORS proxy, которые становятся посредником между фронтендом и бэкендом, или расширения браузера.

Vite предоставляет подобный прокси для dev режима.

`,4),c=[r];function n(p,l,i,d,h,m){return s(),a("div",null,c)}const b=e(o,[["render",n]]);export{u as __pageData,b as default}; diff --git a/assets/ru_backend_cors.md.BnICOSYk.lean.js b/assets/ru_backend_cors.md.DglEEZrI.lean.js similarity index 84% rename from assets/ru_backend_cors.md.BnICOSYk.lean.js rename to assets/ru_backend_cors.md.DglEEZrI.lean.js index 756fda71e..b645b50f0 100644 --- a/assets/ru_backend_cors.md.BnICOSYk.lean.js +++ b/assets/ru_backend_cors.md.DglEEZrI.lean.js @@ -1 +1 @@ -import{_ as e,o as s,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"CORS","description":"","frontmatter":{},"headers":[],"relativePath":"ru/backend/cors.md","filePath":"ru/backend/cors.md","lastUpdated":1726474804000}'),o={name:"ru/backend/cors.md"},r=t("",4),c=[r];function n(p,l,i,d,h,m){return s(),a("div",null,c)}const b=e(o,[["render",n]]);export{u as __pageData,b as default}; +import{_ as e,o as s,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"CORS","description":"","frontmatter":{},"headers":[],"relativePath":"ru/backend/cors.md","filePath":"ru/backend/cors.md","lastUpdated":1726505115000}'),o={name:"ru/backend/cors.md"},r=t("",4),c=[r];function n(p,l,i,d,h,m){return s(),a("div",null,c)}const b=e(o,[["render",n]]);export{u as __pageData,b as default}; diff --git a/assets/ru_backend_protocols.md.CDDUmXGf.js b/assets/ru_backend_protocols.md.DO_C4wHZ.js similarity index 98% rename from assets/ru_backend_protocols.md.CDDUmXGf.js rename to assets/ru_backend_protocols.md.DO_C4wHZ.js index 93d8ec3e5..704e03ecb 100644 --- a/assets/ru_backend_protocols.md.CDDUmXGf.js +++ b/assets/ru_backend_protocols.md.DO_C4wHZ.js @@ -1 +1 @@ -import{_ as e,o as t,c as a,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const S=JSON.parse('{"title":"Протоколы. To REST или не REST?","description":"","frontmatter":{},"headers":[],"relativePath":"ru/backend/protocols.md","filePath":"ru/backend/protocols.md","lastUpdated":1726474804000}'),s={name:"ru/backend/protocols.md"},o=r('

Протоколы. To REST или не REST?

REST, WebSockets, JSON-RPC

Для новичка, конечно, удобнее начинать с REST - запросы на сервер абы как.

Для более опытных, особенно, фулстеков, предлагаю взглянуть на JSON-RPC

WebSockets удобен тем, что дает двунаправленную связь (сервер может посылать сообщения на клиент), но требует специального программного обеспечения на бэкенде.

Почему JSON-RPC?

После опыта с JSON-RPC общение с бэком обычно уже никогда не бывает прежним.

Он дает порядок, четкость, строгость и вместе с тем гибкость. Сильно упрощает и делает понятным код как на фронте, так и на бэке.

Кроме того, JSON-RPC - де-факто стандарт для Web 3.0 коммуникаций.

Вот две мои статьи на эту тему - Популяризация JSON-RPC (часть 1) и Популяризация JSON-RPC (часть 2)

Вариант TypeScript реализации фронтэнд api сервиса на JSON-RPC - здесь

При использовании JSON-RPC переход на WebSockets или другие транспортные протоколы не вызовет никаких трудностей из-за унификации формата сообщений.

Как организовать реконнект WebSocket соединения на фронте?

Нужна шина, или Еvent bus, которая будет работать как прокси для приходящих сообщений.

Можно использовать mitt.

Что такое GraphQL?

Сложная штука, попытка перевести язык запросов SQL для клиент-серверных запросов в интернете.

Имеет довольно специфичное применение, преимущественно у сторонних поставщиков данных через API.

Для своего фулстек приложения - на 99% ненужное решение.

',5),c=[o];function p(l,d,i,m,n,_){return t(),a("div",null,c)}const b=e(s,[["render",p]]);export{S as __pageData,b as default}; +import{_ as e,o as t,c as a,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const S=JSON.parse('{"title":"Протоколы. To REST или не REST?","description":"","frontmatter":{},"headers":[],"relativePath":"ru/backend/protocols.md","filePath":"ru/backend/protocols.md","lastUpdated":1726505115000}'),s={name:"ru/backend/protocols.md"},o=r('

Протоколы. To REST или не REST?

REST, WebSockets, JSON-RPC

Для новичка, конечно, удобнее начинать с REST - запросы на сервер абы как.

Для более опытных, особенно, фулстеков, предлагаю взглянуть на JSON-RPC

WebSockets удобен тем, что дает двунаправленную связь (сервер может посылать сообщения на клиент), но требует специального программного обеспечения на бэкенде.

Почему JSON-RPC?

После опыта с JSON-RPC общение с бэком обычно уже никогда не бывает прежним.

Он дает порядок, четкость, строгость и вместе с тем гибкость. Сильно упрощает и делает понятным код как на фронте, так и на бэке.

Кроме того, JSON-RPC - де-факто стандарт для Web 3.0 коммуникаций.

Вот две мои статьи на эту тему - Популяризация JSON-RPC (часть 1) и Популяризация JSON-RPC (часть 2)

Вариант TypeScript реализации фронтэнд api сервиса на JSON-RPC - здесь

При использовании JSON-RPC переход на WebSockets или другие транспортные протоколы не вызовет никаких трудностей из-за унификации формата сообщений.

Как организовать реконнект WebSocket соединения на фронте?

Нужна шина, или Еvent bus, которая будет работать как прокси для приходящих сообщений.

Можно использовать mitt.

Что такое GraphQL?

Сложная штука, попытка перевести язык запросов SQL для клиент-серверных запросов в интернете.

Имеет довольно специфичное применение, преимущественно у сторонних поставщиков данных через API.

Для своего фулстек приложения - на 99% ненужное решение.

',5),c=[o];function p(l,d,i,m,n,_){return t(),a("div",null,c)}const b=e(s,[["render",p]]);export{S as __pageData,b as default}; diff --git a/assets/ru_backend_protocols.md.CDDUmXGf.lean.js b/assets/ru_backend_protocols.md.DO_C4wHZ.lean.js similarity index 86% rename from assets/ru_backend_protocols.md.CDDUmXGf.lean.js rename to assets/ru_backend_protocols.md.DO_C4wHZ.lean.js index 409c609db..0578958bd 100644 --- a/assets/ru_backend_protocols.md.CDDUmXGf.lean.js +++ b/assets/ru_backend_protocols.md.DO_C4wHZ.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as a,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const S=JSON.parse('{"title":"Протоколы. To REST или не REST?","description":"","frontmatter":{},"headers":[],"relativePath":"ru/backend/protocols.md","filePath":"ru/backend/protocols.md","lastUpdated":1726474804000}'),s={name:"ru/backend/protocols.md"},o=r("",5),c=[o];function p(l,d,i,m,n,_){return t(),a("div",null,c)}const b=e(s,[["render",p]]);export{S as __pageData,b as default}; +import{_ as e,o as t,c as a,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const S=JSON.parse('{"title":"Протоколы. To REST или не REST?","description":"","frontmatter":{},"headers":[],"relativePath":"ru/backend/protocols.md","filePath":"ru/backend/protocols.md","lastUpdated":1726505115000}'),s={name:"ru/backend/protocols.md"},o=r("",5),c=[o];function p(l,d,i,m,n,_){return t(),a("div",null,c)}const b=e(s,[["render",p]]);export{S as __pageData,b as default}; diff --git a/assets/ru_book_Appendix__Migrating_from_Vue_2.md.Co6HKlKN.js b/assets/ru_book_Appendix__Migrating_from_Vue_2.md.zt8-vu3-.js similarity index 99% rename from assets/ru_book_Appendix__Migrating_from_Vue_2.md.Co6HKlKN.js rename to assets/ru_book_Appendix__Migrating_from_Vue_2.md.zt8-vu3-.js index 258f1e546..b7bd24faa 100644 --- a/assets/ru_book_Appendix__Migrating_from_Vue_2.md.Co6HKlKN.js +++ b/assets/ru_book_Appendix__Migrating_from_Vue_2.md.zt8-vu3-.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Приложение: Миграция с Vue 2","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Appendix__Migrating_from_Vue_2.md","filePath":"ru/book/Appendix__Migrating_from_Vue_2.md","lastUpdated":1726474804000}'),n={name:"ru/book/Appendix__Migrating_from_Vue_2.md"},e=t(`

Приложение: Миграция с Vue 2

Переход приложения Vue 2 на Vue 3 не так прост, как простая замена фреймворка. Хотя API Options остается полностью совместимым, и нет необходимости переходить на API Composition, есть и другие изменения, о которых следует знать.

Изменения между версиями затрагивают не только основной фреймворк, но и экосистему (новый vue-router, state manager и т.д.), а также другие зависимости. В Vue 3 также появился новый официальный сборщик Vite (заменяющий WebPack), новый роутер и управление состоянием (Pinia, замена Vuex), а также другие плагины.

Приведенный здесь список изменений является кратким справочником, который поможет вам в миграции вашего приложения, но не может быть исчерпывающим с учетом всех нюансов, необходимых для каждого конкретного проекта. В связи с этим я отсылаю вас к официальной документации.

Здесь приведен неполный список основных изменений, помимо нового Composition API:

  • Иной способ загрузки и запуска приложения
  • Изменения в регистрации глобальных компонентов и плагинов
  • Изменения в свойстве data
  • Изменения в v-model, props и emits
  • Варианты реактивности
  • Совместимость с браузерами
  • Изменения в организации каталогов и файлов
  • Изменения в маршрутизаторе и управлении состояниями

Этот список не показывает всех изменений под капотом, через которые прошел фреймворк, но он даст вам отправную точку для миграции вашего рабочего приложения с Vue 2 на Vue 3. Теперь давайте рассмотрим каждый из этих пунктов более подробно.

Другой способ загрузки и запуска приложения

Изменился способ загрузки и запуска нашего приложения. Теперь требуется импортировать конструктор из пакета Vue. Давайте сравним обе реализации из main.js:

Vue 2 инстанцирование приложения:

js
import Vue from "vue"
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Приложение: Миграция с Vue 2","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Appendix__Migrating_from_Vue_2.md","filePath":"ru/book/Appendix__Migrating_from_Vue_2.md","lastUpdated":1726505115000}'),n={name:"ru/book/Appendix__Migrating_from_Vue_2.md"},e=t(`

Приложение: Миграция с Vue 2

Переход приложения Vue 2 на Vue 3 не так прост, как простая замена фреймворка. Хотя API Options остается полностью совместимым, и нет необходимости переходить на API Composition, есть и другие изменения, о которых следует знать.

Изменения между версиями затрагивают не только основной фреймворк, но и экосистему (новый vue-router, state manager и т.д.), а также другие зависимости. В Vue 3 также появился новый официальный сборщик Vite (заменяющий WebPack), новый роутер и управление состоянием (Pinia, замена Vuex), а также другие плагины.

Приведенный здесь список изменений является кратким справочником, который поможет вам в миграции вашего приложения, но не может быть исчерпывающим с учетом всех нюансов, необходимых для каждого конкретного проекта. В связи с этим я отсылаю вас к официальной документации.

Здесь приведен неполный список основных изменений, помимо нового Composition API:

  • Иной способ загрузки и запуска приложения
  • Изменения в регистрации глобальных компонентов и плагинов
  • Изменения в свойстве data
  • Изменения в v-model, props и emits
  • Варианты реактивности
  • Совместимость с браузерами
  • Изменения в организации каталогов и файлов
  • Изменения в маршрутизаторе и управлении состояниями

Этот список не показывает всех изменений под капотом, через которые прошел фреймворк, но он даст вам отправную точку для миграции вашего рабочего приложения с Vue 2 на Vue 3. Теперь давайте рассмотрим каждый из этих пунктов более подробно.

Другой способ загрузки и запуска приложения

Изменился способ загрузки и запуска нашего приложения. Теперь требуется импортировать конструктор из пакета Vue. Давайте сравним обе реализации из main.js:

Vue 2 инстанцирование приложения:

js
import Vue from "vue"
 const app = new Vue({el: "#app"})

В Vue 2 мы импортируем конструктор Vue и передаем объект с опциями. В Vue 3 после создания приложения мы подключаем компоненты, плагины и т.д., а затем монтируем наше приложение к компоненту верхнего уровня. Вот пример, переписанный для Vue 3:

Vue 3 инстанцирование приложения:

js
import {createApp} from "vue"
 const app = createApp({..})
 app.mount("#app")

Положение файла index.html также изменилось, и теперь он располагается в корне нашего приложения. Более подробно изменения в структуре документа описаны в главе 3, Установка рабочего проекта.

Регистрация глобальных компонентов, плагинов и так далее

В Vue 2 мы объявляем компонент для всего приложения (глобальный), прикрепляя его к корневому экземпляру Vue. Вот пример:

js
import Vue from "vue"
diff --git a/assets/ru_book_Appendix__Migrating_from_Vue_2.md.Co6HKlKN.lean.js b/assets/ru_book_Appendix__Migrating_from_Vue_2.md.zt8-vu3-.lean.js
similarity index 93%
rename from assets/ru_book_Appendix__Migrating_from_Vue_2.md.Co6HKlKN.lean.js
rename to assets/ru_book_Appendix__Migrating_from_Vue_2.md.zt8-vu3-.lean.js
index 9a0f36a1d..037b0f3bc 100644
--- a/assets/ru_book_Appendix__Migrating_from_Vue_2.md.Co6HKlKN.lean.js
+++ b/assets/ru_book_Appendix__Migrating_from_Vue_2.md.zt8-vu3-.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Приложение: Миграция с Vue 2","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Appendix__Migrating_from_Vue_2.md","filePath":"ru/book/Appendix__Migrating_from_Vue_2.md","lastUpdated":1726474804000}'),n={name:"ru/book/Appendix__Migrating_from_Vue_2.md"},e=t("",65),p=[e];function h(l,k,r,o,g,d){return i(),a("div",null,p)}const y=s(n,[["render",h]]);export{u as __pageData,y as default};
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Приложение: Миграция с Vue 2","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Appendix__Migrating_from_Vue_2.md","filePath":"ru/book/Appendix__Migrating_from_Vue_2.md","lastUpdated":1726505115000}'),n={name:"ru/book/Appendix__Migrating_from_Vue_2.md"},e=t("",65),p=[e];function h(l,k,r,o,g,d){return i(),a("div",null,p)}const y=s(n,[["render",h]]);export{u as __pageData,y as default};
diff --git a/assets/ru_book_Chapter_10__Deploying_Your_Application.md.B7eBuHbF.js b/assets/ru_book_Chapter_10__Deploying_Your_Application.md.DC-alAIG.js
similarity index 99%
rename from assets/ru_book_Chapter_10__Deploying_Your_Application.md.B7eBuHbF.js
rename to assets/ru_book_Chapter_10__Deploying_Your_Application.md.DC-alAIG.js
index 850c470f9..5ba3278f7 100644
--- a/assets/ru_book_Chapter_10__Deploying_Your_Application.md.B7eBuHbF.js
+++ b/assets/ru_book_Chapter_10__Deploying_Your_Application.md.DC-alAIG.js
@@ -1,4 +1,4 @@
-import{_ as t,o as s,c as n,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const e="/assets/Figure_10.01_B18602.D862Q32A.jpg",i="/assets/Figure_10.02_B18602.BNHWNgE3.jpg",E=JSON.parse('{"title":"Развертывание приложения","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_10__Deploying_Your_Application.md","filePath":"ru/book/Chapter_10__Deploying_Your_Application.md","lastUpdated":1726474804000}'),r={name:"ru/book/Chapter_10__Deploying_Your_Application.md"},o=a('

Развертывание приложения

Работа над приложением закончилась бы печально, если бы мы не смогли опубликовать конечный продукт. Представление приложения в Интернете требует внимания к некоторым деталям и знакомства с некоторыми терминами и возможностями хостинга.

Хотя это и довольно просто, но все же требует внимания к некоторым деталям и знакомства с некоторыми терминами и возможностями хостинга.

В этой главе мы познакомимся со следующим:

  • Что включает в себя публикация веб-приложения в Интернете
  • Вопросы, связанные с созданием приложения для развертывания
  • Знакомство с условиями и процессами регистрации домена
  • Настройка веб-сервера для размещения одностраничного приложения (SPA) или прогрессивного веб-приложения (PWA)
  • Защита сервера нашего веб-приложения с помощью Let's Encrypt

Основная цель этой главы - дать вам инструменты для понимания шагов, необходимых для публикации и защиты веб-сайта и, соответственно, нашего SPA или PWA.

Технические требования

Эта глава носит в основном информационный характер, однако в качестве примеров в репозиторий книги было загружено несколько конфигурационных файлов, с которыми можно ознакомиться здесь.

Что включает в себя публикация веб-приложения?

Публикация веб-приложения Vue 3 не сильно отличается от публикации любого другого сайта, за исключением нескольких ключевых отличий. В этой главе мы рассмотрим чистую установку, т.е. все необходимые элементы мы создадим самостоятельно. В самом общем случае нам необходимо учесть следующее:

  • Доменное имя для нашего сайта/приложения
  • Путь назначения для нашего приложения
  • Услуга хостинга
  • Программное обеспечение веб-сервера
  • Получение сертификата безопасности

Предыдущие пункты также дают нам простую формулу для подготовки. Давайте пойдем по порядку, объясняя по мере продвижения каждый необходимый термин и проблему.

Домены, серверы доменных имен (DNS) и записи DNS

Каждый компьютер, подключенный к сети, получает уникальный идентификационный адрес, отличающий его от других компьютеров в той же сети. Такие адреса называются Internet Protocol (IP), и в настоящее время их существует два - IP версий 4 и 6.

  • IPv4: Адреса состоят из четырех чисел, разделенных точкой. Диапазон чисел составляет от 0 до 255. Существует несколько зарезервированных адресов, имеющих особое значение, например 127.0.0.1, который представляет собой обратную петлю к нашему собственному компьютеру. Эти адреса также могут иметь маску, определяющую подсегмент в сети. Скорее всего, в вашей домашней сети используется именно этот протокол.
  • IPv6: Этот протокол предоставляет значительно большее адресное пространство, состоящее из восьми групп по четыре шестнадцатеричных цифры, разделенных точкой с запятой. Благодаря такому большому размеру протокол также позволяет упростить обозначения, удаляя ведущие нули и заменяя все нулевые сегменты пустым сегментом. Например, адрес loopback, эквивалентный адресу IPv4 127.0.0.1 в IPv6 - это 0000:0000:0000:0000:0000:0000:0000:0001, который затем можно сократить как 0:0:0:0:0:0:0:1 или просто ::1 .

Есть еще много интересного о сетевых адресах, но только из этого краткого введения уже можно увидеть проблему удобства использования. Эти адреса отлично подходят для компьютеров, но не подходят для "человеческой памяти". В огромном Интернете, с миллионами подключенных компьютеров, использование только IP-адресов для навигации было бы невозможно.

Поэтому в инфраструктуре Сети существуют специальные серверы, обеспечивающие преобразование "дружественного человеку имени" в нужный IP-адрес. Такие дружественные имена называются доменами, а серверы, обеспечивающие преобразование, - Сервисами доменных имен (DNS). Все это регулируется организацией Internet Corporation for Assigned Names and Numbers (ICANN).

Доменные имена - это то, что мы используем каждый день для доступа к любому сайту или приложению в Интернете. Они приобретаются на ограниченное время у организации, уполномоченной продавать их, называемой регистратором.

По истечении этого срока есть возможность в течение ограниченного времени продлить домен, а если нет, то он может быть приобретен любым другим лицом. Обычно домены продаются в пересчете на годы, и цены на них сильно варьируются - от нескольких центов до тысяч долларов. Домены также объединяются в группы, разделенные точками справа налево, как показано здесь:

image

Рисунок 10.1 - Части, составляющие полное доменное имя

Домен верхнего уровня управляется ICANN, и хотя наиболее известным является .com для коммерческих сайтов, существует множество других, например, следующие:

  • .org: Для организаций
  • .net: Для сетей или порталов корпоративных интрасетей и других организаций
  • .mil: Для военного использования
  • .gov: Для официальных правительственных сайтов

Новые домены верхнего уровня создаются часто. С их растущим списком можно ознакомиться здесь.

Когда мы покупаем домен (например, mydomain на предыдущем рисунке), он привязывается к выбранному нами домену верхнего уровня. Регистраторы предоставляют нам возможность выбрать домен и проверить, доступен ли он для покупки.

Чтобы домен был полезен, он должен быть зарегистрирован в DNS и указывать на IP-адрес. Для этого необходимо создать DNS-записи, что часто делается через того же регистратора, который продает домен, или же мы можем записать в регистраторе DNS, который будет иметь целевой IP. Подробнее об этом будет сказано позже, а пока просто представьте эту концепцию в уме. Наиболее часто встречающиеся DNS-записи для домена выглядят следующим образом:

Тип записи (имя)Значение и описание
AАдрес IPv4. Это основная запись, указывающая на публичный IP-адрес вашего сервера.
AAAAАдрес IPv6. Указывает на публичный IPv6-адрес вашего сервера.
CNAMEСоздает псевдоним для домена, что позволяет направлять несколько доменов к одному адресату без создания нескольких записей A/AAAA. Это может быть использовано для создания поддоменов.
TXTОбычная текстовая запись, которая часто используется при подтверждении права собственности на домен.

Таблица 10.1 - Типы записей DNS.

В зависимости от регистратора и нанимаемой услуги, вы можете никогда не увидеть эти записи или не иметь с ними дела, поскольку некоторые регистраторы/веб-хостинги управляют ими автоматически.

Поддомены не нужно покупать у регистратора, их нужно только настроить. Вы можете создать сколько угодно поддоменов для своего домена. Некоторые распространенные поддомены выглядят следующим образом:

  • www: Обозначает World Wide Web, или веб-страницу. В настоящее время этот поддомен часто используется как синоним домена.
  • app: Для приложений.
  • admin: Для административного доступа.
  • mail: Для служб электронной почты.

Используя поддомены, можно размещать несколько сайтов на одном домене/хосте. Позже мы рассмотрим, как настроить один из них для нашего приложения на нашем веб-сервере. На данный момент необходимо помнить, что домен или поддомен будет указывать в качестве конечного адресата на ваш сервер.

Примечание о loopback-адресе

Согласно предыдущим примерам, "доменное" имя, зарезервированное для loopback (домашнего) адреса, - localhost.

Домен, на котором будет размещено наше приложение, - это первый шаг к присутствию в Интернете. С ним мы переходим к следующему вопросу - где будет размещено приложение в этом домене.

Размышления о создании приложения для развертывания

После того как мы получили домен/поддомен, нам необходимо решить (или узнать), на каком пути будет располагаться приложение. Путь - это то, что следует за доменом, в сегментах, разделенных прямой косой чертой (/) - например, mydomain.com/store/product.html. Эти участки называются "путями", поскольку они соответствуют той же структуре каталогов, что и зеркальное отображение в локальном хранилище.

Наше приложение будет обслуживаться через веб-сервер. Эти удивительные программы построены на концепции обслуживания файлов в соответствии со структурой каталогов (папка/подпапка/файл...). Внутри нашего сервера запрос домена будет соответствовать файлам в локальной директории.

Здесь нам необходимо знать, будет ли приложение Vue размещено в корне или по пути (директории), поскольку нам необходимо указать это в процессе сборки, если мы используем Vue Router в режиме веб-истории (пересмотрите главу 5, Одностраничные приложения, если вам необходимо освежить эту тему). В данном случае нам необходимо сделать две модификации:

  • Указать корневой путь для приложения в конфигурации Router
  • Настроить веб-сервер на изменение службы каталогов/файлов и направлять все запросы к файлу index.html

Если наше приложение размещено на mydomain.com/app с использованием режима web history, то нам необходимо изменить определение роутера, передав "базовый путь" в функцию creator. Так, если мы рассмотрим роутер из нашего примера SPA-приложения в главе 5, Одностраничные приложения, то мы можем изменить его следующим образом:

/chapter 5/to-do SPA/src/router/index.js
js
import { createWebHistory } from "vue-router"
+import{_ as t,o as s,c as n,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const e="/assets/Figure_10.01_B18602.D862Q32A.jpg",i="/assets/Figure_10.02_B18602.BNHWNgE3.jpg",E=JSON.parse('{"title":"Развертывание приложения","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_10__Deploying_Your_Application.md","filePath":"ru/book/Chapter_10__Deploying_Your_Application.md","lastUpdated":1726505115000}'),r={name:"ru/book/Chapter_10__Deploying_Your_Application.md"},o=a('

Развертывание приложения

Работа над приложением закончилась бы печально, если бы мы не смогли опубликовать конечный продукт. Представление приложения в Интернете требует внимания к некоторым деталям и знакомства с некоторыми терминами и возможностями хостинга.

Хотя это и довольно просто, но все же требует внимания к некоторым деталям и знакомства с некоторыми терминами и возможностями хостинга.

В этой главе мы познакомимся со следующим:

  • Что включает в себя публикация веб-приложения в Интернете
  • Вопросы, связанные с созданием приложения для развертывания
  • Знакомство с условиями и процессами регистрации домена
  • Настройка веб-сервера для размещения одностраничного приложения (SPA) или прогрессивного веб-приложения (PWA)
  • Защита сервера нашего веб-приложения с помощью Let's Encrypt

Основная цель этой главы - дать вам инструменты для понимания шагов, необходимых для публикации и защиты веб-сайта и, соответственно, нашего SPA или PWA.

Технические требования

Эта глава носит в основном информационный характер, однако в качестве примеров в репозиторий книги было загружено несколько конфигурационных файлов, с которыми можно ознакомиться здесь.

Что включает в себя публикация веб-приложения?

Публикация веб-приложения Vue 3 не сильно отличается от публикации любого другого сайта, за исключением нескольких ключевых отличий. В этой главе мы рассмотрим чистую установку, т.е. все необходимые элементы мы создадим самостоятельно. В самом общем случае нам необходимо учесть следующее:

  • Доменное имя для нашего сайта/приложения
  • Путь назначения для нашего приложения
  • Услуга хостинга
  • Программное обеспечение веб-сервера
  • Получение сертификата безопасности

Предыдущие пункты также дают нам простую формулу для подготовки. Давайте пойдем по порядку, объясняя по мере продвижения каждый необходимый термин и проблему.

Домены, серверы доменных имен (DNS) и записи DNS

Каждый компьютер, подключенный к сети, получает уникальный идентификационный адрес, отличающий его от других компьютеров в той же сети. Такие адреса называются Internet Protocol (IP), и в настоящее время их существует два - IP версий 4 и 6.

  • IPv4: Адреса состоят из четырех чисел, разделенных точкой. Диапазон чисел составляет от 0 до 255. Существует несколько зарезервированных адресов, имеющих особое значение, например 127.0.0.1, который представляет собой обратную петлю к нашему собственному компьютеру. Эти адреса также могут иметь маску, определяющую подсегмент в сети. Скорее всего, в вашей домашней сети используется именно этот протокол.
  • IPv6: Этот протокол предоставляет значительно большее адресное пространство, состоящее из восьми групп по четыре шестнадцатеричных цифры, разделенных точкой с запятой. Благодаря такому большому размеру протокол также позволяет упростить обозначения, удаляя ведущие нули и заменяя все нулевые сегменты пустым сегментом. Например, адрес loopback, эквивалентный адресу IPv4 127.0.0.1 в IPv6 - это 0000:0000:0000:0000:0000:0000:0000:0001, который затем можно сократить как 0:0:0:0:0:0:0:1 или просто ::1 .

Есть еще много интересного о сетевых адресах, но только из этого краткого введения уже можно увидеть проблему удобства использования. Эти адреса отлично подходят для компьютеров, но не подходят для "человеческой памяти". В огромном Интернете, с миллионами подключенных компьютеров, использование только IP-адресов для навигации было бы невозможно.

Поэтому в инфраструктуре Сети существуют специальные серверы, обеспечивающие преобразование "дружественного человеку имени" в нужный IP-адрес. Такие дружественные имена называются доменами, а серверы, обеспечивающие преобразование, - Сервисами доменных имен (DNS). Все это регулируется организацией Internet Corporation for Assigned Names and Numbers (ICANN).

Доменные имена - это то, что мы используем каждый день для доступа к любому сайту или приложению в Интернете. Они приобретаются на ограниченное время у организации, уполномоченной продавать их, называемой регистратором.

По истечении этого срока есть возможность в течение ограниченного времени продлить домен, а если нет, то он может быть приобретен любым другим лицом. Обычно домены продаются в пересчете на годы, и цены на них сильно варьируются - от нескольких центов до тысяч долларов. Домены также объединяются в группы, разделенные точками справа налево, как показано здесь:

image

Рисунок 10.1 - Части, составляющие полное доменное имя

Домен верхнего уровня управляется ICANN, и хотя наиболее известным является .com для коммерческих сайтов, существует множество других, например, следующие:

  • .org: Для организаций
  • .net: Для сетей или порталов корпоративных интрасетей и других организаций
  • .mil: Для военного использования
  • .gov: Для официальных правительственных сайтов

Новые домены верхнего уровня создаются часто. С их растущим списком можно ознакомиться здесь.

Когда мы покупаем домен (например, mydomain на предыдущем рисунке), он привязывается к выбранному нами домену верхнего уровня. Регистраторы предоставляют нам возможность выбрать домен и проверить, доступен ли он для покупки.

Чтобы домен был полезен, он должен быть зарегистрирован в DNS и указывать на IP-адрес. Для этого необходимо создать DNS-записи, что часто делается через того же регистратора, который продает домен, или же мы можем записать в регистраторе DNS, который будет иметь целевой IP. Подробнее об этом будет сказано позже, а пока просто представьте эту концепцию в уме. Наиболее часто встречающиеся DNS-записи для домена выглядят следующим образом:

Тип записи (имя)Значение и описание
AАдрес IPv4. Это основная запись, указывающая на публичный IP-адрес вашего сервера.
AAAAАдрес IPv6. Указывает на публичный IPv6-адрес вашего сервера.
CNAMEСоздает псевдоним для домена, что позволяет направлять несколько доменов к одному адресату без создания нескольких записей A/AAAA. Это может быть использовано для создания поддоменов.
TXTОбычная текстовая запись, которая часто используется при подтверждении права собственности на домен.

Таблица 10.1 - Типы записей DNS.

В зависимости от регистратора и нанимаемой услуги, вы можете никогда не увидеть эти записи или не иметь с ними дела, поскольку некоторые регистраторы/веб-хостинги управляют ими автоматически.

Поддомены не нужно покупать у регистратора, их нужно только настроить. Вы можете создать сколько угодно поддоменов для своего домена. Некоторые распространенные поддомены выглядят следующим образом:

  • www: Обозначает World Wide Web, или веб-страницу. В настоящее время этот поддомен часто используется как синоним домена.
  • app: Для приложений.
  • admin: Для административного доступа.
  • mail: Для служб электронной почты.

Используя поддомены, можно размещать несколько сайтов на одном домене/хосте. Позже мы рассмотрим, как настроить один из них для нашего приложения на нашем веб-сервере. На данный момент необходимо помнить, что домен или поддомен будет указывать в качестве конечного адресата на ваш сервер.

Примечание о loopback-адресе

Согласно предыдущим примерам, "доменное" имя, зарезервированное для loopback (домашнего) адреса, - localhost.

Домен, на котором будет размещено наше приложение, - это первый шаг к присутствию в Интернете. С ним мы переходим к следующему вопросу - где будет размещено приложение в этом домене.

Размышления о создании приложения для развертывания

После того как мы получили домен/поддомен, нам необходимо решить (или узнать), на каком пути будет располагаться приложение. Путь - это то, что следует за доменом, в сегментах, разделенных прямой косой чертой (/) - например, mydomain.com/store/product.html. Эти участки называются "путями", поскольку они соответствуют той же структуре каталогов, что и зеркальное отображение в локальном хранилище.

Наше приложение будет обслуживаться через веб-сервер. Эти удивительные программы построены на концепции обслуживания файлов в соответствии со структурой каталогов (папка/подпапка/файл...). Внутри нашего сервера запрос домена будет соответствовать файлам в локальной директории.

Здесь нам необходимо знать, будет ли приложение Vue размещено в корне или по пути (директории), поскольку нам необходимо указать это в процессе сборки, если мы используем Vue Router в режиме веб-истории (пересмотрите главу 5, Одностраничные приложения, если вам необходимо освежить эту тему). В данном случае нам необходимо сделать две модификации:

  • Указать корневой путь для приложения в конфигурации Router
  • Настроить веб-сервер на изменение службы каталогов/файлов и направлять все запросы к файлу index.html

Если наше приложение размещено на mydomain.com/app с использованием режима web history, то нам необходимо изменить определение роутера, передав "базовый путь" в функцию creator. Так, если мы рассмотрим роутер из нашего примера SPA-приложения в главе 5, Одностраничные приложения, то мы можем изменить его следующим образом:

/chapter 5/to-do SPA/src/router/index.js
js
import { createWebHistory } from "vue-router"
 // ...
 router = createRouter({
     history: createWebHistory('/app'),
diff --git a/assets/ru_book_Chapter_10__Deploying_Your_Application.md.B7eBuHbF.lean.js b/assets/ru_book_Chapter_10__Deploying_Your_Application.md.DC-alAIG.lean.js
similarity index 93%
rename from assets/ru_book_Chapter_10__Deploying_Your_Application.md.B7eBuHbF.lean.js
rename to assets/ru_book_Chapter_10__Deploying_Your_Application.md.DC-alAIG.lean.js
index 028d9571d..166edff92 100644
--- a/assets/ru_book_Chapter_10__Deploying_Your_Application.md.B7eBuHbF.lean.js
+++ b/assets/ru_book_Chapter_10__Deploying_Your_Application.md.DC-alAIG.lean.js
@@ -1 +1 @@
-import{_ as t,o as s,c as n,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const e="/assets/Figure_10.01_B18602.D862Q32A.jpg",i="/assets/Figure_10.02_B18602.BNHWNgE3.jpg",E=JSON.parse('{"title":"Развертывание приложения","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_10__Deploying_Your_Application.md","filePath":"ru/book/Chapter_10__Deploying_Your_Application.md","lastUpdated":1726474804000}'),r={name:"ru/book/Chapter_10__Deploying_Your_Application.md"},o=a("",103),l=[o];function p(g,h,d,c,u,k){return s(),n("div",null,l)}const b=t(r,[["render",p]]);export{E as __pageData,b as default};
+import{_ as t,o as s,c as n,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const e="/assets/Figure_10.01_B18602.D862Q32A.jpg",i="/assets/Figure_10.02_B18602.BNHWNgE3.jpg",E=JSON.parse('{"title":"Развертывание приложения","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_10__Deploying_Your_Application.md","filePath":"ru/book/Chapter_10__Deploying_Your_Application.md","lastUpdated":1726505115000}'),r={name:"ru/book/Chapter_10__Deploying_Your_Application.md"},o=a("",103),l=[o];function p(g,h,d,c,u,k){return s(),n("div",null,l)}const b=t(r,[["render",p]]);export{E as __pageData,b as default};
diff --git a/assets/ru_book_Chapter_11__Bonus_Chapter_-_UX_Patterns.md.Cf0wRQMQ.js b/assets/ru_book_Chapter_11__Bonus_Chapter_-_UX_Patterns.md.CwpPllMl.js
similarity index 99%
rename from assets/ru_book_Chapter_11__Bonus_Chapter_-_UX_Patterns.md.Cf0wRQMQ.js
rename to assets/ru_book_Chapter_11__Bonus_Chapter_-_UX_Patterns.md.CwpPllMl.js
index 3b5c39a3c..78487896f 100644
--- a/assets/ru_book_Chapter_11__Bonus_Chapter_-_UX_Patterns.md.Cf0wRQMQ.js
+++ b/assets/ru_book_Chapter_11__Bonus_Chapter_-_UX_Patterns.md.CwpPllMl.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/Figure_11.01_B18602.D2BVf6E-.jpg",e="/assets/Figure_11.02_B18602.CDtDoGSy.jpg",p="/assets/Figure_11.03_B18602.Cbajyntl.jpg",l="/assets/Figure_11.04_B18602.Nbcm5fem.jpg",r="/assets/Figure_11.05_B18602.DOLwcOmk.jpg",h="/assets/Figure_11.06_B18602.D_8LOXS0.jpg",o="/assets/Figure_11.07_B18602.B6zSrLMS.jpg",k="/assets/Figure_11.08_B18602.DnG4p2SD.jpg",g="/assets/Figure_11.09_B18602.CIXd7bXO.jpg",d="/assets/Figure_11.10_B18602.DEsNKJzt.jpg",E="/assets/Figure_11.11_B18602.m7KOZEy_.jpg",c="/assets/Figure_11.12_B18602.BL6wC1Zo.jpg",u="/assets/Figure_11.13_B18602.VJSmxnDa.jpg",m="/assets/Figure_11.14_B18602.BYWz-YHh.jpg",y="/assets/Figure_11.15_B18602.BCEyXK3J.jpg",q="/assets/Figure_11.16_B18602.BOg-tEg3.jpg",F="/assets/Figure_11.17_B18602.Bn5ocAvP.jpg",_="/assets/Figure_11.18_B18602.7DLBEDjW.jpg",b="/assets/Figure_11.19_B18602.37K89Jyn.jpg",C="/assets/Figure_11.20_B18602.D-ddK-6E.jpg",f="/assets/Figure_11.21_B18602.CU49DF7o.jpg",B="/assets/Figure_11.22_B18602.Br7YLHKm.jpg",v="/assets/Figure_11.23_B18602.CdcfiIwu.jpg",P="/assets/Figure_11.24_B18602.p96pfcWg.jpg",x="/assets/Figure_11.25_B18602.BK-tewWF.jpg",D="/assets/Figure_11.26_B18602.B4Y2vV9r.jpg",A="/assets/Figure_11.27_B18602.CTzdM5nv.jpg",w="/assets/Figure_11.28_B18602.BP2SL_B9.jpg",S="/assets/Figure_11.29_B18602.CbfPVlnu.jpg",U="/assets/Figure_11.30_B18602.yQ0dvSXN.jpg",K=JSON.parse('{"title":"Бонусная глава - Шаблоны UX","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.md","filePath":"ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.md","lastUpdated":1726474804000}'),j={name:"ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.md"},X=t('

Бонусная глава - Шаблоны UX

Давным-давно компьютерное программное обеспечение продавалось вместе с увесистыми печатными руководствами, а во многих случаях и со специализированным обучением. Если в корпоративных приложениях и специализированном оборудовании это еще как-то применимо, то на потребительском рынке такая концепция практически полностью исчезла.

Представьте себе, что для каждого веб-сайта нужно было прочитать руководство и пройти трехмесячные курсы обучения, прежде чем начать его использовать. Как же так получается, что сегодня пользователь, познакомившись с новым приложением, может с первого взгляда справиться с основными задачами?

Несомненно, большой вклад в эту ситуацию внесли многолетние исследования и прогресс в области человеко-компьютерного взаимодействия - дисциплины, практически такой же древней, как и сами компьютеры.

В этой главе мы сделаем шаг назад от тонкостей внутренних шаблонов и архитектуры программного обеспечения и рассмотрим некоторые из устоявшихся шаблонов для проектирования пользовательского интерфейса (UI) и пользовательского опыта (UX). Мы сделаем следующее:

  • Поймем различия между UI и UX
  • Познакомимся с распространенными шаблонами UX в веб-приложениях
  • Узнаем о злой стороне UX с помощью "темных" шаблонов

К концу этой главы вы получите широкое представление о том, что такое UX-шаблоны, на каких принципах они основаны, каковы наиболее распространенные на сегодняшний день подходы и какие эффекты они вызывают у пользователя - положительные или отрицательные. Вы также изучите и выработаете общий язык для взаимодействия с дизайнерами UI и UX и другими разработчиками.

Технические требования

Эта глава носит в основном информационный характер, однако в ней рассматриваются небольшие примеры, реализованные на Vue 3, поскольку они демонстрируют использование техники, не встречавшейся до сих пор в книге. Полный исходный код можно найти в папке проекта главы в репозитории книги по адресу: https://github.com/PacktPublishing/Vue.js-3-Design-Patterns-and-Best-Practices/tree/main/Chapter11.

Посмотрите следующее видео, чтобы увидеть код в действии.

UI-дизайн против UX-дизайна

Очень часто можно услышать, что эти два термина ассоциируются или используются неразличенно, а в некоторых случаях обе обязанности объединяются в одну роль в команде, что еще больше усиливает путаницу.

  • Дизайн пользовательского интерфейса (User Inteface - UI) отвечает за определение визуального языка для представления информации и сбора пользовательских данных для взаимодействия с приложением. Он включает в себя разработку визуальных стилей, типографики, взаимодействия, цветов, размеров, анимации, звуков и т.д., которые составляют интерфейс между человеком и компьютером (программным и аппаратным обеспечением).

    Это относится как к визуальным средам (веб, мобильные устройства и т.д.), так и к другим типам, таким как интерфейсы на естественном языке (вспомните помощников искусственного интеллекта, таких как Siri, Alexa и т.д.).

  • UX-дизайн (User eXperience) включает условия, которые влияют на дизайн пользовательского интерфейса и направляют его, но охватывает более широкий взгляд на восприятие пользователем системы, компании или функции, с которой он взаимодействует.

    Он включает в себя не только программные или аппаратные элементы, но и такие аспекты, как поддержка, продвижение, постсервисное обслуживание и т.д. Цель - создать широкий и, надеюсь, успешный положительный опыт с точки зрения пользователя.

    Под этим определением подразумевается взаимодействие с другими дисциплинами, такими как маркетинг, поддержка клиентов, дистрибуция, управление продуктом, узнаваемость бренда и т.д.

    Его основная цель - изменить или создать у пользователя представление о том, что продукт, услуга или система просты в использовании, эффективны и, прежде всего, полезны для его целей.

Понимание принципов и целей каждой дисциплины поможет нам разрабатывать более качественное программное обеспечение и находить общую почву для понимания при сотрудничестве с теми, кто занимается этими дисциплинами. Без UI и UX даже самое лучшее программное обеспечение может кануть в Лету. История программного обеспечения полна примеров того, как компании, даже имея продукты, превосходящие своих конкурентов, становились на путь птицы Додо, поскольку пренебрегали пользовательским опытом или имели плохой визуальный дизайн. Иногда обложка книги так же важна, как и ее содержание.

Принципы проектирования пользовательского интерфейса

В основе дизайна пользовательского интерфейса лежит задача создания интерфейса, который будет удобен для пользователя, эффективен, информативен и приятен. Такие маркетинговые концепции, как удержание и удовлетворение пользователей, в значительной степени зависят от дизайна продукта.

Для наших целей мы ограничим рассмотрение пользовательских интерфейсов интерфейсами приложений на дисплее (представленных с помощью визуальных средств, таких как экран или сенсорное устройство).

Существует большое количество документации, детально изучающей проектирование пользовательских интерфейсов с инженерной точностью и четко определенными отраслевыми стандартами. Каждый аспект имеет свой собственный набор правил, которые необходимо учитывать хорошему дизайнеру пользовательского интерфейса. Например, веб-дизайнер будет видеть вещи иначе, чем промышленный дизайнер.

В нашем случае большинство шаблонов для проектирования пользовательского интерфейса с самого начала были включены в стандарт HTML, поэтому большинство, если не все, из того, что мы будем рассматривать как шаблоны, уже знакомо вам и конечному пользователю. Однако то, как они работают, или принципы, которым они следуют, - это не то, что обычно обсуждается или является очевидным.

Например, почему символ "X" для закрытия окна находится в правом верхнем углу? Что означает каждый значок меню? Почему кнопка Start расположена в верхнем или левом нижнем углу экрана? Почему некоторые функции трудно найти, а другие доступны с первого взгляда? Все эти вопросы имеют решение, которое коренится в дизайне пользовательского интерфейса и UX-шаблонах. Поэтому давайте рассмотрим некоторые принципы пользовательского интерфейса, а затем перейдем к шаблонам UX.

Достаточный контраст или различие между элементами

Этот принцип гласит, что элементы страницы должны быть четко отличимы друг от друга и отражать свою функцию. Он отражает необходимость выстраивания визуальных элементов в иерархию с использованием размера, цвета, типографики, полей и белого пространства таким образом, чтобы каждая функция была четко представлена и отличалась от других. Основная задача - направить внимание пользователя на центральную точку интерфейса. Рассмотрим в качестве примера домашнюю страницу Packt:

Рисунок 11.1 - Главная страница Packt и цветовой контраст.

В данном примере большая часть контента использует ограниченное количество цветов ("палитру"), а две кнопки имеют высокий контраст, что привлекает внимание пользователя: это кнопки TRY FOR FREE и START LEARNING NOW. Очевидно, что дизайнер установил точку фокусировки на этих двух действиях.

В связи с этим принципом на данном снимке экрана применено "правило" дизайна, которое удобно иметь в виду: 60-30-10 color rule. Это означает, что 60% раздела должны иметь основной цвет (здесь он темно-коричневый), 30% - первичный (используется для обычного текста, меню и изображения, которое здесь белое), а 10% отводится под вторичный цвет или высокий контраст (используется для фокусной точки, или кнопок "призыва к действию" оранжевого цвета). Продолжим анализ этой страницы, чтобы ознакомиться с другими принципами проектирования пользовательского интерфейса.

Стимулировать повторение и быть последовательным.

Этот принцип основан на концепции, согласно которой люди учатся через повторение. Он указывает на то, что одна и та же задача, даже выполняемая через разные интерфейсы, должна вызывать у пользователя более или менее одинаковое повторяющееся поведение.

Например, если вы попросите пользователя открыть текстовый процессор, а потом предложите ему открыть файл, куда он попытается нажать? Большинство "опытных" пользователей подведут мышь к левой верхней части окна и будут искать либо значок, обозначающий "Открыть", либо меню Файл. Почему так? Потому что такое размещение стало стандартным, и мы путем повторения узнали, где его искать. Если бы вы разместили меню File в правом нижнем углу экрана, то большинство, если не все, пользователи не смогли бы найти его без подсказок.

Еще один пример повторения и согласованности возникает при отображении визуальных элементов - что более важно, когда они являются частью списка или общего набора. Приведем пример с сайта Packt Publishing:

Рисунок 11.2 - Карточки с книгами

В предыдущем примере дизайнер использовал повторение для отображения книг в прайм-тайм, используя вертикальные "карточки" для каждого предмета. Каждая карточка повторяет аналогичный макет, цвета и формат. Как только вы поймете, что отображает одна из них, то же самое можно сказать и обо всех остальных: это повторение визуального дизайна, и оно важно, чтобы пользователю не пришлось "заново" изучать интерфейс для каждой книги.

Кроче говоря, это повторение расположения, действий и визуальных стилей. Перейдем к следующему.

Внимательно следите за выравниванием и направлением

Выравнивание элементов (графики, шрифтов и т.д.) создает ощущение порядка и организованности, показывая, что эти элементы принадлежат к одной группе или имеют одинаковый вес или важность. В основном мы знакомы с выравниванием (и интервалом) при работе со шрифтами, но эта же концепция применима и к графическим элементам, таким как пиктограммы, секции, изображения и т.д. Из предыдущего рисунка обратите внимание на то, как выровнены вкладки, а также карточки и их содержимое. Только по выравниванию и стилю можно определить, что относится к той или иной естественной группе.

Другой пример выравнивания хорошо виден при использовании типографики только для меню и функций.

Рисунок 11.3 - Нижний колонтитул сайта Packt, использующий выравнивание для отображения естественных групп.

Этот пример, хотя и простой, уже демонстрирует использование контраста (жирный шрифт против обычного), последовательности за счет повторения, выравнивания, а также следующего принципа, который мы здесь рассмотрим: близости.

Используйте близость и расстояние, чтобы показать естественные группы

Этот принцип прост: размещайте элементы, которые естественным образом связаны друг с другом, близко друг к другу. Это облегчает пользователю поиск и понимание. Типографика и иконография также могут быть использованы для демонстрации близости и схожести функциональных возможностей. Знаменитая "ленточная панель", введенная компанией Microsoft в своих приложениях Office, в значительной степени использует эту концепцию и вскоре стала стандартом. Например, вот фрагмент вкладки Home, посвященный выравниванию, спискам, интервалам и отступам:

Рисунок 11.4 - Значки абзацев

Обратите внимание, что пиктограммы, изменяющие тип абзаца, интервал и выравнивание, находятся рядом друг с другом, не "смешиваясь".

Это не единственные принципы проектирования пользовательского интерфейса, но самые основные, которые мы должны иметь в виду при разработке наших компонентов. Если вы работаете с командой, в которую входит дизайнер пользовательского интерфейса, вы можете получить шаблоны или макеты, даже раскадровки, для реализации в компонентах Vue, как мы видели в главе 4, Композиция пользовательского интерфейса с компонентами.

Если же вы работаете в команде "one-man band team" и проектирование интерфейсов лежит на ваших плечах, то эти принципы очень помогут вам создать профессиональный и полезный пользовательский интерфейс. Но это еще не все.

Законы проектирования пользовательского интерфейса

Как и в случае с принципами, в ряде исследований были выведены или определены "законы" дизайна, которые представляют собой измеримые функции для предсказания определенных атрибутов программного обеспечения, таких как удобство и дружелюбие. В частности, выделяются следующие.

Закон Фитта

Этот закон определяет, что время, необходимое пользователю для захвата цели, зависит от расстояния до указателя и размера цели. Важными понятиями здесь являются расстояние и размер цели: чем больше расстояние между целями, тем больше они должны быть.

В результате применения этого закона кнопка закрытия окна (X) располагается в одном из углов экрана (при максимизации окна), кнопка Start - в левом нижнем углу экрана, Show desktop - в правом нижнем углу экрана и так далее. Если пользователь перемещает мышь в любом из этих направлений, то рано или поздно он попадет на эти цели, и продолжение движения в том же направлении не повлияет на результат. На языке дизайна пользовательского интерфейса эти кнопки являются "бесконечными", поскольку, как только курсор достигнет угла у края экрана, продолжение прокрутки мышью в том же направлении все равно приведет к достижению цели.

Другим следствием этого закона является то, что похожие функции также должны располагаться рядом друг с другом (как, например, в примерах на Рисунке 11.4). Более подробную информацию об этом законе можно найти в Википедии по адресу https://en.wikipedia.org/wiki/Fitts's_law.

Закон Хика

Этот закон гласит, что время, которое требуется пользователю для того, чтобы сделать выбор, является логарифмической функцией, зависящей от количества доступных вариантов и их сложности. Проще говоря, слишком большое количество вариантов запутывает пользователя и заставляет его тратить больше времени на принятие решения. Некоторые следствия из этого закона выглядят следующим образом:

  • Разбивайте сложные задачи на более мелкие группы, которыми может управлять пользователь, чтобы ускорить время принятия решения
  • Избегайте создания интерфейсов, перегруженных опциями, так как они будут перегружать пользователя
  • Если функция чувствительна ко времени, сведите количество опций к минимуму, необходимому в данной ситуации

В повседневном программном обеспечении мы можем наблюдать применение этого закона во многих местах - например, в "инсталляторах" для конкретного программного обеспечения, где во время или перед началом установки пользователю последовательно представляются окна с опциями, в отличие от формы для заполнения. Более подробную информацию об этом законе можно найти в Википедии.

Восемь правил Бена Шнайдермана

В 1986 году профессор Бен Шнайдерман опубликовал свою книгу под названием Designing the User Interface: Strategies for Effective Human-Computer Interaction, в которой он сформулировал восемь правил проектирования интерфейсов. Сегодня эти правила так же актуальны, как и в день их создания, поэтому их стоит упомянуть здесь:

  1. Стремитесь к последовательности (в действиях, шагах, расположении и т.д.).
  2. Обеспечьте использование быстрых клавиш для выполнения общих задач (будь то клавиатура или пиктограммы).
  3. Предлагайте информативную обратную связь (особенно при возникновении ошибок).
  4. Дизайн диалогов с окончанием.
  5. Предлагайте простую обработку ошибок, чтобы пользователь мог быстро принять меры и избежать серьезных ошибок со стороны пользователя. Классической реализацией правил #4 и #5 являются "диалоги подтверждения" перед выполнением постоянных действий, таких как удаление содержимого.
  6. Позволяйте легко и просто выполнять действия, связанные с удалением содержимого.
  7. Позволяйте легко отменять действия (благодаря этому у нас есть Ctrl + Z!).
  8. Поддерживайте чувство контроля у пользователя. Нет ничего хуже для пользователя, чем чувствовать, что машина "делает все сама, без контроля". Если вы когда-нибудь по ошибке отправляли на печать 800-страничный файл, и у вас ушло с десяток страниц, прежде чем вы смогли отменить операцию. Вот о чем идет речь.
  9. Сокращенайте время на печать.
  10. Сокращайте кратковременную память. Пользователь может одновременно удерживать в своей кратковременной памяти лишь несколько элементов и задач, а слишком большое количество элементов на экране (меню и т.д.) вызывает отторжение. Этот принцип также связан с законом Хика.

Для практического применения и введения в тему эти принципы, правила и законы должны дать нам уверенную опору.

Больше информации об этих правилах и Бене Шнайдермане можно найти в Википедии.

Принципы проектирования UX

UX-дизайн также имеет свои цели и принципы, которые распространяются на шаблоны. Прежде всего, основная цель UX - обеспечить хорошее восприятие пользователя, создать связь с брендом или продуктом, тщательно выстроив поток взаимодействий. В данном случае решения должны быть следующими:

  • Полезность и удобство использования: Прежде всего, приложение должно делать то, для чего оно предназначено, делать это хорошо и быть простым для пользователя
  • Узнаваемость и запоминаемость: пользователь должен иметь возможность изучить и понять представленную информацию, а также усвоить ее для дальнейшего использования
  • Креативность и предоставление контроля пользователю: Когда пользователь взаимодействует с приложением, он должен чувствовать, что делает то, что задумал пользователь, и что результат "безопасен" для пользователя

Последний принцип очень важен. Если пользователь чувствует, что приложение где-то в процессе взаимодействия "потеряло контроль" над происходящим, то это залог катастрофы. К сожалению, это слишком часто происходит с темным шаблонами, которые мы рассмотрим далее в этой главе, но сейчас давайте посмотрим на хорошие шаблоны, которые приводят к хорошему опыту для пользователя.

Общие шаблоны для работы с данными

Чаще всего этим шаблонам соответствуют чистые HTML-элементы, другие же появились в последние годы благодаря грамотному использованию стилизации таких элементов. Они стали стандартными в отрасли и хорошо понимаются пользователями с первого взгляда. Ниже приводится неполный список с кратким описанием того, когда следует использовать каждый из них.

Элементы ввода HTML

Стандартные поля ввода, предусмотренные в HTML, представляют собой четкий шаблон для получения информации от пользователя. В настоящее время элемент input имеет множество вариантов благодаря атрибуту type, позволяющему вводить не только обычный текст. Используемые в формах и библиотеках проверки, эти элементы не уступают по своим возможностям: они готовы к чтению и форматированию от текста и чисел до URL, даты, времени, изображений и цветов. Полный список доступных типов, поддерживаемых современными браузерами, можно найти здесь.

По большей части эти элементы используются с базовой функциональностью и некоторым тяжелым CSS-стилем. Используйте inputtextarea) в тех случаях, когда пользователю необходимо ввести текстовую информацию. Для более сложных типов, таких как выбор даты или цвета, браузеры сегодня предлагают собственные виджеты.

Чекбоксы, радиокнопки и тумблеры

Клавиши и радиокнопки предоставляются HTML нативно и представляются пользователю в соответствии с форматом локальной ОС или среды. button представляют пользователю несколько вариантов, которые он может свободно выбрать из группы. В отличие от них, кнопки radio позволяют выбрать только один вариант из списка:

Рисунок 11.5 - Чекбоксы слева и радиокнопки справа

С выходом оригинального iPhone стал очень популярен новый вариант флажка: тумблер (toggle switch). Он не предусмотрен стандартом HTML, но его можно легко стилизовать с помощью CSS, чтобы "замаскировать" чекбокс. Тумблер имеет два состояния, включенное и выключенное, и часто используется для активации или деактивации функции или возможности. Это важное различие, поскольку флажок должен фокусироваться на вариантах или альтернативах. Вот пример:

Рисунок 11.6 - Тумблеры в каждом состоянии

Тумблер находится в состоянии "выключено" (или false), когда тумблер находится слева, и "включено", когда справа. Часто переключение также влияет на цвет, показывая его в неяркой серой гамме, когда он выключен, или в ярких цветах, когда активирован. Внутри системы эти два состояния часто обозначаются true (включено) и false (выключено), и их следует использовать для активации или деактивации настроек, функций и т.д. Компонент Toggle, реализующий стилизацию, и код v-модели вы можете найти в репозитории к этой главе.

Чипы, таблетки или теги

Этот шаблон включает в себя короткий текст (или "копию" на языке пользовательского интерфейса) внутри круглой рамки. Копия может сопровождаться значком, подчеркивающим ее состояние при выделении, или действием, например, символом "X" для ее удаления. Обычно тэги используются в списках для отображения атрибутов, тегов, категорий или других типов классификаторов для данного элемента.

В некоторых случаях они могут использоваться и для выбора (переключения) элементов из списка. В этом случае они конкурируют или ведут себя так же, как чекбокс, но в более наглядной форме. Реализация фишек достаточно тривиальна и может быть выполнена с помощью обычного CSS в одном HTML-элементе (например, в элементе span).

Рисунок 11.7 - Список элементов с таблетками

Это краткий список шаблонов пользовательского интерфейса для сбора пользовательского ввода, но он охватывает наиболее распространенные типы: HTML-вводы и вариации стилей.

##№ Общие шаблоны для визуализации данных

Эти шаблоны отображают информацию обратно пользователю, либо в ответ на действие пользователя, либо на событие приложения. Ниже приведен неполный список шаблонов.

Подсказки (tooltips)

Этот шаблон показывает пользователю плавающий небольшой текст с информацией о целевом элементе, обычно когда пользователь активирует элемент с помощью какого-либо действия (наведение, щелчок, выделение и т.д.). Информация отображается над, под или сбоку от элемента в виде "речевого пузыря" (как в комиксах). Вот пример:

Рисунок 11.8 - Всплывающая подсказка, отображающая название/действие пиктограммы и ярлыка.

В основном этот шаблон используется для отображения справки по целевому объекту, но может применяться и для отображения контекстных меню. Например, при выделении слова из этого абзаца в текстовом редакторе в режиме онлайн отобразится всплывающее окно с меню:

Рисунок 11.9 - Шаблон всплывающей подсказки, используемый для отображения контекстного меню.

Может возникнуть дискуссия по поводу того, является ли последнее использование всплывающей подсказкой или контекстным меню, но тот факт, что оно открывается при выборе, указывает на первое. Традиционно контекстные меню открываются вторичным действием, например, нажатием правой кнопки мыши (в Windows и Linux). В любом случае, концепция, которую следует запомнить для этого шаблона, заключается в том, чтобы показывать пользователю информацию при выборе или предварительной активации, чтобы помочь ему решить, что делать дальше.

Уведомляющие точки, пузырьки, метки или значки

Этот шаблон заключается в отображении маленького значка поверх более крупного значка, чтобы показать, что произошло событие, требующее внимания пользователя, но не являющееся срочным. Этот маленький значок может быть точкой, пузырьком и т.д. Если в уведомлении есть цифра, его также называют значком (badge) Ниже приведены примеры этого шаблона:

  • Маленький кружок с цифрой для новых полученных писем в значке электронной почты
  • Двойная галочка в приложении чата, указывающая на то, что собеседник получил и прочитал сообщение
  • Маленькая отметка на панели задач, показывающая, что приложение было открыто

Основная концепция заключается в том, чтобы использовать некое небольшое отклонение от пиктограммы, указывающее на необходимость обратить на себя внимание в будущем, но при этом не являющееся срочным и не влияющее на текущую деятельность пользователя.

Тостовые уведомления

Этот шаблон используется во многих приложениях и ОС. Он заключается в отображении на короткое время плавающего окна с быстрой информацией для пользователя. Часто оно включает в себя короткий текстовый фрагмент в сочетании с понятной пиктограммой.

В зависимости от ОС оно может отображаться вверху по центру, справа от экрана или внизу справа над системным лотком. Веб-приложения могут либо реализовать собственное тостовое уведомление в окне браузера, либо запросить разрешение у пользователя и отобразить "родное тостовое уведомление" с помощью локальной ОС. Вот пример уведомления о тосте:

Рисунок 11.10 - Нативное уведомление о тостах на рабочем столе

Эти уведомления полезны для информирования пользователя об изменениях в окружении, требующих его внимания, для сообщения о результате выполнения асинхронной операции (успех, ошибка и т.д.) и т.п. Эти призывы к вниманию эфемерны, поэтому они не должны быть критической частью важного рабочего процесса, за исключением только что упомянутых условий.

Карусель или слайдеры изображений

Карусель или слайдеры изображений - это шаблон для последовательного отображения в одном пространстве различных секций с изображениями и контентом. Как правило, с помощью таймера эти разделы представляются пользователю с интервалом в несколько секунд, при этом есть возможность перейти к любому из них с помощью точечной навигации. Несмотря на то, что несколько лет назад эти карусели были очень популярны, существуют и противоположные мнения, поскольку "нетерпеливые" пользователи могут так и не увидеть всего содержимого карусели. На практике рекомендуется делать список разделов как можно короче, где-то между тремя и пятью элементами.

Примеров такой реализации в Интернете множество, поскольку они реализуются в основном на посадочной странице сайта. Практически все торговые и новостные сайты используют этот шаблон - например, посадочная страница Amazon (www.amazon.de):

Рисунок 11.11 - Карусель Amazon отображает предложения из магазина

Слайдеры изображений могут быть такими же большими, как карусель, но могут быть и гораздо меньше и использоваться для отображения миниатюр. Вот еще один пример из Amazon:

Рисунок 11.12 - Amazon использует слайдеры изображений для отображения товаров пользователю

Несмотря на тривиальную реализацию, использование каруселей и слайдеров изображений является хорошим способом отображения информации для пользователя. Однако стоит предупредить, что злоупотребление этим шаблоном может привести к перегруженности и перенасыщенности интерфейса, вызвать путаницу и даже спровоцировать нежелательные побочные эффекты, такие как сенсорное подавление и избегание контента.

Панели прогресса (progress bars) и спиннеры

Панель прогресса - это любой элемент, который дает пользователю представление о том, на каком этапе рабочего процесса находится его текущее состояние. Хотя название, казалось бы, указывает на "полосу", на практике в эту категорию попадает любой элемент, отображающий прогресс выполнения ограниченного числа действий.

Основная цель - уведомить пользователя о ходе выполнения задач, требующих длительного времени, и показать, что система "занята" их выполнением, тем самым обеспечивая наглядность и чувство контроля для пользователя.

Прогресс-бары очень важны для предотвращения непроизвольных негативных действий со стороны пользователя. Если длительное задание выполняется в фоновом режиме (например, в веб-рабочем) без какой-либо обратной связи о ходе его выполнения, пользователь может подумать, что задание не началось, не удалось или компьютер "завис". Оставлять пользователя в недоумении по поводу происходящего - это негативный опыт. Вот некоторые примеры элементов индикатора выполнения:

Рисунок 11.13 - Пример прогресс-бара

Помимо стилизации, индикаторы выполнения могут использоваться и в "неопределенном состоянии", то есть приложение не может рассчитать, сколько времени или сколько шагов может занять процесс, но при этом хочет сообщить пользователю, что система занята и не должна быть прервана. В стандарте HTML предусмотрен элемент, специально предназначенный для индикаторов выполнения, который позволяет справиться с подобными ситуациями (элемент progress), но есть и другие шаблоны, которые можно использовать в таких случаях, например спиннеры.

Как видно из названия "спиннер", это иконка, которая "крутится" сама по себе, создавая впечатление, что приложение занято и работает. Вот пример спиннера с текстовым индикатором:

Рисунок 11.14 - Кружок спиннера, указывающий на занятость приложения

Этот подход уже давно используется в ОС и приложениях, поэтому пользователи понимают его смысл. Есть одно предостережение при использовании этого шаблона - после длительного использования он может вызывать беспокойство, поэтому рекомендуется сопровождать его каким-либо индикатором действия. Реализация компонента спиннера в Vue достаточно тривиальна, и в основном это CSS:

./components/Spinner.vue
vue
<script setup>
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/Figure_11.01_B18602.D2BVf6E-.jpg",e="/assets/Figure_11.02_B18602.CDtDoGSy.jpg",p="/assets/Figure_11.03_B18602.Cbajyntl.jpg",l="/assets/Figure_11.04_B18602.Nbcm5fem.jpg",r="/assets/Figure_11.05_B18602.DOLwcOmk.jpg",h="/assets/Figure_11.06_B18602.D_8LOXS0.jpg",o="/assets/Figure_11.07_B18602.B6zSrLMS.jpg",k="/assets/Figure_11.08_B18602.DnG4p2SD.jpg",g="/assets/Figure_11.09_B18602.CIXd7bXO.jpg",d="/assets/Figure_11.10_B18602.DEsNKJzt.jpg",E="/assets/Figure_11.11_B18602.m7KOZEy_.jpg",c="/assets/Figure_11.12_B18602.BL6wC1Zo.jpg",u="/assets/Figure_11.13_B18602.VJSmxnDa.jpg",m="/assets/Figure_11.14_B18602.BYWz-YHh.jpg",y="/assets/Figure_11.15_B18602.BCEyXK3J.jpg",q="/assets/Figure_11.16_B18602.BOg-tEg3.jpg",F="/assets/Figure_11.17_B18602.Bn5ocAvP.jpg",_="/assets/Figure_11.18_B18602.7DLBEDjW.jpg",b="/assets/Figure_11.19_B18602.37K89Jyn.jpg",C="/assets/Figure_11.20_B18602.D-ddK-6E.jpg",f="/assets/Figure_11.21_B18602.CU49DF7o.jpg",B="/assets/Figure_11.22_B18602.Br7YLHKm.jpg",v="/assets/Figure_11.23_B18602.CdcfiIwu.jpg",P="/assets/Figure_11.24_B18602.p96pfcWg.jpg",x="/assets/Figure_11.25_B18602.BK-tewWF.jpg",D="/assets/Figure_11.26_B18602.B4Y2vV9r.jpg",A="/assets/Figure_11.27_B18602.CTzdM5nv.jpg",w="/assets/Figure_11.28_B18602.BP2SL_B9.jpg",S="/assets/Figure_11.29_B18602.CbfPVlnu.jpg",U="/assets/Figure_11.30_B18602.yQ0dvSXN.jpg",K=JSON.parse('{"title":"Бонусная глава - Шаблоны UX","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.md","filePath":"ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.md","lastUpdated":1726505115000}'),j={name:"ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.md"},X=t('

Бонусная глава - Шаблоны UX

Давным-давно компьютерное программное обеспечение продавалось вместе с увесистыми печатными руководствами, а во многих случаях и со специализированным обучением. Если в корпоративных приложениях и специализированном оборудовании это еще как-то применимо, то на потребительском рынке такая концепция практически полностью исчезла.

Представьте себе, что для каждого веб-сайта нужно было прочитать руководство и пройти трехмесячные курсы обучения, прежде чем начать его использовать. Как же так получается, что сегодня пользователь, познакомившись с новым приложением, может с первого взгляда справиться с основными задачами?

Несомненно, большой вклад в эту ситуацию внесли многолетние исследования и прогресс в области человеко-компьютерного взаимодействия - дисциплины, практически такой же древней, как и сами компьютеры.

В этой главе мы сделаем шаг назад от тонкостей внутренних шаблонов и архитектуры программного обеспечения и рассмотрим некоторые из устоявшихся шаблонов для проектирования пользовательского интерфейса (UI) и пользовательского опыта (UX). Мы сделаем следующее:

  • Поймем различия между UI и UX
  • Познакомимся с распространенными шаблонами UX в веб-приложениях
  • Узнаем о злой стороне UX с помощью "темных" шаблонов

К концу этой главы вы получите широкое представление о том, что такое UX-шаблоны, на каких принципах они основаны, каковы наиболее распространенные на сегодняшний день подходы и какие эффекты они вызывают у пользователя - положительные или отрицательные. Вы также изучите и выработаете общий язык для взаимодействия с дизайнерами UI и UX и другими разработчиками.

Технические требования

Эта глава носит в основном информационный характер, однако в ней рассматриваются небольшие примеры, реализованные на Vue 3, поскольку они демонстрируют использование техники, не встречавшейся до сих пор в книге. Полный исходный код можно найти в папке проекта главы в репозитории книги по адресу: https://github.com/PacktPublishing/Vue.js-3-Design-Patterns-and-Best-Practices/tree/main/Chapter11.

Посмотрите следующее видео, чтобы увидеть код в действии.

UI-дизайн против UX-дизайна

Очень часто можно услышать, что эти два термина ассоциируются или используются неразличенно, а в некоторых случаях обе обязанности объединяются в одну роль в команде, что еще больше усиливает путаницу.

  • Дизайн пользовательского интерфейса (User Inteface - UI) отвечает за определение визуального языка для представления информации и сбора пользовательских данных для взаимодействия с приложением. Он включает в себя разработку визуальных стилей, типографики, взаимодействия, цветов, размеров, анимации, звуков и т.д., которые составляют интерфейс между человеком и компьютером (программным и аппаратным обеспечением).

    Это относится как к визуальным средам (веб, мобильные устройства и т.д.), так и к другим типам, таким как интерфейсы на естественном языке (вспомните помощников искусственного интеллекта, таких как Siri, Alexa и т.д.).

  • UX-дизайн (User eXperience) включает условия, которые влияют на дизайн пользовательского интерфейса и направляют его, но охватывает более широкий взгляд на восприятие пользователем системы, компании или функции, с которой он взаимодействует.

    Он включает в себя не только программные или аппаратные элементы, но и такие аспекты, как поддержка, продвижение, постсервисное обслуживание и т.д. Цель - создать широкий и, надеюсь, успешный положительный опыт с точки зрения пользователя.

    Под этим определением подразумевается взаимодействие с другими дисциплинами, такими как маркетинг, поддержка клиентов, дистрибуция, управление продуктом, узнаваемость бренда и т.д.

    Его основная цель - изменить или создать у пользователя представление о том, что продукт, услуга или система просты в использовании, эффективны и, прежде всего, полезны для его целей.

Понимание принципов и целей каждой дисциплины поможет нам разрабатывать более качественное программное обеспечение и находить общую почву для понимания при сотрудничестве с теми, кто занимается этими дисциплинами. Без UI и UX даже самое лучшее программное обеспечение может кануть в Лету. История программного обеспечения полна примеров того, как компании, даже имея продукты, превосходящие своих конкурентов, становились на путь птицы Додо, поскольку пренебрегали пользовательским опытом или имели плохой визуальный дизайн. Иногда обложка книги так же важна, как и ее содержание.

Принципы проектирования пользовательского интерфейса

В основе дизайна пользовательского интерфейса лежит задача создания интерфейса, который будет удобен для пользователя, эффективен, информативен и приятен. Такие маркетинговые концепции, как удержание и удовлетворение пользователей, в значительной степени зависят от дизайна продукта.

Для наших целей мы ограничим рассмотрение пользовательских интерфейсов интерфейсами приложений на дисплее (представленных с помощью визуальных средств, таких как экран или сенсорное устройство).

Существует большое количество документации, детально изучающей проектирование пользовательских интерфейсов с инженерной точностью и четко определенными отраслевыми стандартами. Каждый аспект имеет свой собственный набор правил, которые необходимо учитывать хорошему дизайнеру пользовательского интерфейса. Например, веб-дизайнер будет видеть вещи иначе, чем промышленный дизайнер.

В нашем случае большинство шаблонов для проектирования пользовательского интерфейса с самого начала были включены в стандарт HTML, поэтому большинство, если не все, из того, что мы будем рассматривать как шаблоны, уже знакомо вам и конечному пользователю. Однако то, как они работают, или принципы, которым они следуют, - это не то, что обычно обсуждается или является очевидным.

Например, почему символ "X" для закрытия окна находится в правом верхнем углу? Что означает каждый значок меню? Почему кнопка Start расположена в верхнем или левом нижнем углу экрана? Почему некоторые функции трудно найти, а другие доступны с первого взгляда? Все эти вопросы имеют решение, которое коренится в дизайне пользовательского интерфейса и UX-шаблонах. Поэтому давайте рассмотрим некоторые принципы пользовательского интерфейса, а затем перейдем к шаблонам UX.

Достаточный контраст или различие между элементами

Этот принцип гласит, что элементы страницы должны быть четко отличимы друг от друга и отражать свою функцию. Он отражает необходимость выстраивания визуальных элементов в иерархию с использованием размера, цвета, типографики, полей и белого пространства таким образом, чтобы каждая функция была четко представлена и отличалась от других. Основная задача - направить внимание пользователя на центральную точку интерфейса. Рассмотрим в качестве примера домашнюю страницу Packt:

Рисунок 11.1 - Главная страница Packt и цветовой контраст.

В данном примере большая часть контента использует ограниченное количество цветов ("палитру"), а две кнопки имеют высокий контраст, что привлекает внимание пользователя: это кнопки TRY FOR FREE и START LEARNING NOW. Очевидно, что дизайнер установил точку фокусировки на этих двух действиях.

В связи с этим принципом на данном снимке экрана применено "правило" дизайна, которое удобно иметь в виду: 60-30-10 color rule. Это означает, что 60% раздела должны иметь основной цвет (здесь он темно-коричневый), 30% - первичный (используется для обычного текста, меню и изображения, которое здесь белое), а 10% отводится под вторичный цвет или высокий контраст (используется для фокусной точки, или кнопок "призыва к действию" оранжевого цвета). Продолжим анализ этой страницы, чтобы ознакомиться с другими принципами проектирования пользовательского интерфейса.

Стимулировать повторение и быть последовательным.

Этот принцип основан на концепции, согласно которой люди учатся через повторение. Он указывает на то, что одна и та же задача, даже выполняемая через разные интерфейсы, должна вызывать у пользователя более или менее одинаковое повторяющееся поведение.

Например, если вы попросите пользователя открыть текстовый процессор, а потом предложите ему открыть файл, куда он попытается нажать? Большинство "опытных" пользователей подведут мышь к левой верхней части окна и будут искать либо значок, обозначающий "Открыть", либо меню Файл. Почему так? Потому что такое размещение стало стандартным, и мы путем повторения узнали, где его искать. Если бы вы разместили меню File в правом нижнем углу экрана, то большинство, если не все, пользователи не смогли бы найти его без подсказок.

Еще один пример повторения и согласованности возникает при отображении визуальных элементов - что более важно, когда они являются частью списка или общего набора. Приведем пример с сайта Packt Publishing:

Рисунок 11.2 - Карточки с книгами

В предыдущем примере дизайнер использовал повторение для отображения книг в прайм-тайм, используя вертикальные "карточки" для каждого предмета. Каждая карточка повторяет аналогичный макет, цвета и формат. Как только вы поймете, что отображает одна из них, то же самое можно сказать и обо всех остальных: это повторение визуального дизайна, и оно важно, чтобы пользователю не пришлось "заново" изучать интерфейс для каждой книги.

Кроче говоря, это повторение расположения, действий и визуальных стилей. Перейдем к следующему.

Внимательно следите за выравниванием и направлением

Выравнивание элементов (графики, шрифтов и т.д.) создает ощущение порядка и организованности, показывая, что эти элементы принадлежат к одной группе или имеют одинаковый вес или важность. В основном мы знакомы с выравниванием (и интервалом) при работе со шрифтами, но эта же концепция применима и к графическим элементам, таким как пиктограммы, секции, изображения и т.д. Из предыдущего рисунка обратите внимание на то, как выровнены вкладки, а также карточки и их содержимое. Только по выравниванию и стилю можно определить, что относится к той или иной естественной группе.

Другой пример выравнивания хорошо виден при использовании типографики только для меню и функций.

Рисунок 11.3 - Нижний колонтитул сайта Packt, использующий выравнивание для отображения естественных групп.

Этот пример, хотя и простой, уже демонстрирует использование контраста (жирный шрифт против обычного), последовательности за счет повторения, выравнивания, а также следующего принципа, который мы здесь рассмотрим: близости.

Используйте близость и расстояние, чтобы показать естественные группы

Этот принцип прост: размещайте элементы, которые естественным образом связаны друг с другом, близко друг к другу. Это облегчает пользователю поиск и понимание. Типографика и иконография также могут быть использованы для демонстрации близости и схожести функциональных возможностей. Знаменитая "ленточная панель", введенная компанией Microsoft в своих приложениях Office, в значительной степени использует эту концепцию и вскоре стала стандартом. Например, вот фрагмент вкладки Home, посвященный выравниванию, спискам, интервалам и отступам:

Рисунок 11.4 - Значки абзацев

Обратите внимание, что пиктограммы, изменяющие тип абзаца, интервал и выравнивание, находятся рядом друг с другом, не "смешиваясь".

Это не единственные принципы проектирования пользовательского интерфейса, но самые основные, которые мы должны иметь в виду при разработке наших компонентов. Если вы работаете с командой, в которую входит дизайнер пользовательского интерфейса, вы можете получить шаблоны или макеты, даже раскадровки, для реализации в компонентах Vue, как мы видели в главе 4, Композиция пользовательского интерфейса с компонентами.

Если же вы работаете в команде "one-man band team" и проектирование интерфейсов лежит на ваших плечах, то эти принципы очень помогут вам создать профессиональный и полезный пользовательский интерфейс. Но это еще не все.

Законы проектирования пользовательского интерфейса

Как и в случае с принципами, в ряде исследований были выведены или определены "законы" дизайна, которые представляют собой измеримые функции для предсказания определенных атрибутов программного обеспечения, таких как удобство и дружелюбие. В частности, выделяются следующие.

Закон Фитта

Этот закон определяет, что время, необходимое пользователю для захвата цели, зависит от расстояния до указателя и размера цели. Важными понятиями здесь являются расстояние и размер цели: чем больше расстояние между целями, тем больше они должны быть.

В результате применения этого закона кнопка закрытия окна (X) располагается в одном из углов экрана (при максимизации окна), кнопка Start - в левом нижнем углу экрана, Show desktop - в правом нижнем углу экрана и так далее. Если пользователь перемещает мышь в любом из этих направлений, то рано или поздно он попадет на эти цели, и продолжение движения в том же направлении не повлияет на результат. На языке дизайна пользовательского интерфейса эти кнопки являются "бесконечными", поскольку, как только курсор достигнет угла у края экрана, продолжение прокрутки мышью в том же направлении все равно приведет к достижению цели.

Другим следствием этого закона является то, что похожие функции также должны располагаться рядом друг с другом (как, например, в примерах на Рисунке 11.4). Более подробную информацию об этом законе можно найти в Википедии по адресу https://en.wikipedia.org/wiki/Fitts's_law.

Закон Хика

Этот закон гласит, что время, которое требуется пользователю для того, чтобы сделать выбор, является логарифмической функцией, зависящей от количества доступных вариантов и их сложности. Проще говоря, слишком большое количество вариантов запутывает пользователя и заставляет его тратить больше времени на принятие решения. Некоторые следствия из этого закона выглядят следующим образом:

  • Разбивайте сложные задачи на более мелкие группы, которыми может управлять пользователь, чтобы ускорить время принятия решения
  • Избегайте создания интерфейсов, перегруженных опциями, так как они будут перегружать пользователя
  • Если функция чувствительна ко времени, сведите количество опций к минимуму, необходимому в данной ситуации

В повседневном программном обеспечении мы можем наблюдать применение этого закона во многих местах - например, в "инсталляторах" для конкретного программного обеспечения, где во время или перед началом установки пользователю последовательно представляются окна с опциями, в отличие от формы для заполнения. Более подробную информацию об этом законе можно найти в Википедии.

Восемь правил Бена Шнайдермана

В 1986 году профессор Бен Шнайдерман опубликовал свою книгу под названием Designing the User Interface: Strategies for Effective Human-Computer Interaction, в которой он сформулировал восемь правил проектирования интерфейсов. Сегодня эти правила так же актуальны, как и в день их создания, поэтому их стоит упомянуть здесь:

  1. Стремитесь к последовательности (в действиях, шагах, расположении и т.д.).
  2. Обеспечьте использование быстрых клавиш для выполнения общих задач (будь то клавиатура или пиктограммы).
  3. Предлагайте информативную обратную связь (особенно при возникновении ошибок).
  4. Дизайн диалогов с окончанием.
  5. Предлагайте простую обработку ошибок, чтобы пользователь мог быстро принять меры и избежать серьезных ошибок со стороны пользователя. Классической реализацией правил #4 и #5 являются "диалоги подтверждения" перед выполнением постоянных действий, таких как удаление содержимого.
  6. Позволяйте легко и просто выполнять действия, связанные с удалением содержимого.
  7. Позволяйте легко отменять действия (благодаря этому у нас есть Ctrl + Z!).
  8. Поддерживайте чувство контроля у пользователя. Нет ничего хуже для пользователя, чем чувствовать, что машина "делает все сама, без контроля". Если вы когда-нибудь по ошибке отправляли на печать 800-страничный файл, и у вас ушло с десяток страниц, прежде чем вы смогли отменить операцию. Вот о чем идет речь.
  9. Сокращенайте время на печать.
  10. Сокращайте кратковременную память. Пользователь может одновременно удерживать в своей кратковременной памяти лишь несколько элементов и задач, а слишком большое количество элементов на экране (меню и т.д.) вызывает отторжение. Этот принцип также связан с законом Хика.

Для практического применения и введения в тему эти принципы, правила и законы должны дать нам уверенную опору.

Больше информации об этих правилах и Бене Шнайдермане можно найти в Википедии.

Принципы проектирования UX

UX-дизайн также имеет свои цели и принципы, которые распространяются на шаблоны. Прежде всего, основная цель UX - обеспечить хорошее восприятие пользователя, создать связь с брендом или продуктом, тщательно выстроив поток взаимодействий. В данном случае решения должны быть следующими:

  • Полезность и удобство использования: Прежде всего, приложение должно делать то, для чего оно предназначено, делать это хорошо и быть простым для пользователя
  • Узнаваемость и запоминаемость: пользователь должен иметь возможность изучить и понять представленную информацию, а также усвоить ее для дальнейшего использования
  • Креативность и предоставление контроля пользователю: Когда пользователь взаимодействует с приложением, он должен чувствовать, что делает то, что задумал пользователь, и что результат "безопасен" для пользователя

Последний принцип очень важен. Если пользователь чувствует, что приложение где-то в процессе взаимодействия "потеряло контроль" над происходящим, то это залог катастрофы. К сожалению, это слишком часто происходит с темным шаблонами, которые мы рассмотрим далее в этой главе, но сейчас давайте посмотрим на хорошие шаблоны, которые приводят к хорошему опыту для пользователя.

Общие шаблоны для работы с данными

Чаще всего этим шаблонам соответствуют чистые HTML-элементы, другие же появились в последние годы благодаря грамотному использованию стилизации таких элементов. Они стали стандартными в отрасли и хорошо понимаются пользователями с первого взгляда. Ниже приводится неполный список с кратким описанием того, когда следует использовать каждый из них.

Элементы ввода HTML

Стандартные поля ввода, предусмотренные в HTML, представляют собой четкий шаблон для получения информации от пользователя. В настоящее время элемент input имеет множество вариантов благодаря атрибуту type, позволяющему вводить не только обычный текст. Используемые в формах и библиотеках проверки, эти элементы не уступают по своим возможностям: они готовы к чтению и форматированию от текста и чисел до URL, даты, времени, изображений и цветов. Полный список доступных типов, поддерживаемых современными браузерами, можно найти здесь.

По большей части эти элементы используются с базовой функциональностью и некоторым тяжелым CSS-стилем. Используйте inputtextarea) в тех случаях, когда пользователю необходимо ввести текстовую информацию. Для более сложных типов, таких как выбор даты или цвета, браузеры сегодня предлагают собственные виджеты.

Чекбоксы, радиокнопки и тумблеры

Клавиши и радиокнопки предоставляются HTML нативно и представляются пользователю в соответствии с форматом локальной ОС или среды. button представляют пользователю несколько вариантов, которые он может свободно выбрать из группы. В отличие от них, кнопки radio позволяют выбрать только один вариант из списка:

Рисунок 11.5 - Чекбоксы слева и радиокнопки справа

С выходом оригинального iPhone стал очень популярен новый вариант флажка: тумблер (toggle switch). Он не предусмотрен стандартом HTML, но его можно легко стилизовать с помощью CSS, чтобы "замаскировать" чекбокс. Тумблер имеет два состояния, включенное и выключенное, и часто используется для активации или деактивации функции или возможности. Это важное различие, поскольку флажок должен фокусироваться на вариантах или альтернативах. Вот пример:

Рисунок 11.6 - Тумблеры в каждом состоянии

Тумблер находится в состоянии "выключено" (или false), когда тумблер находится слева, и "включено", когда справа. Часто переключение также влияет на цвет, показывая его в неяркой серой гамме, когда он выключен, или в ярких цветах, когда активирован. Внутри системы эти два состояния часто обозначаются true (включено) и false (выключено), и их следует использовать для активации или деактивации настроек, функций и т.д. Компонент Toggle, реализующий стилизацию, и код v-модели вы можете найти в репозитории к этой главе.

Чипы, таблетки или теги

Этот шаблон включает в себя короткий текст (или "копию" на языке пользовательского интерфейса) внутри круглой рамки. Копия может сопровождаться значком, подчеркивающим ее состояние при выделении, или действием, например, символом "X" для ее удаления. Обычно тэги используются в списках для отображения атрибутов, тегов, категорий или других типов классификаторов для данного элемента.

В некоторых случаях они могут использоваться и для выбора (переключения) элементов из списка. В этом случае они конкурируют или ведут себя так же, как чекбокс, но в более наглядной форме. Реализация фишек достаточно тривиальна и может быть выполнена с помощью обычного CSS в одном HTML-элементе (например, в элементе span).

Рисунок 11.7 - Список элементов с таблетками

Это краткий список шаблонов пользовательского интерфейса для сбора пользовательского ввода, но он охватывает наиболее распространенные типы: HTML-вводы и вариации стилей.

##№ Общие шаблоны для визуализации данных

Эти шаблоны отображают информацию обратно пользователю, либо в ответ на действие пользователя, либо на событие приложения. Ниже приведен неполный список шаблонов.

Подсказки (tooltips)

Этот шаблон показывает пользователю плавающий небольшой текст с информацией о целевом элементе, обычно когда пользователь активирует элемент с помощью какого-либо действия (наведение, щелчок, выделение и т.д.). Информация отображается над, под или сбоку от элемента в виде "речевого пузыря" (как в комиксах). Вот пример:

Рисунок 11.8 - Всплывающая подсказка, отображающая название/действие пиктограммы и ярлыка.

В основном этот шаблон используется для отображения справки по целевому объекту, но может применяться и для отображения контекстных меню. Например, при выделении слова из этого абзаца в текстовом редакторе в режиме онлайн отобразится всплывающее окно с меню:

Рисунок 11.9 - Шаблон всплывающей подсказки, используемый для отображения контекстного меню.

Может возникнуть дискуссия по поводу того, является ли последнее использование всплывающей подсказкой или контекстным меню, но тот факт, что оно открывается при выборе, указывает на первое. Традиционно контекстные меню открываются вторичным действием, например, нажатием правой кнопки мыши (в Windows и Linux). В любом случае, концепция, которую следует запомнить для этого шаблона, заключается в том, чтобы показывать пользователю информацию при выборе или предварительной активации, чтобы помочь ему решить, что делать дальше.

Уведомляющие точки, пузырьки, метки или значки

Этот шаблон заключается в отображении маленького значка поверх более крупного значка, чтобы показать, что произошло событие, требующее внимания пользователя, но не являющееся срочным. Этот маленький значок может быть точкой, пузырьком и т.д. Если в уведомлении есть цифра, его также называют значком (badge) Ниже приведены примеры этого шаблона:

  • Маленький кружок с цифрой для новых полученных писем в значке электронной почты
  • Двойная галочка в приложении чата, указывающая на то, что собеседник получил и прочитал сообщение
  • Маленькая отметка на панели задач, показывающая, что приложение было открыто

Основная концепция заключается в том, чтобы использовать некое небольшое отклонение от пиктограммы, указывающее на необходимость обратить на себя внимание в будущем, но при этом не являющееся срочным и не влияющее на текущую деятельность пользователя.

Тостовые уведомления

Этот шаблон используется во многих приложениях и ОС. Он заключается в отображении на короткое время плавающего окна с быстрой информацией для пользователя. Часто оно включает в себя короткий текстовый фрагмент в сочетании с понятной пиктограммой.

В зависимости от ОС оно может отображаться вверху по центру, справа от экрана или внизу справа над системным лотком. Веб-приложения могут либо реализовать собственное тостовое уведомление в окне браузера, либо запросить разрешение у пользователя и отобразить "родное тостовое уведомление" с помощью локальной ОС. Вот пример уведомления о тосте:

Рисунок 11.10 - Нативное уведомление о тостах на рабочем столе

Эти уведомления полезны для информирования пользователя об изменениях в окружении, требующих его внимания, для сообщения о результате выполнения асинхронной операции (успех, ошибка и т.д.) и т.п. Эти призывы к вниманию эфемерны, поэтому они не должны быть критической частью важного рабочего процесса, за исключением только что упомянутых условий.

Карусель или слайдеры изображений

Карусель или слайдеры изображений - это шаблон для последовательного отображения в одном пространстве различных секций с изображениями и контентом. Как правило, с помощью таймера эти разделы представляются пользователю с интервалом в несколько секунд, при этом есть возможность перейти к любому из них с помощью точечной навигации. Несмотря на то, что несколько лет назад эти карусели были очень популярны, существуют и противоположные мнения, поскольку "нетерпеливые" пользователи могут так и не увидеть всего содержимого карусели. На практике рекомендуется делать список разделов как можно короче, где-то между тремя и пятью элементами.

Примеров такой реализации в Интернете множество, поскольку они реализуются в основном на посадочной странице сайта. Практически все торговые и новостные сайты используют этот шаблон - например, посадочная страница Amazon (www.amazon.de):

Рисунок 11.11 - Карусель Amazon отображает предложения из магазина

Слайдеры изображений могут быть такими же большими, как карусель, но могут быть и гораздо меньше и использоваться для отображения миниатюр. Вот еще один пример из Amazon:

Рисунок 11.12 - Amazon использует слайдеры изображений для отображения товаров пользователю

Несмотря на тривиальную реализацию, использование каруселей и слайдеров изображений является хорошим способом отображения информации для пользователя. Однако стоит предупредить, что злоупотребление этим шаблоном может привести к перегруженности и перенасыщенности интерфейса, вызвать путаницу и даже спровоцировать нежелательные побочные эффекты, такие как сенсорное подавление и избегание контента.

Панели прогресса (progress bars) и спиннеры

Панель прогресса - это любой элемент, который дает пользователю представление о том, на каком этапе рабочего процесса находится его текущее состояние. Хотя название, казалось бы, указывает на "полосу", на практике в эту категорию попадает любой элемент, отображающий прогресс выполнения ограниченного числа действий.

Основная цель - уведомить пользователя о ходе выполнения задач, требующих длительного времени, и показать, что система "занята" их выполнением, тем самым обеспечивая наглядность и чувство контроля для пользователя.

Прогресс-бары очень важны для предотвращения непроизвольных негативных действий со стороны пользователя. Если длительное задание выполняется в фоновом режиме (например, в веб-рабочем) без какой-либо обратной связи о ходе его выполнения, пользователь может подумать, что задание не началось, не удалось или компьютер "завис". Оставлять пользователя в недоумении по поводу происходящего - это негативный опыт. Вот некоторые примеры элементов индикатора выполнения:

Рисунок 11.13 - Пример прогресс-бара

Помимо стилизации, индикаторы выполнения могут использоваться и в "неопределенном состоянии", то есть приложение не может рассчитать, сколько времени или сколько шагов может занять процесс, но при этом хочет сообщить пользователю, что система занята и не должна быть прервана. В стандарте HTML предусмотрен элемент, специально предназначенный для индикаторов выполнения, который позволяет справиться с подобными ситуациями (элемент progress), но есть и другие шаблоны, которые можно использовать в таких случаях, например спиннеры.

Как видно из названия "спиннер", это иконка, которая "крутится" сама по себе, создавая впечатление, что приложение занято и работает. Вот пример спиннера с текстовым индикатором:

Рисунок 11.14 - Кружок спиннера, указывающий на занятость приложения

Этот подход уже давно используется в ОС и приложениях, поэтому пользователи понимают его смысл. Есть одно предостережение при использовании этого шаблона - после длительного использования он может вызывать беспокойство, поэтому рекомендуется сопровождать его каким-либо индикатором действия. Реализация компонента спиннера в Vue достаточно тривиальна, и в основном это CSS:

./components/Spinner.vue
vue
<script setup>
     const $props = defineProps(['caption'])
 </script>
 <template>
diff --git a/assets/ru_book_Chapter_11__Bonus_Chapter_-_UX_Patterns.md.Cf0wRQMQ.lean.js b/assets/ru_book_Chapter_11__Bonus_Chapter_-_UX_Patterns.md.CwpPllMl.lean.js
similarity index 97%
rename from assets/ru_book_Chapter_11__Bonus_Chapter_-_UX_Patterns.md.Cf0wRQMQ.lean.js
rename to assets/ru_book_Chapter_11__Bonus_Chapter_-_UX_Patterns.md.CwpPllMl.lean.js
index ef3271d54..82202fc3d 100644
--- a/assets/ru_book_Chapter_11__Bonus_Chapter_-_UX_Patterns.md.Cf0wRQMQ.lean.js
+++ b/assets/ru_book_Chapter_11__Bonus_Chapter_-_UX_Patterns.md.CwpPllMl.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/Figure_11.01_B18602.D2BVf6E-.jpg",e="/assets/Figure_11.02_B18602.CDtDoGSy.jpg",p="/assets/Figure_11.03_B18602.Cbajyntl.jpg",l="/assets/Figure_11.04_B18602.Nbcm5fem.jpg",r="/assets/Figure_11.05_B18602.DOLwcOmk.jpg",h="/assets/Figure_11.06_B18602.D_8LOXS0.jpg",o="/assets/Figure_11.07_B18602.B6zSrLMS.jpg",k="/assets/Figure_11.08_B18602.DnG4p2SD.jpg",g="/assets/Figure_11.09_B18602.CIXd7bXO.jpg",d="/assets/Figure_11.10_B18602.DEsNKJzt.jpg",E="/assets/Figure_11.11_B18602.m7KOZEy_.jpg",c="/assets/Figure_11.12_B18602.BL6wC1Zo.jpg",u="/assets/Figure_11.13_B18602.VJSmxnDa.jpg",m="/assets/Figure_11.14_B18602.BYWz-YHh.jpg",y="/assets/Figure_11.15_B18602.BCEyXK3J.jpg",q="/assets/Figure_11.16_B18602.BOg-tEg3.jpg",F="/assets/Figure_11.17_B18602.Bn5ocAvP.jpg",_="/assets/Figure_11.18_B18602.7DLBEDjW.jpg",b="/assets/Figure_11.19_B18602.37K89Jyn.jpg",C="/assets/Figure_11.20_B18602.D-ddK-6E.jpg",f="/assets/Figure_11.21_B18602.CU49DF7o.jpg",B="/assets/Figure_11.22_B18602.Br7YLHKm.jpg",v="/assets/Figure_11.23_B18602.CdcfiIwu.jpg",P="/assets/Figure_11.24_B18602.p96pfcWg.jpg",x="/assets/Figure_11.25_B18602.BK-tewWF.jpg",D="/assets/Figure_11.26_B18602.B4Y2vV9r.jpg",A="/assets/Figure_11.27_B18602.CTzdM5nv.jpg",w="/assets/Figure_11.28_B18602.BP2SL_B9.jpg",S="/assets/Figure_11.29_B18602.CbfPVlnu.jpg",U="/assets/Figure_11.30_B18602.yQ0dvSXN.jpg",K=JSON.parse('{"title":"Бонусная глава - Шаблоны UX","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.md","filePath":"ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.md","lastUpdated":1726474804000}'),j={name:"ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.md"},X=t("",270),L=[X];function T(V,H,I,M,O,z){return i(),a("div",null,L)}const N=s(j,[["render",T]]);export{K as __pageData,N as default};
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/Figure_11.01_B18602.D2BVf6E-.jpg",e="/assets/Figure_11.02_B18602.CDtDoGSy.jpg",p="/assets/Figure_11.03_B18602.Cbajyntl.jpg",l="/assets/Figure_11.04_B18602.Nbcm5fem.jpg",r="/assets/Figure_11.05_B18602.DOLwcOmk.jpg",h="/assets/Figure_11.06_B18602.D_8LOXS0.jpg",o="/assets/Figure_11.07_B18602.B6zSrLMS.jpg",k="/assets/Figure_11.08_B18602.DnG4p2SD.jpg",g="/assets/Figure_11.09_B18602.CIXd7bXO.jpg",d="/assets/Figure_11.10_B18602.DEsNKJzt.jpg",E="/assets/Figure_11.11_B18602.m7KOZEy_.jpg",c="/assets/Figure_11.12_B18602.BL6wC1Zo.jpg",u="/assets/Figure_11.13_B18602.VJSmxnDa.jpg",m="/assets/Figure_11.14_B18602.BYWz-YHh.jpg",y="/assets/Figure_11.15_B18602.BCEyXK3J.jpg",q="/assets/Figure_11.16_B18602.BOg-tEg3.jpg",F="/assets/Figure_11.17_B18602.Bn5ocAvP.jpg",_="/assets/Figure_11.18_B18602.7DLBEDjW.jpg",b="/assets/Figure_11.19_B18602.37K89Jyn.jpg",C="/assets/Figure_11.20_B18602.D-ddK-6E.jpg",f="/assets/Figure_11.21_B18602.CU49DF7o.jpg",B="/assets/Figure_11.22_B18602.Br7YLHKm.jpg",v="/assets/Figure_11.23_B18602.CdcfiIwu.jpg",P="/assets/Figure_11.24_B18602.p96pfcWg.jpg",x="/assets/Figure_11.25_B18602.BK-tewWF.jpg",D="/assets/Figure_11.26_B18602.B4Y2vV9r.jpg",A="/assets/Figure_11.27_B18602.CTzdM5nv.jpg",w="/assets/Figure_11.28_B18602.BP2SL_B9.jpg",S="/assets/Figure_11.29_B18602.CbfPVlnu.jpg",U="/assets/Figure_11.30_B18602.yQ0dvSXN.jpg",K=JSON.parse('{"title":"Бонусная глава - Шаблоны UX","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.md","filePath":"ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.md","lastUpdated":1726505115000}'),j={name:"ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.md"},X=t("",270),L=[X];function T(V,H,I,M,O,z){return i(),a("div",null,L)}const N=s(j,[["render",T]]);export{K as __pageData,N as default};
diff --git a/assets/ru_book_Chapter_1__The_Vue_3_Framework.md.BLhzv5VN.js b/assets/ru_book_Chapter_1__The_Vue_3_Framework.md.BfRPg0U0.js
similarity index 99%
rename from assets/ru_book_Chapter_1__The_Vue_3_Framework.md.BLhzv5VN.js
rename to assets/ru_book_Chapter_1__The_Vue_3_Framework.md.BfRPg0U0.js
index 41849978b..f8a4d91d6 100644
--- a/assets/ru_book_Chapter_1__The_Vue_3_Framework.md.BLhzv5VN.js
+++ b/assets/ru_book_Chapter_1__The_Vue_3_Framework.md.BfRPg0U0.js
@@ -1,4 +1,4 @@
-import{_ as n,o as p,c as l,l as i,a as s,t as e,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const h="/assets/Figure_1.01_B18602.JYGRmkTP.jpg",f=JSON.parse('{"title":"Фреймворк Vue 3","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_1__The_Vue_3_Framework.md","filePath":"ru/book/Chapter_1__The_Vue_3_Framework.md","lastUpdated":1726474804000}'),k={name:"ru/book/Chapter_1__The_Vue_3_Framework.md"},r=a(`

Фреймворк Vue 3

Современная всемирная паутина (World Wide Web) претерпела значительные изменения по сравнению с теми временами, когда Интернет представлял собой лишь набор связанных между собой страниц, предназначенных для академических и научных целей. По мере развития технологий и увеличения мощности машин к прежним протоколам добавлялись все новые и новые возможности, конкурировали новые методы и технологии, пока, наконец, не были приняты стандарты. Дополнительные возможности появились в виде плагинов для браузера и встроенного контента. Распространенными были Java-апплеты, Flash, Macromedia, Quicktime и другие плагины. Именно с появлением HTML5 большинство из них, если не все, были постепенно вытеснены стандартами.

Сегодня существует четкое различие между структурой, стилем и поведением. Язык разметки гипертекста (HTML) определяет структурные элементы, из которых состоит веб-страница. Каскадные таблицы стилей (CSS) предоставляют правила, изменяющие внешний вид HTML-элементов, включая даже анимацию и трансформацию. И, наконец, JavaScript - язык программирования, который обеспечивает поведение и может обращаться и изменять как HTML, так и CSS. Такое количество различных возможностей также привело к высокой сложности и несовместимости между браузерами. Именно здесь и зародились библиотеки и фреймворки, которые сначала решали проблемы несовместимости и стандартизации внешнего вида, но вскоре стали включать в себя и другие парадигмы программирования, выходящие за рамки простого манипулирования HTML и CSS.

Некоторые из наиболее популярных сегодня библиотек и фреймворков используют реактивную парадигму. Они умело вносят изменения в JavaScript, которые автоматически отражаются в HTML/CSS. Vue 3 - это последняя версия прогрессивного фреймворка, в котором в значительной степени используется концепция реактивности. В нем также реализованы другие парадигмы и паттерны проектирования программного обеспечения, позволяющие создавать все: от простых взаимодействий на статичной веб-странице до сложных приложений, которые могут даже устанавливаться локально и конкурировать с нативными настольными приложениями.

В этой книге мы познакомимся с фреймворком Vue 3 и изучим различные шаблоны проектирования, которые помогут нам создавать первоклассные приложения: от простых веб-страниц до мощных прогрессивных веб-приложений (PWA). Попутно мы рассмотрим лучшие практики и хорошо зарекомендовавшие себя паттерны в программной инженерии.

В этой главе рассматриваются следующие темы:

  • Прогрессивный фреймворк
  • Однофайловые компоненты
  • Различные варианты синтаксиса для написания компонентов

К концу этой главы вы будете иметь базовое представление о том, какое место Vue 3 занимает в ландшафте JavaScript и какие возможности он предоставляет. Для пользователей Vue 2 в этой книге есть приложение, в котором описаны изменения, на которые необходимо обратить внимание при переносе приложения. По мере продвижения по книге мы будем наращивать знания на основе этих концепций.

Прогрессивный фреймворк

Перед тем как рассказать о том, что представляет собой Vue, необходимо провести различие между терминами библиотека и фреймворк. Они часто используются как взаимозаменяемые, но разница между ними есть, и хороший разработчик должен знать об этом, выбирая тот или иной вариант для создания веб-приложения.

Выбирая тот или иной вариант для создания веб-приложения, мы должны понимать, что это такое.

Давайте рассмотрим определения этих терминов:

  • Библиотека - это коллекция многократно используемого кода в виде функций, классов и т.д., который был разработан кем-то другим и может быть легко импортирован в вашу программу. Они не предписывают, как и где их использовать, но обычно предоставляют документацию по их применению. Программист сам решает, когда и как их применять. Эта концепция существует в большинстве языков разработки, вплоть до того, что некоторые из них полностью основаны на понятии импорта библиотек для обеспечения функциональности.
  • В фреймворке также есть наборы классов и функций для использования, но в нем прописаны спецификации, определяющие, как должна работать программа, с какой архитектурой, в каких условиях может быть использован ваш код. Ключевой атрибут, на который следует обратить внимание, заключается в том, что фреймворк инвертирует управление в приложении, то есть определяет поток программы и данных. Тем самым он подчеркивает структуры или стандарты, которых должен придерживаться программист.

Разделив понятия, теперь возникает вопрос, когда использовать библиотеку, а когда фреймворк. Прежде чем ответить на этот вопрос, давайте поймем, что при создании реальных приложений между ними существует огромная "серая зона". Теоретически одно и то же приложение можно построить, используя любой из этих двух вариантов. Как и всегда в программной инженерии, необходимо определиться с компромиссами для каждого подхода. Так что воспринимайте то, что будет написано дальше, с щепоткой соли; это не закон, написанный на камне:

  • Вы можете использовать библиотеку при создании приложений малого и среднего размера или при необходимости добавления дополнительной функциональности в приложение (в общем случае, вы можете использовать дополнительные библиотеки внутри фреймворков). Существуют и исключения из правила "размера". Например, React - это библиотека, но на ее основе построены огромные приложения, такие как Facebook. Компромисс заключается в том, что использование только библиотек без фреймворка потребует выработки общих подходов и большей координации внутри команды, поэтому усилия по управлению и руководству могут значительно возрасти. С другой стороны, библиотека, используемая в рамках обычного программирования на JavaScript, может предложить некоторые важные улучшения производительности и обеспечить значительную гибкость.
  • Вы можете захотеть использовать фреймворк при создании приложений среднего и большого размера, когда вам нужна структура, помогающая координировать разработку, или когда вы хотите быстро начать, минуя "азы" разработки общей функциональности с нуля. Существуют фреймворки, построенные поверх других фреймворков, например, Nuxt построен поверх Vue. Компромисс заключается в том, что для построения приложения вам предписывается архитектурная модель, которая часто соответствует определенному подходу и образу мышления. Вам и вашей команде придется изучить фреймворк и его ограничения и жить в этих границах. Всегда есть вероятность того, что в будущем ваше приложение может перерасти рамки. В то же время некоторые из преимуществ таковы: более легкая координация работы, значительный выигрыш от стартового рывка, верное и проверенное решение общих проблем, ориентация на конкретные ситуации (например, торговые приложения в сравнении с социальными сетями) и многое другое. Однако в зависимости от фреймворка вы можете столкнуться с небольшим снижением производительности за счет дополнительной обработки данных или трудностями масштабирования. Вам предстоит взвесить компромиссы в каждом конкретном случае.

Итак, что же такое Vue? По определению, Vue - это прогрессивный фреймворк для создания пользовательских интерфейсов. Прогрессивность означает, что он обладает архитектурными преимуществами фреймворка, а также скоростью и модульными преимуществами библиотеки, поскольку функции и функциональность могут быть реализованы постепенно. На практике это означает, что Vue предписывает определенные модели построения приложения, но в то же время позволяет начинать с малого и расширять его настолько, насколько это необходимо. Вы даже можете использовать несколько приложений Vue на одной странице или взять на себя все приложение. При необходимости можно даже импортировать и использовать другие библиотеки и фреймворки. Весьма причудливо!

Еще одной фундаментальной концепцией Vue является реактивность. Она подразумевает возможность автоматического отображения в HTML значения или изменений, внесенных в переменную в JavaScript, а также внутри вашего кода. В этом заключается большая часть волшебства, предлагаемого Vue.

В традиционном программировании, когда переменной присваивается значение, оно сохраняется до тех пор, пока не будет программно изменено. Однако в реактивном программировании, если значение переменной зависит от других переменных, то при изменении одной из этих зависимостей переменная примет новое результирующее значение. Возьмем, к примеру, следующую простую формулу:

sh
A = B + C

В реактивном программировании каждый раз, когда B или C меняют значение, изменяется и A. Как вы увидите далее в этой книге, это очень мощная модель для построения пользовательских интерфейсов. В данном примере, в соответствии с терминологией, A - это зависимое, а B и C - зависимости.

В следующих главах мы будем изучать этот прогрессивный атрибут в процессе создания примеров приложений. Но перед этим нам нужно посмотреть, что предлагает Vue 3 в самом базовом виде.

Использование Vue в веб-приложении

Существует несколько вариантов использования Vue в веб-приложении, и это во многом зависит от того, какую цель вы преследуете:

  • Для размещения на странице небольшого автономного приложения или фрагмента кода можно напрямую импортировать Vue и код внутри тега script
  • Для создания более крупного приложения вам понадобится инструмент сборки, который возьмет ваш код и соберет его для распространения

Обратите внимание, что я использую слово сборка, а не компиляция, поскольку JavaScript-приложения интерпретируются и выполняются во время исполнения в браузере. Это станет очевидным позже, когда мы введем понятие однофайловых компонентов

Давайте кратко рассмотрим пример первого случая на примере очень простой HTML-страницы:

html
<html>
+import{_ as n,o as p,c as l,l as i,a as s,t as e,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const h="/assets/Figure_1.01_B18602.JYGRmkTP.jpg",f=JSON.parse('{"title":"Фреймворк Vue 3","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_1__The_Vue_3_Framework.md","filePath":"ru/book/Chapter_1__The_Vue_3_Framework.md","lastUpdated":1726505115000}'),k={name:"ru/book/Chapter_1__The_Vue_3_Framework.md"},r=a(`

Фреймворк Vue 3

Современная всемирная паутина (World Wide Web) претерпела значительные изменения по сравнению с теми временами, когда Интернет представлял собой лишь набор связанных между собой страниц, предназначенных для академических и научных целей. По мере развития технологий и увеличения мощности машин к прежним протоколам добавлялись все новые и новые возможности, конкурировали новые методы и технологии, пока, наконец, не были приняты стандарты. Дополнительные возможности появились в виде плагинов для браузера и встроенного контента. Распространенными были Java-апплеты, Flash, Macromedia, Quicktime и другие плагины. Именно с появлением HTML5 большинство из них, если не все, были постепенно вытеснены стандартами.

Сегодня существует четкое различие между структурой, стилем и поведением. Язык разметки гипертекста (HTML) определяет структурные элементы, из которых состоит веб-страница. Каскадные таблицы стилей (CSS) предоставляют правила, изменяющие внешний вид HTML-элементов, включая даже анимацию и трансформацию. И, наконец, JavaScript - язык программирования, который обеспечивает поведение и может обращаться и изменять как HTML, так и CSS. Такое количество различных возможностей также привело к высокой сложности и несовместимости между браузерами. Именно здесь и зародились библиотеки и фреймворки, которые сначала решали проблемы несовместимости и стандартизации внешнего вида, но вскоре стали включать в себя и другие парадигмы программирования, выходящие за рамки простого манипулирования HTML и CSS.

Некоторые из наиболее популярных сегодня библиотек и фреймворков используют реактивную парадигму. Они умело вносят изменения в JavaScript, которые автоматически отражаются в HTML/CSS. Vue 3 - это последняя версия прогрессивного фреймворка, в котором в значительной степени используется концепция реактивности. В нем также реализованы другие парадигмы и паттерны проектирования программного обеспечения, позволяющие создавать все: от простых взаимодействий на статичной веб-странице до сложных приложений, которые могут даже устанавливаться локально и конкурировать с нативными настольными приложениями.

В этой книге мы познакомимся с фреймворком Vue 3 и изучим различные шаблоны проектирования, которые помогут нам создавать первоклассные приложения: от простых веб-страниц до мощных прогрессивных веб-приложений (PWA). Попутно мы рассмотрим лучшие практики и хорошо зарекомендовавшие себя паттерны в программной инженерии.

В этой главе рассматриваются следующие темы:

  • Прогрессивный фреймворк
  • Однофайловые компоненты
  • Различные варианты синтаксиса для написания компонентов

К концу этой главы вы будете иметь базовое представление о том, какое место Vue 3 занимает в ландшафте JavaScript и какие возможности он предоставляет. Для пользователей Vue 2 в этой книге есть приложение, в котором описаны изменения, на которые необходимо обратить внимание при переносе приложения. По мере продвижения по книге мы будем наращивать знания на основе этих концепций.

Прогрессивный фреймворк

Перед тем как рассказать о том, что представляет собой Vue, необходимо провести различие между терминами библиотека и фреймворк. Они часто используются как взаимозаменяемые, но разница между ними есть, и хороший разработчик должен знать об этом, выбирая тот или иной вариант для создания веб-приложения.

Выбирая тот или иной вариант для создания веб-приложения, мы должны понимать, что это такое.

Давайте рассмотрим определения этих терминов:

  • Библиотека - это коллекция многократно используемого кода в виде функций, классов и т.д., который был разработан кем-то другим и может быть легко импортирован в вашу программу. Они не предписывают, как и где их использовать, но обычно предоставляют документацию по их применению. Программист сам решает, когда и как их применять. Эта концепция существует в большинстве языков разработки, вплоть до того, что некоторые из них полностью основаны на понятии импорта библиотек для обеспечения функциональности.
  • В фреймворке также есть наборы классов и функций для использования, но в нем прописаны спецификации, определяющие, как должна работать программа, с какой архитектурой, в каких условиях может быть использован ваш код. Ключевой атрибут, на который следует обратить внимание, заключается в том, что фреймворк инвертирует управление в приложении, то есть определяет поток программы и данных. Тем самым он подчеркивает структуры или стандарты, которых должен придерживаться программист.

Разделив понятия, теперь возникает вопрос, когда использовать библиотеку, а когда фреймворк. Прежде чем ответить на этот вопрос, давайте поймем, что при создании реальных приложений между ними существует огромная "серая зона". Теоретически одно и то же приложение можно построить, используя любой из этих двух вариантов. Как и всегда в программной инженерии, необходимо определиться с компромиссами для каждого подхода. Так что воспринимайте то, что будет написано дальше, с щепоткой соли; это не закон, написанный на камне:

  • Вы можете использовать библиотеку при создании приложений малого и среднего размера или при необходимости добавления дополнительной функциональности в приложение (в общем случае, вы можете использовать дополнительные библиотеки внутри фреймворков). Существуют и исключения из правила "размера". Например, React - это библиотека, но на ее основе построены огромные приложения, такие как Facebook. Компромисс заключается в том, что использование только библиотек без фреймворка потребует выработки общих подходов и большей координации внутри команды, поэтому усилия по управлению и руководству могут значительно возрасти. С другой стороны, библиотека, используемая в рамках обычного программирования на JavaScript, может предложить некоторые важные улучшения производительности и обеспечить значительную гибкость.
  • Вы можете захотеть использовать фреймворк при создании приложений среднего и большого размера, когда вам нужна структура, помогающая координировать разработку, или когда вы хотите быстро начать, минуя "азы" разработки общей функциональности с нуля. Существуют фреймворки, построенные поверх других фреймворков, например, Nuxt построен поверх Vue. Компромисс заключается в том, что для построения приложения вам предписывается архитектурная модель, которая часто соответствует определенному подходу и образу мышления. Вам и вашей команде придется изучить фреймворк и его ограничения и жить в этих границах. Всегда есть вероятность того, что в будущем ваше приложение может перерасти рамки. В то же время некоторые из преимуществ таковы: более легкая координация работы, значительный выигрыш от стартового рывка, верное и проверенное решение общих проблем, ориентация на конкретные ситуации (например, торговые приложения в сравнении с социальными сетями) и многое другое. Однако в зависимости от фреймворка вы можете столкнуться с небольшим снижением производительности за счет дополнительной обработки данных или трудностями масштабирования. Вам предстоит взвесить компромиссы в каждом конкретном случае.

Итак, что же такое Vue? По определению, Vue - это прогрессивный фреймворк для создания пользовательских интерфейсов. Прогрессивность означает, что он обладает архитектурными преимуществами фреймворка, а также скоростью и модульными преимуществами библиотеки, поскольку функции и функциональность могут быть реализованы постепенно. На практике это означает, что Vue предписывает определенные модели построения приложения, но в то же время позволяет начинать с малого и расширять его настолько, насколько это необходимо. Вы даже можете использовать несколько приложений Vue на одной странице или взять на себя все приложение. При необходимости можно даже импортировать и использовать другие библиотеки и фреймворки. Весьма причудливо!

Еще одной фундаментальной концепцией Vue является реактивность. Она подразумевает возможность автоматического отображения в HTML значения или изменений, внесенных в переменную в JavaScript, а также внутри вашего кода. В этом заключается большая часть волшебства, предлагаемого Vue.

В традиционном программировании, когда переменной присваивается значение, оно сохраняется до тех пор, пока не будет программно изменено. Однако в реактивном программировании, если значение переменной зависит от других переменных, то при изменении одной из этих зависимостей переменная примет новое результирующее значение. Возьмем, к примеру, следующую простую формулу:

sh
A = B + C

В реактивном программировании каждый раз, когда B или C меняют значение, изменяется и A. Как вы увидите далее в этой книге, это очень мощная модель для построения пользовательских интерфейсов. В данном примере, в соответствии с терминологией, A - это зависимое, а B и C - зависимости.

В следующих главах мы будем изучать этот прогрессивный атрибут в процессе создания примеров приложений. Но перед этим нам нужно посмотреть, что предлагает Vue 3 в самом базовом виде.

Использование Vue в веб-приложении

Существует несколько вариантов использования Vue в веб-приложении, и это во многом зависит от того, какую цель вы преследуете:

  • Для размещения на странице небольшого автономного приложения или фрагмента кода можно напрямую импортировать Vue и код внутри тега script
  • Для создания более крупного приложения вам понадобится инструмент сборки, который возьмет ваш код и соберет его для распространения

Обратите внимание, что я использую слово сборка, а не компиляция, поскольку JavaScript-приложения интерпретируются и выполняются во время исполнения в браузере. Это станет очевидным позже, когда мы введем понятие однофайловых компонентов

Давайте кратко рассмотрим пример первого случая на примере очень простой HTML-страницы:

html
<html>
   <head>         
     <script src="https://unpkg.com/vue@3"></script>
   </head>
diff --git a/assets/ru_book_Chapter_1__The_Vue_3_Framework.md.BLhzv5VN.lean.js b/assets/ru_book_Chapter_1__The_Vue_3_Framework.md.BfRPg0U0.lean.js
similarity index 97%
rename from assets/ru_book_Chapter_1__The_Vue_3_Framework.md.BLhzv5VN.lean.js
rename to assets/ru_book_Chapter_1__The_Vue_3_Framework.md.BfRPg0U0.lean.js
index 45e848e8a..c864e44c6 100644
--- a/assets/ru_book_Chapter_1__The_Vue_3_Framework.md.BLhzv5VN.lean.js
+++ b/assets/ru_book_Chapter_1__The_Vue_3_Framework.md.BfRPg0U0.lean.js
@@ -1 +1 @@
-import{_ as n,o as p,c as l,l as i,a as s,t as e,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const h="/assets/Figure_1.01_B18602.JYGRmkTP.jpg",f=JSON.parse('{"title":"Фреймворк Vue 3","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_1__The_Vue_3_Framework.md","filePath":"ru/book/Chapter_1__The_Vue_3_Framework.md","lastUpdated":1726474804000}'),k={name:"ru/book/Chapter_1__The_Vue_3_Framework.md"},r=a("",27),o=i("strong",null,"head",-1),g=i("strong",null,"script",-1),E=i("strong",null,"сети доставки контента",-1),d=i("strong",null,"CDN",-1),c=i("strong",null,"Vue",-1),u=i("strong",null,"body",-1),y=i("strong",null,"div",-1),m=i("strong",null,'id="app"',-1),v=i("strong",null,"message",-1),F=i("strong",null,"интерполяцией",-1),C=a("",102);function b(t,q,A,_,D,V){return p(),l("div",null,[r,i("p",null,[s("В разделе "),o,s(" мы определяем тег "),g,s(" и импортируем Vue из бесплатной "),E,s(" ("),d,s("). При этом создается глобальная переменная "),c,s(", которая открывает все методы и функции фреймворка. Внутри нашего тега "),u,s(" мы объявляем элемент "),y,s(" с "),m,s(". Это определяет, где будет размещено наше небольшое приложение и какой частью страницы будет управлять фреймворк Vue. Обратите внимание на содержимое "),i("strong",null,"div: "+e(t.message),1),s(". Двойные фигурные скобки определяют точку, в которой содержимое будет заменено во время выполнения на значение переменной "),v,s(", которую мы определяем в JavaScript. Это называется "),F,s(" и является основным способом отображения значения (строки, числа и т.д.) на веб-странице.")]),C])}const S=n(k,[["render",b]]);export{f as __pageData,S as default};
+import{_ as n,o as p,c as l,l as i,a as s,t as e,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const h="/assets/Figure_1.01_B18602.JYGRmkTP.jpg",f=JSON.parse('{"title":"Фреймворк Vue 3","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_1__The_Vue_3_Framework.md","filePath":"ru/book/Chapter_1__The_Vue_3_Framework.md","lastUpdated":1726505115000}'),k={name:"ru/book/Chapter_1__The_Vue_3_Framework.md"},r=a("",27),o=i("strong",null,"head",-1),g=i("strong",null,"script",-1),E=i("strong",null,"сети доставки контента",-1),d=i("strong",null,"CDN",-1),c=i("strong",null,"Vue",-1),u=i("strong",null,"body",-1),y=i("strong",null,"div",-1),m=i("strong",null,'id="app"',-1),v=i("strong",null,"message",-1),F=i("strong",null,"интерполяцией",-1),C=a("",102);function b(t,q,A,_,D,V){return p(),l("div",null,[r,i("p",null,[s("В разделе "),o,s(" мы определяем тег "),g,s(" и импортируем Vue из бесплатной "),E,s(" ("),d,s("). При этом создается глобальная переменная "),c,s(", которая открывает все методы и функции фреймворка. Внутри нашего тега "),u,s(" мы объявляем элемент "),y,s(" с "),m,s(". Это определяет, где будет размещено наше небольшое приложение и какой частью страницы будет управлять фреймворк Vue. Обратите внимание на содержимое "),i("strong",null,"div: "+e(t.message),1),s(". Двойные фигурные скобки определяют точку, в которой содержимое будет заменено во время выполнения на значение переменной "),v,s(", которую мы определяем в JavaScript. Это называется "),F,s(" и является основным способом отображения значения (строки, числа и т.д.) на веб-странице.")]),C])}const S=n(k,[["render",b]]);export{f as __pageData,S as default};
diff --git a/assets/ru_book_Chapter_2__Software_Design_Principles_and_Patterns.md.BTHjk4t2.js b/assets/ru_book_Chapter_2__Software_Design_Principles_and_Patterns.md.DFYhrhRF.js
similarity index 99%
rename from assets/ru_book_Chapter_2__Software_Design_Principles_and_Patterns.md.BTHjk4t2.js
rename to assets/ru_book_Chapter_2__Software_Design_Principles_and_Patterns.md.DFYhrhRF.js
index f0f72ec1e..67b874b3d 100644
--- a/assets/ru_book_Chapter_2__Software_Design_Principles_and_Patterns.md.BTHjk4t2.js
+++ b/assets/ru_book_Chapter_2__Software_Design_Principles_and_Patterns.md.DFYhrhRF.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const t="/assets/Figure_2.01_B18602.BjVAkxPg.jpg",h="/assets/Figure_2.02_B18602.C10efs3e.jpg",p="/assets/Figure_2.03_B18602.B2O7SQqV.jpg",l="/assets/Figure_2.04_B18602.rVt1Cldv.jpg",k="/assets/Figure_2.05_B18602.BwmrX0Yq.jpg",e="/assets/Figure_2.06_B18602.Vn9eVNDg.jpg",r="/assets/Figure_2.07_B18602.iZAHF3WT.jpg",E="/assets/Figure_2.08_B18602.CondL_kl.jpg",b=JSON.parse('{"title":"Принципы и шаблоны проектирования программного обеспечения","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_2__Software_Design_Principles_and_Patterns.md","filePath":"ru/book/Chapter_2__Software_Design_Principles_and_Patterns.md","lastUpdated":1726474804000}'),d={name:"ru/book/Chapter_2__Software_Design_Principles_and_Patterns.md"},g=n('

Принципы и шаблоны проектирования программного обеспечения

Разработка программного обеспечения по своей сути является человекоемкой дисциплиной. Это означает, что она требует не только знания техники и технологии, но и понимания проблемы и умения принимать решения для реализации решения на нескольких уровнях абстракции.

Программирование во многом зависит от того, как мыслит разработчик. С годами в каждом контексте и языке появились рекомендации и решения для решения повторяющихся проблем. Знание этих паттернов (шаблонов) поможет вам определить, когда их следует применять, и ускорить разработку. С другой стороны, принципы - это руководящие концепции, которые должны применяться на каждом этапе процесса, и они в большей степени зависят от того, как вы подходите к процессу.

В этой главе мы рассмотрим неполный и не исчерпывающий список принципов и шаблонов, которые часто встречаются при разработке приложений на Vue 3.

Принципы разработки ПО

  • Separation of concerns (Разделение ответственности)
  • Composition over inheritance (Композиция вместо наследования)
  • Single responsibility (Единая ответственность)
  • Encapsulation (Инкапсуляция)
  • KIC - keep it clean (держи это чистым)
  • DRY - don’t repeat yourself (не повторяться)
  • KISS - keep it simple stupid (держи это максимально простым)
  • Code for the next (пиши код для следующего программиста)

Шаблоны проектирования

  • Singleton (Синглтон)
  • Dependency injection (Инъекция зависимостей)
  • Observer (Обсервер)
  • Command (Команда)
  • Proxy (Прокси)
  • Decorator (Декоратор)
  • Façade (Фасад)
  • Callbacks (Обратные вызовы)
  • Promises (Промисы)

Понимание этих принципов и шаблонов поможет вам использовать фреймворк более эффективно и чаще всего не позволит вам "изобретать велосипед". Вместе с первой главой эта глава завершает фундаментальную часть данной книги и дает основу для изучения практической части и реализации примеров приложений в остальных частях книги.

Каковы принципы проектирования программного обеспечения?

При разработке программного обеспечения принципы проектирования - это концептуальные рекомендации высокого уровня, которые должны применяться ко всему процессу. Не в каждом проекте будут использоваться одни и те же принципы, и это не обязательные правила, которые должны соблюдаться. Они могут проявляться в проекте, начиная с архитектуры и заканчивая пользовательским интерфейсом (UI) и последним фрагментом кода. На практике некоторые из этих принципов могут также влиять на такие атрибуты программного обеспечения, как сопровождаемость (maintainability) и возможность повторного использования (re-usability).

Неполный список принципов проектирования

Принципы проектирования несколько различаются в зависимости от контекста, области и даже команды, в которой человек работает в данный момент. Поэтому принципы, включенные в данную главу, являются неисчерпывающими.

Separation of concerns (Разделение ответственности)

Это, пожалуй, самый важный принцип в программной инженерии. Разделение ответственности подразумевает, что система должна быть разделена на подсистемы элементов, сгруппированных по их функциям или услугам (ответственности). Например, мы можем рассматривать человеческий организм как систему, состоящую из множества подсистем (дыхательной, кровеносной, пищеварительной и т.д.). Они, в свою очередь, объединены различными органами, которые состоят из тканей, и так далее, вплоть до мельчайшей клетки. Следуя той же идее в программном обеспечении, приложение можно разделить на элементы, сгруппированные по проблемам, начиная с большой архитектуры и заканчивая последней функцией. Без такого разделения сложности на управляемые части создать функциональную систему было бы гораздо сложнее, а то и вовсе невозможно.

В общем случае применение этого принципа начинается с общей картины того, какой должна быть система, рассматривает, что она должна делать для достижения этой цели, а затем разбивает ее на управляемые рабочие части.

В качестве примера приведем грубое графическое представление разделения задач для веб-приложения. Каждый квадрат на этой диаграмме обозначает отдельную зону ответственности, которая, в свою очередь, может быть детализирована на более мелкие функциональные части. Еще лучше, если вы увидите, как этот принцип позволяет выявить интегрирующие части системы.

image

Рисунок 2.1 - Простой архитектурный вид веб-приложения, демонстрирующий разделение ответственности

Если мы будем углубляться в любую из этих маленьких ячеек внутри соответствующих доменов, мы сможем найти еще больше проблем, которые можно разделить, пока не достигнем неделимого атомарного элемента (компонента или функции, например). Этот принцип имеет много общего с другими принципами, такими как абстракция и единая ответственность, и выигрывает от них. Мы рассмотрим их далее в этой же главе.

Composition over inheritance (Композиция над наследованием)

Принцип композиции над наследованием заимствован непосредственно из объектно-ориентированного программирования (ООП). Он гласит, что объект должен пытаться использовать функциональность других объектов, когда это необходимо, путем ссылки на них или инстанцирования, а не создавать большое и сложное дерево классов наследования для добавления такой функциональности.

В наши дни, JavaScript по своей сути является функциональным языком, хотя и поддерживает множество парадигм, включая черты ООП, поэтому этот принцип также применим. Есть одно предостережение для тех, кто переходит с ООП на JavaScript - не поддавайтесь искушению рассматривать JavaScript как чистый ООП-язык. Это может привести к ненужным сложностям, вместо того чтобы воспользоваться достоинствами языка.

В Vue 3 не существует расширения или наследования компонентов. Когда нам нужна общая или наследуемая функциональность, у нас есть хороший набор инструментов для замены парадигмы наследования. Как соблюсти этот принцип, используя композитные компоненты, мы увидим позже в главе 4, Композиция пользовательского интерфейса с помощью компонентов.

Single responsibility principle (Принцип единой ответственности)

Этот принцип можно встретить как в ООП, так и в функциональном программировании. Проще говоря, он гласит, что класс, метод, функция или компонент должны иметь дело только с одной ответственностью или функциональностью.

Если вы работали в других дисциплинах и языках, то это естественно. Многоцелевые функции трудно поддерживать и они имеют тенденцию выходить из-под контроля, особенно в таких языках, как JavaScript, который является слабо типизированным и очень динамичным. Эта же концепция напрямую относится и к компонентам Vue 3. Каждый компонент должен выполнять одну конкретную операцию и не пытаться делать слишком много самостоятельно.

На практике, когда компонент выходит за определенные рамки, лучше разделить его на несколько компонентов или вынести поведение во внешние модули. Бывают случаи, когда в итоге получается компонент длиной в несколько тысяч строк, но, по моему опыту, это редко бывает необходимо, и этого можно и нужно избегать. Однако следует предупредить, что излишняя конкретика также может привести к ненужному усложнению.

В качестве примера представим себе экран входа в систему, на котором также отображается опция регистрации. Такой подход встречается сегодня на многих сайтах. Можно включить все функции в один компонент, но это нарушит данный принцип. Лучшей альтернативой будет разделение компонентов как минимум на три компонента для решения этой задачи:

  • Родительский компонент, который управляет логикой пользовательского интерфейса. Этот компонент решает, когда показывать/скрывать компоненты входа и регистрации.
  • Дочерний компонент, выполняющий функцию входа.
  • Дочерний компонент, выполняющий функцию регистрации.

Здесь представлено графическое представление данной конфигурации:

image

Рисунок 2.2 - Композиция интерфейса входа/регистрации с использованием нескольких компонентов.

Я думаю, что вы быстро поймете преимущества этого принципа. Он облегчает управление, поддержку и адаптацию кода, поскольку веб-приложения имеют свойство очень и очень быстро мутировать и развиваться.

Совет из Лучших практик

Наделите компоненты единой ответственностью и функциональностью. По возможности избегайте монолитных компонентов.

Encapsulation (Инкапсуляция)

Инкапсуляция - это представление о том, что данные и методы должны быть обернуты в единое целое и при этом предоставлять четко определенный интерфейс прикладного программирования (API).

Часто это делается в виде классов, модулей или библиотек. JavaScript не является исключением, и настоятельно рекомендуется следовать этому принципу. В Vue 3 эта концепция распространяется не только на компоненты, но и на стили CSS и HTML. Введение однофайловых компонентов - яркий пример того, как фреймворк продвигает этот принцип в действии и насколько он важен для современной разработки.

За исключением некоторых редких случаев мы должны рассматривать компоненты (UI) как "черные ящики", которые принимают входящие параметры и предоставляют исходящие данные. Другие компоненты не должны быть знакомы с их внутренним устройством, только с API. По мере создания примеров приложений, описанных в этой книге, вы увидите этот принцип в действии.

KIC - keep it clean

Этот принцип относится главным образом к тому, как вы пишете код. Здесь я должен подчеркнуть, что KIC непосредственно относится к двум категориям, которые сильно влияют на веб-приложения и приложения Vue 3:

  • Как вы форматируете свой код
  • Как вы упорядочиваете события и переменные

Первый пункт включает в себя использование кодовых соглашений, комментариев и отступов для организации кода и логической группировки функций. Например, если у вас есть методы, которые работают с операциями создания, чтения, обновления и удаления (CRUD), то лучше всего разместить их в коде рядом друг с другом, а не разбрасывать по всему исходному файлу.

Многие интегрированные среды разработки (IDE) содержат функции, позволяющие сворачивать или разворачивать внутренний код функций. Это помогает быстро просматривать и находить в коде участки с похожей логикой.

Вторая часть этого принципа связана с обработкой памяти и ссылок. JavaScript имеет очень хороший сборщик мусора, функция которого заключается в отбрасывании неиспользуемых данных для освобождения памяти. Однако бывают случаи, когда алгоритм не может освободить ресурсы из-за наличия оставшихся ссылок. Если вы работали с другими языками, такими как C/C++, то эта проблема может показаться вам знакомой, поскольку вам необходимо вручную резервировать и освобождать память, когда она не используется.

В JavaScript, если вы регистрируете функцию для прослушивания события, лучше всего вручную снять ее с регистрации в соответствующем событии жизненного цикла компонента, когда она больше не нужна. Это позволит избежать утечек и нерационального использования памяти, а также предотвратить некоторые риски безопасности (которые выходят за рамки данной книги).

Мы рассмотрим жизненный цикл компонента в главе 4, Композиция пользовательского интерфейса с помощью компонентов, а пока возьмем следующий пример в качестве хорошего применения этого принципа и сохраним его в качестве лучшей практики. В этом примере мы создадим компонуемый компонент для обнаружения изменения размера окна, поэтому в разделе script setup мы найдем что-то подобное этому:

  1. Регистрируем функцию на событие изменения размера объекта окна в состоянии монтирования.
  2. Снимаем регистрацию события перед размонтированием компонента.

Здесь приведен фрагмент кода:

vue
<script setup>
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const t="/assets/Figure_2.01_B18602.BjVAkxPg.jpg",h="/assets/Figure_2.02_B18602.C10efs3e.jpg",p="/assets/Figure_2.03_B18602.B2O7SQqV.jpg",l="/assets/Figure_2.04_B18602.rVt1Cldv.jpg",k="/assets/Figure_2.05_B18602.BwmrX0Yq.jpg",e="/assets/Figure_2.06_B18602.Vn9eVNDg.jpg",r="/assets/Figure_2.07_B18602.iZAHF3WT.jpg",E="/assets/Figure_2.08_B18602.CondL_kl.jpg",b=JSON.parse('{"title":"Принципы и шаблоны проектирования программного обеспечения","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_2__Software_Design_Principles_and_Patterns.md","filePath":"ru/book/Chapter_2__Software_Design_Principles_and_Patterns.md","lastUpdated":1726505115000}'),d={name:"ru/book/Chapter_2__Software_Design_Principles_and_Patterns.md"},g=n('

Принципы и шаблоны проектирования программного обеспечения

Разработка программного обеспечения по своей сути является человекоемкой дисциплиной. Это означает, что она требует не только знания техники и технологии, но и понимания проблемы и умения принимать решения для реализации решения на нескольких уровнях абстракции.

Программирование во многом зависит от того, как мыслит разработчик. С годами в каждом контексте и языке появились рекомендации и решения для решения повторяющихся проблем. Знание этих паттернов (шаблонов) поможет вам определить, когда их следует применять, и ускорить разработку. С другой стороны, принципы - это руководящие концепции, которые должны применяться на каждом этапе процесса, и они в большей степени зависят от того, как вы подходите к процессу.

В этой главе мы рассмотрим неполный и не исчерпывающий список принципов и шаблонов, которые часто встречаются при разработке приложений на Vue 3.

Принципы разработки ПО

  • Separation of concerns (Разделение ответственности)
  • Composition over inheritance (Композиция вместо наследования)
  • Single responsibility (Единая ответственность)
  • Encapsulation (Инкапсуляция)
  • KIC - keep it clean (держи это чистым)
  • DRY - don’t repeat yourself (не повторяться)
  • KISS - keep it simple stupid (держи это максимально простым)
  • Code for the next (пиши код для следующего программиста)

Шаблоны проектирования

  • Singleton (Синглтон)
  • Dependency injection (Инъекция зависимостей)
  • Observer (Обсервер)
  • Command (Команда)
  • Proxy (Прокси)
  • Decorator (Декоратор)
  • Façade (Фасад)
  • Callbacks (Обратные вызовы)
  • Promises (Промисы)

Понимание этих принципов и шаблонов поможет вам использовать фреймворк более эффективно и чаще всего не позволит вам "изобретать велосипед". Вместе с первой главой эта глава завершает фундаментальную часть данной книги и дает основу для изучения практической части и реализации примеров приложений в остальных частях книги.

Каковы принципы проектирования программного обеспечения?

При разработке программного обеспечения принципы проектирования - это концептуальные рекомендации высокого уровня, которые должны применяться ко всему процессу. Не в каждом проекте будут использоваться одни и те же принципы, и это не обязательные правила, которые должны соблюдаться. Они могут проявляться в проекте, начиная с архитектуры и заканчивая пользовательским интерфейсом (UI) и последним фрагментом кода. На практике некоторые из этих принципов могут также влиять на такие атрибуты программного обеспечения, как сопровождаемость (maintainability) и возможность повторного использования (re-usability).

Неполный список принципов проектирования

Принципы проектирования несколько различаются в зависимости от контекста, области и даже команды, в которой человек работает в данный момент. Поэтому принципы, включенные в данную главу, являются неисчерпывающими.

Separation of concerns (Разделение ответственности)

Это, пожалуй, самый важный принцип в программной инженерии. Разделение ответственности подразумевает, что система должна быть разделена на подсистемы элементов, сгруппированных по их функциям или услугам (ответственности). Например, мы можем рассматривать человеческий организм как систему, состоящую из множества подсистем (дыхательной, кровеносной, пищеварительной и т.д.). Они, в свою очередь, объединены различными органами, которые состоят из тканей, и так далее, вплоть до мельчайшей клетки. Следуя той же идее в программном обеспечении, приложение можно разделить на элементы, сгруппированные по проблемам, начиная с большой архитектуры и заканчивая последней функцией. Без такого разделения сложности на управляемые части создать функциональную систему было бы гораздо сложнее, а то и вовсе невозможно.

В общем случае применение этого принципа начинается с общей картины того, какой должна быть система, рассматривает, что она должна делать для достижения этой цели, а затем разбивает ее на управляемые рабочие части.

В качестве примера приведем грубое графическое представление разделения задач для веб-приложения. Каждый квадрат на этой диаграмме обозначает отдельную зону ответственности, которая, в свою очередь, может быть детализирована на более мелкие функциональные части. Еще лучше, если вы увидите, как этот принцип позволяет выявить интегрирующие части системы.

image

Рисунок 2.1 - Простой архитектурный вид веб-приложения, демонстрирующий разделение ответственности

Если мы будем углубляться в любую из этих маленьких ячеек внутри соответствующих доменов, мы сможем найти еще больше проблем, которые можно разделить, пока не достигнем неделимого атомарного элемента (компонента или функции, например). Этот принцип имеет много общего с другими принципами, такими как абстракция и единая ответственность, и выигрывает от них. Мы рассмотрим их далее в этой же главе.

Composition over inheritance (Композиция над наследованием)

Принцип композиции над наследованием заимствован непосредственно из объектно-ориентированного программирования (ООП). Он гласит, что объект должен пытаться использовать функциональность других объектов, когда это необходимо, путем ссылки на них или инстанцирования, а не создавать большое и сложное дерево классов наследования для добавления такой функциональности.

В наши дни, JavaScript по своей сути является функциональным языком, хотя и поддерживает множество парадигм, включая черты ООП, поэтому этот принцип также применим. Есть одно предостережение для тех, кто переходит с ООП на JavaScript - не поддавайтесь искушению рассматривать JavaScript как чистый ООП-язык. Это может привести к ненужным сложностям, вместо того чтобы воспользоваться достоинствами языка.

В Vue 3 не существует расширения или наследования компонентов. Когда нам нужна общая или наследуемая функциональность, у нас есть хороший набор инструментов для замены парадигмы наследования. Как соблюсти этот принцип, используя композитные компоненты, мы увидим позже в главе 4, Композиция пользовательского интерфейса с помощью компонентов.

Single responsibility principle (Принцип единой ответственности)

Этот принцип можно встретить как в ООП, так и в функциональном программировании. Проще говоря, он гласит, что класс, метод, функция или компонент должны иметь дело только с одной ответственностью или функциональностью.

Если вы работали в других дисциплинах и языках, то это естественно. Многоцелевые функции трудно поддерживать и они имеют тенденцию выходить из-под контроля, особенно в таких языках, как JavaScript, который является слабо типизированным и очень динамичным. Эта же концепция напрямую относится и к компонентам Vue 3. Каждый компонент должен выполнять одну конкретную операцию и не пытаться делать слишком много самостоятельно.

На практике, когда компонент выходит за определенные рамки, лучше разделить его на несколько компонентов или вынести поведение во внешние модули. Бывают случаи, когда в итоге получается компонент длиной в несколько тысяч строк, но, по моему опыту, это редко бывает необходимо, и этого можно и нужно избегать. Однако следует предупредить, что излишняя конкретика также может привести к ненужному усложнению.

В качестве примера представим себе экран входа в систему, на котором также отображается опция регистрации. Такой подход встречается сегодня на многих сайтах. Можно включить все функции в один компонент, но это нарушит данный принцип. Лучшей альтернативой будет разделение компонентов как минимум на три компонента для решения этой задачи:

  • Родительский компонент, который управляет логикой пользовательского интерфейса. Этот компонент решает, когда показывать/скрывать компоненты входа и регистрации.
  • Дочерний компонент, выполняющий функцию входа.
  • Дочерний компонент, выполняющий функцию регистрации.

Здесь представлено графическое представление данной конфигурации:

image

Рисунок 2.2 - Композиция интерфейса входа/регистрации с использованием нескольких компонентов.

Я думаю, что вы быстро поймете преимущества этого принципа. Он облегчает управление, поддержку и адаптацию кода, поскольку веб-приложения имеют свойство очень и очень быстро мутировать и развиваться.

Совет из Лучших практик

Наделите компоненты единой ответственностью и функциональностью. По возможности избегайте монолитных компонентов.

Encapsulation (Инкапсуляция)

Инкапсуляция - это представление о том, что данные и методы должны быть обернуты в единое целое и при этом предоставлять четко определенный интерфейс прикладного программирования (API).

Часто это делается в виде классов, модулей или библиотек. JavaScript не является исключением, и настоятельно рекомендуется следовать этому принципу. В Vue 3 эта концепция распространяется не только на компоненты, но и на стили CSS и HTML. Введение однофайловых компонентов - яркий пример того, как фреймворк продвигает этот принцип в действии и насколько он важен для современной разработки.

За исключением некоторых редких случаев мы должны рассматривать компоненты (UI) как "черные ящики", которые принимают входящие параметры и предоставляют исходящие данные. Другие компоненты не должны быть знакомы с их внутренним устройством, только с API. По мере создания примеров приложений, описанных в этой книге, вы увидите этот принцип в действии.

KIC - keep it clean

Этот принцип относится главным образом к тому, как вы пишете код. Здесь я должен подчеркнуть, что KIC непосредственно относится к двум категориям, которые сильно влияют на веб-приложения и приложения Vue 3:

  • Как вы форматируете свой код
  • Как вы упорядочиваете события и переменные

Первый пункт включает в себя использование кодовых соглашений, комментариев и отступов для организации кода и логической группировки функций. Например, если у вас есть методы, которые работают с операциями создания, чтения, обновления и удаления (CRUD), то лучше всего разместить их в коде рядом друг с другом, а не разбрасывать по всему исходному файлу.

Многие интегрированные среды разработки (IDE) содержат функции, позволяющие сворачивать или разворачивать внутренний код функций. Это помогает быстро просматривать и находить в коде участки с похожей логикой.

Вторая часть этого принципа связана с обработкой памяти и ссылок. JavaScript имеет очень хороший сборщик мусора, функция которого заключается в отбрасывании неиспользуемых данных для освобождения памяти. Однако бывают случаи, когда алгоритм не может освободить ресурсы из-за наличия оставшихся ссылок. Если вы работали с другими языками, такими как C/C++, то эта проблема может показаться вам знакомой, поскольку вам необходимо вручную резервировать и освобождать память, когда она не используется.

В JavaScript, если вы регистрируете функцию для прослушивания события, лучше всего вручную снять ее с регистрации в соответствующем событии жизненного цикла компонента, когда она больше не нужна. Это позволит избежать утечек и нерационального использования памяти, а также предотвратить некоторые риски безопасности (которые выходят за рамки данной книги).

Мы рассмотрим жизненный цикл компонента в главе 4, Композиция пользовательского интерфейса с помощью компонентов, а пока возьмем следующий пример в качестве хорошего применения этого принципа и сохраним его в качестве лучшей практики. В этом примере мы создадим компонуемый компонент для обнаружения изменения размера окна, поэтому в разделе script setup мы найдем что-то подобное этому:

  1. Регистрируем функцию на событие изменения размера объекта окна в состоянии монтирования.
  2. Снимаем регистрацию события перед размонтированием компонента.

Здесь приведен фрагмент кода:

vue
<script setup>
 import { onBeforeUnmount, onMounted } from "vue";
 onMounted(() => {
   window.addEventListener("resize", myFunction);
diff --git a/assets/ru_book_Chapter_2__Software_Design_Principles_and_Patterns.md.BTHjk4t2.lean.js b/assets/ru_book_Chapter_2__Software_Design_Principles_and_Patterns.md.DFYhrhRF.lean.js
similarity index 95%
rename from assets/ru_book_Chapter_2__Software_Design_Principles_and_Patterns.md.BTHjk4t2.lean.js
rename to assets/ru_book_Chapter_2__Software_Design_Principles_and_Patterns.md.DFYhrhRF.lean.js
index 4606c2a00..d6e47c310 100644
--- a/assets/ru_book_Chapter_2__Software_Design_Principles_and_Patterns.md.BTHjk4t2.lean.js
+++ b/assets/ru_book_Chapter_2__Software_Design_Principles_and_Patterns.md.DFYhrhRF.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const t="/assets/Figure_2.01_B18602.BjVAkxPg.jpg",h="/assets/Figure_2.02_B18602.C10efs3e.jpg",p="/assets/Figure_2.03_B18602.B2O7SQqV.jpg",l="/assets/Figure_2.04_B18602.rVt1Cldv.jpg",k="/assets/Figure_2.05_B18602.BwmrX0Yq.jpg",e="/assets/Figure_2.06_B18602.Vn9eVNDg.jpg",r="/assets/Figure_2.07_B18602.iZAHF3WT.jpg",E="/assets/Figure_2.08_B18602.CondL_kl.jpg",b=JSON.parse('{"title":"Принципы и шаблоны проектирования программного обеспечения","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_2__Software_Design_Principles_and_Patterns.md","filePath":"ru/book/Chapter_2__Software_Design_Principles_and_Patterns.md","lastUpdated":1726474804000}'),d={name:"ru/book/Chapter_2__Software_Design_Principles_and_Patterns.md"},g=n("",292),o=[g];function y(c,F,u,A,m,D){return i(),a("div",null,o)}const v=s(d,[["render",y]]);export{b as __pageData,v as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const t="/assets/Figure_2.01_B18602.BjVAkxPg.jpg",h="/assets/Figure_2.02_B18602.C10efs3e.jpg",p="/assets/Figure_2.03_B18602.B2O7SQqV.jpg",l="/assets/Figure_2.04_B18602.rVt1Cldv.jpg",k="/assets/Figure_2.05_B18602.BwmrX0Yq.jpg",e="/assets/Figure_2.06_B18602.Vn9eVNDg.jpg",r="/assets/Figure_2.07_B18602.iZAHF3WT.jpg",E="/assets/Figure_2.08_B18602.CondL_kl.jpg",b=JSON.parse('{"title":"Принципы и шаблоны проектирования программного обеспечения","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_2__Software_Design_Principles_and_Patterns.md","filePath":"ru/book/Chapter_2__Software_Design_Principles_and_Patterns.md","lastUpdated":1726505115000}'),d={name:"ru/book/Chapter_2__Software_Design_Principles_and_Patterns.md"},g=n("",292),o=[g];function y(c,F,u,A,m,D){return i(),a("div",null,o)}const v=s(d,[["render",y]]);export{b as __pageData,v as default};
diff --git a/assets/ru_book_Chapter_3__Setting_Up_a_Working_Project.md.C4QXibPE.js b/assets/ru_book_Chapter_3__Setting_Up_a_Working_Project.md.BSizAlHy.js
similarity index 99%
rename from assets/ru_book_Chapter_3__Setting_Up_a_Working_Project.md.C4QXibPE.js
rename to assets/ru_book_Chapter_3__Setting_Up_a_Working_Project.md.BSizAlHy.js
index 68cb4b7d7..498a14e41 100644
--- a/assets/ru_book_Chapter_3__Setting_Up_a_Working_Project.md.C4QXibPE.js
+++ b/assets/ru_book_Chapter_3__Setting_Up_a_Working_Project.md.BSizAlHy.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/Figure_3.01_B18602.B6cX8FQX.jpg",l="/assets/Figure_3.02_B18602.CPUnoM0M.jpg",p="/assets/Figure_3.03_B18602.TtGZDytf.jpg",h="/assets/Figure_3.04_B18602.B8-plar-.jpg",e="/assets/Figure_3.05_B18602.DUf8RQhy.jpg",k="/assets/Figure_3.06_B18602.CPb3WeTL.jpg",v=JSON.parse('{"title":"Установка рабочего проекта","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_3__Setting_Up_a_Working_Project.md","filePath":"ru/book/Chapter_3__Setting_Up_a_Working_Project.md","lastUpdated":1726474804000}'),r={name:"ru/book/Chapter_3__Setting_Up_a_Working_Project.md"},o=t('

Установка рабочего проекта

В предыдущих главах мы заложили теоретические основы проектирования веб-приложений на JavaScript с использованием фреймворка Vue 3. Однако до сих пор мы не приступили к реальному проекту. Именно этому и посвящена данная глава. С помощью нового набора инструментов, поставляемых вместе с Vue 3, мы создадим проект с нуля и подготовим шаблон, который будем использовать в других проектах. Как обычно, начальным проектом для веб-приложения является создание списка дел To-Do (эквивалент Hello World). По мере внедрения каждой новой концепции мы будем дорабатывать приложение, превращая его в нечто гораздо более полезное или, по крайней мере, более интересное.

Некоторые из практических навыков, которые мы будем осваивать здесь, следующие:

  • Настройка рабочей среды и интегрированной среды разработки (IDE)
  • Использование новых инструментов командной строки и нового сборщика Vite для создания каркаса нашего приложения
  • Модификация базового шаблона и структуры папок с учетом лучших практик и продвинутых архитектурных шаблонов
  • Интеграция готовых CSS-фреймворков в наше приложение
  • Конфигурирование сборщика Vite под наши нужды

В отличие от предыдущих глав, эта будет в основном практической, и в ней будут даны ссылки на официальную документацию по каждому элементу экосистемы, поскольку они периодически меняются. Запоминать шаги не нужно, так как начало проекта с нуля не так часто встречается в крупных проектах, а инструменты для их реализации развиваются. Давайте начнем.

Технические требования

Для выполнения практических шагов, описанных в этой главе, вам потребуется следующее:

  • Компьютер под управлением Windows, Linux или macOS с 64-разрядной архитектурой. Я буду использовать Ubuntu 22.04, но эти инструменты являются кроссплатформенными, и все шаги можно выполнять на разных ОС (если что-то будет отличаться, я укажу на это).
  • Node.js 16.16.0 LTS (рекомендуется ставить последнюю версию - прим. переводчика) с установленным npm (node package manager). Шаги по установке Node.js можно найти в официальной документации по адресу https://nodejs.org/. Инструменты сборки работают поверх Node.js, так что без него вы не сможете продвинуться далеко. Node.js - это версия JavaScript, адаптированная для работы на серверах и в системах "вне" браузера, что делает ее очень и очень удобной и мощной. Большинство современных пакетных программ для веб-разработки так или иначе используют Node.js, хотя бы из-за большого удобства, которое он обеспечивает.
  • Текстовый редактор, работающий с обычным текстом в формате UTF-8, желательно IDE. Для этого инструмента нет недостатка в выборе. Теоретически можно обойтись и без IDE, но я настоятельно рекомендую ее приобрести, хотя бы ради помощи в работе с кодом (известной также как IntelliSense, code completion и т.д.). Вот некоторые из наиболее популярных вариантов:
  • Visual Studio Code (бесплатный): Отличный и очень популярный среди разработчиков вариант от Microsoft, который обеспечивает хорошую поддержку Vue 3 через плагин Volar. Официальный сайт, и в этой книге мы будем использовать этот редактор в качестве рекомендуемой IDE для работы с Vue и Vite.
  • Sublime Text (бесплатная пробная/платная версия): Это еще один популярный вариант, особенно среди пользователей macOS. Официальный сайт
  • Jetbrains WebStorm (бесплатная пробная версия, платная): Официальный сайт
  • Komodo IDE (бесплатно): Официальный сайт
  • NetBeans IDE (бесплатно): Официальный сайт
  • Консоль или эмулятор терминала. Наиболее знакома эта концепция пользователям Linux и macOS. Пользователи Windows могут использовать Command Prompt, встроенный в некоторые IDE терминал, или установить Windows Terminal из Microsoft Store.
  • Современный веб-браузер, основанный на движке Chromium (Google Chrome, Microsoft Edge, Opera, Brave, Vivaldi и др.) или Mozilla Firefox.

Установив все это, мы готовы к рассмотрению примеров и базовых проектов. Однако я рекомендую также установить Git для контроля версий кода. Мы будем использовать его позже в этой книге, в главе 9, Тестирование и контроль исходных текстов.

В современной разработке трудно представить себе работу над проектом без какого-либо инструмента для отслеживания изменений кода и контроля версий. Git стал отраслевым стандартом. Установить его можно, руководствуясь документацией с официального сайта https://git-scm.com/

Файлы кода этой главы можно найти на GitHub здесь

Посмотрите следующее видео, чтобы увидеть код в действии.

Теперь, имея все необходимые инструменты, мы готовы начать наш первый проект на Vue 3.

Настройка проекта и инструменты

Мы создадим новый проект, используя Vite в качестве нашего сборщика, непосредственно из командной строки. Откройте окно терминала в каталоге, где будет размещен наш проект, и выполните следующие шаги:

  1. Наберите следующую команду:
sh
$ npm create vite@latest
  1. Если появится запрос на установку дополнительных пакетов, введите Y (да).

  2. Следующим шагом вам будет предложено ввести информацию о проекте в следующем порядке:

  3. Имя проекта: Оно будет использоваться для идентификации проекта и создания новой папки для его размещения. Если вы хотите, чтобы проект был установлен в текущую папку, введите точку (.) в качестве.

  4. Имя пакета: Это имя будет использоваться для внутренней конфигурации пакета. В данном примере введите chapter-3 (или любое другое имя по вашему выбору). Эта опция может не отображаться, если вы ввели или приняли имя проекта или приняли предложенное по умолчанию имя. Если вы ввели точку (.) в качестве имени для создания проекта в текущем каталоге, то эта опция будет обязательной.

  5. Выбрать фреймворк: Здесь помощник отобразит меню с вариантами. Выберите vue с помощью клавиш со стрелками и нажмите Enter.

  6. Выберите вариант: Как и раньше, используйте клавиши со стрелками и выберите JavaScript (или TypeScript, но мы будем использовать обычный JavaScript на протяжении всей этой книги).

Далее вы увидите, как помощник загружает дополнительное содержимое на основе выбранных вами параметров и формирует проект. Он создаст структуру каталогов с множеством файлов. Однако если мы собираемся запустить проект, то вскоре обнаруживаем, что он просто не работает. Это связано с тем, что при установке каркаса приложения не устанавливаются зависимости, а только скелет. Поэтому остается сделать еще один шаг - установить зависимости с помощью npm. В терминале введите следующую команду и нажмите Enter (если установка производилась в текущий каталог; если нет, то сначала войдите в только что созданный каталог):

sh
$ npm install

Менеджер пакетов скачает и установит зависимости для нашего проекта и поместит их в новый каталог node_modules. Как вы уже догадались, наша среда разработки для Vue с Vite - это Node.js проект.

После установки зависимостей настало время запустить проект и посмотреть, что у нас получилось. В терминале введите следующую команду:

sh
$ npm run dev

То, что произойдет дальше, может оказаться довольно быстрым. Vite разберет файлы вашего проекта и запустит на вашей машине сервер разработчика с веб-адресом, который вы можете использовать в браузере. В терминале вы увидите примерно следующее:

image

Рисунок 3.1 - Результат работы сервера разработки с Vite

Самой важной информацией здесь является localhost и порт, на котором обслуживается сайт вашего проекта. Миллисекунды здесь указаны только для того, чтобы вы поняли, насколько быстро Vite может запустить сервер разработки (хвастовство, если хотите знать мое мнение). Далее, чтобы увидеть результаты наших трудов, откройте в браузере локальный адрес, и перед вами должен появиться сайт, выглядящий примерно так:

image

Рисунок 3.2: Базовый проект Vite + Vue в браузере

Этот сайт вполне работоспособен, хотя и не очень производителен. Чтобы проверить, что Vue 3 работает, нажмите на кнопку в центре экрана, и вы увидите, как счетчик увеличивается с каждым нажатием. Это и есть реактивность в действии! Кроме того, Vite предлагает нам сервер разработки с функцией живого обновления и Hot Module Replacement (HMR), то есть как только мы внесем изменения в код и сохраним файлы, сайт обновится автоматически. На практике при разработке пользовательских интерфейсов очень часто приходится держать этот самообновляющийся сайт открытым в браузере для предварительного просмотра нашей работы, а в некоторых случаях и в нескольких браузерах одновременно. Очень удобно!

Мы продвинулись в нашем путешествии, но это еще далеко не конец. Сайт в виде каркаса - это не более чем отправная точка. В оставшейся части главы мы модифицируем его, чтобы он лучше соответствовал нашим целям, и создадим простое приложение To-Do.

В следующем разделе мы более подробно рассмотрим структуру и организацию нашего стартового проекта.

Структура папок и её модификации

В главе 1, Фреймворк Vue 3, мы упоминали, что фреймворки предписывают определенную структуру приложению. Vue 3 не является исключением, но соглашения, используемые в структуре каталогов, минимальны по сравнению с другими фреймворками. Если открыть каталог, в который вы установили проект, в проводнике Files Explorer (либо в ОС, либо в IDE), то вы обнаружите структуру, подобную этой:

image

Рисунок 3.3: Структура проекта в Visual Code

Папка .vscode была создана IDE, а node_modules была создана npm для распределения зависимостей. Мы их проигнорируем, так как нам не нужно беспокоиться или работать с ними. Начиная с самого верха, рассмотрим, что представляет собой каждый каталог:

  • public

Эта папка содержит структуру каталогов и файлы, которые не будут обрабатываться сборщиком и будут скопированы непосредственно в конечный сайт. Вы можете свободно размещать здесь свое собственное статическое содержимое. Сюда помещаются изображения, веб-шрифты, сторонние CSS-библиотеки, иконки и т.д. Как правило, здесь размещаются файлы, на которые никогда не будет ссылаться ваш код, например manifest.json, favicon.ico, robots.txt и т.д.

  • src

Здесь мы будем размещать наш JavaScript, динамический CSS, компоненты и т.д. Внутри неё распологаются:

  • Папка assets с SVG-файлом. В эту папку мы можем включить файлы, с которыми будет работать либо код, либо сборщик. Вы можете импортировать их непосредственно в код, а сборщик позаботится об их корректном отображении при передаче на веб-сервер.
  • Папка components, в которую мы поместим наши однофайловые компоненты (SFC) с расширением .vue. Здесь мы можем создать структуру каталогов по своему усмотрению. Здесь размещен компонент HelloWorld.vue.
  • Файл App.vue. Это основной компонент нашего приложения и корневой компонент нашей иерархии. Его принято называть именно так.
  • Файл main.js, который является начальной точкой нашего приложения. Он отвечает за загрузку начальных зависимостей, главного компонента (App.vue), создание приложения Vue 3 со всеми дополнительными функциями (плагины, глобальные директивы и компоненты), а также запуск и установку приложения на веб-страницу.
  • Файл styles.css, представляющий собой глобальную таблицу стилей, которая будет применяться ко всему нашему приложению. В предыдущих версиях инструмента создания структуры проекта его размещали в папке assets, но теперь он переместился в корень src/, заняв более значимое место. Этот файл при импорте в файл main.js будет разобран и объединен с нашим JavaScript.

Настало время исследовать файлы в корне проекта в том же порядке, в котором они появляются:

  • .gitignore - это файл, который управляет тем, что исключается из контроля исходных текстов Git. Мы познакомимся с Git-ом в главе 9, Тестирование и контроль исходных текстов.
  • index.html - это главный файл и отправная точка нашего веб-приложения. Пакет будет обращаться к другим файлам и обрабатывать их в порядке их появления, начиная с index.html. Вы можете изменить его в соответствии со своими потребностями, так как сгенерированный файл является достаточно базовым. Обратите внимание, что в конце тега body инструмент включен тег script для загрузки нашего файла main.js. Именно этот файл создает наше приложение Vue. В отличие от других сборщиков, которые автоматически генерируют этот файл и затем внедряют его в index.html, Vite требует, чтобы он был импортирован явно. Помимо прочих преимуществ, это позволяет контролировать, когда приложение Vue будет загружаться внутри веб-страницы.
  • package-lock.json используется npm для управления зависимостями в node_modules. Игнорируйте его.
  • package.json очень важен. Этот файл определяет проект, отслеживает зависимости для разработки и производства, а также предоставляет некоторые приятные возможности, например, автоматизацию некоторых задач с помощью простых команд. На данный момент интерес представляет секция scripts, в которой задаются простые псевдонимы для команд. Мы можем запускать их из командной строки, набрав npm run <имя скрипта>. Также уже подготовлены для нас три команды Vite:
  • npm run dev: Это запустит сайт в режиме разработчика, с локальным сервером и живой перезагрузкой (hot reload).
  • npm run build: Это позволит собрать наш код в пакет и оптимизировать его для создания готовой продакшен версии.
  • npm run preview: Это промежуточный вариант между двумя предыдущими. Он позволяет локально увидеть собранную версию, готовую к производству. Это может показаться непонятным, если не учитывать, что в процессе разработки адреса и ресурсы, к которым обращается приложение, а также публичный URL, могут отличаться от тех, что используются в производстве. Эта опция позволяет запускать приложение локально, но при этом ссылаться на производственные конечные точки и ресурсы и использовать их. Рекомендуется запускать "предварительный просмотр" перед развертыванием вашего приложения.
  • vite.config.js - это конфигурационный файл, определяющий поведение Vite во время разработки и при сборке для производства. Некоторые из наиболее важных и распространенных опций мы рассмотрим далее в этой главе.

Теперь, когда мы имеем более четкое представление о том, что нам дал инструмент Vite scaffolding, самое время приступить к созданию нашего примера приложения. Прежде чем углубиться в код, необходимо рассмотреть еще несколько вопросов: как интегрировать сторонние таблицы стилей и CSS-фреймворки, а также некоторые конфигурации Vite, которые облегчат нам жизнь.

Интеграция с CSS-фреймворками

Если вспомнить три последних принципа, рассмотренных в главе 2, Принципы и паттерны проектирования программного обеспечения, (не повторяться, сохранять чистоту и код для следующего), то изобретать велосипед в вопросах внешнего вида и графического языка - вещь в большинстве случаев нежелательная.

В Интернете существует постоянно растущая коллекция CSS-фреймворков и библиотек, которые мы можем легко внедрять в наши приложения. От старого популярного Bootstrap до атомарного дизайна, от утилитарных классов, таких как Tailwind, до графических языков, таких как Material Design и skeuomorphism - спектр возможностей огромен.

В Vue уже имеется достаточное количество библиотек компонентов, реализующих некоторые из них, которые можно найти в репозиториях npm. Используя их, вы будете ограничены в изучении и применении соглашений, применяемых дизайнером, которые в некоторых случаях могут полностью определять, как вы можете построить свой пользовательский интерфейс. Типичными примерами являются использование Vue-material (и других), соответствующих спецификациям Material Design от Google, или применение веб-шрифтов и шрифтов-иконок.

Невозможно рассказать о каждом из них, но здесь приведены рекомендации и некоторые примеры включения этих библиотек в ваш проект:

  1. Поместите статические активы, предоставляемые фреймворком или библиотекой, в папку public, следуя их требуемой структуре и соблюдая любую структуру дерева.
  2. Включите зависимости для CSS-фреймворка или библиотек в файл index.html, следуя их инструкциям. Часто это подразумевает импорт таблиц стилей и файлов JavaScript в раздел head или в тег body. В любом случае убедитесь, что они размещены до загрузки нашего приложения (тег script, ссылающийся на наш файл main.js).
  3. Если фреймворк или библиотеку необходимо инстанцировать, сделайте это до того, как мы смонтируем наше приложение. Это можно сделать непосредственно в index.html в теге script, в main.js или в другом модуле.
  4. Используйте классы (и JavaScript-функции) в секции шаблона вашего компонента обычным образом, как и в обычном HTML, используя эти библиотеки. Некоторые фреймворки создают глобальные объекты JavaScript, привязанные к объекту window, поэтому к ним можно обращаться непосредственно в секции script компонента. Если это не так, рассмотрите возможность инкапсуляции функциональности, чтобы использовать ее в своем приложении, используя паттерны проектирования, такие как синглтон, прокси или декоратор.

А теперь давайте применим эти простые инструкции на примере нашего проекта. Мы включим в него фреймворк, работающий только на CSS (это означает, что он не использует дополнительный JavaScript), а значки шрифтов будут включать базовую иконографию. В промышленной сборке мы должны удалить неиспользуемые правила CSS. Некоторые CSS-фреймворки предоставляют эту возможность из коробки, например, Tailwind. Однако эта тема выходит за рамки данной книги, но ее можно изучить в Интернете.

Фреймворк w3.css

На сайте w3schools.com предлагается бесплатный CSS фреймворк, частично основанный на языке Material Design, популярном в Google и используемом во многих мобильных приложениях. Он предлагает множество полезных классов, которые можно без лицензии применять в своих приложениях. Более подробную информацию можно найти на официальном сайте: https://www.w3schools.com/w3css/.

Мы будем следовать рекомендациям, указанным ранее, поэтому давайте выполним следующие шаги:

  1. Скачайте файл w3.css с сайта https://www.w3schools.com/w3css/w3css_downloads.asp и поместите его в новую папку с именем css в каталоге public. По окончании работы он должен выглядеть следующим образом:

image

Рисунок 3.4 - Расположение файла w3.css

  1. Модифицируем index.html в корне нашего проекта, добавив ссылку на файл w3.css с помощью тега link следующим образом:
html
<link rel="stylesheet" href="/css/w3.css">

Таким образом, классы, определенные в CSS-файле, теперь готовы к использованию в шаблонах нашего компонента. Также, чтобы избежать нежелательных стилей при начальном развертывании приложения, не забудьте очистить файл styles.css, предоставляемый программой установки. Если теперь запустить сервер разработки с помощью команды npm run dev, то мы увидим, что внешний вид сайта немного изменился, так как новая таблица стилей была успешно применена.

Следующим шагом будет добавление шрифта icon.

FontAwesome - это просто замечательно

Одним из способов экономии ресурсов разработчиков при работе с множеством значков является использование шрифтовых иконок. Это файлы шрифтов, в которых вместо символов отображаются значки. Эта концепция не нова, но она находит широкое применение в веб-разработке.

Использование шрифтов для иконок в отличие от других приемов (например, спрайтовых листов CSS) имеет массу преимуществ. Одним из наиболее значимых является то, что с такими иконками можно работать так же, как и с обычными шрифтами, поэтому мы можем легко изменять их размер, цвет и т.д., сохраняя при этом согласованность с остальным текстом. Но не все так радужно и счастливо, поскольку теперь основной компромисс заключается в том, что эти значки отображаются только одним или максимум двумя цветами и по необходимости должны быть довольно простыми.

FontAwesome - это сайт, предлагающий шрифты-иконки для использования в наших приложениях, как веб, так и десктопных. Он занимается этим уже много лет и располагает одними из лучших коллекций иконок. Мы можем скачать и использовать его бесплатный уровень для нашего проекта. Давайте еще раз проследим за тем, как их использовать в нашем проекте:

  1. Скачайте шрифты для web с сайта https://fontawesome.com/download. При этом будет загружен довольно большой ZIP-файл со всеми различными вариантами.

  2. Из ZIP-файла скопируйте директории css/ и webfonts/ как есть, в нашу папку public/. Мы не будем использовать все, что находится в этой папке, в наших проектах, поэтому то, что мы не используем, можно будет удалить позже.

  3. Редактируем файл index.html, чтобы добавить таблицы стилей, которые мы будем использовать. Эти CSS-файлы будут автоматически загружать шрифты иконок из папки /webfonts/:

html
<link rel="stylesheet" href="/css/fontawesome.min.css">
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/Figure_3.01_B18602.B6cX8FQX.jpg",l="/assets/Figure_3.02_B18602.CPUnoM0M.jpg",p="/assets/Figure_3.03_B18602.TtGZDytf.jpg",h="/assets/Figure_3.04_B18602.B8-plar-.jpg",e="/assets/Figure_3.05_B18602.DUf8RQhy.jpg",k="/assets/Figure_3.06_B18602.CPb3WeTL.jpg",v=JSON.parse('{"title":"Установка рабочего проекта","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_3__Setting_Up_a_Working_Project.md","filePath":"ru/book/Chapter_3__Setting_Up_a_Working_Project.md","lastUpdated":1726505115000}'),r={name:"ru/book/Chapter_3__Setting_Up_a_Working_Project.md"},o=t('

Установка рабочего проекта

В предыдущих главах мы заложили теоретические основы проектирования веб-приложений на JavaScript с использованием фреймворка Vue 3. Однако до сих пор мы не приступили к реальному проекту. Именно этому и посвящена данная глава. С помощью нового набора инструментов, поставляемых вместе с Vue 3, мы создадим проект с нуля и подготовим шаблон, который будем использовать в других проектах. Как обычно, начальным проектом для веб-приложения является создание списка дел To-Do (эквивалент Hello World). По мере внедрения каждой новой концепции мы будем дорабатывать приложение, превращая его в нечто гораздо более полезное или, по крайней мере, более интересное.

Некоторые из практических навыков, которые мы будем осваивать здесь, следующие:

  • Настройка рабочей среды и интегрированной среды разработки (IDE)
  • Использование новых инструментов командной строки и нового сборщика Vite для создания каркаса нашего приложения
  • Модификация базового шаблона и структуры папок с учетом лучших практик и продвинутых архитектурных шаблонов
  • Интеграция готовых CSS-фреймворков в наше приложение
  • Конфигурирование сборщика Vite под наши нужды

В отличие от предыдущих глав, эта будет в основном практической, и в ней будут даны ссылки на официальную документацию по каждому элементу экосистемы, поскольку они периодически меняются. Запоминать шаги не нужно, так как начало проекта с нуля не так часто встречается в крупных проектах, а инструменты для их реализации развиваются. Давайте начнем.

Технические требования

Для выполнения практических шагов, описанных в этой главе, вам потребуется следующее:

  • Компьютер под управлением Windows, Linux или macOS с 64-разрядной архитектурой. Я буду использовать Ubuntu 22.04, но эти инструменты являются кроссплатформенными, и все шаги можно выполнять на разных ОС (если что-то будет отличаться, я укажу на это).
  • Node.js 16.16.0 LTS (рекомендуется ставить последнюю версию - прим. переводчика) с установленным npm (node package manager). Шаги по установке Node.js можно найти в официальной документации по адресу https://nodejs.org/. Инструменты сборки работают поверх Node.js, так что без него вы не сможете продвинуться далеко. Node.js - это версия JavaScript, адаптированная для работы на серверах и в системах "вне" браузера, что делает ее очень и очень удобной и мощной. Большинство современных пакетных программ для веб-разработки так или иначе используют Node.js, хотя бы из-за большого удобства, которое он обеспечивает.
  • Текстовый редактор, работающий с обычным текстом в формате UTF-8, желательно IDE. Для этого инструмента нет недостатка в выборе. Теоретически можно обойтись и без IDE, но я настоятельно рекомендую ее приобрести, хотя бы ради помощи в работе с кодом (известной также как IntelliSense, code completion и т.д.). Вот некоторые из наиболее популярных вариантов:
  • Visual Studio Code (бесплатный): Отличный и очень популярный среди разработчиков вариант от Microsoft, который обеспечивает хорошую поддержку Vue 3 через плагин Volar. Официальный сайт, и в этой книге мы будем использовать этот редактор в качестве рекомендуемой IDE для работы с Vue и Vite.
  • Sublime Text (бесплатная пробная/платная версия): Это еще один популярный вариант, особенно среди пользователей macOS. Официальный сайт
  • Jetbrains WebStorm (бесплатная пробная версия, платная): Официальный сайт
  • Komodo IDE (бесплатно): Официальный сайт
  • NetBeans IDE (бесплатно): Официальный сайт
  • Консоль или эмулятор терминала. Наиболее знакома эта концепция пользователям Linux и macOS. Пользователи Windows могут использовать Command Prompt, встроенный в некоторые IDE терминал, или установить Windows Terminal из Microsoft Store.
  • Современный веб-браузер, основанный на движке Chromium (Google Chrome, Microsoft Edge, Opera, Brave, Vivaldi и др.) или Mozilla Firefox.

Установив все это, мы готовы к рассмотрению примеров и базовых проектов. Однако я рекомендую также установить Git для контроля версий кода. Мы будем использовать его позже в этой книге, в главе 9, Тестирование и контроль исходных текстов.

В современной разработке трудно представить себе работу над проектом без какого-либо инструмента для отслеживания изменений кода и контроля версий. Git стал отраслевым стандартом. Установить его можно, руководствуясь документацией с официального сайта https://git-scm.com/

Файлы кода этой главы можно найти на GitHub здесь

Посмотрите следующее видео, чтобы увидеть код в действии.

Теперь, имея все необходимые инструменты, мы готовы начать наш первый проект на Vue 3.

Настройка проекта и инструменты

Мы создадим новый проект, используя Vite в качестве нашего сборщика, непосредственно из командной строки. Откройте окно терминала в каталоге, где будет размещен наш проект, и выполните следующие шаги:

  1. Наберите следующую команду:
sh
$ npm create vite@latest
  1. Если появится запрос на установку дополнительных пакетов, введите Y (да).

  2. Следующим шагом вам будет предложено ввести информацию о проекте в следующем порядке:

  3. Имя проекта: Оно будет использоваться для идентификации проекта и создания новой папки для его размещения. Если вы хотите, чтобы проект был установлен в текущую папку, введите точку (.) в качестве.

  4. Имя пакета: Это имя будет использоваться для внутренней конфигурации пакета. В данном примере введите chapter-3 (или любое другое имя по вашему выбору). Эта опция может не отображаться, если вы ввели или приняли имя проекта или приняли предложенное по умолчанию имя. Если вы ввели точку (.) в качестве имени для создания проекта в текущем каталоге, то эта опция будет обязательной.

  5. Выбрать фреймворк: Здесь помощник отобразит меню с вариантами. Выберите vue с помощью клавиш со стрелками и нажмите Enter.

  6. Выберите вариант: Как и раньше, используйте клавиши со стрелками и выберите JavaScript (или TypeScript, но мы будем использовать обычный JavaScript на протяжении всей этой книги).

Далее вы увидите, как помощник загружает дополнительное содержимое на основе выбранных вами параметров и формирует проект. Он создаст структуру каталогов с множеством файлов. Однако если мы собираемся запустить проект, то вскоре обнаруживаем, что он просто не работает. Это связано с тем, что при установке каркаса приложения не устанавливаются зависимости, а только скелет. Поэтому остается сделать еще один шаг - установить зависимости с помощью npm. В терминале введите следующую команду и нажмите Enter (если установка производилась в текущий каталог; если нет, то сначала войдите в только что созданный каталог):

sh
$ npm install

Менеджер пакетов скачает и установит зависимости для нашего проекта и поместит их в новый каталог node_modules. Как вы уже догадались, наша среда разработки для Vue с Vite - это Node.js проект.

После установки зависимостей настало время запустить проект и посмотреть, что у нас получилось. В терминале введите следующую команду:

sh
$ npm run dev

То, что произойдет дальше, может оказаться довольно быстрым. Vite разберет файлы вашего проекта и запустит на вашей машине сервер разработчика с веб-адресом, который вы можете использовать в браузере. В терминале вы увидите примерно следующее:

image

Рисунок 3.1 - Результат работы сервера разработки с Vite

Самой важной информацией здесь является localhost и порт, на котором обслуживается сайт вашего проекта. Миллисекунды здесь указаны только для того, чтобы вы поняли, насколько быстро Vite может запустить сервер разработки (хвастовство, если хотите знать мое мнение). Далее, чтобы увидеть результаты наших трудов, откройте в браузере локальный адрес, и перед вами должен появиться сайт, выглядящий примерно так:

image

Рисунок 3.2: Базовый проект Vite + Vue в браузере

Этот сайт вполне работоспособен, хотя и не очень производителен. Чтобы проверить, что Vue 3 работает, нажмите на кнопку в центре экрана, и вы увидите, как счетчик увеличивается с каждым нажатием. Это и есть реактивность в действии! Кроме того, Vite предлагает нам сервер разработки с функцией живого обновления и Hot Module Replacement (HMR), то есть как только мы внесем изменения в код и сохраним файлы, сайт обновится автоматически. На практике при разработке пользовательских интерфейсов очень часто приходится держать этот самообновляющийся сайт открытым в браузере для предварительного просмотра нашей работы, а в некоторых случаях и в нескольких браузерах одновременно. Очень удобно!

Мы продвинулись в нашем путешествии, но это еще далеко не конец. Сайт в виде каркаса - это не более чем отправная точка. В оставшейся части главы мы модифицируем его, чтобы он лучше соответствовал нашим целям, и создадим простое приложение To-Do.

В следующем разделе мы более подробно рассмотрим структуру и организацию нашего стартового проекта.

Структура папок и её модификации

В главе 1, Фреймворк Vue 3, мы упоминали, что фреймворки предписывают определенную структуру приложению. Vue 3 не является исключением, но соглашения, используемые в структуре каталогов, минимальны по сравнению с другими фреймворками. Если открыть каталог, в который вы установили проект, в проводнике Files Explorer (либо в ОС, либо в IDE), то вы обнаружите структуру, подобную этой:

image

Рисунок 3.3: Структура проекта в Visual Code

Папка .vscode была создана IDE, а node_modules была создана npm для распределения зависимостей. Мы их проигнорируем, так как нам не нужно беспокоиться или работать с ними. Начиная с самого верха, рассмотрим, что представляет собой каждый каталог:

  • public

Эта папка содержит структуру каталогов и файлы, которые не будут обрабатываться сборщиком и будут скопированы непосредственно в конечный сайт. Вы можете свободно размещать здесь свое собственное статическое содержимое. Сюда помещаются изображения, веб-шрифты, сторонние CSS-библиотеки, иконки и т.д. Как правило, здесь размещаются файлы, на которые никогда не будет ссылаться ваш код, например manifest.json, favicon.ico, robots.txt и т.д.

  • src

Здесь мы будем размещать наш JavaScript, динамический CSS, компоненты и т.д. Внутри неё распологаются:

  • Папка assets с SVG-файлом. В эту папку мы можем включить файлы, с которыми будет работать либо код, либо сборщик. Вы можете импортировать их непосредственно в код, а сборщик позаботится об их корректном отображении при передаче на веб-сервер.
  • Папка components, в которую мы поместим наши однофайловые компоненты (SFC) с расширением .vue. Здесь мы можем создать структуру каталогов по своему усмотрению. Здесь размещен компонент HelloWorld.vue.
  • Файл App.vue. Это основной компонент нашего приложения и корневой компонент нашей иерархии. Его принято называть именно так.
  • Файл main.js, который является начальной точкой нашего приложения. Он отвечает за загрузку начальных зависимостей, главного компонента (App.vue), создание приложения Vue 3 со всеми дополнительными функциями (плагины, глобальные директивы и компоненты), а также запуск и установку приложения на веб-страницу.
  • Файл styles.css, представляющий собой глобальную таблицу стилей, которая будет применяться ко всему нашему приложению. В предыдущих версиях инструмента создания структуры проекта его размещали в папке assets, но теперь он переместился в корень src/, заняв более значимое место. Этот файл при импорте в файл main.js будет разобран и объединен с нашим JavaScript.

Настало время исследовать файлы в корне проекта в том же порядке, в котором они появляются:

  • .gitignore - это файл, который управляет тем, что исключается из контроля исходных текстов Git. Мы познакомимся с Git-ом в главе 9, Тестирование и контроль исходных текстов.
  • index.html - это главный файл и отправная точка нашего веб-приложения. Пакет будет обращаться к другим файлам и обрабатывать их в порядке их появления, начиная с index.html. Вы можете изменить его в соответствии со своими потребностями, так как сгенерированный файл является достаточно базовым. Обратите внимание, что в конце тега body инструмент включен тег script для загрузки нашего файла main.js. Именно этот файл создает наше приложение Vue. В отличие от других сборщиков, которые автоматически генерируют этот файл и затем внедряют его в index.html, Vite требует, чтобы он был импортирован явно. Помимо прочих преимуществ, это позволяет контролировать, когда приложение Vue будет загружаться внутри веб-страницы.
  • package-lock.json используется npm для управления зависимостями в node_modules. Игнорируйте его.
  • package.json очень важен. Этот файл определяет проект, отслеживает зависимости для разработки и производства, а также предоставляет некоторые приятные возможности, например, автоматизацию некоторых задач с помощью простых команд. На данный момент интерес представляет секция scripts, в которой задаются простые псевдонимы для команд. Мы можем запускать их из командной строки, набрав npm run <имя скрипта>. Также уже подготовлены для нас три команды Vite:
  • npm run dev: Это запустит сайт в режиме разработчика, с локальным сервером и живой перезагрузкой (hot reload).
  • npm run build: Это позволит собрать наш код в пакет и оптимизировать его для создания готовой продакшен версии.
  • npm run preview: Это промежуточный вариант между двумя предыдущими. Он позволяет локально увидеть собранную версию, готовую к производству. Это может показаться непонятным, если не учитывать, что в процессе разработки адреса и ресурсы, к которым обращается приложение, а также публичный URL, могут отличаться от тех, что используются в производстве. Эта опция позволяет запускать приложение локально, но при этом ссылаться на производственные конечные точки и ресурсы и использовать их. Рекомендуется запускать "предварительный просмотр" перед развертыванием вашего приложения.
  • vite.config.js - это конфигурационный файл, определяющий поведение Vite во время разработки и при сборке для производства. Некоторые из наиболее важных и распространенных опций мы рассмотрим далее в этой главе.

Теперь, когда мы имеем более четкое представление о том, что нам дал инструмент Vite scaffolding, самое время приступить к созданию нашего примера приложения. Прежде чем углубиться в код, необходимо рассмотреть еще несколько вопросов: как интегрировать сторонние таблицы стилей и CSS-фреймворки, а также некоторые конфигурации Vite, которые облегчат нам жизнь.

Интеграция с CSS-фреймворками

Если вспомнить три последних принципа, рассмотренных в главе 2, Принципы и паттерны проектирования программного обеспечения, (не повторяться, сохранять чистоту и код для следующего), то изобретать велосипед в вопросах внешнего вида и графического языка - вещь в большинстве случаев нежелательная.

В Интернете существует постоянно растущая коллекция CSS-фреймворков и библиотек, которые мы можем легко внедрять в наши приложения. От старого популярного Bootstrap до атомарного дизайна, от утилитарных классов, таких как Tailwind, до графических языков, таких как Material Design и skeuomorphism - спектр возможностей огромен.

В Vue уже имеется достаточное количество библиотек компонентов, реализующих некоторые из них, которые можно найти в репозиториях npm. Используя их, вы будете ограничены в изучении и применении соглашений, применяемых дизайнером, которые в некоторых случаях могут полностью определять, как вы можете построить свой пользовательский интерфейс. Типичными примерами являются использование Vue-material (и других), соответствующих спецификациям Material Design от Google, или применение веб-шрифтов и шрифтов-иконок.

Невозможно рассказать о каждом из них, но здесь приведены рекомендации и некоторые примеры включения этих библиотек в ваш проект:

  1. Поместите статические активы, предоставляемые фреймворком или библиотекой, в папку public, следуя их требуемой структуре и соблюдая любую структуру дерева.
  2. Включите зависимости для CSS-фреймворка или библиотек в файл index.html, следуя их инструкциям. Часто это подразумевает импорт таблиц стилей и файлов JavaScript в раздел head или в тег body. В любом случае убедитесь, что они размещены до загрузки нашего приложения (тег script, ссылающийся на наш файл main.js).
  3. Если фреймворк или библиотеку необходимо инстанцировать, сделайте это до того, как мы смонтируем наше приложение. Это можно сделать непосредственно в index.html в теге script, в main.js или в другом модуле.
  4. Используйте классы (и JavaScript-функции) в секции шаблона вашего компонента обычным образом, как и в обычном HTML, используя эти библиотеки. Некоторые фреймворки создают глобальные объекты JavaScript, привязанные к объекту window, поэтому к ним можно обращаться непосредственно в секции script компонента. Если это не так, рассмотрите возможность инкапсуляции функциональности, чтобы использовать ее в своем приложении, используя паттерны проектирования, такие как синглтон, прокси или декоратор.

А теперь давайте применим эти простые инструкции на примере нашего проекта. Мы включим в него фреймворк, работающий только на CSS (это означает, что он не использует дополнительный JavaScript), а значки шрифтов будут включать базовую иконографию. В промышленной сборке мы должны удалить неиспользуемые правила CSS. Некоторые CSS-фреймворки предоставляют эту возможность из коробки, например, Tailwind. Однако эта тема выходит за рамки данной книги, но ее можно изучить в Интернете.

Фреймворк w3.css

На сайте w3schools.com предлагается бесплатный CSS фреймворк, частично основанный на языке Material Design, популярном в Google и используемом во многих мобильных приложениях. Он предлагает множество полезных классов, которые можно без лицензии применять в своих приложениях. Более подробную информацию можно найти на официальном сайте: https://www.w3schools.com/w3css/.

Мы будем следовать рекомендациям, указанным ранее, поэтому давайте выполним следующие шаги:

  1. Скачайте файл w3.css с сайта https://www.w3schools.com/w3css/w3css_downloads.asp и поместите его в новую папку с именем css в каталоге public. По окончании работы он должен выглядеть следующим образом:

image

Рисунок 3.4 - Расположение файла w3.css

  1. Модифицируем index.html в корне нашего проекта, добавив ссылку на файл w3.css с помощью тега link следующим образом:
html
<link rel="stylesheet" href="/css/w3.css">

Таким образом, классы, определенные в CSS-файле, теперь готовы к использованию в шаблонах нашего компонента. Также, чтобы избежать нежелательных стилей при начальном развертывании приложения, не забудьте очистить файл styles.css, предоставляемый программой установки. Если теперь запустить сервер разработки с помощью команды npm run dev, то мы увидим, что внешний вид сайта немного изменился, так как новая таблица стилей была успешно применена.

Следующим шагом будет добавление шрифта icon.

FontAwesome - это просто замечательно

Одним из способов экономии ресурсов разработчиков при работе с множеством значков является использование шрифтовых иконок. Это файлы шрифтов, в которых вместо символов отображаются значки. Эта концепция не нова, но она находит широкое применение в веб-разработке.

Использование шрифтов для иконок в отличие от других приемов (например, спрайтовых листов CSS) имеет массу преимуществ. Одним из наиболее значимых является то, что с такими иконками можно работать так же, как и с обычными шрифтами, поэтому мы можем легко изменять их размер, цвет и т.д., сохраняя при этом согласованность с остальным текстом. Но не все так радужно и счастливо, поскольку теперь основной компромисс заключается в том, что эти значки отображаются только одним или максимум двумя цветами и по необходимости должны быть довольно простыми.

FontAwesome - это сайт, предлагающий шрифты-иконки для использования в наших приложениях, как веб, так и десктопных. Он занимается этим уже много лет и располагает одними из лучших коллекций иконок. Мы можем скачать и использовать его бесплатный уровень для нашего проекта. Давайте еще раз проследим за тем, как их использовать в нашем проекте:

  1. Скачайте шрифты для web с сайта https://fontawesome.com/download. При этом будет загружен довольно большой ZIP-файл со всеми различными вариантами.

  2. Из ZIP-файла скопируйте директории css/ и webfonts/ как есть, в нашу папку public/. Мы не будем использовать все, что находится в этой папке, в наших проектах, поэтому то, что мы не используем, можно будет удалить позже.

  3. Редактируем файл index.html, чтобы добавить таблицы стилей, которые мы будем использовать. Эти CSS-файлы будут автоматически загружать шрифты иконок из папки /webfonts/:

html
<link rel="stylesheet" href="/css/fontawesome.min.css">
 <link rel="stylesheet" href="/css/solid.min.css">
 <link rel="stylesheet" href="/css/brands.min.css">

Вот и все, что нам нужно сделать, чтобы включить FontAwesome в наш проект. Существуют и другие альтернативы, которые инкапсулируют шрифты в компоненты Vue, и даже веб-сайт предоставляет реализацию Vue. Однако для наших целей в этой книге мы будем использовать прямой подход. Если мы откроем раздел "Значки" на сайте, то сможем просмотреть и найти все доступные значки. Можно ограничить поиск значками "solid" и "brands", поскольку именно их мы включили в наш проект. Например, если необходимо отобразить значок Vue с помощью FontAwesome, мы можем включить в наш шаблон следующее:

html
<i class="fa-brands fa-vuejs"></i>

Эти классы делают всю магию в любом пустом элементе, но по традиции и для удобства мы всегда используем тег i. Более того, их даже не нужно вводить. Как только вы найдете нужный значок, на сайте появится удобная функция "нажать и скопировать" код. Предыдущая строка взята отсюда:

image

Рисунок 3.5 - Страница иконок FontAwesome.

Следует помнить, что включение большой библиотеки иконок при использовании лишь некоторых из них скажется на производительности. Для производственных сборок следует включать только те значки, которые будут использоваться в приложении, создавая шрифты значков только с необходимыми значками. Для целей нашей книги и во время разработки мы можем пропустить эту практику.

Получив хорошую таблицу стилей и несколько хороших шрифтов иконок, мы почти готовы приступить к написанию кода. Осталось сделать еще одну вещь - включить несколько дополнительных опций в конфигурацию Vite.

Опции конфигурации Vite

Файл vite.config.js экспортирует конфигурацию, которую Vite будет использовать для разработки, а также для производства. Vite был задуман как функциональный инструмент для различных фреймворков, а не только для Vue 3, хотя он и является официальным сборщиком для него. Открыв файл, мы видим, что Vue является плагином для Vite. Внутри Vite использует Rollup.js https://www.rollupjs.org/ и esbuild https://esbuild.github.io/, соответственно, для разработки и сборки.

Это означает, что мы можем передавать опции в Vite, но также иметь еще более тонкий контроль над некоторыми крайними случаями, передавая аргументы этим двум инструментам. Кроме того, для каждого режима обработки (разработка и сборка) можно передавать различные конфигурации, так что без вариантов здесь не обойтись.

Некоторые специфические конфигурации для развертывания мы рассмотрим в главе 10, Развертывание приложения, а пока мы сосредоточимся только на части разработки с несколькими дополнениями, чтобы не набирать слишком много текста и не повторяться в коде.

Откройте файл vite.config.js и добавьте следующий импорт:

js
import path from "path"

Да, импортирование path - это не JavaScript, а Node.js, и мы можем это сделать, потому что этот файл читается и выполняется в контексте Node.js. Он никогда не попадет в браузер или какой-либо JavaScript контекст.

Измените конфигурацию экспорта так, чтобы она выглядела следующим образом:

js
export default defineConfig({
     plugins: [vue()],
diff --git a/assets/ru_book_Chapter_3__Setting_Up_a_Working_Project.md.C4QXibPE.lean.js b/assets/ru_book_Chapter_3__Setting_Up_a_Working_Project.md.BSizAlHy.lean.js
similarity index 94%
rename from assets/ru_book_Chapter_3__Setting_Up_a_Working_Project.md.C4QXibPE.lean.js
rename to assets/ru_book_Chapter_3__Setting_Up_a_Working_Project.md.BSizAlHy.lean.js
index d6aa5c432..34a2f5d39 100644
--- a/assets/ru_book_Chapter_3__Setting_Up_a_Working_Project.md.C4QXibPE.lean.js
+++ b/assets/ru_book_Chapter_3__Setting_Up_a_Working_Project.md.BSizAlHy.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/Figure_3.01_B18602.B6cX8FQX.jpg",l="/assets/Figure_3.02_B18602.CPUnoM0M.jpg",p="/assets/Figure_3.03_B18602.TtGZDytf.jpg",h="/assets/Figure_3.04_B18602.B8-plar-.jpg",e="/assets/Figure_3.05_B18602.DUf8RQhy.jpg",k="/assets/Figure_3.06_B18602.CPb3WeTL.jpg",v=JSON.parse('{"title":"Установка рабочего проекта","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_3__Setting_Up_a_Working_Project.md","filePath":"ru/book/Chapter_3__Setting_Up_a_Working_Project.md","lastUpdated":1726474804000}'),r={name:"ru/book/Chapter_3__Setting_Up_a_Working_Project.md"},o=t("",154),g=[o];function E(d,c,y,u,F,m){return i(),a("div",null,g)}const b=s(r,[["render",E]]);export{v as __pageData,b as default};
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/Figure_3.01_B18602.B6cX8FQX.jpg",l="/assets/Figure_3.02_B18602.CPUnoM0M.jpg",p="/assets/Figure_3.03_B18602.TtGZDytf.jpg",h="/assets/Figure_3.04_B18602.B8-plar-.jpg",e="/assets/Figure_3.05_B18602.DUf8RQhy.jpg",k="/assets/Figure_3.06_B18602.CPb3WeTL.jpg",v=JSON.parse('{"title":"Установка рабочего проекта","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_3__Setting_Up_a_Working_Project.md","filePath":"ru/book/Chapter_3__Setting_Up_a_Working_Project.md","lastUpdated":1726505115000}'),r={name:"ru/book/Chapter_3__Setting_Up_a_Working_Project.md"},o=t("",154),g=[o];function E(d,c,y,u,F,m){return i(),a("div",null,g)}const b=s(r,[["render",E]]);export{v as __pageData,b as default};
diff --git a/assets/ru_book_Chapter_4__User_Interface_Composition_with_Components.md.Dvh9tllT.js b/assets/ru_book_Chapter_4__User_Interface_Composition_with_Components.md.CmT3wms-.js
similarity index 99%
rename from assets/ru_book_Chapter_4__User_Interface_Composition_with_Components.md.Dvh9tllT.js
rename to assets/ru_book_Chapter_4__User_Interface_Composition_with_Components.md.CmT3wms-.js
index 19fc389a9..8c5750ec6 100644
--- a/assets/ru_book_Chapter_4__User_Interface_Composition_with_Components.md.Dvh9tllT.js
+++ b/assets/ru_book_Chapter_4__User_Interface_Composition_with_Components.md.CmT3wms-.js
@@ -1,4 +1,4 @@
-import{_ as p,o as l,c as h,l as s,a as i,r as n,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const e="/assets/Figure_4.01_B18602.BI9tyskI.jpg",k="/assets/Figure_4.02_B18602.BLS4THRc.jpg",r="/assets/Figure_4.03_B18602.CLUTlSZf.jpg",o="/assets/Figure_4.04_B18602.CRzdZsg2.jpg",E="/assets/Figure_4.05_B18602.VhCHjdcr.jpg",g="/assets/Figure_4.06_B18602.DZVpIxf6.jpg",d="/assets/Figure_4.07_B18602.DyFAYg10.jpg",j=JSON.parse('{"title":"Композиция пользовательского интерфейса с помощью компонентов","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_4__User_Interface_Composition_with_Components.md","filePath":"ru/book/Chapter_4__User_Interface_Composition_with_Components.md","lastUpdated":1726474804000}'),y={name:"ru/book/Chapter_4__User_Interface_Composition_with_Components.md"},c=a('

Композиция пользовательского интерфейса с помощью компонентов

В этой главе мы подробно рассмотрим, как строить пользовательские интерфейсы с помощью компонентов. Хотя мы могли бы просто создать всю веб-страницу с помощью одного компонента, как мы это сделали с нашим начальным приложением Список дел в главе 3, Установка рабочего проекта, такой подход не является хорошей практикой, за исключением простых приложений, частичного переноса функциональности в существующих веб-приложениях или некоторых крайних случаев, когда другого варианта быть не может.

Компоненты занимают центральное место в подходе Vue к построению интерфейсов.

В этой главе мы сделаем следующее:

  • Узнаем, как строить пользовательские интерфейсы с помощью иерархии компонентов
  • Познакомимся с различными способами взаимодействия и связи компонентов друг с другом
  • Рассмотрим специальные и пользовательские компоненты
  • Создать пример плагина с применением шаблонов проектирования
  • Перепишите наше приложение для выполнения дел, используя наш плагин и композицию компонентов

В этой главе мы познакомимся с основными и расширенными концепциями и получим инструменты для создания надежных веб-приложений с многократно используемыми компонентами. В частности, мы применим наши знания о шаблонах проектирования из главы 2, Принципы и шаблоны проектирования программного обеспечения, при реализации кода.

Примечание о стилях

Чтобы избежать длинных текстов кода, мы опустим примеры иконок и стилей в примерах кода. Полный код, а также стили и иконки можно найти в репозитории GitHub этой книги по адресу https://github.com/PacktPublishing/Vue.js-3-Design-Patterns-and-Best-Practices.

Технические требования

Требования к выполнению этой главы такие же, как и в главе 3, Установка рабочего проекта.

Посмотрите следующее видео, чтобы увидеть код в действии.

Файлы кода этой главы можно найти на GitHub здесь.

Составление страницы с помощью компонентов

Для создания пользовательского интерфейса необходимо иметь отправную точку, будь то грубый набросок или фантазийный полноценный дизайн. Графический дизайн веб-приложения выходит за рамки данной книги, поэтому мы будем считать, что он уже создан. Чтобы воплотить дизайн в компоненты, мы можем подойти к этому как к процессу, который отвечает на следующие вопросы:

  1. Как мы можем представить макет и множество элементов с помощью компонентов?
  2. Как эти компоненты будут взаимодействовать друг с другом и связаны между собой?
  3. Какие динамические элементы будут входить и выходить из сцены, и какие события или состояния приложения будут их вызывать?
  4. Какие шаблоны проектирования мы можем применить, чтобы наилучшим образом удовлетворить требованиям данного сценария использования, учитывая компромиссы?

Vue 3 специально подходит для создания динамичных, интерактивных интерфейсов. Эти вопросы приводят нас к повторяемому подходу к реализации. Итак, давайте определим общий процесс с четко определенными этапами, шаг за шагом.

Этап 1 - определение макетов и элементов пользовательского интерфейса

Этот этап отвечает на вопрос: Как мы можем представить макет и множество элементов с помощью компонентов?

Мы возьмем страницу в целом и подумаем, какой макет подходит лучше всего, учитывая дизайн. Следует ли использовать колонки? Разделы? Навигационные меню? Острова контента? Есть ли диалоговые или модальные окна? Простой подход заключается в том, чтобы взять изображение дизайна и обозначить прямоугольниками участки, которые могут представлять собой компоненты, начиная с самого большого и заканчивая наименьшей единицей интерактивности. Итерируйте эту нарезку страницы до тех пор, пока не получите комфортное количество компонентов. Если рассматривать новый дизайн приложения To-Do, то этот шаг может выглядеть следующим образом:

image

Рисунок 4.1 - Разбивка конструкции на компоненты с пунктирными рамками

После того как мы определили компоненты, необходимо выявить связи между ними, создав иерархию от самого верхнего корневого компонента (обычно это наш App.vue). Новые компоненты могут появиться в результате группировки компонентов по контексту или функциональности. Это подходящее время для присвоения имен компонентам. Эта начальная архитектура будет развиваться по мере реализации шаблонов проектирования. В соответствии с этим примером иерархия может выглядеть следующим образом:

image

Рисунок 4.2 - Начальный подход к иерархии компонентов

Заметьте, как из группировки других компонентов появился новый компонент ToDoProject.vue. Компонент App обычно имеет дело с основным макетом приложения и является отправной точкой в иерархии. Теперь, когда мы создали первоначальный дизайн, пора переходить к следующему шагу.

Шаг 2 - определение связей, потока данных, взаимодействий и событий

Этот шаг отвечает на вопрос: Как эти компоненты будут взаимодействовать и относиться друг к другу?

На этом этапе нам необходимо понять, как будет взаимодействовать пользователь (с помощью use-case нотаций, user story или чем-то еще). Для каждого компонента мы решаем, какую информацию он будет хранить (состояние), что будет передавать своим дочерним компонентам, что ему нужно от родителя и какие события он будет вызывать.

Во Vue компоненты могут соотноситься друг с другом только по вертикали. Братья и сестры по большей части игнорируют существование друг друга. Если компоненту-сиблингу необходимо поделиться данными с другим компонентом, то эти данные должны быть размещены у общей третьей стороны, которая может поделиться ими с обоими компонентами, обычно это родитель, который имеет общую видимость. Для этого существуют и другие решения, например, реактивное управление состоянием, которое мы подробно рассмотрим в главе 7, Управление потоками данных. В этой главе мы остановимся на базовой функциональности отношений.

Существует множество способов документирования собранной информации: заметки в дереве иерархии (см. Рисунок 4.2), описательная формальная документация, UML-диаграммы (UML означает Universal Modeling Language, иконографическое представление компонентов программного обеспечения) и многое другое. Для простоты запишем только один сегмент дерева в формате таблицы:

КомпонентФункцияСостояние, ввод/вывод, события
ToDoProject.vueСодержит список дел и координирует взаимодействие с пользователем. Этот компонент будет активно изменять элементы.Состояние: Список дел

События: Открытие новых, редактирование и удаление модалов.
ToDoSummary.vueОтображает суммарный подсчет элементов дел по состоянию.Ввод: Список дел

Состояние: Счетчики для каждого состояния элемента
ToDoFilter.vueСобирает строку для фильтрации списка дел.Выход: Строка фильтра

Состояние: Вспомогательная переменная
ToDoList.vueОтображает список дел и сигнальные операции для каждого из них.Входные данные: Список дел, строка фильтра

События: Переключение состояния элемента, редактирование и удаление элемента.

Для краткости я опустил компоненты и взаимодействия, которые будут составлять пользовательские диалоги. Мы увидим их позже в этой главе, но достаточно сказать, что за управление взаимодействием с помощью модальных диалогов отвечает ToDoProject.vue.

Шаг 3 - определение элементов пользовательской интерактивности (входов, диалогов, уведомлений и т.д.)

Этот шаг отвечает на вопрос: Какие динамические элементы будут выходить на сцену или покидать ее, и какие события или состояния приложения будут их вызывать?

В нашем приложении основные CRUD-операции (CRUD расшифровывается как Create, Read, Update, Delete данных) связаны с использованием модальных диалогов, представляемых пользователю. Как уже говорилось, именно компонент ToDoProject.vue управляет этим взаимодействием в ответ на определенные события. Этот процесс проиллюстрирован на данной диаграмме последовательности:

image

Рисунок 4.3 - Взаимодействие пользователя через модалы - редактирование элемента.

На этой диаграмме компонент ToDoProject разделяет список дел с компонентом ToDoList. Когда пользователь вызывает событие edit, дочерний компонент уведомляет родительский, испуская такое событие. После этого родительский компонент создает копию элемента и открывает модальный диалог, передавая ему эту копию.

Когда диалог принят, родитель модифицирует исходный элемент с учетом изменений. Затем реактивность Vue отражает изменение состояния в дочерних компонентах.

Зачастую такое взаимодействие помогает нам выявить необходимость в дополнительных компонентах, которые не были очевидны в шаге 1, например, в реализации шаблонов проектирования... что является следующим шагом.

Шаг 4 - выявление шаблонов проектирования и компромиссов

Этот шаг отвечает на вопрос: Какие шаблоны проектирования мы можем применить, чтобы наилучшим образом удовлетворить требованиям конкретного случая использования, с учетом компромиссов?

Решение вопроса о том, какие шаблоны использовать, может быть очень творческим процессом. Не существует "серебряной пули", и несколько решений могут дать разные результаты. Обычно создается несколько прототипов для тестирования различных подходов.

В нашем новом приложении мы ввели концепцию модальных диалогов для получения пользовательского ввода. Модальные диалоги используются в тех случаях, когда для выполнения операции требуется действие или решение пользователя. Пользователь может принять или отклонить диалог и не может взаимодействовать с другими частями приложения до тех пор, пока не примет решение.

Учитывая эти условия, одним из возможных шаблонов для применения является шаблон Async Promise.

В нашем коде мы хотим открыть модальный диалог в виде промиса, который, по определению, предоставит нам функцию resolve() (принять) или reject() (отменить). Более того, мы хотим иметь возможность использовать это решение в нескольких проектах и глобально в нашем приложении. Для этого мы можем создать плагин и использовать шаблон инъекции зависимостей для доступа к модальной функциональности из любого компонента. Эти шаблоны обеспечат нам решение, необходимое для того, чтобы сделать наш модальный диалог многократно используемым.

На данном этапе мы практически готовы приступить к концептуальной реализации компонентов. Однако, чтобы создать наиболее подходящее и надежное приложение и реализовать вышеупомянутые шаблоны, нам следует уделить время более подробному изучению компонентов Vue.

Компоненты в деталях

Компоненты - это строительные блоки фреймворка. В главе 1, Фреймворк Vue 3, мы рассмотрели, как работать с компонентами, объявлять реактивные переменные и многое другое. В этом разделе мы рассмотрим более продвинутые возможности и определения.

Локальные и глобальные компоненты

При запуске нашего приложения Vue 3 мы монтируем главный компонент (App.vue) к элементу HTML в файле main.js. После этого в секции script каждого компонента мы можем импортировать другие компоненты для локального использования с помощью следующей команды:

js
import MyComponent from "./MyComponent.vue"

Таким образом, чтобы использовать MyComponent в другом компоненте, нам необходимо импортировать его в этот компонент еще раз. Если один компонент постоянно используется в нескольких компонентах, то это повторяющееся действие нарушает принцип DRY разработки (см. главу 2, Принципы и шаблоны проектирования программного обеспечения).

Альтернативный вариант - объявить компонент как глобальный, прикрепив его непосредственно к нашему приложению Vue вместо каждого компонента. В файле main.js мы можем использовать метод App.component() для этого случая:

Main.js

js
import { createApp } from "vue"
+import{_ as p,o as l,c as h,l as s,a as i,r as n,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const e="/assets/Figure_4.01_B18602.BI9tyskI.jpg",k="/assets/Figure_4.02_B18602.BLS4THRc.jpg",r="/assets/Figure_4.03_B18602.CLUTlSZf.jpg",o="/assets/Figure_4.04_B18602.CRzdZsg2.jpg",E="/assets/Figure_4.05_B18602.VhCHjdcr.jpg",g="/assets/Figure_4.06_B18602.DZVpIxf6.jpg",d="/assets/Figure_4.07_B18602.DyFAYg10.jpg",j=JSON.parse('{"title":"Композиция пользовательского интерфейса с помощью компонентов","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_4__User_Interface_Composition_with_Components.md","filePath":"ru/book/Chapter_4__User_Interface_Composition_with_Components.md","lastUpdated":1726505115000}'),y={name:"ru/book/Chapter_4__User_Interface_Composition_with_Components.md"},c=a('

Композиция пользовательского интерфейса с помощью компонентов

В этой главе мы подробно рассмотрим, как строить пользовательские интерфейсы с помощью компонентов. Хотя мы могли бы просто создать всю веб-страницу с помощью одного компонента, как мы это сделали с нашим начальным приложением Список дел в главе 3, Установка рабочего проекта, такой подход не является хорошей практикой, за исключением простых приложений, частичного переноса функциональности в существующих веб-приложениях или некоторых крайних случаев, когда другого варианта быть не может.

Компоненты занимают центральное место в подходе Vue к построению интерфейсов.

В этой главе мы сделаем следующее:

  • Узнаем, как строить пользовательские интерфейсы с помощью иерархии компонентов
  • Познакомимся с различными способами взаимодействия и связи компонентов друг с другом
  • Рассмотрим специальные и пользовательские компоненты
  • Создать пример плагина с применением шаблонов проектирования
  • Перепишите наше приложение для выполнения дел, используя наш плагин и композицию компонентов

В этой главе мы познакомимся с основными и расширенными концепциями и получим инструменты для создания надежных веб-приложений с многократно используемыми компонентами. В частности, мы применим наши знания о шаблонах проектирования из главы 2, Принципы и шаблоны проектирования программного обеспечения, при реализации кода.

Примечание о стилях

Чтобы избежать длинных текстов кода, мы опустим примеры иконок и стилей в примерах кода. Полный код, а также стили и иконки можно найти в репозитории GitHub этой книги по адресу https://github.com/PacktPublishing/Vue.js-3-Design-Patterns-and-Best-Practices.

Технические требования

Требования к выполнению этой главы такие же, как и в главе 3, Установка рабочего проекта.

Посмотрите следующее видео, чтобы увидеть код в действии.

Файлы кода этой главы можно найти на GitHub здесь.

Составление страницы с помощью компонентов

Для создания пользовательского интерфейса необходимо иметь отправную точку, будь то грубый набросок или фантазийный полноценный дизайн. Графический дизайн веб-приложения выходит за рамки данной книги, поэтому мы будем считать, что он уже создан. Чтобы воплотить дизайн в компоненты, мы можем подойти к этому как к процессу, который отвечает на следующие вопросы:

  1. Как мы можем представить макет и множество элементов с помощью компонентов?
  2. Как эти компоненты будут взаимодействовать друг с другом и связаны между собой?
  3. Какие динамические элементы будут входить и выходить из сцены, и какие события или состояния приложения будут их вызывать?
  4. Какие шаблоны проектирования мы можем применить, чтобы наилучшим образом удовлетворить требованиям данного сценария использования, учитывая компромиссы?

Vue 3 специально подходит для создания динамичных, интерактивных интерфейсов. Эти вопросы приводят нас к повторяемому подходу к реализации. Итак, давайте определим общий процесс с четко определенными этапами, шаг за шагом.

Этап 1 - определение макетов и элементов пользовательского интерфейса

Этот этап отвечает на вопрос: Как мы можем представить макет и множество элементов с помощью компонентов?

Мы возьмем страницу в целом и подумаем, какой макет подходит лучше всего, учитывая дизайн. Следует ли использовать колонки? Разделы? Навигационные меню? Острова контента? Есть ли диалоговые или модальные окна? Простой подход заключается в том, чтобы взять изображение дизайна и обозначить прямоугольниками участки, которые могут представлять собой компоненты, начиная с самого большого и заканчивая наименьшей единицей интерактивности. Итерируйте эту нарезку страницы до тех пор, пока не получите комфортное количество компонентов. Если рассматривать новый дизайн приложения To-Do, то этот шаг может выглядеть следующим образом:

image

Рисунок 4.1 - Разбивка конструкции на компоненты с пунктирными рамками

После того как мы определили компоненты, необходимо выявить связи между ними, создав иерархию от самого верхнего корневого компонента (обычно это наш App.vue). Новые компоненты могут появиться в результате группировки компонентов по контексту или функциональности. Это подходящее время для присвоения имен компонентам. Эта начальная архитектура будет развиваться по мере реализации шаблонов проектирования. В соответствии с этим примером иерархия может выглядеть следующим образом:

image

Рисунок 4.2 - Начальный подход к иерархии компонентов

Заметьте, как из группировки других компонентов появился новый компонент ToDoProject.vue. Компонент App обычно имеет дело с основным макетом приложения и является отправной точкой в иерархии. Теперь, когда мы создали первоначальный дизайн, пора переходить к следующему шагу.

Шаг 2 - определение связей, потока данных, взаимодействий и событий

Этот шаг отвечает на вопрос: Как эти компоненты будут взаимодействовать и относиться друг к другу?

На этом этапе нам необходимо понять, как будет взаимодействовать пользователь (с помощью use-case нотаций, user story или чем-то еще). Для каждого компонента мы решаем, какую информацию он будет хранить (состояние), что будет передавать своим дочерним компонентам, что ему нужно от родителя и какие события он будет вызывать.

Во Vue компоненты могут соотноситься друг с другом только по вертикали. Братья и сестры по большей части игнорируют существование друг друга. Если компоненту-сиблингу необходимо поделиться данными с другим компонентом, то эти данные должны быть размещены у общей третьей стороны, которая может поделиться ими с обоими компонентами, обычно это родитель, который имеет общую видимость. Для этого существуют и другие решения, например, реактивное управление состоянием, которое мы подробно рассмотрим в главе 7, Управление потоками данных. В этой главе мы остановимся на базовой функциональности отношений.

Существует множество способов документирования собранной информации: заметки в дереве иерархии (см. Рисунок 4.2), описательная формальная документация, UML-диаграммы (UML означает Universal Modeling Language, иконографическое представление компонентов программного обеспечения) и многое другое. Для простоты запишем только один сегмент дерева в формате таблицы:

КомпонентФункцияСостояние, ввод/вывод, события
ToDoProject.vueСодержит список дел и координирует взаимодействие с пользователем. Этот компонент будет активно изменять элементы.Состояние: Список дел

События: Открытие новых, редактирование и удаление модалов.
ToDoSummary.vueОтображает суммарный подсчет элементов дел по состоянию.Ввод: Список дел

Состояние: Счетчики для каждого состояния элемента
ToDoFilter.vueСобирает строку для фильтрации списка дел.Выход: Строка фильтра

Состояние: Вспомогательная переменная
ToDoList.vueОтображает список дел и сигнальные операции для каждого из них.Входные данные: Список дел, строка фильтра

События: Переключение состояния элемента, редактирование и удаление элемента.

Для краткости я опустил компоненты и взаимодействия, которые будут составлять пользовательские диалоги. Мы увидим их позже в этой главе, но достаточно сказать, что за управление взаимодействием с помощью модальных диалогов отвечает ToDoProject.vue.

Шаг 3 - определение элементов пользовательской интерактивности (входов, диалогов, уведомлений и т.д.)

Этот шаг отвечает на вопрос: Какие динамические элементы будут выходить на сцену или покидать ее, и какие события или состояния приложения будут их вызывать?

В нашем приложении основные CRUD-операции (CRUD расшифровывается как Create, Read, Update, Delete данных) связаны с использованием модальных диалогов, представляемых пользователю. Как уже говорилось, именно компонент ToDoProject.vue управляет этим взаимодействием в ответ на определенные события. Этот процесс проиллюстрирован на данной диаграмме последовательности:

image

Рисунок 4.3 - Взаимодействие пользователя через модалы - редактирование элемента.

На этой диаграмме компонент ToDoProject разделяет список дел с компонентом ToDoList. Когда пользователь вызывает событие edit, дочерний компонент уведомляет родительский, испуская такое событие. После этого родительский компонент создает копию элемента и открывает модальный диалог, передавая ему эту копию.

Когда диалог принят, родитель модифицирует исходный элемент с учетом изменений. Затем реактивность Vue отражает изменение состояния в дочерних компонентах.

Зачастую такое взаимодействие помогает нам выявить необходимость в дополнительных компонентах, которые не были очевидны в шаге 1, например, в реализации шаблонов проектирования... что является следующим шагом.

Шаг 4 - выявление шаблонов проектирования и компромиссов

Этот шаг отвечает на вопрос: Какие шаблоны проектирования мы можем применить, чтобы наилучшим образом удовлетворить требованиям конкретного случая использования, с учетом компромиссов?

Решение вопроса о том, какие шаблоны использовать, может быть очень творческим процессом. Не существует "серебряной пули", и несколько решений могут дать разные результаты. Обычно создается несколько прототипов для тестирования различных подходов.

В нашем новом приложении мы ввели концепцию модальных диалогов для получения пользовательского ввода. Модальные диалоги используются в тех случаях, когда для выполнения операции требуется действие или решение пользователя. Пользователь может принять или отклонить диалог и не может взаимодействовать с другими частями приложения до тех пор, пока не примет решение.

Учитывая эти условия, одним из возможных шаблонов для применения является шаблон Async Promise.

В нашем коде мы хотим открыть модальный диалог в виде промиса, который, по определению, предоставит нам функцию resolve() (принять) или reject() (отменить). Более того, мы хотим иметь возможность использовать это решение в нескольких проектах и глобально в нашем приложении. Для этого мы можем создать плагин и использовать шаблон инъекции зависимостей для доступа к модальной функциональности из любого компонента. Эти шаблоны обеспечат нам решение, необходимое для того, чтобы сделать наш модальный диалог многократно используемым.

На данном этапе мы практически готовы приступить к концептуальной реализации компонентов. Однако, чтобы создать наиболее подходящее и надежное приложение и реализовать вышеупомянутые шаблоны, нам следует уделить время более подробному изучению компонентов Vue.

Компоненты в деталях

Компоненты - это строительные блоки фреймворка. В главе 1, Фреймворк Vue 3, мы рассмотрели, как работать с компонентами, объявлять реактивные переменные и многое другое. В этом разделе мы рассмотрим более продвинутые возможности и определения.

Локальные и глобальные компоненты

При запуске нашего приложения Vue 3 мы монтируем главный компонент (App.vue) к элементу HTML в файле main.js. После этого в секции script каждого компонента мы можем импортировать другие компоненты для локального использования с помощью следующей команды:

js
import MyComponent from "./MyComponent.vue"

Таким образом, чтобы использовать MyComponent в другом компоненте, нам необходимо импортировать его в этот компонент еще раз. Если один компонент постоянно используется в нескольких компонентах, то это повторяющееся действие нарушает принцип DRY разработки (см. главу 2, Принципы и шаблоны проектирования программного обеспечения).

Альтернативный вариант - объявить компонент как глобальный, прикрепив его непосредственно к нашему приложению Vue вместо каждого компонента. В файле main.js мы можем использовать метод App.component() для этого случая:

Main.js

js
import { createApp } from "vue"
 import App from './App.vue'
 import MyComponent from "./MyComponent.vue"
 createApp(App)
diff --git a/assets/ru_book_Chapter_4__User_Interface_Composition_with_Components.md.Dvh9tllT.lean.js b/assets/ru_book_Chapter_4__User_Interface_Composition_with_Components.md.CmT3wms-.lean.js
similarity index 97%
rename from assets/ru_book_Chapter_4__User_Interface_Composition_with_Components.md.Dvh9tllT.lean.js
rename to assets/ru_book_Chapter_4__User_Interface_Composition_with_Components.md.CmT3wms-.lean.js
index 6b9aa89a5..1a18c8834 100644
--- a/assets/ru_book_Chapter_4__User_Interface_Composition_with_Components.md.Dvh9tllT.lean.js
+++ b/assets/ru_book_Chapter_4__User_Interface_Composition_with_Components.md.CmT3wms-.lean.js
@@ -1 +1 @@
-import{_ as p,o as l,c as h,l as s,a as i,r as n,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const e="/assets/Figure_4.01_B18602.BI9tyskI.jpg",k="/assets/Figure_4.02_B18602.BLS4THRc.jpg",r="/assets/Figure_4.03_B18602.CLUTlSZf.jpg",o="/assets/Figure_4.04_B18602.CRzdZsg2.jpg",E="/assets/Figure_4.05_B18602.VhCHjdcr.jpg",g="/assets/Figure_4.06_B18602.DZVpIxf6.jpg",d="/assets/Figure_4.07_B18602.DyFAYg10.jpg",j=JSON.parse('{"title":"Композиция пользовательского интерфейса с помощью компонентов","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_4__User_Interface_Composition_with_Components.md","filePath":"ru/book/Chapter_4__User_Interface_Composition_with_Components.md","lastUpdated":1726474804000}'),y={name:"ru/book/Chapter_4__User_Interface_Composition_with_Components.md"},c=a("",141),u=s("strong",null,"W3.css",-1),F=a("",8),m=s("li",null,"Если имя не совпадает ни с одним доступным слотом, содержимое не выводится.",-1),C=s("li",null,[i("Если имя не указано или используется имя "),s("strong",null,"default"),i(", то содержимое отображается в безымянном слоте по умолчанию.")],-1),v=a("",107);function A(t,D,b,B,q,_){return l(),h("div",null,[c,s("p",null,[i("Применяемая логика достаточно проста. Слот "),s("strong",null,[n(t.$slots,"default")]),i(" во время выполнения программы будет заменен на содержимое, предоставленное родительским компонентом внутри дочерних тегов. В предыдущем примере, если проанализировать конечный HTML, можно обнаружить примерно следующее (учитывая, что мы используем классы "),u,i("):")]),F,s("ul",null,[m,C,s("li",null,[i("Если для шаблона не указано содержимое, то будут показаны элементы по умолчанию внутри определения слота. Содержимое по умолчанию помещается между тегами слотов: "),s("strong",null,[n(t.$slots,"default",{},()=>[i("...содержимое по умолчанию здесь...")])]),i(".")])]),v])}const P=p(y,[["render",A]]);export{j as __pageData,P as default};
+import{_ as p,o as l,c as h,l as s,a as i,r as n,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const e="/assets/Figure_4.01_B18602.BI9tyskI.jpg",k="/assets/Figure_4.02_B18602.BLS4THRc.jpg",r="/assets/Figure_4.03_B18602.CLUTlSZf.jpg",o="/assets/Figure_4.04_B18602.CRzdZsg2.jpg",E="/assets/Figure_4.05_B18602.VhCHjdcr.jpg",g="/assets/Figure_4.06_B18602.DZVpIxf6.jpg",d="/assets/Figure_4.07_B18602.DyFAYg10.jpg",j=JSON.parse('{"title":"Композиция пользовательского интерфейса с помощью компонентов","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_4__User_Interface_Composition_with_Components.md","filePath":"ru/book/Chapter_4__User_Interface_Composition_with_Components.md","lastUpdated":1726505115000}'),y={name:"ru/book/Chapter_4__User_Interface_Composition_with_Components.md"},c=a("",141),u=s("strong",null,"W3.css",-1),F=a("",8),m=s("li",null,"Если имя не совпадает ни с одним доступным слотом, содержимое не выводится.",-1),C=s("li",null,[i("Если имя не указано или используется имя "),s("strong",null,"default"),i(", то содержимое отображается в безымянном слоте по умолчанию.")],-1),v=a("",107);function A(t,D,b,B,q,_){return l(),h("div",null,[c,s("p",null,[i("Применяемая логика достаточно проста. Слот "),s("strong",null,[n(t.$slots,"default")]),i(" во время выполнения программы будет заменен на содержимое, предоставленное родительским компонентом внутри дочерних тегов. В предыдущем примере, если проанализировать конечный HTML, можно обнаружить примерно следующее (учитывая, что мы используем классы "),u,i("):")]),F,s("ul",null,[m,C,s("li",null,[i("Если для шаблона не указано содержимое, то будут показаны элементы по умолчанию внутри определения слота. Содержимое по умолчанию помещается между тегами слотов: "),s("strong",null,[n(t.$slots,"default",{},()=>[i("...содержимое по умолчанию здесь...")])]),i(".")])]),v])}const P=p(y,[["render",A]]);export{j as __pageData,P as default};
diff --git a/assets/ru_book_Chapter_5__Single-Page_Applications.md.C6XMJrBo.js b/assets/ru_book_Chapter_5__Single-Page_Applications.md.DSg6a7Pk.js
similarity index 99%
rename from assets/ru_book_Chapter_5__Single-Page_Applications.md.C6XMJrBo.js
rename to assets/ru_book_Chapter_5__Single-Page_Applications.md.DSg6a7Pk.js
index ecc93ab5b..3a46b912b 100644
--- a/assets/ru_book_Chapter_5__Single-Page_Applications.md.C6XMJrBo.js
+++ b/assets/ru_book_Chapter_5__Single-Page_Applications.md.DSg6a7Pk.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/Figure_5.01_B18602.CxFklVTK.jpg",p="/assets/Figure_5.02_B18602.DCixZ9eX.jpg",h="/assets/Figure_5.03_B18602.BzEXJ6zo.jpg",e="/assets/Figure_5.04_B18602.CoBRQSxy.jpg",l="/assets/Figure_5.05_B18602.DqYwnYye.jpg",k="/assets/Figure_5.06_B18602.CTZn3hwt.jpg",r="/assets/Figure_5.07_B18602.Cto6XFmp.jpg",o="/assets/Figure_5.08_B18602.DVLiKG2s.jpg",v=JSON.parse('{"title":"Одностраничные приложения","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_5__Single-Page_Applications.md","filePath":"ru/book/Chapter_5__Single-Page_Applications.md","lastUpdated":1726474804000}'),E={name:"ru/book/Chapter_5__Single-Page_Applications.md"},g=t('

Одностраничные приложения

В этой главе мы продолжаем совершенствовать свои навыки работы с Vue 3, знакомясь с одностраничными приложениями (SPA). Мы узнаем, что отличает их от обычных сайтов, и рассмотрим их ключевые характеристики.

Чтобы применить полученные знания на практике, мы создадим новую версию приложения To-Do с использованием маршрутизатора Vue Router и иной схемы взаимодействия, чем в предыдущих главах. Мы также изучим методы аутентификации на примерах кода.

К концу этой главы вы будете знать следующее:

  • Как создавать SPA с помощью Vue 3
  • Как организовать приложение для использования Vue Router с различными стратегиями маршрутизации
  • Как переделать наше приложение To-Do с практическим применением различных паттернов
  • Как реализовать различные паттерны аутентификации в SPA

Если предыдущая глава была несколько перегружена фундаментальными знаниями, то теперь мы больше сосредоточимся на практических вопросах. В связи с этим вам потребуется доступ к приложениям-примерам, чтобы разобраться с ними.

Технические требования

Код этой главы можно найти на GitHub по адресу https://github.com/PacktPublishing/Vue.js-3-Design-Patterns-and-Best-Practices/tree/main/Chapter05.

Посмотрите следующее видео, чтобы увидеть код в действии.

Что такое SPA?

Чтобы объяснить, что такое SPA, необходимо сначала объяснить, как мы взаимодействуем с World Wide Web (WWW или W3). Когда мы вводим адрес в веб-браузере, то получаем веб-страницу, отправленную веб-сервером. В самом общем виде веб-сайт представляет собой набор страниц, в основном так называемых "статических страниц".

Статические в данном контексте означают, что сервер отправляет одни и те же файлы без изменений. Это делает сайт очень быстрым и безопасным. Однако чисто статический сайт не обеспечивает большой интерактивности для конечного пользователя. Иногда это называют Web 1.0.

Серверные и браузерные скрипты позволили решить это ограничение и породили многостраничные приложения (MPA). Теперь страницы могли быть как статическими, так и динамически генерируемыми на сервере, который, в свою очередь, также мог получать вызовы новых страниц с дополнительными данными, обрабатывать их и возвращать в ответ новую страницу.

Эти новые страницы, "генерируемые на лету", получили название динамических и сделали возможным появление приложений. Благодаря этим технологиям стало возможным распространение блогов, сервисов и предприятий.

С появлением таких ключевых технологий, как асинхронные коммуникации (AJAX), более развитый JavaScript, методологии локального хранения данных, увеличение скорости сети и вычислительной мощности, мы пришли к тому, что называется Web 2.0. Теперь можно было загрузить в браузер один файл и с помощью JavaScript взять под контроль весь интерфейс и интерактивность, создавая насыщенные интерактивные приложения без генерации новых страниц на сервере.

SPA обращается к серверу только для загрузки данных, пользовательского интерфейса и т.д. по мере необходимости. Появилась возможность переносить на веб-технологии то, что было традиционными десктопными приложениями, такими как текстовые редакторы, электронные таблицы, почтовые клиенты, пакеты графического дизайна и т.д.

Хорошими примерами SPA являются Office 365, Google Docs, Photoshop online, Telegram, Discord, Netflix, YouTube и т.д. Важно отметить, что появление SPA не отменяет использование MPA и не делает их устаревшими - каждый из них полезен в определенных контекстах. Большинство блогов и новостных сайтов сегодня, по сути, являются MPA и по-прежнему составляют значительную часть Интернета.

Наиболее сложные веб-приложения сегодня включают в себя смесь MPA и SPA, работающих вместе. SPA могут даже устанавливаться как гибридные приложения на настольных и мобильных устройствах. Как это реализовать, мы увидим в главе 6, Прогрессивные Web-приложения.

Двигаясь вперёд, с развитием распределенных и децентрализованных вычислений, умных блокчейнов, технология, составляющая одностраничные веб-приложения (SPA), приобрела ещё большую актуальность. Хотя эта новая эра в развитии веб-технологий еще не полностью укоренилась, ее называют Web 3.0. В этой главе мы рассмотрим эту тему более подробно и на примерах.

Все приложения, которые мы делали до сих пор, относятся к категории SPA, даже если мы еще не использовали весь их потенциал. Vue 3 специально предназначен для создания приложений такого типа и является одной из наиболее актуальных технологий для такого подхода, наряду с React, Angular, Svelte и другими.

Но не все так радужно и сладко. Как и в любой другой технологии, в использовании SPA есть свои компромиссы. В следующей таблице мы перечислим некоторые из них:

ПреимуществаНедостатки
- Более быстрая и эффективная загрузка
- Локальное кэширование для повышения производительности
- Разнообразные пользовательские интерфейсы и интерактивность
- Проще в разработке и тестировании, чем MPA
- Более эффективное использование кода и шаблонов, с меньшим количеством сетевых взаимодействий (по сравнению с перезагрузкой всей страницы)
- Высокая производительность.
- Затруднение индексации и обнаружения поисковыми системами
- Увеличение сложности
- Увеличение времени загрузки и замедление времени появления первых интерактивных элементов

Таблица 5.1 - Преимущества и компромиссы для SPA.

Как видите, список преимуществ намного важнее, чем недостатков. Использование SPA следует рассматривать в тех случаях, когда приложение требует значительной интерактивности пользователя и обратной связи в реальном времени.

Теперь, когда мы лучше представляем себе, что такое SPA, давайте рассмотрим ключевую концепцию, лежащую в основе их функциональности: маршрутизатор приложения.

Vue 3 роутер

Vue - отличный фреймворк для создания SPA, но без маршрутизатора (роутера) эта задача вскоре стала бы довольно сложной. Vue router - это официальный плагин, который берет на себя навигацию по приложению и сопоставляет URL с компонентом. Это дает нам преимущества MPA. С помощью маршрутизатора мы можем сделать следующее:

  • Создавать динамические маршруты к компонентам и управлять ими, при необходимости автоматически отображая параметры к пропсам
  • Идентифицировать маршруты (адреса и компоненты) по имени и использовать навигацию в коде
  • Динамическая загрузка компонентов при необходимости, что позволяет уменьшить размер пакета
  • Создать естественный и логичный подход к навигации по сайту и разделению кода
  • Управлять навигацией с помощью известных событий, до и после того, как навигация произошла
  • Создание анимации перехода между страницами таким образом, который невозможен при использовании MPA

Реализация маршрутизатора Vue 3 проста и соответствует той же методологии, что и в случае с другими компонентами экосистемы. Давайте возьмем наш проект из главы 4, Композиция пользовательского интерфейса с компонентами, и модифицируем его для использования маршрутизатора Vue.

Установка

При запуске нового проекта вы могли заметить, что в меню программы установки есть возможность установить маршрутизатор Vue. Если вы не выбрали эту опцию, как мы сделали в нашем примере, то последующая установка достаточно проста. В терминале, в каталоге проекта, просто выполните следующую команду:

sh
$ npm install vue-router@4

Команда загрузит и установит зависимости, как и для любого другого пакета в каталог node_modules. Для того чтобы использовать его в нашем приложении, необходимо выполнить следующие действия:

  1. Создать наши маршруты.
  2. Связать маршруты с нашими компонентами.
  3. Включить роутер в наше приложение.
  4. Установите наши шаблоны, в которых маршрутизатор будет отображать наши компоненты.

Как и многие другие компоненты фреймворка, маршрутизатор не указывает, в каких директориях или организациях должны быть размещены ваши маршруты или компоненты. Однако существует соглашение, которое мы будем использовать и которое стало стандартом де-факто в отрасли. В папке /src создайте следующие каталоги:

  • /router (или /routes): Здесь будут находиться наши JavaScript-файлы с маршрутами для нашего приложения
  • /views: В этой папке будут находиться компоненты верхнего уровня, соответствующие навигации приложения (в качестве лучшей практики)

После создания этих каталогов мы готовы приступить к модификации нашего приложения для включения навигации по маршруту. Но прежде давайте рассмотрим, чего мы хотим добиться с помощью нашего маршрутизатора.

Новое приложение To-Do

В нашем новом приложении будут повторно использоваться компоненты для отображения списка дел, но также будет предусмотрена возможность создания нескольких списков или проектов. Мы будем отображать боковую панель со всеми нашими проектами, и при их выборе список будет обновляться.

Эти проекты также будут сохраняться в браузере, чтобы мы могли вернуться к ним позже, с помощью localStorage. В результате мы получим очень простую навигацию с двумя страницами верхнего уровня (компонентами):

  • Лэндинг страница, на которой мы можем создавать новые проекты
  • Страница проекта, на которой мы можем работать со списком дел

Следуя этим простым предпосылкам, наше приложение в готовом виде будет выглядеть следующим образом:

image

Рисунок 5.1 - Наша лэндинг страница

Как видно на Рисунке 5.1, целевая страница является также местом, где мы можем создавать новые проекты. Для сбора пользовательского ввода мы, как и раньше, используем модальные диалоги.

На боковой панели отображается ссылка на страницу Home (целевая страница) и список с названиями различных проектов, которые мы создали. При щелчке на каждом из них маршрут в браузере (URL) будет обновляться, как и страница, и мы увидим нечто подобное этому:

image

Рисунок 5.2 - Страница проекта To-Do

Последний скриншот вы можете узнать, поскольку именно его отображает наш компонент ToDoProject.vue. Собственно говоря, для достижения этого результата потребуется совсем немного модификаций. А пока давайте начнем с маршрутов.

Определение маршрутов и объект Router

Чтобы создать маршруты для нашего проекта, необходимо сначала определить их в собственном модуле. В каталоге /router создайте файл index.js со следующим содержимым:

/src/router/index.js

js
import {createRouter,createWebHashHistory} from 'vue-router'        //1
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/Figure_5.01_B18602.CxFklVTK.jpg",p="/assets/Figure_5.02_B18602.DCixZ9eX.jpg",h="/assets/Figure_5.03_B18602.BzEXJ6zo.jpg",e="/assets/Figure_5.04_B18602.CoBRQSxy.jpg",l="/assets/Figure_5.05_B18602.DqYwnYye.jpg",k="/assets/Figure_5.06_B18602.CTZn3hwt.jpg",r="/assets/Figure_5.07_B18602.Cto6XFmp.jpg",o="/assets/Figure_5.08_B18602.DVLiKG2s.jpg",v=JSON.parse('{"title":"Одностраничные приложения","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_5__Single-Page_Applications.md","filePath":"ru/book/Chapter_5__Single-Page_Applications.md","lastUpdated":1726505115000}'),E={name:"ru/book/Chapter_5__Single-Page_Applications.md"},g=t('

Одностраничные приложения

В этой главе мы продолжаем совершенствовать свои навыки работы с Vue 3, знакомясь с одностраничными приложениями (SPA). Мы узнаем, что отличает их от обычных сайтов, и рассмотрим их ключевые характеристики.

Чтобы применить полученные знания на практике, мы создадим новую версию приложения To-Do с использованием маршрутизатора Vue Router и иной схемы взаимодействия, чем в предыдущих главах. Мы также изучим методы аутентификации на примерах кода.

К концу этой главы вы будете знать следующее:

  • Как создавать SPA с помощью Vue 3
  • Как организовать приложение для использования Vue Router с различными стратегиями маршрутизации
  • Как переделать наше приложение To-Do с практическим применением различных паттернов
  • Как реализовать различные паттерны аутентификации в SPA

Если предыдущая глава была несколько перегружена фундаментальными знаниями, то теперь мы больше сосредоточимся на практических вопросах. В связи с этим вам потребуется доступ к приложениям-примерам, чтобы разобраться с ними.

Технические требования

Код этой главы можно найти на GitHub по адресу https://github.com/PacktPublishing/Vue.js-3-Design-Patterns-and-Best-Practices/tree/main/Chapter05.

Посмотрите следующее видео, чтобы увидеть код в действии.

Что такое SPA?

Чтобы объяснить, что такое SPA, необходимо сначала объяснить, как мы взаимодействуем с World Wide Web (WWW или W3). Когда мы вводим адрес в веб-браузере, то получаем веб-страницу, отправленную веб-сервером. В самом общем виде веб-сайт представляет собой набор страниц, в основном так называемых "статических страниц".

Статические в данном контексте означают, что сервер отправляет одни и те же файлы без изменений. Это делает сайт очень быстрым и безопасным. Однако чисто статический сайт не обеспечивает большой интерактивности для конечного пользователя. Иногда это называют Web 1.0.

Серверные и браузерные скрипты позволили решить это ограничение и породили многостраничные приложения (MPA). Теперь страницы могли быть как статическими, так и динамически генерируемыми на сервере, который, в свою очередь, также мог получать вызовы новых страниц с дополнительными данными, обрабатывать их и возвращать в ответ новую страницу.

Эти новые страницы, "генерируемые на лету", получили название динамических и сделали возможным появление приложений. Благодаря этим технологиям стало возможным распространение блогов, сервисов и предприятий.

С появлением таких ключевых технологий, как асинхронные коммуникации (AJAX), более развитый JavaScript, методологии локального хранения данных, увеличение скорости сети и вычислительной мощности, мы пришли к тому, что называется Web 2.0. Теперь можно было загрузить в браузер один файл и с помощью JavaScript взять под контроль весь интерфейс и интерактивность, создавая насыщенные интерактивные приложения без генерации новых страниц на сервере.

SPA обращается к серверу только для загрузки данных, пользовательского интерфейса и т.д. по мере необходимости. Появилась возможность переносить на веб-технологии то, что было традиционными десктопными приложениями, такими как текстовые редакторы, электронные таблицы, почтовые клиенты, пакеты графического дизайна и т.д.

Хорошими примерами SPA являются Office 365, Google Docs, Photoshop online, Telegram, Discord, Netflix, YouTube и т.д. Важно отметить, что появление SPA не отменяет использование MPA и не делает их устаревшими - каждый из них полезен в определенных контекстах. Большинство блогов и новостных сайтов сегодня, по сути, являются MPA и по-прежнему составляют значительную часть Интернета.

Наиболее сложные веб-приложения сегодня включают в себя смесь MPA и SPA, работающих вместе. SPA могут даже устанавливаться как гибридные приложения на настольных и мобильных устройствах. Как это реализовать, мы увидим в главе 6, Прогрессивные Web-приложения.

Двигаясь вперёд, с развитием распределенных и децентрализованных вычислений, умных блокчейнов, технология, составляющая одностраничные веб-приложения (SPA), приобрела ещё большую актуальность. Хотя эта новая эра в развитии веб-технологий еще не полностью укоренилась, ее называют Web 3.0. В этой главе мы рассмотрим эту тему более подробно и на примерах.

Все приложения, которые мы делали до сих пор, относятся к категории SPA, даже если мы еще не использовали весь их потенциал. Vue 3 специально предназначен для создания приложений такого типа и является одной из наиболее актуальных технологий для такого подхода, наряду с React, Angular, Svelte и другими.

Но не все так радужно и сладко. Как и в любой другой технологии, в использовании SPA есть свои компромиссы. В следующей таблице мы перечислим некоторые из них:

ПреимуществаНедостатки
- Более быстрая и эффективная загрузка
- Локальное кэширование для повышения производительности
- Разнообразные пользовательские интерфейсы и интерактивность
- Проще в разработке и тестировании, чем MPA
- Более эффективное использование кода и шаблонов, с меньшим количеством сетевых взаимодействий (по сравнению с перезагрузкой всей страницы)
- Высокая производительность.
- Затруднение индексации и обнаружения поисковыми системами
- Увеличение сложности
- Увеличение времени загрузки и замедление времени появления первых интерактивных элементов

Таблица 5.1 - Преимущества и компромиссы для SPA.

Как видите, список преимуществ намного важнее, чем недостатков. Использование SPA следует рассматривать в тех случаях, когда приложение требует значительной интерактивности пользователя и обратной связи в реальном времени.

Теперь, когда мы лучше представляем себе, что такое SPA, давайте рассмотрим ключевую концепцию, лежащую в основе их функциональности: маршрутизатор приложения.

Vue 3 роутер

Vue - отличный фреймворк для создания SPA, но без маршрутизатора (роутера) эта задача вскоре стала бы довольно сложной. Vue router - это официальный плагин, который берет на себя навигацию по приложению и сопоставляет URL с компонентом. Это дает нам преимущества MPA. С помощью маршрутизатора мы можем сделать следующее:

  • Создавать динамические маршруты к компонентам и управлять ими, при необходимости автоматически отображая параметры к пропсам
  • Идентифицировать маршруты (адреса и компоненты) по имени и использовать навигацию в коде
  • Динамическая загрузка компонентов при необходимости, что позволяет уменьшить размер пакета
  • Создать естественный и логичный подход к навигации по сайту и разделению кода
  • Управлять навигацией с помощью известных событий, до и после того, как навигация произошла
  • Создание анимации перехода между страницами таким образом, который невозможен при использовании MPA

Реализация маршрутизатора Vue 3 проста и соответствует той же методологии, что и в случае с другими компонентами экосистемы. Давайте возьмем наш проект из главы 4, Композиция пользовательского интерфейса с компонентами, и модифицируем его для использования маршрутизатора Vue.

Установка

При запуске нового проекта вы могли заметить, что в меню программы установки есть возможность установить маршрутизатор Vue. Если вы не выбрали эту опцию, как мы сделали в нашем примере, то последующая установка достаточно проста. В терминале, в каталоге проекта, просто выполните следующую команду:

sh
$ npm install vue-router@4

Команда загрузит и установит зависимости, как и для любого другого пакета в каталог node_modules. Для того чтобы использовать его в нашем приложении, необходимо выполнить следующие действия:

  1. Создать наши маршруты.
  2. Связать маршруты с нашими компонентами.
  3. Включить роутер в наше приложение.
  4. Установите наши шаблоны, в которых маршрутизатор будет отображать наши компоненты.

Как и многие другие компоненты фреймворка, маршрутизатор не указывает, в каких директориях или организациях должны быть размещены ваши маршруты или компоненты. Однако существует соглашение, которое мы будем использовать и которое стало стандартом де-факто в отрасли. В папке /src создайте следующие каталоги:

  • /router (или /routes): Здесь будут находиться наши JavaScript-файлы с маршрутами для нашего приложения
  • /views: В этой папке будут находиться компоненты верхнего уровня, соответствующие навигации приложения (в качестве лучшей практики)

После создания этих каталогов мы готовы приступить к модификации нашего приложения для включения навигации по маршруту. Но прежде давайте рассмотрим, чего мы хотим добиться с помощью нашего маршрутизатора.

Новое приложение To-Do

В нашем новом приложении будут повторно использоваться компоненты для отображения списка дел, но также будет предусмотрена возможность создания нескольких списков или проектов. Мы будем отображать боковую панель со всеми нашими проектами, и при их выборе список будет обновляться.

Эти проекты также будут сохраняться в браузере, чтобы мы могли вернуться к ним позже, с помощью localStorage. В результате мы получим очень простую навигацию с двумя страницами верхнего уровня (компонентами):

  • Лэндинг страница, на которой мы можем создавать новые проекты
  • Страница проекта, на которой мы можем работать со списком дел

Следуя этим простым предпосылкам, наше приложение в готовом виде будет выглядеть следующим образом:

image

Рисунок 5.1 - Наша лэндинг страница

Как видно на Рисунке 5.1, целевая страница является также местом, где мы можем создавать новые проекты. Для сбора пользовательского ввода мы, как и раньше, используем модальные диалоги.

На боковой панели отображается ссылка на страницу Home (целевая страница) и список с названиями различных проектов, которые мы создали. При щелчке на каждом из них маршрут в браузере (URL) будет обновляться, как и страница, и мы увидим нечто подобное этому:

image

Рисунок 5.2 - Страница проекта To-Do

Последний скриншот вы можете узнать, поскольку именно его отображает наш компонент ToDoProject.vue. Собственно говоря, для достижения этого результата потребуется совсем немного модификаций. А пока давайте начнем с маршрутов.

Определение маршрутов и объект Router

Чтобы создать маршруты для нашего проекта, необходимо сначала определить их в собственном модуле. В каталоге /router создайте файл index.js со следующим содержимым:

/src/router/index.js

js
import {createRouter,createWebHashHistory} from 'vue-router'        //1
 import Landing from "../views/Landing.vue"                          //2
 const routes = [
     {path: "/",name: "landing", component: Landing},
diff --git a/assets/ru_book_Chapter_5__Single-Page_Applications.md.C6XMJrBo.lean.js b/assets/ru_book_Chapter_5__Single-Page_Applications.md.DSg6a7Pk.lean.js
similarity index 95%
rename from assets/ru_book_Chapter_5__Single-Page_Applications.md.C6XMJrBo.lean.js
rename to assets/ru_book_Chapter_5__Single-Page_Applications.md.DSg6a7Pk.lean.js
index a7b27e218..4157c26cb 100644
--- a/assets/ru_book_Chapter_5__Single-Page_Applications.md.C6XMJrBo.lean.js
+++ b/assets/ru_book_Chapter_5__Single-Page_Applications.md.DSg6a7Pk.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/Figure_5.01_B18602.CxFklVTK.jpg",p="/assets/Figure_5.02_B18602.DCixZ9eX.jpg",h="/assets/Figure_5.03_B18602.BzEXJ6zo.jpg",e="/assets/Figure_5.04_B18602.CoBRQSxy.jpg",l="/assets/Figure_5.05_B18602.DqYwnYye.jpg",k="/assets/Figure_5.06_B18602.CTZn3hwt.jpg",r="/assets/Figure_5.07_B18602.Cto6XFmp.jpg",o="/assets/Figure_5.08_B18602.DVLiKG2s.jpg",v=JSON.parse('{"title":"Одностраничные приложения","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_5__Single-Page_Applications.md","filePath":"ru/book/Chapter_5__Single-Page_Applications.md","lastUpdated":1726474804000}'),E={name:"ru/book/Chapter_5__Single-Page_Applications.md"},g=t("",275),d=[g];function y(u,c,F,m,C,A){return i(),a("div",null,d)}const q=s(E,[["render",y]]);export{v as __pageData,q as default};
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/Figure_5.01_B18602.CxFklVTK.jpg",p="/assets/Figure_5.02_B18602.DCixZ9eX.jpg",h="/assets/Figure_5.03_B18602.BzEXJ6zo.jpg",e="/assets/Figure_5.04_B18602.CoBRQSxy.jpg",l="/assets/Figure_5.05_B18602.DqYwnYye.jpg",k="/assets/Figure_5.06_B18602.CTZn3hwt.jpg",r="/assets/Figure_5.07_B18602.Cto6XFmp.jpg",o="/assets/Figure_5.08_B18602.DVLiKG2s.jpg",v=JSON.parse('{"title":"Одностраничные приложения","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_5__Single-Page_Applications.md","filePath":"ru/book/Chapter_5__Single-Page_Applications.md","lastUpdated":1726505115000}'),E={name:"ru/book/Chapter_5__Single-Page_Applications.md"},g=t("",275),d=[g];function y(u,c,F,m,C,A){return i(),a("div",null,d)}const q=s(E,[["render",y]]);export{v as __pageData,q as default};
diff --git a/assets/ru_book_Chapter_6__Progressive_Web_Applications.md.BCdJFqes.js b/assets/ru_book_Chapter_6__Progressive_Web_Applications.md.-azuZGY2.js
similarity index 99%
rename from assets/ru_book_Chapter_6__Progressive_Web_Applications.md.BCdJFqes.js
rename to assets/ru_book_Chapter_6__Progressive_Web_Applications.md.-azuZGY2.js
index ed0e280ce..c810657b1 100644
--- a/assets/ru_book_Chapter_6__Progressive_Web_Applications.md.BCdJFqes.js
+++ b/assets/ru_book_Chapter_6__Progressive_Web_Applications.md.-azuZGY2.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const t="/assets/Figure_6.01_B18602.CRzV52bD.jpg",p="/assets/Figure_6.02_B18602.7tBnMfnU.jpg",l="/assets/Figure_6.03_B18602.DzWeXQ7D.jpg",h="/assets/Figure_6.04_B18602.CXYEjuJn.jpg",e="/assets/Figure_6.05_B18602.B30q4bXz.jpg",k="/assets/Figure_6.06_B18602.DEoZmeKA.jpg",r="/assets/Figure_6.07_B18602.TpFAbL_Y.jpg",E="/assets/Figure_6.08_B18602.DeppM780.jpg",_=JSON.parse('{"title":"Прогрессивные веб-приложения","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_6__Progressive_Web_Applications.md","filePath":"ru/book/Chapter_6__Progressive_Web_Applications.md","lastUpdated":1726474804000}'),o={name:"ru/book/Chapter_6__Progressive_Web_Applications.md"},g=n(`

Прогрессивные веб-приложения

В этой главе мы познакомимся со следующим шагом эволюции веб-приложений: прогрессивные веб-приложения (PWA). Этот термин может показаться недостаточно описательным, но он относится к группе технологий, которые создают общую концепцию и могут быть реализованы постепенно или частично.

Основная идея заключается в том, чтобы вывести веб-приложение из контекста браузера и реализовать его на любом типе устройства, чтобы оно действовало и вело себя максимально похоже на нативное приложение. Это достигается за счет внедрения новых API в браузерные движки, а также интеграции с наиболее популярными операционными системами для настольных и мобильных устройств.

Отправной точкой для PWA, конечно же, является одностраничное приложение (SPA).

К концу этой главы мы узнаем следующее:

  • Что превращает SPA в PWA, и какие технологии при этом используются
  • Как вручную реализовать адаптивный SPA, файл манифеста, web workers, автономное хранилище и так далее
  • Что такое service workers и какие они бывают
  • Как использовать плагины Vite для автоматизации создания PWA
  • Как проверить готовность приложения с помощью Google Lighthouse

Из предыдущего списка мы сосредоточимся на изучении развертывания начальных шаблонов для нескольких технологий, закладывающих основу для их последующего использования, подробно реализованного в главе 7, Управление потоками данных, и главе 8, Многопоточность с Web Workers. К концу этих глав вы будете знать, как создавать PWA, которые эффективно используют современные вычислительные мощности, делая их отзывчивыми, надежными, и производительными.

Технические требования

Для работы с этой главой вам понадобятся примеры кода, расположенные в репозитории по адресу https://github.com/PacktPublishing/Vue.js-3-Design-Patterns-and-Best-Practices/tree/main/Chapter06.

Текстовых примеров кода в этом разделе может быть недостаточно для создания работающего примера без дополнительного кода из репозитория.

Посмотрите следующее видео, чтобы увидеть код в действии:

PWA или устанавливаемые SPA

PWA - это не отдельная настройка или технология, а систематическое усовершенствование веб-приложения для соблюдения определенных условий, будь то многостраничное приложение (MPA) или SPA. Однако по-настоящему они проявляются и оживают, когда эти технологии применяются к SPA, давая нам мощные приложения, которые стирают грань между онлайном и оффлайном, настольными и веб-приложениями.

Термин прогрессивный, используемый здесь, имеет тот же оттенок, который мы обсуждали ранее применительно к фреймворку Vue - постепенное применение веб-технологий.

PWA несколько по-особому воспринимаются браузерами и операционными системами. Они могут устанавливаться рядом с "родными" или настольными приложениями и управлять сетевыми коммуникациями (отправлять, получать, кэшировать файлы и даже получать push-уведомления с сервера).

Здесь важно отметить, что речь идет уже не только о настольных компьютерах, но и о мобильных устройствах, таких как планшеты и телефоны, а также о различных операционных системах. Именно в связи с такой многоплатформенностью, если предполагается охватить базу пользователей на различных устройствах, необходимо уделить особое внимание использованию специальных правил CSS для адаптации пользовательского интерфейса к различным размерам (так называемые отзывчивые (responsive) приложения), различных иконок и цветов для согласования с локальными настройками пользователя на уровне операционной системы (например, светлый и темный режимы) и т.д.

Кроме того, PWA имеют возможность (как и SPA) хранить контент для автономного использования и, надеюсь, должны предоставлять определенную функциональность для автономного использования. Для выполнения всего этого, как минимум, PWA должен соответствовать следующим требованиям:

  • Веб-приложение должно обслуживаться через защищенное соединение (HTTPS).
  • Приложение должно предоставлять файл манифеста.
  • Приложение должно предоставить и установить service worker.

При выполнении всех этих условий браузер или операционная система могут предложить пользователю "установить" приложение. Если пользователь соглашается, то с помощью файла манифеста настраивается внешний вид приложения в соответствии с локальной операционной системой (значки, названия, цвета и т.д.), и оно появляется рядом с другими приложениями в системе.

При запуске оно будет открываться в собственном окне (если оно выбрано) вне рамок веб-браузера, как и обычное "родное" приложение. Внутри приложение по-прежнему будет работать на движке браузера с использованием веб-технологий, но предполагается, что это будет прозрачно для пользователя, обеспечивая лучшее из двух миров.

Есть вероятность того, что пользователь, сам того не зная, использует PWA вместо обычных приложений. Успешными примерами такого подхода являются Starbucks, Trivago и Tinder (https://medium.com/@addyosmani/a-tinder-progressive-web-app-performance-case-study-78919d98ece0).

Это создает целый ряд преимуществ, которые перекрывают сложности создания веб-приложения под различные сценарии установки:

  • Единая кодовая база для установки приложения на различные устройства (настольные, мобильные, ...) и операционные системы (Windows, Linux, macOS, Android, iOS и так далее)
  • Поддерживают push-уведомления с сервера, ручную обработку кэширования, автономное использование и так далее
  • Они интегрируются с локальной операционной системой
  • Обновления прозрачны для пользователя и происходят гораздо быстрее, чем в традиционном приложении (в большинстве случаев)
  • Разработка PWA требует гораздо меньших затрат, чем создание аналогичных целевых индивидуальных приложений для каждой платформы
  • Вы можете использовать все доступные веб-технологии, фреймворки и библиотеки
  • Могут индексироваться поисковыми системами, а их распространение и установка не зависят от проприетарных магазинов приложений
  • Отзывчивые, безопасные и быстрые, ими можно поделиться с помощью одной лишь ссылки
  • Вы можете обращаться к локальным устройствам с помощью стандартных веб-интерфейсов API, например к локальной файловой системе и USB-устройствам, использовать аппаратное ускорение графики и т.д.
  • Вы можете работать с локальными устройствами с помощью стандартных веб-интерфейсов API.
  • Некоторые магазины приложений позволяют переупаковывать PWA и распространять его как обычное приложение (Microsoft Store, Amazon Store, Android Store и др.)

Есть и другие преимущества, но этих, пожалуй, достаточно, чтобы привести их в качестве аргумента. Кроме того, в SPA проще добавить необходимые элементы, чтобы превратить его в PWA. В результате PWA могут показаться "серебряной пулей" среди приложений, однако следует учитывать и некоторые недостатки:

  • Производительность PWA хороша, но в некоторых конкретных сценариях она всегда будет отставать от нативного приложения. То же самое может произойти и на устаревшем оборудовании - они будут работать, но производительность может пострадать.
  • Устройства Apple немного отстают в освоении некоторых веб-технологий или специально ограничивают их применение для PWA (например, серверные push-уведомления).
  • Необходимо приложить немного больше усилий, чтобы охватить различные сценарии работы пользователей на разных устройствах (но немного больше, чем для обычного отзывчивого веб-приложения).
  • Некоторые магазины приложений не допускают PWA (в частности, на момент написания статьи это Apple App Store). Кроме того, приложение не получит выгоды от экспозиции и пешеходного трафика (foot traffic) из магазина приложений.

В целом, преимущества значительно перевешивают недостатки. По мере развития веб-технологий PWA будут получать все больше преимуществ и становиться все более распространенными. Теперь, имея более полное представление о том, что такое PWA и что он может делать, давайте модернизируем наши SPA в PWA.

Увеличение SPA до уровня PWA

Первое требование, о котором уже говорилось, - это обслуживание приложения по защищенному соединению. Как это сделать, установив на сервере бесплатный SSL-сертификат с помощью Let's Encrypt, мы рассмотрим в главе 10, Развертывание приложения. Учитывая это, давайте посмотрим, как выполнить другие требования.

Файл манифеста

Добавление файла манифеста - это отправная точка для превращения нашего приложения в PWA. Это не что иное, как JSON-файл с известными полями, которые указывают браузеру или операционной системе, как приложение должно быть установлено на настольном или мобильном устройстве.

Этот файл должен быть связан в секции head нашего файла index.html, и хотя он может иметь произвольное название, принято использовать имя manifest.json или app.webmanifest. Официальная спецификация предлагает расширение .webmanifest, но при этом уточняет, что имя не имеет особого значения, если файл принимается правильно с типом application/manifest+json - Multipurpose Internet Mail Extensions (MIME) (см. https://www.w3.org/TR/appmanifest/, раздел §1.1.2). В наших примерах кода мы будем использовать имя manifest.json для простоты:

html
<link rel="manifest" href="/manifest.json">

Заметим из предыдущего кода, что файл размещается в корне нашего приложения, а атрибут rel должен быть manifest. Атрибуты полей в нашем файле манифеста могут располагаться в любом порядке, и все они считаются опциональными согласно вышеупомянутой спецификации.

Однако некоторые платформы все же предполагают минимальный набор атрибутов, который мы будем считать необходимым. Обычная практика также требует наличия других атрибутов, которые мы будем относить к рекомендуемым, и, наконец, некоторые атрибуты в спецификации часто используются в магазинах приложений, социальных сетях и т.д. для представления или описания приложения, поэтому мы будем относить их к описательным полям.

Эта классификация не является частью спецификации, но может быть полезна при реализации. Вот список наиболее распространенных и полезных атрибутов:

Необходимо:

КлассификацияАтрибут
short_nameКороткое имя, используемое в тех случаях, когда не хватает места для отображения полного имени приложения. В мобильных устройствах часто используется для названия значка.
nameПолное имя приложения.
iconsМассив объектов, каждый из которых представляет собой отдельную иконку, используемую в различных контекстах. Каждый объект имеет как минимум два атрибута:

- src: Путь к изображению
- sizes: Строка с размерами изображения
start_urlURL-адрес, с которого должно стартовать приложение, заданный разработчиком.
displayСтрока, представляющая способ представления приложения:

- fullscreen: В полноэкранном режиме, но с отображением пользовательского интерфейса браузера.
- standalone: Аналогично fullscreen, но без элементов управления браузера. На рабочем столе элементы управления windows все равно будут отображаться.
- minimal-ui: Как standalone, но с базовой навигацией для перемещения вперед и назад, печати, обмена и т.д.
- browser: Приложение открыто в браузере по умолчанию.

Рекомендуется:

КлассификацияАтрибут
theme_colorСтрока, представляющая собой цвет CSS для приложения. ОС сама решает, как использовать это значение (обычно оно применяется в строке заголовка окна).
background_colorСтрока, представляющая цвет фона приложения при его запуске и до применения стилей приложения.
orientationВ основном используется в мобильных устройствах и определяет ориентацию, которую должно использовать приложение - например, ландшафтная, портретная, любая и т.д.
langСтрока, определяющая основной язык приложения.

Описательные:

КлассификацияАтрибут
shortcutsЭто массив объектов, определяющих пункты прямого меню для тесной интеграции с операционной системой. Обычно они появляются в контекстном меню, например, когда пользователь щелкает правой кнопкой мыши на значке приложения. Каждый объект ярлыка должен содержать как минимум имя и URL, а также - опционально - описание и массив иконок.
descriptionСтрока с кратким описанием приложения.
screenshotsМассив объектов, содержащий следующие поля:

- src: URL-адрес изображения
- type: MIME-тип изображения
- sizes: Строка с размерами изображения

Таблица 6.1 - Поля манифеста.

На практике я бы рекомендовал заполнять необходимые и рекомендуемые поля для каждого PWA, а описательные поля использовать по мере необходимости, исходя из контекста приложения. Кроме того, следует изучить целевые платформы на предмет наличия дополнительных поддерживаемых полей, которые не входят в стандартную спецификацию.

Следуя предыдущей таблице, приведем пример файла manifest.json:

json
{
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const t="/assets/Figure_6.01_B18602.CRzV52bD.jpg",p="/assets/Figure_6.02_B18602.7tBnMfnU.jpg",l="/assets/Figure_6.03_B18602.DzWeXQ7D.jpg",h="/assets/Figure_6.04_B18602.CXYEjuJn.jpg",e="/assets/Figure_6.05_B18602.B30q4bXz.jpg",k="/assets/Figure_6.06_B18602.DEoZmeKA.jpg",r="/assets/Figure_6.07_B18602.TpFAbL_Y.jpg",E="/assets/Figure_6.08_B18602.DeppM780.jpg",_=JSON.parse('{"title":"Прогрессивные веб-приложения","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_6__Progressive_Web_Applications.md","filePath":"ru/book/Chapter_6__Progressive_Web_Applications.md","lastUpdated":1726505115000}'),o={name:"ru/book/Chapter_6__Progressive_Web_Applications.md"},g=n(`

Прогрессивные веб-приложения

В этой главе мы познакомимся со следующим шагом эволюции веб-приложений: прогрессивные веб-приложения (PWA). Этот термин может показаться недостаточно описательным, но он относится к группе технологий, которые создают общую концепцию и могут быть реализованы постепенно или частично.

Основная идея заключается в том, чтобы вывести веб-приложение из контекста браузера и реализовать его на любом типе устройства, чтобы оно действовало и вело себя максимально похоже на нативное приложение. Это достигается за счет внедрения новых API в браузерные движки, а также интеграции с наиболее популярными операционными системами для настольных и мобильных устройств.

Отправной точкой для PWA, конечно же, является одностраничное приложение (SPA).

К концу этой главы мы узнаем следующее:

  • Что превращает SPA в PWA, и какие технологии при этом используются
  • Как вручную реализовать адаптивный SPA, файл манифеста, web workers, автономное хранилище и так далее
  • Что такое service workers и какие они бывают
  • Как использовать плагины Vite для автоматизации создания PWA
  • Как проверить готовность приложения с помощью Google Lighthouse

Из предыдущего списка мы сосредоточимся на изучении развертывания начальных шаблонов для нескольких технологий, закладывающих основу для их последующего использования, подробно реализованного в главе 7, Управление потоками данных, и главе 8, Многопоточность с Web Workers. К концу этих глав вы будете знать, как создавать PWA, которые эффективно используют современные вычислительные мощности, делая их отзывчивыми, надежными, и производительными.

Технические требования

Для работы с этой главой вам понадобятся примеры кода, расположенные в репозитории по адресу https://github.com/PacktPublishing/Vue.js-3-Design-Patterns-and-Best-Practices/tree/main/Chapter06.

Текстовых примеров кода в этом разделе может быть недостаточно для создания работающего примера без дополнительного кода из репозитория.

Посмотрите следующее видео, чтобы увидеть код в действии:

PWA или устанавливаемые SPA

PWA - это не отдельная настройка или технология, а систематическое усовершенствование веб-приложения для соблюдения определенных условий, будь то многостраничное приложение (MPA) или SPA. Однако по-настоящему они проявляются и оживают, когда эти технологии применяются к SPA, давая нам мощные приложения, которые стирают грань между онлайном и оффлайном, настольными и веб-приложениями.

Термин прогрессивный, используемый здесь, имеет тот же оттенок, который мы обсуждали ранее применительно к фреймворку Vue - постепенное применение веб-технологий.

PWA несколько по-особому воспринимаются браузерами и операционными системами. Они могут устанавливаться рядом с "родными" или настольными приложениями и управлять сетевыми коммуникациями (отправлять, получать, кэшировать файлы и даже получать push-уведомления с сервера).

Здесь важно отметить, что речь идет уже не только о настольных компьютерах, но и о мобильных устройствах, таких как планшеты и телефоны, а также о различных операционных системах. Именно в связи с такой многоплатформенностью, если предполагается охватить базу пользователей на различных устройствах, необходимо уделить особое внимание использованию специальных правил CSS для адаптации пользовательского интерфейса к различным размерам (так называемые отзывчивые (responsive) приложения), различных иконок и цветов для согласования с локальными настройками пользователя на уровне операционной системы (например, светлый и темный режимы) и т.д.

Кроме того, PWA имеют возможность (как и SPA) хранить контент для автономного использования и, надеюсь, должны предоставлять определенную функциональность для автономного использования. Для выполнения всего этого, как минимум, PWA должен соответствовать следующим требованиям:

  • Веб-приложение должно обслуживаться через защищенное соединение (HTTPS).
  • Приложение должно предоставлять файл манифеста.
  • Приложение должно предоставить и установить service worker.

При выполнении всех этих условий браузер или операционная система могут предложить пользователю "установить" приложение. Если пользователь соглашается, то с помощью файла манифеста настраивается внешний вид приложения в соответствии с локальной операционной системой (значки, названия, цвета и т.д.), и оно появляется рядом с другими приложениями в системе.

При запуске оно будет открываться в собственном окне (если оно выбрано) вне рамок веб-браузера, как и обычное "родное" приложение. Внутри приложение по-прежнему будет работать на движке браузера с использованием веб-технологий, но предполагается, что это будет прозрачно для пользователя, обеспечивая лучшее из двух миров.

Есть вероятность того, что пользователь, сам того не зная, использует PWA вместо обычных приложений. Успешными примерами такого подхода являются Starbucks, Trivago и Tinder (https://medium.com/@addyosmani/a-tinder-progressive-web-app-performance-case-study-78919d98ece0).

Это создает целый ряд преимуществ, которые перекрывают сложности создания веб-приложения под различные сценарии установки:

  • Единая кодовая база для установки приложения на различные устройства (настольные, мобильные, ...) и операционные системы (Windows, Linux, macOS, Android, iOS и так далее)
  • Поддерживают push-уведомления с сервера, ручную обработку кэширования, автономное использование и так далее
  • Они интегрируются с локальной операционной системой
  • Обновления прозрачны для пользователя и происходят гораздо быстрее, чем в традиционном приложении (в большинстве случаев)
  • Разработка PWA требует гораздо меньших затрат, чем создание аналогичных целевых индивидуальных приложений для каждой платформы
  • Вы можете использовать все доступные веб-технологии, фреймворки и библиотеки
  • Могут индексироваться поисковыми системами, а их распространение и установка не зависят от проприетарных магазинов приложений
  • Отзывчивые, безопасные и быстрые, ими можно поделиться с помощью одной лишь ссылки
  • Вы можете обращаться к локальным устройствам с помощью стандартных веб-интерфейсов API, например к локальной файловой системе и USB-устройствам, использовать аппаратное ускорение графики и т.д.
  • Вы можете работать с локальными устройствами с помощью стандартных веб-интерфейсов API.
  • Некоторые магазины приложений позволяют переупаковывать PWA и распространять его как обычное приложение (Microsoft Store, Amazon Store, Android Store и др.)

Есть и другие преимущества, но этих, пожалуй, достаточно, чтобы привести их в качестве аргумента. Кроме того, в SPA проще добавить необходимые элементы, чтобы превратить его в PWA. В результате PWA могут показаться "серебряной пулей" среди приложений, однако следует учитывать и некоторые недостатки:

  • Производительность PWA хороша, но в некоторых конкретных сценариях она всегда будет отставать от нативного приложения. То же самое может произойти и на устаревшем оборудовании - они будут работать, но производительность может пострадать.
  • Устройства Apple немного отстают в освоении некоторых веб-технологий или специально ограничивают их применение для PWA (например, серверные push-уведомления).
  • Необходимо приложить немного больше усилий, чтобы охватить различные сценарии работы пользователей на разных устройствах (но немного больше, чем для обычного отзывчивого веб-приложения).
  • Некоторые магазины приложений не допускают PWA (в частности, на момент написания статьи это Apple App Store). Кроме того, приложение не получит выгоды от экспозиции и пешеходного трафика (foot traffic) из магазина приложений.

В целом, преимущества значительно перевешивают недостатки. По мере развития веб-технологий PWA будут получать все больше преимуществ и становиться все более распространенными. Теперь, имея более полное представление о том, что такое PWA и что он может делать, давайте модернизируем наши SPA в PWA.

Увеличение SPA до уровня PWA

Первое требование, о котором уже говорилось, - это обслуживание приложения по защищенному соединению. Как это сделать, установив на сервере бесплатный SSL-сертификат с помощью Let's Encrypt, мы рассмотрим в главе 10, Развертывание приложения. Учитывая это, давайте посмотрим, как выполнить другие требования.

Файл манифеста

Добавление файла манифеста - это отправная точка для превращения нашего приложения в PWA. Это не что иное, как JSON-файл с известными полями, которые указывают браузеру или операционной системе, как приложение должно быть установлено на настольном или мобильном устройстве.

Этот файл должен быть связан в секции head нашего файла index.html, и хотя он может иметь произвольное название, принято использовать имя manifest.json или app.webmanifest. Официальная спецификация предлагает расширение .webmanifest, но при этом уточняет, что имя не имеет особого значения, если файл принимается правильно с типом application/manifest+json - Multipurpose Internet Mail Extensions (MIME) (см. https://www.w3.org/TR/appmanifest/, раздел §1.1.2). В наших примерах кода мы будем использовать имя manifest.json для простоты:

html
<link rel="manifest" href="/manifest.json">

Заметим из предыдущего кода, что файл размещается в корне нашего приложения, а атрибут rel должен быть manifest. Атрибуты полей в нашем файле манифеста могут располагаться в любом порядке, и все они считаются опциональными согласно вышеупомянутой спецификации.

Однако некоторые платформы все же предполагают минимальный набор атрибутов, который мы будем считать необходимым. Обычная практика также требует наличия других атрибутов, которые мы будем относить к рекомендуемым, и, наконец, некоторые атрибуты в спецификации часто используются в магазинах приложений, социальных сетях и т.д. для представления или описания приложения, поэтому мы будем относить их к описательным полям.

Эта классификация не является частью спецификации, но может быть полезна при реализации. Вот список наиболее распространенных и полезных атрибутов:

Необходимо:

КлассификацияАтрибут
short_nameКороткое имя, используемое в тех случаях, когда не хватает места для отображения полного имени приложения. В мобильных устройствах часто используется для названия значка.
nameПолное имя приложения.
iconsМассив объектов, каждый из которых представляет собой отдельную иконку, используемую в различных контекстах. Каждый объект имеет как минимум два атрибута:

- src: Путь к изображению
- sizes: Строка с размерами изображения
start_urlURL-адрес, с которого должно стартовать приложение, заданный разработчиком.
displayСтрока, представляющая способ представления приложения:

- fullscreen: В полноэкранном режиме, но с отображением пользовательского интерфейса браузера.
- standalone: Аналогично fullscreen, но без элементов управления браузера. На рабочем столе элементы управления windows все равно будут отображаться.
- minimal-ui: Как standalone, но с базовой навигацией для перемещения вперед и назад, печати, обмена и т.д.
- browser: Приложение открыто в браузере по умолчанию.

Рекомендуется:

КлассификацияАтрибут
theme_colorСтрока, представляющая собой цвет CSS для приложения. ОС сама решает, как использовать это значение (обычно оно применяется в строке заголовка окна).
background_colorСтрока, представляющая цвет фона приложения при его запуске и до применения стилей приложения.
orientationВ основном используется в мобильных устройствах и определяет ориентацию, которую должно использовать приложение - например, ландшафтная, портретная, любая и т.д.
langСтрока, определяющая основной язык приложения.

Описательные:

КлассификацияАтрибут
shortcutsЭто массив объектов, определяющих пункты прямого меню для тесной интеграции с операционной системой. Обычно они появляются в контекстном меню, например, когда пользователь щелкает правой кнопкой мыши на значке приложения. Каждый объект ярлыка должен содержать как минимум имя и URL, а также - опционально - описание и массив иконок.
descriptionСтрока с кратким описанием приложения.
screenshotsМассив объектов, содержащий следующие поля:

- src: URL-адрес изображения
- type: MIME-тип изображения
- sizes: Строка с размерами изображения

Таблица 6.1 - Поля манифеста.

На практике я бы рекомендовал заполнять необходимые и рекомендуемые поля для каждого PWA, а описательные поля использовать по мере необходимости, исходя из контекста приложения. Кроме того, следует изучить целевые платформы на предмет наличия дополнительных поддерживаемых полей, которые не входят в стандартную спецификацию.

Следуя предыдущей таблице, приведем пример файла manifest.json:

json
{
       "short_name": "Пример PWA",
       "name": "Глава 6: Пример прогрессивного веб-приложения",
       "start_url":"/",
diff --git a/assets/ru_book_Chapter_6__Progressive_Web_Applications.md.BCdJFqes.lean.js b/assets/ru_book_Chapter_6__Progressive_Web_Applications.md.-azuZGY2.lean.js
similarity index 95%
rename from assets/ru_book_Chapter_6__Progressive_Web_Applications.md.BCdJFqes.lean.js
rename to assets/ru_book_Chapter_6__Progressive_Web_Applications.md.-azuZGY2.lean.js
index 7d82c5023..41614cf13 100644
--- a/assets/ru_book_Chapter_6__Progressive_Web_Applications.md.BCdJFqes.lean.js
+++ b/assets/ru_book_Chapter_6__Progressive_Web_Applications.md.-azuZGY2.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const t="/assets/Figure_6.01_B18602.CRzV52bD.jpg",p="/assets/Figure_6.02_B18602.7tBnMfnU.jpg",l="/assets/Figure_6.03_B18602.DzWeXQ7D.jpg",h="/assets/Figure_6.04_B18602.CXYEjuJn.jpg",e="/assets/Figure_6.05_B18602.B30q4bXz.jpg",k="/assets/Figure_6.06_B18602.DEoZmeKA.jpg",r="/assets/Figure_6.07_B18602.TpFAbL_Y.jpg",E="/assets/Figure_6.08_B18602.DeppM780.jpg",_=JSON.parse('{"title":"Прогрессивные веб-приложения","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_6__Progressive_Web_Applications.md","filePath":"ru/book/Chapter_6__Progressive_Web_Applications.md","lastUpdated":1726474804000}'),o={name:"ru/book/Chapter_6__Progressive_Web_Applications.md"},g=n("",123),d=[g];function y(c,F,u,m,A,C){return i(),a("div",null,d)}const b=s(o,[["render",y]]);export{_ as __pageData,b as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const t="/assets/Figure_6.01_B18602.CRzV52bD.jpg",p="/assets/Figure_6.02_B18602.7tBnMfnU.jpg",l="/assets/Figure_6.03_B18602.DzWeXQ7D.jpg",h="/assets/Figure_6.04_B18602.CXYEjuJn.jpg",e="/assets/Figure_6.05_B18602.B30q4bXz.jpg",k="/assets/Figure_6.06_B18602.DEoZmeKA.jpg",r="/assets/Figure_6.07_B18602.TpFAbL_Y.jpg",E="/assets/Figure_6.08_B18602.DeppM780.jpg",_=JSON.parse('{"title":"Прогрессивные веб-приложения","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_6__Progressive_Web_Applications.md","filePath":"ru/book/Chapter_6__Progressive_Web_Applications.md","lastUpdated":1726505115000}'),o={name:"ru/book/Chapter_6__Progressive_Web_Applications.md"},g=n("",123),d=[g];function y(c,F,u,m,A,C){return i(),a("div",null,d)}const b=s(o,[["render",y]]);export{_ as __pageData,b as default};
diff --git a/assets/ru_book_Chapter_7__Data_Flow_Management.md.DNEPK-UR.js b/assets/ru_book_Chapter_7__Data_Flow_Management.md.lve2qBoL.js
similarity index 99%
rename from assets/ru_book_Chapter_7__Data_Flow_Management.md.DNEPK-UR.js
rename to assets/ru_book_Chapter_7__Data_Flow_Management.md.lve2qBoL.js
index f2681f753..3fca59a4a 100644
--- a/assets/ru_book_Chapter_7__Data_Flow_Management.md.DNEPK-UR.js
+++ b/assets/ru_book_Chapter_7__Data_Flow_Management.md.lve2qBoL.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const t="/assets/Figure_7.01_B18602.CjpvAxLb.jpg",h="/assets/Figure_7.02_B18602.wKRrpMJp.jpg",p="/assets/Figure_7.03_B18602.Ce4IQJG6.jpg",k="/assets/Figure_7.04_B18602.WJ7VfpLm.jpg",l="/assets/Figure_7.05_B18602.BOZDEOjM.jpg",e="/assets/Figure_7.06_B18602.Bw4Cg4o1.jpg",r="/assets/Figure_7.07_B18602.DfGP_M2L.jpg",D=JSON.parse('{"title":"Управление потоками данных","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_7__Data_Flow_Management.md","filePath":"ru/book/Chapter_7__Data_Flow_Management.md","lastUpdated":1726474804000}'),E={name:"ru/book/Chapter_7__Data_Flow_Management.md"},g=n('

Управление потоками данных

В предыдущих главах мы сосредоточились на понимании фреймворка Vue 3 и создании контекста для создания веб-приложений. В этой главе мы сосредоточимся на том, как наши компоненты взаимодействуют друг с другом и обмениваются информацией для реализации нашего приложения.

Ранее мы уже вкратце касались этой темы, но теперь мы глубоко погрузимся в некоторые шаблоны, реализуя их рядом друг с другом. Применение соответствующего информационного рабочего процесса - важный навык, который может сделать или разрушить приложение. В частности, мы рассмотрим следующие подходы и примеры кода:

  • Общение между родителями, детьми и братьями (siblings)
  • Реализация шины сообщений с использованием Singleton и Observer шаблонов
  • Реализация базового реактивного состояния с помощью композитных компонентов
  • Реализация централизованного хранилища данных с помощью мощного хранилища Pinia reactive store
  • Обзор предоставляемых браузерами альтернатив для обмена и хранения информации
  • Эксперименты с реактивностью, составными элементами и шаблонами прокси в действии

Как мы уже делали ранее, мы будем строить по одной концепции за раз, увеличивая сложность. К концу этой главы вы увидите наглядные примеры реализации, и сможете решить, когда применять каждую из них, исходя из потребностей вашего приложения.

Некоторые из них больше подходят для небольших приложений, а другие - для больших и сложных. Вы сможете лучше подготовиться к управлению потоком информации для вашего приложения.

Технические требования

В этой главе мы рассмотрим концепции и применим шаблоны для управления связью и потоком информации между компонентами. Вы должны быть в состоянии выполнить код, представленный в этом тексте, но для лучшего понимания и контекстного опыта вам будет полезно ознакомиться с полным кодом приложения для этой главы, доступным в репозитории к этой книге: https://github.com/PacktPublishing/Vue.js-3-Design-Patterns-and-Best-Practices/tree/main/Chapter07.

Если вы начинаете новый проект, просто следуйте инструкциям, как показано в главе 3, Установка рабочего проекта.

Посмотрите следующее видео, чтобы увидеть код в действии.

Основное взаимодействие компонентов

Ранее мы видели, что родительский компонент и его дочерние компоненты имеют довольно простой и понятный способ взаимодействия. Родители передают данные в виде props своим дочерним компонентам, а те поднимают события (emits), чтобы привлечь внимание родителя.

Подобно сопоставимости параметров и аргументов в функциях, props получают простые данные по копии, а сложные типы (объекты, массивы и т.д.) - по ссылке.

Таким образом, мы можем передать от родителя к ребенку обычный объект с функциями-членами, а ребенок будет выполнять эти функции для доступа к данным родителя.

Несмотря на то, что это "работает", это своего рода антипаттерн, поскольку он скрывает отношения и затрудняет понимание потока данных. Правильным способом передачи данных вверх по дереву компонентов являются события (emits).

При этом следует отметить, что дочерние компоненты "не знают" друг друга, то есть не имеют прямого способа взаимодействия между собой. Мы можем передать реактивную переменную и заставить каждый компонент обращаться к ней, и это, конечно, рабочая альтернатива, однако не чистая. В некоторых случаях это дает простое решение, но опять же может привести к скрытым побочным эффектам.

Для того чтобы управлять рабочим процессом данных чистым способом, у нас есть несколько альтернатив, которые следуют хорошей практике и шаблонам проектирования.

Как общее правило и принцип, компонент, объявивший переменную, является ее владельцем, и именно он должен манипулировать ею. Исходя из этого, при самом базовом взаимодействии информация должна храниться и манипулироваться родительским компонентом и передаваться дочерним.

Для распространения информации мы можем использовать реактивную систему Vue. Ключевым моментом здесь является то, что манипулировать ею будет только родительский компонент. Посмотрим, как это работает на практике, на примере реализации небольшого тривиального приложения, как показано на Рисунке 7.1:

image

Рисунок 7.1 - Прямая базовая связь и реактивность

В данном приложении родительский компонент имеет три прямых дочерних компонента и разделяет с ними реактивный счетчик. Все компоненты отображают метку со значением счетчика и имеют кнопку для запуска инкремента, но только родительский компонент выполняет фактические манипуляции с данными. Vue обеспечивает реактивность, то есть когда родительский компонент изменяет значение, дочерние компоненты также получают его. Все достаточно просто - давайте посмотрим, как это реализовано:

/basic/ParentBasic.vue
vue
<script setup> 
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const t="/assets/Figure_7.01_B18602.CjpvAxLb.jpg",h="/assets/Figure_7.02_B18602.wKRrpMJp.jpg",p="/assets/Figure_7.03_B18602.Ce4IQJG6.jpg",k="/assets/Figure_7.04_B18602.WJ7VfpLm.jpg",l="/assets/Figure_7.05_B18602.BOZDEOjM.jpg",e="/assets/Figure_7.06_B18602.Bw4Cg4o1.jpg",r="/assets/Figure_7.07_B18602.DfGP_M2L.jpg",D=JSON.parse('{"title":"Управление потоками данных","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_7__Data_Flow_Management.md","filePath":"ru/book/Chapter_7__Data_Flow_Management.md","lastUpdated":1726505115000}'),E={name:"ru/book/Chapter_7__Data_Flow_Management.md"},g=n('

Управление потоками данных

В предыдущих главах мы сосредоточились на понимании фреймворка Vue 3 и создании контекста для создания веб-приложений. В этой главе мы сосредоточимся на том, как наши компоненты взаимодействуют друг с другом и обмениваются информацией для реализации нашего приложения.

Ранее мы уже вкратце касались этой темы, но теперь мы глубоко погрузимся в некоторые шаблоны, реализуя их рядом друг с другом. Применение соответствующего информационного рабочего процесса - важный навык, который может сделать или разрушить приложение. В частности, мы рассмотрим следующие подходы и примеры кода:

  • Общение между родителями, детьми и братьями (siblings)
  • Реализация шины сообщений с использованием Singleton и Observer шаблонов
  • Реализация базового реактивного состояния с помощью композитных компонентов
  • Реализация централизованного хранилища данных с помощью мощного хранилища Pinia reactive store
  • Обзор предоставляемых браузерами альтернатив для обмена и хранения информации
  • Эксперименты с реактивностью, составными элементами и шаблонами прокси в действии

Как мы уже делали ранее, мы будем строить по одной концепции за раз, увеличивая сложность. К концу этой главы вы увидите наглядные примеры реализации, и сможете решить, когда применять каждую из них, исходя из потребностей вашего приложения.

Некоторые из них больше подходят для небольших приложений, а другие - для больших и сложных. Вы сможете лучше подготовиться к управлению потоком информации для вашего приложения.

Технические требования

В этой главе мы рассмотрим концепции и применим шаблоны для управления связью и потоком информации между компонентами. Вы должны быть в состоянии выполнить код, представленный в этом тексте, но для лучшего понимания и контекстного опыта вам будет полезно ознакомиться с полным кодом приложения для этой главы, доступным в репозитории к этой книге: https://github.com/PacktPublishing/Vue.js-3-Design-Patterns-and-Best-Practices/tree/main/Chapter07.

Если вы начинаете новый проект, просто следуйте инструкциям, как показано в главе 3, Установка рабочего проекта.

Посмотрите следующее видео, чтобы увидеть код в действии.

Основное взаимодействие компонентов

Ранее мы видели, что родительский компонент и его дочерние компоненты имеют довольно простой и понятный способ взаимодействия. Родители передают данные в виде props своим дочерним компонентам, а те поднимают события (emits), чтобы привлечь внимание родителя.

Подобно сопоставимости параметров и аргументов в функциях, props получают простые данные по копии, а сложные типы (объекты, массивы и т.д.) - по ссылке.

Таким образом, мы можем передать от родителя к ребенку обычный объект с функциями-членами, а ребенок будет выполнять эти функции для доступа к данным родителя.

Несмотря на то, что это "работает", это своего рода антипаттерн, поскольку он скрывает отношения и затрудняет понимание потока данных. Правильным способом передачи данных вверх по дереву компонентов являются события (emits).

При этом следует отметить, что дочерние компоненты "не знают" друг друга, то есть не имеют прямого способа взаимодействия между собой. Мы можем передать реактивную переменную и заставить каждый компонент обращаться к ней, и это, конечно, рабочая альтернатива, однако не чистая. В некоторых случаях это дает простое решение, но опять же может привести к скрытым побочным эффектам.

Для того чтобы управлять рабочим процессом данных чистым способом, у нас есть несколько альтернатив, которые следуют хорошей практике и шаблонам проектирования.

Как общее правило и принцип, компонент, объявивший переменную, является ее владельцем, и именно он должен манипулировать ею. Исходя из этого, при самом базовом взаимодействии информация должна храниться и манипулироваться родительским компонентом и передаваться дочерним.

Для распространения информации мы можем использовать реактивную систему Vue. Ключевым моментом здесь является то, что манипулировать ею будет только родительский компонент. Посмотрим, как это работает на практике, на примере реализации небольшого тривиального приложения, как показано на Рисунке 7.1:

image

Рисунок 7.1 - Прямая базовая связь и реактивность

В данном приложении родительский компонент имеет три прямых дочерних компонента и разделяет с ними реактивный счетчик. Все компоненты отображают метку со значением счетчика и имеют кнопку для запуска инкремента, но только родительский компонент выполняет фактические манипуляции с данными. Vue обеспечивает реактивность, то есть когда родительский компонент изменяет значение, дочерние компоненты также получают его. Все достаточно просто - давайте посмотрим, как это реализовано:

/basic/ParentBasic.vue
vue
<script setup> 
 import {ref} from "vue" 
 import ChildComponent from "./Child.vue" 
 const _counter = ref(0);                                  //1 
diff --git a/assets/ru_book_Chapter_7__Data_Flow_Management.md.DNEPK-UR.lean.js b/assets/ru_book_Chapter_7__Data_Flow_Management.md.lve2qBoL.lean.js
similarity index 94%
rename from assets/ru_book_Chapter_7__Data_Flow_Management.md.DNEPK-UR.lean.js
rename to assets/ru_book_Chapter_7__Data_Flow_Management.md.lve2qBoL.lean.js
index ba1c7c256..6fe46ac47 100644
--- a/assets/ru_book_Chapter_7__Data_Flow_Management.md.DNEPK-UR.lean.js
+++ b/assets/ru_book_Chapter_7__Data_Flow_Management.md.lve2qBoL.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const t="/assets/Figure_7.01_B18602.CjpvAxLb.jpg",h="/assets/Figure_7.02_B18602.wKRrpMJp.jpg",p="/assets/Figure_7.03_B18602.Ce4IQJG6.jpg",k="/assets/Figure_7.04_B18602.WJ7VfpLm.jpg",l="/assets/Figure_7.05_B18602.BOZDEOjM.jpg",e="/assets/Figure_7.06_B18602.Bw4Cg4o1.jpg",r="/assets/Figure_7.07_B18602.DfGP_M2L.jpg",D=JSON.parse('{"title":"Управление потоками данных","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_7__Data_Flow_Management.md","filePath":"ru/book/Chapter_7__Data_Flow_Management.md","lastUpdated":1726474804000}'),E={name:"ru/book/Chapter_7__Data_Flow_Management.md"},g=n("",171),d=[g];function o(y,F,c,u,C,A){return i(),a("div",null,d)}const B=s(E,[["render",o]]);export{D as __pageData,B as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const t="/assets/Figure_7.01_B18602.CjpvAxLb.jpg",h="/assets/Figure_7.02_B18602.wKRrpMJp.jpg",p="/assets/Figure_7.03_B18602.Ce4IQJG6.jpg",k="/assets/Figure_7.04_B18602.WJ7VfpLm.jpg",l="/assets/Figure_7.05_B18602.BOZDEOjM.jpg",e="/assets/Figure_7.06_B18602.Bw4Cg4o1.jpg",r="/assets/Figure_7.07_B18602.DfGP_M2L.jpg",D=JSON.parse('{"title":"Управление потоками данных","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_7__Data_Flow_Management.md","filePath":"ru/book/Chapter_7__Data_Flow_Management.md","lastUpdated":1726505115000}'),E={name:"ru/book/Chapter_7__Data_Flow_Management.md"},g=n("",171),d=[g];function o(y,F,c,u,C,A){return i(),a("div",null,d)}const B=s(E,[["render",o]]);export{D as __pageData,B as default};
diff --git a/assets/ru_book_Chapter_8__Multithreading_with_Web_Workers.md.DgbiScY9.js b/assets/ru_book_Chapter_8__Multithreading_with_Web_Workers.md.ObLm-pJC.js
similarity index 99%
rename from assets/ru_book_Chapter_8__Multithreading_with_Web_Workers.md.DgbiScY9.js
rename to assets/ru_book_Chapter_8__Multithreading_with_Web_Workers.md.ObLm-pJC.js
index bfd915b9a..2fc3761bf 100644
--- a/assets/ru_book_Chapter_8__Multithreading_with_Web_Workers.md.DgbiScY9.js
+++ b/assets/ru_book_Chapter_8__Multithreading_with_Web_Workers.md.ObLm-pJC.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const t="/assets/Figure_8.01_B18602.BlVR3Bf6.jpg",h="/assets/Figure_8.02_B18602.d_j1VD_M.jpg",k="/assets/Figure_8.03_B18602.DCvsoXZc.jpg",p="/assets/Figure_8.04_B18602.CHO74ojz.jpg",l="/assets/Figure_8.05_B18602.7UPTcKuU.jpg",e="/assets/Figure_8.06_B18602.CDfTslfk.jpg",r="/assets/Figure_8.07_B18602.IJICYCiX.jpg",E="/assets/Figure_8.08_B18602.B8SITemX.jpg",m=JSON.parse('{"title":"Многопоточность с Web Workers","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_8__Multithreading_with_Web_Workers.md","filePath":"ru/book/Chapter_8__Multithreading_with_Web_Workers.md","lastUpdated":1726474804000}'),g={name:"ru/book/Chapter_8__Multithreading_with_Web_Workers.md"},d=n('

Многопоточность с Web Workers

В этой главе мы рассмотрим важные темы, которые позволят значительно повысить производительность веб-приложений, особенно одностраничных. Во-первых, мы узнаем, как работают веб-сайты и JavaScript, а также как использовать web workers для повышения эффективности вычислительной мощности приложения, доступа к данным и сетевых коммуникаций. Затем мы представим два новых концептуальных шаблона проектирования и реализуем их в примере приложения вместе с другими шаблонами, с которыми мы уже познакомились ранее.

Кроме того, мы представим две библиотеки, которые облегчат нам сетевые коммуникации, а также работу с постоянной базой данных (базами данных) в IndexedDB. Мы также реализуем простой сервер Node.js для обеспечения обратной связи и тестирования нашей работы в архитектуре с высокой степенью разобщенности, где наши фронтенд- и бэкенд-сервисы взаимодействуют с помощью стандартных API по протоколу HTTP.

В этой главе мы рассмотрим следующие темы:

  • Web workers
  • Шаблон проектирования Business delegate
  • Сетевое взаимодействие внутри Web Worker
  • Встроенная база данных браузера - IndexedDB
  • Как построить простой Node.js API-сервер для тестирования

Концепции, изложенные в этой главе, можно считать "продвинутыми", но мы сведем их к понятным фрагментам, которые можно будет сразу же реализовать. К концу этой главы вы будете иметь твердые знания о том, как реализовать многопоточность в своих веб-приложениях, а также эталонный фреймворк для масштабирования и облегчения использования сложных браузерных API.

Технические требования

Эта глава не добавляет дополнительных требований к нашему приложению. Однако мы увидим только соответствующие части кода, поэтому, чтобы увидеть работу всего приложения, следует обратиться к примерам кода для главы 8, Многопоточность с Web Workers, в GitHub-репозитории книги https://github.com/PacktPublishing/Vue.js-3-Design-Patterns-and-Best-Practices/tree/main/Chapter08.

Посмотрите следующее видео, чтобы увидеть код в действии.

Введение в Web workers

JavaScript является однопоточным языком, то есть в нем нет возможности порождать процессы в отдельных потоках. Это заставляет браузеры запускать JavaScript на веб-странице в одном потоке с другими процессами, что напрямую влияет на производительность страницы, в первую очередь на процесс рендеринга, отвечающий за отображение страницы на экране.

Браузер прилагает значительные усилия для оптимизации работы всех этих движущихся частей, чтобы сделать страницу отзывчивой, производительной, быстрой и эффективной. Однако есть задачи, которые веб-приложение должно выполнять на JavaScript, которые являются тяжелыми и потенциально "блокирующими рендеринг".

Это означает, что браузеру придется обратить внимание на результаты работы кода и использовать все ресурсы для завершения выполняемой функции, прежде чем он сможет сосредоточиться на рендеринге (отображении страницы на экране). Если вы обнаружили на веб-странице процесс, из-за которого сайт кажется "неотзывчивым" или "тормозящим" после начала выполнения какого-либо действия (в некоторых случаях мышь может даже застыть), это может быть одной из причин.

Если открыть инструменты разработчика в современном браузере, то можно получить доступ к некоторым инструментам производительности для анализа поведения веб-страницы и времени, которое занимает каждый шаг процесса.

Например, вот быстрый вид первой загрузки YouTube по общей ссылке в Firefox для Linux:

image

Рисунок 8.1 - Производительность первой загрузки YouTube при использовании инструментов разработчика

На предыдущем скриншоте мы увеличили масштаб обработки страницы, показав, что происходит до первого рендеринга, то есть до того, как пользователь увидит что-то на экране. Это представлено в первой строке Скриншоты, где для данного случая первые видимые элементы появляются в конце временной шкалы (#1).

Вторая строка показывает, чем занят основной Parent Process, и если вы обратите внимание, то самая первая секция (#2) посвящена обработке JavaScript. Процесс Renderer , выделенный и отображаемый черной полосой (#3), не может начаться до тех пор, пока не будет запущен JavaScript.

Когда он запускается, он рисует страницу на экране, и вы получаете видимое содержимое из #1. Это дает примерное представление о том, какую работу выполняет браузер в каждом цикле между рисованиями на экране (так называемыми "кадрами"). Браузер старается делать как можно больше кадров в секунду (fps). Чтобы поддерживать 60 кадров в секунду, он должен выполнять всю эту обработку примерно за 16,67 миллисекунды или меньше.

В лучшем случае процесс JavaScript должен быть решен за половину этого времени, чтобы сохранить плавность восприятия для пользователя. Что же происходит, когда обработка JavaScript занимает больше времени? Все просто: процесс рендеринга откладывается, fps падает и может возникнуть застывший пользовательский интерфейс (UI). В зависимости от особенностей вашего веб-приложения это может стать серьезной проблемой.

Вы можете сказать: "Минуточку, а почему бы нам не сделать тяжелые задачи асинхронными? Разве это не решит проблему?". Ответ: и может, и нет. Когда вы объявляете асинхронную функцию, это означает лишь то, что ее выполнение будет отложено до того момента, когда обработка последовательного кода будет завершена.

Скорее всего, это сдвигает асинхронный код к концу или после выполнения последовательного кода, но затем он будет выполняться последовательно, как обычно. Если процесс рендеринга происходит раньше, то вы можете ощутить прирост производительности, но если нет, то вы столкнетесь с той же проблемой, если асинхронная функция будет выполняться дольше (так как это повлияет на следующий рендеринг).

image

Рисунок 8.2 - Представление выполнения асинхронного кода, перенесенного после выполнения последовательного кода (1)

Тогда, если асинхронные операции не решат проблему производительности полностью, как ее решить? Помимо всех возможных оптимизаций, есть одна технология, которую также следует рассматривать в начале списка альтернатив: Web workers API.

Web workers - это JavaScript-скрипты, выполняющиеся в собственном процессе (или потоке, в зависимости от реализации), что позволяет не нарушать родительский процесс, в котором происходит рендеринг.

API браузера предоставляет довольно простой, но эффективный способ связи с родительским процессом и обратно: систему сообщений. Эти сообщения могут передавать только сериализуемые данные. Родительский процесс и каждый web worker работают в своем окружении и в своих границах памяти, поэтому они не могут совместно использовать ссылки или функции, поэтому все данные, передаваемые между ними, должны быть сериализуемыми, поскольку они копируются в каждый процесс.

Хотя это может показаться недостатком, на самом деле при правильном использовании это преимущество, в чем мы вскоре убедимся. Еще одним недостатком этой архитектуры является то, что web workers не имеют доступа к документной объектной модели (DOM) или объектам Window и, соответственно, к любым их сервисам. Однако они имеют доступ к сети и IndexedDB.

image

Рисунок 8.3 - Послойное представление приложения Vue с фоновыми процессами, использующими web workers.

Как видно из предыдущей диаграммы, мы можем инстанцировать несколько web workers для представления различных типов слоев в нашем приложении (Бизнес, Данные, Коммуникация и т.д.). Хотя web worker может запускаться и завершаться из родительского процесса по своему усмотрению, оба эти действия требуют больших вычислительных затрат, поэтому рекомендуется, чтобы созданные web workers оставались активными в течение всего времени работы приложения и обращались к ним по мере необходимости.

Также не рекомендуется злоупотреблять этим ресурсом, создавая "слишком много" web workers, поскольку каждый из них является отдельным процессом со своими собственными ресурсами. Четкого определения того, что такое "слишком много", не существует, поэтому рекомендуется проявлять осторожность. По моему опыту, если количество web workers не превышает однозначных значений, то даже на маломощных устройствах ваше приложение будет работать с отличной производительностью. Как и во многих других вещах, хорошего может быть слишком много, и это относится и к web workers.

Теперь, когда мы знаем, что такое web workers и чем они могут быть полезны, давайте посмотрим, как реализовать их на чистом JavaScript, а затем как сделать это с помощью Vite.

Реализация web worker

Создание web worker на чистом JavaScript довольно простое и понятное. Объект window предоставляет конструктор, правильно названный Worker, который получает в качестве параметра путь к файлу сценария. Например, если учесть, что наш web worker содержится в файле my_worker.js, то создать его можно следующим образом:

js
if (window.Worker) {
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const t="/assets/Figure_8.01_B18602.BlVR3Bf6.jpg",h="/assets/Figure_8.02_B18602.d_j1VD_M.jpg",k="/assets/Figure_8.03_B18602.DCvsoXZc.jpg",p="/assets/Figure_8.04_B18602.CHO74ojz.jpg",l="/assets/Figure_8.05_B18602.7UPTcKuU.jpg",e="/assets/Figure_8.06_B18602.CDfTslfk.jpg",r="/assets/Figure_8.07_B18602.IJICYCiX.jpg",E="/assets/Figure_8.08_B18602.B8SITemX.jpg",m=JSON.parse('{"title":"Многопоточность с Web Workers","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_8__Multithreading_with_Web_Workers.md","filePath":"ru/book/Chapter_8__Multithreading_with_Web_Workers.md","lastUpdated":1726505115000}'),g={name:"ru/book/Chapter_8__Multithreading_with_Web_Workers.md"},d=n('

Многопоточность с Web Workers

В этой главе мы рассмотрим важные темы, которые позволят значительно повысить производительность веб-приложений, особенно одностраничных. Во-первых, мы узнаем, как работают веб-сайты и JavaScript, а также как использовать web workers для повышения эффективности вычислительной мощности приложения, доступа к данным и сетевых коммуникаций. Затем мы представим два новых концептуальных шаблона проектирования и реализуем их в примере приложения вместе с другими шаблонами, с которыми мы уже познакомились ранее.

Кроме того, мы представим две библиотеки, которые облегчат нам сетевые коммуникации, а также работу с постоянной базой данных (базами данных) в IndexedDB. Мы также реализуем простой сервер Node.js для обеспечения обратной связи и тестирования нашей работы в архитектуре с высокой степенью разобщенности, где наши фронтенд- и бэкенд-сервисы взаимодействуют с помощью стандартных API по протоколу HTTP.

В этой главе мы рассмотрим следующие темы:

  • Web workers
  • Шаблон проектирования Business delegate
  • Сетевое взаимодействие внутри Web Worker
  • Встроенная база данных браузера - IndexedDB
  • Как построить простой Node.js API-сервер для тестирования

Концепции, изложенные в этой главе, можно считать "продвинутыми", но мы сведем их к понятным фрагментам, которые можно будет сразу же реализовать. К концу этой главы вы будете иметь твердые знания о том, как реализовать многопоточность в своих веб-приложениях, а также эталонный фреймворк для масштабирования и облегчения использования сложных браузерных API.

Технические требования

Эта глава не добавляет дополнительных требований к нашему приложению. Однако мы увидим только соответствующие части кода, поэтому, чтобы увидеть работу всего приложения, следует обратиться к примерам кода для главы 8, Многопоточность с Web Workers, в GitHub-репозитории книги https://github.com/PacktPublishing/Vue.js-3-Design-Patterns-and-Best-Practices/tree/main/Chapter08.

Посмотрите следующее видео, чтобы увидеть код в действии.

Введение в Web workers

JavaScript является однопоточным языком, то есть в нем нет возможности порождать процессы в отдельных потоках. Это заставляет браузеры запускать JavaScript на веб-странице в одном потоке с другими процессами, что напрямую влияет на производительность страницы, в первую очередь на процесс рендеринга, отвечающий за отображение страницы на экране.

Браузер прилагает значительные усилия для оптимизации работы всех этих движущихся частей, чтобы сделать страницу отзывчивой, производительной, быстрой и эффективной. Однако есть задачи, которые веб-приложение должно выполнять на JavaScript, которые являются тяжелыми и потенциально "блокирующими рендеринг".

Это означает, что браузеру придется обратить внимание на результаты работы кода и использовать все ресурсы для завершения выполняемой функции, прежде чем он сможет сосредоточиться на рендеринге (отображении страницы на экране). Если вы обнаружили на веб-странице процесс, из-за которого сайт кажется "неотзывчивым" или "тормозящим" после начала выполнения какого-либо действия (в некоторых случаях мышь может даже застыть), это может быть одной из причин.

Если открыть инструменты разработчика в современном браузере, то можно получить доступ к некоторым инструментам производительности для анализа поведения веб-страницы и времени, которое занимает каждый шаг процесса.

Например, вот быстрый вид первой загрузки YouTube по общей ссылке в Firefox для Linux:

image

Рисунок 8.1 - Производительность первой загрузки YouTube при использовании инструментов разработчика

На предыдущем скриншоте мы увеличили масштаб обработки страницы, показав, что происходит до первого рендеринга, то есть до того, как пользователь увидит что-то на экране. Это представлено в первой строке Скриншоты, где для данного случая первые видимые элементы появляются в конце временной шкалы (#1).

Вторая строка показывает, чем занят основной Parent Process, и если вы обратите внимание, то самая первая секция (#2) посвящена обработке JavaScript. Процесс Renderer , выделенный и отображаемый черной полосой (#3), не может начаться до тех пор, пока не будет запущен JavaScript.

Когда он запускается, он рисует страницу на экране, и вы получаете видимое содержимое из #1. Это дает примерное представление о том, какую работу выполняет браузер в каждом цикле между рисованиями на экране (так называемыми "кадрами"). Браузер старается делать как можно больше кадров в секунду (fps). Чтобы поддерживать 60 кадров в секунду, он должен выполнять всю эту обработку примерно за 16,67 миллисекунды или меньше.

В лучшем случае процесс JavaScript должен быть решен за половину этого времени, чтобы сохранить плавность восприятия для пользователя. Что же происходит, когда обработка JavaScript занимает больше времени? Все просто: процесс рендеринга откладывается, fps падает и может возникнуть застывший пользовательский интерфейс (UI). В зависимости от особенностей вашего веб-приложения это может стать серьезной проблемой.

Вы можете сказать: "Минуточку, а почему бы нам не сделать тяжелые задачи асинхронными? Разве это не решит проблему?". Ответ: и может, и нет. Когда вы объявляете асинхронную функцию, это означает лишь то, что ее выполнение будет отложено до того момента, когда обработка последовательного кода будет завершена.

Скорее всего, это сдвигает асинхронный код к концу или после выполнения последовательного кода, но затем он будет выполняться последовательно, как обычно. Если процесс рендеринга происходит раньше, то вы можете ощутить прирост производительности, но если нет, то вы столкнетесь с той же проблемой, если асинхронная функция будет выполняться дольше (так как это повлияет на следующий рендеринг).

image

Рисунок 8.2 - Представление выполнения асинхронного кода, перенесенного после выполнения последовательного кода (1)

Тогда, если асинхронные операции не решат проблему производительности полностью, как ее решить? Помимо всех возможных оптимизаций, есть одна технология, которую также следует рассматривать в начале списка альтернатив: Web workers API.

Web workers - это JavaScript-скрипты, выполняющиеся в собственном процессе (или потоке, в зависимости от реализации), что позволяет не нарушать родительский процесс, в котором происходит рендеринг.

API браузера предоставляет довольно простой, но эффективный способ связи с родительским процессом и обратно: систему сообщений. Эти сообщения могут передавать только сериализуемые данные. Родительский процесс и каждый web worker работают в своем окружении и в своих границах памяти, поэтому они не могут совместно использовать ссылки или функции, поэтому все данные, передаваемые между ними, должны быть сериализуемыми, поскольку они копируются в каждый процесс.

Хотя это может показаться недостатком, на самом деле при правильном использовании это преимущество, в чем мы вскоре убедимся. Еще одним недостатком этой архитектуры является то, что web workers не имеют доступа к документной объектной модели (DOM) или объектам Window и, соответственно, к любым их сервисам. Однако они имеют доступ к сети и IndexedDB.

image

Рисунок 8.3 - Послойное представление приложения Vue с фоновыми процессами, использующими web workers.

Как видно из предыдущей диаграммы, мы можем инстанцировать несколько web workers для представления различных типов слоев в нашем приложении (Бизнес, Данные, Коммуникация и т.д.). Хотя web worker может запускаться и завершаться из родительского процесса по своему усмотрению, оба эти действия требуют больших вычислительных затрат, поэтому рекомендуется, чтобы созданные web workers оставались активными в течение всего времени работы приложения и обращались к ним по мере необходимости.

Также не рекомендуется злоупотреблять этим ресурсом, создавая "слишком много" web workers, поскольку каждый из них является отдельным процессом со своими собственными ресурсами. Четкого определения того, что такое "слишком много", не существует, поэтому рекомендуется проявлять осторожность. По моему опыту, если количество web workers не превышает однозначных значений, то даже на маломощных устройствах ваше приложение будет работать с отличной производительностью. Как и во многих других вещах, хорошего может быть слишком много, и это относится и к web workers.

Теперь, когда мы знаем, что такое web workers и чем они могут быть полезны, давайте посмотрим, как реализовать их на чистом JavaScript, а затем как сделать это с помощью Vite.

Реализация web worker

Создание web worker на чистом JavaScript довольно простое и понятное. Объект window предоставляет конструктор, правильно названный Worker, который получает в качестве параметра путь к файлу сценария. Например, если учесть, что наш web worker содержится в файле my_worker.js, то создать его можно следующим образом:

js
if (window.Worker) {
     let my_worker = new Worker("my_worker.js")
      ...
 }

Достаточно просто, если конструктор существует в объекте window, то мы просто создаем нового web worker, обращающегося к конструктору напрямую. Вновь созданный web worker предоставляет простой API:

  • .postMessage(message): Отправить сообщение на web worker. Это может быть любой тип данных, который может быть сериализован (основные типы данных, массивы, объекты и т.д.).
  • .onmessage(callback(event)): Это событие срабатывает, когда web worker получает сообщение от родительского процесса. Полученное событие имеет поле .data, которое содержит сообщение/данные, переданные web worker.
  • .onerror(callback(event)): При возникновении ошибки в web worker, срабатывает это событие, которое будет содержать следующие поля:
    • .filename: Имя файла скрипта, сгенерировавшего ошибку.
    • .lineno: Номер строки, на которой произошла ошибка.
    • .message: Строка, содержащая описание ошибки.

Эта система обмена сообщениями позволяет нам осуществлять то, что в противном случае могло бы быть очень сложной формой межпроцессного взаимодействия (IPC). После ее внедрения наш предыдущий код должен выглядеть следующим образом:

js
let my_worker = new Worker("my_worker.js")
diff --git a/assets/ru_book_Chapter_8__Multithreading_with_Web_Workers.md.DgbiScY9.lean.js b/assets/ru_book_Chapter_8__Multithreading_with_Web_Workers.md.ObLm-pJC.lean.js
similarity index 95%
rename from assets/ru_book_Chapter_8__Multithreading_with_Web_Workers.md.DgbiScY9.lean.js
rename to assets/ru_book_Chapter_8__Multithreading_with_Web_Workers.md.ObLm-pJC.lean.js
index 24a99137b..40c5d63e3 100644
--- a/assets/ru_book_Chapter_8__Multithreading_with_Web_Workers.md.DgbiScY9.lean.js
+++ b/assets/ru_book_Chapter_8__Multithreading_with_Web_Workers.md.ObLm-pJC.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const t="/assets/Figure_8.01_B18602.BlVR3Bf6.jpg",h="/assets/Figure_8.02_B18602.d_j1VD_M.jpg",k="/assets/Figure_8.03_B18602.DCvsoXZc.jpg",p="/assets/Figure_8.04_B18602.CHO74ojz.jpg",l="/assets/Figure_8.05_B18602.7UPTcKuU.jpg",e="/assets/Figure_8.06_B18602.CDfTslfk.jpg",r="/assets/Figure_8.07_B18602.IJICYCiX.jpg",E="/assets/Figure_8.08_B18602.B8SITemX.jpg",m=JSON.parse('{"title":"Многопоточность с Web Workers","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_8__Multithreading_with_Web_Workers.md","filePath":"ru/book/Chapter_8__Multithreading_with_Web_Workers.md","lastUpdated":1726474804000}'),g={name:"ru/book/Chapter_8__Multithreading_with_Web_Workers.md"},d=n("",181),o=[d];function y(F,c,u,A,D,C){return i(),a("div",null,o)}const b=s(g,[["render",y]]);export{m as __pageData,b as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const t="/assets/Figure_8.01_B18602.BlVR3Bf6.jpg",h="/assets/Figure_8.02_B18602.d_j1VD_M.jpg",k="/assets/Figure_8.03_B18602.DCvsoXZc.jpg",p="/assets/Figure_8.04_B18602.CHO74ojz.jpg",l="/assets/Figure_8.05_B18602.7UPTcKuU.jpg",e="/assets/Figure_8.06_B18602.CDfTslfk.jpg",r="/assets/Figure_8.07_B18602.IJICYCiX.jpg",E="/assets/Figure_8.08_B18602.B8SITemX.jpg",m=JSON.parse('{"title":"Многопоточность с Web Workers","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_8__Multithreading_with_Web_Workers.md","filePath":"ru/book/Chapter_8__Multithreading_with_Web_Workers.md","lastUpdated":1726505115000}'),g={name:"ru/book/Chapter_8__Multithreading_with_Web_Workers.md"},d=n("",181),o=[d];function y(F,c,u,A,D,C){return i(),a("div",null,o)}const b=s(g,[["render",y]]);export{m as __pageData,b as default};
diff --git a/assets/ru_book_Chapter_9__Testing_and_Source_Control.md.BvPYWp4L.js b/assets/ru_book_Chapter_9__Testing_and_Source_Control.md.B2ka1wZz.js
similarity index 99%
rename from assets/ru_book_Chapter_9__Testing_and_Source_Control.md.BvPYWp4L.js
rename to assets/ru_book_Chapter_9__Testing_and_Source_Control.md.B2ka1wZz.js
index f1da8d45b..f50ee9312 100644
--- a/assets/ru_book_Chapter_9__Testing_and_Source_Control.md.BvPYWp4L.js
+++ b/assets/ru_book_Chapter_9__Testing_and_Source_Control.md.B2ka1wZz.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/Figure_9.01_B18602.Dz-I3RE-.jpg",p="/assets/Figure_9.02_B18602.CR6r6ncp.jpg",e="/assets/Figure_9.03_B18602.7fxoQP2P.jpg",h="/assets/Figure_9.04_B18602.C-moe6x5.jpg",l="/assets/Figure_9.05_B18602.rrwqvj9T.jpg",k="/assets/Figure_9.06_B18602.DhAAIlAy.jpg",r="/assets/Figure_9.07_B18602.BHFhZoN0.jpg",o="/assets/Figure_9.08_B18602.x14vDZGD.jpg",g="/assets/Figure_9.09_B18602.D7ypPzZ3.jpg",d="/assets/Figure_9.10_B18602.B--aQiAY.jpg",c="/assets/Figure_9.11_B18602.BfKJteyC.jpg",_=JSON.parse('{"title":"Тестирование и системы контроля версий","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_9__Testing_and_Source_Control.md","filePath":"ru/book/Chapter_9__Testing_and_Source_Control.md","lastUpdated":1726474804000}'),E={name:"ru/book/Chapter_9__Testing_and_Source_Control.md"},F=t('

Тестирование и системы контроля версий

Успех нашего приложения зависит от многих факторов, помимо качества организации кода или паттернов. Более того, сама природа программного обеспечения подразумевает, что во время и после разработки будут происходить изменения, меняться требования, область применения и т.д.

С каждой разработанной функцией в программное обеспечение вносится элемент сложности, создающий взаимосвязи и зависимости. Новые включения могут нарушить эти связи и внести разрывные изменения, привести к ошибкам или даже полностью вывести систему из строя.

Решением этой проблемы является отслеживание изменений кода и проведение тестов приложения для выявления проблем и максимального обеспечения соответствия системы желаемым атрибутам ПО и удовлетворения требований.

В этой главе мы рассмотрим, как можно более точно определить, что происходит в системе.

  • Различные подходы к тестированию и концепция тестовой разработки (TDD)
  • Установка тестового пакета (Vitest) и инструментов тестирования (Vue Test Utils) для нашего проекта
  • Создание и запуск тестов на существующем проекте для синхронного и асинхронного кода
  • Тестирование наших компонентов с помощью симуляции взаимодействия с пользователем
  • Установка и управление нашим исходным кодом с помощью Git и онлайн-репозиториев, таких как GitHub или GitLab

Представленные в этой главе концепции являются введением в важные профессиональные навыки разработчика, обеспечивающие создание качественного программного обеспечения.

Часто эти задачи остаются в стороне или отходят на второй план. Однако их отсутствие может привести к дорогостоящим ошибкам и длительному переутомлению по мере роста сложности программного обеспечения.

Для нетривиальных приложений, в которых задействовано более одного разработчика, в настоящее время вряд ли можно представить себе проект, в котором не использовались бы некоторые из этих инструментов.

В этой главе мы сосредоточимся на Unit testing и инструментах, предоставляемых командой Vue для его выполнения.

Технические требования

Эта глава не имеет дополнительных требований по сравнению с предыдущими реализациями примеров кода. Окончательный исходный код можно найти в официальном репозитории этой книги по адресу https://github.com/PacktPublishing/Vue.js-3-Design-Patterns-and-Best-Practices/tree/main/Chapter09.

Посмотрите следующее видео, чтобы увидеть код в действии.

Что такое тестирование и TDD

Тестирование - это процесс проверки того, что программное обеспечение делает то, что должно делать, в соответствии с требованиями проекта.

Оно включает в себя ручное или автоматизированное выполнение инструментов для оценки и измерения различных свойств и атрибутов программного обеспечения, выявления ошибок и багов и предоставления обратной связи разработчикам для принятия мер по их устранению.

Существует множество различных подходов и типов выполняемых тестов, например, следующие:

  • Unit testing: при этом соответствующие единицы исходного кода проверяются на соответствие ряду входных и выходных данных. Часто оно автоматизировано.
  • Интеграционное тестирование: Все компоненты системы проверяются вместе как единое целое, при этом ищутся ошибки и недочеты в интеграции, взаимодействии и т.д.
  • End-to-end (e2e) testing: предполагает полную проверку приложения, имитирующую его использование в реальных условиях, взаимодействие с базами данных, сетевые сценарии и т.д. Оно может проводиться как с помощью автоматизированных средств, имитирующих взаимодействие с человеком, так и вручную с использованием реальных пользователей.

Перечисленные виды тестирования - лишь малая часть этой дисциплины, поскольку существуют сотни возможных тестов, которые можно применить к программному обеспечению. В крупных компаниях могут существовать целые группы тестирования, занимающиеся обеспечением качества программного обеспечения.

Как правило, чем сложнее программное обеспечение, тем сложнее может быть и тестирование. На практике план тестирования может быть не менее сложным, чем сам план разработки. Как уже говорилось во введении, мы остановимся на официальных инструментах, предоставляемых командой Vue для решения этой задачи.

Тестирование может проводиться до, во время, после или параллельно с разработкой. TDD - это дисциплина, которая возлагает бремя тестирования как можно раньше в проекте, даже до начала фактического кодирования, с целью соответствия требованиям. Она включает в себя следующие этапы:

  1. Написание тестового случая, основанного на требованиях и дизайне приложения, с указанием ключевых входов и ожидаемых выходов.
  2. Запуск теста, который должен завершиться неудачей (поскольку код еще не написан).
  3. Напишите реальный код для тестирования (функцию, компонент Vue и т.д.).
  4. Запустите тест на созданном коде. В случае неудачи рефакторингуйте код или дизайн.
  5. Начните с нового тестового случая для следующего блока.

Этот процесс повторяется, и ожидается, что он обеспечит разработчикам значительное сокращение "багов" и ошибок и поможет им сосредоточиться на требованиях. Правда, это требует дополнительных усилий на ранних этапах проекта, в отличие от рефакторинга, когда тесты выполняются в конце.

TDD стал популярным в некоторых командах и с некоторыми фреймворками, и предполагается, что он поможет разработчикам улучшить свой собственный код, поскольку они теперь приобретают "тестирующее" мышление. Однако специальных исследований, подтверждающих это, не проводилось, но практикующие эту дисциплину отмечают, что она улучшила их код и дизайн. В связи с этим, конечно же, возникает вопрос: что нужно тестировать и как можно оптимизировать эту задачу в нашем рабочем процессе? Именно эту тему мы и рассмотрим далее.

Что тестировать

Одним из ключевых факторов успеха хорошего плана тестирования и его реализации является решение вопроса о том, что тестировать. Невозможно протестировать всю совокупность возможностей или 100% компонентов и взаимодействий в проекте с учетом внутренних и внешних факторов.

Даже попытка полностью охватить все возможности будет невероятно дорогой и практически невозможной. Вместо этого необходимо сосредоточиться на реальных возможностях того, что можно протестировать в рамках наших временных и бюджетных ограничений, тщательно отобрав нетривиальные элементы, которые "делают или ломают" наши требования к проекту. Зачастую это нелегкая задача.

Когда речь идет о Vue-приложениях, нам необходимо сосредоточиться на важнейших сервисах и компонентах, выполняющих ключевые операции. Нам необходимо протестировать следующее:

  • Сервисы: Самостоятельные функции, как синхронные, так и асинхронные. Функции, которые не возвращают значения, но выполняют логические процедуры, будут служить для другого вида тестирования, чем то, которое мы рассмотрим здесь. Они будут связаны с имитацией сетевых взаимодействий или вызовов баз данных, политик приложения и т.д. Однако принципы их тестирования схожи.
  • Компоненты: Нам необходимо тестировать входы (props) и выходы (events и HTML). Компоненты более высокого уровня, объединяющие другие компоненты для выполнения рабочего процесса или бизнес-логики, также могут быть протестированы аналогичным образом (props, events и HTML-вывод). Однако для них также потребуются другие виды тестирования, например, end-to-end тестирование.

Мы можем написать собственные функции и инструменты для выполнения тестов, но, за исключением некоторых крайних случаев, очевидной рекомендацией является использование стабильных тестовых наборов и инструментов.

В нашем случае для Vue существуют официальные ресурсы, предоставляемые той же командой, под названием Vitest и Vue Test Utils.

Использование тестового пакета/библиотеки имеет множество преимуществ, схожих с использованием фреймворка или библиотеки при "обычной" разработке приложения. Пожалуй, одно из главных преимуществ связано с DX, или Developer eXperience, поскольку они оптимизируют и облегчают процесс разработки, а в лучшем случае - делают его более легким.

Давайте научимся применять эти инструменты в нашем рабочем процессе на примере приложения, которое мы рассмотрим в следующем разделе.

Наш базовый пример приложения

Понимать дисциплину тестирования и знакомиться с инструментами лучше всего, применяя их на практике в реальном проекте. В качестве учебного упражнения мы сначала возьмем работающее приложение, основанное на одном из примеров, представленных в главе 2, Принципы и паттерны проектирования программного обеспечения.

Мы создадим калькулятор Фибоначчи и установим в проект тестовый пакет Vitest и утилиты Vue Testing Utils. Позже мы объясним, что изменится в этом подходе при применении дисциплины TDD.

Код этого приложения можно найти в репозитории к этой главе. После загрузки необходимо выполнить следующую команду для установки зависимостей:

sh
$ npm install

Для запуска приложения необходимо выполнить следующие действия:

sh
$ npm run start

После того как сервер будет готов, при загрузке сайта в браузере должно появиться приложение следующего вида:

image

Рисунок 9.1 - Пример приложения с калькулятором Фибоначчи

Данное приложение создано с целью изучения основ тестирования функций и компонентов, поэтому оно является очень базовым, но достаточным. Нам представлен один служебный файл (/src/services/Fibonacci.js) и три компонента: App.vue, FibonacciInput.vue и FibonacciOutput.vue.

image

Рисунок 9.2 - Компоненты и сервис для приложения

Наш компонент уровня приложения, App.vue, получает от FibonacciInput.vue целое положительное число через событие, которое передает в качестве входного props в FibonacciOutput.vue.

Этот компонент использует сервис Fibonacci.js для вычисления соответствующего числа Фибоначчи, входящего в серию, и представления его пользователю. Как бы просто ни звучало это приложение, оно дает нам базовые примеры для создания тестов для наиболее распространенных случаев, что позволит нам взять уверенный старт. Теперь настало время установить наш тестовый пакет.

Установка и использование Vitest

Vitest - это тестовый пакет, то есть он предоставляет из коробки набор инструментов и фреймворк для выполнения тестов в нашем коде. Разработанный командами Vue и Vite, он легко интегрируется с Vite, даже имеет одну и ту же конфигурацию и уважает организацию друг друга.

Vitest можно выбрать при создании проекта Vue, выбрав соответствующую опцию в мастере создания - эта задача добавит папку /src/tests, несколько примеров и несколько дополнительных записей в наш файл package.json.

Но вся эта шаблонная информация может несколько сбить с толку, если у нас нет опыта работы в этой области. Вместо этого мы начнем с уже созданного проекта и установим Vitest в качестве зависимости разработки - задача, которая позволит нам понять, как он работает и организован.

Установите Vitest из командной строки в корневой каталог проекта с помощью следующей команды:

sh
$ npm install -D vitest

Менеджер пакетов потратит некоторое время на включение Vitest и всех необходимых зависимостей, но не изменит наш исходный код и его организации.

Для удобства мы будем использовать npm и для запуска наших тестов, поэтому нам нужно открыть наш файл package.json и в секции scripts ввести следующие строки, чтобы секция выглядела следующим образом:

json
"scripts": {
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/Figure_9.01_B18602.Dz-I3RE-.jpg",p="/assets/Figure_9.02_B18602.CR6r6ncp.jpg",e="/assets/Figure_9.03_B18602.7fxoQP2P.jpg",h="/assets/Figure_9.04_B18602.C-moe6x5.jpg",l="/assets/Figure_9.05_B18602.rrwqvj9T.jpg",k="/assets/Figure_9.06_B18602.DhAAIlAy.jpg",r="/assets/Figure_9.07_B18602.BHFhZoN0.jpg",o="/assets/Figure_9.08_B18602.x14vDZGD.jpg",g="/assets/Figure_9.09_B18602.D7ypPzZ3.jpg",d="/assets/Figure_9.10_B18602.B--aQiAY.jpg",c="/assets/Figure_9.11_B18602.BfKJteyC.jpg",_=JSON.parse('{"title":"Тестирование и системы контроля версий","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_9__Testing_and_Source_Control.md","filePath":"ru/book/Chapter_9__Testing_and_Source_Control.md","lastUpdated":1726505115000}'),E={name:"ru/book/Chapter_9__Testing_and_Source_Control.md"},F=t('

Тестирование и системы контроля версий

Успех нашего приложения зависит от многих факторов, помимо качества организации кода или паттернов. Более того, сама природа программного обеспечения подразумевает, что во время и после разработки будут происходить изменения, меняться требования, область применения и т.д.

С каждой разработанной функцией в программное обеспечение вносится элемент сложности, создающий взаимосвязи и зависимости. Новые включения могут нарушить эти связи и внести разрывные изменения, привести к ошибкам или даже полностью вывести систему из строя.

Решением этой проблемы является отслеживание изменений кода и проведение тестов приложения для выявления проблем и максимального обеспечения соответствия системы желаемым атрибутам ПО и удовлетворения требований.

В этой главе мы рассмотрим, как можно более точно определить, что происходит в системе.

  • Различные подходы к тестированию и концепция тестовой разработки (TDD)
  • Установка тестового пакета (Vitest) и инструментов тестирования (Vue Test Utils) для нашего проекта
  • Создание и запуск тестов на существующем проекте для синхронного и асинхронного кода
  • Тестирование наших компонентов с помощью симуляции взаимодействия с пользователем
  • Установка и управление нашим исходным кодом с помощью Git и онлайн-репозиториев, таких как GitHub или GitLab

Представленные в этой главе концепции являются введением в важные профессиональные навыки разработчика, обеспечивающие создание качественного программного обеспечения.

Часто эти задачи остаются в стороне или отходят на второй план. Однако их отсутствие может привести к дорогостоящим ошибкам и длительному переутомлению по мере роста сложности программного обеспечения.

Для нетривиальных приложений, в которых задействовано более одного разработчика, в настоящее время вряд ли можно представить себе проект, в котором не использовались бы некоторые из этих инструментов.

В этой главе мы сосредоточимся на Unit testing и инструментах, предоставляемых командой Vue для его выполнения.

Технические требования

Эта глава не имеет дополнительных требований по сравнению с предыдущими реализациями примеров кода. Окончательный исходный код можно найти в официальном репозитории этой книги по адресу https://github.com/PacktPublishing/Vue.js-3-Design-Patterns-and-Best-Practices/tree/main/Chapter09.

Посмотрите следующее видео, чтобы увидеть код в действии.

Что такое тестирование и TDD

Тестирование - это процесс проверки того, что программное обеспечение делает то, что должно делать, в соответствии с требованиями проекта.

Оно включает в себя ручное или автоматизированное выполнение инструментов для оценки и измерения различных свойств и атрибутов программного обеспечения, выявления ошибок и багов и предоставления обратной связи разработчикам для принятия мер по их устранению.

Существует множество различных подходов и типов выполняемых тестов, например, следующие:

  • Unit testing: при этом соответствующие единицы исходного кода проверяются на соответствие ряду входных и выходных данных. Часто оно автоматизировано.
  • Интеграционное тестирование: Все компоненты системы проверяются вместе как единое целое, при этом ищутся ошибки и недочеты в интеграции, взаимодействии и т.д.
  • End-to-end (e2e) testing: предполагает полную проверку приложения, имитирующую его использование в реальных условиях, взаимодействие с базами данных, сетевые сценарии и т.д. Оно может проводиться как с помощью автоматизированных средств, имитирующих взаимодействие с человеком, так и вручную с использованием реальных пользователей.

Перечисленные виды тестирования - лишь малая часть этой дисциплины, поскольку существуют сотни возможных тестов, которые можно применить к программному обеспечению. В крупных компаниях могут существовать целые группы тестирования, занимающиеся обеспечением качества программного обеспечения.

Как правило, чем сложнее программное обеспечение, тем сложнее может быть и тестирование. На практике план тестирования может быть не менее сложным, чем сам план разработки. Как уже говорилось во введении, мы остановимся на официальных инструментах, предоставляемых командой Vue для решения этой задачи.

Тестирование может проводиться до, во время, после или параллельно с разработкой. TDD - это дисциплина, которая возлагает бремя тестирования как можно раньше в проекте, даже до начала фактического кодирования, с целью соответствия требованиям. Она включает в себя следующие этапы:

  1. Написание тестового случая, основанного на требованиях и дизайне приложения, с указанием ключевых входов и ожидаемых выходов.
  2. Запуск теста, который должен завершиться неудачей (поскольку код еще не написан).
  3. Напишите реальный код для тестирования (функцию, компонент Vue и т.д.).
  4. Запустите тест на созданном коде. В случае неудачи рефакторингуйте код или дизайн.
  5. Начните с нового тестового случая для следующего блока.

Этот процесс повторяется, и ожидается, что он обеспечит разработчикам значительное сокращение "багов" и ошибок и поможет им сосредоточиться на требованиях. Правда, это требует дополнительных усилий на ранних этапах проекта, в отличие от рефакторинга, когда тесты выполняются в конце.

TDD стал популярным в некоторых командах и с некоторыми фреймворками, и предполагается, что он поможет разработчикам улучшить свой собственный код, поскольку они теперь приобретают "тестирующее" мышление. Однако специальных исследований, подтверждающих это, не проводилось, но практикующие эту дисциплину отмечают, что она улучшила их код и дизайн. В связи с этим, конечно же, возникает вопрос: что нужно тестировать и как можно оптимизировать эту задачу в нашем рабочем процессе? Именно эту тему мы и рассмотрим далее.

Что тестировать

Одним из ключевых факторов успеха хорошего плана тестирования и его реализации является решение вопроса о том, что тестировать. Невозможно протестировать всю совокупность возможностей или 100% компонентов и взаимодействий в проекте с учетом внутренних и внешних факторов.

Даже попытка полностью охватить все возможности будет невероятно дорогой и практически невозможной. Вместо этого необходимо сосредоточиться на реальных возможностях того, что можно протестировать в рамках наших временных и бюджетных ограничений, тщательно отобрав нетривиальные элементы, которые "делают или ломают" наши требования к проекту. Зачастую это нелегкая задача.

Когда речь идет о Vue-приложениях, нам необходимо сосредоточиться на важнейших сервисах и компонентах, выполняющих ключевые операции. Нам необходимо протестировать следующее:

  • Сервисы: Самостоятельные функции, как синхронные, так и асинхронные. Функции, которые не возвращают значения, но выполняют логические процедуры, будут служить для другого вида тестирования, чем то, которое мы рассмотрим здесь. Они будут связаны с имитацией сетевых взаимодействий или вызовов баз данных, политик приложения и т.д. Однако принципы их тестирования схожи.
  • Компоненты: Нам необходимо тестировать входы (props) и выходы (events и HTML). Компоненты более высокого уровня, объединяющие другие компоненты для выполнения рабочего процесса или бизнес-логики, также могут быть протестированы аналогичным образом (props, events и HTML-вывод). Однако для них также потребуются другие виды тестирования, например, end-to-end тестирование.

Мы можем написать собственные функции и инструменты для выполнения тестов, но, за исключением некоторых крайних случаев, очевидной рекомендацией является использование стабильных тестовых наборов и инструментов.

В нашем случае для Vue существуют официальные ресурсы, предоставляемые той же командой, под названием Vitest и Vue Test Utils.

Использование тестового пакета/библиотеки имеет множество преимуществ, схожих с использованием фреймворка или библиотеки при "обычной" разработке приложения. Пожалуй, одно из главных преимуществ связано с DX, или Developer eXperience, поскольку они оптимизируют и облегчают процесс разработки, а в лучшем случае - делают его более легким.

Давайте научимся применять эти инструменты в нашем рабочем процессе на примере приложения, которое мы рассмотрим в следующем разделе.

Наш базовый пример приложения

Понимать дисциплину тестирования и знакомиться с инструментами лучше всего, применяя их на практике в реальном проекте. В качестве учебного упражнения мы сначала возьмем работающее приложение, основанное на одном из примеров, представленных в главе 2, Принципы и паттерны проектирования программного обеспечения.

Мы создадим калькулятор Фибоначчи и установим в проект тестовый пакет Vitest и утилиты Vue Testing Utils. Позже мы объясним, что изменится в этом подходе при применении дисциплины TDD.

Код этого приложения можно найти в репозитории к этой главе. После загрузки необходимо выполнить следующую команду для установки зависимостей:

sh
$ npm install

Для запуска приложения необходимо выполнить следующие действия:

sh
$ npm run start

После того как сервер будет готов, при загрузке сайта в браузере должно появиться приложение следующего вида:

image

Рисунок 9.1 - Пример приложения с калькулятором Фибоначчи

Данное приложение создано с целью изучения основ тестирования функций и компонентов, поэтому оно является очень базовым, но достаточным. Нам представлен один служебный файл (/src/services/Fibonacci.js) и три компонента: App.vue, FibonacciInput.vue и FibonacciOutput.vue.

image

Рисунок 9.2 - Компоненты и сервис для приложения

Наш компонент уровня приложения, App.vue, получает от FibonacciInput.vue целое положительное число через событие, которое передает в качестве входного props в FibonacciOutput.vue.

Этот компонент использует сервис Fibonacci.js для вычисления соответствующего числа Фибоначчи, входящего в серию, и представления его пользователю. Как бы просто ни звучало это приложение, оно дает нам базовые примеры для создания тестов для наиболее распространенных случаев, что позволит нам взять уверенный старт. Теперь настало время установить наш тестовый пакет.

Установка и использование Vitest

Vitest - это тестовый пакет, то есть он предоставляет из коробки набор инструментов и фреймворк для выполнения тестов в нашем коде. Разработанный командами Vue и Vite, он легко интегрируется с Vite, даже имеет одну и ту же конфигурацию и уважает организацию друг друга.

Vitest можно выбрать при создании проекта Vue, выбрав соответствующую опцию в мастере создания - эта задача добавит папку /src/tests, несколько примеров и несколько дополнительных записей в наш файл package.json.

Но вся эта шаблонная информация может несколько сбить с толку, если у нас нет опыта работы в этой области. Вместо этого мы начнем с уже созданного проекта и установим Vitest в качестве зависимости разработки - задача, которая позволит нам понять, как он работает и организован.

Установите Vitest из командной строки в корневой каталог проекта с помощью следующей команды:

sh
$ npm install -D vitest

Менеджер пакетов потратит некоторое время на включение Vitest и всех необходимых зависимостей, но не изменит наш исходный код и его организации.

Для удобства мы будем использовать npm и для запуска наших тестов, поэтому нам нужно открыть наш файл package.json и в секции scripts ввести следующие строки, чтобы секция выглядела следующим образом:

json
"scripts": {
       "start": "vite",
       "build": "vite build",
       "preview": "vite preview",
diff --git a/assets/ru_book_Chapter_9__Testing_and_Source_Control.md.BvPYWp4L.lean.js b/assets/ru_book_Chapter_9__Testing_and_Source_Control.md.B2ka1wZz.lean.js
similarity index 95%
rename from assets/ru_book_Chapter_9__Testing_and_Source_Control.md.BvPYWp4L.lean.js
rename to assets/ru_book_Chapter_9__Testing_and_Source_Control.md.B2ka1wZz.lean.js
index c758f6182..32e7760f8 100644
--- a/assets/ru_book_Chapter_9__Testing_and_Source_Control.md.BvPYWp4L.lean.js
+++ b/assets/ru_book_Chapter_9__Testing_and_Source_Control.md.B2ka1wZz.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/Figure_9.01_B18602.Dz-I3RE-.jpg",p="/assets/Figure_9.02_B18602.CR6r6ncp.jpg",e="/assets/Figure_9.03_B18602.7fxoQP2P.jpg",h="/assets/Figure_9.04_B18602.C-moe6x5.jpg",l="/assets/Figure_9.05_B18602.rrwqvj9T.jpg",k="/assets/Figure_9.06_B18602.DhAAIlAy.jpg",r="/assets/Figure_9.07_B18602.BHFhZoN0.jpg",o="/assets/Figure_9.08_B18602.x14vDZGD.jpg",g="/assets/Figure_9.09_B18602.D7ypPzZ3.jpg",d="/assets/Figure_9.10_B18602.B--aQiAY.jpg",c="/assets/Figure_9.11_B18602.BfKJteyC.jpg",_=JSON.parse('{"title":"Тестирование и системы контроля версий","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_9__Testing_and_Source_Control.md","filePath":"ru/book/Chapter_9__Testing_and_Source_Control.md","lastUpdated":1726474804000}'),E={name:"ru/book/Chapter_9__Testing_and_Source_Control.md"},F=t("",262),u=[F];function y(C,b,m,v,B,q){return i(),a("div",null,u)}const f=s(E,[["render",y]]);export{_ as __pageData,f as default};
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const n="/assets/Figure_9.01_B18602.Dz-I3RE-.jpg",p="/assets/Figure_9.02_B18602.CR6r6ncp.jpg",e="/assets/Figure_9.03_B18602.7fxoQP2P.jpg",h="/assets/Figure_9.04_B18602.C-moe6x5.jpg",l="/assets/Figure_9.05_B18602.rrwqvj9T.jpg",k="/assets/Figure_9.06_B18602.DhAAIlAy.jpg",r="/assets/Figure_9.07_B18602.BHFhZoN0.jpg",o="/assets/Figure_9.08_B18602.x14vDZGD.jpg",g="/assets/Figure_9.09_B18602.D7ypPzZ3.jpg",d="/assets/Figure_9.10_B18602.B--aQiAY.jpg",c="/assets/Figure_9.11_B18602.BfKJteyC.jpg",_=JSON.parse('{"title":"Тестирование и системы контроля версий","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/Chapter_9__Testing_and_Source_Control.md","filePath":"ru/book/Chapter_9__Testing_and_Source_Control.md","lastUpdated":1726505115000}'),E={name:"ru/book/Chapter_9__Testing_and_Source_Control.md"},F=t("",262),u=[F];function y(C,b,m,v,B,q){return i(),a("div",null,u)}const f=s(E,[["render",y]]);export{_ as __pageData,f as default};
diff --git a/assets/ru_book_index.md.Dl2sKJ5I.js b/assets/ru_book_index.md.CwK1ARGD.js
similarity index 99%
rename from assets/ru_book_index.md.Dl2sKJ5I.js
rename to assets/ru_book_index.md.CwK1ARGD.js
index 95ac4290f..461371802 100644
--- a/assets/ru_book_index.md.Dl2sKJ5I.js
+++ b/assets/ru_book_index.md.CwK1ARGD.js
@@ -1 +1 @@
-import{_ as e,o as t,c as a,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const o="/assets/book-face.8gath_JM.jpg",g=JSON.parse('{"title":"Vue.js 3 - Шаблоны проектирования и лучшие практики","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/index.md","filePath":"ru/book/index.md","lastUpdated":1726474804000}'),s={name:"ru/book/index.md"},i=r('

Vue.js 3 - Шаблоны проектирования и лучшие практики

Автор: Pablo Garaguso

image




Здесь представлен перевод книги "Vue.js 3 - Design Patterns and Best Practices" на русский язык

Предисловие

Vue 3 - это последняя и наиболее производительная версия "прогрессивного фреймворка" Vue.js для создания реактивных и отзывчивых пользовательских интерфейсов. Сам фреймворк представляет новые концепции и подходы к проектированию; шаблоны, которые могут быть необычными для других библиотек и фреймворков. Изучение основ фреймворка и понимание принципов проектирования програмных систем, а также шаблонов проектирования (design patterns), поможет вам определить компромиссы каждого подхода и построить надежные приложения.

Книга начинается с базовых концепций, а затем с помощью примеров и сценариев кодирования ведет постепенно к построению более сложных архитектур. Вы начнете с простой страницы и закончите многопоточным приложением, автономным и инсталируемым Progressive Web Application (PWA). Также рассматривается использование новых инструментов тестирования, доступных для Vue 3.

Помимо демонстрации того, как все делается, эта книга поможет вам научиться думать и искать подход к решению общих проблем, которые уже нашли свое решение в шаблонах проектирования. Это позволит вам сэкономить время и сделать ваше программное обеспечение более приспособленным к будущим изменениям.

Для кого эта книга

Эта книга предназначена для разработчиков Vue, которые заботятся о принципах проектирования фреймворка Vue и использовании часто встречающихся паттернов проектирования при разработке веб-приложений. Вы узнаете, как использовать и настраивать новый сборщик Vite, библиотеку для управления состоянием Pinia, Router 4, web workers и другие технологии для создания производительных и надежных приложений. Предварительное знание JavaScirpt и базовые знания Vue будут полезны.

Чтобы получить максимальную пользу от этой книги

Эта книга предполагает, что вы знакомы с веб-технологиями, такими как JavaScript, HTML и CSS. Разработчики, заинтересованные в расширении своего понимания паттернов проектирования и архитектуры получат максимальную пользу от этой книги. Студенты и новички в мире веб-приложений, могут также следовать этой книге, уделяя пристальное внимание примерам кода и используя предоставленные проекты.

Программное/аппаратное обеспечение, рассматриваемое в книгеТребования к операционной системе
Official Vue 3 ecosystem:

• Vue 3 framework
• Pinia
• Vue Router
• Vite
• Vitest
• Vue Testing Tools
Windows, macOS, or Linux
Node.js (any version + v16 LTS)Windows, macOS, or Linux
Web servers: NGINX, ApacheWindows or Linux
Visual Studio CodeWindows, macOS, or Linux
Chrome browserWindows, macOS, or Linux

Особых требований к аппаратному обеспечению современных компьютеров нет, но рекомендуется иметь, по крайней мере, следующее:

  • Intel или AMD CPU на как минимум 1 GHz
  • 4 GB RAM (больше - лучше)
  • Как минимум 10 GB места на диске (для программ и кода)

Как правило, если на вашем компьютере может работать современный веб-браузер (Chrome/Chromium, Mozilla Firefox или Microsoft Edge), то он должен отвечать всем требованиям для установки и запуска всех инструментов разработчика, упомянутых в этой книге.

Купить книгу

Книга в бумажном варианте на английском языке доступна для покупки на сайте O'Reilly

Скачать файлы кода примеров

Файлы кода примеров этой книги можно загрузить с GitHub по адресу https://github.com/PacktPublishing/Vue.js-3-Design-Patterns-and-Best-Practices.

Код в действии

Видеоролики Программирование в действии для этой книги можно посмотреть на сайте https://packt.link/FtCMS.




Я выражаю Вам признательность за преданность этой дисциплине и благодарю за прочтение этой книги. Желаю Вам благополучия и блестящих успехов в дальнейших начинаниях и профессиональной карьере.

Искренне,

Пабло Давид Гарагусо

www.pdgaraguso.com

',31),n=[i];function d(l,c,u,h,p,m){return t(),a("div",null,n)}const _=e(s,[["render",d]]);export{g as __pageData,_ as default}; +import{_ as e,o as t,c as a,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const o="/assets/book-face.8gath_JM.jpg",g=JSON.parse('{"title":"Vue.js 3 - Шаблоны проектирования и лучшие практики","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/index.md","filePath":"ru/book/index.md","lastUpdated":1726505115000}'),s={name:"ru/book/index.md"},i=r('

Vue.js 3 - Шаблоны проектирования и лучшие практики

Автор: Pablo Garaguso

image




Здесь представлен перевод книги "Vue.js 3 - Design Patterns and Best Practices" на русский язык

Предисловие

Vue 3 - это последняя и наиболее производительная версия "прогрессивного фреймворка" Vue.js для создания реактивных и отзывчивых пользовательских интерфейсов. Сам фреймворк представляет новые концепции и подходы к проектированию; шаблоны, которые могут быть необычными для других библиотек и фреймворков. Изучение основ фреймворка и понимание принципов проектирования програмных систем, а также шаблонов проектирования (design patterns), поможет вам определить компромиссы каждого подхода и построить надежные приложения.

Книга начинается с базовых концепций, а затем с помощью примеров и сценариев кодирования ведет постепенно к построению более сложных архитектур. Вы начнете с простой страницы и закончите многопоточным приложением, автономным и инсталируемым Progressive Web Application (PWA). Также рассматривается использование новых инструментов тестирования, доступных для Vue 3.

Помимо демонстрации того, как все делается, эта книга поможет вам научиться думать и искать подход к решению общих проблем, которые уже нашли свое решение в шаблонах проектирования. Это позволит вам сэкономить время и сделать ваше программное обеспечение более приспособленным к будущим изменениям.

Для кого эта книга

Эта книга предназначена для разработчиков Vue, которые заботятся о принципах проектирования фреймворка Vue и использовании часто встречающихся паттернов проектирования при разработке веб-приложений. Вы узнаете, как использовать и настраивать новый сборщик Vite, библиотеку для управления состоянием Pinia, Router 4, web workers и другие технологии для создания производительных и надежных приложений. Предварительное знание JavaScirpt и базовые знания Vue будут полезны.

Чтобы получить максимальную пользу от этой книги

Эта книга предполагает, что вы знакомы с веб-технологиями, такими как JavaScript, HTML и CSS. Разработчики, заинтересованные в расширении своего понимания паттернов проектирования и архитектуры получат максимальную пользу от этой книги. Студенты и новички в мире веб-приложений, могут также следовать этой книге, уделяя пристальное внимание примерам кода и используя предоставленные проекты.

Программное/аппаратное обеспечение, рассматриваемое в книгеТребования к операционной системе
Official Vue 3 ecosystem:

• Vue 3 framework
• Pinia
• Vue Router
• Vite
• Vitest
• Vue Testing Tools
Windows, macOS, or Linux
Node.js (any version + v16 LTS)Windows, macOS, or Linux
Web servers: NGINX, ApacheWindows or Linux
Visual Studio CodeWindows, macOS, or Linux
Chrome browserWindows, macOS, or Linux

Особых требований к аппаратному обеспечению современных компьютеров нет, но рекомендуется иметь, по крайней мере, следующее:

  • Intel или AMD CPU на как минимум 1 GHz
  • 4 GB RAM (больше - лучше)
  • Как минимум 10 GB места на диске (для программ и кода)

Как правило, если на вашем компьютере может работать современный веб-браузер (Chrome/Chromium, Mozilla Firefox или Microsoft Edge), то он должен отвечать всем требованиям для установки и запуска всех инструментов разработчика, упомянутых в этой книге.

Купить книгу

Книга в бумажном варианте на английском языке доступна для покупки на сайте O'Reilly

Скачать файлы кода примеров

Файлы кода примеров этой книги можно загрузить с GitHub по адресу https://github.com/PacktPublishing/Vue.js-3-Design-Patterns-and-Best-Practices.

Код в действии

Видеоролики Программирование в действии для этой книги можно посмотреть на сайте https://packt.link/FtCMS.




Я выражаю Вам признательность за преданность этой дисциплине и благодарю за прочтение этой книги. Желаю Вам благополучия и блестящих успехов в дальнейших начинаниях и профессиональной карьере.

Искренне,

Пабло Давид Гарагусо

www.pdgaraguso.com

',31),n=[i];function d(l,c,u,h,p,m){return t(),a("div",null,n)}const _=e(s,[["render",d]]);export{g as __pageData,_ as default}; diff --git a/assets/ru_book_index.md.Dl2sKJ5I.lean.js b/assets/ru_book_index.md.CwK1ARGD.lean.js similarity index 93% rename from assets/ru_book_index.md.Dl2sKJ5I.lean.js rename to assets/ru_book_index.md.CwK1ARGD.lean.js index e5021cbc2..1e4d6f588 100644 --- a/assets/ru_book_index.md.Dl2sKJ5I.lean.js +++ b/assets/ru_book_index.md.CwK1ARGD.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as a,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const o="/assets/book-face.8gath_JM.jpg",g=JSON.parse('{"title":"Vue.js 3 - Шаблоны проектирования и лучшие практики","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/index.md","filePath":"ru/book/index.md","lastUpdated":1726474804000}'),s={name:"ru/book/index.md"},i=r("",31),n=[i];function d(l,c,u,h,p,m){return t(),a("div",null,n)}const _=e(s,[["render",d]]);export{g as __pageData,_ as default}; +import{_ as e,o as t,c as a,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const o="/assets/book-face.8gath_JM.jpg",g=JSON.parse('{"title":"Vue.js 3 - Шаблоны проектирования и лучшие практики","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/index.md","filePath":"ru/book/index.md","lastUpdated":1726505115000}'),s={name:"ru/book/index.md"},i=r("",31),n=[i];function d(l,c,u,h,p,m){return t(),a("div",null,n)}const _=e(s,[["render",d]]);export{g as __pageData,_ as default}; diff --git a/assets/ru_book_summary.md.Cq4OSupb.js b/assets/ru_book_summary.md.DyVtEeng.js similarity index 99% rename from assets/ru_book_summary.md.Cq4OSupb.js rename to assets/ru_book_summary.md.DyVtEeng.js index 107236d91..3b206b199 100644 --- a/assets/ru_book_summary.md.Cq4OSupb.js +++ b/assets/ru_book_summary.md.DyVtEeng.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"Что включает в себя эта книга","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/summary.md","filePath":"ru/book/summary.md","lastUpdated":1726474804000}'),o={name:"ru/book/summary.md"},n=r('

Что включает в себя эта книга

Глава 1, Фреймворк Vue 3

Что представляет собой прогрессивный фреймворк Vue 3? В этой главе представлены наиболее важные аспекты фреймворка и другие ключевые понятия.

Глава 2, Принципы и шаблоны проектирования программного обеспечения

Принципы и шаблоны проектирования программного обеспечения являются визитной карточкой хорошей архитектуры программного обеспечения. В этой главе рассказывается о них, приводятся примеры для реализации на JavaScript и Vue 3.

Глава 3, Создание рабочего проекта

В этой главе мы создаем рабочий проект, который будет использоваться в качестве базовой основы для будущих проектов. В ней вы шаг за шагом узнаете, как начать работу над проектом, используя нужные инструменты.

Глава 4, Композиция пользовательского интерфейса с помощью компонентов

Эта глава знакомит с концепцией пользовательских интерфейсов и подводит к реализации веб-приложения, начиная с концептуального визуального дизайна до разработки соответствующих компонентов.

Глава 5, Одностраничные приложения

Это ключевая глава, в которой представлен маршрутизатор Vue Router для создания одностраничных веб-приложений.

Глава 6, Прогрессивные веб-приложения

В этой главе на основе SPA создаются PWA, а также представлены инструменты для оценки их полноты и производительности.

Глава 7, Управление потоками данных

Эта глава знакомит с ключевыми концепциями проектирования и управления потоками данных и информации в приложении. В ней представлена Pinia как официальный фреймворк управления состояниями для Vue 3.

Глава 8, Многопоточность с помощью web-workers

Эта глава посвящена повышению производительности крупномасштабного приложения с помощью многопоточности с web-workers. В ней также представлены дополнительные паттерны для создания простой в реализации и удобной в обслуживании архитектуры.

Глава 9, Тестирование и контроль исходных текстов

В этой главе мы знакомимся с официальными инструментами тестирования предоставляемыми командой Vue, а также с наиболее распространенной системой контроля версий: Git. В главе показано, как создавать тестовые примеры для кода на JavaScript, а также компонентов Vue 3.

Глава 10, Развертывание приложения

В этой главе представлены концепции, необходимые для понимания того, как опубликовать приложение Vue 3 на живом рабочем сервере и как защитить его с помощью Let's Encrypt.

Глава 11, UX Patterns

Эта бонусная глава расширяет понятия пользовательского интерфейса и паттернов пользовательского опыта, чтобы обеспечить общий язык между разработчиком и дизайнером. В ней представлены общие шаблоны, предусмотренные стандартом HTML 5, и другие общие элементы.

Приложение: Миграция с Vue 2 на Vue 3

В этом приложении представлено руководство по изменениям и вариантам миграции для опытных разработчиков Vue 2.

',25),i=[n];function s(h,u,l,d,c,p){return e(),t("div",null,i)}const _=a(o,[["render",s]]);export{b as __pageData,_ as default}; +import{_ as a,o as e,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"Что включает в себя эта книга","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/summary.md","filePath":"ru/book/summary.md","lastUpdated":1726505115000}'),o={name:"ru/book/summary.md"},n=r('

Что включает в себя эта книга

Глава 1, Фреймворк Vue 3

Что представляет собой прогрессивный фреймворк Vue 3? В этой главе представлены наиболее важные аспекты фреймворка и другие ключевые понятия.

Глава 2, Принципы и шаблоны проектирования программного обеспечения

Принципы и шаблоны проектирования программного обеспечения являются визитной карточкой хорошей архитектуры программного обеспечения. В этой главе рассказывается о них, приводятся примеры для реализации на JavaScript и Vue 3.

Глава 3, Создание рабочего проекта

В этой главе мы создаем рабочий проект, который будет использоваться в качестве базовой основы для будущих проектов. В ней вы шаг за шагом узнаете, как начать работу над проектом, используя нужные инструменты.

Глава 4, Композиция пользовательского интерфейса с помощью компонентов

Эта глава знакомит с концепцией пользовательских интерфейсов и подводит к реализации веб-приложения, начиная с концептуального визуального дизайна до разработки соответствующих компонентов.

Глава 5, Одностраничные приложения

Это ключевая глава, в которой представлен маршрутизатор Vue Router для создания одностраничных веб-приложений.

Глава 6, Прогрессивные веб-приложения

В этой главе на основе SPA создаются PWA, а также представлены инструменты для оценки их полноты и производительности.

Глава 7, Управление потоками данных

Эта глава знакомит с ключевыми концепциями проектирования и управления потоками данных и информации в приложении. В ней представлена Pinia как официальный фреймворк управления состояниями для Vue 3.

Глава 8, Многопоточность с помощью web-workers

Эта глава посвящена повышению производительности крупномасштабного приложения с помощью многопоточности с web-workers. В ней также представлены дополнительные паттерны для создания простой в реализации и удобной в обслуживании архитектуры.

Глава 9, Тестирование и контроль исходных текстов

В этой главе мы знакомимся с официальными инструментами тестирования предоставляемыми командой Vue, а также с наиболее распространенной системой контроля версий: Git. В главе показано, как создавать тестовые примеры для кода на JavaScript, а также компонентов Vue 3.

Глава 10, Развертывание приложения

В этой главе представлены концепции, необходимые для понимания того, как опубликовать приложение Vue 3 на живом рабочем сервере и как защитить его с помощью Let's Encrypt.

Глава 11, UX Patterns

Эта бонусная глава расширяет понятия пользовательского интерфейса и паттернов пользовательского опыта, чтобы обеспечить общий язык между разработчиком и дизайнером. В ней представлены общие шаблоны, предусмотренные стандартом HTML 5, и другие общие элементы.

Приложение: Миграция с Vue 2 на Vue 3

В этом приложении представлено руководство по изменениям и вариантам миграции для опытных разработчиков Vue 2.

',25),i=[n];function s(h,u,l,d,c,p){return e(),t("div",null,i)}const _=a(o,[["render",s]]);export{b as __pageData,_ as default}; diff --git a/assets/ru_book_summary.md.Cq4OSupb.lean.js b/assets/ru_book_summary.md.DyVtEeng.lean.js similarity index 92% rename from assets/ru_book_summary.md.Cq4OSupb.lean.js rename to assets/ru_book_summary.md.DyVtEeng.lean.js index 1afc2550c..574f87136 100644 --- a/assets/ru_book_summary.md.Cq4OSupb.lean.js +++ b/assets/ru_book_summary.md.DyVtEeng.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"Что включает в себя эта книга","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/summary.md","filePath":"ru/book/summary.md","lastUpdated":1726474804000}'),o={name:"ru/book/summary.md"},n=r("",25),i=[n];function s(h,u,l,d,c,p){return e(),t("div",null,i)}const _=a(o,[["render",s]]);export{b as __pageData,_ as default}; +import{_ as a,o as e,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"Что включает в себя эта книга","description":"Учебник по Vue.js 3","frontmatter":{"pageClass":"textbook","head":[["meta",{"name":"og:site_name","content":"Vue.js 3 - Шаблоны проектирования и лучшие практики"}],["meta",{"name":"description","content":"Учебник по Vue.js 3"}],["meta",{"name":"og:image","content":"/images/book-face.jpg"}],["meta",{"name":"twitter:image","content":"/images/book-face.jpg"}]]},"headers":[],"relativePath":"ru/book/summary.md","filePath":"ru/book/summary.md","lastUpdated":1726505115000}'),o={name:"ru/book/summary.md"},n=r("",25),i=[n];function s(h,u,l,d,c,p){return e(),t("div",null,i)}const _=a(o,[["render",s]]);export{b as __pageData,_ as default}; diff --git a/assets/ru_deployment_ci-cd.md.PgKXAmFZ.js b/assets/ru_deployment_ci-cd.md.BPppxATK.js similarity index 96% rename from assets/ru_deployment_ci-cd.md.PgKXAmFZ.js rename to assets/ru_deployment_ci-cd.md.BPppxATK.js index fa5588f47..79af96be4 100644 --- a/assets/ru_deployment_ci-cd.md.PgKXAmFZ.js +++ b/assets/ru_deployment_ci-cd.md.BPppxATK.js @@ -1 +1 @@ -import{_ as a,o as s,c as n,l as e,a as t}from"./chunks/framework.B8KxSsRZ.js";const D=JSON.parse('{"title":"CI/CD","description":"","frontmatter":{},"headers":[],"relativePath":"ru/deployment/ci-cd.md","filePath":"ru/deployment/ci-cd.md","lastUpdated":1726474804000}'),o={name:"ru/deployment/ci-cd.md"},c=e("h1",{id:"ci-cd",tabindex:"-1"},[t("CI/CD "),e("a",{class:"header-anchor",href:"#ci-cd","aria-label":'Permalink to "CI/CD"'},"​")],-1),i=e("details",{class:"details custom-block"},[e("summary",null,"Что такое CI/CD?"),e("p",null,"CI/CD (Continuous Integration, Continuous Delivery — непрерывная интеграция и доставка) — это технология автоматизации билда, тестирования и развертывания разрабатываемого проекта."),e("p",null,"Другими словами, процесс перехода лежащего в репозитории кода в рабочий продукт на облачном сервере, например."),e("p",null,[t("Элементы CI/CD полезны не только девопс инженеру, но и простому фронтендеру, позволяя ему после "),e("code",null,"git commit/push"),t(" изменений кода получить рабочий сайт, например, на GitHub Pages без дополнительных действий.")]),e("p",null,"Основные инструменты для CI/CD: GitHub Actions, GitLab CI/CD, Jenkins, Trevis")],-1),l=[c,i];function d(r,u,p,C,m,_){return s(),n("div",null,l)}const f=a(o,[["render",d]]);export{D as __pageData,f as default}; +import{_ as a,o as s,c as n,l as e,a as t}from"./chunks/framework.B8KxSsRZ.js";const D=JSON.parse('{"title":"CI/CD","description":"","frontmatter":{},"headers":[],"relativePath":"ru/deployment/ci-cd.md","filePath":"ru/deployment/ci-cd.md","lastUpdated":1726505115000}'),o={name:"ru/deployment/ci-cd.md"},c=e("h1",{id:"ci-cd",tabindex:"-1"},[t("CI/CD "),e("a",{class:"header-anchor",href:"#ci-cd","aria-label":'Permalink to "CI/CD"'},"​")],-1),i=e("details",{class:"details custom-block"},[e("summary",null,"Что такое CI/CD?"),e("p",null,"CI/CD (Continuous Integration, Continuous Delivery — непрерывная интеграция и доставка) — это технология автоматизации билда, тестирования и развертывания разрабатываемого проекта."),e("p",null,"Другими словами, процесс перехода лежащего в репозитории кода в рабочий продукт на облачном сервере, например."),e("p",null,[t("Элементы CI/CD полезны не только девопс инженеру, но и простому фронтендеру, позволяя ему после "),e("code",null,"git commit/push"),t(" изменений кода получить рабочий сайт, например, на GitHub Pages без дополнительных действий.")]),e("p",null,"Основные инструменты для CI/CD: GitHub Actions, GitLab CI/CD, Jenkins, Trevis")],-1),l=[c,i];function d(r,u,p,C,m,_){return s(),n("div",null,l)}const f=a(o,[["render",d]]);export{D as __pageData,f as default}; diff --git a/assets/ru_deployment_ci-cd.md.PgKXAmFZ.lean.js b/assets/ru_deployment_ci-cd.md.BPppxATK.lean.js similarity index 96% rename from assets/ru_deployment_ci-cd.md.PgKXAmFZ.lean.js rename to assets/ru_deployment_ci-cd.md.BPppxATK.lean.js index fa5588f47..79af96be4 100644 --- a/assets/ru_deployment_ci-cd.md.PgKXAmFZ.lean.js +++ b/assets/ru_deployment_ci-cd.md.BPppxATK.lean.js @@ -1 +1 @@ -import{_ as a,o as s,c as n,l as e,a as t}from"./chunks/framework.B8KxSsRZ.js";const D=JSON.parse('{"title":"CI/CD","description":"","frontmatter":{},"headers":[],"relativePath":"ru/deployment/ci-cd.md","filePath":"ru/deployment/ci-cd.md","lastUpdated":1726474804000}'),o={name:"ru/deployment/ci-cd.md"},c=e("h1",{id:"ci-cd",tabindex:"-1"},[t("CI/CD "),e("a",{class:"header-anchor",href:"#ci-cd","aria-label":'Permalink to "CI/CD"'},"​")],-1),i=e("details",{class:"details custom-block"},[e("summary",null,"Что такое CI/CD?"),e("p",null,"CI/CD (Continuous Integration, Continuous Delivery — непрерывная интеграция и доставка) — это технология автоматизации билда, тестирования и развертывания разрабатываемого проекта."),e("p",null,"Другими словами, процесс перехода лежащего в репозитории кода в рабочий продукт на облачном сервере, например."),e("p",null,[t("Элементы CI/CD полезны не только девопс инженеру, но и простому фронтендеру, позволяя ему после "),e("code",null,"git commit/push"),t(" изменений кода получить рабочий сайт, например, на GitHub Pages без дополнительных действий.")]),e("p",null,"Основные инструменты для CI/CD: GitHub Actions, GitLab CI/CD, Jenkins, Trevis")],-1),l=[c,i];function d(r,u,p,C,m,_){return s(),n("div",null,l)}const f=a(o,[["render",d]]);export{D as __pageData,f as default}; +import{_ as a,o as s,c as n,l as e,a as t}from"./chunks/framework.B8KxSsRZ.js";const D=JSON.parse('{"title":"CI/CD","description":"","frontmatter":{},"headers":[],"relativePath":"ru/deployment/ci-cd.md","filePath":"ru/deployment/ci-cd.md","lastUpdated":1726505115000}'),o={name:"ru/deployment/ci-cd.md"},c=e("h1",{id:"ci-cd",tabindex:"-1"},[t("CI/CD "),e("a",{class:"header-anchor",href:"#ci-cd","aria-label":'Permalink to "CI/CD"'},"​")],-1),i=e("details",{class:"details custom-block"},[e("summary",null,"Что такое CI/CD?"),e("p",null,"CI/CD (Continuous Integration, Continuous Delivery — непрерывная интеграция и доставка) — это технология автоматизации билда, тестирования и развертывания разрабатываемого проекта."),e("p",null,"Другими словами, процесс перехода лежащего в репозитории кода в рабочий продукт на облачном сервере, например."),e("p",null,[t("Элементы CI/CD полезны не только девопс инженеру, но и простому фронтендеру, позволяя ему после "),e("code",null,"git commit/push"),t(" изменений кода получить рабочий сайт, например, на GitHub Pages без дополнительных действий.")]),e("p",null,"Основные инструменты для CI/CD: GitHub Actions, GitLab CI/CD, Jenkins, Trevis")],-1),l=[c,i];function d(r,u,p,C,m,_){return s(),n("div",null,l)}const f=a(o,[["render",d]]);export{D as __pageData,f as default}; diff --git a/assets/ru_deployment_docker.md.B-fxIdTl.js b/assets/ru_deployment_docker.md.D9n_df-b.js similarity index 88% rename from assets/ru_deployment_docker.md.B-fxIdTl.js rename to assets/ru_deployment_docker.md.D9n_df-b.js index b571cfe00..d5f6523bb 100644 --- a/assets/ru_deployment_docker.md.B-fxIdTl.js +++ b/assets/ru_deployment_docker.md.D9n_df-b.js @@ -1 +1 @@ -import{_ as t,o as a,c as o,l as e,a as r}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Docker","description":"","frontmatter":{},"headers":[],"relativePath":"ru/deployment/docker.md","filePath":"ru/deployment/docker.md","lastUpdated":1726474804000}'),c={name:"ru/deployment/docker.md"},d=e("h1",{id:"docker",tabindex:"-1"},[r("Docker "),e("a",{class:"header-anchor",href:"#docker","aria-label":'Permalink to "Docker"'},"​")],-1),s=[d];function n(l,i,p,_,m,k){return a(),o("div",null,s)}const u=t(c,[["render",n]]);export{f as __pageData,u as default}; +import{_ as t,o as a,c as o,l as e,a as r}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Docker","description":"","frontmatter":{},"headers":[],"relativePath":"ru/deployment/docker.md","filePath":"ru/deployment/docker.md","lastUpdated":1726505115000}'),c={name:"ru/deployment/docker.md"},d=e("h1",{id:"docker",tabindex:"-1"},[r("Docker "),e("a",{class:"header-anchor",href:"#docker","aria-label":'Permalink to "Docker"'},"​")],-1),s=[d];function n(l,i,p,_,m,k){return a(),o("div",null,s)}const u=t(c,[["render",n]]);export{f as __pageData,u as default}; diff --git a/assets/ru_deployment_docker.md.B-fxIdTl.lean.js b/assets/ru_deployment_docker.md.D9n_df-b.lean.js similarity index 88% rename from assets/ru_deployment_docker.md.B-fxIdTl.lean.js rename to assets/ru_deployment_docker.md.D9n_df-b.lean.js index b571cfe00..d5f6523bb 100644 --- a/assets/ru_deployment_docker.md.B-fxIdTl.lean.js +++ b/assets/ru_deployment_docker.md.D9n_df-b.lean.js @@ -1 +1 @@ -import{_ as t,o as a,c as o,l as e,a as r}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Docker","description":"","frontmatter":{},"headers":[],"relativePath":"ru/deployment/docker.md","filePath":"ru/deployment/docker.md","lastUpdated":1726474804000}'),c={name:"ru/deployment/docker.md"},d=e("h1",{id:"docker",tabindex:"-1"},[r("Docker "),e("a",{class:"header-anchor",href:"#docker","aria-label":'Permalink to "Docker"'},"​")],-1),s=[d];function n(l,i,p,_,m,k){return a(),o("div",null,s)}const u=t(c,[["render",n]]);export{f as __pageData,u as default}; +import{_ as t,o as a,c as o,l as e,a as r}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Docker","description":"","frontmatter":{},"headers":[],"relativePath":"ru/deployment/docker.md","filePath":"ru/deployment/docker.md","lastUpdated":1726505115000}'),c={name:"ru/deployment/docker.md"},d=e("h1",{id:"docker",tabindex:"-1"},[r("Docker "),e("a",{class:"header-anchor",href:"#docker","aria-label":'Permalink to "Docker"'},"​")],-1),s=[d];function n(l,i,p,_,m,k){return a(),o("div",null,s)}const u=t(c,[["render",n]]);export{f as __pageData,u as default}; diff --git a/assets/ru_deployment_github-actions.md.CcLUhKOF.js b/assets/ru_deployment_github-actions.md.B_6nQ0HL.js similarity index 99% rename from assets/ru_deployment_github-actions.md.CcLUhKOF.js rename to assets/ru_deployment_github-actions.md.B_6nQ0HL.js index 79cfc70df..fa1e52cee 100644 --- a/assets/ru_deployment_github-actions.md.CcLUhKOF.js +++ b/assets/ru_deployment_github-actions.md.B_6nQ0HL.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Github Actions","description":"","frontmatter":{},"headers":[],"relativePath":"ru/deployment/github-actions.md","filePath":"ru/deployment/github-actions.md","lastUpdated":1726474804000}'),p={name:"ru/deployment/github-actions.md"},h=n(`

Github Actions

Что такое GitHub Actions?

GitHub Actions самый популярный и удобный способ автоматизации билда, тестирования и развертывания, так что советуется их изучить для применения как в пет, так и в больших коммерческих проектах.

Ваш код должен быть на GitHub, естественно.

Добавьте в корень репозитория файл .github/workflows/deploy.yaml (имя самого файла может быть любым)

В нем будут GitHub Actions инструкции.

GitHub Actions - пример деплоя на GitHub Pages

Образец конфигурационного файла данного проекта (Vue-Faq) с развертыванием на Github Pages

yaml
# .github/workflows/deploy.yaml
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Github Actions","description":"","frontmatter":{},"headers":[],"relativePath":"ru/deployment/github-actions.md","filePath":"ru/deployment/github-actions.md","lastUpdated":1726505115000}'),p={name:"ru/deployment/github-actions.md"},h=n(`

Github Actions

Что такое GitHub Actions?

GitHub Actions самый популярный и удобный способ автоматизации билда, тестирования и развертывания, так что советуется их изучить для применения как в пет, так и в больших коммерческих проектах.

Ваш код должен быть на GitHub, естественно.

Добавьте в корень репозитория файл .github/workflows/deploy.yaml (имя самого файла может быть любым)

В нем будут GitHub Actions инструкции.

GitHub Actions - пример деплоя на GitHub Pages

Образец конфигурационного файла данного проекта (Vue-Faq) с развертыванием на Github Pages

yaml
# .github/workflows/deploy.yaml
 
 name: Build and Deploy
 on:
diff --git a/assets/ru_deployment_github-actions.md.CcLUhKOF.lean.js b/assets/ru_deployment_github-actions.md.B_6nQ0HL.lean.js
similarity index 86%
rename from assets/ru_deployment_github-actions.md.CcLUhKOF.lean.js
rename to assets/ru_deployment_github-actions.md.B_6nQ0HL.lean.js
index 8398935fe..dce7e7624 100644
--- a/assets/ru_deployment_github-actions.md.CcLUhKOF.lean.js
+++ b/assets/ru_deployment_github-actions.md.B_6nQ0HL.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Github Actions","description":"","frontmatter":{},"headers":[],"relativePath":"ru/deployment/github-actions.md","filePath":"ru/deployment/github-actions.md","lastUpdated":1726474804000}'),p={name:"ru/deployment/github-actions.md"},h=n("",4),l=[h];function k(t,e,E,d,r,g){return i(),a("div",null,l)}const o=s(p,[["render",k]]);export{c as __pageData,o as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Github Actions","description":"","frontmatter":{},"headers":[],"relativePath":"ru/deployment/github-actions.md","filePath":"ru/deployment/github-actions.md","lastUpdated":1726505115000}'),p={name:"ru/deployment/github-actions.md"},h=n("",4),l=[h];function k(t,e,E,d,r,g){return i(),a("div",null,l)}const o=s(p,[["render",k]]);export{c as __pageData,o as default};
diff --git a/assets/ru_deployment_hosting.md.CVfHz7S5.js b/assets/ru_deployment_hosting.md.Bzoy7Xzv.js
similarity index 98%
rename from assets/ru_deployment_hosting.md.CVfHz7S5.js
rename to assets/ru_deployment_hosting.md.Bzoy7Xzv.js
index 99599e914..0a87c5483 100644
--- a/assets/ru_deployment_hosting.md.CVfHz7S5.js
+++ b/assets/ru_deployment_hosting.md.Bzoy7Xzv.js
@@ -1 +1 @@
-import{_ as e,o as t,c as a,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Хостинг","description":"","frontmatter":{},"headers":[],"relativePath":"ru/deployment/hosting.md","filePath":"ru/deployment/hosting.md","lastUpdated":1726474804000}'),l={name:"ru/deployment/hosting.md"},s=r('

Хостинг

Где разместить сайт?

После билда фронтенд проекта вы получаете набор html/css/js/jpeg и других статичных файлов, которые надо разместить на вебсервере, чтобы к вашему сайту был доступ.

Варианты размещения с бесплатными планами:

Также многие облачные провайдеры (Amazon, Google, Oracle, Microsoft) предоставляют бесплатные тарифы с возможностью получить виртуальный сервер, на котором можно установить вебсервер (Nginx, Apache) и захостить свой сайт самостоятельно. В этом случае на нем же можно разместить и бэкенд.

Домен

Купить домен сейчас очень просто и недорого (от 200 рублей в год), в связи с чем рекомендуется это сделать. GitHub Pages и другие хостеры позволяют подключить кастомный домен к вашему сайту. Поддомены удобны для организации окружения разработки (environments):

  • dev.website.com
  • dev-api.website.com
  • website.com
  • api.website.com
  • docs.website.com
SSL сертификаты

Современные браузеры требуют, чтобы сайт был доступен по HTTPS протоколу. Для этого для вашего домена необходим SSL сертификат. Хостинг провайдеры типа Firebase или Github Pages обеспечат вам сертификат сами. Если вы хостите свой сайт самостоятельно на облачном сервере, то можно сгенерировать сертификат с помощью программы CertBot.

',4),o=[s];function i(n,c,m,d,p,_){return t(),a("div",null,o)}const f=e(l,[["render",i]]);export{u as __pageData,f as default}; +import{_ as e,o as t,c as a,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Хостинг","description":"","frontmatter":{},"headers":[],"relativePath":"ru/deployment/hosting.md","filePath":"ru/deployment/hosting.md","lastUpdated":1726505115000}'),l={name:"ru/deployment/hosting.md"},s=r('

Хостинг

Где разместить сайт?

После билда фронтенд проекта вы получаете набор html/css/js/jpeg и других статичных файлов, которые надо разместить на вебсервере, чтобы к вашему сайту был доступ.

Варианты размещения с бесплатными планами:

Также многие облачные провайдеры (Amazon, Google, Oracle, Microsoft) предоставляют бесплатные тарифы с возможностью получить виртуальный сервер, на котором можно установить вебсервер (Nginx, Apache) и захостить свой сайт самостоятельно. В этом случае на нем же можно разместить и бэкенд.

Домен

Купить домен сейчас очень просто и недорого (от 200 рублей в год), в связи с чем рекомендуется это сделать. GitHub Pages и другие хостеры позволяют подключить кастомный домен к вашему сайту. Поддомены удобны для организации окружения разработки (environments):

  • dev.website.com
  • dev-api.website.com
  • website.com
  • api.website.com
  • docs.website.com
SSL сертификаты

Современные браузеры требуют, чтобы сайт был доступен по HTTPS протоколу. Для этого для вашего домена необходим SSL сертификат. Хостинг провайдеры типа Firebase или Github Pages обеспечат вам сертификат сами. Если вы хостите свой сайт самостоятельно на облачном сервере, то можно сгенерировать сертификат с помощью программы CertBot.

',4),o=[s];function i(n,c,m,d,p,_){return t(),a("div",null,o)}const f=e(l,[["render",i]]);export{u as __pageData,f as default}; diff --git a/assets/ru_deployment_hosting.md.CVfHz7S5.lean.js b/assets/ru_deployment_hosting.md.Bzoy7Xzv.lean.js similarity index 85% rename from assets/ru_deployment_hosting.md.CVfHz7S5.lean.js rename to assets/ru_deployment_hosting.md.Bzoy7Xzv.lean.js index 84f1ca685..9c3441a29 100644 --- a/assets/ru_deployment_hosting.md.CVfHz7S5.lean.js +++ b/assets/ru_deployment_hosting.md.Bzoy7Xzv.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as a,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Хостинг","description":"","frontmatter":{},"headers":[],"relativePath":"ru/deployment/hosting.md","filePath":"ru/deployment/hosting.md","lastUpdated":1726474804000}'),l={name:"ru/deployment/hosting.md"},s=r("",4),o=[s];function i(n,c,m,d,p,_){return t(),a("div",null,o)}const f=e(l,[["render",i]]);export{u as __pageData,f as default}; +import{_ as e,o as t,c as a,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Хостинг","description":"","frontmatter":{},"headers":[],"relativePath":"ru/deployment/hosting.md","filePath":"ru/deployment/hosting.md","lastUpdated":1726505115000}'),l={name:"ru/deployment/hosting.md"},s=r("",4),o=[s];function i(n,c,m,d,p,_){return t(),a("div",null,o)}const f=e(l,[["render",i]]);export{u as __pageData,f as default}; diff --git a/assets/ru_development_architectural-patterns.md.DF7hAB4z.js b/assets/ru_development_architectural-patterns.md.mYxAvXqa.js similarity index 99% rename from assets/ru_development_architectural-patterns.md.DF7hAB4z.js rename to assets/ru_development_architectural-patterns.md.mYxAvXqa.js index 4fd221e65..b57554925 100644 --- a/assets/ru_development_architectural-patterns.md.DF7hAB4z.js +++ b/assets/ru_development_architectural-patterns.md.mYxAvXqa.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as n,a4 as i,a7 as p,a8 as l,a9 as e}from"./chunks/framework.B8KxSsRZ.js";import{_ as t}from"./chunks/modular-architecture.C9UloQkF.js";const v=JSON.parse('{"title":"Архитектурные решения","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/architectural-patterns.md","filePath":"ru/development/architectural-patterns.md","lastUpdated":1726474804000}'),h={name:"ru/development/architectural-patterns.md"},k=i(`

Архитектурные решения

Какие бывают структуры для Vue 3 проектов?

Плоская

При запуске небольшого проекта Vue, такого как Proof of Concept, вы можете предпочесть простую структуру папок, чтобы избежать сложностей:

txt
/src
+import{_ as s,o as a,c as n,a4 as i,a7 as p,a8 as l,a9 as e}from"./chunks/framework.B8KxSsRZ.js";import{_ as t}from"./chunks/modular-architecture.C9UloQkF.js";const v=JSON.parse('{"title":"Архитектурные решения","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/architectural-patterns.md","filePath":"ru/development/architectural-patterns.md","lastUpdated":1726505115000}'),h={name:"ru/development/architectural-patterns.md"},k=i(`

Архитектурные решения

Какие бывают структуры для Vue 3 проектов?

Плоская

При запуске небольшого проекта Vue, такого как Proof of Concept, вы можете предпочесть простую структуру папок, чтобы избежать сложностей:

txt
/src
 |-- /components
 |   |-- BaseButton.vue
 |   |-- BaseCard.vue
diff --git a/assets/ru_development_architectural-patterns.md.DF7hAB4z.lean.js b/assets/ru_development_architectural-patterns.md.mYxAvXqa.lean.js
similarity index 89%
rename from assets/ru_development_architectural-patterns.md.DF7hAB4z.lean.js
rename to assets/ru_development_architectural-patterns.md.mYxAvXqa.lean.js
index 328cb0662..1f7298004 100644
--- a/assets/ru_development_architectural-patterns.md.DF7hAB4z.lean.js
+++ b/assets/ru_development_architectural-patterns.md.mYxAvXqa.lean.js
@@ -1 +1 @@
-import{_ as s,o as a,c as n,a4 as i,a7 as p,a8 as l,a9 as e}from"./chunks/framework.B8KxSsRZ.js";import{_ as t}from"./chunks/modular-architecture.C9UloQkF.js";const v=JSON.parse('{"title":"Архитектурные решения","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/architectural-patterns.md","filePath":"ru/development/architectural-patterns.md","lastUpdated":1726474804000}'),h={name:"ru/development/architectural-patterns.md"},k=i("",8),r=[k];function d(E,c,o,g,u,y){return a(),n("div",null,r)}const A=s(h,[["render",d]]);export{v as __pageData,A as default};
+import{_ as s,o as a,c as n,a4 as i,a7 as p,a8 as l,a9 as e}from"./chunks/framework.B8KxSsRZ.js";import{_ as t}from"./chunks/modular-architecture.C9UloQkF.js";const v=JSON.parse('{"title":"Архитектурные решения","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/architectural-patterns.md","filePath":"ru/development/architectural-patterns.md","lastUpdated":1726505115000}'),h={name:"ru/development/architectural-patterns.md"},k=i("",8),r=[k];function d(E,c,o,g,u,y){return a(),n("div",null,r)}const A=s(h,[["render",d]]);export{v as __pageData,A as default};
diff --git a/assets/ru_development_assets.md.DvqYQEiN.js b/assets/ru_development_assets.md.QcaxPg5y.js
similarity index 99%
rename from assets/ru_development_assets.md.DvqYQEiN.js
rename to assets/ru_development_assets.md.QcaxPg5y.js
index 4b6319ea0..bc922e464 100644
--- a/assets/ru_development_assets.md.DvqYQEiN.js
+++ b/assets/ru_development_assets.md.QcaxPg5y.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Ресурсы приложения","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/assets.md","filePath":"ru/development/assets.md","lastUpdated":1726474804000}'),h={name:"ru/development/assets.md"},l=n(`

Ресурсы приложения

Ресурсы приложения

Под ресурсами понимаются изображения, иконки, аудио, видео, json, pdf и прочие файлы, которые может использовать ваше приложение либо внутри себя, либо для показа на странице.

Картинки класть в папку public или assets?

Из папки public ресурсы (например, изображения) подключаются в вашем приложении по протоколу HTTP(S), загружаясь по необходимости с сервера - как они это делали всегда.

Ресурсы в папке assets (и вообще из любой поддиректории в src/) при билде приложения переименовываются (добавляется хэш - типа social-banner-e88a22df.png) и помещаются в папку dist/assets, либо, если это картинки маленького размера, они могут кодироваться в Base64 и помещаться в ваш js бандл. В приложении в браузере они доступны, получается, сразу, но размер js бандла увеличивается на размер ресурсов, что увеличивает скорость загрузки.

Доступ к ресурсам осущестляется через import:

js
// gets url to the resource
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Ресурсы приложения","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/assets.md","filePath":"ru/development/assets.md","lastUpdated":1726505115000}'),h={name:"ru/development/assets.md"},l=n(`

Ресурсы приложения

Ресурсы приложения

Под ресурсами понимаются изображения, иконки, аудио, видео, json, pdf и прочие файлы, которые может использовать ваше приложение либо внутри себя, либо для показа на странице.

Картинки класть в папку public или assets?

Из папки public ресурсы (например, изображения) подключаются в вашем приложении по протоколу HTTP(S), загружаясь по необходимости с сервера - как они это делали всегда.

Ресурсы в папке assets (и вообще из любой поддиректории в src/) при билде приложения переименовываются (добавляется хэш - типа social-banner-e88a22df.png) и помещаются в папку dist/assets, либо, если это картинки маленького размера, они могут кодироваться в Base64 и помещаться в ваш js бандл. В приложении в браузере они доступны, получается, сразу, но размер js бандла увеличивается на размер ресурсов, что увеличивает скорость загрузки.

Доступ к ресурсам осущестляется через import:

js
// gets url to the resource
 import imageUrl from "./image.img";
 
 // gets raw (string) representation of the resource
diff --git a/assets/ru_development_assets.md.DvqYQEiN.lean.js b/assets/ru_development_assets.md.QcaxPg5y.lean.js
similarity index 86%
rename from assets/ru_development_assets.md.DvqYQEiN.lean.js
rename to assets/ru_development_assets.md.QcaxPg5y.lean.js
index d3f42d0a5..1d8f2a1ac 100644
--- a/assets/ru_development_assets.md.DvqYQEiN.lean.js
+++ b/assets/ru_development_assets.md.QcaxPg5y.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Ресурсы приложения","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/assets.md","filePath":"ru/development/assets.md","lastUpdated":1726474804000}'),h={name:"ru/development/assets.md"},l=n("",8),p=[l];function k(t,e,E,r,d,g){return i(),a("div",null,p)}const F=s(h,[["render",k]]);export{c as __pageData,F as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Ресурсы приложения","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/assets.md","filePath":"ru/development/assets.md","lastUpdated":1726505115000}'),h={name:"ru/development/assets.md"},l=n("",8),p=[l];function k(t,e,E,r,d,g){return i(),a("div",null,p)}const F=s(h,[["render",k]]);export{c as __pageData,F as default};
diff --git a/assets/ru_development_building.md.BaYBsODo.js b/assets/ru_development_building.md.cODkCwRM.js
similarity index 99%
rename from assets/ru_development_building.md.BaYBsODo.js
rename to assets/ru_development_building.md.cODkCwRM.js
index 99a869c6f..1c655c9a2 100644
--- a/assets/ru_development_building.md.BaYBsODo.js
+++ b/assets/ru_development_building.md.cODkCwRM.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Создание и сборка приложения","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/building.md","filePath":"ru/development/building.md","lastUpdated":1726474804000}'),t={name:"ru/development/building.md"},p=n(`

Создание и сборка приложения

Сборка приложения

Чтобы собрать Vue проект в файлы, понятные браузеру, нужен сборщик. Самые популярные - Vite и Webpack

Vite более новый и использует современные технологии, включая esbuild для dev сборок для транспиляции TypeScript в JavaScript, который в 20~30 раз быстрее чем обычный tsc, что делает HMR в десятки раз быстрей, чем на Webpack. Для билда JavaScript для production используется сборщик Rollup.

Нужно учитывать, что каждый сборщик собирает ресурсы приложения (иконки, SVG и пр.) по-своему, используя свои плагины, и требует в этом настройки.

Оба сборщика позволяют расширять свои возможности кастомными плагинами.

Vite или Webpack?

Vite.

Если вам понадобится Webpack, вы будете знать это сами.

npm, yarn или pnpm?

Рекомендуется pnpm как наиболее современный

Кроме того, он, используя жесткие ссылки вместо копирования файлов, очень сильно сохраняет дисковое пространство на компьютере в случае нескольких проектов с node_modules и одинаковыми пакетами в них.

Создание Vue приложения

Vue-cli - устаревший способ

Создание напрямую через Vite:

sh
pnpm create vite

Либо в онлайн песочнице.

Подробнее - на сайте Vite

Как настроить алиас @?

Алиасы - настройка сборщика, и для каждого сборщика устанавливается по-своему.

Для того, чтобы использовать алиас @ в путях в проекте с Vite

js
import BaseIcon from "@/components/ui/BaseIcon.vue";

нужно настроить его в vite.config.j(t)s:

js
// vite.config.js
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Создание и сборка приложения","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/building.md","filePath":"ru/development/building.md","lastUpdated":1726505115000}'),t={name:"ru/development/building.md"},p=n(`

Создание и сборка приложения

Сборка приложения

Чтобы собрать Vue проект в файлы, понятные браузеру, нужен сборщик. Самые популярные - Vite и Webpack

Vite более новый и использует современные технологии, включая esbuild для dev сборок для транспиляции TypeScript в JavaScript, который в 20~30 раз быстрее чем обычный tsc, что делает HMR в десятки раз быстрей, чем на Webpack. Для билда JavaScript для production используется сборщик Rollup.

Нужно учитывать, что каждый сборщик собирает ресурсы приложения (иконки, SVG и пр.) по-своему, используя свои плагины, и требует в этом настройки.

Оба сборщика позволяют расширять свои возможности кастомными плагинами.

Vite или Webpack?

Vite.

Если вам понадобится Webpack, вы будете знать это сами.

npm, yarn или pnpm?

Рекомендуется pnpm как наиболее современный

Кроме того, он, используя жесткие ссылки вместо копирования файлов, очень сильно сохраняет дисковое пространство на компьютере в случае нескольких проектов с node_modules и одинаковыми пакетами в них.

Создание Vue приложения

Vue-cli - устаревший способ

Создание напрямую через Vite:

sh
pnpm create vite

Либо в онлайн песочнице.

Подробнее - на сайте Vite

Как настроить алиас @?

Алиасы - настройка сборщика, и для каждого сборщика устанавливается по-своему.

Для того, чтобы использовать алиас @ в путях в проекте с Vite

js
import BaseIcon from "@/components/ui/BaseIcon.vue";

нужно настроить его в vite.config.j(t)s:

js
// vite.config.js
 import path from "node:path";
 
 export default defineConfig({
diff --git a/assets/ru_development_building.md.BaYBsODo.lean.js b/assets/ru_development_building.md.cODkCwRM.lean.js
similarity index 86%
rename from assets/ru_development_building.md.BaYBsODo.lean.js
rename to assets/ru_development_building.md.cODkCwRM.lean.js
index 84367334c..6b48e8df9 100644
--- a/assets/ru_development_building.md.BaYBsODo.lean.js
+++ b/assets/ru_development_building.md.cODkCwRM.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Создание и сборка приложения","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/building.md","filePath":"ru/development/building.md","lastUpdated":1726474804000}'),t={name:"ru/development/building.md"},p=n("",7),e=[p];function l(h,k,d,o,r,c){return i(),a("div",null,e)}const u=s(t,[["render",l]]);export{g as __pageData,u as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Создание и сборка приложения","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/building.md","filePath":"ru/development/building.md","lastUpdated":1726505115000}'),t={name:"ru/development/building.md"},p=n("",7),e=[p];function l(h,k,d,o,r,c){return i(),a("div",null,e)}const u=s(t,[["render",l]]);export{g as __pageData,u as default};
diff --git a/assets/ru_development_ide.md.UIwOaYtL.js b/assets/ru_development_ide.md.DbzflZK0.js
similarity index 99%
rename from assets/ru_development_ide.md.UIwOaYtL.js
rename to assets/ru_development_ide.md.DbzflZK0.js
index fbbb60ead..35d34404b 100644
--- a/assets/ru_development_ide.md.UIwOaYtL.js
+++ b/assets/ru_development_ide.md.DbzflZK0.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const d=JSON.parse('{"title":"Настройка IDE","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/ide.md","filePath":"ru/development/ide.md","lastUpdated":1726474804000}'),t={name:"ru/development/ide.md"},l=n(`

Настройка IDE

Какой IDE выбрать?

Vue рекомендует Microsoft VS Code. Второй по популярности - WebStorm

В VS Code намного раньше появляются новые официальные расширения для Vue, и вообще эта среда очень удобна для разработки в целом, есть множество полезных расширений, - например, можно запустить GitHub Action и посмотреть его вывод прямо в редакторе.

WebStorm даёт больше возможностей по работе в js, html, но глючит с TypeScript и не только в SFC script setup, и вообще не очень успевает за изменениями во Vue.

Для начинающих однозначно VS Code

Необходимые расширения VS Code

При работе с Vite и Vue 3:

  • ESlint
  • Volar

Могут пригодиться:

  • Typescript Vue Plugin
  • Codeium
  • SFTP
  • GitHub Actions
Настройка VS Code

VS Code позволяет делать очень тонкую настройку. Например, попробуйте создать вот этот файл локальных настроек .vscode/setting.json и посмотрите как изменится редактор.

settings.json
json
{
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const d=JSON.parse('{"title":"Настройка IDE","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/ide.md","filePath":"ru/development/ide.md","lastUpdated":1726505115000}'),t={name:"ru/development/ide.md"},l=n(`

Настройка IDE

Какой IDE выбрать?

Vue рекомендует Microsoft VS Code. Второй по популярности - WebStorm

В VS Code намного раньше появляются новые официальные расширения для Vue, и вообще эта среда очень удобна для разработки в целом, есть множество полезных расширений, - например, можно запустить GitHub Action и посмотреть его вывод прямо в редакторе.

WebStorm даёт больше возможностей по работе в js, html, но глючит с TypeScript и не только в SFC script setup, и вообще не очень успевает за изменениями во Vue.

Для начинающих однозначно VS Code

Необходимые расширения VS Code

При работе с Vite и Vue 3:

  • ESlint
  • Volar

Могут пригодиться:

  • Typescript Vue Plugin
  • Codeium
  • SFTP
  • GitHub Actions
Настройка VS Code

VS Code позволяет делать очень тонкую настройку. Например, попробуйте создать вот этот файл локальных настроек .vscode/setting.json и посмотрите как изменится редактор.

settings.json
json
{
   "editor.formatOnSave": false,
   "editor.defaultFormatter": "esbenp.prettier-vscode",
   "[vue]": {
diff --git a/assets/ru_development_ide.md.UIwOaYtL.lean.js b/assets/ru_development_ide.md.DbzflZK0.lean.js
similarity index 85%
rename from assets/ru_development_ide.md.UIwOaYtL.lean.js
rename to assets/ru_development_ide.md.DbzflZK0.lean.js
index ab49e79d7..3196dc30e 100644
--- a/assets/ru_development_ide.md.UIwOaYtL.lean.js
+++ b/assets/ru_development_ide.md.DbzflZK0.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const d=JSON.parse('{"title":"Настройка IDE","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/ide.md","filePath":"ru/development/ide.md","lastUpdated":1726474804000}'),t={name:"ru/development/ide.md"},l=n("",8),h=[l];function p(k,e,r,E,o,g){return i(),a("div",null,h)}const u=s(t,[["render",p]]);export{d as __pageData,u as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const d=JSON.parse('{"title":"Настройка IDE","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/ide.md","filePath":"ru/development/ide.md","lastUpdated":1726505115000}'),t={name:"ru/development/ide.md"},l=n("",8),h=[l];function p(k,e,r,E,o,g){return i(),a("div",null,h)}const u=s(t,[["render",p]]);export{d as __pageData,u as default};
diff --git a/assets/ru_development_libraries.md.BFhnYXXA.js b/assets/ru_development_libraries.md.DsexKnt4.js
similarity index 96%
rename from assets/ru_development_libraries.md.BFhnYXXA.js
rename to assets/ru_development_libraries.md.DsexKnt4.js
index 8703a8e2e..a2a0fbca3 100644
--- a/assets/ru_development_libraries.md.BFhnYXXA.js
+++ b/assets/ru_development_libraries.md.DsexKnt4.js
@@ -1 +1 @@
-import{_ as e,o as a,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"Подскажите удобную библиотеку","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/libraries.md","filePath":"ru/development/libraries.md","lastUpdated":1726474804000}'),s={name:"ru/development/libraries.md"},o=r('

Подскажите удобную библиотеку

Для работы с датами

moment безвозвратно устарел. Есть day.js и day-fnc.js

Однако в 95% случаев хватает возможностей стандартного JavaScript Intl пакета

Для UI компонентов

Существует достаточно много CSS и UI библиотек

Вот в этой статье есть небольшой обзор их тяжеловесности

Quasar и PrimeVue выглядят солидно.

',3),l=[o];function i(c,d,n,_,m,p){return a(),t("div",null,l)}const f=e(s,[["render",i]]);export{h as __pageData,f as default}; +import{_ as e,o as a,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"Подскажите удобную библиотеку","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/libraries.md","filePath":"ru/development/libraries.md","lastUpdated":1726505115000}'),s={name:"ru/development/libraries.md"},o=r('

Подскажите удобную библиотеку

Для работы с датами

moment безвозвратно устарел. Есть day.js и day-fnc.js

Однако в 95% случаев хватает возможностей стандартного JavaScript Intl пакета

Для UI компонентов

Существует достаточно много CSS и UI библиотек

Вот в этой статье есть небольшой обзор их тяжеловесности

Quasar и PrimeVue выглядят солидно.

',3),l=[o];function i(c,d,n,_,m,p){return a(),t("div",null,l)}const f=e(s,[["render",i]]);export{h as __pageData,f as default}; diff --git a/assets/ru_development_libraries.md.BFhnYXXA.lean.js b/assets/ru_development_libraries.md.DsexKnt4.lean.js similarity index 87% rename from assets/ru_development_libraries.md.BFhnYXXA.lean.js rename to assets/ru_development_libraries.md.DsexKnt4.lean.js index 054522151..fe6bc907a 100644 --- a/assets/ru_development_libraries.md.BFhnYXXA.lean.js +++ b/assets/ru_development_libraries.md.DsexKnt4.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"Подскажите удобную библиотеку","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/libraries.md","filePath":"ru/development/libraries.md","lastUpdated":1726474804000}'),s={name:"ru/development/libraries.md"},o=r("",3),l=[o];function i(c,d,n,_,m,p){return a(),t("div",null,l)}const f=e(s,[["render",i]]);export{h as __pageData,f as default}; +import{_ as e,o as a,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"Подскажите удобную библиотеку","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/libraries.md","filePath":"ru/development/libraries.md","lastUpdated":1726505115000}'),s={name:"ru/development/libraries.md"},o=r("",3),l=[o];function i(c,d,n,_,m,p){return a(),t("div",null,l)}const f=e(s,[["render",i]]);export{h as __pageData,f as default}; diff --git a/assets/ru_development_misc.md.DNIBwOgK.js b/assets/ru_development_misc.md.CNJvYma1.js similarity index 99% rename from assets/ru_development_misc.md.DNIBwOgK.js rename to assets/ru_development_misc.md.CNJvYma1.js index 4cdc437d8..7cc3d1449 100644 --- a/assets/ru_development_misc.md.DNIBwOgK.js +++ b/assets/ru_development_misc.md.CNJvYma1.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as i,a4 as e,a5 as t,a6 as l}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Полезные советы","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/misc.md","filePath":"ru/development/misc.md","lastUpdated":1726474804000}'),n={name:"ru/development/misc.md"},p=e(`

Полезные советы

Какие есть хорошие библиотеки для работы с ...?

Карусель или слайдер

Keen-Slider, Embla Carousel, Splide

Хорошо известный Swiper не очень подходит для Vue.js

Toaster

vue-sonner

Дата и время

day.js, day-fnc.js

Известный moment.js безвозвратно устарел.

TIP

Современный JavaScript - это гораздо больше, чем было 10 лет назад. В 95% случаев для операций с датой достаточно возможностей стандартного пакета JavaScript Intl

Как поймать момент когда пользователь доскролил до определенного места или сделать virtual scroll?

Intersection Observer

i18n - интернационализация приложения

NPM библиотека для интернационализации и локализации i18n очень популярна, однако за последние годы она сильно располнела. В ней много возможностей для локализации дат, чисел, установки нужных склонений, поддержки RTL языков, загрузки локалей с сервера и кучи еще чего. На сайте i18next она называется уже даже "интернационализационным фреймворком".

В то же время часто для локализации сайта в большинстве случаев требуются очень простые вещи, занимающие всего пару процентов от всего функционала тяжеловеса i18n.

По сути обычно нужна реактивная функция, по ключу и текущей локали возвращающая строку.

Вариант реализации через композабл - в этой статье

Ваш бандл "похудеет" на 50Кб.

Options API или Composition API?

Советуется Composition API (script setup) как более логичный и удобный, в котором программист контролирует поток выполнения программы средствами JavaScript, а не просто задает какие-то магические опции.

Ref или Reactive?

Отличие в плане использования - Reactive работает только с объектами и не отслеживает замену объекта. Ref работает со всем и отслеживает замену переменной:

js
const a = Ref(1);
+import{_ as s,o as a,c as i,a4 as e,a5 as t,a6 as l}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Полезные советы","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/misc.md","filePath":"ru/development/misc.md","lastUpdated":1726505115000}'),n={name:"ru/development/misc.md"},p=e(`

Полезные советы

Какие есть хорошие библиотеки для работы с ...?

Карусель или слайдер

Keen-Slider, Embla Carousel, Splide

Хорошо известный Swiper не очень подходит для Vue.js

Toaster

vue-sonner

Дата и время

day.js, day-fnc.js

Известный moment.js безвозвратно устарел.

TIP

Современный JavaScript - это гораздо больше, чем было 10 лет назад. В 95% случаев для операций с датой достаточно возможностей стандартного пакета JavaScript Intl

Как поймать момент когда пользователь доскролил до определенного места или сделать virtual scroll?

Intersection Observer

i18n - интернационализация приложения

NPM библиотека для интернационализации и локализации i18n очень популярна, однако за последние годы она сильно располнела. В ней много возможностей для локализации дат, чисел, установки нужных склонений, поддержки RTL языков, загрузки локалей с сервера и кучи еще чего. На сайте i18next она называется уже даже "интернационализационным фреймворком".

В то же время часто для локализации сайта в большинстве случаев требуются очень простые вещи, занимающие всего пару процентов от всего функционала тяжеловеса i18n.

По сути обычно нужна реактивная функция, по ключу и текущей локали возвращающая строку.

Вариант реализации через композабл - в этой статье

Ваш бандл "похудеет" на 50Кб.

Options API или Composition API?

Советуется Composition API (script setup) как более логичный и удобный, в котором программист контролирует поток выполнения программы средствами JavaScript, а не просто задает какие-то магические опции.

Ref или Reactive?

Отличие в плане использования - Reactive работает только с объектами и не отслеживает замену объекта. Ref работает со всем и отслеживает замену переменной:

js
const a = Ref(1);
 const b = Reactive({ x: 1 });
 
 // is OK
diff --git a/assets/ru_development_misc.md.DNIBwOgK.lean.js b/assets/ru_development_misc.md.CNJvYma1.lean.js
similarity index 86%
rename from assets/ru_development_misc.md.DNIBwOgK.lean.js
rename to assets/ru_development_misc.md.CNJvYma1.lean.js
index 3d38a3e24..cccb89448 100644
--- a/assets/ru_development_misc.md.DNIBwOgK.lean.js
+++ b/assets/ru_development_misc.md.CNJvYma1.lean.js
@@ -1 +1 @@
-import{_ as s,o as a,c as i,a4 as e,a5 as t,a6 as l}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Полезные советы","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/misc.md","filePath":"ru/development/misc.md","lastUpdated":1726474804000}'),n={name:"ru/development/misc.md"},p=e("",10),r=[p];function h(o,k,d,c,m,u){return a(),i("div",null,r)}const E=s(n,[["render",h]]);export{y as __pageData,E as default};
+import{_ as s,o as a,c as i,a4 as e,a5 as t,a6 as l}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Полезные советы","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/misc.md","filePath":"ru/development/misc.md","lastUpdated":1726505115000}'),n={name:"ru/development/misc.md"},p=e("",10),r=[p];function h(o,k,d,c,m,u){return a(),i("div",null,r)}const E=s(n,[["render",h]]);export{y as __pageData,E as default};
diff --git a/assets/ru_development_project-structure.md.CI0zM6Ae.js b/assets/ru_development_project-structure.md.D7RYwIgu.js
similarity index 99%
rename from assets/ru_development_project-structure.md.CI0zM6Ae.js
rename to assets/ru_development_project-structure.md.D7RYwIgu.js
index 54a5f958b..eca408192 100644
--- a/assets/ru_development_project-structure.md.CI0zM6Ae.js
+++ b/assets/ru_development_project-structure.md.D7RYwIgu.js
@@ -1,4 +1,4 @@
-import{_ as s,o as n,c as a,a4 as p,a7 as e,a8 as l,a9 as t}from"./chunks/framework.B8KxSsRZ.js";import{_ as i}from"./chunks/modular-architecture.C9UloQkF.js";const P=JSON.parse('{"title":"Структура Vue 3 проекта","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/project-structure.md","filePath":"ru/development/project-structure.md","lastUpdated":1726474804000}'),c={name:"ru/development/project-structure.md"},o=p(`

Структура Vue 3 проекта

Какие бывают структуры файлов для Vue 3 проектов?

Плоская структура

При запуске небольшого проекта Vue, такого как Proof of Concept, вы можете предпочесть простую структуру папок, чтобы избежать сложностей:

txt
/src
+import{_ as s,o as n,c as a,a4 as p,a7 as e,a8 as l,a9 as t}from"./chunks/framework.B8KxSsRZ.js";import{_ as i}from"./chunks/modular-architecture.C9UloQkF.js";const P=JSON.parse('{"title":"Структура Vue 3 проекта","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/project-structure.md","filePath":"ru/development/project-structure.md","lastUpdated":1726505115000}'),c={name:"ru/development/project-structure.md"},o=p(`

Структура Vue 3 проекта

Какие бывают структуры файлов для Vue 3 проектов?

Плоская структура

При запуске небольшого проекта Vue, такого как Proof of Concept, вы можете предпочесть простую структуру папок, чтобы избежать сложностей:

txt
/src
 |-- /components
 |   |-- BaseButton.vue
 |   |-- BaseCard.vue
diff --git a/assets/ru_development_project-structure.md.CI0zM6Ae.lean.js b/assets/ru_development_project-structure.md.D7RYwIgu.lean.js
similarity index 89%
rename from assets/ru_development_project-structure.md.CI0zM6Ae.lean.js
rename to assets/ru_development_project-structure.md.D7RYwIgu.lean.js
index 86f13791c..1f3f2d4ed 100644
--- a/assets/ru_development_project-structure.md.CI0zM6Ae.lean.js
+++ b/assets/ru_development_project-structure.md.D7RYwIgu.lean.js
@@ -1 +1 @@
-import{_ as s,o as n,c as a,a4 as p,a7 as e,a8 as l,a9 as t}from"./chunks/framework.B8KxSsRZ.js";import{_ as i}from"./chunks/modular-architecture.C9UloQkF.js";const P=JSON.parse('{"title":"Структура Vue 3 проекта","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/project-structure.md","filePath":"ru/development/project-structure.md","lastUpdated":1726474804000}'),c={name:"ru/development/project-structure.md"},o=p("",18),r=[o];function d(u,m,v,h,g,b){return n(),a("div",null,r)}const y=s(c,[["render",d]]);export{P as __pageData,y as default};
+import{_ as s,o as n,c as a,a4 as p,a7 as e,a8 as l,a9 as t}from"./chunks/framework.B8KxSsRZ.js";import{_ as i}from"./chunks/modular-architecture.C9UloQkF.js";const P=JSON.parse('{"title":"Структура Vue 3 проекта","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/project-structure.md","filePath":"ru/development/project-structure.md","lastUpdated":1726505115000}'),c={name:"ru/development/project-structure.md"},o=p("",18),r=[o];function d(u,m,v,h,g,b){return n(),a("div",null,r)}const y=s(c,[["render",d]]);export{P as __pageData,y as default};
diff --git a/assets/ru_development_stores.md.CxiEd3V5.js b/assets/ru_development_stores.md.C7vjBF_3.js
similarity index 99%
rename from assets/ru_development_stores.md.CxiEd3V5.js
rename to assets/ru_development_stores.md.C7vjBF_3.js
index b72ab3071..d8af001e9 100644
--- a/assets/ru_development_stores.md.CxiEd3V5.js
+++ b/assets/ru_development_stores.md.C7vjBF_3.js
@@ -1 +1 @@
-import{_ as e,o as t,c as o,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"State management во Vue 3","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/stores.md","filePath":"ru/development/stores.md","lastUpdated":1726474804000}'),s={name:"ru/development/stores.md"},i=a('

State management во Vue 3

Зачем нужен State management?

Иногда в приложении нужно передать реактивные данные или функцию из одного компонента в другой, и эти компоненты не принадлежат одной иерархии. Механизмы пропсов/ивентов или provide/inject не подходят для этого. Поэтому во Vue 2 появился Vuex - state management библиотека, которая позволяет хранить реактивный стейт и предоставлять доступ к нему отовсюду.

Библиотека управления стейтом на фронтенде обычно называется "стором".

Как можно передать реактивные данные из одного компонента в другой во Vue 3?
  • Если один компонент является прямым потомком другого - пропсы и ивенты
  • Если один компонент непрямой потомок другого - provide/inject или проп/ивент дриллинг (плохая практика)
  • Если они в разных ветках иерархии - стор или Vue 3 ref/reactive

Vue 3 ref/reactive - это когда в отдельном js модуле вы определяете и экспортируете реактивную переменную:

export const userLoggedIn = ref(false);

После чего она доступна во всём приложении через импорт данного модуля.

Однако, расшаривать просто переменную - архитектурно плохая идея. Обычно вокруг этой переменной есть бизнес логика, которую и надо сделать доступной.

Например, для аутентификации нужен не только сам факт, что пользователь залогинился, но и сопутствующие методы - login(), logout(), register(), isAuthenticated(). Синтез некоего стейта и сопутствующей бизнес логики дал так называемые composable функции во Vue 3.

В некотором смысле - аналог объекта в ООП.

Что такое стор (store) на фронтенде?

A Store (like Pinia) is an entity holding state and business logic that isn't bound to your Component tree. In other words, it hosts global state. It's a bit like a component that is always there and that everybody can read off and write to.

Стор (например, Pinia) — это сущность, содержащая состояние и бизнес-логику, которая не привязана к вашему дереву компонентов. Другими словами, здесь находится глобальное состояние. Это что-то вроде компонента, который всегда присутствует, и который каждый может считывать и писать в него.

Официальная документация Pinia

Выглядит как очень неудачное, двусмысленное и запутывающее определение.

С точки зрения разработчика не фронтенда (по сути любой другой язык, кроме JavaScript, плюс частично JavaScript), аналогом конструкции с названиемстор будет база данных - SQL, NoSQL или кэширующий Redis. Там есть аналоги стейта и геттеров (View в SQL БД). Но в 99.99% случаях в базе данных не будет никакой бизнес логики, за исключением ограничений для консистентности данных (например, unique или foreign keys).

С точки зрения разработчика не фронтенда, сторы фронтенда - это просто объекты / stateful сервисы, построенные по шаблону синглтон. Называть их "глобальными сторами" как минимум нелогично.

Скорей всего, это произошло исторически. Сперва был один Vuex, он был один стор и глобален. Потом у него появились модули. Потом у Pinia эти модули стали независимы и расползлись по всему приложению. В итоге, в приложении куча мелких локальных (по области использования) сторов, каждый из которых считает себя глобальным, даже если его использует 2-3 компонента из 1000 на проекте, и даже если в этом сторе 1% - стейта, и 99% - бизнес и сопутствующей логики.

В этом плане использование композабл функций для той же цели (an entity holding state and business logic that isn't bound to your Component tree) - намного более логично. И называть их следует не useAuthStore, а useAuth или useAuthService.

Vuex или Pinia?

Во Vue 3 основной внешней библиотекой управления стейтом стала Pinia. В отличие от Vuex у нее есть поддержка TypeScript, она удобней и, естественно, пользуется преимуществами Vue 3.

Vuex официально устарел (deprecated)

Pinia или Composable functions?

Во Vue 3 появилось нечто, делающее отдельную библиотеку для управления стейтом ненужной. А именно, реактивные типыRef и Reactive, которыми можно пользоваться за пределами компонент. Стало возможным делать свои сторы на основе composable функций и подключать их в любом компоненте.

Основное декларируемое отличие Pinia - интеграция с Vue DevTools, плагины и SSR поддержка. Однако, нужно ли ему то или другое, каждый разработчик решает сам. Работать с composables в DevTools вполне комфортно.

Composable функция, в свою очередь, может иметь как глобальный, так и локальный (переменные объявлены внутри функции) стейты. Это бывает удобно в определенных случаях - можно создать несколько экземпляров composable функций, каждая со своим стейтом. Например, когда у вас на сайте несколько новостных виджетов, различающихся только категорией новостей.

Кроме того, с функциональной точки зрения composable функции имеют полный доступ ко всему Vue Reactivity API, что делает их гибче, чем Pinia.

Composable функции с глобальным стейтом не работают в SSR режиме.

Что касается производительности, то по тестам на изменениях Reactive Pinia примерно в полтора раза медленней Vue 3 Reactive, а на Ref - в 20 раз. Это потому, что Ref (примитивные типы) в Pinia становится частью Reactive. Setup store не решают эту проблему.

Также надо помнить, что любая зависимость (в данном случае библиотека Pinia) может принести проблемы, аналогичные с ситуацией "RIP Vuex", когда библиотека умирает, устаревает, перестает поддерживаться или в ней находят уязвимости. Composable функции, в свою очередь, выглядят основательным нововведением во Vue фреймворк.

Вот интересное обсуждение по теме на /r/vuejs. Пример кода от Reddit пользователя @ferferga показывает, как использовать классы TypeScript с private методами, геттерами, сеттерами (без .value) и поддержкой типов первого класса в качестве store на Composition API (что было бы невозможно с Pinia). Использование классов TS здесь, возможно, не является хорошей практикой, но демонстрирует гибкость и мощь Composition API.

Также вот лайфхак для Devtools от пользователя @coolcosmos: Я просто использую рефы. Минус в том, что вы теряете Devtools, но в режиме разработки я временно импортирую все свои рефы и передаю их в Pinia, так что у меня есть все плюсы и никаких минусов.

Как разделять логику между компонентом и composable функциями?

Удобно представлять это как MVC шаблон, где роль View (и частично Controller) выполняют компоненты, отвечающие преимущественно за визуализацию, а логика и модель (Model и частично Controller) приходятся на композабл функции и их реактивный стейт.

Чтобы понять, что класть в композабл, а что в компонент (который может состоять из нескольких компонент), представьте, что вы меняете компонент на другой - отображающий ваши данные как-то иначе. В идеале, модель (композабл) должен остаться тем же самым, вы переписываете только компонент, в котором логика, ответственная только за отображение.

В то же время, логика (Controller) может делиться между компонентом и композаблом. Например, валидация данных формы может происходить в компоненте (проверка, что поле заполнено), в компоненте с помощью сторонней утилиты (проверка, что пароль - "сложный") и в композабле (проверка, что username - уникален)

',7),r=[i];function n(l,p,c,d,m,u){return t(),o("div",null,r)}const g=e(s,[["render",n]]);export{b as __pageData,g as default}; +import{_ as e,o as t,c as o,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"State management во Vue 3","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/stores.md","filePath":"ru/development/stores.md","lastUpdated":1726505115000}'),s={name:"ru/development/stores.md"},i=a('

State management во Vue 3

Зачем нужен State management?

Иногда в приложении нужно передать реактивные данные или функцию из одного компонента в другой, и эти компоненты не принадлежат одной иерархии. Механизмы пропсов/ивентов или provide/inject не подходят для этого. Поэтому во Vue 2 появился Vuex - state management библиотека, которая позволяет хранить реактивный стейт и предоставлять доступ к нему отовсюду.

Библиотека управления стейтом на фронтенде обычно называется "стором".

Как можно передать реактивные данные из одного компонента в другой во Vue 3?
  • Если один компонент является прямым потомком другого - пропсы и ивенты
  • Если один компонент непрямой потомок другого - provide/inject или проп/ивент дриллинг (плохая практика)
  • Если они в разных ветках иерархии - стор или Vue 3 ref/reactive

Vue 3 ref/reactive - это когда в отдельном js модуле вы определяете и экспортируете реактивную переменную:

export const userLoggedIn = ref(false);

После чего она доступна во всём приложении через импорт данного модуля.

Однако, расшаривать просто переменную - архитектурно плохая идея. Обычно вокруг этой переменной есть бизнес логика, которую и надо сделать доступной.

Например, для аутентификации нужен не только сам факт, что пользователь залогинился, но и сопутствующие методы - login(), logout(), register(), isAuthenticated(). Синтез некоего стейта и сопутствующей бизнес логики дал так называемые composable функции во Vue 3.

В некотором смысле - аналог объекта в ООП.

Что такое стор (store) на фронтенде?

A Store (like Pinia) is an entity holding state and business logic that isn't bound to your Component tree. In other words, it hosts global state. It's a bit like a component that is always there and that everybody can read off and write to.

Стор (например, Pinia) — это сущность, содержащая состояние и бизнес-логику, которая не привязана к вашему дереву компонентов. Другими словами, здесь находится глобальное состояние. Это что-то вроде компонента, который всегда присутствует, и который каждый может считывать и писать в него.

Официальная документация Pinia

Выглядит как очень неудачное, двусмысленное и запутывающее определение.

С точки зрения разработчика не фронтенда (по сути любой другой язык, кроме JavaScript, плюс частично JavaScript), аналогом конструкции с названиемстор будет база данных - SQL, NoSQL или кэширующий Redis. Там есть аналоги стейта и геттеров (View в SQL БД). Но в 99.99% случаях в базе данных не будет никакой бизнес логики, за исключением ограничений для консистентности данных (например, unique или foreign keys).

С точки зрения разработчика не фронтенда, сторы фронтенда - это просто объекты / stateful сервисы, построенные по шаблону синглтон. Называть их "глобальными сторами" как минимум нелогично.

Скорей всего, это произошло исторически. Сперва был один Vuex, он был один стор и глобален. Потом у него появились модули. Потом у Pinia эти модули стали независимы и расползлись по всему приложению. В итоге, в приложении куча мелких локальных (по области использования) сторов, каждый из которых считает себя глобальным, даже если его использует 2-3 компонента из 1000 на проекте, и даже если в этом сторе 1% - стейта, и 99% - бизнес и сопутствующей логики.

В этом плане использование композабл функций для той же цели (an entity holding state and business logic that isn't bound to your Component tree) - намного более логично. И называть их следует не useAuthStore, а useAuth или useAuthService.

Vuex или Pinia?

Во Vue 3 основной внешней библиотекой управления стейтом стала Pinia. В отличие от Vuex у нее есть поддержка TypeScript, она удобней и, естественно, пользуется преимуществами Vue 3.

Vuex официально устарел (deprecated)

Pinia или Composable functions?

Во Vue 3 появилось нечто, делающее отдельную библиотеку для управления стейтом ненужной. А именно, реактивные типыRef и Reactive, которыми можно пользоваться за пределами компонент. Стало возможным делать свои сторы на основе composable функций и подключать их в любом компоненте.

Основное декларируемое отличие Pinia - интеграция с Vue DevTools, плагины и SSR поддержка. Однако, нужно ли ему то или другое, каждый разработчик решает сам. Работать с composables в DevTools вполне комфортно.

Composable функция, в свою очередь, может иметь как глобальный, так и локальный (переменные объявлены внутри функции) стейты. Это бывает удобно в определенных случаях - можно создать несколько экземпляров composable функций, каждая со своим стейтом. Например, когда у вас на сайте несколько новостных виджетов, различающихся только категорией новостей.

Кроме того, с функциональной точки зрения composable функции имеют полный доступ ко всему Vue Reactivity API, что делает их гибче, чем Pinia.

Composable функции с глобальным стейтом не работают в SSR режиме.

Что касается производительности, то по тестам на изменениях Reactive Pinia примерно в полтора раза медленней Vue 3 Reactive, а на Ref - в 20 раз. Это потому, что Ref (примитивные типы) в Pinia становится частью Reactive. Setup store не решают эту проблему.

Также надо помнить, что любая зависимость (в данном случае библиотека Pinia) может принести проблемы, аналогичные с ситуацией "RIP Vuex", когда библиотека умирает, устаревает, перестает поддерживаться или в ней находят уязвимости. Composable функции, в свою очередь, выглядят основательным нововведением во Vue фреймворк.

Вот интересное обсуждение по теме на /r/vuejs. Пример кода от Reddit пользователя @ferferga показывает, как использовать классы TypeScript с private методами, геттерами, сеттерами (без .value) и поддержкой типов первого класса в качестве store на Composition API (что было бы невозможно с Pinia). Использование классов TS здесь, возможно, не является хорошей практикой, но демонстрирует гибкость и мощь Composition API.

Также вот лайфхак для Devtools от пользователя @coolcosmos: Я просто использую рефы. Минус в том, что вы теряете Devtools, но в режиме разработки я временно импортирую все свои рефы и передаю их в Pinia, так что у меня есть все плюсы и никаких минусов.

Как разделять логику между компонентом и composable функциями?

Удобно представлять это как MVC шаблон, где роль View (и частично Controller) выполняют компоненты, отвечающие преимущественно за визуализацию, а логика и модель (Model и частично Controller) приходятся на композабл функции и их реактивный стейт.

Чтобы понять, что класть в композабл, а что в компонент (который может состоять из нескольких компонент), представьте, что вы меняете компонент на другой - отображающий ваши данные как-то иначе. В идеале, модель (композабл) должен остаться тем же самым, вы переписываете только компонент, в котором логика, ответственная только за отображение.

В то же время, логика (Controller) может делиться между компонентом и композаблом. Например, валидация данных формы может происходить в компоненте (проверка, что поле заполнено), в компоненте с помощью сторонней утилиты (проверка, что пароль - "сложный") и в композабле (проверка, что username - уникален)

',7),r=[i];function n(l,p,c,d,m,u){return t(),o("div",null,r)}const g=e(s,[["render",n]]);export{b as __pageData,g as default}; diff --git a/assets/ru_development_stores.md.CxiEd3V5.lean.js b/assets/ru_development_stores.md.C7vjBF_3.lean.js similarity index 86% rename from assets/ru_development_stores.md.CxiEd3V5.lean.js rename to assets/ru_development_stores.md.C7vjBF_3.lean.js index 69f2bd690..f68436a39 100644 --- a/assets/ru_development_stores.md.CxiEd3V5.lean.js +++ b/assets/ru_development_stores.md.C7vjBF_3.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as o,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"State management во Vue 3","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/stores.md","filePath":"ru/development/stores.md","lastUpdated":1726474804000}'),s={name:"ru/development/stores.md"},i=a("",7),r=[i];function n(l,p,c,d,m,u){return t(),o("div",null,r)}const g=e(s,[["render",n]]);export{b as __pageData,g as default}; +import{_ as e,o as t,c as o,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"State management во Vue 3","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/stores.md","filePath":"ru/development/stores.md","lastUpdated":1726505115000}'),s={name:"ru/development/stores.md"},i=a("",7),r=[i];function n(l,p,c,d,m,u){return t(),o("div",null,r)}const g=e(s,[["render",n]]);export{b as __pageData,g as default}; diff --git a/assets/ru_development_testing.md.C_D43HnM.js b/assets/ru_development_testing.md.DNm2QOq1.js similarity index 98% rename from assets/ru_development_testing.md.C_D43HnM.js rename to assets/ru_development_testing.md.DNm2QOq1.js index d42a96fa1..8ee283200 100644 --- a/assets/ru_development_testing.md.C_D43HnM.js +++ b/assets/ru_development_testing.md.DNm2QOq1.js @@ -1 +1 @@ -import{_ as e,o as t,c as r,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Тестирование","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/testing.md","filePath":"ru/development/testing.md","lastUpdated":1726474804000}'),s={name:"ru/development/testing.md"},n=a('

Тестирование

Нужно ли тестирование на фронтенде?

Тесты бывают нескольких типов, среди них - unit тесты и интеграционные (e2e) теcты

Unit тестированием во Vue занимаются Vitest, Jest

С тестированием на фронте нужно быть аккуратней, так как написание и переписывание тестов зачастую может занять время, сопоставимое с самой разработкой. В то же время, полезность этих тестов будет под большим вопросом. Их целесообразность проявляется на больших проектах с большим количеством разработчиков. Там unit тесты также отнимают время, но снижают вероятность, что кто-то что-то испортит. В то же время на стартапе unit тесты далеко не самый нужный ингридиент для быстрого создания MVP.

Фронтенд разработка в этом аспекте очень сильно отличается от бэкенд разработки, где unit тесты действительно полезны.

Хорошая статья на эту тему - Unit Test Fetish

Что такое e2e тесты?

На фронте, особенно для веб приложения, которое уже в продакшне и должно время от времени обновляться, важны e2e тесты.

e2e (end-to-end) тестирование — это процесс тестирования программного обеспечения, который имитирует реальные действия пользователей на уровне интерфейса.

При этом будет запущен браузер (обычно, в headless режиме - без UI), и он по написанным скриптам будет проверять работу сайта - наличие элементов на странице, возможность логина и т.п.

Основные средства для e2e тестирования - Cypress, WebdriverIO

При CI/CD проекта прогон тестов - один из основных моментов наряду с линтингом и билдом.

',3),o=[n];function p(i,l,d,_,c,m){return t(),r("div",null,o)}const f=e(s,[["render",p]]);export{u as __pageData,f as default}; +import{_ as e,o as t,c as r,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Тестирование","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/testing.md","filePath":"ru/development/testing.md","lastUpdated":1726505115000}'),s={name:"ru/development/testing.md"},n=a('

Тестирование

Нужно ли тестирование на фронтенде?

Тесты бывают нескольких типов, среди них - unit тесты и интеграционные (e2e) теcты

Unit тестированием во Vue занимаются Vitest, Jest

С тестированием на фронте нужно быть аккуратней, так как написание и переписывание тестов зачастую может занять время, сопоставимое с самой разработкой. В то же время, полезность этих тестов будет под большим вопросом. Их целесообразность проявляется на больших проектах с большим количеством разработчиков. Там unit тесты также отнимают время, но снижают вероятность, что кто-то что-то испортит. В то же время на стартапе unit тесты далеко не самый нужный ингридиент для быстрого создания MVP.

Фронтенд разработка в этом аспекте очень сильно отличается от бэкенд разработки, где unit тесты действительно полезны.

Хорошая статья на эту тему - Unit Test Fetish

Что такое e2e тесты?

На фронте, особенно для веб приложения, которое уже в продакшне и должно время от времени обновляться, важны e2e тесты.

e2e (end-to-end) тестирование — это процесс тестирования программного обеспечения, который имитирует реальные действия пользователей на уровне интерфейса.

При этом будет запущен браузер (обычно, в headless режиме - без UI), и он по написанным скриптам будет проверять работу сайта - наличие элементов на странице, возможность логина и т.п.

Основные средства для e2e тестирования - Cypress, WebdriverIO

При CI/CD проекта прогон тестов - один из основных моментов наряду с линтингом и билдом.

',3),o=[n];function p(i,l,d,_,c,m){return t(),r("div",null,o)}const f=e(s,[["render",p]]);export{u as __pageData,f as default}; diff --git a/assets/ru_development_testing.md.C_D43HnM.lean.js b/assets/ru_development_testing.md.DNm2QOq1.lean.js similarity index 86% rename from assets/ru_development_testing.md.C_D43HnM.lean.js rename to assets/ru_development_testing.md.DNm2QOq1.lean.js index aec5166c6..289ef729d 100644 --- a/assets/ru_development_testing.md.C_D43HnM.lean.js +++ b/assets/ru_development_testing.md.DNm2QOq1.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as r,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Тестирование","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/testing.md","filePath":"ru/development/testing.md","lastUpdated":1726474804000}'),s={name:"ru/development/testing.md"},n=a("",3),o=[n];function p(i,l,d,_,c,m){return t(),r("div",null,o)}const f=e(s,[["render",p]]);export{u as __pageData,f as default}; +import{_ as e,o as t,c as r,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Тестирование","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/testing.md","filePath":"ru/development/testing.md","lastUpdated":1726505115000}'),s={name:"ru/development/testing.md"},n=a("",3),o=[n];function p(i,l,d,_,c,m){return t(),r("div",null,o)}const f=e(s,[["render",p]]);export{u as __pageData,f as default}; diff --git a/assets/ru_development_web-components.md.Bh-0y3Im.js b/assets/ru_development_web-components.md.CguDt41Z.js similarity index 97% rename from assets/ru_development_web-components.md.Bh-0y3Im.js rename to assets/ru_development_web-components.md.CguDt41Z.js index 3f15e78a0..7f01bf673 100644 --- a/assets/ru_development_web-components.md.Bh-0y3Im.js +++ b/assets/ru_development_web-components.md.CguDt41Z.js @@ -1 +1 @@ -import{_ as e,o as t,c as s,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Web components","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/web-components.md","filePath":"ru/development/web-components.md","lastUpdated":1726474804000}'),i={name:"ru/development/web-components.md"},n=a('

Web components

Custom elements

Созданный вам Vue компонент можно оформить:

  • как отдельное приложение
  • как библиотеку для подключения во Vue проектах
  • как web component для подключения в любой JavaScript фронтенд приложении или просто веб-странице

Зачем нужен третий вариант? Чтобы людям, не знакомым с Vue можно было легко подключать ваш компонент у себя примерно в такой форме:

html
<release-timeline title="Hola"></release-timeline>

Web component Custom element может принимать строковый пропсы и испускать CustomEvent события.

Web components v Custom elements это давно стандарт HTML5 и поддерживается всеми основными браузерами.

',8),o=[n];function l(p,h,c,r,m,d){return t(),s("div",null,o)}const _=e(i,[["render",l]]);export{u as __pageData,_ as default}; +import{_ as e,o as t,c as s,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Web components","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/web-components.md","filePath":"ru/development/web-components.md","lastUpdated":1726505115000}'),i={name:"ru/development/web-components.md"},n=a('

Web components

Custom elements

Созданный вам Vue компонент можно оформить:

  • как отдельное приложение
  • как библиотеку для подключения во Vue проектах
  • как web component для подключения в любой JavaScript фронтенд приложении или просто веб-странице

Зачем нужен третий вариант? Чтобы людям, не знакомым с Vue можно было легко подключать ваш компонент у себя примерно в такой форме:

html
<release-timeline title="Hola"></release-timeline>

Web component Custom element может принимать строковый пропсы и испускать CustomEvent события.

Web components v Custom elements это давно стандарт HTML5 и поддерживается всеми основными браузерами.

',8),o=[n];function l(p,h,c,r,m,d){return t(),s("div",null,o)}const _=e(i,[["render",l]]);export{u as __pageData,_ as default}; diff --git a/assets/ru_development_web-components.md.Bh-0y3Im.lean.js b/assets/ru_development_web-components.md.CguDt41Z.lean.js similarity index 86% rename from assets/ru_development_web-components.md.Bh-0y3Im.lean.js rename to assets/ru_development_web-components.md.CguDt41Z.lean.js index 2d240533b..e40416235 100644 --- a/assets/ru_development_web-components.md.Bh-0y3Im.lean.js +++ b/assets/ru_development_web-components.md.CguDt41Z.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as s,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Web components","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/web-components.md","filePath":"ru/development/web-components.md","lastUpdated":1726474804000}'),i={name:"ru/development/web-components.md"},n=a("",8),o=[n];function l(p,h,c,r,m,d){return t(),s("div",null,o)}const _=e(i,[["render",l]]);export{u as __pageData,_ as default}; +import{_ as e,o as t,c as s,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Web components","description":"","frontmatter":{},"headers":[],"relativePath":"ru/development/web-components.md","filePath":"ru/development/web-components.md","lastUpdated":1726505115000}'),i={name:"ru/development/web-components.md"},n=a("",8),o=[n];function l(p,h,c,r,m,d){return t(),s("div",null,o)}const _=e(i,[["render",l]]);export{u as __pageData,_ as default}; diff --git a/assets/ru_frontend_about-frameworks.md.BnF5W9Ep.js b/assets/ru_frontend_about-frameworks.md.Da2nzlxq.js similarity index 99% rename from assets/ru_frontend_about-frameworks.md.BnF5W9Ep.js rename to assets/ru_frontend_about-frameworks.md.Da2nzlxq.js index 90e20e41b..0ec944029 100644 --- a/assets/ru_frontend_about-frameworks.md.BnF5W9Ep.js +++ b/assets/ru_frontend_about-frameworks.md.Da2nzlxq.js @@ -1,4 +1,4 @@ -import{_ as s,o as e,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"О фронтенд фреймворках","description":"","frontmatter":{},"headers":[],"relativePath":"ru/frontend/about-frameworks.md","filePath":"ru/frontend/about-frameworks.md","lastUpdated":1726474804000}'),i={name:"ru/frontend/about-frameworks.md"},p=t(`

О фронтенд фреймворках

Что такое "реактивность"?

Наверное, самое фундаментальное отличие программы для фронта от программы для бэка, микросервиса и даже отдельного приложения с GUI, это понятие "реактивности".

При работе на бэке программист имеет хорошие возможности управлять потоком данных. Он контролирует откуда их брать, куда передавать, кто их может изменить, всё это хоть в одном потоке, хоть в многопоточной системе.

На фронте большую роль играет фактор интерактивности UI - данные надо динамично показывать пользователю, пользователь может изменять данные, данные могут изменяться различными контрагентами (пользователь, бэкенд, внутренние вычисления). В принципе, возможно использовать обычные программистские подходы как и на бэке, - то есть, самому следить за изменениями данных в каждом месте, и проводить обновление всех зависимостей. Это даст очень много бойлерплейта - рутинного повторяющегося кода. Реактивные фреймворки сильно облегчили жизнь программистам, взяв на себя заботу об этом обновлении зависимостей переменной при её изменении.

В реактивном фреймворке достаточно задать реактивную переменную и указать, что она является, например, значением input поля. При вводе пользователем в это поле значения переменная автоматически обновится, и все другие переменные, зависящие от нее, тоже. Кода писать для этого не надо.

Упрощенно говоря, под капотом реактивная переменная это прокси-обертка над обычной, которая следит за её изменениями и регистрирует всех слушателей, которых надо оповестить об изменении переменной, чтобы они себя пересчитали.

Какие реактивные фронтенд фреймворки существуют

React, Vue, Angular - самые распространенные. Есть множество других, не взлетевших.

Angular используется обычно для больших проектов (больших команд разного уровня программистов) и жестко зажимает разработку в свои правила.

React и Vue более гибки и схожи, но есть существенные отличия.

Vue быстрей, меньше, эффективней, не смешивает HTML и JS, имеет меньший порог входа. Активно развивается.

За React-ом Цукерберг и бо́льшая распространенность. Больше предложений о работе, но и больше кандидатов на одно место.

Почему Vue?

Чтобы можно было разрабатывать и управлять большими сложными программными системами, было изобретено ООП - объектно-ориентированное программирование, где для иерархичного разбиения сложности вводились новые сущности - объекты. Они инкапсулировали в себе данные и поведение (логику).

На фронтенде немного иная ситуация из-за наличия кода на нескольких языках программирования - HTML, CSS, JavaScript. И в данном случае SFC компоненты во Vue отлично служат для разбиения сложности системы. Каждый компонент инкапсулирует HTML шаблон, его стилизацию и логику.

Vue делает это намного лучше, чем тот же React, который сваливает всё в одну кучу. В этом аспекте Vue однозначно является флагманом компонентно-ориентированного программирования (КОП) на фронтэнде.

Кроме того, во Vue 3 появилась реактивность за пределами компонент - ref и reactive переменные можно задать в простом js модуле. Это используется в composable функциях. Стало возможно отделить от представления не только реактивный сервис (useI18n, useScreenSize например), но и бизнес-логику (useShoppingCart, useNewsWidget). Это позволяет использовать на фронтенде MVC шаблон, где роли View и частично Controller выполняют компоненты, отвечающие преимущественно за визуализацию, а логика и модель (Model и частично Controller) приходятся на composable функции и их реактивный стейт.

Это даёт возможность сделать, например, смену дизайна сайта или замену UI библиотеки намного более легкой задачей.

Данная особенность также сильно выделяет Vue на фоне других реактивных фреймворков-аналогов.

Reactivity API во Vue 3, возможно, еще не идеально (именно поэтому Эван Ю экспериментировал с reactivity Transform), но уже вполне подходит для разработки больших, надежных, масштабируемых систем, чего нельзя было сказать о Vue 2.

TIP

Реактивностью Vue можно пользоваться совсем без UI. Например, в этом расширении VS Code элементы Vue 3 reactive, ref и watch используются для организации реактивности в коде без визуальных компонент.

Что может Vue, но не могут React или Svelte?

Vue эффективней работает с реактивностью.

Добавление нового элемента в массив:

js
// React
+import{_ as s,o as e,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"О фронтенд фреймворках","description":"","frontmatter":{},"headers":[],"relativePath":"ru/frontend/about-frameworks.md","filePath":"ru/frontend/about-frameworks.md","lastUpdated":1726505115000}'),i={name:"ru/frontend/about-frameworks.md"},p=t(`

О фронтенд фреймворках

Что такое "реактивность"?

Наверное, самое фундаментальное отличие программы для фронта от программы для бэка, микросервиса и даже отдельного приложения с GUI, это понятие "реактивности".

При работе на бэке программист имеет хорошие возможности управлять потоком данных. Он контролирует откуда их брать, куда передавать, кто их может изменить, всё это хоть в одном потоке, хоть в многопоточной системе.

На фронте большую роль играет фактор интерактивности UI - данные надо динамично показывать пользователю, пользователь может изменять данные, данные могут изменяться различными контрагентами (пользователь, бэкенд, внутренние вычисления). В принципе, возможно использовать обычные программистские подходы как и на бэке, - то есть, самому следить за изменениями данных в каждом месте, и проводить обновление всех зависимостей. Это даст очень много бойлерплейта - рутинного повторяющегося кода. Реактивные фреймворки сильно облегчили жизнь программистам, взяв на себя заботу об этом обновлении зависимостей переменной при её изменении.

В реактивном фреймворке достаточно задать реактивную переменную и указать, что она является, например, значением input поля. При вводе пользователем в это поле значения переменная автоматически обновится, и все другие переменные, зависящие от нее, тоже. Кода писать для этого не надо.

Упрощенно говоря, под капотом реактивная переменная это прокси-обертка над обычной, которая следит за её изменениями и регистрирует всех слушателей, которых надо оповестить об изменении переменной, чтобы они себя пересчитали.

Какие реактивные фронтенд фреймворки существуют

React, Vue, Angular - самые распространенные. Есть множество других, не взлетевших.

Angular используется обычно для больших проектов (больших команд разного уровня программистов) и жестко зажимает разработку в свои правила.

React и Vue более гибки и схожи, но есть существенные отличия.

Vue быстрей, меньше, эффективней, не смешивает HTML и JS, имеет меньший порог входа. Активно развивается.

За React-ом Цукерберг и бо́льшая распространенность. Больше предложений о работе, но и больше кандидатов на одно место.

Почему Vue?

Чтобы можно было разрабатывать и управлять большими сложными программными системами, было изобретено ООП - объектно-ориентированное программирование, где для иерархичного разбиения сложности вводились новые сущности - объекты. Они инкапсулировали в себе данные и поведение (логику).

На фронтенде немного иная ситуация из-за наличия кода на нескольких языках программирования - HTML, CSS, JavaScript. И в данном случае SFC компоненты во Vue отлично служат для разбиения сложности системы. Каждый компонент инкапсулирует HTML шаблон, его стилизацию и логику.

Vue делает это намного лучше, чем тот же React, который сваливает всё в одну кучу. В этом аспекте Vue однозначно является флагманом компонентно-ориентированного программирования (КОП) на фронтэнде.

Кроме того, во Vue 3 появилась реактивность за пределами компонент - ref и reactive переменные можно задать в простом js модуле. Это используется в composable функциях. Стало возможно отделить от представления не только реактивный сервис (useI18n, useScreenSize например), но и бизнес-логику (useShoppingCart, useNewsWidget). Это позволяет использовать на фронтенде MVC шаблон, где роли View и частично Controller выполняют компоненты, отвечающие преимущественно за визуализацию, а логика и модель (Model и частично Controller) приходятся на composable функции и их реактивный стейт.

Это даёт возможность сделать, например, смену дизайна сайта или замену UI библиотеки намного более легкой задачей.

Данная особенность также сильно выделяет Vue на фоне других реактивных фреймворков-аналогов.

Reactivity API во Vue 3, возможно, еще не идеально (именно поэтому Эван Ю экспериментировал с reactivity Transform), но уже вполне подходит для разработки больших, надежных, масштабируемых систем, чего нельзя было сказать о Vue 2.

TIP

Реактивностью Vue можно пользоваться совсем без UI. Например, в этом расширении VS Code элементы Vue 3 reactive, ref и watch используются для организации реактивности в коде без визуальных компонент.

Что может Vue, но не могут React или Svelte?

Vue эффективней работает с реактивностью.

Добавление нового элемента в массив:

js
// React
 setSomeArr([...someArr, newItem]);
 
 // Svelte
diff --git a/assets/ru_frontend_about-frameworks.md.BnF5W9Ep.lean.js b/assets/ru_frontend_about-frameworks.md.Da2nzlxq.lean.js
similarity index 87%
rename from assets/ru_frontend_about-frameworks.md.BnF5W9Ep.lean.js
rename to assets/ru_frontend_about-frameworks.md.Da2nzlxq.lean.js
index 3833d7a22..1acc281eb 100644
--- a/assets/ru_frontend_about-frameworks.md.BnF5W9Ep.lean.js
+++ b/assets/ru_frontend_about-frameworks.md.Da2nzlxq.lean.js
@@ -1 +1 @@
-import{_ as s,o as e,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"О фронтенд фреймворках","description":"","frontmatter":{},"headers":[],"relativePath":"ru/frontend/about-frameworks.md","filePath":"ru/frontend/about-frameworks.md","lastUpdated":1726474804000}'),i={name:"ru/frontend/about-frameworks.md"},p=t("",5),o=[p];function l(n,r,c,d,h,u){return e(),a("div",null,o)}const g=s(i,[["render",l]]);export{m as __pageData,g as default};
+import{_ as s,o as e,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"О фронтенд фреймворках","description":"","frontmatter":{},"headers":[],"relativePath":"ru/frontend/about-frameworks.md","filePath":"ru/frontend/about-frameworks.md","lastUpdated":1726505115000}'),i={name:"ru/frontend/about-frameworks.md"},p=t("",5),o=[p];function l(n,r,c,d,h,u){return e(),a("div",null,o)}const g=s(i,[["render",l]]);export{m as __pageData,g as default};
diff --git a/assets/ru_frontend_architecture.md.DCEHfzIt.js b/assets/ru_frontend_architecture.md.DUwhgWXn.js
similarity index 99%
rename from assets/ru_frontend_architecture.md.DCEHfzIt.js
rename to assets/ru_frontend_architecture.md.DUwhgWXn.js
index e0bc3527f..4c841e53f 100644
--- a/assets/ru_frontend_architecture.md.DCEHfzIt.js
+++ b/assets/ru_frontend_architecture.md.DUwhgWXn.js
@@ -1 +1 @@
-import{_ as e,o as a,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const q=JSON.parse('{"title":"Архитектура фронтэнд приложений","description":"","frontmatter":{},"headers":[],"relativePath":"ru/frontend/architecture.md","filePath":"ru/frontend/architecture.md","lastUpdated":1726474804000}'),r={name:"ru/frontend/architecture.md"},s=o('

Архитектура фронтэнд приложений

Что такое хорошая архитектура веб-приложения

Есть разные теоретические определения и обоснования данного понятия, но грубо говоря это следующее.

Допустим ты разрабатываешь проект, уже на финальном этапе. К тебе подходит заказчик и говорит что-то типа: я хочу добавить тень ко всем кнопкам, я хочу изменить UI библиотеку, мы решили поддерживать несколько языков, мы решили заменить вот этот модуль на другой, нужно сделать более детальную адаптивность для разных разрешений, мы решили добавить темы, мы меняем провайдера услуг по обработке платежей, у нас повышается число пользователей / сайт тормозит / надо его ускорить, надо повысить уровень безопасности сайта, мы взяли мидл программиста, введи его в курс дела быстро, и пусть он добавляет функционал или фиксит баги и т.п.

Хорошая архитектура фронтенд приложения позволяет выполнить всё это наиболее эффективно с наименьшими затратами.

ООП на фронтенде

Многие приходя из разработки на объектно-ориентированных языках пытаются использовать концепции ООП и на фронте и программировать с классами, наследованием, полиморфизмом и прочим.

Это ошибка. Основные вычисления на фронте связаны с UI - показ данных, обработка взаимодействия с пользователем. Системы классов и микросервисов на них просто не нужны. Конечно, можно создать базовую кнопку, обернуть ее в два кастомных компонента и считать это наследованием, но в коде этого не получается. Поэтому надо учиться мыслить другими категориями - компоненты, композаблы, js модули. И использовать свою мощь JavaScript-a, а не пытаться натянуть его на ООП.

В то же время неплохой аналогией объекта с глобальным ("статичным") и локальным ("объектным") состоянием является композабл функция. Это можно использовать в определённых ситуациях.

Многопоточность и асинхронность

Многопоточность - это когда программист может создать отдельный поток и запустить в нем свой определенный код. Например, можно создать два потока, один в бесконечном цикле выводит в консоль "Поток А", а второй - "Поток В". Эти строки будут чередоваться в выводе. Можно задать приоритеты потокам, и тогда поток в приоритетом 3 будет выводить сообщения в 3 раза чаще, чем поток с приоритетом 1.

Данные два потока должны выполняться одновременно, но это условно. Потому что если потоков 10, а процессор двухядерный с двумя своими потоками на ядро, то чисто физически больше 4 одновременных потоков выполнять нельзя. Поэтому потоки делятся на кусочки кода, и они выполняются по очереди - это называется конкурентностью.

В мире JavaScript cтановиться в одну очередь потоки могут на уровне JS рантайма, OS, CPU. Обычные десктопные приложения (например, IDE) тоже бывают с хорошей поддержкой распараллеливания на многоядерные процессоры - и тогда они используют CPU максимально эффективно, или нагружающие только одно ядро. В последнем случае апгрейд процессора на более современный многоядерный почти ничего не даст, если у старого и нового примерно одна частота.

Асинхронность - это когда есть некая неблокирующая функция, точное время исполнения которой неизвестно. И программист может указать код, который должен выполниться после исполнения данной функции (передать callback). Промисы и async/await это нетривиальные, но всё же просто удобные обертки над данной логикой.

Итак, при асинхронности обычно есть некая пограничная функция, зависящая от внешних обстоятельств (fetch, nextTick, fs.readdir, setTimeout). Её "псевдопараллельное" исполнение в одном потоке вместе с основным кодом обеспечивается механизмом Event Loop.

Таким образом, это абсолютно разные вещи как по целевому назначению, так и по использованию. Асинхронность в JavaScript реализована через промисы и async/await, многопоточность или её подобие реализуется райнтаймом (Web workers, worker_threads).

Асинхронность нужна для общения с "внешним миром", включая отрисовку браузера. Многопоточность позволяет выделить ресурсоемкие вычисления (а также сетевую загрузку) в отдельные потоки (Web workers), что снижает нагрузку на основной поток, который отвечает и за рендеринг. Это благоприятно сказывается на отзывчивости вашего UI.

Полезные советы
Избегайте зависимостей

Если есть возможность не вводить новую зависимость (не подключать новый npm пакет) - не делайте это. Это может немного сэкономит ваше время, но сторонняя библиотека рано или поздно устареет, перестанет поддерживаться, в ней могут обнаружить уязвимость. Кроме того она увеличивает размер вашего бандла, что напрямую влияет на производительность вашего приложения. Tree shaking хорош в рекламных зазываниях, но работает реально далеко не всегда.

Если вам нужна, например, функция debounce, не торопитесь подключать её вместе с какой-либо библиотекой. Загуглите её реализацию и скопируйте 15 строк кода, сделав свою функцию.


Используйте обертки над компонентами UI библиотек и сторонних утилит

Если вы используете компоненты какой-то UI библиотеки, не используйте их напрямую - сделайте обертки для них. Например, BaseButton или BaseInput. Это намного облегчит стилизацию компонент, а также сильно упростит переход на другую библиотеку, или замену на свои компоненты.

То же самое с утилитами.


Регулярный рефакторинг

Время от времени делайте рефакторинг кода, перемещая компоненты и модули туда, где они должны быть логически, переименовывая их, и структурируя и улучшая сам код. Это полезно и для кода, и для вашего профессионального роста.


Используйте CSS3

Старайтесь использовать для адаптивноcти чистый CSS3. Не привязывайтесь к колоночным моделям CSS и UI библиотек, если только это не проект из разряда: "сделал и забыл, пусть заказчик дальше с ним мучается".

Потратьте пару дней на изучение Флексбокса и вы сможете верстать на нём быстрей и лучше, чем на любом Тайлвинде.


Используйте современные стандарты и возможности языков

Например, семантические элементы HTML5 - aside, header, section, article, details и.т.д.

CSS3 - Flexbox и Grid, Container query


Документируйте проект

Рисуйте use-case и другие диаграммы, описывайте основной функционал проекта и важные детали его реализации - это как минимум повысит ваш уровень как разработчика ПО.

VitePress - очень удобный инструмент для технического документирования.

',5),c=[s];function d(i,p,l,n,u,h){return a(),t("div",null,c)}const _=e(r,[["render",d]]);export{q as __pageData,_ as default}; +import{_ as e,o as a,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const q=JSON.parse('{"title":"Архитектура фронтэнд приложений","description":"","frontmatter":{},"headers":[],"relativePath":"ru/frontend/architecture.md","filePath":"ru/frontend/architecture.md","lastUpdated":1726505115000}'),r={name:"ru/frontend/architecture.md"},s=o('

Архитектура фронтэнд приложений

Что такое хорошая архитектура веб-приложения

Есть разные теоретические определения и обоснования данного понятия, но грубо говоря это следующее.

Допустим ты разрабатываешь проект, уже на финальном этапе. К тебе подходит заказчик и говорит что-то типа: я хочу добавить тень ко всем кнопкам, я хочу изменить UI библиотеку, мы решили поддерживать несколько языков, мы решили заменить вот этот модуль на другой, нужно сделать более детальную адаптивность для разных разрешений, мы решили добавить темы, мы меняем провайдера услуг по обработке платежей, у нас повышается число пользователей / сайт тормозит / надо его ускорить, надо повысить уровень безопасности сайта, мы взяли мидл программиста, введи его в курс дела быстро, и пусть он добавляет функционал или фиксит баги и т.п.

Хорошая архитектура фронтенд приложения позволяет выполнить всё это наиболее эффективно с наименьшими затратами.

ООП на фронтенде

Многие приходя из разработки на объектно-ориентированных языках пытаются использовать концепции ООП и на фронте и программировать с классами, наследованием, полиморфизмом и прочим.

Это ошибка. Основные вычисления на фронте связаны с UI - показ данных, обработка взаимодействия с пользователем. Системы классов и микросервисов на них просто не нужны. Конечно, можно создать базовую кнопку, обернуть ее в два кастомных компонента и считать это наследованием, но в коде этого не получается. Поэтому надо учиться мыслить другими категориями - компоненты, композаблы, js модули. И использовать свою мощь JavaScript-a, а не пытаться натянуть его на ООП.

В то же время неплохой аналогией объекта с глобальным ("статичным") и локальным ("объектным") состоянием является композабл функция. Это можно использовать в определённых ситуациях.

Многопоточность и асинхронность

Многопоточность - это когда программист может создать отдельный поток и запустить в нем свой определенный код. Например, можно создать два потока, один в бесконечном цикле выводит в консоль "Поток А", а второй - "Поток В". Эти строки будут чередоваться в выводе. Можно задать приоритеты потокам, и тогда поток в приоритетом 3 будет выводить сообщения в 3 раза чаще, чем поток с приоритетом 1.

Данные два потока должны выполняться одновременно, но это условно. Потому что если потоков 10, а процессор двухядерный с двумя своими потоками на ядро, то чисто физически больше 4 одновременных потоков выполнять нельзя. Поэтому потоки делятся на кусочки кода, и они выполняются по очереди - это называется конкурентностью.

В мире JavaScript cтановиться в одну очередь потоки могут на уровне JS рантайма, OS, CPU. Обычные десктопные приложения (например, IDE) тоже бывают с хорошей поддержкой распараллеливания на многоядерные процессоры - и тогда они используют CPU максимально эффективно, или нагружающие только одно ядро. В последнем случае апгрейд процессора на более современный многоядерный почти ничего не даст, если у старого и нового примерно одна частота.

Асинхронность - это когда есть некая неблокирующая функция, точное время исполнения которой неизвестно. И программист может указать код, который должен выполниться после исполнения данной функции (передать callback). Промисы и async/await это нетривиальные, но всё же просто удобные обертки над данной логикой.

Итак, при асинхронности обычно есть некая пограничная функция, зависящая от внешних обстоятельств (fetch, nextTick, fs.readdir, setTimeout). Её "псевдопараллельное" исполнение в одном потоке вместе с основным кодом обеспечивается механизмом Event Loop.

Таким образом, это абсолютно разные вещи как по целевому назначению, так и по использованию. Асинхронность в JavaScript реализована через промисы и async/await, многопоточность или её подобие реализуется райнтаймом (Web workers, worker_threads).

Асинхронность нужна для общения с "внешним миром", включая отрисовку браузера. Многопоточность позволяет выделить ресурсоемкие вычисления (а также сетевую загрузку) в отдельные потоки (Web workers), что снижает нагрузку на основной поток, который отвечает и за рендеринг. Это благоприятно сказывается на отзывчивости вашего UI.

Полезные советы
Избегайте зависимостей

Если есть возможность не вводить новую зависимость (не подключать новый npm пакет) - не делайте это. Это может немного сэкономит ваше время, но сторонняя библиотека рано или поздно устареет, перестанет поддерживаться, в ней могут обнаружить уязвимость. Кроме того она увеличивает размер вашего бандла, что напрямую влияет на производительность вашего приложения. Tree shaking хорош в рекламных зазываниях, но работает реально далеко не всегда.

Если вам нужна, например, функция debounce, не торопитесь подключать её вместе с какой-либо библиотекой. Загуглите её реализацию и скопируйте 15 строк кода, сделав свою функцию.


Используйте обертки над компонентами UI библиотек и сторонних утилит

Если вы используете компоненты какой-то UI библиотеки, не используйте их напрямую - сделайте обертки для них. Например, BaseButton или BaseInput. Это намного облегчит стилизацию компонент, а также сильно упростит переход на другую библиотеку, или замену на свои компоненты.

То же самое с утилитами.


Регулярный рефакторинг

Время от времени делайте рефакторинг кода, перемещая компоненты и модули туда, где они должны быть логически, переименовывая их, и структурируя и улучшая сам код. Это полезно и для кода, и для вашего профессионального роста.


Используйте CSS3

Старайтесь использовать для адаптивноcти чистый CSS3. Не привязывайтесь к колоночным моделям CSS и UI библиотек, если только это не проект из разряда: "сделал и забыл, пусть заказчик дальше с ним мучается".

Потратьте пару дней на изучение Флексбокса и вы сможете верстать на нём быстрей и лучше, чем на любом Тайлвинде.


Используйте современные стандарты и возможности языков

Например, семантические элементы HTML5 - aside, header, section, article, details и.т.д.

CSS3 - Flexbox и Grid, Container query


Документируйте проект

Рисуйте use-case и другие диаграммы, описывайте основной функционал проекта и важные детали его реализации - это как минимум повысит ваш уровень как разработчика ПО.

VitePress - очень удобный инструмент для технического документирования.

',5),c=[s];function d(i,p,l,n,u,h){return a(),t("div",null,c)}const _=e(r,[["render",d]]);export{q as __pageData,_ as default}; diff --git a/assets/ru_frontend_architecture.md.DCEHfzIt.lean.js b/assets/ru_frontend_architecture.md.DUwhgWXn.lean.js similarity index 74% rename from assets/ru_frontend_architecture.md.DCEHfzIt.lean.js rename to assets/ru_frontend_architecture.md.DUwhgWXn.lean.js index 7809bea3d..1ede3cd06 100644 --- a/assets/ru_frontend_architecture.md.DCEHfzIt.lean.js +++ b/assets/ru_frontend_architecture.md.DUwhgWXn.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const q=JSON.parse('{"title":"Архитектура фронтэнд приложений","description":"","frontmatter":{},"headers":[],"relativePath":"ru/frontend/architecture.md","filePath":"ru/frontend/architecture.md","lastUpdated":1726474804000}'),r={name:"ru/frontend/architecture.md"},s=o("",5),c=[s];function d(i,p,l,n,u,h){return a(),t("div",null,c)}const _=e(r,[["render",d]]);export{q as __pageData,_ as default}; +import{_ as e,o as a,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const q=JSON.parse('{"title":"Архитектура фронтэнд приложений","description":"","frontmatter":{},"headers":[],"relativePath":"ru/frontend/architecture.md","filePath":"ru/frontend/architecture.md","lastUpdated":1726505115000}'),r={name:"ru/frontend/architecture.md"},s=o("",5),c=[s];function d(i,p,l,n,u,h){return a(),t("div",null,c)}const _=e(r,[["render",d]]);export{q as __pageData,_ as default}; diff --git a/assets/ru_frontend_css-ui-libs.md.DmmlAlcW.js b/assets/ru_frontend_css-ui-libs.md.CxQFbVd7.js similarity index 98% rename from assets/ru_frontend_css-ui-libs.md.DmmlAlcW.js rename to assets/ru_frontend_css-ui-libs.md.CxQFbVd7.js index 6770dd800..4b082b4eb 100644 --- a/assets/ru_frontend_css-ui-libs.md.DmmlAlcW.js +++ b/assets/ru_frontend_css-ui-libs.md.CxQFbVd7.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as t,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"CSS и UI библиотеки","description":"","frontmatter":{},"headers":[],"relativePath":"ru/frontend/css-ui-libs.md","filePath":"ru/frontend/css-ui-libs.md","lastUpdated":1726474804000}'),e={name:"ru/frontend/css-ui-libs.md"},l=i(`

CSS и UI библиотеки

Что такое CSS и UI библиотеки?

CSS и UI библиотеки либо предоставляют свои, либо помогают создавать кастомные UI компоненты типа Button или Select? что может значительно ускорить разработку.

CSS библиотеки не содержат JavaScript кода и, соответственно, имеют ограничения для сложных компонент типа Select или Dropdown.

Есть отдельный тип Headless-UI библиотек, которые предлагают компоненты без стилизованной визуализации - только логику компонента и Accessibility требования. Разработчику нужно самому добавить CSS стили.

Плюсы и минусы UI библиотек?

Плюсы: укоряет разработку, если пользоваться ей на проекте максимально, вносит в приложение единый стиль

Минусы: как и любая зависимость может устареть (трагедия Vuetify 2), добавляет веса в итоговый бандл.

В этой статье хорошо сравниваются 10 Vue 3 UI библиотек.

Как снизить зависимость от чужих библиотек?

Оборачивайте компоненты UI библиотеки в свои.

vue
<!-- BaseButton.vue -->
+import{_ as s,o as a,c as t,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"CSS и UI библиотеки","description":"","frontmatter":{},"headers":[],"relativePath":"ru/frontend/css-ui-libs.md","filePath":"ru/frontend/css-ui-libs.md","lastUpdated":1726505115000}'),e={name:"ru/frontend/css-ui-libs.md"},l=i(`

CSS и UI библиотеки

Что такое CSS и UI библиотеки?

CSS и UI библиотеки либо предоставляют свои, либо помогают создавать кастомные UI компоненты типа Button или Select? что может значительно ускорить разработку.

CSS библиотеки не содержат JavaScript кода и, соответственно, имеют ограничения для сложных компонент типа Select или Dropdown.

Есть отдельный тип Headless-UI библиотек, которые предлагают компоненты без стилизованной визуализации - только логику компонента и Accessibility требования. Разработчику нужно самому добавить CSS стили.

Плюсы и минусы UI библиотек?

Плюсы: укоряет разработку, если пользоваться ей на проекте максимально, вносит в приложение единый стиль

Минусы: как и любая зависимость может устареть (трагедия Vuetify 2), добавляет веса в итоговый бандл.

В этой статье хорошо сравниваются 10 Vue 3 UI библиотек.

Как снизить зависимость от чужих библиотек?

Оборачивайте компоненты UI библиотеки в свои.

vue
<!-- BaseButton.vue -->
 <template>
   <QButton ... />
 </template>

и используйте в своем коде BaseButton. Таким образом в дальнейшем вам будет намного проще проапгрейдиться, заменить библиотеку или заменить данный компонент на самописный. И даже просто изменить у компонента стили.

Лэйаут и адаптивность страниц средствами CSS и UI библиотек

Использование колоночной системы и иного функционала CSS и UI библиотек типа распространенного Tailwind удобно для небольших проектов и иногда ускоряет верстку, однако очень сильно ухудшает качество кода в целом, включая его поддерживаемость и расширяемость. Как будто мир вновь вернулся во времена IE6, когда все стили и JavaScript также располагались в аттрибутах тэгов, и вся эволюция CSS в понятную, удобную, красивую иерарxичную модель классов была зря, как и разделение веба на документ (шаблон), презентационный слой (CSS стили) и логику (JavaScript).

В интернете полно статей, почему подход подобный Tailwind это плохо. Можно отметить только, что при должном умении верстать на чистом CSS3 также быстро и намного удобней и приятней в плане DX, чем через средства CSS и UI библиотек.

Цитата

Хорошие разработчики знают причины, по которым стандарты, паттерны и хорошие практики стали таковыми.

Плохие разработчики придерживаются любой новой тенденции, которая может сэкономить им немного времени на обучение.

`,5),p=[l];function n(c,r,d,o,h,u){return a(),t("div",null,p)}const S=s(e,[["render",n]]);export{m as __pageData,S as default}; diff --git a/assets/ru_frontend_css-ui-libs.md.DmmlAlcW.lean.js b/assets/ru_frontend_css-ui-libs.md.CxQFbVd7.lean.js similarity index 86% rename from assets/ru_frontend_css-ui-libs.md.DmmlAlcW.lean.js rename to assets/ru_frontend_css-ui-libs.md.CxQFbVd7.lean.js index 501149906..eb12d15ad 100644 --- a/assets/ru_frontend_css-ui-libs.md.DmmlAlcW.lean.js +++ b/assets/ru_frontend_css-ui-libs.md.CxQFbVd7.lean.js @@ -1 +1 @@ -import{_ as s,o as a,c as t,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"CSS и UI библиотеки","description":"","frontmatter":{},"headers":[],"relativePath":"ru/frontend/css-ui-libs.md","filePath":"ru/frontend/css-ui-libs.md","lastUpdated":1726474804000}'),e={name:"ru/frontend/css-ui-libs.md"},l=i("",5),p=[l];function n(c,r,d,o,h,u){return a(),t("div",null,p)}const S=s(e,[["render",n]]);export{m as __pageData,S as default}; +import{_ as s,o as a,c as t,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"CSS и UI библиотеки","description":"","frontmatter":{},"headers":[],"relativePath":"ru/frontend/css-ui-libs.md","filePath":"ru/frontend/css-ui-libs.md","lastUpdated":1726505115000}'),e={name:"ru/frontend/css-ui-libs.md"},l=i("",5),p=[l];function n(c,r,d,o,h,u){return a(),t("div",null,p)}const S=s(e,[["render",n]]);export{m as __pageData,S as default}; diff --git a/assets/ru_frontend_learning.md.idg5r6db.js b/assets/ru_frontend_learning.md.Duf2ILe6.js similarity index 99% rename from assets/ru_frontend_learning.md.idg5r6db.js rename to assets/ru_frontend_learning.md.Duf2ILe6.js index 829fae569..2c4755aad 100644 --- a/assets/ru_frontend_learning.md.idg5r6db.js +++ b/assets/ru_frontend_learning.md.Duf2ILe6.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Изучение Vue","description":"","frontmatter":{},"headers":[],"relativePath":"ru/frontend/learning.md","filePath":"ru/frontend/learning.md","lastUpdated":1726474804000}'),s={name:"ru/frontend/learning.md"},l=r('

Изучение Vue

Источники информации по Vue

Почему-то считается, что на фронтенде есть всего два варианта получать знания - документация Vue и обучающие видео с Ютюба и всевозможных курсов.

Но документация это не учебник, а справочник, и отделить зерна от плевел на Ютюбе очень сложно. Я встречал полезные видео, но все они предназначались для уже неплохо знающих Vue разработчиков, и показывали какие-то новые или нестандартные моменты.


Главным учителем должна быть книга, которая именно учит, а не даёт справочную информацию.

Прекрасный учебник по Vue на английском языке - вышедшая в мае 2023 года Vue.js 3 Design Patterns and Best Practices. Можно зарегистрироваться на oReilly и читать 10 дней бесплатно. Даже скачать. Несмотря на название, книга учит именно программированию, причем, довольно с таки начального уровня.

Перевод данной книги на русский язык находится на этом сайте: (учебник).

Примеры из книги находятся в открытом доступе и вполне достойны изучения.

Больше на русском, к сожалению, почти ничего нет, но, во-первых, есть Google translate, а во-вторых, стать уверенным разработчиком без хотя бы среднего знания технического английского вряд ли получится.

Так же надо отметить, что документация Vue на русском порой сильно отстает от документации на английском.


Заметка

Можно провести аналогию между хорошим разработчиком и водителем:

  1. Изучение основ вождения, ПДД и устройства двигателя внутреннего сгорания - документация Vue и спецификация JavaScript
  2. Практическое обучение вождению в автошколе - хорошие учебники типа "Vue.js 3 Design Patterns and Best Practices"
  3. Реальный опыт вождения - коммерческий опыт разработки
  4. Курсы экстремального вождения, поставить стакан воды на капот и проехать на двадцатилетней машине с механической коробкой передач по разбитым улицам - качественные опен сорс проекты и сертификации

Невозможно стать хорошим разработчиком/водителем как без 1., так и только с 1. Обучающие видео из интернета (как платные так и бесплатные) могут как быть частью 4., так и быть абсолютно бесполезными и даже вредными (очень часто), в зависимости от их качества и мотивации ученика.

Vue 2 или Vue 3?

Vue 3.
Composition API.

Если вам нужен будет Vue 2 для поддержки существующего проекта, то вы сами будете знать ответ на этот вопрос.

Разница между Vue 2 и Vue 3 большая. Это не тот случай, когда надо выучить предварительно предыдущую версию, чтобы лучше и легче понять следующую.

Нужно ли знать JavaScript предварительно?

Обязательно, минимум на среднем уровне. Если этого нет, я бы предложил сперва пройти короткий курс javascript-a, чтобы человек знал об объекте document, умел обращаться с методами массива и не очень боялся промисов. Также, HTML и CSS как минимум на базовом уровне.

Вот легко читаемая книжка - "Морган Н. - JavaScript для детей. Самоучитель по программированию - 2016. Перед началом изучения Vue желательно понимать 70% первой части, а также параграфы 10 и 12.

Также классический ресурс по JavaScript - learn.javascript.ru

70 вопросов по JavaScript для подготовки к собеседованию - отличный тест, проверить себя по знанию языка.


Совет

Также абсолютно необходимый предварительный скилл - умение гуглить.

Есть ли сертификация по Vue?

Vue.js Certification

Vue Style Guide

Обязательно ознакомьтесь с Vue Style Guide и старайтесь придерживаться его лучших практик при написании кода.

Время от времени возвращайтесь к этому источнику и улучшайте свой код.

ESlint также помогает держать свой код в соответствии с лучшими практиками.

Нужен ли ментор?

Ментор полезен и начинающему, и опытному разработчику. Можно бесполезно убить два дня на решение проблемы, которую за 20 минут может объяснить более опытный человек. Причем, этот двухдневный "опыт" больше никогда не пригодится.

В компаниях эту роль обычно выполняют более компетентные доброжелательные коллеги.

В интернете есть сервисы типа Solvery, которые могут помочь в этом вопросе.

Всё равно хочу видео

Есть качественные у Vue Mastery, однако большинство устарели.

Довольно грамотно и качественно объясняет технологии фронтенда и Vue 3 Илья Климов.

Что еще посмотреть кроме Vue? React?

Можно и React, если есть реальный вариант использования этих знаний, однако намного лучше расширить свой кругозор разработчика. Попробуйте написать простой API на бэкенде. Самый легкий и удобный язык для этого - PHP, но можно и на Node.js или Python. Попробуйте транспортные протоколы JSON-RPC и WebSockets. Захостите свое приложение на GitHub Pages или другой аналогичный сервис, поэкспериментируйте с GitHub Actions - они очень помогают с автоматизацией деплоя и CI/CD в целом. Поработайте с Cloud провайдерами (многие предлагают бесплатные ресурсы), настройте виртуальный сервер. Зарегистрируйте домен, сделайте продуктовый законченный сайт - даже если это будет просто ваш сайт-резюме или что-то элементарное на VitePress (используется данным сайтом). Поработайте с FireStore и открытыми API для различных данных. Посмотрите Swagger. Поизучайте SQL, установите MySQL и поиграйте с ним, либо сделайте это на SupaBase. Понимание, как данные хранятся и обрабатываются на бэкенде, сильно поможет в выборе правильных стратегий на фронте.

Изучайте, как работает современный Интернет, и какие технологии и лучшие практики распространены в нем сейчас.

',9),i=[l];function o(p,u,c,n,m,d){return a(),t("div",null,i)}const _=e(s,[["render",o]]);export{f as __pageData,_ as default}; +import{_ as e,o as a,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Изучение Vue","description":"","frontmatter":{},"headers":[],"relativePath":"ru/frontend/learning.md","filePath":"ru/frontend/learning.md","lastUpdated":1726505115000}'),s={name:"ru/frontend/learning.md"},l=r('

Изучение Vue

Источники информации по Vue

Почему-то считается, что на фронтенде есть всего два варианта получать знания - документация Vue и обучающие видео с Ютюба и всевозможных курсов.

Но документация это не учебник, а справочник, и отделить зерна от плевел на Ютюбе очень сложно. Я встречал полезные видео, но все они предназначались для уже неплохо знающих Vue разработчиков, и показывали какие-то новые или нестандартные моменты.


Главным учителем должна быть книга, которая именно учит, а не даёт справочную информацию.

Прекрасный учебник по Vue на английском языке - вышедшая в мае 2023 года Vue.js 3 Design Patterns and Best Practices. Можно зарегистрироваться на oReilly и читать 10 дней бесплатно. Даже скачать. Несмотря на название, книга учит именно программированию, причем, довольно с таки начального уровня.

Перевод данной книги на русский язык находится на этом сайте: (учебник).

Примеры из книги находятся в открытом доступе и вполне достойны изучения.

Больше на русском, к сожалению, почти ничего нет, но, во-первых, есть Google translate, а во-вторых, стать уверенным разработчиком без хотя бы среднего знания технического английского вряд ли получится.

Так же надо отметить, что документация Vue на русском порой сильно отстает от документации на английском.


Заметка

Можно провести аналогию между хорошим разработчиком и водителем:

  1. Изучение основ вождения, ПДД и устройства двигателя внутреннего сгорания - документация Vue и спецификация JavaScript
  2. Практическое обучение вождению в автошколе - хорошие учебники типа "Vue.js 3 Design Patterns and Best Practices"
  3. Реальный опыт вождения - коммерческий опыт разработки
  4. Курсы экстремального вождения, поставить стакан воды на капот и проехать на двадцатилетней машине с механической коробкой передач по разбитым улицам - качественные опен сорс проекты и сертификации

Невозможно стать хорошим разработчиком/водителем как без 1., так и только с 1. Обучающие видео из интернета (как платные так и бесплатные) могут как быть частью 4., так и быть абсолютно бесполезными и даже вредными (очень часто), в зависимости от их качества и мотивации ученика.

Vue 2 или Vue 3?

Vue 3.
Composition API.

Если вам нужен будет Vue 2 для поддержки существующего проекта, то вы сами будете знать ответ на этот вопрос.

Разница между Vue 2 и Vue 3 большая. Это не тот случай, когда надо выучить предварительно предыдущую версию, чтобы лучше и легче понять следующую.

Нужно ли знать JavaScript предварительно?

Обязательно, минимум на среднем уровне. Если этого нет, я бы предложил сперва пройти короткий курс javascript-a, чтобы человек знал об объекте document, умел обращаться с методами массива и не очень боялся промисов. Также, HTML и CSS как минимум на базовом уровне.

Вот легко читаемая книжка - "Морган Н. - JavaScript для детей. Самоучитель по программированию - 2016. Перед началом изучения Vue желательно понимать 70% первой части, а также параграфы 10 и 12.

Также классический ресурс по JavaScript - learn.javascript.ru

70 вопросов по JavaScript для подготовки к собеседованию - отличный тест, проверить себя по знанию языка.


Совет

Также абсолютно необходимый предварительный скилл - умение гуглить.

Есть ли сертификация по Vue?

Vue.js Certification

Vue Style Guide

Обязательно ознакомьтесь с Vue Style Guide и старайтесь придерживаться его лучших практик при написании кода.

Время от времени возвращайтесь к этому источнику и улучшайте свой код.

ESlint также помогает держать свой код в соответствии с лучшими практиками.

Нужен ли ментор?

Ментор полезен и начинающему, и опытному разработчику. Можно бесполезно убить два дня на решение проблемы, которую за 20 минут может объяснить более опытный человек. Причем, этот двухдневный "опыт" больше никогда не пригодится.

В компаниях эту роль обычно выполняют более компетентные доброжелательные коллеги.

В интернете есть сервисы типа Solvery, которые могут помочь в этом вопросе.

Всё равно хочу видео

Есть качественные у Vue Mastery, однако большинство устарели.

Довольно грамотно и качественно объясняет технологии фронтенда и Vue 3 Илья Климов.

Что еще посмотреть кроме Vue? React?

Можно и React, если есть реальный вариант использования этих знаний, однако намного лучше расширить свой кругозор разработчика. Попробуйте написать простой API на бэкенде. Самый легкий и удобный язык для этого - PHP, но можно и на Node.js или Python. Попробуйте транспортные протоколы JSON-RPC и WebSockets. Захостите свое приложение на GitHub Pages или другой аналогичный сервис, поэкспериментируйте с GitHub Actions - они очень помогают с автоматизацией деплоя и CI/CD в целом. Поработайте с Cloud провайдерами (многие предлагают бесплатные ресурсы), настройте виртуальный сервер. Зарегистрируйте домен, сделайте продуктовый законченный сайт - даже если это будет просто ваш сайт-резюме или что-то элементарное на VitePress (используется данным сайтом). Поработайте с FireStore и открытыми API для различных данных. Посмотрите Swagger. Поизучайте SQL, установите MySQL и поиграйте с ним, либо сделайте это на SupaBase. Понимание, как данные хранятся и обрабатываются на бэкенде, сильно поможет в выборе правильных стратегий на фронте.

Изучайте, как работает современный Интернет, и какие технологии и лучшие практики распространены в нем сейчас.

',9),i=[l];function o(p,u,c,n,m,d){return a(),t("div",null,i)}const _=e(s,[["render",o]]);export{f as __pageData,_ as default}; diff --git a/assets/ru_frontend_learning.md.idg5r6db.lean.js b/assets/ru_frontend_learning.md.Duf2ILe6.lean.js similarity index 85% rename from assets/ru_frontend_learning.md.idg5r6db.lean.js rename to assets/ru_frontend_learning.md.Duf2ILe6.lean.js index 8e8ca8ce3..8dac1a4f5 100644 --- a/assets/ru_frontend_learning.md.idg5r6db.lean.js +++ b/assets/ru_frontend_learning.md.Duf2ILe6.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Изучение Vue","description":"","frontmatter":{},"headers":[],"relativePath":"ru/frontend/learning.md","filePath":"ru/frontend/learning.md","lastUpdated":1726474804000}'),s={name:"ru/frontend/learning.md"},l=r("",9),i=[l];function o(p,u,c,n,m,d){return a(),t("div",null,i)}const _=e(s,[["render",o]]);export{f as __pageData,_ as default}; +import{_ as e,o as a,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Изучение Vue","description":"","frontmatter":{},"headers":[],"relativePath":"ru/frontend/learning.md","filePath":"ru/frontend/learning.md","lastUpdated":1726505115000}'),s={name:"ru/frontend/learning.md"},l=r("",9),i=[l];function o(p,u,c,n,m,d){return a(),t("div",null,i)}const _=e(s,[["render",o]]);export{f as __pageData,_ as default}; diff --git a/assets/ru_frontend_spa-pwa-ssr-ssg.md.kKt6Va55.js b/assets/ru_frontend_spa-pwa-ssr-ssg.md.DtYGFAwt.js similarity index 99% rename from assets/ru_frontend_spa-pwa-ssr-ssg.md.kKt6Va55.js rename to assets/ru_frontend_spa-pwa-ssr-ssg.md.DtYGFAwt.js index 25fc803f4..f1f60035d 100644 --- a/assets/ru_frontend_spa-pwa-ssr-ssg.md.kKt6Va55.js +++ b/assets/ru_frontend_spa-pwa-ssr-ssg.md.DtYGFAwt.js @@ -1 +1 @@ -import{_ as e,a}from"./chunks/dynamic-rendering.0iLK77IQ.js";import{_ as s,o as r,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"SPA, PWA, SSG, SSR и SEO","description":"","frontmatter":{},"headers":[],"relativePath":"ru/frontend/spa-pwa-ssr-ssg.md","filePath":"ru/frontend/spa-pwa-ssr-ssg.md","lastUpdated":1726474804000}'),p={name:"ru/frontend/spa-pwa-ssr-ssg.md"},l=o('

SPA, PWA, SSG, SSR и SEO

Web 1.0 -> Web 2.0

Сперва был статичный HTML и браузеры показывали его. Чуть позже придумали немножко JavaScript-а, чтобы обрабатывать формочки и делать небольшую анимацию. Потом появился CSS, и все увидели, что это красиво. После кто-то предложил идею JSON для формата данных, а затем Микрософт подарила миру XMLHttpRequest, и JavaScript-у разрешили отправлять и получать данные с сервера.

Так родился SPA.

SPA

SPA (Single Page Application) работает примерно как обычное десктоп/мобильное приложение - при первом обращении на сервер получает програмную оболочку, необходимую для отображения сайта, а затем уже пересылает на/с сервера данные, обычно в JSON формате. Так получается намного эффективней способа, когда с каждым запросом с сервера приходила новая HTML страница с всеми ресурсами.

Для пользователя UX повышается значительно.

spa-vs-mpa

PWA

PWA (Progressive Web Application) - еще один шаг, чтобы улучшить пользовательский опыт и максимально приблизить веб приложения по ощущениям пользователя к нативным.

При PWA к SPA добавляются два элемента:

  1. Манифест. Текстовый файл со свойствами приложения. Благодаря ему иконка веб-приложения может быть установлена также как и у нативных приложений на домашний экран смартфона. Кроме того, при запуске PWA может не показывать элементы браузера и казаться обычным приложением.

  2. Service worker. Это прослойка в браузере между сервером и самим браузером, которая позволяет сделать управляемое кэширование. Другими словами, сохранить приложение со всеми ресурсами на смартфоне/компьютере, чтобы при запуске оно сразу запускалось. Если не нужны данные с сервера, то приложение может работать оффлайн (например, Заметки).

Больше о PWA можно прочесть на сайте, созданном командой Chrome - https://web.dev/

Апгрейд SPA до PWA очень небольшой по трудозатратам, но очень значительный по выгоде. Разрабатывать SPA и не делать его PWA - это как снять люксовый номер в гостинице, но лечь спать на его входе в коридоре на коврике, потому что до спальни лень дойти.

PWA -> Workbox и vite-plugin-pwa

Манифест и Service worker настолько просты, что создание обертки над SW - Workbox, и плагина для Vite vite-plugin-pwa логическому объяснению не поддается. Кода получается в несколько раз больше, нужно грузить дополнительные зависимости и разбираться в конфигурациях оберток. Простое сделали сложным.

Лучше задействовать Манифест и Service worker как они созданы изначально, и написать два этих простых файла по шаблонам из спецификаций.

SSG

SSG (Static Site Generation) — подход, когда содержимое сайта предварительно генерируется в html-файлы, которые потом раздаются с сервера.

Сразу подходит для индексации поисковиками.

SSR

SSR (Server Side Rendering), способ генерации html на стороне сервера, когда генерация происходит в момент обращения. После запроса клиентом странички, сервер на своей стороне выполняет API-запросы, а затем формирует html-страницу. Соответственно, на сервере нужен Node.js сервер, который довольно сильно нагружает "железо".

Кроме того, есть множество ограничений при написании кода и использования тех или иных JavaScript и Vue возможностей. Как пишет Google относительно SSR - "A rehydration problem: one app for the price of two".

SEO оптимизация

Для того, чтобы поисковик мог проиндексировать страницу вашего сайта, при обращении к ней он должен получить HTML с контентом (текст, картинки, видео). Со SPA сайтами, в которых контент подгружается динамически JavaScript-ом, такое иногда не получается, но иногда и получается. Как следует из этих экспериментов Google уже умеет индексировать SPA приложения, Yandex - еще нет.

Самым популярным и неэффективным методом для надежного индексации всеми поисковиками является использование SSR (SSG подходит для несложных по структуре сайтов без бэкенда, вроде документаций).

Google позволяет посмотреть, как ваш сайт выглядит/индексируется его кроулером, который как-то всё-таки работает со скриптами, поэтому для начала проверьте, нужно ли вам усложняться вообще.

Если проблемы обнаружились, то можно воспользоваться динамической отрисовкой

dynamic-rendering

Смысл в том, чтобы обрабатывать запросы обычных пользователей и поисковых ботов по-разному и отдавать им разные страницы. Для пользователей - SPA, для поисковиков - сгенеренные налету либо заранее страницы. Распределение может вести вебсервер или точка входа на ваш сайт (index.php вместо index.html).

На картинке выше подразумевается некий Prerenderer (которые тоже есть в качестве стороннего сервиса или своего решения), однако в большинстве случаев намного проще генерить HTML страницу для бота напрямую.

То есть, например, для страницы товара в онлайн магазине это может быть его текстовое описание с картинками и отзывами покупателей в любом HTML форматировании. Для этого достаточно скрипта на PHP/Express/Python и т.д. в 100-200 строк, что намного менее трудозатратней SSR решений, а так же снижает требования в серверному "железу" на порядки (вывод можно закэшировать в статичный HTML файл).

При совпадении фактического контента (текст, картинки) такой страницы с контентом SPA в браузере, Google не рассматривает упрощенную для его бота версию как обман. Данная метода была еще до появления всяких SSR. Проверено многолетним использованием.

PageSpeed и другие тесты производительности

PageSpeed и подобные инструменты очень полезны в выявлении неоптимизированных мест в вашем веб-приложении, однако для SPA и PWA он не совсем верен.

Точней, некоторые его метрики не учитывают UX в целом. Нормально сделанный PWA при самой первой загрузке и установке, конечно, проиграет по FCP метрике аналогу на SSR, но после размещения всех своих ресурсов локально на браузере клиента, никакой SSR и близко не сравнится с ним по скорости работы и комфорту для пользователя, не говоря уже о прочих возможностях типа оффлайн работы и установке как нативного приложения.

SSR может быть, наверное, полезен для каких-то исключительных случаев, но в целом он выглядит тупиковой ветвью во фронтенд разработке.

',9),i=[l];function c(d,S,m,n,u,P){return r(),t("div",null,i)}const A=s(p,[["render",c]]);export{h as __pageData,A as default}; +import{_ as e,a}from"./chunks/dynamic-rendering.0iLK77IQ.js";import{_ as s,o as r,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"SPA, PWA, SSG, SSR и SEO","description":"","frontmatter":{},"headers":[],"relativePath":"ru/frontend/spa-pwa-ssr-ssg.md","filePath":"ru/frontend/spa-pwa-ssr-ssg.md","lastUpdated":1726505115000}'),p={name:"ru/frontend/spa-pwa-ssr-ssg.md"},l=o('

SPA, PWA, SSG, SSR и SEO

Web 1.0 -> Web 2.0

Сперва был статичный HTML и браузеры показывали его. Чуть позже придумали немножко JavaScript-а, чтобы обрабатывать формочки и делать небольшую анимацию. Потом появился CSS, и все увидели, что это красиво. После кто-то предложил идею JSON для формата данных, а затем Микрософт подарила миру XMLHttpRequest, и JavaScript-у разрешили отправлять и получать данные с сервера.

Так родился SPA.

SPA

SPA (Single Page Application) работает примерно как обычное десктоп/мобильное приложение - при первом обращении на сервер получает програмную оболочку, необходимую для отображения сайта, а затем уже пересылает на/с сервера данные, обычно в JSON формате. Так получается намного эффективней способа, когда с каждым запросом с сервера приходила новая HTML страница с всеми ресурсами.

Для пользователя UX повышается значительно.

spa-vs-mpa

PWA

PWA (Progressive Web Application) - еще один шаг, чтобы улучшить пользовательский опыт и максимально приблизить веб приложения по ощущениям пользователя к нативным.

При PWA к SPA добавляются два элемента:

  1. Манифест. Текстовый файл со свойствами приложения. Благодаря ему иконка веб-приложения может быть установлена также как и у нативных приложений на домашний экран смартфона. Кроме того, при запуске PWA может не показывать элементы браузера и казаться обычным приложением.

  2. Service worker. Это прослойка в браузере между сервером и самим браузером, которая позволяет сделать управляемое кэширование. Другими словами, сохранить приложение со всеми ресурсами на смартфоне/компьютере, чтобы при запуске оно сразу запускалось. Если не нужны данные с сервера, то приложение может работать оффлайн (например, Заметки).

Больше о PWA можно прочесть на сайте, созданном командой Chrome - https://web.dev/

Апгрейд SPA до PWA очень небольшой по трудозатратам, но очень значительный по выгоде. Разрабатывать SPA и не делать его PWA - это как снять люксовый номер в гостинице, но лечь спать на его входе в коридоре на коврике, потому что до спальни лень дойти.

PWA -> Workbox и vite-plugin-pwa

Манифест и Service worker настолько просты, что создание обертки над SW - Workbox, и плагина для Vite vite-plugin-pwa логическому объяснению не поддается. Кода получается в несколько раз больше, нужно грузить дополнительные зависимости и разбираться в конфигурациях оберток. Простое сделали сложным.

Лучше задействовать Манифест и Service worker как они созданы изначально, и написать два этих простых файла по шаблонам из спецификаций.

SSG

SSG (Static Site Generation) — подход, когда содержимое сайта предварительно генерируется в html-файлы, которые потом раздаются с сервера.

Сразу подходит для индексации поисковиками.

SSR

SSR (Server Side Rendering), способ генерации html на стороне сервера, когда генерация происходит в момент обращения. После запроса клиентом странички, сервер на своей стороне выполняет API-запросы, а затем формирует html-страницу. Соответственно, на сервере нужен Node.js сервер, который довольно сильно нагружает "железо".

Кроме того, есть множество ограничений при написании кода и использования тех или иных JavaScript и Vue возможностей. Как пишет Google относительно SSR - "A rehydration problem: one app for the price of two".

SEO оптимизация

Для того, чтобы поисковик мог проиндексировать страницу вашего сайта, при обращении к ней он должен получить HTML с контентом (текст, картинки, видео). Со SPA сайтами, в которых контент подгружается динамически JavaScript-ом, такое иногда не получается, но иногда и получается. Как следует из этих экспериментов Google уже умеет индексировать SPA приложения, Yandex - еще нет.

Самым популярным и неэффективным методом для надежного индексации всеми поисковиками является использование SSR (SSG подходит для несложных по структуре сайтов без бэкенда, вроде документаций).

Google позволяет посмотреть, как ваш сайт выглядит/индексируется его кроулером, который как-то всё-таки работает со скриптами, поэтому для начала проверьте, нужно ли вам усложняться вообще.

Если проблемы обнаружились, то можно воспользоваться динамической отрисовкой

dynamic-rendering

Смысл в том, чтобы обрабатывать запросы обычных пользователей и поисковых ботов по-разному и отдавать им разные страницы. Для пользователей - SPA, для поисковиков - сгенеренные налету либо заранее страницы. Распределение может вести вебсервер или точка входа на ваш сайт (index.php вместо index.html).

На картинке выше подразумевается некий Prerenderer (которые тоже есть в качестве стороннего сервиса или своего решения), однако в большинстве случаев намного проще генерить HTML страницу для бота напрямую.

То есть, например, для страницы товара в онлайн магазине это может быть его текстовое описание с картинками и отзывами покупателей в любом HTML форматировании. Для этого достаточно скрипта на PHP/Express/Python и т.д. в 100-200 строк, что намного менее трудозатратней SSR решений, а так же снижает требования в серверному "железу" на порядки (вывод можно закэшировать в статичный HTML файл).

При совпадении фактического контента (текст, картинки) такой страницы с контентом SPA в браузере, Google не рассматривает упрощенную для его бота версию как обман. Данная метода была еще до появления всяких SSR. Проверено многолетним использованием.

PageSpeed и другие тесты производительности

PageSpeed и подобные инструменты очень полезны в выявлении неоптимизированных мест в вашем веб-приложении, однако для SPA и PWA он не совсем верен.

Точней, некоторые его метрики не учитывают UX в целом. Нормально сделанный PWA при самой первой загрузке и установке, конечно, проиграет по FCP метрике аналогу на SSR, но после размещения всех своих ресурсов локально на браузере клиента, никакой SSR и близко не сравнится с ним по скорости работы и комфорту для пользователя, не говоря уже о прочих возможностях типа оффлайн работы и установке как нативного приложения.

SSR может быть, наверное, полезен для каких-то исключительных случаев, но в целом он выглядит тупиковой ветвью во фронтенд разработке.

',9),i=[l];function c(d,S,m,n,u,P){return r(),t("div",null,i)}const A=s(p,[["render",c]]);export{h as __pageData,A as default}; diff --git a/assets/ru_frontend_spa-pwa-ssr-ssg.md.kKt6Va55.lean.js b/assets/ru_frontend_spa-pwa-ssr-ssg.md.DtYGFAwt.lean.js similarity index 88% rename from assets/ru_frontend_spa-pwa-ssr-ssg.md.kKt6Va55.lean.js rename to assets/ru_frontend_spa-pwa-ssr-ssg.md.DtYGFAwt.lean.js index 2a42f3216..21f17171d 100644 --- a/assets/ru_frontend_spa-pwa-ssr-ssg.md.kKt6Va55.lean.js +++ b/assets/ru_frontend_spa-pwa-ssr-ssg.md.DtYGFAwt.lean.js @@ -1 +1 @@ -import{_ as e,a}from"./chunks/dynamic-rendering.0iLK77IQ.js";import{_ as s,o as r,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"SPA, PWA, SSG, SSR и SEO","description":"","frontmatter":{},"headers":[],"relativePath":"ru/frontend/spa-pwa-ssr-ssg.md","filePath":"ru/frontend/spa-pwa-ssr-ssg.md","lastUpdated":1726474804000}'),p={name:"ru/frontend/spa-pwa-ssr-ssg.md"},l=o("",9),i=[l];function c(d,S,m,n,u,P){return r(),t("div",null,i)}const A=s(p,[["render",c]]);export{h as __pageData,A as default}; +import{_ as e,a}from"./chunks/dynamic-rendering.0iLK77IQ.js";import{_ as s,o as r,c as t,a4 as o}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"SPA, PWA, SSG, SSR и SEO","description":"","frontmatter":{},"headers":[],"relativePath":"ru/frontend/spa-pwa-ssr-ssg.md","filePath":"ru/frontend/spa-pwa-ssr-ssg.md","lastUpdated":1726505115000}'),p={name:"ru/frontend/spa-pwa-ssr-ssg.md"},l=o("",9),i=[l];function c(d,S,m,n,u,P){return r(),t("div",null,i)}const A=s(p,[["render",c]]);export{h as __pageData,A as default}; diff --git a/assets/ru_index.md.DM_OhCVU.js b/assets/ru_index.md.CGy73QG8.js similarity index 96% rename from assets/ru_index.md.DM_OhCVU.js rename to assets/ru_index.md.CGy73QG8.js index a51088f76..9daa3a443 100644 --- a/assets/ru_index.md.DM_OhCVU.js +++ b/assets/ru_index.md.CGy73QG8.js @@ -1 +1 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.B8KxSsRZ.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Vue FAQ","text":"Vue JavaScript framework FAQ","tagline":"Наиболее часто задаваемые вопросы по Vue.js","actions":[{"theme":"brand","text":"Начать","link":"/ru/misc/introduction"},{"theme":"alt","text":"Учебник","link":"/ru/book/"},{"theme":"alt alt-border","text":"vue-webapp билдер","link":"/ru/vue-webapp/"}],"image":{"src":"/images/vue-faq-logo.webp","alt":"Vue FAQ"}},"features":[{"title":"Frontend","details":"Рассматриваются общие вопросы фронтенд разработки - архитектура, шаблоны, лучшие практики"},{"title":"Vue 3","details":"Основное внимание уделено Vue 3, Composition API и экосистеме Vue последних лет"},{"title":"vue-webapp","details":"Стартер кит Vue 3 проекта с различными предустановленными опциями"},{"title":"Vue.js 3 Design Patterns and Best Practices","details":"Перевод на русский язык прекрасного учебника по Vue 3 автора Pablo Garaguso"},{"title":"Nuxt-free","details":"Nuxt - отдельный самостоятельный фреймворк, заслуживающий свой собственный FAQ"}]},"headers":[],"relativePath":"ru/index.md","filePath":"ru/index.md","lastUpdated":1726474804000}'),i={name:"ru/index.md"};function r(o,s,n,u,l,d){return t(),a("div")}const m=e(i,[["render",r]]);export{p as __pageData,m as default}; +import{_ as e,o as t,c as a}from"./chunks/framework.B8KxSsRZ.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Vue FAQ","text":"Vue JavaScript framework FAQ","tagline":"Наиболее часто задаваемые вопросы по Vue.js","actions":[{"theme":"brand","text":"Начать","link":"/ru/misc/introduction"},{"theme":"alt","text":"Учебник","link":"/ru/book/"},{"theme":"alt alt-border","text":"vue-webapp билдер","link":"/ru/vue-webapp/"}],"image":{"src":"/images/vue-faq-logo.webp","alt":"Vue FAQ"}},"features":[{"title":"Frontend","details":"Рассматриваются общие вопросы фронтенд разработки - архитектура, шаблоны, лучшие практики"},{"title":"Vue 3","details":"Основное внимание уделено Vue 3, Composition API и экосистеме Vue последних лет"},{"title":"vue-webapp","details":"Стартер кит Vue 3 проекта с различными предустановленными опциями"},{"title":"Vue.js 3 Design Patterns and Best Practices","details":"Перевод на русский язык прекрасного учебника по Vue 3 автора Pablo Garaguso"},{"title":"Nuxt-free","details":"Nuxt - отдельный самостоятельный фреймворк, заслуживающий свой собственный FAQ"}]},"headers":[],"relativePath":"ru/index.md","filePath":"ru/index.md","lastUpdated":1726505115000}'),i={name:"ru/index.md"};function r(o,s,n,u,l,d){return t(),a("div")}const m=e(i,[["render",r]]);export{p as __pageData,m as default}; diff --git a/assets/ru_index.md.DM_OhCVU.lean.js b/assets/ru_index.md.CGy73QG8.lean.js similarity index 96% rename from assets/ru_index.md.DM_OhCVU.lean.js rename to assets/ru_index.md.CGy73QG8.lean.js index a51088f76..9daa3a443 100644 --- a/assets/ru_index.md.DM_OhCVU.lean.js +++ b/assets/ru_index.md.CGy73QG8.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as a}from"./chunks/framework.B8KxSsRZ.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Vue FAQ","text":"Vue JavaScript framework FAQ","tagline":"Наиболее часто задаваемые вопросы по Vue.js","actions":[{"theme":"brand","text":"Начать","link":"/ru/misc/introduction"},{"theme":"alt","text":"Учебник","link":"/ru/book/"},{"theme":"alt alt-border","text":"vue-webapp билдер","link":"/ru/vue-webapp/"}],"image":{"src":"/images/vue-faq-logo.webp","alt":"Vue FAQ"}},"features":[{"title":"Frontend","details":"Рассматриваются общие вопросы фронтенд разработки - архитектура, шаблоны, лучшие практики"},{"title":"Vue 3","details":"Основное внимание уделено Vue 3, Composition API и экосистеме Vue последних лет"},{"title":"vue-webapp","details":"Стартер кит Vue 3 проекта с различными предустановленными опциями"},{"title":"Vue.js 3 Design Patterns and Best Practices","details":"Перевод на русский язык прекрасного учебника по Vue 3 автора Pablo Garaguso"},{"title":"Nuxt-free","details":"Nuxt - отдельный самостоятельный фреймворк, заслуживающий свой собственный FAQ"}]},"headers":[],"relativePath":"ru/index.md","filePath":"ru/index.md","lastUpdated":1726474804000}'),i={name:"ru/index.md"};function r(o,s,n,u,l,d){return t(),a("div")}const m=e(i,[["render",r]]);export{p as __pageData,m as default}; +import{_ as e,o as t,c as a}from"./chunks/framework.B8KxSsRZ.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Vue FAQ","text":"Vue JavaScript framework FAQ","tagline":"Наиболее часто задаваемые вопросы по Vue.js","actions":[{"theme":"brand","text":"Начать","link":"/ru/misc/introduction"},{"theme":"alt","text":"Учебник","link":"/ru/book/"},{"theme":"alt alt-border","text":"vue-webapp билдер","link":"/ru/vue-webapp/"}],"image":{"src":"/images/vue-faq-logo.webp","alt":"Vue FAQ"}},"features":[{"title":"Frontend","details":"Рассматриваются общие вопросы фронтенд разработки - архитектура, шаблоны, лучшие практики"},{"title":"Vue 3","details":"Основное внимание уделено Vue 3, Composition API и экосистеме Vue последних лет"},{"title":"vue-webapp","details":"Стартер кит Vue 3 проекта с различными предустановленными опциями"},{"title":"Vue.js 3 Design Patterns and Best Practices","details":"Перевод на русский язык прекрасного учебника по Vue 3 автора Pablo Garaguso"},{"title":"Nuxt-free","details":"Nuxt - отдельный самостоятельный фреймворк, заслуживающий свой собственный FAQ"}]},"headers":[],"relativePath":"ru/index.md","filePath":"ru/index.md","lastUpdated":1726505115000}'),i={name:"ru/index.md"};function r(o,s,n,u,l,d){return t(),a("div")}const m=e(i,[["render",r]]);export{p as __pageData,m as default}; diff --git a/assets/ru_misc_CHANGELOG.md.R-7q8aJG.js b/assets/ru_misc_CHANGELOG.md.El5O7kF-.js similarity index 88% rename from assets/ru_misc_CHANGELOG.md.R-7q8aJG.js rename to assets/ru_misc_CHANGELOG.md.El5O7kF-.js index 68cf57236..de24a97d6 100644 --- a/assets/ru_misc_CHANGELOG.md.R-7q8aJG.js +++ b/assets/ru_misc_CHANGELOG.md.El5O7kF-.js @@ -1 +1 @@ -import{j as e,H as a}from"./chunks/animated-background.Dg_OWvFO.js";import{o as r,c as s,I as o,m as t}from"./chunks/framework.B8KxSsRZ.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"ru/misc/CHANGELOG.md","filePath":"ru/misc/CHANGELOG.md","lastUpdated":1726474804000}'),n={name:"ru/misc/CHANGELOG.md"},_=Object.assign(n,{setup(c){return e.github.owner="vuesence",e.github.repo="vue-faq",(i,m)=>(r(),s("div",null,[o(t(a),{options:t(e)},null,8,["options"])]))}});export{l as __pageData,_ as default}; +import{j as e,H as a}from"./chunks/animated-background.Dg_OWvFO.js";import{o as r,c as s,I as o,m as t}from"./chunks/framework.B8KxSsRZ.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"ru/misc/CHANGELOG.md","filePath":"ru/misc/CHANGELOG.md","lastUpdated":1726505115000}'),n={name:"ru/misc/CHANGELOG.md"},_=Object.assign(n,{setup(c){return e.github.owner="vuesence",e.github.repo="vue-faq",(i,m)=>(r(),s("div",null,[o(t(a),{options:t(e)},null,8,["options"])]))}});export{l as __pageData,_ as default}; diff --git a/assets/ru_misc_CHANGELOG.md.R-7q8aJG.lean.js b/assets/ru_misc_CHANGELOG.md.El5O7kF-.lean.js similarity index 88% rename from assets/ru_misc_CHANGELOG.md.R-7q8aJG.lean.js rename to assets/ru_misc_CHANGELOG.md.El5O7kF-.lean.js index 68cf57236..de24a97d6 100644 --- a/assets/ru_misc_CHANGELOG.md.R-7q8aJG.lean.js +++ b/assets/ru_misc_CHANGELOG.md.El5O7kF-.lean.js @@ -1 +1 @@ -import{j as e,H as a}from"./chunks/animated-background.Dg_OWvFO.js";import{o as r,c as s,I as o,m as t}from"./chunks/framework.B8KxSsRZ.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"ru/misc/CHANGELOG.md","filePath":"ru/misc/CHANGELOG.md","lastUpdated":1726474804000}'),n={name:"ru/misc/CHANGELOG.md"},_=Object.assign(n,{setup(c){return e.github.owner="vuesence",e.github.repo="vue-faq",(i,m)=>(r(),s("div",null,[o(t(a),{options:t(e)},null,8,["options"])]))}});export{l as __pageData,_ as default}; +import{j as e,H as a}from"./chunks/animated-background.Dg_OWvFO.js";import{o as r,c as s,I as o,m as t}from"./chunks/framework.B8KxSsRZ.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"ru/misc/CHANGELOG.md","filePath":"ru/misc/CHANGELOG.md","lastUpdated":1726505115000}'),n={name:"ru/misc/CHANGELOG.md"},_=Object.assign(n,{setup(c){return e.github.owner="vuesence",e.github.repo="vue-faq",(i,m)=>(r(),s("div",null,[o(t(a),{options:t(e)},null,8,["options"])]))}});export{l as __pageData,_ as default}; diff --git a/assets/ru_misc_cheat-sheets.md.wf6WdNEU.js b/assets/ru_misc_cheat-sheets.md.DYsKm8Mm.js similarity index 97% rename from assets/ru_misc_cheat-sheets.md.wf6WdNEU.js rename to assets/ru_misc_cheat-sheets.md.DYsKm8Mm.js index a642d52f1..9b0d8198a 100644 --- a/assets/ru_misc_cheat-sheets.md.wf6WdNEU.js +++ b/assets/ru_misc_cheat-sheets.md.DYsKm8Mm.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const S=JSON.parse('{"title":"Шпаргалки (Cheat Sheet)","description":"","frontmatter":{},"headers":[],"relativePath":"ru/misc/cheat-sheets.md","filePath":"ru/misc/cheat-sheets.md","lastUpdated":1726474804000}'),l={name:"ru/misc/cheat-sheets.md"},i=r('

Шпаргалки (Cheat Sheet)

Vue

JavaScript

HTML

CSS

Typescript

Markdown

',13),h=[i];function s(o,c,n,d,p,f){return a(),t("div",null,h)}const _=e(l,[["render",s]]);export{S as __pageData,_ as default}; +import{_ as e,o as a,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const S=JSON.parse('{"title":"Шпаргалки (Cheat Sheet)","description":"","frontmatter":{},"headers":[],"relativePath":"ru/misc/cheat-sheets.md","filePath":"ru/misc/cheat-sheets.md","lastUpdated":1726505115000}'),l={name:"ru/misc/cheat-sheets.md"},i=r('

Шпаргалки (Cheat Sheet)

Vue

JavaScript

HTML

CSS

Typescript

Markdown

',13),h=[i];function s(o,c,n,d,p,f){return a(),t("div",null,h)}const _=e(l,[["render",s]]);export{S as __pageData,_ as default}; diff --git a/assets/ru_misc_cheat-sheets.md.wf6WdNEU.lean.js b/assets/ru_misc_cheat-sheets.md.DYsKm8Mm.lean.js similarity index 86% rename from assets/ru_misc_cheat-sheets.md.wf6WdNEU.lean.js rename to assets/ru_misc_cheat-sheets.md.DYsKm8Mm.lean.js index ea1c4c1d4..db0a94980 100644 --- a/assets/ru_misc_cheat-sheets.md.wf6WdNEU.lean.js +++ b/assets/ru_misc_cheat-sheets.md.DYsKm8Mm.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const S=JSON.parse('{"title":"Шпаргалки (Cheat Sheet)","description":"","frontmatter":{},"headers":[],"relativePath":"ru/misc/cheat-sheets.md","filePath":"ru/misc/cheat-sheets.md","lastUpdated":1726474804000}'),l={name:"ru/misc/cheat-sheets.md"},i=r("",13),h=[i];function s(o,c,n,d,p,f){return a(),t("div",null,h)}const _=e(l,[["render",s]]);export{S as __pageData,_ as default}; +import{_ as e,o as a,c as t,a4 as r}from"./chunks/framework.B8KxSsRZ.js";const S=JSON.parse('{"title":"Шпаргалки (Cheat Sheet)","description":"","frontmatter":{},"headers":[],"relativePath":"ru/misc/cheat-sheets.md","filePath":"ru/misc/cheat-sheets.md","lastUpdated":1726505115000}'),l={name:"ru/misc/cheat-sheets.md"},i=r("",13),h=[i];function s(o,c,n,d,p,f){return a(),t("div",null,h)}const _=e(l,[["render",s]]);export{S as __pageData,_ as default}; diff --git a/assets/ru_misc_contribute.md.BxfPlWUI.lean.js b/assets/ru_misc_contribute.md.ByrbcwwB.js similarity index 97% rename from assets/ru_misc_contribute.md.BxfPlWUI.lean.js rename to assets/ru_misc_contribute.md.ByrbcwwB.js index 7165ebe46..f12ba70c8 100644 --- a/assets/ru_misc_contribute.md.BxfPlWUI.lean.js +++ b/assets/ru_misc_contribute.md.ByrbcwwB.js @@ -1,4 +1,4 @@ -import{j as c,o as d,c as m,l as e,aa as l,ab as o,a as i}from"./chunks/framework.B8KxSsRZ.js";const p=e("h1",{id:"внесите-лепту-в-развитие-данного-ресурса",tabindex:"-1"},[i("Внесите лепту в развитие данного ресурса "),e("a",{class:"header-anchor",href:"#внесите-лепту-в-развитие-данного-ресурса","aria-label":'Permalink to "Внесите лепту в развитие данного ресурса"'},"​")],-1),h=e("p",null,"Вы можете предложить корректировку любого или добавление нового материала используя форму ниже.",-1),f=e("p",null,[i("GitHub way внесения изменений ("),e("i",null,"fork -> edit -> create PR"),i(") также всячески приветствуется.")],-1),b={class:"form-container",action:"action_page.php"},_=e("label",{for:"fname"},"Ваше имя и/или контакты (опционально)",-1),v=e("label",{for:"subject"},"Вопрос/ответ или сообщение",-1),k=e("label",{for:"check"},'Введите слово "vue"',-1),j=JSON.parse('{"title":"Внесите лепту в развитие данного ресурса","description":"","frontmatter":{},"headers":[],"relativePath":"ru/misc/contribute.md","filePath":"ru/misc/contribute.md","lastUpdated":1726474804000}'),g={name:"ru/misc/contribute.md"},P=Object.assign(g,{setup(y){const n=c(),t=c({name:"",email:"",message:"",check:""});async function u(){if(n.value.setAttribute("disabled",!0),t.value.check==="vue"){const r=`Сообщение с сайта Vue FAQ: +import{j as c,o as d,c as m,l as e,aa as l,ab as o,a as i}from"./chunks/framework.B8KxSsRZ.js";const p=e("h1",{id:"внесите-лепту-в-развитие-данного-ресурса",tabindex:"-1"},[i("Внесите лепту в развитие данного ресурса "),e("a",{class:"header-anchor",href:"#внесите-лепту-в-развитие-данного-ресурса","aria-label":'Permalink to "Внесите лепту в развитие данного ресурса"'},"​")],-1),h=e("p",null,"Вы можете предложить корректировку любого или добавление нового материала используя форму ниже.",-1),f=e("p",null,[i("GitHub way внесения изменений ("),e("i",null,"fork -> edit -> create PR"),i(") также всячески приветствуется.")],-1),b={class:"form-container",action:"action_page.php"},_=e("label",{for:"fname"},"Ваше имя и/или контакты (опционально)",-1),v=e("label",{for:"subject"},"Вопрос/ответ или сообщение",-1),k=e("label",{for:"check"},'Введите слово "vue"',-1),j=JSON.parse('{"title":"Внесите лепту в развитие данного ресурса","description":"","frontmatter":{},"headers":[],"relativePath":"ru/misc/contribute.md","filePath":"ru/misc/contribute.md","lastUpdated":1726505115000}'),g={name:"ru/misc/contribute.md"},P=Object.assign(g,{setup(y){const n=c(),t=c({name:"",email:"",message:"",check:""});async function u(){if(n.value.setAttribute("disabled",!0),t.value.check==="vue"){const r=`Сообщение с сайта Vue FAQ: Имя:${t.value.name} diff --git a/assets/ru_misc_contribute.md.BxfPlWUI.js b/assets/ru_misc_contribute.md.ByrbcwwB.lean.js similarity index 97% rename from assets/ru_misc_contribute.md.BxfPlWUI.js rename to assets/ru_misc_contribute.md.ByrbcwwB.lean.js index 7165ebe46..f12ba70c8 100644 --- a/assets/ru_misc_contribute.md.BxfPlWUI.js +++ b/assets/ru_misc_contribute.md.ByrbcwwB.lean.js @@ -1,4 +1,4 @@ -import{j as c,o as d,c as m,l as e,aa as l,ab as o,a as i}from"./chunks/framework.B8KxSsRZ.js";const p=e("h1",{id:"внесите-лепту-в-развитие-данного-ресурса",tabindex:"-1"},[i("Внесите лепту в развитие данного ресурса "),e("a",{class:"header-anchor",href:"#внесите-лепту-в-развитие-данного-ресурса","aria-label":'Permalink to "Внесите лепту в развитие данного ресурса"'},"​")],-1),h=e("p",null,"Вы можете предложить корректировку любого или добавление нового материала используя форму ниже.",-1),f=e("p",null,[i("GitHub way внесения изменений ("),e("i",null,"fork -> edit -> create PR"),i(") также всячески приветствуется.")],-1),b={class:"form-container",action:"action_page.php"},_=e("label",{for:"fname"},"Ваше имя и/или контакты (опционально)",-1),v=e("label",{for:"subject"},"Вопрос/ответ или сообщение",-1),k=e("label",{for:"check"},'Введите слово "vue"',-1),j=JSON.parse('{"title":"Внесите лепту в развитие данного ресурса","description":"","frontmatter":{},"headers":[],"relativePath":"ru/misc/contribute.md","filePath":"ru/misc/contribute.md","lastUpdated":1726474804000}'),g={name:"ru/misc/contribute.md"},P=Object.assign(g,{setup(y){const n=c(),t=c({name:"",email:"",message:"",check:""});async function u(){if(n.value.setAttribute("disabled",!0),t.value.check==="vue"){const r=`Сообщение с сайта Vue FAQ: +import{j as c,o as d,c as m,l as e,aa as l,ab as o,a as i}from"./chunks/framework.B8KxSsRZ.js";const p=e("h1",{id:"внесите-лепту-в-развитие-данного-ресурса",tabindex:"-1"},[i("Внесите лепту в развитие данного ресурса "),e("a",{class:"header-anchor",href:"#внесите-лепту-в-развитие-данного-ресурса","aria-label":'Permalink to "Внесите лепту в развитие данного ресурса"'},"​")],-1),h=e("p",null,"Вы можете предложить корректировку любого или добавление нового материала используя форму ниже.",-1),f=e("p",null,[i("GitHub way внесения изменений ("),e("i",null,"fork -> edit -> create PR"),i(") также всячески приветствуется.")],-1),b={class:"form-container",action:"action_page.php"},_=e("label",{for:"fname"},"Ваше имя и/или контакты (опционально)",-1),v=e("label",{for:"subject"},"Вопрос/ответ или сообщение",-1),k=e("label",{for:"check"},'Введите слово "vue"',-1),j=JSON.parse('{"title":"Внесите лепту в развитие данного ресурса","description":"","frontmatter":{},"headers":[],"relativePath":"ru/misc/contribute.md","filePath":"ru/misc/contribute.md","lastUpdated":1726505115000}'),g={name:"ru/misc/contribute.md"},P=Object.assign(g,{setup(y){const n=c(),t=c({name:"",email:"",message:"",check:""});async function u(){if(n.value.setAttribute("disabled",!0),t.value.check==="vue"){const r=`Сообщение с сайта Vue FAQ: Имя:${t.value.name} diff --git a/assets/ru_misc_glossary.md.Zx29bhYw.lean.js b/assets/ru_misc_glossary.md.BMqIYP7e.js similarity index 96% rename from assets/ru_misc_glossary.md.Zx29bhYw.lean.js rename to assets/ru_misc_glossary.md.BMqIYP7e.js index c4aa53304..edaf34104 100644 --- a/assets/ru_misc_glossary.md.Zx29bhYw.lean.js +++ b/assets/ru_misc_glossary.md.BMqIYP7e.js @@ -1 +1 @@ -import{_ as s,o as a,c as r,l as e,a as l}from"./chunks/framework.B8KxSsRZ.js";const x=JSON.parse('{"title":"Глоссарий и сокращения","description":"","frontmatter":{},"headers":[],"relativePath":"ru/misc/glossary.md","filePath":"ru/misc/glossary.md","lastUpdated":1726474804000}'),t={name:"ru/misc/glossary.md"},o=e("h1",{id:"глоссарии-и-сокращения",tabindex:"-1"},[l("Глоссарий и сокращения "),e("a",{class:"header-anchor",href:"#глоссарии-и-сокращения","aria-label":'Permalink to "Глоссарий и сокращения"'},"​")],-1),n=e("ul",null,[e("li",null,"DX (developer experience) - опыт разработчика, удобство его работы над приложением. Сюда входит всё - качество кода, удобство работы с IDE, грамотная архитектура проекта, комментирование, качество документации, использование на проекте проверенных и лучших практик и т.п."),e("li",null,"UX (user experience) - опыт пользователя. Общее его впечатление от удобства работы с сайтом/приложением."),e("li",null,"UI (user interface) - дизайн вебсайта/приложения с точки зрения визуальной эстетики и стиля"),e("li",null,"SW (service worker) - сервис воркер (элемент PWA)"),e("li",null,"AT (access token) - токен при JWT аутентификации"),e("li",null,"RT (refresh token) - токен при JWT аутентификации")],-1),c=[o,n];function i(d,u,_,p,m,h){return a(),r("div",null,c)}const k=s(t,[["render",i]]);export{x as __pageData,k as default}; +import{_ as s,o as a,c as r,l as e,a as l}from"./chunks/framework.B8KxSsRZ.js";const x=JSON.parse('{"title":"Глоссарий и сокращения","description":"","frontmatter":{},"headers":[],"relativePath":"ru/misc/glossary.md","filePath":"ru/misc/glossary.md","lastUpdated":1726505115000}'),t={name:"ru/misc/glossary.md"},o=e("h1",{id:"глоссарии-и-сокращения",tabindex:"-1"},[l("Глоссарий и сокращения "),e("a",{class:"header-anchor",href:"#глоссарии-и-сокращения","aria-label":'Permalink to "Глоссарий и сокращения"'},"​")],-1),n=e("ul",null,[e("li",null,"DX (developer experience) - опыт разработчика, удобство его работы над приложением. Сюда входит всё - качество кода, удобство работы с IDE, грамотная архитектура проекта, комментирование, качество документации, использование на проекте проверенных и лучших практик и т.п."),e("li",null,"UX (user experience) - опыт пользователя. Общее его впечатление от удобства работы с сайтом/приложением."),e("li",null,"UI (user interface) - дизайн вебсайта/приложения с точки зрения визуальной эстетики и стиля"),e("li",null,"SW (service worker) - сервис воркер (элемент PWA)"),e("li",null,"AT (access token) - токен при JWT аутентификации"),e("li",null,"RT (refresh token) - токен при JWT аутентификации")],-1),c=[o,n];function i(d,u,_,p,m,h){return a(),r("div",null,c)}const k=s(t,[["render",i]]);export{x as __pageData,k as default}; diff --git a/assets/ru_misc_glossary.md.Zx29bhYw.js b/assets/ru_misc_glossary.md.BMqIYP7e.lean.js similarity index 96% rename from assets/ru_misc_glossary.md.Zx29bhYw.js rename to assets/ru_misc_glossary.md.BMqIYP7e.lean.js index c4aa53304..edaf34104 100644 --- a/assets/ru_misc_glossary.md.Zx29bhYw.js +++ b/assets/ru_misc_glossary.md.BMqIYP7e.lean.js @@ -1 +1 @@ -import{_ as s,o as a,c as r,l as e,a as l}from"./chunks/framework.B8KxSsRZ.js";const x=JSON.parse('{"title":"Глоссарий и сокращения","description":"","frontmatter":{},"headers":[],"relativePath":"ru/misc/glossary.md","filePath":"ru/misc/glossary.md","lastUpdated":1726474804000}'),t={name:"ru/misc/glossary.md"},o=e("h1",{id:"глоссарии-и-сокращения",tabindex:"-1"},[l("Глоссарий и сокращения "),e("a",{class:"header-anchor",href:"#глоссарии-и-сокращения","aria-label":'Permalink to "Глоссарий и сокращения"'},"​")],-1),n=e("ul",null,[e("li",null,"DX (developer experience) - опыт разработчика, удобство его работы над приложением. Сюда входит всё - качество кода, удобство работы с IDE, грамотная архитектура проекта, комментирование, качество документации, использование на проекте проверенных и лучших практик и т.п."),e("li",null,"UX (user experience) - опыт пользователя. Общее его впечатление от удобства работы с сайтом/приложением."),e("li",null,"UI (user interface) - дизайн вебсайта/приложения с точки зрения визуальной эстетики и стиля"),e("li",null,"SW (service worker) - сервис воркер (элемент PWA)"),e("li",null,"AT (access token) - токен при JWT аутентификации"),e("li",null,"RT (refresh token) - токен при JWT аутентификации")],-1),c=[o,n];function i(d,u,_,p,m,h){return a(),r("div",null,c)}const k=s(t,[["render",i]]);export{x as __pageData,k as default}; +import{_ as s,o as a,c as r,l as e,a as l}from"./chunks/framework.B8KxSsRZ.js";const x=JSON.parse('{"title":"Глоссарий и сокращения","description":"","frontmatter":{},"headers":[],"relativePath":"ru/misc/glossary.md","filePath":"ru/misc/glossary.md","lastUpdated":1726505115000}'),t={name:"ru/misc/glossary.md"},o=e("h1",{id:"глоссарии-и-сокращения",tabindex:"-1"},[l("Глоссарий и сокращения "),e("a",{class:"header-anchor",href:"#глоссарии-и-сокращения","aria-label":'Permalink to "Глоссарий и сокращения"'},"​")],-1),n=e("ul",null,[e("li",null,"DX (developer experience) - опыт разработчика, удобство его работы над приложением. Сюда входит всё - качество кода, удобство работы с IDE, грамотная архитектура проекта, комментирование, качество документации, использование на проекте проверенных и лучших практик и т.п."),e("li",null,"UX (user experience) - опыт пользователя. Общее его впечатление от удобства работы с сайтом/приложением."),e("li",null,"UI (user interface) - дизайн вебсайта/приложения с точки зрения визуальной эстетики и стиля"),e("li",null,"SW (service worker) - сервис воркер (элемент PWA)"),e("li",null,"AT (access token) - токен при JWT аутентификации"),e("li",null,"RT (refresh token) - токен при JWT аутентификации")],-1),c=[o,n];function i(d,u,_,p,m,h){return a(),r("div",null,c)}const k=s(t,[["render",i]]);export{x as __pageData,k as default}; diff --git a/assets/ru_misc_introduction.md.B8HYWYzA.js b/assets/ru_misc_introduction.md.BOSSJFuN.js similarity index 97% rename from assets/ru_misc_introduction.md.B8HYWYzA.js rename to assets/ru_misc_introduction.md.BOSSJFuN.js index e95195b4f..61fe6d2a0 100644 --- a/assets/ru_misc_introduction.md.B8HYWYzA.js +++ b/assets/ru_misc_introduction.md.BOSSJFuN.js @@ -1 +1 @@ -import{_ as e,o as r,c as t,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Предисловие","description":"","frontmatter":{},"headers":[],"relativePath":"ru/misc/introduction.md","filePath":"ru/misc/introduction.md","lastUpdated":1726474804000}'),s={name:"ru/misc/introduction.md"},n=a('

Предисловие

Данный FAQ (Frequently Asked Questions - Часто задаваемые вопросы) создан по наиболее часто затрагиваемым темам в Reddit r/vuejs/ и Телеграм чате @vuejs_ru

Уровень вопросов и ответов охватывает как начинающих так и опытных фронтэнд разработчиков.

В качестве ответов используется как общепризнанная, проверенная и объективная информация, так и субъективное мнение составителя.

Повышение сложности не идет сверху вниз. И в первых вопросах-ответах описываются неочевидные моменты, могущие быть интересными для опытных программистов.

Основные источники информации - официальная документация Vue 3 и Vite, книга Vue.js 3 Design Patterns and Best Practices, r/vuejs/, @vuejs_ru

Актуальность информации - 2022-2023 года.

У нас есть Телеграм канал

В нем публикуются анонсы о новых материалах на данном ресурсе и другая интересная относящаяся к Vue.js информация: https://t.me/vuefaq

',9),o=[n];function i(_,u,c,l,d,p){return r(),t("div",null,o)}const m=e(s,[["render",i]]);export{f as __pageData,m as default}; +import{_ as e,o as r,c as t,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Предисловие","description":"","frontmatter":{},"headers":[],"relativePath":"ru/misc/introduction.md","filePath":"ru/misc/introduction.md","lastUpdated":1726505115000}'),s={name:"ru/misc/introduction.md"},n=a('

Предисловие

Данный FAQ (Frequently Asked Questions - Часто задаваемые вопросы) создан по наиболее часто затрагиваемым темам в Reddit r/vuejs/ и Телеграм чате @vuejs_ru

Уровень вопросов и ответов охватывает как начинающих так и опытных фронтэнд разработчиков.

В качестве ответов используется как общепризнанная, проверенная и объективная информация, так и субъективное мнение составителя.

Повышение сложности не идет сверху вниз. И в первых вопросах-ответах описываются неочевидные моменты, могущие быть интересными для опытных программистов.

Основные источники информации - официальная документация Vue 3 и Vite, книга Vue.js 3 Design Patterns and Best Practices, r/vuejs/, @vuejs_ru

Актуальность информации - 2022-2023 года.

У нас есть Телеграм канал

В нем публикуются анонсы о новых материалах на данном ресурсе и другая интересная относящаяся к Vue.js информация: https://t.me/vuefaq

',9),o=[n];function i(_,u,c,l,d,p){return r(),t("div",null,o)}const m=e(s,[["render",i]]);export{f as __pageData,m as default}; diff --git a/assets/ru_misc_introduction.md.B8HYWYzA.lean.js b/assets/ru_misc_introduction.md.BOSSJFuN.lean.js similarity index 85% rename from assets/ru_misc_introduction.md.B8HYWYzA.lean.js rename to assets/ru_misc_introduction.md.BOSSJFuN.lean.js index e0933fde3..7c242400a 100644 --- a/assets/ru_misc_introduction.md.B8HYWYzA.lean.js +++ b/assets/ru_misc_introduction.md.BOSSJFuN.lean.js @@ -1 +1 @@ -import{_ as e,o as r,c as t,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Предисловие","description":"","frontmatter":{},"headers":[],"relativePath":"ru/misc/introduction.md","filePath":"ru/misc/introduction.md","lastUpdated":1726474804000}'),s={name:"ru/misc/introduction.md"},n=a("",9),o=[n];function i(_,u,c,l,d,p){return r(),t("div",null,o)}const m=e(s,[["render",i]]);export{f as __pageData,m as default}; +import{_ as e,o as r,c as t,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Предисловие","description":"","frontmatter":{},"headers":[],"relativePath":"ru/misc/introduction.md","filePath":"ru/misc/introduction.md","lastUpdated":1726505115000}'),s={name:"ru/misc/introduction.md"},n=a("",9),o=[n];function i(_,u,c,l,d,p){return r(),t("div",null,o)}const m=e(s,[["render",i]]);export{f as __pageData,m as default}; diff --git a/assets/ru_release-timeline_config.md.8vd1K3QD.js b/assets/ru_release-timeline_config.md.BB-JdR6Z.js similarity index 99% rename from assets/ru_release-timeline_config.md.8vd1K3QD.js rename to assets/ru_release-timeline_config.md.BB-JdR6Z.js index 28d36e5e4..c09fe2980 100644 --- a/assets/ru_release-timeline_config.md.8vd1K3QD.js +++ b/assets/ru_release-timeline_config.md.BB-JdR6Z.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Конфигурация","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/config.md","filePath":"ru/release-timeline/config.md","lastUpdated":1726474804000}'),h={name:"ru/release-timeline/config.md"},l=n(`

Конфигурация

Обязательные опции: owner и repo

Опции

js
export const DefaultOptions = {
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Конфигурация","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/config.md","filePath":"ru/release-timeline/config.md","lastUpdated":1726505115000}'),h={name:"ru/release-timeline/config.md"},l=n(`

Конфигурация

Обязательные опции: owner и repo

Опции

js
export const DefaultOptions = {
   // Main page title
   title: "Releases",
   github: {
diff --git a/assets/ru_release-timeline_config.md.8vd1K3QD.lean.js b/assets/ru_release-timeline_config.md.BB-JdR6Z.lean.js
similarity index 91%
rename from assets/ru_release-timeline_config.md.8vd1K3QD.lean.js
rename to assets/ru_release-timeline_config.md.BB-JdR6Z.lean.js
index ccae79e27..3724538fe 100644
--- a/assets/ru_release-timeline_config.md.8vd1K3QD.lean.js
+++ b/assets/ru_release-timeline_config.md.BB-JdR6Z.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Конфигурация","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/config.md","filePath":"ru/release-timeline/config.md","lastUpdated":1726474804000}'),h={name:"ru/release-timeline/config.md"},l=n("",8),k=[l];function p(t,e,E,r,d,g){return i(),a("div",null,k)}const F=s(h,[["render",p]]);export{c as __pageData,F as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Конфигурация","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/config.md","filePath":"ru/release-timeline/config.md","lastUpdated":1726505115000}'),h={name:"ru/release-timeline/config.md"},l=n("",8),k=[l];function p(t,e,E,r,d,g){return i(),a("div",null,k)}const F=s(h,[["render",p]]);export{c as __pageData,F as default};
diff --git a/assets/ru_release-timeline_getting-data.md.gYOUO7rh.js b/assets/ru_release-timeline_getting-data.md.eaocVN8X.js
similarity index 96%
rename from assets/ru_release-timeline_getting-data.md.gYOUO7rh.js
rename to assets/ru_release-timeline_getting-data.md.eaocVN8X.js
index 75894d583..2f576bfb6 100644
--- a/assets/ru_release-timeline_getting-data.md.gYOUO7rh.js
+++ b/assets/ru_release-timeline_getting-data.md.eaocVN8X.js
@@ -1 +1 @@
-import{_ as e,o as t,c as a,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Данные релизов, коммитов и пул риквестов","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/getting-data.md","filePath":"ru/release-timeline/getting-data.md","lastUpdated":1726474804000}'),l={name:"ru/release-timeline/getting-data.md"},n=i('

Данные релизов, коммитов и пул риквестов

Получение данных

Есть три варианта получения данных с releases, pull requests и commits с GitHub-а

  1. Динамическое. Прямой запрос к GitHub REST API во время открытия страницы.
  2. Запрос к GitHub REST API через прокси
  3. Запрос к GitHub REST API во время билда проекта, оптимизация и сохранение данных локально на сайте.

На данный момент непосредственно реализованы первый и второй вариант, есть возможность указать url для запросов releases, pull requests и commits. По умолчанию используется первый.

Второй вариант нужен для уменьшения размера загружаемого файла., так как 95% данных в ответах GitHub - не используется в программе.

Формат данных при этом должен быть как у GitHub, но может содержать только нужные поля.

Третий вариант также может оптимизировать потоки данных, но делает снэпшот релизов и пул риквестов на определенный момент времени. При выходе нового релиза потребуется пересобрать документацию. В данном случае также нужно указать корректный url. Реализовывать логику третьего варианта (получение, фильтрация, сохранение даннах) необходимо пользователю пакета.

',8),s=[n];function o(r,m,c,p,d,u){return t(),a("div",null,s)}const h=e(l,[["render",o]]);export{g as __pageData,h as default}; +import{_ as e,o as t,c as a,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Данные релизов, коммитов и пул риквестов","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/getting-data.md","filePath":"ru/release-timeline/getting-data.md","lastUpdated":1726505115000}'),l={name:"ru/release-timeline/getting-data.md"},n=i('

Данные релизов, коммитов и пул риквестов

Получение данных

Есть три варианта получения данных с releases, pull requests и commits с GitHub-а

  1. Динамическое. Прямой запрос к GitHub REST API во время открытия страницы.
  2. Запрос к GitHub REST API через прокси
  3. Запрос к GitHub REST API во время билда проекта, оптимизация и сохранение данных локально на сайте.

На данный момент непосредственно реализованы первый и второй вариант, есть возможность указать url для запросов releases, pull requests и commits. По умолчанию используется первый.

Второй вариант нужен для уменьшения размера загружаемого файла., так как 95% данных в ответах GitHub - не используется в программе.

Формат данных при этом должен быть как у GitHub, но может содержать только нужные поля.

Третий вариант также может оптимизировать потоки данных, но делает снэпшот релизов и пул риквестов на определенный момент времени. При выходе нового релиза потребуется пересобрать документацию. В данном случае также нужно указать корректный url. Реализовывать логику третьего варианта (получение, фильтрация, сохранение даннах) необходимо пользователю пакета.

',8),s=[n];function o(r,m,c,p,d,u){return t(),a("div",null,s)}const h=e(l,[["render",o]]);export{g as __pageData,h as default}; diff --git a/assets/ru_release-timeline_getting-data.md.gYOUO7rh.lean.js b/assets/ru_release-timeline_getting-data.md.eaocVN8X.lean.js similarity index 84% rename from assets/ru_release-timeline_getting-data.md.gYOUO7rh.lean.js rename to assets/ru_release-timeline_getting-data.md.eaocVN8X.lean.js index 3bb15e762..e550eb866 100644 --- a/assets/ru_release-timeline_getting-data.md.gYOUO7rh.lean.js +++ b/assets/ru_release-timeline_getting-data.md.eaocVN8X.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as a,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Данные релизов, коммитов и пул риквестов","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/getting-data.md","filePath":"ru/release-timeline/getting-data.md","lastUpdated":1726474804000}'),l={name:"ru/release-timeline/getting-data.md"},n=i("",8),s=[n];function o(r,m,c,p,d,u){return t(),a("div",null,s)}const h=e(l,[["render",o]]);export{g as __pageData,h as default}; +import{_ as e,o as t,c as a,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Данные релизов, коммитов и пул риквестов","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/getting-data.md","filePath":"ru/release-timeline/getting-data.md","lastUpdated":1726505115000}'),l={name:"ru/release-timeline/getting-data.md"},n=i("",8),s=[n];function o(r,m,c,p,d,u){return t(),a("div",null,s)}const h=e(l,[["render",o]]);export{g as __pageData,h as default}; diff --git a/assets/ru_release-timeline_getting-started.md.Dx_UFTtF.js b/assets/ru_release-timeline_getting-started.md.--rBzjeP.js similarity index 95% rename from assets/ru_release-timeline_getting-started.md.Dx_UFTtF.js rename to assets/ru_release-timeline_getting-started.md.--rBzjeP.js index 9ea68cf45..d0b7ed610 100644 --- a/assets/ru_release-timeline_getting-started.md.Dx_UFTtF.js +++ b/assets/ru_release-timeline_getting-started.md.--rBzjeP.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Установка","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/getting-started.md","filePath":"ru/release-timeline/getting-started.md","lastUpdated":1726474804000}'),e={name:"ru/release-timeline/getting-started.md"},n=t(`

Установка

Установка пакета

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Использование в коде Vue проекта

Во Vue компоненте:

vue
<script setup>
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Установка","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/getting-started.md","filePath":"ru/release-timeline/getting-started.md","lastUpdated":1726505115000}'),e={name:"ru/release-timeline/getting-started.md"},n=t(`

Установка

Установка пакета

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Использование в коде Vue проекта

Во Vue компоненте:

vue
<script setup>
 import { ReleaseTimeline, DefaultOptions as options } from "release-timeline";
 import "release-timeline/dist/style.css";
 // import "release-timeline/dist/animated-background.css";
@@ -12,4 +12,4 @@ import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c
 <script src="https://unpkg.com/release-timeline@0.3.6/dist/index.umd.js"></script>
 <link href="https://unpkg.com/release-timeline@0.3.6/dist/animated-background.css" rel="stylesheet" />
 
-<release-timeline options=""></release-timeline>

Подробнее - о подключении как web component

`,12),l=[n];function p(h,k,r,d,o,E){return i(),a("div",null,l)}const u=s(e,[["render",p]]);export{c as __pageData,u as default}; +<release-timeline options=""></release-timeline>

Подробнее - о подключении как web component

`,12),l=[n];function h(p,k,r,d,o,E){return i(),a("div",null,l)}const u=s(e,[["render",h]]);export{c as __pageData,u as default}; diff --git a/assets/ru_release-timeline_getting-started.md.Dx_UFTtF.lean.js b/assets/ru_release-timeline_getting-started.md.--rBzjeP.lean.js similarity index 75% rename from assets/ru_release-timeline_getting-started.md.Dx_UFTtF.lean.js rename to assets/ru_release-timeline_getting-started.md.--rBzjeP.lean.js index 85e561d68..ed8995ace 100644 --- a/assets/ru_release-timeline_getting-started.md.Dx_UFTtF.lean.js +++ b/assets/ru_release-timeline_getting-started.md.--rBzjeP.lean.js @@ -1 +1 @@ -import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Установка","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/getting-started.md","filePath":"ru/release-timeline/getting-started.md","lastUpdated":1726474804000}'),e={name:"ru/release-timeline/getting-started.md"},n=t("",12),l=[n];function p(h,k,r,d,o,E){return i(),a("div",null,l)}const u=s(e,[["render",p]]);export{c as __pageData,u as default}; +import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Установка","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/getting-started.md","filePath":"ru/release-timeline/getting-started.md","lastUpdated":1726505115000}'),e={name:"ru/release-timeline/getting-started.md"},n=t("",12),l=[n];function h(p,k,r,d,o,E){return i(),a("div",null,l)}const u=s(e,[["render",h]]);export{c as __pageData,u as default}; diff --git a/assets/ru_release-timeline_index.md.BvkoC8iO.js b/assets/ru_release-timeline_index.md.B1ENFH7m.js similarity index 98% rename from assets/ru_release-timeline_index.md.BvkoC8iO.js rename to assets/ru_release-timeline_index.md.B1ENFH7m.js index 987cf333e..8aa7e04c5 100644 --- a/assets/ru_release-timeline_index.md.BvkoC8iO.js +++ b/assets/ru_release-timeline_index.md.B1ENFH7m.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const r="/assets/rt.Ctjj4VhI.jpg",b=JSON.parse('{"title":"Release Timeline","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/index.md","filePath":"ru/release-timeline/index.md","lastUpdated":1726474804000}'),n={name:"ru/release-timeline/index.md"},l=i('

Release Timeline

Визуализация релизов

Визуализация релизов любого GitHub репозитория по временной шкале, с информацией о коммитах и пул риквестах.

Встраивается в VitePress, может быть хорошей заменой changelog-а в технической документации проекта, автоматизируя фиксацию изменений и делая слежение за ними удобным для пользователей.

Также может быть подключено в любой HTML странице как Web component или микрофронтенд.

image

Библиотека написана с использованием Vue 3, не имеет зависимостей, занимает 15Кб в распакованном виде. Адаптирована для работы в VitePress (переключение светлой и темной тем). Может подключаться как web component в не Vue проектах.

Данные по релизам определенного репозитория берутся через GitHub REST API.

Public репозитории доступны сразу, для private репозиториев требуется использовать GitHub API токен.

Репозиторий

Demo

  • Demo (можно задать любой репозиторий через выбор в верхнем левом углу)

Credits

Parallax Star background in CSS

',15),o=[l];function s(c,m,d,p,h,u){return a(),t("div",null,o)}const g=e(n,[["render",s]]);export{b as __pageData,g as default}; +import{_ as e,o as a,c as t,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const r="/assets/rt.Ctjj4VhI.jpg",b=JSON.parse('{"title":"Release Timeline","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/index.md","filePath":"ru/release-timeline/index.md","lastUpdated":1726505115000}'),n={name:"ru/release-timeline/index.md"},l=i('

Release Timeline

Визуализация релизов

Визуализация релизов любого GitHub репозитория по временной шкале, с информацией о коммитах и пул риквестах.

Встраивается в VitePress, может быть хорошей заменой changelog-а в технической документации проекта, автоматизируя фиксацию изменений и делая слежение за ними удобным для пользователей.

Также может быть подключено в любой HTML странице как Web component или микрофронтенд.

image

Библиотека написана с использованием Vue 3, не имеет зависимостей, занимает 15Кб в распакованном виде. Адаптирована для работы в VitePress (переключение светлой и темной тем). Может подключаться как web component в не Vue проектах.

Данные по релизам определенного репозитория берутся через GitHub REST API.

Public репозитории доступны сразу, для private репозиториев требуется использовать GitHub API токен.

Репозиторий

Demo

  • Demo (можно задать любой репозиторий через выбор в верхнем левом углу)

Credits

Parallax Star background in CSS

',15),o=[l];function s(c,m,d,p,h,u){return a(),t("div",null,o)}const g=e(n,[["render",s]]);export{b as __pageData,g as default}; diff --git a/assets/ru_release-timeline_index.md.BvkoC8iO.lean.js b/assets/ru_release-timeline_index.md.B1ENFH7m.lean.js similarity index 91% rename from assets/ru_release-timeline_index.md.BvkoC8iO.lean.js rename to assets/ru_release-timeline_index.md.B1ENFH7m.lean.js index a84ba1076..982370551 100644 --- a/assets/ru_release-timeline_index.md.BvkoC8iO.lean.js +++ b/assets/ru_release-timeline_index.md.B1ENFH7m.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const r="/assets/rt.Ctjj4VhI.jpg",b=JSON.parse('{"title":"Release Timeline","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/index.md","filePath":"ru/release-timeline/index.md","lastUpdated":1726474804000}'),n={name:"ru/release-timeline/index.md"},l=i("",15),o=[l];function s(c,m,d,p,h,u){return a(),t("div",null,o)}const g=e(n,[["render",s]]);export{b as __pageData,g as default}; +import{_ as e,o as a,c as t,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const r="/assets/rt.Ctjj4VhI.jpg",b=JSON.parse('{"title":"Release Timeline","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/index.md","filePath":"ru/release-timeline/index.md","lastUpdated":1726505115000}'),n={name:"ru/release-timeline/index.md"},l=i("",15),o=[l];function s(c,m,d,p,h,u){return a(),t("div",null,o)}const g=e(n,[["render",s]]);export{b as __pageData,g as default}; diff --git a/assets/ru_release-timeline_microfrontend.md.CcjYYPZL.js b/assets/ru_release-timeline_microfrontend.md.CVrYTvEL.js similarity index 99% rename from assets/ru_release-timeline_microfrontend.md.CcjYYPZL.js rename to assets/ru_release-timeline_microfrontend.md.CVrYTvEL.js index d9763434b..67bd9e52d 100644 --- a/assets/ru_release-timeline_microfrontend.md.CcjYYPZL.js +++ b/assets/ru_release-timeline_microfrontend.md.CVrYTvEL.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Микрофронтенд","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/microfrontend.md","filePath":"ru/release-timeline/microfrontend.md","lastUpdated":1726474804000}'),n={name:"ru/release-timeline/microfrontend.md"},e=t(`

Микрофронтенд

Подключение

С помощью esm.sh можно подключить release-timeline как ES module

В HTML странице:

html
<head>
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Микрофронтенд","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/microfrontend.md","filePath":"ru/release-timeline/microfrontend.md","lastUpdated":1726505115000}'),n={name:"ru/release-timeline/microfrontend.md"},e=t(`

Микрофронтенд

Подключение

С помощью esm.sh можно подключить release-timeline как ES module

В HTML странице:

html
<head>
   <link rel="stylesheet" crossorigin href="https://unpkg.com/release-timeline/dist/style.css">
   <link rel="stylesheet" crossorigin href="https://unpkg.com/release-timeline/dist/animated-background.css">
   <script type="module">
diff --git a/assets/ru_release-timeline_microfrontend.md.CcjYYPZL.lean.js b/assets/ru_release-timeline_microfrontend.md.CVrYTvEL.lean.js
similarity index 91%
rename from assets/ru_release-timeline_microfrontend.md.CcjYYPZL.lean.js
rename to assets/ru_release-timeline_microfrontend.md.CVrYTvEL.lean.js
index 005fa0887..c57b1afb5 100644
--- a/assets/ru_release-timeline_microfrontend.md.CcjYYPZL.lean.js
+++ b/assets/ru_release-timeline_microfrontend.md.CVrYTvEL.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Микрофронтенд","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/microfrontend.md","filePath":"ru/release-timeline/microfrontend.md","lastUpdated":1726474804000}'),n={name:"ru/release-timeline/microfrontend.md"},e=t("",7),l=[e];function h(k,p,E,r,d,o){return i(),a("div",null,l)}const c=s(n,[["render",h]]);export{y as __pageData,c as default};
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Микрофронтенд","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/microfrontend.md","filePath":"ru/release-timeline/microfrontend.md","lastUpdated":1726505115000}'),n={name:"ru/release-timeline/microfrontend.md"},e=t("",7),l=[e];function h(k,p,E,r,d,o){return i(),a("div",null,l)}const c=s(n,[["render",h]]);export{y as __pageData,c as default};
diff --git a/assets/ru_release-timeline_release-history.md.DjKgrdam.js b/assets/ru_release-timeline_release-history.md.DuYpLFA4.js
similarity index 85%
rename from assets/ru_release-timeline_release-history.md.DjKgrdam.js
rename to assets/ru_release-timeline_release-history.md.DuYpLFA4.js
index dffc50a06..5025f0b95 100644
--- a/assets/ru_release-timeline_release-history.md.DjKgrdam.js
+++ b/assets/ru_release-timeline_release-history.md.DuYpLFA4.js
@@ -1 +1 @@
-import{j as e,H as a}from"./chunks/animated-background.Dg_OWvFO.js";import{o as i,c as n,I as s,m as t}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/release-history.md","filePath":"ru/release-timeline/release-history.md","lastUpdated":1726474804000}'),r={name:"ru/release-timeline/release-history.md"},g=Object.assign(r,{setup(o){return e.github.owner="vuesence",e.github.repo="release-timeline",(l,m)=>(i(),n("div",null,[s(t(a),{options:t(e)},null,8,["options"])]))}});export{u as __pageData,g as default};
+import{j as e,H as a}from"./chunks/animated-background.Dg_OWvFO.js";import{o as i,c as n,I as s,m as t}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/release-history.md","filePath":"ru/release-timeline/release-history.md","lastUpdated":1726505115000}'),r={name:"ru/release-timeline/release-history.md"},g=Object.assign(r,{setup(o){return e.github.owner="vuesence",e.github.repo="release-timeline",(l,m)=>(i(),n("div",null,[s(t(a),{options:t(e)},null,8,["options"])]))}});export{u as __pageData,g as default};
diff --git a/assets/ru_release-timeline_release-history.md.DjKgrdam.lean.js b/assets/ru_release-timeline_release-history.md.DuYpLFA4.lean.js
similarity index 85%
rename from assets/ru_release-timeline_release-history.md.DjKgrdam.lean.js
rename to assets/ru_release-timeline_release-history.md.DuYpLFA4.lean.js
index dffc50a06..5025f0b95 100644
--- a/assets/ru_release-timeline_release-history.md.DjKgrdam.lean.js
+++ b/assets/ru_release-timeline_release-history.md.DuYpLFA4.lean.js
@@ -1 +1 @@
-import{j as e,H as a}from"./chunks/animated-background.Dg_OWvFO.js";import{o as i,c as n,I as s,m as t}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/release-history.md","filePath":"ru/release-timeline/release-history.md","lastUpdated":1726474804000}'),r={name:"ru/release-timeline/release-history.md"},g=Object.assign(r,{setup(o){return e.github.owner="vuesence",e.github.repo="release-timeline",(l,m)=>(i(),n("div",null,[s(t(a),{options:t(e)},null,8,["options"])]))}});export{u as __pageData,g as default};
+import{j as e,H as a}from"./chunks/animated-background.Dg_OWvFO.js";import{o as i,c as n,I as s,m as t}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/release-history.md","filePath":"ru/release-timeline/release-history.md","lastUpdated":1726505115000}'),r={name:"ru/release-timeline/release-history.md"},g=Object.assign(r,{setup(o){return e.github.owner="vuesence",e.github.repo="release-timeline",(l,m)=>(i(),n("div",null,[s(t(a),{options:t(e)},null,8,["options"])]))}});export{u as __pageData,g as default};
diff --git a/assets/ru_release-timeline_vitepress.md.DVpxOLIE.js b/assets/ru_release-timeline_vitepress.md.BPo82hG9.js
similarity index 96%
rename from assets/ru_release-timeline_vitepress.md.DVpxOLIE.js
rename to assets/ru_release-timeline_vitepress.md.BPo82hG9.js
index bf0ed2d97..f1f096104 100644
--- a/assets/ru_release-timeline_vitepress.md.DVpxOLIE.js
+++ b/assets/ru_release-timeline_vitepress.md.BPo82hG9.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"VitePress","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/vitepress.md","filePath":"ru/release-timeline/vitepress.md","lastUpdated":1726474804000}'),e={name:"ru/release-timeline/vitepress.md"},n=t(`

VitePress

release-timeline полностью поддерживает VitePress, включая смену светлой и темной тем и адаптацию к его стилям.

Установка пакета

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Подключение

Подключение в любом markdown файле:

vue
<script setup>
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"VitePress","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/vitepress.md","filePath":"ru/release-timeline/vitepress.md","lastUpdated":1726505115000}'),e={name:"ru/release-timeline/vitepress.md"},n=t(`

VitePress

release-timeline полностью поддерживает VitePress, включая смену светлой и темной тем и адаптацию к его стилям.

Установка пакета

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Подключение

Подключение в любом markdown файле:

vue
<script setup>
 import { ReleaseTimeline, DefaultOptions as options } from "release-timeline";
 import "release-timeline/dist/style.css";
 import "release-timeline/dist/vitepress.css";
diff --git a/assets/ru_release-timeline_vitepress.md.DVpxOLIE.lean.js b/assets/ru_release-timeline_vitepress.md.BPo82hG9.lean.js
similarity index 91%
rename from assets/ru_release-timeline_vitepress.md.DVpxOLIE.lean.js
rename to assets/ru_release-timeline_vitepress.md.BPo82hG9.lean.js
index 88a20b112..8752bc96a 100644
--- a/assets/ru_release-timeline_vitepress.md.DVpxOLIE.lean.js
+++ b/assets/ru_release-timeline_vitepress.md.BPo82hG9.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"VitePress","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/vitepress.md","filePath":"ru/release-timeline/vitepress.md","lastUpdated":1726474804000}'),e={name:"ru/release-timeline/vitepress.md"},n=t("",10),l=[n];function h(p,k,r,E,d,g){return i(),a("div",null,l)}const y=s(e,[["render",h]]);export{c as __pageData,y as default};
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"VitePress","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/vitepress.md","filePath":"ru/release-timeline/vitepress.md","lastUpdated":1726505115000}'),e={name:"ru/release-timeline/vitepress.md"},n=t("",10),l=[n];function h(p,k,r,E,d,g){return i(),a("div",null,l)}const y=s(e,[["render",h]]);export{c as __pageData,y as default};
diff --git a/assets/ru_release-timeline_vue-3.md.B9kD3Pq7.js b/assets/ru_release-timeline_vue-3.md.K2Zkm8gY.js
similarity index 93%
rename from assets/ru_release-timeline_vue-3.md.B9kD3Pq7.js
rename to assets/ru_release-timeline_vue-3.md.K2Zkm8gY.js
index 65bdb162e..2fa98f2ff 100644
--- a/assets/ru_release-timeline_vue-3.md.B9kD3Pq7.js
+++ b/assets/ru_release-timeline_vue-3.md.K2Zkm8gY.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const E=JSON.parse('{"title":"Vue 3 проект","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/vue-3.md","filePath":"ru/release-timeline/vue-3.md","lastUpdated":1726474804000}'),t={name:"ru/release-timeline/vue-3.md"},n=e(`

Vue 3 проект

Установка пакета

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Использование во Vue компоненте

vue
<script setup>
+import{_ as s,o as i,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const E=JSON.parse('{"title":"Vue 3 проект","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/vue-3.md","filePath":"ru/release-timeline/vue-3.md","lastUpdated":1726505115000}'),t={name:"ru/release-timeline/vue-3.md"},n=e(`

Vue 3 проект

Установка пакета

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Использование во Vue компоненте

vue
<script setup>
 import { ReleaseTimeline, DefaultOptions as options } from "release-timeline";
 import "release-timeline/dist/style.css";
 // import "release-timeline/dist/animated-background.css";
@@ -8,4 +8,4 @@ import{_ as s,o as i,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const E
 options.github.repo = "release-timeline";
 </script>
 
-<ReleaseTimeline :options="options" />

Подключение animated-background.css опционально. CSS со звездным небом занимает 70Kb, в gzip формате - 6.1Кб.

`,6),l=[n];function p(h,k,d,r,o,g){return i(),a("div",null,l)}const u=s(t,[["render",p]]);export{E as __pageData,u as default}; +<ReleaseTimeline :options="options" />

Подключение animated-background.css опционально. CSS со звездным небом занимает 70Kb, в gzip формате - 6.1Кб.

`,6),l=[n];function p(h,k,d,r,o,c){return i(),a("div",null,l)}const u=s(t,[["render",p]]);export{E as __pageData,u as default}; diff --git a/assets/ru_release-timeline_vue-3.md.B9kD3Pq7.lean.js b/assets/ru_release-timeline_vue-3.md.K2Zkm8gY.lean.js similarity index 83% rename from assets/ru_release-timeline_vue-3.md.B9kD3Pq7.lean.js rename to assets/ru_release-timeline_vue-3.md.K2Zkm8gY.lean.js index d7dc1c03f..3798e3f7c 100644 --- a/assets/ru_release-timeline_vue-3.md.B9kD3Pq7.lean.js +++ b/assets/ru_release-timeline_vue-3.md.K2Zkm8gY.lean.js @@ -1 +1 @@ -import{_ as s,o as i,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const E=JSON.parse('{"title":"Vue 3 проект","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/vue-3.md","filePath":"ru/release-timeline/vue-3.md","lastUpdated":1726474804000}'),t={name:"ru/release-timeline/vue-3.md"},n=e("",6),l=[n];function p(h,k,d,r,o,g){return i(),a("div",null,l)}const u=s(t,[["render",p]]);export{E as __pageData,u as default}; +import{_ as s,o as i,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const E=JSON.parse('{"title":"Vue 3 проект","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/vue-3.md","filePath":"ru/release-timeline/vue-3.md","lastUpdated":1726505115000}'),t={name:"ru/release-timeline/vue-3.md"},n=e("",6),l=[n];function p(h,k,d,r,o,c){return i(),a("div",null,l)}const u=s(t,[["render",p]]);export{E as __pageData,u as default}; diff --git a/assets/ru_release-timeline_web-component.md.C9cAMGRS.js b/assets/ru_release-timeline_web-component.md.C-CDodVg.js similarity index 99% rename from assets/ru_release-timeline_web-component.md.C9cAMGRS.js rename to assets/ru_release-timeline_web-component.md.C-CDodVg.js index 7d2e48a1d..d6e15505b 100644 --- a/assets/ru_release-timeline_web-component.md.C9cAMGRS.js +++ b/assets/ru_release-timeline_web-component.md.C-CDodVg.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Web component","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/web-component.md","filePath":"ru/release-timeline/web-component.md","lastUpdated":1726474804000}'),h={name:"ru/release-timeline/web-component.md"},t=n(`

Web component

Подключение

В HTML странице:

html
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Web component","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/web-component.md","filePath":"ru/release-timeline/web-component.md","lastUpdated":1726505115000}'),h={name:"ru/release-timeline/web-component.md"},t=n(`

Web component

Подключение

В HTML странице:

html
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
 <script src="https://unpkg.com/release-timeline/dist/index.umd.js"></script>
 <link href="https://unpkg.com/release-timeline/dist/animated-background.css" rel="stylesheet" />
 
diff --git a/assets/ru_release-timeline_web-component.md.C9cAMGRS.lean.js b/assets/ru_release-timeline_web-component.md.C-CDodVg.lean.js
similarity index 91%
rename from assets/ru_release-timeline_web-component.md.C9cAMGRS.lean.js
rename to assets/ru_release-timeline_web-component.md.C-CDodVg.lean.js
index d28d9345b..d9879a531 100644
--- a/assets/ru_release-timeline_web-component.md.C9cAMGRS.lean.js
+++ b/assets/ru_release-timeline_web-component.md.C-CDodVg.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Web component","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/web-component.md","filePath":"ru/release-timeline/web-component.md","lastUpdated":1726474804000}'),h={name:"ru/release-timeline/web-component.md"},t=n("",11),k=[t];function l(p,e,E,r,d,g){return i(),a("div",null,k)}const o=s(h,[["render",l]]);export{F as __pageData,o as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Web component","description":"","frontmatter":{"pageClass":"release-timeline","head":[["meta",{"name":"og:site_name","content":"Release timeline - visual component displaying GitHub release timeline"}],["meta",{"name":"og:image","content":"/images/vue-faq-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-faq-logo.png"}]]},"headers":[],"relativePath":"ru/release-timeline/web-component.md","filePath":"ru/release-timeline/web-component.md","lastUpdated":1726505115000}'),h={name:"ru/release-timeline/web-component.md"},t=n("",11),k=[t];function l(p,e,E,r,d,g){return i(),a("div",null,k)}const o=s(h,[["render",l]]);export{F as __pageData,o as default};
diff --git a/assets/ru_vue-webapp_contribution.md.CrRXGz2e.js b/assets/ru_vue-webapp_contribution.md.aOxnqrxc.js
similarity index 95%
rename from assets/ru_vue-webapp_contribution.md.CrRXGz2e.js
rename to assets/ru_vue-webapp_contribution.md.aOxnqrxc.js
index f3a0c1df1..482206ef1 100644
--- a/assets/ru_vue-webapp_contribution.md.CrRXGz2e.js
+++ b/assets/ru_vue-webapp_contribution.md.aOxnqrxc.js
@@ -1 +1 @@
-import{_ as a,o as n,c as o,l as e,a as t}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Участие в проекте","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/contribution.md","filePath":"ru/vue-webapp/contribution.md","lastUpdated":1726474804000}'),r={name:"ru/vue-webapp/contribution.md"},p=e("h1",{id:"участие-в-проекте",tabindex:"-1"},[t("Участие в проекте "),e("a",{class:"header-anchor",href:"#участие-в-проекте","aria-label":'Permalink to "Участие в проекте"'},"​")],-1),s=e("p",null,[e("a",{href:"https://github.com/vuesence/create-vue-webapp",target:"_blank",rel:"noreferrer"},"create-vue-webapp"),t(" и "),e("a",{href:"https://github.com/vuesence/vue-webapp",target:"_blank",rel:"noreferrer"},"vue-webapp"),t(" являются open source проектами под лицензией MIT.")],-1),c=e("p",null,"Приглашаем к участию всех желающих.",-1),i=[p,s,c];function u(l,d,m,_,b,h){return n(),o("div",null,i)}const v=a(r,[["render",u]]);export{f as __pageData,v as default};
+import{_ as a,o as n,c as o,l as e,a as t}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Участие в проекте","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/contribution.md","filePath":"ru/vue-webapp/contribution.md","lastUpdated":1726505115000}'),r={name:"ru/vue-webapp/contribution.md"},p=e("h1",{id:"участие-в-проекте",tabindex:"-1"},[t("Участие в проекте "),e("a",{class:"header-anchor",href:"#участие-в-проекте","aria-label":'Permalink to "Участие в проекте"'},"​")],-1),s=e("p",null,[e("a",{href:"https://github.com/vuesence/create-vue-webapp",target:"_blank",rel:"noreferrer"},"create-vue-webapp"),t(" и "),e("a",{href:"https://github.com/vuesence/vue-webapp",target:"_blank",rel:"noreferrer"},"vue-webapp"),t(" являются open source проектами под лицензией MIT.")],-1),c=e("p",null,"Приглашаем к участию всех желающих.",-1),i=[p,s,c];function u(l,d,m,_,b,h){return n(),o("div",null,i)}const v=a(r,[["render",u]]);export{f as __pageData,v as default};
diff --git a/assets/ru_vue-webapp_contribution.md.CrRXGz2e.lean.js b/assets/ru_vue-webapp_contribution.md.aOxnqrxc.lean.js
similarity index 95%
rename from assets/ru_vue-webapp_contribution.md.CrRXGz2e.lean.js
rename to assets/ru_vue-webapp_contribution.md.aOxnqrxc.lean.js
index f3a0c1df1..482206ef1 100644
--- a/assets/ru_vue-webapp_contribution.md.CrRXGz2e.lean.js
+++ b/assets/ru_vue-webapp_contribution.md.aOxnqrxc.lean.js
@@ -1 +1 @@
-import{_ as a,o as n,c as o,l as e,a as t}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Участие в проекте","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/contribution.md","filePath":"ru/vue-webapp/contribution.md","lastUpdated":1726474804000}'),r={name:"ru/vue-webapp/contribution.md"},p=e("h1",{id:"участие-в-проекте",tabindex:"-1"},[t("Участие в проекте "),e("a",{class:"header-anchor",href:"#участие-в-проекте","aria-label":'Permalink to "Участие в проекте"'},"​")],-1),s=e("p",null,[e("a",{href:"https://github.com/vuesence/create-vue-webapp",target:"_blank",rel:"noreferrer"},"create-vue-webapp"),t(" и "),e("a",{href:"https://github.com/vuesence/vue-webapp",target:"_blank",rel:"noreferrer"},"vue-webapp"),t(" являются open source проектами под лицензией MIT.")],-1),c=e("p",null,"Приглашаем к участию всех желающих.",-1),i=[p,s,c];function u(l,d,m,_,b,h){return n(),o("div",null,i)}const v=a(r,[["render",u]]);export{f as __pageData,v as default};
+import{_ as a,o as n,c as o,l as e,a as t}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Участие в проекте","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/contribution.md","filePath":"ru/vue-webapp/contribution.md","lastUpdated":1726505115000}'),r={name:"ru/vue-webapp/contribution.md"},p=e("h1",{id:"участие-в-проекте",tabindex:"-1"},[t("Участие в проекте "),e("a",{class:"header-anchor",href:"#участие-в-проекте","aria-label":'Permalink to "Участие в проекте"'},"​")],-1),s=e("p",null,[e("a",{href:"https://github.com/vuesence/create-vue-webapp",target:"_blank",rel:"noreferrer"},"create-vue-webapp"),t(" и "),e("a",{href:"https://github.com/vuesence/vue-webapp",target:"_blank",rel:"noreferrer"},"vue-webapp"),t(" являются open source проектами под лицензией MIT.")],-1),c=e("p",null,"Приглашаем к участию всех желающих.",-1),i=[p,s,c];function u(l,d,m,_,b,h){return n(),o("div",null,i)}const v=a(r,[["render",u]]);export{f as __pageData,v as default};
diff --git a/assets/ru_vue-webapp_getting-started.md.Bk61rGZC.js b/assets/ru_vue-webapp_getting-started.md.Bk61rGZC.js
new file mode 100644
index 000000000..ab194d008
--- /dev/null
+++ b/assets/ru_vue-webapp_getting-started.md.Bk61rGZC.js
@@ -0,0 +1,39 @@
+import{_ as a,o as s,c as i,a4 as t,ad as d}from"./chunks/framework.B8KxSsRZ.js";const E=JSON.parse('{"title":"Установка","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/getting-started.md","filePath":"ru/vue-webapp/getting-started.md","lastUpdated":1726505115000}'),n={name:"ru/vue-webapp/getting-started.md"},h=t(`

Установка

Установка через create vue-webapp

При данном способе можно выбрать, какие опции будут установлены:

sh
$ pnpm create vue-webapp
+
+ Project name: ... my-vue-project
+ Add a Splash screen? ... no / yes
+ Make it PWA (adds service worker and manifest)? ... no / yes
+ Add Open Graph meta tags? ... no / yes
+ Add Google Analytics code? ... no / yes
+ Add Github Action Workflow for publishing it on GitHub Pages? ... no / yes
+ Select application layout » MainLayout
+ Select navigation drawer » SimpleDrawer
+ Select webapp navbar » MantineSimpleNavbar
+ Select webapp header » MantineSimpleHeader
+ Select webapp footer » MantineRichFooter
+ Add API layer (REST)? ... no / yes
+ Add JSON-RPC adapter? ... no / yes
+
+Scaffolding project in /home/ubuntu/my-vue-project...
"Молчаливая" установка

Возможно установка без ручного ввода параметров с указанием конфигурационного файла с опциями:

bash
pnpm create vue-webapp -c config.json
+// or
+pnpm create vue-webapp --config config.json

Формат файла config.json:

json
{
+  "projectName": "my-vue-project",
+  "splashScreen": false,
+  "pwa": true,
+  "openGraph": false,
+  "googleAnalytics": false,
+  "githubActionsGithubPagesWorkflow": true,
+  "layout": "MainLayout",
+  "navigationDrawer": "SimpleDrawer",
+  "navbar": "MantineSimpleNavbar",
+  "header": "MantineSimpleHeader",
+  "footer": "MantineRichFooter",
+  "api": true,
+  "jsonRpc": false,
+  "overwrite": true
+}

Параметр overwrite означает перезаписывание содержимого уже существующей директории. Может принимать значения "yes", "no" и "ignore".

Также, команда

bash
$ pnpm create vue-webapp .

создаст проект в текущей директории.

Данный метод создаст проект только с выбранными компонентами и функционалом.

Инициализация и запуск веб приложения

sh
$ cd my-vue-project
+$ pnpm i
+$ pnpm dev

Результат в браузере:

image

Установка из репозитория

При данном способе будет установлено всё, однако непосредственно в проекте будет подключена не вся функциональность. Удобно для ознакомления и тестирования всех доступных компонент и функционала.

sh
$ git clone https://github.com/vuesence/vue-webapp.git
+$ cd vue-webapp
+$ pnpm i
+$ pnpm dev
`,13),p=[h];function k(l,e,F,v,f,r){return s(),i("div",null,p)}const y=a(n,[["render",k],["__scopeId","data-v-df523679"]]);export{E as __pageData,y as default}; diff --git a/assets/ru_vue-webapp_getting-started.md._RO400E3.lean.js b/assets/ru_vue-webapp_getting-started.md.Bk61rGZC.lean.js similarity index 56% rename from assets/ru_vue-webapp_getting-started.md._RO400E3.lean.js rename to assets/ru_vue-webapp_getting-started.md.Bk61rGZC.lean.js index 37b526309..d72f10428 100644 --- a/assets/ru_vue-webapp_getting-started.md._RO400E3.lean.js +++ b/assets/ru_vue-webapp_getting-started.md.Bk61rGZC.lean.js @@ -1 +1 @@ -import{_ as a,o as s,c as i,a4 as t,ad as c}from"./chunks/framework.B8KxSsRZ.js";const E=JSON.parse('{"title":"Установка","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/getting-started.md","filePath":"ru/vue-webapp/getting-started.md","lastUpdated":1726474804000}'),n={name:"ru/vue-webapp/getting-started.md"},h=t("",13),p=[h];function k(d,l,e,F,v,r){return s(),i("div",null,p)}const y=a(n,[["render",k],["__scopeId","data-v-58c0a4ac"]]);export{E as __pageData,y as default}; +import{_ as a,o as s,c as i,a4 as t,ad as d}from"./chunks/framework.B8KxSsRZ.js";const E=JSON.parse('{"title":"Установка","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/getting-started.md","filePath":"ru/vue-webapp/getting-started.md","lastUpdated":1726505115000}'),n={name:"ru/vue-webapp/getting-started.md"},h=t("",13),p=[h];function k(l,e,F,v,f,r){return s(),i("div",null,p)}const y=a(n,[["render",k],["__scopeId","data-v-df523679"]]);export{E as __pageData,y as default}; diff --git a/assets/ru_vue-webapp_getting-started.md._RO400E3.js b/assets/ru_vue-webapp_getting-started.md._RO400E3.js deleted file mode 100644 index 1adb0d357..000000000 --- a/assets/ru_vue-webapp_getting-started.md._RO400E3.js +++ /dev/null @@ -1,39 +0,0 @@ -import{_ as a,o as s,c as i,a4 as t,ad as c}from"./chunks/framework.B8KxSsRZ.js";const E=JSON.parse('{"title":"Установка","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/getting-started.md","filePath":"ru/vue-webapp/getting-started.md","lastUpdated":1726474804000}'),n={name:"ru/vue-webapp/getting-started.md"},h=t(`

Установка

Установка через create vue-webapp

При данном способе можно выбрать, какие опции будут установлены:

sh
$ pnpm create vue-webapp
-
- Project name: ... my-vue-project
- Add a Splash screen? ... no / yes
- Make it PWA (adds service worker and manifest)? ... no / yes
- Add Open Graph meta tags? ... no / yes
- Add Google Analytics code? ... no / yes
- Add Github Action Workflow for publishing it on GitHub Pages? ... no / yes
- Select application layout » MainLayout
- Select navigation drawer » SimpleDrawer
- Select webapp navbar » MantineSimpleNavbar
- Select webapp header » MantineSimpleHeader
- Select webapp footer » MantineRichFooter
- Add API layer (REST)? ... no / yes
- Add JSON-RPC adapter? ... no / yes
-
-Scaffolding project in /home/ubuntu/my-vue-project...
"Молчаливая" установка

Возможно установка без ручного ввода параметров с указанием конфигурационного файла с опциями:

bash
pnpm create vue-webapp -c config.json
-// or
-pnpm create vue-webapp --config config.json

Формат файла config.json:

json
{
-  "projectName": "my-vue-project",
-  "splashScreen": false,
-  "pwa": true,
-  "openGraph": false,
-  "googleAnalytics": false,
-  "githubActionsGithubPagesWorkflow": true,
-  "layout": "MainLayout",
-  "navigationDrawer": "SimpleDrawer",
-  "navbar": "MantineSimpleNavbar",
-  "header": "MantineSimpleHeader",
-  "footer": "MantineRichFooter",
-  "api": true,
-  "jsonRpc": false,
-  "overwrite": true
-}

Параметр overwrite означает перезаписывание содержимого уже существующей директории. Может принимать значения "yes", "no" и "ignore".

Также, команда

bash
$ pnpm create vue-webapp .

создаст проект в текущей директории.

Данный метод создаст проект только с выбранными компонентами и функционалом.

Инициализация и запуск веб приложения

sh
$ cd my-vue-project
-$ pnpm i
-$ pnpm dev

Результат в браузере:

image

Установка из репозитория

При данном способе будет установлено всё, однако непосредственно в проекте будет подключена не вся функциональность. Удобно для ознакомления и тестирования всех доступных компонент и функционала.

sh
$ git clone https://github.com/vuesence/vue-webapp.git
-$ cd vue-webapp
-$ pnpm i
-$ pnpm dev
`,13),p=[h];function k(d,l,e,F,v,r){return s(),i("div",null,p)}const y=a(n,[["render",k],["__scopeId","data-v-58c0a4ac"]]);export{E as __pageData,y as default}; diff --git a/assets/ru_vue-webapp_guidelines.md.OiEpS5Up.js b/assets/ru_vue-webapp_guidelines.md.CX74jjas.js similarity index 98% rename from assets/ru_vue-webapp_guidelines.md.OiEpS5Up.js rename to assets/ru_vue-webapp_guidelines.md.CX74jjas.js index 5b7c1695f..913a896a9 100644 --- a/assets/ru_vue-webapp_guidelines.md.OiEpS5Up.js +++ b/assets/ru_vue-webapp_guidelines.md.CX74jjas.js @@ -1 +1 @@ -import{_ as e,o as t,c as i,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Принципы","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/guidelines.md","filePath":"ru/vue-webapp/guidelines.md","lastUpdated":1726474804000}'),l={name:"ru/vue-webapp/guidelines.md"},o=a('

Принципы

  • Лёгкое эффективное вебприложение с высоким современным UI/UX
  • Vue 3, Composition API, script setup синтаксис
  • Не использовать сторонние библиотеки без необходимости. Единственная обязательная зависимость - vue-router
  • Использование чистого и эффективного HTML5 и CSS3 для верстки
  • Подключение требуемого функционала только по необходимости
  • Высокая кастомизация

  • Подключение определенной функциональности, например i18n, означает не просто добавление этой библиотеки в package.json, а полноценную минимальную работающую интеграцию - создание соответствующей composable функции, нескольких локалей, и применение t() в шаблоне для иллюстрации с необходимыми комментариями в коде для облегчения последующего использования и кастомизации.

  • Подключение определенной функциональности, использующей стороннюю библиотеку (например, тостер или модальное окно), делается через обёртку, чтобы потом разработчику при желании было легко поменять конкретный пакет, реализующий данный функционал.

  • Для веб приложения используется TypeScript, однако продолжать писать приложение можно на чистом JavaScript.

  • В качестве сборщика используется Vite.

  • В качестве CSS препроцессора используется SCSS.

  • Для линтинга и форматирования в ESlint используется eslint-config Antony Fu.

  • На "выходе" получается готовое Vue 3 приложение без зависимостей от каких-либо фреймворков/библиотек/пакетов, если только пользователь явно не включил их в каркас.

',4),n=[o];function p(r,s,c,u,_,d){return t(),i("div",null,n)}const h=e(l,[["render",p]]);export{g as __pageData,h as default}; +import{_ as e,o as t,c as i,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Принципы","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/guidelines.md","filePath":"ru/vue-webapp/guidelines.md","lastUpdated":1726505115000}'),l={name:"ru/vue-webapp/guidelines.md"},o=a('

Принципы

  • Лёгкое эффективное вебприложение с высоким современным UI/UX
  • Vue 3, Composition API, script setup синтаксис
  • Не использовать сторонние библиотеки без необходимости. Единственная обязательная зависимость - vue-router
  • Использование чистого и эффективного HTML5 и CSS3 для верстки
  • Подключение требуемого функционала только по необходимости
  • Высокая кастомизация

  • Подключение определенной функциональности, например i18n, означает не просто добавление этой библиотеки в package.json, а полноценную минимальную работающую интеграцию - создание соответствующей composable функции, нескольких локалей, и применение t() в шаблоне для иллюстрации с необходимыми комментариями в коде для облегчения последующего использования и кастомизации.

  • Подключение определенной функциональности, использующей стороннюю библиотеку (например, тостер или модальное окно), делается через обёртку, чтобы потом разработчику при желании было легко поменять конкретный пакет, реализующий данный функционал.

  • Для веб приложения используется TypeScript, однако продолжать писать приложение можно на чистом JavaScript.

  • В качестве сборщика используется Vite.

  • В качестве CSS препроцессора используется SCSS.

  • Для линтинга и форматирования в ESlint используется eslint-config Antony Fu.

  • На "выходе" получается готовое Vue 3 приложение без зависимостей от каких-либо фреймворков/библиотек/пакетов, если только пользователь явно не включил их в каркас.

',4),n=[o];function p(r,s,c,u,_,d){return t(),i("div",null,n)}const h=e(l,[["render",p]]);export{g as __pageData,h as default}; diff --git a/assets/ru_vue-webapp_guidelines.md.OiEpS5Up.lean.js b/assets/ru_vue-webapp_guidelines.md.CX74jjas.lean.js similarity index 90% rename from assets/ru_vue-webapp_guidelines.md.OiEpS5Up.lean.js rename to assets/ru_vue-webapp_guidelines.md.CX74jjas.lean.js index 73cbd24bd..245c4f3cd 100644 --- a/assets/ru_vue-webapp_guidelines.md.OiEpS5Up.lean.js +++ b/assets/ru_vue-webapp_guidelines.md.CX74jjas.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as i,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Принципы","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/guidelines.md","filePath":"ru/vue-webapp/guidelines.md","lastUpdated":1726474804000}'),l={name:"ru/vue-webapp/guidelines.md"},o=a("",4),n=[o];function p(r,s,c,u,_,d){return t(),i("div",null,n)}const h=e(l,[["render",p]]);export{g as __pageData,h as default}; +import{_ as e,o as t,c as i,a4 as a}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Принципы","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/guidelines.md","filePath":"ru/vue-webapp/guidelines.md","lastUpdated":1726505115000}'),l={name:"ru/vue-webapp/guidelines.md"},o=a("",4),n=[o];function p(r,s,c,u,_,d){return t(),i("div",null,n)}const h=e(l,[["render",p]]);export{g as __pageData,h as default}; diff --git a/assets/ru_vue-webapp_index.md.DsDdfI0K.js b/assets/ru_vue-webapp_index.md.DsDdfI0K.js new file mode 100644 index 000000000..7bb5d2774 --- /dev/null +++ b/assets/ru_vue-webapp_index.md.DsDdfI0K.js @@ -0,0 +1,8 @@ +import{_ as a,o as s,c as i,a4 as e,ae as t}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Vue 3 webapp билдер","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/index.md","filePath":"ru/vue-webapp/index.md","lastUpdated":1726505115000}'),n={name:"ru/vue-webapp/index.md"},h=e(`

Vue 3 webapp билдер

Краткое описание

Vue 3 вебсайт билдер (GitHub) позволяет создать каркас будущего веб приложения, с возможностью выбора бизнес-шаблона (портфолио, блог, магазин и .т.д.), макета сайта, дизайна и элементов функционала (API модуль, i18n, PWA, splash screen, auth модуль, темы и т.д.), для дальнейшей кастомизации и наполнения контентом.

sh
$ pnpm create vue-webapp
+
+ Project name: ... my-vue-project
+ Add a Splash screen? ... no / yes
+ Make it PWA (adds service worker and manifest)? ... no / yes
+ Add Open Graph meta tags? ... no / yes
+ Add Google Analytics code? ... no / yes
+...

Обоснование

Существует довольно много (в основном специфичных и быстро устаревающих) бойлерплейтов для создания Vue приложения. Обычно под этим подразумевается создание пустого проекта с определенными библиотеками. Другими словами, это просто настройка окружения для начала разработки без, непосредственно, кода.

В то же время, у многих других фронтенд и бэкенд фреймворков есть стартер-киты, позволяющие быстро создать готовый блог, онлайн магазин, сайт-визитку, портфолио, документацию и т.п., что значительно помогает как и в изучении самого фреймворка, соответствующих технологий и лучших практик, так и для решения стоящих перед бизнесом задач.

В результате может возникнуть впечатление, что Vue - довольно низкоуровневый фреймворк, и чтобы создавать вебприложения быстро, эффективно и удобно, необходимо взять какую-либо надстройку или иное решение - Nuxt, Vue Storefront, Astro, VitePress - которые прямо позиционируют себя как средство для решения определенных (или широкого круга) бизнес задач.

Появилась идея для создания инструмента, аналогичного create-vue, создающего каркас готового к работе веб приложения. С одной стороны, вполне работоспособного, адаптивного вебсайта с необходимым функционалом, чтобы начинающий разработчик мог ознакомиться с проверенным подходом в решении встающих при этом задач. С другой, достаточно минималистичным, не навязывающим опытному разработчику нежелаемые им зависимости, и создающим скелет из устоявшихся лучших практик для дальнейшего развития приложения.

Понятно, что определение той или иной "лучшей практики" (fetch или axios?) может быть довольно спорным моментом и зависит от контекста, но тем не менее.

image

',11),p=[h];function d(k,l,c,F,r,b){return s(),i("div",null,p)}const o=a(n,[["render",d],["__scopeId","data-v-ec45ab85"]]);export{g as __pageData,o as default}; diff --git a/assets/ru_vue-webapp_index.md.DsDdfI0K.lean.js b/assets/ru_vue-webapp_index.md.DsDdfI0K.lean.js new file mode 100644 index 000000000..2a038adf0 --- /dev/null +++ b/assets/ru_vue-webapp_index.md.DsDdfI0K.lean.js @@ -0,0 +1 @@ +import{_ as a,o as s,c as i,a4 as e,ae as t}from"./chunks/framework.B8KxSsRZ.js";const g=JSON.parse('{"title":"Vue 3 webapp билдер","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/index.md","filePath":"ru/vue-webapp/index.md","lastUpdated":1726505115000}'),n={name:"ru/vue-webapp/index.md"},h=e("",11),p=[h];function d(k,l,c,F,r,b){return s(),i("div",null,p)}const o=a(n,[["render",d],["__scopeId","data-v-ec45ab85"]]);export{g as __pageData,o as default}; diff --git a/assets/ru_vue-webapp_index.md.z6AkT026.js b/assets/ru_vue-webapp_index.md.z6AkT026.js deleted file mode 100644 index f77928dd2..000000000 --- a/assets/ru_vue-webapp_index.md.z6AkT026.js +++ /dev/null @@ -1,8 +0,0 @@ -import{_ as a,o as s,c as i,a4 as t,ae as e}from"./chunks/framework.B8KxSsRZ.js";const o=JSON.parse('{"title":"Vue 3 webapp билдер","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/index.md","filePath":"ru/vue-webapp/index.md","lastUpdated":1726474804000}'),n={name:"ru/vue-webapp/index.md"},h=t(`

Vue 3 webapp билдер

Краткое описание

Vue 3 вебсайт билдер (GitHub) позволяет создать каркас будущего веб приложения, с возможностью выбора бизнес-шаблона (портфолио, блог, магазин и .т.д.), макета сайта, дизайна и элементов функционала (API модуль, i18n, PWA, splash screen, auth модуль, темы и т.д.), для дальнейшей кастомизации и наполнения контентом.

sh
$ pnpm create vue-webapp
-
- Project name: ... my-vue-project
- Add a Splash screen? ... no / yes
- Make it PWA (adds service worker and manifest)? ... no / yes
- Add Open Graph meta tags? ... no / yes
- Add Google Analytics code? ... no / yes
-...

Обоснование

Существует довольно много (в основном специфичных и быстро устаревающих) бойлерплейтов для создания Vue приложения. Обычно под этим подразумевается создание пустого проекта с определенными библиотеками. Другими словами, это просто настройка окружения для начала разработки без, непосредственно, кода.

В то же время, у многих других фронтенд и бэкенд фреймворков есть стартер-киты, позволяющие быстро создать готовый блог, онлайн магазин, сайт-визитку, портфолио, документацию и т.п., что значительно помогает как и в изучении самого фреймворка, соответствующих технологий и лучших практик, так и для решения стоящих перед бизнесом задач.

В результате может возникнуть впечатление, что Vue - довольно низкоуровневый фреймворк, и чтобы создавать вебприложения быстро, эффективно и удобно, необходимо взять какую-либо надстройку или иное решение - Nuxt, Vue Storefront, Astro, VitePress - которые прямо позиционируют себя как средство для решения определенных (или широкого круга) бизнес задач.

Появилась идея для создания инструмента, аналогичного create-vue, создающего каркас готового к работе веб приложения. С одной стороны, вполне работоспособного, адаптивного вебсайта с необходимым функционалом, чтобы начинающий разработчик мог ознакомиться с проверенным подходом в решении встающих при этом задач. С другой, достаточно минималистичным, не навязывающим опытному разработчику нежелаемые им зависимости, и создающим скелет из устоявшихся лучших практик для дальнейшего развития приложения.

Понятно, что определение той или иной "лучшей практики" (fetch или axios?) может быть довольно спорным моментом и зависит от контекста, но тем не менее.

image

',11),p=[h];function d(k,l,c,F,r,v){return s(),i("div",null,p)}const y=a(n,[["render",d],["__scopeId","data-v-a7c19219"]]);export{o as __pageData,y as default}; diff --git a/assets/ru_vue-webapp_index.md.z6AkT026.lean.js b/assets/ru_vue-webapp_index.md.z6AkT026.lean.js deleted file mode 100644 index a8a2519eb..000000000 --- a/assets/ru_vue-webapp_index.md.z6AkT026.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,o as s,c as i,a4 as t,ae as e}from"./chunks/framework.B8KxSsRZ.js";const o=JSON.parse('{"title":"Vue 3 webapp билдер","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/index.md","filePath":"ru/vue-webapp/index.md","lastUpdated":1726474804000}'),n={name:"ru/vue-webapp/index.md"},h=t("",11),p=[h];function d(k,l,c,F,r,v){return s(),i("div",null,p)}const y=a(n,[["render",d],["__scopeId","data-v-a7c19219"]]);export{o as __pageData,y as default}; diff --git a/assets/ru_vue-webapp_objectives.md.CEEB1y8Z.js b/assets/ru_vue-webapp_objectives.md.B9680vPQ.js similarity index 98% rename from assets/ru_vue-webapp_objectives.md.CEEB1y8Z.js rename to assets/ru_vue-webapp_objectives.md.B9680vPQ.js index 050cc4659..4ca28f015 100644 --- a/assets/ru_vue-webapp_objectives.md.CEEB1y8Z.js +++ b/assets/ru_vue-webapp_objectives.md.B9680vPQ.js @@ -1 +1 @@ -import{_ as e,o as t,c as a,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"Цели","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/objectives.md","filePath":"ru/vue-webapp/objectives.md","lastUpdated":1726474804000}'),l={name:"ru/vue-webapp/objectives.md"},o=i('

Цели

  1. Создание конструктора каркаса простого сразу работающего SPA приложения под конкретную задачу за пару минут, с возможностью его дальнейшей стилизации и наполнения контентом.
  2. Тонкая кастомизация его с помощью небольших функциональных блоков кода.
  3. Сбор и обобщение лучших техник и практик при создании современного реактивного фронтенда.
  4. Дать возможность начинающим разработчикам на готовых примерах ознакомиться с экосистемой Vue.js, изучить лучшие практики фронтенда и Vue 3 от построения архитектуры приложения до наименования CSS классов.
  5. Дать возможность опытным разработчикам быстро и эффективно создавать каркас готового веб приложения и использовать переиспользуемые блоки кода (boilerplate), особенно такие, которые не могут быть распространяемы как NPM пакеты.

Данное приложение должно выполнять роль конструктора каркаса вебсайта, с возможностью выбора при создании:

  • Глобального бизнес-шаблона сайта (портфолио, блог, онлайн-магазин и.т.д)
  • Варианта общего лэйаута вебприложения
  • Вариантов конкретных компонент (header, footer, navigation drawer и т.д.)
  • Варианта общего стиля/дизайна
  • Отдельного функционала, инжектируемого как функциональные фрагменты (API модуль, i18n, PWA, splash screen, Auth модуль, themes и т.д. )
  • Вариантов GitHub Actions с возможностью билда и деплоя на популярные хостинги
  • Возможности подключения/интеграции при желании распространенных библиотек (в том числе UI)
  • Возможности интеграции c определенными headless CRM и API сервисами

Отдельно планируется создание веб-витрины, на которой пользователь, динамично меняя параметры, сможет посмотреть и протестировать доступные макеты сайта, темы/стилизации, компоненты (header, footer и т.д.) и функционал развертываемого приложения, а также их комбинацию друг с другом.

',5),s=[o];function n(r,p,c,_,d,u){return t(),a("div",null,s)}const b=e(l,[["render",n]]);export{h as __pageData,b as default}; +import{_ as e,o as t,c as a,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"Цели","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/objectives.md","filePath":"ru/vue-webapp/objectives.md","lastUpdated":1726505115000}'),l={name:"ru/vue-webapp/objectives.md"},o=i('

Цели

  1. Создание конструктора каркаса простого сразу работающего SPA приложения под конкретную задачу за пару минут, с возможностью его дальнейшей стилизации и наполнения контентом.
  2. Тонкая кастомизация его с помощью небольших функциональных блоков кода.
  3. Сбор и обобщение лучших техник и практик при создании современного реактивного фронтенда.
  4. Дать возможность начинающим разработчикам на готовых примерах ознакомиться с экосистемой Vue.js, изучить лучшие практики фронтенда и Vue 3 от построения архитектуры приложения до наименования CSS классов.
  5. Дать возможность опытным разработчикам быстро и эффективно создавать каркас готового веб приложения и использовать переиспользуемые блоки кода (boilerplate), особенно такие, которые не могут быть распространяемы как NPM пакеты.

Данное приложение должно выполнять роль конструктора каркаса вебсайта, с возможностью выбора при создании:

  • Глобального бизнес-шаблона сайта (портфолио, блог, онлайн-магазин и.т.д)
  • Варианта общего лэйаута вебприложения
  • Вариантов конкретных компонент (header, footer, navigation drawer и т.д.)
  • Варианта общего стиля/дизайна
  • Отдельного функционала, инжектируемого как функциональные фрагменты (API модуль, i18n, PWA, splash screen, Auth модуль, themes и т.д. )
  • Вариантов GitHub Actions с возможностью билда и деплоя на популярные хостинги
  • Возможности подключения/интеграции при желании распространенных библиотек (в том числе UI)
  • Возможности интеграции c определенными headless CRM и API сервисами

Отдельно планируется создание веб-витрины, на которой пользователь, динамично меняя параметры, сможет посмотреть и протестировать доступные макеты сайта, темы/стилизации, компоненты (header, footer и т.д.) и функционал развертываемого приложения, а также их комбинацию друг с другом.

',5),s=[o];function n(r,p,c,_,d,u){return t(),a("div",null,s)}const b=e(l,[["render",n]]);export{h as __pageData,b as default}; diff --git a/assets/ru_vue-webapp_objectives.md.CEEB1y8Z.lean.js b/assets/ru_vue-webapp_objectives.md.B9680vPQ.lean.js similarity index 90% rename from assets/ru_vue-webapp_objectives.md.CEEB1y8Z.lean.js rename to assets/ru_vue-webapp_objectives.md.B9680vPQ.lean.js index cfe30274b..aa3bec772 100644 --- a/assets/ru_vue-webapp_objectives.md.CEEB1y8Z.lean.js +++ b/assets/ru_vue-webapp_objectives.md.B9680vPQ.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as a,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"Цели","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/objectives.md","filePath":"ru/vue-webapp/objectives.md","lastUpdated":1726474804000}'),l={name:"ru/vue-webapp/objectives.md"},o=i("",5),s=[o];function n(r,p,c,_,d,u){return t(),a("div",null,s)}const b=e(l,[["render",n]]);export{h as __pageData,b as default}; +import{_ as e,o as t,c as a,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"Цели","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/objectives.md","filePath":"ru/vue-webapp/objectives.md","lastUpdated":1726505115000}'),l={name:"ru/vue-webapp/objectives.md"},o=i("",5),s=[o];function n(r,p,c,_,d,u){return t(),a("div",null,s)}const b=e(l,[["render",n]]);export{h as __pageData,b as default}; diff --git a/assets/ru_vue-webapp_options_adaptability.md.CCEXmU1S.js b/assets/ru_vue-webapp_options_adaptability.md.Ce8tdAQA.js similarity index 99% rename from assets/ru_vue-webapp_options_adaptability.md.CCEXmU1S.js rename to assets/ru_vue-webapp_options_adaptability.md.Ce8tdAQA.js index 811a67015..1ae5c739c 100644 --- a/assets/ru_vue-webapp_options_adaptability.md.CCEXmU1S.js +++ b/assets/ru_vue-webapp_options_adaptability.md.Ce8tdAQA.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Адаптивность","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/adaptability.md","filePath":"ru/vue-webapp/options/adaptability.md","lastUpdated":1726474804000}'),t={name:"ru/vue-webapp/options/adaptability.md"},h=n(`

Адаптивность

Адаптивность реализована с помощью useScreenWidth composable функции через четыре класса (mobile, tablet, notebook и desktop), динамично устанавливающихся на тэг body.

Конфигурационные параметры (верхний брейкпойнт для каждого режима) для useScreenWidth устанавливаются в App.vue:

vue
<script setup lang="ts">
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Адаптивность","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/adaptability.md","filePath":"ru/vue-webapp/options/adaptability.md","lastUpdated":1726505115000}'),t={name:"ru/vue-webapp/options/adaptability.md"},h=n(`

Адаптивность

Адаптивность реализована с помощью useScreenWidth composable функции через четыре класса (mobile, tablet, notebook и desktop), динамично устанавливающихся на тэг body.

Конфигурационные параметры (верхний брейкпойнт для каждого режима) для useScreenWidth устанавливаются в App.vue:

vue
<script setup lang="ts">
 import { useScreenWidth } from "@/composables/useScreenWidth";
 
 useScreenWidth({
diff --git a/assets/ru_vue-webapp_options_adaptability.md.CCEXmU1S.lean.js b/assets/ru_vue-webapp_options_adaptability.md.Ce8tdAQA.lean.js
similarity index 90%
rename from assets/ru_vue-webapp_options_adaptability.md.CCEXmU1S.lean.js
rename to assets/ru_vue-webapp_options_adaptability.md.Ce8tdAQA.lean.js
index d4f72352f..ea31a9158 100644
--- a/assets/ru_vue-webapp_options_adaptability.md.CCEXmU1S.lean.js
+++ b/assets/ru_vue-webapp_options_adaptability.md.Ce8tdAQA.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Адаптивность","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/adaptability.md","filePath":"ru/vue-webapp/options/adaptability.md","lastUpdated":1726474804000}'),t={name:"ru/vue-webapp/options/adaptability.md"},h=n("",9),p=[h];function l(k,e,E,d,r,g){return i(),a("div",null,p)}const y=s(t,[["render",l]]);export{c as __pageData,y as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Адаптивность","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/adaptability.md","filePath":"ru/vue-webapp/options/adaptability.md","lastUpdated":1726505115000}'),t={name:"ru/vue-webapp/options/adaptability.md"},h=n("",9),p=[h];function l(k,e,E,d,r,g){return i(),a("div",null,p)}const y=s(t,[["render",l]]);export{c as __pageData,y as default};
diff --git a/assets/ru_vue-webapp_options_api.md.SsFyJ70f.js b/assets/ru_vue-webapp_options_api.md.CbOuiSrl.js
similarity index 99%
rename from assets/ru_vue-webapp_options_api.md.SsFyJ70f.js
rename to assets/ru_vue-webapp_options_api.md.CbOuiSrl.js
index 9b3881f9f..dbb89a773 100644
--- a/assets/ru_vue-webapp_options_api.md.SsFyJ70f.js
+++ b/assets/ru_vue-webapp_options_api.md.CbOuiSrl.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"API модуль","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/api.md","filePath":"ru/vue-webapp/options/api.md","lastUpdated":1726474804000}'),t={name:"ru/vue-webapp/options/api.md"},p=n(`

API модуль

API (REST)

Создает сервисный transport client agnostic слой-обертку для REST обращений к бэкенду по HTTP(S).

В качестве HTTP транспортного клиента может использоваться fetch, axios или промисная версия XHR, на выбор разработчика. С помощью неё вызовы API в коде выглядят следующим образом:

js
import { api } from "@/services/api";
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"API модуль","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/api.md","filePath":"ru/vue-webapp/options/api.md","lastUpdated":1726505115000}'),t={name:"ru/vue-webapp/options/api.md"},p=n(`

API модуль

API (REST)

Создает сервисный transport client agnostic слой-обертку для REST обращений к бэкенду по HTTP(S).

В качестве HTTP транспортного клиента может использоваться fetch, axios или промисная версия XHR, на выбор разработчика. С помощью неё вызовы API в коде выглядят следующим образом:

js
import { api } from "@/services/api";
 
 const apiData = ref();
 apiData.value = await api.utils.testRest();

Каждый вызов представляет из себя асинхронную функцию, возвращающую Promise.

js
// utils.ts
diff --git a/assets/ru_vue-webapp_options_api.md.SsFyJ70f.lean.js b/assets/ru_vue-webapp_options_api.md.CbOuiSrl.lean.js
similarity index 90%
rename from assets/ru_vue-webapp_options_api.md.SsFyJ70f.lean.js
rename to assets/ru_vue-webapp_options_api.md.CbOuiSrl.lean.js
index 3a6e10a95..4382d5a59 100644
--- a/assets/ru_vue-webapp_options_api.md.SsFyJ70f.lean.js
+++ b/assets/ru_vue-webapp_options_api.md.CbOuiSrl.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"API модуль","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/api.md","filePath":"ru/vue-webapp/options/api.md","lastUpdated":1726474804000}'),t={name:"ru/vue-webapp/options/api.md"},p=n("",17),h=[p];function l(k,e,E,r,d,o){return i(),a("div",null,h)}const y=s(t,[["render",l]]);export{c as __pageData,y as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"API модуль","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/api.md","filePath":"ru/vue-webapp/options/api.md","lastUpdated":1726505115000}'),t={name:"ru/vue-webapp/options/api.md"},p=n("",17),h=[p];function l(k,e,E,r,d,o){return i(),a("div",null,h)}const y=s(t,[["render",l]]);export{c as __pageData,y as default};
diff --git a/assets/ru_vue-webapp_options_baseIcon.md.sq0nfZfW.js b/assets/ru_vue-webapp_options_baseIcon.md.BZgy0wfV.js
similarity index 99%
rename from assets/ru_vue-webapp_options_baseIcon.md.sq0nfZfW.js
rename to assets/ru_vue-webapp_options_baseIcon.md.BZgy0wfV.js
index 791f52ef3..6ddd8d0f9 100644
--- a/assets/ru_vue-webapp_options_baseIcon.md.sq0nfZfW.js
+++ b/assets/ru_vue-webapp_options_baseIcon.md.BZgy0wfV.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"BaseIcon","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/baseIcon.md","filePath":"ru/vue-webapp/options/baseIcon.md","lastUpdated":1726474804000}'),t={name:"ru/vue-webapp/options/baseIcon.md"},e=n(`

BaseIcon

Состоит из компонента BaseIcon и утилиты utils.ts.

Позволяет использовать в приложении иконки с динамичным обращением к ним по имени:

vue
<script setup lang="ts">
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"BaseIcon","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/baseIcon.md","filePath":"ru/vue-webapp/options/baseIcon.md","lastUpdated":1726505115000}'),t={name:"ru/vue-webapp/options/baseIcon.md"},e=n(`

BaseIcon

Состоит из компонента BaseIcon и утилиты utils.ts.

Позволяет использовать в приложении иконки с динамичным обращением к ним по имени:

vue
<script setup lang="ts">
 import BaseIcon from "@/components/ui/BaseIcon.vue";
 import { useAppConfig } from "@/composables/useAppConfig";
 
diff --git a/assets/ru_vue-webapp_options_baseIcon.md.sq0nfZfW.lean.js b/assets/ru_vue-webapp_options_baseIcon.md.BZgy0wfV.lean.js
similarity index 90%
rename from assets/ru_vue-webapp_options_baseIcon.md.sq0nfZfW.lean.js
rename to assets/ru_vue-webapp_options_baseIcon.md.BZgy0wfV.lean.js
index 0e66d3384..17e1d3498 100644
--- a/assets/ru_vue-webapp_options_baseIcon.md.sq0nfZfW.lean.js
+++ b/assets/ru_vue-webapp_options_baseIcon.md.BZgy0wfV.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"BaseIcon","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/baseIcon.md","filePath":"ru/vue-webapp/options/baseIcon.md","lastUpdated":1726474804000}'),t={name:"ru/vue-webapp/options/baseIcon.md"},e=n("",5),p=[e];function h(l,k,E,r,o,d){return i(),a("div",null,p)}const y=s(t,[["render",h]]);export{c as __pageData,y as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"BaseIcon","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/baseIcon.md","filePath":"ru/vue-webapp/options/baseIcon.md","lastUpdated":1726505115000}'),t={name:"ru/vue-webapp/options/baseIcon.md"},e=n("",5),p=[e];function h(l,k,E,r,o,d){return i(),a("div",null,p)}const y=s(t,[["render",h]]);export{c as __pageData,y as default};
diff --git a/assets/ru_vue-webapp_options_description.md.B0KwBw6b.js b/assets/ru_vue-webapp_options_description.md.BQWosOK3.js
similarity index 98%
rename from assets/ru_vue-webapp_options_description.md.B0KwBw6b.js
rename to assets/ru_vue-webapp_options_description.md.BQWosOK3.js
index 41113b114..3a5364112 100644
--- a/assets/ru_vue-webapp_options_description.md.B0KwBw6b.js
+++ b/assets/ru_vue-webapp_options_description.md.BQWosOK3.js
@@ -1,4 +1,4 @@
-import{_ as i,o as s,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"Детали реализации","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/description.md","filePath":"ru/vue-webapp/options/description.md","lastUpdated":1726474804000}'),t={name:"ru/vue-webapp/options/description.md"},n=e(`

Детали реализации

Инъекции кода в index.html

Чтобы не раздувать index.html инъекции фрагментов кода в него (Open graph, Google analytics, Splash screen, Service worker) делаются через vite-plugin-html-injection Vite плагин.

Сами фрагменты кода расположены в ./src/utils/injections/ директории. Там же находится конфигурационный файл плагина injection-config.ts.

CSS tricks

В приложении на больших разрешениях применен хак для недопущения прыгания экрана при появлении/исчезновении главного скролбара

css
html {
+import{_ as i,o as s,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"Детали реализации","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/description.md","filePath":"ru/vue-webapp/options/description.md","lastUpdated":1726505115000}'),t={name:"ru/vue-webapp/options/description.md"},n=e(`

Детали реализации

Инъекции кода в index.html

Чтобы не раздувать index.html инъекции фрагментов кода в него (Open graph, Google analytics, Splash screen, Service worker) делаются через vite-plugin-html-injection Vite плагин.

Сами фрагменты кода расположены в ./src/utils/injections/ директории. Там же находится конфигурационный файл плагина injection-config.ts.

CSS tricks

В приложении на больших разрешениях применен хак для недопущения прыгания экрана при появлении/исчезновении главного скролбара

css
html {
   overflow-x: hidden;
   margin-right: calc(-1 * (100vw - 100%));
 }
`,7),h=[n];function p(l,r,o,k,d,c){return s(),a("div",null,h)}const E=i(t,[["render",p]]);export{m as __pageData,E as default}; diff --git a/assets/ru_vue-webapp_options_description.md.B0KwBw6b.lean.js b/assets/ru_vue-webapp_options_description.md.BQWosOK3.lean.js similarity index 91% rename from assets/ru_vue-webapp_options_description.md.B0KwBw6b.lean.js rename to assets/ru_vue-webapp_options_description.md.BQWosOK3.lean.js index 21abb8eb7..cc7045d96 100644 --- a/assets/ru_vue-webapp_options_description.md.B0KwBw6b.lean.js +++ b/assets/ru_vue-webapp_options_description.md.BQWosOK3.lean.js @@ -1 +1 @@ -import{_ as i,o as s,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"Детали реализации","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/description.md","filePath":"ru/vue-webapp/options/description.md","lastUpdated":1726474804000}'),t={name:"ru/vue-webapp/options/description.md"},n=e("",7),h=[n];function p(l,r,o,k,d,c){return s(),a("div",null,h)}const E=i(t,[["render",p]]);export{m as __pageData,E as default}; +import{_ as i,o as s,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"Детали реализации","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/description.md","filePath":"ru/vue-webapp/options/description.md","lastUpdated":1726505115000}'),t={name:"ru/vue-webapp/options/description.md"},n=e("",7),h=[n];function p(l,r,o,k,d,c){return s(),a("div",null,h)}const E=i(t,[["render",p]]);export{m as __pageData,E as default}; diff --git a/assets/ru_vue-webapp_options_drawer.md.CzDs-yrN.js b/assets/ru_vue-webapp_options_drawer.md.CPSfvPI3.js similarity index 55% rename from assets/ru_vue-webapp_options_drawer.md.CzDs-yrN.js rename to assets/ru_vue-webapp_options_drawer.md.CPSfvPI3.js index cbe26771b..c11540f2a 100644 --- a/assets/ru_vue-webapp_options_drawer.md.CzDs-yrN.js +++ b/assets/ru_vue-webapp_options_drawer.md.CPSfvPI3.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as r,af as o,ag as d}from"./chunks/framework.B8KxSsRZ.js";const w=JSON.parse('{"title":"Navigation drawers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/drawer.md","filePath":"ru/vue-webapp/options/drawer.md","lastUpdated":1726474804000}'),i={name:"ru/vue-webapp/options/drawer.md"},s=r('

Navigation drawers

На данный момент можно выбрать из двух видов навигационных шторок.

SimpleDrawer

image

Всегда открыт для разрешений экрана notebook и desktop, а для мобильных устройств и планшетов открывается по клику/нажатию на иконку "гамбургера".

TouchSlideoutDrawer

image

Аналогичен SimpleDrawer, но управляется с помощью прикосновений на сенсорных экранах. Добавляет приятный UX.

Функциональность реализована с помощью useTouchSwipe composable функции и TouchSlideoutDrawer компонента.

',9),p=[s];function n(c,l,u,m,h,v){return e(),t("div",null,p)}const b=a(i,[["render",n],["__scopeId","data-v-879d1339"]]);export{w as __pageData,b as default}; +import{_ as a,o as e,c as t,a4 as r,af as o,ag as d}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Navigation drawers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/drawer.md","filePath":"ru/vue-webapp/options/drawer.md","lastUpdated":1726505115000}'),c={name:"ru/vue-webapp/options/drawer.md"},i=r('

Navigation drawers

На данный момент можно выбрать из двух видов навигационных шторок.

SimpleDrawer

image

Всегда открыт для разрешений экрана notebook и desktop, а для мобильных устройств и планшетов открывается по клику/нажатию на иконку "гамбургера".

TouchSlideoutDrawer

image

Аналогичен SimpleDrawer, но управляется с помощью прикосновений на сенсорных экранах. Добавляет приятный UX.

Функциональность реализована с помощью useTouchSwipe composable функции и TouchSlideoutDrawer компонента.

',9),s=[i];function p(n,l,u,m,h,v){return e(),t("div",null,s)}const w=a(c,[["render",p],["__scopeId","data-v-92d8f99c"]]);export{f as __pageData,w as default}; diff --git a/assets/ru_vue-webapp_options_drawer.md.CzDs-yrN.lean.js b/assets/ru_vue-webapp_options_drawer.md.CPSfvPI3.lean.js similarity index 61% rename from assets/ru_vue-webapp_options_drawer.md.CzDs-yrN.lean.js rename to assets/ru_vue-webapp_options_drawer.md.CPSfvPI3.lean.js index 9dce58e49..d608e1562 100644 --- a/assets/ru_vue-webapp_options_drawer.md.CzDs-yrN.lean.js +++ b/assets/ru_vue-webapp_options_drawer.md.CPSfvPI3.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as r,af as o,ag as d}from"./chunks/framework.B8KxSsRZ.js";const w=JSON.parse('{"title":"Navigation drawers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/drawer.md","filePath":"ru/vue-webapp/options/drawer.md","lastUpdated":1726474804000}'),i={name:"ru/vue-webapp/options/drawer.md"},s=r("",9),p=[s];function n(c,l,u,m,h,v){return e(),t("div",null,p)}const b=a(i,[["render",n],["__scopeId","data-v-879d1339"]]);export{w as __pageData,b as default}; +import{_ as a,o as e,c as t,a4 as r,af as o,ag as d}from"./chunks/framework.B8KxSsRZ.js";const f=JSON.parse('{"title":"Navigation drawers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/drawer.md","filePath":"ru/vue-webapp/options/drawer.md","lastUpdated":1726505115000}'),c={name:"ru/vue-webapp/options/drawer.md"},i=r("",9),s=[i];function p(n,l,u,m,h,v){return e(),t("div",null,s)}const w=a(c,[["render",p],["__scopeId","data-v-92d8f99c"]]);export{f as __pageData,w as default}; diff --git a/assets/ru_vue-webapp_options_footer.md.9dIqVhM5.js b/assets/ru_vue-webapp_options_footer.md.9dIqVhM5.js new file mode 100644 index 000000000..bc5a81793 --- /dev/null +++ b/assets/ru_vue-webapp_options_footer.md.9dIqVhM5.js @@ -0,0 +1 @@ +import{_ as a,o as e,c as t,a4 as o,ah as r,ai as i,aj as d,ak as s,al as n}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Footers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/footer.md","filePath":"ru/vue-webapp/options/footer.md","lastUpdated":1726505115000}'),p={name:"ru/vue-webapp/options/footer.md"},m=o('

Footers

На данный момент можно доступны следующие типы футеров:

SimpleFooter

image

RichFooter

image

MantineSimpleFooter

image

MantineRichFooter

image

DistributedFooter

image

',12),l=[m];function c(b,h,_,u,v,f){return e(),t("div",null,l)}const q=a(p,[["render",c],["__scopeId","data-v-46521d3b"]]);export{F as __pageData,q as default}; diff --git a/assets/ru_vue-webapp_options_footer.md.P0M8r5X4.lean.js b/assets/ru_vue-webapp_options_footer.md.9dIqVhM5.lean.js similarity index 68% rename from assets/ru_vue-webapp_options_footer.md.P0M8r5X4.lean.js rename to assets/ru_vue-webapp_options_footer.md.9dIqVhM5.lean.js index 32fcaa256..3d06b3308 100644 --- a/assets/ru_vue-webapp_options_footer.md.P0M8r5X4.lean.js +++ b/assets/ru_vue-webapp_options_footer.md.9dIqVhM5.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as o,ah as r,ai as i,aj as d,ak as s,al as n}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Footers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/footer.md","filePath":"ru/vue-webapp/options/footer.md","lastUpdated":1726474804000}'),p={name:"ru/vue-webapp/options/footer.md"},m=o("",12),l=[m];function c(h,_,u,v,f,b){return e(),t("div",null,l)}const q=a(p,[["render",c],["__scopeId","data-v-198a4ede"]]);export{F as __pageData,q as default}; +import{_ as a,o as e,c as t,a4 as o,ah as r,ai as i,aj as d,ak as s,al as n}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Footers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/footer.md","filePath":"ru/vue-webapp/options/footer.md","lastUpdated":1726505115000}'),p={name:"ru/vue-webapp/options/footer.md"},m=o("",12),l=[m];function c(b,h,_,u,v,f){return e(),t("div",null,l)}const q=a(p,[["render",c],["__scopeId","data-v-46521d3b"]]);export{F as __pageData,q as default}; diff --git a/assets/ru_vue-webapp_options_footer.md.P0M8r5X4.js b/assets/ru_vue-webapp_options_footer.md.P0M8r5X4.js deleted file mode 100644 index 7fd369dc0..000000000 --- a/assets/ru_vue-webapp_options_footer.md.P0M8r5X4.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,o as e,c as t,a4 as o,ah as r,ai as i,aj as d,ak as s,al as n}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Footers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/footer.md","filePath":"ru/vue-webapp/options/footer.md","lastUpdated":1726474804000}'),p={name:"ru/vue-webapp/options/footer.md"},m=o('

Footers

На данный момент можно доступны следующие типы футеров:

SimpleFooter

image

RichFooter

image

MantineSimpleFooter

image

MantineRichFooter

image

DistributedFooter

image

',12),l=[m];function c(h,_,u,v,f,b){return e(),t("div",null,l)}const q=a(p,[["render",c],["__scopeId","data-v-198a4ede"]]);export{F as __pageData,q as default}; diff --git a/assets/ru_vue-webapp_options_ga-gp.md.C5eeB8d1.js b/assets/ru_vue-webapp_options_ga-gp.md.LUNm7bwy.js similarity index 98% rename from assets/ru_vue-webapp_options_ga-gp.md.C5eeB8d1.js rename to assets/ru_vue-webapp_options_ga-gp.md.LUNm7bwy.js index aebb95e55..ba90751f8 100644 --- a/assets/ru_vue-webapp_options_ga-gp.md.C5eeB8d1.js +++ b/assets/ru_vue-webapp_options_ga-gp.md.LUNm7bwy.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"Github Actions сценарий для развертывания на Github Pages","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/ga-gp.md","filePath":"ru/vue-webapp/options/ga-gp.md","lastUpdated":1726474804000}'),s={name:"ru/vue-webapp/options/ga-gp.md"},o=i('

Github Actions сценарий для развертывания на Github Pages

Deployment

Использует JamesIves/github-pages-deploy-action Github Action для размещения сайта на ветке gh-pages того же репозитория, что автоматически делает сайт доступный по адресу https://youGitHubUsername.github.io/my-vue-webapp (если ваш проект и репозиторий называется my-vue-webapp).

  • Создайте в репозитории ветку с названием gh-pages
  • Перейдите в раздел "Settings" вашего репозитория
  • В разделе "Code and automation" на боковой панели нажмите Pages.
  • В разделе "Build and deployment" в пункте "Source" выберите "Deploy from a branch".
  • В разделе "Build and deployment" под заголовком "Branch" воспользуйтесь раскрывающимся меню ветки и выберите нужную ветку - gh-pages.

Более подробно:

Настройка base в Vite конфиге

Если у вас не кастомный домен, то в vite.config.ts необходимо прописать название вашего репозитория в качестве base, чтобы сайт был доступен по вышеуказанной ссылке:

js
export default defineConfig({\n  base: "/my-vue-webapp/",\n});

Если у вас кастомный домен (типа yourname.com), то этот параметр не нужен.

',10),n=[o];function p(l,h,r,u,c,d){return a(),t("div",null,n)}const m=e(s,[["render",p]]);export{b as __pageData,m as default}; +import{_ as e,o as a,c as t,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"Github Actions сценарий для развертывания на Github Pages","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/ga-gp.md","filePath":"ru/vue-webapp/options/ga-gp.md","lastUpdated":1726505115000}'),s={name:"ru/vue-webapp/options/ga-gp.md"},o=i('

Github Actions сценарий для развертывания на Github Pages

Deployment

Использует JamesIves/github-pages-deploy-action Github Action для размещения сайта на ветке gh-pages того же репозитория, что автоматически делает сайт доступный по адресу https://youGitHubUsername.github.io/my-vue-webapp (если ваш проект и репозиторий называется my-vue-webapp).

  • Создайте в репозитории ветку с названием gh-pages
  • Перейдите в раздел "Settings" вашего репозитория
  • В разделе "Code and automation" на боковой панели нажмите Pages.
  • В разделе "Build and deployment" в пункте "Source" выберите "Deploy from a branch".
  • В разделе "Build and deployment" под заголовком "Branch" воспользуйтесь раскрывающимся меню ветки и выберите нужную ветку - gh-pages.

Более подробно:

Настройка base в Vite конфиге

Если у вас не кастомный домен, то в vite.config.ts необходимо прописать название вашего репозитория в качестве base, чтобы сайт был доступен по вышеуказанной ссылке:

js
export default defineConfig({\n  base: "/my-vue-webapp/",\n});

Если у вас кастомный домен (типа yourname.com), то этот параметр не нужен.

',10),n=[o];function p(l,h,r,u,c,d){return a(),t("div",null,n)}const m=e(s,[["render",p]]);export{b as __pageData,m as default}; diff --git a/assets/ru_vue-webapp_options_ga-gp.md.C5eeB8d1.lean.js b/assets/ru_vue-webapp_options_ga-gp.md.LUNm7bwy.lean.js similarity index 91% rename from assets/ru_vue-webapp_options_ga-gp.md.C5eeB8d1.lean.js rename to assets/ru_vue-webapp_options_ga-gp.md.LUNm7bwy.lean.js index a8e4a60ae..2985a2d34 100644 --- a/assets/ru_vue-webapp_options_ga-gp.md.C5eeB8d1.lean.js +++ b/assets/ru_vue-webapp_options_ga-gp.md.LUNm7bwy.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"Github Actions сценарий для развертывания на Github Pages","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/ga-gp.md","filePath":"ru/vue-webapp/options/ga-gp.md","lastUpdated":1726474804000}'),s={name:"ru/vue-webapp/options/ga-gp.md"},o=i("",10),n=[o];function p(l,h,r,u,c,d){return a(),t("div",null,n)}const m=e(s,[["render",p]]);export{b as __pageData,m as default}; +import{_ as e,o as a,c as t,a4 as i}from"./chunks/framework.B8KxSsRZ.js";const b=JSON.parse('{"title":"Github Actions сценарий для развертывания на Github Pages","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/ga-gp.md","filePath":"ru/vue-webapp/options/ga-gp.md","lastUpdated":1726505115000}'),s={name:"ru/vue-webapp/options/ga-gp.md"},o=i("",10),n=[o];function p(l,h,r,u,c,d){return a(),t("div",null,n)}const m=e(s,[["render",p]]);export{b as __pageData,m as default}; diff --git a/assets/ru_vue-webapp_options_google-analytics.md.BXyaETaR.js b/assets/ru_vue-webapp_options_google-analytics.md.C9YQePCV.js similarity index 98% rename from assets/ru_vue-webapp_options_google-analytics.md.BXyaETaR.js rename to assets/ru_vue-webapp_options_google-analytics.md.C9YQePCV.js index e25b7f311..c6f2df5f4 100644 --- a/assets/ru_vue-webapp_options_google-analytics.md.BXyaETaR.js +++ b/assets/ru_vue-webapp_options_google-analytics.md.C9YQePCV.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Google analytics","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/google-analytics.md","filePath":"ru/vue-webapp/options/google-analytics.md","lastUpdated":1726474804000}'),n={name:"ru/vue-webapp/options/google-analytics.md"},e=t(`

Google analytics

Добавляет код инициализации Google Tag для index.html.

html
<!-- Google tag (gtag.js) -->
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Google analytics","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/google-analytics.md","filePath":"ru/vue-webapp/options/google-analytics.md","lastUpdated":1726505115000}'),n={name:"ru/vue-webapp/options/google-analytics.md"},e=t(`

Google analytics

Добавляет код инициализации Google Tag для index.html.

html
<!-- Google tag (gtag.js) -->
 <script async src="https://www.googletagmanager.com/gtag/js?id=G-JL65GWRNQQ"></script>
 <script>
   window.dataLayer = window.dataLayer || [];
diff --git a/assets/ru_vue-webapp_options_google-analytics.md.BXyaETaR.lean.js b/assets/ru_vue-webapp_options_google-analytics.md.C9YQePCV.lean.js
similarity index 91%
rename from assets/ru_vue-webapp_options_google-analytics.md.BXyaETaR.lean.js
rename to assets/ru_vue-webapp_options_google-analytics.md.C9YQePCV.lean.js
index 243594e8d..d4a1369a9 100644
--- a/assets/ru_vue-webapp_options_google-analytics.md.BXyaETaR.lean.js
+++ b/assets/ru_vue-webapp_options_google-analytics.md.C9YQePCV.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Google analytics","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/google-analytics.md","filePath":"ru/vue-webapp/options/google-analytics.md","lastUpdated":1726474804000}'),n={name:"ru/vue-webapp/options/google-analytics.md"},e=t("",4),l=[e];function h(p,k,g,E,o,r){return i(),a("div",null,l)}const y=s(n,[["render",h]]);export{c as __pageData,y as default};
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"Google analytics","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/google-analytics.md","filePath":"ru/vue-webapp/options/google-analytics.md","lastUpdated":1726505115000}'),n={name:"ru/vue-webapp/options/google-analytics.md"},e=t("",4),l=[e];function h(p,k,g,E,o,r){return i(),a("div",null,l)}const y=s(n,[["render",h]]);export{c as __pageData,y as default};
diff --git a/assets/ru_vue-webapp_options_header.md.DMNPktcz.js b/assets/ru_vue-webapp_options_header.md.DMNPktcz.js
new file mode 100644
index 000000000..197aa8d41
--- /dev/null
+++ b/assets/ru_vue-webapp_options_header.md.DMNPktcz.js
@@ -0,0 +1,9 @@
+import{_ as a,o as s,c as i,a4 as t,am as d,an as e,ao as n,ap as h}from"./chunks/framework.B8KxSsRZ.js";const _=JSON.parse('{"title":"Headers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/header.md","filePath":"ru/vue-webapp/options/header.md","lastUpdated":1726505115000}'),p={name:"ru/vue-webapp/options/header.md"},l=t('

Headers

Все хедеры адаптивны.

SimpleHeader

image

Простой sticky header

MantineSimpleHeader

image

Простой sticky header в стиле Mantine UI

MantineLayeredHeader

image

sticky header с уровнями в стиле Mantine UI

SlidingHeader

image

Может содержать два разных header-а, второй появляется после того, как пользователь проскроллит страницу вниз

template
<AppHeader :threshold-hide="200" :threshold-open="400">
+    <template #first-header>
+        <AppHeaderFirst />
+    </template>
+
+    <template #second-header>
+        <AppHeaderSecond />
+    </template>
+</AppHeader>
`,15),r=[l];function k(E,v,o,g,c,m){return s(),i("div",null,r)}const u=a(p,[["render",k],["__scopeId","data-v-1d913317"]]);export{_ as __pageData,u as default}; diff --git a/assets/ru_vue-webapp_options_header.md.bvam5pHc.lean.js b/assets/ru_vue-webapp_options_header.md.DMNPktcz.lean.js similarity index 51% rename from assets/ru_vue-webapp_options_header.md.bvam5pHc.lean.js rename to assets/ru_vue-webapp_options_header.md.DMNPktcz.lean.js index a48553e6e..6ad40ba2d 100644 --- a/assets/ru_vue-webapp_options_header.md.bvam5pHc.lean.js +++ b/assets/ru_vue-webapp_options_header.md.DMNPktcz.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as s,a4 as i,am as t,an as d,ao as n,ap as h}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Headers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/header.md","filePath":"ru/vue-webapp/options/header.md","lastUpdated":1726474804000}'),b={name:"ru/vue-webapp/options/header.md"},p=i("",15),l=[p];function r(k,E,v,o,g,c){return e(),s("div",null,l)}const _=a(b,[["render",r],["__scopeId","data-v-2bb4ae84"]]);export{y as __pageData,_ as default}; +import{_ as a,o as s,c as i,a4 as t,am as d,an as e,ao as n,ap as h}from"./chunks/framework.B8KxSsRZ.js";const _=JSON.parse('{"title":"Headers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/header.md","filePath":"ru/vue-webapp/options/header.md","lastUpdated":1726505115000}'),p={name:"ru/vue-webapp/options/header.md"},l=t("",15),r=[l];function k(E,v,o,g,c,m){return s(),i("div",null,r)}const u=a(p,[["render",k],["__scopeId","data-v-1d913317"]]);export{_ as __pageData,u as default}; diff --git a/assets/ru_vue-webapp_options_header.md.bvam5pHc.js b/assets/ru_vue-webapp_options_header.md.bvam5pHc.js deleted file mode 100644 index f6b40bd0e..000000000 --- a/assets/ru_vue-webapp_options_header.md.bvam5pHc.js +++ /dev/null @@ -1,9 +0,0 @@ -import{_ as a,o as e,c as s,a4 as i,am as t,an as d,ao as n,ap as h}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Headers","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/header.md","filePath":"ru/vue-webapp/options/header.md","lastUpdated":1726474804000}'),b={name:"ru/vue-webapp/options/header.md"},p=i('

Headers

Все хедеры адаптивны.

SimpleHeader

image

Простой sticky header

MantineSimpleHeader

image

Простой sticky header в стиле Mantine UI

MantineLayeredHeader

image

sticky header с уровнями в стиле Mantine UI

SlidingHeader

image

Может содержать два разных header-а, второй появляется после того, как пользователь проскроллит страницу вниз

template
<AppHeader :threshold-hide="200" :threshold-open="400">
-    <template #first-header>
-        <AppHeaderFirst />
-    </template>
-
-    <template #second-header>
-        <AppHeaderSecond />
-    </template>
-</AppHeader>
`,15),l=[p];function r(k,E,v,o,g,c){return e(),s("div",null,l)}const _=a(b,[["render",r],["__scopeId","data-v-2bb4ae84"]]);export{y as __pageData,_ as default}; diff --git a/assets/ru_vue-webapp_options_i18n.md.BG0ifMMf.js b/assets/ru_vue-webapp_options_i18n.md.ouUXdx4T.js similarity index 99% rename from assets/ru_vue-webapp_options_i18n.md.BG0ifMMf.js rename to assets/ru_vue-webapp_options_i18n.md.ouUXdx4T.js index 65dc85ff6..a5dd29d15 100644 --- a/assets/ru_vue-webapp_options_i18n.md.BG0ifMMf.js +++ b/assets/ru_vue-webapp_options_i18n.md.ouUXdx4T.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"i18n","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/i18n.md","filePath":"ru/vue-webapp/options/i18n.md","lastUpdated":1726474804000}'),t={name:"ru/vue-webapp/options/i18n.md"},e=n(`

i18n

i18next

NPM библиотека для интернационализации и локализации i18n очень популярна, однако за последние годы она сильно располнела. В ней много возможностей для локализации дат, чисел, установки нужных склонений, поддержки RTL языков, загрузки локалей с сервера и кучи еще чего. На сайте i18next она называется уже даже "интернационализационным фреймворком".

В то же время часто для локализации сайта в большинстве случаев требуются очень простые вещи, занимающие всего пару процентов от всего функционала тяжеловеса i18n.

В частности, обычно нужны:

  • Нахождение перевода по составному ключу - t("finance.transactions.deposit")
  • Перевод с параметром - t("hello-message", "John")
  • Массивы для списков или параграфов текста

Данный функционал с сохранением реактивности (смена языка сайта налету) можно получить простой composable функцией.

useI18nLight

Вот чистая реализация вышеуказанного функционала в 70 строчек супротив полутора мегабайт без каких-либо зависимостей.

Использование

Подключение и инициализация в main.ts:

js
import { useI18n } from "@/composables/useI18nLight";
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"i18n","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/i18n.md","filePath":"ru/vue-webapp/options/i18n.md","lastUpdated":1726505115000}'),t={name:"ru/vue-webapp/options/i18n.md"},e=n(`

i18n

i18next

NPM библиотека для интернационализации и локализации i18n очень популярна, однако за последние годы она сильно располнела. В ней много возможностей для локализации дат, чисел, установки нужных склонений, поддержки RTL языков, загрузки локалей с сервера и кучи еще чего. На сайте i18next она называется уже даже "интернационализационным фреймворком".

В то же время часто для локализации сайта в большинстве случаев требуются очень простые вещи, занимающие всего пару процентов от всего функционала тяжеловеса i18n.

В частности, обычно нужны:

  • Нахождение перевода по составному ключу - t("finance.transactions.deposit")
  • Перевод с параметром - t("hello-message", "John")
  • Массивы для списков или параграфов текста

Данный функционал с сохранением реактивности (смена языка сайта налету) можно получить простой composable функцией.

useI18nLight

Вот чистая реализация вышеуказанного функционала в 70 строчек супротив полутора мегабайт без каких-либо зависимостей.

Использование

Подключение и инициализация в main.ts:

js
import { useI18n } from "@/composables/useI18nLight";
 
 const { initI18n } = useI18n();
 
diff --git a/assets/ru_vue-webapp_options_i18n.md.BG0ifMMf.lean.js b/assets/ru_vue-webapp_options_i18n.md.ouUXdx4T.lean.js
similarity index 90%
rename from assets/ru_vue-webapp_options_i18n.md.BG0ifMMf.lean.js
rename to assets/ru_vue-webapp_options_i18n.md.ouUXdx4T.lean.js
index 05637db56..a5d423ac0 100644
--- a/assets/ru_vue-webapp_options_i18n.md.BG0ifMMf.lean.js
+++ b/assets/ru_vue-webapp_options_i18n.md.ouUXdx4T.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"i18n","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/i18n.md","filePath":"ru/vue-webapp/options/i18n.md","lastUpdated":1726474804000}'),t={name:"ru/vue-webapp/options/i18n.md"},e=n("",19),l=[e];function h(p,k,E,r,d,o){return i(),a("div",null,l)}const y=s(t,[["render",h]]);export{c as __pageData,y as default};
+import{_ as s,o as i,c as a,a4 as n}from"./chunks/framework.B8KxSsRZ.js";const c=JSON.parse('{"title":"i18n","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/i18n.md","filePath":"ru/vue-webapp/options/i18n.md","lastUpdated":1726505115000}'),t={name:"ru/vue-webapp/options/i18n.md"},e=n("",19),l=[e];function h(p,k,E,r,d,o){return i(),a("div",null,l)}const y=s(t,[["render",h]]);export{c as __pageData,y as default};
diff --git a/assets/ru_vue-webapp_options_index.md.BxEUg1hK.js b/assets/ru_vue-webapp_options_index.md.DAPvAF00.js
similarity index 98%
rename from assets/ru_vue-webapp_options_index.md.BxEUg1hK.js
rename to assets/ru_vue-webapp_options_index.md.DAPvAF00.js
index 9e80980ba..8cd6485c5 100644
--- a/assets/ru_vue-webapp_options_index.md.BxEUg1hK.js
+++ b/assets/ru_vue-webapp_options_index.md.DAPvAF00.js
@@ -1 +1 @@
-import{_ as e,o as a,c as i,a4 as l}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"Опции при создании приложения","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/index.md","filePath":"ru/vue-webapp/options/index.md","lastUpdated":1726474804000}'),t={name:"ru/vue-webapp/options/index.md"},o=l('

Опции при создании приложения

Доступные опции

На данный момент доступно конфигурирование следующих опций:

  • Layout - макет приложения
  • Header - верхняя часть в макете приложения
  • Footer - нижняя часть в макете приложения
  • Drawer - навигационная шторка
  • Navbar - навигационное меню (внутри шторки)
  • Github Pages deploy Workflow - GitHub Actions сценарий для билда и деплоя приложения на GitHub Pages
  • PWA - добавление Service worker и Манифеста к приложению
  • API модуль - абстрактный слой для связи с бэкенд API
  • JSON-RPC - адаптер для API модуля
  • Splash screen - экран-заставка во время старта приложения для улучшения UX
  • Google analytics - код для подключения статистики
  • Open graph - мета тэги для построения сниппетов соцсетями

Доступно по умолчанию

  • Dark theme - темная тема. Все подключаемые компоненты поддерживают переключение тем
  • BaseIcon - компонент иконки с возможностью динамичного указания имени
  • BaseToggle - компонент переключателя

В разработке

  • Глобальный прелоадер
  • i18n - интернационализация приложения с помощью различных вариантов i18n библиотек.

В планах

  • Онлайн витрина для динамичного тестирования различных вариантов частей приложения и функционала
  • Расширение числа вариантов layout, header, footer и других компонент
  • Auth - каркас модуля для аутентификации на JWT токенах, включая различные варианты форм регистрации и логина
  • Интеграция Auth с популярными сервис провайдерами (Firebase и др.)
  • GitHub Actions для деплоя приложения на различные сервисы (Vercel, Heroku, Firesbase) и другие полезные CI/CD сценарии.
  • Проверка при старте на свою новую версию и перезагрузка для избежания проблем с кэшем браузера
  • Themes - темы приложения (включают в себя как разные цветовые палитры, так и возможность менять другие CSS параметры для глубокой кастомизации шаблона и компонентов)
',10),r=[o];function n(s,u,c,d,h,p){return a(),i("div",null,r)}const b=e(t,[["render",n]]);export{m as __pageData,b as default}; +import{_ as e,o as a,c as i,a4 as l}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"Опции при создании приложения","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/index.md","filePath":"ru/vue-webapp/options/index.md","lastUpdated":1726505115000}'),t={name:"ru/vue-webapp/options/index.md"},o=l('

Опции при создании приложения

Доступные опции

На данный момент доступно конфигурирование следующих опций:

  • Layout - макет приложения
  • Header - верхняя часть в макете приложения
  • Footer - нижняя часть в макете приложения
  • Drawer - навигационная шторка
  • Navbar - навигационное меню (внутри шторки)
  • Github Pages deploy Workflow - GitHub Actions сценарий для билда и деплоя приложения на GitHub Pages
  • PWA - добавление Service worker и Манифеста к приложению
  • API модуль - абстрактный слой для связи с бэкенд API
  • JSON-RPC - адаптер для API модуля
  • Splash screen - экран-заставка во время старта приложения для улучшения UX
  • Google analytics - код для подключения статистики
  • Open graph - мета тэги для построения сниппетов соцсетями

Доступно по умолчанию

  • Dark theme - темная тема. Все подключаемые компоненты поддерживают переключение тем
  • BaseIcon - компонент иконки с возможностью динамичного указания имени
  • BaseToggle - компонент переключателя

В разработке

  • Глобальный прелоадер
  • i18n - интернационализация приложения с помощью различных вариантов i18n библиотек.

В планах

  • Онлайн витрина для динамичного тестирования различных вариантов частей приложения и функционала
  • Расширение числа вариантов layout, header, footer и других компонент
  • Auth - каркас модуля для аутентификации на JWT токенах, включая различные варианты форм регистрации и логина
  • Интеграция Auth с популярными сервис провайдерами (Firebase и др.)
  • GitHub Actions для деплоя приложения на различные сервисы (Vercel, Heroku, Firesbase) и другие полезные CI/CD сценарии.
  • Проверка при старте на свою новую версию и перезагрузка для избежания проблем с кэшем браузера
  • Themes - темы приложения (включают в себя как разные цветовые палитры, так и возможность менять другие CSS параметры для глубокой кастомизации шаблона и компонентов)
',10),r=[o];function n(s,u,c,d,h,p){return a(),i("div",null,r)}const b=e(t,[["render",n]]);export{m as __pageData,b as default}; diff --git a/assets/ru_vue-webapp_options_index.md.BxEUg1hK.lean.js b/assets/ru_vue-webapp_options_index.md.DAPvAF00.lean.js similarity index 91% rename from assets/ru_vue-webapp_options_index.md.BxEUg1hK.lean.js rename to assets/ru_vue-webapp_options_index.md.DAPvAF00.lean.js index 68331d430..77c21aa1c 100644 --- a/assets/ru_vue-webapp_options_index.md.BxEUg1hK.lean.js +++ b/assets/ru_vue-webapp_options_index.md.DAPvAF00.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as i,a4 as l}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"Опции при создании приложения","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/index.md","filePath":"ru/vue-webapp/options/index.md","lastUpdated":1726474804000}'),t={name:"ru/vue-webapp/options/index.md"},o=l("",10),r=[o];function n(s,u,c,d,h,p){return a(),i("div",null,r)}const b=e(t,[["render",n]]);export{m as __pageData,b as default}; +import{_ as e,o as a,c as i,a4 as l}from"./chunks/framework.B8KxSsRZ.js";const m=JSON.parse('{"title":"Опции при создании приложения","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/index.md","filePath":"ru/vue-webapp/options/index.md","lastUpdated":1726505115000}'),t={name:"ru/vue-webapp/options/index.md"},o=l("",10),r=[o];function n(s,u,c,d,h,p){return a(),i("div",null,r)}const b=e(t,[["render",n]]);export{m as __pageData,b as default}; diff --git a/assets/ru_vue-webapp_options_layout-main.md.CaXblCmP.js b/assets/ru_vue-webapp_options_layout-main.md.gu3YKsMu.js similarity index 96% rename from assets/ru_vue-webapp_options_layout-main.md.CaXblCmP.js rename to assets/ru_vue-webapp_options_layout-main.md.gu3YKsMu.js index 290146872..363ea6dec 100644 --- a/assets/ru_vue-webapp_options_layout-main.md.CaXblCmP.js +++ b/assets/ru_vue-webapp_options_layout-main.md.gu3YKsMu.js @@ -1 +1 @@ -import{_ as e,o,c as a,a4 as t,aq as n}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"MainLayout","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/layout-main.md","filePath":"ru/vue-webapp/options/layout-main.md","lastUpdated":1726474804000}'),i={name:"ru/vue-webapp/options/layout-main.md"},r=t('

MainLayout

Стандартный макет с хедером, футером и сайдбаром в notebook и desktop режимах. В tablet и mobile режимах сайдбар выезжает слева при нажатии на "гамбургер" иконку.

image

AppSidebar виден в режимах notebook и desktop, и скрывается в tablet и mobile

Routing

Смена содержимого центральной панели обеспечивается через маршруты vue-router

',6),c=[r];function d(p,s,u,l,m,_){return o(),a("div",null,c)}const g=e(i,[["render",d]]);export{h as __pageData,g as default}; +import{_ as e,o,c as a,a4 as t,aq as n}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"MainLayout","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/layout-main.md","filePath":"ru/vue-webapp/options/layout-main.md","lastUpdated":1726505115000}'),i={name:"ru/vue-webapp/options/layout-main.md"},r=t('

MainLayout

Стандартный макет с хедером, футером и сайдбаром в notebook и desktop режимах. В tablet и mobile режимах сайдбар выезжает слева при нажатии на "гамбургер" иконку.

image

AppSidebar виден в режимах notebook и desktop, и скрывается в tablet и mobile

Routing

Смена содержимого центральной панели обеспечивается через маршруты vue-router

',6),c=[r];function d(p,s,u,l,m,_){return o(),a("div",null,c)}const g=e(i,[["render",d]]);export{h as __pageData,g as default}; diff --git a/assets/ru_vue-webapp_options_layout-main.md.CaXblCmP.lean.js b/assets/ru_vue-webapp_options_layout-main.md.gu3YKsMu.lean.js similarity index 90% rename from assets/ru_vue-webapp_options_layout-main.md.CaXblCmP.lean.js rename to assets/ru_vue-webapp_options_layout-main.md.gu3YKsMu.lean.js index 4daa06266..616085178 100644 --- a/assets/ru_vue-webapp_options_layout-main.md.CaXblCmP.lean.js +++ b/assets/ru_vue-webapp_options_layout-main.md.gu3YKsMu.lean.js @@ -1 +1 @@ -import{_ as e,o,c as a,a4 as t,aq as n}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"MainLayout","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/layout-main.md","filePath":"ru/vue-webapp/options/layout-main.md","lastUpdated":1726474804000}'),i={name:"ru/vue-webapp/options/layout-main.md"},r=t("",6),c=[r];function d(p,s,u,l,m,_){return o(),a("div",null,c)}const g=e(i,[["render",d]]);export{h as __pageData,g as default}; +import{_ as e,o,c as a,a4 as t,aq as n}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"MainLayout","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/layout-main.md","filePath":"ru/vue-webapp/options/layout-main.md","lastUpdated":1726505115000}'),i={name:"ru/vue-webapp/options/layout-main.md"},r=t("",6),c=[r];function d(p,s,u,l,m,_){return o(),a("div",null,c)}const g=e(i,[["render",d]]);export{h as __pageData,g as default}; diff --git a/assets/ru_vue-webapp_options_layout-one-column.md.Bf87ByLC.js b/assets/ru_vue-webapp_options_layout-one-column.md.HUveRMYE.js similarity index 95% rename from assets/ru_vue-webapp_options_layout-one-column.md.Bf87ByLC.js rename to assets/ru_vue-webapp_options_layout-one-column.md.HUveRMYE.js index cf875dfad..18356ba27 100644 --- a/assets/ru_vue-webapp_options_layout-one-column.md.Bf87ByLC.js +++ b/assets/ru_vue-webapp_options_layout-one-column.md.HUveRMYE.js @@ -1 +1 @@ -import{_ as e,o,c as t,a4 as a,ar as n}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"OneColumnLayout","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/layout-one-column.md","filePath":"ru/vue-webapp/options/layout-one-column.md","lastUpdated":1726474804000}'),c={name:"ru/vue-webapp/options/layout-one-column.md"},u=a('

OneColumnLayout

Аналогичен MainLayout, но без сайдбара в notebook и desktop режимах. Может применяться, например, если вся навигация помещается в хедер. В tablet и mobile режимах сайдбар также выезжает при нажатии на "гамбургер" иконку.

image

В обоих случаях максимальная ширина лэйаута устанавливается CSS переменной --vwa-layout-max-width.

',4),p=[u];function l(m,d,s,i,r,_){return o(),t("div",null,p)}const b=e(c,[["render",l]]);export{h as __pageData,b as default}; +import{_ as e,o,c as t,a4 as a,ar as n}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"OneColumnLayout","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/layout-one-column.md","filePath":"ru/vue-webapp/options/layout-one-column.md","lastUpdated":1726505115000}'),c={name:"ru/vue-webapp/options/layout-one-column.md"},u=a('

OneColumnLayout

Аналогичен MainLayout, но без сайдбара в notebook и desktop режимах. Может применяться, например, если вся навигация помещается в хедер. В tablet и mobile режимах сайдбар также выезжает при нажатии на "гамбургер" иконку.

image

В обоих случаях максимальная ширина лэйаута устанавливается CSS переменной --vwa-layout-max-width.

',4),p=[u];function l(m,d,s,i,r,_){return o(),t("div",null,p)}const b=e(c,[["render",l]]);export{h as __pageData,b as default}; diff --git a/assets/ru_vue-webapp_options_layout-one-column.md.Bf87ByLC.lean.js b/assets/ru_vue-webapp_options_layout-one-column.md.HUveRMYE.lean.js similarity index 91% rename from assets/ru_vue-webapp_options_layout-one-column.md.Bf87ByLC.lean.js rename to assets/ru_vue-webapp_options_layout-one-column.md.HUveRMYE.lean.js index ceb2d87b4..85751fbff 100644 --- a/assets/ru_vue-webapp_options_layout-one-column.md.Bf87ByLC.lean.js +++ b/assets/ru_vue-webapp_options_layout-one-column.md.HUveRMYE.lean.js @@ -1 +1 @@ -import{_ as e,o,c as t,a4 as a,ar as n}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"OneColumnLayout","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/layout-one-column.md","filePath":"ru/vue-webapp/options/layout-one-column.md","lastUpdated":1726474804000}'),c={name:"ru/vue-webapp/options/layout-one-column.md"},u=a("",4),p=[u];function l(m,d,s,i,r,_){return o(),t("div",null,p)}const b=e(c,[["render",l]]);export{h as __pageData,b as default}; +import{_ as e,o,c as t,a4 as a,ar as n}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"OneColumnLayout","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/layout-one-column.md","filePath":"ru/vue-webapp/options/layout-one-column.md","lastUpdated":1726505115000}'),c={name:"ru/vue-webapp/options/layout-one-column.md"},u=a("",4),p=[u];function l(m,d,s,i,r,_){return o(),t("div",null,p)}const b=e(c,[["render",l]]);export{h as __pageData,b as default}; diff --git a/assets/ru_vue-webapp_options_navbar.md.4YLhFVtE.js b/assets/ru_vue-webapp_options_navbar.md.4YLhFVtE.js deleted file mode 100644 index 8b32bd4aa..000000000 --- a/assets/ru_vue-webapp_options_navbar.md.4YLhFVtE.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,o as e,c as t,a4 as r,as as n,at as o}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"Navbar","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/navbar.md","filePath":"ru/vue-webapp/options/navbar.md","lastUpdated":1726474804000}'),i={name:"ru/vue-webapp/options/navbar.md"},p=r('

Navbar

Navbar находится внутри NavigationDrawer

На данный момент можно выбрать из двух видов:

SimpleNavbar

image

MantineSimpleNavbar

image

',7),d=[p];function s(v,m,c,l,_,b){return e(),t("div",null,d)}const u=a(i,[["render",s],["__scopeId","data-v-8813ef85"]]);export{h as __pageData,u as default}; diff --git a/assets/ru_vue-webapp_options_navbar.md.B3X51tTB.js b/assets/ru_vue-webapp_options_navbar.md.B3X51tTB.js new file mode 100644 index 000000000..69179287a --- /dev/null +++ b/assets/ru_vue-webapp_options_navbar.md.B3X51tTB.js @@ -0,0 +1 @@ +import{_ as a,o as e,c as t,a4 as r,as as n,at as o}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Navbar","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/navbar.md","filePath":"ru/vue-webapp/options/navbar.md","lastUpdated":1726505115000}'),i={name:"ru/vue-webapp/options/navbar.md"},c=r('

Navbar

Navbar находится внутри NavigationDrawer

На данный момент можно выбрать из двух видов:

SimpleNavbar

image

MantineSimpleNavbar

image

',7),p=[c];function b(d,s,v,m,l,_){return e(),t("div",null,p)}const g=a(i,[["render",b],["__scopeId","data-v-a5c432b9"]]);export{u as __pageData,g as default}; diff --git a/assets/ru_vue-webapp_options_navbar.md.4YLhFVtE.lean.js b/assets/ru_vue-webapp_options_navbar.md.B3X51tTB.lean.js similarity index 53% rename from assets/ru_vue-webapp_options_navbar.md.4YLhFVtE.lean.js rename to assets/ru_vue-webapp_options_navbar.md.B3X51tTB.lean.js index 75e8eef73..feb0a3ebe 100644 --- a/assets/ru_vue-webapp_options_navbar.md.4YLhFVtE.lean.js +++ b/assets/ru_vue-webapp_options_navbar.md.B3X51tTB.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as t,a4 as r,as as n,at as o}from"./chunks/framework.B8KxSsRZ.js";const h=JSON.parse('{"title":"Navbar","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/navbar.md","filePath":"ru/vue-webapp/options/navbar.md","lastUpdated":1726474804000}'),i={name:"ru/vue-webapp/options/navbar.md"},p=r("",7),d=[p];function s(v,m,c,l,_,b){return e(),t("div",null,d)}const u=a(i,[["render",s],["__scopeId","data-v-8813ef85"]]);export{h as __pageData,u as default}; +import{_ as a,o as e,c as t,a4 as r,as as n,at as o}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Navbar","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/navbar.md","filePath":"ru/vue-webapp/options/navbar.md","lastUpdated":1726505115000}'),i={name:"ru/vue-webapp/options/navbar.md"},c=r("",7),p=[c];function b(d,s,v,m,l,_){return e(),t("div",null,p)}const g=a(i,[["render",b],["__scopeId","data-v-a5c432b9"]]);export{u as __pageData,g as default}; diff --git a/assets/ru_vue-webapp_options_open-graph.md.DGAiA5tI.js b/assets/ru_vue-webapp_options_open-graph.md.BUbYui8c.js similarity index 99% rename from assets/ru_vue-webapp_options_open-graph.md.DGAiA5tI.js rename to assets/ru_vue-webapp_options_open-graph.md.BUbYui8c.js index 503456093..5b7bec83a 100644 --- a/assets/ru_vue-webapp_options_open-graph.md.DGAiA5tI.js +++ b/assets/ru_vue-webapp_options_open-graph.md.BUbYui8c.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Google analytics","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/open-graph.md","filePath":"ru/vue-webapp/options/open-graph.md","lastUpdated":1726474804000}'),n={name:"ru/vue-webapp/options/open-graph.md"},h=t(`

Google analytics

Добавляет мета тэги Open graph для index.html.

html
<!-- Facebook Meta Tags -->
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Google analytics","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/open-graph.md","filePath":"ru/vue-webapp/options/open-graph.md","lastUpdated":1726505115000}'),n={name:"ru/vue-webapp/options/open-graph.md"},h=t(`

Google analytics

Добавляет мета тэги Open graph для index.html.

html
<!-- Facebook Meta Tags -->
 <!-- <meta property="og:url" content="" /> -->
 <meta property="og:type" content="website" />
 <meta property="og:title" content="-og:title-" />
diff --git a/assets/ru_vue-webapp_options_open-graph.md.DGAiA5tI.lean.js b/assets/ru_vue-webapp_options_open-graph.md.BUbYui8c.lean.js
similarity index 90%
rename from assets/ru_vue-webapp_options_open-graph.md.DGAiA5tI.lean.js
rename to assets/ru_vue-webapp_options_open-graph.md.BUbYui8c.lean.js
index 0b1b6523b..3bb478e1f 100644
--- a/assets/ru_vue-webapp_options_open-graph.md.DGAiA5tI.lean.js
+++ b/assets/ru_vue-webapp_options_open-graph.md.BUbYui8c.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Google analytics","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/open-graph.md","filePath":"ru/vue-webapp/options/open-graph.md","lastUpdated":1726474804000}'),n={name:"ru/vue-webapp/options/open-graph.md"},h=t("",4),p=[h];function k(l,e,E,r,g,o){return i(),a("div",null,p)}const F=s(n,[["render",k]]);export{y as __pageData,F as default};
+import{_ as s,o as i,c as a,a4 as t}from"./chunks/framework.B8KxSsRZ.js";const y=JSON.parse('{"title":"Google analytics","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/open-graph.md","filePath":"ru/vue-webapp/options/open-graph.md","lastUpdated":1726505115000}'),n={name:"ru/vue-webapp/options/open-graph.md"},h=t("",4),p=[h];function k(l,e,E,r,g,o){return i(),a("div",null,p)}const F=s(n,[["render",k]]);export{y as __pageData,F as default};
diff --git a/assets/ru_vue-webapp_options_pwa.md.gVrQJHcy.js b/assets/ru_vue-webapp_options_pwa.md.zIdv9RIk.js
similarity index 99%
rename from assets/ru_vue-webapp_options_pwa.md.gVrQJHcy.js
rename to assets/ru_vue-webapp_options_pwa.md.zIdv9RIk.js
index b6104ff0d..70b3299e6 100644
--- a/assets/ru_vue-webapp_options_pwa.md.gVrQJHcy.js
+++ b/assets/ru_vue-webapp_options_pwa.md.zIdv9RIk.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"PWA","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/pwa.md","filePath":"ru/vue-webapp/options/pwa.md","lastUpdated":1726474804000}'),t={name:"ru/vue-webapp/options/pwa.md"},n=e(`

PWA

В приложение интегрируются простые Manifest и Service worker и работают сразу без настройки.

manifest.json

Позволяет устанавливать приложение на домашний экран и запускать его в режиме, похожем на нативный (без окна браузера).

manifest.json должен быть отредактирован в соответствии с данными вашего приложения. Подробней о файле манифеста - web.dev.

json
{
+import{_ as s,o as i,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"PWA","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/pwa.md","filePath":"ru/vue-webapp/options/pwa.md","lastUpdated":1726505115000}'),t={name:"ru/vue-webapp/options/pwa.md"},n=e(`

PWA

В приложение интегрируются простые Manifest и Service worker и работают сразу без настройки.

manifest.json

Позволяет устанавливать приложение на домашний экран и запускать его в режиме, похожем на нативный (без окна браузера).

manifest.json должен быть отредактирован в соответствии с данными вашего приложения. Подробней о файле манифеста - web.dev.

json
{
   "description": "Acme Corporation webapp",
   "dir": "auto",
   "display": "standalone",
diff --git a/assets/ru_vue-webapp_options_pwa.md.gVrQJHcy.lean.js b/assets/ru_vue-webapp_options_pwa.md.zIdv9RIk.lean.js
similarity index 90%
rename from assets/ru_vue-webapp_options_pwa.md.gVrQJHcy.lean.js
rename to assets/ru_vue-webapp_options_pwa.md.zIdv9RIk.lean.js
index c2d0d83ce..d2fe2c2c2 100644
--- a/assets/ru_vue-webapp_options_pwa.md.gVrQJHcy.lean.js
+++ b/assets/ru_vue-webapp_options_pwa.md.zIdv9RIk.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"PWA","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/pwa.md","filePath":"ru/vue-webapp/options/pwa.md","lastUpdated":1726474804000}'),t={name:"ru/vue-webapp/options/pwa.md"},n=e("",11),p=[n];function h(l,k,o,r,E,d){return i(),a("div",null,p)}const g=s(t,[["render",h]]);export{u as __pageData,g as default};
+import{_ as s,o as i,c as a,a4 as e}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"PWA","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/pwa.md","filePath":"ru/vue-webapp/options/pwa.md","lastUpdated":1726505115000}'),t={name:"ru/vue-webapp/options/pwa.md"},n=e("",11),p=[n];function h(l,k,o,r,E,d){return i(),a("div",null,p)}const g=s(t,[["render",h]]);export{u as __pageData,g as default};
diff --git a/assets/ru_vue-webapp_options_splash-screen.md.BCpLa88S.js b/assets/ru_vue-webapp_options_splash-screen.md.BCpLa88S.js
deleted file mode 100644
index b4bcf7d89..000000000
--- a/assets/ru_vue-webapp_options_splash-screen.md.BCpLa88S.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as e,o as a,c as t,a4 as s,au as d}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Splash screen","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/splash-screen.md","filePath":"ru/vue-webapp/options/splash-screen.md","lastUpdated":1726474804000}'),o={name:"ru/vue-webapp/options/splash-screen.md"},p=s('

Splash screen

Заставка при старте приложения вместо пустого экрана может повысить восприятие вашего приложения пользователями (UX) и укрепить узнаваемость вашего бренда.

image

Код заставки находится полностью в index.html. Контролируется CSS классом splash на body.

Убирается заставка в App.vue / onMounted() после загрузки всей необходимых для начала работы приложения ресурсов.

',5),n=[p];function c(r,_,i,l,m,h){return a(),t("div",null,n)}const v=e(o,[["render",c],["__scopeId","data-v-b4d24664"]]);export{u as __pageData,v as default}; diff --git a/assets/ru_vue-webapp_options_splash-screen.md.CWjv9Mjz.js b/assets/ru_vue-webapp_options_splash-screen.md.CWjv9Mjz.js new file mode 100644 index 000000000..06690a09e --- /dev/null +++ b/assets/ru_vue-webapp_options_splash-screen.md.CWjv9Mjz.js @@ -0,0 +1 @@ +import{_ as a,o as e,c as t,a4 as s,au as o}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Splash screen","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/splash-screen.md","filePath":"ru/vue-webapp/options/splash-screen.md","lastUpdated":1726505115000}'),p={name:"ru/vue-webapp/options/splash-screen.md"},n=s('

Splash screen

Заставка при старте приложения вместо пустого экрана может повысить восприятие вашего приложения пользователями (UX) и укрепить узнаваемость вашего бренда.

image

Код заставки находится полностью в index.html. Контролируется CSS классом splash на body.

Убирается заставка в App.vue / onMounted() после загрузки всей необходимых для начала работы приложения ресурсов.

',5),d=[n];function c(r,_,i,l,m,h){return e(),t("div",null,d)}const v=a(p,[["render",c],["__scopeId","data-v-064ba841"]]);export{u as __pageData,v as default}; diff --git a/assets/ru_vue-webapp_options_splash-screen.md.BCpLa88S.lean.js b/assets/ru_vue-webapp_options_splash-screen.md.CWjv9Mjz.lean.js similarity index 65% rename from assets/ru_vue-webapp_options_splash-screen.md.BCpLa88S.lean.js rename to assets/ru_vue-webapp_options_splash-screen.md.CWjv9Mjz.lean.js index 89ed04958..fd078b14e 100644 --- a/assets/ru_vue-webapp_options_splash-screen.md.BCpLa88S.lean.js +++ b/assets/ru_vue-webapp_options_splash-screen.md.CWjv9Mjz.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,a4 as s,au as d}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Splash screen","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/splash-screen.md","filePath":"ru/vue-webapp/options/splash-screen.md","lastUpdated":1726474804000}'),o={name:"ru/vue-webapp/options/splash-screen.md"},p=s("",5),n=[p];function c(r,_,i,l,m,h){return a(),t("div",null,n)}const v=e(o,[["render",c],["__scopeId","data-v-b4d24664"]]);export{u as __pageData,v as default}; +import{_ as a,o as e,c as t,a4 as s,au as o}from"./chunks/framework.B8KxSsRZ.js";const u=JSON.parse('{"title":"Splash screen","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/splash-screen.md","filePath":"ru/vue-webapp/options/splash-screen.md","lastUpdated":1726505115000}'),p={name:"ru/vue-webapp/options/splash-screen.md"},n=s("",5),d=[n];function c(r,_,i,l,m,h){return e(),t("div",null,d)}const v=a(p,[["render",c],["__scopeId","data-v-064ba841"]]);export{u as __pageData,v as default}; diff --git a/assets/ru_vue-webapp_options_themes.md.D8I7EZV6.js b/assets/ru_vue-webapp_options_themes.md.CgCVy2hI.js similarity index 99% rename from assets/ru_vue-webapp_options_themes.md.D8I7EZV6.js rename to assets/ru_vue-webapp_options_themes.md.CgCVy2hI.js index c6ad52a54..d17adc34c 100644 --- a/assets/ru_vue-webapp_options_themes.md.D8I7EZV6.js +++ b/assets/ru_vue-webapp_options_themes.md.CgCVy2hI.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,a4 as h}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Темы","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/themes.md","filePath":"ru/vue-webapp/options/themes.md","lastUpdated":1726474804000}'),n={name:"ru/vue-webapp/options/themes.md"},t=h(`

Темы

В приложении реализовано переключение светлой и тёмной тем. Все компоненты поддерживают переключение тем.

Темы управляются через CSS переменные, которые определены в файле vars.css. Выбранная пользователем тема запоминается в localStorage. За переключение тем отвечает компонент ThemeToggle

Возможна кастомизация темы и создание новых через переопределение CSS переменных, что рекомендуется делать в файле custom.scss:

css
:root {
+import{_ as s,o as i,c as a,a4 as h}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Темы","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/themes.md","filePath":"ru/vue-webapp/options/themes.md","lastUpdated":1726505115000}'),n={name:"ru/vue-webapp/options/themes.md"},t=h(`

Темы

В приложении реализовано переключение светлой и тёмной тем. Все компоненты поддерживают переключение тем.

Темы управляются через CSS переменные, которые определены в файле vars.css. Выбранная пользователем тема запоминается в localStorage. За переключение тем отвечает компонент ThemeToggle

Возможна кастомизация темы и создание новых через переопределение CSS переменных, что рекомендуется делать в файле custom.scss:

css
:root {
   --vwa-font-family-base: 'Roboto', sans-serif;
   --vwa-layout-max-width: 1280px;  
 
diff --git a/assets/ru_vue-webapp_options_themes.md.D8I7EZV6.lean.js b/assets/ru_vue-webapp_options_themes.md.CgCVy2hI.lean.js
similarity index 90%
rename from assets/ru_vue-webapp_options_themes.md.D8I7EZV6.lean.js
rename to assets/ru_vue-webapp_options_themes.md.CgCVy2hI.lean.js
index 928d689ac..376f4041d 100644
--- a/assets/ru_vue-webapp_options_themes.md.D8I7EZV6.lean.js
+++ b/assets/ru_vue-webapp_options_themes.md.CgCVy2hI.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,a4 as h}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Темы","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/themes.md","filePath":"ru/vue-webapp/options/themes.md","lastUpdated":1726474804000}'),n={name:"ru/vue-webapp/options/themes.md"},t=h("",5),k=[t];function p(l,e,E,r,g,d){return i(),a("div",null,k)}const c=s(n,[["render",p]]);export{F as __pageData,c as default};
+import{_ as s,o as i,c as a,a4 as h}from"./chunks/framework.B8KxSsRZ.js";const F=JSON.parse('{"title":"Темы","description":"","frontmatter":{"head":[["meta",{"name":"og:site_name","content":"Vue webapp builder"}],["meta",{"name":"og:image","content":"/images/vue-webapp-logo.png"}],["meta",{"name":"twitter:image","content":"/images/vue-webapp-logo.png"}]]},"headers":[],"relativePath":"ru/vue-webapp/options/themes.md","filePath":"ru/vue-webapp/options/themes.md","lastUpdated":1726505115000}'),n={name:"ru/vue-webapp/options/themes.md"},t=h("",5),k=[t];function p(l,e,E,r,g,d){return i(),a("div",null,k)}const c=s(n,[["render",p]]);export{F as __pageData,c as default};
diff --git a/assets/style.7_ciZCd4.css b/assets/style.BbPK6ONJ.css
similarity index 99%
rename from assets/style.7_ciZCd4.css
rename to assets/style.BbPK6ONJ.css
index cb95432b0..26dba2f32 100644
--- a/assets/style.7_ciZCd4.css
+++ b/assets/style.BbPK6ONJ.css
@@ -1 +1 @@
-@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:lang(zh){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, "PingFang SC", "Noto Sans CJK SC", "Noto Sans SC", "Heiti SC", "DengXian", "Microsoft YaHei", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{display:inline-block;margin:auto 2px -2px}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.vpi-social-discord{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418Z'/%3E%3C/svg%3E")}.vpi-social-facebook{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z'/%3E%3C/svg%3E")}.vpi-social-github{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")}.vpi-social-instagram{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.03.084c-1.277.06-2.149.264-2.91.563a5.874 5.874 0 0 0-2.124 1.388 5.878 5.878 0 0 0-1.38 2.127C.321 4.926.12 5.8.064 7.076.008 8.354-.005 8.764.001 12.023c.007 3.259.021 3.667.083 4.947.061 1.277.264 2.149.563 2.911.308.789.72 1.457 1.388 2.123a5.872 5.872 0 0 0 2.129 1.38c.763.295 1.636.496 2.913.552 1.278.056 1.689.069 4.947.063 3.257-.007 3.668-.021 4.947-.082 1.28-.06 2.147-.265 2.91-.563a5.881 5.881 0 0 0 2.123-1.388 5.881 5.881 0 0 0 1.38-2.129c.295-.763.496-1.636.551-2.912.056-1.28.07-1.69.063-4.948-.006-3.258-.02-3.667-.081-4.947-.06-1.28-.264-2.148-.564-2.911a5.892 5.892 0 0 0-1.387-2.123 5.857 5.857 0 0 0-2.128-1.38C19.074.322 18.202.12 16.924.066 15.647.009 15.236-.006 11.977 0 8.718.008 8.31.021 7.03.084m.14 21.693c-1.17-.05-1.805-.245-2.228-.408a3.736 3.736 0 0 1-1.382-.895 3.695 3.695 0 0 1-.9-1.378c-.165-.423-.363-1.058-.417-2.228-.06-1.264-.072-1.644-.08-4.848-.006-3.204.006-3.583.061-4.848.05-1.169.246-1.805.408-2.228.216-.561.477-.96.895-1.382a3.705 3.705 0 0 1 1.379-.9c.423-.165 1.057-.361 2.227-.417 1.265-.06 1.644-.072 4.848-.08 3.203-.006 3.583.006 4.85.062 1.168.05 1.804.244 2.227.408.56.216.96.475 1.382.895.421.42.681.817.9 1.378.165.422.362 1.056.417 2.227.06 1.265.074 1.645.08 4.848.005 3.203-.006 3.583-.061 4.848-.051 1.17-.245 1.805-.408 2.23-.216.56-.477.96-.896 1.38a3.705 3.705 0 0 1-1.378.9c-.422.165-1.058.362-2.226.418-1.266.06-1.645.072-4.85.079-3.204.007-3.582-.006-4.848-.06m9.783-16.192a1.44 1.44 0 1 0 1.437-1.442 1.44 1.44 0 0 0-1.437 1.442M5.839 12.012a6.161 6.161 0 1 0 12.323-.024 6.162 6.162 0 0 0-12.323.024M8 12.008A4 4 0 1 1 12.008 16 4 4 0 0 1 8 12.008'/%3E%3C/svg%3E")}.vpi-social-linkedin{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z'/%3E%3C/svg%3E")}.vpi-social-mastodon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z'/%3E%3C/svg%3E")}.vpi-social-npm{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z'/%3E%3C/svg%3E")}.vpi-social-slack{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z'/%3E%3C/svg%3E")}.vpi-social-twitter,.vpi-social-x{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z'/%3E%3C/svg%3E")}.vpi-social-youtube{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s}.vp-doc blockquote>p{margin:0;font-size:16px;color:var(--vp-c-text-2);transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-f7e6a420]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-f7e6a420],.VPBackdrop.fade-leave-to[data-v-f7e6a420]{opacity:0}.VPBackdrop.fade-leave-active[data-v-f7e6a420]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-f7e6a420]{display:none}}.NotFound[data-v-220621b2]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-220621b2]{padding:96px 32px 168px}}.code[data-v-220621b2]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-220621b2]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-220621b2]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-220621b2]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-220621b2]{padding-top:20px}.link[data-v-220621b2]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-220621b2]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-20b2d660]{position:relative;z-index:1}.nested[data-v-20b2d660]{padding-right:16px;padding-left:16px}.outline-link[data-v-20b2d660]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-20b2d660]:hover,.outline-link.active[data-v-20b2d660]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-20b2d660]{padding-left:13px}.VPDocAsideOutline[data-v-82f7ebc9]{display:none}.VPDocAsideOutline.has-outline[data-v-82f7ebc9]{display:block}.content[data-v-82f7ebc9]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-82f7ebc9]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-82f7ebc9]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-8a1c0c90]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-8a1c0c90]{flex-grow:1}.VPDocAside[data-v-8a1c0c90] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-8a1c0c90] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-8a1c0c90] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-d04b7ca3]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-d04b7ca3]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-f9b7cb1b]{margin-top:64px}.edit-info[data-v-f9b7cb1b]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-f9b7cb1b]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-f9b7cb1b]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-f9b7cb1b]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-f9b7cb1b]{margin-right:8px}.prev-next[data-v-f9b7cb1b]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-f9b7cb1b]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-f9b7cb1b]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-f9b7cb1b]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-f9b7cb1b]{margin-left:auto;text-align:right}.desc[data-v-f9b7cb1b]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-f9b7cb1b]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-bd65f111]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-bd65f111]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-bd65f111]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-bd65f111]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-bd65f111]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-bd65f111]{display:flex;justify-content:center}.VPDoc .aside[data-v-bd65f111]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-bd65f111]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-bd65f111]{max-width:1104px}}.container[data-v-bd65f111]{margin:0 auto;width:100%}.aside[data-v-bd65f111]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-bd65f111]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-bd65f111]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-bd65f111]::-webkit-scrollbar{display:none}.aside-curtain[data-v-bd65f111]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-bd65f111]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-bd65f111]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-bd65f111]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-bd65f111]{order:1;margin:0;min-width:640px}}.content-container[data-v-bd65f111]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-bd65f111]{max-width:688px}.VPButton[data-v-5a1289ff]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-5a1289ff]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-5a1289ff]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-5a1289ff]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-5a1289ff]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-5a1289ff]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-5a1289ff]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-5a1289ff]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-5a1289ff]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-5a1289ff]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-5a1289ff]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-5a1289ff]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-5a1289ff]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-b2acdd16]{display:none}.dark .VPImage.light[data-v-b2acdd16]{display:none}.VPHero[data-v-a6a4ce63]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-a6a4ce63]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-a6a4ce63]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-a6a4ce63]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-a6a4ce63]{flex-direction:row}}.main[data-v-a6a4ce63]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-a6a4ce63]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-a6a4ce63]{text-align:left}}@media (min-width: 960px){.main[data-v-a6a4ce63]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-a6a4ce63]{max-width:592px}}.name[data-v-a6a4ce63],.text[data-v-a6a4ce63]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-a6a4ce63],.VPHero.has-image .text[data-v-a6a4ce63]{margin:0 auto}.name[data-v-a6a4ce63]{color:var(--vp-home-hero-name-color)}.clip[data-v-a6a4ce63]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-a6a4ce63],.text[data-v-a6a4ce63]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-a6a4ce63],.text[data-v-a6a4ce63]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-a6a4ce63],.VPHero.has-image .text[data-v-a6a4ce63]{margin:0}}.tagline[data-v-a6a4ce63]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-a6a4ce63]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-a6a4ce63]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-a6a4ce63]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-a6a4ce63]{margin:0}}.actions[data-v-a6a4ce63]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-a6a4ce63]{justify-content:center}@media (min-width: 640px){.actions[data-v-a6a4ce63]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-a6a4ce63]{justify-content:flex-start}}.action[data-v-a6a4ce63]{flex-shrink:0;padding:6px}.image[data-v-a6a4ce63]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-a6a4ce63]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-a6a4ce63]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-a6a4ce63]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-a6a4ce63]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-a6a4ce63]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-a6a4ce63]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-a6a4ce63]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-a6a4ce63]{width:320px;height:320px}}[data-v-a6a4ce63] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-a6a4ce63] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-a6a4ce63] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-8391275c]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-8391275c]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-8391275c]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-8391275c]>.VPImage{margin-bottom:20px}.icon[data-v-8391275c]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-8391275c]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-8391275c]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-8391275c]{padding-top:8px}.link-text-value[data-v-8391275c]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-8391275c]{margin-left:6px}.VPFeatures[data-v-3c1373ab]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-3c1373ab]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-3c1373ab]{padding:0 64px}}.container[data-v-3c1373ab]{margin:0 auto;max-width:1152px}.items[data-v-3c1373ab]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-3c1373ab]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-3c1373ab],.item.grid-4[data-v-3c1373ab],.item.grid-6[data-v-3c1373ab]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-3c1373ab],.item.grid-4[data-v-3c1373ab]{width:50%}.item.grid-3[data-v-3c1373ab],.item.grid-6[data-v-3c1373ab]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-3c1373ab]{width:25%}}.container[data-v-672f3595]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-672f3595]{padding:0 48px}}@media (min-width: 960px){.container[data-v-672f3595]{width:100%;padding:0 64px}}.vp-doc[data-v-672f3595] .VPHomeSponsors,.vp-doc[data-v-672f3595] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-672f3595] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-672f3595] .VPHomeSponsors a,.vp-doc[data-v-672f3595] .VPTeamPage a{text-decoration:none}.VPHome[data-v-a0ef0bc1]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-a0ef0bc1]{margin-bottom:128px}}.VPContent[data-v-69cb45dd]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-69cb45dd]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-69cb45dd]{margin:0}@media (min-width: 960px){.VPContent[data-v-69cb45dd]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-69cb45dd]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-69cb45dd]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-63f649a4]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-63f649a4]{display:none}.VPFooter[data-v-63f649a4] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-63f649a4] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-63f649a4]{padding:32px}}.container[data-v-63f649a4]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-63f649a4],.copyright[data-v-63f649a4]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-1ec6ac20]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-1ec6ac20]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-1ec6ac20]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-1ec6ac20]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-1ec6ac20]{color:var(--vp-c-text-1)}.icon[data-v-1ec6ac20]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-1ec6ac20]{font-size:14px}.icon[data-v-1ec6ac20]{font-size:16px}}.open>.icon[data-v-1ec6ac20]{transform:rotate(90deg)}.items[data-v-1ec6ac20]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-1ec6ac20]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-1ec6ac20]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-1ec6ac20]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-1ec6ac20]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-1ec6ac20]{transition:all .2s ease-out}.flyout-leave-active[data-v-1ec6ac20]{transition:all .15s ease-in}.flyout-enter-from[data-v-1ec6ac20],.flyout-leave-to[data-v-1ec6ac20]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-cd52d3f7]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-cd52d3f7]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-cd52d3f7]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-cd52d3f7]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-cd52d3f7]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-cd52d3f7]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-cd52d3f7]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-cd52d3f7]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-cd52d3f7]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-cd52d3f7]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-cd52d3f7]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-cd52d3f7]{display:none}}.menu-icon[data-v-cd52d3f7]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-cd52d3f7]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-cd52d3f7]{padding:12px 32px 11px}}.VPSwitch[data-v-79f406f6]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-79f406f6]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-79f406f6]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-79f406f6]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-79f406f6] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-79f406f6] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-e51d7bc4]{opacity:1}.moon[data-v-e51d7bc4],.dark .sun[data-v-e51d7bc4]{opacity:0}.dark .moon[data-v-e51d7bc4]{opacity:1}.dark .VPSwitchAppearance[data-v-e51d7bc4] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-0e630b14]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-0e630b14]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-fb6e9438]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-fb6e9438]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-fb6e9438]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-fb6e9438]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-6aa4cfc1]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-6aa4cfc1]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-6aa4cfc1]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-6aa4cfc1]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-5251f9c9]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-5251f9c9] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-5251f9c9] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-5251f9c9] .group:last-child{padding-bottom:0}.VPMenu[data-v-5251f9c9] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-5251f9c9] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-5251f9c9] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-5251f9c9] .action{padding-left:24px}.VPFlyout[data-v-0fe5f390]{position:relative}.VPFlyout[data-v-0fe5f390]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-0fe5f390]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-0fe5f390]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-0fe5f390]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-0fe5f390]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-0fe5f390],.button[aria-expanded=true]+.menu[data-v-0fe5f390]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-0fe5f390]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-0fe5f390]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-0fe5f390]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-0fe5f390]{margin-right:0;font-size:16px}.text-icon[data-v-0fe5f390]{margin-left:4px;font-size:14px}.icon[data-v-0fe5f390]{font-size:20px;transition:fill .25s}.menu[data-v-0fe5f390]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-9146a764]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-9146a764]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-9146a764]>svg,.VPSocialLink[data-v-9146a764]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-cb91b013]{display:flex;justify-content:center}.VPNavBarExtra[data-v-1cde8183]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-1cde8183]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-1cde8183]{display:none}}.trans-title[data-v-1cde8183]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-1cde8183],.item.social-links[data-v-1cde8183]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-1cde8183]{min-width:176px}.appearance-action[data-v-1cde8183]{margin-right:-2px}.social-links-list[data-v-1cde8183]{margin:-4px -8px}.VPNavBarHamburger[data-v-f393de22]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-f393de22]{display:none}}.container[data-v-f393de22]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-f393de22]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-f393de22]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-f393de22]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-f393de22]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-f393de22]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-f393de22]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-f393de22],.VPNavBarHamburger.active:hover .middle[data-v-f393de22],.VPNavBarHamburger.active:hover .bottom[data-v-f393de22]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-f393de22],.middle[data-v-f393de22],.bottom[data-v-f393de22]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-f393de22]{top:0;left:0;transform:translate(0)}.middle[data-v-f393de22]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-f393de22]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-4feaec24]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-4feaec24],.VPNavBarMenuLink[data-v-4feaec24]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-cc0a843c]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-cc0a843c]{display:flex}}/*! @docsearch/css 3.6.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.30196078431372547);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}.DocSearch-Button-Key--pressed{transform:translate3d(0,1px,0);box-shadow:var(--docsearch-key-pressed-shadow)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-723a27a4]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-723a27a4]{display:flex;align-items:center}}.title[data-v-663a90b9]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-663a90b9]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-663a90b9]{border-bottom-color:var(--vp-c-divider)}}[data-v-663a90b9] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-016258cd]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-016258cd]{display:flex;align-items:center}}.title[data-v-016258cd]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-743a22c8]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .5s}.VPNavBar[data-v-743a22c8]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-743a22c8]:not(.home){background-color:transparent}.VPNavBar[data-v-743a22c8]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-743a22c8]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-743a22c8]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-743a22c8]{padding:0}}.container[data-v-743a22c8]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-743a22c8],.container>.content[data-v-743a22c8]{pointer-events:none}.container[data-v-743a22c8] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-743a22c8]{max-width:100%}}.title[data-v-743a22c8]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-743a22c8]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-743a22c8]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-743a22c8]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-743a22c8]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-743a22c8]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-743a22c8]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-743a22c8]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-743a22c8]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-743a22c8]{column-gap:.5rem}}.menu+.translations[data-v-743a22c8]:before,.menu+.appearance[data-v-743a22c8]:before,.menu+.social-links[data-v-743a22c8]:before,.translations+.appearance[data-v-743a22c8]:before,.appearance+.social-links[data-v-743a22c8]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-743a22c8]:before,.translations+.appearance[data-v-743a22c8]:before{margin-right:16px}.appearance+.social-links[data-v-743a22c8]:before{margin-left:16px}.social-links[data-v-743a22c8]{margin-right:-8px}.divider[data-v-743a22c8]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-743a22c8]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-743a22c8]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-743a22c8]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-743a22c8]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-743a22c8]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-743a22c8]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-5995df10]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-5995df10]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-a2db3dc7]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-a2db3dc7]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-afa013c3]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-afa013c3]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-6eb8a2e5]{display:block}.title[data-v-6eb8a2e5]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-7853c142]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-7853c142]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-7853c142]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-7853c142]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-7853c142]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-7853c142]{transform:rotate(45deg)}.button[data-v-7853c142]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-7853c142]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-7853c142]{transition:transform .25s}.group[data-v-7853c142]:first-child{padding-top:0}.group+.group[data-v-7853c142],.group+.item[data-v-7853c142]{padding-top:4px}.VPNavScreenTranslations[data-v-0dc36c90]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-0dc36c90]{height:auto}.title[data-v-0dc36c90]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-0dc36c90]{font-size:16px}.icon.lang[data-v-0dc36c90]{margin-right:8px}.icon.chevron[data-v-0dc36c90]{margin-left:4px}.list[data-v-0dc36c90]{padding:4px 0 0 24px}.link[data-v-0dc36c90]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-391d6e9c]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 1px);right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .5s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-391d6e9c],.VPNavScreen.fade-leave-active[data-v-391d6e9c]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-391d6e9c],.VPNavScreen.fade-leave-active .container[data-v-391d6e9c]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-391d6e9c],.VPNavScreen.fade-leave-to[data-v-391d6e9c]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-391d6e9c],.VPNavScreen.fade-leave-to .container[data-v-391d6e9c]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-391d6e9c]{display:none}}.container[data-v-391d6e9c]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-391d6e9c],.menu+.appearance[data-v-391d6e9c],.translations+.appearance[data-v-391d6e9c]{margin-top:24px}.menu+.social-links[data-v-391d6e9c]{margin-top:16px}.appearance+.social-links[data-v-391d6e9c]{margin-top:16px}.VPNav[data-v-1186b740]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-1186b740]{position:fixed}}.VPSidebarItem.level-0[data-v-28370b85]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-28370b85]{padding-bottom:10px}.item[data-v-28370b85]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-28370b85]{cursor:pointer}.indicator[data-v-28370b85]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-28370b85],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-28370b85],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-28370b85],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-28370b85]{background-color:var(--vp-c-brand-1)}.link[data-v-28370b85]{display:flex;align-items:center;flex-grow:1}.text[data-v-28370b85]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-28370b85]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-28370b85],.VPSidebarItem.level-2 .text[data-v-28370b85],.VPSidebarItem.level-3 .text[data-v-28370b85],.VPSidebarItem.level-4 .text[data-v-28370b85],.VPSidebarItem.level-5 .text[data-v-28370b85]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-28370b85],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-28370b85],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-28370b85],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-28370b85],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-28370b85],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-28370b85]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-28370b85],.VPSidebarItem.level-1.has-active>.item>.text[data-v-28370b85],.VPSidebarItem.level-2.has-active>.item>.text[data-v-28370b85],.VPSidebarItem.level-3.has-active>.item>.text[data-v-28370b85],.VPSidebarItem.level-4.has-active>.item>.text[data-v-28370b85],.VPSidebarItem.level-5.has-active>.item>.text[data-v-28370b85],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-28370b85],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-28370b85],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-28370b85],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-28370b85],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-28370b85],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-28370b85]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-28370b85],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-28370b85],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-28370b85],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-28370b85],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-28370b85],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-28370b85]{color:var(--vp-c-brand-1)}.caret[data-v-28370b85]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-28370b85]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-28370b85]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-28370b85]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-28370b85]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-28370b85],.VPSidebarItem.level-2 .items[data-v-28370b85],.VPSidebarItem.level-3 .items[data-v-28370b85],.VPSidebarItem.level-4 .items[data-v-28370b85],.VPSidebarItem.level-5 .items[data-v-28370b85]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-28370b85]{display:none}.VPSidebar[data-v-dfb98cb2]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-dfb98cb2]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-dfb98cb2]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-dfb98cb2]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-dfb98cb2]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-dfb98cb2]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-dfb98cb2]{outline:0}.group+.group[data-v-dfb98cb2]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-dfb98cb2]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSkipLink[data-v-97ec2f41]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-97ec2f41]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-97ec2f41]{top:14px;left:16px}}.Layout[data-v-f34fde7e]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-75fc4f02]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-75fc4f02]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-75fc4f02]{margin:128px 0}}.VPHomeSponsors[data-v-75fc4f02]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-75fc4f02]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-75fc4f02]{padding:0 64px}}.container[data-v-75fc4f02]{margin:0 auto;max-width:1152px}.love[data-v-75fc4f02]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-75fc4f02]{display:inline-block}.message[data-v-75fc4f02]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-75fc4f02]{padding-top:32px}.action[data-v-75fc4f02]{padding-top:40px;text-align:center}.VPTeamPage[data-v-0f719592]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-0f719592]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-0f719592-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-0f719592-s],.VPTeamMembers+.VPTeamPageSection[data-v-0f719592-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-0f719592-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-0f719592-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-0f719592-s],.VPTeamMembers+.VPTeamPageSection[data-v-0f719592-s]{margin-top:96px}}.VPTeamMembers[data-v-0f719592-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-0f719592-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-0f719592-s]{padding:0 64px}}.VPTeamPageTitle[data-v-e10ac9eb]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-e10ac9eb]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-e10ac9eb]{padding:80px 64px 48px}}.title[data-v-e10ac9eb]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-e10ac9eb]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-e10ac9eb]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-e10ac9eb]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-8901d4ae]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-8901d4ae]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-8901d4ae]{padding:0 64px}}.title[data-v-8901d4ae]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-8901d4ae]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-8901d4ae]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-8901d4ae]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-8901d4ae]{padding-top:40px}.VPTeamMembersItem[data-v-caefe9fe]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-caefe9fe]{padding:32px}.VPTeamMembersItem.small .data[data-v-caefe9fe]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-caefe9fe]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-caefe9fe]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-caefe9fe]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-caefe9fe]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-caefe9fe]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-caefe9fe]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-caefe9fe]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-caefe9fe]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-caefe9fe]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-caefe9fe]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-caefe9fe]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-caefe9fe]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-caefe9fe]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-caefe9fe]{text-align:center}.avatar[data-v-caefe9fe]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-caefe9fe]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-caefe9fe]{margin:0;font-weight:600}.affiliation[data-v-caefe9fe]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-caefe9fe]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-caefe9fe]:hover{color:var(--vp-c-brand-1)}.desc[data-v-caefe9fe]{margin:0 auto}.desc[data-v-caefe9fe] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-caefe9fe]{display:flex;justify-content:center;height:56px}.sp-link[data-v-caefe9fe]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-caefe9fe]:hover,.sp .sp-link.link[data-v-caefe9fe]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-caefe9fe]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-c6371da1]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-c6371da1]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-c6371da1]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-c6371da1]{max-width:876px}.VPTeamMembers.medium .container[data-v-c6371da1]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-c6371da1]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-c6371da1]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-c6371da1]{max-width:760px}.container[data-v-c6371da1]{display:grid;gap:24px;margin:0 auto;max-width:1152px}.custom-block.details{margin:2em 0}.custom-block.details summary{font-size:1.3em;padding-right:24px;width:100%;position:relative;cursor:pointer;list-style:none;outline:0;margin-right:1em}.custom-block.details summary::-webkit-details-marker{display:none}.custom-block.details summary:after{content:"+";color:var(--vp-custom-block-details-text);position:absolute;font-size:2rem;line-height:0;top:50%;right:0;font-weight:200;transform-origin:center;transition:.3s linear}.custom-block.details[open] p{font-size:1.2em;line-height:1.6em;margin:1.2em 0}.custom-block.details[open] summary{margin-bottom:1.3em}.custom-block.details[open] summary:after{transform:rotate(45deg);right:-2px;top:calc(50% + 1px)}.custom-block.details[open] summary~*{opacity:1;animation:open .3s ease-in-out}.custom-block.details[open] ul,.custom-block.details[open] ol,.custom-block.details[open] blockquote p,.custom-block.details[open] pre code{font-size:1.1em}@media (max-width: 768px){.custom-block.details[open] p{font-size:1.1em}}@keyframes open{0%{opacity:0}to{opacity:1}}body{overflow-y:scroll;--vp-custom-block-code-font-size: 14px}:not(.dark) body{--vp-custom-block-details-text: #54545c}body .vp-doc h1{margin-bottom:1em}body .vp-doc p img{margin:auto}body .is-home .main .text{line-height:44px;font-size:38px}body .is-home .has-image .main .name{font-size:68px;margin-bottom:30px}body .social-links a:last-child{width:unset}body .social-links a:last-child svg{width:80px!important}.arty-crafty .VPNavBarTranslations,.arty-crafty .VPMenu .group.translations,.textbook .VPNavBarTranslations,.textbook .VPMenu .group.translations,.articles .VPNavBarTranslations,.articles .VPMenu .group.translations{display:none}.arty-crafty img:not(.logo){border:1px solid #ddd}.VPSidebarItem.level-0 h2.text{font-family:Office Code Pro,Source Code Pro,Menlo,monospace;text-transform:uppercase;letter-spacing:.07em}:root{--toastify-color-light:#fff;--toastify-color-dark:#121212;--toastify-color-info:#3498db;--toastify-color-success:#07bc0c;--toastify-color-warning:#f1c40f;--toastify-color-error:#e74c3c;--toastify-color-transparent:hsla(0,0%,100%,.7);--toastify-icon-color-info:var(--toastify-color-info);--toastify-icon-color-success:var(--toastify-color-success);--toastify-icon-color-warning:var(--toastify-color-warning);--toastify-icon-color-error:var(--toastify-color-error);--toastify-toast-width:320px;--toastify-toast-background:#fff;--toastify-toast-min-height:64px;--toastify-toast-max-height:800px;--toastify-font-family:sans-serif;--toastify-z-index:9999;--toastify-text-color-light:#757575;--toastify-text-color-dark:#fff;--toastify-text-color-info:#fff;--toastify-text-color-success:#fff;--toastify-text-color-warning:#fff;--toastify-text-color-error:#fff;--toastify-spinner-color:#616161;--toastify-spinner-color-empty-area:#e0e0e0;--toastify-color-progress-light:linear-gradient(90deg,#4cd964,#5ac8fa,#007aff,#34aadc,#5856d6,#ff2d55);--toastify-color-progress-dark:#bb86fc;--toastify-color-progress-info:var(--toastify-color-info);--toastify-color-progress-success:var(--toastify-color-success);--toastify-color-progress-warning:var(--toastify-color-warning);--toastify-color-progress-error:var(--toastify-color-error);--toastify-color-progress-colored:#ddd}.Toastify__toast-container{box-sizing:border-box;color:#fff;padding:4px;position:fixed;-webkit-transform:translate3d(0,0,var(--toastify-z-index) px);transform:translate3d(0,0,var(--toastify-z-index) px);width:var(--toastify-toast-width);z-index:var(--toastify-z-index)}.Toastify__toast-container--top-left{left:1em;top:1em}.Toastify__toast-container--top-center{left:50%;top:1em;-webkit-transform:translateX(-50%);transform:translate(-50%)}.Toastify__toast-container--top-right{right:1em;top:1em}.Toastify__toast-container--bottom-left{bottom:1em;left:1em}.Toastify__toast-container--bottom-center{bottom:1em;left:50%;-webkit-transform:translateX(-50%);transform:translate(-50%)}.Toastify__toast-container--bottom-right{bottom:1em;right:1em}@media only screen and (max-width:480px){.Toastify__toast-container{left:0;margin:0;padding:0;width:100vw}.Toastify__toast-container--top-center,.Toastify__toast-container--top-left,.Toastify__toast-container--top-right{top:0;-webkit-transform:translateX(0);transform:translate(0)}.Toastify__toast-container--bottom-center,.Toastify__toast-container--bottom-left,.Toastify__toast-container--bottom-right{bottom:0;-webkit-transform:translateX(0);transform:translate(0)}.Toastify__toast-container--rtl{left:auto;right:0}}.Toastify__toast{border-radius:4px;box-shadow:0 1px 10px #0000001a,0 2px 15px #0000000d;box-sizing:border-box;cursor:pointer;direction:ltr;display:flex;font-family:var(--toastify-font-family);justify-content:space-between;margin-bottom:1rem;max-height:var(--toastify-toast-max-height);min-height:var(--toastify-toast-min-height);overflow:hidden;padding:8px;position:relative;z-index:0}.Toastify__toast--rtl{direction:rtl}.Toastify__toast-body{align-items:center;display:flex;flex:1 1 auto;margin:auto 0;padding:6px;white-space:pre-wrap}.Toastify__toast-body>div:last-child{flex:1}.Toastify__toast-icon{display:flex;flex-shrink:0;-webkit-margin-end:10px;margin-inline-end:10px;width:20px}.Toastify--animate{-webkit-animation-duration:.7s;animation-duration:.7s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.Toastify--animate-icon{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both}@media only screen and (max-width:480px){.Toastify__toast{border-radius:0;margin-bottom:0}}.Toastify__toast-theme--dark{background:var(--toastify-color-dark);color:var(--toastify-text-color-dark)}.Toastify__toast-theme--colored.Toastify__toast--default,.Toastify__toast-theme--light{background:var(--toastify-color-light);color:var(--toastify-text-color-light)}.Toastify__toast-theme--colored.Toastify__toast--info{background:var(--toastify-color-info);color:var(--toastify-text-color-info)}.Toastify__toast-theme--colored.Toastify__toast--success{background:var(--toastify-color-success);color:var(--toastify-text-color-success)}.Toastify__toast-theme--colored.Toastify__toast--warning{background:var(--toastify-color-warning);color:var(--toastify-text-color-warning)}.Toastify__toast-theme--colored.Toastify__toast--error{background:var(--toastify-color-error);color:var(--toastify-text-color-error)}.Toastify__progress-bar-theme--light{background:var(--toastify-color-progress-light)}.Toastify__progress-bar-theme--dark{background:var(--toastify-color-progress-dark)}.Toastify__progress-bar--info{background:var(--toastify-color-progress-info)}.Toastify__progress-bar--success{background:var(--toastify-color-progress-success)}.Toastify__progress-bar--warning{background:var(--toastify-color-progress-warning)}.Toastify__progress-bar--error{background:var(--toastify-color-progress-error)}.Toastify__progress-bar-theme--colored.Toastify__progress-bar--default{background:var(--toastify-color-progress-colored)}.Toastify__progress-bar-theme--colored.Toastify__progress-bar--error,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--info,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--success,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--warning{background:var(--toastify-color-transparent)}.Toastify__close-button{align-self:flex-start;background:transparent;border:none;color:#fff;cursor:pointer;opacity:.7;outline:none;padding:0;transition:.3s ease}.Toastify__close-button--light{color:#000;opacity:.3}.Toastify__close-button>svg{fill:currentcolor;height:16px;width:14px}.Toastify__close-button:focus,.Toastify__close-button:hover{opacity:1}@-webkit-keyframes Toastify__trackProgress{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}to{-webkit-transform:scaleX(0);transform:scaleX(0)}}@keyframes Toastify__trackProgress{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}to{-webkit-transform:scaleX(0);transform:scaleX(0)}}.Toastify__progress-bar{bottom:0;height:5px;left:0;opacity:.7;position:absolute;-webkit-transform-origin:left;transform-origin:left;width:100%;z-index:var(--toastify-z-index)}.Toastify__progress-bar--animated{-webkit-animation:Toastify__trackProgress linear 1 forwards;animation:Toastify__trackProgress linear 1 forwards}.Toastify__progress-bar--controlled{transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.Toastify__progress-bar--rtl{left:auto;right:0;-webkit-transform-origin:right;transform-origin:right}.Toastify__spinner{-webkit-animation:Toastify__spin .65s linear infinite;animation:Toastify__spin .65s linear infinite;border:2px solid;border-color:var(--toastify-spinner-color-empty-area);border-radius:100%;border-right-color:var(--toastify-spinner-color);box-sizing:border-box;height:20px;width:20px}@-webkit-keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes Toastify__bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@-webkit-keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes Toastify__bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@-webkit-keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes Toastify__bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@-webkit-keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes Toastify__bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.Toastify__bounce-enter--bottom-left,.Toastify__bounce-enter--top-left{-webkit-animation-name:Toastify__bounceInLeft;animation-name:Toastify__bounceInLeft}.Toastify__bounce-enter--bottom-right,.Toastify__bounce-enter--top-right{-webkit-animation-name:Toastify__bounceInRight;animation-name:Toastify__bounceInRight}.Toastify__bounce-enter--top-center{-webkit-animation-name:Toastify__bounceInDown;animation-name:Toastify__bounceInDown}.Toastify__bounce-enter--bottom-center{-webkit-animation-name:Toastify__bounceInUp;animation-name:Toastify__bounceInUp}.Toastify__bounce-exit--bottom-left,.Toastify__bounce-exit--top-left{-webkit-animation-name:Toastify__bounceOutLeft;animation-name:Toastify__bounceOutLeft}.Toastify__bounce-exit--bottom-right,.Toastify__bounce-exit--top-right{-webkit-animation-name:Toastify__bounceOutRight;animation-name:Toastify__bounceOutRight}.Toastify__bounce-exit--top-center{-webkit-animation-name:Toastify__bounceOutUp;animation-name:Toastify__bounceOutUp}.Toastify__bounce-exit--bottom-center{-webkit-animation-name:Toastify__bounceOutDown;animation-name:Toastify__bounceOutDown}@-webkit-keyframes Toastify__zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes Toastify__zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@-webkit-keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.Toastify__zoom-enter{-webkit-animation-name:Toastify__zoomIn;animation-name:Toastify__zoomIn}.Toastify__zoom-exit{-webkit-animation-name:Toastify__zoomOut;animation-name:Toastify__zoomOut}@-webkit-keyframes Toastify__flipIn{0%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}40%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}60%{opacity:1;-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes Toastify__flipIn{0%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}40%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}60%{opacity:1;-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@-webkit-keyframes Toastify__flipOut{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{opacity:1;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}to{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}}@keyframes Toastify__flipOut{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{opacity:1;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}to{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}}.Toastify__flip-enter{-webkit-animation-name:Toastify__flipIn;animation-name:Toastify__flipIn}.Toastify__flip-exit{-webkit-animation-name:Toastify__flipOut;animation-name:Toastify__flipOut}@-webkit-keyframes Toastify__slideInRight{0%{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInRight{0%{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInLeft{0%{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInLeft{0%{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInUp{0%{-webkit-transform:translate3d(0,110%,0);transform:translate3d(0,110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInUp{0%{-webkit-transform:translate3d(0,110%,0);transform:translate3d(0,110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInDown{0%{-webkit-transform:translate3d(0,-110%,0);transform:translate3d(0,-110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInDown{0%{-webkit-transform:translate3d(0,-110%,0);transform:translate3d(0,-110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:hidden}}@keyframes Toastify__slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:hidden}}@-webkit-keyframes Toastify__slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:hidden}}@keyframes Toastify__slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:hidden}}@-webkit-keyframes Toastify__slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,500px,0);transform:translate3d(0,500px,0);visibility:hidden}}@keyframes Toastify__slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,500px,0);transform:translate3d(0,500px,0);visibility:hidden}}@-webkit-keyframes Toastify__slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,-500px,0);transform:translate3d(0,-500px,0);visibility:hidden}}@keyframes Toastify__slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,-500px,0);transform:translate3d(0,-500px,0);visibility:hidden}}.Toastify__slide-enter--bottom-left,.Toastify__slide-enter--top-left{-webkit-animation-name:Toastify__slideInLeft;animation-name:Toastify__slideInLeft}.Toastify__slide-enter--bottom-right,.Toastify__slide-enter--top-right{-webkit-animation-name:Toastify__slideInRight;animation-name:Toastify__slideInRight}.Toastify__slide-enter--top-center{-webkit-animation-name:Toastify__slideInDown;animation-name:Toastify__slideInDown}.Toastify__slide-enter--bottom-center{-webkit-animation-name:Toastify__slideInUp;animation-name:Toastify__slideInUp}.Toastify__slide-exit--bottom-left,.Toastify__slide-exit--top-left{-webkit-animation-name:Toastify__slideOutLeft;animation-name:Toastify__slideOutLeft}.Toastify__slide-exit--bottom-right,.Toastify__slide-exit--top-right{-webkit-animation-name:Toastify__slideOutRight;animation-name:Toastify__slideOutRight}.Toastify__slide-exit--top-center{-webkit-animation-name:Toastify__slideOutUp;animation-name:Toastify__slideOutUp}.Toastify__slide-exit--bottom-center{-webkit-animation-name:Toastify__slideOutDown;animation-name:Toastify__slideOutDown}@-webkit-keyframes Toastify__spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes Toastify__spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}:root{--toastify-toast-width: 420px}h3{font-weight:600;font-size:larger}.release-timeline .user{display:inline-flex;align-items:center;width:fit-content;padding:2px 4px 2px 0;font-weight:500;font-size:.75rem;line-height:1rem}.release-timeline .user .avatar{border-radius:9999px;width:1rem;height:1rem;border:1px solid var(--rt-c-border)}.release-timeline .user .avatar img{border-radius:9999px;width:1rem}.release-timeline .user .username{padding:0 0 2px 6px}.release-timeline a{text-decoration:none;color:var(--rt-c-brand-1)}.release-timeline .issues h1,.release-timeline .issues h2,.release-timeline .issues h3,.release-timeline .issues h4,.release-timeline .issues h5,.release-timeline .issues h6{margin:7px 0 10px;border-top:none;padding:0}.release-timeline .issue p{margin:5px 0 3px;line-height:.9rem}.release-timeline .commits .issue p,.release-timeline .pulls .issue p{margin:1px 0 0}.release-timeline .tab{text-wrap:nowrap;background-color:inherit;color:var(--rt-c-text-3);cursor:pointer;padding:2px 5px;text-align:left;border:solid 1px var(--rt-c-border);border-radius:3px;transition:.4s;margin:7px 7px 0 0;font-size:.7rem;text-transform:lowercase;letter-spacing:.3px;font-weight:400;line-height:.8rem}.release-timeline .tab.active,.release-timeline .tab:hover{color:var(--rt-c-text-2);border-color:var(--rt-c-text-2);background-color:var(--rt-c-bg-alt)}.release-timeline .issues{padding-top:5px;background-color:var(--rt-c-bg-issues);overflow:hidden;max-height:0;transition:max-height .6s ease-in-out,opacity .4s ease-in-out}.release-timeline .issues section{opacity:0;display:none;transition:max-height .4s ease-in-out,opacity .4s ease-in-out}.release-timeline .issues section.open{opacity:1;display:block;transition:max-height .4s ease-in-out,opacity .4s ease-in-out}.release-timeline .issues .issue{font-size:.8rem;letter-spacing:-.3px;color:var(--rt-c-text-2);line-height:.8rem;display:block;border-style:dashed;border-width:1px;padding:3px 4px;border-color:var(--rt-c-border);margin-top:5px;font-weight:400}.release-timeline .issues .issue h1{font-size:1.2rem}.release-timeline .issues .issue h2{font-size:1.05rem}.release-timeline .issues .issue h3{font-size:1rem}.release-timeline .timeline-item{display:flex;gap:1.5rem;align-items:flex-start;margin-left:-9px;transform:translate(50%);width:50%;position:relative}.release-timeline .timeline-item.left{transform:translate(-50%);flex-direction:row-reverse;margin-left:9px}.release-timeline .timeline-item.left .content{align-items:flex-end}.release-timeline .timeline-item.left .release-name{text-align:end}.release-timeline .timeline-item .circle{border:1px solid var(--rt-c-border);border-radius:9999px;flex-shrink:0;width:8px;height:8px;margin-top:.5rem;box-shadow:var(--rt-c-text-2) 0 0 3px 1px;background-color:var(--rt-c-circle-bg)}.release-timeline .timeline-item .content{display:flex;flex-direction:column}.release-timeline .timeline-item .content time{font-weight:600;font-size:.8rem;line-height:1.5rem;color:var(--rt-c-text-3)}.release-timeline .timeline-item .content .tag-name{color:var(--rt-c-brand-1);width:fit-content;font-weight:700;font-size:1.4rem;line-height:2rem;margin-top:.5rem;transition:all .2s ease-in}.release-timeline .timeline-item .content .tag-name:hover{color:var(--rt-c-brand-2)}.release-timeline .timeline-item .content .release-name{margin:3px 0;padding-top:0;border-top:1px solid var(--rt-c-border);color:var(--rt-c-text-2);font-size:1.15rem;font-weight:600;letter-spacing:.03em;line-height:1.4rem}.release-timeline .timeline-item .content .issue-tabs{display:flex;gap:.6rem}.dark{background-color:var(--rt-c-bg-alt)}.release-timeline{position:relative;display:flex;flex-direction:column;justify-content:center;font-family:var(--rt-font-family-base);background-color:var(--rt-c-bg);min-height:100vh}.release-timeline .header{text-align:center;margin-bottom:1rem}.release-timeline .header h1{color:var(--rt-c-text-2);margin-bottom:.9rem}.release-timeline .header a{width:fit-content;display:block;margin:auto;text-decoration:none}.release-timeline .header a .github-link{display:flex;border:1px solid var(--rt-c-border);border-radius:.3rem;padding:8px;width:fit-content;color:var(--rt-c-text-2);font-size:.9rem;font-weight:600;transition:color .3s ease-in-out}.release-timeline .header a .github-link .github-icon{margin-right:.6em;display:flex}.release-timeline .header a .github-link:hover{color:var(--rt-c-text-1)}.release-timeline .timeline .timeline-record{padding-bottom:.75rem;padding-top:.75rem;justify-content:center;align-items:center;min-height:24px;display:flex;position:relative;opacity:.2;transition:opacity 1.2s ease}.release-timeline .timeline .timeline-record .line{background-color:var(--rt-c-text-3);flex-shrink:0;width:.125rem;height:100%;margin-left:-1px;top:0;left:50%;right:50%;position:absolute}.release-timeline .mobile-only{display:none}@media screen and (max-width: 440px){.release-timeline .mobile-only{display:initial}.release-timeline .not-mobile-only{display:none}.issues{margin-left:-20px}.left .issues{margin-right:-20px;text-align:right}}html{overflow-x:hidden;margin-right:calc(-1*(100vw - 100%))}body{margin:0}.change-repo{position:fixed;color:var(--rt-c-text-2);top:20px;left:20px;z-index:2;cursor:pointer}:root{--rt-c-text-1: #3c3c43;--rt-c-text-2: #3c3c43c7;--rt-c-text-3: #3c3c438f;--rt-c-border: #e2e2e3;--rt-c-bg: #ffffff;--rt-c-issues: #ffffff;--rt-c-bg-alt: #f6f6f7;--rt-c-brand-1: #3451b2;--rt-c-brand-2: #3a5ccc;--rt-c-circle-bg: #888;--rt-font-family-base: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif}.dark{--rt-c-text-1: rgba(255, 255, 245, .86);--rt-c-text-2: rgba(235, 235, 245, .6);--rt-c-text-3: rgba(235, 235, 245, .38);--rt-c-border: #2e2e32;--rt-c-bg: #1b1b1f;--rt-c-bg-issues: #1b1b1f;--rt-c-bg-alt: #161618;--rt-c-brand-1: #5c73e7;--rt-c-brand-2: #a8b1ff;--rt-c-circle-bg: #888;--rt-font-family-base: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif}:root{--rt-c-text-1: var(--vp-c-text-1);--rt-c-text-2: var(--vp-c-text-2);--rt-c-text-3: var(--vp-c-text-3);--rt-c-border: var(--vp-c-border);--rt-c-bg: var(--vp-c-bg);--rt-c-bg-alt: var(--vp-c-bg-alt);--rt-c-brand-1: var(--vp-c-brand-1);--rt-c-brand-2: var(--vp-c-brand-2);--rt-c-circle-bg: #888;--rt-font-family-base: var(--vp-font-family-base)}.vp-doc .release-timeline{min-height:unset!important}.vp-doc .release-timeline a{text-decoration:none}.vp-doc .release-timeline .issues h1,.vp-doc .release-timeline .issues h2,.vp-doc .release-timeline .issues h3,.vp-doc .release-timeline .issues h4,.vp-doc .release-timeline .issues h5,.vp-doc .release-timeline .issues h6{margin:3px 0 0;border-top:none;padding:0}.vp-doc .release-timeline .issue p{margin:1px 0 0}.vp-doc .release-timeline .issues h1{font-size:1.2rem}.vp-doc .release-timeline .issues h2{font-size:1.05rem}.vp-doc .release-timeline .issues h3{font-size:1rem}.bg-stars{overflow:hidden}#stars{width:1px;height:1px;background:transparent;box-shadow:1606px 314px var(--rt-c-text-2),1356px 207px var(--rt-c-text-2),1331px 1251px var(--rt-c-text-2),1186px 1755px var(--rt-c-text-2),1724px 127px var(--rt-c-text-2),608px 470px var(--rt-c-text-2),1315px 1667px var(--rt-c-text-2),960px 1310px var(--rt-c-text-2),889px 1409px var(--rt-c-text-2),540px 1191px var(--rt-c-text-2),1417px 79px var(--rt-c-text-2),1296px 1992px var(--rt-c-text-2),1149px 1157px var(--rt-c-text-2),684px 1064px var(--rt-c-text-2),46px 166px var(--rt-c-text-2),798px 1828px var(--rt-c-text-2),886px 1141px var(--rt-c-text-2),1292px 1894px var(--rt-c-text-2),443px 1835px var(--rt-c-text-2),367px 1620px var(--rt-c-text-2),1683px 930px var(--rt-c-text-2),427px 1774px var(--rt-c-text-2),1246px 933px var(--rt-c-text-2),37px 288px var(--rt-c-text-2),788px 1092px var(--rt-c-text-2),415px 1240px var(--rt-c-text-2),448px 1465px var(--rt-c-text-2),1537px 944px var(--rt-c-text-2),1788px 364px var(--rt-c-text-2),877px 1917px var(--rt-c-text-2),41px 1698px var(--rt-c-text-2),1910px 1186px var(--rt-c-text-2),94px 1599px var(--rt-c-text-2),1087px 106px var(--rt-c-text-2),1557px 1034px var(--rt-c-text-2),366px 673px var(--rt-c-text-2),853px 1413px var(--rt-c-text-2),109px 1007px var(--rt-c-text-2),887px 1770px var(--rt-c-text-2),98px 411px var(--rt-c-text-2),1700px 550px var(--rt-c-text-2),1935px 1224px var(--rt-c-text-2),1110px 780px var(--rt-c-text-2),1439px 850px var(--rt-c-text-2),471px 931px var(--rt-c-text-2),807px 1184px var(--rt-c-text-2),1126px 1122px var(--rt-c-text-2),1735px 1274px var(--rt-c-text-2),1348px 38px var(--rt-c-text-2),1545px 1150px var(--rt-c-text-2),948px 278px var(--rt-c-text-2),1013px 107px var(--rt-c-text-2),1012px 1720px var(--rt-c-text-2),756px 1303px var(--rt-c-text-2),311px 1933px var(--rt-c-text-2),825px 341px var(--rt-c-text-2),402px 1892px var(--rt-c-text-2),846px 1802px var(--rt-c-text-2),1646px 1819px var(--rt-c-text-2),592px 710px var(--rt-c-text-2),1779px 736px var(--rt-c-text-2),111px 888px var(--rt-c-text-2),373px 1540px var(--rt-c-text-2),1975px 1995px var(--rt-c-text-2),1646px 1122px var(--rt-c-text-2),899px 8px var(--rt-c-text-2),1360px 1575px var(--rt-c-text-2),1007px 353px var(--rt-c-text-2),987px 1595px var(--rt-c-text-2),189px 967px var(--rt-c-text-2),1442px 502px var(--rt-c-text-2),18px 1896px var(--rt-c-text-2),1718px 1927px var(--rt-c-text-2),1443px 1538px var(--rt-c-text-2),192px 1222px var(--rt-c-text-2),54px 909px var(--rt-c-text-2),65px 780px var(--rt-c-text-2),1320px 1327px var(--rt-c-text-2),1111px 1138px var(--rt-c-text-2),993px 857px var(--rt-c-text-2),1318px 79px var(--rt-c-text-2),1732px 1919px var(--rt-c-text-2),824px 811px var(--rt-c-text-2),1211px 550px var(--rt-c-text-2),1323px 1323px var(--rt-c-text-2),290px 1438px var(--rt-c-text-2),1576px 773px var(--rt-c-text-2),1013px 1217px var(--rt-c-text-2),881px 703px var(--rt-c-text-2),732px 963px var(--rt-c-text-2),930px 1914px var(--rt-c-text-2),108px 292px var(--rt-c-text-2),1924px 433px var(--rt-c-text-2),227px 856px var(--rt-c-text-2),458px 1735px var(--rt-c-text-2),1031px 1773px var(--rt-c-text-2),1275px 1389px var(--rt-c-text-2),1302px 165px var(--rt-c-text-2),688px 1439px var(--rt-c-text-2),428px 375px var(--rt-c-text-2),791px 1179px var(--rt-c-text-2),1431px 1220px var(--rt-c-text-2),602px 318px var(--rt-c-text-2),565px 591px var(--rt-c-text-2),1512px 262px var(--rt-c-text-2),774px 1615px var(--rt-c-text-2),889px 224px var(--rt-c-text-2),1599px 526px var(--rt-c-text-2),1259px 219px var(--rt-c-text-2),689px 1002px var(--rt-c-text-2),1909px 420px var(--rt-c-text-2),1163px 1941px var(--rt-c-text-2),48px 1399px var(--rt-c-text-2),1676px 401px var(--rt-c-text-2),343px 542px var(--rt-c-text-2),1640px 689px var(--rt-c-text-2),1778px 1849px var(--rt-c-text-2),1706px 1346px var(--rt-c-text-2),1721px 1610px var(--rt-c-text-2),637px 1233px var(--rt-c-text-2),630px 1228px var(--rt-c-text-2),1536px 1999px var(--rt-c-text-2),480px 756px var(--rt-c-text-2),1888px 1869px var(--rt-c-text-2),967px 506px var(--rt-c-text-2),1413px 1778px var(--rt-c-text-2),1684px 737px var(--rt-c-text-2),1574px 1685px var(--rt-c-text-2),1615px 957px var(--rt-c-text-2),1000px 1304px var(--rt-c-text-2),1215px 506px var(--rt-c-text-2),459px 735px var(--rt-c-text-2),1948px 926px var(--rt-c-text-2),1899px 700px var(--rt-c-text-2),963px 417px var(--rt-c-text-2),1637px 1097px var(--rt-c-text-2),792px 221px var(--rt-c-text-2),598px 21px var(--rt-c-text-2),397px 205px var(--rt-c-text-2),1708px 938px var(--rt-c-text-2),419px 1769px var(--rt-c-text-2),488px 482px var(--rt-c-text-2),575px 333px var(--rt-c-text-2),1293px 1688px var(--rt-c-text-2),1386px 239px var(--rt-c-text-2),320px 498px var(--rt-c-text-2),769px 1512px var(--rt-c-text-2),1763px 1532px var(--rt-c-text-2),703px 424px var(--rt-c-text-2),1230px 1349px var(--rt-c-text-2),1855px 1258px var(--rt-c-text-2),1509px 708px var(--rt-c-text-2),1739px 659px var(--rt-c-text-2),134px 574px var(--rt-c-text-2),1589px 97px var(--rt-c-text-2),448px 982px var(--rt-c-text-2),1119px 1006px var(--rt-c-text-2),1089px 1303px var(--rt-c-text-2),16px 1272px var(--rt-c-text-2),167px 1696px var(--rt-c-text-2),1132px 1926px var(--rt-c-text-2),971px 1636px var(--rt-c-text-2),190px 194px var(--rt-c-text-2),1148px 939px var(--rt-c-text-2),1486px 1779px var(--rt-c-text-2),816px 1483px var(--rt-c-text-2),1769px 1099px var(--rt-c-text-2),123px 771px var(--rt-c-text-2),281px 605px var(--rt-c-text-2),836px 1704px var(--rt-c-text-2),209px 1167px var(--rt-c-text-2),1397px 237px var(--rt-c-text-2),1947px 487px var(--rt-c-text-2),161px 1314px var(--rt-c-text-2),17px 902px var(--rt-c-text-2),424px 914px var(--rt-c-text-2),1732px 1091px var(--rt-c-text-2),765px 252px var(--rt-c-text-2),309px 1592px var(--rt-c-text-2),1264px 913px var(--rt-c-text-2),1712px 1692px var(--rt-c-text-2),1659px 602px var(--rt-c-text-2),15px 323px var(--rt-c-text-2),626px 1857px var(--rt-c-text-2),323px 317px var(--rt-c-text-2),224px 1832px var(--rt-c-text-2),926px 1304px var(--rt-c-text-2),464px 1343px var(--rt-c-text-2),489px 542px var(--rt-c-text-2),1244px 769px var(--rt-c-text-2),686px 1173px var(--rt-c-text-2),1864px 1794px var(--rt-c-text-2),1424px 1003px var(--rt-c-text-2),546px 213px var(--rt-c-text-2),1465px 1856px var(--rt-c-text-2),437px 429px var(--rt-c-text-2),899px 774px var(--rt-c-text-2),1476px 1483px var(--rt-c-text-2),628px 519px var(--rt-c-text-2),1060px 584px var(--rt-c-text-2),1784px 1143px var(--rt-c-text-2),418px 676px var(--rt-c-text-2),1270px 1436px var(--rt-c-text-2),1682px 1858px var(--rt-c-text-2),834px 1921px var(--rt-c-text-2),957px 267px var(--rt-c-text-2),764px 659px var(--rt-c-text-2),952px 244px var(--rt-c-text-2),1260px 1997px var(--rt-c-text-2),1131px 22px var(--rt-c-text-2),566px 1141px var(--rt-c-text-2),617px 822px var(--rt-c-text-2),1910px 1512px var(--rt-c-text-2),269px 531px var(--rt-c-text-2),1044px 6px var(--rt-c-text-2),1841px 1120px var(--rt-c-text-2),1730px 514px var(--rt-c-text-2),1357px 368px var(--rt-c-text-2),633px 585px var(--rt-c-text-2),683px 158px var(--rt-c-text-2),63px 1183px var(--rt-c-text-2),205px 1453px var(--rt-c-text-2),1442px 1826px var(--rt-c-text-2),103px 1382px var(--rt-c-text-2),750px 1712px var(--rt-c-text-2),152px 585px var(--rt-c-text-2),1473px 186px var(--rt-c-text-2),991px 1406px var(--rt-c-text-2),1436px 1539px var(--rt-c-text-2),395px 1105px var(--rt-c-text-2),1813px 909px var(--rt-c-text-2),39px 1px var(--rt-c-text-2),572px 734px var(--rt-c-text-2),454px 1268px var(--rt-c-text-2),1128px 590px var(--rt-c-text-2),560px 437px var(--rt-c-text-2),697px 1135px var(--rt-c-text-2),1777px 1337px var(--rt-c-text-2),1943px 1597px var(--rt-c-text-2),675px 1326px var(--rt-c-text-2),1241px 661px var(--rt-c-text-2),1316px 1358px var(--rt-c-text-2),437px 1593px var(--rt-c-text-2),1807px 1841px var(--rt-c-text-2),1911px 1772px var(--rt-c-text-2),183px 516px var(--rt-c-text-2),141px 1494px var(--rt-c-text-2),907px 1023px var(--rt-c-text-2),236px 646px var(--rt-c-text-2),913px 221px var(--rt-c-text-2),1284px 703px var(--rt-c-text-2),1725px 1380px var(--rt-c-text-2),1606px 1749px var(--rt-c-text-2),103px 713px var(--rt-c-text-2),970px 679px var(--rt-c-text-2),1351px 1119px var(--rt-c-text-2),1151px 1187px var(--rt-c-text-2),276px 941px var(--rt-c-text-2),639px 1516px var(--rt-c-text-2),1223px 1383px var(--rt-c-text-2),1996px 1244px var(--rt-c-text-2),349px 1492px var(--rt-c-text-2),798px 1717px var(--rt-c-text-2),1599px 989px var(--rt-c-text-2),1327px 1248px var(--rt-c-text-2),393px 1164px var(--rt-c-text-2),115px 743px var(--rt-c-text-2),661px 436px var(--rt-c-text-2),1944px 1870px var(--rt-c-text-2),52px 949px var(--rt-c-text-2),1926px 1463px var(--rt-c-text-2),422px 1917px var(--rt-c-text-2),1888px 1098px var(--rt-c-text-2),860px 320px var(--rt-c-text-2),1330px 442px var(--rt-c-text-2),1007px 804px var(--rt-c-text-2),1812px 1658px var(--rt-c-text-2),295px 854px var(--rt-c-text-2),1395px 844px var(--rt-c-text-2),783px 679px var(--rt-c-text-2),1420px 247px var(--rt-c-text-2),52px 930px var(--rt-c-text-2),1193px 1947px var(--rt-c-text-2),895px 1889px var(--rt-c-text-2),677px 1755px var(--rt-c-text-2),1888px 1597px var(--rt-c-text-2),1510px 1015px var(--rt-c-text-2),1106px 132px var(--rt-c-text-2),966px 1348px var(--rt-c-text-2),885px 1970px var(--rt-c-text-2),899px 1976px var(--rt-c-text-2),1473px 1598px var(--rt-c-text-2),1462px 189px var(--rt-c-text-2),1253px 684px var(--rt-c-text-2),632px 309px var(--rt-c-text-2),624px 1594px var(--rt-c-text-2),447px 157px var(--rt-c-text-2),1645px 1800px var(--rt-c-text-2),1473px 1288px var(--rt-c-text-2),143px 126px var(--rt-c-text-2),1578px 488px var(--rt-c-text-2),927px 1227px var(--rt-c-text-2),61px 1936px var(--rt-c-text-2),1153px 1039px var(--rt-c-text-2),601px 328px var(--rt-c-text-2),757px 512px var(--rt-c-text-2),61px 1685px var(--rt-c-text-2),746px 291px var(--rt-c-text-2),1408px 1755px var(--rt-c-text-2),1659px 1965px var(--rt-c-text-2),1153px 1006px var(--rt-c-text-2),1441px 995px var(--rt-c-text-2),474px 1931px var(--rt-c-text-2),1947px 744px var(--rt-c-text-2),316px 603px var(--rt-c-text-2),1979px 144px var(--rt-c-text-2),776px 973px var(--rt-c-text-2),91px 1716px var(--rt-c-text-2),1563px 167px var(--rt-c-text-2),791px 1246px var(--rt-c-text-2),1814px 514px var(--rt-c-text-2),353px 1099px var(--rt-c-text-2),638px 474px var(--rt-c-text-2),892px 1096px var(--rt-c-text-2),686px 246px var(--rt-c-text-2),458px 430px var(--rt-c-text-2),1221px 1882px var(--rt-c-text-2),1130px 551px var(--rt-c-text-2),1485px 1554px var(--rt-c-text-2),1263px 1951px var(--rt-c-text-2),1743px 1803px var(--rt-c-text-2),398px 1815px var(--rt-c-text-2),1974px 702px var(--rt-c-text-2),934px 463px var(--rt-c-text-2),1805px 777px var(--rt-c-text-2),784px 381px var(--rt-c-text-2),372px 1118px var(--rt-c-text-2),933px 15px var(--rt-c-text-2),1862px 1859px var(--rt-c-text-2),405px 626px var(--rt-c-text-2),1948px 946px var(--rt-c-text-2),1869px 1889px var(--rt-c-text-2),158px 1324px var(--rt-c-text-2),1453px 1109px var(--rt-c-text-2),1890px 345px var(--rt-c-text-2),987px 981px var(--rt-c-text-2),1526px 1867px var(--rt-c-text-2),1506px 588px var(--rt-c-text-2),468px 208px var(--rt-c-text-2),146px 1950px var(--rt-c-text-2),1005px 758px var(--rt-c-text-2),1043px 1181px var(--rt-c-text-2),1724px 152px var(--rt-c-text-2),703px 1840px var(--rt-c-text-2),1330px 1972px var(--rt-c-text-2),1486px 1597px var(--rt-c-text-2),326px 1664px var(--rt-c-text-2),1614px 978px var(--rt-c-text-2),1489px 803px var(--rt-c-text-2),1230px 977px var(--rt-c-text-2),375px 1911px var(--rt-c-text-2),1104px 805px var(--rt-c-text-2),1292px 1381px var(--rt-c-text-2),1483px 1434px var(--rt-c-text-2),1331px 881px var(--rt-c-text-2),1464px 394px var(--rt-c-text-2),279px 1799px var(--rt-c-text-2),341px 1862px var(--rt-c-text-2),603px 781px var(--rt-c-text-2),1092px 1179px var(--rt-c-text-2),384px 538px var(--rt-c-text-2),1113px 1467px var(--rt-c-text-2),364px 1183px var(--rt-c-text-2),1817px 81px var(--rt-c-text-2),1431px 1082px var(--rt-c-text-2),1561px 1123px var(--rt-c-text-2),290px 1849px var(--rt-c-text-2),1649px 423px var(--rt-c-text-2),1665px 1088px var(--rt-c-text-2),1766px 1548px var(--rt-c-text-2),780px 1570px var(--rt-c-text-2),1299px 961px var(--rt-c-text-2),1659px 363px var(--rt-c-text-2),1382px 350px var(--rt-c-text-2),630px 620px var(--rt-c-text-2),373px 646px var(--rt-c-text-2),806px 807px var(--rt-c-text-2),1476px 1973px var(--rt-c-text-2),88px 1272px var(--rt-c-text-2),185px 936px var(--rt-c-text-2),1981px 1271px var(--rt-c-text-2),1021px 255px var(--rt-c-text-2),591px 1188px var(--rt-c-text-2),913px 1527px var(--rt-c-text-2),592px 723px var(--rt-c-text-2),698px 1366px var(--rt-c-text-2),861px 1541px var(--rt-c-text-2),1109px 1984px var(--rt-c-text-2),682px 1868px var(--rt-c-text-2),1915px 535px var(--rt-c-text-2),1357px 1171px var(--rt-c-text-2),1458px 1936px var(--rt-c-text-2),1471px 1177px var(--rt-c-text-2),1167px 1562px var(--rt-c-text-2),376px 280px var(--rt-c-text-2),889px 1485px var(--rt-c-text-2),1687px 490px var(--rt-c-text-2),895px 1484px var(--rt-c-text-2),542px 1020px var(--rt-c-text-2),598px 1589px var(--rt-c-text-2),1873px 873px var(--rt-c-text-2),885px 1923px var(--rt-c-text-2),752px 1393px var(--rt-c-text-2),1919px 143px var(--rt-c-text-2),1620px 1792px var(--rt-c-text-2),1194px 455px var(--rt-c-text-2),700px 1294px var(--rt-c-text-2),1989px 1046px var(--rt-c-text-2),1637px 1904px var(--rt-c-text-2),1491px 1481px var(--rt-c-text-2),1819px 741px var(--rt-c-text-2),1234px 1259px var(--rt-c-text-2),993px 832px var(--rt-c-text-2),404px 481px var(--rt-c-text-2),1074px 429px var(--rt-c-text-2),1389px 507px var(--rt-c-text-2),293px 400px var(--rt-c-text-2),449px 170px var(--rt-c-text-2),1330px 1971px var(--rt-c-text-2),1352px 962px var(--rt-c-text-2),955px 455px var(--rt-c-text-2),729px 439px var(--rt-c-text-2),1762px 666px var(--rt-c-text-2),119px 139px var(--rt-c-text-2),1369px 1284px var(--rt-c-text-2),1727px 228px var(--rt-c-text-2),128px 1014px var(--rt-c-text-2),1119px 1372px var(--rt-c-text-2),1104px 1290px var(--rt-c-text-2),664px 437px var(--rt-c-text-2),186px 665px var(--rt-c-text-2),1652px 1124px var(--rt-c-text-2),415px 782px var(--rt-c-text-2),1121px 147px var(--rt-c-text-2),923px 701px var(--rt-c-text-2),1210px 539px var(--rt-c-text-2),321px 1462px var(--rt-c-text-2),467px 586px var(--rt-c-text-2),1666px 972px var(--rt-c-text-2),1472px 1014px var(--rt-c-text-2),1937px 873px var(--rt-c-text-2),1659px 1512px var(--rt-c-text-2),976px 271px var(--rt-c-text-2),28px 443px var(--rt-c-text-2),604px 106px var(--rt-c-text-2),1344px 1866px var(--rt-c-text-2),1726px 29px var(--rt-c-text-2),1075px 449px var(--rt-c-text-2),385px 1709px var(--rt-c-text-2),591px 1532px var(--rt-c-text-2),355px 677px var(--rt-c-text-2),447px 54px var(--rt-c-text-2),691px 1227px var(--rt-c-text-2),1702px 108px var(--rt-c-text-2),353px 1699px var(--rt-c-text-2),207px 1805px var(--rt-c-text-2),1734px 240px var(--rt-c-text-2),587px 126px var(--rt-c-text-2),1304px 1140px var(--rt-c-text-2),1574px 1300px var(--rt-c-text-2),715px 489px var(--rt-c-text-2),573px 1155px var(--rt-c-text-2),1005px 121px var(--rt-c-text-2),230px 1606px var(--rt-c-text-2),297px 414px var(--rt-c-text-2),1471px 729px var(--rt-c-text-2),431px 1821px var(--rt-c-text-2),784px 79px var(--rt-c-text-2),1541px 1361px var(--rt-c-text-2),583px 1110px var(--rt-c-text-2),1822px 1802px var(--rt-c-text-2),1454px 1904px var(--rt-c-text-2),479px 271px var(--rt-c-text-2),143px 1165px var(--rt-c-text-2),1774px 1433px var(--rt-c-text-2),1107px 1503px var(--rt-c-text-2),1839px 1723px var(--rt-c-text-2),34px 1793px var(--rt-c-text-2),36px 1803px var(--rt-c-text-2),1275px 401px var(--rt-c-text-2),517px 1324px var(--rt-c-text-2),302px 296px var(--rt-c-text-2),1735px 1876px var(--rt-c-text-2),1643px 1937px var(--rt-c-text-2),625px 318px var(--rt-c-text-2),1868px 487px var(--rt-c-text-2),1510px 1413px var(--rt-c-text-2),615px 143px var(--rt-c-text-2),608px 48px var(--rt-c-text-2),199px 362px var(--rt-c-text-2),603px 232px var(--rt-c-text-2),1821px 1238px var(--rt-c-text-2),51px 690px var(--rt-c-text-2),1706px 402px var(--rt-c-text-2),416px 237px var(--rt-c-text-2),676px 1016px var(--rt-c-text-2),459px 196px var(--rt-c-text-2),191px 1649px var(--rt-c-text-2),412px 887px var(--rt-c-text-2),1088px 1040px var(--rt-c-text-2),212px 1837px var(--rt-c-text-2),206px 1254px var(--rt-c-text-2),230px 1380px var(--rt-c-text-2),1653px 593px var(--rt-c-text-2),1766px 801px var(--rt-c-text-2),187px 98px var(--rt-c-text-2),480px 1257px var(--rt-c-text-2),1753px 945px var(--rt-c-text-2),36px 1224px var(--rt-c-text-2),189px 114px var(--rt-c-text-2),95px 1415px var(--rt-c-text-2),508px 1638px var(--rt-c-text-2),1326px 925px var(--rt-c-text-2),1790px 1489px var(--rt-c-text-2),1958px 1126px var(--rt-c-text-2),818px 442px var(--rt-c-text-2),630px 1314px var(--rt-c-text-2),1793px 479px var(--rt-c-text-2),1274px 1243px var(--rt-c-text-2),1168px 832px var(--rt-c-text-2),402px 1620px var(--rt-c-text-2),1535px 1593px var(--rt-c-text-2),1690px 425px var(--rt-c-text-2),902px 1897px var(--rt-c-text-2),1793px 1439px var(--rt-c-text-2),1065px 1413px var(--rt-c-text-2),1353px 564px var(--rt-c-text-2),160px 320px var(--rt-c-text-2),113px 665px var(--rt-c-text-2),1310px 1355px var(--rt-c-text-2),970px 1171px var(--rt-c-text-2),1463px 110px var(--rt-c-text-2),863px 1565px var(--rt-c-text-2),1499px 556px var(--rt-c-text-2),1054px 1602px var(--rt-c-text-2),1089px 240px var(--rt-c-text-2),1325px 32px var(--rt-c-text-2),1021px 1008px var(--rt-c-text-2),1310px 764px var(--rt-c-text-2),92px 1237px var(--rt-c-text-2),811px 1892px var(--rt-c-text-2),809px 348px var(--rt-c-text-2),908px 1090px var(--rt-c-text-2),648px 1204px var(--rt-c-text-2),245px 268px var(--rt-c-text-2),809px 1278px var(--rt-c-text-2),1708px 1690px var(--rt-c-text-2),1944px 1682px var(--rt-c-text-2),1757px 1651px var(--rt-c-text-2),1884px 1995px var(--rt-c-text-2),1690px 1185px var(--rt-c-text-2),447px 100px var(--rt-c-text-2),1836px 1024px var(--rt-c-text-2),1020px 1805px var(--rt-c-text-2),1428px 808px var(--rt-c-text-2),1646px 696px var(--rt-c-text-2),1865px 1666px var(--rt-c-text-2),281px 524px var(--rt-c-text-2),1568px 395px var(--rt-c-text-2),36px 1705px var(--rt-c-text-2),1227px 1603px var(--rt-c-text-2),1311px 1542px var(--rt-c-text-2),1238px 1222px var(--rt-c-text-2),780px 1360px var(--rt-c-text-2),1711px 237px var(--rt-c-text-2),1857px 1494px var(--rt-c-text-2),850px 276px var(--rt-c-text-2),1381px 10px var(--rt-c-text-2),395px 29px var(--rt-c-text-2),1357px 1552px var(--rt-c-text-2),1586px 389px var(--rt-c-text-2),1668px 312px var(--rt-c-text-2),718px 571px var(--rt-c-text-2),1758px 729px var(--rt-c-text-2),713px 592px var(--rt-c-text-2),241px 1096px var(--rt-c-text-2),1059px 1468px var(--rt-c-text-2),1869px 940px var(--rt-c-text-2),1843px 842px var(--rt-c-text-2),766px 348px var(--rt-c-text-2),933px 1527px var(--rt-c-text-2),1279px 731px var(--rt-c-text-2),1379px 1224px var(--rt-c-text-2),1108px 1295px var(--rt-c-text-2),445px 119px var(--rt-c-text-2),1998px 1570px var(--rt-c-text-2),719px 1289px var(--rt-c-text-2),651px 1959px var(--rt-c-text-2),873px 1399px var(--rt-c-text-2),1207px 321px var(--rt-c-text-2),1044px 150px var(--rt-c-text-2),527px 649px var(--rt-c-text-2),1971px 1772px var(--rt-c-text-2),1906px 1522px var(--rt-c-text-2),1502px 1710px var(--rt-c-text-2),701px 1051px var(--rt-c-text-2),1859px 1242px var(--rt-c-text-2),1818px 1677px var(--rt-c-text-2),480px 87px var(--rt-c-text-2),663px 130px var(--rt-c-text-2),495px 578px var(--rt-c-text-2),1250px 325px var(--rt-c-text-2),983px 1934px var(--rt-c-text-2),1227px 972px var(--rt-c-text-2),482px 1799px var(--rt-c-text-2),1216px 453px var(--rt-c-text-2),67px 1811px var(--rt-c-text-2),148px 950px var(--rt-c-text-2),1600px 1018px var(--rt-c-text-2),1714px 1747px var(--rt-c-text-2),739px 1943px var(--rt-c-text-2),1200px 1137px var(--rt-c-text-2),1980px 95px var(--rt-c-text-2),418px 1780px var(--rt-c-text-2),834px 269px var(--rt-c-text-2),778px 1665px var(--rt-c-text-2),1334px 1016px var(--rt-c-text-2),1310px 356px var(--rt-c-text-2),450px 1663px var(--rt-c-text-2),1414px 800px var(--rt-c-text-2),19px 1765px var(--rt-c-text-2),1508px 1721px var(--rt-c-text-2),1332px 1794px var(--rt-c-text-2),724px 212px var(--rt-c-text-2),745px 459px var(--rt-c-text-2),1564px 1220px var(--rt-c-text-2),1712px 426px var(--rt-c-text-2),1024px 26px var(--rt-c-text-2),722px 1246px var(--rt-c-text-2),1758px 1968px var(--rt-c-text-2),23px 349px var(--rt-c-text-2),1982px 1368px var(--rt-c-text-2),1314px 1489px var(--rt-c-text-2),342px 1576px var(--rt-c-text-2),1308px 617px var(--rt-c-text-2),758px 1901px var(--rt-c-text-2),1554px 1345px var(--rt-c-text-2),676px 1202px var(--rt-c-text-2),1241px 245px var(--rt-c-text-2),230px 549px var(--rt-c-text-2),1218px 1179px var(--rt-c-text-2),123px 1887px var(--rt-c-text-2),910px 978px var(--rt-c-text-2),1745px 837px var(--rt-c-text-2),476px 1125px var(--rt-c-text-2),1386px 275px var(--rt-c-text-2),1324px 1230px var(--rt-c-text-2),1600px 1309px var(--rt-c-text-2),1537px 724px var(--rt-c-text-2),578px 1082px var(--rt-c-text-2),486px 1328px var(--rt-c-text-2),1263px 1260px var(--rt-c-text-2),88px 148px var(--rt-c-text-2),606px 1532px var(--rt-c-text-2),1968px 1104px var(--rt-c-text-2),1381px 697px var(--rt-c-text-2),1318px 780px var(--rt-c-text-2),1142px 1383px var(--rt-c-text-2),946px 1484px var(--rt-c-text-2),631px 1693px var(--rt-c-text-2),1992px 1510px var(--rt-c-text-2),366px 742px var(--rt-c-text-2),267px 288px var(--rt-c-text-2),1267px 350px var(--rt-c-text-2),387px 572px var(--rt-c-text-2),262px 1568px var(--rt-c-text-2),1341px 970px var(--rt-c-text-2),485px 1792px var(--rt-c-text-2),1711px 1257px var(--rt-c-text-2),1051px 1144px var(--rt-c-text-2),862px 1634px var(--rt-c-text-2),246px 904px var(--rt-c-text-2),60px 284px var(--rt-c-text-2),1938px 1927px var(--rt-c-text-2),1112px 246px var(--rt-c-text-2),289px 1054px var(--rt-c-text-2),118px 108px var(--rt-c-text-2),1278px 701px var(--rt-c-text-2),747px 1047px var(--rt-c-text-2),1591px 983px var(--rt-c-text-2),761px 790px var(--rt-c-text-2),116px 514px var(--rt-c-text-2),160px 552px var(--rt-c-text-2),1833px 1641px var(--rt-c-text-2),1315px 325px var(--rt-c-text-2),1006px 67px var(--rt-c-text-2),402px 337px var(--rt-c-text-2),1035px 447px var(--rt-c-text-2),1153px 382px var(--rt-c-text-2),1313px 1369px var(--rt-c-text-2);animation:animStar 50s linear infinite}#stars:after{content:" ";position:absolute;top:2000px;width:1px;height:1px;background:transparent;box-shadow:1606px 314px var(--rt-c-text-2),1356px 207px var(--rt-c-text-2),1331px 1251px var(--rt-c-text-2),1186px 1755px var(--rt-c-text-2),1724px 127px var(--rt-c-text-2),608px 470px var(--rt-c-text-2),1315px 1667px var(--rt-c-text-2),960px 1310px var(--rt-c-text-2),889px 1409px var(--rt-c-text-2),540px 1191px var(--rt-c-text-2),1417px 79px var(--rt-c-text-2),1296px 1992px var(--rt-c-text-2),1149px 1157px var(--rt-c-text-2),684px 1064px var(--rt-c-text-2),46px 166px var(--rt-c-text-2),798px 1828px var(--rt-c-text-2),886px 1141px var(--rt-c-text-2),1292px 1894px var(--rt-c-text-2),443px 1835px var(--rt-c-text-2),367px 1620px var(--rt-c-text-2),1683px 930px var(--rt-c-text-2),427px 1774px var(--rt-c-text-2),1246px 933px var(--rt-c-text-2),37px 288px var(--rt-c-text-2),788px 1092px var(--rt-c-text-2),415px 1240px var(--rt-c-text-2),448px 1465px var(--rt-c-text-2),1537px 944px var(--rt-c-text-2),1788px 364px var(--rt-c-text-2),877px 1917px var(--rt-c-text-2),41px 1698px var(--rt-c-text-2),1910px 1186px var(--rt-c-text-2),94px 1599px var(--rt-c-text-2),1087px 106px var(--rt-c-text-2),1557px 1034px var(--rt-c-text-2),366px 673px var(--rt-c-text-2),853px 1413px var(--rt-c-text-2),109px 1007px var(--rt-c-text-2),887px 1770px var(--rt-c-text-2),98px 411px var(--rt-c-text-2),1700px 550px var(--rt-c-text-2),1935px 1224px var(--rt-c-text-2),1110px 780px var(--rt-c-text-2),1439px 850px var(--rt-c-text-2),471px 931px var(--rt-c-text-2),807px 1184px var(--rt-c-text-2),1126px 1122px var(--rt-c-text-2),1735px 1274px var(--rt-c-text-2),1348px 38px var(--rt-c-text-2),1545px 1150px var(--rt-c-text-2),948px 278px var(--rt-c-text-2),1013px 107px var(--rt-c-text-2),1012px 1720px var(--rt-c-text-2),756px 1303px var(--rt-c-text-2),311px 1933px var(--rt-c-text-2),825px 341px var(--rt-c-text-2),402px 1892px var(--rt-c-text-2),846px 1802px var(--rt-c-text-2),1646px 1819px var(--rt-c-text-2),592px 710px var(--rt-c-text-2),1779px 736px var(--rt-c-text-2),111px 888px var(--rt-c-text-2),373px 1540px var(--rt-c-text-2),1975px 1995px var(--rt-c-text-2),1646px 1122px var(--rt-c-text-2),899px 8px var(--rt-c-text-2),1360px 1575px var(--rt-c-text-2),1007px 353px var(--rt-c-text-2),987px 1595px var(--rt-c-text-2),189px 967px var(--rt-c-text-2),1442px 502px var(--rt-c-text-2),18px 1896px var(--rt-c-text-2),1718px 1927px var(--rt-c-text-2),1443px 1538px var(--rt-c-text-2),192px 1222px var(--rt-c-text-2),54px 909px var(--rt-c-text-2),65px 780px var(--rt-c-text-2),1320px 1327px var(--rt-c-text-2),1111px 1138px var(--rt-c-text-2),993px 857px var(--rt-c-text-2),1318px 79px var(--rt-c-text-2),1732px 1919px var(--rt-c-text-2),824px 811px var(--rt-c-text-2),1211px 550px var(--rt-c-text-2),1323px 1323px var(--rt-c-text-2),290px 1438px var(--rt-c-text-2),1576px 773px var(--rt-c-text-2),1013px 1217px var(--rt-c-text-2),881px 703px var(--rt-c-text-2),732px 963px var(--rt-c-text-2),930px 1914px var(--rt-c-text-2),108px 292px var(--rt-c-text-2),1924px 433px var(--rt-c-text-2),227px 856px var(--rt-c-text-2),458px 1735px var(--rt-c-text-2),1031px 1773px var(--rt-c-text-2),1275px 1389px var(--rt-c-text-2),1302px 165px var(--rt-c-text-2),688px 1439px var(--rt-c-text-2),428px 375px var(--rt-c-text-2),791px 1179px var(--rt-c-text-2),1431px 1220px var(--rt-c-text-2),602px 318px var(--rt-c-text-2),565px 591px var(--rt-c-text-2),1512px 262px var(--rt-c-text-2),774px 1615px var(--rt-c-text-2),889px 224px var(--rt-c-text-2),1599px 526px var(--rt-c-text-2),1259px 219px var(--rt-c-text-2),689px 1002px var(--rt-c-text-2),1909px 420px var(--rt-c-text-2),1163px 1941px var(--rt-c-text-2),48px 1399px var(--rt-c-text-2),1676px 401px var(--rt-c-text-2),343px 542px var(--rt-c-text-2),1640px 689px var(--rt-c-text-2),1778px 1849px var(--rt-c-text-2),1706px 1346px var(--rt-c-text-2),1721px 1610px var(--rt-c-text-2),637px 1233px var(--rt-c-text-2),630px 1228px var(--rt-c-text-2),1536px 1999px var(--rt-c-text-2),480px 756px var(--rt-c-text-2),1888px 1869px var(--rt-c-text-2),967px 506px var(--rt-c-text-2),1413px 1778px var(--rt-c-text-2),1684px 737px var(--rt-c-text-2),1574px 1685px var(--rt-c-text-2),1615px 957px var(--rt-c-text-2),1000px 1304px var(--rt-c-text-2),1215px 506px var(--rt-c-text-2),459px 735px var(--rt-c-text-2),1948px 926px var(--rt-c-text-2),1899px 700px var(--rt-c-text-2),963px 417px var(--rt-c-text-2),1637px 1097px var(--rt-c-text-2),792px 221px var(--rt-c-text-2),598px 21px var(--rt-c-text-2),397px 205px var(--rt-c-text-2),1708px 938px var(--rt-c-text-2),419px 1769px var(--rt-c-text-2),488px 482px var(--rt-c-text-2),575px 333px var(--rt-c-text-2),1293px 1688px var(--rt-c-text-2),1386px 239px var(--rt-c-text-2),320px 498px var(--rt-c-text-2),769px 1512px var(--rt-c-text-2),1763px 1532px var(--rt-c-text-2),703px 424px var(--rt-c-text-2),1230px 1349px var(--rt-c-text-2),1855px 1258px var(--rt-c-text-2),1509px 708px var(--rt-c-text-2),1739px 659px var(--rt-c-text-2),134px 574px var(--rt-c-text-2),1589px 97px var(--rt-c-text-2),448px 982px var(--rt-c-text-2),1119px 1006px var(--rt-c-text-2),1089px 1303px var(--rt-c-text-2),16px 1272px var(--rt-c-text-2),167px 1696px var(--rt-c-text-2),1132px 1926px var(--rt-c-text-2),971px 1636px var(--rt-c-text-2),190px 194px var(--rt-c-text-2),1148px 939px var(--rt-c-text-2),1486px 1779px var(--rt-c-text-2),816px 1483px var(--rt-c-text-2),1769px 1099px var(--rt-c-text-2),123px 771px var(--rt-c-text-2),281px 605px var(--rt-c-text-2),836px 1704px var(--rt-c-text-2),209px 1167px var(--rt-c-text-2),1397px 237px var(--rt-c-text-2),1947px 487px var(--rt-c-text-2),161px 1314px var(--rt-c-text-2),17px 902px var(--rt-c-text-2),424px 914px var(--rt-c-text-2),1732px 1091px var(--rt-c-text-2),765px 252px var(--rt-c-text-2),309px 1592px var(--rt-c-text-2),1264px 913px var(--rt-c-text-2),1712px 1692px var(--rt-c-text-2),1659px 602px var(--rt-c-text-2),15px 323px var(--rt-c-text-2),626px 1857px var(--rt-c-text-2),323px 317px var(--rt-c-text-2),224px 1832px var(--rt-c-text-2),926px 1304px var(--rt-c-text-2),464px 1343px var(--rt-c-text-2),489px 542px var(--rt-c-text-2),1244px 769px var(--rt-c-text-2),686px 1173px var(--rt-c-text-2),1864px 1794px var(--rt-c-text-2),1424px 1003px var(--rt-c-text-2),546px 213px var(--rt-c-text-2),1465px 1856px var(--rt-c-text-2),437px 429px var(--rt-c-text-2),899px 774px var(--rt-c-text-2),1476px 1483px var(--rt-c-text-2),628px 519px var(--rt-c-text-2),1060px 584px var(--rt-c-text-2),1784px 1143px var(--rt-c-text-2),418px 676px var(--rt-c-text-2),1270px 1436px var(--rt-c-text-2),1682px 1858px var(--rt-c-text-2),834px 1921px var(--rt-c-text-2),957px 267px var(--rt-c-text-2),764px 659px var(--rt-c-text-2),952px 244px var(--rt-c-text-2),1260px 1997px var(--rt-c-text-2),1131px 22px var(--rt-c-text-2),566px 1141px var(--rt-c-text-2),617px 822px var(--rt-c-text-2),1910px 1512px var(--rt-c-text-2),269px 531px var(--rt-c-text-2),1044px 6px var(--rt-c-text-2),1841px 1120px var(--rt-c-text-2),1730px 514px var(--rt-c-text-2),1357px 368px var(--rt-c-text-2),633px 585px var(--rt-c-text-2),683px 158px var(--rt-c-text-2),63px 1183px var(--rt-c-text-2),205px 1453px var(--rt-c-text-2),1442px 1826px var(--rt-c-text-2),103px 1382px var(--rt-c-text-2),750px 1712px var(--rt-c-text-2),152px 585px var(--rt-c-text-2),1473px 186px var(--rt-c-text-2),991px 1406px var(--rt-c-text-2),1436px 1539px var(--rt-c-text-2),395px 1105px var(--rt-c-text-2),1813px 909px var(--rt-c-text-2),39px 1px var(--rt-c-text-2),572px 734px var(--rt-c-text-2),454px 1268px var(--rt-c-text-2),1128px 590px var(--rt-c-text-2),560px 437px var(--rt-c-text-2),697px 1135px var(--rt-c-text-2),1777px 1337px var(--rt-c-text-2),1943px 1597px var(--rt-c-text-2),675px 1326px var(--rt-c-text-2),1241px 661px var(--rt-c-text-2),1316px 1358px var(--rt-c-text-2),437px 1593px var(--rt-c-text-2),1807px 1841px var(--rt-c-text-2),1911px 1772px var(--rt-c-text-2),183px 516px var(--rt-c-text-2),141px 1494px var(--rt-c-text-2),907px 1023px var(--rt-c-text-2),236px 646px var(--rt-c-text-2),913px 221px var(--rt-c-text-2),1284px 703px var(--rt-c-text-2),1725px 1380px var(--rt-c-text-2),1606px 1749px var(--rt-c-text-2),103px 713px var(--rt-c-text-2),970px 679px var(--rt-c-text-2),1351px 1119px var(--rt-c-text-2),1151px 1187px var(--rt-c-text-2),276px 941px var(--rt-c-text-2),639px 1516px var(--rt-c-text-2),1223px 1383px var(--rt-c-text-2),1996px 1244px var(--rt-c-text-2),349px 1492px var(--rt-c-text-2),798px 1717px var(--rt-c-text-2),1599px 989px var(--rt-c-text-2),1327px 1248px var(--rt-c-text-2),393px 1164px var(--rt-c-text-2),115px 743px var(--rt-c-text-2),661px 436px var(--rt-c-text-2),1944px 1870px var(--rt-c-text-2),52px 949px var(--rt-c-text-2),1926px 1463px var(--rt-c-text-2),422px 1917px var(--rt-c-text-2),1888px 1098px var(--rt-c-text-2),860px 320px var(--rt-c-text-2),1330px 442px var(--rt-c-text-2),1007px 804px var(--rt-c-text-2),1812px 1658px var(--rt-c-text-2),295px 854px var(--rt-c-text-2),1395px 844px var(--rt-c-text-2),783px 679px var(--rt-c-text-2),1420px 247px var(--rt-c-text-2),52px 930px var(--rt-c-text-2),1193px 1947px var(--rt-c-text-2),895px 1889px var(--rt-c-text-2),677px 1755px var(--rt-c-text-2),1888px 1597px var(--rt-c-text-2),1510px 1015px var(--rt-c-text-2),1106px 132px var(--rt-c-text-2),966px 1348px var(--rt-c-text-2),885px 1970px var(--rt-c-text-2),899px 1976px var(--rt-c-text-2),1473px 1598px var(--rt-c-text-2),1462px 189px var(--rt-c-text-2),1253px 684px var(--rt-c-text-2),632px 309px var(--rt-c-text-2),624px 1594px var(--rt-c-text-2),447px 157px var(--rt-c-text-2),1645px 1800px var(--rt-c-text-2),1473px 1288px var(--rt-c-text-2),143px 126px var(--rt-c-text-2),1578px 488px var(--rt-c-text-2),927px 1227px var(--rt-c-text-2),61px 1936px var(--rt-c-text-2),1153px 1039px var(--rt-c-text-2),601px 328px var(--rt-c-text-2),757px 512px var(--rt-c-text-2),61px 1685px var(--rt-c-text-2),746px 291px var(--rt-c-text-2),1408px 1755px var(--rt-c-text-2),1659px 1965px var(--rt-c-text-2),1153px 1006px var(--rt-c-text-2),1441px 995px var(--rt-c-text-2),474px 1931px var(--rt-c-text-2),1947px 744px var(--rt-c-text-2),316px 603px var(--rt-c-text-2),1979px 144px var(--rt-c-text-2),776px 973px var(--rt-c-text-2),91px 1716px var(--rt-c-text-2),1563px 167px var(--rt-c-text-2),791px 1246px var(--rt-c-text-2),1814px 514px var(--rt-c-text-2),353px 1099px var(--rt-c-text-2),638px 474px var(--rt-c-text-2),892px 1096px var(--rt-c-text-2),686px 246px var(--rt-c-text-2),458px 430px var(--rt-c-text-2),1221px 1882px var(--rt-c-text-2),1130px 551px var(--rt-c-text-2),1485px 1554px var(--rt-c-text-2),1263px 1951px var(--rt-c-text-2),1743px 1803px var(--rt-c-text-2),398px 1815px var(--rt-c-text-2),1974px 702px var(--rt-c-text-2),934px 463px var(--rt-c-text-2),1805px 777px var(--rt-c-text-2),784px 381px var(--rt-c-text-2),372px 1118px var(--rt-c-text-2),933px 15px var(--rt-c-text-2),1862px 1859px var(--rt-c-text-2),405px 626px var(--rt-c-text-2),1948px 946px var(--rt-c-text-2),1869px 1889px var(--rt-c-text-2),158px 1324px var(--rt-c-text-2),1453px 1109px var(--rt-c-text-2),1890px 345px var(--rt-c-text-2),987px 981px var(--rt-c-text-2),1526px 1867px var(--rt-c-text-2),1506px 588px var(--rt-c-text-2),468px 208px var(--rt-c-text-2),146px 1950px var(--rt-c-text-2),1005px 758px var(--rt-c-text-2),1043px 1181px var(--rt-c-text-2),1724px 152px var(--rt-c-text-2),703px 1840px var(--rt-c-text-2),1330px 1972px var(--rt-c-text-2),1486px 1597px var(--rt-c-text-2),326px 1664px var(--rt-c-text-2),1614px 978px var(--rt-c-text-2),1489px 803px var(--rt-c-text-2),1230px 977px var(--rt-c-text-2),375px 1911px var(--rt-c-text-2),1104px 805px var(--rt-c-text-2),1292px 1381px var(--rt-c-text-2),1483px 1434px var(--rt-c-text-2),1331px 881px var(--rt-c-text-2),1464px 394px var(--rt-c-text-2),279px 1799px var(--rt-c-text-2),341px 1862px var(--rt-c-text-2),603px 781px var(--rt-c-text-2),1092px 1179px var(--rt-c-text-2),384px 538px var(--rt-c-text-2),1113px 1467px var(--rt-c-text-2),364px 1183px var(--rt-c-text-2),1817px 81px var(--rt-c-text-2),1431px 1082px var(--rt-c-text-2),1561px 1123px var(--rt-c-text-2),290px 1849px var(--rt-c-text-2),1649px 423px var(--rt-c-text-2),1665px 1088px var(--rt-c-text-2),1766px 1548px var(--rt-c-text-2),780px 1570px var(--rt-c-text-2),1299px 961px var(--rt-c-text-2),1659px 363px var(--rt-c-text-2),1382px 350px var(--rt-c-text-2),630px 620px var(--rt-c-text-2),373px 646px var(--rt-c-text-2),806px 807px var(--rt-c-text-2),1476px 1973px var(--rt-c-text-2),88px 1272px var(--rt-c-text-2),185px 936px var(--rt-c-text-2),1981px 1271px var(--rt-c-text-2),1021px 255px var(--rt-c-text-2),591px 1188px var(--rt-c-text-2),913px 1527px var(--rt-c-text-2),592px 723px var(--rt-c-text-2),698px 1366px var(--rt-c-text-2),861px 1541px var(--rt-c-text-2),1109px 1984px var(--rt-c-text-2),682px 1868px var(--rt-c-text-2),1915px 535px var(--rt-c-text-2),1357px 1171px var(--rt-c-text-2),1458px 1936px var(--rt-c-text-2),1471px 1177px var(--rt-c-text-2),1167px 1562px var(--rt-c-text-2),376px 280px var(--rt-c-text-2),889px 1485px var(--rt-c-text-2),1687px 490px var(--rt-c-text-2),895px 1484px var(--rt-c-text-2),542px 1020px var(--rt-c-text-2),598px 1589px var(--rt-c-text-2),1873px 873px var(--rt-c-text-2),885px 1923px var(--rt-c-text-2),752px 1393px var(--rt-c-text-2),1919px 143px var(--rt-c-text-2),1620px 1792px var(--rt-c-text-2),1194px 455px var(--rt-c-text-2),700px 1294px var(--rt-c-text-2),1989px 1046px var(--rt-c-text-2),1637px 1904px var(--rt-c-text-2),1491px 1481px var(--rt-c-text-2),1819px 741px var(--rt-c-text-2),1234px 1259px var(--rt-c-text-2),993px 832px var(--rt-c-text-2),404px 481px var(--rt-c-text-2),1074px 429px var(--rt-c-text-2),1389px 507px var(--rt-c-text-2),293px 400px var(--rt-c-text-2),449px 170px var(--rt-c-text-2),1330px 1971px var(--rt-c-text-2),1352px 962px var(--rt-c-text-2),955px 455px var(--rt-c-text-2),729px 439px var(--rt-c-text-2),1762px 666px var(--rt-c-text-2),119px 139px var(--rt-c-text-2),1369px 1284px var(--rt-c-text-2),1727px 228px var(--rt-c-text-2),128px 1014px var(--rt-c-text-2),1119px 1372px var(--rt-c-text-2),1104px 1290px var(--rt-c-text-2),664px 437px var(--rt-c-text-2),186px 665px var(--rt-c-text-2),1652px 1124px var(--rt-c-text-2),415px 782px var(--rt-c-text-2),1121px 147px var(--rt-c-text-2),923px 701px var(--rt-c-text-2),1210px 539px var(--rt-c-text-2),321px 1462px var(--rt-c-text-2),467px 586px var(--rt-c-text-2),1666px 972px var(--rt-c-text-2),1472px 1014px var(--rt-c-text-2),1937px 873px var(--rt-c-text-2),1659px 1512px var(--rt-c-text-2),976px 271px var(--rt-c-text-2),28px 443px var(--rt-c-text-2),604px 106px var(--rt-c-text-2),1344px 1866px var(--rt-c-text-2),1726px 29px var(--rt-c-text-2),1075px 449px var(--rt-c-text-2),385px 1709px var(--rt-c-text-2),591px 1532px var(--rt-c-text-2),355px 677px var(--rt-c-text-2),447px 54px var(--rt-c-text-2),691px 1227px var(--rt-c-text-2),1702px 108px var(--rt-c-text-2),353px 1699px var(--rt-c-text-2),207px 1805px var(--rt-c-text-2),1734px 240px var(--rt-c-text-2),587px 126px var(--rt-c-text-2),1304px 1140px var(--rt-c-text-2),1574px 1300px var(--rt-c-text-2),715px 489px var(--rt-c-text-2),573px 1155px var(--rt-c-text-2),1005px 121px var(--rt-c-text-2),230px 1606px var(--rt-c-text-2),297px 414px var(--rt-c-text-2),1471px 729px var(--rt-c-text-2),431px 1821px var(--rt-c-text-2),784px 79px var(--rt-c-text-2),1541px 1361px var(--rt-c-text-2),583px 1110px var(--rt-c-text-2),1822px 1802px var(--rt-c-text-2),1454px 1904px var(--rt-c-text-2),479px 271px var(--rt-c-text-2),143px 1165px var(--rt-c-text-2),1774px 1433px var(--rt-c-text-2),1107px 1503px var(--rt-c-text-2),1839px 1723px var(--rt-c-text-2),34px 1793px var(--rt-c-text-2),36px 1803px var(--rt-c-text-2),1275px 401px var(--rt-c-text-2),517px 1324px var(--rt-c-text-2),302px 296px var(--rt-c-text-2),1735px 1876px var(--rt-c-text-2),1643px 1937px var(--rt-c-text-2),625px 318px var(--rt-c-text-2),1868px 487px var(--rt-c-text-2),1510px 1413px var(--rt-c-text-2),615px 143px var(--rt-c-text-2),608px 48px var(--rt-c-text-2),199px 362px var(--rt-c-text-2),603px 232px var(--rt-c-text-2),1821px 1238px var(--rt-c-text-2),51px 690px var(--rt-c-text-2),1706px 402px var(--rt-c-text-2),416px 237px var(--rt-c-text-2),676px 1016px var(--rt-c-text-2),459px 196px var(--rt-c-text-2),191px 1649px var(--rt-c-text-2),412px 887px var(--rt-c-text-2),1088px 1040px var(--rt-c-text-2),212px 1837px var(--rt-c-text-2),206px 1254px var(--rt-c-text-2),230px 1380px var(--rt-c-text-2),1653px 593px var(--rt-c-text-2),1766px 801px var(--rt-c-text-2),187px 98px var(--rt-c-text-2),480px 1257px var(--rt-c-text-2),1753px 945px var(--rt-c-text-2),36px 1224px var(--rt-c-text-2),189px 114px var(--rt-c-text-2),95px 1415px var(--rt-c-text-2),508px 1638px var(--rt-c-text-2),1326px 925px var(--rt-c-text-2),1790px 1489px var(--rt-c-text-2),1958px 1126px var(--rt-c-text-2),818px 442px var(--rt-c-text-2),630px 1314px var(--rt-c-text-2),1793px 479px var(--rt-c-text-2),1274px 1243px var(--rt-c-text-2),1168px 832px var(--rt-c-text-2),402px 1620px var(--rt-c-text-2),1535px 1593px var(--rt-c-text-2),1690px 425px var(--rt-c-text-2),902px 1897px var(--rt-c-text-2),1793px 1439px var(--rt-c-text-2),1065px 1413px var(--rt-c-text-2),1353px 564px var(--rt-c-text-2),160px 320px var(--rt-c-text-2),113px 665px var(--rt-c-text-2),1310px 1355px var(--rt-c-text-2),970px 1171px var(--rt-c-text-2),1463px 110px var(--rt-c-text-2),863px 1565px var(--rt-c-text-2),1499px 556px var(--rt-c-text-2),1054px 1602px var(--rt-c-text-2),1089px 240px var(--rt-c-text-2),1325px 32px var(--rt-c-text-2),1021px 1008px var(--rt-c-text-2),1310px 764px var(--rt-c-text-2),92px 1237px var(--rt-c-text-2),811px 1892px var(--rt-c-text-2),809px 348px var(--rt-c-text-2),908px 1090px var(--rt-c-text-2),648px 1204px var(--rt-c-text-2),245px 268px var(--rt-c-text-2),809px 1278px var(--rt-c-text-2),1708px 1690px var(--rt-c-text-2),1944px 1682px var(--rt-c-text-2),1757px 1651px var(--rt-c-text-2),1884px 1995px var(--rt-c-text-2),1690px 1185px var(--rt-c-text-2),447px 100px var(--rt-c-text-2),1836px 1024px var(--rt-c-text-2),1020px 1805px var(--rt-c-text-2),1428px 808px var(--rt-c-text-2),1646px 696px var(--rt-c-text-2),1865px 1666px var(--rt-c-text-2),281px 524px var(--rt-c-text-2),1568px 395px var(--rt-c-text-2),36px 1705px var(--rt-c-text-2),1227px 1603px var(--rt-c-text-2),1311px 1542px var(--rt-c-text-2),1238px 1222px var(--rt-c-text-2),780px 1360px var(--rt-c-text-2),1711px 237px var(--rt-c-text-2),1857px 1494px var(--rt-c-text-2),850px 276px var(--rt-c-text-2),1381px 10px var(--rt-c-text-2),395px 29px var(--rt-c-text-2),1357px 1552px var(--rt-c-text-2),1586px 389px var(--rt-c-text-2),1668px 312px var(--rt-c-text-2),718px 571px var(--rt-c-text-2),1758px 729px var(--rt-c-text-2),713px 592px var(--rt-c-text-2),241px 1096px var(--rt-c-text-2),1059px 1468px var(--rt-c-text-2),1869px 940px var(--rt-c-text-2),1843px 842px var(--rt-c-text-2),766px 348px var(--rt-c-text-2),933px 1527px var(--rt-c-text-2),1279px 731px var(--rt-c-text-2),1379px 1224px var(--rt-c-text-2),1108px 1295px var(--rt-c-text-2),445px 119px var(--rt-c-text-2),1998px 1570px var(--rt-c-text-2),719px 1289px var(--rt-c-text-2),651px 1959px var(--rt-c-text-2),873px 1399px var(--rt-c-text-2),1207px 321px var(--rt-c-text-2),1044px 150px var(--rt-c-text-2),527px 649px var(--rt-c-text-2),1971px 1772px var(--rt-c-text-2),1906px 1522px var(--rt-c-text-2),1502px 1710px var(--rt-c-text-2),701px 1051px var(--rt-c-text-2),1859px 1242px var(--rt-c-text-2),1818px 1677px var(--rt-c-text-2),480px 87px var(--rt-c-text-2),663px 130px var(--rt-c-text-2),495px 578px var(--rt-c-text-2),1250px 325px var(--rt-c-text-2),983px 1934px var(--rt-c-text-2),1227px 972px var(--rt-c-text-2),482px 1799px var(--rt-c-text-2),1216px 453px var(--rt-c-text-2),67px 1811px var(--rt-c-text-2),148px 950px var(--rt-c-text-2),1600px 1018px var(--rt-c-text-2),1714px 1747px var(--rt-c-text-2),739px 1943px var(--rt-c-text-2),1200px 1137px var(--rt-c-text-2),1980px 95px var(--rt-c-text-2),418px 1780px var(--rt-c-text-2),834px 269px var(--rt-c-text-2),778px 1665px var(--rt-c-text-2),1334px 1016px var(--rt-c-text-2),1310px 356px var(--rt-c-text-2),450px 1663px var(--rt-c-text-2),1414px 800px var(--rt-c-text-2),19px 1765px var(--rt-c-text-2),1508px 1721px var(--rt-c-text-2),1332px 1794px var(--rt-c-text-2),724px 212px var(--rt-c-text-2),745px 459px var(--rt-c-text-2),1564px 1220px var(--rt-c-text-2),1712px 426px var(--rt-c-text-2),1024px 26px var(--rt-c-text-2),722px 1246px var(--rt-c-text-2),1758px 1968px var(--rt-c-text-2),23px 349px var(--rt-c-text-2),1982px 1368px var(--rt-c-text-2),1314px 1489px var(--rt-c-text-2),342px 1576px var(--rt-c-text-2),1308px 617px var(--rt-c-text-2),758px 1901px var(--rt-c-text-2),1554px 1345px var(--rt-c-text-2),676px 1202px var(--rt-c-text-2),1241px 245px var(--rt-c-text-2),230px 549px var(--rt-c-text-2),1218px 1179px var(--rt-c-text-2),123px 1887px var(--rt-c-text-2),910px 978px var(--rt-c-text-2),1745px 837px var(--rt-c-text-2),476px 1125px var(--rt-c-text-2),1386px 275px var(--rt-c-text-2),1324px 1230px var(--rt-c-text-2),1600px 1309px var(--rt-c-text-2),1537px 724px var(--rt-c-text-2),578px 1082px var(--rt-c-text-2),486px 1328px var(--rt-c-text-2),1263px 1260px var(--rt-c-text-2),88px 148px var(--rt-c-text-2),606px 1532px var(--rt-c-text-2),1968px 1104px var(--rt-c-text-2),1381px 697px var(--rt-c-text-2),1318px 780px var(--rt-c-text-2),1142px 1383px var(--rt-c-text-2),946px 1484px var(--rt-c-text-2),631px 1693px var(--rt-c-text-2),1992px 1510px var(--rt-c-text-2),366px 742px var(--rt-c-text-2),267px 288px var(--rt-c-text-2),1267px 350px var(--rt-c-text-2),387px 572px var(--rt-c-text-2),262px 1568px var(--rt-c-text-2),1341px 970px var(--rt-c-text-2),485px 1792px var(--rt-c-text-2),1711px 1257px var(--rt-c-text-2),1051px 1144px var(--rt-c-text-2),862px 1634px var(--rt-c-text-2),246px 904px var(--rt-c-text-2),60px 284px var(--rt-c-text-2),1938px 1927px var(--rt-c-text-2),1112px 246px var(--rt-c-text-2),289px 1054px var(--rt-c-text-2),118px 108px var(--rt-c-text-2),1278px 701px var(--rt-c-text-2),747px 1047px var(--rt-c-text-2),1591px 983px var(--rt-c-text-2),761px 790px var(--rt-c-text-2),116px 514px var(--rt-c-text-2),160px 552px var(--rt-c-text-2),1833px 1641px var(--rt-c-text-2),1315px 325px var(--rt-c-text-2),1006px 67px var(--rt-c-text-2),402px 337px var(--rt-c-text-2),1035px 447px var(--rt-c-text-2),1153px 382px var(--rt-c-text-2),1313px 1369px var(--rt-c-text-2)}#stars2{width:2px;height:2px;background:transparent;box-shadow:1931px 12px var(--rt-c-text-2),1449px 1561px var(--rt-c-text-2),1654px 1298px var(--rt-c-text-2),465px 1660px var(--rt-c-text-2),366px 954px var(--rt-c-text-2),1096px 891px var(--rt-c-text-2),889px 1285px var(--rt-c-text-2),464px 1025px var(--rt-c-text-2),1891px 1121px var(--rt-c-text-2),1358px 1565px var(--rt-c-text-2),956px 901px var(--rt-c-text-2),1104px 567px var(--rt-c-text-2),1915px 466px var(--rt-c-text-2),476px 415px var(--rt-c-text-2),1301px 1758px var(--rt-c-text-2),1771px 128px var(--rt-c-text-2),993px 678px var(--rt-c-text-2),946px 1304px var(--rt-c-text-2),1533px 1734px var(--rt-c-text-2),457px 867px var(--rt-c-text-2),1639px 1260px var(--rt-c-text-2),1394px 380px var(--rt-c-text-2),190px 1629px var(--rt-c-text-2),1366px 1423px var(--rt-c-text-2),1288px 733px var(--rt-c-text-2),1633px 1283px var(--rt-c-text-2),253px 111px var(--rt-c-text-2),1554px 588px var(--rt-c-text-2),1301px 978px var(--rt-c-text-2),856px 58px var(--rt-c-text-2),261px 688px var(--rt-c-text-2),1530px 1521px var(--rt-c-text-2),1614px 958px var(--rt-c-text-2),1928px 343px var(--rt-c-text-2),493px 995px var(--rt-c-text-2),1510px 659px var(--rt-c-text-2),183px 150px var(--rt-c-text-2),1040px 1741px var(--rt-c-text-2),930px 109px var(--rt-c-text-2),1463px 851px var(--rt-c-text-2),663px 1279px var(--rt-c-text-2),1317px 1776px var(--rt-c-text-2),1184px 1222px var(--rt-c-text-2),781px 646px var(--rt-c-text-2),196px 1855px var(--rt-c-text-2),1303px 650px var(--rt-c-text-2),884px 1381px var(--rt-c-text-2),608px 374px var(--rt-c-text-2),1184px 357px var(--rt-c-text-2),1345px 389px var(--rt-c-text-2),331px 917px var(--rt-c-text-2),1935px 290px var(--rt-c-text-2),1157px 1409px var(--rt-c-text-2),1727px 297px var(--rt-c-text-2),352px 1038px var(--rt-c-text-2),134px 145px var(--rt-c-text-2),1163px 814px var(--rt-c-text-2),1360px 1605px var(--rt-c-text-2),1267px 486px var(--rt-c-text-2),818px 1922px var(--rt-c-text-2),303px 1105px var(--rt-c-text-2),1733px 624px var(--rt-c-text-2),1969px 988px var(--rt-c-text-2),1574px 1106px var(--rt-c-text-2),1172px 1093px var(--rt-c-text-2),1373px 1567px var(--rt-c-text-2),611px 1005px var(--rt-c-text-2),3px 1932px var(--rt-c-text-2),1655px 913px var(--rt-c-text-2),877px 75px var(--rt-c-text-2),196px 379px var(--rt-c-text-2),1551px 627px var(--rt-c-text-2),517px 5px var(--rt-c-text-2),1773px 370px var(--rt-c-text-2),775px 300px var(--rt-c-text-2),1591px 1756px var(--rt-c-text-2),1399px 373px var(--rt-c-text-2),399px 1715px var(--rt-c-text-2),1208px 1604px var(--rt-c-text-2),1691px 1819px var(--rt-c-text-2),658px 666px var(--rt-c-text-2),273px 136px var(--rt-c-text-2),500px 1887px var(--rt-c-text-2),1866px 1819px var(--rt-c-text-2),722px 63px var(--rt-c-text-2),465px 1421px var(--rt-c-text-2),1590px 686px var(--rt-c-text-2),1979px 1390px var(--rt-c-text-2),96px 934px var(--rt-c-text-2),1412px 1287px var(--rt-c-text-2),1061px 264px var(--rt-c-text-2),249px 455px var(--rt-c-text-2),218px 1811px var(--rt-c-text-2),917px 1256px var(--rt-c-text-2),1967px 1120px var(--rt-c-text-2),260px 189px var(--rt-c-text-2),1057px 616px var(--rt-c-text-2),995px 1654px var(--rt-c-text-2),264px 1343px var(--rt-c-text-2),1852px 1168px var(--rt-c-text-2),1280px 1418px var(--rt-c-text-2),791px 1883px var(--rt-c-text-2),972px 7px var(--rt-c-text-2),108px 133px var(--rt-c-text-2),658px 534px var(--rt-c-text-2),574px 1732px var(--rt-c-text-2),964px 1847px var(--rt-c-text-2),779px 91px var(--rt-c-text-2),1013px 1163px var(--rt-c-text-2),165px 401px var(--rt-c-text-2),734px 975px var(--rt-c-text-2),1660px 668px var(--rt-c-text-2),346px 754px var(--rt-c-text-2),1890px 364px var(--rt-c-text-2),1795px 543px var(--rt-c-text-2),860px 1122px var(--rt-c-text-2),851px 1311px var(--rt-c-text-2),905px 1908px var(--rt-c-text-2),950px 619px var(--rt-c-text-2),529px 893px var(--rt-c-text-2),1120px 74px var(--rt-c-text-2),1753px 1336px var(--rt-c-text-2),1230px 107px var(--rt-c-text-2),758px 1664px var(--rt-c-text-2),1372px 1410px var(--rt-c-text-2),1949px 385px var(--rt-c-text-2),1910px 1932px var(--rt-c-text-2),1288px 1985px var(--rt-c-text-2),1416px 1946px var(--rt-c-text-2),940px 385px var(--rt-c-text-2),502px 939px var(--rt-c-text-2),1851px 402px var(--rt-c-text-2),1593px 973px var(--rt-c-text-2),399px 593px var(--rt-c-text-2),120px 50px var(--rt-c-text-2),813px 51px var(--rt-c-text-2),1001px 333px var(--rt-c-text-2),1710px 851px var(--rt-c-text-2),1247px 530px var(--rt-c-text-2),1522px 1225px var(--rt-c-text-2),1128px 1539px var(--rt-c-text-2),635px 1767px var(--rt-c-text-2),30px 36px var(--rt-c-text-2),424px 265px var(--rt-c-text-2),1687px 716px var(--rt-c-text-2),1569px 566px var(--rt-c-text-2),1341px 969px var(--rt-c-text-2),1835px 987px var(--rt-c-text-2),69px 1367px var(--rt-c-text-2),518px 488px var(--rt-c-text-2),1644px 1305px var(--rt-c-text-2),346px 609px var(--rt-c-text-2),1521px 90px var(--rt-c-text-2),1156px 1865px var(--rt-c-text-2),409px 739px var(--rt-c-text-2),595px 894px var(--rt-c-text-2),820px 654px var(--rt-c-text-2),1701px 684px var(--rt-c-text-2),1939px 1457px var(--rt-c-text-2),945px 1678px var(--rt-c-text-2),1294px 488px var(--rt-c-text-2),141px 494px var(--rt-c-text-2),1519px 319px var(--rt-c-text-2),61px 1609px var(--rt-c-text-2),166px 1293px var(--rt-c-text-2),1533px 284px var(--rt-c-text-2),1133px 1756px var(--rt-c-text-2),372px 1364px var(--rt-c-text-2),1257px 672px var(--rt-c-text-2),473px 289px var(--rt-c-text-2),1359px 1349px var(--rt-c-text-2),308px 665px var(--rt-c-text-2),801px 610px var(--rt-c-text-2),160px 288px var(--rt-c-text-2),1333px 348px var(--rt-c-text-2),931px 262px var(--rt-c-text-2),1542px 1735px var(--rt-c-text-2),1418px 940px var(--rt-c-text-2),994px 1371px var(--rt-c-text-2),344px 1013px var(--rt-c-text-2),1737px 1844px var(--rt-c-text-2),57px 1057px var(--rt-c-text-2),231px 1459px var(--rt-c-text-2),743px 434px var(--rt-c-text-2),1276px 1233px var(--rt-c-text-2),1480px 1781px var(--rt-c-text-2),1756px 468px var(--rt-c-text-2),767px 66px var(--rt-c-text-2),164px 1071px var(--rt-c-text-2),282px 129px var(--rt-c-text-2),640px 1534px var(--rt-c-text-2),1187px 537px var(--rt-c-text-2),1885px 87px var(--rt-c-text-2),955px 113px var(--rt-c-text-2),1508px 422px var(--rt-c-text-2),459px 1292px var(--rt-c-text-2),1248px 1628px var(--rt-c-text-2),1163px 1661px var(--rt-c-text-2),42px 952px var(--rt-c-text-2),360px 1700px var(--rt-c-text-2);animation:animStar 100s linear infinite}#stars2:after{content:" ";position:absolute;top:2000px;width:2px;height:2px;background:transparent;box-shadow:1931px 12px var(--rt-c-text-2),1449px 1561px var(--rt-c-text-2),1654px 1298px var(--rt-c-text-2),465px 1660px var(--rt-c-text-2),366px 954px var(--rt-c-text-2),1096px 891px var(--rt-c-text-2),889px 1285px var(--rt-c-text-2),464px 1025px var(--rt-c-text-2),1891px 1121px var(--rt-c-text-2),1358px 1565px var(--rt-c-text-2),956px 901px var(--rt-c-text-2),1104px 567px var(--rt-c-text-2),1915px 466px var(--rt-c-text-2),476px 415px var(--rt-c-text-2),1301px 1758px var(--rt-c-text-2),1771px 128px var(--rt-c-text-2),993px 678px var(--rt-c-text-2),946px 1304px var(--rt-c-text-2),1533px 1734px var(--rt-c-text-2),457px 867px var(--rt-c-text-2),1639px 1260px var(--rt-c-text-2),1394px 380px var(--rt-c-text-2),190px 1629px var(--rt-c-text-2),1366px 1423px var(--rt-c-text-2),1288px 733px var(--rt-c-text-2),1633px 1283px var(--rt-c-text-2),253px 111px var(--rt-c-text-2),1554px 588px var(--rt-c-text-2),1301px 978px var(--rt-c-text-2),856px 58px var(--rt-c-text-2),261px 688px var(--rt-c-text-2),1530px 1521px var(--rt-c-text-2),1614px 958px var(--rt-c-text-2),1928px 343px var(--rt-c-text-2),493px 995px var(--rt-c-text-2),1510px 659px var(--rt-c-text-2),183px 150px var(--rt-c-text-2),1040px 1741px var(--rt-c-text-2),930px 109px var(--rt-c-text-2),1463px 851px var(--rt-c-text-2),663px 1279px var(--rt-c-text-2),1317px 1776px var(--rt-c-text-2),1184px 1222px var(--rt-c-text-2),781px 646px var(--rt-c-text-2),196px 1855px var(--rt-c-text-2),1303px 650px var(--rt-c-text-2),884px 1381px var(--rt-c-text-2),608px 374px var(--rt-c-text-2),1184px 357px var(--rt-c-text-2),1345px 389px var(--rt-c-text-2),331px 917px var(--rt-c-text-2),1935px 290px var(--rt-c-text-2),1157px 1409px var(--rt-c-text-2),1727px 297px var(--rt-c-text-2),352px 1038px var(--rt-c-text-2),134px 145px var(--rt-c-text-2),1163px 814px var(--rt-c-text-2),1360px 1605px var(--rt-c-text-2),1267px 486px var(--rt-c-text-2),818px 1922px var(--rt-c-text-2),303px 1105px var(--rt-c-text-2),1733px 624px var(--rt-c-text-2),1969px 988px var(--rt-c-text-2),1574px 1106px var(--rt-c-text-2),1172px 1093px var(--rt-c-text-2),1373px 1567px var(--rt-c-text-2),611px 1005px var(--rt-c-text-2),3px 1932px var(--rt-c-text-2),1655px 913px var(--rt-c-text-2),877px 75px var(--rt-c-text-2),196px 379px var(--rt-c-text-2),1551px 627px var(--rt-c-text-2),517px 5px var(--rt-c-text-2),1773px 370px var(--rt-c-text-2),775px 300px var(--rt-c-text-2),1591px 1756px var(--rt-c-text-2),1399px 373px var(--rt-c-text-2),399px 1715px var(--rt-c-text-2),1208px 1604px var(--rt-c-text-2),1691px 1819px var(--rt-c-text-2),658px 666px var(--rt-c-text-2),273px 136px var(--rt-c-text-2),500px 1887px var(--rt-c-text-2),1866px 1819px var(--rt-c-text-2),722px 63px var(--rt-c-text-2),465px 1421px var(--rt-c-text-2),1590px 686px var(--rt-c-text-2),1979px 1390px var(--rt-c-text-2),96px 934px var(--rt-c-text-2),1412px 1287px var(--rt-c-text-2),1061px 264px var(--rt-c-text-2),249px 455px var(--rt-c-text-2),218px 1811px var(--rt-c-text-2),917px 1256px var(--rt-c-text-2),1967px 1120px var(--rt-c-text-2),260px 189px var(--rt-c-text-2),1057px 616px var(--rt-c-text-2),995px 1654px var(--rt-c-text-2),264px 1343px var(--rt-c-text-2),1852px 1168px var(--rt-c-text-2),1280px 1418px var(--rt-c-text-2),791px 1883px var(--rt-c-text-2),972px 7px var(--rt-c-text-2),108px 133px var(--rt-c-text-2),658px 534px var(--rt-c-text-2),574px 1732px var(--rt-c-text-2),964px 1847px var(--rt-c-text-2),779px 91px var(--rt-c-text-2),1013px 1163px var(--rt-c-text-2),165px 401px var(--rt-c-text-2),734px 975px var(--rt-c-text-2),1660px 668px var(--rt-c-text-2),346px 754px var(--rt-c-text-2),1890px 364px var(--rt-c-text-2),1795px 543px var(--rt-c-text-2),860px 1122px var(--rt-c-text-2),851px 1311px var(--rt-c-text-2),905px 1908px var(--rt-c-text-2),950px 619px var(--rt-c-text-2),529px 893px var(--rt-c-text-2),1120px 74px var(--rt-c-text-2),1753px 1336px var(--rt-c-text-2),1230px 107px var(--rt-c-text-2),758px 1664px var(--rt-c-text-2),1372px 1410px var(--rt-c-text-2),1949px 385px var(--rt-c-text-2),1910px 1932px var(--rt-c-text-2),1288px 1985px var(--rt-c-text-2),1416px 1946px var(--rt-c-text-2),940px 385px var(--rt-c-text-2),502px 939px var(--rt-c-text-2),1851px 402px var(--rt-c-text-2),1593px 973px var(--rt-c-text-2),399px 593px var(--rt-c-text-2),120px 50px var(--rt-c-text-2),813px 51px var(--rt-c-text-2),1001px 333px var(--rt-c-text-2),1710px 851px var(--rt-c-text-2),1247px 530px var(--rt-c-text-2),1522px 1225px var(--rt-c-text-2),1128px 1539px var(--rt-c-text-2),635px 1767px var(--rt-c-text-2),30px 36px var(--rt-c-text-2),424px 265px var(--rt-c-text-2),1687px 716px var(--rt-c-text-2),1569px 566px var(--rt-c-text-2),1341px 969px var(--rt-c-text-2),1835px 987px var(--rt-c-text-2),69px 1367px var(--rt-c-text-2),518px 488px var(--rt-c-text-2),1644px 1305px var(--rt-c-text-2),346px 609px var(--rt-c-text-2),1521px 90px var(--rt-c-text-2),1156px 1865px var(--rt-c-text-2),409px 739px var(--rt-c-text-2),595px 894px var(--rt-c-text-2),820px 654px var(--rt-c-text-2),1701px 684px var(--rt-c-text-2),1939px 1457px var(--rt-c-text-2),945px 1678px var(--rt-c-text-2),1294px 488px var(--rt-c-text-2),141px 494px var(--rt-c-text-2),1519px 319px var(--rt-c-text-2),61px 1609px var(--rt-c-text-2),166px 1293px var(--rt-c-text-2),1533px 284px var(--rt-c-text-2),1133px 1756px var(--rt-c-text-2),372px 1364px var(--rt-c-text-2),1257px 672px var(--rt-c-text-2),473px 289px var(--rt-c-text-2),1359px 1349px var(--rt-c-text-2),308px 665px var(--rt-c-text-2),801px 610px var(--rt-c-text-2),160px 288px var(--rt-c-text-2),1333px 348px var(--rt-c-text-2),931px 262px var(--rt-c-text-2),1542px 1735px var(--rt-c-text-2),1418px 940px var(--rt-c-text-2),994px 1371px var(--rt-c-text-2),344px 1013px var(--rt-c-text-2),1737px 1844px var(--rt-c-text-2),57px 1057px var(--rt-c-text-2),231px 1459px var(--rt-c-text-2),743px 434px var(--rt-c-text-2),1276px 1233px var(--rt-c-text-2),1480px 1781px var(--rt-c-text-2),1756px 468px var(--rt-c-text-2),767px 66px var(--rt-c-text-2),164px 1071px var(--rt-c-text-2),282px 129px var(--rt-c-text-2),640px 1534px var(--rt-c-text-2),1187px 537px var(--rt-c-text-2),1885px 87px var(--rt-c-text-2),955px 113px var(--rt-c-text-2),1508px 422px var(--rt-c-text-2),459px 1292px var(--rt-c-text-2),1248px 1628px var(--rt-c-text-2),1163px 1661px var(--rt-c-text-2),42px 952px var(--rt-c-text-2),360px 1700px var(--rt-c-text-2)}#stars3{width:3px;height:3px;background:transparent;box-shadow:94px 166px var(--rt-c-text-2),34px 1465px var(--rt-c-text-2),1879px 866px var(--rt-c-text-2),1215px 1039px var(--rt-c-text-2),753px 1904px var(--rt-c-text-2),1384px 210px var(--rt-c-text-2),1672px 1395px var(--rt-c-text-2),1258px 1213px var(--rt-c-text-2),1769px 866px var(--rt-c-text-2),368px 1964px var(--rt-c-text-2),1518px 1504px var(--rt-c-text-2),1657px 463px var(--rt-c-text-2),43px 1710px var(--rt-c-text-2),1957px 1206px var(--rt-c-text-2),525px 219px var(--rt-c-text-2),469px 1635px var(--rt-c-text-2),1352px 43px var(--rt-c-text-2),150px 1565px var(--rt-c-text-2),1687px 427px var(--rt-c-text-2),389px 623px var(--rt-c-text-2),1332px 627px var(--rt-c-text-2),1158px 494px var(--rt-c-text-2),1258px 31px var(--rt-c-text-2),1533px 646px var(--rt-c-text-2),1974px 1982px var(--rt-c-text-2),1068px 1138px var(--rt-c-text-2),1883px 1239px var(--rt-c-text-2),820px 840px var(--rt-c-text-2),1042px 1211px var(--rt-c-text-2),1867px 1140px var(--rt-c-text-2),1239px 1448px var(--rt-c-text-2),1360px 1685px var(--rt-c-text-2),752px 1595px var(--rt-c-text-2),46px 14px var(--rt-c-text-2),1043px 349px var(--rt-c-text-2),618px 1743px var(--rt-c-text-2),971px 1282px var(--rt-c-text-2),27px 1638px var(--rt-c-text-2),1171px 284px var(--rt-c-text-2),951px 1590px var(--rt-c-text-2),42px 1205px var(--rt-c-text-2),381px 960px var(--rt-c-text-2),1744px 1608px var(--rt-c-text-2),1212px 817px var(--rt-c-text-2),1940px 757px var(--rt-c-text-2),546px 317px var(--rt-c-text-2),1383px 111px var(--rt-c-text-2),1265px 1073px var(--rt-c-text-2),899px 499px var(--rt-c-text-2),4px 254px var(--rt-c-text-2),1830px 1051px var(--rt-c-text-2),1283px 457px var(--rt-c-text-2),881px 556px var(--rt-c-text-2),1741px 804px var(--rt-c-text-2),936px 561px var(--rt-c-text-2),1184px 1998px var(--rt-c-text-2),461px 1662px var(--rt-c-text-2),336px 830px var(--rt-c-text-2),343px 1044px var(--rt-c-text-2),1891px 694px var(--rt-c-text-2),1100px 2px var(--rt-c-text-2),280px 1866px var(--rt-c-text-2),334px 1732px var(--rt-c-text-2),974px 1187px var(--rt-c-text-2),1171px 1782px var(--rt-c-text-2),1110px 1067px var(--rt-c-text-2),378px 685px var(--rt-c-text-2),1579px 525px var(--rt-c-text-2),1306px 463px var(--rt-c-text-2),521px 1321px var(--rt-c-text-2),1097px 165px var(--rt-c-text-2),1952px 1436px var(--rt-c-text-2),690px 1525px var(--rt-c-text-2),1996px 418px var(--rt-c-text-2),1872px 987px var(--rt-c-text-2),1028px 1716px var(--rt-c-text-2),733px 1455px var(--rt-c-text-2),1277px 1321px var(--rt-c-text-2),1384px 1430px var(--rt-c-text-2),1182px 294px var(--rt-c-text-2),1553px 1342px var(--rt-c-text-2),1856px 1341px var(--rt-c-text-2),836px 1457px var(--rt-c-text-2),1101px 799px var(--rt-c-text-2),722px 648px var(--rt-c-text-2),1304px 1146px var(--rt-c-text-2),289px 1031px var(--rt-c-text-2),136px 1453px var(--rt-c-text-2),1448px 1429px var(--rt-c-text-2),901px 1629px var(--rt-c-text-2),264px 1314px var(--rt-c-text-2),771px 963px var(--rt-c-text-2),1787px 1939px var(--rt-c-text-2),653px 1150px var(--rt-c-text-2),663px 800px var(--rt-c-text-2),1044px 1652px var(--rt-c-text-2),1287px 904px var(--rt-c-text-2),152px 1105px var(--rt-c-text-2),1363px 116px var(--rt-c-text-2),529px 353px var(--rt-c-text-2);animation:animStar 150s linear infinite}#stars3:after{content:" ";position:absolute;top:2000px;width:3px;height:3px;background:transparent;box-shadow:94px 166px var(--rt-c-text-2),34px 1465px var(--rt-c-text-2),1879px 866px var(--rt-c-text-2),1215px 1039px var(--rt-c-text-2),753px 1904px var(--rt-c-text-2),1384px 210px var(--rt-c-text-2),1672px 1395px var(--rt-c-text-2),1258px 1213px var(--rt-c-text-2),1769px 866px var(--rt-c-text-2),368px 1964px var(--rt-c-text-2),1518px 1504px var(--rt-c-text-2),1657px 463px var(--rt-c-text-2),43px 1710px var(--rt-c-text-2),1957px 1206px var(--rt-c-text-2),525px 219px var(--rt-c-text-2),469px 1635px var(--rt-c-text-2),1352px 43px var(--rt-c-text-2),150px 1565px var(--rt-c-text-2),1687px 427px var(--rt-c-text-2),389px 623px var(--rt-c-text-2),1332px 627px var(--rt-c-text-2),1158px 494px var(--rt-c-text-2),1258px 31px var(--rt-c-text-2),1533px 646px var(--rt-c-text-2),1974px 1982px var(--rt-c-text-2),1068px 1138px var(--rt-c-text-2),1883px 1239px var(--rt-c-text-2),820px 840px var(--rt-c-text-2),1042px 1211px var(--rt-c-text-2),1867px 1140px var(--rt-c-text-2),1239px 1448px var(--rt-c-text-2),1360px 1685px var(--rt-c-text-2),752px 1595px var(--rt-c-text-2),46px 14px var(--rt-c-text-2),1043px 349px var(--rt-c-text-2),618px 1743px var(--rt-c-text-2),971px 1282px var(--rt-c-text-2),27px 1638px var(--rt-c-text-2),1171px 284px var(--rt-c-text-2),951px 1590px var(--rt-c-text-2),42px 1205px var(--rt-c-text-2),381px 960px var(--rt-c-text-2),1744px 1608px var(--rt-c-text-2),1212px 817px var(--rt-c-text-2),1940px 757px var(--rt-c-text-2),546px 317px var(--rt-c-text-2),1383px 111px var(--rt-c-text-2),1265px 1073px var(--rt-c-text-2),899px 499px var(--rt-c-text-2),4px 254px var(--rt-c-text-2),1830px 1051px var(--rt-c-text-2),1283px 457px var(--rt-c-text-2),881px 556px var(--rt-c-text-2),1741px 804px var(--rt-c-text-2),936px 561px var(--rt-c-text-2),1184px 1998px var(--rt-c-text-2),461px 1662px var(--rt-c-text-2),336px 830px var(--rt-c-text-2),343px 1044px var(--rt-c-text-2),1891px 694px var(--rt-c-text-2),1100px 2px var(--rt-c-text-2),280px 1866px var(--rt-c-text-2),334px 1732px var(--rt-c-text-2),974px 1187px var(--rt-c-text-2),1171px 1782px var(--rt-c-text-2),1110px 1067px var(--rt-c-text-2),378px 685px var(--rt-c-text-2),1579px 525px var(--rt-c-text-2),1306px 463px var(--rt-c-text-2),521px 1321px var(--rt-c-text-2),1097px 165px var(--rt-c-text-2),1952px 1436px var(--rt-c-text-2),690px 1525px var(--rt-c-text-2),1996px 418px var(--rt-c-text-2),1872px 987px var(--rt-c-text-2),1028px 1716px var(--rt-c-text-2),733px 1455px var(--rt-c-text-2),1277px 1321px var(--rt-c-text-2),1384px 1430px var(--rt-c-text-2),1182px 294px var(--rt-c-text-2),1553px 1342px var(--rt-c-text-2),1856px 1341px var(--rt-c-text-2),836px 1457px var(--rt-c-text-2),1101px 799px var(--rt-c-text-2),722px 648px var(--rt-c-text-2),1304px 1146px var(--rt-c-text-2),289px 1031px var(--rt-c-text-2),136px 1453px var(--rt-c-text-2),1448px 1429px var(--rt-c-text-2),901px 1629px var(--rt-c-text-2),264px 1314px var(--rt-c-text-2),771px 963px var(--rt-c-text-2),1787px 1939px var(--rt-c-text-2),653px 1150px var(--rt-c-text-2),663px 800px var(--rt-c-text-2),1044px 1652px var(--rt-c-text-2),1287px 904px var(--rt-c-text-2),152px 1105px var(--rt-c-text-2),1363px 116px var(--rt-c-text-2),529px 353px var(--rt-c-text-2)}@keyframes animStar{0%{transform:translateY(0)}to{transform:translateY(-2000px)}}img[data-v-7f085eee],img[data-v-7dca3bf8],img[data-v-9192108e],img[data-v-55e4a3a5],img[data-v-2bf4bed6],img[data-v-098f6603],img[data-v-03d675cd]{border:1px solid #ddd}.post[data-v-adae98ee]{border-bottom:1px solid var(--vp-c-border);margin:1rem 0 2rem}.post .title[data-v-adae98ee]{font-size:1.3rem;font-weight:600;border-bottom:1px solid var(--vp-c-divider);margin:3rem 0 1rem;padding-bottom:1rem}.post .title a[data-v-adae98ee]{text-decoration:none;color:var(--vp-c-text-2);transition:color .3s easy-out}.post .title a[data-v-adae98ee]:hover{color:var(--vp-c-text-1)}.post .content[data-v-adae98ee]{display:flex}.post .content .image[data-v-adae98ee]{flex:1 1 30%;margin:0 1rem 1rem 0}.post .content .desc[data-v-adae98ee]{flex:1 1 70%}@media (max-width: 768px){.post .content[data-v-adae98ee]{flex-direction:column}}.post .footer[data-v-adae98ee]{display:flex;justify-content:space-between;padding:2rem 0 .5rem;color:var(--vp-c-text-3)}.post .footer a[data-v-adae98ee]{color:var(--vp-c-text-3)}img[data-v-c60bbba4],img[data-v-4813b339]{border:1px solid #ddd}.VPButton.alt.alt-border{border-color:#fce728}.VPButton.alt.alt-border:hover{border-color:#f4dc02}.form-container{border-radius:5px;padding:20px 0}input[type=text],textarea{width:100%;padding:12px;border:1px solid #ccc;outline-color:#ccc;border-radius:4px;box-sizing:border-box;margin-top:6px;margin-bottom:16px;resize:vertical;transition:.8s}input[type=text]:focus,textarea:focus,input[type=text]:focus-visible,textarea:focus-visible{outline-color:#6e478e}textarea{height:200px}input[type=submit]{background-color:#45166b;color:#fff;font-size:1.1em;padding:12px 20px;margin-top:1em;border:none;border-radius:4px;cursor:pointer;transition:all .3s ease-in-out}input[type=submit]:hover{background-color:#6e478e}input:scope[type=submit][disabled]{opacity:.5;cursor:unset}input:scope[type=submit][disabled]:hover{background-color:#45166b}img[data-v-58c0a4ac],img[data-v-a7c19219],img[data-v-879d1339],img[data-v-198a4ede],img[data-v-2bb4ae84],img[data-v-8813ef85],img[data-v-b4d24664]{border:1px solid #ddd}.VPLocalSearchBox[data-v-fdcd6bb1]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-fdcd6bb1]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-fdcd6bb1]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-fdcd6bb1]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-fdcd6bb1]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 767px){.search-bar[data-v-fdcd6bb1]{padding:0 8px}}.search-bar[data-v-fdcd6bb1]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-fdcd6bb1]{display:block;font-size:18px}.navigate-icon[data-v-fdcd6bb1]{display:block;font-size:14px}.search-icon[data-v-fdcd6bb1]{margin:8px}@media (max-width: 767px){.search-icon[data-v-fdcd6bb1]{display:none}}.search-input[data-v-fdcd6bb1]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-fdcd6bb1]{padding:6px 4px}}.search-actions[data-v-fdcd6bb1]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-fdcd6bb1]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-fdcd6bb1]{display:none}}.search-actions button[data-v-fdcd6bb1]{padding:8px}.search-actions button[data-v-fdcd6bb1]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-fdcd6bb1]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-fdcd6bb1]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-fdcd6bb1]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-fdcd6bb1]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-fdcd6bb1]{display:none}}.search-keyboard-shortcuts kbd[data-v-fdcd6bb1]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-fdcd6bb1]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-fdcd6bb1]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-fdcd6bb1]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-fdcd6bb1]{margin:8px}}.titles[data-v-fdcd6bb1]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-fdcd6bb1]{display:flex;align-items:center;gap:4px}.title.main[data-v-fdcd6bb1]{font-weight:500}.title-icon[data-v-fdcd6bb1]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-fdcd6bb1]{opacity:.5}.result.selected[data-v-fdcd6bb1]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-fdcd6bb1]{position:relative}.excerpt[data-v-fdcd6bb1]{opacity:75%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;opacity:.5;margin-top:4px}.result.selected .excerpt[data-v-fdcd6bb1]{opacity:1}.excerpt[data-v-fdcd6bb1] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-fdcd6bb1] mark,.excerpt[data-v-fdcd6bb1] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-fdcd6bb1] .vp-code-group .tabs{display:none}.excerpt[data-v-fdcd6bb1] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-fdcd6bb1]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-fdcd6bb1]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-fdcd6bb1],.result.selected .title-icon[data-v-fdcd6bb1]{color:var(--vp-c-brand-1)!important}.no-results[data-v-fdcd6bb1]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-fdcd6bb1]{flex:none}
+@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:lang(zh){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, "PingFang SC", "Noto Sans CJK SC", "Noto Sans SC", "Heiti SC", "DengXian", "Microsoft YaHei", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{display:inline-block;margin:auto 2px -2px}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.vpi-social-discord{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418Z'/%3E%3C/svg%3E")}.vpi-social-facebook{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z'/%3E%3C/svg%3E")}.vpi-social-github{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")}.vpi-social-instagram{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.03.084c-1.277.06-2.149.264-2.91.563a5.874 5.874 0 0 0-2.124 1.388 5.878 5.878 0 0 0-1.38 2.127C.321 4.926.12 5.8.064 7.076.008 8.354-.005 8.764.001 12.023c.007 3.259.021 3.667.083 4.947.061 1.277.264 2.149.563 2.911.308.789.72 1.457 1.388 2.123a5.872 5.872 0 0 0 2.129 1.38c.763.295 1.636.496 2.913.552 1.278.056 1.689.069 4.947.063 3.257-.007 3.668-.021 4.947-.082 1.28-.06 2.147-.265 2.91-.563a5.881 5.881 0 0 0 2.123-1.388 5.881 5.881 0 0 0 1.38-2.129c.295-.763.496-1.636.551-2.912.056-1.28.07-1.69.063-4.948-.006-3.258-.02-3.667-.081-4.947-.06-1.28-.264-2.148-.564-2.911a5.892 5.892 0 0 0-1.387-2.123 5.857 5.857 0 0 0-2.128-1.38C19.074.322 18.202.12 16.924.066 15.647.009 15.236-.006 11.977 0 8.718.008 8.31.021 7.03.084m.14 21.693c-1.17-.05-1.805-.245-2.228-.408a3.736 3.736 0 0 1-1.382-.895 3.695 3.695 0 0 1-.9-1.378c-.165-.423-.363-1.058-.417-2.228-.06-1.264-.072-1.644-.08-4.848-.006-3.204.006-3.583.061-4.848.05-1.169.246-1.805.408-2.228.216-.561.477-.96.895-1.382a3.705 3.705 0 0 1 1.379-.9c.423-.165 1.057-.361 2.227-.417 1.265-.06 1.644-.072 4.848-.08 3.203-.006 3.583.006 4.85.062 1.168.05 1.804.244 2.227.408.56.216.96.475 1.382.895.421.42.681.817.9 1.378.165.422.362 1.056.417 2.227.06 1.265.074 1.645.08 4.848.005 3.203-.006 3.583-.061 4.848-.051 1.17-.245 1.805-.408 2.23-.216.56-.477.96-.896 1.38a3.705 3.705 0 0 1-1.378.9c-.422.165-1.058.362-2.226.418-1.266.06-1.645.072-4.85.079-3.204.007-3.582-.006-4.848-.06m9.783-16.192a1.44 1.44 0 1 0 1.437-1.442 1.44 1.44 0 0 0-1.437 1.442M5.839 12.012a6.161 6.161 0 1 0 12.323-.024 6.162 6.162 0 0 0-12.323.024M8 12.008A4 4 0 1 1 12.008 16 4 4 0 0 1 8 12.008'/%3E%3C/svg%3E")}.vpi-social-linkedin{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z'/%3E%3C/svg%3E")}.vpi-social-mastodon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z'/%3E%3C/svg%3E")}.vpi-social-npm{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z'/%3E%3C/svg%3E")}.vpi-social-slack{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z'/%3E%3C/svg%3E")}.vpi-social-twitter,.vpi-social-x{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z'/%3E%3C/svg%3E")}.vpi-social-youtube{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s}.vp-doc blockquote>p{margin:0;font-size:16px;color:var(--vp-c-text-2);transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-f7e6a420]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-f7e6a420],.VPBackdrop.fade-leave-to[data-v-f7e6a420]{opacity:0}.VPBackdrop.fade-leave-active[data-v-f7e6a420]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-f7e6a420]{display:none}}.NotFound[data-v-220621b2]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-220621b2]{padding:96px 32px 168px}}.code[data-v-220621b2]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-220621b2]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-220621b2]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-220621b2]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-220621b2]{padding-top:20px}.link[data-v-220621b2]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-220621b2]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-20b2d660]{position:relative;z-index:1}.nested[data-v-20b2d660]{padding-right:16px;padding-left:16px}.outline-link[data-v-20b2d660]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-20b2d660]:hover,.outline-link.active[data-v-20b2d660]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-20b2d660]{padding-left:13px}.VPDocAsideOutline[data-v-82f7ebc9]{display:none}.VPDocAsideOutline.has-outline[data-v-82f7ebc9]{display:block}.content[data-v-82f7ebc9]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-82f7ebc9]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-82f7ebc9]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-8a1c0c90]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-8a1c0c90]{flex-grow:1}.VPDocAside[data-v-8a1c0c90] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-8a1c0c90] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-8a1c0c90] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-d04b7ca3]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-d04b7ca3]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-f9b7cb1b]{margin-top:64px}.edit-info[data-v-f9b7cb1b]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-f9b7cb1b]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-f9b7cb1b]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-f9b7cb1b]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-f9b7cb1b]{margin-right:8px}.prev-next[data-v-f9b7cb1b]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-f9b7cb1b]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-f9b7cb1b]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-f9b7cb1b]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-f9b7cb1b]{margin-left:auto;text-align:right}.desc[data-v-f9b7cb1b]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-f9b7cb1b]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-bd65f111]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-bd65f111]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-bd65f111]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-bd65f111]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-bd65f111]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-bd65f111]{display:flex;justify-content:center}.VPDoc .aside[data-v-bd65f111]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-bd65f111]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-bd65f111]{max-width:1104px}}.container[data-v-bd65f111]{margin:0 auto;width:100%}.aside[data-v-bd65f111]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-bd65f111]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-bd65f111]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-bd65f111]::-webkit-scrollbar{display:none}.aside-curtain[data-v-bd65f111]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-bd65f111]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-bd65f111]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-bd65f111]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-bd65f111]{order:1;margin:0;min-width:640px}}.content-container[data-v-bd65f111]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-bd65f111]{max-width:688px}.VPButton[data-v-5a1289ff]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-5a1289ff]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-5a1289ff]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-5a1289ff]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-5a1289ff]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-5a1289ff]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-5a1289ff]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-5a1289ff]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-5a1289ff]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-5a1289ff]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-5a1289ff]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-5a1289ff]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-5a1289ff]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-b2acdd16]{display:none}.dark .VPImage.light[data-v-b2acdd16]{display:none}.VPHero[data-v-a6a4ce63]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-a6a4ce63]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-a6a4ce63]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-a6a4ce63]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-a6a4ce63]{flex-direction:row}}.main[data-v-a6a4ce63]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-a6a4ce63]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-a6a4ce63]{text-align:left}}@media (min-width: 960px){.main[data-v-a6a4ce63]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-a6a4ce63]{max-width:592px}}.name[data-v-a6a4ce63],.text[data-v-a6a4ce63]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-a6a4ce63],.VPHero.has-image .text[data-v-a6a4ce63]{margin:0 auto}.name[data-v-a6a4ce63]{color:var(--vp-home-hero-name-color)}.clip[data-v-a6a4ce63]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-a6a4ce63],.text[data-v-a6a4ce63]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-a6a4ce63],.text[data-v-a6a4ce63]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-a6a4ce63],.VPHero.has-image .text[data-v-a6a4ce63]{margin:0}}.tagline[data-v-a6a4ce63]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-a6a4ce63]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-a6a4ce63]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-a6a4ce63]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-a6a4ce63]{margin:0}}.actions[data-v-a6a4ce63]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-a6a4ce63]{justify-content:center}@media (min-width: 640px){.actions[data-v-a6a4ce63]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-a6a4ce63]{justify-content:flex-start}}.action[data-v-a6a4ce63]{flex-shrink:0;padding:6px}.image[data-v-a6a4ce63]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-a6a4ce63]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-a6a4ce63]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-a6a4ce63]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-a6a4ce63]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-a6a4ce63]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-a6a4ce63]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-a6a4ce63]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-a6a4ce63]{width:320px;height:320px}}[data-v-a6a4ce63] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-a6a4ce63] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-a6a4ce63] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-8391275c]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-8391275c]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-8391275c]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-8391275c]>.VPImage{margin-bottom:20px}.icon[data-v-8391275c]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-8391275c]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-8391275c]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-8391275c]{padding-top:8px}.link-text-value[data-v-8391275c]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-8391275c]{margin-left:6px}.VPFeatures[data-v-3c1373ab]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-3c1373ab]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-3c1373ab]{padding:0 64px}}.container[data-v-3c1373ab]{margin:0 auto;max-width:1152px}.items[data-v-3c1373ab]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-3c1373ab]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-3c1373ab],.item.grid-4[data-v-3c1373ab],.item.grid-6[data-v-3c1373ab]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-3c1373ab],.item.grid-4[data-v-3c1373ab]{width:50%}.item.grid-3[data-v-3c1373ab],.item.grid-6[data-v-3c1373ab]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-3c1373ab]{width:25%}}.container[data-v-672f3595]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-672f3595]{padding:0 48px}}@media (min-width: 960px){.container[data-v-672f3595]{width:100%;padding:0 64px}}.vp-doc[data-v-672f3595] .VPHomeSponsors,.vp-doc[data-v-672f3595] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-672f3595] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-672f3595] .VPHomeSponsors a,.vp-doc[data-v-672f3595] .VPTeamPage a{text-decoration:none}.VPHome[data-v-a0ef0bc1]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-a0ef0bc1]{margin-bottom:128px}}.VPContent[data-v-69cb45dd]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-69cb45dd]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-69cb45dd]{margin:0}@media (min-width: 960px){.VPContent[data-v-69cb45dd]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-69cb45dd]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-69cb45dd]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-63f649a4]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-63f649a4]{display:none}.VPFooter[data-v-63f649a4] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-63f649a4] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-63f649a4]{padding:32px}}.container[data-v-63f649a4]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-63f649a4],.copyright[data-v-63f649a4]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-1ec6ac20]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-1ec6ac20]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-1ec6ac20]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-1ec6ac20]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-1ec6ac20]{color:var(--vp-c-text-1)}.icon[data-v-1ec6ac20]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-1ec6ac20]{font-size:14px}.icon[data-v-1ec6ac20]{font-size:16px}}.open>.icon[data-v-1ec6ac20]{transform:rotate(90deg)}.items[data-v-1ec6ac20]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-1ec6ac20]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-1ec6ac20]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-1ec6ac20]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-1ec6ac20]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-1ec6ac20]{transition:all .2s ease-out}.flyout-leave-active[data-v-1ec6ac20]{transition:all .15s ease-in}.flyout-enter-from[data-v-1ec6ac20],.flyout-leave-to[data-v-1ec6ac20]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-cd52d3f7]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-cd52d3f7]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-cd52d3f7]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-cd52d3f7]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-cd52d3f7]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-cd52d3f7]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-cd52d3f7]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-cd52d3f7]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-cd52d3f7]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-cd52d3f7]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-cd52d3f7]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-cd52d3f7]{display:none}}.menu-icon[data-v-cd52d3f7]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-cd52d3f7]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-cd52d3f7]{padding:12px 32px 11px}}.VPSwitch[data-v-79f406f6]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-79f406f6]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-79f406f6]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-79f406f6]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-79f406f6] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-79f406f6] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-e51d7bc4]{opacity:1}.moon[data-v-e51d7bc4],.dark .sun[data-v-e51d7bc4]{opacity:0}.dark .moon[data-v-e51d7bc4]{opacity:1}.dark .VPSwitchAppearance[data-v-e51d7bc4] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-0e630b14]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-0e630b14]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-fb6e9438]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-fb6e9438]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-fb6e9438]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-fb6e9438]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-6aa4cfc1]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-6aa4cfc1]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-6aa4cfc1]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-6aa4cfc1]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-5251f9c9]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-5251f9c9] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-5251f9c9] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-5251f9c9] .group:last-child{padding-bottom:0}.VPMenu[data-v-5251f9c9] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-5251f9c9] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-5251f9c9] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-5251f9c9] .action{padding-left:24px}.VPFlyout[data-v-0fe5f390]{position:relative}.VPFlyout[data-v-0fe5f390]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-0fe5f390]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-0fe5f390]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-0fe5f390]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-0fe5f390]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-0fe5f390],.button[aria-expanded=true]+.menu[data-v-0fe5f390]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-0fe5f390]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-0fe5f390]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-0fe5f390]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-0fe5f390]{margin-right:0;font-size:16px}.text-icon[data-v-0fe5f390]{margin-left:4px;font-size:14px}.icon[data-v-0fe5f390]{font-size:20px;transition:fill .25s}.menu[data-v-0fe5f390]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-9146a764]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-9146a764]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-9146a764]>svg,.VPSocialLink[data-v-9146a764]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-cb91b013]{display:flex;justify-content:center}.VPNavBarExtra[data-v-1cde8183]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-1cde8183]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-1cde8183]{display:none}}.trans-title[data-v-1cde8183]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-1cde8183],.item.social-links[data-v-1cde8183]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-1cde8183]{min-width:176px}.appearance-action[data-v-1cde8183]{margin-right:-2px}.social-links-list[data-v-1cde8183]{margin:-4px -8px}.VPNavBarHamburger[data-v-f393de22]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-f393de22]{display:none}}.container[data-v-f393de22]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-f393de22]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-f393de22]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-f393de22]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-f393de22]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-f393de22]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-f393de22]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-f393de22],.VPNavBarHamburger.active:hover .middle[data-v-f393de22],.VPNavBarHamburger.active:hover .bottom[data-v-f393de22]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-f393de22],.middle[data-v-f393de22],.bottom[data-v-f393de22]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-f393de22]{top:0;left:0;transform:translate(0)}.middle[data-v-f393de22]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-f393de22]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-4feaec24]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-4feaec24],.VPNavBarMenuLink[data-v-4feaec24]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-cc0a843c]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-cc0a843c]{display:flex}}/*! @docsearch/css 3.6.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.30196078431372547);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}.DocSearch-Button-Key--pressed{transform:translate3d(0,1px,0);box-shadow:var(--docsearch-key-pressed-shadow)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-723a27a4]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-723a27a4]{display:flex;align-items:center}}.title[data-v-663a90b9]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-663a90b9]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-663a90b9]{border-bottom-color:var(--vp-c-divider)}}[data-v-663a90b9] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-016258cd]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-016258cd]{display:flex;align-items:center}}.title[data-v-016258cd]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-743a22c8]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .5s}.VPNavBar[data-v-743a22c8]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-743a22c8]:not(.home){background-color:transparent}.VPNavBar[data-v-743a22c8]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-743a22c8]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-743a22c8]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-743a22c8]{padding:0}}.container[data-v-743a22c8]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-743a22c8],.container>.content[data-v-743a22c8]{pointer-events:none}.container[data-v-743a22c8] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-743a22c8]{max-width:100%}}.title[data-v-743a22c8]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-743a22c8]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-743a22c8]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-743a22c8]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-743a22c8]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-743a22c8]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-743a22c8]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-743a22c8]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-743a22c8]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-743a22c8]{column-gap:.5rem}}.menu+.translations[data-v-743a22c8]:before,.menu+.appearance[data-v-743a22c8]:before,.menu+.social-links[data-v-743a22c8]:before,.translations+.appearance[data-v-743a22c8]:before,.appearance+.social-links[data-v-743a22c8]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-743a22c8]:before,.translations+.appearance[data-v-743a22c8]:before{margin-right:16px}.appearance+.social-links[data-v-743a22c8]:before{margin-left:16px}.social-links[data-v-743a22c8]{margin-right:-8px}.divider[data-v-743a22c8]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-743a22c8]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-743a22c8]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-743a22c8]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-743a22c8]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-743a22c8]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-743a22c8]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-5995df10]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-5995df10]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-a2db3dc7]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-a2db3dc7]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-afa013c3]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-afa013c3]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-6eb8a2e5]{display:block}.title[data-v-6eb8a2e5]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-7853c142]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-7853c142]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-7853c142]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-7853c142]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-7853c142]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-7853c142]{transform:rotate(45deg)}.button[data-v-7853c142]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-7853c142]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-7853c142]{transition:transform .25s}.group[data-v-7853c142]:first-child{padding-top:0}.group+.group[data-v-7853c142],.group+.item[data-v-7853c142]{padding-top:4px}.VPNavScreenTranslations[data-v-0dc36c90]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-0dc36c90]{height:auto}.title[data-v-0dc36c90]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-0dc36c90]{font-size:16px}.icon.lang[data-v-0dc36c90]{margin-right:8px}.icon.chevron[data-v-0dc36c90]{margin-left:4px}.list[data-v-0dc36c90]{padding:4px 0 0 24px}.link[data-v-0dc36c90]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-391d6e9c]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 1px);right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .5s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-391d6e9c],.VPNavScreen.fade-leave-active[data-v-391d6e9c]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-391d6e9c],.VPNavScreen.fade-leave-active .container[data-v-391d6e9c]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-391d6e9c],.VPNavScreen.fade-leave-to[data-v-391d6e9c]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-391d6e9c],.VPNavScreen.fade-leave-to .container[data-v-391d6e9c]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-391d6e9c]{display:none}}.container[data-v-391d6e9c]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-391d6e9c],.menu+.appearance[data-v-391d6e9c],.translations+.appearance[data-v-391d6e9c]{margin-top:24px}.menu+.social-links[data-v-391d6e9c]{margin-top:16px}.appearance+.social-links[data-v-391d6e9c]{margin-top:16px}.VPNav[data-v-1186b740]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-1186b740]{position:fixed}}.VPSidebarItem.level-0[data-v-28370b85]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-28370b85]{padding-bottom:10px}.item[data-v-28370b85]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-28370b85]{cursor:pointer}.indicator[data-v-28370b85]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-28370b85],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-28370b85],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-28370b85],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-28370b85]{background-color:var(--vp-c-brand-1)}.link[data-v-28370b85]{display:flex;align-items:center;flex-grow:1}.text[data-v-28370b85]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-28370b85]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-28370b85],.VPSidebarItem.level-2 .text[data-v-28370b85],.VPSidebarItem.level-3 .text[data-v-28370b85],.VPSidebarItem.level-4 .text[data-v-28370b85],.VPSidebarItem.level-5 .text[data-v-28370b85]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-28370b85],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-28370b85],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-28370b85],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-28370b85],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-28370b85],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-28370b85]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-28370b85],.VPSidebarItem.level-1.has-active>.item>.text[data-v-28370b85],.VPSidebarItem.level-2.has-active>.item>.text[data-v-28370b85],.VPSidebarItem.level-3.has-active>.item>.text[data-v-28370b85],.VPSidebarItem.level-4.has-active>.item>.text[data-v-28370b85],.VPSidebarItem.level-5.has-active>.item>.text[data-v-28370b85],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-28370b85],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-28370b85],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-28370b85],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-28370b85],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-28370b85],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-28370b85]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-28370b85],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-28370b85],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-28370b85],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-28370b85],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-28370b85],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-28370b85]{color:var(--vp-c-brand-1)}.caret[data-v-28370b85]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-28370b85]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-28370b85]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-28370b85]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-28370b85]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-28370b85],.VPSidebarItem.level-2 .items[data-v-28370b85],.VPSidebarItem.level-3 .items[data-v-28370b85],.VPSidebarItem.level-4 .items[data-v-28370b85],.VPSidebarItem.level-5 .items[data-v-28370b85]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-28370b85]{display:none}.VPSidebar[data-v-dfb98cb2]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-dfb98cb2]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-dfb98cb2]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-dfb98cb2]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-dfb98cb2]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-dfb98cb2]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-dfb98cb2]{outline:0}.group+.group[data-v-dfb98cb2]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-dfb98cb2]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSkipLink[data-v-97ec2f41]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-97ec2f41]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-97ec2f41]{top:14px;left:16px}}.Layout[data-v-f34fde7e]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-75fc4f02]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-75fc4f02]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-75fc4f02]{margin:128px 0}}.VPHomeSponsors[data-v-75fc4f02]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-75fc4f02]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-75fc4f02]{padding:0 64px}}.container[data-v-75fc4f02]{margin:0 auto;max-width:1152px}.love[data-v-75fc4f02]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-75fc4f02]{display:inline-block}.message[data-v-75fc4f02]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-75fc4f02]{padding-top:32px}.action[data-v-75fc4f02]{padding-top:40px;text-align:center}.VPTeamPage[data-v-0f719592]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-0f719592]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-0f719592-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-0f719592-s],.VPTeamMembers+.VPTeamPageSection[data-v-0f719592-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-0f719592-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-0f719592-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-0f719592-s],.VPTeamMembers+.VPTeamPageSection[data-v-0f719592-s]{margin-top:96px}}.VPTeamMembers[data-v-0f719592-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-0f719592-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-0f719592-s]{padding:0 64px}}.VPTeamPageTitle[data-v-e10ac9eb]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-e10ac9eb]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-e10ac9eb]{padding:80px 64px 48px}}.title[data-v-e10ac9eb]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-e10ac9eb]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-e10ac9eb]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-e10ac9eb]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-8901d4ae]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-8901d4ae]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-8901d4ae]{padding:0 64px}}.title[data-v-8901d4ae]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-8901d4ae]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-8901d4ae]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-8901d4ae]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-8901d4ae]{padding-top:40px}.VPTeamMembersItem[data-v-caefe9fe]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-caefe9fe]{padding:32px}.VPTeamMembersItem.small .data[data-v-caefe9fe]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-caefe9fe]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-caefe9fe]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-caefe9fe]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-caefe9fe]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-caefe9fe]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-caefe9fe]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-caefe9fe]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-caefe9fe]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-caefe9fe]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-caefe9fe]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-caefe9fe]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-caefe9fe]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-caefe9fe]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-caefe9fe]{text-align:center}.avatar[data-v-caefe9fe]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-caefe9fe]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-caefe9fe]{margin:0;font-weight:600}.affiliation[data-v-caefe9fe]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-caefe9fe]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-caefe9fe]:hover{color:var(--vp-c-brand-1)}.desc[data-v-caefe9fe]{margin:0 auto}.desc[data-v-caefe9fe] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-caefe9fe]{display:flex;justify-content:center;height:56px}.sp-link[data-v-caefe9fe]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-caefe9fe]:hover,.sp .sp-link.link[data-v-caefe9fe]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-caefe9fe]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-c6371da1]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-c6371da1]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-c6371da1]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-c6371da1]{max-width:876px}.VPTeamMembers.medium .container[data-v-c6371da1]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-c6371da1]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-c6371da1]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-c6371da1]{max-width:760px}.container[data-v-c6371da1]{display:grid;gap:24px;margin:0 auto;max-width:1152px}.custom-block.details{margin:2em 0}.custom-block.details summary{font-size:1.3em;padding-right:24px;width:100%;position:relative;cursor:pointer;list-style:none;outline:0;margin-right:1em}.custom-block.details summary::-webkit-details-marker{display:none}.custom-block.details summary:after{content:"+";color:var(--vp-custom-block-details-text);position:absolute;font-size:2rem;line-height:0;top:50%;right:0;font-weight:200;transform-origin:center;transition:.3s linear}.custom-block.details[open] p{font-size:1.2em;line-height:1.6em;margin:1.2em 0}.custom-block.details[open] summary{margin-bottom:1.3em}.custom-block.details[open] summary:after{transform:rotate(45deg);right:-2px;top:calc(50% + 1px)}.custom-block.details[open] summary~*{opacity:1;animation:open .3s ease-in-out}.custom-block.details[open] ul,.custom-block.details[open] ol,.custom-block.details[open] blockquote p,.custom-block.details[open] pre code{font-size:1.1em}@media (max-width: 768px){.custom-block.details[open] p{font-size:1.1em}}@keyframes open{0%{opacity:0}to{opacity:1}}body{overflow-y:scroll;--vp-custom-block-code-font-size: 14px}:not(.dark) body{--vp-custom-block-details-text: #54545c}body .vp-doc h1{margin-bottom:1em}body .vp-doc p img{margin:auto}body .is-home .main .text{line-height:44px;font-size:38px}body .is-home .has-image .main .name{font-size:68px;margin-bottom:30px}body .social-links a:last-child{width:unset}body .social-links a:last-child svg{width:80px!important}.arty-crafty .VPNavBarTranslations,.arty-crafty .VPMenu .group.translations,.textbook .VPNavBarTranslations,.textbook .VPMenu .group.translations,.articles .VPNavBarTranslations,.articles .VPMenu .group.translations{display:none}.arty-crafty img:not(.logo){border:1px solid #ddd}.VPSidebarItem.level-0 h2.text{font-family:Office Code Pro,Source Code Pro,Menlo,monospace;text-transform:uppercase;letter-spacing:.07em}:root{--toastify-color-light:#fff;--toastify-color-dark:#121212;--toastify-color-info:#3498db;--toastify-color-success:#07bc0c;--toastify-color-warning:#f1c40f;--toastify-color-error:#e74c3c;--toastify-color-transparent:hsla(0,0%,100%,.7);--toastify-icon-color-info:var(--toastify-color-info);--toastify-icon-color-success:var(--toastify-color-success);--toastify-icon-color-warning:var(--toastify-color-warning);--toastify-icon-color-error:var(--toastify-color-error);--toastify-toast-width:320px;--toastify-toast-background:#fff;--toastify-toast-min-height:64px;--toastify-toast-max-height:800px;--toastify-font-family:sans-serif;--toastify-z-index:9999;--toastify-text-color-light:#757575;--toastify-text-color-dark:#fff;--toastify-text-color-info:#fff;--toastify-text-color-success:#fff;--toastify-text-color-warning:#fff;--toastify-text-color-error:#fff;--toastify-spinner-color:#616161;--toastify-spinner-color-empty-area:#e0e0e0;--toastify-color-progress-light:linear-gradient(90deg,#4cd964,#5ac8fa,#007aff,#34aadc,#5856d6,#ff2d55);--toastify-color-progress-dark:#bb86fc;--toastify-color-progress-info:var(--toastify-color-info);--toastify-color-progress-success:var(--toastify-color-success);--toastify-color-progress-warning:var(--toastify-color-warning);--toastify-color-progress-error:var(--toastify-color-error);--toastify-color-progress-colored:#ddd}.Toastify__toast-container{box-sizing:border-box;color:#fff;padding:4px;position:fixed;-webkit-transform:translate3d(0,0,var(--toastify-z-index) px);transform:translate3d(0,0,var(--toastify-z-index) px);width:var(--toastify-toast-width);z-index:var(--toastify-z-index)}.Toastify__toast-container--top-left{left:1em;top:1em}.Toastify__toast-container--top-center{left:50%;top:1em;-webkit-transform:translateX(-50%);transform:translate(-50%)}.Toastify__toast-container--top-right{right:1em;top:1em}.Toastify__toast-container--bottom-left{bottom:1em;left:1em}.Toastify__toast-container--bottom-center{bottom:1em;left:50%;-webkit-transform:translateX(-50%);transform:translate(-50%)}.Toastify__toast-container--bottom-right{bottom:1em;right:1em}@media only screen and (max-width:480px){.Toastify__toast-container{left:0;margin:0;padding:0;width:100vw}.Toastify__toast-container--top-center,.Toastify__toast-container--top-left,.Toastify__toast-container--top-right{top:0;-webkit-transform:translateX(0);transform:translate(0)}.Toastify__toast-container--bottom-center,.Toastify__toast-container--bottom-left,.Toastify__toast-container--bottom-right{bottom:0;-webkit-transform:translateX(0);transform:translate(0)}.Toastify__toast-container--rtl{left:auto;right:0}}.Toastify__toast{border-radius:4px;box-shadow:0 1px 10px #0000001a,0 2px 15px #0000000d;box-sizing:border-box;cursor:pointer;direction:ltr;display:flex;font-family:var(--toastify-font-family);justify-content:space-between;margin-bottom:1rem;max-height:var(--toastify-toast-max-height);min-height:var(--toastify-toast-min-height);overflow:hidden;padding:8px;position:relative;z-index:0}.Toastify__toast--rtl{direction:rtl}.Toastify__toast-body{align-items:center;display:flex;flex:1 1 auto;margin:auto 0;padding:6px;white-space:pre-wrap}.Toastify__toast-body>div:last-child{flex:1}.Toastify__toast-icon{display:flex;flex-shrink:0;-webkit-margin-end:10px;margin-inline-end:10px;width:20px}.Toastify--animate{-webkit-animation-duration:.7s;animation-duration:.7s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.Toastify--animate-icon{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both}@media only screen and (max-width:480px){.Toastify__toast{border-radius:0;margin-bottom:0}}.Toastify__toast-theme--dark{background:var(--toastify-color-dark);color:var(--toastify-text-color-dark)}.Toastify__toast-theme--colored.Toastify__toast--default,.Toastify__toast-theme--light{background:var(--toastify-color-light);color:var(--toastify-text-color-light)}.Toastify__toast-theme--colored.Toastify__toast--info{background:var(--toastify-color-info);color:var(--toastify-text-color-info)}.Toastify__toast-theme--colored.Toastify__toast--success{background:var(--toastify-color-success);color:var(--toastify-text-color-success)}.Toastify__toast-theme--colored.Toastify__toast--warning{background:var(--toastify-color-warning);color:var(--toastify-text-color-warning)}.Toastify__toast-theme--colored.Toastify__toast--error{background:var(--toastify-color-error);color:var(--toastify-text-color-error)}.Toastify__progress-bar-theme--light{background:var(--toastify-color-progress-light)}.Toastify__progress-bar-theme--dark{background:var(--toastify-color-progress-dark)}.Toastify__progress-bar--info{background:var(--toastify-color-progress-info)}.Toastify__progress-bar--success{background:var(--toastify-color-progress-success)}.Toastify__progress-bar--warning{background:var(--toastify-color-progress-warning)}.Toastify__progress-bar--error{background:var(--toastify-color-progress-error)}.Toastify__progress-bar-theme--colored.Toastify__progress-bar--default{background:var(--toastify-color-progress-colored)}.Toastify__progress-bar-theme--colored.Toastify__progress-bar--error,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--info,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--success,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--warning{background:var(--toastify-color-transparent)}.Toastify__close-button{align-self:flex-start;background:transparent;border:none;color:#fff;cursor:pointer;opacity:.7;outline:none;padding:0;transition:.3s ease}.Toastify__close-button--light{color:#000;opacity:.3}.Toastify__close-button>svg{fill:currentcolor;height:16px;width:14px}.Toastify__close-button:focus,.Toastify__close-button:hover{opacity:1}@-webkit-keyframes Toastify__trackProgress{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}to{-webkit-transform:scaleX(0);transform:scaleX(0)}}@keyframes Toastify__trackProgress{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}to{-webkit-transform:scaleX(0);transform:scaleX(0)}}.Toastify__progress-bar{bottom:0;height:5px;left:0;opacity:.7;position:absolute;-webkit-transform-origin:left;transform-origin:left;width:100%;z-index:var(--toastify-z-index)}.Toastify__progress-bar--animated{-webkit-animation:Toastify__trackProgress linear 1 forwards;animation:Toastify__trackProgress linear 1 forwards}.Toastify__progress-bar--controlled{transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.Toastify__progress-bar--rtl{left:auto;right:0;-webkit-transform-origin:right;transform-origin:right}.Toastify__spinner{-webkit-animation:Toastify__spin .65s linear infinite;animation:Toastify__spin .65s linear infinite;border:2px solid;border-color:var(--toastify-spinner-color-empty-area);border-radius:100%;border-right-color:var(--toastify-spinner-color);box-sizing:border-box;height:20px;width:20px}@-webkit-keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes Toastify__bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@-webkit-keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes Toastify__bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@-webkit-keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes Toastify__bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@-webkit-keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes Toastify__bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.Toastify__bounce-enter--bottom-left,.Toastify__bounce-enter--top-left{-webkit-animation-name:Toastify__bounceInLeft;animation-name:Toastify__bounceInLeft}.Toastify__bounce-enter--bottom-right,.Toastify__bounce-enter--top-right{-webkit-animation-name:Toastify__bounceInRight;animation-name:Toastify__bounceInRight}.Toastify__bounce-enter--top-center{-webkit-animation-name:Toastify__bounceInDown;animation-name:Toastify__bounceInDown}.Toastify__bounce-enter--bottom-center{-webkit-animation-name:Toastify__bounceInUp;animation-name:Toastify__bounceInUp}.Toastify__bounce-exit--bottom-left,.Toastify__bounce-exit--top-left{-webkit-animation-name:Toastify__bounceOutLeft;animation-name:Toastify__bounceOutLeft}.Toastify__bounce-exit--bottom-right,.Toastify__bounce-exit--top-right{-webkit-animation-name:Toastify__bounceOutRight;animation-name:Toastify__bounceOutRight}.Toastify__bounce-exit--top-center{-webkit-animation-name:Toastify__bounceOutUp;animation-name:Toastify__bounceOutUp}.Toastify__bounce-exit--bottom-center{-webkit-animation-name:Toastify__bounceOutDown;animation-name:Toastify__bounceOutDown}@-webkit-keyframes Toastify__zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes Toastify__zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@-webkit-keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.Toastify__zoom-enter{-webkit-animation-name:Toastify__zoomIn;animation-name:Toastify__zoomIn}.Toastify__zoom-exit{-webkit-animation-name:Toastify__zoomOut;animation-name:Toastify__zoomOut}@-webkit-keyframes Toastify__flipIn{0%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}40%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}60%{opacity:1;-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes Toastify__flipIn{0%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}40%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}60%{opacity:1;-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@-webkit-keyframes Toastify__flipOut{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{opacity:1;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}to{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}}@keyframes Toastify__flipOut{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{opacity:1;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}to{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}}.Toastify__flip-enter{-webkit-animation-name:Toastify__flipIn;animation-name:Toastify__flipIn}.Toastify__flip-exit{-webkit-animation-name:Toastify__flipOut;animation-name:Toastify__flipOut}@-webkit-keyframes Toastify__slideInRight{0%{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInRight{0%{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInLeft{0%{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInLeft{0%{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInUp{0%{-webkit-transform:translate3d(0,110%,0);transform:translate3d(0,110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInUp{0%{-webkit-transform:translate3d(0,110%,0);transform:translate3d(0,110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInDown{0%{-webkit-transform:translate3d(0,-110%,0);transform:translate3d(0,-110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInDown{0%{-webkit-transform:translate3d(0,-110%,0);transform:translate3d(0,-110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:hidden}}@keyframes Toastify__slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:hidden}}@-webkit-keyframes Toastify__slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:hidden}}@keyframes Toastify__slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:hidden}}@-webkit-keyframes Toastify__slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,500px,0);transform:translate3d(0,500px,0);visibility:hidden}}@keyframes Toastify__slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,500px,0);transform:translate3d(0,500px,0);visibility:hidden}}@-webkit-keyframes Toastify__slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,-500px,0);transform:translate3d(0,-500px,0);visibility:hidden}}@keyframes Toastify__slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,-500px,0);transform:translate3d(0,-500px,0);visibility:hidden}}.Toastify__slide-enter--bottom-left,.Toastify__slide-enter--top-left{-webkit-animation-name:Toastify__slideInLeft;animation-name:Toastify__slideInLeft}.Toastify__slide-enter--bottom-right,.Toastify__slide-enter--top-right{-webkit-animation-name:Toastify__slideInRight;animation-name:Toastify__slideInRight}.Toastify__slide-enter--top-center{-webkit-animation-name:Toastify__slideInDown;animation-name:Toastify__slideInDown}.Toastify__slide-enter--bottom-center{-webkit-animation-name:Toastify__slideInUp;animation-name:Toastify__slideInUp}.Toastify__slide-exit--bottom-left,.Toastify__slide-exit--top-left{-webkit-animation-name:Toastify__slideOutLeft;animation-name:Toastify__slideOutLeft}.Toastify__slide-exit--bottom-right,.Toastify__slide-exit--top-right{-webkit-animation-name:Toastify__slideOutRight;animation-name:Toastify__slideOutRight}.Toastify__slide-exit--top-center{-webkit-animation-name:Toastify__slideOutUp;animation-name:Toastify__slideOutUp}.Toastify__slide-exit--bottom-center{-webkit-animation-name:Toastify__slideOutDown;animation-name:Toastify__slideOutDown}@-webkit-keyframes Toastify__spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes Toastify__spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}:root{--toastify-toast-width: 420px}h3{font-weight:600;font-size:larger}.release-timeline .user{display:inline-flex;align-items:center;width:fit-content;padding:2px 4px 2px 0;font-weight:500;font-size:.75rem;line-height:1rem}.release-timeline .user .avatar{border-radius:9999px;width:1rem;height:1rem;border:1px solid var(--rt-c-border)}.release-timeline .user .avatar img{border-radius:9999px;width:1rem}.release-timeline .user .username{padding:0 0 2px 6px}.release-timeline a{text-decoration:none;color:var(--rt-c-brand-1)}.release-timeline .issues h1,.release-timeline .issues h2,.release-timeline .issues h3,.release-timeline .issues h4,.release-timeline .issues h5,.release-timeline .issues h6{margin:7px 0 10px;border-top:none;padding:0}.release-timeline .issue p{margin:5px 0 3px;line-height:.9rem}.release-timeline .commits .issue p,.release-timeline .pulls .issue p{margin:1px 0 0}.release-timeline .tab{text-wrap:nowrap;background-color:inherit;color:var(--rt-c-text-3);cursor:pointer;padding:2px 5px;text-align:left;border:solid 1px var(--rt-c-border);border-radius:3px;transition:.4s;margin:7px 7px 0 0;font-size:.7rem;text-transform:lowercase;letter-spacing:.3px;font-weight:400;line-height:.8rem}.release-timeline .tab.active,.release-timeline .tab:hover{color:var(--rt-c-text-2);border-color:var(--rt-c-text-2);background-color:var(--rt-c-bg-alt)}.release-timeline .issues{padding-top:5px;background-color:var(--rt-c-bg-issues);overflow:hidden;max-height:0;transition:max-height .6s ease-in-out,opacity .4s ease-in-out}.release-timeline .issues section{opacity:0;display:none;transition:max-height .4s ease-in-out,opacity .4s ease-in-out}.release-timeline .issues section.open{opacity:1;display:block;transition:max-height .4s ease-in-out,opacity .4s ease-in-out}.release-timeline .issues .issue{font-size:.8rem;letter-spacing:-.3px;color:var(--rt-c-text-2);line-height:.8rem;display:block;border-style:dashed;border-width:1px;padding:3px 4px;border-color:var(--rt-c-border);margin-top:5px;font-weight:400}.release-timeline .issues .issue h1{font-size:1.2rem}.release-timeline .issues .issue h2{font-size:1.05rem}.release-timeline .issues .issue h3{font-size:1rem}.release-timeline .timeline-item{display:flex;gap:1.5rem;align-items:flex-start;margin-left:-9px;transform:translate(50%);width:50%;position:relative}.release-timeline .timeline-item.left{transform:translate(-50%);flex-direction:row-reverse;margin-left:9px}.release-timeline .timeline-item.left .content{align-items:flex-end}.release-timeline .timeline-item.left .release-name{text-align:end}.release-timeline .timeline-item .circle{border:1px solid var(--rt-c-border);border-radius:9999px;flex-shrink:0;width:8px;height:8px;margin-top:.5rem;box-shadow:var(--rt-c-text-2) 0 0 3px 1px;background-color:var(--rt-c-circle-bg)}.release-timeline .timeline-item .content{display:flex;flex-direction:column}.release-timeline .timeline-item .content time{font-weight:600;font-size:.8rem;line-height:1.5rem;color:var(--rt-c-text-3)}.release-timeline .timeline-item .content .tag-name{color:var(--rt-c-brand-1);width:fit-content;font-weight:700;font-size:1.4rem;line-height:2rem;margin-top:.5rem;transition:all .2s ease-in}.release-timeline .timeline-item .content .tag-name:hover{color:var(--rt-c-brand-2)}.release-timeline .timeline-item .content .release-name{margin:3px 0;padding-top:0;border-top:1px solid var(--rt-c-border);color:var(--rt-c-text-2);font-size:1.15rem;font-weight:600;letter-spacing:.03em;line-height:1.4rem}.release-timeline .timeline-item .content .issue-tabs{display:flex;gap:.6rem}.dark{background-color:var(--rt-c-bg-alt)}.release-timeline{position:relative;display:flex;flex-direction:column;justify-content:center;font-family:var(--rt-font-family-base);background-color:var(--rt-c-bg);min-height:100vh}.release-timeline .header{text-align:center;margin-bottom:1rem}.release-timeline .header h1{color:var(--rt-c-text-2);margin-bottom:.9rem}.release-timeline .header a{width:fit-content;display:block;margin:auto;text-decoration:none}.release-timeline .header a .github-link{display:flex;border:1px solid var(--rt-c-border);border-radius:.3rem;padding:8px;width:fit-content;color:var(--rt-c-text-2);font-size:.9rem;font-weight:600;transition:color .3s ease-in-out}.release-timeline .header a .github-link .github-icon{margin-right:.6em;display:flex}.release-timeline .header a .github-link:hover{color:var(--rt-c-text-1)}.release-timeline .timeline .timeline-record{padding-bottom:.75rem;padding-top:.75rem;justify-content:center;align-items:center;min-height:24px;display:flex;position:relative;opacity:.2;transition:opacity 1.2s ease}.release-timeline .timeline .timeline-record .line{background-color:var(--rt-c-text-3);flex-shrink:0;width:.125rem;height:100%;margin-left:-1px;top:0;left:50%;right:50%;position:absolute}.release-timeline .mobile-only{display:none}@media screen and (max-width: 440px){.release-timeline .mobile-only{display:initial}.release-timeline .not-mobile-only{display:none}.issues{margin-left:-20px}.left .issues{margin-right:-20px;text-align:right}}html{overflow-x:hidden;margin-right:calc(-1*(100vw - 100%))}body{margin:0}.change-repo{position:fixed;color:var(--rt-c-text-2);top:20px;left:20px;z-index:2;cursor:pointer}:root{--rt-c-text-1: #3c3c43;--rt-c-text-2: #3c3c43c7;--rt-c-text-3: #3c3c438f;--rt-c-border: #e2e2e3;--rt-c-bg: #ffffff;--rt-c-issues: #ffffff;--rt-c-bg-alt: #f6f6f7;--rt-c-brand-1: #3451b2;--rt-c-brand-2: #3a5ccc;--rt-c-circle-bg: #888;--rt-font-family-base: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif}.dark{--rt-c-text-1: rgba(255, 255, 245, .86);--rt-c-text-2: rgba(235, 235, 245, .6);--rt-c-text-3: rgba(235, 235, 245, .38);--rt-c-border: #2e2e32;--rt-c-bg: #1b1b1f;--rt-c-bg-issues: #1b1b1f;--rt-c-bg-alt: #161618;--rt-c-brand-1: #5c73e7;--rt-c-brand-2: #a8b1ff;--rt-c-circle-bg: #888;--rt-font-family-base: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif}:root{--rt-c-text-1: var(--vp-c-text-1);--rt-c-text-2: var(--vp-c-text-2);--rt-c-text-3: var(--vp-c-text-3);--rt-c-border: var(--vp-c-border);--rt-c-bg: var(--vp-c-bg);--rt-c-bg-alt: var(--vp-c-bg-alt);--rt-c-brand-1: var(--vp-c-brand-1);--rt-c-brand-2: var(--vp-c-brand-2);--rt-c-circle-bg: #888;--rt-font-family-base: var(--vp-font-family-base)}.vp-doc .release-timeline{min-height:unset!important}.vp-doc .release-timeline a{text-decoration:none}.vp-doc .release-timeline .issues h1,.vp-doc .release-timeline .issues h2,.vp-doc .release-timeline .issues h3,.vp-doc .release-timeline .issues h4,.vp-doc .release-timeline .issues h5,.vp-doc .release-timeline .issues h6{margin:3px 0 0;border-top:none;padding:0}.vp-doc .release-timeline .issue p{margin:1px 0 0}.vp-doc .release-timeline .issues h1{font-size:1.2rem}.vp-doc .release-timeline .issues h2{font-size:1.05rem}.vp-doc .release-timeline .issues h3{font-size:1rem}.bg-stars{overflow:hidden}#stars{width:1px;height:1px;background:transparent;box-shadow:1606px 314px var(--rt-c-text-2),1356px 207px var(--rt-c-text-2),1331px 1251px var(--rt-c-text-2),1186px 1755px var(--rt-c-text-2),1724px 127px var(--rt-c-text-2),608px 470px var(--rt-c-text-2),1315px 1667px var(--rt-c-text-2),960px 1310px var(--rt-c-text-2),889px 1409px var(--rt-c-text-2),540px 1191px var(--rt-c-text-2),1417px 79px var(--rt-c-text-2),1296px 1992px var(--rt-c-text-2),1149px 1157px var(--rt-c-text-2),684px 1064px var(--rt-c-text-2),46px 166px var(--rt-c-text-2),798px 1828px var(--rt-c-text-2),886px 1141px var(--rt-c-text-2),1292px 1894px var(--rt-c-text-2),443px 1835px var(--rt-c-text-2),367px 1620px var(--rt-c-text-2),1683px 930px var(--rt-c-text-2),427px 1774px var(--rt-c-text-2),1246px 933px var(--rt-c-text-2),37px 288px var(--rt-c-text-2),788px 1092px var(--rt-c-text-2),415px 1240px var(--rt-c-text-2),448px 1465px var(--rt-c-text-2),1537px 944px var(--rt-c-text-2),1788px 364px var(--rt-c-text-2),877px 1917px var(--rt-c-text-2),41px 1698px var(--rt-c-text-2),1910px 1186px var(--rt-c-text-2),94px 1599px var(--rt-c-text-2),1087px 106px var(--rt-c-text-2),1557px 1034px var(--rt-c-text-2),366px 673px var(--rt-c-text-2),853px 1413px var(--rt-c-text-2),109px 1007px var(--rt-c-text-2),887px 1770px var(--rt-c-text-2),98px 411px var(--rt-c-text-2),1700px 550px var(--rt-c-text-2),1935px 1224px var(--rt-c-text-2),1110px 780px var(--rt-c-text-2),1439px 850px var(--rt-c-text-2),471px 931px var(--rt-c-text-2),807px 1184px var(--rt-c-text-2),1126px 1122px var(--rt-c-text-2),1735px 1274px var(--rt-c-text-2),1348px 38px var(--rt-c-text-2),1545px 1150px var(--rt-c-text-2),948px 278px var(--rt-c-text-2),1013px 107px var(--rt-c-text-2),1012px 1720px var(--rt-c-text-2),756px 1303px var(--rt-c-text-2),311px 1933px var(--rt-c-text-2),825px 341px var(--rt-c-text-2),402px 1892px var(--rt-c-text-2),846px 1802px var(--rt-c-text-2),1646px 1819px var(--rt-c-text-2),592px 710px var(--rt-c-text-2),1779px 736px var(--rt-c-text-2),111px 888px var(--rt-c-text-2),373px 1540px var(--rt-c-text-2),1975px 1995px var(--rt-c-text-2),1646px 1122px var(--rt-c-text-2),899px 8px var(--rt-c-text-2),1360px 1575px var(--rt-c-text-2),1007px 353px var(--rt-c-text-2),987px 1595px var(--rt-c-text-2),189px 967px var(--rt-c-text-2),1442px 502px var(--rt-c-text-2),18px 1896px var(--rt-c-text-2),1718px 1927px var(--rt-c-text-2),1443px 1538px var(--rt-c-text-2),192px 1222px var(--rt-c-text-2),54px 909px var(--rt-c-text-2),65px 780px var(--rt-c-text-2),1320px 1327px var(--rt-c-text-2),1111px 1138px var(--rt-c-text-2),993px 857px var(--rt-c-text-2),1318px 79px var(--rt-c-text-2),1732px 1919px var(--rt-c-text-2),824px 811px var(--rt-c-text-2),1211px 550px var(--rt-c-text-2),1323px 1323px var(--rt-c-text-2),290px 1438px var(--rt-c-text-2),1576px 773px var(--rt-c-text-2),1013px 1217px var(--rt-c-text-2),881px 703px var(--rt-c-text-2),732px 963px var(--rt-c-text-2),930px 1914px var(--rt-c-text-2),108px 292px var(--rt-c-text-2),1924px 433px var(--rt-c-text-2),227px 856px var(--rt-c-text-2),458px 1735px var(--rt-c-text-2),1031px 1773px var(--rt-c-text-2),1275px 1389px var(--rt-c-text-2),1302px 165px var(--rt-c-text-2),688px 1439px var(--rt-c-text-2),428px 375px var(--rt-c-text-2),791px 1179px var(--rt-c-text-2),1431px 1220px var(--rt-c-text-2),602px 318px var(--rt-c-text-2),565px 591px var(--rt-c-text-2),1512px 262px var(--rt-c-text-2),774px 1615px var(--rt-c-text-2),889px 224px var(--rt-c-text-2),1599px 526px var(--rt-c-text-2),1259px 219px var(--rt-c-text-2),689px 1002px var(--rt-c-text-2),1909px 420px var(--rt-c-text-2),1163px 1941px var(--rt-c-text-2),48px 1399px var(--rt-c-text-2),1676px 401px var(--rt-c-text-2),343px 542px var(--rt-c-text-2),1640px 689px var(--rt-c-text-2),1778px 1849px var(--rt-c-text-2),1706px 1346px var(--rt-c-text-2),1721px 1610px var(--rt-c-text-2),637px 1233px var(--rt-c-text-2),630px 1228px var(--rt-c-text-2),1536px 1999px var(--rt-c-text-2),480px 756px var(--rt-c-text-2),1888px 1869px var(--rt-c-text-2),967px 506px var(--rt-c-text-2),1413px 1778px var(--rt-c-text-2),1684px 737px var(--rt-c-text-2),1574px 1685px var(--rt-c-text-2),1615px 957px var(--rt-c-text-2),1000px 1304px var(--rt-c-text-2),1215px 506px var(--rt-c-text-2),459px 735px var(--rt-c-text-2),1948px 926px var(--rt-c-text-2),1899px 700px var(--rt-c-text-2),963px 417px var(--rt-c-text-2),1637px 1097px var(--rt-c-text-2),792px 221px var(--rt-c-text-2),598px 21px var(--rt-c-text-2),397px 205px var(--rt-c-text-2),1708px 938px var(--rt-c-text-2),419px 1769px var(--rt-c-text-2),488px 482px var(--rt-c-text-2),575px 333px var(--rt-c-text-2),1293px 1688px var(--rt-c-text-2),1386px 239px var(--rt-c-text-2),320px 498px var(--rt-c-text-2),769px 1512px var(--rt-c-text-2),1763px 1532px var(--rt-c-text-2),703px 424px var(--rt-c-text-2),1230px 1349px var(--rt-c-text-2),1855px 1258px var(--rt-c-text-2),1509px 708px var(--rt-c-text-2),1739px 659px var(--rt-c-text-2),134px 574px var(--rt-c-text-2),1589px 97px var(--rt-c-text-2),448px 982px var(--rt-c-text-2),1119px 1006px var(--rt-c-text-2),1089px 1303px var(--rt-c-text-2),16px 1272px var(--rt-c-text-2),167px 1696px var(--rt-c-text-2),1132px 1926px var(--rt-c-text-2),971px 1636px var(--rt-c-text-2),190px 194px var(--rt-c-text-2),1148px 939px var(--rt-c-text-2),1486px 1779px var(--rt-c-text-2),816px 1483px var(--rt-c-text-2),1769px 1099px var(--rt-c-text-2),123px 771px var(--rt-c-text-2),281px 605px var(--rt-c-text-2),836px 1704px var(--rt-c-text-2),209px 1167px var(--rt-c-text-2),1397px 237px var(--rt-c-text-2),1947px 487px var(--rt-c-text-2),161px 1314px var(--rt-c-text-2),17px 902px var(--rt-c-text-2),424px 914px var(--rt-c-text-2),1732px 1091px var(--rt-c-text-2),765px 252px var(--rt-c-text-2),309px 1592px var(--rt-c-text-2),1264px 913px var(--rt-c-text-2),1712px 1692px var(--rt-c-text-2),1659px 602px var(--rt-c-text-2),15px 323px var(--rt-c-text-2),626px 1857px var(--rt-c-text-2),323px 317px var(--rt-c-text-2),224px 1832px var(--rt-c-text-2),926px 1304px var(--rt-c-text-2),464px 1343px var(--rt-c-text-2),489px 542px var(--rt-c-text-2),1244px 769px var(--rt-c-text-2),686px 1173px var(--rt-c-text-2),1864px 1794px var(--rt-c-text-2),1424px 1003px var(--rt-c-text-2),546px 213px var(--rt-c-text-2),1465px 1856px var(--rt-c-text-2),437px 429px var(--rt-c-text-2),899px 774px var(--rt-c-text-2),1476px 1483px var(--rt-c-text-2),628px 519px var(--rt-c-text-2),1060px 584px var(--rt-c-text-2),1784px 1143px var(--rt-c-text-2),418px 676px var(--rt-c-text-2),1270px 1436px var(--rt-c-text-2),1682px 1858px var(--rt-c-text-2),834px 1921px var(--rt-c-text-2),957px 267px var(--rt-c-text-2),764px 659px var(--rt-c-text-2),952px 244px var(--rt-c-text-2),1260px 1997px var(--rt-c-text-2),1131px 22px var(--rt-c-text-2),566px 1141px var(--rt-c-text-2),617px 822px var(--rt-c-text-2),1910px 1512px var(--rt-c-text-2),269px 531px var(--rt-c-text-2),1044px 6px var(--rt-c-text-2),1841px 1120px var(--rt-c-text-2),1730px 514px var(--rt-c-text-2),1357px 368px var(--rt-c-text-2),633px 585px var(--rt-c-text-2),683px 158px var(--rt-c-text-2),63px 1183px var(--rt-c-text-2),205px 1453px var(--rt-c-text-2),1442px 1826px var(--rt-c-text-2),103px 1382px var(--rt-c-text-2),750px 1712px var(--rt-c-text-2),152px 585px var(--rt-c-text-2),1473px 186px var(--rt-c-text-2),991px 1406px var(--rt-c-text-2),1436px 1539px var(--rt-c-text-2),395px 1105px var(--rt-c-text-2),1813px 909px var(--rt-c-text-2),39px 1px var(--rt-c-text-2),572px 734px var(--rt-c-text-2),454px 1268px var(--rt-c-text-2),1128px 590px var(--rt-c-text-2),560px 437px var(--rt-c-text-2),697px 1135px var(--rt-c-text-2),1777px 1337px var(--rt-c-text-2),1943px 1597px var(--rt-c-text-2),675px 1326px var(--rt-c-text-2),1241px 661px var(--rt-c-text-2),1316px 1358px var(--rt-c-text-2),437px 1593px var(--rt-c-text-2),1807px 1841px var(--rt-c-text-2),1911px 1772px var(--rt-c-text-2),183px 516px var(--rt-c-text-2),141px 1494px var(--rt-c-text-2),907px 1023px var(--rt-c-text-2),236px 646px var(--rt-c-text-2),913px 221px var(--rt-c-text-2),1284px 703px var(--rt-c-text-2),1725px 1380px var(--rt-c-text-2),1606px 1749px var(--rt-c-text-2),103px 713px var(--rt-c-text-2),970px 679px var(--rt-c-text-2),1351px 1119px var(--rt-c-text-2),1151px 1187px var(--rt-c-text-2),276px 941px var(--rt-c-text-2),639px 1516px var(--rt-c-text-2),1223px 1383px var(--rt-c-text-2),1996px 1244px var(--rt-c-text-2),349px 1492px var(--rt-c-text-2),798px 1717px var(--rt-c-text-2),1599px 989px var(--rt-c-text-2),1327px 1248px var(--rt-c-text-2),393px 1164px var(--rt-c-text-2),115px 743px var(--rt-c-text-2),661px 436px var(--rt-c-text-2),1944px 1870px var(--rt-c-text-2),52px 949px var(--rt-c-text-2),1926px 1463px var(--rt-c-text-2),422px 1917px var(--rt-c-text-2),1888px 1098px var(--rt-c-text-2),860px 320px var(--rt-c-text-2),1330px 442px var(--rt-c-text-2),1007px 804px var(--rt-c-text-2),1812px 1658px var(--rt-c-text-2),295px 854px var(--rt-c-text-2),1395px 844px var(--rt-c-text-2),783px 679px var(--rt-c-text-2),1420px 247px var(--rt-c-text-2),52px 930px var(--rt-c-text-2),1193px 1947px var(--rt-c-text-2),895px 1889px var(--rt-c-text-2),677px 1755px var(--rt-c-text-2),1888px 1597px var(--rt-c-text-2),1510px 1015px var(--rt-c-text-2),1106px 132px var(--rt-c-text-2),966px 1348px var(--rt-c-text-2),885px 1970px var(--rt-c-text-2),899px 1976px var(--rt-c-text-2),1473px 1598px var(--rt-c-text-2),1462px 189px var(--rt-c-text-2),1253px 684px var(--rt-c-text-2),632px 309px var(--rt-c-text-2),624px 1594px var(--rt-c-text-2),447px 157px var(--rt-c-text-2),1645px 1800px var(--rt-c-text-2),1473px 1288px var(--rt-c-text-2),143px 126px var(--rt-c-text-2),1578px 488px var(--rt-c-text-2),927px 1227px var(--rt-c-text-2),61px 1936px var(--rt-c-text-2),1153px 1039px var(--rt-c-text-2),601px 328px var(--rt-c-text-2),757px 512px var(--rt-c-text-2),61px 1685px var(--rt-c-text-2),746px 291px var(--rt-c-text-2),1408px 1755px var(--rt-c-text-2),1659px 1965px var(--rt-c-text-2),1153px 1006px var(--rt-c-text-2),1441px 995px var(--rt-c-text-2),474px 1931px var(--rt-c-text-2),1947px 744px var(--rt-c-text-2),316px 603px var(--rt-c-text-2),1979px 144px var(--rt-c-text-2),776px 973px var(--rt-c-text-2),91px 1716px var(--rt-c-text-2),1563px 167px var(--rt-c-text-2),791px 1246px var(--rt-c-text-2),1814px 514px var(--rt-c-text-2),353px 1099px var(--rt-c-text-2),638px 474px var(--rt-c-text-2),892px 1096px var(--rt-c-text-2),686px 246px var(--rt-c-text-2),458px 430px var(--rt-c-text-2),1221px 1882px var(--rt-c-text-2),1130px 551px var(--rt-c-text-2),1485px 1554px var(--rt-c-text-2),1263px 1951px var(--rt-c-text-2),1743px 1803px var(--rt-c-text-2),398px 1815px var(--rt-c-text-2),1974px 702px var(--rt-c-text-2),934px 463px var(--rt-c-text-2),1805px 777px var(--rt-c-text-2),784px 381px var(--rt-c-text-2),372px 1118px var(--rt-c-text-2),933px 15px var(--rt-c-text-2),1862px 1859px var(--rt-c-text-2),405px 626px var(--rt-c-text-2),1948px 946px var(--rt-c-text-2),1869px 1889px var(--rt-c-text-2),158px 1324px var(--rt-c-text-2),1453px 1109px var(--rt-c-text-2),1890px 345px var(--rt-c-text-2),987px 981px var(--rt-c-text-2),1526px 1867px var(--rt-c-text-2),1506px 588px var(--rt-c-text-2),468px 208px var(--rt-c-text-2),146px 1950px var(--rt-c-text-2),1005px 758px var(--rt-c-text-2),1043px 1181px var(--rt-c-text-2),1724px 152px var(--rt-c-text-2),703px 1840px var(--rt-c-text-2),1330px 1972px var(--rt-c-text-2),1486px 1597px var(--rt-c-text-2),326px 1664px var(--rt-c-text-2),1614px 978px var(--rt-c-text-2),1489px 803px var(--rt-c-text-2),1230px 977px var(--rt-c-text-2),375px 1911px var(--rt-c-text-2),1104px 805px var(--rt-c-text-2),1292px 1381px var(--rt-c-text-2),1483px 1434px var(--rt-c-text-2),1331px 881px var(--rt-c-text-2),1464px 394px var(--rt-c-text-2),279px 1799px var(--rt-c-text-2),341px 1862px var(--rt-c-text-2),603px 781px var(--rt-c-text-2),1092px 1179px var(--rt-c-text-2),384px 538px var(--rt-c-text-2),1113px 1467px var(--rt-c-text-2),364px 1183px var(--rt-c-text-2),1817px 81px var(--rt-c-text-2),1431px 1082px var(--rt-c-text-2),1561px 1123px var(--rt-c-text-2),290px 1849px var(--rt-c-text-2),1649px 423px var(--rt-c-text-2),1665px 1088px var(--rt-c-text-2),1766px 1548px var(--rt-c-text-2),780px 1570px var(--rt-c-text-2),1299px 961px var(--rt-c-text-2),1659px 363px var(--rt-c-text-2),1382px 350px var(--rt-c-text-2),630px 620px var(--rt-c-text-2),373px 646px var(--rt-c-text-2),806px 807px var(--rt-c-text-2),1476px 1973px var(--rt-c-text-2),88px 1272px var(--rt-c-text-2),185px 936px var(--rt-c-text-2),1981px 1271px var(--rt-c-text-2),1021px 255px var(--rt-c-text-2),591px 1188px var(--rt-c-text-2),913px 1527px var(--rt-c-text-2),592px 723px var(--rt-c-text-2),698px 1366px var(--rt-c-text-2),861px 1541px var(--rt-c-text-2),1109px 1984px var(--rt-c-text-2),682px 1868px var(--rt-c-text-2),1915px 535px var(--rt-c-text-2),1357px 1171px var(--rt-c-text-2),1458px 1936px var(--rt-c-text-2),1471px 1177px var(--rt-c-text-2),1167px 1562px var(--rt-c-text-2),376px 280px var(--rt-c-text-2),889px 1485px var(--rt-c-text-2),1687px 490px var(--rt-c-text-2),895px 1484px var(--rt-c-text-2),542px 1020px var(--rt-c-text-2),598px 1589px var(--rt-c-text-2),1873px 873px var(--rt-c-text-2),885px 1923px var(--rt-c-text-2),752px 1393px var(--rt-c-text-2),1919px 143px var(--rt-c-text-2),1620px 1792px var(--rt-c-text-2),1194px 455px var(--rt-c-text-2),700px 1294px var(--rt-c-text-2),1989px 1046px var(--rt-c-text-2),1637px 1904px var(--rt-c-text-2),1491px 1481px var(--rt-c-text-2),1819px 741px var(--rt-c-text-2),1234px 1259px var(--rt-c-text-2),993px 832px var(--rt-c-text-2),404px 481px var(--rt-c-text-2),1074px 429px var(--rt-c-text-2),1389px 507px var(--rt-c-text-2),293px 400px var(--rt-c-text-2),449px 170px var(--rt-c-text-2),1330px 1971px var(--rt-c-text-2),1352px 962px var(--rt-c-text-2),955px 455px var(--rt-c-text-2),729px 439px var(--rt-c-text-2),1762px 666px var(--rt-c-text-2),119px 139px var(--rt-c-text-2),1369px 1284px var(--rt-c-text-2),1727px 228px var(--rt-c-text-2),128px 1014px var(--rt-c-text-2),1119px 1372px var(--rt-c-text-2),1104px 1290px var(--rt-c-text-2),664px 437px var(--rt-c-text-2),186px 665px var(--rt-c-text-2),1652px 1124px var(--rt-c-text-2),415px 782px var(--rt-c-text-2),1121px 147px var(--rt-c-text-2),923px 701px var(--rt-c-text-2),1210px 539px var(--rt-c-text-2),321px 1462px var(--rt-c-text-2),467px 586px var(--rt-c-text-2),1666px 972px var(--rt-c-text-2),1472px 1014px var(--rt-c-text-2),1937px 873px var(--rt-c-text-2),1659px 1512px var(--rt-c-text-2),976px 271px var(--rt-c-text-2),28px 443px var(--rt-c-text-2),604px 106px var(--rt-c-text-2),1344px 1866px var(--rt-c-text-2),1726px 29px var(--rt-c-text-2),1075px 449px var(--rt-c-text-2),385px 1709px var(--rt-c-text-2),591px 1532px var(--rt-c-text-2),355px 677px var(--rt-c-text-2),447px 54px var(--rt-c-text-2),691px 1227px var(--rt-c-text-2),1702px 108px var(--rt-c-text-2),353px 1699px var(--rt-c-text-2),207px 1805px var(--rt-c-text-2),1734px 240px var(--rt-c-text-2),587px 126px var(--rt-c-text-2),1304px 1140px var(--rt-c-text-2),1574px 1300px var(--rt-c-text-2),715px 489px var(--rt-c-text-2),573px 1155px var(--rt-c-text-2),1005px 121px var(--rt-c-text-2),230px 1606px var(--rt-c-text-2),297px 414px var(--rt-c-text-2),1471px 729px var(--rt-c-text-2),431px 1821px var(--rt-c-text-2),784px 79px var(--rt-c-text-2),1541px 1361px var(--rt-c-text-2),583px 1110px var(--rt-c-text-2),1822px 1802px var(--rt-c-text-2),1454px 1904px var(--rt-c-text-2),479px 271px var(--rt-c-text-2),143px 1165px var(--rt-c-text-2),1774px 1433px var(--rt-c-text-2),1107px 1503px var(--rt-c-text-2),1839px 1723px var(--rt-c-text-2),34px 1793px var(--rt-c-text-2),36px 1803px var(--rt-c-text-2),1275px 401px var(--rt-c-text-2),517px 1324px var(--rt-c-text-2),302px 296px var(--rt-c-text-2),1735px 1876px var(--rt-c-text-2),1643px 1937px var(--rt-c-text-2),625px 318px var(--rt-c-text-2),1868px 487px var(--rt-c-text-2),1510px 1413px var(--rt-c-text-2),615px 143px var(--rt-c-text-2),608px 48px var(--rt-c-text-2),199px 362px var(--rt-c-text-2),603px 232px var(--rt-c-text-2),1821px 1238px var(--rt-c-text-2),51px 690px var(--rt-c-text-2),1706px 402px var(--rt-c-text-2),416px 237px var(--rt-c-text-2),676px 1016px var(--rt-c-text-2),459px 196px var(--rt-c-text-2),191px 1649px var(--rt-c-text-2),412px 887px var(--rt-c-text-2),1088px 1040px var(--rt-c-text-2),212px 1837px var(--rt-c-text-2),206px 1254px var(--rt-c-text-2),230px 1380px var(--rt-c-text-2),1653px 593px var(--rt-c-text-2),1766px 801px var(--rt-c-text-2),187px 98px var(--rt-c-text-2),480px 1257px var(--rt-c-text-2),1753px 945px var(--rt-c-text-2),36px 1224px var(--rt-c-text-2),189px 114px var(--rt-c-text-2),95px 1415px var(--rt-c-text-2),508px 1638px var(--rt-c-text-2),1326px 925px var(--rt-c-text-2),1790px 1489px var(--rt-c-text-2),1958px 1126px var(--rt-c-text-2),818px 442px var(--rt-c-text-2),630px 1314px var(--rt-c-text-2),1793px 479px var(--rt-c-text-2),1274px 1243px var(--rt-c-text-2),1168px 832px var(--rt-c-text-2),402px 1620px var(--rt-c-text-2),1535px 1593px var(--rt-c-text-2),1690px 425px var(--rt-c-text-2),902px 1897px var(--rt-c-text-2),1793px 1439px var(--rt-c-text-2),1065px 1413px var(--rt-c-text-2),1353px 564px var(--rt-c-text-2),160px 320px var(--rt-c-text-2),113px 665px var(--rt-c-text-2),1310px 1355px var(--rt-c-text-2),970px 1171px var(--rt-c-text-2),1463px 110px var(--rt-c-text-2),863px 1565px var(--rt-c-text-2),1499px 556px var(--rt-c-text-2),1054px 1602px var(--rt-c-text-2),1089px 240px var(--rt-c-text-2),1325px 32px var(--rt-c-text-2),1021px 1008px var(--rt-c-text-2),1310px 764px var(--rt-c-text-2),92px 1237px var(--rt-c-text-2),811px 1892px var(--rt-c-text-2),809px 348px var(--rt-c-text-2),908px 1090px var(--rt-c-text-2),648px 1204px var(--rt-c-text-2),245px 268px var(--rt-c-text-2),809px 1278px var(--rt-c-text-2),1708px 1690px var(--rt-c-text-2),1944px 1682px var(--rt-c-text-2),1757px 1651px var(--rt-c-text-2),1884px 1995px var(--rt-c-text-2),1690px 1185px var(--rt-c-text-2),447px 100px var(--rt-c-text-2),1836px 1024px var(--rt-c-text-2),1020px 1805px var(--rt-c-text-2),1428px 808px var(--rt-c-text-2),1646px 696px var(--rt-c-text-2),1865px 1666px var(--rt-c-text-2),281px 524px var(--rt-c-text-2),1568px 395px var(--rt-c-text-2),36px 1705px var(--rt-c-text-2),1227px 1603px var(--rt-c-text-2),1311px 1542px var(--rt-c-text-2),1238px 1222px var(--rt-c-text-2),780px 1360px var(--rt-c-text-2),1711px 237px var(--rt-c-text-2),1857px 1494px var(--rt-c-text-2),850px 276px var(--rt-c-text-2),1381px 10px var(--rt-c-text-2),395px 29px var(--rt-c-text-2),1357px 1552px var(--rt-c-text-2),1586px 389px var(--rt-c-text-2),1668px 312px var(--rt-c-text-2),718px 571px var(--rt-c-text-2),1758px 729px var(--rt-c-text-2),713px 592px var(--rt-c-text-2),241px 1096px var(--rt-c-text-2),1059px 1468px var(--rt-c-text-2),1869px 940px var(--rt-c-text-2),1843px 842px var(--rt-c-text-2),766px 348px var(--rt-c-text-2),933px 1527px var(--rt-c-text-2),1279px 731px var(--rt-c-text-2),1379px 1224px var(--rt-c-text-2),1108px 1295px var(--rt-c-text-2),445px 119px var(--rt-c-text-2),1998px 1570px var(--rt-c-text-2),719px 1289px var(--rt-c-text-2),651px 1959px var(--rt-c-text-2),873px 1399px var(--rt-c-text-2),1207px 321px var(--rt-c-text-2),1044px 150px var(--rt-c-text-2),527px 649px var(--rt-c-text-2),1971px 1772px var(--rt-c-text-2),1906px 1522px var(--rt-c-text-2),1502px 1710px var(--rt-c-text-2),701px 1051px var(--rt-c-text-2),1859px 1242px var(--rt-c-text-2),1818px 1677px var(--rt-c-text-2),480px 87px var(--rt-c-text-2),663px 130px var(--rt-c-text-2),495px 578px var(--rt-c-text-2),1250px 325px var(--rt-c-text-2),983px 1934px var(--rt-c-text-2),1227px 972px var(--rt-c-text-2),482px 1799px var(--rt-c-text-2),1216px 453px var(--rt-c-text-2),67px 1811px var(--rt-c-text-2),148px 950px var(--rt-c-text-2),1600px 1018px var(--rt-c-text-2),1714px 1747px var(--rt-c-text-2),739px 1943px var(--rt-c-text-2),1200px 1137px var(--rt-c-text-2),1980px 95px var(--rt-c-text-2),418px 1780px var(--rt-c-text-2),834px 269px var(--rt-c-text-2),778px 1665px var(--rt-c-text-2),1334px 1016px var(--rt-c-text-2),1310px 356px var(--rt-c-text-2),450px 1663px var(--rt-c-text-2),1414px 800px var(--rt-c-text-2),19px 1765px var(--rt-c-text-2),1508px 1721px var(--rt-c-text-2),1332px 1794px var(--rt-c-text-2),724px 212px var(--rt-c-text-2),745px 459px var(--rt-c-text-2),1564px 1220px var(--rt-c-text-2),1712px 426px var(--rt-c-text-2),1024px 26px var(--rt-c-text-2),722px 1246px var(--rt-c-text-2),1758px 1968px var(--rt-c-text-2),23px 349px var(--rt-c-text-2),1982px 1368px var(--rt-c-text-2),1314px 1489px var(--rt-c-text-2),342px 1576px var(--rt-c-text-2),1308px 617px var(--rt-c-text-2),758px 1901px var(--rt-c-text-2),1554px 1345px var(--rt-c-text-2),676px 1202px var(--rt-c-text-2),1241px 245px var(--rt-c-text-2),230px 549px var(--rt-c-text-2),1218px 1179px var(--rt-c-text-2),123px 1887px var(--rt-c-text-2),910px 978px var(--rt-c-text-2),1745px 837px var(--rt-c-text-2),476px 1125px var(--rt-c-text-2),1386px 275px var(--rt-c-text-2),1324px 1230px var(--rt-c-text-2),1600px 1309px var(--rt-c-text-2),1537px 724px var(--rt-c-text-2),578px 1082px var(--rt-c-text-2),486px 1328px var(--rt-c-text-2),1263px 1260px var(--rt-c-text-2),88px 148px var(--rt-c-text-2),606px 1532px var(--rt-c-text-2),1968px 1104px var(--rt-c-text-2),1381px 697px var(--rt-c-text-2),1318px 780px var(--rt-c-text-2),1142px 1383px var(--rt-c-text-2),946px 1484px var(--rt-c-text-2),631px 1693px var(--rt-c-text-2),1992px 1510px var(--rt-c-text-2),366px 742px var(--rt-c-text-2),267px 288px var(--rt-c-text-2),1267px 350px var(--rt-c-text-2),387px 572px var(--rt-c-text-2),262px 1568px var(--rt-c-text-2),1341px 970px var(--rt-c-text-2),485px 1792px var(--rt-c-text-2),1711px 1257px var(--rt-c-text-2),1051px 1144px var(--rt-c-text-2),862px 1634px var(--rt-c-text-2),246px 904px var(--rt-c-text-2),60px 284px var(--rt-c-text-2),1938px 1927px var(--rt-c-text-2),1112px 246px var(--rt-c-text-2),289px 1054px var(--rt-c-text-2),118px 108px var(--rt-c-text-2),1278px 701px var(--rt-c-text-2),747px 1047px var(--rt-c-text-2),1591px 983px var(--rt-c-text-2),761px 790px var(--rt-c-text-2),116px 514px var(--rt-c-text-2),160px 552px var(--rt-c-text-2),1833px 1641px var(--rt-c-text-2),1315px 325px var(--rt-c-text-2),1006px 67px var(--rt-c-text-2),402px 337px var(--rt-c-text-2),1035px 447px var(--rt-c-text-2),1153px 382px var(--rt-c-text-2),1313px 1369px var(--rt-c-text-2);animation:animStar 50s linear infinite}#stars:after{content:" ";position:absolute;top:2000px;width:1px;height:1px;background:transparent;box-shadow:1606px 314px var(--rt-c-text-2),1356px 207px var(--rt-c-text-2),1331px 1251px var(--rt-c-text-2),1186px 1755px var(--rt-c-text-2),1724px 127px var(--rt-c-text-2),608px 470px var(--rt-c-text-2),1315px 1667px var(--rt-c-text-2),960px 1310px var(--rt-c-text-2),889px 1409px var(--rt-c-text-2),540px 1191px var(--rt-c-text-2),1417px 79px var(--rt-c-text-2),1296px 1992px var(--rt-c-text-2),1149px 1157px var(--rt-c-text-2),684px 1064px var(--rt-c-text-2),46px 166px var(--rt-c-text-2),798px 1828px var(--rt-c-text-2),886px 1141px var(--rt-c-text-2),1292px 1894px var(--rt-c-text-2),443px 1835px var(--rt-c-text-2),367px 1620px var(--rt-c-text-2),1683px 930px var(--rt-c-text-2),427px 1774px var(--rt-c-text-2),1246px 933px var(--rt-c-text-2),37px 288px var(--rt-c-text-2),788px 1092px var(--rt-c-text-2),415px 1240px var(--rt-c-text-2),448px 1465px var(--rt-c-text-2),1537px 944px var(--rt-c-text-2),1788px 364px var(--rt-c-text-2),877px 1917px var(--rt-c-text-2),41px 1698px var(--rt-c-text-2),1910px 1186px var(--rt-c-text-2),94px 1599px var(--rt-c-text-2),1087px 106px var(--rt-c-text-2),1557px 1034px var(--rt-c-text-2),366px 673px var(--rt-c-text-2),853px 1413px var(--rt-c-text-2),109px 1007px var(--rt-c-text-2),887px 1770px var(--rt-c-text-2),98px 411px var(--rt-c-text-2),1700px 550px var(--rt-c-text-2),1935px 1224px var(--rt-c-text-2),1110px 780px var(--rt-c-text-2),1439px 850px var(--rt-c-text-2),471px 931px var(--rt-c-text-2),807px 1184px var(--rt-c-text-2),1126px 1122px var(--rt-c-text-2),1735px 1274px var(--rt-c-text-2),1348px 38px var(--rt-c-text-2),1545px 1150px var(--rt-c-text-2),948px 278px var(--rt-c-text-2),1013px 107px var(--rt-c-text-2),1012px 1720px var(--rt-c-text-2),756px 1303px var(--rt-c-text-2),311px 1933px var(--rt-c-text-2),825px 341px var(--rt-c-text-2),402px 1892px var(--rt-c-text-2),846px 1802px var(--rt-c-text-2),1646px 1819px var(--rt-c-text-2),592px 710px var(--rt-c-text-2),1779px 736px var(--rt-c-text-2),111px 888px var(--rt-c-text-2),373px 1540px var(--rt-c-text-2),1975px 1995px var(--rt-c-text-2),1646px 1122px var(--rt-c-text-2),899px 8px var(--rt-c-text-2),1360px 1575px var(--rt-c-text-2),1007px 353px var(--rt-c-text-2),987px 1595px var(--rt-c-text-2),189px 967px var(--rt-c-text-2),1442px 502px var(--rt-c-text-2),18px 1896px var(--rt-c-text-2),1718px 1927px var(--rt-c-text-2),1443px 1538px var(--rt-c-text-2),192px 1222px var(--rt-c-text-2),54px 909px var(--rt-c-text-2),65px 780px var(--rt-c-text-2),1320px 1327px var(--rt-c-text-2),1111px 1138px var(--rt-c-text-2),993px 857px var(--rt-c-text-2),1318px 79px var(--rt-c-text-2),1732px 1919px var(--rt-c-text-2),824px 811px var(--rt-c-text-2),1211px 550px var(--rt-c-text-2),1323px 1323px var(--rt-c-text-2),290px 1438px var(--rt-c-text-2),1576px 773px var(--rt-c-text-2),1013px 1217px var(--rt-c-text-2),881px 703px var(--rt-c-text-2),732px 963px var(--rt-c-text-2),930px 1914px var(--rt-c-text-2),108px 292px var(--rt-c-text-2),1924px 433px var(--rt-c-text-2),227px 856px var(--rt-c-text-2),458px 1735px var(--rt-c-text-2),1031px 1773px var(--rt-c-text-2),1275px 1389px var(--rt-c-text-2),1302px 165px var(--rt-c-text-2),688px 1439px var(--rt-c-text-2),428px 375px var(--rt-c-text-2),791px 1179px var(--rt-c-text-2),1431px 1220px var(--rt-c-text-2),602px 318px var(--rt-c-text-2),565px 591px var(--rt-c-text-2),1512px 262px var(--rt-c-text-2),774px 1615px var(--rt-c-text-2),889px 224px var(--rt-c-text-2),1599px 526px var(--rt-c-text-2),1259px 219px var(--rt-c-text-2),689px 1002px var(--rt-c-text-2),1909px 420px var(--rt-c-text-2),1163px 1941px var(--rt-c-text-2),48px 1399px var(--rt-c-text-2),1676px 401px var(--rt-c-text-2),343px 542px var(--rt-c-text-2),1640px 689px var(--rt-c-text-2),1778px 1849px var(--rt-c-text-2),1706px 1346px var(--rt-c-text-2),1721px 1610px var(--rt-c-text-2),637px 1233px var(--rt-c-text-2),630px 1228px var(--rt-c-text-2),1536px 1999px var(--rt-c-text-2),480px 756px var(--rt-c-text-2),1888px 1869px var(--rt-c-text-2),967px 506px var(--rt-c-text-2),1413px 1778px var(--rt-c-text-2),1684px 737px var(--rt-c-text-2),1574px 1685px var(--rt-c-text-2),1615px 957px var(--rt-c-text-2),1000px 1304px var(--rt-c-text-2),1215px 506px var(--rt-c-text-2),459px 735px var(--rt-c-text-2),1948px 926px var(--rt-c-text-2),1899px 700px var(--rt-c-text-2),963px 417px var(--rt-c-text-2),1637px 1097px var(--rt-c-text-2),792px 221px var(--rt-c-text-2),598px 21px var(--rt-c-text-2),397px 205px var(--rt-c-text-2),1708px 938px var(--rt-c-text-2),419px 1769px var(--rt-c-text-2),488px 482px var(--rt-c-text-2),575px 333px var(--rt-c-text-2),1293px 1688px var(--rt-c-text-2),1386px 239px var(--rt-c-text-2),320px 498px var(--rt-c-text-2),769px 1512px var(--rt-c-text-2),1763px 1532px var(--rt-c-text-2),703px 424px var(--rt-c-text-2),1230px 1349px var(--rt-c-text-2),1855px 1258px var(--rt-c-text-2),1509px 708px var(--rt-c-text-2),1739px 659px var(--rt-c-text-2),134px 574px var(--rt-c-text-2),1589px 97px var(--rt-c-text-2),448px 982px var(--rt-c-text-2),1119px 1006px var(--rt-c-text-2),1089px 1303px var(--rt-c-text-2),16px 1272px var(--rt-c-text-2),167px 1696px var(--rt-c-text-2),1132px 1926px var(--rt-c-text-2),971px 1636px var(--rt-c-text-2),190px 194px var(--rt-c-text-2),1148px 939px var(--rt-c-text-2),1486px 1779px var(--rt-c-text-2),816px 1483px var(--rt-c-text-2),1769px 1099px var(--rt-c-text-2),123px 771px var(--rt-c-text-2),281px 605px var(--rt-c-text-2),836px 1704px var(--rt-c-text-2),209px 1167px var(--rt-c-text-2),1397px 237px var(--rt-c-text-2),1947px 487px var(--rt-c-text-2),161px 1314px var(--rt-c-text-2),17px 902px var(--rt-c-text-2),424px 914px var(--rt-c-text-2),1732px 1091px var(--rt-c-text-2),765px 252px var(--rt-c-text-2),309px 1592px var(--rt-c-text-2),1264px 913px var(--rt-c-text-2),1712px 1692px var(--rt-c-text-2),1659px 602px var(--rt-c-text-2),15px 323px var(--rt-c-text-2),626px 1857px var(--rt-c-text-2),323px 317px var(--rt-c-text-2),224px 1832px var(--rt-c-text-2),926px 1304px var(--rt-c-text-2),464px 1343px var(--rt-c-text-2),489px 542px var(--rt-c-text-2),1244px 769px var(--rt-c-text-2),686px 1173px var(--rt-c-text-2),1864px 1794px var(--rt-c-text-2),1424px 1003px var(--rt-c-text-2),546px 213px var(--rt-c-text-2),1465px 1856px var(--rt-c-text-2),437px 429px var(--rt-c-text-2),899px 774px var(--rt-c-text-2),1476px 1483px var(--rt-c-text-2),628px 519px var(--rt-c-text-2),1060px 584px var(--rt-c-text-2),1784px 1143px var(--rt-c-text-2),418px 676px var(--rt-c-text-2),1270px 1436px var(--rt-c-text-2),1682px 1858px var(--rt-c-text-2),834px 1921px var(--rt-c-text-2),957px 267px var(--rt-c-text-2),764px 659px var(--rt-c-text-2),952px 244px var(--rt-c-text-2),1260px 1997px var(--rt-c-text-2),1131px 22px var(--rt-c-text-2),566px 1141px var(--rt-c-text-2),617px 822px var(--rt-c-text-2),1910px 1512px var(--rt-c-text-2),269px 531px var(--rt-c-text-2),1044px 6px var(--rt-c-text-2),1841px 1120px var(--rt-c-text-2),1730px 514px var(--rt-c-text-2),1357px 368px var(--rt-c-text-2),633px 585px var(--rt-c-text-2),683px 158px var(--rt-c-text-2),63px 1183px var(--rt-c-text-2),205px 1453px var(--rt-c-text-2),1442px 1826px var(--rt-c-text-2),103px 1382px var(--rt-c-text-2),750px 1712px var(--rt-c-text-2),152px 585px var(--rt-c-text-2),1473px 186px var(--rt-c-text-2),991px 1406px var(--rt-c-text-2),1436px 1539px var(--rt-c-text-2),395px 1105px var(--rt-c-text-2),1813px 909px var(--rt-c-text-2),39px 1px var(--rt-c-text-2),572px 734px var(--rt-c-text-2),454px 1268px var(--rt-c-text-2),1128px 590px var(--rt-c-text-2),560px 437px var(--rt-c-text-2),697px 1135px var(--rt-c-text-2),1777px 1337px var(--rt-c-text-2),1943px 1597px var(--rt-c-text-2),675px 1326px var(--rt-c-text-2),1241px 661px var(--rt-c-text-2),1316px 1358px var(--rt-c-text-2),437px 1593px var(--rt-c-text-2),1807px 1841px var(--rt-c-text-2),1911px 1772px var(--rt-c-text-2),183px 516px var(--rt-c-text-2),141px 1494px var(--rt-c-text-2),907px 1023px var(--rt-c-text-2),236px 646px var(--rt-c-text-2),913px 221px var(--rt-c-text-2),1284px 703px var(--rt-c-text-2),1725px 1380px var(--rt-c-text-2),1606px 1749px var(--rt-c-text-2),103px 713px var(--rt-c-text-2),970px 679px var(--rt-c-text-2),1351px 1119px var(--rt-c-text-2),1151px 1187px var(--rt-c-text-2),276px 941px var(--rt-c-text-2),639px 1516px var(--rt-c-text-2),1223px 1383px var(--rt-c-text-2),1996px 1244px var(--rt-c-text-2),349px 1492px var(--rt-c-text-2),798px 1717px var(--rt-c-text-2),1599px 989px var(--rt-c-text-2),1327px 1248px var(--rt-c-text-2),393px 1164px var(--rt-c-text-2),115px 743px var(--rt-c-text-2),661px 436px var(--rt-c-text-2),1944px 1870px var(--rt-c-text-2),52px 949px var(--rt-c-text-2),1926px 1463px var(--rt-c-text-2),422px 1917px var(--rt-c-text-2),1888px 1098px var(--rt-c-text-2),860px 320px var(--rt-c-text-2),1330px 442px var(--rt-c-text-2),1007px 804px var(--rt-c-text-2),1812px 1658px var(--rt-c-text-2),295px 854px var(--rt-c-text-2),1395px 844px var(--rt-c-text-2),783px 679px var(--rt-c-text-2),1420px 247px var(--rt-c-text-2),52px 930px var(--rt-c-text-2),1193px 1947px var(--rt-c-text-2),895px 1889px var(--rt-c-text-2),677px 1755px var(--rt-c-text-2),1888px 1597px var(--rt-c-text-2),1510px 1015px var(--rt-c-text-2),1106px 132px var(--rt-c-text-2),966px 1348px var(--rt-c-text-2),885px 1970px var(--rt-c-text-2),899px 1976px var(--rt-c-text-2),1473px 1598px var(--rt-c-text-2),1462px 189px var(--rt-c-text-2),1253px 684px var(--rt-c-text-2),632px 309px var(--rt-c-text-2),624px 1594px var(--rt-c-text-2),447px 157px var(--rt-c-text-2),1645px 1800px var(--rt-c-text-2),1473px 1288px var(--rt-c-text-2),143px 126px var(--rt-c-text-2),1578px 488px var(--rt-c-text-2),927px 1227px var(--rt-c-text-2),61px 1936px var(--rt-c-text-2),1153px 1039px var(--rt-c-text-2),601px 328px var(--rt-c-text-2),757px 512px var(--rt-c-text-2),61px 1685px var(--rt-c-text-2),746px 291px var(--rt-c-text-2),1408px 1755px var(--rt-c-text-2),1659px 1965px var(--rt-c-text-2),1153px 1006px var(--rt-c-text-2),1441px 995px var(--rt-c-text-2),474px 1931px var(--rt-c-text-2),1947px 744px var(--rt-c-text-2),316px 603px var(--rt-c-text-2),1979px 144px var(--rt-c-text-2),776px 973px var(--rt-c-text-2),91px 1716px var(--rt-c-text-2),1563px 167px var(--rt-c-text-2),791px 1246px var(--rt-c-text-2),1814px 514px var(--rt-c-text-2),353px 1099px var(--rt-c-text-2),638px 474px var(--rt-c-text-2),892px 1096px var(--rt-c-text-2),686px 246px var(--rt-c-text-2),458px 430px var(--rt-c-text-2),1221px 1882px var(--rt-c-text-2),1130px 551px var(--rt-c-text-2),1485px 1554px var(--rt-c-text-2),1263px 1951px var(--rt-c-text-2),1743px 1803px var(--rt-c-text-2),398px 1815px var(--rt-c-text-2),1974px 702px var(--rt-c-text-2),934px 463px var(--rt-c-text-2),1805px 777px var(--rt-c-text-2),784px 381px var(--rt-c-text-2),372px 1118px var(--rt-c-text-2),933px 15px var(--rt-c-text-2),1862px 1859px var(--rt-c-text-2),405px 626px var(--rt-c-text-2),1948px 946px var(--rt-c-text-2),1869px 1889px var(--rt-c-text-2),158px 1324px var(--rt-c-text-2),1453px 1109px var(--rt-c-text-2),1890px 345px var(--rt-c-text-2),987px 981px var(--rt-c-text-2),1526px 1867px var(--rt-c-text-2),1506px 588px var(--rt-c-text-2),468px 208px var(--rt-c-text-2),146px 1950px var(--rt-c-text-2),1005px 758px var(--rt-c-text-2),1043px 1181px var(--rt-c-text-2),1724px 152px var(--rt-c-text-2),703px 1840px var(--rt-c-text-2),1330px 1972px var(--rt-c-text-2),1486px 1597px var(--rt-c-text-2),326px 1664px var(--rt-c-text-2),1614px 978px var(--rt-c-text-2),1489px 803px var(--rt-c-text-2),1230px 977px var(--rt-c-text-2),375px 1911px var(--rt-c-text-2),1104px 805px var(--rt-c-text-2),1292px 1381px var(--rt-c-text-2),1483px 1434px var(--rt-c-text-2),1331px 881px var(--rt-c-text-2),1464px 394px var(--rt-c-text-2),279px 1799px var(--rt-c-text-2),341px 1862px var(--rt-c-text-2),603px 781px var(--rt-c-text-2),1092px 1179px var(--rt-c-text-2),384px 538px var(--rt-c-text-2),1113px 1467px var(--rt-c-text-2),364px 1183px var(--rt-c-text-2),1817px 81px var(--rt-c-text-2),1431px 1082px var(--rt-c-text-2),1561px 1123px var(--rt-c-text-2),290px 1849px var(--rt-c-text-2),1649px 423px var(--rt-c-text-2),1665px 1088px var(--rt-c-text-2),1766px 1548px var(--rt-c-text-2),780px 1570px var(--rt-c-text-2),1299px 961px var(--rt-c-text-2),1659px 363px var(--rt-c-text-2),1382px 350px var(--rt-c-text-2),630px 620px var(--rt-c-text-2),373px 646px var(--rt-c-text-2),806px 807px var(--rt-c-text-2),1476px 1973px var(--rt-c-text-2),88px 1272px var(--rt-c-text-2),185px 936px var(--rt-c-text-2),1981px 1271px var(--rt-c-text-2),1021px 255px var(--rt-c-text-2),591px 1188px var(--rt-c-text-2),913px 1527px var(--rt-c-text-2),592px 723px var(--rt-c-text-2),698px 1366px var(--rt-c-text-2),861px 1541px var(--rt-c-text-2),1109px 1984px var(--rt-c-text-2),682px 1868px var(--rt-c-text-2),1915px 535px var(--rt-c-text-2),1357px 1171px var(--rt-c-text-2),1458px 1936px var(--rt-c-text-2),1471px 1177px var(--rt-c-text-2),1167px 1562px var(--rt-c-text-2),376px 280px var(--rt-c-text-2),889px 1485px var(--rt-c-text-2),1687px 490px var(--rt-c-text-2),895px 1484px var(--rt-c-text-2),542px 1020px var(--rt-c-text-2),598px 1589px var(--rt-c-text-2),1873px 873px var(--rt-c-text-2),885px 1923px var(--rt-c-text-2),752px 1393px var(--rt-c-text-2),1919px 143px var(--rt-c-text-2),1620px 1792px var(--rt-c-text-2),1194px 455px var(--rt-c-text-2),700px 1294px var(--rt-c-text-2),1989px 1046px var(--rt-c-text-2),1637px 1904px var(--rt-c-text-2),1491px 1481px var(--rt-c-text-2),1819px 741px var(--rt-c-text-2),1234px 1259px var(--rt-c-text-2),993px 832px var(--rt-c-text-2),404px 481px var(--rt-c-text-2),1074px 429px var(--rt-c-text-2),1389px 507px var(--rt-c-text-2),293px 400px var(--rt-c-text-2),449px 170px var(--rt-c-text-2),1330px 1971px var(--rt-c-text-2),1352px 962px var(--rt-c-text-2),955px 455px var(--rt-c-text-2),729px 439px var(--rt-c-text-2),1762px 666px var(--rt-c-text-2),119px 139px var(--rt-c-text-2),1369px 1284px var(--rt-c-text-2),1727px 228px var(--rt-c-text-2),128px 1014px var(--rt-c-text-2),1119px 1372px var(--rt-c-text-2),1104px 1290px var(--rt-c-text-2),664px 437px var(--rt-c-text-2),186px 665px var(--rt-c-text-2),1652px 1124px var(--rt-c-text-2),415px 782px var(--rt-c-text-2),1121px 147px var(--rt-c-text-2),923px 701px var(--rt-c-text-2),1210px 539px var(--rt-c-text-2),321px 1462px var(--rt-c-text-2),467px 586px var(--rt-c-text-2),1666px 972px var(--rt-c-text-2),1472px 1014px var(--rt-c-text-2),1937px 873px var(--rt-c-text-2),1659px 1512px var(--rt-c-text-2),976px 271px var(--rt-c-text-2),28px 443px var(--rt-c-text-2),604px 106px var(--rt-c-text-2),1344px 1866px var(--rt-c-text-2),1726px 29px var(--rt-c-text-2),1075px 449px var(--rt-c-text-2),385px 1709px var(--rt-c-text-2),591px 1532px var(--rt-c-text-2),355px 677px var(--rt-c-text-2),447px 54px var(--rt-c-text-2),691px 1227px var(--rt-c-text-2),1702px 108px var(--rt-c-text-2),353px 1699px var(--rt-c-text-2),207px 1805px var(--rt-c-text-2),1734px 240px var(--rt-c-text-2),587px 126px var(--rt-c-text-2),1304px 1140px var(--rt-c-text-2),1574px 1300px var(--rt-c-text-2),715px 489px var(--rt-c-text-2),573px 1155px var(--rt-c-text-2),1005px 121px var(--rt-c-text-2),230px 1606px var(--rt-c-text-2),297px 414px var(--rt-c-text-2),1471px 729px var(--rt-c-text-2),431px 1821px var(--rt-c-text-2),784px 79px var(--rt-c-text-2),1541px 1361px var(--rt-c-text-2),583px 1110px var(--rt-c-text-2),1822px 1802px var(--rt-c-text-2),1454px 1904px var(--rt-c-text-2),479px 271px var(--rt-c-text-2),143px 1165px var(--rt-c-text-2),1774px 1433px var(--rt-c-text-2),1107px 1503px var(--rt-c-text-2),1839px 1723px var(--rt-c-text-2),34px 1793px var(--rt-c-text-2),36px 1803px var(--rt-c-text-2),1275px 401px var(--rt-c-text-2),517px 1324px var(--rt-c-text-2),302px 296px var(--rt-c-text-2),1735px 1876px var(--rt-c-text-2),1643px 1937px var(--rt-c-text-2),625px 318px var(--rt-c-text-2),1868px 487px var(--rt-c-text-2),1510px 1413px var(--rt-c-text-2),615px 143px var(--rt-c-text-2),608px 48px var(--rt-c-text-2),199px 362px var(--rt-c-text-2),603px 232px var(--rt-c-text-2),1821px 1238px var(--rt-c-text-2),51px 690px var(--rt-c-text-2),1706px 402px var(--rt-c-text-2),416px 237px var(--rt-c-text-2),676px 1016px var(--rt-c-text-2),459px 196px var(--rt-c-text-2),191px 1649px var(--rt-c-text-2),412px 887px var(--rt-c-text-2),1088px 1040px var(--rt-c-text-2),212px 1837px var(--rt-c-text-2),206px 1254px var(--rt-c-text-2),230px 1380px var(--rt-c-text-2),1653px 593px var(--rt-c-text-2),1766px 801px var(--rt-c-text-2),187px 98px var(--rt-c-text-2),480px 1257px var(--rt-c-text-2),1753px 945px var(--rt-c-text-2),36px 1224px var(--rt-c-text-2),189px 114px var(--rt-c-text-2),95px 1415px var(--rt-c-text-2),508px 1638px var(--rt-c-text-2),1326px 925px var(--rt-c-text-2),1790px 1489px var(--rt-c-text-2),1958px 1126px var(--rt-c-text-2),818px 442px var(--rt-c-text-2),630px 1314px var(--rt-c-text-2),1793px 479px var(--rt-c-text-2),1274px 1243px var(--rt-c-text-2),1168px 832px var(--rt-c-text-2),402px 1620px var(--rt-c-text-2),1535px 1593px var(--rt-c-text-2),1690px 425px var(--rt-c-text-2),902px 1897px var(--rt-c-text-2),1793px 1439px var(--rt-c-text-2),1065px 1413px var(--rt-c-text-2),1353px 564px var(--rt-c-text-2),160px 320px var(--rt-c-text-2),113px 665px var(--rt-c-text-2),1310px 1355px var(--rt-c-text-2),970px 1171px var(--rt-c-text-2),1463px 110px var(--rt-c-text-2),863px 1565px var(--rt-c-text-2),1499px 556px var(--rt-c-text-2),1054px 1602px var(--rt-c-text-2),1089px 240px var(--rt-c-text-2),1325px 32px var(--rt-c-text-2),1021px 1008px var(--rt-c-text-2),1310px 764px var(--rt-c-text-2),92px 1237px var(--rt-c-text-2),811px 1892px var(--rt-c-text-2),809px 348px var(--rt-c-text-2),908px 1090px var(--rt-c-text-2),648px 1204px var(--rt-c-text-2),245px 268px var(--rt-c-text-2),809px 1278px var(--rt-c-text-2),1708px 1690px var(--rt-c-text-2),1944px 1682px var(--rt-c-text-2),1757px 1651px var(--rt-c-text-2),1884px 1995px var(--rt-c-text-2),1690px 1185px var(--rt-c-text-2),447px 100px var(--rt-c-text-2),1836px 1024px var(--rt-c-text-2),1020px 1805px var(--rt-c-text-2),1428px 808px var(--rt-c-text-2),1646px 696px var(--rt-c-text-2),1865px 1666px var(--rt-c-text-2),281px 524px var(--rt-c-text-2),1568px 395px var(--rt-c-text-2),36px 1705px var(--rt-c-text-2),1227px 1603px var(--rt-c-text-2),1311px 1542px var(--rt-c-text-2),1238px 1222px var(--rt-c-text-2),780px 1360px var(--rt-c-text-2),1711px 237px var(--rt-c-text-2),1857px 1494px var(--rt-c-text-2),850px 276px var(--rt-c-text-2),1381px 10px var(--rt-c-text-2),395px 29px var(--rt-c-text-2),1357px 1552px var(--rt-c-text-2),1586px 389px var(--rt-c-text-2),1668px 312px var(--rt-c-text-2),718px 571px var(--rt-c-text-2),1758px 729px var(--rt-c-text-2),713px 592px var(--rt-c-text-2),241px 1096px var(--rt-c-text-2),1059px 1468px var(--rt-c-text-2),1869px 940px var(--rt-c-text-2),1843px 842px var(--rt-c-text-2),766px 348px var(--rt-c-text-2),933px 1527px var(--rt-c-text-2),1279px 731px var(--rt-c-text-2),1379px 1224px var(--rt-c-text-2),1108px 1295px var(--rt-c-text-2),445px 119px var(--rt-c-text-2),1998px 1570px var(--rt-c-text-2),719px 1289px var(--rt-c-text-2),651px 1959px var(--rt-c-text-2),873px 1399px var(--rt-c-text-2),1207px 321px var(--rt-c-text-2),1044px 150px var(--rt-c-text-2),527px 649px var(--rt-c-text-2),1971px 1772px var(--rt-c-text-2),1906px 1522px var(--rt-c-text-2),1502px 1710px var(--rt-c-text-2),701px 1051px var(--rt-c-text-2),1859px 1242px var(--rt-c-text-2),1818px 1677px var(--rt-c-text-2),480px 87px var(--rt-c-text-2),663px 130px var(--rt-c-text-2),495px 578px var(--rt-c-text-2),1250px 325px var(--rt-c-text-2),983px 1934px var(--rt-c-text-2),1227px 972px var(--rt-c-text-2),482px 1799px var(--rt-c-text-2),1216px 453px var(--rt-c-text-2),67px 1811px var(--rt-c-text-2),148px 950px var(--rt-c-text-2),1600px 1018px var(--rt-c-text-2),1714px 1747px var(--rt-c-text-2),739px 1943px var(--rt-c-text-2),1200px 1137px var(--rt-c-text-2),1980px 95px var(--rt-c-text-2),418px 1780px var(--rt-c-text-2),834px 269px var(--rt-c-text-2),778px 1665px var(--rt-c-text-2),1334px 1016px var(--rt-c-text-2),1310px 356px var(--rt-c-text-2),450px 1663px var(--rt-c-text-2),1414px 800px var(--rt-c-text-2),19px 1765px var(--rt-c-text-2),1508px 1721px var(--rt-c-text-2),1332px 1794px var(--rt-c-text-2),724px 212px var(--rt-c-text-2),745px 459px var(--rt-c-text-2),1564px 1220px var(--rt-c-text-2),1712px 426px var(--rt-c-text-2),1024px 26px var(--rt-c-text-2),722px 1246px var(--rt-c-text-2),1758px 1968px var(--rt-c-text-2),23px 349px var(--rt-c-text-2),1982px 1368px var(--rt-c-text-2),1314px 1489px var(--rt-c-text-2),342px 1576px var(--rt-c-text-2),1308px 617px var(--rt-c-text-2),758px 1901px var(--rt-c-text-2),1554px 1345px var(--rt-c-text-2),676px 1202px var(--rt-c-text-2),1241px 245px var(--rt-c-text-2),230px 549px var(--rt-c-text-2),1218px 1179px var(--rt-c-text-2),123px 1887px var(--rt-c-text-2),910px 978px var(--rt-c-text-2),1745px 837px var(--rt-c-text-2),476px 1125px var(--rt-c-text-2),1386px 275px var(--rt-c-text-2),1324px 1230px var(--rt-c-text-2),1600px 1309px var(--rt-c-text-2),1537px 724px var(--rt-c-text-2),578px 1082px var(--rt-c-text-2),486px 1328px var(--rt-c-text-2),1263px 1260px var(--rt-c-text-2),88px 148px var(--rt-c-text-2),606px 1532px var(--rt-c-text-2),1968px 1104px var(--rt-c-text-2),1381px 697px var(--rt-c-text-2),1318px 780px var(--rt-c-text-2),1142px 1383px var(--rt-c-text-2),946px 1484px var(--rt-c-text-2),631px 1693px var(--rt-c-text-2),1992px 1510px var(--rt-c-text-2),366px 742px var(--rt-c-text-2),267px 288px var(--rt-c-text-2),1267px 350px var(--rt-c-text-2),387px 572px var(--rt-c-text-2),262px 1568px var(--rt-c-text-2),1341px 970px var(--rt-c-text-2),485px 1792px var(--rt-c-text-2),1711px 1257px var(--rt-c-text-2),1051px 1144px var(--rt-c-text-2),862px 1634px var(--rt-c-text-2),246px 904px var(--rt-c-text-2),60px 284px var(--rt-c-text-2),1938px 1927px var(--rt-c-text-2),1112px 246px var(--rt-c-text-2),289px 1054px var(--rt-c-text-2),118px 108px var(--rt-c-text-2),1278px 701px var(--rt-c-text-2),747px 1047px var(--rt-c-text-2),1591px 983px var(--rt-c-text-2),761px 790px var(--rt-c-text-2),116px 514px var(--rt-c-text-2),160px 552px var(--rt-c-text-2),1833px 1641px var(--rt-c-text-2),1315px 325px var(--rt-c-text-2),1006px 67px var(--rt-c-text-2),402px 337px var(--rt-c-text-2),1035px 447px var(--rt-c-text-2),1153px 382px var(--rt-c-text-2),1313px 1369px var(--rt-c-text-2)}#stars2{width:2px;height:2px;background:transparent;box-shadow:1931px 12px var(--rt-c-text-2),1449px 1561px var(--rt-c-text-2),1654px 1298px var(--rt-c-text-2),465px 1660px var(--rt-c-text-2),366px 954px var(--rt-c-text-2),1096px 891px var(--rt-c-text-2),889px 1285px var(--rt-c-text-2),464px 1025px var(--rt-c-text-2),1891px 1121px var(--rt-c-text-2),1358px 1565px var(--rt-c-text-2),956px 901px var(--rt-c-text-2),1104px 567px var(--rt-c-text-2),1915px 466px var(--rt-c-text-2),476px 415px var(--rt-c-text-2),1301px 1758px var(--rt-c-text-2),1771px 128px var(--rt-c-text-2),993px 678px var(--rt-c-text-2),946px 1304px var(--rt-c-text-2),1533px 1734px var(--rt-c-text-2),457px 867px var(--rt-c-text-2),1639px 1260px var(--rt-c-text-2),1394px 380px var(--rt-c-text-2),190px 1629px var(--rt-c-text-2),1366px 1423px var(--rt-c-text-2),1288px 733px var(--rt-c-text-2),1633px 1283px var(--rt-c-text-2),253px 111px var(--rt-c-text-2),1554px 588px var(--rt-c-text-2),1301px 978px var(--rt-c-text-2),856px 58px var(--rt-c-text-2),261px 688px var(--rt-c-text-2),1530px 1521px var(--rt-c-text-2),1614px 958px var(--rt-c-text-2),1928px 343px var(--rt-c-text-2),493px 995px var(--rt-c-text-2),1510px 659px var(--rt-c-text-2),183px 150px var(--rt-c-text-2),1040px 1741px var(--rt-c-text-2),930px 109px var(--rt-c-text-2),1463px 851px var(--rt-c-text-2),663px 1279px var(--rt-c-text-2),1317px 1776px var(--rt-c-text-2),1184px 1222px var(--rt-c-text-2),781px 646px var(--rt-c-text-2),196px 1855px var(--rt-c-text-2),1303px 650px var(--rt-c-text-2),884px 1381px var(--rt-c-text-2),608px 374px var(--rt-c-text-2),1184px 357px var(--rt-c-text-2),1345px 389px var(--rt-c-text-2),331px 917px var(--rt-c-text-2),1935px 290px var(--rt-c-text-2),1157px 1409px var(--rt-c-text-2),1727px 297px var(--rt-c-text-2),352px 1038px var(--rt-c-text-2),134px 145px var(--rt-c-text-2),1163px 814px var(--rt-c-text-2),1360px 1605px var(--rt-c-text-2),1267px 486px var(--rt-c-text-2),818px 1922px var(--rt-c-text-2),303px 1105px var(--rt-c-text-2),1733px 624px var(--rt-c-text-2),1969px 988px var(--rt-c-text-2),1574px 1106px var(--rt-c-text-2),1172px 1093px var(--rt-c-text-2),1373px 1567px var(--rt-c-text-2),611px 1005px var(--rt-c-text-2),3px 1932px var(--rt-c-text-2),1655px 913px var(--rt-c-text-2),877px 75px var(--rt-c-text-2),196px 379px var(--rt-c-text-2),1551px 627px var(--rt-c-text-2),517px 5px var(--rt-c-text-2),1773px 370px var(--rt-c-text-2),775px 300px var(--rt-c-text-2),1591px 1756px var(--rt-c-text-2),1399px 373px var(--rt-c-text-2),399px 1715px var(--rt-c-text-2),1208px 1604px var(--rt-c-text-2),1691px 1819px var(--rt-c-text-2),658px 666px var(--rt-c-text-2),273px 136px var(--rt-c-text-2),500px 1887px var(--rt-c-text-2),1866px 1819px var(--rt-c-text-2),722px 63px var(--rt-c-text-2),465px 1421px var(--rt-c-text-2),1590px 686px var(--rt-c-text-2),1979px 1390px var(--rt-c-text-2),96px 934px var(--rt-c-text-2),1412px 1287px var(--rt-c-text-2),1061px 264px var(--rt-c-text-2),249px 455px var(--rt-c-text-2),218px 1811px var(--rt-c-text-2),917px 1256px var(--rt-c-text-2),1967px 1120px var(--rt-c-text-2),260px 189px var(--rt-c-text-2),1057px 616px var(--rt-c-text-2),995px 1654px var(--rt-c-text-2),264px 1343px var(--rt-c-text-2),1852px 1168px var(--rt-c-text-2),1280px 1418px var(--rt-c-text-2),791px 1883px var(--rt-c-text-2),972px 7px var(--rt-c-text-2),108px 133px var(--rt-c-text-2),658px 534px var(--rt-c-text-2),574px 1732px var(--rt-c-text-2),964px 1847px var(--rt-c-text-2),779px 91px var(--rt-c-text-2),1013px 1163px var(--rt-c-text-2),165px 401px var(--rt-c-text-2),734px 975px var(--rt-c-text-2),1660px 668px var(--rt-c-text-2),346px 754px var(--rt-c-text-2),1890px 364px var(--rt-c-text-2),1795px 543px var(--rt-c-text-2),860px 1122px var(--rt-c-text-2),851px 1311px var(--rt-c-text-2),905px 1908px var(--rt-c-text-2),950px 619px var(--rt-c-text-2),529px 893px var(--rt-c-text-2),1120px 74px var(--rt-c-text-2),1753px 1336px var(--rt-c-text-2),1230px 107px var(--rt-c-text-2),758px 1664px var(--rt-c-text-2),1372px 1410px var(--rt-c-text-2),1949px 385px var(--rt-c-text-2),1910px 1932px var(--rt-c-text-2),1288px 1985px var(--rt-c-text-2),1416px 1946px var(--rt-c-text-2),940px 385px var(--rt-c-text-2),502px 939px var(--rt-c-text-2),1851px 402px var(--rt-c-text-2),1593px 973px var(--rt-c-text-2),399px 593px var(--rt-c-text-2),120px 50px var(--rt-c-text-2),813px 51px var(--rt-c-text-2),1001px 333px var(--rt-c-text-2),1710px 851px var(--rt-c-text-2),1247px 530px var(--rt-c-text-2),1522px 1225px var(--rt-c-text-2),1128px 1539px var(--rt-c-text-2),635px 1767px var(--rt-c-text-2),30px 36px var(--rt-c-text-2),424px 265px var(--rt-c-text-2),1687px 716px var(--rt-c-text-2),1569px 566px var(--rt-c-text-2),1341px 969px var(--rt-c-text-2),1835px 987px var(--rt-c-text-2),69px 1367px var(--rt-c-text-2),518px 488px var(--rt-c-text-2),1644px 1305px var(--rt-c-text-2),346px 609px var(--rt-c-text-2),1521px 90px var(--rt-c-text-2),1156px 1865px var(--rt-c-text-2),409px 739px var(--rt-c-text-2),595px 894px var(--rt-c-text-2),820px 654px var(--rt-c-text-2),1701px 684px var(--rt-c-text-2),1939px 1457px var(--rt-c-text-2),945px 1678px var(--rt-c-text-2),1294px 488px var(--rt-c-text-2),141px 494px var(--rt-c-text-2),1519px 319px var(--rt-c-text-2),61px 1609px var(--rt-c-text-2),166px 1293px var(--rt-c-text-2),1533px 284px var(--rt-c-text-2),1133px 1756px var(--rt-c-text-2),372px 1364px var(--rt-c-text-2),1257px 672px var(--rt-c-text-2),473px 289px var(--rt-c-text-2),1359px 1349px var(--rt-c-text-2),308px 665px var(--rt-c-text-2),801px 610px var(--rt-c-text-2),160px 288px var(--rt-c-text-2),1333px 348px var(--rt-c-text-2),931px 262px var(--rt-c-text-2),1542px 1735px var(--rt-c-text-2),1418px 940px var(--rt-c-text-2),994px 1371px var(--rt-c-text-2),344px 1013px var(--rt-c-text-2),1737px 1844px var(--rt-c-text-2),57px 1057px var(--rt-c-text-2),231px 1459px var(--rt-c-text-2),743px 434px var(--rt-c-text-2),1276px 1233px var(--rt-c-text-2),1480px 1781px var(--rt-c-text-2),1756px 468px var(--rt-c-text-2),767px 66px var(--rt-c-text-2),164px 1071px var(--rt-c-text-2),282px 129px var(--rt-c-text-2),640px 1534px var(--rt-c-text-2),1187px 537px var(--rt-c-text-2),1885px 87px var(--rt-c-text-2),955px 113px var(--rt-c-text-2),1508px 422px var(--rt-c-text-2),459px 1292px var(--rt-c-text-2),1248px 1628px var(--rt-c-text-2),1163px 1661px var(--rt-c-text-2),42px 952px var(--rt-c-text-2),360px 1700px var(--rt-c-text-2);animation:animStar 100s linear infinite}#stars2:after{content:" ";position:absolute;top:2000px;width:2px;height:2px;background:transparent;box-shadow:1931px 12px var(--rt-c-text-2),1449px 1561px var(--rt-c-text-2),1654px 1298px var(--rt-c-text-2),465px 1660px var(--rt-c-text-2),366px 954px var(--rt-c-text-2),1096px 891px var(--rt-c-text-2),889px 1285px var(--rt-c-text-2),464px 1025px var(--rt-c-text-2),1891px 1121px var(--rt-c-text-2),1358px 1565px var(--rt-c-text-2),956px 901px var(--rt-c-text-2),1104px 567px var(--rt-c-text-2),1915px 466px var(--rt-c-text-2),476px 415px var(--rt-c-text-2),1301px 1758px var(--rt-c-text-2),1771px 128px var(--rt-c-text-2),993px 678px var(--rt-c-text-2),946px 1304px var(--rt-c-text-2),1533px 1734px var(--rt-c-text-2),457px 867px var(--rt-c-text-2),1639px 1260px var(--rt-c-text-2),1394px 380px var(--rt-c-text-2),190px 1629px var(--rt-c-text-2),1366px 1423px var(--rt-c-text-2),1288px 733px var(--rt-c-text-2),1633px 1283px var(--rt-c-text-2),253px 111px var(--rt-c-text-2),1554px 588px var(--rt-c-text-2),1301px 978px var(--rt-c-text-2),856px 58px var(--rt-c-text-2),261px 688px var(--rt-c-text-2),1530px 1521px var(--rt-c-text-2),1614px 958px var(--rt-c-text-2),1928px 343px var(--rt-c-text-2),493px 995px var(--rt-c-text-2),1510px 659px var(--rt-c-text-2),183px 150px var(--rt-c-text-2),1040px 1741px var(--rt-c-text-2),930px 109px var(--rt-c-text-2),1463px 851px var(--rt-c-text-2),663px 1279px var(--rt-c-text-2),1317px 1776px var(--rt-c-text-2),1184px 1222px var(--rt-c-text-2),781px 646px var(--rt-c-text-2),196px 1855px var(--rt-c-text-2),1303px 650px var(--rt-c-text-2),884px 1381px var(--rt-c-text-2),608px 374px var(--rt-c-text-2),1184px 357px var(--rt-c-text-2),1345px 389px var(--rt-c-text-2),331px 917px var(--rt-c-text-2),1935px 290px var(--rt-c-text-2),1157px 1409px var(--rt-c-text-2),1727px 297px var(--rt-c-text-2),352px 1038px var(--rt-c-text-2),134px 145px var(--rt-c-text-2),1163px 814px var(--rt-c-text-2),1360px 1605px var(--rt-c-text-2),1267px 486px var(--rt-c-text-2),818px 1922px var(--rt-c-text-2),303px 1105px var(--rt-c-text-2),1733px 624px var(--rt-c-text-2),1969px 988px var(--rt-c-text-2),1574px 1106px var(--rt-c-text-2),1172px 1093px var(--rt-c-text-2),1373px 1567px var(--rt-c-text-2),611px 1005px var(--rt-c-text-2),3px 1932px var(--rt-c-text-2),1655px 913px var(--rt-c-text-2),877px 75px var(--rt-c-text-2),196px 379px var(--rt-c-text-2),1551px 627px var(--rt-c-text-2),517px 5px var(--rt-c-text-2),1773px 370px var(--rt-c-text-2),775px 300px var(--rt-c-text-2),1591px 1756px var(--rt-c-text-2),1399px 373px var(--rt-c-text-2),399px 1715px var(--rt-c-text-2),1208px 1604px var(--rt-c-text-2),1691px 1819px var(--rt-c-text-2),658px 666px var(--rt-c-text-2),273px 136px var(--rt-c-text-2),500px 1887px var(--rt-c-text-2),1866px 1819px var(--rt-c-text-2),722px 63px var(--rt-c-text-2),465px 1421px var(--rt-c-text-2),1590px 686px var(--rt-c-text-2),1979px 1390px var(--rt-c-text-2),96px 934px var(--rt-c-text-2),1412px 1287px var(--rt-c-text-2),1061px 264px var(--rt-c-text-2),249px 455px var(--rt-c-text-2),218px 1811px var(--rt-c-text-2),917px 1256px var(--rt-c-text-2),1967px 1120px var(--rt-c-text-2),260px 189px var(--rt-c-text-2),1057px 616px var(--rt-c-text-2),995px 1654px var(--rt-c-text-2),264px 1343px var(--rt-c-text-2),1852px 1168px var(--rt-c-text-2),1280px 1418px var(--rt-c-text-2),791px 1883px var(--rt-c-text-2),972px 7px var(--rt-c-text-2),108px 133px var(--rt-c-text-2),658px 534px var(--rt-c-text-2),574px 1732px var(--rt-c-text-2),964px 1847px var(--rt-c-text-2),779px 91px var(--rt-c-text-2),1013px 1163px var(--rt-c-text-2),165px 401px var(--rt-c-text-2),734px 975px var(--rt-c-text-2),1660px 668px var(--rt-c-text-2),346px 754px var(--rt-c-text-2),1890px 364px var(--rt-c-text-2),1795px 543px var(--rt-c-text-2),860px 1122px var(--rt-c-text-2),851px 1311px var(--rt-c-text-2),905px 1908px var(--rt-c-text-2),950px 619px var(--rt-c-text-2),529px 893px var(--rt-c-text-2),1120px 74px var(--rt-c-text-2),1753px 1336px var(--rt-c-text-2),1230px 107px var(--rt-c-text-2),758px 1664px var(--rt-c-text-2),1372px 1410px var(--rt-c-text-2),1949px 385px var(--rt-c-text-2),1910px 1932px var(--rt-c-text-2),1288px 1985px var(--rt-c-text-2),1416px 1946px var(--rt-c-text-2),940px 385px var(--rt-c-text-2),502px 939px var(--rt-c-text-2),1851px 402px var(--rt-c-text-2),1593px 973px var(--rt-c-text-2),399px 593px var(--rt-c-text-2),120px 50px var(--rt-c-text-2),813px 51px var(--rt-c-text-2),1001px 333px var(--rt-c-text-2),1710px 851px var(--rt-c-text-2),1247px 530px var(--rt-c-text-2),1522px 1225px var(--rt-c-text-2),1128px 1539px var(--rt-c-text-2),635px 1767px var(--rt-c-text-2),30px 36px var(--rt-c-text-2),424px 265px var(--rt-c-text-2),1687px 716px var(--rt-c-text-2),1569px 566px var(--rt-c-text-2),1341px 969px var(--rt-c-text-2),1835px 987px var(--rt-c-text-2),69px 1367px var(--rt-c-text-2),518px 488px var(--rt-c-text-2),1644px 1305px var(--rt-c-text-2),346px 609px var(--rt-c-text-2),1521px 90px var(--rt-c-text-2),1156px 1865px var(--rt-c-text-2),409px 739px var(--rt-c-text-2),595px 894px var(--rt-c-text-2),820px 654px var(--rt-c-text-2),1701px 684px var(--rt-c-text-2),1939px 1457px var(--rt-c-text-2),945px 1678px var(--rt-c-text-2),1294px 488px var(--rt-c-text-2),141px 494px var(--rt-c-text-2),1519px 319px var(--rt-c-text-2),61px 1609px var(--rt-c-text-2),166px 1293px var(--rt-c-text-2),1533px 284px var(--rt-c-text-2),1133px 1756px var(--rt-c-text-2),372px 1364px var(--rt-c-text-2),1257px 672px var(--rt-c-text-2),473px 289px var(--rt-c-text-2),1359px 1349px var(--rt-c-text-2),308px 665px var(--rt-c-text-2),801px 610px var(--rt-c-text-2),160px 288px var(--rt-c-text-2),1333px 348px var(--rt-c-text-2),931px 262px var(--rt-c-text-2),1542px 1735px var(--rt-c-text-2),1418px 940px var(--rt-c-text-2),994px 1371px var(--rt-c-text-2),344px 1013px var(--rt-c-text-2),1737px 1844px var(--rt-c-text-2),57px 1057px var(--rt-c-text-2),231px 1459px var(--rt-c-text-2),743px 434px var(--rt-c-text-2),1276px 1233px var(--rt-c-text-2),1480px 1781px var(--rt-c-text-2),1756px 468px var(--rt-c-text-2),767px 66px var(--rt-c-text-2),164px 1071px var(--rt-c-text-2),282px 129px var(--rt-c-text-2),640px 1534px var(--rt-c-text-2),1187px 537px var(--rt-c-text-2),1885px 87px var(--rt-c-text-2),955px 113px var(--rt-c-text-2),1508px 422px var(--rt-c-text-2),459px 1292px var(--rt-c-text-2),1248px 1628px var(--rt-c-text-2),1163px 1661px var(--rt-c-text-2),42px 952px var(--rt-c-text-2),360px 1700px var(--rt-c-text-2)}#stars3{width:3px;height:3px;background:transparent;box-shadow:94px 166px var(--rt-c-text-2),34px 1465px var(--rt-c-text-2),1879px 866px var(--rt-c-text-2),1215px 1039px var(--rt-c-text-2),753px 1904px var(--rt-c-text-2),1384px 210px var(--rt-c-text-2),1672px 1395px var(--rt-c-text-2),1258px 1213px var(--rt-c-text-2),1769px 866px var(--rt-c-text-2),368px 1964px var(--rt-c-text-2),1518px 1504px var(--rt-c-text-2),1657px 463px var(--rt-c-text-2),43px 1710px var(--rt-c-text-2),1957px 1206px var(--rt-c-text-2),525px 219px var(--rt-c-text-2),469px 1635px var(--rt-c-text-2),1352px 43px var(--rt-c-text-2),150px 1565px var(--rt-c-text-2),1687px 427px var(--rt-c-text-2),389px 623px var(--rt-c-text-2),1332px 627px var(--rt-c-text-2),1158px 494px var(--rt-c-text-2),1258px 31px var(--rt-c-text-2),1533px 646px var(--rt-c-text-2),1974px 1982px var(--rt-c-text-2),1068px 1138px var(--rt-c-text-2),1883px 1239px var(--rt-c-text-2),820px 840px var(--rt-c-text-2),1042px 1211px var(--rt-c-text-2),1867px 1140px var(--rt-c-text-2),1239px 1448px var(--rt-c-text-2),1360px 1685px var(--rt-c-text-2),752px 1595px var(--rt-c-text-2),46px 14px var(--rt-c-text-2),1043px 349px var(--rt-c-text-2),618px 1743px var(--rt-c-text-2),971px 1282px var(--rt-c-text-2),27px 1638px var(--rt-c-text-2),1171px 284px var(--rt-c-text-2),951px 1590px var(--rt-c-text-2),42px 1205px var(--rt-c-text-2),381px 960px var(--rt-c-text-2),1744px 1608px var(--rt-c-text-2),1212px 817px var(--rt-c-text-2),1940px 757px var(--rt-c-text-2),546px 317px var(--rt-c-text-2),1383px 111px var(--rt-c-text-2),1265px 1073px var(--rt-c-text-2),899px 499px var(--rt-c-text-2),4px 254px var(--rt-c-text-2),1830px 1051px var(--rt-c-text-2),1283px 457px var(--rt-c-text-2),881px 556px var(--rt-c-text-2),1741px 804px var(--rt-c-text-2),936px 561px var(--rt-c-text-2),1184px 1998px var(--rt-c-text-2),461px 1662px var(--rt-c-text-2),336px 830px var(--rt-c-text-2),343px 1044px var(--rt-c-text-2),1891px 694px var(--rt-c-text-2),1100px 2px var(--rt-c-text-2),280px 1866px var(--rt-c-text-2),334px 1732px var(--rt-c-text-2),974px 1187px var(--rt-c-text-2),1171px 1782px var(--rt-c-text-2),1110px 1067px var(--rt-c-text-2),378px 685px var(--rt-c-text-2),1579px 525px var(--rt-c-text-2),1306px 463px var(--rt-c-text-2),521px 1321px var(--rt-c-text-2),1097px 165px var(--rt-c-text-2),1952px 1436px var(--rt-c-text-2),690px 1525px var(--rt-c-text-2),1996px 418px var(--rt-c-text-2),1872px 987px var(--rt-c-text-2),1028px 1716px var(--rt-c-text-2),733px 1455px var(--rt-c-text-2),1277px 1321px var(--rt-c-text-2),1384px 1430px var(--rt-c-text-2),1182px 294px var(--rt-c-text-2),1553px 1342px var(--rt-c-text-2),1856px 1341px var(--rt-c-text-2),836px 1457px var(--rt-c-text-2),1101px 799px var(--rt-c-text-2),722px 648px var(--rt-c-text-2),1304px 1146px var(--rt-c-text-2),289px 1031px var(--rt-c-text-2),136px 1453px var(--rt-c-text-2),1448px 1429px var(--rt-c-text-2),901px 1629px var(--rt-c-text-2),264px 1314px var(--rt-c-text-2),771px 963px var(--rt-c-text-2),1787px 1939px var(--rt-c-text-2),653px 1150px var(--rt-c-text-2),663px 800px var(--rt-c-text-2),1044px 1652px var(--rt-c-text-2),1287px 904px var(--rt-c-text-2),152px 1105px var(--rt-c-text-2),1363px 116px var(--rt-c-text-2),529px 353px var(--rt-c-text-2);animation:animStar 150s linear infinite}#stars3:after{content:" ";position:absolute;top:2000px;width:3px;height:3px;background:transparent;box-shadow:94px 166px var(--rt-c-text-2),34px 1465px var(--rt-c-text-2),1879px 866px var(--rt-c-text-2),1215px 1039px var(--rt-c-text-2),753px 1904px var(--rt-c-text-2),1384px 210px var(--rt-c-text-2),1672px 1395px var(--rt-c-text-2),1258px 1213px var(--rt-c-text-2),1769px 866px var(--rt-c-text-2),368px 1964px var(--rt-c-text-2),1518px 1504px var(--rt-c-text-2),1657px 463px var(--rt-c-text-2),43px 1710px var(--rt-c-text-2),1957px 1206px var(--rt-c-text-2),525px 219px var(--rt-c-text-2),469px 1635px var(--rt-c-text-2),1352px 43px var(--rt-c-text-2),150px 1565px var(--rt-c-text-2),1687px 427px var(--rt-c-text-2),389px 623px var(--rt-c-text-2),1332px 627px var(--rt-c-text-2),1158px 494px var(--rt-c-text-2),1258px 31px var(--rt-c-text-2),1533px 646px var(--rt-c-text-2),1974px 1982px var(--rt-c-text-2),1068px 1138px var(--rt-c-text-2),1883px 1239px var(--rt-c-text-2),820px 840px var(--rt-c-text-2),1042px 1211px var(--rt-c-text-2),1867px 1140px var(--rt-c-text-2),1239px 1448px var(--rt-c-text-2),1360px 1685px var(--rt-c-text-2),752px 1595px var(--rt-c-text-2),46px 14px var(--rt-c-text-2),1043px 349px var(--rt-c-text-2),618px 1743px var(--rt-c-text-2),971px 1282px var(--rt-c-text-2),27px 1638px var(--rt-c-text-2),1171px 284px var(--rt-c-text-2),951px 1590px var(--rt-c-text-2),42px 1205px var(--rt-c-text-2),381px 960px var(--rt-c-text-2),1744px 1608px var(--rt-c-text-2),1212px 817px var(--rt-c-text-2),1940px 757px var(--rt-c-text-2),546px 317px var(--rt-c-text-2),1383px 111px var(--rt-c-text-2),1265px 1073px var(--rt-c-text-2),899px 499px var(--rt-c-text-2),4px 254px var(--rt-c-text-2),1830px 1051px var(--rt-c-text-2),1283px 457px var(--rt-c-text-2),881px 556px var(--rt-c-text-2),1741px 804px var(--rt-c-text-2),936px 561px var(--rt-c-text-2),1184px 1998px var(--rt-c-text-2),461px 1662px var(--rt-c-text-2),336px 830px var(--rt-c-text-2),343px 1044px var(--rt-c-text-2),1891px 694px var(--rt-c-text-2),1100px 2px var(--rt-c-text-2),280px 1866px var(--rt-c-text-2),334px 1732px var(--rt-c-text-2),974px 1187px var(--rt-c-text-2),1171px 1782px var(--rt-c-text-2),1110px 1067px var(--rt-c-text-2),378px 685px var(--rt-c-text-2),1579px 525px var(--rt-c-text-2),1306px 463px var(--rt-c-text-2),521px 1321px var(--rt-c-text-2),1097px 165px var(--rt-c-text-2),1952px 1436px var(--rt-c-text-2),690px 1525px var(--rt-c-text-2),1996px 418px var(--rt-c-text-2),1872px 987px var(--rt-c-text-2),1028px 1716px var(--rt-c-text-2),733px 1455px var(--rt-c-text-2),1277px 1321px var(--rt-c-text-2),1384px 1430px var(--rt-c-text-2),1182px 294px var(--rt-c-text-2),1553px 1342px var(--rt-c-text-2),1856px 1341px var(--rt-c-text-2),836px 1457px var(--rt-c-text-2),1101px 799px var(--rt-c-text-2),722px 648px var(--rt-c-text-2),1304px 1146px var(--rt-c-text-2),289px 1031px var(--rt-c-text-2),136px 1453px var(--rt-c-text-2),1448px 1429px var(--rt-c-text-2),901px 1629px var(--rt-c-text-2),264px 1314px var(--rt-c-text-2),771px 963px var(--rt-c-text-2),1787px 1939px var(--rt-c-text-2),653px 1150px var(--rt-c-text-2),663px 800px var(--rt-c-text-2),1044px 1652px var(--rt-c-text-2),1287px 904px var(--rt-c-text-2),152px 1105px var(--rt-c-text-2),1363px 116px var(--rt-c-text-2),529px 353px var(--rt-c-text-2)}@keyframes animStar{0%{transform:translateY(0)}to{transform:translateY(-2000px)}}img[data-v-cf4ff237],img[data-v-59253abd],img[data-v-28b9466c],img[data-v-abd8f7b8],img[data-v-55bc7173],img[data-v-34d8afbf],img[data-v-7503ec2a]{border:1px solid #ddd}.post[data-v-d33440b1]{border-bottom:1px solid var(--vp-c-border);margin:1rem 0 2rem}.post .title[data-v-d33440b1]{font-size:1.3rem;font-weight:600;border-bottom:1px solid var(--vp-c-divider);margin:3rem 0 1rem;padding-bottom:1rem}.post .title a[data-v-d33440b1]{text-decoration:none;color:var(--vp-c-text-2);transition:color .3s easy-out}.post .title a[data-v-d33440b1]:hover{color:var(--vp-c-text-1)}.post .content[data-v-d33440b1]{display:flex}.post .content .image[data-v-d33440b1]{flex:1 1 30%;margin:0 1rem 1rem 0}.post .content .desc[data-v-d33440b1]{flex:1 1 70%}@media (max-width: 768px){.post .content[data-v-d33440b1]{flex-direction:column}}.post .footer[data-v-d33440b1]{display:flex;justify-content:space-between;padding:2rem 0 .5rem;color:var(--vp-c-text-3)}.post .footer a[data-v-d33440b1]{color:var(--vp-c-text-3)}img[data-v-c1115a6d],img[data-v-2df6d70f]{border:1px solid #ddd}.VPButton.alt.alt-border{border-color:#fce728}.VPButton.alt.alt-border:hover{border-color:#f4dc02}.form-container{border-radius:5px;padding:20px 0}input[type=text],textarea{width:100%;padding:12px;border:1px solid #ccc;outline-color:#ccc;border-radius:4px;box-sizing:border-box;margin-top:6px;margin-bottom:16px;resize:vertical;transition:.8s}input[type=text]:focus,textarea:focus,input[type=text]:focus-visible,textarea:focus-visible{outline-color:#6e478e}textarea{height:200px}input[type=submit]{background-color:#45166b;color:#fff;font-size:1.1em;padding:12px 20px;margin-top:1em;border:none;border-radius:4px;cursor:pointer;transition:all .3s ease-in-out}input[type=submit]:hover{background-color:#6e478e}input:scope[type=submit][disabled]{opacity:.5;cursor:unset}input:scope[type=submit][disabled]:hover{background-color:#45166b}img[data-v-df523679],img[data-v-ec45ab85],img[data-v-92d8f99c],img[data-v-46521d3b],img[data-v-1d913317],img[data-v-a5c432b9],img[data-v-064ba841]{border:1px solid #ddd}.VPLocalSearchBox[data-v-fdcd6bb1]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-fdcd6bb1]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-fdcd6bb1]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-fdcd6bb1]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-fdcd6bb1]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 767px){.search-bar[data-v-fdcd6bb1]{padding:0 8px}}.search-bar[data-v-fdcd6bb1]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-fdcd6bb1]{display:block;font-size:18px}.navigate-icon[data-v-fdcd6bb1]{display:block;font-size:14px}.search-icon[data-v-fdcd6bb1]{margin:8px}@media (max-width: 767px){.search-icon[data-v-fdcd6bb1]{display:none}}.search-input[data-v-fdcd6bb1]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-fdcd6bb1]{padding:6px 4px}}.search-actions[data-v-fdcd6bb1]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-fdcd6bb1]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-fdcd6bb1]{display:none}}.search-actions button[data-v-fdcd6bb1]{padding:8px}.search-actions button[data-v-fdcd6bb1]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-fdcd6bb1]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-fdcd6bb1]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-fdcd6bb1]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-fdcd6bb1]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-fdcd6bb1]{display:none}}.search-keyboard-shortcuts kbd[data-v-fdcd6bb1]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-fdcd6bb1]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-fdcd6bb1]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-fdcd6bb1]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-fdcd6bb1]{margin:8px}}.titles[data-v-fdcd6bb1]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-fdcd6bb1]{display:flex;align-items:center;gap:4px}.title.main[data-v-fdcd6bb1]{font-weight:500}.title-icon[data-v-fdcd6bb1]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-fdcd6bb1]{opacity:.5}.result.selected[data-v-fdcd6bb1]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-fdcd6bb1]{position:relative}.excerpt[data-v-fdcd6bb1]{opacity:75%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;opacity:.5;margin-top:4px}.result.selected .excerpt[data-v-fdcd6bb1]{opacity:1}.excerpt[data-v-fdcd6bb1] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-fdcd6bb1] mark,.excerpt[data-v-fdcd6bb1] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-fdcd6bb1] .vp-code-group .tabs{display:none}.excerpt[data-v-fdcd6bb1] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-fdcd6bb1]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-fdcd6bb1]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-fdcd6bb1],.result.selected .title-icon[data-v-fdcd6bb1]{color:var(--vp-c-brand-1)!important}.no-results[data-v-fdcd6bb1]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-fdcd6bb1]{flex:none}
diff --git a/en/backend/api.html b/en/backend/api.html
index 848ca74de..967927266 100644
--- a/en/backend/api.html
+++ b/en/backend/api.html
@@ -6,13 +6,13 @@
     API service | Vue FAQ
     
     
-    
+    
     
-    
+    
     
-    
+    
     
-    
+    
     
     
     
@@ -66,8 +66,8 @@
   async getUserData(params) {
     return await http.get("/api/users/user", params);
   },
-};

http.js is a wrapper around requests to the server via your favorite library.

What is the convenience of abstracting the backend communication code from the main application code into a separate service?

You can easily replace axios with fetch or XHR, REST with JSON-RPC or WebSockets. The code in the components does not change and remains simple and explicit.

Where to do API requests from?

What is the best place in the component to request for data on the backend API - in the body of the script setup, or in the onMounted hook?

In onMounted.

  1. You can't safely use await in the body of the script setup, it requires Suspense and makes the component asynchronous and unnecessarily complicates the application. So you have to use promise then or IIFE , which is much worse to read and less convenient.

  2. If there is an uncaught error in the request, it cannot be handled in script setup, unlike the hook.

  3. From the point of view of system design, script setup is a component constructor. It is illogical to request data from external sources in it.

  4. There was repeated evidence that requests for data in script setup did not work correctly, but when moved to onMounted they worked. Depends on the context, but nevertheless.

- +};

http.js is a wrapper around requests to the server via your favorite library.

What is the convenience of abstracting the backend communication code from the main application code into a separate service?

You can easily replace axios with fetch or XHR, REST with JSON-RPC or WebSockets. The code in the components does not change and remains simple and explicit.

Where to do API requests from?

What is the best place in the component to request for data on the backend API - in the body of the script setup, or in the onMounted hook?

In onMounted.

  1. You can't safely use await in the body of the script setup, it requires Suspense and makes the component asynchronous and unnecessarily complicates the application. So you have to use promise then or IIFE , which is much worse to read and less convenient.

  2. If there is an uncaught error in the request, it cannot be handled in script setup, unlike the hook.

  3. From the point of view of system design, script setup is a component constructor. It is illogical to request data from external sources in it.

  4. There was repeated evidence that requests for data in script setup did not work correctly, but when moved to onMounted they worked. Depends on the context, but nevertheless.

+ \ No newline at end of file diff --git a/en/backend/auth.html b/en/backend/auth.html index b4357eeec..0c19efe9e 100644 --- a/en/backend/auth.html +++ b/en/backend/auth.html @@ -6,13 +6,13 @@ Authentication and authorization | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

Authentication and authorization

What is authentication and authorization

Roughly speaking:

Authentication is when the system verifies that it is John Doe who logged in, for example, by checking his username and password

Authorization - when the system verifies that the user requesting the resource/action has the right to access it. For example, a senior manager has the right to delete an item in the admin, but a simple manager does not.

How to make an authentication system on the site

For SPA the most common way - on JWT tokens. There are many variants of this, depending on the requirements of the security level (John Doe's personal blog with guest comments and online store with deposits and bonuses - two big differences).

JWT is a standard for writing a small amount of information into a string (token) and signing it (cryptography). It is done by the backend. So only the backend can make sure that the token is written by it and has valid information in it.

There is no standard for token authentication as such, there are best practices.

Options:

  1. backend generates token (access token - AT) and puts it in httpOnly cookie. The frontend does not have access to the token, the browser just returns the cookie. This method is undeservedly rarely used, but it is quite reliable. The frontend removes all the hassles of manipulating AT.

Scenario:

  • Front logs in, gets user data from the backend and works with it. When receiving any 401 request, it directs the user to the login form and resets the user data to zero.
  • Back at login creates httpOnly cookie with token with certain lifetime. At each request it checks the token, determines the person to whom this token is issued and his rights, and then decides whether to allow access. If the lifetime of the token has expired, it returns 401.

2 The backend generates an access token (AT) and passes it to the front. The front saves it and sends it back each time. In essence the same as in the first case, plus unnecessary steps and the possibility of losing the token through XSS.

  1. two tokens are used - short-lived access token (AT) and longer-lived refresh token (RT) sent in httpOnly cookie. AT works as in the second case. When its lifetime expires, the backend checks the RT and if it is valid, refreshes the AT. RT expires - the user is sent to re-login.
Where to store access token on the frontend?

In 95% of cases in LocalStorage. You should also duplicate it in a regular JS variable because, for example, some iPhones have a power-saving policy enabled when the battery is low, which can result in localStorage being constantly cleared by the browser.

What is oAuth and SSO?

oAuth - Login "via Google". Also when, for example, a user has the option on your site to save something to Google Drive. In order to get permission for your site to work with the user's Google Drive account, you ask the user to allow your site to access their account via Google. So we have four parts - Google (the authorization center), the third-party resource (Google Drive), your site, and the user

SSO - single sign-on - a user logs in to a certain company's portal once, and then has transparent access to its different services. For example, login to GMail and access to Google Drive, Google Photo and so on.

Does authentication via JWT give security?

Security is a very complex concept, and JWT authentication is just one of its elements. For critical applications, it is possible to capture the user's browser fingerprint and force the user to re-login as soon as they change. Same with IP. In this way you can fight AT theft. Also set very small AT lifetime if RT is used. But the main security measures are not related to authentication, but to constant monitoring of the system for suspicious actions.

Authorization

If it is necessary to give users different levels of access to site resources, it is common to use either RBAC (Role-based access control) or PBA (Policy-Based Authorization).

In the first case, users are assigned to roles (admin, manager, user) and the level of access is determined by the role.

In the second case, it is possible to set permissions for each user individually for any action in a more granular way.

It should be understood that on the front authorization is done for convenience (the user does not see the sections of the site that are forbidden to him), but the back is responsible for security - he must check each time whether the user has the right to access the requested resource, even if on the front it should not be visible. It is not very difficult to break the front end.

- +
Skip to content

Authentication and authorization

What is authentication and authorization

Roughly speaking:

Authentication is when the system verifies that it is John Doe who logged in, for example, by checking his username and password

Authorization - when the system verifies that the user requesting the resource/action has the right to access it. For example, a senior manager has the right to delete an item in the admin, but a simple manager does not.

How to make an authentication system on the site

For SPA the most common way - on JWT tokens. There are many variants of this, depending on the requirements of the security level (John Doe's personal blog with guest comments and online store with deposits and bonuses - two big differences).

JWT is a standard for writing a small amount of information into a string (token) and signing it (cryptography). It is done by the backend. So only the backend can make sure that the token is written by it and has valid information in it.

There is no standard for token authentication as such, there are best practices.

Options:

  1. backend generates token (access token - AT) and puts it in httpOnly cookie. The frontend does not have access to the token, the browser just returns the cookie. This method is undeservedly rarely used, but it is quite reliable. The frontend removes all the hassles of manipulating AT.

Scenario:

  • Front logs in, gets user data from the backend and works with it. When receiving any 401 request, it directs the user to the login form and resets the user data to zero.
  • Back at login creates httpOnly cookie with token with certain lifetime. At each request it checks the token, determines the person to whom this token is issued and his rights, and then decides whether to allow access. If the lifetime of the token has expired, it returns 401.

2 The backend generates an access token (AT) and passes it to the front. The front saves it and sends it back each time. In essence the same as in the first case, plus unnecessary steps and the possibility of losing the token through XSS.

  1. two tokens are used - short-lived access token (AT) and longer-lived refresh token (RT) sent in httpOnly cookie. AT works as in the second case. When its lifetime expires, the backend checks the RT and if it is valid, refreshes the AT. RT expires - the user is sent to re-login.
Where to store access token on the frontend?

In 95% of cases in LocalStorage. You should also duplicate it in a regular JS variable because, for example, some iPhones have a power-saving policy enabled when the battery is low, which can result in localStorage being constantly cleared by the browser.

What is oAuth and SSO?

oAuth - Login "via Google". Also when, for example, a user has the option on your site to save something to Google Drive. In order to get permission for your site to work with the user's Google Drive account, you ask the user to allow your site to access their account via Google. So we have four parts - Google (the authorization center), the third-party resource (Google Drive), your site, and the user

SSO - single sign-on - a user logs in to a certain company's portal once, and then has transparent access to its different services. For example, login to GMail and access to Google Drive, Google Photo and so on.

Does authentication via JWT give security?

Security is a very complex concept, and JWT authentication is just one of its elements. For critical applications, it is possible to capture the user's browser fingerprint and force the user to re-login as soon as they change. Same with IP. In this way you can fight AT theft. Also set very small AT lifetime if RT is used. But the main security measures are not related to authentication, but to constant monitoring of the system for suspicious actions.

Authorization

If it is necessary to give users different levels of access to site resources, it is common to use either RBAC (Role-based access control) or PBA (Policy-Based Authorization).

In the first case, users are assigned to roles (admin, manager, user) and the level of access is determined by the role.

In the second case, it is possible to set permissions for each user individually for any action in a more granular way.

It should be understood that on the front authorization is done for convenience (the user does not see the sections of the site that are forbidden to him), but the back is responsible for security - he must check each time whether the user has the right to access the requested resource, even if on the front it should not be visible. It is not very difficult to break the front end.

+ \ No newline at end of file diff --git a/en/backend/backend.html b/en/backend/backend.html index ef7340056..b61be6036 100644 --- a/en/backend/backend.html +++ b/en/backend/backend.html @@ -6,13 +6,13 @@ Options to leverage your backend for frontenders | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

Options to leverage your backend for frontenders

How to test frontend on backend data?

There are many services that offer their API with different data for testing or full-fledged work

For example, jsonplaceholder.typicode.com.

Google "json placeholder".

Are there any free open APIs with real data?

Plenty. For example, here

Google public api.

You can also poke around relevant sites in DevTools / Network for endpoints with data in a suitable format

How to make your own backend?

If you already know JavaScript, it should not be a problem to install and run Node.js with an HTTP server.

Node.js is not a very popular server for the Internet, but for a small project will do.

In absolute terms, it is easiest to install and start working with Nginx and PHP

Most major cloud providers (Amazon, Google, Oracle, Microsoft) provide free plans with the ability to run a virtual server. By putting what is required there, you can want both a back end and a front end bundle.

What is BaaS (Backend as a service)?

It is a cloud solution where the backend in the form of a database and its access interface, and possibly the ability to use some logic, is provided by a BaaS provider.

For example, a NoSQL database and access to it is provided by Google using its Firebase service

Alternative with PostgreSQL - Supabase

That is, your frontend will access their specific endpoints and get the services you need - for example, to save and query data in the database.

Both services provide the ability to do authentication on the site. Thus, a front-end developer can write an application using such a service without writing his own backend code and without placing it somewhere on a server on the Internet.

These services have free plans with rather large resources.

Business logic on BaaS

Most BaaS services provide not only CRUD access to their database, but also the ability to write custom logic in the form of Cloud Functions in Firebase, Edge Functions in Supabase, AWS Lambda in Amazon, etc.

These functions are code in some programming language that will be called when a certain backend endpoint is accessed.

In case a frontend developer wants to make a full-fledged application, but doesn't want to bother with a standalone backend, this is a pretty good and very economical solution.

How Edge/Cloud/Lamda features work

It's basically a backend in miniature

Your front end accesses a given endpoint (via the BaaS provider's BaaS service API gateway) - e.g. /api/somefunc

There lies a script written by you in js or other programming language, which is executed, has access to the database and can do other things (load data from the internet for example).

Then the script generates a result and returns it to your front end.

- +
Skip to content

Options to leverage your backend for frontenders

How to test frontend on backend data?

There are many services that offer their API with different data for testing or full-fledged work

For example, jsonplaceholder.typicode.com.

Google "json placeholder".

Are there any free open APIs with real data?

Plenty. For example, here

Google public api.

You can also poke around relevant sites in DevTools / Network for endpoints with data in a suitable format

How to make your own backend?

If you already know JavaScript, it should not be a problem to install and run Node.js with an HTTP server.

Node.js is not a very popular server for the Internet, but for a small project will do.

In absolute terms, it is easiest to install and start working with Nginx and PHP

Most major cloud providers (Amazon, Google, Oracle, Microsoft) provide free plans with the ability to run a virtual server. By putting what is required there, you can want both a back end and a front end bundle.

What is BaaS (Backend as a service)?

It is a cloud solution where the backend in the form of a database and its access interface, and possibly the ability to use some logic, is provided by a BaaS provider.

For example, a NoSQL database and access to it is provided by Google using its Firebase service

Alternative with PostgreSQL - Supabase

That is, your frontend will access their specific endpoints and get the services you need - for example, to save and query data in the database.

Both services provide the ability to do authentication on the site. Thus, a front-end developer can write an application using such a service without writing his own backend code and without placing it somewhere on a server on the Internet.

These services have free plans with rather large resources.

Business logic on BaaS

Most BaaS services provide not only CRUD access to their database, but also the ability to write custom logic in the form of Cloud Functions in Firebase, Edge Functions in Supabase, AWS Lambda in Amazon, etc.

These functions are code in some programming language that will be called when a certain backend endpoint is accessed.

In case a frontend developer wants to make a full-fledged application, but doesn't want to bother with a standalone backend, this is a pretty good and very economical solution.

How Edge/Cloud/Lamda features work

It's basically a backend in miniature

Your front end accesses a given endpoint (via the BaaS provider's BaaS service API gateway) - e.g. /api/somefunc

There lies a script written by you in js or other programming language, which is executed, has access to the database and can do other things (load data from the internet for example).

Then the script generates a result and returns it to your front end.

+ \ No newline at end of file diff --git a/en/backend/cors.html b/en/backend/cors.html index a631d6583..3901b413a 100644 --- a/en/backend/cors.html +++ b/en/backend/cors.html @@ -6,13 +6,13 @@ CORS | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@
Skip to content

CORS

What are CORS?

Roughly speaking, CORS is used to protect your backend from outside requests by setting special HTTP headers.

More specifically, CORS (Cross-Origin Resource Sharing) is a standard that allows web pages to access objects from third-party Internet resources. A third-party resource is any Internet resource that differs from the requested one in protocol, domain, or port.

Access is granted by specialized requests. The Internet resource that receives the request contains a list of trusted sources that are allowed to access the objects. The source page of the request is granted access if it is on the list of trusted sources. The "*" mask is used to grant access to all third-party web pages.

Accordingly, only the backend can do all this, and it is configured on the backend. The specific solution depends on the backend language, the framework used, and even the webserver.

CORS working principle

When creating an HTTP cross-request, the client browser adds a domain declaration of the web page initiating the request. The domain is declared in the Origin section.

For example, the page https://client-1.com/page.html requests data from the page https://server-site.com/info. An example of a request from a client browser using CORS methods is shown below:

GET /info HTTP/1.1
 Host: server-site.com
-Origin: client-1.com

If the server at www.server-site.com allows the request source page to access data from the domain, the Access-Control-Allow-Origin line with the name of the declared domain will appear in its response to the request:

Access-Control-Allow-Origin: https://client-1.com

If the server to which access is requested does not add the specified string to the response, the client browser will return an error code instead of the info file data.

If the server allows pages from any third-party domain to access the resource, the response will contain the "*" mask.

Access-Control-Allow-Origin: *

If the server allows access not to all but a few third-party clients, the server response contains the names of all these domains printed as separate lines or separated by spaces:

Access-Control-Allow-Origin: https://client-1.com https://client-2.com https://client-3.com
Problems with CORS

CORS problems can occur only when a resource is accessed by a browser, not by a separate program like Postman or other backend.

As a temporary solution CORS proxy, which becomes an intermediary between frontend and backend, or browser extensions can help during development.

Vite provides such proxy for development.

- +Origin: client-1.com

If the server at www.server-site.com allows the request source page to access data from the domain, the Access-Control-Allow-Origin line with the name of the declared domain will appear in its response to the request:

Access-Control-Allow-Origin: https://client-1.com

If the server to which access is requested does not add the specified string to the response, the client browser will return an error code instead of the info file data.

If the server allows pages from any third-party domain to access the resource, the response will contain the "*" mask.

Access-Control-Allow-Origin: *

If the server allows access not to all but a few third-party clients, the server response contains the names of all these domains printed as separate lines or separated by spaces:

Access-Control-Allow-Origin: https://client-1.com https://client-2.com https://client-3.com
Problems with CORS

CORS problems can occur only when a resource is accessed by a browser, not by a separate program like Postman or other backend.

As a temporary solution CORS proxy, which becomes an intermediary between frontend and backend, or browser extensions can help during development.

Vite provides such proxy for development.

+ \ No newline at end of file diff --git a/en/backend/protocols.html b/en/backend/protocols.html index 930886017..35bc9c2e8 100644 --- a/en/backend/protocols.html +++ b/en/backend/protocols.html @@ -6,13 +6,13 @@ Protocols. To REST or not to REST? | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

Protocols. To REST or not to REST?

REST, WebSockets, JSON-RPC

For a beginner, of course, it's more convenient to start with REST - requests to the server in any way.

For the more experienced, especially fullstackers, I suggest to take a look at JSON-RPC.

WebSockets is convenient because it gives bidirectional communication (the server can send messages to the client), but requires special software on the backend.

Why JSON-RPC?

After an experience with JSON-RPC, communication with back end is usually never the same again.

It gives order, clarity, rigor and at the same time flexibility. It greatly simplifies and makes code understandable both on the frontend and backend.

In addition, JSON-RPC is the de facto standard for Web 3.0 communications.

A variant of TypeScript implementation of frontend api service on JSON-RPC - here.

When using JSON-RPC, switching to WebSockets or other transport protocols will not cause any difficulties due to the unification of the message format.

How to organize reconnection of WebSocket connection on the front?

You need an Event bus, which will work as a proxy for incoming messages.

You can use mitt.

What is GraphQL?

A complex thing, an attempt to translate SQL query language for client-server queries on the web.

It has a rather specific use, mostly with third-party data providers via APIs.

For your own fullstack application - 99% unnecessary solution.

- +
Skip to content

Protocols. To REST or not to REST?

REST, WebSockets, JSON-RPC

For a beginner, of course, it's more convenient to start with REST - requests to the server in any way.

For the more experienced, especially fullstackers, I suggest to take a look at JSON-RPC.

WebSockets is convenient because it gives bidirectional communication (the server can send messages to the client), but requires special software on the backend.

Why JSON-RPC?

After an experience with JSON-RPC, communication with back end is usually never the same again.

It gives order, clarity, rigor and at the same time flexibility. It greatly simplifies and makes code understandable both on the frontend and backend.

In addition, JSON-RPC is the de facto standard for Web 3.0 communications.

A variant of TypeScript implementation of frontend api service on JSON-RPC - here.

When using JSON-RPC, switching to WebSockets or other transport protocols will not cause any difficulties due to the unification of the message format.

How to organize reconnection of WebSocket connection on the front?

You need an Event bus, which will work as a proxy for incoming messages.

You can use mitt.

What is GraphQL?

A complex thing, an attempt to translate SQL query language for client-server queries on the web.

It has a rather specific use, mostly with third-party data providers via APIs.

For your own fullstack application - 99% unnecessary solution.

+ \ No newline at end of file diff --git a/en/deployment/ci-cd.html b/en/deployment/ci-cd.html index 2e51b9fff..fea54e080 100644 --- a/en/deployment/ci-cd.html +++ b/en/deployment/ci-cd.html @@ -6,13 +6,13 @@ CI/CD | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

CI/CD

What is CI/CD?

CI/CD (Continuous Integration, Continuous Delivery) is a technology for automating the build, testing and deployment of a project under development.

In other words, the process of transition of code lying in a repository into a working product on a cloud server, for example.

CI/CD elements are useful not only for a devops engineer, but also for a simple front-end developer, allowing him after git commit/push code changes to get a working site, for example, on GitHub Pages without additional actions.

Main tools for CI/CD: GitHub Actions, GitLab CI/CD, Jenkins, Trevis

- +
Skip to content

CI/CD

What is CI/CD?

CI/CD (Continuous Integration, Continuous Delivery) is a technology for automating the build, testing and deployment of a project under development.

In other words, the process of transition of code lying in a repository into a working product on a cloud server, for example.

CI/CD elements are useful not only for a devops engineer, but also for a simple front-end developer, allowing him after git commit/push code changes to get a working site, for example, on GitHub Pages without additional actions.

Main tools for CI/CD: GitHub Actions, GitLab CI/CD, Jenkins, Trevis

+ \ No newline at end of file diff --git a/en/deployment/docker.html b/en/deployment/docker.html index 3ae832296..e8ca1c73b 100644 --- a/en/deployment/docker.html +++ b/en/deployment/docker.html @@ -6,13 +6,13 @@ Docker | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ - - + + \ No newline at end of file diff --git a/en/deployment/github-actions.html b/en/deployment/github-actions.html index ad47c4684..b632a1da5 100644 --- a/en/deployment/github-actions.html +++ b/en/deployment/github-actions.html @@ -6,13 +6,13 @@ Github Actions | Vue FAQ - + - + - + - + @@ -186,8 +186,8 @@ backups_remove_count=5; cd $backup_dir && rm -rf work logs images; cd $root_backup_dir && dirs_to_be_removed=`ls -dt "$root_backup_dir/"* | tail -n +$backups_remove_count`; - rm $dirs_to_be_removed -rf;
- + rm $dirs_to_be_removed -rf;
+ \ No newline at end of file diff --git a/en/deployment/hosting.html b/en/deployment/hosting.html index 5f51882ba..8efbf4ce0 100644 --- a/en/deployment/hosting.html +++ b/en/deployment/hosting.html @@ -6,13 +6,13 @@ Hosting | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

Hosting

Where to host a website?

After building a frontend project, you get a set of html/css/js/jpeg and other static files that need to be hosted on some webserver for your website to be online.

Hosting options with free plans:

Also, many cloud providers (Amazon, Google, Oracle, Microsoft) provide free plans with the ability to get a virtual server on which you can install a webserver (Nginx, Apache) and your website yourself. In this case, the backend can also be placed on it.

Domain

Buying a domain is now very easy and inexpensive (from $1 per year), so it is recommended to do so. GitHub Pages and other hosting providers allow you to connect a custom domain to your site. Subdomains are convenient for organizing development environments:

  • dev.website.com
  • dev-api.website.com
  • website.com
  • api.website.com
  • docs.website.com
SSL certificates

Modern browsers require a website to be accessible via HTTPS protocol. This requires an SSL certificate for your domain. Hosting providers like Firebase or Github Pages will provide you with the certificate themselves. If you host your site yourself on a cloud server, you can generate the certificate using CertBot software.

- +
Skip to content

Hosting

Where to host a website?

After building a frontend project, you get a set of html/css/js/jpeg and other static files that need to be hosted on some webserver for your website to be online.

Hosting options with free plans:

Also, many cloud providers (Amazon, Google, Oracle, Microsoft) provide free plans with the ability to get a virtual server on which you can install a webserver (Nginx, Apache) and your website yourself. In this case, the backend can also be placed on it.

Domain

Buying a domain is now very easy and inexpensive (from $1 per year), so it is recommended to do so. GitHub Pages and other hosting providers allow you to connect a custom domain to your site. Subdomains are convenient for organizing development environments:

  • dev.website.com
  • dev-api.website.com
  • website.com
  • api.website.com
  • docs.website.com
SSL certificates

Modern browsers require a website to be accessible via HTTPS protocol. This requires an SSL certificate for your domain. Hosting providers like Firebase or Github Pages will provide you with the certificate themselves. If you host your site yourself on a cloud server, you can generate the certificate using CertBot software.

+ \ No newline at end of file diff --git a/en/development/architectural-patterns.html b/en/development/architectural-patterns.html index 80a05de90..6121eff50 100644 --- a/en/development/architectural-patterns.html +++ b/en/development/architectural-patterns.html @@ -6,13 +6,13 @@ Architectural patterns | Vue FAQ - + - + - + - + @@ -110,8 +110,8 @@ startLoading(); product.value = await api.products.product(props.productId); -stopLoading();

This example uses useId, which appeared in Vue 3.5

For earlier versions, you can use any function to generate a unique id.

- +stopLoading();

This example uses useId, which appeared in Vue 3.5

For earlier versions, you can use any function to generate a unique id.

+ \ No newline at end of file diff --git a/en/development/assets.html b/en/development/assets.html index 5d9ea5bf9..0ba2d5d81 100644 --- a/en/development/assets.html +++ b/en/development/assets.html @@ -6,13 +6,13 @@ Application Resources | Vue FAQ - + - + - + - + @@ -148,8 +148,8 @@ import json from "./example.json"; // import a root field as named exports - helps with tree-shaking! -import { field } from "./example.json";
- +import { field } from "./example.json";
+ \ No newline at end of file diff --git a/en/development/building.html b/en/development/building.html index d4656bc9a..d86b8df8d 100644 --- a/en/development/building.html +++ b/en/development/building.html @@ -6,13 +6,13 @@ Create and build an application | Vue FAQ - + - + - + - + @@ -58,8 +58,8 @@ } }

You may also need to set alias in ESLint config for plugins like eslint-plugin-import and eslint-import-resolver-typescript if they are used.

How can I see how much my js bundle has different libraries?

rollup-plugin-visualizer is a great tool to do this

Generating statistics from the command line works like this (one of the options):

sh
npx vite-bundle-visualizer
 npx vite-bundle-visualizer -t list
-npx vite-bundle-visualizer -t raw-data
- +npx vite-bundle-visualizer -t raw-data + \ No newline at end of file diff --git a/en/development/ide.html b/en/development/ide.html index 14cf4ca64..71c29e562 100644 --- a/en/development/ide.html +++ b/en/development/ide.html @@ -6,13 +6,13 @@ Configuring the IDE | Vue FAQ - + - + - + - + @@ -280,8 +280,8 @@ "vite.config.*": "*.env, .babelrc*, .codecov, .cssnanorc*, .env.*, .envrc, .htmlnanorc*, .lighthouserc.*, .mocha*, .postcssrc*, .terserrc*, api-extractor.json, ava.config.*, babel.config.*, contentlayer.config.*, cssnano.config.*, cypress.*, env.d.ts, formkit.config.*, formulate.config.*, histoire.config.*, htmlnanorc.*, jasmine.*, jest.config.*, jsconfig.*, karma*, lighthouserc.*, playwright.config.*, postcss.config.*, puppeteer.config.*, rspack.config.*, svgo.config.*, tailwind.config.*, tsconfig.*, tsdoc.*, uno.config.*, unocss.config.*, vitest.config.*, webpack.config.*, windi.config.*", "vue.config.*": "*.env, .babelrc*, .codecov, .cssnanorc*, .env.*, .envrc, .htmlnanorc*, .lighthouserc.*, .mocha*, .postcssrc*, .terserrc*, api-extractor.json, ava.config.*, babel.config.*, contentlayer.config.*, cssnano.config.*, cypress.*, env.d.ts, formkit.config.*, formulate.config.*, histoire.config.*, htmlnanorc.*, jasmine.*, jest.config.*, jsconfig.*, karma*, lighthouserc.*, playwright.config.*, postcss.config.*, puppeteer.config.*, rspack.config.*, svgo.config.*, tailwind.config.*, tsconfig.*, tsdoc.*, uno.config.*, unocss.config.*, vitest.config.*, webpack.config.*, windi.config.*" } -}
ESlint

Linter is a coder's right hand. It checks for errors, formats code, and does many other useful things

At the same time, it is quite a nontrivial task to set up ESlint well. There are a lot of plugins for it, some of them are outdated, many of them conflict with each other.

That's why for not very sophisticated ESlint connoisseurs it's best to use a ready-made solution. The second person in Vue ecosystem Antony Fu shared his config.

To install it, just add the @antfu/eslint-config package to package.json devDependencies. If you look inside, there are dozens of picked packages and configurations.

Unfortunately, formatting the <style> block in .vue files doesn't work, so you have to enable Prettier in manual mode as well.

Online sandboxes for Vue 3
More programs useful in web development
What computer configuration is suitable for frontend development?

At least 16GB RAM and a good (fast) SSD disk, everything else is secondary, including the processor. Spend your money on a quality second 22+ inch monitor, a comfortable keyboard and mouse.

For fullstack development (and not only) it is convenient to have a mini-PC where you can transfer database, webserver and other [micro]services. It can work as a server, without a monitor and keyboard.

You can also put a source code repository on it. From the main machine the connection goes to VS Code via SSH Remote connection. As a result, both back and front end (Node.js) run on your miniserver, and your laptop no longer gets warm and tries to take off with the help of frantically spinning fans.

It is much more productive (MySQL, webservers, Docker run faster and more reliably on Linux, as does Node.js), comfortable and quieter. The cooler of the mini-PC in normal mode is turned on only for a couple of seconds when the OS is booting.

- +}
ESlint

Linter is a coder's right hand. It checks for errors, formats code, and does many other useful things

At the same time, it is quite a nontrivial task to set up ESlint well. There are a lot of plugins for it, some of them are outdated, many of them conflict with each other.

That's why for not very sophisticated ESlint connoisseurs it's best to use a ready-made solution. The second person in Vue ecosystem Antony Fu shared his config.

To install it, just add the @antfu/eslint-config package to package.json devDependencies. If you look inside, there are dozens of picked packages and configurations.

Unfortunately, formatting the <style> block in .vue files doesn't work, so you have to enable Prettier in manual mode as well.

Online sandboxes for Vue 3
More programs useful in web development
What computer configuration is suitable for frontend development?

At least 16GB RAM and a good (fast) SSD disk, everything else is secondary, including the processor. Spend your money on a quality second 22+ inch monitor, a comfortable keyboard and mouse.

For fullstack development (and not only) it is convenient to have a mini-PC where you can transfer database, webserver and other [micro]services. It can work as a server, without a monitor and keyboard.

You can also put a source code repository on it. From the main machine the connection goes to VS Code via SSH Remote connection. As a result, both back and front end (Node.js) run on your miniserver, and your laptop no longer gets warm and tries to take off with the help of frantically spinning fans.

It is much more productive (MySQL, webservers, Docker run faster and more reliably on Linux, as does Node.js), comfortable and quieter. The cooler of the mini-PC in normal mode is turned on only for a couple of seconds when the OS is booting.

+ \ No newline at end of file diff --git a/en/development/libraries.html b/en/development/libraries.html index 28b19c2b2..8d0b5ca5a 100644 --- a/en/development/libraries.html +++ b/en/development/libraries.html @@ -6,13 +6,13 @@ Tell me a handy library | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

Tell me a handy library

For working with dates

moment is irretrievably obsolete. There's day.js and day-fnc.js.

However, in 95% of cases the capabilities of the standard JavaScript Intl package are sufficient

For UI components

There are quite a few CSS and UI libraries out there

Here in this article is a small overview of their heavyweight nature

Quasar and PrimeVue look solid.

- +
Skip to content

Tell me a handy library

For working with dates

moment is irretrievably obsolete. There's day.js and day-fnc.js.

However, in 95% of cases the capabilities of the standard JavaScript Intl package are sufficient

For UI components

There are quite a few CSS and UI libraries out there

Here in this article is a small overview of their heavyweight nature

Quasar and PrimeVue look solid.

+ \ No newline at end of file diff --git a/en/development/misc.html b/en/development/misc.html index f55f6b5dc..60ae7fbf9 100644 --- a/en/development/misc.html +++ b/en/development/misc.html @@ -6,13 +6,13 @@ Helpful hints | Vue FAQ - + - + - + - + @@ -43,8 +43,8 @@ delete window.devtoolsFormatters; // will print out data without custom formatting console.log(obj); -window.devtoolsFormatters = old; - +window.devtoolsFormatters = old; + \ No newline at end of file diff --git a/en/development/project-structure.html b/en/development/project-structure.html index 3d438a064..fa4ef3756 100644 --- a/en/development/project-structure.html +++ b/en/development/project-structure.html @@ -6,14 +6,14 @@ Vue 3 project structure | Vue FAQ - + - + - + - + @@ -188,8 +188,8 @@ |-- /store | |-- index.js |-- /tests -| |-- featureTests.spec.js
Microfrontends

Microfrontends take the idea of Microservices and apply it to the front-end part of web apps. This means different teams can work on different sections of a web app without interfering with each other. Each section, or "Microfrontend," works on its own and can change independently. Here's a basic overview for an SPA. Please note that I won't delve into the details of how Microfrontends actually work in this blog post.

  • Application Shell: This is the main controller that handles the basic layout and routing for the site. It connects all the Microfrontends together.
  • Decomposed UIs: Each Microfrontend focuses on a specific part of the application. They can be developed with different technologies and updated separately.

image

The main advantage is that Microfrontends let teams update parts of the app without waiting for others, which can speed up development. However, this setup can make the app more complex to manage and keep consistent.

Useful Resources:

This strategy is ideal for large, complex projects with multiple development teams. Each team can focus on specific business requirements without affecting the work of others, potentially using the technology that best suits their part of the application.

Comparison table
ApproachDescriptionProsCons
Flat ApproachSimple structure, ideal for small projects or proof of concept.- Easy to implement
- Minimal setup
- Not scalable
- Clutters as project grows
Atomic DesignHierarchical structure based on component complexity.- Scalable
- Organized
- Reusable components
- Overhead in managing layers
- Complex setup
ModulesModular structure that encapsulates features.- Scalable
- Encapsulated features
- Potential duplication
- Can become complex
Feature-Sliced DesignOrganizes project into functional layers and slices.- High cohesion
- Clear feature separation
- Initial complexity
- Requires thorough planning
MicrofrontendsEach part of the application is deployed separately.- Independent deployments
- Scalable
- High complexity
- Coordination needed between teams

(с) source

Suitable architecture for Vue 3 web application

The most suitable architecture for a Vue 3 application is Modular.

Initially, the application is divided into logical modules that are loosely related to each other. For example, for an online store, it can be a product catalog module, a module of a single product, a user account module etc.

In addition, there is a shell module - what is sometimes referred to as app shell. A template with a header, footer, side menu and main window. It is wise to put utilities and resources used throughout the application into this module - for example, api, useI18n, BaseButtonandstringHelpers.

Each module has its own components, composables, assets, utils; probably api, routes, views, layouts.

Within the components directory of each module, a hierarchy of components like in atomic design can be arranged if necessary

Loose coupling allows each module to be developed fairly independently, which greatly increases the likelihood of project success.

image

Atomic design and FSD were not invented for Vue, but for the frontend in general, and as a consequence contain excessive complexity and inconvenience.

- +| |-- featureTests.spec.js
Microfrontends

Microfrontends take the idea of Microservices and apply it to the front-end part of web apps. This means different teams can work on different sections of a web app without interfering with each other. Each section, or "Microfrontend," works on its own and can change independently. Here's a basic overview for an SPA. Please note that I won't delve into the details of how Microfrontends actually work in this blog post.

  • Application Shell: This is the main controller that handles the basic layout and routing for the site. It connects all the Microfrontends together.
  • Decomposed UIs: Each Microfrontend focuses on a specific part of the application. They can be developed with different technologies and updated separately.

image

The main advantage is that Microfrontends let teams update parts of the app without waiting for others, which can speed up development. However, this setup can make the app more complex to manage and keep consistent.

Useful Resources:

This strategy is ideal for large, complex projects with multiple development teams. Each team can focus on specific business requirements without affecting the work of others, potentially using the technology that best suits their part of the application.

Comparison table
ApproachDescriptionProsCons
Flat ApproachSimple structure, ideal for small projects or proof of concept.- Easy to implement
- Minimal setup
- Not scalable
- Clutters as project grows
Atomic DesignHierarchical structure based on component complexity.- Scalable
- Organized
- Reusable components
- Overhead in managing layers
- Complex setup
ModulesModular structure that encapsulates features.- Scalable
- Encapsulated features
- Potential duplication
- Can become complex
Feature-Sliced DesignOrganizes project into functional layers and slices.- High cohesion
- Clear feature separation
- Initial complexity
- Requires thorough planning
MicrofrontendsEach part of the application is deployed separately.- Independent deployments
- Scalable
- High complexity
- Coordination needed between teams

(с) source

Suitable architecture for Vue 3 web application

The most suitable architecture for a Vue 3 application is Modular.

Initially, the application is divided into logical modules that are loosely related to each other. For example, for an online store, it can be a product catalog module, a module of a single product, a user account module etc.

In addition, there is a shell module - what is sometimes referred to as app shell. A template with a header, footer, side menu and main window. It is wise to put utilities and resources used throughout the application into this module - for example, api, useI18n, BaseButtonandstringHelpers.

Each module has its own components, composables, assets, utils; probably api, routes, views, layouts.

Within the components directory of each module, a hierarchy of components like in atomic design can be arranged if necessary

Loose coupling allows each module to be developed fairly independently, which greatly increases the likelihood of project success.

image

Atomic design and FSD were not invented for Vue, but for the frontend in general, and as a consequence contain excessive complexity and inconvenience.

+ \ No newline at end of file diff --git a/en/development/stores.html b/en/development/stores.html index b5e92626d..62e80c011 100644 --- a/en/development/stores.html +++ b/en/development/stores.html @@ -6,13 +6,13 @@ State management in Vue 3 | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

State management in Vue 3

Why State management?

Sometimes in an application you need to pass reactive data or a function from one component to another, and these components do not belong to the same hierarchy. Props/emits or provide/inject mechanisms are not suitable for this. That's why Vue 2 introduced Vuex, a state management library that allows you to store a reactive state and provide access to it from anywhere.

A frontend state management library is usually called a "store".

How can I pass reactive data from one component to another in Vue 3?
  • If one component is a direct descendant of another - props and events
  • If one component is an indirect descendant of another - provide/inject or prop/event dribbling (bad practice).
  • If they are in different branches of the hierarchy - store or Vue 3 ref/reactive

Vue 3 ref/reactive is when you define and export a reactive variable in a separate js module:

export const userLoggedIn = ref(false);

It is then available throughout the application via the import of this module.

However, it is architecturally a bad idea to just share a variable. Usually there is business logic around this variable, which should be made available.

For example, authentication requires not only the fact that the user is logged in, but also the associated methods - login(), logout(), register(), isAuthenticated(). Synthesizing some kind of state and the accompanying business logic yielded the so-called composable functions in Vue 3.

In some sense, it is an analog of an object in OOP.

What is a store on the frontend?

A Store (like Pinia) is an entity holding state and business logic that isn't bound to your Component tree. In other words, it hosts global state. It's a bit like a component that is always there and that everybody can read off and write to.

Store (such as Pinia) is an entity that contains state and business logic that is not bound to your Component tree. In other words, this is where the global state resides. It's sort of like a component that is always present, and that anyone can read and write to.

_ Official Pinia documentation.

Looks like a very unfortunate, ambiguous and confusing definition.

From the perspective of a non-frontend developer (basically any language other than JavaScript, plus partially JavaScript), the analog of a construct called store would be a database - SQL, NoSQL or caching Redis. There are analogs of state and getters (View in SQL database). But in 99.99% of cases, there will be no business logic in the database except for data consistency constraints (e.g., unique or foreign keys).

From a non-frontend developer's perspective, frontend stores are just objects / stateful services built on a singleton pattern. Calling them "global stores" is at least illogical.

It's likely that this happened historically. First there was one Vuex, it was one store and global. Then it had modules. Then Pinia modules became independent and spread all over the application. As a result, the application has a bunch of small local (by area of use) storages, each of which considers itself global, even if it is used by 2-3 components out of 1000 on the project, and even if this storage has 1% of state and 99% of business and related logic.

In this respect, using composable functions for the same purpose (an entity holding state and business logic that isn't bound to your Component tree) - is much more logical. And they should be called useAuth or useAuthService instead of useAuthStore.

Vuex or Pinia?

In Vue 3, Pinia has become the main external library for managing the stack. Unlike Vuex, it has TypeScript support, is more convenient, and naturally takes advantage of Vue 3.

Vuex is officially deprecated

Pinia or Composables functions?

In Vue 3 there is something that makes a separate library for managing the state unnecessary. Namely, reactive types Ref and Reactive that can be used outside of a component. It became possible to make your own storages on the basis of composable functions and connect them in any component.

The main declared difference of Pinia is integration with Vue DevTools, plugins and SSR support. However, whether he needs one or the other, each developer decides for himself. It is quite comfortable to work with composables in DevTools.

Composable function, in its turn, can have both global and local (variables are declared inside the function) states. This can be useful in certain cases - you can create several instances of composable functions, each with its own state. For example, when you have several news widgets on your site, differing only by news category.

Also, from a functional point of view, composable functions have full access to the entire Vue Reactivity API, which makes them more flexible than Pinia.

Composable functions with global states do not work in SSR mode.

As for performance, according to tests Pinia is about 1.5 times slower on Reactive changes than Vue 3, and 20 times slower on Ref. This is because Ref (primitive types) in Pinia becomes a part of Reactive. Setup stores does not solve this problem.

You should also keep in mind that any dependency (in this case the Pinia library) can bring problems similar to the "RIP Vuex" situation when the library dies, becomes obsolete, is no longer supported, or vulnerabilities are found in it. Composable features, on the other hand, look like a thorough innovation to the Vue framework.

Here is an interesting discussion about it on /r/vuejs. Code example from Reddit user @ferferga shows how to use TypeScript classes with private modifiers, getters, setters (no .value) and first class type support as composable stores (which would be impossible with Pinia). Using TS classes here might not be a good practice but demonstrates flexibility and power of the Composition API.

Also here is a lifehack for Devtools from user @coolcosmos: I just use refs. The cons is you lose the Devtools but in dev mode I import all my refs and pass them to pinia so I have all the pros and no cons.

How to split logic between component and composable functions?

It is convenient to think of it as MVC pattern, where the role of View (and partially Controller) is played by components, which are mainly responsible for visualization, and the logic and model (Model and partially Controller) fall on composable functions and their reactive state.

To understand what to put in a composable and what to put in a component (which may consist of several components), imagine that you change the component to another one - displaying your data in some other way. Ideally, the model (composite) should remain the same, you are only rewriting the component that has logic responsible for displaying it.

At the same time, the logic (Controller) can be shared between the component and the composable. For example, validation of form data can happen in the component (checking that the field is populated), in the component using a third-party utility (checking that the password is "complex"), and in the composable (checking that username is unique)

- +
Skip to content

State management in Vue 3

Why State management?

Sometimes in an application you need to pass reactive data or a function from one component to another, and these components do not belong to the same hierarchy. Props/emits or provide/inject mechanisms are not suitable for this. That's why Vue 2 introduced Vuex, a state management library that allows you to store a reactive state and provide access to it from anywhere.

A frontend state management library is usually called a "store".

How can I pass reactive data from one component to another in Vue 3?
  • If one component is a direct descendant of another - props and events
  • If one component is an indirect descendant of another - provide/inject or prop/event dribbling (bad practice).
  • If they are in different branches of the hierarchy - store or Vue 3 ref/reactive

Vue 3 ref/reactive is when you define and export a reactive variable in a separate js module:

export const userLoggedIn = ref(false);

It is then available throughout the application via the import of this module.

However, it is architecturally a bad idea to just share a variable. Usually there is business logic around this variable, which should be made available.

For example, authentication requires not only the fact that the user is logged in, but also the associated methods - login(), logout(), register(), isAuthenticated(). Synthesizing some kind of state and the accompanying business logic yielded the so-called composable functions in Vue 3.

In some sense, it is an analog of an object in OOP.

What is a store on the frontend?

A Store (like Pinia) is an entity holding state and business logic that isn't bound to your Component tree. In other words, it hosts global state. It's a bit like a component that is always there and that everybody can read off and write to.

Store (such as Pinia) is an entity that contains state and business logic that is not bound to your Component tree. In other words, this is where the global state resides. It's sort of like a component that is always present, and that anyone can read and write to.

_ Official Pinia documentation.

Looks like a very unfortunate, ambiguous and confusing definition.

From the perspective of a non-frontend developer (basically any language other than JavaScript, plus partially JavaScript), the analog of a construct called store would be a database - SQL, NoSQL or caching Redis. There are analogs of state and getters (View in SQL database). But in 99.99% of cases, there will be no business logic in the database except for data consistency constraints (e.g., unique or foreign keys).

From a non-frontend developer's perspective, frontend stores are just objects / stateful services built on a singleton pattern. Calling them "global stores" is at least illogical.

It's likely that this happened historically. First there was one Vuex, it was one store and global. Then it had modules. Then Pinia modules became independent and spread all over the application. As a result, the application has a bunch of small local (by area of use) storages, each of which considers itself global, even if it is used by 2-3 components out of 1000 on the project, and even if this storage has 1% of state and 99% of business and related logic.

In this respect, using composable functions for the same purpose (an entity holding state and business logic that isn't bound to your Component tree) - is much more logical. And they should be called useAuth or useAuthService instead of useAuthStore.

Vuex or Pinia?

In Vue 3, Pinia has become the main external library for managing the stack. Unlike Vuex, it has TypeScript support, is more convenient, and naturally takes advantage of Vue 3.

Vuex is officially deprecated

Pinia or Composables functions?

In Vue 3 there is something that makes a separate library for managing the state unnecessary. Namely, reactive types Ref and Reactive that can be used outside of a component. It became possible to make your own storages on the basis of composable functions and connect them in any component.

The main declared difference of Pinia is integration with Vue DevTools, plugins and SSR support. However, whether he needs one or the other, each developer decides for himself. It is quite comfortable to work with composables in DevTools.

Composable function, in its turn, can have both global and local (variables are declared inside the function) states. This can be useful in certain cases - you can create several instances of composable functions, each with its own state. For example, when you have several news widgets on your site, differing only by news category.

Also, from a functional point of view, composable functions have full access to the entire Vue Reactivity API, which makes them more flexible than Pinia.

Composable functions with global states do not work in SSR mode.

As for performance, according to tests Pinia is about 1.5 times slower on Reactive changes than Vue 3, and 20 times slower on Ref. This is because Ref (primitive types) in Pinia becomes a part of Reactive. Setup stores does not solve this problem.

You should also keep in mind that any dependency (in this case the Pinia library) can bring problems similar to the "RIP Vuex" situation when the library dies, becomes obsolete, is no longer supported, or vulnerabilities are found in it. Composable features, on the other hand, look like a thorough innovation to the Vue framework.

Here is an interesting discussion about it on /r/vuejs. Code example from Reddit user @ferferga shows how to use TypeScript classes with private modifiers, getters, setters (no .value) and first class type support as composable stores (which would be impossible with Pinia). Using TS classes here might not be a good practice but demonstrates flexibility and power of the Composition API.

Also here is a lifehack for Devtools from user @coolcosmos: I just use refs. The cons is you lose the Devtools but in dev mode I import all my refs and pass them to pinia so I have all the pros and no cons.

How to split logic between component and composable functions?

It is convenient to think of it as MVC pattern, where the role of View (and partially Controller) is played by components, which are mainly responsible for visualization, and the logic and model (Model and partially Controller) fall on composable functions and their reactive state.

To understand what to put in a composable and what to put in a component (which may consist of several components), imagine that you change the component to another one - displaying your data in some other way. Ideally, the model (composite) should remain the same, you are only rewriting the component that has logic responsible for displaying it.

At the same time, the logic (Controller) can be shared between the component and the composable. For example, validation of form data can happen in the component (checking that the field is populated), in the component using a third-party utility (checking that the password is "complex"), and in the composable (checking that username is unique)

+ \ No newline at end of file diff --git a/en/development/testing.html b/en/development/testing.html index 3cdf58bc7..55d8f2a62 100644 --- a/en/development/testing.html +++ b/en/development/testing.html @@ -6,13 +6,13 @@ Testing | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

Testing

Do I need testing on the frontend?

There are several types of tests, among them are unit tests and integration (e2e) tests

Unit testing in Vue is done by Vitest, Jest.

You should be more careful with front-end testing, as writing and rewriting tests can often take time comparable to the development itself. At the same time, the usefulness of these tests will be highly questionable. Their expediency appears on large projects with a large number of developers. There unit tests also take time but reduce the probability that someone will mess something up. At the same time, unit tests are not the most necessary ingredient for quick MVP creation at a startup.

Frontend development in this aspect is very different from backend development, where unit tests are really useful.

Good article on this topic - Unit Test Fetish

What are e2e tests?

On the front end, especially for a web application that is already in production and needs to be updated from time to time, e2e tests are important.

e2e (end-to-end) testing is a software testing process that simulates real user actions at the interface level.

In this case, a browser will be launched (usually in headless mode - without UI), and it will use the scripts written to check the work of the site - the presence of elements on the page, the possibility of login, etc.

The main tools for e2e testing are Cypress, WebdriverIO.

In CI/CD projects, running tests is one of the main moments along with linting and build.

- +
Skip to content

Testing

Do I need testing on the frontend?

There are several types of tests, among them are unit tests and integration (e2e) tests

Unit testing in Vue is done by Vitest, Jest.

You should be more careful with front-end testing, as writing and rewriting tests can often take time comparable to the development itself. At the same time, the usefulness of these tests will be highly questionable. Their expediency appears on large projects with a large number of developers. There unit tests also take time but reduce the probability that someone will mess something up. At the same time, unit tests are not the most necessary ingredient for quick MVP creation at a startup.

Frontend development in this aspect is very different from backend development, where unit tests are really useful.

Good article on this topic - Unit Test Fetish

What are e2e tests?

On the front end, especially for a web application that is already in production and needs to be updated from time to time, e2e tests are important.

e2e (end-to-end) testing is a software testing process that simulates real user actions at the interface level.

In this case, a browser will be launched (usually in headless mode - without UI), and it will use the scripts written to check the work of the site - the presence of elements on the page, the possibility of login, etc.

The main tools for e2e testing are Cypress, WebdriverIO.

In CI/CD projects, running tests is one of the main moments along with linting and build.

+ \ No newline at end of file diff --git a/en/frontend/about-frameworks.html b/en/frontend/about-frameworks.html index 516bb321a..2d9126edf 100644 --- a/en/frontend/about-frameworks.html +++ b/en/frontend/about-frameworks.html @@ -6,13 +6,13 @@ About frontend frameworks | Vue FAQ - + - + - + - + @@ -39,8 +39,8 @@ someArr = [...someArr, newItem]; // Vue -someArr.value.push(newItem.value);

Using ES6 native Proxy object avoids decomposition and creating an intermediate array. Also it should more performant.

- +someArr.value.push(newItem.value);

Using ES6 native Proxy object avoids decomposition and creating an intermediate array. Also it should more performant.

+ \ No newline at end of file diff --git a/en/frontend/architecture.html b/en/frontend/architecture.html index be2bc17e0..0ebf752c5 100644 --- a/en/frontend/architecture.html +++ b/en/frontend/architecture.html @@ -6,13 +6,13 @@ Frontend application architecture | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

Frontend application architecture

What is a good web application architecture

There are different theoretical definitions and justifications for this concept, but roughly speaking it is the following.

Let's say you are developing a project, already at the final stage. A customer comes to you and says something like: I want to add a shadow to all buttons, I want to change the UI library, we decided to support multiple languages, we decided to replace this module with another, we need to make more detailed adaptability for different resolutions, we decided to add themes, we are changing the provider of payment processing services, we have an increasing number of users / the site is slowing down / need to speed it up, need to increase the level of security of the site, we took a middle programmer, bring him up to speed quickly, and let him add functionality or fix the b

A good frontend application architecture allows you to accomplish all of this most efficiently with the least amount of effort.

OOP on the frontend

Many people coming from development in object-oriented languages try to use OOP concepts on the frontend and program with classes, inheritance, polymorphism and other things.

This is a mistake. The main computations on the front end are related to UI - displaying data, handling user interaction. Class systems and microservices are simply not needed on them. Of course, you can create a basic button, wrap it in two custom components and consider it inheritance, but you can't do it in code. That's why you have to learn to think in other categories - components, composable functions, js modules. And use your JavaScript power, not trying to stretch it on OOP.

At the same time, a good analogy of an object with a global ("static") and local ("object") state is a composable function. It can be used in certain situations.

Multithreading and asynchronicity

Multithreading is when a programmer can create a separate thread and run his specific code in it. For example, you can create two threads, one in an infinite loop outputs "Thread A" to the console and the other "Thread B". These strings will alternate in the output. You can prioritize the threads, and then the thread with priority 3 will output messages 3 times more often than the thread with priority 1.

These two threads should be executed simultaneously, but this is conditional. Because if there are 10 threads and the processor is dual-core with two threads per core, it is physically impossible to execute more than 4 simultaneous threads. That's why threads are divided into pieces of code and they are executed one by one - this is called concurrency.

In the JavaScript world, threads can become queued at the JS runtime, OS, CPU level. Common desktop applications (for example, IDEs) can also have good support for parallelization on multi-core processors - and then they use CPUs as efficiently as possible, or load only one core. In the latter case, upgrading to a newer multi-core CPU will do almost nothing if the old and the new one have approximately the same frequency.

Asynchronicity is when there is some non-blocking function whose exact execution time is unknown. And the programmer can specify the code to be executed after this function is executed (pass a callback). Promises and async/await are non-trivial but still just convenient wrappers over this logic.

So, with asynchronicity, there is usually some border function that depends on external circumstances (fetch, nextTick, fs.readdir, setTimeout). Its "pseudo-parallel" execution in one thread together with the main code is provided by the Event Loop mechanism.

Thus, these are completely different things both in purpose and usage. asynchronicity in JavaScript is realized through promises and async/await, multithreading or its similarity is realized by rantime (Web workers, worker_threads).

Asynchronicity is needed to communicate with the "outside world", including browser rendering. Multithreading allows to separate resource-intensive computations (as well as network requests) into separate threads (Web workers), which reduces the load on the main thread, which is responsible for rendering. This has a favorable effect on the responsiveness of your UI.

Useful tips
Avoid dependencies

If there is a possibility not to introduce a new dependency (not to plug in a new npm package) - don't do it. It may save you a bit of time, but a third-party library will sooner or later become obsolete, no longer supported, and may have a vulnerability. Besides, it increases the size of your bundle, which directly affects the performance of your application. Tree shaking is good in advertising, but it doesn't always work in reality.

If you need, for example, the debounce function, don't hurry to plug it together with some library. Google its implementation and copy 15 lines of code and make your own function.


Use wrappers over components of UI libraries and third-party utilities

If you use components of some UI library, don't use them directly - make wrappers for them. For example, BaseButton or BaseInput. This will make styling the components much easier, and will also make it much easier to switch to another library, or replace them with your own components.

The same goes for utilities.


Regular refactoring

Do code refactoring from time to time, moving components and modules to where they should logically be, renaming them, and structuring and improving the code itself. This is good for both the code and your professional growth.


Use CSS3

Try to use pure CSS3 for adaptability. Do not be tied to columnar models of CSS and UI libraries, unless it is a "done and forgotten, let the customer continue to suffer with it" project.

Spend a couple of days to learn Flexbox and you will be able to layout on it faster and better than on any Tailwind.


Use modern standards and language features

For example, HTML5 semantic elements - aside, header, section, article, details, etc.

CSS3 - Flexbox and Grid, Container query


Document the project

Draw use-case and other diagrams, describe the main functionality of the project and important details of its implementation - this will at least raise your level as a software developer.

VitePress is a very handy tool for technical documentation.

- +
Skip to content

Frontend application architecture

What is a good web application architecture

There are different theoretical definitions and justifications for this concept, but roughly speaking it is the following.

Let's say you are developing a project, already at the final stage. A customer comes to you and says something like: I want to add a shadow to all buttons, I want to change the UI library, we decided to support multiple languages, we decided to replace this module with another, we need to make more detailed adaptability for different resolutions, we decided to add themes, we are changing the provider of payment processing services, we have an increasing number of users / the site is slowing down / need to speed it up, need to increase the level of security of the site, we took a middle programmer, bring him up to speed quickly, and let him add functionality or fix the b

A good frontend application architecture allows you to accomplish all of this most efficiently with the least amount of effort.

OOP on the frontend

Many people coming from development in object-oriented languages try to use OOP concepts on the frontend and program with classes, inheritance, polymorphism and other things.

This is a mistake. The main computations on the front end are related to UI - displaying data, handling user interaction. Class systems and microservices are simply not needed on them. Of course, you can create a basic button, wrap it in two custom components and consider it inheritance, but you can't do it in code. That's why you have to learn to think in other categories - components, composable functions, js modules. And use your JavaScript power, not trying to stretch it on OOP.

At the same time, a good analogy of an object with a global ("static") and local ("object") state is a composable function. It can be used in certain situations.

Multithreading and asynchronicity

Multithreading is when a programmer can create a separate thread and run his specific code in it. For example, you can create two threads, one in an infinite loop outputs "Thread A" to the console and the other "Thread B". These strings will alternate in the output. You can prioritize the threads, and then the thread with priority 3 will output messages 3 times more often than the thread with priority 1.

These two threads should be executed simultaneously, but this is conditional. Because if there are 10 threads and the processor is dual-core with two threads per core, it is physically impossible to execute more than 4 simultaneous threads. That's why threads are divided into pieces of code and they are executed one by one - this is called concurrency.

In the JavaScript world, threads can become queued at the JS runtime, OS, CPU level. Common desktop applications (for example, IDEs) can also have good support for parallelization on multi-core processors - and then they use CPUs as efficiently as possible, or load only one core. In the latter case, upgrading to a newer multi-core CPU will do almost nothing if the old and the new one have approximately the same frequency.

Asynchronicity is when there is some non-blocking function whose exact execution time is unknown. And the programmer can specify the code to be executed after this function is executed (pass a callback). Promises and async/await are non-trivial but still just convenient wrappers over this logic.

So, with asynchronicity, there is usually some border function that depends on external circumstances (fetch, nextTick, fs.readdir, setTimeout). Its "pseudo-parallel" execution in one thread together with the main code is provided by the Event Loop mechanism.

Thus, these are completely different things both in purpose and usage. asynchronicity in JavaScript is realized through promises and async/await, multithreading or its similarity is realized by rantime (Web workers, worker_threads).

Asynchronicity is needed to communicate with the "outside world", including browser rendering. Multithreading allows to separate resource-intensive computations (as well as network requests) into separate threads (Web workers), which reduces the load on the main thread, which is responsible for rendering. This has a favorable effect on the responsiveness of your UI.

Useful tips
Avoid dependencies

If there is a possibility not to introduce a new dependency (not to plug in a new npm package) - don't do it. It may save you a bit of time, but a third-party library will sooner or later become obsolete, no longer supported, and may have a vulnerability. Besides, it increases the size of your bundle, which directly affects the performance of your application. Tree shaking is good in advertising, but it doesn't always work in reality.

If you need, for example, the debounce function, don't hurry to plug it together with some library. Google its implementation and copy 15 lines of code and make your own function.


Use wrappers over components of UI libraries and third-party utilities

If you use components of some UI library, don't use them directly - make wrappers for them. For example, BaseButton or BaseInput. This will make styling the components much easier, and will also make it much easier to switch to another library, or replace them with your own components.

The same goes for utilities.


Regular refactoring

Do code refactoring from time to time, moving components and modules to where they should logically be, renaming them, and structuring and improving the code itself. This is good for both the code and your professional growth.


Use CSS3

Try to use pure CSS3 for adaptability. Do not be tied to columnar models of CSS and UI libraries, unless it is a "done and forgotten, let the customer continue to suffer with it" project.

Spend a couple of days to learn Flexbox and you will be able to layout on it faster and better than on any Tailwind.


Use modern standards and language features

For example, HTML5 semantic elements - aside, header, section, article, details, etc.

CSS3 - Flexbox and Grid, Container query


Document the project

Draw use-case and other diagrams, describe the main functionality of the project and important details of its implementation - this will at least raise your level as a software developer.

VitePress is a very handy tool for technical documentation.

+ \ No newline at end of file diff --git a/en/frontend/css-ui-libs.html b/en/frontend/css-ui-libs.html index 1aa59724c..4d93aa8f8 100644 --- a/en/frontend/css-ui-libs.html +++ b/en/frontend/css-ui-libs.html @@ -6,13 +6,13 @@ CSS and UI libraries | Vue FAQ - + - + - + - + @@ -35,8 +35,8 @@
Skip to content

CSS and UI libraries

What are CSS and UI libraries?

CSS and UI libraries either provide their own or help you create custom UI components like Button or Select? which can speed up your development.

CSS libraries do not contain JavaScript code and therefore have limitations for complex components like Select or Dropdown.

There is a separate type of Headless-UI libraries that offer components without stylized visualization - only component logic and Accessibility requirements. The developer needs to add CSS styles himself.

Pros and cons of UI libraries?

Pros: shortens the development, if you use it on the project as much as possible, brings a unified style to the application

Cons: as any dependency can become obsolete (Vuetify 2 tragedy), adds weight to the final bundle.

How to reduce dependency on foreign libraries?

Wrap up UI library components in your own custom components.

vue
<!-- BaseButton.vue -->
 <template>
   <QButton ... />
-</template>

and use BaseButton in your code. This way it will be much easier for you to upgrade, replace the library or replace this component with a self-designed one. And even just change the styles of the component.

Layout and adaptability of pages by means of CSS and UI libraries

Using the column system and other functionality of CSS and UI libraries like the popular Tailwind is convenient for small projects and sometimes speeds up layout, but very much worsens the quality of the code as a whole, including its maintainability and extensibility. It's as if the world went back to the days of IE6, when all styles and JavaScript were also located in tag attributes, and the whole evolution of CSS into a clear, convenient, beautiful hierarchical class model was for nothing, just like the division of the web into document (template), presentation layer (CSS styles) and logic (JavaScript).

The web is full of articles why an approach like Tailwind is a bad thing. We can only note that with proper skill, layout on pure CSS3 is also fast and much more convenient and pleasant in terms of DX than through CSS and UI libraries.

Quote

Good developers know the reasons why standards, patterns and good practices have become the way they are.

Bad developers stick to whatever new trend that might save them some learning curve.

- +</template>

and use BaseButton in your code. This way it will be much easier for you to upgrade, replace the library or replace this component with a self-designed one. And even just change the styles of the component.

Layout and adaptability of pages by means of CSS and UI libraries

Using the column system and other functionality of CSS and UI libraries like the popular Tailwind is convenient for small projects and sometimes speeds up layout, but very much worsens the quality of the code as a whole, including its maintainability and extensibility. It's as if the world went back to the days of IE6, when all styles and JavaScript were also located in tag attributes, and the whole evolution of CSS into a clear, convenient, beautiful hierarchical class model was for nothing, just like the division of the web into document (template), presentation layer (CSS styles) and logic (JavaScript).

The web is full of articles why an approach like Tailwind is a bad thing. We can only note that with proper skill, layout on pure CSS3 is also fast and much more convenient and pleasant in terms of DX than through CSS and UI libraries.

Quote

Good developers know the reasons why standards, patterns and good practices have become the way they are.

Bad developers stick to whatever new trend that might save them some learning curve.

+ \ No newline at end of file diff --git a/en/frontend/learning.html b/en/frontend/learning.html index a6cad8c78..0ed1c32a7 100644 --- a/en/frontend/learning.html +++ b/en/frontend/learning.html @@ -6,13 +6,13 @@ Learning Vue | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

Learning Vue

Sources of information on Vue

For some reason, it is believed that there are only two ways to get knowledge on frontend - Vue documentation and tutorial videos from YouTube and all kinds of courses.

But documentation is not a textbook, but a reference book, and it is very difficult to separate grains from chaff on YouTube. I met some useful videos, but all of them were intended for developers who already know Vue quite well and showed some new or non-standard moments.


The main teacher should be a book that teaches, not a reference book.

An excellent Vue tutorial in English is the May 2023 Vue.js 3 Design Patterns and Best Practices. You can register on oReilly and read for 10 days for free. Even download it. In spite of the title, the book teaches programming, and from a fairly basic level.

Code examples from the book are in the public repository and well worth studying.

Note

We can draw an analogy between a good developer and a driver:

  1. learning the basics of driving, traffic rules and the internal combustion engine - Vue documentation and JavaScript specification
  2. Practical driving training at a driving school - good textbooks like "Vue.js 3 Design Patterns and Best Practices"
  3. Real driving experience - commercial development experience
  4. Extreme driving courses, put a glass of water on the hood and drive a twenty year old car with a manual transmission through broken streets - quality open source projects and certifications

It is impossible to become a good developer/driver both without 1. and only with 1. Training videos from the internet (both paid and free) can both be part of 4. and be completely useless and even harmful (very often), depending on their quality and the motivation of the student.

Vue 2 or Vue 3?

Vue 3.
Composition API.

If you need Vue 2 to support an existing project, you'll know the answer to that question yourself.

The difference between Vue 2 and Vue 3 is big. It's not a case of learning the previous version beforehand to better and more easily understand the next one.

Do I need to know JavaScript beforehand?

Absolutely, at least an intermediate level. If not, I would suggest taking a short javascript course first, so that the person knows about the document object, knows how to handle array methods and is not too afraid of promises. Also, HTML and CSS at least at a basic level.

Here is an easy to read book - "Morgan N. - JavaScript for Kids. A Programming Self-Tutorial - 2016. Before you start learning Vue, it is advisable to understand 70% of the first part as well as paragraphs 10 and 12.


tip

Also an absolutely necessary pre-skill is the ability to google.

Is there a certification for Vue?

Vue.js Certification

Vue Style Guide

Be sure to check out the Vue Style Guide and try to follow its best practices when writing code.

Go back to this source from time to time and improve your code.

ESlint also helps you keep your code in line with best practices.

Do I need a mentor?

A mentor is useful for both a beginner and an experienced developer. You can uselessly kill two days to solve a problem that can be explained in 20 minutes by a more experienced person. And this two-day "experience" will never be useful again.

In companies, this role is usually played by more competent and friendly colleagues.

There are services like Solvery on the Internet that can help in this matter.

I still want video

There are quality ones from Vue Mastery, but most are outdated.

What else to look at besides Vue? React?

You can do React if you have a real option to use that knowledge, but it's much better to expand your developer horizons. Try to write a simple API on the backend. The easiest and most convenient language for this is PHP, but you can also use Node.js or Python. Try JSON-RPC and WebSockets transport protocols. Upload your application to GitHub Pages or another similar service, experiment with GitHub Actions - they help a lot with deploy automation and CI/CD in general. Work with Cloud providers (many offer free resources), set up a virtual server. Register a domain, make a product finished site - even if it's just your resume site or something basic on VitePress (used by this site). Work with FireStore and open APIs for various data. Check out Swagger. Learn SQL, install MySQL and play around with it, or do it on SupaBase. Understanding how data is stored and processed on the backend will help a lot in choosing the right strategies on the frontend.

Study how the modern internet works and what technologies and best practices are prevalent on it now.

- +
Skip to content

Learning Vue

Sources of information on Vue

For some reason, it is believed that there are only two ways to get knowledge on frontend - Vue documentation and tutorial videos from YouTube and all kinds of courses.

But documentation is not a textbook, but a reference book, and it is very difficult to separate grains from chaff on YouTube. I met some useful videos, but all of them were intended for developers who already know Vue quite well and showed some new or non-standard moments.


The main teacher should be a book that teaches, not a reference book.

An excellent Vue tutorial in English is the May 2023 Vue.js 3 Design Patterns and Best Practices. You can register on oReilly and read for 10 days for free. Even download it. In spite of the title, the book teaches programming, and from a fairly basic level.

Code examples from the book are in the public repository and well worth studying.

Note

We can draw an analogy between a good developer and a driver:

  1. learning the basics of driving, traffic rules and the internal combustion engine - Vue documentation and JavaScript specification
  2. Practical driving training at a driving school - good textbooks like "Vue.js 3 Design Patterns and Best Practices"
  3. Real driving experience - commercial development experience
  4. Extreme driving courses, put a glass of water on the hood and drive a twenty year old car with a manual transmission through broken streets - quality open source projects and certifications

It is impossible to become a good developer/driver both without 1. and only with 1. Training videos from the internet (both paid and free) can both be part of 4. and be completely useless and even harmful (very often), depending on their quality and the motivation of the student.

Vue 2 or Vue 3?

Vue 3.
Composition API.

If you need Vue 2 to support an existing project, you'll know the answer to that question yourself.

The difference between Vue 2 and Vue 3 is big. It's not a case of learning the previous version beforehand to better and more easily understand the next one.

Do I need to know JavaScript beforehand?

Absolutely, at least an intermediate level. If not, I would suggest taking a short javascript course first, so that the person knows about the document object, knows how to handle array methods and is not too afraid of promises. Also, HTML and CSS at least at a basic level.

Here is an easy to read book - "Morgan N. - JavaScript for Kids. A Programming Self-Tutorial - 2016. Before you start learning Vue, it is advisable to understand 70% of the first part as well as paragraphs 10 and 12.


tip

Also an absolutely necessary pre-skill is the ability to google.

Is there a certification for Vue?

Vue.js Certification

Vue Style Guide

Be sure to check out the Vue Style Guide and try to follow its best practices when writing code.

Go back to this source from time to time and improve your code.

ESlint also helps you keep your code in line with best practices.

Do I need a mentor?

A mentor is useful for both a beginner and an experienced developer. You can uselessly kill two days to solve a problem that can be explained in 20 minutes by a more experienced person. And this two-day "experience" will never be useful again.

In companies, this role is usually played by more competent and friendly colleagues.

There are services like Solvery on the Internet that can help in this matter.

I still want video

There are quality ones from Vue Mastery, but most are outdated.

What else to look at besides Vue? React?

You can do React if you have a real option to use that knowledge, but it's much better to expand your developer horizons. Try to write a simple API on the backend. The easiest and most convenient language for this is PHP, but you can also use Node.js or Python. Try JSON-RPC and WebSockets transport protocols. Upload your application to GitHub Pages or another similar service, experiment with GitHub Actions - they help a lot with deploy automation and CI/CD in general. Work with Cloud providers (many offer free resources), set up a virtual server. Register a domain, make a product finished site - even if it's just your resume site or something basic on VitePress (used by this site). Work with FireStore and open APIs for various data. Check out Swagger. Learn SQL, install MySQL and play around with it, or do it on SupaBase. Understanding how data is stored and processed on the backend will help a lot in choosing the right strategies on the frontend.

Study how the modern internet works and what technologies and best practices are prevalent on it now.

+ \ No newline at end of file diff --git a/en/frontend/spa-pwa-ssr-ssg.html b/en/frontend/spa-pwa-ssr-ssg.html index 07a507a6e..29528aff6 100644 --- a/en/frontend/spa-pwa-ssr-ssg.html +++ b/en/frontend/spa-pwa-ssr-ssg.html @@ -6,14 +6,14 @@ SPA, PWA, SSG, SSR and SEO | Vue FAQ - + - + - + - + @@ -33,8 +33,8 @@ -
Skip to content

SPA, PWA, SSG, SSR and SEO

Web 1.0 -> Web 2.0

First there was static HTML and browsers showed it. A little bit later a little bit of JavaScript was invented to process forms and do a little animation. Then CSS came along and everyone saw that it was beautiful. Then someone proposed the idea of JSON for data format, and then Microsoft gave the world XMLHttpRequest, and JavaScript was allowed to send and receive data from the server.

That's how SPA was born.

SPA

SPA (Single Page Application) works like a regular desktop/mobile application - when first accessing the server, it receives the shell necessary to display the site, and then sends data to/from the server, usually in JSON format. This is much more efficient than the way when with each request from the server came a new HTML page with all the resources.

For the user UX increases significantly.

spa-vs-mpa

PWA

PWA (Progressive Web Application) is another step to improve user experience and make web applications as close as possible to native web applications.

With PWA, two elements are added to the SPA:

  1. Manifest. A text file with the properties of the application. With this, the icon of the web application can be set as well as native applications to the home screen of the smartphone. In addition, when PWA is launched, it may not show browser elements and appear to be a normal application.

  2. Service worker. This is a layer in the browser between the server and the browser itself that allows you to do managed caching. In other words, store the app with all the resources on the smartphone/computer so that when you start it, it will run immediately. If you don't need data from the server, the app can run offline (e.g. Notes).

You can read more about PWA on the website created by the Chrome team - https://web.dev/

Upgrading SPA to PWA is very small in labor cost, but very significant in benefit. Developing SPA and not making it a PWA is like renting a luxury hotel room but sleeping on a mat at its entrance in the corridor because it's too lazy to walk to the bedroom.

PWA -> Workbox and vite-plugin-pwa

Manifest and Service worker are so simple that creating a wrapper over SW - Workbox, and a plugin for Vite - vite-plugin-pwa is not logical. You get several times more code, need to load additional dependencies and understand wrapper configurations. Simple things have been made complex.

It is better to use Manifest and Service worker as they were created originally, and write these two simple files using templates from the specifications.

SSG

SSG (Static Site Generation) is an approach where the content of a website is pre-generated into html files, which are then distributed from the server.

Immediately suitable for indexing by search engines.

SSR

SSR (Server Side Rendering), a way of generating html on the server side, when generation occurs at the moment of request. After the client requests a page, the server executes API requests on its side and then generates the html page. Accordingly, the server needs a Node.js server, which is quite a heavy load on the hardware.

In addition, there are a lot of restrictions when writing code and using certain JavaScript and Vue features. As Google writes regarding SSR - "A rehydration problem: one app for the price of two".

SEO optimization

In order for a search engine to index a page on your site, it must receive HTML with content (text, images, video) when accessing it. With SPA sites, where content is loaded dynamically by JavaScript, this is often not possible.

The most popular and inefficient method to bypass this is to use SSR (SSG is suitable for simple structured sites without backend, like documentation).

Google allows you to see how your site looks/indexed by its crawler, which somehow still works with scripts, so first check if you need to get complicated at all.

If you find problems, you can use dynamic rendering

dynamic-rendering

The point is to handle requests from normal users and search bots differently and give them different pages. For users - SPA, for search bots - pages generated on the fly or in advance. Distribution can be handled by a webserver or an entry point to your site (index.php instead of index.html).

The above picture implies some kind of Prerenderer (which are also available as a third-party service or their own solution), but in most cases it is much easier to generate HTML page for the bot directly.

That is, for example, for a product page in an online store it can be its text description with pictures and customer reviews in any HTML formatting. For this purpose it is enough a script on PHP/Express/Python, etc. in 100-200 lines, which is much less labor-intensive than SSR solutions, and also reduces the requirements in the server "hardware" by orders of magnitude (the output can be cached in a static HTML file).

When the actual content (text, images) of such a page coincides with the content of SPA in the browser, Google does not consider the simplified version for its bot as a deception. This method has been around since before the advent of SSRs. Verified by many years of use.

PageSpeed and other performance tests

PageSpeed and similar tools are very useful in identifying unoptimized places in your web application, but it is not quite right for SPA and PWA.

More precisely, some of its metrics don't take into account UX as a whole. A well-built PWA, when first downloaded and installed, will of course lose by FCP metrics to its SSR counterpart, but after placing all its resources locally on the client's browser, no SSR will come close to it in terms of speed and user comfort, not to mention other features like offline operation and installation as a native application.

SSR can probably be useful for some exceptional cases, but in general it looks like a dead-end branch in frontend development.

- +
Skip to content

SPA, PWA, SSG, SSR and SEO

Web 1.0 -> Web 2.0

First there was static HTML and browsers showed it. A little bit later a little bit of JavaScript was invented to process forms and do a little animation. Then CSS came along and everyone saw that it was beautiful. Then someone proposed the idea of JSON for data format, and then Microsoft gave the world XMLHttpRequest, and JavaScript was allowed to send and receive data from the server.

That's how SPA was born.

SPA

SPA (Single Page Application) works like a regular desktop/mobile application - when first accessing the server, it receives the shell necessary to display the site, and then sends data to/from the server, usually in JSON format. This is much more efficient than the way when with each request from the server came a new HTML page with all the resources.

For the user UX increases significantly.

spa-vs-mpa

PWA

PWA (Progressive Web Application) is another step to improve user experience and make web applications as close as possible to native web applications.

With PWA, two elements are added to the SPA:

  1. Manifest. A text file with the properties of the application. With this, the icon of the web application can be set as well as native applications to the home screen of the smartphone. In addition, when PWA is launched, it may not show browser elements and appear to be a normal application.

  2. Service worker. This is a layer in the browser between the server and the browser itself that allows you to do managed caching. In other words, store the app with all the resources on the smartphone/computer so that when you start it, it will run immediately. If you don't need data from the server, the app can run offline (e.g. Notes).

You can read more about PWA on the website created by the Chrome team - https://web.dev/

Upgrading SPA to PWA is very small in labor cost, but very significant in benefit. Developing SPA and not making it a PWA is like renting a luxury hotel room but sleeping on a mat at its entrance in the corridor because it's too lazy to walk to the bedroom.

PWA -> Workbox and vite-plugin-pwa

Manifest and Service worker are so simple that creating a wrapper over SW - Workbox, and a plugin for Vite - vite-plugin-pwa is not logical. You get several times more code, need to load additional dependencies and understand wrapper configurations. Simple things have been made complex.

It is better to use Manifest and Service worker as they were created originally, and write these two simple files using templates from the specifications.

SSG

SSG (Static Site Generation) is an approach where the content of a website is pre-generated into html files, which are then distributed from the server.

Immediately suitable for indexing by search engines.

SSR

SSR (Server Side Rendering), a way of generating html on the server side, when generation occurs at the moment of request. After the client requests a page, the server executes API requests on its side and then generates the html page. Accordingly, the server needs a Node.js server, which is quite a heavy load on the hardware.

In addition, there are a lot of restrictions when writing code and using certain JavaScript and Vue features. As Google writes regarding SSR - "A rehydration problem: one app for the price of two".

SEO optimization

In order for a search engine to index a page on your site, it must receive HTML with content (text, images, video) when accessing it. With SPA sites, where content is loaded dynamically by JavaScript, this is often not possible.

The most popular and inefficient method to bypass this is to use SSR (SSG is suitable for simple structured sites without backend, like documentation).

Google allows you to see how your site looks/indexed by its crawler, which somehow still works with scripts, so first check if you need to get complicated at all.

If you find problems, you can use dynamic rendering

dynamic-rendering

The point is to handle requests from normal users and search bots differently and give them different pages. For users - SPA, for search bots - pages generated on the fly or in advance. Distribution can be handled by a webserver or an entry point to your site (index.php instead of index.html).

The above picture implies some kind of Prerenderer (which are also available as a third-party service or their own solution), but in most cases it is much easier to generate HTML page for the bot directly.

That is, for example, for a product page in an online store it can be its text description with pictures and customer reviews in any HTML formatting. For this purpose it is enough a script on PHP/Express/Python, etc. in 100-200 lines, which is much less labor-intensive than SSR solutions, and also reduces the requirements in the server "hardware" by orders of magnitude (the output can be cached in a static HTML file).

When the actual content (text, images) of such a page coincides with the content of SPA in the browser, Google does not consider the simplified version for its bot as a deception. This method has been around since before the advent of SSRs. Verified by many years of use.

PageSpeed and other performance tests

PageSpeed and similar tools are very useful in identifying unoptimized places in your web application, but it is not quite right for SPA and PWA.

More precisely, some of its metrics don't take into account UX as a whole. A well-built PWA, when first downloaded and installed, will of course lose by FCP metrics to its SSR counterpart, but after placing all its resources locally on the client's browser, no SSR will come close to it in terms of speed and user comfort, not to mention other features like offline operation and installation as a native application.

SSR can probably be useful for some exceptional cases, but in general it looks like a dead-end branch in frontend development.

+ \ No newline at end of file diff --git a/en/index.html b/en/index.html index 939214346..542193cb4 100644 --- a/en/index.html +++ b/en/index.html @@ -6,13 +6,13 @@ Vue FAQ - + - + - + - + @@ -33,7 +33,7 @@
Skip to content

Vue FAQ

Vue JavaScript framework FAQ

Most frequently asked questions about Vue.js

Vue FAQ
- + \ No newline at end of file diff --git a/en/misc/CHANGELOG.html b/en/misc/CHANGELOG.html index 17f7da8d6..8bcb80500 100644 --- a/en/misc/CHANGELOG.html +++ b/en/misc/CHANGELOG.html @@ -6,14 +6,14 @@ Vue FAQ - + - + - + - + @@ -33,8 +33,8 @@ - - + + \ No newline at end of file diff --git a/en/misc/cheat-sheets.html b/en/misc/cheat-sheets.html index 159d9a4dc..ddb68cb21 100644 --- a/en/misc/cheat-sheets.html +++ b/en/misc/cheat-sheets.html @@ -6,13 +6,13 @@ Cheat Sheet | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ - - + + \ No newline at end of file diff --git a/en/misc/contribute.html b/en/misc/contribute.html index 5fb08e785..f465f93ae 100644 --- a/en/misc/contribute.html +++ b/en/misc/contribute.html @@ -6,13 +6,13 @@ Contribute to the development of this resource | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ - - + + \ No newline at end of file diff --git a/en/misc/glossary.html b/en/misc/glossary.html index eaa4f0db9..33e66c9cb 100644 --- a/en/misc/glossary.html +++ b/en/misc/glossary.html @@ -6,13 +6,13 @@ Glossary and abbreviations | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

Glossary and abbreviations

  • DX (developer experience) - developer's experience, the convenience of working on the application. This includes everything - code quality, IDE usability, competent project architecture, commenting, documentation quality, using proven and best practices on the project, etc.
  • UX (user experience) - user's experience. Its general impression of the user's convenience in working with the site/application.
  • UI (user interface) - website/application design from the point of view of visual aesthetics and style.
  • SW (service worker) - Service Worker (PWA element)
  • AT (access token) - JWT authentication token
  • RT (refresh token) - JWT authentication token
- +
Skip to content

Glossary and abbreviations

  • DX (developer experience) - developer's experience, the convenience of working on the application. This includes everything - code quality, IDE usability, competent project architecture, commenting, documentation quality, using proven and best practices on the project, etc.
  • UX (user experience) - user's experience. Its general impression of the user's convenience in working with the site/application.
  • UI (user interface) - website/application design from the point of view of visual aesthetics and style.
  • SW (service worker) - Service Worker (PWA element)
  • AT (access token) - JWT authentication token
  • RT (refresh token) - JWT authentication token
+ \ No newline at end of file diff --git a/en/misc/introduction.html b/en/misc/introduction.html index f7b16383c..6d8cf1949 100644 --- a/en/misc/introduction.html +++ b/en/misc/introduction.html @@ -6,13 +6,13 @@ Introduction | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

Introduction

This FAQ (Frequently Asked Questions) is created on the most frequently touched topics in Reddit r/vuejs/ and Telegram chat @vuejs_ru.

The level of questions and answers covers both beginners and experienced frontend developers.

As answers are used both generally recognized, verified and objective information, and subjective opinion of the author.

The increase in complexity does not come from the top down. The first questions and answers describe non-obvious points that may be interesting for experienced programmers.

The main sources of information - official documentation of Vue 3 and Vite, the book Vue.js 3 Design Patterns and Best Practices, r/vuejs/, @vuejs_ru.

Relevance of the information - 2022-2023 years.


About the author:

Ruslan Makarov - independent consultant, full-stack engineer with 20+ years of experience in SD, AWS Certified Solutions Architect, Sun Certified Java Developer.

- +
Skip to content

Introduction

This FAQ (Frequently Asked Questions) is created on the most frequently touched topics in Reddit r/vuejs/ and Telegram chat @vuejs_ru.

The level of questions and answers covers both beginners and experienced frontend developers.

As answers are used both generally recognized, verified and objective information, and subjective opinion of the author.

The increase in complexity does not come from the top down. The first questions and answers describe non-obvious points that may be interesting for experienced programmers.

The main sources of information - official documentation of Vue 3 and Vite, the book Vue.js 3 Design Patterns and Best Practices, r/vuejs/, @vuejs_ru.

Relevance of the information - 2022-2023 years.


About the author:

Ruslan Makarov - independent consultant, full-stack engineer with 20+ years of experience in SD, AWS Certified Solutions Architect, Sun Certified Java Developer.

+ \ No newline at end of file diff --git a/en/release-timeline/config.html b/en/release-timeline/config.html index e55469045..a9b8d4c5a 100644 --- a/en/release-timeline/config.html +++ b/en/release-timeline/config.html @@ -6,13 +6,13 @@ Configuration | Vue FAQ - + - + - + - + @@ -115,8 +115,8 @@ } </style> -To switch to a dark theme, you need to set the CSS class `dark` on one of the parents. - +To switch to a dark theme, you need to set the CSS class `dark` on one of the parents. + \ No newline at end of file diff --git a/en/release-timeline/getting-data.html b/en/release-timeline/getting-data.html index 28260f272..b58f6fe5e 100644 --- a/en/release-timeline/getting-data.html +++ b/en/release-timeline/getting-data.html @@ -6,13 +6,13 @@ Getting release, commit and pull requests data | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Getting release, commit and pull requests data

Retrieving data

There are three ways to get data from releases, pull request and commits from GitHub

  1. Dynamic. Direct request to GitHub REST API during page opening.
  2. Request to GitHub REST API through a proxy
  3. Request to GitHub REST API during project build, optimise and save data locally on the site.

Currently the first and second option are directly implemented, there is an option to specify url for release requests, pull requests and commits.

The first option is used by default.

The second option is needed to reduce the size of the downloaded file, as 95% of the data in GitHub responses is not used in the application.

The data format should be the same as GitHub's, but may contain only the required fields.

The third option can also optimise data flows, but it makes a snapshot of releases and a pull requests at a certain point in time. When a new release comes out, the documentation will need to be rebuilt. In this case you also need to provide the correct url. The logic of the third option (receiving, filtering, saving data) should be implemented by the package user.

- +
Skip to content

Getting release, commit and pull requests data

Retrieving data

There are three ways to get data from releases, pull request and commits from GitHub

  1. Dynamic. Direct request to GitHub REST API during page opening.
  2. Request to GitHub REST API through a proxy
  3. Request to GitHub REST API during project build, optimise and save data locally on the site.

Currently the first and second option are directly implemented, there is an option to specify url for release requests, pull requests and commits.

The first option is used by default.

The second option is needed to reduce the size of the downloaded file, as 95% of the data in GitHub responses is not used in the application.

The data format should be the same as GitHub's, but may contain only the required fields.

The third option can also optimise data flows, but it makes a snapshot of releases and a pull requests at a certain point in time. When a new release comes out, the documentation will need to be rebuilt. In this case you also need to provide the correct url. The logic of the third option (receiving, filtering, saving data) should be implemented by the package user.

+ \ No newline at end of file diff --git a/en/release-timeline/getting-started.html b/en/release-timeline/getting-started.html index db2b669ff..8de711f93 100644 --- a/en/release-timeline/getting-started.html +++ b/en/release-timeline/getting-started.html @@ -6,13 +6,13 @@ Installation | Vue FAQ - + - + - + - + @@ -34,7 +34,7 @@ -
Skip to content

Installation

Installation of the npm package

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Usage in Vue project code

In a Vue component:

vue
<script setup>
+    
Skip to content

Installation

Installation of the npm package

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Usage in Vue project code

In a Vue component:

vue
<script setup>
 import { ReleaseTimeline, DefaultOptions as options } from "release-timeline";
 import "release-timeline/dist/style.css";
 // import "release-timeline/dist/animated-background.css";
@@ -48,8 +48,8 @@
 <script src="https://unpkg.com/release-timeline@0.3.6/dist/index.umd.js"></script>
 <link href="https://unpkg.com/release-timeline@0.3.6/dist/animated-background.css" rel="stylesheet" />
 
-<release-timeline options=""></release-timeline>

Read more about connecting as web component usage

- +<release-timeline options=""></release-timeline>

Read more about connecting as web component usage

+ \ No newline at end of file diff --git a/en/release-timeline/index.html b/en/release-timeline/index.html index 96e9e32f0..baa76b0fb 100644 --- a/en/release-timeline/index.html +++ b/en/release-timeline/index.html @@ -6,13 +6,13 @@ Release Timeline | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Release Timeline

Release timeline visualization

Visualize releases of any GitHub repository on a timeline, with information about commits and pull requests.

Embeds in VitePress, can be a good replacement for changelog in the project's technical documentation, automating description of changes and making tracking them convenient for users.

It can also be plugged into any HTML page as a Web component or micro-frontend.

image

The library is written using Vue 3, has no dependencies, takes 15Kb unpacked. Adapted to work in VitePress (switching between light and dark themes). Can be plugged in as a web component in non-Vue projects.

Data on releases of a particular repository is taken via GitHub REST API.

Public repositories are available immediately, private repositories require GitHub API token.

GitHub

Demo

  • Demo (you can specify any repository via the selection in the upper left corner)

Credits

Parallax Star background in CSS

- +
Skip to content

Release Timeline

Release timeline visualization

Visualize releases of any GitHub repository on a timeline, with information about commits and pull requests.

Embeds in VitePress, can be a good replacement for changelog in the project's technical documentation, automating description of changes and making tracking them convenient for users.

It can also be plugged into any HTML page as a Web component or micro-frontend.

image

The library is written using Vue 3, has no dependencies, takes 15Kb unpacked. Adapted to work in VitePress (switching between light and dark themes). Can be plugged in as a web component in non-Vue projects.

Data on releases of a particular repository is taken via GitHub REST API.

Public repositories are available immediately, private repositories require GitHub API token.

GitHub

Demo

  • Demo (you can specify any repository via the selection in the upper left corner)

Credits

Parallax Star background in CSS

+ \ No newline at end of file diff --git a/en/release-timeline/microfrontend.html b/en/release-timeline/microfrontend.html index 47045c9d1..509cf8d45 100644 --- a/en/release-timeline/microfrontend.html +++ b/en/release-timeline/microfrontend.html @@ -6,13 +6,13 @@ Micro-frontend | Vue FAQ - + - + - + - + @@ -50,8 +50,8 @@ </head> <body class="dark"> <div id="release-timeline" /> -</body>

Demo

You can see how release-timeline works as a micro-frontend here - esm-demo

It is just an html page, you can check out its code

- +</body>

Demo

You can see how release-timeline works as a micro-frontend here - esm-demo

It is just an html page, you can check out its code

+ \ No newline at end of file diff --git a/en/release-timeline/release-history.html b/en/release-timeline/release-history.html index 8fcff310f..1296752f3 100644 --- a/en/release-timeline/release-history.html +++ b/en/release-timeline/release-history.html @@ -6,14 +6,14 @@ Vue FAQ - + - + - + - + @@ -35,8 +35,8 @@ - - + + \ No newline at end of file diff --git a/en/release-timeline/vitepress.html b/en/release-timeline/vitepress.html index a7dce82ce..fe0d60180 100644 --- a/en/release-timeline/vitepress.html +++ b/en/release-timeline/vitepress.html @@ -6,13 +6,13 @@ VitePress | Vue FAQ - + - + - + - + @@ -34,7 +34,7 @@ -
Skip to content

VitePress

release-timeline fully supports VitePress, including changing light and dark themes and adapting to its styles.

Installation

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Usage

In any markdown file:

vue
<script setup>
+    
Skip to content

VitePress

release-timeline fully supports VitePress, including changing light and dark themes and adapting to its styles.

Installation

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Usage

In any markdown file:

vue
<script setup>
 import { ReleaseTimeline, DefaultOptions as options } from "release-timeline";
 import "release-timeline/dist/style.css";
 import "release-timeline/dist/vitepress.css";
@@ -55,8 +55,8 @@
   --rt-c-brand-2: var(--vp-c-brand-2);
   --rt-c-circle-bg: #888;
   --rt-font-family-base: var(--vp-font-family-base);
-}
- +}
+ \ No newline at end of file diff --git a/en/release-timeline/vue-3.html b/en/release-timeline/vue-3.html index b5205bd2c..30a2538f6 100644 --- a/en/release-timeline/vue-3.html +++ b/en/release-timeline/vue-3.html @@ -6,13 +6,13 @@ Vue 3 project | Vue FAQ - + - + - + - + @@ -34,7 +34,7 @@ -
Skip to content

Vue 3 project

Installation

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Use in Vue component

vue
<script setup>
+    
Skip to content

Vue 3 project

Installation

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Use in Vue component

vue
<script setup>
 import { ReleaseTimeline, DefaultOptions as options } from "release-timeline";
 import "release-timeline/dist/style.css";
 // import "release-timeline/dist/animated-background.css";
@@ -44,8 +44,8 @@
 options.github.repo = "release-timeline";
 </script>
 
-<ReleaseTimeline :options="options" />

Import animated-background.css is optional. CSS with starred sky takes 70Kb, in gzip format - 6.1Kb.

- +<ReleaseTimeline :options="options" />

Import animated-background.css is optional. CSS with starred sky takes 70Kb, in gzip format - 6.1Kb.

+ \ No newline at end of file diff --git a/en/release-timeline/web-component.html b/en/release-timeline/web-component.html index 743a06e01..cbdd6ff0c 100644 --- a/en/release-timeline/web-component.html +++ b/en/release-timeline/web-component.html @@ -6,13 +6,13 @@ Web component | Vue FAQ - + - + - + - + @@ -85,8 +85,8 @@ <body> <release-timeline options="" /> -</body>

In this case the options attribute should be empty.

For the starred sky background, you must set --rt-c-bg: transparent and the desired background background-color to body or the desired container. This is only needed to use in web-components mode.

Demo

You can see how release-timeline works as a web component here - wc-demo.

This is just an html page, you can check out its code

- +</body>

In this case the options attribute should be empty.

For the starred sky background, you must set --rt-c-bg: transparent and the desired background background-color to body or the desired container. This is only needed to use in web-components mode.

Demo

You can see how release-timeline works as a web component here - wc-demo.

This is just an html page, you can check out its code

+ \ No newline at end of file diff --git a/en/vue-webapp/contribution.html b/en/vue-webapp/contribution.html index 5a47c0278..c9a98f08a 100644 --- a/en/vue-webapp/contribution.html +++ b/en/vue-webapp/contribution.html @@ -6,13 +6,13 @@ Project participation | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ - - + + \ No newline at end of file diff --git a/en/vue-webapp/getting-started.html b/en/vue-webapp/getting-started.html index 89e249b83..2583bfcd0 100644 --- a/en/vue-webapp/getting-started.html +++ b/en/vue-webapp/getting-started.html @@ -6,13 +6,13 @@ Getting started | Vue FAQ - + - + - + - + @@ -34,46 +34,46 @@ -
Skip to content

Getting started

Installation via create vue-webapp

With this method, you can select which options will be installed:

sh
$ pnpm create vue-webapp
-
- Project name: ... my-vue-project
- Add a Splash screen? ... no / yes
- Make it PWA (adds service worker and manifest)? ... no / yes
- Add Open Graph meta tags? ... no / yes
- Add Google Analytics code? ... no / yes
- Add Github Action Workflow for publishing it on GitHub Pages? ... no / yes
- Select application layout » MainLayout
- Select navigation drawer » SimpleDrawer
- Select webapp navbar » MantineSimpleNavbar
- Select webapp header » MantineSimpleHeader
- Select webapp footer » MantineRichFooter
- Add API layer (REST)? ... no / yes
- Add JSON-RPC adapter? ... no / yes
-
-Scaffolding project in /home/ubuntu/my-vue-project...
Silent installation

It is possible to scaffold the app without manually entering parameters by specifying a configuration file with options:

bash
pnpm create vue-webapp -c config.json
-// or
-pnpm create vue-webapp --config config.json

The format of the config.json file should be like this:

json
{
-  "projectName": "my-vue-project",
-  "splashScreen": false,
-  "pwa": true,
-  "openGraph": false,
-  "googleAnalytics": false,
-  "githubActionsGithubPagesWorkflow": true,
-  "layout": "mainLayout",
-  "navigationDrawer": "SimpleDrawer",
-  "navbar": "MantineSimpleNavbar",
-  "header": "MantineSimpleHeader",
-  "footer": "MantineRichFooter",
-  "api": true,
-  "jsonRpc": false,
-  "overwrite": true
-}

The overwrite parameter tells whether to overwrite the content in case of existing directory. It accepts values: "yes", "no" and "ignore".

Also, the command

bash
$ pnpm create vue-webapp .

will create the project in the current directory.

This method will only install the selected components and functionality

Initializing and launching a web application

sh
$ cd my-vue-project
-$ pnpm i
-$ pnpm dev

Result in a browser:

image

Installation from the repository

With this method everything will be installed, but a minimum of functionality will be enabled. It is useful for testing all available components and functionality.

sh
$ git clone https://github.com/vuesence/vue-webapp.git
-$ cd vue-webapp
-$ pnpm i
-$ pnpm dev
- +
Skip to content

Getting started

Installation via create vue-webapp

With this method, you can select which options will be installed:

sh
$ pnpm create vue-webapp
+
+ Project name: ... my-vue-project
+ Add a Splash screen? ... no / yes
+ Make it PWA (adds service worker and manifest)? ... no / yes
+ Add Open Graph meta tags? ... no / yes
+ Add Google Analytics code? ... no / yes
+ Add Github Action Workflow for publishing it on GitHub Pages? ... no / yes
+ Select application layout » MainLayout
+ Select navigation drawer » SimpleDrawer
+ Select webapp navbar » MantineSimpleNavbar
+ Select webapp header » MantineSimpleHeader
+ Select webapp footer » MantineRichFooter
+ Add API layer (REST)? ... no / yes
+ Add JSON-RPC adapter? ... no / yes
+
+Scaffolding project in /home/ubuntu/my-vue-project...
Silent installation

It is possible to scaffold the app without manually entering parameters by specifying a configuration file with options:

bash
pnpm create vue-webapp -c config.json
+// or
+pnpm create vue-webapp --config config.json

The format of the config.json file should be like this:

json
{
+  "projectName": "my-vue-project",
+  "splashScreen": false,
+  "pwa": true,
+  "openGraph": false,
+  "googleAnalytics": false,
+  "githubActionsGithubPagesWorkflow": true,
+  "layout": "mainLayout",
+  "navigationDrawer": "SimpleDrawer",
+  "navbar": "MantineSimpleNavbar",
+  "header": "MantineSimpleHeader",
+  "footer": "MantineRichFooter",
+  "api": true,
+  "jsonRpc": false,
+  "overwrite": true
+}

The overwrite parameter tells whether to overwrite the content in case of existing directory. It accepts values: "yes", "no" and "ignore".

Also, the command

bash
$ pnpm create vue-webapp .

will create the project in the current directory.

This method will only install the selected components and functionality

Initializing and launching a web application

sh
$ cd my-vue-project
+$ pnpm i
+$ pnpm dev

Result in a browser:

image

Installation from the repository

With this method everything will be installed, but a minimum of functionality will be enabled. It is useful for testing all available components and functionality.

sh
$ git clone https://github.com/vuesence/vue-webapp.git
+$ cd vue-webapp
+$ pnpm i
+$ pnpm dev
+ \ No newline at end of file diff --git a/en/vue-webapp/guidelines.html b/en/vue-webapp/guidelines.html index 0e729ff6b..bada8fb13 100644 --- a/en/vue-webapp/guidelines.html +++ b/en/vue-webapp/guidelines.html @@ -6,13 +6,13 @@ Guidelines | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Guidelines

  • Lightweight, efficient web application with modern UI/UX
  • Vue 3, Composition API, script setup syntax
  • Do not use third party libraries unnecessarily. The only necessary dependency is vue-router.
  • Use clean and efficient HTML5 and CSS3 for layout
  • Include specific functionality only when needed
  • High degree of customization

  • Plugging in specific functionality, such as i18n, means not just adding that library to package.json, but a full-fledged minimal working integration - creating a corresponding composable function, multiple locales, and applying t() in a template for illustration with necessary comments in the code to facilitate later use and customization.

  • Integrating certain functionality that uses a third-party library (e.g. toaster or modal window) should be done through a wrapper, so that it would be easy for the developer to change the specific package that implements the functionality if desired.

  • The scaffolded web application uses TypeScript, but it is possible to continue developing the application in pure JavaScript.

  • Vite is used as the builder.

  • SCSS is used as the CSS preprocessor.

  • Antony Fu's eslint-config is used for linting and formatting in ESlint.

  • The result should be a Vue 3 application without not-needed dependencies, unless the user explicitly includes them in the framework.

- +
Skip to content

Guidelines

  • Lightweight, efficient web application with modern UI/UX
  • Vue 3, Composition API, script setup syntax
  • Do not use third party libraries unnecessarily. The only necessary dependency is vue-router.
  • Use clean and efficient HTML5 and CSS3 for layout
  • Include specific functionality only when needed
  • High degree of customization

  • Plugging in specific functionality, such as i18n, means not just adding that library to package.json, but a full-fledged minimal working integration - creating a corresponding composable function, multiple locales, and applying t() in a template for illustration with necessary comments in the code to facilitate later use and customization.

  • Integrating certain functionality that uses a third-party library (e.g. toaster or modal window) should be done through a wrapper, so that it would be easy for the developer to change the specific package that implements the functionality if desired.

  • The scaffolded web application uses TypeScript, but it is possible to continue developing the application in pure JavaScript.

  • Vite is used as the builder.

  • SCSS is used as the CSS preprocessor.

  • Antony Fu's eslint-config is used for linting and formatting in ESlint.

  • The result should be a Vue 3 application without not-needed dependencies, unless the user explicitly includes them in the framework.

+ \ No newline at end of file diff --git a/en/vue-webapp/index.html b/en/vue-webapp/index.html index c4c88b132..93777dc31 100644 --- a/en/vue-webapp/index.html +++ b/en/vue-webapp/index.html @@ -6,13 +6,13 @@ Scaffolding a Vue webapp | Vue FAQ - + - + - + - + @@ -34,15 +34,15 @@ -
Skip to content

Scaffolding a Vue webapp

Summary

Vue 3 website builder/scaffolder (GitHub) for developers, with a choice of business template (portfolio, blog, store, etc.), layout template, design and functionality (API module, i18n, PWA, splash screen, auth module, themes, etc.), for further convenient customization and content filling.

sh
$ pnpm create vue-webapp
-
- Project name: ... my-vue-project
- Add a Splash screen? ... no / yes
- Make it PWA (adds service worker and manifest)? ... no / yes
- Add Open Graph meta tags? ... no / yes
- Add Google Analytics code? ... no / yes
-...

Justification

There are quite a few (mostly specific and quickly becoming obsolete) boilerplate templates for creating a Vue application. Usually it means creating an empty project with certain libraries. In other words, it's just setting up an environment to start development without, actually, code.

At the same time, many other frontend and backend frameworks have starter-kits that allow you to quickly create a ready-made blog, online store, business card site, portfolio, documentation, etc., which greatly helps in learning the framework itself, relevant technologies and best practices, as well as for solving business tasks.

As a result, it may seem that Vue is a rather low-level framework, and to create web applications quickly, efficiently and conveniently, you need to take some "metaframwork" or other solution - like Nuxt, Astro, VitePress, Vue Storefront - which explicitly position themselves as tools for solving certain (or a wide range of) business tasks.

There is a need for a tool similar to create-vue, for scaffolding a ready-to-go web application. On the one hand, a quite workable, adaptive website with the necessary functionality so that a novice developer could familiarize himself with a proven approach to solving the tasks involved. On the other hand, it should be minimalistic enough not to impose unwanted technologies and libraries on an experienced developer and create a skeleton of established best practices for further development of the application.

It is clear that defining one or another "best practice" (fetch or axios?) can be quite controversial, but nevertheless.

image

- +
Skip to content

Scaffolding a Vue webapp

Summary

Vue 3 website builder/scaffolder (GitHub) for developers, with a choice of business template (portfolio, blog, store, etc.), layout template, design and functionality (API module, i18n, PWA, splash screen, auth module, themes, etc.), for further convenient customization and content filling.

sh
$ pnpm create vue-webapp
+
+ Project name: ... my-vue-project
+ Add a Splash screen? ... no / yes
+ Make it PWA (adds service worker and manifest)? ... no / yes
+ Add Open Graph meta tags? ... no / yes
+ Add Google Analytics code? ... no / yes
+...

Justification

There are quite a few (mostly specific and quickly becoming obsolete) boilerplate templates for creating a Vue application. Usually it means creating an empty project with certain libraries. In other words, it's just setting up an environment to start development without, actually, code.

At the same time, many other frontend and backend frameworks have starter-kits that allow you to quickly create a ready-made blog, online store, business card site, portfolio, documentation, etc., which greatly helps in learning the framework itself, relevant technologies and best practices, as well as for solving business tasks.

As a result, it may seem that Vue is a rather low-level framework, and to create web applications quickly, efficiently and conveniently, you need to take some "metaframwork" or other solution - like Nuxt, Astro, VitePress, Vue Storefront - which explicitly position themselves as tools for solving certain (or a wide range of) business tasks.

There is a need for a tool similar to create-vue, for scaffolding a ready-to-go web application. On the one hand, a quite workable, adaptive website with the necessary functionality so that a novice developer could familiarize himself with a proven approach to solving the tasks involved. On the other hand, it should be minimalistic enough not to impose unwanted technologies and libraries on an experienced developer and create a skeleton of established best practices for further development of the application.

It is clear that defining one or another "best practice" (fetch or axios?) can be quite controversial, but nevertheless.

image

+ \ No newline at end of file diff --git a/en/vue-webapp/objectives.html b/en/vue-webapp/objectives.html index 310a1980b..d96b8c193 100644 --- a/en/vue-webapp/objectives.html +++ b/en/vue-webapp/objectives.html @@ -6,13 +6,13 @@ Objectives | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Objectives

  1. Create a scaffolder of simple out-of-the-box SPA applications for a specific task in a few minutes, with the possibility of further customization and filling it with content.
  2. Fine-tune the application using effective functional code blocks.
  3. Collect and generalize the best techniques and practices for creating a modern reactive Vue application.
  4. Enable novice developers to familiarize themselves with the Vue.js ecosystem with ready-made examples, learn front-end and Vue 3 best practices, from building application architecture to naming CSS classes.
  5. Enable experienced developers to quickly and efficiently scaffold a ready to use web application and leverage reusable code blocks (boilerplates), especially those that cannot be distributed as NPM packages.

This application should act as a website wireframe builder, with the ability to choose when scaffolding:

  • A global business website template (portfolio, blog, online store, etc.)
  • Variations of the general layout of the web application
  • Specific component options (header, footer, navigation drawer, etc.)
  • General style/design options
  • Specific functionality injected as functional fragments (API module, i18n, PWA, splash screen, Auth module, themes, etc.)
  • GitHub actions options with the ability to build and deploy to popular hosting solutions
  • Ability to connect/integrate popular libraries (including UI) if needed
  • Possibility to integrate with certain headless CRM and API services

Separately, it is planned to create a web showcase, where the user, dynamically changing the parameters, will be able to view and test the available site layouts, themes/styling, components (header, footer, etc.) and functionality of future application, as well as their combination with each other.

- +
Skip to content

Objectives

  1. Create a scaffolder of simple out-of-the-box SPA applications for a specific task in a few minutes, with the possibility of further customization and filling it with content.
  2. Fine-tune the application using effective functional code blocks.
  3. Collect and generalize the best techniques and practices for creating a modern reactive Vue application.
  4. Enable novice developers to familiarize themselves with the Vue.js ecosystem with ready-made examples, learn front-end and Vue 3 best practices, from building application architecture to naming CSS classes.
  5. Enable experienced developers to quickly and efficiently scaffold a ready to use web application and leverage reusable code blocks (boilerplates), especially those that cannot be distributed as NPM packages.

This application should act as a website wireframe builder, with the ability to choose when scaffolding:

  • A global business website template (portfolio, blog, online store, etc.)
  • Variations of the general layout of the web application
  • Specific component options (header, footer, navigation drawer, etc.)
  • General style/design options
  • Specific functionality injected as functional fragments (API module, i18n, PWA, splash screen, Auth module, themes, etc.)
  • GitHub actions options with the ability to build and deploy to popular hosting solutions
  • Ability to connect/integrate popular libraries (including UI) if needed
  • Possibility to integrate with certain headless CRM and API services

Separately, it is planned to create a web showcase, where the user, dynamically changing the parameters, will be able to view and test the available site layouts, themes/styling, components (header, footer, etc.) and functionality of future application, as well as their combination with each other.

+ \ No newline at end of file diff --git a/en/vue-webapp/options/adaptability.html b/en/vue-webapp/options/adaptability.html index 61c4e2510..933f2d10f 100644 --- a/en/vue-webapp/options/adaptability.html +++ b/en/vue-webapp/options/adaptability.html @@ -6,13 +6,13 @@ Adaptability | Vue FAQ - + - + - + - + @@ -57,8 +57,8 @@ <div class="box"></div> <div class="box"></div> <div class="box"></div> -</div> - +</div> + \ No newline at end of file diff --git a/en/vue-webapp/options/api.html b/en/vue-webapp/options/api.html index bd4368912..19ccd2cb3 100644 --- a/en/vue-webapp/options/api.html +++ b/en/vue-webapp/options/api.html @@ -6,13 +6,13 @@ API module | Vue FAQ - + - + - + - + @@ -72,8 +72,8 @@ }; export { api } -export default api;

TIP

The JSON-RPC protocol is very convenient and is the de facto standard for web 3.0. Recommended for use instead of REST

- +export default api;

TIP

The JSON-RPC protocol is very convenient and is the de facto standard for web 3.0. Recommended for use instead of REST

+ \ No newline at end of file diff --git a/en/vue-webapp/options/baseIcon.html b/en/vue-webapp/options/baseIcon.html index 9e159acb3..21024b06a 100644 --- a/en/vue-webapp/options/baseIcon.html +++ b/en/vue-webapp/options/baseIcon.html @@ -6,13 +6,13 @@ BaseIcon | Vue FAQ - + - + - + - + @@ -45,8 +45,8 @@ <header class="header"> <BaseIcon name="hamburger" class="drawer-toggle" @click="isDrawerOpen = !isDrawerOpen" /> </header> -</template>

utils.ts when initialized uses import.meta.glob to read all files with extensions .svg and .png from the @/assets/images/ directory and uses their names as icon identifiers for BaseIcon.

- +</template>

utils.ts when initialized uses import.meta.glob to read all files with extensions .svg and .png from the @/assets/images/ directory and uses their names as icon identifiers for BaseIcon.

+ \ No newline at end of file diff --git a/en/vue-webapp/options/description.html b/en/vue-webapp/options/description.html index 0722ff391..06dd6166b 100644 --- a/en/vue-webapp/options/description.html +++ b/en/vue-webapp/options/description.html @@ -6,13 +6,13 @@ Implementation details | Vue FAQ - + - + - + - + @@ -37,8 +37,8 @@
Skip to content

Implementation details

Code injections in the index.html

To avoid bloating index.html injections of code fragments into it (Open graph, Google analytics, Splash screen, Service worker etc.) are done via vite-plugin-html-injection Vite plugin.

The code snippets themselves are located in the ./src/utils/injections/ directory. The plugin configuration file injection-config.ts is also located there.

CSS tricks

A hack is applied in the application on large screen resolutions to prevent screen jumping when the main scrollbar appears/disappears

css
html {
   overflow-x: hidden;
   margin-right: calc(-1 * (100vw - 100%))
-}
- +} + \ No newline at end of file diff --git a/en/vue-webapp/options/drawer.html b/en/vue-webapp/options/drawer.html index 6504e1f92..89f997cd4 100644 --- a/en/vue-webapp/options/drawer.html +++ b/en/vue-webapp/options/drawer.html @@ -6,13 +6,13 @@ Navigation drawers | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Navigation drawers

There are currently two types of navigation drawers to choose from.

SimpleDrawer

image

It is always on for notebook and desktop screen resolutions, and can be opened for mobile and tablet by clicking/tapping on the "hamburger" icon.

TouchSlideoutDrawer

image

Similar to SimpleDrawer, but is controlled by touch on touch screens. Adds a nice UX.

Functionality is implemented with useTouchSwipe composable function and TouchSlideoutDrawer component.

- +
Skip to content

Navigation drawers

There are currently two types of navigation drawers to choose from.

SimpleDrawer

image

It is always on for notebook and desktop screen resolutions, and can be opened for mobile and tablet by clicking/tapping on the "hamburger" icon.

TouchSlideoutDrawer

image

Similar to SimpleDrawer, but is controlled by touch on touch screens. Adds a nice UX.

Functionality is implemented with useTouchSwipe composable function and TouchSlideoutDrawer component.

+ \ No newline at end of file diff --git a/en/vue-webapp/options/footer.html b/en/vue-webapp/options/footer.html index ac0d75d15..4e95d6a62 100644 --- a/en/vue-webapp/options/footer.html +++ b/en/vue-webapp/options/footer.html @@ -6,13 +6,13 @@ Footers | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/vue-webapp/options/ga-gp.html b/en/vue-webapp/options/ga-gp.html index 670ef3a9c..8e11fd828 100644 --- a/en/vue-webapp/options/ga-gp.html +++ b/en/vue-webapp/options/ga-gp.html @@ -6,13 +6,13 @@ GitHub Actions script to deploy to GitHub Pages | Vue FAQ - + - + - + - + @@ -36,8 +36,8 @@
Skip to content

GitHub Actions script to deploy to GitHub Pages

Deployment

Uses JamesIves/github-pages-deploy-action GitHub Action to deploy a site to the gh-pages branch of the same GitHub repository, which automatically makes the website available at https://youGitHubUsername.github.io/my-vue-webapp (if your project and repository has name my-vue-webapp).

  • Create a branch in the repository called gh-pages
  • Go to the "Settings" section of your repository
  • Under "Code and automation" in the sidebar, click Pages.
  • Under "Build and deployment" under the "Source", select "Deploy from a branch".
  • Under "Build and deployment" under the "Branch" heading, use the branch drop-down menu and select the branch you want - gh-pages.

More details:

Setting base in Vite config

If you don't have a custom domain, you need to put the name of your repository as base in vite.config.ts so that the site can be accessed from the above link:

js
export default defineConfig({
   base:"/my-vue-webapp/"
-});

If you have a custom domain (like yourname.com), this parameter is not needed.

- +});

If you have a custom domain (like yourname.com), this parameter is not needed.

+ \ No newline at end of file diff --git a/en/vue-webapp/options/google-analytics.html b/en/vue-webapp/options/google-analytics.html index 26e151827..b0d9dbfe1 100644 --- a/en/vue-webapp/options/google-analytics.html +++ b/en/vue-webapp/options/google-analytics.html @@ -6,13 +6,13 @@ Google analytics | Vue FAQ - + - + - + - + @@ -41,8 +41,8 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-JL65GWRNQQQ'); -</script>

You should replace the id value with your own.

- +</script>

You should replace the id value with your own.

+ \ No newline at end of file diff --git a/en/vue-webapp/options/header.html b/en/vue-webapp/options/header.html index 18ea65120..729853223 100644 --- a/en/vue-webapp/options/header.html +++ b/en/vue-webapp/options/header.html @@ -6,13 +6,13 @@ Headers | Vue FAQ - + - + - + - + @@ -34,16 +34,16 @@ -
Skip to content

Headers

All headers are adaptive.

SimpleHeader

image

Simple sticky header

MantineSimpleHeader

image

Simple sticky header in Mantine UI style

MantineLayeredHeader

image

Layered sticky header in Mantine UI style

SlidingHeader

image

Can contain two different headers, the second one appears after the user scrolls down the page

template
<AppHeader :threshold-hide="200" :threshold-open="400">
-    <template #first-header>
-        <AppHeaderFirst />
-    </template>
-
-    <template #second-header>
-        <AppHeaderSecond />
-    </template>
-<AppHeader>
- +
Skip to content

Headers

All headers are adaptive.

SimpleHeader

image

Simple sticky header

MantineSimpleHeader

image

Simple sticky header in Mantine UI style

MantineLayeredHeader

image

Layered sticky header in Mantine UI style

SlidingHeader

image

Can contain two different headers, the second one appears after the user scrolls down the page

template
<AppHeader :threshold-hide="200" :threshold-open="400">
+    <template #first-header>
+        <AppHeaderFirst />
+    </template>
+
+    <template #second-header>
+        <AppHeaderSecond />
+    </template>
+<AppHeader>
+ \ No newline at end of file diff --git a/en/vue-webapp/options/i18n.html b/en/vue-webapp/options/i18n.html index 00ef09636..94b9eb1bf 100644 --- a/en/vue-webapp/options/i18n.html +++ b/en/vue-webapp/options/i18n.html @@ -6,13 +6,13 @@ i18n | Vue FAQ - + - + - + - + @@ -58,8 +58,8 @@ {{ t('msg') }} ({{ locale.code }}) </button> </div> -</template>

i18next extensions

i18next has an extension for Vue DevTools (pretty useless), and there is an extension I18next Ally for VS Code (pretty useful). So i18next Ally works with the new implementation if vue-i18n package is specified in package.json in dependencies (you don't need to use it in the code). Recommended. Both extensions, however, consume RAM and CPU resources quite well, so it is better to use them only as needed.

As a result

JavaScript bundle after the build is 50 Kb smaller than with i18next. The necessary functionality is there.

- +</template>

i18next extensions

i18next has an extension for Vue DevTools (pretty useless), and there is an extension I18next Ally for VS Code (pretty useful). So i18next Ally works with the new implementation if vue-i18n package is specified in package.json in dependencies (you don't need to use it in the code). Recommended. Both extensions, however, consume RAM and CPU resources quite well, so it is better to use them only as needed.

As a result

JavaScript bundle after the build is 50 Kb smaller than with i18next. The necessary functionality is there.

+ \ No newline at end of file diff --git a/en/vue-webapp/options/index.html b/en/vue-webapp/options/index.html index f51eff354..972b26c4b 100644 --- a/en/vue-webapp/options/index.html +++ b/en/vue-webapp/options/index.html @@ -6,13 +6,13 @@ Options when creating an application | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Options when creating an application

Available options

The following options are currently available for configuration:

  • Layout - application layout
  • Header - top part in the application template
  • Footer - bottom part of the application template
  • Drawer - navigation bar
  • Navbar - navigation menu (inside the drawer).
  • Github Pages deploy Workflow - GitHub Actions script for build and deploy application to GitHub Pages
  • PWA - addition of Service worker and Manifest to the application
  • API module - abstraction layer for communication with backend API
  • JSON-RPC - adapter for API module
  • Splash screen - splash screen during application startup to improve UX
  • Google analytics - code for integration of Google analytics
  • Open graph - meta tags for building snippets by social networks

Available by default

  • Dark theme. All plugins support theme switching
  • BaseIcon - icon component with the ability to dynamically specify a name
  • BaseToggle - toggle component

In development

  • Global Preloader
  • i18n - internationalization of the application using different variants of i18n libraries.

Planned

  • Online showcase for dynamic testing of different variants of application parts and functionality
  • Expanding the number of variants of layout, header, footer and other components
  • Auth - module framework for authentication on JWT tokens, including different variants of registration and login forms.
  • Auth integration with popular service providers (Firebase and others).
  • GitHub Actions for application deployment to various services (Vercel, Heroku, Firesbase) and other useful CI/CD scripts.
  • Check on startup for application new version and reload to avoid browser cache issues
  • Themes - application themes (include both different color palettes and the ability to change other CSS parameters for deep customization of the templates and components)
- +
Skip to content

Options when creating an application

Available options

The following options are currently available for configuration:

  • Layout - application layout
  • Header - top part in the application template
  • Footer - bottom part of the application template
  • Drawer - navigation bar
  • Navbar - navigation menu (inside the drawer).
  • Github Pages deploy Workflow - GitHub Actions script for build and deploy application to GitHub Pages
  • PWA - addition of Service worker and Manifest to the application
  • API module - abstraction layer for communication with backend API
  • JSON-RPC - adapter for API module
  • Splash screen - splash screen during application startup to improve UX
  • Google analytics - code for integration of Google analytics
  • Open graph - meta tags for building snippets by social networks

Available by default

  • Dark theme. All plugins support theme switching
  • BaseIcon - icon component with the ability to dynamically specify a name
  • BaseToggle - toggle component

In development

  • Global Preloader
  • i18n - internationalization of the application using different variants of i18n libraries.

Planned

  • Online showcase for dynamic testing of different variants of application parts and functionality
  • Expanding the number of variants of layout, header, footer and other components
  • Auth - module framework for authentication on JWT tokens, including different variants of registration and login forms.
  • Auth integration with popular service providers (Firebase and others).
  • GitHub Actions for application deployment to various services (Vercel, Heroku, Firesbase) and other useful CI/CD scripts.
  • Check on startup for application new version and reload to avoid browser cache issues
  • Themes - application themes (include both different color palettes and the ability to change other CSS parameters for deep customization of the templates and components)
+ \ No newline at end of file diff --git a/en/vue-webapp/options/layout-main.html b/en/vue-webapp/options/layout-main.html index 770956972..281f27ba4 100644 --- a/en/vue-webapp/options/layout-main.html +++ b/en/vue-webapp/options/layout-main.html @@ -6,13 +6,13 @@ MainLayout | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

MainLayout

Standard layout with header, footer and sidebar in notebook and desktop modes. In tablet and mobile modes the sidebar is hidden and moves in from the left when user clicks on the "hamburger" icon.

image

Routing

Changing the content of the main panel is provided via vue-router routes.

- +
Skip to content

MainLayout

Standard layout with header, footer and sidebar in notebook and desktop modes. In tablet and mobile modes the sidebar is hidden and moves in from the left when user clicks on the "hamburger" icon.

image

Routing

Changing the content of the main panel is provided via vue-router routes.

+ \ No newline at end of file diff --git a/en/vue-webapp/options/layout-one-column.html b/en/vue-webapp/options/layout-one-column.html index 762bff375..23a9bbb36 100644 --- a/en/vue-webapp/options/layout-one-column.html +++ b/en/vue-webapp/options/layout-one-column.html @@ -6,13 +6,13 @@ OneColumnLayout | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

OneColumnLayout

Similar to MainLayout, but without the sidebar in notebook and desktop modes. Can be used, for example, if all navigation is located in the header. In tablet and mobile modes, the sidebar also pops out when the "hamburger" icon is clicked.

image

In all layout cases, the maximum width of the layout is set by the CSS variable --vwa-layout-max-width.

- +
Skip to content

OneColumnLayout

Similar to MainLayout, but without the sidebar in notebook and desktop modes. Can be used, for example, if all navigation is located in the header. In tablet and mobile modes, the sidebar also pops out when the "hamburger" icon is clicked.

image

In all layout cases, the maximum width of the layout is set by the CSS variable --vwa-layout-max-width.

+ \ No newline at end of file diff --git a/en/vue-webapp/options/navbar.html b/en/vue-webapp/options/navbar.html index 24aacb4e5..e04df4f5f 100644 --- a/en/vue-webapp/options/navbar.html +++ b/en/vue-webapp/options/navbar.html @@ -6,13 +6,13 @@ Navbar | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Navbar

The Navbar is located inside the NavigationDrawer

At the moment it is possible to choose from two variants:

SimpleNavbar

image

MantineSimpleNavbar

image

- +
Skip to content

Navbar

The Navbar is located inside the NavigationDrawer

At the moment it is possible to choose from two variants:

SimpleNavbar

image

MantineSimpleNavbar

image

+ \ No newline at end of file diff --git a/en/vue-webapp/options/open-graph.html b/en/vue-webapp/options/open-graph.html index c6eec8163..ffaf52786 100644 --- a/en/vue-webapp/options/open-graph.html +++ b/en/vue-webapp/options/open-graph.html @@ -6,13 +6,13 @@ Google analytics | Vue FAQ - + - + - + - + @@ -47,8 +47,8 @@ <!-- <meta property="twitter:url" content="" /> --> <meta name="twitter:title" content="-twitter:title-" /> <meta name="twitter:description" content="" /> -<meta name="twitter:image" content="images" />

You should set your meta tags values.

- +<meta name="twitter:image" content="images" />

You should set your meta tags values.

+ \ No newline at end of file diff --git a/en/vue-webapp/options/pwa.html b/en/vue-webapp/options/pwa.html index 6b6635744..08665aae1 100644 --- a/en/vue-webapp/options/pwa.html +++ b/en/vue-webapp/options/pwa.html @@ -6,13 +6,13 @@ PWA | Vue FAQ - + - + - + - + @@ -48,8 +48,8 @@ "development", "education" ], - "icons": [...]

Service worker

Allows to make client-side caching manageable and greatly improve UX.

This implementation of service-worker.js does not use third-party libraries like Workbox.

The Cache first strategy is used for caching. Three separate caches are created for different types of resources: assets (js and css), images and fonts. Versioning is supported for each.

With the release of a new version of the application you can change the value of VERSION in service-worker.js. This will clear all cache in the client browser.

- + "icons": [...]

Service worker

Allows to make client-side caching manageable and greatly improve UX.

This implementation of service-worker.js does not use third-party libraries like Workbox.

The Cache first strategy is used for caching. Three separate caches are created for different types of resources: assets (js and css), images and fonts. Versioning is supported for each.

With the release of a new version of the application you can change the value of VERSION in service-worker.js. This will clear all cache in the client browser.

+ \ No newline at end of file diff --git a/en/vue-webapp/options/splash-screen.html b/en/vue-webapp/options/splash-screen.html index abba573f7..8cc1c8a8b 100644 --- a/en/vue-webapp/options/splash-screen.html +++ b/en/vue-webapp/options/splash-screen.html @@ -6,13 +6,13 @@ Splash screen | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Splash screen

A splash screen during application startup instead of a blank screen can enhance application user experience and strengthen brand recognition.

image

The splash screen code is located entirely in the index.html. It is controlled by the CSS class splash on the body tag.

The splash screen is removed in App.vue / onMounted() after all the resources needed to ignite the application have been loaded.

- +
Skip to content

Splash screen

A splash screen during application startup instead of a blank screen can enhance application user experience and strengthen brand recognition.

image

The splash screen code is located entirely in the index.html. It is controlled by the CSS class splash on the body tag.

The splash screen is removed in App.vue / onMounted() after all the resources needed to ignite the application have been loaded.

+ \ No newline at end of file diff --git a/en/vue-webapp/options/themes.html b/en/vue-webapp/options/themes.html index f4c2e3083..22ec19a6f 100644 --- a/en/vue-webapp/options/themes.html +++ b/en/vue-webapp/options/themes.html @@ -6,13 +6,13 @@ Themes | Vue FAQ - + - + - + - + @@ -52,8 +52,8 @@ --vwa-c-text-3: rgba(235, 235, 245, 0.38); } -/* ... etc */ - +/* ... etc */ + \ No newline at end of file diff --git a/hashmap.json b/hashmap.json index 108034481..5c1b2675a 100644 --- a/hashmap.json +++ b/hashmap.json @@ -1 +1 @@ -{"en_backend_backend.md":"DiQHyOzm","ru_arty-crafty_backend_db-data-model.md":"C-d48SDl","ru_arty-crafty_backend_supabase-api.md":"C0NqY1Xx","en_deployment_github-actions.md":"D2EnH7vC","ru_arty-crafty_backend_hoppscotch.md":"D4WuAYcj","en_vue-webapp_options_pwa.md":"CAIfsVDr","en_vue-webapp_options_layout-main.md":"CDtTtVC1","en_vue-webapp_options_layout-one-column.md":"eFdna01B","en_vue-webapp_options_navbar.md":"DdsRieV-","en_vue-webapp_options_open-graph.md":"DVqE57YF","en_vue-webapp_options_splash-screen.md":"2Xwwwa_c","en_vue-webapp_options_themes.md":"ezkK1uou","index.md":"D70_Euwr","ru_arty-crafty_analysis_architecture-and-design.md":"mhu5grx2","ru_arty-crafty_analysis_business-analysis.md":"CUOmDCH9","ru_articles_index.md":"C4K2USxl","en_development_assets.md":"vVQhwtSH","ru_arty-crafty_analysis_data-model.md":"D9ne2sg2","en_development_testing.md":"TnLw7eh5","en_vue-webapp_options_drawer.md":"CueX4w1O","en_vue-webapp_options_description.md":"X5jbHujp","en_backend_cors.md":"CojWcM27","ru_book_index.md":"Dl2sKJ5I","en_misc_introduction.md":"D8fUQast","ru_backend_auth.md":"DbXqwW1t","ru_book_summary.md":"Cq4OSupb","ru_arty-crafty_backend_baas-choosing.md":"Bc2_TihF","en_release-timeline_vitepress.md":"DsB_-5R9","en_backend_api.md":"BO2_3G7n","ru_frontend_spa-pwa-ssr-ssg.md":"kKt6Va55","ru_book_chapter_8__multithreading_with_web_workers.md":"DgbiScY9","en_backend_auth.md":"ZYd-rDSe","en_development_stores.md":"BKuyvw_V","ru_vue-webapp_index.md":"z6AkT026","en_release-timeline_getting-data.md":"wADUmsoK","en_release-timeline_getting-started.md":"BNlpoJ_U","en_release-timeline_microfrontend.md":"D15-3eWf","en_backend_protocols.md":"Dp9Axkjz","ru_development_libraries.md":"BFhnYXXA","ru_arty-crafty_introduction_goals.md":"BOzwpDbg","en_vue-webapp_options_footer.md":"BhQS9DbB","ru_arty-crafty_introduction_development-stages.md":"DVii8hxe","ru_backend_cors.md":"BnICOSYk","ru_arty-crafty_backend_supabase.md":"DFZiFIZ1","ru_arty-crafty_introduction_repository.md":"CbOAPMvi","en_vue-webapp_objectives.md":"C6uRcCsz","en_vue-webapp_options_adaptability.md":"DNOVsT2_","ru_deployment_docker.md":"B-fxIdTl","ru_deployment_hosting.md":"CVfHz7S5","ru_development_assets.md":"DvqYQEiN","ru_development_building.md":"BaYBsODo","ru_development_ide.md":"UIwOaYtL","en_development_ide.md":"DwF2bx8m","en_index.md":"BirJ33FR","en_deployment_hosting.md":"DZHIgjmE","en_release-timeline_vue-3.md":"DQPQ-Nff","en_frontend_about-frameworks.md":"DWKg76I_","ru_frontend_learning.md":"idg5r6db","ru_index.md":"DM_OhCVU","ru_misc_changelog.md":"R-7q8aJG","ru_misc_cheat-sheets.md":"wf6WdNEU","ru_misc_contribute.md":"BxfPlWUI","ru_misc_glossary.md":"Zx29bhYw","ru_misc_introduction.md":"B8HYWYzA","ru_release-timeline_config.md":"8vd1K3QD","ru_deployment_ci-cd.md":"PgKXAmFZ","en_development_building.md":"BhaZM9HL","ru_development_architectural-patterns.md":"DF7hAB4z","en_development_libraries.md":"Dz7ibVZG","ru_release-timeline_getting-started.md":"Dx_UFTtF","ru_release-timeline_index.md":"BvkoC8iO","ru_release-timeline_microfrontend.md":"CcjYYPZL","ru_release-timeline_release-history.md":"DjKgrdam","ru_release-timeline_vitepress.md":"DVpxOLIE","ru_release-timeline_vue-3.md":"B9kD3Pq7","ru_release-timeline_web-component.md":"C9cAMGRS","ru_vue-webapp_contribution.md":"CrRXGz2e","ru_vue-webapp_getting-started.md":"_RO400E3","ru_vue-webapp_guidelines.md":"OiEpS5Up","ru_arty-crafty_showcase-data_api-service-adapter.md":"CaUHHfn1","ru_vue-webapp_objectives.md":"CEEB1y8Z","ru_vue-webapp_options_adaptability.md":"CCEXmU1S","ru_arty-crafty_analysis_ui-layout.md":"D2HxkDYi","en_release-timeline_config.md":"BNKRZ0z2","en_deployment_docker.md":"BxoYiuNZ","en_release-timeline_index.md":"DGXsyiv-","ru_vue-webapp_options_api.md":"SsFyJ70f","ru_vue-webapp_options_baseicon.md":"sq0nfZfW","ru_vue-webapp_options_description.md":"B0KwBw6b","ru_vue-webapp_options_drawer.md":"CzDs-yrN","ru_vue-webapp_options_footer.md":"P0M8r5X4","ru_vue-webapp_options_ga-gp.md":"C5eeB8d1","ru_vue-webapp_options_google-analytics.md":"BXyaETaR","ru_vue-webapp_options_header.md":"bvam5pHc","ru_vue-webapp_options_i18n.md":"BG0ifMMf","ru_vue-webapp_options_index.md":"BxEUg1hK","ru_vue-webapp_options_navbar.md":"4YLhFVtE","ru_vue-webapp_options_open-graph.md":"DGAiA5tI","ru_vue-webapp_options_pwa.md":"gVrQJHcy","ru_vue-webapp_options_splash-screen.md":"BCpLa88S","ru_vue-webapp_options_themes.md":"D8I7EZV6","ru_development_stores.md":"CxiEd3V5","ru_arty-crafty_showcase-data_typescript.md":"CEmSWr9D","ru_vue-webapp_options_layout-main.md":"CaXblCmP","ru_vue-webapp_options_layout-one-column.md":"Bf87ByLC","ru_book_chapter_9__testing_and_source_control.md":"BvPYWp4L","ru_book_chapter_1__the_vue_3_framework.md":"BLhzv5VN","ru_arty-crafty_index.md":"7XJVn5xi","en_misc_changelog.md":"Bjx8raX0","ru_book_chapter_11__bonus_chapter_-_ux_patterns.md":"Cf0wRQMQ","en_development_project-structure.md":"BrWyQfy8","ru_frontend_css-ui-libs.md":"DmmlAlcW","en_misc_cheat-sheets.md":"DhGBK1mL","ru_development_misc.md":"DNIBwOgK","ru_deployment_github-actions.md":"CcLUhKOF","ru_arty-crafty_showcase-data_mobile-menu.md":"Bqv-U9L1","en_vue-webapp_options_api.md":"BkpXLhVW","en_vue-webapp_options_baseicon.md":"tU1fqwaY","en_deployment_ci-cd.md":"B6qinTdV","ru_backend_api.md":"leaO0awA","en_vue-webapp_options_index.md":"CzwdqGQO","ru_book_chapter_2__software_design_principles_and_patterns.md":"BTHjk4t2","en_vue-webapp_index.md":"DCbMZLDS","en_vue-webapp_contribution.md":"IdeTsIfi","en_release-timeline_release-history.md":"BCFRO9Zd","ru_arty-crafty_showcase-data_vueuse.md":"BuVpv0qo","en_vue-webapp_options_i18n.md":"B7-QOI3n","en_release-timeline_web-component.md":"C5sM46KZ","en_vue-webapp_options_google-analytics.md":"5tvsJqoB","en_frontend_spa-pwa-ssr-ssg.md":"Cj1747nN","en_frontend_css-ui-libs.md":"Bpi44fbh","ru_arty-crafty_showcase_product-category.md":"C9TCZUZi","en_vue-webapp_getting-started.md":"c6z4VCXj","ru_arty-crafty_showcase_project-setup.md":"KcerT95-","en_development_architectural-patterns.md":"-IeD3IjQ","ru_arty-crafty_showcase-data_product-page.md":"COQ7fGLF","en_frontend_architecture.md":"CkpLyRNO","ru_book_appendix__migrating_from_vue_2.md":"Co6HKlKN","ru_frontend_architecture.md":"DCEHfzIt","en_development_misc.md":"Bflvua0Q","ru_arty-crafty_showcase_favourites.md":"Bq85uXVz","en_vue-webapp_guidelines.md":"C_gT1gTi","ru_book_chapter_10__deploying_your_application.md":"B7eBuHbF","ru_book_chapter_3__setting_up_a_working_project.md":"C4QXibPE","ru_backend_protocols.md":"CDDUmXGf","en_frontend_learning.md":"2TwiugwY","ru_arty-crafty_analysis_research.md":"aceCiBDK","en_vue-webapp_options_ga-gp.md":"DGVsPqx7","ru_book_chapter_7__data_flow_management.md":"DNEPK-UR","en_misc_contribute.md":"CjU3ztux","en_vue-webapp_options_header.md":"eyyb3Azb","ru_arty-crafty_analysis_tech-stack.md":"CNQa_xDJ","ru_arty-crafty_analysis_ui-design.md":"DGoNa5Zt","ru_backend_backend.md":"CYR0vQBQ","en_misc_glossary.md":"CxGxNBaS","ru_development_project-structure.md":"CI0zM6Ae","ru_release-timeline_getting-data.md":"gYOUO7rh","ru_arty-crafty_showcase_customization.md":"DAz-pzTc","ru_arty-crafty_showcase_codeium.md":"DKDqibQO","ru_frontend_about-frameworks.md":"BnF5W9Ep","ru_development_testing.md":"C_D43HnM","ru_book_chapter_5__single-page_applications.md":"C6XMJrBo","ru_development_web-components.md":"Bh-0y3Im","ru_book_chapter_4__user_interface_composition_with_components.md":"Dvh9tllT","ru_book_chapter_6__progressive_web_applications.md":"BCdJFqes"} +{"ru_deployment_github-actions.md":"B_6nQ0HL","en_backend_api.md":"IAOkgBIF","en_development_libraries.md":"BPJIgMKF","en_misc_cheat-sheets.md":"Cjw0pSK9","en_misc_contribute.md":"VgInPm-R","en_development_stores.md":"CFBfDpyJ","en_frontend_about-frameworks.md":"CEU8jffD","en_frontend_architecture.md":"BkhCoTK6","en_backend_cors.md":"B5yVVfYm","en_frontend_css-ui-libs.md":"Bb3-p9Xo","en_vue-webapp_options_splash-screen.md":"bqSZuB6L","en_release-timeline_index.md":"BPI3ISXr","en_development_misc.md":"CAe-X9Ta","en_misc_changelog.md":"D96wCHFE","en_misc_introduction.md":"CiBBbkF0","en_vue-webapp_getting-started.md":"PWklTDjS","ru_arty-crafty_showcase_product-category.md":"B11D00h1","en_misc_glossary.md":"eTkSCk0f","en_vue-webapp_options_description.md":"D8k7Cuos","ru_development_libraries.md":"DsexKnt4","ru_backend_api.md":"BtrGgvwp","en_release-timeline_microfrontend.md":"Dvv6FXJJ","en_frontend_spa-pwa-ssr-ssg.md":"DJ7VYHMy","en_vue-webapp_options_drawer.md":"bda6xC_f","en_vue-webapp_options_footer.md":"4oGX9Zm-","ru_misc_glossary.md":"BMqIYP7e","en_development_assets.md":"DSpdOfK9","ru_vue-webapp_options_i18n.md":"ouUXdx4T","ru_vue-webapp_options_layout-main.md":"gu3YKsMu","ru_backend_backend.md":"Bk6rQrGJ","ru_arty-crafty_introduction_repository.md":"DmInW47E","ru_vue-webapp_options_splash-screen.md":"CWjv9Mjz","ru_arty-crafty_showcase-data_product-page.md":"DW3X4VqI","ru_vue-webapp_options_ga-gp.md":"LUNm7bwy","ru_arty-crafty_showcase_codeium.md":"CYYRwnGw","ru_vue-webapp_options_adaptability.md":"Ce8tdAQA","ru_arty-crafty_showcase-data_api-service-adapter.md":"DElYrd-f","ru_arty-crafty_showcase-data_typescript.md":"BIS5zPOZ","ru_arty-crafty_showcase-data_mobile-menu.md":"y-a-1Piz","ru_arty-crafty_showcase_customization.md":"LAUIQLeS","en_development_project-structure.md":"r-OstJVv","ru_arty-crafty_showcase-data_vueuse.md":"DwWJLsbv","ru_frontend_learning.md":"Duf2ILe6","ru_arty-crafty_analysis_business-analysis.md":"Vrk4tSvF","ru_release-timeline_getting-data.md":"eaocVN8X","ru_arty-crafty_showcase_favourites.md":"BtFw6vgv","ru_development_misc.md":"CNJvYma1","en_release-timeline_vitepress.md":"D7id4Puo","ru_vue-webapp_options_index.md":"DAPvAF00","index.md":"D4Iu-XBW","ru_frontend_architecture.md":"DUwhgWXn","ru_development_project-structure.md":"D7RYwIgu","ru_vue-webapp_options_layout-one-column.md":"HUveRMYE","ru_vue-webapp_options_open-graph.md":"BUbYui8c","en_deployment_docker.md":"C8HUMZrZ","ru_frontend_about-frameworks.md":"Da2nzlxq","ru_frontend_css-ui-libs.md":"CxQFbVd7","en_vue-webapp_contribution.md":"CS8SkHr3","ru_arty-crafty_backend_baas-choosing.md":"CDt27be6","ru_vue-webapp_options_api.md":"CbOuiSrl","ru_arty-crafty_backend_db-data-model.md":"FkSYia5s","ru_arty-crafty_backend_hoppscotch.md":"CtrWv_Sj","ru_vue-webapp_options_description.md":"BQWosOK3","en_vue-webapp_options_i18n.md":"Bcbj9_T9","ru_arty-crafty_backend_supabase-api.md":"Dn3IJ3-Q","ru_misc_introduction.md":"BOSSJFuN","ru_vue-webapp_options_drawer.md":"CPSfvPI3","ru_arty-crafty_backend_supabase.md":"DlW4qju1","ru_vue-webapp_options_footer.md":"9dIqVhM5","ru_release-timeline_getting-started.md":"--rBzjeP","ru_arty-crafty_index.md":"B2UoK8Dy","ru_vue-webapp_options_google-analytics.md":"C9YQePCV","en_vue-webapp_index.md":"DIWxE5Bz","ru_arty-crafty_analysis_tech-stack.md":"K9eVW2Vt","en_vue-webapp_options_index.md":"BLTMJvPr","ru_book_chapter_10__deploying_your_application.md":"DC-alAIG","ru_release-timeline_config.md":"BB-JdR6Z","en_release-timeline_getting-started.md":"DyiMZMl8","ru_release-timeline_release-history.md":"DuYpLFA4","en_backend_auth.md":"C2lhS9ok","ru_arty-crafty_analysis_architecture-and-design.md":"av5YbhuF","en_vue-webapp_options_api.md":"D-qfidGc","en_backend_backend.md":"B_Pfaroy","en_vue-webapp_options_header.md":"Yn2Fi6aA","ru_release-timeline_vue-3.md":"K2Zkm8gY","ru_development_stores.md":"C7vjBF_3","en_release-timeline_vue-3.md":"Bx7kFYOP","ru_development_assets.md":"QcaxPg5y","en_development_ide.md":"B3seQbTc","ru_development_web-components.md":"CguDt41Z","ru_arty-crafty_introduction_development-stages.md":"B3j8VJCg","ru_vue-webapp_guidelines.md":"CX74jjas","en_vue-webapp_options_adaptability.md":"juDTEdCm","en_frontend_learning.md":"soE0AxXc","en_release-timeline_release-history.md":"DxzOgiH8","ru_book_chapter_11__bonus_chapter_-_ux_patterns.md":"CwpPllMl","ru_arty-crafty_showcase_project-setup.md":"CqsBv_eq","en_development_architectural-patterns.md":"BOHBw-S8","ru_vue-webapp_options_header.md":"DMNPktcz","ru_misc_contribute.md":"ByrbcwwB","ru_book_chapter_6__progressive_web_applications.md":"-azuZGY2","en_deployment_ci-cd.md":"vuFBUCvV","en_index.md":"C8cIpYZJ","en_vue-webapp_options_themes.md":"CWBex3PO","en_vue-webapp_options_google-analytics.md":"DW6FRpgo","ru_vue-webapp_objectives.md":"B9680vPQ","ru_book_chapter_3__setting_up_a_working_project.md":"BSizAlHy","ru_backend_protocols.md":"DO_C4wHZ","ru_development_testing.md":"DNm2QOq1","en_vue-webapp_guidelines.md":"BR4TLb_e","ru_articles_index.md":"BmPszDpy","ru_vue-webapp_contribution.md":"aOxnqrxc","ru_arty-crafty_analysis_data-model.md":"CS1KTjmq","ru_vue-webapp_options_themes.md":"CgCVy2hI","en_deployment_hosting.md":"CJMmisy1","ru_book_chapter_8__multithreading_with_web_workers.md":"ObLm-pJC","en_vue-webapp_options_ga-gp.md":"BRPRkPJ9","ru_frontend_spa-pwa-ssr-ssg.md":"DtYGFAwt","ru_misc_changelog.md":"El5O7kF-","ru_misc_cheat-sheets.md":"DYsKm8Mm","en_vue-webapp_options_navbar.md":"DjlJL_NG","en_vue-webapp_objectives.md":"BrJDbKsB","ru_arty-crafty_analysis_research.md":"CzReGJl_","ru_book_index.md":"CwK1ARGD","ru_book_summary.md":"DyVtEeng","ru_arty-crafty_analysis_ui-design.md":"BRembBsz","ru_deployment_ci-cd.md":"BPppxATK","ru_release-timeline_index.md":"B1ENFH7m","ru_arty-crafty_analysis_ui-layout.md":"DqpAXdQf","ru_deployment_docker.md":"D9n_df-b","ru_deployment_hosting.md":"Bzoy7Xzv","ru_book_chapter_9__testing_and_source_control.md":"B2ka1wZz","ru_index.md":"CGy73QG8","ru_book_chapter_1__the_vue_3_framework.md":"BfRPg0U0","ru_release-timeline_microfrontend.md":"CVrYTvEL","en_vue-webapp_options_layout-one-column.md":"DcfZdt4n","en_development_testing.md":"DUS-xi7M","ru_vue-webapp_index.md":"DsDdfI0K","ru_release-timeline_web-component.md":"C-CDodVg","en_vue-webapp_options_pwa.md":"C1ePh5yl","en_backend_protocols.md":"C2wYtxCH","en_release-timeline_web-component.md":"D4g_u0D4","ru_backend_auth.md":"C2-c5KZI","ru_vue-webapp_options_baseicon.md":"BZgy0wfV","ru_development_architectural-patterns.md":"mYxAvXqa","ru_vue-webapp_options_navbar.md":"B3X51tTB","ru_vue-webapp_options_pwa.md":"zIdv9RIk","ru_development_building.md":"cODkCwRM","ru_backend_cors.md":"DglEEZrI","en_vue-webapp_options_baseicon.md":"B2NPbipB","en_deployment_github-actions.md":"BGcqw4C7","ru_book_chapter_2__software_design_principles_and_patterns.md":"DFYhrhRF","en_vue-webapp_options_open-graph.md":"DR8xA9bD","ru_release-timeline_vitepress.md":"BPo82hG9","en_development_building.md":"CVLIlvhx","ru_development_ide.md":"DbzflZK0","en_release-timeline_getting-data.md":"D86QUoDa","ru_book_chapter_4__user_interface_composition_with_components.md":"CmT3wms-","en_vue-webapp_options_layout-main.md":"Bmum1sW4","en_release-timeline_config.md":"Cxd93gCa","ru_book_chapter_7__data_flow_management.md":"lve2qBoL","ru_book_appendix__migrating_from_vue_2.md":"zt8-vu3-","ru_vue-webapp_getting-started.md":"Bk61rGZC","ru_arty-crafty_introduction_goals.md":"D8pcQ5_e","ru_book_chapter_5__single-page_applications.md":"DSg6a7Pk"} diff --git a/index.html b/index.html index 3861afaf2..c610fd349 100644 --- a/index.html +++ b/index.html @@ -6,13 +6,13 @@ Vue FAQ - + - + - + - + @@ -31,7 +31,7 @@
Skip to content

Vue FAQ

Vue JavaScript framework FAQ

Most frequently asked questions about Vue.js

Vue FAQ
- + \ No newline at end of file diff --git a/ru/articles/index.html b/ru/articles/index.html index 922f0b2f2..98b0d47dc 100644 --- a/ru/articles/index.html +++ b/ru/articles/index.html @@ -6,13 +6,13 @@ Наши статьи на других ресурсах | Vue FAQ - + - + - + - + @@ -32,13 +32,13 @@ -
Skip to content

Наши статьи на других ресурсах


Facebook выпустил новую CSS-in-JS библиотеку — StyleX

Верней оформил 5 декабря 2023 года оформил для всех то, чем его разработчики пользуются уже давно. Позиционируется данный помощник для js-подобных фреймворков типа React, Preact, Solid, lit-html и Angular, однако оперирующие html шаблонами Vue и Svelte тоже могут задействовать StyleX, но после предварительной специальной её кастомизации.

Vue state management: Pinia stores или composables с глобальными рефами?

На Reddit прошла интересная дискуссия с 25К+ просмотрами по вопросу предпочтений разработчиков при необходимости управлять глобальным состоянием во Vue 3. Ниже её итоги.

Google и Yandex SEO оптимизация для SPA приложений

Google и Yandex утверждают, что что-то уже могут по индексированию SPA приложений. В статье показаны результаты проведенного эксперимента по индексации чистого SPA вебсайта.
Результат: Google - хорошо, Yandex - не очень

Atomic CSS здорового человека. UnoCSS

Продолжение перевода статьи «Reimagine Atomic CSS» двухлетней давности одного из членов команды Vue core Anthony Fu, автора UnoCSS, в которой рассматривается уже сам UnoCSS.

План «Барбаросса» от Vue.js

После выхода крайней и достаточно революционной в плане добавления Composition API версии Vue 3.0 более чем три года назад, каких-либо серьезных изменений от команды Evan You в самом фреймворке больше не было. Только стандартные багфиксы, оптимизация и робкие попытки стать с TypeScript ближе. Основное внимание переключилось на экосистему - Vite, Nuxt, VitePress, Pinia и другие.
В то же время, отчетливо заметно масштабирование работы не вглубь, а вширь. Интересы команды уже давно явно выходят за пределы фреймворка.

Билдер Vue 3 веб приложений

Vue 3 вебсайт билдер (npm пакет vue-webapp) позволяет создать каркас будущего веб приложения, с возможностью выбора бизнес-шаблона (портфолио, блог, магазин и .т.д.), макета сайта, дизайна и элементов функционала (API модуль, i18n, PWA, splash screen, auth модуль, темы и т.д.), для дальнейшей кастомизации и наполнения контентом.

Vue.js 3 — шаблоны проектирования и лучшие практики

Предлагается перевод книги Vue.js 3 Design Patterns and Best Practices автора Pablo Garaguso.
Книга вышла в мае 2023 года, написана очень компетентно, оперирует современными технологиями и стандартами. Материал книги будет полезен разработчикам не только Vue, но и других фронтенд фреймворков.

Vue-faq.org — FAQ о фронтенде в целом и Vue в частности

https://vue-faq.org - попытка охватить наиболее часто задаваемые в профильных чатах и конференциях вопросы о фронтенде в целом и Vue.js фреймворке в частности.

Написание Vite плагина

Сборщик Vite предоставляет не только хороший функционал, но и удобный API для создания плагинов, позволяющих кастомизировать его практически под любую задачу. То есть, плагины можно писать не только для публикации их в npmjs.com репозитории, но и для автоматизации исключительно своих задач.

Сравнение тяжеловесности популярных библиотек UI компонент для Vue 3

Библиотеки UI компонент популярны и удобны в некоторых случаях, но у них тоже есть обратные стороны. Одно дело, когда делаешь админку и используешь десятки компонент, другое - когда тебе надо всего пару компонент.
Было проведено исследование - взяты три HTML элемента: Button, Input и Select, и проверено, насколько увеличатся js и css бандлы если использовать для них одну из 10 распространенных UI библиотек для Vue 3.

Детокс для i18n

NPM библиотека для интернационализации и локализации i18n очень популярна, однако за последние годы она сильно располнела. В ней много возможностей для локализации дат, чисел, установки нужных склонений, поддержки RTL языков, загрузки локалей с сервера и кучи еще чего. На сайте i18next она называется уже даже "интернационализационным фреймворком". +
Skip to content

Наши статьи на других ресурсах


Facebook выпустил новую CSS-in-JS библиотеку — StyleX

Верней оформил 5 декабря 2023 года оформил для всех то, чем его разработчики пользуются уже давно. Позиционируется данный помощник для js-подобных фреймворков типа React, Preact, Solid, lit-html и Angular, однако оперирующие html шаблонами Vue и Svelte тоже могут задействовать StyleX, но после предварительной специальной её кастомизации.

Vue state management: Pinia stores или composables с глобальными рефами?

На Reddit прошла интересная дискуссия с 25К+ просмотрами по вопросу предпочтений разработчиков при необходимости управлять глобальным состоянием во Vue 3. Ниже её итоги.

Google и Yandex SEO оптимизация для SPA приложений

Google и Yandex утверждают, что что-то уже могут по индексированию SPA приложений. В статье показаны результаты проведенного эксперимента по индексации чистого SPA вебсайта.
Результат: Google - хорошо, Yandex - не очень

Atomic CSS здорового человека. UnoCSS

Продолжение перевода статьи «Reimagine Atomic CSS» двухлетней давности одного из членов команды Vue core Anthony Fu, автора UnoCSS, в которой рассматривается уже сам UnoCSS.

План «Барбаросса» от Vue.js

После выхода крайней и достаточно революционной в плане добавления Composition API версии Vue 3.0 более чем три года назад, каких-либо серьезных изменений от команды Evan You в самом фреймворке больше не было. Только стандартные багфиксы, оптимизация и робкие попытки стать с TypeScript ближе. Основное внимание переключилось на экосистему - Vite, Nuxt, VitePress, Pinia и другие.
В то же время, отчетливо заметно масштабирование работы не вглубь, а вширь. Интересы команды уже давно явно выходят за пределы фреймворка.

Билдер Vue 3 веб приложений

Vue 3 вебсайт билдер (npm пакет vue-webapp) позволяет создать каркас будущего веб приложения, с возможностью выбора бизнес-шаблона (портфолио, блог, магазин и .т.д.), макета сайта, дизайна и элементов функционала (API модуль, i18n, PWA, splash screen, auth модуль, темы и т.д.), для дальнейшей кастомизации и наполнения контентом.

Vue.js 3 — шаблоны проектирования и лучшие практики

Предлагается перевод книги Vue.js 3 Design Patterns and Best Practices автора Pablo Garaguso.
Книга вышла в мае 2023 года, написана очень компетентно, оперирует современными технологиями и стандартами. Материал книги будет полезен разработчикам не только Vue, но и других фронтенд фреймворков.

Vue-faq.org — FAQ о фронтенде в целом и Vue в частности

https://vue-faq.org - попытка охватить наиболее часто задаваемые в профильных чатах и конференциях вопросы о фронтенде в целом и Vue.js фреймворке в частности.

Написание Vite плагина

Сборщик Vite предоставляет не только хороший функционал, но и удобный API для создания плагинов, позволяющих кастомизировать его практически под любую задачу. То есть, плагины можно писать не только для публикации их в npmjs.com репозитории, но и для автоматизации исключительно своих задач.

Сравнение тяжеловесности популярных библиотек UI компонент для Vue 3

Библиотеки UI компонент популярны и удобны в некоторых случаях, но у них тоже есть обратные стороны. Одно дело, когда делаешь админку и используешь десятки компонент, другое - когда тебе надо всего пару компонент.
Было проведено исследование - взяты три HTML элемента: Button, Input и Select, и проверено, насколько увеличатся js и css бандлы если использовать для них одну из 10 распространенных UI библиотек для Vue 3.

Детокс для i18n

NPM библиотека для интернационализации и локализации i18n очень популярна, однако за последние годы она сильно располнела. В ней много возможностей для локализации дат, чисел, установки нужных склонений, поддержки RTL языков, загрузки локалей с сервера и кучи еще чего. На сайте i18next она называется уже даже "интернационализационным фреймворком".
- В то же время часто для локализации сайта нужны очень простые вещи, занимающие всего пару процентов от всего функционала тяжеловеса i18n. Ниже будет описана несложная процедура избавления от i18next-ной зависимости в данном случае.

Работа с i18n — автоматизация Google Translate и другие полезные советы

NPM-пакет для интернационализации i18n используется на фронтэнде для создания мультиязычных вебсайтов очень часто. Перевод текста в нем содержится обычно в json или в js файлах, и требует дальнейшей обработки, чтобы с ним с комфортом могли работать контент-редакторы. В статье описывается как максимально упростить и сделать удобным хранение и внесение изменений в перевод.

Популяризация JSON-RPC

+ В то же время часто для локализации сайта нужны очень простые вещи, занимающие всего пару процентов от всего функционала тяжеловеса i18n. Ниже будет описана несложная процедура избавления от i18next-ной зависимости в данном случае.

Работа с i18n — автоматизация Google Translate и другие полезные советы

NPM-пакет для интернационализации i18n используется на фронтэнде для создания мультиязычных вебсайтов очень часто. Перевод текста в нем содержится обычно в json или в js файлах, и требует дальнейшей обработки, чтобы с ним с комфортом могли работать контент-редакторы. В статье описывается как максимально упростить и сделать удобным хранение и внесение изменений в перевод.

Популяризация JSON-RPC

Для передачи данных по сети есть хорошо зарекомендовавшие себя стандарты - например, SOAP, gRPC, AMQP, REST, GraphQL.
-При создании вебсайтов малой, средней и большой сложности с потоками данных к бэкенду и обратно в JSON формате обычно используются последние два с их вариантами. Верней, только варианты, потому что REST и GraphQL - ресурсо-ориентированные стандарты. Это как бы просто перенос элементарной работы с базой данных на клиента (хотя под "ресурсом" может пониматься и абстракция). Обычно таких запросов не больше трети от всего бэкенд API.
- +При создании вебсайтов малой, средней и большой сложности с потоками данных к бэкенду и обратно в JSON формате обычно используются последние два с их вариантами. Верней, только варианты, потому что REST и GraphQL - ресурсо-ориентированные стандарты. Это как бы просто перенос элементарной работы с базой данных на клиента (хотя под "ресурсом" может пониматься и абстракция). Обычно таких запросов не больше трети от всего бэкенд API.
+ \ No newline at end of file diff --git a/ru/arty-crafty/analysis/architecture-and-design.html b/ru/arty-crafty/analysis/architecture-and-design.html index 78af3daa8..ce849b405 100644 --- a/ru/arty-crafty/analysis/architecture-and-design.html +++ b/ru/arty-crafty/analysis/architecture-and-design.html @@ -6,13 +6,13 @@ Архитектура и дизайн | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Архитектура и дизайн

Упрощение сложного

Самое главное правило при проектировании любых систем - KISS (keep it simple, stupid). Более благозвучно это формулируется как: "Всё гениальное просто".

Для того, чтобы управлять сложными системами, издревле люди стали разбивать их на более простые. Принцип: "Разделяй и властвуй", относится именно к этому.

image

Любое современное государство управляется через иерархичное разбиение и подчинение, давая возможность любому управляющему быть ответственным за небольшую часть системы, которую он может контролировать.

Аналогично программная система любой сложности может быть разбита на отдельные подсистемы. Чем менее две таких подсистемы будут связаны друг с другом (loosely coupled), тем проще с ними будет работать, исправлять баги, вводить в курс новых разработчиков.

Абстракция и инкапсуляция

Эти два метода объектно-ориентированного программирования хорошо действуют и здесь в веб разработке на Vue, для определения функциональных границ подсистем, и данных, которыми они обменивается между собой и с окружающим миром.

Например, у нас на фронтенде будет два представления на экране (views) - категория товара и сам товар. Кажется, что они связаны друг с другом, потому что оперируют одними сущностями, но на самом деле они вообще никак не связаны (если отвлечься от визуального вида). Каждое получает свои данные с бэкенда. Когда происходит клик на какой-либо товар в списке категории, то id товара отправляется во vue-router, который уже вызывает страницу товара с нужным id.

То же самое в паре меню категорий и самого представления категории с товарами. Меню категорий может быть довольно сложным, и вынести его в отдельную подсистему тогда будет полезно.

Это пример, как можно разбивать систему на несвязанные (или слабосвязанные) подсистемы, что очень сильно облегчает дальнейшую разработку.

Разбиение проекта на подсистемы

Замечание

Иногда будут вставать вопросы, над которыми читателю полезно подумать самому. В таких случаях, я буду формулировать вопрос, а свой ответ прятать под спойлер. Ваш вариант ответа вполне может оказаться полней и точней.

Вопрос: на какие слабосвязанные подсистемы можно разбить наш проект маркетплейса? Имеется ввиду только фронтенд. Предлагаю взять для примера Озон и исследовать его.

Вариант ответа
  • Меню категорий
  • Фильтры поиска
  • Представление категории товара
  • Представление товара
  • Секция "Похожие товары"
  • Отзывы о товаре
  • Рекламные баннеры
  • Блоки спецпредложений и рекомендаций
  • Вспомогательные страницы (подарочные сертификаты, акции и т.п.)
  • Сравнение товаров
  • Избранное
  • Заказы
  • Страница профиля
  • Корзина
  • Модуль оплаты
  • Модуль выбора вида доставки
  • Локация пункта выдачи
  • и ещё другие

Package Diagram

Примерный вид диаграммы пакетов:

image

Пакеты здесь аналоги будущих модулей в нашем приложении.

Клиент-серверная архитектура

Архитектурно приложение будет являться классическим трехуровневых приложением - фронтенд, бэкенд, база данных. На первом этапе бэкенд и база данных представляют собой статичные json файлы. Затем за них будет отвечать Headless CMS

В связи с тем, что мы разрабатываем SPA, часть бизнес логики будет на фронтенде.

image

Routing

Роутинг используется в том числе и для того, чтобы сделать наши подсистемы слабосвязанными.

На первом этапе нам нужны три маршрута:

  • главная страница
  • товары определенной категории
  • страница определенного товара

Для простоты главную страницу оставим пустой.

- +
Skip to content

Архитектура и дизайн

Упрощение сложного

Самое главное правило при проектировании любых систем - KISS (keep it simple, stupid). Более благозвучно это формулируется как: "Всё гениальное просто".

Для того, чтобы управлять сложными системами, издревле люди стали разбивать их на более простые. Принцип: "Разделяй и властвуй", относится именно к этому.

image

Любое современное государство управляется через иерархичное разбиение и подчинение, давая возможность любому управляющему быть ответственным за небольшую часть системы, которую он может контролировать.

Аналогично программная система любой сложности может быть разбита на отдельные подсистемы. Чем менее две таких подсистемы будут связаны друг с другом (loosely coupled), тем проще с ними будет работать, исправлять баги, вводить в курс новых разработчиков.

Абстракция и инкапсуляция

Эти два метода объектно-ориентированного программирования хорошо действуют и здесь в веб разработке на Vue, для определения функциональных границ подсистем, и данных, которыми они обменивается между собой и с окружающим миром.

Например, у нас на фронтенде будет два представления на экране (views) - категория товара и сам товар. Кажется, что они связаны друг с другом, потому что оперируют одними сущностями, но на самом деле они вообще никак не связаны (если отвлечься от визуального вида). Каждое получает свои данные с бэкенда. Когда происходит клик на какой-либо товар в списке категории, то id товара отправляется во vue-router, который уже вызывает страницу товара с нужным id.

То же самое в паре меню категорий и самого представления категории с товарами. Меню категорий может быть довольно сложным, и вынести его в отдельную подсистему тогда будет полезно.

Это пример, как можно разбивать систему на несвязанные (или слабосвязанные) подсистемы, что очень сильно облегчает дальнейшую разработку.

Разбиение проекта на подсистемы

Замечание

Иногда будут вставать вопросы, над которыми читателю полезно подумать самому. В таких случаях, я буду формулировать вопрос, а свой ответ прятать под спойлер. Ваш вариант ответа вполне может оказаться полней и точней.

Вопрос: на какие слабосвязанные подсистемы можно разбить наш проект маркетплейса? Имеется ввиду только фронтенд. Предлагаю взять для примера Озон и исследовать его.

Вариант ответа
  • Меню категорий
  • Фильтры поиска
  • Представление категории товара
  • Представление товара
  • Секция "Похожие товары"
  • Отзывы о товаре
  • Рекламные баннеры
  • Блоки спецпредложений и рекомендаций
  • Вспомогательные страницы (подарочные сертификаты, акции и т.п.)
  • Сравнение товаров
  • Избранное
  • Заказы
  • Страница профиля
  • Корзина
  • Модуль оплаты
  • Модуль выбора вида доставки
  • Локация пункта выдачи
  • и ещё другие

Package Diagram

Примерный вид диаграммы пакетов:

image

Пакеты здесь аналоги будущих модулей в нашем приложении.

Клиент-серверная архитектура

Архитектурно приложение будет являться классическим трехуровневых приложением - фронтенд, бэкенд, база данных. На первом этапе бэкенд и база данных представляют собой статичные json файлы. Затем за них будет отвечать Headless CMS

В связи с тем, что мы разрабатываем SPA, часть бизнес логики будет на фронтенде.

image

Routing

Роутинг используется в том числе и для того, чтобы сделать наши подсистемы слабосвязанными.

На первом этапе нам нужны три маршрута:

  • главная страница
  • товары определенной категории
  • страница определенного товара

Для простоты главную страницу оставим пустой.

+ \ No newline at end of file diff --git a/ru/arty-crafty/analysis/business-analysis.html b/ru/arty-crafty/analysis/business-analysis.html index d85d12e41..89309fd26 100644 --- a/ru/arty-crafty/analysis/business-analysis.html +++ b/ru/arty-crafty/analysis/business-analysis.html @@ -6,13 +6,13 @@ Бизнес-анализ | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Бизнес-анализ

Границы проекта

Наш случай (витрина-магазин-маркетплейс) - довольно распространенный, изученный и проверенный. Есть известные решения и лучшие практики для него - как технические (код), так и в плане подбора нужного функционала.

Если бы заказчиком был некий отдельный клиент, необходимо было бы четко задокументировать с ним в SRS каждый функционал, каждый элемент экрана сайта для избежания дальнейших проблем и претензий с обеих сторон, но так как мы "пишем с натуры", то этот момент можно опустить.

Существующие решения

Есть ли решения, который можно использовать? О бэкенде речь ниже, для фронтенда не было найдено ничего. Vue Storefront мутный продукт, предлагаемый в основном как сервис, да еще и написанный на Nuxt 2. Больше серьезных решений на Vue найдено не было.

Рассмотрим намеченные этапы развития проекта.

Витрина

На начальном этапе пользователь должен иметь возможность просматривать каталог и отдельные продукты. Визуально это означает, что в нашем веб приложении будет секция с каталогом категорий, а так же представление (view) со списком продуктов выбранной категории, и представление с описанием продукта.

С точки зрения потоков данных, веб приложение должно получать информацию о каталоге, о продуктах в определенной категории и о конкретном продукте, что означает три типа запросов к бэкенду.

На первом этапе "бэкенд" будет простыми json файлами, отдаваемыми самим сервером фронтенда.

Данные файлы будут: каталог категорий, пара файлов категорий продуктов, несколько файлов продуктов.

Задача первого этапа - настроить маршрутизацию (vue routing) и сделать возможность просматривать каталог продуктов, получая данные по сети. Данный скелет приложения позволит в дальнейшем наращивать на него функциональность.

Магазин

Здесь потребуется добавление Корзины (Shopping cart) и системы заказов (Orders). На этом этапе (и даже чуть раньше) нужно будет подключать полноценный бэкенд. Мы возьмем какое-нибудь Headless CMS e-commerce решение. Если бы это был просто наш магазин, можно было бы написать свой несложный бэкенд, однако нужна полноценная админка для технически неподкованых продавцов (merchants), а это очень трудоемко.

Со сторонним заказчиком необходимо бы было провести анализ существующих подходящих Headless CMS e-commerce решение с расчетом дальнейших затрат. Мы же ориентируемся на наличие open source решений для этого, например medusa.js, в которых есть возможность работы режиме маркетплейса.

В любом случае, решаем задачи по мере их поступления. Если мы остановимся на невозможности что-то реализовать в силу объективных обстоятельств, то как минимум витрина с возможностью сделать заказ (без онлайн оплаты) у нас будет, а значит исходная задача в необходимой мере будет решена.

Маркетплейс

На фронтенде факторизация по продавцам - это, по сути, выборка по специальному аттрибуту, который есть у каждого продукта. Однако в админке этот функционал намного более обширен. В том числе и поэтому мы ориентируемся на стороннее решение для бэкенда.

Use case диаграмма

Одним из методов решения задач бизнес анализа являются UML диаграммы, в частности, Use case диаграмма.

Use case диаграмма нашего проекта может выглядеть примерно так:

image

Разбивка по этапам очень условна.

Вот более детальный пример Use case диаграммы онлайн магазина:

Use case online store example

image

- +
Skip to content

Бизнес-анализ

Границы проекта

Наш случай (витрина-магазин-маркетплейс) - довольно распространенный, изученный и проверенный. Есть известные решения и лучшие практики для него - как технические (код), так и в плане подбора нужного функционала.

Если бы заказчиком был некий отдельный клиент, необходимо было бы четко задокументировать с ним в SRS каждый функционал, каждый элемент экрана сайта для избежания дальнейших проблем и претензий с обеих сторон, но так как мы "пишем с натуры", то этот момент можно опустить.

Существующие решения

Есть ли решения, который можно использовать? О бэкенде речь ниже, для фронтенда не было найдено ничего. Vue Storefront мутный продукт, предлагаемый в основном как сервис, да еще и написанный на Nuxt 2. Больше серьезных решений на Vue найдено не было.

Рассмотрим намеченные этапы развития проекта.

Витрина

На начальном этапе пользователь должен иметь возможность просматривать каталог и отдельные продукты. Визуально это означает, что в нашем веб приложении будет секция с каталогом категорий, а так же представление (view) со списком продуктов выбранной категории, и представление с описанием продукта.

С точки зрения потоков данных, веб приложение должно получать информацию о каталоге, о продуктах в определенной категории и о конкретном продукте, что означает три типа запросов к бэкенду.

На первом этапе "бэкенд" будет простыми json файлами, отдаваемыми самим сервером фронтенда.

Данные файлы будут: каталог категорий, пара файлов категорий продуктов, несколько файлов продуктов.

Задача первого этапа - настроить маршрутизацию (vue routing) и сделать возможность просматривать каталог продуктов, получая данные по сети. Данный скелет приложения позволит в дальнейшем наращивать на него функциональность.

Магазин

Здесь потребуется добавление Корзины (Shopping cart) и системы заказов (Orders). На этом этапе (и даже чуть раньше) нужно будет подключать полноценный бэкенд. Мы возьмем какое-нибудь Headless CMS e-commerce решение. Если бы это был просто наш магазин, можно было бы написать свой несложный бэкенд, однако нужна полноценная админка для технически неподкованых продавцов (merchants), а это очень трудоемко.

Со сторонним заказчиком необходимо бы было провести анализ существующих подходящих Headless CMS e-commerce решение с расчетом дальнейших затрат. Мы же ориентируемся на наличие open source решений для этого, например medusa.js, в которых есть возможность работы режиме маркетплейса.

В любом случае, решаем задачи по мере их поступления. Если мы остановимся на невозможности что-то реализовать в силу объективных обстоятельств, то как минимум витрина с возможностью сделать заказ (без онлайн оплаты) у нас будет, а значит исходная задача в необходимой мере будет решена.

Маркетплейс

На фронтенде факторизация по продавцам - это, по сути, выборка по специальному аттрибуту, который есть у каждого продукта. Однако в админке этот функционал намного более обширен. В том числе и поэтому мы ориентируемся на стороннее решение для бэкенда.

Use case диаграмма

Одним из методов решения задач бизнес анализа являются UML диаграммы, в частности, Use case диаграмма.

Use case диаграмма нашего проекта может выглядеть примерно так:

image

Разбивка по этапам очень условна.

Вот более детальный пример Use case диаграммы онлайн магазина:

Use case online store example

image

+ \ No newline at end of file diff --git a/ru/arty-crafty/analysis/data-model.html b/ru/arty-crafty/analysis/data-model.html index 0deb27f1e..e1a388dba 100644 --- a/ru/arty-crafty/analysis/data-model.html +++ b/ru/arty-crafty/analysis/data-model.html @@ -6,13 +6,13 @@ Модель данных | Vue FAQ - + - + - + - + @@ -53,8 +53,8 @@ "description": "...", "icon": "..." } -} - +} + \ No newline at end of file diff --git a/ru/arty-crafty/analysis/research.html b/ru/arty-crafty/analysis/research.html index be55bb999..e72a065f3 100644 --- a/ru/arty-crafty/analysis/research.html +++ b/ru/arty-crafty/analysis/research.html @@ -6,13 +6,13 @@ Анализ рынка | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Анализ рынка

Изучение конкурентов

Исследуем вебсайты других магазинов и маркетплейсов, чтобы изучить, как они выглядят и функционируют.

Сайты-аналоги

Погуглим "best marketplace". Мне выпало в том числе:

Для начала отмечаем, что для фронтенда разница между маркетплейсом и магазином - минимальна. Как функционально, так и в дизайне страницы. В случае маркетплейса на странице товара есть маленькая ссылка на магазин, и есть фильтрация по магазинам, которую можно представлять, как отдельную категорию для каждого магазина. Правда отображение товаров в этой категории отличается от обычных категорий.

Делаем мы на первом этапе витрину, но в уме держим маркетплейс. Мы не должны принимать таких решений, которые бы в будущем заставили сильно рефакторить код. Но, очевидно, что мы можем ориентироваться в дизайне на простые магазины. Расширить потом до маркетплейса будет несложно.

Самый удобный магазин/маркетплейс, с моей точки зрения, Ozon, что подтверждается его успешностью. Его структуру мы и будем копировать.

Совет

Изучать похожие сайты полезно не только для вдохновения по дизайну, но и, например, при выборе наименования того или иного компонента - посмотрите через DevTools какие названия классов используются на аналогичном html блоке у конкурентов.

- +
Skip to content

Анализ рынка

Изучение конкурентов

Исследуем вебсайты других магазинов и маркетплейсов, чтобы изучить, как они выглядят и функционируют.

Сайты-аналоги

Погуглим "best marketplace". Мне выпало в том числе:

Для начала отмечаем, что для фронтенда разница между маркетплейсом и магазином - минимальна. Как функционально, так и в дизайне страницы. В случае маркетплейса на странице товара есть маленькая ссылка на магазин, и есть фильтрация по магазинам, которую можно представлять, как отдельную категорию для каждого магазина. Правда отображение товаров в этой категории отличается от обычных категорий.

Делаем мы на первом этапе витрину, но в уме держим маркетплейс. Мы не должны принимать таких решений, которые бы в будущем заставили сильно рефакторить код. Но, очевидно, что мы можем ориентироваться в дизайне на простые магазины. Расширить потом до маркетплейса будет несложно.

Самый удобный магазин/маркетплейс, с моей точки зрения, Ozon, что подтверждается его успешностью. Его структуру мы и будем копировать.

Совет

Изучать похожие сайты полезно не только для вдохновения по дизайну, но и, например, при выборе наименования того или иного компонента - посмотрите через DevTools какие названия классов используются на аналогичном html блоке у конкурентов.

+ \ No newline at end of file diff --git a/ru/arty-crafty/analysis/tech-stack.html b/ru/arty-crafty/analysis/tech-stack.html index 5345e2e56..cf0836e5b 100644 --- a/ru/arty-crafty/analysis/tech-stack.html +++ b/ru/arty-crafty/analysis/tech-stack.html @@ -6,13 +6,13 @@ Технический стек проекта | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Технический стек проекта

Фронтенд должен писаться на Vue 3, Vite. Из обязательных библиотек - vue-router. Действует правило: если можем обойтись без какой-то зависимости - обходимся без нее. Вместо Pinia используется Composition API напрямую.

Используем TypeScript, но в меру. Типизируем только основные сущности и интерфейсы. TypeScript должен облегчать работу разработчика, а не превращать её в кошмар.

CSS3 лучше любого CSS фреймворка/библиотеки, поэтому используем его (SCSS).

ESlint конфигурация от Antony Fu.

Насчет использования библиотек UI компонент - в идеале постараемся иметь только свои компоненты, однако для быстрого прототипирования мы можем задействовать какую-то библиотеку, оборачивая ее компоненты в свои обертки для последующего безболезненного перехода на свой UI kit. То же относится к VueUse.

Для адаптивности мы устанавливаем на тэг body четыре глобальных класса - mobile, tablet, notebook и desktop, в зависимости от разрешения экрана, и используем их в стилях в компонентах. Это намного удобней прямой работы с CSS media query.

- +
Skip to content

Технический стек проекта

Фронтенд должен писаться на Vue 3, Vite. Из обязательных библиотек - vue-router. Действует правило: если можем обойтись без какой-то зависимости - обходимся без нее. Вместо Pinia используется Composition API напрямую.

Используем TypeScript, но в меру. Типизируем только основные сущности и интерфейсы. TypeScript должен облегчать работу разработчика, а не превращать её в кошмар.

CSS3 лучше любого CSS фреймворка/библиотеки, поэтому используем его (SCSS).

ESlint конфигурация от Antony Fu.

Насчет использования библиотек UI компонент - в идеале постараемся иметь только свои компоненты, однако для быстрого прототипирования мы можем задействовать какую-то библиотеку, оборачивая ее компоненты в свои обертки для последующего безболезненного перехода на свой UI kit. То же относится к VueUse.

Для адаптивности мы устанавливаем на тэг body четыре глобальных класса - mobile, tablet, notebook и desktop, в зависимости от разрешения экрана, и используем их в стилях в компонентах. Это намного удобней прямой работы с CSS media query.

+ \ No newline at end of file diff --git a/ru/arty-crafty/analysis/ui-design.html b/ru/arty-crafty/analysis/ui-design.html index 507d59a59..82a84fc5b 100644 --- a/ru/arty-crafty/analysis/ui-design.html +++ b/ru/arty-crafty/analysis/ui-design.html @@ -6,13 +6,13 @@ UI дизайн | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

UI дизайн

Дизайн сайта

Дизайн в плане визуального оформления сайта - довольно непростая вещь. Вернее, хороший дизайн. Плюс в том, что его всегда можно сделать в самую последнюю очередь.

Пока будем работать над функционалом сайта (в том числе, адаптивностью), а со стилизацией - как будет желание.

Творческие способности

Если вы не сильно творчески одаренный человек, то создать сайт полностью самому вряд ли получится. Это примерно то же, что и написать хорошую картину.

Но в отличие от картины, дизайн сайта можно перенять. Как целиком, так и по частям - главный лэйаут, функционал, типы виджетов, их компоновка, цветовые гаммы, UI компоненты, шрифт, эффекты и многое другое. Может показаться воровством, но представим, что идете вы по улице, и видите дом. Красивый. Рассматриваете кровлю, структуру штукатурки, отделку фундамента. Потом приходите к себе, закупаете стройматериалы, заказываете строительную бригаду, и делаете себе примерно так же, но своё. Воровство?

- +
Skip to content

UI дизайн

Дизайн сайта

Дизайн в плане визуального оформления сайта - довольно непростая вещь. Вернее, хороший дизайн. Плюс в том, что его всегда можно сделать в самую последнюю очередь.

Пока будем работать над функционалом сайта (в том числе, адаптивностью), а со стилизацией - как будет желание.

Творческие способности

Если вы не сильно творчески одаренный человек, то создать сайт полностью самому вряд ли получится. Это примерно то же, что и написать хорошую картину.

Но в отличие от картины, дизайн сайта можно перенять. Как целиком, так и по частям - главный лэйаут, функционал, типы виджетов, их компоновка, цветовые гаммы, UI компоненты, шрифт, эффекты и многое другое. Может показаться воровством, но представим, что идете вы по улице, и видите дом. Красивый. Рассматриваете кровлю, структуру штукатурки, отделку фундамента. Потом приходите к себе, закупаете стройматериалы, заказываете строительную бригаду, и делаете себе примерно так же, но своё. Воровство?

+ \ No newline at end of file diff --git a/ru/arty-crafty/analysis/ui-layout.html b/ru/arty-crafty/analysis/ui-layout.html index da7fe7270..bbf2cd294 100644 --- a/ru/arty-crafty/analysis/ui-layout.html +++ b/ru/arty-crafty/analysis/ui-layout.html @@ -6,13 +6,13 @@ UI макет | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

UI макет

Подберем подходящий макет (layout) для нашего сайта. Для этого можно еще раз взглянуть на уже найденные онлайн магазины в интернете.

Основные компоненты страницы

У магазинов обычно лэйаут состоит из четырех частей - header, footer, sidebar слева и центральная панель

image

Сверху будет хедер. Слева в нем будет логотип, в середине - строка поиска, справа элементы входа в личный кабинет, корзина, избранное. Сверху основного хедера можно будет добавить дополнительный сабхедер, с ссылками Снизу основного хедера будет подхедер с меню-каталогом. У нас изначально будет всего несколько пунктов там, но в дальнейшем это можно превратить в мегаменю.

В мобильной версии хедер сильно облегчен.

При показе страницы категории товаров, слева показывается сайдбар с различными фильтрами. В мобильной версии он переносится наверх. Когда показывается страница товара, то меню слева обычно нет.

Main panel

В центральной панели показывается список товаров выбранной категории либо информация о товаре.

Футер - самый простой копонент, в нем функционала практически нет, так что ничем он не примечателен.

Мобильная версия

В мобильной версии внизу появляется отдельное зафиксированное меню с ссылками:

  • Главная
  • Каталог
  • Корзина
  • Избранное
  • Логин/личный кабинет

Сразу отметим, что сайдбар, выезжающий слева в мобильной версии (каталог), это не то же самое, что сайдбар на десктопе (фильтры).

Слабая связанность

Подобное разделение на подсистемы позволяет сохранить между ними слабую связанность. Основная логика подсистемы заключена в ней самой, и с окружающим миром она взаимодействует пока только через router.

В дальнейшем, если понадобиться из одной подсистемы вызвать команду в другой, это, скорей всего, будет делаться через Composable с глобальным стейтом.

Адаптивность

Сайдбар с фильтрами, который то слева, то сверху, легко реализовать через CSS Flexbox. То же самое с различным хедером для основной и мобильной версий. Вообще, всё что можно сделать с помощью CSS, лучше делать с помощью CSS.

Вывод

Таким образом, у нас уже намечены пять компонент, которые мы можем расположить на странице, и она будет адаптивная.

На данный момент все страницы можно технически реализовать через один Layout - MainLayout. Если потом понадобится другое расположение (для страниц заказов, личного кабинета и прочего), мы добавим.

- +
Skip to content

UI макет

Подберем подходящий макет (layout) для нашего сайта. Для этого можно еще раз взглянуть на уже найденные онлайн магазины в интернете.

Основные компоненты страницы

У магазинов обычно лэйаут состоит из четырех частей - header, footer, sidebar слева и центральная панель

image

Сверху будет хедер. Слева в нем будет логотип, в середине - строка поиска, справа элементы входа в личный кабинет, корзина, избранное. Сверху основного хедера можно будет добавить дополнительный сабхедер, с ссылками Снизу основного хедера будет подхедер с меню-каталогом. У нас изначально будет всего несколько пунктов там, но в дальнейшем это можно превратить в мегаменю.

В мобильной версии хедер сильно облегчен.

При показе страницы категории товаров, слева показывается сайдбар с различными фильтрами. В мобильной версии он переносится наверх. Когда показывается страница товара, то меню слева обычно нет.

Main panel

В центральной панели показывается список товаров выбранной категории либо информация о товаре.

Футер - самый простой копонент, в нем функционала практически нет, так что ничем он не примечателен.

Мобильная версия

В мобильной версии внизу появляется отдельное зафиксированное меню с ссылками:

  • Главная
  • Каталог
  • Корзина
  • Избранное
  • Логин/личный кабинет

Сразу отметим, что сайдбар, выезжающий слева в мобильной версии (каталог), это не то же самое, что сайдбар на десктопе (фильтры).

Слабая связанность

Подобное разделение на подсистемы позволяет сохранить между ними слабую связанность. Основная логика подсистемы заключена в ней самой, и с окружающим миром она взаимодействует пока только через router.

В дальнейшем, если понадобиться из одной подсистемы вызвать команду в другой, это, скорей всего, будет делаться через Composable с глобальным стейтом.

Адаптивность

Сайдбар с фильтрами, который то слева, то сверху, легко реализовать через CSS Flexbox. То же самое с различным хедером для основной и мобильной версий. Вообще, всё что можно сделать с помощью CSS, лучше делать с помощью CSS.

Вывод

Таким образом, у нас уже намечены пять компонент, которые мы можем расположить на странице, и она будет адаптивная.

На данный момент все страницы можно технически реализовать через один Layout - MainLayout. Если потом понадобится другое расположение (для страниц заказов, личного кабинета и прочего), мы добавим.

+ \ No newline at end of file diff --git a/ru/arty-crafty/backend/baas-choosing.html b/ru/arty-crafty/backend/baas-choosing.html index fd8781d9d..0c4c98711 100644 --- a/ru/arty-crafty/backend/baas-choosing.html +++ b/ru/arty-crafty/backend/baas-choosing.html @@ -6,13 +6,13 @@ Выбор BaaS или CMS | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Выбор BaaS или CMS

JSON файлы товаров

Дальнейшая работа с json файлами продуктов и категорий имеет мало смысла - их придется делать несколько, небольшое изменение схемы потребует изменение всех файлов вручную и т.п.

Проще перейти уже к нормальному бэкенду, с динамичными данными.

Выбор CMS

После довольно долгого исследования рынка для реализации витрины и, частично, магазина, выбор пал на Supabase.

Основными критериями при выборе на этом этапе были:

  • Простота
  • Open source
  • Бесплатность при использовании из облачных сервисов (это нужно не только нам, но и тем, кто будет использовать наш проект)
  • RDBMS (SQL) в качестве базы данных (почему не подошел Firebase)
  • Возможность потом несложно переехать на другой сервис/БД/свой сервер.

Большинство CMS продуктов предлагает платные low-code решения, завязанные на них и оперирующие не с данными, как нам надо, а с более высокоуровневыми конструкциями для построения сайта.

Среди Baas (Backend as a Service) решений были рассмотрены Firebase, Appwrite, Supabase, Amplify.

Модель данных обычного магазина очень хорошо ложится именно на реляционную модель данных, уже давно хорошо зарекомендовавшую себя, в отличие от NoSQL.

Сервисы Supabase

Supabase предлагает непосредственно Postgres базу данных (можно подсоединяться прямо к ней), API сервис для доступа к базе данных посредством REST запросов, сервис для парольной и OAuth аутентификаций, Edge Functions (серверные функции), на которых можно реализовать логику бэкенда. Лимиты бесплатного плана достаточно большие.

В дальнейшем возможно разворачивание Postgres на своем сервере и использование Supabase кода через Docker, либо своего API слоя. При желании можно будет даже поменять базу на MySQL. Всё это очень важная гибкость выстраиваемой архитектуры. Если мы чего-то не учтем сейчас, или ошибемся, то потом можно будет внести изменения с некритичными затратами.

Адаптеры

Мы помним, что одним из факторов успеха при создании сложной системы является её разбиение на слабосвязные более простые подсистемы. Конкретно тут мы имеем подсистемы "База данных", "Бэкенд (API сервис Supabase)", наш фронтенд.

Компоненты фронтенда должны обмениваться данными с API Supabase. Если мы в каждом компоненте будем прописывать обращение к API через Fetch или Axios, то при замене Supabase на другой бэкенд, или на наш свой, по всему коду фронтенда надо будет делать изменения, что очень затратно. Для нивелирования этого вызовы к API выносятся в отдельный модуль - api, и теперь в компонентах будет только вызов api.products(), который при смене бэкенда менять не надо, нужно будет поменять только его реализацию в api.

В этом случае, мы применяем шаблон проектирования "Адаптер". При работе, например, с Firebase нам нужно будет написать другой адаптер, при работе со своим бэкендом - еще один. Каждый из них будет преобразовывать запрос к определенному эндпойнту за списком товаров в массив для возвращения в функции api.products().

Когда делают системы широкого пользования, то предусматривают подключение к различным сервисам. Например, тот же Vue Storefront имеет адаптеры для интеграции с API бэкендов Magento, PrestaShop, Spree и других ecommerce решений.

image

Но у нас пока только Supabase, концентрируемся на нём.

- +
Skip to content

Выбор BaaS или CMS

JSON файлы товаров

Дальнейшая работа с json файлами продуктов и категорий имеет мало смысла - их придется делать несколько, небольшое изменение схемы потребует изменение всех файлов вручную и т.п.

Проще перейти уже к нормальному бэкенду, с динамичными данными.

Выбор CMS

После довольно долгого исследования рынка для реализации витрины и, частично, магазина, выбор пал на Supabase.

Основными критериями при выборе на этом этапе были:

  • Простота
  • Open source
  • Бесплатность при использовании из облачных сервисов (это нужно не только нам, но и тем, кто будет использовать наш проект)
  • RDBMS (SQL) в качестве базы данных (почему не подошел Firebase)
  • Возможность потом несложно переехать на другой сервис/БД/свой сервер.

Большинство CMS продуктов предлагает платные low-code решения, завязанные на них и оперирующие не с данными, как нам надо, а с более высокоуровневыми конструкциями для построения сайта.

Среди Baas (Backend as a Service) решений были рассмотрены Firebase, Appwrite, Supabase, Amplify.

Модель данных обычного магазина очень хорошо ложится именно на реляционную модель данных, уже давно хорошо зарекомендовавшую себя, в отличие от NoSQL.

Сервисы Supabase

Supabase предлагает непосредственно Postgres базу данных (можно подсоединяться прямо к ней), API сервис для доступа к базе данных посредством REST запросов, сервис для парольной и OAuth аутентификаций, Edge Functions (серверные функции), на которых можно реализовать логику бэкенда. Лимиты бесплатного плана достаточно большие.

В дальнейшем возможно разворачивание Postgres на своем сервере и использование Supabase кода через Docker, либо своего API слоя. При желании можно будет даже поменять базу на MySQL. Всё это очень важная гибкость выстраиваемой архитектуры. Если мы чего-то не учтем сейчас, или ошибемся, то потом можно будет внести изменения с некритичными затратами.

Адаптеры

Мы помним, что одним из факторов успеха при создании сложной системы является её разбиение на слабосвязные более простые подсистемы. Конкретно тут мы имеем подсистемы "База данных", "Бэкенд (API сервис Supabase)", наш фронтенд.

Компоненты фронтенда должны обмениваться данными с API Supabase. Если мы в каждом компоненте будем прописывать обращение к API через Fetch или Axios, то при замене Supabase на другой бэкенд, или на наш свой, по всему коду фронтенда надо будет делать изменения, что очень затратно. Для нивелирования этого вызовы к API выносятся в отдельный модуль - api, и теперь в компонентах будет только вызов api.products(), который при смене бэкенда менять не надо, нужно будет поменять только его реализацию в api.

В этом случае, мы применяем шаблон проектирования "Адаптер". При работе, например, с Firebase нам нужно будет написать другой адаптер, при работе со своим бэкендом - еще один. Каждый из них будет преобразовывать запрос к определенному эндпойнту за списком товаров в массив для возвращения в функции api.products().

Когда делают системы широкого пользования, то предусматривают подключение к различным сервисам. Например, тот же Vue Storefront имеет адаптеры для интеграции с API бэкендов Magento, PrestaShop, Spree и других ecommerce решений.

image

Но у нас пока только Supabase, концентрируемся на нём.

+ \ No newline at end of file diff --git a/ru/arty-crafty/backend/db-data-model.html b/ru/arty-crafty/backend/db-data-model.html index d50e06556..f18c1699e 100644 --- a/ru/arty-crafty/backend/db-data-model.html +++ b/ru/arty-crafty/backend/db-data-model.html @@ -6,13 +6,13 @@ Модель данных в базе данных | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Модель данных в базе данных

Сущности

На данный момент у нас есть сущности products и categories. Отношение между ними - many-to-many. Один продукт может находиться в нескольких категориях (с учетом того, что конкретный магазин маркетплейса тоже можно рассматривать как категорию).

В реляционных базах данных такие отношения делаются отдельной таблицей, которая хранит связи между товарами и категориями.

image

Данные

Исторически название полей в реляционных базах данных должно быть snake_case, но современные БД хорошо различают регистр, и поэтому удобно именовать поля так же, как они будут в JavaScript на фронтенде - тогда можно избежать преобразования имен туда-обратно, что зачастую может вылиться в очень немаленький бойлерплейт на бэкенде.

Categories table

image

Products table

image

Category-product join table

image

В классических реляционных базах данных все данные находились в таблицах, большинство полей (колонок таблиц) было либо числом, либо строкой, либо timestamp. Соответственно, для firstName пользователя было своё поле, для lastName - своё. В итоге у Magento, например, свыше 200 таблиц в минимальной версии, и у некоторых таблиц могут быть десятки полей.

JSON поля сильно упрощают работу с данными и таблицами. В нашем случае у products есть два json поля - desc и data. В первом будут храниться данные, которые надо передать на фронтенд при запросе категории товаров (краткая информация по товарам), в data - уже полное описание товара для показа на странице товара, включая, например, отзывы пользователей. data будет намного больше по объему, чем desc. Это позволит делать запросы на бэкенд эффективно.

Поиск по json полям

Одно из преимуществ реляционных баз данных - индексация полей и быстрый поиск по ним даже с десятками миллионов записей в таблице.

У нас есть форма поиска на сайте, мы, естественно, захотим искать по полному описанию товара, который находится в поле data таблицы products. Это тоже возможно, потому что MySQL, например, по каждому параметру внутри json поля, по которому должен быть поиск, создает дополнительное виртуальное поле в этой таблице, и индексирует его для оптимизации поиска или join-ов. Postgres наверняка делает примерно то же самое. Таким образом, хранение данных в json полях не ограничивает функционал реляционных баз данных.

- +
Skip to content

Модель данных в базе данных

Сущности

На данный момент у нас есть сущности products и categories. Отношение между ними - many-to-many. Один продукт может находиться в нескольких категориях (с учетом того, что конкретный магазин маркетплейса тоже можно рассматривать как категорию).

В реляционных базах данных такие отношения делаются отдельной таблицей, которая хранит связи между товарами и категориями.

image

Данные

Исторически название полей в реляционных базах данных должно быть snake_case, но современные БД хорошо различают регистр, и поэтому удобно именовать поля так же, как они будут в JavaScript на фронтенде - тогда можно избежать преобразования имен туда-обратно, что зачастую может вылиться в очень немаленький бойлерплейт на бэкенде.

Categories table

image

Products table

image

Category-product join table

image

В классических реляционных базах данных все данные находились в таблицах, большинство полей (колонок таблиц) было либо числом, либо строкой, либо timestamp. Соответственно, для firstName пользователя было своё поле, для lastName - своё. В итоге у Magento, например, свыше 200 таблиц в минимальной версии, и у некоторых таблиц могут быть десятки полей.

JSON поля сильно упрощают работу с данными и таблицами. В нашем случае у products есть два json поля - desc и data. В первом будут храниться данные, которые надо передать на фронтенд при запросе категории товаров (краткая информация по товарам), в data - уже полное описание товара для показа на странице товара, включая, например, отзывы пользователей. data будет намного больше по объему, чем desc. Это позволит делать запросы на бэкенд эффективно.

Поиск по json полям

Одно из преимуществ реляционных баз данных - индексация полей и быстрый поиск по ним даже с десятками миллионов записей в таблице.

У нас есть форма поиска на сайте, мы, естественно, захотим искать по полному описанию товара, который находится в поле data таблицы products. Это тоже возможно, потому что MySQL, например, по каждому параметру внутри json поля, по которому должен быть поиск, создает дополнительное виртуальное поле в этой таблице, и индексирует его для оптимизации поиска или join-ов. Postgres наверняка делает примерно то же самое. Таким образом, хранение данных в json полях не ограничивает функционал реляционных баз данных.

+ \ No newline at end of file diff --git a/ru/arty-crafty/backend/hoppscotch.html b/ru/arty-crafty/backend/hoppscotch.html index ebd0c8d85..bf6041f24 100644 --- a/ru/arty-crafty/backend/hoppscotch.html +++ b/ru/arty-crafty/backend/hoppscotch.html @@ -6,13 +6,13 @@ Hoppscotch | Vue FAQ - + - + - + - + @@ -47,8 +47,8 @@ curl --request GET \ --url 'https://client_id.supabase.co/rest/v1/products?select=id,title,desc,data&id=eq.2' \ --header 'Authorization: Bearer $apiKey$' \ - --header 'apikey: $apiKey$'

Второй запрос - это LEFT JOIN на таблицах categories и products. К сожалению документация Supabase не очень детально описывает join-ы, пришлось поэкспериментировать.

- + --header 'apikey: $apiKey$'

Второй запрос - это LEFT JOIN на таблицах categories и products. К сожалению документация Supabase не очень детально описывает join-ы, пришлось поэкспериментировать.

+ \ No newline at end of file diff --git a/ru/arty-crafty/backend/supabase-api.html b/ru/arty-crafty/backend/supabase-api.html index 1ada991e4..1e3fe9aae 100644 --- a/ru/arty-crafty/backend/supabase-api.html +++ b/ru/arty-crafty/backend/supabase-api.html @@ -6,13 +6,13 @@ Supabase REST API | Vue FAQ - + - + - + - + @@ -66,8 +66,8 @@ curl -X DELETE 'https://client_id.supabase.co/rest/v1/products?some_column=eq.someValue' \ -H "apikey: SUPABASE_CLIENT_ANON_KEY" \ --H "Authorization: Bearer SUPABASE_CLIENT_ANON_KEY"

Мы будем использовать второй способ, - опять же, чтобы не внедрять необязательные зависимости. Плюс, дебажить явные HTTP запросы намного проще.

Доступ через REST API использует библиотеку PostgREST, написанную на Haskell. На её сайте можно ознакомиться с богатым синтаксисом возможных запросов.

Таким образом, на данный момент мы используем Postgres базу данных и PostgREST библиотеку/сервер. От самой Supabase пока что только удобная админка для управления БД.

- +-H "Authorization: Bearer SUPABASE_CLIENT_ANON_KEY"

Мы будем использовать второй способ, - опять же, чтобы не внедрять необязательные зависимости. Плюс, дебажить явные HTTP запросы намного проще.

Доступ через REST API использует библиотеку PostgREST, написанную на Haskell. На её сайте можно ознакомиться с богатым синтаксисом возможных запросов.

Таким образом, на данный момент мы используем Postgres базу данных и PostgREST библиотеку/сервер. От самой Supabase пока что только удобная админка для управления БД.

+ \ No newline at end of file diff --git a/ru/arty-crafty/backend/supabase.html b/ru/arty-crafty/backend/supabase.html index 95f45bd47..f9cc498d0 100644 --- a/ru/arty-crafty/backend/supabase.html +++ b/ru/arty-crafty/backend/supabase.html @@ -6,13 +6,13 @@ Supabase | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Supabase

Создание проекта

Зарегистрироваться и создать проект на Supabase достаточно несложно. После регистрации предоставляется два API ключа. Один - рутовский secret, и второй - public, для обычного доступа к REST API. В дальнейшем будем говорить только о ключе public.

image

Безопасность и доступ

Доступ к таблицам в базе данных Supabase регулируется ключом и политиками (policies). При отсутствий политик, зная ключ через REST API можно выполнять основные CRUD SQL запросы. Соответственно, если мы делаем запрос, скажем, к таблице product с фронтенда, то ключ будет в бандле приложения, и вытащить его и запустить другие запросы не составит труда.

Соответственно, необходимо разрешить использование ключа для REST запросов только на чтение (select). Делается это созданием соответствующей политики у таблицы.

image

Этого вполне достаточно для варианта "Витрина", в котором не нужно размещать заказы, создавать пользователей и прочее. В дальнейшем, при необходимости записи в базу данных, придется использовать свой слой бэкенда либо иное решение.

Если использовать сервис аутентификации Supabase, то возможно создавать политики для зарегистрированных пользователей - то есть, например, позволить работать со своим профилем, личным кабинетом, заказами. Но для лучшей безопасности лучше все-таки, всё это пропускать через свой бэкенд.

- +
Skip to content

Supabase

Создание проекта

Зарегистрироваться и создать проект на Supabase достаточно несложно. После регистрации предоставляется два API ключа. Один - рутовский secret, и второй - public, для обычного доступа к REST API. В дальнейшем будем говорить только о ключе public.

image

Безопасность и доступ

Доступ к таблицам в базе данных Supabase регулируется ключом и политиками (policies). При отсутствий политик, зная ключ через REST API можно выполнять основные CRUD SQL запросы. Соответственно, если мы делаем запрос, скажем, к таблице product с фронтенда, то ключ будет в бандле приложения, и вытащить его и запустить другие запросы не составит труда.

Соответственно, необходимо разрешить использование ключа для REST запросов только на чтение (select). Делается это созданием соответствующей политики у таблицы.

image

Этого вполне достаточно для варианта "Витрина", в котором не нужно размещать заказы, создавать пользователей и прочее. В дальнейшем, при необходимости записи в базу данных, придется использовать свой слой бэкенда либо иное решение.

Если использовать сервис аутентификации Supabase, то возможно создавать политики для зарегистрированных пользователей - то есть, например, позволить работать со своим профилем, личным кабинетом, заказами. Но для лучшей безопасности лучше все-таки, всё это пропускать через свой бэкенд.

+ \ No newline at end of file diff --git a/ru/arty-crafty/index.html b/ru/arty-crafty/index.html index 0981bfb35..f9616a8aa 100644 --- a/ru/arty-crafty/index.html +++ b/ru/arty-crafty/index.html @@ -6,13 +6,13 @@ Онлайн маркетплейс | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Онлайн маркетплейс

Проект Arty-Crafty

Здесь будет описываться процесс разработки онлайн маркетплейса. Разработка будет вестись поэтапно: витрина => магазин => маркетплейс. В некотором виде, туториал создания программного продукта от начала и до конца (какого-то). Репозиторий проекта.

Причины

Однажды я познакомился с мастером, которая вязала вот такие очень красивые интерьерные игрушки:

игрушки

image

Предложил ей сделать в интернете выставочную витрину. Однако когда я попытался найти готовые или полуготовые удобные современные open source решения для этого, оказалось, что их нет. Были опробованы headless e-commerce решения, вроде medusajs, и фронтенды типа VueStorefront, однако единственное, что нормально смогло заработать без значительных вложений времени и средств, был старый добрый php-ный OpenCart. И то, сразу же возникли проблемы при импорте данных.

Так появилось решение об этом проекте.

Цель

Создать e-commerce софт, который можно потом будет легко кастомизировать и настраивать для работы с любыми CMS, выйти на IPO и заработать много миллионов денег. Ниша свободна. Попутно сделать витрину/магазин для игрушек.

Также проект хорошо подходит как сайд или пет-проект, для обучения и развития, так что можно присоединяться к разработке.

Что здесь будет?

Описание организации проекта, его основных этапов, ключевых действий, объяснение причин принятия тех или иных решений. Здесь кода особо не будет (в репозитории). Будут CMV (coding music video).

Youtube-ов не планируется, монетизация от "курсов" не предусмотрена. Фидбеки, вопросы и советы можно оставлять в Telegram в комментариях.

Для чего?

В приличных вузах аспиранты обязаны заниматься преподавательской деятельностью. Подготовка материала и "проговаривание" его другим даёт возможность достичь более глубокого уровня понимания предмета. Поэтому польза тут обоюдная.


Замечание

Основная цель данного проекта - создать продукт высокого качества. Образовательный аспект - попутный. Поэтому стратегии: "Сперва сделаем плохо, а потом будем улучшать", не будет. Сразу делаем хорошо.


image

- +
Skip to content

Онлайн маркетплейс

Проект Arty-Crafty

Здесь будет описываться процесс разработки онлайн маркетплейса. Разработка будет вестись поэтапно: витрина => магазин => маркетплейс. В некотором виде, туториал создания программного продукта от начала и до конца (какого-то). Репозиторий проекта.

Причины

Однажды я познакомился с мастером, которая вязала вот такие очень красивые интерьерные игрушки:

игрушки

image

Предложил ей сделать в интернете выставочную витрину. Однако когда я попытался найти готовые или полуготовые удобные современные open source решения для этого, оказалось, что их нет. Были опробованы headless e-commerce решения, вроде medusajs, и фронтенды типа VueStorefront, однако единственное, что нормально смогло заработать без значительных вложений времени и средств, был старый добрый php-ный OpenCart. И то, сразу же возникли проблемы при импорте данных.

Так появилось решение об этом проекте.

Цель

Создать e-commerce софт, который можно потом будет легко кастомизировать и настраивать для работы с любыми CMS, выйти на IPO и заработать много миллионов денег. Ниша свободна. Попутно сделать витрину/магазин для игрушек.

Также проект хорошо подходит как сайд или пет-проект, для обучения и развития, так что можно присоединяться к разработке.

Что здесь будет?

Описание организации проекта, его основных этапов, ключевых действий, объяснение причин принятия тех или иных решений. Здесь кода особо не будет (в репозитории). Будут CMV (coding music video).

Youtube-ов не планируется, монетизация от "курсов" не предусмотрена. Фидбеки, вопросы и советы можно оставлять в Telegram в комментариях.

Для чего?

В приличных вузах аспиранты обязаны заниматься преподавательской деятельностью. Подготовка материала и "проговаривание" его другим даёт возможность достичь более глубокого уровня понимания предмета. Поэтому польза тут обоюдная.


Замечание

Основная цель данного проекта - создать продукт высокого качества. Образовательный аспект - попутный. Поэтому стратегии: "Сперва сделаем плохо, а потом будем улучшать", не будет. Сразу делаем хорошо.


image

+ \ No newline at end of file diff --git a/ru/arty-crafty/introduction/development-stages.html b/ru/arty-crafty/introduction/development-stages.html index fbd7f6ce2..0d396c24d 100644 --- a/ru/arty-crafty/introduction/development-stages.html +++ b/ru/arty-crafty/introduction/development-stages.html @@ -6,13 +6,13 @@ План работы | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

План работы

Стадии разработки ПО

Классически разработка программного обеспечения состоит из следующих шагов (software development lifecycle - SDLC):

  1. Бизнес-анализ
  2. Архитектура и дизайн
  3. Разработка
  4. Развертывание
  5. Тестирование и QA
  6. Документирование
  7. Поддержка

С пятого шага можно вернуться на второй или третий для корректировки требований и плана, и таких итераций может быть много.

Рассмотрим каждую стадию отдельно.

Бизнес-анализ

Цель данной стадии в том, чтобы изучить представление заказчика о том, что он хочет получить, и перевести его на язык, понятный разработчикам. Даже если клиент и разработчик - это вы. Проблема кроется в восприятии, терминах и понятийном аппарате в целом. Недопонимание может привести к нарушению сроков, «раздутому» бюджету проекта и несоответствию результата целям бизнеса.

В процессе работы аналитика, как интерпретатора с языка бизнеса на язык IT, как правило, возникают следующие артефакты:

  • Видение проекта. Определяются границы проекта.
  • Скоуп задач. Позволяет определить, кто и какие задачи будет выполнять.
  • Описание сущностей. Описание логических связей между сущностями, потоков данных.
  • Диаграммы. Используются для наглядного описания процессов, алгоритмов, взаимосвязей между сущностями и т.д.
  • Описание поведения UI интерфейса. Нужно для более чёткого понимания, как работает интерфейс, какие существуют правила и как обрабатываются альтернативные сценарии.
  • Нефункциональные требования. Касаются производительности, безопасности и т.д.
  • Пользовательская документация. Объясняет, как пользователю использовать программу.

Архитектура и дизайн

Архитектура системы описывает ее основные компоненты, их взаимосвязи и способы взаимодействия друг с другом.

Она определяет структурированное решение, удовлетворяющее всем техническим и эксплуатационным требованиям, оптимизируя при этом общие атрибуты качества, такие как производительность и безопасность.

Кроме того, она включает в себя набор важных решений, связанных с разработкой программного обеспечения, и каждое из этих решений может оказать значительное влияние на качество, сопровождаемость, производительность и общий успех конечного продукта. Эти решения включают в себя:

  • Выбор основных структурных элементов и их интерфейсов, из которых состоит система.
  • Поведение, определяемое взаимодействием между этими элементами.
  • Объединение этих структурных и поведенческих элементов в бОльшую подсистему.
  • Согласование архитектурных решений с бизнес-целями.
  • Архитектурное руководство по стилю (style guide) для дальнейшей разработки.

Хорошая архитектура позволяет комфортно разрабатывать проект и удобно поддерживать и модифицировать его в долгосрочной перспективе.

Дизайн программной системы предусматривает разработку спецификации (software requirements specification - SRS), которая описывает элементы системы, их соответствие и совместную работу для выполнения требований, предъявляемых к системе. Дизайн выполняет роль чертежа в процессе разработки.

Разработка

Разработка включает в себя реализацию поставленных в спецификации задач.

Развертывание

Развертывание на сервере. CI/CD для автоматизации не только доставки, билда и деплоя, но и тестирования, бэкапа, версионности.

Тестирование и QA

Тестирование на первом этапе ручное, после - интеграционные (e2e) тесты.

Документирование

Данное руководство будет служить документацией, пока не понадобится отдельная.

Поддержка

Поддержка включает в себя не только оказание помощи пользователям и исправление ошибок, но и получение обратной связи от них с целью улучшения продукта.

- +
Skip to content

План работы

Стадии разработки ПО

Классически разработка программного обеспечения состоит из следующих шагов (software development lifecycle - SDLC):

  1. Бизнес-анализ
  2. Архитектура и дизайн
  3. Разработка
  4. Развертывание
  5. Тестирование и QA
  6. Документирование
  7. Поддержка

С пятого шага можно вернуться на второй или третий для корректировки требований и плана, и таких итераций может быть много.

Рассмотрим каждую стадию отдельно.

Бизнес-анализ

Цель данной стадии в том, чтобы изучить представление заказчика о том, что он хочет получить, и перевести его на язык, понятный разработчикам. Даже если клиент и разработчик - это вы. Проблема кроется в восприятии, терминах и понятийном аппарате в целом. Недопонимание может привести к нарушению сроков, «раздутому» бюджету проекта и несоответствию результата целям бизнеса.

В процессе работы аналитика, как интерпретатора с языка бизнеса на язык IT, как правило, возникают следующие артефакты:

  • Видение проекта. Определяются границы проекта.
  • Скоуп задач. Позволяет определить, кто и какие задачи будет выполнять.
  • Описание сущностей. Описание логических связей между сущностями, потоков данных.
  • Диаграммы. Используются для наглядного описания процессов, алгоритмов, взаимосвязей между сущностями и т.д.
  • Описание поведения UI интерфейса. Нужно для более чёткого понимания, как работает интерфейс, какие существуют правила и как обрабатываются альтернативные сценарии.
  • Нефункциональные требования. Касаются производительности, безопасности и т.д.
  • Пользовательская документация. Объясняет, как пользователю использовать программу.

Архитектура и дизайн

Архитектура системы описывает ее основные компоненты, их взаимосвязи и способы взаимодействия друг с другом.

Она определяет структурированное решение, удовлетворяющее всем техническим и эксплуатационным требованиям, оптимизируя при этом общие атрибуты качества, такие как производительность и безопасность.

Кроме того, она включает в себя набор важных решений, связанных с разработкой программного обеспечения, и каждое из этих решений может оказать значительное влияние на качество, сопровождаемость, производительность и общий успех конечного продукта. Эти решения включают в себя:

  • Выбор основных структурных элементов и их интерфейсов, из которых состоит система.
  • Поведение, определяемое взаимодействием между этими элементами.
  • Объединение этих структурных и поведенческих элементов в бОльшую подсистему.
  • Согласование архитектурных решений с бизнес-целями.
  • Архитектурное руководство по стилю (style guide) для дальнейшей разработки.

Хорошая архитектура позволяет комфортно разрабатывать проект и удобно поддерживать и модифицировать его в долгосрочной перспективе.

Дизайн программной системы предусматривает разработку спецификации (software requirements specification - SRS), которая описывает элементы системы, их соответствие и совместную работу для выполнения требований, предъявляемых к системе. Дизайн выполняет роль чертежа в процессе разработки.

Разработка

Разработка включает в себя реализацию поставленных в спецификации задач.

Развертывание

Развертывание на сервере. CI/CD для автоматизации не только доставки, билда и деплоя, но и тестирования, бэкапа, версионности.

Тестирование и QA

Тестирование на первом этапе ручное, после - интеграционные (e2e) тесты.

Документирование

Данное руководство будет служить документацией, пока не понадобится отдельная.

Поддержка

Поддержка включает в себя не только оказание помощи пользователям и исправление ошибок, но и получение обратной связи от них с целью улучшения продукта.

+ \ No newline at end of file diff --git a/ru/arty-crafty/introduction/goals.html b/ru/arty-crafty/introduction/goals.html index 0492bc0df..4004af7ee 100644 --- a/ru/arty-crafty/introduction/goals.html +++ b/ru/arty-crafty/introduction/goals.html @@ -6,13 +6,13 @@ Цели и задачи проекта | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Цели и задачи проекта

Цели данного проекта:

  1. Постепенное построение продукта: начиная с витрины с простым статичным бэкендом в форме json файлов и заканчивая полноценным маркетплейсом со сторонним headless e-commerce решением.
  2. При разработке должны использоваться последние проверенные достижения Vue.js экосистемы и лучшие практики в разработке программного обеспечения.
  3. Проект должен быть примером грамотной реализации проекта по разработке ПО, начиная с архитектуры и заканчивая кодом.
  4. Программная система должна быть удобна для использования, кастомизации и развертывания для человека, не знакомого с Vue, - то есть, представлять из себя продукт для конечного пользователя.

Нефункциональные требования (software quality attributes)

  1. Высокий UX
  2. Производительность
  3. Безопасность
  4. Функциональность
  5. Расширяемость
  6. Понятный задокументированный чистый код, использование лучших практик

Общие функциональные требования

  1. PWA
  2. Глубоко настраиваемые темы. Как общие, так и для каждого магазина маркетплейса.
  3. i18n (интернационализация)

Этапы развития приложения (приблизительно)

  1. Витрина (показ каталога категорий и товаров из них)
  2. Бэкенд и база данных
  3. Поиск по товарам, маркетплейс (отдельные магазины)
  4. UI/UX
  5. Интеграция с E-commerce headless решением
  6. Аутентификация и авторизация
  7. Корзина для покупок, оформление заказов, личный кабинет покупателя
  8. Добавление различного функционала: методы оплаты, доставки, рейтинги товаров, отзывы покупателей, customer service
  9. SEO оптимизация
  10. Административная панель для магазинов маркетплейса

Разработка будет вестись постепенно, по этапам, описанным выше. После каждого этапа должно получаться рабочее (продуктовое) приложение. Разбиение большой задачи на небольшие подзадачи и всего процесса стадии сильно упрощает управление проектом и повышает вероятность итогового положительного исхода.

- +
Skip to content

Цели и задачи проекта

Цели данного проекта:

  1. Постепенное построение продукта: начиная с витрины с простым статичным бэкендом в форме json файлов и заканчивая полноценным маркетплейсом со сторонним headless e-commerce решением.
  2. При разработке должны использоваться последние проверенные достижения Vue.js экосистемы и лучшие практики в разработке программного обеспечения.
  3. Проект должен быть примером грамотной реализации проекта по разработке ПО, начиная с архитектуры и заканчивая кодом.
  4. Программная система должна быть удобна для использования, кастомизации и развертывания для человека, не знакомого с Vue, - то есть, представлять из себя продукт для конечного пользователя.

Нефункциональные требования (software quality attributes)

  1. Высокий UX
  2. Производительность
  3. Безопасность
  4. Функциональность
  5. Расширяемость
  6. Понятный задокументированный чистый код, использование лучших практик

Общие функциональные требования

  1. PWA
  2. Глубоко настраиваемые темы. Как общие, так и для каждого магазина маркетплейса.
  3. i18n (интернационализация)

Этапы развития приложения (приблизительно)

  1. Витрина (показ каталога категорий и товаров из них)
  2. Бэкенд и база данных
  3. Поиск по товарам, маркетплейс (отдельные магазины)
  4. UI/UX
  5. Интеграция с E-commerce headless решением
  6. Аутентификация и авторизация
  7. Корзина для покупок, оформление заказов, личный кабинет покупателя
  8. Добавление различного функционала: методы оплаты, доставки, рейтинги товаров, отзывы покупателей, customer service
  9. SEO оптимизация
  10. Административная панель для магазинов маркетплейса

Разработка будет вестись постепенно, по этапам, описанным выше. После каждого этапа должно получаться рабочее (продуктовое) приложение. Разбиение большой задачи на небольшие подзадачи и всего процесса стадии сильно упрощает управление проектом и повышает вероятность итогового положительного исхода.

+ \ No newline at end of file diff --git a/ru/arty-crafty/introduction/repository.html b/ru/arty-crafty/introduction/repository.html index 8ac7d754d..5db3cf8ec 100644 --- a/ru/arty-crafty/introduction/repository.html +++ b/ru/arty-crafty/introduction/repository.html @@ -6,13 +6,13 @@ Репозиторий и сайт проекта | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ - - + + \ No newline at end of file diff --git a/ru/arty-crafty/showcase-data/api-service-adapter.html b/ru/arty-crafty/showcase-data/api-service-adapter.html index 44a51c1de..c113d72b2 100644 --- a/ru/arty-crafty/showcase-data/api-service-adapter.html +++ b/ru/arty-crafty/showcase-data/api-service-adapter.html @@ -6,13 +6,13 @@ Работа с API на фронтенде | Vue FAQ - + - + - + - + @@ -45,8 +45,8 @@ },

Ну и запрос информации о товаре:

js
async product(id: number) {
   const data = await http.get(`${SB}/products?select=id,title,summary,data&id=eq.${id}`);
   return data[0] ?? null;
-},

Как видно, вынос транспортной логики в отдельный сервис сильно облегчает работу при замене бэкенда и делает код в основном приложении чище и понятней.

- +},

Как видно, вынос транспортной логики в отдельный сервис сильно облегчает работу при замене бэкенда и делает код в основном приложении чище и понятней.

+ \ No newline at end of file diff --git a/ru/arty-crafty/showcase-data/mobile-menu.html b/ru/arty-crafty/showcase-data/mobile-menu.html index d7e8d9e45..cebb15bb6 100644 --- a/ru/arty-crafty/showcase-data/mobile-menu.html +++ b/ru/arty-crafty/showcase-data/mobile-menu.html @@ -6,13 +6,13 @@ Мобильное меню, CSS | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Мобильное меню, CSS

IconButton

В мобильном виде обычно на подобных сайтах есть нижнее меню. Кнопки с иконками тут сильно похожи на те, что используются в главном хедере, значит пора выделить их в отдельный компонент BaseIconButton. При создании базовых UI компонент есть искушение сделать его как можно универсальней, со множеством опций, но лучше делать самое необходимое с возможностью расширения позже. В нашем случае добавим только badge.

image

Заменяем в AppHeader кнопки на BaseIconButton.

SCSS => CSS

От SCSS мы используем только nesting (вкладывание селекторов друг в друга). Эта удобная фунциональность уже часть современного CSS, поддерживается последними версиями всех браузеров, но общая поддержка около 90%. Через полгода-год уже должна быть достаточная поддержка браузерами, чтобы мы использовали чистый CSS.

Перейдем на него уже сейчас, и будем использовать postcss-nesting пакет для преобразования CSS с nesting в простой CSS. Это позволит в будущем просто убрать этот пакет из проекта, не меняя код. В противном случае при переходе надо будет немного править каждый блок SCSS в каждом SFC.

Итак, убираем из зависимостей пакет sass, добавляем postcss-nesting, в каждом SFC файле убираем lang="scss", и заменяем двуслешные // ... комментарии SCSS на /* ... */ комментарии CSS. Всё работает.

Есть небольшая терпимая проблема с подсветкой CSS с nesting в VS Code, но есть и "плюс" - теперь по селектору из блока стилей можно по SHIFT+F12 попасть в нужное место в шаблоне. С SCSS это было нельзя.

Tag и CMV

Загружаем в репозиторий и ставим тэг - v0.4

Coding music video

- +
Skip to content

Мобильное меню, CSS

IconButton

В мобильном виде обычно на подобных сайтах есть нижнее меню. Кнопки с иконками тут сильно похожи на те, что используются в главном хедере, значит пора выделить их в отдельный компонент BaseIconButton. При создании базовых UI компонент есть искушение сделать его как можно универсальней, со множеством опций, но лучше делать самое необходимое с возможностью расширения позже. В нашем случае добавим только badge.

image

Заменяем в AppHeader кнопки на BaseIconButton.

SCSS => CSS

От SCSS мы используем только nesting (вкладывание селекторов друг в друга). Эта удобная фунциональность уже часть современного CSS, поддерживается последними версиями всех браузеров, но общая поддержка около 90%. Через полгода-год уже должна быть достаточная поддержка браузерами, чтобы мы использовали чистый CSS.

Перейдем на него уже сейчас, и будем использовать postcss-nesting пакет для преобразования CSS с nesting в простой CSS. Это позволит в будущем просто убрать этот пакет из проекта, не меняя код. В противном случае при переходе надо будет немного править каждый блок SCSS в каждом SFC.

Итак, убираем из зависимостей пакет sass, добавляем postcss-nesting, в каждом SFC файле убираем lang="scss", и заменяем двуслешные // ... комментарии SCSS на /* ... */ комментарии CSS. Всё работает.

Есть небольшая терпимая проблема с подсветкой CSS с nesting в VS Code, но есть и "плюс" - теперь по селектору из блока стилей можно по SHIFT+F12 попасть в нужное место в шаблоне. С SCSS это было нельзя.

Tag и CMV

Загружаем в репозиторий и ставим тэг - v0.4

Coding music video

+ \ No newline at end of file diff --git a/ru/arty-crafty/showcase-data/product-page.html b/ru/arty-crafty/showcase-data/product-page.html index db8dc0bb4..542f63fe9 100644 --- a/ru/arty-crafty/showcase-data/product-page.html +++ b/ru/arty-crafty/showcase-data/product-page.html @@ -6,13 +6,13 @@ Слайдер, ProductView | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Слайдер, ProductView

На главную страницу для красоты поставили embla-carousel - это легкий js слайдер, многие опции которого управляются через CSS стили, что может быть непривычно, но намного эффективней прослойки из пропсов и дополнительных Vue компонент. Пока заполнили его картинками товаров, после надо будет адаптировать под него карточки товаров.

ProductView

Пришло время страницы товара. Она состоит из галереи картинок/видео.

- +
Skip to content

Слайдер, ProductView

На главную страницу для красоты поставили embla-carousel - это легкий js слайдер, многие опции которого управляются через CSS стили, что может быть непривычно, но намного эффективней прослойки из пропсов и дополнительных Vue компонент. Пока заполнили его картинками товаров, после надо будет адаптировать под него карточки товаров.

ProductView

Пришло время страницы товара. Она состоит из галереи картинок/видео.

+ \ No newline at end of file diff --git a/ru/arty-crafty/showcase-data/typescript.html b/ru/arty-crafty/showcase-data/typescript.html index cabea5ff6..62a6edcdd 100644 --- a/ru/arty-crafty/showcase-data/typescript.html +++ b/ru/arty-crafty/showcase-data/typescript.html @@ -6,13 +6,13 @@ TypeScript | Vue FAQ - + - + - + - + @@ -53,8 +53,8 @@ // ... const product = ref<Product>(); -product.value = await api.products.product(props.productId); - +product.value = await api.products.product(props.productId); + \ No newline at end of file diff --git a/ru/arty-crafty/showcase-data/vueuse.html b/ru/arty-crafty/showcase-data/vueuse.html index 04f718412..99571da98 100644 --- a/ru/arty-crafty/showcase-data/vueuse.html +++ b/ru/arty-crafty/showcase-data/vueuse.html @@ -6,13 +6,13 @@ VueUse | Vue FAQ - + - + - + - + @@ -43,8 +43,8 @@ ls.init(); ls.observe("favourites", favourites); ls.observe("isDarkTheme", isDarkTheme); -}

Все переменные будут храниться в одном объекте в LocalStorage , а не каждая в своем.

Библиотека VueUse

VueUse - популярная библиотека, состоящая из небольших утилит. Нисколько не умаляя вклад Anthony Fu в экосистему Vue, опишу, почему я не использую её и не рекомендую для серьезных проектов и опытных разработчиков.

  1. Все утилиты в ней - небольшие. Под "небольшие" я подразумеваю, что аналогичный свой код будет в 10-50 строк. В зависимости от обстоятельств и требований, свой код может быть и в пять строк (аналог onClickOutside), и в две (использование LocalStorage). Кроме того, на проект нужно обычно всего 2-3 подобных утилит оттуда. Подключать из-за этого всю библиотеку нецелесообразно, несмотря на tree-shaking.

  2. Это зависимость, и как все зависимости может измениться, устареть, получить уязвимость, тормозить развитие проекта и прочее, прочее. С большинством активно развивавшихся библиотек такое случалось.

  3. Утилиты в ней не делают то, что надо именно тебе. Например, мне для адаптивности нужно ставить соответствующий CSS класс на <body> при изменении ширины экрана. В библиотеке есть две утилиты, работающие с шириной экрана, но ни одна не дает именно то, что надо. Приходится преобразовывать данные от useBreakponts в свои, и весь код занимает половину кода своей реализации, которая достаточно проста и прямолинейна, и вполне может быть даже сгенерирована AI ботом.

  4. В утилитах VueUse содержится избыточная и чрезмерная логика и код (с точки зрения вашего конкретного проекта). Если бы это был простой js код, было бы еще ничего, но это реактивный код. Если открыть исходники useBreakponts, то можно увидеть с десяток computed переменных, которые ты не используешь. Но учитывая, что только в версии 3.4 Vue пофиксила баг, при котором компьютеды пересчитывались, хотя ни одна из входящих в них переменная не менялась, нет никаких гарантий, что при изменении экрана или сдвиге мышки не будет производиться множество не нужных тебе пересчетов. Это влияет на производительность.

  5. Указанная выше проблема, это не недостаток именно VueUse. Попробуйте написать универсальный компонент, который любой разработчик мог бы использовать. Примерно за 20% времени вы напишите вполне рабочий, подходящий вашему проекту компонент, и оставшиеся 80% будете лепить на него обвесы, чтобы он был универсальный и опциональный, учитывал Vue 2 и Vue 3, был SSR-safe и еще много чего, что конкретно вам не нужно. В итоге лаконичный красивый эффективный код превратится во множество проверок, адаптеров и прочей не функциональной логики. Поэтому написать свой код всегда намного эффективней использования чужого универсального. Речь сейчас идет конкретно про подобные утилитарные библиотеки, а не, к примеру, UI пакеты.

  6. useLocalStorage от VueUse возвращает реактивную переменную, которую, по идее, нужно напрямую использовать в проекте. Другими словами, если мне надо сохранять в LocalStorage shoppingCart, то ее нужно создать через вызов useLocalStorage(). То есть, одна из основных бизнес-сущностей моего проекта должна создаваться какой-то сторонней библиотекой. Чужой код простой утилиты диктует реализацию элементов архитектуры всего проекта. Мне такое кажется абсолютно неприемлимым.

  7. Можно создать отдельно shoppingCart и отдельно переменную через useLocalStorage() и затем заморочится с их синхронизацией через watch и предотвращением бесконечных циклов. И это для каждой такой переменной. Можно совсем довериться VueUse и использовать их syncRef. Но это уже даже не неприемлимо, а смешно, не говоря о том, что код в итоге получится больше, чем своё решение. Таким образом, утилиты VueUse бывают просто неудобными в применении. Lodash при использовании был очень удобным - берешь её функцию, и она максимально эффективно делает то, что надо. Из того, что я пытался применить в своих проектах, VueUse неудобен.

  8. Есть большая разница между популяризацией (хорошо) и популизмом (плохо). Советы по использованию и даже навязывание VueUse разработчикам, без понимания ими того, что именно они получают и за какую цену, смахивает на второе.

Wikipedia

Попули́зм (от лат. populus — народ) — политика, апеллирующая к широким массам и обещающая им скорое и лёгкое решение острых социальных проблем. В основе популизма лежит стремление той или иной политической силы завоевать доверие и поддержку масс, понравиться народу. При этом реальные цели политиков-популистов (борьба за власть, обогащение и тому подобное), как правило, прикрываются социально-привлекательными идеями.

- +}

Все переменные будут храниться в одном объекте в LocalStorage , а не каждая в своем.

Библиотека VueUse

VueUse - популярная библиотека, состоящая из небольших утилит. Нисколько не умаляя вклад Anthony Fu в экосистему Vue, опишу, почему я не использую её и не рекомендую для серьезных проектов и опытных разработчиков.

  1. Все утилиты в ней - небольшие. Под "небольшие" я подразумеваю, что аналогичный свой код будет в 10-50 строк. В зависимости от обстоятельств и требований, свой код может быть и в пять строк (аналог onClickOutside), и в две (использование LocalStorage). Кроме того, на проект нужно обычно всего 2-3 подобных утилит оттуда. Подключать из-за этого всю библиотеку нецелесообразно, несмотря на tree-shaking.

  2. Это зависимость, и как все зависимости может измениться, устареть, получить уязвимость, тормозить развитие проекта и прочее, прочее. С большинством активно развивавшихся библиотек такое случалось.

  3. Утилиты в ней не делают то, что надо именно тебе. Например, мне для адаптивности нужно ставить соответствующий CSS класс на <body> при изменении ширины экрана. В библиотеке есть две утилиты, работающие с шириной экрана, но ни одна не дает именно то, что надо. Приходится преобразовывать данные от useBreakponts в свои, и весь код занимает половину кода своей реализации, которая достаточно проста и прямолинейна, и вполне может быть даже сгенерирована AI ботом.

  4. В утилитах VueUse содержится избыточная и чрезмерная логика и код (с точки зрения вашего конкретного проекта). Если бы это был простой js код, было бы еще ничего, но это реактивный код. Если открыть исходники useBreakponts, то можно увидеть с десяток computed переменных, которые ты не используешь. Но учитывая, что только в версии 3.4 Vue пофиксила баг, при котором компьютеды пересчитывались, хотя ни одна из входящих в них переменная не менялась, нет никаких гарантий, что при изменении экрана или сдвиге мышки не будет производиться множество не нужных тебе пересчетов. Это влияет на производительность.

  5. Указанная выше проблема, это не недостаток именно VueUse. Попробуйте написать универсальный компонент, который любой разработчик мог бы использовать. Примерно за 20% времени вы напишите вполне рабочий, подходящий вашему проекту компонент, и оставшиеся 80% будете лепить на него обвесы, чтобы он был универсальный и опциональный, учитывал Vue 2 и Vue 3, был SSR-safe и еще много чего, что конкретно вам не нужно. В итоге лаконичный красивый эффективный код превратится во множество проверок, адаптеров и прочей не функциональной логики. Поэтому написать свой код всегда намного эффективней использования чужого универсального. Речь сейчас идет конкретно про подобные утилитарные библиотеки, а не, к примеру, UI пакеты.

  6. useLocalStorage от VueUse возвращает реактивную переменную, которую, по идее, нужно напрямую использовать в проекте. Другими словами, если мне надо сохранять в LocalStorage shoppingCart, то ее нужно создать через вызов useLocalStorage(). То есть, одна из основных бизнес-сущностей моего проекта должна создаваться какой-то сторонней библиотекой. Чужой код простой утилиты диктует реализацию элементов архитектуры всего проекта. Мне такое кажется абсолютно неприемлимым.

  7. Можно создать отдельно shoppingCart и отдельно переменную через useLocalStorage() и затем заморочится с их синхронизацией через watch и предотвращением бесконечных циклов. И это для каждой такой переменной. Можно совсем довериться VueUse и использовать их syncRef. Но это уже даже не неприемлимо, а смешно, не говоря о том, что код в итоге получится больше, чем своё решение. Таким образом, утилиты VueUse бывают просто неудобными в применении. Lodash при использовании был очень удобным - берешь её функцию, и она максимально эффективно делает то, что надо. Из того, что я пытался применить в своих проектах, VueUse неудобен.

  8. Есть большая разница между популяризацией (хорошо) и популизмом (плохо). Советы по использованию и даже навязывание VueUse разработчикам, без понимания ими того, что именно они получают и за какую цену, смахивает на второе.

Wikipedia

Попули́зм (от лат. populus — народ) — политика, апеллирующая к широким массам и обещающая им скорое и лёгкое решение острых социальных проблем. В основе популизма лежит стремление той или иной политической силы завоевать доверие и поддержку масс, понравиться народу. При этом реальные цели политиков-популистов (борьба за власть, обогащение и тому подобное), как правило, прикрываются социально-привлекательными идеями.

+ \ No newline at end of file diff --git a/ru/arty-crafty/showcase/codeium.html b/ru/arty-crafty/showcase/codeium.html index f604b0d59..dfa80bd1f 100644 --- a/ru/arty-crafty/showcase/codeium.html +++ b/ru/arty-crafty/showcase/codeium.html @@ -6,13 +6,13 @@ Codeium | Vue FAQ - + - + - + - + @@ -41,8 +41,8 @@ */ function listFavourites(): Array<number> { return Array.from(favourites.value); -}

Добавились типы и сгенерился JSDoc, который можно получить используя только команду Generate JSDoc.

Теперь если в месте использования функции мы наведем курсор на неё, получим полное описание:

image

Explain даёт текстовое объяснение функции:

This code defines a function called listFavourites that returns a list of favorite product IDs. The function uses the Array.from method to convert the favourites.value array-like object into a proper array. The function has a return type annotation of Array<number>, indicating that it returns an array of numbers.

Explain problem

При подчеркивании ошибки ESlint-ом Codeium часто предлагает опцию Explain problem, в которой будет не только объяснение ошибки, но и генерация "правильного" кода. С ошибками TypeScript работает очень неплохо.

Вывод

Codeium - не панацея, если не умеешь программировать, но экономит много времени, если что-то умеешь.

- +}

Добавились типы и сгенерился JSDoc, который можно получить используя только команду Generate JSDoc.

Теперь если в месте использования функции мы наведем курсор на неё, получим полное описание:

image

Explain даёт текстовое объяснение функции:

This code defines a function called listFavourites that returns a list of favorite product IDs. The function uses the Array.from method to convert the favourites.value array-like object into a proper array. The function has a return type annotation of Array<number>, indicating that it returns an array of numbers.

Explain problem

При подчеркивании ошибки ESlint-ом Codeium часто предлагает опцию Explain problem, в которой будет не только объяснение ошибки, но и генерация "правильного" кода. С ошибками TypeScript работает очень неплохо.

Вывод

Codeium - не панацея, если не умеешь программировать, но экономит много времени, если что-то умеешь.

+ \ No newline at end of file diff --git a/ru/arty-crafty/showcase/customization.html b/ru/arty-crafty/showcase/customization.html index 3bf9e2c73..5a73b86fe 100644 --- a/ru/arty-crafty/showcase/customization.html +++ b/ru/arty-crafty/showcase/customization.html @@ -6,13 +6,13 @@ Кастомизация | Vue FAQ - + - + - + - + @@ -34,26 +34,26 @@ -
Skip to content

Кастомизация

Персонализация

Заменим везде имя на "Arty-Crafty", изменим описание в package.json. Найдем в интернете подходящую иконку для логотипа, и заменим штатную.

Теперь скроем сайдбар в tablet и desktop режимах, потому что в нем должен быть каталог только в мобильном режиме. Для других каталог будет из меню в хедере.

Далее, мы будем делать приложение в модульной архитектуре. Общие компоненты, утилиты, композаблы и ресурсы у нас будут в модуле app, то, что относится к каталогу, категориям товаров и самим товарам - в products, и так далее. Поэтому нужно в src создать дирректорию app и перенести всё в неё, с заменой путей, где надо.

Загружаем все на GitHub и ставим тэг - v0.1. Для этого нужно опубликовать релиз.

Views

Чистим главную страницу, i18n убираем пока подальше. Переименовываем основные view на:

  • HomeView (остается)
  • ProductCategoryView
  • ProductView

Замечание

Предпочтительно использовать термин View, а не Page потому, что View может быть частью другого View, а Page - нет (семантически).

ProductCategoryView и ProductView убираем в директорию views модуля products.

Routes

Обновляем routes. Добавляем роуты для product, category, favourites, cart и login

js
const routes: RouteRecordRaw[] = [
-  // ...
-  {
-    path: "/product/:productId",
-    name: "product",
-    component: ProductView,
-  },
-  {
-    path: "/category/:categoryId",
-    name: "category",
-    component: ProductCategoryView,
-  },
-  {
-    path: "/favourites",
-    name: "favourites",
-    component: ProductCategoryView,
-  },
-  // ...
-];

Маршруты пока оставляем в главном модуле, при росте их числа - разобьем.

Отмечаем, что в солидных магазинах ссылка на категорию выглядит примерно так: /category/muzhskaya-odezhda-7542/. То есть, slug названия категории и её id. У нас будет пока только categoryId, но в дальнейшем мы сделаем такую человеко-понятную ссылку - это полезно для UX и для SEO. То же самое с продуктами.

Делаем хедер - с лого, поисковой строкой, иконками корзины, логина/аккаунта, избранного справа, и снизу меню с 2-3 категориями.

На аналогичных сайтах поисковая строка может быть весьма непростой - с выпадающим меню с подсказками, например, или каталогом. Поэтому сразу выделим её в отдельный компонент - AppSearchBar. Находим в интернете подходящую стилизацию input и используем её.

Подходящие иконки можно поискать на iconbuddy.app и icones.js.org. Для их отображения используем BaseIcon.

Добавляем немного эффектов, адаптивности, и получаем:

image

В выдвигающемся слева сайдбаре также захардкодим несколько категорий. Более тщательную кастомизацию оставим на потом.

В итоге:

image

Небольшой рефакторинг

Переименуем наш кастомизированный компонент MantineSimpleHeader в AppHeader и все остальные также.

Загружаем в репозиторий и ставим тэг - v0.2.

- +
Skip to content

Кастомизация

Персонализация

Заменим везде имя на "Arty-Crafty", изменим описание в package.json. Найдем в интернете подходящую иконку для логотипа, и заменим штатную.

Теперь скроем сайдбар в tablet и desktop режимах, потому что в нем должен быть каталог только в мобильном режиме. Для других каталог будет из меню в хедере.

Далее, мы будем делать приложение в модульной архитектуре. Общие компоненты, утилиты, композаблы и ресурсы у нас будут в модуле app, то, что относится к каталогу, категориям товаров и самим товарам - в products, и так далее. Поэтому нужно в src создать дирректорию app и перенести всё в неё, с заменой путей, где надо.

Загружаем все на GitHub и ставим тэг - v0.1. Для этого нужно опубликовать релиз.

Views

Чистим главную страницу, i18n убираем пока подальше. Переименовываем основные view на:

  • HomeView (остается)
  • ProductCategoryView
  • ProductView

Замечание

Предпочтительно использовать термин View, а не Page потому, что View может быть частью другого View, а Page - нет (семантически).

ProductCategoryView и ProductView убираем в директорию views модуля products.

Routes

Обновляем routes. Добавляем роуты для product, category, favourites, cart и login

js
const routes: RouteRecordRaw[] = [
+  // ...
+  {
+    path: "/product/:productId",
+    name: "product",
+    component: ProductView,
+  },
+  {
+    path: "/category/:categoryId",
+    name: "category",
+    component: ProductCategoryView,
+  },
+  {
+    path: "/favourites",
+    name: "favourites",
+    component: ProductCategoryView,
+  },
+  // ...
+];

Маршруты пока оставляем в главном модуле, при росте их числа - разобьем.

Отмечаем, что в солидных магазинах ссылка на категорию выглядит примерно так: /category/muzhskaya-odezhda-7542/. То есть, slug названия категории и её id. У нас будет пока только categoryId, но в дальнейшем мы сделаем такую человеко-понятную ссылку - это полезно для UX и для SEO. То же самое с продуктами.

Делаем хедер - с лого, поисковой строкой, иконками корзины, логина/аккаунта, избранного справа, и снизу меню с 2-3 категориями.

На аналогичных сайтах поисковая строка может быть весьма непростой - с выпадающим меню с подсказками, например, или каталогом. Поэтому сразу выделим её в отдельный компонент - AppSearchBar. Находим в интернете подходящую стилизацию input и используем её.

Подходящие иконки можно поискать на iconbuddy.app и icones.js.org. Для их отображения используем BaseIcon.

Добавляем немного эффектов, адаптивности, и получаем:

image

В выдвигающемся слева сайдбаре также захардкодим несколько категорий. Более тщательную кастомизацию оставим на потом.

В итоге:

image

Небольшой рефакторинг

Переименуем наш кастомизированный компонент MantineSimpleHeader в AppHeader и все остальные также.

Загружаем в репозиторий и ставим тэг - v0.2.

+ \ No newline at end of file diff --git a/ru/arty-crafty/showcase/favourites.html b/ru/arty-crafty/showcase/favourites.html index e39b9bc0b..b7251ee21 100644 --- a/ru/arty-crafty/showcase/favourites.html +++ b/ru/arty-crafty/showcase/favourites.html @@ -6,13 +6,13 @@ Избранное | Vue FAQ - + - + - + - + @@ -70,8 +70,8 @@ localStorage.setItem("ac-favourites", JSON.stringify(listFavourites()));

В дальнейшем возможно понадобится сохранять в LocalStorage и другие параметры нашего приложения и настройки пользователя, тогда список "Избранное" желательно будет объединить с ними в один объект и написать утилиту для него, но пока можно и так.

В итоге наш useFavourites.ts.

Бэджик

При работе над иконкой в AppHeader, а также при наблюдении над другими магазинами можно обратить внимание, что бэджик с числом может быть не только над иконкой "Избранное", но и над "Заказы" и может и чем другим. Самое время вынести его в отдельный код. Хоть он и небольшой, но будет возможность менять стили в одном месте.

Варианта тут четыре - директива, отдельный компонент IconBadge, расширение функционала BaseIcon или новый компонент IconWithBadge. Директива логичней - как бы, бэдж принадлежт иконке. Компонент более явен, позволяет делать кастомизацию через пропсы, если понадобится, и, вообще, более читабельней. По третьему варианту - из-за двух мест усложнять BaseIcon точно не стоит. IconWithBadge, в принципе, неплохо выглядит.

Пока создаем компонент IconBadge в app/components/ui. Минус подхода - иконку с бэджем надо явно оборачивать в div с position: relative:

template
<div class="icon-wrapper">
   <BaseIcon size="20" name="favourites" class="icon" />
   <IconBadge :num="listFavourites().length" />
-</div>

По сути, это и есть IconWithBadge если мы захотим позже его реализовать.

Tag и CMV

Загружаем в репозиторий и ставим тэг - v0.3

Coding music video

- +</div>

По сути, это и есть IconWithBadge если мы захотим позже его реализовать.

Tag и CMV

Загружаем в репозиторий и ставим тэг - v0.3

Coding music video

+ \ No newline at end of file diff --git a/ru/arty-crafty/showcase/product-category.html b/ru/arty-crafty/showcase/product-category.html index d3c392d37..730aa370b 100644 --- a/ru/arty-crafty/showcase/product-category.html +++ b/ru/arty-crafty/showcase/product-category.html @@ -6,13 +6,13 @@ Категория товаров | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Категория товаров

Layout

Страница категории товаров выглядит как идущие рядами и колонками карточки товаров. Число колонок зависит от ширины экрана. В мобильном варианте - только одна колонка на ширину устройства.

Сверху страницы название категории, возможно её описание и breadcrumbs (путь к категории в каталоге).

Карточки разместить можно с помощью flexbox (flex-wrap) и grid. Мне привычнее первый, поэтому использую его. Для самой карточки товара создаем компонент ProductCard.

image

Данные и API

Если посмотреть другие магазины, то на карточках товара обычно одна или несколько картинок, название, краткое описание, стоимость, дополнительная информация (рейтинг, скидка, вес, материал и т.п.)

Данные будем получать по сети. Лежать они будут в json файлах в директории public/api. Создадим несколько файлов вроде category-products-3.json.

Как может быть устроена схема REST API на бэкенде для серьезных магазинов можно посмотреть на примере Magento WebAPI.

- +
Skip to content

Категория товаров

Layout

Страница категории товаров выглядит как идущие рядами и колонками карточки товаров. Число колонок зависит от ширины экрана. В мобильном варианте - только одна колонка на ширину устройства.

Сверху страницы название категории, возможно её описание и breadcrumbs (путь к категории в каталоге).

Карточки разместить можно с помощью flexbox (flex-wrap) и grid. Мне привычнее первый, поэтому использую его. Для самой карточки товара создаем компонент ProductCard.

image

Данные и API

Если посмотреть другие магазины, то на карточках товара обычно одна или несколько картинок, название, краткое описание, стоимость, дополнительная информация (рейтинг, скидка, вес, материал и т.п.)

Данные будем получать по сети. Лежать они будут в json файлах в директории public/api. Создадим несколько файлов вроде category-products-3.json.

Как может быть устроена схема REST API на бэкенде для серьезных магазинов можно посмотреть на примере Magento WebAPI.

+ \ No newline at end of file diff --git a/ru/arty-crafty/showcase/project-setup.html b/ru/arty-crafty/showcase/project-setup.html index 4d796aa8e..e5a954e36 100644 --- a/ru/arty-crafty/showcase/project-setup.html +++ b/ru/arty-crafty/showcase/project-setup.html @@ -6,13 +6,13 @@ Создание проекта | Vue FAQ - + - + - + - + @@ -34,28 +34,28 @@ -
Skip to content

Создание проекта

Репозиторий на GitHub

Создаем репозиторий на GitHub, клонируем локально

sh
$ git clone https://github.com/vuesence/arty-crafty.git

vue-webapp

Используем, естественно, vue-webapp для создания скелета проекта со следующими опциями:

sh
$ cd arty-crafty
-$ pnpm create vue-webapp .
-
- Project name: ... arty-crafty
- Add a Splash screen? ... yes
- Make it PWA (adds service worker and manifest)? ... yes
- Add Open Graph meta tags? ... yes
- Add Google Analytics code? ... no
- Add Github Action Workflow for publishing it on GitHub Pages? ... yes
- Select application layout » MainLayout
- Select navigation drawer » TouchSlideoutDrawer
- Select webapp navbar » MantineSimpleNavbar
- Select webapp header » MantineSimpleHeader
- Select webapp footer » MantineSimpleFooter
- Add light version of i18n? ... yes
- Add API layer (REST)? ... yes
- Add JSON-RPC adapter? ... no
- Current directory is not empty. Please choose how to proceed: » Ignore files and continue
-
-Scaffolding project in \Vuesence\arty-crafty...

Запускаем:

sh
$ pnpm i
-$ pnpm dev

Работает:

image

Теперь ставим base: "/arty-crafty/" в vite.config.ts. Также надо поставить этот префикс перед путями в инъекциях sw.js и splash-screen.html, и в путях к иконкам в manifest.json. При хостинге со своим доменом нужно будет этот префикс убрать.

Загружаем все на GitHub.

Далее настраиваем GitHub Pages и получаем наш сайт по адресу: https://vuesence.github.io/arty-crafty/

Сайт задеплоится сам автоматически из-за того, что у нас есть соответствующий GitHub Actions Workflow файл в проекте. Ветка gh-pages тоже создастся автоматически.

Теперь закомментируем подключение service-worker.js в файле sw.js - во время разработки кэширование сильно мешает. Включим его уже в продакшне.

- +
Skip to content

Создание проекта

Репозиторий на GitHub

Создаем репозиторий на GitHub, клонируем локально

sh
$ git clone https://github.com/vuesence/arty-crafty.git

vue-webapp

Используем, естественно, vue-webapp для создания скелета проекта со следующими опциями:

sh
$ cd arty-crafty
+$ pnpm create vue-webapp .
+
+ Project name: ... arty-crafty
+ Add a Splash screen? ... yes
+ Make it PWA (adds service worker and manifest)? ... yes
+ Add Open Graph meta tags? ... yes
+ Add Google Analytics code? ... no
+ Add Github Action Workflow for publishing it on GitHub Pages? ... yes
+ Select application layout » MainLayout
+ Select navigation drawer » TouchSlideoutDrawer
+ Select webapp navbar » MantineSimpleNavbar
+ Select webapp header » MantineSimpleHeader
+ Select webapp footer » MantineSimpleFooter
+ Add light version of i18n? ... yes
+ Add API layer (REST)? ... yes
+ Add JSON-RPC adapter? ... no
+ Current directory is not empty. Please choose how to proceed: » Ignore files and continue
+
+Scaffolding project in \Vuesence\arty-crafty...

Запускаем:

sh
$ pnpm i
+$ pnpm dev

Работает:

image

Теперь ставим base: "/arty-crafty/" в vite.config.ts. Также надо поставить этот префикс перед путями в инъекциях sw.js и splash-screen.html, и в путях к иконкам в manifest.json. При хостинге со своим доменом нужно будет этот префикс убрать.

Загружаем все на GitHub.

Далее настраиваем GitHub Pages и получаем наш сайт по адресу: https://vuesence.github.io/arty-crafty/

Сайт задеплоится сам автоматически из-за того, что у нас есть соответствующий GitHub Actions Workflow файл в проекте. Ветка gh-pages тоже создастся автоматически.

Теперь закомментируем подключение service-worker.js в файле sw.js - во время разработки кэширование сильно мешает. Включим его уже в продакшне.

+ \ No newline at end of file diff --git a/ru/backend/api.html b/ru/backend/api.html index 5b87d02cc..a5bade7ba 100644 --- a/ru/backend/api.html +++ b/ru/backend/api.html @@ -6,13 +6,13 @@ API сервис | Vue FAQ - + - + - + - + @@ -66,8 +66,8 @@ async getUserData(params) { return await http.get("/api/users/user", params); }, -};

http.js - обертка вокруг запросов на сервер через вашу любимую библиотеку.

Чем удобно абстрагирование кода связи с бэкендом от основного кода приложения в отдельный сервис?

Можно легко заменить axios на fetch или XHR, REST на JSON-RPC или WebSockets. Код в компонентах не меняется и остается простым и явным.

Откуда обращаться на бэкенд API?

Где лучше всего в компоненте обращаться за данными на backend API - в теле script setup, или в хуке onMounted?

В onMounted.

  1. Нельзя спокойно использовать await в корне сетапа, это требует наличия Suspense и делает компонент асинхронным и ненужно усложняет приложение. Поэтому приходится использовать промисный then или IIFE , что гораздо хуже читается и менее удобно.

  2. Если в запросе будет непойманная ошибка, то в script setup её не обработать, в отличие от хука.

  3. С точки зрения дизайна системы, script setup - это конструктор компонента. Запрашивать в нем данные из внешних источников нелогично.

  4. Были неоднократные свидетельства, что сетевой запрос в script setup не работал правильно, а при переносе в onMounted - работал. Зависит от контекста, но тем не менее.

- +};

http.js - обертка вокруг запросов на сервер через вашу любимую библиотеку.

Чем удобно абстрагирование кода связи с бэкендом от основного кода приложения в отдельный сервис?

Можно легко заменить axios на fetch или XHR, REST на JSON-RPC или WebSockets. Код в компонентах не меняется и остается простым и явным.

Откуда обращаться на бэкенд API?

Где лучше всего в компоненте обращаться за данными на backend API - в теле script setup, или в хуке onMounted?

В onMounted.

  1. Нельзя спокойно использовать await в корне сетапа, это требует наличия Suspense и делает компонент асинхронным и ненужно усложняет приложение. Поэтому приходится использовать промисный then или IIFE , что гораздо хуже читается и менее удобно.

  2. Если в запросе будет непойманная ошибка, то в script setup её не обработать, в отличие от хука.

  3. С точки зрения дизайна системы, script setup - это конструктор компонента. Запрашивать в нем данные из внешних источников нелогично.

  4. Были неоднократные свидетельства, что сетевой запрос в script setup не работал правильно, а при переносе в onMounted - работал. Зависит от контекста, но тем не менее.

+ \ No newline at end of file diff --git a/ru/backend/auth.html b/ru/backend/auth.html index 2f37ae754..507c62661 100644 --- a/ru/backend/auth.html +++ b/ru/backend/auth.html @@ -6,13 +6,13 @@ Аутентификация и авторизация | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

Аутентификация и авторизация

Что такое аутентификация и авторизация

Грубо говоря:

Аутентификация - когда система удостоверяется, что в неё залогинился именно Вася Пупкин, например, проверив его логин и пароль

Авторизация - когда система удостоверяется, что запрашивающий ресурс/действие пользователь имеет право доступа к нему. Например, старший менеджер имеет право удаления товара в админке, а простой менеджер - нет.

Как сделать систему аутентификации на сайта

Для SPA самый распространенный способ - на JWT токенах. Вариантов это сделать много, в зависимости от требований уровня безопасности (личный блог Васи Пупкина с комментариями гостей и онлайн магазин с депозитами и бонусами - две большие разницы).

JWT - это стандарт записи небольшого количества информации в строку (токен) и подписывания её (криптография). Делает это бэкенд. Таким образом только бэкенд может удостовериться, что токен выписан им, и в нем действительная информация.

Стандарта аутентификация на токенах как такового нет, есть лучшие практики.

Варианты:

  1. Бэкенд генерит токен (access token - AT) и кладет в httpOnly cookie. Фронтэнд доступа к токену не имеет, браузер просто возвращает куку. Метод незаслужено редко используемый, но вполне надежный. С фронта снимаются все заморочки по манипуляции с АТ.

Сценарий:

  • Фронт логинится, получает данные пользователя с бэка и работает с ними. При получении при любом запросе 401 - направляет пользователя на форму логина, обнуляет данные пользователя.
  • Бэк при логине создает httpOnly cookie с токеном с определенным сроком жизни. На каждом запросе проверяет токен, определяет того, кому выписан этот токен и его права, и дальше решает разрешать ли доступ. Если срок жизни токена кончился - возвращает 401.
  1. Бэкенд генерит токен (access token - AT) и передаёт фронту. Фронт сохраняет его и каждый раз отправляет его обратно. По сути то же самое, что и в первом случае, плюс лишние телодвижения и возможность потерять токен через XSS.

  2. Используются два токена - короткоживущий access token (AT) и дольше живущий refresh token (RT) пересылаемый в httpOnly cookie. AT работает как во втором случае. Когда записанный в нем срок его жизни кончается, бэкенд проверяет RT, и если он валиден, обновляет AT. Кончается RT - пользователь направляется на перелогин.

Подробнее по данной теме можно ознакомиться в, например, этой статье

Где хранить access token на фронте?

В 95% случаев в LocalStorage. Необходимо также дублировать его в обычной JS переменной, потому что, например, у iPhone при слабом заряде включается политика энергосбережения, в результате чего localStorage может постоянно очищаться браузером.

Что такое oAuth и SSO?

oAuth - Логин "через Google". Также когда, например, у пользователь есть возможность на твоем сайте сохранить что-то в Google Drive. Чтобы получить разрешение для твоего сайта работы с Google Drive аккаунтом пользователя, ты просишь его дать через Google разрешения твоему сайту лазить в его аккаунт. Итого у нас есть четыре части - Google (авторизационный центр), сторонний ресурс (Google Drive), твой сайт и пользователь

SSO - single sign-on - логин пользователя на портал некой компании один раз, и затем прозрачный доступ на разные его сервисы. Например, логин в GMail и доступ в сразу в Google Диск, Google Photo и так далее.

Дает ли аутентификация через JWT безопасность?

Безопасность - очень комплексное понятие, аутентификация через JWT - всего лишь один из её элементов. Для критичных приложений можно снимать отпечаток системы пользователя (browser fingerprint) и заставлять пользователя перелогиниваться как только он изменился. То же самое с IP. Таким образом можно бороться с кражей АТ. Также ставить очень маленький срок жизни AT, если используется RT. Но основные меры безопасности связаны не с аутентификацией, а с постоянным мониторингом системы на подозрительные действия.

Авторизация

Если нужно давать пользователям разный уровень доступа к ресурсам сайта, то обычно применяется или RBAC (Role-based access control) или PBA - Policy-Based Authorization (Permission-Based Authorization).

В первом случае пользователи распределяются по ролям (админ, менеджер, юзер) и уровень доступа определяется ролью.

Во-втором можно более гранулировано задать разрешение каждому пользователю индивидуально на любое действие.

Нужно понимать, что на фронте авторизация делается для удобства (пользователь не видит разделы сайта, которые ему запрещены), но за безопасность отвечает бэк - он должен проверять каждый раз, имеет ли пользователь право доступа к запрашиваемому ресурсу, даже если на фронте его как бы видно не должно быть. Сломать фронт - очень несложно.

- +
Skip to content

Аутентификация и авторизация

Что такое аутентификация и авторизация

Грубо говоря:

Аутентификация - когда система удостоверяется, что в неё залогинился именно Вася Пупкин, например, проверив его логин и пароль

Авторизация - когда система удостоверяется, что запрашивающий ресурс/действие пользователь имеет право доступа к нему. Например, старший менеджер имеет право удаления товара в админке, а простой менеджер - нет.

Как сделать систему аутентификации на сайта

Для SPA самый распространенный способ - на JWT токенах. Вариантов это сделать много, в зависимости от требований уровня безопасности (личный блог Васи Пупкина с комментариями гостей и онлайн магазин с депозитами и бонусами - две большие разницы).

JWT - это стандарт записи небольшого количества информации в строку (токен) и подписывания её (криптография). Делает это бэкенд. Таким образом только бэкенд может удостовериться, что токен выписан им, и в нем действительная информация.

Стандарта аутентификация на токенах как такового нет, есть лучшие практики.

Варианты:

  1. Бэкенд генерит токен (access token - AT) и кладет в httpOnly cookie. Фронтэнд доступа к токену не имеет, браузер просто возвращает куку. Метод незаслужено редко используемый, но вполне надежный. С фронта снимаются все заморочки по манипуляции с АТ.

Сценарий:

  • Фронт логинится, получает данные пользователя с бэка и работает с ними. При получении при любом запросе 401 - направляет пользователя на форму логина, обнуляет данные пользователя.
  • Бэк при логине создает httpOnly cookie с токеном с определенным сроком жизни. На каждом запросе проверяет токен, определяет того, кому выписан этот токен и его права, и дальше решает разрешать ли доступ. Если срок жизни токена кончился - возвращает 401.
  1. Бэкенд генерит токен (access token - AT) и передаёт фронту. Фронт сохраняет его и каждый раз отправляет его обратно. По сути то же самое, что и в первом случае, плюс лишние телодвижения и возможность потерять токен через XSS.

  2. Используются два токена - короткоживущий access token (AT) и дольше живущий refresh token (RT) пересылаемый в httpOnly cookie. AT работает как во втором случае. Когда записанный в нем срок его жизни кончается, бэкенд проверяет RT, и если он валиден, обновляет AT. Кончается RT - пользователь направляется на перелогин.

Подробнее по данной теме можно ознакомиться в, например, этой статье

Где хранить access token на фронте?

В 95% случаев в LocalStorage. Необходимо также дублировать его в обычной JS переменной, потому что, например, у iPhone при слабом заряде включается политика энергосбережения, в результате чего localStorage может постоянно очищаться браузером.

Что такое oAuth и SSO?

oAuth - Логин "через Google". Также когда, например, у пользователь есть возможность на твоем сайте сохранить что-то в Google Drive. Чтобы получить разрешение для твоего сайта работы с Google Drive аккаунтом пользователя, ты просишь его дать через Google разрешения твоему сайту лазить в его аккаунт. Итого у нас есть четыре части - Google (авторизационный центр), сторонний ресурс (Google Drive), твой сайт и пользователь

SSO - single sign-on - логин пользователя на портал некой компании один раз, и затем прозрачный доступ на разные его сервисы. Например, логин в GMail и доступ в сразу в Google Диск, Google Photo и так далее.

Дает ли аутентификация через JWT безопасность?

Безопасность - очень комплексное понятие, аутентификация через JWT - всего лишь один из её элементов. Для критичных приложений можно снимать отпечаток системы пользователя (browser fingerprint) и заставлять пользователя перелогиниваться как только он изменился. То же самое с IP. Таким образом можно бороться с кражей АТ. Также ставить очень маленький срок жизни AT, если используется RT. Но основные меры безопасности связаны не с аутентификацией, а с постоянным мониторингом системы на подозрительные действия.

Авторизация

Если нужно давать пользователям разный уровень доступа к ресурсам сайта, то обычно применяется или RBAC (Role-based access control) или PBA - Policy-Based Authorization (Permission-Based Authorization).

В первом случае пользователи распределяются по ролям (админ, менеджер, юзер) и уровень доступа определяется ролью.

Во-втором можно более гранулировано задать разрешение каждому пользователю индивидуально на любое действие.

Нужно понимать, что на фронте авторизация делается для удобства (пользователь не видит разделы сайта, которые ему запрещены), но за безопасность отвечает бэк - он должен проверять каждый раз, имеет ли пользователь право доступа к запрашиваемому ресурсу, даже если на фронте его как бы видно не должно быть. Сломать фронт - очень несложно.

+ \ No newline at end of file diff --git a/ru/backend/backend.html b/ru/backend/backend.html index fa0decad4..726411da5 100644 --- a/ru/backend/backend.html +++ b/ru/backend/backend.html @@ -6,13 +6,13 @@ Варианты задействовать свой бэкенд для фронтендера | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

Варианты задействовать свой бэкенд для фронтендера

Как протестировать фронт на данных с бэка?

Есть много сервисов, предлагающих свой API с различными данными для тестирования либо полноценной работы

Например, jsonplaceholder.typicode.com

Гуглить по "json placeholder"

Есть ли бесплатные открытые API с реальными данными?

Полно. Например, тут

Гуглить по "public api"

Также можно похакать релевантные сайты в DevTools / Network на предмет эндпойнтов с данными в подходящем формате

Как сделать свой бэкенд?

Если уже знаете JavaScript, поставить и запустить Node.js с HTTP сервером проблем вызвать не должно.

Node.js далеко не очень популярный сервер для интернета, но для небольшого проекта пойдет.

В абсолютном значении проще всего установить и начать работать с Nginx и PHP

Большинство крупных облачных провайдеров (Amazon, Google, Oracle, Microsoft) предоставляет бесплатные планы с возможностью запустить виртуальный сервер. Поставив туда что требуется, можно захостить и бэк, и бандл фронта.

Что такое BaaS (Backend as a service)?

Это облачное решение, когда бэкенд в виде базы данных и интерфейса доступа к ней, а возможно и возможность использовать некоторую логику, предоставляет BaaS провайдер.

Например, NoSQL базу данных и доступ к ней предоставляет Google с помощью своего сервиcа Firebase

Альтернатива с PostgreSQL - Supabase

То есть, ваш фронтэнд будет обращаться к их определенным эндпойнтам и получать нужные сервисы - например, сохранять и запрашивать данные в базе данных.

Оба сервиса предоставляют возможность сделать аутентификацию на сайте. Таким образом, фронтэндер может написать приложение используя подобный сервис без написания своего бэкенд кода и без размещения его где-то на сервере в интернете.

У данных сервисов есть бесплатные планы с довольно большими ресурсами.

Бизнес логика на BaaS

Большинство BaaS сервисов предоставляет не только CRUD доступ к своей базе данных, но и возможность написать кастомную логику в виде Cloud Functions у Firebase, Edge Functions у Supabase, AWS Lambda у Amazon и т.д.

Данные функции являются кодом на каком-то языке программирования, который будет вызываться при обращении к определенному эндпойнту бэкенда.

В случае, если фронтенд разработчик хочет сделать полноценное приложение, но заморачиваться на самостоятельный бэкенд не хочет, это является довольно неплохим и очень экономичным решением.

Как работают Edge/Cloud/Lamda функции

По сути, это бэкенд в миниатюре

Твой фронт обращаешься к заданному эндпойнту (через API gateway сервиса BaaS провайдера) - например, /api/somefunc

Там лежит написанный тобой скрипт на js или другом языке программирования который выполняется, имеет доступ к базе данных и может делать другие вещи (грузить данные из инета например)

Затем скрипт формирует результат и возвращает его твоему фронту

- +
Skip to content

Варианты задействовать свой бэкенд для фронтендера

Как протестировать фронт на данных с бэка?

Есть много сервисов, предлагающих свой API с различными данными для тестирования либо полноценной работы

Например, jsonplaceholder.typicode.com

Гуглить по "json placeholder"

Есть ли бесплатные открытые API с реальными данными?

Полно. Например, тут

Гуглить по "public api"

Также можно похакать релевантные сайты в DevTools / Network на предмет эндпойнтов с данными в подходящем формате

Как сделать свой бэкенд?

Если уже знаете JavaScript, поставить и запустить Node.js с HTTP сервером проблем вызвать не должно.

Node.js далеко не очень популярный сервер для интернета, но для небольшого проекта пойдет.

В абсолютном значении проще всего установить и начать работать с Nginx и PHP

Большинство крупных облачных провайдеров (Amazon, Google, Oracle, Microsoft) предоставляет бесплатные планы с возможностью запустить виртуальный сервер. Поставив туда что требуется, можно захостить и бэк, и бандл фронта.

Что такое BaaS (Backend as a service)?

Это облачное решение, когда бэкенд в виде базы данных и интерфейса доступа к ней, а возможно и возможность использовать некоторую логику, предоставляет BaaS провайдер.

Например, NoSQL базу данных и доступ к ней предоставляет Google с помощью своего сервиcа Firebase

Альтернатива с PostgreSQL - Supabase

То есть, ваш фронтэнд будет обращаться к их определенным эндпойнтам и получать нужные сервисы - например, сохранять и запрашивать данные в базе данных.

Оба сервиса предоставляют возможность сделать аутентификацию на сайте. Таким образом, фронтэндер может написать приложение используя подобный сервис без написания своего бэкенд кода и без размещения его где-то на сервере в интернете.

У данных сервисов есть бесплатные планы с довольно большими ресурсами.

Бизнес логика на BaaS

Большинство BaaS сервисов предоставляет не только CRUD доступ к своей базе данных, но и возможность написать кастомную логику в виде Cloud Functions у Firebase, Edge Functions у Supabase, AWS Lambda у Amazon и т.д.

Данные функции являются кодом на каком-то языке программирования, который будет вызываться при обращении к определенному эндпойнту бэкенда.

В случае, если фронтенд разработчик хочет сделать полноценное приложение, но заморачиваться на самостоятельный бэкенд не хочет, это является довольно неплохим и очень экономичным решением.

Как работают Edge/Cloud/Lamda функции

По сути, это бэкенд в миниатюре

Твой фронт обращаешься к заданному эндпойнту (через API gateway сервиса BaaS провайдера) - например, /api/somefunc

Там лежит написанный тобой скрипт на js или другом языке программирования который выполняется, имеет доступ к базе данных и может делать другие вещи (грузить данные из инета например)

Затем скрипт формирует результат и возвращает его твоему фронту

+ \ No newline at end of file diff --git a/ru/backend/cors.html b/ru/backend/cors.html index 6ec8fd442..0448ec531 100644 --- a/ru/backend/cors.html +++ b/ru/backend/cors.html @@ -6,13 +6,13 @@ CORS | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@
Skip to content

CORS

Что такое CORS?

Грубо говоря, CORS служит для защиты вашего бэкенда от запросов к нему со стороны путем установки специальных HTTP заголовков.

Более точно, CORS (Cross-Origin Resource Sharing, англ.  «совместное использование ресурсов разных источников») — это стандарт, позволяющий предоставлять веб-страницам доступ к объектам сторонних интернет-ресурсов. Сторонним считается любой интернет-ресурс, который отличается от запрашиваемого протоколом, доменом или портом.

Доступ предоставляется по специализированным запросам. Интернет-ресурс, принимающий запрос, содержит список доверенных источников, которым разрешен доступ к объектам. Страница-источник запроса получает доступ, если входит в список доверенных источников. Для предоставления доступа всем сторонним интернет-страницам используется маска «*».

Соответственно, делать всё это может только бэкенд, и настраивается это на нем. Конкретное решение зависит от языка бэкенда, используемого фреймворка и даже вебсервера.

Принцип работы CORS

При создании перекрестного HTTP-запроса браузер клиента добавляет в него объявление домена веб-страницы, инициирующей запрос. Домен объявляется в разделе Origin.

Например, страница https://client-1.com/page.html запрашивает данные со страницы https://server-site.com/info. Пример запроса от браузера клиента, использующего методы CORS, приведен ниже:

GET /info HTTP/1.1
 Host: server-site.com
-Origin: client-1.com

В случае, если сервер по адресу www.server-site.com разрешает странице-источнику запроса доступ к данным с домена, в его ответе на запрос появится строка Access-Control-Allow-Origin с именем объявленного домена:

Access-Control-Allow-Origin: https://client-1.com

Если сервер, на который запрошен доступ, не добавит в ответ указанную строку, браузер клиента вместо данных файла info вернет код ошибки.

Если на сервере разрешен доступ к ресурсу страницам любого стороннего домена, в ответе будет указана маска «*».

Access-Control-Allow-Origin: *

Если на сервере разрешен доступ не всем, а нескольким сторонним клиентам, ответ сервера содержит имена всех этих доменов, выведенных отдельными строками или разделенных пробелами:

Access-Control-Allow-Origin: https://client-1.com https://client-2.com https://client-3.com

В стандарте CORS много нюансов. Вот более подробная статья по теме CORS

Проблемы с CORS

CORS проблемы могут возникнуть только когда к ресурсу обращается браузер, а не отдельная программа типа Postman или другой бэкенд.

Как временное решение при разработке могут помочь CORS proxy, которые становятся посредником между фронтендом и бэкендом, или расширения браузера.

Vite предоставляет подобный прокси для dev режима.

- +Origin: client-1.com

В случае, если сервер по адресу www.server-site.com разрешает странице-источнику запроса доступ к данным с домена, в его ответе на запрос появится строка Access-Control-Allow-Origin с именем объявленного домена:

Access-Control-Allow-Origin: https://client-1.com

Если сервер, на который запрошен доступ, не добавит в ответ указанную строку, браузер клиента вместо данных файла info вернет код ошибки.

Если на сервере разрешен доступ к ресурсу страницам любого стороннего домена, в ответе будет указана маска «*».

Access-Control-Allow-Origin: *

Если на сервере разрешен доступ не всем, а нескольким сторонним клиентам, ответ сервера содержит имена всех этих доменов, выведенных отдельными строками или разделенных пробелами:

Access-Control-Allow-Origin: https://client-1.com https://client-2.com https://client-3.com

В стандарте CORS много нюансов. Вот более подробная статья по теме CORS

Проблемы с CORS

CORS проблемы могут возникнуть только когда к ресурсу обращается браузер, а не отдельная программа типа Postman или другой бэкенд.

Как временное решение при разработке могут помочь CORS proxy, которые становятся посредником между фронтендом и бэкендом, или расширения браузера.

Vite предоставляет подобный прокси для dev режима.

+ \ No newline at end of file diff --git a/ru/backend/protocols.html b/ru/backend/protocols.html index 30fb393fe..cb54b3a86 100644 --- a/ru/backend/protocols.html +++ b/ru/backend/protocols.html @@ -6,13 +6,13 @@ Протоколы. To REST или не REST? | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

Протоколы. To REST или не REST?

REST, WebSockets, JSON-RPC

Для новичка, конечно, удобнее начинать с REST - запросы на сервер абы как.

Для более опытных, особенно, фулстеков, предлагаю взглянуть на JSON-RPC

WebSockets удобен тем, что дает двунаправленную связь (сервер может посылать сообщения на клиент), но требует специального программного обеспечения на бэкенде.

Почему JSON-RPC?

После опыта с JSON-RPC общение с бэком обычно уже никогда не бывает прежним.

Он дает порядок, четкость, строгость и вместе с тем гибкость. Сильно упрощает и делает понятным код как на фронте, так и на бэке.

Кроме того, JSON-RPC - де-факто стандарт для Web 3.0 коммуникаций.

Вот две мои статьи на эту тему - Популяризация JSON-RPC (часть 1) и Популяризация JSON-RPC (часть 2)

Вариант TypeScript реализации фронтэнд api сервиса на JSON-RPC - здесь

При использовании JSON-RPC переход на WebSockets или другие транспортные протоколы не вызовет никаких трудностей из-за унификации формата сообщений.

Как организовать реконнект WebSocket соединения на фронте?

Нужна шина, или Еvent bus, которая будет работать как прокси для приходящих сообщений.

Можно использовать mitt.

Что такое GraphQL?

Сложная штука, попытка перевести язык запросов SQL для клиент-серверных запросов в интернете.

Имеет довольно специфичное применение, преимущественно у сторонних поставщиков данных через API.

Для своего фулстек приложения - на 99% ненужное решение.

- +
Skip to content

Протоколы. To REST или не REST?

REST, WebSockets, JSON-RPC

Для новичка, конечно, удобнее начинать с REST - запросы на сервер абы как.

Для более опытных, особенно, фулстеков, предлагаю взглянуть на JSON-RPC

WebSockets удобен тем, что дает двунаправленную связь (сервер может посылать сообщения на клиент), но требует специального программного обеспечения на бэкенде.

Почему JSON-RPC?

После опыта с JSON-RPC общение с бэком обычно уже никогда не бывает прежним.

Он дает порядок, четкость, строгость и вместе с тем гибкость. Сильно упрощает и делает понятным код как на фронте, так и на бэке.

Кроме того, JSON-RPC - де-факто стандарт для Web 3.0 коммуникаций.

Вот две мои статьи на эту тему - Популяризация JSON-RPC (часть 1) и Популяризация JSON-RPC (часть 2)

Вариант TypeScript реализации фронтэнд api сервиса на JSON-RPC - здесь

При использовании JSON-RPC переход на WebSockets или другие транспортные протоколы не вызовет никаких трудностей из-за унификации формата сообщений.

Как организовать реконнект WebSocket соединения на фронте?

Нужна шина, или Еvent bus, которая будет работать как прокси для приходящих сообщений.

Можно использовать mitt.

Что такое GraphQL?

Сложная штука, попытка перевести язык запросов SQL для клиент-серверных запросов в интернете.

Имеет довольно специфичное применение, преимущественно у сторонних поставщиков данных через API.

Для своего фулстек приложения - на 99% ненужное решение.

+ \ No newline at end of file diff --git a/ru/book/Appendix__Migrating_from_Vue_2.html b/ru/book/Appendix__Migrating_from_Vue_2.html index 172f1af34..b1a1f2ea6 100644 --- a/ru/book/Appendix__Migrating_from_Vue_2.html +++ b/ru/book/Appendix__Migrating_from_Vue_2.html @@ -6,13 +6,13 @@ Приложение: Миграция с Vue 2 | Vue FAQ - + - + - + - + @@ -66,8 +66,8 @@     <strong>{{data.surname}}, {{data.name}}</strong><br>     <strong>{{person.surname}}, {{person.name}}</strong> </template>

Обратите внимание на разницу в синтаксисе. В этот момент вы можете задуматься, когда использовать то или иное. Вот небольшое сравнение того, когда следует использовать каждый из них:

ref()reactive()
- Применяется к любому типу данных, а не только к примитивам.
- При применении к объектам или массивам вы можете заменить их.
- Он использует методы получения и установки для обнаружения изменений и запуска реактивной реакции.
- Используйте его по умолчанию для простых данных. Для массивов и объектов (сложных типов) рекомендуется использовать reactive() при работе с их внутренними элементами. Когда будет заменен весь объект, удобно использовать ref().
- Применяется к объектам и массивам, но не к примитивам. Делает их атрибуты реактивными.
- Объект не может быть заменен, только его атрибуты.
- Он использует нативную реализацию обработчиков Proxy() для обнаружения изменений и запуска реактивности.
- Используйте когда вам нужно сгруппировать большое количество переменных, которые должны «путешествовать» вместе.

Таблица А.1 - Простое руководство по выбору между ref() и reactive().

Каждый метод имеет свои преимущества. С точки зрения реактивных свойств со сложными типами не имеет значения, какой из них использовать. В некоторых случаях reactive() может быть более производительным за счет использования нативных реализаций в браузере.

Изменения в v-model, props и events

Это большое изменение по сравнению с Vue 2, которое может привести к поломке вашего кода. В Vue 3 мы больше не получаем и не испускаем значение свойства. Вместо этого любой props может быть входным/выходным, например v-model. По умолчанию атрибут v-model принимается в prop с именем modelValue, а аналог emit добавляет update:, поэтому он называется update:modelValue.

В Vue 3 появилась возможность одновременного использования нескольких v-моделей. Например, мы можем иметь v-model:person="person" в нашем компоненте, определить prop как "modelPerson" и событие как "update:modelPerson".

Props и emits теперь являются макросами (макрос - это специальная функция, предоставляемая сборщиком или фреймворком). Props имеют тот же смысл, что и в Vue 2, поэтому их можно определять как массивы, объекты, включаемые типы, значения по умолчанию и т. д.

Приведем пример с v-моделью по умолчанию и нотированной моделью:

js
const $props = defineProps(['modelValue','modelPerson']),
-$emit = defineEmits(['update:modelValue','update:modelPerson'])

Более подробно реквизиты и эмиты рассматриваются в этой книге в главе 4, Композиция пользовательского интерфейса с компонентами.

Удалена совместимость со старыми браузерами

Vue 3 был создан для скорости и "современного" JavaScript. Обратная совместимость со старыми браузерами была удалена. Многие внутренние функции, используемые для обеспечения реактивности, теперь по умолчанию используют нативные реализации (например, Proxy API).

Если вам необходимо поддерживать приложение в устаревшем браузере, то лучше остановиться на Vue 2, но не стоит бояться! Для Vue 2 существует официальный плагин для использования нового Composition API, включающий script setup синтаксис:

  • Vue 2.7 включает его без плагинов (https://blog.vuejs.org/posts/vue-2-7-naruto.html )
  • Если вы используете Vue 2.6 или ниже, вы можете найти плагин здесь: https://github.com/vuejs/composition-api
  • Если вам все же нужна скорость Vue 3, существует специальная сборка для миграции, которая имеет практически тот же API, что и Vue 2 (см. https://v3-migration.vuejs.org/migration-build.html )
  • Зачем удалять совместимость со старыми браузерами? На это есть много причин, в том числе следующие:
    • В мире доля использования старых браузеров упала до значительного уровня, и ожидается, что она продолжит снижаться с течением времени.
    • После удаления старого кода и проверок на совместимость, полученная реализация ядра Vue становится легче и производительнее. Увеличение скорости и уменьшение размера пакета является значительным, что позволяет нашим приложениям загружаться быстрее и быть более отзывчивыми.

На практике большую часть рынка занимают два браузерных движка: браузеры на базе Chromium и браузеры на базе Mozilla Firefox. Проверьте www.caniuse.com, если вам необходимо использовать функцию, которая может быть недоступна в старых браузерах.

Изменения в организации каталогов и файлов

На организацию структуры каталогов в Vue 2 в некоторой степени повлияли тогдашний сборщик WebPack и Vue CLI. Теперь, когда Vue 3 перешел на Vite, файлы были организованы таким образом, чтобы лучше отражать рабочий процесс разработки.

Так, например, index.html переместился в корневую папку из папки Public/. Теперь он занимает более заметное место в процессе компоновки. Эти и другие изменения описаны в главе 3, Установка рабочего проекта.

Изменения в роутере и state manager

Новый подход к компонентам и модульности также затрагивает маршрутизатор и управление состоянием. В то время как для Vue 3 была разработана новая версия маршрутизатора, официальное решение для управления состоянием перешло от Vuex к Pinia. Более подробную информацию о новом маршрутизаторе и Pinia можно найти в главе 5, Одностраничные приложения, и в главе 7, Управление потоком данных, соответственно.

В новом маршрутизаторе реализован иной подход к определению режимов, используются конструкторы createWebHashHistory (режим хэша), createWebHistory (режим истории) и createMemoryHistory (навигация только в памяти).

Это изменение также затронуло конфигурацию собираемого пакета. В WebPack в режиме истории путь развертывания был частью конфигурации сборщика. Теперь путь передается в конструктор в качестве параметра и полностью обрабатывается маршрутизатором.

Новые компоненты и другие изменения.

В Vue 3 также появились новые компоненты, такие как Teleport (специальный компонент, позволяющий размещать реактивные шаблоны вне дерева компонентов Vue, внутри другого элемента DOM), а также были сняты некоторые ограничения, существовавшие в Vue 2. Например, компоненты теперь могут иметь более одного корневого элемента. Для получения более подробной информации о новых компонентах в Vue 3 обратитесь к официальной документации.

Другие изменения

Полный список изменений, не упомянутых здесь, можно найти в официальной документации по адресу https://v3-migration.vuejs.org/breaking-changes/.

Итог

Переход с Vue 2 на Vue 3 имеет четкую траекторию, с небольшим количеством изменений, о которых следует знать. Новый API Composition, однако, требует изменения менталитета, но это происходит естественно при использовании синтаксиса script setup.

Но самая важная особенность Vue 3 - это рост производительности и уменьшение размера. Одним словом, Vue 3 работает быстро, очень быстро, и переход на него стоит того.

Для проектов, поддерживающих устаревшие браузеры, существуют плагины для ветви Vue 2.x, которые обеспечивают некоторые преимущества Vue 3, но для других проектов, стремящихся получить положительные результаты от Vue 3, переход на него вполне оправдан.

- +$emit = defineEmits(['update:modelValue','update:modelPerson'])

Более подробно реквизиты и эмиты рассматриваются в этой книге в главе 4, Композиция пользовательского интерфейса с компонентами.

Удалена совместимость со старыми браузерами

Vue 3 был создан для скорости и "современного" JavaScript. Обратная совместимость со старыми браузерами была удалена. Многие внутренние функции, используемые для обеспечения реактивности, теперь по умолчанию используют нативные реализации (например, Proxy API).

Если вам необходимо поддерживать приложение в устаревшем браузере, то лучше остановиться на Vue 2, но не стоит бояться! Для Vue 2 существует официальный плагин для использования нового Composition API, включающий script setup синтаксис:

  • Vue 2.7 включает его без плагинов (https://blog.vuejs.org/posts/vue-2-7-naruto.html )
  • Если вы используете Vue 2.6 или ниже, вы можете найти плагин здесь: https://github.com/vuejs/composition-api
  • Если вам все же нужна скорость Vue 3, существует специальная сборка для миграции, которая имеет практически тот же API, что и Vue 2 (см. https://v3-migration.vuejs.org/migration-build.html )
  • Зачем удалять совместимость со старыми браузерами? На это есть много причин, в том числе следующие:
    • В мире доля использования старых браузеров упала до значительного уровня, и ожидается, что она продолжит снижаться с течением времени.
    • После удаления старого кода и проверок на совместимость, полученная реализация ядра Vue становится легче и производительнее. Увеличение скорости и уменьшение размера пакета является значительным, что позволяет нашим приложениям загружаться быстрее и быть более отзывчивыми.

На практике большую часть рынка занимают два браузерных движка: браузеры на базе Chromium и браузеры на базе Mozilla Firefox. Проверьте www.caniuse.com, если вам необходимо использовать функцию, которая может быть недоступна в старых браузерах.

Изменения в организации каталогов и файлов

На организацию структуры каталогов в Vue 2 в некоторой степени повлияли тогдашний сборщик WebPack и Vue CLI. Теперь, когда Vue 3 перешел на Vite, файлы были организованы таким образом, чтобы лучше отражать рабочий процесс разработки.

Так, например, index.html переместился в корневую папку из папки Public/. Теперь он занимает более заметное место в процессе компоновки. Эти и другие изменения описаны в главе 3, Установка рабочего проекта.

Изменения в роутере и state manager

Новый подход к компонентам и модульности также затрагивает маршрутизатор и управление состоянием. В то время как для Vue 3 была разработана новая версия маршрутизатора, официальное решение для управления состоянием перешло от Vuex к Pinia. Более подробную информацию о новом маршрутизаторе и Pinia можно найти в главе 5, Одностраничные приложения, и в главе 7, Управление потоком данных, соответственно.

В новом маршрутизаторе реализован иной подход к определению режимов, используются конструкторы createWebHashHistory (режим хэша), createWebHistory (режим истории) и createMemoryHistory (навигация только в памяти).

Это изменение также затронуло конфигурацию собираемого пакета. В WebPack в режиме истории путь развертывания был частью конфигурации сборщика. Теперь путь передается в конструктор в качестве параметра и полностью обрабатывается маршрутизатором.

Новые компоненты и другие изменения.

В Vue 3 также появились новые компоненты, такие как Teleport (специальный компонент, позволяющий размещать реактивные шаблоны вне дерева компонентов Vue, внутри другого элемента DOM), а также были сняты некоторые ограничения, существовавшие в Vue 2. Например, компоненты теперь могут иметь более одного корневого элемента. Для получения более подробной информации о новых компонентах в Vue 3 обратитесь к официальной документации.

Другие изменения

Полный список изменений, не упомянутых здесь, можно найти в официальной документации по адресу https://v3-migration.vuejs.org/breaking-changes/.

Итог

Переход с Vue 2 на Vue 3 имеет четкую траекторию, с небольшим количеством изменений, о которых следует знать. Новый API Composition, однако, требует изменения менталитета, но это происходит естественно при использовании синтаксиса script setup.

Но самая важная особенность Vue 3 - это рост производительности и уменьшение размера. Одним словом, Vue 3 работает быстро, очень быстро, и переход на него стоит того.

Для проектов, поддерживающих устаревшие браузеры, существуют плагины для ветви Vue 2.x, которые обеспечивают некоторые преимущества Vue 3, но для других проектов, стремящихся получить положительные результаты от Vue 3, переход на него вполне оправдан.

+ \ No newline at end of file diff --git a/ru/book/Chapter_10__Deploying_Your_Application.html b/ru/book/Chapter_10__Deploying_Your_Application.html index 3b3a058c3..8b2421171 100644 --- a/ru/book/Chapter_10__Deploying_Your_Application.html +++ b/ru/book/Chapter_10__Deploying_Your_Application.html @@ -6,13 +6,13 @@ Развертывание приложения | Vue FAQ - + - + - + - + @@ -59,8 +59,8 @@ location / { //3 try_files $uri $uri/ /index.html; //4 } -}

Рассмотрим предыдущий код:

  • В строке //1 мы размещаем абсолютный путь локального хранилища к нашему приложению.
  • В строке //2 мы объявляем домены и поддомены, которые будут связаны с этим серверным блоком.
  • В строке //3, мы объявляем путь расположения для обработки. В данном примере мы размещаем приложение в корне (/). При размещении в mydomain.com/app мы бы написали location /app .
  • И наконец, в строке //4, мы указываем NGINX попытаться найти корректный каталог/файл и, если это не удается, передать его в наш файл index.html .

Как и ранее, если мы используем режим web hash, то нам не нужно делать эти изменения. Мы можем просто использовать конфигурацию по умолчанию для обслуживания файлов с диска.

Другие серверы

Существует множество других используемых серверов и возможных конфигураций, которые невозможно рассмотреть здесь. Однако в официальной документации Vue Router есть очень хорошие примеры для других серверов и рекомендации для тех, которые не рассматриваются. Ссылку можно найти по этой ссылке.

Давайте посмотрим, как перенести наши файлы на наш онлайн-сервер.

Перенос файлов на сервер

Теперь, когда домен указывает на наш сервер, а конфигурация настроена, пришло время загрузить файлы дистрибутива. В зависимости от выбранного хостинга это можно сделать через веб-интерфейс, приложение File Transfer Protocol (FTP) или безопасную передачу по протоколу Secure Shell Protocol (SSH).

Для последних двух вариантов рекомендуется использовать приложение, которое возьмет на себя всю тяжесть работы. Отличным вариантом является использование FileZilla, которая работает с вышеупомянутымипротоколами. Она доступна для Linux, Windows и macOS.

Как мы уже упоминали в главе 9, Тестирование и контроль исходного кода, вы также можете настроить свой VPS-сервер на получение исходного кода из удаленного репозитория с помощью Git. В этом случае папка приложения будет настроена на указание на папку /dist в локальном репозитории.

Мы можем, например, открыть удаленный терминал на сервере, запустить синхронизацию (pull), а затем скомпилировать приложение на самом сервере, взять ветку с уже скомпилированным приложением, отправить наши коммиты непосредственно на сервер и так далее.

Существует множество вариантов использования Git, и еще больше - при использовании таких сервисов, как GitHub или GitLab с мощными инструментами для непрерывной интеграции и доставки.

Эту тему стоит изучить, если вы не хотите использовать S/FTP-приложения или хотите автоматизировать процесс. Каждая реализация будет специфичной и не входит в рамки данной книги, поэтому мы перейдем к следующей теме, предполагая, что наши файлы теперь находятся на сервере.

Защита веб-приложения с помощью Let's Encrypt

Интернет-адреса указываются в самом начале используемого протокола. По умолчанию вся веб-навигация осуществляется с помощью протокола Hypertext Transfer Protocol (HTTP), который, хотя и является основополагающим, не считается безопасным.

Если между клиентом и сервером предусмотрен уровень шифрования, то обмен данными осуществляется по протоколу HTTPS (буква S означает Secure). Этот уровень шифрования обеспечивается и подтверждается сертифицирующим органом, поэтому сертификат должен быть приобретен именно у него.

Хостинг-провайдеры обычно предлагают купить и установить такой сертификат на своих серверах, однако существует и бесплатная и надежная альтернатива, предоставляемая фондом Let's Encrypt.

Для установки сертификата Let's Encrypt необходим SSH доступ к серверу. Если его нет, то приходится полагаться на услугу, предоставляемую хостингом. Список совместимых сертифицированных хостинг-провайдеров находится здесь.

В том случае, если мы имеем доступ к серверу через удаленный SSH доступ, процесс также несложен. Фонд Let's Encrypt и Electronic Frontier Foundation (EFF) предоставляют приложение certbot (робот сертификации), которое автоматизирует установку сертификатов безопасности, а также настраивает файлы локального веб-сервера на использование HTTPS. В данном случае у нас есть два варианта:

  • Установить сертификат для каждого домена и каждого поддомена
  • Установить общий (wild) сертификат, который охватывает каждый домен и все возможные поддомены

Инструкции по установке certbot и последующему запуску процесса отличаются для каждой операционной системы и веб-сервера, а также для типа упомянутого сертификата. В связи с этим EFF предоставляет веб-страницу с настраиваемыми опциями для каждого возможного варианта и простыми для выполнения шагами. Мастер можно найти здесь.

image

Рисунок 10.2 - Инструкции Certbot для NGINX и Ubuntu 20.

В целом, инструкция состоит из следующих шагов:

  1. Установите certbot .
  2. Запустите certbot. В результате появится ряд опций, содержащих все найденные домены на данном веб-сервере.
  3. Выберите тип сертификата для установки.
  4. Выберите, если активно, автообновление сертификата. Отказ от этой опции приведет к необходимости ручного обновления.

Бесплатный сертификат действует только 3 месяца единовременно, в отличие от коммерческого сертификата, который можно купить на больший срок. По истечении 3 месяцев его необходимо вручную продлевать. К счастью, в certbot включена функция автоматического обновления до истечения срока действия.

Даже для простых тестовых приложений важно и рекомендуется всегда защищать сайт с помощью сертификата безопасности. Не будем также забывать, что наличие сертификата безопасности и обслуживание приложения по HTTPS является жестким требованием для PWA.

Подведение итогов

В этой главе мы рассмотрели основы публикации нашего Vue-приложения в собственном открытом пространстве в Интернете. Мы также познакомились с важными концепциями понимания инструкций при покупке и резервировании домена и настройке DNS-записей, если и когда это необходимо сделать.

Мы также узнали о том, как приспособить конфигурацию нашего пакета при использовании режима истории HTML5 в Vue Router, о различных типах онлайн-хостинга, которые мы можем арендовать, о вариантах копирования файлов дистрибутива на рабочий сервер и о рекомендациях по защите нашего сайта с помощью бесплатного сертификата Let's Encrypt для обслуживания наших приложений по протоколу HTTPS. Всё это важные навыки, и вам будет полезно хотя бы раз получить опыт их применения.

После развертывания нашего приложения мы рассмотрели в этой книге основные этапы и темы создания приложения Vue 3, начиная с знакомства с фреймворком и заканчивая тестированием отдельных компонентов и установкой готовых к производству файлов на веб-сервер.

Вопросы для проверки

  • Что такое домен верхнего уровня и чем он отличается от домена?
  • Существует ли ограничение на количество поддоменов, которые мы можем создать для нашего домена? Почему?
  • Что такое DNS? Что такое DNS-записи?
  • Какие существуют варианты публикации веб-приложения в Интернете?
  • Какие изменения необходимо внести в код и веб-сервер при использовании Vue Router в режиме веб-истории?
  • Какие распространенные веб-серверы используются в виртуальном хостинге и VPS?
  • Что такое certbot и что он делает?
- +}

Рассмотрим предыдущий код:

  • В строке //1 мы размещаем абсолютный путь локального хранилища к нашему приложению.
  • В строке //2 мы объявляем домены и поддомены, которые будут связаны с этим серверным блоком.
  • В строке //3, мы объявляем путь расположения для обработки. В данном примере мы размещаем приложение в корне (/). При размещении в mydomain.com/app мы бы написали location /app .
  • И наконец, в строке //4, мы указываем NGINX попытаться найти корректный каталог/файл и, если это не удается, передать его в наш файл index.html .

Как и ранее, если мы используем режим web hash, то нам не нужно делать эти изменения. Мы можем просто использовать конфигурацию по умолчанию для обслуживания файлов с диска.

Другие серверы

Существует множество других используемых серверов и возможных конфигураций, которые невозможно рассмотреть здесь. Однако в официальной документации Vue Router есть очень хорошие примеры для других серверов и рекомендации для тех, которые не рассматриваются. Ссылку можно найти по этой ссылке.

Давайте посмотрим, как перенести наши файлы на наш онлайн-сервер.

Перенос файлов на сервер

Теперь, когда домен указывает на наш сервер, а конфигурация настроена, пришло время загрузить файлы дистрибутива. В зависимости от выбранного хостинга это можно сделать через веб-интерфейс, приложение File Transfer Protocol (FTP) или безопасную передачу по протоколу Secure Shell Protocol (SSH).

Для последних двух вариантов рекомендуется использовать приложение, которое возьмет на себя всю тяжесть работы. Отличным вариантом является использование FileZilla, которая работает с вышеупомянутымипротоколами. Она доступна для Linux, Windows и macOS.

Как мы уже упоминали в главе 9, Тестирование и контроль исходного кода, вы также можете настроить свой VPS-сервер на получение исходного кода из удаленного репозитория с помощью Git. В этом случае папка приложения будет настроена на указание на папку /dist в локальном репозитории.

Мы можем, например, открыть удаленный терминал на сервере, запустить синхронизацию (pull), а затем скомпилировать приложение на самом сервере, взять ветку с уже скомпилированным приложением, отправить наши коммиты непосредственно на сервер и так далее.

Существует множество вариантов использования Git, и еще больше - при использовании таких сервисов, как GitHub или GitLab с мощными инструментами для непрерывной интеграции и доставки.

Эту тему стоит изучить, если вы не хотите использовать S/FTP-приложения или хотите автоматизировать процесс. Каждая реализация будет специфичной и не входит в рамки данной книги, поэтому мы перейдем к следующей теме, предполагая, что наши файлы теперь находятся на сервере.

Защита веб-приложения с помощью Let's Encrypt

Интернет-адреса указываются в самом начале используемого протокола. По умолчанию вся веб-навигация осуществляется с помощью протокола Hypertext Transfer Protocol (HTTP), который, хотя и является основополагающим, не считается безопасным.

Если между клиентом и сервером предусмотрен уровень шифрования, то обмен данными осуществляется по протоколу HTTPS (буква S означает Secure). Этот уровень шифрования обеспечивается и подтверждается сертифицирующим органом, поэтому сертификат должен быть приобретен именно у него.

Хостинг-провайдеры обычно предлагают купить и установить такой сертификат на своих серверах, однако существует и бесплатная и надежная альтернатива, предоставляемая фондом Let's Encrypt.

Для установки сертификата Let's Encrypt необходим SSH доступ к серверу. Если его нет, то приходится полагаться на услугу, предоставляемую хостингом. Список совместимых сертифицированных хостинг-провайдеров находится здесь.

В том случае, если мы имеем доступ к серверу через удаленный SSH доступ, процесс также несложен. Фонд Let's Encrypt и Electronic Frontier Foundation (EFF) предоставляют приложение certbot (робот сертификации), которое автоматизирует установку сертификатов безопасности, а также настраивает файлы локального веб-сервера на использование HTTPS. В данном случае у нас есть два варианта:

  • Установить сертификат для каждого домена и каждого поддомена
  • Установить общий (wild) сертификат, который охватывает каждый домен и все возможные поддомены

Инструкции по установке certbot и последующему запуску процесса отличаются для каждой операционной системы и веб-сервера, а также для типа упомянутого сертификата. В связи с этим EFF предоставляет веб-страницу с настраиваемыми опциями для каждого возможного варианта и простыми для выполнения шагами. Мастер можно найти здесь.

image

Рисунок 10.2 - Инструкции Certbot для NGINX и Ubuntu 20.

В целом, инструкция состоит из следующих шагов:

  1. Установите certbot .
  2. Запустите certbot. В результате появится ряд опций, содержащих все найденные домены на данном веб-сервере.
  3. Выберите тип сертификата для установки.
  4. Выберите, если активно, автообновление сертификата. Отказ от этой опции приведет к необходимости ручного обновления.

Бесплатный сертификат действует только 3 месяца единовременно, в отличие от коммерческого сертификата, который можно купить на больший срок. По истечении 3 месяцев его необходимо вручную продлевать. К счастью, в certbot включена функция автоматического обновления до истечения срока действия.

Даже для простых тестовых приложений важно и рекомендуется всегда защищать сайт с помощью сертификата безопасности. Не будем также забывать, что наличие сертификата безопасности и обслуживание приложения по HTTPS является жестким требованием для PWA.

Подведение итогов

В этой главе мы рассмотрели основы публикации нашего Vue-приложения в собственном открытом пространстве в Интернете. Мы также познакомились с важными концепциями понимания инструкций при покупке и резервировании домена и настройке DNS-записей, если и когда это необходимо сделать.

Мы также узнали о том, как приспособить конфигурацию нашего пакета при использовании режима истории HTML5 в Vue Router, о различных типах онлайн-хостинга, которые мы можем арендовать, о вариантах копирования файлов дистрибутива на рабочий сервер и о рекомендациях по защите нашего сайта с помощью бесплатного сертификата Let's Encrypt для обслуживания наших приложений по протоколу HTTPS. Всё это важные навыки, и вам будет полезно хотя бы раз получить опыт их применения.

После развертывания нашего приложения мы рассмотрели в этой книге основные этапы и темы создания приложения Vue 3, начиная с знакомства с фреймворком и заканчивая тестированием отдельных компонентов и установкой готовых к производству файлов на веб-сервер.

Вопросы для проверки

  • Что такое домен верхнего уровня и чем он отличается от домена?
  • Существует ли ограничение на количество поддоменов, которые мы можем создать для нашего домена? Почему?
  • Что такое DNS? Что такое DNS-записи?
  • Какие существуют варианты публикации веб-приложения в Интернете?
  • Какие изменения необходимо внести в код и веб-сервер при использовании Vue Router в режиме веб-истории?
  • Какие распространенные веб-серверы используются в виртуальном хостинге и VPS?
  • Что такое certbot и что он делает?
+ \ No newline at end of file diff --git a/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html b/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html index bb38a7e32..abade18e2 100644 --- a/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html +++ b/ru/book/Chapter_11__Bonus_Chapter_-_UX_Patterns.html @@ -6,13 +6,13 @@ Бонусная глава - Шаблоны UX | Vue FAQ - + - + - + - + @@ -87,8 +87,8 @@ section{      display: flex;      flex-direction: row; -}

Обратите внимание, что в код включена точка останова на ширине 600 пикселей. Вы можете управлять различными размерами экрана, применяя несколько медиазапросов с точками останова.

Домашняя ссылка

Этот шаблон настолько распространен, что мы даже не задумываемся о нем. Главный логотип компании размещается в левой верхней части страницы как ссылка на главный экран. Такое расположение не случайно, оно связано с тем, как пользователи "сканируют" страницу.

Разные пользователи при загрузке страницы бросают беглый взгляд, направляя глаза в направлении Z, L или T по странице. Размещение логотипа в виде ссылки в левом верхнем углу гарантирует, что он будет первым элементом, который зарегистрирует пользователь. В данной главе хорошим примером этого шаблона являются рисунки 11.21 и 11.22. Но есть и исключения, например, домашняя страница Google:

Рисунок 11.24 - Главная страница Google является исключением из этого шаблона, так как логотип не является ссылкой

Однако исключение, показанное на предыдущем рисунке, является лишь временным, так как Google возвращается к этому шаблону, когда выводит результаты поиска:

Рисунок 11.25 - Результат поиска Google применяет шаблон

Шаблон "Главная ссылка" должен возвращать вас либо на главную страницу, либо на первый шаг процесса. Этот шаблон настолько широко распространен и понятен пользователям, что любое исключение из него должно делаться очень осторожно, с хорошим пониманием поведения и взаимодействия пользовательской базы.

Главная (hero) секция, призыв к действию (call to action) и иконки социальных сетей

Раздел hero - это первая часть, которая отображается при загрузке страницы в браузере и идет от самого верха (где находятся главная ссылка и главное меню) до, максимум, видимой нижней части экрана. Все содержимое, расположенное ниже этого раздела, называется "ниже сгиба (“below the fold)", т.е. чтобы увидеть его, пользователю необходимо прокрутить страницу вниз.

Hero раздел считается наиболее важной частью главной страницы и местом, где размещается первоначальный призыв к действию (call to action). Мы уже рассматривали эту концепцию в этой главе, когда говорили о принципах и контрастах дизайна пользовательского интерфейса. В настоящее время большинство сайтов придерживаются этой схемы и отображают раздел-герой контрастно, с большими изображениями или каруселью и преобладающим призывом к действию.

Рисунок 11.26 - Героический раздел главной страницы Kobold Press - красочный и непосредственный

В предыдущем примере от Kobold Press мы видим, как они применили несколько шаблонов, описанных здесь, начиная с главной ссылки и главного меню и заканчивая героической секцией и призывом к действию.

Обратите внимание также на то, что слева в виде плавающей боковой панели отображаются иконки социальных сетей. Становится шаблонным размещение таких значков со ссылками на адреса социальных сетей для каждого учреждения, а в случае постов или статей - со ссылкой "поделиться" контентом. Обычно панель социальных иконок размещается следующим образом:

  • В нижнем колонтитуле сайта
  • В начале и/или конце статьи
  • В описании продукта

При размещении ссылок на прямой доступ к контенту из приложения Vue (например, к товару из интернет-магазина) важно, чтобы ссылка и приложение Vue указывали непосредственно на такой товар. Необходимо обратить пристальное внимание на то, как формируется и интерпретируется навигационный URL при первой загрузке приложения Vue, чтобы избежать размещения ссылок, открывающих домашний экран вместо нужного раздела приложения.

Другие шаблоны

Есть и другие шаблоны, сотни, если не тысячи, которые оказывают непосредственное влияние на пользовательский опыт. Я рекомендую вам продолжить их изучение, например, следующие:

  • Шаблоны корзины
  • Пользовательский onboarding
  • Шаблоны геймификации
  • Шаблоны регистрации и снятия с регистрации

Однако у пользовательского опыта есть и темная сторона, связанная с использованием манипулятивных и обманных приемов. Как этичный разработчик, вы должны избегать использования любых из этих темных шаблонов.

Темные шаблоны

Темные шаблоны - это тщательно продуманные интерфейсы и взаимодействия с единственной целью - манипулировать или обмануть пользователя, заставить его совершить непредусмотренные действия или даже втянуть его во вредоносные результаты. После такого определения можно подумать, что подобные действия относятся к самым глубоким теневым уголкам Интернета. К сожалению, даже крупные компании часто следуют этой неэтичной практике. Собственно говоря, все воспроизведенные в этих разделах примеры относятся именно к такой категории, и, как это часто бывает с шаблонами проектирования, многие из них пересекаются или могут быть вложены друг в друга. Давайте рассмотрим их по очереди.

Вопросы с подвохом

Этот шаблон представляет собой простую или сложную игру слов, направленную на то, чтобы обмануть пользователя и заставить его сделать противоположное тому, что он задумал. Вот пример:

Рисунок 11.27 - Вопрос с подвохом для подписки на рассылку

Как видно из приведенного примера, у пользователя, заполняющего форму, может возникнуть соблазн оставить этот флажок не отмеченным, если он не хочет получать рассылку новостей от компании. Обычная тенденция - обратить внимание на выделенный жирным шрифтом текст, который является своего рода заголовком. Реальное же действие флажка находится в конце абзаца, который большинство пользователей не читает: Отметьте эту опцию, если вы не хотите получать нашу рассылку.

Проникновение в корзину

Этот темный шаблон встречается во многих приложениях для покупок, довольно часто в таких сервисах, как хостинг и авиабилеты. Он заключается в том, что при оформлении заказа в корзину помещаются товары, которые пользователь не выбрал, обычно это представляется как предложение или "необходимый" товар на небольшую сумму. Вот пример:

Рисунок 11.28 - В корзину добавлен дополнительный товар

В данном примере после оформления заказа на новый домен в корзину был автоматически добавлен новый пункт Первая настройка. Этот пункт не имеет другого объяснения, а его сумма кажется "маленькой" по сравнению с основной целью покупки. Часто такие товары являются "мошенническими" и не имеют никакого другого смысла, кроме как добавлять копейку за копейкой к конечной сумме. В некоторых случаях есть возможность удалить такие элементы до подтверждения покупки, но чаще всего такой возможности нет.

Приманка для тараканов (Roach motels)

Этот шаблон довольно часто встречается для услуг и подписок. Он заключается в том, что покупка совершается очень легко, часто после бесплатного пробного периода, с условием, что списание средств будет продолжаться до тех пор, пока пользователь явно не отменит покупку. Вот здесь-то и проявляется темная сторона: усложнение или невозможность отмены подписки. Например, некоторые компании требуют, чтобы пользователь обратился в службу поддержки с подписанным письмом, сопровождаемым документом, удостоверяющим личность. Основная концепция - "заманить пользователя в ловушку", чтобы отказ от услуг стал практически невозможным.

Privacy Zuckering

Эта темная схема названа в честь основателя известной компании, работающей в социальных сетях. Она заключается в том, что пользователю предлагается большое количество бесплатных сервисов, а при использовании приложений ведется мониторинг активности и поведения пользователя. Затем эти данные собираются и продаются сторонним компаниям без ведома пользователя. Зачастую такая практика так или иначе называется в довольно объемном договоре об условиях предоставления услуг, который пользователь должен принять перед использованием сервисов. Таким образом, компания утверждает, что пользователь дал свое согласие и осведомлен, в то время как очень немногие пользователи вообще читают или правильно интерпретируют такое соглашение.

Предотвращение сравнения цен

В данном случае сайт представляет пользователю несколько тарифных планов на услуги, но намеренно скрывает или маскирует либо характеристики, либо индивидуальные цены, в результате чего пользователь не может провести прямое сравнение и выбрать наиболее подходящий вариант.

Цена скрыта или замаскирована таким образом, что пользователь не может принять обоснованное решение и вынужден выбирать вариант на основе характеристик или других атрибутов.

Ненаправленность

Это еще один шаблон, часто используемый в рабочих процессах корзины. Он заключается в использовании названий и опций, которые сбивают пользователя с толку, а предварительно выбранные варианты скрывают альтернативные и более выгодные ценовые предложения. Если система имеет плавающее значение цены (например, для гостиниц или авиабилетов), этот шаблон часто используется для манипулирования пользователем с целью заставить его выбрать тот вариант, который отвечает интересам компании.

Скрытые расходы

В данном случае при выборе пользователем товара или услуги не раскрывается полное или исчерпывающее описание сопутствующих расходов (помимо налогов). Либо при первоначальной покупке, либо при последующих покупках общая сумма оплаты оказывается выше, чем та, на которую рассчитывал пользователь в первый раз.

Приманка и подмена

Эта схема широко используется рекламодателями в Интернете и вызывает наибольшую ненависть у пользователей. Он просто маскирует одну опцию под другую или прямо противоположную той, которую задумал пользователь. Классический пример - во всплывающем окне отображается кнопка Закрыть (обычно простая X), но когда пользователь нажимает ее, намереваясь закрыть диалоговое окно, открывается новая вкладка с рекламируемым сайтом.

Подтверждение позора (Confirm shaming)

Весьма манипулятивная схема, предполагающая намеренное использование формулировок или действий для того, чтобы пристыдить и высмеять пользователя, заставив его сделать то, чего он не хотел в начале сделки. Он может варьироваться от легкого раздражения до откровенного оскорбления. Часто используется вместе с другими темными шаблонами. Вот пример:

Рисунок 11.29 - Диалог подтверждения при удалении услуги из корзины

Заметьте, что в примере формулировки кнопок действий носят манипулятивный характер, хотя исходный вопрос таковым не является. Этот шаблон является обоюдоострым мечом, так как пользователь может почувствовать отказ от всей услуги и отменить всю операцию.

Замаскированная реклама

При внедрении рекламы на страницу она может маскироваться под реальный контент, имитируя стили и кнопки действий с целью заставить пользователя вызвать перенаправление или загрузить файл. В некоторых случаях маскировка такова, что отличить призыв к действию на сайте от рекламы невозможно. Подобная схема популярна на бесплатных сайтах, предлагающих размещение файлов для скачивания, где часто можно встретить несколько кнопок Скачать на странице, но только одна из них действительно загружает нужный файл, а остальные перенаправляют пользователя на сторонний сайт. Вот один из примеров:

Рисунок 11.30 - FileHippo.com размещает бесплатное программное обеспечение. Некоторые рекламные объявления маскируются под кнопки загрузки

На этом скриншоте с сайта FileHippo.com при переходе на страницу загрузки VLC Media Player на сайте представлены несколько кнопок Скачать. Если пользователь не обратит на них внимания, это может вызвать действие, отличное от предполагаемой загрузки программного обеспечения.

Дружественный спам

В этом темном шаблоне приложение запрашивает доступ к контактам пользователя с целью расширения его сети или круга общения. Если пользователь соглашается, то весь его список контактов "забрасывается" письмами, как бы исходящими от него, с предложением услуги. Зачастую после предоставления этой информации она также передается сторонним организациям и рекламодателям.

Перечень темных шаблонов может не быть напрямую связан с каким-либо одним средством массовой информации или структурой, но избегать или предотвращать их - этическая обязанность людей, работающих в этой отрасли.

Подведение итогов

В этой главе мы рассмотрели важные закономерности, позволяющие создать для пользователя удовлетворительный пользовательский опыт. Мы также познакомились с важными терминами, позволяющими разговаривать с дизайнерами на равных и с взаимопониманием, что является необходимым условием для сотрудничества и предоставления пользователю максимально положительного опыта.

Мы также рассмотрели некоторые из наиболее распространенных "темных" шаблонов, которые представляют собой приемы и реализации рабочих процессов, направленные на манипулирование пользователями и зачастую лишающие их конфиденциальности и ресурсов.

Хотя эта глава носит в основном информационный характер, она должна дать вам более полное представление о среде, в которой создаются веб-приложения, и о том, каких стандартов следует придерживаться для удобства работы с ними. Все это - знания, которые должен знать хороший инженер и разработчик.

Вопросы для проверки

Приведем несколько простых вопросов, которые помогут вам обобщить то, что вы узнали в этой главе:

  • Что такое UI и UX шаблоны?
  • Можете ли вы назвать преимущества использования шаблонов UX?
  • Какую пользу может принести использование стандартных шаблонов в компонентах Vue 3?
  • Что такое темные шаблоны и почему их следует избегать?
- +}

Обратите внимание, что в код включена точка останова на ширине 600 пикселей. Вы можете управлять различными размерами экрана, применяя несколько медиазапросов с точками останова.

Домашняя ссылка

Этот шаблон настолько распространен, что мы даже не задумываемся о нем. Главный логотип компании размещается в левой верхней части страницы как ссылка на главный экран. Такое расположение не случайно, оно связано с тем, как пользователи "сканируют" страницу.

Разные пользователи при загрузке страницы бросают беглый взгляд, направляя глаза в направлении Z, L или T по странице. Размещение логотипа в виде ссылки в левом верхнем углу гарантирует, что он будет первым элементом, который зарегистрирует пользователь. В данной главе хорошим примером этого шаблона являются рисунки 11.21 и 11.22. Но есть и исключения, например, домашняя страница Google:

Рисунок 11.24 - Главная страница Google является исключением из этого шаблона, так как логотип не является ссылкой

Однако исключение, показанное на предыдущем рисунке, является лишь временным, так как Google возвращается к этому шаблону, когда выводит результаты поиска:

Рисунок 11.25 - Результат поиска Google применяет шаблон

Шаблон "Главная ссылка" должен возвращать вас либо на главную страницу, либо на первый шаг процесса. Этот шаблон настолько широко распространен и понятен пользователям, что любое исключение из него должно делаться очень осторожно, с хорошим пониманием поведения и взаимодействия пользовательской базы.

Главная (hero) секция, призыв к действию (call to action) и иконки социальных сетей

Раздел hero - это первая часть, которая отображается при загрузке страницы в браузере и идет от самого верха (где находятся главная ссылка и главное меню) до, максимум, видимой нижней части экрана. Все содержимое, расположенное ниже этого раздела, называется "ниже сгиба (“below the fold)", т.е. чтобы увидеть его, пользователю необходимо прокрутить страницу вниз.

Hero раздел считается наиболее важной частью главной страницы и местом, где размещается первоначальный призыв к действию (call to action). Мы уже рассматривали эту концепцию в этой главе, когда говорили о принципах и контрастах дизайна пользовательского интерфейса. В настоящее время большинство сайтов придерживаются этой схемы и отображают раздел-герой контрастно, с большими изображениями или каруселью и преобладающим призывом к действию.

Рисунок 11.26 - Героический раздел главной страницы Kobold Press - красочный и непосредственный

В предыдущем примере от Kobold Press мы видим, как они применили несколько шаблонов, описанных здесь, начиная с главной ссылки и главного меню и заканчивая героической секцией и призывом к действию.

Обратите внимание также на то, что слева в виде плавающей боковой панели отображаются иконки социальных сетей. Становится шаблонным размещение таких значков со ссылками на адреса социальных сетей для каждого учреждения, а в случае постов или статей - со ссылкой "поделиться" контентом. Обычно панель социальных иконок размещается следующим образом:

  • В нижнем колонтитуле сайта
  • В начале и/или конце статьи
  • В описании продукта

При размещении ссылок на прямой доступ к контенту из приложения Vue (например, к товару из интернет-магазина) важно, чтобы ссылка и приложение Vue указывали непосредственно на такой товар. Необходимо обратить пристальное внимание на то, как формируется и интерпретируется навигационный URL при первой загрузке приложения Vue, чтобы избежать размещения ссылок, открывающих домашний экран вместо нужного раздела приложения.

Другие шаблоны

Есть и другие шаблоны, сотни, если не тысячи, которые оказывают непосредственное влияние на пользовательский опыт. Я рекомендую вам продолжить их изучение, например, следующие:

  • Шаблоны корзины
  • Пользовательский onboarding
  • Шаблоны геймификации
  • Шаблоны регистрации и снятия с регистрации

Однако у пользовательского опыта есть и темная сторона, связанная с использованием манипулятивных и обманных приемов. Как этичный разработчик, вы должны избегать использования любых из этих темных шаблонов.

Темные шаблоны

Темные шаблоны - это тщательно продуманные интерфейсы и взаимодействия с единственной целью - манипулировать или обмануть пользователя, заставить его совершить непредусмотренные действия или даже втянуть его во вредоносные результаты. После такого определения можно подумать, что подобные действия относятся к самым глубоким теневым уголкам Интернета. К сожалению, даже крупные компании часто следуют этой неэтичной практике. Собственно говоря, все воспроизведенные в этих разделах примеры относятся именно к такой категории, и, как это часто бывает с шаблонами проектирования, многие из них пересекаются или могут быть вложены друг в друга. Давайте рассмотрим их по очереди.

Вопросы с подвохом

Этот шаблон представляет собой простую или сложную игру слов, направленную на то, чтобы обмануть пользователя и заставить его сделать противоположное тому, что он задумал. Вот пример:

Рисунок 11.27 - Вопрос с подвохом для подписки на рассылку

Как видно из приведенного примера, у пользователя, заполняющего форму, может возникнуть соблазн оставить этот флажок не отмеченным, если он не хочет получать рассылку новостей от компании. Обычная тенденция - обратить внимание на выделенный жирным шрифтом текст, который является своего рода заголовком. Реальное же действие флажка находится в конце абзаца, который большинство пользователей не читает: Отметьте эту опцию, если вы не хотите получать нашу рассылку.

Проникновение в корзину

Этот темный шаблон встречается во многих приложениях для покупок, довольно часто в таких сервисах, как хостинг и авиабилеты. Он заключается в том, что при оформлении заказа в корзину помещаются товары, которые пользователь не выбрал, обычно это представляется как предложение или "необходимый" товар на небольшую сумму. Вот пример:

Рисунок 11.28 - В корзину добавлен дополнительный товар

В данном примере после оформления заказа на новый домен в корзину был автоматически добавлен новый пункт Первая настройка. Этот пункт не имеет другого объяснения, а его сумма кажется "маленькой" по сравнению с основной целью покупки. Часто такие товары являются "мошенническими" и не имеют никакого другого смысла, кроме как добавлять копейку за копейкой к конечной сумме. В некоторых случаях есть возможность удалить такие элементы до подтверждения покупки, но чаще всего такой возможности нет.

Приманка для тараканов (Roach motels)

Этот шаблон довольно часто встречается для услуг и подписок. Он заключается в том, что покупка совершается очень легко, часто после бесплатного пробного периода, с условием, что списание средств будет продолжаться до тех пор, пока пользователь явно не отменит покупку. Вот здесь-то и проявляется темная сторона: усложнение или невозможность отмены подписки. Например, некоторые компании требуют, чтобы пользователь обратился в службу поддержки с подписанным письмом, сопровождаемым документом, удостоверяющим личность. Основная концепция - "заманить пользователя в ловушку", чтобы отказ от услуг стал практически невозможным.

Privacy Zuckering

Эта темная схема названа в честь основателя известной компании, работающей в социальных сетях. Она заключается в том, что пользователю предлагается большое количество бесплатных сервисов, а при использовании приложений ведется мониторинг активности и поведения пользователя. Затем эти данные собираются и продаются сторонним компаниям без ведома пользователя. Зачастую такая практика так или иначе называется в довольно объемном договоре об условиях предоставления услуг, который пользователь должен принять перед использованием сервисов. Таким образом, компания утверждает, что пользователь дал свое согласие и осведомлен, в то время как очень немногие пользователи вообще читают или правильно интерпретируют такое соглашение.

Предотвращение сравнения цен

В данном случае сайт представляет пользователю несколько тарифных планов на услуги, но намеренно скрывает или маскирует либо характеристики, либо индивидуальные цены, в результате чего пользователь не может провести прямое сравнение и выбрать наиболее подходящий вариант.

Цена скрыта или замаскирована таким образом, что пользователь не может принять обоснованное решение и вынужден выбирать вариант на основе характеристик или других атрибутов.

Ненаправленность

Это еще один шаблон, часто используемый в рабочих процессах корзины. Он заключается в использовании названий и опций, которые сбивают пользователя с толку, а предварительно выбранные варианты скрывают альтернативные и более выгодные ценовые предложения. Если система имеет плавающее значение цены (например, для гостиниц или авиабилетов), этот шаблон часто используется для манипулирования пользователем с целью заставить его выбрать тот вариант, который отвечает интересам компании.

Скрытые расходы

В данном случае при выборе пользователем товара или услуги не раскрывается полное или исчерпывающее описание сопутствующих расходов (помимо налогов). Либо при первоначальной покупке, либо при последующих покупках общая сумма оплаты оказывается выше, чем та, на которую рассчитывал пользователь в первый раз.

Приманка и подмена

Эта схема широко используется рекламодателями в Интернете и вызывает наибольшую ненависть у пользователей. Он просто маскирует одну опцию под другую или прямо противоположную той, которую задумал пользователь. Классический пример - во всплывающем окне отображается кнопка Закрыть (обычно простая X), но когда пользователь нажимает ее, намереваясь закрыть диалоговое окно, открывается новая вкладка с рекламируемым сайтом.

Подтверждение позора (Confirm shaming)

Весьма манипулятивная схема, предполагающая намеренное использование формулировок или действий для того, чтобы пристыдить и высмеять пользователя, заставив его сделать то, чего он не хотел в начале сделки. Он может варьироваться от легкого раздражения до откровенного оскорбления. Часто используется вместе с другими темными шаблонами. Вот пример:

Рисунок 11.29 - Диалог подтверждения при удалении услуги из корзины

Заметьте, что в примере формулировки кнопок действий носят манипулятивный характер, хотя исходный вопрос таковым не является. Этот шаблон является обоюдоострым мечом, так как пользователь может почувствовать отказ от всей услуги и отменить всю операцию.

Замаскированная реклама

При внедрении рекламы на страницу она может маскироваться под реальный контент, имитируя стили и кнопки действий с целью заставить пользователя вызвать перенаправление или загрузить файл. В некоторых случаях маскировка такова, что отличить призыв к действию на сайте от рекламы невозможно. Подобная схема популярна на бесплатных сайтах, предлагающих размещение файлов для скачивания, где часто можно встретить несколько кнопок Скачать на странице, но только одна из них действительно загружает нужный файл, а остальные перенаправляют пользователя на сторонний сайт. Вот один из примеров:

Рисунок 11.30 - FileHippo.com размещает бесплатное программное обеспечение. Некоторые рекламные объявления маскируются под кнопки загрузки

На этом скриншоте с сайта FileHippo.com при переходе на страницу загрузки VLC Media Player на сайте представлены несколько кнопок Скачать. Если пользователь не обратит на них внимания, это может вызвать действие, отличное от предполагаемой загрузки программного обеспечения.

Дружественный спам

В этом темном шаблоне приложение запрашивает доступ к контактам пользователя с целью расширения его сети или круга общения. Если пользователь соглашается, то весь его список контактов "забрасывается" письмами, как бы исходящими от него, с предложением услуги. Зачастую после предоставления этой информации она также передается сторонним организациям и рекламодателям.

Перечень темных шаблонов может не быть напрямую связан с каким-либо одним средством массовой информации или структурой, но избегать или предотвращать их - этическая обязанность людей, работающих в этой отрасли.

Подведение итогов

В этой главе мы рассмотрели важные закономерности, позволяющие создать для пользователя удовлетворительный пользовательский опыт. Мы также познакомились с важными терминами, позволяющими разговаривать с дизайнерами на равных и с взаимопониманием, что является необходимым условием для сотрудничества и предоставления пользователю максимально положительного опыта.

Мы также рассмотрели некоторые из наиболее распространенных "темных" шаблонов, которые представляют собой приемы и реализации рабочих процессов, направленные на манипулирование пользователями и зачастую лишающие их конфиденциальности и ресурсов.

Хотя эта глава носит в основном информационный характер, она должна дать вам более полное представление о среде, в которой создаются веб-приложения, и о том, каких стандартов следует придерживаться для удобства работы с ними. Все это - знания, которые должен знать хороший инженер и разработчик.

Вопросы для проверки

Приведем несколько простых вопросов, которые помогут вам обобщить то, что вы узнали в этой главе:

  • Что такое UI и UX шаблоны?
  • Можете ли вы назвать преимущества использования шаблонов UX?
  • Какую пользу может принести использование стандартных шаблонов в компонентах Vue 3?
  • Что такое темные шаблоны и почему их следует избегать?
+ \ No newline at end of file diff --git a/ru/book/Chapter_1__The_Vue_3_Framework.html b/ru/book/Chapter_1__The_Vue_3_Framework.html index 3103ce9d8..cc029f41f 100644 --- a/ru/book/Chapter_1__The_Vue_3_Framework.html +++ b/ru/book/Chapter_1__The_Vue_3_Framework.html @@ -6,13 +6,13 @@ Фреймворк Vue 3 | Vue FAQ - + - + - + - + @@ -90,8 +90,8 @@ <template>     <component :is="action"></component>      <button @click="action = 'EditItem'">Edit</button> -</template>

В этом простом примере, когда пользователь нажмет кнопку Edit, значение action изменится на EditItem, и компонент заменится. Документацию можно найти здесь:https://vuejs.org/api/built-in-special-elements.html.

Поняв, что такое фреймворки и компоненты, мы теперь лучше подготовлены к дальнейшей работе.

Кодовые соглашения (code conventions) в книге

В этой книге мы будем использовать набор кодовых соглашений и рекомендаций, которые являются хорошей практикой для Vue 3. Они помогут вам не только понять примеры, приведенные в этой книге, но и код, который вы можете встретить в природе, поскольку все больше разработчиков используют его. Давайте начнем с самого начала.

Переменные и пропсы

Они всегда пишутся в нижнем регистре, а пробелы заменяются знаком подчеркивания, например, total_count и person_id.

Константы

Ссылки на инжектируемые объекты начинаются со знака $, например, $router, $modals и $notifications.

Ссылки на реактивные данные начинаются с _ и набираются в змеином регистре (snake case), например, _total и _first_input.

Ссылки на константные значения обозначаются заглавными буквами, например, OPTION и LANGUAGE_CODE.

Функции-конструкторы для инжектируемых зависимостей будут начинаться с use, например, const $store=useStore().

Имена классов и компонентов

Они записываются в PascalCase (каждое слово начинается с буквы верхнего регистра), например, Person, Task и QueueBuilder.

Функции, методы, события и имена файлов

Они пишутся в CamelCase, например, doSubscribe() и processQueue().

Экземпляры

Экземпляры будут иметь абстрактное имя, за которым следует слово Service в случае обычных JavaScript-объектов, предоставляющих функции, Model для моделей состояний и так далее. Мы будем использовать сервисы для инкапсуляции функциональности.

Например: const projectService=new ProjectService().

Совет

В своей команде всегда используйте кодовые соглашения, с которыми все согласны. Это сделает код более читаемым и удобным для сопровождения. Можно также порекомендовать использовать линтер (процессор для фиксации соглашений в коде).

Как уже говорилось, эти соглашения набирают популярность, поэтому вы можете встретить их во многих проектах. Однако они не являются обязательными стандартами и уж точно не предписаны фреймворком. Вы можете писать все заглавными буквами, если это ваш стиль, но на самом деле важно, чтобы вы и ваша команда определили и соблюдали свои собственные соглашения в последовательной манере. В конечном итоге важно, чтобы при написании кода у всех нас был общий язык.

Подведение итогов

В этой главе мы прошли путь от основ библиотек и фреймворков до директив Vue 3, компонентов и даже кодовых соглашений. Эти понятия все еще немного абстрактны, поэтому мы будем доводить их до реализации по мере продвижения по книге и работы с реальным кодом. Однако сейчас мы готовы для изучения принципов проектирования и паттернов в следующей главе.

Вопросы для проверки

Для того чтобы помочь вам закрепить содержание этой главы, вы можете воспользоваться следующими вопросами:

  • В чем разница между библиотекой и фреймворком?
  • Почему Vue является "прогрессивным" фреймворком?
  • Что такое однофайловые компоненты?
  • Какие директивы наиболее часто используются при разработке Vue?
  • Почему важны соглашения в коде?

Если вы можете быстро ответить на эти вопросы в уме, то вы готовы к работе! Если нет, то, возможно, вам стоит кратко просмотреть главу, чтобы убедиться, что у вас есть основа для дальнейшей работы.

- +</template>

В этом простом примере, когда пользователь нажмет кнопку Edit, значение action изменится на EditItem, и компонент заменится. Документацию можно найти здесь:https://vuejs.org/api/built-in-special-elements.html.

Поняв, что такое фреймворки и компоненты, мы теперь лучше подготовлены к дальнейшей работе.

Кодовые соглашения (code conventions) в книге

В этой книге мы будем использовать набор кодовых соглашений и рекомендаций, которые являются хорошей практикой для Vue 3. Они помогут вам не только понять примеры, приведенные в этой книге, но и код, который вы можете встретить в природе, поскольку все больше разработчиков используют его. Давайте начнем с самого начала.

Переменные и пропсы

Они всегда пишутся в нижнем регистре, а пробелы заменяются знаком подчеркивания, например, total_count и person_id.

Константы

Ссылки на инжектируемые объекты начинаются со знака $, например, $router, $modals и $notifications.

Ссылки на реактивные данные начинаются с _ и набираются в змеином регистре (snake case), например, _total и _first_input.

Ссылки на константные значения обозначаются заглавными буквами, например, OPTION и LANGUAGE_CODE.

Функции-конструкторы для инжектируемых зависимостей будут начинаться с use, например, const $store=useStore().

Имена классов и компонентов

Они записываются в PascalCase (каждое слово начинается с буквы верхнего регистра), например, Person, Task и QueueBuilder.

Функции, методы, события и имена файлов

Они пишутся в CamelCase, например, doSubscribe() и processQueue().

Экземпляры

Экземпляры будут иметь абстрактное имя, за которым следует слово Service в случае обычных JavaScript-объектов, предоставляющих функции, Model для моделей состояний и так далее. Мы будем использовать сервисы для инкапсуляции функциональности.

Например: const projectService=new ProjectService().

Совет

В своей команде всегда используйте кодовые соглашения, с которыми все согласны. Это сделает код более читаемым и удобным для сопровождения. Можно также порекомендовать использовать линтер (процессор для фиксации соглашений в коде).

Как уже говорилось, эти соглашения набирают популярность, поэтому вы можете встретить их во многих проектах. Однако они не являются обязательными стандартами и уж точно не предписаны фреймворком. Вы можете писать все заглавными буквами, если это ваш стиль, но на самом деле важно, чтобы вы и ваша команда определили и соблюдали свои собственные соглашения в последовательной манере. В конечном итоге важно, чтобы при написании кода у всех нас был общий язык.

Подведение итогов

В этой главе мы прошли путь от основ библиотек и фреймворков до директив Vue 3, компонентов и даже кодовых соглашений. Эти понятия все еще немного абстрактны, поэтому мы будем доводить их до реализации по мере продвижения по книге и работы с реальным кодом. Однако сейчас мы готовы для изучения принципов проектирования и паттернов в следующей главе.

Вопросы для проверки

Для того чтобы помочь вам закрепить содержание этой главы, вы можете воспользоваться следующими вопросами:

  • В чем разница между библиотекой и фреймворком?
  • Почему Vue является "прогрессивным" фреймворком?
  • Что такое однофайловые компоненты?
  • Какие директивы наиболее часто используются при разработке Vue?
  • Почему важны соглашения в коде?

Если вы можете быстро ответить на эти вопросы в уме, то вы готовы к работе! Если нет, то, возможно, вам стоит кратко просмотреть главу, чтобы убедиться, что у вас есть основа для дальнейшей работы.

+ \ No newline at end of file diff --git a/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html b/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html index c8d8c0506..35911900a 100644 --- a/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html +++ b/ru/book/Chapter_2__Software_Design_Principles_and_Patterns.html @@ -6,13 +6,13 @@ Принципы и шаблоны проектирования программного обеспечения | Vue FAQ - + - + - + - + @@ -327,8 +327,8 @@ MyFuncA() .then((result) => { a = result; return MyFuncB(); }) .then((result) => { b = result; return MyFuncC(); }) - .then((result) => { c = result; console.log(a + b + c); });

Этот формат сложнее для понимания и, конечно, более многословен. Для таких случаев предпочтительнее использовать синтаксис async/await.

Использование обещаний отлично подходит для обертывания длинных или неопределенных операций и интеграции с другими рассмотренными нами шаблонами (façade, decorator и т.д.). Это важный шаблон, который мы будем широко использовать в наших приложениях.

Подведение итогов

В этой главе мы рассмотрели принципы разработки программного обеспечения и важные шаблоны проектирования, привели примеры на обычном JavaScript и, когда это было уместно, намекнули на реализацию с помощью Vue 3. Эти шаблоны могут быть сложны для восприятия при первом знакомстве с ними, но мы будем использовать их и возвращаться к ним в остальных частях книги, так что эта глава будет работать как справочник. Это позволит вам лучше понять, когда и как применять те или иные шаблоны в зависимости от потребностей вашего приложения.

В следующей главе мы начнем реализовывать проект с нуля и заложим основы для приложений, которые мы будем создавать в остальных частях книги. По мере продвижения вперед мы будем ссылаться на эти шаблоны, чтобы помочь вам закрепить их применение.

Вопросы для проверки

  • В чем разница между принципом и шаблоном проектирования?
  • Почему шаблон singleton так важен?
  • Как можно управлять зависимостями?
  • Какие шаблоны делают возможной реактивность?
  • Взаимосвязаны ли шаблоны между собой? Почему? Можете ли вы привести пример?
  • Что такое асинхронное программирование и почему оно так важно?
  • Можете ли вы придумать примеры использования promised функций?
- + .then((result) => { c = result; console.log(a + b + c); });

Этот формат сложнее для понимания и, конечно, более многословен. Для таких случаев предпочтительнее использовать синтаксис async/await.

Использование обещаний отлично подходит для обертывания длинных или неопределенных операций и интеграции с другими рассмотренными нами шаблонами (façade, decorator и т.д.). Это важный шаблон, который мы будем широко использовать в наших приложениях.

Подведение итогов

В этой главе мы рассмотрели принципы разработки программного обеспечения и важные шаблоны проектирования, привели примеры на обычном JavaScript и, когда это было уместно, намекнули на реализацию с помощью Vue 3. Эти шаблоны могут быть сложны для восприятия при первом знакомстве с ними, но мы будем использовать их и возвращаться к ним в остальных частях книги, так что эта глава будет работать как справочник. Это позволит вам лучше понять, когда и как применять те или иные шаблоны в зависимости от потребностей вашего приложения.

В следующей главе мы начнем реализовывать проект с нуля и заложим основы для приложений, которые мы будем создавать в остальных частях книги. По мере продвижения вперед мы будем ссылаться на эти шаблоны, чтобы помочь вам закрепить их применение.

Вопросы для проверки

  • В чем разница между принципом и шаблоном проектирования?
  • Почему шаблон singleton так важен?
  • Как можно управлять зависимостями?
  • Какие шаблоны делают возможной реактивность?
  • Взаимосвязаны ли шаблоны между собой? Почему? Можете ли вы привести пример?
  • Что такое асинхронное программирование и почему оно так важно?
  • Можете ли вы придумать примеры использования promised функций?
+ \ No newline at end of file diff --git a/ru/book/Chapter_3__Setting_Up_a_Working_Project.html b/ru/book/Chapter_3__Setting_Up_a_Working_Project.html index 93908acdf..221b37aaf 100644 --- a/ru/book/Chapter_3__Setting_Up_a_Working_Project.html +++ b/ru/book/Chapter_3__Setting_Up_a_Working_Project.html @@ -6,13 +6,13 @@ Установка рабочего проекта | Vue FAQ - + - + - + - + @@ -132,8 +132,8 @@   No tasks </div> </div>

Для отображения списка задач у нас есть два практически одинаковых блока кода, начинающихся на строках //4 и //5 - один для отложенных задач, другой - для выполненных. Мы остановимся только на первом блоке (начинающемся на строке //4), поскольку поведение этих блоков практически одинаково.

В первом элементе div мы создаем небольшой заголовок, который отображает количество элементов в массиве _pending, интерполируя его длину. Для этого используется следующая строка:

js
Pending ({{ _pending.length }})

Обратите внимание, что мы можем обращаться к атрибутам массива непосредственно внутри двойных фигурных скобок, без использования атрибута .value. Хотя в JavaScript-коде мы должны написать это как _pending.value.length, при использовании интерполяции в HTML Vue достаточно умён, чтобы определить реактивную переменную в нашей секции шаблона и получить доступ к ее значению напрямую. Это верно как для вычисляемых свойств, так и для реактивных переменных, созданных с помощью ref().

В следующем элементе div мы создаем список с помощью директивы v-for/:key, которая будет перебирать наш массив _pending и создавать копию элемента для каждого элемента. Внутри каждого из них мы теперь можем ссылаться на каждый элемент с именем todo, которое мы объявили в директиве v-for.

Далее мы обернем input и span внутри элемента label и привяжем свойство todo.checked (Boolean) к input с помощью v-model. Vue позаботится о присвоении значения true или false в зависимости от состояния флажка. Когда это произойдет, он также вызовет пересчет свойств computed, и мы увидим, как при установке/снятии флажка элемент перемещается между группами (ожидающие и завершенные), а также обновляет общее количество каждого блока. У нас также есть элемент span для отображения текста задачи.

И наконец, для случаев, когда группа списка пуста, у нас также есть элемент div, который будет виден только в том случае, если этот список пуст, в строке //6 (\pending.length==0)

Как уже упоминалось, часть, отображающая наш список "выполненных" дел, работает аналогичным образом, применяя ту же логику.

В данном случае объем наших стилей будет невелик, так как нам потребуется всего пара дополнительных настроек, поскольку основная часть работы была выполнена с помощью библиотеки w3.css. Внутри нашей секции style добавьте следующее:

css
.todo-container {max-width: 100%; min-width: 30rem;}
-label {cursor: pointer; display: flex;}

Класс todo-container ограничивает максимальную и минимальную ширину нашего компонента, а также мы модифицируем элемент label для отображения его дочерних элементов с помощью макета flex

Чтобы увидеть приложение в действии, сохраните все изменения и запустите сервер разработки Vite, выполнив в терминале следующую команду:

sh
$ npm run dev

После того как Vite будет готов, откройте его адрес в браузере, как мы это делали ранее. Если все в порядке, вы должны увидеть, что наш список дел работает так, как ожидалось. В противном случае проверьте исходный код в репозитории, чтобы убедиться, что набранный вами код соответствует полному примеру.

Краткая критика нашего приложения To-Do

Приложение, которое мы только что сделали, работает и является немного более продвинутым, чем простое Hello World или кнопка счетчика. Однако мы не применили все лучшие практики и паттерны, которые должны или могли бы применить. Это сделано специально, в качестве обучающего упражнения.

Иногда, чтобы понять, как правильно построить что-то, нужно сначала построить это так, чтобы оно работало как есть. В целом, все инженерные практики понимают, что существует итеративный процесс доработки, который обеспечивает обучение и совершенствование с каждым взаимодействием.

Как только мы создали первый прототип, самое время сделать шаг назад и подвергнуть его искренней критике, подумав о том, как мы можем его улучшить и сделать лучше. В данном случае, вот наша критика:

  • В нашем шаблоне есть дублирование кода, поскольку вычисляемые свойства _pending и _done в принципе одинаковы, с небольшим отличием, основанным на значении переменной.
  • Мы не используем возможности компонентов, поскольку все построено в одном компоненте.
  • Наш компонент также создает наши модели (элементы To-Do), поэтому наша бизнес-логика привязана к нашему компоненту.
  • Мы сделали очень мало в плане санитизации и контроля ввода. Можно предвидеть, что некоторый код, даже с одинаковыми входными данными, сломает наше приложение.
  • Наш список дел непостоянен. Обновление страницы может очистить наш список.
  • В нашей задаче есть только два состояния (выполнено и отложено). А что, если мы хотим иметь третье или более состояний? Например, "в процессе", "в ожидании" или "следующий в очереди"
  • Текущий дизайн не предусматривает возможности редактирования или удаления задачи после ее создания.
  • Мы можем одновременно управлять только одним списком элементов.

По мере продвижения вперед мы будем совершенствовать наше приложение и применять принципы и паттерны, чтобы сделать его более устойчивым и полезным. В следующей главе мы рассмотрим, как скомпоновать веб-приложение с помощью веб-компонентов более доступным способом.

Подведение итогов

В этой главе мы начали создавать приложения, используя реальные инструменты, от IDE до инструментов командной строки, для создания каркаса приложения, предварительного просмотра и сборки приложения. Мы также создали простое приложение To-Do и узнали, как можно интегрировать сторонние CSS-библиотеки и шрифты иконок в наше приложение, а также определили некоторые общие рекомендации по использованию других библиотек.

Мы также критически подошли к нашему простому приложению, чтобы улучшить его функциональность, а заодно и свои навыки. В следующей главе мы рассмотрим, как лучше организовать наш код и создать иерархию компонентов для создания пользовательских интерфейсов.

Вопросы для проверки

  • Каковы требования к разработке приложения Vue 3 с помощью Vite?
  • Возможно ли интегрировать сторонние библиотеки и фреймворки с Vue 3?
  • Каковы шаги по интеграции библиотеки, работающей только с CSS, в приложение Vue?
  • Является ли хорошей идеей создание приложения внутри одного компонента? Почему да или нет? Можете ли вы назвать сценарии, когда однокомпонентное приложение является подходящим вариантом? А как насчет сценария, когда это не так?
  • Почему разработка программного обеспечения - это итеративный процесс совершенствования?
- +label {cursor: pointer; display: flex;}

Класс todo-container ограничивает максимальную и минимальную ширину нашего компонента, а также мы модифицируем элемент label для отображения его дочерних элементов с помощью макета flex

Чтобы увидеть приложение в действии, сохраните все изменения и запустите сервер разработки Vite, выполнив в терминале следующую команду:

sh
$ npm run dev

После того как Vite будет готов, откройте его адрес в браузере, как мы это делали ранее. Если все в порядке, вы должны увидеть, что наш список дел работает так, как ожидалось. В противном случае проверьте исходный код в репозитории, чтобы убедиться, что набранный вами код соответствует полному примеру.

Краткая критика нашего приложения To-Do

Приложение, которое мы только что сделали, работает и является немного более продвинутым, чем простое Hello World или кнопка счетчика. Однако мы не применили все лучшие практики и паттерны, которые должны или могли бы применить. Это сделано специально, в качестве обучающего упражнения.

Иногда, чтобы понять, как правильно построить что-то, нужно сначала построить это так, чтобы оно работало как есть. В целом, все инженерные практики понимают, что существует итеративный процесс доработки, который обеспечивает обучение и совершенствование с каждым взаимодействием.

Как только мы создали первый прототип, самое время сделать шаг назад и подвергнуть его искренней критике, подумав о том, как мы можем его улучшить и сделать лучше. В данном случае, вот наша критика:

  • В нашем шаблоне есть дублирование кода, поскольку вычисляемые свойства _pending и _done в принципе одинаковы, с небольшим отличием, основанным на значении переменной.
  • Мы не используем возможности компонентов, поскольку все построено в одном компоненте.
  • Наш компонент также создает наши модели (элементы To-Do), поэтому наша бизнес-логика привязана к нашему компоненту.
  • Мы сделали очень мало в плане санитизации и контроля ввода. Можно предвидеть, что некоторый код, даже с одинаковыми входными данными, сломает наше приложение.
  • Наш список дел непостоянен. Обновление страницы может очистить наш список.
  • В нашей задаче есть только два состояния (выполнено и отложено). А что, если мы хотим иметь третье или более состояний? Например, "в процессе", "в ожидании" или "следующий в очереди"
  • Текущий дизайн не предусматривает возможности редактирования или удаления задачи после ее создания.
  • Мы можем одновременно управлять только одним списком элементов.

По мере продвижения вперед мы будем совершенствовать наше приложение и применять принципы и паттерны, чтобы сделать его более устойчивым и полезным. В следующей главе мы рассмотрим, как скомпоновать веб-приложение с помощью веб-компонентов более доступным способом.

Подведение итогов

В этой главе мы начали создавать приложения, используя реальные инструменты, от IDE до инструментов командной строки, для создания каркаса приложения, предварительного просмотра и сборки приложения. Мы также создали простое приложение To-Do и узнали, как можно интегрировать сторонние CSS-библиотеки и шрифты иконок в наше приложение, а также определили некоторые общие рекомендации по использованию других библиотек.

Мы также критически подошли к нашему простому приложению, чтобы улучшить его функциональность, а заодно и свои навыки. В следующей главе мы рассмотрим, как лучше организовать наш код и создать иерархию компонентов для создания пользовательских интерфейсов.

Вопросы для проверки

  • Каковы требования к разработке приложения Vue 3 с помощью Vite?
  • Возможно ли интегрировать сторонние библиотеки и фреймворки с Vue 3?
  • Каковы шаги по интеграции библиотеки, работающей только с CSS, в приложение Vue?
  • Является ли хорошей идеей создание приложения внутри одного компонента? Почему да или нет? Можете ли вы назвать сценарии, когда однокомпонентное приложение является подходящим вариантом? А как насчет сценария, когда это не так?
  • Почему разработка программного обеспечения - это итеративный процесс совершенствования?
+ \ No newline at end of file diff --git a/ru/book/Chapter_4__User_Interface_Composition_with_Components.html b/ru/book/Chapter_4__User_Interface_Composition_with_Components.html index 87805b2e9..758b7ae4e 100644 --- a/ru/book/Chapter_4__User_Interface_Composition_with_Components.html +++ b/ru/book/Chapter_4__User_Interface_Composition_with_Components.html @@ -6,13 +6,13 @@ Композиция пользовательского интерфейса с помощью компонентов | Vue FAQ - + - + - + - + @@ -186,8 +186,8 @@          case "in_progress":        return "completed"          case "completed":          return "not_started"      } -}

Эта функция, учитывая текущий статус, вернет следующий. Вызывая эту функцию при каждом щелчке мыши, мы можем обновлять состояние каждого элемента в чистом виде.

Последним моментом, который следует отметить в этой новой реализации, является использование вычисляемых свойств в компоненте ToDoSummary. С их помощью мы выводим на экран сводные карточки с различными состояниями наших элементов. Обратите внимание, как хорошо работает реактивность - как только мы изменяем состояние элемента в списке, сводка немедленно обновляется!

После того как новая реализация приведена в порядок, пришло время сделать шаг назад и взглянуть на нашу работу критически.

Небольшая критика нашего нового приложения To-Do

Новая версия приложения To-Do - это явное улучшение по сравнению с нашим первым подходом, но ее можно усовершенствовать:

  • У нас по-прежнему только один список задач.
  • Все по-прежнему происходит на одной странице.
  • Наши элементы эфемерны. Они исчезают, когда мы закрываем или обновляем браузер.
  • Нет никакой безопасности, нет возможности иметь несколько пользователей и т.д.
  • Мы можем добавлять только обычный текст. А как насчет изображений или насыщенного текста?
  • После некоторой работы мы могли бы расширить наше приложение, чтобы оно управляло несколькими проектами, дополнительным контентом, заданиями и т.д.
  • Мы добились хороших результатов, но нам еще многое предстоит сделать.

Подведение итогов

В этой главе мы подробно рассмотрели компоненты и узнали, как они могут взаимодействовать, разделять функциональность и реализовывать шаблоны проектирования в рамках фреймворка. Мы также рассмотрели подход к преобразованию грубого эскиза или детального проекта в компоненты.

Затем мы узнали о специальных компонентах, создали плагин для модальных диалогов с использованием инъекции зависимостей фреймворка и применили другие шаблоны, чтобы сделать наше кодирование более простым и конгруэнтным. Кроме того, мы провели рефакторинг нашего приложения и расширили его возможности, взглянув на более эффективное управление состояниями, независимое от HTML-элемента, который мы использовали ранее. Мы добились значительного прогресса, но нам еще есть над чем работать.

В следующей главе мы создадим одностраничное приложение (SPA) с использованием того, чему мы научились за это время.

Вопросы для проверки

Ответьте на следующие вопросы, чтобы проверить свои знания по этой главе:

  • Как мы можем начать с визуального дизайна или прототипа и спланировать реализацию с помощью компонентов?
  • Какими способами компоненты могут взаимодействовать друг с другом?
  • Как мы можем повторно использовать код в нескольких компонентах? Есть ли другой способ?
  • Что такое плагин и как его создать?
  • Какие шаблоны мы применили к новому приложению To-Do?
  • Что бы вы изменили в реализации?
- +}

Эта функция, учитывая текущий статус, вернет следующий. Вызывая эту функцию при каждом щелчке мыши, мы можем обновлять состояние каждого элемента в чистом виде.

Последним моментом, который следует отметить в этой новой реализации, является использование вычисляемых свойств в компоненте ToDoSummary. С их помощью мы выводим на экран сводные карточки с различными состояниями наших элементов. Обратите внимание, как хорошо работает реактивность - как только мы изменяем состояние элемента в списке, сводка немедленно обновляется!

После того как новая реализация приведена в порядок, пришло время сделать шаг назад и взглянуть на нашу работу критически.

Небольшая критика нашего нового приложения To-Do

Новая версия приложения To-Do - это явное улучшение по сравнению с нашим первым подходом, но ее можно усовершенствовать:

  • У нас по-прежнему только один список задач.
  • Все по-прежнему происходит на одной странице.
  • Наши элементы эфемерны. Они исчезают, когда мы закрываем или обновляем браузер.
  • Нет никакой безопасности, нет возможности иметь несколько пользователей и т.д.
  • Мы можем добавлять только обычный текст. А как насчет изображений или насыщенного текста?
  • После некоторой работы мы могли бы расширить наше приложение, чтобы оно управляло несколькими проектами, дополнительным контентом, заданиями и т.д.
  • Мы добились хороших результатов, но нам еще многое предстоит сделать.

Подведение итогов

В этой главе мы подробно рассмотрели компоненты и узнали, как они могут взаимодействовать, разделять функциональность и реализовывать шаблоны проектирования в рамках фреймворка. Мы также рассмотрели подход к преобразованию грубого эскиза или детального проекта в компоненты.

Затем мы узнали о специальных компонентах, создали плагин для модальных диалогов с использованием инъекции зависимостей фреймворка и применили другие шаблоны, чтобы сделать наше кодирование более простым и конгруэнтным. Кроме того, мы провели рефакторинг нашего приложения и расширили его возможности, взглянув на более эффективное управление состояниями, независимое от HTML-элемента, который мы использовали ранее. Мы добились значительного прогресса, но нам еще есть над чем работать.

В следующей главе мы создадим одностраничное приложение (SPA) с использованием того, чему мы научились за это время.

Вопросы для проверки

Ответьте на следующие вопросы, чтобы проверить свои знания по этой главе:

  • Как мы можем начать с визуального дизайна или прототипа и спланировать реализацию с помощью компонентов?
  • Какими способами компоненты могут взаимодействовать друг с другом?
  • Как мы можем повторно использовать код в нескольких компонентах? Есть ли другой способ?
  • Что такое плагин и как его создать?
  • Какие шаблоны мы применили к новому приложению To-Do?
  • Что бы вы изменили в реализации?
+ \ No newline at end of file diff --git a/ru/book/Chapter_5__Single-Page_Applications.html b/ru/book/Chapter_5__Single-Page_Applications.html index 6591266cf..7e0f6dd44 100644 --- a/ru/book/Chapter_5__Single-Page_Applications.html +++ b/ru/book/Chapter_5__Single-Page_Applications.html @@ -6,13 +6,13 @@ Одностраничные приложения | Vue FAQ - + - + - + - + @@ -191,8 +191,8 @@ .then(     result => console.log(result[0]),     err => console.log(err) -)

Вот и все! Выделенная строка побуждает MetaMask открыть новое окно и запросить у пользователя разрешение на подключение его кошелька к вашему веб-приложению, а затем вернуть удобный промис. В случае разрешения результатом будет массив строк, в котором первой позицией будет адрес кошелька для текущей сети. В случае отказа будет выдана ошибка.

Совет

При использовании MetaMask можно открыть в браузере Инструменты разработчика и набрать в одной строке приведенный ниже код для его тестирования.

С помощью MetaMask тот же код для сети Ethereum также работает при подключении к сетям Polygon и Binance Smart Chain (три по цене одного!). Другие сети и кошельки, например кошелек Phantom, работают по тому же принципу и внедряют в объект windows новый объект .solana. Ознакомьтесь с документацией по целевому блокчейну, чтобы узнать подробности каждой реализации.

Взаимодействие с каждым блокчейном и его кодом выходит за рамки данной книги, поэтому мы ограничимся идентификацией пользователя по адресу его кошелька. Получив эту идентификацию, логика приложения должна сохранить ее для дальнейшего использования, поскольку она действует как идентификатор пользователя.

Для аутентификации и взаимодействия с несколькими блокчейнами существуют также решения сторонних разработчиков, и нам следует рассмотреть их, прежде чем реализовывать собственное решение.

Подведение итогов

В этой главе мы значительно улучшили наше приложение и создали продуманный SPA с навигацией с помощью маршрутизатора Vue. Это важная концепция, позволяющая сегментировать приложение и организовать работу между членами команды разработчиков. Фракционирование приложения по пути навигации упрощает разработку и сопровождение и делает их более организованными.

Мы также изучили несколько стандартных паттернов аутентификации, которые можно использовать в наших приложениях. Они охватывают большое количество сценариев, используемых сегодня в индустрии, начиная от самых простых имени пользователя и пароля и заканчивая новыми Web3 DApps.

Мы также уделили время тому, как работают стандартные протоколы, такие как OAuth, а также OTP, и как они могут быть реализованы для дополнительного уровня безопасности в качестве второго фактора аутентификации. Все эти навыки актуальны и необходимы для современных стандартов веб-приложений.

В следующей главе мы познакомимся с прогрессивными веб-приложениями (PWAs).

Вопросы для проверки

В этой главе мы рассмотрели множество различных тем и ввели новые понятия. Используйте следующие вопросы, чтобы закрепить полученные знания:

  • Когда лучше использовать SPA вместо MPA и наоборот?
  • Каковы преимущества использования маршрутизатора в SPA? Назовите не менее трех из собственного анализа.
  • Как можно использовать представления для определения компоновки приложения?
  • Как можно получить доступ к параметрам и строке запроса, переданным маршруту, в JavaScript?
  • Каковы некоторые общие стандартные шаблоны для аутентификации пользователей?
  • Каковы некоторые соображения безопасности при аутентификации пользователей в SPA?
- +)

Вот и все! Выделенная строка побуждает MetaMask открыть новое окно и запросить у пользователя разрешение на подключение его кошелька к вашему веб-приложению, а затем вернуть удобный промис. В случае разрешения результатом будет массив строк, в котором первой позицией будет адрес кошелька для текущей сети. В случае отказа будет выдана ошибка.

Совет

При использовании MetaMask можно открыть в браузере Инструменты разработчика и набрать в одной строке приведенный ниже код для его тестирования.

С помощью MetaMask тот же код для сети Ethereum также работает при подключении к сетям Polygon и Binance Smart Chain (три по цене одного!). Другие сети и кошельки, например кошелек Phantom, работают по тому же принципу и внедряют в объект windows новый объект .solana. Ознакомьтесь с документацией по целевому блокчейну, чтобы узнать подробности каждой реализации.

Взаимодействие с каждым блокчейном и его кодом выходит за рамки данной книги, поэтому мы ограничимся идентификацией пользователя по адресу его кошелька. Получив эту идентификацию, логика приложения должна сохранить ее для дальнейшего использования, поскольку она действует как идентификатор пользователя.

Для аутентификации и взаимодействия с несколькими блокчейнами существуют также решения сторонних разработчиков, и нам следует рассмотреть их, прежде чем реализовывать собственное решение.

Подведение итогов

В этой главе мы значительно улучшили наше приложение и создали продуманный SPA с навигацией с помощью маршрутизатора Vue. Это важная концепция, позволяющая сегментировать приложение и организовать работу между членами команды разработчиков. Фракционирование приложения по пути навигации упрощает разработку и сопровождение и делает их более организованными.

Мы также изучили несколько стандартных паттернов аутентификации, которые можно использовать в наших приложениях. Они охватывают большое количество сценариев, используемых сегодня в индустрии, начиная от самых простых имени пользователя и пароля и заканчивая новыми Web3 DApps.

Мы также уделили время тому, как работают стандартные протоколы, такие как OAuth, а также OTP, и как они могут быть реализованы для дополнительного уровня безопасности в качестве второго фактора аутентификации. Все эти навыки актуальны и необходимы для современных стандартов веб-приложений.

В следующей главе мы познакомимся с прогрессивными веб-приложениями (PWAs).

Вопросы для проверки

В этой главе мы рассмотрели множество различных тем и ввели новые понятия. Используйте следующие вопросы, чтобы закрепить полученные знания:

  • Когда лучше использовать SPA вместо MPA и наоборот?
  • Каковы преимущества использования маршрутизатора в SPA? Назовите не менее трех из собственного анализа.
  • Как можно использовать представления для определения компоновки приложения?
  • Как можно получить доступ к параметрам и строке запроса, переданным маршруту, в JavaScript?
  • Каковы некоторые общие стандартные шаблоны для аутентификации пользователей?
  • Каковы некоторые соображения безопасности при аутентификации пользователей в SPA?
+ \ No newline at end of file diff --git a/ru/book/Chapter_6__Progressive_Web_Applications.html b/ru/book/Chapter_6__Progressive_Web_Applications.html index 1cd60a9ae..c925c8eae 100644 --- a/ru/book/Chapter_6__Progressive_Web_Applications.html +++ b/ru/book/Chapter_6__Progressive_Web_Applications.html @@ -6,13 +6,13 @@ Прогрессивные веб-приложения | Vue FAQ - + - + - + - + @@ -140,8 +140,8 @@            "prefer_related_applications": false      }   })] -})

Используя этот плагин, мы снимаем со сборщика бремя генерации service worker и веб-манифеста. Это необходимо, поскольку при каждой промышленной сборке Vite будет генерировать разные имена файлов для каждого скрипта в соответствии с нашей стратегией "ленивой" загрузки компонентов, о которой мы говорили в предыдущей главе.

В предыдущем примере мы передаем в плагин VitePWA() объект с некоторыми разумными опциями для автоматического создания и внедрения манифеста и рабочего скрипта. Если нам нужен более тонкий контроль над создаваемой стратегией рабочего сервиса, а также над веб-манифестом, то можно использовать плагин в "режиме инъекции" и предоставить базовый файл для нашего рабочего сервиса.

В этом случае в скрипт будут инжектироваться сгенерированные в процессе сборки файлы. Под капотом плагин использует Workbox, инструмент, о котором мы уже упоминали и который мы можем настраивать непосредственно через поле workbox. Более подробное рассмотрение различных реализаций и стратегий выходит за рамки данной книги, но читателю следует обратиться к документации по плагину Vite-PWA и Workbox для конкретных контекстов и случаев использования.

Тестирование показателей PWA с помощью Google Lighthouse

В браузерах на основе Chrome вместе с инструментами разработчика поставляется утилита Lighthouse, специально предназначенная для тестирования и оценки веб-страниц, а также готовности PWA. Чтобы получить доступ к этому инструменту, после открытия своего приложения браузере выполните следующие действия:

  1. Откройте инструменты разработчика (нажав F12 в Windows/Linux, Fn + F12 в Mac, или через меню браузера).
  2. Выберите меню Маяк в правом верхнем углу.
  3. Выберите Mobile или Desktop, а также убедитесь, что отмечена категория Progressive Web App.
  4. Нажмите Анализировать загрузку страницы в правом верхнем углу инструмента.

Инструменты разработчика должны выглядеть примерно так:

image

Рисунок 6.7 - Утилита "Lighthouse".

Утилита проведет ряд тестов, и в каждой категории будет отображаться рейтинг, а также подробный список элементов, которые прошли или не прошли тест. Если наше приложение не соответствует критериям PWA, то в пунктах, отмеченных красным цветом, будет указано, почему и как это исправить:

image

Рисунок 6.8 - Оценки примера кода главы 6 в Lighthouse.

Наш пример кода приложения полностью соответствует требованиям PWA и успешно проходит все тесты. Конечно, этого легче добиться с небольшими приложениями. На практике каждый рейтинг выше 90 является отличным.

Подведение итогов

В этой главе мы рассмотрели простой SPA и научились превращать его в PWA как вручную, так и с помощью плагина в Vite. Пользователи могут устанавливать PWA на свои платформы наряду с родными приложениями и взаимодействовать с ними, даже если они не подключены к Интернету.

PWA обладают множеством преимуществ по сравнению с приложениями, работающими только в Интернете. Мы также рассмотрели, как с помощью Lighthouse можно измерить и оценить наше приложение в нескольких стандартных для отрасли категориях. В этой главе мы закончили рассмотрение поэтапного создания приложений с использованием веб-технологий и впредь будем уделять основное внимание шаблонам и моделям для повышения внутренней производительности и эффективности.

Вопросы для проверки

Для закрепления понятий, изученных в этой главе, ответьте на следующие вопросы:

  • В чем разница между SPA и PWA?
  • Каковы преимущества PWA?
  • Каким основным трем требованиям должно соответствовать веб-приложение, чтобы считаться PWA?
  • Какие инструменты можно использовать для постепенной подготовки приложения к работе в качестве PWA?
  • Что такое service worker и каковы некоторые стратегии его использования?
  • Что такое веб-манифест и зачем он нужен?
- +})

Используя этот плагин, мы снимаем со сборщика бремя генерации service worker и веб-манифеста. Это необходимо, поскольку при каждой промышленной сборке Vite будет генерировать разные имена файлов для каждого скрипта в соответствии с нашей стратегией "ленивой" загрузки компонентов, о которой мы говорили в предыдущей главе.

В предыдущем примере мы передаем в плагин VitePWA() объект с некоторыми разумными опциями для автоматического создания и внедрения манифеста и рабочего скрипта. Если нам нужен более тонкий контроль над создаваемой стратегией рабочего сервиса, а также над веб-манифестом, то можно использовать плагин в "режиме инъекции" и предоставить базовый файл для нашего рабочего сервиса.

В этом случае в скрипт будут инжектироваться сгенерированные в процессе сборки файлы. Под капотом плагин использует Workbox, инструмент, о котором мы уже упоминали и который мы можем настраивать непосредственно через поле workbox. Более подробное рассмотрение различных реализаций и стратегий выходит за рамки данной книги, но читателю следует обратиться к документации по плагину Vite-PWA и Workbox для конкретных контекстов и случаев использования.

Тестирование показателей PWA с помощью Google Lighthouse

В браузерах на основе Chrome вместе с инструментами разработчика поставляется утилита Lighthouse, специально предназначенная для тестирования и оценки веб-страниц, а также готовности PWA. Чтобы получить доступ к этому инструменту, после открытия своего приложения браузере выполните следующие действия:

  1. Откройте инструменты разработчика (нажав F12 в Windows/Linux, Fn + F12 в Mac, или через меню браузера).
  2. Выберите меню Маяк в правом верхнем углу.
  3. Выберите Mobile или Desktop, а также убедитесь, что отмечена категория Progressive Web App.
  4. Нажмите Анализировать загрузку страницы в правом верхнем углу инструмента.

Инструменты разработчика должны выглядеть примерно так:

image

Рисунок 6.7 - Утилита "Lighthouse".

Утилита проведет ряд тестов, и в каждой категории будет отображаться рейтинг, а также подробный список элементов, которые прошли или не прошли тест. Если наше приложение не соответствует критериям PWA, то в пунктах, отмеченных красным цветом, будет указано, почему и как это исправить:

image

Рисунок 6.8 - Оценки примера кода главы 6 в Lighthouse.

Наш пример кода приложения полностью соответствует требованиям PWA и успешно проходит все тесты. Конечно, этого легче добиться с небольшими приложениями. На практике каждый рейтинг выше 90 является отличным.

Подведение итогов

В этой главе мы рассмотрели простой SPA и научились превращать его в PWA как вручную, так и с помощью плагина в Vite. Пользователи могут устанавливать PWA на свои платформы наряду с родными приложениями и взаимодействовать с ними, даже если они не подключены к Интернету.

PWA обладают множеством преимуществ по сравнению с приложениями, работающими только в Интернете. Мы также рассмотрели, как с помощью Lighthouse можно измерить и оценить наше приложение в нескольких стандартных для отрасли категориях. В этой главе мы закончили рассмотрение поэтапного создания приложений с использованием веб-технологий и впредь будем уделять основное внимание шаблонам и моделям для повышения внутренней производительности и эффективности.

Вопросы для проверки

Для закрепления понятий, изученных в этой главе, ответьте на следующие вопросы:

  • В чем разница между SPA и PWA?
  • Каковы преимущества PWA?
  • Каким основным трем требованиям должно соответствовать веб-приложение, чтобы считаться PWA?
  • Какие инструменты можно использовать для постепенной подготовки приложения к работе в качестве PWA?
  • Что такое service worker и каковы некоторые стратегии его использования?
  • Что такое веб-манифест и зачем он нужен?
+ \ No newline at end of file diff --git a/ru/book/Chapter_7__Data_Flow_Management.html b/ru/book/Chapter_7__Data_Flow_Management.html index a86889efa..d843d297b 100644 --- a/ru/book/Chapter_7__Data_Flow_Management.html +++ b/ru/book/Chapter_7__Data_Flow_Management.html @@ -6,13 +6,13 @@ Управление потоками данных | Vue FAQ - + - + - + - + @@ -205,8 +205,8 @@ <template> <strong>Child Component</strong> Counter: {{ $sessionStorage.counter }} -</template>

Заметьте, что теперь мы можем использовать этот объект как хранилище Pinia или простой реактивный объект, и значение sessionStorage всегда будет синхронизировано и сохранится, даже если мы обновим страницу. Для просмотра полного примера ознакомьтесь с реализацией примера кода в репозитории GitHub. При его запуске вы увидите секцию, подобную этой:

image

Рисунок 7.6 - Пример нашего реактивного объекта $sessionStorage

В этом примере мы также реализовали родительский компонент с элементом ввода. При изменении значения оно автоматически синхронизируется и отражается в дочернем компоненте, а также в sessionStorage. Если открыть инструменты разработчика браузера и перейти в раздел Web Storage, то можно увидеть это отражение. Вот скриншот того, как это выглядит в Chrome на системе Ubuntu:

image

Рисунок 7.7 - Сессионное хранилище, показывающее элемент из примера

Так же, как мы реализовали этот шаблон для сессионного хранилища, мы можем с небольшими изменениями применить его и к локальному хранилищу.

Подведение итогов

В этой главе мы подробно рассмотрели различные подходы и методы управления потоком данных между нашими компонентами, сервисами и хранилищами, предоставляемыми современными браузерами.

Мы также уделили время интеграции наших знаний, экспериментируя с хранением сессий и шаблоном Decorator для создания реактивного/постоянного центрального состояния. Мы уделили время разграничению подходов и посмотрели код для реализации каждого метода. Все эти новые навыки ежедневно используются при разработке приложений Vue 3.

В следующей главе мы рассмотрим повышение производительности нашего приложения с помощью современных инструментов JavaScript: web workers.

Вопросы для проверки

Используйте эти вопросы для обзора того, что вы узнали в этой главе:

  • Какие методы доступны нам для обмена данными между родственными компонентами?
  • Что такое шина сообщений/событий, и когда она наиболее полезна?
  • Что такое централизованное управление состоянием, и как его можно реализовать?
  • В чем разница между sessionStorage и localStorage?
  • Как мы можем увидеть, какая информация хранится в sessionStorage или localStorage?
- +</template>

Заметьте, что теперь мы можем использовать этот объект как хранилище Pinia или простой реактивный объект, и значение sessionStorage всегда будет синхронизировано и сохранится, даже если мы обновим страницу. Для просмотра полного примера ознакомьтесь с реализацией примера кода в репозитории GitHub. При его запуске вы увидите секцию, подобную этой:

image

Рисунок 7.6 - Пример нашего реактивного объекта $sessionStorage

В этом примере мы также реализовали родительский компонент с элементом ввода. При изменении значения оно автоматически синхронизируется и отражается в дочернем компоненте, а также в sessionStorage. Если открыть инструменты разработчика браузера и перейти в раздел Web Storage, то можно увидеть это отражение. Вот скриншот того, как это выглядит в Chrome на системе Ubuntu:

image

Рисунок 7.7 - Сессионное хранилище, показывающее элемент из примера

Так же, как мы реализовали этот шаблон для сессионного хранилища, мы можем с небольшими изменениями применить его и к локальному хранилищу.

Подведение итогов

В этой главе мы подробно рассмотрели различные подходы и методы управления потоком данных между нашими компонентами, сервисами и хранилищами, предоставляемыми современными браузерами.

Мы также уделили время интеграции наших знаний, экспериментируя с хранением сессий и шаблоном Decorator для создания реактивного/постоянного центрального состояния. Мы уделили время разграничению подходов и посмотрели код для реализации каждого метода. Все эти новые навыки ежедневно используются при разработке приложений Vue 3.

В следующей главе мы рассмотрим повышение производительности нашего приложения с помощью современных инструментов JavaScript: web workers.

Вопросы для проверки

Используйте эти вопросы для обзора того, что вы узнали в этой главе:

  • Какие методы доступны нам для обмена данными между родственными компонентами?
  • Что такое шина сообщений/событий, и когда она наиболее полезна?
  • Что такое централизованное управление состоянием, и как его можно реализовать?
  • В чем разница между sessionStorage и localStorage?
  • Как мы можем увидеть, какая информация хранится в sessionStorage или localStorage?
+ \ No newline at end of file diff --git a/ru/book/Chapter_8__Multithreading_with_Web_Workers.html b/ru/book/Chapter_8__Multithreading_with_Web_Workers.html index 21c4e5fec..6ae3ad83f 100644 --- a/ru/book/Chapter_8__Multithreading_with_Web_Workers.html +++ b/ru/book/Chapter_8__Multithreading_with_Web_Workers.html @@ -6,13 +6,13 @@ Многопоточность с Web Workers | Vue FAQ - + - + - + - + @@ -277,8 +277,8 @@ }) app.listen(PORT, ()=>{                                      //10      console.log("Server listening on port " + PORT) -})

С помощью этих нескольких строк кода мы можем запустить небольшой сервер, принимающий и отвечающий на запросы в формате JSON. Мы импортируем конструктор express (строка //1), а также плагин (строка //2). Это важно для того, чтобы мы могли обращаться к этому серверу с любого домена (origin).

Cross-Origin Request Sharing (CORS) служит для обхода мер безопасности, применяемых серверами для предотвращения обслуживания запросов из других источников (origins), кроме своего собственного. Чтобы разрешить запросы из других источников, его необходимо включить.

После создания серверного приложения (строка //3) мы передаем плагин (строка //4). Также мы передаем еще один плагин (строка //5), чтобы сервер идентифицировал и отвечал на сетевые вызовы с помощью JSON-объектов. Далее мы создаем две конечные точки, одну для GET запросов (строка //6) и вторую для POST запроса.

Первый параметр - это URL, по которому сервер будет прослушивать обращения. В данном случае они одинаковы, так как единственным отличием будет тип метода запроса. Это стандартная практика.

Каждая конечная точка получает в качестве последнего аргумента функцию обратного вызова, имеющую не менее двух параметров: req (запрос) и res (ответ). Эти объекты содержат методы и информацию о полученном запросе, а также необходимые методы для создания ответа клиенту.

Для запросов GET полученные данные передаются вместе с URL в виде "строки запроса", поэтому для доступа к ним Express красиво упаковывает их в виде объекта в поле request.query (строка //7).

Поскольку мы просто отвечаем теми же полученными данными, в строке //8 мы используем объект res для создания дополненного JSON-ответа с тем же объектом данных. Мы делаем это потому, что считаем, что можем получать вызовы из любого домена (поскольку включили CORS), и хотим быть уверены, что ответ будет полностью понятен. JSON with Padding (JSONP) - это метод отправки ответа с помощью другого метода. Нам не нужно беспокоиться об этом, так как оба конца (отправитель и получатель) обрабатываются сервером Express и клиентом Axios.

В методе post разница заключается в том, что данные содержатся в теле сообщения (строка //9), отсюда и разная обработка. Наконец, сервер начинает прослушивать указанный порт (строка //10). Теперь мы можем обращаться к серверу по адресу http://localhost:3000/, который мы настроили в нашей сетевой службе как адрес по умолчанию для Axios.

В результате мы получили возможность работать с сервером по адресу http://localhost:3000/.

После создания этого сервера мы можем провести полное тестирование всех частей системы.

Подведение итогов

В этой главе мы рассмотрели несколько очень важных концепций, позволяющих кардинально улучшить архитектуру и производительность нашего приложения. Web workers - это удивительная технология, позволяющая веб-приложениям использовать преимущества современных аппаратных архитектур и современных операционных систем.

С точки зрения стационарности, многопоточность с использованием web workers не требует особых дополнительных усилий и сложностей, а выигрыш от ее применения весьма ощутим. Мы также увидели, как использовать web workers для доступа к сетевым сервисам, а также к локальной постоянной базе данных, предоставляемой браузером (IndexedDB).

Мы познакомились еще с двумя шаблонами проектирования для реализации масштабируемой архитектуры нашего приложения и проверили их концепции и реализацию на примере простых компонентов и сервисов. Использование web workers значительно повышает производительность и качество выполнения хорошо спроектированного веб-приложения.

В следующей главе мы рассмотрим инструменты и методы автоматического тестирования нашего кода, обеспечивающие соответствие отдельных его частей своему назначению в соответствии со спецификациями и требованиями к программному обеспечению.

Вопросы для проверки

  • Какие ограничения JavaScript могут повлиять на производительность веб-приложения?
  • Что такое web workers? Каковы их ограничения?
  • Как приложения Vue могут взаимодействовать с web workers?
  • Какие преимущества дает использование такого шаблона проектирования, как Business delegate, для работы с web workers?
  • Что можно изменить в коде примера, чтобы управлять несколькими web workers, а не одним? В каких случаях, по вашему мнению, это целесообразно?
- +})

С помощью этих нескольких строк кода мы можем запустить небольшой сервер, принимающий и отвечающий на запросы в формате JSON. Мы импортируем конструктор express (строка //1), а также плагин (строка //2). Это важно для того, чтобы мы могли обращаться к этому серверу с любого домена (origin).

Cross-Origin Request Sharing (CORS) служит для обхода мер безопасности, применяемых серверами для предотвращения обслуживания запросов из других источников (origins), кроме своего собственного. Чтобы разрешить запросы из других источников, его необходимо включить.

После создания серверного приложения (строка //3) мы передаем плагин (строка //4). Также мы передаем еще один плагин (строка //5), чтобы сервер идентифицировал и отвечал на сетевые вызовы с помощью JSON-объектов. Далее мы создаем две конечные точки, одну для GET запросов (строка //6) и вторую для POST запроса.

Первый параметр - это URL, по которому сервер будет прослушивать обращения. В данном случае они одинаковы, так как единственным отличием будет тип метода запроса. Это стандартная практика.

Каждая конечная точка получает в качестве последнего аргумента функцию обратного вызова, имеющую не менее двух параметров: req (запрос) и res (ответ). Эти объекты содержат методы и информацию о полученном запросе, а также необходимые методы для создания ответа клиенту.

Для запросов GET полученные данные передаются вместе с URL в виде "строки запроса", поэтому для доступа к ним Express красиво упаковывает их в виде объекта в поле request.query (строка //7).

Поскольку мы просто отвечаем теми же полученными данными, в строке //8 мы используем объект res для создания дополненного JSON-ответа с тем же объектом данных. Мы делаем это потому, что считаем, что можем получать вызовы из любого домена (поскольку включили CORS), и хотим быть уверены, что ответ будет полностью понятен. JSON with Padding (JSONP) - это метод отправки ответа с помощью другого метода. Нам не нужно беспокоиться об этом, так как оба конца (отправитель и получатель) обрабатываются сервером Express и клиентом Axios.

В методе post разница заключается в том, что данные содержатся в теле сообщения (строка //9), отсюда и разная обработка. Наконец, сервер начинает прослушивать указанный порт (строка //10). Теперь мы можем обращаться к серверу по адресу http://localhost:3000/, который мы настроили в нашей сетевой службе как адрес по умолчанию для Axios.

В результате мы получили возможность работать с сервером по адресу http://localhost:3000/.

После создания этого сервера мы можем провести полное тестирование всех частей системы.

Подведение итогов

В этой главе мы рассмотрели несколько очень важных концепций, позволяющих кардинально улучшить архитектуру и производительность нашего приложения. Web workers - это удивительная технология, позволяющая веб-приложениям использовать преимущества современных аппаратных архитектур и современных операционных систем.

С точки зрения стационарности, многопоточность с использованием web workers не требует особых дополнительных усилий и сложностей, а выигрыш от ее применения весьма ощутим. Мы также увидели, как использовать web workers для доступа к сетевым сервисам, а также к локальной постоянной базе данных, предоставляемой браузером (IndexedDB).

Мы познакомились еще с двумя шаблонами проектирования для реализации масштабируемой архитектуры нашего приложения и проверили их концепции и реализацию на примере простых компонентов и сервисов. Использование web workers значительно повышает производительность и качество выполнения хорошо спроектированного веб-приложения.

В следующей главе мы рассмотрим инструменты и методы автоматического тестирования нашего кода, обеспечивающие соответствие отдельных его частей своему назначению в соответствии со спецификациями и требованиями к программному обеспечению.

Вопросы для проверки

  • Какие ограничения JavaScript могут повлиять на производительность веб-приложения?
  • Что такое web workers? Каковы их ограничения?
  • Как приложения Vue могут взаимодействовать с web workers?
  • Какие преимущества дает использование такого шаблона проектирования, как Business delegate, для работы с web workers?
  • Что можно изменить в коде примера, чтобы управлять несколькими web workers, а не одним? В каких случаях, по вашему мнению, это целесообразно?
+ \ No newline at end of file diff --git a/ru/book/Chapter_9__Testing_and_Source_Control.html b/ru/book/Chapter_9__Testing_and_Source_Control.html index 4f467b377..f8f88e2ea 100644 --- a/ru/book/Chapter_9__Testing_and_Source_Control.html +++ b/ru/book/Chapter_9__Testing_and_Source_Control.html @@ -6,13 +6,13 @@ Тестирование и системы контроля версий | Vue FAQ - + - + - + - + @@ -128,8 +128,8 @@ *.ntvs* *.njsproj *.sln -*.sw?

Это обычный текстовый файл, который указывает Git'у не отслеживать файлы и каталоги, указанные в каждой строке. Вы также можете использовать подстановочные знаки, такие как звездочка (*) и вопросительный знак (?), для включения шаблона совпадения. Это очень полезно, поскольку существуют части кодовой базы, которые не нужно отслеживать, например, зависимости и бинарные файлы (изображения и т.п.). Убедитесь, что этот файл есть в вашей директории, прежде чем делать массовый staging.

После того как файлы будут помещены в stage, вы можете проверить их с помощью следующей команды:

sh
$ git status

В случае нашего примера проекта это будет выглядеть примерно так:

image

Рисунок 9.9 - Первая постановка в Git

Обратите внимание, что Git также сообщает нам, что мы находимся в ветке (branch) master, и что в нее еще не было сделано ни одного коммита.

Ветка master является основной веткой для нашего кода и создается по умолчанию. Это специальная ветка, которая используется для хранения стабильного кода наших приложений. В таких инструментах, как GitLab и GitHub (о них мы поговорим позже), эти ветки также вызывают определенные события после фиксации (commit). А пока давайте двинемся дальше и создадим нашу первый commit с помощью этой команды:

sh
$ git commit -m "Первая фиксация"

Мы увидим следующие результаты:

image

Рисунок 9.10 - Результаты первой фиксации

С помощью этих простых строк мы начали следить за своим исходным кодом. Теперь, как уже говорилось, мы закоммитили наш исходный код в ветке master. Git позволяет сделать мгновенную копию состояния нашего кода, подобно снимку экрана, и продолжить работу с этого места, не затрагивая оригинал. Это называется ветвление (branching) и является важной частью использования Git.

Управление ветвями и слияниями

Использование ветвей для управления разработкой - очень хороший способ двигаться вперед на определенной основе. Ниже приведены наиболее распространенные команды для управления ветвями:

ДействиеПример команды
Создайте ветку и переключитесь на нее$ git checkout -b [branch_name]
Создать ветку, но остаться в текущей$ git branch [branch_name]
Удаление ветки$ git branch -d [branch_name]
Переход к ветке$ git checkout [branch_name]
Слияние ветки с текущей$ git merge [branch_name]
Проверка текущей ветки$ git branch

Переместившись в другую ветку, вы можете выполнять все обычные операции Git (редактировать и удалять файлы и т.д.), не затрагивая другие ветки.

Конфликты при слиянии

При слиянии нескольких веток вместе или с master возможно и более чем вероятно, что некоторые файлы будут иметь расхождения с текущей веткой. В этом случае слияние (merge) завершится неудачей, и пользователю будет предложено устранить различия.

Git делает следующее: помечает целевой файл (файл в текущей ветке) маркерами в тексте, которые пользователь может редактировать. Как только они будут отредактированы, файл может быть размещен и зафиксирован, тем самым завершая слияние. Давайте попробуем сделать это без кода, специально создав несоответствие, которое нужно исправить. Выполните следующие шаги:

  1. Создайте новую ветку, dev, с помощью этой команды: $ git checkout -b dev.
  2. Отредактируйте index.html, добавив в строку 11 (перед тегом script) следующее: <div>A div created in branch dev</div>.
  3. Сохраните файл, поместите его в stage и закоммитьте изменения командой $ git add index.html, а затем $ git commit -m "added div in dev".
  4. Сейчас мы перейдем на ветку master с помощью $ git checkout master.
  5. Заметьте, что строка 11 с div исчезла из index.html. Это связано с тем, что данная редакция в этом файле так и не была сделана. Теперь добавьте в эту строку следующее: <p>Это изменение было сделано в master</p>.
  6. Сохраните файл, выполните stage и закомитьте его с другим сообщением (см. шаг 3).

Теперь мы попытаемся объединить обе ветки, и, поскольку index.html был закоммичен в обеих с разным кодом, это не удастся! Чтобы начать слияние, выполните команду $ git merge dev.

В терминале появится сообщение об ошибке, а в index.html добавятся новые строки, указывающие на несоответствия. В нашем примере кода это выглядит следующим образом:

image

Рисунок 9.11 - Конфликт слияния

  1. Для устранения конфликта достаточно отредактировать исходный код по своему усмотрению (также удалить лишние метки, добавленные Git'ом), затем сохранить файл, поставить его и, наконец, сделать коммит. Вы получите сообщение о том, что слияние было разрешено.

Работа с ветвями и разрешение слияний при их появлении - обычная и довольно полезная практика, но мы все еще не используем весь потенциал Git'а. Как вы помните, Git - это распределенная СУБД, и здесь используется ее огромный потенциал. Введём удаленный репозиторий.

Работа с удаленными репозиториями

Подобно тому, как мы работаем с локальным репозиторием, Git может синхронизировать код с удаленным репозиторием. Это позволяет членам команды из любой точки мира совместно работать над одной и той же кодовой базой, разрешать конфликты, а также синхронизировать свой код с чужим. Работа с удаленным репозиторием включает в себя следующие шаги по настройке:

  1. Необходимо создать удаленный репозиторий и указать URL для подключения к нему.
  2. Добавляем удаленный репозиторий как новый origin в наш локальный репозиторий следующей командой:
sh
$ git remote add origin URL
  1. Настраиваем нашу ветку master на синхронизацию с удаленным репозиторием:
sh
$ git push -set-upstream origin master
  1. Получаем изменения из удаленного репозитория:
sh
$ git pull origin master
  1. Отправляем изменения в удаленный репозиторий:
sh
$ git push origin master

После начального выполнения шагов с 1 по 3, дальнейшая работа будет включать шаги 4 и 5. Эти действия позволят поддерживать локальный репозиторий в синхронизированном состоянии с удаленным репозиторием. На практике современные IDE, такие как Visual Studio Code, уже предоставляют графические средства для выполнения этих операций, что повышает удобство работы над проектом. Они также включают в себя визуальные средства для разрешения конфликтов во время слияний.

Настройка Git-сервера для локальной сети выходит за рамки данной книги, но это введение было бы неполным без слов о GitHub и GitLab. Обычно, когда люди впервые слышат о Git, они ассоциируют его с GitHub, что вполне объяснимо, поскольку последний гораздо более популярен в средствах массовой информации.

GitHub - это не Git. Это веб-платформа, предоставляющая инструменты, построенные поверх Git, для размещения онлайн-проектов, содержащих удаленные репозитории. Таким образом, вы можете прекрасно работать с Git локально и синхронизироваться с удаленным репозиторием GitHub или GitLab. Это наиболее распространенный случай.

GitHub предоставляет средства обмена сообщениями и документацией, а также многое другое - даже дополнительные сервисы, позволяющие при обнаружении событий в вашем репозитории вызывать определенные действия и сервисы, некоторые из которых предоставляются локально (за отдельную плату), другие - удаленно (например, webhooks).

Например, можно сделать локальный коммит, выложить изменения в ветку master на GitHub и запустить целый набор процедур, от компиляции до деплоя на сайт.

Опять же, управление всеми этими возможностями выходит за рамки нашей главы, но важно помнить, что все это основано и построено на Git, поэтому, если вы понимаете, как работает и что делает Git, у вас будет прочная основа для дальнейшего использования других инструментов и сервисов. Есть еще одно понятие, ставшее привычным в этой теме, - непрерывная интеграция и доставка, которое мы рассмотрим далее.

Непрерывная интеграция и доставка

Непрерывная интеграция (Continuous Integration (CI)) - это практика, реализуемая с помощью рассмотренных нами технологий, при которой разработчики как можно чаще фиксируют свои изменения в центральном (удаленном) репозитории. Центральный репозиторий обнаруживает поступившие изменения и запускает автоматические тесты на код. Затем он компилирует/сборку конечного продукта. Это происходит непрерывно, в отличие от практики слияния и компиляции в определенную дату перед запуском.

Непрерывная доставка.

Непрерывная доставка (Continuous Delivery (CD)) строится на основе CI и предполагает развертывание выпущенного продукта в конечном месте. Вы можете настроить этот процесс на создание предварительных версий программного обеспечения или веб-приложений (например, бета-версий, ночных сборок и т.д.), а также запрограммировать дату выпуска для конечного размещения и доставки клиентам (иногда эта последняя часть может включать в себя отдельный процесс и называется Continuous Deployment). Оба упомянутых ранее сервиса (GitHub и GitLab) предлагают подобные услуги.

Используя эти концепции, можно организовать целый автоматизированный рабочий процесс от рабочего стола до Интернета, где простой Git-коммит и push на сервер запускают тестирование приложения и его публикацию в Интернете. Способ реализации этого рабочего процесса зависит от инструмента, используемого для реализации CI и CD.

Подведение итогов

В этой главе мы рассмотрели очень важные понятия, касающиеся заботы о качестве нашего кода.

Мы узнали, как устанавливать официальные инструменты для выполнения автоматизированных тестов в нашем коде и компонентах, а также как отслеживать изменения и управлять ими в исходном коде. Хотя приведенные здесь примеры и информация носят ознакомительный характер, они достаточно подробны для того, чтобы применять их в собственных проектах и постоянно расширять свои познавательные навыки.

Концепции CI и CD, а также сервисы, предоставляемые онлайновыми репозиториями, также дают прочную основу для их освоения, поскольку все они основаны на функциональности, предоставляемой Git'ом.

Все эти инструменты имеют профессиональную ценность для разработчика и необходимы в современной индустрии.

Вопросы для проверки

  • Почему важно автоматизированное тестирование? Устраняет ли оно необходимость проведения ручного тестирования?
  • Что необходимо для тестирования наших однофайловых компонентов в Vue?
  • Что такое source control, и почему он необходим?
  • Что такое Git, и чем он отличается от GitHub/GitLab?
  • Когда вы изменяете файл в ветке, изменяется ли он во всех остальных ветках? Почему это происходит или не происходит?
  • Одинаковы ли команды для управления Git'ом на всех платформах?
  • Что означают термины CI и CD, и какую ценность они добавляют в рабочий процесс?
- +*.sw?

Это обычный текстовый файл, который указывает Git'у не отслеживать файлы и каталоги, указанные в каждой строке. Вы также можете использовать подстановочные знаки, такие как звездочка (*) и вопросительный знак (?), для включения шаблона совпадения. Это очень полезно, поскольку существуют части кодовой базы, которые не нужно отслеживать, например, зависимости и бинарные файлы (изображения и т.п.). Убедитесь, что этот файл есть в вашей директории, прежде чем делать массовый staging.

После того как файлы будут помещены в stage, вы можете проверить их с помощью следующей команды:

sh
$ git status

В случае нашего примера проекта это будет выглядеть примерно так:

image

Рисунок 9.9 - Первая постановка в Git

Обратите внимание, что Git также сообщает нам, что мы находимся в ветке (branch) master, и что в нее еще не было сделано ни одного коммита.

Ветка master является основной веткой для нашего кода и создается по умолчанию. Это специальная ветка, которая используется для хранения стабильного кода наших приложений. В таких инструментах, как GitLab и GitHub (о них мы поговорим позже), эти ветки также вызывают определенные события после фиксации (commit). А пока давайте двинемся дальше и создадим нашу первый commit с помощью этой команды:

sh
$ git commit -m "Первая фиксация"

Мы увидим следующие результаты:

image

Рисунок 9.10 - Результаты первой фиксации

С помощью этих простых строк мы начали следить за своим исходным кодом. Теперь, как уже говорилось, мы закоммитили наш исходный код в ветке master. Git позволяет сделать мгновенную копию состояния нашего кода, подобно снимку экрана, и продолжить работу с этого места, не затрагивая оригинал. Это называется ветвление (branching) и является важной частью использования Git.

Управление ветвями и слияниями

Использование ветвей для управления разработкой - очень хороший способ двигаться вперед на определенной основе. Ниже приведены наиболее распространенные команды для управления ветвями:

ДействиеПример команды
Создайте ветку и переключитесь на нее$ git checkout -b [branch_name]
Создать ветку, но остаться в текущей$ git branch [branch_name]
Удаление ветки$ git branch -d [branch_name]
Переход к ветке$ git checkout [branch_name]
Слияние ветки с текущей$ git merge [branch_name]
Проверка текущей ветки$ git branch

Переместившись в другую ветку, вы можете выполнять все обычные операции Git (редактировать и удалять файлы и т.д.), не затрагивая другие ветки.

Конфликты при слиянии

При слиянии нескольких веток вместе или с master возможно и более чем вероятно, что некоторые файлы будут иметь расхождения с текущей веткой. В этом случае слияние (merge) завершится неудачей, и пользователю будет предложено устранить различия.

Git делает следующее: помечает целевой файл (файл в текущей ветке) маркерами в тексте, которые пользователь может редактировать. Как только они будут отредактированы, файл может быть размещен и зафиксирован, тем самым завершая слияние. Давайте попробуем сделать это без кода, специально создав несоответствие, которое нужно исправить. Выполните следующие шаги:

  1. Создайте новую ветку, dev, с помощью этой команды: $ git checkout -b dev.
  2. Отредактируйте index.html, добавив в строку 11 (перед тегом script) следующее: <div>A div created in branch dev</div>.
  3. Сохраните файл, поместите его в stage и закоммитьте изменения командой $ git add index.html, а затем $ git commit -m "added div in dev".
  4. Сейчас мы перейдем на ветку master с помощью $ git checkout master.
  5. Заметьте, что строка 11 с div исчезла из index.html. Это связано с тем, что данная редакция в этом файле так и не была сделана. Теперь добавьте в эту строку следующее: <p>Это изменение было сделано в master</p>.
  6. Сохраните файл, выполните stage и закомитьте его с другим сообщением (см. шаг 3).

Теперь мы попытаемся объединить обе ветки, и, поскольку index.html был закоммичен в обеих с разным кодом, это не удастся! Чтобы начать слияние, выполните команду $ git merge dev.

В терминале появится сообщение об ошибке, а в index.html добавятся новые строки, указывающие на несоответствия. В нашем примере кода это выглядит следующим образом:

image

Рисунок 9.11 - Конфликт слияния

  1. Для устранения конфликта достаточно отредактировать исходный код по своему усмотрению (также удалить лишние метки, добавленные Git'ом), затем сохранить файл, поставить его и, наконец, сделать коммит. Вы получите сообщение о том, что слияние было разрешено.

Работа с ветвями и разрешение слияний при их появлении - обычная и довольно полезная практика, но мы все еще не используем весь потенциал Git'а. Как вы помните, Git - это распределенная СУБД, и здесь используется ее огромный потенциал. Введём удаленный репозиторий.

Работа с удаленными репозиториями

Подобно тому, как мы работаем с локальным репозиторием, Git может синхронизировать код с удаленным репозиторием. Это позволяет членам команды из любой точки мира совместно работать над одной и той же кодовой базой, разрешать конфликты, а также синхронизировать свой код с чужим. Работа с удаленным репозиторием включает в себя следующие шаги по настройке:

  1. Необходимо создать удаленный репозиторий и указать URL для подключения к нему.
  2. Добавляем удаленный репозиторий как новый origin в наш локальный репозиторий следующей командой:
sh
$ git remote add origin URL
  1. Настраиваем нашу ветку master на синхронизацию с удаленным репозиторием:
sh
$ git push -set-upstream origin master
  1. Получаем изменения из удаленного репозитория:
sh
$ git pull origin master
  1. Отправляем изменения в удаленный репозиторий:
sh
$ git push origin master

После начального выполнения шагов с 1 по 3, дальнейшая работа будет включать шаги 4 и 5. Эти действия позволят поддерживать локальный репозиторий в синхронизированном состоянии с удаленным репозиторием. На практике современные IDE, такие как Visual Studio Code, уже предоставляют графические средства для выполнения этих операций, что повышает удобство работы над проектом. Они также включают в себя визуальные средства для разрешения конфликтов во время слияний.

Настройка Git-сервера для локальной сети выходит за рамки данной книги, но это введение было бы неполным без слов о GitHub и GitLab. Обычно, когда люди впервые слышат о Git, они ассоциируют его с GitHub, что вполне объяснимо, поскольку последний гораздо более популярен в средствах массовой информации.

GitHub - это не Git. Это веб-платформа, предоставляющая инструменты, построенные поверх Git, для размещения онлайн-проектов, содержащих удаленные репозитории. Таким образом, вы можете прекрасно работать с Git локально и синхронизироваться с удаленным репозиторием GitHub или GitLab. Это наиболее распространенный случай.

GitHub предоставляет средства обмена сообщениями и документацией, а также многое другое - даже дополнительные сервисы, позволяющие при обнаружении событий в вашем репозитории вызывать определенные действия и сервисы, некоторые из которых предоставляются локально (за отдельную плату), другие - удаленно (например, webhooks).

Например, можно сделать локальный коммит, выложить изменения в ветку master на GitHub и запустить целый набор процедур, от компиляции до деплоя на сайт.

Опять же, управление всеми этими возможностями выходит за рамки нашей главы, но важно помнить, что все это основано и построено на Git, поэтому, если вы понимаете, как работает и что делает Git, у вас будет прочная основа для дальнейшего использования других инструментов и сервисов. Есть еще одно понятие, ставшее привычным в этой теме, - непрерывная интеграция и доставка, которое мы рассмотрим далее.

Непрерывная интеграция и доставка

Непрерывная интеграция (Continuous Integration (CI)) - это практика, реализуемая с помощью рассмотренных нами технологий, при которой разработчики как можно чаще фиксируют свои изменения в центральном (удаленном) репозитории. Центральный репозиторий обнаруживает поступившие изменения и запускает автоматические тесты на код. Затем он компилирует/сборку конечного продукта. Это происходит непрерывно, в отличие от практики слияния и компиляции в определенную дату перед запуском.

Непрерывная доставка.

Непрерывная доставка (Continuous Delivery (CD)) строится на основе CI и предполагает развертывание выпущенного продукта в конечном месте. Вы можете настроить этот процесс на создание предварительных версий программного обеспечения или веб-приложений (например, бета-версий, ночных сборок и т.д.), а также запрограммировать дату выпуска для конечного размещения и доставки клиентам (иногда эта последняя часть может включать в себя отдельный процесс и называется Continuous Deployment). Оба упомянутых ранее сервиса (GitHub и GitLab) предлагают подобные услуги.

Используя эти концепции, можно организовать целый автоматизированный рабочий процесс от рабочего стола до Интернета, где простой Git-коммит и push на сервер запускают тестирование приложения и его публикацию в Интернете. Способ реализации этого рабочего процесса зависит от инструмента, используемого для реализации CI и CD.

Подведение итогов

В этой главе мы рассмотрели очень важные понятия, касающиеся заботы о качестве нашего кода.

Мы узнали, как устанавливать официальные инструменты для выполнения автоматизированных тестов в нашем коде и компонентах, а также как отслеживать изменения и управлять ими в исходном коде. Хотя приведенные здесь примеры и информация носят ознакомительный характер, они достаточно подробны для того, чтобы применять их в собственных проектах и постоянно расширять свои познавательные навыки.

Концепции CI и CD, а также сервисы, предоставляемые онлайновыми репозиториями, также дают прочную основу для их освоения, поскольку все они основаны на функциональности, предоставляемой Git'ом.

Все эти инструменты имеют профессиональную ценность для разработчика и необходимы в современной индустрии.

Вопросы для проверки

  • Почему важно автоматизированное тестирование? Устраняет ли оно необходимость проведения ручного тестирования?
  • Что необходимо для тестирования наших однофайловых компонентов в Vue?
  • Что такое source control, и почему он необходим?
  • Что такое Git, и чем он отличается от GitHub/GitLab?
  • Когда вы изменяете файл в ветке, изменяется ли он во всех остальных ветках? Почему это происходит или не происходит?
  • Одинаковы ли команды для управления Git'ом на всех платформах?
  • Что означают термины CI и CD, и какую ценность они добавляют в рабочий процесс?
+ \ No newline at end of file diff --git a/ru/book/index.html b/ru/book/index.html index 657ec09d5..5147e9699 100644 --- a/ru/book/index.html +++ b/ru/book/index.html @@ -6,13 +6,13 @@ Vue.js 3 - Шаблоны проектирования и лучшие практики | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Vue.js 3 - Шаблоны проектирования и лучшие практики

Автор: Pablo Garaguso

image




Здесь представлен перевод книги "Vue.js 3 - Design Patterns and Best Practices" на русский язык

Предисловие

Vue 3 - это последняя и наиболее производительная версия "прогрессивного фреймворка" Vue.js для создания реактивных и отзывчивых пользовательских интерфейсов. Сам фреймворк представляет новые концепции и подходы к проектированию; шаблоны, которые могут быть необычными для других библиотек и фреймворков. Изучение основ фреймворка и понимание принципов проектирования програмных систем, а также шаблонов проектирования (design patterns), поможет вам определить компромиссы каждого подхода и построить надежные приложения.

Книга начинается с базовых концепций, а затем с помощью примеров и сценариев кодирования ведет постепенно к построению более сложных архитектур. Вы начнете с простой страницы и закончите многопоточным приложением, автономным и инсталируемым Progressive Web Application (PWA). Также рассматривается использование новых инструментов тестирования, доступных для Vue 3.

Помимо демонстрации того, как все делается, эта книга поможет вам научиться думать и искать подход к решению общих проблем, которые уже нашли свое решение в шаблонах проектирования. Это позволит вам сэкономить время и сделать ваше программное обеспечение более приспособленным к будущим изменениям.

Для кого эта книга

Эта книга предназначена для разработчиков Vue, которые заботятся о принципах проектирования фреймворка Vue и использовании часто встречающихся паттернов проектирования при разработке веб-приложений. Вы узнаете, как использовать и настраивать новый сборщик Vite, библиотеку для управления состоянием Pinia, Router 4, web workers и другие технологии для создания производительных и надежных приложений. Предварительное знание JavaScirpt и базовые знания Vue будут полезны.

Чтобы получить максимальную пользу от этой книги

Эта книга предполагает, что вы знакомы с веб-технологиями, такими как JavaScript, HTML и CSS. Разработчики, заинтересованные в расширении своего понимания паттернов проектирования и архитектуры получат максимальную пользу от этой книги. Студенты и новички в мире веб-приложений, могут также следовать этой книге, уделяя пристальное внимание примерам кода и используя предоставленные проекты.

Программное/аппаратное обеспечение, рассматриваемое в книгеТребования к операционной системе
Official Vue 3 ecosystem:

• Vue 3 framework
• Pinia
• Vue Router
• Vite
• Vitest
• Vue Testing Tools
Windows, macOS, or Linux
Node.js (any version + v16 LTS)Windows, macOS, or Linux
Web servers: NGINX, ApacheWindows or Linux
Visual Studio CodeWindows, macOS, or Linux
Chrome browserWindows, macOS, or Linux

Особых требований к аппаратному обеспечению современных компьютеров нет, но рекомендуется иметь, по крайней мере, следующее:

  • Intel или AMD CPU на как минимум 1 GHz
  • 4 GB RAM (больше - лучше)
  • Как минимум 10 GB места на диске (для программ и кода)

Как правило, если на вашем компьютере может работать современный веб-браузер (Chrome/Chromium, Mozilla Firefox или Microsoft Edge), то он должен отвечать всем требованиям для установки и запуска всех инструментов разработчика, упомянутых в этой книге.

Купить книгу

Книга в бумажном варианте на английском языке доступна для покупки на сайте O'Reilly

Скачать файлы кода примеров

Файлы кода примеров этой книги можно загрузить с GitHub по адресу https://github.com/PacktPublishing/Vue.js-3-Design-Patterns-and-Best-Practices.

Код в действии

Видеоролики Программирование в действии для этой книги можно посмотреть на сайте https://packt.link/FtCMS.




Я выражаю Вам признательность за преданность этой дисциплине и благодарю за прочтение этой книги. Желаю Вам благополучия и блестящих успехов в дальнейших начинаниях и профессиональной карьере.

Искренне,

Пабло Давид Гарагусо

www.pdgaraguso.com

- +
Skip to content

Vue.js 3 - Шаблоны проектирования и лучшие практики

Автор: Pablo Garaguso

image




Здесь представлен перевод книги "Vue.js 3 - Design Patterns and Best Practices" на русский язык

Предисловие

Vue 3 - это последняя и наиболее производительная версия "прогрессивного фреймворка" Vue.js для создания реактивных и отзывчивых пользовательских интерфейсов. Сам фреймворк представляет новые концепции и подходы к проектированию; шаблоны, которые могут быть необычными для других библиотек и фреймворков. Изучение основ фреймворка и понимание принципов проектирования програмных систем, а также шаблонов проектирования (design patterns), поможет вам определить компромиссы каждого подхода и построить надежные приложения.

Книга начинается с базовых концепций, а затем с помощью примеров и сценариев кодирования ведет постепенно к построению более сложных архитектур. Вы начнете с простой страницы и закончите многопоточным приложением, автономным и инсталируемым Progressive Web Application (PWA). Также рассматривается использование новых инструментов тестирования, доступных для Vue 3.

Помимо демонстрации того, как все делается, эта книга поможет вам научиться думать и искать подход к решению общих проблем, которые уже нашли свое решение в шаблонах проектирования. Это позволит вам сэкономить время и сделать ваше программное обеспечение более приспособленным к будущим изменениям.

Для кого эта книга

Эта книга предназначена для разработчиков Vue, которые заботятся о принципах проектирования фреймворка Vue и использовании часто встречающихся паттернов проектирования при разработке веб-приложений. Вы узнаете, как использовать и настраивать новый сборщик Vite, библиотеку для управления состоянием Pinia, Router 4, web workers и другие технологии для создания производительных и надежных приложений. Предварительное знание JavaScirpt и базовые знания Vue будут полезны.

Чтобы получить максимальную пользу от этой книги

Эта книга предполагает, что вы знакомы с веб-технологиями, такими как JavaScript, HTML и CSS. Разработчики, заинтересованные в расширении своего понимания паттернов проектирования и архитектуры получат максимальную пользу от этой книги. Студенты и новички в мире веб-приложений, могут также следовать этой книге, уделяя пристальное внимание примерам кода и используя предоставленные проекты.

Программное/аппаратное обеспечение, рассматриваемое в книгеТребования к операционной системе
Official Vue 3 ecosystem:

• Vue 3 framework
• Pinia
• Vue Router
• Vite
• Vitest
• Vue Testing Tools
Windows, macOS, or Linux
Node.js (any version + v16 LTS)Windows, macOS, or Linux
Web servers: NGINX, ApacheWindows or Linux
Visual Studio CodeWindows, macOS, or Linux
Chrome browserWindows, macOS, or Linux

Особых требований к аппаратному обеспечению современных компьютеров нет, но рекомендуется иметь, по крайней мере, следующее:

  • Intel или AMD CPU на как минимум 1 GHz
  • 4 GB RAM (больше - лучше)
  • Как минимум 10 GB места на диске (для программ и кода)

Как правило, если на вашем компьютере может работать современный веб-браузер (Chrome/Chromium, Mozilla Firefox или Microsoft Edge), то он должен отвечать всем требованиям для установки и запуска всех инструментов разработчика, упомянутых в этой книге.

Купить книгу

Книга в бумажном варианте на английском языке доступна для покупки на сайте O'Reilly

Скачать файлы кода примеров

Файлы кода примеров этой книги можно загрузить с GitHub по адресу https://github.com/PacktPublishing/Vue.js-3-Design-Patterns-and-Best-Practices.

Код в действии

Видеоролики Программирование в действии для этой книги можно посмотреть на сайте https://packt.link/FtCMS.




Я выражаю Вам признательность за преданность этой дисциплине и благодарю за прочтение этой книги. Желаю Вам благополучия и блестящих успехов в дальнейших начинаниях и профессиональной карьере.

Искренне,

Пабло Давид Гарагусо

www.pdgaraguso.com

+ \ No newline at end of file diff --git a/ru/book/summary.html b/ru/book/summary.html index 507f3b0d6..13376d434 100644 --- a/ru/book/summary.html +++ b/ru/book/summary.html @@ -6,13 +6,13 @@ Что включает в себя эта книга | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Что включает в себя эта книга

Глава 1, Фреймворк Vue 3

Что представляет собой прогрессивный фреймворк Vue 3? В этой главе представлены наиболее важные аспекты фреймворка и другие ключевые понятия.

Глава 2, Принципы и шаблоны проектирования программного обеспечения

Принципы и шаблоны проектирования программного обеспечения являются визитной карточкой хорошей архитектуры программного обеспечения. В этой главе рассказывается о них, приводятся примеры для реализации на JavaScript и Vue 3.

Глава 3, Создание рабочего проекта

В этой главе мы создаем рабочий проект, который будет использоваться в качестве базовой основы для будущих проектов. В ней вы шаг за шагом узнаете, как начать работу над проектом, используя нужные инструменты.

Глава 4, Композиция пользовательского интерфейса с помощью компонентов

Эта глава знакомит с концепцией пользовательских интерфейсов и подводит к реализации веб-приложения, начиная с концептуального визуального дизайна до разработки соответствующих компонентов.

Глава 5, Одностраничные приложения

Это ключевая глава, в которой представлен маршрутизатор Vue Router для создания одностраничных веб-приложений.

Глава 6, Прогрессивные веб-приложения

В этой главе на основе SPA создаются PWA, а также представлены инструменты для оценки их полноты и производительности.

Глава 7, Управление потоками данных

Эта глава знакомит с ключевыми концепциями проектирования и управления потоками данных и информации в приложении. В ней представлена Pinia как официальный фреймворк управления состояниями для Vue 3.

Глава 8, Многопоточность с помощью web-workers

Эта глава посвящена повышению производительности крупномасштабного приложения с помощью многопоточности с web-workers. В ней также представлены дополнительные паттерны для создания простой в реализации и удобной в обслуживании архитектуры.

Глава 9, Тестирование и контроль исходных текстов

В этой главе мы знакомимся с официальными инструментами тестирования предоставляемыми командой Vue, а также с наиболее распространенной системой контроля версий: Git. В главе показано, как создавать тестовые примеры для кода на JavaScript, а также компонентов Vue 3.

Глава 10, Развертывание приложения

В этой главе представлены концепции, необходимые для понимания того, как опубликовать приложение Vue 3 на живом рабочем сервере и как защитить его с помощью Let's Encrypt.

Глава 11, UX Patterns

Эта бонусная глава расширяет понятия пользовательского интерфейса и паттернов пользовательского опыта, чтобы обеспечить общий язык между разработчиком и дизайнером. В ней представлены общие шаблоны, предусмотренные стандартом HTML 5, и другие общие элементы.

Приложение: Миграция с Vue 2 на Vue 3

В этом приложении представлено руководство по изменениям и вариантам миграции для опытных разработчиков Vue 2.

- +
Skip to content

Что включает в себя эта книга

Глава 1, Фреймворк Vue 3

Что представляет собой прогрессивный фреймворк Vue 3? В этой главе представлены наиболее важные аспекты фреймворка и другие ключевые понятия.

Глава 2, Принципы и шаблоны проектирования программного обеспечения

Принципы и шаблоны проектирования программного обеспечения являются визитной карточкой хорошей архитектуры программного обеспечения. В этой главе рассказывается о них, приводятся примеры для реализации на JavaScript и Vue 3.

Глава 3, Создание рабочего проекта

В этой главе мы создаем рабочий проект, который будет использоваться в качестве базовой основы для будущих проектов. В ней вы шаг за шагом узнаете, как начать работу над проектом, используя нужные инструменты.

Глава 4, Композиция пользовательского интерфейса с помощью компонентов

Эта глава знакомит с концепцией пользовательских интерфейсов и подводит к реализации веб-приложения, начиная с концептуального визуального дизайна до разработки соответствующих компонентов.

Глава 5, Одностраничные приложения

Это ключевая глава, в которой представлен маршрутизатор Vue Router для создания одностраничных веб-приложений.

Глава 6, Прогрессивные веб-приложения

В этой главе на основе SPA создаются PWA, а также представлены инструменты для оценки их полноты и производительности.

Глава 7, Управление потоками данных

Эта глава знакомит с ключевыми концепциями проектирования и управления потоками данных и информации в приложении. В ней представлена Pinia как официальный фреймворк управления состояниями для Vue 3.

Глава 8, Многопоточность с помощью web-workers

Эта глава посвящена повышению производительности крупномасштабного приложения с помощью многопоточности с web-workers. В ней также представлены дополнительные паттерны для создания простой в реализации и удобной в обслуживании архитектуры.

Глава 9, Тестирование и контроль исходных текстов

В этой главе мы знакомимся с официальными инструментами тестирования предоставляемыми командой Vue, а также с наиболее распространенной системой контроля версий: Git. В главе показано, как создавать тестовые примеры для кода на JavaScript, а также компонентов Vue 3.

Глава 10, Развертывание приложения

В этой главе представлены концепции, необходимые для понимания того, как опубликовать приложение Vue 3 на живом рабочем сервере и как защитить его с помощью Let's Encrypt.

Глава 11, UX Patterns

Эта бонусная глава расширяет понятия пользовательского интерфейса и паттернов пользовательского опыта, чтобы обеспечить общий язык между разработчиком и дизайнером. В ней представлены общие шаблоны, предусмотренные стандартом HTML 5, и другие общие элементы.

Приложение: Миграция с Vue 2 на Vue 3

В этом приложении представлено руководство по изменениям и вариантам миграции для опытных разработчиков Vue 2.

+ \ No newline at end of file diff --git a/ru/deployment/ci-cd.html b/ru/deployment/ci-cd.html index 201958048..f37965ce8 100644 --- a/ru/deployment/ci-cd.html +++ b/ru/deployment/ci-cd.html @@ -6,13 +6,13 @@ CI/CD | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

CI/CD

Что такое CI/CD?

CI/CD (Continuous Integration, Continuous Delivery — непрерывная интеграция и доставка) — это технология автоматизации билда, тестирования и развертывания разрабатываемого проекта.

Другими словами, процесс перехода лежащего в репозитории кода в рабочий продукт на облачном сервере, например.

Элементы CI/CD полезны не только девопс инженеру, но и простому фронтендеру, позволяя ему после git commit/push изменений кода получить рабочий сайт, например, на GitHub Pages без дополнительных действий.

Основные инструменты для CI/CD: GitHub Actions, GitLab CI/CD, Jenkins, Trevis

- +
Skip to content

CI/CD

Что такое CI/CD?

CI/CD (Continuous Integration, Continuous Delivery — непрерывная интеграция и доставка) — это технология автоматизации билда, тестирования и развертывания разрабатываемого проекта.

Другими словами, процесс перехода лежащего в репозитории кода в рабочий продукт на облачном сервере, например.

Элементы CI/CD полезны не только девопс инженеру, но и простому фронтендеру, позволяя ему после git commit/push изменений кода получить рабочий сайт, например, на GitHub Pages без дополнительных действий.

Основные инструменты для CI/CD: GitHub Actions, GitLab CI/CD, Jenkins, Trevis

+ \ No newline at end of file diff --git a/ru/deployment/docker.html b/ru/deployment/docker.html index 397a66d3c..6e14e1c78 100644 --- a/ru/deployment/docker.html +++ b/ru/deployment/docker.html @@ -6,13 +6,13 @@ Docker | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ - - + + \ No newline at end of file diff --git a/ru/deployment/github-actions.html b/ru/deployment/github-actions.html index a612f0e39..bd0b3167d 100644 --- a/ru/deployment/github-actions.html +++ b/ru/deployment/github-actions.html @@ -6,13 +6,13 @@ Github Actions | Vue FAQ - + - + - + - + @@ -186,8 +186,8 @@ backups_remove_count=5; cd $backup_dir && rm -rf work logs images; cd $root_backup_dir && dirs_to_be_removed=`ls -dt "$root_backup_dir/"* | tail -n +$backups_remove_count`; - rm $dirs_to_be_removed -rf; - + rm $dirs_to_be_removed -rf; + \ No newline at end of file diff --git a/ru/deployment/hosting.html b/ru/deployment/hosting.html index 289770cff..533f82be8 100644 --- a/ru/deployment/hosting.html +++ b/ru/deployment/hosting.html @@ -6,13 +6,13 @@ Хостинг | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

Хостинг

Где разместить сайт?

После билда фронтенд проекта вы получаете набор html/css/js/jpeg и других статичных файлов, которые надо разместить на вебсервере, чтобы к вашему сайту был доступ.

Варианты размещения с бесплатными планами:

Также многие облачные провайдеры (Amazon, Google, Oracle, Microsoft) предоставляют бесплатные тарифы с возможностью получить виртуальный сервер, на котором можно установить вебсервер (Nginx, Apache) и захостить свой сайт самостоятельно. В этом случае на нем же можно разместить и бэкенд.

Домен

Купить домен сейчас очень просто и недорого (от 200 рублей в год), в связи с чем рекомендуется это сделать. GitHub Pages и другие хостеры позволяют подключить кастомный домен к вашему сайту. Поддомены удобны для организации окружения разработки (environments):

  • dev.website.com
  • dev-api.website.com
  • website.com
  • api.website.com
  • docs.website.com
SSL сертификаты

Современные браузеры требуют, чтобы сайт был доступен по HTTPS протоколу. Для этого для вашего домена необходим SSL сертификат. Хостинг провайдеры типа Firebase или Github Pages обеспечат вам сертификат сами. Если вы хостите свой сайт самостоятельно на облачном сервере, то можно сгенерировать сертификат с помощью программы CertBot.

- +
Skip to content

Хостинг

Где разместить сайт?

После билда фронтенд проекта вы получаете набор html/css/js/jpeg и других статичных файлов, которые надо разместить на вебсервере, чтобы к вашему сайту был доступ.

Варианты размещения с бесплатными планами:

Также многие облачные провайдеры (Amazon, Google, Oracle, Microsoft) предоставляют бесплатные тарифы с возможностью получить виртуальный сервер, на котором можно установить вебсервер (Nginx, Apache) и захостить свой сайт самостоятельно. В этом случае на нем же можно разместить и бэкенд.

Домен

Купить домен сейчас очень просто и недорого (от 200 рублей в год), в связи с чем рекомендуется это сделать. GitHub Pages и другие хостеры позволяют подключить кастомный домен к вашему сайту. Поддомены удобны для организации окружения разработки (environments):

  • dev.website.com
  • dev-api.website.com
  • website.com
  • api.website.com
  • docs.website.com
SSL сертификаты

Современные браузеры требуют, чтобы сайт был доступен по HTTPS протоколу. Для этого для вашего домена необходим SSL сертификат. Хостинг провайдеры типа Firebase или Github Pages обеспечат вам сертификат сами. Если вы хостите свой сайт самостоятельно на облачном сервере, то можно сгенерировать сертификат с помощью программы CertBot.

+ \ No newline at end of file diff --git a/ru/development/architectural-patterns.html b/ru/development/architectural-patterns.html index 3959aebff..f9d39d10f 100644 --- a/ru/development/architectural-patterns.html +++ b/ru/development/architectural-patterns.html @@ -6,14 +6,14 @@ Архитектурные решения | Vue FAQ - + - + - + - + @@ -266,8 +266,8 @@ startLoading(); product.value = await api.products.product(props.productId); -stopLoading();

Данный пример использует useId, который появился во Vue 3.5

Для более ранних версий можно использовать любую функцию для генерации уникального id.

- +stopLoading();

Данный пример использует useId, который появился во Vue 3.5

Для более ранних версий можно использовать любую функцию для генерации уникального id.

+ \ No newline at end of file diff --git a/ru/development/assets.html b/ru/development/assets.html index 22c1e5cc4..734824637 100644 --- a/ru/development/assets.html +++ b/ru/development/assets.html @@ -6,13 +6,13 @@ Ресурсы приложения | Vue FAQ - + - + - + - + @@ -148,8 +148,8 @@ import json from "./example.json"; // import a root field as named exports - helps with tree-shaking! -import { field } from "./example.json"; - +import { field } from "./example.json"; + \ No newline at end of file diff --git a/ru/development/building.html b/ru/development/building.html index b4052892b..305a60cd7 100644 --- a/ru/development/building.html +++ b/ru/development/building.html @@ -6,13 +6,13 @@ Создание и сборка приложения | Vue FAQ - + - + - + - + @@ -58,8 +58,8 @@ } }

Также может требуеться настройка алиаса в ESLint конфиге для плагинов типа eslint-plugin-import и eslint-import-resolver-typescript, если они используются.

Как посмотреть, сколько в моем js бандле занимают разные библиотеки?

rollup-plugin-visualizer - отличное средство для этого

Запускается генерация статистики из командной строки так (один из вариантов):

sh
npx vite-bundle-visualizer
 npx vite-bundle-visualizer -t list
-npx vite-bundle-visualizer -t raw-data
- +npx vite-bundle-visualizer -t raw-data + \ No newline at end of file diff --git a/ru/development/ide.html b/ru/development/ide.html index e589ed6c4..0e3f577fb 100644 --- a/ru/development/ide.html +++ b/ru/development/ide.html @@ -6,13 +6,13 @@ Настройка IDE | Vue FAQ - + - + - + - + @@ -280,8 +280,8 @@ "vite.config.*": "*.env, .babelrc*, .codecov, .cssnanorc*, .env.*, .envrc, .htmlnanorc*, .lighthouserc.*, .mocha*, .postcssrc*, .terserrc*, api-extractor.json, ava.config.*, babel.config.*, contentlayer.config.*, cssnano.config.*, cypress.*, env.d.ts, formkit.config.*, formulate.config.*, histoire.config.*, htmlnanorc.*, jasmine.*, jest.config.*, jsconfig.*, karma*, lighthouserc.*, playwright.config.*, postcss.config.*, puppeteer.config.*, rspack.config.*, svgo.config.*, tailwind.config.*, tsconfig.*, tsdoc.*, uno.config.*, unocss.config.*, vitest.config.*, webpack.config.*, windi.config.*", "vue.config.*": "*.env, .babelrc*, .codecov, .cssnanorc*, .env.*, .envrc, .htmlnanorc*, .lighthouserc.*, .mocha*, .postcssrc*, .terserrc*, api-extractor.json, ava.config.*, babel.config.*, contentlayer.config.*, cssnano.config.*, cypress.*, env.d.ts, formkit.config.*, formulate.config.*, histoire.config.*, htmlnanorc.*, jasmine.*, jest.config.*, jsconfig.*, karma*, lighthouserc.*, playwright.config.*, postcss.config.*, puppeteer.config.*, rspack.config.*, svgo.config.*, tailwind.config.*, tsconfig.*, tsdoc.*, uno.config.*, unocss.config.*, vitest.config.*, webpack.config.*, windi.config.*" } -}
ESlint

Линтер - правая рука кодера. Он проверяет ошибки, форматирует код, делает еще много полезного

В то же время, хорошо настроить ESlint - довольно нетривиальная задача. Множество плагинов к нему, часть устаревшие, многие конфликтуют между собой.

Поэтому для не очень изощренных знатоков ESlint-a самое лучшее воспользоваться готовым решением. Второй человек в экосистеме Vue Antony Fu поделился своим конфигом

Для его установки достаточно добавить @antfu/eslint-config пакет в package.json devDependencies. Если заглянуть внутрь, там будет десятки подобранных пакетов и настроек.

К сожалению, форматирование <style> блока во .vue файлах не работает, поэтому приходится еще и включать Prettier в ручном режиме.

Онлайн песочницы для Vue 3
Еще программы, полезные в веб разработке
  • Hoppscotch/ - запросы к API
  • Postman - запросы к API, создание API
  • Xshell - удобный SSH клиент
  • HeidiSQL - клиент для доступа к SQL базам данных
Какая конфигурация компьютера подходит для фронтенд разработки?

Оперативной памяти минимум 16Гб и хороший (быстрый) SSD диск, всё остальное вторично, включая процессор. Потратьте лучше деньги на качественный второй монитор 22+ дюймов, удобную клавиатуру и мышку.

Для фулстек разработки (и не только) удобно еще иметь мини-ПК, куда переносится база данных, вебсервер и другие [микро]сервисы. Он может работать как сервер, без монитора и клавиатуры.

Также на него можно поставить репозиторий исходного кода. С основной машины подсоединение идет в VS Code через SSH Remote connection. В итоге и бэк, и фронт (Node.js) запускаются на твоем минисервере, и твой ноут больше не греется и не пытается взлететь с помощью бешено вращающихся вентиляторов.

Работать так значительно производительней (MySQL, вебсервера, Docker крутятся на Linux быстрей и надёжней, как и Nodе.js), комфортней и тише. Кулер мини-ПК в штатном режиме включается только на пару секунд при загрузке ОС.

- +}
ESlint

Линтер - правая рука кодера. Он проверяет ошибки, форматирует код, делает еще много полезного

В то же время, хорошо настроить ESlint - довольно нетривиальная задача. Множество плагинов к нему, часть устаревшие, многие конфликтуют между собой.

Поэтому для не очень изощренных знатоков ESlint-a самое лучшее воспользоваться готовым решением. Второй человек в экосистеме Vue Antony Fu поделился своим конфигом

Для его установки достаточно добавить @antfu/eslint-config пакет в package.json devDependencies. Если заглянуть внутрь, там будет десятки подобранных пакетов и настроек.

К сожалению, форматирование <style> блока во .vue файлах не работает, поэтому приходится еще и включать Prettier в ручном режиме.

Онлайн песочницы для Vue 3
Еще программы, полезные в веб разработке
  • Hoppscotch/ - запросы к API
  • Postman - запросы к API, создание API
  • Xshell - удобный SSH клиент
  • HeidiSQL - клиент для доступа к SQL базам данных
Какая конфигурация компьютера подходит для фронтенд разработки?

Оперативной памяти минимум 16Гб и хороший (быстрый) SSD диск, всё остальное вторично, включая процессор. Потратьте лучше деньги на качественный второй монитор 22+ дюймов, удобную клавиатуру и мышку.

Для фулстек разработки (и не только) удобно еще иметь мини-ПК, куда переносится база данных, вебсервер и другие [микро]сервисы. Он может работать как сервер, без монитора и клавиатуры.

Также на него можно поставить репозиторий исходного кода. С основной машины подсоединение идет в VS Code через SSH Remote connection. В итоге и бэк, и фронт (Node.js) запускаются на твоем минисервере, и твой ноут больше не греется и не пытается взлететь с помощью бешено вращающихся вентиляторов.

Работать так значительно производительней (MySQL, вебсервера, Docker крутятся на Linux быстрей и надёжней, как и Nodе.js), комфортней и тише. Кулер мини-ПК в штатном режиме включается только на пару секунд при загрузке ОС.

+ \ No newline at end of file diff --git a/ru/development/libraries.html b/ru/development/libraries.html index 60ecfe18f..b69c7a63f 100644 --- a/ru/development/libraries.html +++ b/ru/development/libraries.html @@ -6,13 +6,13 @@ Подскажите удобную библиотеку | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

Подскажите удобную библиотеку

Для работы с датами

moment безвозвратно устарел. Есть day.js и day-fnc.js

Однако в 95% случаев хватает возможностей стандартного JavaScript Intl пакета

Для UI компонентов

Существует достаточно много CSS и UI библиотек

Вот в этой статье есть небольшой обзор их тяжеловесности

Quasar и PrimeVue выглядят солидно.

- +
Skip to content

Подскажите удобную библиотеку

Для работы с датами

moment безвозвратно устарел. Есть day.js и day-fnc.js

Однако в 95% случаев хватает возможностей стандартного JavaScript Intl пакета

Для UI компонентов

Существует достаточно много CSS и UI библиотек

Вот в этой статье есть небольшой обзор их тяжеловесности

Quasar и PrimeVue выглядят солидно.

+ \ No newline at end of file diff --git a/ru/development/misc.html b/ru/development/misc.html index 4e39871c4..5a56e3125 100644 --- a/ru/development/misc.html +++ b/ru/development/misc.html @@ -6,13 +6,13 @@ Полезные советы | Vue FAQ - + - + - + - + @@ -43,8 +43,8 @@ delete window.devtoolsFormatters; // will print out data without custom formatting console.log(obj); -window.devtoolsFormatters = old; - +window.devtoolsFormatters = old; + \ No newline at end of file diff --git a/ru/development/project-structure.html b/ru/development/project-structure.html index 0235cc7d4..ee7aafce2 100644 --- a/ru/development/project-structure.html +++ b/ru/development/project-structure.html @@ -6,14 +6,14 @@ Структура Vue 3 проекта | Vue FAQ - + - + - + - + @@ -188,8 +188,8 @@ |-- /store | |-- index.js |-- /tests -| |-- featureTests.spec.js
Микрофронтенды

Микрофронтенды берут за основу идею микросервисов и применяют ее к фронтенд-части веб-приложений. Это означает, что разные команды могут работать над разными разделами веб-приложения, не мешая друг другу. Каждый раздел, или «микрофронтенд», работает сам по себе и может изменяться независимо. Вот базовый обзор SPA.

  • Оболочка приложения: Это основной контроллер, который управляет базовой версткой и маршрутизацией сайта. Он соединяет все микрофронтенды вместе.
  • Декомпозированные пользовательские интерфейсы: Каждый микрофронтенд фокусируется на определенной части приложения. Они могут быть разработаны с использованием разных технологий и обновляться отдельно.

image

Основное преимущество заключается в том, что микрофронтенды позволяют командам обновлять отдельные части приложения, не дожидаясь остальных, что ускоряет разработку. Однако такая настройка может сделать приложение более сложным в управлении и поддержании последовательности.

Полезные ресурсы:

Эта стратегия подходит для крупных, сложных проектов с несколькими командами разработчиков. Каждая команда может сосредоточиться на конкретных бизнес-требованиях, не влияя на работу других, и потенциально использовать технологии, которые лучше всего подходят для их части приложения.

Сравнительная таблица
ПодходОписаниеПлюсыМинусы
Плоский подходПростая структура, идеально подходящая для небольших проектов или проверки концепции.- Простота реализации
- Минимальная настройка
- Не масштабируется
- Беспорядок по мере роста проекта
Атомный дизайнИерархическая структура, основанная на сложности компонентов.- Масштабируемые
- Организованные
- Многоразовые компоненты
- Накладные расходы на управление слоями
- Сложная настройка
МодулиМодульная структура, инкапсулирующая функции.- Масштабируемость
- Инкапсулированные функции
- Возможное дублирование
- Может стать сложным
FSDОрганизует проект по функциональным слоям и фрагментам.- Высокая сплоченность
- Четкое разделение функций
- Начальная сложность
- Требует тщательного планирования
МикрофронтендыКаждая часть приложения развертывается отдельно.- Независимые развертывания
- Масштабируемость
- Высокая сложность
- Необходима координация между командами

(с) source

Подходящая структура для Vue 3 проекта

Самая удобная архитектура для Vue 3 приложения - Модульная.

Изначально, приложение разбивается на логические модули, слабо связанные друг с другом. Например, для онлайн магазина это могут быть модуль каталога товаров, модуль отдельного товара, модуль личного кабинета / аккаунта пользователя.

Кроме того, есть модуль оболочки - то, что иногда называет app shell. Шаблон с хедером, футером, боковым меню и главным окном. В этот модуль целесообразно поместить утилиты и ресурсы, используемые по всему приложению - например, api, useI18n, BaseButton и stringHelpers.

В каждом модуле свои components, composables, assets, utils; возможно, api, routes, views, layouts.

Внутри components каждого модуля при необходимости можно устроить иерархию компонентов наподобие атомарного дизайна

Слабая связанность позволяет разрабатывать каждый модуль достаточно независимо, что значительно повышает вероятность успешности проекта.

Плоская структура - вырожденная форма модульной с одним модулем. В то же время модульная структура органично перерастает при необходимости в Микрофронтенды.

image

Атомарный дизайн и FSD изобретались не для Vue, а для фронтенда в целом, в следствие чего содержат избыточную сложность и неудобства.

- +| |-- featureTests.spec.js
Микрофронтенды

Микрофронтенды берут за основу идею микросервисов и применяют ее к фронтенд-части веб-приложений. Это означает, что разные команды могут работать над разными разделами веб-приложения, не мешая друг другу. Каждый раздел, или «микрофронтенд», работает сам по себе и может изменяться независимо. Вот базовый обзор SPA.

  • Оболочка приложения: Это основной контроллер, который управляет базовой версткой и маршрутизацией сайта. Он соединяет все микрофронтенды вместе.
  • Декомпозированные пользовательские интерфейсы: Каждый микрофронтенд фокусируется на определенной части приложения. Они могут быть разработаны с использованием разных технологий и обновляться отдельно.

image

Основное преимущество заключается в том, что микрофронтенды позволяют командам обновлять отдельные части приложения, не дожидаясь остальных, что ускоряет разработку. Однако такая настройка может сделать приложение более сложным в управлении и поддержании последовательности.

Полезные ресурсы:

Эта стратегия подходит для крупных, сложных проектов с несколькими командами разработчиков. Каждая команда может сосредоточиться на конкретных бизнес-требованиях, не влияя на работу других, и потенциально использовать технологии, которые лучше всего подходят для их части приложения.

Сравнительная таблица
ПодходОписаниеПлюсыМинусы
Плоский подходПростая структура, идеально подходящая для небольших проектов или проверки концепции.- Простота реализации
- Минимальная настройка
- Не масштабируется
- Беспорядок по мере роста проекта
Атомный дизайнИерархическая структура, основанная на сложности компонентов.- Масштабируемые
- Организованные
- Многоразовые компоненты
- Накладные расходы на управление слоями
- Сложная настройка
МодулиМодульная структура, инкапсулирующая функции.- Масштабируемость
- Инкапсулированные функции
- Возможное дублирование
- Может стать сложным
FSDОрганизует проект по функциональным слоям и фрагментам.- Высокая сплоченность
- Четкое разделение функций
- Начальная сложность
- Требует тщательного планирования
МикрофронтендыКаждая часть приложения развертывается отдельно.- Независимые развертывания
- Масштабируемость
- Высокая сложность
- Необходима координация между командами

(с) source

Подходящая структура для Vue 3 проекта

Самая удобная архитектура для Vue 3 приложения - Модульная.

Изначально, приложение разбивается на логические модули, слабо связанные друг с другом. Например, для онлайн магазина это могут быть модуль каталога товаров, модуль отдельного товара, модуль личного кабинета / аккаунта пользователя.

Кроме того, есть модуль оболочки - то, что иногда называет app shell. Шаблон с хедером, футером, боковым меню и главным окном. В этот модуль целесообразно поместить утилиты и ресурсы, используемые по всему приложению - например, api, useI18n, BaseButton и stringHelpers.

В каждом модуле свои components, composables, assets, utils; возможно, api, routes, views, layouts.

Внутри components каждого модуля при необходимости можно устроить иерархию компонентов наподобие атомарного дизайна

Слабая связанность позволяет разрабатывать каждый модуль достаточно независимо, что значительно повышает вероятность успешности проекта.

Плоская структура - вырожденная форма модульной с одним модулем. В то же время модульная структура органично перерастает при необходимости в Микрофронтенды.

image

Атомарный дизайн и FSD изобретались не для Vue, а для фронтенда в целом, в следствие чего содержат избыточную сложность и неудобства.

+ \ No newline at end of file diff --git a/ru/development/stores.html b/ru/development/stores.html index 92a5208bd..11af4d229 100644 --- a/ru/development/stores.html +++ b/ru/development/stores.html @@ -6,13 +6,13 @@ State management во Vue 3 | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

State management во Vue 3

Зачем нужен State management?

Иногда в приложении нужно передать реактивные данные или функцию из одного компонента в другой, и эти компоненты не принадлежат одной иерархии. Механизмы пропсов/ивентов или provide/inject не подходят для этого. Поэтому во Vue 2 появился Vuex - state management библиотека, которая позволяет хранить реактивный стейт и предоставлять доступ к нему отовсюду.

Библиотека управления стейтом на фронтенде обычно называется "стором".

Как можно передать реактивные данные из одного компонента в другой во Vue 3?
  • Если один компонент является прямым потомком другого - пропсы и ивенты
  • Если один компонент непрямой потомок другого - provide/inject или проп/ивент дриллинг (плохая практика)
  • Если они в разных ветках иерархии - стор или Vue 3 ref/reactive

Vue 3 ref/reactive - это когда в отдельном js модуле вы определяете и экспортируете реактивную переменную:

export const userLoggedIn = ref(false);

После чего она доступна во всём приложении через импорт данного модуля.

Однако, расшаривать просто переменную - архитектурно плохая идея. Обычно вокруг этой переменной есть бизнес логика, которую и надо сделать доступной.

Например, для аутентификации нужен не только сам факт, что пользователь залогинился, но и сопутствующие методы - login(), logout(), register(), isAuthenticated(). Синтез некоего стейта и сопутствующей бизнес логики дал так называемые composable функции во Vue 3.

В некотором смысле - аналог объекта в ООП.

Что такое стор (store) на фронтенде?

A Store (like Pinia) is an entity holding state and business logic that isn't bound to your Component tree. In other words, it hosts global state. It's a bit like a component that is always there and that everybody can read off and write to.

Стор (например, Pinia) — это сущность, содержащая состояние и бизнес-логику, которая не привязана к вашему дереву компонентов. Другими словами, здесь находится глобальное состояние. Это что-то вроде компонента, который всегда присутствует, и который каждый может считывать и писать в него.

Официальная документация Pinia

Выглядит как очень неудачное, двусмысленное и запутывающее определение.

С точки зрения разработчика не фронтенда (по сути любой другой язык, кроме JavaScript, плюс частично JavaScript), аналогом конструкции с названиемстор будет база данных - SQL, NoSQL или кэширующий Redis. Там есть аналоги стейта и геттеров (View в SQL БД). Но в 99.99% случаях в базе данных не будет никакой бизнес логики, за исключением ограничений для консистентности данных (например, unique или foreign keys).

С точки зрения разработчика не фронтенда, сторы фронтенда - это просто объекты / stateful сервисы, построенные по шаблону синглтон. Называть их "глобальными сторами" как минимум нелогично.

Скорей всего, это произошло исторически. Сперва был один Vuex, он был один стор и глобален. Потом у него появились модули. Потом у Pinia эти модули стали независимы и расползлись по всему приложению. В итоге, в приложении куча мелких локальных (по области использования) сторов, каждый из которых считает себя глобальным, даже если его использует 2-3 компонента из 1000 на проекте, и даже если в этом сторе 1% - стейта, и 99% - бизнес и сопутствующей логики.

В этом плане использование композабл функций для той же цели (an entity holding state and business logic that isn't bound to your Component tree) - намного более логично. И называть их следует не useAuthStore, а useAuth или useAuthService.

Vuex или Pinia?

Во Vue 3 основной внешней библиотекой управления стейтом стала Pinia. В отличие от Vuex у нее есть поддержка TypeScript, она удобней и, естественно, пользуется преимуществами Vue 3.

Vuex официально устарел (deprecated)

Pinia или Composable functions?

Во Vue 3 появилось нечто, делающее отдельную библиотеку для управления стейтом ненужной. А именно, реактивные типыRef и Reactive, которыми можно пользоваться за пределами компонент. Стало возможным делать свои сторы на основе composable функций и подключать их в любом компоненте.

Основное декларируемое отличие Pinia - интеграция с Vue DevTools, плагины и SSR поддержка. Однако, нужно ли ему то или другое, каждый разработчик решает сам. Работать с composables в DevTools вполне комфортно.

Composable функция, в свою очередь, может иметь как глобальный, так и локальный (переменные объявлены внутри функции) стейты. Это бывает удобно в определенных случаях - можно создать несколько экземпляров composable функций, каждая со своим стейтом. Например, когда у вас на сайте несколько новостных виджетов, различающихся только категорией новостей.

Кроме того, с функциональной точки зрения composable функции имеют полный доступ ко всему Vue Reactivity API, что делает их гибче, чем Pinia.

Composable функции с глобальным стейтом не работают в SSR режиме.

Что касается производительности, то по тестам на изменениях Reactive Pinia примерно в полтора раза медленней Vue 3 Reactive, а на Ref - в 20 раз. Это потому, что Ref (примитивные типы) в Pinia становится частью Reactive. Setup store не решают эту проблему.

Также надо помнить, что любая зависимость (в данном случае библиотека Pinia) может принести проблемы, аналогичные с ситуацией "RIP Vuex", когда библиотека умирает, устаревает, перестает поддерживаться или в ней находят уязвимости. Composable функции, в свою очередь, выглядят основательным нововведением во Vue фреймворк.

Вот интересное обсуждение по теме на /r/vuejs. Пример кода от Reddit пользователя @ferferga показывает, как использовать классы TypeScript с private методами, геттерами, сеттерами (без .value) и поддержкой типов первого класса в качестве store на Composition API (что было бы невозможно с Pinia). Использование классов TS здесь, возможно, не является хорошей практикой, но демонстрирует гибкость и мощь Composition API.

Также вот лайфхак для Devtools от пользователя @coolcosmos: Я просто использую рефы. Минус в том, что вы теряете Devtools, но в режиме разработки я временно импортирую все свои рефы и передаю их в Pinia, так что у меня есть все плюсы и никаких минусов.

Как разделять логику между компонентом и composable функциями?

Удобно представлять это как MVC шаблон, где роль View (и частично Controller) выполняют компоненты, отвечающие преимущественно за визуализацию, а логика и модель (Model и частично Controller) приходятся на композабл функции и их реактивный стейт.

Чтобы понять, что класть в композабл, а что в компонент (который может состоять из нескольких компонент), представьте, что вы меняете компонент на другой - отображающий ваши данные как-то иначе. В идеале, модель (композабл) должен остаться тем же самым, вы переписываете только компонент, в котором логика, ответственная только за отображение.

В то же время, логика (Controller) может делиться между компонентом и композаблом. Например, валидация данных формы может происходить в компоненте (проверка, что поле заполнено), в компоненте с помощью сторонней утилиты (проверка, что пароль - "сложный") и в композабле (проверка, что username - уникален)

- +
Skip to content

State management во Vue 3

Зачем нужен State management?

Иногда в приложении нужно передать реактивные данные или функцию из одного компонента в другой, и эти компоненты не принадлежат одной иерархии. Механизмы пропсов/ивентов или provide/inject не подходят для этого. Поэтому во Vue 2 появился Vuex - state management библиотека, которая позволяет хранить реактивный стейт и предоставлять доступ к нему отовсюду.

Библиотека управления стейтом на фронтенде обычно называется "стором".

Как можно передать реактивные данные из одного компонента в другой во Vue 3?
  • Если один компонент является прямым потомком другого - пропсы и ивенты
  • Если один компонент непрямой потомок другого - provide/inject или проп/ивент дриллинг (плохая практика)
  • Если они в разных ветках иерархии - стор или Vue 3 ref/reactive

Vue 3 ref/reactive - это когда в отдельном js модуле вы определяете и экспортируете реактивную переменную:

export const userLoggedIn = ref(false);

После чего она доступна во всём приложении через импорт данного модуля.

Однако, расшаривать просто переменную - архитектурно плохая идея. Обычно вокруг этой переменной есть бизнес логика, которую и надо сделать доступной.

Например, для аутентификации нужен не только сам факт, что пользователь залогинился, но и сопутствующие методы - login(), logout(), register(), isAuthenticated(). Синтез некоего стейта и сопутствующей бизнес логики дал так называемые composable функции во Vue 3.

В некотором смысле - аналог объекта в ООП.

Что такое стор (store) на фронтенде?

A Store (like Pinia) is an entity holding state and business logic that isn't bound to your Component tree. In other words, it hosts global state. It's a bit like a component that is always there and that everybody can read off and write to.

Стор (например, Pinia) — это сущность, содержащая состояние и бизнес-логику, которая не привязана к вашему дереву компонентов. Другими словами, здесь находится глобальное состояние. Это что-то вроде компонента, который всегда присутствует, и который каждый может считывать и писать в него.

Официальная документация Pinia

Выглядит как очень неудачное, двусмысленное и запутывающее определение.

С точки зрения разработчика не фронтенда (по сути любой другой язык, кроме JavaScript, плюс частично JavaScript), аналогом конструкции с названиемстор будет база данных - SQL, NoSQL или кэширующий Redis. Там есть аналоги стейта и геттеров (View в SQL БД). Но в 99.99% случаях в базе данных не будет никакой бизнес логики, за исключением ограничений для консистентности данных (например, unique или foreign keys).

С точки зрения разработчика не фронтенда, сторы фронтенда - это просто объекты / stateful сервисы, построенные по шаблону синглтон. Называть их "глобальными сторами" как минимум нелогично.

Скорей всего, это произошло исторически. Сперва был один Vuex, он был один стор и глобален. Потом у него появились модули. Потом у Pinia эти модули стали независимы и расползлись по всему приложению. В итоге, в приложении куча мелких локальных (по области использования) сторов, каждый из которых считает себя глобальным, даже если его использует 2-3 компонента из 1000 на проекте, и даже если в этом сторе 1% - стейта, и 99% - бизнес и сопутствующей логики.

В этом плане использование композабл функций для той же цели (an entity holding state and business logic that isn't bound to your Component tree) - намного более логично. И называть их следует не useAuthStore, а useAuth или useAuthService.

Vuex или Pinia?

Во Vue 3 основной внешней библиотекой управления стейтом стала Pinia. В отличие от Vuex у нее есть поддержка TypeScript, она удобней и, естественно, пользуется преимуществами Vue 3.

Vuex официально устарел (deprecated)

Pinia или Composable functions?

Во Vue 3 появилось нечто, делающее отдельную библиотеку для управления стейтом ненужной. А именно, реактивные типыRef и Reactive, которыми можно пользоваться за пределами компонент. Стало возможным делать свои сторы на основе composable функций и подключать их в любом компоненте.

Основное декларируемое отличие Pinia - интеграция с Vue DevTools, плагины и SSR поддержка. Однако, нужно ли ему то или другое, каждый разработчик решает сам. Работать с composables в DevTools вполне комфортно.

Composable функция, в свою очередь, может иметь как глобальный, так и локальный (переменные объявлены внутри функции) стейты. Это бывает удобно в определенных случаях - можно создать несколько экземпляров composable функций, каждая со своим стейтом. Например, когда у вас на сайте несколько новостных виджетов, различающихся только категорией новостей.

Кроме того, с функциональной точки зрения composable функции имеют полный доступ ко всему Vue Reactivity API, что делает их гибче, чем Pinia.

Composable функции с глобальным стейтом не работают в SSR режиме.

Что касается производительности, то по тестам на изменениях Reactive Pinia примерно в полтора раза медленней Vue 3 Reactive, а на Ref - в 20 раз. Это потому, что Ref (примитивные типы) в Pinia становится частью Reactive. Setup store не решают эту проблему.

Также надо помнить, что любая зависимость (в данном случае библиотека Pinia) может принести проблемы, аналогичные с ситуацией "RIP Vuex", когда библиотека умирает, устаревает, перестает поддерживаться или в ней находят уязвимости. Composable функции, в свою очередь, выглядят основательным нововведением во Vue фреймворк.

Вот интересное обсуждение по теме на /r/vuejs. Пример кода от Reddit пользователя @ferferga показывает, как использовать классы TypeScript с private методами, геттерами, сеттерами (без .value) и поддержкой типов первого класса в качестве store на Composition API (что было бы невозможно с Pinia). Использование классов TS здесь, возможно, не является хорошей практикой, но демонстрирует гибкость и мощь Composition API.

Также вот лайфхак для Devtools от пользователя @coolcosmos: Я просто использую рефы. Минус в том, что вы теряете Devtools, но в режиме разработки я временно импортирую все свои рефы и передаю их в Pinia, так что у меня есть все плюсы и никаких минусов.

Как разделять логику между компонентом и composable функциями?

Удобно представлять это как MVC шаблон, где роль View (и частично Controller) выполняют компоненты, отвечающие преимущественно за визуализацию, а логика и модель (Model и частично Controller) приходятся на композабл функции и их реактивный стейт.

Чтобы понять, что класть в композабл, а что в компонент (который может состоять из нескольких компонент), представьте, что вы меняете компонент на другой - отображающий ваши данные как-то иначе. В идеале, модель (композабл) должен остаться тем же самым, вы переписываете только компонент, в котором логика, ответственная только за отображение.

В то же время, логика (Controller) может делиться между компонентом и композаблом. Например, валидация данных формы может происходить в компоненте (проверка, что поле заполнено), в компоненте с помощью сторонней утилиты (проверка, что пароль - "сложный") и в композабле (проверка, что username - уникален)

+ \ No newline at end of file diff --git a/ru/development/testing.html b/ru/development/testing.html index 7d1343ae8..5908338b3 100644 --- a/ru/development/testing.html +++ b/ru/development/testing.html @@ -6,13 +6,13 @@ Тестирование | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

Тестирование

Нужно ли тестирование на фронтенде?

Тесты бывают нескольких типов, среди них - unit тесты и интеграционные (e2e) теcты

Unit тестированием во Vue занимаются Vitest, Jest

С тестированием на фронте нужно быть аккуратней, так как написание и переписывание тестов зачастую может занять время, сопоставимое с самой разработкой. В то же время, полезность этих тестов будет под большим вопросом. Их целесообразность проявляется на больших проектах с большим количеством разработчиков. Там unit тесты также отнимают время, но снижают вероятность, что кто-то что-то испортит. В то же время на стартапе unit тесты далеко не самый нужный ингридиент для быстрого создания MVP.

Фронтенд разработка в этом аспекте очень сильно отличается от бэкенд разработки, где unit тесты действительно полезны.

Хорошая статья на эту тему - Unit Test Fetish

Что такое e2e тесты?

На фронте, особенно для веб приложения, которое уже в продакшне и должно время от времени обновляться, важны e2e тесты.

e2e (end-to-end) тестирование — это процесс тестирования программного обеспечения, который имитирует реальные действия пользователей на уровне интерфейса.

При этом будет запущен браузер (обычно, в headless режиме - без UI), и он по написанным скриптам будет проверять работу сайта - наличие элементов на странице, возможность логина и т.п.

Основные средства для e2e тестирования - Cypress, WebdriverIO

При CI/CD проекта прогон тестов - один из основных моментов наряду с линтингом и билдом.

- +
Skip to content

Тестирование

Нужно ли тестирование на фронтенде?

Тесты бывают нескольких типов, среди них - unit тесты и интеграционные (e2e) теcты

Unit тестированием во Vue занимаются Vitest, Jest

С тестированием на фронте нужно быть аккуратней, так как написание и переписывание тестов зачастую может занять время, сопоставимое с самой разработкой. В то же время, полезность этих тестов будет под большим вопросом. Их целесообразность проявляется на больших проектах с большим количеством разработчиков. Там unit тесты также отнимают время, но снижают вероятность, что кто-то что-то испортит. В то же время на стартапе unit тесты далеко не самый нужный ингридиент для быстрого создания MVP.

Фронтенд разработка в этом аспекте очень сильно отличается от бэкенд разработки, где unit тесты действительно полезны.

Хорошая статья на эту тему - Unit Test Fetish

Что такое e2e тесты?

На фронте, особенно для веб приложения, которое уже в продакшне и должно время от времени обновляться, важны e2e тесты.

e2e (end-to-end) тестирование — это процесс тестирования программного обеспечения, который имитирует реальные действия пользователей на уровне интерфейса.

При этом будет запущен браузер (обычно, в headless режиме - без UI), и он по написанным скриптам будет проверять работу сайта - наличие элементов на странице, возможность логина и т.п.

Основные средства для e2e тестирования - Cypress, WebdriverIO

При CI/CD проекта прогон тестов - один из основных моментов наряду с линтингом и билдом.

+ \ No newline at end of file diff --git a/ru/development/web-components.html b/ru/development/web-components.html index f67fe7b95..b6c48a539 100644 --- a/ru/development/web-components.html +++ b/ru/development/web-components.html @@ -6,13 +6,13 @@ Web components | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

Web components

Custom elements

Созданный вам Vue компонент можно оформить:

  • как отдельное приложение
  • как библиотеку для подключения во Vue проектах
  • как web component для подключения в любой JavaScript фронтенд приложении или просто веб-странице

Зачем нужен третий вариант? Чтобы людям, не знакомым с Vue можно было легко подключать ваш компонент у себя примерно в такой форме:

html
<release-timeline title="Hola"></release-timeline>

Web component Custom element может принимать строковый пропсы и испускать CustomEvent события.

Web components v Custom elements это давно стандарт HTML5 и поддерживается всеми основными браузерами.

- +
Skip to content

Web components

Custom elements

Созданный вам Vue компонент можно оформить:

  • как отдельное приложение
  • как библиотеку для подключения во Vue проектах
  • как web component для подключения в любой JavaScript фронтенд приложении или просто веб-странице

Зачем нужен третий вариант? Чтобы людям, не знакомым с Vue можно было легко подключать ваш компонент у себя примерно в такой форме:

html
<release-timeline title="Hola"></release-timeline>

Web component Custom element может принимать строковый пропсы и испускать CustomEvent события.

Web components v Custom elements это давно стандарт HTML5 и поддерживается всеми основными браузерами.

+ \ No newline at end of file diff --git a/ru/frontend/about-frameworks.html b/ru/frontend/about-frameworks.html index 304f1838d..6e49a9fdb 100644 --- a/ru/frontend/about-frameworks.html +++ b/ru/frontend/about-frameworks.html @@ -6,13 +6,13 @@ О фронтенд фреймворках | Vue FAQ - + - + - + - + @@ -39,8 +39,8 @@ someArr = [...someArr, newItem]; // Vue -someArr.value.push(newItem.value);

Использование нативного ES6 объекта Proxy позволяет избежать декомпозиции и создания промежуточного массива. Также это более производительное решение.

- +someArr.value.push(newItem.value);

Использование нативного ES6 объекта Proxy позволяет избежать декомпозиции и создания промежуточного массива. Также это более производительное решение.

+ \ No newline at end of file diff --git a/ru/frontend/architecture.html b/ru/frontend/architecture.html index 6566141ae..ae7f28ec5 100644 --- a/ru/frontend/architecture.html +++ b/ru/frontend/architecture.html @@ -6,13 +6,13 @@ Архитектура фронтэнд приложений | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

Архитектура фронтэнд приложений

Что такое хорошая архитектура веб-приложения

Есть разные теоретические определения и обоснования данного понятия, но грубо говоря это следующее.

Допустим ты разрабатываешь проект, уже на финальном этапе. К тебе подходит заказчик и говорит что-то типа: я хочу добавить тень ко всем кнопкам, я хочу изменить UI библиотеку, мы решили поддерживать несколько языков, мы решили заменить вот этот модуль на другой, нужно сделать более детальную адаптивность для разных разрешений, мы решили добавить темы, мы меняем провайдера услуг по обработке платежей, у нас повышается число пользователей / сайт тормозит / надо его ускорить, надо повысить уровень безопасности сайта, мы взяли мидл программиста, введи его в курс дела быстро, и пусть он добавляет функционал или фиксит баги и т.п.

Хорошая архитектура фронтенд приложения позволяет выполнить всё это наиболее эффективно с наименьшими затратами.

ООП на фронтенде

Многие приходя из разработки на объектно-ориентированных языках пытаются использовать концепции ООП и на фронте и программировать с классами, наследованием, полиморфизмом и прочим.

Это ошибка. Основные вычисления на фронте связаны с UI - показ данных, обработка взаимодействия с пользователем. Системы классов и микросервисов на них просто не нужны. Конечно, можно создать базовую кнопку, обернуть ее в два кастомных компонента и считать это наследованием, но в коде этого не получается. Поэтому надо учиться мыслить другими категориями - компоненты, композаблы, js модули. И использовать свою мощь JavaScript-a, а не пытаться натянуть его на ООП.

В то же время неплохой аналогией объекта с глобальным ("статичным") и локальным ("объектным") состоянием является композабл функция. Это можно использовать в определённых ситуациях.

Многопоточность и асинхронность

Многопоточность - это когда программист может создать отдельный поток и запустить в нем свой определенный код. Например, можно создать два потока, один в бесконечном цикле выводит в консоль "Поток А", а второй - "Поток В". Эти строки будут чередоваться в выводе. Можно задать приоритеты потокам, и тогда поток в приоритетом 3 будет выводить сообщения в 3 раза чаще, чем поток с приоритетом 1.

Данные два потока должны выполняться одновременно, но это условно. Потому что если потоков 10, а процессор двухядерный с двумя своими потоками на ядро, то чисто физически больше 4 одновременных потоков выполнять нельзя. Поэтому потоки делятся на кусочки кода, и они выполняются по очереди - это называется конкурентностью.

В мире JavaScript cтановиться в одну очередь потоки могут на уровне JS рантайма, OS, CPU. Обычные десктопные приложения (например, IDE) тоже бывают с хорошей поддержкой распараллеливания на многоядерные процессоры - и тогда они используют CPU максимально эффективно, или нагружающие только одно ядро. В последнем случае апгрейд процессора на более современный многоядерный почти ничего не даст, если у старого и нового примерно одна частота.

Асинхронность - это когда есть некая неблокирующая функция, точное время исполнения которой неизвестно. И программист может указать код, который должен выполниться после исполнения данной функции (передать callback). Промисы и async/await это нетривиальные, но всё же просто удобные обертки над данной логикой.

Итак, при асинхронности обычно есть некая пограничная функция, зависящая от внешних обстоятельств (fetch, nextTick, fs.readdir, setTimeout). Её "псевдопараллельное" исполнение в одном потоке вместе с основным кодом обеспечивается механизмом Event Loop.

Таким образом, это абсолютно разные вещи как по целевому назначению, так и по использованию. Асинхронность в JavaScript реализована через промисы и async/await, многопоточность или её подобие реализуется райнтаймом (Web workers, worker_threads).

Асинхронность нужна для общения с "внешним миром", включая отрисовку браузера. Многопоточность позволяет выделить ресурсоемкие вычисления (а также сетевую загрузку) в отдельные потоки (Web workers), что снижает нагрузку на основной поток, который отвечает и за рендеринг. Это благоприятно сказывается на отзывчивости вашего UI.

Полезные советы
Избегайте зависимостей

Если есть возможность не вводить новую зависимость (не подключать новый npm пакет) - не делайте это. Это может немного сэкономит ваше время, но сторонняя библиотека рано или поздно устареет, перестанет поддерживаться, в ней могут обнаружить уязвимость. Кроме того она увеличивает размер вашего бандла, что напрямую влияет на производительность вашего приложения. Tree shaking хорош в рекламных зазываниях, но работает реально далеко не всегда.

Если вам нужна, например, функция debounce, не торопитесь подключать её вместе с какой-либо библиотекой. Загуглите её реализацию и скопируйте 15 строк кода, сделав свою функцию.


Используйте обертки над компонентами UI библиотек и сторонних утилит

Если вы используете компоненты какой-то UI библиотеки, не используйте их напрямую - сделайте обертки для них. Например, BaseButton или BaseInput. Это намного облегчит стилизацию компонент, а также сильно упростит переход на другую библиотеку, или замену на свои компоненты.

То же самое с утилитами.


Регулярный рефакторинг

Время от времени делайте рефакторинг кода, перемещая компоненты и модули туда, где они должны быть логически, переименовывая их, и структурируя и улучшая сам код. Это полезно и для кода, и для вашего профессионального роста.


Используйте CSS3

Старайтесь использовать для адаптивноcти чистый CSS3. Не привязывайтесь к колоночным моделям CSS и UI библиотек, если только это не проект из разряда: "сделал и забыл, пусть заказчик дальше с ним мучается".

Потратьте пару дней на изучение Флексбокса и вы сможете верстать на нём быстрей и лучше, чем на любом Тайлвинде.


Используйте современные стандарты и возможности языков

Например, семантические элементы HTML5 - aside, header, section, article, details и.т.д.

CSS3 - Flexbox и Grid, Container query


Документируйте проект

Рисуйте use-case и другие диаграммы, описывайте основной функционал проекта и важные детали его реализации - это как минимум повысит ваш уровень как разработчика ПО.

VitePress - очень удобный инструмент для технического документирования.

- +
Skip to content

Архитектура фронтэнд приложений

Что такое хорошая архитектура веб-приложения

Есть разные теоретические определения и обоснования данного понятия, но грубо говоря это следующее.

Допустим ты разрабатываешь проект, уже на финальном этапе. К тебе подходит заказчик и говорит что-то типа: я хочу добавить тень ко всем кнопкам, я хочу изменить UI библиотеку, мы решили поддерживать несколько языков, мы решили заменить вот этот модуль на другой, нужно сделать более детальную адаптивность для разных разрешений, мы решили добавить темы, мы меняем провайдера услуг по обработке платежей, у нас повышается число пользователей / сайт тормозит / надо его ускорить, надо повысить уровень безопасности сайта, мы взяли мидл программиста, введи его в курс дела быстро, и пусть он добавляет функционал или фиксит баги и т.п.

Хорошая архитектура фронтенд приложения позволяет выполнить всё это наиболее эффективно с наименьшими затратами.

ООП на фронтенде

Многие приходя из разработки на объектно-ориентированных языках пытаются использовать концепции ООП и на фронте и программировать с классами, наследованием, полиморфизмом и прочим.

Это ошибка. Основные вычисления на фронте связаны с UI - показ данных, обработка взаимодействия с пользователем. Системы классов и микросервисов на них просто не нужны. Конечно, можно создать базовую кнопку, обернуть ее в два кастомных компонента и считать это наследованием, но в коде этого не получается. Поэтому надо учиться мыслить другими категориями - компоненты, композаблы, js модули. И использовать свою мощь JavaScript-a, а не пытаться натянуть его на ООП.

В то же время неплохой аналогией объекта с глобальным ("статичным") и локальным ("объектным") состоянием является композабл функция. Это можно использовать в определённых ситуациях.

Многопоточность и асинхронность

Многопоточность - это когда программист может создать отдельный поток и запустить в нем свой определенный код. Например, можно создать два потока, один в бесконечном цикле выводит в консоль "Поток А", а второй - "Поток В". Эти строки будут чередоваться в выводе. Можно задать приоритеты потокам, и тогда поток в приоритетом 3 будет выводить сообщения в 3 раза чаще, чем поток с приоритетом 1.

Данные два потока должны выполняться одновременно, но это условно. Потому что если потоков 10, а процессор двухядерный с двумя своими потоками на ядро, то чисто физически больше 4 одновременных потоков выполнять нельзя. Поэтому потоки делятся на кусочки кода, и они выполняются по очереди - это называется конкурентностью.

В мире JavaScript cтановиться в одну очередь потоки могут на уровне JS рантайма, OS, CPU. Обычные десктопные приложения (например, IDE) тоже бывают с хорошей поддержкой распараллеливания на многоядерные процессоры - и тогда они используют CPU максимально эффективно, или нагружающие только одно ядро. В последнем случае апгрейд процессора на более современный многоядерный почти ничего не даст, если у старого и нового примерно одна частота.

Асинхронность - это когда есть некая неблокирующая функция, точное время исполнения которой неизвестно. И программист может указать код, который должен выполниться после исполнения данной функции (передать callback). Промисы и async/await это нетривиальные, но всё же просто удобные обертки над данной логикой.

Итак, при асинхронности обычно есть некая пограничная функция, зависящая от внешних обстоятельств (fetch, nextTick, fs.readdir, setTimeout). Её "псевдопараллельное" исполнение в одном потоке вместе с основным кодом обеспечивается механизмом Event Loop.

Таким образом, это абсолютно разные вещи как по целевому назначению, так и по использованию. Асинхронность в JavaScript реализована через промисы и async/await, многопоточность или её подобие реализуется райнтаймом (Web workers, worker_threads).

Асинхронность нужна для общения с "внешним миром", включая отрисовку браузера. Многопоточность позволяет выделить ресурсоемкие вычисления (а также сетевую загрузку) в отдельные потоки (Web workers), что снижает нагрузку на основной поток, который отвечает и за рендеринг. Это благоприятно сказывается на отзывчивости вашего UI.

Полезные советы
Избегайте зависимостей

Если есть возможность не вводить новую зависимость (не подключать новый npm пакет) - не делайте это. Это может немного сэкономит ваше время, но сторонняя библиотека рано или поздно устареет, перестанет поддерживаться, в ней могут обнаружить уязвимость. Кроме того она увеличивает размер вашего бандла, что напрямую влияет на производительность вашего приложения. Tree shaking хорош в рекламных зазываниях, но работает реально далеко не всегда.

Если вам нужна, например, функция debounce, не торопитесь подключать её вместе с какой-либо библиотекой. Загуглите её реализацию и скопируйте 15 строк кода, сделав свою функцию.


Используйте обертки над компонентами UI библиотек и сторонних утилит

Если вы используете компоненты какой-то UI библиотеки, не используйте их напрямую - сделайте обертки для них. Например, BaseButton или BaseInput. Это намного облегчит стилизацию компонент, а также сильно упростит переход на другую библиотеку, или замену на свои компоненты.

То же самое с утилитами.


Регулярный рефакторинг

Время от времени делайте рефакторинг кода, перемещая компоненты и модули туда, где они должны быть логически, переименовывая их, и структурируя и улучшая сам код. Это полезно и для кода, и для вашего профессионального роста.


Используйте CSS3

Старайтесь использовать для адаптивноcти чистый CSS3. Не привязывайтесь к колоночным моделям CSS и UI библиотек, если только это не проект из разряда: "сделал и забыл, пусть заказчик дальше с ним мучается".

Потратьте пару дней на изучение Флексбокса и вы сможете верстать на нём быстрей и лучше, чем на любом Тайлвинде.


Используйте современные стандарты и возможности языков

Например, семантические элементы HTML5 - aside, header, section, article, details и.т.д.

CSS3 - Flexbox и Grid, Container query


Документируйте проект

Рисуйте use-case и другие диаграммы, описывайте основной функционал проекта и важные детали его реализации - это как минимум повысит ваш уровень как разработчика ПО.

VitePress - очень удобный инструмент для технического документирования.

+ \ No newline at end of file diff --git a/ru/frontend/css-ui-libs.html b/ru/frontend/css-ui-libs.html index 703b8ab76..35f844e83 100644 --- a/ru/frontend/css-ui-libs.html +++ b/ru/frontend/css-ui-libs.html @@ -6,13 +6,13 @@ CSS и UI библиотеки | Vue FAQ - + - + - + - + @@ -35,8 +35,8 @@
Skip to content

CSS и UI библиотеки

Что такое CSS и UI библиотеки?

CSS и UI библиотеки либо предоставляют свои, либо помогают создавать кастомные UI компоненты типа Button или Select? что может значительно ускорить разработку.

CSS библиотеки не содержат JavaScript кода и, соответственно, имеют ограничения для сложных компонент типа Select или Dropdown.

Есть отдельный тип Headless-UI библиотек, которые предлагают компоненты без стилизованной визуализации - только логику компонента и Accessibility требования. Разработчику нужно самому добавить CSS стили.

Плюсы и минусы UI библиотек?

Плюсы: укоряет разработку, если пользоваться ей на проекте максимально, вносит в приложение единый стиль

Минусы: как и любая зависимость может устареть (трагедия Vuetify 2), добавляет веса в итоговый бандл.

В этой статье хорошо сравниваются 10 Vue 3 UI библиотек.

Как снизить зависимость от чужих библиотек?

Оборачивайте компоненты UI библиотеки в свои.

vue
<!-- BaseButton.vue -->
 <template>
   <QButton ... />
-</template>

и используйте в своем коде BaseButton. Таким образом в дальнейшем вам будет намного проще проапгрейдиться, заменить библиотеку или заменить данный компонент на самописный. И даже просто изменить у компонента стили.

Лэйаут и адаптивность страниц средствами CSS и UI библиотек

Использование колоночной системы и иного функционала CSS и UI библиотек типа распространенного Tailwind удобно для небольших проектов и иногда ускоряет верстку, однако очень сильно ухудшает качество кода в целом, включая его поддерживаемость и расширяемость. Как будто мир вновь вернулся во времена IE6, когда все стили и JavaScript также располагались в аттрибутах тэгов, и вся эволюция CSS в понятную, удобную, красивую иерарxичную модель классов была зря, как и разделение веба на документ (шаблон), презентационный слой (CSS стили) и логику (JavaScript).

В интернете полно статей, почему подход подобный Tailwind это плохо. Можно отметить только, что при должном умении верстать на чистом CSS3 также быстро и намного удобней и приятней в плане DX, чем через средства CSS и UI библиотек.

Цитата

Хорошие разработчики знают причины, по которым стандарты, паттерны и хорошие практики стали таковыми.

Плохие разработчики придерживаются любой новой тенденции, которая может сэкономить им немного времени на обучение.

- +</template>

и используйте в своем коде BaseButton. Таким образом в дальнейшем вам будет намного проще проапгрейдиться, заменить библиотеку или заменить данный компонент на самописный. И даже просто изменить у компонента стили.

Лэйаут и адаптивность страниц средствами CSS и UI библиотек

Использование колоночной системы и иного функционала CSS и UI библиотек типа распространенного Tailwind удобно для небольших проектов и иногда ускоряет верстку, однако очень сильно ухудшает качество кода в целом, включая его поддерживаемость и расширяемость. Как будто мир вновь вернулся во времена IE6, когда все стили и JavaScript также располагались в аттрибутах тэгов, и вся эволюция CSS в понятную, удобную, красивую иерарxичную модель классов была зря, как и разделение веба на документ (шаблон), презентационный слой (CSS стили) и логику (JavaScript).

В интернете полно статей, почему подход подобный Tailwind это плохо. Можно отметить только, что при должном умении верстать на чистом CSS3 также быстро и намного удобней и приятней в плане DX, чем через средства CSS и UI библиотек.

Цитата

Хорошие разработчики знают причины, по которым стандарты, паттерны и хорошие практики стали таковыми.

Плохие разработчики придерживаются любой новой тенденции, которая может сэкономить им немного времени на обучение.

+ \ No newline at end of file diff --git a/ru/frontend/learning.html b/ru/frontend/learning.html index dd67393fa..a65916cad 100644 --- a/ru/frontend/learning.html +++ b/ru/frontend/learning.html @@ -6,13 +6,13 @@ Изучение Vue | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

Изучение Vue

Источники информации по Vue

Почему-то считается, что на фронтенде есть всего два варианта получать знания - документация Vue и обучающие видео с Ютюба и всевозможных курсов.

Но документация это не учебник, а справочник, и отделить зерна от плевел на Ютюбе очень сложно. Я встречал полезные видео, но все они предназначались для уже неплохо знающих Vue разработчиков, и показывали какие-то новые или нестандартные моменты.


Главным учителем должна быть книга, которая именно учит, а не даёт справочную информацию.

Прекрасный учебник по Vue на английском языке - вышедшая в мае 2023 года Vue.js 3 Design Patterns and Best Practices. Можно зарегистрироваться на oReilly и читать 10 дней бесплатно. Даже скачать. Несмотря на название, книга учит именно программированию, причем, довольно с таки начального уровня.

Перевод данной книги на русский язык находится на этом сайте: (учебник).

Примеры из книги находятся в открытом доступе и вполне достойны изучения.

Больше на русском, к сожалению, почти ничего нет, но, во-первых, есть Google translate, а во-вторых, стать уверенным разработчиком без хотя бы среднего знания технического английского вряд ли получится.

Так же надо отметить, что документация Vue на русском порой сильно отстает от документации на английском.


Заметка

Можно провести аналогию между хорошим разработчиком и водителем:

  1. Изучение основ вождения, ПДД и устройства двигателя внутреннего сгорания - документация Vue и спецификация JavaScript
  2. Практическое обучение вождению в автошколе - хорошие учебники типа "Vue.js 3 Design Patterns and Best Practices"
  3. Реальный опыт вождения - коммерческий опыт разработки
  4. Курсы экстремального вождения, поставить стакан воды на капот и проехать на двадцатилетней машине с механической коробкой передач по разбитым улицам - качественные опен сорс проекты и сертификации

Невозможно стать хорошим разработчиком/водителем как без 1., так и только с 1. Обучающие видео из интернета (как платные так и бесплатные) могут как быть частью 4., так и быть абсолютно бесполезными и даже вредными (очень часто), в зависимости от их качества и мотивации ученика.

Vue 2 или Vue 3?

Vue 3.
Composition API.

Если вам нужен будет Vue 2 для поддержки существующего проекта, то вы сами будете знать ответ на этот вопрос.

Разница между Vue 2 и Vue 3 большая. Это не тот случай, когда надо выучить предварительно предыдущую версию, чтобы лучше и легче понять следующую.

Нужно ли знать JavaScript предварительно?

Обязательно, минимум на среднем уровне. Если этого нет, я бы предложил сперва пройти короткий курс javascript-a, чтобы человек знал об объекте document, умел обращаться с методами массива и не очень боялся промисов. Также, HTML и CSS как минимум на базовом уровне.

Вот легко читаемая книжка - "Морган Н. - JavaScript для детей. Самоучитель по программированию - 2016. Перед началом изучения Vue желательно понимать 70% первой части, а также параграфы 10 и 12.

Также классический ресурс по JavaScript - learn.javascript.ru

70 вопросов по JavaScript для подготовки к собеседованию - отличный тест, проверить себя по знанию языка.


Совет

Также абсолютно необходимый предварительный скилл - умение гуглить.

Есть ли сертификация по Vue?

Vue.js Certification

Vue Style Guide

Обязательно ознакомьтесь с Vue Style Guide и старайтесь придерживаться его лучших практик при написании кода.

Время от времени возвращайтесь к этому источнику и улучшайте свой код.

ESlint также помогает держать свой код в соответствии с лучшими практиками.

Нужен ли ментор?

Ментор полезен и начинающему, и опытному разработчику. Можно бесполезно убить два дня на решение проблемы, которую за 20 минут может объяснить более опытный человек. Причем, этот двухдневный "опыт" больше никогда не пригодится.

В компаниях эту роль обычно выполняют более компетентные доброжелательные коллеги.

В интернете есть сервисы типа Solvery, которые могут помочь в этом вопросе.

Всё равно хочу видео

Есть качественные у Vue Mastery, однако большинство устарели.

Довольно грамотно и качественно объясняет технологии фронтенда и Vue 3 Илья Климов.

Что еще посмотреть кроме Vue? React?

Можно и React, если есть реальный вариант использования этих знаний, однако намного лучше расширить свой кругозор разработчика. Попробуйте написать простой API на бэкенде. Самый легкий и удобный язык для этого - PHP, но можно и на Node.js или Python. Попробуйте транспортные протоколы JSON-RPC и WebSockets. Захостите свое приложение на GitHub Pages или другой аналогичный сервис, поэкспериментируйте с GitHub Actions - они очень помогают с автоматизацией деплоя и CI/CD в целом. Поработайте с Cloud провайдерами (многие предлагают бесплатные ресурсы), настройте виртуальный сервер. Зарегистрируйте домен, сделайте продуктовый законченный сайт - даже если это будет просто ваш сайт-резюме или что-то элементарное на VitePress (используется данным сайтом). Поработайте с FireStore и открытыми API для различных данных. Посмотрите Swagger. Поизучайте SQL, установите MySQL и поиграйте с ним, либо сделайте это на SupaBase. Понимание, как данные хранятся и обрабатываются на бэкенде, сильно поможет в выборе правильных стратегий на фронте.

Изучайте, как работает современный Интернет, и какие технологии и лучшие практики распространены в нем сейчас.

- +
Skip to content

Изучение Vue

Источники информации по Vue

Почему-то считается, что на фронтенде есть всего два варианта получать знания - документация Vue и обучающие видео с Ютюба и всевозможных курсов.

Но документация это не учебник, а справочник, и отделить зерна от плевел на Ютюбе очень сложно. Я встречал полезные видео, но все они предназначались для уже неплохо знающих Vue разработчиков, и показывали какие-то новые или нестандартные моменты.


Главным учителем должна быть книга, которая именно учит, а не даёт справочную информацию.

Прекрасный учебник по Vue на английском языке - вышедшая в мае 2023 года Vue.js 3 Design Patterns and Best Practices. Можно зарегистрироваться на oReilly и читать 10 дней бесплатно. Даже скачать. Несмотря на название, книга учит именно программированию, причем, довольно с таки начального уровня.

Перевод данной книги на русский язык находится на этом сайте: (учебник).

Примеры из книги находятся в открытом доступе и вполне достойны изучения.

Больше на русском, к сожалению, почти ничего нет, но, во-первых, есть Google translate, а во-вторых, стать уверенным разработчиком без хотя бы среднего знания технического английского вряд ли получится.

Так же надо отметить, что документация Vue на русском порой сильно отстает от документации на английском.


Заметка

Можно провести аналогию между хорошим разработчиком и водителем:

  1. Изучение основ вождения, ПДД и устройства двигателя внутреннего сгорания - документация Vue и спецификация JavaScript
  2. Практическое обучение вождению в автошколе - хорошие учебники типа "Vue.js 3 Design Patterns and Best Practices"
  3. Реальный опыт вождения - коммерческий опыт разработки
  4. Курсы экстремального вождения, поставить стакан воды на капот и проехать на двадцатилетней машине с механической коробкой передач по разбитым улицам - качественные опен сорс проекты и сертификации

Невозможно стать хорошим разработчиком/водителем как без 1., так и только с 1. Обучающие видео из интернета (как платные так и бесплатные) могут как быть частью 4., так и быть абсолютно бесполезными и даже вредными (очень часто), в зависимости от их качества и мотивации ученика.

Vue 2 или Vue 3?

Vue 3.
Composition API.

Если вам нужен будет Vue 2 для поддержки существующего проекта, то вы сами будете знать ответ на этот вопрос.

Разница между Vue 2 и Vue 3 большая. Это не тот случай, когда надо выучить предварительно предыдущую версию, чтобы лучше и легче понять следующую.

Нужно ли знать JavaScript предварительно?

Обязательно, минимум на среднем уровне. Если этого нет, я бы предложил сперва пройти короткий курс javascript-a, чтобы человек знал об объекте document, умел обращаться с методами массива и не очень боялся промисов. Также, HTML и CSS как минимум на базовом уровне.

Вот легко читаемая книжка - "Морган Н. - JavaScript для детей. Самоучитель по программированию - 2016. Перед началом изучения Vue желательно понимать 70% первой части, а также параграфы 10 и 12.

Также классический ресурс по JavaScript - learn.javascript.ru

70 вопросов по JavaScript для подготовки к собеседованию - отличный тест, проверить себя по знанию языка.


Совет

Также абсолютно необходимый предварительный скилл - умение гуглить.

Есть ли сертификация по Vue?

Vue.js Certification

Vue Style Guide

Обязательно ознакомьтесь с Vue Style Guide и старайтесь придерживаться его лучших практик при написании кода.

Время от времени возвращайтесь к этому источнику и улучшайте свой код.

ESlint также помогает держать свой код в соответствии с лучшими практиками.

Нужен ли ментор?

Ментор полезен и начинающему, и опытному разработчику. Можно бесполезно убить два дня на решение проблемы, которую за 20 минут может объяснить более опытный человек. Причем, этот двухдневный "опыт" больше никогда не пригодится.

В компаниях эту роль обычно выполняют более компетентные доброжелательные коллеги.

В интернете есть сервисы типа Solvery, которые могут помочь в этом вопросе.

Всё равно хочу видео

Есть качественные у Vue Mastery, однако большинство устарели.

Довольно грамотно и качественно объясняет технологии фронтенда и Vue 3 Илья Климов.

Что еще посмотреть кроме Vue? React?

Можно и React, если есть реальный вариант использования этих знаний, однако намного лучше расширить свой кругозор разработчика. Попробуйте написать простой API на бэкенде. Самый легкий и удобный язык для этого - PHP, но можно и на Node.js или Python. Попробуйте транспортные протоколы JSON-RPC и WebSockets. Захостите свое приложение на GitHub Pages или другой аналогичный сервис, поэкспериментируйте с GitHub Actions - они очень помогают с автоматизацией деплоя и CI/CD в целом. Поработайте с Cloud провайдерами (многие предлагают бесплатные ресурсы), настройте виртуальный сервер. Зарегистрируйте домен, сделайте продуктовый законченный сайт - даже если это будет просто ваш сайт-резюме или что-то элементарное на VitePress (используется данным сайтом). Поработайте с FireStore и открытыми API для различных данных. Посмотрите Swagger. Поизучайте SQL, установите MySQL и поиграйте с ним, либо сделайте это на SupaBase. Понимание, как данные хранятся и обрабатываются на бэкенде, сильно поможет в выборе правильных стратегий на фронте.

Изучайте, как работает современный Интернет, и какие технологии и лучшие практики распространены в нем сейчас.

+ \ No newline at end of file diff --git a/ru/frontend/spa-pwa-ssr-ssg.html b/ru/frontend/spa-pwa-ssr-ssg.html index bc8752e51..912a0fddf 100644 --- a/ru/frontend/spa-pwa-ssr-ssg.html +++ b/ru/frontend/spa-pwa-ssr-ssg.html @@ -6,14 +6,14 @@ SPA, PWA, SSG, SSR и SEO | Vue FAQ - + - + - + - + @@ -33,8 +33,8 @@ -
Skip to content

SPA, PWA, SSG, SSR и SEO

Web 1.0 -> Web 2.0

Сперва был статичный HTML и браузеры показывали его. Чуть позже придумали немножко JavaScript-а, чтобы обрабатывать формочки и делать небольшую анимацию. Потом появился CSS, и все увидели, что это красиво. После кто-то предложил идею JSON для формата данных, а затем Микрософт подарила миру XMLHttpRequest, и JavaScript-у разрешили отправлять и получать данные с сервера.

Так родился SPA.

SPA

SPA (Single Page Application) работает примерно как обычное десктоп/мобильное приложение - при первом обращении на сервер получает програмную оболочку, необходимую для отображения сайта, а затем уже пересылает на/с сервера данные, обычно в JSON формате. Так получается намного эффективней способа, когда с каждым запросом с сервера приходила новая HTML страница с всеми ресурсами.

Для пользователя UX повышается значительно.

spa-vs-mpa

PWA

PWA (Progressive Web Application) - еще один шаг, чтобы улучшить пользовательский опыт и максимально приблизить веб приложения по ощущениям пользователя к нативным.

При PWA к SPA добавляются два элемента:

  1. Манифест. Текстовый файл со свойствами приложения. Благодаря ему иконка веб-приложения может быть установлена также как и у нативных приложений на домашний экран смартфона. Кроме того, при запуске PWA может не показывать элементы браузера и казаться обычным приложением.

  2. Service worker. Это прослойка в браузере между сервером и самим браузером, которая позволяет сделать управляемое кэширование. Другими словами, сохранить приложение со всеми ресурсами на смартфоне/компьютере, чтобы при запуске оно сразу запускалось. Если не нужны данные с сервера, то приложение может работать оффлайн (например, Заметки).

Больше о PWA можно прочесть на сайте, созданном командой Chrome - https://web.dev/

Апгрейд SPA до PWA очень небольшой по трудозатратам, но очень значительный по выгоде. Разрабатывать SPA и не делать его PWA - это как снять люксовый номер в гостинице, но лечь спать на его входе в коридоре на коврике, потому что до спальни лень дойти.

PWA -> Workbox и vite-plugin-pwa

Манифест и Service worker настолько просты, что создание обертки над SW - Workbox, и плагина для Vite vite-plugin-pwa логическому объяснению не поддается. Кода получается в несколько раз больше, нужно грузить дополнительные зависимости и разбираться в конфигурациях оберток. Простое сделали сложным.

Лучше задействовать Манифест и Service worker как они созданы изначально, и написать два этих простых файла по шаблонам из спецификаций.

SSG

SSG (Static Site Generation) — подход, когда содержимое сайта предварительно генерируется в html-файлы, которые потом раздаются с сервера.

Сразу подходит для индексации поисковиками.

SSR

SSR (Server Side Rendering), способ генерации html на стороне сервера, когда генерация происходит в момент обращения. После запроса клиентом странички, сервер на своей стороне выполняет API-запросы, а затем формирует html-страницу. Соответственно, на сервере нужен Node.js сервер, который довольно сильно нагружает "железо".

Кроме того, есть множество ограничений при написании кода и использования тех или иных JavaScript и Vue возможностей. Как пишет Google относительно SSR - "A rehydration problem: one app for the price of two".

SEO оптимизация

Для того, чтобы поисковик мог проиндексировать страницу вашего сайта, при обращении к ней он должен получить HTML с контентом (текст, картинки, видео). Со SPA сайтами, в которых контент подгружается динамически JavaScript-ом, такое иногда не получается, но иногда и получается. Как следует из этих экспериментов Google уже умеет индексировать SPA приложения, Yandex - еще нет.

Самым популярным и неэффективным методом для надежного индексации всеми поисковиками является использование SSR (SSG подходит для несложных по структуре сайтов без бэкенда, вроде документаций).

Google позволяет посмотреть, как ваш сайт выглядит/индексируется его кроулером, который как-то всё-таки работает со скриптами, поэтому для начала проверьте, нужно ли вам усложняться вообще.

Если проблемы обнаружились, то можно воспользоваться динамической отрисовкой

dynamic-rendering

Смысл в том, чтобы обрабатывать запросы обычных пользователей и поисковых ботов по-разному и отдавать им разные страницы. Для пользователей - SPA, для поисковиков - сгенеренные налету либо заранее страницы. Распределение может вести вебсервер или точка входа на ваш сайт (index.php вместо index.html).

На картинке выше подразумевается некий Prerenderer (которые тоже есть в качестве стороннего сервиса или своего решения), однако в большинстве случаев намного проще генерить HTML страницу для бота напрямую.

То есть, например, для страницы товара в онлайн магазине это может быть его текстовое описание с картинками и отзывами покупателей в любом HTML форматировании. Для этого достаточно скрипта на PHP/Express/Python и т.д. в 100-200 строк, что намного менее трудозатратней SSR решений, а так же снижает требования в серверному "железу" на порядки (вывод можно закэшировать в статичный HTML файл).

При совпадении фактического контента (текст, картинки) такой страницы с контентом SPA в браузере, Google не рассматривает упрощенную для его бота версию как обман. Данная метода была еще до появления всяких SSR. Проверено многолетним использованием.

PageSpeed и другие тесты производительности

PageSpeed и подобные инструменты очень полезны в выявлении неоптимизированных мест в вашем веб-приложении, однако для SPA и PWA он не совсем верен.

Точней, некоторые его метрики не учитывают UX в целом. Нормально сделанный PWA при самой первой загрузке и установке, конечно, проиграет по FCP метрике аналогу на SSR, но после размещения всех своих ресурсов локально на браузере клиента, никакой SSR и близко не сравнится с ним по скорости работы и комфорту для пользователя, не говоря уже о прочих возможностях типа оффлайн работы и установке как нативного приложения.

SSR может быть, наверное, полезен для каких-то исключительных случаев, но в целом он выглядит тупиковой ветвью во фронтенд разработке.

- +
Skip to content

SPA, PWA, SSG, SSR и SEO

Web 1.0 -> Web 2.0

Сперва был статичный HTML и браузеры показывали его. Чуть позже придумали немножко JavaScript-а, чтобы обрабатывать формочки и делать небольшую анимацию. Потом появился CSS, и все увидели, что это красиво. После кто-то предложил идею JSON для формата данных, а затем Микрософт подарила миру XMLHttpRequest, и JavaScript-у разрешили отправлять и получать данные с сервера.

Так родился SPA.

SPA

SPA (Single Page Application) работает примерно как обычное десктоп/мобильное приложение - при первом обращении на сервер получает програмную оболочку, необходимую для отображения сайта, а затем уже пересылает на/с сервера данные, обычно в JSON формате. Так получается намного эффективней способа, когда с каждым запросом с сервера приходила новая HTML страница с всеми ресурсами.

Для пользователя UX повышается значительно.

spa-vs-mpa

PWA

PWA (Progressive Web Application) - еще один шаг, чтобы улучшить пользовательский опыт и максимально приблизить веб приложения по ощущениям пользователя к нативным.

При PWA к SPA добавляются два элемента:

  1. Манифест. Текстовый файл со свойствами приложения. Благодаря ему иконка веб-приложения может быть установлена также как и у нативных приложений на домашний экран смартфона. Кроме того, при запуске PWA может не показывать элементы браузера и казаться обычным приложением.

  2. Service worker. Это прослойка в браузере между сервером и самим браузером, которая позволяет сделать управляемое кэширование. Другими словами, сохранить приложение со всеми ресурсами на смартфоне/компьютере, чтобы при запуске оно сразу запускалось. Если не нужны данные с сервера, то приложение может работать оффлайн (например, Заметки).

Больше о PWA можно прочесть на сайте, созданном командой Chrome - https://web.dev/

Апгрейд SPA до PWA очень небольшой по трудозатратам, но очень значительный по выгоде. Разрабатывать SPA и не делать его PWA - это как снять люксовый номер в гостинице, но лечь спать на его входе в коридоре на коврике, потому что до спальни лень дойти.

PWA -> Workbox и vite-plugin-pwa

Манифест и Service worker настолько просты, что создание обертки над SW - Workbox, и плагина для Vite vite-plugin-pwa логическому объяснению не поддается. Кода получается в несколько раз больше, нужно грузить дополнительные зависимости и разбираться в конфигурациях оберток. Простое сделали сложным.

Лучше задействовать Манифест и Service worker как они созданы изначально, и написать два этих простых файла по шаблонам из спецификаций.

SSG

SSG (Static Site Generation) — подход, когда содержимое сайта предварительно генерируется в html-файлы, которые потом раздаются с сервера.

Сразу подходит для индексации поисковиками.

SSR

SSR (Server Side Rendering), способ генерации html на стороне сервера, когда генерация происходит в момент обращения. После запроса клиентом странички, сервер на своей стороне выполняет API-запросы, а затем формирует html-страницу. Соответственно, на сервере нужен Node.js сервер, который довольно сильно нагружает "железо".

Кроме того, есть множество ограничений при написании кода и использования тех или иных JavaScript и Vue возможностей. Как пишет Google относительно SSR - "A rehydration problem: one app for the price of two".

SEO оптимизация

Для того, чтобы поисковик мог проиндексировать страницу вашего сайта, при обращении к ней он должен получить HTML с контентом (текст, картинки, видео). Со SPA сайтами, в которых контент подгружается динамически JavaScript-ом, такое иногда не получается, но иногда и получается. Как следует из этих экспериментов Google уже умеет индексировать SPA приложения, Yandex - еще нет.

Самым популярным и неэффективным методом для надежного индексации всеми поисковиками является использование SSR (SSG подходит для несложных по структуре сайтов без бэкенда, вроде документаций).

Google позволяет посмотреть, как ваш сайт выглядит/индексируется его кроулером, который как-то всё-таки работает со скриптами, поэтому для начала проверьте, нужно ли вам усложняться вообще.

Если проблемы обнаружились, то можно воспользоваться динамической отрисовкой

dynamic-rendering

Смысл в том, чтобы обрабатывать запросы обычных пользователей и поисковых ботов по-разному и отдавать им разные страницы. Для пользователей - SPA, для поисковиков - сгенеренные налету либо заранее страницы. Распределение может вести вебсервер или точка входа на ваш сайт (index.php вместо index.html).

На картинке выше подразумевается некий Prerenderer (которые тоже есть в качестве стороннего сервиса или своего решения), однако в большинстве случаев намного проще генерить HTML страницу для бота напрямую.

То есть, например, для страницы товара в онлайн магазине это может быть его текстовое описание с картинками и отзывами покупателей в любом HTML форматировании. Для этого достаточно скрипта на PHP/Express/Python и т.д. в 100-200 строк, что намного менее трудозатратней SSR решений, а так же снижает требования в серверному "железу" на порядки (вывод можно закэшировать в статичный HTML файл).

При совпадении фактического контента (текст, картинки) такой страницы с контентом SPA в браузере, Google не рассматривает упрощенную для его бота версию как обман. Данная метода была еще до появления всяких SSR. Проверено многолетним использованием.

PageSpeed и другие тесты производительности

PageSpeed и подобные инструменты очень полезны в выявлении неоптимизированных мест в вашем веб-приложении, однако для SPA и PWA он не совсем верен.

Точней, некоторые его метрики не учитывают UX в целом. Нормально сделанный PWA при самой первой загрузке и установке, конечно, проиграет по FCP метрике аналогу на SSR, но после размещения всех своих ресурсов локально на браузере клиента, никакой SSR и близко не сравнится с ним по скорости работы и комфорту для пользователя, не говоря уже о прочих возможностях типа оффлайн работы и установке как нативного приложения.

SSR может быть, наверное, полезен для каких-то исключительных случаев, но в целом он выглядит тупиковой ветвью во фронтенд разработке.

+ \ No newline at end of file diff --git a/ru/index.html b/ru/index.html index 215f52f68..df9aa1d9f 100644 --- a/ru/index.html +++ b/ru/index.html @@ -6,13 +6,13 @@ Vue FAQ - + - + - + - + @@ -33,7 +33,7 @@
Skip to content

Vue FAQ

Vue JavaScript framework FAQ

Наиболее часто задаваемые вопросы по Vue.js

Vue FAQ
- + \ No newline at end of file diff --git a/ru/misc/CHANGELOG.html b/ru/misc/CHANGELOG.html index 96042d207..2703e9e4a 100644 --- a/ru/misc/CHANGELOG.html +++ b/ru/misc/CHANGELOG.html @@ -6,14 +6,14 @@ Vue FAQ - + - + - + - + @@ -33,8 +33,8 @@ - - + + \ No newline at end of file diff --git a/ru/misc/cheat-sheets.html b/ru/misc/cheat-sheets.html index 7560163fb..2dbe03c3f 100644 --- a/ru/misc/cheat-sheets.html +++ b/ru/misc/cheat-sheets.html @@ -6,13 +6,13 @@ Шпаргалки (Cheat Sheet) | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/ru/misc/contribute.html b/ru/misc/contribute.html index 2bb402733..30495935d 100644 --- a/ru/misc/contribute.html +++ b/ru/misc/contribute.html @@ -6,13 +6,13 @@ Внесите лепту в развитие данного ресурса | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

Внесите лепту в развитие данного ресурса

Вы можете предложить корректировку любого или добавление нового материала используя форму ниже.

GitHub way внесения изменений (fork -> edit -> create PR) также всячески приветствуется.

- +
Skip to content

Внесите лепту в развитие данного ресурса

Вы можете предложить корректировку любого или добавление нового материала используя форму ниже.

GitHub way внесения изменений (fork -> edit -> create PR) также всячески приветствуется.

+ \ No newline at end of file diff --git a/ru/misc/glossary.html b/ru/misc/glossary.html index 0f687a589..de3a3dcc0 100644 --- a/ru/misc/glossary.html +++ b/ru/misc/glossary.html @@ -6,13 +6,13 @@ Глоссарий и сокращения | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

Глоссарий и сокращения

  • DX (developer experience) - опыт разработчика, удобство его работы над приложением. Сюда входит всё - качество кода, удобство работы с IDE, грамотная архитектура проекта, комментирование, качество документации, использование на проекте проверенных и лучших практик и т.п.
  • UX (user experience) - опыт пользователя. Общее его впечатление от удобства работы с сайтом/приложением.
  • UI (user interface) - дизайн вебсайта/приложения с точки зрения визуальной эстетики и стиля
  • SW (service worker) - сервис воркер (элемент PWA)
  • AT (access token) - токен при JWT аутентификации
  • RT (refresh token) - токен при JWT аутентификации
- +
Skip to content

Глоссарий и сокращения

  • DX (developer experience) - опыт разработчика, удобство его работы над приложением. Сюда входит всё - качество кода, удобство работы с IDE, грамотная архитектура проекта, комментирование, качество документации, использование на проекте проверенных и лучших практик и т.п.
  • UX (user experience) - опыт пользователя. Общее его впечатление от удобства работы с сайтом/приложением.
  • UI (user interface) - дизайн вебсайта/приложения с точки зрения визуальной эстетики и стиля
  • SW (service worker) - сервис воркер (элемент PWA)
  • AT (access token) - токен при JWT аутентификации
  • RT (refresh token) - токен при JWT аутентификации
+ \ No newline at end of file diff --git a/ru/misc/introduction.html b/ru/misc/introduction.html index 01bac698b..5a51c27e3 100644 --- a/ru/misc/introduction.html +++ b/ru/misc/introduction.html @@ -6,13 +6,13 @@ Предисловие | Vue FAQ - + - + - + - + @@ -32,8 +32,8 @@ -
Skip to content

Предисловие

Данный FAQ (Frequently Asked Questions - Часто задаваемые вопросы) создан по наиболее часто затрагиваемым темам в Reddit r/vuejs/ и Телеграм чате @vuejs_ru

Уровень вопросов и ответов охватывает как начинающих так и опытных фронтэнд разработчиков.

В качестве ответов используется как общепризнанная, проверенная и объективная информация, так и субъективное мнение составителя.

Повышение сложности не идет сверху вниз. И в первых вопросах-ответах описываются неочевидные моменты, могущие быть интересными для опытных программистов.

Основные источники информации - официальная документация Vue 3 и Vite, книга Vue.js 3 Design Patterns and Best Practices, r/vuejs/, @vuejs_ru

Актуальность информации - 2022-2023 года.

У нас есть Телеграм канал

В нем публикуются анонсы о новых материалах на данном ресурсе и другая интересная относящаяся к Vue.js информация: https://t.me/vuefaq

- +
Skip to content

Предисловие

Данный FAQ (Frequently Asked Questions - Часто задаваемые вопросы) создан по наиболее часто затрагиваемым темам в Reddit r/vuejs/ и Телеграм чате @vuejs_ru

Уровень вопросов и ответов охватывает как начинающих так и опытных фронтэнд разработчиков.

В качестве ответов используется как общепризнанная, проверенная и объективная информация, так и субъективное мнение составителя.

Повышение сложности не идет сверху вниз. И в первых вопросах-ответах описываются неочевидные моменты, могущие быть интересными для опытных программистов.

Основные источники информации - официальная документация Vue 3 и Vite, книга Vue.js 3 Design Patterns and Best Practices, r/vuejs/, @vuejs_ru

Актуальность информации - 2022-2023 года.

У нас есть Телеграм канал

В нем публикуются анонсы о новых материалах на данном ресурсе и другая интересная относящаяся к Vue.js информация: https://t.me/vuefaq

+ \ No newline at end of file diff --git a/ru/release-timeline/config.html b/ru/release-timeline/config.html index 58e57fa7d..456e2aef7 100644 --- a/ru/release-timeline/config.html +++ b/ru/release-timeline/config.html @@ -6,13 +6,13 @@ Конфигурация | Vue FAQ - + - + - + - + @@ -115,8 +115,8 @@ } </style> -Для перехода на темную тему необходимо установить CSS класс `dark` на одном из родителей. - +Для перехода на темную тему необходимо установить CSS класс `dark` на одном из родителей. + \ No newline at end of file diff --git a/ru/release-timeline/getting-data.html b/ru/release-timeline/getting-data.html index e3797996e..09268656a 100644 --- a/ru/release-timeline/getting-data.html +++ b/ru/release-timeline/getting-data.html @@ -6,13 +6,13 @@ Данные релизов, коммитов и пул риквестов | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Данные релизов, коммитов и пул риквестов

Получение данных

Есть три варианта получения данных с releases, pull requests и commits с GitHub-а

  1. Динамическое. Прямой запрос к GitHub REST API во время открытия страницы.
  2. Запрос к GitHub REST API через прокси
  3. Запрос к GitHub REST API во время билда проекта, оптимизация и сохранение данных локально на сайте.

На данный момент непосредственно реализованы первый и второй вариант, есть возможность указать url для запросов releases, pull requests и commits. По умолчанию используется первый.

Второй вариант нужен для уменьшения размера загружаемого файла., так как 95% данных в ответах GitHub - не используется в программе.

Формат данных при этом должен быть как у GitHub, но может содержать только нужные поля.

Третий вариант также может оптимизировать потоки данных, но делает снэпшот релизов и пул риквестов на определенный момент времени. При выходе нового релиза потребуется пересобрать документацию. В данном случае также нужно указать корректный url. Реализовывать логику третьего варианта (получение, фильтрация, сохранение даннах) необходимо пользователю пакета.

- +
Skip to content

Данные релизов, коммитов и пул риквестов

Получение данных

Есть три варианта получения данных с releases, pull requests и commits с GitHub-а

  1. Динамическое. Прямой запрос к GitHub REST API во время открытия страницы.
  2. Запрос к GitHub REST API через прокси
  3. Запрос к GitHub REST API во время билда проекта, оптимизация и сохранение данных локально на сайте.

На данный момент непосредственно реализованы первый и второй вариант, есть возможность указать url для запросов releases, pull requests и commits. По умолчанию используется первый.

Второй вариант нужен для уменьшения размера загружаемого файла., так как 95% данных в ответах GitHub - не используется в программе.

Формат данных при этом должен быть как у GitHub, но может содержать только нужные поля.

Третий вариант также может оптимизировать потоки данных, но делает снэпшот релизов и пул риквестов на определенный момент времени. При выходе нового релиза потребуется пересобрать документацию. В данном случае также нужно указать корректный url. Реализовывать логику третьего варианта (получение, фильтрация, сохранение даннах) необходимо пользователю пакета.

+ \ No newline at end of file diff --git a/ru/release-timeline/getting-started.html b/ru/release-timeline/getting-started.html index 21f1f5fa1..9c34e8548 100644 --- a/ru/release-timeline/getting-started.html +++ b/ru/release-timeline/getting-started.html @@ -6,13 +6,13 @@ Установка | Vue FAQ - + - + - + - + @@ -34,7 +34,7 @@ -
Skip to content

Установка

Установка пакета

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Использование в коде Vue проекта

Во Vue компоненте:

vue
<script setup>
+    
Skip to content

Установка

Установка пакета

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Использование в коде Vue проекта

Во Vue компоненте:

vue
<script setup>
 import { ReleaseTimeline, DefaultOptions as options } from "release-timeline";
 import "release-timeline/dist/style.css";
 // import "release-timeline/dist/animated-background.css";
@@ -48,8 +48,8 @@
 <script src="https://unpkg.com/release-timeline@0.3.6/dist/index.umd.js"></script>
 <link href="https://unpkg.com/release-timeline@0.3.6/dist/animated-background.css" rel="stylesheet" />
 
-<release-timeline options=""></release-timeline>

Подробнее - о подключении как web component

- +<release-timeline options=""></release-timeline>

Подробнее - о подключении как web component

+ \ No newline at end of file diff --git a/ru/release-timeline/index.html b/ru/release-timeline/index.html index 4479aaa68..ab4d5e2d6 100644 --- a/ru/release-timeline/index.html +++ b/ru/release-timeline/index.html @@ -6,13 +6,13 @@ Release Timeline | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Release Timeline

Визуализация релизов

Визуализация релизов любого GitHub репозитория по временной шкале, с информацией о коммитах и пул риквестах.

Встраивается в VitePress, может быть хорошей заменой changelog-а в технической документации проекта, автоматизируя фиксацию изменений и делая слежение за ними удобным для пользователей.

Также может быть подключено в любой HTML странице как Web component или микрофронтенд.

image

Библиотека написана с использованием Vue 3, не имеет зависимостей, занимает 15Кб в распакованном виде. Адаптирована для работы в VitePress (переключение светлой и темной тем). Может подключаться как web component в не Vue проектах.

Данные по релизам определенного репозитория берутся через GitHub REST API.

Public репозитории доступны сразу, для private репозиториев требуется использовать GitHub API токен.

Репозиторий

Demo

  • Demo (можно задать любой репозиторий через выбор в верхнем левом углу)

Credits

Parallax Star background in CSS

- +
Skip to content

Release Timeline

Визуализация релизов

Визуализация релизов любого GitHub репозитория по временной шкале, с информацией о коммитах и пул риквестах.

Встраивается в VitePress, может быть хорошей заменой changelog-а в технической документации проекта, автоматизируя фиксацию изменений и делая слежение за ними удобным для пользователей.

Также может быть подключено в любой HTML странице как Web component или микрофронтенд.

image

Библиотека написана с использованием Vue 3, не имеет зависимостей, занимает 15Кб в распакованном виде. Адаптирована для работы в VitePress (переключение светлой и темной тем). Может подключаться как web component в не Vue проектах.

Данные по релизам определенного репозитория берутся через GitHub REST API.

Public репозитории доступны сразу, для private репозиториев требуется использовать GitHub API токен.

Репозиторий

Demo

  • Demo (можно задать любой репозиторий через выбор в верхнем левом углу)

Credits

Parallax Star background in CSS

+ \ No newline at end of file diff --git a/ru/release-timeline/microfrontend.html b/ru/release-timeline/microfrontend.html index 1df0d66c0..cd75fb64f 100644 --- a/ru/release-timeline/microfrontend.html +++ b/ru/release-timeline/microfrontend.html @@ -6,13 +6,13 @@ Микрофронтенд | Vue FAQ - + - + - + - + @@ -50,8 +50,8 @@ </head> <body class="dark"> <div id="release-timeline" /> -</body>

Demo

Посмотреть работу release-timeline как веб компонент можно тут - esm-demo Это просто html страница, можно посмотреть её код

- +</body>

Demo

Посмотреть работу release-timeline как веб компонент можно тут - esm-demo Это просто html страница, можно посмотреть её код

+ \ No newline at end of file diff --git a/ru/release-timeline/release-history.html b/ru/release-timeline/release-history.html index 22c803dba..2c873f72f 100644 --- a/ru/release-timeline/release-history.html +++ b/ru/release-timeline/release-history.html @@ -6,14 +6,14 @@ Vue FAQ - + - + - + - + @@ -35,8 +35,8 @@ - - + + \ No newline at end of file diff --git a/ru/release-timeline/vitepress.html b/ru/release-timeline/vitepress.html index a183dd336..2fbea8407 100644 --- a/ru/release-timeline/vitepress.html +++ b/ru/release-timeline/vitepress.html @@ -6,13 +6,13 @@ VitePress | Vue FAQ - + - + - + - + @@ -34,7 +34,7 @@ -
Skip to content

VitePress

release-timeline полностью поддерживает VitePress, включая смену светлой и темной тем и адаптацию к его стилям.

Установка пакета

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Подключение

Подключение в любом markdown файле:

vue
<script setup>
+    
Skip to content

VitePress

release-timeline полностью поддерживает VitePress, включая смену светлой и темной тем и адаптацию к его стилям.

Установка пакета

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Подключение

Подключение в любом markdown файле:

vue
<script setup>
 import { ReleaseTimeline, DefaultOptions as options } from "release-timeline";
 import "release-timeline/dist/style.css";
 import "release-timeline/dist/vitepress.css";
@@ -55,8 +55,8 @@
   --rt-c-brand-2: var(--vp-c-brand-2);
   --rt-c-circle-bg: #888;
   --rt-font-family-base: var(--vp-font-family-base);
-}
- +}
+ \ No newline at end of file diff --git a/ru/release-timeline/vue-3.html b/ru/release-timeline/vue-3.html index c94d93dab..2dd9f8a9f 100644 --- a/ru/release-timeline/vue-3.html +++ b/ru/release-timeline/vue-3.html @@ -6,13 +6,13 @@ Vue 3 проект | Vue FAQ - + - + - + - + @@ -34,7 +34,7 @@ -
Skip to content

Vue 3 проект

Установка пакета

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Использование во Vue компоненте

vue
<script setup>
+    
Skip to content

Vue 3 проект

Установка пакета

bash
pnpm add release-timeline
bash
pnpm add release-timeline
bash
npm install release-timeline

Использование во Vue компоненте

vue
<script setup>
 import { ReleaseTimeline, DefaultOptions as options } from "release-timeline";
 import "release-timeline/dist/style.css";
 // import "release-timeline/dist/animated-background.css";
@@ -44,8 +44,8 @@
 options.github.repo = "release-timeline";
 </script>
 
-<ReleaseTimeline :options="options" />

Подключение animated-background.css опционально. CSS со звездным небом занимает 70Kb, в gzip формате - 6.1Кб.

- +<ReleaseTimeline :options="options" />

Подключение animated-background.css опционально. CSS со звездным небом занимает 70Kb, в gzip формате - 6.1Кб.

+ \ No newline at end of file diff --git a/ru/release-timeline/web-component.html b/ru/release-timeline/web-component.html index 0d8cd5d0a..0adca765d 100644 --- a/ru/release-timeline/web-component.html +++ b/ru/release-timeline/web-component.html @@ -6,13 +6,13 @@ Web component | Vue FAQ - + - + - + - + @@ -85,8 +85,8 @@ <body> <release-timeline options="" /> -</body>

В этом случае аттрибут options должен быть пустым.

Для фона звездного неба необходимо установить --rt-c-bg: transparent и нужный фоновый background-color на body или нужный контейнер. Это нужно только для подключения в режиме web-components.

Demo

Посмотреть работу release-timeline как веб компонента можно тут - wc-demo Это просто html страница, можно посмотреть её код

- +</body>

В этом случае аттрибут options должен быть пустым.

Для фона звездного неба необходимо установить --rt-c-bg: transparent и нужный фоновый background-color на body или нужный контейнер. Это нужно только для подключения в режиме web-components.

Demo

Посмотреть работу release-timeline как веб компонента можно тут - wc-demo Это просто html страница, можно посмотреть её код

+ \ No newline at end of file diff --git a/ru/vue-webapp/contribution.html b/ru/vue-webapp/contribution.html index 6203cccf5..e3d2f81d3 100644 --- a/ru/vue-webapp/contribution.html +++ b/ru/vue-webapp/contribution.html @@ -6,13 +6,13 @@ Участие в проекте | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Участие в проекте

create-vue-webapp и vue-webapp являются open source проектами под лицензией MIT.

Приглашаем к участию всех желающих.

- +
Skip to content

Участие в проекте

create-vue-webapp и vue-webapp являются open source проектами под лицензией MIT.

Приглашаем к участию всех желающих.

+ \ No newline at end of file diff --git a/ru/vue-webapp/getting-started.html b/ru/vue-webapp/getting-started.html index 9cc1b6ff2..fb5004052 100644 --- a/ru/vue-webapp/getting-started.html +++ b/ru/vue-webapp/getting-started.html @@ -6,13 +6,13 @@ Установка | Vue FAQ - + - + - + - + @@ -34,46 +34,46 @@ -
Skip to content

Установка

Установка через create vue-webapp

При данном способе можно выбрать, какие опции будут установлены:

sh
$ pnpm create vue-webapp
-
- Project name: ... my-vue-project
- Add a Splash screen? ... no / yes
- Make it PWA (adds service worker and manifest)? ... no / yes
- Add Open Graph meta tags? ... no / yes
- Add Google Analytics code? ... no / yes
- Add Github Action Workflow for publishing it on GitHub Pages? ... no / yes
- Select application layout » MainLayout
- Select navigation drawer » SimpleDrawer
- Select webapp navbar » MantineSimpleNavbar
- Select webapp header » MantineSimpleHeader
- Select webapp footer » MantineRichFooter
- Add API layer (REST)? ... no / yes
- Add JSON-RPC adapter? ... no / yes
-
-Scaffolding project in /home/ubuntu/my-vue-project...
"Молчаливая" установка

Возможно установка без ручного ввода параметров с указанием конфигурационного файла с опциями:

bash
pnpm create vue-webapp -c config.json
-// or
-pnpm create vue-webapp --config config.json

Формат файла config.json:

json
{
-  "projectName": "my-vue-project",
-  "splashScreen": false,
-  "pwa": true,
-  "openGraph": false,
-  "googleAnalytics": false,
-  "githubActionsGithubPagesWorkflow": true,
-  "layout": "MainLayout",
-  "navigationDrawer": "SimpleDrawer",
-  "navbar": "MantineSimpleNavbar",
-  "header": "MantineSimpleHeader",
-  "footer": "MantineRichFooter",
-  "api": true,
-  "jsonRpc": false,
-  "overwrite": true
-}

Параметр overwrite означает перезаписывание содержимого уже существующей директории. Может принимать значения "yes", "no" и "ignore".

Также, команда

bash
$ pnpm create vue-webapp .

создаст проект в текущей директории.

Данный метод создаст проект только с выбранными компонентами и функционалом.

Инициализация и запуск веб приложения

sh
$ cd my-vue-project
-$ pnpm i
-$ pnpm dev

Результат в браузере:

image

Установка из репозитория

При данном способе будет установлено всё, однако непосредственно в проекте будет подключена не вся функциональность. Удобно для ознакомления и тестирования всех доступных компонент и функционала.

sh
$ git clone https://github.com/vuesence/vue-webapp.git
-$ cd vue-webapp
-$ pnpm i
-$ pnpm dev
- +
Skip to content

Установка

Установка через create vue-webapp

При данном способе можно выбрать, какие опции будут установлены:

sh
$ pnpm create vue-webapp
+
+ Project name: ... my-vue-project
+ Add a Splash screen? ... no / yes
+ Make it PWA (adds service worker and manifest)? ... no / yes
+ Add Open Graph meta tags? ... no / yes
+ Add Google Analytics code? ... no / yes
+ Add Github Action Workflow for publishing it on GitHub Pages? ... no / yes
+ Select application layout » MainLayout
+ Select navigation drawer » SimpleDrawer
+ Select webapp navbar » MantineSimpleNavbar
+ Select webapp header » MantineSimpleHeader
+ Select webapp footer » MantineRichFooter
+ Add API layer (REST)? ... no / yes
+ Add JSON-RPC adapter? ... no / yes
+
+Scaffolding project in /home/ubuntu/my-vue-project...
"Молчаливая" установка

Возможно установка без ручного ввода параметров с указанием конфигурационного файла с опциями:

bash
pnpm create vue-webapp -c config.json
+// or
+pnpm create vue-webapp --config config.json

Формат файла config.json:

json
{
+  "projectName": "my-vue-project",
+  "splashScreen": false,
+  "pwa": true,
+  "openGraph": false,
+  "googleAnalytics": false,
+  "githubActionsGithubPagesWorkflow": true,
+  "layout": "MainLayout",
+  "navigationDrawer": "SimpleDrawer",
+  "navbar": "MantineSimpleNavbar",
+  "header": "MantineSimpleHeader",
+  "footer": "MantineRichFooter",
+  "api": true,
+  "jsonRpc": false,
+  "overwrite": true
+}

Параметр overwrite означает перезаписывание содержимого уже существующей директории. Может принимать значения "yes", "no" и "ignore".

Также, команда

bash
$ pnpm create vue-webapp .

создаст проект в текущей директории.

Данный метод создаст проект только с выбранными компонентами и функционалом.

Инициализация и запуск веб приложения

sh
$ cd my-vue-project
+$ pnpm i
+$ pnpm dev

Результат в браузере:

image

Установка из репозитория

При данном способе будет установлено всё, однако непосредственно в проекте будет подключена не вся функциональность. Удобно для ознакомления и тестирования всех доступных компонент и функционала.

sh
$ git clone https://github.com/vuesence/vue-webapp.git
+$ cd vue-webapp
+$ pnpm i
+$ pnpm dev
+ \ No newline at end of file diff --git a/ru/vue-webapp/guidelines.html b/ru/vue-webapp/guidelines.html index 3b1a3158f..1ac621b41 100644 --- a/ru/vue-webapp/guidelines.html +++ b/ru/vue-webapp/guidelines.html @@ -6,13 +6,13 @@ Принципы | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Принципы

  • Лёгкое эффективное вебприложение с высоким современным UI/UX
  • Vue 3, Composition API, script setup синтаксис
  • Не использовать сторонние библиотеки без необходимости. Единственная обязательная зависимость - vue-router
  • Использование чистого и эффективного HTML5 и CSS3 для верстки
  • Подключение требуемого функционала только по необходимости
  • Высокая кастомизация

  • Подключение определенной функциональности, например i18n, означает не просто добавление этой библиотеки в package.json, а полноценную минимальную работающую интеграцию - создание соответствующей composable функции, нескольких локалей, и применение t() в шаблоне для иллюстрации с необходимыми комментариями в коде для облегчения последующего использования и кастомизации.

  • Подключение определенной функциональности, использующей стороннюю библиотеку (например, тостер или модальное окно), делается через обёртку, чтобы потом разработчику при желании было легко поменять конкретный пакет, реализующий данный функционал.

  • Для веб приложения используется TypeScript, однако продолжать писать приложение можно на чистом JavaScript.

  • В качестве сборщика используется Vite.

  • В качестве CSS препроцессора используется SCSS.

  • Для линтинга и форматирования в ESlint используется eslint-config Antony Fu.

  • На "выходе" получается готовое Vue 3 приложение без зависимостей от каких-либо фреймворков/библиотек/пакетов, если только пользователь явно не включил их в каркас.

- +
Skip to content

Принципы

  • Лёгкое эффективное вебприложение с высоким современным UI/UX
  • Vue 3, Composition API, script setup синтаксис
  • Не использовать сторонние библиотеки без необходимости. Единственная обязательная зависимость - vue-router
  • Использование чистого и эффективного HTML5 и CSS3 для верстки
  • Подключение требуемого функционала только по необходимости
  • Высокая кастомизация

  • Подключение определенной функциональности, например i18n, означает не просто добавление этой библиотеки в package.json, а полноценную минимальную работающую интеграцию - создание соответствующей composable функции, нескольких локалей, и применение t() в шаблоне для иллюстрации с необходимыми комментариями в коде для облегчения последующего использования и кастомизации.

  • Подключение определенной функциональности, использующей стороннюю библиотеку (например, тостер или модальное окно), делается через обёртку, чтобы потом разработчику при желании было легко поменять конкретный пакет, реализующий данный функционал.

  • Для веб приложения используется TypeScript, однако продолжать писать приложение можно на чистом JavaScript.

  • В качестве сборщика используется Vite.

  • В качестве CSS препроцессора используется SCSS.

  • Для линтинга и форматирования в ESlint используется eslint-config Antony Fu.

  • На "выходе" получается готовое Vue 3 приложение без зависимостей от каких-либо фреймворков/библиотек/пакетов, если только пользователь явно не включил их в каркас.

+ \ No newline at end of file diff --git a/ru/vue-webapp/index.html b/ru/vue-webapp/index.html index 9e954de75..22437b385 100644 --- a/ru/vue-webapp/index.html +++ b/ru/vue-webapp/index.html @@ -6,13 +6,13 @@ Vue 3 webapp билдер | Vue FAQ - + - + - + - + @@ -34,15 +34,15 @@ -
Skip to content

Vue 3 webapp билдер

Краткое описание

Vue 3 вебсайт билдер (GitHub) позволяет создать каркас будущего веб приложения, с возможностью выбора бизнес-шаблона (портфолио, блог, магазин и .т.д.), макета сайта, дизайна и элементов функционала (API модуль, i18n, PWA, splash screen, auth модуль, темы и т.д.), для дальнейшей кастомизации и наполнения контентом.

sh
$ pnpm create vue-webapp
-
- Project name: ... my-vue-project
- Add a Splash screen? ... no / yes
- Make it PWA (adds service worker and manifest)? ... no / yes
- Add Open Graph meta tags? ... no / yes
- Add Google Analytics code? ... no / yes
-...

Обоснование

Существует довольно много (в основном специфичных и быстро устаревающих) бойлерплейтов для создания Vue приложения. Обычно под этим подразумевается создание пустого проекта с определенными библиотеками. Другими словами, это просто настройка окружения для начала разработки без, непосредственно, кода.

В то же время, у многих других фронтенд и бэкенд фреймворков есть стартер-киты, позволяющие быстро создать готовый блог, онлайн магазин, сайт-визитку, портфолио, документацию и т.п., что значительно помогает как и в изучении самого фреймворка, соответствующих технологий и лучших практик, так и для решения стоящих перед бизнесом задач.

В результате может возникнуть впечатление, что Vue - довольно низкоуровневый фреймворк, и чтобы создавать вебприложения быстро, эффективно и удобно, необходимо взять какую-либо надстройку или иное решение - Nuxt, Vue Storefront, Astro, VitePress - которые прямо позиционируют себя как средство для решения определенных (или широкого круга) бизнес задач.

Появилась идея для создания инструмента, аналогичного create-vue, создающего каркас готового к работе веб приложения. С одной стороны, вполне работоспособного, адаптивного вебсайта с необходимым функционалом, чтобы начинающий разработчик мог ознакомиться с проверенным подходом в решении встающих при этом задач. С другой, достаточно минималистичным, не навязывающим опытному разработчику нежелаемые им зависимости, и создающим скелет из устоявшихся лучших практик для дальнейшего развития приложения.

Понятно, что определение той или иной "лучшей практики" (fetch или axios?) может быть довольно спорным моментом и зависит от контекста, но тем не менее.

image

- +
Skip to content

Vue 3 webapp билдер

Краткое описание

Vue 3 вебсайт билдер (GitHub) позволяет создать каркас будущего веб приложения, с возможностью выбора бизнес-шаблона (портфолио, блог, магазин и .т.д.), макета сайта, дизайна и элементов функционала (API модуль, i18n, PWA, splash screen, auth модуль, темы и т.д.), для дальнейшей кастомизации и наполнения контентом.

sh
$ pnpm create vue-webapp
+
+ Project name: ... my-vue-project
+ Add a Splash screen? ... no / yes
+ Make it PWA (adds service worker and manifest)? ... no / yes
+ Add Open Graph meta tags? ... no / yes
+ Add Google Analytics code? ... no / yes
+...

Обоснование

Существует довольно много (в основном специфичных и быстро устаревающих) бойлерплейтов для создания Vue приложения. Обычно под этим подразумевается создание пустого проекта с определенными библиотеками. Другими словами, это просто настройка окружения для начала разработки без, непосредственно, кода.

В то же время, у многих других фронтенд и бэкенд фреймворков есть стартер-киты, позволяющие быстро создать готовый блог, онлайн магазин, сайт-визитку, портфолио, документацию и т.п., что значительно помогает как и в изучении самого фреймворка, соответствующих технологий и лучших практик, так и для решения стоящих перед бизнесом задач.

В результате может возникнуть впечатление, что Vue - довольно низкоуровневый фреймворк, и чтобы создавать вебприложения быстро, эффективно и удобно, необходимо взять какую-либо надстройку или иное решение - Nuxt, Vue Storefront, Astro, VitePress - которые прямо позиционируют себя как средство для решения определенных (или широкого круга) бизнес задач.

Появилась идея для создания инструмента, аналогичного create-vue, создающего каркас готового к работе веб приложения. С одной стороны, вполне работоспособного, адаптивного вебсайта с необходимым функционалом, чтобы начинающий разработчик мог ознакомиться с проверенным подходом в решении встающих при этом задач. С другой, достаточно минималистичным, не навязывающим опытному разработчику нежелаемые им зависимости, и создающим скелет из устоявшихся лучших практик для дальнейшего развития приложения.

Понятно, что определение той или иной "лучшей практики" (fetch или axios?) может быть довольно спорным моментом и зависит от контекста, но тем не менее.

image

+ \ No newline at end of file diff --git a/ru/vue-webapp/objectives.html b/ru/vue-webapp/objectives.html index 9a61965c0..f2506aaab 100644 --- a/ru/vue-webapp/objectives.html +++ b/ru/vue-webapp/objectives.html @@ -6,13 +6,13 @@ Цели | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Цели

  1. Создание конструктора каркаса простого сразу работающего SPA приложения под конкретную задачу за пару минут, с возможностью его дальнейшей стилизации и наполнения контентом.
  2. Тонкая кастомизация его с помощью небольших функциональных блоков кода.
  3. Сбор и обобщение лучших техник и практик при создании современного реактивного фронтенда.
  4. Дать возможность начинающим разработчикам на готовых примерах ознакомиться с экосистемой Vue.js, изучить лучшие практики фронтенда и Vue 3 от построения архитектуры приложения до наименования CSS классов.
  5. Дать возможность опытным разработчикам быстро и эффективно создавать каркас готового веб приложения и использовать переиспользуемые блоки кода (boilerplate), особенно такие, которые не могут быть распространяемы как NPM пакеты.

Данное приложение должно выполнять роль конструктора каркаса вебсайта, с возможностью выбора при создании:

  • Глобального бизнес-шаблона сайта (портфолио, блог, онлайн-магазин и.т.д)
  • Варианта общего лэйаута вебприложения
  • Вариантов конкретных компонент (header, footer, navigation drawer и т.д.)
  • Варианта общего стиля/дизайна
  • Отдельного функционала, инжектируемого как функциональные фрагменты (API модуль, i18n, PWA, splash screen, Auth модуль, themes и т.д. )
  • Вариантов GitHub Actions с возможностью билда и деплоя на популярные хостинги
  • Возможности подключения/интеграции при желании распространенных библиотек (в том числе UI)
  • Возможности интеграции c определенными headless CRM и API сервисами

Отдельно планируется создание веб-витрины, на которой пользователь, динамично меняя параметры, сможет посмотреть и протестировать доступные макеты сайта, темы/стилизации, компоненты (header, footer и т.д.) и функционал развертываемого приложения, а также их комбинацию друг с другом.

- +
Skip to content

Цели

  1. Создание конструктора каркаса простого сразу работающего SPA приложения под конкретную задачу за пару минут, с возможностью его дальнейшей стилизации и наполнения контентом.
  2. Тонкая кастомизация его с помощью небольших функциональных блоков кода.
  3. Сбор и обобщение лучших техник и практик при создании современного реактивного фронтенда.
  4. Дать возможность начинающим разработчикам на готовых примерах ознакомиться с экосистемой Vue.js, изучить лучшие практики фронтенда и Vue 3 от построения архитектуры приложения до наименования CSS классов.
  5. Дать возможность опытным разработчикам быстро и эффективно создавать каркас готового веб приложения и использовать переиспользуемые блоки кода (boilerplate), особенно такие, которые не могут быть распространяемы как NPM пакеты.

Данное приложение должно выполнять роль конструктора каркаса вебсайта, с возможностью выбора при создании:

  • Глобального бизнес-шаблона сайта (портфолио, блог, онлайн-магазин и.т.д)
  • Варианта общего лэйаута вебприложения
  • Вариантов конкретных компонент (header, footer, navigation drawer и т.д.)
  • Варианта общего стиля/дизайна
  • Отдельного функционала, инжектируемого как функциональные фрагменты (API модуль, i18n, PWA, splash screen, Auth модуль, themes и т.д. )
  • Вариантов GitHub Actions с возможностью билда и деплоя на популярные хостинги
  • Возможности подключения/интеграции при желании распространенных библиотек (в том числе UI)
  • Возможности интеграции c определенными headless CRM и API сервисами

Отдельно планируется создание веб-витрины, на которой пользователь, динамично меняя параметры, сможет посмотреть и протестировать доступные макеты сайта, темы/стилизации, компоненты (header, footer и т.д.) и функционал развертываемого приложения, а также их комбинацию друг с другом.

+ \ No newline at end of file diff --git a/ru/vue-webapp/options/adaptability.html b/ru/vue-webapp/options/adaptability.html index abb25c239..535882ac2 100644 --- a/ru/vue-webapp/options/adaptability.html +++ b/ru/vue-webapp/options/adaptability.html @@ -6,13 +6,13 @@ Адаптивность | Vue FAQ - + - + - + - + @@ -57,8 +57,8 @@ <div class="box"></div> <div class="box"></div> <div class="box"></div> -</div> - +</div> + \ No newline at end of file diff --git a/ru/vue-webapp/options/api.html b/ru/vue-webapp/options/api.html index 0ee03fcb4..88a54f6f6 100644 --- a/ru/vue-webapp/options/api.html +++ b/ru/vue-webapp/options/api.html @@ -6,13 +6,13 @@ API модуль | Vue FAQ - + - + - + - + @@ -73,8 +73,8 @@ }; export { api }; -export default api;

Совет

JSON-RPC протокол очень удобен и является де-факто стандартом для web 3.0. Рекомендуется для использования вместо REST

- +export default api;

Совет

JSON-RPC протокол очень удобен и является де-факто стандартом для web 3.0. Рекомендуется для использования вместо REST

+ \ No newline at end of file diff --git a/ru/vue-webapp/options/baseIcon.html b/ru/vue-webapp/options/baseIcon.html index aacd39650..e436738ae 100644 --- a/ru/vue-webapp/options/baseIcon.html +++ b/ru/vue-webapp/options/baseIcon.html @@ -6,13 +6,13 @@ BaseIcon | Vue FAQ - + - + - + - + @@ -45,8 +45,8 @@ <header class="header"> <BaseIcon name="hamburger" class="drawer-toggle" @click="isDrawerOpen = !isDrawerOpen" /> </header> -</template>

utils.ts при инициализации с помощью import.meta.glob считывает из директории @/assets/images/ все файлы с расширениями .svg и .png и использует их имена как идентификаторы иконок для BaseIcon.

- +</template>

utils.ts при инициализации с помощью import.meta.glob считывает из директории @/assets/images/ все файлы с расширениями .svg и .png и использует их имена как идентификаторы иконок для BaseIcon.

+ \ No newline at end of file diff --git a/ru/vue-webapp/options/description.html b/ru/vue-webapp/options/description.html index f887892c6..fe1138ca5 100644 --- a/ru/vue-webapp/options/description.html +++ b/ru/vue-webapp/options/description.html @@ -6,13 +6,13 @@ Детали реализации | Vue FAQ - + - + - + - + @@ -37,8 +37,8 @@
Skip to content

Детали реализации

Инъекции кода в index.html

Чтобы не раздувать index.html инъекции фрагментов кода в него (Open graph, Google analytics, Splash screen, Service worker) делаются через vite-plugin-html-injection Vite плагин.

Сами фрагменты кода расположены в ./src/utils/injections/ директории. Там же находится конфигурационный файл плагина injection-config.ts.

CSS tricks

В приложении на больших разрешениях применен хак для недопущения прыгания экрана при появлении/исчезновении главного скролбара

css
html {
   overflow-x: hidden;
   margin-right: calc(-1 * (100vw - 100%));
-}
- +} + \ No newline at end of file diff --git a/ru/vue-webapp/options/drawer.html b/ru/vue-webapp/options/drawer.html index d8c30d454..23a913498 100644 --- a/ru/vue-webapp/options/drawer.html +++ b/ru/vue-webapp/options/drawer.html @@ -6,13 +6,13 @@ Navigation drawers | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Navigation drawers

На данный момент можно выбрать из двух видов навигационных шторок.

SimpleDrawer

image

Всегда открыт для разрешений экрана notebook и desktop, а для мобильных устройств и планшетов открывается по клику/нажатию на иконку "гамбургера".

TouchSlideoutDrawer

image

Аналогичен SimpleDrawer, но управляется с помощью прикосновений на сенсорных экранах. Добавляет приятный UX.

Функциональность реализована с помощью useTouchSwipe composable функции и TouchSlideoutDrawer компонента.

- +
Skip to content

Navigation drawers

На данный момент можно выбрать из двух видов навигационных шторок.

SimpleDrawer

image

Всегда открыт для разрешений экрана notebook и desktop, а для мобильных устройств и планшетов открывается по клику/нажатию на иконку "гамбургера".

TouchSlideoutDrawer

image

Аналогичен SimpleDrawer, но управляется с помощью прикосновений на сенсорных экранах. Добавляет приятный UX.

Функциональность реализована с помощью useTouchSwipe composable функции и TouchSlideoutDrawer компонента.

+ \ No newline at end of file diff --git a/ru/vue-webapp/options/footer.html b/ru/vue-webapp/options/footer.html index 5842b7e58..937ab8ec3 100644 --- a/ru/vue-webapp/options/footer.html +++ b/ru/vue-webapp/options/footer.html @@ -6,13 +6,13 @@ Footers | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/ru/vue-webapp/options/ga-gp.html b/ru/vue-webapp/options/ga-gp.html index f0e104e60..37c073d10 100644 --- a/ru/vue-webapp/options/ga-gp.html +++ b/ru/vue-webapp/options/ga-gp.html @@ -6,13 +6,13 @@ Github Actions сценарий для развертывания на Github Pages | Vue FAQ - + - + - + - + @@ -36,8 +36,8 @@
Skip to content

Github Actions сценарий для развертывания на Github Pages

Deployment

Использует JamesIves/github-pages-deploy-action Github Action для размещения сайта на ветке gh-pages того же репозитория, что автоматически делает сайт доступный по адресу https://youGitHubUsername.github.io/my-vue-webapp (если ваш проект и репозиторий называется my-vue-webapp).

  • Создайте в репозитории ветку с названием gh-pages
  • Перейдите в раздел "Settings" вашего репозитория
  • В разделе "Code and automation" на боковой панели нажмите Pages.
  • В разделе "Build and deployment" в пункте "Source" выберите "Deploy from a branch".
  • В разделе "Build and deployment" под заголовком "Branch" воспользуйтесь раскрывающимся меню ветки и выберите нужную ветку - gh-pages.

Более подробно:

Настройка base в Vite конфиге

Если у вас не кастомный домен, то в vite.config.ts необходимо прописать название вашего репозитория в качестве base, чтобы сайт был доступен по вышеуказанной ссылке:

js
export default defineConfig({
   base: "/my-vue-webapp/",
-});

Если у вас кастомный домен (типа yourname.com), то этот параметр не нужен.

- +});

Если у вас кастомный домен (типа yourname.com), то этот параметр не нужен.

+ \ No newline at end of file diff --git a/ru/vue-webapp/options/google-analytics.html b/ru/vue-webapp/options/google-analytics.html index a7363e361..91603e382 100644 --- a/ru/vue-webapp/options/google-analytics.html +++ b/ru/vue-webapp/options/google-analytics.html @@ -6,13 +6,13 @@ Google analytics | Vue FAQ - + - + - + - + @@ -41,8 +41,8 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-JL65GWRNQQ'); -</script>

Необходимо заменить значение id на ваше.

- +</script>

Необходимо заменить значение id на ваше.

+ \ No newline at end of file diff --git a/ru/vue-webapp/options/header.html b/ru/vue-webapp/options/header.html index 5428bebce..c2db6563e 100644 --- a/ru/vue-webapp/options/header.html +++ b/ru/vue-webapp/options/header.html @@ -6,13 +6,13 @@ Headers | Vue FAQ - + - + - + - + @@ -34,16 +34,16 @@ -
Skip to content

Headers

Все хедеры адаптивны.

SimpleHeader

image

Простой sticky header

MantineSimpleHeader

image

Простой sticky header в стиле Mantine UI

MantineLayeredHeader

image

sticky header с уровнями в стиле Mantine UI

SlidingHeader

image

Может содержать два разных header-а, второй появляется после того, как пользователь проскроллит страницу вниз

template
<AppHeader :threshold-hide="200" :threshold-open="400">
-    <template #first-header>
-        <AppHeaderFirst />
-    </template>
-
-    <template #second-header>
-        <AppHeaderSecond />
-    </template>
-</AppHeader>
- +
Skip to content

Headers

Все хедеры адаптивны.

SimpleHeader

image

Простой sticky header

MantineSimpleHeader

image

Простой sticky header в стиле Mantine UI

MantineLayeredHeader

image

sticky header с уровнями в стиле Mantine UI

SlidingHeader

image

Может содержать два разных header-а, второй появляется после того, как пользователь проскроллит страницу вниз

template
<AppHeader :threshold-hide="200" :threshold-open="400">
+    <template #first-header>
+        <AppHeaderFirst />
+    </template>
+
+    <template #second-header>
+        <AppHeaderSecond />
+    </template>
+</AppHeader>
+ \ No newline at end of file diff --git a/ru/vue-webapp/options/i18n.html b/ru/vue-webapp/options/i18n.html index 02cf62251..b369c2ca7 100644 --- a/ru/vue-webapp/options/i18n.html +++ b/ru/vue-webapp/options/i18n.html @@ -6,13 +6,13 @@ i18n | Vue FAQ - + - + - + - + @@ -57,8 +57,8 @@ {{ t('msg') }} ({{ locale.code }}) </button> </div> -</template>

i18next расширения

У i18next есть расширение для Vue DevTools (довольно бесполезное), и есть расширение I18next Ally для VS Code (весьма полезное). Так вот i18next Ally работает с новой реализацией если в package.json будет прописан пакет vue-i18n в dependencies (в коде подключать его не надо). Рекомендую. Оба расширения, впрочем, неплохо едят ресурсы, так что пользоваться ими лучше по надобности.

В итоге

JavaScript бандл после билда меньше на 50 Кб по сравнению с i18next. Нужный функционал есть.

- +</template>

i18next расширения

У i18next есть расширение для Vue DevTools (довольно бесполезное), и есть расширение I18next Ally для VS Code (весьма полезное). Так вот i18next Ally работает с новой реализацией если в package.json будет прописан пакет vue-i18n в dependencies (в коде подключать его не надо). Рекомендую. Оба расширения, впрочем, неплохо едят ресурсы, так что пользоваться ими лучше по надобности.

В итоге

JavaScript бандл после билда меньше на 50 Кб по сравнению с i18next. Нужный функционал есть.

+ \ No newline at end of file diff --git a/ru/vue-webapp/options/index.html b/ru/vue-webapp/options/index.html index 8412bd750..eb34022e1 100644 --- a/ru/vue-webapp/options/index.html +++ b/ru/vue-webapp/options/index.html @@ -6,13 +6,13 @@ Опции при создании приложения | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Опции при создании приложения

Доступные опции

На данный момент доступно конфигурирование следующих опций:

  • Layout - макет приложения
  • Header - верхняя часть в макете приложения
  • Footer - нижняя часть в макете приложения
  • Drawer - навигационная шторка
  • Navbar - навигационное меню (внутри шторки)
  • Github Pages deploy Workflow - GitHub Actions сценарий для билда и деплоя приложения на GitHub Pages
  • PWA - добавление Service worker и Манифеста к приложению
  • API модуль - абстрактный слой для связи с бэкенд API
  • JSON-RPC - адаптер для API модуля
  • Splash screen - экран-заставка во время старта приложения для улучшения UX
  • Google analytics - код для подключения статистики
  • Open graph - мета тэги для построения сниппетов соцсетями

Доступно по умолчанию

  • Dark theme - темная тема. Все подключаемые компоненты поддерживают переключение тем
  • BaseIcon - компонент иконки с возможностью динамичного указания имени
  • BaseToggle - компонент переключателя

В разработке

  • Глобальный прелоадер
  • i18n - интернационализация приложения с помощью различных вариантов i18n библиотек.

В планах

  • Онлайн витрина для динамичного тестирования различных вариантов частей приложения и функционала
  • Расширение числа вариантов layout, header, footer и других компонент
  • Auth - каркас модуля для аутентификации на JWT токенах, включая различные варианты форм регистрации и логина
  • Интеграция Auth с популярными сервис провайдерами (Firebase и др.)
  • GitHub Actions для деплоя приложения на различные сервисы (Vercel, Heroku, Firesbase) и другие полезные CI/CD сценарии.
  • Проверка при старте на свою новую версию и перезагрузка для избежания проблем с кэшем браузера
  • Themes - темы приложения (включают в себя как разные цветовые палитры, так и возможность менять другие CSS параметры для глубокой кастомизации шаблона и компонентов)
- +
Skip to content

Опции при создании приложения

Доступные опции

На данный момент доступно конфигурирование следующих опций:

  • Layout - макет приложения
  • Header - верхняя часть в макете приложения
  • Footer - нижняя часть в макете приложения
  • Drawer - навигационная шторка
  • Navbar - навигационное меню (внутри шторки)
  • Github Pages deploy Workflow - GitHub Actions сценарий для билда и деплоя приложения на GitHub Pages
  • PWA - добавление Service worker и Манифеста к приложению
  • API модуль - абстрактный слой для связи с бэкенд API
  • JSON-RPC - адаптер для API модуля
  • Splash screen - экран-заставка во время старта приложения для улучшения UX
  • Google analytics - код для подключения статистики
  • Open graph - мета тэги для построения сниппетов соцсетями

Доступно по умолчанию

  • Dark theme - темная тема. Все подключаемые компоненты поддерживают переключение тем
  • BaseIcon - компонент иконки с возможностью динамичного указания имени
  • BaseToggle - компонент переключателя

В разработке

  • Глобальный прелоадер
  • i18n - интернационализация приложения с помощью различных вариантов i18n библиотек.

В планах

  • Онлайн витрина для динамичного тестирования различных вариантов частей приложения и функционала
  • Расширение числа вариантов layout, header, footer и других компонент
  • Auth - каркас модуля для аутентификации на JWT токенах, включая различные варианты форм регистрации и логина
  • Интеграция Auth с популярными сервис провайдерами (Firebase и др.)
  • GitHub Actions для деплоя приложения на различные сервисы (Vercel, Heroku, Firesbase) и другие полезные CI/CD сценарии.
  • Проверка при старте на свою новую версию и перезагрузка для избежания проблем с кэшем браузера
  • Themes - темы приложения (включают в себя как разные цветовые палитры, так и возможность менять другие CSS параметры для глубокой кастомизации шаблона и компонентов)
+ \ No newline at end of file diff --git a/ru/vue-webapp/options/layout-main.html b/ru/vue-webapp/options/layout-main.html index fa663d1b4..2f15cea51 100644 --- a/ru/vue-webapp/options/layout-main.html +++ b/ru/vue-webapp/options/layout-main.html @@ -6,13 +6,13 @@ MainLayout | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

MainLayout

Стандартный макет с хедером, футером и сайдбаром в notebook и desktop режимах. В tablet и mobile режимах сайдбар выезжает слева при нажатии на "гамбургер" иконку.

image

AppSidebar виден в режимах notebook и desktop, и скрывается в tablet и mobile

Routing

Смена содержимого центральной панели обеспечивается через маршруты vue-router

- +
Skip to content

MainLayout

Стандартный макет с хедером, футером и сайдбаром в notebook и desktop режимах. В tablet и mobile режимах сайдбар выезжает слева при нажатии на "гамбургер" иконку.

image

AppSidebar виден в режимах notebook и desktop, и скрывается в tablet и mobile

Routing

Смена содержимого центральной панели обеспечивается через маршруты vue-router

+ \ No newline at end of file diff --git a/ru/vue-webapp/options/layout-one-column.html b/ru/vue-webapp/options/layout-one-column.html index 94f86f0bf..04b39d32e 100644 --- a/ru/vue-webapp/options/layout-one-column.html +++ b/ru/vue-webapp/options/layout-one-column.html @@ -6,13 +6,13 @@ OneColumnLayout | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

OneColumnLayout

Аналогичен MainLayout, но без сайдбара в notebook и desktop режимах. Может применяться, например, если вся навигация помещается в хедер. В tablet и mobile режимах сайдбар также выезжает при нажатии на "гамбургер" иконку.

image

В обоих случаях максимальная ширина лэйаута устанавливается CSS переменной --vwa-layout-max-width.

- +
Skip to content

OneColumnLayout

Аналогичен MainLayout, но без сайдбара в notebook и desktop режимах. Может применяться, например, если вся навигация помещается в хедер. В tablet и mobile режимах сайдбар также выезжает при нажатии на "гамбургер" иконку.

image

В обоих случаях максимальная ширина лэйаута устанавливается CSS переменной --vwa-layout-max-width.

+ \ No newline at end of file diff --git a/ru/vue-webapp/options/navbar.html b/ru/vue-webapp/options/navbar.html index 1dd6496d7..68993f9d1 100644 --- a/ru/vue-webapp/options/navbar.html +++ b/ru/vue-webapp/options/navbar.html @@ -6,13 +6,13 @@ Navbar | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Navbar

Navbar находится внутри NavigationDrawer

На данный момент можно выбрать из двух видов:

SimpleNavbar

image

MantineSimpleNavbar

image

- +
Skip to content

Navbar

Navbar находится внутри NavigationDrawer

На данный момент можно выбрать из двух видов:

SimpleNavbar

image

MantineSimpleNavbar

image

+ \ No newline at end of file diff --git a/ru/vue-webapp/options/open-graph.html b/ru/vue-webapp/options/open-graph.html index fb0ec1840..645964599 100644 --- a/ru/vue-webapp/options/open-graph.html +++ b/ru/vue-webapp/options/open-graph.html @@ -6,13 +6,13 @@ Google analytics | Vue FAQ - + - + - + - + @@ -47,8 +47,8 @@ <!-- <meta property="twitter:url" content="" /> --> <meta name="twitter:title" content="-twitter:title-" /> <meta name="twitter:description" content="" /> -<meta name="twitter:image" content="images" />

Необходимо проставить нужные значения.

- +<meta name="twitter:image" content="images" />

Необходимо проставить нужные значения.

+ \ No newline at end of file diff --git a/ru/vue-webapp/options/pwa.html b/ru/vue-webapp/options/pwa.html index 404cadba0..d67ef4cf2 100644 --- a/ru/vue-webapp/options/pwa.html +++ b/ru/vue-webapp/options/pwa.html @@ -6,13 +6,13 @@ PWA | Vue FAQ - + - + - + - + @@ -48,8 +48,8 @@ "development", "education" ], - "icons": [...]

Service worker

Позволяет сделать управляемым кэширование на стороне клиента и сильно улучшить пользовательский опыт.

Для данной реализации service-worker.js не используются сторонние библиотеки типа Workbox.

Для кэширования используется стратегия Cache first. Создаётся три отдельных кэша для разных типов ресурсов: assets (js и css), images и fonts. Для каждого поддерживается версионность.

При выпуске новой версии приложения можно изменять значение VERSION в service-worker.js. Это очистит весь кэш в браузере клиента.

- + "icons": [...]

Service worker

Позволяет сделать управляемым кэширование на стороне клиента и сильно улучшить пользовательский опыт.

Для данной реализации service-worker.js не используются сторонние библиотеки типа Workbox.

Для кэширования используется стратегия Cache first. Создаётся три отдельных кэша для разных типов ресурсов: assets (js и css), images и fonts. Для каждого поддерживается версионность.

При выпуске новой версии приложения можно изменять значение VERSION в service-worker.js. Это очистит весь кэш в браузере клиента.

+ \ No newline at end of file diff --git a/ru/vue-webapp/options/splash-screen.html b/ru/vue-webapp/options/splash-screen.html index 0678cbea2..d54a77272 100644 --- a/ru/vue-webapp/options/splash-screen.html +++ b/ru/vue-webapp/options/splash-screen.html @@ -6,13 +6,13 @@ Splash screen | Vue FAQ - + - + - + - + @@ -34,8 +34,8 @@ -
Skip to content

Splash screen

Заставка при старте приложения вместо пустого экрана может повысить восприятие вашего приложения пользователями (UX) и укрепить узнаваемость вашего бренда.

image

Код заставки находится полностью в index.html. Контролируется CSS классом splash на body.

Убирается заставка в App.vue / onMounted() после загрузки всей необходимых для начала работы приложения ресурсов.

- +
Skip to content

Splash screen

Заставка при старте приложения вместо пустого экрана может повысить восприятие вашего приложения пользователями (UX) и укрепить узнаваемость вашего бренда.

image

Код заставки находится полностью в index.html. Контролируется CSS классом splash на body.

Убирается заставка в App.vue / onMounted() после загрузки всей необходимых для начала работы приложения ресурсов.

+ \ No newline at end of file diff --git a/ru/vue-webapp/options/themes.html b/ru/vue-webapp/options/themes.html index 1cd276852..fd1d40824 100644 --- a/ru/vue-webapp/options/themes.html +++ b/ru/vue-webapp/options/themes.html @@ -6,13 +6,13 @@ Темы | Vue FAQ - + - + - + - + @@ -52,8 +52,8 @@ --vwa-c-text-3: rgba(235, 235, 245, 0.38); } -/* ... etc */ - +/* ... etc */ + \ No newline at end of file