blob: 56b2f7b6b8a659479fc8d1c55c3d9dbed1b3406d [file] [log] [blame]
<style include="shared-style">
.items-container,
#content-wrapper {
--extensions-card-width: 400px;
}
#container {
box-sizing: border-box;
height: 100%;
overflow: overlay;
}
#content-wrapper {
min-width: var(--extensions-card-width);
padding: 24px 60px 64px;
}
.empty-list-message {
color: #6e6e6e;
font-size: 123%; /* Should be 16px when 100% is 13px. */
font-weight: 500;
margin-top: 80px;
text-align: center;
}
@media (prefers-color-scheme: dark) {
.empty-list-message {
color: var(--cr-secondary-text-color);
}
}
.items-container {
--grid-gutter: 12px;
display: grid;
grid-column-gap: var(--grid-gutter);
grid-row-gap: var(--grid-gutter);
grid-template-columns: repeat(auto-fill, var(--extensions-card-width));
justify-content: center;
margin: auto;
max-width: calc(var(--extensions-card-width) * var(--max-columns) +
var(--grid-gutter) * var(--max-columns));
}
#checkup-container {
grid-column: 1 / -1;
/* The checkup card should be at least as tall as an extensions item card.*/
min-height: var(--extensions-card-height);
}
extensions-item {
grid-column-start: auto;
grid-row-start: auto;
}
#app-title {
color: var(--cr-primary-text-color);
font-size: 123%;
font-weight: 400;
letter-spacing: .25px;
margin-bottom: 12px;
margin-top: 21px;
padding-bottom: 4px;
padding-top: 8px;
}
managed-footnote {
border-top: none;
/* #content-wrapper has a 24px margin-top. This overrides that
* margin-top, so the only space left is this element's 12px
* padding-bottom.
*/
margin-bottom: -24px;
padding-bottom: 12px;
padding-top: 12px;
/* The next element spills over this element. This ensures the link
* is clickable. */
z-index: 1;
}
</style>
<div id="container">
<managed-footnote hidden="[[filter]]"></managed-footnote>
<div id="content-wrapper" style="--max-columns: [[maxColumns_]];">
<div id="no-items" class="empty-list-message"
hidden$="[[!shouldShowEmptyItemsMessage_(
apps.length, extensions.length)]]">
<span on-click="onNoExtensionsTap_">
$i18nRaw{noExtensionsOrApps}
</span>
</div>
<div id="no-search-results" class="empty-list-message"
hidden$="[[!shouldShowEmptySearchMessage_(
shownAppsCount_, shownExtensionsCount_, apps, extensions)]]">
<span>$i18n{noSearchResults}</span>
</div>
<div class="items-container" hidden="[[!shownExtensionsCount_]]">
<div id="checkup-container" hidden="[[!showCheckup_]]">
<extensions-checkup id="checkup" slot="view">
</extensions-checkup>
</div>
<!-- Render only a few items first, to improve initial render time,
then render the remaining items on a different frame. Value of 3
was chosen by experimentation, and it is a good trade-off between
initial render time and total render time. -->
<template is="dom-repeat" items="[[extensions]]" initial-count="3"
filter="[[computedFilter_]]"
rendered-item-count="{{shownExtensionsCount_::dom-change}}">
<extensions-item id="[[item.id]]" data="[[item]]"
delegate="[[delegate]]" in-dev-mode="[[inDevMode]]">
</extensions-item>
</template>
</div>
<div hidden="[[!shownAppsCount_]]">
<!-- app-title needs to left-align with the grid content below, and
the easiest way to achieve this is to make it a grid as well. -->
<h2 id="app-title" class="items-container">$i18n{appsTitle}</h2>
<div class="items-container">
<template is="dom-repeat" items="[[apps]]" initial-count="3"
filter="[[computedFilter_]]"
rendered-item-count="{{shownAppsCount_::dom-change}}">
<extensions-item id="[[item.id]]" data="[[item]]"
delegate="[[delegate]]" in-dev-mode="[[inDevMode]]">
</extensions-item>
</template>
</div>
</div>
</div>
</div>