@fluid-topics/ft-reader-context 0.3.7

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,109 @@
1
+ Context block for integrated reader components.
2
+ All children components with the `ft-reader` prefix will share the same context and interact with each other.
3
+
4
+ For example navigating using the component `ft-reader-toc` will change what topics the component `ft-reader-content` displays
5
+ and topics visible in `ft-reader-content` will be highlighted in `ft-reader-toc`.
6
+
7
+ This component requires the [Fluid Topics public API](https://www.npmjs.com/package/@fluid-topics/public-api) to be
8
+ imported independently.
9
+
10
+ ## Install
11
+
12
+ ### Javascript
13
+
14
+ ```shell
15
+ npm install @fluid-topics/ft-reader-context
16
+ yarn add @fluid-topics/ft-reader-context
17
+ ```
18
+
19
+ ### HTML
20
+
21
+ To be placed at the end of HTML body:
22
+
23
+ ```
24
+ <script src="https://cdn.jsdelivr.net/npm/@fluid-topics/public-api/dist/fluidtopics.min.js"></script>
25
+ <script src="https://cdn.jsdelivr.net/npm/@fluid-topics/ft-reader-context/build/ft-reader-context.min.js"></script>
26
+ ```
27
+
28
+ ## Usage
29
+
30
+ ### Lit
31
+
32
+ ```typescript
33
+ import { html } from "lit"
34
+ import "@fluid-topics/public-api/dist/fluidtopics.min.js"
35
+ import "@fluid-topics/ft-reader-context"
36
+ import "@fluid-topics/ft-reader-toc"
37
+ import "@fluid-topics/ft-reader-content"
38
+ import "@fluid-topics/ft-reader-current-page-toc"
39
+
40
+ function render() {
41
+ return html`
42
+ <ft-reader-context
43
+ baseUrl="https://doc.fluidtopics.com/"
44
+ apiIntegrationIdentifier="custom-integration"
45
+ mapId="MdDo16IjKjJdTxsdVYuWjA"
46
+ >
47
+ <ft-reader-toc></ft-reader-toc>
48
+ <ft-reader-content></ft-reader-content>
49
+ <ft-reader-current-page-toc></ft-reader-current-page-toc>
50
+ </ft-reader-context>
51
+ `
52
+ }
53
+ ```
54
+
55
+ ### HTML
56
+
57
+ ```html
58
+ <html lang="en">
59
+ <head>
60
+ <title>My custom reader</title>
61
+ </head>
62
+ <body>
63
+ <style>
64
+ ft-reader-context {
65
+ display: flex;
66
+ height: 100%;
67
+ overflow: hidden;
68
+ gap: 8px;
69
+ }
70
+
71
+ ft-reader-context > * {
72
+ height: 100%;
73
+ overflow: auto;
74
+ }
75
+
76
+ ft-reader-toc, ft-reader-current-page-toc {
77
+ flex-shrink: 0;
78
+ flex-grow: 0;
79
+ width: 20%;
80
+ }
81
+
82
+ ft-reader-content {
83
+ flex-shrink: 1;
84
+ flex-grow: 1;
85
+ }
86
+
87
+ ft-reader-current-page-toc[empty] {
88
+ display: none;
89
+ }
90
+
91
+ </style>
92
+
93
+ <ft-reader-context baseUrl="<Tenant base URL>"
94
+ apiIntegrationIdentifier="custom-integration"
95
+ mapId="<Structured publication identifier>">
96
+ <ft-reader-toc></ft-reader-toc>
97
+ <ft-reader-content></ft-reader-content>
98
+ <ft-reader-current-page-toc></ft-reader-current-page-toc>
99
+ </ft-reader-context>
100
+
101
+ <script src="https://cdn.jsdelivr.net/npm/@fluid-topics/public-api/dist/fluidtopics.min.js"></script>
102
+ <script src="https://cdn.jsdelivr.net/npm/@fluid-topics/public-api/ft-reader-context/build/ft-reader-context.min.js"></script>
103
+ <script src="https://cdn.jsdelivr.net/npm/@fluid-topics/public-api/ft-reader-toc/build/ft-reader-toc.min.js"></script>
104
+ <script src="https://cdn.jsdelivr.net/npm/@fluid-topics/public-api/ft-reader-current-page-toc/build/ft-reader-current-page-toc.min.js"></script>
105
+ <script src="https://cdn.jsdelivr.net/npm/@fluid-topics/public-api/ft-reader-content/build/ft-reader-content.min.js"></script>
106
+ </body>
107
+ </html>
108
+
109
+ ```
@@ -0,0 +1,40 @@
1
+ import { PropertyValues } from "lit";
2
+ import { FtLitElementRedux } from "@fluid-topics/ft-wc-utils";
3
+ import { FtMap } from "@fluid-topics/public-api";
4
+ export declare class MapLoadedEvent extends CustomEvent<FtMap> {
5
+ constructor(map: FtMap);
6
+ }
7
+ export interface FtReaderVisibleTopic {
8
+ tocId: string;
9
+ title: string;
10
+ breadcrumb?: Array<{
11
+ tocId: string;
12
+ title: string;
13
+ }>;
14
+ }
15
+ export interface VisibleTopicsChangeData {
16
+ map: FtMap;
17
+ visibleTopics: FtReaderVisibleTopic[];
18
+ }
19
+ export declare class VisibleTopicsChangeEvent extends CustomEvent<VisibleTopicsChangeData> {
20
+ constructor(map: FtMap, visibleTopics: FtReaderVisibleTopic[]);
21
+ }
22
+ export declare class FtReaderContext extends FtLitElementRedux {
23
+ static styles: import("lit").CSSResult;
24
+ baseUrl?: string;
25
+ apiIntegrationIdentifier: string;
26
+ mapId?: string;
27
+ tocId?: string;
28
+ section?: string;
29
+ page?: number;
30
+ private map?;
31
+ private toc?;
32
+ private visibleTopics;
33
+ protected render(): import("lit-html").TemplateResult<1>;
34
+ private _stateManager?;
35
+ private get stateManager();
36
+ protected updated(props: PropertyValues): void;
37
+ protected contentAvailableCallback(props: PropertyValues): void;
38
+ private registerComponent;
39
+ }
40
+ //# sourceMappingURL=ft-reader-context.d.ts.map
@@ -0,0 +1,114 @@
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 { css, html } from "lit";
8
+ import { property } from "lit/decorators.js";
9
+ import { FtLitElementRedux, redux } from "@fluid-topics/ft-wc-utils";
10
+ import { FtReaderStateManager } from "./store/FtReaderStateManager";
11
+ export class MapLoadedEvent extends CustomEvent {
12
+ constructor(map) {
13
+ super("ft-reader-map-loaded", { detail: map });
14
+ }
15
+ }
16
+ export class VisibleTopicsChangeEvent extends CustomEvent {
17
+ constructor(map, visibleTopics) {
18
+ super("ft-reader-visible-topics-change", { detail: { map, visibleTopics } });
19
+ }
20
+ }
21
+ export class FtReaderContext extends FtLitElementRedux {
22
+ constructor() {
23
+ super(...arguments);
24
+ this.apiIntegrationIdentifier = "ft-reader";
25
+ this.visibleTopics = [];
26
+ }
27
+ render() {
28
+ return html `
29
+ <slot @register-ft-reader-component=${this.registerComponent}></slot>
30
+ `;
31
+ }
32
+ get stateManager() {
33
+ if (this._stateManager == null) {
34
+ this._stateManager = FtReaderStateManager.build(this.id || "" + Math.round(Math.random() * 10000));
35
+ this.store = this.stateManager.store;
36
+ }
37
+ return this._stateManager;
38
+ }
39
+ updated(props) {
40
+ super.updated(props);
41
+ if (props.has("baseUrl") && this.baseUrl) {
42
+ this.stateManager.setBaseUrl(this.baseUrl);
43
+ }
44
+ if (props.has("apiIntegrationIdentifier")) {
45
+ this.stateManager.setApiIntegrationIdentifier(this.apiIntegrationIdentifier);
46
+ }
47
+ if (props.has("mapId") && this.mapId) {
48
+ this.stateManager.setMapId(this.mapId);
49
+ this.stateManager.navigateToTopic("root");
50
+ }
51
+ if (props.has("page") && !this.tocId && this.page != null) {
52
+ this.stateManager.navigateToPage(this.page);
53
+ }
54
+ if ((props.has("tocId") || props.has("section") || props.has("page")) && this.tocId) {
55
+ this.stateManager.navigateToTopic(this.tocId, this.section, this.page);
56
+ }
57
+ }
58
+ contentAvailableCallback(props) {
59
+ super.contentAvailableCallback(props);
60
+ if ((props.has("map") || props.has("toc")) && this.map && this.toc) {
61
+ this.dispatchEvent(new MapLoadedEvent(this.map));
62
+ }
63
+ if (props.has("visibleTopics")) {
64
+ Promise.all(this.visibleTopics.map(tocId => this.stateManager.service.getTocNode(tocId)))
65
+ .then(tocNodes => {
66
+ let visibleTopics = tocNodes.map(node => ({
67
+ tocId: node.tocId,
68
+ title: node.title
69
+ // TODO : breadcrumb
70
+ }));
71
+ this.dispatchEvent(new VisibleTopicsChangeEvent(this.map, visibleTopics));
72
+ });
73
+ }
74
+ }
75
+ registerComponent(e) {
76
+ e.stopPropagation();
77
+ const component = e.composedPath()[0];
78
+ component.setReaderStateManager(this.stateManager);
79
+ }
80
+ }
81
+ // language=CSS
82
+ FtReaderContext.styles = css `
83
+ `;
84
+ __decorate([
85
+ property()
86
+ ], FtReaderContext.prototype, "baseUrl", void 0);
87
+ __decorate([
88
+ property()
89
+ ], FtReaderContext.prototype, "apiIntegrationIdentifier", void 0);
90
+ __decorate([
91
+ property()
92
+ ], FtReaderContext.prototype, "mapId", void 0);
93
+ __decorate([
94
+ property()
95
+ ], FtReaderContext.prototype, "tocId", void 0);
96
+ __decorate([
97
+ property()
98
+ ], FtReaderContext.prototype, "section", void 0);
99
+ __decorate([
100
+ property({
101
+ type: Number,
102
+ converter: { fromAttribute: (value) => value ? +value : undefined }
103
+ })
104
+ ], FtReaderContext.prototype, "page", void 0);
105
+ __decorate([
106
+ redux()
107
+ ], FtReaderContext.prototype, "map", void 0);
108
+ __decorate([
109
+ redux()
110
+ ], FtReaderContext.prototype, "toc", void 0);
111
+ __decorate([
112
+ redux()
113
+ ], FtReaderContext.prototype, "visibleTopics", void 0);
114
+ //# sourceMappingURL=ft-reader-context.js.map
@@ -0,0 +1,4 @@
1
+ !function(t,n,r,e){function i(t){for(var n=arguments.length,r=Array(n>1?n-1:0),e=1;e<n;e++)r[e-1]=arguments[e];throw Error("[Immer] minified error nr: "+t+(r.length?" "+r.map((function(t){return"'"+t+"'"})).join(","):"")+". Find the full error at: https://bit.ly/3cXEKWf")}function o(t){return!!t&&!!t[V]}function u(t){return!!t&&(function(t){if(!t||"object"!=typeof t)return!1;var n=Object.getPrototypeOf(t);if(null===n)return!0;var r=Object.hasOwnProperty.call(n,"constructor")&&n.constructor;return r===Object||"function"==typeof r&&Function.toString.call(r)===J}(t)||Array.isArray(t)||!!t[L]||!!t.constructor[L]||d(t)||v(t))}function c(t,n,r){void 0===r&&(r=!1),0===a(t)?(r?Object.keys:W)(t).forEach((function(e){r&&"symbol"==typeof e||n(e,t[e],t)})):t.forEach((function(r,e){return n(e,r,t)}))}function a(t){var n=t[V];return n?n.i>3?n.i-4:n.i:Array.isArray(t)?1:d(t)?2:v(t)?3:0}function s(t,n){return 2===a(t)?t.has(n):Object.prototype.hasOwnProperty.call(t,n)}function f(t,n,r){var e=a(t);2===e?t.set(n,r):3===e?(t.delete(n),t.add(r)):t[n]=r}function l(t,n){return t===n?0!==t||1/t==1/n:t!=t&&n!=n}function d(t){return N&&t instanceof Map}function v(t){return G&&t instanceof Set}function h(t){return t.o||t.t}function p(t){if(Array.isArray(t))return Array.prototype.slice.call(t);var n=X(t);delete n[V];for(var r=W(n),e=0;e<r.length;e++){var i=r[e],o=n[i];!1===o.writable&&(o.writable=!0,o.configurable=!0),(o.get||o.set)&&(n[i]={configurable:!0,writable:!0,enumerable:o.enumerable,value:t[i]})}return Object.create(Object.getPrototypeOf(t),n)}function b(t,n){return void 0===n&&(n=!1),w(t)||o(t)||!u(t)||(a(t)>1&&(t.set=t.add=t.clear=t.delete=y),Object.freeze(t),n&&c(t,(function(t,n){return b(n,!0)}),!0)),t}function y(){i(2)}function w(t){return null==t||"object"!=typeof t||Object.isFrozen(t)}function m(t){var n=Y[t];return n||i(18,t),n}function g(){return $}function j(t,n){n&&(m("Patches"),t.u=[],t.s=[],t.v=n)}function I(t){O(t),t.p.forEach(T),t.p=null}function O(t){t===$&&($=t.l)}function P(t){return $={p:[],l:$,h:t,m:!0,_:0}}function T(t){var n=t[V];0===n.i||1===n.i?n.j():n.O=!0}function A(t,n){n._=n.p.length;var r=n.p[0],e=void 0!==t&&t!==r;return n.h.g||m("ES5").S(n,t,e),e?(r[V].P&&(I(n),i(4)),u(t)&&(t=S(n,t),n.l||M(n,t)),n.u&&m("Patches").M(r[V].t,t,n.u,n.s)):t=S(n,r,[]),I(n),n.u&&n.v(n.u,n.s),t!==q?t:void 0}function S(t,n,r){if(w(n))return n;var e=n[V];if(!e)return c(n,(function(i,o){return E(t,e,n,i,o,r)}),!0),n;if(e.A!==t)return n;if(!e.P)return M(t,e.t,!0),e.t;if(!e.I){e.I=!0,e.A._--;var i=4===e.i||5===e.i?e.o=p(e.k):e.o;c(3===e.i?new Set(i):i,(function(n,o){return E(t,e,i,n,o,r)})),M(t,i,!1),r&&t.u&&m("Patches").R(e,r,t.u,t.s)}return e.o}function E(t,n,r,e,i,c){if(o(i)){var a=S(t,i,c&&n&&3!==n.i&&!s(n.D,e)?c.concat(e):void 0);if(f(r,e,a),!o(a))return;t.m=!1}if(u(i)&&!w(i)){if(!t.h.F&&t._<1)return;S(t,i),n&&n.A.l||M(t,i)}}function M(t,n,r){void 0===r&&(r=!1),t.h.F&&t.m&&b(n,r)}function _(t,n){var r=t[V];return(r?h(r):t)[n]}function C(t,n){if(n in t)for(var r=Object.getPrototypeOf(t);r;){var e=Object.getOwnPropertyDescriptor(r,n);if(e)return e;r=Object.getPrototypeOf(r)}}function x(t){t.P||(t.P=!0,t.l&&x(t.l))}function R(t){t.o||(t.o=p(t.t))}function U(t,n,r){var e=d(n)?m("MapSet").N(n,r):v(n)?m("MapSet").T(n,r):t.g?function(t,n){var r=Array.isArray(t),e={i:r?1:0,A:n?n.A:g(),P:!1,I:!1,D:{},l:n,t,k:null,o:null,j:null,C:!1},i=e,o=z;r&&(i=[e],o=H);var u=Proxy.revocable(i,o),c=u.revoke,a=u.proxy;return e.k=a,e.j=c,a}(n,r):m("ES5").J(n,r);return(r?r.A:g()).p.push(e),e}function D(t){return o(t)||i(22,t),function t(n){if(!u(n))return n;var r,e=n[V],i=a(n);if(e){if(!e.P&&(e.i<4||!m("ES5").K(e)))return e.t;e.I=!0,r=k(n,i),e.I=!1}else r=k(n,i);return c(r,(function(n,i){e&&function(t,n){return 2===a(t)?t.get(n):t[n]}(e.t,n)===i||f(r,n,t(i))})),3===i?new Set(r):r}(t)}function k(t,n){switch(n){case 2:return new Map(t);case 3:return Array.from(t)}return p(t)}var B,$,F="undefined"!=typeof Symbol&&"symbol"==typeof Symbol("x"),N="undefined"!=typeof Map,G="undefined"!=typeof Set,K="undefined"!=typeof Proxy&&void 0!==Proxy.revocable&&"undefined"!=typeof Reflect,q=F?Symbol.for("immer-nothing"):((B={})["immer-nothing"]=!0,B),L=F?Symbol.for("immer-draftable"):"__$immer_draftable",V=F?Symbol.for("immer-state"):"__$immer_state",J=""+Object.prototype.constructor,W="undefined"!=typeof Reflect&&Reflect.ownKeys?Reflect.ownKeys:void 0!==Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:Object.getOwnPropertyNames,X=Object.getOwnPropertyDescriptors||function(t){var n={};return W(t).forEach((function(r){n[r]=Object.getOwnPropertyDescriptor(t,r)})),n},Y={},z={get:function(t,n){if(n===V)return t;var r=h(t);if(!s(r,n))return function(t,n,r){var e,i=C(n,r);return i?"value"in i?i.value:null===(e=i.get)||void 0===e?void 0:e.call(t.k):void 0}(t,r,n);var e=r[n];return t.I||!u(e)?e:e===_(t.t,n)?(R(t),t.o[n]=U(t.A.h,e,t)):e},has:function(t,n){return n in h(t)},ownKeys:function(t){return Reflect.ownKeys(h(t))},set:function(t,n,r){var e=C(h(t),n);if(null==e?void 0:e.set)return e.set.call(t.k,r),!0;if(!t.P){var i=_(h(t),n),o=null==i?void 0:i[V];if(o&&o.t===r)return t.o[n]=r,t.D[n]=!1,!0;if(l(r,i)&&(void 0!==r||s(t.t,n)))return!0;R(t),x(t)}return t.o[n]===r&&"number"!=typeof r&&(void 0!==r||n in t.o)||(t.o[n]=r,t.D[n]=!0,!0)},deleteProperty:function(t,n){return void 0!==_(t.t,n)||n in t.t?(t.D[n]=!1,R(t),x(t)):delete t.D[n],t.o&&delete t.o[n],!0},getOwnPropertyDescriptor:function(t,n){var r=h(t),e=Reflect.getOwnPropertyDescriptor(r,n);return e?{writable:!0,configurable:1!==t.i||"length"!==n,enumerable:e.enumerable,value:r[n]}:e},defineProperty:function(){i(11)},getPrototypeOf:function(t){return Object.getPrototypeOf(t.t)},setPrototypeOf:function(){i(12)}},H={};c(z,(function(t,n){H[t]=function(){return arguments[0]=arguments[0][0],n.apply(this,arguments)}})),H.deleteProperty=function(t,n){return H.set.call(this,t,n,void 0)},H.set=function(t,n,r){return z.set.call(this,t[0],n,r,t[0])};var Q=function(){function t(t){var n=this;this.g=K,this.F=!0,this.produce=function(t,r,e){if("function"==typeof t&&"function"!=typeof r){var o=r;r=t;var c=n;return function(t){var n=this;void 0===t&&(t=o);for(var e=arguments.length,i=Array(e>1?e-1:0),u=1;u<e;u++)i[u-1]=arguments[u];return c.produce(t,(function(t){var e;return(e=r).call.apply(e,[n,t].concat(i))}))}}var a;if("function"!=typeof r&&i(6),void 0!==e&&"function"!=typeof e&&i(7),u(t)){var s=P(n),f=U(n,t,void 0),l=!0;try{a=r(f),l=!1}finally{l?I(s):O(s)}return"undefined"!=typeof Promise&&a instanceof Promise?a.then((function(t){return j(s,e),A(t,s)}),(function(t){throw I(s),t})):(j(s,e),A(a,s))}if(!t||"object"!=typeof t){if(void 0===(a=r(t))&&(a=t),a===q&&(a=void 0),n.F&&b(a,!0),e){var d=[],v=[];m("Patches").M(t,a,d,v),e(d,v)}return a}i(21,t)},this.produceWithPatches=function(t,r){if("function"==typeof t)return function(r){for(var e=arguments.length,i=Array(e>1?e-1:0),o=1;o<e;o++)i[o-1]=arguments[o];return n.produceWithPatches(r,(function(n){return t.apply(void 0,[n].concat(i))}))};var e,i,o=n.produce(t,r,(function(t,n){e=t,i=n}));return"undefined"!=typeof Promise&&o instanceof Promise?o.then((function(t){return[t,e,i]})):[o,e,i]},"boolean"==typeof(null==t?void 0:t.useProxies)&&this.setUseProxies(t.useProxies),"boolean"==typeof(null==t?void 0:t.autoFreeze)&&this.setAutoFreeze(t.autoFreeze)}var n=t.prototype;return n.createDraft=function(t){u(t)||i(8),o(t)&&(t=D(t));var n=P(this),r=U(this,t,void 0);return r[V].C=!0,O(n),r},n.finishDraft=function(t,n){var r=(t&&t[V]).A;return j(r,n),A(void 0,r)},n.setAutoFreeze=function(t){this.F=t},n.setUseProxies=function(t){t&&!K&&i(20),this.g=t},n.applyPatches=function(t,n){var r;for(r=n.length-1;r>=0;r--){var e=n[r];if(0===e.path.length&&"replace"===e.op){t=e.value;break}}r>-1&&(n=n.slice(r+1));var i=m("Patches").$;return o(t)?i(t,n):this.produce(t,(function(t){return i(t,n)}))},t}(),Z=new Q,tt=Z.produce;Z.produceWithPatches.bind(Z),Z.setAutoFreeze.bind(Z),Z.setUseProxies.bind(Z),Z.applyPatches.bind(Z),Z.createDraft.bind(Z),Z.finishDraft.bind(Z);var nt,rt=tt,et=(nt=function(t,n){return nt=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])},nt(t,n)},function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}nt(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}),it=function(t,n){for(var r=0,e=n.length,i=t.length;r<e;r++,i++)t[i]=n[r];return t},ot=Object.defineProperty,ut=Object.getOwnPropertySymbols,ct=Object.prototype.hasOwnProperty,at=Object.prototype.propertyIsEnumerable,st=function(t,n,r){return n in t?ot(t,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[n]=r},ft=function(t,n){for(var r in n||(n={}))ct.call(n,r)&&st(t,r,n[r]);if(ut)for(var e=0,i=ut(n);e<i.length;e++){r=i[e];at.call(n,r)&&st(t,r,n[r])}return t};function lt(t){return u(t)?rt(t,(function(){})):t}function dt(t,n){function r(){for(var r=[],e=0;e<arguments.length;e++)r[e]=arguments[e];if(n){var i=n.apply(void 0,r);if(!i)throw new Error("prepareAction did not return an object");return ft(ft({type:t,payload:i.payload},"meta"in i&&{meta:i.meta}),"error"in i&&{error:i.error})}return{type:t,payload:r[0]}}return r.toString=function(){return""+t},r.type=t,r.match=function(n){return n.type===t},r}function vt(t){var n,r={},e=[],i={addCase:function(t,n){var e="string"==typeof t?t:t.type;if(e in r)throw new Error("addCase cannot be called with two reducers for the same action type");return r[e]=n,i},addMatcher:function(t,n){return e.push({matcher:t,reducer:n}),i},addDefaultCase:function(t){return n=t,i}};return t(i),[r,e,n]}function ht(t){var n=t.name;if(!n)throw new Error("`name` is a required option for createSlice");var r,e="function"==typeof t.initialState?t.initialState:lt(t.initialState),i=t.reducers||{},c=Object.keys(i),a={},s={},f={};function l(){var n="function"==typeof t.extraReducers?vt(t.extraReducers):[t.extraReducers],r=n[0],i=void 0===r?{}:r,c=n[1],a=void 0===c?[]:c,f=n[2],l=void 0===f?void 0:f,d=ft(ft({},i),s);return function(t,n,r,e){void 0===r&&(r=[]);var i,c="function"==typeof n?vt(n):[n,r,e],a=c[0],s=c[1],f=c[2];if(function(t){return"function"==typeof t}(t))i=function(){return lt(t())};else{var l=lt(t);i=function(){return l}}function d(t,n){void 0===t&&(t=i());var r=it([a[n.type]],s.filter((function(t){return(0,t.matcher)(n)})).map((function(t){return t.reducer})));return 0===r.filter((function(t){return!!t})).length&&(r=[f]),r.reduce((function(t,r){if(r){var e;if(o(t))return void 0===(e=r(t,n))?t:e;if(u(t))return rt(t,(function(t){return r(t,n)}));if(void 0===(e=r(t,n))){if(null===t)return t;throw Error("A case reducer on a non-draftable value must not return undefined")}return e}return t}),t)}return d.getInitialState=i,d}(e,d,a,l)}return c.forEach((function(t){var r,e,o=i[t],u=n+"/"+t;"reducer"in o?(r=o.reducer,e=o.prepare):r=o,a[t]=r,s[u]=r,f[t]=e?dt(u,e):dt(u)})),{name:n,reducer:function(t,n){return r||(r=l()),r(t,n)},actions:f,caseReducers:a,getInitialState:function(){return r||(r=l()),r.getInitialState()}}}!function(t){function n(){for(var r=[],e=0;e<arguments.length;e++)r[e]=arguments[e];var i=t.apply(this,r)||this;return Object.setPrototypeOf(i,n.prototype),i}et(n,t),Object.defineProperty(n,Symbol.species,{get:function(){return n},enumerable:!1,configurable:!0}),n.prototype.concat=function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];return t.prototype.concat.apply(this,n)},n.prototype.prepend=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return 1===t.length&&Array.isArray(t[0])?new(n.bind.apply(n,it([void 0],t[0].concat(this)))):new(n.bind.apply(n,it([void 0],t.concat(this))))}}(Array);var pt="listenerMiddleware";dt(pt+"/add"),dt(pt+"/removeAll"),dt(pt+"/remove"),function(){function t(t,n){var r=i[t];return r?r.enumerable=n:i[t]=r={configurable:!0,enumerable:n,get:function(){var n=this[V];return z.get(n,t)},set:function(n){var r=this[V];z.set(r,t,n)}},r}function n(t){for(var n=t.length-1;n>=0;n--){var i=t[n][V];if(!i.P)switch(i.i){case 5:e(i)&&x(i);break;case 4:r(i)&&x(i)}}}function r(t){for(var n=t.t,r=t.k,e=W(r),i=e.length-1;i>=0;i--){var o=e[i];if(o!==V){var u=n[o];if(void 0===u&&!s(n,o))return!0;var c=r[o],a=c&&c[V];if(a?a.t!==u:!l(c,u))return!0}}var f=!!n[V];return e.length!==W(n).length+(f?0:1)}function e(t){var n=t.k;if(n.length!==t.t.length)return!0;var r=Object.getOwnPropertyDescriptor(n,n.length-1);if(r&&!r.get)return!0;for(var e=0;e<n.length;e++)if(!n.hasOwnProperty(e))return!0;return!1}var i={};!function(t,n){Y[t]||(Y[t]=n)}("ES5",{J:function(n,r){var e=Array.isArray(n),i=function(n,r){if(n){for(var e=Array(r.length),i=0;i<r.length;i++)Object.defineProperty(e,""+i,t(i,!0));return e}var o=X(r);delete o[V];for(var u=W(o),c=0;c<u.length;c++){var a=u[c];o[a]=t(a,n||!!o[a].enumerable)}return Object.create(Object.getPrototypeOf(r),o)}(e,n),o={i:e?5:4,A:r?r.A:g(),P:!1,I:!1,D:{},l:r,t:n,k:i,o:null,O:!1,C:!1};return Object.defineProperty(i,V,{value:o,writable:!0}),i},S:function(t,r,i){i?o(r)&&r[V].A===t&&n(t.p):(t.u&&function t(n){if(n&&"object"==typeof n){var r=n[V];if(r){var i=r.t,o=r.k,u=r.D,a=r.i;if(4===a)c(o,(function(n){n!==V&&(void 0!==i[n]||s(i,n)?u[n]||t(o[n]):(u[n]=!0,x(r)))})),c(i,(function(t){void 0!==o[t]||s(o,t)||(u[t]=!1,x(r))}));else if(5===a){if(e(r)&&(x(r),u.length=!0),o.length<i.length)for(var f=o.length;f<i.length;f++)u[f]=!1;else for(var l=i.length;l<o.length;l++)u[l]=!0;for(var d=Math.min(o.length,i.length),v=0;v<d;v++)o.hasOwnProperty(v)||(u[v]=!0),void 0===u[v]&&t(o[v])}}}}(t.p[0]),n(t.p))},K:function(t){return 4===t.i?r(t):e(t)}})}();const bt={setBaseUrl:(t,n)=>{t.baseUrl=n.payload},setApiIntegrationIdentifier:(t,n)=>{t.apiIntegrationIdentifier=n.payload},setMapId:(t,n)=>{t.mapId=n.payload},setTocId:(t,n)=>{t.tocId=n.payload},setMap:(t,n)=>{t.map=n.payload},setToc:(t,n)=>{t.toc=n.payload},setCurrentPage:(t,n)=>{t.currentPage=n.payload},setScrollTarget:(t,n)=>{t.scrollTarget=n.payload},setVisibleTopics:(t,n)=>{t.visibleTopics=n.payload}};class yt{convertNodes(t){var n,r,e,i;const o={},u=new Set,c=new Set,a=[],s=(t,n,r)=>t.map((t=>{var e;t.page&&a.push(t.tocId);let i=null===(e=t.prettyUrl)||void 0===e?void 0:e.replace(/^\//,"");const f={...t,prettyUrl:i,depth:n,parentTocId:r,children:s(t.children,n+1,t.tocId)};return i&&(u.has(i)&&c.add(i),u.add(i)),o[t.tocId]=f,f})),f=s(null!=t?t:[],1),l=this.buildPages(a,o);let d={};return 0===l.length?l.push({number:1,title:null!==(r=null===(n=f[0])||void 0===n?void 0:n.title)&&void 0!==r?r:"",rootTocId:null!==(i=null===(e=f[0])||void 0===e?void 0:e.tocId)&&void 0!==i?i:"root",toc:[],topics:this.tocIds(f),hiddenTopics:[]}):d=this.indexPages(l),{toc:f,nodeByTocId:o,duplicatedPrettyUrls:c,pages:l,pageByTocId:d}}tocIds(t){return t.flatMap((t=>[t.tocId,...this.tocIds(t.children)]))}buildPages(t,n){const r=t=>t.parentTocId?[...r(n[t.parentTocId]),t.parentTocId]:[];return t.map((t=>n[t])).map(((t,n)=>{var e,i,o,u,c;const a={number:n+1,title:t.title,rootTocId:t.tocId,toc:(null===(e=t.page)||void 0===e?void 0:e.onItsOwn)?[]:t.children,topics:[],hiddenTopics:[]},s=(t,n)=>(n?a.topics:a.hiddenTopics).push(t),f=null!==(o=null===(i=t.page)||void 0===i?void 0:i.parentsVisibility)&&void 0!==o?o:[];return r(t).forEach(((t,n)=>{s(t,f[n])})),s(t.tocId,null===(u=t.page)||void 0===u?void 0:u.visible),(null===(c=t.page)||void 0===c?void 0:c.onItsOwn)||a.topics.push(...this.tocIds(t.children)),a}))}indexPages(t){const n={};for(let r of t)for(let t of[...r.topics,...r.hiddenTopics])n[t]||(n[t]=r);return n}}class wt{constructor(t,n,r,e){this.converter=t,this.api=n,this.baseUrl=r,this.mapId=e,this.topics={},this.topicContents={},r.endsWith("/")||(this.baseUrl=r+"/")}static build(t,n,r){if(null==window.fluidtopics)throw console.error("Fluid Topics public API was not found. You can find it here: https://www.npmjs.com/package/@fluid-topics/public-api"),new Error("Fluid Topics public API not found");return new wt(new yt,new window.fluidtopics.FluidTopicsApi(t,n,!0),t,r)}clear(){this.map=void 0,this.enrichedToc=void 0,this.topics={},this.topicContents={}}getMap(){return this.loadIfNeeded((()=>this.map),(t=>this.map=t),(()=>this.api.getMap(this.mapId)))}getEnrichedToc(){return this.loadIfNeeded((()=>this.enrichedToc),(t=>this.enrichedToc=t),(()=>this.api.getTableOfContent(this.mapId).then((t=>this.converter.convertNodes(t)))))}async getToc(){return(await this.getEnrichedToc()).toc}async getTocNode(t){return(await this.getEnrichedToc()).nodeByTocId[t]}async getPage(t){const n=await this.getEnrichedToc();return n.pages[t-1]||n.pages[0]}async getPageByTocId(t){const n=await this.getEnrichedToc();return n.pageByTocId[t]||n.pages[0]}getTopicInfo(t){return this.loadIfNeeded((()=>this.topics[t]),(n=>this.topics[t]=n),(()=>this.api.getTopic(this.mapId,t)))}getTopicContent(t){return this.loadIfNeeded((()=>this.topicContents[t]),(n=>this.topicContents[t]=n),(()=>this.api.getTopicHTMLContent(this.mapId,t,"DESIGNED_READER")))}getLink(t,n,r){var e;t=t||"root";let i=this.enrichedToc,o=null===(e=null==i?void 0:i.nodeByTocId[t])||void 0===e?void 0:e.prettyUrl,u=o||`r/${this.mapId}/${t}`,c=new URL(u,this.baseUrl),a=null==i?void 0:i.pageByTocId[t];return n&&a&&a.number!==n&&c.searchParams.set("page",`${n}`),o&&(null==i?void 0:i.duplicatedPrettyUrls.has(o))&&c.searchParams.set("tocId",t),r&&c.searchParams.set("section",r),c.href}async loadIfNeeded(t,r,e){for(void 0===t()&&(r(!0),r(await e().catch((t=>(console.error(t),!1)))));!0===t();)await n.delay(10);const i=t();if(!1===i)throw new Error("Could not load data");return i}}class mt{constructor(t,r){this.store=t,this.slice=r,this.reloadDebouncer=new n.Debouncer(10)}static build(t){const r=(t=>ht({name:"ft-reader-"+t,initialState:{baseUrl:"",apiIntegrationIdentifier:"ft-reader",visibleTopics:[]},reducers:bt}))(t.trim()||"context");return new mt(n.getStore(r),r)}setBaseUrl(t){this.setRequiredStateField("baseUrl","setBaseUrl",t)}setApiIntegrationIdentifier(t){this.setRequiredStateField("apiIntegrationIdentifier","setApiIntegrationIdentifier",t)}setMapId(t){this.setRequiredStateField("mapId","setMapId",t)}setVisibleTopics(t){this.dispatch(this.slice.actions.setVisibleTopics(t))}async navigateToTopic(t,r,e){for(;null===this.service;)await n.delay(5);let i=null!=e?await this.service.getPage(e):await this.service.getPageByTocId(t);console.log(e,i),this.dispatch(this.slice.actions.setCurrentPage(i),this.slice.actions.setScrollTarget({tocId:t,section:r}))}async navigateToPage(t){for(;null===this.service;)await n.delay(5);let r=await this.service.getPage(t);this.dispatch(this.slice.actions.setCurrentPage(r))}scrollDone(){this.dispatch(this.slice.actions.setScrollTarget({}))}setRequiredStateField(t,n,r){this.store.getState()[t]!==r&&(this.dispatch(this.slice.actions[n](r)),this.clearAll(),this.reload())}clearAll(){this.dispatch(this.slice.actions.setMap(void 0),this.slice.actions.setToc(void 0),this.slice.actions.setCurrentPage(void 0))}reload(){const t=this.store.getState();t.baseUrl&&t.apiIntegrationIdentifier&&t.mapId?this.service=wt.build(t.baseUrl,t.apiIntegrationIdentifier,t.mapId):this.service=void 0,this.reloadDebouncer.run((async()=>{this.reloadMap(),this.reloadToc()}))}async reloadMap(){var t;const n=await(null===(t=this.service)||void 0===t?void 0:t.getMap());this.dispatch(this.slice.actions.setMap(n))}async reloadToc(){var t;const n=await(null===(t=this.service)||void 0===t?void 0:t.getToc());this.dispatch(this.slice.actions.setToc(n))}dispatch(...t){for(let n of t)this.store.dispatch(n)}}var gt=function(t,n,r,e){for(var i,o=arguments.length,u=o<3?n:null===e?e=Object.getOwnPropertyDescriptor(n,r):e,c=t.length-1;c>=0;c--)(i=t[c])&&(u=(o<3?i(u):o>3?i(n,r,u):i(n,r))||u);return o>3&&u&&Object.defineProperty(n,r,u),u};class jt extends CustomEvent{constructor(t){super("ft-reader-map-loaded",{detail:t})}}class It extends CustomEvent{constructor(t,n){super("ft-reader-visible-topics-change",{detail:{map:t,visibleTopics:n}})}}class Ot extends n.FtLitElementRedux{constructor(){super(...arguments),this.apiIntegrationIdentifier="ft-reader",this.visibleTopics=[]}render(){return r.html`
2
+ <slot @register-ft-reader-component=${this.registerComponent}></slot>
3
+ `}get stateManager(){return null==this._stateManager&&(this._stateManager=mt.build(this.id||""+Math.round(1e4*Math.random())),this.store=this.stateManager.store),this._stateManager}updated(t){super.updated(t),t.has("baseUrl")&&this.baseUrl&&this.stateManager.setBaseUrl(this.baseUrl),t.has("apiIntegrationIdentifier")&&this.stateManager.setApiIntegrationIdentifier(this.apiIntegrationIdentifier),t.has("mapId")&&this.mapId&&(this.stateManager.setMapId(this.mapId),this.stateManager.navigateToTopic("root")),t.has("page")&&!this.tocId&&null!=this.page&&this.stateManager.navigateToPage(this.page),(t.has("tocId")||t.has("section")||t.has("page"))&&this.tocId&&this.stateManager.navigateToTopic(this.tocId,this.section,this.page)}contentAvailableCallback(t){super.contentAvailableCallback(t),(t.has("map")||t.has("toc"))&&this.map&&this.toc&&this.dispatchEvent(new jt(this.map)),t.has("visibleTopics")&&Promise.all(this.visibleTopics.map((t=>this.stateManager.service.getTocNode(t)))).then((t=>{let n=t.map((t=>({tocId:t.tocId,title:t.title})));this.dispatchEvent(new It(this.map,n))}))}registerComponent(t){t.stopPropagation();t.composedPath()[0].setReaderStateManager(this.stateManager)}}Ot.styles=r.css`
4
+ `,gt([e.property()],Ot.prototype,"baseUrl",void 0),gt([e.property()],Ot.prototype,"apiIntegrationIdentifier",void 0),gt([e.property()],Ot.prototype,"mapId",void 0),gt([e.property()],Ot.prototype,"tocId",void 0),gt([e.property()],Ot.prototype,"section",void 0),gt([e.property({type:Number,converter:{fromAttribute:t=>t?+t:void 0}})],Ot.prototype,"page",void 0),gt([n.redux()],Ot.prototype,"map",void 0),gt([n.redux()],Ot.prototype,"toc",void 0),gt([n.redux()],Ot.prototype,"visibleTopics",void 0),n.customElement("ft-reader-context")(Ot),t.FtReaderContext=Ot,t.MapLoadedEvent=jt,t.VisibleTopicsChangeEvent=It,Object.defineProperty(t,"U",{value:!0})}({},ftGlobals.wcUtils,ftGlobals.lit,ftGlobals.litDecorators);
@@ -0,0 +1,72 @@
1
+ !function(t){
2
+ /**
3
+ * @license
4
+ * Copyright (c) 2020 The Polymer Project Authors. All rights reserved.
5
+ * This code may only be used under the BSD style license found at
6
+ * http://polymer.github.io/LICENSE.txt
7
+ * The complete set of authors may be found at
8
+ * http://polymer.github.io/AUTHORS.txt
9
+ * The complete set of contributors may be found at
10
+ * http://polymer.github.io/CONTRIBUTORS.txt
11
+ * Code distributed by Google as part of the polymer project is also
12
+ * subject to an additional IP rights grant found at
13
+ * http://polymer.github.io/PATENTS.txt
14
+ *
15
+ * @see https://github.com/webcomponents/polyfills/tree/master/packages/scoped-custom-element-registry
16
+ */
17
+ if(!ShadowRoot.prototype.createElement){const t=window.HTMLElement,e=window.customElements.define,i=window.customElements.get,n=window.customElements,r=new WeakMap,o=new WeakMap,s=new WeakMap,u=new WeakMap;let c;window.CustomElementRegistry=class{constructor(){this._definitionsByTag=new Map,this._definitionsByClass=new Map,this._whenDefinedPromises=new Map,this._awaitingUpgrade=new Map}define(t,r){if(t=t.toLowerCase(),void 0!==this._getDefinition(t))throw new DOMException(`Failed to execute 'define' on 'CustomElementRegistry': the name "${t}" has already been used with this registry`);if(void 0!==this._definitionsByClass.get(r))throw new DOMException("Failed to execute 'define' on 'CustomElementRegistry': this constructor has already been used with this registry");const u=r.prototype.attributeChangedCallback,c=new Set(r.observedAttributes||[]);h(r,c,u);const a={elementClass:r,connectedCallback:r.prototype.connectedCallback,disconnectedCallback:r.prototype.disconnectedCallback,adoptedCallback:r.prototype.adoptedCallback,attributeChangedCallback:u,formAssociated:r.formAssociated,formAssociatedCallback:r.prototype.formAssociatedCallback,formDisabledCallback:r.prototype.formDisabledCallback,formResetCallback:r.prototype.formResetCallback,formStateRestoreCallback:r.prototype.formStateRestoreCallback,observedAttributes:c};this._definitionsByTag.set(t,a),this._definitionsByClass.set(r,a);let l=i.call(n,t);l||(l=f(t),e.call(n,t,l)),this===window.customElements&&(s.set(r,a),a.standInClass=l);const d=this._awaitingUpgrade.get(t);if(d){this._awaitingUpgrade.delete(t);for(const t of d)o.delete(t),v(t,a,!0)}const p=this._whenDefinedPromises.get(t);return void 0!==p&&(p.resolve(r),this._whenDefinedPromises.delete(t)),r}upgrade(){b.push(this),n.upgrade.apply(n,arguments),b.pop()}get(t){return this._definitionsByTag.get(t)?.elementClass}_getDefinition(t){return this._definitionsByTag.get(t)}whenDefined(t){const e=this._getDefinition(t);if(void 0!==e)return Promise.resolve(e.elementClass);let i=this._whenDefinedPromises.get(t);return void 0===i&&(i={},i.promise=new Promise((t=>i.resolve=t)),this._whenDefinedPromises.set(t,i)),i.promise}_upgradeWhenDefined(t,e,i){let n=this._awaitingUpgrade.get(e);n||this._awaitingUpgrade.set(e,n=new Set),i?n.add(t):n.delete(t)}},window.HTMLElement=function(){let e=c;if(e)return c=void 0,e;const i=s.get(this.constructor);if(!i)throw new TypeError("Illegal constructor (custom element class must be registered with global customElements registry to be newable)");return e=Reflect.construct(t,[],i.standInClass),Object.setPrototypeOf(e,this.constructor.prototype),r.set(e,i),e},window.HTMLElement.prototype=t.prototype;const a=t=>t===document||t instanceof ShadowRoot,l=t=>{let e=t.getRootNode();if(!a(e)){const t=b[b.length-1];if(t instanceof CustomElementRegistry)return t;e=t.getRootNode(),a(e)||(e=u.get(e)?.getRootNode()||document)}return e.customElements},f=e=>class{static get formAssociated(){return!0}constructor(){const i=Reflect.construct(t,[],this.constructor);Object.setPrototypeOf(i,HTMLElement.prototype);const n=l(i)||window.customElements,r=n._getDefinition(e);return r?v(i,r):o.set(i,n),i}connectedCallback(){const t=r.get(this);t?t.connectedCallback&&t.connectedCallback.apply(this,arguments):o.get(this)._upgradeWhenDefined(this,e,!0)}disconnectedCallback(){const t=r.get(this);t?t.disconnectedCallback&&t.disconnectedCallback.apply(this,arguments):o.get(this)._upgradeWhenDefined(this,e,!1)}adoptedCallback(){r.get(this)?.adoptedCallback?.apply(this,arguments)}formAssociatedCallback(){const t=r.get(this);t&&t.formAssociated&&t?.formAssociatedCallback?.apply(this,arguments)}formDisabledCallback(){const t=r.get(this);t?.formAssociated&&t?.formDisabledCallback?.apply(this,arguments)}formResetCallback(){const t=r.get(this);t?.formAssociated&&t?.formResetCallback?.apply(this,arguments)}formStateRestoreCallback(){const t=r.get(this);t?.formAssociated&&t?.formStateRestoreCallback?.apply(this,arguments)}},h=(t,e,i)=>{if(0===e.size||void 0===i)return;const n=t.prototype.setAttribute;n&&(t.prototype.setAttribute=function(t,r){const o=t.toLowerCase();if(e.has(o)){const t=this.getAttribute(o);n.call(this,o,r),i.call(this,o,t,r)}else n.call(this,o,r)});const r=t.prototype.removeAttribute;r&&(t.prototype.removeAttribute=function(t){const n=t.toLowerCase();if(e.has(n)){const t=this.getAttribute(n);r.call(this,n),i.call(this,n,t,null)}else r.call(this,n)})},d=e=>{const i=Object.getPrototypeOf(e);if(i!==window.HTMLElement)return i===t||"HTMLElement"===i?.prototype?.constructor?.name?Object.setPrototypeOf(e,window.HTMLElement):d(i)},v=(t,e,i=!1)=>{Object.setPrototypeOf(t,e.elementClass.prototype),r.set(t,e),c=t;try{new e.elementClass}catch(t){d(e.elementClass),new e.elementClass}e.observedAttributes.forEach((i=>{t.hasAttribute(i)&&e.attributeChangedCallback.call(t,i,null,t.getAttribute(i))})),i&&e.connectedCallback&&t.isConnected&&e.connectedCallback.call(t)},p=Element.prototype.attachShadow;Element.prototype.attachShadow=function(t){const e=p.apply(this,arguments);return t.customElements&&(e.customElements=t.customElements),e};let b=[document];const w=(t,e,i)=>{const n=(i?Object.getPrototypeOf(i):t.prototype)[e];t.prototype[e]=function(){b.push(this);const t=n.apply(i||this,arguments);return void 0!==t&&u.set(t,this),b.pop(),t}};w(ShadowRoot,"createElement",document),w(ShadowRoot,"importNode",document),w(Element,"insertAdjacentHTML");const y=(t,e)=>{const i=Object.getOwnPropertyDescriptor(t.prototype,e);Object.defineProperty(t.prototype,e,{...i,set(t){b.push(this),i.set.call(this,t),b.pop()}})};if(y(Element,"innerHTML"),y(ShadowRoot,"innerHTML"),Object.defineProperty(window,"customElements",{value:new CustomElementRegistry,configurable:!0,writable:!0}),window.ElementInternals&&window.ElementInternals.prototype.setFormValue){const t=new WeakMap,e=HTMLElement.prototype.attachInternals,i=["setFormValue","setValidity","checkValidity","reportValidity"];HTMLElement.prototype.attachInternals=function(...i){const n=e.call(this,...i);return t.set(n,this),n},i.forEach((e=>{const i=window.ElementInternals.prototype,n=i[e];i[e]=function(...e){const i=t.get(this);if(!0!==r.get(i).formAssociated)throw new DOMException(`Failed to execute ${n} on 'ElementInternals': The target element is not a form-associated custom element.`);n?.call(this,...e)}}));class n extends Array{constructor(t){super(...t),this._elements=t}get value(){return this._elements.find((t=>!0===t.checked))?.value||""}}class o{constructor(t){const e=new Map;t.forEach(((t,i)=>{const n=t.getAttribute("name"),r=e.get(n)||[];this[+i]=t,r.push(t),e.set(n,r)})),this.length=t.length,e.forEach(((t,e)=>{t&&(1===t.length?this[e]=t[0]:this[e]=new n(t))}))}namedItem(t){return this[t]}}const s=Object.getOwnPropertyDescriptor(HTMLFormElement.prototype,"elements");Object.defineProperty(HTMLFormElement.prototype,"elements",{get:function(){const t=s.get.call(this,[]),e=[];for(const i of t){const t=r.get(i);t&&!0!==t.formAssociated||e.push(i)}return new o(e)}})}}try{window.customElements.define("custom-element",null)}catch(t){const e=window.customElements.define;window.customElements.define=(t,i,n)=>{try{e.bind(window.customElements)(t,i,n)}catch(e){console.warn(t,i,n,e)}}}class e{constructor(t=0){this.timeout=t,this.callbacks=[]}run(t,e){this.callbacks=[t],this.debounce(e)}queue(t,e){this.callbacks.push(t),this.debounce(e)}cancel(){null!=this._debounce&&window.clearTimeout(this._debounce)}debounce(t){this.cancel(),this._debounce=window.setTimeout((()=>this.runCallbacks()),null!=t?t:this.timeout)}runCallbacks(){for(let t of this.callbacks)t();this.callbacks=[]}}
18
+ /**
19
+ * @license
20
+ * Copyright 2017 Google LLC
21
+ * SPDX-License-Identifier: BSD-3-Clause
22
+ */const i=(t,e)=>"method"===e.kind&&e.descriptor&&!("value"in e.descriptor)?{...e,finisher(i){i.createProperty(e.key,t)}}:{kind:"field",key:Symbol(),placement:"own",descriptor:{},originalKey:e.key,initializer(){"function"==typeof e.initializer&&(this[e.key]=e.initializer.call(this))},finisher(i){i.createProperty(e.key,t)}};function n(t){return(e,n)=>void 0!==n?((t,e,i)=>{e.constructor.createProperty(i,t)})(t,e,n):i(t,e)
23
+ /**
24
+ * @license
25
+ * Copyright 2021 Google LLC
26
+ * SPDX-License-Identifier: BSD-3-Clause
27
+ */}var r;null===(r=window.HTMLSlotElement)||void 0===r||r.prototype.assignedElements;function o(t,e){if(t===e)return!0;if(t&&e&&"object"==typeof t&&"object"==typeof e){if(t.constructor!==e.constructor)return!1;var i,n,r;if(Array.isArray(t)){if((i=t.length)!=e.length)return!1;for(n=i;0!=n--;)if(!o(t[n],e[n]))return!1;return!0}if(t instanceof Map&&e instanceof Map){if(t.size!==e.size)return!1;for(n of t.entries())if(!e.has(n[0]))return!1;for(n of t.entries())if(!o(n[1],e.get(n[0])))return!1;return!0}if(t instanceof Set&&e instanceof Set){if(t.size!==e.size)return!1;for(n of t.entries())if(!e.has(n[0]))return!1;return!0}if(t.constructor===RegExp)return t.source===e.source&&t.flags===e.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===e.valueOf();if((i=(r=Object.keys(t)).length)!==Object.keys(e).length)return!1;for(n=i;0!=n--;)if(!Object.prototype.hasOwnProperty.call(e,r[n]))return!1;for(n=i;0!=n--;){var s=r[n];if(!o(t[s],e[s]))return!1}return!0}return t!=t&&e!=e}const s=t=>new Promise((e=>setTimeout(e,t)))
28
+ /**
29
+ * @license
30
+ * Copyright 2019 Google LLC
31
+ * SPDX-License-Identifier: BSD-3-Clause
32
+ */,u=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,c=Symbol(),a=new WeakMap;class l{constructor(t,e,i){if(this._$cssResult$=!0,i!==c)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const e=this.t;if(u&&void 0===t){const i=void 0!==e&&1===e.length;i&&(t=a.get(e)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),i&&a.set(e,t))}return t}toString(){return this.cssText}}const f=t=>new l("string"==typeof t?t:t+"",void 0,c),h=(t,...e)=>{const i=1===t.length?t[0]:e.reduce(((e,i,n)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if("number"==typeof t)return t;throw Error("Value passed to 'css' function must be a 'css' function result: "+t+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+t[n+1]),t[0]);return new l(i,t,c)},d=(t,e)=>{u?t.adoptedStyleSheets=e.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet)):e.forEach((e=>{const i=document.createElement("style"),n=window.litNonce;void 0!==n&&i.setAttribute("nonce",n),i.textContent=e.cssText,t.appendChild(i)}))},v=u?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const i of t.cssRules)e+=i.cssText;return f(e)})(t):t
33
+ /**
34
+ * @license
35
+ * Copyright 2017 Google LLC
36
+ * SPDX-License-Identifier: BSD-3-Clause
37
+ */;var p;const b=window.trustedTypes,w=b?b.emptyScript:"",y=window.reactiveElementPolyfillSupport,m={toAttribute(t,e){switch(e){case Boolean:t=t?w:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){let i=t;switch(e){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},g=(t,e)=>e!==t&&(e==e||t==t),x={attribute:!0,type:String,converter:m,reflect:!1,hasChanged:g};class O extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this.u()}static addInitializer(t){var e;null!==(e=this.h)&&void 0!==e||(this.h=[]),this.h.push(t)}static get observedAttributes(){this.finalize();const t=[];return this.elementProperties.forEach(((e,i)=>{const n=this._$Ep(i,e);void 0!==n&&(this._$Ev.set(n,i),t.push(n))})),t}static createProperty(t,e=x){if(e.state&&(e.attribute=!1),this.finalize(),this.elementProperties.set(t,e),!e.noAccessor&&!this.prototype.hasOwnProperty(t)){const i="symbol"==typeof t?Symbol():"__"+t,n=this.getPropertyDescriptor(t,i,e);void 0!==n&&Object.defineProperty(this.prototype,t,n)}}static getPropertyDescriptor(t,e,i){return{get(){return this[e]},set(n){const r=this[t];this[e]=n,this.requestUpdate(t,r,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||x}static finalize(){if(this.hasOwnProperty("finalized"))return!1;this.finalized=!0;const t=Object.getPrototypeOf(this);if(t.finalize(),this.elementProperties=new Map(t.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){const t=this.properties,e=[...Object.getOwnPropertyNames(t),...Object.getOwnPropertySymbols(t)];for(const i of e)this.createProperty(i,t[i])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(t){const e=[];if(Array.isArray(t)){const i=new Set(t.flat(1/0).reverse());for(const t of i)e.unshift(v(t))}else void 0!==t&&e.push(v(t));return e}static _$Ep(t,e){const i=e.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof t?t.toLowerCase():void 0}u(){var t;this._$E_=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$Eg(),this.requestUpdate(),null===(t=this.constructor.h)||void 0===t||t.forEach((t=>t(this)))}addController(t){var e,i;(null!==(e=this._$ES)&&void 0!==e?e:this._$ES=[]).push(t),void 0!==this.renderRoot&&this.isConnected&&(null===(i=t.hostConnected)||void 0===i||i.call(t))}removeController(t){var e;null===(e=this._$ES)||void 0===e||e.splice(this._$ES.indexOf(t)>>>0,1)}_$Eg(){this.constructor.elementProperties.forEach(((t,e)=>{this.hasOwnProperty(e)&&(this._$Ei.set(e,this[e]),delete this[e])}))}createRenderRoot(){var t;const e=null!==(t=this.shadowRoot)&&void 0!==t?t:this.attachShadow(this.constructor.shadowRootOptions);return d(e,this.constructor.elementStyles),e}connectedCallback(){var t;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(t=this._$ES)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostConnected)||void 0===e?void 0:e.call(t)}))}enableUpdating(t){}disconnectedCallback(){var t;null===(t=this._$ES)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostDisconnected)||void 0===e?void 0:e.call(t)}))}attributeChangedCallback(t,e,i){this._$AK(t,i)}_$EO(t,e,i=x){var n,r;const o=this.constructor._$Ep(t,i);if(void 0!==o&&!0===i.reflect){const s=(null!==(r=null===(n=i.converter)||void 0===n?void 0:n.toAttribute)&&void 0!==r?r:m.toAttribute)(e,i.type);this._$El=t,null==s?this.removeAttribute(o):this.setAttribute(o,s),this._$El=null}}_$AK(t,e){var i,n;const r=this.constructor,o=r._$Ev.get(t);if(void 0!==o&&this._$El!==o){const t=r.getPropertyOptions(o),s=t.converter,u=null!==(n=null!==(i=null==s?void 0:s.fromAttribute)&&void 0!==i?i:"function"==typeof s?s:null)&&void 0!==n?n:m.fromAttribute;this._$El=o,this[o]=u(e,t.type),this._$El=null}}requestUpdate(t,e,i){let n=!0;void 0!==t&&(((i=i||this.constructor.getPropertyOptions(t)).hasChanged||g)(this[t],e)?(this._$AL.has(t)||this._$AL.set(t,e),!0===i.reflect&&this._$El!==t&&(void 0===this._$EC&&(this._$EC=new Map),this._$EC.set(t,i))):n=!1),!this.isUpdatePending&&n&&(this._$E_=this._$Ej())}async _$Ej(){this.isUpdatePending=!0;try{await this._$E_}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach(((t,e)=>this[e]=t)),this._$Ei=void 0);let e=!1;const i=this._$AL;try{e=this.shouldUpdate(i),e?(this.willUpdate(i),null===(t=this._$ES)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostUpdate)||void 0===e?void 0:e.call(t)})),this.update(i)):this._$Ek()}catch(t){throw e=!1,this._$Ek(),t}e&&this._$AE(i)}willUpdate(t){}_$AE(t){var e;null===(e=this._$ES)||void 0===e||e.forEach((t=>{var e;return null===(e=t.hostUpdated)||void 0===e?void 0:e.call(t)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(t){return!0}update(t){void 0!==this._$EC&&(this._$EC.forEach(((t,e)=>this._$EO(e,this[e],t))),this._$EC=void 0),this._$Ek()}updated(t){}firstUpdated(t){}}
38
+ /**
39
+ * @license
40
+ * Copyright 2017 Google LLC
41
+ * SPDX-License-Identifier: BSD-3-Clause
42
+ */
43
+ var E;O.finalized=!0,O.elementProperties=new Map,O.elementStyles=[],O.shadowRootOptions={mode:"open"},null==y||y({ReactiveElement:O}),(null!==(p=globalThis.reactiveElementVersions)&&void 0!==p?p:globalThis.reactiveElementVersions=[]).push("1.3.4");const j=globalThis.trustedTypes,N=j?j.createPolicy("lit-html",{createHTML:t=>t}):void 0,S=`lit$${(Math.random()+"").slice(9)}$`,R="?"+S,C=`<${R}>`,M=document,A=(t="")=>M.createComment(t),U=t=>null===t||"object"!=typeof t&&"function"!=typeof t,T=Array.isArray,$=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,I=/-->/g,k=/>/g,F=RegExp(">|[ \t\n\f\r](?:([^\\s\"'>=/]+)([ \t\n\f\r]*=[ \t\n\f\r]*(?:[^ \t\n\f\r\"'`<>=]|(\"|')|))|$)","g"),P=/'/g,_=/"/g,L=/^(?:script|style|textarea|title)$/i,B=(t=>(e,...i)=>({_$litType$:t,strings:e,values:i}))(1),W=Symbol.for("lit-noChange"),K=Symbol.for("lit-nothing"),D=new WeakMap,H=M.createTreeWalker(M,129,null,!1);class z{constructor({strings:t,_$litType$:e},i){let n;this.parts=[];let r=0,o=0;const s=t.length-1,u=this.parts,[c,a]=((t,e)=>{const i=t.length-1,n=[];let r,o=2===e?"<svg>":"",s=$;for(let e=0;e<i;e++){const i=t[e];let u,c,a=-1,l=0;for(;l<i.length&&(s.lastIndex=l,c=s.exec(i),null!==c);)l=s.lastIndex,s===$?"!--"===c[1]?s=I:void 0!==c[1]?s=k:void 0!==c[2]?(L.test(c[2])&&(r=RegExp("</"+c[2],"g")),s=F):void 0!==c[3]&&(s=F):s===F?">"===c[0]?(s=null!=r?r:$,a=-1):void 0===c[1]?a=-2:(a=s.lastIndex-c[2].length,u=c[1],s=void 0===c[3]?F:'"'===c[3]?_:P):s===_||s===P?s=F:s===I||s===k?s=$:(s=F,r=void 0);const f=s===F&&t[e+1].startsWith("/>")?" ":"";o+=s===$?i+C:a>=0?(n.push(u),i.slice(0,a)+"$lit$"+i.slice(a)+S+f):i+S+(-2===a?(n.push(void 0),e):f)}const u=o+(t[i]||"<?>")+(2===e?"</svg>":"");if(!Array.isArray(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return[void 0!==N?N.createHTML(u):u,n]})(t,e);if(this.el=z.createElement(c,i),H.currentNode=this.el.content,2===e){const t=this.el.content,e=t.firstChild;e.remove(),t.append(...e.childNodes)}for(;null!==(n=H.nextNode())&&u.length<s;){if(1===n.nodeType){if(n.hasAttributes()){const t=[];for(const e of n.getAttributeNames())if(e.endsWith("$lit$")||e.startsWith(S)){const i=a[o++];if(t.push(e),void 0!==i){const t=n.getAttribute(i.toLowerCase()+"$lit$").split(S),e=/([.?@])?(.*)/.exec(i);u.push({type:1,index:r,name:e[2],strings:t,ctor:"."===e[1]?X:"?"===e[1]?Y:"@"===e[1]?Q:q})}else u.push({type:6,index:r})}for(const e of t)n.removeAttribute(e)}if(L.test(n.tagName)){const t=n.textContent.split(S),e=t.length-1;if(e>0){n.textContent=j?j.emptyScript:"";for(let i=0;i<e;i++)n.append(t[i],A()),H.nextNode(),u.push({type:2,index:++r});n.append(t[e],A())}}}else if(8===n.nodeType)if(n.data===R)u.push({type:2,index:r});else{let t=-1;for(;-1!==(t=n.data.indexOf(S,t+1));)u.push({type:7,index:r}),t+=S.length-1}r++}}static createElement(t,e){const i=M.createElement("template");return i.innerHTML=t,i}}function J(t,e,i=t,n){var r,o,s,u;if(e===W)return e;let c=void 0!==n?null===(r=i._$Cl)||void 0===r?void 0:r[n]:i._$Cu;const a=U(e)?void 0:e._$litDirective$;return(null==c?void 0:c.constructor)!==a&&(null===(o=null==c?void 0:c._$AO)||void 0===o||o.call(c,!1),void 0===a?c=void 0:(c=new a(t),c._$AT(t,i,n)),void 0!==n?(null!==(s=(u=i)._$Cl)&&void 0!==s?s:u._$Cl=[])[n]=c:i._$Cu=c),void 0!==c&&(e=J(t,c._$AS(t,e.values),c,n)),e}class V{constructor(t,e){this.v=[],this._$AN=void 0,this._$AD=t,this._$AM=e}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}p(t){var e;const{el:{content:i},parts:n}=this._$AD,r=(null!==(e=null==t?void 0:t.creationScope)&&void 0!==e?e:M).importNode(i,!0);H.currentNode=r;let o=H.nextNode(),s=0,u=0,c=n[0];for(;void 0!==c;){if(s===c.index){let e;2===c.type?e=new Z(o,o.nextSibling,this,t):1===c.type?e=new c.ctor(o,c.name,c.strings,this,t):6===c.type&&(e=new tt(o,this,t)),this.v.push(e),c=n[++u]}s!==(null==c?void 0:c.index)&&(o=H.nextNode(),s++)}return r}m(t){let e=0;for(const i of this.v)void 0!==i&&(void 0!==i.strings?(i._$AI(t,i,e),e+=i.strings.length-2):i._$AI(t[e])),e++}}class Z{constructor(t,e,i,n){var r;this.type=2,this._$AH=K,this._$AN=void 0,this._$AA=t,this._$AB=e,this._$AM=i,this.options=n,this._$C_=null===(r=null==n?void 0:n.isConnected)||void 0===r||r}get _$AU(){var t,e;return null!==(e=null===(t=this._$AM)||void 0===t?void 0:t._$AU)&&void 0!==e?e:this._$C_}get parentNode(){let t=this._$AA.parentNode;const e=this._$AM;return void 0!==e&&11===t.nodeType&&(t=e.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,e=this){t=J(this,t,e),U(t)?t===K||null==t||""===t?(this._$AH!==K&&this._$AR(),this._$AH=K):t!==this._$AH&&t!==W&&this.T(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.k(t):(t=>T(t)||"function"==typeof(null==t?void 0:t[Symbol.iterator]))(t)?this.S(t):this.T(t)}j(t,e=this._$AB){return this._$AA.parentNode.insertBefore(t,e)}k(t){this._$AH!==t&&(this._$AR(),this._$AH=this.j(t))}T(t){this._$AH!==K&&U(this._$AH)?this._$AA.nextSibling.data=t:this.k(M.createTextNode(t)),this._$AH=t}$(t){var e;const{values:i,_$litType$:n}=t,r="number"==typeof n?this._$AC(t):(void 0===n.el&&(n.el=z.createElement(n.h,this.options)),n);if((null===(e=this._$AH)||void 0===e?void 0:e._$AD)===r)this._$AH.m(i);else{const t=new V(r,this),e=t.p(this.options);t.m(i),this.k(e),this._$AH=t}}_$AC(t){let e=D.get(t.strings);return void 0===e&&D.set(t.strings,e=new z(t)),e}S(t){T(this._$AH)||(this._$AH=[],this._$AR());const e=this._$AH;let i,n=0;for(const r of t)n===e.length?e.push(i=new Z(this.j(A()),this.j(A()),this,this.options)):i=e[n],i._$AI(r),n++;n<e.length&&(this._$AR(i&&i._$AB.nextSibling,n),e.length=n)}_$AR(t=this._$AA.nextSibling,e){var i;for(null===(i=this._$AP)||void 0===i||i.call(this,!1,!0,e);t&&t!==this._$AB;){const e=t.nextSibling;t.remove(),t=e}}setConnected(t){var e;void 0===this._$AM&&(this._$C_=t,null===(e=this._$AP)||void 0===e||e.call(this,t))}}class q{constructor(t,e,i,n,r){this.type=1,this._$AH=K,this._$AN=void 0,this.element=t,this.name=e,this._$AM=n,this.options=r,i.length>2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=K}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,e=this,i,n){const r=this.strings;let o=!1;if(void 0===r)t=J(this,t,e,0),o=!U(t)||t!==this._$AH&&t!==W,o&&(this._$AH=t);else{const n=t;let s,u;for(t=r[0],s=0;s<r.length-1;s++)u=J(this,n[i+s],e,s),u===W&&(u=this._$AH[s]),o||(o=!U(u)||u!==this._$AH[s]),u===K?t=K:t!==K&&(t+=(null!=u?u:"")+r[s+1]),this._$AH[s]=u}o&&!n&&this.P(t)}P(t){t===K?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,null!=t?t:"")}}class X extends q{constructor(){super(...arguments),this.type=3}P(t){this.element[this.name]=t===K?void 0:t}}const G=j?j.emptyScript:"";class Y extends q{constructor(){super(...arguments),this.type=4}P(t){t&&t!==K?this.element.setAttribute(this.name,G):this.element.removeAttribute(this.name)}}class Q extends q{constructor(t,e,i,n,r){super(t,e,i,n,r),this.type=5}_$AI(t,e=this){var i;if((t=null!==(i=J(this,t,e,0))&&void 0!==i?i:K)===W)return;const n=this._$AH,r=t===K&&n!==K||t.capture!==n.capture||t.once!==n.once||t.passive!==n.passive,o=t!==K&&(n===K||r);r&&this.element.removeEventListener(this.name,this,n),o&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){var e,i;"function"==typeof this._$AH?this._$AH.call(null!==(i=null===(e=this.options)||void 0===e?void 0:e.host)&&void 0!==i?i:this.element,t):this._$AH.handleEvent(t)}}class tt{constructor(t,e,i){this.element=t,this.type=6,this._$AN=void 0,this._$AM=e,this.options=i}get _$AU(){return this._$AM._$AU}_$AI(t){J(this,t)}}const et=window.litHtmlPolyfillSupport;
44
+ /**
45
+ * @license
46
+ * Copyright 2017 Google LLC
47
+ * SPDX-License-Identifier: BSD-3-Clause
48
+ */
49
+ var it,nt;null==et||et(z,Z),(null!==(E=globalThis.litHtmlVersions)&&void 0!==E?E:globalThis.litHtmlVersions=[]).push("2.2.7");class rt extends O{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){var t,e;const i=super.createRenderRoot();return null!==(t=(e=this.renderOptions).renderBefore)&&void 0!==t||(e.renderBefore=i.firstChild),i}update(t){const e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=((t,e,i)=>{var n,r;const o=null!==(n=null==i?void 0:i.renderBefore)&&void 0!==n?n:e;let s=o._$litPart$;if(void 0===s){const t=null!==(r=null==i?void 0:i.renderBefore)&&void 0!==r?r:null;o._$litPart$=s=new Z(e.insertBefore(A(),t),t,void 0,null!=i?i:{})}return s._$AI(t),s})(e,this.renderRoot,this.renderOptions)}connectedCallback(){var t;super.connectedCallback(),null===(t=this._$Do)||void 0===t||t.setConnected(!0)}disconnectedCallback(){var t;super.disconnectedCallback(),null===(t=this._$Do)||void 0===t||t.setConnected(!1)}render(){return W}}rt.finalized=!0,rt._$litElement$=!0,null===(it=globalThis.litElementHydrateSupport)||void 0===it||it.call(globalThis,{LitElement:rt});const ot=globalThis.litElementPolyfillSupport;null==ot||ot({LitElement:rt}),(null!==(nt=globalThis.litElementVersions)&&void 0!==nt?nt:globalThis.litElementVersions=[]).push("3.2.2");class st{static create(t,e,i){let n=t=>f(null!=t?t:i),r=h`var(${f(t)}, ${n(i)})`;return r.name=t,r.category=e,r.defaultValue=i,r.defaultCssValue=n,r.get=e=>h`var(${f(t)}, ${n(e)})`,r.breadcrumb=()=>[],r.lastResortDefaultValue=()=>i,r}static extend(t,e,i){let n=t=>e.get(null!=t?t:i),r=h`var(${f(t)}, ${n(i)})`;return r.name=t,r.category=e.category,r.fallbackVariable=e,r.defaultValue=i,r.defaultCssValue=n,r.get=e=>h`var(${f(t)}, ${n(e)})`,r.breadcrumb=()=>[e.name,...e.breadcrumb()],r.lastResortDefaultValue=()=>i,r}static external(t,e){let i=e=>t.fallbackVariable?t.fallbackVariable.get(null!=e?e:t.defaultValue):f(null!=e?e:t.defaultValue),n=h`var(${f(t.name)}, ${i(t.defaultValue)})`;return n.name=t.name,n.category=t.category,n.fallbackVariable=t.fallbackVariable,n.defaultValue=t.defaultValue,n.context=e,n.defaultCssValue=i,n.get=e=>h`var(${f(t.name)}, ${i(e)})`,n.breadcrumb=()=>t.fallbackVariable?[t.fallbackVariable.name,...t.fallbackVariable.breadcrumb()]:[],n.lastResortDefaultValue=()=>{var e,i;return null!==(e=t.defaultValue)&&void 0!==e?e:null===(i=t.fallbackVariable)||void 0===i?void 0:i.lastResortDefaultValue()},n}}st.create("--ft-color-primary","COLOR","#2196F3"),st.create("--ft-color-primary-variant","COLOR","#1976D2"),st.create("--ft-color-secondary","COLOR","#FFCC80"),st.create("--ft-color-secondary-variant","COLOR","#F57C00"),st.create("--ft-color-surface","COLOR","#FFFFFF"),st.create("--ft-color-content","COLOR","rgba(0, 0, 0, 0.87)"),st.create("--ft-color-error","COLOR","#B00020"),st.create("--ft-color-outline","COLOR","rgba(0, 0, 0, 0.14)"),st.create("--ft-color-opacity-high","NUMBER","1"),st.create("--ft-color-opacity-medium","NUMBER","0.74"),st.create("--ft-color-opacity-disabled","NUMBER","0.38"),st.create("--ft-color-on-primary","COLOR","#FFFFFF"),st.create("--ft-color-on-primary-high","COLOR","#FFFFFF"),st.create("--ft-color-on-primary-medium","COLOR","rgba(255, 255, 255, 0.74)"),st.create("--ft-color-on-primary-disabled","COLOR","rgba(255, 255, 255, 0.38)"),st.create("--ft-color-on-secondary","COLOR","#FFFFFF"),st.create("--ft-color-on-secondary-high","COLOR","#FFFFFF"),st.create("--ft-color-on-secondary-medium","COLOR","rgba(255, 255, 255, 0.74)"),st.create("--ft-color-on-secondary-disabled","COLOR","rgba(255, 255, 255, 0.38)"),st.create("--ft-color-on-surface","COLOR","rgba(0, 0, 0, 0.87)"),st.create("--ft-color-on-surface-high","COLOR","rgba(0, 0, 0, 0.87)"),st.create("--ft-color-on-surface-medium","COLOR","rgba(0, 0, 0, 0.60)"),st.create("--ft-color-on-surface-disabled","COLOR","rgba(0, 0, 0, 0.38)"),st.create("--ft-opacity-content-on-surface-disabled","NUMBER","0"),st.create("--ft-opacity-content-on-surface-enable","NUMBER","0"),st.create("--ft-opacity-content-on-surface-hover","NUMBER","0.04"),st.create("--ft-opacity-content-on-surface-focused","NUMBER","0.12"),st.create("--ft-opacity-content-on-surface-pressed","NUMBER","0.10"),st.create("--ft-opacity-content-on-surface-selected","NUMBER","0.08"),st.create("--ft-opacity-content-on-surface-dragged","NUMBER","0.08"),st.create("--ft-opacity-primary-on-surface-disabled","NUMBER","0"),st.create("--ft-opacity-primary-on-surface-enable","NUMBER","0"),st.create("--ft-opacity-primary-on-surface-hover","NUMBER","0.04"),st.create("--ft-opacity-primary-on-surface-focused","NUMBER","0.12"),st.create("--ft-opacity-primary-on-surface-pressed","NUMBER","0.10"),st.create("--ft-opacity-primary-on-surface-selected","NUMBER","0.08"),st.create("--ft-opacity-primary-on-surface-dragged","NUMBER","0.08"),st.create("--ft-opacity-surface-on-primary-disabled","NUMBER","0"),st.create("--ft-opacity-surface-on-primary-enable","NUMBER","0"),st.create("--ft-opacity-surface-on-primary-hover","NUMBER","0.04"),st.create("--ft-opacity-surface-on-primary-focused","NUMBER","0.12"),st.create("--ft-opacity-surface-on-primary-pressed","NUMBER","0.10"),st.create("--ft-opacity-surface-on-primary-selected","NUMBER","0.08"),st.create("--ft-opacity-surface-on-primary-dragged","NUMBER","0.08"),st.create("--ft-elevation-00","UNKNOWN","0px 0px 0px 0px rgba(0, 0, 0, 0), 0px 0px 0px 0px rgba(0, 0, 0, 0), 0px 0px 0px 0px rgba(0, 0, 0, 0)"),st.create("--ft-elevation-01","UNKNOWN","0px 1px 4px 0px rgba(0, 0, 0, 0.06), 0px 1px 2px 0px rgba(0, 0, 0, 0.14), 0px 0px 1px 0px rgba(0, 0, 0, 0.06)"),st.create("--ft-elevation-02","UNKNOWN","0px 4px 10px 0px rgba(0, 0, 0, 0.06), 0px 2px 5px 0px rgba(0, 0, 0, 0.14), 0px 0px 1px 0px rgba(0, 0, 0, 0.06)"),st.create("--ft-elevation-03","UNKNOWN","0px 6px 13px 0px rgba(0, 0, 0, 0.06), 0px 3px 7px 0px rgba(0, 0, 0, 0.14), 0px 1px 2px 0px rgba(0, 0, 0, 0.06)"),st.create("--ft-elevation-04","UNKNOWN","0px 8px 16px 0px rgba(0, 0, 0, 0.06), 0px 4px 9px 0px rgba(0, 0, 0, 0.14), 0px 2px 3px 0px rgba(0, 0, 0, 0.06)"),st.create("--ft-elevation-06","UNKNOWN","0px 12px 22px 0px rgba(0, 0, 0, 0.06), 0px 6px 13px 0px rgba(0, 0, 0, 0.14), 0px 4px 5px 0px rgba(0, 0, 0, 0.06)"),st.create("--ft-elevation-08","UNKNOWN","0px 16px 28px 0px rgba(0, 0, 0, 0.06), 0px 8px 17px 0px rgba(0, 0, 0, 0.14), 0px 6px 7px 0px rgba(0, 0, 0, 0.06)"),st.create("--ft-elevation-12","UNKNOWN","0px 22px 40px 0px rgba(0, 0, 0, 0.06), 0px 12px 23px 0px rgba(0, 0, 0, 0.14), 0px 10px 11px 0px rgba(0, 0, 0, 0.06)"),st.create("--ft-elevation-16","UNKNOWN","0px 28px 52px 0px rgba(0, 0, 0, 0.06), 0px 16px 29px 0px rgba(0, 0, 0, 0.14), 0px 14px 15px 0px rgba(0, 0, 0, 0.06)"),st.create("--ft-elevation-24","UNKNOWN","0px 40px 76px 0px rgba(0, 0, 0, 0.06), 0px 24px 41px 0px rgba(0, 0, 0, 0.14), 0px 22px 23px 0px rgba(0, 0, 0, 0.06)"),st.create("--ft-border-radius-S","SIZE","4px"),st.create("--ft-border-radius-M","SIZE","8px"),st.create("--ft-border-radius-L","SIZE","12px"),st.create("--ft-border-radius-XL","SIZE","16px"),st.create("--ft-title-font","UNKNOWN","Ubuntu, system-ui, sans-serif"),st.create("--ft-content-font","UNKNOWN","'Open Sans', system-ui, sans-serif"),st.create("--ft-transition-duration","UNKNOWN","250ms"),st.create("--ft-transition-timing-function","UNKNOWN","ease-in-out");var ut=function(t,e,i,n){for(var r,o=arguments.length,s=o<3?e:null===n?n=Object.getOwnPropertyDescriptor(e,i):n,u=t.length-1;u>=0;u--)(r=t[u])&&(s=(o<3?r(s):o>3?r(e,i,s):r(e,i))||s);return o>3&&s&&Object.defineProperty(e,i,s),s};class ct extends(
50
+ /**
51
+ * @license
52
+ * Copyright 2021 Google LLC
53
+ * SPDX-License-Identifier: BSD-3-Clause
54
+ */
55
+ function(t){return class extends t{createRenderRoot(){const t=this.constructor,{registry:e,elementDefinitions:i,shadowRootOptions:n}=t;i&&!e&&(t.registry=new CustomElementRegistry,Object.entries(i).forEach((([e,i])=>t.registry.define(e,i))));const r=this.renderOptions.creationScope=this.attachShadow({...n,customElements:t.registry});return d(r,this.constructor.elementStyles),r}}}(rt)){getStyles(){return[]}getTemplate(){return null}render(){let t=this.getStyles();return Array.isArray(t)||(t=[t]),B`
56
+ ${t.map((t=>B`
57
+ <style>${t}</style>
58
+ `))}
59
+ ${this.getTemplate()}
60
+ `}updated(t){super.updated(t),setTimeout((()=>{var e;this.contentAvailableCallback(t),(null===(e=this.exportpartsPrefix)||void 0===e?void 0:e.trim())?this.setExportpartsAttribute([this.exportpartsPrefix]):null!=this.exportpartsPrefixes&&this.exportpartsPrefixes.length>0&&this.setExportpartsAttribute(this.exportpartsPrefixes)}),0)}setExportpartsAttribute(t){var e,i,n,r,o,s;const u=t=>null!=t&&t.trim().length>0,c=t.filter(u).map((t=>t.trim()));if(0===c.length)return void this.removeAttribute("exportparts");const a=new Set;for(let t of null!==(i=null===(e=this.shadowRoot)||void 0===e?void 0:e.querySelectorAll("[part],[exportparts]"))&&void 0!==i?i:[]){const e=null!==(r=null===(n=t.getAttribute("part"))||void 0===n?void 0:n.split(" "))&&void 0!==r?r:[],i=null!==(s=null===(o=t.getAttribute("exportparts"))||void 0===o?void 0:o.split(",").map((t=>t.split(":")[1])))&&void 0!==s?s:[];new Array(...e,...i).filter(u).map((t=>t.trim())).forEach((t=>a.add(t)))}if(0===a.size)return void this.removeAttribute("exportparts");const l=[...a.values()].flatMap((t=>c.map((e=>`${t}:${e}--${t}`))));this.setAttribute("exportparts",[...this.part,...l].join(", "))}contentAvailableCallback(t){}}function at(t){for(var e=arguments.length,i=Array(e>1?e-1:0),n=1;n<e;n++)i[n-1]=arguments[n];throw Error("[Immer] minified error nr: "+t+(i.length?" "+i.map((function(t){return"'"+t+"'"})).join(","):"")+". Find the full error at: https://bit.ly/3cXEKWf")}function lt(t){return!!t&&!!t[Xt]}function ft(t){return!!t&&(function(t){if(!t||"object"!=typeof t)return!1;var e=Object.getPrototypeOf(t);if(null===e)return!0;var i=Object.hasOwnProperty.call(e,"constructor")&&e.constructor;return i===Object||"function"==typeof i&&Function.toString.call(i)===Gt}(t)||Array.isArray(t)||!!t[qt]||!!t.constructor[qt]||wt(t)||yt(t))}function ht(t,e,i){void 0===i&&(i=!1),0===dt(t)?(i?Object.keys:Yt)(t).forEach((function(n){i&&"symbol"==typeof n||e(n,t[n],t)})):t.forEach((function(i,n){return e(n,i,t)}))}function dt(t){var e=t[Xt];return e?e.i>3?e.i-4:e.i:Array.isArray(t)?1:wt(t)?2:yt(t)?3:0}function vt(t,e){return 2===dt(t)?t.has(e):Object.prototype.hasOwnProperty.call(t,e)}function pt(t,e,i){var n=dt(t);2===n?t.set(e,i):3===n?(t.delete(e),t.add(i)):t[e]=i}function bt(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}function wt(t){return zt&&t instanceof Map}function yt(t){return Jt&&t instanceof Set}function mt(t){return t.o||t.t}function gt(t){if(Array.isArray(t))return Array.prototype.slice.call(t);var e=Qt(t);delete e[Xt];for(var i=Yt(e),n=0;n<i.length;n++){var r=i[n],o=e[r];!1===o.writable&&(o.writable=!0,o.configurable=!0),(o.get||o.set)&&(e[r]={configurable:!0,writable:!0,enumerable:o.enumerable,value:t[r]})}return Object.create(Object.getPrototypeOf(t),e)}function xt(t,e){return void 0===e&&(e=!1),Et(t)||lt(t)||!ft(t)||(dt(t)>1&&(t.set=t.add=t.clear=t.delete=Ot),Object.freeze(t),e&&ht(t,(function(t,e){return xt(e,!0)}),!0)),t}function Ot(){at(2)}function Et(t){return null==t||"object"!=typeof t||Object.isFrozen(t)}function jt(t){var e=te[t];return e||at(18,t),e}function Nt(){return Dt}function St(t,e){e&&(jt("Patches"),t.u=[],t.s=[],t.v=e)}function Rt(t){Ct(t),t.p.forEach(At),t.p=null}function Ct(t){t===Dt&&(Dt=t.l)}function Mt(t){return Dt={p:[],l:Dt,h:t,m:!0,_:0}}function At(t){var e=t[Xt];0===e.i||1===e.i?e.j():e.O=!0}function Ut(t,e){e._=e.p.length;var i=e.p[0],n=void 0!==t&&t!==i;return e.h.g||jt("ES5").S(e,t,n),n?(i[Xt].P&&(Rt(e),at(4)),ft(t)&&(t=Tt(e,t),e.l||It(e,t)),e.u&&jt("Patches").M(i[Xt].t,t,e.u,e.s)):t=Tt(e,i,[]),Rt(e),e.u&&e.v(e.u,e.s),t!==Zt?t:void 0}function Tt(t,e,i){if(Et(e))return e;var n=e[Xt];if(!n)return ht(e,(function(r,o){return $t(t,n,e,r,o,i)}),!0),e;if(n.A!==t)return e;if(!n.P)return It(t,n.t,!0),n.t;if(!n.I){n.I=!0,n.A._--;var r=4===n.i||5===n.i?n.o=gt(n.k):n.o;ht(3===n.i?new Set(r):r,(function(e,o){return $t(t,n,r,e,o,i)})),It(t,r,!1),i&&t.u&&jt("Patches").R(n,i,t.u,t.s)}return n.o}function $t(t,e,i,n,r,o){if(lt(r)){var s=Tt(t,r,o&&e&&3!==e.i&&!vt(e.D,n)?o.concat(n):void 0);if(pt(i,n,s),!lt(s))return;t.m=!1}if(ft(r)&&!Et(r)){if(!t.h.F&&t._<1)return;Tt(t,r),e&&e.A.l||It(t,r)}}function It(t,e,i){void 0===i&&(i=!1),t.h.F&&t.m&&xt(e,i)}function kt(t,e){var i=t[Xt];return(i?mt(i):t)[e]}function Ft(t,e){if(e in t)for(var i=Object.getPrototypeOf(t);i;){var n=Object.getOwnPropertyDescriptor(i,e);if(n)return n;i=Object.getPrototypeOf(i)}}function Pt(t){t.P||(t.P=!0,t.l&&Pt(t.l))}function _t(t){t.o||(t.o=gt(t.t))}function Lt(t,e,i){var n=wt(e)?jt("MapSet").N(e,i):yt(e)?jt("MapSet").T(e,i):t.g?function(t,e){var i=Array.isArray(t),n={i:i?1:0,A:e?e.A:Nt(),P:!1,I:!1,D:{},l:e,t,k:null,o:null,j:null,C:!1},r=n,o=ee;i&&(r=[n],o=ie);var s=Proxy.revocable(r,o),u=s.revoke,c=s.proxy;return n.k=c,n.j=u,c}(e,i):jt("ES5").J(e,i);return(i?i.A:Nt()).p.push(n),n}function Bt(t){return lt(t)||at(22,t),function t(e){if(!ft(e))return e;var i,n=e[Xt],r=dt(e);if(n){if(!n.P&&(n.i<4||!jt("ES5").K(n)))return n.t;n.I=!0,i=Wt(e,r),n.I=!1}else i=Wt(e,r);return ht(i,(function(e,r){n&&function(t,e){return 2===dt(t)?t.get(e):t[e]}(n.t,e)===r||pt(i,e,t(r))})),3===r?new Set(i):i}(t)}function Wt(t,e){switch(e){case 2:return new Map(t);case 3:return Array.from(t)}return gt(t)}ut([n()],ct.prototype,"exportpartsPrefix",void 0),ut([function(t,e){const i=()=>JSON.parse(JSON.stringify(t));return n({type:Object,converter:{fromAttribute:t=>{if(null==t)return i();try{return JSON.parse(t)}catch{return i()}},toAttribute:t=>JSON.stringify(t)},...null!=e?e:{}})}([])],ct.prototype,"exportpartsPrefixes",void 0),h`
61
+ .ft-no-text-select {
62
+ -webkit-touch-callout: none;
63
+ -webkit-user-select: none;
64
+ -khtml-user-select: none;
65
+ -moz-user-select: none;
66
+ -ms-user-select: none;
67
+ user-select: none;
68
+ }
69
+ `;var Kt,Dt,Ht="undefined"!=typeof Symbol&&"symbol"==typeof Symbol("x"),zt="undefined"!=typeof Map,Jt="undefined"!=typeof Set,Vt="undefined"!=typeof Proxy&&void 0!==Proxy.revocable&&"undefined"!=typeof Reflect,Zt=Ht?Symbol.for("immer-nothing"):((Kt={})["immer-nothing"]=!0,Kt),qt=Ht?Symbol.for("immer-draftable"):"__$immer_draftable",Xt=Ht?Symbol.for("immer-state"):"__$immer_state",Gt=""+Object.prototype.constructor,Yt="undefined"!=typeof Reflect&&Reflect.ownKeys?Reflect.ownKeys:void 0!==Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:Object.getOwnPropertyNames,Qt=Object.getOwnPropertyDescriptors||function(t){var e={};return Yt(t).forEach((function(i){e[i]=Object.getOwnPropertyDescriptor(t,i)})),e},te={},ee={get:function(t,e){if(e===Xt)return t;var i=mt(t);if(!vt(i,e))return function(t,e,i){var n,r=Ft(e,i);return r?"value"in r?r.value:null===(n=r.get)||void 0===n?void 0:n.call(t.k):void 0}(t,i,e);var n=i[e];return t.I||!ft(n)?n:n===kt(t.t,e)?(_t(t),t.o[e]=Lt(t.A.h,n,t)):n},has:function(t,e){return e in mt(t)},ownKeys:function(t){return Reflect.ownKeys(mt(t))},set:function(t,e,i){var n=Ft(mt(t),e);if(null==n?void 0:n.set)return n.set.call(t.k,i),!0;if(!t.P){var r=kt(mt(t),e),o=null==r?void 0:r[Xt];if(o&&o.t===i)return t.o[e]=i,t.D[e]=!1,!0;if(bt(i,r)&&(void 0!==i||vt(t.t,e)))return!0;_t(t),Pt(t)}return t.o[e]===i&&"number"!=typeof i&&(void 0!==i||e in t.o)||(t.o[e]=i,t.D[e]=!0,!0)},deleteProperty:function(t,e){return void 0!==kt(t.t,e)||e in t.t?(t.D[e]=!1,_t(t),Pt(t)):delete t.D[e],t.o&&delete t.o[e],!0},getOwnPropertyDescriptor:function(t,e){var i=mt(t),n=Reflect.getOwnPropertyDescriptor(i,e);return n?{writable:!0,configurable:1!==t.i||"length"!==e,enumerable:n.enumerable,value:i[e]}:n},defineProperty:function(){at(11)},getPrototypeOf:function(t){return Object.getPrototypeOf(t.t)},setPrototypeOf:function(){at(12)}},ie={};ht(ee,(function(t,e){ie[t]=function(){return arguments[0]=arguments[0][0],e.apply(this,arguments)}})),ie.deleteProperty=function(t,e){return ie.set.call(this,t,e,void 0)},ie.set=function(t,e,i){return ee.set.call(this,t[0],e,i,t[0])};var ne=function(){function t(t){var e=this;this.g=Vt,this.F=!0,this.produce=function(t,i,n){if("function"==typeof t&&"function"!=typeof i){var r=i;i=t;var o=e;return function(t){var e=this;void 0===t&&(t=r);for(var n=arguments.length,s=Array(n>1?n-1:0),u=1;u<n;u++)s[u-1]=arguments[u];return o.produce(t,(function(t){var n;return(n=i).call.apply(n,[e,t].concat(s))}))}}var s;if("function"!=typeof i&&at(6),void 0!==n&&"function"!=typeof n&&at(7),ft(t)){var u=Mt(e),c=Lt(e,t,void 0),a=!0;try{s=i(c),a=!1}finally{a?Rt(u):Ct(u)}return"undefined"!=typeof Promise&&s instanceof Promise?s.then((function(t){return St(u,n),Ut(t,u)}),(function(t){throw Rt(u),t})):(St(u,n),Ut(s,u))}if(!t||"object"!=typeof t){if(void 0===(s=i(t))&&(s=t),s===Zt&&(s=void 0),e.F&&xt(s,!0),n){var l=[],f=[];jt("Patches").M(t,s,l,f),n(l,f)}return s}at(21,t)},this.produceWithPatches=function(t,i){if("function"==typeof t)return function(i){for(var n=arguments.length,r=Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return e.produceWithPatches(i,(function(e){return t.apply(void 0,[e].concat(r))}))};var n,r,o=e.produce(t,i,(function(t,e){n=t,r=e}));return"undefined"!=typeof Promise&&o instanceof Promise?o.then((function(t){return[t,n,r]})):[o,n,r]},"boolean"==typeof(null==t?void 0:t.useProxies)&&this.setUseProxies(t.useProxies),"boolean"==typeof(null==t?void 0:t.autoFreeze)&&this.setAutoFreeze(t.autoFreeze)}var e=t.prototype;return e.createDraft=function(t){ft(t)||at(8),lt(t)&&(t=Bt(t));var e=Mt(this),i=Lt(this,t,void 0);return i[Xt].C=!0,Ct(e),i},e.finishDraft=function(t,e){var i=(t&&t[Xt]).A;return St(i,e),Ut(void 0,i)},e.setAutoFreeze=function(t){this.F=t},e.setUseProxies=function(t){t&&!Vt&&at(20),this.g=t},e.applyPatches=function(t,e){var i;for(i=e.length-1;i>=0;i--){var n=e[i];if(0===n.path.length&&"replace"===n.op){t=n.value;break}}i>-1&&(e=e.slice(i+1));var r=jt("Patches").$;return lt(t)?r(t,e):this.produce(t,(function(t){return r(t,e)}))},t}(),re=new ne,oe=re.produce;re.produceWithPatches.bind(re),re.setAutoFreeze.bind(re),re.setUseProxies.bind(re),re.applyPatches.bind(re),re.createDraft.bind(re),re.finishDraft.bind(re);var se=oe;function ue(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function ce(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,n)}return i}function ae(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?ce(Object(i),!0).forEach((function(e){ue(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):ce(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}function le(t){return"Minified Redux error #"+t+"; visit https://redux.js.org/Errors?code="+t+" for the full message or use the non-minified dev environment for full errors. "}var fe="function"==typeof Symbol&&Symbol.observable||"@@observable",he=function(){return Math.random().toString(36).substring(7).split("").join(".")},de={INIT:"@@redux/INIT"+he(),REPLACE:"@@redux/REPLACE"+he(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+he()}};function ve(t){if("object"!=typeof t||null===t)return!1;for(var e=t;null!==Object.getPrototypeOf(e);)e=Object.getPrototypeOf(e);return Object.getPrototypeOf(t)===e}function pe(t,e,i){var n;if("function"==typeof e&&"function"==typeof i||"function"==typeof i&&"function"==typeof arguments[3])throw new Error(le(0));if("function"==typeof e&&void 0===i&&(i=e,e=void 0),void 0!==i){if("function"!=typeof i)throw new Error(le(1));return i(pe)(t,e)}if("function"!=typeof t)throw new Error(le(2));var r=t,o=e,s=[],u=s,c=!1;function a(){u===s&&(u=s.slice())}function l(){if(c)throw new Error(le(3));return o}function f(t){if("function"!=typeof t)throw new Error(le(4));if(c)throw new Error(le(5));var e=!0;return a(),u.push(t),function(){if(e){if(c)throw new Error(le(6));e=!1,a();var i=u.indexOf(t);u.splice(i,1),s=null}}}function h(t){if(!ve(t))throw new Error(le(7));if(void 0===t.type)throw new Error(le(8));if(c)throw new Error(le(9));try{c=!0,o=r(o,t)}finally{c=!1}for(var e=s=u,i=0;i<e.length;i++){(0,e[i])()}return t}function d(t){if("function"!=typeof t)throw new Error(le(10));r=t,h({type:de.REPLACE})}function v(){var t,e=f;return(t={subscribe:function(t){if("object"!=typeof t||null===t)throw new Error(le(11));function i(){t.next&&t.next(l())}return i(),{unsubscribe:e(i)}}})[fe]=function(){return this},t}return h({type:de.INIT}),(n={dispatch:h,subscribe:f,getState:l,replaceReducer:d})[fe]=v,n}function be(t){for(var e=Object.keys(t),i={},n=0;n<e.length;n++){var r=e[n];"function"==typeof t[r]&&(i[r]=t[r])}var o,s=Object.keys(i);try{!function(t){Object.keys(t).forEach((function(e){var i=t[e];if(void 0===i(void 0,{type:de.INIT}))throw new Error(le(12));if(void 0===i(void 0,{type:de.PROBE_UNKNOWN_ACTION()}))throw new Error(le(13))}))}(i)}catch(t){o=t}return function(t,e){if(void 0===t&&(t={}),o)throw o;for(var n=!1,r={},u=0;u<s.length;u++){var c=s[u],a=i[c],l=t[c],f=a(l,e);if(void 0===f)throw e&&e.type,new Error(le(14));r[c]=f,n=n||f!==l}return(n=n||s.length!==Object.keys(t).length)?r:t}}function we(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return 0===e.length?function(t){return t}:1===e.length?e[0]:e.reduce((function(t,e){return function(){return t(e.apply(void 0,arguments))}}))}function ye(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return function(t){return function(){var i=t.apply(void 0,arguments),n=function(){throw new Error(le(15))},r={getState:i.getState,dispatch:function(){return n.apply(void 0,arguments)}},o=e.map((function(t){return t(r)}));return n=we.apply(void 0,o)(i.dispatch),ae(ae({},i),{},{dispatch:n})}}}function me(t){return function(e){var i=e.dispatch,n=e.getState;return function(e){return function(r){return"function"==typeof r?r(i,n,t):e(r)}}}}var ge=me();ge.withExtraArgument=me;var xe,Oe=ge,Ee=(xe=function(t,e){return xe=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])},xe(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function i(){this.constructor=t}xe(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}),je=function(t,e){for(var i=0,n=e.length,r=t.length;i<n;i++,r++)t[r]=e[i];return t},Ne=Object.defineProperty,Se=Object.getOwnPropertySymbols,Re=Object.prototype.hasOwnProperty,Ce=Object.prototype.propertyIsEnumerable,Me=function(t,e,i){return e in t?Ne(t,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[e]=i},Ae=function(t,e){for(var i in e||(e={}))Re.call(e,i)&&Me(t,i,e[i]);if(Se)for(var n=0,r=Se(e);n<r.length;n++){i=r[n];Ce.call(e,i)&&Me(t,i,e[i])}return t},Ue="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(0!==arguments.length)return"object"==typeof arguments[0]?we:we.apply(null,arguments)};var Te=function(t){function e(){for(var i=[],n=0;n<arguments.length;n++)i[n]=arguments[n];var r=t.apply(this,i)||this;return Object.setPrototypeOf(r,e.prototype),r}return Ee(e,t),Object.defineProperty(e,Symbol.species,{get:function(){return e},enumerable:!1,configurable:!0}),e.prototype.concat=function(){for(var e=[],i=0;i<arguments.length;i++)e[i]=arguments[i];return t.prototype.concat.apply(this,e)},e.prototype.prepend=function(){for(var t=[],i=0;i<arguments.length;i++)t[i]=arguments[i];return 1===t.length&&Array.isArray(t[0])?new(e.bind.apply(e,je([void 0],t[0].concat(this)))):new(e.bind.apply(e,je([void 0],t.concat(this))))},e}(Array);function $e(t){return ft(t)?se(t,(function(){})):t}function Ie(){return function(t){return function(t){void 0===t&&(t={});var e=t.thunk,i=void 0===e||e;t.immutableCheck,t.serializableCheck;var n=new Te;i&&(!function(t){return"boolean"==typeof t}(i)?n.push(Oe.withExtraArgument(i.extraArgument)):n.push(Oe));return n}(t)}}function ke(t){var e,i=Ie(),n=t||{},r=n.reducer,o=void 0===r?void 0:r,s=n.middleware,u=void 0===s?i():s,c=n.devTools,a=void 0===c||c,l=n.preloadedState,f=void 0===l?void 0:l,h=n.enhancers,d=void 0===h?void 0:h;if("function"==typeof o)e=o;else{if(!function(t){if("object"!=typeof t||null===t)return!1;var e=Object.getPrototypeOf(t);if(null===e)return!0;for(var i=e;null!==Object.getPrototypeOf(i);)i=Object.getPrototypeOf(i);return e===i}(o))throw new Error('"reducer" is a required argument, and must be a function or an object of functions that can be passed to combineReducers');e=be(o)}var v=u;"function"==typeof v&&(v=v(i));var p=ye.apply(void 0,v),b=we;a&&(b=Ue(Ae({trace:!1},"object"==typeof a&&a)));var w=[p];return Array.isArray(d)?w=je([p],d):"function"==typeof d&&(w=d(w)),pe(e,f,b.apply(void 0,w))}function Fe(t,e){function i(){for(var i=[],n=0;n<arguments.length;n++)i[n]=arguments[n];if(e){var r=e.apply(void 0,i);if(!r)throw new Error("prepareAction did not return an object");return Ae(Ae({type:t,payload:r.payload},"meta"in r&&{meta:r.meta}),"error"in r&&{error:r.error})}return{type:t,payload:i[0]}}return i.toString=function(){return""+t},i.type=t,i.match=function(e){return e.type===t},i}function Pe(t){var e,i={},n=[],r={addCase:function(t,e){var n="string"==typeof t?t:t.type;if(n in i)throw new Error("addCase cannot be called with two reducers for the same action type");return i[n]=e,r},addMatcher:function(t,e){return n.push({matcher:t,reducer:e}),r},addDefaultCase:function(t){return e=t,r}};return t(r),[i,n,e]}function _e(t){var e=t.name;if(!e)throw new Error("`name` is a required option for createSlice");var i,n="function"==typeof t.initialState?t.initialState:$e(t.initialState),r=t.reducers||{},o=Object.keys(r),s={},u={},c={};function a(){var e="function"==typeof t.extraReducers?Pe(t.extraReducers):[t.extraReducers],i=e[0],r=void 0===i?{}:i,o=e[1],s=void 0===o?[]:o,c=e[2],a=void 0===c?void 0:c,l=Ae(Ae({},r),u);return function(t,e,i,n){void 0===i&&(i=[]);var r,o="function"==typeof e?Pe(e):[e,i,n],s=o[0],u=o[1],c=o[2];if(function(t){return"function"==typeof t}(t))r=function(){return $e(t())};else{var a=$e(t);r=function(){return a}}function l(t,e){void 0===t&&(t=r());var i=je([s[e.type]],u.filter((function(t){return(0,t.matcher)(e)})).map((function(t){return t.reducer})));return 0===i.filter((function(t){return!!t})).length&&(i=[c]),i.reduce((function(t,i){if(i){var n;if(lt(t))return void 0===(n=i(t,e))?t:n;if(ft(t))return se(t,(function(t){return i(t,e)}));if(void 0===(n=i(t,e))){if(null===t)return t;throw Error("A case reducer on a non-draftable value must not return undefined")}return n}return t}),t)}return l.getInitialState=r,l}(n,l,s,a)}return o.forEach((function(t){var i,n,o=r[t],a=e+"/"+t;"reducer"in o?(i=o.reducer,n=o.prepare):i=o,s[t]=i,u[a]=i,c[t]=n?Fe(a,n):Fe(a)})),{name:e,reducer:function(t,e){return i||(i=a()),i(t,e)},actions:c,caseReducers:s,getInitialState:function(){return i||(i=a()),i.getInitialState()}}}var Le="listenerMiddleware";Fe(Le+"/add"),Fe(Le+"/removeAll"),Fe(Le+"/remove"),function(){function t(t,e){var i=r[t];return i?i.enumerable=e:r[t]=i={configurable:!0,enumerable:e,get:function(){var e=this[Xt];return ee.get(e,t)},set:function(e){var i=this[Xt];ee.set(i,t,e)}},i}function e(t){for(var e=t.length-1;e>=0;e--){var r=t[e][Xt];if(!r.P)switch(r.i){case 5:n(r)&&Pt(r);break;case 4:i(r)&&Pt(r)}}}function i(t){for(var e=t.t,i=t.k,n=Yt(i),r=n.length-1;r>=0;r--){var o=n[r];if(o!==Xt){var s=e[o];if(void 0===s&&!vt(e,o))return!0;var u=i[o],c=u&&u[Xt];if(c?c.t!==s:!bt(u,s))return!0}}var a=!!e[Xt];return n.length!==Yt(e).length+(a?0:1)}function n(t){var e=t.k;if(e.length!==t.t.length)return!0;var i=Object.getOwnPropertyDescriptor(e,e.length-1);if(i&&!i.get)return!0;for(var n=0;n<e.length;n++)if(!e.hasOwnProperty(n))return!0;return!1}var r={};!function(t,e){te[t]||(te[t]=e)}("ES5",{J:function(e,i){var n=Array.isArray(e),r=function(e,i){if(e){for(var n=Array(i.length),r=0;r<i.length;r++)Object.defineProperty(n,""+r,t(r,!0));return n}var o=Qt(i);delete o[Xt];for(var s=Yt(o),u=0;u<s.length;u++){var c=s[u];o[c]=t(c,e||!!o[c].enumerable)}return Object.create(Object.getPrototypeOf(i),o)}(n,e),o={i:n?5:4,A:i?i.A:Nt(),P:!1,I:!1,D:{},l:i,t:e,k:r,o:null,O:!1,C:!1};return Object.defineProperty(r,Xt,{value:o,writable:!0}),r},S:function(t,i,r){r?lt(i)&&i[Xt].A===t&&e(t.p):(t.u&&function t(e){if(e&&"object"==typeof e){var i=e[Xt];if(i){var r=i.t,o=i.k,s=i.D,u=i.i;if(4===u)ht(o,(function(e){e!==Xt&&(void 0!==r[e]||vt(r,e)?s[e]||t(o[e]):(s[e]=!0,Pt(i)))})),ht(r,(function(t){void 0!==o[t]||vt(o,t)||(s[t]=!1,Pt(i))}));else if(5===u){if(n(i)&&(Pt(i),s.length=!0),o.length<r.length)for(var c=o.length;c<r.length;c++)s[c]=!1;else for(var a=r.length;a<o.length;a++)s[a]=!0;for(var l=Math.min(o.length,r.length),f=0;f<l;f++)o.hasOwnProperty(f)||(s[f]=!0),void 0===s[f]&&t(o[f])}}}}(t.p[0]),e(t.p))},K:function(t){return 4===t.i?i(t):n(t)}})}();const Be=(t,e)=>(i,n)=>{i.constructor.createProperty(n,{attribute:!1,hasChanged:null!=e?e:o});const r=i;r.reduxProperties=r.reduxProperties||new Map,r.reduxProperties.set(n,null!=t?t:t=>t[n])};class We extends ct{get store(){return this.internalStore}set store(t){this.internalStore=t,this.store&&this.setupStore()}updateFromStore(){const t=this.store.getState();this.reduxProperties&&this.reduxProperties.forEach(((e,i)=>{this[i]=e(t,this)}))}setupStore(){this.unsubscribeFromStore&&this.unsubscribeFromStore(),this.updateFromStore(),this.unsubscribeFromStore=this.store.subscribe((()=>{this.updateFromStore()})),this.onStoreAvailable(),this.requestUpdate()}onStoreAvailable(){}connectedCallback(){super.connectedCallback(),this.store&&this.setupStore()}disconnectedCallback(){this.unsubscribeFromStore&&this.unsubscribeFromStore(),super.disconnectedCallback()}}var Ke,De;navigator.vendor&&navigator.vendor.match(/apple/i)||(null===(De=null===(Ke=window.safari)||void 0===Ke?void 0:Ke.pushNotification)||void 0===De||De.toString());const He={setBaseUrl:(t,e)=>{t.baseUrl=e.payload},setApiIntegrationIdentifier:(t,e)=>{t.apiIntegrationIdentifier=e.payload},setMapId:(t,e)=>{t.mapId=e.payload},setTocId:(t,e)=>{t.tocId=e.payload},setMap:(t,e)=>{t.map=e.payload},setToc:(t,e)=>{t.toc=e.payload},setCurrentPage:(t,e)=>{t.currentPage=e.payload},setScrollTarget:(t,e)=>{t.scrollTarget=e.payload},setVisibleTopics:(t,e)=>{t.visibleTopics=e.payload}};class ze{convertNodes(t){var e,i,n,r;const o={},s=new Set,u=new Set,c=[],a=(t,e,i)=>t.map((t=>{var n;t.page&&c.push(t.tocId);let r=null===(n=t.prettyUrl)||void 0===n?void 0:n.replace(/^\//,"");const l={...t,prettyUrl:r,depth:e,parentTocId:i,children:a(t.children,e+1,t.tocId)};return r&&(s.has(r)&&u.add(r),s.add(r)),o[t.tocId]=l,l})),l=a(null!=t?t:[],1),f=this.buildPages(c,o);let h={};return 0===f.length?f.push({number:1,title:null!==(i=null===(e=l[0])||void 0===e?void 0:e.title)&&void 0!==i?i:"",rootTocId:null!==(r=null===(n=l[0])||void 0===n?void 0:n.tocId)&&void 0!==r?r:"root",toc:[],topics:this.tocIds(l),hiddenTopics:[]}):h=this.indexPages(f),{toc:l,nodeByTocId:o,duplicatedPrettyUrls:u,pages:f,pageByTocId:h}}tocIds(t){return t.flatMap((t=>[t.tocId,...this.tocIds(t.children)]))}buildPages(t,e){const i=t=>t.parentTocId?[...i(e[t.parentTocId]),t.parentTocId]:[];return t.map((t=>e[t])).map(((t,e)=>{var n,r,o,s,u;const c={number:e+1,title:t.title,rootTocId:t.tocId,toc:(null===(n=t.page)||void 0===n?void 0:n.onItsOwn)?[]:t.children,topics:[],hiddenTopics:[]},a=(t,e)=>(e?c.topics:c.hiddenTopics).push(t),l=null!==(o=null===(r=t.page)||void 0===r?void 0:r.parentsVisibility)&&void 0!==o?o:[];return i(t).forEach(((t,e)=>{a(t,l[e])})),a(t.tocId,null===(s=t.page)||void 0===s?void 0:s.visible),(null===(u=t.page)||void 0===u?void 0:u.onItsOwn)||c.topics.push(...this.tocIds(t.children)),c}))}indexPages(t){const e={};for(let i of t)for(let t of[...i.topics,...i.hiddenTopics])e[t]||(e[t]=i);return e}}class Je{constructor(t,e,i,n){this.converter=t,this.api=e,this.baseUrl=i,this.mapId=n,this.topics={},this.topicContents={},i.endsWith("/")||(this.baseUrl=i+"/")}static build(t,e,i){if(null==window.fluidtopics)throw console.error("Fluid Topics public API was not found. You can find it here: https://www.npmjs.com/package/@fluid-topics/public-api"),new Error("Fluid Topics public API not found");return new Je(new ze,new window.fluidtopics.FluidTopicsApi(t,e,!0),t,i)}clear(){this.map=void 0,this.enrichedToc=void 0,this.topics={},this.topicContents={}}getMap(){return this.loadIfNeeded((()=>this.map),(t=>this.map=t),(()=>this.api.getMap(this.mapId)))}getEnrichedToc(){return this.loadIfNeeded((()=>this.enrichedToc),(t=>this.enrichedToc=t),(()=>this.api.getTableOfContent(this.mapId).then((t=>this.converter.convertNodes(t)))))}async getToc(){return(await this.getEnrichedToc()).toc}async getTocNode(t){return(await this.getEnrichedToc()).nodeByTocId[t]}async getPage(t){const e=await this.getEnrichedToc();return e.pages[t-1]||e.pages[0]}async getPageByTocId(t){const e=await this.getEnrichedToc();return e.pageByTocId[t]||e.pages[0]}getTopicInfo(t){return this.loadIfNeeded((()=>this.topics[t]),(e=>this.topics[t]=e),(()=>this.api.getTopic(this.mapId,t)))}getTopicContent(t){return this.loadIfNeeded((()=>this.topicContents[t]),(e=>this.topicContents[t]=e),(()=>this.api.getTopicHTMLContent(this.mapId,t,"DESIGNED_READER")))}getLink(t,e,i){var n;t=t||"root";let r=this.enrichedToc,o=null===(n=null==r?void 0:r.nodeByTocId[t])||void 0===n?void 0:n.prettyUrl,s=o||`r/${this.mapId}/${t}`,u=new URL(s,this.baseUrl),c=null==r?void 0:r.pageByTocId[t];return e&&c&&c.number!==e&&u.searchParams.set("page",`${e}`),o&&(null==r?void 0:r.duplicatedPrettyUrls.has(o))&&u.searchParams.set("tocId",t),i&&u.searchParams.set("section",i),u.href}async loadIfNeeded(t,e,i){for(void 0===t()&&(e(!0),e(await i().catch((t=>(console.error(t),!1)))));!0===t();)await s(10);const n=t();if(!1===n)throw new Error("Could not load data");return n}}class Ve{constructor(t,i){this.store=t,this.slice=i,this.reloadDebouncer=new e(10)}static build(t){const e=(t=>_e({name:"ft-reader-"+t,initialState:{baseUrl:"",apiIntegrationIdentifier:"ft-reader",visibleTopics:[]},reducers:He}))(t.trim()||"context");return new Ve(function(t,e,i){window.ftReduxStores||(window.ftReduxStores={});const n=e||t.name;return window.ftReduxStores[n]||(window.ftReduxStores[n]=ke({reducer:t.reducer})),window.ftReduxStores[n]}(e),e)}setBaseUrl(t){this.setRequiredStateField("baseUrl","setBaseUrl",t)}setApiIntegrationIdentifier(t){this.setRequiredStateField("apiIntegrationIdentifier","setApiIntegrationIdentifier",t)}setMapId(t){this.setRequiredStateField("mapId","setMapId",t)}setVisibleTopics(t){this.dispatch(this.slice.actions.setVisibleTopics(t))}async navigateToTopic(t,e,i){for(;null===this.service;)await s(5);let n=null!=i?await this.service.getPage(i):await this.service.getPageByTocId(t);console.log(i,n),this.dispatch(this.slice.actions.setCurrentPage(n),this.slice.actions.setScrollTarget({tocId:t,section:e}))}async navigateToPage(t){for(;null===this.service;)await s(5);let e=await this.service.getPage(t);this.dispatch(this.slice.actions.setCurrentPage(e))}scrollDone(){this.dispatch(this.slice.actions.setScrollTarget({}))}setRequiredStateField(t,e,i){this.store.getState()[t]!==i&&(this.dispatch(this.slice.actions[e](i)),this.clearAll(),this.reload())}clearAll(){this.dispatch(this.slice.actions.setMap(void 0),this.slice.actions.setToc(void 0),this.slice.actions.setCurrentPage(void 0))}reload(){const t=this.store.getState();t.baseUrl&&t.apiIntegrationIdentifier&&t.mapId?this.service=Je.build(t.baseUrl,t.apiIntegrationIdentifier,t.mapId):this.service=void 0,this.reloadDebouncer.run((async()=>{this.reloadMap(),this.reloadToc()}))}async reloadMap(){var t;const e=await(null===(t=this.service)||void 0===t?void 0:t.getMap());this.dispatch(this.slice.actions.setMap(e))}async reloadToc(){var t;const e=await(null===(t=this.service)||void 0===t?void 0:t.getToc());this.dispatch(this.slice.actions.setToc(e))}dispatch(...t){for(let e of t)this.store.dispatch(e)}}var Ze,qe=function(t,e,i,n){for(var r,o=arguments.length,s=o<3?e:null===n?n=Object.getOwnPropertyDescriptor(e,i):n,u=t.length-1;u>=0;u--)(r=t[u])&&(s=(o<3?r(s):o>3?r(e,i,s):r(e,i))||s);return o>3&&s&&Object.defineProperty(e,i,s),s};class Xe extends CustomEvent{constructor(t){super("ft-reader-map-loaded",{detail:t})}}class Ge extends CustomEvent{constructor(t,e){super("ft-reader-visible-topics-change",{detail:{map:t,visibleTopics:e}})}}class Ye extends We{constructor(){super(...arguments),this.apiIntegrationIdentifier="ft-reader",this.visibleTopics=[]}render(){return B`
70
+ <slot @register-ft-reader-component=${this.registerComponent}></slot>
71
+ `}get stateManager(){return null==this._stateManager&&(this._stateManager=Ve.build(this.id||""+Math.round(1e4*Math.random())),this.store=this.stateManager.store),this._stateManager}updated(t){super.updated(t),t.has("baseUrl")&&this.baseUrl&&this.stateManager.setBaseUrl(this.baseUrl),t.has("apiIntegrationIdentifier")&&this.stateManager.setApiIntegrationIdentifier(this.apiIntegrationIdentifier),t.has("mapId")&&this.mapId&&(this.stateManager.setMapId(this.mapId),this.stateManager.navigateToTopic("root")),t.has("page")&&!this.tocId&&null!=this.page&&this.stateManager.navigateToPage(this.page),(t.has("tocId")||t.has("section")||t.has("page"))&&this.tocId&&this.stateManager.navigateToTopic(this.tocId,this.section,this.page)}contentAvailableCallback(t){super.contentAvailableCallback(t),(t.has("map")||t.has("toc"))&&this.map&&this.toc&&this.dispatchEvent(new Xe(this.map)),t.has("visibleTopics")&&Promise.all(this.visibleTopics.map((t=>this.stateManager.service.getTocNode(t)))).then((t=>{let e=t.map((t=>({tocId:t.tocId,title:t.title})));this.dispatchEvent(new Ge(this.map,e))}))}registerComponent(t){t.stopPropagation();t.composedPath()[0].setReaderStateManager(this.stateManager)}}Ye.styles=h`
72
+ `,qe([n()],Ye.prototype,"baseUrl",void 0),qe([n()],Ye.prototype,"apiIntegrationIdentifier",void 0),qe([n()],Ye.prototype,"mapId",void 0),qe([n()],Ye.prototype,"tocId",void 0),qe([n()],Ye.prototype,"section",void 0),qe([n({type:Number,converter:{fromAttribute:t=>t?+t:void 0}})],Ye.prototype,"page",void 0),qe([Be()],Ye.prototype,"map",void 0),qe([Be()],Ye.prototype,"toc",void 0),qe([Be()],Ye.prototype,"visibleTopics",void 0),(Ze="ft-reader-context",t=>{window.customElements.get(Ze)||window.customElements.define(Ze,t)})(Ye),t.FtReaderContext=Ye,t.MapLoadedEvent=Xe,t.VisibleTopicsChangeEvent=Ge,Object.defineProperty(t,"U",{value:!0})}({});
@@ -0,0 +1,2 @@
1
+ export * from "./ft-reader-context";
2
+ //# sourceMappingURL=index.d.ts.map
package/build/index.js ADDED
@@ -0,0 +1,5 @@
1
+ import { customElement } from "@fluid-topics/ft-wc-utils";
2
+ import { FtReaderContext } from "./ft-reader-context";
3
+ export * from "./ft-reader-context";
4
+ customElement("ft-reader-context")(FtReaderContext);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,16 @@
1
+ import type { FtReaderStateManager as FtReaderStateManagerInternal } from "./store/FtReaderStateManager";
2
+ import { FtLitElementRedux } from "@fluid-topics/ft-wc-utils";
3
+ import type { FtReaderService } from "./store/utils/FtReaderService";
4
+ export * from "./store/model";
5
+ export declare type FtReaderStateManager = FtReaderStateManagerInternal;
6
+ export declare class RegisterReaderComponentEvent extends Event {
7
+ constructor();
8
+ }
9
+ export declare class FtReaderComponent extends FtLitElementRedux {
10
+ protected stateManager?: FtReaderStateManager;
11
+ setReaderStateManager(stateManager: FtReaderStateManager): void;
12
+ protected get service(): FtReaderService | undefined;
13
+ connectedCallback(): void;
14
+ disconnectedCallback(): void;
15
+ }
16
+ //# sourceMappingURL=registration.d.ts.map
@@ -0,0 +1,37 @@
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 { FtLitElementRedux } from "@fluid-topics/ft-wc-utils";
8
+ import { state } from "lit/decorators.js";
9
+ export * from "./store/model";
10
+ export class RegisterReaderComponentEvent extends Event {
11
+ constructor() {
12
+ super("register-ft-reader-component", { bubbles: true, composed: true });
13
+ }
14
+ }
15
+ export class FtReaderComponent extends FtLitElementRedux {
16
+ setReaderStateManager(stateManager) {
17
+ this.stateManager = stateManager;
18
+ this.store = stateManager.store;
19
+ }
20
+ get service() {
21
+ var _a;
22
+ return (_a = this.stateManager) === null || _a === void 0 ? void 0 : _a.service;
23
+ }
24
+ connectedCallback() {
25
+ super.connectedCallback();
26
+ setTimeout(() => this.dispatchEvent(new RegisterReaderComponentEvent()), 10);
27
+ }
28
+ disconnectedCallback() {
29
+ super.disconnectedCallback();
30
+ this.store = undefined;
31
+ this.stateManager = undefined;
32
+ }
33
+ }
34
+ __decorate([
35
+ state()
36
+ ], FtReaderComponent.prototype, "stateManager", void 0);
37
+ //# sourceMappingURL=registration.js.map
@@ -0,0 +1,26 @@
1
+ import { Slice, Store } from "@reduxjs/toolkit";
2
+ import { FtReaderState } from "./model";
3
+ import { FtReaderStateReducers } from "./redux";
4
+ import { FtReaderService } from "./utils/FtReaderService";
5
+ export declare class FtReaderStateManager {
6
+ store: Store<FtReaderState>;
7
+ private slice;
8
+ static build(id: string): FtReaderStateManager;
9
+ service?: FtReaderService;
10
+ constructor(store: Store<FtReaderState>, slice: Slice<FtReaderState, FtReaderStateReducers, string>);
11
+ setBaseUrl(baseUrl: string): void;
12
+ setApiIntegrationIdentifier(apiIntegrationIdentifier: string): void;
13
+ setMapId(mapId: string): void;
14
+ setVisibleTopics(tocIds: string[]): void;
15
+ navigateToTopic(tocId: string, section?: string, pageNumber?: number): Promise<void>;
16
+ navigateToPage(pageNumber: number): Promise<void>;
17
+ scrollDone(): void;
18
+ private setRequiredStateField;
19
+ private clearAll;
20
+ private reloadDebouncer;
21
+ private reload;
22
+ private reloadMap;
23
+ private reloadToc;
24
+ private dispatch;
25
+ }
26
+ //# sourceMappingURL=FtReaderStateManager.d.ts.map
@@ -0,0 +1,83 @@
1
+ import { Debouncer, delay, getStore } from "@fluid-topics/ft-wc-utils";
2
+ import { createReaderSlice } from "./redux";
3
+ import { FtReaderService } from "./utils/FtReaderService";
4
+ export class FtReaderStateManager {
5
+ constructor(store, slice) {
6
+ this.store = store;
7
+ this.slice = slice;
8
+ this.reloadDebouncer = new Debouncer(10);
9
+ }
10
+ static build(id) {
11
+ const slice = createReaderSlice(id.trim() || "context");
12
+ return new FtReaderStateManager(getStore(slice), slice);
13
+ }
14
+ setBaseUrl(baseUrl) {
15
+ this.setRequiredStateField("baseUrl", "setBaseUrl", baseUrl);
16
+ }
17
+ setApiIntegrationIdentifier(apiIntegrationIdentifier) {
18
+ this.setRequiredStateField("apiIntegrationIdentifier", "setApiIntegrationIdentifier", apiIntegrationIdentifier);
19
+ }
20
+ setMapId(mapId) {
21
+ this.setRequiredStateField("mapId", "setMapId", mapId);
22
+ }
23
+ setVisibleTopics(tocIds) {
24
+ this.dispatch(this.slice.actions.setVisibleTopics(tocIds));
25
+ }
26
+ async navigateToTopic(tocId, section, pageNumber) {
27
+ while (this.service === null) {
28
+ await delay(5);
29
+ }
30
+ let page = pageNumber != null ? await this.service.getPage(pageNumber) : await this.service.getPageByTocId(tocId);
31
+ console.log(pageNumber, page);
32
+ this.dispatch(this.slice.actions.setCurrentPage(page), this.slice.actions.setScrollTarget({ tocId, section }));
33
+ }
34
+ async navigateToPage(pageNumber) {
35
+ while (this.service === null) {
36
+ await delay(5);
37
+ }
38
+ let page = await this.service.getPage(pageNumber);
39
+ this.dispatch(this.slice.actions.setCurrentPage(page));
40
+ }
41
+ scrollDone() {
42
+ this.dispatch(this.slice.actions.setScrollTarget({}));
43
+ }
44
+ setRequiredStateField(field, setter, value) {
45
+ if (this.store.getState()[field] !== value) {
46
+ this.dispatch(this.slice.actions[setter](value));
47
+ this.clearAll();
48
+ this.reload();
49
+ }
50
+ }
51
+ clearAll() {
52
+ this.dispatch(this.slice.actions.setMap(undefined), this.slice.actions.setToc(undefined), this.slice.actions.setCurrentPage(undefined));
53
+ }
54
+ reload() {
55
+ const state = this.store.getState();
56
+ if (state.baseUrl && state.apiIntegrationIdentifier && state.mapId) {
57
+ this.service = FtReaderService.build(state.baseUrl, state.apiIntegrationIdentifier, state.mapId);
58
+ }
59
+ else {
60
+ this.service = undefined;
61
+ }
62
+ this.reloadDebouncer.run(async () => {
63
+ this.reloadMap();
64
+ this.reloadToc();
65
+ });
66
+ }
67
+ async reloadMap() {
68
+ var _a;
69
+ const map = await ((_a = this.service) === null || _a === void 0 ? void 0 : _a.getMap());
70
+ this.dispatch(this.slice.actions.setMap(map));
71
+ }
72
+ async reloadToc() {
73
+ var _a;
74
+ const toc = await ((_a = this.service) === null || _a === void 0 ? void 0 : _a.getToc());
75
+ this.dispatch(this.slice.actions.setToc(toc));
76
+ }
77
+ dispatch(...actions) {
78
+ for (let action of actions) {
79
+ this.store.dispatch(action);
80
+ }
81
+ }
82
+ }
83
+ //# sourceMappingURL=FtReaderStateManager.js.map
@@ -0,0 +1,35 @@
1
+ import { Store } from "@reduxjs/toolkit";
2
+ import { FtMap, FtTocNode, FtTopic } from "@fluid-topics/public-api";
3
+ export declare type FtReaderStore = Store<FtReaderState>;
4
+ export interface FtReaderTocNode extends FtTocNode {
5
+ depth: number;
6
+ parentTocId?: string;
7
+ children: Array<FtReaderTocNode>;
8
+ }
9
+ export interface FtReaderPage {
10
+ number: number;
11
+ title: string;
12
+ rootTocId: string;
13
+ toc: Array<FtReaderTocNode>;
14
+ topics: Array<string>;
15
+ hiddenTopics: Array<string>;
16
+ }
17
+ export interface FtReaderTopic extends FtTopic {
18
+ htmlContent?: string;
19
+ }
20
+ export declare type FtReaderScrollTarget = {
21
+ tocId?: string;
22
+ section?: string;
23
+ };
24
+ export interface FtReaderState {
25
+ baseUrl: string;
26
+ apiIntegrationIdentifier: string;
27
+ mapId?: string;
28
+ tocId?: string;
29
+ map?: FtMap;
30
+ toc?: Array<FtReaderTocNode>;
31
+ currentPage?: FtReaderPage;
32
+ scrollTarget?: FtReaderScrollTarget;
33
+ visibleTopics: string[];
34
+ }
35
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1,27 @@
1
+ import { PayloadAction } from "@reduxjs/toolkit";
2
+ import { FtReaderState } from "./model";
3
+ declare const readerStateReducers: {
4
+ setBaseUrl: (state: FtReaderState, action: PayloadAction<FtReaderState["baseUrl"]>) => void;
5
+ setApiIntegrationIdentifier: (state: FtReaderState, action: PayloadAction<FtReaderState["apiIntegrationIdentifier"]>) => void;
6
+ setMapId: (state: FtReaderState, action: PayloadAction<FtReaderState["mapId"]>) => void;
7
+ setTocId: (state: FtReaderState, action: PayloadAction<FtReaderState["tocId"]>) => void;
8
+ setMap: (state: FtReaderState, action: PayloadAction<FtReaderState["map"]>) => void;
9
+ setToc: (state: FtReaderState, action: PayloadAction<FtReaderState["toc"]>) => void;
10
+ setCurrentPage: (state: FtReaderState, action: PayloadAction<FtReaderState["currentPage"]>) => void;
11
+ setScrollTarget: (state: FtReaderState, action: PayloadAction<FtReaderState["scrollTarget"]>) => void;
12
+ setVisibleTopics: (state: FtReaderState, action: PayloadAction<FtReaderState["visibleTopics"]>) => void;
13
+ };
14
+ export declare type FtReaderStateReducers = typeof readerStateReducers;
15
+ export declare const createReaderSlice: (id: string) => import("@reduxjs/toolkit").Slice<FtReaderState, {
16
+ setBaseUrl: (state: FtReaderState, action: PayloadAction<FtReaderState["baseUrl"]>) => void;
17
+ setApiIntegrationIdentifier: (state: FtReaderState, action: PayloadAction<FtReaderState["apiIntegrationIdentifier"]>) => void;
18
+ setMapId: (state: FtReaderState, action: PayloadAction<FtReaderState["mapId"]>) => void;
19
+ setTocId: (state: FtReaderState, action: PayloadAction<FtReaderState["tocId"]>) => void;
20
+ setMap: (state: FtReaderState, action: PayloadAction<FtReaderState["map"]>) => void;
21
+ setToc: (state: FtReaderState, action: PayloadAction<FtReaderState["toc"]>) => void;
22
+ setCurrentPage: (state: FtReaderState, action: PayloadAction<FtReaderState["currentPage"]>) => void;
23
+ setScrollTarget: (state: FtReaderState, action: PayloadAction<FtReaderState["scrollTarget"]>) => void;
24
+ setVisibleTopics: (state: FtReaderState, action: PayloadAction<FtReaderState["visibleTopics"]>) => void;
25
+ }, string>;
26
+ export {};
27
+ //# sourceMappingURL=redux.d.ts.map
@@ -0,0 +1,40 @@
1
+ import { createSlice } from "@reduxjs/toolkit";
2
+ const readerStateReducers = {
3
+ setBaseUrl: (state, action) => {
4
+ state.baseUrl = action.payload;
5
+ },
6
+ setApiIntegrationIdentifier: (state, action) => {
7
+ state.apiIntegrationIdentifier = action.payload;
8
+ },
9
+ setMapId: (state, action) => {
10
+ state.mapId = action.payload;
11
+ },
12
+ setTocId: (state, action) => {
13
+ state.tocId = action.payload;
14
+ },
15
+ setMap: (state, action) => {
16
+ state.map = action.payload;
17
+ },
18
+ setToc: (state, action) => {
19
+ state.toc = action.payload;
20
+ },
21
+ setCurrentPage: (state, action) => {
22
+ state.currentPage = action.payload;
23
+ },
24
+ setScrollTarget: (state, action) => {
25
+ state.scrollTarget = action.payload;
26
+ },
27
+ setVisibleTopics: (state, action) => {
28
+ state.visibleTopics = action.payload;
29
+ },
30
+ };
31
+ export const createReaderSlice = (id) => createSlice({
32
+ name: "ft-reader-" + id,
33
+ initialState: {
34
+ baseUrl: "",
35
+ apiIntegrationIdentifier: "ft-reader",
36
+ visibleTopics: []
37
+ },
38
+ reducers: readerStateReducers
39
+ });
40
+ //# sourceMappingURL=redux.js.map
@@ -0,0 +1,16 @@
1
+ import { FtTocNode } from "@fluid-topics/public-api";
2
+ import { FtReaderPage, FtReaderTocNode } from "../model";
3
+ export declare type EnrichedToc = {
4
+ toc: Array<FtReaderTocNode>;
5
+ nodeByTocId: Record<string, FtReaderTocNode>;
6
+ duplicatedPrettyUrls: Set<string>;
7
+ pages: Array<FtReaderPage>;
8
+ pageByTocId: Record<string, FtReaderPage>;
9
+ };
10
+ export declare class FtReaderConverter {
11
+ convertNodes(nodes?: Array<FtTocNode>): EnrichedToc;
12
+ private tocIds;
13
+ private buildPages;
14
+ private indexPages;
15
+ }
16
+ //# sourceMappingURL=FtReaderConverter.d.ts.map
@@ -0,0 +1,88 @@
1
+ export class FtReaderConverter {
2
+ convertNodes(nodes) {
3
+ var _a, _b, _c, _d;
4
+ const nodeByTocId = {};
5
+ const knownPrettyUrls = new Set();
6
+ const duplicatedPrettyUrls = new Set();
7
+ const pagesToBuild = [];
8
+ const convertNodesRec = (nodes, depth, parentTocId) => nodes.map(node => {
9
+ var _a;
10
+ if (node.page) {
11
+ pagesToBuild.push(node.tocId);
12
+ }
13
+ let prettyUrl = (_a = node.prettyUrl) === null || _a === void 0 ? void 0 : _a.replace(/^\//, "");
14
+ const enrichedNode = {
15
+ ...node,
16
+ prettyUrl,
17
+ depth,
18
+ parentTocId,
19
+ children: convertNodesRec(node.children, depth + 1, node.tocId)
20
+ };
21
+ if (prettyUrl) {
22
+ if (knownPrettyUrls.has(prettyUrl)) {
23
+ duplicatedPrettyUrls.add(prettyUrl);
24
+ }
25
+ knownPrettyUrls.add(prettyUrl);
26
+ }
27
+ nodeByTocId[node.tocId] = enrichedNode;
28
+ return enrichedNode;
29
+ });
30
+ const toc = convertNodesRec(nodes !== null && nodes !== void 0 ? nodes : [], 1);
31
+ const pages = this.buildPages(pagesToBuild, nodeByTocId);
32
+ let pageByTocId = {};
33
+ if (pages.length === 0) {
34
+ pages.push({
35
+ number: 1,
36
+ title: (_b = (_a = toc[0]) === null || _a === void 0 ? void 0 : _a.title) !== null && _b !== void 0 ? _b : "",
37
+ rootTocId: (_d = (_c = toc[0]) === null || _c === void 0 ? void 0 : _c.tocId) !== null && _d !== void 0 ? _d : "root",
38
+ toc: [],
39
+ topics: this.tocIds(toc),
40
+ hiddenTopics: []
41
+ });
42
+ }
43
+ else {
44
+ pageByTocId = this.indexPages(pages);
45
+ }
46
+ return { toc, nodeByTocId, duplicatedPrettyUrls, pages, pageByTocId };
47
+ }
48
+ tocIds(nodes) {
49
+ return nodes.flatMap(node => [node.tocId, ...this.tocIds(node.children)]);
50
+ }
51
+ buildPages(pagesToBuild, nodeByTocId) {
52
+ const buildBreadcrumb = (n) => n.parentTocId ? [...buildBreadcrumb(nodeByTocId[n.parentTocId]), n.parentTocId] : [];
53
+ return pagesToBuild.map(tocId => nodeByTocId[tocId])
54
+ .map((node, index) => {
55
+ var _a, _b, _c, _d, _e;
56
+ const page = {
57
+ number: index + 1,
58
+ title: node.title,
59
+ rootTocId: node.tocId,
60
+ toc: ((_a = node.page) === null || _a === void 0 ? void 0 : _a.onItsOwn) ? [] : node.children,
61
+ topics: [],
62
+ hiddenTopics: [],
63
+ };
64
+ const add = (tocId, visible) => (visible ? page.topics : page.hiddenTopics).push(tocId);
65
+ const parentsVisibility = (_c = (_b = node.page) === null || _b === void 0 ? void 0 : _b.parentsVisibility) !== null && _c !== void 0 ? _c : [];
66
+ buildBreadcrumb(node).forEach((tocId, index) => {
67
+ add(tocId, parentsVisibility[index]);
68
+ });
69
+ add(node.tocId, (_d = node.page) === null || _d === void 0 ? void 0 : _d.visible);
70
+ if (!((_e = node.page) === null || _e === void 0 ? void 0 : _e.onItsOwn)) {
71
+ page.topics.push(...this.tocIds(node.children));
72
+ }
73
+ return page;
74
+ });
75
+ }
76
+ indexPages(pages) {
77
+ const pageByTocId = {};
78
+ for (let page of pages) {
79
+ for (let tocId of [...page.topics, ...page.hiddenTopics]) {
80
+ if (!pageByTocId[tocId]) {
81
+ pageByTocId[tocId] = page;
82
+ }
83
+ }
84
+ }
85
+ return pageByTocId;
86
+ }
87
+ }
88
+ //# sourceMappingURL=FtReaderConverter.js.map
@@ -0,0 +1,34 @@
1
+ import type { FluidTopicsApi, FtMap, FtTopic } from "@fluid-topics/public-api";
2
+ import { FtReaderPage, FtReaderTocNode } from "../model";
3
+ import { FtReaderConverter } from "./FtReaderConverter";
4
+ declare global {
5
+ interface Window {
6
+ fluidtopics?: {
7
+ FluidTopicsApi: new (tenantBaseUrl: string, integrationIdentifier: string, overrideIdentifierIfOnTenant?: boolean) => FluidTopicsApi;
8
+ };
9
+ }
10
+ }
11
+ export declare class FtReaderService {
12
+ private converter;
13
+ private api;
14
+ private baseUrl;
15
+ private mapId;
16
+ static build(baseUrl: string, apiIntegrationIdentifier: string, mapId: string): FtReaderService;
17
+ constructor(converter: FtReaderConverter, api: FluidTopicsApi, baseUrl: string, mapId: string);
18
+ clear(): void;
19
+ private map?;
20
+ getMap(): Promise<FtMap>;
21
+ private enrichedToc?;
22
+ private getEnrichedToc;
23
+ getToc(): Promise<Array<FtReaderTocNode>>;
24
+ getTocNode(tocId: string): Promise<FtReaderTocNode>;
25
+ getPage(number: number): Promise<FtReaderPage>;
26
+ getPageByTocId(tocId: string): Promise<FtReaderPage>;
27
+ private topics;
28
+ getTopicInfo(contentId: string): Promise<FtTopic>;
29
+ private topicContents;
30
+ getTopicContent(contentId: string): Promise<string>;
31
+ getLink(tocId?: string, pageNumber?: number, section?: string): string;
32
+ private loadIfNeeded;
33
+ }
34
+ //# sourceMappingURL=FtReaderService.d.ts.map
@@ -0,0 +1,94 @@
1
+ import { delay } from "@fluid-topics/ft-wc-utils";
2
+ import { FtReaderConverter } from "./FtReaderConverter";
3
+ export class FtReaderService {
4
+ constructor(converter, api, baseUrl, mapId) {
5
+ this.converter = converter;
6
+ this.api = api;
7
+ this.baseUrl = baseUrl;
8
+ this.mapId = mapId;
9
+ this.topics = {};
10
+ this.topicContents = {};
11
+ if (!baseUrl.endsWith("/")) {
12
+ this.baseUrl = baseUrl + "/";
13
+ }
14
+ }
15
+ static build(baseUrl, apiIntegrationIdentifier, mapId) {
16
+ if (window.fluidtopics == null) {
17
+ console.error("Fluid Topics public API was not found. You can find it here: https://www.npmjs.com/package/@fluid-topics/public-api");
18
+ throw new Error("Fluid Topics public API not found");
19
+ }
20
+ return new FtReaderService(new FtReaderConverter(), new window.fluidtopics.FluidTopicsApi(baseUrl, apiIntegrationIdentifier, true), baseUrl, mapId);
21
+ }
22
+ clear() {
23
+ this.map = undefined;
24
+ this.enrichedToc = undefined;
25
+ this.topics = {};
26
+ this.topicContents = {};
27
+ }
28
+ getMap() {
29
+ return this.loadIfNeeded(() => this.map, v => this.map = v, () => this.api.getMap(this.mapId));
30
+ }
31
+ getEnrichedToc() {
32
+ return this.loadIfNeeded(() => this.enrichedToc, v => this.enrichedToc = v, () => this.api.getTableOfContent(this.mapId)
33
+ .then(toc => this.converter.convertNodes(toc)));
34
+ }
35
+ async getToc() {
36
+ const enrichedToc = await this.getEnrichedToc();
37
+ return enrichedToc.toc;
38
+ }
39
+ async getTocNode(tocId) {
40
+ const enrichedToc = await this.getEnrichedToc();
41
+ return enrichedToc.nodeByTocId[tocId];
42
+ }
43
+ async getPage(number) {
44
+ const enrichedToc = await this.getEnrichedToc();
45
+ return enrichedToc.pages[number - 1] || enrichedToc.pages[0];
46
+ }
47
+ async getPageByTocId(tocId) {
48
+ const enrichedToc = await this.getEnrichedToc();
49
+ return enrichedToc.pageByTocId[tocId] || enrichedToc.pages[0];
50
+ }
51
+ getTopicInfo(contentId) {
52
+ return this.loadIfNeeded(() => this.topics[contentId], v => this.topics[contentId] = v, () => this.api.getTopic(this.mapId, contentId));
53
+ }
54
+ getTopicContent(contentId) {
55
+ return this.loadIfNeeded(() => this.topicContents[contentId], v => this.topicContents[contentId] = v, () => this.api.getTopicHTMLContent(this.mapId, contentId, "DESIGNED_READER"));
56
+ }
57
+ getLink(tocId, pageNumber, section) {
58
+ var _a;
59
+ tocId = tocId || "root";
60
+ let enrichedToc = this.enrichedToc;
61
+ let prettyUrl = (_a = enrichedToc === null || enrichedToc === void 0 ? void 0 : enrichedToc.nodeByTocId[tocId]) === null || _a === void 0 ? void 0 : _a.prettyUrl;
62
+ let path = prettyUrl ? prettyUrl : `r/${this.mapId}/${tocId}`;
63
+ let url = new URL(path, this.baseUrl);
64
+ let page = enrichedToc === null || enrichedToc === void 0 ? void 0 : enrichedToc.pageByTocId[tocId];
65
+ if (pageNumber && page && page.number !== pageNumber) {
66
+ url.searchParams.set("page", `${pageNumber}`);
67
+ }
68
+ if (prettyUrl && (enrichedToc === null || enrichedToc === void 0 ? void 0 : enrichedToc.duplicatedPrettyUrls.has(prettyUrl))) {
69
+ url.searchParams.set("tocId", tocId);
70
+ }
71
+ if (section) {
72
+ url.searchParams.set("section", section);
73
+ }
74
+ return url.href;
75
+ }
76
+ async loadIfNeeded(get, set, load) {
77
+ if (get() === undefined) {
78
+ set(true);
79
+ set(await load().catch(e => {
80
+ console.error(e);
81
+ return false;
82
+ }));
83
+ }
84
+ while (get() === true) {
85
+ await delay(10);
86
+ }
87
+ const value = get();
88
+ if (value === false) {
89
+ throw new Error("Could not load data");
90
+ }
91
+ return value;
92
+ }
93
+ }
94
+ //# sourceMappingURL=FtReaderService.js.map
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@fluid-topics/ft-reader-context",
3
+ "version": "0.3.7",
4
+ "description": "Context block for integrated reader components",
5
+ "keywords": [
6
+ "Lit"
7
+ ],
8
+ "author": "Fluid Topics <devtopics@antidot.net>",
9
+ "license": "ISC",
10
+ "main": "build/index.js",
11
+ "web": "build/ft-reader-context.min.js",
12
+ "typings": "build/index",
13
+ "files": [
14
+ "build/**/*.js",
15
+ "build/**/*.ts"
16
+ ],
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "ssh://git@scm.mrs.antidot.net:2222/fluidtopics/ft-web-components.git"
20
+ },
21
+ "dependencies": {
22
+ "@fluid-topics/ft-wc-utils": "0.3.7",
23
+ "@reduxjs/toolkit": "^1.6.2",
24
+ "lit": "2.2.8"
25
+ },
26
+ "devDependencies": {
27
+ "@fluid-topics/public-api": "1.0.22"
28
+ },
29
+ "peerDependencies": {
30
+ "@fluid-topics/public-api": "1.0.22"
31
+ },
32
+ "gitHead": "fe65a046ba9d3df70aac994a4e0aac1b550df72f"
33
+ }