<div class="p-4 max-w-xl space-y-4"> <turbo-cable-stream-source channel="Turbo::StreamsChannel" signed-stream-name="ImR1bW15X2FwcF90b2FzdGVyc18xIg==--c0b40b52ab277c143872a3107c369c95cdb41edb810e079e737335c0c34ca266"></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 id="protocol_form_preview"> <form id="protocol_form_preview_form" data-turbo-frame="protocol_form_preview" novalidate="novalidate" enctype="multipart/form-data" action="/protocol_form_answers" accept-charset="UTF-8" method="post"><input type="hidden" name="_method" value="patch" /><input type="hidden" name="authenticity_token" value="8kjEg5swZeQSa8Od_7hO39Q54dSQvLJ414d6M4Ywz_7Iq5FQj9DYYzg1AdSu4-9M-KJ9-cYLCuQBECahrO71Vw" /> <div class="protocol_form__container"> <div class="protocol_form__item" id="1" data-protocol-element-id="1" > <div class="protocol_form__info-text"> <div class="protocol_form__label-text"> <div><strong>Assessment</strong></div> </div> <span class="protocol_form__label-text-body"> <p>Please complete the fields below.</p> </span> </div> </div> <div class="protocol_form__item" id="2" data-protocol-element-id="2" > <div class="lui-form_entry lui-form_entry--vertical"> <div class="lui-form_entry__row"> <div class="lui-form_entry__input"> <input type="hidden" name="protocol_answers[0][protocol_element_id]" id="protocol_answers_0_protocol_element_id" value="2" form="protocol_form_preview_form" /> <div class="lui-text lui-text--form relative"> <div data-controller="input" data-input-open-actions-value="true" class="lui-inner-input relative flex gap-2" data-input-original-input-value="" data-input-mode-value="form" data-input-form-value="protocol_form_preview_form"> <div class="w-full flex flex-col"> <div class="lui-input-chrome relative w-full"> <span class="lui-input "> <input name="protocol_answers[0][value]" type="text" value="" class="lui-input__input" mode="form" form="protocol_form_preview_form" contentEditable="true" data-input-target="input" data-action="input->input#onChange change->input#onChange" maxlength="80" minlength="2" autocomplete="name"> <span class="lui-input__spinner"> <i class="fa-regular fa-spinner"></i> </span> </span> </div> </div> <span class="lui-inner-input__actions opacity-0 flex items-center gap-1 h-fit" data-input-target="actions"> <span class="lui-button__tooltip-wrapper inline-flex w-fit"> <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-rounded" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button></span> <span class="lui-button__tooltip-wrapper inline-flex w-fit"> <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 lui--button#startLoading" form="protocol_form_preview_form" 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-rounded" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button></span> </span> </div> </div> </div> <div class="lui-form_entry__label-wrapper pl-2" style=""> <span class="lui-form_entry__label">Full name</span> <span class="lui-form_entry__required">*</span> <div class="lui-form_entry__icon"> <span class="lui-icon_tooltip"> <div class="lui-tooltip hidden" data-controller="tooltips" data-tooltips-tippy-target-id-value="" data-tooltips-position-value="top" data-tooltips-interactive-value="true" > <div class="lui-tooltip__title"> As on ID </div> <div class="lui-tooltip__link"> <a href="https://example.com">Learn more</a> </div> </div> <div class="lui-icon h-[14px] w-[14px]"> <i class="fa-regular fa-circle-question lui-icon__icon" style="font-size: 14px; color: --text-content;"></i> </div> </span> </div> </div> </div> </div> </div> <div class="protocol_form__item" id="9" data-protocol-element-id="9" > <div class="protocol_form__info-title"> <p class="protocol_form__label-text protocol_form__label-text--title"> <div><strong>Product details</strong></div> </p> </div> </div> <div class="protocol_form__item" id="3" data-protocol-element-id="3" > <div class="lui-form_entry lui-form_entry--vertical"> <div class="lui-form_entry__row"> <div class="lui-form_entry__input"> <input type="hidden" name="protocol_answers[1][protocol_element_id]" id="protocol_answers_1_protocol_element_id" value="3" form="protocol_form_preview_form" /> <div data-controller="number-input" data-number-input-step-value="1" data-number-input-mode-value="form"> <div class="lui-number lui-number--form relative"> <div data-controller="input" data-input-open-actions-value="true" class="lui-inner-input relative flex gap-2" data-input-original-input-value="" data-input-mode-value="form" data-input-form-value="protocol_form_preview_form"> <div class="w-full flex flex-col"> <div class="lui-input-chrome relative w-full"> <span class="lui-input "> <input name="protocol_answers[1][value]" type="number" value="" class="lui-input__input" mode="form" form="protocol_form_preview_form" contentEditable="true" data-input-target="input" data-action="input->input#onChange change->input#onChange" data-number-input-target="input" min="0" max="99" step="1" inputmode="decimal"> <span class="lui-input__addon-right"> <div class="flex gap-2"> <i class="fa-regular fa-minus cursor-pointer" data-action="click->number-input#decrease"></i> <i class="fa-regular fa-plus cursor-pointer" data-action="click->number-input#increase"></i> </div> </span> <span class="lui-input__spinner"> <i class="fa-regular fa-spinner"></i> </span> </span> </div> </div> <span class="lui-inner-input__actions opacity-0 flex items-center gap-1 h-fit" data-input-target="actions"> <span class="lui-button__tooltip-wrapper inline-flex w-fit"> <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-rounded" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button></span> <span class="lui-button__tooltip-wrapper inline-flex w-fit"> <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 lui--button#startLoading" form="protocol_form_preview_form" 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-rounded" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button></span> </span> </div> </div> </div> </div> <div class="lui-form_entry__label-wrapper pl-2" style=""> <span class="lui-form_entry__label">Quantity</span> <span class="lui-form_entry__required"></span> <div class="lui-form_entry__icon"> <span class="lui-icon_tooltip"> <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"> Units </div> </div> <div class="lui-icon h-[14px] w-[14px]"> <i class="fa-regular fa-circle-question lui-icon__icon" style="font-size: 14px; color: --text-content;"></i> </div> </span> </div> </div> </div> </div> </div> <div class="protocol_form__item" id="10" data-protocol-element-id="10" > <div class="lui-form_entry lui-form_entry--vertical"> <div class="lui-form_entry__row"> <div class="lui-form_entry__input"> <input type="hidden" name="protocol_answers[2][protocol_element_id]" id="protocol_answers_2_protocol_element_id" value="10" form="protocol_form_preview_form" /> <div class="lui-money lui-money--form relative" data-controller="money-input"> <div data-controller="input" data-input-open-actions-value="true" class="lui-inner-input relative flex gap-2" data-input-original-input-value="10.50" data-input-mode-value="form" data-input-form-value="protocol_form_preview_form"> <div class="w-full flex flex-col"> <div class="lui-input-chrome relative w-full"> <span class="lui-input "> <span class="lui-input__addon-left"> <span class="lui-money__currency text-gray-700"> € </span> </span> <input name="protocol_answers[2][value]" type="number" value="10.50" class="lui-input__input" mode="form" form="protocol_form_preview_form" contentEditable="true" data-input-target="input" data-action="input->input#onChange change->input#onChange" data-money-input-target="input" min="0" max="5000" step="0.01" inputmode="decimal" pattern="[0-9]*[.,]?[0-9]*"> <span class="lui-input__spinner"> <i class="fa-regular fa-spinner"></i> </span> </span> </div> </div> <span class="lui-inner-input__actions opacity-0 flex items-center gap-1 h-fit" data-input-target="actions"> <span class="lui-button__tooltip-wrapper inline-flex w-fit"> <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-rounded" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button></span> <span class="lui-button__tooltip-wrapper inline-flex w-fit"> <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 lui--button#startLoading" form="protocol_form_preview_form" 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-rounded" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button></span> </span> </div> </div> </div> <div class="lui-form_entry__label-wrapper pl-2" style=""> <span class="lui-form_entry__label">Price</span> <span class="lui-form_entry__required"></span> </div> </div> </div> </div> <div class="protocol_form__item" id="11" data-protocol-element-id="11" > <div class="lui-form_entry lui-form_entry--vertical"> <div class="lui-form_entry__row"> <div class="lui-form_entry__input"> <input type="hidden" name="protocol_answers[3][protocol_element_id]" id="protocol_answers_3_protocol_element_id" value="11" form="protocol_form_preview_form" /> <div class="lui-text lui-text--form relative"> <div data-controller="input" data-input-open-actions-value="true" class="lui-inner-input relative flex gap-2" data-input-original-input-value="" data-input-mode-value="form" data-input-form-value="protocol_form_preview_form"> <div class="w-full flex flex-col"> <div class="lui-input-chrome relative w-full"> <span class="lui-input "> <input name="protocol_answers[3][value]" type="text" value="" class="lui-input__input" mode="form" form="protocol_form_preview_form" contentEditable="true" data-input-target="input" data-action="input->input#onChange change->input#onChange" maxlength="20" minlength="5"> <span class="lui-input__spinner"> <i class="fa-regular fa-spinner"></i> </span> </span> </div> </div> <span class="lui-inner-input__actions opacity-0 flex items-center gap-1 h-fit" data-input-target="actions"> <span class="lui-button__tooltip-wrapper inline-flex w-fit"> <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-rounded" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button></span> <span class="lui-button__tooltip-wrapper inline-flex w-fit"> <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 lui--button#startLoading" form="protocol_form_preview_form" 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-rounded" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button></span> </span> </div> </div> </div> <div class="lui-form_entry__label-wrapper pl-2" style=""> <span class="lui-form_entry__label">Serial number</span> <span class="lui-form_entry__required"></span> </div> </div> </div> </div> <div class="protocol_form__item" id="12" data-protocol-element-id="12" > <div class="lui-form_entry lui-form_entry--vertical"> <div class="lui-form_entry__row"> <div class="lui-form_entry__input"> <input type="hidden" name="protocol_answers[4][protocol_element_id]" id="protocol_answers_4_protocol_element_id" value="12" form="protocol_form_preview_form" /> <div data-controller="textarea" class="lui-text_area lui-text_area--form"> <div data-controller="input" data-input-open-actions-value="true" class="lui-inner-input relative flex gap-2" data-input-original-input-value="" data-input-mode-value="form" data-input-form-value="protocol_form_preview_form"> <div class="w-full flex flex-col"> <div class="lui-input-chrome relative w-full"> <span class="lui-input "> <input name="protocol_answers[4][value]" type="textarea" value="" class="lui-input__input" mode="form" form="protocol_form_preview_form" contentEditable="true" data-input-target="input" data-action="input->input#onChange change->input#onChange" data-textarea-target="input" rows="3" maxlength="500" wrap="soft" style="resize: vertical"> <span class="lui-input__spinner"> <i class="fa-regular fa-spinner"></i> </span> </span> </div> </div> <span class="lui-inner-input__actions opacity-0 flex items-center gap-1 h-fit" data-input-target="actions"> <span class="lui-button__tooltip-wrapper inline-flex w-fit"> <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-rounded" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button></span> <span class="lui-button__tooltip-wrapper inline-flex w-fit"> <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 lui--button#startLoading" form="protocol_form_preview_form" 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-rounded" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button></span> </span> </div> </div> </div> <div class="lui-form_entry__label-wrapper pl-2" style=""> <span class="lui-form_entry__label">Notes</span> <span class="lui-form_entry__required"></span> </div> </div> </div> </div> <div class="protocol_form__item" id="4" data-protocol-element-id="4" > <div class="protocol_form__bool-entry"> <div class="lui-form_entry lui-form_entry--horizontal_reverse"> <div class="lui-form_entry__row"> <div class="lui-form_entry__input"> <input type="hidden" name="protocol_answers[5][protocol_element_id]" id="protocol_answers_5_protocol_element_id" value="4" form="protocol_form_preview_form" /> <div class="protocol_form__bool-field"> <div class="lui-checkbox lui-checkbox--unchecked" data-controller="checkbox"> <input type="hidden" name="protocol_answers[5][value]" id="protocol_answers_5_value" value="false" form="protocol_form_preview_form" data-checkbox-target="hiddenInput" /> <label class="lui-checkbox__wrapper"> <span class="lui-checkbox__input"> <input type="checkbox" data-checkbox-target="input" data-action="change->checkbox#toggle" class="lui-checkbox__original" value="true"> <span class="lui-checkbox__inner"></span> </span> </label> </div> </div> </div> <div class="lui-form_entry__label-wrapper " style=""> <span class="lui-form_entry__label">Accept terms</span> <span class="lui-form_entry__required"></span> <div class="lui-form_entry__icon"> <span class="lui-icon_tooltip"> <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"> Optional for demo </div> </div> <div class="lui-icon h-[14px] w-[14px]"> <i class="fa-regular fa-circle-info lui-icon__icon" style="font-size: 14px; color: --text-content;"></i> </div> </span> </div> </div> </div> </div> </div> </div> <div class="protocol_form__item" id="5" data-protocol-element-id="5" > <div class="lui-form_entry lui-form_entry--vertical"> <div class="lui-form_entry__row"> <div class="lui-form_entry__input"> <input type="hidden" name="protocol_answers[6][protocol_element_id]" id="protocol_answers_6_protocol_element_id" value="5" form="protocol_form_preview_form" /> <div id="looposui-inputs-select_protocol_answers_6__value__5793709857" class="grow" data-controller="input-select" data-input-select-input-outlet="#looposui-inputs-select_protocol_answers_6__value__5793709857 .lui-inner-input" data-input-select-mode-value="form" data-input-select-form-value="protocol_form_preview_form" data-input-select-variant-value="list"> <div class="lui-input-select lui-input-select--form relative lui-inputs__select lui-input-select--list"> <div data-controller="input" data-input-open-actions-value="true" class="lui-inner-input relative flex gap-2" data-input-original-input-value="Used" data-input-mode-value="form" data-input-form-value="protocol_form_preview_form"> <div class="w-full flex flex-col"> <div class="lui-input-chrome relative w-full"> <span class="lui-input "> <input name="protocol_answers[6][value]" type="text" value="Used" class="lui-input__input" mode="form" form="protocol_form_preview_form" 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> </div> <span class="lui-inner-input__actions opacity-0 flex items-center gap-1 h-fit" data-input-target="actions"> <span class="lui-button__tooltip-wrapper inline-flex w-fit"> <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-rounded" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button></span> <span class="lui-button__tooltip-wrapper inline-flex w-fit"> <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 lui--button#startLoading" form="protocol_form_preview_form" 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-rounded" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button></span> </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 lui-input-select__option--blank" role="option" data-input-select-target="option" data-text="" data-value=""> <div class="lui-input-select__option-wrapper"> <div class="lui-input-select__option-text"> <span role="text">—</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="New" data-value="new"> <div class="lui-input-select__option-wrapper"> <div class="lui-input-select__option-text"> <span role="text">New</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="Used" data-value="used"> <div class="lui-input-select__option-wrapper"> <div class="lui-input-select__option-text"> <span role="text">Used</span> </div> <i class="fa-regular fa-check " data-input-select-target="check"></i> </div> </div> </div> </div> </div> <input type="hidden" name="protocol_answers[6][value]" id="protocol_answers_6_value" value="used" form="protocol_form_preview_form" data-input-select-target="hiddenInput" /> </div> </div> <div class="lui-form_entry__label-wrapper pl-2" style=""> <span class="lui-form_entry__label">Condition</span> <span class="lui-form_entry__required">*</span> </div> </div> </div> </div> <div class="protocol_form__item" id="13" data-protocol-element-id="13" > <div class="lui-form_entry lui-form_entry--vertical"> <div class="lui-form_entry__row"> <div class="lui-form_entry__input"> <input type="hidden" name="protocol_answers[7][protocol_element_id]" id="protocol_answers_7_protocol_element_id" value="13" form="protocol_form_preview_form" /> <div id="looposui-inputs-select2_protocol_answers_7__value__9912568611" class="grow" data-controller="input-select2" data-input-select2-mode-value="form" data-input-select2-form-value="protocol_form_preview_form" data-input-select2-multiple-value="true" data-input-select2-variant-value="grid" data-input-select2-show-loading-on-submit-value="true"> <div class="lui-input-select lui-input-select--grid " role="listbox"> <div class="lui-input-select__grid-options"> <span class="lui-button__tooltip-wrapper inline-flex w-full"> <button class="lui-button lui-button--size-small lui-button--neutral--secondary w-full w-full relative" data-controller="lui--button" data-input-select2-target="option" data-action="click->input-select2#selectGridOption" data-text="Tag A" data-value="tag_a" type="button" role="option" aria-selected="true"> <span class="lui-button__text opacity-100 inline-flex" data-lui--button-target="text"> Tag A </span> <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-rounded" style="--lui-micon-size: 14px;"> progress_activity </i> </div> </button></span> <span class="lui-button__tooltip-wrapper inline-flex w-full"> <button class="lui-button lui-button--size-small lui-button--neutral--secondary w-full w-full relative" data-controller="lui--button" data-input-select2-target="option" data-action="click->input-select2#selectGridOption" data-text="Tag B" data-value="tag_b" type="button" role="option" aria-selected="false"> <span class="lui-button__text opacity-100 inline-flex" data-lui--button-target="text"> Tag B </span> <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-rounded" style="--lui-micon-size: 14px;"> progress_activity </i> </div> </button></span> <span class="lui-button__tooltip-wrapper inline-flex w-full"> <button class="lui-button lui-button--size-small lui-button--neutral--secondary w-full w-full relative" data-controller="lui--button" data-input-select2-target="option" data-action="click->input-select2#selectGridOption" data-text="Tag C" data-value="tag_c" type="button" role="option" aria-selected="true"> <span class="lui-button__text opacity-100 inline-flex" data-lui--button-target="text"> Tag C </span> <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-rounded" style="--lui-micon-size: 14px;"> progress_activity </i> </div> </button></span> </div> </div> <div data-input-select2-target="hiddenInputWrapper"> <input type="hidden" name="protocol_answers[7][value][]" id="protocol_answers_7_value_" value="tag_a" data-input-select2-target="hiddenInput" /> </div> </div> </div> <div class="lui-form_entry__label-wrapper pl-2" style=""> <span class="lui-form_entry__label">Tags</span> <span class="lui-form_entry__required"></span> </div> </div> </div> </div> <div class="protocol_form__item" id="6" data-protocol-element-id="6" > <div class="protocol_form__info-break"> <hr> </div> </div> <div class="protocol_form__item" id="19" data-protocol-element-id="19" > <div class="protocol_form__info-html"> <div class="protocol_form__info-html-content"> <p><strong>Important</strong></p> <p>Please read before continuing.</p> </div> </div> </div> <div class="protocol_form__item" id="20" data-protocol-element-id="20" > <div class="protocol_form__info-image"> <div class="protocol_form__info-image-header"> <div class="protocol_form__info-image-label"> <div class="protocol_form__label-text"> <div><strong>Reference photo</strong></div> </div> <span class="lui-icon_tooltip"> <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"> Example of acceptable condition </div> </div> <div class="lui-icon h-[12px] w-[12px]"> <i class="fa-regular fa-circle-question lui-icon__icon" style="font-size: 12px; color: black;"></i> </div> </span> </div> </div> <img alt="" class="protocol_form__info-image-img" loading="lazy" src="https://picsum.photos/seed/protocol-form/400/224" /> </div> </div> <div class="protocol_form__item" id="21" data-protocol-element-id="21" > <div class="lui-form_entry lui-form_entry--vertical"> <div class="lui-form_entry__row"> <div class="lui-form_entry__input"> <input type="hidden" name="protocol_answers[8][protocol_element_id]" id="protocol_answers_8_protocol_element_id" value="21" form="protocol_form_preview_form" /> <div class="protocol_form__custom-input" data-controller="protocol-custom-input" data-protocol-custom-input-element-id-value="21" data-protocol-custom-input-initial-value-value="" data-protocol-custom-input-autosubmit-value="false" data-protocol-custom-input-form-id-value="protocol_form_preview_form" > <input type="hidden" name="protocol_answers[8][value]" id="protocol_answers_8_value" value="" form="protocol_form_preview_form" data-protocol-custom-input-value-field="true" /> <script type="text/template" data-protocol-custom-input-source> <div class="lui-text lui-text--form"> <label for="custom-text-21">Custom value</label> <input class="lui-text--form__lui-input" type="text" id="custom-text-21" placeholder="Type here..." /> </div> <script> document.getElementById('custom-text-21').addEventListener('change', function () { const value = this.value; const customEvent = new CustomEvent('protocolCustomAnswer-21', { detail: { value } }); const protocolContainer = document.querySelector('[data-protocol-element-id="21"]'); if (protocolContainer) { protocolContainer.dispatchEvent(customEvent); } }); </script> </script> <div data-protocol-custom-input-target="container"></div> </div> </div> <div class="lui-form_entry__label-wrapper pl-2" style=""> <span class="lui-form_entry__label">Custom field</span> <span class="lui-form_entry__required"></span> </div> </div> </div> </div> <div class="protocol_form__item" id="7" data-protocol-element-id="7" > <div class="protocol_form__info-url"> <span class="protocol_form__label-text protocol_form__label-text--url"> <a target="_blank" rel="noopener noreferrer" href="https://example.com">Help center</a> </span> </div> </div> <div class="protocol_form__item" id="8" data-protocol-element-id="8" > <div class="lui-form_entry lui-form_entry--vertical"> <div class="lui-form_entry__row"> <div class="lui-form_entry__input"> <input type="hidden" name="protocol_answers[9][protocol_element_id]" id="protocol_answers_9_protocol_element_id" value="8" form="protocol_form_preview_form" /> <div class="lui-text lui-text--form relative"> <div data-controller="input" data-input-open-actions-value="true" class="lui-inner-input relative flex gap-2" data-input-original-input-value="" data-input-mode-value="form" data-input-form-value="protocol_form_preview_form"> <div class="w-full flex flex-col"> <div class="lui-input-chrome relative w-full"> <span class="lui-input "> <input name="protocol_answers[9][value]" type="text" value="" class="lui-input__input" mode="form" form="protocol_form_preview_form" contentEditable="true" data-input-target="input" data-action="input->input#onChange change->input#onChange"> <span class="lui-input__spinner"> <i class="fa-regular fa-spinner"></i> </span> </span> </div> </div> <span class="lui-inner-input__actions opacity-0 flex items-center gap-1 h-fit" data-input-target="actions"> <span class="lui-button__tooltip-wrapper inline-flex w-fit"> <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-rounded" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button></span> <span class="lui-button__tooltip-wrapper inline-flex w-fit"> <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 lui--button#startLoading" form="protocol_form_preview_form" 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-rounded" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button></span> </span> </div> </div> </div> <div class="lui-form_entry__label-wrapper pl-2" style=""> <span class="lui-form_entry__label">Email</span> <span class="lui-form_entry__required"></span> </div> </div> </div> </div> <div class="protocol_form__item" id="14" data-protocol-element-id="14" > <div class="lui-form_entry lui-form_entry--vertical"> <div class="lui-form_entry__row"> <div class="lui-form_entry__input"> <input type="hidden" name="protocol_answers[10][protocol_element_id]" id="protocol_answers_10_protocol_element_id" value="14" form="protocol_form_preview_form" /> <div class="lui-input-file-wrapper"> <div class="lui-input-file-container" id="looposui-inputs-file-multiple_protocol_answers_10__values____2322156580" data-controller="input-file" data-input-file-form-value="protocol_form_preview_form" data-input-file-direct-upload-value="true" data-input-file-direct-upload-authorization-value="" data-input-file-standalone-value="true" data-input-file-field-name-value="protocol_answers[10][values][]" data-input-file-submit-on-upload-value="false" data-input-file-validate-on-upload-value="true" data-input-file-multiple-value="true" data-action="click->input-file#toggleActions"> <input type="hidden" autocomplete="off" value="uoi9uNSTecwkzLyVcP888m7qvtuhms1bx0DP1qSmxwUz1XRTz2TZrKnLRz7vUTJgCqqSe1cpAXC7G0JM+NgFLyEz4CRDXaElBLZbwnmZepxlKYceEGhF--a/9lRUzUrQWXKlP2--n+qsuSBb7K/FLu5+yQ4g6Q==" data-input-file-target="uploadContext" form="protocol_form_preview_form"> <div class="lui-input-file"> <span class="lui-button__tooltip-wrapper inline-flex w-fit"> <label class="lui-button lui-button--neutral--secondary lui-button--size-tiny w-fit w-fit relative" data-controller="lui--button" for="looposui-inputs-file-multiple_protocol_answers_10__values____2322156580-file-input"> <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-file-arrow-up" data-lui--button-target="leadingIcon"></i></div> </div> <span class="lui-button__text opacity-100 inline-flex" data-lui--button-target="text"> Select file(s) </span> <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-rounded" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </label></span> <input multiple="multiple" data-input-file-target="file" data-action="change->input-file#upload" data-direct-upload-url="/rails/active_storage/direct_uploads" id="looposui-inputs-file-multiple_protocol_answers_10__values____2322156580-file-input" class="hidden" type="file" form="protocol_form_preview_form" accept=".pdf,application/pdf,.jpg,image/jpeg,.jpeg,.png,image/png,.webp,image/webp"> <div class="flex justify-end items-center gap-[2px] min-w-0"> <span class="lui-input-file__text" data-input-file-target="uploadedLabel" data-no-file-label="No file chosen" data-files-uploaded-template="__COUNT__ files uploaded"> No file chosen </span> <div class="lui-input-file__actions" data-input-file-target="fileActions" hidden > <div data-input-file-target="popover" data-controller="popover" data-popover-open-value="false" data-popover-rotate-toggle-value="true" class="lui-popover"> <button popovertarget="popover-a59b7c9362b43c89437a-target" data-controller="popover-toggle" data-popover-target="toggle" data-popover-toggle-position-value="bottom_right" data-popover-toggle-anchor-value="top_right" data-popover-toggle-anchor-selector-value="#looposui-inputs-file-multiple_protocol_answers_10__values____2322156580" data-popover-toggle-on-close-value="" data-popover-toggle-rotate-value="true" type="button" class="lui-popover-toggle-wrapper"> <i class="fa-regular fa-chevron-down text-[10px]"></i> </button> <div id="popover-a59b7c9362b43c89437a-target" popover="auto" data-popover-target="popover" class="pointer-events-none w-full h-full bg-transparent overflow-hidden"> <div class="bg-white lui-popover-inner absolute pointer-events-auto"> <div class="lui-input-files lui-action-menu" data-input-file-target="fileList"> </div> </div> </div> </div> </div> <span class="lui-input-file__spinner"> <i class="fa-regular fa-spinner"></i> </span> </div> </div> </div> </div> </div> <div class="lui-form_entry__label-wrapper pl-2" style=""> <span class="lui-form_entry__label">Files</span> <span class="lui-form_entry__required"></span> </div> </div> </div> </div> <div class="protocol_form__item" id="15" data-protocol-element-id="15" > <div class="lui-form_entry lui-form_entry--vertical"> <div class="lui-form_entry__row"> <div class="lui-form_entry__input"> <input type="hidden" name="protocol_answers[11][protocol_element_id]" id="protocol_answers_11_protocol_element_id" value="15" form="protocol_form_preview_form" /> <div class="lui-date_picker-wrapper"> <div class="lui-date_picker h-[32px]!"> <div class="lui-date_picker__field" data-controller="date-picker" data-date-picker-locale-value="en" data-date-picker-submit-on-select-value="false" data-date-picker-show-today-button-value="true" data-date-picker-today-label-value="Today" data-date-picker-show-clear-button-value="true" data-date-picker-clear-label-value="Clear" data-date-picker-granularity-value="date" data-date-picker-range-separator-value="~" data-date-picker-date-format-value="dd/MM/yyyy" data-date-picker-min-date-value="2020-01-01" data-date-picker-max-date-value="2026-07-24" data-date-picker-blocked-days-value="weekends"> <input name="protocol_answers[11][value]" class="air-datepicker-input" readonly="readonly" data-date-picker-target="input" placeholder="Select date..."> <div class="lui-date_picker__icon"> <div class="lui-icon h-[16px] w-[16px]"> <i class="fa-regular fa-calendar lui-icon__icon" style="font-size: 16px; color: currentColor;"></i> </div> </div> </div> </div> </div> </div> <div class="lui-form_entry__label-wrapper pl-2" style=""> <span class="lui-form_entry__label">Purchase date</span> <span class="lui-form_entry__required"></span> <div class="lui-form_entry__icon"> <span class="lui-icon_tooltip"> <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"> Select the purchase date </div> </div> <div class="lui-icon h-[14px] w-[14px]"> <i class="fa-regular fa-circle-question lui-icon__icon" style="font-size: 14px; color: --text-content;"></i> </div> </span> </div> </div> </div> </div> </div> <div class="protocol_form__item" id="16" data-protocol-element-id="16" > <div class="lui-form_entry lui-form_entry--vertical"> <div class="lui-form_entry__row"> <div class="lui-form_entry__input"> <input type="hidden" name="protocol_answers[12][protocol_element_id]" id="protocol_answers_12_protocol_element_id" value="16" form="protocol_form_preview_form" /> <div class="lui-date_picker-wrapper"> <div class="lui-date_picker h-[32px]!"> <div class="lui-date_picker__field" data-controller="date-picker" data-date-picker-locale-value="en" data-date-picker-submit-on-select-value="false" data-date-picker-show-today-button-value="true" data-date-picker-today-label-value="Today" data-date-picker-show-clear-button-value="true" data-date-picker-clear-label-value="Clear" data-date-picker-granularity-value="date" data-date-picker-range-separator-value="~" data-date-picker-date-format-value="dd/MM/yyyy" data-date-picker-min-date-value="2026-07-18" data-date-picker-max-date-value="2026-08-24"> <input name="protocol_answers[12][value]" class="air-datepicker-input" readonly="readonly" data-date-picker-target="input" placeholder="Select date..."> <div class="lui-date_picker__icon"> <div class="lui-icon h-[16px] w-[16px]"> <i class="fa-regular fa-calendar lui-icon__icon" style="font-size: 16px; color: currentColor;"></i> </div> </div> </div> </div> </div> </div> <div class="lui-form_entry__label-wrapper pl-2" style=""> <span class="lui-form_entry__label">Appointment date</span> <span class="lui-form_entry__required"></span> </div> </div> </div> </div> <div class="protocol_form__item" id="17" data-protocol-element-id="17" > <div class="lui-form_entry lui-form_entry--vertical"> <div class="lui-form_entry__row"> <div class="lui-form_entry__input"> <input type="hidden" name="protocol_answers[13][protocol_element_id]" id="protocol_answers_13_protocol_element_id" value="17" form="protocol_form_preview_form" /> <div class="lui-date_picker-wrapper"> <div class="lui-date_picker h-[32px]!"> <div class="lui-date_picker__field" data-controller="date-picker" data-date-picker-locale-value="en" data-date-picker-submit-on-select-value="false" data-date-picker-range-value="true" data-date-picker-show-today-button-value="true" data-date-picker-today-label-value="Today" data-date-picker-show-clear-button-value="true" data-date-picker-clear-label-value="Clear" data-date-picker-granularity-value="date" data-date-picker-range-separator-value="~" data-date-picker-date-format-value="dd/MM/yyyy" data-date-picker-min-date-value="2020-01-01" data-date-picker-max-date-value="2030-12-31"> <input name="protocol_answers[13][value]" class="lui-date_picker-ranged-picker" readonly="readonly" data-date-picker-target="input" placeholder="Select date range..."> <div class="lui-date_picker__icon"> <div class="lui-icon h-[16px] w-[16px]"> <i class="fa-regular fa-calendar lui-icon__icon" style="font-size: 16px; color: currentColor;"></i> </div> </div> </div> </div> </div> </div> <div class="lui-form_entry__label-wrapper pl-2" style=""> <span class="lui-form_entry__label">Coverage period</span> <span class="lui-form_entry__required"></span> <div class="lui-form_entry__icon"> <span class="lui-icon_tooltip"> <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"> Select start and end dates </div> </div> <div class="lui-icon h-[14px] w-[14px]"> <i class="fa-regular fa-circle-question lui-icon__icon" style="font-size: 14px; color: --text-content;"></i> </div> </span> </div> </div> </div> </div> </div> <div class="protocol_form__item" id="18" data-protocol-element-id="18" > <div class="lui-form_entry lui-form_entry--vertical"> <div class="lui-form_entry__row"> <div class="lui-form_entry__input"> <input type="hidden" name="protocol_answers[14][protocol_element_id]" id="protocol_answers_14_protocol_element_id" value="18" form="protocol_form_preview_form" /> <div class="lui-phone-number lui-phone-number--form relative" data-controller="phone-number" data-phone-number-initial-country-value="pt" data-phone-number-separate-dial-code-value="true" data-phone-number-country-search-value="true" data-phone-number-show-flags-value="true" data-phone-number-format-as-you-type-value="true" data-phone-number-strict-mode-value="true" data-phone-number-allowed-number-types-value="["MOBILE","FIXED_LINE"]" data-phone-number-placeholder-number-type-value="MOBILE" data-phone-number-country-name-locale-value="en" data-phone-number-has-country-input-value="false"> <div data-controller="input" data-input-open-actions-value="true" class="lui-inner-input relative flex gap-2" data-input-original-input-value="" data-input-mode-value="form" data-input-form-value="protocol_form_preview_form"> <div class="w-full flex flex-col"> <div class="lui-input-chrome relative w-full"> <span class="lui-input "> <input name="_looposui-inputs-phonenumber_protocol_answers_14__value__8670528836" type="tel" class="lui-input__input" mode="form" form="protocol_form_preview_form" contentEditable="true" data-input-target="input" data-action="input->input#onChange change->input#onChange" data-phone-number-target="visibleInput" autocomplete="off"> <span class="lui-input__spinner"> <i class="fa-regular fa-spinner"></i> </span> </span> </div> </div> <span class="lui-inner-input__actions opacity-0 flex items-center gap-1 h-fit" data-input-target="actions"> <span class="lui-button__tooltip-wrapper inline-flex w-fit"> <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-rounded" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button></span> <span class="lui-button__tooltip-wrapper inline-flex w-fit"> <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 lui--button#startLoading" form="protocol_form_preview_form" 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-rounded" style="--lui-micon-size: 12px;"> progress_activity </i> </div> </button></span> </span> </div> <input type="hidden" name="protocol_answers[14][value]" id="protocol_answers_14_value" data-phone-number-target="hiddenInput" /> </div> </div> <div class="lui-form_entry__label-wrapper pl-2" style=""> <span class="lui-form_entry__label">Phone number</span> <span class="lui-form_entry__required"></span> <div class="lui-form_entry__icon"> <span class="lui-icon_tooltip"> <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"> Include country code </div> </div> <div class="lui-icon h-[14px] w-[14px]"> <i class="fa-regular fa-circle-question lui-icon__icon" style="font-size: 14px; color: --text-content;"></i> </div> </span> </div> </div> </div> </div> </div> </div> <div class="mt-4 flex items-center gap-3"> <span class="lui-button__tooltip-wrapper inline-flex w-fit"> <button class="lui-button lui-button--neutral--primary lui-button--size-default w-fit w-fit relative" data-controller="lui--button" data-action="lui--button#startLoading" type="submit"> <span class="lui-button__text opacity-100 inline-flex" data-lui--button-target="text"> Submit answers </span> <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-rounded" style="--lui-micon-size: 16px;"> progress_activity </i> </div> </button></span> </div> </form></turbo-frame></div>No Usage documentation to display.
<div class="p-4 max-w-xl space-y-4"> <% with_existing_answers = ActiveModel::Type::Boolean.new.cast(preview_params[:with_existing_answers]) %> <% readonly = ActiveModel::Type::Boolean.new.cast(preview_params[:readonly]) %> <% initial_answers = with_existing_answers ? ProtocolFormPreviewData.sample_answers : [] %> <%= turbo_stream_from "dummy_app_toasters_1" %> <%= tag.div( id: "lui-toasters", popover: "manual", data: { controller: "toasters", toasters_new_toaster_url_value: LooposUi::Engine.routes.url_helpers.toasters_path, }, ) %> <%= render partial: "protocol_form_answers/form", locals: { protocol: ProtocolFormPreviewData.protocol, errors: { errors: [] }, answers: initial_answers, submitted: false, replay_answers: with_existing_answers, direct_upload_url: protocol_form_local_direct_upload_url, readonly: readonly, } %></div>No notes provided.
| Param | Description | Input |
|---|---|---|
|
Pre-fill the form with sample answers |
|
|
|
Render all answers as view-only |
|
ProtocolForm
Description
LooposUi::ProtocolForm renders a Core protocol payload using LoopOS UI inputs. It maps protocol elements to form fields, pre-fills saved answers, displays validation errors, and supports direct uploads for image/file answers.
Arguments
| Property | Default | Description |
|---|---|---|
protocol |
{} |
Protocol payload. Accepts items or data arrays containing protocol elements. |
field_name_prefix |
"protocol_answers" |
Prefix used to build submitted answer params, e.g. protocol_answers[0][value]. |
value_for |
nil |
Callable used to resolve a prefilled value per protocol item. It may return a raw value or a protocol answer hash. |
upload_form_id |
nil |
Form id used by upload components (input:images, input:files) and custom autosubmit inputs. |
core_base_url |
nil |
Base URL used to build Core direct upload and blob URLs. |
core_api_token |
nil |
Token used to build a Bearer authorization header for Core direct uploads. |
direct_upload_url |
nil |
Explicit Active Storage direct upload URL. Overrides core_base_url. |
direct_upload_authorization |
nil |
Explicit authorization header for direct uploads. Overrides core_api_token. |
orientation |
:vertical |
Form entry layout. Accepted values: :vertical, :horizontal. |
label_width |
nil |
Fixed label width passed to FormEntry when using horizontal layouts. |
input_mode |
:form |
Behaviour mode for rendered inputs: :inline, :form, or :autosubmit. |
input_appearance |
nil |
Visual appearance for rendered inputs. Defaults to input_mode. Accepted values: :inline, :form, :autosubmit. |
input_form |
nil |
HTML form attribute for non-upload inputs rendered outside the target <form>. |
errors |
{} |
Validation payload, expected as { errors: [{ protocol_element_id:, errors:, is_deal_breaker: }] }. |
skip_element_defaults |
false |
When true, nil values from value_for remain empty instead of falling back to protocol element defaults. |
Supported Protocol Elements
| Protocol type | Rendered component |
|---|---|
input:text, input:email, input:iban, input:postalcode, input:identifier |
Inputs::Text or Inputs::TextArea |
input:number |
Inputs::Number |
input:money |
Inputs::Money |
input:bool |
Inputs::Checkbox |
input:select |
Inputs::Select |
input:multiselect |
Inputs::Select2 |
input:date, input:daterange |
DatePicker |
input:phonenumber |
Inputs::PhoneNumber |
input:images |
V2::Image |
input:files |
Inputs::File |
input:custom |
Custom HTML rendered through protocol-custom-input |
info:title, info:text, info:break, info:url, info:html, info:image |
Informational markup |
Value Pre-Fill
value_for is called with the protocol item. It can return:
- A raw value, e.g.
"John","true", or["1", "2"]. - A hash containing
protocol_element_idandvalue, as returned by protocol answer APIs. - For file answers, optional
file_namescan be included to preserve display labels.
When no saved answer is present, the component falls back to element defaults unless skip_element_defaults: true is set.
Uploads
For input:images and input:files, pass either:
core_base_url+core_api_token- or explicit
direct_upload_url+direct_upload_authorization
Uploads submit signed blob ids in values[] fields under the configured field_name_prefix.
Autosubmit loading
When ProtocolForm is rendered inside a <form> with the protocol-form Stimulus controller (e.g. stepper item_assessment validation via check_protocol_answers), autosubmit does not show the input saving spinner (lui-input--saving) on field blur or change. This keeps background validation silent while still submitting answers and updating validation state.
The protocol-form controller exposes suppressSubmitLoading (default true). Set data-protocol-form-suppress-submit-loading-value="false" on the form to restore loading indicators if needed.
Usage
<%= form_with id: "protocol_form", url: protocol_answers_path, method: :patch do %> <%= render LooposUi::ProtocolForm.new( protocol: @protocol, value_for: ->(item) { @answers_by_element_id[item[:id].to_i] }, errors: @protocol_errors, input_mode: :form, input_form: "protocol_form", upload_form_id: "protocol_form", core_base_url: @core_base_url, core_api_token: @core_api_token, ) %><% end %>