@internetarchive/collection-browser 0.0.1-alpha.13 → 0.0.1-alpha.16

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 (49) hide show
  1. package/demo/app-root.ts +0 -4
  2. package/dist/demo/app-root.js +0 -4
  3. package/dist/demo/app-root.js.map +1 -1
  4. package/dist/src/assets/img/icons/arrow-right.d.ts +2 -0
  5. package/dist/src/assets/img/icons/arrow-right.js +4 -0
  6. package/dist/src/assets/img/icons/arrow-right.js.map +1 -0
  7. package/dist/src/assets/img/icons/chevron.d.ts +2 -0
  8. package/dist/src/assets/img/icons/chevron.js +4 -0
  9. package/dist/src/assets/img/icons/chevron.js.map +1 -0
  10. package/dist/src/collection-browser.d.ts +13 -3
  11. package/dist/src/collection-browser.js +178 -32
  12. package/dist/src/collection-browser.js.map +1 -1
  13. package/dist/src/collection-facets.d.ts +4 -1
  14. package/dist/src/collection-facets.js +88 -9
  15. package/dist/src/collection-facets.js.map +1 -1
  16. package/dist/src/mediatype-icon.js +2 -2
  17. package/dist/src/mediatype-icon.js.map +1 -1
  18. package/dist/src/models.d.ts +14 -2
  19. package/dist/src/models.js +31 -7
  20. package/dist/src/models.js.map +1 -1
  21. package/dist/src/sort-filter-bar/alpha-bar.js +1 -1
  22. package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -1
  23. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +38 -4
  24. package/dist/src/sort-filter-bar/sort-filter-bar.js +297 -200
  25. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
  26. package/dist/src/tiles/list/tile-list-compact-header.d.ts +11 -0
  27. package/dist/src/tiles/list/tile-list-compact-header.js +77 -0
  28. package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -0
  29. package/dist/src/tiles/list/tile-list-compact.d.ts +1 -1
  30. package/dist/src/tiles/list/tile-list-compact.js +12 -12
  31. package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
  32. package/dist/src/tiles/list/tile-list.d.ts +10 -10
  33. package/dist/src/tiles/list/tile-list.js +41 -36
  34. package/dist/src/tiles/list/tile-list.js.map +1 -1
  35. package/dist/src/tiles/tile-dispatcher.d.ts +3 -0
  36. package/dist/src/tiles/tile-dispatcher.js +31 -12
  37. package/dist/src/tiles/tile-dispatcher.js.map +1 -1
  38. package/package.json +1 -1
  39. package/src/assets/img/icons/chevron.ts +4 -0
  40. package/src/collection-browser.ts +187 -38
  41. package/src/collection-facets.ts +87 -11
  42. package/src/mediatype-icon.ts +2 -2
  43. package/src/models.ts +35 -17
  44. package/src/sort-filter-bar/alpha-bar.ts +1 -1
  45. package/src/sort-filter-bar/sort-filter-bar.ts +339 -208
  46. package/src/tiles/list/tile-list-compact-header.ts +73 -0
  47. package/src/tiles/list/tile-list-compact.ts +12 -12
  48. package/src/tiles/list/tile-list.ts +41 -39
  49. package/src/tiles/tile-dispatcher.ts +33 -12
package/demo/app-root.ts CHANGED
@@ -235,10 +235,6 @@ export class AppRoot extends LitElement {
235
235
  font-size: 1.6rem;
236
236
  }
237
237
 
238
- #collection-browser-container {
239
- padding: 0 2rem;
240
- }
241
-
242
238
  collection-browser {
243
239
  margin-top: 30rem;
244
240
  }
@@ -193,10 +193,6 @@ AppRoot.styles = css `
193
193
  font-size: 1.6rem;
194
194
  }
195
195
 
196
- #collection-browser-container {
197
- padding: 0 2rem;
198
- }
199
-
200
196
  collection-browser {
201
197
  margin-top: 30rem;
202
198
  }
@@ -1 +1 @@
1
- {"version":3,"file":"app-root.js","sourceRoot":"","sources":["../../demo/app-root.ts"],"names":[],"mappings":"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","sourcesContent":["import { SearchService } from '@internetarchive/search-service';\nimport { html, css, LitElement, PropertyValues } from 'lit';\nimport { customElement, query, state } from 'lit/decorators.js';\nimport { SharedResizeObserver } from '@internetarchive/shared-resize-observer';\nimport type { CollectionBrowser } from '../src/collection-browser';\nimport '../src/collection-browser';\n\n@customElement('app-root')\nexport class AppRoot extends LitElement {\n private searchService = SearchService.default;\n\n private resizeObserver = new SharedResizeObserver();\n\n @state() private currentPage?: number;\n\n @state() private searchQuery?: string;\n\n @state() private cellWidth: number = 18;\n\n @state() private cellHeight: number = 29;\n\n @state() private rowGap: number = 1.7;\n\n @state() private colGap: number = 1.7;\n\n @query('#base-query-field') private baseQueryField!: HTMLInputElement;\n\n @query('#page-number-input') private pageNumberInput!: HTMLInputElement;\n\n @query('collection-browser') private collectionBrowser!: CollectionBrowser;\n\n private searchPressed(e: Event) {\n e.preventDefault();\n this.searchQuery = this.baseQueryField.value;\n if ((this.currentPage ?? 1) > 1) {\n this.collectionBrowser.goToPage(this.currentPage ?? 1);\n }\n this.currentPage = 1;\n }\n\n private changePagePressed(e: Event) {\n e.preventDefault();\n this.currentPage = this.pageNumberInput.valueAsNumber;\n this.collectionBrowser.goToPage(this.currentPage);\n }\n\n protected updated(changed: PropertyValues): void {\n if (changed.has('currentPage') && this.currentPage) {\n this.pageNumberInput.value = this.currentPage.toString();\n }\n\n if (changed.has('searchQuery')) {\n this.queryUpdated();\n }\n }\n\n private queryUpdated() {\n this.collectionBrowser.baseQuery = this.searchQuery;\n }\n\n render() {\n return html`\n <div id=\"dev-tools\">\n <form @submit=${this.searchPressed}>\n Query:\n <input\n type=\"text\"\n id=\"base-query-field\"\n .value=${this.searchQuery ?? ''}\n />\n <input type=\"submit\" value=\"Search\" />\n </form>\n\n <form @submit=${this.changePagePressed}>\n Page: <input type=\"number\" value=\"1\" id=\"page-number-input\" />\n <input type=\"submit\" value=\"Go\" />\n </form>\n\n <button\n @click=${() => {\n this.collectionBrowser.showDeleteButtons =\n !this.collectionBrowser.showDeleteButtons;\n }}\n >\n Toggle Delete Mode\n </button>\n\n <div id=\"cell-controls\">\n <div id=\"cell-size-control\">\n <div>\n <label for=\"cell-width-slider\">Minimum cell width:</label>\n <input\n type=\"range\"\n min=\"10\"\n max=\"100\"\n value=\"18\"\n step=\"0.1\"\n id=\"cell-width-slider\"\n @input=${this.widthChanged}\n />\n <span>${this.cellWidth}rem</span>\n </div>\n <div>\n <label for=\"cell-height-slider\">Cell height:</label>\n <input\n type=\"range\"\n min=\"10\"\n max=\"100\"\n value=\"29\"\n step=\"0.1\"\n id=\"cell-height-slider\"\n @input=${this.heightChanged}\n />\n <span>${this.cellHeight}rem</span>\n </div>\n <div>\n <label for=\"show-outline-check\">Show outlines:</label>\n <input\n type=\"checkbox\"\n id=\"show-outline-check\"\n @click=${this.outlineChanged}\n />\n </div>\n </div>\n <div id=\"cell-gap-control\">\n <div>\n <label for=\"cell-row-gap-slider\">Row gap:</label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"5\"\n value=\"1.7\"\n step=\"0.1\"\n id=\"cell-row-gap-slider\"\n @input=${this.rowGapChanged}\n />\n <span>${this.rowGap}rem</span>\n </div>\n <div>\n <label for=\"cell-col-gap-slider\">Col gap:</label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"5\"\n value=\"1.7\"\n step=\"0.1\"\n id=\"cell-col-gap-slider\"\n @input=${this.colGapChanged}\n />\n <span>${this.colGap}rem</span>\n </div>\n </div>\n </div>\n </div>\n\n <div id=\"collection-browser-container\">\n <collection-browser\n .baseNavigationUrl=${'https://archive.org'}\n .searchService=${this.searchService}\n .resizeObserver=${this.resizeObserver}\n @visiblePageChanged=${this.visiblePageChanged}\n >\n </collection-browser>\n </div>\n `;\n }\n\n private outlineChanged(e: Event) {\n const target = e.target as HTMLInputElement;\n if (target.checked) {\n this.collectionBrowser.style.setProperty(\n '--infiniteScrollerCellOutline',\n '1px solid #33D1FF'\n );\n } else {\n this.collectionBrowser.style.removeProperty(\n '--infiniteScrollerCellOutline'\n );\n }\n }\n\n private rowGapChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.rowGap = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserRowGap',\n `${input.value}rem`\n );\n }\n\n private colGapChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.colGap = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserColGap',\n `${input.value}rem`\n );\n }\n\n private widthChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.cellWidth = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMinWidth',\n `${input.value}rem`\n );\n }\n\n private heightChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.cellHeight = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMinHeight',\n `${input.value}rem`\n );\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMaxHeight',\n `${input.value}rem`\n );\n }\n\n private visiblePageChanged(e: CustomEvent<{ pageNumber: number }>) {\n const { pageNumber } = e.detail;\n if (pageNumber === this.currentPage) return;\n this.currentPage = pageNumber;\n }\n\n static styles = css`\n :host {\n display: block;\n }\n\n input,\n button {\n font-size: 1.6rem;\n }\n\n #collection-browser-container {\n padding: 0 2rem;\n }\n\n collection-browser {\n margin-top: 30rem;\n }\n\n #base-query-field {\n width: 300px;\n }\n\n #dev-tools {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 10;\n -webkit-backdrop-filter: blur(10px);\n backdrop-filter: blur(10px);\n padding: 0.5rem 1rem;\n border: 1px solid black;\n }\n\n #cell-controls {\n display: flex;\n }\n\n #cell-controls label {\n display: inline-block;\n width: 10rem;\n }\n\n #cell-gap-control {\n margin-left: 1rem;\n }\n `;\n}\n"]}
1
+ {"version":3,"file":"app-root.js","sourceRoot":"","sources":["../../demo/app-root.ts"],"names":[],"mappings":"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","sourcesContent":["import { SearchService } from '@internetarchive/search-service';\nimport { html, css, LitElement, PropertyValues } from 'lit';\nimport { customElement, query, state } from 'lit/decorators.js';\nimport { SharedResizeObserver } from '@internetarchive/shared-resize-observer';\nimport type { CollectionBrowser } from '../src/collection-browser';\nimport '../src/collection-browser';\n\n@customElement('app-root')\nexport class AppRoot extends LitElement {\n private searchService = SearchService.default;\n\n private resizeObserver = new SharedResizeObserver();\n\n @state() private currentPage?: number;\n\n @state() private searchQuery?: string;\n\n @state() private cellWidth: number = 18;\n\n @state() private cellHeight: number = 29;\n\n @state() private rowGap: number = 1.7;\n\n @state() private colGap: number = 1.7;\n\n @query('#base-query-field') private baseQueryField!: HTMLInputElement;\n\n @query('#page-number-input') private pageNumberInput!: HTMLInputElement;\n\n @query('collection-browser') private collectionBrowser!: CollectionBrowser;\n\n private searchPressed(e: Event) {\n e.preventDefault();\n this.searchQuery = this.baseQueryField.value;\n if ((this.currentPage ?? 1) > 1) {\n this.collectionBrowser.goToPage(this.currentPage ?? 1);\n }\n this.currentPage = 1;\n }\n\n private changePagePressed(e: Event) {\n e.preventDefault();\n this.currentPage = this.pageNumberInput.valueAsNumber;\n this.collectionBrowser.goToPage(this.currentPage);\n }\n\n protected updated(changed: PropertyValues): void {\n if (changed.has('currentPage') && this.currentPage) {\n this.pageNumberInput.value = this.currentPage.toString();\n }\n\n if (changed.has('searchQuery')) {\n this.queryUpdated();\n }\n }\n\n private queryUpdated() {\n this.collectionBrowser.baseQuery = this.searchQuery;\n }\n\n render() {\n return html`\n <div id=\"dev-tools\">\n <form @submit=${this.searchPressed}>\n Query:\n <input\n type=\"text\"\n id=\"base-query-field\"\n .value=${this.searchQuery ?? ''}\n />\n <input type=\"submit\" value=\"Search\" />\n </form>\n\n <form @submit=${this.changePagePressed}>\n Page: <input type=\"number\" value=\"1\" id=\"page-number-input\" />\n <input type=\"submit\" value=\"Go\" />\n </form>\n\n <button\n @click=${() => {\n this.collectionBrowser.showDeleteButtons =\n !this.collectionBrowser.showDeleteButtons;\n }}\n >\n Toggle Delete Mode\n </button>\n\n <div id=\"cell-controls\">\n <div id=\"cell-size-control\">\n <div>\n <label for=\"cell-width-slider\">Minimum cell width:</label>\n <input\n type=\"range\"\n min=\"10\"\n max=\"100\"\n value=\"18\"\n step=\"0.1\"\n id=\"cell-width-slider\"\n @input=${this.widthChanged}\n />\n <span>${this.cellWidth}rem</span>\n </div>\n <div>\n <label for=\"cell-height-slider\">Cell height:</label>\n <input\n type=\"range\"\n min=\"10\"\n max=\"100\"\n value=\"29\"\n step=\"0.1\"\n id=\"cell-height-slider\"\n @input=${this.heightChanged}\n />\n <span>${this.cellHeight}rem</span>\n </div>\n <div>\n <label for=\"show-outline-check\">Show outlines:</label>\n <input\n type=\"checkbox\"\n id=\"show-outline-check\"\n @click=${this.outlineChanged}\n />\n </div>\n </div>\n <div id=\"cell-gap-control\">\n <div>\n <label for=\"cell-row-gap-slider\">Row gap:</label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"5\"\n value=\"1.7\"\n step=\"0.1\"\n id=\"cell-row-gap-slider\"\n @input=${this.rowGapChanged}\n />\n <span>${this.rowGap}rem</span>\n </div>\n <div>\n <label for=\"cell-col-gap-slider\">Col gap:</label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"5\"\n value=\"1.7\"\n step=\"0.1\"\n id=\"cell-col-gap-slider\"\n @input=${this.colGapChanged}\n />\n <span>${this.colGap}rem</span>\n </div>\n </div>\n </div>\n </div>\n\n <div id=\"collection-browser-container\">\n <collection-browser\n .baseNavigationUrl=${'https://archive.org'}\n .searchService=${this.searchService}\n .resizeObserver=${this.resizeObserver}\n @visiblePageChanged=${this.visiblePageChanged}\n >\n </collection-browser>\n </div>\n `;\n }\n\n private outlineChanged(e: Event) {\n const target = e.target as HTMLInputElement;\n if (target.checked) {\n this.collectionBrowser.style.setProperty(\n '--infiniteScrollerCellOutline',\n '1px solid #33D1FF'\n );\n } else {\n this.collectionBrowser.style.removeProperty(\n '--infiniteScrollerCellOutline'\n );\n }\n }\n\n private rowGapChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.rowGap = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserRowGap',\n `${input.value}rem`\n );\n }\n\n private colGapChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.colGap = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserColGap',\n `${input.value}rem`\n );\n }\n\n private widthChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.cellWidth = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMinWidth',\n `${input.value}rem`\n );\n }\n\n private heightChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.cellHeight = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMinHeight',\n `${input.value}rem`\n );\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMaxHeight',\n `${input.value}rem`\n );\n }\n\n private visiblePageChanged(e: CustomEvent<{ pageNumber: number }>) {\n const { pageNumber } = e.detail;\n if (pageNumber === this.currentPage) return;\n this.currentPage = pageNumber;\n }\n\n static styles = css`\n :host {\n display: block;\n }\n\n input,\n button {\n font-size: 1.6rem;\n }\n\n collection-browser {\n margin-top: 30rem;\n }\n\n #base-query-field {\n width: 300px;\n }\n\n #dev-tools {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 10;\n -webkit-backdrop-filter: blur(10px);\n backdrop-filter: blur(10px);\n padding: 0.5rem 1rem;\n border: 1px solid black;\n }\n\n #cell-controls {\n display: flex;\n }\n\n #cell-controls label {\n display: inline-block;\n width: 10rem;\n }\n\n #cell-gap-control {\n margin-left: 1rem;\n }\n `;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ declare const _default: import("lit-html").TemplateResult<2>;
2
+ export default _default;
@@ -0,0 +1,4 @@
1
+ import { svg } from 'lit';
2
+ export default svg `<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><path d="m79.8883285 50.0035012.1116715-.1085359-43.1159942-46.61088155c-2.401537-2.18938917-4.6902018-3.28408375-6.8659943-3.28408375s-4.1642651.63837733-5.9654178 1.91513199c-1.8011528 1.27675467-3.1520173 2.97248092-4.0525937 5.08717877l39.4020173 42.99768924-39.4020173 42.9976892c.9005764 2.1146979 2.2514409 3.8104241 4.0525937 5.0871788 1.8011527 1.2767547 3.7896253 1.915132 5.9654178 1.915132 2.1013449 0 4.3900096-1.0573489 6.8659943-3.1720468l43.1159942-46.7194174z"/></svg>
3
+ `;
4
+ //# sourceMappingURL=arrow-right.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrow-right.js","sourceRoot":"","sources":["../../../../../src/assets/img/icons/arrow-right.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,eAAe,GAAG,CAAA;CACjB,CAAA","sourcesContent":["import { svg } from 'lit';\n\nexport default svg`<svg viewBox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m79.8883285 50.0035012.1116715-.1085359-43.1159942-46.61088155c-2.401537-2.18938917-4.6902018-3.28408375-6.8659943-3.28408375s-4.1642651.63837733-5.9654178 1.91513199c-1.8011528 1.27675467-3.1520173 2.97248092-4.0525937 5.08717877l39.4020173 42.99768924-39.4020173 42.9976892c.9005764 2.1146979 2.2514409 3.8104241 4.0525937 5.0871788 1.8011527 1.2767547 3.7896253 1.915132 5.9654178 1.915132 2.1013449 0 4.3900096-1.0573489 6.8659943-3.1720468l43.1159942-46.7194174z\"/></svg>\n`\n"]}
@@ -0,0 +1,2 @@
1
+ declare const _default: import("lit-html").TemplateResult<2>;
2
+ export default _default;
@@ -0,0 +1,4 @@
1
+ import { svg } from 'lit';
2
+ export default svg `<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><path d="m79.8883285 50.0035012.1116715-.1085359-43.1159942-46.61088155c-2.401537-2.18938917-4.6902018-3.28408375-6.8659943-3.28408375s-4.1642651.63837733-5.9654178 1.91513199c-1.8011528 1.27675467-3.1520173 2.97248092-4.0525937 5.08717877l39.4020173 42.99768924-39.4020173 42.9976892c.9005764 2.1146979 2.2514409 3.8104241 4.0525937 5.0871788 1.8011527 1.2767547 3.7896253 1.915132 5.9654178 1.915132 2.1013449 0 4.3900096-1.0573489 6.8659943-3.1720468l43.1159942-46.7194174z"/></svg>
3
+ `;
4
+ //# sourceMappingURL=chevron.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chevron.js","sourceRoot":"","sources":["../../../../../src/assets/img/icons/chevron.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,eAAe,GAAG,CAAA;CACjB,CAAC","sourcesContent":["import { svg } from 'lit';\n\nexport default svg`<svg viewBox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m79.8883285 50.0035012.1116715-.1085359-43.1159942-46.61088155c-2.401537-2.18938917-4.6902018-3.28408375-6.8659943-3.28408375s-4.1642651.63837733-5.9654178 1.91513199c-1.8011528 1.27675467-3.1520173 2.97248092-4.0525937 5.08717877l39.4020173 42.99768924-39.4020173 42.9976892c.9005764 2.1146979 2.2514409 3.8104241 4.0525937 5.0871788 1.8011527 1.2767547 3.7896253 1.915132 5.9654178 1.915132 2.1013449 0 4.3900096-1.0573489 6.8659943-3.1720468l43.1159942-46.7194174z\"/></svg>\n`;\n"]}
@@ -2,7 +2,7 @@ import { LitElement, PropertyValues, TemplateResult } from 'lit';
2
2
  import type { InfiniteScrollerCellProviderInterface } from '@internetarchive/infinite-scroller';
3
3
  import { SearchServiceInterface, SortDirection } from '@internetarchive/search-service';
4
4
  import { SortParam } from '@internetarchive/search-service';
5
- import { SharedResizeObserverInterface } from '@internetarchive/shared-resize-observer';
5
+ import { SharedResizeObserverInterface, SharedResizeObserverResizeHandlerInterface } from '@internetarchive/shared-resize-observer';
6
6
  import type { CollectionDisplayMode } from './models';
7
7
  import '@internetarchive/infinite-scroller';
8
8
  import './tiles/tile-dispatcher';
@@ -13,7 +13,7 @@ import './circular-activity-indicator';
13
13
  import './sort-filter-bar/sort-filter-bar';
14
14
  import { SelectedFacets, SortField, CollectionBrowserContext } from './models';
15
15
  import { RestorationStateHandlerInterface } from './restoration-state-handler';
16
- export declare class CollectionBrowser extends LitElement implements InfiniteScrollerCellProviderInterface {
16
+ export declare class CollectionBrowser extends LitElement implements InfiniteScrollerCellProviderInterface, SharedResizeObserverResizeHandlerInterface {
17
17
  baseNavigationUrl?: string;
18
18
  searchService?: SearchServiceInterface;
19
19
  baseQuery?: string;
@@ -35,6 +35,7 @@ export declare class CollectionBrowser extends LitElement implements InfiniteScr
35
35
  selectedFacets?: SelectedFacets;
36
36
  pageContext: CollectionBrowserContext;
37
37
  restorationStateHandler: RestorationStateHandlerInterface;
38
+ mobileBreakpoint: number;
38
39
  /**
39
40
  * The page that the consumer wants to load.
40
41
  */
@@ -52,6 +53,9 @@ export declare class CollectionBrowser extends LitElement implements InfiniteScr
52
53
  private aggregations?;
53
54
  private fullYearsHistogramAggregation;
54
55
  private totalResults?;
56
+ private mobileView;
57
+ private mobileFacetsVisible;
58
+ private contentContainer;
55
59
  /**
56
60
  * When we're animated scrolling to the page, we don't want to fetch
57
61
  * all of the pages as it scrolls so this lets us know if we're scrolling
@@ -82,7 +86,7 @@ export declare class CollectionBrowser extends LitElement implements InfiniteScr
82
86
  */
83
87
  goToPage(pageNumber: number): void;
84
88
  render(): TemplateResult<1>;
85
- private sortChanged;
89
+ private userChangedSort;
86
90
  private selectedSortChanged;
87
91
  private displayModeChanged;
88
92
  private selectedTitleLetterChanged;
@@ -90,11 +94,17 @@ export declare class CollectionBrowser extends LitElement implements InfiniteScr
90
94
  private titleLetterSelected;
91
95
  private creatorLetterSelected;
92
96
  private get facetDataLoading();
97
+ private get facetsTemplate();
93
98
  private get loadingTemplate();
99
+ private get listHeaderTemplate();
94
100
  private get queryDebuggingTemplate();
95
101
  private histogramDateRangeUpdated;
96
102
  firstUpdated(): void;
97
103
  updated(changed: PropertyValues): void;
104
+ disconnectedCallback(): void;
105
+ handleResize(entry: ResizeObserverEntry): void;
106
+ private disconnectResizeObserver;
107
+ private setupResizeObserver;
98
108
  /**
99
109
  * When the visible cells change from the infinite scroller, we want to emit
100
110
  * which page is currently visible so the consumer can update its UI or the URL
@@ -12,14 +12,15 @@ import './sort-filter-bar/sort-filter-bar';
12
12
  import './collection-facets';
13
13
  import './circular-activity-indicator';
14
14
  import './sort-filter-bar/sort-filter-bar';
15
- import { SortFieldToMetadataField, defaultSelectedFacets, } from './models';
15
+ import { SortField, SortFieldToMetadataField, defaultSelectedFacets, } from './models';
16
16
  import { RestorationStateHandler, } from './restoration-state-handler';
17
+ import chevronIcon from './assets/img/icons/chevron';
17
18
  let CollectionBrowser = class CollectionBrowser extends LitElement {
18
19
  constructor() {
19
20
  super(...arguments);
20
21
  this.showDeleteButtons = false;
21
22
  this.sortParam = null;
22
- this.selectedSort = 'relevance';
23
+ this.selectedSort = SortField.relevance;
23
24
  this.selectedTitleFilter = null;
24
25
  this.selectedCreatorFilter = null;
25
26
  this.sortDirection = null;
@@ -28,6 +29,7 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
28
29
  this.restorationStateHandler = new RestorationStateHandler({
29
30
  context: this.pageContext,
30
31
  });
32
+ this.mobileBreakpoint = 530;
31
33
  /**
32
34
  * The page that the consumer wants to load.
33
35
  */
@@ -42,6 +44,8 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
42
44
  this.searchResultsLoading = false;
43
45
  this.facetsLoading = false;
44
46
  this.fullYearAggregationLoading = false;
47
+ this.mobileView = false;
48
+ this.mobileFacetsVisible = false;
45
49
  /**
46
50
  * When we're animated scrolling to the page, we don't want to fetch
47
51
  * all of the pages as it scrolls so this lets us know if we're scrolling
@@ -112,30 +116,48 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
112
116
  }
113
117
  render() {
114
118
  return html `
115
- <div id="content-container">
119
+ <div id="content-container" class=${this.mobileView ? 'mobile' : ''}>
116
120
  <div id="left-column" class="column">
117
- <div id="results-total">
118
- <span id="big-results-count"
119
- >${this.totalResults
121
+ <div id="mobile-header-container">
122
+ ${this.mobileView
123
+ ? html `
124
+ <div id="mobile-filter-collapse">
125
+ <h1
126
+ @click=${() => {
127
+ this.mobileFacetsVisible = !this.mobileFacetsVisible;
128
+ }}
129
+ @keyup=${() => {
130
+ this.mobileFacetsVisible = !this.mobileFacetsVisible;
131
+ }}
132
+ >
133
+ <span
134
+ class="collapser ${this.mobileFacetsVisible
135
+ ? 'open'
136
+ : ''}"
137
+ >
138
+ ${chevronIcon}
139
+ </span>
140
+ Filters
141
+ </h1>
142
+ </div>
143
+ `
144
+ : nothing}
145
+ <div id="results-total">
146
+ <span id="big-results-count"
147
+ >${this.totalResults
120
148
  ? this.totalResults.toLocaleString()
121
149
  : '-'}</span
122
- >
123
- <span id="big-results-label">Results</span>
150
+ >
151
+ <span id="big-results-label">Results</span>
152
+ </div>
124
153
  </div>
125
- <div id="facets-container">
126
- ${this.facetsLoading ? this.loadingTemplate : nothing}
127
- <collection-facets
128
- @facetsChanged=${this.facetsChanged}
129
- @histogramDateRangeUpdated=${this.histogramDateRangeUpdated}
130
- .aggregations=${this.aggregations}
131
- .fullYearsHistogramAggregation=${this
132
- .fullYearsHistogramAggregation}
133
- .minSelectedDate=${this.minSelectedDate}
134
- .maxSelectedDate=${this.maxSelectedDate}
135
- .selectedFacets=${this.selectedFacets}
136
- ?facetsLoading=${this.facetDataLoading}
137
- ?fullYearAggregationLoading=${this.fullYearAggregationLoading}
138
- ></collection-facets>
154
+ <div
155
+ id="facets-container"
156
+ class=${!this.mobileView || this.mobileFacetsVisible
157
+ ? 'expanded'
158
+ : ''}
159
+ >
160
+ ${this.facetsTemplate}
139
161
  </div>
140
162
  </div>
141
163
  <div id="right-column" class="column">
@@ -146,12 +168,17 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
146
168
  .displayMode=${this.displayMode}
147
169
  .selectedTitleFilter=${this.selectedTitleFilter}
148
170
  .selectedCreatorFilter=${this.selectedCreatorFilter}
149
- @sortChanged=${this.sortChanged}
171
+ .resizeObserver=${this.resizeObserver}
172
+ @sortChanged=${this.userChangedSort}
150
173
  @displayModeChanged=${this.displayModeChanged}
151
174
  @titleLetterChanged=${this.titleLetterSelected}
152
175
  @creatorLetterChanged=${this.creatorLetterSelected}
153
176
  ></sort-filter-bar>
154
177
 
178
+ ${this.displayMode === `list-compact`
179
+ ? this.listHeaderTemplate
180
+ : nothing}
181
+
155
182
  <infinite-scroller
156
183
  class="${ifDefined(this.displayMode)}"
157
184
  .cellProvider=${this}
@@ -164,13 +191,17 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
164
191
  </div>
165
192
  `;
166
193
  }
167
- sortChanged(e) {
194
+ userChangedSort(e) {
195
+ var _a;
168
196
  const { selectedSort, sortDirection } = e.detail;
169
197
  this.selectedSort = selectedSort;
170
198
  this.sortDirection = sortDirection;
199
+ if (((_a = this.currentPage) !== null && _a !== void 0 ? _a : 1) > 1) {
200
+ this.goToPage(1);
201
+ }
202
+ this.currentPage = 1;
171
203
  }
172
204
  selectedSortChanged() {
173
- var _a;
174
205
  if (this.selectedSort === 'relevance' || this.sortDirection === null) {
175
206
  this.sortParam = null;
176
207
  return;
@@ -179,10 +210,6 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
179
210
  if (!sortField)
180
211
  return;
181
212
  this.sortParam = new SortParam(sortField, this.sortDirection);
182
- if (((_a = this.currentPage) !== null && _a !== void 0 ? _a : 1) > 1) {
183
- this.goToPage(1);
184
- }
185
- this.currentPage = 1;
186
213
  }
187
214
  displayModeChanged(e) {
188
215
  this.displayMode = e.detail.displayMode;
@@ -206,6 +233,23 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
206
233
  get facetDataLoading() {
207
234
  return this.facetsLoading || this.fullYearAggregationLoading;
208
235
  }
236
+ get facetsTemplate() {
237
+ return html `
238
+ ${this.facetsLoading ? this.loadingTemplate : nothing}
239
+ <collection-facets
240
+ @facetsChanged=${this.facetsChanged}
241
+ @histogramDateRangeUpdated=${this.histogramDateRangeUpdated}
242
+ .aggregations=${this.aggregations}
243
+ .fullYearsHistogramAggregation=${this.fullYearsHistogramAggregation}
244
+ .minSelectedDate=${this.minSelectedDate}
245
+ .maxSelectedDate=${this.maxSelectedDate}
246
+ .selectedFacets=${this.selectedFacets}
247
+ ?collapsableFacets=${this.mobileView}
248
+ ?facetsLoading=${this.facetDataLoading}
249
+ ?fullYearAggregationLoading=${this.fullYearAggregationLoading}
250
+ ></collection-facets>
251
+ `;
252
+ }
209
253
  get loadingTemplate() {
210
254
  return html `
211
255
  <div class="loading-cover">
@@ -213,6 +257,16 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
213
257
  </div>
214
258
  `;
215
259
  }
260
+ get listHeaderTemplate() {
261
+ return html `
262
+ <tile-dispatcher
263
+ .displayMode=${'list-header'}
264
+ .resizeObserver=${this.resizeObserver}
265
+ .sortParam=${this.sortParam}
266
+ >
267
+ </tile-dispatcher>
268
+ `;
269
+ }
216
270
  get queryDebuggingTemplate() {
217
271
  var _a, _b;
218
272
  return html `
@@ -267,6 +321,36 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
267
321
  this.infiniteScroller.itemCount = this.estimatedTileCount;
268
322
  }
269
323
  }
324
+ if (changed.has('resizeObserver')) {
325
+ const oldObserver = changed.get('resizeObserver');
326
+ if (oldObserver)
327
+ this.disconnectResizeObserver(oldObserver);
328
+ this.setupResizeObserver();
329
+ }
330
+ }
331
+ disconnectedCallback() {
332
+ if (this.resizeObserver) {
333
+ this.disconnectResizeObserver(this.resizeObserver);
334
+ }
335
+ }
336
+ handleResize(entry) {
337
+ if (entry.target === this.contentContainer) {
338
+ this.mobileView = entry.contentRect.width < 600;
339
+ }
340
+ }
341
+ disconnectResizeObserver(resizeObserver) {
342
+ resizeObserver.removeObserver({
343
+ target: this.contentContainer,
344
+ handler: this,
345
+ });
346
+ }
347
+ setupResizeObserver() {
348
+ if (!this.resizeObserver)
349
+ return;
350
+ this.resizeObserver.addObserver({
351
+ target: this.contentContainer,
352
+ handler: this,
353
+ });
270
354
  }
271
355
  /**
272
356
  * When the visible cells change from the infinite scroller, we want to emit
@@ -317,7 +401,7 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
317
401
  var _a, _b, _c, _d, _e, _f;
318
402
  const restorationState = this.restorationStateHandler.getRestorationState();
319
403
  this.displayMode = restorationState.displayMode;
320
- this.selectedSort = (_a = restorationState.selectedSort) !== null && _a !== void 0 ? _a : 'relevance';
404
+ this.selectedSort = (_a = restorationState.selectedSort) !== null && _a !== void 0 ? _a : SortField.relevance;
321
405
  this.sortDirection = (_b = restorationState.sortDirection) !== null && _b !== void 0 ? _b : null;
322
406
  this.selectedTitleFilter = (_c = restorationState.selectedTitleFilter) !== null && _c !== void 0 ? _c : null;
323
407
  this.selectedCreatorFilter = (_d = restorationState.selectedCreatorFilter) !== null && _d !== void 0 ? _d : null;
@@ -688,23 +772,69 @@ CollectionBrowser.styles = css `
688
772
  display: flex;
689
773
  }
690
774
 
775
+ .collapser {
776
+ display: inline-block;
777
+ }
778
+
779
+ .collapser svg {
780
+ width: 10px;
781
+ height: 10px;
782
+ transition: transform 0.2s ease-out;
783
+ }
784
+
785
+ .collapser.open svg {
786
+ transform: rotate(90deg);
787
+ }
788
+
789
+ #mobile-filter-collapse h1 {
790
+ cursor: pointer;
791
+ }
792
+
793
+ #content-container.mobile {
794
+ display: block;
795
+ }
796
+
797
+ .column {
798
+ padding-top: 2rem;
799
+ }
800
+
691
801
  #right-column {
692
802
  flex: 1;
693
803
  position: relative;
694
804
  border-left: 1px solid rgb(232, 232, 232);
805
+ padding-left: 1rem;
806
+ }
807
+
808
+ .mobile #right-column {
809
+ border-left: none;
810
+ padding: 0;
695
811
  }
696
812
 
697
813
  #left-column {
698
814
  width: 18rem;
699
815
  padding-right: 12px;
816
+ padding-right: 1rem;
700
817
  }
701
818
 
702
- .column {
703
- padding: 2rem 1rem;
819
+ .mobile #left-column {
820
+ width: 100%;
821
+ padding: 0;
822
+ }
823
+
824
+ #mobile-header-container {
825
+ display: flex;
826
+ justify-content: space-between;
704
827
  }
705
828
 
706
829
  #facets-container {
707
830
  position: relative;
831
+ max-height: 0;
832
+ transition: max-height 0.2s ease-in-out;
833
+ overflow: hidden;
834
+ }
835
+
836
+ #facets-container.expanded {
837
+ max-height: 2000px;
708
838
  }
709
839
 
710
840
  #results-total {
@@ -713,6 +843,10 @@ CollectionBrowser.styles = css `
713
843
  margin-bottom: 5rem;
714
844
  }
715
845
 
846
+ .mobile #results-total {
847
+ margin-bottom: 0;
848
+ }
849
+
716
850
  #big-results-count {
717
851
  font-size: 2.4rem;
718
852
  font-weight: 500;
@@ -853,6 +987,9 @@ __decorate([
853
987
  __decorate([
854
988
  property({ type: Object })
855
989
  ], CollectionBrowser.prototype, "restorationStateHandler", void 0);
990
+ __decorate([
991
+ property({ type: Number })
992
+ ], CollectionBrowser.prototype, "mobileBreakpoint", void 0);
856
993
  __decorate([
857
994
  state()
858
995
  ], CollectionBrowser.prototype, "pagesToRender", void 0);
@@ -874,6 +1011,15 @@ __decorate([
874
1011
  __decorate([
875
1012
  state()
876
1013
  ], CollectionBrowser.prototype, "totalResults", void 0);
1014
+ __decorate([
1015
+ state()
1016
+ ], CollectionBrowser.prototype, "mobileView", void 0);
1017
+ __decorate([
1018
+ state()
1019
+ ], CollectionBrowser.prototype, "mobileFacetsVisible", void 0);
1020
+ __decorate([
1021
+ query('#content-container')
1022
+ ], CollectionBrowser.prototype, "contentContainer", void 0);
877
1023
  __decorate([
878
1024
  query('infinite-scroller')
879
1025
  ], CollectionBrowser.prototype, "infiniteScroller", void 0);