<turbo-frame id="lui-app-layout" data-turbo-action="advance" class="lui-v2-app-layout" data-controller="miniapps lui--layout"> <style> :root { --app-900-hover: #933100; --app-800-primary: #b53c00; --app-400: #e9c5b3; --app-300: #f8ece6; --app-200: #fbf5f2; --app-100: #fdfbfa; --app-opacity5: #b53c000d; /* Current app variables, for semantic colors */ --current-surface-app: var(--color-surface-apps-core); --current-text-app: var(--color-text-apps-core); } </style> <div class="w-full lui-header-slot"> <div class="w-full w-full lui-dummy_slot text-[#78818a] text-primary-xs-bold leading-none"> Navbar </div> </div> <div class="lui-v2-app-layout__content"> <turbo-frame id="lui-sidebar" target="lui-main-layout" data-controller="sidebar"> <aside class="lui-sidebar"> <div class="lui-sidebar__item-list"> <div class="w-full" data-action="mouseleave->sidebar#hide mouseenter->sidebar#show" data-id="manager_looposui-sidebar-v1-draweritem-data-target-modal" > <a data-turbo-action="advance" href="/manager1"> <div id=manager_looposui-sidebar-v1-draweritem class="lui-sidebar__item " style=""> <icon class="lui-sidebar-item__icon fa-regular fa-diagram-cells"></icon> <div class="lui-sidebar__item__short-title"> <p class="lui-sidebar__item__label">Manager</p> </div> </div> </a> <div class="hidden lui-sidebar__drawer"> <div class="lui-sidebar__drawer__header"> <div class="lui-sidebar__drawer__header-title"> <div> <icon class="lui-sidebar__drawer__icon lui-sidebar-item__icon fa-regular fa-diagram-cells"></icon> </div> <div> Manager </div> </div> <div class="lui-sidebar__drawer__header-description"> </div> </div> <div class="lui-sidebar__drawer__items"> <a class="lui-sidebar__drawer__entry lui-sidebar__drawer__entry--active " data-turbo-action="advance" href="/"> Foo </a><a class="lui-sidebar__drawer__entry " data-turbo-action="advance" href="/bar"> Bar </a> </div> </div> </div> <div id="this-is-core_looposui-sidebar-v1-singleitem" class="w-full" data-action="mouseleave->sidebar#hide mouseenter->sidebar#show"> <a data-action="mouseover->drawer#hide" data-turbo-action="advance" href="/test"> <div class="lui-sidebar__item " style=""> <icon class="lui-sidebar-item__icon fa-regular fa-diagram-cells"></icon> <div class="lui-sidebar__item__short-title"> <p class="lui-sidebar__item__label">This is Core</p> </div> </div> </a></div> <div id="this-is-submission_looposui-sidebar-v1-singleitem" class="w-full" data-action="mouseleave->sidebar#hide mouseenter->sidebar#show"> <a data-action="mouseover->drawer#hide" data-turbo-action="advance" href="/test2"> <div class="lui-sidebar__item " style=""> <icon class="lui-sidebar-item__icon fa-regular fa-diagram-cells"></icon> <div class="lui-sidebar__item__short-title"> <p class="lui-sidebar__item__label">This is Submission.</p> </div> </div> </a></div> <div id="this-is-handling_looposui-sidebar-v1-singleitem" class="w-full" data-action="mouseleave->sidebar#hide mouseenter->sidebar#show"> <a data-action="mouseover->drawer#hide" data-turbo-action="advance" href="/test3"> <div class="lui-sidebar__item " style=""> <icon class="lui-sidebar-item__icon fa-regular fa-diagram-cells"></icon> <div class="lui-sidebar__item__short-title"> <p class="lui-sidebar__item__label">This is Handling</p> </div> </div> </a></div> <div id="this-is-hubs_looposui-sidebar-v1-singleitem" class="w-full" data-action="mouseleave->sidebar#hide mouseenter->sidebar#show"> <a data-action="mouseover->drawer#hide" data-turbo-action="advance" href="/test4"> <div class="lui-sidebar__item " style=""> <icon class="lui-sidebar-item__icon fa-regular fa-diagram-cells"></icon> <div class="lui-sidebar__item__short-title"> <p class="lui-sidebar__item__label">This is Hubs</p> </div> </div> </a></div> </div> </aside> </turbo-frame> <div class="lui-v2-app-layout__content-container lui-app-layout_id"> <turbo-frame data-turbo-action="advance" data-turbo-frame="lui-main-layout" id="lui-main-layout" class="lui-v2-app-layout__content-inner" style="width: 100%; transition: width 25ms ease-in;" > <form data-turbo-frame="lui-main-layout" action="#" accept-charset="UTF-8" method="get"> <div class="lui-select-bar__selector"> <div class="lui-form_entry lui-form_entry--horizontal"> <div class="lui-form_entry__input"> <div id="looposui-inputs-select_connected_cores_5793709857" class="grow" data-controller="input-select" data-input-select-input-outlet="#looposui-inputs-select_connected_cores_5793709857 .lui-inner-input" data-input-select-mode-value="autosubmit"> <div class="lui-input-select lui-input-select--autosubmit relative lui-inputs__select"> <div data-controller="input" data-input-open-actions-value="false" class="lui-inner-input relative flex gap-2" data-input-original-input-value="Core 1" data-input-mode-value="autosubmit" data-input-form-value=""> <div class="w-full flex flex-col"> <span class="lui-input "> <input name="connected_cores" type="text" value="Core 1" placeholder="Select.." class="lui-input__input" mode="autosubmit" contentEditable="true" data-input-target="input" data-action="input->input#onChange change->input#onChange" data-input-select-target="textInput" readonly="readonly"> <span class="lui-input__addon-right"> <span class="flex flex-row items-center gap-2"> <i class=" fa-solid fa-xmark cursor-pointer text-gray-400 lui-input-select__clear" data-input-select-target="clearButton" data-action="click->input-select#clear"> </i> <div data-input-select-target="icon"> <div class="lui-icon h-[12px] w-[12px]"> <i class="fa-regular fa-chevron-down lui-icon__icon" style="font-size: 12px; color: #212529;"></i> </div> </div> </span> </span> <span class="lui-input__spinner"> <i class="fa-regular fa-spinner"></i> </span> </span> </div> <span class="lui-inner-input__actions opacity-0 flex items-center gap-1 h-fit" data-input-target="actions"> <button class="lui-button lui-button--icon-only lui-button--neutral--secondary lui-button--size-tiny w-fit w-fit relative" data-controller="lui--button" data-input-target="cancel" data-action="click->input#handleClose" type="button" disabled="disabled"> <div class="opacity-100 inline-flex" data-lui--button-target="leadingIcon"> <div class="flex items-center justify-center" style="width: 12px; height: 12px;"><i class="lui-button__icon lui-button__icon--tiny fa-regular fa-xmark" data-lui--button-target="leadingIcon"></i></div> </div> <div class="absolute w-full flex items-center justify-center opacity-0" data-lui--button-target="loadingIcon"> <i class="lui-m_icon animate-spin material-symbols-outlined" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button> <button class="lui-button lui-button--icon-only lui-button--neutral--secondary lui-button--size-tiny w-fit w-fit relative" data-controller="lui--button" data-input-target="submit" data-action="click->input#setLoading" type="submit" disabled="disabled"> <div class="opacity-100 inline-flex" data-lui--button-target="leadingIcon"> <div class="flex items-center justify-center" style="width: 12px; height: 12px;"><i class="lui-button__icon lui-button__icon--tiny fa-regular fa-check" data-lui--button-target="leadingIcon"></i></div> </div> <div class="absolute w-full flex items-center justify-center opacity-0" data-lui--button-target="loadingIcon"> <i class="lui-m_icon animate-spin material-symbols-outlined" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button> </span> </div> <div data-input-select-target="menu" class="lui-input-select__wrapper"> <div class="lui-input-select__options" role="listbox"> <div class="lui-input-select__option " role="option" data-input-select-target="option" data-text="Core 1" data-value="core1"> <div class="lui-input-select__option-wrapper"> <div class="lui-input-select__option-text"> <span role="text">Core 1</span> </div> <i class="fa-regular fa-check " data-input-select-target="check"></i> </div> </div> <div class="lui-input-select__option " role="option" data-input-select-target="option" data-text="Core 2" data-value="core2"> <div class="lui-input-select__option-wrapper"> <div class="lui-input-select__option-text"> <span role="text">Core 2</span> </div> <i class="fa-regular fa-check hidden!" data-input-select-target="check"></i> </div> </div> <div class="lui-input-select__option " role="option" data-input-select-target="option" data-text="Core 3" data-value="core3"> <div class="lui-input-select__option-wrapper"> <div class="lui-input-select__option-text"> <span role="text">Core 3</span> </div> <i class="fa-regular fa-check hidden!" data-input-select-target="check"></i> </div> </div> </div> </div> </div> <input type="hidden" name="connected_cores" id="connected_cores" value="core1" data-input-select-target="hiddenInput" /> </div> </div> <div class="lui-form_entry__label-wrapper pt-2" style=""> <span class="lui-form_entry__label"><span class="text-app-800-primary"><icon class="fa-regular fa-map-pin mr-1"></icon>Core:</span></span> <span class="lui-form_entry__required"></span> <div class="lui-form_entry__icon"> </div> </div> </div> </div> </form> <div id="lui-action-bar"> <div class="w-full w-full lui-dummy_slot text-[#78818a] text-primary-xs-bold leading-none"> Action Bar </div> </div> <div class="lui-action_bar lui-action_bar--loading"> <div class="lui-action_bar__left w-1/4"> <div class="lui-skeleton__bar"></div> </div> <div class="lui-action_bar__right w-1/4"> <div class="lui-skeleton__bar"></div> </div> </div> <div class="flex-1 flex min-h-0 overflow-hidden"> <div class="lui-layout-loading"> <div class="lui-layout-loading__content"> <div class="lui-skeleton "> <div class="lui-skeleton__item"> <div class="lui-skeleton__bar" style="width: 100%"></div> </div> <div class="lui-skeleton__item"> <div class="lui-skeleton__bar" style="width: 100%"></div> </div> <div class="lui-skeleton__item"> <div class="lui-skeleton__bar" style="width: 100%"></div> </div> <div class="lui-skeleton__item"> <div class="lui-skeleton__bar" style="width: 100%"></div> </div> <div class="lui-skeleton__footer"> <div class="lui-skeleton__bar--footer"></div> <div class="lui-skeleton__bar--footer lui-skeleton__bar--footer--invisible"></div> </div> </div> <div class="lui-skeleton lui-skeleton--full"> <div class="lui-skeleton__item"> <div class="lui-skeleton__bar" style="width: 100%"></div> </div> <div class="lui-skeleton__item"> <div class="lui-skeleton__bar" style="width: 100%"></div> </div> <div class="lui-skeleton__item"> <div class="lui-skeleton__bar" style="width: 100%"></div> </div> <div class="lui-skeleton__item"> <div class="lui-skeleton__bar" style="width: 100%"></div> </div> <div class="lui-skeleton__footer"> <div class="lui-skeleton__bar--footer"></div> <div class="lui-skeleton__bar--footer lui-skeleton__bar--footer--invisible"></div> </div> </div> <div class="lui-skeleton lui-skeleton--full"> <div class="lui-skeleton__item"> <div class="lui-skeleton__bar" style="width: 100%"></div> </div> <div class="lui-skeleton__item"> <div class="lui-skeleton__bar" style="width: 100%"></div> </div> <div class="lui-skeleton__item"> <div class="lui-skeleton__bar" style="width: 100%"></div> </div> <div class="lui-skeleton__item"> <div class="lui-skeleton__bar" style="width: 100%"></div> </div> <div class="lui-skeleton__footer"> <div class="lui-skeleton__bar--footer"></div> <div class="lui-skeleton__bar--footer lui-skeleton__bar--footer--invisible"></div> </div> </div> </div> </div> <div class="lui-main-layout__container" data-skeleton-loading="true"> <div class="lui-main-layout__content" id="lui-main-layout-content"> <div class="w-full h-[10000px] lui-dummy_slot text-[#78818a] text-primary-xs-bold leading-none"> Content </div> </div> <div class="lui-main-layout__action-panel" data-lui--layout-target="actionPanel"> <div class="lui-action-panel-resizer" data-action="pointerdown->lui--layout#handleDragStart"></div> <div class="h-full w-full lui-dummy_slot text-[#78818a] text-primary-xs-bold leading-none"> Action Panel </div> </div> </div> </div> <div class="lui-v2-app-layout__bottom-bar"> <div> <div class="draggable w-fit h-fit absolute" data-controller="miniapp-drag"> <div id="miniapp-1" class="lui-mini_app" data-controller="miniapp miniapp-drag" data-miniapps-target="miniapp" data-restriction=".lui-v2-app-layout__content-inner" popover="auto"> <div class="lui-mini_app__drag-container"> <div class="lui-mini_app__drag-handle"> <div class="lui-icon h-[20px] w-[20px]"> <i class="fa-solid fa-grip-dots lui-icon__icon" style="font-size: 20px; color: #6D6D6D;"></i> </div> </div> </div> <div class="lui-header lui-header--medium"> <div class="lui-header__title_container"> <span class="lui-header__title_container__title"> Notes </span> </div> <span class="lui-header__description"> </span> </div> <div class="lui-mini_app__content"> <div class="w-96 h-fit rounded-md border border-[#E7E7E7] bg-[#FCFCFC]"> <div data-controller="textarea" class="lui-text_area"> <div data-controller="input" data-input-open-actions-value="false" class="lui-inner-input relative flex gap-2" data-input-original-input-value="Some text" data-input-mode-value="autosubmit" data-input-form-value=""> <div class="w-full flex flex-col"> <span class="lui-input "> <input name="notes" type="textarea" value="Some text" placeholder="Enter your notes here" class="lui-input__input" mode="autosubmit" contentEditable="true" data-input-target="input" data-action="input->input#onChange change->input#onChange" data-textarea-target="input" rows="10" wrap="soft" style="resize: none"> <span class="lui-input__spinner"> <i class="fa-regular fa-spinner"></i> </span> </span> </div> <span class="lui-inner-input__actions opacity-0 flex items-center gap-1 h-fit" data-input-target="actions"> <button class="lui-button lui-button--icon-only lui-button--neutral--secondary lui-button--size-tiny w-fit w-fit relative" data-controller="lui--button" data-input-target="cancel" data-action="click->input#handleClose" type="button" disabled="disabled"> <div class="opacity-100 inline-flex" data-lui--button-target="leadingIcon"> <div class="flex items-center justify-center" style="width: 12px; height: 12px;"><i class="lui-button__icon lui-button__icon--tiny fa-regular fa-xmark" data-lui--button-target="leadingIcon"></i></div> </div> <div class="absolute w-full flex items-center justify-center opacity-0" data-lui--button-target="loadingIcon"> <i class="lui-m_icon animate-spin material-symbols-outlined" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button> <button class="lui-button lui-button--icon-only lui-button--neutral--secondary lui-button--size-tiny w-fit w-fit relative" data-controller="lui--button" data-input-target="submit" data-action="click->input#setLoading" type="submit" disabled="disabled"> <div class="opacity-100 inline-flex" data-lui--button-target="leadingIcon"> <div class="flex items-center justify-center" style="width: 12px; height: 12px;"><i class="lui-button__icon lui-button__icon--tiny fa-regular fa-check" data-lui--button-target="leadingIcon"></i></div> </div> <div class="absolute w-full flex items-center justify-center opacity-0" data-lui--button-target="loadingIcon"> <i class="lui-m_icon animate-spin material-symbols-outlined" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button> </span> </div> </div> </div> </div> </div> </div> <div class="draggable w-fit h-fit absolute" data-controller="miniapp-drag"> <div id="miniapp-2" class="lui-mini_app" data-controller="miniapp miniapp-drag" data-miniapps-target="miniapp" data-restriction=".lui-v2-app-layout__content-inner" popover="auto"> <div class="lui-mini_app__drag-container"> <div class="lui-mini_app__drag-handle"> <div class="lui-icon h-[20px] w-[20px]"> <i class="fa-solid fa-grip-dots lui-icon__icon" style="font-size: 20px; color: #6D6D6D;"></i> </div> </div> </div> <div class="lui-header lui-header--medium"> <div class="lui-header__title_container"> <span class="lui-header__title_container__title"> Title </span> <span class="flex w-fit"> <div class="lui-tooltip hidden" data-controller="tooltips" data-tooltips-tippy-target-id-value="" data-tooltips-position-value="top" data-tooltips-interactive-value="false" > <div class="lui-tooltip__title"> This is a tooltip </div> </div> <i class="lui-m_icon material-symbols-outlined" style="--lui-micon-size: 16px;"> info </i> </span> </div> <div class="lui-header__token_zone"> <span id="lui-token_9912568611" class="lui-token lui-entity-token lui-entity-token-general " style="color: #212529;"> <i class="lui-token__icon fa-regular fa-regular fa-user"></i> <span class="lui-token__text">EntityToken</span> <div class="lui-token__actions"> </div> </span> <span id="lui-token_2322156580" class="lui-token lui-entity-token lui-entity-token-general " style="color: #212529;"> <i class="lui-token__icon fa-regular fa-regular fa-user"></i> <span class="lui-token__text">EntityToken</span> <div class="lui-token__actions"> </div> </span> </div> <span class="lui-header__description"> Description <i class="lui-m_icon material-symbols-outlined" style="--lui-micon-size: 16px;"> calendar_clock </i> </span> </div> <div class="lui-mini_app__content"> <div class="w-96 h-64 lui-dummy_slot text-[#78818a] text-primary-xs-bold leading-none"> Content Slot </div> </div> </div> </div> <div class="draggable w-fit h-fit absolute" data-controller="miniapp-drag"> <div id="miniapp-3" class="lui-mini_app" data-controller="miniapp miniapp-drag" data-miniapps-target="miniapp" data-restriction=".lui-v2-app-layout__content-inner" popover="auto"> <div class="lui-mini_app__drag-container"> <div class="lui-mini_app__drag-handle"> <div class="lui-icon h-[20px] w-[20px]"> <i class="fa-solid fa-grip-dots lui-icon__icon" style="font-size: 20px; color: #6D6D6D;"></i> </div> </div> </div> <div class="lui-header lui-header--medium"> <div class="lui-header__title_container"> <span class="lui-header__title_container__title"> Title </span> <span class="flex w-fit"> <div class="lui-tooltip hidden" data-controller="tooltips" data-tooltips-tippy-target-id-value="" data-tooltips-position-value="top" data-tooltips-interactive-value="false" > <div class="lui-tooltip__title"> This is a tooltip </div> </div> <i class="lui-m_icon material-symbols-outlined" style="--lui-micon-size: 16px;"> info </i> </span> </div> <div class="lui-header__token_zone"> <span id="lui-token_6597424226" class="lui-token lui-entity-token lui-entity-token-general " style="color: #212529;"> <i class="lui-token__icon fa-regular fa-regular fa-user"></i> <span class="lui-token__text">EntityToken</span> <div class="lui-token__actions"> </div> </span> <span id="lui-token_8670528836" class="lui-token lui-entity-token lui-entity-token-general " style="color: #212529;"> <i class="lui-token__icon fa-regular fa-regular fa-user"></i> <span class="lui-token__text">EntityToken</span> <div class="lui-token__actions"> </div> </span> </div> <span class="lui-header__description"> Description <i class="lui-m_icon material-symbols-outlined" style="--lui-micon-size: 16px;"> calendar_clock </i> </span> </div> <div class="lui-mini_app__content"> <div class="w-96 h-64 lui-dummy_slot text-[#78818a] text-primary-xs-bold leading-none"> Content Slot </div> </div> </div> </div> </div> <div class="lui-bottom_bar"> <div class="lui-action_buttons"> <div class="lui-action_buttons__button-group"> <button class="lui-button lui-button--neutral--primary lui-button--size-tiny w-fit w-fit relative" data-controller="lui--button" data-action="click->miniapps#toggle" data-miniapps-miniapp-id-param="miniapp-1"> <div class="opacity-100 inline-flex" data-lui--button-target="leadingIcon"> <div class="flex items-center justify-center" style="width: 12px; height: 12px;"><i class="lui-button__icon lui-button__icon--tiny fa-regular fa-arrow-up-right-from-square" data-lui--button-target="leadingIcon"></i></div> </div> <span class="lui-button__text opacity-100 inline-flex" data-lui--button-target="text"> Notes </span> <div class="opacity-100 inline-flex" data-lui--button-target="trailingIcon"> <div class="flex items-center justify-center" style="width: 12px; height: 12px;"><i class="lui-button__icon lui-button__icon--tiny fa-regular fa-arrow-up-right-from-square"></i></div> </div> <div class="absolute w-full flex items-center justify-center opacity-0" data-lui--button-target="loadingIcon"> <i class="lui-m_icon animate-spin material-symbols-outlined" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button> <button class="lui-button lui-button--neutral--secondary lui-button--size-tiny w-fit w-fit relative" data-controller="lui--button" data-action="click->miniapps#toggle" data-miniapps-miniapp-id-param="miniapp-2"> <div class="opacity-100 inline-flex" data-lui--button-target="leadingIcon"> <div class="flex items-center justify-center" style="width: 12px; height: 12px;"><i class="lui-button__icon lui-button__icon--tiny fa-regular fa-arrow-up-right-from-square" data-lui--button-target="leadingIcon"></i></div> </div> <span class="lui-button__text opacity-100 inline-flex" data-lui--button-target="text"> Internal Chat </span> <div class="opacity-100 inline-flex" data-lui--button-target="trailingIcon"> <div class="flex items-center justify-center" style="width: 12px; height: 12px;"><i class="lui-button__icon lui-button__icon--tiny fa-regular fa-arrow-up-right-from-square"></i></div> </div> <div class="absolute w-full flex items-center justify-center opacity-0" data-lui--button-target="loadingIcon"> <i class="lui-m_icon animate-spin material-symbols-outlined" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button> <button class="lui-button lui-button--neutral--secondary lui-button--size-tiny w-fit w-fit relative" data-controller="lui--button" data-action="click->miniapps#toggle" data-miniapps-miniapp-id-param="miniapp-3"> <div class="opacity-100 inline-flex" data-lui--button-target="leadingIcon"> <div class="flex items-center justify-center" style="width: 12px; height: 12px;"><i class="lui-button__icon lui-button__icon--tiny fa-regular fa-arrow-up-right-from-square" data-lui--button-target="leadingIcon"></i></div> </div> <span class="lui-button__text opacity-100 inline-flex" data-lui--button-target="text"> Public Chat </span> <div class="opacity-100 inline-flex" data-lui--button-target="trailingIcon"> <div class="flex items-center justify-center" style="width: 12px; height: 12px;"><i class="lui-button__icon lui-button__icon--tiny fa-regular fa-arrow-up-right-from-square"></i></div> </div> <div class="absolute w-full flex items-center justify-center opacity-0" data-lui--button-target="loadingIcon"> <i class="lui-m_icon animate-spin material-symbols-outlined" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button> </div> </div> </div> </div> </turbo-frame> </div> </div> <turbo-cable-stream-source channel="Turbo::StreamsChannel" signed-stream-name="Imx1aS1hcHAtbGF5b3V0Ig==--68c278ca6b5bb21c56de61bcb0396c382404ae20f6ce64a43d737572f6ed266f"></turbo-cable-stream-source> <turbo-cable-stream-source channel="Turbo::StreamsChannel" signed-stream-name="InRvYXN0ZXJzIg==--7c1405336eb46a24b1b64d0d30019fb9fce53bc08bd9a1c5f30369d28862a109"></turbo-cable-stream-source> <div id="lui-toasters" popover="manual" data-controller="toasters" data-toasters-new-toaster-url-value="/loopos_ui/toasters"></div></turbo-frame>No Usage documentation to display.
<%= render LooposUi::V2::AppLayout.new do |app_layout| %> <% app_layout.with_navbar do %> <%= render LooposUi::DummySlot.new(text: "Navbar") %> <% end %> <% app_layout.with_sidebar do %> <%= render LooposUi::DummySlot.new(text: "Sidebar") %> <% end %> <% app_layout.with_action_bar do %> <%= render LooposUi::DummySlot.new(text: "Action Bar") %> <% end %> <% app_layout.with_select_bar do %> <%= form_tag("#", method: :get, data: { turbo_frame: LooposUi::MainLayout::TURBO_FRAME_ID }) do %> <%= render LooposUi::V2::SelectBar::Selector.new( name: "connected_cores", options: [ { value: "core1", text: "Core 1" }, { value: "core2", text: "Core 2" }, { value: "core3", text: "Core 3" } ], value: "core1" ) %> <% end %> <% end %> <% app_layout.with_bottom_bar do %> <%= render LooposUi::BottomBar.new do |bottom_bar| %> <%= bottom_bar.with_action_buttons do |action_buttons| %> <%= action_buttons.with_button_group do |button_group| %> <%= button_group.with_button_mini_app(miniapp_id: "miniapp-1", size: :tiny, text: "Notes", type: :primary, kind: :neutral, leading_icon: "fa-regular fa-arrow-up-right-from-square", trailing_icon: "fa-regular fa-arrow-up-right-from-square") %> <%= button_group.with_button_mini_app(miniapp_id: "miniapp-2", size: :tiny, text: "Internal Chat", type: :secondary, kind: :neutral, leading_icon: "fa-regular fa-arrow-up-right-from-square", trailing_icon: "fa-regular fa-arrow-up-right-from-square") %> <%= button_group.with_button_mini_app(miniapp_id: "miniapp-3", size: :tiny, text: "Public Chat", type: :secondary, kind: :neutral, leading_icon: "fa-regular fa-arrow-up-right-from-square", trailing_icon: "fa-regular fa-arrow-up-right-from-square") %> <% end %> <% end %> <%= bottom_bar.with_mini_app(miniapp_id: "miniapp-1", restriction: ".lui-v2-app-layout__content-inner") do |mini_app| %> <% mini_app.with_header(title: "Notes", size: :medium) do |header| %> <% end %> <div class="w-96 h-fit rounded-md border border-[#E7E7E7] bg-[#FCFCFC]"> <%= render LooposUi::Inputs::TextArea.new(name: "notes", placeholder: "Enter your notes here", value: "Some text", mode: :autosubmit, resize: :none, rows: 10) %> </div> <% end %> <%= bottom_bar.with_mini_app(miniapp_id: "miniapp-2", restriction: ".lui-v2-app-layout__content-inner") do |mini_app| %> <% mini_app.with_header(title: "Title", description: "Description", tooltip: "This is a tooltip", description_icon: :calendar_clock, size: :medium) do |header| %> <% header.with_token_zone do %> <%= render LooposUi::EntityToken.new(text: "EntityToken", icon: "fa-regular fa-user") %> <%= render LooposUi::EntityToken.new(text: "EntityToken", icon: "fa-regular fa-user") %> <% end %> <% end %> <%= render LooposUi::DummySlot.new(text: "Content Slot", classes: "w-96 h-64") %> <% end %> <%= bottom_bar.with_mini_app(miniapp_id: "miniapp-3", restriction: ".lui-v2-app-layout__content-inner") do |mini_app| %> <% mini_app.with_header(title: "Title", description: "Description", tooltip: "This is a tooltip", description_icon: :calendar_clock, size: :medium) do |header| %> <% header.with_token_zone do %> <%= render LooposUi::EntityToken.new(text: "EntityToken", icon: "fa-regular fa-user") %> <%= render LooposUi::EntityToken.new(text: "EntityToken", icon: "fa-regular fa-user") %> <% end %> <% end %> <%= render LooposUi::DummySlot.new(text: "Content Slot", classes: "w-96 h-64") %> <% end %> <% end %> <% end %> <% app_layout.with_action_panel do %> <%= render LooposUi::DummySlot.new(text: "Action Panel", classes: "h-full w-full") %> <% end %> <%= render LooposUi::DummySlot.new(text: "Content\n", classes: "h-[10000px]") %><% end %>No notes provided.
No params configured.
AppLayout V2
The LooposUi::V2::AppLayout is the top-level component that wraps the entire application layout. By default, will
render the sidebar using the config from the initializer.
Slots
navbar- Open slot for the navigation bar. Each app must render the navbar provided by the Manager in this slot.sidebar- Typed slot (LooposUi::Sidebar). If omitted, the app will render the sidebar using the config (preferred way).select_bar- Typed slot (LooposUi::V2::SelectBar). Any content may be passed in.action_bar- Open slot for action bar content. Displays above the main content area.action_panel- Open slot for action panel content. Displays on the right side of the main content area.bottom_bar- Typed slot (LooposUi::BottomBar). Displays action buttons at the bottom of the layout.
The most common usage will be something like this:
<%= render LooposUi::V2::AppLayout.new do |app_layout| %> <% app_layout.with_navbar do %> <%= render LooposUi::DummySlot.new(text: "Navbar") %> <% end %> <% app_layout.with_sidebar do %> <%= render LooposUi::DummySlot.new(text: "Sidebar") %> <% end %> <% app_layout.with_action_bar do %> <%= render LooposUi::DummySlot.new(text: "Action Bar") %> <% end %> <% app_layout.with_select_bar do %> <%= form_tag("#", method: :get, data: { turbo_frame: LooposUi::MainLayout::TURBO_FRAME_ID }) do %> <%= render LooposUi::V2::SelectBar::Selector.new(name: name, options: options, value: value) %> <% end %> <% end if show_select_bar %> <% app_layout.with_action_panel do %> <%= render LooposUi::DummySlot.new(text: "Action Panel") %> <% end %> <% app_layout.with_bottom_bar do |bottom_bar| %> <%# Bottom bar content %> <% end %> <%# Main content %><% end %>Note: The select bar will only render if it's contents have a Selector (see above) and the selector has at least two options to choose from.
In this scenario, we use the LooposUi::V2::SelectBar::Selector component wrapped in a form tag.
The form is mandatory, and the Selector component will always submit the form when the value changes.
The options argument is a list of hashes with value and text Eg. [{ value: "core1", text: "Core 1" }]
The value is the value of the current option, and must be one of the options.
The name is the name of the input field, and will be used to submit the form.
Updating turbo-frames
The layout has a turbo-frame for the main content area. The content can be updated from the app's side by referencing the turbo-frame id. The turbo-frame id is lui-main-layout (available as LooposUi::MainLayout::TURBO_FRAME_ID).
Example:
<%= link_to("Click here to update content", some_path, data: { turbo_frame: LooposUi::MainLayout::TURBO_FRAME_ID }) %>