<h1>Note: this example requires manual pagination, sorting and log building. It's not recommended, you should use the factory methods instead.</h1><br><turbo-frame class="lui-log_list" id="lui-log-list-preview-log-list"> <div class="lui-log_list__group"> <div class="lui-log_list__group__date"> 07-12-2025 </div> <div class="lui-log" data-controller="log" data-log-expanded-copy-text-value="Expand" data-log-collapsed-copy-text-value="Collapse"> <div class="lui-log__main"> <div class="lui-log__main-header"> <span class="text-secondary-xs-normal text-secondary-xs-regular text-gray-700">10:59h</span> </div> <div class="lui-log__content" data-log-target="content"> <div class="lui-log__word">log </div> <div class="lui-log__word">0: </div> <div class="lui-log__word">Item </div> <div class="lui-log__word">Value's </div> <div class="lui-log__word">Status </div> <div class="lui-log__word">updated </div> <div class="lui-log__word">from </div> <div class="lui-log__word">draft </div> <div class="lui-log__word">to </div> <div class="lui-log__word">waiting_agreement.</div> </div> <div class="lui-log__buttons"></div> </div> <div class="lui-log__source"> <span id="lui-token_1613416768" class="lui-token lui-entity-token lui-entity-token-general " style="color: #212529; background-color: #F8F9FA;"> <svg height="12" width="12" viewBox="0 0 12 12"> <path d="M8.75904 11.9991C7.80809 11.9991 7.0374 11.7103 6.46904 11.1401C5.5236 10.191 5.51625 8.81515 5.51809 8.75629V6.481H3.24096C1.4531 6.481 0 5.02606 0 3.24004C0 3.18302 0.00551777 1.80718 0.95095 0.858066C1.51931 0.287864 2.29001 -0.000915527 3.24096 -0.000915527C4.91294 -0.000915527 5.71122 0.894854 6.08645 1.64531C6.28878 2.05181 6.38811 2.45647 6.43593 2.75813H8.7572C10.5451 2.75813 12 4.21306 12 6.00092V8.75997C12 9.88198 11.3231 12.0009 8.75904 12.0009V11.9991ZM6.48191 3.72195V8.75813C6.48191 8.99173 6.55549 11.0353 8.75904 11.0353C9.70448 11.0353 10.3722 10.66 10.7419 9.92244C11.027 9.3504 11.0362 8.76549 11.0362 8.75813V5.99908C11.0362 4.74464 10.0153 3.72195 8.75904 3.72195H6.48375H6.48191ZM3.24096 0.96291C1.03924 0.96291 0.965665 3.00644 0.963826 3.24004C0.963826 4.49449 1.98467 5.51533 3.24096 5.51533H5.51625V3.2382C5.51625 3.00644 5.43532 0.961071 3.24096 0.961071V0.96291Z" fill="url(#paint0_linear_238_2402)"/> <defs> <linearGradient id="paint0_linear_238_2402" x1="6" y1="11.9991" x2="6" y2="-0.00275473" gradientUnits="userSpaceOnUse"> <stop stop-color="#443092"/> <stop offset="1" stop-color="#8044FF"/> </linearGradient> </defs> </svg> <span class="lui-token__text">bil-handling-prod</span> <div class="lui-token__actions"> </div> </span> </div> </div> <div class="lui-log lui-log--error" data-controller="log" data-log-expanded-copy-text-value="Expand" data-log-collapsed-copy-text-value="Collapse"> <div class="lui-log__main"> <div class="lui-log__main-header"> <span class="text-secondary-xs-normal text-secondary-xs-regular text-gray-700">08:24h</span> <span class="text-secondary-xs-medium">Percy Heller</span> </div> <div class="lui-log__content" data-log-target="content"> <div class="lui-log__word">log </div> <div class="lui-log__word">1: </div> <div class="lui-log__word">Error: </div> <div class="lui-log__word">In </div> <div class="lui-log__word">eveniet </div> <div class="lui-log__word">enim </div> <div class="lui-log__word">qui.</div> </div> <div class="lui-log__buttons"></div> </div> <div class="lui-log__source"> <span id="lui-token_2315766743" class="lui-token lui-entity-token lui-entity-token-general " style="color: #212529; background-color: #F8F9FA;"> <svg height="12" width="12" viewBox="0 0 12 12"> <path d="M8.75904 11.9991C7.80809 11.9991 7.0374 11.7103 6.46904 11.1401C5.5236 10.191 5.51625 8.81515 5.51809 8.75629V6.481H3.24096C1.4531 6.481 0 5.02606 0 3.24004C0 3.18302 0.00551777 1.80718 0.95095 0.858066C1.51931 0.287864 2.29001 -0.000915527 3.24096 -0.000915527C4.91294 -0.000915527 5.71122 0.894854 6.08645 1.64531C6.28878 2.05181 6.38811 2.45647 6.43593 2.75813H8.7572C10.5451 2.75813 12 4.21306 12 6.00092V8.75997C12 9.88198 11.3231 12.0009 8.75904 12.0009V11.9991ZM6.48191 3.72195V8.75813C6.48191 8.99173 6.55549 11.0353 8.75904 11.0353C9.70448 11.0353 10.3722 10.66 10.7419 9.92244C11.027 9.3504 11.0362 8.76549 11.0362 8.75813V5.99908C11.0362 4.74464 10.0153 3.72195 8.75904 3.72195H6.48375H6.48191ZM3.24096 0.96291C1.03924 0.96291 0.965665 3.00644 0.963826 3.24004C0.963826 4.49449 1.98467 5.51533 3.24096 5.51533H5.51625V3.2382C5.51625 3.00644 5.43532 0.961071 3.24096 0.961071V0.96291Z" fill="url(#paint0_linear_238_2402)"/> <defs> <linearGradient id="paint0_linear_238_2402" x1="6" y1="11.9991" x2="6" y2="-0.00275473" gradientUnits="userSpaceOnUse"> <stop stop-color="#443092"/> <stop offset="1" stop-color="#8044FF"/> </linearGradient> </defs> </svg> <span class="lui-token__text">bil-handling-prod</span> <div class="lui-token__actions"> </div> </span> </div> </div> <div class="lui-log lui-log--error" data-controller="log" data-log-expanded-copy-text-value="Expand" data-log-collapsed-copy-text-value="Collapse"> <div class="lui-log__main"> <div class="lui-log__main-header"> <span class="text-secondary-xs-normal text-secondary-xs-regular text-gray-700">08:17h</span> <span class="text-secondary-xs-medium">Rep. Denver O'Hara</span> </div> <div class="lui-log__content" data-log-target="content"> <div class="lui-log__word">log </div> <div class="lui-log__word">2: </div> <div class="lui-log__word">Error: </div> <div class="lui-log__word">Accusamus </div> <div class="lui-log__word">eaque </div> <div class="lui-log__word">laborum </div> <div class="lui-log__word">distinctio.</div> </div> <div class="lui-log__expand-content" data-log-target="expand"> <div class="lui-log__expand-inner"> <div class="lui-log__word">Item </div> <div class="lui-log__word">transitioned </div> <div class="lui-log__word">from </div> <div class="lui-log__word"><b>Draft</b> </div> <div class="lui-log__word">to </div> <div class="lui-log__word"><b>Submitted</b>.</div> </div> </div> <div class="lui-log__buttons"> <button class="lui-button lui-button--neutral--secondary lui-button--size-tiny w-fit w-fit" data-controller="lui--button" data-action="click->log#showMore:prevent log:toggleExpand->lui--button#rotateLeadingIcon" data-log-target="toggleExpand"> <i class="lui-button__icon lui-button__icon--tiny fa-regular fa-chevron-down" data-lui--button-target="leadingIcon"></i> <span class="lui-button__text" data-lui--button-target="text"> Expand </span> </button> </div> </div> <div class="lui-log__source"> <span id="lui-token_3161667835" class="lui-token lui-entity-token lui-entity-token-general " style="color: #212529; background-color: #F8F9FA;"> <svg height="12" width="12" viewBox="0 0 12 12"> <path d="M7.92298 12H1.15375V8.30769C1.15375 7.26974 1.58452 6.33026 2.2758 5.65949C1.91068 5.53641 1.50862 5.32923 1.16606 4.98872C0.647086 4.4718 0.384521 3.77641 0.384521 2.92308C0.384521 0.777436 2.13221 0 3.3076 0H5.61529C7.2276 0 8.53837 1.31077 8.53837 2.92308V4.66872C9.84914 4.8841 11.6153 5.81128 11.6153 8.30769C11.6153 9.38872 11.285 10.2667 10.6327 10.9169C9.56196 11.9836 8.01324 12 7.92298 12ZM2.38452 10.7692H7.92298C8.17529 10.7692 10.3845 10.6872 10.3845 8.30769C10.3845 5.92821 8.17734 5.84821 7.92093 5.84615H4.84606C3.48811 5.84615 2.38452 6.94974 2.38452 8.30769V10.7692ZM3.3076 1.23077C3.3076 1.23077 2.83785 1.23897 2.39888 1.47077C1.8717 1.74769 1.61529 2.22154 1.61529 2.92308C1.61529 3.62462 1.8717 4.10256 2.39683 4.37949C2.8358 4.60923 3.3035 4.61538 3.30965 4.61538H7.3076V2.92308C7.3076 1.98974 6.54862 1.23077 5.61529 1.23077H3.3076Z" fill="url(#paint0_linear_238_804)"/> <defs> <linearGradient id="paint0_linear_238_804" x1="6.00093" y1="12" x2="6.00093" y2="0" gradientUnits="userSpaceOnUse"> <stop stop-color="#FFAA38"/> <stop offset="1" stop-color="#FFCB33"/> </linearGradient> </defs> </svg> <span class="lui-token__text">bil-submission-prod</span> <div class="lui-token__actions"> </div> </span> </div> </div> <div class="lui-log" data-controller="log" data-log-expanded-copy-text-value="Expand" data-log-collapsed-copy-text-value="Collapse"> <div class="lui-log__main"> <div class="lui-log__main-header"> <span class="text-secondary-xs-normal text-secondary-xs-regular text-gray-700">07:41h</span> </div> <div class="lui-log__content" data-log-target="content"> <div class="lui-log__word">log </div> <div class="lui-log__word">3: </div> <div class="lui-log__word">File </div> <div class="lui-log__word">uploaded: </div> <div class="lui-log__word">fruit-notebook/provident.png</div> </div> <div class="lui-log__buttons"></div> </div> <div class="lui-log__source"> <span id="lui-token_8402091145" class="lui-token lui-entity-token lui-entity-token-general " style="color: #212529; background-color: #F8F9FA;"> <img class="lui-token__icon-img" src="neutral"> <span class="lui-token__text">bil-submission-prod</span> <div class="lui-token__actions"> </div> </span> </div> </div> <div class="lui-log" data-controller="log" data-log-expanded-copy-text-value="Expand" data-log-collapsed-copy-text-value="Collapse"> <div class="lui-log__main"> <div class="lui-log__main-header"> <span class="text-secondary-xs-normal text-secondary-xs-regular text-gray-700">07:00h</span> <span class="text-secondary-xs-medium">Rubye O'Keefe</span> </div> <div class="lui-log__content" data-log-target="content"> <div class="lui-log__word">log </div> <div class="lui-log__word">4: </div> <div class="lui-log__word">File </div> <div class="lui-log__word">uploaded: </div> <div class="lui-log__word">rung-scale/dicta.doc</div> </div> <div class="lui-log__expand-content" data-log-target="expand"> <div class="lui-log__expand-inner"> <div class="lui-log__word">Protocol </div> <div class="lui-log__word">Answers </div> <div class="lui-log__word">saved.</div> </div> </div> <div class="lui-log__buttons"> <button class="lui-button lui-button--neutral--secondary lui-button--size-tiny w-fit w-fit" data-controller="lui--button" data-action="click->log#showMore:prevent log:toggleExpand->lui--button#rotateLeadingIcon" data-log-target="toggleExpand"> <i class="lui-button__icon lui-button__icon--tiny fa-regular fa-chevron-down" data-lui--button-target="leadingIcon"></i> <span class="lui-button__text" data-lui--button-target="text"> Expand </span> </button> </div> </div> <div class="lui-log__source"> <span id="lui-token_1208550289" class="lui-token lui-entity-token lui-entity-token-general " style="color: #212529; background-color: #F8F9FA;"> <img class="lui-token__icon-img" src="neutral"> <span class="lui-token__text">bil-submission-prod</span> <div class="lui-token__actions"> </div> </span> </div> </div> <div class="lui-log lui-log--error" data-controller="log" data-log-expanded-copy-text-value="Expand" data-log-collapsed-copy-text-value="Collapse"> <div class="lui-log__main"> <div class="lui-log__main-header"> <span class="text-secondary-xs-normal text-secondary-xs-regular text-gray-700">05:50h</span> <span class="text-secondary-xs-medium">Jana MacGyver</span> </div> <div class="lui-log__content" data-log-target="content"> <div class="lui-log__word">log </div> <div class="lui-log__word">5: </div> <div class="lui-log__word">Error: </div> <div class="lui-log__word">Expedita </div> <div class="lui-log__word">quo </div> <div class="lui-log__word">vel </div> <div class="lui-log__word">et.</div> </div> <div class="lui-log__buttons"></div> </div> <div class="lui-log__source"> <span id="lui-token_6392059189" class="lui-token lui-entity-token lui-entity-token-general " style="color: #212529; background-color: #F8F9FA;"> <svg height="12" width="12" viewBox="0 0 12 12"> <path d="M8.75904 11.9991C7.80809 11.9991 7.0374 11.7103 6.46904 11.1401C5.5236 10.191 5.51625 8.81515 5.51809 8.75629V6.481H3.24096C1.4531 6.481 0 5.02606 0 3.24004C0 3.18302 0.00551777 1.80718 0.95095 0.858066C1.51931 0.287864 2.29001 -0.000915527 3.24096 -0.000915527C4.91294 -0.000915527 5.71122 0.894854 6.08645 1.64531C6.28878 2.05181 6.38811 2.45647 6.43593 2.75813H8.7572C10.5451 2.75813 12 4.21306 12 6.00092V8.75997C12 9.88198 11.3231 12.0009 8.75904 12.0009V11.9991ZM6.48191 3.72195V8.75813C6.48191 8.99173 6.55549 11.0353 8.75904 11.0353C9.70448 11.0353 10.3722 10.66 10.7419 9.92244C11.027 9.3504 11.0362 8.76549 11.0362 8.75813V5.99908C11.0362 4.74464 10.0153 3.72195 8.75904 3.72195H6.48375H6.48191ZM3.24096 0.96291C1.03924 0.96291 0.965665 3.00644 0.963826 3.24004C0.963826 4.49449 1.98467 5.51533 3.24096 5.51533H5.51625V3.2382C5.51625 3.00644 5.43532 0.961071 3.24096 0.961071V0.96291Z" fill="url(#paint0_linear_238_2402)"/> <defs> <linearGradient id="paint0_linear_238_2402" x1="6" y1="11.9991" x2="6" y2="-0.00275473" gradientUnits="userSpaceOnUse"> <stop stop-color="#443092"/> <stop offset="1" stop-color="#8044FF"/> </linearGradient> </defs> </svg> <span class="lui-token__text">bil-handling-prod</span> <div class="lui-token__actions"> </div> </span> </div> </div> <div class="lui-log lui-log--error" data-controller="log" data-log-expanded-copy-text-value="Expand" data-log-collapsed-copy-text-value="Collapse"> <div class="lui-log__main"> <div class="lui-log__main-header"> <span class="text-secondary-xs-normal text-secondary-xs-regular text-gray-700">05:05h</span> </div> <div class="lui-log__content" data-log-target="content"> <div class="lui-log__word">log </div> <div class="lui-log__word">6: </div> <div class="lui-log__word">Error: </div> <div class="lui-log__word">Voluptatem </div> <div class="lui-log__word">ducimus </div> <div class="lui-log__word">illum </div> <div class="lui-log__word">officia.</div> </div> <div class="lui-log__buttons"></div> </div> <div class="lui-log__source"> <span id="lui-token_4032709066" class="lui-token lui-entity-token lui-entity-token-general " style="color: #212529; background-color: #F8F9FA;"> <svg height="12" width="12" viewBox="0 0 12 12"> <path d="M7.92298 12H1.15375V8.30769C1.15375 7.26974 1.58452 6.33026 2.2758 5.65949C1.91068 5.53641 1.50862 5.32923 1.16606 4.98872C0.647086 4.4718 0.384521 3.77641 0.384521 2.92308C0.384521 0.777436 2.13221 0 3.3076 0H5.61529C7.2276 0 8.53837 1.31077 8.53837 2.92308V4.66872C9.84914 4.8841 11.6153 5.81128 11.6153 8.30769C11.6153 9.38872 11.285 10.2667 10.6327 10.9169C9.56196 11.9836 8.01324 12 7.92298 12ZM2.38452 10.7692H7.92298C8.17529 10.7692 10.3845 10.6872 10.3845 8.30769C10.3845 5.92821 8.17734 5.84821 7.92093 5.84615H4.84606C3.48811 5.84615 2.38452 6.94974 2.38452 8.30769V10.7692ZM3.3076 1.23077C3.3076 1.23077 2.83785 1.23897 2.39888 1.47077C1.8717 1.74769 1.61529 2.22154 1.61529 2.92308C1.61529 3.62462 1.8717 4.10256 2.39683 4.37949C2.8358 4.60923 3.3035 4.61538 3.30965 4.61538H7.3076V2.92308C7.3076 1.98974 6.54862 1.23077 5.61529 1.23077H3.3076Z" fill="url(#paint0_linear_238_804)"/> <defs> <linearGradient id="paint0_linear_238_804" x1="6.00093" y1="12" x2="6.00093" y2="0" gradientUnits="userSpaceOnUse"> <stop stop-color="#FFAA38"/> <stop offset="1" stop-color="#FFCB33"/> </linearGradient> </defs> </svg> <span class="lui-token__text">System</span> <div class="lui-token__actions"> </div> </span> </div> </div> <div class="lui-log lui-log--error" data-controller="log" data-log-expanded-copy-text-value="Expand" data-log-collapsed-copy-text-value="Collapse"> <div class="lui-log__main"> <div class="lui-log__main-header"> <span class="text-secondary-xs-normal text-secondary-xs-regular text-gray-700">04:01h</span> <span class="text-secondary-xs-medium">Doug Morar</span> </div> <div class="lui-log__content" data-log-target="content"> <div class="lui-log__word">log </div> <div class="lui-log__word">7: </div> <div class="lui-log__word">Error: </div> <div class="lui-log__word">Aut </div> <div class="lui-log__word">dolor </div> <div class="lui-log__word">asperiores </div> <div class="lui-log__word">consequuntur.</div> </div> <div class="lui-log__buttons"></div> </div> <div class="lui-log__source"> <span id="lui-token_2643051547" class="lui-token lui-entity-token lui-entity-token-general " style="color: #212529; background-color: #F8F9FA;"> <svg height="12" width="12" viewBox="0 0 12 12"> <path d="M8.75904 11.9991C7.80809 11.9991 7.0374 11.7103 6.46904 11.1401C5.5236 10.191 5.51625 8.81515 5.51809 8.75629V6.481H3.24096C1.4531 6.481 0 5.02606 0 3.24004C0 3.18302 0.00551777 1.80718 0.95095 0.858066C1.51931 0.287864 2.29001 -0.000915527 3.24096 -0.000915527C4.91294 -0.000915527 5.71122 0.894854 6.08645 1.64531C6.28878 2.05181 6.38811 2.45647 6.43593 2.75813H8.7572C10.5451 2.75813 12 4.21306 12 6.00092V8.75997C12 9.88198 11.3231 12.0009 8.75904 12.0009V11.9991ZM6.48191 3.72195V8.75813C6.48191 8.99173 6.55549 11.0353 8.75904 11.0353C9.70448 11.0353 10.3722 10.66 10.7419 9.92244C11.027 9.3504 11.0362 8.76549 11.0362 8.75813V5.99908C11.0362 4.74464 10.0153 3.72195 8.75904 3.72195H6.48375H6.48191ZM3.24096 0.96291C1.03924 0.96291 0.965665 3.00644 0.963826 3.24004C0.963826 4.49449 1.98467 5.51533 3.24096 5.51533H5.51625V3.2382C5.51625 3.00644 5.43532 0.961071 3.24096 0.961071V0.96291Z" fill="url(#paint0_linear_238_2402)"/> <defs> <linearGradient id="paint0_linear_238_2402" x1="6" y1="11.9991" x2="6" y2="-0.00275473" gradientUnits="userSpaceOnUse"> <stop stop-color="#443092"/> <stop offset="1" stop-color="#8044FF"/> </linearGradient> </defs> </svg> <span class="lui-token__text">bil-handling-prod</span> <div class="lui-token__actions"> </div> </span> </div> </div> <div class="lui-log lui-log--error" data-controller="log" data-log-expanded-copy-text-value="Expand" data-log-collapsed-copy-text-value="Collapse"> <div class="lui-log__main"> <div class="lui-log__main-header"> <span class="text-secondary-xs-normal text-secondary-xs-regular text-gray-700">03:45h</span> <span class="text-secondary-xs-medium">Sommer Hilll</span> </div> <div class="lui-log__content" data-log-target="content"> <div class="lui-log__word">log </div> <div class="lui-log__word">8: </div> <div class="lui-log__word">Error: </div> <div class="lui-log__word">Iusto </div> <div class="lui-log__word">asperiores </div> <div class="lui-log__word">aut </div> <div class="lui-log__word">aliquid.</div> </div> <div class="lui-log__buttons"></div> </div> <div class="lui-log__source"> <span id="lui-token_1951053954" class="lui-token lui-entity-token lui-entity-token-general " style="color: #212529; background-color: #F8F9FA;"> <svg height="12" width="12" viewBox="0 0 12 12"> <path d="M8.75904 11.9991C7.80809 11.9991 7.0374 11.7103 6.46904 11.1401C5.5236 10.191 5.51625 8.81515 5.51809 8.75629V6.481H3.24096C1.4531 6.481 0 5.02606 0 3.24004C0 3.18302 0.00551777 1.80718 0.95095 0.858066C1.51931 0.287864 2.29001 -0.000915527 3.24096 -0.000915527C4.91294 -0.000915527 5.71122 0.894854 6.08645 1.64531C6.28878 2.05181 6.38811 2.45647 6.43593 2.75813H8.7572C10.5451 2.75813 12 4.21306 12 6.00092V8.75997C12 9.88198 11.3231 12.0009 8.75904 12.0009V11.9991ZM6.48191 3.72195V8.75813C6.48191 8.99173 6.55549 11.0353 8.75904 11.0353C9.70448 11.0353 10.3722 10.66 10.7419 9.92244C11.027 9.3504 11.0362 8.76549 11.0362 8.75813V5.99908C11.0362 4.74464 10.0153 3.72195 8.75904 3.72195H6.48375H6.48191ZM3.24096 0.96291C1.03924 0.96291 0.965665 3.00644 0.963826 3.24004C0.963826 4.49449 1.98467 5.51533 3.24096 5.51533H5.51625V3.2382C5.51625 3.00644 5.43532 0.961071 3.24096 0.961071V0.96291Z" fill="url(#paint0_linear_238_2402)"/> <defs> <linearGradient id="paint0_linear_238_2402" x1="6" y1="11.9991" x2="6" y2="-0.00275473" gradientUnits="userSpaceOnUse"> <stop stop-color="#443092"/> <stop offset="1" stop-color="#8044FF"/> </linearGradient> </defs> </svg> <span class="lui-token__text">bil-handling-prod</span> <div class="lui-token__actions"> </div> </span> </div> </div> <div class="lui-log" data-controller="log" data-log-expanded-copy-text-value="Expand" data-log-collapsed-copy-text-value="Collapse"> <div class="lui-log__main"> <div class="lui-log__main-header"> <span class="text-secondary-xs-normal text-secondary-xs-regular text-gray-700">02:20h</span> </div> <div class="lui-log__content" data-log-target="content"> <div class="lui-log__word">log </div> <div class="lui-log__word">9: </div> <div class="lui-log__word">Email </div> <div class="lui-log__word">sent </div> <div class="lui-log__word">to </div> <div class="lui-log__word">jerry_hoppe@littel.example</div> </div> <div class="lui-log__buttons"></div> </div> <div class="lui-log__source"> <span id="lui-token_6663567588" class="lui-token lui-entity-token lui-entity-token-general " style="color: #212529; background-color: #F8F9FA;"> <svg height="12" width="12" viewBox="0 0 12 12"> <path d="M8.75904 11.9991C7.80809 11.9991 7.0374 11.7103 6.46904 11.1401C5.5236 10.191 5.51625 8.81515 5.51809 8.75629V6.481H3.24096C1.4531 6.481 0 5.02606 0 3.24004C0 3.18302 0.00551777 1.80718 0.95095 0.858066C1.51931 0.287864 2.29001 -0.000915527 3.24096 -0.000915527C4.91294 -0.000915527 5.71122 0.894854 6.08645 1.64531C6.28878 2.05181 6.38811 2.45647 6.43593 2.75813H8.7572C10.5451 2.75813 12 4.21306 12 6.00092V8.75997C12 9.88198 11.3231 12.0009 8.75904 12.0009V11.9991ZM6.48191 3.72195V8.75813C6.48191 8.99173 6.55549 11.0353 8.75904 11.0353C9.70448 11.0353 10.3722 10.66 10.7419 9.92244C11.027 9.3504 11.0362 8.76549 11.0362 8.75813V5.99908C11.0362 4.74464 10.0153 3.72195 8.75904 3.72195H6.48375H6.48191ZM3.24096 0.96291C1.03924 0.96291 0.965665 3.00644 0.963826 3.24004C0.963826 4.49449 1.98467 5.51533 3.24096 5.51533H5.51625V3.2382C5.51625 3.00644 5.43532 0.961071 3.24096 0.961071V0.96291Z" fill="url(#paint0_linear_238_2402)"/> <defs> <linearGradient id="paint0_linear_238_2402" x1="6" y1="11.9991" x2="6" y2="-0.00275473" gradientUnits="userSpaceOnUse"> <stop stop-color="#443092"/> <stop offset="1" stop-color="#8044FF"/> </linearGradient> </defs> </svg> <span class="lui-token__text">bil-handling-prod</span> <div class="lui-token__actions"> </div> </span> </div> </div> <div class="lui-log lui-log--error" data-controller="log" data-log-expanded-copy-text-value="Expand" data-log-collapsed-copy-text-value="Collapse"> <div class="lui-log__main"> <div class="lui-log__main-header"> <span class="text-secondary-xs-normal text-secondary-xs-regular text-gray-700">00:45h</span> <span class="text-secondary-xs-medium">Jackelyn Rippin</span> </div> <div class="lui-log__content" data-log-target="content"> <div class="lui-log__word">log </div> <div class="lui-log__word">10: </div> <div class="lui-log__word">Error: </div> <div class="lui-log__word">Enim </div> <div class="lui-log__word">quisquam </div> <div class="lui-log__word">corporis </div> <div class="lui-log__word">maxime.</div> </div> <div class="lui-log__buttons"></div> </div> <div class="lui-log__source"> <span id="lui-token_604451979" class="lui-token lui-entity-token lui-entity-token-general " style="color: #212529; background-color: #F8F9FA;"> <svg height="12" width="12" viewBox="0 0 12 12"> <path d="M7.92298 12H1.15375V8.30769C1.15375 7.26974 1.58452 6.33026 2.2758 5.65949C1.91068 5.53641 1.50862 5.32923 1.16606 4.98872C0.647086 4.4718 0.384521 3.77641 0.384521 2.92308C0.384521 0.777436 2.13221 0 3.3076 0H5.61529C7.2276 0 8.53837 1.31077 8.53837 2.92308V4.66872C9.84914 4.8841 11.6153 5.81128 11.6153 8.30769C11.6153 9.38872 11.285 10.2667 10.6327 10.9169C9.56196 11.9836 8.01324 12 7.92298 12ZM2.38452 10.7692H7.92298C8.17529 10.7692 10.3845 10.6872 10.3845 8.30769C10.3845 5.92821 8.17734 5.84821 7.92093 5.84615H4.84606C3.48811 5.84615 2.38452 6.94974 2.38452 8.30769V10.7692ZM3.3076 1.23077C3.3076 1.23077 2.83785 1.23897 2.39888 1.47077C1.8717 1.74769 1.61529 2.22154 1.61529 2.92308C1.61529 3.62462 1.8717 4.10256 2.39683 4.37949C2.8358 4.60923 3.3035 4.61538 3.30965 4.61538H7.3076V2.92308C7.3076 1.98974 6.54862 1.23077 5.61529 1.23077H3.3076Z" fill="url(#paint0_linear_238_804)"/> <defs> <linearGradient id="paint0_linear_238_804" x1="6.00093" y1="12" x2="6.00093" y2="0" gradientUnits="userSpaceOnUse"> <stop stop-color="#FFAA38"/> <stop offset="1" stop-color="#FFCB33"/> </linearGradient> </defs> </svg> <span class="lui-token__text">bil-handling-prod</span> <div class="lui-token__actions"> </div> </span> </div> </div> <div class="lui-log lui-log--error" data-controller="log" data-log-expanded-copy-text-value="Expand" data-log-collapsed-copy-text-value="Collapse"> <div class="lui-log__main"> <div class="lui-log__main-header"> <span class="text-secondary-xs-normal text-secondary-xs-regular text-gray-700">00:12h</span> <span class="text-secondary-xs-medium">Jutta Bradtke VM</span> </div> <div class="lui-log__content" data-log-target="content"> <div class="lui-log__word">log </div> <div class="lui-log__word">11: </div> <div class="lui-log__word">Error: </div> <div class="lui-log__word">Beatae </div> <div class="lui-log__word">dicta </div> <div class="lui-log__word">eveniet </div> <div class="lui-log__word">atque.</div> </div> <div class="lui-log__buttons"></div> </div> <div class="lui-log__source"> <span id="lui-token_4888336179" class="lui-token lui-entity-token lui-entity-token-general " style="color: #212529; background-color: #F8F9FA;"> <img class="lui-token__icon-img" src="neutral"> <span class="lui-token__text">System</span> <div class="lui-token__actions"> </div> </span> </div> </div> </div> <div class="lui-log_list__group"> <div class="lui-log_list__group__date"> 06-12-2025 </div> <div class="lui-log lui-log--error" data-controller="log" data-log-expanded-copy-text-value="Expand" data-log-collapsed-copy-text-value="Collapse"> <div class="lui-log__main"> <div class="lui-log__main-header"> <span class="text-secondary-xs-normal text-secondary-xs-regular text-gray-700">22:43h</span> <span class="text-secondary-xs-medium">Salvador Murray</span> </div> <div class="lui-log__content" data-log-target="content"> <div class="lui-log__word">log </div> <div class="lui-log__word">12: </div> <div class="lui-log__word">Error: </div> <div class="lui-log__word">Provident </div> <div class="lui-log__word">nihil </div> <div class="lui-log__word">molestiae </div> <div class="lui-log__word">commodi.</div> </div> <div class="lui-log__buttons"></div> </div> <div class="lui-log__source"> <span id="lui-token_2221008637" class="lui-token lui-entity-token lui-entity-token-general " style="color: #212529; background-color: #F8F9FA;"> <svg height="12" width="12" viewBox="0 0 12 12"> <path d="M8.75904 11.9991C7.80809 11.9991 7.0374 11.7103 6.46904 11.1401C5.5236 10.191 5.51625 8.81515 5.51809 8.75629V6.481H3.24096C1.4531 6.481 0 5.02606 0 3.24004C0 3.18302 0.00551777 1.80718 0.95095 0.858066C1.51931 0.287864 2.29001 -0.000915527 3.24096 -0.000915527C4.91294 -0.000915527 5.71122 0.894854 6.08645 1.64531C6.28878 2.05181 6.38811 2.45647 6.43593 2.75813H8.7572C10.5451 2.75813 12 4.21306 12 6.00092V8.75997C12 9.88198 11.3231 12.0009 8.75904 12.0009V11.9991ZM6.48191 3.72195V8.75813C6.48191 8.99173 6.55549 11.0353 8.75904 11.0353C9.70448 11.0353 10.3722 10.66 10.7419 9.92244C11.027 9.3504 11.0362 8.76549 11.0362 8.75813V5.99908C11.0362 4.74464 10.0153 3.72195 8.75904 3.72195H6.48375H6.48191ZM3.24096 0.96291C1.03924 0.96291 0.965665 3.00644 0.963826 3.24004C0.963826 4.49449 1.98467 5.51533 3.24096 5.51533H5.51625V3.2382C5.51625 3.00644 5.43532 0.961071 3.24096 0.961071V0.96291Z" fill="url(#paint0_linear_238_2402)"/> <defs> <linearGradient id="paint0_linear_238_2402" x1="6" y1="11.9991" x2="6" y2="-0.00275473" gradientUnits="userSpaceOnUse"> <stop stop-color="#443092"/> <stop offset="1" stop-color="#8044FF"/> </linearGradient> </defs> </svg> <span class="lui-token__text">bil-validation-prod</span> <div class="lui-token__actions"> </div> </span> </div> </div> <div class="lui-log" data-controller="log" data-log-expanded-copy-text-value="Expand" data-log-collapsed-copy-text-value="Collapse"> <div class="lui-log__main"> <div class="lui-log__main-header"> <span class="text-secondary-xs-normal text-secondary-xs-regular text-gray-700">21:02h</span> <span class="text-secondary-xs-medium">Phuong Graham III</span> </div> <div class="lui-log__content" data-log-target="content"> <div class="lui-log__word">log </div> <div class="lui-log__word">13: </div> <div class="lui-log__word">Export </div> <div class="lui-log__word">completed </div> <div class="lui-log__word">with </div> <div class="lui-log__word">619 </div> <div class="lui-log__word">records</div> </div> <div class="lui-log__expand-content" data-log-target="expand"> <div class="lui-log__expand-inner"> <div class="lui-log__word">Email </div> <div class="lui-log__word">sent </div> <div class="lui-log__word">to </div> <div class="lui-log__word">ilda@bogisich.example</div> </div> </div> <div class="lui-log__buttons"> <button class="lui-button lui-button--neutral--secondary lui-button--size-tiny w-fit w-fit" data-controller="lui--button" data-action="click->log#showMore:prevent log:toggleExpand->lui--button#rotateLeadingIcon" data-log-target="toggleExpand"> <i class="lui-button__icon lui-button__icon--tiny fa-regular fa-chevron-down" data-lui--button-target="leadingIcon"></i> <span class="lui-button__text" data-lui--button-target="text"> Expand </span> </button> </div> </div> <div class="lui-log__source"> <span id="lui-token_72784905" class="lui-token lui-entity-token lui-entity-token-general " style="color: #212529; background-color: #F8F9FA;"> <img class="lui-token__icon-img" src="neutral"> <span class="lui-token__text">bil-validation-prod</span> <div class="lui-token__actions"> </div> </span> </div> </div> <div class="lui-log lui-log--error" data-controller="log" data-log-expanded-copy-text-value="Expand" data-log-collapsed-copy-text-value="Collapse"> <div class="lui-log__main"> <div class="lui-log__main-header"> <span class="text-secondary-xs-normal text-secondary-xs-regular text-gray-700">20:57h</span> <span class="text-secondary-xs-medium">Willy Considine</span> </div> <div class="lui-log__content" data-log-target="content"> <div class="lui-log__word">log </div> <div class="lui-log__word">14: </div> <div class="lui-log__word">Error: </div> <div class="lui-log__word">Et </div> <div class="lui-log__word">eius </div> <div class="lui-log__word">ea </div> <div class="lui-log__word">repellendus.</div> </div> <div class="lui-log__buttons"></div> </div> <div class="lui-log__source"> <span id="lui-token_8754634251" class="lui-token lui-entity-token lui-entity-token-general " style="color: #212529; background-color: #F8F9FA;"> <img class="lui-token__icon-img" src="neutral"> <span class="lui-token__text">bil-validation-prod</span> <div class="lui-token__actions"> </div> </span> </div> </div> </div> <div class="lui-log_list__pagination"> <span class="lui-pagination" data-controller="lui--pagination"> <button class="lui-button lui-button--neutral--secondary lui-button--size-small lui-button--disabled w-fit w-fit" data-controller="lui--button" disabled="disabled"> <i class="lui-button__icon lui-button__icon--small fa-regular fa-chevron-left" data-lui--button-target="leadingIcon"></i> </button> <a class="lui-pagination__item lui-pagination__item--active" disabled="disabled">1</a> <a href="/lookbook/inspect/log_list/manual?page=2" class="lui-pagination__item" disabled="disabled">2</a> <a class="lui-button lui-button--neutral--secondary lui-button--size-small w-fit w-fit" data-controller="lui--button" href="/lookbook/inspect/log_list/manual?page=2" disabled="disabled"> <i class="lui-button__icon lui-button__icon--small fa-regular fa-chevron-right" data-lui--button-target="leadingIcon"></i> </a> </span> </div></turbo-frame>LogList
Description
Related components
| Used Components | Components where is Used |
|---|---|
| Label |
Usage rules
- ✅ Do
- ❌ Don't
<% def generate_random_log_data date = DateTime.now + rand(0..23).hours + rand(0..59).minutes error = [true, false].sample author = [Faker::Name.name, nil].sample app_kinds = ["submission", "validation", "handling", "neutral"] app_names = ["bil-submission-prod", "bil-validation-prod", "bil-handling-prod", "System"] app_instance = { "name" => app_names.sample, "kind" => app_kinds.sample } messages = [ "Item transitioned from <b>Draft</b> to <b>Submitted</b>.", "Protocol Answers saved.", "Email sent to #{Faker::Internet.email}", "Item Value's Status updated from draft to waiting_agreement.", "Validation completed successfully.", "File uploaded: #{Faker::File.file_name}", "User #{Faker::Name.name} logged in", "Export completed with #{rand(10..1000)} records", "Synchronization with external system completed", "Backup created successfully" ] extra_messages = [ "Item transitioned from <b>Draft</b> to <b>Submitted</b>.", "Protocol Answers saved.", "Email sent to #{Faker::Internet.email}", "Item Value's Status updated from draft to waiting_agreement.", "Validation completed successfully.", "File uploaded: #{Faker::File.file_name}", "User #{Faker::Name.name} logged in", "Export completed with #{rand(10..1000)} records", "Synchronization with external system completed", "Backup created successfully" ] { date: date, author: author, app_instance: app_instance, message: error ? "Error: #{Faker::Lorem.sentence}" : messages.sample, error: error, extra_message: rand(0..3) == 0 ? extra_messages.sample : nil } end logs = (25).times.map { generate_random_log_data }.sort_by { |log| log[:date] }.reverse logs = logs.map.with_index do |log_data, i| # Create individual Log components log = LooposUi::Log.new( error: log_data[:error], user: log_data[:author], date: log_data[:date] ) log.with_content("log #{i}: #{log_data[:message]}") # Add source based on app_instance app_instance = log_data[:app_instance] if app_instance[:kind] == "neutral" log.with_entity_token_source(text: app_instance[:name], color: :general) else log.with_source(entity: LooposUi::Entities::AppInstance.from_hash(app_instance)) end log.with_expand_content(log_data[:extra_message]) if log_data[:extra_message] log end per_page = 15 page = params.fetch("page", 1).to_i total_logs = logs.size logs = logs.sort_by(&:date).reverse logs = logs.slice((page - 1) * per_page, per_page)%><h1>Note: this example requires manual pagination, sorting and log building. It's not recommended, you should use the factory methods instead.</h1><br><%= render LooposUi::LogList.new( id: "preview-log-list", pagination: { page: page, items: per_page, count: total_logs }, logs: logs) %>No notes provided.
No params configured.
Description
LogList is a component for displaying chronological logs in a grouped, paginated format. It automatically groups logs by date and provides built-in pagination support. The component can work with various data sources through its factory system.
Arguments
| Property | Default | Required | Description |
|---|---|---|---|
id |
"lui-log-list-{id}" |
✓ | Unique identifier for the component |
logs |
[] |
Array of LooposUi::Log objects to display |
|
items |
nil |
Enumerable of items to convert to logs using a factory | |
factory |
nil |
Factory class to convert items to logs (must inherit from LooposUi::Log::Factories::Base) |
|
path |
nil |
URL path for pagination links | |
config |
Config.new.to_h |
Configuration object for component behavior. Applicable only for from_any_source method. |
|
pagy |
nil |
Pagy object for pagination. Prefer over pagination. |
|
pagination |
nil |
Pagination parameters hash |
Configuration Options
The config option accepts a LogList::Config object with the following attributes:
| Attribute | Type | Default | Description |
|---|---|---|---|
max_items |
Integer |
15 |
Maximum number of logs to display |
sort_direction |
Symbol |
:desc |
Sort direction (:asc or :desc) |
has_pagination |
Boolean |
true |
Whether to show pagination controls |
Usage
There are three ways to use the LogList component:
- using the factory
from_any_sourcemethod - passing
items:and an optionalfactory:arguments - passing in a
logs:list with pre-builtLogcomponents
These examples are ordered in order of preference, complexity, convenience and control.
You probably want to use the from_any_source factory method.
LooposUI comes with two built-in factories:
CoreItemLogListPresenterHashfor hash data from core item log presenters.ScriptforLoopOs::Scriptobjects.
You can read more in the Factory System section.
Using the factory from_any_source method
Automatically detects and uses the appropriate factory for a given data source.
This usage already takes care of pagination, but you must pass the page parameter.
Otherwise, the component will render without pagination.
You can also pass a config: hash to configure the component.
This usage does not require ordering or pagination, it will be done automatically.
# Automatically detects the right factoryrender LooposUi::LogList.from_any_source( source: my_data_source, id: "auto-detected-logs", config: { max_items: 20 }, page: params[:page] || 1)# With custom retry path for script logs using ScriptProxyscript_proxy = LoopOs::Scripts::ScriptProxy.new(@loop_os_script, context: { retry_path_proc: ->(script_log) { rerun_script_script_path(@loop_os_script, script_log_id: script_log.id) }})render LooposUi::LogList.from_any_source( source: script_proxy, id: "script-logs", config: { max_items: 15 }, page: params[:page] || 1)Note: The ScriptProxy approach provides a clean separation of concerns. The proxy encapsulates the retry functionality and is passed as context to individual log entries, allowing the factories to remain unaware of specific implementation details.
Passing items: and an optional factory: arguments
Use when you have a collection of items that need to be converted to logs.
The items are expected to be paginated and sorted.
Not passing in pagination parameters will disable pagination.
The LogList will attempt to detect an usable factory, but you can use your own with the factory: option.
# With automatic factory detectionrender LooposUi::LogList.new( id: "item-logs", items: Item.all, path: some_path_that_renders_this_list)# With custom factoryrender LooposUi::LogList.new( id: "custom-logs", items: MyCustomModel.all, factory: MyCustomFactory, path: some_path_that_renders_this_list)Passing in a logs: list with pre-built Log components
Use when you already have LooposUi::Log objects ready to display, or want to build them without
creating a factory.
This usage also expects the logs to be paginated and sorted.
Not passing in pagination parameters will disable pagination.
logs = [ LooposUi::Log.new(date: Time.current, user: "John Doe", error: false).with_content("Item created"), LooposUi::Log.new(date: 1.day.ago, user: "Jane Smith", error: true).with_content("Error occurred")]render LooposUi::LogList.new( id: "my-logs", logs: logs,)Factory System
The LogList component uses a factory system to convert different data sources into LooposUi::ListLog objects.
Similar to the LooposUi::Log component, the factory system is used to create the log lists.
It expects a source object, and returns a LooposUi::ListLog object.
Built-in Factories
LooposUi comes with two built-in factories, which already handle pagination and sorting.
- CoreItemLogListPresenterHash: Handles hash data from one core item log presenter.
Source: (Core)
Item.log_presenter.view_logsis an example of such data. - Script: Handles
LoopOs::Script(source) objects
Controller Usage
class ItemsController < ApplicationController def logs pagy, logs = pagy( SomeLog.where(item: @item).order(created_at: :desc), page: params[:page], items: 15 ) render LooposUi::LogList.new( id: "item-#{@item.id}-logs", logs: logs, pagy: pagy, path: item_logs_path(@item) ) endendPerformance Considerations
Warnings
The component will log warnings in the following scenarios:
- Missing Path: When
pathis not provided, pagination will use the current path. - Too Many Logs: When more than
config.max_itemslogs are passed, performance may be impacted. Ensure to paginate the data.
Error Handling
The component includes a NilLog constant that represents a failed log creation, displaying "Failed to show this log." when errors occur during initialization.
- If
createraises an exception, it returnsLooposUi::Log::NilLog - In development mode, exceptions are re-raised for debugging
- Errors are logged for production debugging