ildar-shaymukhametov_grandnode-refactorings/Grand.Web/Views/Shared/_Root.cshtml
@{
    Layout = "_Root.Head";
}
@await Component.InvokeAsync("Widget", new { widgetZone = "body_start_html_tag_after" })
<partial name="_Notifications" />
<vc:get-coordinate></vc:get-coordinate>
<partial name="_JavaScriptDisabledWarning" />
<partial name="_OldInternetExplorerWarning" />
<main class="c-offcanvas-content-wrap">
    <partial name="Header" />
    <div class="container page-container">
        @await Component.InvokeAsync("Widget", new { widgetZone = "content_before" })
        @if (IsSectionDefined("Breadcrumb"))
        {
            @RenderSection("Breadcrumb")
        }
        @RenderBody()
        @await Component.InvokeAsync("Widget", new { widgetZone = "content_after" })
    </div>
    @await Component.InvokeAsync("Footer")
</main>
<a class="js-offcanvas-trigger filter-button d-none" data-offcanvas-trigger="leftSide" href="#leftSide"><span class="mdi mdi-tune"></span><span class="ml-3">@T("catalog.selectors.fiters")</span></a>
<aside class="js-offcanvas mobile-filters d-lg-none d-flex flex-column" data-offcanvas-options='{"modifiers":"left,overlay","modal":true,"resize":false}' id="leftSide">
    <div class="user-panel-head d-lg-none d-flex order-1">
        <div class="text-center w-100">
            <div class="offcanvas-close js-offcanvas-close" data-button-options='{"modifiers":"close-left"}'>
                <span class="mdi mdi-close"></span>
            </div>
        </div>
    </div>
</aside>
<aside class="js-offcanvas" data-offcanvas-options='{"modifiers":"right,overlay","modal":true,"resize":false}' id="user_panel">
    <div class="user-panel-head">
        <div class="text-center w-100">
            @T("Account.MyAccount")
            <div class="offcanvas-close js-offcanvas-close" data-button-options='{"modifiers":"close-right"}'>
                <span class="mdi mdi-close"></span>
            </div>
        </div>
    </div>
    <ul class="user-panel-content">
        <li class="selectors-container mb-3">
            @await Component.InvokeAsync("TaxTypeSelector")
            @await Component.InvokeAsync("CurrencySelector")
            @await Component.InvokeAsync("LanguageSelector")
            @await Component.InvokeAsync("StoreSelector")
        </li>
        @await Component.InvokeAsync("Widget", new { widgetZone = "header_selectors" })
        @await Component.InvokeAsync("HeaderLinks")
    </ul>
</aside>
<aside class="js-offcanvas" data-offcanvas-options='{"modifiers":"left,overlay","modal":true,"resize":false}' id="mobile_menu"></aside>
@await Component.InvokeAsync("FlyoutShoppingCart")
<!-- Search Modal -->
<div class="modal fade" id="searchModal" tabindex="-1" role="dialog" aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
        </div>
    </div>
</div>
<script asp-location="Footer">
    AjaxCart.init('.cart-qty', '.wishlist-qty', '.flyout-cart');
</script>
@await Component.InvokeAsync("EuCookieLaw")
@await Component.InvokeAsync("Widget", new { widgetZone = "body_end_html_tag_before" })
