<%= render "layouts/shared/htmldoc" do %> <% sidebar_config = app_sidebar_config(Current.user) %>
<%= tag.div class: class_names("py-4 shrink-0 h-full overflow-y-auto transition-all duration-300 hidden lg:block"), style: "width: #{sidebar_config.dig(:left_panel, :initial_width)}px", data: { sidebar_target: "leftPanel" } do %> <% if content_for?(:sidebar) %> <%= yield :sidebar %> <% else %>
<%= render "accounts/account_sidebar_tabs", family: Current.family %>
<% end %> <% end %> <%= tag.main class: class_names("px-3 lg:px-10 py-4 grow h-full", require_upgrade? ? "relative overflow-hidden" : "overflow-y-auto") do %> <% if require_upgrade? %>
<%= render "shared/subscribe_modal" %>
<% end %> <%= tag.div class: class_names("mx-auto max-w-5xl w-full h-full"), data: { sidebar_target: "content" } do %> <% if content_for?(:breadcrumbs) %> <%= yield :breadcrumbs %> <% else %> <%= render "layouts/shared/breadcrumbs", breadcrumbs: @breadcrumbs %> <% end %> <% if content_for?(:page_header) %> <%= yield :page_header %> <% end %> <%= yield %> <% end %> <% end %> <%# AI chat sidebar %> <%= tag.div id: "chat-container", style: "width: #{sidebar_config.dig(:right_panel, :initial_width)}px; overflow: #{sidebar_config.dig(:right_panel, :overflow)}", class: class_names("flex flex-col justify-between shrink-0 transition-all duration-300 hidden lg:block"), data: { controller: "chat hotkey", sidebar_target: "rightPanel", turbo_permanent: true } do %> <% if Current.user.ai_enabled? %> <%= turbo_frame_tag chat_frame, src: chat_view_path(@chat), loading: "lazy", class: "h-full" do %>
<%= lucide_icon("loader-circle", class: "w-5 h-5 text-secondary animate-spin") %>
<% end %> <% else %> <%= render "chats/ai_consent" %> <% end %> <% end %>
<% end %>