@fluid-topics/ft-reader-saved-bookmarks 1.3.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,19 @@
1
+ Display the list of saved bookmarks
2
+
3
+ ## Install
4
+
5
+ ```shell
6
+ npm install @fluid-topics/ft-reader-saved-bookmarks
7
+ yarn add @fluid-topics/ft-reader-saved-bookmarks
8
+ ```
9
+
10
+ ## Usage
11
+
12
+ ```typescript
13
+ import { html } from "lit"
14
+ import "@fluid-topics/ft-reader-saved-bookmarks"
15
+
16
+ function render() {
17
+ return html` <ft-reader-saved-bookmarks foo="bar"></ft-reader-saved-bookmarks> `
18
+ }
19
+ ```
@@ -0,0 +1,7 @@
1
+ import { DefaultI18nMessages, I18nMessageContext, I18nMessages } from "@fluid-topics/ft-i18n";
2
+ export interface FtReaderSavedBookmarksMessages extends I18nMessages {
3
+ bookmarks(): string;
4
+ bookmarkMissingFromToc(): string;
5
+ }
6
+ export declare const readerSavedBookmarksMessagesI18nMessageContext: I18nMessageContext<FtReaderSavedBookmarksMessages>;
7
+ export declare const defaultReaderSavedBookmarksMessages: DefaultI18nMessages<FtReaderSavedBookmarksMessages>;
@@ -0,0 +1,6 @@
1
+ import { I18nMessageContext } from "@fluid-topics/ft-i18n";
2
+ export const readerSavedBookmarksMessagesI18nMessageContext = I18nMessageContext.build("readerSavedBookmarksComponent");
3
+ export const defaultReaderSavedBookmarksMessages = {
4
+ bookmarks: "Bookmarks",
5
+ bookmarkMissingFromToc: "This bookmark refer to a topic that no longer exists.",
6
+ };
@@ -0,0 +1,19 @@
1
+ import { ElementDefinitionsMap } from "@fluid-topics/ft-wc-utils";
2
+ import { FtReaderSavedBookmarksProperties } from "./ft-reader-saved-bookmarks.properties";
3
+ import { FtReaderComponent, FtReaderState } from "@fluid-topics/ft-reader-context/build/registration";
4
+ import { FtBookmark } from "@fluid-topics/public-api";
5
+ declare const FtReaderSavedBookmarks_base: typeof FtReaderComponent & import("@fluid-topics/ft-wc-utils").Constructor<import("@fluid-topics/ft-i18n").FtLitElementWithI18nInterface>;
6
+ export declare class FtReaderSavedBookmarks extends FtReaderSavedBookmarks_base implements FtReaderSavedBookmarksProperties {
7
+ static elementDefinitions: ElementDefinitionsMap;
8
+ static styles: import("lit").CSSResult[];
9
+ name: string;
10
+ bookmarks: Array<FtBookmark>;
11
+ remainingTocIdsInBookmarks: Array<string>;
12
+ private mapId?;
13
+ constructor();
14
+ get bookmarksTocIds(): string[];
15
+ static filterRemainingTocIdsInBookmarks(s: FtReaderState, self: FtReaderSavedBookmarks): string[] | undefined;
16
+ render(): import("lit-html").TemplateResult<1>;
17
+ private isAbsentFromToc;
18
+ }
19
+ export {};
@@ -0,0 +1,99 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { html } from "lit";
8
+ import { property } from "lit/decorators.js";
9
+ import { redux, screenReaderStyles } from "@fluid-topics/ft-wc-utils";
10
+ import { styles } from "./ft-reader-saved-bookmarks.styles";
11
+ import { FtReaderComponent } from "@fluid-topics/ft-reader-context/build/registration";
12
+ import { repeat } from "lit/directives/repeat.js";
13
+ import { classMap } from "lit/directives/class-map.js";
14
+ import { when } from "lit/directives/when.js";
15
+ import { FtTypography, FtTypographyVariants } from "@fluid-topics/ft-typography";
16
+ import { ftUserAssetsStore } from "@fluid-topics/ft-app-context/build/redux-stores/FtUserAssetsStore";
17
+ import { FtRipple } from "@fluid-topics/ft-ripple";
18
+ import { FtIcon, FtIcons } from "@fluid-topics/ft-icon";
19
+ import { withI18n } from "@fluid-topics/ft-i18n";
20
+ import { defaultReaderSavedBookmarksMessages, readerSavedBookmarksMessagesI18nMessageContext } from "./FtReaderSavedBookmarksMessages";
21
+ import { FtTooltip } from "@fluid-topics/ft-tooltip";
22
+ class FtReaderSavedBookmarks extends withI18n(FtReaderComponent) {
23
+ constructor() {
24
+ super();
25
+ this.name = "";
26
+ this.bookmarks = [];
27
+ this.remainingTocIdsInBookmarks = [];
28
+ this.addStore(ftUserAssetsStore);
29
+ this.addI18nContext(readerSavedBookmarksMessagesI18nMessageContext, defaultReaderSavedBookmarksMessages);
30
+ }
31
+ get bookmarksTocIds() {
32
+ return this.bookmarks.map((b) => b.tocId);
33
+ }
34
+ static filterRemainingTocIdsInBookmarks(s, self) {
35
+ var _a;
36
+ return (_a = s.toc) === null || _a === void 0 ? void 0 : _a.filter((tocNode) => self.bookmarksTocIds.indexOf(tocNode.tocId) >= 0).map((tocNode) => tocNode.tocId);
37
+ }
38
+ render() {
39
+ return html `
40
+ <div part="container" class="ft-reader-saved-bookmarks">
41
+ <span id="context" class="sr-only">${readerSavedBookmarksMessagesI18nMessageContext.messages.bookmarks()}</span>
42
+ <span id="missing-context" class="sr-only">${readerSavedBookmarksMessagesI18nMessageContext.messages.bookmarkMissingFromToc()}</span>
43
+ ${repeat(this.bookmarks, (bookmark) => bookmark.id, (bookmark, index) => {
44
+ const isAbsent = this.isAbsentFromToc(bookmark);
45
+ const classes = {
46
+ strikethrough: isAbsent,
47
+ };
48
+ return html `
49
+ <div part="bookmark" class="${classMap(classes)}">
50
+ <a part="link"
51
+ href="${isAbsent ? "#" : bookmark.readerUrl}"
52
+ aria-disabled="${isAbsent}"
53
+ aria-labelledby="context ${"content-" + index} ${isAbsent ? "missing-context" : ""}">
54
+ <ft-ripple part="ripple link-ripple"></ft-ripple>
55
+ <ft-typography id="${"content-" + index}" part="name" variant="${FtTypographyVariants.body2semibold}">
56
+ ${bookmark.title}
57
+ </ft-typography>
58
+ ${when(isAbsent, () => html `
59
+ <ft-tooltip text="${readerSavedBookmarksMessagesI18nMessageContext.messages.bookmarkMissingFromToc()}" delay="500" position="bottom" aria-hidden>
60
+ <ft-icon value="${FtIcons.INFO}"></ft-icon>
61
+ </ft-tooltip>
62
+ `)}
63
+ </a>
64
+ </div>
65
+ `;
66
+ })}
67
+ </div>
68
+ `;
69
+ }
70
+ isAbsentFromToc(bookmark) {
71
+ return this.remainingTocIdsInBookmarks.indexOf(bookmark.tocId) < 0;
72
+ }
73
+ }
74
+ FtReaderSavedBookmarks.elementDefinitions = {
75
+ "ft-ripple": FtRipple,
76
+ "ft-typography": FtTypography,
77
+ "ft-icon": FtIcon,
78
+ "ft-tooltip": FtTooltip,
79
+ };
80
+ FtReaderSavedBookmarks.styles = [styles, screenReaderStyles];
81
+ __decorate([
82
+ property()
83
+ ], FtReaderSavedBookmarks.prototype, "name", void 0);
84
+ __decorate([
85
+ redux({
86
+ store: ftUserAssetsStore.name,
87
+ selector: (s, self) => { var _a, _b; return (_b = (_a = s.bookmarks) === null || _a === void 0 ? void 0 : _a.filter((b) => b.mapId === self.mapId)) !== null && _b !== void 0 ? _b : []; },
88
+ })
89
+ ], FtReaderSavedBookmarks.prototype, "bookmarks", void 0);
90
+ __decorate([
91
+ redux({
92
+ store: "reader",
93
+ selector: FtReaderSavedBookmarks.filterRemainingTocIdsInBookmarks,
94
+ })
95
+ ], FtReaderSavedBookmarks.prototype, "remainingTocIdsInBookmarks", void 0);
96
+ __decorate([
97
+ redux({ store: "reader" })
98
+ ], FtReaderSavedBookmarks.prototype, "mapId", void 0);
99
+ export { FtReaderSavedBookmarks };