@internetarchive/ia-item-navigator 0.0.0-a10 → 0.0.0-a12

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.
Files changed (36) hide show
  1. package/demo/app-root.ts +6 -4
  2. package/dist/demo/app-root.d.ts +0 -1
  3. package/dist/demo/app-root.js +1 -3
  4. package/dist/demo/app-root.js.map +1 -1
  5. package/dist/src/interfaces/nav-controller-interface.d.ts +9 -0
  6. package/dist/src/interfaces/nav-controller-interface.js.map +1 -1
  7. package/dist/src/item-inspector/item-inspector.d.ts +0 -47
  8. package/dist/src/item-inspector/item-inspector.js +253 -271
  9. package/dist/src/item-inspector/item-inspector.js.map +1 -1
  10. package/dist/src/item-navigator.d.ts +14 -7
  11. package/dist/src/item-navigator.js +60 -30
  12. package/dist/src/item-navigator.js.map +1 -1
  13. package/dist/src/no-theater-available.d.ts +9 -0
  14. package/dist/src/no-theater-available.js +79 -0
  15. package/dist/src/no-theater-available.js.map +1 -0
  16. package/dist/test/book-nav-stub.d.ts +17 -0
  17. package/dist/test/book-nav-stub.js +42 -0
  18. package/dist/test/book-nav-stub.js.map +1 -0
  19. package/dist/test/ia-item-navigator.test.d.ts +1 -0
  20. package/dist/test/ia-item-navigator.test.js +146 -114
  21. package/dist/test/ia-item-navigator.test.js.map +1 -1
  22. package/dist/test/ia-stub.d.ts +22 -0
  23. package/dist/test/ia-stub.js +34 -3
  24. package/dist/test/ia-stub.js.map +1 -1
  25. package/dist/test/no-theater-available.test.d.ts +1 -0
  26. package/dist/test/no-theater-available.test.js +27 -0
  27. package/dist/test/no-theater-available.test.js.map +1 -0
  28. package/package.json +3 -2
  29. package/src/interfaces/nav-controller-interface.ts +13 -0
  30. package/src/item-navigator.ts +69 -36
  31. package/src/no-theater-available.ts +87 -0
  32. package/test/book-nav-stub.ts +35 -0
  33. package/test/ia-item-navigator.test.ts +191 -143
  34. package/test/ia-stub.ts +78 -2
  35. package/test/no-theater-available.test.ts +32 -0
  36. package/src/item-inspector/item-inspector.ts +0 -296
@@ -1,94 +1,84 @@
1
1
  /* eslint-disable camelcase */
2
- /* eslint-disable import/no-duplicates */
3
2
  import { html, fixture, expect } from '@open-wc/testing';
4
3
  import Sinon from 'sinon';
5
- // import { MetadataResponse, Metadata, File, Review, SpeechMusicASREntry } from '@internetarchive/search-service';
6
- import { SharedResizeObserver,
7
- // SharedResizeObserverInterface
8
- } from '@internetarchive/shared-resize-observer';
4
+ import { SharedResizeObserver } from '@internetarchive/shared-resize-observer';
9
5
  import '../src/item-navigator';
10
- // import { IaItemInspector } from '../src/item-inspector/item-inspector';
11
- // class ItemStub implements MetadataResponse {
12
- // constructor() {
13
- // this.rawResponse = '';
14
- // this.created = 1;
15
- // this.d1 = 'hello';
16
- // this.d2 = 'boop';
17
- // this.dir = 'whee';
18
- // this.files = [];
19
- // this.files_count = 0;
20
- // this.item_last_updated = 2020;
21
- // this.item_size = 111;
22
- // this.metadata = { identifier: 'foo' } as Metadata;
23
- // this.server = 'foo-server';
24
- // this.uniq = 2;
25
- // this.workable_servers = ['abc'];
26
- // }
27
- // rawResponse: any;
28
- // created: number;
29
- // d1: string;
30
- // d2: string;
31
- // dir: string;
32
- // files: File[];
33
- // files_count: number;
34
- // item_last_updated: number;
35
- // item_size: number;
36
- // metadata: Metadata;
37
- // server: string;
38
- // uniq: number;
39
- // workable_servers: string[];
40
- // speech_vs_music_asr?: SpeechMusicASREntry[] | undefined;
41
- // reviews?: Review[] | undefined;
42
- // };
6
+ import '../test/book-nav-stub';
7
+ import { ItemStub, menuProvider, shortcut } from '../test/ia-stub';
43
8
  afterEach(() => {
44
9
  Sinon.restore();
45
10
  });
46
11
  describe('ItemNavigator', () => {
47
- describe('Loading Behavior', () => {
48
- it('shows the spinning loader', async () => {
12
+ describe('Theaters', () => {
13
+ it('shows <ia-no-theater-available> by default', async () => {
49
14
  var _a;
50
- const el = await fixture(html `<ia-item-navigator></ia-item-navigator>`);
51
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('ia-itemnav-loader')).to.be.exist;
15
+ const el = await fixture(html `<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`);
16
+ expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('ia-no-theater-available')).to.exist;
52
17
  });
53
- it('hides reader section if not `loaded`', async () => {
18
+ it('shows <book-navigator> if `this.itemType = "bookreader"`', async () => {
54
19
  var _a;
55
- const el = await fixture(html `<ia-item-navigator></ia-item-navigator>`);
56
- const mainTheaterSection = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#reader');
57
- expect(mainTheaterSection).to.be.exist;
58
- expect(mainTheaterSection === null || mainTheaterSection === void 0 ? void 0 : mainTheaterSection.classList.contains('hide')).to.be.true;
59
- expect(el.loaded).to.be.false;
60
- expect(el.hasAttribute('loaded')).to.equal(false);
20
+ const el = await fixture(html `<ia-item-navigator
21
+ .itemType=${`bookreader`}
22
+ .item=${new ItemStub()}
23
+ ></ia-item-navigator>`);
24
+ await el.updateComplete;
25
+ el.toggleMenu();
26
+ await el.updateComplete;
27
+ const bookNavigator = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('book-navigator');
28
+ await bookNavigator.updateComplete;
29
+ console.log('132234234324324324');
30
+ // TODO: add BookNavigator type & import via @internetarchive/bookreader
31
+ // For now, let's check that the BookNavigator element and its properties exist w/ stub
32
+ expect(bookNavigator).to.exist;
33
+ expect(bookNavigator === null || bookNavigator === void 0 ? void 0 : bookNavigator.modal).to.exist;
34
+ expect(bookNavigator === null || bookNavigator === void 0 ? void 0 : bookNavigator.baseHost).to.exist;
35
+ expect(bookNavigator === null || bookNavigator === void 0 ? void 0 : bookNavigator.book).to.exist;
36
+ expect(bookNavigator === null || bookNavigator === void 0 ? void 0 : bookNavigator.signedIn).to.be.null;
37
+ expect(bookNavigator === null || bookNavigator === void 0 ? void 0 : bookNavigator.sharedObserver).to.exist;
38
+ expect(bookNavigator === null || bookNavigator === void 0 ? void 0 : bookNavigator.sideMenuOpen).to.exist;
61
39
  });
62
- it('shows reader once `loaded`', async () => {
40
+ });
41
+ describe('`el.loaded`', () => {
42
+ it('toggles the spinning loader', async () => {
63
43
  var _a;
64
44
  const el = await fixture(html `<ia-item-navigator></ia-item-navigator>`);
65
- el.loaded = true;
66
- await el.updateComplete;
45
+ expect(el.loaded).to.be.null; // initial load
46
+ expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('ia-itemnav-loader')).to.exist;
47
+ });
48
+ it('hides reader section if `!loaded`', async () => {
49
+ var _a, _b;
50
+ const el = await fixture(html `<ia-item-navigator></ia-item-navigator>`);
51
+ expect((_b = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#reader')) === null || _b === void 0 ? void 0 : _b.getAttribute('class')).to.contain('hide');
52
+ });
53
+ it('shows reader when `loaded` ', async () => {
54
+ var _a, _b;
55
+ const el = await fixture(html `<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`);
67
56
  const mainTheaterSection = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#reader');
68
57
  expect(mainTheaterSection === null || mainTheaterSection === void 0 ? void 0 : mainTheaterSection.classList.contains('hide')).to.be.false;
69
58
  expect(el.loaded).to.be.true;
70
59
  // `loaded` property is reflected as DOM attribute
71
60
  expect(el.hasAttribute('loaded')).to.equal(true);
61
+ expect((_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('ia-no-theater-available')).to.exist;
62
+ });
63
+ it('listens to `@loadingStateUpdated` to update `loaded`', async () => {
64
+ const el = await fixture(html `<ia-item-navigator></ia-item-navigator>`);
65
+ await el.updateComplete;
66
+ const spy = Sinon.spy();
67
+ el.loadingStateUpdated = spy;
68
+ el.loaded = false;
69
+ await el.updateComplete;
70
+ // check base properties
71
+ expect(el.loaded).to.equal(false);
72
+ expect(el.item).to.be.undefined;
73
+ // hydrate item
74
+ el.item = new ItemStub();
75
+ await el.updateComplete;
76
+ // spy fires
77
+ expect(spy.called).to.equal(true);
78
+ expect(spy.callCount).to.equal(1);
72
79
  });
73
- // it('listens to event `loadingStateUpdated` to signal load', async () => {
74
- // const item = new ItemStub() as MetadataResponse;
75
- // const el = await fixture<ItemNavigator>(
76
- // html`<ia-item-navigator .item=${item}></ia-item-navigator>`
77
- // );
78
- // // const loadSpy = Sinon.spy();
79
- // // el.loadingStateUpdated = loadSpy;
80
- // await el.updateComplete;
81
- // expect(el?.item).to.not.be.undefined;
82
- // const mainTheaterSection = el.shadowRoot?.querySelector('#reader');
83
- // const contentController = mainTheaterSection?.querySelector('ia-item-inspector');
84
- // expect(contentController).to.equal(32324);
85
- // // const loadingEvent = new CustomEvent('loadingStateUpdated', { detail: { loaded: true }}) as IntLoadingStateUpdatedEvent;
86
- // // contentController?.emitLoadingStatusUpdate(true);
87
- // // await contentController?.updateComplete;
88
- // // await el.updateComplete;
89
- // });
90
80
  });
91
- describe('It uses a shared ResizeObserver', () => {
81
+ describe('`el.sharedObserver`', () => {
92
82
  it('can create one', async () => {
93
83
  const el = await fixture(html `<ia-item-navigator></ia-item-navigator>`);
94
84
  await el.updateComplete;
@@ -104,7 +94,7 @@ describe('ItemNavigator', () => {
104
94
  expect(el.sharedObserver).to.be.instanceOf(SharedResizeObserver);
105
95
  });
106
96
  });
107
- describe('It uses a shared modal component', () => {
97
+ describe('`el.modal`', () => {
108
98
  it('can create one', async () => {
109
99
  const el = await fixture(html `<ia-item-navigator></ia-item-navigator>`);
110
100
  await el.updateComplete;
@@ -122,48 +112,90 @@ describe('ItemNavigator', () => {
122
112
  expect(observerSpy.called).to.equal(true);
123
113
  });
124
114
  });
125
- // describe('full browser window immersion "fullscreen"', () => {
126
- // it('creates reflected attribute `viewportinfullscreen`', () =>{
127
- // /** to help with external styling adjustmnents */
128
- // });
129
- // });
130
- // describe('Loads side menu contents', () =>{
131
- // });
132
- // describe('Menu Shortcuts', () => {
133
- // });
134
- // it('passes the a11y audit', async () => {
135
- // const el = await fixture<YourWebComponent>(
136
- // html`<your-webcomponent></your-webcomponent>`
137
- // );
138
- // await expect(el).shadowDom.to.be.accessible();
139
- // });
115
+ describe('full browser window immersion "fullscreen"', () => {
116
+ it('creates reflected attribute `viewportinfullscreen`', async () => {
117
+ /** to help with external styling adjustmnents */
118
+ const el = await fixture(html `<ia-item-navigator></ia-item-navigator>`);
119
+ expect(el.getAttribute('viewportinfullscreen')).to.be.null;
120
+ el.viewportInFullscreen = true;
121
+ await el.updateComplete;
122
+ expect(el.getAttribute('viewportinfullscreen')).to.exist;
123
+ });
124
+ });
125
+ /* Side menu & shortcuts tests */
126
+ describe('el.menuOpened', () => {
127
+ it('toggles side menu open', async () => {
128
+ var _a, _b, _c;
129
+ const el = await fixture(html `<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`);
130
+ el.menuContents = [menuProvider];
131
+ await el.updateComplete;
132
+ const nav = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('nav');
133
+ expect(nav === null || nav === void 0 ? void 0 : nav.querySelector('#menu')).to.exist;
134
+ // side menu starts closed
135
+ expect(el.menuOpened).to.be.false;
136
+ expect((_b = nav === null || nav === void 0 ? void 0 : nav.querySelector('#menu')) === null || _b === void 0 ? void 0 : _b.getAttribute('class')).to.contain('hidden');
137
+ // let's open menu
138
+ el.toggleMenu();
139
+ await el.updateComplete;
140
+ expect(el.menuOpened).to.be.true;
141
+ expect((_c = nav === null || nav === void 0 ? void 0 : nav.querySelector('#menu')) === null || _c === void 0 ? void 0 : _c.getAttribute('class')).to.not.contain('hidden');
142
+ });
143
+ it('opens menu shortcut with `@manageSideMenuEvents`', async () => {
144
+ var _a;
145
+ const el = await fixture(html `<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`);
146
+ const detail = {
147
+ menuId: 'fullscreen',
148
+ action: 'open',
149
+ };
150
+ el.menuContents = [menuProvider];
151
+ await el.updateComplete;
152
+ const frame = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#frame');
153
+ // default menu open behavior is to side menu open, not overlay
154
+ expect(frame === null || frame === void 0 ? void 0 : frame.getAttribute('class')).to.contain('shift');
155
+ expect(el.menuOpened).to.be.false;
156
+ expect(el.openMenu).to.be.empty;
157
+ expect(frame === null || frame === void 0 ? void 0 : frame.getAttribute('class')).to.not.contain('open');
158
+ const event = new CustomEvent('updateSideMenu', {
159
+ detail,
160
+ });
161
+ el.manageSideMenuEvents(event);
162
+ await el.updateComplete;
163
+ expect(el.shouldRenderMenu).to.be.true;
164
+ expect(el.menuOpened).to.be.true;
165
+ expect(el.openMenu).to.equal(detail.menuId);
166
+ expect(frame === null || frame === void 0 ? void 0 : frame.getAttribute('class')).to.contain('open');
167
+ });
168
+ });
169
+ describe('el.menuContents', () => {
170
+ it('draws side menu when populated', async () => {
171
+ var _a;
172
+ const el = await fixture(html `<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`);
173
+ el.menuContents = [menuProvider];
174
+ await el.updateComplete;
175
+ expect(el.menuContents.length).to.exist;
176
+ expect(el.shouldRenderMenu).to.be.true;
177
+ const nav = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('nav');
178
+ expect(nav).to.exist;
179
+ const menuSlider = nav === null || nav === void 0 ? void 0 : nav.querySelector('ia-menu-slider');
180
+ expect(menuSlider).to.exist;
181
+ expect(menuSlider === null || menuSlider === void 0 ? void 0 : menuSlider.getAttribute('manuallyhandleclose')).to.exist;
182
+ expect(menuSlider === null || menuSlider === void 0 ? void 0 : menuSlider.getAttribute('open')).to.exist;
183
+ });
184
+ });
185
+ describe('`el.menuShortcuts`', () => {
186
+ it('displays shortcut & toggle side menu button', async () => {
187
+ var _a, _b;
188
+ const el = await fixture(html `<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`);
189
+ el.menuContents = [menuProvider];
190
+ el.menuShortcuts = [shortcut];
191
+ await el.updateComplete;
192
+ const nav = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('nav');
193
+ expect(el.menuShortcuts.length).to.exist;
194
+ expect(nav).to.exist;
195
+ expect(nav === null || nav === void 0 ? void 0 : nav.querySelector('.shortcuts')).to.exist;
196
+ expect((_b = nav === null || nav === void 0 ? void 0 : nav.querySelector('.shortcuts')) === null || _b === void 0 ? void 0 : _b.querySelector('i.fullscreen-test')).to.exist;
197
+ expect(nav === null || nav === void 0 ? void 0 : nav.querySelector('.toggle-menu')).to.exist;
198
+ });
199
+ });
140
200
  });
141
- // describe('YourWebComponent', () => {
142
- // it('has a default title "Hey there" and counter 5', async () => {
143
- // const el = await fixture<YourWebComponent>(
144
- // html`<your-webcomponent></your-webcomponent>`
145
- // );
146
- // expect(el.title).to.equal('Hey there');
147
- // expect(el.counter).to.equal(5);
148
- // });
149
- // it('increases the counter on button click', async () => {
150
- // const el = await fixture<YourWebComponent>(
151
- // html`<your-webcomponent></your-webcomponent>`
152
- // );
153
- // el.shadowRoot!.querySelector('button')!.click();
154
- // expect(el.counter).to.equal(6);
155
- // });
156
- // it('can override the title via attribute', async () => {
157
- // const el = await fixture<YourWebComponent>(
158
- // html`<your-webcomponent title="attribute title"></your-webcomponent>`
159
- // );
160
- // expect(el.title).to.equal('attribute title');
161
- // });
162
- // it('passes the a11y audit', async () => {
163
- // const el = await fixture<YourWebComponent>(
164
- // html`<your-webcomponent></your-webcomponent>`
165
- // );
166
- // await expect(el).shadowDom.to.be.accessible();
167
- // });
168
- // });
169
201
  //# sourceMappingURL=ia-item-navigator.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ia-item-navigator.test.js","sourceRoot":"","sources":["../../test/ia-item-navigator.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable camelcase */\n/* eslint-disable import/no-duplicates */\nimport { html, fixture, expect } from '@open-wc/testing';\nimport Sinon from 'sinon';\n// import { MetadataResponse, Metadata, File, Review, SpeechMusicASREntry } from '@internetarchive/search-service';\nimport {\n SharedResizeObserver,\n // SharedResizeObserverInterface\n} from '@internetarchive/shared-resize-observer';\n\n// import { IntLoadingStateUpdatedEvent } from '../src/interfaces/event-interfaces';\nimport { ItemNavigator } from '../src/item-navigator';\nimport '../src/item-navigator';\n// import { IaItemInspector } from '../src/item-inspector/item-inspector';\n\n// class ItemStub implements MetadataResponse {\n// constructor() {\n// this.rawResponse = '';\n// this.created = 1;\n// this.d1 = 'hello';\n// this.d2 = 'boop';\n// this.dir = 'whee';\n// this.files = [];\n// this.files_count = 0;\n// this.item_last_updated = 2020;\n// this.item_size = 111;\n// this.metadata = { identifier: 'foo' } as Metadata;\n// this.server = 'foo-server';\n// this.uniq = 2;\n// this.workable_servers = ['abc'];\n// }\n\n// rawResponse: any;\n\n// created: number;\n\n// d1: string;\n\n// d2: string;\n\n// dir: string;\n\n// files: File[];\n\n// files_count: number;\n\n// item_last_updated: number;\n\n// item_size: number;\n\n// metadata: Metadata;\n\n// server: string;\n\n// uniq: number;\n\n// workable_servers: string[];\n\n// speech_vs_music_asr?: SpeechMusicASREntry[] | undefined;\n\n// reviews?: Review[] | undefined;\n// };\n\nafterEach(() => {\n Sinon.restore();\n});\n\ndescribe('ItemNavigator', () => {\n describe('Loading Behavior', () => {\n it('shows the spinning loader', async () => {\n const el = await fixture<ItemNavigator>(\n html`<ia-item-navigator></ia-item-navigator>`\n );\n expect(el.shadowRoot?.querySelector('ia-itemnav-loader')).to.be.exist;\n });\n it('hides reader section if not `loaded`', async () => {\n const el = await fixture<ItemNavigator>(\n html`<ia-item-navigator></ia-item-navigator>`\n );\n const mainTheaterSection = el.shadowRoot?.querySelector('#reader');\n expect(mainTheaterSection).to.be.exist;\n expect(mainTheaterSection?.classList.contains('hide')).to.be.true;\n expect(el.loaded).to.be.false;\n expect(el.hasAttribute('loaded')).to.equal(false);\n });\n it('shows reader once `loaded`', async () => {\n const el = await fixture<ItemNavigator>(\n html`<ia-item-navigator></ia-item-navigator>`\n );\n el.loaded = true;\n await el.updateComplete;\n\n const mainTheaterSection = el.shadowRoot?.querySelector('#reader');\n expect(mainTheaterSection?.classList.contains('hide')).to.be.false;\n expect(el.loaded).to.be.true;\n // `loaded` property is reflected as DOM attribute\n expect(el.hasAttribute('loaded')).to.equal(true);\n });\n\n // it('listens to event `loadingStateUpdated` to signal load', async () => {\n // const item = new ItemStub() as MetadataResponse;\n // const el = await fixture<ItemNavigator>(\n // html`<ia-item-navigator .item=${item}></ia-item-navigator>`\n // );\n // // const loadSpy = Sinon.spy();\n // // el.loadingStateUpdated = loadSpy;\n // await el.updateComplete;\n\n // expect(el?.item).to.not.be.undefined;\n\n // const mainTheaterSection = el.shadowRoot?.querySelector('#reader');\n\n // const contentController = mainTheaterSection?.querySelector('ia-item-inspector');\n\n // expect(contentController).to.equal(32324);\n\n // // const loadingEvent = new CustomEvent('loadingStateUpdated', { detail: { loaded: true }}) as IntLoadingStateUpdatedEvent;\n // // contentController?.emitLoadingStatusUpdate(true);\n\n // // await contentController?.updateComplete;\n // // await el.updateComplete;\n\n // });\n });\n\n describe('It uses a shared ResizeObserver', () => {\n it('can create one', async () => {\n const el = await fixture<ItemNavigator>(\n html`<ia-item-navigator></ia-item-navigator>`\n );\n await el.updateComplete;\n expect(el.sharedObserver).to.not.be.null;\n expect(el.sharedObserver).to.be.instanceOf(SharedResizeObserver);\n });\n\n it('can recieve one', async () => {\n const sharedObserver = new SharedResizeObserver();\n\n const el = await fixture<ItemNavigator>(\n html`<ia-item-navigator\n .sharedObserver=${sharedObserver}\n ></ia-item-navigator>`\n );\n await el.updateComplete;\n expect(el.sharedObserver).to.be.instanceOf(SharedResizeObserver);\n });\n });\n\n describe('It uses a shared modal component', () => {\n it('can create one', async () => {\n const el = await fixture<ItemNavigator>(\n html`<ia-item-navigator></ia-item-navigator>`\n );\n await el.updateComplete;\n expect(el.sharedObserver).to.not.be.null;\n expect(el.sharedObserver).to.be.instanceOf(SharedResizeObserver);\n });\n\n it('can recieve one', async () => {\n const sharedObserver = new SharedResizeObserver();\n const observerSpy = Sinon.stub(sharedObserver, 'addObserver');\n\n const el = await fixture<ItemNavigator>(\n html`<ia-item-navigator\n .sharedObserver=${sharedObserver}\n ></ia-item-navigator>`\n );\n await el.updateComplete;\n expect(el.sharedObserver).to.be.instanceOf(SharedResizeObserver);\n expect(observerSpy.called).to.equal(true);\n });\n });\n\n // describe('full browser window immersion \"fullscreen\"', () => {\n // it('creates reflected attribute `viewportinfullscreen`', () =>{\n // /** to help with external styling adjustmnents */\n // });\n // });\n\n // describe('Loads side menu contents', () =>{\n // });\n\n // describe('Menu Shortcuts', () => {\n // });\n\n // it('passes the a11y audit', async () => {\n // const el = await fixture<YourWebComponent>(\n // html`<your-webcomponent></your-webcomponent>`\n // );\n\n // await expect(el).shadowDom.to.be.accessible();\n // });\n});\n\n// describe('YourWebComponent', () => {\n// it('has a default title \"Hey there\" and counter 5', async () => {\n// const el = await fixture<YourWebComponent>(\n// html`<your-webcomponent></your-webcomponent>`\n// );\n\n// expect(el.title).to.equal('Hey there');\n// expect(el.counter).to.equal(5);\n// });\n\n// it('increases the counter on button click', async () => {\n// const el = await fixture<YourWebComponent>(\n// html`<your-webcomponent></your-webcomponent>`\n// );\n// el.shadowRoot!.querySelector('button')!.click();\n\n// expect(el.counter).to.equal(6);\n// });\n\n// it('can override the title via attribute', async () => {\n// const el = await fixture<YourWebComponent>(\n// html`<your-webcomponent title=\"attribute title\"></your-webcomponent>`\n// );\n\n// expect(el.title).to.equal('attribute title');\n// });\n\n// it('passes the a11y audit', async () => {\n// const el = await fixture<YourWebComponent>(\n// html`<your-webcomponent></your-webcomponent>`\n// );\n\n// await expect(el).shadowDom.to.be.accessible();\n// });\n// });\n"]}
1
+ {"version":3,"file":"ia-item-navigator.test.js","sourceRoot":"","sources":["../../test/ia-item-navigator.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable camelcase */\nimport { html, fixture, expect } from '@open-wc/testing';\nimport Sinon from 'sinon';\n\nimport { SharedResizeObserver } from '@internetarchive/shared-resize-observer';\nimport { IntNavController } from '../src/interfaces/nav-controller-interface';\nimport { ItemNavigator } from '../src/item-navigator';\nimport '../src/item-navigator';\n\nimport '../test/book-nav-stub';\nimport { ItemStub, menuProvider, shortcut } from '../test/ia-stub';\nimport { IntManageSideMenuEvent } from '../src/interfaces/event-interfaces';\n\nafterEach(() => {\n Sinon.restore();\n});\n\ndescribe('ItemNavigator', () => {\n describe('Theaters', () => {\n it('shows <ia-no-theater-available> by default', async () => {\n const el = await fixture<ItemNavigator>(\n html`<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`\n );\n expect(el.shadowRoot?.querySelector('ia-no-theater-available')).to.exist;\n });\n\n it('shows <book-navigator> if `this.itemType = \"bookreader\"`', async () => {\n const el = await fixture<ItemNavigator>(\n html`<ia-item-navigator\n .itemType=${`bookreader`}\n .item=${new ItemStub()}\n ></ia-item-navigator>`\n );\n\n await el.updateComplete;\n\n el.toggleMenu();\n await el.updateComplete;\n\n const bookNavigator = el.shadowRoot?.querySelector(\n 'book-navigator'\n ) as IntNavController;\n await bookNavigator.updateComplete;\n\n console.log('132234234324324324');\n // TODO: add BookNavigator type & import via @internetarchive/bookreader\n // For now, let's check that the BookNavigator element and its properties exist w/ stub\n expect(bookNavigator).to.exist;\n expect(bookNavigator?.modal).to.exist;\n expect(bookNavigator?.baseHost).to.exist;\n expect(bookNavigator?.book).to.exist;\n expect(bookNavigator?.signedIn).to.be.null;\n expect(bookNavigator?.sharedObserver).to.exist;\n expect(bookNavigator?.sideMenuOpen).to.exist;\n });\n });\n describe('`el.loaded`', () => {\n it('toggles the spinning loader', async () => {\n const el = await fixture<ItemNavigator>(\n html`<ia-item-navigator></ia-item-navigator>`\n );\n expect(el.loaded).to.be.null; // initial load\n expect(el.shadowRoot?.querySelector('ia-itemnav-loader')).to.exist;\n });\n it('hides reader section if `!loaded`', async () => {\n const el = await fixture<ItemNavigator>(\n html`<ia-item-navigator></ia-item-navigator>`\n );\n\n expect(\n el.shadowRoot?.querySelector('#reader')?.getAttribute('class')\n ).to.contain('hide');\n });\n it('shows reader when `loaded` ', async () => {\n const el = await fixture<ItemNavigator>(\n html`<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`\n );\n\n const mainTheaterSection = el.shadowRoot?.querySelector('#reader');\n expect(mainTheaterSection?.classList.contains('hide')).to.be.false;\n expect(el.loaded).to.be.true;\n // `loaded` property is reflected as DOM attribute\n expect(el.hasAttribute('loaded')).to.equal(true);\n expect(el.shadowRoot?.querySelector('ia-no-theater-available')).to.exist;\n });\n it('listens to `@loadingStateUpdated` to update `loaded`', async () => {\n const el = await fixture<ItemNavigator>(\n html`<ia-item-navigator></ia-item-navigator>`\n );\n\n await el.updateComplete;\n const spy = Sinon.spy();\n el.loadingStateUpdated = spy;\n el.loaded = false;\n await el.updateComplete;\n // check base properties\n expect(el.loaded).to.equal(false);\n expect(el.item).to.be.undefined;\n\n // hydrate item\n el.item = new ItemStub();\n await el.updateComplete;\n\n // spy fires\n expect(spy.called).to.equal(true);\n expect(spy.callCount).to.equal(1);\n });\n });\n\n describe('`el.sharedObserver`', () => {\n it('can create one', async () => {\n const el = await fixture<ItemNavigator>(\n html`<ia-item-navigator></ia-item-navigator>`\n );\n await el.updateComplete;\n expect(el.sharedObserver).to.not.be.null;\n expect(el.sharedObserver).to.be.instanceOf(SharedResizeObserver);\n });\n\n it('can recieve one', async () => {\n const sharedObserver = new SharedResizeObserver();\n\n const el = await fixture<ItemNavigator>(\n html`<ia-item-navigator\n .sharedObserver=${sharedObserver}\n ></ia-item-navigator>`\n );\n await el.updateComplete;\n expect(el.sharedObserver).to.be.instanceOf(SharedResizeObserver);\n });\n });\n\n describe('`el.modal`', () => {\n it('can create one', async () => {\n const el = await fixture<ItemNavigator>(\n html`<ia-item-navigator></ia-item-navigator>`\n );\n await el.updateComplete;\n expect(el.sharedObserver).to.not.be.null;\n expect(el.sharedObserver).to.be.instanceOf(SharedResizeObserver);\n });\n\n it('can recieve one', async () => {\n const sharedObserver = new SharedResizeObserver();\n const observerSpy = Sinon.stub(sharedObserver, 'addObserver');\n\n const el = await fixture<ItemNavigator>(\n html`<ia-item-navigator\n .sharedObserver=${sharedObserver}\n ></ia-item-navigator>`\n );\n await el.updateComplete;\n expect(el.sharedObserver).to.be.instanceOf(SharedResizeObserver);\n expect(observerSpy.called).to.equal(true);\n });\n });\n\n describe('full browser window immersion \"fullscreen\"', () => {\n it('creates reflected attribute `viewportinfullscreen`', async () => {\n /** to help with external styling adjustmnents */\n const el = await fixture<ItemNavigator>(\n html`<ia-item-navigator></ia-item-navigator>`\n );\n expect(el.getAttribute('viewportinfullscreen')).to.be.null;\n\n el.viewportInFullscreen = true;\n await el.updateComplete;\n\n expect(el.getAttribute('viewportinfullscreen')).to.exist;\n });\n });\n\n /* Side menu & shortcuts tests */\n describe('el.menuOpened', () => {\n it('toggles side menu open', async () => {\n const el = await fixture<ItemNavigator>(\n html`<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`\n );\n\n el.menuContents = [menuProvider];\n await el.updateComplete;\n\n const nav = el.shadowRoot?.querySelector('nav');\n\n expect(nav?.querySelector('#menu')).to.exist;\n // side menu starts closed\n expect(el.menuOpened).to.be.false;\n expect(nav?.querySelector('#menu')?.getAttribute('class')).to.contain(\n 'hidden'\n );\n\n // let's open menu\n el.toggleMenu();\n await el.updateComplete;\n\n expect(el.menuOpened).to.be.true;\n expect(nav?.querySelector('#menu')?.getAttribute('class')).to.not.contain(\n 'hidden'\n );\n });\n\n it('opens menu shortcut with `@manageSideMenuEvents`', async () => {\n const el = await fixture<ItemNavigator>(\n html`<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`\n );\n const detail = {\n menuId: 'fullscreen',\n action: 'open',\n };\n\n el.menuContents = [menuProvider];\n await el.updateComplete;\n const frame = el.shadowRoot?.querySelector('#frame');\n // default menu open behavior is to side menu open, not overlay\n expect(frame?.getAttribute('class')).to.contain('shift');\n\n expect(el.menuOpened).to.be.false;\n expect(el.openMenu).to.be.empty;\n expect(frame?.getAttribute('class')).to.not.contain('open');\n\n const event = new CustomEvent('updateSideMenu', {\n detail,\n }) as IntManageSideMenuEvent;\n el.manageSideMenuEvents(event);\n await el.updateComplete;\n\n expect(el.shouldRenderMenu).to.be.true;\n expect(el.menuOpened).to.be.true;\n expect(el.openMenu).to.equal(detail.menuId);\n\n expect(frame?.getAttribute('class')).to.contain('open');\n });\n });\n\n describe('el.menuContents', () => {\n it('draws side menu when populated', async () => {\n const el = await fixture<ItemNavigator>(\n html`<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`\n );\n\n el.menuContents = [menuProvider];\n await el.updateComplete;\n expect(el.menuContents.length).to.exist;\n expect(el.shouldRenderMenu).to.be.true;\n\n const nav = el.shadowRoot?.querySelector('nav');\n expect(nav).to.exist;\n\n const menuSlider = nav?.querySelector('ia-menu-slider');\n expect(menuSlider).to.exist;\n expect(menuSlider?.getAttribute('manuallyhandleclose')).to.exist;\n expect(menuSlider?.getAttribute('open')).to.exist;\n });\n });\n\n describe('`el.menuShortcuts`', () => {\n it('displays shortcut & toggle side menu button', async () => {\n const el = await fixture<ItemNavigator>(\n html`<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`\n );\n\n el.menuContents = [menuProvider];\n el.menuShortcuts = [shortcut];\n await el.updateComplete;\n\n const nav = el.shadowRoot?.querySelector('nav');\n\n expect(el.menuShortcuts.length).to.exist;\n expect(nav).to.exist;\n expect(nav?.querySelector('.shortcuts')).to.exist;\n expect(\n nav?.querySelector('.shortcuts')?.querySelector('i.fullscreen-test')\n ).to.exist;\n expect(nav?.querySelector('.toggle-menu')).to.exist;\n });\n });\n});\n"]}
@@ -0,0 +1,22 @@
1
+ import { MetadataResponse, Metadata, File, Review, SpeechMusicASREntry } from '@internetarchive/search-service';
2
+ import { IntMenuShortcut, IntMenuProvider } from '../src/interfaces/menu-interfaces';
3
+ export declare class ItemStub implements MetadataResponse {
4
+ constructor();
5
+ rawResponse: any;
6
+ created: number;
7
+ d1: string;
8
+ d2: string;
9
+ dir: string;
10
+ files: File[];
11
+ files_count: number;
12
+ item_last_updated: number;
13
+ item_size: number;
14
+ metadata: Metadata;
15
+ server: string;
16
+ uniq: number;
17
+ workable_servers: string[];
18
+ speech_vs_music_asr?: SpeechMusicASREntry[] | undefined;
19
+ reviews?: Review[] | undefined;
20
+ }
21
+ export declare const shortcut: IntMenuShortcut;
22
+ export declare const menuProvider: IntMenuProvider;
@@ -1,4 +1,35 @@
1
- "use strict";
2
- // const parsed = JSON.parse(raw);
3
- // export default parsed;
1
+ import { html } from 'lit-html';
2
+ export class ItemStub {
3
+ constructor() {
4
+ this.rawResponse = '';
5
+ this.created = 1;
6
+ this.d1 = 'hello';
7
+ this.d2 = 'boop';
8
+ this.dir = 'whee';
9
+ this.files = [];
10
+ this.files_count = 0;
11
+ this.item_last_updated = 2020;
12
+ this.item_size = 111;
13
+ this.metadata = { identifier: 'foo' };
14
+ this.server = 'foo-server';
15
+ this.uniq = 2;
16
+ this.workable_servers = ['abc'];
17
+ }
18
+ }
19
+ export const shortcut = {
20
+ id: 'fullscreen',
21
+ icon: html `<i class="fas fullscreen-test"></i>`,
22
+ };
23
+ export const menuProvider = {
24
+ ...shortcut,
25
+ label: 'foo',
26
+ menuDetails: html `<div>foo</div>`,
27
+ selected: true,
28
+ followable: false,
29
+ href: 'https://archive.foo',
30
+ item: new ItemStub(),
31
+ baseHost: 'https://archive.foo',
32
+ subPrefix: 'bar',
33
+ updated: () => { },
34
+ };
4
35
  //# sourceMappingURL=ia-stub.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ia-stub.js","sourceRoot":"","sources":["../../test/ia-stub.ts"],"names":[],"mappings":";AAAA,kCAAkC;AAElC,yBAAyB","sourcesContent":["// const parsed = JSON.parse(raw);\n\n// export default parsed;\n"]}
1
+ {"version":3,"file":"ia-stub.js","sourceRoot":"","sources":["../../test/ia-stub.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAMhC,MAAM,OAAO,QAAQ;IACnB;QACE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC;QAClB,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,EAAE,UAAU,EAAE,KAAK,EAAc,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,gBAAgB,GAAG,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;CA+BF;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,EAAE,EAAE,YAAY;IAChB,IAAI,EAAE,IAAI,CAAA,qCAAqC;CAC7B,CAAC;AAErB,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,GAAG,QAAQ;IACX,KAAK,EAAE,KAAK;IACZ,WAAW,EAAE,IAAI,CAAA,gBAAgB;IACjC,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,KAAK;IACjB,IAAI,EAAE,qBAAqB;IAC3B,IAAI,EAAE,IAAI,QAAQ,EAAE;IACpB,QAAQ,EAAE,qBAAqB;IAC/B,SAAS,EAAE,KAAK;IAChB,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;CACC,CAAC","sourcesContent":["/* eslint-disable camelcase */\nimport {\n MetadataResponse,\n Metadata,\n File,\n Review,\n SpeechMusicASREntry,\n} from '@internetarchive/search-service';\nimport { html } from 'lit-html';\nimport {\n IntMenuShortcut,\n IntMenuProvider,\n} from '../src/interfaces/menu-interfaces';\n\nexport class ItemStub implements MetadataResponse {\n constructor() {\n this.rawResponse = '';\n this.created = 1;\n this.d1 = 'hello';\n this.d2 = 'boop';\n this.dir = 'whee';\n this.files = [];\n this.files_count = 0;\n this.item_last_updated = 2020;\n this.item_size = 111;\n this.metadata = { identifier: 'foo' } as Metadata;\n this.server = 'foo-server';\n this.uniq = 2;\n this.workable_servers = ['abc'];\n }\n\n rawResponse: any;\n\n created: number;\n\n d1: string;\n\n d2: string;\n\n dir: string;\n\n files: File[];\n\n files_count: number;\n\n item_last_updated: number;\n\n item_size: number;\n\n metadata: Metadata;\n\n server: string;\n\n uniq: number;\n\n workable_servers: string[];\n\n speech_vs_music_asr?: SpeechMusicASREntry[] | undefined;\n\n reviews?: Review[] | undefined;\n}\n\nexport const shortcut = {\n id: 'fullscreen',\n icon: html`<i class=\"fas fullscreen-test\"></i>`,\n} as IntMenuShortcut;\n\nexport const menuProvider = {\n ...shortcut,\n label: 'foo',\n menuDetails: html`<div>foo</div>`,\n selected: true,\n followable: false,\n href: 'https://archive.foo',\n item: new ItemStub(),\n baseHost: 'https://archive.foo',\n subPrefix: 'bar',\n updated: () => {},\n} as IntMenuProvider;\n"]}
@@ -0,0 +1 @@
1
+ import '../src/no-theater-available';
@@ -0,0 +1,27 @@
1
+ import { html, fixture, expect } from '@open-wc/testing';
2
+ import '../src/no-theater-available';
3
+ describe('IANoTheaterAvailable', () => {
4
+ it('Fires `loadingStateUpdated` on identifier change', async () => {
5
+ const el = await fixture(html `<ia-no-theater-available
6
+ .identifier=${`foo`}
7
+ ></ia-no-theater-available>`);
8
+ let eventFired = false;
9
+ el.addEventListener('loadingStateUpdated', () => {
10
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
11
+ eventFired = true;
12
+ });
13
+ expect(eventFired).to.be.false;
14
+ el.identifier = 'bar';
15
+ await el.updateComplete;
16
+ expect(eventFired).to.be.true;
17
+ });
18
+ it('Has link to item download page', async () => {
19
+ var _a, _b;
20
+ const el = await fixture(html `<ia-no-theater-available
21
+ .identifier=${`foo`}
22
+ ></ia-no-theater-available>`);
23
+ expect(el.downloadUrl).to.equal('/download/foo');
24
+ expect((_b = (_a = el === null || el === void 0 ? void 0 : el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('a')) === null || _b === void 0 ? void 0 : _b.href).to.contain(el.downloadUrl);
25
+ });
26
+ });
27
+ //# sourceMappingURL=no-theater-available.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-theater-available.test.js","sourceRoot":"","sources":["../../test/no-theater-available.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,6BAA6B,CAAC;AAErC,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA;sBACY,KAAK;kCACO,CAC7B,CAAC;QACF,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,EAAE,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,GAAG,EAAE;YAC9C,6DAA6D;YAC7D,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAE/B,EAAE,CAAC,UAAU,GAAG,KAAK,CAAC;QACtB,MAAM,EAAE,CAAC,cAAc,CAAC;QACxB,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;;QAC9C,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA;sBACY,KAAK;kCACO,CAC7B,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,CAAC,MAAA,MAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,UAAU,0CAAE,aAAa,CAAC,GAAG,CAAC,0CAAE,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { html, fixture, expect } from '@open-wc/testing';\nimport { IANoTheaterAvailable } from '../src/no-theater-available';\nimport '../src/no-theater-available';\n\ndescribe('IANoTheaterAvailable', () => {\n it('Fires `loadingStateUpdated` on identifier change', async () => {\n const el = await fixture<IANoTheaterAvailable>(\n html`<ia-no-theater-available\n .identifier=${`foo`}\n ></ia-no-theater-available>`\n );\n let eventFired = false;\n el.addEventListener('loadingStateUpdated', () => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n eventFired = true;\n });\n expect(eventFired).to.be.false;\n\n el.identifier = 'bar';\n await el.updateComplete;\n expect(eventFired).to.be.true;\n });\n it('Has link to item download page', async () => {\n const el = await fixture<IANoTheaterAvailable>(\n html`<ia-no-theater-available\n .identifier=${`foo`}\n ></ia-no-theater-available>`\n );\n expect(el.downloadUrl).to.equal('/download/foo');\n expect(el?.shadowRoot?.querySelector('a')?.href).to.contain(el.downloadUrl);\n });\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@internetarchive/ia-item-navigator",
3
- "version": "0.0.0-a10",
3
+ "version": "0.0.0-a12",
4
4
  "description": "Internet Archive's Item Navigator, visually eplore an item's contents.",
5
5
  "author": "Internet Archive",
6
6
  "license": "AGPL-3.0-only",
@@ -78,7 +78,8 @@
78
78
  "js": "never",
79
79
  "ts": "never"
80
80
  }
81
- ]
81
+ ],
82
+ "import/no-duplicates": "off"
82
83
  }
83
84
  },
84
85
  "prettier": {
@@ -1,5 +1,7 @@
1
1
  import { LitElement } from 'lit-element';
2
2
  import { MetadataResponse } from '@internetarchive/search-service';
3
+ import { ModalManager } from '@internetarchive/modal-manager';
4
+ import { SharedResizeObserver } from '@internetarchive/shared-resize-observer';
3
5
  import { IntMenuShortcut } from './menu-interfaces';
4
6
 
5
7
  export interface IntNavController extends LitElement {
@@ -9,10 +11,21 @@ export interface IntNavController extends LitElement {
9
11
  menuShortcuts: IntMenuShortcut[];
10
12
  sideMenuOpen: boolean;
11
13
 
14
+ signedIn: boolean;
15
+
16
+ sharedObserver: SharedResizeObserver;
17
+ modal: ModalManager;
18
+
12
19
  emitLoadingStatusUpdate: (loaded: boolean) => void;
13
20
 
14
21
  addMenuShortcut: (menuId: string) => void;
15
22
  removeMenuShortcut: (menuId: string) => void;
16
23
  sortMenuShortcuts: () => void;
17
24
  emitMenuShortcutsUpdated: () => void;
25
+
26
+ book: MetadataResponse;
27
+ }
28
+
29
+ export interface BookNavigator extends IntNavController {
30
+ book: MetadataResponse;
18
31
  }