@thebase/ui
Version:
CDN-installable Owl and Bootstrap 5 UI component library.
2,394 lines • 103 kB
text/xml
<templates>
<t t-name="baseui.alert-dialog">
<div b-ui="alert-dialog">
<div b-alert-dialog-panel="">
<t t-esc="props.content"/>
</div>
</div>
</t>
<t t-name="baseui.AlertDialog">
<t t-slot="default"/>
</t>
<t t-name="AlertDialog" t-call="baseui.AlertDialog"/>
<t t-name="baseui.AlertDialogTrigger">
<Button variant="'outline'" attrs="attrs" className="'bu-alert-dialog-trigger'" style="props.style" onClick="() => this.onClick()">
<t t-slot="default"/>
</Button>
</t>
<t t-name="AlertDialogTrigger" t-call="baseui.AlertDialogTrigger"/>
<t t-name="baseui.AlertDialogContent">
<div t-if="open" data-slot="alert-dialog-overlay" class="bu-dialog-backdrop" t-ref="root" role="alertdialog" aria-modal="true" tabindex="-1" t-on-keydown="onKeyDown">
<div data-slot="alert-dialog-content" t-att-data-size="size" t-att-class="'bu-dialog-panel bu-alert-dialog-panel' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<t t-slot="default"/>
</div>
</div>
</t>
<t t-name="AlertDialogContent" t-call="baseui.AlertDialogContent"/>
<t t-name="baseui.AlertDialogHeader">
<div data-slot="alert-dialog-header" class="bu-dialog-header bu-alert-dialog-header" t-att-style="props.style">
<t t-slot="default"/>
</div>
</t>
<t t-name="AlertDialogHeader" t-call="baseui.AlertDialogHeader"/>
<t t-name="baseui.AlertDialogFooter">
<div data-slot="alert-dialog-footer" class="bu-dialog-footer bu-alert-dialog-footer" t-att-style="props.style">
<t t-slot="default"/>
</div>
</t>
<t t-name="AlertDialogFooter" t-call="baseui.AlertDialogFooter"/>
<t t-name="baseui.AlertDialogMedia">
<div data-slot="alert-dialog-media" class="bu-alert-dialog-media" t-att-style="props.style">
<t t-slot="default"/>
</div>
</t>
<t t-name="AlertDialogMedia" t-call="baseui.AlertDialogMedia"/>
<t t-name="baseui.AlertDialogTitle">
<h2 data-slot="alert-dialog-title" class="bu-dialog-title bu-alert-dialog-title" t-att-style="props.style">
<t t-slot="default"/>
</h2>
</t>
<t t-name="AlertDialogTitle" t-call="baseui.AlertDialogTitle"/>
<t t-name="baseui.AlertDialogDescription">
<p data-slot="alert-dialog-description" class="bu-dialog-description bu-alert-dialog-description" t-att-style="props.style">
<t t-slot="default"/>
</p>
</t>
<t t-name="AlertDialogDescription" t-call="baseui.AlertDialogDescription"/>
<t t-name="baseui.AlertDialogCancel">
<Button variant="'outline'" attrs="attrs" className="'bu-alert-dialog-cancel'" style="props.style" onClick="() => this.onClick()">
<t t-slot="default"/>
</Button>
</t>
<t t-name="AlertDialogCancel" t-call="baseui.AlertDialogCancel"/>
<t t-name="baseui.AlertDialogAction">
<Button attrs="attrs" className="'bu-alert-dialog-action'" style="props.style" onClick="() => this.onClick()">
<t t-slot="default"/>
</Button>
</t>
<t t-name="AlertDialogAction" t-call="baseui.AlertDialogAction"/>
<t t-name="baseui.alert">
<div class="alert bu-alert bu-alert-default" role="alert"><t t-esc="props.message"/></div>
</t>
<t t-name="baseui.Alert">
<div data-slot="alert" t-att-class="classNames" t-att-style="props.style" role="alert" t-ref="root">
<t t-slot="default"/>
<Button t-if="props.dismissible" unstyled="true" className="'btn-close'" attrs="{ 'data-bs-dismiss': 'alert', 'aria-label': 'Close' }"/>
</div>
</t>
<t t-name="Alert" t-call="baseui.Alert"/>
<t t-name="baseui.AlertTitle">
<div data-slot="alert-title" t-att-class="'bu-alert-title' + (props.className ? ' ' + props.className : '')" t-att-style="props.style"><t t-slot="default"/></div>
</t>
<t t-name="AlertTitle" t-call="baseui.AlertTitle"/>
<t t-name="baseui.AlertDescription">
<div data-slot="alert-description" t-att-class="'bu-alert-description' + (props.className ? ' ' + props.className : '')" t-att-style="props.style"><t t-slot="default"/></div>
</t>
<t t-name="AlertDescription" t-call="baseui.AlertDescription"/>
<t t-name="baseui.AlertAction">
<div data-slot="alert-action" t-att-class="'bu-alert-action' + (props.className ? ' ' + props.className : '')" t-att-style="props.style"><t t-slot="default"/></div>
</t>
<t t-name="AlertAction" t-call="baseui.AlertAction"/>
<t t-name="baseui.accordion">
<div b-ui="accordion"><t t-slot="default"/></div>
</t>
<t t-name="baseui.Accordion">
<div data-slot="accordion" t-att-class="'bu-accordion' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" role="presentation">
<t t-slot="default"/>
</div>
</t>
<t t-name="Accordion" t-call="baseui.Accordion"/>
<t t-name="baseui.AccordionItem">
<div data-slot="accordion-item" class="bu-accordion-item" t-att-style="props.style"><t t-slot="default"/></div>
</t>
<t t-name="AccordionItem" t-call="baseui.AccordionItem"/>
<t t-name="baseui.AccordionTrigger">
<div class="bu-accordion-header" t-att-style="props.style">
<Button unstyled="true" className="'bu-accordion-trigger'" attrs="triggerAttrs" onClick="() => this.onClick()">
<t t-slot="default"/>
<Icon name="'chevron-down'" className="'bu-accordion-trigger-icon'"/>
</Button>
</div>
</t>
<t t-name="AccordionTrigger" t-call="baseui.AccordionTrigger"/>
<t t-name="baseui.AccordionContent">
<div t-ref="root" data-slot="accordion-content" t-att-class="'collapse bu-accordion-content' + (initialOpen ? ' show' : '')" t-att-style="props.style" t-att-aria-hidden="open ? undefined : 'true'">
<div class="bu-accordion-content-inner"><t t-slot="default"/></div>
</div>
</t>
<t t-name="AccordionContent" t-call="baseui.AccordionContent"/>
<t t-name="baseui.aspect-ratio">
<div b-ui="aspect-ratio"><t t-esc="props.content"/></div>
</t>
<t t-name="baseui.AspectRatio">
<div t-att-class="classNames" t-att-style="style"><t t-slot="default"/></div>
</t>
<t t-name="AspectRatio" t-call="baseui.AspectRatio"/>
<t t-name="baseui.attachment">
<div class="bu-attachment"/>
</t>
<t t-name="baseui.Attachment">
<div
t-att-class="classNames"
t-att-data-state="state"
t-att-data-size="size"
t-att-data-orientation="orientation"
data-slot="attachment"
t-att-style="props.style"
>
<t t-if="hasContent" t-slot="default"/>
<input t-else="" type="file" class="form-control" t-att-multiple="props.multiple" t-on-change="onChange"/>
</div>
</t>
<t t-name="baseui.AttachmentMedia">
<div t-att-class="classNames" t-att-data-variant="variant" data-slot="attachment-media" t-att-style="props.style"><t t-slot="default"/></div>
</t>
<t t-name="baseui.AttachmentContent">
<div t-att-class="'bu-attachment-content' + (props.className ? ' ' + props.className : '')" data-slot="attachment-content" t-att-style="props.style"><t t-slot="default"/></div>
</t>
<t t-name="baseui.AttachmentTitle">
<div t-att-class="'bu-attachment-title' + (props.className ? ' ' + props.className : '')" data-slot="attachment-title" t-att-style="props.style"><t t-slot="default"/></div>
</t>
<t t-name="baseui.AttachmentDescription">
<div t-att-class="'bu-attachment-description' + (props.className ? ' ' + props.className : '')" data-slot="attachment-description" t-att-style="props.style"><t t-slot="default"/></div>
</t>
<t t-name="baseui.AttachmentActions">
<div t-att-class="'bu-attachment-actions' + (props.className ? ' ' + props.className : '')" data-slot="attachment-actions" t-att-style="props.style"><t t-slot="default"/></div>
</t>
<t t-name="baseui.AttachmentAction">
<Button
variant="variant"
size="size"
type="props.type || 'button'"
disabled="props.disabled"
label="props.label"
className="className"
aria-label="ariaLabel"
style="props.style"
attrs="{'data-slot': 'attachment-action'}"
onClick="(event) => this.onClick(event)"
><t t-slot="default"/></Button>
</t>
<t t-name="baseui.AttachmentTrigger">
<Button
unstyled="true"
href="props.href"
type="props.type || 'button'"
className="classNames"
aria-label="ariaLabel"
style="props.style"
attrs="{'data-slot': 'attachment-trigger', 'target': props.target, 'rel': props.rel || (props.target === '_blank' ? 'noreferrer' : undefined)}"
onClick="(event) => this.onClick(event)"
/>
</t>
<t t-name="baseui.AttachmentGroup">
<div t-att-class="classNames" data-slot="attachment-group" t-att-style="props.style"><t t-slot="default"/></div>
</t>
<t t-name="baseui.AttachmentDropzone">
<div
t-att-class="classNames"
data-slot="attachment-dropzone"
t-att-style="props.style"
t-on-dragover="onDragOver"
t-on-dragleave="onDragLeave"
t-on-drop="onDrop"
t-on-click="openPicker"
>
<input
type="file"
class="visually-hidden"
t-att-multiple="props.multiple"
t-att-disabled="props.disabled"
t-ref="fileInput"
tabindex="-1"
t-on-change="onInputChange"
/>
<t t-if="hasContent" t-slot="default"/>
<t t-else="">
<p class="bu-attachment-dropzone-hint">Drag and drop a file here, or click to browse.</p>
</t>
</div>
</t>
<t t-name="Attachment" t-call="baseui.Attachment"/>
<t t-name="AttachmentMedia" t-call="baseui.AttachmentMedia"/>
<t t-name="AttachmentContent" t-call="baseui.AttachmentContent"/>
<t t-name="AttachmentTitle" t-call="baseui.AttachmentTitle"/>
<t t-name="AttachmentDescription" t-call="baseui.AttachmentDescription"/>
<t t-name="AttachmentActions" t-call="baseui.AttachmentActions"/>
<t t-name="AttachmentAction" t-call="baseui.AttachmentAction"/>
<t t-name="AttachmentTrigger" t-call="baseui.AttachmentTrigger"/>
<t t-name="AttachmentGroup" t-call="baseui.AttachmentGroup"/>
<t t-name="AttachmentDropzone" t-call="baseui.AttachmentDropzone"/>
<t t-name="baseui.avatar">
<span class="bu-avatar"><t t-out="props.content"/></span>
</t>
<t t-name="baseui.Avatar">
<span t-att-class="'bu-avatar' + (props.className ? ' ' + props.className : '')" t-att-title="props.title" t-att-style="props.style">
<img t-if="showImage" t-att-src="props.src" t-att-alt="props.alt" t-on-error="onError"/>
<t t-if="!showImage" t-slot="fallback"/>
</span>
</t>
<t t-name="Avatar" t-call="baseui.Avatar"/>
<t t-name="baseui.Badge">
<span t-att-class="classNames" t-att-style="props.style">
<t t-if="props.label" t-esc="props.label"/>
<t t-else="" t-slot="default"/>
</span>
</t>
<t t-name="Badge" t-call="baseui.Badge"/>
<t t-name="baseui.BlockViewer">
<t t-if="state.embed">
<div class="bu-block-embed-root" t-ref="embedRoot"></div>
</t>
<t t-else="">
<div class="bu-block-viewer">
<t t-call="baseui.BlockViewerNav"/>
<div class="bu-block-viewer-shell">
<header class="bu-block-viewer-header">
<div class="bu-block-viewer-title">
<a href="/blocks" class="bu-block-muted">Blocks</a>
<h1 t-esc="title"/>
<p t-esc="description"/>
</div>
<div class="bu-block-viewer-actions">
<Button variant="'outline'" type="'button'" ariaPressed="state.mode === 'preview' ? 'true' : 'false'" onClick="() => this.setMode('preview')">
<Icon name="'eye'"/>
Preview
</Button>
<Button variant="'outline'" type="'button'" ariaPressed="state.mode === 'code' ? 'true' : 'false'" onClick="() => this.setMode('code')">
<Icon name="'code'"/>
Code
</Button>
<Button variant="'ghost'" type="'button'" className="'bu-icon-button'" ariaLabel="'Desktop preview'" ariaPressed="state.viewport === 'desktop' ? 'true' : 'false'" onClick="() => this.setViewport('desktop')">
<Icon name="'monitor'"/>
</Button>
<Button variant="'ghost'" type="'button'" className="'bu-icon-button'" ariaLabel="'Tablet preview'" ariaPressed="state.viewport === 'tablet' ? 'true' : 'false'" onClick="() => this.setViewport('tablet')">
<Icon name="'tablet'"/>
</Button>
<Button variant="'ghost'" type="'button'" className="'bu-icon-button'" ariaLabel="'Mobile preview'" ariaPressed="state.viewport === 'mobile' ? 'true' : 'false'" onClick="() => this.setViewport('mobile')">
<Icon name="'smartphone'"/>
</Button>
<Button variant="'outline'" type="'button'" onClick="() => this.copyCode()">
<Icon name="'copy'"/>
<span t-esc="state.copyLabel"/>
</Button>
</div>
</header>
<main class="bu-block-viewer-main">
<section t-att-class="state.mode === 'code' ? 'bu-block-preview-panel is-hidden' : 'bu-block-preview-panel'">
<div class="bu-block-preview-frame" t-att-style="previewStyle" t-ref="previewFrame"></div>
</section>
<section t-att-class="state.mode === 'code' ? 'bu-block-code-panel is-active' : 'bu-block-code-panel'">
<div class="bu-block-code-toolbar" role="group" aria-label="Code source">
<Button variant="'ghost'" type="'button'" ariaPressed="state.codeVariant === 'owl' ? 'true' : 'false'" onClick="() => this.setCodeVariant('owl')">
Pure Owl Component
</Button>
<Button variant="'ghost'" type="'button'" ariaPressed="state.codeVariant === 'template' ? 'true' : 'false'" onClick="() => this.setCodeVariant('template')">
Template
</Button>
</div>
<pre class="bu-block-code" t-esc="activeCode"/>
</section>
</main>
</div>
</div>
</t>
</t>
<t t-name="baseui.BlockViewerNav">
<header class="bu-example-header">
<nav class="container bu-example-nav" aria-label="BaseUI pages">
<a class="navbar-brand fw-semibold text-decoration-none bu-example-brand" href="/docs">BaseUI</a>
<div class="bu-example-nav-menu" aria-label="BaseUI pages">
<a t-foreach="navItems" t-as="item" t-key="item.key" t-att-href="item.href" t-att-class="item.key === 'blocks' ? 'is-active' : ''" t-att-aria-current="item.key === 'blocks' ? 'page' : undefined">
<t t-esc="item.label"/>
</a>
</div>
<ThemeButton variant="'outline'" storageKey="'bu-example-theme'"/>
</nav>
</header>
</t>
<t t-name="BlockViewer" t-call="baseui.BlockViewer"/>
<t t-name="baseui.breadcrumb">
<nav b-ui="breadcrumb" aria-label="breadcrumb"><ol><t t-slot="default"/></ol></nav>
</t>
<t t-name="baseui.Breadcrumb">
<nav
data-slot="breadcrumb"
t-att-class="'bu-breadcrumb' + (props.className ? ' ' + props.className : '')"
aria-label="breadcrumb"
t-att-style="props.style"
>
<t t-slot="default"/>
</nav>
</t>
<t t-name="Breadcrumb" t-call="baseui.Breadcrumb"/>
<t t-name="baseui.BreadcrumbList">
<ol
data-slot="breadcrumb-list"
t-att-class="'breadcrumb bu-breadcrumb-list' + (props.className ? ' ' + props.className : '')"
t-att-style="props.style"
>
<t t-slot="default"/>
</ol>
</t>
<t t-name="BreadcrumbList" t-call="baseui.BreadcrumbList"/>
<t t-name="baseui.BreadcrumbItem">
<li data-slot="breadcrumb-item" t-att-class="classNames" t-att-aria-current="props.current ? 'page' : undefined" t-att-style="props.style">
<t t-slot="default"/>
</li>
</t>
<t t-name="BreadcrumbItem" t-call="baseui.BreadcrumbItem"/>
<t t-name="baseui.BreadcrumbLink">
<a
data-slot="breadcrumb-link"
t-att-href="props.href || '#'"
t-att-target="props.target"
t-att-rel="props.rel"
t-att-class="classNames"
t-att-style="props.style"
t-on-click="onClick"
>
<t t-slot="default"/>
</a>
</t>
<t t-name="BreadcrumbLink" t-call="baseui.BreadcrumbLink"/>
<t t-name="baseui.BreadcrumbPage">
<span
data-slot="breadcrumb-page"
role="link"
aria-disabled="true"
aria-current="page"
t-att-class="classNames"
t-att-style="props.style"
>
<t t-slot="default"/>
</span>
</t>
<t t-name="BreadcrumbPage" t-call="baseui.BreadcrumbPage"/>
<t t-name="baseui.BreadcrumbSeparator">
<li
data-slot="breadcrumb-separator"
role="presentation"
aria-hidden="true"
t-att-class="classNames"
t-att-style="props.style"
>
<t t-if="hasCustomContent" t-slot="default"/>
<Icon t-else="" name="'chevron-right'" className="'bu-breadcrumb-separator-icon'"/>
</li>
</t>
<t t-name="BreadcrumbSeparator" t-call="baseui.BreadcrumbSeparator"/>
<t t-name="baseui.BreadcrumbEllipsis">
<span
data-slot="breadcrumb-ellipsis"
role="presentation"
aria-hidden="true"
t-att-class="classNames"
t-att-style="props.style"
>
<t t-if="hasCustomContent" t-slot="default"/>
<Icon t-else="" name="'ellipsis'" className="'bu-breadcrumb-ellipsis-icon'"/>
<span class="visually-hidden">More</span>
</span>
</t>
<t t-name="BreadcrumbEllipsis" t-call="baseui.BreadcrumbEllipsis"/>
<t t-name="baseui.bubble"><div b-ui="bubble"><t t-esc="props.content"/></div></t>
<t t-name="baseui.Bubble">
<div t-att-class="classNames" t-att-data-side="side" t-att-style="props.style" role="listitem"><t t-slot="default"/></div>
</t>
<t t-name="Bubble" t-call="baseui.Bubble"/>
<t t-name="baseui.Button">
<a
t-if="props.href"
t-ref="root"
t-att-class="classNames"
t-att-href="props.href"
data-slot="button"
t-att-id="props.id"
t-att-title="props.title"
t-att-aria-label="ariaLabel"
t-att-aria-pressed="ariaPressed"
t-att-aria-invalid="ariaInvalid"
t-att-aria-disabled="props.disabled ? 'true' : undefined"
t-att-data-icon-only="isIconOnly ? 'true' : undefined"
t-att-data-icon="props.icon ? 'inline-' + iconPosition : undefined"
t-att-style="props.style"
t-att="props.attrs || {}"
t-on-click="onClick"
>
<Icon t-if="props.icon && iconPosition !== 'end'" name="props.icon"/>
<span t-if="props.label" t-esc="props.label"/>
<t t-else="" t-slot="default"/>
<Icon t-if="props.icon && iconPosition === 'end'" name="props.icon"/>
</a>
<button
t-else=""
t-ref="root"
t-att-class="classNames"
t-att-type="props.type || 'button'"
data-slot="button"
t-att-disabled="props.disabled"
t-att-id="props.id"
t-att-title="props.title"
t-att-aria-label="ariaLabel"
t-att-aria-pressed="ariaPressed"
t-att-aria-invalid="ariaInvalid"
t-att-data-icon-only="isIconOnly ? 'true' : undefined"
t-att-data-icon="props.icon ? 'inline-' + iconPosition : undefined"
t-att-style="props.style"
t-att="props.attrs || {}"
t-on-click="onClick"
>
<Icon t-if="props.icon && iconPosition !== 'end'" name="props.icon"/>
<span t-if="props.label" t-esc="props.label"/>
<t t-else="" t-slot="default"/>
<Icon t-if="props.icon && iconPosition === 'end'" name="props.icon"/>
</button>
</t>
<t t-name="Button" t-call="baseui.Button"/>
<t t-name="baseui.button-group">
<div b-ui="button-group"><t t-slot="default"/></div>
</t>
<t t-name="baseui.ButtonGroup">
<div
t-att-class="classNames"
t-att-aria-label="ariaLabel"
t-att-aria-labelledby="ariaLabelledby"
t-att-style="props.style"
role="group"
><t t-slot="default"/></div>
</t>
<t t-name="baseui.ButtonGroupSeparator">
<span
t-att-class="classNames"
t-att-data-orientation="orientation"
t-att-style="props.style"
role="separator"
></span>
</t>
<t t-name="baseui.ButtonGroupText">
<span t-att-class="classNames" t-att-style="props.style"><t t-slot="default"/></span>
</t>
<t t-name="ButtonGroup" t-call="baseui.ButtonGroup"/>
<t t-name="ButtonGroupSeparator" t-call="baseui.ButtonGroupSeparator"/>
<t t-name="ButtonGroupText" t-call="baseui.ButtonGroupText"/>
<t t-name="baseui.calendar">
<div class="bu-calendar"/>
</t>
<t t-name="baseui.Calendar">
<div t-att-class="'bu-calendar' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<div class="bu-calendar__header"><t t-esc="headerLabel"/></div>
<div class="bu-calendar__weekdays">
<span t-foreach="weekdays" t-as="weekday" t-key="weekday" t-esc="weekday"/>
</div>
<div class="bu-calendar__grid">
<t t-foreach="days" t-as="cell" t-key="cell_index">
<span t-if="!cell"/>
<Button
t-else=""
unstyled="true"
attrs="{ 'aria-pressed': cell.selected ? 'true' : 'false' }"
onClick="() => this.onSelect(cell.value)"
>
<t t-esc="cell.day"/>
</Button>
</t>
</div>
</div>
</t>
<t t-name="Calendar" t-call="baseui.Calendar"/>
<t t-name="baseui.Card">
<div t-tag="tag" t-att-class="'card bu-card' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<t t-slot="default"/>
</div>
</t>
<t t-name="Card" t-call="baseui.Card"/>
<t t-name="baseui.CardHeader">
<div t-att-class="'card-header' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<t t-slot="default"/>
</div>
</t>
<t t-name="CardHeader" t-call="baseui.CardHeader"/>
<t t-name="baseui.CardBody">
<div t-att-class="'card-body' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<t t-slot="default"/>
</div>
</t>
<t t-name="CardBody" t-call="baseui.CardBody"/>
<t t-name="baseui.CardFooter">
<div t-att-class="'card-footer' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<t t-slot="default"/>
</div>
</t>
<t t-name="CardFooter" t-call="baseui.CardFooter"/>
<t t-name="baseui.CardTitle">
<h3 t-att-class="'card-title' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<t t-slot="default"/>
</h3>
</t>
<t t-name="CardTitle" t-call="baseui.CardTitle"/>
<t t-name="baseui.CardDescription">
<p t-att-class="'card-text text-body-secondary' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<t t-slot="default"/>
</p>
</t>
<t t-name="CardDescription" t-call="baseui.CardDescription"/>
<t t-name="baseui.carousel">
<div class="bu-carousel"/>
</t>
<t t-name="baseui.Carousel">
<div t-ref="root" t-att-class="'bu-carousel carousel slide' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<div class="carousel-inner">
<t t-slot="default"/>
</div>
</div>
</t>
<t t-name="Carousel" t-call="baseui.Carousel"/>
<t t-name="baseui.CarouselSlide">
<div t-ref="root" t-att-class="'bu-carousel-slide carousel-item' + (initialActive ? ' active' : '')" t-att-style="props.style"><t t-slot="default"/></div>
</t>
<t t-name="CarouselSlide" t-call="baseui.CarouselSlide"/>
<t t-name="baseui.CarouselPrevious">
<Button unstyled="true" className="'bu-carousel-prev'" style="props.style" onClick="() => this.onClick()"><t t-slot="default"/></Button>
</t>
<t t-name="CarouselPrevious" t-call="baseui.CarouselPrevious"/>
<t t-name="baseui.CarouselNext">
<Button unstyled="true" className="'bu-carousel-next'" style="props.style" onClick="() => this.onClick()"><t t-slot="default"/></Button>
</t>
<t t-name="CarouselNext" t-call="baseui.CarouselNext"/>
<t t-name="baseui.chart">
<div class="bu-chart"/>
</t>
<t t-name="baseui.Chart">
<div
b-ui="chart"
t-att-b-att-variant="props.variant"
t-att-b-att-type="props.type"
t-att-class="classNames"
t-att-style="props.style"
><t t-slot="default"/></div>
</t>
<t t-name="Chart" t-call="baseui.Chart"/>
<t t-name="baseui.checkbox">
<label b-ui="checkbox"><input type="checkbox"/><t t-slot="default"/></label>
</t>
<t t-name="baseui.Checkbox">
<label t-att-class="'form-check bu-check ' + (props.className || '')" t-att-style="props.style">
<input
type="checkbox"
class="form-check-input"
t-att-checked="props.checked"
t-att-disabled="props.disabled"
t-att-id="props.id"
t-on-change="onChange"
/>
<t t-slot="default"/>
</label>
</t>
<t t-name="Checkbox" t-call="baseui.Checkbox"/>
<t t-name="baseui.ClipboardButton">
<Button
unstyled="true"
className="classNames"
style="props.style"
disabled="props.disabled"
ariaLabel="ariaLabel"
attrs="attrs"
icon="iconName"
label="label"
onClick="(event) => this.onClick(event)"
>
<t t-slot="default"/>
</Button>
</t>
<t t-name="ClipboardButton" t-call="baseui.ClipboardButton"/>
<t t-name="baseui.collapsible">
<div b-ui="collapsible"><t t-slot="default"/></div>
</t>
<t t-name="baseui.Collapsible">
<div t-att-class="'bu-collapsible' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<t t-slot="default"/>
</div>
</t>
<t t-name="Collapsible" t-call="baseui.Collapsible"/>
<t t-name="baseui.CollapsibleTrigger">
<Button unstyled="true" className="'bu-collapsible-trigger'" style="props.style" attrs="attrs" onClick="() => this.onClick()">
<t t-slot="default"/>
</Button>
</t>
<t t-name="CollapsibleTrigger" t-call="baseui.CollapsibleTrigger"/>
<t t-name="baseui.CollapsibleContent">
<div t-ref="root" t-att-class="'collapse bu-collapsible-content' + (initialOpen ? ' show' : '')" t-att-style="props.style" t-att-aria-hidden="open ? undefined : 'true'">
<t t-slot="default"/>
</div>
</t>
<t t-name="CollapsibleContent" t-call="baseui.CollapsibleContent"/>
<t t-name="baseui.combobox">
<div class="bu-combobox"/>
</t>
<t t-name="baseui.Combobox">
<div t-att-class="'bu-combobox' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" t-ref="root">
<input
class="form-control"
role="combobox"
t-att-id="props.id"
t-att-aria-expanded="disclosure.open ? 'true' : 'false'"
t-att-placeholder="props.placeholder"
t-att-value="state.query"
t-on-input="onInput"
t-on-focus="onFocus"
/>
<div t-if="disclosure.open" class="bu-combobox-list" role="listbox">
<div
t-foreach="filteredOptions"
t-as="option"
t-key="option.value"
role="option"
class="bu-combobox-option"
t-on-click="() => this.choose(option)"
>
<t t-esc="option.label"/>
</div>
</div>
</div>
</t>
<t t-name="Combobox" t-call="baseui.Combobox"/>
<t t-name="baseui.command">
<div b-ui="command" class="bu-command"/>
</t>
<t t-name="baseui.Command">
<div t-att-class="'bu-command' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" role="dialog">
<input class="form-control" t-att-placeholder="props.placeholder" t-on-input="onInput"/>
<div class="bu-command-list">
<div
t-foreach="filteredItems"
t-as="item"
t-key="item.value"
class="bu-command-item"
t-on-click="() => this.select(item)"
>
<t t-esc="item.label"/>
</div>
</div>
</div>
</t>
<t t-name="Command" t-call="baseui.Command"/>
<t t-name="baseui.context-menu">
<div class="bu-context-menu"/>
</t>
<t t-name="baseui.ContextMenu">
<t t-slot="default"/>
</t>
<t t-name="ContextMenu" t-call="baseui.ContextMenu"/>
<t t-name="baseui.ContextMenuTrigger">
<div class="bu-context-menu-trigger" t-on-contextmenu="onContextMenu">
<t t-slot="default"/>
</div>
</t>
<t t-name="ContextMenuTrigger" t-call="baseui.ContextMenuTrigger"/>
<t t-name="baseui.ContextMenuContent">
<div t-if="open" class="bu-context-menu-content" role="menu" t-att-style="style" t-ref="root">
<t t-slot="default"/>
</div>
</t>
<t t-name="ContextMenuContent" t-call="baseui.ContextMenuContent"/>
<t t-name="baseui.ContextMenuItem">
<div class="bu-context-menu-item" role="menuitem" tabindex="0" t-on-click="onClick">
<t t-slot="default"/>
</div>
</t>
<t t-name="ContextMenuItem" t-call="baseui.ContextMenuItem"/>
<t t-name="baseui.data-table">
<div class="bu-data-table"/>
</t>
<t t-name="baseui.DataTable.Table">
<div class="bu-data-table__viewport" t-att-style="viewportStyle">
<table class="table bu-data-table__table">
<thead>
<tr>
<th t-if="hasSelection" class="bu-data-table__selection-cell">
<input
type="checkbox"
class="form-check-input"
aria-label="Select all rows"
t-att-checked="pageRows.length && pageRows.every((row, index) => this.isSelected(row, index))"
t-on-change="(event) => this.toggleAllVisible(event.target.checked)"
/>
</th>
<th
t-foreach="visibleColumns"
t-as="column"
t-key="column.key"
t-att-class="column.align === 'right' ? 'text-end' : column.align === 'center' ? 'text-center' : ''"
t-att-b-att-sort="state.sortKey === column.key ? (state.sortDir === 1 ? 'asc' : 'desc') : undefined"
>
<Button
t-if="isColumnSortable(column)"
unstyled="true"
className="'bu-data-table__header-button'"
onClick="() => this.sortBy(column.key)"
>
<span><t t-esc="columnLabel(column)"/></span>
<span class="bu-data-table__sort-icon" t-att-data-icon="sortIcon(column.key)" aria-hidden="true"></span>
</Button>
<t t-else="" t-esc="columnLabel(column)"/>
</th>
<th t-if="rowActions.length" class="bu-data-table__actions-cell"><span class="visually-hidden">Actions</span></th>
</tr>
</thead>
<tbody>
<tr t-if="!pageRows.length">
<td t-att-colspan="visibleColumns.length + (hasSelection ? 1 : 0) + (rowActions.length ? 1 : 0)" class="bu-data-table__empty">
<t t-esc="emptyLabel"/>
</td>
</tr>
<tr
t-foreach="pageRows"
t-as="row"
t-key="rowKey(row, row_index)"
t-att-data-state="isSelected(row, row_index) ? 'selected' : undefined"
>
<td t-if="hasSelection" class="bu-data-table__selection-cell">
<input
type="checkbox"
class="form-check-input"
aria-label="Select row"
t-att-checked="isSelected(row, row_index)"
t-on-change="(event) => this.toggleRow(row, row_index, event.target.checked)"
/>
</td>
<td
t-foreach="visibleColumns"
t-as="column"
t-key="column.key"
t-att-class="column.align === 'right' ? 'text-end' : column.align === 'center' ? 'text-center' : ''"
>
<t t-if="column.component">
<t t-component="column.component" t-props="cellComponentProps(row, column)"/>
</t>
<span t-else="" t-att-class="column.format === 'currency' ? 'bu-data-table__money' : ''"><t t-esc="cellValue(row, column)"/></span>
</td>
<td t-if="rowActions.length" class="bu-data-table__actions-cell">
<div class="bu-data-table__actions">
<Button variant="'ghost'" size="'icon'" icon="'ellipsis'" aria-label="'Open menu'" onClick="(event) => this.toggleRowActions(row, row_index, event)"/>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</t>
<t t-name="baseui.DataTable">
<div t-att-class="classNames" t-att-style="props.style" data-slot="data-table">
<div class="bu-data-table__toolbar" t-if="hasSearch || hasColumnToggle || hasToolbarActions">
<input
t-if="hasSearch"
type="search"
class="form-control bu-data-table__search"
t-att-placeholder="filterPlaceholder"
t-att-value="state.query"
t-on-input="onSearchInput"
/>
<div t-if="hasColumnToggle || hasToolbarActions" class="bu-data-table__toolbar-end">
<t t-if="hasToolbarActions" t-slot="toolbarActions"/>
<div t-if="hasColumnToggle" class="bu-data-table__columns">
<Button variant="'outline'" label="'Columns'" icon="'chevron-down'" iconPosition="'end'" aria-label="'Toggle columns'" onClick="() => this.toggleColumnsMenu()"/>
<div t-if="state.columnsOpen" class="bu-data-table__columns-menu" role="menu" data-state="open">
<label
t-foreach="columns.filter((column) => column.hideable !== false)"
t-as="column"
t-key="column.key"
class="bu-data-table__columns-item"
>
<input
type="checkbox"
class="form-check-input"
t-att-checked="!state.hiddenColumns.includes(column.key)"
t-on-change="() => this.toggleColumn(column.key)"
/>
<span><t t-esc="columnLabel(column)"/></span>
</label>
</div>
</div>
</div>
</div>
<t t-call="baseui.DataTable.Table"/>
<t t-call="baseui.DataTable.Cards"/>
<div class="bu-data-table__pagination" t-if="hasPagination">
<div class="bu-data-table__selection-summary">
<t t-esc="selectionLabel"/>
</div>
<div class="bu-data-table__pager">
<div t-if="pageSizeOptions.length" class="bu-data-table__page-size">
<span>Rows per page</span>
<select class="form-select form-select-sm" t-on-change="(event) => this.setPageSize(event.target.value)">
<option t-foreach="pageSizeOptions" t-as="option" t-key="option" t-att-value="optionValue(option)" t-att-selected="option === state.pageSize"><t t-esc="option"/></option>
</select>
</div>
<div class="bu-data-table__page-label"><t t-esc="pageLabel"/></div>
<Button variant="'outline'" size="'sm'" label="'Previous'" aria-label="'Go to previous page'" disabled="!canPreviousPage" onClick="() => this.setPage(state.page - 1)"/>
<Button variant="'outline'" size="'sm'" label="'Next'" aria-label="'Go to next page'" disabled="!canNextPage" onClick="() => this.setPage(state.page + 1)"/>
</div>
</div>
<div t-if="openRowAction" t-portal="'body'" class="bu-data-table__actions-menu" role="menu" data-state="open" t-att-style="state.actionMenuStyle" t-ref="actionsMenu">
<Button
t-foreach="rowActions"
t-as="action"
t-key="action.label"
unstyled="true"
className="'bu-data-table__actions-item'"
attrs="{ role: 'menuitem' }"
onClick="() => this.onAction(action, openRowAction.row, openRowAction.index)"
>
<t t-esc="action.label"/>
</Button>
</div>
</div>
</t>
<t t-name="DataTable" t-call="baseui.DataTable"/>
<t t-name="baseui.DataTable.Cards">
<div class="bu-data-table__cards">
<div t-if="!pageRows.length" class="bu-data-table__empty-card">
<t t-esc="emptyLabel"/>
</div>
<div
t-foreach="pageRows"
t-as="row"
t-key="rowKey(row, row_index)"
class="bu-data-table__card"
t-att-data-state="isSelected(row, row_index) ? 'selected' : undefined"
>
<div class="bu-data-table__card-header" t-if="hasSelection || rowActions.length">
<input
t-if="hasSelection"
type="checkbox"
class="form-check-input"
aria-label="Select row"
t-att-checked="isSelected(row, row_index)"
t-on-change="(event) => this.toggleRow(row, row_index, event.target.checked)"
/>
<div t-if="rowActions.length" class="bu-data-table__actions">
<Button variant="'ghost'" size="'icon'" icon="'ellipsis'" aria-label="'Open menu'" onClick="(event) => this.toggleRowActions(row, row_index, event)"/>
</div>
</div>
<div class="bu-data-table__card-field" t-foreach="visibleColumns" t-as="column" t-key="column.key">
<span class="bu-data-table__card-label"><t t-esc="columnLabel(column)"/></span>
<span class="bu-data-table__card-value">
<t t-if="column.component">
<t t-component="column.component" t-props="cellComponentProps(row, column)"/>
</t>
<span t-else="" t-att-class="column.format === 'currency' ? 'bu-data-table__money' : ''"><t t-esc="cellValue(row, column)"/></span>
</span>
</div>
</div>
</div>
</t>
<t t-name="baseui.date-picker">
<input class="form-control" type="date"/>
</t>
<t t-name="baseui.DatePicker">
<input
type="date"
t-att-class="classNames"
t-att-style="props.style"
t-att-value="props.value"
t-att-disabled="props.disabled"
t-on-input="onInput"
/>
</t>
<t t-name="DatePicker" t-call="baseui.DatePicker"/>
<t t-name="baseui.Dialog">
<div data-slot="dialog" t-att-style="props.style">
<t t-slot="default"/>
</div>
</t>
<t t-name="Dialog" t-call="baseui.Dialog"/>
<t t-name="baseui.DialogTrigger">
<span class="bu-dialog-trigger" data-slot="dialog-trigger" t-att-style="props.style" t-on-click="onClick">
<t t-slot="default"/>
</span>
</t>
<t t-name="DialogTrigger" t-call="baseui.DialogTrigger"/>
<t t-name="baseui.DialogContent">
<div t-ref="root" class="modal fade bu-dialog-backdrop" data-slot="dialog-overlay" tabindex="-1" aria-hidden="true" t-att-style="props.style">
<div class="modal-dialog modal-dialog-centered">
<div t-att-class="'modal-content bu-dialog-panel' + (props.className ? ' ' + props.className : '')" data-slot="dialog-content">
<t t-slot="default"/>
<Button
t-if="showCloseButton"
variant="'ghost'"
size="'icon-sm'"
className="'bu-dialog-close bu-dialog-close-control'"
aria-label="'Close'"
icon="'x'"
attrs="{'data-slot': 'dialog-close', 'data-bs-dismiss': 'modal'}"
>
<span class="visually-hidden">Close</span>
</Button>
</div>
</div>
</div>
</t>
<t t-name="DialogContent" t-call="baseui.DialogContent"/>
<t t-name="baseui.DialogHeader">
<div t-att-class="'bu-dialog-header' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" data-slot="dialog-header">
<t t-slot="default"/>
</div>
</t>
<t t-name="DialogHeader" t-call="baseui.DialogHeader"/>
<t t-name="baseui.DialogFooter">
<div t-att-class="'bu-dialog-footer' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" data-slot="dialog-footer">
<t t-slot="default"/>
</div>
</t>
<t t-name="DialogFooter" t-call="baseui.DialogFooter"/>
<t t-name="baseui.DialogTitle">
<h2 t-att-class="'bu-dialog-title' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" data-slot="dialog-title">
<t t-slot="default"/>
</h2>
</t>
<t t-name="DialogTitle" t-call="baseui.DialogTitle"/>
<t t-name="baseui.DialogDescription">
<p t-att-class="'bu-dialog-description' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" data-slot="dialog-description">
<t t-slot="default"/>
</p>
</t>
<t t-name="DialogDescription" t-call="baseui.DialogDescription"/>
<t t-name="baseui.DialogClose">
<Button
variant="'outline'"
className="'bu-dialog-close' + (props.className ? ' ' + props.className : '')"
style="props.style"
attrs="{'data-slot': 'dialog-close', 'data-bs-dismiss': 'modal'}"
>
<t t-slot="default"/>
</Button>
</t>
<t t-name="DialogClose" t-call="baseui.DialogClose"/>
<t t-name="baseui.direction"><div b-ui="direction"><t t-esc="props.content"/></div></t>
<t t-name="baseui.Direction">
<div t-att-class="'bu-direction' + (props.className ? ' ' + props.className : '')" t-att-dir="dir" t-att-style="props.style"><t t-slot="default"/></div>
</t>
<t t-name="Direction" t-call="baseui.Direction"/>
<t t-name="baseui.drawer"><div b-ui="drawer"><div b-drawer-panel=""><t t-esc="props.content"/></div></div></t>
<t t-name="baseui.Drawer"><t t-slot="default"/></t>
<t t-name="Drawer" t-call="baseui.Drawer"/>
<t t-name="baseui.DrawerTrigger">
<Button variant="'outline'" className="'bu-drawer-trigger'" style="props.style" onClick="() => this.onClick()"><t t-slot="default"/></Button>
</t>
<t t-name="DrawerTrigger" t-call="baseui.DrawerTrigger"/>
<t t-name="baseui.DrawerContent">
<div t-ref="root" class="offcanvas offcanvas-bottom bu-drawer-overlay" tabindex="-1" t-att-style="props.style">
<div class="bu-drawer-panel">
<t t-slot="default"/>
</div>
</div>
</t>
<t t-name="DrawerContent" t-call="baseui.DrawerContent"/>
<t t-name="baseui.DrawerHeader"><div class="bu-drawer-header" t-att-style="props.style"><t t-slot="default"/></div></t>
<t t-name="DrawerHeader" t-call="baseui.DrawerHeader"/>
<t t-name="baseui.DrawerFooter"><div class="bu-drawer-footer" t-att-style="props.style"><t t-slot="default"/></div></t>
<t t-name="DrawerFooter" t-call="baseui.DrawerFooter"/>
<t t-name="baseui.DrawerTitle"><h2 class="bu-drawer-title" t-att-style="props.style"><t t-slot="default"/></h2></t>
<t t-name="DrawerTitle" t-call="baseui.DrawerTitle"/>
<t t-name="baseui.DrawerDescription"><p class="bu-drawer-description" t-att-style="props.style"><t t-slot="default"/></p></t>
<t t-name="DrawerDescription" t-call="baseui.DrawerDescription"/>
<t t-name="baseui.DrawerClose">
<Button variant="'outline'" attrs="attrs" className="'bu-drawer-close'" style="props.style"><t t-slot="default"/></Button>
</t>
<t t-name="DrawerClose" t-call="baseui.DrawerClose"/>
<t t-name="baseui.dropdown-menu">
<div b-ui="dropdown-menu">
<button b-dropdown-trigger="" type="button"><t t-esc="props.label"/></button>
<div b-dropdown-menu=""><t t-slot="default"/></div>
</div>
</t>
<t t-name="baseui.DropdownMenu">
<div data-slot="dropdown-menu" t-att-class="'bu-dropdown-menu dropdown' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" t-ref="root">
<t t-slot="default"/>
</div>
</t>
<t t-name="DropdownMenu" t-call="baseui.DropdownMenu"/>
<t t-name="baseui.DropdownMenuTrigger">
<Button unstyled="true" getRef="getRef" className="classNames" style="props.style" attrs="attrs" onClick="() => this.onClick()">
<t t-slot="default"/>
</Button>
</t>
<t t-name="DropdownMenuTrigger" t-call="baseui.DropdownMenuTrigger"/>
<t t-name="baseui.DropdownMenuContent">
<div data-slot="dropdown-menu-content" t-att-class="classNames" t-att-style="props.style" role="menu" t-att-data-state="open ? 'open' : 'closed'" data-side="bottom" tabindex="-1">
<t t-slot="default"/>
</div>
</t>
<t t-name="DropdownMenuContent" t-call="baseui.DropdownMenuContent"/>
<t t-name="baseui.DropdownMenuGroup">
<div data-slot="dropdown-menu-group" role="group" t-att-class="props.className" t-att-style="props.style">
<t t-slot="default"/>
</div>
</t>
<t t-name="DropdownMenuGroup" t-call="baseui.DropdownMenuGroup"/>
<t t-name="baseui.DropdownMenuLabel">
<div data-slot="dropdown-menu-label" t-att-data-inset="props.inset ? '' : undefined" t-att-class="'bu-dropdown-menu-label' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<t t-slot="default"/>
</div>
</t>
<t t-name="DropdownMenuLabel" t-call="baseui.DropdownMenuLabel"/>
<t t-name="baseui.DropdownMenuItem">
<div data-slot="dropdown-menu-item" t-att-data-inset="props.inset ? '' : undefined" t-att-data-variant="variant" t-att-aria-disabled="props.disabled ? 'true' : undefined" t-att-class="'bu-dropdown-menu-item' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" role="menuitem" tabindex="0" t-on-click="onClick">
<t t-slot="default"/>
</div>
</t>
<t t-name="DropdownMenuItem" t-call="baseui.DropdownMenuItem"/>
<t t-name="baseui.DropdownMenuCheckboxItem">
<div data-slot="dropdown-menu-checkbox-item" t-att-data-inset="props.inset ? '' : undefined" t-att-data-checked="props.checked ? '' : undefined" t-att-aria-checked="props.checked ? 'true' : 'false'" t-att-aria-disabled="props.disabled ? 'true' : undefined" t-att-class="'bu-dropdown-menu-checkbox-item' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" role="menuitemcheckbox" tabindex="0" t-on-click="onClick">
<span data-slot="dropdown-menu-checkbox-item-indicator" class="bu-dropdown-menu-item-indicator">
<Icon t-if="props.checked" name="'check'"/>
</span>
<t t-slot="default"/>
</div>
</t>
<t t-name="DropdownMenuCheckboxItem" t-call="baseui.DropdownMenuCheckboxItem"/>
<t t-name="baseui.DropdownMenuRadioGroup">
<div data-slot="dropdown-menu-radio-group" role="group" t-att-class="props.className" t-att-style="props.style">
<t t-slot="default"/>
</div>
</t>
<t t-name="DropdownMenuRadioGroup" t-call="baseui.DropdownMenuRadioGroup"/>
<t t-name="baseui.DropdownMenuRadioItem">
<div data-slot="dropdown-menu-radio-item" t-att-data-inset="props.inset ? '' : undefined" t-att-data-checked="checked ? '' : undefined" t-att-aria-checked="checked ? 'true' : 'false'" t-att-aria-disabled="props.disabled ? 'true' : undefined" t-att-class="'bu-dropdown-menu-radio-item' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" role="menuitemradio" tabindex="0" t-on-click="onClick">
<span data-slot="dropdown-menu-radio-item-indicator" class="bu-dropdown-menu-item-indicator">
<Icon t-if="checked" name="'check'"/>
</span>
<t t-slot="default"/>
</div>
</t>
<t t-name="DropdownMenuRadioItem" t-call="baseui.DropdownMenuRadioItem"/>
<t t-name="baseui.DropdownMenuSeparator">
<div data-slot="dropdown-menu-separator" class="bu-dropdown-menu-separator" t-att-style="props.style" role="separator"/>
</t>
<t t-name="DropdownMenuSeparator" t-call="baseui.DropdownMenuSeparator"/>
<t t-name="baseui.DropdownMenuShortcut">
<span data-slot="dropdown-menu-shortcut" t-att-class="'bu-dropdown-menu-shortcut' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<t t-slot="default"/>
</span>
</t>
<t t-name="DropdownMenuShortcut" t-call="baseui.DropdownMenuShortcut"/>
<t t-name="baseui.DropdownMenuSub">
<div data-slot="dropdown-menu-sub" class="bu-dropdown-menu-sub" t-att-style="props.style" t-ref="root" t-on-mouseleave="env.dropdownSubClose">
<t t-slot="default"/>
</div>
</t>
<t t-name="DropdownMenuSub" t-call="baseui.DropdownMenuSub"/>
<t t-name="baseui.DropdownMenuSubTrigger">
<div data-slot="dropdown-menu-sub-trigger" t-att-data-inset="props.inset ? '' : undefined" t-att-data-state="env.dropdownSub.open ? 'open' : 'closed'" t-att-aria-expanded="env.dropdownSub.open ? 'true' : 'false'" t-att-aria-disabled="props.disabled ? 'true' : undefined" t-att-class="'bu-dropdown-menu-sub-trigger' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" role="menuitem" tabindex="0" aria-haspopup="menu" t-on-mouseenter="onMouseEnter" t-on-focus="onMouseEnter" t-on-click="onClick">
<t t-slot="default"/>
<Icon name="'chevron-right'" className="'bu-dropdown-menu-sub-trigger-icon'"/>
</div>
</t>
<t t-name="DropdownMenuSubTrigger" t-call="baseui.DropdownMenuSubTrigger"/>
<t t-name="baseui.DropdownMenuSubContent">
<div t-if="open" data-slot="dropdown-menu-sub-content" t-att-class="'bu-dropdown-menu-sub-content' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" role="menu" data-state="open" data-side="right" tabindex="-1">
<t t-slot="default"/>
</div>
</t>
<t t-name="DropdownMenuSubContent" t-call="baseui.DropdownMenuSubContent"/>
<t t-name="baseui.empty">
<div b-ui="empty"><t t-slot="default"/></div>
</t>
<t t-name="baseui.Empty">
<div t-att-class="classNames" t-att-style="props.style" role="status"><t t-slot="default"/></div>
</t>
<t t-name="baseui.EmptyHeader">
<div t-att-class="'bu-empty-header' + (props.className ? ' ' + props.className : '')" t-att-style="props.style"><t t-slot="default"/></div>
</t>
<t t-name="baseui.EmptyMedia">
<div t-att-class="classNames" t-att-data-variant="variant" t-att-style="props.style"><t t-slot="default"/></div>
</t>
<t t-name="baseui.EmptyTitle">
<div t-att-class="'bu-empty-title' + (props.className ? ' ' + props.className : '')" t-att-style="props.style"><t t-slot="default"/></div>
</t>
<t t-name="baseui.EmptyDescription">
<div t-att-class="'bu-empty-description' + (props.className ? ' ' + props.className : '')" t-att-style="props.style"><t t-slot="default"/></div>
</t>
<t t-name="baseui.EmptyContent">
<div t-att-class="'bu-empty-content' + (props.className ? ' ' + props.className : '')" t-att-style="props.style"><t t-slot="default"/></div>
</t>
<t t-name="Empty" t-call="baseui.Empty"/>
<t t-name="EmptyHeader" t-call="baseui.EmptyHeader"/>
<t t-name="EmptyMedia" t-call="baseui.EmptyMedia"/>
<t t-name="EmptyTitle" t-call="baseui.EmptyTitle"/>
<t t-name="EmptyDescription" t-call="baseui.EmptyDescription"/>
<t t-name="EmptyContent" t-call="baseui.EmptyContent"/>
<t t-name="baseui.field">
<div b-ui="field" class="bu-field" role="group"><t t-slot="default"/></div>
</t>
<t t-name="baseui.FieldSet">
<fieldset t-att-class="classNames" t-att-style="props.style" data-slot="field-set">
<t t-slot="default"/>
</fieldset>
</t>
<t t-name="FieldSet" t-call="baseui.FieldSet"/>
<t t-name="baseui.FieldLegend">
<legend t-att-class="classNames" t-att-style="props.style" data-slot="field-legend" t-att-data-variant="variant">
<t t-slot="default"/>
</legend>
</t>
<t t-name="FieldLegend" t-call="baseui.FieldLegend"/>
<t t-name="baseui.FieldGroup">
<div t-att-class="classNames" t-att-style="props.style" data-slot="field-group">
<t t-slot="default"/>
</div>
</t>
<t t-name="FieldGroup" t-call="baseui.FieldGroup"/>
<t t-name="baseui.Field">
<div
role="group"
data-slot="field"
t-att-data-orientation="orientation"
t-att-data-invalid="props.invalid ? 'true' : undefined"
t-att-class="classNames"
t-att-style="props.style"
>
<label t-if="props.label" class="bu-field-label" data-slot="field-label">
<t t-esc="props.label"/>
</label>
<t t-slot="default"/>
<div t-if="props.error" role="alert" class="bu-field-error" data-slot="field-error">
<t t-esc="props.error"/>
</div>
</div>
</t>
<t t-name="Field" t-call="baseui.Field"/>
<t t-name="baseui.FieldContent">
<div t-att-class="classNames" t-att-style="props.style" data-slot="field-content">
<t t-slot="default"/>
</div>
</t>
<t t-name="FieldContent" t-call="baseui.FieldContent"/>
<t t-name="baseui.FieldLabel">
<label t-att-class="classNames" t-att-style="props.style" t-att-for="props.for" data-slot="field-label">
<t t-slot="default"/>
</label>
</t>
<t t-name="FieldLabel" t-call="baseui.FieldLabel"/>
<t t-name="baseui.FieldTitle">
<div t-att-class="classNames" t-att-style="props.style" data-slot="field-label">
<t t-slot="default"/>
</div>
</t>
<t t-name="FieldTitle" t-call="baseui.FieldTitle"/>
<t t-name="baseui.FieldDescription">
<p t-att-class="classNames" t-att-style="props.style" data-slot="field-description">
<t t-slot="default"/>
</p>
</t>
<t t-name="FieldDescription" t-call="baseui.FieldDescription"/>
<t t-name="baseui.FieldSeparator">
<div t-att-class="classNames" t-att-style="props.style" data-slot="field-separator" t-att-data-content="hasContent ? 'true' : 'false'">
<span class="bu-field-separator-line" aria-hidden="true"></span>
<span t-if="hasContent" class="bu-field-separator-content" data-slot="field-separator-content">
<t t-slot="default"/>
</span>
</div>
</t>
<t t-name="FieldSeparator" t-call="baseui.FieldSeparator"/>
<t t-name="baseui.FieldError">
<div role="alert" t-att-class="classNames" t-att-style="props.style" data-slot="field-error">
<t t-if="props.message" t-esc="props.message"/>
<t t-else="" t-slot="default"/>
</div>
</t>
<t t-name="FieldError" t-call="baseui.FieldError"/>
<t t-name="baseui.Form">
<form t-att-class="classNames" t-att-style="props.style" data-slot="form" novalidate="novalidate" t-on-submit="submit">
<div class="bu-form-header">
<h3 class="bu-form-title">Bug Report</h3>
<p class="bu-form-description">Help us improve by reporting bugs you encounter.</p>
</div>
<FieldGroup className="'bu-form-fields'">
<Field invalid="titleInvalid">
<FieldLabel for="'bu-form-title'">Bug Title</FieldLabel>
<input
id="bu-form-title"
name="title"
class="form-control bu-form-control"
type="text"
t-att-placeholder="titlePlaceholder"
t-model="state.title"
autocomplete="off"
t-att-aria-invalid="titleInvalid ? 'true' : undefined"
/>
<FieldError t-if="titleInvalid" message="errors.title"/>
</Field>
<Field invalid="descriptionInvalid">
<FieldLabel for="'bu-form-description'">Description</FieldLabel>
<div class="bu-form-input-group" data-slot="input-group" role="group">
<textarea
id="bu-form-description"
name="description"
class="form-control bu-form-textarea"
rows="6"
t-att-placeholder="descriptionPlaceholder"
t-att-maxlength="maxDescriptionLength"
t-model="state.description"
t-att-aria-invalid="descriptionInvalid ? 'true' : undefined"
></textarea>
<div class="bu-form-counter" data-slot="input-group-addon" data-align="block-end">
<span class="bu-form-counter-text">
<t t-esc="descriptionLength"/>/<t t-esc="maxDescriptionLength"/> characters
</span>
</div>
</div>
<FieldDescription>Include steps to reproduce, expected behavior, and what actually happened.</FieldDescription>
<FieldError t-if="descriptionInvalid" message="errors.description"/>
</Field>
</FieldGroup>
<Field orientation="'horizontal'" className="'bu-form-actions'">
<Button type="'button'" variant="'outline'" onClick="() => this.reset()">Reset</Button>
<Button type="'submit'">Submit</Button>
</Field>
</form>
</t>
<t t-name="Form" t-call="baseui.Form"/>
<t t-name="baseui.hover-card"><span b-ui="hover-card"><t t-esc="props.content"/></span></t>
<t t-name="baseui.HoverCard">
<span
t-att-class="'bu-hover-card' + (props.className ? ' ' + props.className : '')"
t-att-style="props.style"
t-on-mouseenter="() => this.open()"
t-on-mouseleave="() => this.close()"
t-on-focusin="() => this.open()"
t-on-focusout="() => this.close()"
t-on-keydown="onKeyDown"
>
<t t-slot="default"/>
</span>
</t>
<t t-name="HoverCard" t-call="baseui.HoverCard"/>
<t t-name="baseui.HoverCardTrigger">
<span class="bu-hover-card-trigger" t-att-style="props.style" aria-haspopup="dialog"><t t-slot="default"/></span>
</t>
<t t-name="HoverCardTrigger" t-call="baseui.HoverCardTrigger"/>
<t t-name="baseui.HoverCardContent">
<span t-if="open" class="bu-hover-card-content" t-att-style="props.style" role="dialog"><t t-slot="default"/></span>
</t>
<t t-name="HoverCardContent" t-call="baseui.HoverCardContent"/>
<t t-name="baseui.Icon">
<span
t-att-b-icon="name"
t-att-class="classNames"
t-att-style="style"
t-att-title="props.title"
t-att-role="props.label ? 'img' : undefined"
t-att-aria-label="props.label || undefined"
t-att-aria-hidden="props.label ? undefined : 'true'"
></span>
</t>
<t t-name="Icon" t-call="baseui.Icon"/>
<t t-name="baseui.Input">
<input
t-att-class="classNames"
t-att-style="props.style"
t-att-type="props.type || 'text'"
t-att-placeholder="props.placeholder"
t-att-value="props.value"
t-att-disabled="props.disabled"
t-att-readonly="props.readonly"
t-att-id="props.id"
t-att-list="props.list"
t-att-autocomplete="props.autocomplete"
t-att-aria-label="ariaLabel"
t-att-min="props.min"
t-att-max="props.max"
t-att-step="props.step"
t-on-input="onInput"
t-on-change="onChange"
/>
</t>
<t t-name="Input" t-call="baseui.Input"/>
<t t-name="baseui.input-group"><div b-ui="input-group"><t t-esc="props.content"/></div></t>
<t t-name="baseui.InputGroup">
<div t-att-class="classNames" t-att-style="props.style" data-slot="input-group" role="group"><t t-slot="default"/></div>
</t>
<t t-name="baseui.InputGroupAddon">
<div
t-att-class="classNames"
t-att-style="props.style"
t-att-data-align="align"
data-slot="input-group-addon"
role="group"
t-on-click="onClick"
><t t-slot="default"/></div>
</t>
<t t-name="baseui.InputGroupButton">
<Button
unstyled="true"
className="classNames"
style="props.style"
type="props.type"
disabled="props.disabled"
label="props.label"
attrs="buttonAttrs"
onClick="(event) => this.onClick(event)"
><t t-slot="default"/></Button>
</t>
<t t-name="baseui.InputGroupText">
<span t-att-class="classNames" t-att-style="props.style" data-slot="input-group-text"><t t-slot="default"/></span>
</t>
<t t-name="baseui.InputGroupInput">
<input
t-att-id="props.id"
t-att-name="props.name"
t-att-autocomplete="props.autocomplete"
t-att-class="classNames"
t-att-style="props.style"
t-att-type="props.type || 'text'"
t-att-placeholder="props.placeholder"
t-att-value="props.value"
t-att-disabled="props.disabled"
t-att-readonly="props.readonly"
t-att-aria-invalid="props.invalid ? 'true' : undefined"
data-slot="input-group-control"
t-on-input="onInput"
t-on-change="onChange"
/>
</t>
<t t-name="baseui.InputGroupTextarea">
<textarea
t-att-class="classNames"
t-att-style="props.style"
t-att-placeholder="props.placeholder"
t-att-rows="props.rows"
t-att-disabled="props.disabled"
t-att-readonly="props.readonly"
t-att-value="props.value"
t-att-aria-invalid="props.invalid ? 'true' : undefined"
data-slot="input-group-control"
t-on-input="onInput"
t-on-change="onChange"
></textarea>
</t>
<t t-name="InputGroup" t-call="baseui.InputGroup"/>
<t t-name="InputGroupAddon" t-call="baseui.InputGroupAddon"/>
<t t-name="InputGroupButton" t-call="baseui.InputGroupButton"/>
<t t-name="InputGroupText" t-call="baseui.InputGroupText"/>
<t t-name="InputGroupInput" t-call="baseui.InputGroupInput"/>
<t t-name="InputGroupTextarea" t-call="baseui.InputGroupTextarea"/>
<t t-name="baseui.input-otp">
<div class="bu-input-otp"/>
</t>
<t t-name="baseui.InputOtp">
<div t-att-class="classNames" t-att-style="props.style" t-ref="root" t-on-paste="onPaste">
<input
t-foreach="boxes"
t-as="box"
t-key="box.index"
class="form-control"
inputmode="numeric"
maxlength="1"
t-att-value="box.value"
t-att-disabled="props.disabled"
t-on-input="(ev) => this.onInput(box.index, ev)"
/>
</div>
</t>
<t t-name="InputOtp" t-call="baseui.InputOtp"/>
<t t-name="baseui.item"><div b-ui="item"><t t-esc="props.content"/></div></t>
<t t-name="baseui.Item">
<div t-att-class="classNames" t-att-data-variant="variant" t-att-style="props.style"><t t-slot="default"/></div>
</t>
<t t-name="Item" t-call="baseui.Item"/>
<t t-name="baseui.kbd"><kbd b-ui="kbd"><t t-esc="props.content"/></kbd></t>
<t t-name="baseui.Kbd"><kbd t-att-class="classNames" t-att-style="props.style"><t t-slot="default"/></kbd></t>
<t t-name="Kbd" t-call="baseui.Kbd"/>
<t t-name="baseui.label">
<label b-ui="label"><t t-slot="default"/></label>
</t>
<t t-name="baseui.Label">
<label t-att-class="classNames" t-att-for="props.for" t-att-data-state="state" t-att-style="props.style">
<t t-slot="default"/>
</label>
</t>
<t t-name="Label" t-call="baseui.Label"/>
<t t-name="baseui.marker"><span b-ui="marker"><t t-esc="props.content"/></span></t>
<t t-name="baseui.Marker"><span t-att-class="classNames" t-att-data-variant="variant" t-att-style="props.style"><t t-slot="default"/></span></t>
<t t-name="Marker" t-call="baseui.Marker"/>
<t t-name="baseui.markdown">
<div class="bu-markdown"/>
</t>
<t t-name="baseui.Markdown">
<div t-ref="root" t-att-class="classNames" t-att-style="props.style" data-slot="markdown" t-att-data-status="state.status">
<div t-if="state.status === 'loading'" class="bu-markdown-loading" role="status">Loading…</div>
<div t-elif="state.status === 'error'" class="bu-markdown-error" role="alert">
<t t-esc="state.error"/>
</div>
<div
t-elif="props.editable"
t-ref="editor"
class="bu-markdown-editor"
data-slot="markdown-editor"
role="group"
t-att-aria-label="editorLabel"
/>
<t t-else="">
<div t-if="hasFrontmatterMeta" class="bu-markdown-meta">
<div t-if="state.frontmatter.authors and state.frontmatter.authors.length" class="bu-markdown-meta-authors">
By <t t-esc="state.frontmatter.authors.join(', ')"/>
</div>
<div t-if="state.frontmatter.tags and state.frontmatter.tags.length" class="bu-markdown-meta-tags">
<Badge t-foreach="state.frontmatter.tags" t-as="tag" t-key="tag" variant="'secondary'" pill="true"><t t-esc="tag"/></Badge>
</div>
</div>
<div t-out="state.html"/>
</t>
</div>
</t>
<t t-name="Markdown" t-call="baseui.Markdown"/>
<t t-name="baseui.MarkdownTree">
<div t-att-class="'bu-markdown-tree' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" data-slot="markdown-tree">
<div t-if="state.status === 'loading'" class="bu-markdown-tree-loading" role="status">Loading…</div>
<div t-elif="state.status === 'error'" class="bu-markdown-tree-error" role="alert">
<t t-esc="state.error"/>
</div>
<SidebarGroup t-else="">
<SidebarMenu>
<t t-foreach="state.tree.children || []" t-as="child" t-key="child.path || child.name">
<MarkdownTreeNode node="child" activePath="props.activePath" onSelect="props.onSelect"/>
</t>
</SidebarMenu>
</SidebarGroup>
</div>
</t>
<t t-name="MarkdownTree" t-call="baseui.MarkdownTree"/>
<t t-name="baseui.MarkdownTreeNode">
<t t-if="props.node.type === 'file'">
<t t-if="props.nested">
<DropdownMenuItem onClick="() => this.select(props.node.path)">
<t t-esc="label"/>
</DropdownMenuItem>
</t>
<t t-else="">
<SidebarMenuItem>
<SidebarMenuButton icon="'file-text'" active="props.activePath === props.node.path" onClick="() => this.select(props.node.path)">
<t t-esc="label"/>
</SidebarMenuButton>
</SidebarMenuItem>
</t>
</t>
<t t-elif="hasSubfolders">
<t t-if="props.nested">
<DropdownMenuSub>
<DropdownMenuSubTrigger><t t-esc="label"/></DropdownMenuSubTrigger>
<DropdownMenuSubContent>
<t t-foreach="props.node.children" t-as="child" t-key="child.path || child.name">
<MarkdownTreeNode node="child" activePath="props.activePath" onSelect="props.onSelect" nested="true"/>
</t>
</DropdownMenuSubContent>
</DropdownMenuSub>
</t>
<t t-else="">
<SidebarMenuItem>
<DropdownMenu>
<DropdownMenuTrigger className="'bu-sidebar-menu-button bu-markdown-tree-folder-trigger'"><Icon name="'folder'" className="'bu-sidebar-menu-icon'"/><span class="bu-sidebar-menu-label"><t t-esc="label"/></span><Icon name="'chevron-right'" className="'bu-markdown-tree-folder-trigger-icon'"/></DropdownMenuTrigger>
<DropdownMenuContent>
<t t-foreach="props.node.children" t-as="child" t-key="child.path || child.name">
<MarkdownTreeNode node="child" activePath="props.activePath" onSelect="props.onSelect" nested="true"/>
</t>
</DropdownMenuContent>
</DropdownMenu>
</SidebarMenuItem>
</t>
</t>
<t t-else="">
<t t-if="props.nested">
<DropdownMenuSub>
<DropdownMenuSubTrigger><t t-esc="label"/></DropdownMenuSubTrigger>
<DropdownMenuSubContent>
<t t-foreach="props.node.children" t-as="child" t-key="child.path || child.name">
<MarkdownTreeNode node="child" activePath="props.activePath" onSelect="props.onSelect" nested="true"/>
</t>
</DropdownMenuSubContent>
</DropdownMenuSub>
</t>
<t t-else="">
<div class="bu-markdown-tree-group">
<SidebarGroupLabel><t t-esc="label"/></SidebarGroupLabel>
<SidebarMenu>
<t t-foreach="props.node.children" t-as="child" t-key="child.path || child.name">
<MarkdownTreeNode node="child" activePath="props.activePath" onSelect="props.onSelect"/>
</t>
</SidebarMenu>
</div>
</t>
</t>
</t>
<t t-name="MarkdownTreeNode" t-call="baseui.MarkdownTreeNode"/>
<t t-name="baseui.message">
<article class="bu-message"/>
</t>
<t t-name="baseui.Message">
<article t-att-class="classNames" t-att-data-side="side" role="listitem" t-att-style="props.style">
<t t-slot="default"/>
</article>
</t>
<t t-name="Message" t-call="baseui.Message"/>
<t t-name="baseui.message-scroller">
<div class="bu-message-scroller"/>
</t>
<t t-name="baseui.MessageScroller">
<div t-att-class="'bu-message-scroller' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" t-ref="root">
<t t-slot="default"/>
</div>
</t>
<t t-name="MessageScroller" t-call="baseui.MessageScroller"/>
<t t-name="baseui.menubar"><nav b-ui="menubar"><t t-esc="props.content"/></nav></t>
<t t-name="baseui.Menubar"><nav t-att-class="classNames" role="menubar" t-att-style="props.style"><t t-slot="default"/></nav></t>
<t t-name="Menubar" t-call="baseui.Menubar"/>
<t t-name="baseui.native-select">
<select b-ui="native-select"><t t-slot="default"/></select>
</t>
<t t-name="baseui.NativeSelect">
<select t-att-class="classNames" t-att-disabled="props.disabled" t-att-value="props.value"
t-att-aria-label="ariaLabel" t-att-id="props.id" t-att-style="props.style" t-on-change="onChange">
<t t-slot="default"/>
</select>
</t>
<t t-name="NativeSelect" t-call="baseui.NativeSelect"/>
<t t-name="baseui.navigation-menu">
<nav b-ui="navigation-menu"><t t-slot="default"/></nav>
</t>
<t t-name="baseui.NavigationMenu">
<nav
t-att-class="'bu-navigation-menu' + (props.className ? ' ' + props.className : '')"
role="menubar"
t-ref="root"
t-att-style="props.style"
t-on-keydown="onKeyDown"
>
<t t-slot="default"/>
</nav>
</t>
<t t-name="NavigationMenu" t-call="baseui.NavigationMenu"/>
<t t-name="baseui.NavigationMenuItem">
<a t-att-href="props.href || '#'" role="menuitem" t-att-class="props.className" t-att-style="props.style">
<t t-slot="default"/>
</a>
</t>
<t t-name="NavigationMenuItem" t-call="baseui.NavigationMenuItem"/>
<t t-name="baseui.pagination">
<nav b-ui="pagination" aria-label="Pagination"><ul><t t-slot="default"/></ul></nav>
</t>
<t t-name="baseui.Pagination">
<nav t-att-class="classNames" aria-label="Pagination" t-att-style="props.style"><ul class="pagination"><t t-slot="default"/></ul></nav>
</t>
<t t-name="Pagination" t-call="baseui.Pagination"/>
<t t-name="baseui.PaginationItem">
<li t-att-class="classNames" t-att-style="props.style">
<a href="#" class="page-link" t-att-aria-current="props.current ? 'page' : undefined" t-on-click.prevent="onClick">
<t t-slot="default"/>
</a>
</li>
</t>
<t t-name="PaginationItem" t-call="baseui.PaginationItem"/>
<t t-name="baseui.popover">
<span b-ui="popover">
<button b-popover-trigger="" type="button"><t t-esc="props.label"/></button>
<span b-popover-content=""><t t-slot="default"/></span>
</span>
</t>
<t t-name="baseui.Popover">
<span t-att-class="'bu-popover' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<t t-slot="default"/>
</span>
</t>
<t t-name="Popover" t-call="baseui.Popover"/>
<t t-name="baseui.PopoverTrigger">
<Button unstyled="true" getRef="getRef" className="'btn bu-button btn-outline-secondary bu-popover-trigger'" attrs="attrs" style="props.style" onClick="() => this.onClick()">
<t t-slot="default"/>
</Button>
</t>
<t t-name="PopoverTrigger" t-call="baseui.PopoverTrigger"/>
<!-- Rendered but never shown: Owl keeps this reactive so PopoverTrigger
can read its innerHTML as the bootstrap.Popover content string (see
popover.component.js). Bootstrap renders the actual visible popup
itself, appended to document.body. -->
<t t-name="baseui.PopoverContent">
<span t-ref="buffer" class="bu-popover-content" t-att-style="style" aria-hidden="true">
<t t-if="props.content" t-esc="props.content"/>
<t t-else="" t-slot="default"/>
</span>
</t>
<t t-name="PopoverContent" t-call="baseui.PopoverContent"/>
<t t-name="baseui.progress"><div b-ui="progress"></div></t>
<t t-name="baseui.Progress">
<div
t-att-class="classNames"
role="progressbar"
aria-valuemin="0"
t-att-aria-valuemax="max"
t-att-aria-valuenow="value"
t-att-style="style"
>
<span class="bu-progress-indicator"></span>
</div>
</t>
<t t-name="Progress" t-call="baseui.Progress"/>
<t t-name="baseui.pwa">
<div b-ui="pwa" hidden="hidden">
<div b-pwa-panel="">
<t t-slot="default"/>
</div>
</div>
</t>
<t t-name="baseui.Pwa"><t t-slot="default"/></t>
<t t-name="Pwa" t-call="baseui.Pwa"/>
<t t-name="baseui.PwaTrigger">
<Button variant="'default'" className="'bu-pwa-trigger'" style="props.style" onClick="() => this.onClick()"><t t-slot="default"/></Button>
</t>
<t t-name="PwaTrigger" t-call="baseui.PwaTrigger"/>
<t t-name="baseui.PwaContent">
<div
t-if="open"
class="bu-pwa-overlay"
t-ref="root"
t-att-style="props.style"
t-on-keydown="onKeyDown"
t-on-click="onBackdropClick"
>
<div class="bu-pwa-panel" role="dialog" aria-modal="true">
<t t-slot="default"/>
</div>
</div>
</t>
<t t-name="PwaContent" t-call="baseui.PwaContent"/>
<t t-name="baseui.PwaHeader"><div class="bu-pwa-header" t-att-style="props.style"><t t-slot="default"/></div></t>
<t t-name="PwaHeader" t-call="baseui.PwaHeader"/>
<t t-name="baseui.PwaTitle"><h2 class="bu-pwa-title" t-att-style="props.style"><t t-slot="default"/></h2></t>
<t t-name="PwaTitle" t-call="baseui.PwaTitle"/>
<t t-name="baseui.PwaDescription"><p class="bu-pwa-description" t-att-style="props.style"><t t-slot="default"/></p></t>
<t t-name="PwaDescription" t-call="baseui.PwaDescription"/>
<t t-name="baseui.PwaBody"><div class="bu-pwa-body" t-att-style="props.style"><t t-slot="default"/></div></t>
<t t-name="PwaBody" t-call="baseui.PwaBody"/>
<t t-name="baseui.PwaSteps">
<ol class="bu-pwa-steps" t-att-style="props.style">
<t t-foreach="steps" t-as="step" t-key="step_index">
<li>
<span class="bu-pwa-step-index" t-esc="step_index + 1"/>
<span t-esc="step"/>
</li>
</t>
</ol>
</t>
<t t-name="PwaSteps" t-call="baseui.PwaSteps"/>
<t t-name="baseui.PwaFooter"><div class="bu-pwa-footer" t-att-style="props.style"><t t-slot="default"/></div></t>
<t t-name="PwaFooter" t-call="baseui.PwaFooter"/>
<t t-name="baseui.PwaClose">
<Button variant="'outline'" className="'bu-pwa-close'" style="props.style" onClick="() => this.onClick()"><t t-slot="default"/></Button>
</t>
<t t-name="PwaClose" t-call="baseui.PwaClose"/>
<t t-name="baseui.questionnaire">
<form class="bu-questionnaire"/>
</t>
<t t-name="baseui.Questionnaire">
<form t-att-class="'bu-questionnaire' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" t-on-submit.prevent="">
<t t-slot="default"/>
</form>
</t>
<t t-name="Questionnaire" t-call="baseui.Questionnaire"/>
<t t-name="baseui.QuestionnaireStep">
<div t-if="active" class="bu-questionnaire-step" t-att-style="props.style"><t t-slot="default"/></div>
</t>
<t t-name="QuestionnaireStep" t-call="baseui.QuestionnaireStep"/>
<t t-name="baseui.QuestionnairePrevious">
<Button unstyled="true" className="'bu-questionnaire-prev'" style="props.style" disabled="disabled" onClick="() => this.onClick()">
<t t-slot="default"/>
</Button>
</t>
<t t-name="QuestionnairePrevious" t-call="baseui.QuestionnairePrevious"/>
<t t-name="baseui.QuestionnaireNext">
<Button unstyled="true" className="'bu-questionnaire-next'" style="props.style" onClick="() => this.onClick()">
<t t-slot="default"/>
</Button>
</t>
<t t-name="QuestionnaireNext" t-call="baseui.QuestionnaireNext"/>
<t t-name="baseui.radio-group">
<label b-ui="radio-group"><input type="radio"/><t t-slot="default"/></label>
</t>
<t t-name="baseui.RadioGroup">
<div t-att-class="classNames" t-att-style="props.style" role="radiogroup"><t t-slot="default"/></div>
</t>
<t t-name="RadioGroup" t-call="baseui.RadioGroup"/>
<t t-name="baseui.RadioGroupItem">
<label t-att-class="'form-check bu-check ' + (props.className || '')" t-att-style="props.style">
<input
type="radio"
class="form-check-input"
t-att-name="env.radioGroupName()"
t-att-checked="checked"
t-att-disabled="disabled"
t-on-change="onChange"
/>
<t t-slot="default"/>
</label>
</t>
<t t-name="RadioGroupItem" t-call="baseui.RadioGroupItem"/>
<t t-name="baseui.resizable">
<div class="bu-resizable"/>
</t>
<t t-name="baseui.Resizable">
<div t-att-class="'bu-resizable' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<div class="bu-resizable-panel" t-ref="panel" t-att-style="panelStyle">
<t t-slot="default"/>
</div>
<div class="bu-resizable-handle" t-on-pointerdown="onPointerDown"></div>
</div>
</t>
<t t-name="Resizable" t-call="baseui.Resizable"/>
<t t-name="baseui.scroll-area">
<div class="bu-scroll-area"/>
</t>
<t t-name="baseui.ScrollArea">
<div t-att-class="classNames" t-att-style="props.style" role="region" tabindex="0"><t t-slot="default"/></div>
</t>
<t t-name="ScrollArea" t-call="baseui.ScrollArea"/>
<t t-name="baseui.separator">
<hr b-ui="separator"/>
</t>
<t t-name="baseui.Separator">
<hr t-att-class="classNames" t-att-style="props.style" role="separator" t-att-aria-orientation="vertical ? 'vertical' : 'horizontal'"/>
</t>
<t t-name="Separator" t-call="baseui.Separator"/>
<t t-name="baseui.select"><div b-ui="select"><t t-esc="props.content"/></div></t>
<t t-name="baseui.Select">
<div t-att-class="classNames" t-att-style="props.style" t-ref="root"><t t-slot="default"/></div>
</t>
<t t-name="Select" t-call="baseui.Select"/>
<t t-name="baseui.SelectTrigger">
<Button
unstyled="true"
className="'bu-select-trigger'"
attrs="attrs"
style="props.style"
onClick="() => this.onClick()"
>
<t t-slot="default"/>
</Button>
</t>
<t t-name="SelectTrigger" t-call="baseui.SelectTrigger"/>
<t t-name="baseui.SelectContent">
<div t-if="open" class="bu-select-content" t-att-style="props.style" role="listbox">
<t t-slot="default"/>
</div>
</t>
<t t-name="SelectContent" t-call="baseui.SelectContent"/>
<t t-name="baseui.SelectItem">
<div
class="bu-select-item"
role="option"
t-att-aria-selected="selected ? 'true' : 'false'"
t-att-style="props.style"
t-on-click="onClick"
>
<t t-slot="default"/>
</div>
</t>
<t t-name="SelectItem" t-call="baseui.SelectItem"/>
<t t-name="baseui.shell">
<div b-ui="shell"><t t-slot="default"/></div>
</t>
<t t-name="baseui.Shell">
<div t-att-class="'bu-shell' + (props.className ? ' ' + props.className : '')"
t-att-style="props.style"
t-att-b-att-collapsed="state.collapsed ? 'true' : 'false'">
<Sidebar open="props.open" defaultOpen="props.defaultOpen" onOpenChange="props.onOpenChange">
<t t-slot="default"/>
</Sidebar>
<t t-if="props.toast">
<Toast open="!!props.toast" variant="props.toast.variant or 'info'"
delay="props.toast.persistent ? 0 : (props.toast.delay or 4000)"
className="'bu-shell-toast' + (props.toast.className ? ' ' + props.toast.className : '')"
onOpenChange="(open) => !open and this.dismissToast()">
<div t-esc="props.toast.message"/>
<t t-if="props.toast.actionLabel">
<t t-set-slot="action">
<Button variant="'outline'" size="'sm'"
label="props.toast.actionLabel" onClick="() => this.runToastAction()"/>
</t>
</t>
</Toast>
</t>
<t t-if="props.notificationPage">
<t t-component="props.notificationPage"/>
</t>
<t t-if="props.pwa">
<t t-component="props.pwa"/>
</t>
</div>
</t>
<t t-name="Shell" t-call="baseui.Shell"/>
<t t-name="baseui.ShellSidebar">
<SidebarContent className="props.className" style="props.style">
<t t-slot="default"/>
</SidebarContent>
</t>
<t t-name="ShellSidebar" t-call="baseui.ShellSidebar"/>
<t t-name="baseui.ShellSidebarHeader">
<div t-att-class="'bu-shell-sidebar-header' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<t t-slot="default"/>
</div>
</t>
<t t-name="ShellSidebarHeader" t-call="baseui.ShellSidebarHeader"/>
<t t-name="baseui.ShellNav">
<nav t-att-class="'bu-shell-nav' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<t t-slot="default"/>
</nav>
</t>
<t t-name="ShellNav" t-call="baseui.ShellNav"/>
<t t-name="baseui.ShellMain">
<div t-att-class="'bu-shell-main' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<t t-slot="default"/>
</div>
</t>
<t t-name="ShellMain" t-call="baseui.ShellMain"/>
<t t-name="baseui.ShellHeader">
<header t-att-class="'bu-shell-header' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<t t-slot="default"/>
</header>
</t>
<t t-name="ShellHeader" t-call="baseui.ShellHeader"/>
<t t-name="baseui.ShellContent">
<main t-att-class="'bu-shell-content' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<t t-if="props.loading">
<div class="bu-shell-content-skeleton" aria-busy="true" aria-live="polite">
<Skeleton className="'bu-shell-content-skeleton-bar bu-shell-content-skeleton-title'"/>
<Skeleton className="'bu-shell-content-skeleton-bar'"/>
<Skeleton className="'bu-shell-content-skeleton-bar'"/>
<Skeleton className="'bu-shell-content-skeleton-bar bu-shell-content-skeleton-short'"/>
</div>
</t>
<t t-else="">
<t t-slot="default"/>
</t>
</main>
</t>
<t t-name="ShellContent" t-call="baseui.ShellContent"/>
<t t-name="baseui.ShellUserMenu">
<div t-if="authState" t-att-class="'bu-shell-user' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<t t-slot="default">
<span class="bu-shell-user-name" t-esc="authState.username"/>
<Button variant="'outline'" size="'sm'" label="'Logout'" onClick="() => this.logout()"/>
</t>
</div>
</t>
<t t-name="ShellUserMenu" t-call="baseui.ShellUserMenu"/>
<t t-name="baseui.skeleton">
<span b-ui="skeleton"></span>
</t>
<t t-name="baseui.Skeleton">
<span t-att-class="classNames" t-att-style="props.style" aria-hidden="true"></span>
</t>
<t t-name="Skeleton" t-call="baseui.Skeleton"/>
<t t-name="baseui.sheet">
<div b-ui="sheet">
<aside b-sheet-panel="">
<t t-slot="default"/>
</aside>
</div>
</t>
<t t-name="baseui.Sheet"><t t-slot="default"/></t>
<t t-name="Sheet" t-call="baseui.Sheet"/>
<t t-name="baseui.SheetTrigger">
<Button variant="'outline'" className="'bu-sheet-trigger'" style="props.style" onClick="() => this.onClick()"><t t-slot="default"/></Button>
</t>
<t t-name="SheetTrigger" t-call="baseui.SheetTrigger"/>
<t t-name="baseui.SheetContent">
<div t-ref="root" t-att-class="'offcanvas ' + placementClass + ' bu-sheet-overlay'" t-att-style="props.style" tabindex="-1">
<aside class="bu-sheet-panel">
<t t-slot="default"/>
</aside>
</div>
</t>
<t t-name="SheetContent" t-call="baseui.SheetContent"/>
<t t-name="baseui.SheetHeader"><div class="bu-sheet-header" t-att-style="props.style"><t t-slot="default"/></div></t>
<t t-name="SheetHeader" t-call="baseui.SheetHeader"/>
<t t-name="baseui.SheetFooter"><div class="bu-sheet-footer" t-att-style="props.style"><t t-slot="default"/></div></t>
<t t-name="SheetFooter" t-call="baseui.SheetFooter"/>
<t t-name="baseui.SheetTitle"><h2 class="bu-sheet-title" t-att-style="props.style"><t t-slot="default"/></h2></t>
<t t-name="SheetTitle" t-call="baseui.SheetTitle"/>
<t t-name="baseui.SheetDescription"><p class="bu-sheet-description" t-att-style="props.style"><t t-slot="default"/></p></t>
<t t-name="SheetDescription" t-call="baseui.SheetDescription"/>
<t t-name="baseui.SheetClose">
<Button variant="'outline'" className="'bu-sheet-close'" style="props.style" attrs="{'data-bs-dismiss': 'offcanvas'}"><t t-slot="default"/></Button>
</t>
<t t-name="SheetClose" t-call="baseui.SheetClose"/>
<t t-name="baseui.sidebar">
<aside b-ui="sidebar"><t t-slot="default"/></aside>
</t>
<t t-name="baseui.Sidebar">
<div t-att-class="classNames"
t-att-style="props.style"
data-slot="sidebar-wrapper"
t-att-data-state="sidebarState"
t-att-data-collapsible="collapsible"
t-att-data-variant="variant"
t-att-data-side="side"
t-on-keydown="onKeyDown">
<div t-if="state.open" class="bu-sidebar-backdrop" data-slot="sidebar-backdrop" t-on-click="() => this.setOpen(false)"></div>
<t t-slot="default"/>
</div>
</t>
<t t-name="Sidebar" t-call="baseui.Sidebar"/>
<t t-name="SidebarProvider" t-call="baseui.Sidebar"/>
<t t-name="baseui.SidebarContent">
<aside t-att-class="'bu-sidebar' + (open ? ' is-open' : '') + (props.className ? ' ' + props.className : '')"
t-att-style="props.style"
data-sidebar="sidebar"
data-slot="sidebar"
t-att-data-state="open ? 'expanded' : 'collapsed'">
<t t-slot="default"/>
</aside>
</t>
<t t-name="SidebarContent" t-call="baseui.SidebarContent"/>
<t t-name="baseui.SidebarHeader">
<div t-att-class="'bu-sidebar-header' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" data-sidebar="header" data-slot="sidebar-header">
<t t-slot="default"/>
</div>
</t>
<t t-name="SidebarHeader" t-call="baseui.SidebarHeader"/>
<t t-name="baseui.SidebarFooter">
<div t-att-class="'bu-sidebar-footer' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" data-sidebar="footer" data-slot="sidebar-footer">
<t t-slot="default"/>
</div>
</t>
<t t-name="SidebarFooter" t-call="baseui.SidebarFooter"/>
<t t-name="baseui.SidebarInset">
<main t-att-class="'bu-sidebar-inset' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" data-slot="sidebar-inset">
<t t-slot="default"/>
</main>
</t>
<t t-name="SidebarInset" t-call="baseui.SidebarInset"/>
<t t-name="baseui.SidebarRail">
<Button type="'button'" unstyled="true"
className="'bu-sidebar-rail' + (props.className ? ' ' + props.className : '')"
style="props.style"
attrs="{ 'data-sidebar': 'rail', 'data-slot': 'sidebar-rail', tabindex: '-1' }"
ariaLabel="'Toggle Sidebar'"
title="'Toggle Sidebar'"
onClick="() => this.onClick()"/>
</t>
<t t-name="SidebarRail" t-call="baseui.SidebarRail"/>
<t t-name="baseui.SidebarInput">
<input t-att-class="'bu-sidebar-input' + (props.className ? ' ' + props.className : '')"
t-att-style="props.style"
data-sidebar="input"
data-slot="sidebar-input"
t-att-type="props.type || 'text'"
t-att-placeholder="props.placeholder"
t-att-value="props.value"/>
</t>
<t t-name="SidebarInput" t-call="baseui.SidebarInput"/>
<t t-name="baseui.SidebarSeparator">
<div t-att-class="'bu-sidebar-separator' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" data-sidebar="separator" data-slot="sidebar-separator"/>
</t>
<t t-name="SidebarSeparator" t-call="baseui.SidebarSeparator"/>
<t t-name="baseui.SidebarClose">
<Button type="'button'" unstyled="true"
className="'bu-sidebar-close' + (props.className ? ' ' + props.className : '')"
style="props.style"
attrs="{ 'data-sidebar': 'close', 'data-slot': 'sidebar-close' }"
ariaLabel="props.label || 'Close Sidebar'"
onClick="() => this.onClick()">
<Icon name="props.icon || 'x'" className="'bu-sidebar-close-icon'"/>
<span t-if="props.label"><t t-esc="props.label"/></span>
<span t-else="" class="visually-hidden">Close Sidebar</span>
<t t-slot="default"/>
</Button>
</t>
<t t-name="SidebarClose" t-call="baseui.SidebarClose"/>
<t t-name="baseui.SidebarGroup">
<div t-att-class="'bu-sidebar-group' + (props.muted ? ' is-muted' : '') + (props.className ? ' ' + props.className : '')" t-att-style="props.style" data-sidebar="group" data-slot="sidebar-group">
<t t-slot="default"/>
</div>
</t>
<t t-name="SidebarGroup" t-call="baseui.SidebarGroup"/>
<t t-name="baseui.SidebarGroupLabel">
<a t-if="props.href" t-att-href="props.href" t-att-class="'bu-sidebar-group-label' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" data-sidebar="group-label" data-slot="sidebar-group-label">
<t t-slot="default"/>
</a>
<div t-else="" t-att-class="'bu-sidebar-group-label' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" data-sidebar="group-label" data-slot="sidebar-group-label">
<t t-slot="default"/>
</div>
</t>
<t t-name="SidebarGroupLabel" t-call="baseui.SidebarGroupLabel"/>
<t t-name="baseui.SidebarGroupAction">
<Button type="'button'" unstyled="true"
className="'bu-sidebar-group-action' + (props.className ? ' ' + props.className : '')"
style="props.style"
attrs="{ 'data-sidebar': 'group-action', 'data-slot': 'sidebar-group-action' }"
ariaLabel="ariaLabel"
icon="props.icon"
onClick="(event) => this.onClick(event)">
<t t-slot="default"/>
</Button>
</t>
<t t-name="SidebarGroupAction" t-call="baseui.SidebarGroupAction"/>
<t t-name="baseui.SidebarGroupContent">
<div t-att-class="'bu-sidebar-group-content' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" data-sidebar="group-content" data-slot="sidebar-group-content">
<t t-slot="default"/>
</div>
</t>
<t t-name="SidebarGroupContent" t-call="baseui.SidebarGroupContent"/>
<t t-name="baseui.SidebarGroupCollapsible">
<div t-att-class="'bu-sidebar-group' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<Button type="'button'" unstyled="true"
className="'bu-sidebar-group-trigger'"
attrs="{ 'data-sidebar': 'group-label', 'data-slot': 'sidebar-group-label', 'aria-expanded': open ? 'true' : 'false' }"
onClick="() => this.toggle()">
<t t-esc="props.label"/>
<Icon name="'chevron-down'" className="'bu-sidebar-group-chevron' + (open ? ' is-open' : '')"/>
</Button>
<div t-if="open" class="bu-sidebar-group-content">
<t t-slot="default"/>
</div>
</div>
</t>
<t t-name="SidebarGroupCollapsible" t-call="baseui.SidebarGroupCollapsible"/>
<t t-name="baseui.SidebarMenu">
<ul t-att-class="'bu-sidebar-menu' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" data-sidebar="menu" data-slot="sidebar-menu">
<t t-slot="default"/>
</ul>
</t>
<t t-name="SidebarMenu" t-call="baseui.SidebarMenu"/>
<t t-name="baseui.SidebarMenuItem">
<li t-att-class="'bu-sidebar-menu-item' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" data-sidebar="menu-item" data-slot="sidebar-menu-item">
<t t-slot="default"/>
</li>
</t>
<t t-name="SidebarMenuItem" t-call="baseui.SidebarMenuItem"/>
<t t-name="baseui.SidebarMenuButton">
<Button href="props.href" unstyled="true"
className="classNames"
style="props.style"
attrs="{ 'data-sidebar': 'menu-button', 'data-slot': 'sidebar-menu-button', 'data-active': isActive ? 'true' : undefined, 'data-size': props.size || 'default', 'aria-current': isActive ? 'page' : undefined }"
disabled="props.disabled"
onClick="(event) => this.onClick(event)">
<Icon t-if="props.icon" name="props.icon" className="'bu-sidebar-menu-icon'"/>
<span class="bu-sidebar-menu-label"><t t-slot="default"/></span>
</Button>
</t>
<t t-name="SidebarMenuButton" t-call="baseui.SidebarMenuButton"/>
<t t-name="baseui.SidebarMenuAction">
<Button type="'button'" unstyled="true"
className="'bu-sidebar-menu-action' + (props.showOnHover ? ' show-on-hover' : '') + (props.className ? ' ' + props.className : '')"
style="props.style"
attrs="{ 'data-sidebar': 'menu-action', 'data-slot': 'sidebar-menu-action' }"
ariaLabel="ariaLabel"
icon="props.icon"
onClick="(event) => this.onClick(event)">
<t t-slot="default"/>
</Button>
</t>
<t t-name="SidebarMenuAction" t-call="baseui.SidebarMenuAction"/>
<t t-name="baseui.SidebarMenuSub">
<ul t-att-class="'bu-sidebar-menu-sub' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" data-sidebar="menu-sub" data-slot="sidebar-menu-sub">
<t t-slot="default"/>
</ul>
</t>
<t t-name="SidebarMenuSub" t-call="baseui.SidebarMenuSub"/>
<t t-name="baseui.SidebarMenuBadge">
<div t-att-class="'bu-sidebar-menu-badge' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" data-sidebar="menu-badge" data-slot="sidebar-menu-badge">
<t t-slot="default"/>
</div>
</t>
<t t-name="SidebarMenuBadge" t-call="baseui.SidebarMenuBadge"/>
<t t-name="baseui.SidebarMenuSkeleton">
<div t-att-class="'bu-sidebar-menu-skeleton' + (props.className ? ' ' + props.className : '')" t-att-style="style" data-sidebar="menu-skeleton" data-slot="sidebar-menu-skeleton">
<span t-if="props.showIcon" class="bu-sidebar-menu-skeleton-icon" data-sidebar="menu-skeleton-icon"></span>
<span class="bu-sidebar-menu-skeleton-text" data-sidebar="menu-skeleton-text"></span>
</div>
</t>
<t t-name="SidebarMenuSkeleton" t-call="baseui.SidebarMenuSkeleton"/>
<t t-name="baseui.SidebarMenuSubItem">
<li t-att-class="'bu-sidebar-menu-sub-item' + (props.className ? ' ' + props.className : '')" t-att-style="props.style" data-sidebar="menu-sub-item" data-slot="sidebar-menu-sub-item">
<t t-slot="default"/>
</li>
</t>
<t t-name="SidebarMenuSubItem" t-call="baseui.SidebarMenuSubItem"/>
<t t-name="baseui.SidebarMenuSubButton">
<Button href="props.href" unstyled="true"
className="classNames"
style="props.style"
attrs="{ 'data-sidebar': 'menu-sub-button', 'data-slot': 'sidebar-menu-sub-button', 'data-active': (props.active || props.isActive) ? 'true' : undefined }"
onClick="(event) => this.onClick(event)">
<t t-slot="default"/>
</Button>
</t>
<t t-name="SidebarMenuSubButton" t-call="baseui.SidebarMenuSubButton"/>
<t t-name="baseui.SidebarTrigger">
<Button type="'button'" unstyled="true"
className="'bu-sidebar-trigger' + (props.className ? ' ' + props.className : '')"
style="props.style"
attrs="{ 'data-sidebar': 'trigger', 'data-slot': 'sidebar-trigger' }"
ariaLabel="'Toggle Sidebar'"
onClick="() => this.onClick()">
<Icon name="props.icon || 'panel-left'" className="'bu-sidebar-trigger-icon'"/>
<span t-if="props.label"><t t-esc="props.label"/></span>
<span t-else="" class="visually-hidden">Toggle Sidebar</span>
<t t-slot="default"/>
</Button>
</t>
<t t-name="SidebarTrigger" t-call="baseui.SidebarTrigger"/>
<t t-name="baseui.slider"><input b-ui="slider" type="range"/></t>
<t t-name="baseui.Slider">
<input
type="range"
t-att-class="classNames"
t-att-min="props.min"
t-att-max="props.max"
t-att-step="props.step"
t-att-value="props.value"
t-att-disabled="props.disabled"
t-att-style="props.style"
t-on-input="onInput"
/>
</t>
<t t-name="Slider" t-call="baseui.Slider"/>
<t t-name="baseui.spinner">
<span b-ui="spinner"></span>
</t>
<t t-name="baseui.Spinner">
<span t-att-class="classNames" t-att-style="props.style" role="status">
<span class="visually-hidden" t-esc="label"/>
</span>
</t>
<t t-name="Spinner" t-call="baseui.Spinner"/>
<t t-name="baseui.switch">
<label b-ui="switch"><input type="checkbox" role="switch"/><t t-slot="default"/></label>
</t>
<t t-name="baseui.Switch">
<label t-att-class="'form-check form-switch bu-switch ' + (props.className || '')" t-att-style="props.style">
<input
type="checkbox"
role="switch"
class="form-check-input"
t-att-checked="props.checked"
t-att-disabled="props.disabled"
t-on-change="onChange"
/>
<t t-slot="default"/>
</label>
</t>
<t t-name="Switch" t-call="baseui.Switch"/>
<t t-name="baseui.table">
<table b-ui="table"><t t-slot="default"/></table>
</t>
<t t-name="baseui.Table">
<div t-if="props.responsive" class="table-responsive" t-att-style="props.style"><table t-att-class="classNames"><t t-slot="default"/></table></div>
<table t-else="" t-att-class="classNames" t-att-style="props.style"><t t-slot="default"/></table>
</t>
<t t-name="Table" t-call="baseui.Table"/>
<t t-name="baseui.Tabs">
<div t-att-class="classNames" t-att-data-orientation="orientation" t-att-style="props.style">
<t t-slot="default"/>
</div>
</t>
<t t-name="Tabs" t-call="baseui.Tabs"/>
<t t-name="baseui.TabsList">
<div t-ref="list" role="tablist" t-att-class="classNames" t-att-style="props.style" t-on-keydown="onKeyDown">
<t t-slot="default"/>
</div>
</t>
<t t-name="TabsList" t-call="baseui.TabsList"/>
<t t-name="baseui.TabTrigger">
<Button unstyled="true" className="classNames" style="props.style" disabled="props.disabled" attrs="tabAttrs" getRef="(el) => this.onRootRef(el)" onClick="() => this.onClick()">
<t t-slot="default"/>
</Button>
</t>
<t t-name="TabTrigger" t-call="baseui.TabTrigger"/>
<t t-name="baseui.TabsContainer">
<div t-att-class="'tab-content bu-tabs-contents' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<t t-slot="default"/>
</div>
</t>
<t t-name="TabsContainer" t-call="baseui.TabsContainer"/>
<t t-name="baseui.TabContent">
<div t-att-id="panelId" role="tabpanel" t-att-class="'tab-pane fade bu-tabs-panel' + (initialActive ? ' show active' : '') + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<t t-slot="default"/>
</div>
</t>
<t t-name="TabContent" t-call="baseui.TabContent"/>
<t t-name="baseui.textarea">
<textarea b-ui="textarea"></textarea>
</t>
<t t-name="baseui.Textarea">
<textarea
t-att-class="classNames"
t-att-style="props.style"
t-att-placeholder="props.placeholder"
t-att-rows="props.rows"
t-att-disabled="props.disabled"
t-att-readonly="props.readonly"
t-att-value="props.value"
t-att-id="props.id"
t-on-input="onInput"
t-on-change="onChange"
></textarea>
</t>
<t t-name="Textarea" t-call="baseui.Textarea"/>
<t t-name="baseui.text-editor">
<div class="bu-text-editor"/>
</t>
<t t-name="baseui.TextEditor">
<div t-att-class="classNames" t-att-style="props.style" data-slot="text-editor" t-att-data-status="state.status">
<div t-if="state.status === 'loading'" class="bu-text-editor-loading" role="status">Loading…</div>
<div t-elif="state.status === 'error'" class="bu-text-editor-error" role="alert">
<t t-esc="state.error"/>
</div>
<div
t-else=""
t-ref="editor"
class="bu-text-editor-shell"
data-slot="text-editor-shell"
role="group"
t-att-aria-label="editorLabel"
/>
</div>
</t>
<t t-name="TextEditor" t-call="baseui.TextEditor"/>
<t t-name="baseui.ThemeButton">
<Button
unstyled="true"
className="classNames"
style="props.style"
attrs="attrs"
ariaLabel="label"
title="label"
ariaPressed="pressed"
onClick="() => this.onClick()"
>
<Icon name="iconName" base-url="baseUrl"/>
<span class="visually-hidden" b-theme-button-label="" t-esc="label"/>
</Button>
</t>
<t t-name="ThemeButton" t-call="baseui.ThemeButton"/>
<t t-name="baseui.toast">
<div b-ui="toast"><t t-slot="default"/></div>
</t>
<t t-name="baseui.Toast">
<div t-ref="root" t-att-class="classNames" t-att-style="props.style" t-att-role="role">
<div class="bu-toast-content"><t t-slot="default"/></div>
<div class="bu-toast-actions">
<t t-if="hasActionSlot" t-slot="action"/>
<Button variant="'ghost'" size="'icon-sm'" className="'bu-toast-close'" aria-label="'Close'" onClick="() => this.close()">x</Button>
</div>
</div>
</t>
<t t-name="Toast" t-call="baseui.Toast"/>
<t t-name="baseui.tooltip">
<span b-ui="tooltip">
<span b-tooltip-trigger=""><t t-slot="trigger"/></span>
<span b-tooltip-content=""><t t-slot="default"/></span>
</span>
</t>
<t t-name="baseui.Tooltip">
<span t-att-class="'bu-tooltip' + (props.className ? ' ' + props.className : '')" t-att-style="props.style">
<span t-ref="trigger" class="bu-tooltip-trigger">
<t t-slot="trigger"/>
</span>
<!-- Rendered but never shown: Owl keeps this reactive so the component
can read its innerHTML as the bootstrap.Tooltip title/content
string (see tooltip.component.js). Bootstrap renders the actual
visible popup itself, appended to document.body. -->
<span t-ref="buffer" style="display:none" aria-hidden="true">
<t t-if="props.content" t-esc="props.content"/>
<t t-else="" t-slot="default"/>
</span>
</span>
</t>
<t t-name="Tooltip" t-call="baseui.Tooltip"/>
<t t-name="baseui.toggle">
<button type="button"><t t-out="props.label"/></button>
</t>
<t t-name="baseui.Toggle">
<Button unstyled="true" className="classNames" style="props.style" aria-pressed="pressed ? 'true' : 'false'" onClick="() => this.onClick()">
<t t-slot="default"/>
</Button>
</t>
<t t-name="Toggle" t-call="baseui.Toggle"/>
<t t-name="baseui.toggle-group">
<div class="btn-group" role="group"/>
</t>
<t t-name="baseui.ToggleGroup">
<div
t-att-class="'btn-group bu-toggle-group' + (props.className ? ' ' + props.className : '')"
t-att-style="props.style"
t-att-role="props.multiple ? 'group' : 'radiogroup'"
>
<t t-slot="default"/>
</div>
</t>
<t t-name="ToggleGroup" t-call="baseui.ToggleGroup"/>
<t t-name="baseui.ToggleGroupItem">
<Button
unstyled="true"
className="'btn btn-outline-secondary'"
style="props.style"
ariaPressed="pressed ? 'true' : 'false'"
onClick="() => this.onClick()"
>
<t t-slot="default"/>
</Button>
</t>
<t t-name="ToggleGroupItem" t-call="baseui.ToggleGroupItem"/>
<t t-name="baseui.typography">
<p b-ui="typography"><t t-slot="default"/></p>
</t>
<t t-name="baseui.Typography">
<p t-att-class="classNames" t-att-style="props.style"><t t-slot="default"/></p>
</t>
<t t-name="Typography" t-call="baseui.Typography"/>
</templates>