@internetarchive/collection-browser 0.0.1-alpha.2 → 0.0.1-alpha.22
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/demo/app-root.ts +24 -158
- package/dist/demo/app-root.d.ts +2 -16
- package/dist/demo/app-root.js +23 -141
- package/dist/demo/app-root.js.map +1 -1
- package/dist/src/assets/img/icons/chevron.d.ts +2 -0
- package/dist/src/assets/img/icons/chevron.js +4 -0
- package/dist/src/assets/img/icons/chevron.js.map +1 -0
- package/dist/src/assets/img/icons/eye-closed.d.ts +2 -0
- package/dist/src/assets/img/icons/eye-closed.js +5 -0
- package/dist/src/assets/img/icons/eye-closed.js.map +1 -0
- package/dist/src/assets/img/icons/eye.d.ts +2 -0
- package/dist/src/assets/img/icons/eye.js +5 -0
- package/dist/src/assets/img/icons/eye.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -2
- package/dist/src/assets/img/icons/mediatype/account.js +5 -4
- package/dist/src/assets/img/icons/mediatype/account.js.map +1 -1
- package/dist/src/assets/img/icons/mediatype/audio.js +7 -4
- package/dist/src/assets/img/icons/mediatype/audio.js.map +1 -1
- package/dist/src/assets/img/icons/mediatype/collection.js +7 -4
- package/dist/src/assets/img/icons/mediatype/collection.js.map +1 -1
- package/dist/src/assets/img/icons/mediatype/etree.js +10 -5
- package/dist/src/assets/img/icons/mediatype/etree.js.map +1 -1
- package/dist/src/assets/img/icons/mediatype/film.js +2 -1
- package/dist/src/assets/img/icons/mediatype/film.js.map +1 -1
- package/dist/src/assets/img/icons/mediatype/images.js +9 -6
- package/dist/src/assets/img/icons/mediatype/images.js.map +1 -1
- package/dist/src/assets/img/icons/mediatype/software.js +9 -6
- package/dist/src/assets/img/icons/mediatype/software.js.map +1 -1
- package/dist/src/assets/img/icons/mediatype/texts.js +9 -6
- package/dist/src/assets/img/icons/mediatype/texts.js.map +1 -1
- package/dist/src/assets/img/icons/mediatype/tv.js +10 -5
- package/dist/src/assets/img/icons/mediatype/tv.js.map +1 -1
- package/dist/src/assets/img/icons/mediatype/video.js +10 -6
- package/dist/src/assets/img/icons/mediatype/video.js.map +1 -1
- package/dist/src/assets/img/icons/mediatype/web.js +9 -6
- package/dist/src/assets/img/icons/mediatype/web.js.map +1 -1
- package/dist/src/async-collection-name.d.ts +11 -0
- package/dist/src/async-collection-name.js +38 -0
- package/dist/src/async-collection-name.js.map +1 -0
- package/dist/src/collection-browser.d.ts +55 -17
- package/dist/src/collection-browser.js +466 -106
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/collection-facets.d.ts +24 -5
- package/dist/src/collection-facets.js +300 -78
- package/dist/src/collection-facets.js.map +1 -1
- package/dist/src/collection-name-cache.d.ts +18 -0
- package/dist/src/collection-name-cache.js +89 -0
- package/dist/src/collection-name-cache.js.map +1 -0
- package/dist/src/mediatype-icon.js +10 -3
- package/dist/src/mediatype-icon.js.map +1 -1
- package/dist/src/models.d.ts +72 -14
- package/dist/src/models.js +57 -1
- package/dist/src/models.js.map +1 -1
- package/dist/src/restoration-state-handler.d.ts +37 -0
- package/dist/src/restoration-state-handler.js +177 -0
- package/dist/src/restoration-state-handler.js.map +1 -0
- package/dist/src/sort-filter-bar/alpha-bar.d.ts +1 -2
- package/dist/src/sort-filter-bar/alpha-bar.js +19 -9
- package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -1
- package/dist/src/sort-filter-bar/img/compact.d.ts +1 -0
- package/dist/src/sort-filter-bar/img/compact.js +5 -0
- package/dist/src/sort-filter-bar/img/compact.js.map +1 -0
- package/dist/src/sort-filter-bar/img/grid.d.ts +1 -0
- package/dist/src/sort-filter-bar/img/grid.js +5 -0
- package/dist/src/sort-filter-bar/img/grid.js.map +1 -0
- package/dist/src/sort-filter-bar/img/list.d.ts +1 -0
- package/dist/src/sort-filter-bar/img/list.js +5 -0
- package/dist/src/sort-filter-bar/img/list.js.map +1 -0
- package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -0
- package/dist/src/sort-filter-bar/img/sort-triangle.js +5 -0
- package/dist/src/sort-filter-bar/img/sort-triangle.js.map +1 -0
- package/dist/src/sort-filter-bar/img/tile.d.ts +1 -0
- package/dist/src/sort-filter-bar/img/tile.js +5 -0
- package/dist/src/sort-filter-bar/img/tile.js.map +1 -0
- package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +65 -11
- package/dist/src/sort-filter-bar/sort-filter-bar.js +453 -142
- package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
- package/dist/src/tiles/grid/collection-tile.js +1 -2
- package/dist/src/tiles/grid/collection-tile.js.map +1 -1
- package/dist/src/tiles/grid/item-tile.d.ts +4 -0
- package/dist/src/tiles/grid/item-tile.js +134 -45
- package/dist/src/tiles/grid/item-tile.js.map +1 -1
- package/dist/src/tiles/list/tile-list-compact-header.d.ts +11 -0
- package/dist/src/tiles/list/tile-list-compact-header.js +79 -0
- package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -0
- package/dist/src/tiles/list/tile-list-compact.d.ts +1 -0
- package/dist/src/tiles/list/tile-list-compact.js +122 -31
- package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
- package/dist/src/tiles/list/tile-list-detail.d.ts +0 -10
- package/dist/src/tiles/list/tile-list-detail.js +6 -159
- package/dist/src/tiles/list/tile-list-detail.js.map +1 -1
- package/dist/src/tiles/list/tile-list.d.ts +19 -6
- package/dist/src/tiles/list/tile-list.js +240 -108
- package/dist/src/tiles/list/tile-list.js.map +1 -1
- package/dist/src/tiles/tile-dispatcher.d.ts +8 -1
- package/dist/src/tiles/tile-dispatcher.js +46 -11
- package/dist/src/tiles/tile-dispatcher.js.map +1 -1
- package/dist/src/utils/format-date.js +1 -2
- package/dist/src/utils/format-date.js.map +1 -1
- package/dist/test/{utils/format-string.test.d.ts → collection-name-cache.test.d.ts} +0 -0
- package/dist/test/collection-name-cache.test.js +158 -0
- package/dist/test/collection-name-cache.test.js.map +1 -0
- package/dist/test/mocks/mock-search-response.d.ts +5 -0
- package/dist/test/mocks/mock-search-response.js +62 -0
- package/dist/test/mocks/mock-search-response.js.map +1 -0
- package/dist/test/mocks/mock-search-service.d.ts +13 -0
- package/dist/test/mocks/mock-search-service.js +20 -0
- package/dist/test/mocks/mock-search-service.js.map +1 -0
- package/package.json +9 -4
- package/src/assets/img/icons/chevron.ts +4 -0
- package/src/assets/img/icons/eye-closed.ts +5 -0
- package/src/assets/img/icons/eye.ts +5 -0
- package/src/assets/img/icons/mediatype/account.ts +5 -4
- package/src/assets/img/icons/mediatype/audio.ts +7 -4
- package/src/assets/img/icons/mediatype/collection.ts +7 -4
- package/src/assets/img/icons/mediatype/etree.ts +10 -5
- package/src/assets/img/icons/mediatype/film.ts +2 -1
- package/src/assets/img/icons/mediatype/images.ts +9 -6
- package/src/assets/img/icons/mediatype/software.ts +9 -6
- package/src/assets/img/icons/mediatype/texts.ts +9 -6
- package/src/assets/img/icons/mediatype/tv.ts +10 -5
- package/src/assets/img/icons/mediatype/video.ts +10 -6
- package/src/assets/img/icons/mediatype/web.ts +9 -6
- package/src/collection-browser.ts +490 -105
- package/src/collection-facets.ts +325 -109
- package/src/mediatype-icon.ts +10 -3
- package/src/models.ts +139 -14
- package/src/restoration-state-handler.ts +234 -0
- package/src/sort-filter-bar/alpha-bar.ts +19 -9
- package/src/sort-filter-bar/img/compact.ts +5 -0
- package/src/sort-filter-bar/img/list.ts +5 -0
- package/src/sort-filter-bar/img/sort-triangle.ts +5 -0
- package/src/sort-filter-bar/img/tile.ts +5 -0
- package/src/sort-filter-bar/sort-filter-bar.ts +499 -149
- package/src/tiles/grid/collection-tile.ts +1 -2
- package/src/tiles/grid/item-tile.ts +138 -56
- package/src/tiles/list/tile-list-compact-header.ts +75 -0
- package/src/tiles/list/tile-list-compact.ts +209 -0
- package/src/tiles/list/tile-list.ts +261 -110
- package/src/tiles/tile-dispatcher.ts +51 -11
- package/src/utils/format-date.ts +1 -2
- package/dist/src/assets/img/icons/audio.d.ts +0 -1
- package/dist/src/assets/img/icons/audio.js +0 -9
- package/dist/src/assets/img/icons/audio.js.map +0 -1
- package/dist/src/assets/img/icons/collection.d.ts +0 -1
- package/dist/src/assets/img/icons/collection.js +0 -9
- package/dist/src/assets/img/icons/collection.js.map +0 -1
- package/dist/src/assets/img/icons/etree.d.ts +0 -1
- package/dist/src/assets/img/icons/etree.js +0 -9
- package/dist/src/assets/img/icons/etree.js.map +0 -1
- package/dist/src/assets/img/icons/images.d.ts +0 -1
- package/dist/src/assets/img/icons/images.js +0 -10
- package/dist/src/assets/img/icons/images.js.map +0 -1
- package/dist/src/assets/img/icons/mediatype/etree copy.d.ts +0 -1
- package/dist/src/assets/img/icons/mediatype/etree copy.js +0 -9
- package/dist/src/assets/img/icons/mediatype/etree copy.js.map +0 -1
- package/dist/src/assets/img/icons/mediatype/livemusic.d.ts +0 -1
- package/dist/src/assets/img/icons/mediatype/livemusic.js +0 -7
- package/dist/src/assets/img/icons/mediatype/livemusic.js.map +0 -1
- package/dist/src/assets/img/icons/mediatype/photos.d.ts +0 -1
- package/dist/src/assets/img/icons/mediatype/photos.js +0 -7
- package/dist/src/assets/img/icons/mediatype/photos.js.map +0 -1
- package/dist/src/assets/img/icons/software.d.ts +0 -1
- package/dist/src/assets/img/icons/software.js +0 -10
- package/dist/src/assets/img/icons/software.js.map +0 -1
- package/dist/src/assets/img/icons/texts.d.ts +0 -1
- package/dist/src/assets/img/icons/texts.js +0 -10
- package/dist/src/assets/img/icons/texts.js.map +0 -1
- package/dist/src/assets/img/icons/tv.d.ts +0 -1
- package/dist/src/assets/img/icons/tv.js +0 -9
- package/dist/src/assets/img/icons/tv.js.map +0 -1
- package/dist/src/assets/img/icons/video.d.ts +0 -1
- package/dist/src/assets/img/icons/video.js +0 -10
- package/dist/src/assets/img/icons/video.js.map +0 -1
- package/dist/src/assets/img/icons/web.d.ts +0 -1
- package/dist/src/assets/img/icons/web.js +0 -10
- package/dist/src/assets/img/icons/web.js.map +0 -1
- package/dist/src/utils/format-string.d.ts +0 -2
- package/dist/src/utils/format-string.js +0 -7
- package/dist/src/utils/format-string.js.map +0 -1
- package/dist/test/utils/format-string.test.js +0 -17
- package/dist/test/utils/format-string.test.js.map +0 -1
- package/src/assets/img/icons/mediatype/foo.svg +0 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-name-cache.js","sourceRoot":"","sources":["../../src/collection-name-cache.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable camelcase */\n/* eslint-disable no-continue */\nimport {\n SearchParams,\n SearchServiceInterface,\n} from '@internetarchive/search-service';\n\nexport interface CollectionNameCacheInterface {\n collectionNameFor(identifier: string): Promise<string | null>;\n preloadIdentifiers(identifiers: string[]): Promise<void>;\n}\n\n// this is the callback type received after the name is fetched\ntype CollectionNameResolver = (name: string | null) => Promise<void>;\n\nexport class CollectionNameCache implements CollectionNameCacheInterface {\n async collectionNameFor(identifier: string): Promise<string | null> {\n const lowercaseIdentifier = identifier.toLowerCase();\n const cachedName = this.collectionNameCache[lowercaseIdentifier];\n // we're specifically looking for `undefined`, because `null`\n // means we queried the search service and found nothing so\n // don't query again\n if (cachedName !== undefined) return cachedName;\n\n return new Promise(resolve => {\n this.pendingIdentifierQueue.push(lowercaseIdentifier);\n const currentPromises = this.pendingPromises[lowercaseIdentifier] ?? [];\n const resultHandler: CollectionNameResolver = async (\n name: string | null\n ) => {\n resolve(name);\n };\n currentPromises.push(resultHandler);\n this.pendingPromises[lowercaseIdentifier] = currentPromises;\n });\n }\n\n async preloadIdentifiers(identifiers: string[]): Promise<void> {\n const lowercaseIdentifiers = identifiers.map(identifier => identifier.toLowerCase());\n for (const identifier of lowercaseIdentifiers) {\n if (this.collectionNameCache[identifier]) continue;\n this.pendingIdentifierQueue.push(identifier);\n }\n await this.loadPendingIdentifiers();\n }\n\n private pendingIdentifierQueue: string[] = [];\n\n private pendingPromises: { [key: string]: CollectionNameResolver[] } = {};\n\n private collectionNameCache: { [key: string]: string | null | undefined } =\n {};\n\n private searchService: SearchServiceInterface;\n\n constructor(options: {\n searchService: SearchServiceInterface;\n loadInterval?: number;\n }) {\n this.searchService = options.searchService;\n\n setInterval(() => {\n this.loadPendingIdentifiers();\n }, options.loadInterval ?? 250);\n }\n\n private async loadPendingIdentifiers(): Promise<void> {\n const pendingIdentifiers = this.pendingIdentifierQueue.splice(0, 100);\n if (pendingIdentifiers.length === 0) return;\n\n const searchParams = new SearchParams({\n query: `identifier:(${pendingIdentifiers.join(' OR ')})`,\n fields: ['title', 'identifier'],\n rows: pendingIdentifiers.length,\n });\n\n const results = await this.searchService.search(searchParams);\n const docs = results.success?.response?.docs;\n\n // first process the identifiers that were received from the search service\n // and remove them from the pendingIdentifierQueue\n if (docs && docs.length > 0) {\n for (const result of docs) {\n const { identifier, title } = result;\n if (!identifier) continue;\n const lowercaseIdentifier = identifier.toLowerCase();\n pendingIdentifiers.splice(pendingIdentifiers.indexOf(lowercaseIdentifier), 1);\n const collectionName = title?.value ?? null;\n this.collectionNameCache[lowercaseIdentifier] = collectionName;\n const currentPromises = this.pendingPromises[lowercaseIdentifier];\n if (currentPromises) {\n for (const promise of currentPromises) {\n promise(collectionName);\n }\n delete this.pendingPromises[lowercaseIdentifier];\n }\n }\n }\n\n // if the search service did not return titles for all of the identifiers,\n // we still need to complete the promises and just return `null` for the rest\n for (const identifier of pendingIdentifiers) {\n this.collectionNameCache[identifier] = null;\n const currentPromises = this.pendingPromises[identifier];\n if (currentPromises) {\n for (const promise of currentPromises) {\n promise(null);\n }\n delete this.pendingPromises[identifier];\n }\n }\n }\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import { css, html, LitElement } from 'lit';
|
|
3
3
|
import { customElement, property } from 'lit/decorators.js';
|
|
4
|
+
import { accountIcon } from './assets/img/icons/mediatype/account';
|
|
4
5
|
import { audioIcon } from './assets/img/icons/mediatype/audio';
|
|
5
6
|
import { etreeIcon } from './assets/img/icons/mediatype/etree';
|
|
6
7
|
import { imagesIcon } from './assets/img/icons/mediatype/images';
|
|
@@ -16,6 +17,7 @@ let MediatypeIcon = class MediatypeIcon extends LitElement {
|
|
|
16
17
|
super(...arguments);
|
|
17
18
|
this.showText = false;
|
|
18
19
|
this.mediatypeIcons = {
|
|
20
|
+
account: accountIcon,
|
|
19
21
|
audio: audioIcon,
|
|
20
22
|
collection: collectionIcon,
|
|
21
23
|
data: etreeIcon,
|
|
@@ -30,6 +32,7 @@ let MediatypeIcon = class MediatypeIcon extends LitElement {
|
|
|
30
32
|
web: webIcon,
|
|
31
33
|
};
|
|
32
34
|
this.mediatypeText = {
|
|
35
|
+
account: 'Account',
|
|
33
36
|
audio: 'Audio',
|
|
34
37
|
collection: 'Collection',
|
|
35
38
|
data: 'Data',
|
|
@@ -69,9 +72,13 @@ let MediatypeIcon = class MediatypeIcon extends LitElement {
|
|
|
69
72
|
display: none;
|
|
70
73
|
}
|
|
71
74
|
|
|
72
|
-
|
|
73
|
-
height: 10px;
|
|
74
|
-
width: 10px;
|
|
75
|
+
svg {
|
|
76
|
+
height: var(--iconHeight, 10px);
|
|
77
|
+
width: var(--iconWidth, 10px);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.fill-color {
|
|
81
|
+
fill: var(--iconFillColor);
|
|
75
82
|
}
|
|
76
83
|
`;
|
|
77
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mediatype-icon.js","sourceRoot":"","sources":["../../src/mediatype-icon.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAkB,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAGzE,IAAa,aAAa,GAA1B,MAAa,aAAc,SAAQ,UAAU;IAA7C;;QAG+B,aAAQ,GAAG,KAAK,CAAC;QAE7B,mBAAc,GAA2B;YACxD,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,cAAc;YAC1B,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,YAAY;YACtB,KAAK,EAAE,SAAS;YAChB,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,OAAO;SACb,CAAC;QAEe,kBAAa,GAA2B;YACvD,KAAK,EAAE,OAAO;YACd,UAAU,EAAE,YAAY;YACxB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,MAAM;YACb,EAAE,EAAE,IAAI;YACR,KAAK,EAAE,OAAO;YACd,GAAG,EAAE,KAAK;SACX,CAAC;
|
|
1
|
+
{"version":3,"file":"mediatype-icon.js","sourceRoot":"","sources":["../../src/mediatype-icon.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAkB,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAGzE,IAAa,aAAa,GAA1B,MAAa,aAAc,SAAQ,UAAU;IAA7C;;QAG+B,aAAQ,GAAG,KAAK,CAAC;QAE7B,mBAAc,GAA2B;YACxD,OAAO,EAAE,WAAW;YACpB,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,cAAc;YAC1B,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,YAAY;YACtB,KAAK,EAAE,SAAS;YAChB,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,OAAO;SACb,CAAC;QAEe,kBAAa,GAA2B;YACvD,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,OAAO;YACd,UAAU,EAAE,YAAY;YACxB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,MAAM;YACb,EAAE,EAAE,IAAI;YACR,KAAK,EAAE,OAAO;YACd,GAAG,EAAE,KAAK;SACX,CAAC;IAsCJ,CAAC;IApCC,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,OAAO,IAAI,CAAA,EAAE,CAAC;SACf;QACD,OAAO,IAAI,CAAA;8BACe,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW;UAC7D,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;iCACZ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;;KAE9D,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,MAAM;QACf,OAAO,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;KAqBT,CAAC;IACJ,CAAC;CACF,CAAA;AAxE6B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gDAA+B;AAE7B;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;+CAAkB;AAHnC,aAAa;IADzB,aAAa,CAAC,gBAAgB,CAAC;GACnB,aAAa,CAyEzB;SAzEY,aAAa","sourcesContent":["import { css, CSSResultGroup, html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { accountIcon } from './assets/img/icons/mediatype/account';\nimport { audioIcon } from './assets/img/icons/mediatype/audio';\nimport { etreeIcon } from './assets/img/icons/mediatype/etree';\nimport { imagesIcon } from './assets/img/icons/mediatype/images';\nimport { filmIcon } from './assets/img/icons/mediatype/film';\nimport { softwareIcon } from './assets/img/icons/mediatype/software';\nimport { textsIcon } from './assets/img/icons/mediatype/texts';\nimport { tvIcon } from './assets/img/icons/mediatype/tv';\nimport { videoIcon } from './assets/img/icons/mediatype/video';\nimport { webIcon } from './assets/img/icons/mediatype/web';\nimport { collectionIcon } from './assets/img/icons/mediatype/collection';\n\n@customElement('mediatype-icon')\nexport class MediatypeIcon extends LitElement {\n @property({ type: String }) mediatype: string | undefined;\n\n @property({ type: Boolean }) showText = false;\n\n private readonly mediatypeIcons: { [key: string]: any } = {\n account: accountIcon,\n audio: audioIcon,\n collection: collectionIcon,\n data: etreeIcon,\n etree: etreeIcon,\n film: filmIcon,\n image: imagesIcon,\n movies: filmIcon,\n software: softwareIcon,\n texts: textsIcon,\n tv: tvIcon,\n video: videoIcon,\n web: webIcon,\n };\n\n private readonly mediatypeText: { [key: string]: any } = {\n account: 'Account',\n audio: 'Audio',\n collection: 'Collection',\n data: 'Data',\n etree: 'E-tree',\n film: 'Film',\n image: 'Image',\n movies: 'Movie',\n software: 'Software',\n texts: 'Text',\n tv: 'TV',\n video: 'Video',\n web: 'Web',\n };\n\n render() {\n if (!this.mediatype) {\n return html``;\n }\n return html`\n <div id=\"icon\" class=\"${this.showText ? 'show-text' : 'hide-text'}\">\n ${this.mediatypeIcons[this.mediatype]}\n <p class=\"status-text\">${this.mediatypeText[this.mediatype]}</p>\n </div>\n `;\n }\n\n static get styles(): CSSResultGroup {\n return css`\n .status-text {\n font-size: 14px;\n color: #2c2c2c;\n margin: auto;\n display: block;\n text-align: center;\n }\n\n #icon.hide-text p {\n display: none;\n }\n\n svg {\n height: var(--iconHeight, 10px);\n width: var(--iconWidth, 10px);\n }\n\n .fill-color {\n fill: var(--iconFillColor);\n }\n `;\n }\n}\n"]}
|
package/dist/src/models.d.ts
CHANGED
|
@@ -1,23 +1,81 @@
|
|
|
1
1
|
import type { MediaType } from '@internetarchive/field-parsers';
|
|
2
2
|
export interface TileModel {
|
|
3
|
-
identifier: string;
|
|
4
|
-
title: string;
|
|
5
3
|
averageRating?: number;
|
|
4
|
+
collectionIdentifier?: string;
|
|
5
|
+
collectionName?: string;
|
|
6
|
+
collections: string[];
|
|
7
|
+
commentCount: number;
|
|
8
|
+
creator?: string;
|
|
9
|
+
creators: string[];
|
|
6
10
|
dateAdded?: Date;
|
|
7
11
|
dateArchived?: Date;
|
|
8
|
-
dateReviewed?: Date;
|
|
9
12
|
datePublished?: Date;
|
|
10
|
-
|
|
11
|
-
viewCount: number;
|
|
12
|
-
itemCount: number;
|
|
13
|
-
favCount: number;
|
|
14
|
-
commentCount: number;
|
|
13
|
+
dateReviewed?: Date;
|
|
15
14
|
description?: string;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
favCount: number;
|
|
16
|
+
identifier: string;
|
|
17
|
+
issue?: string;
|
|
18
|
+
itemCount: number;
|
|
19
|
+
mediatype: MediaType;
|
|
20
20
|
source?: string;
|
|
21
|
-
|
|
21
|
+
subjects: string[];
|
|
22
|
+
title: string;
|
|
23
|
+
viewCount: number;
|
|
24
|
+
volume?: string;
|
|
25
|
+
}
|
|
26
|
+
export declare type CollectionDisplayMode = 'grid' | 'list-compact' | 'list-detail' | 'list-header';
|
|
27
|
+
/**
|
|
28
|
+
* This is mainly used to set the cookies for the collection display mode.
|
|
29
|
+
*
|
|
30
|
+
* It allows the user to set different modes for different contexts (collection page, search page, etc).
|
|
31
|
+
*/
|
|
32
|
+
export declare type CollectionBrowserContext = 'collection' | 'search';
|
|
33
|
+
/**
|
|
34
|
+
* The sort fields shown in the sort filter bar
|
|
35
|
+
*/
|
|
36
|
+
export declare enum SortField {
|
|
37
|
+
'relevance' = "relevance",
|
|
38
|
+
'views' = "views",
|
|
39
|
+
'title' = "title",
|
|
40
|
+
'datearchived' = "datearchived",
|
|
41
|
+
'datepublished' = "datepublished",
|
|
42
|
+
'datereviewed' = "datereviewed",
|
|
43
|
+
'dateadded' = "dateadded",
|
|
44
|
+
'creator' = "creator"
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The metadata fields we sort by that map to the SortFields above
|
|
48
|
+
*/
|
|
49
|
+
export declare type MetadataSortField = 'week' | 'titleSorter' | 'date' | 'creatorSorter' | 'publicdate' | 'reviewdate' | 'addeddate';
|
|
50
|
+
export declare const SortFieldDisplayName: {
|
|
51
|
+
[key in SortField]: string;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Maps the SortField above to the corresponding Metadata field in the API.
|
|
55
|
+
*/
|
|
56
|
+
export declare const SortFieldToMetadataField: {
|
|
57
|
+
[key in SortField]: MetadataSortField | null;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Maps the Metadata field to the corresponding SortField field in the API.
|
|
61
|
+
*/
|
|
62
|
+
export declare const MetadataFieldToSortField: {
|
|
63
|
+
[key in MetadataSortField]: SortField;
|
|
64
|
+
};
|
|
65
|
+
export declare type FacetOption = 'subject' | 'mediatype' | 'language' | 'creator' | 'collection' | 'year';
|
|
66
|
+
export declare type SelectedFacetState = 'selected' | 'hidden';
|
|
67
|
+
export declare type FacetState = SelectedFacetState | 'none';
|
|
68
|
+
export interface FacetBucket {
|
|
69
|
+
displayText?: string;
|
|
70
|
+
key: string;
|
|
71
|
+
count: number;
|
|
72
|
+
state: FacetState;
|
|
73
|
+
}
|
|
74
|
+
export interface FacetGroup {
|
|
75
|
+
title: string;
|
|
76
|
+
key: FacetOption;
|
|
77
|
+
buckets: FacetBucket[];
|
|
22
78
|
}
|
|
23
|
-
export declare type
|
|
79
|
+
export declare type FacetValue = string;
|
|
80
|
+
export declare type SelectedFacets = Record<FacetOption, Record<FacetValue, SelectedFacetState>>;
|
|
81
|
+
export declare const defaultSelectedFacets: SelectedFacets;
|
package/dist/src/models.js
CHANGED
|
@@ -1,2 +1,58 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* The sort fields shown in the sort filter bar
|
|
3
|
+
*/
|
|
4
|
+
export var SortField;
|
|
5
|
+
(function (SortField) {
|
|
6
|
+
SortField["relevance"] = "relevance";
|
|
7
|
+
SortField["views"] = "views";
|
|
8
|
+
SortField["title"] = "title";
|
|
9
|
+
SortField["datearchived"] = "datearchived";
|
|
10
|
+
SortField["datepublished"] = "datepublished";
|
|
11
|
+
SortField["datereviewed"] = "datereviewed";
|
|
12
|
+
SortField["dateadded"] = "dateadded";
|
|
13
|
+
SortField["creator"] = "creator";
|
|
14
|
+
})(SortField || (SortField = {}));
|
|
15
|
+
export const SortFieldDisplayName = {
|
|
16
|
+
relevance: 'Relevance',
|
|
17
|
+
views: 'Views',
|
|
18
|
+
title: 'Title',
|
|
19
|
+
datearchived: 'Date Archived',
|
|
20
|
+
datepublished: 'Date Published',
|
|
21
|
+
datereviewed: 'Date Reviewed',
|
|
22
|
+
dateadded: 'Date Added',
|
|
23
|
+
creator: 'Creator',
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Maps the SortField above to the corresponding Metadata field in the API.
|
|
27
|
+
*/
|
|
28
|
+
export const SortFieldToMetadataField = {
|
|
29
|
+
relevance: null,
|
|
30
|
+
views: 'week',
|
|
31
|
+
title: 'titleSorter',
|
|
32
|
+
datearchived: 'date',
|
|
33
|
+
datepublished: 'publicdate',
|
|
34
|
+
datereviewed: 'reviewdate',
|
|
35
|
+
dateadded: 'addeddate',
|
|
36
|
+
creator: 'creatorSorter',
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Maps the Metadata field to the corresponding SortField field in the API.
|
|
40
|
+
*/
|
|
41
|
+
export const MetadataFieldToSortField = {
|
|
42
|
+
titleSorter: SortField.title,
|
|
43
|
+
date: SortField.datearchived,
|
|
44
|
+
publicdate: SortField.datepublished,
|
|
45
|
+
reviewdate: SortField.datereviewed,
|
|
46
|
+
addeddate: SortField.dateadded,
|
|
47
|
+
creatorSorter: SortField.creator,
|
|
48
|
+
week: SortField.views,
|
|
49
|
+
};
|
|
50
|
+
export const defaultSelectedFacets = {
|
|
51
|
+
subject: {},
|
|
52
|
+
mediatype: {},
|
|
53
|
+
language: {},
|
|
54
|
+
creator: {},
|
|
55
|
+
collection: {},
|
|
56
|
+
year: {},
|
|
57
|
+
};
|
|
2
58
|
//# sourceMappingURL=models.js.map
|
package/dist/src/models.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/models.ts"],"names":[],"mappings":"","sourcesContent":["import type { MediaType } from '@internetarchive/field-parsers';\n\nexport interface TileModel {\n
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/models.ts"],"names":[],"mappings":"AAwCA;;GAEG;AACH,MAAM,CAAN,IAAY,SASX;AATD,WAAY,SAAS;IACnB,oCAAyB,CAAA;IACzB,4BAAiB,CAAA;IACjB,4BAAiB,CAAA;IACjB,0CAA+B,CAAA;IAC/B,4CAAiC,CAAA;IACjC,0CAA+B,CAAA;IAC/B,oCAAyB,CAAA;IACzB,gCAAqB,CAAA;AACvB,CAAC,EATW,SAAS,KAAT,SAAS,QASpB;AAcD,MAAM,CAAC,MAAM,oBAAoB,GAE7B;IACF,SAAS,EAAE,WAAW;IACtB,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,YAAY,EAAE,eAAe;IAC7B,aAAa,EAAE,gBAAgB;IAC/B,YAAY,EAAE,eAAe;IAC7B,SAAS,EAAE,YAAY;IACvB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAEjC;IACF,SAAS,EAAE,IAAI;IACf,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,aAAa;IACpB,YAAY,EAAE,MAAM;IACpB,aAAa,EAAE,YAAY;IAC3B,YAAY,EAAE,YAAY;IAC1B,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,eAAe;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAEjC;IACF,WAAW,EAAE,SAAS,CAAC,KAAK;IAC5B,IAAI,EAAE,SAAS,CAAC,YAAY;IAC5B,UAAU,EAAE,SAAS,CAAC,aAAa;IACnC,UAAU,EAAE,SAAS,CAAC,YAAY;IAClC,SAAS,EAAE,SAAS,CAAC,SAAS;IAC9B,aAAa,EAAE,SAAS,CAAC,OAAO;IAChC,IAAI,EAAE,SAAS,CAAC,KAAK;CACtB,CAAC;AAkCF,MAAM,CAAC,MAAM,qBAAqB,GAAmB;IACnD,OAAO,EAAE,EAAE;IACX,SAAS,EAAE,EAAE;IACb,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,EAAE;IACX,UAAU,EAAE,EAAE;IACd,IAAI,EAAE,EAAE;CACT,CAAC","sourcesContent":["import type { MediaType } from '@internetarchive/field-parsers';\n\nexport interface TileModel {\n averageRating?: number;\n collectionIdentifier?: string;\n collectionName?: string;\n collections: string[];\n commentCount: number;\n creator?: string;\n creators: string[];\n dateAdded?: Date; // Date added to public search (software-defined) [from: addeddate]\n dateArchived?: Date; // Date archived (software-defined) item created on archive.org [from: publicdate]\n datePublished?: Date; // Date work published in the world (user-defined) [from: date]\n dateReviewed?: Date; // Date reviewed (user-created) most recent review [from: reviewdate]\n description?: string;\n favCount: number;\n identifier: string;\n issue?: string;\n itemCount: number;\n mediatype: MediaType;\n source?: string;\n subjects: string[];\n title: string;\n viewCount: number;\n volume?: string;\n}\n\nexport type CollectionDisplayMode =\n | 'grid'\n | 'list-compact'\n | 'list-detail'\n | 'list-header';\n\n/**\n * This is mainly used to set the cookies for the collection display mode.\n *\n * It allows the user to set different modes for different contexts (collection page, search page, etc).\n */\nexport type CollectionBrowserContext = 'collection' | 'search';\n\n/**\n * The sort fields shown in the sort filter bar\n */\nexport enum SortField {\n 'relevance' = 'relevance',\n 'views' = 'views',\n 'title' = 'title',\n 'datearchived' = 'datearchived',\n 'datepublished' = 'datepublished',\n 'datereviewed' = 'datereviewed',\n 'dateadded' = 'dateadded',\n 'creator' = 'creator',\n}\n\n/**\n * The metadata fields we sort by that map to the SortFields above\n */\nexport type MetadataSortField =\n | 'week'\n | 'titleSorter'\n | 'date'\n | 'creatorSorter'\n | 'publicdate'\n | 'reviewdate'\n | 'addeddate';\n\nexport const SortFieldDisplayName: {\n [key in SortField]: string;\n} = {\n relevance: 'Relevance',\n views: 'Views',\n title: 'Title',\n datearchived: 'Date Archived',\n datepublished: 'Date Published',\n datereviewed: 'Date Reviewed',\n dateadded: 'Date Added',\n creator: 'Creator',\n};\n\n/**\n * Maps the SortField above to the corresponding Metadata field in the API.\n */\nexport const SortFieldToMetadataField: {\n [key in SortField]: MetadataSortField | null;\n} = {\n relevance: null,\n views: 'week',\n title: 'titleSorter',\n datearchived: 'date',\n datepublished: 'publicdate',\n datereviewed: 'reviewdate',\n dateadded: 'addeddate',\n creator: 'creatorSorter',\n};\n\n/**\n * Maps the Metadata field to the corresponding SortField field in the API.\n */\nexport const MetadataFieldToSortField: {\n [key in MetadataSortField]: SortField;\n} = {\n titleSorter: SortField.title,\n date: SortField.datearchived,\n publicdate: SortField.datepublished,\n reviewdate: SortField.datereviewed,\n addeddate: SortField.dateadded,\n creatorSorter: SortField.creator,\n week: SortField.views,\n};\n\nexport type FacetOption =\n | 'subject'\n | 'mediatype'\n | 'language'\n | 'creator'\n | 'collection'\n | 'year';\n\nexport type SelectedFacetState = 'selected' | 'hidden';\n\nexport type FacetState = SelectedFacetState | 'none';\nexport interface FacetBucket {\n // for some facets, we augment the key with a display value\n displayText?: string;\n key: string;\n count: number;\n state: FacetState;\n}\n\nexport interface FacetGroup {\n title: string;\n key: FacetOption;\n buckets: FacetBucket[];\n}\n\nexport type FacetValue = string;\n\nexport type SelectedFacets = Record<\n FacetOption,\n Record<FacetValue, SelectedFacetState>\n>;\n\nexport const defaultSelectedFacets: SelectedFacets = {\n subject: {},\n mediatype: {},\n language: {},\n creator: {},\n collection: {},\n year: {},\n};\n"]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { SortDirection, SortParam } from '@internetarchive/search-service';
|
|
2
|
+
import { CollectionBrowserContext, CollectionDisplayMode, SelectedFacets, SortField } from './models';
|
|
3
|
+
export interface RestorationState {
|
|
4
|
+
displayMode?: CollectionDisplayMode;
|
|
5
|
+
sortParam?: SortParam;
|
|
6
|
+
selectedSort?: SortField;
|
|
7
|
+
sortDirection?: SortDirection;
|
|
8
|
+
selectedFacets: SelectedFacets;
|
|
9
|
+
baseQuery?: string;
|
|
10
|
+
currentPage?: number;
|
|
11
|
+
dateRangeQueryClause?: string;
|
|
12
|
+
titleQuery?: string;
|
|
13
|
+
creatorQuery?: string;
|
|
14
|
+
minSelectedDate?: string;
|
|
15
|
+
maxSelectedDate?: string;
|
|
16
|
+
selectedTitleFilter?: string;
|
|
17
|
+
selectedCreatorFilter?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface RestorationStateHandlerInterface {
|
|
20
|
+
persistState(state: RestorationState): void;
|
|
21
|
+
getRestorationState(): RestorationState;
|
|
22
|
+
}
|
|
23
|
+
export declare class RestorationStateHandler implements RestorationStateHandlerInterface {
|
|
24
|
+
private context;
|
|
25
|
+
private cookieDomain;
|
|
26
|
+
private cookieExpiration;
|
|
27
|
+
private cookiePath;
|
|
28
|
+
constructor(options: {
|
|
29
|
+
context: CollectionBrowserContext;
|
|
30
|
+
});
|
|
31
|
+
persistState(state: RestorationState): void;
|
|
32
|
+
getRestorationState(): RestorationState;
|
|
33
|
+
private persistViewStateToCookies;
|
|
34
|
+
private loadTileViewStateFromCookies;
|
|
35
|
+
private persistQueryStateToUrl;
|
|
36
|
+
private loadQueryStateFromUrl;
|
|
37
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { getCookie, setCookie } from 'typescript-cookie';
|
|
2
|
+
import { MetadataFieldToSortField, } from './models';
|
|
3
|
+
export class RestorationStateHandler {
|
|
4
|
+
constructor(options) {
|
|
5
|
+
this.cookieDomain = '.archive.org';
|
|
6
|
+
this.cookieExpiration = 30;
|
|
7
|
+
this.cookiePath = '/';
|
|
8
|
+
this.context = options.context;
|
|
9
|
+
}
|
|
10
|
+
persistState(state) {
|
|
11
|
+
if (state.displayMode)
|
|
12
|
+
this.persistViewStateToCookies(state.displayMode);
|
|
13
|
+
this.persistQueryStateToUrl(state);
|
|
14
|
+
}
|
|
15
|
+
getRestorationState() {
|
|
16
|
+
const restorationState = this.loadQueryStateFromUrl();
|
|
17
|
+
const displayMode = this.loadTileViewStateFromCookies();
|
|
18
|
+
restorationState.displayMode = displayMode;
|
|
19
|
+
return restorationState;
|
|
20
|
+
}
|
|
21
|
+
persistViewStateToCookies(displayMode) {
|
|
22
|
+
const gridState = displayMode === 'grid' ? 'tiles' : 'lists';
|
|
23
|
+
setCookie(`view-${this.context}`, gridState, {
|
|
24
|
+
domain: this.cookieDomain,
|
|
25
|
+
expires: this.cookieExpiration,
|
|
26
|
+
path: this.cookiePath,
|
|
27
|
+
});
|
|
28
|
+
const detailsState = displayMode === 'list-detail' ? 'showdetails' : '';
|
|
29
|
+
setCookie(`showdetails-${this.context}`, detailsState, {
|
|
30
|
+
domain: this.cookieDomain,
|
|
31
|
+
expires: this.cookieExpiration,
|
|
32
|
+
path: this.cookiePath,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
loadTileViewStateFromCookies() {
|
|
36
|
+
const viewState = getCookie(`view-${this.context}`);
|
|
37
|
+
const detailsState = getCookie(`showdetails-${this.context}`);
|
|
38
|
+
if (viewState === 'tiles' || viewState === undefined)
|
|
39
|
+
return 'grid';
|
|
40
|
+
if (detailsState === 'showdetails')
|
|
41
|
+
return 'list-detail';
|
|
42
|
+
return 'list-compact';
|
|
43
|
+
}
|
|
44
|
+
persistQueryStateToUrl(state) {
|
|
45
|
+
const url = new URL(window.location.href);
|
|
46
|
+
const { searchParams } = url;
|
|
47
|
+
searchParams.delete('sort');
|
|
48
|
+
searchParams.delete('query');
|
|
49
|
+
searchParams.delete('page');
|
|
50
|
+
searchParams.delete('and[]');
|
|
51
|
+
searchParams.delete('not[]');
|
|
52
|
+
if (state.sortParam) {
|
|
53
|
+
url.searchParams.set('sort', state.sortParam.asString);
|
|
54
|
+
}
|
|
55
|
+
if (state.baseQuery) {
|
|
56
|
+
url.searchParams.set('query', state.baseQuery);
|
|
57
|
+
}
|
|
58
|
+
if (state.currentPage) {
|
|
59
|
+
if (state.currentPage > 1) {
|
|
60
|
+
url.searchParams.set('page', state.currentPage.toString());
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
url.searchParams.delete('page');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (state.selectedFacets) {
|
|
67
|
+
for (const [facetName, facetValues] of Object.entries(state.selectedFacets)) {
|
|
68
|
+
const facetEntries = Object.entries(facetValues);
|
|
69
|
+
// eslint-disable-next-line no-continue
|
|
70
|
+
if (facetEntries.length === 0)
|
|
71
|
+
continue;
|
|
72
|
+
for (const [key, facetState] of facetEntries) {
|
|
73
|
+
const notValue = facetState === 'hidden';
|
|
74
|
+
const paramValue = `${facetName}:${key}`;
|
|
75
|
+
if (notValue) {
|
|
76
|
+
url.searchParams.append('not[]', paramValue);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
url.searchParams.append('and[]', paramValue);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (state.dateRangeQueryClause) {
|
|
85
|
+
url.searchParams.append('and[]', state.dateRangeQueryClause);
|
|
86
|
+
}
|
|
87
|
+
if (state.titleQuery) {
|
|
88
|
+
url.searchParams.append('and[]', state.titleQuery);
|
|
89
|
+
}
|
|
90
|
+
if (state.creatorQuery) {
|
|
91
|
+
url.searchParams.append('and[]', state.creatorQuery);
|
|
92
|
+
}
|
|
93
|
+
window.history.pushState({
|
|
94
|
+
page: state.currentPage,
|
|
95
|
+
query: state.baseQuery,
|
|
96
|
+
}, '', url);
|
|
97
|
+
}
|
|
98
|
+
loadQueryStateFromUrl() {
|
|
99
|
+
const url = new URL(window.location.href);
|
|
100
|
+
const pageNumber = url.searchParams.get('page');
|
|
101
|
+
const searchQuery = url.searchParams.get('query');
|
|
102
|
+
const sortQuery = url.searchParams.get('sort');
|
|
103
|
+
const facetAnds = url.searchParams.getAll('and[]');
|
|
104
|
+
const facetNots = url.searchParams.getAll('not[]');
|
|
105
|
+
const restorationState = {
|
|
106
|
+
selectedFacets: {
|
|
107
|
+
subject: {},
|
|
108
|
+
creator: {},
|
|
109
|
+
mediatype: {},
|
|
110
|
+
language: {},
|
|
111
|
+
collection: {},
|
|
112
|
+
year: {},
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
if (pageNumber) {
|
|
116
|
+
const parsed = parseInt(pageNumber, 10);
|
|
117
|
+
restorationState.currentPage = parsed;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
restorationState.currentPage = 1;
|
|
121
|
+
}
|
|
122
|
+
if (searchQuery) {
|
|
123
|
+
restorationState.baseQuery = searchQuery;
|
|
124
|
+
}
|
|
125
|
+
if (sortQuery) {
|
|
126
|
+
const [field, direction] = sortQuery.split(' ');
|
|
127
|
+
const metadataField = MetadataFieldToSortField[field];
|
|
128
|
+
if (metadataField) {
|
|
129
|
+
restorationState.selectedSort = metadataField;
|
|
130
|
+
}
|
|
131
|
+
if (direction === 'desc' || direction === 'asc') {
|
|
132
|
+
restorationState.sortDirection = direction;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (facetAnds) {
|
|
136
|
+
facetAnds.forEach(and => {
|
|
137
|
+
const [field, value] = and.split(':');
|
|
138
|
+
switch (field) {
|
|
139
|
+
case 'year': {
|
|
140
|
+
const [minDate, maxDate] = value.split(' TO ');
|
|
141
|
+
// we have two potential ways of filtering by date:
|
|
142
|
+
// the range with "date TO date" or the single date with "date"
|
|
143
|
+
// this is checking for the range case and if we don't have those, fall
|
|
144
|
+
// back to the single date case
|
|
145
|
+
if (minDate && maxDate) {
|
|
146
|
+
restorationState.minSelectedDate = minDate.substring(1, minDate.length);
|
|
147
|
+
restorationState.maxSelectedDate = maxDate.substring(0, maxDate.length - 1);
|
|
148
|
+
restorationState.dateRangeQueryClause = `year:${value}`;
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
restorationState.selectedFacets[field][value] =
|
|
152
|
+
'selected';
|
|
153
|
+
}
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
case 'firstTitle':
|
|
157
|
+
restorationState.selectedTitleFilter = value;
|
|
158
|
+
break;
|
|
159
|
+
case 'firstCreator':
|
|
160
|
+
restorationState.selectedCreatorFilter = value;
|
|
161
|
+
break;
|
|
162
|
+
default:
|
|
163
|
+
restorationState.selectedFacets[field][value] =
|
|
164
|
+
'selected';
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
if (facetNots) {
|
|
169
|
+
facetNots.forEach(not => {
|
|
170
|
+
const [field, value] = not.split(':');
|
|
171
|
+
restorationState.selectedFacets[field][value] = 'hidden';
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
return restorationState;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=restoration-state-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restoration-state-handler.js","sourceRoot":"","sources":["../../src/restoration-state-handler.ts"],"names":[],"mappings":"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","sourcesContent":["import { SortDirection, SortParam } from '@internetarchive/search-service';\nimport { getCookie, setCookie } from 'typescript-cookie';\nimport {\n MetadataFieldToSortField,\n MetadataSortField,\n FacetOption,\n CollectionBrowserContext,\n CollectionDisplayMode,\n SelectedFacets,\n SortField,\n} from './models';\n\nexport interface RestorationState {\n displayMode?: CollectionDisplayMode;\n sortParam?: SortParam;\n selectedSort?: SortField;\n sortDirection?: SortDirection;\n selectedFacets: SelectedFacets;\n baseQuery?: string;\n currentPage?: number;\n dateRangeQueryClause?: string;\n titleQuery?: string;\n creatorQuery?: string;\n minSelectedDate?: string;\n maxSelectedDate?: string;\n selectedTitleFilter?: string;\n selectedCreatorFilter?: string;\n}\n\nexport interface RestorationStateHandlerInterface {\n persistState(state: RestorationState): void;\n getRestorationState(): RestorationState;\n}\n\nexport class RestorationStateHandler\n implements RestorationStateHandlerInterface\n{\n private context: CollectionBrowserContext;\n\n private cookieDomain = '.archive.org';\n\n private cookieExpiration = 30;\n\n private cookiePath = '/';\n\n constructor(options: { context: CollectionBrowserContext }) {\n this.context = options.context;\n }\n\n persistState(state: RestorationState): void {\n if (state.displayMode) this.persistViewStateToCookies(state.displayMode);\n this.persistQueryStateToUrl(state);\n }\n\n getRestorationState(): RestorationState {\n const restorationState = this.loadQueryStateFromUrl();\n const displayMode = this.loadTileViewStateFromCookies();\n restorationState.displayMode = displayMode;\n return restorationState;\n }\n\n private persistViewStateToCookies(displayMode: CollectionDisplayMode) {\n const gridState = displayMode === 'grid' ? 'tiles' : 'lists';\n setCookie(`view-${this.context}`, gridState, {\n domain: this.cookieDomain,\n expires: this.cookieExpiration,\n path: this.cookiePath,\n });\n const detailsState = displayMode === 'list-detail' ? 'showdetails' : '';\n setCookie(`showdetails-${this.context}`, detailsState, {\n domain: this.cookieDomain,\n expires: this.cookieExpiration,\n path: this.cookiePath,\n });\n }\n\n private loadTileViewStateFromCookies(): CollectionDisplayMode {\n const viewState = getCookie(`view-${this.context}`);\n const detailsState = getCookie(`showdetails-${this.context}`);\n if (viewState === 'tiles' || viewState === undefined) return 'grid';\n if (detailsState === 'showdetails') return 'list-detail';\n return 'list-compact';\n }\n\n private persistQueryStateToUrl(state: RestorationState) {\n const url = new URL(window.location.href);\n const { searchParams } = url;\n searchParams.delete('sort');\n searchParams.delete('query');\n searchParams.delete('page');\n searchParams.delete('and[]');\n searchParams.delete('not[]');\n\n if (state.sortParam) {\n url.searchParams.set('sort', state.sortParam.asString);\n }\n\n if (state.baseQuery) {\n url.searchParams.set('query', state.baseQuery);\n }\n\n if (state.currentPage) {\n if (state.currentPage > 1) {\n url.searchParams.set('page', state.currentPage.toString());\n } else {\n url.searchParams.delete('page');\n }\n }\n\n if (state.selectedFacets) {\n for (const [facetName, facetValues] of Object.entries(\n state.selectedFacets\n )) {\n const facetEntries = Object.entries(facetValues);\n // eslint-disable-next-line no-continue\n if (facetEntries.length === 0) continue;\n for (const [key, facetState] of facetEntries) {\n const notValue = facetState === 'hidden';\n const paramValue = `${facetName}:${key}`;\n if (notValue) {\n url.searchParams.append('not[]', paramValue);\n } else {\n url.searchParams.append('and[]', paramValue);\n }\n }\n }\n }\n\n if (state.dateRangeQueryClause) {\n url.searchParams.append('and[]', state.dateRangeQueryClause);\n }\n if (state.titleQuery) {\n url.searchParams.append('and[]', state.titleQuery);\n }\n if (state.creatorQuery) {\n url.searchParams.append('and[]', state.creatorQuery);\n }\n\n window.history.pushState(\n {\n page: state.currentPage,\n query: state.baseQuery,\n },\n '',\n url\n );\n }\n\n private loadQueryStateFromUrl(): RestorationState {\n const url = new URL(window.location.href);\n const pageNumber = url.searchParams.get('page');\n const searchQuery = url.searchParams.get('query');\n const sortQuery = url.searchParams.get('sort');\n const facetAnds = url.searchParams.getAll('and[]');\n const facetNots = url.searchParams.getAll('not[]');\n\n const restorationState: RestorationState = {\n selectedFacets: {\n subject: {},\n creator: {},\n mediatype: {},\n language: {},\n collection: {},\n year: {},\n },\n };\n\n if (pageNumber) {\n const parsed = parseInt(pageNumber, 10);\n restorationState.currentPage = parsed;\n } else {\n restorationState.currentPage = 1;\n }\n if (searchQuery) {\n restorationState.baseQuery = searchQuery;\n }\n if (sortQuery) {\n const [field, direction] = sortQuery.split(' ');\n const metadataField =\n MetadataFieldToSortField[field as MetadataSortField];\n if (metadataField) {\n restorationState.selectedSort = metadataField;\n }\n if (direction === 'desc' || direction === 'asc') {\n restorationState.sortDirection = direction as SortDirection;\n }\n }\n if (facetAnds) {\n facetAnds.forEach(and => {\n const [field, value] = and.split(':');\n switch (field) {\n case 'year': {\n const [minDate, maxDate] = value.split(' TO ');\n // we have two potential ways of filtering by date:\n // the range with \"date TO date\" or the single date with \"date\"\n // this is checking for the range case and if we don't have those, fall\n // back to the single date case\n if (minDate && maxDate) {\n restorationState.minSelectedDate = minDate.substring(\n 1,\n minDate.length\n );\n restorationState.maxSelectedDate = maxDate.substring(\n 0,\n maxDate.length - 1\n );\n restorationState.dateRangeQueryClause = `year:${value}`;\n } else {\n restorationState.selectedFacets[field as FacetOption][value] =\n 'selected';\n }\n break;\n }\n case 'firstTitle':\n restorationState.selectedTitleFilter = value;\n break;\n case 'firstCreator':\n restorationState.selectedCreatorFilter = value;\n break;\n default:\n restorationState.selectedFacets[field as FacetOption][value] =\n 'selected';\n }\n });\n }\n if (facetNots) {\n facetNots.forEach(not => {\n const [field, value] = not.split(':');\n restorationState.selectedFacets[field as FacetOption][value] = 'hidden';\n });\n }\n return restorationState;\n }\n}\n"]}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { LitElement } from 'lit';
|
|
2
2
|
export declare class AlphaBar extends LitElement {
|
|
3
|
-
|
|
4
|
-
selectedLetter?: string;
|
|
3
|
+
selectedLetter: string | null;
|
|
5
4
|
private get selectedUppercaseLetter();
|
|
6
5
|
render(): import("lit-html").TemplateResult<1>;
|
|
7
6
|
private letterClicked;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import { LitElement, html, css
|
|
2
|
+
import { LitElement, html, css } from 'lit';
|
|
3
3
|
import { customElement, property } from 'lit/decorators.js';
|
|
4
4
|
let AlphaBar = class AlphaBar extends LitElement {
|
|
5
5
|
constructor() {
|
|
6
6
|
super(...arguments);
|
|
7
|
+
this.selectedLetter = null;
|
|
7
8
|
this.alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
|
|
8
9
|
}
|
|
9
10
|
get selectedUppercaseLetter() {
|
|
@@ -12,16 +13,21 @@ let AlphaBar = class AlphaBar extends LitElement {
|
|
|
12
13
|
}
|
|
13
14
|
render() {
|
|
14
15
|
return html `
|
|
15
|
-
<h1>${this.headline}</h1>
|
|
16
16
|
<div id="container">
|
|
17
17
|
<ul>
|
|
18
18
|
${this.alphabet.map(letter => html `
|
|
19
19
|
<li
|
|
20
20
|
class=${letter === this.selectedUppercaseLetter
|
|
21
21
|
? 'selected'
|
|
22
|
-
:
|
|
22
|
+
: ''}
|
|
23
23
|
>
|
|
24
|
-
<a
|
|
24
|
+
<a
|
|
25
|
+
href="#"
|
|
26
|
+
@click=${(e) => {
|
|
27
|
+
e.preventDefault();
|
|
28
|
+
this.letterClicked(letter);
|
|
29
|
+
}}
|
|
30
|
+
>
|
|
25
31
|
${letter}
|
|
26
32
|
</a>
|
|
27
33
|
</li>
|
|
@@ -32,7 +38,7 @@ let AlphaBar = class AlphaBar extends LitElement {
|
|
|
32
38
|
}
|
|
33
39
|
letterClicked(letter) {
|
|
34
40
|
if (letter === this.selectedUppercaseLetter) {
|
|
35
|
-
this.selectedLetter =
|
|
41
|
+
this.selectedLetter = null;
|
|
36
42
|
}
|
|
37
43
|
else {
|
|
38
44
|
this.selectedLetter = letter;
|
|
@@ -50,6 +56,7 @@ AlphaBar.styles = css `
|
|
|
50
56
|
#container {
|
|
51
57
|
background-color: #ddd;
|
|
52
58
|
color: #333;
|
|
59
|
+
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.5);
|
|
53
60
|
}
|
|
54
61
|
|
|
55
62
|
ul {
|
|
@@ -60,10 +67,16 @@ AlphaBar.styles = css `
|
|
|
60
67
|
justify-content: space-between;
|
|
61
68
|
}
|
|
62
69
|
|
|
70
|
+
ul li {
|
|
71
|
+
flex: 1;
|
|
72
|
+
text-align: center;
|
|
73
|
+
max-width: 2.5rem;
|
|
74
|
+
}
|
|
75
|
+
|
|
63
76
|
a {
|
|
64
77
|
color: #333;
|
|
65
78
|
text-decoration: none;
|
|
66
|
-
padding: 0.5rem 0
|
|
79
|
+
padding: 0.5rem 0;
|
|
67
80
|
display: block;
|
|
68
81
|
}
|
|
69
82
|
|
|
@@ -75,9 +88,6 @@ AlphaBar.styles = css `
|
|
|
75
88
|
color: white;
|
|
76
89
|
}
|
|
77
90
|
`;
|
|
78
|
-
__decorate([
|
|
79
|
-
property({ type: String })
|
|
80
|
-
], AlphaBar.prototype, "headline", void 0);
|
|
81
91
|
__decorate([
|
|
82
92
|
property({ type: String })
|
|
83
93
|
], AlphaBar.prototype, "selectedLetter", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alpha-bar.js","sourceRoot":"","sources":["../../../src/sort-filter-bar/alpha-bar.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"alpha-bar.js","sourceRoot":"","sources":["../../../src/sort-filter-bar/alpha-bar.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG5D,IAAa,QAAQ,GAArB,MAAa,QAAS,SAAQ,UAAU;IAAxC;;QAC8B,mBAAc,GAAkB,IAAI,CAAC;QAgDhD,aAAQ,GAAG,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IA0CrE,CAAC;IAxFC,IAAY,uBAAuB;;QACjC,OAAO,MAAA,IAAI,CAAC,cAAc,0CAAE,WAAW,EAAE,CAAC;IAC5C,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;;YAGH,IAAI,CAAC,QAAQ,CAAC,GAAG,CACjB,MAAM,CAAC,EAAE,CACP,IAAI,CAAA;;0BAEQ,MAAM,KAAK,IAAI,CAAC,uBAAuB;YAC7C,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,EAAE;;;;6BAIK,CAAC,CAAQ,EAAE,EAAE;YACpB,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;;sBAEC,MAAM;;;eAGb,CACJ;;;KAGN,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,MAAc;QAClC,IAAI,MAAM,KAAK,IAAI,CAAC,uBAAuB,EAAE;YAC3C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;SAC5B;aAAM;YACL,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;SAC9B;QACD,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,eAAe,EAAE;YAC/B,MAAM,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,uBAAuB,EAAE;SACzD,CAAC,CACH,CAAC;IACJ,CAAC;CA4CF,CAAA;AAxCQ,eAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuClB,CAAC;AAzF0B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gDAAsC;AADtD,QAAQ;IADpB,aAAa,CAAC,WAAW,CAAC;GACd,QAAQ,CA2FpB;SA3FY,QAAQ","sourcesContent":["import { LitElement, html, css } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\n@customElement('alpha-bar')\nexport class AlphaBar extends LitElement {\n @property({ type: String }) selectedLetter: string | null = null;\n\n private get selectedUppercaseLetter(): string | undefined {\n return this.selectedLetter?.toUpperCase();\n }\n\n render() {\n return html`\n <div id=\"container\">\n <ul>\n ${this.alphabet.map(\n letter =>\n html`\n <li\n class=${letter === this.selectedUppercaseLetter\n ? 'selected'\n : ''}\n >\n <a\n href=\"#\"\n @click=${(e: Event) => {\n e.preventDefault();\n this.letterClicked(letter);\n }}\n >\n ${letter}\n </a>\n </li>\n `\n )}\n </ul>\n </div>\n `;\n }\n\n private letterClicked(letter: string) {\n if (letter === this.selectedUppercaseLetter) {\n this.selectedLetter = null;\n } else {\n this.selectedLetter = letter;\n }\n this.dispatchEvent(\n new CustomEvent('letterChanged', {\n detail: { selectedLetter: this.selectedUppercaseLetter },\n })\n );\n }\n\n private readonly alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');\n\n static styles = css`\n h1 {\n font-size: 1.2rem;\n }\n\n #container {\n background-color: #ddd;\n color: #333;\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.5);\n }\n\n ul {\n list-style: none;\n display: flex;\n margin: 0;\n padding: 0.5rem 1rem;\n justify-content: space-between;\n }\n\n ul li {\n flex: 1;\n text-align: center;\n max-width: 2.5rem;\n }\n\n a {\n color: #333;\n text-decoration: none;\n padding: 0.5rem 0;\n display: block;\n }\n\n .selected {\n background-color: darkgray;\n }\n\n .selected a {\n color: white;\n }\n `;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const compactIcon: import("lit-html").TemplateResult<2>;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { svg } from 'lit';
|
|
2
|
+
export const compactIcon = svg `
|
|
3
|
+
<svg viewBox="0 0 100 100" xmlns = "http://www.w3.org/2000/svg" > <path d="m96.9964435 6h-93.90621462c-.91561615 0-1.65899868-.29021372-2.23014758-.87064117-.57114891-.58042745-.85783455-1.3048369-.86005692-2.17322835 0-.81214848.28668564-1.50731158.86005692-2.08548931.57337127-.57817773 1.3167538-.86839145 2.23014758-.87064117h93.90621462c.800053 0 1.5012105.29021372 2.1034726.87064117.602262.58042745.9022819 1.27559055.9000718 2.08548931 0 .86839145-.3000321 1.5928009-.9000718 2.17322835-.6000398.58042745-1.3011973.87064117-2.1034726.87064117zm-93.90621462 9.6666667h93.90621462c.800053 0 1.5012105.2861891 2.1034726.8585673.602262.5723782.9022819 1.2579009.9000718 2.0565682 0 .8563487-.3000321 1.5851326-.9000718 2.1863516-.6000398.6012189-1.3011973.9007192-2.1034726.8985129h-93.90621462c-.91561615 0-1.65899868-.2995125-2.23014758-.8985129-.57114891-.5990005-.85783455-1.3277843-.86005692-2.1863516 0-.8008858.28668564-1.4864086.86005692-2.0565682.57337127-.5701597 1.3167538-.8563488 2.23014758-.8585673zm0 15.6700431h93.90621462c.800053 0 1.5012105.303883 2.1034726.9116489.602262.6077659.9022819 1.2886888.9000718 2.0427687-.0022346.7540799-.3022545 1.4496342-.9000718 2.0866629-.5978174.6370287-1.2989749.955543-2.1034726.955543h-93.90621462c-.85783454 0-1.58788286-.3038829-2.19014494-.9116488s-.90228193-1.3179516-.90007182-2.1305571c.00223463-.8126055.30225448-1.5081599.90007182-2.0866629.59781734-.5785031 1.32786566-.8688802 2.19014494-.8711312zm0 15.6632902h93.90621462c.800053 0 1.5012105.2861892 2.1034726.8585675.602262.5723783.9022819 1.2290603.9000718 1.9700462 0 .7986674-.3144775 1.5274514-.943408 2.186352-.6289306.6589006-1.3156427.9872417-2.0601364.9850343h-93.90621462c-.85783454 0-1.58788286-.3139318-2.19014494-.9417731-.60226208-.6278414-.90228193-1.3699365-.90007182-2.2262854 0-.7986674.2866979-1.4697699.86006918-2.0133074.57337127-.5435376 1.3167538-.8153063 2.23014758-.8153063zm0 15.6666667h93.90621462c.800053 0 1.5012105.3038947 2.1034726.9116593.602262.6077647.9022819 1.3472117.9000718 2.218341 0 .7540783-.3000321 1.4203685-.9000718 1.9988703-.6000398.5785019-1.3011973.8688784-2.1034726.8711294h-93.90621462c-.91561615 0-1.65899868-.2757451-2.23014758-.8272352-.57114891-.5514902-.85783455-1.2324117-.86005692-2.0427645 0-.8688784.28668564-1.6083253.86005692-2.218341.57337127-.6100156 1.3167538-.9138979 2.23014758-.9116593zm0 15.6666666h93.90621462c.800053 0 1.5012105.3038948 2.1034726.9116594.602262.6077646.9022819 1.3472116.9000718 2.2183409 0 .7540784-.3000321 1.4203685-.9000718 1.9988704-.6000398.5785019-1.3011973.8688784-2.1034726.8711293h-93.90621462c-.91561615 0-1.65899868-.275745-2.23014758-.8272352-.57114891-.5514901-.85783455-1.2324116-.86005692-2.0427645 0-.8688783.28668564-1.6083253.86005692-2.2183409.57337127-.6100156 1.3167538-.9138979 2.23014758-.9116594zm0 15.6666667h93.90621462c.800053 0 1.5012105.3038947 2.1034726.9116594.602262.6077646.9022819 1.3472116.9000718 2.2183409 0 .7540784-.3000321 1.4203685-.9000718 1.9988704-.6000398.5785019-1.3011973.8688783-2.1034726.8711293h-93.90621462c-.91561615 0-1.65899868-.2757451-2.23014758-.8272352-.57114891-.5514901-.85783455-1.2324116-.86005692-2.0427645 0-.8688783.28668564-1.6083253.86005692-2.2183409.57337127-.6100156 1.3167538-.913898 2.23014758-.9116594z" /> </svg>
|
|
4
|
+
`;
|
|
5
|
+
//# sourceMappingURL=compact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compact.js","sourceRoot":"","sources":["../../../../src/sort-filter-bar/img/compact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAA;;CAE7B,CAAC","sourcesContent":["import { svg } from 'lit';\n\nexport const compactIcon = svg`\n<svg viewBox=\"0 0 100 100\" xmlns = \"http://www.w3.org/2000/svg\" > <path d=\"m96.9964435 6h-93.90621462c-.91561615 0-1.65899868-.29021372-2.23014758-.87064117-.57114891-.58042745-.85783455-1.3048369-.86005692-2.17322835 0-.81214848.28668564-1.50731158.86005692-2.08548931.57337127-.57817773 1.3167538-.86839145 2.23014758-.87064117h93.90621462c.800053 0 1.5012105.29021372 2.1034726.87064117.602262.58042745.9022819 1.27559055.9000718 2.08548931 0 .86839145-.3000321 1.5928009-.9000718 2.17322835-.6000398.58042745-1.3011973.87064117-2.1034726.87064117zm-93.90621462 9.6666667h93.90621462c.800053 0 1.5012105.2861891 2.1034726.8585673.602262.5723782.9022819 1.2579009.9000718 2.0565682 0 .8563487-.3000321 1.5851326-.9000718 2.1863516-.6000398.6012189-1.3011973.9007192-2.1034726.8985129h-93.90621462c-.91561615 0-1.65899868-.2995125-2.23014758-.8985129-.57114891-.5990005-.85783455-1.3277843-.86005692-2.1863516 0-.8008858.28668564-1.4864086.86005692-2.0565682.57337127-.5701597 1.3167538-.8563488 2.23014758-.8585673zm0 15.6700431h93.90621462c.800053 0 1.5012105.303883 2.1034726.9116489.602262.6077659.9022819 1.2886888.9000718 2.0427687-.0022346.7540799-.3022545 1.4496342-.9000718 2.0866629-.5978174.6370287-1.2989749.955543-2.1034726.955543h-93.90621462c-.85783454 0-1.58788286-.3038829-2.19014494-.9116488s-.90228193-1.3179516-.90007182-2.1305571c.00223463-.8126055.30225448-1.5081599.90007182-2.0866629.59781734-.5785031 1.32786566-.8688802 2.19014494-.8711312zm0 15.6632902h93.90621462c.800053 0 1.5012105.2861892 2.1034726.8585675.602262.5723783.9022819 1.2290603.9000718 1.9700462 0 .7986674-.3144775 1.5274514-.943408 2.186352-.6289306.6589006-1.3156427.9872417-2.0601364.9850343h-93.90621462c-.85783454 0-1.58788286-.3139318-2.19014494-.9417731-.60226208-.6278414-.90228193-1.3699365-.90007182-2.2262854 0-.7986674.2866979-1.4697699.86006918-2.0133074.57337127-.5435376 1.3167538-.8153063 2.23014758-.8153063zm0 15.6666667h93.90621462c.800053 0 1.5012105.3038947 2.1034726.9116593.602262.6077647.9022819 1.3472117.9000718 2.218341 0 .7540783-.3000321 1.4203685-.9000718 1.9988703-.6000398.5785019-1.3011973.8688784-2.1034726.8711294h-93.90621462c-.91561615 0-1.65899868-.2757451-2.23014758-.8272352-.57114891-.5514902-.85783455-1.2324117-.86005692-2.0427645 0-.8688784.28668564-1.6083253.86005692-2.218341.57337127-.6100156 1.3167538-.9138979 2.23014758-.9116593zm0 15.6666666h93.90621462c.800053 0 1.5012105.3038948 2.1034726.9116594.602262.6077646.9022819 1.3472116.9000718 2.2183409 0 .7540784-.3000321 1.4203685-.9000718 1.9988704-.6000398.5785019-1.3011973.8688784-2.1034726.8711293h-93.90621462c-.91561615 0-1.65899868-.275745-2.23014758-.8272352-.57114891-.5514901-.85783455-1.2324116-.86005692-2.0427645 0-.8688783.28668564-1.6083253.86005692-2.2183409.57337127-.6100156 1.3167538-.9138979 2.23014758-.9116594zm0 15.6666667h93.90621462c.800053 0 1.5012105.3038947 2.1034726.9116594.602262.6077646.9022819 1.3472116.9000718 2.2183409 0 .7540784-.3000321 1.4203685-.9000718 1.9988704-.6000398.5785019-1.3011973.8688783-2.1034726.8711293h-93.90621462c-.91561615 0-1.65899868-.2757451-2.23014758-.8272352-.57114891-.5514901-.85783455-1.2324116-.86005692-2.0427645 0-.8688783.28668564-1.6083253.86005692-2.2183409.57337127-.6100156 1.3167538-.913898 2.23014758-.9116594z\" /> </svg>\n`;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const gridIcon: import("lit-html").TemplateResult<2>;
|