From 2cffe7671535e82b1aece95e7dc70c1798324c28 Mon Sep 17 00:00:00 2001 From: illright Date: Sat, 28 Sep 2024 16:23:12 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20feature-?= =?UTF-8?q?sliced/documentation@b30c0a8b62286e8da06f9a4691dfc39a39e0866a?= =?UTF-8?q?=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 404.html | 6 +++--- ...0499e362.d58aa798.js => 0499e362.767323d1.js} | 2 +- ...066221cc.a34780d8.js => 066221cc.f32d55bc.js} | 2 +- ...0a4ee302.5961eb37.js => 0a4ee302.aaae57ae.js} | 2 +- assets/js/1df93b7f.41498114.js | 1 - assets/js/1df93b7f.918274c0.js | 1 + ...287b7fe4.85cf9c86.js => 287b7fe4.04da7c5b.js} | 2 +- ...2f764a0f.3beadf52.js => 2f764a0f.3ff7d6f5.js} | 2 +- ...3121f8ae.049f4ccd.js => 3121f8ae.f45110e0.js} | 2 +- ...350d1c3d.91d85192.js => 350d1c3d.0c3c40bf.js} | 2 +- ...370f8845.43ae9162.js => 370f8845.bd3ab9ef.js} | 2 +- ...3d2652fb.25511d2f.js => 3d2652fb.58c55db4.js} | 2 +- ...3ef5053a.0c0c32b1.js => 3ef5053a.8ad79482.js} | 4 ++-- ...ENSE.txt => 3ef5053a.8ad79482.js.LICENSE.txt} | 0 ...40babe1d.0e8a4643.js => 40babe1d.8613d529.js} | 2 +- ...480f28a3.eb9ba1ee.js => 480f28a3.73028cb2.js} | 2 +- ...488b6464.3d215e83.js => 488b6464.d7abd24b.js} | 2 +- ...49161156.fd80369a.js => 49161156.6fb0bdd0.js} | 2 +- ...5187bed2.b6b1160a.js => 5187bed2.d9bb8a84.js} | 2 +- ...53f8e831.38c97064.js => 53f8e831.2fbb4238.js} | 4 ++-- ...ENSE.txt => 53f8e831.2fbb4238.js.LICENSE.txt} | 0 ...55b0769a.4975e3c2.js => 55b0769a.dc4d0ae7.js} | 2 +- ...55fbebd6.c310f48b.js => 55fbebd6.21c1c936.js} | 2 +- ...590d98cc.2bfca927.js => 590d98cc.8d78037e.js} | 2 +- ...5bd61d3b.9fe301f2.js => 5bd61d3b.ad331f03.js} | 2 +- ...5f7e5f34.82969ef5.js => 5f7e5f34.8f01c207.js} | 2 +- ...6636c8dc.e6b302dc.js => 6636c8dc.1b846422.js} | 2 +- ...664a648d.bb4c8fae.js => 664a648d.e0037b91.js} | 2 +- ...66d3db7c.2471f417.js => 66d3db7c.25c5a02c.js} | 2 +- ...7313bf7a.b355747b.js => 7313bf7a.666a594b.js} | 2 +- ...7a790ed0.92b2c905.js => 7a790ed0.e68340cd.js} | 2 +- ...84a0dbae.4beb9d77.js => 84a0dbae.e91ee7f2.js} | 2 +- ...857ae1bf.4b2d5e4f.js => 857ae1bf.3418e518.js} | 2 +- ...87e5c187.a17ff2cf.js => 87e5c187.13c01366.js} | 2 +- ...8b5a42c3.e877b458.js => 8b5a42c3.e0a9ee60.js} | 2 +- ...8b93e59a.fecb4008.js => 8b93e59a.5a4734ac.js} | 2 +- assets/js/8c1e6152.68892054.js | 1 + assets/js/8c1e6152.c9aa638c.js | 1 - ...8ce83ff6.c139df56.js => 8ce83ff6.3957f6db.js} | 2 +- .../js/90f695cb.14688148.js | 2 +- ...9b83d7f4.76feac45.js => 9b83d7f4.25ced8fc.js} | 2 +- ...9f1dcbb0.f173026e.js => 9f1dcbb0.20e6b107.js} | 2 +- ...a1521a63.a7615508.js => a1521a63.e1924ce0.js} | 2 +- ...a386f730.8b1fb05a.js => a386f730.0e463306.js} | 2 +- ...a61c55ce.b87f09f6.js => a61c55ce.51ef9496.js} | 4 ++-- ...ENSE.txt => a61c55ce.51ef9496.js.LICENSE.txt} | 0 ...acaf5b8a.86567549.js => acaf5b8a.b7bbf7a8.js} | 2 +- ...ba8bb0f7.4a3340a4.js => ba8bb0f7.33a0dfdf.js} | 2 +- ...c0c6474c.1eccefd2.js => c0c6474c.b75b233f.js} | 2 +- ...c4d0faae.c8950959.js => c4d0faae.53810af1.js} | 2 +- ...c5666f39.9003b03c.js => c5666f39.7215b694.js} | 4 ++-- ...ENSE.txt => c5666f39.7215b694.js.LICENSE.txt} | 0 ...cb388a7b.67e3e8ff.js => cb388a7b.8eb20ca8.js} | 2 +- ...d13cbfb8.5c42122a.js => d13cbfb8.28da2b69.js} | 4 ++-- ...ENSE.txt => d13cbfb8.28da2b69.js.LICENSE.txt} | 0 ...d7baea7e.68a9d889.js => d7baea7e.e7b9137d.js} | 4 ++-- ...ENSE.txt => d7baea7e.e7b9137d.js.LICENSE.txt} | 0 ...d999437a.5c85b44a.js => d999437a.f8e24a27.js} | 2 +- ...dfe5ecdf.a596452d.js => dfe5ecdf.e2bb0cb7.js} | 2 +- ...e01c2047.83613bee.js => e01c2047.827cf686.js} | 2 +- ...e1003eab.6b41392e.js => e1003eab.aae630ea.js} | 2 +- ...e1c0d304.62e2d481.js => e1c0d304.379b04ae.js} | 2 +- ...e6bf8eb6.7ae8745b.js => e6bf8eb6.83fe52f8.js} | 2 +- ...ed3dcfcb.1d4cd5ad.js => ed3dcfcb.65fd5acd.js} | 2 +- ...f2567325.837c05fb.js => f2567325.0f8be7cb.js} | 2 +- ...fe129f8e.4af601c1.js => fe129f8e.1432790b.js} | 2 +- assets/js/{main.0aa02fb9.js => main.74c8a90c.js} | 4 ++-- ....LICENSE.txt => main.74c8a90c.js.LICENSE.txt} | 0 ...main.0d1d639c.js => runtime~main.1508b00b.js} | 2 +- blog.html | 6 +++--- blog/archive.html | 6 +++--- blog/international-community.html | 6 +++--- blog/rebranding-stable.html | 6 +++--- blog/tags.html | 6 +++--- blog/tags/brand.html | 6 +++--- blog/tags/community.html | 6 +++--- blog/tags/discord.html | 6 +++--- blog/tags/promo.html | 6 +++--- community.html | 8 ++++---- community/team.html | 8 ++++---- docs.html | 8 ++++---- docs/about.html | 8 ++++---- docs/about/alternatives.html | 8 ++++---- docs/about/mission.html | 8 ++++---- docs/about/motivation.html | 8 ++++---- docs/about/promote/for-company.html | 8 ++++---- docs/about/promote/for-team.html | 8 ++++---- docs/about/promote/integration.html | 8 ++++---- docs/about/promote/partial-application.html | 8 ++++---- docs/about/understanding/abstractions.html | 8 ++++---- docs/about/understanding/architecture.html | 8 ++++---- docs/about/understanding/knowledge-types.html | 8 ++++---- docs/about/understanding/naming.html | 8 ++++---- docs/about/understanding/needs-driven.html | 8 ++++---- docs/about/understanding/signals.html | 8 ++++---- docs/branding.html | 8 ++++---- docs/get-started.html | 8 ++++---- docs/get-started/cheatsheet.html | 8 ++++---- docs/get-started/faq.html | 8 ++++---- docs/get-started/overview.html | 8 ++++---- docs/get-started/tutorial.html | 8 ++++---- docs/guides.html | 8 ++++---- docs/guides/examples.html | 8 ++++---- docs/guides/examples/auth.html | 8 ++++---- docs/guides/examples/autocompleted.html | 8 ++++---- docs/guides/examples/browser-api.html | 8 ++++---- docs/guides/examples/cms.html | 8 ++++---- docs/guides/examples/feedback.html | 8 ++++---- docs/guides/examples/i18n.html | 8 ++++---- docs/guides/examples/metric.html | 8 ++++---- docs/guides/examples/monorepo.html | 8 ++++---- docs/guides/examples/page-layout.html | 8 ++++---- docs/guides/examples/platforms.html | 8 ++++---- docs/guides/examples/ssr.html | 8 ++++---- docs/guides/examples/theme.html | 8 ++++---- docs/guides/examples/types.html | 8 ++++---- docs/guides/examples/white-labels.html | 8 ++++---- docs/guides/issues/cross-imports.html | 8 ++++---- docs/guides/issues/desegmented.html | 8 ++++---- docs/guides/issues/routes.html | 8 ++++---- docs/guides/migration/from-legacy.html | 8 ++++---- docs/guides/migration/from-v1.html | 10 +++++----- docs/guides/tech/with-nextjs.html | 8 ++++---- docs/guides/tech/with-nuxtjs.html | 8 ++++---- docs/guides/tech/with-react-query.html | 8 ++++---- docs/guides/tech/with-sveltekit.html | 8 ++++---- docs/reference.html | 8 ++++---- docs/reference/isolation.html | 8 ++++---- docs/reference/isolation/coupling-cohesion.html | 8 ++++---- docs/reference/isolation/decouple-entities.html | 8 ++++---- docs/reference/layers.html | 8 ++++---- docs/reference/public-api.html | 8 ++++---- docs/reference/slices-segments.html | 8 ++++---- examples.html | 6 +++--- index.html | 6 +++--- kr/404.html | 6 +++--- ...0499e362.7f3f18f9.js => 0499e362.689b33c0.js} | 2 +- ...0a4ee302.d88421d1.js => 0a4ee302.c29cc6ee.js} | 2 +- kr/assets/js/1df93b7f.41498114.js | 1 - kr/assets/js/1df93b7f.918274c0.js | 1 + ...287b7fe4.271659c7.js => 287b7fe4.c10e1fea.js} | 2 +- ...2f764a0f.065f24d9.js => 2f764a0f.418222fd.js} | 2 +- ...302360db.b32f9490.js => 302360db.8f25c593.js} | 2 +- ...3121f8ae.5819a1cf.js => 3121f8ae.223ccaf1.js} | 2 +- ...350d1c3d.187e02ec.js => 350d1c3d.3c890d06.js} | 2 +- ...370f8845.9ddefd2e.js => 370f8845.c8201e1c.js} | 2 +- ...3d2652fb.2ca55558.js => 3d2652fb.958a446c.js} | 2 +- ...3ef5053a.842624d5.js => 3ef5053a.1d666375.js} | 4 ++-- ...ENSE.txt => 3ef5053a.1d666375.js.LICENSE.txt} | 0 ...40babe1d.a586a987.js => 40babe1d.2f3092d5.js} | 2 +- ...480f28a3.451aa7af.js => 480f28a3.59983cdf.js} | 2 +- ...488b6464.c1153c5f.js => 488b6464.9869a5b7.js} | 2 +- ...49161156.74e09d89.js => 49161156.077a6a24.js} | 2 +- ...5187bed2.ffdb80b7.js => 5187bed2.0c36719e.js} | 2 +- ...53f8e831.271eafc2.js => 53f8e831.5c42937f.js} | 4 ++-- ...ENSE.txt => 53f8e831.5c42937f.js.LICENSE.txt} | 0 ...55b0769a.ee900fee.js => 55b0769a.cf48a8c6.js} | 2 +- ...55fbebd6.2d804aac.js => 55fbebd6.23288cac.js} | 2 +- ...590d98cc.6b530d06.js => 590d98cc.d0566a70.js} | 2 +- ...5bd61d3b.f9f7ee58.js => 5bd61d3b.8cf81fe7.js} | 2 +- ...5f7e5f34.7db40aba.js => 5f7e5f34.b6d76908.js} | 2 +- ...6636c8dc.9251c4dc.js => 6636c8dc.1ec97237.js} | 2 +- ...664a648d.632596d3.js => 664a648d.b0b76175.js} | 2 +- ...66d3db7c.d81aefa6.js => 66d3db7c.ece196c5.js} | 2 +- ...7052487b.a82db873.js => 7052487b.ff0d2da8.js} | 4 ++-- ...ENSE.txt => 7052487b.ff0d2da8.js.LICENSE.txt} | 0 ...7313bf7a.cf422954.js => 7313bf7a.9d923956.js} | 2 +- ...7a790ed0.0b50649c.js => 7a790ed0.69a34c6a.js} | 2 +- ...84a0dbae.05e9ca90.js => 84a0dbae.94877040.js} | 2 +- ...857ae1bf.bceed238.js => 857ae1bf.6058c043.js} | 2 +- ...87e5c187.84c8d5c6.js => 87e5c187.5f3927d9.js} | 2 +- ...8b5a42c3.da7a044e.js => 8b5a42c3.a23f6b45.js} | 2 +- ...8b93e59a.1d51e48e.js => 8b93e59a.feb5e0ef.js} | 2 +- kr/assets/js/8c1e6152.7e925c05.js | 1 - kr/assets/js/8c1e6152.a0b47748.js | 1 + ...8ce83ff6.3b0d3815.js => 8ce83ff6.105f087b.js} | 2 +- .../assets/js/90f695cb.14688148.js | 2 +- ...9b83d7f4.253f7e03.js => 9b83d7f4.295dca4b.js} | 2 +- ...9f1dcbb0.36436fa8.js => 9f1dcbb0.10a3ccac.js} | 2 +- ...a1521a63.8756d245.js => a1521a63.01c90b0e.js} | 2 +- ...a386f730.e62a7cbf.js => a386f730.a6404942.js} | 2 +- ...a61c55ce.94d1dec7.js => a61c55ce.b818f52a.js} | 4 ++-- ...ENSE.txt => a61c55ce.b818f52a.js.LICENSE.txt} | 0 ...acaf5b8a.a95e6e05.js => acaf5b8a.9799b2a8.js} | 2 +- ...ba8bb0f7.b9652a96.js => ba8bb0f7.35f143ea.js} | 2 +- ...c0c6474c.a6b70189.js => c0c6474c.c9a4d03a.js} | 2 +- ...c4d0faae.da3dd441.js => c4d0faae.c1c173cf.js} | 2 +- ...c5666f39.24e6507a.js => c5666f39.8e14bf4f.js} | 4 ++-- ...ENSE.txt => c5666f39.8e14bf4f.js.LICENSE.txt} | 0 ...cb388a7b.51698ad1.js => cb388a7b.deedda76.js} | 2 +- ...d13cbfb8.af6b0f3e.js => d13cbfb8.63a144a9.js} | 4 ++-- ...ENSE.txt => d13cbfb8.63a144a9.js.LICENSE.txt} | 0 ...d999437a.9073512d.js => d999437a.5e61401d.js} | 2 +- ...dfe5ecdf.97b432bc.js => dfe5ecdf.a6634da7.js} | 2 +- ...e01c2047.4c861ffe.js => e01c2047.e4648e5d.js} | 2 +- ...e1003eab.0714ad5c.js => e1003eab.d7bdfe2e.js} | 2 +- ...e1c0d304.da82cb1b.js => e1c0d304.531cd29b.js} | 2 +- ...e6bf8eb6.79f2f292.js => e6bf8eb6.5d111188.js} | 2 +- ...ed3dcfcb.83e791c7.js => ed3dcfcb.40ecb0a1.js} | 2 +- ...f2567325.07d9d70f.js => f2567325.dbe79456.js} | 2 +- ...fe129f8e.04f09d3e.js => fe129f8e.ff66bfd7.js} | 2 +- .../js/{main.8fb778df.js => main.55c55c17.js} | 4 ++-- ....LICENSE.txt => main.55c55c17.js.LICENSE.txt} | 0 ...main.bf95ae81.js => runtime~main.279e9619.js} | 2 +- kr/blog.html | 6 +++--- kr/blog/archive.html | 6 +++--- kr/blog/international-community.html | 6 +++--- kr/blog/rebranding-stable.html | 6 +++--- kr/blog/tags.html | 6 +++--- kr/blog/tags/brand.html | 6 +++--- kr/blog/tags/community.html | 6 +++--- kr/blog/tags/discord.html | 6 +++--- kr/blog/tags/promo.html | 6 +++--- kr/community.html | 8 ++++---- kr/community/team.html | 8 ++++---- kr/docs.html | 8 ++++---- kr/docs/about.html | 8 ++++---- kr/docs/about/alternatives.html | 8 ++++---- kr/docs/about/mission.html | 8 ++++---- kr/docs/about/motivation.html | 8 ++++---- kr/docs/about/promote/for-company.html | 8 ++++---- kr/docs/about/promote/for-team.html | 8 ++++---- kr/docs/about/promote/integration.html | 8 ++++---- kr/docs/about/promote/partial-application.html | 8 ++++---- kr/docs/about/understanding/abstractions.html | 8 ++++---- kr/docs/about/understanding/architecture.html | 8 ++++---- kr/docs/about/understanding/knowledge-types.html | 8 ++++---- kr/docs/about/understanding/naming.html | 8 ++++---- kr/docs/about/understanding/needs-driven.html | 8 ++++---- kr/docs/about/understanding/signals.html | 8 ++++---- kr/docs/branding.html | 8 ++++---- kr/docs/get-started.html | 8 ++++---- kr/docs/get-started/cheatsheet.html | 8 ++++---- kr/docs/get-started/faq.html | 8 ++++---- kr/docs/get-started/overview.html | 8 ++++---- kr/docs/get-started/tutorial.html | 8 ++++---- kr/docs/guides.html | 8 ++++---- kr/docs/guides/examples.html | 8 ++++---- kr/docs/guides/examples/auth.html | 8 ++++---- kr/docs/guides/examples/autocompleted.html | 8 ++++---- kr/docs/guides/examples/browser-api.html | 8 ++++---- kr/docs/guides/examples/cms.html | 8 ++++---- kr/docs/guides/examples/feedback.html | 8 ++++---- kr/docs/guides/examples/i18n.html | 8 ++++---- kr/docs/guides/examples/metric.html | 8 ++++---- kr/docs/guides/examples/monorepo.html | 8 ++++---- kr/docs/guides/examples/page-layout.html | 8 ++++---- kr/docs/guides/examples/platforms.html | 8 ++++---- kr/docs/guides/examples/ssr.html | 8 ++++---- kr/docs/guides/examples/theme.html | 8 ++++---- kr/docs/guides/examples/types.html | 8 ++++---- kr/docs/guides/examples/white-labels.html | 8 ++++---- kr/docs/guides/issues/cross-imports.html | 8 ++++---- kr/docs/guides/issues/desegmented.html | 8 ++++---- kr/docs/guides/issues/routes.html | 8 ++++---- kr/docs/guides/migration/from-legacy.html | 8 ++++---- kr/docs/guides/migration/from-v1.html | 10 +++++----- kr/docs/guides/tech/with-nextjs.html | 8 ++++---- kr/docs/guides/tech/with-nuxtjs.html | 8 ++++---- kr/docs/guides/tech/with-react-query.html | 8 ++++---- kr/docs/guides/tech/with-sveltekit.html | 8 ++++---- kr/docs/reference.html | 8 ++++---- kr/docs/reference/isolation.html | 8 ++++---- .../reference/isolation/coupling-cohesion.html | 8 ++++---- .../reference/isolation/decouple-entities.html | 8 ++++---- kr/docs/reference/layers.html | 8 ++++---- kr/docs/reference/public-api.html | 8 ++++---- kr/docs/reference/slices-segments.html | 8 ++++---- kr/examples.html | 6 +++--- kr/index.html | 6 +++--- kr/nav.html | 6 +++--- kr/search.html | 6 +++--- kr/versions.html | 6 +++--- nav.html | 6 +++--- ru/404.html | 6 +++--- ...04b1b9d4.46b1de96.js => 04b1b9d4.7a48886e.js} | 2 +- ...07deeff8.fc4d71df.js => 07deeff8.96fe02cc.js} | 4 ++-- ...ENSE.txt => 07deeff8.96fe02cc.js.LICENSE.txt} | 0 ...1232fa31.b35e1288.js => 1232fa31.7e5d5d95.js} | 4 ++-- ...ENSE.txt => 1232fa31.7e5d5d95.js.LICENSE.txt} | 0 ...17f650ce.b50ad80c.js => 17f650ce.18d46731.js} | 2 +- ...1c0a16b8.c4a891c4.js => 1c0a16b8.9303520b.js} | 2 +- ...1d3222b5.9978e424.js => 1d3222b5.7bdfba0b.js} | 2 +- ru/assets/js/1df93b7f.41498114.js | 1 - ru/assets/js/1df93b7f.918274c0.js | 1 + ...20c5a0f6.4346b34f.js => 20c5a0f6.b58af1f8.js} | 2 +- ...2bd07bfd.d8eeec6f.js => 2bd07bfd.aecf612d.js} | 4 ++-- ...ENSE.txt => 2bd07bfd.aecf612d.js.LICENSE.txt} | 0 ...352bcbef.184a3ebf.js => 352bcbef.94c4c842.js} | 2 +- ...35c5367b.f75686f7.js => 35c5367b.a0ab384e.js} | 2 +- ...3b64669e.bda8cf69.js => 3b64669e.5d480651.js} | 2 +- ...44775544.4d30a0f8.js => 44775544.87f578b3.js} | 2 +- ...457d5840.bfe179db.js => 457d5840.ac38ab4e.js} | 2 +- ...4eea1952.1a38613e.js => 4eea1952.922c8644.js} | 2 +- ...58b64b99.8956d7db.js => 58b64b99.2950673b.js} | 2 +- ...62f42e37.a9c19b45.js => 62f42e37.c2c4f4be.js} | 2 +- ...6545b372.7ca8cfbd.js => 6545b372.3bea7d2f.js} | 4 ++-- ...ENSE.txt => 6545b372.3bea7d2f.js.LICENSE.txt} | 0 ...670340e2.4a6f8e1e.js => 670340e2.af4667eb.js} | 2 +- ...6becfc1a.c811c5d0.js => 6becfc1a.6013a786.js} | 2 +- ...6ee557b2.967494ca.js => 6ee557b2.2750c33a.js} | 2 +- ...71d20f43.57e659a4.js => 71d20f43.965d16db.js} | 2 +- ...7313bf7a.ca88d982.js => 7313bf7a.7a80b170.js} | 2 +- ...7759802f.a765957a.js => 7759802f.36969556.js} | 2 +- ...7b31d677.f82281ca.js => 7b31d677.d4eeed7a.js} | 2 +- ...808aa0e6.a4aa1c9d.js => 808aa0e6.566976e2.js} | 2 +- ...81cb5b69.e6338e42.js => 81cb5b69.24be08bd.js} | 2 +- ...8edc10e1.65fd5f74.js => 8edc10e1.6cd17361.js} | 2 +- ...90c52043.d42c1dbd.js => 90c52043.d8c1b19c.js} | 2 +- ...90f695cb.017e47f4.js => 90f695cb.14688148.js} | 2 +- ...9b6dbc63.d127e899.js => 9b6dbc63.856407e2.js} | 4 ++-- ...ENSE.txt => 9b6dbc63.856407e2.js.LICENSE.txt} | 0 ...9fc8add1.76edac20.js => 9fc8add1.f64b245a.js} | 2 +- ru/assets/js/a01ebdbc.52d5d134.js | 1 + ru/assets/js/a01ebdbc.b88dae66.js | 1 - ...a41378e3.25bc2841.js => a41378e3.a01138a7.js} | 2 +- ...a61c55ce.0c71962d.js => a61c55ce.bbe6f14f.js} | 4 ++-- ...ENSE.txt => a61c55ce.bbe6f14f.js.LICENSE.txt} | 0 ...a657d4fc.f57443b3.js => a657d4fc.9acbcb26.js} | 2 +- ...a6bb2b9f.33eb84c0.js => a6bb2b9f.47b716e2.js} | 2 +- ...a97f4ecc.efc70045.js => a97f4ecc.d91ecca8.js} | 2 +- ...b9d2a7aa.24a8114c.js => b9d2a7aa.829277b2.js} | 2 +- ...bce03a1b.cceb6783.js => bce03a1b.c14ee299.js} | 2 +- ...c0c4bf5d.0149ee4f.js => c0c4bf5d.40f0ecd1.js} | 2 +- ...cb36866c.125cd7cc.js => cb36866c.b23423a9.js} | 2 +- ...ce6f052d.4599a251.js => ce6f052d.d6b2d0ef.js} | 2 +- ...cf699f5e.8f44bcce.js => cf699f5e.9b413d00.js} | 2 +- ...d178dcf5.07691f14.js => d178dcf5.ef84459a.js} | 2 +- ...d1f19b62.a88fe8f6.js => d1f19b62.31bb6097.js} | 2 +- ...d595dc26.6a261808.js => d595dc26.8aa2a340.js} | 2 +- ...dd4fd790.56af96c5.js => dd4fd790.fb95a0d4.js} | 2 +- ...e38a3126.19547b5f.js => e38a3126.d607c887.js} | 2 +- ...e71e2184.21f2c8a0.js => e71e2184.738cf7ba.js} | 2 +- ...e9dc891f.8f200c31.js => e9dc891f.ce3c1e16.js} | 2 +- ...eb8bed87.b4702a10.js => eb8bed87.f2651f9a.js} | 2 +- ...f22b339c.fb90ac63.js => f22b339c.ee2f785f.js} | 2 +- ...f39d466e.91a8d05b.js => f39d466e.bfeac419.js} | 2 +- ...fcc88823.f75a3e7b.js => fcc88823.88bdd251.js} | 2 +- ...fee408fa.899b46d9.js => fee408fa.5304897c.js} | 2 +- ...ffe50de1.9cff30b9.js => ffe50de1.3b02fabe.js} | 2 +- .../js/{main.6d6ede98.js => main.dea17248.js} | 4 ++-- ....LICENSE.txt => main.dea17248.js.LICENSE.txt} | 0 ...main.f61d4cc1.js => runtime~main.c28c9396.js} | 2 +- ru/blog.html | 6 +++--- ru/blog/archive.html | 6 +++--- ru/blog/international-community.html | 6 +++--- ru/blog/rebranding-stable.html | 6 +++--- ru/blog/tags.html | 6 +++--- ru/blog/tags/brand.html | 6 +++--- ru/blog/tags/community.html | 6 +++--- ru/blog/tags/discord.html | 6 +++--- ru/blog/tags/promo.html | 6 +++--- ru/community.html | 8 ++++---- ru/community/team.html | 8 ++++---- ru/docs.html | 8 ++++---- ru/docs/about.html | 8 ++++---- ru/docs/about/alternatives.html | 8 ++++---- ru/docs/about/mission.html | 8 ++++---- ru/docs/about/motivation.html | 8 ++++---- ru/docs/about/promote/for-company.html | 8 ++++---- ru/docs/about/promote/for-team.html | 8 ++++---- ru/docs/about/promote/integration.html | 8 ++++---- ru/docs/about/promote/partial-application.html | 8 ++++---- ru/docs/about/understanding/abstractions.html | 8 ++++---- ru/docs/about/understanding/architecture.html | 8 ++++---- ru/docs/about/understanding/knowledge-types.html | 8 ++++---- ru/docs/about/understanding/naming.html | 8 ++++---- ru/docs/about/understanding/needs-driven.html | 8 ++++---- ru/docs/about/understanding/signals.html | 8 ++++---- ru/docs/branding.html | 8 ++++---- ru/docs/get-started.html | 8 ++++---- ru/docs/get-started/cheatsheet.html | 8 ++++---- ru/docs/get-started/faq.html | 8 ++++---- ru/docs/get-started/overview.html | 8 ++++---- ru/docs/get-started/tutorial.html | 8 ++++---- ru/docs/guides.html | 8 ++++---- ru/docs/guides/examples.html | 8 ++++---- ru/docs/guides/examples/auth.html | 8 ++++---- ru/docs/guides/examples/autocompleted.html | 8 ++++---- ru/docs/guides/examples/browser-api.html | 8 ++++---- ru/docs/guides/examples/cms.html | 8 ++++---- ru/docs/guides/examples/feedback.html | 8 ++++---- ru/docs/guides/examples/i18n.html | 8 ++++---- ru/docs/guides/examples/metric.html | 8 ++++---- ru/docs/guides/examples/monorepo.html | 8 ++++---- ru/docs/guides/examples/page-layout.html | 8 ++++---- ru/docs/guides/examples/platforms.html | 8 ++++---- ru/docs/guides/examples/ssr.html | 8 ++++---- ru/docs/guides/examples/theme.html | 8 ++++---- ru/docs/guides/examples/types.html | 8 ++++---- ru/docs/guides/examples/white-labels.html | 8 ++++---- ru/docs/guides/issues/cross-imports.html | 8 ++++---- ru/docs/guides/issues/desegmented.html | 8 ++++---- ru/docs/guides/issues/routes.html | 8 ++++---- ru/docs/guides/migration/from-legacy.html | 8 ++++---- ru/docs/guides/migration/from-v1.html | 16 ++++++++-------- ru/docs/guides/tech/with-nextjs.html | 8 ++++---- ru/docs/guides/tech/with-nuxtjs.html | 8 ++++---- ru/docs/guides/tech/with-react-query.html | 8 ++++---- ru/docs/guides/tech/with-sveltekit.html | 8 ++++---- ru/docs/reference.html | 8 ++++---- ru/docs/reference/isolation.html | 8 ++++---- .../reference/isolation/coupling-cohesion.html | 8 ++++---- .../reference/isolation/decouple-entities.html | 8 ++++---- ru/docs/reference/layers.html | 8 ++++---- ru/docs/reference/public-api.html | 8 ++++---- ru/docs/reference/slices-segments.html | 8 ++++---- ru/examples.html | 6 +++--- ru/index.html | 6 +++--- ru/nav.html | 6 +++--- ru/search.html | 6 +++--- ru/versions.html | 6 +++--- search.html | 6 +++--- uz/404.html | 6 +++--- ...022a3ac7.d0dbb09c.js => 022a3ac7.f9a428a6.js} | 4 ++-- ...ENSE.txt => 022a3ac7.f9a428a6.js.LICENSE.txt} | 0 ...0499e362.8140effe.js => 0499e362.0c9cb174.js} | 2 +- ...066221cc.52546b20.js => 066221cc.fee392ce.js} | 2 +- ...0a4ee302.660cda07.js => 0a4ee302.631043ac.js} | 2 +- uz/assets/js/1df93b7f.41498114.js | 1 - uz/assets/js/1df93b7f.918274c0.js | 1 + ...287b7fe4.2a744e2e.js => 287b7fe4.06be75a5.js} | 2 +- ...2f764a0f.cd0d3b03.js => 2f764a0f.6e2be159.js} | 2 +- ...3121f8ae.0d47c12b.js => 3121f8ae.772dedac.js} | 2 +- ...350d1c3d.9efc29bb.js => 350d1c3d.5357eaac.js} | 2 +- ...370f8845.0d860a33.js => 370f8845.6fbba4c8.js} | 2 +- ...3d2652fb.c5055348.js => 3d2652fb.01da7379.js} | 2 +- ...4044d4ea.4facc621.js => 4044d4ea.61cf5b82.js} | 2 +- ...480f28a3.cac5655c.js => 480f28a3.260517df.js} | 2 +- ...488b6464.e28f3a32.js => 488b6464.bf508a54.js} | 2 +- ...49161156.81703102.js => 49161156.ac875131.js} | 2 +- ...5187bed2.4da976e2.js => 5187bed2.30981433.js} | 2 +- ...53f8e831.d9cfd515.js => 53f8e831.04316ad0.js} | 4 ++-- ...ENSE.txt => 53f8e831.04316ad0.js.LICENSE.txt} | 0 ...55b0769a.5f03f799.js => 55b0769a.7a153f51.js} | 2 +- ...590d98cc.56fb1db3.js => 590d98cc.245ab335.js} | 2 +- ...5bd61d3b.39107325.js => 5bd61d3b.463de5d9.js} | 2 +- ...5f7e5f34.75570322.js => 5f7e5f34.d3011e4e.js} | 2 +- ...6636c8dc.3059dbe2.js => 6636c8dc.c63923c0.js} | 2 +- ...664a648d.bea27464.js => 664a648d.31410be9.js} | 2 +- ...66d3db7c.3e0a8783.js => 66d3db7c.d77233c1.js} | 2 +- ...7313bf7a.39ea11b5.js => 7313bf7a.7c610df0.js} | 2 +- ...7a790ed0.263e6cdd.js => 7a790ed0.afe796ea.js} | 2 +- ...84a0dbae.e5e547cc.js => 84a0dbae.e6425d23.js} | 2 +- ...857ae1bf.c4be0992.js => 857ae1bf.f605024b.js} | 2 +- ...8651fb1e.93faf4e8.js => 8651fb1e.f3a9c05e.js} | 2 +- ...87e5c187.79fb86dd.js => 87e5c187.4439a3aa.js} | 2 +- ...8b5a42c3.f5ced029.js => 8b5a42c3.a6df996b.js} | 2 +- ...8b93e59a.5258fa07.js => 8b93e59a.d10920b5.js} | 2 +- uz/assets/js/8c1e6152.30b0c005.js | 1 - uz/assets/js/8c1e6152.47a19767.js | 1 + ...8ce83ff6.59c1f78c.js => 8ce83ff6.1d3708f2.js} | 2 +- .../assets/js/90f695cb.14688148.js | 2 +- ...9b83d7f4.325da577.js => 9b83d7f4.0ce321e9.js} | 2 +- ...a1521a63.13e7a39e.js => a1521a63.b34f9815.js} | 2 +- ...a386f730.e09be44b.js => a386f730.8d9ba929.js} | 2 +- ...a61c55ce.3d4e0978.js => a61c55ce.e78371c2.js} | 4 ++-- ...ENSE.txt => a61c55ce.e78371c2.js.LICENSE.txt} | 0 ...acaf5b8a.fbbfb20a.js => acaf5b8a.4784bcf0.js} | 2 +- ...ba8bb0f7.ffb451c3.js => ba8bb0f7.93b17c5d.js} | 2 +- ...c0c6474c.bc3b78cd.js => c0c6474c.e485d9f2.js} | 2 +- ...c4d0faae.0e6f7ea3.js => c4d0faae.0d87d686.js} | 2 +- ...c5666f39.d8ecd2ca.js => c5666f39.130a9fb6.js} | 4 ++-- ...ENSE.txt => c5666f39.130a9fb6.js.LICENSE.txt} | 0 ...cb388a7b.b1a4f12b.js => cb388a7b.177a23d1.js} | 2 +- ...d13cbfb8.75bafb96.js => d13cbfb8.c861e3b7.js} | 4 ++-- ...ENSE.txt => d13cbfb8.c861e3b7.js.LICENSE.txt} | 0 ...d7baea7e.24190f85.js => d7baea7e.3bfd6906.js} | 4 ++-- ...ENSE.txt => d7baea7e.3bfd6906.js.LICENSE.txt} | 0 ...d999437a.2a8af308.js => d999437a.5f4e764d.js} | 2 +- ...dfe5ecdf.87e1d4af.js => dfe5ecdf.e48e9274.js} | 2 +- ...e01c2047.e0c29e18.js => e01c2047.91489cfa.js} | 2 +- ...e1003eab.a8b1b007.js => e1003eab.7fced132.js} | 2 +- ...e1c0d304.cc3d1b1e.js => e1c0d304.197a7c43.js} | 2 +- ...e3309638.cb21d5f9.js => e3309638.49fc180e.js} | 2 +- ...e6bf8eb6.fd6bddb6.js => e6bf8eb6.1d3320e7.js} | 2 +- ...ed3dcfcb.d5a14b1f.js => ed3dcfcb.d91ddefc.js} | 2 +- ...f2567325.97bf368d.js => f2567325.c5353513.js} | 2 +- ...fe129f8e.8d49f15a.js => fe129f8e.9d3a507c.js} | 2 +- .../js/{main.35ae9675.js => main.3c91b865.js} | 4 ++-- ....LICENSE.txt => main.3c91b865.js.LICENSE.txt} | 0 ...main.d593408f.js => runtime~main.30b7243a.js} | 2 +- uz/blog.html | 6 +++--- uz/blog/archive.html | 6 +++--- uz/blog/international-community.html | 6 +++--- uz/blog/rebranding-stable.html | 6 +++--- uz/blog/tags.html | 6 +++--- uz/blog/tags/brand.html | 6 +++--- uz/blog/tags/community.html | 6 +++--- uz/blog/tags/discord.html | 6 +++--- uz/blog/tags/promo.html | 6 +++--- uz/community.html | 8 ++++---- uz/community/team.html | 8 ++++---- uz/docs.html | 8 ++++---- uz/docs/about.html | 8 ++++---- uz/docs/about/alternatives.html | 8 ++++---- uz/docs/about/mission.html | 8 ++++---- uz/docs/about/motivation.html | 8 ++++---- uz/docs/about/promote/for-company.html | 8 ++++---- uz/docs/about/promote/for-team.html | 8 ++++---- uz/docs/about/promote/integration.html | 8 ++++---- uz/docs/about/promote/partial-application.html | 8 ++++---- uz/docs/about/understanding/abstractions.html | 8 ++++---- uz/docs/about/understanding/architecture.html | 8 ++++---- uz/docs/about/understanding/knowledge-types.html | 8 ++++---- uz/docs/about/understanding/naming.html | 8 ++++---- uz/docs/about/understanding/needs-driven.html | 8 ++++---- uz/docs/about/understanding/signals.html | 8 ++++---- uz/docs/branding.html | 8 ++++---- uz/docs/get-started.html | 8 ++++---- uz/docs/get-started/cheatsheet.html | 8 ++++---- uz/docs/get-started/faq.html | 8 ++++---- uz/docs/get-started/overview.html | 8 ++++---- uz/docs/get-started/tutorial.html | 8 ++++---- uz/docs/guides.html | 8 ++++---- uz/docs/guides/examples.html | 8 ++++---- uz/docs/guides/examples/auth.html | 8 ++++---- uz/docs/guides/examples/autocompleted.html | 8 ++++---- uz/docs/guides/examples/browser-api.html | 8 ++++---- uz/docs/guides/examples/cms.html | 8 ++++---- uz/docs/guides/examples/feedback.html | 8 ++++---- uz/docs/guides/examples/i18n.html | 8 ++++---- uz/docs/guides/examples/metric.html | 8 ++++---- uz/docs/guides/examples/monorepo.html | 8 ++++---- uz/docs/guides/examples/page-layout.html | 8 ++++---- uz/docs/guides/examples/platforms.html | 8 ++++---- uz/docs/guides/examples/ssr.html | 8 ++++---- uz/docs/guides/examples/theme.html | 8 ++++---- uz/docs/guides/examples/types.html | 8 ++++---- uz/docs/guides/examples/white-labels.html | 8 ++++---- uz/docs/guides/issues/cross-imports.html | 8 ++++---- uz/docs/guides/issues/desegmented.html | 8 ++++---- uz/docs/guides/issues/routes.html | 8 ++++---- uz/docs/guides/migration/from-legacy.html | 8 ++++---- uz/docs/guides/migration/from-v1.html | 10 +++++----- uz/docs/guides/tech/with-nextjs.html | 8 ++++---- uz/docs/guides/tech/with-nuxtjs.html | 8 ++++---- uz/docs/guides/tech/with-react-query.html | 8 ++++---- uz/docs/guides/tech/with-sveltekit.html | 8 ++++---- uz/docs/reference.html | 8 ++++---- uz/docs/reference/isolation.html | 8 ++++---- .../reference/isolation/coupling-cohesion.html | 8 ++++---- .../reference/isolation/decouple-entities.html | 8 ++++---- uz/docs/reference/layers.html | 8 ++++---- uz/docs/reference/public-api.html | 8 ++++---- uz/docs/reference/slices-segments.html | 8 ++++---- uz/examples.html | 6 +++--- uz/index.html | 6 +++--- uz/nav.html | 6 +++--- uz/search.html | 6 +++--- uz/versions.html | 6 +++--- versions.html | 6 +++--- 552 files changed, 1331 insertions(+), 1331 deletions(-) rename assets/js/{0499e362.d58aa798.js => 0499e362.767323d1.js} (98%) rename assets/js/{066221cc.a34780d8.js => 066221cc.f32d55bc.js} (99%) rename assets/js/{0a4ee302.5961eb37.js => 0a4ee302.aaae57ae.js} (98%) delete mode 100644 assets/js/1df93b7f.41498114.js create mode 100644 assets/js/1df93b7f.918274c0.js rename assets/js/{287b7fe4.85cf9c86.js => 287b7fe4.04da7c5b.js} (99%) rename assets/js/{2f764a0f.3beadf52.js => 2f764a0f.3ff7d6f5.js} (99%) rename assets/js/{3121f8ae.049f4ccd.js => 3121f8ae.f45110e0.js} (98%) rename assets/js/{350d1c3d.91d85192.js => 350d1c3d.0c3c40bf.js} (99%) rename assets/js/{370f8845.43ae9162.js => 370f8845.bd3ab9ef.js} (99%) rename assets/js/{3d2652fb.25511d2f.js => 3d2652fb.58c55db4.js} (99%) rename assets/js/{3ef5053a.0c0c32b1.js => 3ef5053a.8ad79482.js} (98%) rename assets/js/{3ef5053a.0c0c32b1.js.LICENSE.txt => 3ef5053a.8ad79482.js.LICENSE.txt} (100%) rename assets/js/{40babe1d.0e8a4643.js => 40babe1d.8613d529.js} (99%) rename assets/js/{480f28a3.eb9ba1ee.js => 480f28a3.73028cb2.js} (98%) rename assets/js/{488b6464.3d215e83.js => 488b6464.d7abd24b.js} (99%) rename assets/js/{49161156.fd80369a.js => 49161156.6fb0bdd0.js} (98%) rename assets/js/{5187bed2.b6b1160a.js => 5187bed2.d9bb8a84.js} (99%) rename assets/js/{53f8e831.38c97064.js => 53f8e831.2fbb4238.js} (97%) rename assets/js/{53f8e831.38c97064.js.LICENSE.txt => 53f8e831.2fbb4238.js.LICENSE.txt} (100%) rename assets/js/{55b0769a.4975e3c2.js => 55b0769a.dc4d0ae7.js} (98%) rename assets/js/{55fbebd6.c310f48b.js => 55fbebd6.21c1c936.js} (99%) rename assets/js/{590d98cc.2bfca927.js => 590d98cc.8d78037e.js} (98%) rename assets/js/{5bd61d3b.9fe301f2.js => 5bd61d3b.ad331f03.js} (98%) rename assets/js/{5f7e5f34.82969ef5.js => 5f7e5f34.8f01c207.js} (99%) rename assets/js/{6636c8dc.e6b302dc.js => 6636c8dc.1b846422.js} (97%) rename assets/js/{664a648d.bb4c8fae.js => 664a648d.e0037b91.js} (98%) rename assets/js/{66d3db7c.2471f417.js => 66d3db7c.25c5a02c.js} (99%) rename assets/js/{7313bf7a.b355747b.js => 7313bf7a.666a594b.js} (96%) rename assets/js/{7a790ed0.92b2c905.js => 7a790ed0.e68340cd.js} (99%) rename assets/js/{84a0dbae.4beb9d77.js => 84a0dbae.e91ee7f2.js} (99%) rename assets/js/{857ae1bf.4b2d5e4f.js => 857ae1bf.3418e518.js} (99%) rename assets/js/{87e5c187.a17ff2cf.js => 87e5c187.13c01366.js} (98%) rename assets/js/{8b5a42c3.e877b458.js => 8b5a42c3.e0a9ee60.js} (98%) rename assets/js/{8b93e59a.fecb4008.js => 8b93e59a.5a4734ac.js} (99%) create mode 100644 assets/js/8c1e6152.68892054.js delete mode 100644 assets/js/8c1e6152.c9aa638c.js rename assets/js/{8ce83ff6.c139df56.js => 8ce83ff6.3957f6db.js} (98%) rename uz/assets/js/90f695cb.017e47f4.js => assets/js/90f695cb.14688148.js (56%) rename assets/js/{9b83d7f4.76feac45.js => 9b83d7f4.25ced8fc.js} (98%) rename assets/js/{9f1dcbb0.f173026e.js => 9f1dcbb0.20e6b107.js} (99%) rename assets/js/{a1521a63.a7615508.js => a1521a63.e1924ce0.js} (98%) rename assets/js/{a386f730.8b1fb05a.js => a386f730.0e463306.js} (99%) rename assets/js/{a61c55ce.b87f09f6.js => a61c55ce.51ef9496.js} (97%) rename assets/js/{a61c55ce.b87f09f6.js.LICENSE.txt => a61c55ce.51ef9496.js.LICENSE.txt} (100%) rename assets/js/{acaf5b8a.86567549.js => acaf5b8a.b7bbf7a8.js} (98%) rename assets/js/{ba8bb0f7.4a3340a4.js => ba8bb0f7.33a0dfdf.js} (99%) rename assets/js/{c0c6474c.1eccefd2.js => c0c6474c.b75b233f.js} (98%) rename assets/js/{c4d0faae.c8950959.js => c4d0faae.53810af1.js} (98%) rename assets/js/{c5666f39.9003b03c.js => c5666f39.7215b694.js} (98%) rename assets/js/{c5666f39.9003b03c.js.LICENSE.txt => c5666f39.7215b694.js.LICENSE.txt} (100%) rename assets/js/{cb388a7b.67e3e8ff.js => cb388a7b.8eb20ca8.js} (99%) rename assets/js/{d13cbfb8.5c42122a.js => d13cbfb8.28da2b69.js} (97%) rename assets/js/{d13cbfb8.5c42122a.js.LICENSE.txt => d13cbfb8.28da2b69.js.LICENSE.txt} (100%) rename assets/js/{d7baea7e.68a9d889.js => d7baea7e.e7b9137d.js} (98%) rename assets/js/{d7baea7e.68a9d889.js.LICENSE.txt => d7baea7e.e7b9137d.js.LICENSE.txt} (100%) rename assets/js/{d999437a.5c85b44a.js => d999437a.f8e24a27.js} (98%) rename assets/js/{dfe5ecdf.a596452d.js => dfe5ecdf.e2bb0cb7.js} (98%) rename assets/js/{e01c2047.83613bee.js => e01c2047.827cf686.js} (98%) rename assets/js/{e1003eab.6b41392e.js => e1003eab.aae630ea.js} (97%) rename assets/js/{e1c0d304.62e2d481.js => e1c0d304.379b04ae.js} (98%) rename assets/js/{e6bf8eb6.7ae8745b.js => e6bf8eb6.83fe52f8.js} (99%) rename assets/js/{ed3dcfcb.1d4cd5ad.js => ed3dcfcb.65fd5acd.js} (98%) rename assets/js/{f2567325.837c05fb.js => f2567325.0f8be7cb.js} (98%) rename assets/js/{fe129f8e.4af601c1.js => fe129f8e.1432790b.js} (96%) rename assets/js/{main.0aa02fb9.js => main.74c8a90c.js} (79%) rename assets/js/{main.0aa02fb9.js.LICENSE.txt => main.74c8a90c.js.LICENSE.txt} (100%) rename assets/js/{runtime~main.0d1d639c.js => runtime~main.1508b00b.js} (52%) rename kr/assets/js/{0499e362.7f3f18f9.js => 0499e362.689b33c0.js} (98%) rename kr/assets/js/{0a4ee302.d88421d1.js => 0a4ee302.c29cc6ee.js} (99%) delete mode 100644 kr/assets/js/1df93b7f.41498114.js create mode 100644 kr/assets/js/1df93b7f.918274c0.js rename kr/assets/js/{287b7fe4.271659c7.js => 287b7fe4.c10e1fea.js} (99%) rename kr/assets/js/{2f764a0f.065f24d9.js => 2f764a0f.418222fd.js} (99%) rename kr/assets/js/{302360db.b32f9490.js => 302360db.8f25c593.js} (99%) rename kr/assets/js/{3121f8ae.5819a1cf.js => 3121f8ae.223ccaf1.js} (98%) rename kr/assets/js/{350d1c3d.187e02ec.js => 350d1c3d.3c890d06.js} (99%) rename kr/assets/js/{370f8845.9ddefd2e.js => 370f8845.c8201e1c.js} (99%) rename kr/assets/js/{3d2652fb.2ca55558.js => 3d2652fb.958a446c.js} (99%) rename kr/assets/js/{3ef5053a.842624d5.js => 3ef5053a.1d666375.js} (98%) rename kr/assets/js/{3ef5053a.842624d5.js.LICENSE.txt => 3ef5053a.1d666375.js.LICENSE.txt} (100%) rename kr/assets/js/{40babe1d.a586a987.js => 40babe1d.2f3092d5.js} (99%) rename kr/assets/js/{480f28a3.451aa7af.js => 480f28a3.59983cdf.js} (98%) rename kr/assets/js/{488b6464.c1153c5f.js => 488b6464.9869a5b7.js} (99%) rename kr/assets/js/{49161156.74e09d89.js => 49161156.077a6a24.js} (98%) rename kr/assets/js/{5187bed2.ffdb80b7.js => 5187bed2.0c36719e.js} (99%) rename kr/assets/js/{53f8e831.271eafc2.js => 53f8e831.5c42937f.js} (98%) rename kr/assets/js/{53f8e831.271eafc2.js.LICENSE.txt => 53f8e831.5c42937f.js.LICENSE.txt} (100%) rename kr/assets/js/{55b0769a.ee900fee.js => 55b0769a.cf48a8c6.js} (99%) rename kr/assets/js/{55fbebd6.2d804aac.js => 55fbebd6.23288cac.js} (99%) rename kr/assets/js/{590d98cc.6b530d06.js => 590d98cc.d0566a70.js} (98%) rename kr/assets/js/{5bd61d3b.f9f7ee58.js => 5bd61d3b.8cf81fe7.js} (98%) rename kr/assets/js/{5f7e5f34.7db40aba.js => 5f7e5f34.b6d76908.js} (99%) rename kr/assets/js/{6636c8dc.9251c4dc.js => 6636c8dc.1ec97237.js} (97%) rename kr/assets/js/{664a648d.632596d3.js => 664a648d.b0b76175.js} (98%) rename kr/assets/js/{66d3db7c.d81aefa6.js => 66d3db7c.ece196c5.js} (99%) rename kr/assets/js/{7052487b.a82db873.js => 7052487b.ff0d2da8.js} (98%) rename kr/assets/js/{7052487b.a82db873.js.LICENSE.txt => 7052487b.ff0d2da8.js.LICENSE.txt} (100%) rename kr/assets/js/{7313bf7a.cf422954.js => 7313bf7a.9d923956.js} (96%) rename kr/assets/js/{7a790ed0.0b50649c.js => 7a790ed0.69a34c6a.js} (99%) rename kr/assets/js/{84a0dbae.05e9ca90.js => 84a0dbae.94877040.js} (99%) rename kr/assets/js/{857ae1bf.bceed238.js => 857ae1bf.6058c043.js} (99%) rename kr/assets/js/{87e5c187.84c8d5c6.js => 87e5c187.5f3927d9.js} (98%) rename kr/assets/js/{8b5a42c3.da7a044e.js => 8b5a42c3.a23f6b45.js} (98%) rename kr/assets/js/{8b93e59a.1d51e48e.js => 8b93e59a.feb5e0ef.js} (99%) delete mode 100644 kr/assets/js/8c1e6152.7e925c05.js create mode 100644 kr/assets/js/8c1e6152.a0b47748.js rename kr/assets/js/{8ce83ff6.3b0d3815.js => 8ce83ff6.105f087b.js} (98%) rename assets/js/90f695cb.017e47f4.js => kr/assets/js/90f695cb.14688148.js (56%) rename kr/assets/js/{9b83d7f4.253f7e03.js => 9b83d7f4.295dca4b.js} (98%) rename kr/assets/js/{9f1dcbb0.36436fa8.js => 9f1dcbb0.10a3ccac.js} (99%) rename kr/assets/js/{a1521a63.8756d245.js => a1521a63.01c90b0e.js} (98%) rename kr/assets/js/{a386f730.e62a7cbf.js => a386f730.a6404942.js} (99%) rename kr/assets/js/{a61c55ce.94d1dec7.js => a61c55ce.b818f52a.js} (97%) rename kr/assets/js/{a61c55ce.94d1dec7.js.LICENSE.txt => a61c55ce.b818f52a.js.LICENSE.txt} (100%) rename kr/assets/js/{acaf5b8a.a95e6e05.js => acaf5b8a.9799b2a8.js} (96%) rename kr/assets/js/{ba8bb0f7.b9652a96.js => ba8bb0f7.35f143ea.js} (99%) rename kr/assets/js/{c0c6474c.a6b70189.js => c0c6474c.c9a4d03a.js} (98%) rename kr/assets/js/{c4d0faae.da3dd441.js => c4d0faae.c1c173cf.js} (98%) rename kr/assets/js/{c5666f39.24e6507a.js => c5666f39.8e14bf4f.js} (98%) rename kr/assets/js/{c5666f39.24e6507a.js.LICENSE.txt => c5666f39.8e14bf4f.js.LICENSE.txt} (100%) rename kr/assets/js/{cb388a7b.51698ad1.js => cb388a7b.deedda76.js} (99%) rename kr/assets/js/{d13cbfb8.af6b0f3e.js => d13cbfb8.63a144a9.js} (97%) rename kr/assets/js/{d13cbfb8.af6b0f3e.js.LICENSE.txt => d13cbfb8.63a144a9.js.LICENSE.txt} (100%) rename kr/assets/js/{d999437a.9073512d.js => d999437a.5e61401d.js} (98%) rename kr/assets/js/{dfe5ecdf.97b432bc.js => dfe5ecdf.a6634da7.js} (98%) rename kr/assets/js/{e01c2047.4c861ffe.js => e01c2047.e4648e5d.js} (98%) rename kr/assets/js/{e1003eab.0714ad5c.js => e1003eab.d7bdfe2e.js} (98%) rename kr/assets/js/{e1c0d304.da82cb1b.js => e1c0d304.531cd29b.js} (98%) rename kr/assets/js/{e6bf8eb6.79f2f292.js => e6bf8eb6.5d111188.js} (99%) rename kr/assets/js/{ed3dcfcb.83e791c7.js => ed3dcfcb.40ecb0a1.js} (98%) rename kr/assets/js/{f2567325.07d9d70f.js => f2567325.dbe79456.js} (98%) rename kr/assets/js/{fe129f8e.04f09d3e.js => fe129f8e.ff66bfd7.js} (96%) rename kr/assets/js/{main.8fb778df.js => main.55c55c17.js} (79%) rename kr/assets/js/{main.8fb778df.js.LICENSE.txt => main.55c55c17.js.LICENSE.txt} (100%) rename kr/assets/js/{runtime~main.bf95ae81.js => runtime~main.279e9619.js} (79%) rename ru/assets/js/{04b1b9d4.46b1de96.js => 04b1b9d4.7a48886e.js} (99%) rename ru/assets/js/{07deeff8.fc4d71df.js => 07deeff8.96fe02cc.js} (98%) rename ru/assets/js/{07deeff8.fc4d71df.js.LICENSE.txt => 07deeff8.96fe02cc.js.LICENSE.txt} (100%) rename ru/assets/js/{1232fa31.b35e1288.js => 1232fa31.7e5d5d95.js} (97%) rename ru/assets/js/{1232fa31.b35e1288.js.LICENSE.txt => 1232fa31.7e5d5d95.js.LICENSE.txt} (100%) rename ru/assets/js/{17f650ce.b50ad80c.js => 17f650ce.18d46731.js} (98%) rename ru/assets/js/{1c0a16b8.c4a891c4.js => 1c0a16b8.9303520b.js} (98%) rename ru/assets/js/{1d3222b5.9978e424.js => 1d3222b5.7bdfba0b.js} (98%) delete mode 100644 ru/assets/js/1df93b7f.41498114.js create mode 100644 ru/assets/js/1df93b7f.918274c0.js rename ru/assets/js/{20c5a0f6.4346b34f.js => 20c5a0f6.b58af1f8.js} (98%) rename ru/assets/js/{2bd07bfd.d8eeec6f.js => 2bd07bfd.aecf612d.js} (98%) rename ru/assets/js/{2bd07bfd.d8eeec6f.js.LICENSE.txt => 2bd07bfd.aecf612d.js.LICENSE.txt} (100%) rename ru/assets/js/{352bcbef.184a3ebf.js => 352bcbef.94c4c842.js} (99%) rename ru/assets/js/{35c5367b.f75686f7.js => 35c5367b.a0ab384e.js} (99%) rename ru/assets/js/{3b64669e.bda8cf69.js => 3b64669e.5d480651.js} (99%) rename ru/assets/js/{44775544.4d30a0f8.js => 44775544.87f578b3.js} (99%) rename ru/assets/js/{457d5840.bfe179db.js => 457d5840.ac38ab4e.js} (99%) rename ru/assets/js/{4eea1952.1a38613e.js => 4eea1952.922c8644.js} (98%) rename ru/assets/js/{58b64b99.8956d7db.js => 58b64b99.2950673b.js} (99%) rename ru/assets/js/{62f42e37.a9c19b45.js => 62f42e37.c2c4f4be.js} (99%) rename ru/assets/js/{6545b372.7ca8cfbd.js => 6545b372.3bea7d2f.js} (98%) rename ru/assets/js/{6545b372.7ca8cfbd.js.LICENSE.txt => 6545b372.3bea7d2f.js.LICENSE.txt} (100%) rename ru/assets/js/{670340e2.4a6f8e1e.js => 670340e2.af4667eb.js} (99%) rename ru/assets/js/{6becfc1a.c811c5d0.js => 6becfc1a.6013a786.js} (98%) rename ru/assets/js/{6ee557b2.967494ca.js => 6ee557b2.2750c33a.js} (98%) rename ru/assets/js/{71d20f43.57e659a4.js => 71d20f43.965d16db.js} (99%) rename ru/assets/js/{7313bf7a.ca88d982.js => 7313bf7a.7a80b170.js} (96%) rename ru/assets/js/{7759802f.a765957a.js => 7759802f.36969556.js} (99%) rename ru/assets/js/{7b31d677.f82281ca.js => 7b31d677.d4eeed7a.js} (99%) rename ru/assets/js/{808aa0e6.a4aa1c9d.js => 808aa0e6.566976e2.js} (99%) rename ru/assets/js/{81cb5b69.e6338e42.js => 81cb5b69.24be08bd.js} (99%) rename ru/assets/js/{8edc10e1.65fd5f74.js => 8edc10e1.6cd17361.js} (98%) rename ru/assets/js/{90c52043.d42c1dbd.js => 90c52043.d8c1b19c.js} (99%) rename ru/assets/js/{90f695cb.017e47f4.js => 90f695cb.14688148.js} (56%) rename ru/assets/js/{9b6dbc63.d127e899.js => 9b6dbc63.856407e2.js} (98%) rename ru/assets/js/{9b6dbc63.d127e899.js.LICENSE.txt => 9b6dbc63.856407e2.js.LICENSE.txt} (100%) rename ru/assets/js/{9fc8add1.76edac20.js => 9fc8add1.f64b245a.js} (99%) create mode 100644 ru/assets/js/a01ebdbc.52d5d134.js delete mode 100644 ru/assets/js/a01ebdbc.b88dae66.js rename ru/assets/js/{a41378e3.25bc2841.js => a41378e3.a01138a7.js} (99%) rename ru/assets/js/{a61c55ce.0c71962d.js => a61c55ce.bbe6f14f.js} (97%) rename ru/assets/js/{a61c55ce.0c71962d.js.LICENSE.txt => a61c55ce.bbe6f14f.js.LICENSE.txt} (100%) rename ru/assets/js/{a657d4fc.f57443b3.js => a657d4fc.9acbcb26.js} (98%) rename ru/assets/js/{a6bb2b9f.33eb84c0.js => a6bb2b9f.47b716e2.js} (98%) rename ru/assets/js/{a97f4ecc.efc70045.js => a97f4ecc.d91ecca8.js} (99%) rename ru/assets/js/{b9d2a7aa.24a8114c.js => b9d2a7aa.829277b2.js} (99%) rename ru/assets/js/{bce03a1b.cceb6783.js => bce03a1b.c14ee299.js} (99%) rename ru/assets/js/{c0c4bf5d.0149ee4f.js => c0c4bf5d.40f0ecd1.js} (98%) rename ru/assets/js/{cb36866c.125cd7cc.js => cb36866c.b23423a9.js} (99%) rename ru/assets/js/{ce6f052d.4599a251.js => ce6f052d.d6b2d0ef.js} (99%) rename ru/assets/js/{cf699f5e.8f44bcce.js => cf699f5e.9b413d00.js} (99%) rename ru/assets/js/{d178dcf5.07691f14.js => d178dcf5.ef84459a.js} (98%) rename ru/assets/js/{d1f19b62.a88fe8f6.js => d1f19b62.31bb6097.js} (98%) rename ru/assets/js/{d595dc26.6a261808.js => d595dc26.8aa2a340.js} (99%) rename ru/assets/js/{dd4fd790.56af96c5.js => dd4fd790.fb95a0d4.js} (98%) rename ru/assets/js/{e38a3126.19547b5f.js => e38a3126.d607c887.js} (99%) rename ru/assets/js/{e71e2184.21f2c8a0.js => e71e2184.738cf7ba.js} (99%) rename ru/assets/js/{e9dc891f.8f200c31.js => e9dc891f.ce3c1e16.js} (98%) rename ru/assets/js/{eb8bed87.b4702a10.js => eb8bed87.f2651f9a.js} (98%) rename ru/assets/js/{f22b339c.fb90ac63.js => f22b339c.ee2f785f.js} (99%) rename ru/assets/js/{f39d466e.91a8d05b.js => f39d466e.bfeac419.js} (98%) rename ru/assets/js/{fcc88823.f75a3e7b.js => fcc88823.88bdd251.js} (99%) rename ru/assets/js/{fee408fa.899b46d9.js => fee408fa.5304897c.js} (99%) rename ru/assets/js/{ffe50de1.9cff30b9.js => ffe50de1.3b02fabe.js} (99%) rename ru/assets/js/{main.6d6ede98.js => main.dea17248.js} (76%) rename ru/assets/js/{main.6d6ede98.js.LICENSE.txt => main.dea17248.js.LICENSE.txt} (100%) rename ru/assets/js/{runtime~main.f61d4cc1.js => runtime~main.c28c9396.js} (58%) rename uz/assets/js/{022a3ac7.d0dbb09c.js => 022a3ac7.f9a428a6.js} (98%) rename uz/assets/js/{022a3ac7.d0dbb09c.js.LICENSE.txt => 022a3ac7.f9a428a6.js.LICENSE.txt} (100%) rename uz/assets/js/{0499e362.8140effe.js => 0499e362.0c9cb174.js} (98%) rename uz/assets/js/{066221cc.52546b20.js => 066221cc.fee392ce.js} (99%) rename uz/assets/js/{0a4ee302.660cda07.js => 0a4ee302.631043ac.js} (99%) delete mode 100644 uz/assets/js/1df93b7f.41498114.js create mode 100644 uz/assets/js/1df93b7f.918274c0.js rename uz/assets/js/{287b7fe4.2a744e2e.js => 287b7fe4.06be75a5.js} (99%) rename uz/assets/js/{2f764a0f.cd0d3b03.js => 2f764a0f.6e2be159.js} (99%) rename uz/assets/js/{3121f8ae.0d47c12b.js => 3121f8ae.772dedac.js} (98%) rename uz/assets/js/{350d1c3d.9efc29bb.js => 350d1c3d.5357eaac.js} (99%) rename uz/assets/js/{370f8845.0d860a33.js => 370f8845.6fbba4c8.js} (99%) rename uz/assets/js/{3d2652fb.c5055348.js => 3d2652fb.01da7379.js} (99%) rename uz/assets/js/{4044d4ea.4facc621.js => 4044d4ea.61cf5b82.js} (99%) rename uz/assets/js/{480f28a3.cac5655c.js => 480f28a3.260517df.js} (98%) rename uz/assets/js/{488b6464.e28f3a32.js => 488b6464.bf508a54.js} (99%) rename uz/assets/js/{49161156.81703102.js => 49161156.ac875131.js} (98%) rename uz/assets/js/{5187bed2.4da976e2.js => 5187bed2.30981433.js} (99%) rename uz/assets/js/{53f8e831.d9cfd515.js => 53f8e831.04316ad0.js} (98%) rename uz/assets/js/{53f8e831.d9cfd515.js.LICENSE.txt => 53f8e831.04316ad0.js.LICENSE.txt} (100%) rename uz/assets/js/{55b0769a.5f03f799.js => 55b0769a.7a153f51.js} (99%) rename uz/assets/js/{590d98cc.56fb1db3.js => 590d98cc.245ab335.js} (98%) rename uz/assets/js/{5bd61d3b.39107325.js => 5bd61d3b.463de5d9.js} (98%) rename uz/assets/js/{5f7e5f34.75570322.js => 5f7e5f34.d3011e4e.js} (99%) rename uz/assets/js/{6636c8dc.3059dbe2.js => 6636c8dc.c63923c0.js} (97%) rename uz/assets/js/{664a648d.bea27464.js => 664a648d.31410be9.js} (98%) rename uz/assets/js/{66d3db7c.3e0a8783.js => 66d3db7c.d77233c1.js} (99%) rename uz/assets/js/{7313bf7a.39ea11b5.js => 7313bf7a.7c610df0.js} (96%) rename uz/assets/js/{7a790ed0.263e6cdd.js => 7a790ed0.afe796ea.js} (99%) rename uz/assets/js/{84a0dbae.e5e547cc.js => 84a0dbae.e6425d23.js} (99%) rename uz/assets/js/{857ae1bf.c4be0992.js => 857ae1bf.f605024b.js} (99%) rename uz/assets/js/{8651fb1e.93faf4e8.js => 8651fb1e.f3a9c05e.js} (99%) rename uz/assets/js/{87e5c187.79fb86dd.js => 87e5c187.4439a3aa.js} (98%) rename uz/assets/js/{8b5a42c3.f5ced029.js => 8b5a42c3.a6df996b.js} (98%) rename uz/assets/js/{8b93e59a.5258fa07.js => 8b93e59a.d10920b5.js} (99%) delete mode 100644 uz/assets/js/8c1e6152.30b0c005.js create mode 100644 uz/assets/js/8c1e6152.47a19767.js rename uz/assets/js/{8ce83ff6.59c1f78c.js => 8ce83ff6.1d3708f2.js} (98%) rename kr/assets/js/90f695cb.017e47f4.js => uz/assets/js/90f695cb.14688148.js (56%) rename uz/assets/js/{9b83d7f4.325da577.js => 9b83d7f4.0ce321e9.js} (98%) rename uz/assets/js/{a1521a63.13e7a39e.js => a1521a63.b34f9815.js} (98%) rename uz/assets/js/{a386f730.e09be44b.js => a386f730.8d9ba929.js} (99%) rename uz/assets/js/{a61c55ce.3d4e0978.js => a61c55ce.e78371c2.js} (97%) rename uz/assets/js/{a61c55ce.3d4e0978.js.LICENSE.txt => a61c55ce.e78371c2.js.LICENSE.txt} (100%) rename uz/assets/js/{acaf5b8a.fbbfb20a.js => acaf5b8a.4784bcf0.js} (96%) rename uz/assets/js/{ba8bb0f7.ffb451c3.js => ba8bb0f7.93b17c5d.js} (99%) rename uz/assets/js/{c0c6474c.bc3b78cd.js => c0c6474c.e485d9f2.js} (98%) rename uz/assets/js/{c4d0faae.0e6f7ea3.js => c4d0faae.0d87d686.js} (98%) rename uz/assets/js/{c5666f39.d8ecd2ca.js => c5666f39.130a9fb6.js} (98%) rename uz/assets/js/{c5666f39.d8ecd2ca.js.LICENSE.txt => c5666f39.130a9fb6.js.LICENSE.txt} (100%) rename uz/assets/js/{cb388a7b.b1a4f12b.js => cb388a7b.177a23d1.js} (99%) rename uz/assets/js/{d13cbfb8.75bafb96.js => d13cbfb8.c861e3b7.js} (97%) rename uz/assets/js/{d13cbfb8.75bafb96.js.LICENSE.txt => d13cbfb8.c861e3b7.js.LICENSE.txt} (100%) rename uz/assets/js/{d7baea7e.24190f85.js => d7baea7e.3bfd6906.js} (98%) rename uz/assets/js/{d7baea7e.24190f85.js.LICENSE.txt => d7baea7e.3bfd6906.js.LICENSE.txt} (100%) rename uz/assets/js/{d999437a.2a8af308.js => d999437a.5f4e764d.js} (98%) rename uz/assets/js/{dfe5ecdf.87e1d4af.js => dfe5ecdf.e48e9274.js} (98%) rename uz/assets/js/{e01c2047.e0c29e18.js => e01c2047.91489cfa.js} (98%) rename uz/assets/js/{e1003eab.a8b1b007.js => e1003eab.7fced132.js} (98%) rename uz/assets/js/{e1c0d304.cc3d1b1e.js => e1c0d304.197a7c43.js} (98%) rename uz/assets/js/{e3309638.cb21d5f9.js => e3309638.49fc180e.js} (99%) rename uz/assets/js/{e6bf8eb6.fd6bddb6.js => e6bf8eb6.1d3320e7.js} (99%) rename uz/assets/js/{ed3dcfcb.d5a14b1f.js => ed3dcfcb.d91ddefc.js} (98%) rename uz/assets/js/{f2567325.97bf368d.js => f2567325.c5353513.js} (98%) rename uz/assets/js/{fe129f8e.8d49f15a.js => fe129f8e.9d3a507c.js} (96%) rename uz/assets/js/{main.35ae9675.js => main.3c91b865.js} (79%) rename uz/assets/js/{main.35ae9675.js.LICENSE.txt => main.3c91b865.js.LICENSE.txt} (100%) rename uz/assets/js/{runtime~main.d593408f.js => runtime~main.30b7243a.js} (50%) diff --git a/404.html b/404.html index d659c1c9ce..e75a4815ea 100644 --- a/404.html +++ b/404.html @@ -9,10 +9,10 @@ - - + + -
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

\ No newline at end of file diff --git a/assets/js/0499e362.d58aa798.js b/assets/js/0499e362.767323d1.js similarity index 98% rename from assets/js/0499e362.d58aa798.js rename to assets/js/0499e362.767323d1.js index 94b9a1adac..a8bafc0acd 100644 --- a/assets/js/0499e362.d58aa798.js +++ b/assets/js/0499e362.767323d1.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[4005],{5556:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var i=s(6070),n=s(5710);const o={unlisted:!0},r="Decomposition cheatsheet",a={id:"get-started/cheatsheet",title:"Decomposition cheatsheet",description:"Use this as a quick reference when you're deciding how to decompose your UI. PDF versions are also available below, so you can print it out and keep one under your pillow.",source:"@site/i18n/en/docusaurus-plugin-content-docs/current/get-started/cheatsheet.mdx",sourceDirName:"get-started",slug:"/get-started/cheatsheet",permalink:"/docs/get-started/cheatsheet",draft:!1,unlisted:!0,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/en/docusaurus-plugin-content-docs/current/get-started/cheatsheet.mdx",tags:[],version:"current",lastUpdatedAt:1727030144e3,frontMatter:{unlisted:!0},sidebar:"getstartedSidebar"},c={},d=[{value:"Choosing a layer",id:"choosing-a-layer",level:2},{value:"Examples",id:"examples",level:2},{value:"Tweet",id:"tweet",level:3},{value:"GitHub",id:"github",level:3},{value:"See also",id:"see-also",level:2}];function l(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"decomposition-cheatsheet",children:"Decomposition cheatsheet"})}),"\n",(0,i.jsx)(t.p,{children:"Use this as a quick reference when you're deciding how to decompose your UI. PDF versions are also available below, so you can print it out and keep one under your pillow."}),"\n",(0,i.jsx)(t.h2,{id:"choosing-a-layer",children:"Choosing a layer"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:s(6701).A+"",children:"Download PDF"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Definitions of all layers and self-check questions",src:s(6423).A+"",width:"1684",height:"1190"})}),"\n",(0,i.jsx)(t.h2,{id:"examples",children:"Examples"}),"\n",(0,i.jsx)(t.h3,{id:"tweet",children:"Tweet"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"decomposed-tweet-bordered-bgLight",src:s(9342).A+"",width:"1200",height:"2364"})}),"\n",(0,i.jsx)(t.h3,{id:"github",children:"GitHub"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"decomposed-github-bordered",src:s(890).A+"",width:"2291",height:"1080"})}),"\n",(0,i.jsx)(t.h2,{id:"see-also",children:"See also"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/4262",children:"(Thread) General logic for features and entities"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/4210",children:"(Thread) Decomposition of swollen logic"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/4088",children:"(Thread) About understanding the areas of responsibility during decomposition"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3828",children:"(Thread) Decomposition of the Product List widget"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://www.pluralsight.com/guides/how-to-organize-your-react-+-redux-codebase",children:"(Article) Different approaches to the decomposition of logic"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3776",children:"(Thread) About the difference between features and entities"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3248",children:"(Thread) About the difference between things and entities (2)"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3833",children:"(Thread) About the application of criteria for decomposition"})}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},6701:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/files/choosing-a-layer-en-12fdf3265c8fc4f6b58687352b81fce7.pdf"},6423:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/choosing-a-layer-en-5b67f20bb921ba17d78a56c0dc7654a9.jpg"},890:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/decompose-github-a0eeb839a4b5ef5c480a73726a4451b0.jpg"},9342:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/decompose-twitter-7b9a50f879d763c49305b3bf0751ee35.png"},5710:(e,t,s)=>{s.d(t,{R:()=>r,x:()=>a});var i=s(758);const n={},o=i.createContext(n);function r(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[4005],{5556:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var i=s(6070),n=s(5710);const o={unlisted:!0},r="Decomposition cheatsheet",a={id:"get-started/cheatsheet",title:"Decomposition cheatsheet",description:"Use this as a quick reference when you're deciding how to decompose your UI. PDF versions are also available below, so you can print it out and keep one under your pillow.",source:"@site/i18n/en/docusaurus-plugin-content-docs/current/get-started/cheatsheet.mdx",sourceDirName:"get-started",slug:"/get-started/cheatsheet",permalink:"/docs/get-started/cheatsheet",draft:!1,unlisted:!0,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/en/docusaurus-plugin-content-docs/current/get-started/cheatsheet.mdx",tags:[],version:"current",lastUpdatedAt:1727540389e3,frontMatter:{unlisted:!0},sidebar:"getstartedSidebar"},c={},d=[{value:"Choosing a layer",id:"choosing-a-layer",level:2},{value:"Examples",id:"examples",level:2},{value:"Tweet",id:"tweet",level:3},{value:"GitHub",id:"github",level:3},{value:"See also",id:"see-also",level:2}];function l(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"decomposition-cheatsheet",children:"Decomposition cheatsheet"})}),"\n",(0,i.jsx)(t.p,{children:"Use this as a quick reference when you're deciding how to decompose your UI. PDF versions are also available below, so you can print it out and keep one under your pillow."}),"\n",(0,i.jsx)(t.h2,{id:"choosing-a-layer",children:"Choosing a layer"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:s(6701).A+"",children:"Download PDF"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Definitions of all layers and self-check questions",src:s(6423).A+"",width:"1684",height:"1190"})}),"\n",(0,i.jsx)(t.h2,{id:"examples",children:"Examples"}),"\n",(0,i.jsx)(t.h3,{id:"tweet",children:"Tweet"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"decomposed-tweet-bordered-bgLight",src:s(9342).A+"",width:"1200",height:"2364"})}),"\n",(0,i.jsx)(t.h3,{id:"github",children:"GitHub"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"decomposed-github-bordered",src:s(890).A+"",width:"2291",height:"1080"})}),"\n",(0,i.jsx)(t.h2,{id:"see-also",children:"See also"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/4262",children:"(Thread) General logic for features and entities"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/4210",children:"(Thread) Decomposition of swollen logic"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/4088",children:"(Thread) About understanding the areas of responsibility during decomposition"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3828",children:"(Thread) Decomposition of the Product List widget"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://www.pluralsight.com/guides/how-to-organize-your-react-+-redux-codebase",children:"(Article) Different approaches to the decomposition of logic"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3776",children:"(Thread) About the difference between features and entities"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3248",children:"(Thread) About the difference between things and entities (2)"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3833",children:"(Thread) About the application of criteria for decomposition"})}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},6701:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/files/choosing-a-layer-en-12fdf3265c8fc4f6b58687352b81fce7.pdf"},6423:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/choosing-a-layer-en-5b67f20bb921ba17d78a56c0dc7654a9.jpg"},890:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/decompose-github-a0eeb839a4b5ef5c480a73726a4451b0.jpg"},9342:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/decompose-twitter-7b9a50f879d763c49305b3bf0751ee35.png"},5710:(e,t,s)=>{s.d(t,{R:()=>r,x:()=>a});var i=s(758);const n={},o=i.createContext(n);function r(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/066221cc.a34780d8.js b/assets/js/066221cc.f32d55bc.js similarity index 99% rename from assets/js/066221cc.a34780d8.js rename to assets/js/066221cc.f32d55bc.js index 99068b441f..21d5bd43a6 100644 --- a/assets/js/066221cc.a34780d8.js +++ b/assets/js/066221cc.f32d55bc.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[3120],{8715:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var i=s(6070),t=s(5710);const r={sidebar_position:1},o="Overview",a={id:"get-started/overview",title:"Overview",description:"Feature-Sliced Design (FSD) is an architectural methodology for scaffolding front-end applications. Simply put, it's a compilation of rules and conventions on organizing code. The main purpose of this methodology is to make the project more understandable and stable in the face of ever-changing business requirements.",source:"@site/i18n/en/docusaurus-plugin-content-docs/current/get-started/overview.mdx",sourceDirName:"get-started",slug:"/get-started/overview",permalink:"/docs/get-started/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/en/docusaurus-plugin-content-docs/current/get-started/overview.mdx",tags:[],version:"current",lastUpdatedAt:1727030144e3,sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"getstartedSidebar",previous:{title:"\ud83d\ude80 Get Started",permalink:"/docs/get-started/"},next:{title:"Tutorial",permalink:"/docs/get-started/tutorial"}},l={},d=[{value:"Is it right for me?",id:"is-it-right-for-me",level:2},{value:"Basic example",id:"basic-example",level:2},{value:"Concepts",id:"concepts",level:2},{value:"Layers",id:"layers",level:3},{value:"Slices",id:"slices",level:3},{value:"Segments",id:"segments",level:3},{value:"Advantages",id:"advantages",level:2},{value:"Incremental adoption",id:"incremental-adoption",level:2},{value:"Next steps",id:"next-steps",level:2}];function c(e){const n={a:"a",br:"br",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"overview",children:"Overview"})}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Feature-Sliced Design"})," (FSD) is an architectural methodology for scaffolding front-end applications. Simply put, it's a compilation of rules and conventions on organizing code. The main purpose of this methodology is to make the project more understandable and stable in the face of ever-changing business requirements."]}),"\n",(0,i.jsxs)(n.p,{children:["Apart from a set of conventions, FSD is also a toolchain. We have a ",(0,i.jsx)(n.a,{href:"https://github.com/feature-sliced/steiger",children:"linter"})," to check your project's architecture, ",(0,i.jsx)(n.a,{href:"https://github.com/feature-sliced/awesome?tab=readme-ov-file#tools",children:"folder generators"})," through a CLI or IDEs, as well as a rich library of ",(0,i.jsx)(n.a,{href:"/examples",children:"examples"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"is-it-right-for-me",children:"Is it right for me?"}),"\n",(0,i.jsx)(n.p,{children:"FSD can be implemented in projects and teams of any size. It is right for your project if:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["You're doing ",(0,i.jsx)(n.strong,{children:"frontend"})," (UI on web, mobile, desktop, etc.)"]}),"\n",(0,i.jsxs)(n.li,{children:["You're building an ",(0,i.jsx)(n.strong,{children:"application"}),", not a library"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"And that's it! There are no restrictions on what programming language, UI framework, or state manager you use. You can also adopt FSD incrementally, use it in monorepos, and scale to great lengths by breaking your app into packages and implementing FSD individually within them."}),"\n",(0,i.jsxs)(n.p,{children:["If you already have an architecture and you're considering a switch to FSD, make sure that the current architecture is ",(0,i.jsx)(n.strong,{children:"causing trouble"})," in your team. For example, if your project has grown too large and inter-connected to efficiently implement new features, or if you're expecting a lot of new members to join the team. If the current architecture works, maybe it's not worth changing. But if you do decide to migrate, see the ",(0,i.jsx)(n.a,{href:"/docs/guides/migration/from-legacy",children:"Migration"})," section for guidance."]}),"\n",(0,i.jsx)(n.h2,{id:"basic-example",children:"Basic example"}),"\n",(0,i.jsx)(n.p,{children:"Here is a simple project that implements FSD:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 app"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 pages"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 shared"})}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["These top-level folders are called ",(0,i.jsx)(n.em,{children:"layers"}),". Let's look deeper:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"\ud83d\udcc2 app"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 routes"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 analytics"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"\ud83d\udcc2 pages"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 home"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"\ud83d\udcc2 article-reader"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 ui"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 api"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 settings"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"\ud83d\udcc2 shared"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 ui"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 api"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Folders inside ",(0,i.jsx)(n.code,{children:"\ud83d\udcc2 pages"})," are called ",(0,i.jsx)(n.em,{children:"slices"}),". They divide the layer by domain (in this case, by pages)."]}),"\n",(0,i.jsxs)(n.p,{children:["Folders inside ",(0,i.jsx)(n.code,{children:"\ud83d\udcc2 app"}),", ",(0,i.jsx)(n.code,{children:"\ud83d\udcc2 shared"}),", and ",(0,i.jsx)(n.code,{children:"\ud83d\udcc2 pages/article-reader"})," are called ",(0,i.jsx)(n.em,{children:"segments"}),", and they divide slices (or layers) by technical purpose, i.e. what the code is for."]}),"\n",(0,i.jsx)(n.h2,{id:"concepts",children:"Concepts"}),"\n",(0,i.jsx)(n.p,{children:"Layers, slices, and segments form a hierarchy like this:"}),"\n",(0,i.jsxs)("figure",{children:[(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Hierarchy of FSD concepts, described below",src:s(1021).A+"",width:"1355",height:"754"})}),(0,i.jsxs)("figcaption",{style:{fontStyle:"italic",fontSize:"0.9em"},children:[(0,i.jsx)("p",{children:'Pictured above: three pillars, labeled left to right as "Layers", "Slices", and "Segments" respectively.'}),(0,i.jsx)("p",{children:'The "Layers" pillar contains seven divisions arranged top to bottom and labeled "app", "processes", "pages", "widgets", "features", "entities", and "shared". The "processes" division is crossed out. The "entities" division is connected to the second pillar "Slices" in a way that conveys that the second pillar is the content of "entities".'}),(0,i.jsx)("p",{children:'The "Slices" pillar contains three divisions arranged top to bottom and labeled "user", "post", and "comment". The "post" division is connected to the third pillar "Segments" in the same way such that it\'s the content of "post".'}),(0,i.jsx)("p",{children:'The "Segments" pillar contains three divisions, arranged top to bottom and labeled "ui", "model", and "api".'})]})]}),"\n",(0,i.jsx)(n.h3,{id:"layers",children:"Layers"}),"\n",(0,i.jsx)(n.p,{children:"Layers are standardized across all FSD projects. You don't have to use all of the layers, but their names are important. There are currently seven of them (from top to bottom):"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"App* \u2014 everything that makes the app run \u2014 routing, entrypoints, global styles, providers."}),"\n",(0,i.jsx)(n.li,{children:"Processes (deprecated) \u2014 complex inter-page scenarios."}),"\n",(0,i.jsx)(n.li,{children:"Pages \u2014 full pages or large parts of a page in nested routing."}),"\n",(0,i.jsx)(n.li,{children:"Widgets \u2014 large self-contained chunks of functionality or UI, usually delivering an entire use case."}),"\n",(0,i.jsxs)(n.li,{children:["Features \u2014 ",(0,i.jsx)(n.em,{children:"reused"})," implementations of entire product features, i.e. actions that bring business value to the user."]}),"\n",(0,i.jsxs)(n.li,{children:["Entities \u2014 business entities that the project works with, like ",(0,i.jsx)(n.code,{children:"user"})," or ",(0,i.jsx)(n.code,{children:"product"}),"."]}),"\n",(0,i.jsx)(n.li,{children:"Shared* \u2014 reusable functionality, especially when it's detached from the specifics of the project/business, though not necessarily."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"* \u2014 these layers, App and Shared, unlike the other layers, don't have slices, and are made up of segments directly."})}),"\n",(0,i.jsx)(n.p,{children:"The trick with layers is that modules on one layer can only know about and import from modules from the layers strictly below."}),"\n",(0,i.jsx)(n.h3,{id:"slices",children:"Slices"}),"\n",(0,i.jsx)(n.p,{children:"Next up are slices, which partition the code by business domain. You're free to choose any names for them, and create as many as you wish. Slices make your codebase easier to navigate by keeping logically related modules close together."}),"\n",(0,i.jsx)(n.p,{children:"Slices cannot use other slices on the same layer, and that helps with high cohesion and low coupling."}),"\n",(0,i.jsx)(n.h3,{id:"segments",children:"Segments"}),"\n",(0,i.jsx)(n.p,{children:"Slices, as well as layers App and Shared, consist of segments, and segments group your code by its purpose. Segment names are not constrained by the standard, but there are several conventional names for the most common purposes:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"ui"})," \u2014 everything related to UI display: UI components, date formatters, styles, etc."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"api"})," \u2014 backend interactions: request functions, data types, mappers, etc."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"model"})," \u2014 the data model: schemas, interfaces, stores, and business logic."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"lib"})," \u2014 library code that other modules on this slice need."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"config"})," \u2014 configuration files and feature flags."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Usually these segments are enough for most layers, you would only create your own segments in Shared or App, but this is not a rule."}),"\n",(0,i.jsx)(n.h2,{id:"advantages",children:"Advantages"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Uniformity"}),(0,i.jsx)(n.br,{}),"\n","Since the structure is standardized, projects become more uniform, which makes onboarding new members easier for the team."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Stability in face of changes and refactoring"}),(0,i.jsx)(n.br,{}),"\n","A module on one layer cannot use other modules on the same layer, or the layers above.",(0,i.jsx)(n.br,{}),"\n","This allows you to make isolated modifications without unforeseen consequences to the rest of the app."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Controlled reuse of logic"}),(0,i.jsx)(n.br,{}),"\n","Depending on the layer, you can make code very reusable or very local.",(0,i.jsx)(n.br,{}),"\n","This keeps a balance between following the ",(0,i.jsx)(n.strong,{children:"DRY"})," principle and practicality."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Orientation to business and users needs"}),(0,i.jsx)(n.br,{}),"\n","The app is split into business domains and usage of the business language is encouraged in naming, so that you can do useful product work without fully understanding all other unrelated parts of the project."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"incremental-adoption",children:"Incremental adoption"}),"\n",(0,i.jsx)(n.p,{children:"If you have an existing codebase that you want to migrate to FSD, we suggest the following strategy. We found it useful in our own migration experience."}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Start by slowly shaping up the App and Shared layers module-by-module to create a foundation."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Distribute all of the existing UI across Widgets and Pages using broad strokes, even if they have dependencies that violate the rules of FSD."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Start gradually resolving import violations and also extracting Entities and possibly even Features."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"It's advised to refrain from adding new large entities while refactoring or refactoring only certain parts of the project."}),"\n",(0,i.jsx)(n.h2,{id:"next-steps",children:"Next steps"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Want to get a good grasp of how to think in FSD?"})," Check out the ",(0,i.jsx)(n.a,{href:"/docs/get-started/tutorial",children:"Tutorial"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Prefer to learn from examples?"})," We have a lot in the ",(0,i.jsx)(n.a,{href:"/examples",children:"Examples"})," section."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Have questions?"})," Drop by our ",(0,i.jsx)(n.a,{href:"https://t.me/feature_sliced",children:"Telegram chat"})," and get help from the community."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1021:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/visual_schema-e826067f573946613dcdc76e3f585082.jpg"},5710:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>a});var i=s(758);const t={},r=i.createContext(t);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[3120],{8715:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var i=s(6070),t=s(5710);const r={sidebar_position:1},o="Overview",a={id:"get-started/overview",title:"Overview",description:"Feature-Sliced Design (FSD) is an architectural methodology for scaffolding front-end applications. Simply put, it's a compilation of rules and conventions on organizing code. The main purpose of this methodology is to make the project more understandable and stable in the face of ever-changing business requirements.",source:"@site/i18n/en/docusaurus-plugin-content-docs/current/get-started/overview.mdx",sourceDirName:"get-started",slug:"/get-started/overview",permalink:"/docs/get-started/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/en/docusaurus-plugin-content-docs/current/get-started/overview.mdx",tags:[],version:"current",lastUpdatedAt:1727540389e3,sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"getstartedSidebar",previous:{title:"\ud83d\ude80 Get Started",permalink:"/docs/get-started/"},next:{title:"Tutorial",permalink:"/docs/get-started/tutorial"}},l={},d=[{value:"Is it right for me?",id:"is-it-right-for-me",level:2},{value:"Basic example",id:"basic-example",level:2},{value:"Concepts",id:"concepts",level:2},{value:"Layers",id:"layers",level:3},{value:"Slices",id:"slices",level:3},{value:"Segments",id:"segments",level:3},{value:"Advantages",id:"advantages",level:2},{value:"Incremental adoption",id:"incremental-adoption",level:2},{value:"Next steps",id:"next-steps",level:2}];function c(e){const n={a:"a",br:"br",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"overview",children:"Overview"})}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Feature-Sliced Design"})," (FSD) is an architectural methodology for scaffolding front-end applications. Simply put, it's a compilation of rules and conventions on organizing code. The main purpose of this methodology is to make the project more understandable and stable in the face of ever-changing business requirements."]}),"\n",(0,i.jsxs)(n.p,{children:["Apart from a set of conventions, FSD is also a toolchain. We have a ",(0,i.jsx)(n.a,{href:"https://github.com/feature-sliced/steiger",children:"linter"})," to check your project's architecture, ",(0,i.jsx)(n.a,{href:"https://github.com/feature-sliced/awesome?tab=readme-ov-file#tools",children:"folder generators"})," through a CLI or IDEs, as well as a rich library of ",(0,i.jsx)(n.a,{href:"/examples",children:"examples"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"is-it-right-for-me",children:"Is it right for me?"}),"\n",(0,i.jsx)(n.p,{children:"FSD can be implemented in projects and teams of any size. It is right for your project if:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["You're doing ",(0,i.jsx)(n.strong,{children:"frontend"})," (UI on web, mobile, desktop, etc.)"]}),"\n",(0,i.jsxs)(n.li,{children:["You're building an ",(0,i.jsx)(n.strong,{children:"application"}),", not a library"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"And that's it! There are no restrictions on what programming language, UI framework, or state manager you use. You can also adopt FSD incrementally, use it in monorepos, and scale to great lengths by breaking your app into packages and implementing FSD individually within them."}),"\n",(0,i.jsxs)(n.p,{children:["If you already have an architecture and you're considering a switch to FSD, make sure that the current architecture is ",(0,i.jsx)(n.strong,{children:"causing trouble"})," in your team. For example, if your project has grown too large and inter-connected to efficiently implement new features, or if you're expecting a lot of new members to join the team. If the current architecture works, maybe it's not worth changing. But if you do decide to migrate, see the ",(0,i.jsx)(n.a,{href:"/docs/guides/migration/from-legacy",children:"Migration"})," section for guidance."]}),"\n",(0,i.jsx)(n.h2,{id:"basic-example",children:"Basic example"}),"\n",(0,i.jsx)(n.p,{children:"Here is a simple project that implements FSD:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 app"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 pages"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 shared"})}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["These top-level folders are called ",(0,i.jsx)(n.em,{children:"layers"}),". Let's look deeper:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"\ud83d\udcc2 app"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 routes"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 analytics"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"\ud83d\udcc2 pages"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 home"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"\ud83d\udcc2 article-reader"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 ui"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 api"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 settings"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"\ud83d\udcc2 shared"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 ui"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 api"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Folders inside ",(0,i.jsx)(n.code,{children:"\ud83d\udcc2 pages"})," are called ",(0,i.jsx)(n.em,{children:"slices"}),". They divide the layer by domain (in this case, by pages)."]}),"\n",(0,i.jsxs)(n.p,{children:["Folders inside ",(0,i.jsx)(n.code,{children:"\ud83d\udcc2 app"}),", ",(0,i.jsx)(n.code,{children:"\ud83d\udcc2 shared"}),", and ",(0,i.jsx)(n.code,{children:"\ud83d\udcc2 pages/article-reader"})," are called ",(0,i.jsx)(n.em,{children:"segments"}),", and they divide slices (or layers) by technical purpose, i.e. what the code is for."]}),"\n",(0,i.jsx)(n.h2,{id:"concepts",children:"Concepts"}),"\n",(0,i.jsx)(n.p,{children:"Layers, slices, and segments form a hierarchy like this:"}),"\n",(0,i.jsxs)("figure",{children:[(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Hierarchy of FSD concepts, described below",src:s(1021).A+"",width:"1355",height:"754"})}),(0,i.jsxs)("figcaption",{style:{fontStyle:"italic",fontSize:"0.9em"},children:[(0,i.jsx)("p",{children:'Pictured above: three pillars, labeled left to right as "Layers", "Slices", and "Segments" respectively.'}),(0,i.jsx)("p",{children:'The "Layers" pillar contains seven divisions arranged top to bottom and labeled "app", "processes", "pages", "widgets", "features", "entities", and "shared". The "processes" division is crossed out. The "entities" division is connected to the second pillar "Slices" in a way that conveys that the second pillar is the content of "entities".'}),(0,i.jsx)("p",{children:'The "Slices" pillar contains three divisions arranged top to bottom and labeled "user", "post", and "comment". The "post" division is connected to the third pillar "Segments" in the same way such that it\'s the content of "post".'}),(0,i.jsx)("p",{children:'The "Segments" pillar contains three divisions, arranged top to bottom and labeled "ui", "model", and "api".'})]})]}),"\n",(0,i.jsx)(n.h3,{id:"layers",children:"Layers"}),"\n",(0,i.jsx)(n.p,{children:"Layers are standardized across all FSD projects. You don't have to use all of the layers, but their names are important. There are currently seven of them (from top to bottom):"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"App* \u2014 everything that makes the app run \u2014 routing, entrypoints, global styles, providers."}),"\n",(0,i.jsx)(n.li,{children:"Processes (deprecated) \u2014 complex inter-page scenarios."}),"\n",(0,i.jsx)(n.li,{children:"Pages \u2014 full pages or large parts of a page in nested routing."}),"\n",(0,i.jsx)(n.li,{children:"Widgets \u2014 large self-contained chunks of functionality or UI, usually delivering an entire use case."}),"\n",(0,i.jsxs)(n.li,{children:["Features \u2014 ",(0,i.jsx)(n.em,{children:"reused"})," implementations of entire product features, i.e. actions that bring business value to the user."]}),"\n",(0,i.jsxs)(n.li,{children:["Entities \u2014 business entities that the project works with, like ",(0,i.jsx)(n.code,{children:"user"})," or ",(0,i.jsx)(n.code,{children:"product"}),"."]}),"\n",(0,i.jsx)(n.li,{children:"Shared* \u2014 reusable functionality, especially when it's detached from the specifics of the project/business, though not necessarily."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"* \u2014 these layers, App and Shared, unlike the other layers, don't have slices, and are made up of segments directly."})}),"\n",(0,i.jsx)(n.p,{children:"The trick with layers is that modules on one layer can only know about and import from modules from the layers strictly below."}),"\n",(0,i.jsx)(n.h3,{id:"slices",children:"Slices"}),"\n",(0,i.jsx)(n.p,{children:"Next up are slices, which partition the code by business domain. You're free to choose any names for them, and create as many as you wish. Slices make your codebase easier to navigate by keeping logically related modules close together."}),"\n",(0,i.jsx)(n.p,{children:"Slices cannot use other slices on the same layer, and that helps with high cohesion and low coupling."}),"\n",(0,i.jsx)(n.h3,{id:"segments",children:"Segments"}),"\n",(0,i.jsx)(n.p,{children:"Slices, as well as layers App and Shared, consist of segments, and segments group your code by its purpose. Segment names are not constrained by the standard, but there are several conventional names for the most common purposes:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"ui"})," \u2014 everything related to UI display: UI components, date formatters, styles, etc."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"api"})," \u2014 backend interactions: request functions, data types, mappers, etc."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"model"})," \u2014 the data model: schemas, interfaces, stores, and business logic."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"lib"})," \u2014 library code that other modules on this slice need."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"config"})," \u2014 configuration files and feature flags."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Usually these segments are enough for most layers, you would only create your own segments in Shared or App, but this is not a rule."}),"\n",(0,i.jsx)(n.h2,{id:"advantages",children:"Advantages"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Uniformity"}),(0,i.jsx)(n.br,{}),"\n","Since the structure is standardized, projects become more uniform, which makes onboarding new members easier for the team."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Stability in face of changes and refactoring"}),(0,i.jsx)(n.br,{}),"\n","A module on one layer cannot use other modules on the same layer, or the layers above.",(0,i.jsx)(n.br,{}),"\n","This allows you to make isolated modifications without unforeseen consequences to the rest of the app."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Controlled reuse of logic"}),(0,i.jsx)(n.br,{}),"\n","Depending on the layer, you can make code very reusable or very local.",(0,i.jsx)(n.br,{}),"\n","This keeps a balance between following the ",(0,i.jsx)(n.strong,{children:"DRY"})," principle and practicality."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Orientation to business and users needs"}),(0,i.jsx)(n.br,{}),"\n","The app is split into business domains and usage of the business language is encouraged in naming, so that you can do useful product work without fully understanding all other unrelated parts of the project."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"incremental-adoption",children:"Incremental adoption"}),"\n",(0,i.jsx)(n.p,{children:"If you have an existing codebase that you want to migrate to FSD, we suggest the following strategy. We found it useful in our own migration experience."}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Start by slowly shaping up the App and Shared layers module-by-module to create a foundation."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Distribute all of the existing UI across Widgets and Pages using broad strokes, even if they have dependencies that violate the rules of FSD."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Start gradually resolving import violations and also extracting Entities and possibly even Features."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"It's advised to refrain from adding new large entities while refactoring or refactoring only certain parts of the project."}),"\n",(0,i.jsx)(n.h2,{id:"next-steps",children:"Next steps"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Want to get a good grasp of how to think in FSD?"})," Check out the ",(0,i.jsx)(n.a,{href:"/docs/get-started/tutorial",children:"Tutorial"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Prefer to learn from examples?"})," We have a lot in the ",(0,i.jsx)(n.a,{href:"/examples",children:"Examples"})," section."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Have questions?"})," Drop by our ",(0,i.jsx)(n.a,{href:"https://t.me/feature_sliced",children:"Telegram chat"})," and get help from the community."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1021:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/visual_schema-e826067f573946613dcdc76e3f585082.jpg"},5710:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>a});var i=s(758);const t={},r=i.createContext(t);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0a4ee302.5961eb37.js b/assets/js/0a4ee302.aaae57ae.js similarity index 98% rename from assets/js/0a4ee302.5961eb37.js rename to assets/js/0a4ee302.aaae57ae.js index a7019d7c26..77fef38739 100644 --- a/assets/js/0a4ee302.5961eb37.js +++ b/assets/js/0a4ee302.aaae57ae.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[5977],{2009:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var s=t(6070),i=t(5710);const o={sidebar_position:10},r="Usage with NuxtJS",c={id:"guides/tech/with-nuxtjs",title:"Usage with NuxtJS",description:"It is possible to implement FSD in a NuxtJS project, but conflicts arise due to the differences between NuxtJS project structure requirements and FSD principles:",source:"@site/i18n/en/docusaurus-plugin-content-docs/current/guides/tech/with-nuxtjs.mdx",sourceDirName:"guides/tech",slug:"/guides/tech/with-nuxtjs",permalink:"/docs/guides/tech/with-nuxtjs",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/en/docusaurus-plugin-content-docs/current/guides/tech/with-nuxtjs.mdx",tags:[],version:"current",lastUpdatedAt:1727030144e3,sidebarPosition:10,frontMatter:{sidebar_position:10},sidebar:"guidesSidebar",previous:{title:"Usage with NextJS",permalink:"/docs/guides/tech/with-nextjs"},next:{title:"Usage with React Query",permalink:"/docs/guides/tech/with-react-query"}},a={},d=[{value:"Adding an alias for the src directory",id:"adding-an-alias-for-the-src-directory",level:2},{value:"Choose how to configure the router",id:"choose-how-to-configure-the-router",level:2},{value:"Routing using config",id:"routing-using-config",level:3},{value:"File Routing",id:"file-routing",level:3},{value:"What to do with layouts?",id:"what-to-do-with-layouts",level:2},{value:"See also",id:"see-also",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"usage-with-nuxtjs",children:"Usage with NuxtJS"})}),"\n",(0,s.jsx)(n.p,{children:"It is possible to implement FSD in a NuxtJS project, but conflicts arise due to the differences between NuxtJS project structure requirements and FSD principles:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Initially, NuxtJS offers a project file structure without a ",(0,s.jsx)(n.code,{children:"src"})," folder, i.e. in the root of the project."]}),"\n",(0,s.jsxs)(n.li,{children:["The file routing is in the ",(0,s.jsx)(n.code,{children:"pages"})," folder, while in FSD this folder is reserved for the flat slice structure."]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"adding-an-alias-for-the-src-directory",children:["Adding an alias for the ",(0,s.jsx)(n.code,{children:"src"})," directory"]}),"\n",(0,s.jsxs)(n.p,{children:["Add an ",(0,s.jsx)(n.code,{children:"alias"})," object to your config:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",metastring:'title="nuxt.config.ts"',children:"export default defineNuxtConfig({\n devtools: { enabled: true }, // Not FSD related, enabled at project startup\n alias: {\n \"@\": '../src'\n },\n})\n"})}),"\n",(0,s.jsx)(n.h2,{id:"choose-how-to-configure-the-router",children:"Choose how to configure the router"}),"\n",(0,s.jsxs)(n.p,{children:["In NuxtJS, there are two ways to customize the routing - using a config and using a file structure.\nIn the case of file-based routing, you will create index.vue files in folders inside the app/routes directory, and in the case of configure, you will configure the routers in the ",(0,s.jsx)(n.code,{children:"router.options.ts"})," file."]}),"\n",(0,s.jsx)(n.h3,{id:"routing-using-config",children:"Routing using config"}),"\n",(0,s.jsxs)(n.p,{children:["In the ",(0,s.jsx)(n.code,{children:"app"})," layer, create a ",(0,s.jsx)(n.code,{children:"router.options.ts"})," file, and export a config object from it:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",metastring:'title="app/router.options.ts"',children:"import type { RouterConfig } from '@nuxt/schema';\n\nexport default {\n routes: (_routes) => [],\n};\n\n"})}),"\n",(0,s.jsxs)(n.p,{children:["To add a ",(0,s.jsx)(n.code,{children:"Home"})," page to your project, you need to do the following steps:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Add a page slice inside the ",(0,s.jsx)(n.code,{children:"pages"})," layer"]}),"\n",(0,s.jsxs)(n.li,{children:["Add the appropriate route to the ",(0,s.jsx)(n.code,{children:"app/router.config.ts"})," config"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["To create a page slice, let's use the ",(0,s.jsx)(n.a,{href:"https://github.com/feature-sliced/cli",children:"CLI"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",children:"fsd pages home\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Create a ",(0,s.jsx)(n.code,{children:"home-page.vue"})," file inside the ui segment, access it using the Public API"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",metastring:'title="src/pages/home/index.ts"',children:"export { default as HomePage } from './ui/home-page';\n"})}),"\n",(0,s.jsx)(n.p,{children:"Thus, the file structure will look like this:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",children:"|\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 app\n\u2502 \u2502 \u251c\u2500\u2500 router.config.ts\n\u2502 \u251c\u2500\u2500 pages\n\u2502 \u2502 \u251c\u2500\u2500 home\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 ui\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 home-page.vue\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 index.ts\n"})}),"\n",(0,s.jsx)(n.p,{children:"Finally, let's add a root to the config:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",metastring:'title="app/router.config.ts"',children:"import type { RouterConfig } from '@nuxt/schema'\n\nexport default {\n routes: (_routes) => [\n {\n name: 'home',\n path: '/',\n component: () => import('@/pages/home.vue').then(r => r.default || r)\n }\n ],\n}\n"})}),"\n",(0,s.jsx)(n.h3,{id:"file-routing",children:"File Routing"}),"\n",(0,s.jsxs)(n.p,{children:["First of all, create a ",(0,s.jsx)(n.code,{children:"src"})," directory in the root of your project, and create app and pages layers inside this directory and a routes folder inside the app layer.\nThus, your file structure should look like this:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",children:"\u251c\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 app\n\u2502 \u2502 \u251c\u2500\u2500 routes\n\u2502 \u251c\u2500\u2500 pages # Pages folder, related to FSD\n"})}),"\n",(0,s.jsxs)(n.p,{children:["In order for NuxtJS to use the routes folder inside the ",(0,s.jsx)(n.code,{children:"app"})," layer for file routing, you need to modify ",(0,s.jsx)(n.code,{children:"nuxt.config.ts"})," as follows:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",metastring:'title="nuxt.config.ts"',children:"export default defineNuxtConfig({\n devtools: { enabled: true }, // Not FSD related, enabled at project startup\n alias: {\n \"@\": '../src'\n },\n dir: {\n pages: './src/app/routes'\n }\n})\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Now, you can create routes for pages within ",(0,s.jsx)(n.code,{children:"app"})," and connect pages from ",(0,s.jsx)(n.code,{children:"pages"})," to them."]}),"\n",(0,s.jsxs)(n.p,{children:["For example, to add a ",(0,s.jsx)(n.code,{children:"Home"})," page to your project, you need to do the following steps:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Add a page slice inside the ",(0,s.jsx)(n.code,{children:"pages"})," layer"]}),"\n",(0,s.jsxs)(n.li,{children:["Add the corresponding root inside the ",(0,s.jsx)(n.code,{children:"app"})," layer"]}),"\n",(0,s.jsx)(n.li,{children:"Align the page from the slice with the root"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["To create a page slice, let's use the ",(0,s.jsx)(n.a,{href:"https://github.com/feature-sliced/cli",children:"CLI"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",children:"fsd pages home\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Create a ",(0,s.jsx)(n.code,{children:"home-page.vue"})," file inside the ui segment, access it using the Public API"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",metastring:'title="src/pages/home/index.ts"',children:"export { default as HomePage } from './ui/home-page';\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Create a root for this page inside the ",(0,s.jsx)(n.code,{children:"app"})," layer:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",children:"\n\u251c\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 app\n\u2502 \u2502 \u251c\u2500\u2500 routes\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 index.vue\n\u2502 \u251c\u2500\u2500 pages\n\u2502 \u2502 \u251c\u2500\u2500 home\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 ui\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 home-page.vue\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 index.ts\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Add your page component inside the ",(0,s.jsx)(n.code,{children:"index.vue"})," file:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-html",metastring:'title="src/app/routes/index.vue"',children:" - + + -
Skip to main content

🌎 FSD international community

· 2 min read
Anton Medvedev
FSD core-team member
post-cover
+

💥 FSD rebranding!

· 2 min read
Ilya Azin
FSD core-team member
logo-primary
diff --git a/blog/archive.html b/blog/archive.html index ae16d75369..b5a049af45 100644 --- a/blog/archive.html +++ b/blog/archive.html @@ -9,10 +9,10 @@ - - + + - + \ No newline at end of file diff --git a/blog/international-community.html b/blog/international-community.html index f1e587f17e..19a23b1167 100644 --- a/blog/international-community.html +++ b/blog/international-community.html @@ -9,11 +9,11 @@ - - + + -

🌎 FSD international community

· 2 min read
Anton Medvedev
FSD core-team member
post-cover
+

🌎 FSD international community

· 2 min read
Anton Medvedev
FSD core-team member
post-cover

TLDR:

FSD goes out into the world, and the beginning of this is the international Discord-server

FSD выходит в мир, и началом послужит международный Discord-сервер

diff --git a/blog/rebranding-stable.html b/blog/rebranding-stable.html index 63b7ee5691..a991766d14 100644 --- a/blog/rebranding-stable.html +++ b/blog/rebranding-stable.html @@ -9,11 +9,11 @@ - - + + -

💥 FSD rebranding!

· 2 min read
Ilya Azin
FSD core-team member
logo-primary
+

💥 FSD rebranding!

· 2 min read
Ilya Azin
FSD core-team member
logo-primary

TLDR:

We've made whole new identity for FSD website and all related projects, feel free to use brand assets

Мы сделали полностью новую айдентику для сайта FSD и всех связанных проектов, не стесняйтесь пользоваться фирменными ассетами

diff --git a/blog/tags.html b/blog/tags.html index 3f5c1e863a..385850b56c 100644 --- a/blog/tags.html +++ b/blog/tags.html @@ -9,10 +9,10 @@ - - + + - + \ No newline at end of file diff --git a/blog/tags/brand.html b/blog/tags/brand.html index 036b9a1a6c..7b80424fd2 100644 --- a/blog/tags/brand.html +++ b/blog/tags/brand.html @@ -9,11 +9,11 @@ - - + + -

One post tagged with "brand"

View All Tags

💥 FSD rebranding!

· 2 min read
Ilya Azin
FSD core-team member
logo-primary
+

One post tagged with "brand"

View All Tags
diff --git a/blog/tags/community.html b/blog/tags/community.html index 3a62103157..cbd17e3544 100644 --- a/blog/tags/community.html +++ b/blog/tags/community.html @@ -9,11 +9,11 @@ - - + + -

One post tagged with "community"

View All Tags

🌎 FSD international community

· 2 min read
Anton Medvedev
FSD core-team member
post-cover
+

One post tagged with "community"

View All Tags
diff --git a/blog/tags/discord.html b/blog/tags/discord.html index 808561f72d..38b0420af6 100644 --- a/blog/tags/discord.html +++ b/blog/tags/discord.html @@ -9,11 +9,11 @@ - - + + -

One post tagged with "discord"

View All Tags

🌎 FSD international community

· 2 min read
Anton Medvedev
FSD core-team member
post-cover
+

One post tagged with "discord"

View All Tags
diff --git a/blog/tags/promo.html b/blog/tags/promo.html index 0d015ef7e6..d26f694f51 100644 --- a/blog/tags/promo.html +++ b/blog/tags/promo.html @@ -9,11 +9,11 @@ - - + + -

2 posts tagged with "promo"

View All Tags

🌎 FSD international community

· 2 min read
Anton Medvedev
FSD core-team member
post-cover
+

2 posts tagged with "promo"

View All Tags

💥 FSD rebranding!

· 2 min read
Ilya Azin
FSD core-team member
logo-primary
diff --git a/community.html b/community.html index 1282dedb55..0b94c611e7 100644 --- a/community.html +++ b/community.html @@ -9,17 +9,17 @@ - - + + -

💫 Community

+ +
Contributing

HowTo, Workflow, Support

\ No newline at end of file diff --git a/community/team.html b/community/team.html index a55fe0ba49..009219cfb4 100644 --- a/community/team.html +++ b/community/team.html @@ -9,15 +9,15 @@ - - + + -

Team

+ +

Companies

\ No newline at end of file diff --git a/docs.html b/docs.html index 4b70df0f90..bfc18bd567 100644 --- a/docs.html +++ b/docs.html @@ -9,11 +9,11 @@ - - + + -

Documentation

+ +
🛠 Examples

Projects built with Feature-Sliced Design

\ No newline at end of file diff --git a/docs/about.html b/docs/about.html index a4c08dc37e..610860b5fb 100644 --- a/docs/about.html +++ b/docs/about.html @@ -9,11 +9,11 @@ - - + + -

🍰 About

+ +
Promote

About promotion and integration FSD at companies

Integration • Promoting in team • Promoting in company
\ No newline at end of file diff --git a/docs/about/alternatives.html b/docs/about/alternatives.html index e4d76086ce..f66c871fe6 100644 --- a/docs/about/alternatives.html +++ b/docs/about/alternatives.html @@ -9,11 +9,11 @@ - - + + -

Alternatives

+ +
\ No newline at end of file diff --git a/docs/about/mission.html b/docs/about/mission.html index 844c8f2399..05a7245417 100644 --- a/docs/about/mission.html +++ b/docs/about/mission.html @@ -9,11 +9,11 @@ - - + + -

Mission

+ +
\ No newline at end of file diff --git a/docs/about/motivation.html b/docs/about/motivation.html index f403b80391..5c011eaaa0 100644 --- a/docs/about/motivation.html +++ b/docs/about/motivation.html @@ -9,11 +9,11 @@ - - + + -

Motivation

+
+
\ No newline at end of file diff --git a/docs/about/promote/for-company.html b/docs/about/promote/for-company.html index c0b2bd13cc..c363d0c1bc 100644 --- a/docs/about/promote/for-company.html +++ b/docs/about/promote/for-company.html @@ -9,17 +9,17 @@ - - + + -

Promote in company

+

Promote in company

WIP

The article is in the process of writing

To bring the release of the article closer, you can:


🍰 Stay tuned!

Do the project and the company need a methodology?

About the justification of the application, Those duty

How can I submit a methodology to a business?

-

How to prepare and justify a plan to move to the methodology?

+

How to prepare and justify a plan to move to the methodology?

\ No newline at end of file diff --git a/docs/about/promote/for-team.html b/docs/about/promote/for-team.html index 610e99c1f3..69193328a0 100644 --- a/docs/about/promote/for-team.html +++ b/docs/about/promote/for-team.html @@ -9,11 +9,11 @@ - - + + -

Promote in team

+ +
\ No newline at end of file diff --git a/docs/about/promote/integration.html b/docs/about/promote/integration.html index 0fa5491d14..bade403ebe 100644 --- a/docs/about/promote/integration.html +++ b/docs/about/promote/integration.html @@ -9,11 +9,11 @@ - - + + -

Integration aspects

+ +
\ No newline at end of file diff --git a/docs/about/promote/partial-application.html b/docs/about/promote/partial-application.html index f4abafd3c3..aa470841e4 100644 --- a/docs/about/promote/partial-application.html +++ b/docs/about/promote/partial-application.html @@ -9,14 +9,14 @@ - - + + -

Partial Application

+
+
\ No newline at end of file diff --git a/docs/about/understanding/abstractions.html b/docs/about/understanding/abstractions.html index d1f0cf83c6..b9885cacc9 100644 --- a/docs/about/understanding/abstractions.html +++ b/docs/about/understanding/abstractions.html @@ -9,11 +9,11 @@ - - + + -

Abstractions

+ +
\ No newline at end of file diff --git a/docs/about/understanding/architecture.html b/docs/about/understanding/architecture.html index 77cdc3fe39..19923e43ab 100644 --- a/docs/about/understanding/architecture.html +++ b/docs/about/understanding/architecture.html @@ -9,11 +9,11 @@ - - + + -

About architecture

+ +
\ No newline at end of file diff --git a/docs/about/understanding/knowledge-types.html b/docs/about/understanding/knowledge-types.html index 4233c31d34..d80a8bc24e 100644 --- a/docs/about/understanding/knowledge-types.html +++ b/docs/about/understanding/knowledge-types.html @@ -9,11 +9,11 @@ - - + + -

Knowledge types in the project

+ +
\ No newline at end of file diff --git a/docs/about/understanding/naming.html b/docs/about/understanding/naming.html index 48c1d0a6e2..20350c7c2b 100644 --- a/docs/about/understanding/naming.html +++ b/docs/about/understanding/naming.html @@ -9,11 +9,11 @@ - - + + -

Naming

+ +
\ No newline at end of file diff --git a/docs/about/understanding/needs-driven.html b/docs/about/understanding/needs-driven.html index 2be0c6b6d2..e42d90bb45 100644 --- a/docs/about/understanding/needs-driven.html +++ b/docs/about/understanding/needs-driven.html @@ -9,11 +9,11 @@ - - + + -

Needs driven

+

Needs driven

TL;DR

Can't you formulate the goal that the new feature will solve? Or maybe the problem is that the task itself is not formulated? The point is also that the methodology helps to pull out the problematic definition of tasks and goals

project does not live in static - requirements and functionality are constantly changing. Over time, the code turns into mush, because at the start the project was designed only for the initial impression of wishes. And the task of a good architecture is also to be sharpened for changing development conditions.

Why?

To choose a clear name for an entity and understand its components, you need to clearly understand what task will be solved with the help of all this code.

@@ -128,6 +128,6 @@

See also(Discussion) How to break the functionality and what it is
  • (Article) "How to better organize your applications"
  • -

    +
    \ No newline at end of file diff --git a/docs/about/understanding/signals.html b/docs/about/understanding/signals.html index 6af1e2e1a1..749e780019 100644 --- a/docs/about/understanding/signals.html +++ b/docs/about/understanding/signals.html @@ -9,11 +9,11 @@ - - + + -

    Signals of architecture

    +

    Signals of architecture

    WIP

    The article is in the process of writing

    To bring the release of the article closer, you can:


    🍰 Stay tuned!

    If there is a limitation on the part of the architecture, then there are obvious reasons for this, and consequences if they are ignored

    @@ -27,6 +27,6 @@

    See also(Thread) About the fundamental nature of architecture
  • (Thread) About highlighting weak points
  • (Thread) How to understand that the data model is swollen
  • -

    +
    \ No newline at end of file diff --git a/docs/branding.html b/docs/branding.html index 71ec91e388..2f21568665 100644 --- a/docs/branding.html +++ b/docs/branding.html @@ -9,11 +9,11 @@ - - + + -

    Branding Guidelines

    +

    Branding Guidelines

    FSD's visual identity is based on its core-concepts: Layered, Sliced self-contained parts, Parts & Compose, Segmented. But also we tend to design simple, pretty identity, which should convey the FSD philisophy and be easy to recognize.

    Please, use FSD's identity "as-is", without changes but with our assets for your comfort. This brand guide will help you to use FSD's identity correctly.

    @@ -43,6 +43,6 @@

    See alsoDiscussion (github)
  • History of development with references (figma)
  • Rebranding demo
  • -

    +
    \ No newline at end of file diff --git a/docs/get-started.html b/docs/get-started.html index 4f4fdfa362..f88ebfbb43 100644 --- a/docs/get-started.html +++ b/docs/get-started.html @@ -9,15 +9,15 @@ - - + + -

    🚀 Get Started

    +
    +
    \ No newline at end of file diff --git a/docs/get-started/cheatsheet.html b/docs/get-started/cheatsheet.html index a05186ff58..a207afeacc 100644 --- a/docs/get-started/cheatsheet.html +++ b/docs/get-started/cheatsheet.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Decomposition cheatsheet

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Decomposition cheatsheet

    Use this as a quick reference when you're deciding how to decompose your UI. PDF versions are also available below, so you can print it out and keep one under your pillow.

    Choosing a layer

    Download PDF

    @@ -33,6 +33,6 @@

    See also(Thread) About the difference between features and entities
  • (Thread) About the difference between things and entities (2)
  • (Thread) About the application of criteria for decomposition
  • -

    +
    \ No newline at end of file diff --git a/docs/get-started/faq.html b/docs/get-started/faq.html index 661bc38233..3bc9b9cf59 100644 --- a/docs/get-started/faq.html +++ b/docs/get-started/faq.html @@ -9,11 +9,11 @@ - - + + -

    FAQ

    + +

    Answered here

    \ No newline at end of file diff --git a/docs/get-started/overview.html b/docs/get-started/overview.html index 73d833df7b..cc0a9464ac 100644 --- a/docs/get-started/overview.html +++ b/docs/get-started/overview.html @@ -9,11 +9,11 @@ - - + + -

    Overview

    +

    Overview

    Feature-Sliced Design (FSD) is an architectural methodology for scaffolding front-end applications. Simply put, it's a compilation of rules and conventions on organizing code. The main purpose of this methodology is to make the project more understandable and stable in the face of ever-changing business requirements.

    Apart from a set of conventions, FSD is also a toolchain. We have a linter to check your project's architecture, folder generators through a CLI or IDEs, as well as a rich library of examples.

    Is it right for me?

    @@ -129,6 +129,6 @@

    Next stepsWant to get a good grasp of how to think in FSD? Check out the Tutorial.
  • Prefer to learn from examples? We have a lot in the Examples section.
  • Have questions? Drop by our Telegram chat and get help from the community.
  • -

    +
    \ No newline at end of file diff --git a/docs/get-started/tutorial.html b/docs/get-started/tutorial.html index 02dd955226..0ca2ba5282 100644 --- a/docs/get-started/tutorial.html +++ b/docs/get-started/tutorial.html @@ -9,11 +9,11 @@ - - + + -

    Tutorial

    +

    Tutorial

    Part 1. On paper

    This tutorial will examine the Real World App, also known as Conduit. Conduit is a basic Medium clone — it lets you read and write articles as well as comment on the articles of others.

    Conduit home page

    @@ -272,6 +272,6 @@

    Article edito
    app/routes/editor._index.tsx, app/routes/editor.$slug.tsx (same content)
    import { ArticleEditPage } from "pages/article-edit";

    export { loader, action } from "pages/article-edit";

    export default ArticleEditPage;

    We’re done now! Log in and try creating a new article. Or “forget” to write the article and see the validation kick in.

    The Conduit article editor, with the title field saying “New article” and the rest of the fields empty. Above the form there are two errors: “Describe what this article is about” and “Write the article itself”.

    The Conduit article editor, with the title field saying “New article” and the rest of the fields empty. Above the form there are two errors: “Describe what this article is about” and “Write the article itself”.
    -

    The profile and settings pages are very similar to the article reader and editor, they are left as an exercise for the reader, that’s you :)

    +

    The profile and settings pages are very similar to the article reader and editor, they are left as an exercise for the reader, that’s you :)

    \ No newline at end of file diff --git a/docs/guides.html b/docs/guides.html index c423bfbf10..a6b7affe31 100644 --- a/docs/guides.html +++ b/docs/guides.html @@ -9,11 +9,11 @@ - - + + -

    🎯 Guides

    + +
    Code Issues (Smells)

    General architecture issues for legacy code

    Desegmented • Routing • Cross-imports
    \ No newline at end of file diff --git a/docs/guides/examples.html b/docs/guides/examples.html index b8e88f963e..26cda1f9ba 100644 --- a/docs/guides/examples.html +++ b/docs/guides/examples.html @@ -9,16 +9,16 @@ - - + + -

    Examples

    + +
    Page layouts

    Main cases with layouts

    Where to store them • Using widgets in layouts
    \ No newline at end of file diff --git a/docs/guides/examples/auth.html b/docs/guides/examples/auth.html index f1d68890fe..77eece2f73 100644 --- a/docs/guides/examples/auth.html +++ b/docs/guides/examples/auth.html @@ -9,11 +9,11 @@ - - + + -

    Authentication

    +

    Authentication

    Broadly, authentication consists of the following steps:

    1. Get the credentials from the user
    2. @@ -164,6 +164,6 @@

      Automatic logout

      -

      Don't forget to build failsafes for when a request to log out fails, or a request to refresh a login token fails. In both of these cases, you should clear the token store. If you keep your token in Entities, this code can be placed in the model segment as it is pure business logic. If you keep your token in Shared, placing this logic in shared/api might bloat the segment and dilute its purpose. If you're noticing that your API segment contains two several unrelated things, consider splitting out the token management logic into another segment, for example, shared/auth.

    +

    Don't forget to build failsafes for when a request to log out fails, or a request to refresh a login token fails. In both of these cases, you should clear the token store. If you keep your token in Entities, this code can be placed in the model segment as it is pure business logic. If you keep your token in Shared, placing this logic in shared/api might bloat the segment and dilute its purpose. If you're noticing that your API segment contains two several unrelated things, consider splitting out the token management logic into another segment, for example, shared/auth.

    \ No newline at end of file diff --git a/docs/guides/examples/autocompleted.html b/docs/guides/examples/autocompleted.html index cafc582d00..02912d346d 100644 --- a/docs/guides/examples/autocompleted.html +++ b/docs/guides/examples/autocompleted.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Autocomplete

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Autocomplete

    WIP

    The article is in the process of writing

    To bring the release of the article closer, you can:


    🍰 Stay tuned!

    About decomposition by layers

    @@ -21,6 +21,6 @@

    See also

    +
    \ No newline at end of file diff --git a/docs/guides/examples/browser-api.html b/docs/guides/examples/browser-api.html index ce37dd244b..1f19b11cc9 100644 --- a/docs/guides/examples/browser-api.html +++ b/docs/guides/examples/browser-api.html @@ -9,15 +9,15 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Browser API

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.
    +
    \ No newline at end of file diff --git a/docs/guides/examples/cms.html b/docs/guides/examples/cms.html index 3e7f1b6e3e..86760714d5 100644 --- a/docs/guides/examples/cms.html +++ b/docs/guides/examples/cms.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    CMS

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    CMS

    WIP

    The article is in the process of writing

    To bring the release of the article closer, you can:


    🍰 Stay tuned!

    Features may be different

    In some projects, all the functionality is concentrated in data from the server

    @@ -26,6 +26,6 @@

    https://t.me/feature_sliced/1553

    -

    +
    \ No newline at end of file diff --git a/docs/guides/examples/feedback.html b/docs/guides/examples/feedback.html index b8a8513c57..275aaf3a4f 100644 --- a/docs/guides/examples/feedback.html +++ b/docs/guides/examples/feedback.html @@ -9,14 +9,14 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Feedback

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.
    +
    \ No newline at end of file diff --git a/docs/guides/examples/i18n.html b/docs/guides/examples/i18n.html index 5907987e3b..2a42678e5e 100644 --- a/docs/guides/examples/i18n.html +++ b/docs/guides/examples/i18n.html @@ -9,17 +9,17 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    i18n

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.
    +
    \ No newline at end of file diff --git a/docs/guides/examples/metric.html b/docs/guides/examples/metric.html index dfacd50b49..9cc6d88720 100644 --- a/docs/guides/examples/metric.html +++ b/docs/guides/examples/metric.html @@ -9,14 +9,14 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Metric

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.
    +
    \ No newline at end of file diff --git a/docs/guides/examples/monorepo.html b/docs/guides/examples/monorepo.html index 28832ace6e..ca264c09bd 100644 --- a/docs/guides/examples/monorepo.html +++ b/docs/guides/examples/monorepo.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Monorepositories

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Monorepositories

    WIP

    The article is in the process of writing

    To bring the release of the article closer, you can:


    🍰 Stay tuned!

    About applicability for mono repositories, about bff, about microapps

    @@ -22,6 +22,6 @@

    See also(Discussion) About mono repositories and plug-ins-packages
  • (Thread) About the application for a mono repository
  • -

    +
    \ No newline at end of file diff --git a/docs/guides/examples/page-layout.html b/docs/guides/examples/page-layout.html index 0dbeefe5e9..1dcb9eefe5 100644 --- a/docs/guides/examples/page-layout.html +++ b/docs/guides/examples/page-layout.html @@ -9,11 +9,11 @@ - - + + -

    Page layouts

    +

    Page layouts

    This guide examines the abstraction of a page layout — when several pages share the same overall structure, and differ only in the main content.

    info

    Is your question not covered by this guide? Post your question by leaving feedback on this article (blue button on the right) and we will consider expanding this guide!

    Simple layout

    @@ -47,6 +47,6 @@

    Further reading

    • There's an example of how to build a layout with authentication with React and Remix (equivalent to React Router) in the tutorial.
    • -
    +
    \ No newline at end of file diff --git a/docs/guides/examples/platforms.html b/docs/guides/examples/platforms.html index 3c5ad7c81f..098c337a39 100644 --- a/docs/guides/examples/platforms.html +++ b/docs/guides/examples/platforms.html @@ -9,14 +9,14 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Desktop/Touch platforms

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.
    +
    \ No newline at end of file diff --git a/docs/guides/examples/ssr.html b/docs/guides/examples/ssr.html index 9cef8a2606..11bf4ebb55 100644 --- a/docs/guides/examples/ssr.html +++ b/docs/guides/examples/ssr.html @@ -9,14 +9,14 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    SSR

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.
    +
    \ No newline at end of file diff --git a/docs/guides/examples/theme.html b/docs/guides/examples/theme.html index bcafdd3634..c9de4baa86 100644 --- a/docs/guides/examples/theme.html +++ b/docs/guides/examples/theme.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Theme

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Theme

    WIP

    The article is in the process of writing

    To bring the release of the article closer, you can:


    🍰 Stay tuned!

    Where should I put my work with the theme and palette?

    @@ -22,6 +22,6 @@

    Discussion about the location of the theme, i18n logic

    https://youtu.be/b_nBvHWqxP8?t=133

    -
    +
    \ No newline at end of file diff --git a/docs/guides/examples/types.html b/docs/guides/examples/types.html index 052f332bad..f7c494bd3c 100644 --- a/docs/guides/examples/types.html +++ b/docs/guides/examples/types.html @@ -9,11 +9,11 @@ - - + + -

    Types

    +

    Types

    This guide concerns data types from typed languages like TypeScript and describes where they fit within FSD.

    info

    Is your question not covered by this guide? Post your question by leaving feedback on this article (blue button on the right) and we will consider expanding this guide!

    Utility types

    @@ -142,6 +142,6 @@

    shared/lib/untyped-packages/use-react-screenshot.d.ts
    // This library doesn't have typings, and we didn't want to bother writing our own.
    declare module "use-react-screenshot";

    Auto-generation of types

    -

    It's common to generate types from external sources, for example, generating backend types from an OpenAPI schema. In this case, create a dedicated place in your codebase for these types, like shared/api/openapi. Ideally, you should also include a README in that folder that describes what these files are, how to regenerate them, etc.

    +

    It's common to generate types from external sources, for example, generating backend types from an OpenAPI schema. In this case, create a dedicated place in your codebase for these types, like shared/api/openapi. Ideally, you should also include a README in that folder that describes what these files are, how to regenerate them, etc.

    \ No newline at end of file diff --git a/docs/guides/examples/white-labels.html b/docs/guides/examples/white-labels.html index 40255035a0..48a9757d48 100644 --- a/docs/guides/examples/white-labels.html +++ b/docs/guides/examples/white-labels.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    White Labels

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    White Labels

    WIP

    The article is in the process of writing

    To bring the release of the article closer, you can:


    🍰 Stay tuned!

    Figma, brand uikit, templates, adaptability to brands

    @@ -22,6 +22,6 @@

    See also(Thread) About the application for white-labels (branded) projects
  • (Presentation) About white-labels apps and design
  • -

    +
    \ No newline at end of file diff --git a/docs/guides/issues/cross-imports.html b/docs/guides/issues/cross-imports.html index c844aff4b3..a05dd1572e 100644 --- a/docs/guides/issues/cross-imports.html +++ b/docs/guides/issues/cross-imports.html @@ -9,11 +9,11 @@ - - + + -

    Cross-imports

    +

    Cross-imports

    WIP

    The article is in the process of writing

    To bring the release of the article closer, you can:


    🍰 Stay tuned!

    Cross-imports appear when the layer or abstraction begins to take too much responsibility than it should. That is why the methodology identifies new layers that allow you to uncouple these cross-imports

    @@ -25,6 +25,6 @@

    See also(Thread) About cross-imports and responsibility
  • (Thread) About imports between segments
  • (Thread) About cross-imports inside shared
  • -

    +
    \ No newline at end of file diff --git a/docs/guides/issues/desegmented.html b/docs/guides/issues/desegmented.html index 0991f7c503..763a8d2431 100644 --- a/docs/guides/issues/desegmented.html +++ b/docs/guides/issues/desegmented.html @@ -9,11 +9,11 @@ - - + + -

    Desegemented

    +

    Desegemented

    WIP

    The article is in the process of writing

    To bring the release of the article closer, you can:


    🍰 Stay tuned!

    Situation

    Very often, there is a situation on projects when modules related to a specific domain from the subject area are unnecessarily desegmented and scattered around the project

    @@ -38,6 +38,6 @@

    See also(Article) About Low Coupling and High Cohesion clearly
  • (Article) Low Coupling and High Cohesion. The Law of Demeter
  • -

    +
    \ No newline at end of file diff --git a/docs/guides/issues/routes.html b/docs/guides/issues/routes.html index 3ce8bde0ff..1a750afd9d 100644 --- a/docs/guides/issues/routes.html +++ b/docs/guides/issues/routes.html @@ -9,11 +9,11 @@ - - + + -

    Routing

    + +
    \ No newline at end of file diff --git a/docs/guides/migration/from-legacy.html b/docs/guides/migration/from-legacy.html index 5509abeb69..df022cbbfe 100644 --- a/docs/guides/migration/from-legacy.html +++ b/docs/guides/migration/from-legacy.html @@ -9,11 +9,11 @@ - - + + -

    Migration from legacy

    +

    Migration from legacy

    WIP

    The article is in the process of writing

    To bring the release of the article closer, you can:


    🍰 Stay tuned!

    The article aggregates the experience of several companies and projects on moving to Feature-Sliced Design with different initial conditions

    @@ -45,6 +45,6 @@

    See also

    +
    \ No newline at end of file diff --git a/docs/guides/migration/from-v1.html b/docs/guides/migration/from-v1.html index 8afbe5f050..a0fd679200 100644 --- a/docs/guides/migration/from-v1.html +++ b/docs/guides/migration/from-v1.html @@ -9,14 +9,14 @@ - - + + -

    Migration from v1

    + +
    \ No newline at end of file diff --git a/docs/guides/tech/with-nextjs.html b/docs/guides/tech/with-nextjs.html index fd65e93482..f5620aa195 100644 --- a/docs/guides/tech/with-nextjs.html +++ b/docs/guides/tech/with-nextjs.html @@ -9,11 +9,11 @@ - - + + -

    Usage with NextJS

    + +
    \ No newline at end of file diff --git a/docs/guides/tech/with-nuxtjs.html b/docs/guides/tech/with-nuxtjs.html index 0474d42ade..2d96191e35 100644 --- a/docs/guides/tech/with-nuxtjs.html +++ b/docs/guides/tech/with-nuxtjs.html @@ -9,11 +9,11 @@ - - + + -

    Usage with NuxtJS

    + +
    \ No newline at end of file diff --git a/docs/guides/tech/with-react-query.html b/docs/guides/tech/with-react-query.html index 532b615b45..044562bc98 100644 --- a/docs/guides/tech/with-react-query.html +++ b/docs/guides/tech/with-react-query.html @@ -9,11 +9,11 @@ - - + + -

    Usage with React Query

    +
    +
    \ No newline at end of file diff --git a/docs/guides/tech/with-sveltekit.html b/docs/guides/tech/with-sveltekit.html index fbe297be0d..f76c7986d8 100644 --- a/docs/guides/tech/with-sveltekit.html +++ b/docs/guides/tech/with-sveltekit.html @@ -9,11 +9,11 @@ - - + + -

    Usage with SvelteKit

    +

    Usage with SvelteKit

    It is possible to implement FSD in a SvelteKit project, but conflicts arise due to the differences between the structure requirements of a SvelteKit project and the principles of FSD:

    +
    \ No newline at end of file diff --git a/docs/reference.html b/docs/reference.html index 30268c5749..99ce7d4125 100644 --- a/docs/reference.html +++ b/docs/reference.html @@ -9,15 +9,15 @@ - - + + -

    📚 Reference

    + +
    Public API

    Practices for designing scalable and easy-to-integrate modules

    \ No newline at end of file diff --git a/docs/reference/isolation.html b/docs/reference/isolation.html index 59dac3a566..524755179d 100644 --- a/docs/reference/isolation.html +++ b/docs/reference/isolation.html @@ -9,11 +9,11 @@ - - + + -

    Isolation of modules

    + +
    \ No newline at end of file diff --git a/docs/reference/isolation/coupling-cohesion.html b/docs/reference/isolation/coupling-cohesion.html index 165a56045d..22ec1c08d7 100644 --- a/docs/reference/isolation/coupling-cohesion.html +++ b/docs/reference/isolation/coupling-cohesion.html @@ -9,11 +9,11 @@ - - + + -

    Low Coupling & High Cohesion

    + +
    \ No newline at end of file diff --git a/docs/reference/isolation/decouple-entities.html b/docs/reference/isolation/decouple-entities.html index 21155c03d9..308ba621b1 100644 --- a/docs/reference/isolation/decouple-entities.html +++ b/docs/reference/isolation/decouple-entities.html @@ -9,11 +9,11 @@ - - + + -

    Decouple entities

    + +
    \ No newline at end of file diff --git a/docs/reference/layers.html b/docs/reference/layers.html index c5ae289223..636dcccdf4 100644 --- a/docs/reference/layers.html +++ b/docs/reference/layers.html @@ -9,11 +9,11 @@ - - + + -

    Layers

    +

    Layers

    Layers are the first level of organisational hierarchy in Feature-Sliced Design. Their purpose is to separate code based on how much responsibility it needs and how many other modules in the app it depends on.

    note

    On this page, a module refers to an internal module in the application — a file or directory with an index file. Not to be confused with npm packages.

    Every layer carries special semantic meaning to help you determine how much responsibility you should allocate to a module in your code. The names and meanings of layers are standardized across all projects built with Feature-Sliced Design.

    @@ -87,6 +87,6 @@

    AppRouting
  • Store and other context providers
  • Analytics initialization
  • -

    +
    \ No newline at end of file diff --git a/docs/reference/public-api.html b/docs/reference/public-api.html index dec6656a45..195a550f21 100644 --- a/docs/reference/public-api.html +++ b/docs/reference/public-api.html @@ -9,11 +9,11 @@ - - + + -

    Public API

    + +
    \ No newline at end of file diff --git a/docs/reference/slices-segments.html b/docs/reference/slices-segments.html index 54bf9e433c..eb2ac73632 100644 --- a/docs/reference/slices-segments.html +++ b/docs/reference/slices-segments.html @@ -9,11 +9,11 @@ - - + + -

    Slices and segments

    +

    Slices and segments

    Slices

    Slices are the second level in the organizational hierarchy of Feature-Sliced Design. Their main purpose is to group code by its meaning for the product, business or just the application.

    The names of slices are not standardized because they are directly determined by the business domain of your application. For example, a photo gallery might have slices photo, create-album, gallery-page. A social network would require different slices, for example, post, add-user-to-friends, news-feed.

    @@ -38,6 +38,6 @@

    SegmentsExamples

    -
    Layeruimodellibapi
    SharedUI kitUsually not usedUtility modules of several related files.
    If you need to use individual helpers, consider using utility libraries such as lodash-es.
    Rudimentary API client with additional features like authentication or caching.
    EntitiesSkeleton of a business entity with slots for interactive elementsData storage of instances of this entity as well as functions for manipulating that data.
    This segment is most fit for storing server-side data. If you use TanStack Query or other methods of implicit storage, you may choose to omit this segment.
    Functions for manipulating instances of this entity that aren't related to storageAPI methods using the API client from Shared for easy communication with the backend
    FeaturesInteractive elements that enable users to use this featureBusiness logic and infrastructure data storage, if needed (e.g., current app theme). This is the code that actually produces value for the user.Infrastructural code that helps to concisely describe the business logic in the model segmentAPI methods that represent this feature on the backend.
    May compose API methods from Entities.
    WidgetsComposition of Entities and Features into self-contained UI blocks.
    Can also contain error boundaries and loading states.
    Infrastructure data storage, if neededNon-business interactions (e.g., gestures) and other necessary code for the block to function on a pageUsually not used, but can contain data loaders in nested routing contexts (e.g., Remix)
    PagesComposition of Entities, Features and Widgets into complete pages.
    Can also contain error boundaries and loading states.
    Usually not usedNon-business interactions (e.g., gestures) and other necessary code for the page to deliver a complete user experienceData loaders for SSR-oriented frameworks
    +
    Layeruimodellibapi
    SharedUI kitUsually not usedUtility modules of several related files.
    If you need to use individual helpers, consider using utility libraries such as lodash-es.
    Rudimentary API client with additional features like authentication or caching.
    EntitiesSkeleton of a business entity with slots for interactive elementsData storage of instances of this entity as well as functions for manipulating that data.
    This segment is most fit for storing server-side data. If you use TanStack Query or other methods of implicit storage, you may choose to omit this segment.
    Functions for manipulating instances of this entity that aren't related to storageAPI methods using the API client from Shared for easy communication with the backend
    FeaturesInteractive elements that enable users to use this featureBusiness logic and infrastructure data storage, if needed (e.g., current app theme). This is the code that actually produces value for the user.Infrastructural code that helps to concisely describe the business logic in the model segmentAPI methods that represent this feature on the backend.
    May compose API methods from Entities.
    WidgetsComposition of Entities and Features into self-contained UI blocks.
    Can also contain error boundaries and loading states.
    Infrastructure data storage, if neededNon-business interactions (e.g., gestures) and other necessary code for the block to function on a pageUsually not used, but can contain data loaders in nested routing contexts (e.g., Remix)
    PagesComposition of Entities, Features and Widgets into complete pages.
    Can also contain error boundaries and loading states.
    Usually not usedNon-business interactions (e.g., gestures) and other necessary code for the page to deliver a complete user experienceData loaders for SSR-oriented frameworks
    \ No newline at end of file diff --git a/examples.html b/examples.html index 7489c6dfec..8bb2da9793 100644 --- a/examples.html +++ b/examples.html @@ -9,10 +9,10 @@ - - + + -

    Examples

    List of websites people are building with Feature-Sliced Design

    v2
    Tiny Bunny Mini Game

    Mini-game "21 points" in the universe of the visual novel "Tiny Bunny".

    reactredux-toolkittypescript
    v2
    Roke.to Business

    Business branch of Roketo, a crypto streaming service which allows paying people by the second

    reacteffectortailwindcssturbo
    v2
    Roke.to dApp

    A crypto streaming service which allows paying people by the second

    reacteffectortailwindcss
    v2
    IT bookstore

    Catalog for viewing and searching information technology books

    reactredux toolkittypescriptreact routervitescss
    v2
    Moke Smoke (React Native example)

    An application that helps you quit smoking, published in the App Store and Google. Developed with React Native

    reactrtkpersisttypescriptfirebase
    v2
    Moonlogs (Effector + Forest example)

    Moonlogs is a business-event logging tool with a built-in user-friendly web interface for easy access to events

    foresteffectortailwindtypescriptgo
    v2
    Posts (React Query example)

    Example of using FSD with React Query (Mutation, Query, Pagination)

    reactreact-querytypescriptmaterial ui
    v2
    FalkChat

    FalkChat is your go-to destination for seamless and engaging online conversations.

    reactnextprettierclerktypescripttailwindshadcn/uizustand
    v2
    Polka

    The application is a bookshelf where you can add your favorite books. The application works with the Google Books API.

    vue3piniatypescriptvue-routereslintprettiervitevuetify
    v2
    Fake Cyber Web Store

    Example web store on Vue3

    vue3piniatypescriptfirebasevue-routereslintprettiervite
    v2
    VK Audiopad

    Chrome extension for VK Music

    reactvkuitypescript
    v2
    Сryptolight

    Cryptocurrency review site based on Feature-Sliced Design (Architectural methodology for frontend projects).

    reacteffectornextuitypescriptvite
    v2
    Money Flow

    A mobile application for tracking your expenses and incomes.

    capacitorjsreactreact-routerzustandvitetypescriptmobileandroidios
    v2
    E-Commerce

    This project is an online store built using React. It provides the ability to view the product catalog and product pages

    reactmobxwebpacktypescriptssr
    v2
    Todo app (Vue 3 + Pinia)

    QuickStart todo-app example for Vue developers with pinia store

    vue 3piniavitetypescript
    v2
    Conduit

    A social blogging site powered by Feature-Sliced Design architectural methodology.

    reactreact-routerreact-queryzustandvitetypescript
    v2
    Kinomore (React+Effector)

    Large project on the effector/fsd stack

    reacteffectortypescriptnextjsreact-testing-library
    v2
    Sudoku (React+Effector)

    A simple crossword of numbers on effector / fsd

    reacteffectortypescriptvitetailwindatomic-router
    v2
    Nukeapp (React+ReduxToolkit)

    Shopping app build on React/ReduxToolkit stack

    reactredux-toolkittypescriptvite
    v2
    Simple Greenhouse App (React+MobX)

    Simple demonstration of how FSD can be implemented with TypeScript, React.js, MobX and Firebase

    reactmobxtypescriptfirebasemuivite
    v2
    Todo App (ReactNative+Redux)

    QuickStart todo-app example for ReactNative(Expo) developers

    react-nativeexporedux
    v2
    Rastrr

    A simple and free graphic editor for novice artists

    svelte
    v2
    Draw, I'll Help

    A drawing app with shape correction powered by ML

    svelte
    v2
    Cast

    A podcast listening PWA with automated quality assurance

    svelte
    v2
    Loripsum generator

    Simple fish text generator

    reacteffector
    v2
    Projentry (demo)

    Assistant for your projects

    reactantd
    v2
    Todo App (Angular 13)

    QuickStart todo-app example for Angular developers

    angularrxjs
    v2
    Todo App (Vue 3)

    QuickStart todo-app example for Vue developers

    vuevuexantd
    v2
    Todo App (React+Redux)

    QuickStart todo-app example for React developers (Redux version)

    reactreduxantd
    v2
    Todo App (React+Effector)

    QuickStart todo-app example for React developers (Effector version)

    reacteffectorantd
    v2
    Github Client

    React & GraphQL powered github web-client

    reactgraphqlantd
    v2
    Cardbox

    The best solutions from developers in one place

    reacteffector
    +

    Examples

    List of websites people are building with Feature-Sliced Design

    v2
    Tiny Bunny Mini Game

    Mini-game "21 points" in the universe of the visual novel "Tiny Bunny".

    reactredux-toolkittypescript
    v2
    Roke.to Business

    Business branch of Roketo, a crypto streaming service which allows paying people by the second

    reacteffectortailwindcssturbo
    v2
    Roke.to dApp

    A crypto streaming service which allows paying people by the second

    reacteffectortailwindcss
    v2
    IT bookstore

    Catalog for viewing and searching information technology books

    reactredux toolkittypescriptreact routervitescss
    v2
    Moke Smoke (React Native example)

    An application that helps you quit smoking, published in the App Store and Google. Developed with React Native

    reactrtkpersisttypescriptfirebase
    v2
    Moonlogs (Effector + Forest example)

    Moonlogs is a business-event logging tool with a built-in user-friendly web interface for easy access to events

    foresteffectortailwindtypescriptgo
    v2
    Posts (React Query example)

    Example of using FSD with React Query (Mutation, Query, Pagination)

    reactreact-querytypescriptmaterial ui
    v2
    FalkChat

    FalkChat is your go-to destination for seamless and engaging online conversations.

    reactnextprettierclerktypescripttailwindshadcn/uizustand
    v2
    Polka

    The application is a bookshelf where you can add your favorite books. The application works with the Google Books API.

    vue3piniatypescriptvue-routereslintprettiervitevuetify
    v2
    Fake Cyber Web Store

    Example web store on Vue3

    vue3piniatypescriptfirebasevue-routereslintprettiervite
    v2
    VK Audiopad

    Chrome extension for VK Music

    reactvkuitypescript
    v2
    Сryptolight

    Cryptocurrency review site based on Feature-Sliced Design (Architectural methodology for frontend projects).

    reacteffectornextuitypescriptvite
    v2
    Money Flow

    A mobile application for tracking your expenses and incomes.

    capacitorjsreactreact-routerzustandvitetypescriptmobileandroidios
    v2
    E-Commerce

    This project is an online store built using React. It provides the ability to view the product catalog and product pages

    reactmobxwebpacktypescriptssr
    v2
    Todo app (Vue 3 + Pinia)

    QuickStart todo-app example for Vue developers with pinia store

    vue 3piniavitetypescript
    v2
    Conduit

    A social blogging site powered by Feature-Sliced Design architectural methodology.

    reactreact-routerreact-queryzustandvitetypescript
    v2
    Kinomore (React+Effector)

    Large project on the effector/fsd stack

    reacteffectortypescriptnextjsreact-testing-library
    v2
    Sudoku (React+Effector)

    A simple crossword of numbers on effector / fsd

    reacteffectortypescriptvitetailwindatomic-router
    v2
    Nukeapp (React+ReduxToolkit)

    Shopping app build on React/ReduxToolkit stack

    reactredux-toolkittypescriptvite
    v2
    Simple Greenhouse App (React+MobX)

    Simple demonstration of how FSD can be implemented with TypeScript, React.js, MobX and Firebase

    reactmobxtypescriptfirebasemuivite
    v2
    Todo App (ReactNative+Redux)

    QuickStart todo-app example for ReactNative(Expo) developers

    react-nativeexporedux
    v2
    Rastrr

    A simple and free graphic editor for novice artists

    svelte
    v2
    Draw, I'll Help

    A drawing app with shape correction powered by ML

    svelte
    v2
    Cast

    A podcast listening PWA with automated quality assurance

    svelte
    v2
    Loripsum generator

    Simple fish text generator

    reacteffector
    v2
    Projentry (demo)

    Assistant for your projects

    reactantd
    v2
    Todo App (Angular 13)

    QuickStart todo-app example for Angular developers

    angularrxjs
    v2
    Todo App (Vue 3)

    QuickStart todo-app example for Vue developers

    vuevuexantd
    v2
    Todo App (React+Redux)

    QuickStart todo-app example for React developers (Redux version)

    reactreduxantd
    v2
    Todo App (React+Effector)

    QuickStart todo-app example for React developers (Effector version)

    reacteffectorantd
    v2
    Github Client

    React & GraphQL powered github web-client

    reactgraphqlantd
    v2
    Cardbox

    The best solutions from developers in one place

    reacteffector
    \ No newline at end of file diff --git a/index.html b/index.html index 728c5f9624..5ae97e7422 100644 --- a/index.html +++ b/index.html @@ -9,10 +9,10 @@ - - + + -

    Feature-Sliced Design

    Architectural methodology for frontend projects

    Features

    Explicit business logic

    Easily discoverable architecture thanks to domain scopes

    Adaptability

    Architecture components can be flexibly replaced and added for new requirements

    Tech debt & Refactoring

    Each module can be independently modified / rewritten without side effects

    Explicit code reuse

    A balance is maintained between DRY and local customization

    Concepts

    Public API

    Each module must have a declaration of its public API at the top level

    Isolation

    The module should not depend directly on other modules of the same layer or overlying layers

    Needs Driven

    Orientation to business and user needs

    Scheme

    Companies using FSD

    FSD is used in your company? Tell us
    +

    Feature-Sliced Design

    Architectural methodology for frontend projects

    Features

    Explicit business logic

    Easily discoverable architecture thanks to domain scopes

    Adaptability

    Architecture components can be flexibly replaced and added for new requirements

    Tech debt & Refactoring

    Each module can be independently modified / rewritten without side effects

    Explicit code reuse

    A balance is maintained between DRY and local customization

    Concepts

    Public API

    Each module must have a declaration of its public API at the top level

    Isolation

    The module should not depend directly on other modules of the same layer or overlying layers

    Needs Driven

    Orientation to business and user needs

    Scheme

    Companies using FSD

    FSD is used in your company? Tell us
    \ No newline at end of file diff --git a/kr/404.html b/kr/404.html index f7fbb8aaaf..33b540c8f5 100644 --- a/kr/404.html +++ b/kr/404.html @@ -9,10 +9,10 @@ - - + + -

    Page Not Found

    We could not find what you were looking for.

    Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

    +

    Page Not Found

    We could not find what you were looking for.

    Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

    \ No newline at end of file diff --git a/kr/assets/js/0499e362.7f3f18f9.js b/kr/assets/js/0499e362.689b33c0.js similarity index 98% rename from kr/assets/js/0499e362.7f3f18f9.js rename to kr/assets/js/0499e362.689b33c0.js index 1ea9cac378..af6ef04fc6 100644 --- a/kr/assets/js/0499e362.7f3f18f9.js +++ b/kr/assets/js/0499e362.689b33c0.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[4005],{5556:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var i=s(6070),n=s(5710);const o={unlisted:!0},r="Decomposition cheatsheet",a={id:"get-started/cheatsheet",title:"Decomposition cheatsheet",description:"Use this as a quick reference when you're deciding how to decompose your UI. PDF versions are also available below, so you can print it out and keep one under your pillow.",source:"@site/i18n/en/docusaurus-plugin-content-docs/current/get-started/cheatsheet.mdx",sourceDirName:"get-started",slug:"/get-started/cheatsheet",permalink:"/kr/docs/get-started/cheatsheet",draft:!1,unlisted:!0,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/en/docusaurus-plugin-content-docs/current/get-started/cheatsheet.mdx",tags:[],version:"current",lastUpdatedAt:1727030144e3,frontMatter:{unlisted:!0},sidebar:"getstartedSidebar"},c={},d=[{value:"Choosing a layer",id:"choosing-a-layer",level:2},{value:"Examples",id:"examples",level:2},{value:"Tweet",id:"tweet",level:3},{value:"GitHub",id:"github",level:3},{value:"See also",id:"see-also",level:2}];function l(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"decomposition-cheatsheet",children:"Decomposition cheatsheet"})}),"\n",(0,i.jsx)(t.p,{children:"Use this as a quick reference when you're deciding how to decompose your UI. PDF versions are also available below, so you can print it out and keep one under your pillow."}),"\n",(0,i.jsx)(t.h2,{id:"choosing-a-layer",children:"Choosing a layer"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:s(6701).A+"",children:"Download PDF"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Definitions of all layers and self-check questions",src:s(6423).A+"",width:"1684",height:"1190"})}),"\n",(0,i.jsx)(t.h2,{id:"examples",children:"Examples"}),"\n",(0,i.jsx)(t.h3,{id:"tweet",children:"Tweet"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"decomposed-tweet-bordered-bgLight",src:s(9342).A+"",width:"1200",height:"2364"})}),"\n",(0,i.jsx)(t.h3,{id:"github",children:"GitHub"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"decomposed-github-bordered",src:s(890).A+"",width:"2291",height:"1080"})}),"\n",(0,i.jsx)(t.h2,{id:"see-also",children:"See also"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/4262",children:"(Thread) General logic for features and entities"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/4210",children:"(Thread) Decomposition of swollen logic"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/4088",children:"(Thread) About understanding the areas of responsibility during decomposition"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3828",children:"(Thread) Decomposition of the Product List widget"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://www.pluralsight.com/guides/how-to-organize-your-react-+-redux-codebase",children:"(Article) Different approaches to the decomposition of logic"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3776",children:"(Thread) About the difference between features and entities"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3248",children:"(Thread) About the difference between things and entities (2)"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3833",children:"(Thread) About the application of criteria for decomposition"})}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},6701:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/files/choosing-a-layer-en-12fdf3265c8fc4f6b58687352b81fce7.pdf"},6423:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/choosing-a-layer-en-5b67f20bb921ba17d78a56c0dc7654a9.jpg"},890:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/decompose-github-a0eeb839a4b5ef5c480a73726a4451b0.jpg"},9342:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/decompose-twitter-7b9a50f879d763c49305b3bf0751ee35.png"},5710:(e,t,s)=>{s.d(t,{R:()=>r,x:()=>a});var i=s(758);const n={},o=i.createContext(n);function r(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[4005],{5556:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var i=s(6070),n=s(5710);const o={unlisted:!0},r="Decomposition cheatsheet",a={id:"get-started/cheatsheet",title:"Decomposition cheatsheet",description:"Use this as a quick reference when you're deciding how to decompose your UI. PDF versions are also available below, so you can print it out and keep one under your pillow.",source:"@site/i18n/en/docusaurus-plugin-content-docs/current/get-started/cheatsheet.mdx",sourceDirName:"get-started",slug:"/get-started/cheatsheet",permalink:"/kr/docs/get-started/cheatsheet",draft:!1,unlisted:!0,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/en/docusaurus-plugin-content-docs/current/get-started/cheatsheet.mdx",tags:[],version:"current",lastUpdatedAt:1727540389e3,frontMatter:{unlisted:!0},sidebar:"getstartedSidebar"},c={},d=[{value:"Choosing a layer",id:"choosing-a-layer",level:2},{value:"Examples",id:"examples",level:2},{value:"Tweet",id:"tweet",level:3},{value:"GitHub",id:"github",level:3},{value:"See also",id:"see-also",level:2}];function l(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"decomposition-cheatsheet",children:"Decomposition cheatsheet"})}),"\n",(0,i.jsx)(t.p,{children:"Use this as a quick reference when you're deciding how to decompose your UI. PDF versions are also available below, so you can print it out and keep one under your pillow."}),"\n",(0,i.jsx)(t.h2,{id:"choosing-a-layer",children:"Choosing a layer"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:s(6701).A+"",children:"Download PDF"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Definitions of all layers and self-check questions",src:s(6423).A+"",width:"1684",height:"1190"})}),"\n",(0,i.jsx)(t.h2,{id:"examples",children:"Examples"}),"\n",(0,i.jsx)(t.h3,{id:"tweet",children:"Tweet"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"decomposed-tweet-bordered-bgLight",src:s(9342).A+"",width:"1200",height:"2364"})}),"\n",(0,i.jsx)(t.h3,{id:"github",children:"GitHub"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"decomposed-github-bordered",src:s(890).A+"",width:"2291",height:"1080"})}),"\n",(0,i.jsx)(t.h2,{id:"see-also",children:"See also"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/4262",children:"(Thread) General logic for features and entities"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/4210",children:"(Thread) Decomposition of swollen logic"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/4088",children:"(Thread) About understanding the areas of responsibility during decomposition"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3828",children:"(Thread) Decomposition of the Product List widget"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://www.pluralsight.com/guides/how-to-organize-your-react-+-redux-codebase",children:"(Article) Different approaches to the decomposition of logic"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3776",children:"(Thread) About the difference between features and entities"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3248",children:"(Thread) About the difference between things and entities (2)"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3833",children:"(Thread) About the application of criteria for decomposition"})}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},6701:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/files/choosing-a-layer-en-12fdf3265c8fc4f6b58687352b81fce7.pdf"},6423:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/choosing-a-layer-en-5b67f20bb921ba17d78a56c0dc7654a9.jpg"},890:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/decompose-github-a0eeb839a4b5ef5c480a73726a4451b0.jpg"},9342:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/decompose-twitter-7b9a50f879d763c49305b3bf0751ee35.png"},5710:(e,t,s)=>{s.d(t,{R:()=>r,x:()=>a});var i=s(758);const n={},o=i.createContext(n);function r(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/kr/assets/js/0a4ee302.d88421d1.js b/kr/assets/js/0a4ee302.c29cc6ee.js similarity index 99% rename from kr/assets/js/0a4ee302.d88421d1.js rename to kr/assets/js/0a4ee302.c29cc6ee.js index b3b7762f3a..63c84c2aac 100644 --- a/kr/assets/js/0a4ee302.d88421d1.js +++ b/kr/assets/js/0a4ee302.c29cc6ee.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[5977],{2009:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var s=t(6070),i=t(5710);const o={sidebar_position:10},r="Usage with NuxtJS",c={id:"guides/tech/with-nuxtjs",title:"Usage with NuxtJS",description:"It is possible to implement FSD in a NuxtJS project, but conflicts arise due to the differences between NuxtJS project structure requirements and FSD principles:",source:"@site/i18n/en/docusaurus-plugin-content-docs/current/guides/tech/with-nuxtjs.mdx",sourceDirName:"guides/tech",slug:"/guides/tech/with-nuxtjs",permalink:"/kr/docs/guides/tech/with-nuxtjs",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/en/docusaurus-plugin-content-docs/current/guides/tech/with-nuxtjs.mdx",tags:[],version:"current",lastUpdatedAt:1727030144e3,sidebarPosition:10,frontMatter:{sidebar_position:10},sidebar:"guidesSidebar",previous:{title:"Usage with NextJS",permalink:"/kr/docs/guides/tech/with-nextjs"},next:{title:"Usage with React Query",permalink:"/kr/docs/guides/tech/with-react-query"}},a={},d=[{value:"Adding an alias for the src directory",id:"adding-an-alias-for-the-src-directory",level:2},{value:"Choose how to configure the router",id:"choose-how-to-configure-the-router",level:2},{value:"Routing using config",id:"routing-using-config",level:3},{value:"File Routing",id:"file-routing",level:3},{value:"What to do with layouts?",id:"what-to-do-with-layouts",level:2},{value:"See also",id:"see-also",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"usage-with-nuxtjs",children:"Usage with NuxtJS"})}),"\n",(0,s.jsx)(n.p,{children:"It is possible to implement FSD in a NuxtJS project, but conflicts arise due to the differences between NuxtJS project structure requirements and FSD principles:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Initially, NuxtJS offers a project file structure without a ",(0,s.jsx)(n.code,{children:"src"})," folder, i.e. in the root of the project."]}),"\n",(0,s.jsxs)(n.li,{children:["The file routing is in the ",(0,s.jsx)(n.code,{children:"pages"})," folder, while in FSD this folder is reserved for the flat slice structure."]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"adding-an-alias-for-the-src-directory",children:["Adding an alias for the ",(0,s.jsx)(n.code,{children:"src"})," directory"]}),"\n",(0,s.jsxs)(n.p,{children:["Add an ",(0,s.jsx)(n.code,{children:"alias"})," object to your config:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",metastring:'title="nuxt.config.ts"',children:"export default defineNuxtConfig({\n devtools: { enabled: true }, // Not FSD related, enabled at project startup\n alias: {\n \"@\": '../src'\n },\n})\n"})}),"\n",(0,s.jsx)(n.h2,{id:"choose-how-to-configure-the-router",children:"Choose how to configure the router"}),"\n",(0,s.jsxs)(n.p,{children:["In NuxtJS, there are two ways to customize the routing - using a config and using a file structure.\nIn the case of file-based routing, you will create index.vue files in folders inside the app/routes directory, and in the case of configure, you will configure the routers in the ",(0,s.jsx)(n.code,{children:"router.options.ts"})," file."]}),"\n",(0,s.jsx)(n.h3,{id:"routing-using-config",children:"Routing using config"}),"\n",(0,s.jsxs)(n.p,{children:["In the ",(0,s.jsx)(n.code,{children:"app"})," layer, create a ",(0,s.jsx)(n.code,{children:"router.options.ts"})," file, and export a config object from it:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",metastring:'title="app/router.options.ts"',children:"import type { RouterConfig } from '@nuxt/schema';\n\nexport default {\n routes: (_routes) => [],\n};\n\n"})}),"\n",(0,s.jsxs)(n.p,{children:["To add a ",(0,s.jsx)(n.code,{children:"Home"})," page to your project, you need to do the following steps:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Add a page slice inside the ",(0,s.jsx)(n.code,{children:"pages"})," layer"]}),"\n",(0,s.jsxs)(n.li,{children:["Add the appropriate route to the ",(0,s.jsx)(n.code,{children:"app/router.config.ts"})," config"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["To create a page slice, let's use the ",(0,s.jsx)(n.a,{href:"https://github.com/feature-sliced/cli",children:"CLI"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",children:"fsd pages home\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Create a ",(0,s.jsx)(n.code,{children:"home-page.vue"})," file inside the ui segment, access it using the Public API"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",metastring:'title="src/pages/home/index.ts"',children:"export { default as HomePage } from './ui/home-page';\n"})}),"\n",(0,s.jsx)(n.p,{children:"Thus, the file structure will look like this:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",children:"|\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 app\n\u2502 \u2502 \u251c\u2500\u2500 router.config.ts\n\u2502 \u251c\u2500\u2500 pages\n\u2502 \u2502 \u251c\u2500\u2500 home\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 ui\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 home-page.vue\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 index.ts\n"})}),"\n",(0,s.jsx)(n.p,{children:"Finally, let's add a root to the config:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",metastring:'title="app/router.config.ts"',children:"import type { RouterConfig } from '@nuxt/schema'\n\nexport default {\n routes: (_routes) => [\n {\n name: 'home',\n path: '/',\n component: () => import('@/pages/home.vue').then(r => r.default || r)\n }\n ],\n}\n"})}),"\n",(0,s.jsx)(n.h3,{id:"file-routing",children:"File Routing"}),"\n",(0,s.jsxs)(n.p,{children:["First of all, create a ",(0,s.jsx)(n.code,{children:"src"})," directory in the root of your project, and create app and pages layers inside this directory and a routes folder inside the app layer.\nThus, your file structure should look like this:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",children:"\u251c\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 app\n\u2502 \u2502 \u251c\u2500\u2500 routes\n\u2502 \u251c\u2500\u2500 pages # Pages folder, related to FSD\n"})}),"\n",(0,s.jsxs)(n.p,{children:["In order for NuxtJS to use the routes folder inside the ",(0,s.jsx)(n.code,{children:"app"})," layer for file routing, you need to modify ",(0,s.jsx)(n.code,{children:"nuxt.config.ts"})," as follows:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",metastring:'title="nuxt.config.ts"',children:"export default defineNuxtConfig({\n devtools: { enabled: true }, // Not FSD related, enabled at project startup\n alias: {\n \"@\": '../src'\n },\n dir: {\n pages: './src/app/routes'\n }\n})\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Now, you can create routes for pages within ",(0,s.jsx)(n.code,{children:"app"})," and connect pages from ",(0,s.jsx)(n.code,{children:"pages"})," to them."]}),"\n",(0,s.jsxs)(n.p,{children:["For example, to add a ",(0,s.jsx)(n.code,{children:"Home"})," page to your project, you need to do the following steps:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Add a page slice inside the ",(0,s.jsx)(n.code,{children:"pages"})," layer"]}),"\n",(0,s.jsxs)(n.li,{children:["Add the corresponding root inside the ",(0,s.jsx)(n.code,{children:"app"})," layer"]}),"\n",(0,s.jsx)(n.li,{children:"Align the page from the slice with the root"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["To create a page slice, let's use the ",(0,s.jsx)(n.a,{href:"https://github.com/feature-sliced/cli",children:"CLI"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",children:"fsd pages home\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Create a ",(0,s.jsx)(n.code,{children:"home-page.vue"})," file inside the ui segment, access it using the Public API"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",metastring:'title="src/pages/home/index.ts"',children:"export { default as HomePage } from './ui/home-page';\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Create a root for this page inside the ",(0,s.jsx)(n.code,{children:"app"})," layer:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",children:"\n\u251c\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 app\n\u2502 \u2502 \u251c\u2500\u2500 routes\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 index.vue\n\u2502 \u251c\u2500\u2500 pages\n\u2502 \u2502 \u251c\u2500\u2500 home\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 ui\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 home-page.vue\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 index.ts\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Add your page component inside the ",(0,s.jsx)(n.code,{children:"index.vue"})," file:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-html",metastring:'title="src/app/routes/index.vue"',children:" - + + -

    🌎 FSD international community

    · 2 min read
    Anton Medvedev
    FSD core-team member
    post-cover
    +

    💥 FSD rebranding!

    · 2 min read
    Ilya Azin
    FSD core-team member
    logo-primary
    diff --git a/kr/blog/archive.html b/kr/blog/archive.html index 0fd5d8be5c..90f792fc1f 100644 --- a/kr/blog/archive.html +++ b/kr/blog/archive.html @@ -9,10 +9,10 @@ - - + + - + \ No newline at end of file diff --git a/kr/blog/international-community.html b/kr/blog/international-community.html index c7505b4608..50092375fe 100644 --- a/kr/blog/international-community.html +++ b/kr/blog/international-community.html @@ -9,11 +9,11 @@ - - + + -

    🌎 FSD international community

    · 2 min read
    Anton Medvedev
    FSD core-team member
    post-cover
    +

    🌎 FSD international community

    · 2 min read
    Anton Medvedev
    FSD core-team member
    post-cover

    TLDR:

    FSD goes out into the world, and the beginning of this is the international Discord-server

    FSD выходит в мир, и началом послужит международный Discord-сервер

    diff --git a/kr/blog/rebranding-stable.html b/kr/blog/rebranding-stable.html index 909509d87f..3208e3691f 100644 --- a/kr/blog/rebranding-stable.html +++ b/kr/blog/rebranding-stable.html @@ -9,11 +9,11 @@ - - + + -

    💥 FSD rebranding!

    · 2 min read
    Ilya Azin
    FSD core-team member
    logo-primary
    +

    💥 FSD rebranding!

    · 2 min read
    Ilya Azin
    FSD core-team member
    logo-primary

    TLDR:

    We've made whole new identity for FSD website and all related projects, feel free to use brand assets

    Мы сделали полностью новую айдентику для сайта FSD и всех связанных проектов, не стесняйтесь пользоваться фирменными ассетами

    diff --git a/kr/blog/tags.html b/kr/blog/tags.html index 4822365ff9..14882814f8 100644 --- a/kr/blog/tags.html +++ b/kr/blog/tags.html @@ -9,10 +9,10 @@ - - + + - + \ No newline at end of file diff --git a/kr/blog/tags/brand.html b/kr/blog/tags/brand.html index 7eb3590716..f0ea803870 100644 --- a/kr/blog/tags/brand.html +++ b/kr/blog/tags/brand.html @@ -9,11 +9,11 @@ - - + + -

    One post tagged with "brand"

    View All Tags

    💥 FSD rebranding!

    · 2 min read
    Ilya Azin
    FSD core-team member
    logo-primary
    +

    One post tagged with "brand"

    View All Tags
    diff --git a/kr/blog/tags/community.html b/kr/blog/tags/community.html index f94a05823a..d6b43d5ca7 100644 --- a/kr/blog/tags/community.html +++ b/kr/blog/tags/community.html @@ -9,11 +9,11 @@ - - + + -

    One post tagged with "community"

    View All Tags

    🌎 FSD international community

    · 2 min read
    Anton Medvedev
    FSD core-team member
    post-cover
    +

    One post tagged with "community"

    View All Tags
    diff --git a/kr/blog/tags/discord.html b/kr/blog/tags/discord.html index 9d5114d02d..020ebc6f65 100644 --- a/kr/blog/tags/discord.html +++ b/kr/blog/tags/discord.html @@ -9,11 +9,11 @@ - - + + -

    One post tagged with "discord"

    View All Tags

    🌎 FSD international community

    · 2 min read
    Anton Medvedev
    FSD core-team member
    post-cover
    +

    One post tagged with "discord"

    View All Tags
    diff --git a/kr/blog/tags/promo.html b/kr/blog/tags/promo.html index f5e36e0110..5a4410dd16 100644 --- a/kr/blog/tags/promo.html +++ b/kr/blog/tags/promo.html @@ -9,11 +9,11 @@ - - + + -

    2 posts tagged with "promo"

    View All Tags

    🌎 FSD international community

    · 2 min read
    Anton Medvedev
    FSD core-team member
    post-cover
    +

    2 posts tagged with "promo"

    View All Tags

    💥 FSD rebranding!

    · 2 min read
    Ilya Azin
    FSD core-team member
    logo-primary
    diff --git a/kr/community.html b/kr/community.html index e23e12365a..c3be60bc3d 100644 --- a/kr/community.html +++ b/kr/community.html @@ -9,17 +9,17 @@ - - + + -

    💫 Community

    + +
    Contributing

    HowTo, Workflow, Support

    \ No newline at end of file diff --git a/kr/community/team.html b/kr/community/team.html index 939fe58f8f..8bb0b53ea3 100644 --- a/kr/community/team.html +++ b/kr/community/team.html @@ -9,15 +9,15 @@ - - + + -

    Team

    + +

    Companies

    \ No newline at end of file diff --git a/kr/docs.html b/kr/docs.html index 6647e33986..14c54d0bbe 100644 --- a/kr/docs.html +++ b/kr/docs.html @@ -9,11 +9,11 @@ - - + + -

    Documentation

    + +
    🛠 Examples

    Projects built with Feature-Sliced Design

    \ No newline at end of file diff --git a/kr/docs/about.html b/kr/docs/about.html index b7d173f20b..0f8481059d 100644 --- a/kr/docs/about.html +++ b/kr/docs/about.html @@ -9,11 +9,11 @@ - - + + -

    🍰 About

    + +
    Promote

    About promotion and integration FSD at companies

    Integration • Promoting in team • Promoting in company
    \ No newline at end of file diff --git a/kr/docs/about/alternatives.html b/kr/docs/about/alternatives.html index 324e03de4f..e41bb84334 100644 --- a/kr/docs/about/alternatives.html +++ b/kr/docs/about/alternatives.html @@ -9,11 +9,11 @@ - - + + -

    Alternatives

    + +
    \ No newline at end of file diff --git a/kr/docs/about/mission.html b/kr/docs/about/mission.html index 249f00a156..e2db4d3323 100644 --- a/kr/docs/about/mission.html +++ b/kr/docs/about/mission.html @@ -9,11 +9,11 @@ - - + + -

    Mission

    + +
    \ No newline at end of file diff --git a/kr/docs/about/motivation.html b/kr/docs/about/motivation.html index 8283805861..48e4f386fa 100644 --- a/kr/docs/about/motivation.html +++ b/kr/docs/about/motivation.html @@ -9,11 +9,11 @@ - - + + -

    Motivation

    +
    +
    \ No newline at end of file diff --git a/kr/docs/about/promote/for-company.html b/kr/docs/about/promote/for-company.html index 3b82906877..33061157ea 100644 --- a/kr/docs/about/promote/for-company.html +++ b/kr/docs/about/promote/for-company.html @@ -9,17 +9,17 @@ - - + + -

    Promote in company

    +

    Promote in company

    WIP

    The article is in the process of writing

    To bring the release of the article closer, you can:


    🍰 Stay tuned!

    Do the project and the company need a methodology?

    About the justification of the application, Those duty

    How can I submit a methodology to a business?

    -

    How to prepare and justify a plan to move to the methodology?

    +

    How to prepare and justify a plan to move to the methodology?

    \ No newline at end of file diff --git a/kr/docs/about/promote/for-team.html b/kr/docs/about/promote/for-team.html index f29f6d4710..59c5231fdb 100644 --- a/kr/docs/about/promote/for-team.html +++ b/kr/docs/about/promote/for-team.html @@ -9,11 +9,11 @@ - - + + -

    Promote in team

    + +
    \ No newline at end of file diff --git a/kr/docs/about/promote/integration.html b/kr/docs/about/promote/integration.html index defa680f5e..cdae467600 100644 --- a/kr/docs/about/promote/integration.html +++ b/kr/docs/about/promote/integration.html @@ -9,11 +9,11 @@ - - + + -

    Integration aspects

    + +
    \ No newline at end of file diff --git a/kr/docs/about/promote/partial-application.html b/kr/docs/about/promote/partial-application.html index ca9ac1fbf9..2bcc387bbe 100644 --- a/kr/docs/about/promote/partial-application.html +++ b/kr/docs/about/promote/partial-application.html @@ -9,14 +9,14 @@ - - + + -

    Partial Application

    +
    +
    \ No newline at end of file diff --git a/kr/docs/about/understanding/abstractions.html b/kr/docs/about/understanding/abstractions.html index 56e572edc7..8f50828b29 100644 --- a/kr/docs/about/understanding/abstractions.html +++ b/kr/docs/about/understanding/abstractions.html @@ -9,11 +9,11 @@ - - + + -

    Abstractions

    + +
    \ No newline at end of file diff --git a/kr/docs/about/understanding/architecture.html b/kr/docs/about/understanding/architecture.html index d11bb13b56..5d66c7d7df 100644 --- a/kr/docs/about/understanding/architecture.html +++ b/kr/docs/about/understanding/architecture.html @@ -9,11 +9,11 @@ - - + + -

    About architecture

    + +
    \ No newline at end of file diff --git a/kr/docs/about/understanding/knowledge-types.html b/kr/docs/about/understanding/knowledge-types.html index d4f1a28856..41aeb49f3f 100644 --- a/kr/docs/about/understanding/knowledge-types.html +++ b/kr/docs/about/understanding/knowledge-types.html @@ -9,11 +9,11 @@ - - + + -

    Knowledge types in the project

    + +
    \ No newline at end of file diff --git a/kr/docs/about/understanding/naming.html b/kr/docs/about/understanding/naming.html index 6fbc864629..9d29c2e5ed 100644 --- a/kr/docs/about/understanding/naming.html +++ b/kr/docs/about/understanding/naming.html @@ -9,11 +9,11 @@ - - + + -

    Naming

    + +
    \ No newline at end of file diff --git a/kr/docs/about/understanding/needs-driven.html b/kr/docs/about/understanding/needs-driven.html index 1cf6b9acee..5e90f92f7e 100644 --- a/kr/docs/about/understanding/needs-driven.html +++ b/kr/docs/about/understanding/needs-driven.html @@ -9,11 +9,11 @@ - - + + -

    Needs driven

    +

    Needs driven

    TL;DR

    Can't you formulate the goal that the new feature will solve? Or maybe the problem is that the task itself is not formulated? The point is also that the methodology helps to pull out the problematic definition of tasks and goals

    project does not live in static - requirements and functionality are constantly changing. Over time, the code turns into mush, because at the start the project was designed only for the initial impression of wishes. And the task of a good architecture is also to be sharpened for changing development conditions.

    Why?

    To choose a clear name for an entity and understand its components, you need to clearly understand what task will be solved with the help of all this code.

    @@ -128,6 +128,6 @@

    See also(Discussion) How to break the functionality and what it is
  • (Article) "How to better organize your applications"
  • -

    +
    \ No newline at end of file diff --git a/kr/docs/about/understanding/signals.html b/kr/docs/about/understanding/signals.html index e6f416ca15..3acb281566 100644 --- a/kr/docs/about/understanding/signals.html +++ b/kr/docs/about/understanding/signals.html @@ -9,11 +9,11 @@ - - + + -

    Signals of architecture

    +

    Signals of architecture

    WIP

    The article is in the process of writing

    To bring the release of the article closer, you can:


    🍰 Stay tuned!

    If there is a limitation on the part of the architecture, then there are obvious reasons for this, and consequences if they are ignored

    @@ -27,6 +27,6 @@

    See also(Thread) About the fundamental nature of architecture
  • (Thread) About highlighting weak points
  • (Thread) How to understand that the data model is swollen
  • -

    +
    \ No newline at end of file diff --git a/kr/docs/branding.html b/kr/docs/branding.html index 7f6625cd16..4ba23a4379 100644 --- a/kr/docs/branding.html +++ b/kr/docs/branding.html @@ -9,11 +9,11 @@ - - + + -

    Branding Guidelines

    +

    Branding Guidelines

    FSD's visual identity is based on its core-concepts: Layered, Sliced self-contained parts, Parts & Compose, Segmented. But also we tend to design simple, pretty identity, which should convey the FSD philisophy and be easy to recognize.

    Please, use FSD's identity "as-is", without changes but with our assets for your comfort. This brand guide will help you to use FSD's identity correctly.

    @@ -43,6 +43,6 @@

    See alsoDiscussion (github)
  • History of development with references (figma)
  • Rebranding demo
  • -

    +
    \ No newline at end of file diff --git a/kr/docs/get-started.html b/kr/docs/get-started.html index 0de7065c4a..866e8574a3 100644 --- a/kr/docs/get-started.html +++ b/kr/docs/get-started.html @@ -9,15 +9,15 @@ - - + + -

    🚀 Get Started

    +
    +
    \ No newline at end of file diff --git a/kr/docs/get-started/cheatsheet.html b/kr/docs/get-started/cheatsheet.html index 45c3f5230a..20f0f29b44 100644 --- a/kr/docs/get-started/cheatsheet.html +++ b/kr/docs/get-started/cheatsheet.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Decomposition cheatsheet

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Decomposition cheatsheet

    Use this as a quick reference when you're deciding how to decompose your UI. PDF versions are also available below, so you can print it out and keep one under your pillow.

    Choosing a layer

    Download PDF

    @@ -33,6 +33,6 @@

    See also(Thread) About the difference between features and entities
  • (Thread) About the difference between things and entities (2)
  • (Thread) About the application of criteria for decomposition
  • -

    +
    \ No newline at end of file diff --git a/kr/docs/get-started/faq.html b/kr/docs/get-started/faq.html index 34faf3cf39..bf29de0390 100644 --- a/kr/docs/get-started/faq.html +++ b/kr/docs/get-started/faq.html @@ -9,11 +9,11 @@ - - + + -

    FAQ

    + +

    Answered here

    \ No newline at end of file diff --git a/kr/docs/get-started/overview.html b/kr/docs/get-started/overview.html index 2ff2d136b2..46a7cb4668 100644 --- a/kr/docs/get-started/overview.html +++ b/kr/docs/get-started/overview.html @@ -9,11 +9,11 @@ - - + + -

    둘러보기

    +

    둘러보기

    Feature-Sliced Design (FSD)는 프론트엔드 애플리케이션의 구조를 잡는 아키텍처 방법론입니다. 간단히 말해, 코드 구성에 관한 규칙과 관례를 모아놓은 것입니다. 이 방법론의 주요 목적은 계속 변화하는 비즈니스 요구사항에 직면했을 때 프로젝트를 더 이해하기 쉽고 안정적으로 만드는 것입니다.

    FSD는 규칙을 제시할 뿐만 아니라, 실제 개발 과정을 돕는 다양한 도구들을 함께 제공합니다. 프로젝트 아키텍처를 확인하는 린터, CLI나 IDE를 통한 폴더 생성기, 그리고 다양한 예제 라이브러리를 제공합니다.

    내 프로젝트에 적합할까?

    @@ -127,6 +127,6 @@

    다음 단계FSD로 사고하는 방법을 잘 이해하고 싶으신가요? 튜토리얼을 확인해보세요.
  • 예제를 통해 배우는 것을 선호하시나요? 예제 섹션에 많은 예제가 있습니다.
  • 질문이 있으신가요? 우리의 텔레그램 채팅방에 들러 커뮤니티의 도움을 받으세요.
  • -

    +
    \ No newline at end of file diff --git a/kr/docs/get-started/tutorial.html b/kr/docs/get-started/tutorial.html index f9597f1888..256400b73e 100644 --- a/kr/docs/get-started/tutorial.html +++ b/kr/docs/get-started/tutorial.html @@ -9,11 +9,11 @@ - - + + -

    Tutorial

    +

    Tutorial

    Part 1. On paper

    This tutorial will examine the Real World App, also known as Conduit. Conduit is a basic Medium clone — it lets you read and write articles as well as comment on the articles of others.

    Conduit home page

    @@ -272,6 +272,6 @@

    Article edito
    app/routes/editor._index.tsx, app/routes/editor.$slug.tsx (same content)
    import { ArticleEditPage } from "pages/article-edit";

    export { loader, action } from "pages/article-edit";

    export default ArticleEditPage;

    We’re done now! Log in and try creating a new article. Or “forget” to write the article and see the validation kick in.

    The Conduit article editor, with the title field saying “New article” and the rest of the fields empty. Above the form there are two errors: “Describe what this article is about” and “Write the article itself”.

    The Conduit article editor, with the title field saying “New article” and the rest of the fields empty. Above the form there are two errors: “Describe what this article is about” and “Write the article itself”.
    -

    The profile and settings pages are very similar to the article reader and editor, they are left as an exercise for the reader, that’s you :)

    +

    The profile and settings pages are very similar to the article reader and editor, they are left as an exercise for the reader, that’s you :)

    \ No newline at end of file diff --git a/kr/docs/guides.html b/kr/docs/guides.html index 00e501779c..9ad2303ada 100644 --- a/kr/docs/guides.html +++ b/kr/docs/guides.html @@ -9,11 +9,11 @@ - - + + -

    🎯 Guides

    + +
    Code Issues (Smells)

    General architecture issues for legacy code

    Desegmented • Routing • Cross-imports
    \ No newline at end of file diff --git a/kr/docs/guides/examples.html b/kr/docs/guides/examples.html index ba041ea44d..56e9f703e7 100644 --- a/kr/docs/guides/examples.html +++ b/kr/docs/guides/examples.html @@ -9,16 +9,16 @@ - - + + -

    Examples

    + +
    Page layouts

    Main cases with layouts

    Where to store them • Using widgets in layouts
    \ No newline at end of file diff --git a/kr/docs/guides/examples/auth.html b/kr/docs/guides/examples/auth.html index 415cde39c1..41f3c26022 100644 --- a/kr/docs/guides/examples/auth.html +++ b/kr/docs/guides/examples/auth.html @@ -9,11 +9,11 @@ - - + + -

    Authentication

    +

    Authentication

    Broadly, authentication consists of the following steps:

    1. Get the credentials from the user
    2. @@ -164,6 +164,6 @@

      Automatic logout

      -

      Don't forget to build failsafes for when a request to log out fails, or a request to refresh a login token fails. In both of these cases, you should clear the token store. If you keep your token in Entities, this code can be placed in the model segment as it is pure business logic. If you keep your token in Shared, placing this logic in shared/api might bloat the segment and dilute its purpose. If you're noticing that your API segment contains two several unrelated things, consider splitting out the token management logic into another segment, for example, shared/auth.

    +

    Don't forget to build failsafes for when a request to log out fails, or a request to refresh a login token fails. In both of these cases, you should clear the token store. If you keep your token in Entities, this code can be placed in the model segment as it is pure business logic. If you keep your token in Shared, placing this logic in shared/api might bloat the segment and dilute its purpose. If you're noticing that your API segment contains two several unrelated things, consider splitting out the token management logic into another segment, for example, shared/auth.

    \ No newline at end of file diff --git a/kr/docs/guides/examples/autocompleted.html b/kr/docs/guides/examples/autocompleted.html index 73a86b5dcc..0b39b37005 100644 --- a/kr/docs/guides/examples/autocompleted.html +++ b/kr/docs/guides/examples/autocompleted.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Autocomplete

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Autocomplete

    WIP

    The article is in the process of writing

    To bring the release of the article closer, you can:


    🍰 Stay tuned!

    About decomposition by layers

    @@ -21,6 +21,6 @@

    See also

    +
    \ No newline at end of file diff --git a/kr/docs/guides/examples/browser-api.html b/kr/docs/guides/examples/browser-api.html index b85382882c..955e4e09e9 100644 --- a/kr/docs/guides/examples/browser-api.html +++ b/kr/docs/guides/examples/browser-api.html @@ -9,15 +9,15 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Browser API

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.
    +
    \ No newline at end of file diff --git a/kr/docs/guides/examples/cms.html b/kr/docs/guides/examples/cms.html index 87c59914eb..e26977ab70 100644 --- a/kr/docs/guides/examples/cms.html +++ b/kr/docs/guides/examples/cms.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    CMS

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    CMS

    WIP

    The article is in the process of writing

    To bring the release of the article closer, you can:


    🍰 Stay tuned!

    Features may be different

    In some projects, all the functionality is concentrated in data from the server

    @@ -26,6 +26,6 @@

    https://t.me/feature_sliced/1553

    -

    +
    \ No newline at end of file diff --git a/kr/docs/guides/examples/feedback.html b/kr/docs/guides/examples/feedback.html index 82600e4816..74306915cd 100644 --- a/kr/docs/guides/examples/feedback.html +++ b/kr/docs/guides/examples/feedback.html @@ -9,14 +9,14 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Feedback

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.
    +
    \ No newline at end of file diff --git a/kr/docs/guides/examples/i18n.html b/kr/docs/guides/examples/i18n.html index f209dfde52..f3ecc4d12a 100644 --- a/kr/docs/guides/examples/i18n.html +++ b/kr/docs/guides/examples/i18n.html @@ -9,17 +9,17 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    i18n

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.
    +
    \ No newline at end of file diff --git a/kr/docs/guides/examples/metric.html b/kr/docs/guides/examples/metric.html index ebc3432cfe..e966e39b4b 100644 --- a/kr/docs/guides/examples/metric.html +++ b/kr/docs/guides/examples/metric.html @@ -9,14 +9,14 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Metric

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.
    +
    \ No newline at end of file diff --git a/kr/docs/guides/examples/monorepo.html b/kr/docs/guides/examples/monorepo.html index 3f93a8b2eb..4b73553454 100644 --- a/kr/docs/guides/examples/monorepo.html +++ b/kr/docs/guides/examples/monorepo.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Monorepositories

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Monorepositories

    WIP

    The article is in the process of writing

    To bring the release of the article closer, you can:


    🍰 Stay tuned!

    About applicability for mono repositories, about bff, about microapps

    @@ -22,6 +22,6 @@

    See also(Discussion) About mono repositories and plug-ins-packages
  • (Thread) About the application for a mono repository
  • -

    +
    \ No newline at end of file diff --git a/kr/docs/guides/examples/page-layout.html b/kr/docs/guides/examples/page-layout.html index 5d98672a77..28344c6d5e 100644 --- a/kr/docs/guides/examples/page-layout.html +++ b/kr/docs/guides/examples/page-layout.html @@ -9,11 +9,11 @@ - - + + -

    Page layouts

    +

    Page layouts

    This guide examines the abstraction of a page layout — when several pages share the same overall structure, and differ only in the main content.

    info

    Is your question not covered by this guide? Post your question by leaving feedback on this article (blue button on the right) and we will consider expanding this guide!

    Simple layout

    @@ -47,6 +47,6 @@

    Further reading

    • There's an example of how to build a layout with authentication with React and Remix (equivalent to React Router) in the tutorial.
    • -
    +
    \ No newline at end of file diff --git a/kr/docs/guides/examples/platforms.html b/kr/docs/guides/examples/platforms.html index db2d19ea30..f0fec93a5c 100644 --- a/kr/docs/guides/examples/platforms.html +++ b/kr/docs/guides/examples/platforms.html @@ -9,14 +9,14 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Desktop/Touch platforms

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.
    +
    \ No newline at end of file diff --git a/kr/docs/guides/examples/ssr.html b/kr/docs/guides/examples/ssr.html index fe3fcf9555..a85ecfd77b 100644 --- a/kr/docs/guides/examples/ssr.html +++ b/kr/docs/guides/examples/ssr.html @@ -9,14 +9,14 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    SSR

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.
    +
    \ No newline at end of file diff --git a/kr/docs/guides/examples/theme.html b/kr/docs/guides/examples/theme.html index 48b548af03..0b5fa77b77 100644 --- a/kr/docs/guides/examples/theme.html +++ b/kr/docs/guides/examples/theme.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Theme

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Theme

    WIP

    The article is in the process of writing

    To bring the release of the article closer, you can:


    🍰 Stay tuned!

    Where should I put my work with the theme and palette?

    @@ -22,6 +22,6 @@

    Discussion about the location of the theme, i18n logic

    https://youtu.be/b_nBvHWqxP8?t=133

    -
    +
    \ No newline at end of file diff --git a/kr/docs/guides/examples/types.html b/kr/docs/guides/examples/types.html index fae310ae89..b2dbc15c87 100644 --- a/kr/docs/guides/examples/types.html +++ b/kr/docs/guides/examples/types.html @@ -9,11 +9,11 @@ - - + + -

    Types

    +

    Types

    This guide concerns data types from typed languages like TypeScript and describes where they fit within FSD.

    info

    Is your question not covered by this guide? Post your question by leaving feedback on this article (blue button on the right) and we will consider expanding this guide!

    Utility types

    @@ -142,6 +142,6 @@

    shared/lib/untyped-packages/use-react-screenshot.d.ts
    // This library doesn't have typings, and we didn't want to bother writing our own.
    declare module "use-react-screenshot";

    Auto-generation of types

    -

    It's common to generate types from external sources, for example, generating backend types from an OpenAPI schema. In this case, create a dedicated place in your codebase for these types, like shared/api/openapi. Ideally, you should also include a README in that folder that describes what these files are, how to regenerate them, etc.

    +

    It's common to generate types from external sources, for example, generating backend types from an OpenAPI schema. In this case, create a dedicated place in your codebase for these types, like shared/api/openapi. Ideally, you should also include a README in that folder that describes what these files are, how to regenerate them, etc.

    \ No newline at end of file diff --git a/kr/docs/guides/examples/white-labels.html b/kr/docs/guides/examples/white-labels.html index 5c0fa68df4..9d0a561ab4 100644 --- a/kr/docs/guides/examples/white-labels.html +++ b/kr/docs/guides/examples/white-labels.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    White Labels

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    White Labels

    WIP

    The article is in the process of writing

    To bring the release of the article closer, you can:


    🍰 Stay tuned!

    Figma, brand uikit, templates, adaptability to brands

    @@ -22,6 +22,6 @@

    See also(Thread) About the application for white-labels (branded) projects
  • (Presentation) About white-labels apps and design
  • -

    +
    \ No newline at end of file diff --git a/kr/docs/guides/issues/cross-imports.html b/kr/docs/guides/issues/cross-imports.html index 19d1cbea67..cee517f4c2 100644 --- a/kr/docs/guides/issues/cross-imports.html +++ b/kr/docs/guides/issues/cross-imports.html @@ -9,11 +9,11 @@ - - + + -

    Cross-imports

    +

    Cross-imports

    WIP

    The article is in the process of writing

    To bring the release of the article closer, you can:


    🍰 Stay tuned!

    Cross-imports appear when the layer or abstraction begins to take too much responsibility than it should. That is why the methodology identifies new layers that allow you to uncouple these cross-imports

    @@ -25,6 +25,6 @@

    See also(Thread) About cross-imports and responsibility
  • (Thread) About imports between segments
  • (Thread) About cross-imports inside shared
  • -

    +
    \ No newline at end of file diff --git a/kr/docs/guides/issues/desegmented.html b/kr/docs/guides/issues/desegmented.html index 488f2cd825..e63b3babbd 100644 --- a/kr/docs/guides/issues/desegmented.html +++ b/kr/docs/guides/issues/desegmented.html @@ -9,11 +9,11 @@ - - + + -

    Desegemented

    +

    Desegemented

    WIP

    The article is in the process of writing

    To bring the release of the article closer, you can:


    🍰 Stay tuned!

    Situation

    Very often, there is a situation on projects when modules related to a specific domain from the subject area are unnecessarily desegmented and scattered around the project

    @@ -38,6 +38,6 @@

    See also(Article) About Low Coupling and High Cohesion clearly
  • (Article) Low Coupling and High Cohesion. The Law of Demeter
  • -

    +
    \ No newline at end of file diff --git a/kr/docs/guides/issues/routes.html b/kr/docs/guides/issues/routes.html index 958b5ce336..70aa8c8f5b 100644 --- a/kr/docs/guides/issues/routes.html +++ b/kr/docs/guides/issues/routes.html @@ -9,11 +9,11 @@ - - + + -

    Routing

    + +
    \ No newline at end of file diff --git a/kr/docs/guides/migration/from-legacy.html b/kr/docs/guides/migration/from-legacy.html index b3af2d322f..1e81208340 100644 --- a/kr/docs/guides/migration/from-legacy.html +++ b/kr/docs/guides/migration/from-legacy.html @@ -9,11 +9,11 @@ - - + + -

    Migration from legacy

    +

    Migration from legacy

    WIP

    The article is in the process of writing

    To bring the release of the article closer, you can:


    🍰 Stay tuned!

    The article aggregates the experience of several companies and projects on moving to Feature-Sliced Design with different initial conditions

    @@ -45,6 +45,6 @@

    See also

    +
    \ No newline at end of file diff --git a/kr/docs/guides/migration/from-v1.html b/kr/docs/guides/migration/from-v1.html index a196b22525..8062338621 100644 --- a/kr/docs/guides/migration/from-v1.html +++ b/kr/docs/guides/migration/from-v1.html @@ -9,14 +9,14 @@ - - + + -

    Migration from v1

    + +
    \ No newline at end of file diff --git a/kr/docs/guides/tech/with-nextjs.html b/kr/docs/guides/tech/with-nextjs.html index ec69c5a0c0..7ec3c8ccc2 100644 --- a/kr/docs/guides/tech/with-nextjs.html +++ b/kr/docs/guides/tech/with-nextjs.html @@ -9,11 +9,11 @@ - - + + -

    Usage with NextJS

    + +
    \ No newline at end of file diff --git a/kr/docs/guides/tech/with-nuxtjs.html b/kr/docs/guides/tech/with-nuxtjs.html index 02f6dcd626..56bee1b737 100644 --- a/kr/docs/guides/tech/with-nuxtjs.html +++ b/kr/docs/guides/tech/with-nuxtjs.html @@ -9,11 +9,11 @@ - - + + -

    Usage with NuxtJS

    + +
    \ No newline at end of file diff --git a/kr/docs/guides/tech/with-react-query.html b/kr/docs/guides/tech/with-react-query.html index e76e84e037..148d43e83f 100644 --- a/kr/docs/guides/tech/with-react-query.html +++ b/kr/docs/guides/tech/with-react-query.html @@ -9,11 +9,11 @@ - - + + -

    Usage with React Query

    +
    +
    \ No newline at end of file diff --git a/kr/docs/guides/tech/with-sveltekit.html b/kr/docs/guides/tech/with-sveltekit.html index 18cf54963a..ae78d63c38 100644 --- a/kr/docs/guides/tech/with-sveltekit.html +++ b/kr/docs/guides/tech/with-sveltekit.html @@ -9,11 +9,11 @@ - - + + -

    Usage with SvelteKit

    +

    Usage with SvelteKit

    It is possible to implement FSD in a SvelteKit project, but conflicts arise due to the differences between the structure requirements of a SvelteKit project and the principles of FSD:

    +
    \ No newline at end of file diff --git a/kr/docs/reference.html b/kr/docs/reference.html index 4321e15c32..17b872ceee 100644 --- a/kr/docs/reference.html +++ b/kr/docs/reference.html @@ -9,15 +9,15 @@ - - + + -

    📚 Reference

    + +
    Public API

    Practices for designing scalable and easy-to-integrate modules

    \ No newline at end of file diff --git a/kr/docs/reference/isolation.html b/kr/docs/reference/isolation.html index 1cc43c66c9..7f8c7f93ba 100644 --- a/kr/docs/reference/isolation.html +++ b/kr/docs/reference/isolation.html @@ -9,11 +9,11 @@ - - + + -

    Isolation of modules

    + +
    \ No newline at end of file diff --git a/kr/docs/reference/isolation/coupling-cohesion.html b/kr/docs/reference/isolation/coupling-cohesion.html index b8b34250b1..5ccac6931c 100644 --- a/kr/docs/reference/isolation/coupling-cohesion.html +++ b/kr/docs/reference/isolation/coupling-cohesion.html @@ -9,11 +9,11 @@ - - + + -

    Low Coupling & High Cohesion

    + +
    \ No newline at end of file diff --git a/kr/docs/reference/isolation/decouple-entities.html b/kr/docs/reference/isolation/decouple-entities.html index cadaaa07b7..a9883475e0 100644 --- a/kr/docs/reference/isolation/decouple-entities.html +++ b/kr/docs/reference/isolation/decouple-entities.html @@ -9,11 +9,11 @@ - - + + -

    Decouple entities

    + +
    \ No newline at end of file diff --git a/kr/docs/reference/layers.html b/kr/docs/reference/layers.html index b35489be7d..7f4c181ad3 100644 --- a/kr/docs/reference/layers.html +++ b/kr/docs/reference/layers.html @@ -9,11 +9,11 @@ - - + + -

    Layers

    +

    Layers

    Layers are the first level of organisational hierarchy in Feature-Sliced Design. Their purpose is to separate code based on how much responsibility it needs and how many other modules in the app it depends on.

    note

    On this page, a module refers to an internal module in the application — a file or directory with an index file. Not to be confused with npm packages.

    Every layer carries special semantic meaning to help you determine how much responsibility you should allocate to a module in your code. The names and meanings of layers are standardized across all projects built with Feature-Sliced Design.

    @@ -87,6 +87,6 @@

    AppRouting
  • Store and other context providers
  • Analytics initialization
  • -

    +
    \ No newline at end of file diff --git a/kr/docs/reference/public-api.html b/kr/docs/reference/public-api.html index e018552a7c..4ee9e63711 100644 --- a/kr/docs/reference/public-api.html +++ b/kr/docs/reference/public-api.html @@ -9,11 +9,11 @@ - - + + -

    Public API

    + +
    \ No newline at end of file diff --git a/kr/docs/reference/slices-segments.html b/kr/docs/reference/slices-segments.html index f42d3d6c47..131f1eaa68 100644 --- a/kr/docs/reference/slices-segments.html +++ b/kr/docs/reference/slices-segments.html @@ -9,11 +9,11 @@ - - + + -

    Slices and segments

    +

    Slices and segments

    Slices

    Slices are the second level in the organizational hierarchy of Feature-Sliced Design. Their main purpose is to group code by its meaning for the product, business or just the application.

    The names of slices are not standardized because they are directly determined by the business domain of your application. For example, a photo gallery might have slices photo, create-album, gallery-page. A social network would require different slices, for example, post, add-user-to-friends, news-feed.

    @@ -38,6 +38,6 @@

    SegmentsExamples

    -
    Layeruimodellibapi
    SharedUI kitUsually not usedUtility modules of several related files.
    If you need to use individual helpers, consider using utility libraries such as lodash-es.
    Rudimentary API client with additional features like authentication or caching.
    EntitiesSkeleton of a business entity with slots for interactive elementsData storage of instances of this entity as well as functions for manipulating that data.
    This segment is most fit for storing server-side data. If you use TanStack Query or other methods of implicit storage, you may choose to omit this segment.
    Functions for manipulating instances of this entity that aren't related to storageAPI methods using the API client from Shared for easy communication with the backend
    FeaturesInteractive elements that enable users to use this featureBusiness logic and infrastructure data storage, if needed (e.g., current app theme). This is the code that actually produces value for the user.Infrastructural code that helps to concisely describe the business logic in the model segmentAPI methods that represent this feature on the backend.
    May compose API methods from Entities.
    WidgetsComposition of Entities and Features into self-contained UI blocks.
    Can also contain error boundaries and loading states.
    Infrastructure data storage, if neededNon-business interactions (e.g., gestures) and other necessary code for the block to function on a pageUsually not used, but can contain data loaders in nested routing contexts (e.g., Remix)
    PagesComposition of Entities, Features and Widgets into complete pages.
    Can also contain error boundaries and loading states.
    Usually not usedNon-business interactions (e.g., gestures) and other necessary code for the page to deliver a complete user experienceData loaders for SSR-oriented frameworks
    +
    Layeruimodellibapi
    SharedUI kitUsually not usedUtility modules of several related files.
    If you need to use individual helpers, consider using utility libraries such as lodash-es.
    Rudimentary API client with additional features like authentication or caching.
    EntitiesSkeleton of a business entity with slots for interactive elementsData storage of instances of this entity as well as functions for manipulating that data.
    This segment is most fit for storing server-side data. If you use TanStack Query or other methods of implicit storage, you may choose to omit this segment.
    Functions for manipulating instances of this entity that aren't related to storageAPI methods using the API client from Shared for easy communication with the backend
    FeaturesInteractive elements that enable users to use this featureBusiness logic and infrastructure data storage, if needed (e.g., current app theme). This is the code that actually produces value for the user.Infrastructural code that helps to concisely describe the business logic in the model segmentAPI methods that represent this feature on the backend.
    May compose API methods from Entities.
    WidgetsComposition of Entities and Features into self-contained UI blocks.
    Can also contain error boundaries and loading states.
    Infrastructure data storage, if neededNon-business interactions (e.g., gestures) and other necessary code for the block to function on a pageUsually not used, but can contain data loaders in nested routing contexts (e.g., Remix)
    PagesComposition of Entities, Features and Widgets into complete pages.
    Can also contain error boundaries and loading states.
    Usually not usedNon-business interactions (e.g., gestures) and other necessary code for the page to deliver a complete user experienceData loaders for SSR-oriented frameworks
    \ No newline at end of file diff --git a/kr/examples.html b/kr/examples.html index 7dfc7e6c9a..651b56ae74 100644 --- a/kr/examples.html +++ b/kr/examples.html @@ -9,10 +9,10 @@ - - + + -

    Examples

    List of websites people are building with Feature-Sliced Design

    v2
    Tiny Bunny Mini Game

    Mini-game "21 points" in the universe of the visual novel "Tiny Bunny".

    reactredux-toolkittypescript
    v2
    Roke.to Business

    Business branch of Roketo, a crypto streaming service which allows paying people by the second

    reacteffectortailwindcssturbo
    v2
    Roke.to dApp

    A crypto streaming service which allows paying people by the second

    reacteffectortailwindcss
    v2
    IT bookstore

    Catalog for viewing and searching information technology books

    reactredux toolkittypescriptreact routervitescss
    v2
    Moke Smoke (React Native example)

    An application that helps you quit smoking, published in the App Store and Google. Developed with React Native

    reactrtkpersisttypescriptfirebase
    v2
    Moonlogs (Effector + Forest example)

    Moonlogs is a business-event logging tool with a built-in user-friendly web interface for easy access to events

    foresteffectortailwindtypescriptgo
    v2
    Posts (React Query example)

    Example of using FSD with React Query (Mutation, Query, Pagination)

    reactreact-querytypescriptmaterial ui
    v2
    FalkChat

    FalkChat is your go-to destination for seamless and engaging online conversations.

    reactnextprettierclerktypescripttailwindshadcn/uizustand
    v2
    Polka

    The application is a bookshelf where you can add your favorite books. The application works with the Google Books API.

    vue3piniatypescriptvue-routereslintprettiervitevuetify
    v2
    Fake Cyber Web Store

    Example web store on Vue3

    vue3piniatypescriptfirebasevue-routereslintprettiervite
    v2
    VK Audiopad

    Chrome extension for VK Music

    reactvkuitypescript
    v2
    Сryptolight

    Cryptocurrency review site based on Feature-Sliced Design (Architectural methodology for frontend projects).

    reacteffectornextuitypescriptvite
    v2
    Money Flow

    A mobile application for tracking your expenses and incomes.

    capacitorjsreactreact-routerzustandvitetypescriptmobileandroidios
    v2
    E-Commerce

    This project is an online store built using React. It provides the ability to view the product catalog and product pages

    reactmobxwebpacktypescriptssr
    v2
    Todo app (Vue 3 + Pinia)

    QuickStart todo-app example for Vue developers with pinia store

    vue 3piniavitetypescript
    v2
    Conduit

    A social blogging site powered by Feature-Sliced Design architectural methodology.

    reactreact-routerreact-queryzustandvitetypescript
    v2
    Kinomore (React+Effector)

    Large project on the effector/fsd stack

    reacteffectortypescriptnextjsreact-testing-library
    v2
    Sudoku (React+Effector)

    A simple crossword of numbers on effector / fsd

    reacteffectortypescriptvitetailwindatomic-router
    v2
    Nukeapp (React+ReduxToolkit)

    Shopping app build on React/ReduxToolkit stack

    reactredux-toolkittypescriptvite
    v2
    Simple Greenhouse App (React+MobX)

    Simple demonstration of how FSD can be implemented with TypeScript, React.js, MobX and Firebase

    reactmobxtypescriptfirebasemuivite
    v2
    Todo App (ReactNative+Redux)

    QuickStart todo-app example for ReactNative(Expo) developers

    react-nativeexporedux
    v2
    Rastrr

    A simple and free graphic editor for novice artists

    svelte
    v2
    Draw, I'll Help

    A drawing app with shape correction powered by ML

    svelte
    v2
    Cast

    A podcast listening PWA with automated quality assurance

    svelte
    v2
    Loripsum generator

    Simple fish text generator

    reacteffector
    v2
    Projentry (demo)

    Assistant for your projects

    reactantd
    v2
    Todo App (Angular 13)

    QuickStart todo-app example for Angular developers

    angularrxjs
    v2
    Todo App (Vue 3)

    QuickStart todo-app example for Vue developers

    vuevuexantd
    v2
    Todo App (React+Redux)

    QuickStart todo-app example for React developers (Redux version)

    reactreduxantd
    v2
    Todo App (React+Effector)

    QuickStart todo-app example for React developers (Effector version)

    reacteffectorantd
    v2
    Github Client

    React & GraphQL powered github web-client

    reactgraphqlantd
    v2
    Cardbox

    The best solutions from developers in one place

    reacteffector
    +

    Examples

    List of websites people are building with Feature-Sliced Design

    v2
    Tiny Bunny Mini Game

    Mini-game "21 points" in the universe of the visual novel "Tiny Bunny".

    reactredux-toolkittypescript
    v2
    Roke.to Business

    Business branch of Roketo, a crypto streaming service which allows paying people by the second

    reacteffectortailwindcssturbo
    v2
    Roke.to dApp

    A crypto streaming service which allows paying people by the second

    reacteffectortailwindcss
    v2
    IT bookstore

    Catalog for viewing and searching information technology books

    reactredux toolkittypescriptreact routervitescss
    v2
    Moke Smoke (React Native example)

    An application that helps you quit smoking, published in the App Store and Google. Developed with React Native

    reactrtkpersisttypescriptfirebase
    v2
    Moonlogs (Effector + Forest example)

    Moonlogs is a business-event logging tool with a built-in user-friendly web interface for easy access to events

    foresteffectortailwindtypescriptgo
    v2
    Posts (React Query example)

    Example of using FSD with React Query (Mutation, Query, Pagination)

    reactreact-querytypescriptmaterial ui
    v2
    FalkChat

    FalkChat is your go-to destination for seamless and engaging online conversations.

    reactnextprettierclerktypescripttailwindshadcn/uizustand
    v2
    Polka

    The application is a bookshelf where you can add your favorite books. The application works with the Google Books API.

    vue3piniatypescriptvue-routereslintprettiervitevuetify
    v2
    Fake Cyber Web Store

    Example web store on Vue3

    vue3piniatypescriptfirebasevue-routereslintprettiervite
    v2
    VK Audiopad

    Chrome extension for VK Music

    reactvkuitypescript
    v2
    Сryptolight

    Cryptocurrency review site based on Feature-Sliced Design (Architectural methodology for frontend projects).

    reacteffectornextuitypescriptvite
    v2
    Money Flow

    A mobile application for tracking your expenses and incomes.

    capacitorjsreactreact-routerzustandvitetypescriptmobileandroidios
    v2
    E-Commerce

    This project is an online store built using React. It provides the ability to view the product catalog and product pages

    reactmobxwebpacktypescriptssr
    v2
    Todo app (Vue 3 + Pinia)

    QuickStart todo-app example for Vue developers with pinia store

    vue 3piniavitetypescript
    v2
    Conduit

    A social blogging site powered by Feature-Sliced Design architectural methodology.

    reactreact-routerreact-queryzustandvitetypescript
    v2
    Kinomore (React+Effector)

    Large project on the effector/fsd stack

    reacteffectortypescriptnextjsreact-testing-library
    v2
    Sudoku (React+Effector)

    A simple crossword of numbers on effector / fsd

    reacteffectortypescriptvitetailwindatomic-router
    v2
    Nukeapp (React+ReduxToolkit)

    Shopping app build on React/ReduxToolkit stack

    reactredux-toolkittypescriptvite
    v2
    Simple Greenhouse App (React+MobX)

    Simple demonstration of how FSD can be implemented with TypeScript, React.js, MobX and Firebase

    reactmobxtypescriptfirebasemuivite
    v2
    Todo App (ReactNative+Redux)

    QuickStart todo-app example for ReactNative(Expo) developers

    react-nativeexporedux
    v2
    Rastrr

    A simple and free graphic editor for novice artists

    svelte
    v2
    Draw, I'll Help

    A drawing app with shape correction powered by ML

    svelte
    v2
    Cast

    A podcast listening PWA with automated quality assurance

    svelte
    v2
    Loripsum generator

    Simple fish text generator

    reacteffector
    v2
    Projentry (demo)

    Assistant for your projects

    reactantd
    v2
    Todo App (Angular 13)

    QuickStart todo-app example for Angular developers

    angularrxjs
    v2
    Todo App (Vue 3)

    QuickStart todo-app example for Vue developers

    vuevuexantd
    v2
    Todo App (React+Redux)

    QuickStart todo-app example for React developers (Redux version)

    reactreduxantd
    v2
    Todo App (React+Effector)

    QuickStart todo-app example for React developers (Effector version)

    reacteffectorantd
    v2
    Github Client

    React & GraphQL powered github web-client

    reactgraphqlantd
    v2
    Cardbox

    The best solutions from developers in one place

    reacteffector
    \ No newline at end of file diff --git a/kr/index.html b/kr/index.html index 65f16a615d..7b27fc5e76 100644 --- a/kr/index.html +++ b/kr/index.html @@ -9,10 +9,10 @@ - - + + -

    Feature-Sliced Design

    Architectural methodology for frontend projects

    Features

    Explicit business logic

    Easily discoverable architecture thanks to domain scopes

    Adaptability

    Architecture components can be flexibly replaced and added for new requirements

    Tech debt & Refactoring

    Each module can be independently modified / rewritten without side effects

    Explicit code reuse

    A balance is maintained between DRY and local customization

    Concepts

    Public API

    Each module must have a declaration of its public API at the top level

    Isolation

    The module should not depend directly on other modules of the same layer or overlying layers

    Needs Driven

    Orientation to business and user needs

    Scheme

    Companies using FSD

    FSD is used in your company? Tell us
    +

    Feature-Sliced Design

    Architectural methodology for frontend projects

    Features

    Explicit business logic

    Easily discoverable architecture thanks to domain scopes

    Adaptability

    Architecture components can be flexibly replaced and added for new requirements

    Tech debt & Refactoring

    Each module can be independently modified / rewritten without side effects

    Explicit code reuse

    A balance is maintained between DRY and local customization

    Concepts

    Public API

    Each module must have a declaration of its public API at the top level

    Isolation

    The module should not depend directly on other modules of the same layer or overlying layers

    Needs Driven

    Orientation to business and user needs

    Scheme

    Companies using FSD

    FSD is used in your company? Tell us
    \ No newline at end of file diff --git a/kr/nav.html b/kr/nav.html index 457d80d8f9..a8f1181ac9 100644 --- a/kr/nav.html +++ b/kr/nav.html @@ -9,11 +9,11 @@ - - + + -

    🧭 Navigation

    Legacy routes

    After the restructuring of the documentation, some routes were changed. Below you can find the page you may have been looking for.

    But there are redirects from old links for compatibility

    🚀 Get Started

    ⚡️ Simplified and merged

    Tutorial

    old: /docs/get-started/quick-start
    new: /docs/get-started/tutorial

    Basics

    old: /docs/get-started/basics
    new: /docs/get-started/overview

    Decompose Cheatsheet

    old: /docs/get-started/tutorial/decompose; +

    🧭 Navigation

    Legacy routes

    After the restructuring of the documentation, some routes were changed. Below you can find the page you may have been looking for.

    But there are redirects from old links for compatibility

    🍰 Alternatives

    ⚡️ Moved and merged to /about/alternatives as advanced materials

    Architecture approaches alternatives

    old: /docs/about/alternatives/big-ball-of-mud; /docs/about/alternatives/design-principles; diff --git a/kr/search.html b/kr/search.html index 9438e63050..ac8a67dd82 100644 --- a/kr/search.html +++ b/kr/search.html @@ -9,10 +9,10 @@ - - + + - + \ No newline at end of file diff --git a/kr/versions.html b/kr/versions.html index 994d62dbba..a2b5ac24e2 100644 --- a/kr/versions.html +++ b/kr/versions.html @@ -9,10 +9,10 @@ - - + + -

    Feature-Sliced Design versions

    Feature-Sliced Design v2.0.0 (Current)

    The documentation for the currently published version can be found here

    v2.0.0 🍰Release NotesDocumentationMigration from v1

    Feature Slices v1 (Legacy)

    Documentation for older versions of feature-slices can be found here

    v1.0Documentation
    v0.1Documentation

    Feature Driven (Legacy)

    Documentation for older versions of feature-driven can be found here

    v0.1Documentation
    Example (kof)Github
    +

    Feature-Sliced Design versions

    Feature-Sliced Design v2.0.0 (Current)

    The documentation for the currently published version can be found here

    v2.0.0 🍰Release NotesDocumentationMigration from v1

    Feature Slices v1 (Legacy)

    Documentation for older versions of feature-slices can be found here

    v1.0Documentation
    v0.1Documentation

    Feature Driven (Legacy)

    Documentation for older versions of feature-driven can be found here

    v0.1Documentation
    Example (kof)Github
    \ No newline at end of file diff --git a/nav.html b/nav.html index bd2762095a..102df020a7 100644 --- a/nav.html +++ b/nav.html @@ -9,11 +9,11 @@ - - + + -

    🧭 Navigation

    Legacy routes

    After the restructuring of the documentation, some routes were changed. Below you can find the page you may have been looking for.

    But there are redirects from old links for compatibility

    🚀 Get Started

    ⚡️ Simplified and merged

    Tutorial

    old: /docs/get-started/quick-start
    new: /docs/get-started/tutorial

    Basics

    old: /docs/get-started/basics
    new: /docs/get-started/overview

    Decompose Cheatsheet

    old: /docs/get-started/tutorial/decompose; +

    🧭 Navigation

    Legacy routes

    After the restructuring of the documentation, some routes were changed. Below you can find the page you may have been looking for.

    But there are redirects from old links for compatibility

    🍰 Alternatives

    ⚡️ Moved and merged to /about/alternatives as advanced materials

    Architecture approaches alternatives

    old: /docs/about/alternatives/big-ball-of-mud; /docs/about/alternatives/design-principles; diff --git a/ru/404.html b/ru/404.html index 9d6e682466..92525d3de4 100644 --- a/ru/404.html +++ b/ru/404.html @@ -9,10 +9,10 @@ - - + + -

    Страница не найдена

    К сожалению, мы не смогли найти запрашиваемую вами страницу.

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

    +

    Страница не найдена

    К сожалению, мы не смогли найти запрашиваемую вами страницу.

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

    \ No newline at end of file diff --git a/ru/assets/js/04b1b9d4.46b1de96.js b/ru/assets/js/04b1b9d4.7a48886e.js similarity index 99% rename from ru/assets/js/04b1b9d4.46b1de96.js rename to ru/assets/js/04b1b9d4.7a48886e.js index b01fd02f94..98bd7ced1a 100644 --- a/ru/assets/js/04b1b9d4.46b1de96.js +++ b/ru/assets/js/04b1b9d4.7a48886e.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[5263],{4284:(e,s,i)=>{i.d(s,{Ay:()=>l,RM:()=>c});var t=i(6070),n=i(5710),r=(i(758),i(8886)),d=i(316);const a=e=>{let{ticket:s}=e;const i=`https://github.com/feature-sliced/documentation/issues/${s}`;return(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{children:(0,d.T)({id:"shared.wip.title"})}),(0,t.jsx)("p",{children:(0,d.T)({id:"shared.wip.subtitle"})}),(0,t.jsxs)("ul",{children:[(0,t.jsxs)("li",{children:[(0,d.T)({id:"shared.wip.var.feedback.base"}),(0,t.jsx)(r.A,{to:i,children:(0,d.T)({id:"shared.wip.var.feedback.link"})})]}),(0,t.jsxs)("li",{children:[(0,d.T)({id:"shared.wip.var.material.base"}),(0,t.jsx)(r.A,{to:"https://t.me/feature_sliced",children:(0,d.T)({id:"shared.wip.var.material.link"})})]}),(0,t.jsxs)("li",{children:[(0,d.T)({id:"shared.wip.var.contribute.base"}),(0,t.jsx)(r.A,{to:"https://github.com/feature-sliced/documentation/blob/master/CONTRIBUTING.md",children:(0,d.T)({id:"shared.wip.var.contribute.link"})})]})]}),(0,t.jsx)("br",{}),(0,t.jsx)("p",{children:(0,t.jsx)("i",{children:"\ud83c\udf70 Stay tuned!"})})]})},c=[];function o(e){const s={admonition:"admonition",...(0,n.R)(),...e.components};return(0,t.jsx)(s.admonition,{title:"WIP",type:"caution",children:(0,t.jsx)(a,{ticket:e.ticket})})}function l(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(o,{...e})}):o(e)}},2144:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>d,metadata:()=>c,toc:()=>l});var t=i(6070),n=i(5710),r=i(4284);const d={sidebar_position:3,sidebar_class_name:"sidebar-item--wip"},a="\u0420\u043e\u0443\u0442\u0438\u043d\u0433",c={id:"guides/issues/routes",title:"\u0420\u043e\u0443\u0442\u0438\u043d\u0433",description:"\u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044f",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/guides/issues/routes.mdx",sourceDirName:"guides/issues",slug:"/guides/issues/routes",permalink:"/ru/docs/guides/issues/routes",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/guides/issues/routes.mdx",tags:[],version:"current",lastUpdatedAt:1727030144e3,sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_class_name:"sidebar-item--wip"},sidebar:"guidesSidebar",previous:{title:"\u0414\u0435\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f",permalink:"/ru/docs/guides/issues/desegmented"},next:{title:"\u041a\u0440\u043e\u0441\u0441-\u0438\u043c\u043f\u043e\u0440\u0442\u044b",permalink:"/ru/docs/guides/issues/cross-imports"}},o={},l=[...r.RM,{value:"\u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044f",id:"situation",level:2},{value:"\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430",id:"problem",level:2},{value:"\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c",id:"if-you-ignore-it",level:2},{value:"\u0420\u0435\u0448\u0435\u043d\u0438\u0435",id:"solution",level:2},{value:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435",id:"see-also",level:2}];function u(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,n.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"\u0440\u043e\u0443\u0442\u0438\u043d\u0433",children:"\u0420\u043e\u0443\u0442\u0438\u043d\u0433"})}),"\n",(0,t.jsx)(r.Ay,{ticket:"169"}),"\n",(0,t.jsx)(s.h2,{id:"situation",children:"\u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044f"}),"\n",(0,t.jsx)(s.p,{children:"\u0423\u0440\u043b\u044b \u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c \u0445\u0430\u0440\u0434\u043a\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0441\u043b\u043e\u044f\u0445 \u043d\u0438\u0436\u0435 pages"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-tsx",metastring:'title="entities/post/card"',children:"\n\n \n ...\n\n"})}),"\n",(0,t.jsx)(s.h2,{id:"problem",children:"\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430"}),"\n",(0,t.jsx)(s.p,{children:"\u0423\u0440\u043b\u044b \u043d\u0435 \u0441\u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u0441\u043b\u043e\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u0433\u0434\u0435 \u0438\u043c \u0438 \u043c\u0435\u0441\u0442\u043e \u043f\u043e \u0441\u043a\u043e\u0443\u043f\u0443 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438"}),"\n",(0,t.jsx)(s.h2,{id:"if-you-ignore-it",children:"\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c"}),"\n",(0,t.jsx)(s.p,{children:"\u0422\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0443\u0440\u043b\u043e\u0432, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0433\u043e\u043b\u043e\u0432\u0435, \u0447\u0442\u043e \u044d\u0442\u0438 \u0443\u0440\u043b\u044b (\u0438 \u043b\u043e\u0433\u0438\u043a\u0430 \u0443\u0440\u043b\u043e\u0432/\u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0432) \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u043b\u043e\u044f\u0445 \u043a\u0440\u043e\u043c\u0435 pages"}),"\n",(0,t.jsx)(s.p,{children:"\u0410 \u0442\u0430\u043a\u0436\u0435 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u0442\u043e\u0432\u0430\u0440\u0430 \u0431\u0435\u0440\u0435\u0442 \u0447\u0430\u0441\u0442\u044c \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u0447\u0442\u043e \u0440\u0430\u0437\u043c\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0443"}),"\n",(0,t.jsx)(s.h2,{id:"solution",children:"\u0420\u0435\u0448\u0435\u043d\u0438\u0435"}),"\n",(0,t.jsx)(s.p,{children:"\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0443\u0440\u043b\u0430\u043c\u0438/\u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u0430\u043c\u0438 \u043e\u0442 \u0443\u0440\u043e\u0432\u043d\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0438 \u0432\u044b\u0448\u0435"}),"\n",(0,t.jsx)(s.p,{children:"\u0412 \u0441\u043b\u043e\u0438 \u043d\u0438\u0436\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e/\u043f\u0440\u043e\u043f\u0441\u044b/\u0444\u0430\u0431\u0440\u0438\u043a\u0438"}),"\n",(0,t.jsx)(s.h2,{id:"see-also",children:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://t.me/feature_sliced/4389",children:'(\u0422\u0440\u0435\u0434) \u0427\u0442\u043e \u0435\u0441\u043b\u0438 "\u0437\u0430\u0448\u0438\u0432\u0430\u0442\u044c" \u0440\u043e\u0443\u0442\u0438\u043d\u0433 \u0432 entities/features/widgets'})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://t.me/feature_sliced/3756",children:"(\u0422\u0440\u0435\u0434) \u041f\u043e\u0447\u0435\u043c\u0443 \u0440\u0430\u0437\u043c\u0430\u0437\u044b\u0432\u0430\u0435 \u043b\u043e\u0433\u0438\u043a\u0443 \u0440\u043e\u0443\u0442\u043e\u0432 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 pages"})}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},5710:(e,s,i)=>{i.d(s,{R:()=>d,x:()=>a});var t=i(758);const n={},r=t.createContext(n);function d(e){const s=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[5263],{4284:(e,s,i)=>{i.d(s,{Ay:()=>l,RM:()=>c});var t=i(6070),n=i(5710),r=(i(758),i(8886)),d=i(316);const a=e=>{let{ticket:s}=e;const i=`https://github.com/feature-sliced/documentation/issues/${s}`;return(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{children:(0,d.T)({id:"shared.wip.title"})}),(0,t.jsx)("p",{children:(0,d.T)({id:"shared.wip.subtitle"})}),(0,t.jsxs)("ul",{children:[(0,t.jsxs)("li",{children:[(0,d.T)({id:"shared.wip.var.feedback.base"}),(0,t.jsx)(r.A,{to:i,children:(0,d.T)({id:"shared.wip.var.feedback.link"})})]}),(0,t.jsxs)("li",{children:[(0,d.T)({id:"shared.wip.var.material.base"}),(0,t.jsx)(r.A,{to:"https://t.me/feature_sliced",children:(0,d.T)({id:"shared.wip.var.material.link"})})]}),(0,t.jsxs)("li",{children:[(0,d.T)({id:"shared.wip.var.contribute.base"}),(0,t.jsx)(r.A,{to:"https://github.com/feature-sliced/documentation/blob/master/CONTRIBUTING.md",children:(0,d.T)({id:"shared.wip.var.contribute.link"})})]})]}),(0,t.jsx)("br",{}),(0,t.jsx)("p",{children:(0,t.jsx)("i",{children:"\ud83c\udf70 Stay tuned!"})})]})},c=[];function o(e){const s={admonition:"admonition",...(0,n.R)(),...e.components};return(0,t.jsx)(s.admonition,{title:"WIP",type:"caution",children:(0,t.jsx)(a,{ticket:e.ticket})})}function l(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(o,{...e})}):o(e)}},2144:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>d,metadata:()=>c,toc:()=>l});var t=i(6070),n=i(5710),r=i(4284);const d={sidebar_position:3,sidebar_class_name:"sidebar-item--wip"},a="\u0420\u043e\u0443\u0442\u0438\u043d\u0433",c={id:"guides/issues/routes",title:"\u0420\u043e\u0443\u0442\u0438\u043d\u0433",description:"\u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044f",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/guides/issues/routes.mdx",sourceDirName:"guides/issues",slug:"/guides/issues/routes",permalink:"/ru/docs/guides/issues/routes",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/guides/issues/routes.mdx",tags:[],version:"current",lastUpdatedAt:1727540389e3,sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_class_name:"sidebar-item--wip"},sidebar:"guidesSidebar",previous:{title:"\u0414\u0435\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f",permalink:"/ru/docs/guides/issues/desegmented"},next:{title:"\u041a\u0440\u043e\u0441\u0441-\u0438\u043c\u043f\u043e\u0440\u0442\u044b",permalink:"/ru/docs/guides/issues/cross-imports"}},o={},l=[...r.RM,{value:"\u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044f",id:"situation",level:2},{value:"\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430",id:"problem",level:2},{value:"\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c",id:"if-you-ignore-it",level:2},{value:"\u0420\u0435\u0448\u0435\u043d\u0438\u0435",id:"solution",level:2},{value:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435",id:"see-also",level:2}];function u(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,n.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"\u0440\u043e\u0443\u0442\u0438\u043d\u0433",children:"\u0420\u043e\u0443\u0442\u0438\u043d\u0433"})}),"\n",(0,t.jsx)(r.Ay,{ticket:"169"}),"\n",(0,t.jsx)(s.h2,{id:"situation",children:"\u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044f"}),"\n",(0,t.jsx)(s.p,{children:"\u0423\u0440\u043b\u044b \u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c \u0445\u0430\u0440\u0434\u043a\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0441\u043b\u043e\u044f\u0445 \u043d\u0438\u0436\u0435 pages"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-tsx",metastring:'title="entities/post/card"',children:"\n\n \n ...\n\n"})}),"\n",(0,t.jsx)(s.h2,{id:"problem",children:"\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430"}),"\n",(0,t.jsx)(s.p,{children:"\u0423\u0440\u043b\u044b \u043d\u0435 \u0441\u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u0441\u043b\u043e\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u0433\u0434\u0435 \u0438\u043c \u0438 \u043c\u0435\u0441\u0442\u043e \u043f\u043e \u0441\u043a\u043e\u0443\u043f\u0443 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438"}),"\n",(0,t.jsx)(s.h2,{id:"if-you-ignore-it",children:"\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c"}),"\n",(0,t.jsx)(s.p,{children:"\u0422\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0443\u0440\u043b\u043e\u0432, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0433\u043e\u043b\u043e\u0432\u0435, \u0447\u0442\u043e \u044d\u0442\u0438 \u0443\u0440\u043b\u044b (\u0438 \u043b\u043e\u0433\u0438\u043a\u0430 \u0443\u0440\u043b\u043e\u0432/\u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0432) \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u043b\u043e\u044f\u0445 \u043a\u0440\u043e\u043c\u0435 pages"}),"\n",(0,t.jsx)(s.p,{children:"\u0410 \u0442\u0430\u043a\u0436\u0435 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u0442\u043e\u0432\u0430\u0440\u0430 \u0431\u0435\u0440\u0435\u0442 \u0447\u0430\u0441\u0442\u044c \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u0447\u0442\u043e \u0440\u0430\u0437\u043c\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0443"}),"\n",(0,t.jsx)(s.h2,{id:"solution",children:"\u0420\u0435\u0448\u0435\u043d\u0438\u0435"}),"\n",(0,t.jsx)(s.p,{children:"\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0443\u0440\u043b\u0430\u043c\u0438/\u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u0430\u043c\u0438 \u043e\u0442 \u0443\u0440\u043e\u0432\u043d\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0438 \u0432\u044b\u0448\u0435"}),"\n",(0,t.jsx)(s.p,{children:"\u0412 \u0441\u043b\u043e\u0438 \u043d\u0438\u0436\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e/\u043f\u0440\u043e\u043f\u0441\u044b/\u0444\u0430\u0431\u0440\u0438\u043a\u0438"}),"\n",(0,t.jsx)(s.h2,{id:"see-also",children:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://t.me/feature_sliced/4389",children:'(\u0422\u0440\u0435\u0434) \u0427\u0442\u043e \u0435\u0441\u043b\u0438 "\u0437\u0430\u0448\u0438\u0432\u0430\u0442\u044c" \u0440\u043e\u0443\u0442\u0438\u043d\u0433 \u0432 entities/features/widgets'})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://t.me/feature_sliced/3756",children:"(\u0422\u0440\u0435\u0434) \u041f\u043e\u0447\u0435\u043c\u0443 \u0440\u0430\u0437\u043c\u0430\u0437\u044b\u0432\u0430\u0435 \u043b\u043e\u0433\u0438\u043a\u0443 \u0440\u043e\u0443\u0442\u043e\u0432 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 pages"})}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},5710:(e,s,i)=>{i.d(s,{R:()=>d,x:()=>a});var t=i(758);const n={},r=t.createContext(n);function d(e){const s=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/ru/assets/js/07deeff8.fc4d71df.js b/ru/assets/js/07deeff8.96fe02cc.js similarity index 98% rename from ru/assets/js/07deeff8.fc4d71df.js rename to ru/assets/js/07deeff8.96fe02cc.js index f8d0b50b6c..ea852cf94c 100644 --- a/ru/assets/js/07deeff8.fc4d71df.js +++ b/ru/assets/js/07deeff8.96fe02cc.js @@ -1,2 +1,2 @@ -/*! For license information please see 07deeff8.fc4d71df.js.LICENSE.txt */ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[230],{7327:(e,t,n)=>{n.d(t,{Ay:()=>o,RM:()=>i});var s=n(6070),c=n(5710),a=n(8173);const i=[];function r(e){return(0,s.jsx)(a.A,{...e})}function o(e={}){const{wrapper:t}={...(0,c.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(r,{...e})}):r(e)}},45:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>C,contentTitle:()=>b,default:()=>w,frontMatter:()=>A,metadata:()=>R,toc:()=>M});var s=n(6070),c=n(5710),a=n(7327),i=n(991),r=n(758);const o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M876.6 239.5c-.5-.9-1.2-1.8-2-2.5-5-5-13.1-5-18.1 0L684.2 409.3l-67.9-67.9L788.7 169c.8-.8 1.4-1.6 2-2.5 3.6-6.1 1.6-13.9-4.5-17.5-98.2-58-226.8-44.7-311.3 39.7-67 67-89.2 162-66.5 247.4l-293 293c-3 3-2.8 7.9.3 11l169.7 169.7c3.1 3.1 8.1 3.3 11 .3l292.9-292.9c85.5 22.8 180.5.7 247.6-66.4 84.4-84.5 97.7-213.1 39.7-311.3zM786 499.8c-58.1 58.1-145.3 69.3-214.6 33.6l-8.8 8.8-.1-.1-274 274.1-79.2-79.2 230.1-230.1s0 .1.1.1l52.8-52.8c-35.7-69.3-24.5-156.5 33.6-214.6a184.2 184.2 0 01144-53.5L537 318.9a32.05 32.05 0 000 45.3l124.5 124.5a32.05 32.05 0 0045.3 0l132.8-132.8c3.7 51.8-14.4 104.8-53.6 143.9z"}}]},name:"tool",theme:"outlined"};var d=n(5624),l=function(e,t){return r.createElement(d.A,(0,i.A)({},e,{ref:t,icon:o}))};const u=r.forwardRef(l);const h={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 912H144c-17.7 0-32-14.3-32-32V144c0-17.7 14.3-32 32-32h360c4.4 0 8 3.6 8 8v56c0 4.4-3.6 8-8 8H184v656h656V520c0-4.4 3.6-8 8-8h56c4.4 0 8 3.6 8 8v360c0 17.7-14.3 32-32 32zM653.3 424.6l52.2 52.2a8.01 8.01 0 01-4.7 13.6l-179.4 21c-5.1.6-9.5-3.7-8.9-8.9l21-179.4c.8-6.6 8.9-9.4 13.6-4.7l52.4 52.4 256.2-256.2c3.1-3.1 8.2-3.1 11.3 0l42.4 42.4c3.1 3.1 3.1 8.2 0 11.3L653.3 424.6z"}}]},name:"import",theme:"outlined"};var m=function(e,t){return r.createElement(d.A,(0,i.A)({},e,{ref:t,icon:h}))};const p=r.forwardRef(m);const f={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M841 370c3-3.3 2.7-8.3-.6-11.3a8.24 8.24 0 00-5.3-2.1h-72.6c-2.4 0-4.6 1-6.1 2.8L633.5 504.6a7.96 7.96 0 01-13.4-1.9l-63.5-141.3a7.9 7.9 0 00-7.3-4.7H380.7l.9-4.7 8-42.3c10.5-55.4 38-81.4 85.8-81.4 18.6 0 35.5 1.7 48.8 4.7l14.1-66.8c-22.6-4.7-35.2-6.1-54.9-6.1-103.3 0-156.4 44.3-175.9 147.3l-9.4 49.4h-97.6c-3.8 0-7.1 2.7-7.8 6.4L181.9 415a8.07 8.07 0 007.8 9.7H284l-89 429.9a8.07 8.07 0 007.8 9.7H269c3.8 0 7.1-2.7 7.8-6.4l89.7-433.1h135.8l68.2 139.1c1.4 2.9 1 6.4-1.2 8.8l-180.6 203c-2.9 3.3-2.6 8.4.7 11.3 1.5 1.3 3.4 2 5.3 2h72.7c2.4 0 4.6-1 6.1-2.8l123.7-146.7c2.8-3.4 7.9-3.8 11.3-1 .9.8 1.6 1.7 2.1 2.8L676.4 784c1.3 2.8 4.1 4.7 7.3 4.7h64.6a8.02 8.02 0 007.2-11.5l-95.2-198.9c-1.4-2.9-.9-6.4 1.3-8.8L841 370z"}}]},name:"function",theme:"outlined"};var g=function(e,t){return r.createElement(d.A,(0,i.A)({},e,{ref:t,icon:f}))};const x=r.forwardRef(g);const v={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M304 280h56c4.4 0 8-3.6 8-8 0-28.3 5.9-53.2 17.1-73.5 10.6-19.4 26-34.8 45.4-45.4C450.9 142 475.7 136 504 136h16c28.3 0 53.2 5.9 73.5 17.1 19.4 10.6 34.8 26 45.4 45.4C650 218.9 656 243.7 656 272c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8 0-40-8.8-76.7-25.9-108.1a184.31 184.31 0 00-74-74C596.7 72.8 560 64 520 64h-16c-40 0-76.7 8.8-108.1 25.9a184.31 184.31 0 00-74 74C304.8 195.3 296 232 296 272c0 4.4 3.6 8 8 8z"}},{tag:"path",attrs:{d:"M940 512H792V412c76.8 0 139-62.2 139-139 0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8a63 63 0 01-63 63H232a63 63 0 01-63-63c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8 0 76.8 62.2 139 139 139v100H84c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h148v96c0 6.5.2 13 .7 19.3C164.1 728.6 116 796.7 116 876c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8 0-44.2 23.9-82.9 59.6-103.7a273 273 0 0022.7 49c24.3 41.5 59 76.2 100.5 100.5S460.5 960 512 960s99.8-13.9 141.3-38.2a281.38 281.38 0 00123.2-149.5A120 120 0 01836 876c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8 0-79.3-48.1-147.4-116.7-176.7.4-6.4.7-12.8.7-19.3v-96h148c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM716 680c0 36.8-9.7 72-27.8 102.9-17.7 30.3-43 55.6-73.3 73.3C584 874.3 548.8 884 512 884s-72-9.7-102.9-27.8c-30.3-17.7-55.6-43-73.3-73.3A202.75 202.75 0 01308 680V412h408v268z"}}]},name:"bug",theme:"outlined"};var j=function(e,t){return r.createElement(d.A,(0,i.A)({},e,{ref:t,icon:v}))};const _=r.forwardRef(j),A={hide_table_of_contents:!0,pagination_prev:"get-started/index"},b="\ud83c\udfaf \u0413\u0430\u0439\u0434\u044b",R={id:"guides/index",title:"\ud83c\udfaf \u0413\u0430\u0439\u0434\u044b",description:"PRACTICE-ORIENTED",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/guides/index.mdx",sourceDirName:"guides",slug:"/guides/",permalink:"/ru/docs/guides/",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/guides/index.mdx",tags:[],version:"current",lastUpdatedAt:1727030144e3,frontMatter:{hide_table_of_contents:!0,pagination_prev:"get-started/index"},sidebar:"guidesSidebar",previous:{title:"\ud83d\ude80 \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442",permalink:"/ru/docs/get-started/"},next:{title:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b",permalink:"/ru/docs/guides/examples/"}},C={},M=[{value:"\u0413\u043b\u0430\u0432\u043d\u043e\u0435",id:"main",level:2},...a.RM,...a.RM,...a.RM,...a.RM];function T(e){const t={h1:"h1",h2:"h2",header:"header",p:"p",...(0,c.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"-\u0433\u0430\u0439\u0434\u044b",children:"\ud83c\udfaf \u0413\u0430\u0439\u0434\u044b"})}),"\n",(0,s.jsx)("span",{class:"badge badge--primary margin-bottom--md",children:"PRACTICE-ORIENTED"}),"\n",(0,s.jsx)("p",{class:"summary",children:(0,s.jsx)(t.p,{children:'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0433\u0430\u0439\u0434\u044b \u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044e Feature-Sliced Design. \u0412 \u044d\u0442\u043e\u043c \u0436\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0433\u0430\u0439\u0434\u044b \u043f\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0438 \u0445\u0435\u043d\u0434\u0431\u0443\u043a \u043f\u0430\u0433\u0443\u0431\u043d\u044b\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u043a. \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u044b\u0442\u0430\u0435\u0442\u0435\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u0438\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u044e "\u0432 \u0431\u043e\u044e"'})}),"\n",(0,s.jsx)(t.h2,{id:"main",children:"\u0413\u043b\u0430\u0432\u043d\u043e\u0435"}),"\n","\n",(0,s.jsx)(a.Ay,{title:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b",description:"\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438",to:"/docs/guides/examples",Icon:u,tags:["\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f","\u0422\u0438\u043f\u044b","\u041b\u0435\u0439\u0430\u0443\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b"]}),"\n",(0,s.jsx)(a.Ay,{title:"\u041c\u0438\u0433\u0440\u0430\u0446\u0438\u044f",description:"\u0413\u0430\u0439\u0434\u044b \u043f\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 \u043b\u0435\u0433\u0430\u0441\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432",to:"/docs/guides/migration/from-v1",Icon:p,tags:["\u041b\u0435\u0433\u0430\u0441\u0438","FSv1"]}),"\n",(0,s.jsx)(a.Ay,{title:"\u0422\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438",description:"\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u0433\u0430\u0439\u0434\u044b \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e",to:"/docs/guides/tech/with-nextjs",Icon:x}),"\n",(0,s.jsx)(a.Ay,{title:"Code Issues (Smells)",description:"\u041e\u0431\u0449\u0438\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0434\u043b\u044f \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u0434\u0435",to:"/docs/guides/issues/desegmented",Icon:_,tags:["\u0414\u0435\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f","\u0420\u043e\u0443\u0442\u0438\u043d\u0433","\u041a\u0440\u043e\u0441\u0441-\u0438\u043c\u043f\u043e\u0440\u0442\u044b"]})]})}function w(e={}){const{wrapper:t}={...(0,c.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(T,{...e})}):T(e)}},8173:(e,t,n)=>{n.d(t,{Y:()=>r,A:()=>d});n(758);var s=n(3526),c=n(8886);const a={root:"root_GfON",rootDisabled:"rootDisabled_SFUB",details:"details_xxkR",detailsTags:"detailsTags_uTQx",icon:"icon_ciqP",title:"title_pSH5",description:"description__Fep",miniTheme:"miniTheme_ePfp",primaryTheme:"primaryTheme_CilO",defaultTheme:"defaultTheme_j3I8"};var i=n(6070);const r=e=>{const{title:t,description:n,to:r,Icon:d,tags:l,className:u,disabled:h,theme:m="default"}=e;return(0,i.jsxs)(c.A,{className:(0,s.A)(a.root,u,h&&a.rootDisabled,a[`${m}Theme`]),to:r,children:[(0,i.jsx)(o,{Icon:d}),(0,i.jsxs)("div",{className:a.details,children:[(0,i.jsxs)("div",{className:a.detailsMain,children:[(0,i.jsx)("span",{className:a.title,children:t}),(0,i.jsx)("p",{className:a.description,children:n})]}),l&&(0,i.jsx)("div",{className:a.detailsTags,children:l.join(" \u2022 ")})]})]})},o=e=>{let{Icon:t}=e;return t?"string"==typeof t?(0,i.jsx)("span",{className:a.icon,children:t}):(0,i.jsx)(t,{className:a.icon}):null},d=r},5710:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>r});var s=n(758);const c={},a=s.createContext(c);function i(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:i(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file +/*! For license information please see 07deeff8.96fe02cc.js.LICENSE.txt */ +"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[230],{7327:(e,t,n)=>{n.d(t,{Ay:()=>o,RM:()=>i});var s=n(6070),c=n(5710),a=n(8173);const i=[];function r(e){return(0,s.jsx)(a.A,{...e})}function o(e={}){const{wrapper:t}={...(0,c.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(r,{...e})}):r(e)}},45:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>C,contentTitle:()=>b,default:()=>w,frontMatter:()=>A,metadata:()=>R,toc:()=>M});var s=n(6070),c=n(5710),a=n(7327),i=n(991),r=n(758);const o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M876.6 239.5c-.5-.9-1.2-1.8-2-2.5-5-5-13.1-5-18.1 0L684.2 409.3l-67.9-67.9L788.7 169c.8-.8 1.4-1.6 2-2.5 3.6-6.1 1.6-13.9-4.5-17.5-98.2-58-226.8-44.7-311.3 39.7-67 67-89.2 162-66.5 247.4l-293 293c-3 3-2.8 7.9.3 11l169.7 169.7c3.1 3.1 8.1 3.3 11 .3l292.9-292.9c85.5 22.8 180.5.7 247.6-66.4 84.4-84.5 97.7-213.1 39.7-311.3zM786 499.8c-58.1 58.1-145.3 69.3-214.6 33.6l-8.8 8.8-.1-.1-274 274.1-79.2-79.2 230.1-230.1s0 .1.1.1l52.8-52.8c-35.7-69.3-24.5-156.5 33.6-214.6a184.2 184.2 0 01144-53.5L537 318.9a32.05 32.05 0 000 45.3l124.5 124.5a32.05 32.05 0 0045.3 0l132.8-132.8c3.7 51.8-14.4 104.8-53.6 143.9z"}}]},name:"tool",theme:"outlined"};var d=n(5624),l=function(e,t){return r.createElement(d.A,(0,i.A)({},e,{ref:t,icon:o}))};const u=r.forwardRef(l);const h={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 912H144c-17.7 0-32-14.3-32-32V144c0-17.7 14.3-32 32-32h360c4.4 0 8 3.6 8 8v56c0 4.4-3.6 8-8 8H184v656h656V520c0-4.4 3.6-8 8-8h56c4.4 0 8 3.6 8 8v360c0 17.7-14.3 32-32 32zM653.3 424.6l52.2 52.2a8.01 8.01 0 01-4.7 13.6l-179.4 21c-5.1.6-9.5-3.7-8.9-8.9l21-179.4c.8-6.6 8.9-9.4 13.6-4.7l52.4 52.4 256.2-256.2c3.1-3.1 8.2-3.1 11.3 0l42.4 42.4c3.1 3.1 3.1 8.2 0 11.3L653.3 424.6z"}}]},name:"import",theme:"outlined"};var m=function(e,t){return r.createElement(d.A,(0,i.A)({},e,{ref:t,icon:h}))};const p=r.forwardRef(m);const f={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M841 370c3-3.3 2.7-8.3-.6-11.3a8.24 8.24 0 00-5.3-2.1h-72.6c-2.4 0-4.6 1-6.1 2.8L633.5 504.6a7.96 7.96 0 01-13.4-1.9l-63.5-141.3a7.9 7.9 0 00-7.3-4.7H380.7l.9-4.7 8-42.3c10.5-55.4 38-81.4 85.8-81.4 18.6 0 35.5 1.7 48.8 4.7l14.1-66.8c-22.6-4.7-35.2-6.1-54.9-6.1-103.3 0-156.4 44.3-175.9 147.3l-9.4 49.4h-97.6c-3.8 0-7.1 2.7-7.8 6.4L181.9 415a8.07 8.07 0 007.8 9.7H284l-89 429.9a8.07 8.07 0 007.8 9.7H269c3.8 0 7.1-2.7 7.8-6.4l89.7-433.1h135.8l68.2 139.1c1.4 2.9 1 6.4-1.2 8.8l-180.6 203c-2.9 3.3-2.6 8.4.7 11.3 1.5 1.3 3.4 2 5.3 2h72.7c2.4 0 4.6-1 6.1-2.8l123.7-146.7c2.8-3.4 7.9-3.8 11.3-1 .9.8 1.6 1.7 2.1 2.8L676.4 784c1.3 2.8 4.1 4.7 7.3 4.7h64.6a8.02 8.02 0 007.2-11.5l-95.2-198.9c-1.4-2.9-.9-6.4 1.3-8.8L841 370z"}}]},name:"function",theme:"outlined"};var g=function(e,t){return r.createElement(d.A,(0,i.A)({},e,{ref:t,icon:f}))};const x=r.forwardRef(g);const v={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M304 280h56c4.4 0 8-3.6 8-8 0-28.3 5.9-53.2 17.1-73.5 10.6-19.4 26-34.8 45.4-45.4C450.9 142 475.7 136 504 136h16c28.3 0 53.2 5.9 73.5 17.1 19.4 10.6 34.8 26 45.4 45.4C650 218.9 656 243.7 656 272c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8 0-40-8.8-76.7-25.9-108.1a184.31 184.31 0 00-74-74C596.7 72.8 560 64 520 64h-16c-40 0-76.7 8.8-108.1 25.9a184.31 184.31 0 00-74 74C304.8 195.3 296 232 296 272c0 4.4 3.6 8 8 8z"}},{tag:"path",attrs:{d:"M940 512H792V412c76.8 0 139-62.2 139-139 0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8a63 63 0 01-63 63H232a63 63 0 01-63-63c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8 0 76.8 62.2 139 139 139v100H84c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h148v96c0 6.5.2 13 .7 19.3C164.1 728.6 116 796.7 116 876c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8 0-44.2 23.9-82.9 59.6-103.7a273 273 0 0022.7 49c24.3 41.5 59 76.2 100.5 100.5S460.5 960 512 960s99.8-13.9 141.3-38.2a281.38 281.38 0 00123.2-149.5A120 120 0 01836 876c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8 0-79.3-48.1-147.4-116.7-176.7.4-6.4.7-12.8.7-19.3v-96h148c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM716 680c0 36.8-9.7 72-27.8 102.9-17.7 30.3-43 55.6-73.3 73.3C584 874.3 548.8 884 512 884s-72-9.7-102.9-27.8c-30.3-17.7-55.6-43-73.3-73.3A202.75 202.75 0 01308 680V412h408v268z"}}]},name:"bug",theme:"outlined"};var j=function(e,t){return r.createElement(d.A,(0,i.A)({},e,{ref:t,icon:v}))};const _=r.forwardRef(j),A={hide_table_of_contents:!0,pagination_prev:"get-started/index"},b="\ud83c\udfaf \u0413\u0430\u0439\u0434\u044b",R={id:"guides/index",title:"\ud83c\udfaf \u0413\u0430\u0439\u0434\u044b",description:"PRACTICE-ORIENTED",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/guides/index.mdx",sourceDirName:"guides",slug:"/guides/",permalink:"/ru/docs/guides/",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/guides/index.mdx",tags:[],version:"current",lastUpdatedAt:1727540389e3,frontMatter:{hide_table_of_contents:!0,pagination_prev:"get-started/index"},sidebar:"guidesSidebar",previous:{title:"\ud83d\ude80 \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442",permalink:"/ru/docs/get-started/"},next:{title:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b",permalink:"/ru/docs/guides/examples/"}},C={},M=[{value:"\u0413\u043b\u0430\u0432\u043d\u043e\u0435",id:"main",level:2},...a.RM,...a.RM,...a.RM,...a.RM];function T(e){const t={h1:"h1",h2:"h2",header:"header",p:"p",...(0,c.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"-\u0433\u0430\u0439\u0434\u044b",children:"\ud83c\udfaf \u0413\u0430\u0439\u0434\u044b"})}),"\n",(0,s.jsx)("span",{class:"badge badge--primary margin-bottom--md",children:"PRACTICE-ORIENTED"}),"\n",(0,s.jsx)("p",{class:"summary",children:(0,s.jsx)(t.p,{children:'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0433\u0430\u0439\u0434\u044b \u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044e Feature-Sliced Design. \u0412 \u044d\u0442\u043e\u043c \u0436\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0433\u0430\u0439\u0434\u044b \u043f\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0438 \u0445\u0435\u043d\u0434\u0431\u0443\u043a \u043f\u0430\u0433\u0443\u0431\u043d\u044b\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u043a. \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u044b\u0442\u0430\u0435\u0442\u0435\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u0438\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u044e "\u0432 \u0431\u043e\u044e"'})}),"\n",(0,s.jsx)(t.h2,{id:"main",children:"\u0413\u043b\u0430\u0432\u043d\u043e\u0435"}),"\n","\n",(0,s.jsx)(a.Ay,{title:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b",description:"\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438",to:"/docs/guides/examples",Icon:u,tags:["\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f","\u0422\u0438\u043f\u044b","\u041b\u0435\u0439\u0430\u0443\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b"]}),"\n",(0,s.jsx)(a.Ay,{title:"\u041c\u0438\u0433\u0440\u0430\u0446\u0438\u044f",description:"\u0413\u0430\u0439\u0434\u044b \u043f\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 \u043b\u0435\u0433\u0430\u0441\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432",to:"/docs/guides/migration/from-v1",Icon:p,tags:["\u041b\u0435\u0433\u0430\u0441\u0438","FSv1"]}),"\n",(0,s.jsx)(a.Ay,{title:"\u0422\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438",description:"\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u0433\u0430\u0439\u0434\u044b \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e",to:"/docs/guides/tech/with-nextjs",Icon:x}),"\n",(0,s.jsx)(a.Ay,{title:"Code Issues (Smells)",description:"\u041e\u0431\u0449\u0438\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0434\u043b\u044f \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u0434\u0435",to:"/docs/guides/issues/desegmented",Icon:_,tags:["\u0414\u0435\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f","\u0420\u043e\u0443\u0442\u0438\u043d\u0433","\u041a\u0440\u043e\u0441\u0441-\u0438\u043c\u043f\u043e\u0440\u0442\u044b"]})]})}function w(e={}){const{wrapper:t}={...(0,c.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(T,{...e})}):T(e)}},8173:(e,t,n)=>{n.d(t,{Y:()=>r,A:()=>d});n(758);var s=n(3526),c=n(8886);const a={root:"root_GfON",rootDisabled:"rootDisabled_SFUB",details:"details_xxkR",detailsTags:"detailsTags_uTQx",icon:"icon_ciqP",title:"title_pSH5",description:"description__Fep",miniTheme:"miniTheme_ePfp",primaryTheme:"primaryTheme_CilO",defaultTheme:"defaultTheme_j3I8"};var i=n(6070);const r=e=>{const{title:t,description:n,to:r,Icon:d,tags:l,className:u,disabled:h,theme:m="default"}=e;return(0,i.jsxs)(c.A,{className:(0,s.A)(a.root,u,h&&a.rootDisabled,a[`${m}Theme`]),to:r,children:[(0,i.jsx)(o,{Icon:d}),(0,i.jsxs)("div",{className:a.details,children:[(0,i.jsxs)("div",{className:a.detailsMain,children:[(0,i.jsx)("span",{className:a.title,children:t}),(0,i.jsx)("p",{className:a.description,children:n})]}),l&&(0,i.jsx)("div",{className:a.detailsTags,children:l.join(" \u2022 ")})]})]})},o=e=>{let{Icon:t}=e;return t?"string"==typeof t?(0,i.jsx)("span",{className:a.icon,children:t}):(0,i.jsx)(t,{className:a.icon}):null},d=r},5710:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>r});var s=n(758);const c={},a=s.createContext(c);function i(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:i(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/ru/assets/js/07deeff8.fc4d71df.js.LICENSE.txt b/ru/assets/js/07deeff8.96fe02cc.js.LICENSE.txt similarity index 100% rename from ru/assets/js/07deeff8.fc4d71df.js.LICENSE.txt rename to ru/assets/js/07deeff8.96fe02cc.js.LICENSE.txt diff --git a/ru/assets/js/1232fa31.b35e1288.js b/ru/assets/js/1232fa31.7e5d5d95.js similarity index 97% rename from ru/assets/js/1232fa31.b35e1288.js rename to ru/assets/js/1232fa31.7e5d5d95.js index ad672700d8..8257375188 100644 --- a/ru/assets/js/1232fa31.b35e1288.js +++ b/ru/assets/js/1232fa31.7e5d5d95.js @@ -1,2 +1,2 @@ -/*! For license information please see 1232fa31.b35e1288.js.LICENSE.txt */ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[2338],{7327:(e,t,n)=>{n.d(t,{Ay:()=>o,RM:()=>c});var s=n(6070),r=n(5710),a=n(8173);const c=[];function i(e){return(0,s.jsx)(a.A,{...e})}function o(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},3603:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>M,contentTitle:()=>_,default:()=>z,frontMatter:()=>v,metadata:()=>j,toc:()=>A});var s=n(6070),r=n(5710),a=n(7327),c=n(991),i=n(758);const o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M864 736c0-111.6-65.4-208-160-252.9V317.3c0-15.1-5.3-29.7-15.1-41.2L536.5 95.4C530.1 87.8 521 84 512 84s-18.1 3.8-24.5 11.4L335.1 276.1a63.97 63.97 0 00-15.1 41.2v165.8C225.4 528 160 624.4 160 736h156.5c-2.3 7.2-3.5 15-3.5 23.8 0 22.1 7.6 43.7 21.4 60.8a97.2 97.2 0 0043.1 30.6c23.1 54 75.6 88.8 134.5 88.8 29.1 0 57.3-8.6 81.4-24.8 23.6-15.8 41.9-37.9 53-64a97 97 0 0043.1-30.5 97.52 97.52 0 0021.4-60.8c0-8.4-1.1-16.4-3.1-23.8H864zM762.3 621.4c9.4 14.6 17 30.3 22.5 46.6H700V558.7a211.6 211.6 0 0162.3 62.7zM388 483.1V318.8l124-147 124 147V668H388V483.1zM239.2 668c5.5-16.3 13.1-32 22.5-46.6 16.3-25.2 37.5-46.5 62.3-62.7V668h-84.8zm388.9 116.2c-5.2 3-11.2 4.2-17.1 3.4l-19.5-2.4-2.8 19.4c-5.4 37.9-38.4 66.5-76.7 66.5-38.3 0-71.3-28.6-76.7-66.5l-2.8-19.5-19.5 2.5a27.7 27.7 0 01-17.1-3.5c-8.7-5-14.1-14.3-14.1-24.4 0-10.6 5.9-19.4 14.6-23.8h231.3c8.8 4.5 14.6 13.3 14.6 23.8-.1 10.2-5.5 19.6-14.2 24.5zM464 400a48 48 0 1096 0 48 48 0 10-96 0z"}}]},name:"rocket",theme:"outlined"};var d=n(5624),l=function(e,t){return i.createElement(d.A,(0,c.A)({},e,{ref:t,icon:o}))};const u=i.forwardRef(l);const m={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M442.3 677.6l199.4-156.7a11.3 11.3 0 000-17.7L442.3 346.4c-7.4-5.8-18.3-.6-18.3 8.8v313.5c0 9.4 10.9 14.7 18.3 8.9z"}},{tag:"path",attrs:{d:"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},name:"play-square",theme:"outlined"};var p=function(e,t){return i.createElement(d.A,(0,c.A)({},e,{ref:t,icon:m}))};const h=i.forwardRef(p);const f={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M623.6 316.7C593.6 290.4 554 276 512 276s-81.6 14.5-111.6 40.7C369.2 344 352 380.7 352 420v7.6c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V420c0-44.1 43.1-80 96-80s96 35.9 96 80c0 31.1-22 59.6-56.1 72.7-21.2 8.1-39.2 22.3-52.1 40.9-13.1 19-19.9 41.8-19.9 64.9V620c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-22.7a48.3 48.3 0 0130.9-44.8c59-22.7 97.1-74.7 97.1-132.5.1-39.3-17.1-76-48.3-103.3zM472 732a40 40 0 1080 0 40 40 0 10-80 0z"}}]},name:"question-circle",theme:"outlined"};var x=function(e,t){return i.createElement(d.A,(0,c.A)({},e,{ref:t,icon:f}))};const g=i.forwardRef(x),v={hide_table_of_contents:!0,pagination_prev:"intro"},_="\ud83d\ude80 \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442",j={id:"get-started/index",title:"\ud83d\ude80 \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442",description:"\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c! \u042d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0431\u0435\u0433\u043b\u043e \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c Feature-Sliced Design \u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438. \u0422\u0430\u043a\u0436\u0435 \u0432\u044b \u043f\u043e\u0439\u043c\u0435\u0442\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 \u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f.",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/get-started/index.mdx",sourceDirName:"get-started",slug:"/get-started/",permalink:"/ru/docs/get-started/",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/get-started/index.mdx",tags:[],version:"current",lastUpdatedAt:1727030144e3,frontMatter:{hide_table_of_contents:!0,pagination_prev:"intro"},sidebar:"getstartedSidebar",previous:{title:"\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f",permalink:"/ru/docs/"},next:{title:"\u041e\u0431\u0437\u043e\u0440",permalink:"/ru/docs/get-started/overview"}},M={},A=[...a.RM,...a.RM,...a.RM];function b(e){const t={h1:"h1",header:"header",p:"p",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"-\u0431\u044b\u0441\u0442\u0440\u044b\u0439-\u0441\u0442\u0430\u0440\u0442",children:"\ud83d\ude80 \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442"})}),"\n",(0,s.jsx)("p",{class:"summary",children:(0,s.jsx)(t.p,{children:"\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c! \u042d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0431\u0435\u0433\u043b\u043e \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c Feature-Sliced Design \u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438. \u0422\u0430\u043a\u0436\u0435 \u0432\u044b \u043f\u043e\u0439\u043c\u0435\u0442\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 \u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f."})}),"\n",(0,s.jsx)(a.Ay,{title:"\u041e\u0431\u0437\u043e\u0440",description:"\u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438, \u0435\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0439 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f",to:"/docs/get-started/overview",Icon:u}),"\n",(0,s.jsx)(a.Ay,{title:"\u0422\u0443\u0442\u043e\u0440\u0438\u0430\u043b",description:"\u0412\u0432\u043e\u0434\u043d\u044b\u0439 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u043f\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438",to:"/docs/get-started/tutorial",Icon:h}),"\n",(0,s.jsx)(a.Ay,{title:"FAQ",description:"\u0427\u0430\u0441\u0442\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b",to:"/docs/get-started/faq",Icon:g}),"\n"]})}function z(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(b,{...e})}):b(e)}},8173:(e,t,n)=>{n.d(t,{Y:()=>i,A:()=>d});n(758);var s=n(3526),r=n(8886);const a={root:"root_GfON",rootDisabled:"rootDisabled_SFUB",details:"details_xxkR",detailsTags:"detailsTags_uTQx",icon:"icon_ciqP",title:"title_pSH5",description:"description__Fep",miniTheme:"miniTheme_ePfp",primaryTheme:"primaryTheme_CilO",defaultTheme:"defaultTheme_j3I8"};var c=n(6070);const i=e=>{const{title:t,description:n,to:i,Icon:d,tags:l,className:u,disabled:m,theme:p="default"}=e;return(0,c.jsxs)(r.A,{className:(0,s.A)(a.root,u,m&&a.rootDisabled,a[`${p}Theme`]),to:i,children:[(0,c.jsx)(o,{Icon:d}),(0,c.jsxs)("div",{className:a.details,children:[(0,c.jsxs)("div",{className:a.detailsMain,children:[(0,c.jsx)("span",{className:a.title,children:t}),(0,c.jsx)("p",{className:a.description,children:n})]}),l&&(0,c.jsx)("div",{className:a.detailsTags,children:l.join(" \u2022 ")})]})]})},o=e=>{let{Icon:t}=e;return t?"string"==typeof t?(0,c.jsx)("span",{className:a.icon,children:t}):(0,c.jsx)(t,{className:a.icon}):null},d=i},5710:(e,t,n)=>{n.d(t,{R:()=>c,x:()=>i});var s=n(758);const r={},a=s.createContext(r);function c(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file +/*! For license information please see 1232fa31.7e5d5d95.js.LICENSE.txt */ +"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[2338],{7327:(e,t,n)=>{n.d(t,{Ay:()=>o,RM:()=>c});var s=n(6070),r=n(5710),a=n(8173);const c=[];function i(e){return(0,s.jsx)(a.A,{...e})}function o(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},3603:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>M,contentTitle:()=>_,default:()=>z,frontMatter:()=>v,metadata:()=>j,toc:()=>A});var s=n(6070),r=n(5710),a=n(7327),c=n(991),i=n(758);const o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M864 736c0-111.6-65.4-208-160-252.9V317.3c0-15.1-5.3-29.7-15.1-41.2L536.5 95.4C530.1 87.8 521 84 512 84s-18.1 3.8-24.5 11.4L335.1 276.1a63.97 63.97 0 00-15.1 41.2v165.8C225.4 528 160 624.4 160 736h156.5c-2.3 7.2-3.5 15-3.5 23.8 0 22.1 7.6 43.7 21.4 60.8a97.2 97.2 0 0043.1 30.6c23.1 54 75.6 88.8 134.5 88.8 29.1 0 57.3-8.6 81.4-24.8 23.6-15.8 41.9-37.9 53-64a97 97 0 0043.1-30.5 97.52 97.52 0 0021.4-60.8c0-8.4-1.1-16.4-3.1-23.8H864zM762.3 621.4c9.4 14.6 17 30.3 22.5 46.6H700V558.7a211.6 211.6 0 0162.3 62.7zM388 483.1V318.8l124-147 124 147V668H388V483.1zM239.2 668c5.5-16.3 13.1-32 22.5-46.6 16.3-25.2 37.5-46.5 62.3-62.7V668h-84.8zm388.9 116.2c-5.2 3-11.2 4.2-17.1 3.4l-19.5-2.4-2.8 19.4c-5.4 37.9-38.4 66.5-76.7 66.5-38.3 0-71.3-28.6-76.7-66.5l-2.8-19.5-19.5 2.5a27.7 27.7 0 01-17.1-3.5c-8.7-5-14.1-14.3-14.1-24.4 0-10.6 5.9-19.4 14.6-23.8h231.3c8.8 4.5 14.6 13.3 14.6 23.8-.1 10.2-5.5 19.6-14.2 24.5zM464 400a48 48 0 1096 0 48 48 0 10-96 0z"}}]},name:"rocket",theme:"outlined"};var d=n(5624),l=function(e,t){return i.createElement(d.A,(0,c.A)({},e,{ref:t,icon:o}))};const u=i.forwardRef(l);const m={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M442.3 677.6l199.4-156.7a11.3 11.3 0 000-17.7L442.3 346.4c-7.4-5.8-18.3-.6-18.3 8.8v313.5c0 9.4 10.9 14.7 18.3 8.9z"}},{tag:"path",attrs:{d:"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},name:"play-square",theme:"outlined"};var p=function(e,t){return i.createElement(d.A,(0,c.A)({},e,{ref:t,icon:m}))};const h=i.forwardRef(p);const f={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M623.6 316.7C593.6 290.4 554 276 512 276s-81.6 14.5-111.6 40.7C369.2 344 352 380.7 352 420v7.6c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V420c0-44.1 43.1-80 96-80s96 35.9 96 80c0 31.1-22 59.6-56.1 72.7-21.2 8.1-39.2 22.3-52.1 40.9-13.1 19-19.9 41.8-19.9 64.9V620c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-22.7a48.3 48.3 0 0130.9-44.8c59-22.7 97.1-74.7 97.1-132.5.1-39.3-17.1-76-48.3-103.3zM472 732a40 40 0 1080 0 40 40 0 10-80 0z"}}]},name:"question-circle",theme:"outlined"};var x=function(e,t){return i.createElement(d.A,(0,c.A)({},e,{ref:t,icon:f}))};const g=i.forwardRef(x),v={hide_table_of_contents:!0,pagination_prev:"intro"},_="\ud83d\ude80 \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442",j={id:"get-started/index",title:"\ud83d\ude80 \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442",description:"\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c! \u042d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0431\u0435\u0433\u043b\u043e \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c Feature-Sliced Design \u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438. \u0422\u0430\u043a\u0436\u0435 \u0432\u044b \u043f\u043e\u0439\u043c\u0435\u0442\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 \u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f.",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/get-started/index.mdx",sourceDirName:"get-started",slug:"/get-started/",permalink:"/ru/docs/get-started/",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/get-started/index.mdx",tags:[],version:"current",lastUpdatedAt:1727540389e3,frontMatter:{hide_table_of_contents:!0,pagination_prev:"intro"},sidebar:"getstartedSidebar",previous:{title:"\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f",permalink:"/ru/docs/"},next:{title:"\u041e\u0431\u0437\u043e\u0440",permalink:"/ru/docs/get-started/overview"}},M={},A=[...a.RM,...a.RM,...a.RM];function b(e){const t={h1:"h1",header:"header",p:"p",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"-\u0431\u044b\u0441\u0442\u0440\u044b\u0439-\u0441\u0442\u0430\u0440\u0442",children:"\ud83d\ude80 \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442"})}),"\n",(0,s.jsx)("p",{class:"summary",children:(0,s.jsx)(t.p,{children:"\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c! \u042d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0431\u0435\u0433\u043b\u043e \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c Feature-Sliced Design \u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438. \u0422\u0430\u043a\u0436\u0435 \u0432\u044b \u043f\u043e\u0439\u043c\u0435\u0442\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 \u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f."})}),"\n",(0,s.jsx)(a.Ay,{title:"\u041e\u0431\u0437\u043e\u0440",description:"\u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438, \u0435\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0439 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f",to:"/docs/get-started/overview",Icon:u}),"\n",(0,s.jsx)(a.Ay,{title:"\u0422\u0443\u0442\u043e\u0440\u0438\u0430\u043b",description:"\u0412\u0432\u043e\u0434\u043d\u044b\u0439 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u043f\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438",to:"/docs/get-started/tutorial",Icon:h}),"\n",(0,s.jsx)(a.Ay,{title:"FAQ",description:"\u0427\u0430\u0441\u0442\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b",to:"/docs/get-started/faq",Icon:g}),"\n"]})}function z(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(b,{...e})}):b(e)}},8173:(e,t,n)=>{n.d(t,{Y:()=>i,A:()=>d});n(758);var s=n(3526),r=n(8886);const a={root:"root_GfON",rootDisabled:"rootDisabled_SFUB",details:"details_xxkR",detailsTags:"detailsTags_uTQx",icon:"icon_ciqP",title:"title_pSH5",description:"description__Fep",miniTheme:"miniTheme_ePfp",primaryTheme:"primaryTheme_CilO",defaultTheme:"defaultTheme_j3I8"};var c=n(6070);const i=e=>{const{title:t,description:n,to:i,Icon:d,tags:l,className:u,disabled:m,theme:p="default"}=e;return(0,c.jsxs)(r.A,{className:(0,s.A)(a.root,u,m&&a.rootDisabled,a[`${p}Theme`]),to:i,children:[(0,c.jsx)(o,{Icon:d}),(0,c.jsxs)("div",{className:a.details,children:[(0,c.jsxs)("div",{className:a.detailsMain,children:[(0,c.jsx)("span",{className:a.title,children:t}),(0,c.jsx)("p",{className:a.description,children:n})]}),l&&(0,c.jsx)("div",{className:a.detailsTags,children:l.join(" \u2022 ")})]})]})},o=e=>{let{Icon:t}=e;return t?"string"==typeof t?(0,c.jsx)("span",{className:a.icon,children:t}):(0,c.jsx)(t,{className:a.icon}):null},d=i},5710:(e,t,n)=>{n.d(t,{R:()=>c,x:()=>i});var s=n(758);const r={},a=s.createContext(r);function c(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/ru/assets/js/1232fa31.b35e1288.js.LICENSE.txt b/ru/assets/js/1232fa31.7e5d5d95.js.LICENSE.txt similarity index 100% rename from ru/assets/js/1232fa31.b35e1288.js.LICENSE.txt rename to ru/assets/js/1232fa31.7e5d5d95.js.LICENSE.txt diff --git a/ru/assets/js/17f650ce.b50ad80c.js b/ru/assets/js/17f650ce.18d46731.js similarity index 98% rename from ru/assets/js/17f650ce.b50ad80c.js rename to ru/assets/js/17f650ce.18d46731.js index 8da98af700..a038eb8b05 100644 --- a/ru/assets/js/17f650ce.b50ad80c.js +++ b/ru/assets/js/17f650ce.18d46731.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[6008],{4284:(e,t,s)=>{s.d(t,{Ay:()=>u,RM:()=>d});var n=s(6070),i=s(5710),r=(s(758),s(8886)),o=s(316);const c=e=>{let{ticket:t}=e;const s=`https://github.com/feature-sliced/documentation/issues/${t}`;return(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{children:(0,o.T)({id:"shared.wip.title"})}),(0,n.jsx)("p",{children:(0,o.T)({id:"shared.wip.subtitle"})}),(0,n.jsxs)("ul",{children:[(0,n.jsxs)("li",{children:[(0,o.T)({id:"shared.wip.var.feedback.base"}),(0,n.jsx)(r.A,{to:s,children:(0,o.T)({id:"shared.wip.var.feedback.link"})})]}),(0,n.jsxs)("li",{children:[(0,o.T)({id:"shared.wip.var.material.base"}),(0,n.jsx)(r.A,{to:"https://t.me/feature_sliced",children:(0,o.T)({id:"shared.wip.var.material.link"})})]}),(0,n.jsxs)("li",{children:[(0,o.T)({id:"shared.wip.var.contribute.base"}),(0,n.jsx)(r.A,{to:"https://github.com/feature-sliced/documentation/blob/master/CONTRIBUTING.md",children:(0,o.T)({id:"shared.wip.var.contribute.link"})})]})]}),(0,n.jsx)("br",{}),(0,n.jsx)("p",{children:(0,n.jsx)("i",{children:"\ud83c\udf70 Stay tuned!"})})]})},d=[];function a(e){const t={admonition:"admonition",...(0,i.R)(),...e.components};return(0,n.jsx)(t.admonition,{title:"WIP",type:"caution",children:(0,n.jsx)(c,{ticket:e.ticket})})}function u(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},9593:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>p,frontMatter:()=>o,metadata:()=>d,toc:()=>u});var n=s(6070),i=s(5710),r=s(4284);const o={sidebar_class_name:"sidebar-item--wip",unlisted:!0},c="Desktop/Touch \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b",d={id:"guides/examples/platforms",title:"Desktop/Touch \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b",description:"\u041f\u0440\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 \u0434\u043b\u044f desktop/touch",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/platforms.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/platforms",permalink:"/ru/docs/guides/examples/platforms",draft:!1,unlisted:!0,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/platforms.mdx",tags:[],version:"current",lastUpdatedAt:1727030144e3,frontMatter:{sidebar_class_name:"sidebar-item--wip",unlisted:!0},sidebar:"guidesSidebar"},a={},u=[...r.RM];function l(e){const t={blockquote:"blockquote",h1:"h1",header:"header",p:"p",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"desktoptouch-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b",children:"Desktop/Touch \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b"})}),"\n",(0,n.jsx)(r.Ay,{ticket:"198"}),"\n",(0,n.jsxs)(t.blockquote,{children:["\n",(0,n.jsx)(t.p,{children:"\u041f\u0440\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 \u0434\u043b\u044f desktop/touch"}),"\n"]})]})}function p(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},5710:(e,t,s)=>{s.d(t,{R:()=>o,x:()=>c});var n=s(758);const i={},r=n.createContext(i);function o(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[6008],{4284:(e,t,s)=>{s.d(t,{Ay:()=>u,RM:()=>d});var n=s(6070),i=s(5710),r=(s(758),s(8886)),o=s(316);const c=e=>{let{ticket:t}=e;const s=`https://github.com/feature-sliced/documentation/issues/${t}`;return(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{children:(0,o.T)({id:"shared.wip.title"})}),(0,n.jsx)("p",{children:(0,o.T)({id:"shared.wip.subtitle"})}),(0,n.jsxs)("ul",{children:[(0,n.jsxs)("li",{children:[(0,o.T)({id:"shared.wip.var.feedback.base"}),(0,n.jsx)(r.A,{to:s,children:(0,o.T)({id:"shared.wip.var.feedback.link"})})]}),(0,n.jsxs)("li",{children:[(0,o.T)({id:"shared.wip.var.material.base"}),(0,n.jsx)(r.A,{to:"https://t.me/feature_sliced",children:(0,o.T)({id:"shared.wip.var.material.link"})})]}),(0,n.jsxs)("li",{children:[(0,o.T)({id:"shared.wip.var.contribute.base"}),(0,n.jsx)(r.A,{to:"https://github.com/feature-sliced/documentation/blob/master/CONTRIBUTING.md",children:(0,o.T)({id:"shared.wip.var.contribute.link"})})]})]}),(0,n.jsx)("br",{}),(0,n.jsx)("p",{children:(0,n.jsx)("i",{children:"\ud83c\udf70 Stay tuned!"})})]})},d=[];function a(e){const t={admonition:"admonition",...(0,i.R)(),...e.components};return(0,n.jsx)(t.admonition,{title:"WIP",type:"caution",children:(0,n.jsx)(c,{ticket:e.ticket})})}function u(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},9593:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>p,frontMatter:()=>o,metadata:()=>d,toc:()=>u});var n=s(6070),i=s(5710),r=s(4284);const o={sidebar_class_name:"sidebar-item--wip",unlisted:!0},c="Desktop/Touch \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b",d={id:"guides/examples/platforms",title:"Desktop/Touch \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b",description:"\u041f\u0440\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 \u0434\u043b\u044f desktop/touch",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/platforms.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/platforms",permalink:"/ru/docs/guides/examples/platforms",draft:!1,unlisted:!0,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/platforms.mdx",tags:[],version:"current",lastUpdatedAt:1727540389e3,frontMatter:{sidebar_class_name:"sidebar-item--wip",unlisted:!0},sidebar:"guidesSidebar"},a={},u=[...r.RM];function l(e){const t={blockquote:"blockquote",h1:"h1",header:"header",p:"p",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"desktoptouch-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b",children:"Desktop/Touch \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b"})}),"\n",(0,n.jsx)(r.Ay,{ticket:"198"}),"\n",(0,n.jsxs)(t.blockquote,{children:["\n",(0,n.jsx)(t.p,{children:"\u041f\u0440\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 \u0434\u043b\u044f desktop/touch"}),"\n"]})]})}function p(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},5710:(e,t,s)=>{s.d(t,{R:()=>o,x:()=>c});var n=s(758);const i={},r=n.createContext(i);function o(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/ru/assets/js/1c0a16b8.c4a891c4.js b/ru/assets/js/1c0a16b8.9303520b.js similarity index 98% rename from ru/assets/js/1c0a16b8.c4a891c4.js rename to ru/assets/js/1c0a16b8.9303520b.js index 2669a1ae4f..601ce0c8f6 100644 --- a/ru/assets/js/1c0a16b8.c4a891c4.js +++ b/ru/assets/js/1c0a16b8.9303520b.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[6877],{6030:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var r=n(6070),o=n(5710);const i={sidebar_position:1},s="\u0410\u0441\u043f\u0435\u043a\u0442\u044b \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438",a={id:"about/promote/integration",title:"\u0410\u0441\u043f\u0435\u043a\u0442\u044b \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438",description:"\u0427\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0441\u0447\u0435\u0442\u0435?",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/about/promote/integration.mdx",sourceDirName:"about/promote",slug:"/about/promote/integration",permalink:"/ru/docs/about/promote/integration",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/about/promote/integration.mdx",tags:[],version:"current",lastUpdatedAt:1727030144e3,sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"aboutSidebar",previous:{title:"\u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438",permalink:"/ru/docs/about/understanding/abstractions"},next:{title:"\u0427\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435",permalink:"/ru/docs/about/promote/partial-application"}},c={},l=[{value:"\u0427\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0441\u0447\u0435\u0442\u0435?",id:"summary",level:2},{value:"\u0422\u0430\u043a\u0436\u0435",id:"also",level:2}];function d(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"\u0430\u0441\u043f\u0435\u043a\u0442\u044b-\u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438",children:"\u0410\u0441\u043f\u0435\u043a\u0442\u044b \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438"})}),"\n",(0,r.jsx)(t.h2,{id:"summary",children:"\u0427\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0441\u0447\u0435\u0442\u0435?"}),"\n",(0,r.jsx)(t.p,{children:"\u0421\u043c. \u043f\u0435\u0440\u0432\u044b\u0435 5 \u043c\u0438\u043d\u0443\u0442:"}),"\n",(0,r.jsx)("iframe",{className:"youtube",src:"https://www.youtube.com/embed/TFA6zRO_Cl0?start=2110",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,r.jsx)(t.h2,{id:"also",children:"\u0422\u0430\u043a\u0436\u0435"}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430"}),":"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"/docs/get-started/overview#advantages",children:"Overview"})}),"\n",(0,r.jsx)(t.li,{children:"CodeReview"}),"\n",(0,r.jsx)(t.li,{children:"Onboarding"}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438:"})}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"\u041c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c"}),"\n",(0,r.jsx)(t.li,{children:"\u0412\u044b\u0441\u043e\u043a\u0438\u0439 \u043f\u043e\u0440\u043e\u0433 \u0432\u0445\u043e\u0434\u0430"}),"\n",(0,r.jsx)(t.li,{children:'"Layers hell"'}),"\n",(0,r.jsx)(t.li,{children:"\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b feature-based \u043f\u043e\u0434\u0445\u043e\u0434\u0430"}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},5710:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>a});var r=n(758);const o={},i=r.createContext(o);function s(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[6877],{6030:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var r=n(6070),o=n(5710);const i={sidebar_position:1},s="\u0410\u0441\u043f\u0435\u043a\u0442\u044b \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438",a={id:"about/promote/integration",title:"\u0410\u0441\u043f\u0435\u043a\u0442\u044b \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438",description:"\u0427\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0441\u0447\u0435\u0442\u0435?",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/about/promote/integration.mdx",sourceDirName:"about/promote",slug:"/about/promote/integration",permalink:"/ru/docs/about/promote/integration",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/about/promote/integration.mdx",tags:[],version:"current",lastUpdatedAt:1727540389e3,sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"aboutSidebar",previous:{title:"\u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438",permalink:"/ru/docs/about/understanding/abstractions"},next:{title:"\u0427\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435",permalink:"/ru/docs/about/promote/partial-application"}},c={},l=[{value:"\u0427\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0441\u0447\u0435\u0442\u0435?",id:"summary",level:2},{value:"\u0422\u0430\u043a\u0436\u0435",id:"also",level:2}];function d(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"\u0430\u0441\u043f\u0435\u043a\u0442\u044b-\u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438",children:"\u0410\u0441\u043f\u0435\u043a\u0442\u044b \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438"})}),"\n",(0,r.jsx)(t.h2,{id:"summary",children:"\u0427\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0441\u0447\u0435\u0442\u0435?"}),"\n",(0,r.jsx)(t.p,{children:"\u0421\u043c. \u043f\u0435\u0440\u0432\u044b\u0435 5 \u043c\u0438\u043d\u0443\u0442:"}),"\n",(0,r.jsx)("iframe",{className:"youtube",src:"https://www.youtube.com/embed/TFA6zRO_Cl0?start=2110",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,r.jsx)(t.h2,{id:"also",children:"\u0422\u0430\u043a\u0436\u0435"}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430"}),":"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"/docs/get-started/overview#advantages",children:"Overview"})}),"\n",(0,r.jsx)(t.li,{children:"CodeReview"}),"\n",(0,r.jsx)(t.li,{children:"Onboarding"}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438:"})}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"\u041c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c"}),"\n",(0,r.jsx)(t.li,{children:"\u0412\u044b\u0441\u043e\u043a\u0438\u0439 \u043f\u043e\u0440\u043e\u0433 \u0432\u0445\u043e\u0434\u0430"}),"\n",(0,r.jsx)(t.li,{children:'"Layers hell"'}),"\n",(0,r.jsx)(t.li,{children:"\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b feature-based \u043f\u043e\u0434\u0445\u043e\u0434\u0430"}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},5710:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>a});var r=n(758);const o={},i=r.createContext(o);function s(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/ru/assets/js/1d3222b5.9978e424.js b/ru/assets/js/1d3222b5.7bdfba0b.js similarity index 98% rename from ru/assets/js/1d3222b5.9978e424.js rename to ru/assets/js/1d3222b5.7bdfba0b.js index b945a1053f..b4b375927c 100644 --- a/ru/assets/js/1d3222b5.9978e424.js +++ b/ru/assets/js/1d3222b5.7bdfba0b.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[9316],{4284:(e,t,i)=>{i.d(t,{Ay:()=>a,RM:()=>d});var n=i(6070),s=i(5710),r=(i(758),i(8886)),c=i(316);const o=e=>{let{ticket:t}=e;const i=`https://github.com/feature-sliced/documentation/issues/${t}`;return(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{children:(0,c.T)({id:"shared.wip.title"})}),(0,n.jsx)("p",{children:(0,c.T)({id:"shared.wip.subtitle"})}),(0,n.jsxs)("ul",{children:[(0,n.jsxs)("li",{children:[(0,c.T)({id:"shared.wip.var.feedback.base"}),(0,n.jsx)(r.A,{to:i,children:(0,c.T)({id:"shared.wip.var.feedback.link"})})]}),(0,n.jsxs)("li",{children:[(0,c.T)({id:"shared.wip.var.material.base"}),(0,n.jsx)(r.A,{to:"https://t.me/feature_sliced",children:(0,c.T)({id:"shared.wip.var.material.link"})})]}),(0,n.jsxs)("li",{children:[(0,c.T)({id:"shared.wip.var.contribute.base"}),(0,n.jsx)(r.A,{to:"https://github.com/feature-sliced/documentation/blob/master/CONTRIBUTING.md",children:(0,c.T)({id:"shared.wip.var.contribute.link"})})]})]}),(0,n.jsx)("br",{}),(0,n.jsx)("p",{children:(0,n.jsx)("i",{children:"\ud83c\udf70 Stay tuned!"})})]})},d=[];function l(e){const t={admonition:"admonition",...(0,s.R)(),...e.components};return(0,n.jsx)(t.admonition,{title:"WIP",type:"caution",children:(0,n.jsx)(o,{ticket:e.ticket})})}function a(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},4771:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>c,metadata:()=>d,toc:()=>a});var n=i(6070),s=i(5710),r=i(4284);const c={sidebar_position:2,sidebar_class_name:"sidebar-item--wip"},o="Decouple entities",d={id:"reference/isolation/decouple-entities",title:"Decouple entities",description:"\u041f\u0440\u043e \u043a\u0440\u043e\u0441\u0441-\u0438\u043c\u043f\u043e\u0440\u0442\u044b \u0442\u0438\u043f\u043e\u0432, \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u044b \u0438 \u043f\u0440\u043e \u0442\u043e - \u043a\u0430\u043a \u044f\u0432\u043d\u043e \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/reference/isolation/decouple-entities.mdx",sourceDirName:"reference/isolation",slug:"/reference/isolation/decouple-entities",permalink:"/ru/docs/reference/isolation/decouple-entities",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/reference/isolation/decouple-entities.mdx",tags:[],version:"current",lastUpdatedAt:1727030144e3,sidebarPosition:2,frontMatter:{sidebar_position:2,sidebar_class_name:"sidebar-item--wip"},sidebar:"referenceSidebar",previous:{title:"Low Coupling & High Cohesion",permalink:"/ru/docs/reference/isolation/coupling-cohesion"}},l={},a=[...r.RM,{value:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435",id:"see-also",level:2}];function u(e){const t={a:"a",blockquote:"blockquote",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"decouple-entities",children:"Decouple entities"})}),"\n",(0,n.jsx)(r.Ay,{ticket:"202"}),"\n",(0,n.jsxs)(t.blockquote,{children:["\n",(0,n.jsx)(t.p,{children:"\u041f\u0440\u043e \u043a\u0440\u043e\u0441\u0441-\u0438\u043c\u043f\u043e\u0440\u0442\u044b \u0442\u0438\u043f\u043e\u0432, \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u044b \u0438 \u043f\u0440\u043e \u0442\u043e - \u043a\u0430\u043a \u044f\u0432\u043d\u043e \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438"}),"\n"]}),"\n",(0,n.jsxs)(t.blockquote,{children:["\n",(0,n.jsx)(t.p,{children:"\u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u043e \u043c\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 absolutely-decoupled entities"}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"see-also",children:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://t.me/feature_sliced/3633",children:"(\u0422\u0440\u0435\u0434) \u041f\u0430\u043c\u044f\u0442\u043a\u0430 \u043f\u0440\u043e \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043f\u043e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c \u0438 \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043d\u0438\u0435 \u044f\u0432\u043d\u044b\u0445 \u0441\u0432\u044f\u0437\u0435\u0439 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://t.me/feature_sliced/3316",children:'(\u0422\u0440\u0435\u0434) \u041f\u0440\u0438\u043c\u0435\u0440 \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0434\u043b\u044f "\u0441\u0432\u044f\u0437\u043d\u044b\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439" (users/pets/friends)'})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://t.me/feature_sliced/4276",children:"(\u0422\u0440\u0435\u0434) \u041f\u0440\u043e \u043a\u0440\u043e\u0441\u0441-\u0438\u043c\u043f\u043e\u0440\u0442\u044b \u0442\u0438\u043f\u043e\u0432/\u0430\u0434\u0430\u043f\u0442\u0435\u0440\u043e\u0432 \u0432 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u0445"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://t.me/feature_sliced/4521",children:"(\u0422\u0440\u0435\u0434) \u041f\u0440\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0438 \u0444\u0438\u0447"})}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5710:(e,t,i)=>{i.d(t,{R:()=>c,x:()=>o});var n=i(758);const s={},r=n.createContext(s);function c(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[9316],{4284:(e,t,i)=>{i.d(t,{Ay:()=>a,RM:()=>d});var n=i(6070),s=i(5710),r=(i(758),i(8886)),c=i(316);const o=e=>{let{ticket:t}=e;const i=`https://github.com/feature-sliced/documentation/issues/${t}`;return(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{children:(0,c.T)({id:"shared.wip.title"})}),(0,n.jsx)("p",{children:(0,c.T)({id:"shared.wip.subtitle"})}),(0,n.jsxs)("ul",{children:[(0,n.jsxs)("li",{children:[(0,c.T)({id:"shared.wip.var.feedback.base"}),(0,n.jsx)(r.A,{to:i,children:(0,c.T)({id:"shared.wip.var.feedback.link"})})]}),(0,n.jsxs)("li",{children:[(0,c.T)({id:"shared.wip.var.material.base"}),(0,n.jsx)(r.A,{to:"https://t.me/feature_sliced",children:(0,c.T)({id:"shared.wip.var.material.link"})})]}),(0,n.jsxs)("li",{children:[(0,c.T)({id:"shared.wip.var.contribute.base"}),(0,n.jsx)(r.A,{to:"https://github.com/feature-sliced/documentation/blob/master/CONTRIBUTING.md",children:(0,c.T)({id:"shared.wip.var.contribute.link"})})]})]}),(0,n.jsx)("br",{}),(0,n.jsx)("p",{children:(0,n.jsx)("i",{children:"\ud83c\udf70 Stay tuned!"})})]})},d=[];function l(e){const t={admonition:"admonition",...(0,s.R)(),...e.components};return(0,n.jsx)(t.admonition,{title:"WIP",type:"caution",children:(0,n.jsx)(o,{ticket:e.ticket})})}function a(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},4771:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>c,metadata:()=>d,toc:()=>a});var n=i(6070),s=i(5710),r=i(4284);const c={sidebar_position:2,sidebar_class_name:"sidebar-item--wip"},o="Decouple entities",d={id:"reference/isolation/decouple-entities",title:"Decouple entities",description:"\u041f\u0440\u043e \u043a\u0440\u043e\u0441\u0441-\u0438\u043c\u043f\u043e\u0440\u0442\u044b \u0442\u0438\u043f\u043e\u0432, \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u044b \u0438 \u043f\u0440\u043e \u0442\u043e - \u043a\u0430\u043a \u044f\u0432\u043d\u043e \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/reference/isolation/decouple-entities.mdx",sourceDirName:"reference/isolation",slug:"/reference/isolation/decouple-entities",permalink:"/ru/docs/reference/isolation/decouple-entities",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/reference/isolation/decouple-entities.mdx",tags:[],version:"current",lastUpdatedAt:1727540389e3,sidebarPosition:2,frontMatter:{sidebar_position:2,sidebar_class_name:"sidebar-item--wip"},sidebar:"referenceSidebar",previous:{title:"Low Coupling & High Cohesion",permalink:"/ru/docs/reference/isolation/coupling-cohesion"}},l={},a=[...r.RM,{value:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435",id:"see-also",level:2}];function u(e){const t={a:"a",blockquote:"blockquote",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"decouple-entities",children:"Decouple entities"})}),"\n",(0,n.jsx)(r.Ay,{ticket:"202"}),"\n",(0,n.jsxs)(t.blockquote,{children:["\n",(0,n.jsx)(t.p,{children:"\u041f\u0440\u043e \u043a\u0440\u043e\u0441\u0441-\u0438\u043c\u043f\u043e\u0440\u0442\u044b \u0442\u0438\u043f\u043e\u0432, \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u044b \u0438 \u043f\u0440\u043e \u0442\u043e - \u043a\u0430\u043a \u044f\u0432\u043d\u043e \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438"}),"\n"]}),"\n",(0,n.jsxs)(t.blockquote,{children:["\n",(0,n.jsx)(t.p,{children:"\u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u043e \u043c\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 absolutely-decoupled entities"}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"see-also",children:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://t.me/feature_sliced/3633",children:"(\u0422\u0440\u0435\u0434) \u041f\u0430\u043c\u044f\u0442\u043a\u0430 \u043f\u0440\u043e \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043f\u043e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c \u0438 \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043d\u0438\u0435 \u044f\u0432\u043d\u044b\u0445 \u0441\u0432\u044f\u0437\u0435\u0439 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://t.me/feature_sliced/3316",children:'(\u0422\u0440\u0435\u0434) \u041f\u0440\u0438\u043c\u0435\u0440 \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0434\u043b\u044f "\u0441\u0432\u044f\u0437\u043d\u044b\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439" (users/pets/friends)'})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://t.me/feature_sliced/4276",children:"(\u0422\u0440\u0435\u0434) \u041f\u0440\u043e \u043a\u0440\u043e\u0441\u0441-\u0438\u043c\u043f\u043e\u0440\u0442\u044b \u0442\u0438\u043f\u043e\u0432/\u0430\u0434\u0430\u043f\u0442\u0435\u0440\u043e\u0432 \u0432 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u0445"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://t.me/feature_sliced/4521",children:"(\u0422\u0440\u0435\u0434) \u041f\u0440\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0438 \u0444\u0438\u0447"})}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5710:(e,t,i)=>{i.d(t,{R:()=>c,x:()=>o});var n=i(758);const s={},r=n.createContext(s);function c(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/ru/assets/js/1df93b7f.41498114.js b/ru/assets/js/1df93b7f.41498114.js deleted file mode 100644 index 324139d259..0000000000 --- a/ru/assets/js/1df93b7f.41498114.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[4583],{6110:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/visual_schema.5d0b672.640.jpg 640w,"+t.p+"assets/ideal-img/visual_schema.b6c18f6.1030.jpg 1030w",images:[{path:t.p+"assets/ideal-img/visual_schema.5d0b672.640.jpg",width:640,height:356},{path:t.p+"assets/ideal-img/visual_schema.b6c18f6.1030.jpg",width:1030,height:573}],src:t.p+"assets/ideal-img/visual_schema.5d0b672.640.jpg",toString:function(){return t.p+"assets/ideal-img/visual_schema.5d0b672.640.jpg"},placeholder:void 0,width:640,height:356},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAGAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAQI/8QAHRAAAgICAwEAAAAAAAAAAAAAAQIABAMREyExYf/EABQBAQAAAAAAAAAAAAAAAAAAAAH/xAAWEQEBAQAAAAAAAAAAAAAAAAAAASH/2gAMAwEAAhEDEQA/ANL069ytjKcmNgXdtsWJ789lSmwVBJxb19iIQ3H/2Q=="}},5152:(e,s,t)=>{"use strict";t.r(s),t.d(s,{default:()=>G});var r=t(758),i=t(1579),a=t(6935),c=t(316),o=t(3526),l=t(8886),n=t(4298);const d={heroBanner:"heroBanner_PbTQ",link:"link_Ogy3"};var h=t(6070);function p(){const{siteConfig:e}=(0,n.A)();return(0,h.jsx)("header",{className:(0,o.A)("hero hero--primary",d.heroBanner),children:(0,h.jsxs)("div",{className:"container",children:[(0,h.jsx)("h1",{className:"hero__title",children:e.title}),(0,h.jsx)("p",{className:"hero__subtitle",children:(0,c.T)({id:"features.hero.tagline"})}),(0,h.jsxs)("div",{className:"button-group",children:[(0,h.jsx)(l.A,{className:"button button--primary button--lg",to:"/docs",children:(0,c.T)({id:"features.hero.get_started"})}),(0,h.jsx)(l.A,{className:"button button--secondary button--lg",to:"/examples",children:(0,c.T)({id:"features.hero.examples"})})]}),(0,h.jsx)("div",{className:"margin-top--md",children:(0,h.jsxs)(l.A,{className:d.link,to:"https://featureslices.dev/",children:[(0,c.T)({id:"features.hero.previous"})," ","(feature-slices@v1)"]})})]})})}const A="icon_zeNy",g=e=>{let{Icon:s,title:t,description:r,size:i}=e;return(0,h.jsxs)("div",{className:(0,o.A)("col",`col--${i}`),children:[(0,h.jsx)("div",{className:"text--center",children:(0,h.jsx)(s,{className:A,alt:t})}),(0,h.jsxs)("div",{className:"text--center padding-horiz--md",children:[(0,h.jsx)("h3",{children:t}),(0,h.jsx)("p",{children:r})]})]})},m="section_o6sW",u="sectionAlt_eaXm",x="title_v0wz",f=e=>{let{title:s,withAltBg:t,children:r,rowClass:i,className:a,containerClass:c="container"}=e;return(0,h.jsx)("section",{id:s.toLowerCase(),className:(0,o.A)(m,t&&u,a),children:(0,h.jsxs)("div",{className:c,children:[(0,h.jsx)("h2",{className:x,children:s}),(0,h.jsx)("div",{className:(0,o.A)("row",i),children:r})]})})};t(7705);var j=t(6110),_=t.n(j),v=t(3025),b=t(4228),w=t(6077),C=t(5073),T=t(655),N=t(8392),I=t(5943);const K=[{title:(0,c.T)({id:"pages.home.features.logic.title"}),Icon:v.A,description:(0,c.T)({id:"pages.home.features.logic.description"})},{title:(0,c.T)({id:"pages.home.features.adaptability.title"}),Icon:b.A,description:(0,c.T)({id:"pages.home.features.adaptability.description"})},{title:(0,c.T)({id:"pages.home.features.debt.title"}),Icon:w.A,description:(0,c.T)({id:"pages.home.features.debt.description"})},{title:(0,c.T)({id:"pages.home.features.shared.title"}),Icon:C.A,description:(0,c.T)({id:"pages.home.features.shared.description"})}],B=[{title:(0,c.T)({id:"pages.home.concepts.public.title"}),Icon:T.A,description:(0,c.T)({id:"pages.home.concepts.public.description"})},{title:(0,c.T)({id:"pages.home.concepts.isolation.title"}),Icon:N.A,description:(0,c.T)({id:"pages.home.concepts.isolation.description"})},{title:(0,c.T)({id:"pages.home.concepts.needs.title"}),Icon:I.A,description:(0,c.T)({id:"pages.home.concepts.needs.description"})}];var Q=t(9993),y=t(689),E=t(3415);const k=[{url:"https://redmadrobot.com/",src:"red_mad_robot.png",alt:"red_mad_robot"},{url:"https://kode.ru/",src:"kode.png",alt:"KODE"},{url:"https://uptarget.co/",src:"uptarget.png",alt:"Uptarget"},{url:"https://www.fxdd.com/",src:"fxdd.svg",alt:"FXDD"},{url:"https://foxford.ru/",src:"foxford.svg",alt:"Foxford"},{url:"https://vigo.ru/",src:"vigo.png",alt:"Vigo"},{url:"https://space307.com/",src:"space307.svg",alt:"~/.space307"},{url:"https://pmp-tech.ru/",src:"pmp-tech.png",alt:"PMP Tech"},{url:"https://www.aligntech.com/",src:"align.svg",alt:"Align"},{url:"https://smile2impress.com/",src:"impress.svg",alt:"Impress"},{url:"https://pochta.tech/",src:"pochtatech.svg",alt:"\u041f\u043e\u0447\u0442\u0430\u0442\u0435\u0445"},{url:"https://befree.ru/",src:"befree.svg",alt:"befree"},{url:"https://www.softcery.com/",src:"softcery.png",alt:"Softcery"},{url:"https://dodo.dev/",src:"dodo.png",alt:"Dodo Engineering"},{url:"https://food.ru/",src:"food_ru.svg",alt:"Food.ru"},{url:"https://lad24.ru/",src:"ladIT.svg",alt:"Lad IT"},{url:"https://www.x5.ru/",src:"x5_digital.png",alt:"X5 Digital"},{url:"https://samokat.tech/",src:"samokat.svg",alt:"Samokat.tech"},{url:"https://express24.uz/",src:"express24.svg",alt:"Express24.uz"}],Y="root_M0ZT",M="rootContainer_QdPn",S="item_zbMY",z="image_ylzW",D="addMe_pbNn",H=()=>{const e=(0,r.useMemo)((()=>(0,E.A)(k)),[]);return(0,h.jsxs)(f,{title:(0,c.T)({id:"pages.home.companies.using"}),className:Y,containerClass:M,children:[(0,h.jsx)(y.A,{pauseOnHover:!0,children:e.map((e=>{let{url:s,src:t,alt:r}=e;return(0,h.jsx)("a",{className:S,href:s,target:"_blank",rel:"noopener noreferrer",children:(0,h.jsx)("img",{className:z,src:(0,Q.Ay)(`img/companies/${t}`),title:r,alt:r})},t)}))}),(0,h.jsxs)("span",{className:D,children:[(0,c.T)({id:"pages.home.companies.add_me"})," ",(0,h.jsx)("a",{href:"https://github.com/feature-sliced/documentation/issues/131",target:"_blank",rel:"noopener noreferrer",children:(0,c.T)({id:"pages.home.companies.tell_us"})})]})]})},F={scheme:"scheme_O0RH",schemeImg:"schemeImg_h_tq"};function G(){return(0,h.jsxs)(i.A,{title:"Welcome",description:"Architectural methodology for frontend projects",children:[(0,h.jsx)(p,{}),(0,h.jsxs)("main",{children:[(0,h.jsx)(f,{title:(0,c.T)({id:"pages.home.features.title"}),children:K.map((e=>(0,h.jsx)(g,{size:12/K.length,...e},e.title)))}),(0,h.jsx)(f,{title:(0,c.T)({id:"pages.home.concepts.title"}),withAltBg:!0,children:B.map((e=>(0,h.jsx)(g,{size:12/B.length,...e},e.title)))}),(0,h.jsx)(f,{title:(0,c.T)({id:"pages.home.scheme.title"}),rowClass:F.scheme,children:(0,h.jsx)(a.A,{className:F.schemeImg,img:_(),alt:"feature-sliced-scheme,themed--scheme"})}),(0,h.jsx)(H,{})]})]})}},7705:(e,s,t)=>{"use strict";t.d(s,{X:()=>i});t(758);var r=t(6070);const i=e=>{let{children:s}=e;return(0,r.jsx)("table",{children:(0,r.jsx)("tbody",{children:s})})};i.Row=e=>{let{href:s,hrefTitle:t,th:i,children:a}=e;return(0,r.jsxs)("tr",{children:[(0,r.jsx)("th",{children:i}),(0,r.jsx)("td",{children:(0,r.jsx)("a",{href:s,children:t})}),a]})}}}]); \ No newline at end of file diff --git a/ru/assets/js/1df93b7f.918274c0.js b/ru/assets/js/1df93b7f.918274c0.js new file mode 100644 index 0000000000..38c7495d55 --- /dev/null +++ b/ru/assets/js/1df93b7f.918274c0.js @@ -0,0 +1 @@ +(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[4583],{6110:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/visual_schema.5d0b672.640.jpg 640w,"+t.p+"assets/ideal-img/visual_schema.b6c18f6.1030.jpg 1030w",images:[{path:t.p+"assets/ideal-img/visual_schema.5d0b672.640.jpg",width:640,height:356},{path:t.p+"assets/ideal-img/visual_schema.b6c18f6.1030.jpg",width:1030,height:573}],src:t.p+"assets/ideal-img/visual_schema.5d0b672.640.jpg",toString:function(){return t.p+"assets/ideal-img/visual_schema.5d0b672.640.jpg"},placeholder:void 0,width:640,height:356},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAGAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAQI/8QAHRAAAgICAwEAAAAAAAAAAAAAAQIABAMREyExYf/EABQBAQAAAAAAAAAAAAAAAAAAAAH/xAAWEQEBAQAAAAAAAAAAAAAAAAAAASH/2gAMAwEAAhEDEQA/ANL069ytjKcmNgXdtsWJ789lSmwVBJxb19iIQ3H/2Q=="}},5152:(e,s,t)=>{"use strict";t.r(s),t.d(s,{default:()=>G});var r=t(758),i=t(1579),a=t(6935),c=t(316),o=t(3526),l=t(8886),n=t(4298);const d={heroBanner:"heroBanner_PbTQ",link:"link_Ogy3"};var h=t(6070);function p(){const{siteConfig:e}=(0,n.A)();return(0,h.jsx)("header",{className:(0,o.A)("hero hero--primary",d.heroBanner),children:(0,h.jsxs)("div",{className:"container",children:[(0,h.jsx)("h1",{className:"hero__title",children:e.title}),(0,h.jsx)("p",{className:"hero__subtitle",children:(0,c.T)({id:"features.hero.tagline"})}),(0,h.jsxs)("div",{className:"button-group",children:[(0,h.jsx)(l.A,{className:"button button--primary button--lg",to:"/docs",children:(0,c.T)({id:"features.hero.get_started"})}),(0,h.jsx)(l.A,{className:"button button--secondary button--lg",to:"/examples",children:(0,c.T)({id:"features.hero.examples"})})]}),(0,h.jsx)("div",{className:"margin-top--md",children:(0,h.jsxs)(l.A,{className:d.link,to:"https://feature-sliced.github.io/featureslices.dev/v1.0.html",children:[(0,c.T)({id:"features.hero.previous"})," ","(feature-slices@v1)"]})})]})})}const A="icon_zeNy",g=e=>{let{Icon:s,title:t,description:r,size:i}=e;return(0,h.jsxs)("div",{className:(0,o.A)("col",`col--${i}`),children:[(0,h.jsx)("div",{className:"text--center",children:(0,h.jsx)(s,{className:A,alt:t})}),(0,h.jsxs)("div",{className:"text--center padding-horiz--md",children:[(0,h.jsx)("h3",{children:t}),(0,h.jsx)("p",{children:r})]})]})},m="section_o6sW",u="sectionAlt_eaXm",x="title_v0wz",f=e=>{let{title:s,withAltBg:t,children:r,rowClass:i,className:a,containerClass:c="container"}=e;return(0,h.jsx)("section",{id:s.toLowerCase(),className:(0,o.A)(m,t&&u,a),children:(0,h.jsxs)("div",{className:c,children:[(0,h.jsx)("h2",{className:x,children:s}),(0,h.jsx)("div",{className:(0,o.A)("row",i),children:r})]})})};t(7705);var j=t(6110),_=t.n(j),v=t(3025),b=t(4228),w=t(6077),C=t(5073),T=t(655),N=t(8392),I=t(5943);const K=[{title:(0,c.T)({id:"pages.home.features.logic.title"}),Icon:v.A,description:(0,c.T)({id:"pages.home.features.logic.description"})},{title:(0,c.T)({id:"pages.home.features.adaptability.title"}),Icon:b.A,description:(0,c.T)({id:"pages.home.features.adaptability.description"})},{title:(0,c.T)({id:"pages.home.features.debt.title"}),Icon:w.A,description:(0,c.T)({id:"pages.home.features.debt.description"})},{title:(0,c.T)({id:"pages.home.features.shared.title"}),Icon:C.A,description:(0,c.T)({id:"pages.home.features.shared.description"})}],B=[{title:(0,c.T)({id:"pages.home.concepts.public.title"}),Icon:T.A,description:(0,c.T)({id:"pages.home.concepts.public.description"})},{title:(0,c.T)({id:"pages.home.concepts.isolation.title"}),Icon:N.A,description:(0,c.T)({id:"pages.home.concepts.isolation.description"})},{title:(0,c.T)({id:"pages.home.concepts.needs.title"}),Icon:I.A,description:(0,c.T)({id:"pages.home.concepts.needs.description"})}];var Q=t(9993),y=t(689),E=t(3415);const k=[{url:"https://redmadrobot.com/",src:"red_mad_robot.png",alt:"red_mad_robot"},{url:"https://kode.ru/",src:"kode.png",alt:"KODE"},{url:"https://uptarget.co/",src:"uptarget.png",alt:"Uptarget"},{url:"https://www.fxdd.com/",src:"fxdd.svg",alt:"FXDD"},{url:"https://foxford.ru/",src:"foxford.svg",alt:"Foxford"},{url:"https://vigo.ru/",src:"vigo.png",alt:"Vigo"},{url:"https://space307.com/",src:"space307.svg",alt:"~/.space307"},{url:"https://pmp-tech.ru/",src:"pmp-tech.png",alt:"PMP Tech"},{url:"https://www.aligntech.com/",src:"align.svg",alt:"Align"},{url:"https://smile2impress.com/",src:"impress.svg",alt:"Impress"},{url:"https://pochta.tech/",src:"pochtatech.svg",alt:"\u041f\u043e\u0447\u0442\u0430\u0442\u0435\u0445"},{url:"https://befree.ru/",src:"befree.svg",alt:"befree"},{url:"https://www.softcery.com/",src:"softcery.png",alt:"Softcery"},{url:"https://dodo.dev/",src:"dodo.png",alt:"Dodo Engineering"},{url:"https://food.ru/",src:"food_ru.svg",alt:"Food.ru"},{url:"https://lad24.ru/",src:"ladIT.svg",alt:"Lad IT"},{url:"https://www.x5.ru/",src:"x5_digital.png",alt:"X5 Digital"},{url:"https://samokat.tech/",src:"samokat.svg",alt:"Samokat.tech"},{url:"https://express24.uz/",src:"express24.svg",alt:"Express24.uz"}],Y="root_M0ZT",M="rootContainer_QdPn",S="item_zbMY",z="image_ylzW",D="addMe_pbNn",H=()=>{const e=(0,r.useMemo)((()=>(0,E.A)(k)),[]);return(0,h.jsxs)(f,{title:(0,c.T)({id:"pages.home.companies.using"}),className:Y,containerClass:M,children:[(0,h.jsx)(y.A,{pauseOnHover:!0,children:e.map((e=>{let{url:s,src:t,alt:r}=e;return(0,h.jsx)("a",{className:S,href:s,target:"_blank",rel:"noopener noreferrer",children:(0,h.jsx)("img",{className:z,src:(0,Q.Ay)(`img/companies/${t}`),title:r,alt:r})},t)}))}),(0,h.jsxs)("span",{className:D,children:[(0,c.T)({id:"pages.home.companies.add_me"})," ",(0,h.jsx)("a",{href:"https://github.com/feature-sliced/documentation/issues/131",target:"_blank",rel:"noopener noreferrer",children:(0,c.T)({id:"pages.home.companies.tell_us"})})]})]})},F={scheme:"scheme_O0RH",schemeImg:"schemeImg_h_tq"};function G(){return(0,h.jsxs)(i.A,{title:"Welcome",description:"Architectural methodology for frontend projects",children:[(0,h.jsx)(p,{}),(0,h.jsxs)("main",{children:[(0,h.jsx)(f,{title:(0,c.T)({id:"pages.home.features.title"}),children:K.map((e=>(0,h.jsx)(g,{size:12/K.length,...e},e.title)))}),(0,h.jsx)(f,{title:(0,c.T)({id:"pages.home.concepts.title"}),withAltBg:!0,children:B.map((e=>(0,h.jsx)(g,{size:12/B.length,...e},e.title)))}),(0,h.jsx)(f,{title:(0,c.T)({id:"pages.home.scheme.title"}),rowClass:F.scheme,children:(0,h.jsx)(a.A,{className:F.schemeImg,img:_(),alt:"feature-sliced-scheme,themed--scheme"})}),(0,h.jsx)(H,{})]})]})}},7705:(e,s,t)=>{"use strict";t.d(s,{X:()=>i});t(758);var r=t(6070);const i=e=>{let{children:s}=e;return(0,r.jsx)("table",{children:(0,r.jsx)("tbody",{children:s})})};i.Row=e=>{let{href:s,hrefTitle:t,th:i,children:a}=e;return(0,r.jsxs)("tr",{children:[(0,r.jsx)("th",{children:i}),(0,r.jsx)("td",{children:(0,r.jsx)("a",{href:s,children:t})}),a]})}}}]); \ No newline at end of file diff --git a/ru/assets/js/20c5a0f6.4346b34f.js b/ru/assets/js/20c5a0f6.b58af1f8.js similarity index 98% rename from ru/assets/js/20c5a0f6.4346b34f.js rename to ru/assets/js/20c5a0f6.b58af1f8.js index e822d0138b..b4a4b98974 100644 --- a/ru/assets/js/20c5a0f6.4346b34f.js +++ b/ru/assets/js/20c5a0f6.b58af1f8.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[2538],{4284:(e,t,i)=>{i.d(t,{Ay:()=>l,RM:()=>a});var s=i(6070),n=i(5710),r=(i(758),i(8886)),d=i(316);const c=e=>{let{ticket:t}=e;const i=`https://github.com/feature-sliced/documentation/issues/${t}`;return(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{children:(0,d.T)({id:"shared.wip.title"})}),(0,s.jsx)("p",{children:(0,d.T)({id:"shared.wip.subtitle"})}),(0,s.jsxs)("ul",{children:[(0,s.jsxs)("li",{children:[(0,d.T)({id:"shared.wip.var.feedback.base"}),(0,s.jsx)(r.A,{to:i,children:(0,d.T)({id:"shared.wip.var.feedback.link"})})]}),(0,s.jsxs)("li",{children:[(0,d.T)({id:"shared.wip.var.material.base"}),(0,s.jsx)(r.A,{to:"https://t.me/feature_sliced",children:(0,d.T)({id:"shared.wip.var.material.link"})})]}),(0,s.jsxs)("li",{children:[(0,d.T)({id:"shared.wip.var.contribute.base"}),(0,s.jsx)(r.A,{to:"https://github.com/feature-sliced/documentation/blob/master/CONTRIBUTING.md",children:(0,d.T)({id:"shared.wip.var.contribute.link"})})]})]}),(0,s.jsx)("br",{}),(0,s.jsx)("p",{children:(0,s.jsx)("i",{children:"\ud83c\udf70 Stay tuned!"})})]})},a=[];function o(e){const t={admonition:"admonition",...(0,n.R)(),...e.components};return(0,s.jsx)(t.admonition,{title:"WIP",type:"caution",children:(0,s.jsx)(c,{ticket:e.ticket})})}function l(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},4093:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>c,default:()=>h,frontMatter:()=>d,metadata:()=>a,toc:()=>l});var s=i(6070),n=i(5710),r=i(4284);const d={sidebar_position:6,sidebar_class_name:"sidebar-item--wip",unlisted:!0},c="i18n",a={id:"guides/examples/i18n",title:"i18n",description:"\u041a\u0443\u0434\u0430 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c? \u041a\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c?",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/i18n.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/i18n",permalink:"/ru/docs/guides/examples/i18n",draft:!1,unlisted:!0,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/i18n.mdx",tags:[],version:"current",lastUpdatedAt:1727030144e3,sidebarPosition:6,frontMatter:{sidebar_position:6,sidebar_class_name:"sidebar-item--wip",unlisted:!0},sidebar:"guidesSidebar"},o={},l=[...r.RM,{value:"\u041a\u0443\u0434\u0430 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c? \u041a\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c?",id:"where-to-place-it-how-to-work-with-this",level:2}];function u(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",li:"li",ul:"ul",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"i18n",children:"i18n"})}),"\n",(0,s.jsx)(r.Ay,{ticket:"171"}),"\n",(0,s.jsx)(t.h2,{id:"where-to-place-it-how-to-work-with-this",children:"\u041a\u0443\u0434\u0430 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c? \u041a\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c?"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://t.me/feature_sliced/4425",children:"https://t.me/feature_sliced/4425"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://t.me/feature_sliced/2325",children:"https://t.me/feature_sliced/2325"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://t.me/feature_sliced/1867",children:"https://t.me/feature_sliced/1867"})}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},5710:(e,t,i)=>{i.d(t,{R:()=>d,x:()=>c});var s=i(758);const n={},r=s.createContext(n);function d(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[2538],{4284:(e,t,i)=>{i.d(t,{Ay:()=>l,RM:()=>a});var s=i(6070),n=i(5710),r=(i(758),i(8886)),d=i(316);const c=e=>{let{ticket:t}=e;const i=`https://github.com/feature-sliced/documentation/issues/${t}`;return(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{children:(0,d.T)({id:"shared.wip.title"})}),(0,s.jsx)("p",{children:(0,d.T)({id:"shared.wip.subtitle"})}),(0,s.jsxs)("ul",{children:[(0,s.jsxs)("li",{children:[(0,d.T)({id:"shared.wip.var.feedback.base"}),(0,s.jsx)(r.A,{to:i,children:(0,d.T)({id:"shared.wip.var.feedback.link"})})]}),(0,s.jsxs)("li",{children:[(0,d.T)({id:"shared.wip.var.material.base"}),(0,s.jsx)(r.A,{to:"https://t.me/feature_sliced",children:(0,d.T)({id:"shared.wip.var.material.link"})})]}),(0,s.jsxs)("li",{children:[(0,d.T)({id:"shared.wip.var.contribute.base"}),(0,s.jsx)(r.A,{to:"https://github.com/feature-sliced/documentation/blob/master/CONTRIBUTING.md",children:(0,d.T)({id:"shared.wip.var.contribute.link"})})]})]}),(0,s.jsx)("br",{}),(0,s.jsx)("p",{children:(0,s.jsx)("i",{children:"\ud83c\udf70 Stay tuned!"})})]})},a=[];function o(e){const t={admonition:"admonition",...(0,n.R)(),...e.components};return(0,s.jsx)(t.admonition,{title:"WIP",type:"caution",children:(0,s.jsx)(c,{ticket:e.ticket})})}function l(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},4093:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>c,default:()=>h,frontMatter:()=>d,metadata:()=>a,toc:()=>l});var s=i(6070),n=i(5710),r=i(4284);const d={sidebar_position:6,sidebar_class_name:"sidebar-item--wip",unlisted:!0},c="i18n",a={id:"guides/examples/i18n",title:"i18n",description:"\u041a\u0443\u0434\u0430 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c? \u041a\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c?",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/i18n.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/i18n",permalink:"/ru/docs/guides/examples/i18n",draft:!1,unlisted:!0,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/i18n.mdx",tags:[],version:"current",lastUpdatedAt:1727540389e3,sidebarPosition:6,frontMatter:{sidebar_position:6,sidebar_class_name:"sidebar-item--wip",unlisted:!0},sidebar:"guidesSidebar"},o={},l=[...r.RM,{value:"\u041a\u0443\u0434\u0430 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c? \u041a\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c?",id:"where-to-place-it-how-to-work-with-this",level:2}];function u(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",li:"li",ul:"ul",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"i18n",children:"i18n"})}),"\n",(0,s.jsx)(r.Ay,{ticket:"171"}),"\n",(0,s.jsx)(t.h2,{id:"where-to-place-it-how-to-work-with-this",children:"\u041a\u0443\u0434\u0430 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c? \u041a\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c?"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://t.me/feature_sliced/4425",children:"https://t.me/feature_sliced/4425"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://t.me/feature_sliced/2325",children:"https://t.me/feature_sliced/2325"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://t.me/feature_sliced/1867",children:"https://t.me/feature_sliced/1867"})}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},5710:(e,t,i)=>{i.d(t,{R:()=>d,x:()=>c});var s=i(758);const n={},r=s.createContext(n);function d(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/ru/assets/js/2bd07bfd.d8eeec6f.js b/ru/assets/js/2bd07bfd.aecf612d.js similarity index 98% rename from ru/assets/js/2bd07bfd.d8eeec6f.js rename to ru/assets/js/2bd07bfd.aecf612d.js index d55da4e3f8..1745ab3c2d 100644 --- a/ru/assets/js/2bd07bfd.d8eeec6f.js +++ b/ru/assets/js/2bd07bfd.aecf612d.js @@ -1,2 +1,2 @@ -/*! For license information please see 2bd07bfd.d8eeec6f.js.LICENSE.txt */ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[3902],{7327:(e,t,s)=>{s.d(t,{Ay:()=>o,RM:()=>i});var n=s(6070),c=s(5710),a=s(8173);const i=[];function r(e){return(0,n.jsx)(a.A,{...e})}function o(e={}){const{wrapper:t}={...(0,c.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(r,{...e})}):r(e)}},7666:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>A,contentTitle:()=>j,default:()=>M,frontMatter:()=>g,metadata:()=>_,toc:()=>b});var n=s(6070),c=s(5710),a=s(7327),i=s(991),r=s(758);const o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M759 335c0-137-111-248-248-248S263 198 263 335c0 82.8 40.6 156.2 103 201.2-.4.2-.7.3-.9.4-44.7 18.9-84.8 46-119.3 80.6a373.42 373.42 0 00-80.4 119.5A373.6 373.6 0 00136 874.8a8 8 0 008 8.2h59.9c4.3 0 7.9-3.5 8-7.8 2-77.2 32.9-149.5 87.6-204.3C356 614.2 431 583 511 583c137 0 248-111 248-248zM511 507c-95 0-172-77-172-172s77-172 172-172 172 77 172 172-77 172-172 172zm105 221h264c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H703.5l47.2-60.1a8.1 8.1 0 001.7-4.9c0-4.4-3.6-8-8-8h-72.6c-4.9 0-9.5 2.3-12.6 6.1l-68.5 87.1c-4.4 5.6-6.8 12.6-6.8 19.8.1 17.7 14.4 32 32.1 32zm240 64H592c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h176.5l-47.2 60.1a8.1 8.1 0 00-1.7 4.9c0 4.4 3.6 8 8 8h72.6c4.9 0 9.5-2.3 12.6-6.1l68.5-87.1c4.4-5.6 6.8-12.6 6.8-19.8-.1-17.7-14.4-32-32.1-32z"}}]},name:"user-switch",theme:"outlined"};var d=s(5624),l=function(e,t){return r.createElement(d.A,(0,i.A)({},e,{ref:t,icon:o}))};const u=r.forwardRef(l);const h={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M920 416H616c-4.4 0-8 3.6-8 8v112c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-56h60v320h-46c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h164c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8h-46V480h60v56c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V424c0-4.4-3.6-8-8-8zM656 296V168c0-4.4-3.6-8-8-8H104c-4.4 0-8 3.6-8 8v128c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-64h168v560h-92c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h264c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8h-92V232h168v64c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8z"}}]},name:"font-size",theme:"outlined"};var m=function(e,t){return r.createElement(d.A,(0,i.A)({},e,{ref:t,icon:h}))};const p=r.forwardRef(m);const x={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-696 72h136v656H184V184zm656 656H384V384h456v456zM384 320V184h456v136H384z"}}]},name:"layout",theme:"outlined"};var f=function(e,t){return r.createElement(d.A,(0,i.A)({},e,{ref:t,icon:x}))};const v=r.forwardRef(f),g={hide_table_of_contents:!0},j="\u041f\u0440\u0438\u043c\u0435\u0440\u044b",_={id:"guides/examples/index",title:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b",description:"\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/index.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/",permalink:"/ru/docs/guides/examples/",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/index.mdx",tags:[],version:"current",lastUpdatedAt:1727030144e3,frontMatter:{hide_table_of_contents:!0},sidebar:"guidesSidebar",previous:{title:"\ud83c\udfaf \u0413\u0430\u0439\u0434\u044b",permalink:"/ru/docs/guides/"},next:{title:"\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f",permalink:"/ru/docs/guides/examples/auth"}},A={},b=[{value:"\u0413\u043b\u0430\u0432\u043d\u043e\u0435",id:"main",level:2},...a.RM,...a.RM,...a.RM];function y(e){const t={h1:"h1",h2:"h2",header:"header",p:"p",...(0,c.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"\u043f\u0440\u0438\u043c\u0435\u0440\u044b",children:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b"})}),"\n",(0,n.jsx)("p",{class:"summary",children:(0,n.jsx)(t.p,{children:"\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438"})}),"\n",(0,n.jsx)(t.h2,{id:"main",children:"\u0413\u043b\u0430\u0432\u043d\u043e\u0435"}),"\n","\n",(0,n.jsx)(a.Ay,{title:"\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f",description:"\u0414\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043b\u043e\u0433\u0438\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438",to:"/docs/guides/examples/auth",Icon:u,tags:["\u0424\u043e\u0440\u043c\u044b","2FA","OAuth","\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0442\u043e\u043a\u0435\u043d\u043e\u0432","\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u043e\u043a\u0435\u043d\u0430"]}),"\n",(0,n.jsx)(a.Ay,{title:"\u0422\u0438\u043f\u044b",description:"\u0413\u0434\u0435 \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c \u0442\u0438\u043f\u044b? \u041a\u0430\u043a\u0438\u0445 \u0432\u0438\u0434\u043e\u0432 \u043e\u043d\u0438 \u0431\u044b\u0432\u0430\u044e\u0442 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 FSD?",to:"/docs/guides/examples/types",Icon:p,tags:["DTO","\u041c\u0430\u043f\u043f\u0435\u0440\u044b","\u0421\u0432\u044f\u0437\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439","\u0410\u0432\u0442\u043e-\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f","\u0421\u0445\u0435\u043c\u044b \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438"]}),"\n",(0,n.jsx)(a.Ay,{title:"\u041b\u0435\u0439\u0430\u0443\u0442\u044b \u0441\u0442\u0440\u0430\u043d\u0438\u0446",description:"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u0435\u0439\u0441\u044b \u0441 \u043b\u0435\u0439\u0430\u0443\u0442\u0430\u043c\u0438",to:"/docs/guides/examples/page-layout",Icon:v,tags:["\u0413\u0434\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c","\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432 \u0432 \u043b\u0435\u0439\u0430\u0443\u0442\u0435"]})]})}function M(e={}){const{wrapper:t}={...(0,c.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(y,{...e})}):y(e)}},8173:(e,t,s)=>{s.d(t,{Y:()=>r,A:()=>d});s(758);var n=s(3526),c=s(8886);const a={root:"root_GfON",rootDisabled:"rootDisabled_SFUB",details:"details_xxkR",detailsTags:"detailsTags_uTQx",icon:"icon_ciqP",title:"title_pSH5",description:"description__Fep",miniTheme:"miniTheme_ePfp",primaryTheme:"primaryTheme_CilO",defaultTheme:"defaultTheme_j3I8"};var i=s(6070);const r=e=>{const{title:t,description:s,to:r,Icon:d,tags:l,className:u,disabled:h,theme:m="default"}=e;return(0,i.jsxs)(c.A,{className:(0,n.A)(a.root,u,h&&a.rootDisabled,a[`${m}Theme`]),to:r,children:[(0,i.jsx)(o,{Icon:d}),(0,i.jsxs)("div",{className:a.details,children:[(0,i.jsxs)("div",{className:a.detailsMain,children:[(0,i.jsx)("span",{className:a.title,children:t}),(0,i.jsx)("p",{className:a.description,children:s})]}),l&&(0,i.jsx)("div",{className:a.detailsTags,children:l.join(" \u2022 ")})]})]})},o=e=>{let{Icon:t}=e;return t?"string"==typeof t?(0,i.jsx)("span",{className:a.icon,children:t}):(0,i.jsx)(t,{className:a.icon}):null},d=r},5710:(e,t,s)=>{s.d(t,{R:()=>i,x:()=>r});var n=s(758);const c={},a=n.createContext(c);function i(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:i(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file +/*! For license information please see 2bd07bfd.aecf612d.js.LICENSE.txt */ +"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[3902],{7327:(e,t,s)=>{s.d(t,{Ay:()=>o,RM:()=>i});var n=s(6070),c=s(5710),a=s(8173);const i=[];function r(e){return(0,n.jsx)(a.A,{...e})}function o(e={}){const{wrapper:t}={...(0,c.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(r,{...e})}):r(e)}},7666:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>A,contentTitle:()=>j,default:()=>M,frontMatter:()=>g,metadata:()=>_,toc:()=>b});var n=s(6070),c=s(5710),a=s(7327),i=s(991),r=s(758);const o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M759 335c0-137-111-248-248-248S263 198 263 335c0 82.8 40.6 156.2 103 201.2-.4.2-.7.3-.9.4-44.7 18.9-84.8 46-119.3 80.6a373.42 373.42 0 00-80.4 119.5A373.6 373.6 0 00136 874.8a8 8 0 008 8.2h59.9c4.3 0 7.9-3.5 8-7.8 2-77.2 32.9-149.5 87.6-204.3C356 614.2 431 583 511 583c137 0 248-111 248-248zM511 507c-95 0-172-77-172-172s77-172 172-172 172 77 172 172-77 172-172 172zm105 221h264c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H703.5l47.2-60.1a8.1 8.1 0 001.7-4.9c0-4.4-3.6-8-8-8h-72.6c-4.9 0-9.5 2.3-12.6 6.1l-68.5 87.1c-4.4 5.6-6.8 12.6-6.8 19.8.1 17.7 14.4 32 32.1 32zm240 64H592c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h176.5l-47.2 60.1a8.1 8.1 0 00-1.7 4.9c0 4.4 3.6 8 8 8h72.6c4.9 0 9.5-2.3 12.6-6.1l68.5-87.1c4.4-5.6 6.8-12.6 6.8-19.8-.1-17.7-14.4-32-32.1-32z"}}]},name:"user-switch",theme:"outlined"};var d=s(5624),l=function(e,t){return r.createElement(d.A,(0,i.A)({},e,{ref:t,icon:o}))};const u=r.forwardRef(l);const h={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M920 416H616c-4.4 0-8 3.6-8 8v112c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-56h60v320h-46c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h164c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8h-46V480h60v56c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V424c0-4.4-3.6-8-8-8zM656 296V168c0-4.4-3.6-8-8-8H104c-4.4 0-8 3.6-8 8v128c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-64h168v560h-92c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h264c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8h-92V232h168v64c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8z"}}]},name:"font-size",theme:"outlined"};var m=function(e,t){return r.createElement(d.A,(0,i.A)({},e,{ref:t,icon:h}))};const p=r.forwardRef(m);const x={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-696 72h136v656H184V184zm656 656H384V384h456v456zM384 320V184h456v136H384z"}}]},name:"layout",theme:"outlined"};var f=function(e,t){return r.createElement(d.A,(0,i.A)({},e,{ref:t,icon:x}))};const v=r.forwardRef(f),g={hide_table_of_contents:!0},j="\u041f\u0440\u0438\u043c\u0435\u0440\u044b",_={id:"guides/examples/index",title:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b",description:"\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/index.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/",permalink:"/ru/docs/guides/examples/",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/index.mdx",tags:[],version:"current",lastUpdatedAt:1727540389e3,frontMatter:{hide_table_of_contents:!0},sidebar:"guidesSidebar",previous:{title:"\ud83c\udfaf \u0413\u0430\u0439\u0434\u044b",permalink:"/ru/docs/guides/"},next:{title:"\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f",permalink:"/ru/docs/guides/examples/auth"}},A={},b=[{value:"\u0413\u043b\u0430\u0432\u043d\u043e\u0435",id:"main",level:2},...a.RM,...a.RM,...a.RM];function y(e){const t={h1:"h1",h2:"h2",header:"header",p:"p",...(0,c.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"\u043f\u0440\u0438\u043c\u0435\u0440\u044b",children:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b"})}),"\n",(0,n.jsx)("p",{class:"summary",children:(0,n.jsx)(t.p,{children:"\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438"})}),"\n",(0,n.jsx)(t.h2,{id:"main",children:"\u0413\u043b\u0430\u0432\u043d\u043e\u0435"}),"\n","\n",(0,n.jsx)(a.Ay,{title:"\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f",description:"\u0414\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043b\u043e\u0433\u0438\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438",to:"/docs/guides/examples/auth",Icon:u,tags:["\u0424\u043e\u0440\u043c\u044b","2FA","OAuth","\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0442\u043e\u043a\u0435\u043d\u043e\u0432","\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u043e\u043a\u0435\u043d\u0430"]}),"\n",(0,n.jsx)(a.Ay,{title:"\u0422\u0438\u043f\u044b",description:"\u0413\u0434\u0435 \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c \u0442\u0438\u043f\u044b? \u041a\u0430\u043a\u0438\u0445 \u0432\u0438\u0434\u043e\u0432 \u043e\u043d\u0438 \u0431\u044b\u0432\u0430\u044e\u0442 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 FSD?",to:"/docs/guides/examples/types",Icon:p,tags:["DTO","\u041c\u0430\u043f\u043f\u0435\u0440\u044b","\u0421\u0432\u044f\u0437\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439","\u0410\u0432\u0442\u043e-\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f","\u0421\u0445\u0435\u043c\u044b \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438"]}),"\n",(0,n.jsx)(a.Ay,{title:"\u041b\u0435\u0439\u0430\u0443\u0442\u044b \u0441\u0442\u0440\u0430\u043d\u0438\u0446",description:"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u0435\u0439\u0441\u044b \u0441 \u043b\u0435\u0439\u0430\u0443\u0442\u0430\u043c\u0438",to:"/docs/guides/examples/page-layout",Icon:v,tags:["\u0413\u0434\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c","\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432 \u0432 \u043b\u0435\u0439\u0430\u0443\u0442\u0435"]})]})}function M(e={}){const{wrapper:t}={...(0,c.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(y,{...e})}):y(e)}},8173:(e,t,s)=>{s.d(t,{Y:()=>r,A:()=>d});s(758);var n=s(3526),c=s(8886);const a={root:"root_GfON",rootDisabled:"rootDisabled_SFUB",details:"details_xxkR",detailsTags:"detailsTags_uTQx",icon:"icon_ciqP",title:"title_pSH5",description:"description__Fep",miniTheme:"miniTheme_ePfp",primaryTheme:"primaryTheme_CilO",defaultTheme:"defaultTheme_j3I8"};var i=s(6070);const r=e=>{const{title:t,description:s,to:r,Icon:d,tags:l,className:u,disabled:h,theme:m="default"}=e;return(0,i.jsxs)(c.A,{className:(0,n.A)(a.root,u,h&&a.rootDisabled,a[`${m}Theme`]),to:r,children:[(0,i.jsx)(o,{Icon:d}),(0,i.jsxs)("div",{className:a.details,children:[(0,i.jsxs)("div",{className:a.detailsMain,children:[(0,i.jsx)("span",{className:a.title,children:t}),(0,i.jsx)("p",{className:a.description,children:s})]}),l&&(0,i.jsx)("div",{className:a.detailsTags,children:l.join(" \u2022 ")})]})]})},o=e=>{let{Icon:t}=e;return t?"string"==typeof t?(0,i.jsx)("span",{className:a.icon,children:t}):(0,i.jsx)(t,{className:a.icon}):null},d=r},5710:(e,t,s)=>{s.d(t,{R:()=>i,x:()=>r});var n=s(758);const c={},a=n.createContext(c);function i(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:i(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/ru/assets/js/2bd07bfd.d8eeec6f.js.LICENSE.txt b/ru/assets/js/2bd07bfd.aecf612d.js.LICENSE.txt similarity index 100% rename from ru/assets/js/2bd07bfd.d8eeec6f.js.LICENSE.txt rename to ru/assets/js/2bd07bfd.aecf612d.js.LICENSE.txt diff --git a/ru/assets/js/352bcbef.184a3ebf.js b/ru/assets/js/352bcbef.94c4c842.js similarity index 99% rename from ru/assets/js/352bcbef.184a3ebf.js rename to ru/assets/js/352bcbef.94c4c842.js index 556b922395..be87885014 100644 --- a/ru/assets/js/352bcbef.184a3ebf.js +++ b/ru/assets/js/352bcbef.94c4c842.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[4401],{9722:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>l,toc:()=>d});var i=s(6070),r=s(5710);const t={sidebar_position:1},o="Low Coupling & High Cohesion",l={id:"reference/isolation/coupling-cohesion",title:"Low Coupling & High Cohesion",description:"\u041c\u043e\u0434\u0443\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0441\u0438\u043b\u044c\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c\u044e (\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0439 \u0447\u0435\u0442\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438) \u0438 \u0441\u043b\u0430\u0431\u043e\u0439 \u0437\u0430\u0446\u0435\u043f\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e (\u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u0435\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439)",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/reference/isolation/coupling-cohesion.md",sourceDirName:"reference/isolation",slug:"/reference/isolation/coupling-cohesion",permalink:"/ru/docs/reference/isolation/coupling-cohesion",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/reference/isolation/coupling-cohesion.md",tags:[],version:"current",lastUpdatedAt:1727030144e3,sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"referenceSidebar",previous:{title:"\u0418\u0437\u043e\u043b\u044f\u0446\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439",permalink:"/ru/docs/reference/isolation/"},next:{title:"Decouple entities",permalink:"/ru/docs/reference/isolation/decouple-entities"}},c={},d=[{value:"\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 (UI level)",id:"components-composition-ui-level",level:2},{value:"\u041f\u0440\u0438\u043c\u0435\u0440",id:"example",level:3},{value:"\u0417\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u043e\u0441\u0442\u044c",id:"laying-the-extensibility",level:4},{value:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e",id:"using-the-composition",level:4},{value:"\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0441\u043b\u043e\u0435\u0432 (APP level)",id:"layer-composition-app-level",level:2},{value:"\u041f\u0440\u0438\u043c\u0435\u0440",id:"example",level:3},{value:"\u0421\u0432\u044f\u0436\u0435\u043c \u0432\u0441\u0435 \u044d\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u0435",id:"lets-tie-it-all-together",level:4},{value:"\u041c\u043e\u0434\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445",id:"data-model",level:4},{value:"\u0418\u0442\u043e\u0433\u043e",id:"summary",level:2},{value:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435",id:"see-also",level:2}];function a(e){const n={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"low-coupling--high-cohesion",children:"Low Coupling & High Cohesion"})}),"\n",(0,i.jsxs)(n.p,{children:["\u041c\u043e\u0434\u0443\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0438\u0435 ",(0,i.jsx)(n.strong,{children:"\u0441\u0438\u043b\u044c\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c\u044e"})," (\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0439 \u0447\u0435\u0442\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438) \u0438 ",(0,i.jsx)(n.strong,{children:"\u0441\u043b\u0430\u0431\u043e\u0439 \u0437\u0430\u0446\u0435\u043f\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e"})," (\u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u0435\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439)"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"coupling-cohesion-themed",src:s(9110).A+"",width:"1024",height:"1024"})}),"\n",(0,i.jsx)(n.p,{children:"\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"\u0420\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0441\u043b\u043e\u0438 \u0438 \u0441\u043b\u0430\u0439\u0441\u044b - \u043c\u043e\u0434\u0443\u043b\u0438, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c."}),"\n",(0,i.jsxs)(n.li,{children:["\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043c\u043e\u0434\u0443\u043b\u044e - \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c ",(0,i.jsx)(n.a,{href:"/docs/reference/public-api",children:"\u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u0430"})]}),"\n",(0,i.jsxs)(n.li,{children:["\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u043d\u0430 ",(0,i.jsx)(n.a,{href:"/docs/reference/isolation",children:"\u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439"}),' - \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442 "\u043d\u0438\u0436\u0435\u043b\u0435\u0436\u0430\u0449\u0438\u0445" \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u043d\u043e \u043d\u0435 \u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0441 \u0442\u043e\u0433\u043e \u0436\u0435 \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u0441\u043b\u043e\u044f.']}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"components-composition-ui-level",children:"\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 (UI level)"}),"\n",(0,i.jsx)(n.p,{children:"\u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 UI-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435, \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e, \u0441\u043b\u043e\u0442\u044b."}),"\n",(0,i.jsxs)(n.p,{children:["\u0422\u0430\u043a\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u0430\u043a ",(0,i.jsx)(n.strong,{children:"\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445, \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432"})," \u0438, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c, \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0442\u044c ",(0,i.jsx)(n.strong,{children:"\u0441\u043b\u0430\u0431\u043e\u0439 \u0437\u0430\u0446\u0435\u043f\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438"})," \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430"]}),"\n",(0,i.jsx)(n.h3,{id:"example",children:"\u041f\u0440\u0438\u043c\u0435\u0440"}),"\n",(0,i.jsxs)(n.p,{children:["\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0430\u043a\u0443\u044e \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 ",(0,i.jsx)(n.strong,{children:"\u0441\u043f\u0438\u0441\u043a\u0430 \u0441 \u0445\u0435\u0434\u0435\u0440\u043e\u043c:"})]}),"\n",(0,i.jsx)(n.h4,{id:"laying-the-extensibility",children:"\u0417\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u043e\u0441\u0442\u044c"}),"\n",(0,i.jsx)(n.p,{children:"\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0441\u043f\u0438\u0441\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0430\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0432\u0438\u0434 \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0445\u0435\u0434\u0435\u0440\u0430 \u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043f\u0438\u0441\u043a\u0430, \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0438\u0445 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-tsx",children:'interface ListProps {\n Header: React.ReactNode;\n Items: React.ReactNode;\n}\n\nconst List: Component = ({ Header, Items }) => (\n
    \n {Header}\n
      \n {Items}\n
    \n
    \n)\n\n'})}),"\n",(0,i.jsx)(n.h4,{id:"using-the-composition",children:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e"}),"\n",(0,i.jsxs)(n.p,{children:["\u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 ",(0,i.jsx)(n.strong,{children:"\u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c"})," \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u0445\u0435\u0434\u0435\u0440\u0430 \u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043f\u0438\u0441\u043a\u0430. \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0445\u0435\u0434\u0435\u0440\u0430 \u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043f\u0438\u0441\u043a\u0430 \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u043a\u0430\u043a \u0441\u0432\u043e\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0442\u0430\u043a \u0438 \u0441\u0432\u043e\u044e \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0443 \u043a \u043b\u044e\u0431\u044b\u043c \u0447\u0430\u0441\u0442\u044f\u043c \u043e\u0431\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f - \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0441\u043f\u0438\u0441\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u0440\u043e \u044d\u0442\u043e \u0437\u043d\u0430\u0442\u044c, \u0430 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-tsx",children:'} Items={} />\n\n} />\n\n} Items={} />\n\n'})}),"\n",(0,i.jsx)(n.h2,{id:"layer-composition-app-level",children:"\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0441\u043b\u043e\u0435\u0432 (APP level)"}),"\n",(0,i.jsxs)(n.p,{children:["\u041c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c \u0446\u0435\u043d\u043d\u0443\u044e \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 - ",(0,i.jsx)(n.strong,{children:"\u0444\u0438\u0447\u0438 (features)"}),", \u0430 \u043b\u043e\u0433\u0438\u043a\u0443, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0443\u044e\u0441\u044f \u043a \u0431\u0438\u0437\u043d\u0435\u0441 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c - \u0432 ",(0,i.jsx)(n.strong,{children:"\u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 (entities)"}),". \u0418 \u0444\u0438\u0447\u0438, \u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 ",(0,i.jsx)(n.strong,{children:"\u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0432\u044b\u0441\u043e\u043a\u043e-\u0441\u0432\u044f\u0437\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438"}),", \u0442.\u0435. \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 ",(0,i.jsx)(n.strong,{children:"\u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438"})," \u0438\u043b\u0438 \u0441\u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432\u043e\u043a\u0440\u0443\u0433 ",(0,i.jsx)(n.strong,{children:"\u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438."})]}),"\n",(0,i.jsxs)(n.p,{children:["\u0412\u0441\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0442\u0430\u043a\u0438\u043c\u0438 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e UI-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u044b\u0448\u0435, \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043a\u0430\u043a ",(0,i.jsx)(n.strong,{children:"\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439."})]}),"\n",(0,i.jsx)(n.h3,{id:"example",children:"\u041f\u0440\u0438\u043c\u0435\u0440"}),"\n",(0,i.jsx)(n.p,{children:"\u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f-\u0447\u0430\u0442\u0430 \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 \u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0430"}),"\n",(0,i.jsx)(n.li,{children:"\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0443 \u0441 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c \u0434\u0440\u0443\u0433\u043e\u043c"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438, \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:"}),"\n",(0,i.jsx)(n.p,{children:"Entities"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c (\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f)"}),"\n",(0,i.jsx)(n.li,{children:"\u041a\u043e\u043d\u0442\u0430\u043a\u0442 (\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u043c)"}),"\n",(0,i.jsx)(n.li,{children:"\u041f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0430 (\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0438 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043d\u0435\u0439)"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Features"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"\u0424\u043e\u0440\u043c\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f"}),"\n",(0,i.jsx)(n.li,{children:"\u041c\u0435\u043d\u044e \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0438"}),"\n"]}),"\n",(0,i.jsx)(n.h4,{id:"lets-tie-it-all-together",children:"\u0421\u0432\u044f\u0436\u0435\u043c \u0432\u0441\u0435 \u044d\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u0435"}),"\n",(0,i.jsx)(n.p,{children:"\u0412 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u0441\u043b\u0435\u0433\u043a\u0430 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-tsx",metastring:'title="page/main/ui.tsx"',children:"}\n Items={}\n Footer={}\n/>\n"})}),"\n",(0,i.jsx)(n.h4,{id:"data-model",children:"\u041c\u043e\u0434\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445"}),"\n",(0,i.jsxs)(n.p,{children:["\u041c\u043e\u0434\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0431\u0443\u0434\u0435\u0442 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043a\u0430\u043a ",(0,i.jsx)(n.strong,{children:"\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0444\u0438\u0447 \u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439"}),". \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0444\u0438\u0447\u0438 \u0431\u0443\u0434\u0443\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043a\u0430\u043a \u0444\u0430\u0431\u0440\u0438\u043a\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044d\u0442\u0438\u0445 \u0444\u0430\u0431\u0440\u0438\u043a."]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"\u041e\u0434\u043d\u0430\u043a\u043e, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0432\u0438\u0434\u0435 \u0444\u0430\u0431\u0440\u0438\u043a\u0438 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430 - \u0444\u0438\u0447\u0430 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u043d\u0438\u0436\u0435\u043b\u0435\u0436\u0430\u0449\u0438\u0445 \u0441\u043b\u043e\u0435\u0432 \u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-ts",metastring:'title="pages/main/model.ts"',children:'import { userModel } from "entitites/user"\nimport { conversationModel } from "entities/conversation"\nimport { contactModel } from "entities/contact"\n\nimport { createMessageInput } from "features/message-input"\nimport { createConversationSwitch } from "features/conversation-switch"\n\nimport { beautifiy } from "shared/lib/beautify-text"\n\nexport const { allConversations, setConversation } = createConversationSwitch({\n contacts: contactModel.allContacts,\n setConversation: conversationModel.setConversation,\n currentConversation: conversationModel.conversation,\n currentUser: userModel.currentUser\n})\n\nexport const { sendMessage, attachFile } = createMessageInput({\n author: userModel.currentUser\n send: conversationModel.sendMessage,\n formatMessage: beautify\n})\n'})}),"\n",(0,i.jsx)(n.h2,{id:"summary",children:"\u0418\u0442\u043e\u0433\u043e"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\u041c\u043e\u0434\u0443\u043b\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u044c ",(0,i.jsx)(n.strong,{children:"\u0441\u0438\u043b\u044c\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c\u044e"})," (\u0438\u043c\u0435\u0442\u044c \u043e\u0434\u043d\u0443 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u0440\u0435\u0448\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443) \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c ",(0,i.jsx)(n.a,{href:"/docs/reference/public-api",children:(0,i.jsx)(n.strong,{children:"\u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441"})})," \u0434\u043e\u0441\u0442\u0443\u043f\u0430"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"\u0421\u043b\u0430\u0431\u0430\u044f \u0437\u0430\u0446\u0435\u043f\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c"})," \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 - \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 UI, \u0444\u0438\u0447 \u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439"]}),"\n",(0,i.jsxs)(n.li,{children:["\u0422\u0430\u043a\u0436\u0435, \u0434\u043b\u044f \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u0446\u0435\u043f\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u043c\u043e\u0434\u0443\u043b\u0438 ",(0,i.jsx)(n.strong,{children:"\u0434\u043e\u043b\u0436\u043d\u044b \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b"})," - \u0442\u0430\u043a \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043e\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"see-also",children:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://enterprisecraftsmanship.com/posts/cohesion-coupling-difference/",children:"(\u0421\u0442\u0430\u0442\u044c\u044f) \u041f\u0440\u043e Low Coupling \u0438 High Cohesion \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.em,{children:"\u0421\u0445\u0435\u043c\u0430 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://medium.com/german-gorelkin/low-coupling-high-cohesion-d36369fb1be9",children:"(\u0421\u0442\u0430\u0442\u044c\u044f) Low Coupling \u0438 High Cohesion. \u0417\u0430\u043a\u043e\u043d \u0414\u0435\u043c\u0435\u0442\u0440\u044b"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.slideshare.net/cristalngo/software-design-principles-57388843",children:"(\u041f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044f) \u041f\u0440\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u0432\u043a\u043b\u044e\u0447\u0430\u044f Low Coupling & High Cohesion)"})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},9110:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/coupling-ca24ecbbb9b4595e100e3e990025ed73.png"},5710:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>l});var i=s(758);const r={},t=i.createContext(r);function o(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[4401],{9722:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>l,toc:()=>d});var i=s(6070),r=s(5710);const t={sidebar_position:1},o="Low Coupling & High Cohesion",l={id:"reference/isolation/coupling-cohesion",title:"Low Coupling & High Cohesion",description:"\u041c\u043e\u0434\u0443\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0441\u0438\u043b\u044c\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c\u044e (\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0439 \u0447\u0435\u0442\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438) \u0438 \u0441\u043b\u0430\u0431\u043e\u0439 \u0437\u0430\u0446\u0435\u043f\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e (\u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u0435\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439)",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/reference/isolation/coupling-cohesion.md",sourceDirName:"reference/isolation",slug:"/reference/isolation/coupling-cohesion",permalink:"/ru/docs/reference/isolation/coupling-cohesion",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/reference/isolation/coupling-cohesion.md",tags:[],version:"current",lastUpdatedAt:1727540389e3,sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"referenceSidebar",previous:{title:"\u0418\u0437\u043e\u043b\u044f\u0446\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439",permalink:"/ru/docs/reference/isolation/"},next:{title:"Decouple entities",permalink:"/ru/docs/reference/isolation/decouple-entities"}},c={},d=[{value:"\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 (UI level)",id:"components-composition-ui-level",level:2},{value:"\u041f\u0440\u0438\u043c\u0435\u0440",id:"example",level:3},{value:"\u0417\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u043e\u0441\u0442\u044c",id:"laying-the-extensibility",level:4},{value:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e",id:"using-the-composition",level:4},{value:"\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0441\u043b\u043e\u0435\u0432 (APP level)",id:"layer-composition-app-level",level:2},{value:"\u041f\u0440\u0438\u043c\u0435\u0440",id:"example",level:3},{value:"\u0421\u0432\u044f\u0436\u0435\u043c \u0432\u0441\u0435 \u044d\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u0435",id:"lets-tie-it-all-together",level:4},{value:"\u041c\u043e\u0434\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445",id:"data-model",level:4},{value:"\u0418\u0442\u043e\u0433\u043e",id:"summary",level:2},{value:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435",id:"see-also",level:2}];function a(e){const n={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"low-coupling--high-cohesion",children:"Low Coupling & High Cohesion"})}),"\n",(0,i.jsxs)(n.p,{children:["\u041c\u043e\u0434\u0443\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0438\u0435 ",(0,i.jsx)(n.strong,{children:"\u0441\u0438\u043b\u044c\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c\u044e"})," (\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0439 \u0447\u0435\u0442\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438) \u0438 ",(0,i.jsx)(n.strong,{children:"\u0441\u043b\u0430\u0431\u043e\u0439 \u0437\u0430\u0446\u0435\u043f\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e"})," (\u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u0435\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439)"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"coupling-cohesion-themed",src:s(9110).A+"",width:"1024",height:"1024"})}),"\n",(0,i.jsx)(n.p,{children:"\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"\u0420\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0441\u043b\u043e\u0438 \u0438 \u0441\u043b\u0430\u0439\u0441\u044b - \u043c\u043e\u0434\u0443\u043b\u0438, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c."}),"\n",(0,i.jsxs)(n.li,{children:["\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043c\u043e\u0434\u0443\u043b\u044e - \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c ",(0,i.jsx)(n.a,{href:"/docs/reference/public-api",children:"\u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u0430"})]}),"\n",(0,i.jsxs)(n.li,{children:["\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u043d\u0430 ",(0,i.jsx)(n.a,{href:"/docs/reference/isolation",children:"\u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439"}),' - \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442 "\u043d\u0438\u0436\u0435\u043b\u0435\u0436\u0430\u0449\u0438\u0445" \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u043d\u043e \u043d\u0435 \u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0441 \u0442\u043e\u0433\u043e \u0436\u0435 \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u0441\u043b\u043e\u044f.']}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"components-composition-ui-level",children:"\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 (UI level)"}),"\n",(0,i.jsx)(n.p,{children:"\u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 UI-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435, \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e, \u0441\u043b\u043e\u0442\u044b."}),"\n",(0,i.jsxs)(n.p,{children:["\u0422\u0430\u043a\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u0430\u043a ",(0,i.jsx)(n.strong,{children:"\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445, \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432"})," \u0438, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c, \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0442\u044c ",(0,i.jsx)(n.strong,{children:"\u0441\u043b\u0430\u0431\u043e\u0439 \u0437\u0430\u0446\u0435\u043f\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438"})," \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430"]}),"\n",(0,i.jsx)(n.h3,{id:"example",children:"\u041f\u0440\u0438\u043c\u0435\u0440"}),"\n",(0,i.jsxs)(n.p,{children:["\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0430\u043a\u0443\u044e \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 ",(0,i.jsx)(n.strong,{children:"\u0441\u043f\u0438\u0441\u043a\u0430 \u0441 \u0445\u0435\u0434\u0435\u0440\u043e\u043c:"})]}),"\n",(0,i.jsx)(n.h4,{id:"laying-the-extensibility",children:"\u0417\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u043e\u0441\u0442\u044c"}),"\n",(0,i.jsx)(n.p,{children:"\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0441\u043f\u0438\u0441\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0430\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0432\u0438\u0434 \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0445\u0435\u0434\u0435\u0440\u0430 \u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043f\u0438\u0441\u043a\u0430, \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0438\u0445 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-tsx",children:'interface ListProps {\n Header: React.ReactNode;\n Items: React.ReactNode;\n}\n\nconst List: Component = ({ Header, Items }) => (\n
    \n {Header}\n
      \n {Items}\n
    \n
    \n)\n\n'})}),"\n",(0,i.jsx)(n.h4,{id:"using-the-composition",children:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e"}),"\n",(0,i.jsxs)(n.p,{children:["\u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 ",(0,i.jsx)(n.strong,{children:"\u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c"})," \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u0445\u0435\u0434\u0435\u0440\u0430 \u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043f\u0438\u0441\u043a\u0430. \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0445\u0435\u0434\u0435\u0440\u0430 \u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043f\u0438\u0441\u043a\u0430 \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u043a\u0430\u043a \u0441\u0432\u043e\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0442\u0430\u043a \u0438 \u0441\u0432\u043e\u044e \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0443 \u043a \u043b\u044e\u0431\u044b\u043c \u0447\u0430\u0441\u0442\u044f\u043c \u043e\u0431\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f - \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0441\u043f\u0438\u0441\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u0440\u043e \u044d\u0442\u043e \u0437\u043d\u0430\u0442\u044c, \u0430 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-tsx",children:'} Items={} />\n\n} />\n\n} Items={} />\n\n'})}),"\n",(0,i.jsx)(n.h2,{id:"layer-composition-app-level",children:"\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0441\u043b\u043e\u0435\u0432 (APP level)"}),"\n",(0,i.jsxs)(n.p,{children:["\u041c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c \u0446\u0435\u043d\u043d\u0443\u044e \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 - ",(0,i.jsx)(n.strong,{children:"\u0444\u0438\u0447\u0438 (features)"}),", \u0430 \u043b\u043e\u0433\u0438\u043a\u0443, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0443\u044e\u0441\u044f \u043a \u0431\u0438\u0437\u043d\u0435\u0441 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c - \u0432 ",(0,i.jsx)(n.strong,{children:"\u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 (entities)"}),". \u0418 \u0444\u0438\u0447\u0438, \u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 ",(0,i.jsx)(n.strong,{children:"\u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0432\u044b\u0441\u043e\u043a\u043e-\u0441\u0432\u044f\u0437\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438"}),", \u0442.\u0435. \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 ",(0,i.jsx)(n.strong,{children:"\u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438"})," \u0438\u043b\u0438 \u0441\u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432\u043e\u043a\u0440\u0443\u0433 ",(0,i.jsx)(n.strong,{children:"\u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438."})]}),"\n",(0,i.jsxs)(n.p,{children:["\u0412\u0441\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0442\u0430\u043a\u0438\u043c\u0438 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e UI-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u044b\u0448\u0435, \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043a\u0430\u043a ",(0,i.jsx)(n.strong,{children:"\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439."})]}),"\n",(0,i.jsx)(n.h3,{id:"example",children:"\u041f\u0440\u0438\u043c\u0435\u0440"}),"\n",(0,i.jsx)(n.p,{children:"\u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f-\u0447\u0430\u0442\u0430 \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 \u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0430"}),"\n",(0,i.jsx)(n.li,{children:"\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0443 \u0441 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c \u0434\u0440\u0443\u0433\u043e\u043c"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438, \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:"}),"\n",(0,i.jsx)(n.p,{children:"Entities"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c (\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f)"}),"\n",(0,i.jsx)(n.li,{children:"\u041a\u043e\u043d\u0442\u0430\u043a\u0442 (\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u043c)"}),"\n",(0,i.jsx)(n.li,{children:"\u041f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0430 (\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0438 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043d\u0435\u0439)"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Features"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"\u0424\u043e\u0440\u043c\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f"}),"\n",(0,i.jsx)(n.li,{children:"\u041c\u0435\u043d\u044e \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0438"}),"\n"]}),"\n",(0,i.jsx)(n.h4,{id:"lets-tie-it-all-together",children:"\u0421\u0432\u044f\u0436\u0435\u043c \u0432\u0441\u0435 \u044d\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u0435"}),"\n",(0,i.jsx)(n.p,{children:"\u0412 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u0441\u043b\u0435\u0433\u043a\u0430 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-tsx",metastring:'title="page/main/ui.tsx"',children:"}\n Items={}\n Footer={}\n/>\n"})}),"\n",(0,i.jsx)(n.h4,{id:"data-model",children:"\u041c\u043e\u0434\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445"}),"\n",(0,i.jsxs)(n.p,{children:["\u041c\u043e\u0434\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0431\u0443\u0434\u0435\u0442 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043a\u0430\u043a ",(0,i.jsx)(n.strong,{children:"\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0444\u0438\u0447 \u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439"}),". \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0444\u0438\u0447\u0438 \u0431\u0443\u0434\u0443\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043a\u0430\u043a \u0444\u0430\u0431\u0440\u0438\u043a\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044d\u0442\u0438\u0445 \u0444\u0430\u0431\u0440\u0438\u043a."]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"\u041e\u0434\u043d\u0430\u043a\u043e, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0432\u0438\u0434\u0435 \u0444\u0430\u0431\u0440\u0438\u043a\u0438 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430 - \u0444\u0438\u0447\u0430 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u043d\u0438\u0436\u0435\u043b\u0435\u0436\u0430\u0449\u0438\u0445 \u0441\u043b\u043e\u0435\u0432 \u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-ts",metastring:'title="pages/main/model.ts"',children:'import { userModel } from "entitites/user"\nimport { conversationModel } from "entities/conversation"\nimport { contactModel } from "entities/contact"\n\nimport { createMessageInput } from "features/message-input"\nimport { createConversationSwitch } from "features/conversation-switch"\n\nimport { beautifiy } from "shared/lib/beautify-text"\n\nexport const { allConversations, setConversation } = createConversationSwitch({\n contacts: contactModel.allContacts,\n setConversation: conversationModel.setConversation,\n currentConversation: conversationModel.conversation,\n currentUser: userModel.currentUser\n})\n\nexport const { sendMessage, attachFile } = createMessageInput({\n author: userModel.currentUser\n send: conversationModel.sendMessage,\n formatMessage: beautify\n})\n'})}),"\n",(0,i.jsx)(n.h2,{id:"summary",children:"\u0418\u0442\u043e\u0433\u043e"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\u041c\u043e\u0434\u0443\u043b\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u044c ",(0,i.jsx)(n.strong,{children:"\u0441\u0438\u043b\u044c\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c\u044e"})," (\u0438\u043c\u0435\u0442\u044c \u043e\u0434\u043d\u0443 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u0440\u0435\u0448\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443) \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c ",(0,i.jsx)(n.a,{href:"/docs/reference/public-api",children:(0,i.jsx)(n.strong,{children:"\u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441"})})," \u0434\u043e\u0441\u0442\u0443\u043f\u0430"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"\u0421\u043b\u0430\u0431\u0430\u044f \u0437\u0430\u0446\u0435\u043f\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c"})," \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 - \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 UI, \u0444\u0438\u0447 \u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439"]}),"\n",(0,i.jsxs)(n.li,{children:["\u0422\u0430\u043a\u0436\u0435, \u0434\u043b\u044f \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u0446\u0435\u043f\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u043c\u043e\u0434\u0443\u043b\u0438 ",(0,i.jsx)(n.strong,{children:"\u0434\u043e\u043b\u0436\u043d\u044b \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b"})," - \u0442\u0430\u043a \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043e\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"see-also",children:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://enterprisecraftsmanship.com/posts/cohesion-coupling-difference/",children:"(\u0421\u0442\u0430\u0442\u044c\u044f) \u041f\u0440\u043e Low Coupling \u0438 High Cohesion \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.em,{children:"\u0421\u0445\u0435\u043c\u0430 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://medium.com/german-gorelkin/low-coupling-high-cohesion-d36369fb1be9",children:"(\u0421\u0442\u0430\u0442\u044c\u044f) Low Coupling \u0438 High Cohesion. \u0417\u0430\u043a\u043e\u043d \u0414\u0435\u043c\u0435\u0442\u0440\u044b"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.slideshare.net/cristalngo/software-design-principles-57388843",children:"(\u041f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044f) \u041f\u0440\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u0432\u043a\u043b\u044e\u0447\u0430\u044f Low Coupling & High Cohesion)"})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},9110:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/coupling-ca24ecbbb9b4595e100e3e990025ed73.png"},5710:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>l});var i=s(758);const r={},t=i.createContext(r);function o(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/ru/assets/js/35c5367b.f75686f7.js b/ru/assets/js/35c5367b.a0ab384e.js similarity index 99% rename from ru/assets/js/35c5367b.f75686f7.js rename to ru/assets/js/35c5367b.a0ab384e.js index b43753c2d0..2655bdfdfd 100644 --- a/ru/assets/js/35c5367b.f75686f7.js +++ b/ru/assets/js/35c5367b.a0ab384e.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[427],{1955:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>h,frontMatter:()=>l,metadata:()=>o,toc:()=>c});var r=s(6070),i=s(5710);const l={sidebar_position:3,sidebar_label:"Public API",pagination_next:"about/index"},t="\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0435 API \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f",o={id:"reference/public-api",title:"\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0435 API \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f",description:"\u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044c.",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/reference/public-api.md",sourceDirName:"reference",slug:"/reference/public-api",permalink:"/ru/docs/reference/public-api",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/reference/public-api.md",tags:[],version:"current",lastUpdatedAt:1727030144e3,sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_label:"Public API",pagination_next:"about/index"},sidebar:"referenceSidebar",previous:{title:"\u0421\u043b\u0430\u0439\u0441\u044b \u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b",permalink:"/ru/docs/reference/slices-segments"},next:{title:"\ud83c\udf70 \u041e \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438",permalink:"/ru/docs/about/"}},d={},c=[{value:"\u0426\u0435\u043b\u0438",id:"goals",level:2},{value:"\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u043c\u0443 API",id:"requirements-for-the-public-api",level:2},{value:"1. \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430",id:"1-access-control",level:3},{value:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b",id:"examples",level:4},{value:"\u041e\u0442\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043e\u0442 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432",id:"suspension-from-private-imports",level:5},{value:"2. \u0423\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c",id:"2-sustainability-for-changes",level:3},{value:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b",id:"examples",level:4},{value:"\u0410\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438",id:"abstracting-from-the-implementation",level:5},{value:"3. \u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c",id:"3-integrability",level:3},{value:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b",id:"examples",level:4},{value:"\u041a\u043e\u043b\u043b\u0438\u0437\u0438\u044f \u0438\u043c\u0435\u043d",id:"name-collision",level:5},{value:"\u0413\u0438\u0431\u043a\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435",id:"flexible-use",level:5},{value:"\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0439",id:"resolution-of-collisions",level:5},{value:"\u041e \u0440\u0435\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430\u0445",id:"about-re-exports",level:2},{value:"\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438",id:"disadvantages",level:3},{value:"\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0443\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f",id:"possible-solutions",level:3},{value:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435",id:"see-also",level:2}];function a(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"\u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0435-api-\u043c\u043e\u0434\u0443\u043b\u044f-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f",children:"\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0435 API \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f"})}),"\n",(0,r.jsxs)(n.p,{children:["\u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a ",(0,r.jsx)(n.strong,{children:"\u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044c."})]}),"\n",(0,r.jsx)(n.h2,{id:"goals",children:"\u0426\u0435\u043b\u0438"}),"\n",(0,r.jsxs)(n.p,{children:["\u0423\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 ",(0,r.jsx)(n.em,{children:"\u0440\u044f\u0434\u0430 \u0446\u0435\u043b\u0435\u0439"}),":"]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c ",(0,r.jsx)(n.strong,{children:"\u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043e \u043e\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439"})," \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439"]}),"\n",(0,r.jsxs)(n.li,{children:["\u041f\u0435\u0440\u0435\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043c\u043e\u0434\u0443\u043b\u044f ",(0,r.jsx)(n.strong,{children:"\u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0442\u044c"})," \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438"]}),"\n",(0,r.jsxs)(n.li,{children:["\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c ",(0,r.jsx)(n.strong,{children:"\u043b\u0435\u0433\u043a\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u044b"}),"\n",(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f"})," - \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043b\u043e\u043c\u0430\u044e\u0449\u0438\u0435 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439-\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043c\u043e\u0434\u0443\u043b\u044f."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:'\u0414\u043e\u0441\u0442\u0438\u0447\u044c \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 (Public API), \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0431\u043e\u0439 \u0435\u0434\u0438\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c \u043c\u043e\u0434\u0443\u043b\u044f \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0435\u0433\u043e "\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442" \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043c\u0438\u0440\u043e\u043c.'}),"\n",(0,r.jsx)(n.admonition,{title:"\u0412\u0430\u0436\u043d\u043e",type:"info",children:(0,r.jsx)(n.p,{children:"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u043c\u0435\u0442\u044c \u0435\u0434\u0438\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0443\u044e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sh",children:"\u2514\u2500\u2500 features/\xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 #\xa0\n \u2514\u2500\u2500 auth-form/\xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 # \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0444\u0438\u0447\u0438\n \u251c\u2500\u2500 ui/\xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 #\n \u251c\u2500\u2500 model/\xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0#\n \u251c\u2500\u2500 {...}/\xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0#\n \u2514\u2500\u2500 index.ts\xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0# \u042d\u043d\u0442\u0440\u0438\u043f\u043e\u0438\u043d\u0442 \u0444\u0438\u0447\u0438 \u0441 \u0435\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c API\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="**/**/index.ts"',children:'export { Form as AuthForm } from "./ui"\nexport * as authFormModel from "./model"\n'})}),"\n",(0,r.jsx)(n.h2,{id:"requirements-for-the-public-api",children:"\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u043c\u0443 API"}),"\n",(0,r.jsxs)(n.p,{children:["\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0432\u0435\u0441\u0442\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u043c\u043e\u0434\u0443\u043b\u0435\u043c \u043a ",(0,r.jsx)(n.strong,{children:"\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430"})," \u0438, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c, \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044f."]}),"\n",(0,r.jsx)(n.h3,{id:"1-access-control",children:"1. \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430"}),"\n",(0,r.jsxs)(n.p,{children:["Public API \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c ",(0,r.jsx)(n.strong,{children:"\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430"})," \u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443 \u043c\u043e\u0434\u0443\u043b\u044f"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\u0414\u0440\u0443\u0433\u0438\u0435 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c ",(0,r.jsx)(n.strong,{children:"\u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0434\u0443\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435"})]}),"\n",(0,r.jsxs)(n.li,{children:["\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0447\u0430\u0441\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044f \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 ",(0,r.jsx)(n.strong,{children:"\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u043e\u043c\u0443 \u043c\u043e\u0434\u0443\u043b\u044e"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"examples",children:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b"}),"\n",(0,r.jsx)(n.h5,{id:"suspension-from-private-imports",children:"\u041e\u0442\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043e\u0442 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u041f\u043b\u043e\u0445\u043e"}),": \u0418\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u0447\u0430\u0441\u0442\u044f\u043c \u043c\u043e\u0434\u0443\u043b\u044f, \u043c\u0438\u043d\u0443\u044f \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 - \u043e\u043f\u0430\u0441\u043d\u043e, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0435 \u043c\u043e\u0434\u0443\u043b\u044f"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:'- import { Form } from "features/auth-form/components/view/form"\n'})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u0425\u043e\u0440\u043e\u0448\u043e:"})," API \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u043e\u0435 \u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043d\u043e\u0435, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u043c\u043e\u0434\u0443\u043b\u044f \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0434\u0443\u043c\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043b\u043e\u043c\u0430\u0442\u044c Public API \u043f\u0440\u0438 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0435"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:'+ import { AuthForm } from "features/auth-form"\n'})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"2-sustainability-for-changes",children:"2. \u0423\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c"}),"\n",(0,r.jsxs)(n.p,{children:["Public API \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c ",(0,r.jsx)(n.strong,{children:"\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u043c \u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c"})," \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u043e\u0434\u0443\u043b\u044f"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043b\u043e\u043c\u0430\u044e\u0449\u0438\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f, \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0442\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 Public API"}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"examples",children:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b"}),"\n",(0,r.jsx)(n.h5,{id:"abstracting-from-the-implementation",children:"\u0410\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438"}),"\n",(0,r.jsx)(n.p,{children:"\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044e Public API"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u041f\u043b\u043e\u0445\u043e:"})," \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0438\u0447\u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0442\u044c \u0438\u043c\u043f\u043e\u0440\u0442\u044b \u0432\u043e \u0432\u0441\u0435\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:'- import { Form } from "features/auth-form/ui/form"\n'})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u0425\u043e\u0440\u043e\u0448\u043e:"}),' \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0444\u0438\u0447\u0438 \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0435\u0451 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0432\u043d\u0435\u0448\u043d\u0438\u0435 "\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438" \u0444\u0438\u0447\u0438 \u043d\u0435 \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u044e\u0442 \u043e\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0438\u0447\u0438']}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:'+ import { AuthForm } from "features/auth-form"\n'})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"3-integrability",children:"3. \u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c"}),"\n",(0,r.jsxs)(n.p,{children:["Public API \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c ",(0,r.jsx)(n.strong,{children:"\u043b\u0435\u0433\u043a\u043e\u0439 \u0438 \u0433\u0438\u0431\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438"})]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"\u0414\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u0434\u043e\u0431\u0435\u043d \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0447\u0430\u0441\u0442\u044f\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0440\u0435\u0448\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0438 \u0438\u043c\u0435\u043d"}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"examples",children:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b"}),"\n",(0,r.jsx)(n.h5,{id:"name-collision",children:"\u041a\u043e\u043b\u043b\u0438\u0437\u0438\u044f \u0438\u043c\u0435\u043d"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u041f\u043b\u043e\u0445\u043e:"})," \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u044f \u0438\u043c\u0435\u043d"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="features/auth-form/index.ts"',children:'export { Form } from "./ui"\nexport * as model from "./model"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="features/post-form/index.ts"',children:'export { Form } from "./ui"\nexport * as model from "./model"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:'- import { Form, model } from "features/auth-form"\n- import { Form, model } from "features/post-form"\n'})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u0425\u043e\u0440\u043e\u0448\u043e:"})," \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0430 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="features/auth-form/index.ts"',children:'export { Form as AuthForm } from "./ui"\nexport * as authFormModel from "./model"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="features/post-form/index.ts"',children:'export { Form as PostForm } from "./ui"\nexport * as postFormModel from "./model"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:'+ import { AuthForm, authFormModel } from "features/auth-form"\n+ import { PostForm, postFormModel } from "features/post-form"\n'})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h5,{id:"flexible-use",children:"\u0413\u0438\u0431\u043a\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u041f\u043b\u043e\u0445\u043e:"}),' \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c, \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c, "\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c" \u0444\u0438\u0447\u0438 \u0441\u0442\u0440\u0430\u0434\u0430\u0435\u0442']}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:'- import { storeActionUpdateUserDetails } from "features/auth-form"\n- dispatch(storeActionUpdateUserDetails(...))\n'})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u0425\u043e\u0440\u043e\u0448\u043e:"}),' "\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c" \u0444\u0438\u0447\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0443\u0436\u043d\u044b\u043c \u0432\u0435\u0449\u0430\u043c \u0438\u0442\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u0438 \u0433\u0438\u0431\u043a\u043e']}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:'+ import { authFormModel } from "features/auth-form"\n+ dispatch(authFormModel.effects.updateUserDetails(...)) // redux\n+ authFormModel.updateUserDetailsFx(...) // effector\n'})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h5,{id:"resolution-of-collisions",children:"\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0439"}),"\n",(0,r.jsx)(n.p,{children:"\u041a\u043e\u043b\u043b\u0438\u0437\u0438\u044f \u0438\u043c\u0435\u043d \u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0435\u0448\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0430 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u041f\u043b\u043e\u0445\u043e:"})," \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u044f \u0438\u043c\u0435\u043d \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="features/auth-form/index.ts"',children:'export { AuthForm } from "./ui"\nexport { authFormActions, authFormReducer } from "model"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="features/post-form/index.ts"',children:'export { PostForm } from "./ui"\nexport { postFormActions, postFormReducer } from "model"\n'})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u0425\u043e\u0440\u043e\u0448\u043e:"})," \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u044f \u0438\u043c\u0435\u043d \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="features/auth-form/model.ts"',children:"export { actions, reducer }\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="features/auth-form/index.ts"',children:'export { Form as AuthForm } from "./ui"\nexport * as authFormModel from "./model"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="features/post-form/model.ts"',children:"export { actions, reducer }\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="features/post-form/index.ts"',children:'export { Form as PostForm } from "./ui"\nexport * as postFormModel from "./model"\n'})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"about-re-exports",children:"\u041e \u0440\u0435\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430\u0445"}),"\n",(0,r.jsxs)(n.p,{children:["\u0412 JavaScript \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043c\u043e\u0434\u0443\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0438\u0437\u043d\u0443\u0442\u0440\u0438 \u043c\u043e\u0434\u0443\u043b\u044f \u0432 ",(0,r.jsx)(n.code,{children:"index"})," \u0444\u0430\u0439\u043b\u0435:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="**/**/index.ts"',children:'export { Form as AuthForm } from "./ui"\nexport * as authModel from "./model"\n'})}),"\n",(0,r.jsx)(n.h3,{id:"disadvantages",children:"\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["\u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0431\u0430\u043d\u0434\u043b\u0435\u0440\u043e\u0432 \u0438\u0437-\u0437\u0430 \u0440\u0435\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u043e\u0432 ",(0,r.jsx)(n.strong,{children:"\u0445\u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u043e\u0434-\u0441\u043f\u043b\u0438\u0442\u0442\u0438\u043d\u0433"}),", \u0442.\u043a. ",(0,r.jsx)(n.a,{href:"https://webpack.js.org/guides/tree-shaking/",children:"tree-shaking"})," \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0434\u0443\u043b\u044c \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u043d\u043e \u043d\u0435 \u0435\u0433\u043e \u0447\u0430\u0441\u0442\u044c."]}),"\n",(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u043c\u043f\u043e\u0440\u0442 ",(0,r.jsx)(n.code,{children:"authModel"})," \u0432 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 ",(0,r.jsx)(n.code,{children:"AuthForm"})," \u0432 \u0447\u0430\u043d\u043a \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0442\u0430\u043c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:'\u041a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0447\u0430\u043d\u043a\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0434\u043e\u0440\u043e\u0436\u0435, \u0442.\u043a. \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u0441\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0432 \u043d\u0435\u043c, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0442\u0435, \u0447\u0442\u043e \u043f\u043e\u043f\u0430\u043b\u0438 \u0432 \u0431\u0430\u043d\u0434\u043b "\u0437\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e"'}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"possible-solutions",children:"\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0443\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"webpack"})," \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u044b-\u0440\u0435\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u044b \u043a\u0430\u043a ",(0,r.jsx)(n.a,{href:"https://webpack.js.org/guides/tree-shaking/#mark-the-file-as-side-effect-free",children:(0,r.jsx)(n.strong,{children:"side effects free"})})," - \u044d\u0442\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 ",(0,r.jsx)(n.code,{children:"webpack"})," \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0442\u0430\u043a\u0438\u043c \u0444\u0430\u0439\u043b\u043e\u043c"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"see-also",children:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/feature-sliced/documentation/discussions/41",children:"(\u041e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435) Public API \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsxs)(n.a,{href:"https://ru.wikipedia.org/wiki/SOLID",children:["\u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b ",(0,r.jsx)(n.strong,{children:"SOLID"})]})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsxs)(n.a,{href:"https://ru.wikipedia.org/wiki/GRASP",children:["\u041f\u0430\u0442\u0442\u0435\u0440\u043d\u044b ",(0,r.jsx)(n.strong,{children:"GRASP"})]})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},5710:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>o});var r=s(758);const i={},l=r.createContext(i);function t(e){const n=r.useContext(l);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:t(e.components),r.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[427],{1955:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>h,frontMatter:()=>l,metadata:()=>o,toc:()=>c});var r=s(6070),i=s(5710);const l={sidebar_position:3,sidebar_label:"Public API",pagination_next:"about/index"},t="\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0435 API \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f",o={id:"reference/public-api",title:"\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0435 API \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f",description:"\u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044c.",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/reference/public-api.md",sourceDirName:"reference",slug:"/reference/public-api",permalink:"/ru/docs/reference/public-api",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/reference/public-api.md",tags:[],version:"current",lastUpdatedAt:1727540389e3,sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_label:"Public API",pagination_next:"about/index"},sidebar:"referenceSidebar",previous:{title:"\u0421\u043b\u0430\u0439\u0441\u044b \u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b",permalink:"/ru/docs/reference/slices-segments"},next:{title:"\ud83c\udf70 \u041e \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438",permalink:"/ru/docs/about/"}},d={},c=[{value:"\u0426\u0435\u043b\u0438",id:"goals",level:2},{value:"\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u043c\u0443 API",id:"requirements-for-the-public-api",level:2},{value:"1. \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430",id:"1-access-control",level:3},{value:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b",id:"examples",level:4},{value:"\u041e\u0442\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043e\u0442 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432",id:"suspension-from-private-imports",level:5},{value:"2. \u0423\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c",id:"2-sustainability-for-changes",level:3},{value:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b",id:"examples",level:4},{value:"\u0410\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438",id:"abstracting-from-the-implementation",level:5},{value:"3. \u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c",id:"3-integrability",level:3},{value:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b",id:"examples",level:4},{value:"\u041a\u043e\u043b\u043b\u0438\u0437\u0438\u044f \u0438\u043c\u0435\u043d",id:"name-collision",level:5},{value:"\u0413\u0438\u0431\u043a\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435",id:"flexible-use",level:5},{value:"\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0439",id:"resolution-of-collisions",level:5},{value:"\u041e \u0440\u0435\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430\u0445",id:"about-re-exports",level:2},{value:"\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438",id:"disadvantages",level:3},{value:"\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0443\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f",id:"possible-solutions",level:3},{value:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435",id:"see-also",level:2}];function a(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"\u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0435-api-\u043c\u043e\u0434\u0443\u043b\u044f-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f",children:"\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0435 API \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f"})}),"\n",(0,r.jsxs)(n.p,{children:["\u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a ",(0,r.jsx)(n.strong,{children:"\u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044c."})]}),"\n",(0,r.jsx)(n.h2,{id:"goals",children:"\u0426\u0435\u043b\u0438"}),"\n",(0,r.jsxs)(n.p,{children:["\u0423\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 ",(0,r.jsx)(n.em,{children:"\u0440\u044f\u0434\u0430 \u0446\u0435\u043b\u0435\u0439"}),":"]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c ",(0,r.jsx)(n.strong,{children:"\u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043e \u043e\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439"})," \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439"]}),"\n",(0,r.jsxs)(n.li,{children:["\u041f\u0435\u0440\u0435\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043c\u043e\u0434\u0443\u043b\u044f ",(0,r.jsx)(n.strong,{children:"\u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0442\u044c"})," \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438"]}),"\n",(0,r.jsxs)(n.li,{children:["\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c ",(0,r.jsx)(n.strong,{children:"\u043b\u0435\u0433\u043a\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u044b"}),"\n",(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f"})," - \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043b\u043e\u043c\u0430\u044e\u0449\u0438\u0435 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439-\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043c\u043e\u0434\u0443\u043b\u044f."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:'\u0414\u043e\u0441\u0442\u0438\u0447\u044c \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 (Public API), \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0431\u043e\u0439 \u0435\u0434\u0438\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c \u043c\u043e\u0434\u0443\u043b\u044f \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0435\u0433\u043e "\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442" \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043c\u0438\u0440\u043e\u043c.'}),"\n",(0,r.jsx)(n.admonition,{title:"\u0412\u0430\u0436\u043d\u043e",type:"info",children:(0,r.jsx)(n.p,{children:"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u043c\u0435\u0442\u044c \u0435\u0434\u0438\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0443\u044e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sh",children:"\u2514\u2500\u2500 features/\xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 #\xa0\n \u2514\u2500\u2500 auth-form/\xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 # \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0444\u0438\u0447\u0438\n \u251c\u2500\u2500 ui/\xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 #\n \u251c\u2500\u2500 model/\xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0#\n \u251c\u2500\u2500 {...}/\xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0#\n \u2514\u2500\u2500 index.ts\xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0 \xa0# \u042d\u043d\u0442\u0440\u0438\u043f\u043e\u0438\u043d\u0442 \u0444\u0438\u0447\u0438 \u0441 \u0435\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c API\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="**/**/index.ts"',children:'export { Form as AuthForm } from "./ui"\nexport * as authFormModel from "./model"\n'})}),"\n",(0,r.jsx)(n.h2,{id:"requirements-for-the-public-api",children:"\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u043c\u0443 API"}),"\n",(0,r.jsxs)(n.p,{children:["\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0432\u0435\u0441\u0442\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u043c\u043e\u0434\u0443\u043b\u0435\u043c \u043a ",(0,r.jsx)(n.strong,{children:"\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430"})," \u0438, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c, \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044f."]}),"\n",(0,r.jsx)(n.h3,{id:"1-access-control",children:"1. \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430"}),"\n",(0,r.jsxs)(n.p,{children:["Public API \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c ",(0,r.jsx)(n.strong,{children:"\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430"})," \u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443 \u043c\u043e\u0434\u0443\u043b\u044f"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\u0414\u0440\u0443\u0433\u0438\u0435 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c ",(0,r.jsx)(n.strong,{children:"\u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0434\u0443\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435"})]}),"\n",(0,r.jsxs)(n.li,{children:["\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0447\u0430\u0441\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044f \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 ",(0,r.jsx)(n.strong,{children:"\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u043e\u043c\u0443 \u043c\u043e\u0434\u0443\u043b\u044e"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"examples",children:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b"}),"\n",(0,r.jsx)(n.h5,{id:"suspension-from-private-imports",children:"\u041e\u0442\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043e\u0442 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u041f\u043b\u043e\u0445\u043e"}),": \u0418\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u0447\u0430\u0441\u0442\u044f\u043c \u043c\u043e\u0434\u0443\u043b\u044f, \u043c\u0438\u043d\u0443\u044f \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 - \u043e\u043f\u0430\u0441\u043d\u043e, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0435 \u043c\u043e\u0434\u0443\u043b\u044f"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:'- import { Form } from "features/auth-form/components/view/form"\n'})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u0425\u043e\u0440\u043e\u0448\u043e:"})," API \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u043e\u0435 \u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043d\u043e\u0435, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u043c\u043e\u0434\u0443\u043b\u044f \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0434\u0443\u043c\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043b\u043e\u043c\u0430\u0442\u044c Public API \u043f\u0440\u0438 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0435"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:'+ import { AuthForm } from "features/auth-form"\n'})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"2-sustainability-for-changes",children:"2. \u0423\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c"}),"\n",(0,r.jsxs)(n.p,{children:["Public API \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c ",(0,r.jsx)(n.strong,{children:"\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u043c \u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c"})," \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u043e\u0434\u0443\u043b\u044f"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043b\u043e\u043c\u0430\u044e\u0449\u0438\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f, \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0442\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 Public API"}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"examples",children:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b"}),"\n",(0,r.jsx)(n.h5,{id:"abstracting-from-the-implementation",children:"\u0410\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438"}),"\n",(0,r.jsx)(n.p,{children:"\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044e Public API"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u041f\u043b\u043e\u0445\u043e:"})," \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0438\u0447\u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0442\u044c \u0438\u043c\u043f\u043e\u0440\u0442\u044b \u0432\u043e \u0432\u0441\u0435\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:'- import { Form } from "features/auth-form/ui/form"\n'})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u0425\u043e\u0440\u043e\u0448\u043e:"}),' \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0444\u0438\u0447\u0438 \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0435\u0451 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0432\u043d\u0435\u0448\u043d\u0438\u0435 "\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438" \u0444\u0438\u0447\u0438 \u043d\u0435 \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u044e\u0442 \u043e\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0438\u0447\u0438']}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:'+ import { AuthForm } from "features/auth-form"\n'})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"3-integrability",children:"3. \u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c"}),"\n",(0,r.jsxs)(n.p,{children:["Public API \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c ",(0,r.jsx)(n.strong,{children:"\u043b\u0435\u0433\u043a\u043e\u0439 \u0438 \u0433\u0438\u0431\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438"})]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"\u0414\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u0434\u043e\u0431\u0435\u043d \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0447\u0430\u0441\u0442\u044f\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0440\u0435\u0448\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0438 \u0438\u043c\u0435\u043d"}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"examples",children:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b"}),"\n",(0,r.jsx)(n.h5,{id:"name-collision",children:"\u041a\u043e\u043b\u043b\u0438\u0437\u0438\u044f \u0438\u043c\u0435\u043d"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u041f\u043b\u043e\u0445\u043e:"})," \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u044f \u0438\u043c\u0435\u043d"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="features/auth-form/index.ts"',children:'export { Form } from "./ui"\nexport * as model from "./model"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="features/post-form/index.ts"',children:'export { Form } from "./ui"\nexport * as model from "./model"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:'- import { Form, model } from "features/auth-form"\n- import { Form, model } from "features/post-form"\n'})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u0425\u043e\u0440\u043e\u0448\u043e:"})," \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0430 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="features/auth-form/index.ts"',children:'export { Form as AuthForm } from "./ui"\nexport * as authFormModel from "./model"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="features/post-form/index.ts"',children:'export { Form as PostForm } from "./ui"\nexport * as postFormModel from "./model"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:'+ import { AuthForm, authFormModel } from "features/auth-form"\n+ import { PostForm, postFormModel } from "features/post-form"\n'})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h5,{id:"flexible-use",children:"\u0413\u0438\u0431\u043a\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u041f\u043b\u043e\u0445\u043e:"}),' \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c, \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c, "\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c" \u0444\u0438\u0447\u0438 \u0441\u0442\u0440\u0430\u0434\u0430\u0435\u0442']}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:'- import { storeActionUpdateUserDetails } from "features/auth-form"\n- dispatch(storeActionUpdateUserDetails(...))\n'})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u0425\u043e\u0440\u043e\u0448\u043e:"}),' "\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c" \u0444\u0438\u0447\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0443\u0436\u043d\u044b\u043c \u0432\u0435\u0449\u0430\u043c \u0438\u0442\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u0438 \u0433\u0438\u0431\u043a\u043e']}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:'+ import { authFormModel } from "features/auth-form"\n+ dispatch(authFormModel.effects.updateUserDetails(...)) // redux\n+ authFormModel.updateUserDetailsFx(...) // effector\n'})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h5,{id:"resolution-of-collisions",children:"\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0439"}),"\n",(0,r.jsx)(n.p,{children:"\u041a\u043e\u043b\u043b\u0438\u0437\u0438\u044f \u0438\u043c\u0435\u043d \u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0435\u0448\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0430 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u041f\u043b\u043e\u0445\u043e:"})," \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u044f \u0438\u043c\u0435\u043d \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="features/auth-form/index.ts"',children:'export { AuthForm } from "./ui"\nexport { authFormActions, authFormReducer } from "model"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="features/post-form/index.ts"',children:'export { PostForm } from "./ui"\nexport { postFormActions, postFormReducer } from "model"\n'})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\u0425\u043e\u0440\u043e\u0448\u043e:"})," \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u044f \u0438\u043c\u0435\u043d \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="features/auth-form/model.ts"',children:"export { actions, reducer }\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="features/auth-form/index.ts"',children:'export { Form as AuthForm } from "./ui"\nexport * as authFormModel from "./model"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="features/post-form/model.ts"',children:"export { actions, reducer }\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="features/post-form/index.ts"',children:'export { Form as PostForm } from "./ui"\nexport * as postFormModel from "./model"\n'})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"about-re-exports",children:"\u041e \u0440\u0435\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430\u0445"}),"\n",(0,r.jsxs)(n.p,{children:["\u0412 JavaScript \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043c\u043e\u0434\u0443\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0438\u0437\u043d\u0443\u0442\u0440\u0438 \u043c\u043e\u0434\u0443\u043b\u044f \u0432 ",(0,r.jsx)(n.code,{children:"index"})," \u0444\u0430\u0439\u043b\u0435:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="**/**/index.ts"',children:'export { Form as AuthForm } from "./ui"\nexport * as authModel from "./model"\n'})}),"\n",(0,r.jsx)(n.h3,{id:"disadvantages",children:"\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["\u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0431\u0430\u043d\u0434\u043b\u0435\u0440\u043e\u0432 \u0438\u0437-\u0437\u0430 \u0440\u0435\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u043e\u0432 ",(0,r.jsx)(n.strong,{children:"\u0445\u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u043e\u0434-\u0441\u043f\u043b\u0438\u0442\u0442\u0438\u043d\u0433"}),", \u0442.\u043a. ",(0,r.jsx)(n.a,{href:"https://webpack.js.org/guides/tree-shaking/",children:"tree-shaking"})," \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0434\u0443\u043b\u044c \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u043d\u043e \u043d\u0435 \u0435\u0433\u043e \u0447\u0430\u0441\u0442\u044c."]}),"\n",(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u043c\u043f\u043e\u0440\u0442 ",(0,r.jsx)(n.code,{children:"authModel"})," \u0432 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 ",(0,r.jsx)(n.code,{children:"AuthForm"})," \u0432 \u0447\u0430\u043d\u043a \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0442\u0430\u043c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:'\u041a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0447\u0430\u043d\u043a\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0434\u043e\u0440\u043e\u0436\u0435, \u0442.\u043a. \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u0441\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0432 \u043d\u0435\u043c, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0442\u0435, \u0447\u0442\u043e \u043f\u043e\u043f\u0430\u043b\u0438 \u0432 \u0431\u0430\u043d\u0434\u043b "\u0437\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e"'}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"possible-solutions",children:"\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0443\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"webpack"})," \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u044b-\u0440\u0435\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u044b \u043a\u0430\u043a ",(0,r.jsx)(n.a,{href:"https://webpack.js.org/guides/tree-shaking/#mark-the-file-as-side-effect-free",children:(0,r.jsx)(n.strong,{children:"side effects free"})})," - \u044d\u0442\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 ",(0,r.jsx)(n.code,{children:"webpack"})," \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0442\u0430\u043a\u0438\u043c \u0444\u0430\u0439\u043b\u043e\u043c"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"see-also",children:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/feature-sliced/documentation/discussions/41",children:"(\u041e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435) Public API \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsxs)(n.a,{href:"https://ru.wikipedia.org/wiki/SOLID",children:["\u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b ",(0,r.jsx)(n.strong,{children:"SOLID"})]})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsxs)(n.a,{href:"https://ru.wikipedia.org/wiki/GRASP",children:["\u041f\u0430\u0442\u0442\u0435\u0440\u043d\u044b ",(0,r.jsx)(n.strong,{children:"GRASP"})]})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},5710:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>o});var r=s(758);const i={},l=r.createContext(i);function t(e){const n=r.useContext(l);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:t(e.components),r.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/ru/assets/js/3b64669e.bda8cf69.js b/ru/assets/js/3b64669e.5d480651.js similarity index 99% rename from ru/assets/js/3b64669e.bda8cf69.js rename to ru/assets/js/3b64669e.5d480651.js index 17bbcac275..e80914d119 100644 --- a/ru/assets/js/3b64669e.bda8cf69.js +++ b/ru/assets/js/3b64669e.5d480651.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[6400],{4014:(n,e,t)=>{t.r(e),t.d(e,{assets:()=>a,contentTitle:()=>o,default:()=>l,frontMatter:()=>i,metadata:()=>d,toc:()=>u});var s=t(6070),r=t(5710);const i={sidebar_position:3,sidebar_label:"\u0422\u0438\u043f\u044b \u0437\u043d\u0430\u043d\u0438\u0439"},o="\u0422\u0438\u043f\u044b \u0437\u043d\u0430\u043d\u0438\u0439 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435",d={id:"about/understanding/knowledge-types",title:"\u0422\u0438\u043f\u044b \u0437\u043d\u0430\u043d\u0438\u0439 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435",description:'\u0412 \u043b\u044e\u0431\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 "\u0442\u0438\u043f\u044b \u0437\u043d\u0430\u043d\u0438\u0439":',source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/about/understanding/knowledge-types.md",sourceDirName:"about/understanding",slug:"/about/understanding/knowledge-types",permalink:"/ru/docs/about/understanding/knowledge-types",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/about/understanding/knowledge-types.md",tags:[],version:"current",lastUpdatedAt:1727030144e3,sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_label:"\u0422\u0438\u043f\u044b \u0437\u043d\u0430\u043d\u0438\u0439"},sidebar:"aboutSidebar",previous:{title:"\u041f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0435\u0439",permalink:"/ru/docs/about/understanding/needs-driven"},next:{title:"\u041d\u0435\u0439\u043c\u0438\u043d\u0433",permalink:"/ru/docs/about/understanding/naming"}},a={},u=[{value:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435",id:"see-also",level:2}];function c(n){const e={a:"a",admonition:"admonition",br:"br",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...n.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(e.header,{children:(0,s.jsx)(e.h1,{id:"\u0442\u0438\u043f\u044b-\u0437\u043d\u0430\u043d\u0438\u0439-\u0432-\u043f\u0440\u043e\u0435\u043a\u0442\u0435",children:"\u0422\u0438\u043f\u044b \u0437\u043d\u0430\u043d\u0438\u0439 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435"})}),"\n",(0,s.jsx)(e.p,{children:'\u0412 \u043b\u044e\u0431\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 "\u0442\u0438\u043f\u044b \u0437\u043d\u0430\u043d\u0438\u0439":'}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"\u0424\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u043d\u0438\u044f"}),(0,s.jsx)(e.br,{}),"\n","\u0417\u043d\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b, computer science, \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0435\u0433\u043e API."]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"\u0422\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0442\u0435\u043a"}),(0,s.jsx)(e.br,{}),"\n","\u0417\u043d\u0430\u043d\u0438\u044f \u043e \u043d\u0430\u0431\u043e\u0440\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044f\u0437\u044b\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438."]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"\u041f\u0440\u043e\u0435\u043a\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u043d\u0438\u044f"}),(0,s.jsx)(e.br,{}),"\n","\u0417\u043d\u0430\u043d\u0438\u044f, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0432\u043d\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u042d\u0442\u0438 \u0437\u043d\u0430\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u043d\u043e\u0432\u044b\u043c \u0447\u043b\u0435\u043d\u0430\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0447\u0442\u043e\u0431 \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u043a\u043b\u0430\u0434."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.admonition,{type:"note",children:(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Feature-Sliced Design"}),' \u043f\u0440\u0438\u0437\u0432\u0430\u043d \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 "\u043f\u0440\u043e\u0435\u043a\u0442\u043d\u044b\u0445 \u0437\u043d\u0430\u043d\u0438\u0439", \u0432\u0437\u044f\u0442\u044c \u043d\u0430 \u0441\u0435\u0431\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0438 \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433 \u043d\u043e\u0432\u044b\u0445 \u0447\u043b\u0435\u043d\u043e\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.']})}),"\n",(0,s.jsx)(e.h2,{id:"see-also",children:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.a,{href:"https://youtu.be/4xyb_tA-uw0?t=249",children:"(\u0412\u0438\u0434\u0435\u043e) \u0418\u043b\u044c\u044f \u041a\u043b\u0438\u043c\u043e\u0432 \u2014 \u041e \u0442\u0438\u043f\u0430\u0445 \u0437\u043d\u0430\u043d\u0438\u0439"})}),"\n"]})]})}function l(n={}){const{wrapper:e}={...(0,r.R)(),...n.components};return e?(0,s.jsx)(e,{...n,children:(0,s.jsx)(c,{...n})}):c(n)}},5710:(n,e,t)=>{t.d(e,{R:()=>o,x:()=>d});var s=t(758);const r={},i=s.createContext(r);function o(n){const e=s.useContext(i);return s.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function d(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(r):n.components||r:o(n.components),s.createElement(i.Provider,{value:e},n.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[6400],{4014:(n,e,t)=>{t.r(e),t.d(e,{assets:()=>a,contentTitle:()=>o,default:()=>l,frontMatter:()=>i,metadata:()=>d,toc:()=>u});var s=t(6070),r=t(5710);const i={sidebar_position:3,sidebar_label:"\u0422\u0438\u043f\u044b \u0437\u043d\u0430\u043d\u0438\u0439"},o="\u0422\u0438\u043f\u044b \u0437\u043d\u0430\u043d\u0438\u0439 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435",d={id:"about/understanding/knowledge-types",title:"\u0422\u0438\u043f\u044b \u0437\u043d\u0430\u043d\u0438\u0439 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435",description:'\u0412 \u043b\u044e\u0431\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 "\u0442\u0438\u043f\u044b \u0437\u043d\u0430\u043d\u0438\u0439":',source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/about/understanding/knowledge-types.md",sourceDirName:"about/understanding",slug:"/about/understanding/knowledge-types",permalink:"/ru/docs/about/understanding/knowledge-types",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/about/understanding/knowledge-types.md",tags:[],version:"current",lastUpdatedAt:1727540389e3,sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_label:"\u0422\u0438\u043f\u044b \u0437\u043d\u0430\u043d\u0438\u0439"},sidebar:"aboutSidebar",previous:{title:"\u041f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0435\u0439",permalink:"/ru/docs/about/understanding/needs-driven"},next:{title:"\u041d\u0435\u0439\u043c\u0438\u043d\u0433",permalink:"/ru/docs/about/understanding/naming"}},a={},u=[{value:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435",id:"see-also",level:2}];function c(n){const e={a:"a",admonition:"admonition",br:"br",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...n.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(e.header,{children:(0,s.jsx)(e.h1,{id:"\u0442\u0438\u043f\u044b-\u0437\u043d\u0430\u043d\u0438\u0439-\u0432-\u043f\u0440\u043e\u0435\u043a\u0442\u0435",children:"\u0422\u0438\u043f\u044b \u0437\u043d\u0430\u043d\u0438\u0439 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435"})}),"\n",(0,s.jsx)(e.p,{children:'\u0412 \u043b\u044e\u0431\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 "\u0442\u0438\u043f\u044b \u0437\u043d\u0430\u043d\u0438\u0439":'}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"\u0424\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u043d\u0438\u044f"}),(0,s.jsx)(e.br,{}),"\n","\u0417\u043d\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b, computer science, \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0435\u0433\u043e API."]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"\u0422\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0442\u0435\u043a"}),(0,s.jsx)(e.br,{}),"\n","\u0417\u043d\u0430\u043d\u0438\u044f \u043e \u043d\u0430\u0431\u043e\u0440\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044f\u0437\u044b\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438."]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"\u041f\u0440\u043e\u0435\u043a\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u043d\u0438\u044f"}),(0,s.jsx)(e.br,{}),"\n","\u0417\u043d\u0430\u043d\u0438\u044f, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0432\u043d\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u042d\u0442\u0438 \u0437\u043d\u0430\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u043d\u043e\u0432\u044b\u043c \u0447\u043b\u0435\u043d\u0430\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0447\u0442\u043e\u0431 \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u043a\u043b\u0430\u0434."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.admonition,{type:"note",children:(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Feature-Sliced Design"}),' \u043f\u0440\u0438\u0437\u0432\u0430\u043d \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 "\u043f\u0440\u043e\u0435\u043a\u0442\u043d\u044b\u0445 \u0437\u043d\u0430\u043d\u0438\u0439", \u0432\u0437\u044f\u0442\u044c \u043d\u0430 \u0441\u0435\u0431\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0438 \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433 \u043d\u043e\u0432\u044b\u0445 \u0447\u043b\u0435\u043d\u043e\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.']})}),"\n",(0,s.jsx)(e.h2,{id:"see-also",children:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.a,{href:"https://youtu.be/4xyb_tA-uw0?t=249",children:"(\u0412\u0438\u0434\u0435\u043e) \u0418\u043b\u044c\u044f \u041a\u043b\u0438\u043c\u043e\u0432 \u2014 \u041e \u0442\u0438\u043f\u0430\u0445 \u0437\u043d\u0430\u043d\u0438\u0439"})}),"\n"]})]})}function l(n={}){const{wrapper:e}={...(0,r.R)(),...n.components};return e?(0,s.jsx)(e,{...n,children:(0,s.jsx)(c,{...n})}):c(n)}},5710:(n,e,t)=>{t.d(e,{R:()=>o,x:()=>d});var s=t(758);const r={},i=s.createContext(r);function o(n){const e=s.useContext(i);return s.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function d(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(r):n.components||r:o(n.components),s.createElement(i.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/ru/assets/js/44775544.4d30a0f8.js b/ru/assets/js/44775544.87f578b3.js similarity index 99% rename from ru/assets/js/44775544.4d30a0f8.js rename to ru/assets/js/44775544.87f578b3.js index f2da2e6c4d..3411e28b68 100644 --- a/ru/assets/js/44775544.4d30a0f8.js +++ b/ru/assets/js/44775544.87f578b3.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[447],{4284:(e,n,i)=>{i.d(n,{Ay:()=>o,RM:()=>d});var s=i(6070),t=i(5710),r=(i(758),i(8886)),l=i(316);const c=e=>{let{ticket:n}=e;const i=`https://github.com/feature-sliced/documentation/issues/${n}`;return(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{children:(0,l.T)({id:"shared.wip.title"})}),(0,s.jsx)("p",{children:(0,l.T)({id:"shared.wip.subtitle"})}),(0,s.jsxs)("ul",{children:[(0,s.jsxs)("li",{children:[(0,l.T)({id:"shared.wip.var.feedback.base"}),(0,s.jsx)(r.A,{to:i,children:(0,l.T)({id:"shared.wip.var.feedback.link"})})]}),(0,s.jsxs)("li",{children:[(0,l.T)({id:"shared.wip.var.material.base"}),(0,s.jsx)(r.A,{to:"https://t.me/feature_sliced",children:(0,l.T)({id:"shared.wip.var.material.link"})})]}),(0,s.jsxs)("li",{children:[(0,l.T)({id:"shared.wip.var.contribute.base"}),(0,s.jsx)(r.A,{to:"https://github.com/feature-sliced/documentation/blob/master/CONTRIBUTING.md",children:(0,l.T)({id:"shared.wip.var.contribute.link"})})]})]}),(0,s.jsx)("br",{}),(0,s.jsx)("p",{children:(0,s.jsx)("i",{children:"\ud83c\udf70 Stay tuned!"})})]})},d=[];function a(e){const n={admonition:"admonition",...(0,t.R)(),...e.components};return(0,s.jsx)(n.admonition,{title:"WIP",type:"caution",children:(0,s.jsx)(c,{ticket:e.ticket})})}function o(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},6429:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>u,frontMatter:()=>l,metadata:()=>d,toc:()=>o});var s=i(6070),t=i(5710),r=i(4284);const l={sidebar_class_name:"sidebar-item--wip",sidebar_position:3},c="\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b",d={id:"about/alternatives",title:"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b",description:"\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/about/alternatives.mdx",sourceDirName:"about",slug:"/about/alternatives",permalink:"/ru/docs/about/alternatives",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/about/alternatives.mdx",tags:[],version:"current",lastUpdatedAt:1727030144e3,sidebarPosition:3,frontMatter:{sidebar_class_name:"sidebar-item--wip",sidebar_position:3},sidebar:"aboutSidebar",previous:{title:"\u041c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f",permalink:"/ru/docs/about/motivation"},next:{title:"\u041e\u0431 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435",permalink:"/ru/docs/about/understanding/architecture"}},a={},o=[...r.RM,{value:"Big Ball of Mud",id:"big-ball-of-mud",level:2},...r.RM,{value:"Smart & Dumb components",id:"smart--dumb-components",level:2},...r.RM,{value:"Design Principles",id:"design-principles",level:2},...r.RM,{value:"DDD",id:"ddd",level:2},...r.RM,{value:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435",id:"see-also",level:2},{value:"Clean Architecture",id:"clean-architecture",level:2},...r.RM,{value:"Frameworks",id:"frameworks",level:2},...r.RM,{value:"Atomic Design",id:"atomic-design",level:2},{value:"\u0427\u0442\u043e \u044d\u0442\u043e?",id:"\u0447\u0442\u043e-\u044d\u0442\u043e",level:3},{value:"\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u043e \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0435",id:"\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u044c-\u0432\u043e-\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0435",level:3},{value:"\u041a\u0430\u043a \u043e\u043d\u043e \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442\u0441\u044f \u0441 FSD?",id:"\u043a\u0430\u043a-\u043e\u043d\u043e-\u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442\u0441\u044f-\u0441-fsd",level:3},{value:"Feature Driven",id:"feature-driven",level:2},...r.RM];function h(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b",children:"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b"})}),"\n",(0,s.jsx)(r.Ay,{ticket:"62"}),"\n",(0,s.jsx)(n.p,{children:"\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432"}),"\n",(0,s.jsx)(n.h2,{id:"big-ball-of-mud",children:"Big Ball of Mud"}),"\n",(0,s.jsx)(r.Ay,{ticket:"258"}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"\u0427\u0442\u043e \u044d\u0442\u043e; \u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043e; \u041a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b; \u041a\u0430\u043a \u0431\u044b\u0442\u044c; \u0418 \u043a\u0430\u043a \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0432 \u044d\u0442\u043e\u043c FSD"}),"\n"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://oleg008.medium.com/last-words-on-ui-architecture-before-an-ai-takes-over-468c78f18f0d",children:"(\u0421\u0442\u0430\u0442\u044c\u044f) Oleg Isonen - Last words on UI architecture before an AI takes over"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://youtu.be/gna4Ynz1YNI",children:"(\u0414\u043e\u043a\u043b\u0430\u0434) \u042e\u043b\u0438\u044f \u041d\u0438\u043a\u043e\u043b\u0430\u0435\u0432\u0430, iSpring - Big Ball of Mud \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u044b \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438\u0441\u044c"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://thedomaindrivendesign.io/big-ball-of-mud/",children:"(\u0421\u0442\u0430\u0442\u044c\u044f) DDD - Big Ball of mud"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"smart--dumb-components",children:"Smart & Dumb components"}),"\n",(0,s.jsx)(r.Ay,{ticket:"214"}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"\u041e \u043f\u043e\u0434\u0445\u043e\u0434\u0435; \u041e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0435; \u043f\u043e\u0437\u0438\u0446\u0438\u044f FSD"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"\u041f\u0440\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u043e\u0441\u0442\u044c, \u043f\u0440\u043e \u043d\u043e\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438"}),"\n",(0,s.jsx)(n.p,{children:"\u041f\u043e\u0447\u0435\u043c\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u043e/\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 - \u0437\u043b\u043e"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0",children:"(\u0421\u0442\u0430\u0442\u044c\u044f) Dan Abramov - Presentational and Container Components (TLDR: deprecated)"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"design-principles",children:"Design Principles"}),"\n",(0,s.jsx)(r.Ay,{ticket:"59"}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"\u041f\u0440\u043e \u0447\u0442\u043e \u0440\u0435\u0447\u044c; \u043f\u043e\u0437\u0438\u0446\u0438\u044f FSD"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"SOLID, GRASP, KISS, YAGNI, ... - \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u043f\u043b\u043e\u0445\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432\u043c\u0435\u0441\u0442\u0435 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435"}),"\n",(0,s.jsx)(n.p,{children:"\u0418 \u043a\u0430\u043a \u043e\u043d\u0430 \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u044d\u0442\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://youtu.be/SnzPAr_FJ7w?t=380",children:"(\u0414\u043e\u043a\u043b\u0430\u0434) \u0418\u043b\u044c\u044f \u0410\u0437\u0438\u043d - Feature-Sliced Design (\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043f\u0440\u043e \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f)"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"ddd",children:"DDD"}),"\n",(0,s.jsx)(r.Ay,{ticket:"1"}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"\u041e \u043f\u043e\u0434\u0445\u043e\u0434\u0435; \u041f\u043e\u0447\u0435\u043c\u0443 \u043f\u043b\u043e\u0445\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"\u0412 \u0447\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0438\u0435, \u0447\u0435\u043c \u0443\u043b\u0443\u0447\u0448\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u044c, \u0433\u0434\u0435 \u043f\u0435\u0440\u0435\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438"}),"\n",(0,s.jsx)(n.h2,{id:"see-also",children:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://herbertograca.com/2017/11/16/explicit-architecture-01-ddd-hexagonal-onion-clean-cqrs-how-i-put-it-all-together/",children:"(\u0421\u0442\u0430\u0442\u044c\u044f) DDD, Hexagonal, Onion, Clean, CQRS, \u2026 How I put it all together"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://youtu.be/SnzPAr_FJ7w?t=528",children:"(\u0414\u043e\u043a\u043b\u0430\u0434) \u0418\u043b\u044c\u044f \u0410\u0437\u0438\u043d - Feature-Sliced Design (\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043f\u0440\u043e Clean Architecture, DDD)"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"clean-architecture",children:"Clean Architecture"}),"\n",(0,s.jsx)(r.Ay,{ticket:"165"}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"\u041e \u043f\u043e\u0434\u0445\u043e\u0434\u0435; \u041e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0435; \u043f\u043e\u0437\u0438\u0446\u0438\u044f FSD"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"\u0412 \u0447\u0435\u043c \u0441\u0445\u043e\u0436\u0438 (\u043c\u043d\u043e\u0433\u0438\u043c), \u0447\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://t.me/feature_sliced/3897",children:"(\u0422\u0440\u0435\u0434) \u041f\u0440\u043e use-case/interactor \u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://t.me/feature_sliced/4592",children:"(\u0422\u0440\u0435\u0434) \u041f\u0440\u043e DI \u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://bespoyasov.ru/blog/clean-architecture-on-frontend/",children:"(\u0421\u0442\u0430\u0442\u044c\u044f) \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u0411\u0435\u0441\u043f\u043e\u044f\u0441\u043e\u0432 - \u0427\u0438\u0441\u0442\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043d\u0430 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0435"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://herbertograca.com/2017/11/16/explicit-architecture-01-ddd-hexagonal-onion-clean-cqrs-how-i-put-it-all-together/",children:"(\u0421\u0442\u0430\u0442\u044c\u044f) DDD, Hexagonal, Onion, Clean, CQRS, \u2026 How I put it all together"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://youtu.be/SnzPAr_FJ7w?t=528",children:"(\u0414\u043e\u043a\u043b\u0430\u0434) \u0418\u043b\u044c\u044f \u0410\u0437\u0438\u043d - Feature-Sliced Design (\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043f\u0440\u043e Clean Architecture, DDD)"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://habr.com/ru/company/mobileup/blog/335382/",children:"(\u0421\u0442\u0430\u0442\u044c\u044f) \u0417\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u044f Clean Architecture"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"frameworks",children:"Frameworks"}),"\n",(0,s.jsx)(r.Ay,{ticket:"58"}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"\u041e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0435; \u041f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u043d\u0435 \u0440\u0435\u0448\u0430\u044e\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443; \u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043d\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434; \u043f\u043e\u0437\u0438\u0446\u0438\u044f FSD"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Framework-agnostic, conventional-\u043f\u043e\u0434\u0445\u043e\u0434"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/docs/about/motivation",children:"(\u0421\u0442\u0430\u0442\u044c\u044f) \u041f\u0440\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 (\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043f\u0440\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438)"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://t.me/feature_sliced/3867",children:"(\u0422\u0440\u0435\u0434) \u041f\u0440\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"atomic-design",children:"Atomic Design"}),"\n",(0,s.jsx)(n.h3,{id:"\u0447\u0442\u043e-\u044d\u0442\u043e",children:"\u0427\u0442\u043e \u044d\u0442\u043e?"}),"\n",(0,s.jsx)(n.p,{children:"\u0412 Atomic Design \u0441\u0444\u0435\u0440\u0430 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0430 \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u043b\u043e\u0438.\xa0"}),"\n",(0,s.jsxs)(n.p,{children:["Atomic Design \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 ",(0,s.jsx)(n.strong,{children:"5 \u0441\u043b\u043e\u0435\u0432"})," (\u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437):"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"pages"})," - \u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0441\u043b\u043e\u044e ",(0,s.jsx)(n.code,{children:"pages"})," \u0432 FSD."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"templates"})," - \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0437\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0431\u0435\u0437 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043a \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0443."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"organisms"})," - \u041c\u043e\u0434\u0443\u043b\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0438\u0437 \u043c\u043e\u043b\u0435\u043a\u0443\u043b, \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0431\u0438\u0437\u043d\u0435\u0441 \u043b\u043e\u0433\u0438\u043a\u043e\u0439."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"moleculs"})," - \u0411\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0435\u0442 \u0431\u0438\u0437\u043d\u0435\u0441 \u043b\u043e\u0433\u0438\u043a\u0438."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"atoms"})," - UI \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0431\u0435\u0437 \u0431\u0438\u0437\u043d\u0435\u0441 \u043b\u043e\u0433\u0438\u043a\u0438."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["\u041c\u043e\u0434\u0443\u043b\u0438 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0441\u043b\u043e\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u043c\u0438\u0441\u044f \u043d\u0430 \u0441\u043b\u043e\u044f\u0445 \u043d\u0438\u0436\u0435, \u043a\u0430\u043a \u0432 FSD.\n\u0422\u043e \u0435\u0441\u0442\u044c, \u043c\u043e\u043b\u0435\u043a\u0443\u043b\u044b \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u0438\u0437 \u0430\u0442\u043e\u043c\u043e\u0432, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043c\u044b \u0438\u0437 \u043c\u043e\u043b\u0435\u043a\u0443\u043b, \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0438\u0437 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043c\u043e\u0432, \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432.\n\u0422\u0430\u043a\u0436\u0435 Atomic Design \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 ",(0,s.jsx)(n.strong,{children:"Public API"})," \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0434\u043b\u044f \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438."]}),"\n",(0,s.jsx)(n.h3,{id:"\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u044c-\u0432\u043e-\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0435",children:"\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u043e \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0435"}),"\n",(0,s.jsx)(n.p,{children:"Atomic Design \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445. Atomic Design \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0435\u0435 \u0441\u0440\u0435\u0434\u0438 \u0432\u0435\u0431-\u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u043e\u0432,\xa0\n\u043d\u0435\u0436\u0435\u043b\u0438 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435. \u0412\u0435\u0431-\u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u044b \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Atomic Design \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0438 \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u0438\u0437\u0430\u0439\u043d\u043e\u0432.\xa0\n\u0412 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 Atomic Design \u0447\u0430\u0441\u0442\u043e \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u044f\u043c\u0438."}),"\n",(0,s.jsx)(n.p,{children:"\u041e\u0434\u043d\u0430\u043a\u043e, \u0442\u0430\u043a \u043a\u0430\u043a Atomic Design \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 UI \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u0445 \u0438 \u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438\n\u0431\u0438\u0437\u043d\u0435\u0441 \u043b\u043e\u0433\u0438\u043a\u0438 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b."}),"\n",(0,s.jsx)(n.p,{children:"\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e Atomic Design \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u0447\u0435\u0442\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0438,\xa0\n\u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e \u043f\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c \u0438 \u0443\u0440\u043e\u0432\u043d\u044f\u043c, \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.\xa0\n\u0411\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0440\u0430\u0437\u043c\u044b\u0442\u0430, \u0447\u0442\u043e \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u044f\u0435\u0442\xa0\u0447\u0435\u0442\u043a\u043e\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u043e\u0434 \u043c\u0435\u043d\u0435\u0435\n\u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u043c \u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u043c."}),"\n",(0,s.jsx)(n.h3,{id:"\u043a\u0430\u043a-\u043e\u043d\u043e-\u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442\u0441\u044f-\u0441-fsd",children:"\u041a\u0430\u043a \u043e\u043d\u043e \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442\u0441\u044f \u0441 FSD?"}),"\n",(0,s.jsxs)(n.p,{children:["\u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 FSD \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b Atomic Design \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u044b \u0434\u043b\u044f\xa0\n\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0433\u0438\u0431\u043a\u0438\u0445 \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0445 UI \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. \u0421\u043b\u043e\u0438 ",(0,s.jsx)(n.code,{children:"atoms"})," \u0438 ",(0,s.jsx)(n.code,{children:"molecules"})," \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\xa0\n",(0,s.jsx)(n.code,{children:"shared/ui"})," \u0432 FSD, \u0447\u0442\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 UI \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.\xa0"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",children:"\u251c\u2500\u2500 shared\n\u2502\xa0 \xa0\u251c\u2500\u2500 ui\xa0\n\u2502\xa0 \xa0\u2502\xa0 \xa0\u251c\u2500\u2500 atoms\n\u2502\xa0 \xa0\u2502\xa0 \xa0\u251c\u2500\u2500 molecules\n\u2502\xa0 \xa0...\n"})}),"\n",(0,s.jsx)(n.p,{children:"\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 FSD \u0438 Atomic Design \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0431\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 \u0441\u0442\u0440\u0435\u043c\u044f\u0442\u0441\u044f \u043a \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e,\xa0\n\u043d\u043e \u0430\u043a\u0446\u0435\u043d\u0442\u0438\u0440\u0443\u044e\u0442 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0430\u0441\u043f\u0435\u043a\u0442\u0430\u0445. Atomic Design \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0430 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b\xa0\n\u0438 \u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e. FSD \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0438 \u0438\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0438."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://atomicdesign.bradfrost.com/table-of-contents/",children:"\u041c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u044f Atomic Design"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://t.me/feature_sliced/1653",children:"(\u0422\u0440\u0435\u0434) \u041f\u0440\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u044c \u0432 shared/ui"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://youtu.be/Yi-A20x2dcA",children:"(\u0412\u0438\u0434\u0435\u043e) \u041a\u0440\u0430\u0442\u043a\u043e \u043e Atomic Design"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://youtu.be/SnzPAr_FJ7w?t=587",children:"(\u0414\u043e\u043a\u043b\u0430\u0434) \u0418\u043b\u044c\u044f \u0410\u0437\u0438\u043d - Feature-Sliced Design (\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043f\u0440\u043e Atomic Design)"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"feature-driven",children:"Feature Driven"}),"\n",(0,s.jsx)(r.Ay,{ticket:"219"}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"\u041e \u043f\u043e\u0434\u0445\u043e\u0434\u0435; \u041e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0435; \u043f\u043e\u0437\u0438\u0446\u0438\u044f FSD"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"\u041f\u0440\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c, \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://youtu.be/BWAeYuWFHhs",children:"(\u0414\u043e\u043a\u043b\u0430\u0434) Oleg Isonen - Feature Driven Architecture"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/feature-sliced/documentation/tree/rc/feature-driven",children:"Feature Driven - \u041a\u0440\u0430\u0442\u043a\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f (\u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f FSD)"})}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},5710:(e,n,i)=>{i.d(n,{R:()=>l,x:()=>c});var s=i(758);const t={},r=s.createContext(t);function l(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[447],{4284:(e,n,i)=>{i.d(n,{Ay:()=>o,RM:()=>d});var s=i(6070),t=i(5710),r=(i(758),i(8886)),l=i(316);const c=e=>{let{ticket:n}=e;const i=`https://github.com/feature-sliced/documentation/issues/${n}`;return(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{children:(0,l.T)({id:"shared.wip.title"})}),(0,s.jsx)("p",{children:(0,l.T)({id:"shared.wip.subtitle"})}),(0,s.jsxs)("ul",{children:[(0,s.jsxs)("li",{children:[(0,l.T)({id:"shared.wip.var.feedback.base"}),(0,s.jsx)(r.A,{to:i,children:(0,l.T)({id:"shared.wip.var.feedback.link"})})]}),(0,s.jsxs)("li",{children:[(0,l.T)({id:"shared.wip.var.material.base"}),(0,s.jsx)(r.A,{to:"https://t.me/feature_sliced",children:(0,l.T)({id:"shared.wip.var.material.link"})})]}),(0,s.jsxs)("li",{children:[(0,l.T)({id:"shared.wip.var.contribute.base"}),(0,s.jsx)(r.A,{to:"https://github.com/feature-sliced/documentation/blob/master/CONTRIBUTING.md",children:(0,l.T)({id:"shared.wip.var.contribute.link"})})]})]}),(0,s.jsx)("br",{}),(0,s.jsx)("p",{children:(0,s.jsx)("i",{children:"\ud83c\udf70 Stay tuned!"})})]})},d=[];function a(e){const n={admonition:"admonition",...(0,t.R)(),...e.components};return(0,s.jsx)(n.admonition,{title:"WIP",type:"caution",children:(0,s.jsx)(c,{ticket:e.ticket})})}function o(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},6429:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>u,frontMatter:()=>l,metadata:()=>d,toc:()=>o});var s=i(6070),t=i(5710),r=i(4284);const l={sidebar_class_name:"sidebar-item--wip",sidebar_position:3},c="\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b",d={id:"about/alternatives",title:"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b",description:"\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/about/alternatives.mdx",sourceDirName:"about",slug:"/about/alternatives",permalink:"/ru/docs/about/alternatives",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/about/alternatives.mdx",tags:[],version:"current",lastUpdatedAt:1727540389e3,sidebarPosition:3,frontMatter:{sidebar_class_name:"sidebar-item--wip",sidebar_position:3},sidebar:"aboutSidebar",previous:{title:"\u041c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f",permalink:"/ru/docs/about/motivation"},next:{title:"\u041e\u0431 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435",permalink:"/ru/docs/about/understanding/architecture"}},a={},o=[...r.RM,{value:"Big Ball of Mud",id:"big-ball-of-mud",level:2},...r.RM,{value:"Smart & Dumb components",id:"smart--dumb-components",level:2},...r.RM,{value:"Design Principles",id:"design-principles",level:2},...r.RM,{value:"DDD",id:"ddd",level:2},...r.RM,{value:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435",id:"see-also",level:2},{value:"Clean Architecture",id:"clean-architecture",level:2},...r.RM,{value:"Frameworks",id:"frameworks",level:2},...r.RM,{value:"Atomic Design",id:"atomic-design",level:2},{value:"\u0427\u0442\u043e \u044d\u0442\u043e?",id:"\u0447\u0442\u043e-\u044d\u0442\u043e",level:3},{value:"\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u043e \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0435",id:"\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u044c-\u0432\u043e-\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0435",level:3},{value:"\u041a\u0430\u043a \u043e\u043d\u043e \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442\u0441\u044f \u0441 FSD?",id:"\u043a\u0430\u043a-\u043e\u043d\u043e-\u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442\u0441\u044f-\u0441-fsd",level:3},{value:"Feature Driven",id:"feature-driven",level:2},...r.RM];function h(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b",children:"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b"})}),"\n",(0,s.jsx)(r.Ay,{ticket:"62"}),"\n",(0,s.jsx)(n.p,{children:"\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432"}),"\n",(0,s.jsx)(n.h2,{id:"big-ball-of-mud",children:"Big Ball of Mud"}),"\n",(0,s.jsx)(r.Ay,{ticket:"258"}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"\u0427\u0442\u043e \u044d\u0442\u043e; \u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043e; \u041a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b; \u041a\u0430\u043a \u0431\u044b\u0442\u044c; \u0418 \u043a\u0430\u043a \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0432 \u044d\u0442\u043e\u043c FSD"}),"\n"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://oleg008.medium.com/last-words-on-ui-architecture-before-an-ai-takes-over-468c78f18f0d",children:"(\u0421\u0442\u0430\u0442\u044c\u044f) Oleg Isonen - Last words on UI architecture before an AI takes over"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://youtu.be/gna4Ynz1YNI",children:"(\u0414\u043e\u043a\u043b\u0430\u0434) \u042e\u043b\u0438\u044f \u041d\u0438\u043a\u043e\u043b\u0430\u0435\u0432\u0430, iSpring - Big Ball of Mud \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u044b \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438\u0441\u044c"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://thedomaindrivendesign.io/big-ball-of-mud/",children:"(\u0421\u0442\u0430\u0442\u044c\u044f) DDD - Big Ball of mud"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"smart--dumb-components",children:"Smart & Dumb components"}),"\n",(0,s.jsx)(r.Ay,{ticket:"214"}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"\u041e \u043f\u043e\u0434\u0445\u043e\u0434\u0435; \u041e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0435; \u043f\u043e\u0437\u0438\u0446\u0438\u044f FSD"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"\u041f\u0440\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u043e\u0441\u0442\u044c, \u043f\u0440\u043e \u043d\u043e\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438"}),"\n",(0,s.jsx)(n.p,{children:"\u041f\u043e\u0447\u0435\u043c\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u043e/\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 - \u0437\u043b\u043e"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0",children:"(\u0421\u0442\u0430\u0442\u044c\u044f) Dan Abramov - Presentational and Container Components (TLDR: deprecated)"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"design-principles",children:"Design Principles"}),"\n",(0,s.jsx)(r.Ay,{ticket:"59"}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"\u041f\u0440\u043e \u0447\u0442\u043e \u0440\u0435\u0447\u044c; \u043f\u043e\u0437\u0438\u0446\u0438\u044f FSD"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"SOLID, GRASP, KISS, YAGNI, ... - \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u043f\u043b\u043e\u0445\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432\u043c\u0435\u0441\u0442\u0435 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435"}),"\n",(0,s.jsx)(n.p,{children:"\u0418 \u043a\u0430\u043a \u043e\u043d\u0430 \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u044d\u0442\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://youtu.be/SnzPAr_FJ7w?t=380",children:"(\u0414\u043e\u043a\u043b\u0430\u0434) \u0418\u043b\u044c\u044f \u0410\u0437\u0438\u043d - Feature-Sliced Design (\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043f\u0440\u043e \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f)"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"ddd",children:"DDD"}),"\n",(0,s.jsx)(r.Ay,{ticket:"1"}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"\u041e \u043f\u043e\u0434\u0445\u043e\u0434\u0435; \u041f\u043e\u0447\u0435\u043c\u0443 \u043f\u043b\u043e\u0445\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"\u0412 \u0447\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0438\u0435, \u0447\u0435\u043c \u0443\u043b\u0443\u0447\u0448\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u044c, \u0433\u0434\u0435 \u043f\u0435\u0440\u0435\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438"}),"\n",(0,s.jsx)(n.h2,{id:"see-also",children:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://herbertograca.com/2017/11/16/explicit-architecture-01-ddd-hexagonal-onion-clean-cqrs-how-i-put-it-all-together/",children:"(\u0421\u0442\u0430\u0442\u044c\u044f) DDD, Hexagonal, Onion, Clean, CQRS, \u2026 How I put it all together"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://youtu.be/SnzPAr_FJ7w?t=528",children:"(\u0414\u043e\u043a\u043b\u0430\u0434) \u0418\u043b\u044c\u044f \u0410\u0437\u0438\u043d - Feature-Sliced Design (\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043f\u0440\u043e Clean Architecture, DDD)"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"clean-architecture",children:"Clean Architecture"}),"\n",(0,s.jsx)(r.Ay,{ticket:"165"}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"\u041e \u043f\u043e\u0434\u0445\u043e\u0434\u0435; \u041e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0435; \u043f\u043e\u0437\u0438\u0446\u0438\u044f FSD"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"\u0412 \u0447\u0435\u043c \u0441\u0445\u043e\u0436\u0438 (\u043c\u043d\u043e\u0433\u0438\u043c), \u0447\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://t.me/feature_sliced/3897",children:"(\u0422\u0440\u0435\u0434) \u041f\u0440\u043e use-case/interactor \u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://t.me/feature_sliced/4592",children:"(\u0422\u0440\u0435\u0434) \u041f\u0440\u043e DI \u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://bespoyasov.ru/blog/clean-architecture-on-frontend/",children:"(\u0421\u0442\u0430\u0442\u044c\u044f) \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u0411\u0435\u0441\u043f\u043e\u044f\u0441\u043e\u0432 - \u0427\u0438\u0441\u0442\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043d\u0430 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0435"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://herbertograca.com/2017/11/16/explicit-architecture-01-ddd-hexagonal-onion-clean-cqrs-how-i-put-it-all-together/",children:"(\u0421\u0442\u0430\u0442\u044c\u044f) DDD, Hexagonal, Onion, Clean, CQRS, \u2026 How I put it all together"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://youtu.be/SnzPAr_FJ7w?t=528",children:"(\u0414\u043e\u043a\u043b\u0430\u0434) \u0418\u043b\u044c\u044f \u0410\u0437\u0438\u043d - Feature-Sliced Design (\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043f\u0440\u043e Clean Architecture, DDD)"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://habr.com/ru/company/mobileup/blog/335382/",children:"(\u0421\u0442\u0430\u0442\u044c\u044f) \u0417\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u044f Clean Architecture"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"frameworks",children:"Frameworks"}),"\n",(0,s.jsx)(r.Ay,{ticket:"58"}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"\u041e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0435; \u041f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u043d\u0435 \u0440\u0435\u0448\u0430\u044e\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443; \u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043d\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434; \u043f\u043e\u0437\u0438\u0446\u0438\u044f FSD"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Framework-agnostic, conventional-\u043f\u043e\u0434\u0445\u043e\u0434"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/docs/about/motivation",children:"(\u0421\u0442\u0430\u0442\u044c\u044f) \u041f\u0440\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 (\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043f\u0440\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438)"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://t.me/feature_sliced/3867",children:"(\u0422\u0440\u0435\u0434) \u041f\u0440\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"atomic-design",children:"Atomic Design"}),"\n",(0,s.jsx)(n.h3,{id:"\u0447\u0442\u043e-\u044d\u0442\u043e",children:"\u0427\u0442\u043e \u044d\u0442\u043e?"}),"\n",(0,s.jsx)(n.p,{children:"\u0412 Atomic Design \u0441\u0444\u0435\u0440\u0430 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0430 \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u043b\u043e\u0438.\xa0"}),"\n",(0,s.jsxs)(n.p,{children:["Atomic Design \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 ",(0,s.jsx)(n.strong,{children:"5 \u0441\u043b\u043e\u0435\u0432"})," (\u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437):"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"pages"})," - \u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0441\u043b\u043e\u044e ",(0,s.jsx)(n.code,{children:"pages"})," \u0432 FSD."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"templates"})," - \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0437\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0431\u0435\u0437 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043a \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0443."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"organisms"})," - \u041c\u043e\u0434\u0443\u043b\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0438\u0437 \u043c\u043e\u043b\u0435\u043a\u0443\u043b, \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0431\u0438\u0437\u043d\u0435\u0441 \u043b\u043e\u0433\u0438\u043a\u043e\u0439."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"moleculs"})," - \u0411\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0435\u0442 \u0431\u0438\u0437\u043d\u0435\u0441 \u043b\u043e\u0433\u0438\u043a\u0438."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"atoms"})," - UI \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0431\u0435\u0437 \u0431\u0438\u0437\u043d\u0435\u0441 \u043b\u043e\u0433\u0438\u043a\u0438."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["\u041c\u043e\u0434\u0443\u043b\u0438 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0441\u043b\u043e\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u043c\u0438\u0441\u044f \u043d\u0430 \u0441\u043b\u043e\u044f\u0445 \u043d\u0438\u0436\u0435, \u043a\u0430\u043a \u0432 FSD.\n\u0422\u043e \u0435\u0441\u0442\u044c, \u043c\u043e\u043b\u0435\u043a\u0443\u043b\u044b \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u0438\u0437 \u0430\u0442\u043e\u043c\u043e\u0432, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043c\u044b \u0438\u0437 \u043c\u043e\u043b\u0435\u043a\u0443\u043b, \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0438\u0437 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043c\u043e\u0432, \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432.\n\u0422\u0430\u043a\u0436\u0435 Atomic Design \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 ",(0,s.jsx)(n.strong,{children:"Public API"})," \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0434\u043b\u044f \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438."]}),"\n",(0,s.jsx)(n.h3,{id:"\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u044c-\u0432\u043e-\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0435",children:"\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u043e \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0435"}),"\n",(0,s.jsx)(n.p,{children:"Atomic Design \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445. Atomic Design \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0435\u0435 \u0441\u0440\u0435\u0434\u0438 \u0432\u0435\u0431-\u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u043e\u0432,\xa0\n\u043d\u0435\u0436\u0435\u043b\u0438 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435. \u0412\u0435\u0431-\u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u044b \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Atomic Design \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0438 \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u0438\u0437\u0430\u0439\u043d\u043e\u0432.\xa0\n\u0412 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 Atomic Design \u0447\u0430\u0441\u0442\u043e \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u044f\u043c\u0438."}),"\n",(0,s.jsx)(n.p,{children:"\u041e\u0434\u043d\u0430\u043a\u043e, \u0442\u0430\u043a \u043a\u0430\u043a Atomic Design \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 UI \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u0445 \u0438 \u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438\n\u0431\u0438\u0437\u043d\u0435\u0441 \u043b\u043e\u0433\u0438\u043a\u0438 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b."}),"\n",(0,s.jsx)(n.p,{children:"\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e Atomic Design \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u0447\u0435\u0442\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0438,\xa0\n\u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e \u043f\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c \u0438 \u0443\u0440\u043e\u0432\u043d\u044f\u043c, \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.\xa0\n\u0411\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0440\u0430\u0437\u043c\u044b\u0442\u0430, \u0447\u0442\u043e \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u044f\u0435\u0442\xa0\u0447\u0435\u0442\u043a\u043e\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u043e\u0434 \u043c\u0435\u043d\u0435\u0435\n\u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u043c \u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u043c."}),"\n",(0,s.jsx)(n.h3,{id:"\u043a\u0430\u043a-\u043e\u043d\u043e-\u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442\u0441\u044f-\u0441-fsd",children:"\u041a\u0430\u043a \u043e\u043d\u043e \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442\u0441\u044f \u0441 FSD?"}),"\n",(0,s.jsxs)(n.p,{children:["\u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 FSD \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b Atomic Design \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u044b \u0434\u043b\u044f\xa0\n\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0433\u0438\u0431\u043a\u0438\u0445 \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0445 UI \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. \u0421\u043b\u043e\u0438 ",(0,s.jsx)(n.code,{children:"atoms"})," \u0438 ",(0,s.jsx)(n.code,{children:"molecules"})," \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\xa0\n",(0,s.jsx)(n.code,{children:"shared/ui"})," \u0432 FSD, \u0447\u0442\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 UI \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.\xa0"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",children:"\u251c\u2500\u2500 shared\n\u2502\xa0 \xa0\u251c\u2500\u2500 ui\xa0\n\u2502\xa0 \xa0\u2502\xa0 \xa0\u251c\u2500\u2500 atoms\n\u2502\xa0 \xa0\u2502\xa0 \xa0\u251c\u2500\u2500 molecules\n\u2502\xa0 \xa0...\n"})}),"\n",(0,s.jsx)(n.p,{children:"\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 FSD \u0438 Atomic Design \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0431\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 \u0441\u0442\u0440\u0435\u043c\u044f\u0442\u0441\u044f \u043a \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e,\xa0\n\u043d\u043e \u0430\u043a\u0446\u0435\u043d\u0442\u0438\u0440\u0443\u044e\u0442 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0430\u0441\u043f\u0435\u043a\u0442\u0430\u0445. Atomic Design \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0430 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b\xa0\n\u0438 \u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e. FSD \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0438 \u0438\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0438."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://atomicdesign.bradfrost.com/table-of-contents/",children:"\u041c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u044f Atomic Design"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://t.me/feature_sliced/1653",children:"(\u0422\u0440\u0435\u0434) \u041f\u0440\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u044c \u0432 shared/ui"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://youtu.be/Yi-A20x2dcA",children:"(\u0412\u0438\u0434\u0435\u043e) \u041a\u0440\u0430\u0442\u043a\u043e \u043e Atomic Design"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://youtu.be/SnzPAr_FJ7w?t=587",children:"(\u0414\u043e\u043a\u043b\u0430\u0434) \u0418\u043b\u044c\u044f \u0410\u0437\u0438\u043d - Feature-Sliced Design (\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043f\u0440\u043e Atomic Design)"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"feature-driven",children:"Feature Driven"}),"\n",(0,s.jsx)(r.Ay,{ticket:"219"}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"\u041e \u043f\u043e\u0434\u0445\u043e\u0434\u0435; \u041e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0435; \u043f\u043e\u0437\u0438\u0446\u0438\u044f FSD"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"\u041f\u0440\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c, \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://youtu.be/BWAeYuWFHhs",children:"(\u0414\u043e\u043a\u043b\u0430\u0434) Oleg Isonen - Feature Driven Architecture"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/feature-sliced/documentation/tree/rc/feature-driven",children:"Feature Driven - \u041a\u0440\u0430\u0442\u043a\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f (\u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f FSD)"})}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},5710:(e,n,i)=>{i.d(n,{R:()=>l,x:()=>c});var s=i(758);const t={},r=s.createContext(t);function l(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/ru/assets/js/457d5840.bfe179db.js b/ru/assets/js/457d5840.ac38ab4e.js similarity index 99% rename from ru/assets/js/457d5840.bfe179db.js rename to ru/assets/js/457d5840.ac38ab4e.js index 773bf758be..86c134de91 100644 --- a/ru/assets/js/457d5840.bfe179db.js +++ b/ru/assets/js/457d5840.ac38ab4e.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[6744],{3575:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>t,contentTitle:()=>d,default:()=>j,frontMatter:()=>l,metadata:()=>c,toc:()=>h});var i=n(6070),r=n(5710);const l={sidebar_position:1,pagination_next:"reference/slices-segments"},d="\u0421\u043b\u043e\u0438",c={id:"reference/layers",title:"\u0421\u043b\u043e\u0438",description:"\u0421\u043b\u043e\u0438 - \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u0432 Feature-Sliced Design. \u0418\u0445 \u0446\u0435\u043b\u044c - \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u043e\u0433\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0435\u043c\u0443 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438 \u043e\u0442 \u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043e\u043d \u0437\u0430\u0432\u0438\u0441\u0438\u0442.",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/reference/layers.mdx",sourceDirName:"reference",slug:"/reference/layers",permalink:"/ru/docs/reference/layers",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/reference/layers.mdx",tags:[],version:"current",lastUpdatedAt:1727030144e3,sidebarPosition:1,frontMatter:{sidebar_position:1,pagination_next:"reference/slices-segments"},sidebar:"referenceSidebar",previous:{title:"\ud83d\udcda \u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a",permalink:"/ru/docs/reference/"},next:{title:"\u0421\u043b\u0430\u0439\u0441\u044b \u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b",permalink:"/ru/docs/reference/slices-segments"}},t={},h=[{value:"\u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043b\u043e\u0451\u0432",id:"import-rule-on-layers",level:2},{value:"\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0451\u0432",id:"\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f-\u0441\u043b\u043e\u0451\u0432",level:2},{value:"Shared",id:"shared",level:3},{value:"Entities",id:"entities",level:3},{value:"Features",id:"features",level:3},{value:"Widgets",id:"widgets",level:3},{value:"Pages",id:"pages",level:3},{value:"Processes",id:"processes",level:3},{value:"App",id:"app",level:3}];function x(e){const s={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.header,{children:(0,i.jsx)(s.h1,{id:"\u0441\u043b\u043e\u0438",children:"\u0421\u043b\u043e\u0438"})}),"\n",(0,i.jsx)(s.p,{children:"\u0421\u043b\u043e\u0438 - \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u0432 Feature-Sliced Design. \u0418\u0445 \u0446\u0435\u043b\u044c - \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u043e\u0433\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0435\u043c\u0443 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438 \u043e\u0442 \u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043e\u043d \u0437\u0430\u0432\u0438\u0441\u0438\u0442."}),"\n",(0,i.jsx)(s.admonition,{type:"note",children:(0,i.jsxs)(s.p,{children:["\u041d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 ",(0,i.jsx)(s.em,{children:"\u043c\u043e\u0434\u0443\u043b\u044c"})," \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 - \u0444\u0430\u0439\u043b \u0438\u043b\u0438 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c. \u041d\u0435 \u043f\u0443\u0442\u0430\u0442\u044c \u0441 npm-\u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438."]})}),"\n",(0,i.jsx)(s.p,{children:"\u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u043e\u0439 \u043d\u0435\u0441\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043e\u0441\u043e\u0431\u044b\u0439 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043c\u044b\u0441\u043b, \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0449\u0438\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043a\u0430\u043a\u0443\u044e \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0432\u043e\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u0434\u0435. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0451\u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Feature-Sliced Design."}),"\n",(0,i.jsxs)(s.p,{children:["\u0412\u0441\u0435\u0433\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 ",(0,i.jsx)(s.strong,{children:"7 \u0441\u043b\u043e\u0451\u0432"}),", \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043e\u0442 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438\xa0\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043a \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0439:"]}),"\n",(0,i.jsx)("img",{src:"/img/layers/folders-graphic-light.svg#light-mode-only",width:"180",style:{float:"right",margin:"0 1em"},alt:"\u0414\u0435\u0440\u0435\u0432\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043f\u0430\u043f\u043a\u043e\u0439 src \u0438 \u0441\u0435\u043c\u044c\u044e \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0430\u043c\u0438: app, processes, pages, widgets, features, entities, shared. \u041f\u0430\u043f\u043a\u0430 processes \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0443\u0441\u043a\u043b\u043e."}),"\n",(0,i.jsx)("img",{src:"/img/layers/folders-graphic-dark.svg#dark-mode-only",width:"180",style:{float:"right",margin:"0 1em"},alt:"\u0414\u0435\u0440\u0435\u0432\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043f\u0430\u043f\u043a\u043e\u0439 src \u0438 \u0441\u0435\u043c\u044c\u044e \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0430\u043c\u0438: app, processes, pages, widgets, features, entities, shared. \u041f\u0430\u043f\u043a\u0430 processes \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0443\u0441\u043a\u043b\u043e."}),"\n",(0,i.jsxs)(s.ol,{children:["\n",(0,i.jsx)(s.li,{children:"App (\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435)"}),"\n",(0,i.jsx)(s.li,{children:"Processes (\u041f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0439 \u0441\u043b\u043e\u0439)"}),"\n",(0,i.jsx)(s.li,{children:"Pages (\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u044b)"}),"\n",(0,i.jsx)(s.li,{children:"Widgets (\u0412\u0438\u0434\u0436\u0435\u0442\u044b)"}),"\n",(0,i.jsx)(s.li,{children:"Features (\u0424\u0438\u0447\u0438/\u0444\u0443\u043d\u043a\u0446\u0438\u0438)"}),"\n",(0,i.jsx)(s.li,{children:"Entities (\u0421\u0443\u0449\u043d\u043e\u0441\u0442\u0438)"}),"\n",(0,i.jsx)(s.li,{children:"Shared (\u041e\u0431\u0449\u0438\u0439)"}),"\n"]}),"\n",(0,i.jsx)(s.p,{children:"\u0412\u044b \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u043b\u043e\u0438 \u0432 \u0441\u0432\u043e\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 - \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435, \u0447\u0442\u043e \u043f\u0440\u0438\u043d\u043e\u0441\u044f\u0442 \u043f\u043e\u043b\u044c\u0437\u0443 \u0432\u0430\u0448\u0435\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443."}),"\n",(0,i.jsx)(s.h2,{id:"import-rule-on-layers",children:"\u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043b\u043e\u0451\u0432"}),"\n",(0,i.jsxs)(s.p,{children:["\u0421\u043b\u043e\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u0442 \u0438\u0437 ",(0,i.jsx)(s.em,{children:"\u0441\u043b\u0430\u0439\u0441\u043e\u0432"})," \u2014 \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u0446\u0435\u043f\u043b\u0435\u043d\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f \u043c\u043e\u0434\u0443\u043b\u0435\u0439. Feature-Sliced Design \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0438\u0437\u043a\u0443\u044e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u043b\u0430\u0439\u0441\u0430\u043c\u0438 \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f ",(0,i.jsx)(s.strong,{children:"\u043f\u0440\u0430\u0432\u0438\u043b\u043e\u043c \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043b\u043e\u0451\u0432"}),":"]}),"\n",(0,i.jsxs)(s.blockquote,{children:["\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.em,{children:"\u041c\u043e\u0434\u0443\u043b\u044c \u0432 \u0441\u043b\u0430\u0439\u0441\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u043b\u0430\u0439\u0441\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043d\u0430 \u0441\u043b\u043e\u044f\u0445 \u0441\u0442\u0440\u043e\u0433\u043e \u043d\u0438\u0436\u0435."})}),"\n"]}),"\n",(0,i.jsxs)(s.p,{children:["\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 ",(0,i.jsx)(s.code,{children:"~/features/aaa"}),", \u0441\u043b\u0430\u0439\u0441\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f ",(0,i.jsx)(s.code,{children:"aaa"}),", \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0444\u0430\u0439\u043b ",(0,i.jsx)(s.code,{children:"~/features/aaa/api/request.ts"})," \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u043d\u0438 \u0438\u0437 \u043a\u0430\u043a\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u043f\u0430\u043f\u043a\u0443 \u0438\u0437 ",(0,i.jsx)(s.code,{children:"~/features/bbb"}),", \u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0438\u0437 ",(0,i.jsx)(s.code,{children:"~/entities"})," \u0438 ",(0,i.jsx)(s.code,{children:"~/shared"}),", \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0437 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0432 ",(0,i.jsx)(s.code,{children:"~/features/aaa"}),"."]}),"\n",(0,i.jsx)(s.h2,{id:"\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f-\u0441\u043b\u043e\u0451\u0432",children:"\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0451\u0432"}),"\n",(0,i.jsx)(s.h3,{id:"shared",children:"Shared"}),"\n",(0,i.jsxs)(s.p,{children:["\u0418\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438, \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438, \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0442 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438\u043b\u0438 \u0431\u0438\u0437\u043d\u0435\u0441\u0430.\n\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u043b\u043e\u0439 \u043a\u0430\u043a ",(0,i.jsx)(s.a,{href:"https://sova.dev/ru/why-utils-and-helpers-is-a-dump/",children:"\u0441\u0432\u0430\u043b\u043a\u0443 \u0443\u0442\u0438\u043b\u0438\u0442"}),"!"]}),"\n",(0,i.jsx)(s.p,{children:"\u042d\u0442\u043e\u0442 \u0441\u043b\u043e\u0439, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445, \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u043d\u0435 \u0438\u0437 \u0441\u043b\u0430\u0439\u0441\u043e\u0432, \u0430 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438\u0437 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432."}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e"}),":"]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"UI-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430"}),"\n",(0,i.jsx)(s.li,{children:"API-\u043a\u043b\u0438\u0435\u043d\u0442"}),"\n",(0,i.jsx)(s.li,{children:"\u041a\u043e\u0434, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0441 API \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430"}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"entities",children:"Entities"}),"\n",(0,i.jsx)(s.p,{children:"\u041f\u043e\u043d\u044f\u0442\u0438\u044f \u0438\u0437 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043c\u0435\u0441\u0442\u0435 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0441\u0443\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u044d\u0442\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0438\u0437\u043d\u0435\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430."}),"\n",(0,i.jsx)(s.p,{children:"\u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u0430\u0439\u0441 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 CRUD (\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435-\u0447\u0442\u0435\u043d\u0438\u0435-\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435-\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435)."}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043b\u0430\u0439\u0441\u043e\u0432"}),":"]}),"\n",(0,i.jsxs)("table",{children:[(0,i.jsx)("thead",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:" \u0414\u043b\u044f \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 "}),(0,i.jsx)("th",{children:" \u0414\u043b\u044f Git-\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, GitHub) "})]})}),(0,i.jsx)("tbody",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c"}),(0,i.jsx)("li",{children:"\u041f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f"}),(0,i.jsx)("li",{children:"\u0413\u0440\u0443\u043f\u043f\u0430"})]})}),(0,i.jsx)("td",{children:(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439"}),(0,i.jsx)("li",{children:"\u0424\u0430\u0439\u043b"}),(0,i.jsx)("li",{children:"\u041a\u043e\u043c\u043c\u0438\u0442"})]})})]})})]}),"\n",(0,i.jsxs)(s.admonition,{type:"tip",children:[(0,i.jsxs)(s.p,{children:["\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 \u0434\u043b\u044f Git, \u0447\u0442\u043e ",(0,i.jsx)(s.em,{children:"\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439"})," \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 ",(0,i.jsx)(s.em,{children:"\u0444\u0430\u0439\u043b\u044b"}),". \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c\u044e \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u043b\u043e\u0436\u0435\u043d\u044b \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438. \u042d\u0442\u043e \u0447\u0430\u0441\u0442\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0441 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438, \u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u0442\u0440\u0443\u0434\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u043d\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043b\u043e\u0451\u0432."]}),(0,i.jsx)(s.p,{children:"\u0412\u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b:"}),(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"UI \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u043b\u043e\u0442\u044b \u0434\u043b\u044f \u043c\u0435\u0441\u0442, \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f"}),"\n",(0,i.jsx)(s.li,{children:"\u0411\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0430, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0430\u044f \u0441 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439, \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0430 \u0432 Features (\u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432)"}),"\n",(0,i.jsx)(s.li,{children:"\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0438\u0437 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u044b \u0432 \u0441\u043b\u043e\u0439 Shared, \u0440\u044f\u0434\u043e\u043c \u0441 API-\u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c"}),"\n"]})]}),"\n",(0,i.jsx)(s.h3,{id:"features",children:"Features"}),"\n",(0,i.jsx)(s.p,{children:"\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0431\u0438\u0437\u043d\u0435\u0441-\u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438, \u0447\u0442\u043e\u0431 \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u0446\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \u0421\u044e\u0434\u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0445\u043e\u0434\u044f\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u0442 \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c."}),"\n",(0,i.jsxs)(s.p,{children:["\u0421\u043b\u0430\u0439\u0441 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u043b\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c ",(0,i.jsx)(s.em,{children:"\u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435"})," \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a API, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0435 \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c."]}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043b\u0430\u0439\u0441\u043e\u0432"}),":"]}),"\n",(0,i.jsxs)("table",{children:[(0,i.jsx)("thead",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:" \u0414\u043b\u044f \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 "}),(0,i.jsx)("th",{children:" \u0414\u043b\u044f Git-\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, GitHub) "}),(0,i.jsx)("th",{children:" \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043e\u0442 \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f "})]})}),(0,i.jsx)("tbody",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f"}),(0,i.jsx)("li",{children:"\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044e"}),(0,i.jsx)("li",{children:"\u0412\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0432 \u0433\u0440\u0443\u043f\u043f\u0443"})]})}),(0,i.jsx)("td",{children:(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u0430\u0439\u043b"}),(0,i.jsx)("li",{children:"\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439"}),(0,i.jsx)("li",{children:"\u0421\u043b\u0438\u0442\u044c \u0432\u0435\u0442\u043a\u0438"})]})}),(0,i.jsx)("td",{children:(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0451\u043c\u043d\u0443\u044e \u0442\u0435\u043c\u0443"}),(0,i.jsx)("li",{children:"\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432 \u0444\u043e\u043d\u0435"}),(0,i.jsx)("li",{children:"\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 User-Agent"})]})})]})})]}),"\n",(0,i.jsx)(s.h3,{id:"widgets",children:"Widgets"}),"\n",(0,i.jsx)(s.p,{children:"\u0421\u0430\u043c\u043e\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u0438\u0437 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0435\u0434\u0438\u043d\u0438\u0446 \u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0437\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438."}),"\n",(0,i.jsx)(s.p,{children:"\u042d\u0442\u043e\u0442 \u0441\u043b\u043e\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u043e\u0442\u044b, \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439, \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0438 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0438\u0437 \u0444\u0438\u0447. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u043b\u043e\u0435 \u043d\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0430, \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043e\u043d\u0430 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0444\u0438\u0447\u0430\u0445. \u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u0430\u0439\u0441 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u043b\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0435-\u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0443, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0436\u0435\u0441\u0442\u044b, \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u043e\u0439 \u0438 \u0442.\u0434."}),"\n",(0,i.jsx)(s.p,{children:"\u0418\u043d\u043e\u0433\u0434\u0430 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0443 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u043b\u043e\u0435. \u0417\u0430\u0447\u0430\u0441\u0442\u0443\u044e, \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0432\u0438\u0434\u0436\u0435\u0442 \u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b) \u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0430 \u0432 \u043d\u0451\u043c \u043d\u0435 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f."}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043b\u0430\u0439\u0441\u043e\u0432"}),":"]}),"\n",(0,i.jsxs)("table",{children:[(0,i.jsx)("thead",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:" \u0414\u043b\u044f \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 "}),(0,i.jsx)("th",{children:" \u0414\u043b\u044f Git-\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, GitHub) "})]})}),(0,i.jsx)("tbody",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"\u041a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438"}),(0,i.jsx)("li",{children:"\u0428\u0430\u043f\u043a\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (\u0441 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438)"})]})}),(0,i.jsx)("td",{children:(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"\u0421\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 (\u0441 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438)"}),(0,i.jsx)("li",{children:"\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0432 \u0432\u0435\u0442\u043a\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432"}),(0,i.jsx)("li",{children:"\u041a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f"})]})})]})})]}),"\n",(0,i.jsx)(s.admonition,{type:"tip",children:(0,i.jsxs)(s.p,{children:["\u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u043e\u0443\u0442\u0435\u0440 ",(0,i.jsx)(s.a,{href:"https://remix.run",children:"Remix"}),"), \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0439 Widgets \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0441\u043b\u043e\u044e Pages \u0432 \u043f\u043b\u043e\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 - \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u0441 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0431\u044d\u043a\u0435\u043d\u0434\u0430, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u0435\u043b\u044f\u043c\u0438 \u043e\u0448\u0438\u0431\u043e\u043a. \u0422\u0430\u043a\u0436\u0435 \u0437\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043b\u0435\u0439\u0430\u0443\u0442\u044b \u0434\u043b\u044f \u0441\u043b\u043e\u044f Pages."]})}),"\n",(0,i.jsx)(s.h3,{id:"pages",children:"Pages"}),"\n",(0,i.jsx)(s.p,{children:"\u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u043b\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u043e\u0432) \u0438\u043b\u0438 \u044d\u043a\u0440\u0430\u043d\u044b/\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439)."}),"\n",(0,i.jsx)(s.p,{children:"\u041f\u043e \u0441\u0432\u043e\u0435\u0439 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043f\u0440\u0438\u0440\u043e\u0434\u0435 \u044d\u0442\u043e\u0442 \u0441\u043b\u043e\u0439 \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 Widgets, \u0445\u043e\u0442\u044c \u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u0435\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435. \u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u0430\u0439\u0441 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u043b\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044e \u043a \u0440\u043e\u0443\u0442\u0435\u0440\u0443, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u0448\u0438\u0431\u043e\u043a."}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043b\u0430\u0439\u0441\u043e\u0432"}),":"]}),"\n",(0,i.jsxs)("table",{children:[(0,i.jsx)("thead",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:" \u0414\u043b\u044f \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 "}),(0,i.jsx)("th",{children:" \u0414\u043b\u044f Git-\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, GitHub) "})]})}),(0,i.jsx)("tbody",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"\u041b\u0435\u043d\u0442\u0430 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439"}),(0,i.jsx)("li",{children:"\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430"}),(0,i.jsx)("li",{children:"\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f"})]})}),(0,i.jsx)("td",{children:(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f"}),(0,i.jsx)("li",{children:"\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f"}),(0,i.jsx)("li",{children:"\u0412\u0435\u0442\u043a\u0438 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438"})]})})]})})]}),"\n",(0,i.jsx)(s.h3,{id:"processes",children:"Processes"}),"\n",(0,i.jsx)(s.admonition,{type:"caution",children:(0,i.jsxs)(s.p,{children:["\u042d\u0442\u043e\u0442 \u0441\u043b\u043e\u0439 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u043c. \u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u0435\u0433\u043e \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0432 ",(0,i.jsx)(s.code,{children:"features"})," \u0438 ",(0,i.jsx)(s.code,{children:"app"}),"."]})}),"\n",(0,i.jsx)(s.p,{children:"\u0412\u044b\u0445\u043e\u0434 \u0438\u0437 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439, \u043a\u043e\u0433\u0434\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u043c\u043d\u043e\u0433\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u043e\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435."}),"\n",(0,i.jsx)(s.p,{children:"\u042d\u0442\u043e\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u044d\u0442\u043e\u0442 \u0441\u043b\u043e\u0439 \u043d\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f, \u043b\u043e\u0433\u0438\u043a\u0443 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0440\u043e\u0443\u0442\u0435\u0440\u0430 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 App. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0441\u043b\u043e\u0439 App \u0432\u044b\u0440\u0430\u0441\u0442\u0435\u0442 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e \u0441\u0442\u0430\u043d\u0435\u0442 \u043d\u0435\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u043c \u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0440\u0430\u0437\u0433\u0440\u0443\u0437\u043a\u0438."}),"\n",(0,i.jsx)(s.h3,{id:"app",children:"App"}),"\n",(0,i.jsx)(s.p,{children:"\u0412\u0441\u0451, \u0447\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u0430\u043a \u0432 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430), \u0442\u0430\u043a \u0438 \u0432 \u0431\u0438\u0437\u043d\u0435\u0441-\u0441\u043c\u044b\u0441\u043b\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430)."}),"\n",(0,i.jsx)(s.p,{children:"\u042d\u0442\u043e\u0442 \u0441\u043b\u043e\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043b\u0430\u0439\u0441\u043e\u0432, \u043a\u0430\u043a \u0438 Shared, \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b."}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e"}),":"]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"\u0421\u0442\u0438\u043b\u0438"}),"\n",(0,i.jsx)(s.li,{children:"\u0420\u043e\u0443\u0442\u0435\u0440"}),"\n",(0,i.jsx)(s.li,{children:"\u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430"}),"\n",(0,i.jsx)(s.li,{children:"\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438"}),"\n"]})]})}function j(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(x,{...e})}):x(e)}},5710:(e,s,n)=>{n.d(s,{R:()=>d,x:()=>c});var i=n(758);const r={},l=i.createContext(r);function d(e){const s=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:d(e.components),i.createElement(l.Provider,{value:s},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[6744],{3575:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>t,contentTitle:()=>d,default:()=>j,frontMatter:()=>l,metadata:()=>c,toc:()=>h});var i=n(6070),r=n(5710);const l={sidebar_position:1,pagination_next:"reference/slices-segments"},d="\u0421\u043b\u043e\u0438",c={id:"reference/layers",title:"\u0421\u043b\u043e\u0438",description:"\u0421\u043b\u043e\u0438 - \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u0432 Feature-Sliced Design. \u0418\u0445 \u0446\u0435\u043b\u044c - \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u043e\u0433\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0435\u043c\u0443 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438 \u043e\u0442 \u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043e\u043d \u0437\u0430\u0432\u0438\u0441\u0438\u0442.",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/reference/layers.mdx",sourceDirName:"reference",slug:"/reference/layers",permalink:"/ru/docs/reference/layers",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/reference/layers.mdx",tags:[],version:"current",lastUpdatedAt:1727540389e3,sidebarPosition:1,frontMatter:{sidebar_position:1,pagination_next:"reference/slices-segments"},sidebar:"referenceSidebar",previous:{title:"\ud83d\udcda \u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a",permalink:"/ru/docs/reference/"},next:{title:"\u0421\u043b\u0430\u0439\u0441\u044b \u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b",permalink:"/ru/docs/reference/slices-segments"}},t={},h=[{value:"\u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043b\u043e\u0451\u0432",id:"import-rule-on-layers",level:2},{value:"\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0451\u0432",id:"\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f-\u0441\u043b\u043e\u0451\u0432",level:2},{value:"Shared",id:"shared",level:3},{value:"Entities",id:"entities",level:3},{value:"Features",id:"features",level:3},{value:"Widgets",id:"widgets",level:3},{value:"Pages",id:"pages",level:3},{value:"Processes",id:"processes",level:3},{value:"App",id:"app",level:3}];function x(e){const s={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.header,{children:(0,i.jsx)(s.h1,{id:"\u0441\u043b\u043e\u0438",children:"\u0421\u043b\u043e\u0438"})}),"\n",(0,i.jsx)(s.p,{children:"\u0421\u043b\u043e\u0438 - \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u0432 Feature-Sliced Design. \u0418\u0445 \u0446\u0435\u043b\u044c - \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u043e\u0433\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0435\u043c\u0443 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438 \u043e\u0442 \u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043e\u043d \u0437\u0430\u0432\u0438\u0441\u0438\u0442."}),"\n",(0,i.jsx)(s.admonition,{type:"note",children:(0,i.jsxs)(s.p,{children:["\u041d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 ",(0,i.jsx)(s.em,{children:"\u043c\u043e\u0434\u0443\u043b\u044c"})," \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 - \u0444\u0430\u0439\u043b \u0438\u043b\u0438 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c. \u041d\u0435 \u043f\u0443\u0442\u0430\u0442\u044c \u0441 npm-\u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438."]})}),"\n",(0,i.jsx)(s.p,{children:"\u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u043e\u0439 \u043d\u0435\u0441\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043e\u0441\u043e\u0431\u044b\u0439 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043c\u044b\u0441\u043b, \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0449\u0438\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043a\u0430\u043a\u0443\u044e \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0432\u043e\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u0434\u0435. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0451\u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Feature-Sliced Design."}),"\n",(0,i.jsxs)(s.p,{children:["\u0412\u0441\u0435\u0433\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 ",(0,i.jsx)(s.strong,{children:"7 \u0441\u043b\u043e\u0451\u0432"}),", \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043e\u0442 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438\xa0\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043a \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0439:"]}),"\n",(0,i.jsx)("img",{src:"/img/layers/folders-graphic-light.svg#light-mode-only",width:"180",style:{float:"right",margin:"0 1em"},alt:"\u0414\u0435\u0440\u0435\u0432\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043f\u0430\u043f\u043a\u043e\u0439 src \u0438 \u0441\u0435\u043c\u044c\u044e \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0430\u043c\u0438: app, processes, pages, widgets, features, entities, shared. \u041f\u0430\u043f\u043a\u0430 processes \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0443\u0441\u043a\u043b\u043e."}),"\n",(0,i.jsx)("img",{src:"/img/layers/folders-graphic-dark.svg#dark-mode-only",width:"180",style:{float:"right",margin:"0 1em"},alt:"\u0414\u0435\u0440\u0435\u0432\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043f\u0430\u043f\u043a\u043e\u0439 src \u0438 \u0441\u0435\u043c\u044c\u044e \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0430\u043c\u0438: app, processes, pages, widgets, features, entities, shared. \u041f\u0430\u043f\u043a\u0430 processes \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0443\u0441\u043a\u043b\u043e."}),"\n",(0,i.jsxs)(s.ol,{children:["\n",(0,i.jsx)(s.li,{children:"App (\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435)"}),"\n",(0,i.jsx)(s.li,{children:"Processes (\u041f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0439 \u0441\u043b\u043e\u0439)"}),"\n",(0,i.jsx)(s.li,{children:"Pages (\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u044b)"}),"\n",(0,i.jsx)(s.li,{children:"Widgets (\u0412\u0438\u0434\u0436\u0435\u0442\u044b)"}),"\n",(0,i.jsx)(s.li,{children:"Features (\u0424\u0438\u0447\u0438/\u0444\u0443\u043d\u043a\u0446\u0438\u0438)"}),"\n",(0,i.jsx)(s.li,{children:"Entities (\u0421\u0443\u0449\u043d\u043e\u0441\u0442\u0438)"}),"\n",(0,i.jsx)(s.li,{children:"Shared (\u041e\u0431\u0449\u0438\u0439)"}),"\n"]}),"\n",(0,i.jsx)(s.p,{children:"\u0412\u044b \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u043b\u043e\u0438 \u0432 \u0441\u0432\u043e\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 - \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435, \u0447\u0442\u043e \u043f\u0440\u0438\u043d\u043e\u0441\u044f\u0442 \u043f\u043e\u043b\u044c\u0437\u0443 \u0432\u0430\u0448\u0435\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443."}),"\n",(0,i.jsx)(s.h2,{id:"import-rule-on-layers",children:"\u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043b\u043e\u0451\u0432"}),"\n",(0,i.jsxs)(s.p,{children:["\u0421\u043b\u043e\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u0442 \u0438\u0437 ",(0,i.jsx)(s.em,{children:"\u0441\u043b\u0430\u0439\u0441\u043e\u0432"})," \u2014 \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u0446\u0435\u043f\u043b\u0435\u043d\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f \u043c\u043e\u0434\u0443\u043b\u0435\u0439. Feature-Sliced Design \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0438\u0437\u043a\u0443\u044e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u043b\u0430\u0439\u0441\u0430\u043c\u0438 \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f ",(0,i.jsx)(s.strong,{children:"\u043f\u0440\u0430\u0432\u0438\u043b\u043e\u043c \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043b\u043e\u0451\u0432"}),":"]}),"\n",(0,i.jsxs)(s.blockquote,{children:["\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.em,{children:"\u041c\u043e\u0434\u0443\u043b\u044c \u0432 \u0441\u043b\u0430\u0439\u0441\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u043b\u0430\u0439\u0441\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043d\u0430 \u0441\u043b\u043e\u044f\u0445 \u0441\u0442\u0440\u043e\u0433\u043e \u043d\u0438\u0436\u0435."})}),"\n"]}),"\n",(0,i.jsxs)(s.p,{children:["\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 ",(0,i.jsx)(s.code,{children:"~/features/aaa"}),", \u0441\u043b\u0430\u0439\u0441\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f ",(0,i.jsx)(s.code,{children:"aaa"}),", \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0444\u0430\u0439\u043b ",(0,i.jsx)(s.code,{children:"~/features/aaa/api/request.ts"})," \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u043d\u0438 \u0438\u0437 \u043a\u0430\u043a\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u043f\u0430\u043f\u043a\u0443 \u0438\u0437 ",(0,i.jsx)(s.code,{children:"~/features/bbb"}),", \u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0438\u0437 ",(0,i.jsx)(s.code,{children:"~/entities"})," \u0438 ",(0,i.jsx)(s.code,{children:"~/shared"}),", \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0437 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0432 ",(0,i.jsx)(s.code,{children:"~/features/aaa"}),"."]}),"\n",(0,i.jsx)(s.h2,{id:"\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f-\u0441\u043b\u043e\u0451\u0432",children:"\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0451\u0432"}),"\n",(0,i.jsx)(s.h3,{id:"shared",children:"Shared"}),"\n",(0,i.jsxs)(s.p,{children:["\u0418\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438, \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438, \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0442 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438\u043b\u0438 \u0431\u0438\u0437\u043d\u0435\u0441\u0430.\n\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u043b\u043e\u0439 \u043a\u0430\u043a ",(0,i.jsx)(s.a,{href:"https://sova.dev/ru/why-utils-and-helpers-is-a-dump/",children:"\u0441\u0432\u0430\u043b\u043a\u0443 \u0443\u0442\u0438\u043b\u0438\u0442"}),"!"]}),"\n",(0,i.jsx)(s.p,{children:"\u042d\u0442\u043e\u0442 \u0441\u043b\u043e\u0439, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445, \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u043d\u0435 \u0438\u0437 \u0441\u043b\u0430\u0439\u0441\u043e\u0432, \u0430 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438\u0437 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432."}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e"}),":"]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"UI-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430"}),"\n",(0,i.jsx)(s.li,{children:"API-\u043a\u043b\u0438\u0435\u043d\u0442"}),"\n",(0,i.jsx)(s.li,{children:"\u041a\u043e\u0434, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0441 API \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430"}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"entities",children:"Entities"}),"\n",(0,i.jsx)(s.p,{children:"\u041f\u043e\u043d\u044f\u0442\u0438\u044f \u0438\u0437 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043c\u0435\u0441\u0442\u0435 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0441\u0443\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u044d\u0442\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0438\u0437\u043d\u0435\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430."}),"\n",(0,i.jsx)(s.p,{children:"\u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u0430\u0439\u0441 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 CRUD (\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435-\u0447\u0442\u0435\u043d\u0438\u0435-\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435-\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435)."}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043b\u0430\u0439\u0441\u043e\u0432"}),":"]}),"\n",(0,i.jsxs)("table",{children:[(0,i.jsx)("thead",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:" \u0414\u043b\u044f \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 "}),(0,i.jsx)("th",{children:" \u0414\u043b\u044f Git-\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, GitHub) "})]})}),(0,i.jsx)("tbody",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c"}),(0,i.jsx)("li",{children:"\u041f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f"}),(0,i.jsx)("li",{children:"\u0413\u0440\u0443\u043f\u043f\u0430"})]})}),(0,i.jsx)("td",{children:(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439"}),(0,i.jsx)("li",{children:"\u0424\u0430\u0439\u043b"}),(0,i.jsx)("li",{children:"\u041a\u043e\u043c\u043c\u0438\u0442"})]})})]})})]}),"\n",(0,i.jsxs)(s.admonition,{type:"tip",children:[(0,i.jsxs)(s.p,{children:["\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 \u0434\u043b\u044f Git, \u0447\u0442\u043e ",(0,i.jsx)(s.em,{children:"\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439"})," \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 ",(0,i.jsx)(s.em,{children:"\u0444\u0430\u0439\u043b\u044b"}),". \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c\u044e \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u043b\u043e\u0436\u0435\u043d\u044b \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438. \u042d\u0442\u043e \u0447\u0430\u0441\u0442\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0441 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438, \u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u0442\u0440\u0443\u0434\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u043d\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043b\u043e\u0451\u0432."]}),(0,i.jsx)(s.p,{children:"\u0412\u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b:"}),(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"UI \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u043b\u043e\u0442\u044b \u0434\u043b\u044f \u043c\u0435\u0441\u0442, \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f"}),"\n",(0,i.jsx)(s.li,{children:"\u0411\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0430, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0430\u044f \u0441 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439, \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0430 \u0432 Features (\u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432)"}),"\n",(0,i.jsx)(s.li,{children:"\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0438\u0437 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u044b \u0432 \u0441\u043b\u043e\u0439 Shared, \u0440\u044f\u0434\u043e\u043c \u0441 API-\u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c"}),"\n"]})]}),"\n",(0,i.jsx)(s.h3,{id:"features",children:"Features"}),"\n",(0,i.jsx)(s.p,{children:"\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0431\u0438\u0437\u043d\u0435\u0441-\u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438, \u0447\u0442\u043e\u0431 \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u0446\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \u0421\u044e\u0434\u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0445\u043e\u0434\u044f\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u0442 \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c."}),"\n",(0,i.jsxs)(s.p,{children:["\u0421\u043b\u0430\u0439\u0441 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u043b\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c ",(0,i.jsx)(s.em,{children:"\u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435"})," \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a API, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0435 \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c."]}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043b\u0430\u0439\u0441\u043e\u0432"}),":"]}),"\n",(0,i.jsxs)("table",{children:[(0,i.jsx)("thead",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:" \u0414\u043b\u044f \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 "}),(0,i.jsx)("th",{children:" \u0414\u043b\u044f Git-\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, GitHub) "}),(0,i.jsx)("th",{children:" \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043e\u0442 \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f "})]})}),(0,i.jsx)("tbody",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f"}),(0,i.jsx)("li",{children:"\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044e"}),(0,i.jsx)("li",{children:"\u0412\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0432 \u0433\u0440\u0443\u043f\u043f\u0443"})]})}),(0,i.jsx)("td",{children:(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u0430\u0439\u043b"}),(0,i.jsx)("li",{children:"\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439"}),(0,i.jsx)("li",{children:"\u0421\u043b\u0438\u0442\u044c \u0432\u0435\u0442\u043a\u0438"})]})}),(0,i.jsx)("td",{children:(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0451\u043c\u043d\u0443\u044e \u0442\u0435\u043c\u0443"}),(0,i.jsx)("li",{children:"\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432 \u0444\u043e\u043d\u0435"}),(0,i.jsx)("li",{children:"\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 User-Agent"})]})})]})})]}),"\n",(0,i.jsx)(s.h3,{id:"widgets",children:"Widgets"}),"\n",(0,i.jsx)(s.p,{children:"\u0421\u0430\u043c\u043e\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u0438\u0437 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0435\u0434\u0438\u043d\u0438\u0446 \u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0437\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438."}),"\n",(0,i.jsx)(s.p,{children:"\u042d\u0442\u043e\u0442 \u0441\u043b\u043e\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u043e\u0442\u044b, \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439, \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0438 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0438\u0437 \u0444\u0438\u0447. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u043b\u043e\u0435 \u043d\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0430, \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043e\u043d\u0430 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0444\u0438\u0447\u0430\u0445. \u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u0430\u0439\u0441 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u043b\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0435-\u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0443, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0436\u0435\u0441\u0442\u044b, \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u043e\u0439 \u0438 \u0442.\u0434."}),"\n",(0,i.jsx)(s.p,{children:"\u0418\u043d\u043e\u0433\u0434\u0430 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0443 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u043b\u043e\u0435. \u0417\u0430\u0447\u0430\u0441\u0442\u0443\u044e, \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0432\u0438\u0434\u0436\u0435\u0442 \u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b) \u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0430 \u0432 \u043d\u0451\u043c \u043d\u0435 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f."}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043b\u0430\u0439\u0441\u043e\u0432"}),":"]}),"\n",(0,i.jsxs)("table",{children:[(0,i.jsx)("thead",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:" \u0414\u043b\u044f \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 "}),(0,i.jsx)("th",{children:" \u0414\u043b\u044f Git-\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, GitHub) "})]})}),(0,i.jsx)("tbody",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"\u041a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438"}),(0,i.jsx)("li",{children:"\u0428\u0430\u043f\u043a\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (\u0441 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438)"})]})}),(0,i.jsx)("td",{children:(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"\u0421\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 (\u0441 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438)"}),(0,i.jsx)("li",{children:"\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0432 \u0432\u0435\u0442\u043a\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432"}),(0,i.jsx)("li",{children:"\u041a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f"})]})})]})})]}),"\n",(0,i.jsx)(s.admonition,{type:"tip",children:(0,i.jsxs)(s.p,{children:["\u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u043e\u0443\u0442\u0435\u0440 ",(0,i.jsx)(s.a,{href:"https://remix.run",children:"Remix"}),"), \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0439 Widgets \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0441\u043b\u043e\u044e Pages \u0432 \u043f\u043b\u043e\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 - \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u0441 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0431\u044d\u043a\u0435\u043d\u0434\u0430, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u0435\u043b\u044f\u043c\u0438 \u043e\u0448\u0438\u0431\u043e\u043a. \u0422\u0430\u043a\u0436\u0435 \u0437\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043b\u0435\u0439\u0430\u0443\u0442\u044b \u0434\u043b\u044f \u0441\u043b\u043e\u044f Pages."]})}),"\n",(0,i.jsx)(s.h3,{id:"pages",children:"Pages"}),"\n",(0,i.jsx)(s.p,{children:"\u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u043b\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u043e\u0432) \u0438\u043b\u0438 \u044d\u043a\u0440\u0430\u043d\u044b/\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439)."}),"\n",(0,i.jsx)(s.p,{children:"\u041f\u043e \u0441\u0432\u043e\u0435\u0439 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043f\u0440\u0438\u0440\u043e\u0434\u0435 \u044d\u0442\u043e\u0442 \u0441\u043b\u043e\u0439 \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 Widgets, \u0445\u043e\u0442\u044c \u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u0435\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435. \u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u0430\u0439\u0441 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u043b\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044e \u043a \u0440\u043e\u0443\u0442\u0435\u0440\u0443, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u0448\u0438\u0431\u043e\u043a."}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043b\u0430\u0439\u0441\u043e\u0432"}),":"]}),"\n",(0,i.jsxs)("table",{children:[(0,i.jsx)("thead",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:" \u0414\u043b\u044f \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 "}),(0,i.jsx)("th",{children:" \u0414\u043b\u044f Git-\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, GitHub) "})]})}),(0,i.jsx)("tbody",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"\u041b\u0435\u043d\u0442\u0430 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439"}),(0,i.jsx)("li",{children:"\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430"}),(0,i.jsx)("li",{children:"\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f"})]})}),(0,i.jsx)("td",{children:(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f"}),(0,i.jsx)("li",{children:"\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f"}),(0,i.jsx)("li",{children:"\u0412\u0435\u0442\u043a\u0438 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438"})]})})]})})]}),"\n",(0,i.jsx)(s.h3,{id:"processes",children:"Processes"}),"\n",(0,i.jsx)(s.admonition,{type:"caution",children:(0,i.jsxs)(s.p,{children:["\u042d\u0442\u043e\u0442 \u0441\u043b\u043e\u0439 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u043c. \u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u0435\u0433\u043e \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0432 ",(0,i.jsx)(s.code,{children:"features"})," \u0438 ",(0,i.jsx)(s.code,{children:"app"}),"."]})}),"\n",(0,i.jsx)(s.p,{children:"\u0412\u044b\u0445\u043e\u0434 \u0438\u0437 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439, \u043a\u043e\u0433\u0434\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u043c\u043d\u043e\u0433\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u043e\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435."}),"\n",(0,i.jsx)(s.p,{children:"\u042d\u0442\u043e\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u044d\u0442\u043e\u0442 \u0441\u043b\u043e\u0439 \u043d\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f, \u043b\u043e\u0433\u0438\u043a\u0443 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0440\u043e\u0443\u0442\u0435\u0440\u0430 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 App. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0441\u043b\u043e\u0439 App \u0432\u044b\u0440\u0430\u0441\u0442\u0435\u0442 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e \u0441\u0442\u0430\u043d\u0435\u0442 \u043d\u0435\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u043c \u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0440\u0430\u0437\u0433\u0440\u0443\u0437\u043a\u0438."}),"\n",(0,i.jsx)(s.h3,{id:"app",children:"App"}),"\n",(0,i.jsx)(s.p,{children:"\u0412\u0441\u0451, \u0447\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u0430\u043a \u0432 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430), \u0442\u0430\u043a \u0438 \u0432 \u0431\u0438\u0437\u043d\u0435\u0441-\u0441\u043c\u044b\u0441\u043b\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430)."}),"\n",(0,i.jsx)(s.p,{children:"\u042d\u0442\u043e\u0442 \u0441\u043b\u043e\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043b\u0430\u0439\u0441\u043e\u0432, \u043a\u0430\u043a \u0438 Shared, \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b."}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e"}),":"]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"\u0421\u0442\u0438\u043b\u0438"}),"\n",(0,i.jsx)(s.li,{children:"\u0420\u043e\u0443\u0442\u0435\u0440"}),"\n",(0,i.jsx)(s.li,{children:"\u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430"}),"\n",(0,i.jsx)(s.li,{children:"\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438"}),"\n"]})]})}function j(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(x,{...e})}):x(e)}},5710:(e,s,n)=>{n.d(s,{R:()=>d,x:()=>c});var i=n(758);const r={},l=i.createContext(r);function d(e){const s=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:d(e.components),i.createElement(l.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/ru/assets/js/4eea1952.1a38613e.js b/ru/assets/js/4eea1952.922c8644.js similarity index 98% rename from ru/assets/js/4eea1952.1a38613e.js rename to ru/assets/js/4eea1952.922c8644.js index 1e87930094..d2b60e994b 100644 --- a/ru/assets/js/4eea1952.1a38613e.js +++ b/ru/assets/js/4eea1952.922c8644.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[887],{4284:(e,t,i)=>{i.d(t,{Ay:()=>u,RM:()=>a});var n=i(6070),s=i(5710),r=(i(758),i(8886)),c=i(316);const d=e=>{let{ticket:t}=e;const i=`https://github.com/feature-sliced/documentation/issues/${t}`;return(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{children:(0,c.T)({id:"shared.wip.title"})}),(0,n.jsx)("p",{children:(0,c.T)({id:"shared.wip.subtitle"})}),(0,n.jsxs)("ul",{children:[(0,n.jsxs)("li",{children:[(0,c.T)({id:"shared.wip.var.feedback.base"}),(0,n.jsx)(r.A,{to:i,children:(0,c.T)({id:"shared.wip.var.feedback.link"})})]}),(0,n.jsxs)("li",{children:[(0,c.T)({id:"shared.wip.var.material.base"}),(0,n.jsx)(r.A,{to:"https://t.me/feature_sliced",children:(0,c.T)({id:"shared.wip.var.material.link"})})]}),(0,n.jsxs)("li",{children:[(0,c.T)({id:"shared.wip.var.contribute.base"}),(0,n.jsx)(r.A,{to:"https://github.com/feature-sliced/documentation/blob/master/CONTRIBUTING.md",children:(0,c.T)({id:"shared.wip.var.contribute.link"})})]})]}),(0,n.jsx)("br",{}),(0,n.jsx)("p",{children:(0,n.jsx)("i",{children:"\ud83c\udf70 Stay tuned!"})})]})},a=[];function o(e){const t={admonition:"admonition",...(0,s.R)(),...e.components};return(0,n.jsx)(t.admonition,{title:"WIP",type:"caution",children:(0,n.jsx)(d,{ticket:e.ticket})})}function u(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},737:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>d,default:()=>p,frontMatter:()=>c,metadata:()=>a,toc:()=>u});var n=i(6070),s=i(5710),r=i(4284);const c={sidebar_class_name:"sidebar-item--wip",unlisted:!0},d="\u041c\u0435\u0442\u0440\u0438\u043a\u0430",a={id:"guides/examples/metric",title:"\u041c\u0435\u0442\u0440\u0438\u043a\u0430",description:"\u041f\u0440\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/metric.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/metric",permalink:"/ru/docs/guides/examples/metric",draft:!1,unlisted:!0,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/metric.mdx",tags:[],version:"current",lastUpdatedAt:1727030144e3,frontMatter:{sidebar_class_name:"sidebar-item--wip",unlisted:!0},sidebar:"guidesSidebar"},o={},u=[...r.RM];function l(e){const t={blockquote:"blockquote",h1:"h1",header:"header",p:"p",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"\u043c\u0435\u0442\u0440\u0438\u043a\u0430",children:"\u041c\u0435\u0442\u0440\u0438\u043a\u0430"})}),"\n",(0,n.jsx)(r.Ay,{ticket:"181"}),"\n",(0,n.jsxs)(t.blockquote,{children:["\n",(0,n.jsx)(t.p,{children:"\u041f\u0440\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438"}),"\n"]})]})}function p(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},5710:(e,t,i)=>{i.d(t,{R:()=>c,x:()=>d});var n=i(758);const s={},r=n.createContext(s);function c(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[887],{4284:(e,t,i)=>{i.d(t,{Ay:()=>u,RM:()=>a});var n=i(6070),s=i(5710),r=(i(758),i(8886)),c=i(316);const d=e=>{let{ticket:t}=e;const i=`https://github.com/feature-sliced/documentation/issues/${t}`;return(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{children:(0,c.T)({id:"shared.wip.title"})}),(0,n.jsx)("p",{children:(0,c.T)({id:"shared.wip.subtitle"})}),(0,n.jsxs)("ul",{children:[(0,n.jsxs)("li",{children:[(0,c.T)({id:"shared.wip.var.feedback.base"}),(0,n.jsx)(r.A,{to:i,children:(0,c.T)({id:"shared.wip.var.feedback.link"})})]}),(0,n.jsxs)("li",{children:[(0,c.T)({id:"shared.wip.var.material.base"}),(0,n.jsx)(r.A,{to:"https://t.me/feature_sliced",children:(0,c.T)({id:"shared.wip.var.material.link"})})]}),(0,n.jsxs)("li",{children:[(0,c.T)({id:"shared.wip.var.contribute.base"}),(0,n.jsx)(r.A,{to:"https://github.com/feature-sliced/documentation/blob/master/CONTRIBUTING.md",children:(0,c.T)({id:"shared.wip.var.contribute.link"})})]})]}),(0,n.jsx)("br",{}),(0,n.jsx)("p",{children:(0,n.jsx)("i",{children:"\ud83c\udf70 Stay tuned!"})})]})},a=[];function o(e){const t={admonition:"admonition",...(0,s.R)(),...e.components};return(0,n.jsx)(t.admonition,{title:"WIP",type:"caution",children:(0,n.jsx)(d,{ticket:e.ticket})})}function u(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},737:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>d,default:()=>p,frontMatter:()=>c,metadata:()=>a,toc:()=>u});var n=i(6070),s=i(5710),r=i(4284);const c={sidebar_class_name:"sidebar-item--wip",unlisted:!0},d="\u041c\u0435\u0442\u0440\u0438\u043a\u0430",a={id:"guides/examples/metric",title:"\u041c\u0435\u0442\u0440\u0438\u043a\u0430",description:"\u041f\u0440\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/metric.mdx",sourceDirName:"guides/examples",slug:"/guides/examples/metric",permalink:"/ru/docs/guides/examples/metric",draft:!1,unlisted:!0,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/metric.mdx",tags:[],version:"current",lastUpdatedAt:1727540389e3,frontMatter:{sidebar_class_name:"sidebar-item--wip",unlisted:!0},sidebar:"guidesSidebar"},o={},u=[...r.RM];function l(e){const t={blockquote:"blockquote",h1:"h1",header:"header",p:"p",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"\u043c\u0435\u0442\u0440\u0438\u043a\u0430",children:"\u041c\u0435\u0442\u0440\u0438\u043a\u0430"})}),"\n",(0,n.jsx)(r.Ay,{ticket:"181"}),"\n",(0,n.jsxs)(t.blockquote,{children:["\n",(0,n.jsx)(t.p,{children:"\u041f\u0440\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438"}),"\n"]})]})}function p(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},5710:(e,t,i)=>{i.d(t,{R:()=>c,x:()=>d});var n=i(758);const s={},r=n.createContext(s);function c(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/ru/assets/js/58b64b99.8956d7db.js b/ru/assets/js/58b64b99.2950673b.js similarity index 99% rename from ru/assets/js/58b64b99.8956d7db.js rename to ru/assets/js/58b64b99.2950673b.js index c1fdabf784..b5827cca77 100644 --- a/ru/assets/js/58b64b99.8956d7db.js +++ b/ru/assets/js/58b64b99.2950673b.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[8056],{699:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>p,contentTitle:()=>r,default:()=>l,frontMatter:()=>c,metadata:()=>i,toc:()=>a});var t=n(6070),d=n(5710);const c={sidebar_position:10},r="\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 NextJS",i={id:"guides/tech/with-nextjs",title:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 NextJS",description:"\u0412 NextJS \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c FSD, \u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u044b \u0438\u0437-\u0437\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 NextJS \u0438 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u043c\u0438 FSD \u0432 \u0434\u0432\u0443\u0445 \u043f\u0443\u043d\u043a\u0442\u0430\u0445:",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/guides/tech/with-nextjs.mdx",sourceDirName:"guides/tech",slug:"/guides/tech/with-nextjs",permalink:"/ru/docs/guides/tech/with-nextjs",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/guides/tech/with-nextjs.mdx",tags:[],version:"current",lastUpdatedAt:1727030144e3,sidebarPosition:10,frontMatter:{sidebar_position:10},sidebar:"guidesSidebar",previous:{title:"\u041c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u0441 v1",permalink:"/ru/docs/guides/migration/from-v1"},next:{title:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 NuxtJS",permalink:"/ru/docs/guides/tech/with-nuxtjs"}},p={},a=[{value:"\u041a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u043c\u0435\u0436\u0434\u0443 FSD \u0438 NextJS \u0432 \u0441\u043b\u043e\u0435 pages",id:"pages-conflict",level:2},{value:"\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u0430\u043f\u043a\u0438 pages NextJS \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 (\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f)",id:"\u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435-\u043f\u0430\u043f\u043a\u0438-pages-nextjs-\u0432-\u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e-\u043f\u0430\u043f\u043a\u0443-\u043f\u0440\u043e\u0435\u043a\u0442\u0430-\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f",level:3},{value:"\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043f\u043a\u0438 pages \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 FSD",id:"\u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435-\u043f\u0430\u043f\u043a\u0438-pages-\u0432-\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435-fsd",level:3},{value:"\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u0430\u043f\u043a\u0438 app \u0432 NextJS",id:"app-absence",level:2},{value:"\u0418\u043c\u043f\u043e\u0440\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432 pages/_app.tsx",id:"\u0438\u043c\u043f\u043e\u0440\u0442-\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438-\u0432-pages_apptsx",level:3},{value:"\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 App Router",id:"app-router",level:2},{value:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435",id:"see-also",level:2}];function o(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,d.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435-\u0441-nextjs",children:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 NextJS"})}),"\n",(0,t.jsx)(s.p,{children:"\u0412 NextJS \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c FSD, \u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u044b \u0438\u0437-\u0437\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 NextJS \u0438 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u043c\u0438 FSD \u0432 \u0434\u0432\u0443\u0445 \u043f\u0443\u043d\u043a\u0442\u0430\u0445:\xa0"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["\u041c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0441\u043b\u043e\u0435 ",(0,t.jsx)(s.code,{children:"pages"})]}),"\n",(0,t.jsxs)(s.li,{children:["\u041a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u0438\u043b\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u043b\u043e\u044f ",(0,t.jsx)(s.code,{children:"app"})," \u0432 NextJS"]}),"\n"]}),"\n",(0,t.jsxs)(s.h2,{id:"pages-conflict",children:["\u041a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u043c\u0435\u0436\u0434\u0443 FSD \u0438 NextJS \u0432 \u0441\u043b\u043e\u0435 ",(0,t.jsx)(s.code,{children:"pages"})]}),"\n",(0,t.jsxs)(s.p,{children:["NextJS \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043f\u043a\u0443 ",(0,t.jsx)(s.code,{children:"pages"})," \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. NextJS \u043e\u0436\u0438\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u0444\u0430\u0439\u043b\u044b \u0432 \u043f\u0430\u043f\u043a\u0435 ",(0,t.jsx)(s.code,{children:"pages"})," \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c URL-\u0430\u0434\u0440\u0435\u0441\u0430\u043c.\n\u042d\u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 ",(0,t.jsx)(s.strong,{children:"\u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442"})," \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 FSD, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u0442\u0430\u043a\u043e\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u0441\u043e\u0431\u043b\u044e\u0441\u0442\u0438 \u043f\u043b\u043e\u0441\u043a\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441\u043b\u0430\u0439\u0441\u043e\u0432."]}),"\n",(0,t.jsxs)(s.h3,{id:"\u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435-\u043f\u0430\u043f\u043a\u0438-pages-nextjs-\u0432-\u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e-\u043f\u0430\u043f\u043a\u0443-\u043f\u0440\u043e\u0435\u043a\u0442\u0430-\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f",children:["\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u0430\u043f\u043a\u0438 ",(0,t.jsx)(s.code,{children:"pages"})," NextJS \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 (\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f)"]}),"\n",(0,t.jsxs)(s.p,{children:["\u041f\u043e\u0434\u0445\u043e\u0434 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043f\u0430\u043f\u043a\u0438 ",(0,t.jsx)(s.code,{children:"pages"})," NextJS \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 FSD \u0432 \u043f\u0430\u043f\u043a\u0443 ",(0,t.jsx)(s.code,{children:"pages"})," NextJS. \u042d\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\n\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 FSD \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u043f\u043a\u0438 ",(0,t.jsx)(s.code,{children:"src"}),"."]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sh",children:"\u251c\u2500\u2500 pages # \u041f\u0430\u043f\u043a\u0430 pages (NextJS)\n\u251c\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 app\n\u2502 \u251c\u2500\u2500 entities\n\u2502 \u251c\u2500\u2500 features\n\u2502 \u251c\u2500\u2500 pages # \u041f\u0430\u043f\u043a\u0430 pages (FSD)\n\u2502 \u251c\u2500\u2500 shared\n\u2502 \u251c\u2500\u2500 widgets\n"})}),"\n",(0,t.jsxs)(s.h3,{id:"\u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435-\u043f\u0430\u043f\u043a\u0438-pages-\u0432-\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435-fsd",children:["\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043f\u043a\u0438 ",(0,t.jsx)(s.code,{children:"pages"})," \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 FSD"]}),"\n",(0,t.jsxs)(s.p,{children:["\u0414\u0440\u0443\u0433\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 - \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0439 ",(0,t.jsx)(s.code,{children:"pages"})," \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 FSD, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432 \u0441 \u043f\u0430\u043f\u043a\u043e\u0439 ",(0,t.jsx)(s.code,{children:"pages"})," NextJS.\n\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0439 ",(0,t.jsx)(s.code,{children:"pages"})," \u0432 FSD \u0432 ",(0,t.jsx)(s.code,{children:"views"}),".\xa0\n\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 \u043f\u0430\u043f\u043a\u0435 ",(0,t.jsx)(s.code,{children:"src"})," \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0440\u0435\u0447\u0438\u0439 \u0441 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 NextJS."]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sh",children:"\u251c\u2500\u2500 app\n\u251c\u2500\u2500 entities\n\u251c\u2500\u2500 features\n\u251c\u2500\u2500 pages # \u041f\u0430\u043f\u043a\u0430 pages (NextJS)\n\u251c\u2500\u2500 views # \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043f\u0430\u043f\u043a\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 FSD\n\u251c\u2500\u2500 shared\n\u251c\u2500\u2500 widgets\n"})}),"\n",(0,t.jsxs)(s.p,{children:["\u0423\u0447\u0442\u0438\u0442\u0435, \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0432\u0438\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u2014 \u0432 README \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438\u043b\u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u042d\u0442\u043e \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u0447\u0430\u0441\u0442\u044c ",(0,t.jsx)(s.a,{href:"/docs/about/understanding/knowledge-types",children:'"\u043f\u0440\u043e\u0435\u043a\u0442\u043d\u044b\u0445 \u0437\u043d\u0430\u043d\u0438\u0439"'}),"."]}),"\n",(0,t.jsxs)(s.h2,{id:"app-absence",children:["\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u0430\u043f\u043a\u0438 ",(0,t.jsx)(s.code,{children:"app"})," \u0432 NextJS"]}),"\n",(0,t.jsxs)(s.p,{children:["\u0412 NextJS \u043d\u0438\u0436\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 13 \u043d\u0435\u0442 \u044f\u0432\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0438 ",(0,t.jsx)(s.code,{children:"app"}),", \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e NextJS \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0444\u0430\u0439\u043b ",(0,t.jsx)(s.code,{children:"_app.tsx"}),",\n\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0433\u0440\u0430\u0435\u0442 \u0440\u043e\u043b\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043e\u0431\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u043f\u0440\u043e\u0435\u043a\u0442\u0430."]}),"\n",(0,t.jsxs)(s.h3,{id:"\u0438\u043c\u043f\u043e\u0440\u0442-\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438-\u0432-pages_apptsx",children:["\u0418\u043c\u043f\u043e\u0440\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432 ",(0,t.jsx)(s.code,{children:"pages/_app.tsx"})]}),"\n",(0,t.jsxs)(s.p,{children:["\u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u043f\u0430\u043f\u043a\u0438 ",(0,t.jsx)(s.code,{children:"app"})," \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 NextJS, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 ",(0,t.jsx)(s.code,{children:"App"})," \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043b\u043e\u044f ",(0,t.jsx)(s.code,{children:"app"})," \u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 ",(0,t.jsx)(s.code,{children:"App"})," \u0432 ",(0,t.jsx)(s.code,{children:"pages/_app.tsx"}),", \u0447\u0442\u043e\u0431\u044b NextJS \u043c\u043e\u0433 \u0441 \u043d\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.\n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:"]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-tsx",children:"// app/providers/index.tsx\n\nconst App = ({ Component, pageProps }: AppProps) => {\n return (\n \n \n \n \n \n \n \n );\n};\n\nexport default App;\n"})}),"\n",(0,t.jsxs)(s.p,{children:["\u0417\u0430\u0442\u0435\u043c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 ",(0,t.jsx)(s.code,{children:"App"})," \u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0438\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 ",(0,t.jsx)(s.code,{children:"pages/_app.tsx"})," \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:"]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-tsx",children:"// pages/_app.tsx\n\nimport 'app/styles/index.scss'\n\nexport { default } from 'app/providers';\n"})}),"\n",(0,t.jsx)(s.h2,{id:"app-router",children:"\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 App Router"}),"\n",(0,t.jsxs)(s.p,{children:["App Router \u0441\u0442\u0430\u043b \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u043c \u0432 NextJS \u0432\u0435\u0440\u0441\u0438\u0438 13.4. App Router \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043f\u043a\u0443 ",(0,t.jsx)(s.code,{children:"app"})," \u0434\u043b\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0430\u043f\u043a\u0438 ",(0,t.jsx)(s.code,{children:"pages"}),".\n\u0414\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u043c FSD, \u0432\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u0430\u043f\u043a\u043e\u0439 ",(0,t.jsx)(s.code,{children:"app"})," NextJS \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f\n\u0434\u043b\u044f \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0430 \u0441 \u043f\u0430\u043f\u043a\u043e\u0439 ",(0,t.jsx)(s.code,{children:"pages"})," NextJS."]}),"\n",(0,t.jsxs)(s.p,{children:["\u041f\u043e\u0434\u0445\u043e\u0434 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043f\u0430\u043f\u043a\u0438 ",(0,t.jsx)(s.code,{children:"app"})," NextJS \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 FSD \u0432 \u043f\u0430\u043f\u043a\u0443 ",(0,t.jsx)(s.code,{children:"app"})," NextJS. \u042d\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\n\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 FSD \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u043f\u043a\u0438 ",(0,t.jsx)(s.code,{children:"src"}),". \u0412\u0430\u043c \u0442\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u0430\u043f\u043a\u0443 ",(0,t.jsx)(s.code,{children:"pages"}),", \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e App Router \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 Pages Router."]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{children:"\u251c\u2500\u2500 app # \u041f\u0430\u043f\u043a\u0430 app (NextJS)\n\u251c\u2500\u2500 pages # \u041f\u0443\u0441\u0442\u0430\u044f \u043f\u0430\u043f\u043a\u0430 pages (NextJS)\n\u2502 \u251c\u2500\u2500 README.md # \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u0437\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u043d\u0430 \u044d\u0442\u0430 \u043f\u0430\u043f\u043a\u0430\n\u251c\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 app # \u041f\u0430\u043f\u043a\u0430 app (FSD)\n\u2502 \u251c\u2500\u2500 entities\n\u2502 \u251c\u2500\u2500 features\n\u2502 \u251c\u2500\u2500 pages # \u041f\u0430\u043f\u043a\u0430 pages (FSD)\n\u2502 \u251c\u2500\u2500 shared\n\u2502 \u251c\u2500\u2500 widgets\n"})}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.a,{href:"https://stackblitz.com/edit/stackblitz-starters-aiez55?file=README.md",children:(0,t.jsx)(s.img,{src:"https://developer.stackblitz.com/img/open_in_stackblitz.svg",alt:"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 StackBlitz"})})}),"\n",(0,t.jsx)(s.h2,{id:"see-also",children:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://t.me/feature_sliced/3623",children:"(\u0422\u0440\u0435\u0434) \u041f\u0440\u043e pages \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0432 NextJS"})}),"\n"]})]})}function l(e={}){const{wrapper:s}={...(0,d.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(o,{...e})}):o(e)}},5710:(e,s,n)=>{n.d(s,{R:()=>r,x:()=>i});var t=n(758);const d={},c=t.createContext(d);function r(e){const s=t.useContext(c);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(d):e.components||d:r(e.components),t.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[8056],{699:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>p,contentTitle:()=>r,default:()=>l,frontMatter:()=>c,metadata:()=>i,toc:()=>a});var t=n(6070),d=n(5710);const c={sidebar_position:10},r="\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 NextJS",i={id:"guides/tech/with-nextjs",title:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 NextJS",description:"\u0412 NextJS \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c FSD, \u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u044b \u0438\u0437-\u0437\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 NextJS \u0438 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u043c\u0438 FSD \u0432 \u0434\u0432\u0443\u0445 \u043f\u0443\u043d\u043a\u0442\u0430\u0445:",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/guides/tech/with-nextjs.mdx",sourceDirName:"guides/tech",slug:"/guides/tech/with-nextjs",permalink:"/ru/docs/guides/tech/with-nextjs",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/guides/tech/with-nextjs.mdx",tags:[],version:"current",lastUpdatedAt:1727540389e3,sidebarPosition:10,frontMatter:{sidebar_position:10},sidebar:"guidesSidebar",previous:{title:"\u041c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u0441 v1",permalink:"/ru/docs/guides/migration/from-v1"},next:{title:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 NuxtJS",permalink:"/ru/docs/guides/tech/with-nuxtjs"}},p={},a=[{value:"\u041a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u043c\u0435\u0436\u0434\u0443 FSD \u0438 NextJS \u0432 \u0441\u043b\u043e\u0435 pages",id:"pages-conflict",level:2},{value:"\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u0430\u043f\u043a\u0438 pages NextJS \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 (\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f)",id:"\u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435-\u043f\u0430\u043f\u043a\u0438-pages-nextjs-\u0432-\u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e-\u043f\u0430\u043f\u043a\u0443-\u043f\u0440\u043e\u0435\u043a\u0442\u0430-\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f",level:3},{value:"\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043f\u043a\u0438 pages \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 FSD",id:"\u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435-\u043f\u0430\u043f\u043a\u0438-pages-\u0432-\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435-fsd",level:3},{value:"\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u0430\u043f\u043a\u0438 app \u0432 NextJS",id:"app-absence",level:2},{value:"\u0418\u043c\u043f\u043e\u0440\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432 pages/_app.tsx",id:"\u0438\u043c\u043f\u043e\u0440\u0442-\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438-\u0432-pages_apptsx",level:3},{value:"\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 App Router",id:"app-router",level:2},{value:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435",id:"see-also",level:2}];function o(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,d.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435-\u0441-nextjs",children:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 NextJS"})}),"\n",(0,t.jsx)(s.p,{children:"\u0412 NextJS \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c FSD, \u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u044b \u0438\u0437-\u0437\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 NextJS \u0438 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u043c\u0438 FSD \u0432 \u0434\u0432\u0443\u0445 \u043f\u0443\u043d\u043a\u0442\u0430\u0445:\xa0"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["\u041c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0441\u043b\u043e\u0435 ",(0,t.jsx)(s.code,{children:"pages"})]}),"\n",(0,t.jsxs)(s.li,{children:["\u041a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u0438\u043b\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u043b\u043e\u044f ",(0,t.jsx)(s.code,{children:"app"})," \u0432 NextJS"]}),"\n"]}),"\n",(0,t.jsxs)(s.h2,{id:"pages-conflict",children:["\u041a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u043c\u0435\u0436\u0434\u0443 FSD \u0438 NextJS \u0432 \u0441\u043b\u043e\u0435 ",(0,t.jsx)(s.code,{children:"pages"})]}),"\n",(0,t.jsxs)(s.p,{children:["NextJS \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043f\u043a\u0443 ",(0,t.jsx)(s.code,{children:"pages"})," \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. NextJS \u043e\u0436\u0438\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u0444\u0430\u0439\u043b\u044b \u0432 \u043f\u0430\u043f\u043a\u0435 ",(0,t.jsx)(s.code,{children:"pages"})," \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c URL-\u0430\u0434\u0440\u0435\u0441\u0430\u043c.\n\u042d\u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 ",(0,t.jsx)(s.strong,{children:"\u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442"})," \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 FSD, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u0442\u0430\u043a\u043e\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u0441\u043e\u0431\u043b\u044e\u0441\u0442\u0438 \u043f\u043b\u043e\u0441\u043a\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441\u043b\u0430\u0439\u0441\u043e\u0432."]}),"\n",(0,t.jsxs)(s.h3,{id:"\u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435-\u043f\u0430\u043f\u043a\u0438-pages-nextjs-\u0432-\u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e-\u043f\u0430\u043f\u043a\u0443-\u043f\u0440\u043e\u0435\u043a\u0442\u0430-\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f",children:["\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u0430\u043f\u043a\u0438 ",(0,t.jsx)(s.code,{children:"pages"})," NextJS \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 (\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f)"]}),"\n",(0,t.jsxs)(s.p,{children:["\u041f\u043e\u0434\u0445\u043e\u0434 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043f\u0430\u043f\u043a\u0438 ",(0,t.jsx)(s.code,{children:"pages"})," NextJS \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 FSD \u0432 \u043f\u0430\u043f\u043a\u0443 ",(0,t.jsx)(s.code,{children:"pages"})," NextJS. \u042d\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\n\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 FSD \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u043f\u043a\u0438 ",(0,t.jsx)(s.code,{children:"src"}),"."]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sh",children:"\u251c\u2500\u2500 pages # \u041f\u0430\u043f\u043a\u0430 pages (NextJS)\n\u251c\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 app\n\u2502 \u251c\u2500\u2500 entities\n\u2502 \u251c\u2500\u2500 features\n\u2502 \u251c\u2500\u2500 pages # \u041f\u0430\u043f\u043a\u0430 pages (FSD)\n\u2502 \u251c\u2500\u2500 shared\n\u2502 \u251c\u2500\u2500 widgets\n"})}),"\n",(0,t.jsxs)(s.h3,{id:"\u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435-\u043f\u0430\u043f\u043a\u0438-pages-\u0432-\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435-fsd",children:["\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043f\u043a\u0438 ",(0,t.jsx)(s.code,{children:"pages"})," \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 FSD"]}),"\n",(0,t.jsxs)(s.p,{children:["\u0414\u0440\u0443\u0433\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 - \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0439 ",(0,t.jsx)(s.code,{children:"pages"})," \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 FSD, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432 \u0441 \u043f\u0430\u043f\u043a\u043e\u0439 ",(0,t.jsx)(s.code,{children:"pages"})," NextJS.\n\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0439 ",(0,t.jsx)(s.code,{children:"pages"})," \u0432 FSD \u0432 ",(0,t.jsx)(s.code,{children:"views"}),".\xa0\n\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 \u043f\u0430\u043f\u043a\u0435 ",(0,t.jsx)(s.code,{children:"src"})," \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0440\u0435\u0447\u0438\u0439 \u0441 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 NextJS."]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sh",children:"\u251c\u2500\u2500 app\n\u251c\u2500\u2500 entities\n\u251c\u2500\u2500 features\n\u251c\u2500\u2500 pages # \u041f\u0430\u043f\u043a\u0430 pages (NextJS)\n\u251c\u2500\u2500 views # \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043f\u0430\u043f\u043a\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 FSD\n\u251c\u2500\u2500 shared\n\u251c\u2500\u2500 widgets\n"})}),"\n",(0,t.jsxs)(s.p,{children:["\u0423\u0447\u0442\u0438\u0442\u0435, \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0432\u0438\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u2014 \u0432 README \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438\u043b\u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u042d\u0442\u043e \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u0447\u0430\u0441\u0442\u044c ",(0,t.jsx)(s.a,{href:"/docs/about/understanding/knowledge-types",children:'"\u043f\u0440\u043e\u0435\u043a\u0442\u043d\u044b\u0445 \u0437\u043d\u0430\u043d\u0438\u0439"'}),"."]}),"\n",(0,t.jsxs)(s.h2,{id:"app-absence",children:["\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u0430\u043f\u043a\u0438 ",(0,t.jsx)(s.code,{children:"app"})," \u0432 NextJS"]}),"\n",(0,t.jsxs)(s.p,{children:["\u0412 NextJS \u043d\u0438\u0436\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 13 \u043d\u0435\u0442 \u044f\u0432\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0438 ",(0,t.jsx)(s.code,{children:"app"}),", \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e NextJS \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0444\u0430\u0439\u043b ",(0,t.jsx)(s.code,{children:"_app.tsx"}),",\n\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0433\u0440\u0430\u0435\u0442 \u0440\u043e\u043b\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043e\u0431\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u043f\u0440\u043e\u0435\u043a\u0442\u0430."]}),"\n",(0,t.jsxs)(s.h3,{id:"\u0438\u043c\u043f\u043e\u0440\u0442-\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438-\u0432-pages_apptsx",children:["\u0418\u043c\u043f\u043e\u0440\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432 ",(0,t.jsx)(s.code,{children:"pages/_app.tsx"})]}),"\n",(0,t.jsxs)(s.p,{children:["\u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u043f\u0430\u043f\u043a\u0438 ",(0,t.jsx)(s.code,{children:"app"})," \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 NextJS, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 ",(0,t.jsx)(s.code,{children:"App"})," \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043b\u043e\u044f ",(0,t.jsx)(s.code,{children:"app"})," \u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 ",(0,t.jsx)(s.code,{children:"App"})," \u0432 ",(0,t.jsx)(s.code,{children:"pages/_app.tsx"}),", \u0447\u0442\u043e\u0431\u044b NextJS \u043c\u043e\u0433 \u0441 \u043d\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.\n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:"]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-tsx",children:"// app/providers/index.tsx\n\nconst App = ({ Component, pageProps }: AppProps) => {\n return (\n \n \n \n \n \n \n \n );\n};\n\nexport default App;\n"})}),"\n",(0,t.jsxs)(s.p,{children:["\u0417\u0430\u0442\u0435\u043c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 ",(0,t.jsx)(s.code,{children:"App"})," \u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0438\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 ",(0,t.jsx)(s.code,{children:"pages/_app.tsx"})," \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:"]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-tsx",children:"// pages/_app.tsx\n\nimport 'app/styles/index.scss'\n\nexport { default } from 'app/providers';\n"})}),"\n",(0,t.jsx)(s.h2,{id:"app-router",children:"\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 App Router"}),"\n",(0,t.jsxs)(s.p,{children:["App Router \u0441\u0442\u0430\u043b \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u043c \u0432 NextJS \u0432\u0435\u0440\u0441\u0438\u0438 13.4. App Router \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043f\u043a\u0443 ",(0,t.jsx)(s.code,{children:"app"})," \u0434\u043b\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0430\u043f\u043a\u0438 ",(0,t.jsx)(s.code,{children:"pages"}),".\n\u0414\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u043c FSD, \u0432\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u0430\u043f\u043a\u043e\u0439 ",(0,t.jsx)(s.code,{children:"app"})," NextJS \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f\n\u0434\u043b\u044f \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0430 \u0441 \u043f\u0430\u043f\u043a\u043e\u0439 ",(0,t.jsx)(s.code,{children:"pages"})," NextJS."]}),"\n",(0,t.jsxs)(s.p,{children:["\u041f\u043e\u0434\u0445\u043e\u0434 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043f\u0430\u043f\u043a\u0438 ",(0,t.jsx)(s.code,{children:"app"})," NextJS \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 FSD \u0432 \u043f\u0430\u043f\u043a\u0443 ",(0,t.jsx)(s.code,{children:"app"})," NextJS. \u042d\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\n\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 FSD \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u043f\u043a\u0438 ",(0,t.jsx)(s.code,{children:"src"}),". \u0412\u0430\u043c \u0442\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u0430\u043f\u043a\u0443 ",(0,t.jsx)(s.code,{children:"pages"}),", \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e App Router \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 Pages Router."]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{children:"\u251c\u2500\u2500 app # \u041f\u0430\u043f\u043a\u0430 app (NextJS)\n\u251c\u2500\u2500 pages # \u041f\u0443\u0441\u0442\u0430\u044f \u043f\u0430\u043f\u043a\u0430 pages (NextJS)\n\u2502 \u251c\u2500\u2500 README.md # \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u0437\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u043d\u0430 \u044d\u0442\u0430 \u043f\u0430\u043f\u043a\u0430\n\u251c\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 app # \u041f\u0430\u043f\u043a\u0430 app (FSD)\n\u2502 \u251c\u2500\u2500 entities\n\u2502 \u251c\u2500\u2500 features\n\u2502 \u251c\u2500\u2500 pages # \u041f\u0430\u043f\u043a\u0430 pages (FSD)\n\u2502 \u251c\u2500\u2500 shared\n\u2502 \u251c\u2500\u2500 widgets\n"})}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.a,{href:"https://stackblitz.com/edit/stackblitz-starters-aiez55?file=README.md",children:(0,t.jsx)(s.img,{src:"https://developer.stackblitz.com/img/open_in_stackblitz.svg",alt:"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 StackBlitz"})})}),"\n",(0,t.jsx)(s.h2,{id:"see-also",children:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://t.me/feature_sliced/3623",children:"(\u0422\u0440\u0435\u0434) \u041f\u0440\u043e pages \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0432 NextJS"})}),"\n"]})]})}function l(e={}){const{wrapper:s}={...(0,d.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(o,{...e})}):o(e)}},5710:(e,s,n)=>{n.d(s,{R:()=>r,x:()=>i});var t=n(758);const d={},c=t.createContext(d);function r(e){const s=t.useContext(c);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(d):e.components||d:r(e.components),t.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/ru/assets/js/62f42e37.a9c19b45.js b/ru/assets/js/62f42e37.c2c4f4be.js similarity index 99% rename from ru/assets/js/62f42e37.a9c19b45.js rename to ru/assets/js/62f42e37.c2c4f4be.js index 9aa419cd72..6001bc0acb 100644 --- a/ru/assets/js/62f42e37.a9c19b45.js +++ b/ru/assets/js/62f42e37.c2c4f4be.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[1268],{283:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>u,frontMatter:()=>i,metadata:()=>d,toc:()=>o});var t=s(6070),r=s(5710);const i={sidebar_position:10},c="\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 NuxtJS",d={id:"guides/tech/with-nuxtjs",title:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 NuxtJS",description:"\u0412 NuxtJS \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c FSD, \u043e\u0434\u043d\u0430\u043a\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u044b \u0438\u0437-\u0437\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 NuxtJS \u0438 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u043c\u0438 FSD:",source:"@site/i18n/ru/docusaurus-plugin-content-docs/current/guides/tech/with-nuxtjs.mdx",sourceDirName:"guides/tech",slug:"/guides/tech/with-nuxtjs",permalink:"/ru/docs/guides/tech/with-nuxtjs",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/ru/docusaurus-plugin-content-docs/current/guides/tech/with-nuxtjs.mdx",tags:[],version:"current",lastUpdatedAt:1727030144e3,sidebarPosition:10,frontMatter:{sidebar_position:10},sidebar:"guidesSidebar",previous:{title:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 NextJS",permalink:"/ru/docs/guides/tech/with-nextjs"},next:{title:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 React Query",permalink:"/ru/docs/guides/tech/with-react-query"}},l={},o=[{value:"\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0430\u043b\u0438\u0430\u0441\u0430 \u0434\u043b\u044f src \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438",id:"\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435-\u0430\u043b\u0438\u0430\u0441\u0430-\u0434\u043b\u044f-src-\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438",level:2},{value:"\u0412\u044b\u0431\u043e\u0440 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u043e\u0443\u0442\u0435\u0440\u0430",id:"\u0432\u044b\u0431\u043e\u0440-\u0441\u043f\u043e\u0441\u043e\u0431\u0430-\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438-\u0440\u043e\u0443\u0442\u0435\u0440\u0430",level:2},{value:"\u0420\u043e\u0443\u0442\u0438\u043d\u0433 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0430",id:"\u0440\u043e\u0443\u0442\u0438\u043d\u0433-\u0441-\u043f\u043e\u043c\u043e\u0449\u044c\u044e-\u043a\u043e\u043d\u0444\u0438\u0433\u0430",level:3},{value:"\u0424\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0440\u043e\u0443\u0442\u0438\u043d\u0433",id:"\u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439-\u0440\u043e\u0443\u0442\u0438\u043d\u0433",level:3},{value:"\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 layouts?",id:"\u0447\u0442\u043e-\u0434\u0435\u043b\u0430\u0442\u044c-\u0441-layouts",level:2},{value:"\u0421\u043c. \u0442\u0430\u043a\u0436\u0435",id:"\u0441\u043c-\u0442\u0430\u043a\u0436\u0435",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435-\u0441-nuxtjs",children:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 NuxtJS"})}),"\n",(0,t.jsx)(n.p,{children:"\u0412 NuxtJS \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c FSD, \u043e\u0434\u043d\u0430\u043a\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u044b \u0438\u0437-\u0437\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 NuxtJS \u0438 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u043c\u0438 FSD:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e, NuxtJS \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0431\u0435\u0437 \u043f\u0430\u043f\u043a\u0438 ",(0,t.jsx)(n.code,{children:"src"}),", \u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u043a\u043e\u0440\u043d\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430."]}),"\n",(0,t.jsxs)(n.li,{children:["\u0424\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0440\u043e\u0443\u0442\u0438\u043d\u0433 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0435 ",(0,t.jsx)(n.code,{children:"pages"}),", \u0430 \u0432 FSD \u044d\u0442\u0430 \u043f\u0430\u043f\u043a\u0430 \u043e\u0442\u0432\u0435\u0434\u0435\u043d\u0430 \u043f\u043e\u0434 \u043f\u043b\u043e\u0441\u043a\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441\u043b\u0430\u0439\u0441\u043e\u0432."]}),"\n"]}),"\n",(0,t.jsxs)(n.h2,{id:"\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435-\u0430\u043b\u0438\u0430\u0441\u0430-\u0434\u043b\u044f-src-\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438",children:["\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0430\u043b\u0438\u0430\u0441\u0430 \u0434\u043b\u044f ",(0,t.jsx)(n.code,{children:"src"})," \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438"]}),"\n",(0,t.jsxs)(n.p,{children:["\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043e\u0431\u044c\u0435\u043a\u0442 ",(0,t.jsx)(n.code,{children:"alias"})," \u0432 \u0432\u0430\u0448 \u043a\u043e\u043d\u0444\u0438\u0433:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",metastring:'title="nuxt.config.ts"',children:"export default defineNuxtConfig({\n devtools: { enabled: true }, // \u041d\u0435 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a FSD, \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u044b \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\n alias: {\n \"@\": '../src'\n },\n})\n"})}),"\n",(0,t.jsx)(n.h2,{id:"\u0432\u044b\u0431\u043e\u0440-\u0441\u043f\u043e\u0441\u043e\u0431\u0430-\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438-\u0440\u043e\u0443\u0442\u0435\u0440\u0430",children:"\u0412\u044b\u0431\u043e\u0440 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u043e\u0443\u0442\u0435\u0440\u0430"}),"\n",(0,t.jsxs)(n.p,{children:["\u0412 NuxtJS \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u043e\u0443\u0442\u0438\u043d\u0433\u0430 - \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.\n\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u043c \u0440\u043e\u0443\u0442\u0438\u043d\u0433\u043e\u043c \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c index.vue \u0444\u0430\u0439\u043b\u044b \u0432 \u043f\u0430\u043f\u043a\u0430\u0445 \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 app/routes, \u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0430 - \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0440\u043e\u0443\u0442\u044b \u0432 ",(0,t.jsx)(n.code,{children:"router.options.ts"})," \u0444\u0430\u0439\u043b\u0435."]}),"\n",(0,t.jsx)(n.h3,{id:"\u0440\u043e\u0443\u0442\u0438\u043d\u0433-\u0441-\u043f\u043e\u043c\u043e\u0449\u044c\u044e-\u043a\u043e\u043d\u0444\u0438\u0433\u0430",children:"\u0420\u043e\u0443\u0442\u0438\u043d\u0433 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0430"}),"\n",(0,t.jsxs)(n.p,{children:["\u0412 \u0441\u043b\u043e\u0435 ",(0,t.jsx)(n.code,{children:"app"})," \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0444\u0430\u0439\u043b ",(0,t.jsx)(n.code,{children:"router.options.ts"}),", \u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u0438\u0437 \u043d\u0435\u0433\u043e \u043e\u0431\u044c\u0435\u043a\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0430:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",metastring:'title="app/router.options.ts"',children:"import type { RouterConfig } from '@nuxt/schema';\n\nexport default {\n routes: (_routes) => [],\n};\n\n"})}),"\n",(0,t.jsxs)(n.p,{children:["\u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 ",(0,t.jsx)(n.code,{children:"Home"})," \u0432 \u043f\u0440\u043e\u0435\u043a\u0442, \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0448\u0430\u0433\u0438:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u0430\u0439\u0441 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043b\u043e\u044f ",(0,t.jsx)(n.code,{children:"pages"})]}),"\n",(0,t.jsxs)(n.li,{children:["\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0440\u043e\u0443\u0442 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433 ",(0,t.jsx)(n.code,{children:"app/router.config.ts"})]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043b\u0430\u0439\u0441 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f ",(0,t.jsx)(n.a,{href:"https://github.com/feature-sliced/cli",children:"CLI"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"fsd pages home\n"})}),"\n",(0,t.jsxs)(n.p,{children:["\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0444\u0430\u0439\u043b ",(0,t.jsx)(n.code,{children:"home-page.vue"})," \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 ui, \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043a \u043d\u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0443\u043f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Public API"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",metastring:'title="src/pages/home/index.ts"',children:"export { default as HomePage } from './ui/home-page';\n"})}),"\n",(0,t.jsx)(n.p,{children:"\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sh",children:"|\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 app\n\u2502 \u2502 \u251c\u2500\u2500 router.config.ts\n\u2502 \u251c\u2500\u2500 pages\n\u2502 \u2502 \u251c\u2500\u2500 home\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 ui\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 home-page.vue\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 index.ts\n"})}),"\n",(0,t.jsx)(n.p,{children:"\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0440\u043e\u0443\u0442 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",metastring:'title="app/router.config.ts"',children:"import type { RouterConfig } from '@nuxt/schema'\n\nexport default {\n routes: (_routes) => [\n {\n name: 'home',\n path: '/',\n component: () => import('@/pages/home.vue').then(r => r.default || r)\n }\n ],\n}\n"})}),"\n",(0,t.jsx)(n.h3,{id:"\u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439-\u0440\u043e\u0443\u0442\u0438\u043d\u0433",children:"\u0424\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0440\u043e\u0443\u0442\u0438\u043d\u0433"}),"\n",(0,t.jsxs)(n.p,{children:["\u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 ",(0,t.jsx)(n.code,{children:"src"})," \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0432 \u043a\u043e\u0440\u043d\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441\u043b\u043e\u0438 app \u0438 pages \u0438 \u043f\u0430\u043f\u043a\u0443 routes \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043b\u043e\u044f app.\n\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u0430\u0448\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sh",children:"\u251c\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 app\n\u2502 \u2502 \u251c\u2500\u2500 routes\n\u2502 \u251c\u2500\u2500 pages # \u041f\u0430\u043f\u043a\u0430 pages, \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0451\u043d\u043d\u0430\u044f \u0437\u0430 FSD\n"})}),"\n",(0,t.jsxs)(n.p,{children:["\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b NuxtJS \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u0430\u043f\u043a\u0443 routes \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043b\u043e\u044f ",(0,t.jsx)(n.code,{children:"app"})," \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u0440\u043e\u0443\u0442\u0438\u043d\u0433\u0430, \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c ",(0,t.jsx)(n.code,{children:"nuxt.config.ts"})," \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",metastring:'title="nuxt.config.ts"',children:"export default defineNuxtConfig({\n devtools: { enabled: true }, // \u041d\u0435 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a FSD, \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u044b \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\n alias: {\n \"@\": '../src'\n },\n dir: {\n pages: './src/app/routes'\n }\n})\n"})}),"\n",(0,t.jsxs)(n.p,{children:["\u0422\u0435\u043f\u0435\u0440\u044c, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u043e\u0443\u0442\u044b \u0434\u043b\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0432\u043d\u0443\u0442\u0440\u0438 ",(0,t.jsx)(n.code,{children:"app"})," \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043a \u043d\u0438\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438\u0437 ",(0,t.jsx)(n.code,{children:"pages"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 ",(0,t.jsx)(n.code,{children:"Home"})," \u0432 \u043f\u0440\u043e\u0435\u043a\u0442, \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0448\u0430\u0433\u0438:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u0430\u0439\u0441 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043b\u043e\u044f ",(0,t.jsx)(n.code,{children:"pages"})]}),"\n",(0,t.jsxs)(n.li,{children:["\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0440\u043e\u0443\u0442 \u0432\u043d\u0443\u0442\u0440\u044c \u0441\u043b\u043e\u044f ",(0,t.jsx)(n.code,{children:"app"})]}),"\n",(0,t.jsx)(n.li,{children:"\u0421\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0438\u0437 \u0441\u043b\u0430\u0439\u0441\u0430 \u0441 \u0440\u043e\u0443\u0442\u043e\u043c"}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043b\u0430\u0439\u0441 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f ",(0,t.jsx)(n.a,{href:"https://github.com/feature-sliced/cli",children:"CLI"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"fsd pages home\n"})}),"\n",(0,t.jsxs)(n.p,{children:["\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0444\u0430\u0439\u043b ",(0,t.jsx)(n.code,{children:"home-page.vue"})," \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 ui, \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043a \u043d\u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0443\u043f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Public API"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",metastring:'title="src/pages/home/index.ts"',children:"export { default as HomePage } from './ui/home-page';\n"})}),"\n",(0,t.jsxs)(n.p,{children:["\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0440\u043e\u0443\u0442 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043b\u043e\u044f ",(0,t.jsx)(n.code,{children:"app"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sh",children:"\n\u251c\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 app\n\u2502 \u2502 \u251c\u2500\u2500 routes\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 index.vue\n\u2502 \u251c\u2500\u2500 pages\n\u2502 \u2502 \u251c\u2500\u2500 home\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 ui\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 home-page.vue\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 index.ts\n"})}),"\n",(0,t.jsxs)(n.p,{children:["\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432\u043d\u0443\u0442\u0440\u044c ",(0,t.jsx)(n.code,{children:"index.vue"})," \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0432\u0430\u0448\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-html",metastring:'title="src/app/routes/index.vue"',children:" - + + -

    🌎 FSD international community

    · 2 мин. чтения
    Anton Medvedev
    FSD core-team member
    post-cover
    +

    💥 FSD rebranding!

    · 2 мин. чтения
    Ilya Azin
    FSD core-team member
    logo-primary
    diff --git a/ru/blog/archive.html b/ru/blog/archive.html index e3f1d682c1..cd7ae77bf6 100644 --- a/ru/blog/archive.html +++ b/ru/blog/archive.html @@ -9,10 +9,10 @@ - - + + - + \ No newline at end of file diff --git a/ru/blog/international-community.html b/ru/blog/international-community.html index fb91deb101..194eca2340 100644 --- a/ru/blog/international-community.html +++ b/ru/blog/international-community.html @@ -9,11 +9,11 @@ - - + + -

    🌎 FSD international community

    · 2 мин. чтения
    Anton Medvedev
    FSD core-team member
    post-cover
    +

    🌎 FSD international community

    · 2 мин. чтения
    Anton Medvedev
    FSD core-team member
    post-cover

    TLDR:

    FSD goes out into the world, and the beginning of this is the international Discord-server

    FSD выходит в мир, и началом послужит международный Discord-сервер

    diff --git a/ru/blog/rebranding-stable.html b/ru/blog/rebranding-stable.html index a21bf7ee3a..5c7405e300 100644 --- a/ru/blog/rebranding-stable.html +++ b/ru/blog/rebranding-stable.html @@ -9,11 +9,11 @@ - - + + -

    💥 FSD rebranding!

    · 2 мин. чтения
    Ilya Azin
    FSD core-team member
    logo-primary
    +

    💥 FSD rebranding!

    · 2 мин. чтения
    Ilya Azin
    FSD core-team member
    logo-primary

    TLDR:

    We've made whole new identity for FSD website and all related projects, feel free to use brand assets

    Мы сделали полностью новую айдентику для сайта FSD и всех связанных проектов, не стесняйтесь пользоваться фирменными ассетами

    diff --git a/ru/blog/tags.html b/ru/blog/tags.html index d851b13a7c..9286e84e8b 100644 --- a/ru/blog/tags.html +++ b/ru/blog/tags.html @@ -9,10 +9,10 @@ - - + + - + \ No newline at end of file diff --git a/ru/blog/tags/brand.html b/ru/blog/tags/brand.html index b9e63be283..9c3c52f586 100644 --- a/ru/blog/tags/brand.html +++ b/ru/blog/tags/brand.html @@ -9,11 +9,11 @@ - - + + -

    1 запись с тегом "brand"

    Посмотреть все теги

    💥 FSD rebranding!

    · 2 мин. чтения
    Ilya Azin
    FSD core-team member
    logo-primary
    +

    1 запись с тегом "brand"

    Посмотреть все теги
    diff --git a/ru/blog/tags/community.html b/ru/blog/tags/community.html index e9a3adefaa..e7faaca128 100644 --- a/ru/blog/tags/community.html +++ b/ru/blog/tags/community.html @@ -9,11 +9,11 @@ - - + + -

    1 запись с тегом "community"

    Посмотреть все теги

    🌎 FSD international community

    · 2 мин. чтения
    Anton Medvedev
    FSD core-team member
    post-cover
    + diff --git a/ru/blog/tags/discord.html b/ru/blog/tags/discord.html index f9881b0481..7ccd8c9371 100644 --- a/ru/blog/tags/discord.html +++ b/ru/blog/tags/discord.html @@ -9,11 +9,11 @@ - - + + -

    1 запись с тегом "discord"

    Посмотреть все теги

    🌎 FSD international community

    · 2 мин. чтения
    Anton Medvedev
    FSD core-team member
    post-cover
    + diff --git a/ru/blog/tags/promo.html b/ru/blog/tags/promo.html index 5fafc10463..ae78d89620 100644 --- a/ru/blog/tags/promo.html +++ b/ru/blog/tags/promo.html @@ -9,11 +9,11 @@ - - + + -

    2 записи с тегом "promo"

    Посмотреть все теги

    🌎 FSD international community

    · 2 мин. чтения
    Anton Medvedev
    FSD core-team member
    post-cover
    +

    2 записи с тегом "promo"

    Посмотреть все теги

    💥 FSD rebranding!

    · 2 мин. чтения
    Ilya Azin
    FSD core-team member
    logo-primary
    diff --git a/ru/community.html b/ru/community.html index 39b2adc3c4..ce1a5cee36 100644 --- a/ru/community.html +++ b/ru/community.html @@ -9,17 +9,17 @@ - - + + -

    💫 Community

    + +
    Contributing

    HowTo, Workflow, Support

    \ No newline at end of file diff --git a/ru/community/team.html b/ru/community/team.html index 04ac2c7bd5..a645934fcb 100644 --- a/ru/community/team.html +++ b/ru/community/team.html @@ -9,15 +9,15 @@ - - + + -

    Team

    +

    Team

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    Core-team

    Champions

    Contributors

    -

    Companies

    +

    Companies

    \ No newline at end of file diff --git a/ru/docs.html b/ru/docs.html index 61978445c2..78ca6f9012 100644 --- a/ru/docs.html +++ b/ru/docs.html @@ -9,11 +9,11 @@ - - + + -

    Документация

    +

    Документация

    feature-sliced-banner

    Feature-Sliced Design (FSD) — это архитектурная методология для проектирования frontend-приложений. Проще говоря, это свод правил и соглашений по организации кода. Главная цель методологии — сделать проект понятным и структурированным, особенно в условиях регулярного изменения требований бизнеса.

    @@ -24,6 +24,6 @@
    📚 Справочник

    Справочная информация по ключевым понятиям и концепциям (для более эффективного применения на практике)

    Юниты • Изоляция • Public API
    🍰 О методологии

    Философия методологии, ее цели и место в современном фронтенде

    Миссия • Продвижение & Интеграция
    💫 Сообщество

    Ресурсы и дополнительные материалы, предоставленные сообществом

    Awesome • Команда • Участие в проекте
    -
    🛠 Примеры

    Примеры проектов, спроектированных по Feature-Sliced Design

    +
    🛠 Примеры

    Примеры проектов, спроектированных по Feature-Sliced Design

    \ No newline at end of file diff --git a/ru/docs/about.html b/ru/docs/about.html index d3d024e1b3..fa6db2d41e 100644 --- a/ru/docs/about.html +++ b/ru/docs/about.html @@ -9,11 +9,11 @@ - - + + -

    🍰 О методологии

    +
    +
    Продвижение

    О продвижении и интеграции FSD в компаниях

    Интеграция • Продвижение в команде • Продвижение в компании
    \ No newline at end of file diff --git a/ru/docs/about/alternatives.html b/ru/docs/about/alternatives.html index de01b2d190..55e6c1635a 100644 --- a/ru/docs/about/alternatives.html +++ b/ru/docs/about/alternatives.html @@ -9,11 +9,11 @@ - - + + -

    Альтернативы

    +

    Альтернативы

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    История архитектурных подходов

    Big Ball of Mud

    @@ -128,6 +128,6 @@

    Feature Drive

    +
    \ No newline at end of file diff --git a/ru/docs/about/mission.html b/ru/docs/about/mission.html index 727c01fa39..83217aaa3c 100644 --- a/ru/docs/about/mission.html +++ b/ru/docs/about/mission.html @@ -9,11 +9,11 @@ - - + + -

    Миссия

    +

    Миссия

    Здесь описаны цели и ограничения применимости методологии, которыми мы руководствуемся при разработке методологии

    +
    \ No newline at end of file diff --git a/ru/docs/about/motivation.html b/ru/docs/about/motivation.html index 9ce6d908eb..8b117b844e 100644 --- a/ru/docs/about/motivation.html +++ b/ru/docs/about/motivation.html @@ -9,11 +9,11 @@ - - + + -

    Мотивация

    +

    Мотивация

    Главная идея Feature-Sliced Design - облегчить и удешевить разработку комплексных и развивающихся проектов, на основании объединения результатов исследований, обсуждения опыта разного рода широкого круга разработчиков.

    Очевидно, что это не будет серебряной пулей, и само собой, у методологии будут свои границы применимости.

    Тем не менее, возникают резонные вопросы, касаемо целесообразности такой методологии в целом

    @@ -111,6 +111,6 @@

    См. также(Обсуждение) Методология не нужна?
  • О миссии методологии: цели и ограничения
  • Типы знаний в проекте
  • -

    +
    \ No newline at end of file diff --git a/ru/docs/about/promote/for-company.html b/ru/docs/about/promote/for-company.html index 2320dd41f7..53e70f6006 100644 --- a/ru/docs/about/promote/for-company.html +++ b/ru/docs/about/promote/for-company.html @@ -9,17 +9,17 @@ - - + + -

    Продвижение в компании

    +

    Продвижение в компании

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    Нужна ли методология проекту и компании?

    Про оправданность применения и техдолг

    Как подать методологию бизнесу?

    -

    Как подготовить и оправдать план по переезду на методологию?

    +

    Как подготовить и оправдать план по переезду на методологию?

    \ No newline at end of file diff --git a/ru/docs/about/promote/for-team.html b/ru/docs/about/promote/for-team.html index 0aedf7fc8b..7981806521 100644 --- a/ru/docs/about/promote/for-team.html +++ b/ru/docs/about/promote/for-team.html @@ -9,11 +9,11 @@ - - + + -

    Продвижение в команде

    +

    Продвижение в команде

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    +
    \ No newline at end of file diff --git a/ru/docs/about/promote/integration.html b/ru/docs/about/promote/integration.html index 975e5b9c26..c6d197ce4a 100644 --- a/ru/docs/about/promote/integration.html +++ b/ru/docs/about/promote/integration.html @@ -9,11 +9,11 @@ - - + + -

    Аспекты интеграции

    + +
    \ No newline at end of file diff --git a/ru/docs/about/promote/partial-application.html b/ru/docs/about/promote/partial-application.html index 63bd366964..20f5c1c331 100644 --- a/ru/docs/about/promote/partial-application.html +++ b/ru/docs/about/promote/partial-application.html @@ -9,14 +9,14 @@ - - + + -

    Частичное применение

    +

    Частичное применение

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    Как частично применять методологию? Имеет ли смысл? Что если игнорировать?

    -
    +
    \ No newline at end of file diff --git a/ru/docs/about/understanding/abstractions.html b/ru/docs/about/understanding/abstractions.html index 4d27543175..d02f4148b0 100644 --- a/ru/docs/about/understanding/abstractions.html +++ b/ru/docs/about/understanding/abstractions.html @@ -9,11 +9,11 @@ - - + + -

    Абстракции

    +

    Абстракции

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    Закон дырявых абстракций

    Почему так много абстракций

    @@ -31,6 +31,6 @@

    См. также
  • Про необходимость в новых слоях
  • Про сложность в понимании методологии и слоев
  • -

    +
    \ No newline at end of file diff --git a/ru/docs/about/understanding/architecture.html b/ru/docs/about/understanding/architecture.html index 49c71989da..711c511769 100644 --- a/ru/docs/about/understanding/architecture.html +++ b/ru/docs/about/understanding/architecture.html @@ -9,11 +9,11 @@ - - + + -

    Об архитектуре

    +
    +
    \ No newline at end of file diff --git a/ru/docs/about/understanding/knowledge-types.html b/ru/docs/about/understanding/knowledge-types.html index f2e5f15335..6e81338e2d 100644 --- a/ru/docs/about/understanding/knowledge-types.html +++ b/ru/docs/about/understanding/knowledge-types.html @@ -9,11 +9,11 @@ - - + + -

    Типы знаний в проекте

    + +
    \ No newline at end of file diff --git a/ru/docs/about/understanding/naming.html b/ru/docs/about/understanding/naming.html index 6ae361f21a..382d2384cf 100644 --- a/ru/docs/about/understanding/naming.html +++ b/ru/docs/about/understanding/naming.html @@ -9,11 +9,11 @@ - - + + -

    Нейминг

    +

    Нейминг

    У разных разработчиков различный опыт и контекст, что может привести к недопониманию в команде, когда одни и те же сущности называются по-разному. Например:

    +
    \ No newline at end of file diff --git a/ru/docs/about/understanding/needs-driven.html b/ru/docs/about/understanding/needs-driven.html index 9835a724f8..700385a7f7 100644 --- a/ru/docs/about/understanding/needs-driven.html +++ b/ru/docs/about/understanding/needs-driven.html @@ -9,11 +9,11 @@ - - + + -

    О понимании потребностей и о формулировке задач

    +

    О понимании потребностей и о формулировке задач

    TL;DR

    Не получается сформулировать цель, которую будет решать новая фича? А может проблема в том, что сама задача не сформулирована? Смысл ещё и в том, чтобы методология помогла вытащить наружу проблемное определение задач и целей

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

    Зачем?

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

    @@ -125,6 +125,6 @@

    См. также
  • (Обсуждение) Как разбить функциональность и что из себя она представляет
  • (Статья) "How to better organize your applications"
  • -

    +
    \ No newline at end of file diff --git a/ru/docs/about/understanding/signals.html b/ru/docs/about/understanding/signals.html index 00cbb8826b..2a8f04755f 100644 --- a/ru/docs/about/understanding/signals.html +++ b/ru/docs/about/understanding/signals.html @@ -9,11 +9,11 @@ - - + + -

    Сигналы архитектуры

    +

    Сигналы архитектуры

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    Если есть ограничение со стороны архитектуры - значит на то есть явные причины, и последствия, если их игнорировать

    @@ -27,6 +27,6 @@

    См. также(Тред) Про фундаментальность архитектуры
  • (Тред) Про подсвечивание слабых мест
  • (Тред) Как понять, что модель данных разбухла
  • -

    +
    \ No newline at end of file diff --git a/ru/docs/branding.html b/ru/docs/branding.html index fb3e77d267..2e02bf776c 100644 --- a/ru/docs/branding.html +++ b/ru/docs/branding.html @@ -9,11 +9,11 @@ - - + + -

    Рекомендации по брендингу

    +

    Рекомендации по брендингу

    Визуальная айдентика FSD основана на его ключевых концепциях: Layered, Sliced self-contained parts, Parts & Compose, Segmented. Но мы также стремимся к простой и красивой айдентике, которая бы отражала философию FSD и была бы легко узнаваемой.

    Пожалуйста, используйте айдентику FSD "as-is", без изменений, но с нашими ассетами для вашего удобства. Этот бренд-гайд поможет вам использовать айдентику FSD корректно.

    @@ -43,6 +43,6 @@

    См. такжеОбсуждение (github)
  • История ребрендинга с референсами (figma)
  • Демо ребрендинга
  • -

    +
    \ No newline at end of file diff --git a/ru/docs/get-started.html b/ru/docs/get-started.html index d3c80b3749..8d346e5b34 100644 --- a/ru/docs/get-started.html +++ b/ru/docs/get-started.html @@ -9,15 +9,15 @@ - - + + -

    🚀 Быстрый старт

    + +
    \ No newline at end of file diff --git a/ru/docs/get-started/cheatsheet.html b/ru/docs/get-started/cheatsheet.html index b8c6c66c93..0b8da2db5a 100644 --- a/ru/docs/get-started/cheatsheet.html +++ b/ru/docs/get-started/cheatsheet.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Памятка по декомпозиции

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Памятка по декомпозиции

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

    Выбор слоя

    Скачать PDF

    @@ -33,6 +33,6 @@

    См. также(Тред) Про разницу между фичами и сущностями
  • (Тред) Про разницу между фичами и сущностями (2)
  • (Тред) Про применение критериев при декомпозиции
  • -

    +
    \ No newline at end of file diff --git a/ru/docs/get-started/faq.html b/ru/docs/get-started/faq.html index e629c0a84c..c7f76d0967 100644 --- a/ru/docs/get-started/faq.html +++ b/ru/docs/get-started/faq.html @@ -9,11 +9,11 @@ - - + + -

    FAQ

    +

    FAQ

    к сведению

    Свой вопрос можно задать в Telegram-чате, Discord-сообществе и GitHub Discussions.

    Существует ли тулкит или линтер?

    Есть официальный конфиг для ESLint — @feature-sliced/eslint-config, и плагин для ESLint — @conarti/eslint-plugin-feature-sliced, созданный участником сообщества Александром Белоусом. Мы будем рады вашим вкладам в эти проекты или созданию своих!

    @@ -40,6 +40,6 @@

    Как мне работать с контекстом авторизации?

    -

    Ответили здесь

    +

    Ответили здесь

    \ No newline at end of file diff --git a/ru/docs/get-started/overview.html b/ru/docs/get-started/overview.html index b3a86acc54..5894463f3c 100644 --- a/ru/docs/get-started/overview.html +++ b/ru/docs/get-started/overview.html @@ -9,11 +9,11 @@ - - + + -

    Обзор

    +

    Обзор

    Feature-Sliced Design (FSD) — это архитектурная методология для проектирования фронтенд-приложений. Проще говоря, это набор правил и соглашений по организации кода. Главная цель этой методологии — сделать проект понятнее и стабильнее в условиях постоянно меняющихся бизнес-требований.

    Помимо набора правил, FSD — это также целый инструментарий. У нас есть линтер для проверки архитектуры вашего проекта, генераторы папок через CLI или IDE, а также богатая библиотека примеров.

    Подходит ли FSD мне?

    @@ -129,6 +129,6 @@

    Следующи
  • Хотите разобраться в том, как мыслить по-FSD-шному? Прочтите Туториал.
  • Предпочитаете учиться на примерах? У нас их много в разделе Примеры.
  • Есть вопросы? Загляните в наш чат Telegram и спросите у сообщества.
  • -

    +
    \ No newline at end of file diff --git a/ru/docs/get-started/tutorial.html b/ru/docs/get-started/tutorial.html index bb9792c441..a0d19888c3 100644 --- a/ru/docs/get-started/tutorial.html +++ b/ru/docs/get-started/tutorial.html @@ -9,11 +9,11 @@ - - + + -

    Туториал

    +

    Туториал

    Часть 1. На бумаге

    В этом руководстве мы рассмотрим приложение Real World App, также известное как Conduit. Conduit является упрощённым клоном Medium — он позволяет вам читать и писать статьи в блогах, а также комментировать статьи других людей.

    Главная страница Conduit

    @@ -272,6 +272,6 @@

    app/routes/editor._index.tsx, app/routes/editor.$slug.tsx (одинаковое содержимое)
    import { ArticleEditPage } from "pages/article-edit";

    export { loader, action } from "pages/article-edit";

    export default ArticleEditPage;

    Мы закончили! Войдите в систему и попробуйте создать новую статью. Или “забудьте” написать статью и посмотрите, как сработает валидация.

    Редактор статей Conduit, в поле заголовка которого написано “New article”, а остальные поля пусты. Над формой есть две ошибки: “Describe what this article is about” и “Write the article itself”.

    Редактор статей Conduit, в поле заголовка которого написано “New article”, а остальные поля пусты. Над формой есть две ошибки: “Describe what this article is about” и “Write the article itself”.
    -

    Страницы профиля и настроек очень похожи на страницы чтения и редактирования статей, они оставлены в качестве упражнения для читателя, то есть для вас :)

    +

    Страницы профиля и настроек очень похожи на страницы чтения и редактирования статей, они оставлены в качестве упражнения для читателя, то есть для вас :)

    \ No newline at end of file diff --git a/ru/docs/guides.html b/ru/docs/guides.html index 32714a13c1..e4d6267d46 100644 --- a/ru/docs/guides.html +++ b/ru/docs/guides.html @@ -9,11 +9,11 @@ - - + + -

    🎯 Гайды

    +

    🎯 Гайды

    PRACTICE-ORIENTED

    Практические гайды и примеры по применению Feature-Sliced Design. В этом же разделе описаны гайды по миграции и хендбук пагубных практик. Наиболее полезно, когда вы пытаетесь реализовать что-то конкретное или хотите посмотреть на методологию "в бою"

    Главное

    @@ -21,6 +21,6 @@

    Главное
    Примеры

    Практические примеры по применению методологии

    Авторизация • Типы • Лейаут страницы
    Миграция

    Гайды по миграции с легаси проектов

    Легаси • FSv1
    Технологии

    Ориентированные на конкретные фреймворки гайды по использованию

    -
    Code Issues (Smells)

    Общие архитектурные проблемы для выявления в коде

    Десегментация • Роутинг • Кросс-импорты

    +
    Code Issues (Smells)

    Общие архитектурные проблемы для выявления в коде

    Десегментация • Роутинг • Кросс-импорты
    \ No newline at end of file diff --git a/ru/docs/guides/examples.html b/ru/docs/guides/examples.html index efaff856a5..cc95ffcf2d 100644 --- a/ru/docs/guides/examples.html +++ b/ru/docs/guides/examples.html @@ -9,16 +9,16 @@ - - + + -

    Примеры

    +
    +
    Лейауты страниц

    Основные кейсы с лейаутами

    Где хранить • Использование виджетов в лейауте
    \ No newline at end of file diff --git a/ru/docs/guides/examples/auth.html b/ru/docs/guides/examples/auth.html index f00bbf2add..d94845f4e3 100644 --- a/ru/docs/guides/examples/auth.html +++ b/ru/docs/guides/examples/auth.html @@ -9,11 +9,11 @@ - - + + -

    Авторизация

    +

    Авторизация

    В общих чертах авторизация состоит из следующих этапов:

    1. Получить учетные данные от пользователя
    2. @@ -164,6 +164,6 @@

      Автоматический логаут

      -

      Не забудьте предусмотреть ситуации сбоя запроса на логаут или сбоя запроса на обновление токена. В обоих случаях вам следует очистить хранилище токенов. Если вы храните свой токен в Entities, этот код можно поместить в сегмент model, поскольку это чистая бизнес-логика. Если вы храните токен в Shared, размещение этой логики в shared/api может раздуть сегмент и размыть его предназначение. Если вы замечаете, что ваш сегмент api содержит две несвязанные вещи, рассмотрите возможность выделения логики управления токенами в другой сегмент, например, shared/auth.

    +

    Не забудьте предусмотреть ситуации сбоя запроса на логаут или сбоя запроса на обновление токена. В обоих случаях вам следует очистить хранилище токенов. Если вы храните свой токен в Entities, этот код можно поместить в сегмент model, поскольку это чистая бизнес-логика. Если вы храните токен в Shared, размещение этой логики в shared/api может раздуть сегмент и размыть его предназначение. Если вы замечаете, что ваш сегмент api содержит две несвязанные вещи, рассмотрите возможность выделения логики управления токенами в другой сегмент, например, shared/auth.

    \ No newline at end of file diff --git a/ru/docs/guides/examples/autocompleted.html b/ru/docs/guides/examples/autocompleted.html index 19b6c1fbb8..ee388a16eb 100644 --- a/ru/docs/guides/examples/autocompleted.html +++ b/ru/docs/guides/examples/autocompleted.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Автокомплит

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Автокомплит

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    Про декомпозицию по слоям

    @@ -21,6 +21,6 @@

    См. также

    +
    \ No newline at end of file diff --git a/ru/docs/guides/examples/browser-api.html b/ru/docs/guides/examples/browser-api.html index 47271386e2..a97c905f0a 100644 --- a/ru/docs/guides/examples/browser-api.html +++ b/ru/docs/guides/examples/browser-api.html @@ -9,15 +9,15 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Browser API

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Browser API

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    Про работу с Browser API: localStorage, audioApi, bluetoothAPI и т.п.

    Подробнее про идею можно спросить @alex_novi

    -
    +
    \ No newline at end of file diff --git a/ru/docs/guides/examples/cms.html b/ru/docs/guides/examples/cms.html index b2d291b7cd..5e00be79b9 100644 --- a/ru/docs/guides/examples/cms.html +++ b/ru/docs/guides/examples/cms.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    CMS

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    CMS

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    Фичи бывают разные

    В некоторых проектах весь функционал сосредоточен в данных с сервера

    @@ -26,6 +26,6 @@

    https://t.me/feature_sliced/1553

    -

    +
    \ No newline at end of file diff --git a/ru/docs/guides/examples/feedback.html b/ru/docs/guides/examples/feedback.html index 62b8190f59..754a29077d 100644 --- a/ru/docs/guides/examples/feedback.html +++ b/ru/docs/guides/examples/feedback.html @@ -9,14 +9,14 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Обратная связь

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Обратная связь

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    Errors, Alerts, Notifications, ...

    -
    +
    \ No newline at end of file diff --git a/ru/docs/guides/examples/i18n.html b/ru/docs/guides/examples/i18n.html index 5942600a69..ef4346694b 100644 --- a/ru/docs/guides/examples/i18n.html +++ b/ru/docs/guides/examples/i18n.html @@ -9,17 +9,17 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    i18n

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    i18n

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    Куда положить? Как с этим работать?

    +
    \ No newline at end of file diff --git a/ru/docs/guides/examples/metric.html b/ru/docs/guides/examples/metric.html index bf99e79bda..17718a8ea2 100644 --- a/ru/docs/guides/examples/metric.html +++ b/ru/docs/guides/examples/metric.html @@ -9,14 +9,14 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Метрика

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Метрика

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    Про способы инициализировать метрики в приложении

    -
    +
    \ No newline at end of file diff --git a/ru/docs/guides/examples/monorepo.html b/ru/docs/guides/examples/monorepo.html index b951972869..be800459b3 100644 --- a/ru/docs/guides/examples/monorepo.html +++ b/ru/docs/guides/examples/monorepo.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Монорепозитории

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Монорепозитории

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    Про применимость для монорепозиториев, про bff, про микроаппы

    @@ -22,6 +22,6 @@

    См. также
  • (Дискуссия) Про монорепозитории и подключаемые модули-пакеты
  • (Тред) Про применение для монорепозитория
  • -

    +
    \ No newline at end of file diff --git a/ru/docs/guides/examples/page-layout.html b/ru/docs/guides/examples/page-layout.html index 2b72a78e93..16ab8afd07 100644 --- a/ru/docs/guides/examples/page-layout.html +++ b/ru/docs/guides/examples/page-layout.html @@ -9,11 +9,11 @@ - - + + -

    Лейауты страниц

    +

    Лейауты страниц

    Это руководство рассматривает абстракцию лейаута страницы — когда несколько страниц имеют одинаковую структуру, отличаясь только основным содержимым.

    к сведению

    Вашего вопроса нет в этом руководстве? Напишите свой вопрос, оставив отзыв к этой статье (синяя кнопка справа), и мы рассмотрим возможность расширения этого руководства!

    Простой лейаут

    @@ -51,6 +51,6 @@

    Дополнительные материалы

    • Пример создания лейаута с аутентификацией с помощью React и Remix (аналогичен React Router) можно найти в туториале.
    • -
    +
    \ No newline at end of file diff --git a/ru/docs/guides/examples/platforms.html b/ru/docs/guides/examples/platforms.html index 19bcef5915..82b36eaac9 100644 --- a/ru/docs/guides/examples/platforms.html +++ b/ru/docs/guides/examples/platforms.html @@ -9,14 +9,14 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Desktop/Touch платформы

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Desktop/Touch платформы

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    Про применение методологии для desktop/touch

    -
    +
    \ No newline at end of file diff --git a/ru/docs/guides/examples/ssr.html b/ru/docs/guides/examples/ssr.html index b350263190..83e3f03c7f 100644 --- a/ru/docs/guides/examples/ssr.html +++ b/ru/docs/guides/examples/ssr.html @@ -9,14 +9,14 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    SSR

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    SSR

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    Про реализацию SSR с применением методологии

    -
    +
    \ No newline at end of file diff --git a/ru/docs/guides/examples/theme.html b/ru/docs/guides/examples/theme.html index 3bc32b99ae..b44b21108c 100644 --- a/ru/docs/guides/examples/theme.html +++ b/ru/docs/guides/examples/theme.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Темизация

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Темизация

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    Куда положить работу с темой и палитрой?

    @@ -22,6 +22,6 @@

    Рассуждения про расположение theme, i18n логики

    https://youtu.be/b_nBvHWqxP8?t=133

    -
    +
    \ No newline at end of file diff --git a/ru/docs/guides/examples/types.html b/ru/docs/guides/examples/types.html index 09518bbcc8..712295172d 100644 --- a/ru/docs/guides/examples/types.html +++ b/ru/docs/guides/examples/types.html @@ -9,11 +9,11 @@ - - + + -

    Типы

    +

    Типы

    В этом руководстве рассматриваются типы данных из типизированных языков, таких как TypeScript, и где они вписываются в FSD.

    к сведению

    Вашего вопроса нет в этом руководстве? Напишите свой вопрос, оставив отзыв к этой статье (синяя кнопка справа), и мы рассмотрим возможность расширения этого руководства!

    Типы-утилиты

    @@ -138,6 +138,6 @@

    shared/lib/untyped-packages/use-react-screenshot.d.ts
    // У этой библиотеки нет типов, и мы не хотели заморачиваться с написанием своих.
    declare module "use-react-screenshot";

    Автогенерация типов

    -

    Часто бывает полезно генерировать типы из внешних источников, например, генерировать типы бэкенда из схемы OpenAPI. В этом случае создайте специальное место в вашем коде для этих типов, например, shared/api/openapi. Идеально, если вы также включите README в эту папку, который описывает, что это за файлы, как их перегенерировать и т. д.

    +

    Часто бывает полезно генерировать типы из внешних источников, например, генерировать типы бэкенда из схемы OpenAPI. В этом случае создайте специальное место в вашем коде для этих типов, например, shared/api/openapi. Идеально, если вы также включите README в эту папку, который описывает, что это за файлы, как их перегенерировать и т. д.

    \ No newline at end of file diff --git a/ru/docs/guides/examples/white-labels.html b/ru/docs/guides/examples/white-labels.html index 8c8706a075..fcbf50dac1 100644 --- a/ru/docs/guides/examples/white-labels.html +++ b/ru/docs/guides/examples/white-labels.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    White Labels

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    White Labels

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    Figma, brand uikit, templates, адаптируемость к брендам

    @@ -22,6 +22,6 @@

    См. также
  • (Тред) Про применение для white-labels (брендированных) проектов
  • (Презентация) Про white-labels приложения и дизайн
  • -

    +
    \ No newline at end of file diff --git a/ru/docs/guides/issues/cross-imports.html b/ru/docs/guides/issues/cross-imports.html index 4aedfdde2e..e93d14b513 100644 --- a/ru/docs/guides/issues/cross-imports.html +++ b/ru/docs/guides/issues/cross-imports.html @@ -9,11 +9,11 @@ - - + + -

    Кросс-импорты

    +

    Кросс-импорты

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    Кросс-импорты появляются тогда, когда слой/абстракция начинает брать слишком много ответственности, чем должна. Именно поэтому методология выделяет новые слои, которые позволяют расцепить эти кросс-импорты

    @@ -25,6 +25,6 @@

    См. также(Тред) Про кросс-импорты и ответственность
  • (Тред) Про импорты между сегментами
  • (Тред) Про кросс-импорты внутри shared
  • -

    +
    \ No newline at end of file diff --git a/ru/docs/guides/issues/desegmented.html b/ru/docs/guides/issues/desegmented.html index 9d106e8cfb..59ee3c9774 100644 --- a/ru/docs/guides/issues/desegmented.html +++ b/ru/docs/guides/issues/desegmented.html @@ -9,11 +9,11 @@ - - + + -

    Десегментация

    +

    Десегментация

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    Ситуация

    Очень часто на проектах встречается ситуация, когда модули, относящиеся к конкретному домену из предметной области, излишне десегментированы и раскиданы по проекту

    @@ -41,6 +41,6 @@

    См. также
  • (Статья) Про Low Coupling и High Cohesion наглядно
  • (Статья) Low Coupling и High Cohesion. Закон Деметры
  • -

    +
    \ No newline at end of file diff --git a/ru/docs/guides/issues/routes.html b/ru/docs/guides/issues/routes.html index e29ffd1f4d..c43d4714ab 100644 --- a/ru/docs/guides/issues/routes.html +++ b/ru/docs/guides/issues/routes.html @@ -9,11 +9,11 @@ - - + + -

    Роутинг

    +

    Роутинг

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    Ситуация

    Урлы к страницам хардкодятся в слоях ниже pages

    @@ -30,6 +30,6 @@

    См. также
  • (Тред) Что если "зашивать" роутинг в entities/features/widgets
  • (Тред) Почему размазывае логику роутов только в pages
  • -

    +
    \ No newline at end of file diff --git a/ru/docs/guides/migration/from-legacy.html b/ru/docs/guides/migration/from-legacy.html index b71bc30a49..c877935589 100644 --- a/ru/docs/guides/migration/from-legacy.html +++ b/ru/docs/guides/migration/from-legacy.html @@ -9,11 +9,11 @@ - - + + -

    Миграция с legacy

    +

    Миграция с legacy

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    В статье агрегируется опыт нескольких компаний и проектов по переезду на Feature-Sliced Design с разными изначальными условиями

    @@ -45,6 +45,6 @@

    См. такжеВ докладе в том числе рассмотрены подходы к архитектуре и стоимости рефакторинга -

    +
    \ No newline at end of file diff --git a/ru/docs/guides/migration/from-v1.html b/ru/docs/guides/migration/from-v1.html index 3938d7ae4e..51f7708ad1 100644 --- a/ru/docs/guides/migration/from-v1.html +++ b/ru/docs/guides/migration/from-v1.html @@ -9,19 +9,19 @@ - - + + -

    Миграция с v1

    +

    Миграция с v1

    Зачем v2?

    Изначальная концепция feature-slices была заявлена еще в 2018 году.

    -

    С тех пор прошло много трансформаций методологии, но при этом сохранялись базовые принципы:

    +

    С тех пор прошло много трансформаций методологии, но при этом сохранялись базовые принципы:

    • Использование стандартизированной структуры фронтенд-проектов
    • Разбиение приложения в первую очередь - согласно бизнес-логике
    • Использование изолированных фичей, для предотвращения неявных сайд-эффектов и циклических зависимостей
    • -
    • Использование Public API с запретом лезть "во внутренности" модуля
    • +
    • Использование Public API с запретом лезть "во внутренности" модуля

    При этом, в прежней версии методологии все равно оставались слабые места, которые

      @@ -76,7 +76,7 @@

      BREAKI

      (иными словами - каждый модуль слоя - может импортировать только модули нижележащих слоев, но не выше)

    • -

      Чем ниже расположен слой модуля - тем больше опасности и ответственности, чтобы внести в него изменения

      +

      Чем ниже расположен слой модуля - тем больше опасности и ответственности, чтобы внести в него изменения

      (потому что, как правило - более переиспользуемыми являются именно нижележащие слои)

    @@ -150,7 +150,7 @@

    Layersслой переиспользуемого инфраструктурного кода 🔥 +
  • /sharedслой переиспользуемого инфраструктурного кода 🔥
    • Прежние варианты: shared, common, lib
    @@ -194,6 +194,6 @@

    См. такжеСравнение с v1 (community-chat)

  • Новые идеи v2 с пояснениями (atomicdesign-chat)
  • Обсуждение абстракций и нейминга для новой версии методологии (v2)
  • -

    +
    \ No newline at end of file diff --git a/ru/docs/guides/tech/with-nextjs.html b/ru/docs/guides/tech/with-nextjs.html index adc14e67cc..09e1da8119 100644 --- a/ru/docs/guides/tech/with-nextjs.html +++ b/ru/docs/guides/tech/with-nextjs.html @@ -9,11 +9,11 @@ - - + + -

    Использование с NextJS

    +
    +
    \ No newline at end of file diff --git a/ru/docs/guides/tech/with-nuxtjs.html b/ru/docs/guides/tech/with-nuxtjs.html index d99cca4699..83ed497c52 100644 --- a/ru/docs/guides/tech/with-nuxtjs.html +++ b/ru/docs/guides/tech/with-nuxtjs.html @@ -9,11 +9,11 @@ - - + + -

    Использование с NuxtJS

    +

    Использование с NuxtJS

    В NuxtJS проекте возможно реализовать FSD, однако возникают конфликты из-за различий между требованиями к структуре проекта NuxtJS и принципами FSD:

    +
    \ No newline at end of file diff --git a/ru/docs/guides/tech/with-react-query.html b/ru/docs/guides/tech/with-react-query.html index 4f634951a8..a8b56568de 100644 --- a/ru/docs/guides/tech/with-react-query.html +++ b/ru/docs/guides/tech/with-react-query.html @@ -9,11 +9,11 @@ - - + + -

    Использование с React Query

    +

    Использование с React Query

    Проблема «куда положить ключи»

    Решение - разбить по сущностям

    Если в проекте уже присутствует разделение на сущности, и каждый запрос соответствует одной сущности, @@ -88,6 +88,6 @@

    Полезные с
  • (GitHub) Пример проекта
  • (CodeSandbox) Пример проекта
  • О фабрике запросов
  • -

    +
    \ No newline at end of file diff --git a/ru/docs/guides/tech/with-sveltekit.html b/ru/docs/guides/tech/with-sveltekit.html index 31d9061154..655193a9dd 100644 --- a/ru/docs/guides/tech/with-sveltekit.html +++ b/ru/docs/guides/tech/with-sveltekit.html @@ -9,11 +9,11 @@ - - + + -

    Использование с SvelteKit

    +

    Использование с SvelteKit

    В SvelteKit проекте возможно реализовать FSD, однако возникают конфликты из-за различий между требованиями к структуре проекта SvelteKit и принципами FSD:

    +
    \ No newline at end of file diff --git a/ru/docs/reference.html b/ru/docs/reference.html index 88baff52d1..e7a719a8e6 100644 --- a/ru/docs/reference.html +++ b/ru/docs/reference.html @@ -9,15 +9,15 @@ - - + + -

    📚 Справочник

    +
    +
    Public API

    Практики по проектированию устойчивых и удобных для интеграции модулей

    \ No newline at end of file diff --git a/ru/docs/reference/isolation.html b/ru/docs/reference/isolation.html index c122d838d4..a9dae7c66b 100644 --- a/ru/docs/reference/isolation.html +++ b/ru/docs/reference/isolation.html @@ -9,11 +9,11 @@ - - + + -

    Изоляция модулей

    +

    Изоляция модулей

    В рамках методологии все модули распределены по зонам ответственности (layer, slice, segment)

    Слои, в свою очередь, организованы вертикально:

    +
    \ No newline at end of file diff --git a/ru/docs/reference/isolation/coupling-cohesion.html b/ru/docs/reference/isolation/coupling-cohesion.html index 15ed7f6914..8b19a84e2f 100644 --- a/ru/docs/reference/isolation/coupling-cohesion.html +++ b/ru/docs/reference/isolation/coupling-cohesion.html @@ -9,11 +9,11 @@ - - + + -

    Low Coupling & High Cohesion

    +

    Low Coupling & High Cohesion

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

    coupling-cohesion-themed

    В рамках методологии это достигается через:

    @@ -78,6 +78,6 @@

    См. также
  • (Статья) Low Coupling и High Cohesion. Закон Деметры
  • (Презентация) Про принципы проектирования (включая Low Coupling & High Cohesion)
  • -

    +
    \ No newline at end of file diff --git a/ru/docs/reference/isolation/decouple-entities.html b/ru/docs/reference/isolation/decouple-entities.html index 8a1a8610a2..9c1d29dc2e 100644 --- a/ru/docs/reference/isolation/decouple-entities.html +++ b/ru/docs/reference/isolation/decouple-entities.html @@ -9,11 +9,11 @@ - - + + -

    Decouple entities

    +

    Decouple entities

    WIP

    Статья находится в процессе написания

    Чтобы ускорить ее появление, можно:


    🍰 Stay tuned!

    Про кросс-импорты типов, адаптеры и про то - как явно выстраивать связи между сущностями

    @@ -27,6 +27,6 @@

    См. также(Тред) Пример декомпозиции для "связных сущностей" (users/pets/friends)
  • (Тред) Про кросс-импорты типов/адаптеров в сущностях
  • (Тред) Про границы сущностей и фич
  • -

    +
    \ No newline at end of file diff --git a/ru/docs/reference/layers.html b/ru/docs/reference/layers.html index 1a398b5b2c..3143b11f02 100644 --- a/ru/docs/reference/layers.html +++ b/ru/docs/reference/layers.html @@ -9,11 +9,11 @@ - - + + -

    Слои

    +

    Слои

    Слои - это первый уровень организационной иерархии в Feature-Sliced Design. Их цель - разделить код на основе того, сколько ответственности ему требуется и от скольких других модулей в приложении он зависит.

    примечание

    На этой странице модуль означает внутренний модуль в приложении - файл или каталог с индексным файлом. Не путать с npm-пакетами.

    Каждый слой несет в себе особый семантический смысл, помогающий определить, какую ответственность следует возложить на модуль в вашем коде. Названия и значения слоёв стандартизированы для всех проектов, построенных с использованием Feature-Sliced Design.

    @@ -87,6 +87,6 @@

    AppРоутер
  • Хранилища данных и прочие провайдеры контекста
  • Инициализация аналитики
  • -

    +
    \ No newline at end of file diff --git a/ru/docs/reference/public-api.html b/ru/docs/reference/public-api.html index 1e22105830..90f7bd2d57 100644 --- a/ru/docs/reference/public-api.html +++ b/ru/docs/reference/public-api.html @@ -9,11 +9,11 @@ - - + + -

    Публичное API модуля приложения

    +

    Публичное API модуля приложения

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

    Цели

    Удобство использования и интеграции модуля достигается через выполнение ряда целей:

    @@ -140,6 +140,6 @@

    См. также(Обсуждение) Public API абстракции
  • Принципы SOLID
  • Паттерны GRASP
  • -

    +
    \ No newline at end of file diff --git a/ru/docs/reference/slices-segments.html b/ru/docs/reference/slices-segments.html index e48c418f44..ce82cbf76b 100644 --- a/ru/docs/reference/slices-segments.html +++ b/ru/docs/reference/slices-segments.html @@ -9,11 +9,11 @@ - - + + -

    Слайсы и сегменты

    +

    Слайсы и сегменты

    Слайсы

    Слайсы - это второй уровень в организационной иерархии Feature-Sliced Design. Их основное назначение - группировать код по его значению для продукта, бизнеса или просто приложения.

    Имена слайсов не стандартизированы, поскольку они напрямую определяются бизнес-областью вашего приложения. Например, фотогалерея может иметь слайсы photo, create-album, gallery-page. Для социальной сети потребуются другие слайсы, например, post, add-user-to-friends, news-feed.

    @@ -38,6 +38,6 @@

    Сегме

    Другие сегменты допускаются, но должны создаваться только по необходимости. Наиболее распространенными местами для других сегментов являются слои App и Shared, где срезы не имеют смысла.

    Примеры

    -
    Layeruimodellibapi
    SharedUI-библиотекаОбычно не используетсяУтилитарные модули из нескольких связанных файлов.
    Если вам нужны индивидуальные вспомогательные функции, обратите внимание на библиотеки утилит, например, lodash-es.
    Примитивный API-клиент с дополнительными функциями, такими как аутентификация или кэширование.
    EntitiesСкелет бизнес-сущности со слотами для интерактивных элементовХранилище объектов этой сущности, а также функции для обработки этих объектов.
    Этот сегмент лучше всего подходит для хранения данных с сервера. Если вы используете TanStack Query или другие методы неявного хранения, вы можете опустить этот сегмент.
    Функции над объектами этой сущности, не связанные с хранением данныхAPI-методы, использующие API-клиент из Shared для упрощения коммуникации с бэкендом
    FeaturesИнтерактивные элементы, позволяющие пользователям использовать эту функциюБизнес-логика и хранилище инфраструктурных данных, если требуется (например, текущая тема приложения). Здесь лежит код, который непосредственно создает пользу для пользователяИнфраструктурный код, который позволяет сегменту model более кратко описать бизнес-логикуAPI-методы, представляющие эту функцию на бэкенде.
    Может объединять API-методы из Entities.
    WidgetsКомпозиция Entities и Features в самодостаточные блоки интерфейса.
    Также может содержать ограничители ошибок и состояния загрузки.
    Хранилище инфраструктурных данных, если требуетсяНе-бизнес-взаимодействия (например, жесты) и прочий код, необходимый для функционирования этого блока на страницеОбычно не используется, но может содержать загрузчики данных в контексте вложенного роутинга (например, Remix)
    PagesКомпозиция Entities, Features и Widgets в полноценные страницы.
    Также может содержать ограничители ошибок и состояния загрузки.
    Обычно не используетсяНе-бизнес-взаимодействия (например, жесты) и прочий код, необходимый для создания полноценного пользовательского опыта на этой страницеЗагрузчики данных для фреймворков, ориентированных на SSR (рендеринг на сервере)
    +
    Layeruimodellibapi
    SharedUI-библиотекаОбычно не используетсяУтилитарные модули из нескольких связанных файлов.
    Если вам нужны индивидуальные вспомогательные функции, обратите внимание на библиотеки утилит, например, lodash-es.
    Примитивный API-клиент с дополнительными функциями, такими как аутентификация или кэширование.
    EntitiesСкелет бизнес-сущности со слотами для интерактивных элементовХранилище объектов этой сущности, а также функции для обработки этих объектов.
    Этот сегмент лучше всего подходит для хранения данных с сервера. Если вы используете TanStack Query или другие методы неявного хранения, вы можете опустить этот сегмент.
    Функции над объектами этой сущности, не связанные с хранением данныхAPI-методы, использующие API-клиент из Shared для упрощения коммуникации с бэкендом
    FeaturesИнтерактивные элементы, позволяющие пользователям использовать эту функциюБизнес-логика и хранилище инфраструктурных данных, если требуется (например, текущая тема приложения). Здесь лежит код, который непосредственно создает пользу для пользователяИнфраструктурный код, который позволяет сегменту model более кратко описать бизнес-логикуAPI-методы, представляющие эту функцию на бэкенде.
    Может объединять API-методы из Entities.
    WidgetsКомпозиция Entities и Features в самодостаточные блоки интерфейса.
    Также может содержать ограничители ошибок и состояния загрузки.
    Хранилище инфраструктурных данных, если требуетсяНе-бизнес-взаимодействия (например, жесты) и прочий код, необходимый для функционирования этого блока на страницеОбычно не используется, но может содержать загрузчики данных в контексте вложенного роутинга (например, Remix)
    PagesКомпозиция Entities, Features и Widgets в полноценные страницы.
    Также может содержать ограничители ошибок и состояния загрузки.
    Обычно не используетсяНе-бизнес-взаимодействия (например, жесты) и прочий код, необходимый для создания полноценного пользовательского опыта на этой страницеЗагрузчики данных для фреймворков, ориентированных на SSR (рендеринг на сервере)
    \ No newline at end of file diff --git a/ru/examples.html b/ru/examples.html index fcfd6b7816..e6de4659d7 100644 --- a/ru/examples.html +++ b/ru/examples.html @@ -9,10 +9,10 @@ - - + + -

    Примеры

    Список сайтов, сделанных людьми с FSD

    v2
    Tiny Bunny Mini Game

    Mini-game "21 points" in the universe of the visual novel "Tiny Bunny".

    reactredux-toolkittypescript
    v2
    Roke.to Business

    Business branch of Roketo, a crypto streaming service which allows paying people by the second

    reacteffectortailwindcssturbo
    v2
    Roke.to dApp

    A crypto streaming service which allows paying people by the second

    reacteffectortailwindcss
    v2
    IT bookstore

    Catalog for viewing and searching information technology books

    reactredux toolkittypescriptreact routervitescss
    v2
    Moke Smoke (React Native example)

    An application that helps you quit smoking, published in the App Store and Google. Developed with React Native

    reactrtkpersisttypescriptfirebase
    v2
    Moonlogs (Effector + Forest example)

    Moonlogs is a business-event logging tool with a built-in user-friendly web interface for easy access to events

    foresteffectortailwindtypescriptgo
    v2
    Posts (React Query example)

    Example of using FSD with React Query (Mutation, Query, Pagination)

    reactreact-querytypescriptmaterial ui
    v2
    FalkChat

    FalkChat is your go-to destination for seamless and engaging online conversations.

    reactnextprettierclerktypescripttailwindshadcn/uizustand
    v2
    Polka

    The application is a bookshelf where you can add your favorite books. The application works with the Google Books API.

    vue3piniatypescriptvue-routereslintprettiervitevuetify
    v2
    Fake Cyber Web Store

    Example web store on Vue3

    vue3piniatypescriptfirebasevue-routereslintprettiervite
    v2
    VK Audiopad

    Chrome extension for VK Music

    reactvkuitypescript
    v2
    Сryptolight

    Cryptocurrency review site based on Feature-Sliced Design (Architectural methodology for frontend projects).

    reacteffectornextuitypescriptvite
    v2
    Money Flow

    A mobile application for tracking your expenses and incomes.

    capacitorjsreactreact-routerzustandvitetypescriptmobileandroidios
    v2
    E-Commerce

    This project is an online store built using React. It provides the ability to view the product catalog and product pages

    reactmobxwebpacktypescriptssr
    v2
    Todo app (Vue 3 + Pinia)

    QuickStart todo-app example for Vue developers with pinia store

    vue 3piniavitetypescript
    v2
    Conduit

    A social blogging site powered by Feature-Sliced Design architectural methodology.

    reactreact-routerreact-queryzustandvitetypescript
    v2
    Kinomore (React+Effector)

    Large project on the effector/fsd stack

    reacteffectortypescriptnextjsreact-testing-library
    v2
    Sudoku (React+Effector)

    A simple crossword of numbers on effector / fsd

    reacteffectortypescriptvitetailwindatomic-router
    v2
    Nukeapp (React+ReduxToolkit)

    Shopping app build on React/ReduxToolkit stack

    reactredux-toolkittypescriptvite
    v2
    Simple Greenhouse App (React+MobX)

    Simple demonstration of how FSD can be implemented with TypeScript, React.js, MobX and Firebase

    reactmobxtypescriptfirebasemuivite
    v2
    Todo App (ReactNative+Redux)

    QuickStart todo-app example for ReactNative(Expo) developers

    react-nativeexporedux
    v2
    Rastrr

    A simple and free graphic editor for novice artists

    svelte
    v2
    Draw, I'll Help

    A drawing app with shape correction powered by ML

    svelte
    v2
    Cast

    A podcast listening PWA with automated quality assurance

    svelte
    v2
    Loripsum generator

    Simple fish text generator

    reacteffector
    v2
    Projentry (demo)

    Assistant for your projects

    reactantd
    v2
    Todo App (Angular 13)

    QuickStart todo-app example for Angular developers

    angularrxjs
    v2
    Todo App (Vue 3)

    QuickStart todo-app example for Vue developers

    vuevuexantd
    v2
    Todo App (React+Redux)

    QuickStart todo-app example for React developers (Redux version)

    reactreduxantd
    v2
    Todo App (React+Effector)

    QuickStart todo-app example for React developers (Effector version)

    reacteffectorantd
    v2
    Github Client

    React & GraphQL powered github web-client

    reactgraphqlantd
    v2
    Cardbox

    The best solutions from developers in one place

    reacteffector
    +

    Примеры

    Список сайтов, сделанных людьми с FSD

    v2
    Tiny Bunny Mini Game

    Mini-game "21 points" in the universe of the visual novel "Tiny Bunny".

    reactredux-toolkittypescript
    v2
    Roke.to Business

    Business branch of Roketo, a crypto streaming service which allows paying people by the second

    reacteffectortailwindcssturbo
    v2
    Roke.to dApp

    A crypto streaming service which allows paying people by the second

    reacteffectortailwindcss
    v2
    IT bookstore

    Catalog for viewing and searching information technology books

    reactredux toolkittypescriptreact routervitescss
    v2
    Moke Smoke (React Native example)

    An application that helps you quit smoking, published in the App Store and Google. Developed with React Native

    reactrtkpersisttypescriptfirebase
    v2
    Moonlogs (Effector + Forest example)

    Moonlogs is a business-event logging tool with a built-in user-friendly web interface for easy access to events

    foresteffectortailwindtypescriptgo
    v2
    Posts (React Query example)

    Example of using FSD with React Query (Mutation, Query, Pagination)

    reactreact-querytypescriptmaterial ui
    v2
    FalkChat

    FalkChat is your go-to destination for seamless and engaging online conversations.

    reactnextprettierclerktypescripttailwindshadcn/uizustand
    v2
    Polka

    The application is a bookshelf where you can add your favorite books. The application works with the Google Books API.

    vue3piniatypescriptvue-routereslintprettiervitevuetify
    v2
    Fake Cyber Web Store

    Example web store on Vue3

    vue3piniatypescriptfirebasevue-routereslintprettiervite
    v2
    VK Audiopad

    Chrome extension for VK Music

    reactvkuitypescript
    v2
    Сryptolight

    Cryptocurrency review site based on Feature-Sliced Design (Architectural methodology for frontend projects).

    reacteffectornextuitypescriptvite
    v2
    Money Flow

    A mobile application for tracking your expenses and incomes.

    capacitorjsreactreact-routerzustandvitetypescriptmobileandroidios
    v2
    E-Commerce

    This project is an online store built using React. It provides the ability to view the product catalog and product pages

    reactmobxwebpacktypescriptssr
    v2
    Todo app (Vue 3 + Pinia)

    QuickStart todo-app example for Vue developers with pinia store

    vue 3piniavitetypescript
    v2
    Conduit

    A social blogging site powered by Feature-Sliced Design architectural methodology.

    reactreact-routerreact-queryzustandvitetypescript
    v2
    Kinomore (React+Effector)

    Large project on the effector/fsd stack

    reacteffectortypescriptnextjsreact-testing-library
    v2
    Sudoku (React+Effector)

    A simple crossword of numbers on effector / fsd

    reacteffectortypescriptvitetailwindatomic-router
    v2
    Nukeapp (React+ReduxToolkit)

    Shopping app build on React/ReduxToolkit stack

    reactredux-toolkittypescriptvite
    v2
    Simple Greenhouse App (React+MobX)

    Simple demonstration of how FSD can be implemented with TypeScript, React.js, MobX and Firebase

    reactmobxtypescriptfirebasemuivite
    v2
    Todo App (ReactNative+Redux)

    QuickStart todo-app example for ReactNative(Expo) developers

    react-nativeexporedux
    v2
    Rastrr

    A simple and free graphic editor for novice artists

    svelte
    v2
    Draw, I'll Help

    A drawing app with shape correction powered by ML

    svelte
    v2
    Cast

    A podcast listening PWA with automated quality assurance

    svelte
    v2
    Loripsum generator

    Simple fish text generator

    reacteffector
    v2
    Projentry (demo)

    Assistant for your projects

    reactantd
    v2
    Todo App (Angular 13)

    QuickStart todo-app example for Angular developers

    angularrxjs
    v2
    Todo App (Vue 3)

    QuickStart todo-app example for Vue developers

    vuevuexantd
    v2
    Todo App (React+Redux)

    QuickStart todo-app example for React developers (Redux version)

    reactreduxantd
    v2
    Todo App (React+Effector)

    QuickStart todo-app example for React developers (Effector version)

    reacteffectorantd
    v2
    Github Client

    React & GraphQL powered github web-client

    reactgraphqlantd
    v2
    Cardbox

    The best solutions from developers in one place

    reacteffector
    \ No newline at end of file diff --git a/ru/index.html b/ru/index.html index 3264ea0a6e..5ad992d56c 100644 --- a/ru/index.html +++ b/ru/index.html @@ -9,10 +9,10 @@ - - + + -

    Feature-Sliced Design

    Архитектурная методология для фронтенд проектов

    Преимущества

    Явная бизнес-логика

    Архитектуру легко осваивать, поскольку она состоит из доменных модулей

    Адаптивность

    Компоненты архитектуры можно гибко заменять, добавлять под новые условия

    Технический долг

    Каждый модуль можно независимо модифицировать / переписать без сайд-эффектов

    Явная переиспользуемость

    Сохраняется баланс между DRY и локальной кастомизацией

    Концепции

    Public API

    Каждый модуль должен иметь на верхнем уровне декларацию своего публичного API

    Изоляция

    Модуль не должен зависеть напрямую от других модулей того же слоя или вышележаших слоев

    Понимание потребностей

    Ориентирование на потребности бизнеса и пользователя

    Схема

    Компании, использующие методологию

    Методология используется в Вашей компании? Сообщите нам
    +

    Feature-Sliced Design

    Архитектурная методология для фронтенд проектов

    Преимущества

    Явная бизнес-логика

    Архитектуру легко осваивать, поскольку она состоит из доменных модулей

    Адаптивность

    Компоненты архитектуры можно гибко заменять, добавлять под новые условия

    Технический долг

    Каждый модуль можно независимо модифицировать / переписать без сайд-эффектов

    Явная переиспользуемость

    Сохраняется баланс между DRY и локальной кастомизацией

    Концепции

    Public API

    Каждый модуль должен иметь на верхнем уровне декларацию своего публичного API

    Изоляция

    Модуль не должен зависеть напрямую от других модулей того же слоя или вышележаших слоев

    Понимание потребностей

    Ориентирование на потребности бизнеса и пользователя

    Схема

    Компании, использующие методологию

    Методология используется в Вашей компании? Сообщите нам
    \ No newline at end of file diff --git a/ru/nav.html b/ru/nav.html index f5807a0f2d..72bee814ab 100644 --- a/ru/nav.html +++ b/ru/nav.html @@ -9,11 +9,11 @@ - - + + -

    🧭 Навигация

    Устаревшие ссылки

    После реструктуризации документации, некоторые ссылки на статьи изменились. Ниже можно найти страницу, которую вы, возможно, искали.

    Но для совместимости есть редиректы со старых ссылок

    🚀 Get Started

    ⚡️ Simplified and merged

    Tutorial

    old: /docs/get-started/quick-start
    new: /docs/get-started/tutorial

    Basics

    old: /docs/get-started/basics
    new: /docs/get-started/overview

    Decompose Cheatsheet

    old: /docs/get-started/tutorial/decompose; +

    🧭 Навигация

    Устаревшие ссылки

    После реструктуризации документации, некоторые ссылки на статьи изменились. Ниже можно найти страницу, которую вы, возможно, искали.

    Но для совместимости есть редиректы со старых ссылок

    🍰 Alternatives

    ⚡️ Moved and merged to /about/alternatives as advanced materials

    Architecture approaches alternatives

    old: /docs/about/alternatives/big-ball-of-mud; /docs/about/alternatives/design-principles; diff --git a/ru/search.html b/ru/search.html index 806b939287..9b9d56858f 100644 --- a/ru/search.html +++ b/ru/search.html @@ -9,10 +9,10 @@ - - + + - + \ No newline at end of file diff --git a/ru/versions.html b/ru/versions.html index 8869fa53e7..ca1ae9580a 100644 --- a/ru/versions.html +++ b/ru/versions.html @@ -9,10 +9,10 @@ - - + + -

    Версии Feature-Sliced Design

    Feature-Sliced Design v2.0.0 (Current)

    Здесь можно найти документацию для текущей опубликованной версии

    v2.0.0 🍰Release NotesDocumentationMigration from v1

    Feature Slices v1 (Legacy)

    Здесь можно найти документацию для старых версий feature-slices

    v1.0Documentation
    v0.1Documentation

    Feature Driven (Legacy)

    Здесь можно найти документацию для старых версий feature-driven

    v0.1Documentation
    Example (kof)Github
    +

    Версии Feature-Sliced Design

    Feature-Sliced Design v2.0.0 (Current)

    Здесь можно найти документацию для текущей опубликованной версии

    v2.0.0 🍰Release NotesDocumentationMigration from v1

    Feature Slices v1 (Legacy)

    Здесь можно найти документацию для старых версий feature-slices

    v1.0Documentation
    v0.1Documentation

    Feature Driven (Legacy)

    Здесь можно найти документацию для старых версий feature-driven

    v0.1Documentation
    Example (kof)Github
    \ No newline at end of file diff --git a/search.html b/search.html index 96eccbac6d..7a7efff495 100644 --- a/search.html +++ b/search.html @@ -9,10 +9,10 @@ - - + + - + \ No newline at end of file diff --git a/uz/404.html b/uz/404.html index 558c7ea179..228a025811 100644 --- a/uz/404.html +++ b/uz/404.html @@ -9,10 +9,10 @@ - - + + -

    Sahifa topilmadi

    Afsuski, siz hohlagan sahifa topilmadi

    Iltimos, ushbu havolaga kirgan sayt egasiga havola ishlamayotganligi haqida xabar bering.

    +

    Sahifa topilmadi

    Afsuski, siz hohlagan sahifa topilmadi

    Iltimos, ushbu havolaga kirgan sayt egasiga havola ishlamayotganligi haqida xabar bering.

    \ No newline at end of file diff --git a/uz/assets/js/022a3ac7.d0dbb09c.js b/uz/assets/js/022a3ac7.f9a428a6.js similarity index 98% rename from uz/assets/js/022a3ac7.d0dbb09c.js rename to uz/assets/js/022a3ac7.f9a428a6.js index 1d93f1ab3b..315d23b9fa 100644 --- a/uz/assets/js/022a3ac7.d0dbb09c.js +++ b/uz/assets/js/022a3ac7.f9a428a6.js @@ -1,2 +1,2 @@ -/*! For license information please see 022a3ac7.d0dbb09c.js.LICENSE.txt */ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[9856],{655:(e,t,a)=>{a.d(t,{A:()=>o});var n=a(991),s=a(758);const c={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M917.7 148.8l-42.4-42.4c-1.6-1.6-3.6-2.3-5.7-2.3s-4.1.8-5.7 2.3l-76.1 76.1a199.27 199.27 0 00-112.1-34.3c-51.2 0-102.4 19.5-141.5 58.6L432.3 308.7a8.03 8.03 0 000 11.3L704 591.7c1.6 1.6 3.6 2.3 5.7 2.3 2 0 4.1-.8 5.7-2.3l101.9-101.9c68.9-69 77-175.7 24.3-253.5l76.1-76.1c3.1-3.2 3.1-8.3 0-11.4zM769.1 441.7l-59.4 59.4-186.8-186.8 59.4-59.4c24.9-24.9 58.1-38.7 93.4-38.7 35.3 0 68.4 13.7 93.4 38.7 24.9 24.9 38.7 58.1 38.7 93.4 0 35.3-13.8 68.4-38.7 93.4zm-190.2 105a8.03 8.03 0 00-11.3 0L501 613.3 410.7 523l66.7-66.7c3.1-3.1 3.1-8.2 0-11.3L441 408.6a8.03 8.03 0 00-11.3 0L363 475.3l-43-43a7.85 7.85 0 00-5.7-2.3c-2 0-4.1.8-5.7 2.3L206.8 534.2c-68.9 69-77 175.7-24.3 253.5l-76.1 76.1a8.03 8.03 0 000 11.3l42.4 42.4c1.6 1.6 3.6 2.3 5.7 2.3s4.1-.8 5.7-2.3l76.1-76.1c33.7 22.9 72.9 34.3 112.1 34.3 51.2 0 102.4-19.5 141.5-58.6l101.9-101.9c3.1-3.1 3.1-8.2 0-11.3l-43-43 66.7-66.7c3.1-3.1 3.1-8.2 0-11.3l-36.6-36.2zM441.7 769.1a131.32 131.32 0 01-93.4 38.7c-35.3 0-68.4-13.7-93.4-38.7a131.32 131.32 0 01-38.7-93.4c0-35.3 13.7-68.4 38.7-93.4l59.4-59.4 186.8 186.8-59.4 59.4z"}}]},name:"api",theme:"outlined"};var i=a(5624),r=function(e,t){return s.createElement(i.A,(0,n.A)({},e,{ref:t,icon:c}))};const o=s.forwardRef(r)},7327:(e,t,a)=>{a.d(t,{Ay:()=>o,RM:()=>i});var n=a(6070),s=a(5710),c=a(8173);const i=[];function r(e){return(0,n.jsx)(c.A,{...e})}function o(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(r,{...e})}):r(e)}},7624:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>y,contentTitle:()=>_,default:()=>A,frontMatter:()=>z,metadata:()=>j,toc:()=>M});var n=a(6070),s=a(5710),c=a(7327),i=a(991),r=a(758);const o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M912 820.1V203.9c28-9.9 48-36.6 48-67.9 0-39.8-32.2-72-72-72-31.3 0-58 20-67.9 48H203.9C194 84 167.3 64 136 64c-39.8 0-72 32.2-72 72 0 31.3 20 58 48 67.9v616.2C84 830 64 856.7 64 888c0 39.8 32.2 72 72 72 31.3 0 58-20 67.9-48h616.2c9.9 28 36.6 48 67.9 48 39.8 0 72-32.2 72-72 0-31.3-20-58-48-67.9zM888 112c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zM136 912c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-752c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm704 680H184V184h656v656zm48 72c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24z"}},{tag:"path",attrs:{d:"M288 474h448c8.8 0 16-7.2 16-16V282c0-8.8-7.2-16-16-16H288c-8.8 0-16 7.2-16 16v176c0 8.8 7.2 16 16 16zm56-136h336v64H344v-64zm-56 420h448c8.8 0 16-7.2 16-16V566c0-8.8-7.2-16-16-16H288c-8.8 0-16 7.2-16 16v176c0 8.8 7.2 16 16 16zm56-136h336v64H344v-64z"}}]},name:"group",theme:"outlined"};var l=a(5624),d=function(e,t){return r.createElement(l.A,(0,i.A)({},e,{ref:t,icon:o}))};const u=r.forwardRef(d);const m={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M464 144H160c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H212V212h200v200zm452-268H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H612V212h200v200zM464 544H160c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V560c0-8.8-7.2-16-16-16zm-52 268H212V612h200v200zm452-268H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V560c0-8.8-7.2-16-16-16zm-52 268H612V612h200v200z"}}]},name:"appstore",theme:"outlined"};var h=function(e,t){return r.createElement(l.A,(0,i.A)({},e,{ref:t,icon:m}))};const f=r.forwardRef(h);const p={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M843.5 737.4c-12.4-75.2-79.2-129.1-155.3-125.4S550.9 676 546 752c-153.5-4.8-208-40.7-199.1-113.7 3.3-27.3 19.8-41.9 50.1-49 18.4-4.3 38.8-4.9 57.3-3.2 1.7.2 3.5.3 5.2.5 11.3 2.7 22.8 5 34.3 6.8 34.1 5.6 68.8 8.4 101.8 6.6 92.8-5 156-45.9 159.2-132.7 3.1-84.1-54.7-143.7-147.9-183.6-29.9-12.8-61.6-22.7-93.3-30.2-14.3-3.4-26.3-5.7-35.2-7.2-7.9-75.9-71.5-133.8-147.8-134.4-76.3-.6-140.9 56.1-150.1 131.9s40 146.3 114.2 163.9c74.2 17.6 149.9-23.3 175.7-95.1 9.4 1.7 18.7 3.6 28 5.8 28.2 6.6 56.4 15.4 82.4 26.6 70.7 30.2 109.3 70.1 107.5 119.9-1.6 44.6-33.6 65.2-96.2 68.6-27.5 1.5-57.6-.9-87.3-5.8-8.3-1.4-15.9-2.8-22.6-4.3-3.9-.8-6.6-1.5-7.8-1.8l-3.1-.6c-2.2-.3-5.9-.8-10.7-1.3-25-2.3-52.1-1.5-78.5 4.6-55.2 12.9-93.9 47.2-101.1 105.8-15.7 126.2 78.6 184.7 276 188.9 29.1 70.4 106.4 107.9 179.6 87 73.3-20.9 119.3-93.4 106.9-168.6zM329.1 345.2a83.3 83.3 0 11.01-166.61 83.3 83.3 0 01-.01 166.61zM695.6 845a83.3 83.3 0 11.01-166.61A83.3 83.3 0 01695.6 845z"}}]},name:"node-index",theme:"outlined"};var v=function(e,t){return r.createElement(l.A,(0,i.A)({},e,{ref:t,icon:p}))};const g=r.forwardRef(v);var x=a(655);const z={sidebar_position:0,hide_table_of_contents:!0,pagination_prev:"guides/index"},_="\ud83d\udcda Malumot",j={id:"reference/index",title:"\ud83d\udcda Malumot",description:"Feature-Sliced Design asosiy tushunchalarining batafsil tavsifi.",source:"@site/i18n/uz/docusaurus-plugin-content-docs/current/reference/index.mdx",sourceDirName:"reference",slug:"/reference/",permalink:"/uz/docs/reference/",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/uz/docusaurus-plugin-content-docs/current/reference/index.mdx",tags:[],version:"current",lastUpdatedAt:1727030144e3,sidebarPosition:0,frontMatter:{sidebar_position:0,hide_table_of_contents:!0,pagination_prev:"guides/index"},sidebar:"referenceSidebar",previous:{title:"\ud83c\udfaf Guides",permalink:"/uz/docs/guides/"},next:{title:"Qatlamlar",permalink:"/uz/docs/reference/layers"}},y={},M=[...c.RM,...c.RM,...c.RM,...c.RM];function b(e){const t={h1:"h1",header:"header",p:"p",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"-malumot",children:"\ud83d\udcda Malumot"})}),"\n",(0,n.jsx)("p",{class:"summary",children:(0,n.jsx)(t.p,{children:"Feature-Sliced Design asosiy tushunchalarining batafsil tavsifi."})}),"\n",(0,n.jsx)(c.Ay,{title:"Qatlamlar",description:"Qatlamning ta'rifi va barcha qatlamlar uchun tushuntirishlar",to:"/docs/reference/layers",Icon:u}),"\n",(0,n.jsx)(c.Ay,{title:"Bo'lak va segmentlar",description:"Bo'lak va segmentning ta'riflari, turli qatlamlardagi segmentlar uchun kontent misollari",to:"/docs/reference/slices-segments",Icon:f}),"\n",(0,n.jsx)(c.Ay,{title:"Izolyatsiya",description:"O'lchovli va samarali modul o'zaro ta'siri uchun amaliyotlar",to:"/docs/reference/isolation",Icon:g}),"\n",(0,n.jsx)(c.Ay,{title:"Ommaviy API",description:"Kengaytiriladigan va integratsiyalashuvi oson modullarni loyihalash amaliyoti",to:"/docs/reference/public-api",Icon:x.A})]})}function A(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(b,{...e})}):b(e)}},8173:(e,t,a)=>{a.d(t,{Y:()=>r,A:()=>l});a(758);var n=a(3526),s=a(8886);const c={root:"root_GfON",rootDisabled:"rootDisabled_SFUB",details:"details_xxkR",detailsTags:"detailsTags_uTQx",icon:"icon_ciqP",title:"title_pSH5",description:"description__Fep",miniTheme:"miniTheme_ePfp",primaryTheme:"primaryTheme_CilO",defaultTheme:"defaultTheme_j3I8"};var i=a(6070);const r=e=>{const{title:t,description:a,to:r,Icon:l,tags:d,className:u,disabled:m,theme:h="default"}=e;return(0,i.jsxs)(s.A,{className:(0,n.A)(c.root,u,m&&c.rootDisabled,c[`${h}Theme`]),to:r,children:[(0,i.jsx)(o,{Icon:l}),(0,i.jsxs)("div",{className:c.details,children:[(0,i.jsxs)("div",{className:c.detailsMain,children:[(0,i.jsx)("span",{className:c.title,children:t}),(0,i.jsx)("p",{className:c.description,children:a})]}),d&&(0,i.jsx)("div",{className:c.detailsTags,children:d.join(" \u2022 ")})]})]})},o=e=>{let{Icon:t}=e;return t?"string"==typeof t?(0,i.jsx)("span",{className:c.icon,children:t}):(0,i.jsx)(t,{className:c.icon}):null},l=r},5710:(e,t,a)=>{a.d(t,{R:()=>i,x:()=>r});var n=a(758);const s={},c=n.createContext(s);function i(e){const t=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),n.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file +/*! For license information please see 022a3ac7.f9a428a6.js.LICENSE.txt */ +"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[9856],{655:(e,t,a)=>{a.d(t,{A:()=>o});var n=a(991),s=a(758);const c={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M917.7 148.8l-42.4-42.4c-1.6-1.6-3.6-2.3-5.7-2.3s-4.1.8-5.7 2.3l-76.1 76.1a199.27 199.27 0 00-112.1-34.3c-51.2 0-102.4 19.5-141.5 58.6L432.3 308.7a8.03 8.03 0 000 11.3L704 591.7c1.6 1.6 3.6 2.3 5.7 2.3 2 0 4.1-.8 5.7-2.3l101.9-101.9c68.9-69 77-175.7 24.3-253.5l76.1-76.1c3.1-3.2 3.1-8.3 0-11.4zM769.1 441.7l-59.4 59.4-186.8-186.8 59.4-59.4c24.9-24.9 58.1-38.7 93.4-38.7 35.3 0 68.4 13.7 93.4 38.7 24.9 24.9 38.7 58.1 38.7 93.4 0 35.3-13.8 68.4-38.7 93.4zm-190.2 105a8.03 8.03 0 00-11.3 0L501 613.3 410.7 523l66.7-66.7c3.1-3.1 3.1-8.2 0-11.3L441 408.6a8.03 8.03 0 00-11.3 0L363 475.3l-43-43a7.85 7.85 0 00-5.7-2.3c-2 0-4.1.8-5.7 2.3L206.8 534.2c-68.9 69-77 175.7-24.3 253.5l-76.1 76.1a8.03 8.03 0 000 11.3l42.4 42.4c1.6 1.6 3.6 2.3 5.7 2.3s4.1-.8 5.7-2.3l76.1-76.1c33.7 22.9 72.9 34.3 112.1 34.3 51.2 0 102.4-19.5 141.5-58.6l101.9-101.9c3.1-3.1 3.1-8.2 0-11.3l-43-43 66.7-66.7c3.1-3.1 3.1-8.2 0-11.3l-36.6-36.2zM441.7 769.1a131.32 131.32 0 01-93.4 38.7c-35.3 0-68.4-13.7-93.4-38.7a131.32 131.32 0 01-38.7-93.4c0-35.3 13.7-68.4 38.7-93.4l59.4-59.4 186.8 186.8-59.4 59.4z"}}]},name:"api",theme:"outlined"};var i=a(5624),r=function(e,t){return s.createElement(i.A,(0,n.A)({},e,{ref:t,icon:c}))};const o=s.forwardRef(r)},7327:(e,t,a)=>{a.d(t,{Ay:()=>o,RM:()=>i});var n=a(6070),s=a(5710),c=a(8173);const i=[];function r(e){return(0,n.jsx)(c.A,{...e})}function o(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(r,{...e})}):r(e)}},7624:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>y,contentTitle:()=>_,default:()=>A,frontMatter:()=>z,metadata:()=>j,toc:()=>M});var n=a(6070),s=a(5710),c=a(7327),i=a(991),r=a(758);const o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M912 820.1V203.9c28-9.9 48-36.6 48-67.9 0-39.8-32.2-72-72-72-31.3 0-58 20-67.9 48H203.9C194 84 167.3 64 136 64c-39.8 0-72 32.2-72 72 0 31.3 20 58 48 67.9v616.2C84 830 64 856.7 64 888c0 39.8 32.2 72 72 72 31.3 0 58-20 67.9-48h616.2c9.9 28 36.6 48 67.9 48 39.8 0 72-32.2 72-72 0-31.3-20-58-48-67.9zM888 112c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zM136 912c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-752c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm704 680H184V184h656v656zm48 72c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24z"}},{tag:"path",attrs:{d:"M288 474h448c8.8 0 16-7.2 16-16V282c0-8.8-7.2-16-16-16H288c-8.8 0-16 7.2-16 16v176c0 8.8 7.2 16 16 16zm56-136h336v64H344v-64zm-56 420h448c8.8 0 16-7.2 16-16V566c0-8.8-7.2-16-16-16H288c-8.8 0-16 7.2-16 16v176c0 8.8 7.2 16 16 16zm56-136h336v64H344v-64z"}}]},name:"group",theme:"outlined"};var l=a(5624),d=function(e,t){return r.createElement(l.A,(0,i.A)({},e,{ref:t,icon:o}))};const u=r.forwardRef(d);const m={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M464 144H160c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H212V212h200v200zm452-268H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H612V212h200v200zM464 544H160c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V560c0-8.8-7.2-16-16-16zm-52 268H212V612h200v200zm452-268H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V560c0-8.8-7.2-16-16-16zm-52 268H612V612h200v200z"}}]},name:"appstore",theme:"outlined"};var h=function(e,t){return r.createElement(l.A,(0,i.A)({},e,{ref:t,icon:m}))};const f=r.forwardRef(h);const p={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M843.5 737.4c-12.4-75.2-79.2-129.1-155.3-125.4S550.9 676 546 752c-153.5-4.8-208-40.7-199.1-113.7 3.3-27.3 19.8-41.9 50.1-49 18.4-4.3 38.8-4.9 57.3-3.2 1.7.2 3.5.3 5.2.5 11.3 2.7 22.8 5 34.3 6.8 34.1 5.6 68.8 8.4 101.8 6.6 92.8-5 156-45.9 159.2-132.7 3.1-84.1-54.7-143.7-147.9-183.6-29.9-12.8-61.6-22.7-93.3-30.2-14.3-3.4-26.3-5.7-35.2-7.2-7.9-75.9-71.5-133.8-147.8-134.4-76.3-.6-140.9 56.1-150.1 131.9s40 146.3 114.2 163.9c74.2 17.6 149.9-23.3 175.7-95.1 9.4 1.7 18.7 3.6 28 5.8 28.2 6.6 56.4 15.4 82.4 26.6 70.7 30.2 109.3 70.1 107.5 119.9-1.6 44.6-33.6 65.2-96.2 68.6-27.5 1.5-57.6-.9-87.3-5.8-8.3-1.4-15.9-2.8-22.6-4.3-3.9-.8-6.6-1.5-7.8-1.8l-3.1-.6c-2.2-.3-5.9-.8-10.7-1.3-25-2.3-52.1-1.5-78.5 4.6-55.2 12.9-93.9 47.2-101.1 105.8-15.7 126.2 78.6 184.7 276 188.9 29.1 70.4 106.4 107.9 179.6 87 73.3-20.9 119.3-93.4 106.9-168.6zM329.1 345.2a83.3 83.3 0 11.01-166.61 83.3 83.3 0 01-.01 166.61zM695.6 845a83.3 83.3 0 11.01-166.61A83.3 83.3 0 01695.6 845z"}}]},name:"node-index",theme:"outlined"};var v=function(e,t){return r.createElement(l.A,(0,i.A)({},e,{ref:t,icon:p}))};const g=r.forwardRef(v);var x=a(655);const z={sidebar_position:0,hide_table_of_contents:!0,pagination_prev:"guides/index"},_="\ud83d\udcda Malumot",j={id:"reference/index",title:"\ud83d\udcda Malumot",description:"Feature-Sliced Design asosiy tushunchalarining batafsil tavsifi.",source:"@site/i18n/uz/docusaurus-plugin-content-docs/current/reference/index.mdx",sourceDirName:"reference",slug:"/reference/",permalink:"/uz/docs/reference/",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/uz/docusaurus-plugin-content-docs/current/reference/index.mdx",tags:[],version:"current",lastUpdatedAt:1727540389e3,sidebarPosition:0,frontMatter:{sidebar_position:0,hide_table_of_contents:!0,pagination_prev:"guides/index"},sidebar:"referenceSidebar",previous:{title:"\ud83c\udfaf Guides",permalink:"/uz/docs/guides/"},next:{title:"Qatlamlar",permalink:"/uz/docs/reference/layers"}},y={},M=[...c.RM,...c.RM,...c.RM,...c.RM];function b(e){const t={h1:"h1",header:"header",p:"p",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"-malumot",children:"\ud83d\udcda Malumot"})}),"\n",(0,n.jsx)("p",{class:"summary",children:(0,n.jsx)(t.p,{children:"Feature-Sliced Design asosiy tushunchalarining batafsil tavsifi."})}),"\n",(0,n.jsx)(c.Ay,{title:"Qatlamlar",description:"Qatlamning ta'rifi va barcha qatlamlar uchun tushuntirishlar",to:"/docs/reference/layers",Icon:u}),"\n",(0,n.jsx)(c.Ay,{title:"Bo'lak va segmentlar",description:"Bo'lak va segmentning ta'riflari, turli qatlamlardagi segmentlar uchun kontent misollari",to:"/docs/reference/slices-segments",Icon:f}),"\n",(0,n.jsx)(c.Ay,{title:"Izolyatsiya",description:"O'lchovli va samarali modul o'zaro ta'siri uchun amaliyotlar",to:"/docs/reference/isolation",Icon:g}),"\n",(0,n.jsx)(c.Ay,{title:"Ommaviy API",description:"Kengaytiriladigan va integratsiyalashuvi oson modullarni loyihalash amaliyoti",to:"/docs/reference/public-api",Icon:x.A})]})}function A(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(b,{...e})}):b(e)}},8173:(e,t,a)=>{a.d(t,{Y:()=>r,A:()=>l});a(758);var n=a(3526),s=a(8886);const c={root:"root_GfON",rootDisabled:"rootDisabled_SFUB",details:"details_xxkR",detailsTags:"detailsTags_uTQx",icon:"icon_ciqP",title:"title_pSH5",description:"description__Fep",miniTheme:"miniTheme_ePfp",primaryTheme:"primaryTheme_CilO",defaultTheme:"defaultTheme_j3I8"};var i=a(6070);const r=e=>{const{title:t,description:a,to:r,Icon:l,tags:d,className:u,disabled:m,theme:h="default"}=e;return(0,i.jsxs)(s.A,{className:(0,n.A)(c.root,u,m&&c.rootDisabled,c[`${h}Theme`]),to:r,children:[(0,i.jsx)(o,{Icon:l}),(0,i.jsxs)("div",{className:c.details,children:[(0,i.jsxs)("div",{className:c.detailsMain,children:[(0,i.jsx)("span",{className:c.title,children:t}),(0,i.jsx)("p",{className:c.description,children:a})]}),d&&(0,i.jsx)("div",{className:c.detailsTags,children:d.join(" \u2022 ")})]})]})},o=e=>{let{Icon:t}=e;return t?"string"==typeof t?(0,i.jsx)("span",{className:c.icon,children:t}):(0,i.jsx)(t,{className:c.icon}):null},l=r},5710:(e,t,a)=>{a.d(t,{R:()=>i,x:()=>r});var n=a(758);const s={},c=n.createContext(s);function i(e){const t=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),n.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/uz/assets/js/022a3ac7.d0dbb09c.js.LICENSE.txt b/uz/assets/js/022a3ac7.f9a428a6.js.LICENSE.txt similarity index 100% rename from uz/assets/js/022a3ac7.d0dbb09c.js.LICENSE.txt rename to uz/assets/js/022a3ac7.f9a428a6.js.LICENSE.txt diff --git a/uz/assets/js/0499e362.8140effe.js b/uz/assets/js/0499e362.0c9cb174.js similarity index 98% rename from uz/assets/js/0499e362.8140effe.js rename to uz/assets/js/0499e362.0c9cb174.js index 7df1050ca5..95ae3c8904 100644 --- a/uz/assets/js/0499e362.8140effe.js +++ b/uz/assets/js/0499e362.0c9cb174.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[4005],{5556:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var i=s(6070),n=s(5710);const o={unlisted:!0},r="Decomposition cheatsheet",a={id:"get-started/cheatsheet",title:"Decomposition cheatsheet",description:"Use this as a quick reference when you're deciding how to decompose your UI. PDF versions are also available below, so you can print it out and keep one under your pillow.",source:"@site/i18n/en/docusaurus-plugin-content-docs/current/get-started/cheatsheet.mdx",sourceDirName:"get-started",slug:"/get-started/cheatsheet",permalink:"/uz/docs/get-started/cheatsheet",draft:!1,unlisted:!0,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/en/docusaurus-plugin-content-docs/current/get-started/cheatsheet.mdx",tags:[],version:"current",lastUpdatedAt:1727030144e3,frontMatter:{unlisted:!0},sidebar:"getstartedSidebar"},c={},d=[{value:"Choosing a layer",id:"choosing-a-layer",level:2},{value:"Examples",id:"examples",level:2},{value:"Tweet",id:"tweet",level:3},{value:"GitHub",id:"github",level:3},{value:"See also",id:"see-also",level:2}];function l(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"decomposition-cheatsheet",children:"Decomposition cheatsheet"})}),"\n",(0,i.jsx)(t.p,{children:"Use this as a quick reference when you're deciding how to decompose your UI. PDF versions are also available below, so you can print it out and keep one under your pillow."}),"\n",(0,i.jsx)(t.h2,{id:"choosing-a-layer",children:"Choosing a layer"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:s(6701).A+"",children:"Download PDF"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Definitions of all layers and self-check questions",src:s(6423).A+"",width:"1684",height:"1190"})}),"\n",(0,i.jsx)(t.h2,{id:"examples",children:"Examples"}),"\n",(0,i.jsx)(t.h3,{id:"tweet",children:"Tweet"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"decomposed-tweet-bordered-bgLight",src:s(9342).A+"",width:"1200",height:"2364"})}),"\n",(0,i.jsx)(t.h3,{id:"github",children:"GitHub"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"decomposed-github-bordered",src:s(890).A+"",width:"2291",height:"1080"})}),"\n",(0,i.jsx)(t.h2,{id:"see-also",children:"See also"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/4262",children:"(Thread) General logic for features and entities"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/4210",children:"(Thread) Decomposition of swollen logic"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/4088",children:"(Thread) About understanding the areas of responsibility during decomposition"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3828",children:"(Thread) Decomposition of the Product List widget"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://www.pluralsight.com/guides/how-to-organize-your-react-+-redux-codebase",children:"(Article) Different approaches to the decomposition of logic"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3776",children:"(Thread) About the difference between features and entities"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3248",children:"(Thread) About the difference between things and entities (2)"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3833",children:"(Thread) About the application of criteria for decomposition"})}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},6701:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/files/choosing-a-layer-en-12fdf3265c8fc4f6b58687352b81fce7.pdf"},6423:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/choosing-a-layer-en-5b67f20bb921ba17d78a56c0dc7654a9.jpg"},890:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/decompose-github-a0eeb839a4b5ef5c480a73726a4451b0.jpg"},9342:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/decompose-twitter-7b9a50f879d763c49305b3bf0751ee35.png"},5710:(e,t,s)=>{s.d(t,{R:()=>r,x:()=>a});var i=s(758);const n={},o=i.createContext(n);function r(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[4005],{5556:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var i=s(6070),n=s(5710);const o={unlisted:!0},r="Decomposition cheatsheet",a={id:"get-started/cheatsheet",title:"Decomposition cheatsheet",description:"Use this as a quick reference when you're deciding how to decompose your UI. PDF versions are also available below, so you can print it out and keep one under your pillow.",source:"@site/i18n/en/docusaurus-plugin-content-docs/current/get-started/cheatsheet.mdx",sourceDirName:"get-started",slug:"/get-started/cheatsheet",permalink:"/uz/docs/get-started/cheatsheet",draft:!1,unlisted:!0,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/en/docusaurus-plugin-content-docs/current/get-started/cheatsheet.mdx",tags:[],version:"current",lastUpdatedAt:1727540389e3,frontMatter:{unlisted:!0},sidebar:"getstartedSidebar"},c={},d=[{value:"Choosing a layer",id:"choosing-a-layer",level:2},{value:"Examples",id:"examples",level:2},{value:"Tweet",id:"tweet",level:3},{value:"GitHub",id:"github",level:3},{value:"See also",id:"see-also",level:2}];function l(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"decomposition-cheatsheet",children:"Decomposition cheatsheet"})}),"\n",(0,i.jsx)(t.p,{children:"Use this as a quick reference when you're deciding how to decompose your UI. PDF versions are also available below, so you can print it out and keep one under your pillow."}),"\n",(0,i.jsx)(t.h2,{id:"choosing-a-layer",children:"Choosing a layer"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:s(6701).A+"",children:"Download PDF"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Definitions of all layers and self-check questions",src:s(6423).A+"",width:"1684",height:"1190"})}),"\n",(0,i.jsx)(t.h2,{id:"examples",children:"Examples"}),"\n",(0,i.jsx)(t.h3,{id:"tweet",children:"Tweet"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"decomposed-tweet-bordered-bgLight",src:s(9342).A+"",width:"1200",height:"2364"})}),"\n",(0,i.jsx)(t.h3,{id:"github",children:"GitHub"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"decomposed-github-bordered",src:s(890).A+"",width:"2291",height:"1080"})}),"\n",(0,i.jsx)(t.h2,{id:"see-also",children:"See also"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/4262",children:"(Thread) General logic for features and entities"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/4210",children:"(Thread) Decomposition of swollen logic"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/4088",children:"(Thread) About understanding the areas of responsibility during decomposition"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3828",children:"(Thread) Decomposition of the Product List widget"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://www.pluralsight.com/guides/how-to-organize-your-react-+-redux-codebase",children:"(Article) Different approaches to the decomposition of logic"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3776",children:"(Thread) About the difference between features and entities"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3248",children:"(Thread) About the difference between things and entities (2)"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://t.me/feature_sliced/3833",children:"(Thread) About the application of criteria for decomposition"})}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},6701:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/files/choosing-a-layer-en-12fdf3265c8fc4f6b58687352b81fce7.pdf"},6423:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/choosing-a-layer-en-5b67f20bb921ba17d78a56c0dc7654a9.jpg"},890:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/decompose-github-a0eeb839a4b5ef5c480a73726a4451b0.jpg"},9342:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/decompose-twitter-7b9a50f879d763c49305b3bf0751ee35.png"},5710:(e,t,s)=>{s.d(t,{R:()=>r,x:()=>a});var i=s(758);const n={},o=i.createContext(n);function r(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/uz/assets/js/066221cc.52546b20.js b/uz/assets/js/066221cc.fee392ce.js similarity index 99% rename from uz/assets/js/066221cc.52546b20.js rename to uz/assets/js/066221cc.fee392ce.js index bbfae14ed3..603eb9bac3 100644 --- a/uz/assets/js/066221cc.52546b20.js +++ b/uz/assets/js/066221cc.fee392ce.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[3120],{8715:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var i=s(6070),t=s(5710);const r={sidebar_position:1},o="Overview",a={id:"get-started/overview",title:"Overview",description:"Feature-Sliced Design (FSD) is an architectural methodology for scaffolding front-end applications. Simply put, it's a compilation of rules and conventions on organizing code. The main purpose of this methodology is to make the project more understandable and stable in the face of ever-changing business requirements.",source:"@site/i18n/en/docusaurus-plugin-content-docs/current/get-started/overview.mdx",sourceDirName:"get-started",slug:"/get-started/overview",permalink:"/uz/docs/get-started/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/en/docusaurus-plugin-content-docs/current/get-started/overview.mdx",tags:[],version:"current",lastUpdatedAt:1727030144e3,sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"getstartedSidebar",previous:{title:"\ud83d\ude80 Get Started",permalink:"/uz/docs/get-started/"},next:{title:"Tutorial",permalink:"/uz/docs/get-started/tutorial"}},l={},d=[{value:"Is it right for me?",id:"is-it-right-for-me",level:2},{value:"Basic example",id:"basic-example",level:2},{value:"Concepts",id:"concepts",level:2},{value:"Layers",id:"layers",level:3},{value:"Slices",id:"slices",level:3},{value:"Segments",id:"segments",level:3},{value:"Advantages",id:"advantages",level:2},{value:"Incremental adoption",id:"incremental-adoption",level:2},{value:"Next steps",id:"next-steps",level:2}];function c(e){const n={a:"a",br:"br",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"overview",children:"Overview"})}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Feature-Sliced Design"})," (FSD) is an architectural methodology for scaffolding front-end applications. Simply put, it's a compilation of rules and conventions on organizing code. The main purpose of this methodology is to make the project more understandable and stable in the face of ever-changing business requirements."]}),"\n",(0,i.jsxs)(n.p,{children:["Apart from a set of conventions, FSD is also a toolchain. We have a ",(0,i.jsx)(n.a,{href:"https://github.com/feature-sliced/steiger",children:"linter"})," to check your project's architecture, ",(0,i.jsx)(n.a,{href:"https://github.com/feature-sliced/awesome?tab=readme-ov-file#tools",children:"folder generators"})," through a CLI or IDEs, as well as a rich library of ",(0,i.jsx)(n.a,{href:"/examples",children:"examples"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"is-it-right-for-me",children:"Is it right for me?"}),"\n",(0,i.jsx)(n.p,{children:"FSD can be implemented in projects and teams of any size. It is right for your project if:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["You're doing ",(0,i.jsx)(n.strong,{children:"frontend"})," (UI on web, mobile, desktop, etc.)"]}),"\n",(0,i.jsxs)(n.li,{children:["You're building an ",(0,i.jsx)(n.strong,{children:"application"}),", not a library"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"And that's it! There are no restrictions on what programming language, UI framework, or state manager you use. You can also adopt FSD incrementally, use it in monorepos, and scale to great lengths by breaking your app into packages and implementing FSD individually within them."}),"\n",(0,i.jsxs)(n.p,{children:["If you already have an architecture and you're considering a switch to FSD, make sure that the current architecture is ",(0,i.jsx)(n.strong,{children:"causing trouble"})," in your team. For example, if your project has grown too large and inter-connected to efficiently implement new features, or if you're expecting a lot of new members to join the team. If the current architecture works, maybe it's not worth changing. But if you do decide to migrate, see the ",(0,i.jsx)(n.a,{href:"/docs/guides/migration/from-legacy",children:"Migration"})," section for guidance."]}),"\n",(0,i.jsx)(n.h2,{id:"basic-example",children:"Basic example"}),"\n",(0,i.jsx)(n.p,{children:"Here is a simple project that implements FSD:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 app"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 pages"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 shared"})}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["These top-level folders are called ",(0,i.jsx)(n.em,{children:"layers"}),". Let's look deeper:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"\ud83d\udcc2 app"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 routes"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 analytics"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"\ud83d\udcc2 pages"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 home"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"\ud83d\udcc2 article-reader"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 ui"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 api"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 settings"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"\ud83d\udcc2 shared"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 ui"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 api"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Folders inside ",(0,i.jsx)(n.code,{children:"\ud83d\udcc2 pages"})," are called ",(0,i.jsx)(n.em,{children:"slices"}),". They divide the layer by domain (in this case, by pages)."]}),"\n",(0,i.jsxs)(n.p,{children:["Folders inside ",(0,i.jsx)(n.code,{children:"\ud83d\udcc2 app"}),", ",(0,i.jsx)(n.code,{children:"\ud83d\udcc2 shared"}),", and ",(0,i.jsx)(n.code,{children:"\ud83d\udcc2 pages/article-reader"})," are called ",(0,i.jsx)(n.em,{children:"segments"}),", and they divide slices (or layers) by technical purpose, i.e. what the code is for."]}),"\n",(0,i.jsx)(n.h2,{id:"concepts",children:"Concepts"}),"\n",(0,i.jsx)(n.p,{children:"Layers, slices, and segments form a hierarchy like this:"}),"\n",(0,i.jsxs)("figure",{children:[(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Hierarchy of FSD concepts, described below",src:s(1021).A+"",width:"1355",height:"754"})}),(0,i.jsxs)("figcaption",{style:{fontStyle:"italic",fontSize:"0.9em"},children:[(0,i.jsx)("p",{children:'Pictured above: three pillars, labeled left to right as "Layers", "Slices", and "Segments" respectively.'}),(0,i.jsx)("p",{children:'The "Layers" pillar contains seven divisions arranged top to bottom and labeled "app", "processes", "pages", "widgets", "features", "entities", and "shared". The "processes" division is crossed out. The "entities" division is connected to the second pillar "Slices" in a way that conveys that the second pillar is the content of "entities".'}),(0,i.jsx)("p",{children:'The "Slices" pillar contains three divisions arranged top to bottom and labeled "user", "post", and "comment". The "post" division is connected to the third pillar "Segments" in the same way such that it\'s the content of "post".'}),(0,i.jsx)("p",{children:'The "Segments" pillar contains three divisions, arranged top to bottom and labeled "ui", "model", and "api".'})]})]}),"\n",(0,i.jsx)(n.h3,{id:"layers",children:"Layers"}),"\n",(0,i.jsx)(n.p,{children:"Layers are standardized across all FSD projects. You don't have to use all of the layers, but their names are important. There are currently seven of them (from top to bottom):"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"App* \u2014 everything that makes the app run \u2014 routing, entrypoints, global styles, providers."}),"\n",(0,i.jsx)(n.li,{children:"Processes (deprecated) \u2014 complex inter-page scenarios."}),"\n",(0,i.jsx)(n.li,{children:"Pages \u2014 full pages or large parts of a page in nested routing."}),"\n",(0,i.jsx)(n.li,{children:"Widgets \u2014 large self-contained chunks of functionality or UI, usually delivering an entire use case."}),"\n",(0,i.jsxs)(n.li,{children:["Features \u2014 ",(0,i.jsx)(n.em,{children:"reused"})," implementations of entire product features, i.e. actions that bring business value to the user."]}),"\n",(0,i.jsxs)(n.li,{children:["Entities \u2014 business entities that the project works with, like ",(0,i.jsx)(n.code,{children:"user"})," or ",(0,i.jsx)(n.code,{children:"product"}),"."]}),"\n",(0,i.jsx)(n.li,{children:"Shared* \u2014 reusable functionality, especially when it's detached from the specifics of the project/business, though not necessarily."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"* \u2014 these layers, App and Shared, unlike the other layers, don't have slices, and are made up of segments directly."})}),"\n",(0,i.jsx)(n.p,{children:"The trick with layers is that modules on one layer can only know about and import from modules from the layers strictly below."}),"\n",(0,i.jsx)(n.h3,{id:"slices",children:"Slices"}),"\n",(0,i.jsx)(n.p,{children:"Next up are slices, which partition the code by business domain. You're free to choose any names for them, and create as many as you wish. Slices make your codebase easier to navigate by keeping logically related modules close together."}),"\n",(0,i.jsx)(n.p,{children:"Slices cannot use other slices on the same layer, and that helps with high cohesion and low coupling."}),"\n",(0,i.jsx)(n.h3,{id:"segments",children:"Segments"}),"\n",(0,i.jsx)(n.p,{children:"Slices, as well as layers App and Shared, consist of segments, and segments group your code by its purpose. Segment names are not constrained by the standard, but there are several conventional names for the most common purposes:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"ui"})," \u2014 everything related to UI display: UI components, date formatters, styles, etc."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"api"})," \u2014 backend interactions: request functions, data types, mappers, etc."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"model"})," \u2014 the data model: schemas, interfaces, stores, and business logic."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"lib"})," \u2014 library code that other modules on this slice need."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"config"})," \u2014 configuration files and feature flags."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Usually these segments are enough for most layers, you would only create your own segments in Shared or App, but this is not a rule."}),"\n",(0,i.jsx)(n.h2,{id:"advantages",children:"Advantages"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Uniformity"}),(0,i.jsx)(n.br,{}),"\n","Since the structure is standardized, projects become more uniform, which makes onboarding new members easier for the team."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Stability in face of changes and refactoring"}),(0,i.jsx)(n.br,{}),"\n","A module on one layer cannot use other modules on the same layer, or the layers above.",(0,i.jsx)(n.br,{}),"\n","This allows you to make isolated modifications without unforeseen consequences to the rest of the app."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Controlled reuse of logic"}),(0,i.jsx)(n.br,{}),"\n","Depending on the layer, you can make code very reusable or very local.",(0,i.jsx)(n.br,{}),"\n","This keeps a balance between following the ",(0,i.jsx)(n.strong,{children:"DRY"})," principle and practicality."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Orientation to business and users needs"}),(0,i.jsx)(n.br,{}),"\n","The app is split into business domains and usage of the business language is encouraged in naming, so that you can do useful product work without fully understanding all other unrelated parts of the project."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"incremental-adoption",children:"Incremental adoption"}),"\n",(0,i.jsx)(n.p,{children:"If you have an existing codebase that you want to migrate to FSD, we suggest the following strategy. We found it useful in our own migration experience."}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Start by slowly shaping up the App and Shared layers module-by-module to create a foundation."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Distribute all of the existing UI across Widgets and Pages using broad strokes, even if they have dependencies that violate the rules of FSD."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Start gradually resolving import violations and also extracting Entities and possibly even Features."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"It's advised to refrain from adding new large entities while refactoring or refactoring only certain parts of the project."}),"\n",(0,i.jsx)(n.h2,{id:"next-steps",children:"Next steps"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Want to get a good grasp of how to think in FSD?"})," Check out the ",(0,i.jsx)(n.a,{href:"/docs/get-started/tutorial",children:"Tutorial"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Prefer to learn from examples?"})," We have a lot in the ",(0,i.jsx)(n.a,{href:"/examples",children:"Examples"})," section."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Have questions?"})," Drop by our ",(0,i.jsx)(n.a,{href:"https://t.me/feature_sliced",children:"Telegram chat"})," and get help from the community."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1021:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/visual_schema-e826067f573946613dcdc76e3f585082.jpg"},5710:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>a});var i=s(758);const t={},r=i.createContext(t);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[3120],{8715:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var i=s(6070),t=s(5710);const r={sidebar_position:1},o="Overview",a={id:"get-started/overview",title:"Overview",description:"Feature-Sliced Design (FSD) is an architectural methodology for scaffolding front-end applications. Simply put, it's a compilation of rules and conventions on organizing code. The main purpose of this methodology is to make the project more understandable and stable in the face of ever-changing business requirements.",source:"@site/i18n/en/docusaurus-plugin-content-docs/current/get-started/overview.mdx",sourceDirName:"get-started",slug:"/get-started/overview",permalink:"/uz/docs/get-started/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/en/docusaurus-plugin-content-docs/current/get-started/overview.mdx",tags:[],version:"current",lastUpdatedAt:1727540389e3,sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"getstartedSidebar",previous:{title:"\ud83d\ude80 Get Started",permalink:"/uz/docs/get-started/"},next:{title:"Tutorial",permalink:"/uz/docs/get-started/tutorial"}},l={},d=[{value:"Is it right for me?",id:"is-it-right-for-me",level:2},{value:"Basic example",id:"basic-example",level:2},{value:"Concepts",id:"concepts",level:2},{value:"Layers",id:"layers",level:3},{value:"Slices",id:"slices",level:3},{value:"Segments",id:"segments",level:3},{value:"Advantages",id:"advantages",level:2},{value:"Incremental adoption",id:"incremental-adoption",level:2},{value:"Next steps",id:"next-steps",level:2}];function c(e){const n={a:"a",br:"br",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"overview",children:"Overview"})}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Feature-Sliced Design"})," (FSD) is an architectural methodology for scaffolding front-end applications. Simply put, it's a compilation of rules and conventions on organizing code. The main purpose of this methodology is to make the project more understandable and stable in the face of ever-changing business requirements."]}),"\n",(0,i.jsxs)(n.p,{children:["Apart from a set of conventions, FSD is also a toolchain. We have a ",(0,i.jsx)(n.a,{href:"https://github.com/feature-sliced/steiger",children:"linter"})," to check your project's architecture, ",(0,i.jsx)(n.a,{href:"https://github.com/feature-sliced/awesome?tab=readme-ov-file#tools",children:"folder generators"})," through a CLI or IDEs, as well as a rich library of ",(0,i.jsx)(n.a,{href:"/examples",children:"examples"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"is-it-right-for-me",children:"Is it right for me?"}),"\n",(0,i.jsx)(n.p,{children:"FSD can be implemented in projects and teams of any size. It is right for your project if:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["You're doing ",(0,i.jsx)(n.strong,{children:"frontend"})," (UI on web, mobile, desktop, etc.)"]}),"\n",(0,i.jsxs)(n.li,{children:["You're building an ",(0,i.jsx)(n.strong,{children:"application"}),", not a library"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"And that's it! There are no restrictions on what programming language, UI framework, or state manager you use. You can also adopt FSD incrementally, use it in monorepos, and scale to great lengths by breaking your app into packages and implementing FSD individually within them."}),"\n",(0,i.jsxs)(n.p,{children:["If you already have an architecture and you're considering a switch to FSD, make sure that the current architecture is ",(0,i.jsx)(n.strong,{children:"causing trouble"})," in your team. For example, if your project has grown too large and inter-connected to efficiently implement new features, or if you're expecting a lot of new members to join the team. If the current architecture works, maybe it's not worth changing. But if you do decide to migrate, see the ",(0,i.jsx)(n.a,{href:"/docs/guides/migration/from-legacy",children:"Migration"})," section for guidance."]}),"\n",(0,i.jsx)(n.h2,{id:"basic-example",children:"Basic example"}),"\n",(0,i.jsx)(n.p,{children:"Here is a simple project that implements FSD:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 app"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 pages"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 shared"})}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["These top-level folders are called ",(0,i.jsx)(n.em,{children:"layers"}),". Let's look deeper:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"\ud83d\udcc2 app"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 routes"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 analytics"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"\ud83d\udcc2 pages"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 home"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"\ud83d\udcc2 article-reader"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 ui"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 api"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 settings"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"\ud83d\udcc2 shared"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 ui"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"\ud83d\udcc1 api"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Folders inside ",(0,i.jsx)(n.code,{children:"\ud83d\udcc2 pages"})," are called ",(0,i.jsx)(n.em,{children:"slices"}),". They divide the layer by domain (in this case, by pages)."]}),"\n",(0,i.jsxs)(n.p,{children:["Folders inside ",(0,i.jsx)(n.code,{children:"\ud83d\udcc2 app"}),", ",(0,i.jsx)(n.code,{children:"\ud83d\udcc2 shared"}),", and ",(0,i.jsx)(n.code,{children:"\ud83d\udcc2 pages/article-reader"})," are called ",(0,i.jsx)(n.em,{children:"segments"}),", and they divide slices (or layers) by technical purpose, i.e. what the code is for."]}),"\n",(0,i.jsx)(n.h2,{id:"concepts",children:"Concepts"}),"\n",(0,i.jsx)(n.p,{children:"Layers, slices, and segments form a hierarchy like this:"}),"\n",(0,i.jsxs)("figure",{children:[(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Hierarchy of FSD concepts, described below",src:s(1021).A+"",width:"1355",height:"754"})}),(0,i.jsxs)("figcaption",{style:{fontStyle:"italic",fontSize:"0.9em"},children:[(0,i.jsx)("p",{children:'Pictured above: three pillars, labeled left to right as "Layers", "Slices", and "Segments" respectively.'}),(0,i.jsx)("p",{children:'The "Layers" pillar contains seven divisions arranged top to bottom and labeled "app", "processes", "pages", "widgets", "features", "entities", and "shared". The "processes" division is crossed out. The "entities" division is connected to the second pillar "Slices" in a way that conveys that the second pillar is the content of "entities".'}),(0,i.jsx)("p",{children:'The "Slices" pillar contains three divisions arranged top to bottom and labeled "user", "post", and "comment". The "post" division is connected to the third pillar "Segments" in the same way such that it\'s the content of "post".'}),(0,i.jsx)("p",{children:'The "Segments" pillar contains three divisions, arranged top to bottom and labeled "ui", "model", and "api".'})]})]}),"\n",(0,i.jsx)(n.h3,{id:"layers",children:"Layers"}),"\n",(0,i.jsx)(n.p,{children:"Layers are standardized across all FSD projects. You don't have to use all of the layers, but their names are important. There are currently seven of them (from top to bottom):"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"App* \u2014 everything that makes the app run \u2014 routing, entrypoints, global styles, providers."}),"\n",(0,i.jsx)(n.li,{children:"Processes (deprecated) \u2014 complex inter-page scenarios."}),"\n",(0,i.jsx)(n.li,{children:"Pages \u2014 full pages or large parts of a page in nested routing."}),"\n",(0,i.jsx)(n.li,{children:"Widgets \u2014 large self-contained chunks of functionality or UI, usually delivering an entire use case."}),"\n",(0,i.jsxs)(n.li,{children:["Features \u2014 ",(0,i.jsx)(n.em,{children:"reused"})," implementations of entire product features, i.e. actions that bring business value to the user."]}),"\n",(0,i.jsxs)(n.li,{children:["Entities \u2014 business entities that the project works with, like ",(0,i.jsx)(n.code,{children:"user"})," or ",(0,i.jsx)(n.code,{children:"product"}),"."]}),"\n",(0,i.jsx)(n.li,{children:"Shared* \u2014 reusable functionality, especially when it's detached from the specifics of the project/business, though not necessarily."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"* \u2014 these layers, App and Shared, unlike the other layers, don't have slices, and are made up of segments directly."})}),"\n",(0,i.jsx)(n.p,{children:"The trick with layers is that modules on one layer can only know about and import from modules from the layers strictly below."}),"\n",(0,i.jsx)(n.h3,{id:"slices",children:"Slices"}),"\n",(0,i.jsx)(n.p,{children:"Next up are slices, which partition the code by business domain. You're free to choose any names for them, and create as many as you wish. Slices make your codebase easier to navigate by keeping logically related modules close together."}),"\n",(0,i.jsx)(n.p,{children:"Slices cannot use other slices on the same layer, and that helps with high cohesion and low coupling."}),"\n",(0,i.jsx)(n.h3,{id:"segments",children:"Segments"}),"\n",(0,i.jsx)(n.p,{children:"Slices, as well as layers App and Shared, consist of segments, and segments group your code by its purpose. Segment names are not constrained by the standard, but there are several conventional names for the most common purposes:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"ui"})," \u2014 everything related to UI display: UI components, date formatters, styles, etc."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"api"})," \u2014 backend interactions: request functions, data types, mappers, etc."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"model"})," \u2014 the data model: schemas, interfaces, stores, and business logic."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"lib"})," \u2014 library code that other modules on this slice need."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"config"})," \u2014 configuration files and feature flags."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Usually these segments are enough for most layers, you would only create your own segments in Shared or App, but this is not a rule."}),"\n",(0,i.jsx)(n.h2,{id:"advantages",children:"Advantages"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Uniformity"}),(0,i.jsx)(n.br,{}),"\n","Since the structure is standardized, projects become more uniform, which makes onboarding new members easier for the team."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Stability in face of changes and refactoring"}),(0,i.jsx)(n.br,{}),"\n","A module on one layer cannot use other modules on the same layer, or the layers above.",(0,i.jsx)(n.br,{}),"\n","This allows you to make isolated modifications without unforeseen consequences to the rest of the app."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Controlled reuse of logic"}),(0,i.jsx)(n.br,{}),"\n","Depending on the layer, you can make code very reusable or very local.",(0,i.jsx)(n.br,{}),"\n","This keeps a balance between following the ",(0,i.jsx)(n.strong,{children:"DRY"})," principle and practicality."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Orientation to business and users needs"}),(0,i.jsx)(n.br,{}),"\n","The app is split into business domains and usage of the business language is encouraged in naming, so that you can do useful product work without fully understanding all other unrelated parts of the project."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"incremental-adoption",children:"Incremental adoption"}),"\n",(0,i.jsx)(n.p,{children:"If you have an existing codebase that you want to migrate to FSD, we suggest the following strategy. We found it useful in our own migration experience."}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Start by slowly shaping up the App and Shared layers module-by-module to create a foundation."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Distribute all of the existing UI across Widgets and Pages using broad strokes, even if they have dependencies that violate the rules of FSD."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Start gradually resolving import violations and also extracting Entities and possibly even Features."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"It's advised to refrain from adding new large entities while refactoring or refactoring only certain parts of the project."}),"\n",(0,i.jsx)(n.h2,{id:"next-steps",children:"Next steps"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Want to get a good grasp of how to think in FSD?"})," Check out the ",(0,i.jsx)(n.a,{href:"/docs/get-started/tutorial",children:"Tutorial"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Prefer to learn from examples?"})," We have a lot in the ",(0,i.jsx)(n.a,{href:"/examples",children:"Examples"})," section."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Have questions?"})," Drop by our ",(0,i.jsx)(n.a,{href:"https://t.me/feature_sliced",children:"Telegram chat"})," and get help from the community."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1021:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/visual_schema-e826067f573946613dcdc76e3f585082.jpg"},5710:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>a});var i=s(758);const t={},r=i.createContext(t);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/uz/assets/js/0a4ee302.660cda07.js b/uz/assets/js/0a4ee302.631043ac.js similarity index 99% rename from uz/assets/js/0a4ee302.660cda07.js rename to uz/assets/js/0a4ee302.631043ac.js index 07942d9988..24e617f5d6 100644 --- a/uz/assets/js/0a4ee302.660cda07.js +++ b/uz/assets/js/0a4ee302.631043ac.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_feature_sliced_documentation=self.webpackChunk_feature_sliced_documentation||[]).push([[5977],{2009:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var s=t(6070),i=t(5710);const o={sidebar_position:10},r="Usage with NuxtJS",c={id:"guides/tech/with-nuxtjs",title:"Usage with NuxtJS",description:"It is possible to implement FSD in a NuxtJS project, but conflicts arise due to the differences between NuxtJS project structure requirements and FSD principles:",source:"@site/i18n/en/docusaurus-plugin-content-docs/current/guides/tech/with-nuxtjs.mdx",sourceDirName:"guides/tech",slug:"/guides/tech/with-nuxtjs",permalink:"/uz/docs/guides/tech/with-nuxtjs",draft:!1,unlisted:!1,editUrl:"https://github.com/feature-sliced/documentation/edit/master/i18n/en/docusaurus-plugin-content-docs/current/guides/tech/with-nuxtjs.mdx",tags:[],version:"current",lastUpdatedAt:1727030144e3,sidebarPosition:10,frontMatter:{sidebar_position:10},sidebar:"guidesSidebar",previous:{title:"Usage with NextJS",permalink:"/uz/docs/guides/tech/with-nextjs"},next:{title:"Usage with React Query",permalink:"/uz/docs/guides/tech/with-react-query"}},a={},d=[{value:"Adding an alias for the src directory",id:"adding-an-alias-for-the-src-directory",level:2},{value:"Choose how to configure the router",id:"choose-how-to-configure-the-router",level:2},{value:"Routing using config",id:"routing-using-config",level:3},{value:"File Routing",id:"file-routing",level:3},{value:"What to do with layouts?",id:"what-to-do-with-layouts",level:2},{value:"See also",id:"see-also",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"usage-with-nuxtjs",children:"Usage with NuxtJS"})}),"\n",(0,s.jsx)(n.p,{children:"It is possible to implement FSD in a NuxtJS project, but conflicts arise due to the differences between NuxtJS project structure requirements and FSD principles:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Initially, NuxtJS offers a project file structure without a ",(0,s.jsx)(n.code,{children:"src"})," folder, i.e. in the root of the project."]}),"\n",(0,s.jsxs)(n.li,{children:["The file routing is in the ",(0,s.jsx)(n.code,{children:"pages"})," folder, while in FSD this folder is reserved for the flat slice structure."]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"adding-an-alias-for-the-src-directory",children:["Adding an alias for the ",(0,s.jsx)(n.code,{children:"src"})," directory"]}),"\n",(0,s.jsxs)(n.p,{children:["Add an ",(0,s.jsx)(n.code,{children:"alias"})," object to your config:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",metastring:'title="nuxt.config.ts"',children:"export default defineNuxtConfig({\n devtools: { enabled: true }, // Not FSD related, enabled at project startup\n alias: {\n \"@\": '../src'\n },\n})\n"})}),"\n",(0,s.jsx)(n.h2,{id:"choose-how-to-configure-the-router",children:"Choose how to configure the router"}),"\n",(0,s.jsxs)(n.p,{children:["In NuxtJS, there are two ways to customize the routing - using a config and using a file structure.\nIn the case of file-based routing, you will create index.vue files in folders inside the app/routes directory, and in the case of configure, you will configure the routers in the ",(0,s.jsx)(n.code,{children:"router.options.ts"})," file."]}),"\n",(0,s.jsx)(n.h3,{id:"routing-using-config",children:"Routing using config"}),"\n",(0,s.jsxs)(n.p,{children:["In the ",(0,s.jsx)(n.code,{children:"app"})," layer, create a ",(0,s.jsx)(n.code,{children:"router.options.ts"})," file, and export a config object from it:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",metastring:'title="app/router.options.ts"',children:"import type { RouterConfig } from '@nuxt/schema';\n\nexport default {\n routes: (_routes) => [],\n};\n\n"})}),"\n",(0,s.jsxs)(n.p,{children:["To add a ",(0,s.jsx)(n.code,{children:"Home"})," page to your project, you need to do the following steps:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Add a page slice inside the ",(0,s.jsx)(n.code,{children:"pages"})," layer"]}),"\n",(0,s.jsxs)(n.li,{children:["Add the appropriate route to the ",(0,s.jsx)(n.code,{children:"app/router.config.ts"})," config"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["To create a page slice, let's use the ",(0,s.jsx)(n.a,{href:"https://github.com/feature-sliced/cli",children:"CLI"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",children:"fsd pages home\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Create a ",(0,s.jsx)(n.code,{children:"home-page.vue"})," file inside the ui segment, access it using the Public API"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",metastring:'title="src/pages/home/index.ts"',children:"export { default as HomePage } from './ui/home-page';\n"})}),"\n",(0,s.jsx)(n.p,{children:"Thus, the file structure will look like this:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",children:"|\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 app\n\u2502 \u2502 \u251c\u2500\u2500 router.config.ts\n\u2502 \u251c\u2500\u2500 pages\n\u2502 \u2502 \u251c\u2500\u2500 home\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 ui\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 home-page.vue\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 index.ts\n"})}),"\n",(0,s.jsx)(n.p,{children:"Finally, let's add a root to the config:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",metastring:'title="app/router.config.ts"',children:"import type { RouterConfig } from '@nuxt/schema'\n\nexport default {\n routes: (_routes) => [\n {\n name: 'home',\n path: '/',\n component: () => import('@/pages/home.vue').then(r => r.default || r)\n }\n ],\n}\n"})}),"\n",(0,s.jsx)(n.h3,{id:"file-routing",children:"File Routing"}),"\n",(0,s.jsxs)(n.p,{children:["First of all, create a ",(0,s.jsx)(n.code,{children:"src"})," directory in the root of your project, and create app and pages layers inside this directory and a routes folder inside the app layer.\nThus, your file structure should look like this:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",children:"\u251c\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 app\n\u2502 \u2502 \u251c\u2500\u2500 routes\n\u2502 \u251c\u2500\u2500 pages # Pages folder, related to FSD\n"})}),"\n",(0,s.jsxs)(n.p,{children:["In order for NuxtJS to use the routes folder inside the ",(0,s.jsx)(n.code,{children:"app"})," layer for file routing, you need to modify ",(0,s.jsx)(n.code,{children:"nuxt.config.ts"})," as follows:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",metastring:'title="nuxt.config.ts"',children:"export default defineNuxtConfig({\n devtools: { enabled: true }, // Not FSD related, enabled at project startup\n alias: {\n \"@\": '../src'\n },\n dir: {\n pages: './src/app/routes'\n }\n})\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Now, you can create routes for pages within ",(0,s.jsx)(n.code,{children:"app"})," and connect pages from ",(0,s.jsx)(n.code,{children:"pages"})," to them."]}),"\n",(0,s.jsxs)(n.p,{children:["For example, to add a ",(0,s.jsx)(n.code,{children:"Home"})," page to your project, you need to do the following steps:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Add a page slice inside the ",(0,s.jsx)(n.code,{children:"pages"})," layer"]}),"\n",(0,s.jsxs)(n.li,{children:["Add the corresponding root inside the ",(0,s.jsx)(n.code,{children:"app"})," layer"]}),"\n",(0,s.jsx)(n.li,{children:"Align the page from the slice with the root"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["To create a page slice, let's use the ",(0,s.jsx)(n.a,{href:"https://github.com/feature-sliced/cli",children:"CLI"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",children:"fsd pages home\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Create a ",(0,s.jsx)(n.code,{children:"home-page.vue"})," file inside the ui segment, access it using the Public API"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",metastring:'title="src/pages/home/index.ts"',children:"export { default as HomePage } from './ui/home-page';\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Create a root for this page inside the ",(0,s.jsx)(n.code,{children:"app"})," layer:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",children:"\n\u251c\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 app\n\u2502 \u2502 \u251c\u2500\u2500 routes\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 index.vue\n\u2502 \u251c\u2500\u2500 pages\n\u2502 \u2502 \u251c\u2500\u2500 home\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 ui\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 home-page.vue\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 index.ts\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Add your page component inside the ",(0,s.jsx)(n.code,{children:"index.vue"})," file:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-html",metastring:'title="src/app/routes/index.vue"',children:" - + + -

    🌎 FSD international community

    · 2 min. o'qish
    Anton Medvedev
    FSD core-team member
    post-cover
    +

    💥 FSD rebranding!

    · 2 min. o'qish
    Ilya Azin
    FSD core-team member
    logo-primary
    diff --git a/uz/blog/archive.html b/uz/blog/archive.html index 0d714eea2b..00001e3de6 100644 --- a/uz/blog/archive.html +++ b/uz/blog/archive.html @@ -9,10 +9,10 @@ - - + + - + \ No newline at end of file diff --git a/uz/blog/international-community.html b/uz/blog/international-community.html index 62ae1ae3a2..5423deaf9c 100644 --- a/uz/blog/international-community.html +++ b/uz/blog/international-community.html @@ -9,11 +9,11 @@ - - + + -

    🌎 FSD international community

    · 2 min. o'qish
    Anton Medvedev
    FSD core-team member
    post-cover
    +

    🌎 FSD international community

    · 2 min. o'qish
    Anton Medvedev
    FSD core-team member
    post-cover

    TLDR:

    FSD goes out into the world, and the beginning of this is the international Discord-server

    FSD выходит в мир, и началом послужит международный Discord-сервер

    diff --git a/uz/blog/rebranding-stable.html b/uz/blog/rebranding-stable.html index a2a369c371..4492f5514b 100644 --- a/uz/blog/rebranding-stable.html +++ b/uz/blog/rebranding-stable.html @@ -9,11 +9,11 @@ - - + + -

    💥 FSD rebranding!

    · 2 min. o'qish
    Ilya Azin
    FSD core-team member
    logo-primary
    +

    💥 FSD rebranding!

    · 2 min. o'qish
    Ilya Azin
    FSD core-team member
    logo-primary

    TLDR:

    We've made whole new identity for FSD website and all related projects, feel free to use brand assets

    Мы сделали полностью новую айдентику для сайта FSD и всех связанных проектов, не стесняйтесь пользоваться фирменными ассетами

    diff --git a/uz/blog/tags.html b/uz/blog/tags.html index be13c5fbbd..c25a84278b 100644 --- a/uz/blog/tags.html +++ b/uz/blog/tags.html @@ -9,10 +9,10 @@ - - + + - + \ No newline at end of file diff --git a/uz/blog/tags/brand.html b/uz/blog/tags/brand.html index 5ed41bc39f..951220afac 100644 --- a/uz/blog/tags/brand.html +++ b/uz/blog/tags/brand.html @@ -9,11 +9,11 @@ - - + + -

    Bir post "brand" bilan

    Hamma teglarni ko'rish

    💥 FSD rebranding!

    · 2 min. o'qish
    Ilya Azin
    FSD core-team member
    logo-primary
    +

    Bir post "brand" bilan

    Hamma teglarni ko'rish
    diff --git a/uz/blog/tags/community.html b/uz/blog/tags/community.html index 959dd034db..40661690cb 100644 --- a/uz/blog/tags/community.html +++ b/uz/blog/tags/community.html @@ -9,11 +9,11 @@ - - + + -

    Bir post "community" bilan

    Hamma teglarni ko'rish

    🌎 FSD international community

    · 2 min. o'qish
    Anton Medvedev
    FSD core-team member
    post-cover
    +

    Bir post "community" bilan

    Hamma teglarni ko'rish
    diff --git a/uz/blog/tags/discord.html b/uz/blog/tags/discord.html index 5dbfd5e7ff..a734d42d3a 100644 --- a/uz/blog/tags/discord.html +++ b/uz/blog/tags/discord.html @@ -9,11 +9,11 @@ - - + + -

    Bir post "discord" bilan

    Hamma teglarni ko'rish

    🌎 FSD international community

    · 2 min. o'qish
    Anton Medvedev
    FSD core-team member
    post-cover
    +

    Bir post "discord" bilan

    Hamma teglarni ko'rish
    diff --git a/uz/blog/tags/promo.html b/uz/blog/tags/promo.html index 2e591859e0..dd2dfd82d0 100644 --- a/uz/blog/tags/promo.html +++ b/uz/blog/tags/promo.html @@ -9,11 +9,11 @@ - - + + -

    2 ta post "promo" bilan

    Hamma teglarni ko'rish

    🌎 FSD international community

    · 2 min. o'qish
    Anton Medvedev
    FSD core-team member
    post-cover
    +

    2 ta post "promo" bilan

    Hamma teglarni ko'rish

    💥 FSD rebranding!

    · 2 min. o'qish
    Ilya Azin
    FSD core-team member
    logo-primary
    diff --git a/uz/community.html b/uz/community.html index 34d95905fb..8299124386 100644 --- a/uz/community.html +++ b/uz/community.html @@ -9,17 +9,17 @@ - - + + -

    💫 Community

    + +
    Contributing

    HowTo, Workflow, Support

    \ No newline at end of file diff --git a/uz/community/team.html b/uz/community/team.html index 7ad56c66c8..745e470794 100644 --- a/uz/community/team.html +++ b/uz/community/team.html @@ -9,15 +9,15 @@ - - + + -

    Team

    + +

    Companies

    \ No newline at end of file diff --git a/uz/docs.html b/uz/docs.html index 27100c2df6..895d53e9c1 100644 --- a/uz/docs.html +++ b/uz/docs.html @@ -9,11 +9,11 @@ - - + + -

    Hujjatlar

    + +
    🛠 Misollar

    Feature-Sliced Design da qurilgan loyihalar

    \ No newline at end of file diff --git a/uz/docs/about.html b/uz/docs/about.html index 04dfa17a21..aa89d9f125 100644 --- a/uz/docs/about.html +++ b/uz/docs/about.html @@ -9,11 +9,11 @@ - - + + -

    🍰 About

    + +
    Promote

    About promotion and integration FSD at companies

    Integration • Promoting in team • Promoting in company
    \ No newline at end of file diff --git a/uz/docs/about/alternatives.html b/uz/docs/about/alternatives.html index 47acc9b0f9..c28cd90251 100644 --- a/uz/docs/about/alternatives.html +++ b/uz/docs/about/alternatives.html @@ -9,11 +9,11 @@ - - + + -

    Alternatives

    + +
    \ No newline at end of file diff --git a/uz/docs/about/mission.html b/uz/docs/about/mission.html index 43386f97de..7f09f00f2d 100644 --- a/uz/docs/about/mission.html +++ b/uz/docs/about/mission.html @@ -9,11 +9,11 @@ - - + + -

    Mission

    + +
    \ No newline at end of file diff --git a/uz/docs/about/motivation.html b/uz/docs/about/motivation.html index 2009155b89..9145c451fa 100644 --- a/uz/docs/about/motivation.html +++ b/uz/docs/about/motivation.html @@ -9,11 +9,11 @@ - - + + -

    Motivation

    +
    +
    \ No newline at end of file diff --git a/uz/docs/about/promote/for-company.html b/uz/docs/about/promote/for-company.html index d1afa615be..2d63f39ee8 100644 --- a/uz/docs/about/promote/for-company.html +++ b/uz/docs/about/promote/for-company.html @@ -9,17 +9,17 @@ - - + + -

    Promote in company

    +

    Promote in company

    WIP

    Maqola yozilish jarayonida

    Uning yaratilishini tezlashtirish uchun siz:


    🍰 Stay tuned!

    Do the project and the company need a methodology?

    About the justification of the application, Those duty

    How can I submit a methodology to a business?

    -

    How to prepare and justify a plan to move to the methodology?

    +

    How to prepare and justify a plan to move to the methodology?

    \ No newline at end of file diff --git a/uz/docs/about/promote/for-team.html b/uz/docs/about/promote/for-team.html index 595fa84bfa..05c30c9ea0 100644 --- a/uz/docs/about/promote/for-team.html +++ b/uz/docs/about/promote/for-team.html @@ -9,11 +9,11 @@ - - + + -

    Promote in team

    + +
    \ No newline at end of file diff --git a/uz/docs/about/promote/integration.html b/uz/docs/about/promote/integration.html index d5c9f77a56..0d19cf2aaa 100644 --- a/uz/docs/about/promote/integration.html +++ b/uz/docs/about/promote/integration.html @@ -9,11 +9,11 @@ - - + + -

    Integration aspects

    + +
    \ No newline at end of file diff --git a/uz/docs/about/promote/partial-application.html b/uz/docs/about/promote/partial-application.html index 4a039dfcd5..d69ca47a1c 100644 --- a/uz/docs/about/promote/partial-application.html +++ b/uz/docs/about/promote/partial-application.html @@ -9,14 +9,14 @@ - - + + -

    Partial Application

    +
    +
    \ No newline at end of file diff --git a/uz/docs/about/understanding/abstractions.html b/uz/docs/about/understanding/abstractions.html index 714c49652c..ea89f919dd 100644 --- a/uz/docs/about/understanding/abstractions.html +++ b/uz/docs/about/understanding/abstractions.html @@ -9,11 +9,11 @@ - - + + -

    Abstractions

    + +
    \ No newline at end of file diff --git a/uz/docs/about/understanding/architecture.html b/uz/docs/about/understanding/architecture.html index 68fcc28856..f002f730af 100644 --- a/uz/docs/about/understanding/architecture.html +++ b/uz/docs/about/understanding/architecture.html @@ -9,11 +9,11 @@ - - + + -

    About architecture

    + +
    \ No newline at end of file diff --git a/uz/docs/about/understanding/knowledge-types.html b/uz/docs/about/understanding/knowledge-types.html index e27d0c50e1..3b71d24d8c 100644 --- a/uz/docs/about/understanding/knowledge-types.html +++ b/uz/docs/about/understanding/knowledge-types.html @@ -9,11 +9,11 @@ - - + + -

    Knowledge types in the project

    + +
    \ No newline at end of file diff --git a/uz/docs/about/understanding/naming.html b/uz/docs/about/understanding/naming.html index f73121084e..d9f7807aba 100644 --- a/uz/docs/about/understanding/naming.html +++ b/uz/docs/about/understanding/naming.html @@ -9,11 +9,11 @@ - - + + -

    Naming

    + +
    \ No newline at end of file diff --git a/uz/docs/about/understanding/needs-driven.html b/uz/docs/about/understanding/needs-driven.html index d0c0ff0d4d..815bb1b31f 100644 --- a/uz/docs/about/understanding/needs-driven.html +++ b/uz/docs/about/understanding/needs-driven.html @@ -9,11 +9,11 @@ - - + + -

    Needs driven

    +

    Needs driven

    TL;DR

    Can't you formulate the goal that the new feature will solve? Or maybe the problem is that the task itself is not formulated? The point is also that the methodology helps to pull out the problematic definition of tasks and goals

    project does not live in static - requirements and functionality are constantly changing. Over time, the code turns into mush, because at the start the project was designed only for the initial impression of wishes. And the task of a good architecture is also to be sharpened for changing development conditions.

    Why?

    To choose a clear name for an entity and understand its components, you need to clearly understand what task will be solved with the help of all this code.

    @@ -128,6 +128,6 @@

    See also(Discussion) How to break the functionality and what it is
  • (Article) "How to better organize your applications"
  • -

    +
    \ No newline at end of file diff --git a/uz/docs/about/understanding/signals.html b/uz/docs/about/understanding/signals.html index 373c72aa91..1500d1676f 100644 --- a/uz/docs/about/understanding/signals.html +++ b/uz/docs/about/understanding/signals.html @@ -9,11 +9,11 @@ - - + + -

    Signals of architecture

    +

    Signals of architecture

    WIP

    Maqola yozilish jarayonida

    Uning yaratilishini tezlashtirish uchun siz:


    🍰 Stay tuned!

    If there is a limitation on the part of the architecture, then there are obvious reasons for this, and consequences if they are ignored

    @@ -27,6 +27,6 @@

    See also(Thread) About the fundamental nature of architecture
  • (Thread) About highlighting weak points
  • (Thread) How to understand that the data model is swollen
  • -

    +
    \ No newline at end of file diff --git a/uz/docs/branding.html b/uz/docs/branding.html index d9151c4f85..140772bae9 100644 --- a/uz/docs/branding.html +++ b/uz/docs/branding.html @@ -9,11 +9,11 @@ - - + + -

    Brending bo'yicha tavsiyalar

    +

    Brending bo'yicha tavsiyalar

    FSD ning vizual identifikatsiyasi uning asosiy tushunchalariga asoslanadi: Layered, Sliced self-contained parts, Parts & Compose, Segmented.

    Lekin biz FSD falsafasini aks ettiruvchi va osongina tanib olinadigan oddiy va chiroyli identifikatsiyaga intilamiz.

    Iltimos, qulayligingiz uchun FSD identifikatoridan o'zgarmagan holda "as-is", aktivlarimizdan foydalaning. Bu FSD ning brend-gayd identifikatoridan to'g'ri foydalanishga yordam beradi.

    @@ -43,6 +43,6 @@

    Shuningdek qarangMuhokama (github)
  • Ma'lumotnomalar bilan rebrending tarixi (figma)
  • Rebrending demosi
  • -

    +
    \ No newline at end of file diff --git a/uz/docs/get-started.html b/uz/docs/get-started.html index c7fcda032e..e7e83c84a6 100644 --- a/uz/docs/get-started.html +++ b/uz/docs/get-started.html @@ -9,15 +9,15 @@ - - + + -

    🚀 Get Started

    +
    +
    \ No newline at end of file diff --git a/uz/docs/get-started/cheatsheet.html b/uz/docs/get-started/cheatsheet.html index 0b84031067..5c3064c626 100644 --- a/uz/docs/get-started/cheatsheet.html +++ b/uz/docs/get-started/cheatsheet.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Decomposition cheatsheet

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Decomposition cheatsheet

    Use this as a quick reference when you're deciding how to decompose your UI. PDF versions are also available below, so you can print it out and keep one under your pillow.

    Choosing a layer

    Download PDF

    @@ -33,6 +33,6 @@

    See also(Thread) About the difference between features and entities
  • (Thread) About the difference between things and entities (2)
  • (Thread) About the application of criteria for decomposition
  • -

    +
    \ No newline at end of file diff --git a/uz/docs/get-started/faq.html b/uz/docs/get-started/faq.html index 68adaa52ff..d73a07b675 100644 --- a/uz/docs/get-started/faq.html +++ b/uz/docs/get-started/faq.html @@ -9,11 +9,11 @@ - - + + -

    FAQ

    + +

    Answered here

    \ No newline at end of file diff --git a/uz/docs/get-started/overview.html b/uz/docs/get-started/overview.html index bb94ba3805..6af9e49e8e 100644 --- a/uz/docs/get-started/overview.html +++ b/uz/docs/get-started/overview.html @@ -9,11 +9,11 @@ - - + + -

    Overview

    +

    Overview

    Feature-Sliced Design (FSD) is an architectural methodology for scaffolding front-end applications. Simply put, it's a compilation of rules and conventions on organizing code. The main purpose of this methodology is to make the project more understandable and stable in the face of ever-changing business requirements.

    Apart from a set of conventions, FSD is also a toolchain. We have a linter to check your project's architecture, folder generators through a CLI or IDEs, as well as a rich library of examples.

    Is it right for me?

    @@ -129,6 +129,6 @@

    Next stepsWant to get a good grasp of how to think in FSD? Check out the Tutorial.
  • Prefer to learn from examples? We have a lot in the Examples section.
  • Have questions? Drop by our Telegram chat and get help from the community.
  • -

    +
    \ No newline at end of file diff --git a/uz/docs/get-started/tutorial.html b/uz/docs/get-started/tutorial.html index f4f750e86e..760f006b8e 100644 --- a/uz/docs/get-started/tutorial.html +++ b/uz/docs/get-started/tutorial.html @@ -9,11 +9,11 @@ - - + + -

    Tutorial

    +

    Tutorial

    Part 1. On paper

    This tutorial will examine the Real World App, also known as Conduit. Conduit is a basic Medium clone — it lets you read and write articles as well as comment on the articles of others.

    Conduit home page

    @@ -272,6 +272,6 @@

    Article edito
    app/routes/editor._index.tsx, app/routes/editor.$slug.tsx (same content)
    import { ArticleEditPage } from "pages/article-edit";

    export { loader, action } from "pages/article-edit";

    export default ArticleEditPage;

    We’re done now! Log in and try creating a new article. Or “forget” to write the article and see the validation kick in.

    The Conduit article editor, with the title field saying “New article” and the rest of the fields empty. Above the form there are two errors: “Describe what this article is about” and “Write the article itself”.

    The Conduit article editor, with the title field saying “New article” and the rest of the fields empty. Above the form there are two errors: “Describe what this article is about” and “Write the article itself”.
    -

    The profile and settings pages are very similar to the article reader and editor, they are left as an exercise for the reader, that’s you :)

    +

    The profile and settings pages are very similar to the article reader and editor, they are left as an exercise for the reader, that’s you :)

    \ No newline at end of file diff --git a/uz/docs/guides.html b/uz/docs/guides.html index 101d5bf21d..64baa0d34b 100644 --- a/uz/docs/guides.html +++ b/uz/docs/guides.html @@ -9,11 +9,11 @@ - - + + -

    🎯 Guides

    + +
    Code Issues (Smells)

    General architecture issues for legacy code

    Desegmented • Routing • Cross-imports
    \ No newline at end of file diff --git a/uz/docs/guides/examples.html b/uz/docs/guides/examples.html index ec99531ceb..8eb656f565 100644 --- a/uz/docs/guides/examples.html +++ b/uz/docs/guides/examples.html @@ -9,16 +9,16 @@ - - + + -

    Examples

    + +
    Page layouts

    Main cases with layouts

    Where to store them • Using widgets in layouts
    \ No newline at end of file diff --git a/uz/docs/guides/examples/auth.html b/uz/docs/guides/examples/auth.html index 57aa25bb4d..c089d4a521 100644 --- a/uz/docs/guides/examples/auth.html +++ b/uz/docs/guides/examples/auth.html @@ -9,11 +9,11 @@ - - + + -

    Authentication

    +

    Authentication

    Broadly, authentication consists of the following steps:

    1. Get the credentials from the user
    2. @@ -164,6 +164,6 @@

      Automatic logout

      -

      Don't forget to build failsafes for when a request to log out fails, or a request to refresh a login token fails. In both of these cases, you should clear the token store. If you keep your token in Entities, this code can be placed in the model segment as it is pure business logic. If you keep your token in Shared, placing this logic in shared/api might bloat the segment and dilute its purpose. If you're noticing that your API segment contains two several unrelated things, consider splitting out the token management logic into another segment, for example, shared/auth.

    +

    Don't forget to build failsafes for when a request to log out fails, or a request to refresh a login token fails. In both of these cases, you should clear the token store. If you keep your token in Entities, this code can be placed in the model segment as it is pure business logic. If you keep your token in Shared, placing this logic in shared/api might bloat the segment and dilute its purpose. If you're noticing that your API segment contains two several unrelated things, consider splitting out the token management logic into another segment, for example, shared/auth.

    \ No newline at end of file diff --git a/uz/docs/guides/examples/autocompleted.html b/uz/docs/guides/examples/autocompleted.html index b4f8de6e95..9d0ab8f984 100644 --- a/uz/docs/guides/examples/autocompleted.html +++ b/uz/docs/guides/examples/autocompleted.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Autocomplete

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Autocomplete

    WIP

    Maqola yozilish jarayonida

    Uning yaratilishini tezlashtirish uchun siz:


    🍰 Stay tuned!

    About decomposition by layers

    @@ -21,6 +21,6 @@

    See also

    +
    \ No newline at end of file diff --git a/uz/docs/guides/examples/browser-api.html b/uz/docs/guides/examples/browser-api.html index a9ed44ce4a..e48d8074ab 100644 --- a/uz/docs/guides/examples/browser-api.html +++ b/uz/docs/guides/examples/browser-api.html @@ -9,15 +9,15 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Browser API

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Browser API

    WIP

    Maqola yozilish jarayonida

    Uning yaratilishini tezlashtirish uchun siz:


    🍰 Stay tuned!

    About working with the Browser API: localStorage, audio Api, bluetooth API, etc.

    You can ask about the idea in more detail @alex_novi

    -
    +
    \ No newline at end of file diff --git a/uz/docs/guides/examples/cms.html b/uz/docs/guides/examples/cms.html index 1fd46cb404..0821a168a4 100644 --- a/uz/docs/guides/examples/cms.html +++ b/uz/docs/guides/examples/cms.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    CMS

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    CMS

    WIP

    Maqola yozilish jarayonida

    Uning yaratilishini tezlashtirish uchun siz:


    🍰 Stay tuned!

    Features may be different

    In some projects, all the functionality is concentrated in data from the server

    @@ -26,6 +26,6 @@

    https://t.me/feature_sliced/1553

    -

    +
    \ No newline at end of file diff --git a/uz/docs/guides/examples/feedback.html b/uz/docs/guides/examples/feedback.html index fadcf704f1..ce46dde04e 100644 --- a/uz/docs/guides/examples/feedback.html +++ b/uz/docs/guides/examples/feedback.html @@ -9,14 +9,14 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Feedback

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.
    +
    \ No newline at end of file diff --git a/uz/docs/guides/examples/i18n.html b/uz/docs/guides/examples/i18n.html index e3c435f476..cd76fcd40c 100644 --- a/uz/docs/guides/examples/i18n.html +++ b/uz/docs/guides/examples/i18n.html @@ -9,17 +9,17 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    i18n

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    i18n

    WIP

    Maqola yozilish jarayonida

    Uning yaratilishini tezlashtirish uchun siz:


    🍰 Stay tuned!

    Where to place it? How to work with this?

    +
    \ No newline at end of file diff --git a/uz/docs/guides/examples/metric.html b/uz/docs/guides/examples/metric.html index 18540c5a7e..0d548cb031 100644 --- a/uz/docs/guides/examples/metric.html +++ b/uz/docs/guides/examples/metric.html @@ -9,14 +9,14 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Metric

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.
    +
    \ No newline at end of file diff --git a/uz/docs/guides/examples/monorepo.html b/uz/docs/guides/examples/monorepo.html index 566214346a..08d0b0cf01 100644 --- a/uz/docs/guides/examples/monorepo.html +++ b/uz/docs/guides/examples/monorepo.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Monorepositories

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Monorepositories

    WIP

    Maqola yozilish jarayonida

    Uning yaratilishini tezlashtirish uchun siz:


    🍰 Stay tuned!

    About applicability for mono repositories, about bff, about microapps

    @@ -22,6 +22,6 @@

    See also(Discussion) About mono repositories and plug-ins-packages
  • (Thread) About the application for a mono repository
  • -

    +
    \ No newline at end of file diff --git a/uz/docs/guides/examples/page-layout.html b/uz/docs/guides/examples/page-layout.html index d506ec3d28..440e947919 100644 --- a/uz/docs/guides/examples/page-layout.html +++ b/uz/docs/guides/examples/page-layout.html @@ -9,11 +9,11 @@ - - + + -

    Page layouts

    +

    Page layouts

    This guide examines the abstraction of a page layout — when several pages share the same overall structure, and differ only in the main content.

    info

    Is your question not covered by this guide? Post your question by leaving feedback on this article (blue button on the right) and we will consider expanding this guide!

    Simple layout

    @@ -47,6 +47,6 @@

    Further reading

    • There's an example of how to build a layout with authentication with React and Remix (equivalent to React Router) in the tutorial.
    • -
    +
    \ No newline at end of file diff --git a/uz/docs/guides/examples/platforms.html b/uz/docs/guides/examples/platforms.html index 113dcb2dc9..a4786867aa 100644 --- a/uz/docs/guides/examples/platforms.html +++ b/uz/docs/guides/examples/platforms.html @@ -9,14 +9,14 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Desktop/Touch platforms

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.
    +
    \ No newline at end of file diff --git a/uz/docs/guides/examples/ssr.html b/uz/docs/guides/examples/ssr.html index 03330d86b0..aa29fd2399 100644 --- a/uz/docs/guides/examples/ssr.html +++ b/uz/docs/guides/examples/ssr.html @@ -9,14 +9,14 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    SSR

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.
    +
    \ No newline at end of file diff --git a/uz/docs/guides/examples/theme.html b/uz/docs/guides/examples/theme.html index 51e439501c..71b88c6a1b 100644 --- a/uz/docs/guides/examples/theme.html +++ b/uz/docs/guides/examples/theme.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Theme

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    Theme

    WIP

    Maqola yozilish jarayonida

    Uning yaratilishini tezlashtirish uchun siz:


    🍰 Stay tuned!

    Where should I put my work with the theme and palette?

    @@ -22,6 +22,6 @@

    Discussion about the location of the theme, i18n logic

    https://youtu.be/b_nBvHWqxP8?t=133

    -
    +
    \ No newline at end of file diff --git a/uz/docs/guides/examples/types.html b/uz/docs/guides/examples/types.html index 978360a74d..4dae7384be 100644 --- a/uz/docs/guides/examples/types.html +++ b/uz/docs/guides/examples/types.html @@ -9,11 +9,11 @@ - - + + -

    Types

    +

    Types

    This guide concerns data types from typed languages like TypeScript and describes where they fit within FSD.

    info

    Is your question not covered by this guide? Post your question by leaving feedback on this article (blue button on the right) and we will consider expanding this guide!

    Utility types

    @@ -142,6 +142,6 @@

    shared/lib/untyped-packages/use-react-screenshot.d.ts
    // This library doesn't have typings, and we didn't want to bother writing our own.
    declare module "use-react-screenshot";

    Auto-generation of types

    -

    It's common to generate types from external sources, for example, generating backend types from an OpenAPI schema. In this case, create a dedicated place in your codebase for these types, like shared/api/openapi. Ideally, you should also include a README in that folder that describes what these files are, how to regenerate them, etc.

    +

    It's common to generate types from external sources, for example, generating backend types from an OpenAPI schema. In this case, create a dedicated place in your codebase for these types, like shared/api/openapi. Ideally, you should also include a README in that folder that describes what these files are, how to regenerate them, etc.

    \ No newline at end of file diff --git a/uz/docs/guides/examples/white-labels.html b/uz/docs/guides/examples/white-labels.html index 0dcfee62ba..41b47d70ab 100644 --- a/uz/docs/guides/examples/white-labels.html +++ b/uz/docs/guides/examples/white-labels.html @@ -9,11 +9,11 @@ - - + + -
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    White Labels

    +
    Unlisted page
    This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

    White Labels

    WIP

    Maqola yozilish jarayonida

    Uning yaratilishini tezlashtirish uchun siz:


    🍰 Stay tuned!

    Figma, brand uikit, templates, adaptability to brands

    @@ -22,6 +22,6 @@

    See also(Thread) About the application for white-labels (branded) projects
  • (Presentation) About white-labels apps and design
  • -

    +
    \ No newline at end of file diff --git a/uz/docs/guides/issues/cross-imports.html b/uz/docs/guides/issues/cross-imports.html index b0dbb5afdf..1bf961c189 100644 --- a/uz/docs/guides/issues/cross-imports.html +++ b/uz/docs/guides/issues/cross-imports.html @@ -9,11 +9,11 @@ - - + + -

    Cross-imports

    +

    Cross-imports

    WIP

    Maqola yozilish jarayonida

    Uning yaratilishini tezlashtirish uchun siz:


    🍰 Stay tuned!

    Cross-imports appear when the layer or abstraction begins to take too much responsibility than it should. That is why the methodology identifies new layers that allow you to uncouple these cross-imports

    @@ -25,6 +25,6 @@

    See also(Thread) About cross-imports and responsibility
  • (Thread) About imports between segments
  • (Thread) About cross-imports inside shared
  • -

    +
    \ No newline at end of file diff --git a/uz/docs/guides/issues/desegmented.html b/uz/docs/guides/issues/desegmented.html index 3fcd6cc207..54d4078e7a 100644 --- a/uz/docs/guides/issues/desegmented.html +++ b/uz/docs/guides/issues/desegmented.html @@ -9,11 +9,11 @@ - - + + -

    Desegemented

    +

    Desegemented

    WIP

    Maqola yozilish jarayonida

    Uning yaratilishini tezlashtirish uchun siz:


    🍰 Stay tuned!

    Situation

    Very often, there is a situation on projects when modules related to a specific domain from the subject area are unnecessarily desegmented and scattered around the project

    @@ -38,6 +38,6 @@

    See also(Article) About Low Coupling and High Cohesion clearly
  • (Article) Low Coupling and High Cohesion. The Law of Demeter
  • -

    +
    \ No newline at end of file diff --git a/uz/docs/guides/issues/routes.html b/uz/docs/guides/issues/routes.html index f3ae0f815a..6ee066b9d4 100644 --- a/uz/docs/guides/issues/routes.html +++ b/uz/docs/guides/issues/routes.html @@ -9,11 +9,11 @@ - - + + -

    Routing

    + +
    \ No newline at end of file diff --git a/uz/docs/guides/migration/from-legacy.html b/uz/docs/guides/migration/from-legacy.html index 2b1093396e..481dddd9e7 100644 --- a/uz/docs/guides/migration/from-legacy.html +++ b/uz/docs/guides/migration/from-legacy.html @@ -9,11 +9,11 @@ - - + + -

    Migration from legacy

    +

    Migration from legacy

    WIP

    Maqola yozilish jarayonida

    Uning yaratilishini tezlashtirish uchun siz:


    🍰 Stay tuned!

    The article aggregates the experience of several companies and projects on moving to Feature-Sliced Design with different initial conditions

    @@ -45,6 +45,6 @@

    See also

    +
    \ No newline at end of file diff --git a/uz/docs/guides/migration/from-v1.html b/uz/docs/guides/migration/from-v1.html index 3a2b8e4ed2..428ce5599d 100644 --- a/uz/docs/guides/migration/from-v1.html +++ b/uz/docs/guides/migration/from-v1.html @@ -9,14 +9,14 @@ - - + + -

    Migration from v1

    + +
    \ No newline at end of file diff --git a/uz/docs/guides/tech/with-nextjs.html b/uz/docs/guides/tech/with-nextjs.html index f6563d98a9..7ab6156409 100644 --- a/uz/docs/guides/tech/with-nextjs.html +++ b/uz/docs/guides/tech/with-nextjs.html @@ -9,11 +9,11 @@ - - + + -

    Usage with NextJS

    + +
    \ No newline at end of file diff --git a/uz/docs/guides/tech/with-nuxtjs.html b/uz/docs/guides/tech/with-nuxtjs.html index 4757f54c8d..70e13d401b 100644 --- a/uz/docs/guides/tech/with-nuxtjs.html +++ b/uz/docs/guides/tech/with-nuxtjs.html @@ -9,11 +9,11 @@ - - + + -

    Usage with NuxtJS

    + +
    \ No newline at end of file diff --git a/uz/docs/guides/tech/with-react-query.html b/uz/docs/guides/tech/with-react-query.html index ad94405ccc..15dff0cab3 100644 --- a/uz/docs/guides/tech/with-react-query.html +++ b/uz/docs/guides/tech/with-react-query.html @@ -9,11 +9,11 @@ - - + + -

    Usage with React Query

    +
    +
    \ No newline at end of file diff --git a/uz/docs/guides/tech/with-sveltekit.html b/uz/docs/guides/tech/with-sveltekit.html index 2fc86f146c..4b8c7198a2 100644 --- a/uz/docs/guides/tech/with-sveltekit.html +++ b/uz/docs/guides/tech/with-sveltekit.html @@ -9,11 +9,11 @@ - - + + -

    Usage with SvelteKit

    +

    Usage with SvelteKit

    It is possible to implement FSD in a SvelteKit project, but conflicts arise due to the differences between the structure requirements of a SvelteKit project and the principles of FSD:

    +
    \ No newline at end of file diff --git a/uz/docs/reference.html b/uz/docs/reference.html index d06dd1d587..e37427b67b 100644 --- a/uz/docs/reference.html +++ b/uz/docs/reference.html @@ -9,15 +9,15 @@ - - + + -

    📚 Malumot

    + +
    Ommaviy API

    Kengaytiriladigan va integratsiyalashuvi oson modullarni loyihalash amaliyoti

    \ No newline at end of file diff --git a/uz/docs/reference/isolation.html b/uz/docs/reference/isolation.html index 333d9e3455..75881df3f5 100644 --- a/uz/docs/reference/isolation.html +++ b/uz/docs/reference/isolation.html @@ -9,11 +9,11 @@ - - + + -

    Isolation of modules

    + +
    \ No newline at end of file diff --git a/uz/docs/reference/isolation/coupling-cohesion.html b/uz/docs/reference/isolation/coupling-cohesion.html index 36dcc112a8..6ecd70105e 100644 --- a/uz/docs/reference/isolation/coupling-cohesion.html +++ b/uz/docs/reference/isolation/coupling-cohesion.html @@ -9,11 +9,11 @@ - - + + -

    Low Coupling & High Cohesion

    + +
    \ No newline at end of file diff --git a/uz/docs/reference/isolation/decouple-entities.html b/uz/docs/reference/isolation/decouple-entities.html index e911b2dd10..b7e17ac431 100644 --- a/uz/docs/reference/isolation/decouple-entities.html +++ b/uz/docs/reference/isolation/decouple-entities.html @@ -9,11 +9,11 @@ - - + + -

    Decouple entities

    + +
    \ No newline at end of file diff --git a/uz/docs/reference/layers.html b/uz/docs/reference/layers.html index 1659febeaf..5e0c19974f 100644 --- a/uz/docs/reference/layers.html +++ b/uz/docs/reference/layers.html @@ -9,11 +9,11 @@ - - + + -

    Qatlamlar

    +

    Qatlamlar

    Qatlamlar - Xususiyatlar bilan kesilgan dizayndagi tashkiliy ierarxiyaning birinchi darajasi. Ularning maqsadi kodni qanchalik mas'uliyatga muhtojligi va dasturda qancha boshqa modullarga bog'liqligi asosida ajratishdir.

    note

    Ushbu sahifada module ilovadagi ichki modul - indeks fayli bo'lgan fayl yoki katalogni bildiradi. Npm paketlari bilan adashtirmaslik kerak.

    Har bir qatlam o'ziga xos semantik ma'noga ega bo'lib, kodingizdagi modulga qanday mas'uliyat yuklanishi kerakligini aniqlashga yordam beradi. Qatlam nomlari va qiymatlari Feature-Sliced ​​Design yordamida qurilgan barcha loyihalar uchun standartlashtirilgan. @@ -87,6 +87,6 @@

    AppRouter
  • Ma'lumotlar do'konlari va boshqa kontekst provayderlari
  • Analitika initsializatsiyasi
  • -

    +
    \ No newline at end of file diff --git a/uz/docs/reference/public-api.html b/uz/docs/reference/public-api.html index 906f9b37d3..7d23c62a37 100644 --- a/uz/docs/reference/public-api.html +++ b/uz/docs/reference/public-api.html @@ -9,11 +9,11 @@ - - + + -

    Public API

    + +
    \ No newline at end of file diff --git a/uz/docs/reference/slices-segments.html b/uz/docs/reference/slices-segments.html index d2149c106b..2ee5ec1c3d 100644 --- a/uz/docs/reference/slices-segments.html +++ b/uz/docs/reference/slices-segments.html @@ -9,11 +9,11 @@ - - + + -

    Slices and segments

    +

    Slices and segments

    Slices

    Slices are the second level in the organizational hierarchy of Feature-Sliced Design. Their main purpose is to group code by its meaning for the product, business or just the application.

    The names of slices are not standardized because they are directly determined by the business domain of your application. For example, a photo gallery might have slices photo, create-album, gallery-page. A social network would require different slices, for example, post, add-user-to-friends, news-feed.

    @@ -38,6 +38,6 @@

    SegmentsExamples

    -
    Layeruimodellibapi
    SharedUI kitUsually not usedUtility modules of several related files.
    If you need to use individual helpers, consider using utility libraries such as lodash-es.
    Rudimentary API client with additional features like authentication or caching.
    EntitiesSkeleton of a business entity with slots for interactive elementsData storage of instances of this entity as well as functions for manipulating that data.
    This segment is most fit for storing server-side data. If you use TanStack Query or other methods of implicit storage, you may choose to omit this segment.
    Functions for manipulating instances of this entity that aren't related to storageAPI methods using the API client from Shared for easy communication with the backend
    FeaturesInteractive elements that enable users to use this featureBusiness logic and infrastructure data storage, if needed (e.g., current app theme). This is the code that actually produces value for the user.Infrastructural code that helps to concisely describe the business logic in the model segmentAPI methods that represent this feature on the backend.
    May compose API methods from Entities.
    WidgetsComposition of Entities and Features into self-contained UI blocks.
    Can also contain error boundaries and loading states.
    Infrastructure data storage, if neededNon-business interactions (e.g., gestures) and other necessary code for the block to function on a pageUsually not used, but can contain data loaders in nested routing contexts (e.g., Remix)
    PagesComposition of Entities, Features and Widgets into complete pages.
    Can also contain error boundaries and loading states.
    Usually not usedNon-business interactions (e.g., gestures) and other necessary code for the page to deliver a complete user experienceData loaders for SSR-oriented frameworks
    +
    Layeruimodellibapi
    SharedUI kitUsually not usedUtility modules of several related files.
    If you need to use individual helpers, consider using utility libraries such as lodash-es.
    Rudimentary API client with additional features like authentication or caching.
    EntitiesSkeleton of a business entity with slots for interactive elementsData storage of instances of this entity as well as functions for manipulating that data.
    This segment is most fit for storing server-side data. If you use TanStack Query or other methods of implicit storage, you may choose to omit this segment.
    Functions for manipulating instances of this entity that aren't related to storageAPI methods using the API client from Shared for easy communication with the backend
    FeaturesInteractive elements that enable users to use this featureBusiness logic and infrastructure data storage, if needed (e.g., current app theme). This is the code that actually produces value for the user.Infrastructural code that helps to concisely describe the business logic in the model segmentAPI methods that represent this feature on the backend.
    May compose API methods from Entities.
    WidgetsComposition of Entities and Features into self-contained UI blocks.
    Can also contain error boundaries and loading states.
    Infrastructure data storage, if neededNon-business interactions (e.g., gestures) and other necessary code for the block to function on a pageUsually not used, but can contain data loaders in nested routing contexts (e.g., Remix)
    PagesComposition of Entities, Features and Widgets into complete pages.
    Can also contain error boundaries and loading states.
    Usually not usedNon-business interactions (e.g., gestures) and other necessary code for the page to deliver a complete user experienceData loaders for SSR-oriented frameworks
    \ No newline at end of file diff --git a/uz/examples.html b/uz/examples.html index 27dbd04573..954384e45e 100644 --- a/uz/examples.html +++ b/uz/examples.html @@ -9,10 +9,10 @@ - - + + -

    Namunalar

    FSD yordamida yaratilgan veb-saytlar ro'yxati

    v2
    Tiny Bunny Mini Game

    Mini-game "21 points" in the universe of the visual novel "Tiny Bunny".

    reactredux-toolkittypescript
    v2
    Roke.to Business

    Business branch of Roketo, a crypto streaming service which allows paying people by the second

    reacteffectortailwindcssturbo
    v2
    Roke.to dApp

    A crypto streaming service which allows paying people by the second

    reacteffectortailwindcss
    v2
    IT bookstore

    Catalog for viewing and searching information technology books

    reactredux toolkittypescriptreact routervitescss
    v2
    Moke Smoke (React Native example)

    An application that helps you quit smoking, published in the App Store and Google. Developed with React Native

    reactrtkpersisttypescriptfirebase
    v2
    Moonlogs (Effector + Forest example)

    Moonlogs is a business-event logging tool with a built-in user-friendly web interface for easy access to events

    foresteffectortailwindtypescriptgo
    v2
    Posts (React Query example)

    Example of using FSD with React Query (Mutation, Query, Pagination)

    reactreact-querytypescriptmaterial ui
    v2
    FalkChat

    FalkChat is your go-to destination for seamless and engaging online conversations.

    reactnextprettierclerktypescripttailwindshadcn/uizustand
    v2
    Polka

    The application is a bookshelf where you can add your favorite books. The application works with the Google Books API.

    vue3piniatypescriptvue-routereslintprettiervitevuetify
    v2
    Fake Cyber Web Store

    Example web store on Vue3

    vue3piniatypescriptfirebasevue-routereslintprettiervite
    v2
    VK Audiopad

    Chrome extension for VK Music

    reactvkuitypescript
    v2
    Сryptolight

    Cryptocurrency review site based on Feature-Sliced Design (Architectural methodology for frontend projects).

    reacteffectornextuitypescriptvite
    v2
    Money Flow

    A mobile application for tracking your expenses and incomes.

    capacitorjsreactreact-routerzustandvitetypescriptmobileandroidios
    v2
    E-Commerce

    This project is an online store built using React. It provides the ability to view the product catalog and product pages

    reactmobxwebpacktypescriptssr
    v2
    Todo app (Vue 3 + Pinia)

    QuickStart todo-app example for Vue developers with pinia store

    vue 3piniavitetypescript
    v2
    Conduit

    A social blogging site powered by Feature-Sliced Design architectural methodology.

    reactreact-routerreact-queryzustandvitetypescript
    v2
    Kinomore (React+Effector)

    Large project on the effector/fsd stack

    reacteffectortypescriptnextjsreact-testing-library
    v2
    Sudoku (React+Effector)

    A simple crossword of numbers on effector / fsd

    reacteffectortypescriptvitetailwindatomic-router
    v2
    Nukeapp (React+ReduxToolkit)

    Shopping app build on React/ReduxToolkit stack

    reactredux-toolkittypescriptvite
    v2
    Simple Greenhouse App (React+MobX)

    Simple demonstration of how FSD can be implemented with TypeScript, React.js, MobX and Firebase

    reactmobxtypescriptfirebasemuivite
    v2
    Todo App (ReactNative+Redux)

    QuickStart todo-app example for ReactNative(Expo) developers

    react-nativeexporedux
    v2
    Rastrr

    A simple and free graphic editor for novice artists

    svelte
    v2
    Draw, I'll Help

    A drawing app with shape correction powered by ML

    svelte
    v2
    Cast

    A podcast listening PWA with automated quality assurance

    svelte
    v2
    Loripsum generator

    Simple fish text generator

    reacteffector
    v2
    Projentry (demo)

    Assistant for your projects

    reactantd
    v2
    Todo App (Angular 13)

    QuickStart todo-app example for Angular developers

    angularrxjs
    v2
    Todo App (Vue 3)

    QuickStart todo-app example for Vue developers

    vuevuexantd
    v2
    Todo App (React+Redux)

    QuickStart todo-app example for React developers (Redux version)

    reactreduxantd
    v2
    Todo App (React+Effector)

    QuickStart todo-app example for React developers (Effector version)

    reacteffectorantd
    v2
    Github Client

    React & GraphQL powered github web-client

    reactgraphqlantd
    v2
    Cardbox

    The best solutions from developers in one place

    reacteffector
    +

    Namunalar

    FSD yordamida yaratilgan veb-saytlar ro'yxati

    v2
    Tiny Bunny Mini Game

    Mini-game "21 points" in the universe of the visual novel "Tiny Bunny".

    reactredux-toolkittypescript
    v2
    Roke.to Business

    Business branch of Roketo, a crypto streaming service which allows paying people by the second

    reacteffectortailwindcssturbo
    v2
    Roke.to dApp

    A crypto streaming service which allows paying people by the second

    reacteffectortailwindcss
    v2
    IT bookstore

    Catalog for viewing and searching information technology books

    reactredux toolkittypescriptreact routervitescss
    v2
    Moke Smoke (React Native example)

    An application that helps you quit smoking, published in the App Store and Google. Developed with React Native

    reactrtkpersisttypescriptfirebase
    v2
    Moonlogs (Effector + Forest example)

    Moonlogs is a business-event logging tool with a built-in user-friendly web interface for easy access to events

    foresteffectortailwindtypescriptgo
    v2
    Posts (React Query example)

    Example of using FSD with React Query (Mutation, Query, Pagination)

    reactreact-querytypescriptmaterial ui
    v2
    FalkChat

    FalkChat is your go-to destination for seamless and engaging online conversations.

    reactnextprettierclerktypescripttailwindshadcn/uizustand
    v2
    Polka

    The application is a bookshelf where you can add your favorite books. The application works with the Google Books API.

    vue3piniatypescriptvue-routereslintprettiervitevuetify
    v2
    Fake Cyber Web Store

    Example web store on Vue3

    vue3piniatypescriptfirebasevue-routereslintprettiervite
    v2
    VK Audiopad

    Chrome extension for VK Music

    reactvkuitypescript
    v2
    Сryptolight

    Cryptocurrency review site based on Feature-Sliced Design (Architectural methodology for frontend projects).

    reacteffectornextuitypescriptvite
    v2
    Money Flow

    A mobile application for tracking your expenses and incomes.

    capacitorjsreactreact-routerzustandvitetypescriptmobileandroidios
    v2
    E-Commerce

    This project is an online store built using React. It provides the ability to view the product catalog and product pages

    reactmobxwebpacktypescriptssr
    v2
    Todo app (Vue 3 + Pinia)

    QuickStart todo-app example for Vue developers with pinia store

    vue 3piniavitetypescript
    v2
    Conduit

    A social blogging site powered by Feature-Sliced Design architectural methodology.

    reactreact-routerreact-queryzustandvitetypescript
    v2
    Kinomore (React+Effector)

    Large project on the effector/fsd stack

    reacteffectortypescriptnextjsreact-testing-library
    v2
    Sudoku (React+Effector)

    A simple crossword of numbers on effector / fsd

    reacteffectortypescriptvitetailwindatomic-router
    v2
    Nukeapp (React+ReduxToolkit)

    Shopping app build on React/ReduxToolkit stack

    reactredux-toolkittypescriptvite
    v2
    Simple Greenhouse App (React+MobX)

    Simple demonstration of how FSD can be implemented with TypeScript, React.js, MobX and Firebase

    reactmobxtypescriptfirebasemuivite
    v2
    Todo App (ReactNative+Redux)

    QuickStart todo-app example for ReactNative(Expo) developers

    react-nativeexporedux
    v2
    Rastrr

    A simple and free graphic editor for novice artists

    svelte
    v2
    Draw, I'll Help

    A drawing app with shape correction powered by ML

    svelte
    v2
    Cast

    A podcast listening PWA with automated quality assurance

    svelte
    v2
    Loripsum generator

    Simple fish text generator

    reacteffector
    v2
    Projentry (demo)

    Assistant for your projects

    reactantd
    v2
    Todo App (Angular 13)

    QuickStart todo-app example for Angular developers

    angularrxjs
    v2
    Todo App (Vue 3)

    QuickStart todo-app example for Vue developers

    vuevuexantd
    v2
    Todo App (React+Redux)

    QuickStart todo-app example for React developers (Redux version)

    reactreduxantd
    v2
    Todo App (React+Effector)

    QuickStart todo-app example for React developers (Effector version)

    reacteffectorantd
    v2
    Github Client

    React & GraphQL powered github web-client

    reactgraphqlantd
    v2
    Cardbox

    The best solutions from developers in one place

    reacteffector
    \ No newline at end of file diff --git a/uz/index.html b/uz/index.html index c5ffe82103..611331a2eb 100644 --- a/uz/index.html +++ b/uz/index.html @@ -9,10 +9,10 @@ - - + + -

    Feature-Sliced Design

    Front-end loyihalari uchun arxitektura metodologiyasi

    Afzalliklari

    Aniq biznes mantiq

    Arxitekturani o'rganish oson, chunki u domen modullaridan iborat

    Moslashuvchanlik

    Arxitektura komponentlarini moslashuvchan tarzda almashtirish, yangi sharoitlarda qo'shish mumkin

    Texnik qarz

    Har bir modul nojo'ya ta'sirlarsiz mustaqil ravishda o'zgartirilishi/qayta yozilishi mumkin

    Aniq qayta foydalanish mumkinligi

    DRY va lokal moslashtirish o'rtasidagi muvozanatni saqlaydi

    Tushunchalar

    Ommaviy API

    Har bir modul yuqori darajadagi umumiy API deklaratsiyasiga ega bo'lishi kerak

    Izolyatsiya

    Modul to'g'ridan-to'g'ri bir xil qatlamdagi boshqa modullarga yoki uning ustidagi qatlamlarga bog'liq bo'lmasligi kerak.

    Ehtiyojlarni tushunish

    Biznes va foydalanuvchi ehtiyojlariga e'tibor qarating

    Sxema

    Metodologiyadan foydalanadigan kompaniyalar

    Sizning kompaniyangizda metodologiya qo'llaniladimi? Habar bering
    +

    Feature-Sliced Design

    Front-end loyihalari uchun arxitektura metodologiyasi

    Afzalliklari

    Aniq biznes mantiq

    Arxitekturani o'rganish oson, chunki u domen modullaridan iborat

    Moslashuvchanlik

    Arxitektura komponentlarini moslashuvchan tarzda almashtirish, yangi sharoitlarda qo'shish mumkin

    Texnik qarz

    Har bir modul nojo'ya ta'sirlarsiz mustaqil ravishda o'zgartirilishi/qayta yozilishi mumkin

    Aniq qayta foydalanish mumkinligi

    DRY va lokal moslashtirish o'rtasidagi muvozanatni saqlaydi

    Tushunchalar

    Ommaviy API

    Har bir modul yuqori darajadagi umumiy API deklaratsiyasiga ega bo'lishi kerak

    Izolyatsiya

    Modul to'g'ridan-to'g'ri bir xil qatlamdagi boshqa modullarga yoki uning ustidagi qatlamlarga bog'liq bo'lmasligi kerak.

    Ehtiyojlarni tushunish

    Biznes va foydalanuvchi ehtiyojlariga e'tibor qarating

    Sxema

    Metodologiyadan foydalanadigan kompaniyalar

    Sizning kompaniyangizda metodologiya qo'llaniladimi? Habar bering
    \ No newline at end of file diff --git a/uz/nav.html b/uz/nav.html index 234ec7cf2b..1d7dd80e9d 100644 --- a/uz/nav.html +++ b/uz/nav.html @@ -9,11 +9,11 @@ - - + + -

    🧭 Navigatsiya

    Eskirgan havolalar

    Hujjatlarni qayta tuzilgandan so'ng, maqolalarda ba'zi havolalar o'zgartirildi. Quyida siz izlayotgan sahifani topishingiz mumkin.

    Lekin moslik uchun eski havolalardan qayta yo'naltirishlar mavjud

    🚀 Get Started

    ⚡️ Simplified and merged

    Tutorial

    old: /docs/get-started/quick-start
    new: /docs/get-started/tutorial

    Basics

    old: /docs/get-started/basics
    new: /docs/get-started/overview

    Decompose Cheatsheet

    old: /docs/get-started/tutorial/decompose; +

    🧭 Navigatsiya

    Eskirgan havolalar

    Hujjatlarni qayta tuzilgandan so'ng, maqolalarda ba'zi havolalar o'zgartirildi. Quyida siz izlayotgan sahifani topishingiz mumkin.

    Lekin moslik uchun eski havolalardan qayta yo'naltirishlar mavjud

    🍰 Alternatives

    ⚡️ Moved and merged to /about/alternatives as advanced materials

    Architecture approaches alternatives

    old: /docs/about/alternatives/big-ball-of-mud; /docs/about/alternatives/design-principles; diff --git a/uz/search.html b/uz/search.html index 363b5f2c68..a3e6a7751d 100644 --- a/uz/search.html +++ b/uz/search.html @@ -9,10 +9,10 @@ - - + + - + \ No newline at end of file diff --git a/uz/versions.html b/uz/versions.html index 4de93573bf..a99c544b64 100644 --- a/uz/versions.html +++ b/uz/versions.html @@ -9,10 +9,10 @@ - - + + -

    Feature-Sliced Design versiyalari

    Feature-Sliced Design v2.0.0 (Current)

    Bu yerda siz joriy nashr etilgan versiya uchun hujjatlarni topishingiz mumkin

    v2.0.0 🍰Release NotesDocumentationMigration from v1

    Feature Slices v1 (Legacy)

    Bu yerda feature-slices ning eski versiyalari uchun hujjatlarni topishingiz mumkin

    v1.0Documentation
    v0.1Documentation

    Feature Driven (Legacy)

    Bu yerda feature-driven ning eski versiyalari uchun hujjatlarni topishingiz mumkin

    v0.1Documentation
    Example (kof)Github
    +

    Feature-Sliced Design versiyalari

    Feature-Sliced Design v2.0.0 (Current)

    Bu yerda siz joriy nashr etilgan versiya uchun hujjatlarni topishingiz mumkin

    v2.0.0 🍰Release NotesDocumentationMigration from v1

    Feature Slices v1 (Legacy)

    Bu yerda feature-slices ning eski versiyalari uchun hujjatlarni topishingiz mumkin

    v1.0Documentation
    v0.1Documentation

    Feature Driven (Legacy)

    Bu yerda feature-driven ning eski versiyalari uchun hujjatlarni topishingiz mumkin

    v0.1Documentation
    Example (kof)Github
    \ No newline at end of file diff --git a/versions.html b/versions.html index 8cc0c5acdb..85c68aeda6 100644 --- a/versions.html +++ b/versions.html @@ -9,10 +9,10 @@ - - + + -

    Feature-Sliced Design versions

    Feature-Sliced Design v2.0.0 (Current)

    The documentation for the currently published version can be found here

    v2.0.0 🍰Release NotesDocumentationMigration from v1

    Feature Slices v1 (Legacy)

    Documentation for older versions of feature-slices can be found here

    v1.0Documentation
    v0.1Documentation

    Feature Driven (Legacy)

    Documentation for older versions of feature-driven can be found here

    v0.1Documentation
    Example (kof)Github
    +

    Feature-Sliced Design versions

    Feature-Sliced Design v2.0.0 (Current)

    The documentation for the currently published version can be found here

    v2.0.0 🍰Release NotesDocumentationMigration from v1

    Feature Slices v1 (Legacy)

    Documentation for older versions of feature-slices can be found here

    v1.0Documentation
    v0.1Documentation

    Feature Driven (Legacy)

    Documentation for older versions of feature-driven can be found here

    v0.1Documentation
    Example (kof)Github
    \ No newline at end of file