@if (book$ | async; as book) {
@if (book?.metadata!.seriesNumber != null) {
#{{ book?.metadata!.seriesNumber }}
}
@let progress = getProgressPercent(book); @if (progress !== null) { } @if (getKoProgressPercent(book) !== null) { } @if (getKoboProgressPercent(book) !== null) { }
@if (navigationState$ | async) { }
@if (book?.metadata?.seriesName) { }

{{ book?.metadata?.title }}@if (book?.metadata?.subtitle) { : {{ book.metadata?.subtitle }} }

@for (author of book?.metadata!.authors; track $index; let isLast = $last; let isFirst = $first) { @if (isFirst && book!.metadata!.authors!.length > 1) { {{ author }} {{ t('firstAuthorBadge') }} } @else { {{ author }} } @if (!isLast) { , } }

@if (getDisplayFormat(book?.primaryFile); as displayFormat) { {{ displayFormat }} {{ t('primaryBadge') }} } @if (getDisplayFormat(book?.primaryFile) && getUniqueAlternativeFormats(book).length > 0) { | } @for (formatExt of getUniqueAlternativeFormats(book); track formatExt) { {{ formatExt }} } @if (book?.isPhysical) { {{ t('physicalBadge') }} }
@if (book?.metadata?.amazonRating || book?.metadata?.asin || book?.metadata?.goodreadsRating || book?.metadata?.goodreadsId || book?.metadata?.hardcoverRating || book?.metadata?.hardcoverId || book?.metadata?.lubimyczytacRating || book?.metadata?.lubimyczytacId || book?.metadata?.ranobedbRating || book?.metadata?.ranobedbId || book?.metadata?.audibleRating || book?.metadata?.audibleId || book?.metadata?.googleId) {
}
@if (book?.metadata?.amazonRating || book?.metadata?.asin) { Amazon @if (book?.metadata?.amazonRating) { {{ getRatingPercent(book.metadata!.amazonRating) }}% } } @if (book?.metadata?.goodreadsRating || book?.metadata?.goodreadsId) { Goodreads @if (book?.metadata?.goodreadsRating) { {{ getRatingPercent(book.metadata!.goodreadsRating) }}% } } @if (book?.metadata?.hardcoverRating || book?.metadata?.hardcoverId) { Hardcover @if (book?.metadata?.hardcoverRating) { {{ getRatingPercent(book.metadata!.hardcoverRating) }}% } } @if (book?.metadata?.lubimyczytacRating || book?.metadata?.lubimyczytacId) { Lubimyczytac @if (book?.metadata?.lubimyczytacRating) { {{ getRatingPercent(book.metadata!.lubimyczytacRating) }}% } } @if (book?.metadata?.ranobedbRating || book?.metadata?.ranobedbId) { Ranobedb @if (book?.metadata?.ranobedbRating) { {{ getRatingPercent(book.metadata!.ranobedbRating) }}% } } @if (book?.metadata?.audibleRating || book?.metadata?.audibleId) { Audible @if (book?.metadata?.audibleRating) { {{ getRatingPercent(book.metadata!.audibleRating) }}% } } @if (book?.metadata?.googleId) { Google Books } @if (book?.metadata?.comicMetadata?.webLink) { Comic Vine }
@if (book?.metadata?.categories?.length) {
{{ t('genresLabel') }}
@for (category of book.metadata!.categories; track category) { {{ category }} }
} @if (book?.metadata?.moods?.length) {
{{ t('moodsLabel') }}
@for (mood of book.metadata!.moods; track mood) { {{ mood }} }
} @if (book?.metadata?.tags?.length) {
{{ t('tagsLabel') }}
@for (tag of book.metadata!.tags; track tag) { {{ tag }} }
}
@if (hasDigitalFile(book)) {
@if (showFilePath) { {{ book?.primaryFile?.filePath }} }
}
@if (userService.userState$ | async; as userState) {
@if (navigationState$ | async) { } @if (hasDigitalFile(book)) {
@if (readMenuItems$ | async; as readItems) { @if (readItems.length > 0) { } @else { } } @else { }
}
@if ((userState.user!.permissions.canDownload || userState.user!.permissions.admin) && hasAnyFiles(book)) { @if ((book!.alternativeFormats && book!.alternativeFormats.length > 0) || (book!.supplementaryFiles && book!.supplementaryFiles.length > 0)) { @if (downloadMenuItems$ | async; as downloadItems) { } } @else { } } @if (userState.user!.permissions.canEditMetadata || userState.user!.permissions.admin) { } @if (otherItems$ | async; as otherItems) { @if (otherItems.length > 0) { } }
}
{{ t('synopsisTitle') }}
@if (isExpanded || isOverflowing) { }
@if (isComicBook(book) && hasComicMetadata(book)) {
{{ t('comicDetailsTitle') }}
}

{{ t('confirm.detachFileMessage', { fileName: detachFileName }) }}

} @else {

{{ t('loadingBookDetails') }}

}